summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-04-22 22:14:39 +0000
committerKarl Berry <karl@freefriends.org>2016-04-22 22:14:39 +0000
commitfc4466b32ed330a956ac603b00fd145524cff49a (patch)
tree2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master
parent50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff)
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rwxr-xr-xMaster/bin/win32/contextjit.exebin0 -> 4608 bytes
-rwxr-xr-xMaster/bin/win32/mtxrun.lua1948
-rw-r--r--Master/texmf-dist/bibtex/bst/context/mkii/cont-ab.bst (renamed from Master/texmf-dist/bibtex/bst/context/cont-ab.bst)0
-rw-r--r--Master/texmf-dist/bibtex/bst/context/mkii/cont-au.bst (renamed from Master/texmf-dist/bibtex/bst/context/cont-au.bst)0
-rw-r--r--Master/texmf-dist/bibtex/bst/context/mkii/cont-no.bst (renamed from Master/texmf-dist/bibtex/bst/context/cont-no.bst)0
-rw-r--r--Master/texmf-dist/bibtex/bst/context/mkii/cont-ti.bst (renamed from Master/texmf-dist/bibtex/bst/context/cont-ti.bst)0
-rw-r--r--Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.pdfbin221437 -> 212702 bytes
-rw-r--r--Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.tex10
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-context.lua4
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua16
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-metafun.lua4
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-tex.lua6
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-cpp.lua4
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-mps.lua3
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-sql.lua238
-rw-r--r--Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-tex.lua3
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context-data-context.properties347
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context-data-interfaces.properties8666
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context-data-metafun.properties60
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context-data-tex.properties397
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context-external.properties2
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-context.properties2
-rw-r--r--Master/texmf-dist/context/data/scite/context/scite-ctx.properties22
-rw-r--r--Master/texmf-dist/doc/context/documents/general/columnsets/columnsets.pdfbin0 -> 4526014 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.epubbin10194 -> 10267 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.pdfbin19204 -> 19222 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv.pdfbin98659 -> 99316 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/languages-mkiv.pdfbin0 -> 657878 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/lua-mkiv.pdfbin0 -> 57313 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/luatex.pdfbin0 -> 991216 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/ma-cb-en.pdfbin0 -> 2843652 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/mreadme.pdfbin40702 -> 40644 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/spacing-mkiv.pdfbin0 -> 38452 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/sql-mkiv.pdfbin0 -> 90246 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/swiglib-mkiv.pdfbin169009 -> 169592 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/templates-mkiv.pdfbin0 -> 92388 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/tiptrick.pdfbin47182 -> 47419 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/tools-mkiv.pdfbin374423 -> 374627 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/units-mkiv.pdfbin163696 -> 164604 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/workflows-mkiv.pdfbin94311 -> 94468 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/xml-mkiv.pdfbin0 -> 1308267 bytes
-rw-r--r--Master/texmf-dist/doc/context/documents/general/manuals/xtables-mkiv.pdfbin136336 -> 136910 bytes
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/ctxtools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/imgtopdf.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/pdftools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/pstopdf.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/rlxtools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/texexec.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/texmfstart.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/textools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/texutil.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/tmftools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkii/xmltools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/context.html7
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/context.man11
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/context.xml11
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/luatools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-babel.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-base.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.html55
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.man33
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.xml28
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-cache.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-chars.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-check.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-colors.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.html7
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.man11
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.xml11
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-epub.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-fcd.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-flac.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.html8
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.man13
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.xml10
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-grep.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.html4
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.man10
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.xml4
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-metapost.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-metatex.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-modules.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-package.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-patterns.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-pdf.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-plain.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-profile.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-rsync.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-scite.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-server.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-texworks.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-timing.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-tools.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.html48
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.man27
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.xml15
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-unzip.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.html1
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.man5
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.xml1
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-watch.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtx-youless.man2
-rw-r--r--Master/texmf-dist/doc/context/scripts/mkiv/mtxrun.man2
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-000.tex63
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-001.tex17
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-002.tex17
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-003.tex35
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-004.tex32
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-005.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-006.tex35
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-007.tex43
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-101.tex30
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-102.tex36
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-103.tex37
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-201.tex31
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-202.tex32
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-203.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-204.tex41
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-205.tex42
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-206.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-301.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-401.tex26
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-402.tex24
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-403.tex23
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-404.tex34
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-405.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-601.tex29
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-701.tex23
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-702.tex27
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-703.tex34
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-704.tex69
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-801.tex19
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-802.tex22
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-803.tex26
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-804.tex26
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-805.tex26
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-806.tex26
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-901.tex38
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-902.tex38
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-903.tex41
-rw-r--r--Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets.tex873
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-appendix.tex48
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-back.tex14
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-basics.tex348
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-contents.tex13
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-cover.tex133
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-environment.tex347
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-goodies.tex138
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-hyphenation.tex810
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-introduction.tex69
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-labels.tex141
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-mkiv.tex38
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-numbering.tex295
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-sorting.tex235
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/lua/lua-mkiv.tex129
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-contents.tex20
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex879
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-fonts.tex717
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-introduction.tex121
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-languages.tex705
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-logos.tex19
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-lua.tex548
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-math.tex1049
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-modifications.tex867
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-nodes.tex1804
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-style.tex355
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex70
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex.tex37
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-contents.tex9
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-introduction.tex19
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex108
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex16
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-style.tex55
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex37
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/sql/sql-mkiv.tex482
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/cont-en-extra.xml749
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.bib7
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.pdfbin0 -> 17205 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.tex30
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex73
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex40
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex63
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex77
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex64
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex71
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex154
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex16
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex94
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex55
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex94
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex117
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex106
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex79
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex258
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex299
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex99
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex58
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex144
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex46
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex53
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex135
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex310
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex33
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex297
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex241
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex100
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex524
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex330
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex75
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex45
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex93
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex208
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex280
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex38
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex44
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex148
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex83
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex41
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex54
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex71
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex60
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex133
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex17
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex89
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex385
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex174
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex163
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex55
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex32
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex101
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex68
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex1079
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.pdfbin0 -> 2843652 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.tex86
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-language.tex21
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/en/sounds-001.tex34
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/cow.pdf (renamed from Master/texmf-dist/tex/context/sample/cow.pdf)bin5526 -> 5526 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md830
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf527
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md1371
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf1216
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps2799
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp1282
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdfbin0 -> 13318 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-01.pngbin0 -> 174703 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-03.pngbin0 -> 170986 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-04.pngbin0 -> 174074 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-07.pngbin0 -> 175370 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-08.pngbin0 -> 183539 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-12.pngbin0 -> 163156 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-13.pngbin0 -> 227362 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-15.pngbin0 -> 257643 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-16.pngbin0 -> 193612 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-18.pngbin0 -> 140723 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-19.pngbin0 -> 193286 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-20.pngbin0 -> 158057 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-21.pngbin0 -> 169516 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-22.pngbin0 -> 239855 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png (renamed from Master/texmf-dist/tex/context/sample/mill.png)bin154869 -> 154869 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-24.pngbin0 -> 164197 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-25.pngbin0 -> 175417 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-26.pngbin0 -> 206368 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.pdfbin0 -> 11889 bytes
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.tex20
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex7
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-colofon.tex95
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-copyright.tex41
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-graphics.tex266
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-links.tex268
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-screen.tex201
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-style.tex678
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb.tex17
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/templates/templates-mkiv.tex273
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/workflows/workflows-injectors.tex16
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml15
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml15
-rw-r--r--Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv.tex3735
-rw-r--r--Master/texmf-dist/doc/man/man1/context.111
-rw-r--r--Master/texmf-dist/doc/man/man1/context.man1.pdfbin7742 -> 21431 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/luatools.12
-rw-r--r--Master/texmf-dist/doc/man/man1/luatools.man1.pdfbin5105 -> 18421 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-babel.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-babel.man1.pdfbin3672 -> 16108 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-base.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-base.man1.pdfbin5124 -> 18441 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-bibtex.133
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-bibtex.man1.pdfbin0 -> 14827 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-cache.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-cache.man1.pdfbin3694 -> 15820 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-chars.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-chars.man1.pdfbin3565 -> 15813 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-check.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-check.man1.pdfbin3554 -> 15975 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-colors.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-colors.man1.pdfbin3442 -> 14800 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-context.111
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-context.man1.pdfbin7742 -> 21431 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-epub.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-epub.man1.pdfbin3826 -> 16489 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-fcd.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-fcd.man1.pdfbin3959 -> 16754 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-flac.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-flac.man1.pdfbin3668 -> 15723 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-fonts.113
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-fonts.man1.pdfbin4213 -> 18052 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-grep.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-grep.man1.pdfbin3545 -> 15660 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-interface.110
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-interface.man1.pdfbin4105 -> 17357 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-metapost.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-metapost.man1.pdfbin3711 -> 15741 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-metatex.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-metatex.man1.pdfbin3630 -> 15253 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-modules.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-modules.man1.pdfbin3760 -> 16073 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-package.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-package.man1.pdfbin3568 -> 15725 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-patterns.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-patterns.man1.pdfbin4137 -> 16861 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-pdf.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-pdf.man1.pdfbin3695 -> 16029 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-plain.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-plain.man1.pdfbin3709 -> 15788 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-profile.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-profile.man1.pdfbin3690 -> 16365 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-rsync.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-rsync.man1.pdfbin3638 -> 15783 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-scite.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-scite.man1.pdfbin3752 -> 15878 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-server.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-server.man1.pdfbin3752 -> 16014 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-texworks.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-texworks.man1.pdfbin3557 -> 15331 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-timing.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-timing.man1.pdfbin3679 -> 15477 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-tools.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-tools.man1.pdfbin3995 -> 16727 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-unicode.127
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-unicode.man1.pdfbin0 -> 15225 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-unzip.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-unzip.man1.pdfbin3597 -> 15640 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-update.15
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-update.man1.pdfbin5029 -> 17604 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-watch.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-watch.man1.pdfbin3867 -> 16561 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-youless.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtx-youless.man1.pdfbin3858 -> 16126 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/mtxrun.12
-rw-r--r--Master/texmf-dist/doc/man/man1/mtxrun.man1.pdfbin7216 -> 20513 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/texexec.12
-rw-r--r--Master/texmf-dist/doc/man/man1/texexec.man1.pdfbin4713 -> 17189 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/texmfstart.12
-rw-r--r--Master/texmf-dist/doc/man/man1/texmfstart.man1.pdfbin7216 -> 20513 bytes
-rw-r--r--Master/texmf-dist/metapost/context/base/common/metafun.mp (renamed from Master/texmf-dist/metapost/context/base/metafun.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/base/common/mp-back.mp5
-rw-r--r--Master/texmf-dist/metapost/context/base/common/mp-fobg.mp5
-rw-r--r--Master/texmf-dist/metapost/context/base/common/mp-symb.mp6
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/metafun.mpii (renamed from Master/texmf-dist/metapost/context/base/metafun.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-back.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-back.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-base.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-base.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-butt.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-butt.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-char.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-char.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-core.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-core.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-figs.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-figs.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-fobg.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-fobg.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-form.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-form.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-func.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-func.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-grid.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-grid.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-grph.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-grph.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-page.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-page.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-shap.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-shap.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-spec.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-spec.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-step.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-step.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-text.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-tool.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-tool.mpii)2
-rw-r--r--Master/texmf-dist/metapost/context/base/mpii/mp-txts.mpii (renamed from Master/texmf-dist/metapost/context/base/mp-txts.mpii)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv (renamed from Master/texmf-dist/metapost/context/base/metafun.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-abck.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-abck.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-apos.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-apos.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-asnc.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-back.mpiv205
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-bare.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-base.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-butt.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-butt.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-char.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-char.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-chem.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-chem.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-core.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-core.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-cows.mpiv156
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-crop.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-crop.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-figs.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-figs.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-fobg.mpiv87
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-form.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-form.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-func.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-func.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-grap.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-grid.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-grid.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-grph.mpiv)177
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-idea.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-idea.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-luas.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-mlib.mpiv)269
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-page.mpiv)29
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-shap.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-shap.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-step.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-step.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-symb.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-symb.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-text.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-text.mpiv)0
-rw-r--r--Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv (renamed from Master/texmf-dist/metapost/context/base/mp-tool.mpiv)123
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.mp (renamed from Master/texmf-dist/metapost/context/fonts/bidi-symbols.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.tex (renamed from Master/texmf-dist/metapost/context/fonts/bidi-symbols.tex)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.mp (renamed from Master/texmf-dist/metapost/context/fonts/demo-symbols.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.tex (renamed from Master/texmf-dist/metapost/context/fonts/demo-symbols.tex)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-bold.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont-bold.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-boldslanted.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont-boldslanted.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-characters.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont-characters.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-definitions.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont-definitions.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-slanted.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont-slanted.mp)0
-rw-r--r--Master/texmf-dist/metapost/context/fonts/mpiv/punkfont.mp (renamed from Master/texmf-dist/metapost/context/fonts/punkfont.mp)0
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-chars.lua178
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-check.lua2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-context.lua175
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-context.xml11
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-convert.lua6
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-fonts.lua149
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-interface.lua403
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-package.lua2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-patterns.lua3
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-plain.lua11
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-profile.lua17
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua1098
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server.lua113
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-unicode.lua525
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-update.lua62
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtxlibs.lua12
-rwxr-xr-xMaster/texmf-dist/scripts/context/lua/mtxrun.lua1948
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/install/first-setup.bat2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/contextjit.exebin0 -> 4608 bytes
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua1948
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/mtxrun1948
-rw-r--r--Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua1948
-rw-r--r--Master/texmf-dist/tex/context/base/char-cjk.lua365
-rw-r--r--Master/texmf-dist/tex/context/base/context-version.pdfbin4177 -> 4253 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/core-env.lua261
-rw-r--r--Master/texmf-dist/tex/context/base/font-map.lua535
-rw-r--r--Master/texmf-dist/tex/context/base/font-mis.lua117
-rw-r--r--Master/texmf-dist/tex/context/base/font-otc.lua349
-rw-r--r--Master/texmf-dist/tex/context/base/font-oth.lua51
-rw-r--r--Master/texmf-dist/tex/context/base/font-oti.lua91
-rw-r--r--Master/texmf-dist/tex/context/base/font-ott.lua1119
-rw-r--r--Master/texmf-dist/tex/context/base/lang-all.xml376
-rw-r--r--Master/texmf-dist/tex/context/base/lang-frq-de.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/lang-frq-en.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/lang-frq-nl.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.lua186
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.lua142
-rw-r--r--Master/texmf-dist/tex/context/base/m-datastrc.tex228
-rw-r--r--Master/texmf-dist/tex/context/base/m-newmat.tex80
-rw-r--r--Master/texmf-dist/tex/context/base/m-streams.tex446
-rw-r--r--Master/texmf-dist/tex/context/base/math-noa.lua1304
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii (renamed from Master/texmf-dist/tex/context/base/anch-bar.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii (renamed from Master/texmf-dist/tex/context/base/anch-pgr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii (renamed from Master/texmf-dist/tex/context/base/anch-pos.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii (renamed from Master/texmf-dist/tex/context/base/anch-snc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii (renamed from Master/texmf-dist/tex/context/base/bibl-tra.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii (renamed from Master/texmf-dist/tex/context/base/buff-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii (renamed from Master/texmf-dist/tex/context/base/buff-ver.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-act.mkii (renamed from Master/texmf-dist/tex/context/base/catc-act.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii (renamed from Master/texmf-dist/tex/context/base/catc-ctx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-def.mkii (renamed from Master/texmf-dist/tex/context/base/catc-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii (renamed from Master/texmf-dist/tex/context/base/catc-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii (renamed from Master/texmf-dist/tex/context/base/catc-sym.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii (renamed from Master/texmf-dist/tex/context/base/catc-xml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii (renamed from Master/texmf-dist/tex/context/base/colo-ema.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii (renamed from Master/texmf-dist/tex/context/base/colo-ext.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii (renamed from Master/texmf-dist/tex/context/base/colo-hex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii (renamed from Master/texmf-dist/tex/context/base/colo-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii (renamed from Master/texmf-dist/tex/context/base/colo-rgb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-run.mkii (renamed from Master/texmf-dist/tex/context/base/colo-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii (renamed from Master/texmf-dist/tex/context/base/colo-x11.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii (renamed from Master/texmf-dist/tex/context/base/colo-xwi.mkii)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii (renamed from Master/texmf-dist/tex/context/base/cont-cs.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-de.mkii (renamed from Master/texmf-dist/tex/context/base/cont-de.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-en.mkii (renamed from Master/texmf-dist/tex/context/base/cont-en.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-err.mkii (renamed from Master/texmf-dist/tex/context/base/cont-err.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii (renamed from Master/texmf-dist/tex/context/base/cont-fil.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii (renamed from Master/texmf-dist/tex/context/base/cont-fr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii (renamed from Master/texmf-dist/tex/context/base/cont-gb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-it.mkii (renamed from Master/texmf-dist/tex/context/base/cont-it.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-log.mkii (renamed from Master/texmf-dist/tex/context/base/cont-log.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-new.mkii (renamed from Master/texmf-dist/tex/context/base/cont-new.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii (renamed from Master/texmf-dist/tex/context/base/cont-nl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii (renamed from Master/texmf-dist/tex/context/base/cont-ro.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/cont-sys.ori (renamed from Master/texmf-dist/tex/context/base/cont-sys.ori)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/context.mkii (renamed from Master/texmf-dist/tex/context/base/context.mkii)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-con.mkii (renamed from Master/texmf-dist/tex/context/base/core-con.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii (renamed from Master/texmf-dist/tex/context/base/core-ctx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-def.mkii (renamed from Master/texmf-dist/tex/context/base/core-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-env.mkii (renamed from Master/texmf-dist/tex/context/base/core-env.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-fil.mkii (renamed from Master/texmf-dist/tex/context/base/core-fil.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii (renamed from Master/texmf-dist/tex/context/base/core-fnt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-gen.mkii (renamed from Master/texmf-dist/tex/context/base/core-gen.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-ini.mkii (renamed from Master/texmf-dist/tex/context/base/core-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-job.mkii (renamed from Master/texmf-dist/tex/context/base/core-job.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-mis.mkii (renamed from Master/texmf-dist/tex/context/base/core-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-par.mkii (renamed from Master/texmf-dist/tex/context/base/core-par.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-stg.mkii (renamed from Master/texmf-dist/tex/context/base/core-stg.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-sys.mkii (renamed from Master/texmf-dist/tex/context/base/core-sys.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-two.mkii (renamed from Master/texmf-dist/tex/context/base/core-two.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-uti.mkii (renamed from Master/texmf-dist/tex/context/base/core-uti.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/core-var.mkii (renamed from Master/texmf-dist/tex/context/base/core-var.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-032.mkii (renamed from Master/texmf-dist/tex/context/base/enco-032.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-037.mkii (renamed from Master/texmf-dist/tex/context/base/enco-037.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii (renamed from Master/texmf-dist/tex/context/base/enco-acc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii (renamed from Master/texmf-dist/tex/context/base/enco-agr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ans.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii (renamed from Master/texmf-dist/tex/context/base/enco-cas.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii (renamed from Master/texmf-dist/tex/context/base/enco-chi.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-com.mkii (renamed from Master/texmf-dist/tex/context/base/enco-com.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii (renamed from Master/texmf-dist/tex/context/base/enco-cyr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-def.mkii (renamed from Master/texmf-dist/tex/context/base/enco-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ec.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ecm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-el.mkii (renamed from Master/texmf-dist/tex/context/base/enco-el.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii (renamed from Master/texmf-dist/tex/context/base/enco-fde.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ffr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii (renamed from Master/texmf-dist/tex/context/base/enco-fpl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii (renamed from Master/texmf-dist/tex/context/base/enco-fro.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii (renamed from Master/texmf-dist/tex/context/base/enco-fsl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii (renamed from Master/texmf-dist/tex/context/base/enco-grk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii (renamed from Master/texmf-dist/tex/context/base/enco-heb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ibm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii (renamed from Master/texmf-dist/tex/context/base/enco-il2.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii (renamed from Master/texmf-dist/tex/context/base/enco-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii (renamed from Master/texmf-dist/tex/context/base/enco-l7x.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii (renamed from Master/texmf-dist/tex/context/base/enco-lat.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii (renamed from Master/texmf-dist/tex/context/base/enco-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii (renamed from Master/texmf-dist/tex/context/base/enco-pdf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii (renamed from Master/texmf-dist/tex/context/base/enco-pfr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii (renamed from Master/texmf-dist/tex/context/base/enco-pol.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii (renamed from Master/texmf-dist/tex/context/base/enco-qx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii (renamed from Master/texmf-dist/tex/context/base/enco-raw.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-run.mkii (renamed from Master/texmf-dist/tex/context/base/enco-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii (renamed from Master/texmf-dist/tex/context/base/enco-t5.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii (renamed from Master/texmf-dist/tex/context/base/enco-tbo.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii (renamed from Master/texmf-dist/tex/context/base/enco-uc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii (renamed from Master/texmf-dist/tex/context/base/enco-vis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii (renamed from Master/texmf-dist/tex/context/base/enco-vna.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-win.mkii (renamed from Master/texmf-dist/tex/context/base/enco-win.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii (renamed from Master/texmf-dist/tex/context/base/enco-x5.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii (renamed from Master/texmf-dist/tex/context/base/filt-bas.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii (renamed from Master/texmf-dist/tex/context/base/filt-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-arb.mkii (renamed from Master/texmf-dist/tex/context/base/font-arb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii (renamed from Master/texmf-dist/tex/context/base/font-bfm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-chi.mkii (renamed from Master/texmf-dist/tex/context/base/font-chi.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-heb.mkii (renamed from Master/texmf-dist/tex/context/base/font-heb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-ini.mkii (renamed from Master/texmf-dist/tex/context/base/font-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-jap.mkii (renamed from Master/texmf-dist/tex/context/base/font-jap.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-run.mkii (renamed from Master/texmf-dist/tex/context/base/font-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-uni.mkii (renamed from Master/texmf-dist/tex/context/base/font-uni.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-unk.mkii (renamed from Master/texmf-dist/tex/context/base/font-unk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/font-xtx.mkii (renamed from Master/texmf-dist/tex/context/base/font-xtx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/grph-fig.mkii (renamed from Master/texmf-dist/tex/context/base/grph-fig.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/grph-inc.mkii (renamed from Master/texmf-dist/tex/context/base/grph-inc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/grph-trf.mkii (renamed from Master/texmf-dist/tex/context/base/grph-trf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/hand-def.mkii (renamed from Master/texmf-dist/tex/context/base/hand-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/hand-ini.mkii (renamed from Master/texmf-dist/tex/context/base/hand-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-ans.mkii (renamed from Master/texmf-dist/tex/context/base/java-ans.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-exa.mkii (renamed from Master/texmf-dist/tex/context/base/java-exa.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-fil.mkii (renamed from Master/texmf-dist/tex/context/base/java-fil.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-fld.mkii (renamed from Master/texmf-dist/tex/context/base/java-fld.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-ini.mkii (renamed from Master/texmf-dist/tex/context/base/java-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/java-stp.mkii (renamed from Master/texmf-dist/tex/context/base/java-stp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-alt.mkii (renamed from Master/texmf-dist/tex/context/base/lang-alt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ana.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ana.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-art.mkii (renamed from Master/texmf-dist/tex/context/base/lang-art.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-bal.mkii (renamed from Master/texmf-dist/tex/context/base/lang-bal.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-cel.mkii (renamed from Master/texmf-dist/tex/context/base/lang-cel.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-chi.mkii (renamed from Master/texmf-dist/tex/context/base/lang-chi.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ctx.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ctx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-cyr.mkii (renamed from Master/texmf-dist/tex/context/base/lang-cyr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-dis.mkii (renamed from Master/texmf-dist/tex/context/base/lang-dis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-frd.mkii (renamed from Master/texmf-dist/tex/context/base/lang-frd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-frq.mkii (renamed from Master/texmf-dist/tex/context/base/lang-frq.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ger.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ger.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-grk.mkii (renamed from Master/texmf-dist/tex/context/base/lang-grk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ind.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ind.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ini.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ini.mkii)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ita.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ita.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-jap.mkii (renamed from Master/texmf-dist/tex/context/base/lang-jap.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-lab.mkii (renamed from Master/texmf-dist/tex/context/base/lang-lab.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-mis.mkii (renamed from Master/texmf-dist/tex/context/base/lang-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-run.mkii (renamed from Master/texmf-dist/tex/context/base/lang-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-sla.mkii (renamed from Master/texmf-dist/tex/context/base/lang-sla.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-spa.mkii (renamed from Master/texmf-dist/tex/context/base/lang-spa.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-spe.mkii (renamed from Master/texmf-dist/tex/context/base/lang-spe.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-ura.mkii (renamed from Master/texmf-dist/tex/context/base/lang-ura.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-url.mkii (renamed from Master/texmf-dist/tex/context/base/lang-url.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/lang-vn.mkii (renamed from Master/texmf-dist/tex/context/base/lang-vn.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-ams.mkii (renamed from Master/texmf-dist/tex/context/base/math-ams.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-arr.mkii (renamed from Master/texmf-dist/tex/context/base/math-arr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-cow.mkii (renamed from Master/texmf-dist/tex/context/base/math-cow.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-eul.mkii (renamed from Master/texmf-dist/tex/context/base/math-eul.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-fou.mkii (renamed from Master/texmf-dist/tex/context/base/math-fou.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-frc.mkii (renamed from Master/texmf-dist/tex/context/base/math-frc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-ini.mkii (renamed from Master/texmf-dist/tex/context/base/math-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-lbr.mkii (renamed from Master/texmf-dist/tex/context/base/math-lbr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-pln.mkii (renamed from Master/texmf-dist/tex/context/base/math-pln.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-run.mkii (renamed from Master/texmf-dist/tex/context/base/math-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-tex.mkii (renamed from Master/texmf-dist/tex/context/base/math-tex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-tim.mkii (renamed from Master/texmf-dist/tex/context/base/math-tim.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/math-uni.mkii (renamed from Master/texmf-dist/tex/context/base/math-uni.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-clp.mkii (renamed from Master/texmf-dist/tex/context/base/meta-clp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-dum.mkii (renamed from Master/texmf-dist/tex/context/base/meta-dum.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-fig.mkii (renamed from Master/texmf-dist/tex/context/base/meta-fig.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-ini.mkii (renamed from Master/texmf-dist/tex/context/base/meta-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-mis.mkii (renamed from Master/texmf-dist/tex/context/base/meta-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-nav.mkii (renamed from Master/texmf-dist/tex/context/base/meta-nav.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-pag.mkii (renamed from Master/texmf-dist/tex/context/base/meta-pag.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-pdf.mkii (renamed from Master/texmf-dist/tex/context/base/meta-pdf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-pre.mkii (renamed from Master/texmf-dist/tex/context/base/meta-pre.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-tex.mkii (renamed from Master/texmf-dist/tex/context/base/meta-tex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-txt.mkii (renamed from Master/texmf-dist/tex/context/base/meta-txt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/meta-xml.mkii (renamed from Master/texmf-dist/tex/context/base/meta-xml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-aux.mkii (renamed from Master/texmf-dist/tex/context/base/mult-aux.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-chk.mkii (renamed from Master/texmf-dist/tex/context/base/mult-chk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-com.mkii (renamed from Master/texmf-dist/tex/context/base/mult-com.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-con.mkii (renamed from Master/texmf-dist/tex/context/base/mult-con.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-de.mkii (renamed from Master/texmf-dist/tex/context/base/mult-de.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-def.mkii (renamed from Master/texmf-dist/tex/context/base/mult-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-en.mkii (renamed from Master/texmf-dist/tex/context/base/mult-en.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii (renamed from Master/texmf-dist/tex/context/base/mult-fr.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-fst.mkii (renamed from Master/texmf-dist/tex/context/base/mult-fst.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-ini.mkii (renamed from Master/texmf-dist/tex/context/base/mult-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-it.mkii (renamed from Master/texmf-dist/tex/context/base/mult-it.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mcs.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mcs.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mde.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mde.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-men.mkii (renamed from Master/texmf-dist/tex/context/base/mult-men.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mfr.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mfr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mit.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mit.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mnl.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mnl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mno.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mno.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mpe.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mpe.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-mro.mkii (renamed from Master/texmf-dist/tex/context/base/mult-mro.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii (renamed from Master/texmf-dist/tex/context/base/mult-nl.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii (renamed from Master/texmf-dist/tex/context/base/mult-pe.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii (renamed from Master/texmf-dist/tex/context/base/mult-ro.mkii)134
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/mult-sys.mkii (renamed from Master/texmf-dist/tex/context/base/mult-sys.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-alo.mkii (renamed from Master/texmf-dist/tex/context/base/norm-alo.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-ctx.mkii (renamed from Master/texmf-dist/tex/context/base/norm-ctx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-etx.mkii (renamed from Master/texmf-dist/tex/context/base/norm-etx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-ltx.mkii (renamed from Master/texmf-dist/tex/context/base/norm-ltx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-ptx.mkii (renamed from Master/texmf-dist/tex/context/base/norm-ptx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-tex.mkii (renamed from Master/texmf-dist/tex/context/base/norm-tex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/norm-xtx.mkii (renamed from Master/texmf-dist/tex/context/base/norm-xtx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pack-box.mkii (renamed from Master/texmf-dist/tex/context/base/pack-box.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pack-lyr.mkii (renamed from Master/texmf-dist/tex/context/base/pack-lyr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pack-obj.mkii (renamed from Master/texmf-dist/tex/context/base/pack-obj.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pack-rul.mkii (renamed from Master/texmf-dist/tex/context/base/pack-rul.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-app.mkii (renamed from Master/texmf-dist/tex/context/base/page-app.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-bck.mkii (renamed from Master/texmf-dist/tex/context/base/page-bck.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-flw.mkii (renamed from Master/texmf-dist/tex/context/base/page-flw.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-imp.mkii (renamed from Master/texmf-dist/tex/context/base/page-imp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-ini.mkii (renamed from Master/texmf-dist/tex/context/base/page-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-ins.mkii (renamed from Master/texmf-dist/tex/context/base/page-ins.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-lay.mkii (renamed from Master/texmf-dist/tex/context/base/page-lay.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-lin.mkii (renamed from Master/texmf-dist/tex/context/base/page-lin.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-log.mkii (renamed from Master/texmf-dist/tex/context/base/page-log.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-mak.mkii (renamed from Master/texmf-dist/tex/context/base/page-mak.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-mar.mkii (renamed from Master/texmf-dist/tex/context/base/page-mar.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-mis.mkii (renamed from Master/texmf-dist/tex/context/base/page-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-mul.mkii (renamed from Master/texmf-dist/tex/context/base/page-mul.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-not.mkii (renamed from Master/texmf-dist/tex/context/base/page-not.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-one.mkii (renamed from Master/texmf-dist/tex/context/base/page-one.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-par.mkii (renamed from Master/texmf-dist/tex/context/base/page-par.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-plg.mkii (renamed from Master/texmf-dist/tex/context/base/page-plg.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-run.mkii (renamed from Master/texmf-dist/tex/context/base/page-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-set.mkii (renamed from Master/texmf-dist/tex/context/base/page-set.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-sid.mkii (renamed from Master/texmf-dist/tex/context/base/page-sid.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-spr.mkii (renamed from Master/texmf-dist/tex/context/base/page-spr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-str.mkii (renamed from Master/texmf-dist/tex/context/base/page-str.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/page-txt.mkii (renamed from Master/texmf-dist/tex/context/base/page-txt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pdfr-def.mkii (renamed from Master/texmf-dist/tex/context/base/pdfr-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pdfr-ec.mkii (renamed from Master/texmf-dist/tex/context/base/pdfr-ec.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/pdfr-il2.mkii (renamed from Master/texmf-dist/tex/context/base/pdfr-il2.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/prop-ini.mkii (renamed from Master/texmf-dist/tex/context/base/prop-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/prop-lay.mkii (renamed from Master/texmf-dist/tex/context/base/prop-lay.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/prop-mis.mkii (renamed from Master/texmf-dist/tex/context/base/prop-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-1.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-1.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-10.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-10.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-13.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-13.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-15.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-15.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-16.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-16.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-2.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-2.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-3.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-3.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-4.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-4.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-5.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-5.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-7.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-7.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-8859-9.mkii (renamed from Master/texmf-dist/tex/context/base/regi-8859-9.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1250.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1250.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1251.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1251.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1252.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1252.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1253.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1253.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1254.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1254.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cp1257.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cp1257.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cyp.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cyp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-cyr.mkii (renamed from Master/texmf-dist/tex/context/base/regi-cyr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-def.mkii (renamed from Master/texmf-dist/tex/context/base/regi-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-ibm.mkii (renamed from Master/texmf-dist/tex/context/base/regi-ibm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-ini.mkii (renamed from Master/texmf-dist/tex/context/base/regi-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-mac.mkii (renamed from Master/texmf-dist/tex/context/base/regi-mac.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-syn.mkii (renamed from Master/texmf-dist/tex/context/base/regi-syn.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-uni.mkii (renamed from Master/texmf-dist/tex/context/base/regi-uni.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-utf.mkii (renamed from Master/texmf-dist/tex/context/base/regi-utf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/regi-vis.mkii (renamed from Master/texmf-dist/tex/context/base/regi-vis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/scrn-fld.mkii (renamed from Master/texmf-dist/tex/context/base/scrn-fld.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/scrn-hlp.mkii (renamed from Master/texmf-dist/tex/context/base/scrn-hlp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/scrn-int.mkii (renamed from Master/texmf-dist/tex/context/base/scrn-int.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/scrn-nav.mkii (renamed from Master/texmf-dist/tex/context/base/scrn-nav.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/sort-def.mkii (renamed from Master/texmf-dist/tex/context/base/sort-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii (renamed from Master/texmf-dist/tex/context/base/sort-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/sort-lan.mkii (renamed from Master/texmf-dist/tex/context/base/sort-lan.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spac-gen.mkii (renamed from Master/texmf-dist/tex/context/base/spac-gen.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spac-grd.mkii (renamed from Master/texmf-dist/tex/context/base/spac-grd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-def.mkii (renamed from Master/texmf-dist/tex/context/base/spec-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-dpm.mkii (renamed from Master/texmf-dist/tex/context/base/spec-dpm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-dpx.mkii (renamed from Master/texmf-dist/tex/context/base/spec-dpx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-dvi.mkii (renamed from Master/texmf-dist/tex/context/base/spec-dvi.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-fdf.mkii (renamed from Master/texmf-dist/tex/context/base/spec-fdf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-ini.mkii (renamed from Master/texmf-dist/tex/context/base/spec-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-mis.mkii (renamed from Master/texmf-dist/tex/context/base/spec-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-pdf.mkii (renamed from Master/texmf-dist/tex/context/base/spec-pdf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-ps.mkii (renamed from Master/texmf-dist/tex/context/base/spec-ps.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-tpd.mkii (renamed from Master/texmf-dist/tex/context/base/spec-tpd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-tr.mkii (renamed from Master/texmf-dist/tex/context/base/spec-tr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-tst.mkii (renamed from Master/texmf-dist/tex/context/base/spec-tst.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-var.mkii (renamed from Master/texmf-dist/tex/context/base/spec-var.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-win.mkii (renamed from Master/texmf-dist/tex/context/base/spec-win.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-xet.mkii (renamed from Master/texmf-dist/tex/context/base/spec-xet.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-xtx.mkii (renamed from Master/texmf-dist/tex/context/base/spec-xtx.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/spec-yy.mkii (renamed from Master/texmf-dist/tex/context/base/spec-yy.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-blk.mkii (renamed from Master/texmf-dist/tex/context/base/strc-blk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-des.mkii (renamed from Master/texmf-dist/tex/context/base/strc-des.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-flt.mkii (renamed from Master/texmf-dist/tex/context/base/strc-flt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii (renamed from Master/texmf-dist/tex/context/base/strc-itm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-lnt.mkii (renamed from Master/texmf-dist/tex/context/base/strc-lnt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-lst.mkii (renamed from Master/texmf-dist/tex/context/base/strc-lst.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-mar.mkii (renamed from Master/texmf-dist/tex/context/base/strc-mar.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-mat.mkii (renamed from Master/texmf-dist/tex/context/base/strc-mat.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-not.mkii (renamed from Master/texmf-dist/tex/context/base/strc-not.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-num.mkii (renamed from Master/texmf-dist/tex/context/base/strc-num.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-pag.mkii (renamed from Master/texmf-dist/tex/context/base/strc-pag.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-ref.mkii (renamed from Master/texmf-dist/tex/context/base/strc-ref.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-reg.mkii (renamed from Master/texmf-dist/tex/context/base/strc-reg.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-sec.mkii (renamed from Master/texmf-dist/tex/context/base/strc-sec.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-swd.mkii (renamed from Master/texmf-dist/tex/context/base/strc-swd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/strc-syn.mkii (renamed from Master/texmf-dist/tex/context/base/strc-syn.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-ali.mkii (renamed from Master/texmf-dist/tex/context/base/supp-ali.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-box.mkii (renamed from Master/texmf-dist/tex/context/base/supp-box.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-dir.mkii (renamed from Master/texmf-dist/tex/context/base/supp-dir.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-emp.mkii (renamed from Master/texmf-dist/tex/context/base/supp-emp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-eps.mkii (renamed from Master/texmf-dist/tex/context/base/supp-eps.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-fil.mkii (renamed from Master/texmf-dist/tex/context/base/supp-fil.mkii)20
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-fun.mkii (renamed from Master/texmf-dist/tex/context/base/supp-fun.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-lat.mkii (renamed from Master/texmf-dist/tex/context/base/supp-lat.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mat.mkii (renamed from Master/texmf-dist/tex/context/base/supp-mat.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mis.mkii733
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mis.tex (renamed from Master/texmf-dist/tex/context/base/supp-mis.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mpe.mkii1371
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mpe.tex (renamed from Master/texmf-dist/tex/context/base/supp-mpe.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mps.mkii (renamed from Master/texmf-dist/tex/context/base/supp-mps.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-mrk.mkii (renamed from Master/texmf-dist/tex/context/base/supp-mrk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-num.mkii (renamed from Master/texmf-dist/tex/context/base/supp-num.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-pat.mkii (renamed from Master/texmf-dist/tex/context/base/supp-pat.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-pdf.mkii2187
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-pdf.tex (renamed from Master/texmf-dist/tex/context/base/supp-pdf.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-ran.mkii (renamed from Master/texmf-dist/tex/context/base/supp-ran.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-spe.mkii (renamed from Master/texmf-dist/tex/context/base/supp-spe.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-tpi.mkii (renamed from Master/texmf-dist/tex/context/base/supp-tpi.mkii)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/supp-vis.mkii (renamed from Master/texmf-dist/tex/context/base/supp-vis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-cow.mkii (renamed from Master/texmf-dist/tex/context/base/symb-cow.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-eur.mkii (renamed from Master/texmf-dist/tex/context/base/symb-eur.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-glm.mkii (renamed from Master/texmf-dist/tex/context/base/symb-glm.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-ini.mkii (renamed from Master/texmf-dist/tex/context/base/symb-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-jmn.mkii (renamed from Master/texmf-dist/tex/context/base/symb-jmn.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-mis.mkii (renamed from Master/texmf-dist/tex/context/base/symb-mis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-mvs.mkii (renamed from Master/texmf-dist/tex/context/base/symb-mvs.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-nav.mkii (renamed from Master/texmf-dist/tex/context/base/symb-nav.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-run.mkii (renamed from Master/texmf-dist/tex/context/base/symb-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-uni.mkii (renamed from Master/texmf-dist/tex/context/base/symb-uni.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/symb-was.mkii (renamed from Master/texmf-dist/tex/context/base/symb-was.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-con.mkii (renamed from Master/texmf-dist/tex/context/base/syst-con.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-ext.mkii (renamed from Master/texmf-dist/tex/context/base/syst-ext.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-fnt.mkii (renamed from Master/texmf-dist/tex/context/base/syst-fnt.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-gen.mkii (renamed from Master/texmf-dist/tex/context/base/syst-gen.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-ini.mkii (renamed from Master/texmf-dist/tex/context/base/syst-ini.mkii)144
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-new.mkii (renamed from Master/texmf-dist/tex/context/base/syst-new.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-pln.mkii (renamed from Master/texmf-dist/tex/context/base/syst-pln.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkii (renamed from Master/texmf-dist/tex/context/base/syst-rtp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-rtp.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-str.mkii (renamed from Master/texmf-dist/tex/context/base/syst-str.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/syst-tex.mkii314
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-com.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-com.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-ltb.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-ltb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-ntb.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-ntb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-nte.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-nte.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-pln.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-pln.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-tab.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-tab.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-tbl.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-tbl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/tabl-tsp.mkii (renamed from Master/texmf-dist/tex/context/base/tabl-tsp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/thrd-pic.mkii (renamed from Master/texmf-dist/tex/context/base/thrd-pic.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/thrd-ran.mkii (renamed from Master/texmf-dist/tex/context/base/thrd-ran.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/thrd-tab.mkii (renamed from Master/texmf-dist/tex/context/base/thrd-tab.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/thrd-trg.mkii (renamed from Master/texmf-dist/tex/context/base/thrd-trg.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/trac-vis.mkii (renamed from Master/texmf-dist/tex/context/base/trac-vis.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-def.mkii (renamed from Master/texmf-dist/tex/context/base/type-def.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-ini.mkii (renamed from Master/texmf-dist/tex/context/base/type-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-one.mkii (renamed from Master/texmf-dist/tex/context/base/type-one.mkii)510
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-otf.mkii (renamed from Master/texmf-dist/tex/context/base/type-otf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-run.mkii (renamed from Master/texmf-dist/tex/context/base/type-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-set.mkii (renamed from Master/texmf-dist/tex/context/base/type-set.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-siz.mkii (renamed from Master/texmf-dist/tex/context/base/type-siz.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/type-tmf.mkii (renamed from Master/texmf-dist/tex/context/base/type-tmf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/typo-ini.mkii (renamed from Master/texmf-dist/tex/context/base/typo-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-000.mkii (renamed from Master/texmf-dist/tex/context/base/unic-000.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-001.mkii (renamed from Master/texmf-dist/tex/context/base/unic-001.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-002.mkii (renamed from Master/texmf-dist/tex/context/base/unic-002.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-003.mkii (renamed from Master/texmf-dist/tex/context/base/unic-003.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-004.mkii (renamed from Master/texmf-dist/tex/context/base/unic-004.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-005.mkii (renamed from Master/texmf-dist/tex/context/base/unic-005.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-030.mkii (renamed from Master/texmf-dist/tex/context/base/unic-030.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-031.mkii (renamed from Master/texmf-dist/tex/context/base/unic-031.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-032.mkii (renamed from Master/texmf-dist/tex/context/base/unic-032.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-033.mkii (renamed from Master/texmf-dist/tex/context/base/unic-033.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-034.mkii (renamed from Master/texmf-dist/tex/context/base/unic-034.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-035.mkii (renamed from Master/texmf-dist/tex/context/base/unic-035.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-037.mkii (renamed from Master/texmf-dist/tex/context/base/unic-037.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-039.mkii (renamed from Master/texmf-dist/tex/context/base/unic-039.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-251.mkii (renamed from Master/texmf-dist/tex/context/base/unic-251.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-cjk.mkii (renamed from Master/texmf-dist/tex/context/base/unic-cjk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-exp.mkii (renamed from Master/texmf-dist/tex/context/base/unic-exp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-ini.mkii (renamed from Master/texmf-dist/tex/context/base/unic-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/unic-run.mkii (renamed from Master/texmf-dist/tex/context/base/unic-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-c.mkii (renamed from Master/texmf-dist/tex/context/base/verb-c.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-eif.mkii (renamed from Master/texmf-dist/tex/context/base/verb-eif.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-ini.mkii (renamed from Master/texmf-dist/tex/context/base/verb-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-js.mkii (renamed from Master/texmf-dist/tex/context/base/verb-js.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-jv.mkii (renamed from Master/texmf-dist/tex/context/base/verb-jv.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-mp.mkii (renamed from Master/texmf-dist/tex/context/base/verb-mp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-pas.mkii (renamed from Master/texmf-dist/tex/context/base/verb-pas.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-pl.mkii (renamed from Master/texmf-dist/tex/context/base/verb-pl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-raw.mkii (renamed from Master/texmf-dist/tex/context/base/verb-raw.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-sql.mkii (renamed from Master/texmf-dist/tex/context/base/verb-sql.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-tex.mkii (renamed from Master/texmf-dist/tex/context/base/verb-tex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/verb-xml.mkii (renamed from Master/texmf-dist/tex/context/base/verb-xml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xetx-chr.mkii (renamed from Master/texmf-dist/tex/context/base/xetx-chr.mkii)20
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xetx-cls.mkii (renamed from Master/texmf-dist/tex/context/base/xetx-cls.mkii)269
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xetx-ini.mkii (renamed from Master/texmf-dist/tex/context/base/xetx-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xetx-utf.mkii (renamed from Master/texmf-dist/tex/context/base/xetx-utf.mkii)432
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-cml.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-cml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-ent.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-ent.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-exp.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-exp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-ext.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-ext.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-hyp.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-hyp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-ini.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-ini.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-map.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-map.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mea.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mea.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-meb.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-meb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mec.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mec.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-meh.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-meh.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-men.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-men.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-meo.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-meo.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mer.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mer.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mmc.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mmc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mml.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mmp.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mmp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxa.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxa.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxb.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxb.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxc.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxh.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxh.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxn.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxn.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxo.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxo.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-mxr.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-mxr.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-pml.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-pml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-pmu.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-pmu.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-pre.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-pre.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-prs.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-prs.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-raw.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-raw.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-rng.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-rng.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-run.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-run.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-stk.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-stk.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-utf.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-utf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-xsd.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-xsd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkii/xtag-xsl.mkii (renamed from Master/texmf-dist/tex/context/base/xtag-xsl.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-bar.mkiv (renamed from Master/texmf-dist/tex/context/base/anch-bar.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-bck.mkvi (renamed from Master/texmf-dist/tex/context/base/anch-bck.mkvi)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-pgr.lua (renamed from Master/texmf-dist/tex/context/base/anch-pgr.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-pgr.mkiv (renamed from Master/texmf-dist/tex/context/base/anch-pgr.mkiv)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua (renamed from Master/texmf-dist/tex/context/base/anch-pos.lua)13
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-pos.mkiv (renamed from Master/texmf-dist/tex/context/base/anch-pos.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-snc.mkiv (renamed from Master/texmf-dist/tex/context/base/anch-snc.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/anch-tab.mkiv (renamed from Master/texmf-dist/tex/context/base/anch-tab.mkiv)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-col.lua (renamed from Master/texmf-dist/tex/context/base/attr-col.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-col.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-col.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-eff.lua (renamed from Master/texmf-dist/tex/context/base/attr-eff.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-eff.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-eff.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-ini.lua (renamed from Master/texmf-dist/tex/context/base/attr-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-ini.mkiv)40
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-lay.lua (renamed from Master/texmf-dist/tex/context/base/attr-lay.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-lay.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-lay.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-mkr.lua (renamed from Master/texmf-dist/tex/context/base/attr-mkr.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-mkr.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-mkr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-neg.lua (renamed from Master/texmf-dist/tex/context/base/attr-neg.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/attr-neg.mkiv (renamed from Master/texmf-dist/tex/context/base/attr-neg.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-exp.lua (renamed from Master/texmf-dist/tex/context/base/back-exp.lua)128
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-exp.mkiv (renamed from Master/texmf-dist/tex/context/base/back-exp.mkiv)32
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-ini.lua (renamed from Master/texmf-dist/tex/context/base/back-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/back-ini.mkiv)47
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-pdf.lua (renamed from Master/texmf-dist/tex/context/base/back-pdf.lua)91
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv (renamed from Master/texmf-dist/tex/context/base/back-pdf.mkiv)318
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-swf.mkiv (renamed from Master/texmf-dist/tex/context/base/back-swf.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/back-u3d.mkiv (renamed from Master/texmf-dist/tex/context/base/back-u3d.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bibl-bib.lua (renamed from Master/texmf-dist/tex/context/base/bibl-bib.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bibl-bib.mkiv (renamed from Master/texmf-dist/tex/context/base/bibl-bib.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bibl-tra.lua (renamed from Master/texmf-dist/tex/context/base/bibl-tra.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bibl-tra.mkiv (renamed from Master/texmf-dist/tex/context/base/bibl-tra.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bibl-tst.lua (renamed from Master/texmf-dist/tex/context/base/bibl-tst.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/blob-ini.lua (renamed from Master/texmf-dist/tex/context/base/blob-ini.lua)53
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/blob-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/blob-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-default.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-default.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-escaped.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-escaped.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-lua.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-lua.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-mp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-mp.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-nested.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-nested.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-tex.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-tex.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.lua (renamed from Master/texmf-dist/tex/context/base/buff-imp-xml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-imp-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-ini.lua (renamed from Master/texmf-dist/tex/context/base/buff-ini.lua)145
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-ini.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-par.lua (renamed from Master/texmf-dist/tex/context/base/buff-par.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-par.mkvi (renamed from Master/texmf-dist/tex/context/base/buff-par.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-ver.lua (renamed from Master/texmf-dist/tex/context/base/buff-ver.lua)49
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/buff-ver.mkiv (renamed from Master/texmf-dist/tex/context/base/buff-ver.mkiv)78
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/bxml-apa.mkiv (renamed from Master/texmf-dist/tex/context/base/bxml-apa.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-act.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-act.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-ctx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-def.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-def.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-ini.lua (renamed from Master/texmf-dist/tex/context/base/catc-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-ini.mkiv)76
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-sym.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-sym.mkiv)62
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/catc-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/catc-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-act.mkiv (renamed from Master/texmf-dist/tex/context/base/char-act.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-cjk.lua1293
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-def.lua (renamed from Master/texmf-dist/tex/context/base/char-def.lua)15765
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-enc.lua (renamed from Master/texmf-dist/tex/context/base/char-enc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-enc.mkiv (renamed from Master/texmf-dist/tex/context/base/char-enc.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-ent.lua (renamed from Master/texmf-dist/tex/context/base/char-ent.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-fio.lua (renamed from Master/texmf-dist/tex/context/base/char-fio.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-ini.lua (renamed from Master/texmf-dist/tex/context/base/char-ini.lua)105
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/char-ini.mkiv)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-map.lua (renamed from Master/texmf-dist/tex/context/base/char-map.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-tex.lua (renamed from Master/texmf-dist/tex/context/base/char-tex.lua)50
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-utf.lua (renamed from Master/texmf-dist/tex/context/base/char-utf.lua)39
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/char-utf.mkiv (renamed from Master/texmf-dist/tex/context/base/char-utf.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/chem-ini.lua (renamed from Master/texmf-dist/tex/context/base/chem-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/chem-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/chem-ini.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/chem-str.lua (renamed from Master/texmf-dist/tex/context/base/chem-str.lua)22
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/chem-str.mkiv (renamed from Master/texmf-dist/tex/context/base/chem-str.mkiv)52
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-bas.lua (renamed from Master/texmf-dist/tex/context/base/cldf-bas.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-bas.mkiv (renamed from Master/texmf-dist/tex/context/base/cldf-bas.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-com.lua (renamed from Master/texmf-dist/tex/context/base/cldf-com.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-com.mkiv (renamed from Master/texmf-dist/tex/context/base/cldf-com.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-ini.lua (renamed from Master/texmf-dist/tex/context/base/cldf-ini.lua)837
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/cldf-ini.mkiv)14
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-int.lua (renamed from Master/texmf-dist/tex/context/base/cldf-int.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-int.mkiv (renamed from Master/texmf-dist/tex/context/base/cldf-int.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-prs.lua (renamed from Master/texmf-dist/tex/context/base/cldf-prs.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-scn.lua (renamed from Master/texmf-dist/tex/context/base/cldf-scn.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-stp.lua69
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-ver.lua (renamed from Master/texmf-dist/tex/context/base/cldf-ver.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cldf-ver.mkiv (renamed from Master/texmf-dist/tex/context/base/cldf-ver.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-ext.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-ext.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-grp.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-grp.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-icc.lua (renamed from Master/texmf-dist/tex/context/base/colo-icc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-crayola.mkiv254
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-dem.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-imp-dem.mkiv)19
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-ema.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-imp-ema.mkiv)136
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-ral.mkiv239
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-rgb.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-imp-rgb.mkiv)68
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-x11.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-imp-x11.mkiv)235
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-imp-xwi.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-imp-xwi.mkiv)12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-ini.lua (renamed from Master/texmf-dist/tex/context/base/colo-ini.lua)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-ini.mkiv)240
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-run.lua (renamed from Master/texmf-dist/tex/context/base/colo-run.lua)56
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/colo-run.mkiv (renamed from Master/texmf-dist/tex/context/base/colo-run.mkiv)171
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-cs.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-cs.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-de.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-de.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-en.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-en.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-fil.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-fil.mkiv)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-fr.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-fr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-gb.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-gb.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-it.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-it.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-log.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-log.mkiv)37
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-new.mkiv)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-nl.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-nl.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-nop.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-nop.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-pe.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-pe.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-ro.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-ro.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-run.lua (renamed from Master/texmf-dist/tex/context/base/cont-run.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-run.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-run.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/cont-yes.mkiv (renamed from Master/texmf-dist/tex/context/base/cont-yes.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-base.lmx (renamed from Master/texmf-dist/tex/context/base/context-base.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-characters.lmx (renamed from Master/texmf-dist/tex/context/base/context-characters.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-debug.lmx (renamed from Master/texmf-dist/tex/context/base/context-debug.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-error.lmx (renamed from Master/texmf-dist/tex/context/base/context-error.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-fonttest.lmx (renamed from Master/texmf-dist/tex/context/base/context-fonttest.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-help.lmx (renamed from Master/texmf-dist/tex/context/base/context-help.lmx)56
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-performance.tex66
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-timing.lmx (renamed from Master/texmf-dist/tex/context/base/context-timing.lmx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context-todo.tex57
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context.css (renamed from Master/texmf-dist/tex/context/base/context.css)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context.lus (renamed from Master/texmf-dist/tex/context/base/context.lus)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/context.mkiv (renamed from Master/texmf-dist/tex/context/base/context.mkiv)33
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-con.lua (renamed from Master/texmf-dist/tex/context/base/core-con.lua)201
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-con.mkiv (renamed from Master/texmf-dist/tex/context/base/core-con.mkiv)77
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-ctx.ctx (renamed from Master/texmf-dist/tex/context/base/core-ctx.ctx)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-ctx.lua (renamed from Master/texmf-dist/tex/context/base/core-ctx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/core-ctx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-dat.lua (renamed from Master/texmf-dist/tex/context/base/core-dat.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-dat.mkiv (renamed from Master/texmf-dist/tex/context/base/core-dat.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-def.mkiv (renamed from Master/texmf-dist/tex/context/base/core-def.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-env.lua274
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-env.mkiv (renamed from Master/texmf-dist/tex/context/base/core-env.mkiv)241
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/core-ini.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-sys.lua (renamed from Master/texmf-dist/tex/context/base/core-sys.lua)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-sys.mkiv (renamed from Master/texmf-dist/tex/context/base/core-sys.mkiv)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-two.lua (renamed from Master/texmf-dist/tex/context/base/core-two.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-two.mkiv (renamed from Master/texmf-dist/tex/context/base/core-two.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-uti.lua (renamed from Master/texmf-dist/tex/context/base/core-uti.lua)37
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/core-uti.mkiv (renamed from Master/texmf-dist/tex/context/base/core-uti.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-aux.lua (renamed from Master/texmf-dist/tex/context/base/data-aux.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-bin.lua (renamed from Master/texmf-dist/tex/context/base/data-bin.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-con.lua (renamed from Master/texmf-dist/tex/context/base/data-con.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-crl.lua (renamed from Master/texmf-dist/tex/context/base/data-crl.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-ctx.lua (renamed from Master/texmf-dist/tex/context/base/data-ctx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-env.lua (renamed from Master/texmf-dist/tex/context/base/data-env.lua)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-exp.lua (renamed from Master/texmf-dist/tex/context/base/data-exp.lua)36
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-fil.lua (renamed from Master/texmf-dist/tex/context/base/data-fil.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-gen.lua (renamed from Master/texmf-dist/tex/context/base/data-gen.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-ini.lua (renamed from Master/texmf-dist/tex/context/base/data-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-inp.lua (renamed from Master/texmf-dist/tex/context/base/data-inp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-lst.lua (renamed from Master/texmf-dist/tex/context/base/data-lst.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-lua.lua (renamed from Master/texmf-dist/tex/context/base/data-lua.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-met.lua (renamed from Master/texmf-dist/tex/context/base/data-met.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-out.lua (renamed from Master/texmf-dist/tex/context/base/data-out.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-pre.lua (renamed from Master/texmf-dist/tex/context/base/data-pre.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-res.lua (renamed from Master/texmf-dist/tex/context/base/data-res.lua)14
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-sch.lua (renamed from Master/texmf-dist/tex/context/base/data-sch.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-tex.lua (renamed from Master/texmf-dist/tex/context/base/data-tex.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-tmf.lua (renamed from Master/texmf-dist/tex/context/base/data-tmf.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-tmp.lua (renamed from Master/texmf-dist/tex/context/base/data-tmp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-tre.lua (renamed from Master/texmf-dist/tex/context/base/data-tre.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-use.lua (renamed from Master/texmf-dist/tex/context/base/data-use.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-vir.lua (renamed from Master/texmf-dist/tex/context/base/data-vir.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/data-zip.lua (renamed from Master/texmf-dist/tex/context/base/data-zip.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/enco-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/enco-ini.mkiv)38
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/export-example.css (renamed from Master/texmf-dist/tex/context/base/export-example.css)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/export-example.rng (renamed from Master/texmf-dist/tex/context/base/export-example.rng)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/export-example.tex (renamed from Master/texmf-dist/tex/context/base/export-example.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-ini.lua (renamed from Master/texmf-dist/tex/context/base/file-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-ini.mkvi (renamed from Master/texmf-dist/tex/context/base/file-ini.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-job.lua (renamed from Master/texmf-dist/tex/context/base/file-job.lua)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-job.mkvi (renamed from Master/texmf-dist/tex/context/base/file-job.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-lib.lua (renamed from Master/texmf-dist/tex/context/base/file-lib.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-lib.mkvi (renamed from Master/texmf-dist/tex/context/base/file-lib.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-mod.lua (renamed from Master/texmf-dist/tex/context/base/file-mod.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-mod.mkvi (renamed from Master/texmf-dist/tex/context/base/file-mod.mkvi)49
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-res.lua (renamed from Master/texmf-dist/tex/context/base/file-res.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-res.mkvi (renamed from Master/texmf-dist/tex/context/base/file-res.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-syn.lua (renamed from Master/texmf-dist/tex/context/base/file-syn.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/file-syn.mkvi (renamed from Master/texmf-dist/tex/context/base/file-syn.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-afk.lua (renamed from Master/texmf-dist/tex/context/base/font-afk.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-afm.lua (renamed from Master/texmf-dist/tex/context/base/font-afm.lua)242
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-age.lua (renamed from Master/texmf-dist/tex/context/base/font-age.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-agl.lua (renamed from Master/texmf-dist/tex/context/base/font-agl.lua)91
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-aux.lua (renamed from Master/texmf-dist/tex/context/base/font-aux.lua)76
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-aux.mkvi (renamed from Master/texmf-dist/tex/context/base/font-aux.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-cff.lua1698
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-chk.lua (renamed from Master/texmf-dist/tex/context/base/font-chk.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-chk.mkiv (renamed from Master/texmf-dist/tex/context/base/font-chk.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-cid.lua (renamed from Master/texmf-dist/tex/context/base/font-cid.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-col.lua (renamed from Master/texmf-dist/tex/context/base/font-col.lua)51
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi (renamed from Master/texmf-dist/tex/context/base/font-col.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-con.lua (renamed from Master/texmf-dist/tex/context/base/font-con.lua)132
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua (renamed from Master/texmf-dist/tex/context/base/font-ctx.lua)151
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-def.lua (renamed from Master/texmf-dist/tex/context/base/font-def.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-dsp.lua2200
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-emp.mkvi (renamed from Master/texmf-dist/tex/context/base/font-emp.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-enc.lua (renamed from Master/texmf-dist/tex/context/base/font-enc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-enh.lua (renamed from Master/texmf-dist/tex/context/base/font-enh.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ext.lua (renamed from Master/texmf-dist/tex/context/base/font-ext.lua)84
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-fbk.lua (renamed from Master/texmf-dist/tex/context/base/font-fbk.lua)27
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-fea.mkvi (renamed from Master/texmf-dist/tex/context/base/font-fea.mkvi)21
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-fil.mkvi (renamed from Master/texmf-dist/tex/context/base/font-fil.mkvi)195
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-gbn.lua255
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-gds.lua (renamed from Master/texmf-dist/tex/context/base/font-gds.lua)150
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-gds.mkvi (renamed from Master/texmf-dist/tex/context/base/font-gds.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-hsh.lua (renamed from Master/texmf-dist/tex/context/base/font-hsh.lua)41
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ini.lua (renamed from Master/texmf-dist/tex/context/base/font-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ini.mkvi (renamed from Master/texmf-dist/tex/context/base/font-ini.mkvi)247
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-inj.lua (renamed from Master/texmf-dist/tex/context/base/font-inj.lua)435
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ldr.lua (renamed from Master/texmf-dist/tex/context/base/font-ldr.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-lib.mkvi (renamed from Master/texmf-dist/tex/context/base/font-lib.mkvi)38
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-log.lua (renamed from Master/texmf-dist/tex/context/base/font-log.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-lua.lua (renamed from Master/texmf-dist/tex/context/base/font-lua.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-map.lua517
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi (renamed from Master/texmf-dist/tex/context/base/font-mat.mkvi)63
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-mis.lua51
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-mps.lua450
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-nod.lua (renamed from Master/texmf-dist/tex/context/base/font-nod.lua)52
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-odk.lua (renamed from Master/texmf-dist/tex/context/base/font-odk.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-odv.lua (renamed from Master/texmf-dist/tex/context/base/font-odv.lua)199
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-off.lua229
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-osd.lua2414
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ota.lua (renamed from Master/texmf-dist/tex/context/base/font-ota.lua)102
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otb.lua (renamed from Master/texmf-dist/tex/context/base/font-otb.lua)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otc.lua747
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otd.lua (renamed from Master/texmf-dist/tex/context/base/font-otd.lua)75
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otf.lua (renamed from Master/texmf-dist/tex/context/base/font-otf.lua)905
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-oth.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-oti.lua158
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otj.lua1532
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otl.lua839
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otn.lua (renamed from Master/texmf-dist/tex/context/base/font-otn.lua)2170
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-oto.lua452
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otp.lua (renamed from Master/texmf-dist/tex/context/base/font-otp.lua)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-otr.lua2335
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ots.lua3765
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ott.lua1130
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-oup.lua2157
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-pat.lua (renamed from Master/texmf-dist/tex/context/base/font-pat.lua)17
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-pre.mkiv (renamed from Master/texmf-dist/tex/context/base/font-pre.mkiv)45
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-run.mkiv (renamed from Master/texmf-dist/tex/context/base/font-run.mkiv)308
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sel.lua (renamed from Master/texmf-dist/tex/context/base/font-sel.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sel.mkvi (renamed from Master/texmf-dist/tex/context/base/font-sel.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-set.mkvi (renamed from Master/texmf-dist/tex/context/base/font-set.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sol.lua (renamed from Master/texmf-dist/tex/context/base/font-sol.lua)48
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sol.mkvi (renamed from Master/texmf-dist/tex/context/base/font-sol.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sty.mkvi (renamed from Master/texmf-dist/tex/context/base/font-sty.mkvi)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-sym.mkvi (renamed from Master/texmf-dist/tex/context/base/font-sym.mkvi)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-syn.lua (renamed from Master/texmf-dist/tex/context/base/font-syn.lua)566
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-tfm.lua (renamed from Master/texmf-dist/tex/context/base/font-tfm.lua)49
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-tmp.lua118
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-tra.mkiv (renamed from Master/texmf-dist/tex/context/base/font-tra.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-trt.lua (renamed from Master/texmf-dist/tex/context/base/font-trt.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-ttf.lua480
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-uni.mkiv (renamed from Master/texmf-dist/tex/context/base/font-uni.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-unk.mkiv (renamed from Master/texmf-dist/tex/context/base/font-unk.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-var.mkvi (renamed from Master/texmf-dist/tex/context/base/font-var.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-vf.lua (renamed from Master/texmf-dist/tex/context/base/font-vf.lua)53
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/font-xtx.lua (renamed from Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-def.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-epd.lua (renamed from Master/texmf-dist/tex/context/base/grph-epd.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-epd.mkiv (renamed from Master/texmf-dist/tex/context/base/grph-epd.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-fig.mkiv (renamed from Master/texmf-dist/tex/context/base/grph-fig.mkiv)30
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-fil.lua (renamed from Master/texmf-dist/tex/context/base/grph-fil.lua)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua (renamed from Master/texmf-dist/tex/context/base/grph-inc.lua)59
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv (renamed from Master/texmf-dist/tex/context/base/grph-inc.mkiv)39
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-raw.lua (renamed from Master/texmf-dist/tex/context/base/grph-raw.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-raw.mkiv (renamed from Master/texmf-dist/tex/context/base/grph-raw.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-rul.lua185
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-rul.mkiv89
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-swf.lua (renamed from Master/texmf-dist/tex/context/base/grph-swf.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-trf.mkiv (renamed from Master/texmf-dist/tex/context/base/grph-trf.mkiv)32
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-u3d.lua (renamed from Master/texmf-dist/tex/context/base/grph-u3d.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/grph-wnd.lua (renamed from Master/texmf-dist/tex/context/base/grph-wnd.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/hand-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/hand-ini.mkiv)21
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-imp-exa.mkiv (renamed from Master/texmf-dist/tex/context/base/java-imp-exa.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-imp-fil.mkiv (renamed from Master/texmf-dist/tex/context/base/java-imp-fil.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-imp-fld.mkiv (renamed from Master/texmf-dist/tex/context/base/java-imp-fld.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-imp-rhh.mkiv (renamed from Master/texmf-dist/tex/context/base/java-imp-rhh.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-imp-stp.mkiv (renamed from Master/texmf-dist/tex/context/base/java-imp-stp.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-ini.lua (renamed from Master/texmf-dist/tex/context/base/java-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/java-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/java-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-boolean.lua (renamed from Master/texmf-dist/tex/context/base/l-boolean.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-dir.lua (renamed from Master/texmf-dist/tex/context/base/l-dir.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-file.lua (renamed from Master/texmf-dist/tex/context/base/l-file.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-function.lua (renamed from Master/texmf-dist/tex/context/base/l-function.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-gzip.lua (renamed from Master/texmf-dist/tex/context/base/l-gzip.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-io.lua (renamed from Master/texmf-dist/tex/context/base/l-io.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-lpeg.lua (renamed from Master/texmf-dist/tex/context/base/l-lpeg.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-lua.lua (renamed from Master/texmf-dist/tex/context/base/l-lua.lua)48
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-math.lua (renamed from Master/texmf-dist/tex/context/base/l-math.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-md5.lua (renamed from Master/texmf-dist/tex/context/base/l-md5.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-number.lua (renamed from Master/texmf-dist/tex/context/base/l-number.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-os.lua (renamed from Master/texmf-dist/tex/context/base/l-os.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-package.lua (renamed from Master/texmf-dist/tex/context/base/l-package.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-pdfview.lua (renamed from Master/texmf-dist/tex/context/base/l-pdfview.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-sandbox.lua (renamed from Master/texmf-dist/tex/context/base/l-sandbox.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-set.lua (renamed from Master/texmf-dist/tex/context/base/l-set.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-string.lua (renamed from Master/texmf-dist/tex/context/base/l-string.lua)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-table.lua (renamed from Master/texmf-dist/tex/context/base/l-table.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-unicode.lua (renamed from Master/texmf-dist/tex/context/base/l-unicode.lua)9
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-url.lua (renamed from Master/texmf-dist/tex/context/base/l-url.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/l-xml.lua (renamed from Master/texmf-dist/tex/context/base/l-xml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-def.lua (renamed from Master/texmf-dist/tex/context/base/lang-def.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-def.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-def.mkiv)13
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-dis.lua (renamed from Master/texmf-dist/tex/context/base/lang-dis.lua)110
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-frd.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-frd.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-frq-de.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-frq-en.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-frq-nl.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-frq.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-frq.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-hyp.lua (renamed from Master/texmf-dist/tex/context/base/lang-hyp.lua)190
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-hyp.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-hyp.mkiv)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-ini.lua (renamed from Master/texmf-dist/tex/context/base/lang-ini.lua)74
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-ini.mkiv)107
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-lab.lua (renamed from Master/texmf-dist/tex/context/base/lang-lab.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-lab.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-lab.mkiv)83
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-mis.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-mis.mkiv)381
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-rep.lua (renamed from Master/texmf-dist/tex/context/base/lang-rep.lua)109
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-rep.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-rep.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-spa.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-spa.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-txt.lua (renamed from Master/texmf-dist/tex/context/base/lang-txt.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-url.lua167
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-url.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-url.mkiv)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-wrd.lua (renamed from Master/texmf-dist/tex/context/base/lang-wrd.lua)142
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lang-wrd.mkiv (renamed from Master/texmf-dist/tex/context/base/lang-wrd.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/layo-ini.lua (renamed from Master/texmf-dist/tex/context/base/layo-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/layo-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/layo-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-ano.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-ano.lua)333
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-col.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-col.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-enc.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-enc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-epa.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-epa.lua)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-epd.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-epd.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-fld.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-fld.lua)72
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-fmt.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-fmt.lua)91
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-grp.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-grp.lua)67
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-ini.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-ini.lua)298
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-mis.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-mis.lua)74
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-mov.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-mov.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-nod.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-nod.lua)112
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-pda.xml (renamed from Master/texmf-dist/tex/context/base/lpdf-pda.xml)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-pdx.xml (renamed from Master/texmf-dist/tex/context/base/lpdf-pdx.xml)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-pua.xml202
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-ren.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-ren.lua)29
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-res.lua40
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-swf.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-swf.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-tag.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-tag.lua)60
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-u3d.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-u3d.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-wid.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-wid.lua)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lpdf-xmp.lua (renamed from Master/texmf-dist/tex/context/base/lpdf-xmp.lua)143
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-bas.mkiv (renamed from Master/texmf-dist/tex/context/base/luat-bas.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-bwc.lua (renamed from Master/texmf-dist/tex/context/base/luat-bwc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-cbk.lua (renamed from Master/texmf-dist/tex/context/base/luat-cbk.lua)148
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-cnf.lua (renamed from Master/texmf-dist/tex/context/base/luat-cnf.lua)24
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-cod.lua (renamed from Master/texmf-dist/tex/context/base/luat-cod.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-cod.mkiv (renamed from Master/texmf-dist/tex/context/base/luat-cod.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-env.lua (renamed from Master/texmf-dist/tex/context/base/luat-env.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-exe.lua (renamed from Master/texmf-dist/tex/context/base/luat-exe.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-fio.lua (renamed from Master/texmf-dist/tex/context/base/luat-fio.lua)71
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-fmt.lua (renamed from Master/texmf-dist/tex/context/base/luat-fmt.lua)25
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-ini.lua (renamed from Master/texmf-dist/tex/context/base/luat-ini.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/luat-ini.mkiv)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-iop.lua (renamed from Master/texmf-dist/tex/context/base/luat-iop.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-lib.mkiv (renamed from Master/texmf-dist/tex/context/base/luat-lib.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-lua.lua (renamed from Master/texmf-dist/tex/context/base/luat-lua.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-mac.lua (renamed from Master/texmf-dist/tex/context/base/luat-mac.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-run.lua (renamed from Master/texmf-dist/tex/context/base/luat-run.lua)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-soc.lua (renamed from Master/texmf-dist/tex/context/base/luat-soc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-sta.lua (renamed from Master/texmf-dist/tex/context/base/luat-sta.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-sto.lua (renamed from Master/texmf-dist/tex/context/base/luat-sto.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-usr.lua (renamed from Master/texmf-dist/tex/context/base/luat-usr.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/luat-usr.mkiv (renamed from Master/texmf-dist/tex/context/base/luat-usr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-aux.lua (renamed from Master/texmf-dist/tex/context/base/lxml-aux.lua)103
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-css.lua (renamed from Master/texmf-dist/tex/context/base/lxml-css.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-css.mkiv (renamed from Master/texmf-dist/tex/context/base/lxml-css.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.lua (renamed from Master/texmf-dist/tex/context/base/lxml-ctx.lua)23
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/lxml-ctx.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-dir.lua (renamed from Master/texmf-dist/tex/context/base/lxml-dir.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-ent.lua (renamed from Master/texmf-dist/tex/context/base/lxml-ent.lua)13
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-inf.lua (renamed from Master/texmf-dist/tex/context/base/lxml-inf.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-ini.lua143
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/lxml-ini.mkiv)318
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-lpt.lua (renamed from Master/texmf-dist/tex/context/base/lxml-lpt.lua)438
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-mis.lua (renamed from Master/texmf-dist/tex/context/base/lxml-mis.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-sor.lua (renamed from Master/texmf-dist/tex/context/base/lxml-sor.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-sor.mkiv (renamed from Master/texmf-dist/tex/context/base/lxml-sor.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-tab.lua (renamed from Master/texmf-dist/tex/context/base/lxml-tab.lua)999
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-tex.lua (renamed from Master/texmf-dist/tex/context/base/lxml-tex.lua)520
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/lxml-xml.lua (renamed from Master/texmf-dist/tex/context/base/lxml-xml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/m-newcolumnsets.mkiv38
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/m-oldbibtex.mkiv (renamed from Master/texmf-dist/tex/context/base/m-oldbibtex.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/m-oldotf.mkiv77
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-acc.mkvi (renamed from Master/texmf-dist/tex/context/base/math-acc.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-act.lua (renamed from Master/texmf-dist/tex/context/base/math-act.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ali.mkiv (renamed from Master/texmf-dist/tex/context/base/math-ali.mkiv)59
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-arr.mkiv (renamed from Master/texmf-dist/tex/context/base/math-arr.mkiv)76
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-def.mkiv (renamed from Master/texmf-dist/tex/context/base/math-def.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-del.mkiv (renamed from Master/texmf-dist/tex/context/base/math-del.mkiv)53
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-dim.lua (renamed from Master/texmf-dist/tex/context/base/math-dim.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-dir.lua (renamed from Master/texmf-dist/tex/context/base/math-dir.lua)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-dis.mkiv (renamed from Master/texmf-dist/tex/context/base/math-dis.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ext.lua (renamed from Master/texmf-dist/tex/context/base/math-ext.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-fbk.lua (renamed from Master/texmf-dist/tex/context/base/math-fbk.lua)50
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv (renamed from Master/texmf-dist/tex/context/base/math-fen.mkiv)431
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-for.mkiv (renamed from Master/texmf-dist/tex/context/base/math-for.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-frc.lua (renamed from Master/texmf-dist/tex/context/base/math-frc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-frc.mkiv (renamed from Master/texmf-dist/tex/context/base/math-frc.mkiv)92
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ini.lua (renamed from Master/texmf-dist/tex/context/base/math-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/math-ini.mkiv)411
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-inl.mkiv (renamed from Master/texmf-dist/tex/context/base/math-inl.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-int.mkiv (renamed from Master/texmf-dist/tex/context/base/math-int.mkiv)12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-map.lua (renamed from Master/texmf-dist/tex/context/base/math-map.lua)28
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-mis.mkiv (renamed from Master/texmf-dist/tex/context/base/math-mis.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-noa.lua1763
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-pln.mkiv (renamed from Master/texmf-dist/tex/context/base/math-pln.mkiv)36
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-rad.mkvi (renamed from Master/texmf-dist/tex/context/base/math-rad.mkvi)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ren.lua (renamed from Master/texmf-dist/tex/context/base/math-ren.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-scr.mkiv (renamed from Master/texmf-dist/tex/context/base/math-scr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-stc.mkvi (renamed from Master/texmf-dist/tex/context/base/math-stc.mkvi)27
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-tag.lua (renamed from Master/texmf-dist/tex/context/base/math-tag.lua)17
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-ttv.lua (renamed from Master/texmf-dist/tex/context/base/math-ttv.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/math-vfu.lua (renamed from Master/texmf-dist/tex/context/base/math-vfu.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-fig.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-fig.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-fnt.lua (renamed from Master/texmf-dist/tex/context/base/meta-fnt.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-fnt.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-fnt.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-fun.lua (renamed from Master/texmf-dist/tex/context/base/meta-fun.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-fun.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-fun.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-grd.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-grd.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-clp.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-clp.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-dum.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-dum.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-fen.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-fen.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-grid.mkiv63
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-mis.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-mis.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-nav.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-nav.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-outlines.mkiv176
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-pre.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-pre.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-tab.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-tab.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-imp-txt.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-imp-txt.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-ini.lua (renamed from Master/texmf-dist/tex/context/base/meta-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-ini.mkiv)51
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-pag.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-pag.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-pdf.lua (renamed from Master/texmf-dist/tex/context/base/meta-pdf.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-pdf.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-pdf.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-pdh.lua (renamed from Master/texmf-dist/tex/context/base/meta-pdh.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-pdh.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-pdh.mkiv)24
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-tex.lua (renamed from Master/texmf-dist/tex/context/base/meta-tex.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-tex.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-tex.mkiv)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/meta-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/meta-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/metatex.lus (renamed from Master/texmf-dist/tex/context/base/metatex.lus)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/metatex.tex (renamed from Master/texmf-dist/tex/context/base/metatex.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.lua (renamed from Master/texmf-dist/tex/context/base/mlib-ctx.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/mlib-ctx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-int.lua (renamed from Master/texmf-dist/tex/context/base/mlib-int.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-lua.lua (renamed from Master/texmf-dist/tex/context/base/mlib-lua.lua)33
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.lua (renamed from Master/texmf-dist/tex/context/base/mlib-pdf.lua)232
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.mkiv (renamed from Master/texmf-dist/tex/context/base/mlib-pdf.mkiv)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-pps.lua (renamed from Master/texmf-dist/tex/context/base/mlib-pps.lua)150
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-pps.mkiv (renamed from Master/texmf-dist/tex/context/base/mlib-pps.mkiv)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mlib-run.lua (renamed from Master/texmf-dist/tex/context/base/mlib-run.lua)50
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-arrange.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-arrange.tex)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-combine.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-combine.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-common.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-common.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-copy.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-copy.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-ideas.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-ideas.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-listing.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-listing.tex)9
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-markdown.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-markdown.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-precache.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-precache.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-select.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-select.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-setups.tex78
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-sql.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-sql.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-timing.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-timing.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-trim.tex72
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mtx-context-xml.tex (renamed from Master/texmf-dist/tex/context/base/mtx-context-xml.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua (renamed from Master/texmf-dist/tex/context/base/mult-aux.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-aux.mkiv (renamed from Master/texmf-dist/tex/context/base/mult-aux.mkiv)47
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-chk.lua (renamed from Master/texmf-dist/tex/context/base/mult-chk.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-chk.mkiv (renamed from Master/texmf-dist/tex/context/base/mult-chk.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-def.lua (renamed from Master/texmf-dist/tex/context/base/mult-def.lua)2433
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-def.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-dim.mkvi (renamed from Master/texmf-dist/tex/context/base/mult-dim.mkvi)59
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-fun.lua (renamed from Master/texmf-dist/tex/context/base/mult-fun.lua)20
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-ini.lua (renamed from Master/texmf-dist/tex/context/base/mult-ini.lua)184
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/mult-ini.mkiv)13
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-low.lua (renamed from Master/texmf-dist/tex/context/base/mult-low.lua)36
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-mes.lua (renamed from Master/texmf-dist/tex/context/base/mult-mes.lua)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-mps.lua (renamed from Master/texmf-dist/tex/context/base/mult-mps.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-prm.lua (renamed from Master/texmf-dist/tex/context/base/mult-prm.lua)188
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-prm.mkiv (renamed from Master/texmf-dist/tex/context/base/mult-prm.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/mult-sys.mkiv (renamed from Master/texmf-dist/tex/context/base/mult-sys.mkiv)96
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-acc.lua (renamed from Master/texmf-dist/tex/context/base/node-acc.lua)30
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-aux.lua (renamed from Master/texmf-dist/tex/context/base/node-aux.lua)61
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-bck.lua (renamed from Master/texmf-dist/tex/context/base/node-bck.lua)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-bck.mkiv (renamed from Master/texmf-dist/tex/context/base/node-bck.mkiv)21
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-dir.lua (renamed from Master/texmf-dist/tex/context/base/node-dir.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ext.lua (renamed from Master/texmf-dist/tex/context/base/node-ext.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-fin.lua (renamed from Master/texmf-dist/tex/context/base/node-fin.lua)109
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-fin.mkiv (renamed from Master/texmf-dist/tex/context/base/node-fin.mkiv)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-fnt.lua514
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ini.lua356
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/node-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ltp.lua (renamed from Master/texmf-dist/tex/context/base/node-ltp.lua)479
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-met.lua (renamed from Master/texmf-dist/tex/context/base/node-met.lua)313
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-mig.lua (renamed from Master/texmf-dist/tex/context/base/node-mig.lua)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-mig.mkiv (renamed from Master/texmf-dist/tex/context/base/node-mig.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-nut.lua (renamed from Master/texmf-dist/tex/context/base/node-nut.lua)337
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-pag.lua (renamed from Master/texmf-dist/tex/context/base/node-pag.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-pag.mkiv (renamed from Master/texmf-dist/tex/context/base/node-pag.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ppt.lua (renamed from Master/texmf-dist/tex/context/base/node-ppt.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-pro.lua (renamed from Master/texmf-dist/tex/context/base/node-pro.lua)83
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ref.lua (renamed from Master/texmf-dist/tex/context/base/node-ref.lua)294
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-res.lua (renamed from Master/texmf-dist/tex/context/base/node-res.lua)344
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-rul.lua (renamed from Master/texmf-dist/tex/context/base/node-rul.lua)173
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-rul.mkiv (renamed from Master/texmf-dist/tex/context/base/node-rul.mkiv)76
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-ser.lua (renamed from Master/texmf-dist/tex/context/base/node-ser.lua)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-shp.lua (renamed from Master/texmf-dist/tex/context/base/node-shp.lua)41
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-snp.lua (renamed from Master/texmf-dist/tex/context/base/node-snp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-tex.lua (renamed from Master/texmf-dist/tex/context/base/node-tex.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-tra.lua (renamed from Master/texmf-dist/tex/context/base/node-tra.lua)169
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-tsk.lua (renamed from Master/texmf-dist/tex/context/base/node-tsk.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-tst.lua (renamed from Master/texmf-dist/tex/context/base/node-tst.lua)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/node-typ.lua (renamed from Master/texmf-dist/tex/context/base/node-typ.lua)61
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/norm-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/norm-ctx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-bar.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-bar.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-bck.mkvi (renamed from Master/texmf-dist/tex/context/base/pack-bck.mkvi)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-box.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-box.mkiv)95
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-com.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-com.mkiv)90
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-cut.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-cut.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-fen.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-fen.mkiv)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-lyr.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-lyr.mkiv)121
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-mis.mkvi (renamed from Master/texmf-dist/tex/context/base/pack-mis.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-mrl.mkiv)53
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua262
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-obj.mkiv162
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-pos.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-pos.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-rul.lua (renamed from Master/texmf-dist/tex/context/base/pack-rul.lua)31
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv (renamed from Master/texmf-dist/tex/context/base/pack-rul.mkiv)257
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-app.mkiv (renamed from Master/texmf-dist/tex/context/base/page-app.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-bck.mkiv (renamed from Master/texmf-dist/tex/context/base/page-bck.mkiv)30
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-box.mkvi (renamed from Master/texmf-dist/tex/context/base/page-box.mkvi)32
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-brk.mkiv (renamed from Master/texmf-dist/tex/context/base/page-brk.mkiv)53
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-col.mkiv (renamed from Master/texmf-dist/tex/context/base/page-col.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-com.mkiv (renamed from Master/texmf-dist/tex/context/base/page-com.mkiv)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-cst.lua1454
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-cst.mkiv778
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-fac.mkiv (renamed from Master/texmf-dist/tex/context/base/page-fac.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-flt.lua (renamed from Master/texmf-dist/tex/context/base/page-flt.lua)30
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-flt.mkiv (renamed from Master/texmf-dist/tex/context/base/page-flt.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-flw.mkiv (renamed from Master/texmf-dist/tex/context/base/page-flw.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-grd.mkiv (renamed from Master/texmf-dist/tex/context/base/page-grd.mkiv)28
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-imp.mkiv (renamed from Master/texmf-dist/tex/context/base/page-imp.mkiv)90
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-inf.mkiv (renamed from Master/texmf-dist/tex/context/base/page-inf.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/page-ini.mkiv)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-inj.lua (renamed from Master/texmf-dist/tex/context/base/page-inj.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-inj.mkvi (renamed from Master/texmf-dist/tex/context/base/page-inj.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-ins.lua (renamed from Master/texmf-dist/tex/context/base/page-ins.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv (renamed from Master/texmf-dist/tex/context/base/page-ins.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-lay.mkiv (renamed from Master/texmf-dist/tex/context/base/page-lay.mkiv)79
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-lin.lua (renamed from Master/texmf-dist/tex/context/base/page-lin.lua)351
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-lin.mkvi (renamed from Master/texmf-dist/tex/context/base/page-lin.mkvi)66
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mak.mkvi (renamed from Master/texmf-dist/tex/context/base/page-mak.mkvi)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mbk.mkvi (renamed from Master/texmf-dist/tex/context/base/page-mbk.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mix.lua (renamed from Master/texmf-dist/tex/context/base/page-mix.lua)64
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mix.mkiv (renamed from Master/texmf-dist/tex/context/base/page-mix.mkiv)77
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mrk.mkiv (renamed from Master/texmf-dist/tex/context/base/page-mrk.mkiv)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-mul.mkiv (renamed from Master/texmf-dist/tex/context/base/page-mul.mkiv)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-not.mkiv (renamed from Master/texmf-dist/tex/context/base/page-not.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-one.mkiv (renamed from Master/texmf-dist/tex/context/base/page-one.mkiv)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-otr.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-otr.mkvi (renamed from Master/texmf-dist/tex/context/base/page-otr.mkvi)62
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-par.mkiv (renamed from Master/texmf-dist/tex/context/base/page-par.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-plg.mkiv (renamed from Master/texmf-dist/tex/context/base/page-plg.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-pst.lua (renamed from Master/texmf-dist/tex/context/base/page-pst.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-pst.mkiv (renamed from Master/texmf-dist/tex/context/base/page-pst.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-run.mkiv (renamed from Master/texmf-dist/tex/context/base/page-run.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-sel.mkvi (renamed from Master/texmf-dist/tex/context/base/page-sel.mkvi)40
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-set.mkiv (renamed from Master/texmf-dist/tex/context/base/page-set.mkiv)156
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-sid.mkiv (renamed from Master/texmf-dist/tex/context/base/page-sid.mkiv)12
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-spr.mkiv (renamed from Master/texmf-dist/tex/context/base/page-spr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-str.lua (renamed from Master/texmf-dist/tex/context/base/page-str.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-str.mkiv (renamed from Master/texmf-dist/tex/context/base/page-str.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-txt.mkvi (renamed from Master/texmf-dist/tex/context/base/page-txt.mkvi)292
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/page-var.mkiv (renamed from Master/texmf-dist/tex/context/base/page-var.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/phys-dim.lua (renamed from Master/texmf-dist/tex/context/base/phys-dim.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/phys-dim.mkiv (renamed from Master/texmf-dist/tex/context/base/phys-dim.mkiv)28
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/prop-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/prop-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-aut.lua (renamed from Master/texmf-dist/tex/context/base/publ-aut.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-dat.lua (renamed from Master/texmf-dist/tex/context/base/publ-dat.lua)52
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-fnd.lua (renamed from Master/texmf-dist/tex/context/base/publ-fnd.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.lua (renamed from Master/texmf-dist/tex/context/base/publ-imp-apa.lua)27
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-apa.mkvi)83
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.lua (renamed from Master/texmf-dist/tex/context/base/publ-imp-aps.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-aps.mkvi)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-author.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-author.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-cite.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-cite.mkvi)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-commands.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-commands.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.lua (renamed from Master/texmf-dist/tex/context/base/publ-imp-default.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-default.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-definitions.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-definitions.mkvi)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-list.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-list.mkvi)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-page.mkvi (renamed from Master/texmf-dist/tex/context/base/publ-imp-page.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-replacements.lua (renamed from Master/texmf-dist/tex/context/base/publ-imp-replacements.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-imp-test.bib (renamed from Master/texmf-dist/tex/context/base/publ-imp-test.bib)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-ini.lua (renamed from Master/texmf-dist/tex/context/base/publ-ini.lua)229
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/publ-ini.mkiv)116
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-jrn.lua (renamed from Master/texmf-dist/tex/context/base/publ-jrn.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-old.mkiv (renamed from Master/texmf-dist/tex/context/base/publ-old.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-oth.lua (renamed from Master/texmf-dist/tex/context/base/publ-oth.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-reg.lua (renamed from Master/texmf-dist/tex/context/base/publ-reg.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-sor.lua (renamed from Master/texmf-dist/tex/context/base/publ-sor.lua)50
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-tra.lua (renamed from Master/texmf-dist/tex/context/base/publ-tra.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-tra.mkiv (renamed from Master/texmf-dist/tex/context/base/publ-tra.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-usr.lua (renamed from Master/texmf-dist/tex/context/base/publ-usr.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-usr.mkiv (renamed from Master/texmf-dist/tex/context/base/publ-usr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/publ-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/publ-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-1.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-1.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-10.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-10.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-11.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-11.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-13.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-13.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-14.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-14.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-15.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-15.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-16.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-16.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-2.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-2.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-3.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-3.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-4.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-4.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-5.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-5.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-6.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-6.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-7.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-7.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-8.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-8.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-8859-9.lua (renamed from Master/texmf-dist/tex/context/base/regi-8859-9.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1250.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1250.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1251.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1251.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1252.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1252.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1253.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1253.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1254.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1254.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1255.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1255.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1256.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1256.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1257.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1257.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-cp1258.lua (renamed from Master/texmf-dist/tex/context/base/regi-cp1258.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-demo.lua (renamed from Master/texmf-dist/tex/context/base/regi-demo.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-ini.lua (renamed from Master/texmf-dist/tex/context/base/regi-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/regi-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/regi-pdfdoc.lua (renamed from Master/texmf-dist/tex/context/base/regi-pdfdoc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-bar.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-bar.mkvi)123
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-but.lua (renamed from Master/texmf-dist/tex/context/base/scrn-but.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-but.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-but.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-fld.lua (renamed from Master/texmf-dist/tex/context/base/scrn-fld.lua)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-fld.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-fld.mkvi)25
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.lua (renamed from Master/texmf-dist/tex/context/base/scrn-hlp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-hlp.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-ini.lua (renamed from Master/texmf-dist/tex/context/base/scrn-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-ini.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-ini.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-pag.lua (renamed from Master/texmf-dist/tex/context/base/scrn-pag.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-pag.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-pag.mkvi)79
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-ref.lua (renamed from Master/texmf-dist/tex/context/base/scrn-ref.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-ref.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-ref.mkvi)20
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-wid.lua (renamed from Master/texmf-dist/tex/context/base/scrn-wid.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrn-wid.mkvi (renamed from Master/texmf-dist/tex/context/base/scrn-wid.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrp-cjk.lua (renamed from Master/texmf-dist/tex/context/base/scrp-cjk.lua)31
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrp-eth.lua (renamed from Master/texmf-dist/tex/context/base/scrp-eth.lua)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrp-ini.lua (renamed from Master/texmf-dist/tex/context/base/scrp-ini.lua)101
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrp-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/scrp-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/scrp-tha.lua (renamed from Master/texmf-dist/tex/context/base/scrp-tha.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/sort-ini.lua (renamed from Master/texmf-dist/tex/context/base/sort-ini.lua)57
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/sort-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/sort-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/sort-lan.lua (renamed from Master/texmf-dist/tex/context/base/sort-lan.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-adj.lua (renamed from Master/texmf-dist/tex/context/base/spac-adj.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-adj.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-adj.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-ali.lua (renamed from Master/texmf-dist/tex/context/base/spac-ali.lua)7
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-ali.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-ali.mkiv)199
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-chr.lua (renamed from Master/texmf-dist/tex/context/base/spac-chr.lua)50
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-chr.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-chr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-def.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-def.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-flr.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-flr.mkiv)54
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-grd.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-grd.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-hor.lua (renamed from Master/texmf-dist/tex/context/base/spac-hor.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-hor.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-hor.mkiv)108
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-lin.mkiv)13
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-pag.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-pag.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-par.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-par.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-prf.lua943
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-prf.mkvi117
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-ver.lua (renamed from Master/texmf-dist/tex/context/base/spac-ver.lua)738
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv (renamed from Master/texmf-dist/tex/context/base/spac-ver.mkiv)358
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/status-files.pdfbin0 -> 9125 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/status-lua.pdfbin0 -> 267932 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/status-mkiv.lua (renamed from Master/texmf-dist/tex/context/base/status-mkiv.lua)17
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/status-mkiv.tex (renamed from Master/texmf-dist/tex/context/base/status-mkiv.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-bkm.lua (renamed from Master/texmf-dist/tex/context/base/strc-bkm.lua)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-bkm.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-bkm.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-blk.lua (renamed from Master/texmf-dist/tex/context/base/strc-blk.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-blk.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-blk.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-con.lua (renamed from Master/texmf-dist/tex/context/base/strc-con.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-con.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-con.mkvi)88
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-def.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-def.mkiv)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-des.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-des.mkvi)22
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-doc.lua (renamed from Master/texmf-dist/tex/context/base/strc-doc.lua)34
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-doc.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-doc.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-enu.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-enu.mkvi)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-flt.lua (renamed from Master/texmf-dist/tex/context/base/strc-flt.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-flt.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-flt.mkvi)326
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ind.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-ind.mkiv)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ini.lua (renamed from Master/texmf-dist/tex/context/base/strc-ini.lua)37
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ini.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-ini.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-itm.lua (renamed from Master/texmf-dist/tex/context/base/strc-itm.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-itm.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-itm.mkvi)193
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lab.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-lab.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua (renamed from Master/texmf-dist/tex/context/base/strc-lev.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lev.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-lev.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lnt.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-lnt.mkvi)14
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lst.lua (renamed from Master/texmf-dist/tex/context/base/strc-lst.lua)59
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lst.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-lst.mkvi)209
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-mar.lua (renamed from Master/texmf-dist/tex/context/base/strc-mar.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-mar.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-mar.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-mat.lua (renamed from Master/texmf-dist/tex/context/base/strc-mat.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-mat.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-mat.mkiv)135
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-not.lua (renamed from Master/texmf-dist/tex/context/base/strc-not.lua)105
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-not.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-not.mkvi)346
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-num.lua (renamed from Master/texmf-dist/tex/context/base/strc-num.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-num.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-num.mkiv)37
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-pag.lua (renamed from Master/texmf-dist/tex/context/base/strc-pag.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-pag.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-pag.mkiv)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ref.lua (renamed from Master/texmf-dist/tex/context/base/strc-ref.lua)77
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ref.mkvi (renamed from Master/texmf-dist/tex/context/base/strc-ref.mkvi)158
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-reg.lua (renamed from Master/texmf-dist/tex/context/base/strc-reg.lua)23
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-reg.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-reg.mkiv)75
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-ren.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-ren.mkiv)20
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-rsc.lua (renamed from Master/texmf-dist/tex/context/base/strc-rsc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-sbe.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-sbe.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-sec.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-sec.mkiv)89
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-syn.lua (renamed from Master/texmf-dist/tex/context/base/strc-syn.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-syn.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-syn.mkiv)17
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-tag.lua (renamed from Master/texmf-dist/tex/context/base/strc-tag.lua)23
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-tag.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-tag.mkiv)27
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-xml.mkiv (renamed from Master/texmf-dist/tex/context/base/strc-xml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-box.lua (renamed from Master/texmf-dist/tex/context/base/supp-box.lua)194
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-box.mkiv (renamed from Master/texmf-dist/tex/context/base/supp-box.mkiv)188
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-dir.mkiv (renamed from Master/texmf-dist/tex/context/base/supp-dir.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-mat.mkiv (renamed from Master/texmf-dist/tex/context/base/supp-mat.mkiv)16
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua (renamed from Master/texmf-dist/tex/context/base/supp-ran.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-ran.mkiv (renamed from Master/texmf-dist/tex/context/base/supp-ran.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/supp-vis.mkiv (renamed from Master/texmf-dist/tex/context/base/supp-vis.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-cc.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-cc.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-cow.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-cow.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-eur.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-eur.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-jmn.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-jmn.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-mis.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-mis.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-mvs.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-mvs.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-imp-nav.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-imp-nav.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-ini.lua (renamed from Master/texmf-dist/tex/context/base/symb-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-ini.mkiv)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/symb-run.mkiv (renamed from Master/texmf-dist/tex/context/base/symb-run.mkiv)26
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-aux.lua514
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-aux.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-aux.mkiv)796
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-con.lua (renamed from Master/texmf-dist/tex/context/base/syst-con.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-con.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-con.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-fnt.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-fnt.mkiv)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-ini.mkiv)331
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-lua.lua (renamed from Master/texmf-dist/tex/context/base/syst-lua.lua)63
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-lua.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-lua.mkiv)38
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-mes.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-mes.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/syst-pln.mkiv (renamed from Master/texmf-dist/tex/context/base/syst-pln.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-com.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-com.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-ltb.mkiv780
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-mis.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-mis.mkiv)5
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-ntb.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-ntb.mkiv)117
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-nte.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-nte.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-pln.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-pln.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-tab.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-tab.mkiv)1226
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.lua (renamed from Master/texmf-dist/tex/context/base/tabl-tbl.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-tbl.mkiv)90
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-tsp.mkiv (renamed from Master/texmf-dist/tex/context/base/tabl-tsp.mkiv)22
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-xnt.mkvi (renamed from Master/texmf-dist/tex/context/base/tabl-xnt.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.lua (renamed from Master/texmf-dist/tex/context/base/tabl-xtb.lua)45
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.mkvi (renamed from Master/texmf-dist/tex/context/base/tabl-xtb.mkvi)24
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/task-ini.lua (renamed from Master/texmf-dist/tex/context/base/task-ini.lua)61
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/task-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/task-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-ini.lua281
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/toks-ini.mkiv)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-map.lua (renamed from Master/texmf-dist/tex/context/base/toks-map.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-map.mkiv (renamed from Master/texmf-dist/tex/context/base/toks-map.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-scn.lua (renamed from Master/texmf-dist/tex/context/base/toks-scn.lua)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-tra.lua292
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/toks-tra.mkiv (renamed from Master/texmf-dist/tex/context/base/toks-tra.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-ctx.lua (renamed from Master/texmf-dist/tex/context/base/trac-ctx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-ctx.mkiv (renamed from Master/texmf-dist/tex/context/base/trac-ctx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-deb.lua (renamed from Master/texmf-dist/tex/context/base/trac-deb.lua)69
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-deb.mkiv (renamed from Master/texmf-dist/tex/context/base/trac-deb.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-exp.lua (renamed from Master/texmf-dist/tex/context/base/trac-exp.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-fil.lua (renamed from Master/texmf-dist/tex/context/base/trac-fil.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-inf.lua (renamed from Master/texmf-dist/tex/context/base/trac-inf.lua)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-jus.lua (renamed from Master/texmf-dist/tex/context/base/trac-jus.lua)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-jus.mkiv (renamed from Master/texmf-dist/tex/context/base/trac-jus.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-lmx.lua (renamed from Master/texmf-dist/tex/context/base/trac-lmx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-log.lua (renamed from Master/texmf-dist/tex/context/base/trac-log.lua)22
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-par.lua (renamed from Master/texmf-dist/tex/context/base/trac-par.lua)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-pro.lua (renamed from Master/texmf-dist/tex/context/base/trac-pro.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-set.lua (renamed from Master/texmf-dist/tex/context/base/trac-set.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-tex.lua118
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-tex.mkiv (renamed from Master/texmf-dist/tex/context/base/trac-tex.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-tim.lua (renamed from Master/texmf-dist/tex/context/base/trac-tim.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-vis.lua (renamed from Master/texmf-dist/tex/context/base/trac-vis.lua)607
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-vis.mkiv (renamed from Master/texmf-dist/tex/context/base/trac-vis.mkiv)55
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/trac-xml.lua (renamed from Master/texmf-dist/tex/context/base/trac-xml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-def.mkiv (renamed from Master/texmf-dist/tex/context/base/type-def.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-fbk.mkiv (renamed from Master/texmf-dist/tex/context/base/type-fbk.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-ini.lua (renamed from Master/texmf-dist/tex/context/base/type-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-ini.mkvi (renamed from Master/texmf-dist/tex/context/base/type-ini.mkvi)30
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-lua.mkiv (renamed from Master/texmf-dist/tex/context/base/type-lua.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-one.mkiv (renamed from Master/texmf-dist/tex/context/base/type-one.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-otf.mkiv (renamed from Master/texmf-dist/tex/context/base/type-otf.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-set.mkiv (renamed from Master/texmf-dist/tex/context/base/type-set.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-siz.mkiv (renamed from Master/texmf-dist/tex/context/base/type-siz.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/type-tmf.mkiv (renamed from Master/texmf-dist/tex/context/base/type-tmf.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-bld.lua (renamed from Master/texmf-dist/tex/context/base/typo-bld.lua)165
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-bld.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-bld.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-brk.lua500
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-brk.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-brk.mkiv)24
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-cap.lua (renamed from Master/texmf-dist/tex/context/base/typo-cap.lua)80
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-cap.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-cap.mkiv)10
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-chr.lua (renamed from Master/texmf-dist/tex/context/base/typo-chr.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-chr.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-chr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-cln.lua (renamed from Master/texmf-dist/tex/context/base/typo-cln.lua)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-cln.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-cln.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-del.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-del.mkiv)143
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dha.lua458
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dig.lua (renamed from Master/texmf-dist/tex/context/base/typo-dig.lua)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dig.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-dig.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dir.lua (renamed from Master/texmf-dist/tex/context/base/typo-dir.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dir.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-dir.mkiv)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-drp.lua (renamed from Master/texmf-dist/tex/context/base/typo-drp.lua)123
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-drp.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-drp.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dua.lua (renamed from Master/texmf-dist/tex/context/base/typo-dua.lua)112
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-dub.lua (renamed from Master/texmf-dist/tex/context/base/typo-dub.lua)210
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-duc.lua1025
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-fln.lua (renamed from Master/texmf-dist/tex/context/base/typo-fln.lua)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-fln.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-fln.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-ini.lua (renamed from Master/texmf-dist/tex/context/base/typo-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-inj.lua (renamed from Master/texmf-dist/tex/context/base/typo-inj.lua)32
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-inj.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-inj.mkiv)21
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-itc.lua (renamed from Master/texmf-dist/tex/context/base/typo-itc.lua)208
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-itc.mkvi (renamed from Master/texmf-dist/tex/context/base/typo-itc.mkvi)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-itm.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-itm.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-krn.lua (renamed from Master/texmf-dist/tex/context/base/typo-krn.lua)128
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-krn.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-krn.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-lan.lua (renamed from Master/texmf-dist/tex/context/base/typo-lan.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-lan.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-lan.mkiv)3
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-lig.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-lig.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-lin.lua471
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-lin.mkiv25
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-man.lua (renamed from Master/texmf-dist/tex/context/base/typo-man.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-mar.lua (renamed from Master/texmf-dist/tex/context/base/typo-mar.lua)221
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-mar.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-mar.mkiv)65
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-pag.lua (renamed from Master/texmf-dist/tex/context/base/typo-pag.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-pag.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-pag.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-par.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-par.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-prc.lua (renamed from Master/texmf-dist/tex/context/base/typo-prc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-prc.mkvi (renamed from Master/texmf-dist/tex/context/base/typo-prc.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-rep.lua (renamed from Master/texmf-dist/tex/context/base/typo-rep.lua)6
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-rep.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-rep.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-scr.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-scr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-spa.lua (renamed from Master/texmf-dist/tex/context/base/typo-spa.lua)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-spa.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-spa.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-sus.lua (renamed from Master/texmf-dist/tex/context/base/typo-sus.lua)14
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-sus.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-sus.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-tal.lua (renamed from Master/texmf-dist/tex/context/base/typo-tal.lua)25
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-tal.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-tal.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-txt.mkvi (renamed from Master/texmf-dist/tex/context/base/typo-txt.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-wrp.lua (renamed from Master/texmf-dist/tex/context/base/typo-wrp.lua)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/typo-wrp.mkiv (renamed from Master/texmf-dist/tex/context/base/typo-wrp.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/unic-ini.lua (renamed from Master/texmf-dist/tex/context/base/unic-ini.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/unic-ini.mkiv (renamed from Master/texmf-dist/tex/context/base/unic-ini.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-deb.lua (renamed from Master/texmf-dist/tex/context/base/util-deb.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-dim.lua (renamed from Master/texmf-dist/tex/context/base/util-dim.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-env.lua (renamed from Master/texmf-dist/tex/context/base/util-env.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-fil.lua167
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-fmt.lua (renamed from Master/texmf-dist/tex/context/base/util-fmt.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-jsn.lua (renamed from Master/texmf-dist/tex/context/base/util-jsn.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gm.lua69
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gs.lua212
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-lib.lua (renamed from Master/texmf-dist/tex/context/base/util-lib.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-lua.lua (renamed from Master/texmf-dist/tex/context/base/util-lua.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-mrg.lua (renamed from Master/texmf-dist/tex/context/base/util-mrg.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-pck.lua (renamed from Master/texmf-dist/tex/context/base/util-pck.lua)56
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-prs.lua (renamed from Master/texmf-dist/tex/context/base/util-prs.lua)11
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-ran.lua (renamed from Master/texmf-dist/tex/context/base/util-ran.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sac.lua202
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sbx.lua (renamed from Master/texmf-dist/tex/context/base/util-sbx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sci.lua (renamed from Master/texmf-dist/tex/context/base/util-sci.lua)8
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-seq.lua (renamed from Master/texmf-dist/tex/context/base/util-seq.lua)1
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-soc.lua (renamed from Master/texmf-dist/tex/context/base/util-soc.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-client.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-imp-client.lua)38
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-library.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-imp-library.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-swiglib.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-loggers.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-loggers.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-sessions.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-sessions.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-tickets.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-tickets.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-tracers.lua71
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql-users.lua (renamed from Master/texmf-dist/tex/context/base/util-sql-users.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sql.lua (renamed from Master/texmf-dist/tex/context/base/util-sql.lua)14
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sta.lua (renamed from Master/texmf-dist/tex/context/base/util-sta.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-sto.lua (renamed from Master/texmf-dist/tex/context/base/util-sto.lua)21
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-str.lua (renamed from Master/texmf-dist/tex/context/base/util-str.lua)15
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-tab.lua (renamed from Master/texmf-dist/tex/context/base/util-tab.lua)67
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-tpl.lua (renamed from Master/texmf-dist/tex/context/base/util-tpl.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/util-you.lua (renamed from Master/texmf-dist/tex/context/base/util-you.lua)0
-rw-r--r--Master/texmf-dist/tex/context/base/mult-def.mkiv177
-rw-r--r--Master/texmf-dist/tex/context/base/node-fnt.lua556
-rw-r--r--Master/texmf-dist/tex/context/base/node-ini.lua262
-rw-r--r--Master/texmf-dist/tex/context/base/node-inj.lua603
-rw-r--r--Master/texmf-dist/tex/context/base/pack-obj.lua93
-rw-r--r--Master/texmf-dist/tex/context/base/pack-obj.mkiv415
-rw-r--r--Master/texmf-dist/tex/context/base/spac-prf.mkiv31
-rw-r--r--Master/texmf-dist/tex/context/base/status-files.pdfbin24456 -> 0 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/status-lua.pdfbin251190 -> 0 bytes
-rw-r--r--Master/texmf-dist/tex/context/base/syst-aux.lua229
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ltb.mkiv766
-rw-r--r--Master/texmf-dist/tex/context/base/toks-ini.lua256
-rw-r--r--Master/texmf-dist/tex/context/base/toks-tra.lua298
-rw-r--r--Master/texmf-dist/tex/context/base/trac-tex.lua122
-rw-r--r--Master/texmf-dist/tex/context/base/type-run.mkiv51
-rw-r--r--Master/texmf-dist/tex/context/base/typo-brk.lua352
-rw-r--r--Master/texmf-dist/tex/context/base/typo-dha.lua415
-rw-r--r--Master/texmf-dist/tex/context/base/util-sql-tracers.lua48
-rw-r--r--Master/texmf-dist/tex/context/base/x-dir-05.mkiv74
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.mkiv855
-rw-r--r--Master/texmf-dist/tex/context/base/x-xtag.mkiv90
-rw-r--r--Master/texmf-dist/tex/context/bib/common/sample.bib (renamed from Master/texmf-dist/tex/context/bib/sample.bib)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-ams.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-ams.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-apa-de.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-apa-de.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-apa-fr.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-apa-fr.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-apa-it.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-apa-it.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-apa.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-apa.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-aps.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-aps.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-num-fr.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-num-fr.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-num.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-num.tex)0
-rw-r--r--Master/texmf-dist/tex/context/bib/mkii/bibl-ssa.tex (renamed from Master/texmf-dist/tex/context/bib/bibl-ssa.tex)0
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2.iccbin0 -> 1992 bytes
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2_iccv4.iccbin0 -> 700 bytes
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_300_eci.iccbin0 -> 1829093 bytes
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_eci.iccbin0 -> 1829077 bytes
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/srgb.iccbin0 -> 3144 bytes
-rw-r--r--Master/texmf-dist/tex/context/colors/icc/profiles/srgb_v4_icc_preference.iccbin0 -> 60960 bytes
-rw-r--r--Master/texmf-dist/tex/context/extra/mag-0000.tex44
-rw-r--r--Master/texmf-dist/tex/context/extra/setup-qr.tex77
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-buy.mkii (renamed from Master/texmf-dist/tex/context/base/type-buy.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-cbg.mkii (renamed from Master/texmf-dist/tex/context/base/type-cbg.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-cow.mkii (renamed from Master/texmf-dist/tex/context/base/type-cow.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-exp.mkii (renamed from Master/texmf-dist/tex/context/base/type-exp.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-fsf.mkii (renamed from Master/texmf-dist/tex/context/base/type-fsf.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-ghz.mkii (renamed from Master/texmf-dist/tex/context/base/type-ghz.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-hgz.mkii (renamed from Master/texmf-dist/tex/context/base/type-hgz.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-mac.mkii (renamed from Master/texmf-dist/tex/context/base/type-mac.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-msw.mkii (renamed from Master/texmf-dist/tex/context/base/type-msw.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-pre.mkii (renamed from Master/texmf-dist/tex/context/base/type-pre.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-win.mkii (renamed from Master/texmf-dist/tex/context/base/type-win.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkii/type-xtx.mkii (renamed from Master/texmf-dist/tex/context/base/type-xtx.mkii)57
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/antykwa-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/antykwa-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/antykwapoltawskiego.lfg (renamed from Master/texmf-dist/tex/context/fonts/antykwapoltawskiego.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/asana-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/asana-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/cambria-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/cambria-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/cambria.lfg16
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/cc-icons.lfg (renamed from Master/texmf-dist/tex/context/fonts/cc-icons.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/ccicons.lfg (renamed from Master/texmf-dist/tex/context/fonts/ccicons.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/demo.lfg (renamed from Master/texmf-dist/tex/context/fonts/demo.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/dingbats.lfg (renamed from Master/texmf-dist/tex/context/fonts/dingbats.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/ebgaramond.lfg (renamed from Master/texmf-dist/tex/context/fonts/ebgaramond.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/euler-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/euler-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/hanbatanglvt.lfg (renamed from Master/texmf-dist/tex/context/fonts/hanbatanglvt.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/husayni.lfg (renamed from Master/texmf-dist/tex/context/fonts/husayni.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/hvmath-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/hvmath-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/informal-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/informal-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/iwona-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/iwona-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/lm-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/lm-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/lm.lfg (renamed from Master/texmf-dist/tex/context/fonts/lm.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/lucida-opentype-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/lucida-opentype-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/lucida-typeone-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/lucida-typeone-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mathtimes-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdbch-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdbch-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdici-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdici-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdpgd-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdpgd-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdpus-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdpus-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdput-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdput-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/mdugm-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/mdugm-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/px-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/px-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/symbol-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/symbol-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/texgyre.lfg (renamed from Master/texmf-dist/tex/context/fonts/texgyre.lfg)5
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/treatments.lfg (renamed from Master/texmf-dist/tex/context/fonts/treatments.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/tx-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/tx-math.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwa.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-antykwa.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwapoltawskiego.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-antykwapoltawskiego.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-asana.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-asana.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-averia.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-averia.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-buy.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-buy.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cambria.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-cambria.mkiv)8
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-charter.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-charter.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cleartype.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-cleartype.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-computer-modern-unicode.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-computer-modern-unicode.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cow.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-cow.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-dejavu.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-dejavu.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-ebgaramond.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-euler.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-euler.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-gentium.mkiv34
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ghz.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-ghz.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hgz.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-hgz.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-husayni.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hvmath.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-hvmath.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-inconsolata.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-inconsolata.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-informal.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-informal.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ipaex.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-ipaex.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-iwona.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-iwona.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-kurier.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-kurier.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lato.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-lato.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-liberation.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-liberation.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-libertine.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-libertine.mkiv)17
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lmnames.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-lucida-opentype.mkiv)44
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-typeone.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-lucida-typeone.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdesign.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-mathdesign.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdigits.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-mathdigits.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathtimes.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-mathtimes.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mscore.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-mscore.mkiv)15
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-opendyslexic.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-osx.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-osx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-postscript.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-postscript.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-punknova.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-punknova.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-texgyre.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv)10
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-unfonts.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-unfonts.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xits.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-xits.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xitsbidi.mkiv (renamed from Master/texmf-dist/tex/context/base/type-imp-xitsbidi.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/unifraktur.lfg (renamed from Master/texmf-dist/tex/context/fonts/unifraktur.lfg)0
-rw-r--r--Master/texmf-dist/tex/context/fonts/mkiv/xits-math.lfg (renamed from Master/texmf-dist/tex/context/fonts/xits-math.lfg)6
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-cs.xml (renamed from Master/texmf-dist/tex/context/interface/cont-cs.xml)77
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-de.xml (renamed from Master/texmf-dist/tex/context/interface/cont-de.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-en.xml (renamed from Master/texmf-dist/tex/context/interface/cont-en.xml)55
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-fr.xml (renamed from Master/texmf-dist/tex/context/interface/cont-fr.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-it.xml (renamed from Master/texmf-dist/tex/context/interface/cont-it.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-nl.xml (renamed from Master/texmf-dist/tex/context/interface/cont-nl.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-pe.xml (renamed from Master/texmf-dist/tex/context/interface/cont-pe.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/cont-ro.xml (renamed from Master/texmf-dist/tex/context/interface/cont-ro.xml)57
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml (renamed from Master/texmf-dist/tex/context/interface/keys-cs.xml)146
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-cz.xml (renamed from Master/texmf-dist/tex/context/interface/keys-cz.xml)0
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-de.xml (renamed from Master/texmf-dist/tex/context/interface/keys-de.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-en.xml (renamed from Master/texmf-dist/tex/context/interface/keys-en.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml (renamed from Master/texmf-dist/tex/context/interface/keys-fr.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-it.xml (renamed from Master/texmf-dist/tex/context/interface/keys-it.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml (renamed from Master/texmf-dist/tex/context/interface/keys-nl.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml (renamed from Master/texmf-dist/tex/context/interface/keys-pe.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml (renamed from Master/texmf-dist/tex/context/interface/keys-ro.xml)142
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-accent.xml252
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-align.xml273
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-anchor.xml35
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-attachment.xml154
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-attribute.xml96
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-backend.xml49
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-background.xml161
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-bar.xml205
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-blackrule.xml93
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-bleed.xml64
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-block.xml120
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-bookmark.xml79
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-boxes.xml982
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-buffer.xml196
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-button.xml187
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-capitals.xml208
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-catcodes.xml123
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-character.xml136
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-characteralign.xml45
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-characterspacing.xml43
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-characterstripping.xml20
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-charwidth.xml17
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-chemical.xml255
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-cleaning.xml47
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-clipping.xml78
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-collector.xml114
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-color.xml597
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-columns.xml111
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-combination.xml131
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-commandhandler.xml314
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-comment.xml140
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-argument.xml497
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-assignment.xml338
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-definitions.xml13
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-keyword.xml704
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-string.xml157
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-common-value.xml546
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-context.pdfbin0 -> 795945 bytes
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-context.xml214
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-conversion.xml632
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-counter.xml517
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-dataset.xml51
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-define.xml23
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-delimitedtext.xml217
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-description.xml172
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-digits.xml26
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-dimension.xml67
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-direction.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-document.xml207
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-dummy.xml58
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-effect.xml62
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-enumeration.xml219
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-export.xml77
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-field.xml383
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-figure.xml50
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-file.xml404
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-filler.xml116
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fillinline.xml43
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fillinrule.xml66
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-firstline.xml52
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fittingpage.xml96
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-floats.xml736
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fontfamily.xml225
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fonts.xml1627
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-form.xml23
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-formula.xml298
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-fraction.xml191
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-framed.xml593
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-graphics.xml516
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-grid.xml189
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-help.xml83
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-highlight.xml64
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-hspace.xml159
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-hyphenation.xml260
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-imposition.xml82
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-indent.xml91
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-indentedtext.xml72
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-initial.xml81
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-injector.xml73
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-insertion.xml48
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interaction.xml160
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interactionbar.xml100
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interactionmenu.xml276
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interactionscreen.xml64
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interface.xml202
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-interlinespace.xml176
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-italiccorrection.xml32
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-itemgroup.xml534
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-items.xml85
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-javascript.xml51
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-kerning.xml93
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-label.xml210
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-labeltext.xml496
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-language.xml200
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-layer.xml327
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-layout.xml367
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-linenumber.xml158
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-lines.xml110
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-linetable.xml165
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-linewidth.xml20
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-list.xml620
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-logo.xml103
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-lohi.xml223
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-lua.xml193
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-makeup.xml180
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-marginblock.xml87
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-margindata.xml469
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-marker.xml33
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-marking.xml174
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-math.xml456
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathalignment.xml67
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathcases.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathfence.xml199
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathmatrix.xml115
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathornament.xml46
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathradical.xml56
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mathstackers.xml1789
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-metapost.xml406
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-mixedcolumns.xml127
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-modes.xml216
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-modules.xml126
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-narrow.xml121
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-naturaltable.xml301
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-note.xml663
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-object.xml132
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-offset.xml74
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-opposite.xml29
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-ornament.xml103
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-output.xml49
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-overlay.xml45
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagebreak.xml135
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagecomment.xml40
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagefigure.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagegrid.xml220
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pageinjection.xml89
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagelayout.xml41
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagenumber.xml184
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pageselection.xml175
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pageshift.xml29
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pagestate.xml59
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pairedbox.xml171
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-papersize.xml303
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-paragraph.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-paragraphnumber.xml29
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-paragraphs.xml168
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-parallel.xml85
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-parbuilder.xml35
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-pdf.xml131
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-penalty.xml29
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-periods.xml43
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-phantom.xml41
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-placement.xml75
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-position.xml528
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-positionbar.xml73
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-positioning.xml98
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-postponing.xml15
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-processor.xml51
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-profile.xml100
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-publication.xml1124
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-random.xml64
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdfbin0 -> 60794 bytes
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-readme.tex114
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-references.xml566
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-regime.xml88
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-register.xml646
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-renderingwindow.xml62
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-replacement.xml26
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-rotatation.xml54
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-scale.xml121
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-script.xml106
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-section.xml671
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-sectionblock.xml125
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-selector.xml52
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-setups.xml224
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-shift.xml85
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-sidebar.xml103
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-smash.xml82
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-sort.xml188
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-soundtrack.xml30
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-spellchecking.xml33
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-startstop.xml78
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-stream.xml74
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-string.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-strut.xml53
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-symbol.xml145
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-synonym.xml212
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-system.xml3534
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-systemlog.xml31
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-table.xml407
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-tabulation.xml270
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-tagging.xml68
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-textbackground.xml147
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-textflow.xml84
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-textrule.xml72
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-texts.xml385
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-thinrule.xml74
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-token.xml31
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-tolerance.xml22
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-tooltip.xml81
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-tracker.xml75
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-translation.xml29
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-twopassdata.xml124
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-typography.xml173
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-unit.xml121
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-variables.xml356
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-verbatim.xml449
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-version.xml78
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-viewerlayer.xml68
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-visualizer.xml156
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-vspace.xml144
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-whitespace.xml62
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-xml.xml827
-rw-r--r--Master/texmf-dist/tex/context/interface/mkiv/i-xtable.xml247
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-abr-01.tex (renamed from Master/texmf-dist/tex/context/base/s-abr-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-abr-02.tex (renamed from Master/texmf-dist/tex/context/base/s-abr-02.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-abr-03.tex (renamed from Master/texmf-dist/tex/context/base/s-abr-03.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-abr-04.tex (renamed from Master/texmf-dist/tex/context/base/s-abr-04.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-cdr-01.tex (renamed from Master/texmf-dist/tex/context/base/s-cdr-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-faq-00.tex (renamed from Master/texmf-dist/tex/context/base/s-faq-00.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-faq-01.tex (renamed from Master/texmf-dist/tex/context/base/s-faq-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-faq-02.tex (renamed from Master/texmf-dist/tex/context/base/s-faq-02.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-faq-03.tex (renamed from Master/texmf-dist/tex/context/base/s-faq-03.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-mag-01.tex (renamed from Master/texmf-dist/tex/context/base/s-mag-01.tex)46
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-mod.ctx (renamed from Master/texmf-dist/tex/context/base/s-mod.ctx)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-00.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-00.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-01.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-02.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-02.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-03.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-03.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-04.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-04.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-05.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-05.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-06.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-06.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-07.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-07.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-08.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-08.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-09.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-09.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-10.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-10.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-11.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-11.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-12.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-12.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-13.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-13.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-14.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-14.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-15.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-15.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-16.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-16.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-18.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-18.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-19.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-19.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-22.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-22.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-23.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-23.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-26.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-26.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-27.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-27.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-50.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-50.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-61.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-61.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-62.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-62.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-63.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-63.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-64.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-64.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-66.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-66.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-67.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-67.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-68.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-68.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-93.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-93.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/common/s-pre-96.tex (renamed from Master/texmf-dist/tex/context/base/s-pre-96.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-arabtex.mkii (renamed from Master/texmf-dist/tex/context/base/m-arabtex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-chart.mkii (renamed from Master/texmf-dist/tex/context/base/m-chart.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-chemic.mkii (renamed from Master/texmf-dist/tex/context/base/m-chemic.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-cweb.mkii (renamed from Master/texmf-dist/tex/context/base/m-cweb.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-database.mkii (renamed from Master/texmf-dist/tex/context/base/m-database.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-dratex.mkii (renamed from Master/texmf-dist/tex/context/base/m-dratex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-edtsnc.mkii (renamed from Master/texmf-dist/tex/context/base/m-edtsnc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-educat.mkii (renamed from Master/texmf-dist/tex/context/base/m-educat.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-format.mkii (renamed from Master/texmf-dist/tex/context/base/m-format.tex)8
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-graph.mkii (renamed from Master/texmf-dist/tex/context/base/m-graph.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-layout.mkii (renamed from Master/texmf-dist/tex/context/base/m-layout.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-level.mkii (renamed from Master/texmf-dist/tex/context/base/m-level.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-narrowtt.mkii (renamed from Master/texmf-dist/tex/context/base/m-narrowtt.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-obsolete.mkii (renamed from Master/texmf-dist/tex/context/base/m-obsolete.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-pdfsnc.mkii (renamed from Master/texmf-dist/tex/context/base/m-pdfsnc.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-pictex.mkii (renamed from Master/texmf-dist/tex/context/base/m-pictex.tex)16
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-pstricks.mkii (renamed from Master/texmf-dist/tex/context/base/m-pstricks.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-r.mkii (renamed from Master/texmf-dist/tex/context/base/m-r.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-steps.mkii (renamed from Master/texmf-dist/tex/context/base/m-steps.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-subsub.mkii (renamed from Master/texmf-dist/tex/context/base/m-subsub.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-tex4ht.mkii (renamed from Master/texmf-dist/tex/context/base/m-tex4ht.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-units.mkii (renamed from Master/texmf-dist/tex/context/base/m-units.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/m-visual.mkii (renamed from Master/texmf-dist/tex/context/base/m-visual.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/ppchtex.mkii (renamed from Master/texmf-dist/tex/context/base/ppchtex.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/rlxcache.rlx (renamed from Master/texmf-dist/tex/context/base/rlxcache.rlx)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/rlxtools.rlx (renamed from Master/texmf-dist/tex/context/base/rlxtools.rlx)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-chi-00.mkii (renamed from Master/texmf-dist/tex/context/base/s-chi-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-fnt-01.mkii (renamed from Master/texmf-dist/tex/context/base/s-fnt-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-fnt-02.mkii (renamed from Master/texmf-dist/tex/context/base/s-fnt-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-grk-00.mkii (renamed from Master/texmf-dist/tex/context/base/s-grk-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-jap-00.mkii (renamed from Master/texmf-dist/tex/context/base/s-jap-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-map-10.mkii (renamed from Master/texmf-dist/tex/context/base/s-map-10.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-mod-00.mkii (renamed from Master/texmf-dist/tex/context/base/s-mod-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-mod-01.mkii (renamed from Master/texmf-dist/tex/context/base/s-mod-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-mod-02.mkii (renamed from Master/texmf-dist/tex/context/base/s-mod-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-pre-17.mkii (renamed from Master/texmf-dist/tex/context/base/s-pre-17.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-pre-30.mkii (renamed from Master/texmf-dist/tex/context/base/s-pre-30.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-pre-60.mkii (renamed from Master/texmf-dist/tex/context/base/s-pre-60.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-pre-71.mkii (renamed from Master/texmf-dist/tex/context/base/s-pre-71.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-ptj-01.mkii (renamed from Master/texmf-dist/tex/context/base/s-ptj-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/s-syntax.mkii (renamed from Master/texmf-dist/tex/context/base/s-syntax.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-calcmath.mkii (renamed from Master/texmf-dist/tex/context/base/x-calcmath.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-chemml.mkii (renamed from Master/texmf-dist/tex/context/base/x-chemml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-chemml.xsd (renamed from Master/texmf-dist/tex/context/base/x-chemml.xsd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii (renamed from Master/texmf-dist/tex/context/base/x-contml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-contml.xsd (renamed from Master/texmf-dist/tex/context/base/x-contml.xsd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-corres.mkii (renamed from Master/texmf-dist/tex/context/base/x-corres.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-corres.rng (renamed from Master/texmf-dist/tex/context/base/x-corres.rng)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-dir-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-dir-01.tex)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-dir-02.mkii130
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-dir-05.mkii (renamed from Master/texmf-dist/tex/context/base/x-dir-05.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fdf-00.mkii (renamed from Master/texmf-dist/tex/context/base/x-fdf-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fe.mkii (renamed from Master/texmf-dist/tex/context/base/x-fe.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-00.dtd (renamed from Master/texmf-dist/tex/context/base/x-fig-00.dtd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-00.mkii (renamed from Master/texmf-dist/tex/context/base/x-fig-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-00.xsd (renamed from Master/texmf-dist/tex/context/base/x-fig-00.xsd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-fig-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-02.mkii (renamed from Master/texmf-dist/tex/context/base/x-fig-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fig-03.mkii (renamed from Master/texmf-dist/tex/context/base/x-fig-03.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-fo.mkii (renamed from Master/texmf-dist/tex/context/base/x-fo.mkii)2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-foxet.mkii (renamed from Master/texmf-dist/tex/context/base/x-foxet.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-mathml.mkii (renamed from Master/texmf-dist/tex/context/base/x-mathml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-mathml.xsd (renamed from Master/texmf-dist/tex/context/base/x-mathml.xsd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-newcml.mkii (renamed from Master/texmf-dist/tex/context/base/x-newcml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-newmme.mkii (renamed from Master/texmf-dist/tex/context/base/x-newmme.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-newmml.mkii (renamed from Master/texmf-dist/tex/context/base/x-newmml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-newmmo.mkii (renamed from Master/texmf-dist/tex/context/base/x-newmmo.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-newpml.mkii (renamed from Master/texmf-dist/tex/context/base/x-newpml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-om2cml.xsl (renamed from Master/texmf-dist/tex/context/base/x-om2cml.xsl)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-openmath.mkii (renamed from Master/texmf-dist/tex/context/base/x-openmath.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-openmath.xsl (renamed from Master/texmf-dist/tex/context/base/x-openmath.xsl)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-physml.mkii (renamed from Master/texmf-dist/tex/context/base/x-physml.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-physml.xsd (renamed from Master/texmf-dist/tex/context/base/x-physml.xsd)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-00.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-02.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-03.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-03.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-04.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-04.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-08.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-08.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-09.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-09.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-10.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-10.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-11.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-11.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-12.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-12.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-20.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-20.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-res-50.mkii (renamed from Master/texmf-dist/tex/context/base/x-res-50.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-sch-00.mkii (renamed from Master/texmf-dist/tex/context/base/x-sch-00.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-sch-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-sch-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-set-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-set-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-set-02.mkii (renamed from Master/texmf-dist/tex/context/base/x-set-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-set-11.mkii (renamed from Master/texmf-dist/tex/context/base/x-set-11.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-set-12.mkii (renamed from Master/texmf-dist/tex/context/base/x-set-12.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-sm2om.xsl (renamed from Master/texmf-dist/tex/context/base/x-sm2om.xsl)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-steps.mkii (renamed from Master/texmf-dist/tex/context/base/x-steps.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-xml-01.mkii (renamed from Master/texmf-dist/tex/context/base/x-xml-01.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-xml-02.mkii (renamed from Master/texmf-dist/tex/context/base/x-xml-02.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkii/x-xml-11.mkii (renamed from Master/texmf-dist/tex/context/base/x-xml-11.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-barcodes.mkiv (renamed from Master/texmf-dist/tex/context/base/m-barcodes.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua (renamed from Master/texmf-dist/tex/context/base/m-chart.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi (renamed from Master/texmf-dist/tex/context/base/m-chart.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-chemic.mkiv (renamed from Master/texmf-dist/tex/context/base/m-chemic.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-cweb.mkiv1373
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-database.lua (renamed from Master/texmf-dist/tex/context/base/m-database.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-database.mkiv (renamed from Master/texmf-dist/tex/context/base/m-database.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-directives.mkiv (renamed from Master/texmf-dist/tex/context/base/m-directives.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv217
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-escrito.lua7088
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-escrito.mkiv184
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-fields.mkiv (renamed from Master/texmf-dist/tex/context/base/m-fields.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv411
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-graph.mkiv (renamed from Master/texmf-dist/tex/context/base/m-graph.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-hemistich.mkiv (renamed from Master/texmf-dist/tex/context/base/m-hemistich.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv (renamed from Master/texmf-dist/tex/context/base/m-ipsum.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-json.mkiv (renamed from Master/texmf-dist/tex/context/base/m-json.mkiv)2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-layout.mkiv102
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-logcategories.mkiv (renamed from Master/texmf-dist/tex/context/base/m-logcategories.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-markdown.lua (renamed from Master/texmf-dist/tex/context/base/m-markdown.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-markdown.mkiv (renamed from Master/texmf-dist/tex/context/base/m-markdown.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-mathcrap.mkiv (renamed from Master/texmf-dist/tex/context/base/m-mathcrap.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-matrix.mkiv (renamed from Master/texmf-dist/tex/context/base/m-matrix.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-mkii.mkiv (renamed from Master/texmf-dist/tex/context/base/m-mkii.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-mkivhacks.mkiv (renamed from Master/texmf-dist/tex/context/base/m-mkivhacks.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi273
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-narrowtt.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua (renamed from Master/texmf-dist/tex/context/base/m-nodechart.lua)20
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.mkvi (renamed from Master/texmf-dist/tex/context/base/m-nodechart.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv (renamed from Master/texmf-dist/tex/context/base/m-ntb-to-xtb.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-obsolete.mkiv (renamed from Master/texmf-dist/tex/context/base/m-obsolete.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv (renamed from Master/texmf-dist/tex/context/base/m-oldfun.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv (renamed from Master/texmf-dist/tex/context/base/m-oldnum.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-pictex.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-pipemode.mkiv (renamed from Master/texmf-dist/tex/context/base/m-pipemode.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.lua (renamed from Master/texmf-dist/tex/context/base/m-pstricks.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.mkiv (renamed from Master/texmf-dist/tex/context/base/m-pstricks.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv (renamed from Master/texmf-dist/tex/context/base/m-punk.mkiv)1
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv (renamed from Master/texmf-dist/tex/context/base/m-scite.mkiv)28
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.lua (renamed from Master/texmf-dist/tex/context/base/m-spreadsheet.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.mkiv (renamed from Master/texmf-dist/tex/context/base/m-spreadsheet.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv (renamed from Master/texmf-dist/tex/context/base/m-sql.mkiv)14
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua (renamed from Master/texmf-dist/tex/context/base/m-steps.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi (renamed from Master/texmf-dist/tex/context/base/m-steps.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-subsub.mkiv76
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkiv (renamed from Master/texmf-dist/tex/context/base/m-timing.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-trackers.mkiv (renamed from Master/texmf-dist/tex/context/base/m-trackers.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-translate.mkiv (renamed from Master/texmf-dist/tex/context/base/m-translate.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-units.mkiv (renamed from Master/texmf-dist/tex/context/base/m-units.mkiv)4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv (renamed from Master/texmf-dist/tex/context/base/m-visual.mkiv)85
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/m-zint.mkiv (renamed from Master/texmf-dist/tex/context/base/m-zint.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/ppchtex.mkiv (renamed from Master/texmf-dist/tex/context/base/ppchtex.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-art-01.mkiv (renamed from Master/texmf-dist/tex/context/base/s-art-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-def-01.mkiv (renamed from Master/texmf-dist/tex/context/base/s-def-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-figures-names.mkiv (renamed from Master/texmf-dist/tex/context/base/s-figures-names.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fnt-10.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fnt-10.mkiv)9
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fnt-20.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fnt-20.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fnt-21.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fnt-21.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fnt-24.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fnt-24.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-charts.mkiv204
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-coverage.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-features.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-features.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-goodies.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-ligatures.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-ligatures.mkiv)113
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-missing.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-shapes.lua)5
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv)52
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-system.lua)7
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-system.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-tables.lua)46
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv)11
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.lua (renamed from Master/texmf-dist/tex/context/base/s-fonts-vectors.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.mkiv (renamed from Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi (renamed from Master/texmf-dist/tex/context/base/s-inf-01.mkvi)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-inf-02.mkiv (renamed from Master/texmf-dist/tex/context/base/s-inf-02.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-inf-03.mkiv (renamed from Master/texmf-dist/tex/context/base/s-inf-03.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-inf-04.mkiv (renamed from Master/texmf-dist/tex/context/base/s-inf-04.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-counters.lua)2
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-counters.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-frequencies.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-sorting.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-system.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-system.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.lua (renamed from Master/texmf-dist/tex/context/base/s-languages-words.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.mkiv (renamed from Master/texmf-dist/tex/context/base/s-languages-words.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-lingual-de.mkiv49
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-map-10.mkiv (renamed from Master/texmf-dist/tex/context/base/s-map-10.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.lua (renamed from Master/texmf-dist/tex/context/base/s-math-characters.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.mkiv (renamed from Master/texmf-dist/tex/context/base/s-math-characters.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.lua (renamed from Master/texmf-dist/tex/context/base/s-math-coverage.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.mkiv (renamed from Master/texmf-dist/tex/context/base/s-math-coverage.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-extensibles.mkiv (renamed from Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.lua (renamed from Master/texmf-dist/tex/context/base/s-math-parameters.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.mkiv (renamed from Master/texmf-dist/tex/context/base/s-math-parameters.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-math-repertoire.mkiv (renamed from Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-mod-00.mkiv (renamed from Master/texmf-dist/tex/context/base/s-mod-00.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-mod-01.mkiv (renamed from Master/texmf-dist/tex/context/base/s-mod-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-mod-02.mkiv (renamed from Master/texmf-dist/tex/context/base/s-mod-02.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pages-statistics.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-physics-units.mkiv (renamed from Master/texmf-dist/tex/context/base/s-physics-units.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-17.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-17.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-30.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-30.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-60.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-60.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-69.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-69.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-70.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-70.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.lua (renamed from Master/texmf-dist/tex/context/base/s-pre-71.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.mkiv (renamed from Master/texmf-dist/tex/context/base/s-pre-71.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv (renamed from Master/texmf-dist/tex/context/base/s-present-tiles.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv (renamed from Master/texmf-dist/tex/context/base/s-references-show.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-reg-01.mkiv (renamed from Master/texmf-dist/tex/context/base/s-reg-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-setups-missing.mkiv (renamed from Master/texmf-dist/tex/context/base/s-set-31.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.lua (renamed from Master/texmf-dist/tex/context/base/s-sql-tables.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.mkiv (renamed from Master/texmf-dist/tex/context/base/s-sql-tables.mkiv)10
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-structure-sections.mkiv (renamed from Master/texmf-dist/tex/context/base/s-structure-sections.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv (renamed from Master/texmf-dist/tex/context/base/s-syntax.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv556
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-typesetting-kerning.mkiv (renamed from Master/texmf-dist/tex/context/base/s-typesetting-kerning.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.lua172
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.mkiv37
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/s-youless.mkiv (renamed from Master/texmf-dist/tex/context/base/s-youless.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.lua (renamed from Master/texmf-dist/tex/context/base/x-asciimath.lua)196
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.mkiv (renamed from Master/texmf-dist/tex/context/base/x-asciimath.mkiv)49
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.lua (renamed from Master/texmf-dist/tex/context/base/x-calcmath.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.mkiv (renamed from Master/texmf-dist/tex/context/base/x-calcmath.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-cals.lua (renamed from Master/texmf-dist/tex/context/base/x-cals.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-cals.mkiv (renamed from Master/texmf-dist/tex/context/base/x-cals.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-chemml.lua (renamed from Master/texmf-dist/tex/context/base/x-chemml.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-chemml.mkiv (renamed from Master/texmf-dist/tex/context/base/x-chemml.mkiv)32
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-ct.lua (renamed from Master/texmf-dist/tex/context/base/x-ct.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-ct.mkiv (renamed from Master/texmf-dist/tex/context/base/x-ct.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-entities.mkiv (renamed from Master/texmf-dist/tex/context/base/x-entities.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-foxet.mkiv (renamed from Master/texmf-dist/tex/context/base/x-foxet.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-html.mkiv (renamed from Master/texmf-dist/tex/context/base/x-html.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-ldx.ctx (renamed from Master/texmf-dist/tex/context/base/x-ldx.ctx)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-ldx.lua (renamed from Master/texmf-dist/tex/context/base/x-ldx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-ldx.mkiv (renamed from Master/texmf-dist/tex/context/base/x-ldx.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua (renamed from Master/texmf-dist/tex/context/base/x-math-svg.lua)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv (renamed from Master/texmf-dist/tex/context/base/x-mathml-basics.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml-html.mkiv (renamed from Master/texmf-dist/tex/context/base/x-mathml-html.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml.lua (renamed from Master/texmf-dist/tex/context/base/x-mathml.lua)4
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv (renamed from Master/texmf-dist/tex/context/base/x-mathml.mkiv)73
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-newmml.mkiv (renamed from Master/texmf-dist/tex/context/base/x-newmml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-pfs-01.mkiv (renamed from Master/texmf-dist/tex/context/base/x-pfs-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-pfsense.ctx (renamed from Master/texmf-dist/tex/context/base/x-pfsense.ctx)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-physml.mkiv (renamed from Master/texmf-dist/tex/context/base/x-physml.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-res-01.mkiv (renamed from Master/texmf-dist/tex/context/base/x-res-01.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-res-50.mkiv (renamed from Master/texmf-dist/tex/context/base/x-res-50.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv876
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups-generate.mkiv18
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups-overview.mkiv (renamed from Master/texmf-dist/tex/context/base/x-set-12.mkiv)50
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups-proofing.mkiv50
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-setups.ctx15
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-steps.mkiv (renamed from Master/texmf-dist/tex/context/base/x-steps.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-udhr.mkiv (renamed from Master/texmf-dist/tex/context/base/x-udhr.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/modules/mkiv/x-xfdf.mkiv (renamed from Master/texmf-dist/tex/context/base/x-xfdf.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-af.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-af.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-agr.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-agr.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-ala.rme37
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-bg.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-bg.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-ca.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-ca.rme)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-cs.rme32
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-cy.rme47
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-da.rme42
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-de.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-de.rme)12
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-deo.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-deo.rme)12
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-es.rme44
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-et.rme47
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-eu.rme59
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-fi.rme24
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-fr.rme47
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-gb.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-gb.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-hr.rme53
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-hu.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-hu.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-is.rme26
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-it.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-it.rme)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-la.rme108
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-lt.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-lt.rme)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-lv.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-lv.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-ml.rme28
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-mn.rme53
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-nb.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-nb.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-nl.rme45
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-nn.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-nn.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-pl.rme36
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-pt.rme58
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-ro.rme57
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-ru.rme24
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-sk.rme30
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-sl.rme57
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-sr.rme27
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-sv.rme59
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-th.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-th.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-tk.rme30
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-tr.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-tr.rme)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-uk.rme18
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-us.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-us.rme)4
-rw-r--r--Master/texmf-dist/tex/context/patterns/common/lang-zh.rme35
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cs.rme89
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cy.rme31
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-da.rme81
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-de.lua54
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-deo.lua54
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-es.lua48
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-es.rme30
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.rme84
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-eu.lua67
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-eu.rme49
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fi.lua100
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fi.rme82
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fr.rme110
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hr.rme24
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-is.rme83
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-la.lua128
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-la.rme110
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ml.lua45
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ml.rme27
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-mn.rme90
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nl.rme102
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pl.rme93
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pt.lua111
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pt.rme90
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ro.rme114
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ru.rme81
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sk.rme87
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sl.rme98
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sr.rme84
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sv.rme116
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-th.lua43
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tk.rme22
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-uk.rme74
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-zh.lua110
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-zh.rme92
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-af.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-af.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-af.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-af.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-agr.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-agr.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-agr.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-agr.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ala.hyp8
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ala.pat747
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-bg.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-bg.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-bg.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-bg.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ca.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-ca.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ca.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-ca.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-cs.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-cs.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-cs.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-cs.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-cy.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-cy.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-cy.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-cy.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-da.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-da.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-da.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-da.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-de.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-de.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-de.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-de.pat)1077
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-deo.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-deo.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-deo.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-deo.pat)1209
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-es.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-es.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-es.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-es.pat)676
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-et.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-et.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-et.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-et.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-eu.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-eu.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-eu.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-eu.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-fi.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-fi.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-fi.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-fi.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-fr.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-fr.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-fr.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-fr.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-gb.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-gb.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-gb.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-gb.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-hr.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-hr.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-hr.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-hr.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-hu.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-hu.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-hu.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-hu.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-is.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-is.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-is.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-is.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-it.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-it.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-it.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-it.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-la.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-la.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-la.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-la.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-lt.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-lt.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-lt.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-lt.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-lv.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-lv.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-lv.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-lv.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ml.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-ml.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ml.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-ml.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-mn.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-mn.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-mn.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-mn.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nb.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-nb.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nb.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-nb.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nl.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-nl.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nl.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-nl.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nn.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-nn.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-nn.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-nn.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-pl.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-pl.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-pl.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-pl.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-pt.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-pt.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-pt.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-pt.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ro.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-ro.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ro.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-ro.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ru.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-ru.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-ru.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-ru.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sk.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-sk.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sk.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-sk.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sl.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-sl.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sl.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-sl.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sr.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-sr.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sr.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-sr.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sv.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-sv.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-sv.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-sv.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-th.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-th.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-th.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-th.pat)99
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-tk.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-tk.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-tk.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-tk.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-tr.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-tr.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-tr.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-tr.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-uk.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-uk.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-uk.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-uk.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-us.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-us.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-us.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-us.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-zh.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-zh.hyp)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkii/lang-zh.pat (renamed from Master/texmf-dist/tex/context/patterns/lang-zh.pat)0
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-af.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-af.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-agr.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-agr.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-ala.lua55
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-bg.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-bg.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-ca.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-ca.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-cs.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-cs.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-cy.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-cy.lua)68
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-da.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-da.lua)117
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-de.lua50
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-deo.lua50
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-es.lua62
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-et.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-et.lua)107
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-eu.lua77
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-fi.lua42
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-fr.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-fr.lua)123
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-gb.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-gb.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-hr.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-hr.lua)69
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-hu.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-hu.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-is.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-is.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-it.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-it.lua)8
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-la.lua126
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-lt.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-lt.lua)8
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-lv.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-lv.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-ml.lua46
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-mn.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-mn.lua)115
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-nb.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-nb.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-nl.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-nl.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-nn.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-nn.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-pl.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-pl.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-pt.lua79
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-ro.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-ro.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-ru.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-ru.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-sk.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-sk.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-sl.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-sl.lua)143
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-sr.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-sr.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-sv.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-sv.lua)65
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-th.lua39
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-tk.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-tk.lua)46
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-tr.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-tr.lua)8
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-uk.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-uk.lua)66
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-us.lua (renamed from Master/texmf-dist/tex/context/patterns/lang-us.lua)6
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/lang-zh.lua53
-rw-r--r--Master/texmf-dist/tex/context/patterns/mkiv/word-xx.lua (renamed from Master/texmf-dist/tex/context/patterns/word-xx.lua)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/aesop-de.tex (renamed from Master/texmf-dist/tex/context/sample/aesop-de.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/bryson.tex (renamed from Master/texmf-dist/tex/context/sample/bryson.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/carey.tex12
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cervantes-es.tex (renamed from Master/texmf-dist/tex/context/sample/cervantes-es.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cow-black.mps154
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cow-black.pdfbin0 -> 5465 bytes
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cow-brown.mps154
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cow-brown.pdfbin0 -> 5556 bytes
-rw-r--r--Master/texmf-dist/tex/context/sample/common/cow.pdfbin0 -> 5526 bytes
-rw-r--r--Master/texmf-dist/tex/context/sample/common/d-res-01.xml (renamed from Master/texmf-dist/tex/context/sample/d-res-01.xml)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/darwin.tex (renamed from Master/texmf-dist/tex/context/sample/darwin.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/davis.tex (renamed from Master/texmf-dist/tex/context/sample/davis.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/dawkins.tex (renamed from Master/texmf-dist/tex/context/sample/dawkins.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/demo-mps.tex (renamed from Master/texmf-dist/tex/context/sample/demo-mps.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/demo-tex.tex (renamed from Master/texmf-dist/tex/context/sample/demo-tex.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/demo-xml.tex (renamed from Master/texmf-dist/tex/context/sample/demo-xml.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/douglas.tex (renamed from Master/texmf-dist/tex/context/sample/douglas.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/hacker.jpg (renamed from Master/texmf-dist/tex/context/sample/hacker.jpg)bin36148 -> 36148 bytes
-rw-r--r--Master/texmf-dist/tex/context/sample/common/hawking.tex (renamed from Master/texmf-dist/tex/context/sample/hawking.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/khatt-ar.tex (renamed from Master/texmf-dist/tex/context/sample/khatt-ar.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/khatt-en.tex (renamed from Master/texmf-dist/tex/context/sample/khatt-en.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/knuth.tex (renamed from Master/texmf-dist/tex/context/sample/knuth.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/linden.tex (renamed from Master/texmf-dist/tex/context/sample/linden.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/lorem.tex (renamed from Master/texmf-dist/tex/context/sample/lorem.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/materie.tex (renamed from Master/texmf-dist/tex/context/sample/materie.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/mill.pngbin0 -> 154869 bytes
-rw-r--r--Master/texmf-dist/tex/context/sample/common/montgomery.tex (renamed from Master/texmf-dist/tex/context/sample/montgomery.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/quevedo-es.tex (renamed from Master/texmf-dist/tex/context/sample/quevedo-es.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/reich.tex (renamed from Master/texmf-dist/tex/context/sample/reich.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/sample.tex (renamed from Master/texmf-dist/tex/context/sample/sample.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/samples.bib (renamed from Master/texmf-dist/tex/context/sample/samples.bib)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/samples.tex (renamed from Master/texmf-dist/tex/context/sample/samples.tex)30
-rw-r--r--Master/texmf-dist/tex/context/sample/common/spider.eps (renamed from Master/texmf-dist/tex/context/sample/spider.eps)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/thuan.tex (renamed from Master/texmf-dist/tex/context/sample/thuan.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/tufte.tex (renamed from Master/texmf-dist/tex/context/sample/tufte.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/waltham.tex10
-rw-r--r--Master/texmf-dist/tex/context/sample/common/ward.tex (renamed from Master/texmf-dist/tex/context/sample/ward.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/weisman.tex (renamed from Master/texmf-dist/tex/context/sample/weisman.tex)0
-rw-r--r--Master/texmf-dist/tex/context/sample/common/zapf.tex (renamed from Master/texmf-dist/tex/context/sample/zapf.tex)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/context-test.tex (renamed from Master/texmf-dist/tex/context/test/context-test.tex)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-a1a-2005.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-a1a-2005.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-a1b-2005.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-a1b-2005.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-ua.mkiv44
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x-common.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x-common.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2001.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x1a-2001.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2003.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x1a-2003.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2002.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x3-2002.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2003.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x3-2003.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x4.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x4.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/test/mkiv/pdf-x4p.mkiv (renamed from Master/texmf-dist/tex/context/test/pdf-x4p.mkiv)0
-rw-r--r--Master/texmf-dist/tex/context/user/mkii/cont-sys.rme (renamed from Master/texmf-dist/tex/context/user/cont-sys.rme)0
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-basics-chr.lua758
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua44
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua80
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-basics-prepare.tex90
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-basics.tex70
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-cbk.lua159
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua8
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua76
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-inj.lua1055
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-lua.lua33
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua19325
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-ota.lua459
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-otn.lua2893
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua13
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-tfm.lua38
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua127
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua104
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.tex25
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-languages.lua15
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-languages.tex2
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua114
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex21
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-pdf.tex199
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-plain.tex29
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex/luatex-test.tex53
-rw-r--r--Master/texmf-dist/tex/latex/context/ppchtex/m-pictex.sty4
-rwxr-xr-xMaster/tlpkg/bin/tlpkginfo2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds1
-rw-r--r--Master/tlpkg/tlpsrc/context.tlpsrc1
2755 files changed, 212413 insertions, 49608 deletions
diff --git a/Master/bin/win32/contextjit.exe b/Master/bin/win32/contextjit.exe
new file mode 100755
index 00000000000..0e7882cf926
--- /dev/null
+++ b/Master/bin/win32/contextjit.exe
Binary files differ
diff --git a/Master/bin/win32/mtxrun.lua b/Master/bin/win32/mtxrun.lua
index 5c09b3b44ff..6a4babe9961 100755
--- a/Master/bin/win32/mtxrun.lua
+++ b/Master/bin/win32/mtxrun.lua
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 3888, stripped down to: 2197
+-- original size: 4734, stripped down to: 2626
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -65,10 +65,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -111,21 +115,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -154,7 +170,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10587, stripped down to: 7815
+-- original size: 10949, stripped down to: 8037
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -444,7 +460,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36977, stripped down to: 20349
+-- original size: 38185, stripped down to: 20990
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -461,7 +477,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -481,7 +497,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -1248,7 +1264,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 361, stripped down to: 322
+-- original size: 372, stripped down to: 329
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1267,7 +1283,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5694, stripped down to: 2827
+-- original size: 5983, stripped down to: 2959
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1354,9 +1370,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1372,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 35724, stripped down to: 21525
+-- original size: 36997, stripped down to: 22376
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -2248,7 +2265,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2348,7 +2365,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 8643, stripped down to: 6232
+-- original size: 9001, stripped down to: 6512
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2663,7 +2680,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 4939, stripped down to: 2830
+-- original size: 5146, stripped down to: 2933
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2808,7 +2825,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 1923, stripped down to: 1133
+-- original size: 2010, stripped down to: 1186
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2881,7 +2898,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15832, stripped down to: 9456
+-- original size: 16390, stripped down to: 9734
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3263,7 +3280,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 20949, stripped down to: 9945
+-- original size: 21647, stripped down to: 10237
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3643,7 +3660,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1211, stripped down to: 1002
+-- original size: 1265, stripped down to: 1038
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3697,7 +3714,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3248, stripped down to: 2266
+-- original size: 3355, stripped down to: 2321
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3785,7 +3802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12531, stripped down to: 5721
+-- original size: 12897, stripped down to: 5882
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4002,7 +4019,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 16765, stripped down to: 11003
+-- original size: 17358, stripped down to: 11378
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4467,7 +4484,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1850, stripped down to: 1568
+-- original size: 1919, stripped down to: 1621
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4539,7 +4556,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37388, stripped down to: 15817
+-- original size: 38699, stripped down to: 16321
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4768,9 +4785,10 @@ if not utf.sub then
end
end
end
-function utf.remapper(mapping,option)
+function utf.remapper(mapping,option,action)
local variant=type(mapping)
if variant=="table" then
+ action=action or mapping
if option=="dynamic" then
local pattern=false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
@@ -4779,15 +4797,15 @@ function utf.remapper(mapping,option)
return ""
else
if not pattern then
- pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option=="pattern" then
- return Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
else
- local pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
return function(str)
if not str or str=="" then
return ""
@@ -5157,7 +5175,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 974, stripped down to: 890
+-- original size: 1012, stripped down to: 912
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5197,7 +5215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34513, stripped down to: 18943
+-- original size: 36053, stripped down to: 19685
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5368,7 +5386,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -5885,7 +5909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 25338, stripped down to: 16247
+-- original size: 28680, stripped down to: 18636
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -6314,19 +6338,21 @@ local f_val_str=formatters["%w%q,"]
local f_val_boo=formatters["%w%l,"]
local f_val_not=formatters["%w{},"]
local f_val_seq=formatters["%w{ %, t },"]
+local f_fin_seq=formatters[" %, t }"]
local f_table_return=formatters["return {"]
local f_table_name=formatters["%s={"]
local f_table_direct=formatters["{"]
local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
-local serialize=table.serialize
-function table.serialize(root,name,specification)
+local original_serialize=table.serialize
+local function serialize(root,name,specification)
if type(specification)=="table" then
- return serialize(root,name,specification)
+ return original_serialize(root,name,specification)
end
- local t
+ local t
local n=1
+ local unknown=false
local function simple_table(t)
local nt=#t
if nt>0 then
@@ -6337,6 +6363,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero=t[0]
if n==nt then
local tt={}
for i=1,nt do
@@ -6353,6 +6380,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ tt[i+1]=v
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
end
end
return nil
@@ -6401,7 +6445,7 @@ function table.serialize(root,name,specification)
elseif tv=="string" then
n=n+1 t[n]=f_val_str(depth,v)
elseif tv=="table" then
- if next(v)==nil then
+ if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
local st=simple_table(v)
@@ -6413,6 +6457,8 @@ function table.serialize(root,name,specification)
end
elseif tv=="boolean" then
n=n+1 t[n]=f_val_boo(depth,v)
+ elseif unknown then
+ n=n+1 t[n]=f_val_str(depth,tostring(v))
end
elseif tv=="number" then
if tk=="number" then
@@ -6421,6 +6467,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_num(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_num(depth,tostring(k),v)
end
elseif tv=="string" then
if tk=="number" then
@@ -6429,6 +6477,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_str(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),v)
end
elseif tv=="table" then
if next(v)==nil then
@@ -6438,6 +6488,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,k)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
local st=simple_table(v)
@@ -6449,6 +6501,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_seq(depth,k,st)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv=="boolean" then
@@ -6458,6 +6512,18 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_boo(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk=="number" then
+ n=n+1 t[n]=f_key_num_value_str(depth,k,tostring(v))
+ elseif tk=="string" then
+ n=n+1 t[n]=f_key_str_value_str(depth,k,tostring(v))
+ elseif tk=="boolean" then
+ n=n+1 t[n]=f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -6490,13 +6556,351 @@ function table.serialize(root,name,specification)
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- do_serialize(root,name,1,0)
+ local st=simple_table(root)
+ if st then
+ return t[1]..f_fin_seq(st)
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n=n+1
t[n]=f_table_finish()
return concat(t,"\n")
end
+table.serialize=serialize
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-fil"] = package.loaded["util-fil"] or true
+
+-- original size: 3577, stripped down to: 2870
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4264, stripped down to: 3349
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -6505,7 +6909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4172, stripped down to: 2953
+-- original size: 4100, stripped down to: 2852
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -6583,39 +6987,32 @@ local f_index={
["table"]=f_table,
["number"]=f_number,
}
-local t_index={
- ["empty"]={ __index=f_empty },
- ["self"]={ __index=f_self },
- ["table"]={ __index=f_table },
- ["number"]={ __index=f_number },
-}
function table.setmetatableindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__index=f_index[f] or f
+ m.__index=i
else
- setmetatable(t,t_index[f] or { __index=f })
+ setmetatable(t,{ __index=i })
end
return t
end
local f_index={
["ignore"]=f_ignore,
}
-local t_index={
- ["ignore"]={ __newindex=f_ignore },
-}
function table.setmetatablenewindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__newindex=f_index[f] or f
+ m.__newindex=i
else
- setmetatable(t,t_index[f] or { __newindex=f })
+ setmetatable(t,{ __newindex=i })
end
return t
end
@@ -6652,7 +7049,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 21780, stripped down to: 15121
+-- original size: 22839, stripped down to: 15769
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -6676,6 +7073,8 @@ local setmetatableindex=table.setmetatableindex
local sortedhash=table.sortedhash
local sortedkeys=table.sortedkeys
local tohash=table.tohash
+local hashes={}
+utilities.parsers.hashes=hashes
local digit=R("09")
local space=P(' ')
local equal=P("=")
@@ -6894,9 +7293,15 @@ function parsers.array_to_string(a,separator)
end
end
local pattern=Cf(Ct("")*Cg(C((1-S(", "))^1)*S(", ")^0*Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or {}
end
+hashes.settings_to_set=table.setmetatableindex(function(t,k)
+ local v=k and lpegmatch(pattern,k) or {}
+ t[k]=v
+ return v
+end)
+getmetatable(hashes.settings_to_set).__mode="kv"
function parsers.simple_hash_to_string(h,separator)
local t,tn={},0
for k,v in sortedhash(h) do
@@ -7173,7 +7578,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2274, stripped down to: 1781
+-- original size: 2350, stripped down to: 1847
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7254,7 +7659,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12482, stripped down to: 8864
+-- original size: 12862, stripped down to: 9104
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7567,7 +7972,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 29359, stripped down to: 20483
+-- original size: 30767, stripped down to: 21355
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -7610,6 +8015,9 @@ 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
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0)
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -7627,6 +8035,8 @@ if tex and (tex.jobname or tex.formatname) then
elseif target=="term" then
texio_write_nl("term","")
io_write(...)
+ elseif type(target)=="number" then
+ texio_write_nl(target,...)
elseif target~="none" then
texio_write_nl("log",target,...)
texio_write_nl("term","")
@@ -7644,6 +8054,8 @@ if tex and (tex.jobname or tex.formatname) then
texio_write("log",...)
elseif target=="term" then
io_write(...)
+ elseif type(target)=="number" then
+ texio_write(target,...)
elseif target~="none" then
texio_write("log",target,...)
io_write(target,...)
@@ -7714,7 +8126,7 @@ if tex and (tex.jobname or tex.formatname) then
write_nl(target,"\n")
end
report=function(a,b,c,...)
- if c then
+ 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]))
@@ -7725,7 +8137,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
direct=function(a,b,c,...)
- if c then
+ if c~=nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -7736,7 +8148,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subreport=function(a,s,b,c,...)
- if c then
+ 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]))
@@ -7747,7 +8159,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subdirect=function(a,s,b,c,...)
- if c then
+ 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])
@@ -7758,7 +8170,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
status=function(a,b,c,...)
- if c then
+ 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]))
@@ -8056,7 +8468,7 @@ function logs.messenger(category,subcategory)
end
end
end
-local function setblocked(category,value)
+local function setblocked(category,value)
if category==true then
category,value="*",true
elseif category==false then
@@ -8071,7 +8483,7 @@ local function setblocked(category,value)
end
else
states=utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c,_ in next,states do
+ for c in next,states do
local v=data[c]
if v then
v.state=value
@@ -8353,7 +8765,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6704, stripped down to: 5343
+-- original size: 6917, stripped down to: 5484
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8474,13 +8886,13 @@ function statistics.show()
end
end
register("lua properties",function()
- local list=status.list()
- local hashchar=tonumber(list.luatex_hashchars)
+ local hashchar=tonumber(status.luatex_hashchars)
+ local hashtype=status.luatex_hashtype
local mask=lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask=="utf" and "τεχ" or "tex")
@@ -8534,7 +8946,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 5829, stripped down to: 3501
+-- original size: 6039, stripped down to: 3616
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -8681,7 +9093,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 4982, stripped down to: 3511
+-- original size: 5142, stripped down to: 3611
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -8811,7 +9223,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 3898, stripped down to: 2644
+-- original size: 4030, stripped down to: 2718
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -8915,7 +9327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7757, stripped down to: 6015
+-- original size: 7985, stripped down to: 6153
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9092,7 +9504,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
--- original size: 7100, stripped down to: 3978
+-- original size: 7313, stripped down to: 4076
if not modules then modules={} end modules ['util-tpl']={
version=1.001,
@@ -9237,7 +9649,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8022, stripped down to: 5038
+-- original size: 8284, stripped down to: 5176
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9424,7 +9836,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6174, stripped down to: 4141
+-- original size: 6358, stripped down to: 4257
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9577,7 +9989,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 45848, stripped down to: 27914
+-- original size: 56973, stripped down to: 35872
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9586,7 +9998,7 @@ if not modules then modules={} end modules ['lxml-tab']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end)
+local trace_entities=false trackers .register("xml.entities",function(v) trace_entities=v end)
local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
@@ -9594,10 +10006,12 @@ local xml=xml
local concat,remove,insert=table.concat,table.remove,table.insert
local type,next,setmetatable,getmetatable,tonumber,rawset=type,next,setmetatable,getmetatable,tonumber,rawset
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
+local sort=table.sort
local utfchar=utf.char
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs
local formatters=string.formatters
+do
xml.xmlns=xml.xmlns or {}
local check=P(false)
local parse=check
@@ -9614,23 +10028,68 @@ end
function xml.resolvens(url)
return lpegmatch(parse,lower(url)) or ""
end
+end
local nsremap,resolvens=xml.xmlns,xml.resolvens
-local stack={}
-local top={}
-local dt={}
-local at={}
-local xmlns={}
-local errorstr=nil
-local entities={}
-local strip=false
-local cleanup=false
-local utfize=false
-local resolve_predefined=false
-local unify_predefined=false
-local dcache={}
-local hcache={}
-local acache={}
-local mt={}
+local stack,level,top,at,xmlnms,errorstr
+local entities,parameters
+local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined
+local dcache,hcache,acache
+local mt,dt,nt
+local function preparexmlstate(settings)
+ if settings then
+ stack={}
+ level=0
+ top={}
+ at={}
+ mt={}
+ dt={}
+ nt=0
+ xmlns={}
+ errorstr=nil
+ strip=settings.strip_cm_and_dt
+ utfize=settings.utfize_entities
+ resolve=settings.resolve_entities
+ resolve_predefined=settings.resolve_predefined_entities
+ unify_predefined=settings.unify_predefined_entities
+ cleanup=settings.text_cleanup
+ entities=settings.entities or {}
+ parameters={}
+ reported_at_errors={}
+ dcache={}
+ hcache={}
+ acache={}
+ if utfize==nil then
+ settings.utfize_entities=true
+ utfize=true
+ end
+ if resolve_predefined==nil then
+ settings.resolve_predefined_entities=true
+ resolve_predefined=true
+ end
+ else
+ stack=nil
+ level=nil
+ top=nil
+ at=nil
+ mt=nil
+ dt=nil
+ nt=nil
+ xmlns=nil
+ errorstr=nil
+ strip=nil
+ utfize=nil
+ resolve=nil
+ resolve_predefined=nil
+ unify_predefined=nil
+ cleanup=nil
+ entities=nil
+ parameters=nil
+ reported_at_errors=nil
+ dcache=nil
+ hcache=nil
+ acache=nil
+ end
+end
local function initialize_mt(root)
mt={ __index=root }
end
@@ -9640,8 +10099,9 @@ end
function xml.checkerror(top,toclose)
return ""
end
+local checkns=xml.checkns
local function add_attribute(namespace,tag,value)
- if cleanup and #value>0 then
+ if cleanup and value~="" then
value=cleanup(value)
end
if tag=="xmlns" then
@@ -9650,21 +10110,30 @@ local function add_attribute(namespace,tag,value)
elseif namespace=="" then
at[tag]=value
elseif namespace=="xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:"..tag]=value
else
at[namespace..":"..tag]=value
end
end
local function add_empty(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top=stack[#stack]
+ top=stack[level]
dt=top.dt
- local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top }
- dt[#dt+1]=t
+ nt=#dt+1
+ local t={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=top
+ }
+ dt[nt]=t
setmetatable(t,mt)
if at.xmlns then
remove(xmlns)
@@ -9672,23 +10141,35 @@ local function add_empty(spacing,namespace,tag)
at={}
end
local function add_begin(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] }
+ top={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=stack[level]
+ }
setmetatable(top,mt)
dt=top.dt
- stack[#stack+1]=top
+ nt=#dt
+ level=level+1
+ stack[level]=top
at={}
end
local function add_end(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
- local toclose=remove(stack)
- top=stack[#stack]
- if #stack<1 then
+ local toclose=stack[level]
+ level=level-1
+ top=stack[level]
+ if level<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg~=tag then
@@ -9696,202 +10177,236 @@ local function add_end(spacing,namespace,tag)
report_xml(errorstr)
end
dt=top.dt
- dt[#dt+1]=toclose
+ nt=#dt+1
+ dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
end
end
-local spaceonly=lpegpatterns.whitespace^0*P(-1)
local function add_text(text)
- local n=#dt
- if cleanup and #text>0 then
- if n>0 then
- local s=dt[n]
+ if text=="" then
+ return
+ end
+ if cleanup then
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..cleanup(text)
+ dt[nt]=s..cleanup(text)
else
- dt[n+1]=cleanup(text)
+ nt=nt+1
+ dt[nt]=cleanup(text)
end
else
+ nt=1
dt[1]=cleanup(text)
end
else
- if n>0 then
- local s=dt[n]
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..text
+ dt[nt]=s..text
else
- dt[n+1]=text
+ nt=nt+1
+ dt[nt]=text
end
else
+ nt=1
dt[1]=text
end
end
end
local function add_special(what,spacing,text)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
if strip and (what=="@cm@" or what=="@dt@") then
else
- dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } }
+ nt=nt+1
+ dt[nt]={ special=true,ns="",tg=what,dt={ text } }
end
end
local function set_message(txt)
errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors={}
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
-local badentity="&error;"
-local badentity="&"
-xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
-}
-local placeholders=xml.placeholders
-local function fromhex(s)
- local n=tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s),true
- end
-end
-local function fromdec(s)
- local n=tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s),true
- end
-end
-local p_rest=(1-P(";"))^0
-local p_many=P(1)^0
-local p_char=lpegpatterns.utf8character
-local parsedentity=P("&")*(P("#x")*(p_rest/fromhex)+P("#")*(p_rest/fromdec))*P(";")*P(-1)+(P("#x")*(p_many/fromhex)+P("#")*(p_many/fromdec))
-local predefined_unified={
- [38]="&amp;",
- [42]="&quot;",
- [47]="&apos;",
- [74]="&lt;",
- [76]="&gt;",
-}
-local predefined_simplified={
- [38]="&",amp="&",
- [42]='"',quot='"',
- [47]="'",apos="'",
- [74]="<",lt="<",
- [76]=">",gt=">",
-}
-local nofprivates=0xF0000
-local privates_u={
- [ [[&]] ]="&amp;",
- [ [["]] ]="&quot;",
- [ [[']] ]="&apos;",
- [ [[<]] ]="&lt;",
- [ [[>]] ]="&gt;",
-}
-local privates_p={}
-local privates_n={
-}
-local escaped=utf.remapper(privates_u,"dynamic")
-local unprivatized=utf.remapper(privates_p,"dynamic")
-xml.unprivatized=unprivatized
-local function unescaped(s)
- local p=privates_n[s]
- if not p then
- nofprivates=nofprivates+1
- p=utfchar(nofprivates)
- privates_n[s]=p
- s="&"..s..";"
- privates_u[p]=s
- privates_p[p]=s
+local grammar_parsed_text_one
+local grammar_parsed_text_two
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
+do
+ local badentity="&"
+ xml.placeholders={
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
+ }
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s),true
+ end
end
- return p
-end
-xml.privatetoken=unescaped
-xml.privatecodes=privates_n
-local function handle_hex_entity(str)
- local h=hcache[str]
- if not h then
- local n=tonumber(str,16)
- h=unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return utfchar(n)
else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
- end
- h="&#x"..str..";"
+ return formatters["d:%s"](s),true
+ end
+ end
+ local p_rest=(1-P(";"))^0
+ local p_many=P(1)^0
+ local p_char=lpegpatterns.utf8character
+ local parsedentity=P("&#")*(P("x")*(p_rest/fromhex)+(p_rest/fromdec))*P(";")*P(-1)+P ("#")*(P("x")*(p_many/fromhex)+(p_many/fromdec))
+ xml.parsedentitylpeg=parsedentity
+ local predefined_unified={
+ [38]="&amp;",
+ [42]="&quot;",
+ [47]="&apos;",
+ [74]="&lt;",
+ [76]="&gt;",
+ }
+ local predefined_simplified={
+ [38]="&",amp="&",
+ [42]='"',quot='"',
+ [47]="'",apos="'",
+ [74]="<",lt="<",
+ [76]=">",gt=">",
+ }
+ local nofprivates=0xF0000
+ local privates_u={
+ [ [[&]] ]="&amp;",
+ [ [["]] ]="&quot;",
+ [ [[']] ]="&apos;",
+ [ [[<]] ]="&lt;",
+ [ [[>]] ]="&gt;",
+ }
+ local privates_p={
+ }
+ local privates_s={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[&]] ]="&U+26;",
+ [ [[']] ]="&U+27;",
+ [ [[<]] ]="&U+3C;",
+ [ [[>]] ]="&U+3E;",
+ [ [[\]] ]="&U+5C;",
+ [ [[{]] ]="&U+7B;",
+ [ [[|]] ]="&U+7C;",
+ [ [[}]] ]="&U+7D;",
+ [ [[~]] ]="&U+7E;",
+ }
+ local privates_n={
+ }
+ local escaped=utf.remapper(privates_u,"dynamic")
+ local unprivatized=utf.remapper(privates_p,"dynamic")
+ local unspecialized=utf.remapper(privates_s,"dynamic")
+ xml.unprivatized=unprivatized
+ xml.unspecialized=unspecialized
+ xml.escaped=escaped
+ local function unescaped(s)
+ local p=privates_n[s]
+ if not p then
+ nofprivates=nofprivates+1
+ p=utfchar(nofprivates)
+ privates_n[s]=p
+ s="&"..s..";"
+ privates_u[p]=s
+ privates_p[p]=s
+ privates_s[p]=s
end
- hcache[str]=h
+ return p
end
- return h
-end
-local function handle_dec_entity(str)
- local d=dcache[str]
- if not d then
- local n=tonumber(str)
- d=unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ xml.privatetoken=unescaped
+ xml.privatecodes=privates_n
+ xml.specialcodes=privates_s
+ function xml.addspecialcode(key,value)
+ privates_s[key]=value or "&"..s..";"
+ end
+ handle_hex_entity=function(str)
+ local h=hcache[str]
+ if not h then
+ local n=tonumber(str,16)
+ h=unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h="&#x"..str..";"
end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ hcache[str]=h
+ end
+ return h
+ end
+ handle_dec_entity=function(str)
+ local d=dcache[str]
+ if not d then
+ local n=tonumber(str)
+ d=unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d="&#"..str..";"
end
- d="&#"..str..";"
+ dcache[str]=d
end
- dcache[str]=d
+ return d
end
- return d
-end
-xml.parsedentitylpeg=parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve)=="function" then
- a=resolve(str) or entities[str]
+ a=resolve(str,entities) or entities[str]
else
a=entities[str]
end
@@ -9927,40 +10442,194 @@ local function handle_any_entity(str)
end
end
end
- acache[str]=a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str]=a
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
+ end
end
+ return a
end
- return a
- else
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ end
+ handle_any_entity_text=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
- acache[str]=a
if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str=="" then
- if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a=badentity
- acache[str]=a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve)=="function" then
+ a=resolve(str,entities) or entities[str]
+ else
+ a=entities[str]
+ end
+ if a then
+ if type(a)=="function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a=a(str) or ""
+ end
+ a=lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a)=="number" then
+ return ""
+ else
+ a=lpegmatch(parsedentity,a) or a
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity=placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a=unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str=="" then
+ a=badentity
+ else
+ a="&"..str..";"
+ end
+ end
+ end
+ end
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
end
- a=unescaped(str)
- acache[str]=a
end
+ return a
+ end
+ end
+ local p_rest=(1-P(";"))^1
+ local spec={
+ [0x23]="\\Ux{23}",
+ [0x24]="\\Ux{24}",
+ [0x25]="\\Ux{25}",
+ [0x5C]="\\Ux{5C}",
+ [0x7B]="\\Ux{7B}",
+ [0x7C]="\\Ux{7C}",
+ [0x7D]="\\Ux{7D}",
+ [0x7E]="\\Ux{7E}",
+ }
+ local hash=table.setmetatableindex(spec,function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
end
- return a
end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local reparsedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ local hash=table.setmetatableindex(function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
+ end
+ end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local unescapedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ xml.reparsedentitylpeg=reparsedentity
+ xml.unescapedentitylpeg=unescapedentity
end
+local escaped=xml.escaped
+local unescaped=xml.unescaped
+local placeholders=xml.placeholders
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
return str
@@ -9987,14 +10656,18 @@ local name=name_yes+name_nop
local utfbom=lpegpatterns.utfbom
local spacing=C(space^0)
local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent=R("AF","af","09")^0
-local decentitycontent=R("09")^0
+local hexentitycontent=R("AF","af","09")^1
+local decentitycontent=R("09")^1
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
- )+(anyentitycontent/handle_any_entity)
+ )+(anyentitycontent/handle_any_entity_dtd)
+local parsedentity_text=P("#")/""*(
+ P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
+ )+(anyentitycontent/handle_any_entity_text)
local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
+local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
-local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
+local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1
local somespace=space^1
local optionalspace=space^0
local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote)
@@ -10004,7 +10677,7 @@ local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error
local attributevalue=value+wrongvalue
local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute
local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext=text_parsed/add_text
+local parsedtext=text_parsed
local unparsedtext=text_unparsed/add_text
local balanced=P { "["*((1-S"[]")+V(1))^0*"]" }
local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty
@@ -10019,21 +10692,52 @@ local endcdata=P("]]")*close
local someinstruction=C((1-endinstruction)^0)
local somecomment=C((1-endcomment )^0)
local somecdata=C((1-endcdata )^0)
-local function normalentity(k,v ) entities[k]=v end
-local function systementity(k,v,n) entities[k]=v end
-local function publicentity(k,v,n) entities[k]=v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k]=v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k]=v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k]=v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k]=v
+end
local begindoctype=open*P("!DOCTYPE")
local enddoctype=close
local beginset=P("[")
local endset=P("]")
+local wrdtypename=C((1-somespace-P(";"))^1)
local doctypename=C((1-somespace-close)^0)
local elementdoctype=optionalspace*P("<!ELEMENT")*(1-close)^0*close
local basiccomment=begincomment*((1-endcomment)^0)*endcomment
+local weirdentitytype=P("%")*(somespace*doctypename*somespace*value)/weirdentity
local normalentitytype=(doctypename*somespace*value)/normalentity
local publicentitytype=(doctypename*somespace*P("PUBLIC")*somespace*value)/publicentity
local systementitytype=(doctypename*somespace*P("SYSTEM")*somespace*value*somespace*P("NDATA")*somespace*doctypename)/systementity
-local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype)*optionalspace*close
-local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+basiccomment+space)^0*optionalspace*endset
+local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype+weirdentitytype)*optionalspace*close
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+local entityresolve=P("%")*(wrdtypename/weirdresolve )*P(";")+P("&")*(wrdtypename/normalresolve)*P(";")
+entitydoctype=entitydoctype+entityresolve
+local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+entityresolve+basiccomment+space)^0*optionalspace*endset
local definitiondoctype=doctypename*somespace*doctypeset
local publicdoctype=doctypename*somespace*P("PUBLIC")*somespace*value*somespace*value*somespace*doctypeset
local systemdoctype=doctypename*somespace*P("SYSTEM")*somespace*value*somespace*doctypeset
@@ -10045,11 +10749,15 @@ local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
-local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
-local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
-local grammar_parsed_text=P { "preamble",
- preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
+grammar_parsed_text_one=P { "preamble",
+ preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0,
+}
+grammar_parsed_text_two=P { "followup",
+ followup=V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
@@ -10059,37 +10767,26 @@ local grammar_unparsed_text=P { "preamble",
children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
- settings=settings or {}
- strip=settings.strip_cm_and_dt
- utfize=settings.utfize_entities
- resolve=settings.resolve_entities
- resolve_predefined=settings.resolve_predefined_entities
- unify_predefined=settings.unify_predefined_entities
- cleanup=settings.text_cleanup
- entities=settings.entities or {}
- if utfize==nil then
- settings.utfize_entities=true
- utfize=true
- end
- if resolve_predefined==nil then
- settings.resolve_predefined_entities=true
- resolve_predefined=true
- end
- stack,top,at,xmlns,errorstr={},{},{},{},nil
- acache,hcache,dcache={},{},{}
- reported_attribute_errors={}
+ settings=settings or {}
+ preparexmlstate(settings)
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1]=top
+ level=level+1
+ stack[level]=top
top.dt={}
dt=top.dt
+ nt=0
if not data or data=="" then
errorstr="empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m=lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m=lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ if m then
else
errorstr="invalid xml file - parsed text"
end
@@ -10105,8 +10802,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
-setmetatable(result,mt)
-setmetatable(result.dt[1],mt)
+ setmetatable(result,mt)
+ setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -10148,13 +10845,10 @@ setmetatable(result.dt[1],mt)
decimals=dcache,
hexadecimals=hcache,
names=acache,
+ intermediates=parameters,
}
}
- strip,utfize,resolve,resolve_predefined=nil,nil,nil,nil
- unify_predefined,cleanup,entities=nil,nil,nil
- stack,top,at,xmlns,errorstr=nil,nil,nil,nil,nil
- acache,hcache,dcache=nil,nil,nil
- reported_attribute_errors,mt,errorhandler=nil,nil,nil
+ preparexmlstate()
return result
end
local function xmlconvert(data,settings)
@@ -10216,15 +10910,15 @@ function xml.toxml(data)
return data
end
end
-local function copy(old,tables)
+local function copy(old)
if old then
- tables=tables or {}
local new={}
- if not tables[old] then
- tables[old]=new
- end
for k,v in next,old do
- new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v
+ if type(v)=="table" then
+ new[k]=table.copy(v)
+ else
+ new[k]=v
+ end
end
local mt=getmetatable(old)
if mt then
@@ -10257,22 +10951,34 @@ local function verbose_element(e,handlers,escape)
local ats=eat and next(eat) and {}
if ats then
local n=0
- for k,v in next,eat do
+ for k in next,eat do
n=n+1
- ats[n]=f_attribute(k,escaped(v))
+ ats[n]=k
+ end
+ if n==1 then
+ local k=ats[1]
+ ats=f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k=ats[i]
+ ats[i]=f_attribute(k,escaped(eat[k]))
+ end
+ ats=concat(ats," ")
end
end
if ern and trace_entities and ern~=ens then
ens=ern
end
+ local n=edt and #edt
if ens~="" then
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10283,19 +10989,19 @@ local function verbose_element(e,handlers,escape)
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10306,7 +11012,7 @@ local function verbose_element(e,handlers,escape)
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -10323,7 +11029,7 @@ local function verbose_cdata(e,handlers)
handlers.handle("<![CDATA[",e.dt[1],"]]>")
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">")
end
local function verbose_root(e,handlers)
handlers.serialize(e.dt,handlers)
@@ -10366,12 +11072,14 @@ local function serialize(e,handlers,...)
end
end
local function xserialize(e,handlers)
- local functions=handlers.functions
- local etg=e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions=handlers.functions
+ local etg=e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
local handlers={}
@@ -10603,7 +11311,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 48229, stripped down to: 30684
+-- original size: 53877, stripped down to: 32495
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -10618,10 +11326,23 @@ local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
-local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end
-local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end
-local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end
+local trace_lpath=false
+local trace_lparse=false
+local trace_lprofile=false
local report_lpath=logs.reporter("xml","lpath")
+if trackers then
+ trackers.register("xml.path",function(v)
+ trace_lpath=v
+ end)
+ trackers.register("xml.parse",function(v)
+ trace_lparse=v
+ end)
+ trackers.register("xml.profile",function(v)
+ trace_lpath=v
+ trace_lparse=v
+ trace_lprofile=v
+ end)
+end
local xml=xml
local lpathcalls=0 function xml.lpathcalls () return lpathcalls end
local lpathcached=0 function xml.lpathcached() return lpathcached end
@@ -10980,13 +11701,27 @@ local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==")
local lp_doequal=P("=")/"=="
local lp_or=P("|")/" or "
local lp_and=P("&")/" and "
-local lp_builtin=P (
- P("text")/"(ll.dt[1] or '')"+
- P("content")/"ll.dt"+
- P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+
- P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+
- P("ns")/"ll.ns"
- )*((spaces*P("(")*spaces*P(")"))/"")
+local builtin={
+ text="(ll.dt[1] or '')",
+ content="ll.dt",
+ name="((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag="ll.tg",
+ position="l",
+ firstindex="1",
+ firstelement="1",
+ first="1",
+ lastindex="(#ll.__p__.dt or 1)",
+ lastelement="(ll.__p__.en or 1)",
+ last="#list",
+ rootposition="order",
+ order="order",
+ element="(ll.ei or 1)",
+ index="(ll.ni or 1)",
+ match="(ll.mi or 1)",
+ namespace="ll.ns",
+ ns="ll.ns",
+}
+local lp_builtin=lpeg.utfchartabletopattern(builtin)/builtin*((spaces*P("(")*spaces*P(")"))/"")
local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])")
local lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0"
local lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))"
@@ -11044,6 +11779,7 @@ local template_f_y=[[
local template_f_n=[[
return xml.finalizers['%s']['%s']
]]
+local register_last_match={ kind="axis",axis="last-match" }
local register_self={ kind="axis",axis="self" }
local register_parent={ kind="axis",axis="parent" }
local register_descendant={ kind="axis",axis="descendant" }
@@ -11121,7 +11857,7 @@ local pathparser=Ct { "patterns",
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
- axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
+ axis=V("last_match")+V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
special=special_1+special_2+special_3,
initial=(P("/")*spaces*Cc(register_initial_child))^-1,
error=(P(1)^1)/register_error,
@@ -11147,6 +11883,7 @@ local pathparser=Ct { "patterns",
preceding=P('preceding::')*Cc(register_preceding ),
preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
+ last_match=P('last-match::')*Cc(register_last_match ),
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -11193,13 +11930,12 @@ local function tagstostring(list)
end
xml.nodesettostring=nodesettostring
local lpath
-local lshowoptions={ functions=false }
local function lshow(parsed)
if type(parsed)=="string" then
parsed=lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow=lshow
local function add_comment(p,str)
@@ -11265,140 +12001,168 @@ lpath=function (pattern)
end
end
xml.lpath=lpath
-local profiled={} xml.profiled=profiled
-local function profiled_apply(list,parsed,nofparsed,order)
- local p=profiled[parsed.pattern]
- if p then
- p.tested=p.tested+1
- else
- p={ tested=1,matched=0,finalized=0 }
- profiled[parsed.pattern]=p
- end
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- p.matched=p.matched+1
- p.finalized=p.finalized+1
- return collected
- end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
+do
+ local profiled={}
+ xml.profiled=profiled
+ local lastmatch=nil
+ local keepmatch=nil
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch=v
+ lastmatch=nil
+ end)
+ end
+ apply_axis["last-match"]=function()
+ return lastmatch or {}
+ end
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p=profiled[parsed.pattern]
+ if p then
+ p.tested=p.tested+1
+ else
+ p={ tested=1,matched=0,finalized=0 }
+ profiled[parsed.pattern]=p
+ end
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ p.matched=p.matched+1
p.finalized=p.finalized+1
return collected
end
- return nil
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ p.finalized=p.finalized+1
+ return collected
+ end
+ return nil
+ end
end
- end
- if collected then
- p.matched=p.matched+1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ if collected then
+ p.matched=p.matched+1
end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
- end
- end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- local axis=pi.axis
- if axis~="self" then
- collected=apply_axis[axis](collected)
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
end
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- return pi.finalizer(collected)
end
- if not collected or #collected==0 then
- local pf=i<nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected)
+ return collected
+ end
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ local axis=pi.axis
+ if axis~="self" then
+ collected=apply_axis[axis](collected)
+ end
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected==0 then
+ local pf=i<nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected)
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed=cache[pattern]
- if parsed then
- lpathcalls=lpathcalls+1
- lpathcached=lpathcached+1
- elseif type(pattern)=="table" then
- lpathcalls=lpathcalls+1
- parsed=pattern
- else
- parsed=lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply=normal_apply
+ if trackers then
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply=profiled_apply
+ elseif trace_lpath then
+ apply=traced_apply
+ else
+ apply=normal_apply
+ end
+ end)
end
- local nofparsed=#parsed
- if nofparsed==0 then
- return
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch=nil
+ return
+ end
+ local parsed=cache[pattern]
+ if parsed then
+ lpathcalls=lpathcalls+1
+ lpathcached=lpathcached+1
+ elseif type(pattern)=="table" then
+ lpathcalls=lpathcalls+1
+ parsed=pattern
+ else
+ parsed=lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch=nil
+ return
+ end
+ local nofparsed=#parsed
+ if nofparsed==0 then
+ lastmatch=nil
+ return
+ end
+ local collected=apply({ list },parsed,nofparsed,list.mi)
+ lastmatch=keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+ function xml.lastmatch()
+ return lastmatch
end
end
-xml.applylpath=applylpath
+local applylpath=xml.applylpath
function xml.filter(root,pattern)
return applylpath(root,pattern)
end
@@ -11676,7 +12440,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3684, stripped down to: 1957
+-- original size: 3787, stripped down to: 2003
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -11745,7 +12509,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28786, stripped down to: 20578
+-- original size: 30566, stripped down to: 21741
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12079,55 +12843,63 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek=collected[c]
local name=nil
local ekdt=ek.dt
- local ekat=ek.at
- local ekrt=ek.__p__
- local epdt=ekrt.dt
- if not attribute or attribute=="" then
- name=(type(ekdt)=="table" and ekdt[1]) or ekdt
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name=ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat=ek.at
+ local ekrt=ek.__p__
+ if ekrt then
+ local epdt=ekrt.dt
+ if not attribute or attribute=="" then
+ name=(type(ekdt)=="table" and ekdt[1]) or ekdt
end
- end
- end
- local data=nil
- if name and name~="" then
- data=loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data=="" then
- epdt[ek.ni]=""
- elseif ekat["parse"]=="text" then
- epdt[ek.ni]=xml.escaped(data)
- else
- local xi=xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni]=""
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name=ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child=xml.body(xi)
- child.__p__=ekrt
- child.__f__=name
- epdt[ek.ni]=child
- local inclusions=xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1]=name
- else
- xmldata.settings.inclusions={ name }
+ local data=nil
+ if name and name~="" then
+ data=loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions=xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1]=name
+ if not data or data=="" then
+ epdt[ek.ni]=""
+ elseif ekat["parse"]=="text" then
+ epdt[ek.ni]=xml.escaped(data)
+ else
+ local xi=xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni]=""
else
- xmldata.settings.badinclusions={ name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child=xml.body(xi)
+ child.__p__=ekrt
+ child.__f__=name
+ epdt[ek.ni]=child
+ local settings=xmldata.settings
+ local inclusions=settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1]=name
+ elseif settings then
+ settings.inclusions={ name }
+ else
+ settings={ inclusions={ name } }
+ xmldata.settings=settings
+ end
+ if child.er then
+ local badinclusions=settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12598,7 +13370,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10274, stripped down to: 7538
+-- original size: 10719, stripped down to: 7841
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -12976,7 +13748,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6351, stripped down to: 4919
+-- original size: 6534, stripped down to: 5072
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13146,7 +13918,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11085, stripped down to: 7662
+-- original size: 11445, stripped down to: 7830
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -13402,7 +14174,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 17216, stripped down to: 10657
+-- original size: 18619, stripped down to: 11042
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -13413,6 +14185,7 @@ if not modules then modules={} end modules ['data-exp']={
}
local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub
local concat,sort=table.concat,table.sort
+local sortedkeys=table.sortedkeys
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local Ct,Cs,Cc,Carg,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.P,lpeg.C,lpeg.S
local type,next=type,next
@@ -13758,14 +14531,16 @@ local nothing=function() end
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern)=="string" then
local pattern=lower(pattern)
- local files=content.files
+ local files=content.files
local remap=content.remap
if files and remap then
- local n=next(files)
+ local f=sortedkeys(files)
+ local n=#f
+ local i=0
local function iterator()
- while n do
- local k=n
- n=next(files,k)
+ while i<n do
+ i=i+1
+ local k=f[i]
if find(k,pattern) then
return files[k],remap and remap[k] or k
end
@@ -13784,7 +14559,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9216, stripped down to: 6798
+-- original size: 9649, stripped down to: 7131
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -13920,6 +14695,11 @@ local relations=allocate {
names={ 'fontconfig','fontconfig file','fontconfig files' },
variable='FONTCONFIG_PATH',
},
+ pk={
+ names={ "pk" },
+ variable='PKFONTS',
+ suffixes={ 'pk' },
+ },
},
obsolete={
enc={
@@ -14063,7 +14843,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 15618, stripped down to: 11629
+-- original size: 16066, stripped down to: 11938
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -14439,7 +15219,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5347, stripped down to: 4015
+-- original size: 5488, stripped down to: 4101
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -14558,7 +15338,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67003, stripped down to: 46291
+-- original size: 67241, stripped down to: 46427
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15828,10 +16608,18 @@ local function findfiles(filename,filetype,allresults)
return result or {},status
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
return filedirname(findfiles(filename,filetype,false)[1] or "")
@@ -16106,7 +16894,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 3950, stripped down to: 2935
+-- original size: 4092, stripped down to: 3016
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -16224,7 +17012,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 910, stripped down to: 823
+-- original size: 935, stripped down to: 838
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -16254,7 +17042,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 530, stripped down to: 475
+-- original size: 548, stripped down to: 483
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -16277,7 +17065,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3863, stripped down to: 3310
+-- original size: 3976, stripped down to: 3391
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -16385,7 +17173,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5010, stripped down to: 3588
+-- original size: 5148, stripped down to: 3680
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -16504,7 +17292,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 3899, stripped down to: 2984
+-- original size: 4000, stripped down to: 3052
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -16595,7 +17383,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 8772, stripped down to: 6841
+-- original size: 9036, stripped down to: 7041
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -16832,7 +17620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8479, stripped down to: 5580
+-- original size: 8712, stripped down to: 5726
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17021,7 +17809,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6569, stripped down to: 5304
+-- original size: 6779, stripped down to: 5444
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17202,7 +17990,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4313, stripped down to: 3227
+-- original size: 4447, stripped down to: 3302
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -17311,7 +18099,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2431, stripped down to: 1996
+-- original size: 2494, stripped down to: 2047
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -17378,7 +18166,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2601, stripped down to: 1627
+-- original size: 2674, stripped down to: 1658
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -17434,7 +18222,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2734, stripped down to: 2354
+-- original size: 2815, stripped down to: 2415
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -17514,7 +18302,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11549, stripped down to: 5905
+-- original size: 11846, stripped down to: 6059
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -17700,7 +18488,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5703, stripped down to: 2507
+-- original size: 5914, stripped down to: 2584
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -17803,7 +18591,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 5955, stripped down to: 4926
+-- original size: 6967, stripped down to: 5631
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -17832,7 +18620,7 @@ local function primaryflags()
end
return concat(flags," ")
end
-function environment.make_format(name)
+function environment.make_format(name,silent)
local engine=environment.ownmain or "luatex"
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
@@ -17889,9 +18677,23 @@ function environment.make_format(name)
lfs.chdir(olddir)
return
end
- local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command=format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result=os.execute(command)
+ local runtime=statistics.stoptiming()
+ if result~=0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name))
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime))
+ end
+ os.remove("temp.log")
+ else
+ local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
if mp then
@@ -17935,10 +18737,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 745793
--- stripped bytes : 269308
+-- original bytes : 796826
+-- stripped bytes : 289016
-- end library merge
@@ -17982,6 +18784,8 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
+ 'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
@@ -18037,13 +18841,21 @@ local ownlibs = { -- order can be made better
}
--- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/data-tmf.lua
+-- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/mkiv/data-tmf.lua
-- c:/data/develop/context/sources/data-tmf.lua
local ownlist = {
-- '.',
-- ownpath ,
owntree .. "/../../../../context/sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
diff --git a/Master/texmf-dist/bibtex/bst/context/cont-ab.bst b/Master/texmf-dist/bibtex/bst/context/mkii/cont-ab.bst
index e09da7ca56b..e09da7ca56b 100644
--- a/Master/texmf-dist/bibtex/bst/context/cont-ab.bst
+++ b/Master/texmf-dist/bibtex/bst/context/mkii/cont-ab.bst
diff --git a/Master/texmf-dist/bibtex/bst/context/cont-au.bst b/Master/texmf-dist/bibtex/bst/context/mkii/cont-au.bst
index d0b87186c66..d0b87186c66 100644
--- a/Master/texmf-dist/bibtex/bst/context/cont-au.bst
+++ b/Master/texmf-dist/bibtex/bst/context/mkii/cont-au.bst
diff --git a/Master/texmf-dist/bibtex/bst/context/cont-no.bst b/Master/texmf-dist/bibtex/bst/context/mkii/cont-no.bst
index 393d13db812..393d13db812 100644
--- a/Master/texmf-dist/bibtex/bst/context/cont-no.bst
+++ b/Master/texmf-dist/bibtex/bst/context/mkii/cont-no.bst
diff --git a/Master/texmf-dist/bibtex/bst/context/cont-ti.bst b/Master/texmf-dist/bibtex/bst/context/mkii/cont-ti.bst
index 34175a0ba84..34175a0ba84 100644
--- a/Master/texmf-dist/bibtex/bst/context/cont-ti.bst
+++ b/Master/texmf-dist/bibtex/bst/context/mkii/cont-ti.bst
diff --git a/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.pdf b/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.pdf
index 2bd7d4216fe..3abc5f16ddc 100644
--- a/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.pdf
+++ b/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.pdf
Binary files differ
diff --git a/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.tex b/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.tex
index cbfc00a3342..d9fca864070 100644
--- a/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.tex
+++ b/Master/texmf-dist/context/data/scite/context/documents/scite-context-readme.tex
@@ -109,9 +109,15 @@
% main text
-\subject{About \SCITE}
+\subject{Warning}
+
+\SCITE\ version 3.61 works ok but 3.62 crashes. It'a a real pity that \SCITE\
+doesn't have the scintillua lexer built in, which would also make integration a
+bit nicer by sharing the \LUA\ instance. The \CONTEXT\ lexing discussed here is
+the lexing I assume when using \CONTEXT\ \MKIV, but alas it's not easy to get it
+running on \UNIX\ and on \MACOSX\ there is no \LUA\ lexing available.
-{\em This manual is under (re)construction.}
+\subject{About \SCITE}
For a long time at \PRAGMA\ we used \TEXEDIT, an editor we'd written in \MODULA.
It had some project management features and recognized the project structure in
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-context.lua b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-context.lua
index f5bd85a531c..bd5fe674978 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-context.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-context.lua
@@ -1,4 +1,4 @@
return {
- ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vcentergroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "vadjustgroupcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathsupdisplay", "mathsupnormal", "mathsupcramped", "mathsubnormal", "mathsubcombined", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "setupdocument", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "continueifinputfile", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar" },
- ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", "startcontextdefinitioncode", "stopcontextdefinitioncode", "texdefinition", "doifelsesetups", "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "fastsetup", "doifelsecommandhandler", "doifcommandhandlerelse", "doifnotcommandhandler", "doifcommandhandler", "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "booleanmodevalue", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "then", "begcsname", "strippedcsname", "checkedstrippedcsname", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthsargumenttrue", "sixthargumentfalse", "sixtsargumenttrue", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "reqno", "htdp", "unvoidbox", "hfilll", "vfilll", "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", "scratchcounter", "globalscratchcounter", "scratchdimen", "globalscratchdimen", "scratchskip", "globalscratchskip", "scratchmuskip", "globalscratchmuskip", "scratchtoks", "globalscratchtoks", "scratchbox", "globalscratchbox", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", "doif", "doifnot", "doifelse", "doifinset", "doifnotinset", "doifelseinset", "doifinsetelse", "doifelsenextchar", "doifnextcharelse", "doifelsenextoptional", "doifnextoptionalelse", "doifelsenextoptionalcs", "doifnextoptionalcselse", "doifelsefastoptionalcheck", "doiffastoptionalcheckelse", "doifelsenextbgroup", "doifnextbgroupelse", "doifelsenextbgroupcs", "doifnextbgroupcselse", "doifelsenextparenthesis", "doifnextparenthesiselse", "doifelseundefined", "doifundefinedelse", "doifelsedefined", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifnothingelse", "doifelsesomething", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifvaluenothingelse", "doifelsedimension", "doifdimensionelse", "doifelsenumber", "doifnumberelse", "doifnumber", "doifnotnumber", "doifelsecommon", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifelseinstring", "doifinstringelse", "doifelseassignment", "doifassignmentelse", "docheckassignment", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "nbsp", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", "removepunctuation", "wait", "writestatus", "define", "defineexpandable", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "firstofoneunexpanded", "firstoftwounexpanded", "secondoftwounexpanded", "firstofthreeunexpanded", "secondofthreeunexpanded", "thirdofthreeunexpanded", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "dowith", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "newmacro", "setnewmacro", "newfraction", "newsignal", "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "doquintupleargument", "dosixtupleargument", "doseventupleargument", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "permitspacesbetweengroups", "dontpermitspacesbetweengroups", "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", "modulonumber", "dividenumber", "getfirstcharacter", "doifelsefirstchar", "doiffirstcharelse", "startnointerference", "stopnointerference", "twodigits", "threedigits", "leftorright", "offinterlineskip", "oninterlineskip", "nointerlineskip", "strut", "halfstrut", "quarterstrut", "depthstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight", "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", "normalreqno", "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", "uncramped", "cramped", "triggermathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", "pushmathstyle", "popmathstyle", "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", "luaexpr", "expelsedoif", "expdoif", "expdoifnot", "expdoifelsecommon", "expdoifcommonelse", "expdoifelseinset", "expdoifinsetelse", "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", "startctxfunction", "stopctxfunction", "ctxfunction", "startctxfunctiondefinition", "stopctxfunctiondefinition", "installctxfunction", "carryoverpar", "assumelongusagecs", "Umathbotaccent", "righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop", "rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop", "autodirhbox", "autodirvbox", "autodirvtop", "lefttoright", "righttoleft", "synchronizelayoutdirection", "synchronizedisplaydirection", "synchronizeinlinedirection", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "nobreak", "allowbreak", "goodbreak" },
+ ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plustwohundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vcentergroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "vadjustgroupcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathsupdisplay", "mathsupnormal", "mathsupcramped", "mathsubnormal", "mathsubcombined", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "setupdocument", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "continueifinputfile", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar", "Ux", "eUx", "Umathaccents" },
+ ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", "startcontextdefinitioncode", "stopcontextdefinitioncode", "texdefinition", "doifelsesetups", "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "fastsetup", "doifelsecommandhandler", "doifcommandhandlerelse", "doifnotcommandhandler", "doifcommandhandler", "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "booleanmodevalue", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "then", "begcsname", "strippedcsname", "checkedstrippedcsname", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthsargumenttrue", "sixthargumentfalse", "sixtsargumenttrue", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "reqno", "mathortext", "htdp", "unvoidbox", "hfilll", "vfilll", "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox", "ruledhpack", "ruledvpack", "ruledtpack", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", "scratchcounter", "globalscratchcounter", "scratchdimen", "globalscratchdimen", "scratchskip", "globalscratchskip", "scratchmuskip", "globalscratchmuskip", "scratchtoks", "globalscratchtoks", "scratchbox", "globalscratchbox", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchcounterfour", "scratchcounterfive", "scratchcountersix", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchdimenfour", "scratchdimenfive", "scratchdimensix", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchskipfour", "scratchskipfive", "scratchskipsix", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchmuskipfour", "scratchmuskipfive", "scratchmuskipsix", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchtoksfour", "scratchtoksfive", "scratchtokssix", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchboxfour", "scratchboxfive", "scratchboxsix", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", "scratchmin", "scratchmax", "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", "doif", "doifnot", "doifelse", "doifinset", "doifnotinset", "doifelseinset", "doifinsetelse", "doifelsenextchar", "doifnextcharelse", "doifelsenextoptional", "doifnextoptionalelse", "doifelsenextoptionalcs", "doifnextoptionalcselse", "doifelsefastoptionalcheck", "doiffastoptionalcheckelse", "doifelsenextbgroup", "doifnextbgroupelse", "doifelsenextbgroupcs", "doifnextbgroupcselse", "doifelsenextparenthesis", "doifnextparenthesiselse", "doifelseundefined", "doifundefinedelse", "doifelsedefined", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifnothingelse", "doifelsesomething", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifvaluenothingelse", "doifelsedimension", "doifdimensionelse", "doifelsenumber", "doifnumberelse", "doifnumber", "doifnotnumber", "doifelsecommon", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifelseinstring", "doifinstringelse", "doifelseassignment", "doifassignmentelse", "docheckassignment", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "nbsp", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", "removepunctuation", "wait", "writestatus", "define", "defineexpandable", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "firstofoneunexpanded", "firstoftwounexpanded", "secondoftwounexpanded", "firstofthreeunexpanded", "secondofthreeunexpanded", "thirdofthreeunexpanded", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "dowith", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "newmacro", "setnewmacro", "newfraction", "newsignal", "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "doquintupleargument", "dosixtupleargument", "doseventupleargument", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "permitspacesbetweengroups", "dontpermitspacesbetweengroups", "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", "modulonumber", "dividenumber", "getfirstcharacter", "doifelsefirstchar", "doiffirstcharelse", "startnointerference", "stopnointerference", "twodigits", "threedigits", "leftorright", "offinterlineskip", "oninterlineskip", "nointerlineskip", "strut", "halfstrut", "quarterstrut", "depthstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight", "leftboundary", "rightboundary", "signalcharacter", "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", "normalreqno", "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", "normalsuperscript", "normalsubscript", "uncramped", "cramped", "triggermathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", "pushmathstyle", "popmathstyle", "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", "luaexpr", "expelsedoif", "expdoif", "expdoifnot", "expdoifelsecommon", "expdoifcommonelse", "expdoifelseinset", "expdoifinsetelse", "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", "startctxfunction", "stopctxfunction", "ctxfunction", "startctxfunctiondefinition", "stopctxfunctiondefinition", "installctxfunction", "cldprocessfile", "cldloadfile", "cldcontext", "cldcommand", "carryoverpar", "assumelongusagecs", "Umathbotaccent", "righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop", "rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop", "autodirhbox", "autodirvbox", "autodirvtop", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "lefttoright", "righttoleft", "synchronizelayoutdirection", "synchronizedisplaydirection", "synchronizeinlinedirection", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalhpack", "naturalvpack", "frule" },
} \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
index ce4c6c01c7e..0fffb65fe6a 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua
@@ -1,10 +1,10 @@
return {
- ["cs"]={ "CAP", "Cap", "Caps", "Character", "Characters", "Cisla", "KAP", "Kap", "Kaps", "MESIC", "MONTH", "Rimskecislice", "Romannumerals", "SLOVA", "SLOVO", "Slova", "Slovo", "VSEDNIDEN", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "Znak", "Znaky", "about", "adaptlayout", "aktualnicislonadpisu", "aktualnidatum", "appendix", "arg", "at", "atleftmargin", "atpage", "atrightmargin", "background", "barevnalista", "barva", "bilemisto", "blackrule", "blackrules", "blank", "bookmark", "bottomspace", "bublinkovanapoveda", "but", "button", "bydliste", "bypassblocks", "cap", "celkovypocetstran", "cernalinka", "cernelinky", "chapter", "character", "characters", "chem", "cisla", "cislonadpisu", "cislopodrovnice", "cislorovnice", "cislostrany", "citace", "citovat", "clip", "clonefield", "color", "column", "comment", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "convertnumber", "copyfield", "correctwhitespace", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "cutspace", "date", "datum", "decouplemarking", "decrementnumber", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecombination", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinmargin", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelayer", "definelayout", "definelist", "definelogo", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepagebreak", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definerawfont", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definerule", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetextposition", "definetextvariable", "definetype", "definetypeface", "definetyping", "defineversion", "definuj", "definujakcent", "definujbarvu", "definujblok", "definujbloksekce", "definujbuffer", "definujfont", "definujformatodkazu", "definujhbox", "definujhlavnipole", "definujinterakcnimenu", "definujkombinovanyseznam", "definujkonverzi", "definujlogo", "definujnadpis", "definujobrazeksymbol", "definujodkaz", "definujodstavce", "definujopis", "definujoramovani", "definujoramovanytext", "definujpaletu", "definujplvouciobjekt", "definujpodpole", "definujpole", "definujpopis", "definujpopisek", "definujprekryv", "definujpreskok", "definujprikaz", "definujprofil", "definujprogram", "definujprostredizakladnihofontu", "definujrejstrik", "definujsablonutabulky", "definujsekci", "definujseznam", "definujseznamodkazu", "definujskupinubarev", "definujstartstop", "definujstyl", "definujstylfontu", "definujsymbol", "definujsynonumumfontu", "definujsynonyma", "definujtabelaci", "definujtext", "definujtrideni", "definujupravu", "definujvelikostpapiru", "definujverzi", "definujvycet", "definujvystup", "definujzakladnifont", "definujzasobnikpoli", "definujznaceni", "definujznak", "delkaseznamu", "description", "determineheadnumber", "determinelistcharacteristics", "disableinteractionmenu", "dodrzujprofil", "dodrzujverzi", "dodrzujverziprofilu", "dvoustrannypapir", "emptylines", "enumeration", "externalfigure", "externiobraz", "fakt", "field", "fieldstack", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "footnote", "footnotetext", "forceblocks", "fraction", "framed", "framedtext", "from", "getbuffer", "getmarking", "getnumber", "godown", "goto", "gotobox", "graycolor", "grid", "hairline", "head", "headnumber", "headsym", "headtext", "hideblocks", "high", "hl", "hlavnijazyk", "hlavniuroven", "hodnotabarvy", "hodnotasedi", "immediatebetweenlist", "immediatetolist", "in", "indentation", "indenting", "inframed", "ininner", "inleft", "inline", "inmargin", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inright", "instalacejazyka", "installlanguage", "interactionbar", "interactionbuttons", "interakcnilista", "interakcnitlacitka", "interaktivnimenu", "item", "items", "its", "jazyk", "jdidolu", "jdina", "jdinabox", "jdinastranu", "jmeno", "kap", "keepblocks", "klonujpole", "komponenta", "konvertujcislo", "kopirujpole", "korekcebilehomista", "labeling", "labels", "labeltext", "language", "leftaligned", "leg", "listsymbol", "loadsorts", "loadsynonyms", "logfields", "lohi", "low", "mainlanguage", "maoramovani", "mapfontsize", "mar", "marginalnilinka", "marginalninadpis", "marginalnislovo", "marginalnitext", "marginrule", "margintext", "marking", "markversion", "matematika", "mathematics", "mazaramovani", "mediaeval", "meritko", "mesic", "mezera", "midaligned", "mirror", "month", "moveformula", "moveongrid", "movesidefloat", "mrizka", "nadpis", "nadruhyokraj", "nalevo", "nalevyokraj", "name", "naokraj", "napravo", "napravyokraj", "nastavbarvu", "nastavbarvy", "nastavbilamista", "nastavblok", "nastavbloksekce", "nastavbuffer", "nastavcernelinky", "nastavcislonadpisu", "nastavcislostrany", "nastavcislovani", "nastavcislovaniodstavcu", "nastavcislovaniradku", "nastavcislovanistran", "nastavcitaci", "nastavdefinicipoznamekpodcarou", "nastavdeleniplvoucichobjektu", "nastavdelitko", "nastavdolnitexty", "nastavexterniobrazy", "nastavhorejsek", "nastavhornitexty", "nastavinterakci", "nastavinterakcnilistu", "nastavinterakcnimenu", "nastavinterakcniobrazovku", "nastavjazyk", "nastavkapitalky", "nastavkombinovanyseznam", "nastavkomentar", "nastavkomentarstrany", "nastavlegendu", "nastavmarginalie", "nastavmarginalniblok", "nastavmarginalnilinky", "nastavmeziradkovoumezeru", "nastavnadpis", "nastavnadpisy", "nastavodkazovani", "nastavodsazovani", "nastavodstavce", "nastavopis", "nastavoramovanetexty", "nastavoramovani", "nastavorez", "nastavotoceni", "nastavpaletu", "nastavplvouciobjekt", "nastavplvouciobjekty", "nastavpodcislostrany", "nastavpodtrzeni", "nastavpole", "nastavpolozky", "nastavpopisek", "nastavpopisky", "nastavpopisy", "nastavpozadi", "nastavpoznamkypodcarou", "nastavprechodstrany", "nastavpreskok", "nastavprofily", "nastavprogramy", "nastavprostredizakladnihofontu", "nastavpublikace", "nastavradkovani", "nastavradky", "nastavrastr", "nastavrejstrik", "nastavrovnice", "nastavsadusymbolu", "nastavsekci", "nastavseznam", "nastavseznamodkazu", "nastavsirkucary", "nastavsloupce", "nastavspodek", "nastavspojeni", "nastavsynchronizaci", "nastavsynchronizacnilistu", "nastavsynonyma", "nastavsystem", "nastavtab", "nastavtabelaci", "nastavtabulky", "nastavtenkelinky", "nastavtext", "nastavtexthlavicky", "nastavtextovelinky", "nastavtextpopisku", "nastavtexttexty", "nastavtextyupati", "nastavtextyzahlavi", "nastavtlacitka", "nastavtoleranci", "nastavtrideni", "nastavtype", "nastavumisteniprotejsku", "nastavumistovani", "nastavupati", "nastavupravu", "nastavurl", "nastavusporadani", "nastavvelikostpapiru", "nastavverze", "nastavvsechnapole", "nastavvycty", "nastavvyplnovelinky", "nastavvyplnoveradky", "nastavvystup", "nastavvzhled", "nastavzahlavi", "nastavzakladnifont", "nastavzarovnani", "nastavznaceni", "nastavzuzeni", "nastrane", "navigating", "nejakyradek", "nekde", "nextsection", "neznamo", "nivy", "nizky", "nocap", "noheaderandfooterlines", "noindenting", "nokap", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "nop", "nospace", "note", "notopandbottomlines", "nowhitespace", "numberofsubpages", "numbers", "obrazovka", "odkaz", "odkaznadatum", "odkaznastranu", "odkaznatext", "odkazujici", "odsazenishora", "odsazenizleva", "odsazovani", "okr", "opakovat", "opis", "opissoubor", "oramovani", "oref", "orez", "otocit", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "oznaceni", "oznacverzi", "packed", "page", "pagedepth", "pageoffset", "pagereference", "paragraph", "parovastrana", "part", "periods", "pis", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placeheadnumber", "placeheadtext", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placepagenumber", "placerawlist", "placereferencelist", "placeregister", "placerule", "placesidebyside", "placesubformula", "placetextvariable", "plnezneni", "pol", "pole", "polozka", "polozky", "popisky", "poppisek", "porovnejpaletu", "porovnejskupinubarev", "position", "positiontext", "pozadi", "pozice", "poznamka", "poznamkapodcarou", "pref", "prelozit", "premistinamrizku", "prepninazakladnifont", "preskoc", "prizpusobivepole", "prizpusobvzhled", "processblocks", "processpage", "produkt", "program", "projekt", "propojeneznaceni", "propojenydokument", "propojenyrejstrik", "prostredi", "publication", "publikace", "quotation", "quote", "ran", "ref", "reference", "referral", "referraldate", "register", "reservefloat", "reset", "resetmarking", "resetnumber", "resettextcontent", "resetznaceni", "rightaligned", "rimskecislice", "romannumerals", "rotate", "rozdelplvouciobjekt", "rozmer", "rozpojeneznaceni", "roztazene", "scale", "schovejbloky", "screen", "section", "sedabarva", "seeregister", "selectblocks", "selectpaper", "selectversion", "setnumber", "settextcontent", "settextvariable", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumber", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setuprule", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstartstop", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextposition", "setuptextrules", "setuptexttexts", "setuptextvariable", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "sirkalevehookraje", "sirkalevemarginalie", "sirkamarginalie", "sirkaokraje", "sirkapapiru", "sirkapravehookraje", "sirkapravemarginalie", "sirkasazby", "sirkaseznamu", "sirkatextu", "sirkatiskpapiru", "sloupec", "slovovpravo", "someline", "somewhere", "sort", "space", "splitfloat", "spodek", "stanovcharakteristickuseznamu", "stanovcislonadpisu", "startalignment", "startbackground", "startbarva", "startbuffer", "startcislovaniradku", "startcitace", "startcolor", "startcolumnmakeup", "startcolumns", "startcolumnset", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startdokument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfloattext", "startformula", "startframedtext", "startglobalni", "starthiding", "startinteractionmenu", "startitemgroup", "startkodovani", "startkomponenta", "startkorekceradku", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startlokalni", "startlokalnipoznamkypodcarou", "startmakeup", "startmarginalniblok", "startmarginalnilinka", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startnezhustene", "startobraz", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startpozadi", "startprehled", "startprekryv", "startproduct", "startprodukt", "startprofil", "startprofile", "startproject", "startprojekt", "startprostredi", "startprotejsek", "startquotation", "startradek", "startradky", "startrastr", "startregister", "startsadasymbolu", "startsloupce", "startspojeni", "startsymbolset", "startsynchronizace", "startsynchronization", "starttable", "starttables", "starttabulate", "starttabulka", "starttabulky", "starttext", "starttextovalinka", "starttextrule", "starttyping", "startumistovani", "startunpacked", "startuprava", "startversion", "startverze", "startzarovnavani", "startzhustene", "startzuzeni", "stopalignment", "stopbackground", "stopbarva", "stopbuffer", "stopcislovaniradku", "stopcitace", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcolumnset", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopdokument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stopglobalni", "stophiding", "stopinteractionmenu", "stopitemgroup", "stopkodovani", "stopkomponenta", "stopkorekceradku", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stoplokalni", "stoplokalnipoznamkypodcarou", "stopmakeup", "stopmarginalniblok", "stopmarginalnilinka", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopnezhustene", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositioning", "stoppostponing", "stoppozadi", "stopprehled", "stopprekryv", "stopproduct", "stopprodukt", "stopprofil", "stopprofile", "stopproject", "stopprojekt", "stopprostredi", "stopprotejsek", "stopquotation", "stopradek", "stopradky", "stoprastr", "stopsloupce", "stopspojeni", "stopsymbolset", "stopsynchronizace", "stopsynchronization", "stoptable", "stoptables", "stoptabulate", "stoptabulka", "stoptabulky", "stoptext", "stoptextovalinka", "stoptextrule", "stoptyping", "stopumistovani", "stopunpacked", "stopuprava", "stopversion", "stopverze", "stopzarovnavani", "stopzhustene", "stopzuzeni", "strana", "stretched", "sub", "subject", "subpagenumber", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "switchtorawfont", "sym", "symbol", "synchronizacnilista", "synchronizationbar", "synchronize", "synchronizovat", "synonym", "tab", "tecky", "tenkalinka", "tenkelinky", "testcolumn", "testpage", "tex", "texthlavicky", "textovalinka", "textpopisku", "textreference", "textrule", "textvariable", "thinrule", "thinrules", "title", "tlacitko", "tlacitkomenu", "tloustkacary", "tooltip", "translate", "tref", "tvrdamezera", "tvrdemezery", "txt", "typ", "type", "typebuffer", "typefile", "ukazbarvu", "ukazexterniobrazy", "ukazmrizku", "ukaznastaveni", "ukazpaletu", "ukazpodpery", "ukazpole", "ukazpostredizakladnihofontu", "ukazramecek", "ukazsadusymbolu", "ukazskupinubarev", "ukazupravu", "ukazvytisk", "ukazvzhled", "ukazzakladnifont", "umistikombinovanyseznam", "umistilegendu", "umistiloga", "umistilokalnipoznamkypodcarou", "umistinadsebe", "umistinamrizku", "umistipodrovnici", "umistipoznamkypodcarou", "umistirejstrik", "umistirovnici", "umistiseznam", "umistivedlesebe", "umistizalozky", "underbar", "underbars", "urcicharakteristikurejstriku", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "uzijJSscripts", "uzijURL", "uzijadresar", "uzijbloky", "uzijexternidokument", "uzijexterniobraz", "uzijexternisoubor", "uzijexternisoubory", "uzijexternizvuk", "uzijkodovani", "uzijmodul", "uzijmoduly", "uzijodkazy", "uzijprikazy", "uzijspeciality", "uzijsymbol", "uzijurl", "version", "verze", "vl", "vlasovalinka", "vlevo", "vpravo", "vradku", "vsedniden", "vyberbloky", "vyberpapir", "vyberverzi", "vyplnenytext", "vyplnovelinky", "vyplnovepole", "vyplnovyradek", "vyskahorejsku", "vyskapapiru", "vyskasazby", "vyskaseznamu", "vyskaspodku", "vyskatextu", "vyskatiskpapiru", "vyskaupati", "vyskazahlavi", "vysoky", "vyznam", "vzdalenosthorejsku", "vzdalenostlevehookraje", "vzdalenostlevemarginalie", "vzdalenostmarginalie", "vzdalenostokraje", "vzdalenostpravehookraje", "vzdalenostpravemarginalie", "vzdalenostspodku", "vzdalenostupati", "vzdalenostzahlavi", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister", "zablokujinterakcnimenu", "zachovejbloky", "zadnamezera", "zadnebilemisto", "zadnedalsibloky", "zadnedalsisoubory", "zadnehorniadolniradky", "zadneodsazovani", "zadnezahlaviaupati", "zadneznaceni", "zadnyrozmer", "zadnyseznam", "zadnytest", "zalozka", "zapisdorejstriku", "zapisdoseznamu", "zapisdoseznamuodkazu", "zapismeziseznam", "zaramovani", "zarovnanonastred", "zarovnanovlevo", "zarovnanovpravo", "zasobnikpoli", "zaznamovepole", "zhustene", "ziskejbuffer", "ziskejznaceni", "zlomek", "znaceni", "znak", "znaky", "zpracujbloky", "zpracujstranu", "zrcadlit", "zref", "zvysujicicislo" },
- ["de"]={ "Buchstabe", "Buchstaben", "CAP", "Cap", "Caps", "Character", "Characters", "KAP", "Kap", "Kaps", "MONAT", "MONTH", "Roemischezahlen", "Romannumerals", "WEEKDAY", "WOCHENTAG", "WOERTER", "WORD", "WORDS", "WORT", "Woerter", "Word", "Words", "Wort", "Ziffern", "about", "abstandlinkerrand", "abstandoben", "abstandrechterrand", "abstandunten", "adaptlayout", "amgitterausrichten", "amgitterneuausrichten", "appendix", "arg", "at", "atleftmargin", "atpage", "atrightmargin", "aufseite", "ausfuellfeld", "ausfuelltext", "ausschnitt", "background", "bearbeitebloecke", "bearbeiteseite", "bedeutung", "behaltebloecke", "bei", "bemerkung", "benutzekodierung", "benutzespezielles", "benutzeverzeichnis", "beschrifteversion", "beschriftung", "bestimmekopfnummer", "bestimmelistencharakeristika", "bestimmeregistercharakteristika", "bildschirm", "blackrule", "blackrules", "blank", "blanko", "bookmark", "bottomspace", "breitelinkerrand", "breiterechterrand", "bruch", "buchstabe", "buchstaben", "but", "button", "bypassblocks", "cap", "chapter", "character", "characters", "chem", "clip", "clonefield", "color", "column", "comment", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "convertnumber", "copyfield", "correctwhitespace", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "cutspace", "date", "datum", "decouplemarking", "decrementnumber", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecombination", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinmargin", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelayer", "definelayout", "definelist", "definelogo", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepagebreak", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definerawfont", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definerule", "defineschriftsynonym", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetextposition", "definetextvariable", "definetype", "definetypeface", "definetyping", "defineversion", "definiereabbsymbol", "definiereabsaetze", "definiereabschnitt", "definiereabschnittsblock", "definiereakzent", "definierebefehl", "definierebeschreibung", "definierebeschreibungen", "definierebeschriftung", "definiereblanko", "definiereblock", "definierefarbe", "definierefarbengruppe", "definierefeld", "definierefeldstapel", "definierefliesstext", "definierefliesstextumgebung", "definieregleitobjekt", "definierehauptfeld", "definierehbox", "definiereinteraktionsmenue", "definierekonversion", "definierelabel", "definiereliste", "definierelogo", "definieren", "definierenummerierung", "definiereoverlay", "definierepalette", "definierepapierformat", "definiereprofil", "definiereprogramme", "definierepuffer", "definierereferenz", "definierereferenzformat", "definierereferenzliste", "definiereregister", "definiereschrift", "definiereschriftstil", "definieresortieren", "definierestartstop", "definierestil", "definieresubfeld", "definieresymbol", "definieresynonyme", "definieretabellenvorlage", "definieretabulator", "definieretext", "definieretippen", "definiereueberschrift", "definiereumbruch", "definiereumrahmt", "definiereumrahmtertext", "definiereversion", "definierezeichen", "definierezusammengestellteliste", "description", "determineheadnumber", "determinelistcharacteristics", "dimension", "disableinteractionmenu", "doppelseite", "doppelseitigespapier", "drehen", "duennelinie", "duennerumriss", "einezeile", "einziehen", "emptylines", "entknuepfebeschriftung", "enumeration", "externalfigure", "externeabbildung", "farbbalken", "farbe", "farbewert", "feld", "feldstapel", "festesspatium", "field", "fieldstack", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "folgeprofil", "folgeprofilversion", "folgeversion", "followprofile", "followprofileversion", "followversion", "footnote", "footnotetext", "forceblocks", "format", "formelnummer", "fraction", "framed", "framedtext", "from", "fussnote", "fusszeileabstand", "fusszeilenhoehe", "gefuelltesrechteck", "gefuelltezeile", "geg", "gesamtseitenanzahl", "gestreckt", "getbuffer", "getmarking", "getnumber", "gitter", "godown", "goto", "gotobox", "graufarbe", "grauwert", "graycolor", "grid", "haarlinie", "hairline", "hauptsprache", "head", "headnumber", "headsym", "headtext", "heutigesdatum", "heutigeskopfnummer", "hideblocks", "high", "hintergrund", "hl", "hoch", "hoeheoben", "hoeheunten", "holebeschriftung", "holepuffer", "imlinken", "imlinkenrand", "immaumrise", "immediatebetweenlist", "immediatetolist", "imrechten", "imrechtenrand", "imumriss", "in", "inaktiviereinteraktionsmenue", "inanderermarginale", "indentation", "indenting", "inframed", "ininner", "inleft", "inline", "inlinkermarginale", "inmargin", "inmarginalie", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inrechtermarginale", "inright", "installieresprache", "installlanguage", "interactionbar", "interactionbuttons", "interaktionsbalken", "interaktionsknopfe", "interaktionsmenue", "inzeile", "irgendwo", "item", "items", "its", "kap", "keepblocks", "keindimension", "keinebeschriftung", "keinebloeckemehr", "keinedateienmehr", "keinekopfundfusszeilen", "keineliste", "keinspatium", "keintest", "keinzeilenobenundunten", "keinzwischenraum", "kleinerdurchschuss", "klonierefeld", "knopf", "komponente", "konvertierezahl", "kopf", "kopfniveau", "kopfnummer", "kopfweite", "kopfzeilenabstand", "kopfzeilenhoehe", "kopierefeld", "korrigierezwischenraum", "label", "labeling", "labels", "labeltext", "language", "leftaligned", "leg", "liniendicke", "linkemarginalafstand", "linkemarginalbreite", "linksbuendig", "listenbreite", "listenhoehe", "listenlaenge", "listsymbol", "loadsorts", "loadsynonyms", "logfields", "lohi", "low", "mainlanguage", "mapfontsize", "mar", "marginalafstand", "marginalbreite", "marginallinie", "marginaltext", "marginaltitel", "marginalwort", "marginrule", "margintext", "marking", "markversion", "mathematics", "mathematik", "maumrise", "mediaeval", "menueknopf", "midaligned", "mirror", "monat", "month", "moveformula", "moveongrid", "movesidefloat", "nachunten", "name", "navigating", "nextsection", "nichteinziehen", "nocap", "noheaderandfooterlines", "noindenting", "nokap", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "nop", "nospace", "note", "notiz", "notopandbottomlines", "nowhitespace", "numberofsubpages", "numbers", "nummererhoehen", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagedepth", "pageoffset", "pagereference", "papierbreite", "papierhoehe", "paragraph", "part", "passelayoutan", "passendfeld", "periods", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placeheadnumber", "placeheadtext", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placepagenumber", "placerawlist", "placereferencelist", "placeregister", "placerule", "placesidebyside", "placesubformula", "placetextvariable", "platzierebookmarks", "platziereformel", "platzierefussnoten", "platzierelegende", "platziereliste", "platzierelogo", "platzierelokalefussnoten", "platzierenebeneinander", "platziereregister", "platziereuntereinander", "platziereunterformel", "platzierezusammengestellteliste", "pos", "position", "positiontext", "posten", "printpapierbreite", "printpapierhoehe", "processblocks", "processpage", "produkt", "program", "programm", "projekt", "publication", "publikation", "punkt", "quotation", "quote", "ran", "randabstand", "randbreite", "rechteck", "rechtecke", "rechtemarginalafstand", "rechtemarginalbreite", "rechtsbuendig", "ref", "reference", "referenz", "referieren", "referral", "referraldate", "register", "registrierefelder", "reservefloat", "reset", "resetmarking", "resetnumber", "resettextcontent", "rightaligned", "roemischezahlen", "romannumerals", "rotate", "ruecksetzten", "ruecksetztenbeschriftung", "rumpfweite", "satzbreite", "satzhoehe", "scale", "schreibezumregister", "schreibezurliste", "schreibezurreferenzliste", "schreibezwischenliste", "screen", "section", "seeregister", "seite", "seitenreferenz", "seitenummer", "selectblocks", "selectpaper", "selectversion", "setnumber", "settext", "settextcontent", "settextvariable", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumber", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setuprule", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstartstop", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextposition", "setuptextrules", "setuptexttexts", "setuptextvariable", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "someline", "somewhere", "sort", "space", "spalte", "spatium", "spiegeln", "splitfloat", "sprache", "startabbildung", "startalignment", "startausrichtung", "startbackground", "startbuffer", "startcolor", "startcolumnmakeup", "startcolumns", "startcolumnset", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startdokument", "startenger", "startenumeration", "startenvironment", "startfact", "startfarbe", "startfigure", "startfloattext", "startformula", "startframedtext", "startgegenueber", "startglobal", "startgrosserdurchschuss", "starthiding", "starthintergrund", "startinteractionmenu", "startitemgroup", "startkleinerdurchschuss", "startkodierung", "startkombination", "startkomponente", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startlokal", "startlokalefussnoten", "startmakeup", "startmarginalblock", "startmarginallinie", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositionieren", "startpositioning", "startpostponing", "startproduct", "startprodukt", "startprofil", "startprofile", "startproject", "startprojekt", "startquotation", "startraster", "startregister", "startspalten", "startsymbolset", "startsynchronisation", "startsynchronization", "starttabelle", "starttabellen", "starttable", "starttables", "starttabulate", "starttext", "starttextlinie", "starttextrule", "starttyping", "startueberblick", "startumbruch", "startumgebung", "startunpacked", "startversion", "startzeile", "startzeilen", "startzeilenkorrektur", "startzeilennumerierung", "startzitat", "stelleabsaetzeein", "stelleabsatznummerierungein", "stelleabschnittein", "stelleabschnittsblockein", "stelleanordnenein", "stelleaufzaehlungenein", "stelleausgabeein", "stelleausrichtungein", "stelleausschnittein", "stellebeschreibungein", "stellebeschriftungein", "stellebilderunterschriftein", "stellebildunterschriftein", "stellebindestrichein", "stelleblankoein", "stelleblockein", "stelledrehenein", "stelleduennerumrissein", "stelleeinziehenein", "stelleengerein", "stelleexterneabbildungenein", "stellefarbeein", "stellefarbenein", "stellefeldein", "stellefelderin", "stellefliesstextein", "stellefliesstextumgebungein", "stelleformelnein", "stellefussnotendefinitionein", "stellefussnotenein", "stellefusszeileein", "stellefusszeilentextein", "stellegefuelltesrechteckein", "stellegefuelltezeileein", "stellegegenueberplatzierenein", "stellegleitobjekteein", "stellegleitobjektein", "stellehintergruendeein", "stellehintergrundein", "stelleinmarginalieein", "stelleinteraktionein", "stelleinteraktionsbalkenein", "stelleinteraktionsbildschirmein", "stelleinteraktionsmenueein", "stelleknopfein", "stellekombinationein", "stellekommentarein", "stellekopfzahlein", "stellekopfzeileein", "stellekopfzeilentextein", "stellelabeltextein", "stellelayoutein", "stellelegendeein", "stellelinienbreiteein", "stellelisteein", "stellemarginalblockein", "stellemarginallinieein", "stellenobenein", "stellenummerierungein", "stellepaletteein", "stellepapierformatein", "stelleplatziegeteiltegleitobjekt", "stellepositionierenein", "stellepostenein", "stelleprofilein", "stelleprogrammein", "stellepublikationein", "stellepufferein", "stellerasterein", "stellerechteckein", "stellereferenzierenein", "stellereferenzlisteein", "stelleregisterein", "stelleseitenkommentarein", "stelleseitennummerein", "stelleseitennummeriernungein", "stelleseitenuebergangein", "stellesortierenein", "stellespaltenein", "stellespatiumein", "stellespracheein", "stellesymbolsetein", "stellesynchronisationein", "stellesynchronisationsbalkenein", "stellesynonymein", "stellesystemein", "stelletabein", "stelletabellenein", "stelletabulatorein", "stelletextein", "stelletextobenein", "stelletexttexteein", "stelletextumrissein", "stelletextuntenein", "stelletipein", "stelletippenein", "stelletoleranzein", "stelleueberschriftein", "stelleueberschriftenein", "stelleueberschrifttextein", "stelleumbruchein", "stelleumrahmtein", "stelleumrahmtetexteein", "stelleuntenein", "stelleunterseitennummerein", "stelleunterstreichenein", "stelleurlein", "stelleversalienein", "stelleversionein", "stellezeilenabstandein", "stellezeilenein", "stellezeilennumerierungein", "stellezitierenein", "stellezusammengestelltelisteein", "stellezwischenraumein", "stopalignment", "stopausrichtung", "stopbackground", "stopbuffer", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcolumnset", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopdokument", "stopenger", "stopenumeration", "stopenvironment", "stopfact", "stopfarbe", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stopgegenueber", "stopglobal", "stopgrosserdurchschuss", "stophiding", "stophintergrund", "stopinteractionmenu", "stopitemgroup", "stopkleinerdurchschuss", "stopkodierung", "stopkombination", "stopkomponente", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stoplokal", "stoplokalefussnoten", "stopmakeup", "stopmarginalblock", "stopmarginallinie", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositionieren", "stoppositioning", "stoppostponing", "stopproduct", "stopprodukt", "stopprofil", "stopprofile", "stopproject", "stopprojekt", "stopquotation", "stopraster", "stopspalten", "stopsymbolset", "stopsynchronisation", "stopsynchronization", "stoptabelle", "stoptabellen", "stoptable", "stoptables", "stoptabulate", "stoptext", "stoptextlinie", "stoptextrule", "stoptyping", "stopueberblick", "stopumbruch", "stopumgebung", "stopunpacked", "stopversion", "stopzeile", "stopzeilen", "stopzeilenkorrektur", "stopzeilennumerierung", "stopzitat", "stretched", "sub", "subject", "subpagenumber", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "switchtorawfont", "sym", "symbol", "synchronisationsbalken", "synchronisieren", "synchronizationbar", "synchronize", "synonym", "tab", "teilegleitobjekt", "testcolumn", "testpage", "tex", "textbreite", "texthoehe", "textlinie", "textreference", "textreferenz", "textrule", "textvariable", "thinrule", "thinrules", "tief", "tiho", "tip", "tippedatei", "tippen", "tippepuffer", "title", "tooltip", "translate", "txt", "typ", "type", "typebuffer", "typefile", "ueber", "ueberschrifttext", "uebersetzten", "umgebung", "umrahmt", "unbekant", "underbar", "underbars", "unterformelnummer", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "verbergebloecke", "vergleichefarbengruppe", "vergleichepalette", "verknuepfebeschriftung", "verknuepfedokument", "verknuepfregister", "version", "verweis", "verweisdatum", "verwendeJSscript", "verwendeURL", "verwendebefehl", "verwendebloecke", "verwendeexteresdokument", "verwendeexterneabbildung", "verwendeexternedatei", "verwendeexternedateien", "verwendeexternestonstueck", "verwendemodul", "verwendemodule", "verwendereferenzen", "verwendesymbole", "verwendeurl", "vl", "volleswort", "von", "waehlebloeckeaus", "waehlepapieraus", "waehleversionaus", "wechselezumfliesstext", "weekday", "whitespace", "wiederholen", "wochentag", "wohnort", "wordright", "wortrechts", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister", "zeigedruck", "zeigeeinstellungen", "zeigeexterneabbildungen", "zeigefarbe", "zeigefarbengruppe", "zeigefelder", "zeigefliesstext", "zeigefliesstextumgebung", "zeigegitter", "zeigelayout", "zeigepalette", "zeigerahmen", "zeigestruts", "zeigeumbruch", "zentriert", "ziffern", "zitat", "zitieren", "zu", "zurbox", "zurseite", "zwischenraum" },
- ["en"]={ "CAP", "Cap", "Caps", "Character", "Characters", "MONTH", "Numbers", "Romannumerals", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "about", "adaptlayout", "adding", "appendix", "arg", "at", "atleftmargin", "atpage", "atrightmargin", "background", "backspace", "blackrule", "blackrules", "blank", "bookmark", "bottomdistance", "bottomheight", "bottomspace", "but", "button", "bypassblocks", "cap", "chapter", "character", "characters", "chem", "clip", "clonefield", "color", "colorbar", "colorvalue", "column", "comment", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completepagenumber", "completeregister", "component", "convertnumber", "copyfield", "correctwhitespace", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "cutspace", "date", "decouplemarking", "decrementnumber", "define", "defineaccent", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecharacter", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecombination", "definecombinedlist", "definecommand", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontstyle", "definefontsynonym", "defineframed", "defineframedtext", "definehbox", "definehead", "defineindentedtext", "defineinmargin", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelayer", "definelayout", "definelist", "definelogo", "definemainfield", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepagebreak", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definerawfont", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definerule", "definesection", "definesectionblock", "definesorting", "definestartstop", "definestyle", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetextbackground", "definetextposition", "definetextvariable", "definetype", "definetypeface", "definetyping", "defineversion", "description", "determineheadnumber", "determinelistcharacteristics", "determineregistercharacteristics", "dimension", "disableinteractionmenu", "domicile", "donttest", "edgedistance", "edgewidth", "emptylines", "enumeration", "environment", "externalfigure", "fact", "field", "fieldstack", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspace", "fixedspaces", "followprofile", "followprofileversion", "followversion", "footerdistance", "footerheight", "footnote", "footnotetext", "forceblocks", "formulanumber", "fraction", "framed", "framedtext", "from", "getbuffer", "getmarking", "getnumber", "godown", "goto", "gotobox", "gotopage", "graycolor", "greyvalue", "grid", "hairline", "head", "headerdistance", "headerheight", "headlevel", "headnumber", "headsym", "headtext", "hideblocks", "high", "hl", "immediatebetweenlist", "immediatetolist", "in", "incrementnumber", "indentation", "indenting", "inframed", "infull", "ininner", "inleft", "inleftedge", "inleftmargin", "inline", "inmaframed", "inmargin", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inright", "inrightedge", "inrightmargin", "installlanguage", "interactionbar", "interactionbuttons", "interactionmenu", "item", "items", "its", "keepblocks", "label", "labeling", "labels", "labeltext", "language", "leftaligned", "leftedgedistance", "leftedgewidth", "leftmargindistance", "leftmarginwidth", "leg", "linethickness", "listheight", "listlength", "listsymbol", "listwidth", "loadsorts", "loadsynonyms", "logfields", "lohi", "low", "maframed", "mainlanguage", "makeupheight", "makeupwidth", "mapfontsize", "mar", "margindistance", "marginrule", "margintext", "margintitle", "marginwidth", "marginword", "marking", "markversion", "mathematics", "mediaeval", "menubutton", "midaligned", "mirror", "month", "moveformula", "moveongrid", "movesidefloat", "name", "navigating", "nextsection", "nocap", "nodimension", "noheaderandfooterlines", "noindenting", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "nop", "nospace", "note", "notopandbottomlines", "nowhitespace", "numberofsubpages", "numbers", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagedepth", "pagenumber", "pageoffset", "pagereference", "paperheight", "paperwidth", "paragraph", "part", "periods", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placeheadnumber", "placeheadtext", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placepagenumber", "placerawlist", "placereferencelist", "placeregister", "placerule", "placesidebyside", "placesubformula", "placetextvariable", "position", "positiontext", "printpaperheight", "printpaperwidth", "processblocks", "processpage", "product", "program", "project", "publication", "quotation", "quote", "ran", "redo", "ref", "reference", "referral", "referraldate", "referring", "register", "remark", "reservefloat", "reset", "resetmarking", "resetnumber", "resettextcontent", "rightaligned", "rightedgedistance", "rightedgewidth", "rightmargindistance", "rightmarginwidth", "romannumerals", "rotate", "scale", "screen", "section", "seeregister", "selectblocks", "selectpaper", "selectversion", "setnumber", "settextcontent", "settextvariable", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulae", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitemizations", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumber", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagecomment", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setuprule", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstartstop", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextbackground", "setuptextposition", "setuptextrules", "setuptexttexts", "setuptextvariable", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "someline", "somewhere", "sort", "space", "splitfloat", "startalignment", "startbackground", "startbuffer", "startcoding", "startcolor", "startcolumnmakeup", "startcolumns", "startcolumnset", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfloattext", "startformula", "startframed", "startframedtext", "startglobal", "starthiding", "startinteractionmenu", "startitemgroup", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startmakeup", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startproduct", "startprofile", "startproject", "startquotation", "startraster", "startregister", "startsymbolset", "startsynchronization", "starttable", "starttables", "starttabulate", "starttext", "starttextbackground", "starttextrule", "starttyping", "startunpacked", "startversion", "stopalignment", "stopbackground", "stopbuffer", "stopcoding", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcolumnset", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframed", "stopframedtext", "stopglobal", "stophiding", "stopinteractionmenu", "stopitemgroup", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositioning", "stoppostponing", "stopproduct", "stopprofile", "stopproject", "stopquotation", "stopraster", "stopsymbolset", "stopsynchronization", "stoptable", "stoptables", "stoptabulate", "stoptext", "stoptextbackground", "stoptextrule", "stoptyping", "stopunpacked", "stopversion", "stretched", "sub", "subformulanumber", "subject", "subpagenumber", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "switchtorawfont", "sym", "symbol", "symoffset", "synchronizationbar", "synchronize", "synonym", "tab", "testcolumn", "testpage", "tex", "textheight", "textreference", "textrule", "textvariable", "textwidth", "thinrule", "thinrules", "title", "tooltip", "topdistance", "topheight", "topspace", "totalnumberofpages", "translate", "txt", "typ", "type", "typebuffer", "typefile", "underbar", "underbars", "unitmeaning", "unknown", "useJSscripts", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usemodules", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "useurl", "version", "vl", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister" },
- ["fr"]={ "CAP", "Cap", "Caps", "Caractere", "Caracteres", "Character", "Characters", "Chiffresromains", "JOURSEMAINE", "MOIS", "MONTH", "MOT", "MOTS", "Mot", "Mots", "Numeros", "Romannumerals", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "a", "about", "adaptedisposition", "adaptlayout", "affectenumero", "affectevariabletexte", "ajustechamp", "alaligne", "alapage", "aligneadroite", "aligneagauche", "aligneaumilieu", "appendix", "arg", "arriereplan", "at", "atleftmargin", "atpage", "atrightmargin", "background", "baha", "barrecouleur", "barreinteraction", "barresynchronisation", "bas", "blackrule", "blackrules", "blank", "bookmark", "bouton", "boutonmenu", "boutonsinteraction", "but", "button", "bypassblocks", "cacheblocs", "cap", "caractere", "caracteres", "champ", "changepolicebrute", "changepolicecorps", "chapter", "character", "characters", "chem", "chiffresromains", "citation", "citer", "clip", "clonechamp", "clonefield", "colonne", "color", "column", "comment", "commentaire", "comparecolorgroup", "comparegroupecouleur", "comparepalet", "comparepalette", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completenumeropage", "completeregister", "completeregistre", "composant", "composeenalinea", "concernant", "convertitnumero", "convertnumber", "copitchamp", "copyfield", "correctwhitespace", "corrigeespaceblanc", "couleur", "couleurgrise", "coupledocument", "coupledregister", "couplemarking", "couplemarquage", "couplepage", "couplepaper", "couplepapier", "coupleregister", "coupleregistre", "crlf", "currentdate", "currentheadnumber", "cutspace", "dactylographier", "dans", "dansautremarge", "dansborddroit", "dansbordgauche", "dansdroite", "dansgauche", "dansmarge", "dansmargedroite", "dansmargegauche", "date", "datecourante", "daterecommandation", "de", "decouplemarking", "decouplemarquage", "decrementenumero", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecombination", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelist", "definelogo", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetype", "definetypeface", "definetyping", "defineversion", "definicaractere", "definit", "definitaccent", "definitbloc", "definitblocsection", "definitbuffer", "definitcalque", "definitchamp", "definitchampprincipal", "definitcommande", "definitconversion", "definitcouleur", "definitdactylo", "definitdansmarge", "definitdemarrestoppe", "definitdescription", "definitdisposition", "definitenumeration", "definitenvironnementpolicecorps", "definitetiquette", "definitflottant", "definitformatreference", "definitgroupecouleur", "definithbox", "definitjeucolonne", "definitliste", "definitlisteimbriquee", "definitlistereference", "definitlogo", "definitmakeup", "definitmarquage", "definitmenuinteraction", "definitnotepdp", "definitpalette", "definitparagraphes", "definitpilechamp", "definitpolice", "definitpolicebrute", "definitpolicecorps", "definitpositiontexte", "definitprofil", "definitprogramme", "definitreference", "definitregistre", "definitregle", "definitrevetement", "definitsautdecolonne", "definitsautdepage", "definitsection", "definitsortie", "definitsouschamp", "definitstyle", "definitstylepolice", "definitsymbole", "definitsymbolefigure", "definitsynonymepolice", "definitsynonymes", "definittabulation", "definittaillepapier", "definittete", "definittexte", "definittrametableau", "definittri", "definittype", "definitvariabletexte", "definitversion", "definitvide", "demarrealignement", "demarrearriereplan", "demarreblocmarge", "demarrecitation", "demarreciter", "demarrecodage", "demarrecolonnes", "demarrecombinaison", "demarrecompoetroite", "demarrecomposant", "demarrecorrectionligne", "demarrecouleur", "demarredegroupe", "demarredocument", "demarreenvironement", "demarrefigure", "demarreglobal", "demarregroupe", "demarrejeucolonne", "demarrejeusymboles", "demarreligne", "demarreligneregleetexte", "demarrelignes", "demarrelocal", "demarremakeup", "demarremargereglee", "demarrenotespdplocales", "demarrenumerotationligne", "demarreopposition", "demarrepositionnement", "demarreproduit", "demarreprofil", "demarreprojet", "demarreraster", "demarrerevetement", "demarresynchronisation", "demarretableau", "demarretableaux", "demarretexte", "demarreversion", "demarrevuedensemble", "deplaceformule", "deplacesurgrille", "description", "determinecaracteristiqueliste", "determinecaracteristiquesregistre", "determineheadnumber", "determinelistcharacteristics", "determinenumerotete", "dimension", "disableinteractionmenu", "distancebord", "distanceborddroit", "distancebordgauche", "distanceentete", "distanceinf", "distancemarge", "distancemargedroite", "distancemargegauche", "distancepdp", "distancesup", "domicile", "echelle", "ecran", "ecritdansliste", "ecritdanslistereference", "ecritentreliste", "ecritregistre", "el", "element", "elements", "emptylines", "enumeration", "environement", "espace", "espaceblanc", "espacefixe", "espaceinf", "espacesfixes", "espacesup", "etiquette", "etiquettes", "etire", "externalfigure", "fait", "faitreference", "fichierdactylo", "field", "fieldstack", "figureexterne", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "footnote", "footnotetext", "forceblocks", "forceblocs", "fraction", "framed", "framedtext", "from", "gardeblocs", "getbuffer", "getmarking", "getnumber", "godown", "goto", "gotobox", "graycolor", "grid", "grille", "groupe", "hairline", "haut", "hauteureditionpapier", "hauteurentete", "hauteurinf", "hauteurliste", "hauteurmakeup", "hauteurpapier", "hauteurpdp", "hauteursup", "hauteurtexte", "head", "headnumber", "headsym", "headtext", "hideblocks", "high", "hl", "immediatebetweenlist", "immediatetolist", "in", "inconnu", "incrementenumero", "indentation", "indenting", "inframed", "infull", "inhibemenuinteraction", "ininner", "inleft", "inline", "inmargin", "inmframed", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inright", "installelangue", "installlanguage", "interactionbar", "interactionbuttons", "item", "items", "its", "joursemaine", "keepblocks", "labeling", "labels", "labeltext", "labeltexte", "language", "langue", "langueprincipale", "largeurbord", "largeurborddroit", "largeurbordgauche", "largeureditionpapier", "largeurligne", "largeurliste", "largeurmakeup", "largeurmarge", "largeurmargedroite", "largeurmargegauche", "largeurpapier", "largeurtexte", "leftaligned", "leg", "ligneh", "lignenoire", "ligneregleetexte", "lignesnoires", "listesymbole", "listsymbol", "llongueurliste", "loadsorts", "loadsynonyms", "logchamp", "logfields", "lohi", "low", "mainlanguage", "mapfontsize", "mar", "margereglee", "marginrule", "margintext", "marking", "markversion", "marquage", "marquageversion", "marquepage", "mathematics", "mathematique", "mediaeval", "menuinteraction", "mframed", "midaligned", "mirror", "mois", "month", "montrecadre", "montrechamps", "montrecouleur", "montredisposition", "montreedition", "montreenvironnementpolicecorps", "montrefiguresexternes", "montregrille", "montregroupecouleur", "montrejeusymboles", "montremakeup", "montrepalette", "montrepolicecorps", "montrereglages", "montrestruts", "motdroit", "motmarge", "moveongrid", "movesidefloat", "name", "navigating", "nextsection", "niveautete", "nocap", "noheaderandfooterlines", "noindenting", "nolist", "nomarking", "nombredesouspages", "nombretotaldepages", "nommacro", "nomoreblocks", "nomorefiles", "nop", "nospace", "note", "notepdp", "notopandbottomlines", "nowhitespace", "numbers", "numeroformule", "numeropage", "numeros", "numerosousformule", "numerotete", "numerotetecourant", "obtientmarquage", "oriente", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagedepth", "pagedouble", "pageoffset", "pagereference", "paragraph", "part", "pasplusdeblocs", "pasplusdefichiers", "periodes", "periods", "pilechamp", "placebookmarks", "placecombinedlist", "placecoteacote", "placefloat", "placeflottant", "placefootnotes", "placeformula", "placeformule", "placelegend", "placelegende", "placelesunsaudessusdesautres", "placelist", "placeliste", "placelisteinmbriquee", "placelistereference", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placemarquespages", "placenotespdp", "placenotespdplocales", "placenumeropage", "placenumerotete", "placeongrid", "placeontopofeachother", "placerawlist", "placereferencelist", "placeregister", "placeregistre", "placeregle", "placesidebyside", "placesousformule", "placesubformula", "placesurgrille", "placetextetete", "placevariabletexte", "position", "positionnetexte", "prendbuffer", "processblocks", "processpage", "produit", "program", "programme", "projet", "publication", "qqpart", "quotation", "quote", "ran", "raz", "razmarquage", "raznumero", "recommandation", "ref", "refait", "reference", "referencepage", "referencetexte", "referral", "referraldate", "reflete", "register", "reglealignement", "reglearrangement", "reglearriereplan", "reglearriereplans", "reglebarreinteraction", "reglebarresynchronisation", "reglebloc", "regleblocmarge", "regleblocsection", "regleboutons", "reglebuffer", "reglecapitales", "reglechamp", "reglechamps", "regleclipping", "reglecolonnes", "reglecombinaisons", "reglecommentaire", "reglecommentairepage", "reglecompoetroite", "reglecomposeenalinea", "reglecouleur", "reglecouleurs", "regledactylo", "regledansmarge", "regledemarrestoppe", "regledescriptions", "regledisposition", "regleecraninteraction", "regleecrans", "regleelements", "regleencadre", "regleentete", "regleenumerations", "regleenvironnementpolicecorps", "regleepaisseurligne", "regleespaceblanc", "regleespacement", "regleespacementinterligne", "reglefiguresexternes", "regleflottant", "regleflottants", "regleformulaires", "regleformules", "reglegroupeselements", "regleinf", "regleinteraction", "regleintitule", "regleintitules", "reglejeucolonne", "reglejeusymboles", "reglelabeltexte", "reglelangue", "reglelegende", "reglelignes", "reglelignesnoires", "reglelignesreglestexte", "regleliste", "reglelisteimbriquee", "reglelistereference", "reglemakeup", "reglemargereglee", "reglemarquage", "reglemarquagehyphenation", "reglemenuinteraction", "reglenotepdp", "reglenumero", "reglenumeropage", "reglenumerotation", "reglenumerotationligne", "reglenumerotationpage", "reglenumerotationparagraphe", "reglenumerotete", "regleoriente", "reglepalette", "reglepapier", "regleparagraphes", "reglepdp", "regleplacementopposition", "reglepolicecorps", "reglepositionnement", "reglepositiontexte", "regleprofils", "regleprogrammes", "reglepublications", "reglereferencage", "regleregistre", "regleregle", "regleremplitligne", "regleremplitlignesreglees", "reglesection", "regleseparationflottant", "reglesortie", "reglesouslignage", "reglesousnumeropage", "reglestrut", "reglesup", "reglesynchronisation", "reglesynonymes", "reglesysteme", "regletab", "regletableaux", "regletabulation", "regletaillepapier", "regletete", "regletetes", "regletexte", "regletextesentete", "regletextesinf", "regletextespdp", "regletextessup", "regletextestexte", "regletextetete", "regletolerance", "regletraitsfins", "regletransitionspage", "regletri", "regletype", "regleurl", "reglevariabletexte", "regleversions", "remplitchamp", "remplitligne", "remplitlignesreglees", "remplittexte", "reservefloat", "reset", "resetmarking", "resettextcontent", "retourarriere", "rightaligned", "romannumerals", "rotate", "sansalinea", "sansdimension", "sansespace", "sansespaceblanc", "sanslignesenteteetpdp", "sanslignessupetinf", "sansliste", "sansmarquage", "sanstest", "sauteblocs", "scale", "screen", "section", "seeregister", "selectblocks", "selectionneblocs", "selectionnepapier", "selectionneversion", "selectpaper", "selectversion", "sensunite", "separeflottant", "settext", "settextcontent", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "someline", "somewhere", "sort", "sousnumeropage", "space", "splitfloat", "startalignment", "startbackground", "startbuffer", "startcolor", "startcolumnmakeup", "startcolumns", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfloattext", "startformula", "startframedtext", "starthiding", "startinteractionmenu", "startitemgroup", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startmakeup", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startproduct", "startprofile", "startproject", "startquotation", "startregister", "startsymbolset", "startsynchronization", "starttable", "starttables", "starttabulate", "starttextrule", "starttyping", "startunpacked", "startversion", "stopalignment", "stopbackground", "stopbuffer", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcombination", "stopcomment", "stopcompoetroite", "stopcomponent", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stophiding", "stopinteractionmenu", "stopitemgroup", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppealignement", "stoppearriereplan", "stoppeblocmarge", "stoppecitation", "stoppecodage", "stoppecolonnes", "stoppecombinaison", "stoppecomposant", "stoppecorrectionligne", "stoppecouleur", "stoppedegroupe", "stoppedocument", "stoppeenvironement", "stoppeglobal", "stoppegroupe", "stoppejeucolonne", "stoppeligne", "stoppeligneregleetexte", "stoppelignes", "stoppelocal", "stoppemakeup", "stoppemargereglee", "stoppenotespdplocales", "stoppenumerotationligne", "stoppeopposition", "stoppepositionnement", "stoppeproduit", "stoppeprofil", "stoppeprojet", "stopperaster", "stopperevetement", "stoppesynchronisation", "stoppetableau", "stoppetableaux", "stoppetexte", "stoppeversion", "stoppevuedensemble", "stoppositioning", "stoppostponing", "stopproduct", "stopprofile", "stopproject", "stopquotation", "stopsymbolset", "stopsynchronization", "stoptable", "stoptables", "stoptabulate", "stoptextrule", "stoptyping", "stopunpacked", "stopversion", "stretched", "sub", "subject", "subsection", "subsubject", "subsubsection", "subsubsubject", "suggestion", "suivantprofil", "suivantversion", "suivantversionprofil", "switchtobodyfont", "sym", "symbol", "symbole", "synchronise", "synchronizationbar", "synchronize", "synonym", "tab", "tapebuffer", "testcolumn", "testpage", "tete", "tex", "textemarge", "textenotepdp", "textetete", "textreference", "textrule", "thinrule", "thinrules", "title", "titremarge", "tooltip", "traduire", "traiteblocs", "traitepage", "traitfin", "traitsfins", "translate", "txt", "typ", "type", "typebuffer", "typefile", "underbar", "underbars", "uneligne", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "utiliseJSscripts", "utiliseURL", "utiliseblocs", "utilisechemin", "utilisecommandes", "utilisedocumentexterne", "utiliseencodage", "utilisefichierexterne", "utilisefichiersexternes", "utilisefigureexterne", "utilisemodule", "utilisemodules", "utilisepsiteaudioexterne", "utilisereferences", "utilisespecialites", "utilisesymboles", "utiliseurl", "va", "vaalaboite", "vaalapage", "vaenbas", "valeurcouleur", "valeurgris", "variabletexte", "version", "vide", "vl", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister" },
- ["it"]={ "CAP", "Cap", "Caps", "Character", "Characters", "GIORNOSETTIMANA", "Lettera", "Lettere", "MESE", "MONTH", "Numeri", "Numeriromani", "PAROLA", "PAROLE", "Parola", "Parole", "Romannumerals", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "about", "accoppiacarta", "accoppiadocumento", "accoppiamarcatura", "accoppiapagina", "accoppiaregistro", "adaptlayout", "adattacampo", "adattalayout", "al", "allineacentro", "allineadestra", "allineasinistra", "altezzacarta", "altezzacartastampa", "altezzacima", "altezzaelenco", "altezzafondo", "altezzaintestazione", "altezzamakeup", "altezzapdp", "altezzatesto", "ambiente", "ampiezzabordo", "ampiezzabordodestro", "ampiezzabordosinistro", "ampiezzacarta", "ampiezzacartastampa", "ampiezzaelenco", "ampiezzamakeup", "ampiezzamargine", "ampiezzamarginedestro", "ampiezzamarginesinistro", "ampiezzatesto", "ap", "apagina", "appendix", "arg", "at", "atleftmargin", "atpage", "atrightmargin", "background", "barracolori", "barrainterazione", "barrasincronizzazione", "bastablocchi", "bastafile", "blackrule", "blackrules", "blank", "bookmark", "but", "button", "bypassblocks", "cambiaafontdeltesto", "campi", "camporiempimento", "cap", "capello", "chapter", "character", "characters", "chem", "chim", "circondato", "citazione", "clip", "clonacampo", "clonefield", "colonna", "color", "colore", "coloregrigio", "column", "comment", "commento", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completeregister", "componenet", "confrontagruppocolori", "confrontatavolozza", "convertinumero", "convertnumber", "copiacampo", "copyfield", "correctwhitespace", "correggispaziobianco", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "cutspace", "da", "daqualcheparte", "data", "datadioggi", "datareferral", "date", "decouplemarking", "decrementnumber", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecolumnbreak", "definecombination", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinmargin", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelayer", "definelist", "definelogo", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepagebreak", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetype", "definetypeface", "definetyping", "defineversion", "definisci", "definisciaccento", "definisciambientefontdeltesto", "definisciblocco", "definiscibloccosezione", "definiscibuffer", "definiscicampo", "definiscicampoprincipale", "definiscicapoversi", "definiscicarattere", "definiscicolore", "definiscicomando", "definisciconversione", "definiscidescrizione", "definiscidimensionicarta", "definiscielenco", "definiscielencocombinato", "definiscienumerazione", "definiscietichetta", "definiscifigurasimbolo", "definiscifont", "definiscifontdeltesto", "definiscifontgrezzo", "definisciformatoriferimento", "definiscigruppocolonne", "definiscigruppocolori", "definiscihbox", "definisciincorniciato", "definisciiniziatermina", "definiscilayout", "definiscilinea", "definiscilistariferimenti", "definiscilogo", "definiscimakeup", "definiscimarcatura", "definiscimenuinterazione", "definiscimodellotabella", "definiscioggettomobile", "definisciordinamento", "definiscioutput", "definisciposizionetesto", "definisciprofilo", "definisciprogramma", "definisciregistro", "definisciriferimento", "definiscirigovuoto", "definiscisezione", "definiscisimbolo", "definiscisinonimi", "definiscisinonimofont", "definiscisottocampo", "definiscisovrapposizione", "definiscistackcampi", "definiscistile", "definiscistilefont", "definiscitabulato", "definiscitavolozza", "definiscitesta", "definiscitesto", "definiscitestoincorniciato", "definiscitype", "definiscityping", "definiscivariabiletesto", "definisciversion", "description", "determinacaratteristicheregistro", "determinacarattersticheelenco", "determinanumerotesta", "determineheadnumber", "determinelistcharacteristics", "dimensione", "disabilitamenuinterazione", "disableinteractionmenu", "distanzabordo", "distanzabordodestro", "distanzabordosinistro", "distanzacima", "distanzafondo", "distanzaintestazione", "distanzamargine", "distanzamarginedestro", "distanzamarginesinistro", "distanzapdp", "domicilio", "el", "elaborablocchi", "elaborapagina", "elementi", "elemento", "emptylines", "enumeration", "etichetta", "etichette", "externalfigure", "fatto", "field", "fieldstack", "figuraesterna", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "fondo", "footnote", "footnotetext", "forceblocks", "forzablocchi", "fraction", "framed", "framedtext", "frazione", "from", "getbuffer", "getmarking", "getnumber", "giornosettimana", "godown", "goto", "gotobox", "graycolor", "grid", "griglia", "hairline", "head", "headnumber", "headsym", "headtext", "hideblocks", "high", "hl", "ignoto", "immediatebetweenlist", "immediatetolist", "impaccato", "impostaallineamento", "impostaambientefontdeltesto", "impostaampiezzariga", "impostabarrainterazione", "impostabarrasincronizzazione", "impostablocchimargine", "impostablocco", "impostabloccosezione", "impostabuffer", "impostacampi", "impostacampo", "impostacapoversi", "impostacaption", "impostacaptions", "impostacima", "impostaclippling", "impostacolonne", "impostacolore", "impostacolori", "impostacombinazioni", "impostacommento", "impostacommentopagina", "impostadefinizionenotepdp", "impostadescrizioni", "impostadimensionicarta", "impostaelementi", "impostaelencazioni", "impostaelenco", "impostaelencocombinato", "impostaenumerazioni", "impostafigureesterne", "impostafondo", "impostafontdeltesto", "impostaforms", "impostaformule", "impostagruppocolonne", "impostaincorniciato", "impostainiziatermina", "impostainmargine", "impostainstestazione", "impostainterazione", "impostainterlinea", "impostalayout", "impostalegenda", "impostalinea", "impostalineemargine", "impostalineenere", "impostalineeriempimento", "impostalineesottili", "impostalineetesto", "impostalingua", "impostalistariferimenti", "impostamaiuscole", "impostamakeup", "impostamarcatura", "impostamenuinterazione", "impostamenzione", "impostanotepdp", "impostanumerazione", "impostanumerazionecapoversi", "impostanumerazionepagina", "impostanumerazionerighe", "impostanumeropagina", "impostanumerosottopagina", "impostanumerotesta", "impostaoggettimobili", "impostaoggettomobile", "impostaordinamento", "impostaoutput", "impostaparranging", "impostapdp", "impostapiustretto", "impostaposizionamento", "impostaposizionamentoopposti", "impostaposizionetesto", "impostaprofili", "impostaprogrammi", "impostapubblicazioni", "impostapulsanti", "impostaregistro", "impostarientro", "impostariferimento", "impostarighe", "impostarigheriempimento", "impostarigovuoto", "impostarotazione", "impostaschermi", "impostaschermointerazione", "impostasegnosillabazione", "impostasetsimboli", "impostasezione", "impostasfondi", "impostasfondo", "impostasincronizzazione", "impostasinonimi", "impostasistema", "impostasottolinea", "impostaspaziatura", "impostaspaziobianco", "impostaspezzamentooggettomobile", "impostastrut", "impostatab", "impostatabelle", "impostatabulato", "impostatavolozza", "impostatesta", "impostateste", "impostatesticima", "impostatestifondo", "impostatestiincorniciati", "impostatestiintestazioni", "impostatestipdp", "impostatesto", "impostatestoetichette", "impostatestointestazioni", "impostatestotesti", "impostatolleranza", "impostatransizionepagina", "impostatype", "impostatyping", "impostaurl", "impostavariabiletesto", "impostaversioni", "in", "inaltromargine", "incorniciato", "incrementanumero", "indentation", "indenting", "indestra", "inframed", "ininner", "iniziaallineamento", "iniziaambiente", "iniziabloccomargine", "iniziacitazione", "iniziacodifica", "iniziacolonne", "iniziacolore", "iniziacombinazione", "iniziacomponente", "iniziacorrezioneriga", "iniziadocumento", "iniziafigura", "iniziaglobale", "iniziagruppocolonne", "iniziaimpaccato", "inizialineamargine", "inizialineatesto", "inizialocale", "iniziamakeup", "inizianotepdplocali", "inizianumerazionerighe", "iniziaopposto", "iniziaoverview", "iniziapiustretto", "iniziaposizionamento", "iniziaprodotto", "iniziaprofilo", "iniziaprogetto", "iniziaraster", "iniziariga", "iniziarighe", "iniziasetsimboli", "iniziasfondo", "iniziasincronizzazione", "iniziasovrapposizione", "iniziatabella", "iniziatabelle", "iniziatesto", "iniziaunpacked", "iniziaversione", "inlatodestro", "inlatosinistro", "inleft", "inline", "inmaframed", "inmargin", "inmargine", "inmarginedestro", "inmarginesinistro", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inriga", "inright", "insinistra", "installalingua", "installlanguage", "interactionbar", "interactionbuttons", "intorno", "item", "items", "its", "keepblocks", "labeling", "labels", "labeltext", "language", "leftaligned", "leg", "lettera", "lettere", "lineamargine", "lineanera", "lineasottile", "lineatesto", "lineenere", "lineeriempimento", "lineesottili", "lingua", "linguaprincipale", "listsymbol", "livellotesta", "loadsorts", "loadsynonyms", "logcampi", "logfields", "lohi", "low", "lunghezzaelenco", "maframed", "mainlanguage", "mapfontsize", "mar", "marcatura", "marcaversione", "marginrule", "margintext", "marking", "markversion", "matematica", "mathematics", "mediaeval", "menuinterattivo", "menzione", "mese", "mettielenco", "mettielencocombinato", "mettifiancoafianco", "mettiformula", "mettiingriglia", "mettilegenda", "mettilinea", "mettiloghi", "mettinotepdp", "mettinotepdplocali", "mettinumeropagina", "mettiregistro", "mettisegnalibro", "mettisottoformula", "mettiunosullaltro", "mettivariabiletesto", "midaligned", "mirror", "month", "mostraambientefontdeltesto", "mostracampi", "mostracolore", "mostracornice", "mostrafiguresterne", "mostrafontdeltesto", "mostragriglia", "mostragruppocolori", "mostraimpostazioni", "mostralyout", "mostramakeup", "mostrasetsimboli", "mostrastampa", "mostrastruts", "mostratavolozza", "moveongrid", "movesidefloat", "name", "nascondiblocchi", "navigating", "nextsection", "nientedimensioni", "nienteelenco", "nientelineecimafondo", "nientelineintestazionepdp", "nientemarcatura", "nienterientro", "nientespazio", "nientespaziobianco", "nocap", "noheaderandfooterlines", "noindenting", "nolist", "nomarking", "nome", "nomeunita", "nomoreblocks", "nomorefiles", "nop", "nospace", "nota", "notapdp", "note", "notest", "notopandbottomlines", "nowhitespace", "numberofsubpages", "numbers", "numeri", "numeriromani", "numeroformula", "numeropagina", "numeropaginacompleto", "numerosottoformula", "numerotesta", "numerotestacorrente", "numerototaledipagine", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagedepth", "pageoffset", "pagereference", "pagina", "paragraph", "paroladestra", "parolainmargine", "part", "passaafontgrezzo", "ped", "pedap", "periods", "perlungo", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placerawlist", "placereferencelist", "placeregister", "placesidebyside", "placesubformula", "position", "posizionanumerotesta", "posizionatesto", "posizionatestotesta", "posizione", "prendibuffer", "prendimarcatura", "processblocks", "processpage", "prodotto", "progetto", "program", "programma", "pubblicazione", "publication", "pulsante", "pulsantemenu", "pulsantinterazione", "punti", "qualcheriga", "quotation", "quote", "ran", "ref", "reference", "referral", "referraldate", "referring", "register", "reimposta", "reimpostamarcatura", "reservefloat", "reset", "resetmarking", "resetnumber", "resettextcontent", "rientro", "rif", "rifai", "riferimento", "riferimentopagina", "riferimentotesto", "riflessione", "rigariempimento", "rightaligned", "rigovuoto", "romannumerals", "rotate", "ruota", "saltablocchi", "scala", "scale", "schermo", "screen", "scrividentroelenco", "scriviinelenco", "scriviinlistariferimenti", "scriviinregistro", "section", "seeregister", "segnalibro", "seguiprofilo", "seguiversione", "seguiversioneprofilo", "selectblocks", "selectpaper", "selectversion", "selezionablocchi", "selezionacarta", "selezionaversione", "separamarcatura", "setnumber", "settext", "settextcontent", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "setvariabiletesto", "sfondo", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "sim", "simbolo", "sincronizza", "someline", "somewhere", "sort", "space", "spazifissi", "spazio", "spaziobianco", "spaziocima", "spaziodietro", "spaziofisso", "spaziofondo", "spessoreriga", "spezzaoggettomobile", "splitfloat", "spostaagriglia", "spostaformula", "stackcampi", "startalignment", "startbackground", "startbuffer", "startcolor", "startcolumnmakeup", "startcolumns", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfloattext", "startformula", "startframedtext", "starthiding", "startinteractionmenu", "startitemgroup", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startmakeup", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startproduct", "startprofile", "startproject", "startquotation", "startregister", "startsymbolset", "startsynchronization", "starttable", "starttables", "starttabulate", "starttextrule", "starttyping", "startunpacked", "startversion", "stirato", "stopalignment", "stopbackground", "stopbuffer", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stophiding", "stopinteractionmenu", "stopitemgroup", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositioning", "stoppostponing", "stopproduct", "stopprofile", "stopproject", "stopquotation", "stopsymbolset", "stopsynchronization", "stoptable", "stoptables", "stoptabulate", "stoptextrule", "stoptyping", "stopunpacked", "stopversion", "stretched", "sub", "subject", "subpagenumber", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "sym", "symbol", "synchronizationbar", "synchronize", "synonym", "tab", "terminaallineamento", "terminaambiente", "terminabloccomargine", "terminacitazione", "terminacodifica", "terminacolonne", "terminacolore", "terminacombinazione", "terminacomponente", "terminacorrezioneriga", "terminadocumento", "terminaglobale", "terminagruppocolonne", "terminaimpaccato", "terminalineamargine", "terminalineatesto", "terminalocale", "terminamakeup", "terminanotepdplocali", "terminanumerazionerighe", "terminaopposto", "terminaoverview", "terminapiustretto", "terminaposizionamento", "terminaprodotto", "terminaprofili", "terminaprogetto", "terminaraster", "terminariga", "terminarighe", "terminasfondo", "terminasincronizzazione", "terminasovrapposizione", "terminatabella", "terminatabelle", "terminatesto", "terminaunpacked", "terminaversioni", "testa", "testcolumn", "testoetichetta", "testoinmargine", "testoinstestazioni", "testonotapdp", "testoriempimento", "testpage", "tex", "textreference", "textrule", "thinrule", "thinrules", "tieniblocchi", "title", "titoloinmargine", "tooltip", "traduci", "translate", "txt", "typ", "type", "typebuffer", "typefile", "underbar", "underbars", "usaJSscripts", "usaURL", "usablocco", "usacartella", "usacodifica", "usacolonnasonoraesterna", "usacomandi", "usadocumentoesterno", "usafiguraesterna", "usafileesterni", "usafileesterno", "usamoduli", "usamodulo", "usariferimenti", "usasimboli", "usaspecialita", "usaurl", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "vaia", "vaiabox", "vaiapagina", "vaigiu", "valorecolore", "valoregrigio", "variabiletesto", "version", "versione", "vl", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister" },
- ["nl"]={ "CAP", "Cap", "Caps", "Character", "Characters", "Cijfers", "KAP", "Kap", "Kaps", "Letter", "Letters", "MAAND", "MONTH", "Romannumerals", "Romeins", "WEEKDAG", "WEEKDAY", "WOORD", "WOORDEN", "WORD", "WORDS", "Woord", "Woorden", "Word", "Words", "aantalsubpaginas", "about", "achtergrond", "adaptlayout", "appendix", "arg", "at", "atpage", "background", "bepaalkopnummer", "bepaallijstkenmerken", "bepaalregisterkenmerken", "betekenis", "binnenmargeafstand", "binnenmargebreedte", "binnenrandafstand", "binnenrandbreedte", "blackrule", "blackrules", "blank", "blanko", "blokje", "blokjes", "blokkeerinteractiemenu", "bodemwit", "bookmark", "bovenafstand", "bovenhoogte", "breuk", "buitenmargeafstand", "buitenmargebreedte", "buitenrandafstand", "buitenrandbreedte", "but", "button", "bypassblocks", "cap", "chapter", "character", "characters", "chem", "cijfers", "citaat", "citeer", "clip", "clonefield", "color", "column", "comment", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completeregister", "converteernummer", "convertnumber", "copieerveld", "copyfield", "correctwhitespace", "corrigeerwitruimte", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "date", "datum", "decouplemarking", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinteractionmenu", "definelabel", "definelist", "definelogo", "definemakeup", "definemarking", "defineoutput", "defineoverlay", "definepalet", "definepapersize", "defineparagraphs", "defineprofile", "defineprogram", "definerawfont", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetype", "definetypeface", "definetyping", "defineversion", "definieer", "definieeraccent", "definieeralineas", "definieerbeeldmerk", "definieerblanko", "definieerblok", "definieerbuffer", "definieercombinatie", "definieercommando", "definieerconversie", "definieerfiguursymbool", "definieerfont", "definieerfontstijl", "definieerfontsynoniem", "definieerhbox", "definieerhoofdveld", "definieeringesprongentext", "definieerinmarge", "definieerinteractiemenu", "definieeritemgroep", "definieerkadertekst", "definieerkarakter", "definieerkleur", "definieerkleurgroep", "definieerkolomgroep", "definieerkolomovergang", "definieerkop", "definieerkorps", "definieerkorpsomgeving", "definieerlayer", "definieerlayout", "definieerletter", "definieerlijn", "definieerlijst", "definieermarkering", "definieeromlijnd", "definieeropmaak", "definieeroverlay", "definieerpaginaovergang", "definieerpalet", "definieerpapierformaat", "definieerplaats", "definieerplaatsblok", "definieerprofiel", "definieerprogramma", "definieerreferentie", "definieerreferentieformaat", "definieerreferentielijst", "definieerregister", "definieersamengesteldelijst", "definieersectie", "definieersectieblok", "definieersorteren", "definieerstartstop", "definieersubveld", "definieersymbool", "definieersynoniemen", "definieertabelvorm", "definieertabulatie", "definieertekst", "definieertekstachtergrond", "definieertekstpositie", "definieertekstvariabele", "definieertype", "definieertypen", "definieeruitvoer", "definieerveld", "definieerveldstapel", "definieerversie", "definieerwiskundeuitlijnen", "description", "determineheadnumber", "determinelistcharacteristics", "dimensie", "directnaarlijst", "directtussenlijst", "disableinteractionmenu", "doordefinieren", "doorlabelen", "doornummeren", "dunnelijn", "dunnelijnen", "eenregel", "emptylines", "enumeration", "ergens", "externalfigure", "externfiguur", "field", "fieldstack", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "footnote", "footnotetext", "forceblocks", "forceerblokken", "formulenummer", "fraction", "framed", "framedtext", "from", "gebruikJSscripts", "gebruikURL", "gebruikXMLfilter", "gebruikblokken", "gebruikcommandos", "gebruikexterndocument", "gebruikexternefile", "gebruikexternefiles", "gebruikexternfiguur", "gebruikexterngeluidsfragment", "gebruikgebied", "gebruikmodule", "gebruikmodules", "gebruikreferenties", "gebruikspecials", "gebruiksymbolen", "gebruiktypescript", "gebruiktypescriptfile", "gebruikurl", "geenblokkenmeer", "geenbovenenonderregels", "geendimensie", "geenfilesmeer", "geenhoofdenvoetregels", "geenlijst", "geenmarkering", "geenspatie", "geentest", "geenwitruimte", "geg", "getbuffer", "getmarking", "godown", "goto", "gotobox", "graycolor", "grid", "grijskleur", "grijswaarde", "haalbuffer", "haalmarkering", "haalnummer", "haarlijn", "hairline", "handhaafblokken", "head", "headnumber", "headtext", "herhaal", "hideblocks", "high", "hl", "hoofdafstand", "hoofdhoogte", "hoofdtaal", "hoog", "huidigedatum", "huidigekopnummer", "in", "inanderemarge", "inbinnen", "inbuiten", "indentation", "indenting", "inframed", "ininner", "inleft", "inlijnd", "inline", "inlinker", "inlinkermarge", "inlinkerrand", "inmarge", "inmargin", "inothermargin", "inouter", "inrechter", "inrechtermarge", "inrechterrand", "inregel", "inright", "inspringen", "installeertaal", "installlanguage", "interactiebalk", "interactiebuttons", "interactiemenu", "interactionbar", "interactionbuttons", "invullijnen", "invulregel", "invultekst", "invulveld", "inwilijnd", "item", "items", "its", "kantlijn", "kap", "keepblocks", "kenmerk", "kenmerkdatum", "kentekstvariabeletoe", "kleur", "kleurenbalk", "kleurwaarde", "kloonveld", "kolom", "kop", "kopniveau", "kopnummer", "koppeldocument", "koppelmarkering", "koppelpagina", "koppelpapier", "koppelregister", "kopsym", "koptekst", "kopwit", "laag", "label", "labeling", "labels", "labeltekst", "labeltext", "laho", "language", "leftaligned", "leg", "legeregels", "letter", "letters", "lijndikte", "lijstbreedte", "lijsthoogte", "lijstlengte", "lijstsymbool", "linkermargeafstand", "linkermargebreedte", "linkerrandafstand", "linkerrandbreedte", "listsymbol", "loadsorts", "loadsynonyms", "logfields", "lohi", "low", "maand", "mainlanguage", "mapfontsize", "mar", "margeafstand", "margebreedte", "margetekst", "margetitel", "margewoord", "marginrule", "margintext", "markeer", "markeerversie", "marking", "markversion", "mathematics", "mediaeval", "menubutton", "midaligned", "mirror", "month", "moveongrid", "naam", "naar", "naarbox", "naarpagina", "name", "navigerend", "nextsection", "nietinspringen", "nocap", "noheaderandfooterlines", "noindenting", "nokap", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "noot", "nop", "nospace", "note", "notopandbottomlines", "nowhitespace", "numbers", "omgeving", "omlaag", "omlijnd", "onbekend", "onderafstand", "onderdeel", "onderhoogte", "ontkoppelmarkering", "op", "opelkaar", "oplinkermarge", "oppagina", "oprechtermarge", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagereference", "pagina", "paginadiepte", "paginanummer", "paginaoffset", "paginareferentie", "papierbreedte", "papierhoogte", "paragraph", "part", "paslayoutaan", "passeerblokken", "passendveld", "periods", "plaatsbeeldmerken", "plaatsbookmarks", "plaatsformule", "plaatskopnummer", "plaatskoptekst", "plaatslegenda", "plaatslijn", "plaatslijst", "plaatslijstmetsynoniemen", "plaatslokalevoetnoten", "plaatsnaastelkaar", "plaatsonderelkaar", "plaatsopgrid", "plaatspaginanummer", "plaatsplaatsblok", "plaatsreferentielijst", "plaatsregister", "plaatsruwelijst", "plaatssamengesteldelijst", "plaatssubformule", "plaatstekstvariabele", "plaatsvoetnoten", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placereferencelist", "placeregister", "placesidebyside", "placesubformula", "position", "positioneer", "positioneertekst", "printpapierbreedte", "printpapierhoogte", "processblocks", "processpage", "produkt", "program", "programma", "projekt", "publicatie", "publication", "punten", "quotation", "quote", "ran", "randafstand", "randbreedte", "rechtermargeafstand", "rechtermargebreedte", "rechterrandafstand", "rechterrandbreedte", "ref", "refereer", "reference", "referentie", "referral", "referraldate", "regellinks", "regelmidden", "regelrechts", "register", "registreervelden", "reservefloat", "reset", "resetmarkering", "resetmarking", "resetnummer", "resettekstinhoud", "resettextcontent", "rightaligned", "romannumerals", "romeins", "rooster", "rotate", "roteer", "rugwit", "scale", "schaal", "scherm", "schrijfnaarlijst", "schrijfnaarreferentielijst", "schrijfnaarregister", "schrijftussenlijst", "screen", "section", "seeregister", "selectblocks", "selecteerblokken", "selecteerpapier", "selecteerversie", "selectpaper", "selectversion", "setnummer", "settextcontent", "setupalign", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupnarrower", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "snijwit", "som", "someline", "somewhere", "sort", "space", "spatie", "spiegel", "splitfloat", "splitsplaatsblok", "startachtergrond", "startalignment", "startbackground", "startbuffer", "startcitaat", "startcodering", "startcolor", "startcolumns", "startcombinatie", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfiguur", "startfloattext", "startformula", "startframedtext", "startglobaal", "starthiding", "startinteractionmenu", "startitemgroup", "startkantlijn", "startkleur", "startkolomgroep", "startkolommen", "startkolomopmaak", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startlokaal", "startlokalevoetnoten", "startmakeup", "startmargeblok", "startmarginblock", "startmarginrule", "startnaast", "startnamemakeup", "startnarrower", "startomgeving", "startomlijnd", "startonderdeel", "startopelkaar", "startopmaak", "startopposite", "startoverlay", "startoverview", "startoverzicht", "startpacked", "startparagraph", "startpositioneren", "startpositioning", "startpostponing", "startproduct", "startprodukt", "startprofiel", "startprofile", "startproject", "startprojekt", "startquotation", "startraster", "startregel", "startregelcorrectie", "startregelnummeren", "startregels", "startregister", "startsmaller", "startsymbolset", "startsymboolset", "startsynchronisatie", "startsynchronization", "starttabel", "starttabellen", "starttable", "starttables", "starttabulate", "starttekst", "starttekstachtergrond", "starttekstlijn", "starttextrule", "starttyping", "startuitlijnen", "startunpacked", "startvanelkaar", "startversie", "startversion", "stelachtergrondenin", "stelachtergrondin", "stelalineasin", "stelantwoordgebiedin", "stelarrangerenin", "stelblankoin", "stelblokin", "stelblokjesin", "stelblokkopjein", "stelblokkopjesin", "stelbovenin", "stelboventekstenin", "stelbufferin", "stelbuttonsin", "stelciterenin", "stelclipin", "stelcombinatiesin", "stelcommentaarin", "steldoordefinierenin", "steldoornummerenin", "steldunnelijnenin", "stelexternefigurenin", "stelformulesin", "stelformulierenin", "stelhoofdin", "stelhoofdtekstenin", "stelingesprongentextin", "stelinmargein", "stelinspringenin", "stelinteractiebalkin", "stelinteractiein", "stelinteractiemenuin", "stelinteractieschermin", "stelinterliniein", "stelinvullijnenin", "stelinvulregelsin", "stelitemgroepin", "stelitemsin", "stelkadertekstenin", "stelkantlijnin", "stelkapitalenin", "stelkleurenin", "stelkleurin", "stelkolomgroepin", "stelkolomgroepregelsin", "stelkolomgroepstartin", "stelkolommenin", "stelkopin", "stelkopnummerin", "stelkoppeltekenin", "stelkoppenin", "stelkoptekstin", "stelkorpsin", "stelkorpsomgevingin", "stellabeltekstin", "stellayoutin", "stellegendain", "stellijndiktein", "stellijnin", "stellijstin", "stelmargeblokkenin", "stelmarkeringin", "stelnaastplaatsenin", "stelnummerenin", "stelnummerin", "stelomlijndin", "stelonderin", "stelonderstrepenin", "stelondertekstenin", "stelopmaakin", "stelopsommingenin", "stelpaginacommentaarin", "stelpaginanummerin", "stelpaginanummeringin", "stelpaginaovergangenin", "stelpaletin", "stelpapierformaatin", "stelpapierin", "stelparagraafnummerenin", "stelplaatsblokin", "stelplaatsblokkenin", "stelplaatsbloksplitsenin", "stelplaatsin", "stelpositionerenin", "stelprofielenin", "stelprogrammasin", "stelpublicatiesin", "stelrastersin", "stelreferentielijstin", "stelrefererenin", "stelregelnummerenin", "stelregelsin", "stelregisterin", "stelroterenin", "stelsamengesteldelijstin", "stelsectieblokin", "stelsectiein", "stelsmallerin", "stelsorterenin", "stelspatieringin", "stelstartstopin", "stelstrutin", "stelsubpaginanummerin", "stelsymboolsetin", "stelsynchronisatiebalkin", "stelsynchronisatiein", "stelsynoniemenin", "stelsysteemin", "steltaalin", "steltabellenin", "steltabin", "steltabulatiein", "steltekstachtergrondin", "steltekstin", "steltekstinhoudin", "steltekstlijnenin", "steltekstpositiein", "stelteksttekstenin", "steltekstvariabelein", "steltolerantiein", "steltypein", "steltypenin", "steluitlijnenin", "steluitvoerin", "stelurlin", "stelveldenin", "stelveldin", "stelversiesin", "stelvoetin", "stelvoetnootdefinitiein", "stelvoetnotenin", "stelvoettekstenin", "stelwiskundeuitlijnenin", "stelwitruimtein", "stopachtergrond", "stopalignment", "stopbackground", "stopbuffer", "stopcitaat", "stopcodering", "stopcolor", "stopcolumns", "stopcombinatie", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stopglobaal", "stophiding", "stopinteractionmenu", "stopitemgroup", "stopkantlijn", "stopkleur", "stopkolomgroep", "stopkolommen", "stopkolomopmaak", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stoplokaal", "stoplokalevoetnoten", "stopmakeup", "stopmargeblok", "stopmarginblock", "stopmarginrule", "stopnaast", "stopnamemakeup", "stopnarrower", "stopomgeving", "stopomlijnd", "stoponderdeel", "stopopelkaar", "stopopmaak", "stopopposite", "stopoverlay", "stopoverview", "stopoverzicht", "stoppacked", "stopparagraph", "stoppositioneren", "stoppositioning", "stoppostponing", "stopproduct", "stopprodukt", "stopprofiel", "stopprofile", "stopproject", "stopprojekt", "stopquotation", "stopraster", "stopregel", "stopregelcorrectie", "stopregelnummeren", "stopregels", "stopsmaller", "stopsymbolset", "stopsynchronisatie", "stopsynchronization", "stoptabel", "stoptabellen", "stoptable", "stoptables", "stoptabulate", "stoptekst", "stoptekstachtergrond", "stoptekstlijn", "stoptextrule", "stoptyping", "stopuitlijnen", "stopunpacked", "stopvanelkaar", "stopversie", "stopversion", "stretched", "sub", "subformulenummer", "subject", "subpaginanummer", "subsection", "subsubject", "subsubsection", "subsubsubject", "suggestie", "switchnaarkorps", "switchtobodyfont", "switchtorawfont", "sym", "symbol", "symbool", "symoffset", "synchronisatiebalk", "synchroniseer", "synchronizationbar", "synchronize", "synonym", "taal", "tab", "tekstbreedte", "teksthoogte", "tekstlijn", "tekstreferentie", "tekstvariabele", "testkolom", "testpagina", "tex", "textreference", "textrule", "thinrule", "thinrules", "title", "toelichting", "tooltip", "toonexternefiguren", "toongrid", "tooninstellingen", "toonkader", "toonkleur", "toonkleurgroep", "toonkorps", "toonkorpsomgeving", "toonlayout", "toonopmaak", "toonpalet", "toonprint", "toonstruts", "toonsymboolset", "toonvelden", "totaalaantalpaginas", "translate", "txt", "typ", "type", "typebuffer", "typefile", "uit", "uitgerekt", "underbar", "underbars", "useURL", "useblocks", "usecodering", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "vastespatie", "vastespaties", "veld", "veldstapel", "verbergblokken", "vergelijkkleurgroep", "vergelijkpalet", "verhoognummer", "verlaagnummer", "verplaatsformule", "verplaatsopgrid", "verplaatszijblok", "versie", "version", "vertaal", "verwerkblokken", "verwerkpagina", "vl", "voetafstand", "voethoogte", "voetnoot", "voetnoottekst", "volgprofiel", "volgprofielversie", "volgversie", "volledigepaginanummer", "volledigregister", "voluit", "weekdag", "weekday", "whitespace", "wilijnd", "wiskunde", "witruimte", "woonplaats", "woordrechts", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister", "zetbreedte", "zethoogte" },
- ["pe"]={ "CAP", "Cap", "Caps", "Character", "Characters", "MONTH", "Numbers", "Romannumerals", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "about", "adaptlayout", "appendix", "at", "atpage", "background", "blackrule", "blackrules", "blank", "bookmark", "but", "button", "bypassblocks", "cap", "chapter", "character", "characters", "chem", "clip", "clonefield", "color", "column", "comment", "comparecolorgroup", "comparepalet", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completeregister", "convertnumber", "copyfield", "correctwhitespace", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "currentdate", "currentheadnumber", "date", "decouplemarking", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinteractionmenu", "definelabel", "definelist", "definelogo", "definemakeup", "definemarking", "defineoutput", "defineoverlay", "definepalet", "definepapersize", "defineparagraphs", "defineprofile", "defineprogram", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definesection", "definesectionblock", "definesorting", "definestartstop", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetype", "definetypeface", "definetyping", "defineversion", "description", "determineheadnumber", "determinelistcharacteristics", "disableinteractionmenu", "emptylines", "enumeration", "externalfigure", "field", "fieldstack", "fillinfield", "fillinline", "fillinrules", "fillintext", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "footnote", "footnotetext", "forceblocks", "fraction", "framed", "framedtext", "from", "getbuffer", "getmarking", "godown", "goto", "gotobox", "graycolor", "grid", "hairline", "head", "headnumber", "headtext", "hideblocks", "high", "hl", "in", "indentation", "indenting", "inframed", "ininner", "inleft", "inline", "inmargin", "inmframed", "inothermargin", "inouter", "inright", "installlanguage", "interactionbar", "interactionbuttons", "item", "items", "its", "keepblocks", "labeling", "labels", "labeltext", "language", "leftaligned", "listsymbol", "loadsorts", "loadsynonyms", "logfields", "lohi", "low", "mainlanguage", "mapfontsize", "mar", "marginrule", "margintext", "marking", "markversion", "mathematics", "mediaeval", "mframed", "midaligned", "mirror", "month", "moveongrid", "name", "nextsection", "nocap", "noheaderandfooterlines", "noindenting", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "nop", "nospace", "note", "notopandbottomlines", "nowhitespace", "numbers", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagereference", "paragraph", "part", "periods", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placereferencelist", "placeregister", "placesidebyside", "placesubformula", "position", "processblocks", "processpage", "program", "publication", "quotation", "quote", "ran", "ref", "reference", "referral", "referraldate", "register", "reservefloat", "reset", "resetmarking", "resettextcontent", "rightaligned", "romannumerals", "rotate", "scale", "screen", "section", "seeregister", "selectblocks", "selectpaper", "selectversion", "settextcontent", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupnarrower", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "someline", "somewhere", "sort", "space", "splitfloat", "startalignment", "startbackground", "startbuffer", "startcolor", "startcolumns", "startcombination", "startcomment", "startcomponent", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigure", "startfloattext", "startformula", "startframedtext", "starthiding", "startinteractionmenu", "startitemgroup", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startmakeup", "startmarginblock", "startmarginrule", "startnamemakeup", "startnarrower", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startproduct", "startprofile", "startproject", "startquotation", "startraster", "startregister", "startsymbolset", "startsynchronization", "starttable", "starttables", "starttabulate", "starttextrule", "starttyping", "startunpacked", "startversion", "stopalignment", "stopbackground", "stopbuffer", "stopcolor", "stopcolumns", "stopcombination", "stopcomment", "stopcomponent", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stophiding", "stopinteractionmenu", "stopitemgroup", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopnamemakeup", "stopnarrower", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositioning", "stoppostponing", "stopproduct", "stopprofile", "stopproject", "stopquotation", "stopraster", "stopsymbolset", "stopsynchronization", "stoptable", "stoptables", "stoptabulate", "stoptextrule", "stoptyping", "stopunpacked", "stopversion", "stretched", "sub", "subject", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "sym", "symbol", "synchronizationbar", "synchronize", "synonym", "tab", "tex", "textreference", "textrule", "thinrule", "thinrules", "title", "tooltip", "translate", "txt", "typ", "type", "typebuffer", "typefile", "underbar", "underbars", "useJSscripts", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "useurl", "version", "vl", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister", "آفست‌صفحه", "آیتم", "آیتمها", "آینه", "اجباربلوکها", "ارتفاع‌آرایش", "ارتفاع‌بالا", "ارتفاع‌برگ", "ارتفاع‌ته‌برگ", "ارتفاع‌خط", "ارتفاع‌سربرگ", "ارتفاع‌متن", "ارتفاع‌پایین", "از", "ازکارانداختن‌منوی‌پانل", "استفاده‌بلوکها", "استفاده‌دستخط‌تایپ", "استفاده‌رمزینه", "استفاده‌شکل‌خارجی", "استفاده‌فرمانها", "استفاده‌قطعه‌موزیک‌خارجی", "استفاده‌مدول", "استفاده‌مدولها", "استفاده‌مرجعها", "استفاده‌مسیر", "استفاده‌نمادها", "استفاده‌نوشتارخارجی", "استفاده‌ویژگیها", "استفاده‌پرونده‌خارجی", "استفاده‌پرونده‌دستخط‌تایپ", "استفاده‌پرونده‌های‌خارجی", "اعدادلاتین", "افزودن", "اما", "امتحان‌نکن", "انتخاب‌برگ", "انتخاب‌بلوکها", "انتخاب‌نسخه", "انتقال‌به‌توری", "انتقال‌فرمول", "انتقال‌کنار‌شناور", "انجام‌دوباره", "بارگذاری‌آرایش", "بارگذاری‌آیتمها", "بارگذاری‌ارجاع", "بارگذاری‌اندازه‌برگ", "بارگذاری‌باریکتر", "بارگذاری‌بافر", "بارگذاری‌بالا", "بارگذاری‌بخش", "بارگذاری‌بردباری", "بارگذاری‌برنامه‌ها", "بارگذاری‌برگ", "بارگذاری‌بست", "بارگذاری‌بلوک", "بارگذاری‌بلوکهای‌حاشیه", "بارگذاری‌بلوک‌بخش", "بارگذاری‌تایپ", "بارگذاری‌تایپ‌کردن", "بارگذاری‌تب", "بارگذاری‌ترتیب", "بارگذاری‌ترکیب‌ها", "بارگذاری‌تطابق", "بارگذاری‌تعریف‌پانوشت", "بارگذاری‌تنظیم", "بارگذاری‌تنظیم‌ریاضی", "بارگذاری‌ته‌برگ", "بارگذاری‌تورفتگی", "بارگذاری‌توضیح", "بارگذاری‌توضیح‌صفحه", "بارگذاری‌ثبت", "بارگذاری‌جانشانی", "بارگذاری‌جدولها", "بارگذاری‌جدول‌بندی", "بارگذاری‌خالی", "بارگذاری‌خروجی", "بارگذاری‌خط", "بارگذاری‌خطها", "بارگذاری‌خطهای‌حاشیه", "بارگذاری‌خطهای‌سیاه", "بارگذاری‌خطهای‌متن", "بارگذاری‌خطهای‌مجموعه‌ستون", "بارگذاری‌خطها‌ی‌نازک", "بارگذاری‌درج‌درخطها", "بارگذاری‌درج‌مخالف", "بارگذاری‌درون‌حاشیه", "بارگذاری‌دوران", "بارگذاری‌دکمه‌ها", "بارگذاری‌راهنما", "بارگذاری‌رنگ", "بارگذاری‌رنگها", "بارگذاری‌زبان", "بارگذاری‌ستونها", "بارگذاری‌سر", "بارگذاری‌سربرگ", "بارگذاری‌سرها", "بارگذاری‌سیستم", "بارگذاری‌شرح", "بارگذاری‌شرحها", "بارگذاری‌شروع‌مجموعه‌ستون", "بارگذاری‌شروع‌پایان", "بارگذاری‌شماره", "بارگذاری‌شماره‌زیرصفحه", "بارگذاری‌شماره‌سر", "بارگذاری‌شماره‌صفحه", "بارگذاری‌شماره‌گذاری", "بارگذاری‌شماره‌گذاریها", "بارگذاری‌شماره‌گذاری‌صفحه", "بارگذاری‌شماره‌گذاری‌پاراگراف", "بارگذاری‌شماره‌‌گذاری‌خط", "بارگذاری‌شناور", "بارگذاری‌شناورها", "بارگذاری‌شکافتن‌شناورها", "بارگذاری‌شکلهای‌خارجی", "بارگذاری‌طرح", "بارگذاری‌طرح‌بندی", "بارگذاری‌عرض‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فرمولها", "بارگذاری‌فضای‌سفید", "بارگذاری‌فضا‌گذاری", "بارگذاری‌قالبی", "بارگذاری‌قلم‌متن", "بارگذاری‌لوح", "بارگذاری‌لیست", "بارگذاری‌لیست‌ترکیبی", "بارگذاری‌لیست‌مرجع", "بارگذاری‌مترادفها", "بارگذاری‌متغیر‌متن", "بارگذاری‌متن", "بارگذاری‌متنهای‌بالا", "بارگذاری‌متن‌سر", "بارگذاری‌متن‌سربرگ", "بارگذاری‌متن‌قالبی", "بارگذاری‌متن‌متنها", "بارگذاری‌متن‌پانوشت", "بارگذاری‌متن‌پایین", "بارگذاری‌مجموعه‌ستون", "بارگذاری‌مجموعه‌نماد", "بارگذاری‌محیط‌قلم‌متن", "بارگذاری‌منوی‌پانل", "بارگذاری‌مکان‌متن", "بارگذاری‌مکان‌گذاری", "بارگذاری‌میدان", "بارگذاری‌میدانها", "بارگذاری‌میله‌تطابق", "بارگذاری‌میله‌زیر", "بارگذاری‌میله‌پانل", "بارگذاری‌نسخه‌ها", "بارگذاری‌نشانه‌شکستن", "بارگذاری‌نشانه‌گذاری", "بارگذاری‌نشرها", "بارگذاری‌نقل", "بارگذاری‌پاراگرافها", "بارگذاری‌پانل", "بارگذاری‌پانوشتها", "بارگذاری‌پایین", "بارگذاری‌پرده‌ها", "بارگذاری‌پرده‌پانل", "بارگذاری‌پروفایلها", "بارگذاری‌پرکردن‌خطها", "بارگذاری‌پس‌زمینه", "بارگذاری‌پس‌زمینه‌ها", "بارگذاری‌چیدن", "بارگذاری‌گذارصفحه", "بارگذاری‌گروههای‌آیتم", "بارگذاری‌گروه‌آیتم", "بازنشانی", "بازنشانی‌شماره", "بازنشانی‌متن", "بازنشانی‌نشانه‌گذاری", "باگذاری‌متن‌برچسب", "بدون‌بعد", "بدون‌بلوکهای‌بیشتر", "بدون‌تورفتگی", "بدون‌خط‌بالاوپایین", "بدون‌خط‌سروته‌برگ", "بدون‌فایلهای‌بیشتر", "بدون‌فضا", "بدون‌فضای‌سفید", "بدون‌لیست", "بدون‌نشانه‌گذاری", "برنامه", "بروبه", "بروبه‌جعبه", "بروبه‌صفحه", "بروپایین", "برچسب", "برچسبها", "بعد", "بلند", "بلوکهای‌پردازش", "بلوکها‌پنهان", "بنویس‌بین‌لیست", "بنویس‌درثبت", "بنویس‌درلیست‌مرجع", "بنویس‌در‌لیست", "تاریخ", "تاریخ‌جاری", "تاریخ‌رجوع", "تایپ", "تایپ‌بافر", "تایپ‌پرونده", "تب", "ترجمه", "تطابق", "تعریف", "تعریف‌آرایش", "تعریف‌آرم", "تعریف‌الگوی‌جدول", "تعریف‌اندازه‌برگ", "تعریف‌بافر", "تعریف‌بخش", "تعریف‌برنامه", "تعریف‌برچسب", "تعریف‌بلوک", "تعریف‌بلوک‌بخش", "تعریف‌تایپ", "تعریف‌تایپ‌کردن", "تعریف‌تبدیل", "تعریف‌ترتیب", "تعریف‌ترکیب", "تعریف‌تنظیم‌ریاضی", "تعریف‌توده‌میدان", "تعریف‌ثبت", "تعریف‌جانشانی", "تعریف‌جدول‌بندی", "تعریف‌جعبه‌‌افقی", "تعریف‌حرف", "تعریف‌خالی", "تعریف‌خروجی", "تعریف‌خط‌حائل", "تعریف‌درون‌حاشیه", "تعریف‌رنگ", "تعریف‌زیرمیدان", "تعریف‌سبک", "تعریف‌سبک‌قلم", "تعریف‌سر", "تعریف‌شرح", "تعریف‌شروع‌پایان", "تعریف‌شماره‌بندی", "تعریف‌شمایل‌مرجع", "تعریف‌شناور", "تعریف‌شکستن‌ستون", "تعریف‌شکست‌صفحه", "تعریف‌طرح‌بندی", "تعریف‌فرمان", "تعریف‌قالبی", "تعریف‌قلم", "تعریف‌قلم‌خام", "تعریف‌قلم‌متن", "تعریف‌لایه", "تعریف‌لهجه", "تعریف‌لوح", "تعریف‌لیست", "تعریف‌لیست‌ترکیبی", "تعریف‌لیست‌مرجع", "تعریف‌مترادفها", "تعریف‌مترادف‌قلم", "تعریف‌متغیرمتن", "تعریف‌متن", "تعریف‌متن‌قالبی", "تعریف‌مجموعه‌ستون", "تعریف‌محیط‌قلم‌بدنه", "تعریف‌مرجع", "تعریف‌منوی‌پانل", "تعریف‌مکان‌متن", "تعریف‌میدان", "تعریف‌میدان‌اصلی", "تعریف‌نسخه", "تعریف‌نشانه‌گذاری", "تعریف‌نماد", "تعریف‌نمادشکل", "تعریف‌پاراگرافها", "تعریف‌پروفایل", "تعریف‌پوشش", "تعریف‌گروه‌آیتم", "تعریف‌گروه‌رنگ", "تعیین‌شماره", "تعیین‌شماره‌سر", "تعیین‌متغیر‌متن", "تعیین‌محتوای‌متن", "تعیین‌مشخصات‌ثبت", "تعیین‌مشخصات‌لیست", "تغییربه‌قلم‌بدنه", "تغییربه‌قلم‌خام", "تنظیم‌راست", "تنظیم‌طرح‌بندی", "تنظیم‌وسط", "توجه", "تورفتگی", "توری", "تولید", "تک", "ثبت‌زوج", "ثبت‌کامل", "جداسازی‌نشانه‌گذاری", "حاش", "حرف", "حرفها", "حفظ‌بلوکها", "حقیقت", "خالی", "خطهای‌سیاه", "خطهای‌نازک", "خطها‌خالی", "خط‌حاشیه", "خط‌سیاه", "خط‌متن", "خط‌مو", "خط‌نازک", "خ‌ا", "خ‌ع", "در", "درج‌آرمها", "درج‌ثبت", "درج‌خط", "درج‌درخط", "درج‌درخطها", "درج‌درمتن", "درج‌درمیدان", "درج‌در‌بالای‌یکدیگر", "درج‌در‌توری", "درج‌راهنما", "درج‌زیرفرمول", "درج‌شماره‌سر", "درج‌شماره‌صفحه", "درج‌شناور", "درج‌فرمول", "درج‌لیست", "درج‌لیست‌خام", "درج‌لیست‌مختلط", "درج‌لیست‌مرجع", "درج‌متغیرمتن", "درج‌متن‌سر", "درج‌پانوشتها", "درج‌پانوشتهای‌موضعی", "درج‌چوب‌خط", "درج‌کنار‌به‌کنار", "درحاشیه", "درحاشیه‌دیگر", "درحاشیه‌راست", "درحاشیه‌چپ", "درخارجی", "درخط", "درداخلی", "درراست", "درصفحه", "درقالبی", "درلبه‌راست", "درلبه‌چپ", "درمورد", "درون", "درپر", "درچپ", "دریافت‌بافر", "دریافت‌شماره", "دریافت‌نشانه", "دوران", "دکمه", "دکمه‌منو", "دکمه‌پانل", "رج", "رجوع", "رنگ", "رنگ‌خاکستری", "روزهفته", "ریاضی", "زبان", "زبان‌اصلی", "ستون", "ستون‌امتحان", "سر", "سرپوش‌کوچک‌نه", "شروع‌آرایش", "شروع‌آرایش‌ستون", "شروع‌باریکتر", "شروع‌بازبینی", "شروع‌بلوک‌حاشیه", "شروع‌ترکیب", "شروع‌تصحیح‌خط", "شروع‌تطابق", "شروع‌تنظیم", "شروع‌تولید", "شروع‌جدول", "شروع‌جدولها", "شروع‌خط", "شروع‌خطها", "شروع‌خط‌حاشیه", "شروع‌خط‌متن", "شروع‌رنگ", "شروع‌ستونها", "شروع‌سراسری", "شروع‌شماره‌گذاری‌خط", "شروع‌شکل", "شروع‌غیر‌فشرده", "شروع‌فشرده", "شروع‌متن", "شروع‌مجموعه‌ستون", "شروع‌مجموعه‌نماد", "شروع‌محیط", "شروع‌مخالف", "شروع‌موضعی", "شروع‌مولفه", "شروع‌مکان‌گذاری", "شروع‌نسخه", "شروع‌نقل‌قول", "شروع‌نوشتار", "شروع‌پانوشتهای‌موضعی", "شروع‌پروفایل", "شروع‌پروژه", "شروع‌پس‌زمینه", "شروع‌پوشش", "شروع‌کد", "شماره‌افزایش", "شماره‌زیرصفحه", "شماره‌زیرفرمول", "شماره‌سر", "شماره‌سرجاری", "شماره‌صفحه", "شماره‌صفحه‌کامل", "شماره‌فرمول", "شماره‌مبدل", "شماره‌ها", "شماره‌کاهش", "شماره‌کل‌صفحه‌ها", "شکافتن‌شناور", "شکل‌خارجی", "صفحه", "صفحه‌تست", "صفحه‌زوج", "صفحه‌پردازش", "طول‌لیست", "عبوربلوکها", "عرض‌آرایش", "عرض‌برگ", "عرض‌حاشیه", "عرض‌حاشیه‌خارجی", "عرض‌حاشیه‌داخلی", "عرض‌حاشیه‌راست", "عرض‌حاشیه‌چپ", "عرض‌خط", "عرض‌لبه", "عرض‌لبه‌خارجی", "عرض‌لبه‌داخلی", "عرض‌لبه‌راست", "عرض‌لبه‌چپ", "عرض‌لیست", "عرض‌متن", "عمق‌صفحه", "عنوان‌حاشیه", "فاصله‌بالا", "فاصله‌ته‌برگ", "فاصله‌حاشیه", "فاصله‌حاشیه‌خارجی", "فاصله‌حاشیه‌داخلی", "فاصله‌حاشیه‌راست", "فاصله‌حاشیه‌چپ", "فاصله‌سربرگ", "فاصله‌لبه", "فاصله‌لبه‌خارجی", "فاصله‌لبه‌داخلی", "فاصله‌لبه‌راست", "فاصله‌لبه‌چپ", "فاصله‌پایین", "فاصله‌پشت", "فشرده", "فضا", "فضاهای‌ثابت", "فضای‌بالا", "فضای‌برش", "فضای‌ثابت", "فضای‌سفید", "فضای‌سفیدصحیح", "فضای‌پایین", "فوری‌به‌لیست", "فوری‌بین‌لیست", "قالبی", "لوح‌مقایسه", "ماه", "متغیر متن", "متن‌برچسب", "متن‌حاشیه", "متن‌سر", "متن‌پانوشت", "محیط", "مراجعه", "مرجع", "مرجع‌صفحه", "مرجع‌متن", "مرحله‌سر", "مسکن", "معنی‌واحد", "مقایسه‌گروه‌رنگ", "مقدارخاکستری", "مقداررنگ", "مقیاس", "منفی", "منوی‌پانل", "مولفه", "مکان", "مکان‌متن", "میدان", "میدانهای‌گزارش", "میدان‌شبیه‌سازی", "میدان‌پشته", "میدان‌کپی", "میله‌تطابق", "میله‌رنگ", "میله‌پانل", "ناشناس", "نام‌ماکرو", "نسخه", "نسخه‌نشانه", "نشانه‌گذاری", "نشانه‌گذاری‌زوج", "نشر", "نصب‌زبان", "نقطه‌ها", "نقل", "نقل‌قول", "نم", "نماد", "نمادسر", "نمادلیست", "نمایش‌آرایش", "نمایش‌بارگذاریها", "نمایش‌بستها", "نمایش‌توری", "نمایش‌رنگ", "نمایش‌شکلهای‌خارجی", "نمایش‌طرح‌بندی", "نمایش‌قالب", "نمایش‌قلم‌بدنه", "نمایش‌لوح", "نمایش‌مجموعه‌علامت", "نمایش‌محیط‌قلم‌بدنه", "نمایش‌میدانها", "نمایش‌چاپ", "نمایش‌گروه‌رنگ", "نوشتارزوج", "هدایت", "پا", "پابا", "پانوشت", "پایان‌آرایش", "پایان‌آرایش‌ستون", "پایان‌بازبینی", "پایان‌بلوک‌حاشیه", "پایان‌ترکیب", "پایان‌تصحیح‌خط", "پایان‌تطابق", "پایان‌تنظیم", "پایان‌تولید", "پایان‌جدول", "پایان‌جدولها", "پایان‌خط", "پایان‌خطها", "پایان‌خط‌حاشیه", "پایان‌خط‌متن", "پایان‌رنگ", "پایان‌ستونها", "پایان‌سراسری", "پایان‌شماره‌گذاری‌خط", "پایان‌غیرفشرده", "پایان‌فشرده", "پایان‌متن", "پایان‌مجموعه‌ستون", "پایان‌محیط", "پایان‌مخالف", "پایان‌موضعی", "پایان‌مولفه", "پایان‌مکان‌گذاری", "پایان‌نازکتر", "پایان‌نسخه", "پایان‌نقل‌قول", "پایان‌نوشتار", "پایان‌پانوشتهای‌موضعی", "پایان‌پروفایل", "پایان‌پروژه", "پایان‌پس‌زمینه", "پایان‌پوشش", "پایان‌کد", "پایین", "پرده", "پروژه", "پرکردن‌میدان", "پس‌زمینه", "پیروی‌نسخه", "پیروی‌نسخه‌پروفایل", "پیروی‌پروفایل", "چاپ‌ارتفاع‌برگ", "چاپ‌عرض‌برگ", "چوبخط", "چپ‌چین", "کاغذزوج", "کسر", "کشیده", "کلمه‌حاشیه", "کلمه‌راست", "گیره", "یادداشت", "یک‌جا", "یک‌خط" },
- ["ro"]={ "CAP", "CUVANT", "CUVINTE", "Cap", "Caps", "Character", "Characters", "Cuvant", "Cuvinte", "KAP", "Kap", "Kaps", "LUNA", "Litera", "Litere", "MONTH", "Numere", "Numereromane", "Romannumerals", "WEEKDAY", "WORD", "WORDS", "Word", "Words", "ZIDINSAPTAMANA", "about", "adapteazaaspect", "adaptlayout", "adubuffer", "adumarcaje", "afiseazaaspect", "afiseazacampuri", "afiseazaculoare", "afiseazafiguriexterne", "afiseazafonttext", "afiseazagrid", "afiseazagrupculoare", "afiseazamakeup", "afiseazamediufonttext", "afiseazapaleta", "afiseazarama", "afiseazasetari", "afiseazasetsimboluri", "afiseazastruts", "afiseazatiparire", "aliniat", "aliniatcentru", "aliniatdreapta", "aliniatstanga", "appendix", "arg", "ascundeblocuri", "at", "atleftmargin", "atpage", "atrightmargin", "background", "baraculoare", "barainteractiune", "barasincronizare", "blackrule", "blackrules", "blanc", "blank", "bookmark", "but", "butoaneinteractiune", "buton", "butonmeniu", "button", "bypassblocks", "camp", "campumplere", "cap", "chapter", "character", "characters", "chem", "citat", "clip", "cloneazacamp", "clonefield", "coloana", "color", "column", "comment", "comparagrupculoare", "comparapaleta", "comparecolorgroup", "comparepalet", "completeazanumarpagina", "completecombinedlist", "completelistoffloats", "completelistofsorts", "completelistofsynonyms", "completeregister", "componenta", "convertestenumar", "convertnumber", "copiazacamp", "copyfield", "corecteazaspatiualb", "correctwhitespace", "coupledocument", "coupledregister", "couplemarking", "couplepage", "couplepaper", "coupleregister", "crlf", "culoare", "culoaregri", "cupleazadocument", "cupleazamarcaje", "cupleazaregistru", "currentdate", "currentheadnumber", "cutspace", "cuvantdreapta", "cuvantmarginal", "data", "datacurenta", "datareferit", "date", "decouplemarking", "decrementnumber", "decupleazamarcaje", "define", "defineblank", "defineblock", "definebodyfont", "definebodyfontDEF", "definebodyfontREF", "definebodyfontenvironment", "definebuffer", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecombination", "definecombinedlist", "defineconversion", "definedescription", "definedfont", "defineenumeration", "definefield", "definefieldstack", "definefiguresymbol", "definefloat", "definefont", "definefontfeature", "definefonthandling", "definefontsynonym", "defineframed", "defineframedtext", "definehead", "defineindentedtext", "defineinmargin", "defineinteractionmenu", "defineitemgroup", "definelabel", "definelayer", "definelayout", "definelist", "definelogo", "definemakeup", "definemarking", "definemathalignment", "defineoutput", "defineoverlay", "definepagebreak", "definepalet", "definepapersize", "defineparagraphs", "defineplacement", "defineprofile", "defineprogram", "definereference", "definereferenceformat", "definereferencelist", "defineregister", "definesection", "definesectionblock", "definesorting", "definestartstop", "defineste", "definesteaccent", "definesteantet", "definesteblanc", "definestebloc", "definesteblocsectiune", "definestebuffer", "definestecamp", "definestecampprincipal", "definestecaracter", "definestecomanda", "definesteconversie", "definesteculoare", "definestedescriere", "definestedimensiunehartie", "definesteenumerare", "definesteeticheta", "definestefloat", "definestefont", "definestefontraw", "definestefonttext", "definesteformatreferinte", "definestegrupculori", "definestehbox", "definesteinconjurare", "definestelista", "definestelistacombinata", "definestelistareferinte", "definestelogo", "definestemakeup", "definestemarcaje", "definestemediulfonttext", "definestemeniuinteractiune", "definesteoutput", "definesteoverlay", "definestepaleta", "definesteparagraf", "definestepozitietext", "definesteprofil", "definesteprogram", "definestereferinte", "definesteregistru", "definesterigla", "definestesablontabel", "definestesectiune", "definestesimbol", "definestesimbolfigura", "definestesinonim", "definestesinonimfont", "definestesortare", "definestestartstop", "definestestil", "definestestilfont", "definestestivacampuri", "definestesubcamp", "definestetabulatori", "definestetext", "definestetexteinconjurate", "definestetextinconjurat", "definestetyping", "definestevariabilatext", "definesteversiune", "definesubfield", "definesymbol", "definesynonyms", "definetabletemplate", "definetabulate", "definetext", "definetype", "definetypeface", "definetyping", "defineversion", "description", "despre", "determinacaracteristicilelistei", "determinacaracteristiciregistru", "determinanumartitlu", "determineheadnumber", "determinelistcharacteristics", "dezactiveazameniuinteractiune", "dimensiune", "din", "disableinteractionmenu", "distantaantet", "distantacolt", "distantacoltdreapta", "distantacoltstanga", "distantajos", "distantamargine", "distantamarginedreapta", "distantamarginestanga", "distantasubsol", "distantasus", "domiciliu", "dute", "dutebox", "dutepagina", "ecran", "el", "element", "emptylines", "enumeration", "eticheta", "etichete", "externalfigure", "fact", "faraaliniat", "faradimensiune", "farafisiere", "faraliniiantetsisubsol", "faraliniisussijos", "faralista", "faramarcaje", "faraspatiu", "faraspatiualb", "field", "fieldstack", "figuraexterna", "fillinfield", "fillinline", "fillinrules", "fillintext", "firdepar", "fitfield", "fixedspaces", "followprofile", "followprofileversion", "followversion", "folosesteURL", "folosestebloc", "folosestecodificarea", "folosestecomenzi", "folosestedirector", "folosestedocumentextern", "folosestefiguraexterna", "folosestefisiereexterne", "folosestefisierextern", "folosestemodul", "folosestemodule", "folosestemuzicaexterna", "folosestereferinte", "folosestescriptJS", "folosestesimboluri", "folosestespeciale", "folosesteurl", "footnote", "footnotetext", "forceblocks", "forteazablocuri", "fractie", "fraction", "framed", "framedtext", "from", "fundal", "gatablocuri", "getbuffer", "getmarking", "getnumber", "godown", "goto", "gotobox", "graycolor", "grid", "grosimelinie", "hairline", "hartiedubla", "head", "headnumber", "headsym", "headtext", "hideblocks", "high", "hl", "immediatebetweenlist", "immediatetolist", "impachetat", "impartefloat", "in", "inalt", "inaltamargine", "inaltimeantet", "inaltimehartie", "inaltimehartieimprimanta", "inaltimejos", "inaltimelista", "inaltimemakeup", "inaltimesubsol", "inaltimesus", "inaltimetext", "indentation", "indenting", "indreapta", "inframed", "ininner", "injos", "inleft", "inline", "inlinie", "inmaframed", "inmargin", "inmargineadreapta", "inmargineastanga", "inneredgedistance", "inneredgewidth", "innermargindistance", "innermarginwidth", "inothermargin", "inouter", "inparteadreapta", "inparteastanga", "inright", "instalarelimba", "installlanguage", "instanga", "interactionbar", "interactionbuttons", "intins", "item", "items", "its", "jos", "jossus", "kap", "keepblocks", "la", "labeling", "labels", "labeltext", "language", "lapagina", "latimecoltdreapta", "latimecoltstanga", "latimecolturi", "latimehartie", "latimehartieimprimanta", "latimelista", "latimemakeup", "latimemargine", "latimemarginedreapta", "latimemarginestanga", "latimetext", "leftaligned", "leg", "limba", "limbaprincipala", "liniemargine", "linieneagra", "liniesubtire", "linieumplere", "liniinegre", "liniisubtiri", "listsymbol", "litera", "litere", "loadsorts", "loadsynonyms", "logcampuri", "logfields", "lohi", "low", "luna", "lungimelista", "maframed", "mainlanguage", "mapfontsize", "mar", "marcaje", "marcheazaversiune", "marginal", "marginrule", "margintext", "marking", "markversion", "matematica", "mathematics", "mediaeval", "mediu", "meniuinteractiune", "midaligned", "minicitat", "mirror", "month", "moveformula", "moveongrid", "movesidefloat", "mutapegrid", "name", "navigating", "necunoscut", "nextsection", "niveltitlu", "nocap", "noheaderandfooterlines", "noindenting", "nokap", "nolist", "nomarking", "nomoreblocks", "nomorefiles", "nop", "nospace", "nota", "notasubsol", "note", "notopandbottomlines", "nowhitespace", "numarformula", "numarincrement", "numarpagina", "numarsubformula", "numartitlu", "numartitlucurent", "numartotalpagini", "numberofsubpages", "numbers", "nume", "numere", "numereromane", "numeunitate", "nutesta", "olinie", "outeredgedistance", "outeredgewidth", "outermargindistance", "outermarginwidth", "overbar", "overbars", "overstrike", "overstrikes", "packed", "page", "pagedepth", "pageoffset", "pagereference", "pagina", "paginadubla", "paragraph", "part", "pastreazablocuri", "pelung", "periods", "placebookmarks", "placecombinedlist", "placefloat", "placefootnotes", "placeformula", "placeheadnumber", "placeheadtext", "placelegend", "placelist", "placelistoffloats", "placelistofsorts", "placelistofsynonyms", "placelocalfootnotes", "placelogos", "placeongrid", "placeontopofeachother", "placerawlist", "placereferencelist", "placeregister", "placesidebyside", "placesubformula", "plaseazapegrid", "plaseazasemnecarte", "position", "potrivestecamp", "pozitie", "pozitietext", "proceseazabloc", "proceseazapagina", "processblocks", "processpage", "produs", "program", "proiect", "publicatie", "publication", "puncte", "punedeasuprafiecareia", "punefatainfata", "puneformula", "punelegenda", "punelista", "punelistacombinata", "punelogouri", "punenotesubsol", "punenotesubsollocale", "punenumarpagina", "puneregistru", "punerigla", "punesubformula", "punevariabilatext", "quotation", "quote", "ran", "ref", "refa", "reference", "referinta", "referintapagina", "referintatext", "referit", "referral", "referraldate", "referring", "reflexie", "register", "remarca", "reservefloat", "reset", "reseteazamarcaje", "resetmarking", "resetnumber", "resettextcontent", "rightaligned", "riglatext", "rigleumplere", "romannumerals", "rotate", "roteste", "saripesteblocuri", "scala", "scale", "screen", "scriebuffer", "scrieinlista", "scrieinlistareferinte", "scrieinregistru", "scrieintreliste", "section", "seeregister", "selectblocks", "selecteazablocuri", "selecteazahartie", "selecteazaversiune", "selectpaper", "selectversion", "semncarte", "setarebarasincronizare", "setareitemization", "setarelimba", "setareoutput", "setarepozitie", "setaresincronizare", "seteazaaliniat", "seteazaalinierea", "seteazaantet", "seteazaaranjareapag", "seteazaaspect", "seteazabarainteractiune", "seteazablanc", "seteazabloc", "seteazablocsectiune", "seteazablocurimarginale", "seteazabuffer", "seteazabutoane", "seteazacamp", "seteazacampuri", "seteazaclipping", "seteazacoloane", "seteazacombinari", "seteazacomentariu", "seteazacomentariupagina", "seteazaculoare", "seteazaculori", "seteazadefinireanotasubsol", "seteazadescriere", "seteazadimensiunihartie", "seteazaecrane", "seteazaecraninteractiune", "seteazaelemente", "seteazaenumerare", "seteazafiguriexterne", "seteazafloat", "seteazafloats", "seteazafonttext", "seteazaformulare", "seteazaformule", "seteazafundal", "seteazafundaluri", "seteazagrosimelinie", "seteazaimpartireafloat", "seteazainconjurat", "seteazaingust", "seteazainteractiunea", "seteazajos", "seteazalegenda", "seteazalegendele", "seteazaliniesilabe", "seteazaliniesubtire", "seteazalinii", "seteazaliniimargine", "seteazaliniinegre", "seteazaliniiumplere", "seteazalista", "seteazalistacombinata", "seteazalistareferinte", "seteazamajuscule", "seteazamakeup", "seteazamarcaje", "seteazamarginal", "seteazamediulfonttext", "seteazameniuinteractiune", "seteazaminicitat", "seteazanotasubsol", "seteazanumarpagina", "seteazanumarsubpagina", "seteazanumartitlu", "seteazanumerotare", "seteazanumerotarelinii", "seteazanumerotarepagina", "seteazanumerotareparagrafe", "seteazapaleta", "seteazaparagrafe", "seteazaplasareaopozita", "seteazapozitietext", "seteazaprofile", "seteazaprograme", "seteazapublicatii", "seteazareferinte", "seteazaregistru", "seteazarigla", "seteazarigletext", "seteazarigleumplere", "seteazarotare", "seteazasectiune", "seteazasimbol", "seteazasinonime", "seteazasistem", "seteazasortare", "seteazaspatiu", "seteazaspatiualb", "seteazaspatiuinterliniar", "seteazastrut", "seteazasublinie", "seteazasubsol", "seteazasus", "seteazatab", "seteazatabele", "seteazatabulatori", "seteazatext", "seteazatexteantet", "seteazatextejos", "seteazatextesubsol", "seteazatextesus", "seteazatextetext", "seteazatexteticheta", "seteazatexttitlu", "seteazatitlu", "seteazatitluri", "seteazatoleranta", "seteazatranzitiepagina", "seteazatype", "seteazatyping", "seteazaurl", "seteazavariabilatext", "seteazaversiuni", "setnumber", "settextcontent", "setupalign", "setupanswerarea", "setuparranging", "setupbackground", "setupbackgrounds", "setupblackrules", "setupblank", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbottom", "setupbottomtexts", "setupbuffer", "setupbuttons", "setupcapitals", "setupcaption", "setupcaptions", "setupclipping", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetlines", "setupcolumnsetstart", "setupcombinations", "setupcombinedlist", "setupcomment", "setupdescriptions", "setupenumerations", "setupexternalfigures", "setupfield", "setupfields", "setupfillinlines", "setupfillinrules", "setupfloat", "setupfloats", "setupfloatsplitting", "setupfonthandling", "setupfontsynonym", "setupfooter", "setupfootertexts", "setupfootnotedefinition", "setupfootnotes", "setupforms", "setupformulas", "setupframed", "setupframedtexts", "setuphead", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupinmargin", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace2", "setupitemgroup", "setupitems", "setuplabeltext", "setuplanguage", "setuplayout", "setuplegend", "setuplinenumbering", "setuplines", "setuplinewidth", "setuplist", "setuplistalternative", "setupmakeup", "setupmarginblocks", "setupmarginrules", "setupmarking", "setupmathalignment", "setupnarrower", "setupnumber", "setupnumbering", "setupoppositeplacing", "setupoutput", "setuppagenumber", "setuppagenumbering", "setuppagetransitions", "setuppalet", "setuppaper", "setuppapersize", "setupparagraphnumbering", "setupparagraphs", "setupplacement", "setuppositioning", "setupprofiles", "setupprograms", "setuppublications", "setupquote", "setupreferencelist", "setupreferencing", "setupregister", "setuprotate", "setupscreens", "setupsection", "setupsectionblock", "setupsorting", "setupspacing", "setupstartstop", "setupstrut", "setupsubpagenumber", "setupsymbolset", "setupsynchronization", "setupsynchronizationbar", "setupsynonyms", "setupsystem", "setuptab", "setuptables", "setuptabulate", "setuptext", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunderbar", "setupurl", "setupversions", "setupwhitespace", "setvariabilatext", "showbodyfont", "showbodyfontenvironment", "showcolor", "showcolorgroup", "showexternalfigures", "showfields", "showframe", "showgrid", "showlayout", "showmakeup", "showpalet", "showprint", "showsetups", "showstruts", "showsymbolset", "sim", "simbol", "sincronizeaza", "someline", "somewhere", "sort", "space", "spatiifixate", "spatiu", "spatiualb", "spatiufixat", "spatiujos", "spatiuspate", "spatiusus", "splitfloat", "startalignment", "startaliniere", "startbackground", "startblocmarginal", "startbuffer", "startcitat", "startcodificare", "startcoloane", "startcolor", "startcolumnmakeup", "startcolumns", "startcolumnset", "startcombinare", "startcombination", "startcomment", "startcomponent", "startcomponenta", "startcorectielinie", "startculoare", "startdescription", "startdocument", "startenumeration", "startenvironment", "startfact", "startfigura", "startfigure", "startfloattext", "startformula", "startframedtext", "startfundal", "startglobal", "starthiding", "startimpachetat", "startingust", "startinteractionmenu", "startitemgroup", "startlegend", "startline", "startlinecorrection", "startlinenumbering", "startlines", "startlinie", "startliniemargine", "startlinii", "startlocal", "startlocalenvironment", "startlocalfootnotes", "startmakeup", "startmarginblock", "startmarginrule", "startmediu", "startnamemakeup", "startnarrower", "startneimpachetat", "startnotesubsollocale", "startnumerotarelinii", "startopozit", "startopposite", "startoverlay", "startoverview", "startpacked", "startparagraph", "startpositioning", "startpostponing", "startpozitionare", "startproduct", "startprodus", "startprofil", "startprofile", "startproiect", "startproject", "startquotation", "startraster", "startregister", "startriglatext", "startsetsimboluri", "startsincronizare", "startsymbolset", "startsynchronization", "starttabel", "starttabele", "starttable", "starttables", "starttabulate", "starttext", "starttextrule", "starttyping", "startunpacked", "startversion", "startversiune", "stivacampuri", "stopalignment", "stopaliniere", "stopbackground", "stopblobal", "stopblocmarginal", "stopbuffer", "stopcitat", "stopcodificare", "stopcoloane", "stopcolor", "stopcolumnmakeup", "stopcolumns", "stopcolumnset", "stopcombinare", "stopcombination", "stopcomment", "stopcomponent", "stopcomponenta", "stopcorectielinie", "stopculoare", "stopdescription", "stopdocument", "stopenumeration", "stopenvironment", "stopfact", "stopfigure", "stopfloattext", "stopformula", "stopframedtext", "stopfundal", "stophiding", "stopimpachetat", "stopingust", "stopinteractionmenu", "stopitemgroup", "stoplegend", "stopline", "stoplinecorrection", "stoplinenumbering", "stoplines", "stoplinie", "stopliniemargine", "stoplinii", "stoplocal", "stoplocalenvironment", "stoplocalfootnotes", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmediu", "stopnamemakeup", "stopnarrower", "stopneimpachetat", "stopnotesubsollocale", "stopnumerotarelinii", "stopopozit", "stopopposite", "stopoverlay", "stopoverview", "stoppacked", "stopparagraph", "stoppositioning", "stoppostponing", "stoppozitionare", "stopproduct", "stopprodus", "stopprofil", "stopprofile", "stopproiect", "stopproject", "stopquotation", "stopraster", "stopriglatext", "stopsincronizare", "stopsymbolset", "stopsynchronization", "stoptabel", "stoptabele", "stoptable", "stoptables", "stoptabulate", "stoptext", "stoptextrule", "stoptyping", "stopunpacked", "stopversion", "stopversiune", "stretched", "sub", "subject", "subpagenumber", "subsection", "subsubject", "subsubsection", "subsubsubject", "switchtobodyfont", "sym", "symbol", "synchronizationbar", "synchronize", "synonym", "tab", "testcolumn", "testpage", "tex", "texteticheta", "textmarginal", "textreference", "textrule", "texttitlu", "textumplere", "thinrule", "thinrules", "title", "titlu", "titlumarginal", "tooltip", "traduce", "translate", "trecilafontraw", "trecilafonttext", "txt", "typ", "type", "typebuffer", "typefile", "underbar", "underbars", "undeva", "urmeazaprofil", "urmeazaversiune", "urmeazaversiuneprofil", "useURL", "useXMLfilter", "useblocks", "usecommands", "usedirectory", "useencoding", "useexternaldocument", "useexternalfigure", "useexternalfile", "useexternalfiles", "useexternalsoundtrack", "usemodule", "usereferences", "usespecials", "usesymbols", "usetypescript", "usetypescriptfile", "valoareculoare", "valoaregri", "variabilatext", "version", "versiune", "vl", "weekday", "whitespace", "wordright", "writebetweenlist", "writetolist", "writetoreferencelist", "writetoregister", "zidinsaptamana" },
+ ["cs"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Caps", "Cisla", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "Kap", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "LuaTeX", "LuajitTeX", "MESIC", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "Rimskecislice", "SLOVA", "SLOVO", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Slova", "Slovo", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VSEDNIDEN", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "Znak", "Znaky", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "aktualnicislonadpisu", "aktualnidatum", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "atleftmargin", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "barevnalista", "barva", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "bublinkovanapoveda", "bublinkovanapoveda", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "calligraphic", "camel", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cernalinka", "cernelinky", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cisla", "cislonadpisu", "cislorovnice", "cislostrany", "citace", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "citovat", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completepagenumber", "completeregister", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolumnbreak", "definecombination", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayerpreset", "definelayout", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "definuj", "definujakcent", "definujbarvu", "definujbarvu", "definujblok", "definujbloksekce", "definujbuffer", "definujfont", "definujfont", "definujformatodkazu", "definujhbox", "definujinterakcnimenu", "definujkombinovanyseznam", "definujkonverzi", "definujkonverzi", "definujnadpis", "definujobrazeksymbol", "definujodkaz", "definujodstavce", "definujopis", "definujoramovani", "definujoramovanytext", "definujpaletu", "definujpaletu", "definujplvouciobjekt", "definujplvouciobjekt", "definujpodpole", "definujpole", "definujpopis", "definujpopisek", "definujprekryv", "definujprikaz", "definujprofil", "definujprogram", "definujprostredizakladnihofontu", "definujrejstrik", "definujsablonutabulky", "definujsekci", "definujseznam", "definujskupinubarev", "definujstartstop", "definujstyl", "definujstylfontu", "definujsymbol", "definujsynonumumfontu", "definujsynonyma", "definujtabelaci", "definujtext", "definujtrideni", "definujupravu", "definujvelikostpapiru", "definujvelikostpapiru", "definujzakladnifont", "definujzakladnifont", "definujzasobnikpoli", "definujznaceni", "definujznak", "delimited", "delimitedtext", "delkaseznamu", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "eTeX", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "externiobraz", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hlavnijazyk", "hodnotabarvy", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impliedby", "implies", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "instalacejazyka", "instalacejazyka", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "interakcnilista", "interakcnitlacitka", "interaktivnimenu", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "jazyk", "jdidolu", "jdina", "jdinabox", "jdinastranu", "jobfilename", "jobfilesuffix", "kap", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "klonujpole", "komponenta", "komponenta", "konvertujcislo", "kopirujpole", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korekcebilehomista", "labellanguage", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "makecharacteractive", "makerawcommalist", "makestrutofbox", "maoramovani", "mapfontsize", "marginalninadpis", "marginalnislovo", "marginalnitext", "margindata", "markcontent", "markinjector", "mat", "matematika", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mazaramovani", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "mequal", "meritko", "mesic", "message", "metaTeX", "mezera", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mrizka", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "nadpis", "nalevo", "nalevyokraj", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naokraj", "napravo", "napravyokraj", "nastavbarvu", "nastavbarvy", "nastavbilamista", "nastavblok", "nastavbloksekce", "nastavbuffer", "nastavcernelinky", "nastavcislonadpisu", "nastavcislostrany", "nastavcislovaniodstavcu", "nastavcislovaniradku", "nastavcislovanistran", "nastavcitaci", "nastavdeleniplvoucichobjektu", "nastavdelitko", "nastavdolnitexty", "nastavhorejsek", "nastavhornitexty", "nastavinterakci", "nastavinterakci", "nastavinterakcnilistu", "nastavinterakcnimenu", "nastavinterakcniobrazovku", "nastavjazyk", "nastavkapitalky", "nastavkombinovanyseznam", "nastavkomentar", "nastavkomentarstrany", "nastavlegendu", "nastavmarginalnilinky", "nastavmeziradkovoumezeru", "nastavmeziradkovoumezeru", "nastavmeziradkovoumezeru", "nastavmeziradkovoumezeru", "nastavmeziradkovoumezeru", "nastavmeziradkovoumezeru", "nastavnadpis", "nastavodkazovani", "nastavodsazovani", "nastavodstavce", "nastavodstavce", "nastavopis", "nastavoramovani", "nastavorez", "nastavotoceni", "nastavpaletu", "nastavplvouciobjekt", "nastavpodcislostrany", "nastavpole", "nastavpolozky", "nastavpopisek", "nastavpozadi", "nastavpozadi", "nastavpozadi", "nastavprechodstrany", "nastavpreskok", "nastavprogramy", "nastavradkovani", "nastavradky", "nastavrejstrik", "nastavrejstrik", "nastavsadusymbolu", "nastavseznam", "nastavsirkucary", "nastavsloupce", "nastavspodek", "nastavsynonyma", "nastavtabelaci", "nastavtabulky", "nastavtenkelinky", "nastavtext", "nastavtexthlavicky", "nastavtextovelinky", "nastavtextpopisku", "nastavtexttexty", "nastavtextyupati", "nastavtextyzahlavi", "nastavtoleranci", "nastavtrideni", "nastavtype", "nastavumisteniprotejsku", "nastavumistovani", "nastavupati", "nastavupravu", "nastavurl", "nastavusporadani", "nastavvelikostpapiru", "nastavvelikostpapiru", "nastavvsechnapole", "nastavvyplnovelinky", "nastavvyplnoveradky", "nastavvzhled", "nastavvzhled", "nastavzahlavi", "nastavzakladnifont", "nastavzarovnani", "nastavznaceni", "nastavzuzeni", "nastrane", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "nejakyradek", "nekde", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "neznamo", "nihongo", "nivy", "nizky", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nokap", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notragged", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obrazovka", "odkaz", "odkaznastranu", "odkaznatext", "odkazujici", "offset", "offsetbox", "okr", "onedigitrounding", "operatorlanguage", "operatortext", "opis", "opis", "opissoubor", "oramovani", "ordinaldaynumber", "ordinalstr", "oref", "orez", "ornamenttext", "ornamenttext", "ornamenttext", "otocit", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "oznaceni", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "paletsize", "part", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "pis", "pis", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatwithsetups", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "placetable", "plnezneni", "pol", "pole", "polozka", "polozky", "popattribute", "popmacro", "popmode", "popsystemmode", "porovnejpaletu", "porovnejskupinubarev", "positionoverlay", "positionregionoverlay", "postponenotes", "pozadi", "pozice", "poznamka", "poznamkapodcarou", "poznamkapodcarou", "predefinedfont", "predefinefont", "predefinesymbol", "pref", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prelozit", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "prepninazakladnifont", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "preskoc", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "prizpusobivepole", "prizpusobvzhled", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "produkt", "produkt", "profiledbox", "profilegivenbox", "program", "projekt", "projekt", "prostredi", "prostredi", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "referenceprefix", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "resetznaceni", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rimskecislice", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "rozdelplvouciobjekt", "roztazene", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schovejbloky", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "sedabarva", "seeindex", "select", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settextcontent", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupforms", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "sloupec", "slovenianNumerals", "sloveniannumerals", "slovovpravo", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spanishNumerals", "spanishnumerals", "speech", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spodek", "spodek", "spreadhbox", "sqrt", "stackrel", "stanovcharakteristickuseznamu", "stanovcislonadpisu", "startJScode", "startJSpreamble", "startLUA", "startLUA", "startMP", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startPARSEDXML", "startTABLE", "startTABLE", "startTABLEbody", "startTABLEbody", "startTABLEfoot", "startTABLEfoot", "startTABLEhead", "startTABLEhead", "startTABLEnext", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startXML", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startattachment", "startbackmatter", "startbar", "startbar", "startbarva", "startbarva", "startbarva", "startbitmapimage", "startblockquote", "startbodymatter", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startbuffer", "startcases", "startcatcodetable", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcitace", "startcitovat", "startcollect", "startcollecting", "startcolorintent", "startcolorset", "startcolumns", "startcolumnspan", "startcom", "startcombination", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startembeddedxtable", "startembeddedxtable", "startendnote", "startendnote", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfakt", "startfigure", "startfiguretext", "startfittingpage", "startfloatcombination", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startframedcontent", "startframedtext", "startfrontmatter", "startgot", "startgraphictext", "startgridsnapping", "startgridsnapping", "starthboxestohbox", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteraction", "startinteraktivnimenu", "startinterface", "startintermezzotext", "startintertext", "startitemgroup", "startitemize", "startjdina", "startknockout", "startkomponenta", "startkomponenta", "startlayout", "startlegend", "startlinealignment", "startlinecorrection", "startlinenote", "startlinenumbering", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startluasetups", "startmakeup", "startmarginalnilinka", "startmarginalnilinka", "startmarginblock", "startmarkedcontent", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmiddlealigned", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmodule", "startmoduletestsection", "startmpformula", "startnadpis", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrow", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnop", "startnotallmodes", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoramovani", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplacegraphic", "startplaceintermezzo", "startplacepairedbox", "startplacetable", "startpolozka", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startpozadi", "startpozadi", "startpoznamkapodcarou", "startpoznamkapodcarou", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprodukt", "startprojekt", "startprojekt", "startprostredi", "startprostredi", "startprotect", "startprotectedcolors", "startpsh", "startpublikace", "startpunctuation", "startradek", "startrandomized", "startrandomseed", "startraw", "startrawsetups", "startrawsetups", "startreadingfile", "startreferenceprefix", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startrob", "startrul", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspecialitem", "startspecialitem", "startspeech", "startspformula", "startspodek", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startstyle", "startsubformulas", "startsubject", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttable", "starttablehead", "starttables", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexcode", "starttexdefinition", "starttext", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttexthlavicky", "starttextovalinka", "starttextpopisku", "starttitle", "starttokens", "starttxt", "starttypescript", "starttypescriptcollection", "starttyping", "starttyping", "startumistilegendu", "startumistirovnici", "startumistirovnici", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startxcell", "startxcellgroup", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtable", "startxtablebody", "startxtablebody", "startxtablefoot", "startxtablefoot", "startxtablehead", "startxtablehead", "startxtablenext", "startxtablenext", "startzarovnanonastred", "startzarovnanovlevo", "startzarovnanovpravo", "startzhustene", "stopJScode", "stopJSpreamble", "stopLUA", "stopLUA", "stopMP", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopPARSEDXML", "stopTABLE", "stopTABLE", "stopTABLEbody", "stopTABLEbody", "stopTABLEfoot", "stopTABLEfoot", "stopTABLEhead", "stopTABLEhead", "stopTABLEnext", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopXML", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopattachment", "stopbackmatter", "stopbar", "stopbar", "stopbarva", "stopbarva", "stopbarva", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopbuffer", "stopcases", "stopcatcodetable", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitace", "stopcitovat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcom", "stopcombination", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopembeddedxtable", "stopembeddedxtable", "stopendnote", "stopendnote", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfakt", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfloatcombination", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopframedcontent", "stopframedtext", "stopfrontmatter", "stopgot", "stopgraphictext", "stopgridsnapping", "stopgridsnapping", "stophboxestohbox", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteraction", "stopinteraktivnimenu", "stopinterface", "stopintermezzotext", "stopintertext", "stopitemgroup", "stopitemize", "stopjdina", "stopknockout", "stopkomponenta", "stopkomponenta", "stoplayout", "stoplegend", "stoplinealignment", "stoplinecorrection", "stoplinenote", "stoplinenumbering", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopluasetups", "stopmakeup", "stopmarginalnilinka", "stopmarginalnilinka", "stopmarginblock", "stopmarkedcontent", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmiddlealigned", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnadpis", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrow", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnop", "stopnotallmodes", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stoporamovani", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplacegraphic", "stopplaceintermezzo", "stopplacepairedbox", "stopplacetable", "stoppolozka", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stoppozadi", "stoppozadi", "stoppoznamkapodcarou", "stoppoznamkapodcarou", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprodukt", "stopprojekt", "stopprojekt", "stopprostredi", "stopprostredi", "stopprotect", "stopprotectedcolors", "stoppsh", "stoppublikace", "stoppunctuation", "stopradek", "stoprandomized", "stoprandomseed", "stopraw", "stoprawsetups", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stoprob", "stoprul", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspecialitem", "stopspecialitem", "stopspeech", "stopspformula", "stopspodek", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopstyle", "stopsubformulas", "stopsubject", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptable", "stoptablehead", "stoptables", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexcode", "stoptexdefinition", "stoptext", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptexthlavicky", "stoptextovalinka", "stoptextpopisku", "stoptitle", "stoptokens", "stoptxt", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stoptyping", "stopumistilegendu", "stopumistirovnici", "stopumistirovnici", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopxcell", "stopxcellgroup", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtable", "stopxtablebody", "stopxtablebody", "stopxtablefoot", "stopxtablefoot", "stopxtablehead", "stopxtablehead", "stopxtablenext", "stopxtablenext", "stopzarovnanonastred", "stopzarovnanovlevo", "stopzarovnanovpravo", "stopzhustene", "strana", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "sym", "symbol", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tecky", "tecky", "tenkalinka", "tenkelinky", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "texthlavicky", "textmath", "textminus", "textormathchar", "textovalinka", "textplus", "textpopisku", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "tlacitko", "tlacitkomenu", "tlacitkomenu", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tloustkacary", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "tref", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "tvrdamezera", "tvrdemezery", "twodigitrounding", "tx", "txt", "txt", "txx", "typebuffer", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "ukazbarvu", "ukazmrizku", "ukaznastaveni", "ukazpaletu", "ukazpodpery", "ukazpostredizakladnihofontu", "ukazramecek", "ukazsadusymbolu", "ukazskupinubarev", "ukazupravu", "ukazvytisk", "ukazvzhled", "ukazzakladnifont", "umistikombinovanyseznam", "umistilegendu", "umistilokalnipoznamkypodcarou", "umistinadsebe", "umistinamrizku", "umistinamrizku", "umistipodrovnici", "umistipoznamkypodcarou", "umistirejstrik", "umistirovnici", "umistiseznam", "umistivedlesebe", "umistizalozky", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "urcicharakteristikurejstriku", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "uzijJSscripts", "uzijURL", "uzijadresar", "uzijbloky", "uzijexternidokument", "uzijexterniobraz", "uzijexternizvuk", "uzijmodul", "uzijsymbol", "uzijurl", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "verze", "vglue", "viewerlayer", "vl", "vlasovalinka", "vlevo", "vphantom", "vpos", "vpravo", "vradku", "vsedniden", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "vyberbloky", "vyplnenytext", "vyplnovelinky", "vyplnovyradek", "vysoky", "wdofstring", "widthofstring", "widthspanningtext", "withoutpt", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "zachovejbloky", "zadnamezera", "zadnehorniadolniradky", "zadnezahlaviaupati", "zalozka", "zapisdoseznamu", "zapismeziseznam", "zaramovani", "zarovnanonastred", "zarovnanovlevo", "zarovnanovpravo", "zasobnikpoli", "ziskejbuffer", "ziskejznaceni", "znaceni", "znak", "znaky", "zpracujbloky", "zrcadlit", "zref" },
+ ["de"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "Buchstabe", "Buchstaben", "CONTEXT", "Caps", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "Kap", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONAT", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "Roemischezahlen", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WOCHENTAG", "WOERTER", "WORT", "WidthSpanningText", "Woerter", "Wort", "XETEX", "XeTeX", "Ziffern", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "amgitterausrichten", "amgitterausrichten", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "atleftmargin", "atrightmargin", "attachment", "aufseite", "ausfuelltext", "ausschnitt", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "bearbeitebloecke", "beforesplitstring", "beforetestandsplitstring", "behaltebloecke", "bei", "bemerkung", "benutzeverzeichnis", "beschriftung", "bestimmekopfnummer", "bestimmelistencharakeristika", "bestimmeregistercharakteristika", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "bildschirm", "binom", "bitmapimage", "blanko", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buchstabe", "buchstaben", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "but", "but", "calligraphic", "camel", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completepagenumber", "completeregister", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolumnbreak", "definecombination", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayerpreset", "definelayout", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "defineschriftsynonym", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "definiereabbsymbol", "definiereabsaetze", "definiereabschnitt", "definiereabschnittsblock", "definiereakzent", "definierebefehl", "definierebeschreibung", "definierebeschriftung", "definiereblock", "definierefarbe", "definierefarbe", "definierefarbengruppe", "definierefeld", "definierefeldstapel", "definierefliesstext", "definierefliesstext", "definierefliesstextumgebung", "definieregleitobjekt", "definieregleitobjekt", "definierehbox", "definiereinteraktionsmenue", "definierekonversion", "definierekonversion", "definierelabel", "definiereliste", "definieren", "definiereoverlay", "definierepalette", "definierepalette", "definierepapierformat", "definierepapierformat", "definiereprofil", "definiereprogramme", "definierepuffer", "definierereferenz", "definierereferenzformat", "definiereregister", "definiereschrift", "definiereschrift", "definiereschriftstil", "definieresortieren", "definierestartstop", "definierestil", "definieresubfeld", "definieresymbol", "definieresynonyme", "definieretabellenvorlage", "definieretabulator", "definieretext", "definieretippen", "definiereueberschrift", "definiereumbruch", "definiereumrahmt", "definiereumrahmtertext", "definierezeichen", "definierezusammengestellteliste", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "drehen", "duennelinie", "duennerumriss", "dummydigit", "dummyparameter", "eTeX", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "einezeile", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "externeabbildung", "fakebox", "farbbalken", "farbe", "farbewert", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "feld", "feldstapel", "fence", "fenced", "festesspatium", "festesspatium", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "format", "formelnummer", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "fussnote", "fussnote", "gdefconvertedargument", "gdefconvertedcommand", "gefuelltesrechteck", "gefuelltezeile", "gestreckt", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "gitter", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "graufarbe", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haarlinie", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hauptsprache", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "heutigesdatum", "heutigeskopfnummer", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hintergrund", "hl", "hoch", "holebeschriftung", "holepuffer", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "imlinken", "imlinkenrand", "immaumrise", "immediatesavetwopassdata", "impliedby", "implies", "imrechten", "imrechtenrand", "imumriss", "in", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inlinkermarginale", "inmarginalie", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inrechtermarginale", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installieresprache", "installieresprache", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "interaktionsbalken", "interaktionsknopfe", "interaktionsmenue", "intertext", "invokepageheandler", "inzeile", "irgendwo", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "its", "jobfilename", "jobfilesuffix", "kap", "kap", "keeplinestogether", "keepunwantedspaces", "keinekopfundfusszeilen", "keinspatium", "keinzeilenobenundunten", "kerncharacters", "klonierefeld", "knopf", "komponente", "komponente", "konvertierezahl", "kopf", "kopfnummer", "kopierefeld", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "korrigierezwischenraum", "labellanguage", "labeltext", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "liniendicke", "linksbuendig", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listenlaenge", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "marginaltext", "marginaltitel", "marginalwort", "margindata", "markcontent", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematik", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maumrise", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "menueknopf", "menueknopf", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "monat", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "nachunten", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nokap", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notiz", "notragged", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "paletsize", "part", "passelayoutan", "passendfeld", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatwithsetups", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "placetable", "platzierebookmarks", "platziereformel", "platzierefussnoten", "platzierelegende", "platziereliste", "platzierelokalefussnoten", "platzierenebeneinander", "platziereregister", "platziereuntereinander", "platziereunterformel", "platzierezusammengestellteliste", "popattribute", "popmacro", "popmode", "popsystemmode", "pos", "position", "positionoverlay", "positionregionoverlay", "posten", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "produkt", "produkt", "profiledbox", "profilegivenbox", "programm", "projekt", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "punkt", "punkt", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "rechteck", "rechtecke", "rechtsbuendig", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "referenceprefix", "referenz", "referieren", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "roemischezahlen", "rollbutton", "rollbutton", "roman", "rtop", "ruecksetztenbeschriftung", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schreibezurliste", "schreibezwischenliste", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "seite", "seitenreferenz", "seitenummer", "select", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settext", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupforms", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showsymbolset", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spalte", "spanishNumerals", "spanishnumerals", "spatium", "speech", "spiegeln", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "sprache", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startLUA", "startLUA", "startMP", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startPARSEDXML", "startTABLE", "startTABLE", "startTABLEbody", "startTABLEbody", "startTABLEfoot", "startTABLEfoot", "startTABLEhead", "startTABLEhead", "startTABLEnext", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startXML", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startattachment", "startbackmatter", "startbar", "startbar", "startbitmapimage", "startblockquote", "startbodymatter", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startbuffer", "startbut", "startcases", "startcatcodetable", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolorintent", "startcolorset", "startcolumns", "startcolumnspan", "startcom", "startcombination", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startembeddedxtable", "startembeddedxtable", "startendnote", "startendnote", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfarbe", "startfarbe", "startfarbe", "startfigure", "startfiguretext", "startfittingpage", "startfloatcombination", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startframedcontent", "startframedtext", "startfrontmatter", "startfussnote", "startfussnote", "startgeg", "startgot", "startgraphictext", "startgridsnapping", "startgridsnapping", "starthboxestohbox", "starthelptext", "starthiding", "starthighlight", "starthintergrund", "starthintergrund", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteraction", "startinteraktionsmenue", "startinterface", "startintermezzotext", "startintertext", "startitemgroup", "startitemize", "startkleinerdurchschuss", "startknockout", "startkomponente", "startkomponente", "startkopf", "startlabeltext", "startlayout", "startlegend", "startlinealignment", "startlinecorrection", "startlinenote", "startlinenumbering", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlinksbuendig", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startluasetups", "startmakeup", "startmarginallinie", "startmarginallinie", "startmarginblock", "startmarkedcontent", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmiddlealigned", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrow", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnop", "startnotallmodes", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplacegraphic", "startplaceintermezzo", "startplacepairedbox", "startplacetable", "startplatziereformel", "startplatziereformel", "startplatzierelegende", "startpos", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprodukt", "startprojekt", "startprojekt", "startprotect", "startprotectedcolors", "startpsh", "startpublikation", "startpunctuation", "startrandomized", "startrandomseed", "startraw", "startrawsetups", "startrawsetups", "startreadingfile", "startrechtsbuendig", "startreferenceprefix", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startrob", "startrul", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspecialitem", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startstyle", "startsubformulas", "startsubject", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttable", "starttablehead", "starttables", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexcode", "starttexdefinition", "starttext", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextlinie", "starttitle", "starttokens", "starttxt", "starttypescript", "starttypescriptcollection", "starttyping", "starttyping", "startueberschrifttext", "startumgebung", "startumgebung", "startumrahmt", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startxcell", "startxcellgroup", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtable", "startxtablebody", "startxtablebody", "startxtablefoot", "startxtablefoot", "startxtablehead", "startxtablehead", "startxtablenext", "startxtablenext", "startzeile", "startzentriert", "startzitat", "startzitieren", "startzu", "stelleabsaetzeein", "stelleabsaetzeein", "stelleabsatznummerierungein", "stelleabschnittsblockein", "stelleanordnenein", "stelleausrichtungein", "stelleausschnittein", "stellebeschriftungein", "stellebildunterschriftein", "stellebindestrichein", "stelleblankoein", "stelleblockein", "stelledrehenein", "stelleduennerumrissein", "stelleeinziehenein", "stelleengerein", "stellefarbeein", "stellefarbenein", "stellefeldein", "stellefelderin", "stellefliesstextein", "stellefusszeileein", "stellefusszeilentextein", "stellegefuelltesrechteckein", "stellegefuelltezeileein", "stellegegenueberplatzierenein", "stellegleitobjektein", "stellehintergruendeein", "stellehintergruendeein", "stellehintergrundein", "stelleinteraktionein", "stelleinteraktionein", "stelleinteraktionsbalkenein", "stelleinteraktionsbildschirmein", "stelleinteraktionsmenueein", "stellekommentarein", "stellekopfzahlein", "stellekopfzeileein", "stellekopfzeilentextein", "stellelabeltextein", "stellelayoutein", "stellelayoutein", "stellelegendeein", "stellelinienbreiteein", "stellelisteein", "stellemarginallinieein", "stellenobenein", "stellepaletteein", "stellepapierformatein", "stellepapierformatein", "stelleplatziegeteiltegleitobjekt", "stellepositionierenein", "stellepostenein", "stelleprogrammein", "stellepufferein", "stellerechteckein", "stellereferenzierenein", "stelleregisterein", "stelleregisterein", "stelleseitenkommentarein", "stelleseitennummerein", "stelleseitennummeriernungein", "stelleseitenuebergangein", "stellesortierenein", "stellespaltenein", "stellespatiumein", "stellespracheein", "stellesymbolsetein", "stellesynonymein", "stelletabellenein", "stelletabulatorein", "stelletextein", "stelletextobenein", "stelletexttexteein", "stelletextumrissein", "stelletextuntenein", "stelletipein", "stelletippenein", "stelletoleranzein", "stelleueberschriftein", "stelleueberschrifttextein", "stelleumbruchein", "stelleumrahmtein", "stelleuntenein", "stelleunterseitennummerein", "stelleurlein", "stelleversalienein", "stellezeilenabstandein", "stellezeilenabstandein", "stellezeilenabstandein", "stellezeilenabstandein", "stellezeilenabstandein", "stellezeilenabstandein", "stellezeilenein", "stellezeilennumerierungein", "stellezitierenein", "stellezusammengestelltelisteein", "stellezwischenraumein", "stopJScode", "stopJSpreamble", "stopLUA", "stopLUA", "stopMP", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopPARSEDXML", "stopTABLE", "stopTABLE", "stopTABLEbody", "stopTABLEbody", "stopTABLEfoot", "stopTABLEfoot", "stopTABLEhead", "stopTABLEhead", "stopTABLEnext", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopXML", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopattachment", "stopbackmatter", "stopbar", "stopbar", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopbuffer", "stopbut", "stopcases", "stopcatcodetable", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolorintent", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcom", "stopcombination", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopembeddedxtable", "stopembeddedxtable", "stopendnote", "stopendnote", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfarbe", "stopfarbe", "stopfarbe", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfloatcombination", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopframedcontent", "stopframedtext", "stopfrontmatter", "stopfussnote", "stopfussnote", "stopgeg", "stopgot", "stopgraphictext", "stopgridsnapping", "stopgridsnapping", "stophboxestohbox", "stophelptext", "stophiding", "stophighlight", "stophintergrund", "stophintergrund", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteraction", "stopinteraktionsmenue", "stopinterface", "stopintermezzotext", "stopintertext", "stopitemgroup", "stopitemize", "stopkleinerdurchschuss", "stopknockout", "stopkomponente", "stopkomponente", "stopkopf", "stoplabeltext", "stoplayout", "stoplegend", "stoplinealignment", "stoplinecorrection", "stoplinenote", "stoplinenumbering", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplinksbuendig", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopluasetups", "stopmakeup", "stopmarginallinie", "stopmarginallinie", "stopmarginblock", "stopmarkedcontent", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmiddlealigned", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrow", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnop", "stopnotallmodes", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplacegraphic", "stopplaceintermezzo", "stopplacepairedbox", "stopplacetable", "stopplatziereformel", "stopplatziereformel", "stopplatzierelegende", "stoppos", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprodukt", "stopprojekt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppsh", "stoppublikation", "stoppunctuation", "stoprandomized", "stoprandomseed", "stopraw", "stoprawsetups", "stoprawsetups", "stopreadingfile", "stoprechtsbuendig", "stopreferenceprefix", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stoprob", "stoprul", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspecialitem", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopstyle", "stopsubformulas", "stopsubject", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptable", "stoptablehead", "stoptables", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexcode", "stoptexdefinition", "stoptext", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextlinie", "stoptitle", "stoptokens", "stoptxt", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stoptyping", "stopueberschrifttext", "stopumgebung", "stopumgebung", "stopumrahmt", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopxcell", "stopxcellgroup", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtable", "stopxtablebody", "stopxtablebody", "stopxtablefoot", "stopxtablefoot", "stopxtablehead", "stopxtablehead", "stopxtablenext", "stopxtablenext", "stopzeile", "stopzentriert", "stopzitat", "stopzitieren", "stopzu", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "sym", "symbol", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "teilegleitobjekt", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "textlinie", "textmath", "textminus", "textormathchar", "textplus", "textreferenz", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tief", "tightlayer", "tiho", "tilde", "tinyfont", "tip", "tip", "tippedatei", "tippen", "tippen", "tippepuffer", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "tooltip", "tooltip", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "ueber", "ueberschrifttext", "uebersetzten", "uedcatcodecommand", "umgebung", "umgebung", "umrahmt", "unbekant", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "vec", "verbatim", "verbatimstring", "verbergebloecke", "verbosenumber", "vergleichefarbengruppe", "vergleichepalette", "version", "verticalgrowingbar", "verticalpositionbar", "verwendeJSscript", "verwendeURL", "verwendebloecke", "verwendeexteresdokument", "verwendeexterneabbildung", "verwendeexternestonstueck", "verwendemodul", "verwendesymbole", "verwendeurl", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "volleswort", "von", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "waehlebloeckeaus", "wdofstring", "wechselezumfliesstext", "widthofstring", "widthspanningtext", "withoutpt", "wochentag", "word", "words", "wordtonumber", "wortrechts", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "zeigedruck", "zeigeeinstellungen", "zeigefarbe", "zeigefarbengruppe", "zeigefliesstext", "zeigefliesstextumgebung", "zeigegitter", "zeigelayout", "zeigepalette", "zeigerahmen", "zeigestruts", "zeigeumbruch", "zentriert", "ziffern", "zitat", "zitieren", "zu", "zurbox", "zurseite" },
+ ["en"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Cap", "Caps", "Character", "Characters", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTH", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Numbers", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "Romannumerals", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "activatespacehandler", "acute", "adaptcollector", "adaptlayout", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "at", "atleftmargin", "atpage", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "background", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blackrule", "blackrules", "blank", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "but", "but", "button", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "character", "characters", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonefield", "collect", "collectedtext", "collectexpanded", "color", "colorbar", "colorcomponents", "colored", "colored", "colorvalue", "column", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparecolorgroup", "comparedimension", "comparedimensioneps", "comparepalet", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completepagenumber", "completeregister", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "component", "component", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertnumber", "convertvalue", "convertvboxtohbox", "copybtxlabeltext", "copyfield", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "correctwhitespace", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentdate", "currentenvironment", "currentfeaturetest", "currentheadnumber", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "datasetvariable", "date", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "define", "defineMPinstance", "defineTABLEsetup", "defineaccent", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "defineblock", "definebodyfont", "definebodyfont", "definebodyfontenvironment", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebuffer", "definebutton", "definecapitals", "definecharacter", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolor", "definecolor", "definecolorgroup", "definecolumnbreak", "definecombination", "definecombinedlist", "definecommand", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversion", "defineconversion", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedescription", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefield", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefieldstack", "definefiguresymbol", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefloat", "definefloat", "definefont", "definefont", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "definefontstyle", "definefontsynonym", "defineformula", "defineformulaalternative", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "definehbox", "definehead", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinteractionmenu", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabel", "definelabelclass", "definelayer", "definelayerpreset", "definelayerpreset", "definelayout", "definelinenote", "definelinenumbering", "definelines", "definelist", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemakeup", "definemarginblock", "definemargindata", "definemarker", "definemarking", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "defineoverlay", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "definepalet", "definepalet", "definepapersize", "definepapersize", "defineparagraph", "defineparagraphs", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "defineprofile", "defineprogram", "definepushbutton", "definepushsymbol", "definereference", "definereferenceformat", "defineregister", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesection", "definesectionblock", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definesorting", "definespotcolor", "definestartstop", "definestyle", "definestyleinstance", "definesubfield", "definesubformula", "definesymbol", "definesynonym", "definesynonyms", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabletemplate", "definetabulate", "definetabulation", "definetext", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "definetyping", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determineheadnumber", "determinelistcharacteristics", "determinenoflines", "determineregistercharacteristics", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "eTeX", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "environment", "environment", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigure", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "field", "fieldbody", "fieldstack", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "fillinline", "fillinrules", "fillintext", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfield", "fitfieldframed", "fittopbaselinegrid", "fixedspace", "fixedspaces", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnote", "footnote", "footnotetext", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "formulanumber", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "framed", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "from", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbuffer", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmarking", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "godown", "got", "goto", "gotobox", "gotopage", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "graycolor", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairline", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "head", "headhbox", "headlanguage", "headnumber", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtext", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "hideblocks", "high", "highlight", "highordinalstr", "hilo", "himilo", "hl", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impliedby", "implies", "in", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inleft", "inleftedge", "inleftmargin", "inline", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "inmargin", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inright", "inrightedge", "inrightmargin", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installlanguage", "installlanguage", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "interactionbar", "interactionbuttons", "interactionmenu", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "item", "items", "itemtag", "itm", "its", "jobfilename", "jobfilesuffix", "kap", "keepblocks", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "labellanguage", "labeltext", "labeltexts", "language", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftaligned", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "linethickness", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listlength", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lohi", "lomihi", "low", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "maframed", "mainlanguage", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "margindata", "margintext", "margintitle", "marginword", "markcontent", "marking", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematics", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "menubutton", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "midaligned", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mirror", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "month", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocap", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noheaderandfooterlines", "noindentation", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nospace", "note", "notesymbol", "notopandbottomlines", "notragged", "ntimes", "numberofpoints", "numbers", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "page", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagenumber", "pagereference", "pagestaterealpage", "paletsize", "part", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periods", "periods", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebookmarks", "placebtxrendering", "placechemical", "placecitation", "placecombinedlist", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatwithsetups", "placefootnotes", "placeformula", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelegend", "placelist", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalfootnotes", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placeongrid", "placeongrid", "placeontopofeachother", "placepagenumber", "placepairedbox", "placeparallel", "placerawlist", "placeregister", "placerenderingwindow", "placesidebyside", "placesubformula", "placetable", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processblocks", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "product", "product", "profiledbox", "profilegivenbox", "program", "project", "project", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "quotation", "quote", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "reference", "referenceprefix", "referring", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "remark", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmarking", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightaligned", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "romannumerals", "rotate", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scale", "screen", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "select", "selectblocks", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settextcontent", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupalign", "setuparranging", "setupattachment", "setupbackend", "setupbackground", "setupbackgrounds", "setupbackgrounds", "setupbar", "setupblackrules", "setupblank", "setupbleeding", "setupblock", "setupbodyfont", "setupbookmark", "setupbottom", "setupbottomtexts", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbuffer", "setupbutton", "setupcapitals", "setupcaption", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupclipping", "setupcollector", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnspan", "setupcombination", "setupcombinedlist", "setupcomment", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfield", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfields", "setupfieldtotalframed", "setupfiller", "setupfillinlines", "setupfillinrules", "setupfirstline", "setupfittingpage", "setupfloat", "setupfloatcaption", "setupfloatsplitting", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupfooter", "setupfootertexts", "setupforms", "setupformula", "setupframed", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setuphead", "setupheadalternative", "setupheader", "setupheadertexts", "setupheadnumber", "setupheadtext", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupindex", "setupinitial", "setupinsertion", "setupinteraction", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupinterlinespace", "setupinterlinespace", "setupinterlinespace", "setupinterlinespace", "setupinterlinespace", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setupitems", "setuplabel", "setuplabeltext", "setuplanguage", "setuplayer", "setuplayeredtext", "setuplayout", "setuplayout", "setuplayouttext", "setuplegend", "setuplinenote", "setuplinenumbering", "setuplines", "setuplinetable", "setuplinewidth", "setuplist", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmakeup", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmarginrules", "setupmarking", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnarrower", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoppositeplacing", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagecomment", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppagenumber", "setuppagenumbering", "setuppageshift", "setuppagestate", "setuppagetransitions", "setuppairedbox", "setuppalet", "setuppaper", "setuppapersize", "setuppapersize", "setupparagraph", "setupparagraphintro", "setupparagraphnumbering", "setupparagraphs", "setupparagraphs", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setuppositioning", "setupprefixtext", "setupprocessor", "setupprofile", "setupprograms", "setupquotation", "setupquote", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupreferencing", "setupregister", "setupregister", "setuprenderingwindow", "setuprotate", "setups", "setups", "setupscale", "setupscript", "setupsectionblock", "setupselector", "setupshift", "setupsidebar", "setupsorting", "setupspacing", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setupsubpagenumber", "setupsymbolset", "setupsynonyms", "setuptables", "setuptabulate", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptext", "setuptextbackground", "setuptextflow", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptooltip", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunit", "setupunittext", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwhitespace", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showbodyfont", "showbodyfontenvironment", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolor", "showcolorbar", "showcolorcomponents", "showcolorgroup", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showframe", "showglyphs", "showgrid", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayout", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmakeup", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showpalet", "showparentchain", "showprint", "showsetups", "showsetupsdefinition", "showstruts", "showsymbolset", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "someline", "somelocalfloat", "somenamedheadnumber", "someplace", "somewhere", "space", "spanishNumerals", "spanishnumerals", "speech", "splitdfrac", "splitfilename", "splitfloat", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startLUA", "startLUA", "startMP", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startPARSEDXML", "startTABLE", "startTABLE", "startTABLEbody", "startTABLEbody", "startTABLEfoot", "startTABLEfoot", "startTABLEhead", "startTABLEhead", "startTABLEnext", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startXML", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startattachment", "startbackground", "startbackground", "startbackmatter", "startbar", "startbar", "startbitmapimage", "startblockquote", "startbodymatter", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startbuffer", "startbut", "startcases", "startcatcodetable", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcollect", "startcollecting", "startcolor", "startcolor", "startcolor", "startcolorintent", "startcolorset", "startcolumns", "startcolumnspan", "startcom", "startcombination", "startcombination", "startcomment", "startcomponent", "startcomponent", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startembeddedxtable", "startembeddedxtable", "startendnote", "startendnote", "startendofline", "startenvironment", "startenvironment", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfact", "startfigure", "startfiguretext", "startfittingpage", "startfloatcombination", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startfootnote", "startfootnote", "startformula", "startformulas", "startframed", "startframedcontent", "startframedtext", "startfrontmatter", "startgot", "startgoto", "startgraphictext", "startgridsnapping", "startgridsnapping", "starthboxestohbox", "starthead", "startheadtext", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteraction", "startinteractionmenu", "startinterface", "startintermezzotext", "startintertext", "startitem", "startitemgroup", "startitemize", "startknockout", "startlabeltext", "startlayout", "startleftaligned", "startlegend", "startline", "startlinealignment", "startlinecorrection", "startlinenote", "startlinenumbering", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startluasetups", "startmakeup", "startmarginblock", "startmarginrule", "startmarginrule", "startmarkedcontent", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmidaligned", "startmiddlealigned", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrow", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnop", "startnotallmodes", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpacked", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplaceformula", "startplaceformula", "startplacegraphic", "startplaceintermezzo", "startplacelegend", "startplacepairedbox", "startplacetable", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startproduct", "startproduct", "startproject", "startproject", "startprotect", "startprotectedcolors", "startpsh", "startpublication", "startpunctuation", "startquotation", "startquote", "startrandomized", "startrandomseed", "startraw", "startrawsetups", "startrawsetups", "startreadingfile", "startreferenceprefix", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startrightaligned", "startrob", "startrul", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspecialitem", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startstyle", "startsubformulas", "startsubject", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttable", "starttablehead", "starttables", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexcode", "starttexdefinition", "starttext", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextrule", "starttitle", "starttokens", "starttxt", "starttypescript", "starttypescriptcollection", "starttyping", "starttyping", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startxcell", "startxcellgroup", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtable", "startxtablebody", "startxtablebody", "startxtablefoot", "startxtablefoot", "startxtablehead", "startxtablehead", "startxtablenext", "startxtablenext", "stopJScode", "stopJSpreamble", "stopLUA", "stopLUA", "stopMP", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopPARSEDXML", "stopTABLE", "stopTABLE", "stopTABLEbody", "stopTABLEbody", "stopTABLEfoot", "stopTABLEfoot", "stopTABLEhead", "stopTABLEhead", "stopTABLEnext", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopXML", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopattachment", "stopbackground", "stopbackground", "stopbackmatter", "stopbar", "stopbar", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopbuffer", "stopbut", "stopcases", "stopcatcodetable", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcollect", "stopcollecting", "stopcolor", "stopcolor", "stopcolor", "stopcolorintent", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcom", "stopcombination", "stopcombination", "stopcomment", "stopcomponent", "stopcomponent", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopembeddedxtable", "stopembeddedxtable", "stopendnote", "stopendnote", "stopendofline", "stopenvironment", "stopenvironment", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfact", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfloatcombination", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopfootnote", "stopfootnote", "stopformula", "stopformulas", "stopframed", "stopframedcontent", "stopframedtext", "stopfrontmatter", "stopgot", "stopgoto", "stopgraphictext", "stopgridsnapping", "stopgridsnapping", "stophboxestohbox", "stophead", "stopheadtext", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteraction", "stopinteractionmenu", "stopinterface", "stopintermezzotext", "stopintertext", "stopitem", "stopitemgroup", "stopitemize", "stopknockout", "stoplabeltext", "stoplayout", "stopleftaligned", "stoplegend", "stopline", "stoplinealignment", "stoplinecorrection", "stoplinenote", "stoplinenumbering", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmarginrule", "stopmarkedcontent", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmidaligned", "stopmiddlealigned", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrow", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnop", "stopnotallmodes", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppacked", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplaceformula", "stopplaceformula", "stopplacegraphic", "stopplaceintermezzo", "stopplacelegend", "stopplacepairedbox", "stopplacetable", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopproduct", "stopproduct", "stopproject", "stopproject", "stopprotect", "stopprotectedcolors", "stoppsh", "stoppublication", "stoppunctuation", "stopquotation", "stopquote", "stoprandomized", "stoprandomseed", "stopraw", "stoprawsetups", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stoprightaligned", "stoprob", "stoprul", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspecialitem", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopstyle", "stopsubformulas", "stopsubject", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptable", "stoptablehead", "stoptables", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexcode", "stoptexdefinition", "stoptext", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextrule", "stoptitle", "stoptokens", "stoptxt", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stoptyping", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopxcell", "stopxcellgroup", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtable", "stopxtablebody", "stopxtablebody", "stopxtablefoot", "stopxtablefoot", "stopxtablehead", "stopxtablehead", "stopxtablenext", "stopxtablenext", "stretched", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtobodyfont", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "sym", "symbol", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textreference", "textrule", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinrule", "thinrules", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "tooltip", "tooltip", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "translate", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "type", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unknown", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useJSscripts", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useURL", "usealignparameter", "useblocks", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedirectory", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternaldocument", "useexternalfigure", "useexternalrendering", "useexternalsoundtrack", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "usemodule", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usesymbols", "usetexmodule", "usetypescript", "usetypescriptfile", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekday", "widthofstring", "widthspanningtext", "withoutpt", "word", "wordright", "words", "wordtonumber", "writebetweenlist", "writedatatolist", "writestatus", "writetolist", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos" },
+ ["fr"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Cap", "Caps", "Caractere", "Caracteres", "Chiffresromains", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "JOURSEMAINE", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MOIS", "MONTHLONG", "MONTHSHORT", "MOT", "MOTS", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "Mot", "Mots", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Numeros", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "a", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adaptedisposition", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "ajustechamp", "alaligne", "alapage", "alignbottom", "aligneadroite", "aligneagauche", "aligneaumilieu", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "arriereplan", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "atleftmargin", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "baha", "bar", "barrecouleur", "barreinteraction", "bas", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "bouton", "boutonmenu", "boutonmenu", "boutonsinteraction", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "but", "but", "cacheblocs", "calligraphic", "camel", "cap", "caractere", "caracteres", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "champ", "changepolicecorps", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chiffresromains", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "citer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonechamp", "collect", "collectedtext", "collectexpanded", "colonne", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commentaire", "comparedimension", "comparedimensioneps", "comparegroupecouleur", "comparepalette", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completenumeropage", "completeregistre", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "composant", "composant", "composedcollector", "composedlayer", "compresult", "concernant", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertitnumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copitchamp", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "corrigeespaceblanc", "couleur", "couleurgrise", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "dactylographier", "dactylographier", "dans", "dansborddroit", "dansbordgauche", "dansdroite", "dansgauche", "dansmarge", "dansmargedroite", "dansmargegauche", "datasetvariable", "date", "datecourante", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "de", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecombination", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframed", "defineframedcontent", "defineframedtext", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayerpreset", "definelayerpreset", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "definicaractere", "definit", "definitaccent", "definitbloc", "definitblocsection", "definitbuffer", "definitcalque", "definitchamp", "definitcommande", "definitconversion", "definitconversion", "definitcouleur", "definitcouleur", "definitdactylo", "definitdemarrestoppe", "definitdescription", "definitdisposition", "definitenvironnementpolicecorps", "definitetiquette", "definitflottant", "definitflottant", "definitformatreference", "definitgroupecouleur", "definithbox", "definitliste", "definitlisteimbriquee", "definitmakeup", "definitmarquage", "definitmenuinteraction", "definitpalette", "definitpalette", "definitparagraphes", "definitpilechamp", "definitpolice", "definitpolice", "definitpolicecorps", "definitpolicecorps", "definitprofil", "definitprogramme", "definitreference", "definitregistre", "definitrevetement", "definitsautdecolonne", "definitsautdepage", "definitsection", "definitsouschamp", "definitstyle", "definitstylepolice", "definitsymbole", "definitsymbolefigure", "definitsynonymepolice", "definitsynonymes", "definittabulation", "definittaillepapier", "definittaillepapier", "definittete", "definittexte", "definittrametableau", "definittri", "definittype", "definitvide", "delimited", "delimitedtext", "demarreJScode", "demarreJSpreamble", "demarreLUA", "demarreLUA", "demarreMP", "demarreMP", "demarreMPclip", "demarreMPcode", "demarreMPdefinitions", "demarreMPdrawing", "demarreMPdrawing", "demarreMPenvironment", "demarreMPextensions", "demarreMPinclusions", "demarreMPinitializations", "demarreMPpage", "demarreMPpositiongraphic", "demarreMPpositionmethod", "demarreMPrun", "demarrePARSEDXML", "demarrePARSEDXML", "demarreTABLE", "demarreTABLE", "demarreTABLEbody", "demarreTABLEbody", "demarreTABLEfoot", "demarreTABLEfoot", "demarreTABLEhead", "demarreTABLEhead", "demarreTABLEnext", "demarreTABLEnext", "demarreTC", "demarreTD", "demarreTDs", "demarreTEX", "demarreTEX", "demarreTEXpage", "demarreTH", "demarreTN", "demarreTR", "demarreTRs", "demarreTX", "demarreTY", "demarreXML", "demarreXML", "demarrealign", "demarrealigneadroite", "demarrealigneagauche", "demarrealigneaumilieu", "demarrealignment", "demarreallmodes", "demarreappendices", "demarrearrangedpages", "demarrearriereplan", "demarrearriereplan", "demarreattachment", "demarrebackmatter", "demarrebar", "demarrebar", "demarrebitmapimage", "demarreblockquote", "demarrebodymatter", "demarreboxedcolumns", "demarrebtxlabeltext", "demarrebtxrenderingdefinitions", "demarrebuffer", "demarrebuffer", "demarrebut", "demarrecases", "demarrecatcodetable", "demarrecatcodetable", "demarrecenteraligned", "demarrechapter", "demarrecharacteralign", "demarrecheckedfences", "demarrechemical", "demarrecitation", "demarreciter", "demarreciter", "demarrecollect", "demarrecollecting", "demarrecolorintent", "demarrecolorset", "demarrecolumns", "demarrecolumnspan", "demarrecom", "demarrecombination", "demarrecombination", "demarrecomment", "demarrecomposant", "demarrecomposant", "demarrecontextcode", "demarrecontextdefinitioncode", "demarrecouleur", "demarrecouleur", "demarrecouleur", "demarrectxfunction", "demarrectxfunctiondefinition", "demarrecurrentcolor", "demarrecurrentlistentrywrapper", "demarredelimited", "demarredelimitedtext", "demarredisplaymath", "demarredmath", "demarredocument", "demarreeffect", "demarreelement", "demarreembeddedxtable", "demarreembeddedxtable", "demarreendnote", "demarreendnote", "demarreendofline", "demarreenvironement", "demarreenvironement", "demarreexceptions", "demarreexpanded", "demarreexpandedcollect", "demarreextendedcatcodetable", "demarreexternalfigurecollection", "demarrefait", "demarrefigure", "demarrefiguretext", "demarrefittingpage", "demarrefloatcombination", "demarrefloatcombination", "demarrefont", "demarrefontclass", "demarrefontsolution", "demarreformula", "demarreformulas", "demarreframed", "demarreframedcontent", "demarreframedtext", "demarrefrontmatter", "demarregot", "demarregraphictext", "demarregridsnapping", "demarregridsnapping", "demarregroupe", "demarrehboxestohbox", "demarrehelptext", "demarrehiding", "demarrehighlight", "demarrehyphenation", "demarreimath", "demarreindentation", "demarreindentedtext", "demarreinteraction", "demarreinterface", "demarreintermezzotext", "demarreintertext", "demarreitemgroup", "demarreitemize", "demarreknockout", "demarrelabeltexte", "demarrelayout", "demarrelegend", "demarreligne", "demarreligneregleetexte", "demarrelinealignment", "demarrelinecorrection", "demarrelinenumbering", "demarrelinenumbering", "demarrelines", "demarrelinetable", "demarrelinetablebody", "demarrelinetablecell", "demarrelinetablehead", "demarrelocalfootnotes", "demarrelocalheadsetup", "demarrelocallinecorrection", "demarrelocalnotes", "demarrelocalsetups", "demarrelocalsetups", "demarrelua", "demarreluacode", "demarreluaparameterset", "demarreluasetups", "demarreluasetups", "demarremakeup", "demarremargereglee", "demarremargereglee", "demarremarginblock", "demarremarkedcontent", "demarremathalignment", "demarremathcases", "demarremathlabeltext", "demarremathmatrix", "demarremathmode", "demarremathstyle", "demarremathstyle", "demarrematrices", "demarrematrix", "demarremaxaligned", "demarremdformula", "demarremenuinteraction", "demarremiddlealigned", "demarremixedcolumns", "demarremode", "demarremodeset", "demarremodule", "demarremodule", "demarremoduletestsection", "demarrempformula", "demarrenamedsection", "demarrenamedsubformulas", "demarrenarrow", "demarrenarrow", "demarrenarrow", "demarrenarrower", "demarrenegative", "demarrenicelyfilledbox", "demarrenointerference", "demarrenop", "demarrenotallmodes", "demarrenotepdp", "demarrenotepdp", "demarrenotext", "demarrenotmode", "demarreoperatortext", "demarreopposite", "demarreoutputstream", "demarreoverlay", "demarreoverprint", "demarrepagecomment", "demarrepagefigure", "demarrepagegrid", "demarrepagegridspan", "demarrepagelayout", "demarrepar", "demarrepar", "demarreparagraph", "demarreparagraphs", "demarreparagraphscell", "demarreparbuilder", "demarrepart", "demarrepath", "demarreplacechemical", "demarreplacefigure", "demarreplaceflottant", "demarreplaceformule", "demarreplaceformule", "demarreplacegraphic", "demarreplaceintermezzo", "demarreplacelegende", "demarreplacepairedbox", "demarreplacetable", "demarrepositioning", "demarrepositionoverlay", "demarrepositive", "demarrepostponing", "demarreprefixtext", "demarreprocessassignmentcommand", "demarreprocessassignmentlist", "demarreprocesscommacommand", "demarreprocesscommalist", "demarreproduit", "demarreproduit", "demarreprojet", "demarreprojet", "demarreprotect", "demarreprotectedcolors", "demarrepsh", "demarrepublication", "demarrepunctuation", "demarrerandomized", "demarrerandomseed", "demarreraw", "demarrerawsetups", "demarrerawsetups", "demarrereadingfile", "demarrereferenceprefix", "demarrereferenceprefix", "demarreregime", "demarrereusableMPgraphic", "demarrerob", "demarrerul", "demarrescript", "demarresdformula", "demarresection", "demarresectionblock", "demarresectionblockenvironment", "demarresectionlevel", "demarresetups", "demarresetups", "demarreshapebox", "demarreshift", "demarresidebar", "demarresimplecolumns", "demarrespecialitem", "demarrespecialitem", "demarrespecialitem", "demarrespeech", "demarrespformula", "demarrespread", "demarrestartstop", "demarrestaticMPfigure", "demarrestaticMPgraphic", "demarrestrictinspectnextcharacter", "demarrestrut", "demarrestyle", "demarrestyle", "demarresubformulas", "demarresubject", "demarresubsection", "demarresubsentence", "demarresubstack", "demarresubsubject", "demarresubsubsection", "demarresubsubsubject", "demarresubsubsubsection", "demarresubsubsubsubject", "demarresubsubsubsubsection", "demarresubsubsubsubsubject", "demarresymbolset", "demarretable", "demarretable", "demarretablehead", "demarretables", "demarretables", "demarretabletail", "demarretabletext", "demarretabulate", "demarretabulatehead", "demarretabulatetail", "demarretagged", "demarretaglabeltext", "demarretete", "demarretexcode", "demarretexcode", "demarretexdefinition", "demarretext", "demarretext", "demarretextbackground", "demarretextbackgroundmanual", "demarretextcolor", "demarretextcolorintent", "demarretextetete", "demarretextflow", "demarretitle", "demarretokens", "demarretxt", "demarretypescript", "demarretypescriptcollection", "demarretyping", "demarretyping", "demarreuniqueMPgraphic", "demarreuniqueMPpagegraphic", "demarreunittext", "demarreunpacked", "demarreusableMPgraphic", "demarreuseMPgraphic", "demarreusemathstyleparameter", "demarreusingbtxspecification", "demarreva", "demarrevboxtohbox", "demarrevboxtohboxseparator", "demarreviewerlayer", "demarrexcell", "demarrexcellgroup", "demarrexgroup", "demarrexmldisplayverbatim", "demarrexmlinlineverbatim", "demarrexmlraw", "demarrexmlsetups", "demarrexmlsetups", "demarrexrow", "demarrexrowgroup", "demarrextable", "demarrextable", "demarrextablebody", "demarrextablebody", "demarrextablefoot", "demarrextablefoot", "demarrextablehead", "demarrextablehead", "demarrextablenext", "demarrextablenext", "depthofstring", "depthonlybox", "depthspanningtext", "determinecaracteristiqueliste", "determinecaracteristiquesregistre", "determinenoflines", "determinenumerotete", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "eTeX", "echelle", "ecran", "ecritdansliste", "ecritentreliste", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "el", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "elements", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "environement", "environement", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "espace", "espacefixe", "espacesfixes", "ethiopic", "etire", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "faitreference", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fichierdactylo", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figureexterne", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "framed", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gardeblocs", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "grille", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "haut", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impliedby", "implies", "includemenu", "includeversioninfo", "inconnu", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inframed", "infull", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installelangue", "installelangue", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "jobfilename", "jobfilesuffix", "joursemaine", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "labellanguage", "labeltexte", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "langue", "langueprincipale", "largeurligne", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "ligneh", "lignenoire", "ligneregleetexte", "lignesnoires", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "llap", "llongueurliste", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "margindata", "markcontent", "markinjector", "marquage", "marquepage", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathematique", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "menuinteraction", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "mois", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "montrecadre", "montrecouleur", "montredisposition", "montreedition", "montreenvironnementpolicecorps", "montregrille", "montregroupecouleur", "montrejeusymboles", "montremakeup", "montrepalette", "montrepolicecorps", "montrereglages", "montrestruts", "motdroit", "motmarge", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocap", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "note", "notepdp", "notepdp", "notesymbol", "notragged", "ntimes", "numberofpoints", "numeroformule", "numeropage", "numeros", "numerotete", "numerotetecourant", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obtientmarquage", "offset", "offsetbox", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "oriente", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "page", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "paletsize", "part", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periodes", "periodes", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "pilechamp", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecoteacote", "placecurrentformulanumber", "placedbox", "placefigure", "placefloatwithsetups", "placeflottant", "placeformule", "placeframed", "placegraphic", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelegende", "placelesunsaudessusdesautres", "placeliste", "placelisteinmbriquee", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placemarquespages", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placenotespdp", "placenotespdplocales", "placenumeropage", "placenumerotete", "placepairedbox", "placeparallel", "placerawlist", "placeregistre", "placerenderingwindow", "placesousformule", "placesurgrille", "placesurgrille", "placetable", "placetextetete", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prendbuffer", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "produit", "produit", "profiledbox", "profilegivenbox", "programme", "projet", "projet", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qqpart", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "razmarquage", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "reference", "referencepage", "referenceprefix", "referencetexte", "reflete", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "reglealignement", "reglearrangement", "reglearriereplan", "reglearriereplans", "reglearriereplans", "reglebarreinteraction", "reglebloc", "regleblocsection", "reglebuffer", "reglecapitales", "reglechamp", "reglechamps", "regleclipping", "reglecolonnes", "reglecommentaire", "reglecommentairepage", "reglecompoetroite", "reglecomposeenalinea", "reglecouleur", "reglecouleurs", "regledactylo", "regledemarrestoppe", "regledisposition", "regledisposition", "regleecraninteraction", "regleelements", "regleencadre", "regleentete", "regleepaisseurligne", "regleespaceblanc", "regleespacement", "regleespacementinterligne", "regleespacementinterligne", "regleespacementinterligne", "regleespacementinterligne", "regleespacementinterligne", "regleespacementinterligne", "regleflottant", "regleformulaires", "regleinf", "regleinteraction", "regleinteraction", "regleintitule", "reglejeusymboles", "reglelabeltexte", "reglelangue", "reglelegende", "reglelignes", "reglelignesnoires", "reglelignesreglestexte", "regleliste", "reglelisteimbriquee", "reglemakeup", "reglemargereglee", "reglemarquage", "reglemarquagehyphenation", "reglemenuinteraction", "reglenumeropage", "reglenumerotationligne", "reglenumerotationpage", "reglenumerotationparagraphe", "reglenumerotete", "regleoriente", "reglepalette", "reglepapier", "regleparagraphes", "regleparagraphes", "reglepdp", "regleplacementopposition", "reglepolicecorps", "reglepositionnement", "regleprogrammes", "reglereferencage", "regleregistre", "regleregistre", "regleremplitligne", "regleremplitlignesreglees", "regleseparationflottant", "reglesousnumeropage", "reglesup", "reglesynonymes", "regletableaux", "regletabulation", "regletaillepapier", "regletaillepapier", "regletete", "regletexte", "regletextesentete", "regletextesinf", "regletextespdp", "regletextessup", "regletextestexte", "regletextetete", "regletolerance", "regletraitsfins", "regletransitionspage", "regletri", "regletype", "regleurl", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "remplitligne", "remplitlignesreglees", "remplittexte", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansespace", "sanslignesenteteetpdp", "sanslignessupetinf", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "select", "selectionneblocs", "separeflottant", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settext", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "sousnumeropage", "spanishNumerals", "spanishnumerals", "speech", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startlinenote", "startregister", "startstructurepageregister", "stoplinenote", "stoppeJScode", "stoppeJSpreamble", "stoppeLUA", "stoppeLUA", "stoppeMP", "stoppeMP", "stoppeMPclip", "stoppeMPcode", "stoppeMPdefinitions", "stoppeMPdrawing", "stoppeMPdrawing", "stoppeMPenvironment", "stoppeMPextensions", "stoppeMPinclusions", "stoppeMPinitializations", "stoppeMPpage", "stoppeMPpositiongraphic", "stoppeMPpositionmethod", "stoppeMPrun", "stoppePARSEDXML", "stoppePARSEDXML", "stoppeTABLE", "stoppeTABLE", "stoppeTABLEbody", "stoppeTABLEbody", "stoppeTABLEfoot", "stoppeTABLEfoot", "stoppeTABLEhead", "stoppeTABLEhead", "stoppeTABLEnext", "stoppeTABLEnext", "stoppeTC", "stoppeTD", "stoppeTDs", "stoppeTEX", "stoppeTEX", "stoppeTEXpage", "stoppeTH", "stoppeTN", "stoppeTR", "stoppeTRs", "stoppeTX", "stoppeTY", "stoppeXML", "stoppeXML", "stoppealign", "stoppealigneadroite", "stoppealigneagauche", "stoppealigneaumilieu", "stoppealignment", "stoppeallmodes", "stoppeappendices", "stoppearrangedpages", "stoppearriereplan", "stoppearriereplan", "stoppeattachment", "stoppebackmatter", "stoppebar", "stoppebar", "stoppebitmapimage", "stoppeblockquote", "stoppebodymatter", "stoppeboxedcolumns", "stoppebtxlabeltext", "stoppebtxrenderingdefinitions", "stoppebuffer", "stoppebuffer", "stoppebut", "stoppecases", "stoppecatcodetable", "stoppecatcodetable", "stoppecenteraligned", "stoppechapter", "stoppecharacteralign", "stoppecheckedfences", "stoppechemical", "stoppecitation", "stoppeciter", "stoppecollect", "stoppecollecting", "stoppecolorintent", "stoppecolorset", "stoppecolumns", "stoppecolumnspan", "stoppecom", "stoppecombination", "stoppecombination", "stoppecomment", "stoppecomposant", "stoppecomposant", "stoppecontextcode", "stoppecontextdefinitioncode", "stoppecouleur", "stoppecouleur", "stoppecouleur", "stoppectxfunction", "stoppectxfunctiondefinition", "stoppecurrentcolor", "stoppecurrentlistentrywrapper", "stoppedelimited", "stoppedelimitedtext", "stoppedisplaymath", "stoppedmath", "stoppedocument", "stoppeeffect", "stoppeelement", "stoppeembeddedxtable", "stoppeembeddedxtable", "stoppeendnote", "stoppeendnote", "stoppeendofline", "stoppeenvironement", "stoppeenvironement", "stoppeexceptions", "stoppeexpanded", "stoppeexpandedcollect", "stoppeextendedcatcodetable", "stoppeexternalfigurecollection", "stoppefait", "stoppefigure", "stoppefiguretext", "stoppefittingpage", "stoppefloatcombination", "stoppefloatcombination", "stoppefont", "stoppefontclass", "stoppefontsolution", "stoppeformula", "stoppeformulas", "stoppeframed", "stoppeframedcontent", "stoppeframedtext", "stoppefrontmatter", "stoppegot", "stoppegraphictext", "stoppegridsnapping", "stoppegridsnapping", "stoppegroupe", "stoppehboxestohbox", "stoppehelptext", "stoppehiding", "stoppehighlight", "stoppehyphenation", "stoppeimath", "stoppeindentation", "stoppeindentedtext", "stoppeinteraction", "stoppeinterface", "stoppeintermezzotext", "stoppeintertext", "stoppeitemgroup", "stoppeitemize", "stoppeknockout", "stoppelabeltexte", "stoppelayout", "stoppelegend", "stoppeligne", "stoppeligneregleetexte", "stoppelinealignment", "stoppelinecorrection", "stoppelinenumbering", "stoppelinenumbering", "stoppelines", "stoppelinetable", "stoppelinetablebody", "stoppelinetablecell", "stoppelinetablehead", "stoppelocalfootnotes", "stoppelocalheadsetup", "stoppelocallinecorrection", "stoppelocalnotes", "stoppelocalsetups", "stoppelocalsetups", "stoppelua", "stoppeluacode", "stoppeluaparameterset", "stoppeluasetups", "stoppeluasetups", "stoppemakeup", "stoppemargereglee", "stoppemargereglee", "stoppemarginblock", "stoppemarkedcontent", "stoppemathalignment", "stoppemathcases", "stoppemathlabeltext", "stoppemathmatrix", "stoppemathmode", "stoppemathstyle", "stoppemathstyle", "stoppematrices", "stoppematrix", "stoppemaxaligned", "stoppemdformula", "stoppemenuinteraction", "stoppemiddlealigned", "stoppemixedcolumns", "stoppemode", "stoppemodeset", "stoppemodule", "stoppemodule", "stoppemoduletestsection", "stoppempformula", "stoppenamedsection", "stoppenamedsubformulas", "stoppenarrow", "stoppenarrow", "stoppenarrow", "stoppenarrower", "stoppenegative", "stoppenicelyfilledbox", "stoppenointerference", "stoppenop", "stoppenotallmodes", "stoppenotepdp", "stoppenotepdp", "stoppenotext", "stoppenotmode", "stoppeoperatortext", "stoppeopposite", "stoppeoutputstream", "stoppeoverlay", "stoppeoverprint", "stoppepagecomment", "stoppepagefigure", "stoppepagegrid", "stoppepagegridspan", "stoppepagelayout", "stoppepar", "stoppepar", "stoppeparagraph", "stoppeparagraphs", "stoppeparagraphscell", "stoppeparbuilder", "stoppepart", "stoppepath", "stoppeplacechemical", "stoppeplacefigure", "stoppeplaceflottant", "stoppeplaceformule", "stoppeplaceformule", "stoppeplacegraphic", "stoppeplaceintermezzo", "stoppeplacelegende", "stoppeplacepairedbox", "stoppeplacetable", "stoppepositioning", "stoppepositionoverlay", "stoppepositive", "stoppepostponing", "stoppeprefixtext", "stoppeprocessassignmentcommand", "stoppeprocessassignmentlist", "stoppeprocesscommacommand", "stoppeprocesscommalist", "stoppeproduit", "stoppeproduit", "stoppeprojet", "stoppeprojet", "stoppeprotect", "stoppeprotectedcolors", "stoppepsh", "stoppepublication", "stoppepunctuation", "stopperandomized", "stopperandomseed", "stopperaw", "stopperawsetups", "stopperawsetups", "stoppereadingfile", "stoppereferenceprefix", "stoppereferenceprefix", "stopperegime", "stoppereusableMPgraphic", "stopperob", "stopperul", "stoppescript", "stoppesdformula", "stoppesection", "stoppesectionblock", "stoppesectionblockenvironment", "stoppesectionlevel", "stoppesetups", "stoppesetups", "stoppeshapebox", "stoppeshift", "stoppesidebar", "stoppesimplecolumns", "stoppespecialitem", "stoppespecialitem", "stoppespecialitem", "stoppespeech", "stoppespformula", "stoppespread", "stoppestartstop", "stoppestaticMPfigure", "stoppestaticMPgraphic", "stoppestrictinspectnextcharacter", "stoppestrut", "stoppestyle", "stoppestyle", "stoppesubformulas", "stoppesubject", "stoppesubsection", "stoppesubsentence", "stoppesubstack", "stoppesubsubject", "stoppesubsubsection", "stoppesubsubsubject", "stoppesubsubsubsection", "stoppesubsubsubsubject", "stoppesubsubsubsubsection", "stoppesubsubsubsubsubject", "stoppesymbolset", "stoppetable", "stoppetable", "stoppetablehead", "stoppetables", "stoppetables", "stoppetabletail", "stoppetabletext", "stoppetabulate", "stoppetabulatehead", "stoppetabulatetail", "stoppetagged", "stoppetaglabeltext", "stoppetete", "stoppetexcode", "stoppetexcode", "stoppetexdefinition", "stoppetext", "stoppetext", "stoppetextbackground", "stoppetextbackgroundmanual", "stoppetextcolor", "stoppetextcolorintent", "stoppetextetete", "stoppetextflow", "stoppetitle", "stoppetokens", "stoppetxt", "stoppetypescript", "stoppetypescriptcollection", "stoppetyping", "stoppetyping", "stoppeuniqueMPgraphic", "stoppeuniqueMPpagegraphic", "stoppeunittext", "stoppeunpacked", "stoppeusableMPgraphic", "stoppeuseMPgraphic", "stoppeusemathstyleparameter", "stoppeusingbtxspecification", "stoppeva", "stoppevboxtohbox", "stoppevboxtohboxseparator", "stoppeviewerlayer", "stoppexcell", "stoppexcellgroup", "stoppexgroup", "stoppexmldisplayverbatim", "stoppexmlinlineverbatim", "stoppexmlraw", "stoppexmlsetups", "stoppexmlsetups", "stoppexrow", "stoppexrowgroup", "stoppextable", "stoppextable", "stoppextablebody", "stoppextablebody", "stoppextablefoot", "stoppextablefoot", "stoppextablehead", "stoppextablehead", "stoppextablenext", "stoppextablenext", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "suggestion", "suggestion", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "sym", "symbole", "symbole", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tapebuffer", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tete", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textemarge", "textenotepdp", "textenotepdp", "textetete", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "titremarge", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduire", "traiteblocs", "traitfin", "traitsfins", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "uneligne", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utiliseJSscripts", "utiliseURL", "utiliseblocs", "utilisechemin", "utilisedocumentexterne", "utilisefigureexterne", "utilisemodule", "utilisepsiteaudioexterne", "utilisesymboles", "utiliseurl", "utilityregisterlength", "va", "vaalaboite", "vaalapage", "vaenbas", "valeurcouleur", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "version", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "vide", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "widthofstring", "widthspanningtext", "withoutpt", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos" },
+ ["it"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Cap", "Caps", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GIORNOSETTIMANA", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "Lettera", "Lettere", "LuaTeX", "LuajitTeX", "MESE", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Numeri", "Numeriromani", "PAROLA", "PAROLE", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "Parola", "Parole", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adaptpapersize", "adattacampo", "adattalayout", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "al", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allineacentro", "allineadestra", "allineasinistra", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ambiente", "ambiente", "ampersand", "anchor", "ap", "apagina", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "atleftmargin", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "barracolori", "barrainterazione", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "calligraphic", "cambiaafontdeltesto", "camel", "campi", "cap", "capello", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chim", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "circondato", "citation", "citation", "citation", "citation", "citazione", "cite", "cite", "cite", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clonacampo", "collect", "collectedtext", "collectexpanded", "colonna", "colorcomponents", "colore", "colored", "colored", "coloregrigio", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "commento", "comparedimension", "comparedimensioneps", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completeregister", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "componenet", "componenet", "composedcollector", "composedlayer", "compresult", "confrontagruppocolori", "confrontatavolozza", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertinumero", "convertmonth", "convertvalue", "convertvboxtohbox", "copiacampo", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "correggispaziobianco", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "da", "daqualcheparte", "data", "datadioggi", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolumnbreak", "definecombination", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayerpreset", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "definisci", "definisciaccento", "definisciambientefontdeltesto", "definisciblocco", "definiscibloccosezione", "definiscibuffer", "definiscicampo", "definiscicapoversi", "definiscicarattere", "definiscicolore", "definiscicolore", "definiscicomando", "definisciconversione", "definisciconversione", "definiscidescrizione", "definiscidimensionicarta", "definiscidimensionicarta", "definiscielenco", "definiscielencocombinato", "definiscietichetta", "definiscifigurasimbolo", "definiscifont", "definiscifont", "definiscifontdeltesto", "definiscifontdeltesto", "definisciformatoriferimento", "definiscigruppocolori", "definiscihbox", "definisciincorniciato", "definisciiniziatermina", "definiscilayout", "definiscimakeup", "definiscimarcatura", "definiscimenuinterazione", "definiscimodellotabella", "definiscioggettomobile", "definiscioggettomobile", "definisciordinamento", "definisciprofilo", "definisciprogramma", "definisciregistro", "definisciriferimento", "definiscisezione", "definiscisimbolo", "definiscisinonimi", "definiscisinonimofont", "definiscisottocampo", "definiscisovrapposizione", "definiscistackcampi", "definiscistile", "definiscistilefont", "definiscitabulato", "definiscitavolozza", "definiscitavolozza", "definiscitesta", "definiscitesto", "definiscitestoincorniciato", "definiscitype", "definiscityping", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinacaratteristicheregistro", "determinacarattersticheelenco", "determinanumerotesta", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "eTeX", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "el", "elaborablocchi", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "elementi", "elemento", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figuraesterna", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fondo", "fondo", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "giornosettimana", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "griglia", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "ignoto", "immediatesavetwopassdata", "impliedby", "implies", "impostaallineamento", "impostaampiezzariga", "impostabarrainterazione", "impostablocco", "impostabloccosezione", "impostabuffer", "impostacampi", "impostacampo", "impostacapoversi", "impostacapoversi", "impostacaption", "impostacima", "impostaclippling", "impostacolonne", "impostacolore", "impostacolori", "impostacommento", "impostacommentopagina", "impostadimensionicarta", "impostadimensionicarta", "impostaelementi", "impostaelenco", "impostaelencocombinato", "impostafondo", "impostafontdeltesto", "impostaforms", "impostaincorniciato", "impostainiziatermina", "impostainstestazione", "impostainterazione", "impostainterazione", "impostainterlinea", "impostainterlinea", "impostainterlinea", "impostainterlinea", "impostainterlinea", "impostainterlinea", "impostalayout", "impostalayout", "impostalegenda", "impostalineemargine", "impostalineenere", "impostalineeriempimento", "impostalineesottili", "impostalineetesto", "impostalingua", "impostamaiuscole", "impostamakeup", "impostamarcatura", "impostamenuinterazione", "impostamenzione", "impostanumerazionecapoversi", "impostanumerazionepagina", "impostanumerazionerighe", "impostanumeropagina", "impostanumerosottopagina", "impostanumerotesta", "impostaoggettomobile", "impostaordinamento", "impostaparranging", "impostapdp", "impostapiustretto", "impostaposizionamento", "impostaposizionamentoopposti", "impostaprogrammi", "impostaregistro", "impostaregistro", "impostarientro", "impostariferimento", "impostarighe", "impostarigheriempimento", "impostarigovuoto", "impostarotazione", "impostaschermointerazione", "impostasegnosillabazione", "impostasetsimboli", "impostasfondi", "impostasfondi", "impostasfondo", "impostasinonimi", "impostaspaziatura", "impostaspaziobianco", "impostaspezzamentooggettomobile", "impostatabelle", "impostatabulato", "impostatavolozza", "impostatesta", "impostatesticima", "impostatestifondo", "impostatestiintestazioni", "impostatestipdp", "impostatesto", "impostatestoetichette", "impostatestointestazioni", "impostatestotesti", "impostatolleranza", "impostatransizionepagina", "impostatype", "impostatyping", "impostaurl", "in", "includemenu", "includeversioninfo", "incorniciato", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "indestra", "index", "index", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "iniziaJScode", "iniziaJSpreamble", "iniziaLUA", "iniziaLUA", "iniziaMP", "iniziaMP", "iniziaMPclip", "iniziaMPcode", "iniziaMPdefinitions", "iniziaMPdrawing", "iniziaMPdrawing", "iniziaMPenvironment", "iniziaMPextensions", "iniziaMPinclusions", "iniziaMPinitializations", "iniziaMPpage", "iniziaMPpositiongraphic", "iniziaMPpositionmethod", "iniziaMPrun", "iniziaPARSEDXML", "iniziaPARSEDXML", "iniziaTABLE", "iniziaTABLE", "iniziaTABLEbody", "iniziaTABLEbody", "iniziaTABLEfoot", "iniziaTABLEfoot", "iniziaTABLEhead", "iniziaTABLEhead", "iniziaTABLEnext", "iniziaTABLEnext", "iniziaTC", "iniziaTD", "iniziaTDs", "iniziaTEX", "iniziaTEX", "iniziaTEXpage", "iniziaTH", "iniziaTN", "iniziaTR", "iniziaTRs", "iniziaTX", "iniziaTY", "iniziaXML", "iniziaXML", "iniziaalign", "iniziaalignment", "iniziaallineacentro", "iniziaallineadestra", "iniziaallineasinistra", "iniziaallmodes", "iniziaambiente", "iniziaambiente", "iniziaappendices", "iniziaarrangedpages", "iniziaattachment", "iniziabackmatter", "iniziabar", "iniziabar", "iniziabitmapimage", "iniziablockquote", "iniziabodymatter", "iniziaboxedcolumns", "iniziabtxlabeltext", "iniziabtxrenderingdefinitions", "iniziabuffer", "iniziabuffer", "iniziacases", "iniziacatcodetable", "iniziacatcodetable", "iniziacenteraligned", "iniziachapter", "iniziacharacteralign", "iniziacheckedfences", "iniziachemical", "iniziacitazione", "iniziacollect", "iniziacollecting", "iniziacolore", "iniziacolore", "iniziacolore", "iniziacolorintent", "iniziacolorset", "iniziacolumns", "iniziacolumnspan", "iniziacom", "iniziacombination", "iniziacombination", "iniziacomment", "iniziacomponenet", "iniziacomponenet", "iniziacontextcode", "iniziacontextdefinitioncode", "iniziactxfunction", "iniziactxfunctiondefinition", "iniziacurrentcolor", "iniziacurrentlistentrywrapper", "iniziadelimited", "iniziadelimitedtext", "iniziadisplaymath", "iniziadmath", "iniziadocument", "iniziaeffect", "iniziaelemento", "iniziaembeddedxtable", "iniziaembeddedxtable", "iniziaendnote", "iniziaendnote", "iniziaendofline", "iniziaexceptions", "iniziaexpanded", "iniziaexpandedcollect", "iniziaextendedcatcodetable", "iniziaexternalfigurecollection", "iniziafatto", "iniziafigure", "iniziafiguretext", "iniziafittingpage", "iniziafloatcombination", "iniziafloatcombination", "iniziafondo", "iniziafont", "iniziafontclass", "iniziafontsolution", "iniziaformula", "iniziaformulas", "iniziaframedcontent", "iniziaframedtext", "iniziafrontmatter", "iniziagot", "iniziagraphictext", "iniziagridsnapping", "iniziagridsnapping", "iniziahboxestohbox", "iniziahelptext", "iniziahiding", "iniziahighlight", "iniziahyphenation", "iniziaimath", "iniziaimpaccato", "iniziaincorniciato", "iniziaindentation", "iniziaindentedtext", "iniziainteraction", "iniziainterface", "iniziaintermezzotext", "iniziaintertext", "iniziaitemgroup", "iniziaitemize", "iniziaknockout", "inizialayout", "inizialegend", "inizialinealignment", "inizialineamargine", "inizialineamargine", "inizialineatesto", "inizialinecorrection", "inizialinenumbering", "inizialinenumbering", "inizialines", "inizialinetable", "inizialinetablebody", "inizialinetablecell", "inizialinetablehead", "inizialocalfootnotes", "inizialocalheadsetup", "inizialocallinecorrection", "inizialocalnotes", "inizialocalsetups", "inizialocalsetups", "inizialua", "inizialuacode", "inizialuaparameterset", "inizialuasetups", "inizialuasetups", "iniziamakeup", "iniziamarginblock", "iniziamarkedcontent", "iniziamathalignment", "iniziamathcases", "iniziamathlabeltext", "iniziamathmatrix", "iniziamathmode", "iniziamathstyle", "iniziamathstyle", "iniziamatrices", "iniziamatrix", "iniziamaxaligned", "iniziamdformula", "iniziamenuinterattivo", "iniziamenzione", "iniziamettiformula", "iniziamettiformula", "iniziamettilegenda", "iniziamiddlealigned", "iniziamixedcolumns", "iniziamode", "iniziamodeset", "iniziamodule", "iniziamodule", "iniziamoduletestsection", "iniziampformula", "inizianamedsection", "inizianamedsubformulas", "inizianarrow", "inizianarrow", "inizianarrow", "inizianarrower", "inizianegative", "inizianicelyfilledbox", "inizianointerference", "inizianop", "inizianotallmodes", "inizianotapdp", "inizianotapdp", "inizianotext", "inizianotmode", "iniziaoperatortext", "iniziaopposite", "iniziaoutputstream", "iniziaoverlay", "iniziaoverprint", "iniziapagecomment", "iniziapagefigure", "iniziapagegrid", "iniziapagegridspan", "iniziapagelayout", "iniziapar", "iniziapar", "iniziaparagraph", "iniziaparagraphs", "iniziaparagraphscell", "iniziaparbuilder", "iniziapart", "iniziapath", "iniziaplacechemical", "iniziaplacefigure", "iniziaplacefloat", "iniziaplacegraphic", "iniziaplaceintermezzo", "iniziaplacepairedbox", "iniziaplacetable", "iniziapositioning", "iniziapositionoverlay", "iniziapositive", "iniziapostponing", "iniziaprefixtext", "iniziaprocessassignmentcommand", "iniziaprocessassignmentlist", "iniziaprocesscommacommand", "iniziaprocesscommalist", "iniziaprodotto", "iniziaprodotto", "iniziaprogetto", "iniziaprogetto", "iniziaprotect", "iniziaprotectedcolors", "iniziapsh", "iniziapubblicazione", "iniziapunctuation", "iniziarandomized", "iniziarandomseed", "iniziaraw", "iniziarawsetups", "iniziarawsetups", "iniziareadingfile", "iniziareferenceprefix", "iniziareferenceprefix", "iniziaregime", "iniziareusableMPgraphic", "iniziariga", "iniziarob", "iniziarul", "iniziascript", "iniziasdformula", "iniziasection", "iniziasectionblock", "iniziasectionblockenvironment", "iniziasectionlevel", "iniziasetups", "iniziasetups", "iniziasfondo", "iniziasfondo", "iniziashapebox", "iniziashift", "iniziasidebar", "iniziasimplecolumns", "iniziaspecialitem", "iniziaspecialitem", "iniziaspecialitem", "iniziaspeech", "iniziaspformula", "iniziaspread", "iniziastartstop", "iniziastaticMPfigure", "iniziastaticMPgraphic", "iniziastrictinspectnextcharacter", "iniziastrut", "iniziastyle", "iniziastyle", "iniziasubformulas", "iniziasubject", "iniziasubsection", "iniziasubsentence", "iniziasubstack", "iniziasubsubject", "iniziasubsubsection", "iniziasubsubsubject", "iniziasubsubsubsection", "iniziasubsubsubsubject", "iniziasubsubsubsubsection", "iniziasubsubsubsubsubject", "iniziasymbolset", "iniziatable", "iniziatable", "iniziatablehead", "iniziatables", "iniziatables", "iniziatabletail", "iniziatabletext", "iniziatabulate", "iniziatabulatehead", "iniziatabulatetail", "iniziatagged", "iniziataglabeltext", "iniziatesta", "iniziatestoetichetta", "iniziatestoinstestazioni", "iniziatexcode", "iniziatexcode", "iniziatexdefinition", "iniziatext", "iniziatext", "iniziatextbackground", "iniziatextbackgroundmanual", "iniziatextcolor", "iniziatextcolorintent", "iniziatextflow", "iniziatitle", "iniziatokens", "iniziatxt", "iniziatypescript", "iniziatypescriptcollection", "iniziatyping", "iniziatyping", "iniziauniqueMPgraphic", "iniziauniqueMPpagegraphic", "iniziaunittext", "iniziaunpacked", "iniziausableMPgraphic", "iniziauseMPgraphic", "iniziausemathstyleparameter", "iniziausingbtxspecification", "iniziavaia", "iniziavboxtohbox", "iniziavboxtohboxseparator", "iniziaviewerlayer", "iniziaxcell", "iniziaxcellgroup", "iniziaxgroup", "iniziaxmldisplayverbatim", "iniziaxmlinlineverbatim", "iniziaxmlraw", "iniziaxmlsetups", "iniziaxmlsetups", "iniziaxrow", "iniziaxrowgroup", "iniziaxtable", "iniziaxtable", "iniziaxtablebody", "iniziaxtablebody", "iniziaxtablefoot", "iniziaxtablefoot", "iniziaxtablehead", "iniziaxtablehead", "iniziaxtablenext", "iniziaxtablenext", "inlatodestro", "inlatosinistro", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmaframed", "inmargine", "inmarginedestro", "inmarginesinistro", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inriga", "insertpages", "insinistra", "installactionhandler", "installactivecharacter", "installalingua", "installalingua", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "intertext", "intorno", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "labellanguage", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "lettera", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "lettere", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "lineanera", "lineasottile", "lineatesto", "lineenere", "lineeriempimento", "lineesottili", "linenote", "linespanningtext", "lingua", "linguaprincipale", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "lunghezzaelenco", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "maframed", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "marcatura", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "menuinterattivo", "menzione", "mequal", "mese", "message", "metaTeX", "mettielenco", "mettielencocombinato", "mettifiancoafianco", "mettiformula", "mettiingriglia", "mettiingriglia", "mettilegenda", "mettinotepdp", "mettinotepdplocali", "mettinumeropagina", "mettiregistro", "mettisegnalibro", "mettisottoformula", "mettiunosullaltro", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mostraambientefontdeltesto", "mostracolore", "mostracornice", "mostrafontdeltesto", "mostragriglia", "mostragruppocolori", "mostraimpostazioni", "mostralyout", "mostramakeup", "mostrasetsimboli", "mostrastampa", "mostrastruts", "mostratavolozza", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "nascondiblocchi", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nientelineecimafondo", "nientelineintestazionepdp", "nientespazio", "nihongo", "nocap", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notapdp", "notapdp", "notesymbol", "notragged", "ntimes", "numberofpoints", "numeri", "numeriromani", "numeroformula", "numeropagina", "numeropaginacompleto", "numerotesta", "numerotestacorrente", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "pagina", "paletsize", "paroladestra", "parolainmargine", "part", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "ped", "pedap", "percent", "percentdimen", "perlungo", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatwithsetups", "placeframed", "placegraphic", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "placetable", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "posizionanumerotesta", "posizionatestotesta", "posizione", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prendibuffer", "prendimarcatura", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "prodotto", "prodotto", "profiledbox", "profilegivenbox", "progetto", "progetto", "programma", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "pulsante", "pulsantemenu", "pulsantemenu", "pulsantinterazione", "punti", "punti", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "qualcheriga", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "referenceprefix", "referring", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "reimpostamarcatura", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "rif", "riferimento", "riferimentopagina", "riferimentotesto", "riflessione", "rigariempimento", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rigovuoto", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "ruota", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "schermo", "scrividentroelenco", "scriviinelenco", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "segnalibro", "select", "selezionablocchi", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settext", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfondo", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "sim", "simbolo", "simbolo", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spanishNumerals", "spanishnumerals", "spazifissi", "spazio", "spaziofisso", "speech", "spessoreriga", "spezzaoggettomobile", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackcampi", "stackrel", "startlinenote", "startregister", "startstructurepageregister", "stirato", "stoplinenote", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tequal", "terminaJScode", "terminaJSpreamble", "terminaLUA", "terminaLUA", "terminaMP", "terminaMP", "terminaMPclip", "terminaMPcode", "terminaMPdefinitions", "terminaMPdrawing", "terminaMPdrawing", "terminaMPenvironment", "terminaMPextensions", "terminaMPinclusions", "terminaMPinitializations", "terminaMPpage", "terminaMPpositiongraphic", "terminaMPpositionmethod", "terminaMPrun", "terminaPARSEDXML", "terminaPARSEDXML", "terminaTABLE", "terminaTABLE", "terminaTABLEbody", "terminaTABLEbody", "terminaTABLEfoot", "terminaTABLEfoot", "terminaTABLEhead", "terminaTABLEhead", "terminaTABLEnext", "terminaTABLEnext", "terminaTC", "terminaTD", "terminaTDs", "terminaTEX", "terminaTEX", "terminaTEXpage", "terminaTH", "terminaTN", "terminaTR", "terminaTRs", "terminaTX", "terminaTY", "terminaXML", "terminaXML", "terminaalign", "terminaalignment", "terminaallineacentro", "terminaallineadestra", "terminaallineasinistra", "terminaallmodes", "terminaambiente", "terminaambiente", "terminaappendices", "terminaarrangedpages", "terminaattachment", "terminabackmatter", "terminabar", "terminabar", "terminabitmapimage", "terminablockquote", "terminabodymatter", "terminaboxedcolumns", "terminabtxlabeltext", "terminabtxrenderingdefinitions", "terminabuffer", "terminabuffer", "terminacases", "terminacatcodetable", "terminacatcodetable", "terminacenteraligned", "terminachapter", "terminacharacteralign", "terminacheckedfences", "terminachemical", "terminacitazione", "terminacollect", "terminacollecting", "terminacolore", "terminacolore", "terminacolore", "terminacolorintent", "terminacolorset", "terminacolumns", "terminacolumnspan", "terminacom", "terminacombination", "terminacombination", "terminacomment", "terminacomponenet", "terminacomponenet", "terminacontextcode", "terminacontextdefinitioncode", "terminactxfunction", "terminactxfunctiondefinition", "terminacurrentcolor", "terminacurrentlistentrywrapper", "terminadelimited", "terminadelimitedtext", "terminadisplaymath", "terminadmath", "terminadocument", "terminaeffect", "terminaelemento", "terminaembeddedxtable", "terminaembeddedxtable", "terminaendnote", "terminaendnote", "terminaendofline", "terminaexceptions", "terminaexpanded", "terminaexpandedcollect", "terminaextendedcatcodetable", "terminaexternalfigurecollection", "terminafatto", "terminafigure", "terminafiguretext", "terminafittingpage", "terminafloatcombination", "terminafloatcombination", "terminafondo", "terminafont", "terminafontclass", "terminafontsolution", "terminaformula", "terminaformulas", "terminaframedcontent", "terminaframedtext", "terminafrontmatter", "terminagot", "terminagraphictext", "terminagridsnapping", "terminagridsnapping", "terminahboxestohbox", "terminahelptext", "terminahiding", "terminahighlight", "terminahyphenation", "terminaimath", "terminaimpaccato", "terminaincorniciato", "terminaindentation", "terminaindentedtext", "terminainteraction", "terminainterface", "terminaintermezzotext", "terminaintertext", "terminaitemgroup", "terminaitemize", "terminaknockout", "terminalayout", "terminalegend", "terminalinealignment", "terminalineamargine", "terminalineamargine", "terminalineatesto", "terminalinecorrection", "terminalinenumbering", "terminalinenumbering", "terminalines", "terminalinetable", "terminalinetablebody", "terminalinetablecell", "terminalinetablehead", "terminalocalfootnotes", "terminalocalheadsetup", "terminalocallinecorrection", "terminalocalnotes", "terminalocalsetups", "terminalocalsetups", "terminalua", "terminaluacode", "terminaluaparameterset", "terminaluasetups", "terminaluasetups", "terminamakeup", "terminamarginblock", "terminamarkedcontent", "terminamathalignment", "terminamathcases", "terminamathlabeltext", "terminamathmatrix", "terminamathmode", "terminamathstyle", "terminamathstyle", "terminamatrices", "terminamatrix", "terminamaxaligned", "terminamdformula", "terminamenuinterattivo", "terminamenzione", "terminamettiformula", "terminamettiformula", "terminamettilegenda", "terminamiddlealigned", "terminamixedcolumns", "terminamode", "terminamodeset", "terminamodule", "terminamodule", "terminamoduletestsection", "terminampformula", "terminanamedsection", "terminanamedsubformulas", "terminanarrow", "terminanarrow", "terminanarrow", "terminanarrower", "terminanegative", "terminanicelyfilledbox", "terminanointerference", "terminanop", "terminanotallmodes", "terminanotapdp", "terminanotapdp", "terminanotext", "terminanotmode", "terminaoperatortext", "terminaopposite", "terminaoutputstream", "terminaoverlay", "terminaoverprint", "terminapagecomment", "terminapagefigure", "terminapagegrid", "terminapagegridspan", "terminapagelayout", "terminapar", "terminapar", "terminaparagraph", "terminaparagraphs", "terminaparagraphscell", "terminaparbuilder", "terminapart", "terminapath", "terminaplacechemical", "terminaplacefigure", "terminaplacefloat", "terminaplacegraphic", "terminaplaceintermezzo", "terminaplacepairedbox", "terminaplacetable", "terminapositioning", "terminapositionoverlay", "terminapositive", "terminapostponing", "terminaprefixtext", "terminaprocessassignmentcommand", "terminaprocessassignmentlist", "terminaprocesscommacommand", "terminaprocesscommalist", "terminaprodotto", "terminaprodotto", "terminaprogetto", "terminaprogetto", "terminaprotect", "terminaprotectedcolors", "terminapsh", "terminapubblicazione", "terminapunctuation", "terminarandomized", "terminarandomseed", "terminaraw", "terminarawsetups", "terminarawsetups", "terminareadingfile", "terminareferenceprefix", "terminareferenceprefix", "terminaregime", "terminareusableMPgraphic", "terminariga", "terminarob", "terminarul", "terminascript", "terminasdformula", "terminasection", "terminasectionblock", "terminasectionblockenvironment", "terminasectionlevel", "terminasetups", "terminasetups", "terminasfondo", "terminasfondo", "terminashapebox", "terminashift", "terminasidebar", "terminasimplecolumns", "terminaspecialitem", "terminaspecialitem", "terminaspecialitem", "terminaspeech", "terminaspformula", "terminaspread", "terminastartstop", "terminastaticMPfigure", "terminastaticMPgraphic", "terminastrictinspectnextcharacter", "terminastrut", "terminastyle", "terminastyle", "terminasubformulas", "terminasubject", "terminasubsection", "terminasubsentence", "terminasubstack", "terminasubsubject", "terminasubsubsection", "terminasubsubsubject", "terminasubsubsubsection", "terminasubsubsubsubject", "terminasubsubsubsubsection", "terminasubsubsubsubsubject", "terminasymbolset", "terminatable", "terminatable", "terminatablehead", "terminatables", "terminatables", "terminatabletail", "terminatabletext", "terminatabulate", "terminatabulatehead", "terminatabulatetail", "terminatagged", "terminataglabeltext", "terminatesta", "terminatestoetichetta", "terminatestoinstestazioni", "terminatexcode", "terminatexcode", "terminatexdefinition", "terminatext", "terminatext", "terminatextbackground", "terminatextbackgroundmanual", "terminatextcolor", "terminatextcolorintent", "terminatextflow", "terminatitle", "terminatokens", "terminatxt", "terminatypescript", "terminatypescriptcollection", "terminatyping", "terminatyping", "terminauniqueMPgraphic", "terminauniqueMPpagegraphic", "terminaunittext", "terminaunpacked", "terminausableMPgraphic", "terminauseMPgraphic", "terminausemathstyleparameter", "terminausingbtxspecification", "terminavaia", "terminavboxtohbox", "terminavboxtohboxseparator", "terminaviewerlayer", "terminaxcell", "terminaxcellgroup", "terminaxgroup", "terminaxmldisplayverbatim", "terminaxmlinlineverbatim", "terminaxmlraw", "terminaxmlsetups", "terminaxmlsetups", "terminaxrow", "terminaxrowgroup", "terminaxtable", "terminaxtable", "terminaxtablebody", "terminaxtablebody", "terminaxtablefoot", "terminaxtablefoot", "terminaxtablehead", "terminaxtablehead", "terminaxtablenext", "terminaxtablenext", "testa", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testoetichetta", "testoinmargine", "testoinstestazioni", "testonotapdp", "testonotapdp", "testoriempimento", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tieniblocchi", "tightlayer", "tilde", "tinyfont", "title", "titoloinmargine", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "tooltip", "tooltip", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduci", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "type", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "usaJSscripts", "usaURL", "usablocco", "usacartella", "usacolonnasonoraesterna", "usadocumentoesterno", "usafiguraesterna", "usamodulo", "usasimboli", "usaurl", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vaia", "vaiabox", "vaiapagina", "vaigiu", "valorecolore", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "versione", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "widthofstring", "widthspanningtext", "withoutpt", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos" },
+ ["nl"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Caps", "Cijfers", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "Kap", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "Letter", "Letters", "LuaTeX", "LuajitTeX", "MAAND", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "Romeins", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAG", "WOORD", "WOORDEN", "WidthSpanningText", "Woord", "Woorden", "XETEX", "XeTeX", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "achtergrond", "activatespacehandler", "acute", "adaptcollector", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "bepaalkopnummer", "bepaallijstkenmerken", "bepaalregisterkenmerken", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanko", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "blokje", "blokjes", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "but", "but", "button", "calligraphic", "camel", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "cijfers", "citaat", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "citeer", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "converteernummer", "convertmonth", "convertvalue", "convertvboxtohbox", "copieerveld", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "corrigeerwitruimte", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "datasetvariable", "datum", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelayerpreset", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "definieer", "definieeraccent", "definieeralineas", "definieerblok", "definieerbuffer", "definieercombinatie", "definieercommando", "definieerconversie", "definieerconversie", "definieerfiguursymbool", "definieerfont", "definieerfont", "definieerfontstijl", "definieerfontsynoniem", "definieerhbox", "definieeringesprongentext", "definieerinteractiemenu", "definieeritemgroep", "definieerkadertekst", "definieerkarakter", "definieerkleur", "definieerkleur", "definieerkleurgroep", "definieerkolomovergang", "definieerkop", "definieerkorps", "definieerkorps", "definieerkorpsomgeving", "definieerlayer", "definieerlayout", "definieerletter", "definieerlijst", "definieermarkering", "definieeromlijnd", "definieeropmaak", "definieeroverlay", "definieerpaginaovergang", "definieerpalet", "definieerpalet", "definieerpapierformaat", "definieerpapierformaat", "definieerplaats", "definieerplaatsblok", "definieerplaatsblok", "definieerprofiel", "definieerprogramma", "definieerreferentie", "definieerreferentieformaat", "definieerregister", "definieersamengesteldelijst", "definieersectie", "definieersectieblok", "definieersorteren", "definieerstartstop", "definieersubveld", "definieersymbool", "definieersynoniemen", "definieertabelvorm", "definieertabulatie", "definieertekst", "definieertekstachtergrond", "definieertype", "definieertypen", "definieerveld", "definieerveldstapel", "definieerwiskundeuitlijnen", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "doordefinieren", "doorlabelen", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "dunnelijn", "dunnelijnen", "eTeX", "edefconvertedargument", "eenregel", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "emphasisboldface", "emphasistypeface", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "ergens", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "externfiguur", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "formulenummer", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "gebruikJSscripts", "gebruikURL", "gebruikblokken", "gebruikexterndocument", "gebruikexternfiguur", "gebruikexterngeluidsfragment", "gebruikgebied", "gebruikmodule", "gebruiksymbolen", "gebruiktypescript", "gebruiktypescriptfile", "gebruikurl", "geenbovenenonderregels", "geenhoofdenvoetregels", "geenspatie", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "grijskleur", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "haalbuffer", "haalmarkering", "haarlijn", "hairspace", "halfwaybox", "handhaafblokken", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hoofdtaal", "hoog", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "huidigedatum", "huidigekopnummer", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impliedby", "implies", "in", "inbinnen", "inbuiten", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "ininneredge", "ininnermargin", "initializeboxstack", "inlijnd", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inlinker", "inlinkermarge", "inlinkerrand", "inmarge", "innerflushshapebox", "inother", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inrechter", "inrechtermarge", "inrechterrand", "inregel", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installeertaal", "installeertaal", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "interactiebalk", "interactiebuttons", "interactiemenu", "intertext", "invokepageheandler", "invullijnen", "invulregel", "invultekst", "inwilijnd", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "items", "itemtag", "itm", "its", "jobfilename", "jobfilesuffix", "kap", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "kleur", "kleurenbalk", "kleurwaarde", "kloonveld", "kolom", "kop", "kopnummer", "kopsym", "koptekst", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "laag", "labellanguage", "labeltekst", "labeltexts", "laho", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "legeregels", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letter", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "letters", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "lijndikte", "lijstlengte", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "maand", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "margetekst", "margetitel", "margewoord", "margindata", "markcontent", "markeer", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "menubutton", "menubutton", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "naar", "naarbox", "naarpagina", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nokap", "nonfrenchspacing", "nonmathematics", "noot", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notragged", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "omgeving", "omgeving", "omlaag", "omlijnd", "onbekend", "onderdeel", "onderdeel", "onedigitrounding", "op", "operatorlanguage", "operatortext", "oplinkermarge", "oppagina", "oprechtermarge", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "pagina", "paginanummer", "paginareferentie", "paletsize", "part", "paslayoutaan", "passendveld", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "plaatsbookmarks", "plaatsformule", "plaatskopnummer", "plaatskoptekst", "plaatslegenda", "plaatslijst", "plaatslijstmetsynoniemen", "plaatslokalevoetnoten", "plaatsnaastelkaar", "plaatsonderelkaar", "plaatsopgrid", "plaatsopgrid", "plaatspaginanummer", "plaatsplaatsblok", "plaatsregister", "plaatsruwelijst", "plaatssamengesteldelijst", "plaatssubformule", "plaatsvoetnoten", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloatwithsetups", "placeframed", "placegraphic", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "placetable", "popattribute", "popmacro", "popmode", "popsystemmode", "positioneer", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "produkt", "produkt", "profiledbox", "profilegivenbox", "programma", "projekt", "projekt", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "punten", "punten", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "refereer", "referenceprefix", "referentie", "regellinks", "regelmidden", "regelrechts", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmarkering", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "romeins", "rooster", "roteer", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "schaal", "scherm", "schrijfnaarlijst", "schrijftussenlijst", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "select", "selecteerblokken", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "som", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spanishNumerals", "spanishnumerals", "spatie", "speech", "spiegel", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitsplaatsblok", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startLUA", "startLUA", "startMP", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startPARSEDXML", "startTABLE", "startTABLE", "startTABLEbody", "startTABLEbody", "startTABLEfoot", "startTABLEfoot", "startTABLEhead", "startTABLEhead", "startTABLEnext", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startXML", "startachtergrond", "startachtergrond", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startattachment", "startbackmatter", "startbar", "startbar", "startbitmapimage", "startblockquote", "startbodymatter", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startbuffer", "startbut", "startcases", "startcatcodetable", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcitaat", "startciteer", "startcollect", "startcollecting", "startcolorintent", "startcolorset", "startcolumns", "startcolumnspan", "startcom", "startcombination", "startcombination", "startcomment", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startembeddedxtable", "startembeddedxtable", "startendnote", "startendnote", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfigure", "startfiguretext", "startfittingpage", "startfloatcombination", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startframedcontent", "startframedtext", "startfrontmatter", "startgeg", "startgot", "startgraphictext", "startgridsnapping", "startgridsnapping", "starthboxestohbox", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteractiemenu", "startinteraction", "startinterface", "startintermezzotext", "startintertext", "startitemgroup", "startitemize", "startkantlijn", "startkantlijn", "startkleur", "startkleur", "startkleur", "startknockout", "startkop", "startkoptekst", "startlabeltekst", "startlayout", "startlegend", "startlinealignment", "startlinecorrection", "startlinenote", "startlinenumbering", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startluasetups", "startmakeup", "startmarginblock", "startmarkedcontent", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmiddlealigned", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmodule", "startmoduletestsection", "startmpformula", "startnaar", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrow", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnop", "startnotallmodes", "startnotext", "startnotmode", "startomgeving", "startomgeving", "startomlijnd", "startonderdeel", "startonderdeel", "startopelkaar", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplaatsformule", "startplaatsformule", "startplaatslegenda", "startplaatsplaatsblok", "startplacechemical", "startplacefigure", "startplacegraphic", "startplaceintermezzo", "startplacepairedbox", "startplacetable", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodukt", "startprodukt", "startprojekt", "startprojekt", "startprotect", "startprotectedcolors", "startpsh", "startpublicatie", "startpunctuation", "startrandomized", "startrandomseed", "startraw", "startrawsetups", "startrawsetups", "startreadingfile", "startreferenceprefix", "startreferenceprefix", "startregel", "startregellinks", "startregelmidden", "startregelrechts", "startregime", "startregister", "startreusableMPgraphic", "startrob", "startrul", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startsom", "startspecialitem", "startspecialitem", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startstyle", "startsubformulas", "startsubject", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttable", "starttablehead", "starttables", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttekstlijn", "starttexcode", "starttexcode", "starttexdefinition", "starttext", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttitle", "starttokens", "starttxt", "starttypescript", "starttypescriptcollection", "starttyping", "starttyping", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvoetnoot", "startvoetnoot", "startxcell", "startxcellgroup", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtable", "startxtablebody", "startxtablebody", "startxtablefoot", "startxtablefoot", "startxtablehead", "startxtablehead", "startxtablenext", "startxtablenext", "stelachtergrondenin", "stelachtergrondenin", "stelachtergrondin", "stelalineasin", "stelalineasin", "stelarrangerenin", "stelblankoin", "stelblokin", "stelblokjesin", "stelblokkopjein", "stelbovenin", "stelboventekstenin", "stelbufferin", "stelciterenin", "stelclipin", "stelcommentaarin", "steldunnelijnenin", "stelformulierenin", "stelhoofdin", "stelhoofdtekstenin", "stelingesprongentextin", "stelinspringenin", "stelinteractiebalkin", "stelinteractiein", "stelinteractiein", "stelinteractiemenuin", "stelinteractieschermin", "stelinterliniein", "stelinterliniein", "stelinterliniein", "stelinterliniein", "stelinterliniein", "stelinterliniein", "stelinvullijnenin", "stelinvulregelsin", "stelitemgroepin", "stelitemgroepin", "stelitemsin", "stelkantlijnin", "stelkapitalenin", "stelkleurenin", "stelkleurin", "stelkolommenin", "stelkopin", "stelkopnummerin", "stelkoppeltekenin", "stelkoptekstin", "stelkorpsin", "stellabeltekstin", "stellayoutin", "stellayoutin", "stellegendain", "stellijndiktein", "stellijstin", "stelmarkeringin", "stelnaastplaatsenin", "stelomlijndin", "stelonderin", "stelondertekstenin", "stelopmaakin", "stelpaginacommentaarin", "stelpaginanummerin", "stelpaginanummeringin", "stelpaginaovergangenin", "stelpaletin", "stelpapierformaatin", "stelpapierformaatin", "stelpapierin", "stelparagraafnummerenin", "stelplaatsblokin", "stelplaatsbloksplitsenin", "stelplaatsin", "stelpositionerenin", "stelprogrammasin", "stelrefererenin", "stelregelnummerenin", "stelregelsin", "stelregisterin", "stelregisterin", "stelroterenin", "stelsamengesteldelijstin", "stelsectieblokin", "stelsmallerin", "stelsorterenin", "stelspatieringin", "stelstartstopin", "stelsubpaginanummerin", "stelsymboolsetin", "stelsynoniemenin", "steltaalin", "steltabellenin", "steltabulatiein", "steltekstachtergrondin", "steltekstin", "steltekstinhoudin", "steltekstlijnenin", "stelteksttekstenin", "steltolerantiein", "steltypein", "steltypenin", "steluitlijnenin", "stelurlin", "stelveldenin", "stelveldin", "stelvoetin", "stelvoettekstenin", "stelwiskundeuitlijnenin", "stelwitruimtein", "stopJScode", "stopJSpreamble", "stopLUA", "stopLUA", "stopMP", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopPARSEDXML", "stopTABLE", "stopTABLE", "stopTABLEbody", "stopTABLEbody", "stopTABLEfoot", "stopTABLEfoot", "stopTABLEhead", "stopTABLEhead", "stopTABLEnext", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopXML", "stopachtergrond", "stopachtergrond", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopattachment", "stopbackmatter", "stopbar", "stopbar", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopbuffer", "stopbut", "stopcases", "stopcatcodetable", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitaat", "stopciteer", "stopcollect", "stopcollecting", "stopcolorintent", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcom", "stopcombination", "stopcombination", "stopcomment", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopembeddedxtable", "stopembeddedxtable", "stopendnote", "stopendnote", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfloatcombination", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopframedcontent", "stopframedtext", "stopfrontmatter", "stopgeg", "stopgot", "stopgraphictext", "stopgridsnapping", "stopgridsnapping", "stophboxestohbox", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteractiemenu", "stopinteraction", "stopinterface", "stopintermezzotext", "stopintertext", "stopitemgroup", "stopitemize", "stopkantlijn", "stopkantlijn", "stopkleur", "stopkleur", "stopkleur", "stopknockout", "stopkop", "stopkoptekst", "stoplabeltekst", "stoplayout", "stoplegend", "stoplinealignment", "stoplinecorrection", "stoplinenote", "stoplinenumbering", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarkedcontent", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmiddlealigned", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnaar", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrow", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnop", "stopnotallmodes", "stopnotext", "stopnotmode", "stopomgeving", "stopomgeving", "stopomlijnd", "stoponderdeel", "stoponderdeel", "stopopelkaar", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplaatsformule", "stopplaatsformule", "stopplaatslegenda", "stopplaatsplaatsblok", "stopplacechemical", "stopplacefigure", "stopplacegraphic", "stopplaceintermezzo", "stopplacepairedbox", "stopplacetable", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodukt", "stopprodukt", "stopprojekt", "stopprojekt", "stopprotect", "stopprotectedcolors", "stoppsh", "stoppublicatie", "stoppunctuation", "stoprandomized", "stoprandomseed", "stopraw", "stoprawsetups", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopreferenceprefix", "stopregel", "stopregellinks", "stopregelmidden", "stopregelrechts", "stopregime", "stopregister", "stopreusableMPgraphic", "stoprob", "stoprul", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopsom", "stopspecialitem", "stopspecialitem", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopstyle", "stopsubformulas", "stopsubject", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptable", "stoptablehead", "stoptables", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptekstlijn", "stoptexcode", "stoptexcode", "stoptexdefinition", "stoptext", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptitle", "stoptokens", "stoptxt", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stoptyping", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvoetnoot", "stopvoetnoot", "stopxcell", "stopxcellgroup", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtable", "stopxtablebody", "stopxtablebody", "stopxtablefoot", "stopxtablefoot", "stopxtablehead", "stopxtablehead", "stopxtablenext", "stopxtablenext", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpaginanummer", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "suggestie", "suggestie", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchnaarkorps", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "sym", "symbolreference", "symbool", "symbool", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "taal", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tekstlijn", "tekstreferentie", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testkolom", "testpageonly", "testpagesync", "testpagina", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "toelichting", "tolinenote", "toongrid", "tooninstellingen", "toonkader", "toonkleur", "toonkleurgroep", "toonkorps", "toonkorpsomgeving", "toonlayout", "toonopmaak", "toonpalet", "toonprint", "toonstruts", "toonsymboolset", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "type", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "uit", "uitgerekt", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vastespatie", "vastespaties", "vboxreference", "vec", "veld", "veldstapel", "verbatim", "verbatimstring", "verbergblokken", "verbosenumber", "vergelijkkleurgroep", "vergelijkpalet", "versie", "vertaal", "verticalgrowingbar", "verticalpositionbar", "verwerkblokken", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "voetnoot", "voetnoot", "voetnoottekst", "voetnoottekst", "volledigepaginanummer", "volledigregister", "voluit", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "weekdag", "widthofstring", "widthspanningtext", "wilijnd", "wiskunde", "withoutpt", "woordrechts", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos" },
+ ["pe"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "Cap", "Caps", "Character", "Characters", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LaTeX", "LamSTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTH", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Numbers", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "Romannumerals", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WEEKDAY", "WORD", "WORDS", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "aftersplitstring", "aftertestandsplitstring", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "asciistr", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "calligraphic", "camel", "cap", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "collect", "collectedtext", "collectexpanded", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparedimension", "comparedimensioneps", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertvalue", "convertvboxtohbox", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "d", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitems", "definelabelclass", "definelayerpreset", "definelayerpreset", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "eTeX", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "emphasisboldface", "emphasistypeface", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impliedby", "implies", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "infofont", "infofontbold", "inheritparameter", "inhibitblank", "ininneredge", "ininnermargin", "initializeboxstack", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inmframed", "innerflushshapebox", "inother", "inouteredge", "inoutermargin", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "integerrounding", "intertext", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "its", "jobfilename", "jobfilesuffix", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "labellanguage", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "margindata", "markcontent", "markinjector", "mat", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "medskip", "medspace", "mequal", "message", "metaTeX", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nonfrenchspacing", "nonmathematics", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "notesymbol", "notragged", "ntimes", "numberofpoints", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "paletsize", "part", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloatwithsetups", "placeframed", "placegraphic", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerenderingwindow", "placetable", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "profiledbox", "profilegivenbox", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "referenceprefix", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "select", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcapitals", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupurl", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spanishNumerals", "spanishnumerals", "speech", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startlinenote", "startregister", "startstructurepageregister", "stoplinenote", "stopregister", "stopstructurepageregister", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tequal", "testandsplitstring", "testfeature", "testfeatureonce", "testpageonly", "testpagesync", "testtokens", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "textflowcollector", "textmath", "textminus", "textormathchar", "textplus", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "tooltip", "tooltip", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "transparencycomponents", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "typedefinedbuffer", "typeface", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useJSscripts", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useURL", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "widthofstring", "widthspanningtext", "withoutpt", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "آیتم", "آیتمها", "آینه", "از", "استفاده‌بلوکها", "استفاده‌دستخط‌تایپ", "استفاده‌شکل‌خارجی", "استفاده‌قطعه‌موزیک‌خارجی", "استفاده‌مدول", "استفاده‌مسیر", "استفاده‌نمادها", "استفاده‌نوشتارخارجی", "استفاده‌پرونده‌دستخط‌تایپ", "اعدادلاتین", "افزودن", "اما", "اما", "انتخاب‌بلوکها", "بارگذاری‌آرایش", "بارگذاری‌آیتمها", "بارگذاری‌ارجاع", "بارگذاری‌اندازه‌برگ", "بارگذاری‌اندازه‌برگ", "بارگذاری‌باریکتر", "بارگذاری‌بافر", "بارگذاری‌بالا", "بارگذاری‌بردباری", "بارگذاری‌برنامه‌ها", "بارگذاری‌برگ", "بارگذاری‌بلوک", "بارگذاری‌بلوک‌بخش", "بارگذاری‌تایپ", "بارگذاری‌تایپ‌کردن", "بارگذاری‌ترتیب", "بارگذاری‌ترتیب", "بارگذاری‌تنظیم", "بارگذاری‌تنظیم‌ریاضی", "بارگذاری‌ته‌برگ", "بارگذاری‌تورفتگی", "بارگذاری‌توضیح", "بارگذاری‌توضیح‌صفحه", "بارگذاری‌ثبت", "بارگذاری‌ثبت", "بارگذاری‌جانشانی", "بارگذاری‌جدولها", "بارگذاری‌جدول‌بندی", "بارگذاری‌خالی", "بارگذاری‌خطها", "بارگذاری‌خطهای‌حاشیه", "بارگذاری‌خطهای‌سیاه", "بارگذاری‌خطهای‌متن", "بارگذاری‌خطها‌ی‌نازک", "بارگذاری‌درج‌درخطها", "بارگذاری‌درج‌مخالف", "بارگذاری‌دوران", "بارگذاری‌راهنما", "بارگذاری‌رنگ", "بارگذاری‌رنگها", "بارگذاری‌زبان", "بارگذاری‌ستونها", "بارگذاری‌سر", "بارگذاری‌سربرگ", "بارگذاری‌شرح", "بارگذاری‌شروع‌پایان", "بارگذاری‌شماره‌زیرصفحه", "بارگذاری‌شماره‌سر", "بارگذاری‌شماره‌صفحه", "بارگذاری‌شماره‌گذاری‌صفحه", "بارگذاری‌شماره‌گذاری‌پاراگراف", "بارگذاری‌شماره‌‌گذاری‌خط", "بارگذاری‌شناور", "بارگذاری‌شکافتن‌شناورها", "بارگذاری‌طرح", "بارگذاری‌طرح‌بندی", "بارگذاری‌طرح‌بندی", "بارگذاری‌عرض‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فاصله‌بین‌خط", "بارگذاری‌فضای‌سفید", "بارگذاری‌فضا‌گذاری", "بارگذاری‌قالبی", "بارگذاری‌قلم‌متن", "بارگذاری‌لوح", "بارگذاری‌لیست", "بارگذاری‌لیست‌ترکیبی", "بارگذاری‌مترادفها", "بارگذاری‌متن", "بارگذاری‌متنهای‌بالا", "بارگذاری‌متن‌سر", "بارگذاری‌متن‌سربرگ", "بارگذاری‌متن‌متنها", "بارگذاری‌متن‌پانوشت", "بارگذاری‌متن‌پایین", "بارگذاری‌مجموعه‌نماد", "بارگذاری‌منوی‌پانل", "بارگذاری‌مکان‌گذاری", "بارگذاری‌میدان", "بارگذاری‌میدانها", "بارگذاری‌میله‌پانل", "بارگذاری‌نشانه‌شکستن", "بارگذاری‌نشانه‌گذاری", "بارگذاری‌نقل", "بارگذاری‌پاراگرافها", "بارگذاری‌پاراگرافها", "بارگذاری‌پانل", "بارگذاری‌پانل", "بارگذاری‌پایین", "بارگذاری‌پرده‌پانل", "بارگذاری‌پرکردن‌خطها", "بارگذاری‌پس‌زمینه", "بارگذاری‌پس‌زمینه‌ها", "بارگذاری‌پس‌زمینه‌ها", "بارگذاری‌چیدن", "بارگذاری‌گذارصفحه", "بارگذاری‌گروه‌آیتم", "بارگذاری‌گروه‌آیتم", "بازنشانی‌نشانه‌گذاری", "باگذاری‌متن‌برچسب", "بدون‌خط‌بالاوپایین", "بدون‌خط‌سروته‌برگ", "بدون‌فضا", "برنامه", "بروبه", "بروبه‌جعبه", "بروبه‌صفحه", "بروپایین", "بلند", "بلوکهای‌پردازش", "بلوکها‌پنهان", "بنویس‌بین‌لیست", "بنویس‌در‌لیست", "تاریخ", "تاریخ‌جاری", "تایپ", "تایپ", "تایپ‌بافر", "تایپ‌پرونده", "ترجمه", "تعریف", "تعریف‌آرایش", "تعریف‌الگوی‌جدول", "تعریف‌اندازه‌برگ", "تعریف‌اندازه‌برگ", "تعریف‌بافر", "تعریف‌بخش", "تعریف‌برنامه", "تعریف‌برچسب", "تعریف‌بلوک", "تعریف‌بلوک‌بخش", "تعریف‌تایپ", "تعریف‌تایپ‌کردن", "تعریف‌تبدیل", "تعریف‌تبدیل", "تعریف‌ترتیب", "تعریف‌ترکیب", "تعریف‌تنظیم‌ریاضی", "تعریف‌توده‌میدان", "تعریف‌ثبت", "تعریف‌جانشانی", "تعریف‌جدول‌بندی", "تعریف‌جعبه‌‌افقی", "تعریف‌حرف", "تعریف‌رنگ", "تعریف‌رنگ", "تعریف‌زیرمیدان", "تعریف‌سبک", "تعریف‌سبک‌قلم", "تعریف‌سر", "تعریف‌شرح", "تعریف‌شروع‌پایان", "تعریف‌شمایل‌مرجع", "تعریف‌شناور", "تعریف‌شناور", "تعریف‌شکستن‌ستون", "تعریف‌شکست‌صفحه", "تعریف‌طرح‌بندی", "تعریف‌فرمان", "تعریف‌قالبی", "تعریف‌قلم", "تعریف‌قلم", "تعریف‌قلم‌متن", "تعریف‌قلم‌متن", "تعریف‌لایه", "تعریف‌لهجه", "تعریف‌لوح", "تعریف‌لوح", "تعریف‌لیست", "تعریف‌لیست‌ترکیبی", "تعریف‌مترادفها", "تعریف‌مترادف‌قلم", "تعریف‌متن", "تعریف‌متن‌قالبی", "تعریف‌محیط‌قلم‌بدنه", "تعریف‌مرجع", "تعریف‌منوی‌پانل", "تعریف‌میدان", "تعریف‌نشانه‌گذاری", "تعریف‌نماد", "تعریف‌نمادشکل", "تعریف‌پاراگرافها", "تعریف‌پروفایل", "تعریف‌پوشش", "تعریف‌گروه‌آیتم", "تعریف‌گروه‌رنگ", "تعیین‌شماره‌سر", "تعیین‌محتوای‌متن", "تعیین‌مشخصات‌ثبت", "تعیین‌مشخصات‌لیست", "تغییربه‌قلم‌بدنه", "تنظیم‌راست", "تنظیم‌طرح‌بندی", "تنظیم‌وسط", "توجه", "توری", "تولید", "تولید", "تک", "ثبت‌کامل", "حاش", "حرف", "حرفها", "حفظ‌بلوکها", "خالی", "خطهای‌سیاه", "خطهای‌نازک", "خطها‌خالی", "خط‌سیاه", "خط‌متن", "خط‌مو", "خط‌نازک", "خ‌ا", "خ‌ع", "در", "درج‌ثبت", "درج‌درخط", "درج‌درخطها", "درج‌درمتن", "درج‌در‌بالای‌یکدیگر", "درج‌در‌توری", "درج‌در‌توری", "درج‌راهنما", "درج‌زیرفرمول", "درج‌شماره‌سر", "درج‌شماره‌صفحه", "درج‌شناور", "درج‌فرمول", "درج‌لیست", "درج‌لیست‌خام", "درج‌لیست‌مختلط", "درج‌متن‌سر", "درج‌پانوشتها", "درج‌پانوشتهای‌موضعی", "درج‌چوب‌خط", "درج‌کنار‌به‌کنار", "درحاشیه", "درحاشیه‌راست", "درحاشیه‌راست", "درحاشیه‌چپ", "درحاشیه‌چپ", "درخارجی", "درخط", "درداخلی", "درراست", "درصفحه", "درقالبی", "درلبه‌راست", "درلبه‌چپ", "درمورد", "درون", "درپر", "درچپ", "دریافت‌بافر", "دریافت‌نشانه", "دوران", "دکمه", "دکمه‌منو", "دکمه‌منو", "دکمه‌پانل", "رج", "رنگ", "رنگ‌خاکستری", "روزهفته", "ریاضی", "زبان", "زبان‌اصلی", "ستون", "ستون‌امتحان", "سر", "سرپوش‌کوچک‌نه", "شروعJScode", "شروعJSpreamble", "شروعLUA", "شروعLUA", "شروعMP", "شروعMP", "شروعMPclip", "شروعMPcode", "شروعMPdefinitions", "شروعMPdrawing", "شروعMPdrawing", "شروعMPenvironment", "شروعMPextensions", "شروعMPinclusions", "شروعMPinitializations", "شروعMPpage", "شروعMPpositiongraphic", "شروعMPpositionmethod", "شروعMPrun", "شروعPARSEDXML", "شروعPARSEDXML", "شروعTABLE", "شروعTABLE", "شروعTABLEbody", "شروعTABLEbody", "شروعTABLEfoot", "شروعTABLEfoot", "شروعTABLEhead", "شروعTABLEhead", "شروعTABLEnext", "شروعTABLEnext", "شروعTC", "شروعTD", "شروعTDs", "شروعTEX", "شروعTEX", "شروعTEXpage", "شروعTH", "شروعTN", "شروعTR", "شروعTRs", "شروعTX", "شروعTY", "شروعXML", "شروعXML", "شروعalign", "شروعalignment", "شروعallmodes", "شروعappendices", "شروعarrangedpages", "شروعattachment", "شروعbackmatter", "شروعbar", "شروعbar", "شروعbitmapimage", "شروعblockquote", "شروعbodymatter", "شروعboxedcolumns", "شروعbtxlabeltext", "شروعbtxrenderingdefinitions", "شروعbuffer", "شروعbuffer", "شروعcases", "شروعcatcodetable", "شروعcatcodetable", "شروعcenteraligned", "شروعchapter", "شروعcharacteralign", "شروعcheckedfences", "شروعchemical", "شروعcollect", "شروعcollecting", "شروعcolorintent", "شروعcolorset", "شروعcolumns", "شروعcolumnspan", "شروعcom", "شروعcombination", "شروعcombination", "شروعcomment", "شروعcontextcode", "شروعcontextdefinitioncode", "شروعctxfunction", "شروعctxfunctiondefinition", "شروعcurrentcolor", "شروعcurrentlistentrywrapper", "شروعdelimited", "شروعdelimitedtext", "شروعdisplaymath", "شروعdmath", "شروعdocument", "شروعeffect", "شروعembeddedxtable", "شروعembeddedxtable", "شروعendnote", "شروعendnote", "شروعendofline", "شروعexceptions", "شروعexpanded", "شروعexpandedcollect", "شروعextendedcatcodetable", "شروعexternalfigurecollection", "شروعfigure", "شروعfiguretext", "شروعfittingpage", "شروعfloatcombination", "شروعfloatcombination", "شروعfont", "شروعfontclass", "شروعfontsolution", "شروعformula", "شروعformulas", "شروعframedcontent", "شروعframedtext", "شروعfrontmatter", "شروعgot", "شروعgraphictext", "شروعgridsnapping", "شروعgridsnapping", "شروعhboxestohbox", "شروعhelptext", "شروعhiding", "شروعhighlight", "شروعhyphenation", "شروعimath", "شروعindentation", "شروعindentedtext", "شروعinteraction", "شروعinterface", "شروعintermezzotext", "شروعintertext", "شروعitemgroup", "شروعitemize", "شروعknockout", "شروعlayout", "شروعlegend", "شروعlinealignment", "شروعlinecorrection", "شروعlinenumbering", "شروعlinenumbering", "شروعlines", "شروعlinetable", "شروعlinetablebody", "شروعlinetablecell", "شروعlinetablehead", "شروعlocalfootnotes", "شروعlocalheadsetup", "شروعlocallinecorrection", "شروعlocalnotes", "شروعlocalsetups", "شروعlocalsetups", "شروعlua", "شروعluacode", "شروعluaparameterset", "شروعluasetups", "شروعluasetups", "شروعmakeup", "شروعmarginblock", "شروعmarkedcontent", "شروعmathalignment", "شروعmathcases", "شروعmathlabeltext", "شروعmathmatrix", "شروعmathmode", "شروعmathstyle", "شروعmathstyle", "شروعmatrices", "شروعmatrix", "شروعmaxaligned", "شروعmdformula", "شروعmiddlealigned", "شروعmixedcolumns", "شروعmode", "شروعmodeset", "شروعmodule", "شروعmodule", "شروعmoduletestsection", "شروعmpformula", "شروعnamedsection", "شروعnamedsubformulas", "شروعnarrow", "شروعnarrow", "شروعnarrow", "شروعnarrower", "شروعnegative", "شروعnicelyfilledbox", "شروعnointerference", "شروعnotallmodes", "شروعnotext", "شروعnotmode", "شروعoperatortext", "شروعopposite", "شروعoutputstream", "شروعoverlay", "شروعoverprint", "شروعpagecomment", "شروعpagefigure", "شروعpagegrid", "شروعpagegridspan", "شروعpagelayout", "شروعpar", "شروعpar", "شروعparagraph", "شروعparagraphs", "شروعparagraphscell", "شروعparbuilder", "شروعpart", "شروعpath", "شروعplacechemical", "شروعplacefigure", "شروعplacegraphic", "شروعplaceintermezzo", "شروعplacepairedbox", "شروعplacetable", "شروعpositioning", "شروعpositionoverlay", "شروعpositive", "شروعpostponing", "شروعprefixtext", "شروعprocessassignmentcommand", "شروعprocessassignmentlist", "شروعprocesscommacommand", "شروعprocesscommalist", "شروعprotect", "شروعprotectedcolors", "شروعpsh", "شروعpunctuation", "شروعrandomized", "شروعrandomseed", "شروعraw", "شروعrawsetups", "شروعrawsetups", "شروعreadingfile", "شروعreferenceprefix", "شروعreferenceprefix", "شروعregime", "شروعreusableMPgraphic", "شروعrob", "شروعrul", "شروعscript", "شروعsdformula", "شروعsection", "شروعsectionblock", "شروعsectionblockenvironment", "شروعsectionlevel", "شروعsetups", "شروعsetups", "شروعshapebox", "شروعshift", "شروعsidebar", "شروعsimplecolumns", "شروعspecialitem", "شروعspecialitem", "شروعspecialitem", "شروعspeech", "شروعspformula", "شروعspread", "شروعstartstop", "شروعstaticMPfigure", "شروعstaticMPgraphic", "شروعstrictinspectnextcharacter", "شروعstrut", "شروعstyle", "شروعstyle", "شروعsubformulas", "شروعsubject", "شروعsubsection", "شروعsubsentence", "شروعsubstack", "شروعsubsubject", "شروعsubsubsection", "شروعsubsubsubject", "شروعsubsubsubsection", "شروعsubsubsubsubject", "شروعsubsubsubsubsection", "شروعsubsubsubsubsubject", "شروعsymbolset", "شروعtable", "شروعtable", "شروعtablehead", "شروعtables", "شروعtables", "شروعtabletail", "شروعtabletext", "شروعtabulate", "شروعtabulatehead", "شروعtabulatetail", "شروعtagged", "شروعtaglabeltext", "شروعtexcode", "شروعtexcode", "شروعtexdefinition", "شروعtext", "شروعtext", "شروعtextbackground", "شروعtextbackgroundmanual", "شروعtextcolor", "شروعtextcolorintent", "شروعtextflow", "شروعtitle", "شروعtokens", "شروعtxt", "شروعtypescript", "شروعtypescriptcollection", "شروعtyping", "شروعtyping", "شروعuniqueMPgraphic", "شروعuniqueMPpagegraphic", "شروعunittext", "شروعunpacked", "شروعusableMPgraphic", "شروعuseMPgraphic", "شروعusemathstyleparameter", "شروعusingbtxspecification", "شروعvboxtohbox", "شروعvboxtohboxseparator", "شروعviewerlayer", "شروعxcell", "شروعxcellgroup", "شروعxgroup", "شروعxmldisplayverbatim", "شروعxmlinlineverbatim", "شروعxmlraw", "شروعxmlsetups", "شروعxmlsetups", "شروعxrow", "شروعxrowgroup", "شروعxtable", "شروعxtable", "شروعxtablebody", "شروعxtablebody", "شروعxtablefoot", "شروعxtablefoot", "شروعxtablehead", "شروعxtablehead", "شروعxtablenext", "شروعxtablenext", "شروعآیتم", "شروعاما", "شروعبروبه", "شروعتنظیم‌راست", "شروعتنظیم‌وسط", "شروعتولید", "شروعتولید", "شروعحقیقت", "شروعخط‌حاشیه", "شروعخط‌حاشیه", "شروعخط‌متن", "شروعدرج‌راهنما", "شروعدرج‌شناور", "شروعدرج‌فرمول", "شروعدرج‌فرمول", "شروعرنگ", "شروعرنگ", "شروعرنگ", "شروعسر", "شروعفشرده", "شروعقالبی", "شروعمتن‌برچسب", "شروعمتن‌سر", "شروعمحیط", "شروعمحیط", "شروعمنفی", "شروعمنوی‌پانل", "شروعمولفه", "شروعمولفه", "شروعنشر", "شروعنقل", "شروعنقل‌قول", "شروعپانوشت", "شروعپانوشت", "شروعپروژه", "شروعپروژه", "شروعپس‌زمینه", "شروعپس‌زمینه", "شروعچپ‌چین", "شروع‌خط", "شماره‌زیرصفحه", "شماره‌سر", "شماره‌سرجاری", "شماره‌صفحه", "شماره‌صفحه‌کامل", "شماره‌فرمول", "شماره‌مبدل", "شماره‌ها", "شکافتن‌شناور", "شکل‌خارجی", "صفحه", "صفحه‌تست", "طول‌لیست", "عرض‌خط", "عنوان‌حاشیه", "فضا", "فضاهای‌ثابت", "فضای‌ثابت", "فضای‌سفیدصحیح", "قالبی", "لوح‌مقایسه", "ماه", "متن‌برچسب", "متن‌حاشیه", "متن‌سر", "متن‌پانوشت", "متن‌پانوشت", "محیط", "محیط", "مراجعه", "مرجع", "مرجع‌صفحه", "مرجع‌متن", "مقایسه‌گروه‌رنگ", "مقداررنگ", "مقیاس", "منفی", "منفی", "منوی‌پانل", "مولفه", "مولفه", "مکان", "میدان", "میدان‌شبیه‌سازی", "میدان‌پشته", "میدان‌کپی", "میله‌رنگ", "میله‌پانل", "ناشناس", "نسخه", "نشانه‌گذاری", "نصب‌زبان", "نصب‌زبان", "نقطه‌ها", "نقطه‌ها", "نقل", "نقل‌قول", "نم", "نماد", "نماد", "نمادسر", "نمایش‌آرایش", "نمایش‌بارگذاریها", "نمایش‌بستها", "نمایش‌توری", "نمایش‌رنگ", "نمایش‌طرح‌بندی", "نمایش‌قالب", "نمایش‌قلم‌بدنه", "نمایش‌لوح", "نمایش‌مجموعه‌علامت", "نمایش‌محیط‌قلم‌بدنه", "نمایش‌چاپ", "نمایش‌گروه‌رنگ", "پابا", "پانوشت", "پانوشت", "پایانJScode", "پایانJSpreamble", "پایانLUA", "پایانLUA", "پایانMP", "پایانMP", "پایانMPclip", "پایانMPcode", "پایانMPdefinitions", "پایانMPdrawing", "پایانMPdrawing", "پایانMPenvironment", "پایانMPextensions", "پایانMPinclusions", "پایانMPinitializations", "پایانMPpage", "پایانMPpositiongraphic", "پایانMPpositionmethod", "پایانMPrun", "پایانPARSEDXML", "پایانPARSEDXML", "پایانTABLE", "پایانTABLE", "پایانTABLEbody", "پایانTABLEbody", "پایانTABLEfoot", "پایانTABLEfoot", "پایانTABLEhead", "پایانTABLEhead", "پایانTABLEnext", "پایانTABLEnext", "پایانTC", "پایانTD", "پایانTDs", "پایانTEX", "پایانTEX", "پایانTEXpage", "پایانTH", "پایانTN", "پایانTR", "پایانTRs", "پایانTX", "پایانTY", "پایانXML", "پایانXML", "پایانalign", "پایانalignment", "پایانallmodes", "پایانappendices", "پایانarrangedpages", "پایانattachment", "پایانbackmatter", "پایانbar", "پایانbar", "پایانbitmapimage", "پایانblockquote", "پایانbodymatter", "پایانboxedcolumns", "پایانbtxlabeltext", "پایانbtxrenderingdefinitions", "پایانbuffer", "پایانbuffer", "پایانcases", "پایانcatcodetable", "پایانcatcodetable", "پایانcenteraligned", "پایانchapter", "پایانcharacteralign", "پایانcheckedfences", "پایانchemical", "پایانcollect", "پایانcollecting", "پایانcolorintent", "پایانcolorset", "پایانcolumns", "پایانcolumnspan", "پایانcom", "پایانcombination", "پایانcombination", "پایانcomment", "پایانcontextcode", "پایانcontextdefinitioncode", "پایانctxfunction", "پایانctxfunctiondefinition", "پایانcurrentcolor", "پایانcurrentlistentrywrapper", "پایانdelimited", "پایانdelimitedtext", "پایانdisplaymath", "پایانdmath", "پایانdocument", "پایانeffect", "پایانembeddedxtable", "پایانembeddedxtable", "پایانendnote", "پایانendnote", "پایانendofline", "پایانexceptions", "پایانexpanded", "پایانexpandedcollect", "پایانextendedcatcodetable", "پایانexternalfigurecollection", "پایانfigure", "پایانfiguretext", "پایانfittingpage", "پایانfloatcombination", "پایانfloatcombination", "پایانfont", "پایانfontclass", "پایانfontsolution", "پایانformula", "پایانformulas", "پایانframedcontent", "پایانframedtext", "پایانfrontmatter", "پایانgot", "پایانgraphictext", "پایانgridsnapping", "پایانgridsnapping", "پایانhboxestohbox", "پایانhelptext", "پایانhiding", "پایانhighlight", "پایانhyphenation", "پایانimath", "پایانindentation", "پایانindentedtext", "پایانinteraction", "پایانinterface", "پایانintermezzotext", "پایانintertext", "پایانitemgroup", "پایانitemize", "پایانknockout", "پایانlayout", "پایانlegend", "پایانlinealignment", "پایانlinecorrection", "پایانlinenumbering", "پایانlinenumbering", "پایانlines", "پایانlinetable", "پایانlinetablebody", "پایانlinetablecell", "پایانlinetablehead", "پایانlocalfootnotes", "پایانlocalheadsetup", "پایانlocallinecorrection", "پایانlocalnotes", "پایانlocalsetups", "پایانlocalsetups", "پایانlua", "پایانluacode", "پایانluaparameterset", "پایانluasetups", "پایانluasetups", "پایانmakeup", "پایانmarginblock", "پایانmarkedcontent", "پایانmathalignment", "پایانmathcases", "پایانmathlabeltext", "پایانmathmatrix", "پایانmathmode", "پایانmathstyle", "پایانmathstyle", "پایانmatrices", "پایانmatrix", "پایانmaxaligned", "پایانmdformula", "پایانmiddlealigned", "پایانmixedcolumns", "پایانmode", "پایانmodeset", "پایانmodule", "پایانmodule", "پایانmoduletestsection", "پایانmpformula", "پایانnamedsection", "پایانnamedsubformulas", "پایانnarrow", "پایانnarrow", "پایانnarrow", "پایانnarrower", "پایانnegative", "پایانnicelyfilledbox", "پایانnointerference", "پایانnotallmodes", "پایانnotext", "پایانnotmode", "پایانoperatortext", "پایانopposite", "پایانoutputstream", "پایانoverlay", "پایانoverprint", "پایانpagecomment", "پایانpagefigure", "پایانpagegrid", "پایانpagegridspan", "پایانpagelayout", "پایانpar", "پایانpar", "پایانparagraph", "پایانparagraphs", "پایانparagraphscell", "پایانparbuilder", "پایانpart", "پایانpath", "پایانplacechemical", "پایانplacefigure", "پایانplacegraphic", "پایانplaceintermezzo", "پایانplacepairedbox", "پایانplacetable", "پایانpositioning", "پایانpositionoverlay", "پایانpositive", "پایانpostponing", "پایانprefixtext", "پایانprocessassignmentcommand", "پایانprocessassignmentlist", "پایانprocesscommacommand", "پایانprocesscommalist", "پایانprotect", "پایانprotectedcolors", "پایانpsh", "پایانpunctuation", "پایانrandomized", "پایانrandomseed", "پایانraw", "پایانrawsetups", "پایانrawsetups", "پایانreadingfile", "پایانreferenceprefix", "پایانreferenceprefix", "پایانregime", "پایانreusableMPgraphic", "پایانrob", "پایانrul", "پایانscript", "پایانsdformula", "پایانsection", "پایانsectionblock", "پایانsectionblockenvironment", "پایانsectionlevel", "پایانsetups", "پایانsetups", "پایانshapebox", "پایانshift", "پایانsidebar", "پایانsimplecolumns", "پایانspecialitem", "پایانspecialitem", "پایانspecialitem", "پایانspeech", "پایانspformula", "پایانspread", "پایانstartstop", "پایانstaticMPfigure", "پایانstaticMPgraphic", "پایانstrictinspectnextcharacter", "پایانstrut", "پایانstyle", "پایانstyle", "پایانsubformulas", "پایانsubject", "پایانsubsection", "پایانsubsentence", "پایانsubstack", "پایانsubsubject", "پایانsubsubsection", "پایانsubsubsubject", "پایانsubsubsubsection", "پایانsubsubsubsubject", "پایانsubsubsubsubsection", "پایانsubsubsubsubsubject", "پایانsymbolset", "پایانtable", "پایانtable", "پایانtablehead", "پایانtables", "پایانtables", "پایانtabletail", "پایانtabletext", "پایانtabulate", "پایانtabulatehead", "پایانtabulatetail", "پایانtagged", "پایانtaglabeltext", "پایانtexcode", "پایانtexcode", "پایانtexdefinition", "پایانtext", "پایانtext", "پایانtextbackground", "پایانtextbackgroundmanual", "پایانtextcolor", "پایانtextcolorintent", "پایانtextflow", "پایانtitle", "پایانtokens", "پایانtxt", "پایانtypescript", "پایانtypescriptcollection", "پایانtyping", "پایانtyping", "پایانuniqueMPgraphic", "پایانuniqueMPpagegraphic", "پایانunittext", "پایانunpacked", "پایانusableMPgraphic", "پایانuseMPgraphic", "پایانusemathstyleparameter", "پایانusingbtxspecification", "پایانvboxtohbox", "پایانvboxtohboxseparator", "پایانviewerlayer", "پایانxcell", "پایانxcellgroup", "پایانxgroup", "پایانxmldisplayverbatim", "پایانxmlinlineverbatim", "پایانxmlraw", "پایانxmlsetups", "پایانxmlsetups", "پایانxrow", "پایانxrowgroup", "پایانxtable", "پایانxtable", "پایانxtablebody", "پایانxtablebody", "پایانxtablefoot", "پایانxtablefoot", "پایانxtablehead", "پایانxtablehead", "پایانxtablenext", "پایانxtablenext", "پایانآیتم", "پایاناما", "پایانبروبه", "پایانتنظیم‌راست", "پایانتنظیم‌وسط", "پایانتولید", "پایانتولید", "پایانحقیقت", "پایانخط‌حاشیه", "پایانخط‌حاشیه", "پایانخط‌متن", "پایاندرج‌راهنما", "پایاندرج‌شناور", "پایاندرج‌فرمول", "پایاندرج‌فرمول", "پایانرنگ", "پایانرنگ", "پایانرنگ", "پایانسر", "پایانفشرده", "پایانقالبی", "پایانمتن‌برچسب", "پایانمتن‌سر", "پایانمحیط", "پایانمحیط", "پایانمنفی", "پایانمنوی‌پانل", "پایانمولفه", "پایانمولفه", "پایاننشر", "پایاننقل", "پایاننقل‌قول", "پایانپانوشت", "پایانپانوشت", "پایانپروژه", "پایانپروژه", "پایانپس‌زمینه", "پایانپس‌زمینه", "پایانچپ‌چین", "پایان‌خط", "پایین", "پرده", "پروژه", "پروژه", "پرکردن‌میدان", "پس‌زمینه", "چوبخط", "چپ‌چین", "کشیده", "کلمه‌حاشیه", "کلمه‌راست", "گیره", "یادداشت", "یک‌جا", "یک‌خط" },
+ ["ro"]={ "AMSTEX", "AfterPar", "Alphabeticnumerals", "AmSTeX", "And", "BeforePar", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "CONTEXT", "CUVANT", "CUVINTE", "Caps", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "Cuvant", "Cuvinte", "ETEX", "EveryLine", "EveryPar", "GetPar", "GotoPar", "Greeknumerals", "INRSTEX", "Kap", "LAMSTEX", "LATEX", "LUAJITTEX", "LUATEX", "LUNA", "LaTeX", "LamSTeX", "Litera", "Litere", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKVI", "MKXI", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPVI", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPx", "MPxy", "MPxywhd", "MPy", "MetaFont", "MetaFun", "MetaPost", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Numere", "Numereromane", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "PiCTeX", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PtToCm", "ReadFile", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Smallcapped", "TABLE", "TEX", "TaBlE", "TeX", "TheNormalizedFontSize", "TransparencyHack", "VerboseNumber", "WidthSpanningText", "XETEX", "XeTeX", "ZIDINSAPTAMANA", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "activatespacehandler", "acute", "adaptcollector", "adapteazaaspect", "adaptpapersize", "addfeature", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "adubuffer", "adumarcaje", "afiseazaaspect", "afiseazaculoare", "afiseazafonttext", "afiseazagrid", "afiseazagrupculoare", "afiseazamakeup", "afiseazamediufonttext", "afiseazapaleta", "afiseazarama", "afiseazasetari", "afiseazasetsimboluri", "afiseazastruts", "afiseazatiparire", "aftersplitstring", "aftertestandsplitstring", "alignbottom", "aligned", "alignedbox", "alignedline", "alignmentcharacter", "aliniatcentru", "aliniatdreapta", "aliniatstanga", "allinputpaths", "alphabeticnumerals", "alwayscitation", "alwayscitation", "alwayscitation", "alwayscite", "alwayscite", "alwayscite", "ampersand", "anchor", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "arabicdecimals", "arabicexnumerals", "arabicnumerals", "arg", "asciistr", "ascundeblocuri", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "astype", "atleftmargin", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "automathematics", "autosetups", "availablehsize", "averagecharwidth", "backgroundimage", "backgroundimagefill", "backgroundline", "bar", "baraculoare", "barainteractiune", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbox", "beforesplitstring", "beforetestandsplitstring", "big", "bigbodyfont", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigr", "bigskip", "binom", "bitmapimage", "blanc", "blap", "bleed", "bleedheight", "bleedwidth", "blockquote", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "booleanmodevalue", "bottombox", "bottomleftbox", "bottomrightbox", "boxcursor", "boxmarker", "boxofsize", "boxreference", "bpos", "breve", "bthiddencitation", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxalwayscitation", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxlistcitation", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "btxtextcitation", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "but", "but", "butoaneinteractiune", "buton", "butonmeniu", "butonmeniu", "calligraphic", "camel", "camp", "catcodetablename", "cbox", "centeraligned", "centerbox", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkedstrippedcsname", "checkinjector", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "citat", "citation", "citation", "citation", "citation", "cite", "cite", "cite", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "cloneazacamp", "collect", "collectedtext", "collectexpanded", "coloana", "colorcomponents", "colored", "colored", "columnbreak", "com", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparagrupculoare", "comparapaleta", "comparedimension", "comparedimensioneps", "completeazanumarpagina", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completeregister", "complexorsimple", "complexorsimple", "complexorsimpleempty", "complexorsimpleempty", "componenta", "componenta", "composedcollector", "composedlayer", "compresult", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertestenumar", "convertmonth", "convertvalue", "convertvboxtohbox", "copiazacamp", "copybtxlabeltext", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copytaglabeltext", "copyunittext", "corecteazaspatiualb", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "culoare", "culoaregri", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentenvironment", "currentfeaturetest", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "cuvantdreapta", "cuvantmarginal", "d", "data", "datacurenta", "datasetvariable", "dayoftheweek", "dayspermonth", "dbinom", "ddot", "decrement", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "defineMPinstance", "defineTABLEsetup", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebutton", "definecapitals", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolumnbreak", "definecombination", "definecomment", "definecomplexorsimple", "definecomplexorsimple", "definecomplexorsimpleempty", "definecomplexorsimpleempty", "defineconversionset", "definecounter", "definedataset", "definedelimitedtext", "definedfont", "defineeffect", "defineenumerations", "defineexpandable", "defineexternalfigure", "definefallbackfamily", "definefallbackfamily", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamily", "definefontfamilypreset", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "defineformula", "defineformulaalternative", "defineframedcontent", "definefrozenfont", "defineglobalcolor", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehypenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabelclass", "definelayer", "definelayerpreset", "definelayerpreset", "definelayout", "definelinenote", "definelinenumbering", "definelines", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemarginblock", "definemargindata", "definemarker", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemultitonecolor", "definenamedcolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineornament", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "definepage", "definepagebreak", "definepagechecker", "definepagegrid", "definepagegridarea", "definepagegridspan", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "defineparagraph", "defineparallel", "defineparbuilder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "definepushbutton", "definepushsymbol", "definerenderingwindow", "defineresetset", "definescale", "definescript", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definespotcolor", "defineste", "definesteaccent", "definesteantet", "definestebloc", "definesteblocsectiune", "definestebuffer", "definestecamp", "definestecaracter", "definestecomanda", "definesteconversie", "definesteconversie", "definesteculoare", "definesteculoare", "definestedescriere", "definestedimensiunehartie", "definestedimensiunehartie", "definesteeticheta", "definestefloat", "definestefloat", "definestefont", "definestefont", "definestefonttext", "definestefonttext", "definesteformatreferinte", "definestegrupculori", "definestehbox", "definesteinconjurare", "definestelista", "definestelistacombinata", "definestemakeup", "definestemarcaje", "definestemediulfonttext", "definestemeniuinteractiune", "definesteoverlay", "definestepaleta", "definestepaleta", "definesteparagraf", "definesteprofil", "definesteprogram", "definestereferinte", "definesteregistru", "definestesablontabel", "definestesectiune", "definestesimbol", "definestesimbolfigura", "definestesinonim", "definestesinonimfont", "definestesortare", "definestestartstop", "definestestil", "definestestilfont", "definestestivacampuri", "definestesubcamp", "definestetabulatori", "definestetext", "definestetextinconjurat", "definestetyping", "definestyleinstance", "definesubformula", "definesynonym", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabulation", "definetextbackground", "definetextflow", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "defineunit", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "delimited", "delimitedtext", "depthofstring", "depthonlybox", "depthspanningtext", "despre", "determinacaracteristicilelistei", "determinacaracteristiciregistru", "determinanumartitlu", "determinenoflines", "devanagarinumerals", "dfrac", "digits", "digits", "dimensiontocount", "din", "directcolor", "directcolored", "directcolored", "directconvertedcounter", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "distributedhsize", "dividedsize", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpagestate", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseblack", "doifelsebox", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontpresent", "doifelsefontsynonym", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dostepwiserecurse", "dosubtractfeature", "dot", "dotfskip", "dotoks", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "doublebar", "doublebond", "doublebrace", "doublebracket", "doubleparent", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "dpofstring", "dummydigit", "dummyparameter", "dute", "dutebox", "dutepagina", "eTeX", "ecran", "edefconvertedargument", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "el", "elapsedseconds", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "element", "element", "emphasisboldface", "emphasistypeface", "emptylines", "emspace", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endnote", "endnote", "enskip", "enspace", "env", "envvar", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "equaldigits", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "ethiopic", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "executeifdefined", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandfontsynonym", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "faraliniiantetsisubsol", "faraliniisussijos", "faraspatiu", "fastdecrement", "fastincrement", "fastlocalframed", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "fieldbody", "fifthoffivearguments", "fifthofsixarguments", "figuraexterna", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figuresymbol", "figurewidth", "filename", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firdepar", "firstcharacter", "firstcounter", "firstcountervalue", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfieldframed", "fittopbaselinegrid", "flag", "floatuserdataparameter", "flushcollector", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "folosesteURL", "folosestebloc", "folosestedirector", "folosestedocumentextern", "folosestefiguraexterna", "folosestemodul", "folosestemuzicaexterna", "folosestescriptJS", "folosestesimboluri", "folosesteurl", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnotetext", "footnotetext", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparameters", "forgetragged", "formula", "foundbox", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "framed", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "frenchspacing", "fromlinenote", "frozenhbox", "fundal", "gdefconvertedargument", "gdefconvertedcommand", "getMPdrawing", "getMPlayer", "getboxllx", "getboxlly", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "getsubstring", "gettwopassdata", "gettwopassdatalist", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "got", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "grayvalue", "greedysplitstring", "greeknumerals", "grid", "grosimelinie", "groupedcommand", "gsetboxllx", "gsetboxlly", "gujaratinumerals", "gurmurkhinumerals", "hairspace", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hboxofvbox", "hboxreference", "hdofstring", "headhbox", "headlanguage", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsym", "headtextcontent", "headtexts", "headtextwidth", "headvbox", "headwidth", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hglue", "hiddencitation", "hiddencite", "highlight", "highordinalstr", "hilo", "himilo", "hl", "horizontalgrowingbar", "horizontalpositionbar", "hphantom", "hpos", "hsizefraction", "hsmash", "hsmashbox", "hsmashed", "hspace", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "ibox", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignorevalue", "immediatesavetwopassdata", "impartefloat", "impliedby", "implies", "in", "inalt", "includemenu", "includeversioninfo", "increment", "increment", "increment", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "index", "indreapta", "infofont", "infofontbold", "inframed", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "injos", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlinerange", "inlinie", "inmaframed", "inmargineadreapta", "inmargineastanga", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "inparteadreapta", "inparteastanga", "input", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "insertpages", "instalarelimba", "instalarelimba", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installleftframerenderer", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "instanga", "integerrounding", "intertext", "intins", "invokepageheandler", "istltdir", "istrtdir", "italic", "italicbold", "italiccorrection", "itemtag", "itm", "jobfilename", "jobfilesuffix", "jos", "jossus", "kap", "kap", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "la", "labellanguage", "labeltexts", "languageCharacters", "languagecharacters", "languagecharwidth", "lapagina", "lastcounter", "lastcountervalue", "lastdigit", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbox", "left", "leftbottombox", "leftbox", "lefthbox", "leftheadtext", "leftlabeltext", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftskipadaption", "leftsubguillemot", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lhbox", "limba", "limbaprincipala", "limitatelines", "limitatetext", "limitatetext", "limtatefirstline", "line", "linenote", "linespanningtext", "linieneagra", "liniesubtire", "linieumplere", "liniinegre", "liniisubtiri", "listcitation", "listcitation", "listcitation", "listcite", "listcite", "listcite", "listnamespaces", "litera", "litere", "llap", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lomihi", "lowerbox", "lowercased", "lowercasestring", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lrtbbox", "ltop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luafunction", "luajitTeX", "luamajorversion", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "luna", "lungimelista", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "maframed", "makecharacteractive", "makerawcommalist", "makestrutofbox", "mapfontsize", "mar", "marcaje", "marginal", "margindata", "markcontent", "markinjector", "mat", "matematica", "math", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathcommand", "mathdefault", "mathfraktur", "mathfunction", "mathit", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "mediu", "mediu", "medskip", "medspace", "meniuinteractiune", "mequal", "message", "metaTeX", "mfence", "mfunction", "mfunctionlabeltext", "mhbox", "mhookleftarrow", "mhookrightarrow", "middle", "middlealigned", "middlebox", "midhbox", "minicitat", "minimalhbox", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "moduleparameter", "molecule", "mono", "monobold", "monobold", "mononormal", "monthlong", "monthshort", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "naturalhbox", "naturalhpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "necunoscut", "negatecolorbox", "negated", "negthinspace", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newmode", "newsignal", "newsystemmode", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "nihongo", "nocitation", "nocitation", "nocite", "nocite", "nodetostring", "noffigurepages", "noflines", "noflocalfloats", "noindentation", "nokap", "nonfrenchspacing", "nonmathematics", "nop", "nop", "normal", "normalboldface", "normalframedwithsettings", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normaltypeface", "nota", "notasubsol", "notasubsol", "notesymbol", "notragged", "ntimes", "numarformula", "numarpagina", "numartitlu", "numartitlucurent", "numberofpoints", "numere", "numereromane", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "offset", "offsetbox", "olinie", "onedigitrounding", "operatorlanguage", "operatortext", "ordinaldaynumber", "ordinalstr", "ornamenttext", "ornamenttext", "ornamenttext", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "pagearea", "pagebreak", "pagefigure", "pagegridspanwidth", "pageinjection", "pageinjection", "pagestaterealpage", "pagina", "paletsize", "part", "pastreazablocuri", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "pelung", "percent", "percentdimen", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "persiandecimals", "persiannumerals", "phantom", "phantombox", "pickupgroupedcommand", "placeattachments", "placebtxrendering", "placechemical", "placecitation", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatwithsetups", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placepairedbox", "placeparallel", "placerawlist", "placerenderingwindow", "placetable", "plaseazapegrid", "plaseazapegrid", "plaseazasemnecarte", "popattribute", "popmacro", "popmode", "popsystemmode", "positionoverlay", "positionregionoverlay", "postponenotes", "potrivestecamp", "pozitie", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "presetbtxlabeltext", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "procent", "proceseazabloc", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "produs", "produs", "profiledbox", "profilegivenbox", "program", "proiect", "proiect", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psh", "puncte", "puncte", "punedeasuprafiecareia", "punefatainfata", "puneformula", "punelegenda", "punelista", "punelistacombinata", "punenotesubsol", "punenotesubsollocale", "punenumarpagina", "puneregistru", "punesubformula", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "qquad", "quad", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "ran", "randomizetext", "randomnumber", "raw", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "referenceprefix", "referinta", "referintapagina", "referintatext", "referring", "reflexie", "registerattachment", "registerctxluafile", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "remainingcharacters", "remarca", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "replacefeature", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetandaddfeature", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetdigitsmanipulation", "resetdirection", "reseteazamarcaje", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetprofile", "resetreference", "resetreplacement", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "revivefeature", "rfence", "rhbox", "right", "rightbottombox", "rightbox", "righthbox", "rightheadtext", "rightlabeltext", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightskipadaption", "rightsubguillemot", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "riglatext", "rigleumplere", "rlap", "rob", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rollbutton", "rollbutton", "roman", "roteste", "rtop", "rul", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "safechar", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scala", "scriebuffer", "scrieinlista", "scrieintreliste", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "seeindex", "select", "selecteazablocuri", "semncarte", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setarelimba", "setarepozitie", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setcurrentfontclass", "setdataset", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "seteazaaliniat", "seteazaalinierea", "seteazaantet", "seteazaaranjareapag", "seteazaaspect", "seteazaaspect", "seteazabarainteractiune", "seteazablanc", "seteazabloc", "seteazablocsectiune", "seteazabuffer", "seteazacamp", "seteazacampuri", "seteazaclipping", "seteazacoloane", "seteazacomentariu", "seteazacomentariupagina", "seteazaculoare", "seteazaculori", "seteazadimensiunihartie", "seteazadimensiunihartie", "seteazaecraninteractiune", "seteazaelemente", "seteazafloat", "seteazafonttext", "seteazaformulare", "seteazafundal", "seteazafundaluri", "seteazafundaluri", "seteazagrosimelinie", "seteazaimpartireafloat", "seteazainconjurat", "seteazaingust", "seteazainteractiunea", "seteazainteractiunea", "seteazajos", "seteazalegenda", "seteazalegenda", "seteazaliniesilabe", "seteazaliniesubtire", "seteazalinii", "seteazaliniimargine", "seteazaliniinegre", "seteazaliniiumplere", "seteazalista", "seteazalistacombinata", "seteazamajuscule", "seteazamakeup", "seteazamarcaje", "seteazameniuinteractiune", "seteazaminicitat", "seteazanumarpagina", "seteazanumarsubpagina", "seteazanumartitlu", "seteazanumerotarelinii", "seteazanumerotarepagina", "seteazanumerotareparagrafe", "seteazapaleta", "seteazaparagrafe", "seteazaparagrafe", "seteazaplasareaopozita", "seteazaprograme", "seteazareferinte", "seteazaregistru", "seteazaregistru", "seteazarigletext", "seteazarigleumplere", "seteazarotare", "seteazasimbol", "seteazasinonime", "seteazasortare", "seteazaspatiu", "seteazaspatiualb", "seteazaspatiuinterliniar", "seteazaspatiuinterliniar", "seteazaspatiuinterliniar", "seteazaspatiuinterliniar", "seteazaspatiuinterliniar", "seteazaspatiuinterliniar", "seteazasubsol", "seteazasus", "seteazatabele", "seteazatabulatori", "seteazatext", "seteazatexteantet", "seteazatextejos", "seteazatextesubsol", "seteazatextesus", "seteazatextetext", "seteazatexteticheta", "seteazatexttitlu", "seteazatitlu", "seteazatoleranta", "seteazatranzitiepagina", "seteazatype", "seteazatyping", "seteazaurl", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setfirstline", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelements", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayerframed", "setlayertext", "setlocalhsize", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setmode", "setnostrut", "setnote", "setnote", "setnotetext", "setnotetext", "setobject", "setoldstyle", "setpagegrid", "setpagereference", "setpagestate", "setpagestaterealpageno", "setpenalties", "setpercentdimen", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacement", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsectionblock", "setsimplecolumnhsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settextcontent", "settightobject", "settightreferencedobject", "settightunreferencedobject", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupattachment", "setupbackend", "setupbar", "setupbleeding", "setupbookmark", "setupbtx", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbutton", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupcollector", "setupcolumnspan", "setupcombination", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenv", "setupexport", "setupexternalfigure", "setupexternalsoundtracks", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfieldtotalframed", "setupfiller", "setupfirstline", "setupfittingpage", "setupfloatcaption", "setupfontexpansion", "setupfontprotrusion", "setupfontsolution", "setupformula", "setupframedcontent", "setupframedtext", "setupglobalreferenceprefix", "setupheadalternative", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setupindentedtext", "setupindex", "setupinitial", "setupinsertion", "setupitaliccorrection", "setupitemgroup", "setupitemgroup", "setuplabel", "setuplayer", "setuplayeredtext", "setuplayouttext", "setuplinenote", "setuplinetable", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupnotation", "setupnote", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoutputroutine", "setupoutputroutine", "setuppagechecker", "setuppagegrid", "setuppagegridarea", "setuppagegridareatext", "setuppagegridlines", "setuppagegridspan", "setuppagegridstart", "setuppageinjection", "setuppageinjectionalternative", "setuppageshift", "setuppagestate", "setuppairedbox", "setuppaper", "setupparagraph", "setupparagraphintro", "setupparallel", "setupperiods", "setupplacement", "setuppositionbar", "setupprefixtext", "setupprocessor", "setupprofile", "setupquotation", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setuprenderingwindow", "setups", "setups", "setupscale", "setupscript", "setupselector", "setupshift", "setupsidebar", "setupspellchecking", "setupstartstop", "setupstretched", "setupstruts", "setupstyle", "setupsubformula", "setuptabulation", "setuptagging", "setuptaglabeltext", "setuptextbackground", "setuptextflow", "setuptooltip", "setupunit", "setupunittext", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvisualizerfont", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "sfrac", "shapedhbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showboxes", "showbtxdatasetauthors", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxdatasetfields", "showbtxfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolorbar", "showcolorcomponents", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showglyphs", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showparentchain", "showsetupsdefinition", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "sim", "simbol", "simbol", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "sixthofsixarguments", "slanted", "slantedbold", "slicepages", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "snaptogrid", "snaptogrid", "someheadnumber", "somekindoftab", "somelocalfloat", "somenamedheadnumber", "someplace", "spanishNumerals", "spanishnumerals", "spatiifixate", "spatiu", "spatiufixat", "speech", "splitdfrac", "splitfilename", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqrt", "stackrel", "startJScode", "startJSpreamble", "startLUA", "startLUA", "startMP", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startPARSEDXML", "startTABLE", "startTABLE", "startTABLEbody", "startTABLEbody", "startTABLEfoot", "startTABLEfoot", "startTABLEhead", "startTABLEhead", "startTABLEnext", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startXML", "startalign", "startalignment", "startaliniatcentru", "startaliniatdreapta", "startaliniatstanga", "startallmodes", "startappendices", "startarrangedpages", "startattachment", "startbackmatter", "startbar", "startbar", "startbitmapimage", "startblockquote", "startbodymatter", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startbuffer", "startbut", "startcases", "startcatcodetable", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startcitat", "startcollect", "startcollecting", "startcolorintent", "startcolorset", "startcolumns", "startcolumnspan", "startcom", "startcombination", "startcombination", "startcomment", "startcomponenta", "startcomponenta", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startculoare", "startculoare", "startculoare", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "startdute", "starteffect", "startelement", "startembeddedxtable", "startembeddedxtable", "startendnote", "startendnote", "startendofline", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfact", "startfigure", "startfiguretext", "startfittingpage", "startfloatcombination", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startformula", "startformulas", "startframed", "startframedcontent", "startframedtext", "startfrontmatter", "startfundal", "startfundal", "startgot", "startgraphictext", "startgridsnapping", "startgridsnapping", "starthboxestohbox", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startimpachetat", "startindentation", "startindentedtext", "startinteraction", "startinterface", "startintermezzotext", "startintertext", "startitemgroup", "startitemize", "startknockout", "startlayout", "startlegend", "startlinealignment", "startlinecorrection", "startlinenote", "startlinenumbering", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlinie", "startliniemargine", "startliniemargine", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startluasetups", "startmakeup", "startmarginblock", "startmarkedcontent", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmediu", "startmediu", "startmeniuinteractiune", "startmiddlealigned", "startminicitat", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmodule", "startmoduletestsection", "startmpformula", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrow", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnop", "startnotallmodes", "startnotasubsol", "startnotasubsol", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpagecomment", "startpagefigure", "startpagegrid", "startpagegridspan", "startpagelayout", "startpar", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplacegraphic", "startplaceintermezzo", "startplacepairedbox", "startplacetable", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startprodus", "startprodus", "startproiect", "startproiect", "startprotect", "startprotectedcolors", "startpsh", "startpublicatie", "startpunctuation", "startpuneformula", "startpuneformula", "startpunelegenda", "startrandomized", "startrandomseed", "startraw", "startrawsetups", "startrawsetups", "startreadingfile", "startreferenceprefix", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startriglatext", "startrob", "startrul", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspecialitem", "startspecialitem", "startspeech", "startspformula", "startspread", "startstartstop", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startstyle", "startsubformulas", "startsubject", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsymbolset", "starttable", "starttable", "starttablehead", "starttables", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexcode", "starttexdefinition", "starttext", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttexteticheta", "starttextflow", "starttexttitlu", "starttitle", "starttitlu", "starttokens", "starttxt", "starttypescript", "starttypescriptcollection", "starttyping", "starttyping", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startusingbtxspecification", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startxcell", "startxcellgroup", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtable", "startxtablebody", "startxtablebody", "startxtablefoot", "startxtablefoot", "startxtablehead", "startxtablehead", "startxtablenext", "startxtablenext", "stivacampuri", "stopJScode", "stopJSpreamble", "stopLUA", "stopLUA", "stopMP", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopPARSEDXML", "stopTABLE", "stopTABLE", "stopTABLEbody", "stopTABLEbody", "stopTABLEfoot", "stopTABLEfoot", "stopTABLEhead", "stopTABLEhead", "stopTABLEnext", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopXML", "stopalign", "stopalignment", "stopaliniatcentru", "stopaliniatdreapta", "stopaliniatstanga", "stopallmodes", "stopappendices", "stoparrangedpages", "stopattachment", "stopbackmatter", "stopbar", "stopbar", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopbuffer", "stopbut", "stopcases", "stopcatcodetable", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopcitat", "stopcollect", "stopcollecting", "stopcolorintent", "stopcolorset", "stopcolumns", "stopcolumnspan", "stopcom", "stopcombination", "stopcombination", "stopcomment", "stopcomponenta", "stopcomponenta", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopculoare", "stopculoare", "stopculoare", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopdute", "stopeffect", "stopelement", "stopembeddedxtable", "stopembeddedxtable", "stopendnote", "stopendnote", "stopendofline", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfact", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfloatcombination", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopformula", "stopformulas", "stopframed", "stopframedcontent", "stopframedtext", "stopfrontmatter", "stopfundal", "stopfundal", "stopgot", "stopgraphictext", "stopgridsnapping", "stopgridsnapping", "stophboxestohbox", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopimpachetat", "stopindentation", "stopindentedtext", "stopinteraction", "stopinterface", "stopintermezzotext", "stopintertext", "stopitemgroup", "stopitemize", "stopknockout", "stoplayout", "stoplegend", "stoplinealignment", "stoplinecorrection", "stoplinenote", "stoplinenumbering", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplinie", "stopliniemargine", "stopliniemargine", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarkedcontent", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmediu", "stopmediu", "stopmeniuinteractiune", "stopmiddlealigned", "stopminicitat", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrow", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnop", "stopnotallmodes", "stopnotasubsol", "stopnotasubsol", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppagecomment", "stoppagefigure", "stoppagegrid", "stoppagegridspan", "stoppagelayout", "stoppar", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplacegraphic", "stopplaceintermezzo", "stopplacepairedbox", "stopplacetable", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopprodus", "stopprodus", "stopproiect", "stopproiect", "stopprotect", "stopprotectedcolors", "stoppsh", "stoppublicatie", "stoppunctuation", "stoppuneformula", "stoppuneformula", "stoppunelegenda", "stoprandomized", "stoprandomseed", "stopraw", "stoprawsetups", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopreferenceprefix", "stopregime", "stopregister", "stopreusableMPgraphic", "stopriglatext", "stoprob", "stoprul", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspecialitem", "stopspecialitem", "stopspeech", "stopspformula", "stopspread", "stopstartstop", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstructurepageregister", "stopstrut", "stopstyle", "stopstyle", "stopsubformulas", "stopsubject", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsymbolset", "stoptable", "stoptable", "stoptablehead", "stoptables", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexcode", "stoptexdefinition", "stoptext", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptexteticheta", "stoptextflow", "stoptexttitlu", "stoptitle", "stoptitlu", "stoptokens", "stoptxt", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stoptyping", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopusingbtxspecification", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopxcell", "stopxcellgroup", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtable", "stopxtablebody", "stopxtablebody", "stopxtablefoot", "stopxtablefoot", "stopxtablehead", "stopxtablehead", "stopxtablenext", "stopxtablenext", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "style", "styleinstance", "sub", "subject", "subpagenumber", "subsection", "subsentence", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "subtractfeature", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "switchstyleonly", "switchstyleonly", "switchtocolor", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "switchtointerlinespace", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tbinom", "tbox", "tequal", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textcitation", "textcitation", "textcitation", "textcite", "textcite", "textcite", "textcontrolspace", "texteticheta", "textflowcollector", "textmarginal", "textmath", "textminus", "textormathchar", "textplus", "texttitlu", "textumplere", "textvisiblespace", "tfrac", "thai", "thainumerals", "thefirstcharacter", "thenormalizedbodyfontsize", "theremainingcharacters", "thickspace", "thinspace", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thookleftarrow", "thookrightarrow", "threedigitrounding", "tibetannumerals", "tightlayer", "tilde", "tinyfont", "title", "titlu", "titlumarginal", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "tochar", "tolinenote", "tooltip", "tooltip", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "traceoutputroutines", "tracepositions", "traduce", "transparencycomponents", "trecilafonttext", "trel", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "truefilename", "truefontname", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "twodigitrounding", "tx", "txt", "txt", "txx", "typ", "typ", "type", "type", "typedefinedbuffer", "typeface", "typefile", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetfile", "uconvertnumber", "uedcatcodecommand", "undefinevalue", "undepthed", "underbar", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undeva", "undoassign", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unittext", "unprotected", "unregisterhyphenationpattern", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "untexargument", "untexcommand", "uppercased", "uppercasestring", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "url", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "usealignparameter", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecolors", "usecomponent", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternalrendering", "usefigurebase", "usefile", "usegridparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "usemathstyleparameter", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usetexmodule", "usetypescript", "usetypescriptfile", "usezipfile", "utfchar", "utflower", "utfupper", "utilityregisterlength", "valoareculoare", "vboxreference", "vec", "verbatim", "verbatimstring", "verbosenumber", "versiune", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wdofstring", "widthofstring", "widthspanningtext", "withoutpt", "word", "words", "wordtonumber", "writedatatolist", "writestatus", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifelse", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "zidinsaptamana" },
} \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-metafun.lua b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
index 547b8c14507..b403fd54f42 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
@@ -1,4 +1,4 @@
return {
- ["commands"]={ "transparency", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "textext", "thetextext", "rawtextext", "textextoffset", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "normalfill", "normaldraw", "visualizepaths", "naturalizepaths", "drawboundary", "drawwholepath", "visualizeddraw", "visualizedfill", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "format", "formatted", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "area" },
- ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "metapostversion", "maxdimensions" },
+ ["commands"]={ "transparency", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshadestep", "withshadefraction", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "textext", "thetextext", "rawtextext", "textextoffset", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "format", "formatted", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright" },
+ ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "metapostversion", "maxdimensions", "drawoptionsfactor" },
} \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-tex.lua b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-tex.lua
index 428818dd04d..30305f5ecb4 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-tex.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/data/scite-context-data-tex.lua
@@ -1,9 +1,9 @@
return {
["aleph"]={ "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion", "Omegaminorversion", "Omegarevision", "Omegaversion", "boxdir", "pagebottomoffset", "pagerightoffset" },
["etex"]={ "botmarks", "clubpenalties", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "detokenize", "dimexpr", "displaywidowpenalties", "eTeXVersion", "eTeXminorversion", "eTeXrevision", "eTeXversion", "everyeof", "firstmarks", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "ifcsname", "ifdefined", "iffontchar", "interactionmode", "interlinepenalties", "lastlinefit", "lastnodetype", "marks", "muexpr", "mutoglue", "numexpr", "pagediscards", "parshapedimen", "parshapeindent", "parshapelength", "predisplaydirection", "protected", "readline", "savinghyphcodes", "savingvdiscards", "scantokens", "showgroups", "showifs", "showtokens", "splitbotmarks", "splitdiscards", "splitfirstmarks", "topmarks", "tracingassigns", "tracinggroups", "tracingifs", "tracingnesting", "tracingscantokens", "unexpanded", "unless", "widowpenalties" },
- ["luatex"]={ "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Umathaccent", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathchar", "Umathchardef", "Umathcharnum", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Uoverdelimiter", "Uradical", "Uroot", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "alignmark", "aligntab", "attribute", "attributedef", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "fontid", "formatname", "gleaders", "ifabsdim", "ifabsnum", "ifprimitive", "initcatcodetable", "latelua", "luaescapestring", "luastartup", "luatexbanner", "luatexrevision", "luatexversion", "luafunction", "mathstyle", "nokerns", "noligs", "outputbox", "pageleftoffset", "pagetopoffset", "postexhyphenchar", "posthyphenchar", "preexhyphenchar", "prehyphenchar", "primitive", "savecatcodetable", "scantextokens", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "suppressmathparerror", "matheqnogapstep", "synctex" },
+ ["luatex"]={ "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathcodenumdef", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Umiddle", "Uoverdelimiter", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "alignmark", "aligntab", "attribute", "attributedef", "bodydir", "boundary", "boxdir", "catcodetable", "clearmarks", "copyfont", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "draftmode", "dviextension", "dvifeedback", "dvivariable", "efcode", "hjcode", "firstvalidlanguage", "fontid", "formatname", "gleaders", "hyphenationmin", "ifabsdim", "ifabsnum", "ifprimitive", "ignoreligaturesinfont", "initcatcodetable", "insertht", "lastsavedboxresourceindex", "lastsavedimageresourceindex", "lastsavedimageresourcepages", "lastxpos", "lastypos", "latelua", "leftghost", "leftmarginkern", "letcharcode", "letterspacefont", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luaescapestring", "luatexbanner", "luatexrevision", "luatexversion", "luafunction", "mathdir", "mathdisplayskipmode", "matheqnogapstep", "mathoption", "mathscriptsmode", "mathstyle", "mathsurroundskip", "noboundary", "nokerns", "nohrule", "noligs", "nospaces", "novrule", "normaldeviate", "outputbox", "outputmode", "pagedir", "pageheight", "pagebottomoffset", "pageleftoffset", "pagerightoffset", "pagetopoffset", "pagewidth", "pardir", "pdfextension", "pdffeedback", "pdfvariable", "postexhyphenchar", "posthyphenchar", "preexhyphenchar", "prehyphenchar", "primitive", "protrudechars", "protrusionboundary", "pxdimen", "randomseed", "rightghost", "rightmarginkern", "rpcode", "saveboxresource", "savecatcodetable", "saveimageresource", "savepos", "scantextokens", "setfontid", "setrandomseed", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "suppressmathparerror", "synctex", "tagcode", "textdir", "tracingfonts", "uniformdeviate", "useboxresource", "useimageresource", "wordboundary", "vpack", "hpack", "tpack", "csstring", "begincsname", "lastnamedcs", "toksapp", "tokspre", "etoksapp", "etokspre" },
["omega"]={ "OmegaVersion", "bodydir", "chardp", "charht", "charit", "charwd", "leftghost", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "mathdir", "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "oradical", "pagedir", "pageheight", "pagewidth", "pardir", "rightghost", "textdir" },
- ["pdftex"]={ "efcode", "expanded", "ifincsname", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "leftmarginkern", "letterspacefont", "lpcode", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagecolordepth", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoptionpdfminorversion", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "pdfximagebbox", "quitvmode", "rightmarginkern", "rpcode", "tagcode" },
- ["tex"]={ "-", "/", "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion", "OmegaVersion", "Omegaminorversion", "Omegarevision", "Omegaversion", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Umathaccent", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathchar", "Umathchardef", "Umathcharnum", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Uoverdelimiter", "Uradical", "Uroot", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "alignmark", "aligntab", "atop", "atopwithdelims", "attribute", "attributedef", "badness", "baselineskip", "batchmode", "begingroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "bodydir", "botmark", "botmarks", "box", "boxdir", "boxmaxdepth", "brokenpenalty", "catcode", "catcodetable", "char", "chardef", "cleaders", "clearmarks", "closein", "closeout", "clubpenalties", "clubpenalty", "copy", "count", "countdef", "cr", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "crcr", "csname", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "detokenize", "dimen", "dimendef", "dimexpr", "directlua", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalties", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "eTeXVersion", "eTeXminorversion", "eTeXrevision", "eTeXversion", "edef", "efcode", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyeof", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "expanded", "fam", "fi", "finalhyphendemerits", "firstmark", "firstmarks", "floatingpenalty", "font", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "fontdimen", "fontid", "fontname", "formatname", "futurelet", "gdef", "gleaders", "global", "globaldefs", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "hoffset", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifabsdim", "ifabsnum", "ifcase", "ifcat", "ifcsname", "ifdefined", "ifdim", "ifeof", "iffalse", "iffontchar", "ifhbox", "ifhmode", "ifincsname", "ifinner", "ifmmode", "ifnum", "ifodd", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "ifprimitive", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "immediate", "indent", "initcatcodetable", "input", "inputlineno", "insert", "insertpenalties", "interactionmode", "interlinepenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastlinefit", "lastnodetype", "lastpenalty", "lastskip", "latelua", "lccode", "leaders", "left", "leftghost", "lefthyphenmin", "leftmarginkern", "leftskip", "leqno", "let", "letterspacefont", "limits", "linepenalty", "lineskip", "lineskiplimit", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "long", "looseness", "lower", "lowercase", "lpcode", "luaescapestring", "luastartup", "luatexbanner", "luatexrevision", "luatexversion", "mag", "mark", "marks", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathdir", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathstyle", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "muexpr", "multiply", "muskip", "muskipdef", "mutoglue", "newlinechar", "noalign", "noboundary", "noexpand", "noindent", "nokerns", "noligs", "nolimits", "nolocaldirs", "nolocalwhatsits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "numexpr", "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "omit", "openin", "openout", "or", "oradical", "outer", "output", "outputbox", "outputpenalty", "over", "overfullrule", "overline", "overwithdelims", "pagebottomoffset", "pagedepth", "pagedir", "pagediscards", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageheight", "pageleftoffset", "pagerightoffset", "pageshrink", "pagestretch", "pagetopoffset", "pagetotal", "pagewidth", "par", "pardir", "parfillskip", "parindent", "parshape", "parshapedimen", "parshapeindent", "parshapelength", "parskip", "patterns", "pausing", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagecolordepth", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoptionpdfminorversion", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "pdfximagebbox", "penalty", "postdisplaypenalty", "postexhyphenchar", "posthyphenchar", "predisplaydirection", "predisplaypenalty", "predisplaysize", "preexhyphenchar", "prehyphenchar", "pretolerance", "prevdepth", "prevgraf", "primitive", "protected", "quitvmode", "radical", "raise", "read", "readline", "relax", "relpenalty", "right", "rightghost", "righthyphenmin", "rightmarginkern", "rightskip", "romannumeral", "rpcode", "savecatcodetable", "savinghyphcodes", "savingvdiscards", "scantextokens", "scantokens", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showgroups", "showifs", "showlists", "showthe", "showtokens", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "special", "splitbotmark", "splitbotmarks", "splitdiscards", "splitfirstmark", "splitfirstmarks", "splitmaxdepth", "splittopskip", "string", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "synctex", "tabskip", "tagcode", "textdir", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "toks", "toksdef", "tolerance", "topmark", "topmarks", "topskip", "tracingassigns", "tracingcommands", "tracinggroups", "tracingifs", "tracinglostchars", "tracingmacros", "tracingnesting", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingscantokens", "tracingstats", "uccode", "uchyph", "underline", "unexpanded", "unhbox", "unhcopy", "unkern", "unless", "unpenalty", "unskip", "unvbox", "unvcopy", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "voffset", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalties", "widowpenalty", "write", "xdef", "xleaders", "xspaceskip", "year" },
+ ["pdftex"]={ "efcode", "expanded", "ifincsname", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "leftmarginkern", "letterspacefont", "lpcode", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlineheight", "pdfeachlinedepth", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfxformmargin", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfignoreunknownimages", "pdfinclusionerrorlevel", "pdfignoreunknownimages", "pdfinfo", "pdfinfoomitdate", "pdftrailerid", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfpkfixeddpi", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfsuppressptexinfo", "pdfsuppressoptionalinfo", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "quitvmode", "rightmarginkern", "rpcode", "tagcode" },
+ ["tex"]={ "-", "/", "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion", "OmegaVersion", "Omegaminorversion", "Omegarevision", "Omegaversion", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathcodenumdef", "Umathconnectoroverlapmin", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervgap", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvgap", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervgap", "Umiddle", "Uoverdelimiter", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Usubscript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "alignmark", "aligntab", "atop", "atopwithdelims", "attribute", "attributedef", "badness", "baselineskip", "batchmode", "begingroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "bodydir", "botmark", "botmarks", "boundary", "box", "boxdir", "boxmaxdepth", "brokenpenalty", "catcode", "catcodetable", "char", "chardef", "cleaders", "clearmarks", "closein", "closeout", "clubpenalties", "clubpenalty", "copy", "copyfont", "count", "countdef", "cr", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "crcr", "csname", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "detokenize", "dimen", "dimendef", "dimexpr", "directlua", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalties", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "dviextension", "dvifeedback", "dvivariable", "eTeXVersion", "eTeXminorversion", "eTeXrevision", "eTeXversion", "edef", "efcode", "hjcode", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyeof", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "expanded", "expandglyphsinfont", "fam", "fi", "finalhyphendemerits", "firstmark", "firstmarks", "floatingpenalty", "font", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "fontdimen", "firstvalidlanguage", "fontid", "fontname", "formatname", "futurelet", "gdef", "gleaders", "global", "globaldefs", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "hoffset", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifabsdim", "ifabsnum", "ifcase", "ifcat", "ifcsname", "ifdefined", "ifdim", "ifeof", "iffalse", "iffontchar", "ifhbox", "ifhmode", "ifincsname", "ifinner", "ifmmode", "ifnum", "ifodd", "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "ifprimitive", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignoreligaturesinfont", "ignorespaces", "immediate", "indent", "initcatcodetable", "input", "inputlineno", "insert", "insertpenalties", "interactionmode", "interlinepenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastlinefit", "lastnodetype", "lastpenalty", "lastsavedboxresourceindex", "lastsavedimageresourceindex", "lastsavedimageresourcepages", "lastskip", "lastxpos", "lastypos", "latelua", "lccode", "leaders", "left", "leftghost", "lefthyphenmin", "leftmarginkern", "leftskip", "leqno", "let", "letcharcode", "letterspacefont", "limits", "linepenalty", "lineskip", "lineskiplimit", "localbrokenpenalty", "localinterlinepenalty", "localleftbox", "localrightbox", "long", "looseness", "lower", "lowercase", "lpcode", "luaescapestring", "luatexbanner", "luatexrevision", "luatexversion", "mag", "mark", "marks", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathdir", "mathdisplayskipmode", "matheqnogapstep", "mathinner", "mathop", "mathopen", "mathoption", "mathord", "mathpunct", "mathrel", "mathscriptsmode", "mathstyle", "mathsurroundskip", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "muexpr", "multiply", "muskip", "muskipdef", "mutoglue", "newlinechar", "noalign", "noboundary", "noexpand", "noindent", "nokerns", "nohrule", "noligs", "nospaces", "novrule", "nolimits", "nolocaldirs", "nolocalwhatsits", "nonscript", "nonstopmode", "normaldeviate", "nulldelimiterspace", "nullfont", "number", "numexpr", "odelcode", "odelimiter", "omathaccent", "omathchar", "omathchardef", "omathcode", "omit", "openin", "openout", "or", "oradical", "outer", "output", "outputbox", "outputpenalty", "over", "overfullrule", "overline", "overwithdelims", "pagebottomoffset", "pagedepth", "pagedir", "pagediscards", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageheight", "pageleftoffset", "pagerightoffset", "pageshrink", "pagestretch", "pagetopoffset", "pagetotal", "pagewidth", "par", "pardir", "parfillskip", "parindent", "parshape", "parshapedimen", "parshapeindent", "parshapelength", "parskip", "patterns", "pausing", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlineheight", "pdfeachlinedepth", "pdfendlink", "pdfendthread", "pdfextension", "pdfvariable", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfxformmargin", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfimageaddfilename", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfignoreunknownimages", "pdfinfo", "pdfinfoomitdate", "pdftrailerid", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkmode", "pdfpkresolution", "pdfpkfixeddpi", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfsuppressptexinfo", "pdfsuppressoptionalinfo", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformname", "pdfxformresources", "pdfximage", "penalty", "postdisplaypenalty", "postexhyphenchar", "posthyphenchar", "predisplaydirection", "predisplaypenalty", "predisplaysize", "preexhyphenchar", "prehyphenchar", "pretolerance", "prevdepth", "prevgraf", "primitive", "protected", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "radical", "raise", "randomseed", "read", "readline", "relax", "relpenalty", "right", "rightghost", "righthyphenmin", "rightmarginkern", "rightskip", "romannumeral", "rpcode", "saveboxresource", "saveimageresource", "savepos", "savecatcodetable", "savinghyphcodes", "savingvdiscards", "scantextokens", "scantokens", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setfontid", "setlanguage", "setrandomseed", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showgroups", "showifs", "showlists", "showthe", "showtokens", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "special", "splitbotmark", "splitbotmarks", "splitdiscards", "splitfirstmark", "splitfirstmarks", "splitmaxdepth", "splittopskip", "string", "suppressfontnotfounderror", "suppressifcsnameerror", "suppresslongerror", "suppressoutererror", "synctex", "tabskip", "tagcode", "textdir", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "toks", "toksdef", "tolerance", "topmark", "topmarks", "topskip", "tracingassigns", "tracingcommands", "tracingfonts", "tracinggroups", "tracingifs", "tracinglostchars", "tracingmacros", "tracingnesting", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingscantokens", "tracingstats", "uccode", "uchyph", "underline", "unexpanded", "unhbox", "unhcopy", "uniformdeviate", "unkern", "unless", "unpenalty", "unskip", "unvbox", "unvcopy", "uppercase", "useboxresource", "useimageresource", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "voffset", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalties", "widowpenalty", "wordboundary", "write", "xdef", "xleaders", "xspaceskip", "year", "vpack", "hpack", "tpack", "csstring", "begincsname", "lastnamedcs", "toksapp", "tokspre", "etoksapp", "etokspre" },
["xetex"]={ "XeTeXversion" },
} \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-cpp.lua b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
index 31180e6a574..91ada782889 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-cpp.lua
@@ -87,7 +87,7 @@ local operator = token("special", S("+-*/%^!=<>;:{}[]().&|?~"))
----- optionalspace = spacing^0
-local p_keywords = exact_match(keywords )
+local p_keywords = exact_match(keywords)
local p_datatypes = exact_match(datatypes)
local p_macros = exact_match(macros)
@@ -154,7 +154,7 @@ end
cpplexer._tokenstyles = context.styleset
-cpplexer._foldpattern = P("/*") + P("*/") + S("{}") -- separate entry else interference
+cpplexer._foldpattern = P("/*") + P("*/") + S("{}") -- separate entry else interference (singular?)
cpplexer._foldsymbols = {
_patterns = {
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-mps.lua b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-mps.lua
index b87ea83cb53..fa335eb3fb1 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-mps.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-mps.lua
@@ -122,6 +122,8 @@ local stopluacode = #stoplua * token("embedded", stoplua)
lexer.embed_lexer(metafunlexer, cldlexer, startluacode, stopluacode)
+local luacall = token("embedded",P("lua") * ( P(".") * R("az","AZ","__")^1 )^1)
+
metafunlexer._rules = {
{ "whitespace", spacing },
{ "comment", comment },
@@ -130,6 +132,7 @@ metafunlexer._rules = {
{ "helper", helper },
{ "plain", plain },
{ "primitive", primitive },
+ { "luacall", luacall },
{ "texstuff", texstuff },
{ "identifier", identifier },
{ "number", number },
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-sql.lua b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-sql.lua
new file mode 100644
index 00000000000..62f0fa82051
--- /dev/null
+++ b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-sql.lua
@@ -0,0 +1,238 @@
+local info = {
+ version = 1.001,
+ comment = "scintilla lpeg lexer for sql",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local P, R, S = lpeg.P, lpeg.R, lpeg.S
+
+local lexer = require("lexer")
+local context = lexer.context
+local patterns = context.patterns
+
+local token = lexer.token
+local exact_match = lexer.exact_match
+
+local sqllexer = lexer.new("sql","scite-context-lexer-sql")
+local whitespace = sqllexer.whitespace
+
+-- ANSI SQL 92 | 99 | 2003
+
+local keywords_standard = {
+ "absolute", "action", "add", "after", "all", "allocate", "alter", "and", "any",
+ "are", "array", "as", "asc", "asensitive", "assertion", "asymmetric", "at",
+ "atomic", "authorization", "avg", "before", "begin", "between", "bigint",
+ "binary", "bit", "bit_length", "blob", "boolean", "both", "breadth", "by",
+ "call", "called", "cascade", "cascaded", "case", "cast", "catalog", "char",
+ "char_length", "character", "character_length", "check", "clob", "close",
+ "coalesce", "collate", "collation", "column", "commit", "condition", "connect",
+ "connection", "constraint", "constraints", "constructor", "contains", "continue",
+ "convert", "corresponding", "count", "create", "cross", "cube", "current",
+ "current_date", "current_default_transform_group", "current_path",
+ "current_role", "current_time", "current_timestamp",
+ "current_transform_group_for_type", "current_user", "cursor", "cycle", "data",
+ "date", "day", "deallocate", "dec", "decimal", "declare", "default",
+ "deferrable", "deferred", "delete", "depth", "deref", "desc", "describe",
+ "descriptor", "deterministic", "diagnostics", "disconnect", "distinct", "do",
+ "domain", "double", "drop", "dynamic", "each", "element", "else", "elseif",
+ "end", "equals", "escape", "except", "exception", "exec", "execute", "exists",
+ "exit", "external", "extract", "false", "fetch", "filter", "first", "float",
+ "for", "foreign", "found", "free", "from", "full", "function", "general", "get",
+ "global", "go", "goto", "grant", "group", "grouping", "handler", "having",
+ "hold", "hour", "identity", "if", "immediate", "in", "indicator", "initially",
+ "inner", "inout", "input", "insensitive", "insert", "int", "integer",
+ "intersect", "interval", "into", "is", "isolation", "iterate", "join", "key",
+ "language", "large", "last", "lateral", "leading", "leave", "left", "level",
+ "like", "local", "localtime", "localtimestamp", "locator", "loop", "lower",
+ "map", "match", "max", "member", "merge", "method", "min", "minute", "modifies",
+ "module", "month", "multiset", "names", "national", "natural", "nchar", "nclob",
+ "new", "next", "no", "none", "not", "null", "nullif", "numeric", "object",
+ "octet_length", "of", "old", "on", "only", "open", "option", "or", "order",
+ "ordinality", "out", "outer", "output", "over", "overlaps", "pad", "parameter",
+ "partial", "partition", "path", "position", "precision", "prepare", "preserve",
+ "primary", "prior", "privileges", "procedure", "public", "range", "read",
+ "reads", "real", "recursive", "ref", "references", "referencing", "relative",
+ "release", "repeat", "resignal", "restrict", "result", "return", "returns",
+ "revoke", "right", "role", "rollback", "rollup", "routine", "row", "rows",
+ "savepoint", "schema", "scope", "scroll", "search", "second", "section",
+ "select", "sensitive", "session", "session_user", "set", "sets", "signal",
+ "similar", "size", "smallint", "some", "space", "specific", "specifictype",
+ "sql", "sqlcode", "sqlerror", "sqlexception", "sqlstate", "sqlwarning", "start",
+ "state", "static", "submultiset", "substring", "sum", "symmetric", "system",
+ "system_user", "table", "tablesample", "temporary", "then", "time", "timestamp",
+ "timezone_hour", "timezone_minute", "to", "trailing", "transaction", "translate",
+ "translation", "treat", "trigger", "trim", "true", "under", "undo", "union",
+ "unique", "unknown", "unnest", "until", "update", "upper", "usage", "user",
+ "using", "value", "values", "varchar", "varying", "view", "when", "whenever",
+ "where", "while", "window", "with", "within", "without", "work", "write", "year",
+ "zone",
+}
+
+-- The dialects list is taken from drupal.org with standard subtracted.
+--
+-- MySQL 3.23.x | 4.x | 5.x
+-- PostGreSQL 8.1
+-- MS SQL Server 2000
+-- MS ODBC
+-- Oracle 10.2
+
+local keywords_dialects = {
+ "a", "abort", "abs", "access", "ada", "admin", "aggregate", "alias", "also",
+ "always", "analyse", "analyze", "assignment", "attribute", "attributes", "audit",
+ "auto_increment", "avg_row_length", "backup", "backward", "bernoulli", "bitvar",
+ "bool", "break", "browse", "bulk", "c", "cache", "cardinality", "catalog_name",
+ "ceil", "ceiling", "chain", "change", "character_set_catalog",
+ "character_set_name", "character_set_schema", "characteristics", "characters",
+ "checked", "checkpoint", "checksum", "class", "class_origin", "cluster",
+ "clustered", "cobol", "collation_catalog", "collation_name", "collation_schema",
+ "collect", "column_name", "columns", "command_function", "command_function_code",
+ "comment", "committed", "completion", "compress", "compute", "condition_number",
+ "connection_name", "constraint_catalog", "constraint_name", "constraint_schema",
+ "containstable", "conversion", "copy", "corr", "covar_pop", "covar_samp",
+ "createdb", "createrole", "createuser", "csv", "cume_dist", "cursor_name",
+ "database", "databases", "datetime", "datetime_interval_code",
+ "datetime_interval_precision", "day_hour", "day_microsecond", "day_minute",
+ "day_second", "dayofmonth", "dayofweek", "dayofyear", "dbcc", "defaults",
+ "defined", "definer", "degree", "delay_key_write", "delayed", "delimiter",
+ "delimiters", "dense_rank", "deny", "derived", "destroy", "destructor",
+ "dictionary", "disable", "disk", "dispatch", "distinctrow", "distributed", "div",
+ "dual", "dummy", "dump", "dynamic_function", "dynamic_function_code", "enable",
+ "enclosed", "encoding", "encrypted", "end-exec", "enum", "errlvl", "escaped",
+ "every", "exclude", "excluding", "exclusive", "existing", "exp", "explain",
+ "fields", "file", "fillfactor", "final", "float4", "float8", "floor", "flush",
+ "following", "force", "fortran", "forward", "freetext", "freetexttable",
+ "freeze", "fulltext", "fusion", "g", "generated", "granted", "grants",
+ "greatest", "header", "heap", "hierarchy", "high_priority", "holdlock", "host",
+ "hosts", "hour_microsecond", "hour_minute", "hour_second", "identified",
+ "identity_insert", "identitycol", "ignore", "ilike", "immutable",
+ "implementation", "implicit", "include", "including", "increment", "index",
+ "infile", "infix", "inherit", "inherits", "initial", "initialize", "insert_id",
+ "instance", "instantiable", "instead", "int1", "int2", "int3", "int4", "int8",
+ "intersection", "invoker", "isam", "isnull", "k", "key_member", "key_type",
+ "keys", "kill", "lancompiler", "last_insert_id", "least", "length", "less",
+ "limit", "lineno", "lines", "listen", "ln", "load", "location", "lock", "login",
+ "logs", "long", "longblob", "longtext", "low_priority", "m", "matched",
+ "max_rows", "maxextents", "maxvalue", "mediumblob", "mediumint", "mediumtext",
+ "message_length", "message_octet_length", "message_text", "middleint",
+ "min_rows", "minus", "minute_microsecond", "minute_second", "minvalue",
+ "mlslabel", "mod", "mode", "modify", "monthname", "more", "move", "mumps",
+ "myisam", "name", "nesting", "no_write_to_binlog", "noaudit", "nocheck",
+ "nocompress", "nocreatedb", "nocreaterole", "nocreateuser", "noinherit",
+ "nologin", "nonclustered", "normalize", "normalized", "nosuperuser", "nothing",
+ "notify", "notnull", "nowait", "nullable", "nulls", "number", "octets", "off",
+ "offline", "offset", "offsets", "oids", "online", "opendatasource", "openquery",
+ "openrowset", "openxml", "operation", "operator", "optimize", "optionally",
+ "options", "ordering", "others", "outfile", "overlay", "overriding", "owner",
+ "pack_keys", "parameter_mode", "parameter_name", "parameter_ordinal_position",
+ "parameter_specific_catalog", "parameter_specific_name",
+ "parameter_specific_schema", "parameters", "pascal", "password", "pctfree",
+ "percent", "percent_rank", "percentile_cont", "percentile_disc", "placing",
+ "plan", "pli", "postfix", "power", "preceding", "prefix", "preorder", "prepared",
+ "print", "proc", "procedural", "process", "processlist", "purge", "quote",
+ "raid0", "raiserror", "rank", "raw", "readtext", "recheck", "reconfigure",
+ "regexp", "regr_avgx", "regr_avgy", "regr_count", "regr_intercept", "regr_r2",
+ "regr_slope", "regr_sxx", "regr_sxy", "regr_syy", "reindex", "reload", "rename",
+ "repeatable", "replace", "replication", "require", "reset", "resource",
+ "restart", "restore", "returned_cardinality", "returned_length",
+ "returned_octet_length", "returned_sqlstate", "rlike", "routine_catalog",
+ "routine_name", "routine_schema", "row_count", "row_number", "rowcount",
+ "rowguidcol", "rowid", "rownum", "rule", "save", "scale", "schema_name",
+ "schemas", "scope_catalog", "scope_name", "scope_schema", "second_microsecond",
+ "security", "self", "separator", "sequence", "serializable", "server_name",
+ "setof", "setuser", "share", "show", "shutdown", "simple", "soname", "source",
+ "spatial", "specific_name", "sql_big_result", "sql_big_selects",
+ "sql_big_tables", "sql_calc_found_rows", "sql_log_off", "sql_log_update",
+ "sql_low_priority_updates", "sql_select_limit", "sql_small_result",
+ "sql_warnings", "sqlca", "sqrt", "ssl", "stable", "starting", "statement",
+ "statistics", "status", "stddev_pop", "stddev_samp", "stdin", "stdout",
+ "storage", "straight_join", "strict", "string", "structure", "style",
+ "subclass_origin", "sublist", "successful", "superuser", "synonym", "sysdate",
+ "sysid", "table_name", "tables", "tablespace", "temp", "template", "terminate",
+ "terminated", "text", "textsize", "than", "ties", "tinyblob", "tinyint",
+ "tinytext", "toast", "top", "top_level_count", "tran", "transaction_active",
+ "transactions_committed", "transactions_rolled_back", "transform", "transforms",
+ "trigger_catalog", "trigger_name", "trigger_schema", "truncate", "trusted",
+ "tsequal", "type", "uescape", "uid", "unbounded", "uncommitted", "unencrypted",
+ "unlisten", "unlock", "unnamed", "unsigned", "updatetext", "use",
+ "user_defined_type_catalog", "user_defined_type_code", "user_defined_type_name",
+ "user_defined_type_schema", "utc_date", "utc_time", "utc_timestamp", "vacuum",
+ "valid", "validate", "validator", "var_pop", "var_samp", "varbinary", "varchar2",
+ "varcharacter", "variable", "variables", "verbose", "volatile", "waitfor",
+ "width_bucket", "writetext", "x509", "xor", "year_month", "zerofill",
+}
+
+local space = patterns.space -- S(" \n\r\t\f\v")
+local any = patterns.any
+local restofline = patterns.restofline
+local startofline = patterns.startofline
+
+local squote = P("'")
+local dquote = P('"')
+local bquote = P('`')
+local escaped = P("\\") * P(1)
+
+local begincomment = P("/*")
+local endcomment = P("*/")
+
+local decimal = patterns.decimal
+local float = patterns.float
+local integer = P("-")^-1 * decimal
+
+local spacing = token(whitespace, space^1)
+local rest = token("default", any)
+
+local shortcomment = token("comment", (P("#") + P("--")) * restofline^0)
+local longcomment = token("comment", begincomment * (1-endcomment)^0 * endcomment^-1)
+
+local p_validword = R("AZ","az","__") * R("AZ","az","__","09")^0
+local identifier = token("default",p_validword)
+
+local shortstring = token("quote", dquote) -- can be shared
+ * token("string", (escaped + (1-dquote))^0)
+ * token("quote", dquote)
+ + token("quote", squote)
+ * token("string", (escaped + (1-squote))^0)
+ * token("quote", squote)
+ + token("quote", bquote)
+ * token("string", (escaped + (1-bquote))^0)
+ * token("quote", bquote)
+
+local p_keywords_s = exact_match(keywords_standard,nil,true)
+local p_keywords_d = exact_match(keywords_dialects,nil,true)
+local keyword_s = token("keyword", p_keywords_s)
+local keyword_d = token("command", p_keywords_d)
+
+local number = token("number", float + integer)
+local operator = token("special", S("+-*/%^!=<>;:{}[]().&|?~"))
+
+sqllexer._tokenstyles = context.styleset
+
+sqllexer._foldpattern = P("/*") + P("*/") + S("{}") -- separate entry else interference
+
+sqllexer._foldsymbols = {
+ _patterns = {
+ "/%*",
+ "%*/",
+ },
+ ["comment"] = {
+ ["/*"] = 1,
+ ["*/"] = -1,
+ }
+}
+
+sqllexer._rules = {
+ { "whitespace", spacing },
+ { "keyword-s", keyword_s },
+ { "keyword-d", keyword_d },
+ { "identifier", identifier },
+ { "string", shortstring },
+ { "longcomment", longcomment },
+ { "shortcomment", shortcomment },
+ { "number", number },
+ { "operator", operator },
+ { "rest", rest },
+}
+
+return sqllexer
diff --git a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-tex.lua b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-tex.lua
index ad73f42179d..027c8767e14 100644
--- a/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-tex.lua
+++ b/Master/texmf-dist/context/data/scite/context/lexers/scite-context-lexer-tex.lua
@@ -457,11 +457,12 @@ contextlexer._rules = {
{ "constant", constant },
-- { "subsystem", subsystem },
{ "callers", callers },
+ { "subsystem", subsystem },
{ "helper", helper },
{ "command", command },
{ "primitive", primitive },
{ "ifprimitive", ifprimitive },
- { "subsystem", subsystem },
+ -- { "subsystem", subsystem },
{ "reserved", reserved },
{ "csname", csname },
-- { "whatever", specialword }, -- not yet, crashes
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context-data-context.properties b/Master/texmf-dist/context/data/scite/context/scite-context-data-context.properties
index f844872da64..4d30ff4a819 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context-data-context.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context-data-context.properties
@@ -2,69 +2,70 @@ keywordclass.context.constants=\
zerocount minusone minustwo plusone \
plustwo plusthree plusfour plusfive plussix \
plusseven pluseight plusnine plusten plussixteen \
-plushundred plusthousand plustenthousand plustwentythousand medcard \
-maxcard maxcardminusone zeropoint onepoint halfapoint \
-onebasepoint maxdimen scaledpoint thousandpoint points \
-halfpoint zeroskip zeromuskip onemuskip pluscxxvii \
-pluscxxviii pluscclv pluscclvi normalpagebox endoflinetoken \
-outputnewlinechar emptytoks empty undefined voidbox \
-emptybox emptyvbox emptyhbox bigskipamount medskipamount \
-smallskipamount fmtname fmtversion texengine texenginename \
-texengineversion luatexengine pdftexengine xetexengine unknownengine \
-activecatcode bgroup egroup endline conditionaltrue \
-conditionalfalse attributeunsetvalue uprotationangle rightrotationangle downrotationangle \
-leftrotationangle inicatcodes ctxcatcodes texcatcodes notcatcodes \
-txtcatcodes vrbcatcodes prtcatcodes nilcatcodes luacatcodes \
-tpacatcodes tpbcatcodes xmlcatcodes ctdcatcodes escapecatcode \
-begingroupcatcode endgroupcatcode mathshiftcatcode alignmentcatcode endoflinecatcode \
-parametercatcode superscriptcatcode subscriptcatcode ignorecatcode spacecatcode \
-lettercatcode othercatcode activecatcode commentcatcode invalidcatcode \
-tabasciicode newlineasciicode formfeedasciicode endoflineasciicode endoffileasciicode \
-spaceasciicode hashasciicode dollarasciicode commentasciicode ampersandasciicode \
-colonasciicode backslashasciicode circumflexasciicode underscoreasciicode leftbraceasciicode \
-barasciicode rightbraceasciicode tildeasciicode delasciicode lessthanasciicode \
-morethanasciicode doublecommentsignal atsignasciicode exclamationmarkasciicode questionmarkasciicode \
-doublequoteasciicode singlequoteasciicode forwardslashasciicode primeasciicode hyphenasciicode \
-activemathcharcode activetabtoken activeformfeedtoken activeendoflinetoken batchmodecode \
-nonstopmodecode scrollmodecode errorstopmodecode bottomlevelgroupcode simplegroupcode \
-hboxgroupcode adjustedhboxgroupcode vboxgroupcode vtopgroupcode aligngroupcode \
-noaligngroupcode outputgroupcode mathgroupcode discretionarygroupcode insertgroupcode \
-vcentergroupcode mathchoicegroupcode semisimplegroupcode mathshiftgroupcode mathleftgroupcode \
-vadjustgroupcode charnodecode hlistnodecode vlistnodecode rulenodecode \
-insertnodecode marknodecode adjustnodecode ligaturenodecode discretionarynodecode \
-whatsitnodecode mathnodecode gluenodecode kernnodecode penaltynodecode \
-unsetnodecode mathsnodecode charifcode catifcode numifcode \
-dimifcode oddifcode vmodeifcode hmodeifcode mmodeifcode \
-innerifcode voidifcode hboxifcode vboxifcode xifcode \
-eofifcode trueifcode falseifcode caseifcode definedifcode \
-csnameifcode fontcharifcode fontslantperpoint fontinterwordspace fontinterwordstretch \
-fontinterwordshrink fontexheight fontemwidth fontextraspace slantperpoint \
-interwordspace interwordstretch interwordshrink exheight emwidth \
-extraspace mathsupdisplay mathsupnormal mathsupcramped mathsubnormal \
-mathsubcombined mathaxisheight muquad startmode stopmode \
-startnotmode stopnotmode startmodeset stopmodeset doifmode \
-doifelsemode doifmodeelse doifnotmode startmodeset stopmodeset \
-startallmodes stopallmodes startnotallmodes stopnotallmodes doifallmodes \
-doifelseallmodes doifallmodeselse doifnotallmodes startenvironment stopenvironment \
-environment startcomponent stopcomponent component startproduct \
-stopproduct product startproject stopproject project \
-starttext stoptext startnotext stopnotext startdocument \
-stopdocument documentvariable setupdocument startmodule stopmodule \
-usemodule usetexmodule useluamodule setupmodule currentmoduleparameter \
-moduleparameter everystarttext everystoptext startTEXpage stopTEXpage \
-enablemode disablemode preventmode definemode globalenablemode \
-globaldisablemode globalpreventmode pushmode popmode typescriptone \
-typescripttwo typescriptthree mathsizesuffix mathordcode mathopcode \
-mathbincode mathrelcode mathopencode mathclosecode mathpunctcode \
-mathalphacode mathinnercode mathnothingcode mathlimopcode mathnolopcode \
-mathboxcode mathchoicecode mathaccentcode mathradicalcode constantnumber \
-constantnumberargument constantdimen constantdimenargument constantemptyargument continueifinputfile \
-luastringsep !!bs !!es lefttorightmark righttoleftmark \
-breakablethinspace nobreakspace nonbreakablespace narrownobreakspace zerowidthnobreakspace \
-ideographicspace ideographichalffillspace twoperemspace threeperemspace fourperemspace \
-fiveperemspace sixperemspace figurespace punctuationspace hairspace \
-zerowidthspace zerowidthnonjoiner zerowidthjoiner zwnj zwj \
-optionalspace asciispacechar
+plushundred plustwohundred plusthousand plustenthousand plustwentythousand \
+medcard maxcard maxcardminusone zeropoint onepoint \
+halfapoint onebasepoint maxdimen scaledpoint thousandpoint \
+points halfpoint zeroskip zeromuskip onemuskip \
+pluscxxvii pluscxxviii pluscclv pluscclvi normalpagebox \
+endoflinetoken outputnewlinechar emptytoks empty undefined \
+voidbox emptybox emptyvbox emptyhbox bigskipamount \
+medskipamount smallskipamount fmtname fmtversion texengine \
+texenginename texengineversion luatexengine pdftexengine xetexengine \
+unknownengine activecatcode bgroup egroup endline \
+conditionaltrue conditionalfalse attributeunsetvalue uprotationangle rightrotationangle \
+downrotationangle leftrotationangle inicatcodes ctxcatcodes texcatcodes \
+notcatcodes txtcatcodes vrbcatcodes prtcatcodes nilcatcodes \
+luacatcodes tpacatcodes tpbcatcodes xmlcatcodes ctdcatcodes \
+escapecatcode begingroupcatcode endgroupcatcode mathshiftcatcode alignmentcatcode \
+endoflinecatcode parametercatcode superscriptcatcode subscriptcatcode ignorecatcode \
+spacecatcode lettercatcode othercatcode activecatcode commentcatcode \
+invalidcatcode tabasciicode newlineasciicode formfeedasciicode endoflineasciicode \
+endoffileasciicode spaceasciicode hashasciicode dollarasciicode commentasciicode \
+ampersandasciicode colonasciicode backslashasciicode circumflexasciicode underscoreasciicode \
+leftbraceasciicode barasciicode rightbraceasciicode tildeasciicode delasciicode \
+lessthanasciicode morethanasciicode doublecommentsignal atsignasciicode exclamationmarkasciicode \
+questionmarkasciicode doublequoteasciicode singlequoteasciicode forwardslashasciicode primeasciicode \
+hyphenasciicode activemathcharcode activetabtoken activeformfeedtoken activeendoflinetoken \
+batchmodecode nonstopmodecode scrollmodecode errorstopmodecode bottomlevelgroupcode \
+simplegroupcode hboxgroupcode adjustedhboxgroupcode vboxgroupcode vtopgroupcode \
+aligngroupcode noaligngroupcode outputgroupcode mathgroupcode discretionarygroupcode \
+insertgroupcode vcentergroupcode mathchoicegroupcode semisimplegroupcode mathshiftgroupcode \
+mathleftgroupcode vadjustgroupcode charnodecode hlistnodecode vlistnodecode \
+rulenodecode insertnodecode marknodecode adjustnodecode ligaturenodecode \
+discretionarynodecode whatsitnodecode mathnodecode gluenodecode kernnodecode \
+penaltynodecode unsetnodecode mathsnodecode charifcode catifcode \
+numifcode dimifcode oddifcode vmodeifcode hmodeifcode \
+mmodeifcode innerifcode voidifcode hboxifcode vboxifcode \
+xifcode eofifcode trueifcode falseifcode caseifcode \
+definedifcode csnameifcode fontcharifcode fontslantperpoint fontinterwordspace \
+fontinterwordstretch fontinterwordshrink fontexheight fontemwidth fontextraspace \
+slantperpoint interwordspace interwordstretch interwordshrink exheight \
+emwidth extraspace mathsupdisplay mathsupnormal mathsupcramped \
+mathsubnormal mathsubcombined mathaxisheight muquad startmode \
+stopmode startnotmode stopnotmode startmodeset stopmodeset \
+doifmode doifelsemode doifmodeelse doifnotmode startmodeset \
+stopmodeset startallmodes stopallmodes startnotallmodes stopnotallmodes \
+doifallmodes doifelseallmodes doifallmodeselse doifnotallmodes startenvironment \
+stopenvironment environment startcomponent stopcomponent component \
+startproduct stopproduct product startproject stopproject \
+project starttext stoptext startnotext stopnotext \
+startdocument stopdocument documentvariable setupdocument startmodule \
+stopmodule usemodule usetexmodule useluamodule setupmodule \
+currentmoduleparameter moduleparameter everystarttext everystoptext startTEXpage \
+stopTEXpage enablemode disablemode preventmode definemode \
+globalenablemode globaldisablemode globalpreventmode pushmode popmode \
+typescriptone typescripttwo typescriptthree mathsizesuffix mathordcode \
+mathopcode mathbincode mathrelcode mathopencode mathclosecode \
+mathpunctcode mathalphacode mathinnercode mathnothingcode mathlimopcode \
+mathnolopcode mathboxcode mathchoicecode mathaccentcode mathradicalcode \
+constantnumber constantnumberargument constantdimen constantdimenargument constantemptyargument \
+continueifinputfile luastringsep !!bs !!es lefttorightmark \
+righttoleftmark breakablethinspace nobreakspace nonbreakablespace narrownobreakspace \
+zerowidthnobreakspace ideographicspace ideographichalffillspace twoperemspace threeperemspace \
+fourperemspace fiveperemspace sixperemspace figurespace punctuationspace \
+hairspace zerowidthspace zerowidthnonjoiner zerowidthjoiner zwnj \
+zwj optionalspace asciispacechar Ux eUx \
+Umathaccents
keywordclass.context.helpers=\
startsetups stopsetups startxmlsetups stopxmlsetups \
@@ -84,89 +85,95 @@ checkedstrippedcsname firstargumentfalse firstargumenttrue secondargumentfalse s
thirdargumentfalse thirdargumenttrue fourthargumentfalse fourthargumenttrue fifthargumentfalse \
fifthsargumenttrue sixthargumentfalse sixtsargumenttrue doglobal dodoglobal \
redoglobal resetglobal donothing dontcomplain forgetall \
-donetrue donefalse inlineordisplaymath indisplaymath forcedisplaymath \
-startforceddisplaymath stopforceddisplaymath reqno htdp unvoidbox \
-hfilll vfilll mathbox mathlimop mathnolop \
-mathnothing mathalpha currentcatcodetable defaultcatcodetable catcodetablename \
-newcatcodetable startcatcodetable stopcatcodetable startextendcatcodetable stopextendcatcodetable \
-pushcatcodetable popcatcodetable restorecatcodes setcatcodetable letcatcodecommand \
-defcatcodecommand uedcatcodecommand hglue vglue hfillneg \
-vfillneg hfilllneg vfilllneg ruledhss ruledhfil \
-ruledhfill ruledhfilneg ruledhfillneg normalhfillneg ruledvss \
-ruledvfil ruledvfill ruledvfilneg ruledvfillneg normalvfillneg \
-ruledhbox ruledvbox ruledvtop ruledvcenter ruledmbox \
-ruledhskip ruledvskip ruledkern ruledmskip ruledmkern \
-ruledhglue ruledvglue normalhglue normalvglue ruledpenalty \
-filledhboxb filledhboxr filledhboxg filledhboxc filledhboxm \
-filledhboxy filledhboxk scratchcounter globalscratchcounter scratchdimen \
-globalscratchdimen scratchskip globalscratchskip scratchmuskip globalscratchmuskip \
-scratchtoks globalscratchtoks scratchbox globalscratchbox normalbaselineskip \
-normallineskip normallineskiplimit availablehsize localhsize setlocalhsize \
-distributedhsize hsizefraction nextbox dowithnextbox dowithnextboxcs \
-dowithnextboxcontent dowithnextboxcontentcs scratchwidth scratchheight scratchdepth \
-scratchoffset scratchdistance scratchhsize scratchvsize scratchxoffset \
-scratchyoffset scratchhoffset scratchvoffset scratchxposition scratchyposition \
-scratchtopoffset scratchbottomoffset scratchleftoffset scratchrightoffset scratchcounterone \
-scratchcountertwo scratchcounterthree scratchdimenone scratchdimentwo scratchdimenthree \
-scratchskipone scratchskiptwo scratchskipthree scratchmuskipone scratchmuskiptwo \
-scratchmuskipthree scratchtoksone scratchtokstwo scratchtoksthree scratchboxone \
-scratchboxtwo scratchboxthree scratchnx scratchny scratchmx \
-scratchmy scratchunicode scratchleftskip scratchrightskip scratchtopskip \
-scratchbottomskip doif doifnot doifelse doifinset \
-doifnotinset doifelseinset doifinsetelse doifelsenextchar doifnextcharelse \
-doifelsenextoptional doifnextoptionalelse doifelsenextoptionalcs doifnextoptionalcselse doifelsefastoptionalcheck \
-doiffastoptionalcheckelse doifelsenextbgroup doifnextbgroupelse doifelsenextbgroupcs doifnextbgroupcselse \
-doifelsenextparenthesis doifnextparenthesiselse doifelseundefined doifundefinedelse doifelsedefined \
-doifdefinedelse doifundefined doifdefined doifelsevalue doifvalue \
-doifnotvalue doifnothing doifsomething doifelsenothing doifnothingelse \
-doifelsesomething doifsomethingelse doifvaluenothing doifvaluesomething doifelsevaluenothing \
-doifvaluenothingelse doifelsedimension doifdimensionelse doifelsenumber doifnumberelse \
-doifnumber doifnotnumber doifelsecommon doifcommonelse doifcommon \
-doifnotcommon doifinstring doifnotinstring doifelseinstring doifinstringelse \
-doifelseassignment doifassignmentelse docheckassignment tracingall tracingnone \
-loggingall removetoks appendtoks prependtoks appendtotoks \
-prependtotoks to endgraf endpar everyendpar \
-reseteverypar finishpar empty null space \
-quad enspace nbsp obeyspaces obeylines \
-obeyedspace obeyedline obeyedtab obeyedpage normalspace \
-executeifdefined singleexpandafter doubleexpandafter tripleexpandafter dontleavehmode \
-removelastspace removeunwantedspaces keepunwantedspaces removepunctuation wait \
-writestatus define defineexpandable redefine setmeasure \
-setemeasure setgmeasure setxmeasure definemeasure freezemeasure \
-measure measured installcorenamespace getvalue getuvalue \
-setvalue setevalue setgvalue setxvalue letvalue \
-letgvalue resetvalue undefinevalue ignorevalue setuvalue \
-setuevalue setugvalue setuxvalue globallet glet \
-udef ugdef uedef uxdef checked \
-unique getparameters geteparameters getgparameters getxparameters \
-forgetparameters copyparameters getdummyparameters dummyparameter directdummyparameter \
-setdummyparameter letdummyparameter usedummystyleandcolor usedummystyleparameter usedummycolorparameter \
-processcommalist processcommacommand quitcommalist quitprevcommalist processaction \
-processallactions processfirstactioninset processallactionsinset unexpanded expanded \
-startexpanded stopexpanded protected protect unprotect \
-firstofoneargument firstoftwoarguments secondoftwoarguments firstofthreearguments secondofthreearguments \
-thirdofthreearguments firstoffourarguments secondoffourarguments thirdoffourarguments fourthoffourarguments \
-firstoffivearguments secondoffivearguments thirdoffivearguments fourthoffivearguments fifthoffivearguments \
-firstofsixarguments secondofsixarguments thirdofsixarguments fourthofsixarguments fifthofsixarguments \
-sixthofsixarguments firstofoneunexpanded firstoftwounexpanded secondoftwounexpanded firstofthreeunexpanded \
-secondofthreeunexpanded thirdofthreeunexpanded gobbleoneargument gobbletwoarguments gobblethreearguments \
-gobblefourarguments gobblefivearguments gobblesixarguments gobblesevenarguments gobbleeightarguments \
-gobbleninearguments gobbletenarguments gobbleoneoptional gobbletwooptionals gobblethreeoptionals \
-gobblefouroptionals gobblefiveoptionals dorecurse doloop exitloop \
-dostepwiserecurse recurselevel recursedepth dofastloopcs dowith \
-newconstant setnewconstant setconstant setconstantvalue newconditional \
-settrue setfalse settruevalue setfalsevalue newmacro \
-setnewmacro newfraction newsignal dosingleempty dodoubleempty \
-dotripleempty doquadrupleempty doquintupleempty dosixtupleempty doseventupleempty \
-dosingleargument dodoubleargument dotripleargument doquadrupleargument doquintupleargument \
-dosixtupleargument doseventupleargument dosinglegroupempty dodoublegroupempty dotriplegroupempty \
-doquadruplegroupempty doquintuplegroupempty permitspacesbetweengroups dontpermitspacesbetweengroups nopdfcompression \
-maximumpdfcompression normalpdfcompression modulonumber dividenumber getfirstcharacter \
-doifelsefirstchar doiffirstcharelse startnointerference stopnointerference twodigits \
-threedigits leftorright offinterlineskip oninterlineskip nointerlineskip \
-strut halfstrut quarterstrut depthstrut setstrut \
-strutbox strutht strutdp strutwd struthtdp \
-begstrut endstrut lineheight ordordspacing ordopspacing \
+donetrue donefalse foundtrue foundfalse inlineordisplaymath \
+indisplaymath forcedisplaymath startforceddisplaymath stopforceddisplaymath reqno \
+mathortext htdp unvoidbox hfilll vfilll \
+mathbox mathlimop mathnolop mathnothing mathalpha \
+currentcatcodetable defaultcatcodetable catcodetablename newcatcodetable startcatcodetable \
+stopcatcodetable startextendcatcodetable stopextendcatcodetable pushcatcodetable popcatcodetable \
+restorecatcodes setcatcodetable letcatcodecommand defcatcodecommand uedcatcodecommand \
+hglue vglue hfillneg vfillneg hfilllneg \
+vfilllneg ruledhss ruledhfil ruledhfill ruledhfilneg \
+ruledhfillneg normalhfillneg ruledvss ruledvfil ruledvfill \
+ruledvfilneg ruledvfillneg normalvfillneg ruledhbox ruledvbox \
+ruledvtop ruledvcenter ruledmbox ruledhpack ruledvpack \
+ruledtpack ruledhskip ruledvskip ruledkern ruledmskip \
+ruledmkern ruledhglue ruledvglue normalhglue normalvglue \
+ruledpenalty filledhboxb filledhboxr filledhboxg filledhboxc \
+filledhboxm filledhboxy filledhboxk scratchcounter globalscratchcounter \
+scratchdimen globalscratchdimen scratchskip globalscratchskip scratchmuskip \
+globalscratchmuskip scratchtoks globalscratchtoks scratchbox globalscratchbox \
+normalbaselineskip normallineskip normallineskiplimit availablehsize localhsize \
+setlocalhsize distributedhsize hsizefraction nextbox dowithnextbox \
+dowithnextboxcs dowithnextboxcontent dowithnextboxcontentcs flushnextbox scratchwidth \
+scratchheight scratchdepth scratchoffset scratchdistance scratchhsize \
+scratchvsize scratchxoffset scratchyoffset scratchhoffset scratchvoffset \
+scratchxposition scratchyposition scratchtopoffset scratchbottomoffset scratchleftoffset \
+scratchrightoffset scratchcounterone scratchcountertwo scratchcounterthree scratchcounterfour \
+scratchcounterfive scratchcountersix scratchdimenone scratchdimentwo scratchdimenthree \
+scratchdimenfour scratchdimenfive scratchdimensix scratchskipone scratchskiptwo \
+scratchskipthree scratchskipfour scratchskipfive scratchskipsix scratchmuskipone \
+scratchmuskiptwo scratchmuskipthree scratchmuskipfour scratchmuskipfive scratchmuskipsix \
+scratchtoksone scratchtokstwo scratchtoksthree scratchtoksfour scratchtoksfive \
+scratchtokssix scratchboxone scratchboxtwo scratchboxthree scratchboxfour \
+scratchboxfive scratchboxsix scratchnx scratchny scratchmx \
+scratchmy scratchunicode scratchmin scratchmax scratchleftskip \
+scratchrightskip scratchtopskip scratchbottomskip doif doifnot \
+doifelse doifinset doifnotinset doifelseinset doifinsetelse \
+doifelsenextchar doifnextcharelse doifelsenextoptional doifnextoptionalelse doifelsenextoptionalcs \
+doifnextoptionalcselse doifelsefastoptionalcheck doiffastoptionalcheckelse doifelsenextbgroup doifnextbgroupelse \
+doifelsenextbgroupcs doifnextbgroupcselse doifelsenextparenthesis doifnextparenthesiselse doifelseundefined \
+doifundefinedelse doifelsedefined doifdefinedelse doifundefined doifdefined \
+doifelsevalue doifvalue doifnotvalue doifnothing doifsomething \
+doifelsenothing doifnothingelse doifelsesomething doifsomethingelse doifvaluenothing \
+doifvaluesomething doifelsevaluenothing doifvaluenothingelse doifelsedimension doifdimensionelse \
+doifelsenumber doifnumberelse doifnumber doifnotnumber doifelsecommon \
+doifcommonelse doifcommon doifnotcommon doifinstring doifnotinstring \
+doifelseinstring doifinstringelse doifelseassignment doifassignmentelse docheckassignment \
+tracingall tracingnone loggingall removetoks appendtoks \
+prependtoks appendtotoks prependtotoks to endgraf \
+endpar everyendpar reseteverypar finishpar empty \
+null space quad enspace nbsp \
+obeyspaces obeylines obeyedspace obeyedline obeyedtab \
+obeyedpage normalspace executeifdefined singleexpandafter doubleexpandafter \
+tripleexpandafter dontleavehmode removelastspace removeunwantedspaces keepunwantedspaces \
+removepunctuation wait writestatus define defineexpandable \
+redefine setmeasure setemeasure setgmeasure setxmeasure \
+definemeasure freezemeasure measure measured installcorenamespace \
+getvalue getuvalue setvalue setevalue setgvalue \
+setxvalue letvalue letgvalue resetvalue undefinevalue \
+ignorevalue setuvalue setuevalue setugvalue setuxvalue \
+globallet glet udef ugdef uedef \
+uxdef checked unique getparameters geteparameters \
+getgparameters getxparameters forgetparameters copyparameters getdummyparameters \
+dummyparameter directdummyparameter setdummyparameter letdummyparameter usedummystyleandcolor \
+usedummystyleparameter usedummycolorparameter processcommalist processcommacommand quitcommalist \
+quitprevcommalist processaction processallactions processfirstactioninset processallactionsinset \
+unexpanded expanded startexpanded stopexpanded protected \
+protect unprotect firstofoneargument firstoftwoarguments secondoftwoarguments \
+firstofthreearguments secondofthreearguments thirdofthreearguments firstoffourarguments secondoffourarguments \
+thirdoffourarguments fourthoffourarguments firstoffivearguments secondoffivearguments thirdoffivearguments \
+fourthoffivearguments fifthoffivearguments firstofsixarguments secondofsixarguments thirdofsixarguments \
+fourthofsixarguments fifthofsixarguments sixthofsixarguments firstofoneunexpanded firstoftwounexpanded \
+secondoftwounexpanded firstofthreeunexpanded secondofthreeunexpanded thirdofthreeunexpanded gobbleoneargument \
+gobbletwoarguments gobblethreearguments gobblefourarguments gobblefivearguments gobblesixarguments \
+gobblesevenarguments gobbleeightarguments gobbleninearguments gobbletenarguments gobbleoneoptional \
+gobbletwooptionals gobblethreeoptionals gobblefouroptionals gobblefiveoptionals dorecurse \
+doloop exitloop dostepwiserecurse recurselevel recursedepth \
+dofastloopcs dowith newconstant setnewconstant setconstant \
+setconstantvalue newconditional settrue setfalse settruevalue \
+setfalsevalue newmacro setnewmacro newfraction newsignal \
+dosingleempty dodoubleempty dotripleempty doquadrupleempty doquintupleempty \
+dosixtupleempty doseventupleempty dosingleargument dodoubleargument dotripleargument \
+doquadrupleargument doquintupleargument dosixtupleargument doseventupleargument dosinglegroupempty \
+dodoublegroupempty dotriplegroupempty doquadruplegroupempty doquintuplegroupempty permitspacesbetweengroups \
+dontpermitspacesbetweengroups nopdfcompression maximumpdfcompression normalpdfcompression modulonumber \
+dividenumber getfirstcharacter doifelsefirstchar doiffirstcharelse startnointerference \
+stopnointerference twodigits threedigits leftorright offinterlineskip \
+oninterlineskip nointerlineskip strut halfstrut quarterstrut \
+depthstrut setstrut strutbox strutht strutdp \
+strutwd struthtdp begstrut endstrut lineheight \
+leftboundary rightboundary signalcharacter ordordspacing ordopspacing \
ordbinspacing ordrelspacing ordopenspacing ordclosespacing ordpunctspacing \
ordinnerspacing opordspacing opopspacing opbinspacing oprelspacing \
opopenspacing opclosespacing oppunctspacing opinnerspacing binordspacing \
@@ -181,26 +188,30 @@ punctopenspacing punctclosespacing punctpunctspacing punctinnerspacing innerords
inneropspacing innerbinspacing innerrelspacing inneropenspacing innerclosespacing \
innerpunctspacing innerinnerspacing normalreqno startimath stopimath \
normalstartimath normalstopimath startdmath stopdmath normalstartdmath \
-normalstopdmath uncramped cramped triggermathstyle mathstylefont \
-mathsmallstylefont mathstyleface mathsmallstyleface mathstylecommand mathpalette \
-mathstylehbox mathstylevbox mathstylevcenter mathstylevcenteredhbox mathstylevcenteredvbox \
-mathtext setmathsmalltextbox setmathtextbox pushmathstyle popmathstyle \
-triggerdisplaystyle triggertextstyle triggerscriptstyle triggerscriptscriptstyle triggeruncrampedstyle \
-triggercrampedstyle triggersmallstyle triggeruncrampedsmallstyle triggercrampedsmallstyle triggerbigstyle \
-triggeruncrampedbigstyle triggercrampedbigstyle luaexpr expelsedoif expdoif \
-expdoifnot expdoifelsecommon expdoifcommonelse expdoifelseinset expdoifinsetelse \
-ctxdirectlua ctxlatelua ctxsprint ctxwrite ctxcommand \
-ctxdirectcommand ctxlatecommand ctxreport ctxlua luacode \
-lateluacode directluacode registerctxluafile ctxloadluafile luaversion \
-luamajorversion luaminorversion ctxluacode luaconditional luaexpanded \
-startluaparameterset stopluaparameterset luaparameterset definenamedlua obeylualines \
-obeyluatokens startluacode stopluacode startlua stoplua \
-startctxfunction stopctxfunction ctxfunction startctxfunctiondefinition stopctxfunctiondefinition \
-installctxfunction carryoverpar assumelongusagecs Umathbotaccent righttolefthbox \
-lefttorighthbox righttoleftvbox lefttorightvbox righttoleftvtop lefttorightvtop \
-rtlhbox ltrhbox rtlvbox ltrvbox rtlvtop \
-ltrvtop autodirhbox autodirvbox autodirvtop lefttoright \
-righttoleft synchronizelayoutdirection synchronizedisplaydirection synchronizeinlinedirection lesshyphens \
-morehyphens nohyphens dohyphens Ucheckedstartdisplaymath Ucheckedstopdisplaymath \
-nobreak allowbreak goodbreak
+normalstopdmath normalsuperscript normalsubscript uncramped cramped \
+triggermathstyle mathstylefont mathsmallstylefont mathstyleface mathsmallstyleface \
+mathstylecommand mathpalette mathstylehbox mathstylevbox mathstylevcenter \
+mathstylevcenteredhbox mathstylevcenteredvbox mathtext setmathsmalltextbox setmathtextbox \
+pushmathstyle popmathstyle triggerdisplaystyle triggertextstyle triggerscriptstyle \
+triggerscriptscriptstyle triggeruncrampedstyle triggercrampedstyle triggersmallstyle triggeruncrampedsmallstyle \
+triggercrampedsmallstyle triggerbigstyle triggeruncrampedbigstyle triggercrampedbigstyle luaexpr \
+expelsedoif expdoif expdoifnot expdoifelsecommon expdoifcommonelse \
+expdoifelseinset expdoifinsetelse ctxdirectlua ctxlatelua ctxsprint \
+ctxwrite ctxcommand ctxdirectcommand ctxlatecommand ctxreport \
+ctxlua luacode lateluacode directluacode registerctxluafile \
+ctxloadluafile luaversion luamajorversion luaminorversion ctxluacode \
+luaconditional luaexpanded startluaparameterset stopluaparameterset luaparameterset \
+definenamedlua obeylualines obeyluatokens startluacode stopluacode \
+startlua stoplua startctxfunction stopctxfunction ctxfunction \
+startctxfunctiondefinition stopctxfunctiondefinition installctxfunction cldprocessfile cldloadfile \
+cldcontext cldcommand carryoverpar assumelongusagecs Umathbotaccent \
+righttolefthbox lefttorighthbox righttoleftvbox lefttorightvbox righttoleftvtop \
+lefttorightvtop rtlhbox ltrhbox rtlvbox ltrvbox \
+rtlvtop ltrvtop autodirhbox autodirvbox autodirvtop \
+leftorrighthbox leftorrightvbox leftorrightvtop lefttoright righttoleft \
+synchronizelayoutdirection synchronizedisplaydirection synchronizeinlinedirection lesshyphens morehyphens \
+nohyphens dohyphens Ucheckedstartdisplaymath Ucheckedstopdisplaymath break \
+nobreak allowbreak goodbreak nospace nospacing \
+dospacing naturalhbox naturalvbox naturalhpack naturalvpack \
+frule
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context-data-interfaces.properties b/Master/texmf-dist/context/data/scite/context/scite-context-data-interfaces.properties
index e75b5b92b00..a70ce9ed252 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context-data-interfaces.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context-data-interfaces.properties
@@ -1,1812 +1,6920 @@
keywordclass.context.cs=\
-CAP Cap Caps Character \
-Characters Cisla KAP Kap Kaps \
-MESIC MONTH Rimskecislice Romannumerals SLOVA \
-SLOVO Slova Slovo VSEDNIDEN WEEKDAY \
-WORD WORDS Word Words Znak \
-Znaky about adaptlayout aktualnicislonadpisu aktualnidatum \
-appendix arg at atleftmargin atpage \
-atrightmargin background barevnalista barva bilemisto \
-blackrule blackrules blank bookmark bottomspace \
-bublinkovanapoveda but button bydliste bypassblocks \
-cap celkovypocetstran cernalinka cernelinky chapter \
-character characters chem cisla cislonadpisu \
-cislopodrovnice cislorovnice cislostrany citace citovat \
-clip clonefield color column comment \
-comparecolorgroup comparepalet completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms completepagenumber completeregister convertnumber copyfield \
-correctwhitespace coupledocument coupledregister couplemarking couplepage \
-couplepaper coupleregister crlf currentdate currentheadnumber \
-cutspace date datum decouplemarking decrementnumber \
-define defineblank defineblock definebodyfont definebodyfontDEF \
-definebodyfontREF definebodyfontenvironment definebuffer definecolor definecolorgroup \
-definecolumnbreak definecolumnset definecombination definecombinedlist defineconversion \
-definedescription definedfont defineenumeration definefield definefieldstack \
-definefiguresymbol definefloat definefont definefontfeature definefonthandling \
-definefontsynonym defineframed defineframedtext definehead defineindentedtext \
-defineinmargin defineinteractionmenu defineitemgroup definelabel definelayer \
-definelayout definelist definelogo definemakeup definemarking \
-definemathalignment defineoutput defineoverlay definepagebreak definepalet \
-definepapersize defineparagraphs defineplacement defineprofile defineprogram \
-definerawfont definereference definereferenceformat definereferencelist defineregister \
-definerule definesection definesectionblock definesorting definestartstop \
-definesubfield definesymbol definesynonyms definetabletemplate definetabulate \
-definetext definetextposition definetextvariable definetype definetypeface \
-definetyping defineversion definuj definujakcent definujbarvu \
-definujblok definujbloksekce definujbuffer definujfont definujformatodkazu \
-definujhbox definujhlavnipole definujinterakcnimenu definujkombinovanyseznam definujkonverzi \
-definujlogo definujnadpis definujobrazeksymbol definujodkaz definujodstavce \
-definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt \
-definujpodpole definujpole definujpopis definujpopisek definujprekryv \
-definujpreskok definujprikaz definujprofil definujprogram definujprostredizakladnihofontu \
-definujrejstrik definujsablonutabulky definujsekci definujseznam definujseznamodkazu \
-definujskupinubarev definujstartstop definujstyl definujstylfontu definujsymbol \
-definujsynonumumfontu definujsynonyma definujtabelaci definujtext definujtrideni \
-definujupravu definujvelikostpapiru definujverzi definujvycet definujvystup \
-definujzakladnifont definujzasobnikpoli definujznaceni definujznak delkaseznamu \
-description determineheadnumber determinelistcharacteristics disableinteractionmenu dodrzujprofil \
-dodrzujverzi dodrzujverziprofilu dvoustrannypapir emptylines enumeration \
-externalfigure externiobraz fakt field fieldstack \
-fillinfield fillinline fillinrules fillintext fitfield \
-fixedspaces followprofile followprofileversion followversion footnote \
-footnotetext forceblocks fraction framed framedtext \
-from getbuffer getmarking getnumber godown \
-goto gotobox graycolor grid hairline \
-head headnumber headsym headtext hideblocks \
-high hl hlavnijazyk hlavniuroven hodnotabarvy \
-hodnotasedi immediatebetweenlist immediatetolist in indentation \
-indenting inframed ininner inleft inline \
-inmargin inneredgedistance inneredgewidth innermargindistance innermarginwidth \
-inothermargin inouter inright instalacejazyka installlanguage \
-interactionbar interactionbuttons interakcnilista interakcnitlacitka interaktivnimenu \
-item items its jazyk jdidolu \
-jdina jdinabox jdinastranu jmeno kap \
-keepblocks klonujpole komponenta konvertujcislo kopirujpole \
-korekcebilehomista labeling labels labeltext language \
-leftaligned leg listsymbol loadsorts loadsynonyms \
-logfields lohi low mainlanguage maoramovani \
-mapfontsize mar marginalnilinka marginalninadpis marginalnislovo \
-marginalnitext marginrule margintext marking markversion \
-matematika mathematics mazaramovani mediaeval meritko \
-mesic mezera midaligned mirror month \
-moveformula moveongrid movesidefloat mrizka nadpis \
-nadruhyokraj nalevo nalevyokraj name naokraj \
-napravo napravyokraj nastavbarvu nastavbarvy nastavbilamista \
-nastavblok nastavbloksekce nastavbuffer nastavcernelinky nastavcislonadpisu \
-nastavcislostrany nastavcislovani nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran \
-nastavcitaci nastavdefinicipoznamekpodcarou nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty \
-nastavexterniobrazy nastavhorejsek nastavhornitexty nastavinterakci nastavinterakcnilistu \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Caps Cisla ConTeXt Context \
+ConvertConstantAfter ConvertToConstant ETEX EveryLine EveryPar \
+GetPar GotoPar Greeknumerals INRSTEX Kap \
+LAMSTEX LATEX LUAJITTEX LUATEX LaTeX \
+LamSTeX LuaTeX LuajitTeX MESIC METAFONT \
+METAFUN METAPOST MKII MKIV MKIX \
+MKVI MKXI MONTHLONG MONTHSHORT MPII \
+MPIV MPVI MPanchor MPbetex MPc \
+MPcode MPcolor MPcoloronly MPcolumn MPd \
+MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape MPgetposboxes \
+MPh MPinclusions MPleftskip MPll MPlr \
+MPls MPmenubuttons MPn MPoptions MPoverlayanchor \
+MPp MPpage MPpardata MPplus MPpos \
+MPpositiongraphic MPposset MPr MPrawvar MPregion \
+MPrest MPrightskip MPrs MPstring MPtext \
+MPtransparency MPul MPur MPv MPvar \
+MPvariable MPvv MPw MPx MPxy \
+MPxywhd MPy MetaFont MetaFun MetaPost \
+NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight NormalizeTextWidth PDFETEX \
+PDFTEX PDFcolor PICTEX PPCHTEX PPCHTeX \
+PRAGMA PiCTeX PointsToBigPoints PointsToReal PointsToWholeBigPoints \
+PtToCm ReadFile Rimskecislice SLOVA SLOVO \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Slova Slovo Smallcapped \
+TABLE TEX TaBlE TeX TheNormalizedFontSize \
+TransparencyHack VSEDNIDEN VerboseNumber WidthSpanningText XETEX \
+XeTeX Znak Znaky abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals activatespacehandler acute adaptcollector \
+adaptpapersize addfeature addfeature addtoJSpreamble addtocommalist \
+addvalue aftersplitstring aftertestandsplitstring aktualnicislonadpisu aktualnidatum \
+alignbottom aligned alignedbox alignedline alignmentcharacter \
+allinputpaths alphabeticnumerals alwayscitation alwayscitation alwayscitation \
+alwayscite alwayscite alwayscite ampersand anchor \
+appendetoks appendgvalue appendtocommalist appendtoks appendtoksonce \
+appendvalue apply applyalternativestyle applyprocessor applytocharacters \
+applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced \
+applytosplitstringword applytosplitstringwordspaced applytowords arabicdecimals arabicexnumerals \
+arabicnumerals arg asciistr assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype atleftmargin atrightmargin attachment \
+autocap autodirhbox autodirvbox autodirvtop autoinsertnextspace \
+automathematics autosetups availablehsize averagecharwidth backgroundimage \
+backgroundimagefill backgroundline bar barevnalista barva \
+basegrid baselinebottom baselineleftbox baselinemiddlebox baselinerightbox \
+bbox beforesplitstring beforetestandsplitstring big bigbodyfont \
+bigg bigger biggl biggm biggr \
+bigl bigm bigr bigskip binom \
+bitmapimage blap bleed bleedheight bleedwidth \
+blockquote bodyfontenvironmentlist bodyfontsize bold boldface \
+bolditalic boldslanted booleanmodevalue bottombox bottomleftbox \
+bottomrightbox boxcursor boxmarker boxofsize boxreference \
+bpos breve bthiddencitation btxabbreviatedjournal btxaddjournal \
+btxalwayscitation btxalwayscitation btxalwayscitation btxauthorfield btxdetail \
+btxdirect btxdoif btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist \
+btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse \
+btxdoifsameaspreviouselse btxdoifuservariableelse btxexpandedjournal btxfield btxfieldname \
+btxfieldtype btxfirstofrange btxflush btxflushauthor btxflushauthorinverted \
+btxflushauthorinvertedshort btxflushauthorname btxflushauthornormal btxflushauthornormalshort btxflushsuffix \
+btxfoundname btxfoundtype btxhybridcite btxhybridcite btxhybridcite \
+btxhybridcite btxlabellanguage btxlabeltext btxlistcitation btxlistcitation \
+btxlistcitation btxloadjournalist btxoneorrange btxremapauthor btxsavejournalist \
+btxsetup btxsingularorplural btxsingularplural btxtextcitation btxtextcitation \
+btxtextcitation bublinkovanapoveda bublinkovanapoveda buildmathaccent buildtextaccent \
+buildtextbottomcomma buildtextbottomdot buildtextcedilla buildtextgrave buildtextmacron \
+buildtextognek calligraphic camel catcodetablename cbox \
+centeraligned centerbox centeredbox centeredlastline centerednextbox \
+centerline cernalinka cernelinky cfrac chapter \
+chardescription charwidthlanguage check checkcharacteralign checkedchar \
+checkedfiller checkedstrippedcsname checkedstrippedcsname checkinjector checknextindentation \
+checknextinjector checkpage checkparameters checkpreviousinjector checksoundtrack \
+checktwopassdata chem chemical chemicalbottext chemicalmidtext \
+chemicalsymbol chemicaltext chemicaltoptext chineseallnumerals chinesecapnumerals \
+chinesenumerals cisla cislonadpisu cislorovnice cislostrany \
+citace citation citation citation citation \
+cite cite cite cite citovat \
+clap classfont cldcommand cldcontext cldloadfile \
+cldprocessfile cleftarrow collect collectedtext collectexpanded \
+colorcomponents colored colored columnbreak com \
+combinepages commalistelement commalistsentence commalistsize comment \
+comparedimension comparedimensioneps completebtxrendering completecontent completeindex \
+completelist completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics \
+completelistofintermezzi completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms \
+completelistoftables completepagenumber completeregister complexorsimple complexorsimple \
+complexorsimpleempty complexorsimpleempty composedcollector composedlayer compresult \
+constantdimen constantdimenargument constantemptyargument constantnumber constantnumberargument \
+contentreference continuednumber continueifinputfile convertargument convertcommand \
+convertedcounter converteddimen convertedsubcounter convertmonth convertvalue \
+convertvboxtohbox copybtxlabeltext copyheadtext copylabeltext copymathlabeltext \
+copyoperatortext copypages copyparameters copyposition copyprefixtext \
+copytaglabeltext copyunittext countersubs counttoken counttokens \
+cramped crampedclap crampedllap crampedrlap crightarrow \
+crightoverleftarrow ctop ctxcommand ctxdirectcommand ctxdirectlua \
+ctxfunction ctxlatecommand ctxlatelua ctxloadluafile ctxlua \
+ctxluabuffer ctxluacode ctxreport ctxsprint currentassignmentlistkey \
+currentassignmentlistvalue currentbtxuservariable currentcommalistitem currentcomponent currentenvironment \
+currentfeaturetest currentinterface currentlanguage currentlistentrydestinationattribute currentlistentrylimitedtext \
+currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute currentlistentrytitle currentlistentrytitlerendered \
+currentlistsymbol currentmainlanguage currentmessagetext currentmoduleparameter currentoutputstream \
+currentproduct currentproject currentregime currentregisterpageuserdata currentresponses \
+currenttime currentvalue currentxtablecolumn currentxtablerow d \
+datasetvariable datum dayoftheweek dayspermonth dbinom \
+ddot decrement decrement decrementcounter decrementedcounter \
+decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface defaultobjectpage \
+defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand defconvertedvalue \
+defineMPinstance defineTABLEsetup defineactivecharacter definealternativestyle defineanchor \
+defineattachment defineattribute definebackground definebar definebodyfontswitch \
+definebreakpoint definebreakpoints definebtx definebtxdataset definebtxregister \
+definebtxrendering definebutton definecapitals definecharacterkerning definecharacterspacing \
+definechemical definechemicals definechemicalsymbol definecollector definecolumnbreak \
+definecombination definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty \
+definecomplexorsimpleempty defineconversionset definecounter definedataset definedelimitedtext \
+definedfont defineeffect defineenumerations defineexpandable defineexternalfigure \
+definefallbackfamily definefallbackfamily definefieldbody definefieldbodyset definefieldcategory \
+definefileconstant definefilefallback definefilesynonym definefiller definefirstline \
+definefittingpage definefontalternative definefontfallback definefontfamily definefontfamily \
+definefontfamilypreset definefontfamilypreset definefontfeature definefontfile definefontsize \
+definefontsolution defineformula defineformulaalternative defineframedcontent definefrozenfont \
+defineglobalcolor defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative \
+definehelp definehigh definehighlight definehspace definehypenationfeatures \
+defineindentedtext defineindenting defineinitial defineinsertion defineinteraction \
+defineinteractionbar defineinterfaceconstant defineinterfaceelement defineinterfacevariable defineinterlinespace \
+defineinterlinespace defineintermediatecolor defineitemgroup defineitems definelabelclass \
+definelayer definelayerpreset definelayerpreset definelayout definelinenote \
+definelinenumbering definelines definelistalternative definelistextra definelow \
+definelowhigh definelowmidhigh definemarginblock definemargindata definemarker \
+definemathaccent definemathalignment definemathcases definemathcommand definemathdoubleextensible \
+definemathematics definemathextensible definemathfence definemathfraction definemathframed \
+definemathmatrix definemathornament definemathoverextensible definemathovertextextensible definemathradical \
+definemathstackers definemathstyle definemathtriplet definemathunderextensible definemathundertextextensible \
+definemathunstacked definemeasure definemessageconstant definemixedcolumns definemode \
+definemultitonecolor definenamedcolor definenamedcolor definenamespace definenarrower \
+definenote defineornament defineornament defineoutputroutine defineoutputroutinecommand \
+definepage definepagebreak definepagechecker definepagegrid definepagegridarea \
+definepagegridspan definepageinjection definepageinjectionalternative definepageshift definepagestate \
+definepairedbox defineparagraph defineparallel defineparbuilder defineplacement \
+definepositioning defineprefixset defineprocesscolor defineprocessor definepushbutton \
+definepushsymbol definerenderingwindow defineresetset definescale definescript \
+definesectionlevels defineselector defineseparatorset defineshift definesidebar \
+definesort definespotcolor definestyleinstance definesubformula definesynonym \
+definesystemattribute definesystemconstant definesystemvariable definetabulation definetextbackground \
+definetextflow definetooltip definetransparency definetwopasslist definetype \
+definetypeface definetypescriptprefix definetypescriptsynonym definetypesetting defineunit \
+defineviewerlayer definevspace definevspacing definevspacingamount definextable \
+definuj definujakcent definujbarvu definujbarvu definujblok \
+definujbloksekce definujbuffer definujfont definujfont definujformatodkazu \
+definujhbox definujinterakcnimenu definujkombinovanyseznam definujkonverzi definujkonverzi \
+definujnadpis definujobrazeksymbol definujodkaz definujodstavce definujopis \
+definujoramovani definujoramovanytext definujpaletu definujpaletu definujplvouciobjekt \
+definujplvouciobjekt definujpodpole definujpole definujpopis definujpopisek \
+definujprekryv definujprikaz definujprofil definujprogram definujprostredizakladnihofontu \
+definujrejstrik definujsablonutabulky definujsekci definujseznam definujskupinubarev \
+definujstartstop definujstyl definujstylfontu definujsymbol definujsynonumumfontu \
+definujsynonyma definujtabelaci definujtext definujtrideni definujupravu \
+definujvelikostpapiru definujvelikostpapiru definujzakladnifont definujzakladnifont definujzasobnikpoli \
+definujznaceni definujznak delimited delimitedtext delkaseznamu \
+depthofstring depthonlybox depthspanningtext determinenoflines devanagarinumerals \
+dfrac digits digits dimensiontocount directcolor \
+directcolored directcolored directconvertedcounter directdummyparameter directgetboxllx \
+directgetboxlly directhighlight directlocalframed directluacode directselect \
+directsetbar directsetup directsymbol directvspacing dis \
+disabledirectives disableexperiments disablemode disableoutputstream disableparpositions \
+disableregime disabletrackers displaymath displaymathematics displaymessage \
+distributedhsize dividedsize doadaptleftskip doadaptrightskip doaddfeature \
+doassign doassignempty doboundtext docheckassignment docheckedpagestate \
+docheckedpair documentvariable dodoubleargument dodoubleargumentwithset dodoubleempty \
+dodoubleemptywithset dodoublegroupempty doeassign doexpandedrecurse dogetattribute \
+dogetattributeid dogetcommacommandelement dogobbledoubleempty dogobblesingleempty doif \
+doifMPgraphicelse doifallcommon doifallcommonelse doifalldefinedelse doifallmodes \
+doifallmodeselse doifassignmentelse doifblackelse doifbothsides doifbothsidesoverruled \
+doifboxelse doifbufferelse doifcolor doifcolorelse doifcommandhandler \
+doifcommandhandlerelse doifcommon doifcommonelse doifcontent doifconversiondefinedelse \
+doifconversionnumberelse doifcounter doifcounterelse doifcurrentfonthasfeatureelse doifdefined \
+doifdefinedcounter doifdefinedcounterelse doifdefinedelse doifdimensionelse doifdimenstringelse \
+doifdocumentargument doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse doifdrawingblackelse \
+doifelse doifelseMPgraphic doifelseallcommon doifelsealldefined doifelseallmodes \
+doifelseassignment doifelseblack doifelsebox doifelsebuffer doifelsecolor \
+doifelsecommandhandler doifelsecommon doifelseconversiondefined doifelseconversionnumber doifelsecounter \
+doifelsecurrentfonthasfeature doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused doifelsedefined \
+doifelsedefinedcounter doifelsedimension doifelsedimenstring doifelsedocumentargument doifelsedocumentfilename \
+doifelsedrawingblack doifelseempty doifelseemptyvalue doifelseemptyvariable doifelseenv \
+doifelsefastoptionalcheck doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory doifelsefigure \
+doifelsefile doifelsefiledefined doifelsefileexists doifelsefirstchar doifelseflagged \
+doifelsefontchar doifelsefontpresent doifelsefontsynonym doifelsehasspace doifelsehelp \
+doifelseincsname doifelseinelement doifelseinputfile doifelseinsertion doifelseinset \
+doifelseinstring doifelseinsymbolset doifelseintoks doifelseintwopassdata doifelseitalic \
+doifelselanguage doifelselayerdata doifelselayoutdefined doifelselayoutsomeline doifelselayouttextline \
+doifelseleapyear doifelselist doifelselocation doifelselocfile doifelsemainfloatbody \
+doifelsemarking doifelsemeaning doifelsemessage doifelsemode doifelsenextbgroup \
+doifelsenextbgroupcs doifelsenextchar doifelsenextoptional doifelsenextoptionalcs doifelsenextparenthesis \
+doifelsenonzeropositive doifelsenoteonsamepage doifelsenothing doifelsenumber doifelseobjectfound \
+doifelseobjectreferencefound doifelseoddpage doifelseoddpagefloat doifelseoldercontext doifelseolderversion \
+doifelseoverlapping doifelseoverlay doifelseparallel doifelseparentfile doifelsepath \
+doifelsepathexists doifelsepatterns doifelseposition doifelsepositionaction doifelsepositiononpage \
+doifelsepositionsonsamepage doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound doifelserightpagefloat \
+doifelserighttoleftinbox doifelsesamelinereference doifelsesamestring doifelsesetups doifelsesomebackground \
+doifelsesomespace doifelsesomething doifelsesometoks doifelsestringinstring doifelsestructurelisthasnumber \
+doifelsestructurelisthaspage doifelsesymboldefined doifelsesymbolset doifelsetext doifelsetextflow \
+doifelsetextflowcollector doifelsetypingfile doifelseundefined doifelseurldefined doifelsevalue \
+doifelsevaluenothing doifelsevariable doifempty doifemptyelse doifemptytoks \
+doifemptyvalue doifemptyvalueelse doifemptyvariable doifemptyvariableelse doifenv \
+doifenvelse doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse doiffieldcategoryelse \
+doiffigureelse doiffile doiffiledefinedelse doiffileelse doiffileexistselse \
+doiffirstcharelse doifflaggedelse doiffontcharelse doiffontpresentelse doiffontsynonymelse \
+doifhasspaceelse doifhelpelse doifincsnameelse doifinelementelse doifinputfileelse \
+doifinsertionelse doifinset doifinsetelse doifinstring doifinstringelse \
+doifinsymbolset doifinsymbolsetelse doifintokselse doifintwopassdataelse doifitalicelse \
+doiflanguageelse doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse doiflayouttextlineelse \
+doifleapyearelse doiflistelse doiflocationelse doiflocfileelse doifmainfloatbodyelse \
+doifmarkingelse doifmeaningelse doifmessageelse doifmode doifmodeelse \
+doifnextbgroupcselse doifnextbgroupelse doifnextcharelse doifnextoptionalcselse doifnextoptionalelse \
+doifnextparenthesiselse doifnonzeropositiveelse doifnot doifnotallcommon doifnotallmodes \
+doifnotcommandhandler doifnotcommon doifnotcounter doifnotdocumentargument doifnotdocumentfilename \
+doifnotempty doifnotemptyvalue doifnotemptyvariable doifnotenv doifnoteonsamepageelse \
+doifnotescollected doifnotfile doifnotflagged doifnothing doifnothingelse \
+doifnotinset doifnotinsidesplitfloat doifnotinstring doifnotmode doifnotnumber \
+doifnotsamestring doifnotsetups doifnotvalue doifnotvariable doifnumber \
+doifnumberelse doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse doifoddpagefloatelse \
+doifoldercontextelse doifolderversionelse doifoverlappingelse doifoverlayelse doifparallelelse \
+doifparentfileelse doifpathelse doifpathexistselse doifpatternselse doifposition \
+doifpositionaction doifpositionactionelse doifpositionelse doifpositiononpageelse doifpositionsonsamepageelse \
+doifpositionsonthispageelse doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse doifrighttoleftinboxelse \
+doifsamelinereferenceelse doifsamestring doifsamestringelse doifsetups doifsetupselse \
+doifsomebackground doifsomebackgroundelse doifsomespaceelse doifsomething doifsomethingelse \
+doifsometoks doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse doifstructurelisthaspageelse \
+doifsymboldefinedelse doifsymbolsetelse doiftext doiftextelse doiftextflowcollectorelse \
+doiftextflowelse doiftypingfileelse doifundefined doifundefinedcounter doifundefinedelse \
+doifurldefinedelse doifvalue doifvalueelse doifvaluenothing doifvaluenothingelse \
+doifvaluesomething doifvariable doifvariableelse doindentation dollar \
+doloop doloopoverlist donothing dontconvertfont dontleavehmode \
+dontpermitspacesbetweengroups dopositionaction doprocesslocalsetups doquadrupleargument doquadrupleempty \
+doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty dorechecknextindentation \
+dorecurse dorecurse dorepeatwithcommand doreplacefeature doresetandafffeature \
+doresetattribute dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument dosingleempty \
+dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature \
+dot dotfskip dotoks dotripleargument dotripleargumentwithset \
+dotripleempty dotripleemptywithset dotriplegroupempty doublebar doublebond \
+doublebrace doublebracket doubleparent dowith dowithnextbox \
+dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument dowithrange \
+dowithwargument dpofstring dummydigit dummyparameter eTeX \
+edefconvertedargument efcmaxheight efcmaxwidth efcminheight efcminwidth \
+efcparameter effect elapsedseconds elapsedtime eleftarrowfill \
+eleftharpoondownfill eleftharpoonupfill eleftrightarrowfill emphasisboldface emphasistypeface \
+emptylines emspace enabledirectives enableexperiments enablemode \
+enableoutputstream enableparpositions enableregime enabletrackers endnote \
+endnote enskip enspace env envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill ethiopic \
+etwoheadrightarrowfill eunderbarfill eunderbracefill eunderbracketfill eunderparentfill \
+executeifdefined exitloop exitloopnow expandcheckedcsname expanded \
+expandfontsynonym externalfigurecollectionmaxheight externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth \
+externalfigurecollectionparameter externiobraz fakebox fastdecrement fastincrement \
+fastlocalframed fastscale fastsetup fastsetupwithargument fastsetupwithargumentswapped \
+fastswitchtobodyfont fastsxsy feature feature fence \
+fenced fetchallmarkings fetchallmarks fetchmark fetchmarking \
+fetchonemark fetchonemarking fetchruntinecommand fetchtwomarkings fetchtwomarks \
+fieldbody fifthoffivearguments fifthofsixarguments figurefilename figurefilepath \
+figurefiletype figurefullname figureheight figurenaturalheight figurenaturalwidth \
+figuresymbol figurewidth filename filledhboxb filledhboxc \
+filledhboxg filledhboxk filledhboxm filledhboxr filledhboxy \
+filler filterfromnext filterfromvalue filterpages filterreference \
+findtwopassdata finishregisterentry firstcharacter firstcounter firstcountervalue \
+firstoffivearguments firstoffourarguments firstofoneargument firstofoneunexpanded firstofsixarguments \
+firstofthreearguments firstofthreeunexpanded firstoftwoarguments firstoftwounexpanded firstrealpage \
+firstrealpagenumber firstsubcountervalue firstsubpage firstsubpagenumber firstuserpage \
+firstuserpagenumber fitfieldframed fittopbaselinegrid flag floatuserdataparameter \
+flushcollector flushlayer flushlocalfloats flushnextbox flushnotes \
+flushoutputstream flushshapebox flushtextflow flushtokens flushtoks \
+fontalternative fontbody fontchar fontcharbyindex fontclass \
+fontclassname fontface fontfeaturelist fontsize fontstyle \
+footnotetext footnotetext forcecharacterstripping forcelocalfloats forgeteverypar \
+forgetparameters forgetragged formula foundbox fourthoffivearguments \
+fourthoffourarguments fourthofsixarguments frac frameddimension framedparameter \
+framedtext freezedimenmacro freezemeasure frenchspacing fromlinenote \
+frozenhbox gdefconvertedargument gdefconvertedcommand getMPdrawing getMPlayer \
+getboxllx getboxlly getbufferdata getcommacommandsize getcommalistsize \
+getdayoftheweek getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault \
+getdocumentfilename getdummyparameters getemptyparameters geteparameters getexpandedparameters \
+getfiguredimensions getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist \
+getfromtwopassdata getglyphdirect getglyphstyled getgparameters getlasttwopassdata \
+getlocalfloat getlocalfloats getmessage getnamedglyphdirect getnamedglyphstyled \
+getnamedtwopassdatalist getnaturaldimensions getnoflines getobject getobjectdimensions \
+getpaletsize getparameters getrandomcount getrandomdimen getrandomfloat \
+getrandomnumber getrandomseed getraweparameters getrawgparameters getrawnoflines \
+getrawparameters getrawxparameters getreference getreferenceentry getroundednoflines \
+getsubstring gettwopassdata gettwopassdatalist getuvalue getvalue \
+getvariable getvariabledefault getxparameters globaldisablemode globalenablemode \
+globalletempty globalpopbox globalpopmacro globalpreventmode globalprocesscommalist \
+globalpushbox globalpushmacro globalswapcounts globalswapdimens globalswapmacros \
+globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments gobblefivearguments \
+gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments gobbleoneargument \
+gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments gobblespacetokens \
+gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments gobbletwooptionals \
+gobbleuntil gobbleuntilrelax got grabbufferdata grabbufferdatadirect \
+grabuntil grave grayvalue greedysplitstring greeknumerals \
+groupedcommand gsetboxllx gsetboxlly gujaratinumerals gurmurkhinumerals \
+hairspace halfwaybox handletokens handwritten hangul \
+hanzi hash hat hboxofvbox hboxreference \
+hdofstring headhbox headlanguage headnumbercontent headnumberdistance \
+headnumberwidth headreferenceattributes headsym headtextcontent headtexts \
+headtextwidth headvbox headwidth heightanddepthofstring heightofstring \
+heightspanningtext helptext hglue hiddencitation hiddencite \
+highlight highordinalstr hilo himilo hl \
+hlavnijazyk hodnotabarvy horizontalgrowingbar horizontalpositionbar hphantom \
+hpos hsizefraction hsmash hsmashbox hsmashed \
+hspace htdpofstring htofstring hyphen hyphenatedcoloredword \
+hyphenatedfile hyphenatedfilename hyphenatedhbox hyphenatedpar hyphenatedurl \
+hyphenatedword ibox ifassignment iff ifinobject \
+ifinoutputstream ifparameters iftrialtypesetting ignoreimplicitspaces ignorevalue \
+immediatesavetwopassdata impliedby implies includemenu includeversioninfo \
+increment increment increment increment incrementcounter \
+incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue indentation \
+index index infofont infofontbold inheritparameter \
+inhibitblank ininner ininneredge ininnermargin initializeboxstack \
+inlinebuffer inlinedbox inlinemath inlinemathematics inlinemessage \
+inlineordisplaymath inlinerange innerflushshapebox inother inouter \
+inouteredge inoutermargin input input inputfilebarename \
+inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile insertpages \
+instalacejazyka instalacejazyka installactionhandler installactivecharacter installanddefineactivecharacter \
+installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler installbasicparameterhandler \
+installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler installdefinitionset \
+installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler \
+installdirectstyleandcolorhandler installframedautocommandhandler installframedcommandhandler installleftframerenderer installnamespace \
+installoutputroutine installpagearrangement installparameterhandler installparameterhashhandler installparametersethandler \
+installparentinjector installrightframerenderer installrootparameterhandler installsetuphandler installsetuponlycommandhandler \
+installshipoutmethod installsimplecommandhandler installsimpleframedcommandhandler installstyleandcolorhandler installswitchcommandhandler \
+installswitchsetuphandler installtexdirective installtextracker installtopframerenderer installunitsseparator \
+installunitsspace installversioninfo integerrounding interakcnilista interakcnitlacitka \
+interaktivnimenu intertext invokepageheandler istltdir istrtdir \
+italic italicbold italiccorrection itemtag itm \
+jazyk jdidolu jdina jdinabox jdinastranu \
+jobfilename jobfilesuffix kap kap keeplinestogether \
+keepunwantedspaces kerncharacters klonujpole komponenta komponenta \
+konvertujcislo kopirujpole koreancirclenumerals koreannumerals koreannumeralsc \
+koreannumeralsp koreanparentnumerals korekcebilehomista labellanguage labeltexts \
+languageCharacters languagecharacters languagecharwidth lastcounter lastcountervalue \
+lastdigit lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode latin \
+layeredtext layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata \
+lbox left leftbottombox leftbox lefthbox \
+leftheadtext leftlabeltext leftline leftmathlabeltext leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+lefttoright lefttorighthbox lefttorightvbox lefttorightvtop letbeundefined \
+letcatcodecommand letcscsname letcsnamecs letcsnamecsname letdummyparameter \
+letempty letgvalue letgvalueempty letgvalurelax letterampersand \
+letterat letterbackslash letterbar letterbgroup letterclosebrace \
+lettercolon letterdollar letterdoublequote letteregroup letterescape \
+letterexclamationmark letterhash letterhat letterleftbrace letterless \
+lettermore letteropenbrace letterpercent letterquestionmark letterrightbrace \
+lettersinglequote letterslash letterspacing lettertilde letterunderscore \
+letvalue letvalueempty letvaluerelax lfence lhbox \
+limitatelines limitatetext limitatetext limtatefirstline line \
+linenote linespanningtext listcitation listcitation listcitation \
+listcite listcite listcite listnamespaces llap \
+loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \
+loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \
+loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \
+localhsize localpopbox localpopmacro localpushbox localpushmacro \
+localundefine locatedfilepath locatefilepath locfilename logo \
+lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
+lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
+luaTeX luacode luaconditional luaenvironment luaexpanded \
+luafunction luajitTeX luamajorversion luaminorversion luaparameterset \
+luasetup luaversion m mLeftarrow mLeftrightarrow \
+mRightarrow makecharacteractive makerawcommalist makestrutofbox maoramovani \
+mapfontsize marginalninadpis marginalnislovo marginalnitext margindata \
+markcontent markinjector mat matematika math \
+mathbf mathbi mathblackboard mathbs mathcommand \
+mathdefault mathfraktur mathfunction mathit mathlabellanguage \
+mathlabeltext mathlabeltexts mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+maxaligned mazaramovani mbox mcframed measure \
+measured medskip medspace mequal meritko \
+mesic message metaTeX mezera mfence \
+mfunction mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow \
+middle middlealigned middlebox midhbox minimalhbox \
+mixedcaps mkvibuffer mleftarrow mleftharpoondown mleftharpoonup \
+mleftrightarrow mleftrightharpoons mmapsto moduleparameter molecule \
+mono monobold monobold mononormal monthlong \
+monthshort mprandomnumber mrel mrightarrow mrightharpoondown \
+mrightharpoonup mrightleftharpoons mrightoverleftarrow mrizka mtext \
+mtriplerel mtwoheadleftarrow mtwoheadrightarrow nadpis nalevo \
+nalevyokraj namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable \
+namedtaggedlabeltexts naokraj napravo napravyokraj nastavbarvu \
+nastavbarvy nastavbilamista nastavblok nastavbloksekce nastavbuffer \
+nastavcernelinky nastavcislonadpisu nastavcislostrany nastavcislovaniodstavcu nastavcislovaniradku \
+nastavcislovanistran nastavcitaci nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty \
+nastavhorejsek nastavhornitexty nastavinterakci nastavinterakci nastavinterakcnilistu \
nastavinterakcnimenu nastavinterakcniobrazovku nastavjazyk nastavkapitalky nastavkombinovanyseznam \
-nastavkomentar nastavkomentarstrany nastavlegendu nastavmarginalie nastavmarginalniblok \
-nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy nastavodkazovani \
-nastavodsazovani nastavodstavce nastavopis nastavoramovanetexty nastavoramovani \
-nastavorez nastavotoceni nastavpaletu nastavplvouciobjekt nastavplvouciobjekty \
-nastavpodcislostrany nastavpodtrzeni nastavpole nastavpolozky nastavpopisek \
-nastavpopisky nastavpopisy nastavpozadi nastavpoznamkypodcarou nastavprechodstrany \
-nastavpreskok nastavprofily nastavprogramy nastavprostredizakladnihofontu nastavpublikace \
-nastavradkovani nastavradky nastavrastr nastavrejstrik nastavrovnice \
-nastavsadusymbolu nastavsekci nastavseznam nastavseznamodkazu nastavsirkucary \
-nastavsloupce nastavspodek nastavspojeni nastavsynchronizaci nastavsynchronizacnilistu \
-nastavsynonyma nastavsystem nastavtab nastavtabelaci nastavtabulky \
-nastavtenkelinky nastavtext nastavtexthlavicky nastavtextovelinky nastavtextpopisku \
-nastavtexttexty nastavtextyupati nastavtextyzahlavi nastavtlacitka nastavtoleranci \
-nastavtrideni nastavtype nastavumisteniprotejsku nastavumistovani nastavupati \
-nastavupravu nastavurl nastavusporadani nastavvelikostpapiru nastavverze \
-nastavvsechnapole nastavvycty nastavvyplnovelinky nastavvyplnoveradky nastavvystup \
-nastavvzhled nastavzahlavi nastavzakladnifont nastavzarovnani nastavznaceni \
-nastavzuzeni nastrane navigating nejakyradek nekde \
-nextsection neznamo nivy nizky nocap \
-noheaderandfooterlines noindenting nokap nolist nomarking \
-nomoreblocks nomorefiles nop nospace note \
-notopandbottomlines nowhitespace numberofsubpages numbers obrazovka \
-odkaz odkaznadatum odkaznastranu odkaznatext odkazujici \
-odsazenishora odsazenizleva odsazovani okr opakovat \
-opis opissoubor oramovani oref orez \
-otocit outeredgedistance outeredgewidth outermargindistance outermarginwidth \
-overbar overbars overstrike overstrikes oznaceni \
-oznacverzi packed page pagedepth pageoffset \
-pagereference paragraph parovastrana part periods \
-pis placebookmarks placecombinedlist placefloat placefootnotes \
-placeformula placeheadnumber placeheadtext placelegend placelist \
-placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes placelogos \
-placeongrid placeontopofeachother placepagenumber placerawlist placereferencelist \
-placeregister placerule placesidebyside placesubformula placetextvariable \
-plnezneni pol pole polozka polozky \
-popisky poppisek porovnejpaletu porovnejskupinubarev position \
-positiontext pozadi pozice poznamka poznamkapodcarou \
-pref prelozit premistinamrizku prepninazakladnifont preskoc \
-prizpusobivepole prizpusobvzhled processblocks processpage produkt \
-program projekt propojeneznaceni propojenydokument propojenyrejstrik \
-prostredi publication publikace quotation quote \
-ran ref reference referral referraldate \
-register reservefloat reset resetmarking resetnumber \
-resettextcontent resetznaceni rightaligned rimskecislice romannumerals \
-rotate rozdelplvouciobjekt rozmer rozpojeneznaceni roztazene \
-scale schovejbloky screen section sedabarva \
-seeregister selectblocks selectpaper selectversion setnumber \
-settextcontent settextvariable setupalign setupanswerarea setuparranging \
-setupbackground setupbackgrounds setupblackrules setupblank setupblock \
-setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer \
-setupbuttons setupcapitals setupcaption setupcaptions setupclipping \
-setupcolor setupcolors setupcolumns setupcolumnset setupcolumnsetlines \
-setupcolumnsetstart setupcombinations setupcombinedlist setupcomment setupdescriptions \
-setupenumerations setupexternalfigures setupfield setupfields setupfillinlines \
-setupfillinrules setupfloat setupfloats setupfloatsplitting setupfonthandling \
-setupfontsynonym setupfooter setupfootertexts setupfootnotedefinition setupfootnotes \
-setupforms setupformulas setupframed setupframedtexts setuphead \
-setupheader setupheadertexts setupheadnumber setupheads setupheadtext \
-setuphyphenmark setupindentedtext setupindenting setupinmargin setupinteraction \
-setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 \
-setupitemgroup setupitems setuplabeltext setuplanguage setuplayout \
-setuplegend setuplinenumbering setuplines setuplinewidth setuplist \
-setuplistalternative setupmakeup setupmarginblocks setupmarginrules setupmarking \
-setupmathalignment setupnarrower setupnumber setupnumbering setupoppositeplacing \
-setupoutput setuppagenumber setuppagenumbering setuppagetransitions setuppalet \
-setuppaper setuppapersize setupparagraphnumbering setupparagraphs setupplacement \
-setuppositioning setupprofiles setupprograms setuppublications setupquote \
-setupreferencelist setupreferencing setupregister setuprotate setuprule \
-setupscreens setupsection setupsectionblock setupsorting setupspacing \
-setupstartstop setupstrut setupsubpagenumber setupsymbolset setupsynchronization \
-setupsynchronizationbar setupsynonyms setupsystem setuptab setuptables \
-setuptabulate setuptext setuptextposition setuptextrules setuptexttexts \
-setuptextvariable setupthinrules setuptolerance setuptop setuptoptexts \
-setuptype setuptyping setupunderbar setupurl setupversions \
-setupwhitespace showbodyfont showbodyfontenvironment showcolor showcolorgroup \
-showexternalfigures showfields showframe showgrid showlayout \
-showmakeup showpalet showprint showsetups showstruts \
-showsymbolset sirkalevehookraje sirkalevemarginalie sirkamarginalie sirkaokraje \
-sirkapapiru sirkapravehookraje sirkapravemarginalie sirkasazby sirkaseznamu \
-sirkatextu sirkatiskpapiru sloupec slovovpravo someline \
-somewhere sort space splitfloat spodek \
-stanovcharakteristickuseznamu stanovcislonadpisu startalignment startbackground startbarva \
-startbuffer startcislovaniradku startcitace startcolor startcolumnmakeup \
-startcolumns startcolumnset startcombination startcomment startcomponent \
-startdescription startdocument startdokument startenumeration startenvironment \
-startfact startfigure startfloattext startformula startframedtext \
-startglobalni starthiding startinteractionmenu startitemgroup startkodovani \
-startkomponenta startkorekceradku startlegend startline startlinecorrection \
-startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes \
-startlokalni startlokalnipoznamkypodcarou startmakeup startmarginalniblok startmarginalnilinka \
-startmarginblock startmarginrule startnamemakeup startnarrower startnezhustene \
-startobraz startopposite startoverlay startoverview startpacked \
-startparagraph startpositioning startpostponing startpozadi startprehled \
-startprekryv startproduct startprodukt startprofil startprofile \
-startproject startprojekt startprostredi startprotejsek startquotation \
-startradek startradky startrastr startregister startsadasymbolu \
-startsloupce startspojeni startsymbolset startsynchronizace startsynchronization \
-starttable starttables starttabulate starttabulka starttabulky \
-starttext starttextovalinka starttextrule starttyping startumistovani \
-startunpacked startuprava startversion startverze startzarovnavani \
-startzhustene startzuzeni stopalignment stopbackground stopbarva \
-stopbuffer stopcislovaniradku stopcitace stopcolor stopcolumnmakeup \
-stopcolumns stopcolumnset stopcombination stopcomment stopcomponent \
-stopdescription stopdocument stopdokument stopenumeration stopenvironment \
-stopfact stopfigure stopfloattext stopformula stopframedtext \
-stopglobalni stophiding stopinteractionmenu stopitemgroup stopkodovani \
-stopkomponenta stopkorekceradku stoplegend stopline stoplinecorrection \
-stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes \
-stoplokalni stoplokalnipoznamkypodcarou stopmakeup stopmarginalniblok stopmarginalnilinka \
-stopmarginblock stopmarginrule stopnamemakeup stopnarrower stopnezhustene \
-stopopposite stopoverlay stopoverview stoppacked stopparagraph \
-stoppositioning stoppostponing stoppozadi stopprehled stopprekryv \
-stopproduct stopprodukt stopprofil stopprofile stopproject \
-stopprojekt stopprostredi stopprotejsek stopquotation stopradek \
-stopradky stoprastr stopsloupce stopspojeni stopsymbolset \
-stopsynchronizace stopsynchronization stoptable stoptables stoptabulate \
-stoptabulka stoptabulky stoptext stoptextovalinka stoptextrule \
-stoptyping stopumistovani stopunpacked stopuprava stopversion \
-stopverze stopzarovnavani stopzhustene stopzuzeni strana \
-stretched sub subject subpagenumber subsection \
-subsubject subsubsection subsubsubject switchtobodyfont switchtorawfont \
-sym symbol synchronizacnilista synchronizationbar synchronize \
-synchronizovat synonym tab tecky tenkalinka \
-tenkelinky testcolumn testpage tex texthlavicky \
-textovalinka textpopisku textreference textrule textvariable \
-thinrule thinrules title tlacitko tlacitkomenu \
-tloustkacary tooltip translate tref tvrdamezera \
-tvrdemezery txt typ type typebuffer \
-typefile ukazbarvu ukazexterniobrazy ukazmrizku ukaznastaveni \
-ukazpaletu ukazpodpery ukazpole ukazpostredizakladnihofontu ukazramecek \
-ukazsadusymbolu ukazskupinubarev ukazupravu ukazvytisk ukazvzhled \
-ukazzakladnifont umistikombinovanyseznam umistilegendu umistiloga umistilokalnipoznamkypodcarou \
-umistinadsebe umistinamrizku umistipodrovnici umistipoznamkypodcarou umistirejstrik \
-umistirovnici umistiseznam umistivedlesebe umistizalozky underbar \
-underbars urcicharakteristikurejstriku useURL useXMLfilter useblocks \
-usecommands usedirectory useencoding useexternaldocument useexternalfigure \
-useexternalfile useexternalfiles useexternalsoundtrack usemodule usereferences \
-usespecials usesymbols usetypescript usetypescriptfile uzijJSscripts \
-uzijURL uzijadresar uzijbloky uzijexternidokument uzijexterniobraz \
-uzijexternisoubor uzijexternisoubory uzijexternizvuk uzijkodovani uzijmodul \
-uzijmoduly uzijodkazy uzijprikazy uzijspeciality uzijsymbol \
-uzijurl version verze vl vlasovalinka \
-vlevo vpravo vradku vsedniden vyberbloky \
-vyberpapir vyberverzi vyplnenytext vyplnovelinky vyplnovepole \
-vyplnovyradek vyskahorejsku vyskapapiru vyskasazby vyskaseznamu \
-vyskaspodku vyskatextu vyskatiskpapiru vyskaupati vyskazahlavi \
-vysoky vyznam vzdalenosthorejsku vzdalenostlevehookraje vzdalenostlevemarginalie \
-vzdalenostmarginalie vzdalenostokraje vzdalenostpravehookraje vzdalenostpravemarginalie vzdalenostspodku \
-vzdalenostupati vzdalenostzahlavi weekday whitespace wordright \
-writebetweenlist writetolist writetoreferencelist writetoregister zablokujinterakcnimenu \
-zachovejbloky zadnamezera zadnebilemisto zadnedalsibloky zadnedalsisoubory \
-zadnehorniadolniradky zadneodsazovani zadnezahlaviaupati zadneznaceni zadnyrozmer \
-zadnyseznam zadnytest zalozka zapisdorejstriku zapisdoseznamu \
-zapisdoseznamuodkazu zapismeziseznam zaramovani zarovnanonastred zarovnanovlevo \
-zarovnanovpravo zasobnikpoli zaznamovepole zhustene ziskejbuffer \
-ziskejznaceni zlomek znaceni znak znaky \
-zpracujbloky zpracujstranu zrcadlit zref zvysujicicislo
+nastavkomentar nastavkomentarstrany nastavlegendu nastavmarginalnilinky nastavmeziradkovoumezeru \
+nastavmeziradkovoumezeru nastavmeziradkovoumezeru nastavmeziradkovoumezeru nastavmeziradkovoumezeru nastavmeziradkovoumezeru \
+nastavnadpis nastavodkazovani nastavodsazovani nastavodstavce nastavodstavce \
+nastavopis nastavoramovani nastavorez nastavotoceni nastavpaletu \
+nastavplvouciobjekt nastavpodcislostrany nastavpole nastavpolozky nastavpopisek \
+nastavpozadi nastavpozadi nastavpozadi nastavprechodstrany nastavpreskok \
+nastavprogramy nastavradkovani nastavradky nastavrejstrik nastavrejstrik \
+nastavsadusymbolu nastavseznam nastavsirkucary nastavsloupce nastavspodek \
+nastavsynonyma nastavtabelaci nastavtabulky nastavtenkelinky nastavtext \
+nastavtexthlavicky nastavtextovelinky nastavtextpopisku nastavtexttexty nastavtextyupati \
+nastavtextyzahlavi nastavtoleranci nastavtrideni nastavtype nastavumisteniprotejsku \
+nastavumistovani nastavupati nastavupravu nastavurl nastavusporadani \
+nastavvelikostpapiru nastavvelikostpapiru nastavvsechnapole nastavvyplnovelinky nastavvyplnoveradky \
+nastavvzhled nastavvzhled nastavzahlavi nastavzakladnifont nastavzarovnani \
+nastavznaceni nastavzuzeni nastrane naturalhbox naturalhpack \
+naturalvbox naturalvcenter naturalvpack naturalvtop naturalwd \
+negatecolorbox negated negthinspace nejakyradek nekde \
+newattribute newcatcodetable newcounter newevery newfrenchspacing \
+newmode newsignal newsystemmode nextbox nextboxdp \
+nextboxht nextboxhtdp nextboxwd nextcounter nextcountervalue \
+nextdepth nextparagraphs nextrealpage nextrealpagenumber nextsubcountervalue \
+nextsubpage nextsubpagenumber nextuserpage nextuserpagenumber neznamo \
+nihongo nivy nizky nocitation nocitation \
+nocite nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation nokap nonfrenchspacing nonmathematics \
+nop nop normal normalboldface normalframedwithsettings \
+normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight normalizefontline \
+normalizefontwidth normalizetextdepth normalizetextheight normalizetextline normalizetextwidth \
+normaltypeface notesymbol notragged ntimes numberofpoints \
+obeydepth objectdepth objectheight objectmargin objectwidth \
+obox obrazovka odkaz odkaznastranu odkaznatext \
+odkazujici offset offsetbox okr onedigitrounding \
+operatorlanguage operatortext opis opis opissoubor \
+oramovani ordinaldaynumber ordinalstr oref orez \
+ornamenttext ornamenttext ornamenttext otocit outputfilename \
+outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy over \
+overbar overbar overbars overbartext overbarunderbar \
+overbrace overbracetext overbraceunderbrace overbracket overbrackettext \
+overbracketunderbracket overlaybutton overlaybutton overlaycolor overlaydepth \
+overlayfigure overlayheight overlaylinecolor overlaylinewidth overlayoffset \
+overlayrollbutton overlaywidth overleftarrow overleftharpoondown overleftharpoonup \
+overleftrightarrow overloaderror overparent overparenttext overparentunderparent \
+overrightarrow overrightharpoondown overrightharpoonup overset overstrike \
+overstrikes overtwoheadleftarrow overtwoheadrightarrow oznaceni pagearea \
+pagebreak pagefigure pagegridspanwidth pageinjection pageinjection \
+pagestaterealpage paletsize part pdfTeX pdfactualtext \
+pdfbackendactualtext pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate \
+pdfbackendsetinfo pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute \
+pdfbackendsetpattern pdfbackendsetshade pdfcolor pdfeTeX percent \
+percentdimen permitcaretescape permitcircumflexescape permitspacesbetweengroups persiandecimals \
+persiannumerals phantom phantombox pickupgroupedcommand pis \
+pis placeattachments placebtxrendering placechemical placecitation \
+placecomments placecontent placecurrentformulanumber placedbox placefigure \
+placefloat placefloatwithsetups placeframed placegraphic placeheadnumber \
+placeheadtext placehelp placeindex placeinitial placeintermezzo \
+placelayer placelayeredtext placelistofabbreviations placelistofchemicals placelistoffigures \
+placelistofgraphics placelistofintermezzi placelistoflogos placelistofpublications placelistofsorts \
+placelistofsynonyms placelistoftables placelocalnotes placement placenamedfloat \
+placenamedformula placenotes placepagenumber placepairedbox placeparallel \
+placerawlist placerenderingwindow placetable plnezneni pol \
+pole polozka polozky popattribute popmacro \
+popmode popsystemmode porovnejpaletu porovnejskupinubarev positionoverlay \
+positionregionoverlay postponenotes pozadi pozice poznamka \
+poznamkapodcarou poznamkapodcarou predefinedfont predefinefont predefinesymbol \
+pref prefixedpagenumber prefixlanguage prefixtext prelozit \
+prependetoks prependgvalue prependtocommalist prependtoks prependtoksonce \
+prependvalue prepninazakladnifont presetbtxlabeltext presetfieldsymbols presetheadtext \
+presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext presettaglabeltext \
+presetunittext preskoc pretocommalist prevcounter prevcountervalue \
+preventmode prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage \
+prevsubpagenumber prevuserpage prevuserpagenumber prizpusobivepole prizpusobvzhled \
+procent processMPbuffer processMPfigurefile processaction processallactionsinset \
+processassignlist processassignmentcommand processassignmentlist processbetween processbodyfontenvironmentlist \
+processcolorcomponents processcommacommand processcommalist processcommalistwithparameters processcontent \
+processfile processfilemany processfilenone processfileonce processfirstactioninset \
+processisolatedchars processisolatedwords processlinetablebuffer processlinetablefile processlist \
+processmonth processranges processseparatedlist processtexbuffer processtokens \
+processuntil processxtablebuffer processyear produkt produkt \
+profiledbox profilegivenbox program projekt projekt \
+prostredi prostredi pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped \
+pseudosmallcapped psh purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qquad \
+quad quitcommalist quitprevcommalist quittypescriptscanning raggedbottom \
+raggedcenter raggedleft raggedright raggedwidecenter raisebox \
+ran randomizetext randomnumber raw rawcounter \
+rawcountervalue rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse \
+rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable \
+rawsubcountervalue rbox readfile readfixfile readjobfile \
+readlocfile readsetfile readsysfile readtexfile readxmlfile \
+realSmallCapped realSmallcapped realpagenumber realsmallcapped recursedepth \
+recurselevel recursestring redoconvertfont ref referenceprefix \
+registerattachment registerctxluafile registerexternalfigure registerfontclass registerhyphenationexception \
+registerhyphenationpattern registermenubuttons registersort registersynonym registerunit \
+regular relatemarking relateparameterhandlers relaxvalueifundefined remainingcharacters \
+removebottomthings removedepth removefromcommalist removelastskip removelastspace \
+removemarkedcontent removepunctuation removesubstring removetoks removeunwantedspaces \
+replacefeature replacefeature replaceincommalist replaceword rescan \
+rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \
+resetandaddfeature resetandaddfeature resetbreakpoints resetbuffer resetcharacteralign \
+resetcharacterkerning resetcharacterspacing resetcharacterstripping resetcollector resetcounter \
+resetdigitsmanipulation resetdirection resetfeature resetflag resetfontcolorsheme \
+resetfontfallback resetfontsolution resethyphenationfeatures resetinjector resetinteractionmenu \
+resetitaliccorrection resetlayer resetlocalfloats resetmarker resetmode \
+resetpagenumber resetparallel resetpath resetpenalties resetprofile \
+resetreference resetreplacement resetscript resetsetups resetshownsynonyms \
+resetsubpagenumber resetsymbolset resetsystemmode resettimer resettrackers \
+resettrialtypesetting resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue \
+resetvisualizers resetznaceni reshapebox restartcounter restorebox \
+restorecatcodes restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont \
+reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature rfence \
+rhbox right rightbottombox rightbox righthbox \
+rightheadtext rightlabeltext rightline rightmathlabeltext rightorleftpageaction \
+rightskipadaption rightsubguillemot righttoleft righttolefthbox righttoleftvbox \
+righttoleftvtop righttopbox rimskecislice rlap rob \
+robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist rollbutton \
+rollbutton roman rozdelplvouciobjekt roztazene rtop \
+rul ruledhbox ruledhpack ruledmbox ruledtopv \
+ruledtpack ruledvbox ruledvpack ruledvtop runMPbuffer \
+safechar sans sansbold sansnormal sansserif \
+savebox savebtxdataset savebuffer savebuffer savecounter \
+savecurrentattributes savenormalmeaning savetaggedtwopassdata savetwopassdata sbox \
+schovejbloky secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments \
+secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section sedabarva \
+seeindex select serializecommalist serializedcommalist serif \
+serifbold serifnormal setJSpreamble setMPlayer setMPpositiongraphic \
+setMPpositiongraphicrange setMPtext setMPvariable setMPvariables setbar \
+setbigbodyfont setboxllx setboxlly setbreakpoints setcapstrut \
+setcatcodetable setcharacteralign setcharactercasing setcharactercleaning setcharacterkerning \
+setcharacterspacing setcharacterstripping setcharstrut setcollector setcolormodell \
+setcounter setcounterown setcurrentfontclass setdataset setdefaultpenalties \
+setdigitsmanipulation setdirection setdocumentargument setdocumentargumentdefault setdocumentfilename \
+setdummyparameter setelementexporttag setemeasure setevalue setevariable \
+setevariables setfirstline setflag setfont setfontcolorsheme \
+setfontfeature setfontsolution setfontstrut setgmeasure setgvalue \
+setgvariable setgvariables sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal \
+sethyphenationfeatures setinitial setinjector setinteraction setinterfacecommand \
+setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering \
+setitaliccorrection setlayer setlayerframed setlayerframed setlayertext \
+setlocalhsize setmainbodyfont setmainparbuilder setmarker setmarking \
+setmathstyle setmeasure setmessagetext setmode setnostrut \
+setnote setnote setnotetext setnotetext setobject \
+setoldstyle setpagegrid setpagereference setpagestate setpagestaterealpageno \
+setpenalties setpercentdimen setposition setpositionbox setpositiondata \
+setpositiondataplus setpositiononly setpositionplus setpositionstrut setprofile \
+setrandomseed setreference setreferencedobject setregisterentry setreplacement \
+setrigidcolumnbalance setrigidcolumnhsize setscript setsectionblock setsimplecolumnhsize \
+setsmallbodyfont setsmallcaps setstackbox setstructurepageregister setstrut \
+setsuperiors setsystemmode settabular settaggedmetadata settextcontent \
+settightobject settightreferencedobject settightunreferencedobject settrialtypesetting setuevalue \
+setugvalue setunreferencedobject setup setup setupMPgraphics \
+setupMPinstance setupMPpage setupMPvariables setupTABLE setupTEXpage \
+setupattachment setupbackend setupbar setupbleeding setupbookmark \
+setupbtx setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist \
+setupbtxregister setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing \
+setupchemical setupchemicalframed setupcollector setupcolumnspan setupcombination \
+setupcontent setupcounter setupdataset setupdelimitedtext setupdescription \
+setupdirections setupdocument setupeffect setupenumeration setupenv \
+setupexport setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory \
+setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline \
+setupfittingpage setupfloatcaption setupfontexpansion setupfontprotrusion setupfontsolution \
+setupforms setupformula setupframedcontent setupframedtext setupglobalreferenceprefix \
+setupheadalternative setuphelp setuphigh setuphighlight setuphyphenation \
+setupindentedtext setupindex setupinitial setupinsertion setupitaliccorrection \
+setupitemgroup setupitemgroup setuplabel setuplayer setuplayeredtext \
+setuplayouttext setuplinenote setuplinetable setuplistalternative setuplistextra \
+setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh \
+setupmarginblock setupmargindata setupmarginframed setupmarginrule setupmathalignment \
+setupmathcases setupmathematics setupmathfence setupmathfraction setupmathframed \
+setupmathlabeltext setupmathmatrix setupmathornament setupmathradical setupmathstackers \
+setupmathstyle setupmixedcolumns setupmodule setupnotation setupnote \
+setupoffset setupoffsetbox setupoperatortext setupoutputroutine setupoutputroutine \
+setuppagechecker setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines \
+setuppagegridspan setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift \
+setuppagestate setuppairedbox setuppaper setupparagraph setupparagraphintro \
+setupparallel setupperiods setupplacement setuppositionbar setupprefixtext \
+setupprocessor setupprofile setupquotation setuprealpagenumber setupreferenceformat \
+setupreferenceprefix setupreferencestructureprefix setuprenderingwindow setups setups \
+setupscale setupscript setupselector setupshift setupsidebar \
+setupspellchecking setupstartstop setupstretched setupstruts setupstyle \
+setupsubformula setuptabulation setuptagging setuptaglabeltext setuptextbackground \
+setuptextflow setuptooltip setupunit setupunittext setupuserpagenumber \
+setupversion setupviewerlayer setupvspacing setupwithargument setupwithargumentswapped \
+setupxml setupxtable setuvalue setuxvalue setvalue \
+setvariable setvariables setvisualizerfont setwidthof setxmeasure \
+setxvalue setxvariable setxvariables sfrac shapedhbox \
+shiftdown shiftup showallmakeup showattributes showboxes \
+showbtxdatasetauthors showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness showbtxdatasetfields \
+showbtxdatasetfields showbtxfields showbtxfields showbtxhashedauthors showbtxtables \
+showchardata showcharratio showcolorbar showcolorcomponents showcolorset \
+showcolorstruts showcounter showdirectives showdirsinmargin showedebuginfo \
+showexperiments showfont showfontdata showfontkerns showfontparameters \
+showfontstrip showfontstyle showglyphs showgridsnapping showhelp \
+showhyphenationtrace showhyphens showinjector showjustification showkerning \
+showlayoutcomponents showligature showligatures showlogcategories showmargins \
+showmessage showminimalbaseline shownextbox showotfcomposition showparentchain \
+showsetupsdefinition showtimer showtokens showtrackers showvalue \
+showvariable showwarning simplealignedbox simplealignedboxplus simplealignedspreadbox \
+simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond \
+sixthofsixarguments slanted slantedbold slicepages sloupec \
+slovenianNumerals sloveniannumerals slovovpravo small smallbodyfont \
+smallbold smallbolditalic smallboldslanted smallcappedcharacters smallcappedromannumerals \
+smaller smallitalicbold smallnormal smallskip smallslanted \
+smallslantedbold smalltype smash smashbox smashboxed \
+smashedhbox smashedvbox snaptogrid snaptogrid someheadnumber \
+somekindoftab somelocalfloat somenamedheadnumber someplace spanishNumerals \
+spanishnumerals speech splitdfrac splitfilename splitfrac \
+splitoffbase splitofffull splitoffkind splitoffname splitoffpath \
+splitoffroot splitofftokens splitofftype splitstring spodek \
+spodek spreadhbox sqrt stackrel stanovcharakteristickuseznamu \
+stanovcislonadpisu startJScode startJSpreamble startLUA startLUA \
+startMP startMP startMPclip startMPcode startMPdefinitions \
+startMPdrawing startMPdrawing startMPenvironment startMPextensions startMPinclusions \
+startMPinitializations startMPpage startMPpositiongraphic startMPpositionmethod startMPrun \
+startPARSEDXML startPARSEDXML startTABLE startTABLE startTABLEbody \
+startTABLEbody startTABLEfoot startTABLEfoot startTABLEhead startTABLEhead \
+startTABLEnext startTABLEnext startTC startTD startTDs \
+startTEX startTEX startTEXpage startTH startTN \
+startTR startTRs startTX startTY startXML \
+startXML startalign startalignment startallmodes startappendices \
+startarrangedpages startattachment startbackmatter startbar startbar \
+startbarva startbarva startbarva startbitmapimage startblockquote \
+startbodymatter startboxedcolumns startbtxlabeltext startbtxrenderingdefinitions startbuffer \
+startbuffer startcases startcatcodetable startcatcodetable startcenteraligned \
+startchapter startcharacteralign startcheckedfences startchemical startcitace \
+startcitovat startcollect startcollecting startcolorintent startcolorset \
+startcolumns startcolumnspan startcom startcombination startcombination \
+startcomment startcontextcode startcontextdefinitioncode startctxfunction startctxfunctiondefinition \
+startcurrentcolor startcurrentlistentrywrapper startdelimited startdelimitedtext startdisplaymath \
+startdmath startdocument starteffect startembeddedxtable startembeddedxtable \
+startendnote startendnote startendofline startexceptions startexpanded \
+startexpandedcollect startextendedcatcodetable startexternalfigurecollection startfakt startfigure \
+startfiguretext startfittingpage startfloatcombination startfloatcombination startfont \
+startfontclass startfontsolution startformula startformulas startframedcontent \
+startframedtext startfrontmatter startgot startgraphictext startgridsnapping \
+startgridsnapping starthboxestohbox starthelptext starthiding starthighlight \
+starthyphenation startimath startindentation startindentedtext startinteraction \
+startinteraktivnimenu startinterface startintermezzotext startintertext startitemgroup \
+startitemize startjdina startknockout startkomponenta startkomponenta \
+startlayout startlegend startlinealignment startlinecorrection startlinenote \
+startlinenumbering startlinenumbering startlines startlinetable startlinetablebody \
+startlinetablecell startlinetablehead startlocalfootnotes startlocalheadsetup startlocallinecorrection \
+startlocalnotes startlocalsetups startlocalsetups startlua startluacode \
+startluaparameterset startluasetups startluasetups startmakeup startmarginalnilinka \
+startmarginalnilinka startmarginblock startmarkedcontent startmathalignment startmathcases \
+startmathlabeltext startmathmatrix startmathmode startmathstyle startmathstyle \
+startmatrices startmatrix startmaxaligned startmdformula startmiddlealigned \
+startmixedcolumns startmode startmodeset startmodule startmodule \
+startmoduletestsection startmpformula startnadpis startnamedsection startnamedsubformulas \
+startnarrow startnarrow startnarrow startnarrower startnegative \
+startnicelyfilledbox startnointerference startnop startnotallmodes startnotext \
+startnotmode startoperatortext startopposite startoramovani startoutputstream \
+startoverlay startoverprint startpagecomment startpagefigure startpagegrid \
+startpagegridspan startpagelayout startpar startpar startparagraph \
+startparagraphs startparagraphscell startparbuilder startpart startpath \
+startplacechemical startplacefigure startplacefloat startplacegraphic startplaceintermezzo \
+startplacepairedbox startplacetable startpolozka startpositioning startpositionoverlay \
+startpositive startpostponing startpozadi startpozadi startpoznamkapodcarou \
+startpoznamkapodcarou startprefixtext startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand \
+startprocesscommalist startprodukt startprodukt startprojekt startprojekt \
+startprostredi startprostredi startprotect startprotectedcolors startpsh \
+startpublikace startpunctuation startradek startrandomized startrandomseed \
+startraw startrawsetups startrawsetups startreadingfile startreferenceprefix \
+startreferenceprefix startregime startregister startreusableMPgraphic startrob \
+startrul startscript startsdformula startsection startsectionblock \
+startsectionblockenvironment startsectionlevel startsetups startsetups startshapebox \
+startshift startsidebar startsimplecolumns startspecialitem startspecialitem \
+startspecialitem startspeech startspformula startspodek startspread \
+startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter startstructurepageregister \
+startstrut startstyle startstyle startsubformulas startsubject \
+startsubsection startsubsentence startsubstack startsubsubject startsubsubsection \
+startsubsubsubject startsubsubsubsection startsubsubsubsubject startsubsubsubsubsection startsubsubsubsubsubject \
+startsymbolset starttable starttable starttablehead starttables \
+starttables starttabletail starttabletext starttabulate starttabulatehead \
+starttabulatetail starttagged starttaglabeltext starttexcode starttexcode \
+starttexdefinition starttext starttext starttextbackground starttextbackgroundmanual \
+starttextcolor starttextcolorintent starttextflow starttexthlavicky starttextovalinka \
+starttextpopisku starttitle starttokens starttxt starttypescript \
+starttypescriptcollection starttyping starttyping startumistilegendu startumistirovnici \
+startumistirovnici startuniqueMPgraphic startuniqueMPpagegraphic startunittext startunpacked \
+startusableMPgraphic startuseMPgraphic startusemathstyleparameter startusingbtxspecification startvboxtohbox \
+startvboxtohboxseparator startviewerlayer startxcell startxcellgroup startxgroup \
+startxmldisplayverbatim startxmlinlineverbatim startxmlraw startxmlsetups startxmlsetups \
+startxrow startxrowgroup startxtable startxtable startxtablebody \
+startxtablebody startxtablefoot startxtablefoot startxtablehead startxtablehead \
+startxtablenext startxtablenext startzarovnanonastred startzarovnanovlevo startzarovnanovpravo \
+startzhustene stopJScode stopJSpreamble stopLUA stopLUA \
+stopMP stopMP stopMPclip stopMPcode stopMPdefinitions \
+stopMPdrawing stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions \
+stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun \
+stopPARSEDXML stopPARSEDXML stopTABLE stopTABLE stopTABLEbody \
+stopTABLEbody stopTABLEfoot stopTABLEfoot stopTABLEhead stopTABLEhead \
+stopTABLEnext stopTABLEnext stopTC stopTD stopTDs \
+stopTEX stopTEX stopTEXpage stopTH stopTN \
+stopTR stopTRs stopTX stopTY stopXML \
+stopXML stopalign stopalignment stopallmodes stopappendices \
+stoparrangedpages stopattachment stopbackmatter stopbar stopbar \
+stopbarva stopbarva stopbarva stopbitmapimage stopblockquote \
+stopbodymatter stopboxedcolumns stopbtxlabeltext stopbtxrenderingdefinitions stopbuffer \
+stopbuffer stopcases stopcatcodetable stopcatcodetable stopcenteraligned \
+stopchapter stopcharacteralign stopcheckedfences stopchemical stopcitace \
+stopcitovat stopcollect stopcollecting stopcolorintent stopcolorset \
+stopcolumns stopcolumnspan stopcom stopcombination stopcombination \
+stopcomment stopcontextcode stopcontextdefinitioncode stopctxfunction stopctxfunctiondefinition \
+stopcurrentcolor stopcurrentlistentrywrapper stopdelimited stopdelimitedtext stopdisplaymath \
+stopdmath stopdocument stopeffect stopembeddedxtable stopembeddedxtable \
+stopendnote stopendnote stopendofline stopexceptions stopexpanded \
+stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection stopfakt stopfigure \
+stopfiguretext stopfittingpage stopfloatcombination stopfloatcombination stopfont \
+stopfontclass stopfontsolution stopformula stopformulas stopframedcontent \
+stopframedtext stopfrontmatter stopgot stopgraphictext stopgridsnapping \
+stopgridsnapping stophboxestohbox stophelptext stophiding stophighlight \
+stophyphenation stopimath stopindentation stopindentedtext stopinteraction \
+stopinteraktivnimenu stopinterface stopintermezzotext stopintertext stopitemgroup \
+stopitemize stopjdina stopknockout stopkomponenta stopkomponenta \
+stoplayout stoplegend stoplinealignment stoplinecorrection stoplinenote \
+stoplinenumbering stoplinenumbering stoplines stoplinetable stoplinetablebody \
+stoplinetablecell stoplinetablehead stoplocalfootnotes stoplocalheadsetup stoplocallinecorrection \
+stoplocalnotes stoplocalsetups stoplocalsetups stoplua stopluacode \
+stopluaparameterset stopluasetups stopluasetups stopmakeup stopmarginalnilinka \
+stopmarginalnilinka stopmarginblock stopmarkedcontent stopmathalignment stopmathcases \
+stopmathlabeltext stopmathmatrix stopmathmode stopmathstyle stopmathstyle \
+stopmatrices stopmatrix stopmaxaligned stopmdformula stopmiddlealigned \
+stopmixedcolumns stopmode stopmodeset stopmodule stopmodule \
+stopmoduletestsection stopmpformula stopnadpis stopnamedsection stopnamedsubformulas \
+stopnarrow stopnarrow stopnarrow stopnarrower stopnegative \
+stopnicelyfilledbox stopnointerference stopnop stopnotallmodes stopnotext \
+stopnotmode stopoperatortext stopopposite stoporamovani stopoutputstream \
+stopoverlay stopoverprint stoppagecomment stoppagefigure stoppagegrid \
+stoppagegridspan stoppagelayout stoppar stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \
+stopplacechemical stopplacefigure stopplacefloat stopplacegraphic stopplaceintermezzo \
+stopplacepairedbox stopplacetable stoppolozka stoppositioning stoppositionoverlay \
+stoppositive stoppostponing stoppozadi stoppozadi stoppoznamkapodcarou \
+stoppoznamkapodcarou stopprefixtext stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand \
+stopprocesscommalist stopprodukt stopprodukt stopprojekt stopprojekt \
+stopprostredi stopprostredi stopprotect stopprotectedcolors stoppsh \
+stoppublikace stoppunctuation stopradek stoprandomized stoprandomseed \
+stopraw stoprawsetups stoprawsetups stopreadingfile stopreferenceprefix \
+stopreferenceprefix stopregime stopregister stopreusableMPgraphic stoprob \
+stoprul stopscript stopsdformula stopsection stopsectionblock \
+stopsectionblockenvironment stopsectionlevel stopsetups stopsetups stopshapebox \
+stopshift stopsidebar stopsimplecolumns stopspecialitem stopspecialitem \
+stopspecialitem stopspeech stopspformula stopspodek stopspread \
+stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter stopstructurepageregister \
+stopstrut stopstyle stopstyle stopsubformulas stopsubject \
+stopsubsection stopsubsentence stopsubstack stopsubsubject stopsubsubsection \
+stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject stopsubsubsubsubsection stopsubsubsubsubsubject \
+stopsymbolset stoptable stoptable stoptablehead stoptables \
+stoptables stoptabletail stoptabletext stoptabulate stoptabulatehead \
+stoptabulatetail stoptagged stoptaglabeltext stoptexcode stoptexcode \
+stoptexdefinition stoptext stoptext stoptextbackground stoptextbackgroundmanual \
+stoptextcolor stoptextcolorintent stoptextflow stoptexthlavicky stoptextovalinka \
+stoptextpopisku stoptitle stoptokens stoptxt stoptypescript \
+stoptypescriptcollection stoptyping stoptyping stopumistilegendu stopumistirovnici \
+stopumistirovnici stopuniqueMPgraphic stopuniqueMPpagegraphic stopunittext stopunpacked \
+stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification stopvboxtohbox \
+stopvboxtohboxseparator stopviewerlayer stopxcell stopxcellgroup stopxgroup \
+stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw stopxmlsetups stopxmlsetups \
+stopxrow stopxrowgroup stopxtable stopxtable stopxtablebody \
+stopxtablebody stopxtablefoot stopxtablefoot stopxtablehead stopxtablehead \
+stopxtablenext stopxtablenext stopzarovnanonastred stopzarovnanovlevo stopzarovnanovpravo \
+stopzhustene strana strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter \
+strippedcsname strippedcsname stripspaces structurelistuservariable structurenumber \
+structuretitle structureuservariable structurevariable strut strutdp \
+strutht struthtdp struttedbox strutwd style \
+style styleinstance sub subject subpagenumber \
+subsection subsentence substituteincommalist subsubject subsubsection \
+subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection subsubsubsubsubject \
+subtractfeature subtractfeature swapcounts swapdimens swapface \
+swapmacros swaptypeface switchstyleonly switchstyleonly switchtocolor \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace sym symbol symbol symbolreference \
+synchronizeblank synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut \
+synchronizewhitespace systemlog systemlogfirst systemloglast systemsetups \
+tLeftarrow tLeftrightarrow tRightarrow tabulateautoline tabulateautorule \
+tabulateline tabulaterule taggedctxcommand taggedlabeltexts taglabellanguage \
+taglabeltext tbinom tbox tecky tecky \
+tenkalinka tenkelinky tequal testandsplitstring testcolumn \
+testfeature testfeatureonce testpage testpageonly testpagesync \
+testtokens tex texdefinition texsetup textcitation \
+textcitation textcitation textcite textcite textcite \
+textcontrolspace textflowcollector texthlavicky textmath textminus \
+textormathchar textovalinka textplus textpopisku textvisiblespace \
+tfrac thai thainumerals thefirstcharacter thenormalizedbodyfontsize \
+theremainingcharacters thickspace thinspace thinspace thirdoffivearguments \
+thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow \
+thookrightarrow threedigitrounding tibetannumerals tightlayer tilde \
+tinyfont title tlacitko tlacitkomenu tlacitkomenu \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tloustkacary tmapsto tochar tolinenote \
+topbox topleftbox toplinebox toprightbox topskippedbox \
+tracecatcodetables tracedfontname traceoutputroutines tracepositions transparencycomponents \
+tref trel trightarrow trightharpoondown trightharpoonup \
+trightleftharpoons trightoverleftarrow triplebond truefilename truefontname \
+ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow tvrdamezera \
+tvrdemezery twodigitrounding tx txt txt \
+txx typebuffer typedefinedbuffer typeface typescriptone \
+typescriptprefix typescriptthree typescripttwo typesetbuffer typesetfile \
+uconvertnumber uedcatcodecommand ukazbarvu ukazmrizku ukaznastaveni \
+ukazpaletu ukazpodpery ukazpostredizakladnihofontu ukazramecek ukazsadusymbolu \
+ukazskupinubarev ukazupravu ukazvytisk ukazvzhled ukazzakladnifont \
+umistikombinovanyseznam umistilegendu umistilokalnipoznamkypodcarou umistinadsebe umistinamrizku \
+umistinamrizku umistipodrovnici umistipoznamkypodcarou umistirejstrik umistirovnici \
+umistiseznam umistivedlesebe umistizalozky undefinevalue undepthed \
+underbar underbar underbars underbartext underbrace \
+underbracetext underbracket underbrackettext underdash underdashes \
+underdot underdots underleftarrow underleftharpoondown underleftharpoonup \
+underleftrightarrow underparent underparenttext underrandom underrandoms \
+underrightarrow underrightharpoondown underrightharpoonup underset understrike \
+understrikes undertwoheadleftarrow undertwoheadrightarrow undoassign unframed \
+unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic unit \
+unitlanguage unittext unprotected unregisterhyphenationpattern unspaceafter \
+unspaceargument unspaced unspacestring untexargument untexcommand \
+uppercased uppercasestring upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote \
+upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote \
+urcicharakteristikurejstriku url useMPenvironmentbuffer useMPgraphic useMPlibrary \
+useMPrun useMPvariables usealignparameter usebodyfont usebodyfontparameter \
+usebtxdataset usebtxdefinitions usecolors usecomponent usedummycolorparameter \
+usedummystyleandcolor usedummystyleparameter useenvironment useexternalrendering usefigurebase \
+usefile usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter \
+useinterlinespaceparameter uselanguageparameter useluamodule usemathstyleparameter useproduct \
+useprofileparameter useproject usereferenceparameter userpagenumber usesetupsparameter \
+usestaticMPfigure usesubpath usetexmodule usetypescript usetypescriptfile \
+usezipfile utfchar utflower utfupper utilityregisterlength \
+uzijJSscripts uzijURL uzijadresar uzijbloky uzijexternidokument \
+uzijexterniobraz uzijexternizvuk uzijmodul uzijsymbol uzijurl \
+vboxreference vec verbatim verbatimstring verbosenumber \
+verticalgrowingbar verticalpositionbar veryraggedcenter veryraggedleft veryraggedright \
+verze vglue viewerlayer vl vlasovalinka \
+vlevo vphantom vpos vpravo vradku \
+vsedniden vsmash vsmashbox vsmashed vspace \
+vspacing vyberbloky vyplnenytext vyplnovelinky vyplnovyradek \
+vysoky wdofstring widthofstring widthspanningtext withoutpt \
+word words wordtonumber writedatatolist writestatus \
+xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument xequal \
+xfrac xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown \
+xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto xmladdindex \
+xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup \
+xmlapplyselectors xmlatt xmlattdef xmlattribute xmlattributedef \
+xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef \
+xmlchecknamespace xmlcommand xmlconcat xmlconcatrange xmlcontext \
+xmlcount xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore \
+xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty \
+xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext \
+xmldoifselfempty xmldoiftext xmlelement xmlfilter xmlfirst \
+xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure \
+xmlflushspacewise xmlflushtext xmlinclude xmlinclusion xmlinclusions \
+xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective xmllast \
+xmllastatt xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives \
+xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \
+xmlnamespace xmlnonspace xmlpath xmlpos xmlposition \
+xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata \
+xmlprocessfile xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups \
+xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname xmlremapnamespace \
+xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups \
+xmlsave xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup \
+xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \
+xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \
+xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \
+xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \
+xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \
+xxfrac xypos zachovejbloky zadnamezera zadnehorniadolniradky \
+zadnezahlaviaupati zalozka zapisdoseznamu zapismeziseznam zaramovani \
+zarovnanonastred zarovnanovlevo zarovnanovpravo zasobnikpoli ziskejbuffer \
+ziskejznaceni znaceni znak znaky zpracujbloky \
+zrcadlit zref
keywordclass.context.de=\
-Buchstabe Buchstaben CAP Cap \
-Caps Character Characters KAP Kap \
-Kaps MONAT MONTH Roemischezahlen Romannumerals \
-WEEKDAY WOCHENTAG WOERTER WORD WORDS \
-WORT Woerter Word Words Wort \
-Ziffern about abstandlinkerrand abstandoben abstandrechterrand \
-abstandunten adaptlayout amgitterausrichten amgitterneuausrichten appendix \
-arg at atleftmargin atpage atrightmargin \
-aufseite ausfuellfeld ausfuelltext ausschnitt background \
-bearbeitebloecke bearbeiteseite bedeutung behaltebloecke bei \
-bemerkung benutzekodierung benutzespezielles benutzeverzeichnis beschrifteversion \
-beschriftung bestimmekopfnummer bestimmelistencharakeristika bestimmeregistercharakteristika bildschirm \
-blackrule blackrules blank blanko bookmark \
-bottomspace breitelinkerrand breiterechterrand bruch buchstabe \
-buchstaben but button bypassblocks cap \
-chapter character characters chem clip \
-clonefield color column comment comparecolorgroup \
-comparepalet completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms \
-completepagenumber completeregister convertnumber copyfield correctwhitespace \
-coupledocument coupledregister couplemarking couplepage couplepaper \
-coupleregister crlf currentdate currentheadnumber cutspace \
-date datum decouplemarking decrementnumber define \
-defineblank defineblock definebodyfont definebodyfontDEF definebodyfontREF \
-definebodyfontenvironment definebuffer definecolor definecolorgroup definecolumnbreak \
-definecolumnset definecombination definecombinedlist defineconversion definedescription \
-definedfont defineenumeration definefield definefieldstack definefiguresymbol \
-definefloat definefont definefontfeature definefonthandling definefontsynonym \
-defineframed defineframedtext definehead defineindentedtext defineinmargin \
-defineinteractionmenu defineitemgroup definelabel definelayer definelayout \
-definelist definelogo definemakeup definemarking definemathalignment \
-defineoutput defineoverlay definepagebreak definepalet definepapersize \
-defineparagraphs defineplacement defineprofile defineprogram definerawfont \
-definereference definereferenceformat definereferencelist defineregister definerule \
-defineschriftsynonym definesection definesectionblock definesorting definestartstop \
-definesubfield definesymbol definesynonyms definetabletemplate definetabulate \
-definetext definetextposition definetextvariable definetype definetypeface \
-definetyping defineversion definiereabbsymbol definiereabsaetze definiereabschnitt \
-definiereabschnittsblock definiereakzent definierebefehl definierebeschreibung definierebeschreibungen \
-definierebeschriftung definiereblanko definiereblock definierefarbe definierefarbengruppe \
-definierefeld definierefeldstapel definierefliesstext definierefliesstextumgebung definieregleitobjekt \
-definierehauptfeld definierehbox definiereinteraktionsmenue definierekonversion definierelabel \
-definiereliste definierelogo definieren definierenummerierung definiereoverlay \
-definierepalette definierepapierformat definiereprofil definiereprogramme definierepuffer \
-definierereferenz definierereferenzformat definierereferenzliste definiereregister definiereschrift \
-definiereschriftstil definieresortieren definierestartstop definierestil definieresubfeld \
-definieresymbol definieresynonyme definieretabellenvorlage definieretabulator definieretext \
-definieretippen definiereueberschrift definiereumbruch definiereumrahmt definiereumrahmtertext \
-definiereversion definierezeichen definierezusammengestellteliste description determineheadnumber \
-determinelistcharacteristics dimension disableinteractionmenu doppelseite doppelseitigespapier \
-drehen duennelinie duennerumriss einezeile einziehen \
-emptylines entknuepfebeschriftung enumeration externalfigure externeabbildung \
-farbbalken farbe farbewert feld feldstapel \
-festesspatium field fieldstack fillinfield fillinline \
-fillinrules fillintext fitfield fixedspaces folgeprofil \
-folgeprofilversion folgeversion followprofile followprofileversion followversion \
-footnote footnotetext forceblocks format formelnummer \
-fraction framed framedtext from fussnote \
-fusszeileabstand fusszeilenhoehe gefuelltesrechteck gefuelltezeile geg \
-gesamtseitenanzahl gestreckt getbuffer getmarking getnumber \
-gitter godown goto gotobox graufarbe \
-grauwert graycolor grid haarlinie hairline \
-hauptsprache head headnumber headsym headtext \
-heutigesdatum heutigeskopfnummer hideblocks high hintergrund \
-hl hoch hoeheoben hoeheunten holebeschriftung \
-holepuffer imlinken imlinkenrand immaumrise immediatebetweenlist \
-immediatetolist imrechten imrechtenrand imumriss in \
-inaktiviereinteraktionsmenue inanderermarginale indentation indenting inframed \
-ininner inleft inline inlinkermarginale inmargin \
-inmarginalie inneredgedistance inneredgewidth innermargindistance innermarginwidth \
-inothermargin inouter inrechtermarginale inright installieresprache \
-installlanguage interactionbar interactionbuttons interaktionsbalken interaktionsknopfe \
-interaktionsmenue inzeile irgendwo item items \
-its kap keepblocks keindimension keinebeschriftung \
-keinebloeckemehr keinedateienmehr keinekopfundfusszeilen keineliste keinspatium \
-keintest keinzeilenobenundunten keinzwischenraum kleinerdurchschuss klonierefeld \
-knopf komponente konvertierezahl kopf kopfniveau \
-kopfnummer kopfweite kopfzeilenabstand kopfzeilenhoehe kopierefeld \
-korrigierezwischenraum label labeling labels labeltext \
-language leftaligned leg liniendicke linkemarginalafstand \
-linkemarginalbreite linksbuendig listenbreite listenhoehe listenlaenge \
-listsymbol loadsorts loadsynonyms logfields lohi \
-low mainlanguage mapfontsize mar marginalafstand \
-marginalbreite marginallinie marginaltext marginaltitel marginalwort \
-marginrule margintext marking markversion mathematics \
-mathematik maumrise mediaeval menueknopf midaligned \
-mirror monat month moveformula moveongrid \
-movesidefloat nachunten name navigating nextsection \
-nichteinziehen nocap noheaderandfooterlines noindenting nokap \
-nolist nomarking nomoreblocks nomorefiles nop \
-nospace note notiz notopandbottomlines nowhitespace \
-numberofsubpages numbers nummererhoehen outeredgedistance outeredgewidth \
-outermargindistance outermarginwidth overbar overbars overstrike \
-overstrikes packed page pagedepth pageoffset \
-pagereference papierbreite papierhoehe paragraph part \
-passelayoutan passendfeld periods placebookmarks placecombinedlist \
-placefloat placefootnotes placeformula placeheadnumber placeheadtext \
-placelegend placelist placelistoffloats placelistofsorts placelistofsynonyms \
-placelocalfootnotes placelogos placeongrid placeontopofeachother placepagenumber \
-placerawlist placereferencelist placeregister placerule placesidebyside \
-placesubformula placetextvariable platzierebookmarks platziereformel platzierefussnoten \
-platzierelegende platziereliste platzierelogo platzierelokalefussnoten platzierenebeneinander \
-platziereregister platziereuntereinander platziereunterformel platzierezusammengestellteliste pos \
-position positiontext posten printpapierbreite printpapierhoehe \
-processblocks processpage produkt program programm \
-projekt publication publikation punkt quotation \
-quote ran randabstand randbreite rechteck \
-rechtecke rechtemarginalafstand rechtemarginalbreite rechtsbuendig ref \
-reference referenz referieren referral referraldate \
-register registrierefelder reservefloat reset resetmarking \
-resetnumber resettextcontent rightaligned roemischezahlen romannumerals \
-rotate ruecksetzten ruecksetztenbeschriftung rumpfweite satzbreite \
-satzhoehe scale schreibezumregister schreibezurliste schreibezurreferenzliste \
-schreibezwischenliste screen section seeregister seite \
-seitenreferenz seitenummer selectblocks selectpaper selectversion \
-setnumber settext settextcontent settextvariable setupalign \
-setupanswerarea setuparranging setupbackground setupbackgrounds setupblackrules \
-setupblank setupblock setupbodyfont setupbodyfontenvironment setupbottom \
-setupbottomtexts setupbuffer setupbuttons setupcapitals setupcaption \
-setupcaptions setupclipping setupcolor setupcolors setupcolumns \
-setupcolumnset setupcolumnsetlines setupcolumnsetstart setupcombinations setupcombinedlist \
-setupcomment setupdescriptions setupenumerations setupexternalfigures setupfield \
-setupfields setupfillinlines setupfillinrules setupfloat setupfloats \
-setupfloatsplitting setupfonthandling setupfontsynonym setupfooter setupfootertexts \
-setupfootnotedefinition setupfootnotes setupforms setupformulas setupframed \
-setupframedtexts setuphead setupheader setupheadertexts setupheadnumber \
-setupheads setupheadtext setuphyphenmark setupindentedtext setupindenting \
-setupinmargin setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen \
-setupinterlinespace setupinterlinespace2 setupitemgroup setupitems setuplabeltext \
-setuplanguage setuplayout setuplegend setuplinenumbering setuplines \
-setuplinewidth setuplist setuplistalternative setupmakeup setupmarginblocks \
-setupmarginrules setupmarking setupmathalignment setupnarrower setupnumber \
-setupnumbering setupoppositeplacing setupoutput setuppagenumber setuppagenumbering \
-setuppagetransitions setuppalet setuppaper setuppapersize setupparagraphnumbering \
-setupparagraphs setupplacement setuppositioning setupprofiles setupprograms \
-setuppublications setupquote setupreferencelist setupreferencing setupregister \
-setuprotate setuprule setupscreens setupsection setupsectionblock \
-setupsorting setupspacing setupstartstop setupstrut setupsubpagenumber \
-setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms setupsystem \
-setuptab setuptables setuptabulate setuptext setuptextposition \
-setuptextrules setuptexttexts setuptextvariable setupthinrules setuptolerance \
-setuptop setuptoptexts setuptype setuptyping setupunderbar \
-setupurl setupversions setupwhitespace showbodyfont showbodyfontenvironment \
-showcolor showcolorgroup showexternalfigures showfields showframe \
-showgrid showlayout showmakeup showpalet showprint \
-showsetups showstruts showsymbolset someline somewhere \
-sort space spalte spatium spiegeln \
-splitfloat sprache startabbildung startalignment startausrichtung \
-startbackground startbuffer startcolor startcolumnmakeup startcolumns \
-startcolumnset startcombination startcomment startcomponent startdescription \
-startdocument startdokument startenger startenumeration startenvironment \
-startfact startfarbe startfigure startfloattext startformula \
-startframedtext startgegenueber startglobal startgrosserdurchschuss starthiding \
-starthintergrund startinteractionmenu startitemgroup startkleinerdurchschuss startkodierung \
-startkombination startkomponente startlegend startline startlinecorrection \
-startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes \
-startlokal startlokalefussnoten startmakeup startmarginalblock startmarginallinie \
-startmarginblock startmarginrule startnamemakeup startnarrower startopposite \
-startoverlay startoverview startpacked startparagraph startpositionieren \
-startpositioning startpostponing startproduct startprodukt startprofil \
-startprofile startproject startprojekt startquotation startraster \
-startregister startspalten startsymbolset startsynchronisation startsynchronization \
-starttabelle starttabellen starttable starttables starttabulate \
-starttext starttextlinie starttextrule starttyping startueberblick \
-startumbruch startumgebung startunpacked startversion startzeile \
-startzeilen startzeilenkorrektur startzeilennumerierung startzitat stelleabsaetzeein \
-stelleabsatznummerierungein stelleabschnittein stelleabschnittsblockein stelleanordnenein stelleaufzaehlungenein \
-stelleausgabeein stelleausrichtungein stelleausschnittein stellebeschreibungein stellebeschriftungein \
-stellebilderunterschriftein stellebildunterschriftein stellebindestrichein stelleblankoein stelleblockein \
-stelledrehenein stelleduennerumrissein stelleeinziehenein stelleengerein stelleexterneabbildungenein \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+Buchstabe Buchstaben CONTEXT Caps ConTeXt \
+Context ConvertConstantAfter ConvertToConstant ETEX EveryLine \
+EveryPar GetPar GotoPar Greeknumerals INRSTEX \
+Kap LAMSTEX LATEX LUAJITTEX LUATEX \
+LaTeX LamSTeX LuaTeX LuajitTeX METAFONT \
+METAFUN METAPOST MKII MKIV MKIX \
+MKVI MKXI MONAT MONTHLONG MONTHSHORT \
+MPII MPIV MPVI MPanchor MPbetex \
+MPc MPcode MPcolor MPcoloronly MPcolumn \
+MPd MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape \
+MPgetposboxes MPh MPinclusions MPleftskip MPll \
+MPlr MPls MPmenubuttons MPn MPoptions \
+MPoverlayanchor MPp MPpage MPpardata MPplus \
+MPpos MPpositiongraphic MPposset MPr MPrawvar \
+MPregion MPrest MPrightskip MPrs MPstring \
+MPtext MPtransparency MPul MPur MPv \
+MPvar MPvariable MPvv MPw MPx \
+MPxy MPxywhd MPy MetaFont MetaFun \
+MetaPost NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight NormalizeTextWidth \
+PDFETEX PDFTEX PDFcolor PICTEX PPCHTEX \
+PPCHTeX PRAGMA PiCTeX PointsToBigPoints PointsToReal \
+PointsToWholeBigPoints PtToCm ReadFile Roemischezahlen ScaledPointsToBigPoints \
+ScaledPointsToWholeBigPoints Smallcapped TABLE TEX TaBlE \
+TeX TheNormalizedFontSize TransparencyHack VerboseNumber WOCHENTAG \
+WOERTER WORT WidthSpanningText Woerter Wort \
+XETEX XeTeX Ziffern abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals activatespacehandler acute adaptcollector \
+adaptpapersize addfeature addfeature addtoJSpreamble addtocommalist \
+addvalue aftersplitstring aftertestandsplitstring alignbottom aligned \
+alignedbox alignedline alignmentcharacter allinputpaths alphabeticnumerals \
+alwayscitation alwayscitation alwayscitation alwayscite alwayscite \
+alwayscite amgitterausrichten amgitterausrichten ampersand anchor \
+appendetoks appendgvalue appendtocommalist appendtoks appendtoksonce \
+appendvalue apply applyalternativestyle applyprocessor applytocharacters \
+applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced \
+applytosplitstringword applytosplitstringwordspaced applytowords arabicdecimals arabicexnumerals \
+arabicnumerals arg asciistr assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype atleftmargin atrightmargin attachment \
+aufseite ausfuelltext ausschnitt autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+bar basegrid baselinebottom baselineleftbox baselinemiddlebox \
+baselinerightbox bbox bearbeitebloecke beforesplitstring beforetestandsplitstring \
+behaltebloecke bei bemerkung benutzeverzeichnis beschriftung \
+bestimmekopfnummer bestimmelistencharakeristika bestimmeregistercharakteristika big bigbodyfont \
+bigg bigger biggl biggm biggr \
+bigl bigm bigr bigskip bildschirm \
+binom bitmapimage blanko blap bleed \
+bleedheight bleedwidth blockquote bodyfontenvironmentlist bodyfontsize \
+bold boldface bolditalic boldslanted bookmark \
+booleanmodevalue bottombox bottomleftbox bottomrightbox boxcursor \
+boxmarker boxofsize boxreference bpos breve \
+bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation btxalwayscitation \
+btxalwayscitation btxauthorfield btxdetail btxdirect btxdoif \
+btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked \
+btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse btxdoifuservariableelse \
+btxexpandedjournal btxfield btxfieldname btxfieldtype btxfirstofrange \
+btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort btxflushauthorname \
+btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname btxfoundtype \
+btxhybridcite btxhybridcite btxhybridcite btxhybridcite btxlabellanguage \
+btxlabeltext btxlistcitation btxlistcitation btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation btxtextcitation btxtextcitation buchstabe \
+buchstaben buildmathaccent buildtextaccent buildtextbottomcomma buildtextbottomdot \
+buildtextcedilla buildtextgrave buildtextmacron buildtextognek but \
+but calligraphic camel catcodetablename cbox \
+centeraligned centerbox centeredbox centeredlastline centerednextbox \
+centerline cfrac chapter chardescription charwidthlanguage \
+check checkcharacteralign checkedchar checkedfiller checkedstrippedcsname \
+checkedstrippedcsname checkinjector checknextindentation checknextinjector checkpage \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata chem \
+chemical chemicalbottext chemicalmidtext chemicalsymbol chemicaltext \
+chemicaltoptext chineseallnumerals chinesecapnumerals chinesenumerals citation \
+citation citation citation cite cite \
+cite cite clap classfont cldcommand \
+cldcontext cldloadfile cldprocessfile cleftarrow collect \
+collectedtext collectexpanded colorcomponents colored colored \
+columnbreak com combinepages commalistelement commalistsentence \
+commalistsize comment comparedimension comparedimensioneps completebtxrendering \
+completecontent completeindex completelist completelistofabbreviations completelistofchemicals \
+completelistoffigures completelistofgraphics completelistofintermezzi completelistoflogos completelistofpublications \
+completelistofsorts completelistofsynonyms completelistoftables completepagenumber completeregister \
+complexorsimple complexorsimple complexorsimpleempty complexorsimpleempty composedcollector \
+composedlayer compresult constantdimen constantdimenargument constantemptyargument \
+constantnumber constantnumberargument contentreference continuednumber continueifinputfile \
+convertargument convertcommand convertedcounter converteddimen convertedsubcounter \
+convertmonth convertvalue convertvboxtohbox copybtxlabeltext copyheadtext \
+copylabeltext copymathlabeltext copyoperatortext copypages copyparameters \
+copyposition copyprefixtext copytaglabeltext copyunittext countersubs \
+counttoken counttokens cramped crampedclap crampedllap \
+crampedrlap crightarrow crightoverleftarrow ctop ctxcommand \
+ctxdirectcommand ctxdirectlua ctxfunction ctxlatecommand ctxlatelua \
+ctxloadluafile ctxlua ctxluabuffer ctxluacode ctxreport \
+ctxsprint currentassignmentlistkey currentassignmentlistvalue currentbtxuservariable currentcommalistitem \
+currentcomponent currentenvironment currentfeaturetest currentinterface currentlanguage \
+currentlistentrydestinationattribute currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute \
+currentlistentrytitle currentlistentrytitlerendered currentlistsymbol currentmainlanguage currentmessagetext \
+currentmoduleparameter currentoutputstream currentproduct currentproject currentregime \
+currentregisterpageuserdata currentresponses currenttime currentvalue currentxtablecolumn \
+currentxtablerow d datasetvariable datum dayoftheweek \
+dayspermonth dbinom ddot decrement decrement \
+decrementcounter decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue \
+defaultinterface defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument \
+defconvertedcommand defconvertedvalue defineMPinstance defineTABLEsetup defineactivecharacter \
+definealternativestyle defineanchor defineattachment defineattribute definebackground \
+definebar definebodyfontswitch definebreakpoint definebreakpoints definebtx \
+definebtxdataset definebtxregister definebtxrendering definebutton definecapitals \
+definecharacterkerning definecharacterspacing definechemical definechemicals definechemicalsymbol \
+definecollector definecolumnbreak definecombination definecomment definecomplexorsimple \
+definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty defineconversionset definecounter \
+definedataset definedelimitedtext definedfont defineeffect defineenumerations \
+defineexpandable defineexternalfigure definefallbackfamily definefallbackfamily definefieldbody \
+definefieldbodyset definefieldcategory definefileconstant definefilefallback definefilesynonym \
+definefiller definefirstline definefittingpage definefontalternative definefontfallback \
+definefontfamily definefontfamily definefontfamilypreset definefontfamilypreset definefontfeature \
+definefontfile definefontsize definefontsolution defineformula defineformulaalternative \
+defineframedcontent definefrozenfont defineglobalcolor defineglobalcolor definegraphictypesynonym \
+definegridsnapping defineheadalternative definehelp definehigh definehighlight \
+definehspace definehypenationfeatures defineindentedtext defineindenting defineinitial \
+defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant defineinterfaceelement \
+defineinterfacevariable defineinterlinespace defineinterlinespace defineintermediatecolor defineitemgroup \
+defineitems definelabelclass definelayer definelayerpreset definelayerpreset \
+definelayout definelinenote definelinenumbering definelines definelistalternative \
+definelistextra definelow definelowhigh definelowmidhigh definemarginblock \
+definemargindata definemarker definemathaccent definemathalignment definemathcases \
+definemathcommand definemathdoubleextensible definemathematics definemathextensible definemathfence \
+definemathfraction definemathframed definemathmatrix definemathornament definemathoverextensible \
+definemathovertextextensible definemathradical definemathstackers definemathstyle definemathtriplet \
+definemathunderextensible definemathundertextextensible definemathunstacked definemeasure definemessageconstant \
+definemixedcolumns definemode definemultitonecolor definenamedcolor definenamedcolor \
+definenamespace definenarrower definenote defineornament defineornament \
+defineoutputroutine defineoutputroutinecommand definepage definepagebreak definepagechecker \
+definepagegrid definepagegridarea definepagegridspan definepageinjection definepageinjectionalternative \
+definepageshift definepagestate definepairedbox defineparagraph defineparallel \
+defineparbuilder defineplacement definepositioning defineprefixset defineprocesscolor \
+defineprocessor definepushbutton definepushsymbol definerenderingwindow defineresetset \
+definescale defineschriftsynonym definescript definesectionlevels defineselector \
+defineseparatorset defineshift definesidebar definesort definespotcolor \
+definestyleinstance definesubformula definesynonym definesystemattribute definesystemconstant \
+definesystemvariable definetabulation definetextbackground definetextflow definetooltip \
+definetransparency definetwopasslist definetype definetypeface definetypescriptprefix \
+definetypescriptsynonym definetypesetting defineunit defineviewerlayer definevspace \
+definevspacing definevspacingamount definextable definiereabbsymbol definiereabsaetze \
+definiereabschnitt definiereabschnittsblock definiereakzent definierebefehl definierebeschreibung \
+definierebeschriftung definiereblock definierefarbe definierefarbe definierefarbengruppe \
+definierefeld definierefeldstapel definierefliesstext definierefliesstext definierefliesstextumgebung \
+definieregleitobjekt definieregleitobjekt definierehbox definiereinteraktionsmenue definierekonversion \
+definierekonversion definierelabel definiereliste definieren definiereoverlay \
+definierepalette definierepalette definierepapierformat definierepapierformat definiereprofil \
+definiereprogramme definierepuffer definierereferenz definierereferenzformat definiereregister \
+definiereschrift definiereschrift definiereschriftstil definieresortieren definierestartstop \
+definierestil definieresubfeld definieresymbol definieresynonyme definieretabellenvorlage \
+definieretabulator definieretext definieretippen definiereueberschrift definiereumbruch \
+definiereumrahmt definiereumrahmtertext definierezeichen definierezusammengestellteliste delimited \
+delimitedtext depthofstring depthonlybox depthspanningtext determinenoflines \
+devanagarinumerals dfrac digits digits dimensiontocount \
+directcolor directcolored directcolored directconvertedcounter directdummyparameter \
+directgetboxllx directgetboxlly directhighlight directlocalframed directluacode \
+directselect directsetbar directsetup directsymbol directvspacing \
+dis disabledirectives disableexperiments disablemode disableoutputstream \
+disableparpositions disableregime disabletrackers displaymath displaymathematics \
+displaymessage distributedhsize dividedsize doadaptleftskip doadaptrightskip \
+doaddfeature doassign doassignempty doboundtext docheckassignment \
+docheckedpagestate docheckedpair documentvariable dodoubleargument dodoubleargumentwithset \
+dodoubleempty dodoubleemptywithset dodoublegroupempty doeassign doexpandedrecurse \
+dogetattribute dogetattributeid dogetcommacommandelement dogobbledoubleempty dogobblesingleempty \
+doif doifMPgraphicelse doifallcommon doifallcommonelse doifalldefinedelse \
+doifallmodes doifallmodeselse doifassignmentelse doifblackelse doifbothsides \
+doifbothsidesoverruled doifboxelse doifbufferelse doifcolor doifcolorelse \
+doifcommandhandler doifcommandhandlerelse doifcommon doifcommonelse doifcontent \
+doifconversiondefinedelse doifconversionnumberelse doifcounter doifcounterelse doifcurrentfonthasfeatureelse \
+doifdefined doifdefinedcounter doifdefinedcounterelse doifdefinedelse doifdimensionelse \
+doifdimenstringelse doifdocumentargument doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse \
+doifdrawingblackelse doifelse doifelseMPgraphic doifelseallcommon doifelsealldefined \
+doifelseallmodes doifelseassignment doifelseblack doifelsebox doifelsebuffer \
+doifelsecolor doifelsecommandhandler doifelsecommon doifelseconversiondefined doifelseconversionnumber \
+doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused \
+doifelsedefined doifelsedefinedcounter doifelsedimension doifelsedimenstring doifelsedocumentargument \
+doifelsedocumentfilename doifelsedrawingblack doifelseempty doifelseemptyvalue doifelseemptyvariable \
+doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory \
+doifelsefigure doifelsefile doifelsefiledefined doifelsefileexists doifelsefirstchar \
+doifelseflagged doifelsefontchar doifelsefontpresent doifelsefontsynonym doifelsehasspace \
+doifelsehelp doifelseincsname doifelseinelement doifelseinputfile doifelseinsertion \
+doifelseinset doifelseinstring doifelseinsymbolset doifelseintoks doifelseintwopassdata \
+doifelseitalic doifelselanguage doifelselayerdata doifelselayoutdefined doifelselayoutsomeline \
+doifelselayouttextline doifelseleapyear doifelselist doifelselocation doifelselocfile \
+doifelsemainfloatbody doifelsemarking doifelsemeaning doifelsemessage doifelsemode \
+doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar doifelsenextoptional doifelsenextoptionalcs \
+doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage doifelsenothing doifelsenumber \
+doifelseobjectfound doifelseobjectreferencefound doifelseoddpage doifelseoddpagefloat doifelseoldercontext \
+doifelseolderversion doifelseoverlapping doifelseoverlay doifelseparallel doifelseparentfile \
+doifelsepath doifelsepathexists doifelsepatterns doifelseposition doifelsepositionaction \
+doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound \
+doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference doifelsesamestring doifelsesetups \
+doifelsesomebackground doifelsesomespace doifelsesomething doifelsesometoks doifelsestringinstring \
+doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined doifelsesymbolset doifelsetext \
+doifelsetextflow doifelsetextflowcollector doifelsetypingfile doifelseundefined doifelseurldefined \
+doifelsevalue doifelsevaluenothing doifelsevariable doifempty doifemptyelse \
+doifemptytoks doifemptyvalue doifemptyvalueelse doifemptyvariable doifemptyvariableelse \
+doifenv doifenvelse doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse \
+doiffieldcategoryelse doiffigureelse doiffile doiffiledefinedelse doiffileelse \
+doiffileexistselse doiffirstcharelse doifflaggedelse doiffontcharelse doiffontpresentelse \
+doiffontsynonymelse doifhasspaceelse doifhelpelse doifincsnameelse doifinelementelse \
+doifinputfileelse doifinsertionelse doifinset doifinsetelse doifinstring \
+doifinstringelse doifinsymbolset doifinsymbolsetelse doifintokselse doifintwopassdataelse \
+doifitalicelse doiflanguageelse doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse \
+doiflayouttextlineelse doifleapyearelse doiflistelse doiflocationelse doiflocfileelse \
+doifmainfloatbodyelse doifmarkingelse doifmeaningelse doifmessageelse doifmode \
+doifmodeelse doifnextbgroupcselse doifnextbgroupelse doifnextcharelse doifnextoptionalcselse \
+doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse doifnot doifnotallcommon \
+doifnotallmodes doifnotcommandhandler doifnotcommon doifnotcounter doifnotdocumentargument \
+doifnotdocumentfilename doifnotempty doifnotemptyvalue doifnotemptyvariable doifnotenv \
+doifnoteonsamepageelse doifnotescollected doifnotfile doifnotflagged doifnothing \
+doifnothingelse doifnotinset doifnotinsidesplitfloat doifnotinstring doifnotmode \
+doifnotnumber doifnotsamestring doifnotsetups doifnotvalue doifnotvariable \
+doifnumber doifnumberelse doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse \
+doifoddpagefloatelse doifoldercontextelse doifolderversionelse doifoverlappingelse doifoverlayelse \
+doifparallelelse doifparentfileelse doifpathelse doifpathexistselse doifpatternselse \
+doifposition doifpositionaction doifpositionactionelse doifpositionelse doifpositiononpageelse \
+doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse \
+doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring doifsamestringelse doifsetups \
+doifsetupselse doifsomebackground doifsomebackgroundelse doifsomespaceelse doifsomething \
+doifsomethingelse doifsometoks doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse \
+doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse doiftext doiftextelse \
+doiftextflowcollectorelse doiftextflowelse doiftypingfileelse doifundefined doifundefinedcounter \
+doifundefinedelse doifurldefinedelse doifvalue doifvalueelse doifvaluenothing \
+doifvaluenothingelse doifvaluesomething doifvariable doifvariableelse doindentation \
+dollar doloop doloopoverlist donothing dontconvertfont \
+dontleavehmode dontpermitspacesbetweengroups dopositionaction doprocesslocalsetups doquadrupleargument \
+doquadrupleempty doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty \
+dorechecknextindentation dorecurse dorecurse dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature dot dotfskip dotoks dotripleargument \
+dotripleargumentwithset dotripleempty dotripleemptywithset dotriplegroupempty doublebar \
+doublebond doublebrace doublebracket doubleparent dowith \
+dowithnextbox dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument \
+dowithrange dowithwargument dpofstring drehen duennelinie \
+duennerumriss dummydigit dummyparameter eTeX edefconvertedargument \
+efcmaxheight efcmaxwidth efcminheight efcminwidth efcparameter \
+effect einezeile elapsedseconds elapsedtime eleftarrowfill \
+eleftharpoondownfill eleftharpoonupfill eleftrightarrowfill emphasisboldface emphasistypeface \
+emptylines emspace enabledirectives enableexperiments enablemode \
+enableoutputstream enableparpositions enableregime enabletrackers endnote \
+endnote enskip enspace env envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill ethiopic \
+etwoheadrightarrowfill eunderbarfill eunderbracefill eunderbracketfill eunderparentfill \
+executeifdefined exitloop exitloopnow expandcheckedcsname expanded \
+expandfontsynonym externalfigurecollectionmaxheight externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth \
+externalfigurecollectionparameter externeabbildung fakebox farbbalken farbe \
+farbewert fastdecrement fastincrement fastlocalframed fastscale \
+fastsetup fastsetupwithargument fastsetupwithargumentswapped fastswitchtobodyfont fastsxsy \
+feature feature feld feldstapel fence \
+fenced festesspatium festesspatium fetchallmarkings fetchallmarks \
+fetchmark fetchmarking fetchonemark fetchonemarking fetchruntinecommand \
+fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments fifthofsixarguments \
+figurefilename figurefilepath figurefiletype figurefullname figureheight \
+figurenaturalheight figurenaturalwidth figuresymbol figurewidth filename \
+filledhboxb filledhboxc filledhboxg filledhboxk filledhboxm \
+filledhboxr filledhboxy filler filterfromnext filterfromvalue \
+filterpages filterreference findtwopassdata finishregisterentry firstcharacter \
+firstcounter firstcountervalue firstoffivearguments firstoffourarguments firstofoneargument \
+firstofoneunexpanded firstofsixarguments firstofthreearguments firstofthreeunexpanded firstoftwoarguments \
+firstoftwounexpanded firstrealpage firstrealpagenumber firstsubcountervalue firstsubpage \
+firstsubpagenumber firstuserpage firstuserpagenumber fitfieldframed fittopbaselinegrid \
+flag floatuserdataparameter flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle footnotetext footnotetext forcecharacterstripping \
+forcelocalfloats forgeteverypar forgetparameters forgetragged format \
+formelnummer formula foundbox fourthoffivearguments fourthoffourarguments \
+fourthofsixarguments frac frameddimension framedparameter framedtext \
+freezedimenmacro freezemeasure frenchspacing fromlinenote frozenhbox \
+fussnote fussnote gdefconvertedargument gdefconvertedcommand gefuelltesrechteck \
+gefuelltezeile gestreckt getMPdrawing getMPlayer getboxllx \
+getboxlly getbufferdata getcommacommandsize getcommalistsize getdayoftheweek \
+getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault getdocumentfilename \
+getdummyparameters getemptyparameters geteparameters getexpandedparameters getfiguredimensions \
+getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist getfromtwopassdata \
+getglyphdirect getglyphstyled getgparameters getlasttwopassdata getlocalfloat \
+getlocalfloats getmessage getnamedglyphdirect getnamedglyphstyled getnamedtwopassdatalist \
+getnaturaldimensions getnoflines getobject getobjectdimensions getpaletsize \
+getparameters getrandomcount getrandomdimen getrandomfloat getrandomnumber \
+getrandomseed getraweparameters getrawgparameters getrawnoflines getrawparameters \
+getrawxparameters getreference getreferenceentry getroundednoflines getsubstring \
+gettwopassdata gettwopassdatalist getuvalue getvalue getvariable \
+getvariabledefault getxparameters gitter globaldisablemode globalenablemode \
+globalletempty globalpopbox globalpopmacro globalpreventmode globalprocesscommalist \
+globalpushbox globalpushmacro globalswapcounts globalswapdimens globalswapmacros \
+globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments gobblefivearguments \
+gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments gobbleoneargument \
+gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments gobblespacetokens \
+gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments gobbletwooptionals \
+gobbleuntil gobbleuntilrelax got grabbufferdata grabbufferdatadirect \
+grabuntil graufarbe grave grayvalue greedysplitstring \
+greeknumerals groupedcommand gsetboxllx gsetboxlly gujaratinumerals \
+gurmurkhinumerals haarlinie hairspace halfwaybox handletokens \
+handwritten hangul hanzi hash hat \
+hauptsprache hboxofvbox hboxreference hdofstring headhbox \
+headlanguage headnumbercontent headnumberdistance headnumberwidth headreferenceattributes \
+headsym headtextcontent headtexts headtextwidth headvbox \
+headwidth heightanddepthofstring heightofstring heightspanningtext helptext \
+heutigesdatum heutigeskopfnummer hglue hiddencitation hiddencite \
+highlight highordinalstr hilo himilo hintergrund \
+hl hoch holebeschriftung holepuffer horizontalgrowingbar \
+horizontalpositionbar hphantom hpos hsizefraction hsmash \
+hsmashbox hsmashed hspace htdpofstring htofstring \
+hyphen hyphenatedcoloredword hyphenatedfile hyphenatedfilename hyphenatedhbox \
+hyphenatedpar hyphenatedurl hyphenatedword ibox ifassignment \
+iff ifinobject ifinoutputstream ifparameters iftrialtypesetting \
+ignoreimplicitspaces ignorevalue imlinken imlinkenrand immaumrise \
+immediatesavetwopassdata impliedby implies imrechten imrechtenrand \
+imumriss in includemenu includeversioninfo increment \
+increment increment increment incrementcounter incrementedcounter \
+incrementpagenumber incrementsubpagenumber incrementvalue indentation index \
+index infofont infofontbold inheritparameter inhibitblank \
+ininner ininneredge ininnermargin initializeboxstack inlinebuffer \
+inlinedbox inlinemath inlinemathematics inlinemessage inlineordisplaymath \
+inlinerange inlinkermarginale inmarginalie innerflushshapebox inother \
+inouter inouteredge inoutermargin input input \
+inputfilebarename inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile \
+inrechtermarginale insertpages installactionhandler installactivecharacter installanddefineactivecharacter \
+installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler installbasicparameterhandler \
+installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler installdefinitionset \
+installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler \
+installdirectstyleandcolorhandler installframedautocommandhandler installframedcommandhandler installieresprache installieresprache \
+installleftframerenderer installnamespace installoutputroutine installpagearrangement installparameterhandler \
+installparameterhashhandler installparametersethandler installparentinjector installrightframerenderer installrootparameterhandler \
+installsetuphandler installsetuponlycommandhandler installshipoutmethod installsimplecommandhandler installsimpleframedcommandhandler \
+installstyleandcolorhandler installswitchcommandhandler installswitchsetuphandler installtexdirective installtextracker \
+installtopframerenderer installunitsseparator installunitsspace installversioninfo integerrounding \
+interaktionsbalken interaktionsknopfe interaktionsmenue intertext invokepageheandler \
+inzeile irgendwo istltdir istrtdir italic \
+italicbold italiccorrection itemtag itm its \
+jobfilename jobfilesuffix kap kap keeplinestogether \
+keepunwantedspaces keinekopfundfusszeilen keinspatium keinzeilenobenundunten kerncharacters \
+klonierefeld knopf komponente komponente konvertierezahl \
+kopf kopfnummer kopierefeld koreancirclenumerals koreannumerals \
+koreannumeralsc koreannumeralsp koreanparentnumerals korrigierezwischenraum labellanguage \
+labeltext labeltexts languageCharacters languagecharacters languagecharwidth \
+lastcounter lastcountervalue lastdigit lastnaturalboxdp lastnaturalboxht \
+lastnaturalboxwd lastpredefinedsymbol lastrealpage lastrealpagenumber lastsubcountervalue \
+lastsubpage lastsubpagenumber lasttwodigits lastuserpage lastuserpagenumber \
+lateluacode latin layeredtext layerheight layerwidth \
+lazysavetaggedtwopassdata lazysavetwopassdata lbox left leftbottombox \
+leftbox lefthbox leftheadtext leftlabeltext leftline \
+leftmathlabeltext leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption \
+leftsubguillemot lefttopbox lefttoright lefttorighthbox lefttorightvbox \
+lefttorightvtop letbeundefined letcatcodecommand letcscsname letcsnamecs \
+letcsnamecsname letdummyparameter letempty letgvalue letgvalueempty \
+letgvalurelax letterampersand letterat letterbackslash letterbar \
+letterbgroup letterclosebrace lettercolon letterdollar letterdoublequote \
+letteregroup letterescape letterexclamationmark letterhash letterhat \
+letterleftbrace letterless lettermore letteropenbrace letterpercent \
+letterquestionmark letterrightbrace lettersinglequote letterslash letterspacing \
+lettertilde letterunderscore letvalue letvalueempty letvaluerelax \
+lfence lhbox limitatelines limitatetext limitatetext \
+limtatefirstline line linenote linespanningtext liniendicke \
+linksbuendig listcitation listcitation listcitation listcite \
+listcite listcite listenlaenge listnamespaces llap \
+loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \
+loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \
+loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \
+localhsize localpopbox localpopmacro localpushbox localpushmacro \
+localundefine locatedfilepath locatefilepath locfilename logo \
+lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
+lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
+luaTeX luacode luaconditional luaenvironment luaexpanded \
+luafunction luajitTeX luamajorversion luaminorversion luaparameterset \
+luasetup luaversion m mLeftarrow mLeftrightarrow \
+mRightarrow makecharacteractive makerawcommalist makestrutofbox mapfontsize \
+mar marginaltext marginaltitel marginalwort margindata \
+markcontent markinjector mat math mathbf \
+mathbi mathblackboard mathbs mathcommand mathdefault \
+mathematik mathfraktur mathfunction mathit mathlabellanguage \
+mathlabeltext mathlabeltexts mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+maumrise maxaligned mbox mcframed measure \
+measured medskip medspace menueknopf menueknopf \
+mequal message metaTeX mfence mfunction \
+mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow middle \
+middlealigned middlebox midhbox minimalhbox mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule monat \
+mono monobold monobold mononormal monthlong \
+monthshort mprandomnumber mrel mrightarrow mrightharpoondown \
+mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext mtriplerel \
+mtwoheadleftarrow mtwoheadrightarrow nachunten namedheadnumber namedstructureheadlocation \
+namedstructureuservariable namedstructurevariable namedtaggedlabeltexts naturalhbox naturalhpack \
+naturalvbox naturalvcenter naturalvpack naturalvtop naturalwd \
+negatecolorbox negated negthinspace newattribute newcatcodetable \
+newcounter newevery newfrenchspacing newmode newsignal \
+newsystemmode nextbox nextboxdp nextboxht nextboxhtdp \
+nextboxwd nextcounter nextcountervalue nextdepth nextparagraphs \
+nextrealpage nextrealpagenumber nextsubcountervalue nextsubpage nextsubpagenumber \
+nextuserpage nextuserpagenumber nihongo nocitation nocitation \
+nocite nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation nokap nonfrenchspacing nonmathematics \
+nop nop normal normalboldface normalframedwithsettings \
+normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight normalizefontline \
+normalizefontwidth normalizetextdepth normalizetextheight normalizetextline normalizetextwidth \
+normaltypeface notesymbol notiz notragged ntimes \
+numberofpoints obeydepth objectdepth objectheight objectmargin \
+objectwidth obox offset offsetbox onedigitrounding \
+operatorlanguage operatortext ordinaldaynumber ordinalstr ornamenttext \
+ornamenttext ornamenttext outputfilename outputstreambox outputstreamcopy \
+outputstreamunvbox outputstreamunvcopy over overbar overbar \
+overbars overbartext overbarunderbar overbrace overbracetext \
+overbraceunderbrace overbracket overbrackettext overbracketunderbracket overlaybutton \
+overlaybutton overlaycolor overlaydepth overlayfigure overlayheight \
+overlaylinecolor overlaylinewidth overlayoffset overlayrollbutton overlaywidth \
+overleftarrow overleftharpoondown overleftharpoonup overleftrightarrow overloaderror \
+overparent overparenttext overparentunderparent overrightarrow overrightharpoondown \
+overrightharpoonup overset overstrike overstrikes overtwoheadleftarrow \
+overtwoheadrightarrow pagearea pagebreak pagefigure pagegridspanwidth \
+pageinjection pageinjection pagestaterealpage paletsize part \
+passelayoutan passendfeld pdfTeX pdfactualtext pdfbackendactualtext \
+pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo \
+pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern \
+pdfbackendsetshade pdfcolor pdfeTeX percent percentdimen \
+permitcaretescape permitcircumflexescape permitspacesbetweengroups persiandecimals persiannumerals \
+phantom phantombox pickupgroupedcommand placeattachments placebtxrendering \
+placechemical placecitation placecomments placecontent placecurrentformulanumber \
+placedbox placefigure placefloat placefloatwithsetups placeframed \
+placegraphic placeheadnumber placeheadtext placehelp placeindex \
+placeinitial placeintermezzo placelayer placelayeredtext placelistofabbreviations \
+placelistofchemicals placelistoffigures placelistofgraphics placelistofintermezzi placelistoflogos \
+placelistofpublications placelistofsorts placelistofsynonyms placelistoftables placelocalnotes \
+placement placenamedfloat placenamedformula placenotes placepagenumber \
+placepairedbox placeparallel placerawlist placerenderingwindow placetable \
+platzierebookmarks platziereformel platzierefussnoten platzierelegende platziereliste \
+platzierelokalefussnoten platzierenebeneinander platziereregister platziereuntereinander platziereunterformel \
+platzierezusammengestellteliste popattribute popmacro popmode popsystemmode \
+pos position positionoverlay positionregionoverlay posten \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prefixlanguage prefixtext prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols \
+presetheadtext presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext \
+presettaglabeltext presetunittext pretocommalist prevcounter prevcountervalue \
+preventmode prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage \
+prevsubpagenumber prevuserpage prevuserpagenumber procent processMPbuffer \
+processMPfigurefile processaction processallactionsinset processassignlist processassignmentcommand \
+processassignmentlist processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand \
+processcommalist processcommalistwithparameters processcontent processfile processfilemany \
+processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \
+processlinetablebuffer processlinetablefile processlist processmonth processranges \
+processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \
+processyear produkt produkt profiledbox profilegivenbox \
+programm projekt projekt pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped psh punkt punkt \
+purenumber pushattribute pushbutton pushmacro pushmode \
+pushoutputstream pushsystemmode qquad quad quitcommalist \
+quitprevcommalist quittypescriptscanning raggedbottom raggedcenter raggedleft \
+raggedright raggedwidecenter raisebox ran randomizetext \
+randomnumber raw rawcounter rawcountervalue rawdate \
+rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters rawprocessaction \
+rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue rbox \
+readfile readfixfile readjobfile readlocfile readsetfile \
+readsysfile readtexfile readxmlfile realSmallCapped realSmallcapped \
+realpagenumber realsmallcapped rechteck rechtecke rechtsbuendig \
+recursedepth recurselevel recursestring redoconvertfont ref \
+referenceprefix referenz referieren registerattachment registerctxluafile \
+registerexternalfigure registerfontclass registerhyphenationexception registerhyphenationpattern registermenubuttons \
+registersort registersynonym registerunit regular relatemarking \
+relateparameterhandlers relaxvalueifundefined remainingcharacters removebottomthings removedepth \
+removefromcommalist removelastskip removelastspace removemarkedcontent removepunctuation \
+removesubstring removetoks removeunwantedspaces replacefeature replacefeature \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetandaddfeature \
+resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning resetcharacterspacing \
+resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation resetdirection \
+resetfeature resetflag resetfontcolorsheme resetfontfallback resetfontsolution \
+resethyphenationfeatures resetinjector resetinteractionmenu resetitaliccorrection resetlayer \
+resetlocalfloats resetmarker resetmode resetpagenumber resetparallel \
+resetpath resetpenalties resetprofile resetreference resetreplacement \
+resetscript resetsetups resetshownsynonyms resetsubpagenumber resetsymbolset \
+resetsystemmode resettimer resettrackers resettrialtypesetting resetusedsortings \
+resetusedsynonyms resetuserpagenumber resetvalue resetvisualizers reshapebox \
+restartcounter restorebox restorecatcodes restorecounter restorecurrentattributes \
+restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic reuserandomseed \
+revivefeature rfence rhbox right rightbottombox \
+rightbox righthbox rightheadtext rightlabeltext rightline \
+rightmathlabeltext rightorleftpageaction rightskipadaption rightsubguillemot righttoleft \
+righttolefthbox righttoleftvbox righttoleftvtop righttopbox rlap \
+rob robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+roemischezahlen rollbutton rollbutton roman rtop \
+ruecksetztenbeschriftung rul ruledhbox ruledhpack ruledmbox \
+ruledtopv ruledtpack ruledvbox ruledvpack ruledvtop \
+runMPbuffer safechar sans sansbold sansnormal \
+sansserif savebox savebtxdataset savebuffer savebuffer \
+savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata savetwopassdata \
+sbox schreibezurliste schreibezwischenliste secondoffivearguments secondoffourarguments \
+secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded \
+section seeindex seite seitenreferenz seitenummer \
+select serializecommalist serializedcommalist serif serifbold \
+serifnormal setJSpreamble setMPlayer setMPpositiongraphic setMPpositiongraphicrange \
+setMPtext setMPvariable setMPvariables setbar setbigbodyfont \
+setboxllx setboxlly setbreakpoints setcapstrut setcatcodetable \
+setcharacteralign setcharactercasing setcharactercleaning setcharacterkerning setcharacterspacing \
+setcharacterstripping setcharstrut setcollector setcolormodell setcounter \
+setcounterown setcurrentfontclass setdataset setdefaultpenalties setdigitsmanipulation \
+setdirection setdocumentargument setdocumentargumentdefault setdocumentfilename setdummyparameter \
+setelementexporttag setemeasure setevalue setevariable setevariables \
+setfirstline setflag setfont setfontcolorsheme setfontfeature \
+setfontsolution setfontstrut setgmeasure setgvalue setgvariable \
+setgvariables sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures \
+setinitial setinjector setinteraction setinterfacecommand setinterfaceconstant \
+setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection \
+setlayer setlayerframed setlayerframed setlayertext setlocalhsize \
+setmainbodyfont setmainparbuilder setmarker setmarking setmathstyle \
+setmeasure setmessagetext setmode setnostrut setnote \
+setnote setnotetext setnotetext setobject setoldstyle \
+setpagegrid setpagereference setpagestate setpagestaterealpageno setpenalties \
+setpercentdimen setposition setpositionbox setpositiondata setpositiondataplus \
+setpositiononly setpositionplus setpositionstrut setprofile setrandomseed \
+setreference setreferencedobject setregisterentry setreplacement setrigidcolumnbalance \
+setrigidcolumnhsize setscript setsectionblock setsimplecolumnhsize setsmallbodyfont \
+setsmallcaps setstackbox setstructurepageregister setstrut setsuperiors \
+setsystemmode settabular settaggedmetadata settext settightobject \
+settightreferencedobject settightunreferencedobject settrialtypesetting setuevalue setugvalue \
+setunreferencedobject setup setup setupMPgraphics setupMPinstance \
+setupMPpage setupMPvariables setupTABLE setupTEXpage setupattachment \
+setupbackend setupbar setupbleeding setupbookmark setupbtx \
+setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist setupbtxregister \
+setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing setupchemical \
+setupchemicalframed setupcollector setupcolumnspan setupcombination setupcontent \
+setupcounter setupdataset setupdelimitedtext setupdescription setupdirections \
+setupdocument setupeffect setupenumeration setupenv setupexport \
+setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory setupfieldcontentframed \
+setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline setupfittingpage \
+setupfloatcaption setupfontexpansion setupfontprotrusion setupfontsolution setupforms \
+setupformula setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative \
+setuphelp setuphigh setuphighlight setuphyphenation setupindentedtext \
+setupindex setupinitial setupinsertion setupitaliccorrection setupitemgroup \
+setupitemgroup setuplabel setuplayer setuplayeredtext setuplayouttext \
+setuplinenote setuplinetable setuplistalternative setuplistextra setuplocalfloats \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh setupmarginblock \
+setupmargindata setupmarginframed setupmarginrule setupmathalignment setupmathcases \
+setupmathematics setupmathfence setupmathfraction setupmathframed setupmathlabeltext \
+setupmathmatrix setupmathornament setupmathradical setupmathstackers setupmathstyle \
+setupmixedcolumns setupmodule setupnotation setupnote setupoffset \
+setupoffsetbox setupoperatortext setupoutputroutine setupoutputroutine setuppagechecker \
+setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines setuppagegridspan \
+setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift setuppagestate \
+setuppairedbox setuppaper setupparagraph setupparagraphintro setupparallel \
+setupperiods setupplacement setuppositionbar setupprefixtext setupprocessor \
+setupprofile setupquotation setuprealpagenumber setupreferenceformat setupreferenceprefix \
+setupreferencestructureprefix setuprenderingwindow setups setups setupscale \
+setupscript setupselector setupshift setupsidebar setupspellchecking \
+setupstartstop setupstretched setupstruts setupstyle setupsubformula \
+setuptabulation setuptagging setuptaglabeltext setuptextbackground setuptextflow \
+setuptooltip setupunit setupunittext setupuserpagenumber setupversion \
+setupviewerlayer setupvspacing setupwithargument setupwithargumentswapped setupxml \
+setupxtable setuvalue setuxvalue setvalue setvariable \
+setvariables setvisualizerfont setwidthof setxmeasure setxvalue \
+setxvariable setxvariables sfrac shapedhbox shiftdown \
+shiftup showallmakeup showattributes showboxes showbtxdatasetauthors \
+showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness showbtxdatasetfields showbtxdatasetfields \
+showbtxfields showbtxfields showbtxhashedauthors showbtxtables showchardata \
+showcharratio showcolorbar showcolorcomponents showcolorset showcolorstruts \
+showcounter showdirectives showdirsinmargin showedebuginfo showexperiments \
+showfont showfontdata showfontkerns showfontparameters showfontstrip \
+showfontstyle showglyphs showgridsnapping showhelp showhyphenationtrace \
+showhyphens showinjector showjustification showkerning showlayoutcomponents \
+showligature showligatures showlogcategories showmargins showmessage \
+showminimalbaseline shownextbox showotfcomposition showparentchain showsetupsdefinition \
+showsymbolset showtimer showtokens showtrackers showvalue \
+showvariable showwarning simplealignedbox simplealignedboxplus simplealignedspreadbox \
+simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond \
+sixthofsixarguments slanted slantedbold slicepages slovenianNumerals \
+sloveniannumerals small smallbodyfont smallbold smallbolditalic \
+smallboldslanted smallcappedcharacters smallcappedromannumerals smaller smallitalicbold \
+smallnormal smallskip smallslanted smallslantedbold smalltype \
+smash smashbox smashboxed smashedhbox smashedvbox \
+snaptogrid snaptogrid someheadnumber somekindoftab somelocalfloat \
+somenamedheadnumber someplace spalte spanishNumerals spanishnumerals \
+spatium speech spiegeln splitdfrac splitfilename \
+splitfrac splitoffbase splitofffull splitoffkind splitoffname \
+splitoffpath splitoffroot splitofftokens splitofftype splitstring \
+sprache spreadhbox sqrt stackrel startJScode \
+startJSpreamble startLUA startLUA startMP startMP \
+startMPclip startMPcode startMPdefinitions startMPdrawing startMPdrawing \
+startMPenvironment startMPextensions startMPinclusions startMPinitializations startMPpage \
+startMPpositiongraphic startMPpositionmethod startMPrun startPARSEDXML startPARSEDXML \
+startTABLE startTABLE startTABLEbody startTABLEbody startTABLEfoot \
+startTABLEfoot startTABLEhead startTABLEhead startTABLEnext startTABLEnext \
+startTC startTD startTDs startTEX startTEX \
+startTEXpage startTH startTN startTR startTRs \
+startTX startTY startXML startXML startalign \
+startalignment startallmodes startappendices startarrangedpages startattachment \
+startbackmatter startbar startbar startbitmapimage startblockquote \
+startbodymatter startboxedcolumns startbtxlabeltext startbtxrenderingdefinitions startbuffer \
+startbuffer startbut startcases startcatcodetable startcatcodetable \
+startcenteraligned startchapter startcharacteralign startcheckedfences startchemical \
+startcollect startcollecting startcolorintent startcolorset startcolumns \
+startcolumnspan startcom startcombination startcombination startcomment \
+startcontextcode startcontextdefinitioncode startctxfunction startctxfunctiondefinition startcurrentcolor \
+startcurrentlistentrywrapper startdelimited startdelimitedtext startdisplaymath startdmath \
+startdocument starteffect startembeddedxtable startembeddedxtable startendnote \
+startendnote startendofline startexceptions startexpanded startexpandedcollect \
+startextendedcatcodetable startexternalfigurecollection startfarbe startfarbe startfarbe \
+startfigure startfiguretext startfittingpage startfloatcombination startfloatcombination \
+startfont startfontclass startfontsolution startformula startformulas \
+startframedcontent startframedtext startfrontmatter startfussnote startfussnote \
+startgeg startgot startgraphictext startgridsnapping startgridsnapping \
+starthboxestohbox starthelptext starthiding starthighlight starthintergrund \
+starthintergrund starthyphenation startimath startindentation startindentedtext \
+startinteraction startinteraktionsmenue startinterface startintermezzotext startintertext \
+startitemgroup startitemize startkleinerdurchschuss startknockout startkomponente \
+startkomponente startkopf startlabeltext startlayout startlegend \
+startlinealignment startlinecorrection startlinenote startlinenumbering startlinenumbering \
+startlines startlinetable startlinetablebody startlinetablecell startlinetablehead \
+startlinksbuendig startlocalfootnotes startlocalheadsetup startlocallinecorrection startlocalnotes \
+startlocalsetups startlocalsetups startlua startluacode startluaparameterset \
+startluasetups startluasetups startmakeup startmarginallinie startmarginallinie \
+startmarginblock startmarkedcontent startmathalignment startmathcases startmathlabeltext \
+startmathmatrix startmathmode startmathstyle startmathstyle startmatrices \
+startmatrix startmaxaligned startmdformula startmiddlealigned startmixedcolumns \
+startmode startmodeset startmodule startmodule startmoduletestsection \
+startmpformula startnamedsection startnamedsubformulas startnarrow startnarrow \
+startnarrow startnarrower startnegative startnicelyfilledbox startnointerference \
+startnop startnotallmodes startnotext startnotmode startoperatortext \
+startopposite startoutputstream startoverlay startoverprint startpagecomment \
+startpagefigure startpagegrid startpagegridspan startpagelayout startpar \
+startpar startparagraph startparagraphs startparagraphscell startparbuilder \
+startpart startpath startplacechemical startplacefigure startplacefloat \
+startplacegraphic startplaceintermezzo startplacepairedbox startplacetable startplatziereformel \
+startplatziereformel startplatzierelegende startpos startpositioning startpositionoverlay \
+startpositive startpostponing startprefixtext startprocessassignmentcommand startprocessassignmentlist \
+startprocesscommacommand startprocesscommalist startprodukt startprodukt startprojekt \
+startprojekt startprotect startprotectedcolors startpsh startpublikation \
+startpunctuation startrandomized startrandomseed startraw startrawsetups \
+startrawsetups startreadingfile startrechtsbuendig startreferenceprefix startreferenceprefix \
+startregime startregister startreusableMPgraphic startrob startrul \
+startscript startsdformula startsection startsectionblock startsectionblockenvironment \
+startsectionlevel startsetups startsetups startshapebox startshift \
+startsidebar startsimplecolumns startspecialitem startspecialitem startspecialitem \
+startspeech startspformula startspread startstartstop startstaticMPfigure \
+startstaticMPgraphic startstrictinspectnextcharacter startstructurepageregister startstrut startstyle \
+startstyle startsubformulas startsubject startsubsection startsubsentence \
+startsubstack startsubsubject startsubsubsection startsubsubsubject startsubsubsubsection \
+startsubsubsubsubject startsubsubsubsubsection startsubsubsubsubsubject startsymbolset starttable \
+starttable starttablehead starttables starttables starttabletail \
+starttabletext starttabulate starttabulatehead starttabulatetail starttagged \
+starttaglabeltext starttexcode starttexcode starttexdefinition starttext \
+starttext starttextbackground starttextbackgroundmanual starttextcolor starttextcolorintent \
+starttextflow starttextlinie starttitle starttokens starttxt \
+starttypescript starttypescriptcollection starttyping starttyping startueberschrifttext \
+startumgebung startumgebung startumrahmt startuniqueMPgraphic startuniqueMPpagegraphic \
+startunittext startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter \
+startusingbtxspecification startvboxtohbox startvboxtohboxseparator startviewerlayer startxcell \
+startxcellgroup startxgroup startxmldisplayverbatim startxmlinlineverbatim startxmlraw \
+startxmlsetups startxmlsetups startxrow startxrowgroup startxtable \
+startxtable startxtablebody startxtablebody startxtablefoot startxtablefoot \
+startxtablehead startxtablehead startxtablenext startxtablenext startzeile \
+startzentriert startzitat startzitieren startzu stelleabsaetzeein \
+stelleabsaetzeein stelleabsatznummerierungein stelleabschnittsblockein stelleanordnenein stelleausrichtungein \
+stelleausschnittein stellebeschriftungein stellebildunterschriftein stellebindestrichein stelleblankoein \
+stelleblockein stelledrehenein stelleduennerumrissein stelleeinziehenein stelleengerein \
stellefarbeein stellefarbenein stellefeldein stellefelderin stellefliesstextein \
-stellefliesstextumgebungein stelleformelnein stellefussnotendefinitionein stellefussnotenein stellefusszeileein \
-stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein stellegegenueberplatzierenein stellegleitobjekteein \
-stellegleitobjektein stellehintergruendeein stellehintergrundein stelleinmarginalieein stelleinteraktionein \
-stelleinteraktionsbalkenein stelleinteraktionsbildschirmein stelleinteraktionsmenueein stelleknopfein stellekombinationein \
-stellekommentarein stellekopfzahlein stellekopfzeileein stellekopfzeilentextein stellelabeltextein \
-stellelayoutein stellelegendeein stellelinienbreiteein stellelisteein stellemarginalblockein \
-stellemarginallinieein stellenobenein stellenummerierungein stellepaletteein stellepapierformatein \
-stelleplatziegeteiltegleitobjekt stellepositionierenein stellepostenein stelleprofilein stelleprogrammein \
-stellepublikationein stellepufferein stellerasterein stellerechteckein stellereferenzierenein \
-stellereferenzlisteein stelleregisterein stelleseitenkommentarein stelleseitennummerein stelleseitennummeriernungein \
-stelleseitenuebergangein stellesortierenein stellespaltenein stellespatiumein stellespracheein \
-stellesymbolsetein stellesynchronisationein stellesynchronisationsbalkenein stellesynonymein stellesystemein \
-stelletabein stelletabellenein stelletabulatorein stelletextein stelletextobenein \
-stelletexttexteein stelletextumrissein stelletextuntenein stelletipein stelletippenein \
-stelletoleranzein stelleueberschriftein stelleueberschriftenein stelleueberschrifttextein stelleumbruchein \
-stelleumrahmtein stelleumrahmtetexteein stelleuntenein stelleunterseitennummerein stelleunterstreichenein \
-stelleurlein stelleversalienein stelleversionein stellezeilenabstandein stellezeilenein \
-stellezeilennumerierungein stellezitierenein stellezusammengestelltelisteein stellezwischenraumein stopalignment \
-stopausrichtung stopbackground stopbuffer stopcolor stopcolumnmakeup \
-stopcolumns stopcolumnset stopcombination stopcomment stopcomponent \
-stopdescription stopdocument stopdokument stopenger stopenumeration \
-stopenvironment stopfact stopfarbe stopfigure stopfloattext \
-stopformula stopframedtext stopgegenueber stopglobal stopgrosserdurchschuss \
-stophiding stophintergrund stopinteractionmenu stopitemgroup stopkleinerdurchschuss \
-stopkodierung stopkombination stopkomponente stoplegend stopline \
-stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment \
-stoplocalfootnotes stoplokal stoplokalefussnoten stopmakeup stopmarginalblock \
-stopmarginallinie stopmarginblock stopmarginrule stopnamemakeup stopnarrower \
-stopopposite stopoverlay stopoverview stoppacked stopparagraph \
-stoppositionieren stoppositioning stoppostponing stopproduct stopprodukt \
-stopprofil stopprofile stopproject stopprojekt stopquotation \
-stopraster stopspalten stopsymbolset stopsynchronisation stopsynchronization \
-stoptabelle stoptabellen stoptable stoptables stoptabulate \
-stoptext stoptextlinie stoptextrule stoptyping stopueberblick \
-stopumbruch stopumgebung stopunpacked stopversion stopzeile \
-stopzeilen stopzeilenkorrektur stopzeilennumerierung stopzitat stretched \
-sub subject subpagenumber subsection subsubject \
-subsubsection subsubsubject switchtobodyfont switchtorawfont sym \
-symbol synchronisationsbalken synchronisieren synchronizationbar synchronize \
-synonym tab teilegleitobjekt testcolumn testpage \
-tex textbreite texthoehe textlinie textreference \
-textreferenz textrule textvariable thinrule thinrules \
-tief tiho tip tippedatei tippen \
-tippepuffer title tooltip translate txt \
-typ type typebuffer typefile ueber \
-ueberschrifttext uebersetzten umgebung umrahmt unbekant \
-underbar underbars unterformelnummer useURL useXMLfilter \
-useblocks usecommands usedirectory useencoding useexternaldocument \
-useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule \
-usereferences usespecials usesymbols usetypescript usetypescriptfile \
-verbergebloecke vergleichefarbengruppe vergleichepalette verknuepfebeschriftung verknuepfedokument \
-verknuepfregister version verweis verweisdatum verwendeJSscript \
-verwendeURL verwendebefehl verwendebloecke verwendeexteresdokument verwendeexterneabbildung \
-verwendeexternedatei verwendeexternedateien verwendeexternestonstueck verwendemodul verwendemodule \
-verwendereferenzen verwendesymbole verwendeurl vl volleswort \
-von waehlebloeckeaus waehlepapieraus waehleversionaus wechselezumfliesstext \
-weekday whitespace wiederholen wochentag wohnort \
-wordright wortrechts writebetweenlist writetolist writetoreferencelist \
-writetoregister zeigedruck zeigeeinstellungen zeigeexterneabbildungen zeigefarbe \
-zeigefarbengruppe zeigefelder zeigefliesstext zeigefliesstextumgebung zeigegitter \
+stellefusszeileein stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein stellegegenueberplatzierenein \
+stellegleitobjektein stellehintergruendeein stellehintergruendeein stellehintergrundein stelleinteraktionein \
+stelleinteraktionein stelleinteraktionsbalkenein stelleinteraktionsbildschirmein stelleinteraktionsmenueein stellekommentarein \
+stellekopfzahlein stellekopfzeileein stellekopfzeilentextein stellelabeltextein stellelayoutein \
+stellelayoutein stellelegendeein stellelinienbreiteein stellelisteein stellemarginallinieein \
+stellenobenein stellepaletteein stellepapierformatein stellepapierformatein stelleplatziegeteiltegleitobjekt \
+stellepositionierenein stellepostenein stelleprogrammein stellepufferein stellerechteckein \
+stellereferenzierenein stelleregisterein stelleregisterein stelleseitenkommentarein stelleseitennummerein \
+stelleseitennummeriernungein stelleseitenuebergangein stellesortierenein stellespaltenein stellespatiumein \
+stellespracheein stellesymbolsetein stellesynonymein stelletabellenein stelletabulatorein \
+stelletextein stelletextobenein stelletexttexteein stelletextumrissein stelletextuntenein \
+stelletipein stelletippenein stelletoleranzein stelleueberschriftein stelleueberschrifttextein \
+stelleumbruchein stelleumrahmtein stelleuntenein stelleunterseitennummerein stelleurlein \
+stelleversalienein stellezeilenabstandein stellezeilenabstandein stellezeilenabstandein stellezeilenabstandein \
+stellezeilenabstandein stellezeilenabstandein stellezeilenein stellezeilennumerierungein stellezitierenein \
+stellezusammengestelltelisteein stellezwischenraumein stopJScode stopJSpreamble stopLUA \
+stopLUA stopMP stopMP stopMPclip stopMPcode \
+stopMPdefinitions stopMPdrawing stopMPdrawing stopMPenvironment stopMPextensions \
+stopMPinclusions stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod \
+stopMPrun stopPARSEDXML stopPARSEDXML stopTABLE stopTABLE \
+stopTABLEbody stopTABLEbody stopTABLEfoot stopTABLEfoot stopTABLEhead \
+stopTABLEhead stopTABLEnext stopTABLEnext stopTC stopTD \
+stopTDs stopTEX stopTEX stopTEXpage stopTH \
+stopTN stopTR stopTRs stopTX stopTY \
+stopXML stopXML stopalign stopalignment stopallmodes \
+stopappendices stoparrangedpages stopattachment stopbackmatter stopbar \
+stopbar stopbitmapimage stopblockquote stopbodymatter stopboxedcolumns \
+stopbtxlabeltext stopbtxrenderingdefinitions stopbuffer stopbuffer stopbut \
+stopcases stopcatcodetable stopcatcodetable stopcenteraligned stopchapter \
+stopcharacteralign stopcheckedfences stopchemical stopcollect stopcollecting \
+stopcolorintent stopcolorset stopcolumns stopcolumnspan stopcom \
+stopcombination stopcombination stopcomment stopcontextcode stopcontextdefinitioncode \
+stopctxfunction stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdelimited \
+stopdelimitedtext stopdisplaymath stopdmath stopdocument stopeffect \
+stopembeddedxtable stopembeddedxtable stopendnote stopendnote stopendofline \
+stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection \
+stopfarbe stopfarbe stopfarbe stopfigure stopfiguretext \
+stopfittingpage stopfloatcombination stopfloatcombination stopfont stopfontclass \
+stopfontsolution stopformula stopformulas stopframedcontent stopframedtext \
+stopfrontmatter stopfussnote stopfussnote stopgeg stopgot \
+stopgraphictext stopgridsnapping stopgridsnapping stophboxestohbox stophelptext \
+stophiding stophighlight stophintergrund stophintergrund stophyphenation \
+stopimath stopindentation stopindentedtext stopinteraction stopinteraktionsmenue \
+stopinterface stopintermezzotext stopintertext stopitemgroup stopitemize \
+stopkleinerdurchschuss stopknockout stopkomponente stopkomponente stopkopf \
+stoplabeltext stoplayout stoplegend stoplinealignment stoplinecorrection \
+stoplinenote stoplinenumbering stoplinenumbering stoplines stoplinetable \
+stoplinetablebody stoplinetablecell stoplinetablehead stoplinksbuendig stoplocalfootnotes \
+stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups stoplocalsetups \
+stoplua stopluacode stopluaparameterset stopluasetups stopluasetups \
+stopmakeup stopmarginallinie stopmarginallinie stopmarginblock stopmarkedcontent \
+stopmathalignment stopmathcases stopmathlabeltext stopmathmatrix stopmathmode \
+stopmathstyle stopmathstyle stopmatrices stopmatrix stopmaxaligned \
+stopmdformula stopmiddlealigned stopmixedcolumns stopmode stopmodeset \
+stopmodule stopmodule stopmoduletestsection stopmpformula stopnamedsection \
+stopnamedsubformulas stopnarrow stopnarrow stopnarrow stopnarrower \
+stopnegative stopnicelyfilledbox stopnointerference stopnop stopnotallmodes \
+stopnotext stopnotmode stopoperatortext stopopposite stopoutputstream \
+stopoverlay stopoverprint stoppagecomment stoppagefigure stoppagegrid \
+stoppagegridspan stoppagelayout stoppar stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \
+stopplacechemical stopplacefigure stopplacefloat stopplacegraphic stopplaceintermezzo \
+stopplacepairedbox stopplacetable stopplatziereformel stopplatziereformel stopplatzierelegende \
+stoppos stoppositioning stoppositionoverlay stoppositive stoppostponing \
+stopprefixtext stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist \
+stopprodukt stopprodukt stopprojekt stopprojekt stopprotect \
+stopprotectedcolors stoppsh stoppublikation stoppunctuation stoprandomized \
+stoprandomseed stopraw stoprawsetups stoprawsetups stopreadingfile \
+stoprechtsbuendig stopreferenceprefix stopreferenceprefix stopregime stopregister \
+stopreusableMPgraphic stoprob stoprul stopscript stopsdformula \
+stopsection stopsectionblock stopsectionblockenvironment stopsectionlevel stopsetups \
+stopsetups stopshapebox stopshift stopsidebar stopsimplecolumns \
+stopspecialitem stopspecialitem stopspecialitem stopspeech stopspformula \
+stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter \
+stopstructurepageregister stopstrut stopstyle stopstyle stopsubformulas \
+stopsubject stopsubsection stopsubsentence stopsubstack stopsubsubject \
+stopsubsubsection stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject stopsubsubsubsubsection \
+stopsubsubsubsubsubject stopsymbolset stoptable stoptable stoptablehead \
+stoptables stoptables stoptabletail stoptabletext stoptabulate \
+stoptabulatehead stoptabulatetail stoptagged stoptaglabeltext stoptexcode \
+stoptexcode stoptexdefinition stoptext stoptext stoptextbackground \
+stoptextbackgroundmanual stoptextcolor stoptextcolorintent stoptextflow stoptextlinie \
+stoptitle stoptokens stoptxt stoptypescript stoptypescriptcollection \
+stoptyping stoptyping stopueberschrifttext stopumgebung stopumgebung \
+stopumrahmt stopuniqueMPgraphic stopuniqueMPpagegraphic stopunittext stopunpacked \
+stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification stopvboxtohbox \
+stopvboxtohboxseparator stopviewerlayer stopxcell stopxcellgroup stopxgroup \
+stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw stopxmlsetups stopxmlsetups \
+stopxrow stopxrowgroup stopxtable stopxtable stopxtablebody \
+stopxtablebody stopxtablefoot stopxtablefoot stopxtablehead stopxtablehead \
+stopxtablenext stopxtablenext stopzeile stopzentriert stopzitat \
+stopzitieren stopzu strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter \
+strippedcsname strippedcsname stripspaces structurelistuservariable structurenumber \
+structuretitle structureuservariable structurevariable strut strutdp \
+strutht struthtdp struttedbox strutwd style \
+style styleinstance sub subject subpagenumber \
+subsection subsentence substituteincommalist subsubject subsubsection \
+subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection subsubsubsubsubject \
+subtractfeature subtractfeature swapcounts swapdimens swapface \
+swapmacros swaptypeface switchstyleonly switchstyleonly switchtocolor \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace sym symbol symbol symbolreference \
+synchronizeblank synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut \
+synchronizewhitespace systemlog systemlogfirst systemloglast systemsetups \
+tLeftarrow tLeftrightarrow tRightarrow tabulateautoline tabulateautorule \
+tabulateline tabulaterule taggedctxcommand taggedlabeltexts taglabellanguage \
+taglabeltext tbinom tbox teilegleitobjekt tequal \
+testandsplitstring testcolumn testfeature testfeatureonce testpage \
+testpageonly testpagesync testtokens tex texdefinition \
+texsetup textcitation textcitation textcitation textcite \
+textcite textcite textcontrolspace textflowcollector textlinie \
+textmath textminus textormathchar textplus textreferenz \
+textvisiblespace tfrac thai thainumerals thefirstcharacter \
+thenormalizedbodyfontsize theremainingcharacters thickspace thinspace thinspace \
+thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded \
+thookleftarrow thookrightarrow threedigitrounding tibetannumerals tief \
+tightlayer tiho tilde tinyfont tip \
+tip tippedatei tippen tippen tippepuffer \
+title tlap tleftarrow tleftharpoondown tleftharpoonup \
+tleftrightarrow tleftrightharpoons tmapsto tochar tolinenote \
+tooltip tooltip topbox topleftbox toplinebox \
+toprightbox topskippedbox tracecatcodetables tracedfontname traceoutputroutines \
+tracepositions transparencycomponents trel trightarrow trightharpoondown \
+trightharpoonup trightleftharpoons trightoverleftarrow triplebond truefilename \
+truefontname ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow \
+twodigitrounding tx txt txt txx \
+typedefinedbuffer typeface typescriptone typescriptprefix typescriptthree \
+typescripttwo typesetbuffer typesetfile uconvertnumber ueber \
+ueberschrifttext uebersetzten uedcatcodecommand umgebung umgebung \
+umrahmt unbekant undefinevalue undepthed underbar \
+underbar underbars underbartext underbrace underbracetext \
+underbracket underbrackettext underdash underdashes underdot \
+underdots underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow \
+underparent underparenttext underrandom underrandoms underrightarrow \
+underrightharpoondown underrightharpoonup underset understrike understrikes \
+undertwoheadleftarrow undertwoheadrightarrow undoassign unframed unhhbox \
+unihex uniqueMPgraphic uniqueMPpagegraphic unit unitlanguage \
+unittext unprotected unregisterhyphenationpattern unspaceafter unspaceargument \
+unspaced unspacestring untexargument untexcommand uppercased \
+uppercasestring upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote \
+upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote url \
+useMPenvironmentbuffer useMPgraphic useMPlibrary useMPrun useMPvariables \
+usealignparameter usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions \
+usecolors usecomponent usedummycolorparameter usedummystyleandcolor usedummystyleparameter \
+useenvironment useexternalrendering usefigurebase usefile usegridparameter \
+useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter uselanguageparameter \
+useluamodule usemathstyleparameter useproduct useprofileparameter useproject \
+usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure usesubpath \
+usetexmodule usetypescript usetypescriptfile usezipfile utfchar \
+utflower utfupper utilityregisterlength vboxreference vec \
+verbatim verbatimstring verbergebloecke verbosenumber vergleichefarbengruppe \
+vergleichepalette version verticalgrowingbar verticalpositionbar verwendeJSscript \
+verwendeURL verwendebloecke verwendeexteresdokument verwendeexterneabbildung verwendeexternestonstueck \
+verwendemodul verwendesymbole verwendeurl veryraggedcenter veryraggedleft \
+veryraggedright vglue viewerlayer vl volleswort \
+von vphantom vpos vsmash vsmashbox \
+vsmashed vspace vspacing waehlebloeckeaus wdofstring \
+wechselezumfliesstext widthofstring widthspanningtext withoutpt wochentag \
+word words wordtonumber wortrechts writedatatolist \
+writestatus xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument \
+xequal xfrac xhookleftarrow xhookrightarrow xleftarrow \
+xleftharpoondown xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto \
+xmladdindex xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup \
+xmlappendsetup xmlapplyselectors xmlatt xmlattdef xmlattribute \
+xmlattributedef xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt \
+xmlchainattdef xmlchecknamespace xmlcommand xmlconcat xmlconcatrange \
+xmlcontext xmlcount xmldefaulttotext xmldirectives xmldirectivesafter \
+xmldirectivesbefore xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty \
+xmldoifelseselfempty xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty \
+xmldoifnottext xmldoifselfempty xmldoiftext xmlelement xmlfilter \
+xmlfirst xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise \
+xmlflushpure xmlflushspacewise xmlflushtext xmlinclude xmlinclusion \
+xmlinclusions xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective \
+xmllast xmllastatt xmllastmatch xmlloadbuffer xmlloaddata \
+xmlloaddirectives xmlloadfile xmlloadonly xmlmain xmlmapvalue \
+xmlname xmlnamespace xmlnonspace xmlpath xmlpos \
+xmlposition xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer \
+xmlprocessdata xmlprocessfile xmlpure xmlraw xmlrefatt \
+xmlregistereddocumentsetups xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname \
+xmlremapnamespace xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors \
+xmlresetsetups xmlsave xmlsetentity xmlsetfunction xmlsetinjectors \
+xmlsetsetup xmlsetup xmlshow xmlsnippet xmlstrip \
+xmlstripnolines xmlstripped xmlstrippednolines xmltag xmltexentity \
+xmltext xmltobuffer xmltobufferverbose xmltofile xmlvalue \
+xmlverbatim xrel xrightarrow xrightharpoondown xrightharpoonup \
+xrightleftharpoons xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow \
+xtwoheadrightarrow xxfrac xypos zeigedruck zeigeeinstellungen \
+zeigefarbe zeigefarbengruppe zeigefliesstext zeigefliesstextumgebung zeigegitter \
zeigelayout zeigepalette zeigerahmen zeigestruts zeigeumbruch \
zentriert ziffern zitat zitieren zu \
-zurbox zurseite zwischenraum
+zurbox zurseite
keywordclass.context.en=\
-CAP Cap Caps Character \
-Characters MONTH Numbers Romannumerals WEEKDAY \
-WORD WORDS Word Words about \
-adaptlayout adding appendix arg at \
-atleftmargin atpage atrightmargin background backspace \
-blackrule blackrules blank bookmark bottomdistance \
-bottomheight bottomspace but button bypassblocks \
-cap chapter character characters chem \
-clip clonefield color colorbar colorvalue \
-column comment comparecolorgroup comparepalet completecombinedlist \
-completelistoffloats completelistofsorts completelistofsynonyms completepagenumber completeregister \
-component convertnumber copyfield correctwhitespace coupledocument \
-coupledregister couplemarking couplepage couplepaper coupleregister \
-crlf currentdate currentheadnumber cutspace date \
-decouplemarking decrementnumber define defineaccent defineblank \
-defineblock definebodyfont definebodyfontDEF definebodyfontREF definebodyfontenvironment \
-definebuffer definecharacter definecolor definecolorgroup definecolumnbreak \
-definecolumnset definecombination definecombinedlist definecommand defineconversion \
-definedescription definedfont defineenumeration definefield definefieldstack \
-definefiguresymbol definefloat definefont definefontfeature definefonthandling \
-definefontstyle definefontsynonym defineframed defineframedtext definehbox \
-definehead defineindentedtext defineinmargin defineinteractionmenu defineitemgroup \
-definelabel definelayer definelayout definelist definelogo \
-definemainfield definemakeup definemarking definemathalignment defineoutput \
-defineoverlay definepagebreak definepalet definepapersize defineparagraphs \
-defineplacement defineprofile defineprogram definerawfont definereference \
-definereferenceformat definereferencelist defineregister definerule definesection \
-definesectionblock definesorting definestartstop definestyle definesubfield \
-definesymbol definesynonyms definetabletemplate definetabulate definetext \
-definetextbackground definetextposition definetextvariable definetype definetypeface \
-definetyping defineversion description determineheadnumber determinelistcharacteristics \
-determineregistercharacteristics dimension disableinteractionmenu domicile donttest \
-edgedistance edgewidth emptylines enumeration environment \
-externalfigure fact field fieldstack fillinfield \
-fillinline fillinrules fillintext fitfield fixedspace \
-fixedspaces followprofile followprofileversion followversion footerdistance \
-footerheight footnote footnotetext forceblocks formulanumber \
-fraction framed framedtext from getbuffer \
-getmarking getnumber godown goto gotobox \
-gotopage graycolor greyvalue grid hairline \
-head headerdistance headerheight headlevel headnumber \
-headsym headtext hideblocks high hl \
-immediatebetweenlist immediatetolist in incrementnumber indentation \
-indenting inframed infull ininner inleft \
-inleftedge inleftmargin inline inmaframed inmargin \
-inneredgedistance inneredgewidth innermargindistance innermarginwidth inothermargin \
-inouter inright inrightedge inrightmargin installlanguage \
-interactionbar interactionbuttons interactionmenu item items \
-its keepblocks label labeling labels \
-labeltext language leftaligned leftedgedistance leftedgewidth \
-leftmargindistance leftmarginwidth leg linethickness listheight \
-listlength listsymbol listwidth loadsorts loadsynonyms \
-logfields lohi low maframed mainlanguage \
-makeupheight makeupwidth mapfontsize mar margindistance \
-marginrule margintext margintitle marginwidth marginword \
-marking markversion mathematics mediaeval menubutton \
-midaligned mirror month moveformula moveongrid \
-movesidefloat name navigating nextsection nocap \
-nodimension noheaderandfooterlines noindenting nolist nomarking \
-nomoreblocks nomorefiles nop nospace note \
-notopandbottomlines nowhitespace numberofsubpages numbers outeredgedistance \
-outeredgewidth outermargindistance outermarginwidth overbar overbars \
-overstrike overstrikes packed page pagedepth \
-pagenumber pageoffset pagereference paperheight paperwidth \
-paragraph part periods placebookmarks placecombinedlist \
-placefloat placefootnotes placeformula placeheadnumber placeheadtext \
-placelegend placelist placelistoffloats placelistofsorts placelistofsynonyms \
-placelocalfootnotes placelogos placeongrid placeontopofeachother placepagenumber \
-placerawlist placereferencelist placeregister placerule placesidebyside \
-placesubformula placetextvariable position positiontext printpaperheight \
-printpaperwidth processblocks processpage product program \
-project publication quotation quote ran \
-redo ref reference referral referraldate \
-referring register remark reservefloat reset \
-resetmarking resetnumber resettextcontent rightaligned rightedgedistance \
-rightedgewidth rightmargindistance rightmarginwidth romannumerals rotate \
-scale screen section seeregister selectblocks \
-selectpaper selectversion setnumber settextcontent settextvariable \
-setupalign setupanswerarea setuparranging setupbackground setupbackgrounds \
-setupblackrules setupblank setupblock setupbodyfont setupbodyfontenvironment \
-setupbottom setupbottomtexts setupbuffer setupbuttons setupcapitals \
-setupcaption setupcaptions setupclipping setupcolor setupcolors \
-setupcolumns setupcolumnset setupcolumnsetlines setupcolumnsetstart setupcombinations \
-setupcombinedlist setupcomment setupdescriptions setupenumerations setupexternalfigures \
-setupfield setupfields setupfillinlines setupfillinrules setupfloat \
-setupfloats setupfloatsplitting setupfonthandling setupfontsynonym setupfooter \
-setupfootertexts setupfootnotedefinition setupfootnotes setupforms setupformulae \
-setupformulas setupframed setupframedtexts setuphead setupheader \
-setupheadertexts setupheadnumber setupheads setupheadtext setuphyphenmark \
-setupindentedtext setupindenting setupinmargin setupinteraction setupinteractionbar \
-setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 setupitemgroup \
-setupitemizations setupitems setuplabeltext setuplanguage setuplayout \
-setuplegend setuplinenumbering setuplines setuplinewidth setuplist \
-setuplistalternative setupmakeup setupmarginblocks setupmarginrules setupmarking \
-setupmathalignment setupnarrower setupnumber setupnumbering setupoppositeplacing \
-setupoutput setuppagecomment setuppagenumber setuppagenumbering setuppagetransitions \
-setuppalet setuppaper setuppapersize setupparagraphnumbering setupparagraphs \
-setupplacement setuppositioning setupprofiles setupprograms setuppublications \
-setupquote setupreferencelist setupreferencing setupregister setuprotate \
-setuprule setupscreens setupsection setupsectionblock setupsorting \
-setupspacing setupstartstop setupstrut setupsubpagenumber setupsymbolset \
-setupsynchronization setupsynchronizationbar setupsynonyms setupsystem setuptab \
-setuptables setuptabulate setuptext setuptextbackground setuptextposition \
-setuptextrules setuptexttexts setuptextvariable setupthinrules setuptolerance \
-setuptop setuptoptexts setuptype setuptyping setupunderbar \
-setupurl setupversions setupwhitespace showbodyfont showbodyfontenvironment \
-showcolor showcolorgroup showexternalfigures showfields showframe \
-showgrid showlayout showmakeup showpalet showprint \
-showsetups showstruts showsymbolset someline somewhere \
-sort space splitfloat startalignment startbackground \
-startbuffer startcoding startcolor startcolumnmakeup startcolumns \
-startcolumnset startcombination startcomment startcomponent startdescription \
-startdocument startenumeration startenvironment startfact startfigure \
-startfloattext startformula startframed startframedtext startglobal \
-starthiding startinteractionmenu startitemgroup startlegend startline \
-startlinecorrection startlinenumbering startlines startlocal startlocalenvironment \
-startlocalfootnotes startmakeup startmarginblock startmarginrule startnamemakeup \
-startnarrower startopposite startoverlay startoverview startpacked \
-startparagraph startpositioning startpostponing startproduct startprofile \
-startproject startquotation startraster startregister startsymbolset \
-startsynchronization starttable starttables starttabulate starttext \
-starttextbackground starttextrule starttyping startunpacked startversion \
-stopalignment stopbackground stopbuffer stopcoding stopcolor \
-stopcolumnmakeup stopcolumns stopcolumnset stopcombination stopcomment \
-stopcomponent stopdescription stopdocument stopenumeration stopenvironment \
-stopfact stopfigure stopfloattext stopformula stopframed \
-stopframedtext stopglobal stophiding stopinteractionmenu stopitemgroup \
-stoplegend stopline stoplinecorrection stoplinenumbering stoplines \
-stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock \
-stopmarginrule stopnamemakeup stopnarrower stopopposite stopoverlay \
-stopoverview stoppacked stopparagraph stoppositioning stoppostponing \
-stopproduct stopprofile stopproject stopquotation stopraster \
-stopsymbolset stopsynchronization stoptable stoptables stoptabulate \
-stoptext stoptextbackground stoptextrule stoptyping stopunpacked \
-stopversion stretched sub subformulanumber subject \
-subpagenumber subsection subsubject subsubsection subsubsubject \
-switchtobodyfont switchtorawfont sym symbol symoffset \
-synchronizationbar synchronize synonym tab testcolumn \
-testpage tex textheight textreference textrule \
-textvariable textwidth thinrule thinrules title \
-tooltip topdistance topheight topspace totalnumberofpages \
-translate txt typ type typebuffer \
-typefile underbar underbars unitmeaning unknown \
-useJSscripts useURL useXMLfilter useblocks usecommands \
-usedirectory useencoding useexternaldocument useexternalfigure useexternalfile \
-useexternalfiles useexternalsoundtrack usemodule usemodules usereferences \
-usespecials usesymbols usetypescript usetypescriptfile useurl \
-version vl weekday whitespace wordright \
-writebetweenlist writetolist writetoreferencelist writetoregister
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Cap Caps Character Characters \
+ConTeXt Context ConvertConstantAfter ConvertToConstant ETEX \
+EveryLine EveryPar GetPar GotoPar Greeknumerals \
+INRSTEX LAMSTEX LATEX LUAJITTEX LUATEX \
+LaTeX LamSTeX LuaTeX LuajitTeX METAFONT \
+METAFUN METAPOST MKII MKIV MKIX \
+MKVI MKXI MONTH MONTHLONG MONTHSHORT \
+MPII MPIV MPVI MPanchor MPbetex \
+MPc MPcode MPcolor MPcoloronly MPcolumn \
+MPd MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape \
+MPgetposboxes MPh MPinclusions MPleftskip MPll \
+MPlr MPls MPmenubuttons MPn MPoptions \
+MPoverlayanchor MPp MPpage MPpardata MPplus \
+MPpos MPpositiongraphic MPposset MPr MPrawvar \
+MPregion MPrest MPrightskip MPrs MPstring \
+MPtext MPtransparency MPul MPur MPv \
+MPvar MPvariable MPvv MPw MPx \
+MPxy MPxywhd MPy MetaFont MetaFun \
+MetaPost NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight NormalizeTextWidth \
+Numbers PDFETEX PDFTEX PDFcolor PICTEX \
+PPCHTEX PPCHTeX PRAGMA PiCTeX PointsToBigPoints \
+PointsToReal PointsToWholeBigPoints PtToCm ReadFile Romannumerals \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Smallcapped TABLE TEX \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VerboseNumber \
+WEEKDAY WORD WORDS WidthSpanningText Word \
+Words XETEX XeTeX abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals about activatespacehandler acute \
+adaptcollector adaptlayout adaptpapersize addfeature addfeature \
+addtoJSpreamble addtocommalist addvalue aftersplitstring aftertestandsplitstring \
+alignbottom aligned alignedbox alignedline alignmentcharacter \
+allinputpaths alphabeticnumerals alwayscitation alwayscitation alwayscitation \
+alwayscite alwayscite alwayscite ampersand anchor \
+appendetoks appendgvalue appendtocommalist appendtoks appendtoksonce \
+appendvalue apply applyalternativestyle applyprocessor applytocharacters \
+applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced \
+applytosplitstringword applytosplitstringwordspaced applytowords arabicdecimals arabicexnumerals \
+arabicnumerals arg asciistr assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype at atleftmargin atpage \
+atrightmargin attachment autocap autodirhbox autodirvbox \
+autodirvtop autoinsertnextspace automathematics autosetups availablehsize \
+averagecharwidth background backgroundimage backgroundimagefill backgroundline \
+bar basegrid baselinebottom baselineleftbox baselinemiddlebox \
+baselinerightbox bbox beforesplitstring beforetestandsplitstring big \
+bigbodyfont bigg bigger biggl biggm \
+biggr bigl bigm bigr bigskip \
+binom bitmapimage blackrule blackrules blank \
+blap bleed bleedheight bleedwidth blockquote \
+bodyfontenvironmentlist bodyfontsize bold boldface bolditalic \
+boldslanted bookmark booleanmodevalue bottombox bottomleftbox \
+bottomrightbox boxcursor boxmarker boxofsize boxreference \
+bpos breve bthiddencitation btxabbreviatedjournal btxaddjournal \
+btxalwayscitation btxalwayscitation btxalwayscitation btxauthorfield btxdetail \
+btxdirect btxdoif btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist \
+btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse \
+btxdoifsameaspreviouselse btxdoifuservariableelse btxexpandedjournal btxfield btxfieldname \
+btxfieldtype btxfirstofrange btxflush btxflushauthor btxflushauthorinverted \
+btxflushauthorinvertedshort btxflushauthorname btxflushauthornormal btxflushauthornormalshort btxflushsuffix \
+btxfoundname btxfoundtype btxhybridcite btxhybridcite btxhybridcite \
+btxhybridcite btxlabellanguage btxlabeltext btxlistcitation btxlistcitation \
+btxlistcitation btxloadjournalist btxoneorrange btxremapauthor btxsavejournalist \
+btxsetup btxsingularorplural btxsingularplural btxtextcitation btxtextcitation \
+btxtextcitation buildmathaccent buildtextaccent buildtextbottomcomma buildtextbottomdot \
+buildtextcedilla buildtextgrave buildtextmacron buildtextognek but \
+but button calligraphic camel cap \
+catcodetablename cbox centeraligned centerbox centeredbox \
+centeredlastline centerednextbox centerline cfrac chapter \
+character characters chardescription charwidthlanguage check \
+checkcharacteralign checkedchar checkedfiller checkedstrippedcsname checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata chem chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chineseallnumerals chinesecapnumerals chinesenumerals citation citation \
+citation citation cite cite cite \
+cite clap classfont cldcommand cldcontext \
+cldloadfile cldprocessfile cleftarrow clip clonefield \
+collect collectedtext collectexpanded color colorbar \
+colorcomponents colored colored colorvalue column \
+columnbreak com combinepages commalistelement commalistsentence \
+commalistsize comment comparecolorgroup comparedimension comparedimensioneps \
+comparepalet completebtxrendering completecontent completeindex completelist \
+completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics completelistofintermezzi \
+completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms completelistoftables \
+completepagenumber completeregister complexorsimple complexorsimple complexorsimpleempty \
+complexorsimpleempty component component composedcollector composedlayer \
+compresult constantdimen constantdimenargument constantemptyargument constantnumber \
+constantnumberargument contentreference continuednumber continueifinputfile convertargument \
+convertcommand convertedcounter converteddimen convertedsubcounter convertmonth \
+convertnumber convertvalue convertvboxtohbox copybtxlabeltext copyfield \
+copyheadtext copylabeltext copymathlabeltext copyoperatortext copypages \
+copyparameters copyposition copyprefixtext copytaglabeltext copyunittext \
+correctwhitespace countersubs counttoken counttokens cramped \
+crampedclap crampedllap crampedrlap crightarrow crightoverleftarrow \
+ctop ctxcommand ctxdirectcommand ctxdirectlua ctxfunction \
+ctxlatecommand ctxlatelua ctxloadluafile ctxlua ctxluabuffer \
+ctxluacode ctxreport ctxsprint currentassignmentlistkey currentassignmentlistvalue \
+currentbtxuservariable currentcommalistitem currentcomponent currentdate currentenvironment \
+currentfeaturetest currentheadnumber currentinterface currentlanguage currentlistentrydestinationattribute \
+currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute currentlistentrytitle \
+currentlistentrytitlerendered currentlistsymbol currentmainlanguage currentmessagetext currentmoduleparameter \
+currentoutputstream currentproduct currentproject currentregime currentregisterpageuserdata \
+currentresponses currenttime currentvalue currentxtablecolumn currentxtablerow \
+d datasetvariable date dayoftheweek dayspermonth \
+dbinom ddot decrement decrement decrementcounter \
+decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface \
+defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand \
+defconvertedvalue define defineMPinstance defineTABLEsetup defineaccent \
+defineactivecharacter definealternativestyle defineanchor defineattachment defineattribute \
+definebackground definebar defineblock definebodyfont definebodyfont \
+definebodyfontenvironment definebodyfontswitch definebreakpoint definebreakpoints definebtx \
+definebtxdataset definebtxregister definebtxrendering definebuffer definebutton \
+definecapitals definecharacter definecharacterkerning definecharacterspacing definechemical \
+definechemicals definechemicalsymbol definecollector definecolor definecolor \
+definecolorgroup definecolumnbreak definecombination definecombinedlist definecommand \
+definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty \
+defineconversion defineconversion defineconversionset definecounter definedataset \
+definedelimitedtext definedescription definedfont defineeffect defineenumerations \
+defineexpandable defineexternalfigure definefallbackfamily definefallbackfamily definefield \
+definefieldbody definefieldbodyset definefieldcategory definefieldstack definefiguresymbol \
+definefileconstant definefilefallback definefilesynonym definefiller definefirstline \
+definefittingpage definefloat definefloat definefont definefont \
+definefontalternative definefontfallback definefontfamily definefontfamily definefontfamilypreset \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+definefontstyle definefontsynonym defineformula defineformulaalternative defineframed \
+defineframedcontent defineframedtext definefrozenfont defineglobalcolor defineglobalcolor \
+definegraphictypesynonym definegridsnapping definehbox definehead defineheadalternative \
+definehelp definehigh definehighlight definehspace definehypenationfeatures \
+defineindentedtext defineindenting defineinitial defineinsertion defineinteraction \
+defineinteractionbar defineinteractionmenu defineinterfaceconstant defineinterfaceelement defineinterfacevariable \
+defineinterlinespace defineinterlinespace defineintermediatecolor defineitemgroup defineitems \
+definelabel definelabelclass definelayer definelayerpreset definelayerpreset \
+definelayout definelinenote definelinenumbering definelines definelist \
+definelistalternative definelistextra definelow definelowhigh definelowmidhigh \
+definemakeup definemarginblock definemargindata definemarker definemarking \
+definemathaccent definemathalignment definemathcases definemathcommand definemathdoubleextensible \
+definemathematics definemathextensible definemathfence definemathfraction definemathframed \
+definemathmatrix definemathornament definemathoverextensible definemathovertextextensible definemathradical \
+definemathstackers definemathstyle definemathtriplet definemathunderextensible definemathundertextextensible \
+definemathunstacked definemeasure definemessageconstant definemixedcolumns definemode \
+definemultitonecolor definenamedcolor definenamedcolor definenamespace definenarrower \
+definenote defineornament defineornament defineoutputroutine defineoutputroutinecommand \
+defineoverlay definepage definepagebreak definepagechecker definepagegrid \
+definepagegridarea definepagegridspan definepageinjection definepageinjectionalternative definepageshift \
+definepagestate definepairedbox definepalet definepalet definepapersize \
+definepapersize defineparagraph defineparagraphs defineparallel defineparbuilder \
+defineplacement definepositioning defineprefixset defineprocesscolor defineprocessor \
+defineprofile defineprogram definepushbutton definepushsymbol definereference \
+definereferenceformat defineregister definerenderingwindow defineresetset definescale \
+definescript definesection definesectionblock definesectionlevels defineselector \
+defineseparatorset defineshift definesidebar definesort definesorting \
+definespotcolor definestartstop definestyle definestyleinstance definesubfield \
+definesubformula definesymbol definesynonym definesynonyms definesystemattribute \
+definesystemconstant definesystemvariable definetabletemplate definetabulate definetabulation \
+definetext definetextbackground definetextflow definetooltip definetransparency \
+definetwopasslist definetype definetypeface definetypescriptprefix definetypescriptsynonym \
+definetypesetting definetyping defineunit defineviewerlayer definevspace \
+definevspacing definevspacingamount definextable delimited delimitedtext \
+depthofstring depthonlybox depthspanningtext determineheadnumber determinelistcharacteristics \
+determinenoflines determineregistercharacteristics devanagarinumerals dfrac digits \
+digits dimensiontocount directcolor directcolored directcolored \
+directconvertedcounter directdummyparameter directgetboxllx directgetboxlly directhighlight \
+directlocalframed directluacode directselect directsetbar directsetup \
+directsymbol directvspacing dis disabledirectives disableexperiments \
+disablemode disableoutputstream disableparpositions disableregime disabletrackers \
+displaymath displaymathematics displaymessage distributedhsize dividedsize \
+doadaptleftskip doadaptrightskip doaddfeature doassign doassignempty \
+doboundtext docheckassignment docheckedpagestate docheckedpair documentvariable \
+dodoubleargument dodoubleargumentwithset dodoubleempty dodoubleemptywithset dodoublegroupempty \
+doeassign doexpandedrecurse dogetattribute dogetattributeid dogetcommacommandelement \
+dogobbledoubleempty dogobblesingleempty doif doifMPgraphicelse doifallcommon \
+doifallcommonelse doifalldefinedelse doifallmodes doifallmodeselse doifassignmentelse \
+doifblackelse doifbothsides doifbothsidesoverruled doifboxelse doifbufferelse \
+doifcolor doifcolorelse doifcommandhandler doifcommandhandlerelse doifcommon \
+doifcommonelse doifcontent doifconversiondefinedelse doifconversionnumberelse doifcounter \
+doifcounterelse doifcurrentfonthasfeatureelse doifdefined doifdefinedcounter doifdefinedcounterelse \
+doifdefinedelse doifdimensionelse doifdimenstringelse doifdocumentargument doifdocumentargumentelse \
+doifdocumentfilename doifdocumentfilenameelse doifdrawingblackelse doifelse doifelseMPgraphic \
+doifelseallcommon doifelsealldefined doifelseallmodes doifelseassignment doifelseblack \
+doifelsebox doifelsebuffer doifelsecolor doifelsecommandhandler doifelsecommon \
+doifelseconversiondefined doifelseconversionnumber doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused \
+doifelsecurrentsynonymshown doifelsecurrentsynonymused doifelsedefined doifelsedefinedcounter doifelsedimension \
+doifelsedimenstring doifelsedocumentargument doifelsedocumentfilename doifelsedrawingblack doifelseempty \
+doifelseemptyvalue doifelseemptyvariable doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs \
+doifelsefieldbody doifelsefieldcategory doifelsefigure doifelsefile doifelsefiledefined \
+doifelsefileexists doifelsefirstchar doifelseflagged doifelsefontchar doifelsefontpresent \
+doifelsefontsynonym doifelsehasspace doifelsehelp doifelseincsname doifelseinelement \
+doifelseinputfile doifelseinsertion doifelseinset doifelseinstring doifelseinsymbolset \
+doifelseintoks doifelseintwopassdata doifelseitalic doifelselanguage doifelselayerdata \
+doifelselayoutdefined doifelselayoutsomeline doifelselayouttextline doifelseleapyear doifelselist \
+doifelselocation doifelselocfile doifelsemainfloatbody doifelsemarking doifelsemeaning \
+doifelsemessage doifelsemode doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar \
+doifelsenextoptional doifelsenextoptionalcs doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage \
+doifelsenothing doifelsenumber doifelseobjectfound doifelseobjectreferencefound doifelseoddpage \
+doifelseoddpagefloat doifelseoldercontext doifelseolderversion doifelseoverlapping doifelseoverlay \
+doifelseparallel doifelseparentfile doifelsepath doifelsepathexists doifelsepatterns \
+doifelseposition doifelsepositionaction doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage \
+doifelsepositionsused doifelsereferencefound doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference \
+doifelsesamestring doifelsesetups doifelsesomebackground doifelsesomespace doifelsesomething \
+doifelsesometoks doifelsestringinstring doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined \
+doifelsesymbolset doifelsetext doifelsetextflow doifelsetextflowcollector doifelsetypingfile \
+doifelseundefined doifelseurldefined doifelsevalue doifelsevaluenothing doifelsevariable \
+doifempty doifemptyelse doifemptytoks doifemptyvalue doifemptyvalueelse \
+doifemptyvariable doifemptyvariableelse doifenv doifenvelse doiffastoptionalcheckcselse \
+doiffastoptionalcheckelse doiffieldbodyelse doiffieldcategoryelse doiffigureelse doiffile \
+doiffiledefinedelse doiffileelse doiffileexistselse doiffirstcharelse doifflaggedelse \
+doiffontcharelse doiffontpresentelse doiffontsynonymelse doifhasspaceelse doifhelpelse \
+doifincsnameelse doifinelementelse doifinputfileelse doifinsertionelse doifinset \
+doifinsetelse doifinstring doifinstringelse doifinsymbolset doifinsymbolsetelse \
+doifintokselse doifintwopassdataelse doifitalicelse doiflanguageelse doiflayerdataelse \
+doiflayoutdefinedelse doiflayoutsomelineelse doiflayouttextlineelse doifleapyearelse doiflistelse \
+doiflocationelse doiflocfileelse doifmainfloatbodyelse doifmarkingelse doifmeaningelse \
+doifmessageelse doifmode doifmodeelse doifnextbgroupcselse doifnextbgroupelse \
+doifnextcharelse doifnextoptionalcselse doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse \
+doifnot doifnotallcommon doifnotallmodes doifnotcommandhandler doifnotcommon \
+doifnotcounter doifnotdocumentargument doifnotdocumentfilename doifnotempty doifnotemptyvalue \
+doifnotemptyvariable doifnotenv doifnoteonsamepageelse doifnotescollected doifnotfile \
+doifnotflagged doifnothing doifnothingelse doifnotinset doifnotinsidesplitfloat \
+doifnotinstring doifnotmode doifnotnumber doifnotsamestring doifnotsetups \
+doifnotvalue doifnotvariable doifnumber doifnumberelse doifobjectfoundelse \
+doifobjectreferencefoundelse doifoddpageelse doifoddpagefloatelse doifoldercontextelse doifolderversionelse \
+doifoverlappingelse doifoverlayelse doifparallelelse doifparentfileelse doifpathelse \
+doifpathexistselse doifpatternselse doifposition doifpositionaction doifpositionactionelse \
+doifpositionelse doifpositiononpageelse doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse \
+doifreferencefoundelse doifrightpagefloatelse doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring \
+doifsamestringelse doifsetups doifsetupselse doifsomebackground doifsomebackgroundelse \
+doifsomespaceelse doifsomething doifsomethingelse doifsometoks doifsometokselse \
+doifstringinstringelse doifstructurelisthasnumberelse doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse \
+doiftext doiftextelse doiftextflowcollectorelse doiftextflowelse doiftypingfileelse \
+doifundefined doifundefinedcounter doifundefinedelse doifurldefinedelse doifvalue \
+doifvalueelse doifvaluenothing doifvaluenothingelse doifvaluesomething doifvariable \
+doifvariableelse doindentation dollar doloop doloopoverlist \
+donothing dontconvertfont dontleavehmode dontpermitspacesbetweengroups dopositionaction \
+doprocesslocalsetups doquadrupleargument doquadrupleempty doquadruplegroupempty doquintupleargument \
+doquintupleempty doquintuplegroupempty dorechecknextindentation dorecurse dorecurse \
+dorepeatwithcommand doreplacefeature doresetandafffeature doresetattribute dorotatebox \
+dosetattribute dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace doseventupleargument \
+doseventupleempty dosingleargument dosingleempty dosinglegroupempty dosixtupleargument \
+dosixtupleempty dostepwiserecurse dosubtractfeature dot dotfskip \
+dotoks dotripleargument dotripleargumentwithset dotripleempty dotripleemptywithset \
+dotriplegroupempty doublebar doublebond doublebrace doublebracket \
+doubleparent dowith dowithnextbox dowithnextboxcontent dowithnextboxcontentcs \
+dowithnextboxcs dowithpargument dowithrange dowithwargument dpofstring \
+dummydigit dummyparameter eTeX edefconvertedargument efcmaxheight \
+efcmaxwidth efcminheight efcminwidth efcparameter effect \
+elapsedseconds elapsedtime eleftarrowfill eleftharpoondownfill eleftharpoonupfill \
+eleftrightarrowfill emphasisboldface emphasistypeface emptylines emspace \
+enabledirectives enableexperiments enablemode enableoutputstream enableparpositions \
+enableregime enabletrackers endnote endnote enskip \
+enspace env environment environment envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill ethiopic \
+etwoheadrightarrowfill eunderbarfill eunderbracefill eunderbracketfill eunderparentfill \
+executeifdefined exitloop exitloopnow expandcheckedcsname expanded \
+expandfontsynonym externalfigure externalfigurecollectionmaxheight externalfigurecollectionmaxwidth externalfigurecollectionminheight \
+externalfigurecollectionminwidth externalfigurecollectionparameter fakebox fastdecrement fastincrement \
+fastlocalframed fastscale fastsetup fastsetupwithargument fastsetupwithargumentswapped \
+fastswitchtobodyfont fastsxsy feature feature fence \
+fenced fetchallmarkings fetchallmarks fetchmark fetchmarking \
+fetchonemark fetchonemarking fetchruntinecommand fetchtwomarkings fetchtwomarks \
+field fieldbody fieldstack fifthoffivearguments fifthofsixarguments \
+figurefilename figurefilepath figurefiletype figurefullname figureheight \
+figurenaturalheight figurenaturalwidth figuresymbol figurewidth filename \
+filledhboxb filledhboxc filledhboxg filledhboxk filledhboxm \
+filledhboxr filledhboxy filler fillinline fillinrules \
+fillintext filterfromnext filterfromvalue filterpages filterreference \
+findtwopassdata finishregisterentry firstcharacter firstcounter firstcountervalue \
+firstoffivearguments firstoffourarguments firstofoneargument firstofoneunexpanded firstofsixarguments \
+firstofthreearguments firstofthreeunexpanded firstoftwoarguments firstoftwounexpanded firstrealpage \
+firstrealpagenumber firstsubcountervalue firstsubpage firstsubpagenumber firstuserpage \
+firstuserpagenumber fitfield fitfieldframed fittopbaselinegrid fixedspace \
+fixedspaces flag floatuserdataparameter flushcollector flushlayer \
+flushlocalfloats flushnextbox flushnotes flushoutputstream flushshapebox \
+flushtextflow flushtokens flushtoks fontalternative fontbody \
+fontchar fontcharbyindex fontclass fontclassname fontface \
+fontfeaturelist fontsize fontstyle footnote footnote \
+footnotetext footnotetext forcecharacterstripping forcelocalfloats forgeteverypar \
+forgetparameters forgetragged formula formulanumber foundbox \
+fourthoffivearguments fourthoffourarguments fourthofsixarguments frac framed \
+frameddimension framedparameter framedtext freezedimenmacro freezemeasure \
+frenchspacing from fromlinenote frozenhbox gdefconvertedargument \
+gdefconvertedcommand getMPdrawing getMPlayer getboxllx getboxlly \
+getbuffer getbufferdata getcommacommandsize getcommalistsize getdayoftheweek \
+getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault getdocumentfilename \
+getdummyparameters getemptyparameters geteparameters getexpandedparameters getfiguredimensions \
+getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist getfromtwopassdata \
+getglyphdirect getglyphstyled getgparameters getlasttwopassdata getlocalfloat \
+getlocalfloats getmarking getmessage getnamedglyphdirect getnamedglyphstyled \
+getnamedtwopassdatalist getnaturaldimensions getnoflines getobject getobjectdimensions \
+getpaletsize getparameters getrandomcount getrandomdimen getrandomfloat \
+getrandomnumber getrandomseed getraweparameters getrawgparameters getrawnoflines \
+getrawparameters getrawxparameters getreference getreferenceentry getroundednoflines \
+getsubstring gettwopassdata gettwopassdatalist getuvalue getvalue \
+getvariable getvariabledefault getxparameters globaldisablemode globalenablemode \
+globalletempty globalpopbox globalpopmacro globalpreventmode globalprocesscommalist \
+globalpushbox globalpushmacro globalswapcounts globalswapdimens globalswapmacros \
+globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments gobblefivearguments \
+gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments gobbleoneargument \
+gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments gobblespacetokens \
+gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments gobbletwooptionals \
+gobbleuntil gobbleuntilrelax godown got goto \
+gotobox gotopage grabbufferdata grabbufferdatadirect grabuntil \
+grave graycolor grayvalue greedysplitstring greeknumerals \
+grid groupedcommand gsetboxllx gsetboxlly gujaratinumerals \
+gurmurkhinumerals hairline hairspace halfwaybox handletokens \
+handwritten hangul hanzi hash hat \
+hboxofvbox hboxreference hdofstring head headhbox \
+headlanguage headnumber headnumbercontent headnumberdistance headnumberwidth \
+headreferenceattributes headsym headtext headtextcontent headtexts \
+headtextwidth headvbox headwidth heightanddepthofstring heightofstring \
+heightspanningtext helptext hglue hiddencitation hiddencite \
+hideblocks high highlight highordinalstr hilo \
+himilo hl horizontalgrowingbar horizontalpositionbar hphantom \
+hpos hsizefraction hsmash hsmashbox hsmashed \
+hspace htdpofstring htofstring hyphen hyphenatedcoloredword \
+hyphenatedfile hyphenatedfilename hyphenatedhbox hyphenatedpar hyphenatedurl \
+hyphenatedword ibox ifassignment iff ifinobject \
+ifinoutputstream ifparameters iftrialtypesetting ignoreimplicitspaces ignorevalue \
+immediatesavetwopassdata impliedby implies in includemenu \
+includeversioninfo increment increment increment increment \
+incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue \
+indentation index index infofont infofontbold \
+inframed infull inheritparameter inhibitblank ininner \
+ininneredge ininnermargin initializeboxstack inleft inleftedge \
+inleftmargin inline inlinebuffer inlinedbox inlinemath \
+inlinemathematics inlinemessage inlineordisplaymath inlinerange inmaframed \
+inmargin innerflushshapebox inother inouter inouteredge \
+inoutermargin input input inputfilebarename inputfilename \
+inputfilerealsuffix inputfilesuffix inputgivenfile inright inrightedge \
+inrightmargin insertpages installactionhandler installactivecharacter installanddefineactivecharacter \
+installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler installbasicparameterhandler \
+installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler installdefinitionset \
+installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler \
+installdirectstyleandcolorhandler installframedautocommandhandler installframedcommandhandler installlanguage installlanguage \
+installleftframerenderer installnamespace installoutputroutine installpagearrangement installparameterhandler \
+installparameterhashhandler installparametersethandler installparentinjector installrightframerenderer installrootparameterhandler \
+installsetuphandler installsetuponlycommandhandler installshipoutmethod installsimplecommandhandler installsimpleframedcommandhandler \
+installstyleandcolorhandler installswitchcommandhandler installswitchsetuphandler installtexdirective installtextracker \
+installtopframerenderer installunitsseparator installunitsspace installversioninfo integerrounding \
+interactionbar interactionbuttons interactionmenu intertext invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+item items itemtag itm its \
+jobfilename jobfilesuffix kap keepblocks keeplinestogether \
+keepunwantedspaces kerncharacters koreancirclenumerals koreannumerals koreannumeralsc \
+koreannumeralsp koreanparentnumerals labellanguage labeltext labeltexts \
+language languageCharacters languagecharacters languagecharwidth lastcounter \
+lastcountervalue lastdigit lastnaturalboxdp lastnaturalboxht lastnaturalboxwd \
+lastpredefinedsymbol lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage \
+lastsubpagenumber lasttwodigits lastuserpage lastuserpagenumber lateluacode \
+latin layeredtext layerheight layerwidth lazysavetaggedtwopassdata \
+lazysavetwopassdata lbox left leftaligned leftbottombox \
+leftbox lefthbox leftheadtext leftlabeltext leftline \
+leftmathlabeltext leftorrighthbox leftorrightvbox leftorrightvtop leftskipadaption \
+leftsubguillemot lefttopbox lefttoright lefttorighthbox lefttorightvbox \
+lefttorightvtop letbeundefined letcatcodecommand letcscsname letcsnamecs \
+letcsnamecsname letdummyparameter letempty letgvalue letgvalueempty \
+letgvalurelax letterampersand letterat letterbackslash letterbar \
+letterbgroup letterclosebrace lettercolon letterdollar letterdoublequote \
+letteregroup letterescape letterexclamationmark letterhash letterhat \
+letterleftbrace letterless lettermore letteropenbrace letterpercent \
+letterquestionmark letterrightbrace lettersinglequote letterslash letterspacing \
+lettertilde letterunderscore letvalue letvalueempty letvaluerelax \
+lfence lhbox limitatelines limitatetext limitatetext \
+limtatefirstline line linenote linespanningtext linethickness \
+listcitation listcitation listcitation listcite listcite \
+listcite listlength listnamespaces llap loadanyfile \
+loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile loadcldfileonce \
+loadfontgoodies loadluafile loadluafileonce loadspellchecklist loadtexfile \
+loadtexfileonce loadtypescriptfile localframed localframedwithsettings localhsize \
+localpopbox localpopmacro localpushbox localpushmacro localundefine \
+locatedfilepath locatefilepath locfilename logo lohi \
+lomihi low lowerbox lowercased lowercasestring \
+lowerleftdoubleninequote lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox \
+ltop luaTeX luacode luaconditional luaenvironment \
+luaexpanded luafunction luajitTeX luamajorversion luaminorversion \
+luaparameterset luasetup luaversion m mLeftarrow \
+mLeftrightarrow mRightarrow maframed mainlanguage makecharacteractive \
+makerawcommalist makestrutofbox mapfontsize mar margindata \
+margintext margintitle marginword markcontent marking \
+markinjector mat math mathbf mathbi \
+mathblackboard mathbs mathcommand mathdefault mathematics \
+mathfraktur mathfunction mathit mathlabellanguage mathlabeltext \
+mathlabeltexts mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf maxaligned \
+mbox mcframed measure measured medskip \
+medspace menubutton menubutton mequal message \
+metaTeX mfence mfunction mfunctionlabeltext mhbox \
+mhookleftarrow mhookrightarrow midaligned middle middlealigned \
+middlebox midhbox minimalhbox mirror mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold monobold mononormal month monthlong \
+monthshort mprandomnumber mrel mrightarrow mrightharpoondown \
+mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext mtriplerel \
+mtwoheadleftarrow mtwoheadrightarrow namedheadnumber namedstructureheadlocation namedstructureuservariable \
+namedstructurevariable namedtaggedlabeltexts naturalhbox naturalhpack naturalvbox \
+naturalvcenter naturalvpack naturalvtop naturalwd negatecolorbox \
+negated negthinspace newattribute newcatcodetable newcounter \
+newevery newfrenchspacing newmode newsignal newsystemmode \
+nextbox nextboxdp nextboxht nextboxhtdp nextboxwd \
+nextcounter nextcountervalue nextdepth nextparagraphs nextrealpage \
+nextrealpagenumber nextsubcountervalue nextsubpage nextsubpagenumber nextuserpage \
+nextuserpagenumber nihongo nocap nocitation nocitation \
+nocite nocite nodetostring noffigurepages noflines \
+noflocalfloats noheaderandfooterlines noindentation nonfrenchspacing nonmathematics \
+nop nop normal normalboldface normalframedwithsettings \
+normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight normalizefontline \
+normalizefontwidth normalizetextdepth normalizetextheight normalizetextline normalizetextwidth \
+normaltypeface nospace note notesymbol notopandbottomlines \
+notragged ntimes numberofpoints numbers obeydepth \
+objectdepth objectheight objectmargin objectwidth obox \
+offset offsetbox onedigitrounding operatorlanguage operatortext \
+ordinaldaynumber ordinalstr ornamenttext ornamenttext ornamenttext \
+outputfilename outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy \
+over overbar overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket overlaybutton overlaybutton overlaycolor \
+overlaydepth overlayfigure overlayheight overlaylinecolor overlaylinewidth \
+overlayoffset overlayrollbutton overlaywidth overleftarrow overleftharpoondown \
+overleftharpoonup overleftrightarrow overloaderror overparent overparenttext \
+overparentunderparent overrightarrow overrightharpoondown overrightharpoonup overset \
+overstrike overstrikes overtwoheadleftarrow overtwoheadrightarrow page \
+pagearea pagebreak pagefigure pagegridspanwidth pageinjection \
+pageinjection pagenumber pagereference pagestaterealpage paletsize \
+part pdfTeX pdfactualtext pdfbackendactualtext pdfbackendcurrentresources \
+pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname \
+pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade \
+pdfcolor pdfeTeX percent percentdimen periods \
+periods permitcaretescape permitcircumflexescape permitspacesbetweengroups persiandecimals \
+persiannumerals phantom phantombox pickupgroupedcommand placeattachments \
+placebookmarks placebtxrendering placechemical placecitation placecombinedlist \
+placecomments placecontent placecurrentformulanumber placedbox placefigure \
+placefloat placefloatwithsetups placefootnotes placeformula placeframed \
+placegraphic placeheadnumber placeheadtext placehelp placeindex \
+placeinitial placeintermezzo placelayer placelayeredtext placelegend \
+placelist placelistofabbreviations placelistofchemicals placelistoffigures placelistofgraphics \
+placelistofintermezzi placelistoflogos placelistofpublications placelistofsorts placelistofsynonyms \
+placelistoftables placelocalfootnotes placelocalnotes placement placenamedfloat \
+placenamedformula placenotes placeongrid placeongrid placeontopofeachother \
+placepagenumber placepairedbox placeparallel placerawlist placeregister \
+placerenderingwindow placesidebyside placesubformula placetable popattribute \
+popmacro popmode popsystemmode position positionoverlay \
+positionregionoverlay postponenotes predefinedfont predefinefont predefinesymbol \
+prefixedpagenumber prefixlanguage prefixtext prependetoks prependgvalue \
+prependtocommalist prependtoks prependtoksonce prependvalue presetbtxlabeltext \
+presetfieldsymbols presetheadtext presetlabeltext presetmathlabeltext presetoperatortext \
+presetprefixtext presettaglabeltext presetunittext pretocommalist prevcounter \
+prevcountervalue preventmode prevrealpage prevrealpagenumber prevsubcountervalue \
+prevsubpage prevsubpagenumber prevuserpage prevuserpagenumber procent \
+processMPbuffer processMPfigurefile processaction processallactionsinset processassignlist \
+processassignmentcommand processassignmentlist processbetween processblocks processbodyfontenvironmentlist \
+processcolorcomponents processcommacommand processcommalist processcommalistwithparameters processcontent \
+processfile processfilemany processfilenone processfileonce processfirstactioninset \
+processisolatedchars processisolatedwords processlinetablebuffer processlinetablefile processlist \
+processmonth processranges processseparatedlist processtexbuffer processtokens \
+processuntil processxtablebuffer processyear product product \
+profiledbox profilegivenbox program project project \
+pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped pseudosmallcapped psh \
+purenumber pushattribute pushbutton pushmacro pushmode \
+pushoutputstream pushsystemmode qquad quad quitcommalist \
+quitprevcommalist quittypescriptscanning quotation quote raggedbottom \
+raggedcenter raggedleft raggedright raggedwidecenter raisebox \
+ran randomizetext randomnumber raw rawcounter \
+rawcountervalue rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse \
+rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable \
+rawsubcountervalue rbox readfile readfixfile readjobfile \
+readlocfile readsetfile readsysfile readtexfile readxmlfile \
+realSmallCapped realSmallcapped realpagenumber realsmallcapped recursedepth \
+recurselevel recursestring redoconvertfont ref reference \
+referenceprefix referring registerattachment registerctxluafile registerexternalfigure \
+registerfontclass registerhyphenationexception registerhyphenationpattern registermenubuttons registersort \
+registersynonym registerunit regular relatemarking relateparameterhandlers \
+relaxvalueifundefined remainingcharacters remark removebottomthings removedepth \
+removefromcommalist removelastskip removelastspace removemarkedcontent removepunctuation \
+removesubstring removetoks removeunwantedspaces replacefeature replacefeature \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetandaddfeature \
+resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning resetcharacterspacing \
+resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation resetdirection \
+resetfeature resetflag resetfontcolorsheme resetfontfallback resetfontsolution \
+resethyphenationfeatures resetinjector resetinteractionmenu resetitaliccorrection resetlayer \
+resetlocalfloats resetmarker resetmarking resetmode resetpagenumber \
+resetparallel resetpath resetpenalties resetprofile resetreference \
+resetreplacement resetscript resetsetups resetshownsynonyms resetsubpagenumber \
+resetsymbolset resetsystemmode resettimer resettrackers resettrialtypesetting \
+resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue resetvisualizers \
+reshapebox restartcounter restorebox restorecatcodes restorecounter \
+restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic \
+reuserandomseed revivefeature rfence rhbox right \
+rightaligned rightbottombox rightbox righthbox rightheadtext \
+rightlabeltext rightline rightmathlabeltext rightorleftpageaction rightskipadaption \
+rightsubguillemot righttoleft righttolefthbox righttoleftvbox righttoleftvtop \
+righttopbox rlap rob robustaddtocommalist robustdoifelseinset \
+robustdoifinsetelse robustpretocommalist rollbutton rollbutton roman \
+romannumerals rotate rtop rul ruledhbox \
+ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \
+ruledvpack ruledvtop runMPbuffer safechar sans \
+sansbold sansnormal sansserif savebox savebtxdataset \
+savebuffer savebuffer savecounter savecurrentattributes savenormalmeaning \
+savetaggedtwopassdata savetwopassdata sbox scale screen \
+secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments secondofthreeunexpanded \
+secondoftwoarguments secondoftwounexpanded section seeindex select \
+selectblocks serializecommalist serializedcommalist serif serifbold \
+serifnormal setJSpreamble setMPlayer setMPpositiongraphic setMPpositiongraphicrange \
+setMPtext setMPvariable setMPvariables setbar setbigbodyfont \
+setboxllx setboxlly setbreakpoints setcapstrut setcatcodetable \
+setcharacteralign setcharactercasing setcharactercleaning setcharacterkerning setcharacterspacing \
+setcharacterstripping setcharstrut setcollector setcolormodell setcounter \
+setcounterown setcurrentfontclass setdataset setdefaultpenalties setdigitsmanipulation \
+setdirection setdocumentargument setdocumentargumentdefault setdocumentfilename setdummyparameter \
+setelementexporttag setemeasure setevalue setevariable setevariables \
+setfirstline setflag setfont setfontcolorsheme setfontfeature \
+setfontsolution setfontstrut setgmeasure setgvalue setgvariable \
+setgvariables sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures \
+setinitial setinjector setinteraction setinterfacecommand setinterfaceconstant \
+setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection \
+setlayer setlayerframed setlayerframed setlayertext setlocalhsize \
+setmainbodyfont setmainparbuilder setmarker setmarking setmathstyle \
+setmeasure setmessagetext setmode setnostrut setnote \
+setnote setnotetext setnotetext setobject setoldstyle \
+setpagegrid setpagereference setpagestate setpagestaterealpageno setpenalties \
+setpercentdimen setposition setpositionbox setpositiondata setpositiondataplus \
+setpositiononly setpositionplus setpositionstrut setprofile setrandomseed \
+setreference setreferencedobject setregisterentry setreplacement setrigidcolumnbalance \
+setrigidcolumnhsize setscript setsectionblock setsimplecolumnhsize setsmallbodyfont \
+setsmallcaps setstackbox setstructurepageregister setstrut setsuperiors \
+setsystemmode settabular settaggedmetadata settextcontent settightobject \
+settightreferencedobject settightunreferencedobject settrialtypesetting setuevalue setugvalue \
+setunreferencedobject setup setup setupMPgraphics setupMPinstance \
+setupMPpage setupMPvariables setupTABLE setupTEXpage setupalign \
+setuparranging setupattachment setupbackend setupbackground setupbackgrounds \
+setupbackgrounds setupbar setupblackrules setupblank setupbleeding \
+setupblock setupbodyfont setupbookmark setupbottom setupbottomtexts \
+setupbtx setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist \
+setupbtxregister setupbtxrendering setupbuffer setupbutton setupcapitals \
+setupcaption setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupclipping setupcollector setupcolor setupcolors setupcolumns \
+setupcolumnspan setupcombination setupcombinedlist setupcomment setupcontent \
+setupcounter setupdataset setupdelimitedtext setupdescription setupdirections \
+setupdocument setupeffect setupenumeration setupenv setupexport \
+setupexternalfigure setupexternalsoundtracks setupfield setupfieldbody setupfieldcategory \
+setupfieldcontentframed setupfieldlabelframed setupfields setupfieldtotalframed setupfiller \
+setupfillinlines setupfillinrules setupfirstline setupfittingpage setupfloat \
+setupfloatcaption setupfloatsplitting setupfontexpansion setupfontprotrusion setupfontsolution \
+setupfooter setupfootertexts setupforms setupformula setupframed \
+setupframedcontent setupframedtext setupglobalreferenceprefix setuphead setupheadalternative \
+setupheader setupheadertexts setupheadnumber setupheadtext setuphelp \
+setuphigh setuphighlight setuphyphenation setuphyphenmark setupindentedtext \
+setupindenting setupindex setupinitial setupinsertion setupinteraction \
+setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace \
+setupinterlinespace setupinterlinespace setupinterlinespace setupinterlinespace setupinterlinespace \
+setupitaliccorrection setupitemgroup setupitemgroup setupitems setuplabel \
+setuplabeltext setuplanguage setuplayer setuplayeredtext setuplayout \
+setuplayout setuplayouttext setuplegend setuplinenote setuplinenumbering \
+setuplines setuplinetable setuplinewidth setuplist setuplistalternative \
+setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh \
+setuplowmidhigh setupmakeup setupmarginblock setupmargindata setupmarginframed \
+setupmarginrule setupmarginrules setupmarking setupmathalignment setupmathcases \
+setupmathematics setupmathfence setupmathfraction setupmathframed setupmathlabeltext \
+setupmathmatrix setupmathornament setupmathradical setupmathstackers setupmathstyle \
+setupmixedcolumns setupmodule setupnarrower setupnotation setupnote \
+setupoffset setupoffsetbox setupoperatortext setupoppositeplacing setupoutputroutine \
+setupoutputroutine setuppagechecker setuppagecomment setuppagegrid setuppagegridarea \
+setuppagegridareatext setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection \
+setuppageinjectionalternative setuppagenumber setuppagenumbering setuppageshift setuppagestate \
+setuppagetransitions setuppairedbox setuppalet setuppaper setuppapersize \
+setuppapersize setupparagraph setupparagraphintro setupparagraphnumbering setupparagraphs \
+setupparagraphs setupparallel setupperiods setupplacement setuppositionbar \
+setuppositioning setupprefixtext setupprocessor setupprofile setupprograms \
+setupquotation setupquote setuprealpagenumber setupreferenceformat setupreferenceprefix \
+setupreferencestructureprefix setupreferencing setupregister setupregister setuprenderingwindow \
+setuprotate setups setups setupscale setupscript \
+setupsectionblock setupselector setupshift setupsidebar setupsorting \
+setupspacing setupspellchecking setupstartstop setupstretched setupstruts \
+setupstyle setupsubformula setupsubpagenumber setupsymbolset setupsynonyms \
+setuptables setuptabulate setuptabulation setuptagging setuptaglabeltext \
+setuptext setuptextbackground setuptextflow setuptextrules setuptexttexts \
+setupthinrules setuptolerance setuptooltip setuptop setuptoptexts \
+setuptype setuptyping setupunit setupunittext setupurl \
+setupuserpagenumber setupversion setupviewerlayer setupvspacing setupwhitespace \
+setupwithargument setupwithargumentswapped setupxml setupxtable setuvalue \
+setuxvalue setvalue setvariable setvariables setvisualizerfont \
+setwidthof setxmeasure setxvalue setxvariable setxvariables \
+sfrac shapedhbox shiftdown shiftup showallmakeup \
+showattributes showbodyfont showbodyfontenvironment showboxes showbtxdatasetauthors \
+showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness showbtxdatasetfields showbtxdatasetfields \
+showbtxfields showbtxfields showbtxhashedauthors showbtxtables showchardata \
+showcharratio showcolor showcolorbar showcolorcomponents showcolorgroup \
+showcolorset showcolorstruts showcounter showdirectives showdirsinmargin \
+showedebuginfo showexperiments showfont showfontdata showfontkerns \
+showfontparameters showfontstrip showfontstyle showframe showglyphs \
+showgrid showgridsnapping showhelp showhyphenationtrace showhyphens \
+showinjector showjustification showkerning showlayout showlayoutcomponents \
+showligature showligatures showlogcategories showmakeup showmargins \
+showmessage showminimalbaseline shownextbox showotfcomposition showpalet \
+showparentchain showprint showsetups showsetupsdefinition showstruts \
+showsymbolset showtimer showtokens showtrackers showvalue \
+showvariable showwarning simplealignedbox simplealignedboxplus simplealignedspreadbox \
+simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond \
+sixthofsixarguments slanted slantedbold slicepages slovenianNumerals \
+sloveniannumerals small smallbodyfont smallbold smallbolditalic \
+smallboldslanted smallcappedcharacters smallcappedromannumerals smaller smallitalicbold \
+smallnormal smallskip smallslanted smallslantedbold smalltype \
+smash smashbox smashboxed smashedhbox smashedvbox \
+snaptogrid snaptogrid someheadnumber somekindoftab someline \
+somelocalfloat somenamedheadnumber someplace somewhere space \
+spanishNumerals spanishnumerals speech splitdfrac splitfilename \
+splitfloat splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitstring spreadhbox sqrt stackrel startJScode \
+startJSpreamble startLUA startLUA startMP startMP \
+startMPclip startMPcode startMPdefinitions startMPdrawing startMPdrawing \
+startMPenvironment startMPextensions startMPinclusions startMPinitializations startMPpage \
+startMPpositiongraphic startMPpositionmethod startMPrun startPARSEDXML startPARSEDXML \
+startTABLE startTABLE startTABLEbody startTABLEbody startTABLEfoot \
+startTABLEfoot startTABLEhead startTABLEhead startTABLEnext startTABLEnext \
+startTC startTD startTDs startTEX startTEX \
+startTEXpage startTH startTN startTR startTRs \
+startTX startTY startXML startXML startalign \
+startalignment startallmodes startappendices startarrangedpages startattachment \
+startbackground startbackground startbackmatter startbar startbar \
+startbitmapimage startblockquote startbodymatter startboxedcolumns startbtxlabeltext \
+startbtxrenderingdefinitions startbuffer startbuffer startbut startcases \
+startcatcodetable startcatcodetable startcenteraligned startchapter startcharacteralign \
+startcheckedfences startchemical startcollect startcollecting startcolor \
+startcolor startcolor startcolorintent startcolorset startcolumns \
+startcolumnspan startcom startcombination startcombination startcomment \
+startcomponent startcomponent startcontextcode startcontextdefinitioncode startctxfunction \
+startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdelimited startdelimitedtext \
+startdisplaymath startdmath startdocument starteffect startembeddedxtable \
+startembeddedxtable startendnote startendnote startendofline startenvironment \
+startenvironment startexceptions startexpanded startexpandedcollect startextendedcatcodetable \
+startexternalfigurecollection startfact startfigure startfiguretext startfittingpage \
+startfloatcombination startfloatcombination startfont startfontclass startfontsolution \
+startfootnote startfootnote startformula startformulas startframed \
+startframedcontent startframedtext startfrontmatter startgot startgoto \
+startgraphictext startgridsnapping startgridsnapping starthboxestohbox starthead \
+startheadtext starthelptext starthiding starthighlight starthyphenation \
+startimath startindentation startindentedtext startinteraction startinteractionmenu \
+startinterface startintermezzotext startintertext startitem startitemgroup \
+startitemize startknockout startlabeltext startlayout startleftaligned \
+startlegend startline startlinealignment startlinecorrection startlinenote \
+startlinenumbering startlinenumbering startlines startlinetable startlinetablebody \
+startlinetablecell startlinetablehead startlocalfootnotes startlocalheadsetup startlocallinecorrection \
+startlocalnotes startlocalsetups startlocalsetups startlua startluacode \
+startluaparameterset startluasetups startluasetups startmakeup startmarginblock \
+startmarginrule startmarginrule startmarkedcontent startmathalignment startmathcases \
+startmathlabeltext startmathmatrix startmathmode startmathstyle startmathstyle \
+startmatrices startmatrix startmaxaligned startmdformula startmidaligned \
+startmiddlealigned startmixedcolumns startmode startmodeset startmodule \
+startmodule startmoduletestsection startmpformula startnamedsection startnamedsubformulas \
+startnarrow startnarrow startnarrow startnarrower startnegative \
+startnicelyfilledbox startnointerference startnop startnotallmodes startnotext \
+startnotmode startoperatortext startopposite startoutputstream startoverlay \
+startoverprint startpacked startpagecomment startpagefigure startpagegrid \
+startpagegridspan startpagelayout startpar startpar startparagraph \
+startparagraphs startparagraphscell startparbuilder startpart startpath \
+startplacechemical startplacefigure startplacefloat startplaceformula startplaceformula \
+startplacegraphic startplaceintermezzo startplacelegend startplacepairedbox startplacetable \
+startpositioning startpositionoverlay startpositive startpostponing startprefixtext \
+startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand startprocesscommalist startproduct \
+startproduct startproject startproject startprotect startprotectedcolors \
+startpsh startpublication startpunctuation startquotation startquote \
+startrandomized startrandomseed startraw startrawsetups startrawsetups \
+startreadingfile startreferenceprefix startreferenceprefix startregime startregister \
+startreusableMPgraphic startrightaligned startrob startrul startscript \
+startsdformula startsection startsectionblock startsectionblockenvironment startsectionlevel \
+startsetups startsetups startshapebox startshift startsidebar \
+startsimplecolumns startspecialitem startspecialitem startspecialitem startspeech \
+startspformula startspread startstartstop startstaticMPfigure startstaticMPgraphic \
+startstrictinspectnextcharacter startstructurepageregister startstrut startstyle startstyle \
+startsubformulas startsubject startsubsection startsubsentence startsubstack \
+startsubsubject startsubsubsection startsubsubsubject startsubsubsubsection startsubsubsubsubject \
+startsubsubsubsubsection startsubsubsubsubsubject startsymbolset starttable starttable \
+starttablehead starttables starttables starttabletail starttabletext \
+starttabulate starttabulatehead starttabulatetail starttagged starttaglabeltext \
+starttexcode starttexcode starttexdefinition starttext starttext \
+starttextbackground starttextbackgroundmanual starttextcolor starttextcolorintent starttextflow \
+starttextrule starttitle starttokens starttxt starttypescript \
+starttypescriptcollection starttyping starttyping startuniqueMPgraphic startuniqueMPpagegraphic \
+startunittext startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter \
+startusingbtxspecification startvboxtohbox startvboxtohboxseparator startviewerlayer startxcell \
+startxcellgroup startxgroup startxmldisplayverbatim startxmlinlineverbatim startxmlraw \
+startxmlsetups startxmlsetups startxrow startxrowgroup startxtable \
+startxtable startxtablebody startxtablebody startxtablefoot startxtablefoot \
+startxtablehead startxtablehead startxtablenext startxtablenext stopJScode \
+stopJSpreamble stopLUA stopLUA stopMP stopMP \
+stopMPclip stopMPcode stopMPdefinitions stopMPdrawing stopMPdrawing \
+stopMPenvironment stopMPextensions stopMPinclusions stopMPinitializations stopMPpage \
+stopMPpositiongraphic stopMPpositionmethod stopMPrun stopPARSEDXML stopPARSEDXML \
+stopTABLE stopTABLE stopTABLEbody stopTABLEbody stopTABLEfoot \
+stopTABLEfoot stopTABLEhead stopTABLEhead stopTABLEnext stopTABLEnext \
+stopTC stopTD stopTDs stopTEX stopTEX \
+stopTEXpage stopTH stopTN stopTR stopTRs \
+stopTX stopTY stopXML stopXML stopalign \
+stopalignment stopallmodes stopappendices stoparrangedpages stopattachment \
+stopbackground stopbackground stopbackmatter stopbar stopbar \
+stopbitmapimage stopblockquote stopbodymatter stopboxedcolumns stopbtxlabeltext \
+stopbtxrenderingdefinitions stopbuffer stopbuffer stopbut stopcases \
+stopcatcodetable stopcatcodetable stopcenteraligned stopchapter stopcharacteralign \
+stopcheckedfences stopchemical stopcollect stopcollecting stopcolor \
+stopcolor stopcolor stopcolorintent stopcolorset stopcolumns \
+stopcolumnspan stopcom stopcombination stopcombination stopcomment \
+stopcomponent stopcomponent stopcontextcode stopcontextdefinitioncode stopctxfunction \
+stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdelimited stopdelimitedtext \
+stopdisplaymath stopdmath stopdocument stopeffect stopembeddedxtable \
+stopembeddedxtable stopendnote stopendnote stopendofline stopenvironment \
+stopenvironment stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable \
+stopexternalfigurecollection stopfact stopfigure stopfiguretext stopfittingpage \
+stopfloatcombination stopfloatcombination stopfont stopfontclass stopfontsolution \
+stopfootnote stopfootnote stopformula stopformulas stopframed \
+stopframedcontent stopframedtext stopfrontmatter stopgot stopgoto \
+stopgraphictext stopgridsnapping stopgridsnapping stophboxestohbox stophead \
+stopheadtext stophelptext stophiding stophighlight stophyphenation \
+stopimath stopindentation stopindentedtext stopinteraction stopinteractionmenu \
+stopinterface stopintermezzotext stopintertext stopitem stopitemgroup \
+stopitemize stopknockout stoplabeltext stoplayout stopleftaligned \
+stoplegend stopline stoplinealignment stoplinecorrection stoplinenote \
+stoplinenumbering stoplinenumbering stoplines stoplinetable stoplinetablebody \
+stoplinetablecell stoplinetablehead stoplocalfootnotes stoplocalheadsetup stoplocallinecorrection \
+stoplocalnotes stoplocalsetups stoplocalsetups stoplua stopluacode \
+stopluaparameterset stopluasetups stopluasetups stopmakeup stopmarginblock \
+stopmarginrule stopmarginrule stopmarkedcontent stopmathalignment stopmathcases \
+stopmathlabeltext stopmathmatrix stopmathmode stopmathstyle stopmathstyle \
+stopmatrices stopmatrix stopmaxaligned stopmdformula stopmidaligned \
+stopmiddlealigned stopmixedcolumns stopmode stopmodeset stopmodule \
+stopmodule stopmoduletestsection stopmpformula stopnamedsection stopnamedsubformulas \
+stopnarrow stopnarrow stopnarrow stopnarrower stopnegative \
+stopnicelyfilledbox stopnointerference stopnop stopnotallmodes stopnotext \
+stopnotmode stopoperatortext stopopposite stopoutputstream stopoverlay \
+stopoverprint stoppacked stoppagecomment stoppagefigure stoppagegrid \
+stoppagegridspan stoppagelayout stoppar stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \
+stopplacechemical stopplacefigure stopplacefloat stopplaceformula stopplaceformula \
+stopplacegraphic stopplaceintermezzo stopplacelegend stopplacepairedbox stopplacetable \
+stoppositioning stoppositionoverlay stoppositive stoppostponing stopprefixtext \
+stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopproduct \
+stopproduct stopproject stopproject stopprotect stopprotectedcolors \
+stoppsh stoppublication stoppunctuation stopquotation stopquote \
+stoprandomized stoprandomseed stopraw stoprawsetups stoprawsetups \
+stopreadingfile stopreferenceprefix stopreferenceprefix stopregime stopregister \
+stopreusableMPgraphic stoprightaligned stoprob stoprul stopscript \
+stopsdformula stopsection stopsectionblock stopsectionblockenvironment stopsectionlevel \
+stopsetups stopsetups stopshapebox stopshift stopsidebar \
+stopsimplecolumns stopspecialitem stopspecialitem stopspecialitem stopspeech \
+stopspformula stopspread stopstartstop stopstaticMPfigure stopstaticMPgraphic \
+stopstrictinspectnextcharacter stopstructurepageregister stopstrut stopstyle stopstyle \
+stopsubformulas stopsubject stopsubsection stopsubsentence stopsubstack \
+stopsubsubject stopsubsubsection stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject \
+stopsubsubsubsubsection stopsubsubsubsubsubject stopsymbolset stoptable stoptable \
+stoptablehead stoptables stoptables stoptabletail stoptabletext \
+stoptabulate stoptabulatehead stoptabulatetail stoptagged stoptaglabeltext \
+stoptexcode stoptexcode stoptexdefinition stoptext stoptext \
+stoptextbackground stoptextbackgroundmanual stoptextcolor stoptextcolorintent stoptextflow \
+stoptextrule stoptitle stoptokens stoptxt stoptypescript \
+stoptypescriptcollection stoptyping stoptyping stopuniqueMPgraphic stopuniqueMPpagegraphic \
+stopunittext stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter \
+stopusingbtxspecification stopvboxtohbox stopvboxtohboxseparator stopviewerlayer stopxcell \
+stopxcellgroup stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw \
+stopxmlsetups stopxmlsetups stopxrow stopxrowgroup stopxtable \
+stopxtable stopxtablebody stopxtablebody stopxtablefoot stopxtablefoot \
+stopxtablehead stopxtablehead stopxtablenext stopxtablenext stretched \
+strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter strippedcsname strippedcsname \
+stripspaces structurelistuservariable structurenumber structuretitle structureuservariable \
+structurevariable strut strutdp strutht struthtdp \
+struttedbox strutwd style style styleinstance \
+sub subject subpagenumber subsection subsentence \
+substituteincommalist subsubject subsubsection subsubsubject subsubsubsection \
+subsubsubsubject subsubsubsubsection subsubsubsubsubject subtractfeature subtractfeature \
+swapcounts swapdimens swapface swapmacros swaptypeface \
+switchstyleonly switchstyleonly switchtobodyfont switchtocolor switchtointerlinespace \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+sym symbol symbol symbolreference synchronizeblank \
+synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace \
+systemlog systemlogfirst systemloglast systemsetups tLeftarrow \
+tLeftrightarrow tRightarrow tabulateautoline tabulateautorule tabulateline \
+tabulaterule taggedctxcommand taggedlabeltexts taglabellanguage taglabeltext \
+tbinom tbox tequal testandsplitstring testcolumn \
+testfeature testfeatureonce testpage testpageonly testpagesync \
+testtokens tex texdefinition texsetup textcitation \
+textcitation textcitation textcite textcite textcite \
+textcontrolspace textflowcollector textmath textminus textormathchar \
+textplus textreference textrule textvisiblespace tfrac \
+thai thainumerals thefirstcharacter thenormalizedbodyfontsize theremainingcharacters \
+thickspace thinrule thinrules thinspace thinspace \
+thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded \
+thookleftarrow thookrightarrow threedigitrounding tibetannumerals tightlayer \
+tilde tinyfont title tlap tleftarrow \
+tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto \
+tochar tolinenote tooltip tooltip topbox \
+topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \
+tracedfontname traceoutputroutines tracepositions translate transparencycomponents \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttraggedright \
+ttriplerel ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx \
+txt txt txx typ typ \
+type type typebuffer typedefinedbuffer typeface \
+typefile typescriptone typescriptprefix typescriptthree typescripttwo \
+typesetbuffer typesetfile uconvertnumber uedcatcodecommand undefinevalue \
+undepthed underbar underbar underbars underbartext \
+underbrace underbracetext underbracket underbrackettext underdash \
+underdashes underdot underdots underleftarrow underleftharpoondown \
+underleftharpoonup underleftrightarrow underparent underparenttext underrandom \
+underrandoms underrightarrow underrightharpoondown underrightharpoonup underset \
+understrike understrikes undertwoheadleftarrow undertwoheadrightarrow undoassign \
+unframed unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic \
+unit unitlanguage unittext unknown unprotected \
+unregisterhyphenationpattern unspaceafter unspaceargument unspaced unspacestring \
+untexargument untexcommand uppercased uppercasestring upperleftdoubleninequote \
+upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote \
+upperrightsingleninequote upperrightsinglesixquote url useJSscripts useMPenvironmentbuffer \
+useMPgraphic useMPlibrary useMPrun useMPvariables useURL \
+usealignparameter useblocks usebodyfont usebodyfontparameter usebtxdataset \
+usebtxdefinitions usecolors usecomponent usedirectory usedummycolorparameter \
+usedummystyleandcolor usedummystyleparameter useenvironment useexternaldocument useexternalfigure \
+useexternalrendering useexternalsoundtrack usefigurebase usefile usegridparameter \
+useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter uselanguageparameter \
+useluamodule usemathstyleparameter usemodule useproduct useprofileparameter \
+useproject usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure \
+usesubpath usesymbols usetexmodule usetypescript usetypescriptfile \
+useurl usezipfile utfchar utflower utfupper \
+utilityregisterlength vboxreference vec verbatim verbatimstring \
+verbosenumber version verticalgrowingbar verticalpositionbar veryraggedcenter \
+veryraggedleft veryraggedright vglue viewerlayer vl \
+vphantom vpos vsmash vsmashbox vsmashed \
+vspace vspacing wdofstring weekday widthofstring \
+widthspanningtext withoutpt word wordright words \
+wordtonumber writebetweenlist writedatatolist writestatus writetolist \
+xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument xequal \
+xfrac xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown \
+xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto xmladdindex \
+xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup \
+xmlapplyselectors xmlatt xmlattdef xmlattribute xmlattributedef \
+xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef \
+xmlchecknamespace xmlcommand xmlconcat xmlconcatrange xmlcontext \
+xmlcount xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore \
+xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty \
+xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext \
+xmldoifselfempty xmldoiftext xmlelement xmlfilter xmlfirst \
+xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure \
+xmlflushspacewise xmlflushtext xmlinclude xmlinclusion xmlinclusions \
+xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective xmllast \
+xmllastatt xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives \
+xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \
+xmlnamespace xmlnonspace xmlpath xmlpos xmlposition \
+xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata \
+xmlprocessfile xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups \
+xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname xmlremapnamespace \
+xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups \
+xmlsave xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup \
+xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \
+xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \
+xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \
+xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \
+xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \
+xxfrac xypos
keywordclass.context.fr=\
-CAP Cap Caps Caractere \
-Caracteres Character Characters Chiffresromains JOURSEMAINE \
-MOIS MONTH MOT MOTS Mot \
-Mots Numeros Romannumerals WEEKDAY WORD \
-WORDS Word Words a about \
-adaptedisposition adaptlayout affectenumero affectevariabletexte ajustechamp \
-alaligne alapage aligneadroite aligneagauche aligneaumilieu \
-appendix arg arriereplan at atleftmargin \
-atpage atrightmargin background baha barrecouleur \
-barreinteraction barresynchronisation bas blackrule blackrules \
-blank bookmark bouton boutonmenu boutonsinteraction \
-but button bypassblocks cacheblocs cap \
-caractere caracteres champ changepolicebrute changepolicecorps \
-chapter character characters chem chiffresromains \
-citation citer clip clonechamp clonefield \
-colonne color column comment commentaire \
-comparecolorgroup comparegroupecouleur comparepalet comparepalette completecombinedlist \
-completelistoffloats completelistofsorts completelistofsynonyms completenumeropage completeregister \
-completeregistre composant composeenalinea concernant convertitnumero \
-convertnumber copitchamp copyfield correctwhitespace corrigeespaceblanc \
-couleur couleurgrise coupledocument coupledregister couplemarking \
-couplemarquage couplepage couplepaper couplepapier coupleregister \
-coupleregistre crlf currentdate currentheadnumber cutspace \
-dactylographier dans dansautremarge dansborddroit dansbordgauche \
-dansdroite dansgauche dansmarge dansmargedroite dansmargegauche \
-date datecourante daterecommandation de decouplemarking \
-decouplemarquage decrementenumero define defineblank defineblock \
-definebodyfont definebodyfontDEF definebodyfontREF definebodyfontenvironment definebuffer \
-definecolor definecolorgroup definecombination definecombinedlist defineconversion \
-definedescription definedfont defineenumeration definefield definefieldstack \
-definefiguresymbol definefloat definefont definefontfeature definefonthandling \
-definefontsynonym defineframed defineframedtext definehead defineindentedtext \
-defineinteractionmenu defineitemgroup definelabel definelist definelogo \
-definemakeup definemarking definemathalignment defineoutput defineoverlay \
-definepalet definepapersize defineparagraphs defineplacement defineprofile \
-defineprogram definereference definereferenceformat definereferencelist defineregister \
-definesection definesectionblock definesorting definestartstop definesubfield \
-definesymbol definesynonyms definetabletemplate definetabulate definetext \
-definetype definetypeface definetyping defineversion definicaractere \
-definit definitaccent definitbloc definitblocsection definitbuffer \
-definitcalque definitchamp definitchampprincipal definitcommande definitconversion \
-definitcouleur definitdactylo definitdansmarge definitdemarrestoppe definitdescription \
-definitdisposition definitenumeration definitenvironnementpolicecorps definitetiquette definitflottant \
-definitformatreference definitgroupecouleur definithbox definitjeucolonne definitliste \
-definitlisteimbriquee definitlistereference definitlogo definitmakeup definitmarquage \
-definitmenuinteraction definitnotepdp definitpalette definitparagraphes definitpilechamp \
-definitpolice definitpolicebrute definitpolicecorps definitpositiontexte definitprofil \
-definitprogramme definitreference definitregistre definitregle definitrevetement \
-definitsautdecolonne definitsautdepage definitsection definitsortie definitsouschamp \
-definitstyle definitstylepolice definitsymbole definitsymbolefigure definitsynonymepolice \
-definitsynonymes definittabulation definittaillepapier definittete definittexte \
-definittrametableau definittri definittype definitvariabletexte definitversion \
-definitvide demarrealignement demarrearriereplan demarreblocmarge demarrecitation \
-demarreciter demarrecodage demarrecolonnes demarrecombinaison demarrecompoetroite \
-demarrecomposant demarrecorrectionligne demarrecouleur demarredegroupe demarredocument \
-demarreenvironement demarrefigure demarreglobal demarregroupe demarrejeucolonne \
-demarrejeusymboles demarreligne demarreligneregleetexte demarrelignes demarrelocal \
-demarremakeup demarremargereglee demarrenotespdplocales demarrenumerotationligne demarreopposition \
-demarrepositionnement demarreproduit demarreprofil demarreprojet demarreraster \
-demarrerevetement demarresynchronisation demarretableau demarretableaux demarretexte \
-demarreversion demarrevuedensemble deplaceformule deplacesurgrille description \
-determinecaracteristiqueliste determinecaracteristiquesregistre determineheadnumber determinelistcharacteristics determinenumerotete \
-dimension disableinteractionmenu distancebord distanceborddroit distancebordgauche \
-distanceentete distanceinf distancemarge distancemargedroite distancemargegauche \
-distancepdp distancesup domicile echelle ecran \
-ecritdansliste ecritdanslistereference ecritentreliste ecritregistre el \
-element elements emptylines enumeration environement \
-espace espaceblanc espacefixe espaceinf espacesfixes \
-espacesup etiquette etiquettes etire externalfigure \
-fait faitreference fichierdactylo field fieldstack \
-figureexterne fillinfield fillinline fillinrules fillintext \
-fitfield fixedspaces followprofile followprofileversion followversion \
-footnote footnotetext forceblocks forceblocs fraction \
-framed framedtext from gardeblocs getbuffer \
-getmarking getnumber godown goto gotobox \
-graycolor grid grille groupe hairline \
-haut hauteureditionpapier hauteurentete hauteurinf hauteurliste \
-hauteurmakeup hauteurpapier hauteurpdp hauteursup hauteurtexte \
-head headnumber headsym headtext hideblocks \
-high hl immediatebetweenlist immediatetolist in \
-inconnu incrementenumero indentation indenting inframed \
-infull inhibemenuinteraction ininner inleft inline \
-inmargin inmframed inneredgedistance inneredgewidth innermargindistance \
-innermarginwidth inothermargin inouter inright installelangue \
-installlanguage interactionbar interactionbuttons item items \
-its joursemaine keepblocks labeling labels \
-labeltext labeltexte language langue langueprincipale \
-largeurbord largeurborddroit largeurbordgauche largeureditionpapier largeurligne \
-largeurliste largeurmakeup largeurmarge largeurmargedroite largeurmargegauche \
-largeurpapier largeurtexte leftaligned leg ligneh \
-lignenoire ligneregleetexte lignesnoires listesymbole listsymbol \
-llongueurliste loadsorts loadsynonyms logchamp logfields \
-lohi low mainlanguage mapfontsize mar \
-margereglee marginrule margintext marking markversion \
-marquage marquageversion marquepage mathematics mathematique \
-mediaeval menuinteraction mframed midaligned mirror \
-mois month montrecadre montrechamps montrecouleur \
-montredisposition montreedition montreenvironnementpolicecorps montrefiguresexternes montregrille \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Cap Caps Caractere Caracteres \
+Chiffresromains ConTeXt Context ConvertConstantAfter ConvertToConstant \
+ETEX EveryLine EveryPar GetPar GotoPar \
+Greeknumerals INRSTEX JOURSEMAINE LAMSTEX LATEX \
+LUAJITTEX LUATEX LaTeX LamSTeX LuaTeX \
+LuajitTeX METAFONT METAFUN METAPOST MKII \
+MKIV MKIX MKVI MKXI MOIS \
+MONTHLONG MONTHSHORT MOT MOTS MPII \
+MPIV MPVI MPanchor MPbetex MPc \
+MPcode MPcolor MPcoloronly MPcolumn MPd \
+MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape MPgetposboxes \
+MPh MPinclusions MPleftskip MPll MPlr \
+MPls MPmenubuttons MPn MPoptions MPoverlayanchor \
+MPp MPpage MPpardata MPplus MPpos \
+MPpositiongraphic MPposset MPr MPrawvar MPregion \
+MPrest MPrightskip MPrs MPstring MPtext \
+MPtransparency MPul MPur MPv MPvar \
+MPvariable MPvv MPw MPx MPxy \
+MPxywhd MPy MetaFont MetaFun MetaPost \
+Mot Mots NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight \
+NormalizeTextWidth Numeros PDFETEX PDFTEX PDFcolor \
+PICTEX PPCHTEX PPCHTeX PRAGMA PiCTeX \
+PointsToBigPoints PointsToReal PointsToWholeBigPoints PtToCm ReadFile \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Smallcapped TABLE TEX \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VerboseNumber \
+WidthSpanningText XETEX XeTeX a abbreviation \
+abjadnaivenumerals abjadnodotnumerals abjadnumerals activatespacehandler acute \
+adaptcollector adaptedisposition adaptpapersize addfeature addfeature \
+addtoJSpreamble addtocommalist addvalue aftersplitstring aftertestandsplitstring \
+ajustechamp alaligne alapage alignbottom aligneadroite \
+aligneagauche aligneaumilieu aligned alignedbox alignedline \
+alignmentcharacter allinputpaths alphabeticnumerals alwayscitation alwayscitation \
+alwayscitation alwayscite alwayscite alwayscite ampersand \
+anchor appendetoks appendgvalue appendtocommalist appendtoks \
+appendtoksonce appendvalue apply applyalternativestyle applyprocessor \
+applytocharacters applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced applytosplitstringline \
+applytosplitstringlinespaced applytosplitstringword applytosplitstringwordspaced applytowords arabicdecimals \
+arabicexnumerals arabicnumerals arg arriereplan asciistr \
+assignalfadimension assigndimen assigndimension assignifempty assigntranslation \
+assignvalue assignwidth assumelongusagecs astype atleftmargin \
+atrightmargin attachment autocap autodirhbox autodirvbox \
+autodirvtop autoinsertnextspace automathematics autosetups availablehsize \
+averagecharwidth backgroundimage backgroundimagefill backgroundline baha \
+bar barrecouleur barreinteraction bas basegrid \
+baselinebottom baselineleftbox baselinemiddlebox baselinerightbox bbox \
+beforesplitstring beforetestandsplitstring big bigbodyfont bigg \
+bigger biggl biggm biggr bigl \
+bigm bigr bigskip binom bitmapimage \
+blap bleed bleedheight bleedwidth blockquote \
+bodyfontenvironmentlist bodyfontsize bold boldface bolditalic \
+boldslanted booleanmodevalue bottombox bottomleftbox bottomrightbox \
+bouton boutonmenu boutonmenu boutonsinteraction boxcursor \
+boxmarker boxofsize boxreference bpos breve \
+bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation btxalwayscitation \
+btxalwayscitation btxauthorfield btxdetail btxdirect btxdoif \
+btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked \
+btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse btxdoifuservariableelse \
+btxexpandedjournal btxfield btxfieldname btxfieldtype btxfirstofrange \
+btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort btxflushauthorname \
+btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname btxfoundtype \
+btxhybridcite btxhybridcite btxhybridcite btxhybridcite btxlabellanguage \
+btxlabeltext btxlistcitation btxlistcitation btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation btxtextcitation btxtextcitation buildmathaccent \
+buildtextaccent buildtextbottomcomma buildtextbottomdot buildtextcedilla buildtextgrave \
+buildtextmacron buildtextognek but but cacheblocs \
+calligraphic camel cap caractere caracteres \
+catcodetablename cbox centeraligned centerbox centeredbox \
+centeredlastline centerednextbox centerline cfrac champ \
+changepolicecorps chapter chardescription charwidthlanguage check \
+checkcharacteralign checkedchar checkedfiller checkedstrippedcsname checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata chem chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chiffresromains chineseallnumerals chinesecapnumerals chinesenumerals citation \
+citation citation citation citation cite \
+cite cite cite citer clap \
+classfont cldcommand cldcontext cldloadfile cldprocessfile \
+cleftarrow clip clonechamp collect collectedtext \
+collectexpanded colonne colorcomponents colored colored \
+columnbreak com combinepages commalistelement commalistsentence \
+commalistsize comment commentaire comparedimension comparedimensioneps \
+comparegroupecouleur comparepalette completebtxrendering completecontent completeindex \
+completelist completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics \
+completelistofintermezzi completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms \
+completelistoftables completenumeropage completeregistre complexorsimple complexorsimple \
+complexorsimpleempty complexorsimpleempty composant composant composedcollector \
+composedlayer compresult concernant constantdimen constantdimenargument \
+constantemptyargument constantnumber constantnumberargument contentreference continuednumber \
+continueifinputfile convertargument convertcommand convertedcounter converteddimen \
+convertedsubcounter convertitnumero convertmonth convertvalue convertvboxtohbox \
+copitchamp copybtxlabeltext copyheadtext copylabeltext copymathlabeltext \
+copyoperatortext copypages copyparameters copyposition copyprefixtext \
+copytaglabeltext copyunittext corrigeespaceblanc couleur couleurgrise \
+countersubs counttoken counttokens cramped crampedclap \
+crampedllap crampedrlap crightarrow crightoverleftarrow ctop \
+ctxcommand ctxdirectcommand ctxdirectlua ctxfunction ctxlatecommand \
+ctxlatelua ctxloadluafile ctxlua ctxluabuffer ctxluacode \
+ctxreport ctxsprint currentassignmentlistkey currentassignmentlistvalue currentbtxuservariable \
+currentcommalistitem currentcomponent currentenvironment currentfeaturetest currentinterface \
+currentlanguage currentlistentrydestinationattribute currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber \
+currentlistentryreferenceattribute currentlistentrytitle currentlistentrytitlerendered currentlistsymbol currentmainlanguage \
+currentmessagetext currentmoduleparameter currentoutputstream currentproduct currentproject \
+currentregime currentregisterpageuserdata currentresponses currenttime currentvalue \
+currentxtablecolumn currentxtablerow d dactylographier dactylographier \
+dans dansborddroit dansbordgauche dansdroite dansgauche \
+dansmarge dansmargedroite dansmargegauche datasetvariable date \
+datecourante dayoftheweek dayspermonth dbinom ddot \
+de decrement decrement decrementcounter decrementedcounter \
+decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface defaultobjectpage \
+defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand defconvertedvalue \
+defineMPinstance defineTABLEsetup defineactivecharacter definealternativestyle defineanchor \
+defineattachment defineattribute definebackground definebar definebodyfontswitch \
+definebreakpoint definebreakpoints definebtx definebtxdataset definebtxregister \
+definebtxrendering definebutton definecapitals definecharacterkerning definecharacterspacing \
+definechemical definechemicals definechemicalsymbol definecollector definecombination \
+definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty \
+defineconversionset definecounter definedataset definedelimitedtext definedfont \
+defineeffect defineenumerations defineexpandable defineexternalfigure definefallbackfamily \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamily definefontfamilypreset \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineframed defineframedcontent defineframedtext \
+definefrozenfont defineglobalcolor defineglobalcolor definegraphictypesynonym definegridsnapping \
+defineheadalternative definehelp definehigh definehighlight definehspace \
+definehypenationfeatures defineindentedtext defineindenting defineinitial defineinsertion \
+defineinteraction defineinteractionbar defineinterfaceconstant defineinterfaceelement defineinterfacevariable \
+defineinterlinespace defineinterlinespace defineintermediatecolor defineitemgroup defineitems \
+definelabelclass definelayerpreset definelayerpreset definelinenote definelinenumbering \
+definelines definelistalternative definelistextra definelow definelowhigh \
+definelowmidhigh definemarginblock definemargindata definemarker definemathaccent \
+definemathalignment definemathcases definemathcommand definemathdoubleextensible definemathematics \
+definemathextensible definemathfence definemathfraction definemathframed definemathmatrix \
+definemathornament definemathoverextensible definemathovertextextensible definemathradical definemathstackers \
+definemathstyle definemathtriplet definemathunderextensible definemathundertextextensible definemathunstacked \
+definemeasure definemessageconstant definemixedcolumns definemode definemultitonecolor \
+definenamedcolor definenamedcolor definenamespace definenarrower definenote \
+defineornament defineornament defineoutputroutine defineoutputroutinecommand definepage \
+definepagechecker definepagegrid definepagegridarea definepagegridspan definepageinjection \
+definepageinjectionalternative definepageshift definepagestate definepairedbox defineparagraph \
+defineparallel defineparbuilder defineplacement definepositioning defineprefixset \
+defineprocesscolor defineprocessor definepushbutton definepushsymbol definerenderingwindow \
+defineresetset definescale definescript definesectionlevels defineselector \
+defineseparatorset defineshift definesidebar definesort definespotcolor \
+definestyleinstance definesubformula definesynonym definesystemattribute definesystemconstant \
+definesystemvariable definetabulation definetextbackground definetextflow definetooltip \
+definetransparency definetwopasslist definetypeface definetypescriptprefix definetypescriptsynonym \
+definetypesetting defineunit defineviewerlayer definevspace definevspacing \
+definevspacingamount definextable definicaractere definit definitaccent \
+definitbloc definitblocsection definitbuffer definitcalque definitchamp \
+definitcommande definitconversion definitconversion definitcouleur definitcouleur \
+definitdactylo definitdemarrestoppe definitdescription definitdisposition definitenvironnementpolicecorps \
+definitetiquette definitflottant definitflottant definitformatreference definitgroupecouleur \
+definithbox definitliste definitlisteimbriquee definitmakeup definitmarquage \
+definitmenuinteraction definitpalette definitpalette definitparagraphes definitpilechamp \
+definitpolice definitpolice definitpolicecorps definitpolicecorps definitprofil \
+definitprogramme definitreference definitregistre definitrevetement definitsautdecolonne \
+definitsautdepage definitsection definitsouschamp definitstyle definitstylepolice \
+definitsymbole definitsymbolefigure definitsynonymepolice definitsynonymes definittabulation \
+definittaillepapier definittaillepapier definittete definittexte definittrametableau \
+definittri definittype definitvide delimited delimitedtext \
+demarreJScode demarreJSpreamble demarreLUA demarreLUA demarreMP \
+demarreMP demarreMPclip demarreMPcode demarreMPdefinitions demarreMPdrawing \
+demarreMPdrawing demarreMPenvironment demarreMPextensions demarreMPinclusions demarreMPinitializations \
+demarreMPpage demarreMPpositiongraphic demarreMPpositionmethod demarreMPrun demarrePARSEDXML \
+demarrePARSEDXML demarreTABLE demarreTABLE demarreTABLEbody demarreTABLEbody \
+demarreTABLEfoot demarreTABLEfoot demarreTABLEhead demarreTABLEhead demarreTABLEnext \
+demarreTABLEnext demarreTC demarreTD demarreTDs demarreTEX \
+demarreTEX demarreTEXpage demarreTH demarreTN demarreTR \
+demarreTRs demarreTX demarreTY demarreXML demarreXML \
+demarrealign demarrealigneadroite demarrealigneagauche demarrealigneaumilieu demarrealignment \
+demarreallmodes demarreappendices demarrearrangedpages demarrearriereplan demarrearriereplan \
+demarreattachment demarrebackmatter demarrebar demarrebar demarrebitmapimage \
+demarreblockquote demarrebodymatter demarreboxedcolumns demarrebtxlabeltext demarrebtxrenderingdefinitions \
+demarrebuffer demarrebuffer demarrebut demarrecases demarrecatcodetable \
+demarrecatcodetable demarrecenteraligned demarrechapter demarrecharacteralign demarrecheckedfences \
+demarrechemical demarrecitation demarreciter demarreciter demarrecollect \
+demarrecollecting demarrecolorintent demarrecolorset demarrecolumns demarrecolumnspan \
+demarrecom demarrecombination demarrecombination demarrecomment demarrecomposant \
+demarrecomposant demarrecontextcode demarrecontextdefinitioncode demarrecouleur demarrecouleur \
+demarrecouleur demarrectxfunction demarrectxfunctiondefinition demarrecurrentcolor demarrecurrentlistentrywrapper \
+demarredelimited demarredelimitedtext demarredisplaymath demarredmath demarredocument \
+demarreeffect demarreelement demarreembeddedxtable demarreembeddedxtable demarreendnote \
+demarreendnote demarreendofline demarreenvironement demarreenvironement demarreexceptions \
+demarreexpanded demarreexpandedcollect demarreextendedcatcodetable demarreexternalfigurecollection demarrefait \
+demarrefigure demarrefiguretext demarrefittingpage demarrefloatcombination demarrefloatcombination \
+demarrefont demarrefontclass demarrefontsolution demarreformula demarreformulas \
+demarreframed demarreframedcontent demarreframedtext demarrefrontmatter demarregot \
+demarregraphictext demarregridsnapping demarregridsnapping demarregroupe demarrehboxestohbox \
+demarrehelptext demarrehiding demarrehighlight demarrehyphenation demarreimath \
+demarreindentation demarreindentedtext demarreinteraction demarreinterface demarreintermezzotext \
+demarreintertext demarreitemgroup demarreitemize demarreknockout demarrelabeltexte \
+demarrelayout demarrelegend demarreligne demarreligneregleetexte demarrelinealignment \
+demarrelinecorrection demarrelinenumbering demarrelinenumbering demarrelines demarrelinetable \
+demarrelinetablebody demarrelinetablecell demarrelinetablehead demarrelocalfootnotes demarrelocalheadsetup \
+demarrelocallinecorrection demarrelocalnotes demarrelocalsetups demarrelocalsetups demarrelua \
+demarreluacode demarreluaparameterset demarreluasetups demarreluasetups demarremakeup \
+demarremargereglee demarremargereglee demarremarginblock demarremarkedcontent demarremathalignment \
+demarremathcases demarremathlabeltext demarremathmatrix demarremathmode demarremathstyle \
+demarremathstyle demarrematrices demarrematrix demarremaxaligned demarremdformula \
+demarremenuinteraction demarremiddlealigned demarremixedcolumns demarremode demarremodeset \
+demarremodule demarremodule demarremoduletestsection demarrempformula demarrenamedsection \
+demarrenamedsubformulas demarrenarrow demarrenarrow demarrenarrow demarrenarrower \
+demarrenegative demarrenicelyfilledbox demarrenointerference demarrenop demarrenotallmodes \
+demarrenotepdp demarrenotepdp demarrenotext demarrenotmode demarreoperatortext \
+demarreopposite demarreoutputstream demarreoverlay demarreoverprint demarrepagecomment \
+demarrepagefigure demarrepagegrid demarrepagegridspan demarrepagelayout demarrepar \
+demarrepar demarreparagraph demarreparagraphs demarreparagraphscell demarreparbuilder \
+demarrepart demarrepath demarreplacechemical demarreplacefigure demarreplaceflottant \
+demarreplaceformule demarreplaceformule demarreplacegraphic demarreplaceintermezzo demarreplacelegende \
+demarreplacepairedbox demarreplacetable demarrepositioning demarrepositionoverlay demarrepositive \
+demarrepostponing demarreprefixtext demarreprocessassignmentcommand demarreprocessassignmentlist demarreprocesscommacommand \
+demarreprocesscommalist demarreproduit demarreproduit demarreprojet demarreprojet \
+demarreprotect demarreprotectedcolors demarrepsh demarrepublication demarrepunctuation \
+demarrerandomized demarrerandomseed demarreraw demarrerawsetups demarrerawsetups \
+demarrereadingfile demarrereferenceprefix demarrereferenceprefix demarreregime demarrereusableMPgraphic \
+demarrerob demarrerul demarrescript demarresdformula demarresection \
+demarresectionblock demarresectionblockenvironment demarresectionlevel demarresetups demarresetups \
+demarreshapebox demarreshift demarresidebar demarresimplecolumns demarrespecialitem \
+demarrespecialitem demarrespecialitem demarrespeech demarrespformula demarrespread \
+demarrestartstop demarrestaticMPfigure demarrestaticMPgraphic demarrestrictinspectnextcharacter demarrestrut \
+demarrestyle demarrestyle demarresubformulas demarresubject demarresubsection \
+demarresubsentence demarresubstack demarresubsubject demarresubsubsection demarresubsubsubject \
+demarresubsubsubsection demarresubsubsubsubject demarresubsubsubsubsection demarresubsubsubsubsubject demarresymbolset \
+demarretable demarretable demarretablehead demarretables demarretables \
+demarretabletail demarretabletext demarretabulate demarretabulatehead demarretabulatetail \
+demarretagged demarretaglabeltext demarretete demarretexcode demarretexcode \
+demarretexdefinition demarretext demarretext demarretextbackground demarretextbackgroundmanual \
+demarretextcolor demarretextcolorintent demarretextetete demarretextflow demarretitle \
+demarretokens demarretxt demarretypescript demarretypescriptcollection demarretyping \
+demarretyping demarreuniqueMPgraphic demarreuniqueMPpagegraphic demarreunittext demarreunpacked \
+demarreusableMPgraphic demarreuseMPgraphic demarreusemathstyleparameter demarreusingbtxspecification demarreva \
+demarrevboxtohbox demarrevboxtohboxseparator demarreviewerlayer demarrexcell demarrexcellgroup \
+demarrexgroup demarrexmldisplayverbatim demarrexmlinlineverbatim demarrexmlraw demarrexmlsetups \
+demarrexmlsetups demarrexrow demarrexrowgroup demarrextable demarrextable \
+demarrextablebody demarrextablebody demarrextablefoot demarrextablefoot demarrextablehead \
+demarrextablehead demarrextablenext demarrextablenext depthofstring depthonlybox \
+depthspanningtext determinecaracteristiqueliste determinecaracteristiquesregistre determinenoflines determinenumerotete \
+devanagarinumerals dfrac digits digits dimensiontocount \
+directcolor directcolored directcolored directconvertedcounter directdummyparameter \
+directgetboxllx directgetboxlly directhighlight directlocalframed directluacode \
+directselect directsetbar directsetup directsymbol directvspacing \
+dis disabledirectives disableexperiments disablemode disableoutputstream \
+disableparpositions disableregime disabletrackers displaymath displaymathematics \
+displaymessage distributedhsize dividedsize doadaptleftskip doadaptrightskip \
+doaddfeature doassign doassignempty doboundtext docheckassignment \
+docheckedpagestate docheckedpair documentvariable dodoubleargument dodoubleargumentwithset \
+dodoubleempty dodoubleemptywithset dodoublegroupempty doeassign doexpandedrecurse \
+dogetattribute dogetattributeid dogetcommacommandelement dogobbledoubleempty dogobblesingleempty \
+doif doifMPgraphicelse doifallcommon doifallcommonelse doifalldefinedelse \
+doifallmodes doifallmodeselse doifassignmentelse doifblackelse doifbothsides \
+doifbothsidesoverruled doifboxelse doifbufferelse doifcolor doifcolorelse \
+doifcommandhandler doifcommandhandlerelse doifcommon doifcommonelse doifcontent \
+doifconversiondefinedelse doifconversionnumberelse doifcounter doifcounterelse doifcurrentfonthasfeatureelse \
+doifdefined doifdefinedcounter doifdefinedcounterelse doifdefinedelse doifdimensionelse \
+doifdimenstringelse doifdocumentargument doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse \
+doifdrawingblackelse doifelse doifelseMPgraphic doifelseallcommon doifelsealldefined \
+doifelseallmodes doifelseassignment doifelseblack doifelsebox doifelsebuffer \
+doifelsecolor doifelsecommandhandler doifelsecommon doifelseconversiondefined doifelseconversionnumber \
+doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused \
+doifelsedefined doifelsedefinedcounter doifelsedimension doifelsedimenstring doifelsedocumentargument \
+doifelsedocumentfilename doifelsedrawingblack doifelseempty doifelseemptyvalue doifelseemptyvariable \
+doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory \
+doifelsefigure doifelsefile doifelsefiledefined doifelsefileexists doifelsefirstchar \
+doifelseflagged doifelsefontchar doifelsefontpresent doifelsefontsynonym doifelsehasspace \
+doifelsehelp doifelseincsname doifelseinelement doifelseinputfile doifelseinsertion \
+doifelseinset doifelseinstring doifelseinsymbolset doifelseintoks doifelseintwopassdata \
+doifelseitalic doifelselanguage doifelselayerdata doifelselayoutdefined doifelselayoutsomeline \
+doifelselayouttextline doifelseleapyear doifelselist doifelselocation doifelselocfile \
+doifelsemainfloatbody doifelsemarking doifelsemeaning doifelsemessage doifelsemode \
+doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar doifelsenextoptional doifelsenextoptionalcs \
+doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage doifelsenothing doifelsenumber \
+doifelseobjectfound doifelseobjectreferencefound doifelseoddpage doifelseoddpagefloat doifelseoldercontext \
+doifelseolderversion doifelseoverlapping doifelseoverlay doifelseparallel doifelseparentfile \
+doifelsepath doifelsepathexists doifelsepatterns doifelseposition doifelsepositionaction \
+doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound \
+doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference doifelsesamestring doifelsesetups \
+doifelsesomebackground doifelsesomespace doifelsesomething doifelsesometoks doifelsestringinstring \
+doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined doifelsesymbolset doifelsetext \
+doifelsetextflow doifelsetextflowcollector doifelsetypingfile doifelseundefined doifelseurldefined \
+doifelsevalue doifelsevaluenothing doifelsevariable doifempty doifemptyelse \
+doifemptytoks doifemptyvalue doifemptyvalueelse doifemptyvariable doifemptyvariableelse \
+doifenv doifenvelse doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse \
+doiffieldcategoryelse doiffigureelse doiffile doiffiledefinedelse doiffileelse \
+doiffileexistselse doiffirstcharelse doifflaggedelse doiffontcharelse doiffontpresentelse \
+doiffontsynonymelse doifhasspaceelse doifhelpelse doifincsnameelse doifinelementelse \
+doifinputfileelse doifinsertionelse doifinset doifinsetelse doifinstring \
+doifinstringelse doifinsymbolset doifinsymbolsetelse doifintokselse doifintwopassdataelse \
+doifitalicelse doiflanguageelse doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse \
+doiflayouttextlineelse doifleapyearelse doiflistelse doiflocationelse doiflocfileelse \
+doifmainfloatbodyelse doifmarkingelse doifmeaningelse doifmessageelse doifmode \
+doifmodeelse doifnextbgroupcselse doifnextbgroupelse doifnextcharelse doifnextoptionalcselse \
+doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse doifnot doifnotallcommon \
+doifnotallmodes doifnotcommandhandler doifnotcommon doifnotcounter doifnotdocumentargument \
+doifnotdocumentfilename doifnotempty doifnotemptyvalue doifnotemptyvariable doifnotenv \
+doifnoteonsamepageelse doifnotescollected doifnotfile doifnotflagged doifnothing \
+doifnothingelse doifnotinset doifnotinsidesplitfloat doifnotinstring doifnotmode \
+doifnotnumber doifnotsamestring doifnotsetups doifnotvalue doifnotvariable \
+doifnumber doifnumberelse doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse \
+doifoddpagefloatelse doifoldercontextelse doifolderversionelse doifoverlappingelse doifoverlayelse \
+doifparallelelse doifparentfileelse doifpathelse doifpathexistselse doifpatternselse \
+doifposition doifpositionaction doifpositionactionelse doifpositionelse doifpositiononpageelse \
+doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse \
+doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring doifsamestringelse doifsetups \
+doifsetupselse doifsomebackground doifsomebackgroundelse doifsomespaceelse doifsomething \
+doifsomethingelse doifsometoks doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse \
+doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse doiftext doiftextelse \
+doiftextflowcollectorelse doiftextflowelse doiftypingfileelse doifundefined doifundefinedcounter \
+doifundefinedelse doifurldefinedelse doifvalue doifvalueelse doifvaluenothing \
+doifvaluenothingelse doifvaluesomething doifvariable doifvariableelse doindentation \
+dollar doloop doloopoverlist donothing dontconvertfont \
+dontleavehmode dontpermitspacesbetweengroups dopositionaction doprocesslocalsetups doquadrupleargument \
+doquadrupleempty doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty \
+dorechecknextindentation dorecurse dorecurse dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature dot dotfskip dotoks dotripleargument \
+dotripleargumentwithset dotripleempty dotripleemptywithset dotriplegroupempty doublebar \
+doublebond doublebrace doublebracket doubleparent dowith \
+dowithnextbox dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument \
+dowithrange dowithwargument dpofstring dummydigit dummyparameter \
+eTeX echelle ecran ecritdansliste ecritentreliste \
+edefconvertedargument efcmaxheight efcmaxwidth efcminheight efcminwidth \
+efcparameter effect el elapsedseconds elapsedtime \
+eleftarrowfill eleftharpoondownfill eleftharpoonupfill eleftrightarrowfill element \
+elements emphasisboldface emphasistypeface emptylines emspace \
+enabledirectives enableexperiments enablemode enableoutputstream enableparpositions \
+enableregime enabletrackers endnote endnote enskip \
+enspace env environement environement envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill espace \
+espacefixe espacesfixes ethiopic etire etwoheadrightarrowfill \
+eunderbarfill eunderbracefill eunderbracketfill eunderparentfill executeifdefined \
+exitloop exitloopnow expandcheckedcsname expanded expandfontsynonym \
+externalfigurecollectionmaxheight externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth externalfigurecollectionparameter \
+faitreference fakebox fastdecrement fastincrement fastlocalframed \
+fastscale fastsetup fastsetupwithargument fastsetupwithargumentswapped fastswitchtobodyfont \
+fastsxsy feature feature fence fenced \
+fetchallmarkings fetchallmarks fetchmark fetchmarking fetchonemark \
+fetchonemarking fetchruntinecommand fetchtwomarkings fetchtwomarks fichierdactylo \
+fieldbody fifthoffivearguments fifthofsixarguments figureexterne figurefilename \
+figurefilepath figurefiletype figurefullname figureheight figurenaturalheight \
+figurenaturalwidth figuresymbol figurewidth filename filledhboxb \
+filledhboxc filledhboxg filledhboxk filledhboxm filledhboxr \
+filledhboxy filler filterfromnext filterfromvalue filterpages \
+filterreference findtwopassdata finishregisterentry firstcharacter firstcounter \
+firstcountervalue firstoffivearguments firstoffourarguments firstofoneargument firstofoneunexpanded \
+firstofsixarguments firstofthreearguments firstofthreeunexpanded firstoftwoarguments firstoftwounexpanded \
+firstrealpage firstrealpagenumber firstsubcountervalue firstsubpage firstsubpagenumber \
+firstuserpage firstuserpagenumber fitfieldframed fittopbaselinegrid flag \
+floatuserdataparameter flushcollector flushlayer flushlocalfloats flushnextbox \
+flushnotes flushoutputstream flushshapebox flushtextflow flushtokens \
+flushtoks fontalternative fontbody fontchar fontcharbyindex \
+fontclass fontclassname fontface fontfeaturelist fontsize \
+fontstyle forcecharacterstripping forcelocalfloats forgeteverypar forgetparameters \
+forgetragged formula foundbox fourthoffivearguments fourthoffourarguments \
+fourthofsixarguments frac framed frameddimension framedparameter \
+framedtext freezedimenmacro freezemeasure frenchspacing fromlinenote \
+frozenhbox gardeblocs gdefconvertedargument gdefconvertedcommand getMPdrawing \
+getMPlayer getboxllx getboxlly getbufferdata getcommacommandsize \
+getcommalistsize getdayoftheweek getdayspermonth getdefinedbuffer getdocumentargument \
+getdocumentargumentdefault getdocumentfilename getdummyparameters getemptyparameters geteparameters \
+getexpandedparameters getfiguredimensions getfirstcharacter getfirsttwopassdata getfromcommacommand \
+getfromcommalist getfromtwopassdata getglyphdirect getglyphstyled getgparameters \
+getlasttwopassdata getlocalfloat getlocalfloats getmessage getnamedglyphdirect \
+getnamedglyphstyled getnamedtwopassdatalist getnaturaldimensions getnoflines getobject \
+getobjectdimensions getpaletsize getparameters getrandomcount getrandomdimen \
+getrandomfloat getrandomnumber getrandomseed getraweparameters getrawgparameters \
+getrawnoflines getrawparameters getrawxparameters getreference getreferenceentry \
+getroundednoflines getsubstring gettwopassdata gettwopassdatalist getuvalue \
+getvalue getvariable getvariabledefault getxparameters globaldisablemode \
+globalenablemode globalletempty globalpopbox globalpopmacro globalpreventmode \
+globalprocesscommalist globalpushbox globalpushmacro globalswapcounts globalswapdimens \
+globalswapmacros globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments \
+gobblefivearguments gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments \
+gobbleoneargument gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments \
+gobblespacetokens gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments \
+gobbletwooptionals gobbleuntil gobbleuntilrelax got grabbufferdata \
+grabbufferdatadirect grabuntil grave grayvalue greedysplitstring \
+greeknumerals grille groupedcommand gsetboxllx gsetboxlly \
+gujaratinumerals gurmurkhinumerals hairspace halfwaybox handletokens \
+handwritten hangul hanzi hash hat \
+haut hboxofvbox hboxreference hdofstring headhbox \
+headlanguage headnumbercontent headnumberdistance headnumberwidth headreferenceattributes \
+headsym headtextcontent headtexts headtextwidth headvbox \
+headwidth heightanddepthofstring heightofstring heightspanningtext helptext \
+hglue hiddencitation hiddencite highlight highordinalstr \
+hilo himilo hl horizontalgrowingbar horizontalpositionbar \
+hphantom hpos hsizefraction hsmash hsmashbox \
+hsmashed hspace htdpofstring htofstring hyphen \
+hyphenatedcoloredword hyphenatedfile hyphenatedfilename hyphenatedhbox hyphenatedpar \
+hyphenatedurl hyphenatedword ibox ifassignment iff \
+ifinobject ifinoutputstream ifparameters iftrialtypesetting ignoreimplicitspaces \
+ignorevalue immediatesavetwopassdata impliedby implies includemenu \
+includeversioninfo inconnu increment increment increment \
+increment incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation index index infofont \
+infofontbold inframed infull inheritparameter inhibitblank \
+ininner ininneredge ininnermargin initializeboxstack inlinebuffer \
+inlinedbox inlinemath inlinemathematics inlinemessage inlineordisplaymath \
+inlinerange inmframed innerflushshapebox inother inouter \
+inouteredge inoutermargin input input inputfilebarename \
+inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile insertpages \
+installactionhandler installactivecharacter installanddefineactivecharacter installattributestack installautocommandhandler \
+installautosetuphandler installbasicautosetuphandler installbasicparameterhandler installbottomframerenderer installcommandhandler \
+installcorenamespace installdefinehandler installdefinitionset installdefinitionsetmember installdirectcommandhandler \
+installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler installdirectstyleandcolorhandler installelangue \
+installelangue installframedautocommandhandler installframedcommandhandler installleftframerenderer installnamespace \
+installoutputroutine installpagearrangement installparameterhandler installparameterhashhandler installparametersethandler \
+installparentinjector installrightframerenderer installrootparameterhandler installsetuphandler installsetuponlycommandhandler \
+installshipoutmethod installsimplecommandhandler installsimpleframedcommandhandler installstyleandcolorhandler installswitchcommandhandler \
+installswitchsetuphandler installtexdirective installtextracker installtopframerenderer installunitsseparator \
+installunitsspace installversioninfo integerrounding intertext invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+itemtag itm jobfilename jobfilesuffix joursemaine \
+kap keeplinestogether keepunwantedspaces kerncharacters koreancirclenumerals \
+koreannumerals koreannumeralsc koreannumeralsp koreanparentnumerals labellanguage \
+labeltexte labeltexts languageCharacters languagecharacters languagecharwidth \
+langue langueprincipale largeurligne lastcounter lastcountervalue \
+lastdigit lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode latin \
+layeredtext layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata \
+lbox left leftbottombox leftbox lefthbox \
+leftheadtext leftlabeltext leftline leftmathlabeltext leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+lefttoright lefttorighthbox lefttorightvbox lefttorightvtop letbeundefined \
+letcatcodecommand letcscsname letcsnamecs letcsnamecsname letdummyparameter \
+letempty letgvalue letgvalueempty letgvalurelax letterampersand \
+letterat letterbackslash letterbar letterbgroup letterclosebrace \
+lettercolon letterdollar letterdoublequote letteregroup letterescape \
+letterexclamationmark letterhash letterhat letterleftbrace letterless \
+lettermore letteropenbrace letterpercent letterquestionmark letterrightbrace \
+lettersinglequote letterslash letterspacing lettertilde letterunderscore \
+letvalue letvalueempty letvaluerelax lfence lhbox \
+ligneh lignenoire ligneregleetexte lignesnoires limitatelines \
+limitatetext limitatetext limtatefirstline line linenote \
+linespanningtext listcitation listcitation listcitation listcite \
+listcite listcite listnamespaces llap llongueurliste \
+loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \
+loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \
+loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \
+localhsize localpopbox localpopmacro localpushbox localpushmacro \
+localundefine locatedfilepath locatefilepath locfilename logo \
+lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
+lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
+luaTeX luacode luaconditional luaenvironment luaexpanded \
+luafunction luajitTeX luamajorversion luaminorversion luaparameterset \
+luasetup luaversion m mLeftarrow mLeftrightarrow \
+mRightarrow makecharacteractive makerawcommalist makestrutofbox mapfontsize \
+mar margindata markcontent markinjector marquage \
+marquepage mat math mathbf mathbi \
+mathblackboard mathbs mathcommand mathdefault mathematique \
+mathfraktur mathfunction mathit mathlabellanguage mathlabeltext \
+mathlabeltexts mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf maxaligned \
+mbox mcframed measure measured medskip \
+medspace menuinteraction mequal message metaTeX \
+mfence mframed mfunction mfunctionlabeltext mhbox \
+mhookleftarrow mhookrightarrow middle middlealigned middlebox \
+midhbox minimalhbox mixedcaps mkvibuffer mleftarrow \
+mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto \
+moduleparameter mois molecule mono monobold \
+monobold mononormal monthlong monthshort montrecadre \
+montrecouleur montredisposition montreedition montreenvironnementpolicecorps montregrille \
montregroupecouleur montrejeusymboles montremakeup montrepalette montrepolicecorps \
-montrereglages montrestruts motdroit motmarge moveongrid \
-movesidefloat name navigating nextsection niveautete \
-nocap noheaderandfooterlines noindenting nolist nomarking \
-nombredesouspages nombretotaldepages nommacro nomoreblocks nomorefiles \
-nop nospace note notepdp notopandbottomlines \
-nowhitespace numbers numeroformule numeropage numeros \
-numerosousformule numerotete numerotetecourant obtientmarquage oriente \
-outeredgedistance outeredgewidth outermargindistance outermarginwidth overbar \
-overbars overstrike overstrikes packed page \
-pagedepth pagedouble pageoffset pagereference paragraph \
-part pasplusdeblocs pasplusdefichiers periodes periods \
-pilechamp placebookmarks placecombinedlist placecoteacote placefloat \
-placeflottant placefootnotes placeformula placeformule placelegend \
-placelegende placelesunsaudessusdesautres placelist placeliste placelisteinmbriquee \
-placelistereference placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes \
-placelogos placemarquespages placenotespdp placenotespdplocales placenumeropage \
-placenumerotete placeongrid placeontopofeachother placerawlist placereferencelist \
-placeregister placeregistre placeregle placesidebyside placesousformule \
-placesubformula placesurgrille placetextetete placevariabletexte position \
-positionnetexte prendbuffer processblocks processpage produit \
-program programme projet publication qqpart \
-quotation quote ran raz razmarquage \
-raznumero recommandation ref refait reference \
-referencepage referencetexte referral referraldate reflete \
-register reglealignement reglearrangement reglearriereplan reglearriereplans \
-reglebarreinteraction reglebarresynchronisation reglebloc regleblocmarge regleblocsection \
-regleboutons reglebuffer reglecapitales reglechamp reglechamps \
-regleclipping reglecolonnes reglecombinaisons reglecommentaire reglecommentairepage \
-reglecompoetroite reglecomposeenalinea reglecouleur reglecouleurs regledactylo \
-regledansmarge regledemarrestoppe regledescriptions regledisposition regleecraninteraction \
-regleecrans regleelements regleencadre regleentete regleenumerations \
-regleenvironnementpolicecorps regleepaisseurligne regleespaceblanc regleespacement regleespacementinterligne \
-reglefiguresexternes regleflottant regleflottants regleformulaires regleformules \
-reglegroupeselements regleinf regleinteraction regleintitule regleintitules \
-reglejeucolonne reglejeusymboles reglelabeltexte reglelangue reglelegende \
-reglelignes reglelignesnoires reglelignesreglestexte regleliste reglelisteimbriquee \
-reglelistereference reglemakeup reglemargereglee reglemarquage reglemarquagehyphenation \
-reglemenuinteraction reglenotepdp reglenumero reglenumeropage reglenumerotation \
-reglenumerotationligne reglenumerotationpage reglenumerotationparagraphe reglenumerotete regleoriente \
-reglepalette reglepapier regleparagraphes reglepdp regleplacementopposition \
-reglepolicecorps reglepositionnement reglepositiontexte regleprofils regleprogrammes \
-reglepublications reglereferencage regleregistre regleregle regleremplitligne \
-regleremplitlignesreglees reglesection regleseparationflottant reglesortie reglesouslignage \
-reglesousnumeropage reglestrut reglesup reglesynchronisation reglesynonymes \
-reglesysteme regletab regletableaux regletabulation regletaillepapier \
-regletete regletetes regletexte regletextesentete regletextesinf \
+montrereglages montrestruts motdroit motmarge mprandomnumber \
+mrel mrightarrow mrightharpoondown mrightharpoonup mrightleftharpoons \
+mrightoverleftarrow mtext mtriplerel mtwoheadleftarrow mtwoheadrightarrow \
+namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable namedtaggedlabeltexts \
+naturalhbox naturalhpack naturalvbox naturalvcenter naturalvpack \
+naturalvtop naturalwd negatecolorbox negated negthinspace \
+newattribute newcatcodetable newcounter newevery newfrenchspacing \
+newmode newsignal newsystemmode nextbox nextboxdp \
+nextboxht nextboxhtdp nextboxwd nextcounter nextcountervalue \
+nextdepth nextparagraphs nextrealpage nextrealpagenumber nextsubcountervalue \
+nextsubpage nextsubpagenumber nextuserpage nextuserpagenumber nihongo \
+nocap nocitation nocitation nocite nocite \
+nodetostring noffigurepages noflines noflocalfloats noindentation \
+nonfrenchspacing nonmathematics nop nop normal \
+normalboldface normalframedwithsettings normalizebodyfontsize normalizedfontsize normalizefontdepth \
+normalizefontheight normalizefontline normalizefontwidth normalizetextdepth normalizetextheight \
+normalizetextline normalizetextwidth normaltypeface note notepdp \
+notepdp notesymbol notragged ntimes numberofpoints \
+numeroformule numeropage numeros numerotete numerotetecourant \
+obeydepth objectdepth objectheight objectmargin objectwidth \
+obox obtientmarquage offset offsetbox onedigitrounding \
+operatorlanguage operatortext ordinaldaynumber ordinalstr oriente \
+ornamenttext ornamenttext ornamenttext outputfilename outputstreambox \
+outputstreamcopy outputstreamunvbox outputstreamunvcopy over overbar \
+overbar overbars overbartext overbarunderbar overbrace \
+overbracetext overbraceunderbrace overbracket overbrackettext overbracketunderbracket \
+overlaybutton overlaybutton overlaycolor overlaydepth overlayfigure \
+overlayheight overlaylinecolor overlaylinewidth overlayoffset overlayrollbutton \
+overlaywidth overleftarrow overleftharpoondown overleftharpoonup overleftrightarrow \
+overloaderror overparent overparenttext overparentunderparent overrightarrow \
+overrightharpoondown overrightharpoonup overset overstrike overstrikes \
+overtwoheadleftarrow overtwoheadrightarrow page pagearea pagebreak \
+pagefigure pagegridspanwidth pageinjection pageinjection pagestaterealpage \
+paletsize part pdfTeX pdfactualtext pdfbackendactualtext \
+pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo \
+pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern \
+pdfbackendsetshade pdfcolor pdfeTeX percent percentdimen \
+periodes periodes permitcaretescape permitcircumflexescape permitspacesbetweengroups \
+persiandecimals persiannumerals phantom phantombox pickupgroupedcommand \
+pilechamp placeattachments placebtxrendering placechemical placecitation \
+placecomments placecontent placecoteacote placecurrentformulanumber placedbox \
+placefigure placefloatwithsetups placeflottant placeformule placeframed \
+placegraphic placehelp placeindex placeinitial placeintermezzo \
+placelayer placelayeredtext placelegende placelesunsaudessusdesautres placeliste \
+placelisteinmbriquee placelistofabbreviations placelistofchemicals placelistoffigures placelistofgraphics \
+placelistofintermezzi placelistoflogos placelistofpublications placelistofsorts placelistofsynonyms \
+placelistoftables placelocalnotes placemarquespages placement placenamedfloat \
+placenamedformula placenotes placenotespdp placenotespdplocales placenumeropage \
+placenumerotete placepairedbox placeparallel placerawlist placeregistre \
+placerenderingwindow placesousformule placesurgrille placesurgrille placetable \
+placetextetete popattribute popmacro popmode popsystemmode \
+position positionoverlay positionregionoverlay postponenotes predefinedfont \
+predefinefont predefinesymbol prefixedpagenumber prefixlanguage prefixtext \
+prendbuffer prependetoks prependgvalue prependtocommalist prependtoks \
+prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols presetheadtext \
+presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext presettaglabeltext \
+presetunittext pretocommalist prevcounter prevcountervalue preventmode \
+prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage prevsubpagenumber \
+prevuserpage prevuserpagenumber procent processMPbuffer processMPfigurefile \
+processaction processallactionsinset processassignlist processassignmentcommand processassignmentlist \
+processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand processcommalist \
+processcommalistwithparameters processcontent processfile processfilemany processfilenone \
+processfileonce processfirstactioninset processisolatedchars processisolatedwords processlinetablebuffer \
+processlinetablefile processlist processmonth processranges processseparatedlist \
+processtexbuffer processtokens processuntil processxtablebuffer processyear \
+produit produit profiledbox profilegivenbox programme \
+projet projet pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped \
+pseudosmallcapped psh purenumber pushattribute pushbutton \
+pushmacro pushmode pushoutputstream pushsystemmode qqpart \
+qquad quad quitcommalist quitprevcommalist quittypescriptscanning \
+raggedbottom raggedcenter raggedleft raggedright raggedwidecenter \
+raisebox ran randomizetext randomnumber raw \
+rawcounter rawcountervalue rawdate rawdoifelseinset rawdoifinset \
+rawdoifinsetelse rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist \
+rawstructurelistuservariable rawsubcountervalue razmarquage rbox readfile \
+readfixfile readjobfile readlocfile readsetfile readsysfile \
+readtexfile readxmlfile realSmallCapped realSmallcapped realpagenumber \
+realsmallcapped recursedepth recurselevel recursestring redoconvertfont \
+ref reference referencepage referenceprefix referencetexte \
+reflete registerattachment registerctxluafile registerexternalfigure registerfontclass \
+registerhyphenationexception registerhyphenationpattern registermenubuttons registersort registersynonym \
+registerunit reglealignement reglearrangement reglearriereplan reglearriereplans \
+reglearriereplans reglebarreinteraction reglebloc regleblocsection reglebuffer \
+reglecapitales reglechamp reglechamps regleclipping reglecolonnes \
+reglecommentaire reglecommentairepage reglecompoetroite reglecomposeenalinea reglecouleur \
+reglecouleurs regledactylo regledemarrestoppe regledisposition regledisposition \
+regleecraninteraction regleelements regleencadre regleentete regleepaisseurligne \
+regleespaceblanc regleespacement regleespacementinterligne regleespacementinterligne regleespacementinterligne \
+regleespacementinterligne regleespacementinterligne regleespacementinterligne regleflottant regleformulaires \
+regleinf regleinteraction regleinteraction regleintitule reglejeusymboles \
+reglelabeltexte reglelangue reglelegende reglelignes reglelignesnoires \
+reglelignesreglestexte regleliste reglelisteimbriquee reglemakeup reglemargereglee \
+reglemarquage reglemarquagehyphenation reglemenuinteraction reglenumeropage reglenumerotationligne \
+reglenumerotationpage reglenumerotationparagraphe reglenumerotete regleoriente reglepalette \
+reglepapier regleparagraphes regleparagraphes reglepdp regleplacementopposition \
+reglepolicecorps reglepositionnement regleprogrammes reglereferencage regleregistre \
+regleregistre regleremplitligne regleremplitlignesreglees regleseparationflottant reglesousnumeropage \
+reglesup reglesynonymes regletableaux regletabulation regletaillepapier \
+regletaillepapier regletete regletexte regletextesentete regletextesinf \
regletextespdp regletextessup regletextestexte regletextetete regletolerance \
regletraitsfins regletransitionspage regletri regletype regleurl \
-reglevariabletexte regleversions remplitchamp remplitligne remplitlignesreglees \
-remplittexte reservefloat reset resetmarking resettextcontent \
-retourarriere rightaligned romannumerals rotate sansalinea \
-sansdimension sansespace sansespaceblanc sanslignesenteteetpdp sanslignessupetinf \
-sansliste sansmarquage sanstest sauteblocs scale \
-screen section seeregister selectblocks selectionneblocs \
-selectionnepapier selectionneversion selectpaper selectversion sensunite \
-separeflottant settext settextcontent setupalign setupanswerarea \
-setuparranging setupbackground setupbackgrounds setupblackrules setupblank \
-setupblock setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts \
-setupbuffer setupbuttons setupcapitals setupcaption setupcaptions \
-setupclipping setupcolor setupcolors setupcolumns setupcolumnsetlines \
-setupcolumnsetstart setupcombinations setupcombinedlist setupcomment setupdescriptions \
-setupenumerations setupexternalfigures setupfield setupfields setupfillinlines \
-setupfillinrules setupfloat setupfloats setupfloatsplitting setupfonthandling \
-setupfontsynonym setupfooter setupfootertexts setupfootnotedefinition setupfootnotes \
-setupforms setupformulas setupframed setupframedtexts setuphead \
-setupheader setupheadertexts setupheadnumber setupheads setupheadtext \
-setuphyphenmark setupindentedtext setupindenting setupinmargin setupinteraction \
-setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 \
-setupitemgroup setupitems setuplabeltext setuplanguage setuplayout \
-setuplegend setuplinenumbering setuplines setuplinewidth setuplist \
-setuplistalternative setupmakeup setupmarginblocks setupmarginrules setupmarking \
-setupmathalignment setupnarrower setupnumbering setupoppositeplacing setupoutput \
-setuppagenumber setuppagenumbering setuppagetransitions setuppalet setuppaper \
-setuppapersize setupparagraphnumbering setupparagraphs setupplacement setuppositioning \
-setupprofiles setupprograms setuppublications setupquote setupreferencelist \
-setupreferencing setupregister setuprotate setupscreens setupsection \
-setupsectionblock setupsorting setupspacing setupstrut setupsubpagenumber \
-setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms setupsystem \
-setuptab setuptables setuptabulate setuptext setuptextrules \
-setuptexttexts setupthinrules setuptolerance setuptop setuptoptexts \
-setuptype setuptyping setupunderbar setupurl setupversions \
-setupwhitespace showbodyfont showbodyfontenvironment showcolor showcolorgroup \
-showexternalfigures showfields showframe showgrid showlayout \
-showmakeup showpalet showprint showsetups showstruts \
-showsymbolset someline somewhere sort sousnumeropage \
-space splitfloat startalignment startbackground startbuffer \
-startcolor startcolumnmakeup startcolumns startcombination startcomment \
-startcomponent startdescription startdocument startenumeration startenvironment \
-startfact startfigure startfloattext startformula startframedtext \
-starthiding startinteractionmenu startitemgroup startlegend startline \
-startlinecorrection startlinenumbering startlines startlocal startlocalenvironment \
-startlocalfootnotes startmakeup startmarginblock startmarginrule startnamemakeup \
-startnarrower startopposite startoverlay startoverview startpacked \
-startparagraph startpositioning startpostponing startproduct startprofile \
-startproject startquotation startregister startsymbolset startsynchronization \
-starttable starttables starttabulate starttextrule starttyping \
-startunpacked startversion stopalignment stopbackground stopbuffer \
-stopcolor stopcolumnmakeup stopcolumns stopcombination stopcomment \
-stopcompoetroite stopcomponent stopdescription stopdocument stopenumeration \
-stopenvironment stopfact stopfigure stopfloattext stopformula \
-stopframedtext stophiding stopinteractionmenu stopitemgroup stoplegend \
-stopline stoplinecorrection stoplinenumbering stoplines stoplocal \
-stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmarginrule \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview \
-stoppacked stopparagraph stoppealignement stoppearriereplan stoppeblocmarge \
-stoppecitation stoppecodage stoppecolonnes stoppecombinaison stoppecomposant \
-stoppecorrectionligne stoppecouleur stoppedegroupe stoppedocument stoppeenvironement \
-stoppeglobal stoppegroupe stoppejeucolonne stoppeligne stoppeligneregleetexte \
-stoppelignes stoppelocal stoppemakeup stoppemargereglee stoppenotespdplocales \
-stoppenumerotationligne stoppeopposition stoppepositionnement stoppeproduit stoppeprofil \
-stoppeprojet stopperaster stopperevetement stoppesynchronisation stoppetableau \
-stoppetableaux stoppetexte stoppeversion stoppevuedensemble stoppositioning \
-stoppostponing stopproduct stopprofile stopproject stopquotation \
-stopsymbolset stopsynchronization stoptable stoptables stoptabulate \
-stoptextrule stoptyping stopunpacked stopversion stretched \
-sub subject subsection subsubject subsubsection \
-subsubsubject suggestion suivantprofil suivantversion suivantversionprofil \
-switchtobodyfont sym symbol symbole synchronise \
-synchronizationbar synchronize synonym tab tapebuffer \
-testcolumn testpage tete tex textemarge \
-textenotepdp textetete textreference textrule thinrule \
-thinrules title titremarge tooltip traduire \
-traiteblocs traitepage traitfin traitsfins translate \
-txt typ type typebuffer typefile \
-underbar underbars uneligne useURL useXMLfilter \
-useblocks usecommands usedirectory useencoding useexternaldocument \
-useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule \
-usereferences usespecials usesymbols usetypescript usetypescriptfile \
-utiliseJSscripts utiliseURL utiliseblocs utilisechemin utilisecommandes \
-utilisedocumentexterne utiliseencodage utilisefichierexterne utilisefichiersexternes utilisefigureexterne \
-utilisemodule utilisemodules utilisepsiteaudioexterne utilisereferences utilisespecialites \
-utilisesymboles utiliseurl va vaalaboite vaalapage \
-vaenbas valeurcouleur valeurgris variabletexte version \
-vide vl weekday whitespace wordright \
-writebetweenlist writetolist writetoreferencelist writetoregister
+regular relatemarking relateparameterhandlers relaxvalueifundefined remainingcharacters \
+removebottomthings removedepth removefromcommalist removelastskip removelastspace \
+removemarkedcontent removepunctuation removesubstring removetoks removeunwantedspaces \
+remplitligne remplitlignesreglees remplittexte replacefeature replacefeature \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetandaddfeature \
+resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning resetcharacterspacing \
+resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation resetdirection \
+resetfeature resetflag resetfontcolorsheme resetfontfallback resetfontsolution \
+resethyphenationfeatures resetinjector resetinteractionmenu resetitaliccorrection resetlayer \
+resetlocalfloats resetmarker resetmode resetpagenumber resetparallel \
+resetpath resetpenalties resetprofile resetreference resetreplacement \
+resetscript resetsetups resetshownsynonyms resetsubpagenumber resetsymbolset \
+resetsystemmode resettimer resettrackers resettrialtypesetting resetusedsortings \
+resetusedsynonyms resetuserpagenumber resetvalue resetvisualizers reshapebox \
+restartcounter restorebox restorecatcodes restorecounter restorecurrentattributes \
+restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic reuserandomseed \
+revivefeature rfence rhbox right rightbottombox \
+rightbox righthbox rightheadtext rightlabeltext rightline \
+rightmathlabeltext rightorleftpageaction rightskipadaption rightsubguillemot righttoleft \
+righttolefthbox righttoleftvbox righttoleftvtop righttopbox rlap \
+rob robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+rollbutton rollbutton roman rtop rul \
+ruledhbox ruledhpack ruledmbox ruledtopv ruledtpack \
+ruledvbox ruledvpack ruledvtop runMPbuffer safechar \
+sans sansbold sansespace sanslignesenteteetpdp sanslignessupetinf \
+sansnormal sansserif savebox savebtxdataset savebuffer \
+savebuffer savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata \
+savetwopassdata sbox secondoffivearguments secondoffourarguments secondofsixarguments \
+secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \
+seeindex select selectionneblocs separeflottant serializecommalist \
+serializedcommalist serif serifbold serifnormal setJSpreamble \
+setMPlayer setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable \
+setMPvariables setbar setbigbodyfont setboxllx setboxlly \
+setbreakpoints setcapstrut setcatcodetable setcharacteralign setcharactercasing \
+setcharactercleaning setcharacterkerning setcharacterspacing setcharacterstripping setcharstrut \
+setcollector setcolormodell setcounter setcounterown setcurrentfontclass \
+setdataset setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument \
+setdocumentargumentdefault setdocumentfilename setdummyparameter setelementexporttag setemeasure \
+setevalue setevariable setevariables setfirstline setflag \
+setfont setfontcolorsheme setfontfeature setfontsolution setfontstrut \
+setgmeasure setgvalue setgvariable setgvariables sethyphenatedurlafter \
+sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector \
+setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements setinterfacemessage \
+setinterfacevariable setinternalrendering setitaliccorrection setlayer setlayerframed \
+setlayerframed setlayertext setlocalhsize setmainbodyfont setmainparbuilder \
+setmarker setmarking setmathstyle setmeasure setmessagetext \
+setmode setnostrut setnote setnote setnotetext \
+setnotetext setobject setoldstyle setpagegrid setpagereference \
+setpagestate setpagestaterealpageno setpenalties setpercentdimen setposition \
+setpositionbox setpositiondata setpositiondataplus setpositiononly setpositionplus \
+setpositionstrut setprofile setrandomseed setreference setreferencedobject \
+setregisterentry setreplacement setrigidcolumnbalance setrigidcolumnhsize setscript \
+setsectionblock setsimplecolumnhsize setsmallbodyfont setsmallcaps setstackbox \
+setstructurepageregister setstrut setsuperiors setsystemmode settabular \
+settaggedmetadata settext settightobject settightreferencedobject settightunreferencedobject \
+settrialtypesetting setuevalue setugvalue setunreferencedobject setup \
+setup setupMPgraphics setupMPinstance setupMPpage setupMPvariables \
+setupTABLE setupTEXpage setupattachment setupbackend setupbar \
+setupbleeding setupbookmark setupbtx setupbtx setupbtxdataset \
+setupbtxlabeltext setupbtxlist setupbtxregister setupbtxrendering setupbutton \
+setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed setupcollector \
+setupcolumnspan setupcombination setupcontent setupcounter setupdataset \
+setupdelimitedtext setupdescription setupdirections setupdocument setupeffect \
+setupenumeration setupenv setupexport setupexternalfigure setupexternalsoundtracks \
+setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed \
+setupfiller setupfirstline setupfittingpage setupfloatcaption setupfontexpansion \
+setupfontprotrusion setupfontsolution setupformula setupframedcontent setupframedtext \
+setupglobalreferenceprefix setupheadalternative setuphelp setuphigh setuphighlight \
+setuphyphenation setupindentedtext setupindex setupinitial setupinsertion \
+setupitaliccorrection setupitemgroup setupitemgroup setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinenote setuplinetable setuplistalternative \
+setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh \
+setuplowmidhigh setupmarginblock setupmargindata setupmarginframed setupmarginrule \
+setupmathalignment setupmathcases setupmathematics setupmathfence setupmathfraction \
+setupmathframed setupmathlabeltext setupmathmatrix setupmathornament setupmathradical \
+setupmathstackers setupmathstyle setupmixedcolumns setupmodule setupnotation \
+setupnote setupoffset setupoffsetbox setupoperatortext setupoutputroutine \
+setupoutputroutine setuppagechecker setuppagegrid setuppagegridarea setuppagegridareatext \
+setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection setuppageinjectionalternative \
+setuppageshift setuppagestate setuppairedbox setupparagraph setupparagraphintro \
+setupparallel setupperiods setupplacement setuppositionbar setupprefixtext \
+setupprocessor setupprofile setupquotation setuprealpagenumber setupreferenceformat \
+setupreferenceprefix setupreferencestructureprefix setuprenderingwindow setups setups \
+setupscale setupscript setupselector setupshift setupsidebar \
+setupspellchecking setupstretched setupstruts setupstyle setupsubformula \
+setuptabulation setuptagging setuptaglabeltext setuptextbackground setuptextflow \
+setuptooltip setupunit setupunittext setupuserpagenumber setupversion \
+setupviewerlayer setupvspacing setupwithargument setupwithargumentswapped setupxml \
+setupxtable setuvalue setuxvalue setvalue setvariable \
+setvariables setvisualizerfont setwidthof setxmeasure setxvalue \
+setxvariable setxvariables sfrac shapedhbox shiftdown \
+shiftup showallmakeup showattributes showboxes showbtxdatasetauthors \
+showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness showbtxdatasetfields showbtxdatasetfields \
+showbtxfields showbtxfields showbtxhashedauthors showbtxtables showchardata \
+showcharratio showcolorbar showcolorcomponents showcolorset showcolorstruts \
+showcounter showdirectives showdirsinmargin showedebuginfo showexperiments \
+showfont showfontdata showfontkerns showfontparameters showfontstrip \
+showfontstyle showglyphs showgridsnapping showhelp showhyphenationtrace \
+showhyphens showinjector showjustification showkerning showlayoutcomponents \
+showligature showligatures showlogcategories showmargins showmessage \
+showminimalbaseline shownextbox showotfcomposition showparentchain showsetupsdefinition \
+showtimer showtokens showtrackers showvalue showvariable \
+showwarning simplealignedbox simplealignedboxplus simplealignedspreadbox simplegroupedcommand \
+simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond sixthofsixarguments \
+slanted slantedbold slicepages slovenianNumerals sloveniannumerals \
+small smallbodyfont smallbold smallbolditalic smallboldslanted \
+smallcappedcharacters smallcappedromannumerals smaller smallitalicbold smallnormal \
+smallskip smallslanted smallslantedbold smalltype smash \
+smashbox smashboxed smashedhbox smashedvbox snaptogrid \
+snaptogrid someheadnumber somekindoftab somelocalfloat somenamedheadnumber \
+someplace sousnumeropage spanishNumerals spanishnumerals speech \
+splitdfrac splitfilename splitfrac splitoffbase splitofffull \
+splitoffkind splitoffname splitoffpath splitoffroot splitofftokens \
+splitofftype splitstring spreadhbox sqrt stackrel \
+startlinenote startregister startstructurepageregister stoplinenote stoppeJScode \
+stoppeJSpreamble stoppeLUA stoppeLUA stoppeMP stoppeMP \
+stoppeMPclip stoppeMPcode stoppeMPdefinitions stoppeMPdrawing stoppeMPdrawing \
+stoppeMPenvironment stoppeMPextensions stoppeMPinclusions stoppeMPinitializations stoppeMPpage \
+stoppeMPpositiongraphic stoppeMPpositionmethod stoppeMPrun stoppePARSEDXML stoppePARSEDXML \
+stoppeTABLE stoppeTABLE stoppeTABLEbody stoppeTABLEbody stoppeTABLEfoot \
+stoppeTABLEfoot stoppeTABLEhead stoppeTABLEhead stoppeTABLEnext stoppeTABLEnext \
+stoppeTC stoppeTD stoppeTDs stoppeTEX stoppeTEX \
+stoppeTEXpage stoppeTH stoppeTN stoppeTR stoppeTRs \
+stoppeTX stoppeTY stoppeXML stoppeXML stoppealign \
+stoppealigneadroite stoppealigneagauche stoppealigneaumilieu stoppealignment stoppeallmodes \
+stoppeappendices stoppearrangedpages stoppearriereplan stoppearriereplan stoppeattachment \
+stoppebackmatter stoppebar stoppebar stoppebitmapimage stoppeblockquote \
+stoppebodymatter stoppeboxedcolumns stoppebtxlabeltext stoppebtxrenderingdefinitions stoppebuffer \
+stoppebuffer stoppebut stoppecases stoppecatcodetable stoppecatcodetable \
+stoppecenteraligned stoppechapter stoppecharacteralign stoppecheckedfences stoppechemical \
+stoppecitation stoppeciter stoppecollect stoppecollecting stoppecolorintent \
+stoppecolorset stoppecolumns stoppecolumnspan stoppecom stoppecombination \
+stoppecombination stoppecomment stoppecomposant stoppecomposant stoppecontextcode \
+stoppecontextdefinitioncode stoppecouleur stoppecouleur stoppecouleur stoppectxfunction \
+stoppectxfunctiondefinition stoppecurrentcolor stoppecurrentlistentrywrapper stoppedelimited stoppedelimitedtext \
+stoppedisplaymath stoppedmath stoppedocument stoppeeffect stoppeelement \
+stoppeembeddedxtable stoppeembeddedxtable stoppeendnote stoppeendnote stoppeendofline \
+stoppeenvironement stoppeenvironement stoppeexceptions stoppeexpanded stoppeexpandedcollect \
+stoppeextendedcatcodetable stoppeexternalfigurecollection stoppefait stoppefigure stoppefiguretext \
+stoppefittingpage stoppefloatcombination stoppefloatcombination stoppefont stoppefontclass \
+stoppefontsolution stoppeformula stoppeformulas stoppeframed stoppeframedcontent \
+stoppeframedtext stoppefrontmatter stoppegot stoppegraphictext stoppegridsnapping \
+stoppegridsnapping stoppegroupe stoppehboxestohbox stoppehelptext stoppehiding \
+stoppehighlight stoppehyphenation stoppeimath stoppeindentation stoppeindentedtext \
+stoppeinteraction stoppeinterface stoppeintermezzotext stoppeintertext stoppeitemgroup \
+stoppeitemize stoppeknockout stoppelabeltexte stoppelayout stoppelegend \
+stoppeligne stoppeligneregleetexte stoppelinealignment stoppelinecorrection stoppelinenumbering \
+stoppelinenumbering stoppelines stoppelinetable stoppelinetablebody stoppelinetablecell \
+stoppelinetablehead stoppelocalfootnotes stoppelocalheadsetup stoppelocallinecorrection stoppelocalnotes \
+stoppelocalsetups stoppelocalsetups stoppelua stoppeluacode stoppeluaparameterset \
+stoppeluasetups stoppeluasetups stoppemakeup stoppemargereglee stoppemargereglee \
+stoppemarginblock stoppemarkedcontent stoppemathalignment stoppemathcases stoppemathlabeltext \
+stoppemathmatrix stoppemathmode stoppemathstyle stoppemathstyle stoppematrices \
+stoppematrix stoppemaxaligned stoppemdformula stoppemenuinteraction stoppemiddlealigned \
+stoppemixedcolumns stoppemode stoppemodeset stoppemodule stoppemodule \
+stoppemoduletestsection stoppempformula stoppenamedsection stoppenamedsubformulas stoppenarrow \
+stoppenarrow stoppenarrow stoppenarrower stoppenegative stoppenicelyfilledbox \
+stoppenointerference stoppenop stoppenotallmodes stoppenotepdp stoppenotepdp \
+stoppenotext stoppenotmode stoppeoperatortext stoppeopposite stoppeoutputstream \
+stoppeoverlay stoppeoverprint stoppepagecomment stoppepagefigure stoppepagegrid \
+stoppepagegridspan stoppepagelayout stoppepar stoppepar stoppeparagraph \
+stoppeparagraphs stoppeparagraphscell stoppeparbuilder stoppepart stoppepath \
+stoppeplacechemical stoppeplacefigure stoppeplaceflottant stoppeplaceformule stoppeplaceformule \
+stoppeplacegraphic stoppeplaceintermezzo stoppeplacelegende stoppeplacepairedbox stoppeplacetable \
+stoppepositioning stoppepositionoverlay stoppepositive stoppepostponing stoppeprefixtext \
+stoppeprocessassignmentcommand stoppeprocessassignmentlist stoppeprocesscommacommand stoppeprocesscommalist stoppeproduit \
+stoppeproduit stoppeprojet stoppeprojet stoppeprotect stoppeprotectedcolors \
+stoppepsh stoppepublication stoppepunctuation stopperandomized stopperandomseed \
+stopperaw stopperawsetups stopperawsetups stoppereadingfile stoppereferenceprefix \
+stoppereferenceprefix stopperegime stoppereusableMPgraphic stopperob stopperul \
+stoppescript stoppesdformula stoppesection stoppesectionblock stoppesectionblockenvironment \
+stoppesectionlevel stoppesetups stoppesetups stoppeshapebox stoppeshift \
+stoppesidebar stoppesimplecolumns stoppespecialitem stoppespecialitem stoppespecialitem \
+stoppespeech stoppespformula stoppespread stoppestartstop stoppestaticMPfigure \
+stoppestaticMPgraphic stoppestrictinspectnextcharacter stoppestrut stoppestyle stoppestyle \
+stoppesubformulas stoppesubject stoppesubsection stoppesubsentence stoppesubstack \
+stoppesubsubject stoppesubsubsection stoppesubsubsubject stoppesubsubsubsection stoppesubsubsubsubject \
+stoppesubsubsubsubsection stoppesubsubsubsubsubject stoppesymbolset stoppetable stoppetable \
+stoppetablehead stoppetables stoppetables stoppetabletail stoppetabletext \
+stoppetabulate stoppetabulatehead stoppetabulatetail stoppetagged stoppetaglabeltext \
+stoppetete stoppetexcode stoppetexcode stoppetexdefinition stoppetext \
+stoppetext stoppetextbackground stoppetextbackgroundmanual stoppetextcolor stoppetextcolorintent \
+stoppetextetete stoppetextflow stoppetitle stoppetokens stoppetxt \
+stoppetypescript stoppetypescriptcollection stoppetyping stoppetyping stoppeuniqueMPgraphic \
+stoppeuniqueMPpagegraphic stoppeunittext stoppeunpacked stoppeusableMPgraphic stoppeuseMPgraphic \
+stoppeusemathstyleparameter stoppeusingbtxspecification stoppeva stoppevboxtohbox stoppevboxtohboxseparator \
+stoppeviewerlayer stoppexcell stoppexcellgroup stoppexgroup stoppexmldisplayverbatim \
+stoppexmlinlineverbatim stoppexmlraw stoppexmlsetups stoppexmlsetups stoppexrow \
+stoppexrowgroup stoppextable stoppextable stoppextablebody stoppextablebody \
+stoppextablefoot stoppextablefoot stoppextablehead stoppextablehead stoppextablenext \
+stoppextablenext stopregister stopstructurepageregister strictdoifelsenextoptional strictdoifnextoptionalelse \
+stripcharacter strippedcsname strippedcsname stripspaces structurelistuservariable \
+structurenumber structuretitle structureuservariable structurevariable strut \
+strutdp strutht struthtdp struttedbox strutwd \
+style style styleinstance sub subject \
+subsection subsentence substituteincommalist subsubject subsubsection \
+subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection subsubsubsubsubject \
+subtractfeature subtractfeature suggestion suggestion swapcounts \
+swapdimens swapface swapmacros swaptypeface switchstyleonly \
+switchstyleonly switchtocolor switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace sym symbole \
+symbole symbolreference synchronizeblank synchronizeindenting synchronizemarking \
+synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog systemlogfirst \
+systemloglast systemsetups tLeftarrow tLeftrightarrow tRightarrow \
+tabulateautoline tabulateautorule tabulateline tabulaterule taggedctxcommand \
+taggedlabeltexts taglabellanguage taglabeltext tapebuffer tbinom \
+tbox tequal testandsplitstring testcolumn testfeature \
+testfeatureonce testpage testpageonly testpagesync testtokens \
+tete tex texdefinition texsetup textcitation \
+textcitation textcitation textcite textcite textcite \
+textcontrolspace textemarge textenotepdp textenotepdp textetete \
+textflowcollector textmath textminus textormathchar textplus \
+textvisiblespace tfrac thai thainumerals thefirstcharacter \
+thenormalizedbodyfontsize theremainingcharacters thickspace thinspace thinspace \
+thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded \
+thookleftarrow thookrightarrow threedigitrounding tibetannumerals tightlayer \
+tilde tinyfont title titremarge tlap \
+tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons \
+tmapsto tochar tolinenote topbox topleftbox \
+toplinebox toprightbox topskippedbox tracecatcodetables tracedfontname \
+traceoutputroutines tracepositions traduire traiteblocs traitfin \
+traitsfins transparencycomponents trel trightarrow trightharpoondown \
+trightharpoonup trightleftharpoons trightoverleftarrow triplebond truefilename \
+truefontname ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow \
+twodigitrounding tx txt txt txx \
+typ typ typedefinedbuffer typeface typescriptone \
+typescriptprefix typescriptthree typescripttwo typesetbuffer typesetfile \
+uconvertnumber uedcatcodecommand undefinevalue undepthed underbar \
+underbar underbars underbartext underbrace underbracetext \
+underbracket underbrackettext underdash underdashes underdot \
+underdots underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow \
+underparent underparenttext underrandom underrandoms underrightarrow \
+underrightharpoondown underrightharpoonup underset understrike understrikes \
+undertwoheadleftarrow undertwoheadrightarrow undoassign uneligne unframed \
+unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic unit \
+unitlanguage unittext unprotected unregisterhyphenationpattern unspaceafter \
+unspaceargument unspaced unspacestring untexargument untexcommand \
+uppercased uppercasestring upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote \
+upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote \
+url useMPenvironmentbuffer useMPgraphic useMPlibrary useMPrun \
+useMPvariables usealignparameter usebodyfont usebodyfontparameter usebtxdataset \
+usebtxdefinitions usecolors usecomponent usedummycolorparameter usedummystyleandcolor \
+usedummystyleparameter useenvironment useexternalrendering usefigurebase usefile \
+usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter \
+uselanguageparameter useluamodule usemathstyleparameter useproduct useprofileparameter \
+useproject usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure \
+usesubpath usetexmodule usetypescript usetypescriptfile usezipfile \
+utfchar utflower utfupper utiliseJSscripts utiliseURL \
+utiliseblocs utilisechemin utilisedocumentexterne utilisefigureexterne utilisemodule \
+utilisepsiteaudioexterne utilisesymboles utiliseurl utilityregisterlength va \
+vaalaboite vaalapage vaenbas valeurcouleur vboxreference \
+vec verbatim verbatimstring verbosenumber version \
+verticalgrowingbar verticalpositionbar veryraggedcenter veryraggedleft veryraggedright \
+vglue vide viewerlayer vl vphantom \
+vpos vsmash vsmashbox vsmashed vspace \
+vspacing wdofstring widthofstring widthspanningtext withoutpt \
+word words wordtonumber writedatatolist writestatus \
+xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument xequal \
+xfrac xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown \
+xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto xmladdindex \
+xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup \
+xmlapplyselectors xmlatt xmlattdef xmlattribute xmlattributedef \
+xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef \
+xmlchecknamespace xmlcommand xmlconcat xmlconcatrange xmlcontext \
+xmlcount xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore \
+xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty \
+xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext \
+xmldoifselfempty xmldoiftext xmlelement xmlfilter xmlfirst \
+xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure \
+xmlflushspacewise xmlflushtext xmlinclude xmlinclusion xmlinclusions \
+xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective xmllast \
+xmllastatt xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives \
+xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \
+xmlnamespace xmlnonspace xmlpath xmlpos xmlposition \
+xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata \
+xmlprocessfile xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups \
+xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname xmlremapnamespace \
+xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups \
+xmlsave xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup \
+xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \
+xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \
+xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \
+xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \
+xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \
+xxfrac xypos
keywordclass.context.it=\
-CAP Cap Caps Character \
-Characters GIORNOSETTIMANA Lettera Lettere MESE \
-MONTH Numeri Numeriromani PAROLA PAROLE \
-Parola Parole Romannumerals WEEKDAY WORD \
-WORDS Word Words about accoppiacarta \
-accoppiadocumento accoppiamarcatura accoppiapagina accoppiaregistro adaptlayout \
-adattacampo adattalayout al allineacentro allineadestra \
-allineasinistra altezzacarta altezzacartastampa altezzacima altezzaelenco \
-altezzafondo altezzaintestazione altezzamakeup altezzapdp altezzatesto \
-ambiente ampiezzabordo ampiezzabordodestro ampiezzabordosinistro ampiezzacarta \
-ampiezzacartastampa ampiezzaelenco ampiezzamakeup ampiezzamargine ampiezzamarginedestro \
-ampiezzamarginesinistro ampiezzatesto ap apagina appendix \
-arg at atleftmargin atpage atrightmargin \
-background barracolori barrainterazione barrasincronizzazione bastablocchi \
-bastafile blackrule blackrules blank bookmark \
-but button bypassblocks cambiaafontdeltesto campi \
-camporiempimento cap capello chapter character \
-characters chem chim circondato citazione \
-clip clonacampo clonefield colonna color \
-colore coloregrigio column comment commento \
-comparecolorgroup comparepalet completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms completeregister componenet confrontagruppocolori confrontatavolozza \
-convertinumero convertnumber copiacampo copyfield correctwhitespace \
-correggispaziobianco coupledocument coupledregister couplemarking couplepage \
-couplepaper coupleregister crlf currentdate currentheadnumber \
-cutspace da daqualcheparte data datadioggi \
-datareferral date decouplemarking decrementnumber define \
-defineblank defineblock definebodyfont definebodyfontDEF definebodyfontREF \
-definebodyfontenvironment definebuffer definecolor definecolorgroup definecolumnbreak \
-definecombination definecombinedlist defineconversion definedescription definedfont \
-defineenumeration definefield definefieldstack definefiguresymbol definefloat \
-definefont definefontfeature definefonthandling definefontsynonym defineframed \
-defineframedtext definehead defineindentedtext defineinmargin defineinteractionmenu \
-defineitemgroup definelabel definelayer definelist definelogo \
-definemakeup definemarking definemathalignment defineoutput defineoverlay \
-definepagebreak definepalet definepapersize defineparagraphs defineplacement \
-defineprofile defineprogram definereference definereferenceformat definereferencelist \
-defineregister definesection definesectionblock definesorting definestartstop \
-definesubfield definesymbol definesynonyms definetabletemplate definetabulate \
-definetext definetype definetypeface definetyping defineversion \
-definisci definisciaccento definisciambientefontdeltesto definisciblocco definiscibloccosezione \
-definiscibuffer definiscicampo definiscicampoprincipale definiscicapoversi definiscicarattere \
-definiscicolore definiscicomando definisciconversione definiscidescrizione definiscidimensionicarta \
-definiscielenco definiscielencocombinato definiscienumerazione definiscietichetta definiscifigurasimbolo \
-definiscifont definiscifontdeltesto definiscifontgrezzo definisciformatoriferimento definiscigruppocolonne \
-definiscigruppocolori definiscihbox definisciincorniciato definisciiniziatermina definiscilayout \
-definiscilinea definiscilistariferimenti definiscilogo definiscimakeup definiscimarcatura \
-definiscimenuinterazione definiscimodellotabella definiscioggettomobile definisciordinamento definiscioutput \
-definisciposizionetesto definisciprofilo definisciprogramma definisciregistro definisciriferimento \
-definiscirigovuoto definiscisezione definiscisimbolo definiscisinonimi definiscisinonimofont \
-definiscisottocampo definiscisovrapposizione definiscistackcampi definiscistile definiscistilefont \
-definiscitabulato definiscitavolozza definiscitesta definiscitesto definiscitestoincorniciato \
-definiscitype definiscityping definiscivariabiletesto definisciversion description \
-determinacaratteristicheregistro determinacarattersticheelenco determinanumerotesta determineheadnumber determinelistcharacteristics \
-dimensione disabilitamenuinterazione disableinteractionmenu distanzabordo distanzabordodestro \
-distanzabordosinistro distanzacima distanzafondo distanzaintestazione distanzamargine \
-distanzamarginedestro distanzamarginesinistro distanzapdp domicilio el \
-elaborablocchi elaborapagina elementi elemento emptylines \
-enumeration etichetta etichette externalfigure fatto \
-field fieldstack figuraesterna fillinfield fillinline \
-fillinrules fillintext fitfield fixedspaces followprofile \
-followprofileversion followversion fondo footnote footnotetext \
-forceblocks forzablocchi fraction framed framedtext \
-frazione from getbuffer getmarking getnumber \
-giornosettimana godown goto gotobox graycolor \
-grid griglia hairline head headnumber \
-headsym headtext hideblocks high hl \
-ignoto immediatebetweenlist immediatetolist impaccato impostaallineamento \
-impostaambientefontdeltesto impostaampiezzariga impostabarrainterazione impostabarrasincronizzazione impostablocchimargine \
-impostablocco impostabloccosezione impostabuffer impostacampi impostacampo \
-impostacapoversi impostacaption impostacaptions impostacima impostaclippling \
-impostacolonne impostacolore impostacolori impostacombinazioni impostacommento \
-impostacommentopagina impostadefinizionenotepdp impostadescrizioni impostadimensionicarta impostaelementi \
-impostaelencazioni impostaelenco impostaelencocombinato impostaenumerazioni impostafigureesterne \
-impostafondo impostafontdeltesto impostaforms impostaformule impostagruppocolonne \
-impostaincorniciato impostainiziatermina impostainmargine impostainstestazione impostainterazione \
-impostainterlinea impostalayout impostalegenda impostalinea impostalineemargine \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Cap Caps ConTeXt Context \
+ConvertConstantAfter ConvertToConstant ETEX EveryLine EveryPar \
+GIORNOSETTIMANA GetPar GotoPar Greeknumerals INRSTEX \
+LAMSTEX LATEX LUAJITTEX LUATEX LaTeX \
+LamSTeX Lettera Lettere LuaTeX LuajitTeX \
+MESE METAFONT METAFUN METAPOST MKII \
+MKIV MKIX MKVI MKXI MONTHLONG \
+MONTHSHORT MPII MPIV MPVI MPanchor \
+MPbetex MPc MPcode MPcolor MPcoloronly \
+MPcolumn MPd MPdrawing MPfontsizehskip MPgetmultipars \
+MPgetmultishape MPgetposboxes MPh MPinclusions MPleftskip \
+MPll MPlr MPls MPmenubuttons MPn \
+MPoptions MPoverlayanchor MPp MPpage MPpardata \
+MPplus MPpos MPpositiongraphic MPposset MPr \
+MPrawvar MPregion MPrest MPrightskip MPrs \
+MPstring MPtext MPtransparency MPul MPur \
+MPv MPvar MPvariable MPvv MPw \
+MPx MPxy MPxywhd MPy MetaFont \
+MetaFun MetaPost NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight \
+NormalizeTextWidth Numeri Numeriromani PAROLA PAROLE \
+PDFETEX PDFTEX PDFcolor PICTEX PPCHTEX \
+PPCHTeX PRAGMA Parola Parole PiCTeX \
+PointsToBigPoints PointsToReal PointsToWholeBigPoints PtToCm ReadFile \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Smallcapped TABLE TEX \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VerboseNumber \
+WidthSpanningText XETEX XeTeX abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals activatespacehandler acute adaptcollector \
+adaptpapersize adattacampo adattalayout addfeature addfeature \
+addtoJSpreamble addtocommalist addvalue aftersplitstring aftertestandsplitstring \
+al alignbottom aligned alignedbox alignedline \
+alignmentcharacter allineacentro allineadestra allineasinistra allinputpaths \
+alphabeticnumerals alwayscitation alwayscitation alwayscitation alwayscite \
+alwayscite alwayscite ambiente ambiente ampersand \
+anchor ap apagina appendetoks appendgvalue \
+appendtocommalist appendtoks appendtoksonce appendvalue apply \
+applyalternativestyle applyprocessor applytocharacters applytofirstcharacter applytosplitstringchar \
+applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced applytosplitstringword applytosplitstringwordspaced \
+applytowords arabicdecimals arabicexnumerals arabicnumerals arg \
+asciistr assignalfadimension assigndimen assigndimension assignifempty \
+assigntranslation assignvalue assignwidth assumelongusagecs astype \
+atleftmargin atrightmargin attachment autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+bar barracolori barrainterazione basegrid baselinebottom \
+baselineleftbox baselinemiddlebox baselinerightbox bbox beforesplitstring \
+beforetestandsplitstring big bigbodyfont bigg bigger \
+biggl biggm biggr bigl bigm \
+bigr bigskip binom bitmapimage blap \
+bleed bleedheight bleedwidth blockquote bodyfontenvironmentlist \
+bodyfontsize bold boldface bolditalic boldslanted \
+booleanmodevalue bottombox bottomleftbox bottomrightbox boxcursor \
+boxmarker boxofsize boxreference bpos breve \
+bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation btxalwayscitation \
+btxalwayscitation btxauthorfield btxdetail btxdirect btxdoif \
+btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked \
+btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse btxdoifuservariableelse \
+btxexpandedjournal btxfield btxfieldname btxfieldtype btxfirstofrange \
+btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort btxflushauthorname \
+btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname btxfoundtype \
+btxhybridcite btxhybridcite btxhybridcite btxhybridcite btxlabellanguage \
+btxlabeltext btxlistcitation btxlistcitation btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation btxtextcitation btxtextcitation buildmathaccent \
+buildtextaccent buildtextbottomcomma buildtextbottomdot buildtextcedilla buildtextgrave \
+buildtextmacron buildtextognek calligraphic cambiaafontdeltesto camel \
+campi cap capello catcodetablename cbox \
+centeraligned centerbox centeredbox centeredlastline centerednextbox \
+centerline cfrac chapter chardescription charwidthlanguage \
+check checkcharacteralign checkedchar checkedfiller checkedstrippedcsname \
+checkedstrippedcsname checkinjector checknextindentation checknextinjector checkpage \
+checkparameters checkpreviousinjector checksoundtrack checktwopassdata chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chim chineseallnumerals chinesecapnumerals chinesenumerals circondato \
+citation citation citation citation citazione \
+cite cite cite cite clap \
+classfont cldcommand cldcontext cldloadfile cldprocessfile \
+cleftarrow clip clonacampo collect collectedtext \
+collectexpanded colonna colorcomponents colore colored \
+colored coloregrigio columnbreak com combinepages \
+commalistelement commalistsentence commalistsize comment commento \
+comparedimension comparedimensioneps completebtxrendering completecontent completeindex \
+completelist completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics \
+completelistofintermezzi completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms \
+completelistoftables completeregister complexorsimple complexorsimple complexorsimpleempty \
+complexorsimpleempty componenet componenet composedcollector composedlayer \
+compresult confrontagruppocolori confrontatavolozza constantdimen constantdimenargument \
+constantemptyargument constantnumber constantnumberargument contentreference continuednumber \
+continueifinputfile convertargument convertcommand convertedcounter converteddimen \
+convertedsubcounter convertinumero convertmonth convertvalue convertvboxtohbox \
+copiacampo copybtxlabeltext copyheadtext copylabeltext copymathlabeltext \
+copyoperatortext copypages copyparameters copyposition copyprefixtext \
+copytaglabeltext copyunittext correggispaziobianco countersubs counttoken \
+counttokens cramped crampedclap crampedllap crampedrlap \
+crightarrow crightoverleftarrow ctop ctxcommand ctxdirectcommand \
+ctxdirectlua ctxfunction ctxlatecommand ctxlatelua ctxloadluafile \
+ctxlua ctxluabuffer ctxluacode ctxreport ctxsprint \
+currentassignmentlistkey currentassignmentlistvalue currentbtxuservariable currentcommalistitem currentcomponent \
+currentenvironment currentfeaturetest currentinterface currentlanguage currentlistentrydestinationattribute \
+currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute currentlistentrytitle \
+currentlistentrytitlerendered currentlistsymbol currentmainlanguage currentmessagetext currentmoduleparameter \
+currentoutputstream currentproduct currentproject currentregime currentregisterpageuserdata \
+currentresponses currenttime currentvalue currentxtablecolumn currentxtablerow \
+d da daqualcheparte data datadioggi \
+datasetvariable dayoftheweek dayspermonth dbinom ddot \
+decrement decrement decrementcounter decrementedcounter decrementpagenumber \
+decrementsubpagenumber decrementvalue defaultinterface defaultobjectpage defaultobjectreference \
+defcatcodecommand defconvertedargument defconvertedcommand defconvertedvalue defineMPinstance \
+defineTABLEsetup defineactivecharacter definealternativestyle defineanchor defineattachment \
+defineattribute definebackground definebar definebodyfontswitch definebreakpoint \
+definebreakpoints definebtx definebtxdataset definebtxregister definebtxrendering \
+definebutton definecapitals definecharacterkerning definecharacterspacing definechemical \
+definechemicals definechemicalsymbol definecollector definecolumnbreak definecombination \
+definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty \
+defineconversionset definecounter definedataset definedelimitedtext definedfont \
+defineeffect defineenumerations defineexpandable defineexternalfigure definefallbackfamily \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamily definefontfamilypreset \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineframedcontent definefrozenfont defineglobalcolor \
+defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative definehelp \
+definehigh definehighlight definehspace definehypenationfeatures defineindentedtext \
+defineindenting defineinitial defineinsertion defineinteraction defineinteractionbar \
+defineinterfaceconstant defineinterfaceelement defineinterfacevariable defineinterlinespace defineinterlinespace \
+defineintermediatecolor defineitemgroup defineitems definelabelclass definelayer \
+definelayerpreset definelayerpreset definelinenote definelinenumbering definelines \
+definelistalternative definelistextra definelow definelowhigh definelowmidhigh \
+definemarginblock definemargindata definemarker definemathaccent definemathalignment \
+definemathcases definemathcommand definemathdoubleextensible definemathematics definemathextensible \
+definemathfence definemathfraction definemathframed definemathmatrix definemathornament \
+definemathoverextensible definemathovertextextensible definemathradical definemathstackers definemathstyle \
+definemathtriplet definemathunderextensible definemathundertextextensible definemathunstacked definemeasure \
+definemessageconstant definemixedcolumns definemode definemultitonecolor definenamedcolor \
+definenamedcolor definenamespace definenarrower definenote defineornament \
+defineornament defineoutputroutine defineoutputroutinecommand definepage definepagebreak \
+definepagechecker definepagegrid definepagegridarea definepagegridspan definepageinjection \
+definepageinjectionalternative definepageshift definepagestate definepairedbox defineparagraph \
+defineparallel defineparbuilder defineplacement definepositioning defineprefixset \
+defineprocesscolor defineprocessor definepushbutton definepushsymbol definerenderingwindow \
+defineresetset definescale definescript definesectionlevels defineselector \
+defineseparatorset defineshift definesidebar definesort definespotcolor \
+definestyleinstance definesubformula definesynonym definesystemattribute definesystemconstant \
+definesystemvariable definetabulation definetextbackground definetextflow definetooltip \
+definetransparency definetwopasslist definetypeface definetypescriptprefix definetypescriptsynonym \
+definetypesetting defineunit defineviewerlayer definevspace definevspacing \
+definevspacingamount definextable definisci definisciaccento definisciambientefontdeltesto \
+definisciblocco definiscibloccosezione definiscibuffer definiscicampo definiscicapoversi \
+definiscicarattere definiscicolore definiscicolore definiscicomando definisciconversione \
+definisciconversione definiscidescrizione definiscidimensionicarta definiscidimensionicarta definiscielenco \
+definiscielencocombinato definiscietichetta definiscifigurasimbolo definiscifont definiscifont \
+definiscifontdeltesto definiscifontdeltesto definisciformatoriferimento definiscigruppocolori definiscihbox \
+definisciincorniciato definisciiniziatermina definiscilayout definiscimakeup definiscimarcatura \
+definiscimenuinterazione definiscimodellotabella definiscioggettomobile definiscioggettomobile definisciordinamento \
+definisciprofilo definisciprogramma definisciregistro definisciriferimento definiscisezione \
+definiscisimbolo definiscisinonimi definiscisinonimofont definiscisottocampo definiscisovrapposizione \
+definiscistackcampi definiscistile definiscistilefont definiscitabulato definiscitavolozza \
+definiscitavolozza definiscitesta definiscitesto definiscitestoincorniciato definiscitype \
+definiscityping delimited delimitedtext depthofstring depthonlybox \
+depthspanningtext determinacaratteristicheregistro determinacarattersticheelenco determinanumerotesta determinenoflines \
+devanagarinumerals dfrac digits digits dimensiontocount \
+directcolor directcolored directcolored directconvertedcounter directdummyparameter \
+directgetboxllx directgetboxlly directhighlight directlocalframed directluacode \
+directselect directsetbar directsetup directsymbol directvspacing \
+dis disabledirectives disableexperiments disablemode disableoutputstream \
+disableparpositions disableregime disabletrackers displaymath displaymathematics \
+displaymessage distributedhsize dividedsize doadaptleftskip doadaptrightskip \
+doaddfeature doassign doassignempty doboundtext docheckassignment \
+docheckedpagestate docheckedpair documentvariable dodoubleargument dodoubleargumentwithset \
+dodoubleempty dodoubleemptywithset dodoublegroupempty doeassign doexpandedrecurse \
+dogetattribute dogetattributeid dogetcommacommandelement dogobbledoubleempty dogobblesingleempty \
+doif doifMPgraphicelse doifallcommon doifallcommonelse doifalldefinedelse \
+doifallmodes doifallmodeselse doifassignmentelse doifblackelse doifbothsides \
+doifbothsidesoverruled doifboxelse doifbufferelse doifcolor doifcolorelse \
+doifcommandhandler doifcommandhandlerelse doifcommon doifcommonelse doifcontent \
+doifconversiondefinedelse doifconversionnumberelse doifcounter doifcounterelse doifcurrentfonthasfeatureelse \
+doifdefined doifdefinedcounter doifdefinedcounterelse doifdefinedelse doifdimensionelse \
+doifdimenstringelse doifdocumentargument doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse \
+doifdrawingblackelse doifelse doifelseMPgraphic doifelseallcommon doifelsealldefined \
+doifelseallmodes doifelseassignment doifelseblack doifelsebox doifelsebuffer \
+doifelsecolor doifelsecommandhandler doifelsecommon doifelseconversiondefined doifelseconversionnumber \
+doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused \
+doifelsedefined doifelsedefinedcounter doifelsedimension doifelsedimenstring doifelsedocumentargument \
+doifelsedocumentfilename doifelsedrawingblack doifelseempty doifelseemptyvalue doifelseemptyvariable \
+doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory \
+doifelsefigure doifelsefile doifelsefiledefined doifelsefileexists doifelsefirstchar \
+doifelseflagged doifelsefontchar doifelsefontpresent doifelsefontsynonym doifelsehasspace \
+doifelsehelp doifelseincsname doifelseinelement doifelseinputfile doifelseinsertion \
+doifelseinset doifelseinstring doifelseinsymbolset doifelseintoks doifelseintwopassdata \
+doifelseitalic doifelselanguage doifelselayerdata doifelselayoutdefined doifelselayoutsomeline \
+doifelselayouttextline doifelseleapyear doifelselist doifelselocation doifelselocfile \
+doifelsemainfloatbody doifelsemarking doifelsemeaning doifelsemessage doifelsemode \
+doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar doifelsenextoptional doifelsenextoptionalcs \
+doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage doifelsenothing doifelsenumber \
+doifelseobjectfound doifelseobjectreferencefound doifelseoddpage doifelseoddpagefloat doifelseoldercontext \
+doifelseolderversion doifelseoverlapping doifelseoverlay doifelseparallel doifelseparentfile \
+doifelsepath doifelsepathexists doifelsepatterns doifelseposition doifelsepositionaction \
+doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound \
+doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference doifelsesamestring doifelsesetups \
+doifelsesomebackground doifelsesomespace doifelsesomething doifelsesometoks doifelsestringinstring \
+doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined doifelsesymbolset doifelsetext \
+doifelsetextflow doifelsetextflowcollector doifelsetypingfile doifelseundefined doifelseurldefined \
+doifelsevalue doifelsevaluenothing doifelsevariable doifempty doifemptyelse \
+doifemptytoks doifemptyvalue doifemptyvalueelse doifemptyvariable doifemptyvariableelse \
+doifenv doifenvelse doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse \
+doiffieldcategoryelse doiffigureelse doiffile doiffiledefinedelse doiffileelse \
+doiffileexistselse doiffirstcharelse doifflaggedelse doiffontcharelse doiffontpresentelse \
+doiffontsynonymelse doifhasspaceelse doifhelpelse doifincsnameelse doifinelementelse \
+doifinputfileelse doifinsertionelse doifinset doifinsetelse doifinstring \
+doifinstringelse doifinsymbolset doifinsymbolsetelse doifintokselse doifintwopassdataelse \
+doifitalicelse doiflanguageelse doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse \
+doiflayouttextlineelse doifleapyearelse doiflistelse doiflocationelse doiflocfileelse \
+doifmainfloatbodyelse doifmarkingelse doifmeaningelse doifmessageelse doifmode \
+doifmodeelse doifnextbgroupcselse doifnextbgroupelse doifnextcharelse doifnextoptionalcselse \
+doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse doifnot doifnotallcommon \
+doifnotallmodes doifnotcommandhandler doifnotcommon doifnotcounter doifnotdocumentargument \
+doifnotdocumentfilename doifnotempty doifnotemptyvalue doifnotemptyvariable doifnotenv \
+doifnoteonsamepageelse doifnotescollected doifnotfile doifnotflagged doifnothing \
+doifnothingelse doifnotinset doifnotinsidesplitfloat doifnotinstring doifnotmode \
+doifnotnumber doifnotsamestring doifnotsetups doifnotvalue doifnotvariable \
+doifnumber doifnumberelse doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse \
+doifoddpagefloatelse doifoldercontextelse doifolderversionelse doifoverlappingelse doifoverlayelse \
+doifparallelelse doifparentfileelse doifpathelse doifpathexistselse doifpatternselse \
+doifposition doifpositionaction doifpositionactionelse doifpositionelse doifpositiononpageelse \
+doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse \
+doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring doifsamestringelse doifsetups \
+doifsetupselse doifsomebackground doifsomebackgroundelse doifsomespaceelse doifsomething \
+doifsomethingelse doifsometoks doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse \
+doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse doiftext doiftextelse \
+doiftextflowcollectorelse doiftextflowelse doiftypingfileelse doifundefined doifundefinedcounter \
+doifundefinedelse doifurldefinedelse doifvalue doifvalueelse doifvaluenothing \
+doifvaluenothingelse doifvaluesomething doifvariable doifvariableelse doindentation \
+dollar doloop doloopoverlist donothing dontconvertfont \
+dontleavehmode dontpermitspacesbetweengroups dopositionaction doprocesslocalsetups doquadrupleargument \
+doquadrupleempty doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty \
+dorechecknextindentation dorecurse dorecurse dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature dot dotfskip dotoks dotripleargument \
+dotripleargumentwithset dotripleempty dotripleemptywithset dotriplegroupempty doublebar \
+doublebond doublebrace doublebracket doubleparent dowith \
+dowithnextbox dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument \
+dowithrange dowithwargument dpofstring dummydigit dummyparameter \
+eTeX edefconvertedargument efcmaxheight efcmaxwidth efcminheight \
+efcminwidth efcparameter effect el elaborablocchi \
+elapsedseconds elapsedtime eleftarrowfill eleftharpoondownfill eleftharpoonupfill \
+eleftrightarrowfill elementi elemento emphasisboldface emphasistypeface \
+emptylines emspace enabledirectives enableexperiments enablemode \
+enableoutputstream enableparpositions enableregime enabletrackers endnote \
+endnote enskip enspace env envvar \
+eoverbarfill eoverbracefill eoverbracketfill eoverparentfill epos \
+equaldigits erightarrowfill erightharpoondownfill erightharpoonupfill ethiopic \
+etwoheadrightarrowfill eunderbarfill eunderbracefill eunderbracketfill eunderparentfill \
+executeifdefined exitloop exitloopnow expandcheckedcsname expanded \
+expandfontsynonym externalfigurecollectionmaxheight externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth \
+externalfigurecollectionparameter fakebox fastdecrement fastincrement fastlocalframed \
+fastscale fastsetup fastsetupwithargument fastsetupwithargumentswapped fastswitchtobodyfont \
+fastsxsy feature feature fence fenced \
+fetchallmarkings fetchallmarks fetchmark fetchmarking fetchonemark \
+fetchonemarking fetchruntinecommand fetchtwomarkings fetchtwomarks fieldbody \
+fifthoffivearguments fifthofsixarguments figuraesterna figurefilename figurefilepath \
+figurefiletype figurefullname figureheight figurenaturalheight figurenaturalwidth \
+figuresymbol figurewidth filename filledhboxb filledhboxc \
+filledhboxg filledhboxk filledhboxm filledhboxr filledhboxy \
+filler filterfromnext filterfromvalue filterpages filterreference \
+findtwopassdata finishregisterentry firstcharacter firstcounter firstcountervalue \
+firstoffivearguments firstoffourarguments firstofoneargument firstofoneunexpanded firstofsixarguments \
+firstofthreearguments firstofthreeunexpanded firstoftwoarguments firstoftwounexpanded firstrealpage \
+firstrealpagenumber firstsubcountervalue firstsubpage firstsubpagenumber firstuserpage \
+firstuserpagenumber fitfieldframed fittopbaselinegrid flag floatuserdataparameter \
+flushcollector flushlayer flushlocalfloats flushnextbox flushnotes \
+flushoutputstream flushshapebox flushtextflow flushtokens flushtoks \
+fondo fondo fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle forcecharacterstripping forcelocalfloats forgeteverypar \
+forgetparameters forgetragged formula foundbox fourthoffivearguments \
+fourthoffourarguments fourthofsixarguments frac frameddimension framedparameter \
+framedtext freezedimenmacro freezemeasure frenchspacing fromlinenote \
+frozenhbox gdefconvertedargument gdefconvertedcommand getMPdrawing getMPlayer \
+getboxllx getboxlly getbufferdata getcommacommandsize getcommalistsize \
+getdayoftheweek getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault \
+getdocumentfilename getdummyparameters getemptyparameters geteparameters getexpandedparameters \
+getfiguredimensions getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist \
+getfromtwopassdata getglyphdirect getglyphstyled getgparameters getlasttwopassdata \
+getlocalfloat getlocalfloats getmessage getnamedglyphdirect getnamedglyphstyled \
+getnamedtwopassdatalist getnaturaldimensions getnoflines getobject getobjectdimensions \
+getpaletsize getparameters getrandomcount getrandomdimen getrandomfloat \
+getrandomnumber getrandomseed getraweparameters getrawgparameters getrawnoflines \
+getrawparameters getrawxparameters getreference getreferenceentry getroundednoflines \
+getsubstring gettwopassdata gettwopassdatalist getuvalue getvalue \
+getvariable getvariabledefault getxparameters giornosettimana globaldisablemode \
+globalenablemode globalletempty globalpopbox globalpopmacro globalpreventmode \
+globalprocesscommalist globalpushbox globalpushmacro globalswapcounts globalswapdimens \
+globalswapmacros globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments \
+gobblefivearguments gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments \
+gobbleoneargument gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments \
+gobblespacetokens gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments \
+gobbletwooptionals gobbleuntil gobbleuntilrelax got grabbufferdata \
+grabbufferdatadirect grabuntil grave grayvalue greedysplitstring \
+greeknumerals griglia groupedcommand gsetboxllx gsetboxlly \
+gujaratinumerals gurmurkhinumerals hairspace halfwaybox handletokens \
+handwritten hangul hanzi hash hat \
+hboxofvbox hboxreference hdofstring headhbox headlanguage \
+headnumbercontent headnumberdistance headnumberwidth headreferenceattributes headsym \
+headtextcontent headtexts headtextwidth headvbox headwidth \
+heightanddepthofstring heightofstring heightspanningtext helptext hglue \
+hiddencitation hiddencite highlight highordinalstr hilo \
+himilo hl horizontalgrowingbar horizontalpositionbar hphantom \
+hpos hsizefraction hsmash hsmashbox hsmashed \
+hspace htdpofstring htofstring hyphen hyphenatedcoloredword \
+hyphenatedfile hyphenatedfilename hyphenatedhbox hyphenatedpar hyphenatedurl \
+hyphenatedword ibox ifassignment iff ifinobject \
+ifinoutputstream ifparameters iftrialtypesetting ignoreimplicitspaces ignorevalue \
+ignoto immediatesavetwopassdata impliedby implies impostaallineamento \
+impostaampiezzariga impostabarrainterazione impostablocco impostabloccosezione impostabuffer \
+impostacampi impostacampo impostacapoversi impostacapoversi impostacaption \
+impostacima impostaclippling impostacolonne impostacolore impostacolori \
+impostacommento impostacommentopagina impostadimensionicarta impostadimensionicarta impostaelementi \
+impostaelenco impostaelencocombinato impostafondo impostafontdeltesto impostaforms \
+impostaincorniciato impostainiziatermina impostainstestazione impostainterazione impostainterazione \
+impostainterlinea impostainterlinea impostainterlinea impostainterlinea impostainterlinea \
+impostainterlinea impostalayout impostalayout impostalegenda impostalineemargine \
impostalineenere impostalineeriempimento impostalineesottili impostalineetesto impostalingua \
-impostalistariferimenti impostamaiuscole impostamakeup impostamarcatura impostamenuinterazione \
-impostamenzione impostanotepdp impostanumerazione impostanumerazionecapoversi impostanumerazionepagina \
-impostanumerazionerighe impostanumeropagina impostanumerosottopagina impostanumerotesta impostaoggettimobili \
-impostaoggettomobile impostaordinamento impostaoutput impostaparranging impostapdp \
-impostapiustretto impostaposizionamento impostaposizionamentoopposti impostaposizionetesto impostaprofili \
-impostaprogrammi impostapubblicazioni impostapulsanti impostaregistro impostarientro \
-impostariferimento impostarighe impostarigheriempimento impostarigovuoto impostarotazione \
-impostaschermi impostaschermointerazione impostasegnosillabazione impostasetsimboli impostasezione \
-impostasfondi impostasfondo impostasincronizzazione impostasinonimi impostasistema \
-impostasottolinea impostaspaziatura impostaspaziobianco impostaspezzamentooggettomobile impostastrut \
-impostatab impostatabelle impostatabulato impostatavolozza impostatesta \
-impostateste impostatesticima impostatestifondo impostatestiincorniciati impostatestiintestazioni \
-impostatestipdp impostatesto impostatestoetichette impostatestointestazioni impostatestotesti \
-impostatolleranza impostatransizionepagina impostatype impostatyping impostaurl \
-impostavariabiletesto impostaversioni in inaltromargine incorniciato \
-incrementanumero indentation indenting indestra inframed \
-ininner iniziaallineamento iniziaambiente iniziabloccomargine iniziacitazione \
-iniziacodifica iniziacolonne iniziacolore iniziacombinazione iniziacomponente \
-iniziacorrezioneriga iniziadocumento iniziafigura iniziaglobale iniziagruppocolonne \
-iniziaimpaccato inizialineamargine inizialineatesto inizialocale iniziamakeup \
-inizianotepdplocali inizianumerazionerighe iniziaopposto iniziaoverview iniziapiustretto \
-iniziaposizionamento iniziaprodotto iniziaprofilo iniziaprogetto iniziaraster \
-iniziariga iniziarighe iniziasetsimboli iniziasfondo iniziasincronizzazione \
-iniziasovrapposizione iniziatabella iniziatabelle iniziatesto iniziaunpacked \
-iniziaversione inlatodestro inlatosinistro inleft inline \
-inmaframed inmargin inmargine inmarginedestro inmarginesinistro \
-inneredgedistance inneredgewidth innermargindistance innermarginwidth inothermargin \
-inouter inriga inright insinistra installalingua \
-installlanguage interactionbar interactionbuttons intorno item \
-items its keepblocks labeling labels \
-labeltext language leftaligned leg lettera \
-lettere lineamargine lineanera lineasottile lineatesto \
-lineenere lineeriempimento lineesottili lingua linguaprincipale \
-listsymbol livellotesta loadsorts loadsynonyms logcampi \
-logfields lohi low lunghezzaelenco maframed \
-mainlanguage mapfontsize mar marcatura marcaversione \
-marginrule margintext marking markversion matematica \
-mathematics mediaeval menuinterattivo menzione mese \
-mettielenco mettielencocombinato mettifiancoafianco mettiformula mettiingriglia \
-mettilegenda mettilinea mettiloghi mettinotepdp mettinotepdplocali \
-mettinumeropagina mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro \
-mettivariabiletesto midaligned mirror month mostraambientefontdeltesto \
-mostracampi mostracolore mostracornice mostrafiguresterne mostrafontdeltesto \
-mostragriglia mostragruppocolori mostraimpostazioni mostralyout mostramakeup \
-mostrasetsimboli mostrastampa mostrastruts mostratavolozza moveongrid \
-movesidefloat name nascondiblocchi navigating nextsection \
-nientedimensioni nienteelenco nientelineecimafondo nientelineintestazionepdp nientemarcatura \
-nienterientro nientespazio nientespaziobianco nocap noheaderandfooterlines \
-noindenting nolist nomarking nome nomeunita \
-nomoreblocks nomorefiles nop nospace nota \
-notapdp note notest notopandbottomlines nowhitespace \
-numberofsubpages numbers numeri numeriromani numeroformula \
-numeropagina numeropaginacompleto numerosottoformula numerotesta numerotestacorrente \
-numerototaledipagine outeredgedistance outeredgewidth outermargindistance outermarginwidth \
-overbar overbars overstrike overstrikes packed \
-page pagedepth pageoffset pagereference pagina \
-paragraph paroladestra parolainmargine part passaafontgrezzo \
-ped pedap periods perlungo placebookmarks \
-placecombinedlist placefloat placefootnotes placeformula placelegend \
-placelist placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes \
-placelogos placeongrid placeontopofeachother placerawlist placereferencelist \
-placeregister placesidebyside placesubformula position posizionanumerotesta \
-posizionatesto posizionatestotesta posizione prendibuffer prendimarcatura \
-processblocks processpage prodotto progetto program \
-programma pubblicazione publication pulsante pulsantemenu \
-pulsantinterazione punti qualcheriga quotation quote \
-ran ref reference referral referraldate \
-referring register reimposta reimpostamarcatura reservefloat \
-reset resetmarking resetnumber resettextcontent rientro \
-rif rifai riferimento riferimentopagina riferimentotesto \
-riflessione rigariempimento rightaligned rigovuoto romannumerals \
-rotate ruota saltablocchi scala scale \
-schermo screen scrividentroelenco scriviinelenco scriviinlistariferimenti \
-scriviinregistro section seeregister segnalibro seguiprofilo \
-seguiversione seguiversioneprofilo selectblocks selectpaper selectversion \
-selezionablocchi selezionacarta selezionaversione separamarcatura setnumber \
-settext settextcontent setupalign setupanswerarea setuparranging \
-setupbackground setupbackgrounds setupblackrules setupblank setupblock \
-setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer \
-setupbuttons setupcapitals setupcaption setupcaptions setupclipping \
-setupcolor setupcolors setupcolumns setupcolumnsetlines setupcolumnsetstart \
-setupcombinations setupcombinedlist setupcomment setupdescriptions setupenumerations \
-setupexternalfigures setupfield setupfields setupfillinlines setupfillinrules \
-setupfloat setupfloats setupfloatsplitting setupfonthandling setupfontsynonym \
-setupfooter setupfootertexts setupfootnotedefinition setupfootnotes setupforms \
-setupformulas setupframed setupframedtexts setuphead setupheader \
-setupheadertexts setupheadnumber setupheads setupheadtext setuphyphenmark \
-setupindentedtext setupindenting setupinmargin setupinteraction setupinteractionbar \
-setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 setupitemgroup \
-setupitems setuplabeltext setuplanguage setuplayout setuplegend \
-setuplinenumbering setuplines setuplinewidth setuplist setuplistalternative \
-setupmakeup setupmarginblocks setupmarginrules setupmarking setupmathalignment \
-setupnarrower setupnumbering setupoppositeplacing setupoutput setuppagenumber \
-setuppagenumbering setuppagetransitions setuppalet setuppaper setuppapersize \
-setupparagraphnumbering setupparagraphs setupplacement setuppositioning setupprofiles \
-setupprograms setuppublications setupquote setupreferencelist setupreferencing \
-setupregister setuprotate setupscreens setupsection setupsectionblock \
-setupsorting setupspacing setupstrut setupsubpagenumber setupsymbolset \
-setupsynchronization setupsynchronizationbar setupsynonyms setupsystem setuptab \
-setuptables setuptabulate setuptext setuptextrules setuptexttexts \
-setupthinrules setuptolerance setuptop setuptoptexts setuptype \
-setuptyping setupunderbar setupurl setupversions setupwhitespace \
-setvariabiletesto sfondo showbodyfont showbodyfontenvironment showcolor \
-showcolorgroup showexternalfigures showfields showframe showgrid \
-showlayout showmakeup showpalet showprint showsetups \
-showstruts showsymbolset sim simbolo sincronizza \
-someline somewhere sort space spazifissi \
-spazio spaziobianco spaziocima spaziodietro spaziofisso \
-spaziofondo spessoreriga spezzaoggettomobile splitfloat spostaagriglia \
-spostaformula stackcampi startalignment startbackground startbuffer \
-startcolor startcolumnmakeup startcolumns startcombination startcomment \
-startcomponent startdescription startdocument startenumeration startenvironment \
-startfact startfigure startfloattext startformula startframedtext \
-starthiding startinteractionmenu startitemgroup startlegend startline \
-startlinecorrection startlinenumbering startlines startlocal startlocalenvironment \
-startlocalfootnotes startmakeup startmarginblock startmarginrule startnamemakeup \
-startnarrower startopposite startoverlay startoverview startpacked \
-startparagraph startpositioning startpostponing startproduct startprofile \
-startproject startquotation startregister startsymbolset startsynchronization \
-starttable starttables starttabulate starttextrule starttyping \
-startunpacked startversion stirato stopalignment stopbackground \
-stopbuffer stopcolor stopcolumnmakeup stopcolumns stopcombination \
-stopcomment stopcomponent stopdescription stopdocument stopenumeration \
-stopenvironment stopfact stopfigure stopfloattext stopformula \
-stopframedtext stophiding stopinteractionmenu stopitemgroup stoplegend \
-stopline stoplinecorrection stoplinenumbering stoplines stoplocal \
-stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmarginrule \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview \
-stoppacked stopparagraph stoppositioning stoppostponing stopproduct \
-stopprofile stopproject stopquotation stopsymbolset stopsynchronization \
-stoptable stoptables stoptabulate stoptextrule stoptyping \
-stopunpacked stopversion stretched sub subject \
-subpagenumber subsection subsubject subsubsection subsubsubject \
-switchtobodyfont sym symbol synchronizationbar synchronize \
-synonym tab terminaallineamento terminaambiente terminabloccomargine \
-terminacitazione terminacodifica terminacolonne terminacolore terminacombinazione \
-terminacomponente terminacorrezioneriga terminadocumento terminaglobale terminagruppocolonne \
-terminaimpaccato terminalineamargine terminalineatesto terminalocale terminamakeup \
-terminanotepdplocali terminanumerazionerighe terminaopposto terminaoverview terminapiustretto \
-terminaposizionamento terminaprodotto terminaprofili terminaprogetto terminaraster \
-terminariga terminarighe terminasfondo terminasincronizzazione terminasovrapposizione \
-terminatabella terminatabelle terminatesto terminaunpacked terminaversioni \
-testa testcolumn testoetichetta testoinmargine testoinstestazioni \
-testonotapdp testoriempimento testpage tex textreference \
-textrule thinrule thinrules tieniblocchi title \
-titoloinmargine tooltip traduci translate txt \
-typ type typebuffer typefile underbar \
-underbars usaJSscripts usaURL usablocco usacartella \
-usacodifica usacolonnasonoraesterna usacomandi usadocumentoesterno usafiguraesterna \
-usafileesterni usafileesterno usamoduli usamodulo usariferimenti \
-usasimboli usaspecialita usaurl useURL useXMLfilter \
-useblocks usecommands usedirectory useencoding useexternaldocument \
-useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule \
-usereferences usespecials usesymbols usetypescript usetypescriptfile \
+impostamaiuscole impostamakeup impostamarcatura impostamenuinterazione impostamenzione \
+impostanumerazionecapoversi impostanumerazionepagina impostanumerazionerighe impostanumeropagina impostanumerosottopagina \
+impostanumerotesta impostaoggettomobile impostaordinamento impostaparranging impostapdp \
+impostapiustretto impostaposizionamento impostaposizionamentoopposti impostaprogrammi impostaregistro \
+impostaregistro impostarientro impostariferimento impostarighe impostarigheriempimento \
+impostarigovuoto impostarotazione impostaschermointerazione impostasegnosillabazione impostasetsimboli \
+impostasfondi impostasfondi impostasfondo impostasinonimi impostaspaziatura \
+impostaspaziobianco impostaspezzamentooggettomobile impostatabelle impostatabulato impostatavolozza \
+impostatesta impostatesticima impostatestifondo impostatestiintestazioni impostatestipdp \
+impostatesto impostatestoetichette impostatestointestazioni impostatestotesti impostatolleranza \
+impostatransizionepagina impostatype impostatyping impostaurl in \
+includemenu includeversioninfo incorniciato increment increment \
+increment increment incrementcounter incrementedcounter incrementpagenumber \
+incrementsubpagenumber incrementvalue indentation indestra index \
+index infofont infofontbold inheritparameter inhibitblank \
+ininner ininneredge ininnermargin initializeboxstack iniziaJScode \
+iniziaJSpreamble iniziaLUA iniziaLUA iniziaMP iniziaMP \
+iniziaMPclip iniziaMPcode iniziaMPdefinitions iniziaMPdrawing iniziaMPdrawing \
+iniziaMPenvironment iniziaMPextensions iniziaMPinclusions iniziaMPinitializations iniziaMPpage \
+iniziaMPpositiongraphic iniziaMPpositionmethod iniziaMPrun iniziaPARSEDXML iniziaPARSEDXML \
+iniziaTABLE iniziaTABLE iniziaTABLEbody iniziaTABLEbody iniziaTABLEfoot \
+iniziaTABLEfoot iniziaTABLEhead iniziaTABLEhead iniziaTABLEnext iniziaTABLEnext \
+iniziaTC iniziaTD iniziaTDs iniziaTEX iniziaTEX \
+iniziaTEXpage iniziaTH iniziaTN iniziaTR iniziaTRs \
+iniziaTX iniziaTY iniziaXML iniziaXML iniziaalign \
+iniziaalignment iniziaallineacentro iniziaallineadestra iniziaallineasinistra iniziaallmodes \
+iniziaambiente iniziaambiente iniziaappendices iniziaarrangedpages iniziaattachment \
+iniziabackmatter iniziabar iniziabar iniziabitmapimage iniziablockquote \
+iniziabodymatter iniziaboxedcolumns iniziabtxlabeltext iniziabtxrenderingdefinitions iniziabuffer \
+iniziabuffer iniziacases iniziacatcodetable iniziacatcodetable iniziacenteraligned \
+iniziachapter iniziacharacteralign iniziacheckedfences iniziachemical iniziacitazione \
+iniziacollect iniziacollecting iniziacolore iniziacolore iniziacolore \
+iniziacolorintent iniziacolorset iniziacolumns iniziacolumnspan iniziacom \
+iniziacombination iniziacombination iniziacomment iniziacomponenet iniziacomponenet \
+iniziacontextcode iniziacontextdefinitioncode iniziactxfunction iniziactxfunctiondefinition iniziacurrentcolor \
+iniziacurrentlistentrywrapper iniziadelimited iniziadelimitedtext iniziadisplaymath iniziadmath \
+iniziadocument iniziaeffect iniziaelemento iniziaembeddedxtable iniziaembeddedxtable \
+iniziaendnote iniziaendnote iniziaendofline iniziaexceptions iniziaexpanded \
+iniziaexpandedcollect iniziaextendedcatcodetable iniziaexternalfigurecollection iniziafatto iniziafigure \
+iniziafiguretext iniziafittingpage iniziafloatcombination iniziafloatcombination iniziafondo \
+iniziafont iniziafontclass iniziafontsolution iniziaformula iniziaformulas \
+iniziaframedcontent iniziaframedtext iniziafrontmatter iniziagot iniziagraphictext \
+iniziagridsnapping iniziagridsnapping iniziahboxestohbox iniziahelptext iniziahiding \
+iniziahighlight iniziahyphenation iniziaimath iniziaimpaccato iniziaincorniciato \
+iniziaindentation iniziaindentedtext iniziainteraction iniziainterface iniziaintermezzotext \
+iniziaintertext iniziaitemgroup iniziaitemize iniziaknockout inizialayout \
+inizialegend inizialinealignment inizialineamargine inizialineamargine inizialineatesto \
+inizialinecorrection inizialinenumbering inizialinenumbering inizialines inizialinetable \
+inizialinetablebody inizialinetablecell inizialinetablehead inizialocalfootnotes inizialocalheadsetup \
+inizialocallinecorrection inizialocalnotes inizialocalsetups inizialocalsetups inizialua \
+inizialuacode inizialuaparameterset inizialuasetups inizialuasetups iniziamakeup \
+iniziamarginblock iniziamarkedcontent iniziamathalignment iniziamathcases iniziamathlabeltext \
+iniziamathmatrix iniziamathmode iniziamathstyle iniziamathstyle iniziamatrices \
+iniziamatrix iniziamaxaligned iniziamdformula iniziamenuinterattivo iniziamenzione \
+iniziamettiformula iniziamettiformula iniziamettilegenda iniziamiddlealigned iniziamixedcolumns \
+iniziamode iniziamodeset iniziamodule iniziamodule iniziamoduletestsection \
+iniziampformula inizianamedsection inizianamedsubformulas inizianarrow inizianarrow \
+inizianarrow inizianarrower inizianegative inizianicelyfilledbox inizianointerference \
+inizianop inizianotallmodes inizianotapdp inizianotapdp inizianotext \
+inizianotmode iniziaoperatortext iniziaopposite iniziaoutputstream iniziaoverlay \
+iniziaoverprint iniziapagecomment iniziapagefigure iniziapagegrid iniziapagegridspan \
+iniziapagelayout iniziapar iniziapar iniziaparagraph iniziaparagraphs \
+iniziaparagraphscell iniziaparbuilder iniziapart iniziapath iniziaplacechemical \
+iniziaplacefigure iniziaplacefloat iniziaplacegraphic iniziaplaceintermezzo iniziaplacepairedbox \
+iniziaplacetable iniziapositioning iniziapositionoverlay iniziapositive iniziapostponing \
+iniziaprefixtext iniziaprocessassignmentcommand iniziaprocessassignmentlist iniziaprocesscommacommand iniziaprocesscommalist \
+iniziaprodotto iniziaprodotto iniziaprogetto iniziaprogetto iniziaprotect \
+iniziaprotectedcolors iniziapsh iniziapubblicazione iniziapunctuation iniziarandomized \
+iniziarandomseed iniziaraw iniziarawsetups iniziarawsetups iniziareadingfile \
+iniziareferenceprefix iniziareferenceprefix iniziaregime iniziareusableMPgraphic iniziariga \
+iniziarob iniziarul iniziascript iniziasdformula iniziasection \
+iniziasectionblock iniziasectionblockenvironment iniziasectionlevel iniziasetups iniziasetups \
+iniziasfondo iniziasfondo iniziashapebox iniziashift iniziasidebar \
+iniziasimplecolumns iniziaspecialitem iniziaspecialitem iniziaspecialitem iniziaspeech \
+iniziaspformula iniziaspread iniziastartstop iniziastaticMPfigure iniziastaticMPgraphic \
+iniziastrictinspectnextcharacter iniziastrut iniziastyle iniziastyle iniziasubformulas \
+iniziasubject iniziasubsection iniziasubsentence iniziasubstack iniziasubsubject \
+iniziasubsubsection iniziasubsubsubject iniziasubsubsubsection iniziasubsubsubsubject iniziasubsubsubsubsection \
+iniziasubsubsubsubsubject iniziasymbolset iniziatable iniziatable iniziatablehead \
+iniziatables iniziatables iniziatabletail iniziatabletext iniziatabulate \
+iniziatabulatehead iniziatabulatetail iniziatagged iniziataglabeltext iniziatesta \
+iniziatestoetichetta iniziatestoinstestazioni iniziatexcode iniziatexcode iniziatexdefinition \
+iniziatext iniziatext iniziatextbackground iniziatextbackgroundmanual iniziatextcolor \
+iniziatextcolorintent iniziatextflow iniziatitle iniziatokens iniziatxt \
+iniziatypescript iniziatypescriptcollection iniziatyping iniziatyping iniziauniqueMPgraphic \
+iniziauniqueMPpagegraphic iniziaunittext iniziaunpacked iniziausableMPgraphic iniziauseMPgraphic \
+iniziausemathstyleparameter iniziausingbtxspecification iniziavaia iniziavboxtohbox iniziavboxtohboxseparator \
+iniziaviewerlayer iniziaxcell iniziaxcellgroup iniziaxgroup iniziaxmldisplayverbatim \
+iniziaxmlinlineverbatim iniziaxmlraw iniziaxmlsetups iniziaxmlsetups iniziaxrow \
+iniziaxrowgroup iniziaxtable iniziaxtable iniziaxtablebody iniziaxtablebody \
+iniziaxtablefoot iniziaxtablefoot iniziaxtablehead iniziaxtablehead iniziaxtablenext \
+iniziaxtablenext inlatodestro inlatosinistro inlinebuffer inlinedbox \
+inlinemath inlinemathematics inlinemessage inlineordisplaymath inlinerange \
+inmaframed inmargine inmarginedestro inmarginesinistro innerflushshapebox \
+inother inouter inouteredge inoutermargin input \
+input inputfilebarename inputfilename inputfilerealsuffix inputfilesuffix \
+inputgivenfile inriga insertpages insinistra installactionhandler \
+installactivecharacter installalingua installalingua installanddefineactivecharacter installattributestack \
+installautocommandhandler installautosetuphandler installbasicautosetuphandler installbasicparameterhandler installbottomframerenderer \
+installcommandhandler installcorenamespace installdefinehandler installdefinitionset installdefinitionsetmember \
+installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler installdirectstyleandcolorhandler \
+installframedautocommandhandler installframedcommandhandler installleftframerenderer installnamespace installoutputroutine \
+installpagearrangement installparameterhandler installparameterhashhandler installparametersethandler installparentinjector \
+installrightframerenderer installrootparameterhandler installsetuphandler installsetuponlycommandhandler installshipoutmethod \
+installsimplecommandhandler installsimpleframedcommandhandler installstyleandcolorhandler installswitchcommandhandler installswitchsetuphandler \
+installtexdirective installtextracker installtopframerenderer installunitsseparator installunitsspace \
+installversioninfo integerrounding intertext intorno invokepageheandler \
+istltdir istrtdir italic italicbold italiccorrection \
+itemtag itm jobfilename jobfilesuffix kap \
+keeplinestogether keepunwantedspaces kerncharacters koreancirclenumerals koreannumerals \
+koreannumeralsc koreannumeralsp koreanparentnumerals labellanguage labeltexts \
+languageCharacters languagecharacters languagecharwidth lastcounter lastcountervalue \
+lastdigit lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode latin \
+layeredtext layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata \
+lbox left leftbottombox leftbox lefthbox \
+leftheadtext leftlabeltext leftline leftmathlabeltext leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+lefttoright lefttorighthbox lefttorightvbox lefttorightvtop letbeundefined \
+letcatcodecommand letcscsname letcsnamecs letcsnamecsname letdummyparameter \
+letempty letgvalue letgvalueempty letgvalurelax lettera \
+letterampersand letterat letterbackslash letterbar letterbgroup \
+letterclosebrace lettercolon letterdollar letterdoublequote lettere \
+letteregroup letterescape letterexclamationmark letterhash letterhat \
+letterleftbrace letterless lettermore letteropenbrace letterpercent \
+letterquestionmark letterrightbrace lettersinglequote letterslash letterspacing \
+lettertilde letterunderscore letvalue letvalueempty letvaluerelax \
+lfence lhbox limitatelines limitatetext limitatetext \
+limtatefirstline line lineanera lineasottile lineatesto \
+lineenere lineeriempimento lineesottili linenote linespanningtext \
+lingua linguaprincipale listcitation listcitation listcitation \
+listcite listcite listcite listnamespaces llap \
+loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \
+loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \
+loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \
+localhsize localpopbox localpopmacro localpushbox localpushmacro \
+localundefine locatedfilepath locatefilepath locfilename logo \
+lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
+lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
+luaTeX luacode luaconditional luaenvironment luaexpanded \
+luafunction luajitTeX luamajorversion luaminorversion luaparameterset \
+luasetup luaversion lunghezzaelenco m mLeftarrow \
+mLeftrightarrow mRightarrow maframed makecharacteractive makerawcommalist \
+makestrutofbox mapfontsize mar marcatura margindata \
+markcontent markinjector mat matematica math \
+mathbf mathbi mathblackboard mathbs mathcommand \
+mathdefault mathfraktur mathfunction mathit mathlabellanguage \
+mathlabeltext mathlabeltexts mathop mathrm mathscript \
+mathsl mathss mathtext mathtextbf mathtextbi \
+mathtextbs mathtextit mathtextsl mathtexttf mathtf \
+mathtriplet mathtt mathupright mathword mathwordbf \
+mathwordbi mathwordbs mathwordit mathwordsl mathwordtf \
+maxaligned mbox mcframed measure measured \
+medskip medspace menuinterattivo menzione mequal \
+mese message metaTeX mettielenco mettielencocombinato \
+mettifiancoafianco mettiformula mettiingriglia mettiingriglia mettilegenda \
+mettinotepdp mettinotepdplocali mettinumeropagina mettiregistro mettisegnalibro \
+mettisottoformula mettiunosullaltro mfence mfunction mfunctionlabeltext \
+mhbox mhookleftarrow mhookrightarrow middle middlealigned \
+middlebox midhbox minimalhbox mixedcaps mkvibuffer \
+mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons \
+mmapsto moduleparameter molecule mono monobold \
+monobold mononormal monthlong monthshort mostraambientefontdeltesto \
+mostracolore mostracornice mostrafontdeltesto mostragriglia mostragruppocolori \
+mostraimpostazioni mostralyout mostramakeup mostrasetsimboli mostrastampa \
+mostrastruts mostratavolozza mprandomnumber mrel mrightarrow \
+mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext \
+mtriplerel mtwoheadleftarrow mtwoheadrightarrow namedheadnumber namedstructureheadlocation \
+namedstructureuservariable namedstructurevariable namedtaggedlabeltexts nascondiblocchi naturalhbox \
+naturalhpack naturalvbox naturalvcenter naturalvpack naturalvtop \
+naturalwd negatecolorbox negated negthinspace newattribute \
+newcatcodetable newcounter newevery newfrenchspacing newmode \
+newsignal newsystemmode nextbox nextboxdp nextboxht \
+nextboxhtdp nextboxwd nextcounter nextcountervalue nextdepth \
+nextparagraphs nextrealpage nextrealpagenumber nextsubcountervalue nextsubpage \
+nextsubpagenumber nextuserpage nextuserpagenumber nientelineecimafondo nientelineintestazionepdp \
+nientespazio nihongo nocap nocitation nocitation \
+nocite nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation nonfrenchspacing nonmathematics nop \
+nop normal normalboldface normalframedwithsettings normalizebodyfontsize \
+normalizedfontsize normalizefontdepth normalizefontheight normalizefontline normalizefontwidth \
+normalizetextdepth normalizetextheight normalizetextline normalizetextwidth normaltypeface \
+nota notapdp notapdp notesymbol notragged \
+ntimes numberofpoints numeri numeriromani numeroformula \
+numeropagina numeropaginacompleto numerotesta numerotestacorrente obeydepth \
+objectdepth objectheight objectmargin objectwidth obox \
+offset offsetbox onedigitrounding operatorlanguage operatortext \
+ordinaldaynumber ordinalstr ornamenttext ornamenttext ornamenttext \
+outputfilename outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy \
+over overbar overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket overlaybutton overlaybutton overlaycolor \
+overlaydepth overlayfigure overlayheight overlaylinecolor overlaylinewidth \
+overlayoffset overlayrollbutton overlaywidth overleftarrow overleftharpoondown \
+overleftharpoonup overleftrightarrow overloaderror overparent overparenttext \
+overparentunderparent overrightarrow overrightharpoondown overrightharpoonup overset \
+overstrike overstrikes overtwoheadleftarrow overtwoheadrightarrow pagearea \
+pagebreak pagefigure pagegridspanwidth pageinjection pageinjection \
+pagestaterealpage pagina paletsize paroladestra parolainmargine \
+part pdfTeX pdfactualtext pdfbackendactualtext pdfbackendcurrentresources \
+pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname \
+pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade \
+pdfcolor pdfeTeX ped pedap percent \
+percentdimen perlungo permitcaretescape permitcircumflexescape permitspacesbetweengroups \
+persiandecimals persiannumerals phantom phantombox pickupgroupedcommand \
+placeattachments placebtxrendering placechemical placecitation placecomments \
+placecontent placecurrentformulanumber placedbox placefigure placefloat \
+placefloatwithsetups placeframed placegraphic placehelp placeindex \
+placeinitial placeintermezzo placelayer placelayeredtext placelistofabbreviations \
+placelistofchemicals placelistoffigures placelistofgraphics placelistofintermezzi placelistoflogos \
+placelistofpublications placelistofsorts placelistofsynonyms placelistoftables placelocalnotes \
+placement placenamedfloat placenamedformula placenotes placepairedbox \
+placeparallel placerawlist placerenderingwindow placetable popattribute \
+popmacro popmode popsystemmode positionoverlay positionregionoverlay \
+posizionanumerotesta posizionatestotesta posizione postponenotes predefinedfont \
+predefinefont predefinesymbol prefixedpagenumber prefixlanguage prefixtext \
+prendibuffer prendimarcatura prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols \
+presetheadtext presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext \
+presettaglabeltext presetunittext pretocommalist prevcounter prevcountervalue \
+preventmode prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage \
+prevsubpagenumber prevuserpage prevuserpagenumber procent processMPbuffer \
+processMPfigurefile processaction processallactionsinset processassignlist processassignmentcommand \
+processassignmentlist processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand \
+processcommalist processcommalistwithparameters processcontent processfile processfilemany \
+processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \
+processlinetablebuffer processlinetablefile processlist processmonth processranges \
+processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \
+processyear prodotto prodotto profiledbox profilegivenbox \
+progetto progetto programma pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped psh pulsante pulsantemenu \
+pulsantemenu pulsantinterazione punti punti purenumber \
+pushattribute pushbutton pushmacro pushmode pushoutputstream \
+pushsystemmode qquad quad qualcheriga quitcommalist \
+quitprevcommalist quittypescriptscanning raggedbottom raggedcenter raggedleft \
+raggedright raggedwidecenter raisebox ran randomizetext \
+randomnumber raw rawcounter rawcountervalue rawdate \
+rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters rawprocessaction \
+rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue rbox \
+readfile readfixfile readjobfile readlocfile readsetfile \
+readsysfile readtexfile readxmlfile realSmallCapped realSmallcapped \
+realpagenumber realsmallcapped recursedepth recurselevel recursestring \
+redoconvertfont referenceprefix referring registerattachment registerctxluafile \
+registerexternalfigure registerfontclass registerhyphenationexception registerhyphenationpattern registermenubuttons \
+registersort registersynonym registerunit regular reimpostamarcatura \
+relatemarking relateparameterhandlers relaxvalueifundefined remainingcharacters removebottomthings \
+removedepth removefromcommalist removelastskip removelastspace removemarkedcontent \
+removepunctuation removesubstring removetoks removeunwantedspaces replacefeature \
+replacefeature replaceincommalist replaceword rescan rescanwithsetup \
+resetMPdrawing resetMPenvironment resetMPinstance resetallattributes resetandaddfeature \
+resetandaddfeature resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning \
+resetcharacterspacing resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation \
+resetdirection resetfeature resetflag resetfontcolorsheme resetfontfallback \
+resetfontsolution resethyphenationfeatures resetinjector resetinteractionmenu resetitaliccorrection \
+resetlayer resetlocalfloats resetmarker resetmode resetpagenumber \
+resetparallel resetpath resetpenalties resetprofile resetreference \
+resetreplacement resetscript resetsetups resetshownsynonyms resetsubpagenumber \
+resetsymbolset resetsystemmode resettimer resettrackers resettrialtypesetting \
+resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue resetvisualizers \
+reshapebox restartcounter restorebox restorecatcodes restorecounter \
+restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic \
+reuserandomseed revivefeature rfence rhbox rif \
+riferimento riferimentopagina riferimentotesto riflessione rigariempimento \
+right rightbottombox rightbox righthbox rightheadtext \
+rightlabeltext rightline rightmathlabeltext rightorleftpageaction rightskipadaption \
+rightsubguillemot righttoleft righttolefthbox righttoleftvbox righttoleftvtop \
+righttopbox rigovuoto rlap rob robustaddtocommalist \
+robustdoifelseinset robustdoifinsetelse robustpretocommalist rollbutton rollbutton \
+roman rtop rul ruledhbox ruledhpack \
+ruledmbox ruledtopv ruledtpack ruledvbox ruledvpack \
+ruledvtop runMPbuffer ruota safechar sans \
+sansbold sansnormal sansserif savebox savebtxdataset \
+savebuffer savebuffer savecounter savecurrentattributes savenormalmeaning \
+savetaggedtwopassdata savetwopassdata sbox scala schermo \
+scrividentroelenco scriviinelenco secondoffivearguments secondoffourarguments secondofsixarguments \
+secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \
+seeindex segnalibro select selezionablocchi serializecommalist \
+serializedcommalist serif serifbold serifnormal setJSpreamble \
+setMPlayer setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable \
+setMPvariables setbar setbigbodyfont setboxllx setboxlly \
+setbreakpoints setcapstrut setcatcodetable setcharacteralign setcharactercasing \
+setcharactercleaning setcharacterkerning setcharacterspacing setcharacterstripping setcharstrut \
+setcollector setcolormodell setcounter setcounterown setcurrentfontclass \
+setdataset setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument \
+setdocumentargumentdefault setdocumentfilename setdummyparameter setelementexporttag setemeasure \
+setevalue setevariable setevariables setfirstline setflag \
+setfont setfontcolorsheme setfontfeature setfontsolution setfontstrut \
+setgmeasure setgvalue setgvariable setgvariables sethyphenatedurlafter \
+sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector \
+setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements setinterfacemessage \
+setinterfacevariable setinternalrendering setitaliccorrection setlayer setlayerframed \
+setlayerframed setlayertext setlocalhsize setmainbodyfont setmainparbuilder \
+setmarker setmarking setmathstyle setmeasure setmessagetext \
+setmode setnostrut setnote setnote setnotetext \
+setnotetext setobject setoldstyle setpagegrid setpagereference \
+setpagestate setpagestaterealpageno setpenalties setpercentdimen setposition \
+setpositionbox setpositiondata setpositiondataplus setpositiononly setpositionplus \
+setpositionstrut setprofile setrandomseed setreference setreferencedobject \
+setregisterentry setreplacement setrigidcolumnbalance setrigidcolumnhsize setscript \
+setsectionblock setsimplecolumnhsize setsmallbodyfont setsmallcaps setstackbox \
+setstructurepageregister setstrut setsuperiors setsystemmode settabular \
+settaggedmetadata settext settightobject settightreferencedobject settightunreferencedobject \
+settrialtypesetting setuevalue setugvalue setunreferencedobject setup \
+setup setupMPgraphics setupMPinstance setupMPpage setupMPvariables \
+setupTABLE setupTEXpage setupattachment setupbackend setupbar \
+setupbleeding setupbookmark setupbtx setupbtx setupbtxdataset \
+setupbtxlabeltext setupbtxlist setupbtxregister setupbtxrendering setupbutton \
+setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed setupcollector \
+setupcolumnspan setupcombination setupcontent setupcounter setupdataset \
+setupdelimitedtext setupdescription setupdirections setupdocument setupeffect \
+setupenumeration setupenv setupexport setupexternalfigure setupexternalsoundtracks \
+setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed \
+setupfiller setupfirstline setupfittingpage setupfloatcaption setupfontexpansion \
+setupfontprotrusion setupfontsolution setupformula setupframedcontent setupframedtext \
+setupglobalreferenceprefix setupheadalternative setuphelp setuphigh setuphighlight \
+setuphyphenation setupindentedtext setupindex setupinitial setupinsertion \
+setupitaliccorrection setupitemgroup setupitemgroup setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinenote setuplinetable setuplistalternative \
+setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh \
+setuplowmidhigh setupmarginblock setupmargindata setupmarginframed setupmarginrule \
+setupmathalignment setupmathcases setupmathematics setupmathfence setupmathfraction \
+setupmathframed setupmathlabeltext setupmathmatrix setupmathornament setupmathradical \
+setupmathstackers setupmathstyle setupmixedcolumns setupmodule setupnotation \
+setupnote setupoffset setupoffsetbox setupoperatortext setupoutputroutine \
+setupoutputroutine setuppagechecker setuppagegrid setuppagegridarea setuppagegridareatext \
+setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection setuppageinjectionalternative \
+setuppageshift setuppagestate setuppairedbox setuppaper setupparagraph \
+setupparagraphintro setupparallel setupperiods setupplacement setuppositionbar \
+setupprefixtext setupprocessor setupprofile setupquotation setuprealpagenumber \
+setupreferenceformat setupreferenceprefix setupreferencestructureprefix setuprenderingwindow setups \
+setups setupscale setupscript setupselector setupshift \
+setupsidebar setupspellchecking setupstretched setupstruts setupstyle \
+setupsubformula setuptabulation setuptagging setuptaglabeltext setuptextbackground \
+setuptextflow setuptooltip setupunit setupunittext setupuserpagenumber \
+setupversion setupviewerlayer setupvspacing setupwithargument setupwithargumentswapped \
+setupxml setupxtable setuvalue setuxvalue setvalue \
+setvariable setvariables setvisualizerfont setwidthof setxmeasure \
+setxvalue setxvariable setxvariables sfondo sfrac \
+shapedhbox shiftdown shiftup showallmakeup showattributes \
+showboxes showbtxdatasetauthors showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness \
+showbtxdatasetfields showbtxdatasetfields showbtxfields showbtxfields showbtxhashedauthors \
+showbtxtables showchardata showcharratio showcolorbar showcolorcomponents \
+showcolorset showcolorstruts showcounter showdirectives showdirsinmargin \
+showedebuginfo showexperiments showfont showfontdata showfontkerns \
+showfontparameters showfontstrip showfontstyle showglyphs showgridsnapping \
+showhelp showhyphenationtrace showhyphens showinjector showjustification \
+showkerning showlayoutcomponents showligature showligatures showlogcategories \
+showmargins showmessage showminimalbaseline shownextbox showotfcomposition \
+showparentchain showsetupsdefinition showtimer showtokens showtrackers \
+showvalue showvariable showwarning sim simbolo \
+simbolo simplealignedbox simplealignedboxplus simplealignedspreadbox simplegroupedcommand \
+simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond sixthofsixarguments \
+slanted slantedbold slicepages slovenianNumerals sloveniannumerals \
+small smallbodyfont smallbold smallbolditalic smallboldslanted \
+smallcappedcharacters smallcappedromannumerals smaller smallitalicbold smallnormal \
+smallskip smallslanted smallslantedbold smalltype smash \
+smashbox smashboxed smashedhbox smashedvbox snaptogrid \
+snaptogrid someheadnumber somekindoftab somelocalfloat somenamedheadnumber \
+someplace spanishNumerals spanishnumerals spazifissi spazio \
+spaziofisso speech spessoreriga spezzaoggettomobile splitdfrac \
+splitfilename splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitstring spreadhbox sqrt stackcampi stackrel \
+startlinenote startregister startstructurepageregister stirato stoplinenote \
+stopregister stopstructurepageregister strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter \
+strippedcsname strippedcsname stripspaces structurelistuservariable structurenumber \
+structuretitle structureuservariable structurevariable strut strutdp \
+strutht struthtdp struttedbox strutwd style \
+style styleinstance sub subject subpagenumber \
+subsection subsentence substituteincommalist subsubject subsubsection \
+subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection subsubsubsubsubject \
+subtractfeature subtractfeature swapcounts swapdimens swapface \
+swapmacros swaptypeface switchstyleonly switchstyleonly switchtocolor \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace symbolreference synchronizeblank synchronizeindenting synchronizemarking \
+synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog systemlogfirst \
+systemloglast systemsetups tLeftarrow tLeftrightarrow tRightarrow \
+tabulateautoline tabulateautorule tabulateline tabulaterule taggedctxcommand \
+taggedlabeltexts taglabellanguage taglabeltext tbinom tbox \
+tequal terminaJScode terminaJSpreamble terminaLUA terminaLUA \
+terminaMP terminaMP terminaMPclip terminaMPcode terminaMPdefinitions \
+terminaMPdrawing terminaMPdrawing terminaMPenvironment terminaMPextensions terminaMPinclusions \
+terminaMPinitializations terminaMPpage terminaMPpositiongraphic terminaMPpositionmethod terminaMPrun \
+terminaPARSEDXML terminaPARSEDXML terminaTABLE terminaTABLE terminaTABLEbody \
+terminaTABLEbody terminaTABLEfoot terminaTABLEfoot terminaTABLEhead terminaTABLEhead \
+terminaTABLEnext terminaTABLEnext terminaTC terminaTD terminaTDs \
+terminaTEX terminaTEX terminaTEXpage terminaTH terminaTN \
+terminaTR terminaTRs terminaTX terminaTY terminaXML \
+terminaXML terminaalign terminaalignment terminaallineacentro terminaallineadestra \
+terminaallineasinistra terminaallmodes terminaambiente terminaambiente terminaappendices \
+terminaarrangedpages terminaattachment terminabackmatter terminabar terminabar \
+terminabitmapimage terminablockquote terminabodymatter terminaboxedcolumns terminabtxlabeltext \
+terminabtxrenderingdefinitions terminabuffer terminabuffer terminacases terminacatcodetable \
+terminacatcodetable terminacenteraligned terminachapter terminacharacteralign terminacheckedfences \
+terminachemical terminacitazione terminacollect terminacollecting terminacolore \
+terminacolore terminacolore terminacolorintent terminacolorset terminacolumns \
+terminacolumnspan terminacom terminacombination terminacombination terminacomment \
+terminacomponenet terminacomponenet terminacontextcode terminacontextdefinitioncode terminactxfunction \
+terminactxfunctiondefinition terminacurrentcolor terminacurrentlistentrywrapper terminadelimited terminadelimitedtext \
+terminadisplaymath terminadmath terminadocument terminaeffect terminaelemento \
+terminaembeddedxtable terminaembeddedxtable terminaendnote terminaendnote terminaendofline \
+terminaexceptions terminaexpanded terminaexpandedcollect terminaextendedcatcodetable terminaexternalfigurecollection \
+terminafatto terminafigure terminafiguretext terminafittingpage terminafloatcombination \
+terminafloatcombination terminafondo terminafont terminafontclass terminafontsolution \
+terminaformula terminaformulas terminaframedcontent terminaframedtext terminafrontmatter \
+terminagot terminagraphictext terminagridsnapping terminagridsnapping terminahboxestohbox \
+terminahelptext terminahiding terminahighlight terminahyphenation terminaimath \
+terminaimpaccato terminaincorniciato terminaindentation terminaindentedtext terminainteraction \
+terminainterface terminaintermezzotext terminaintertext terminaitemgroup terminaitemize \
+terminaknockout terminalayout terminalegend terminalinealignment terminalineamargine \
+terminalineamargine terminalineatesto terminalinecorrection terminalinenumbering terminalinenumbering \
+terminalines terminalinetable terminalinetablebody terminalinetablecell terminalinetablehead \
+terminalocalfootnotes terminalocalheadsetup terminalocallinecorrection terminalocalnotes terminalocalsetups \
+terminalocalsetups terminalua terminaluacode terminaluaparameterset terminaluasetups \
+terminaluasetups terminamakeup terminamarginblock terminamarkedcontent terminamathalignment \
+terminamathcases terminamathlabeltext terminamathmatrix terminamathmode terminamathstyle \
+terminamathstyle terminamatrices terminamatrix terminamaxaligned terminamdformula \
+terminamenuinterattivo terminamenzione terminamettiformula terminamettiformula terminamettilegenda \
+terminamiddlealigned terminamixedcolumns terminamode terminamodeset terminamodule \
+terminamodule terminamoduletestsection terminampformula terminanamedsection terminanamedsubformulas \
+terminanarrow terminanarrow terminanarrow terminanarrower terminanegative \
+terminanicelyfilledbox terminanointerference terminanop terminanotallmodes terminanotapdp \
+terminanotapdp terminanotext terminanotmode terminaoperatortext terminaopposite \
+terminaoutputstream terminaoverlay terminaoverprint terminapagecomment terminapagefigure \
+terminapagegrid terminapagegridspan terminapagelayout terminapar terminapar \
+terminaparagraph terminaparagraphs terminaparagraphscell terminaparbuilder terminapart \
+terminapath terminaplacechemical terminaplacefigure terminaplacefloat terminaplacegraphic \
+terminaplaceintermezzo terminaplacepairedbox terminaplacetable terminapositioning terminapositionoverlay \
+terminapositive terminapostponing terminaprefixtext terminaprocessassignmentcommand terminaprocessassignmentlist \
+terminaprocesscommacommand terminaprocesscommalist terminaprodotto terminaprodotto terminaprogetto \
+terminaprogetto terminaprotect terminaprotectedcolors terminapsh terminapubblicazione \
+terminapunctuation terminarandomized terminarandomseed terminaraw terminarawsetups \
+terminarawsetups terminareadingfile terminareferenceprefix terminareferenceprefix terminaregime \
+terminareusableMPgraphic terminariga terminarob terminarul terminascript \
+terminasdformula terminasection terminasectionblock terminasectionblockenvironment terminasectionlevel \
+terminasetups terminasetups terminasfondo terminasfondo terminashapebox \
+terminashift terminasidebar terminasimplecolumns terminaspecialitem terminaspecialitem \
+terminaspecialitem terminaspeech terminaspformula terminaspread terminastartstop \
+terminastaticMPfigure terminastaticMPgraphic terminastrictinspectnextcharacter terminastrut terminastyle \
+terminastyle terminasubformulas terminasubject terminasubsection terminasubsentence \
+terminasubstack terminasubsubject terminasubsubsection terminasubsubsubject terminasubsubsubsection \
+terminasubsubsubsubject terminasubsubsubsubsection terminasubsubsubsubsubject terminasymbolset terminatable \
+terminatable terminatablehead terminatables terminatables terminatabletail \
+terminatabletext terminatabulate terminatabulatehead terminatabulatetail terminatagged \
+terminataglabeltext terminatesta terminatestoetichetta terminatestoinstestazioni terminatexcode \
+terminatexcode terminatexdefinition terminatext terminatext terminatextbackground \
+terminatextbackgroundmanual terminatextcolor terminatextcolorintent terminatextflow terminatitle \
+terminatokens terminatxt terminatypescript terminatypescriptcollection terminatyping \
+terminatyping terminauniqueMPgraphic terminauniqueMPpagegraphic terminaunittext terminaunpacked \
+terminausableMPgraphic terminauseMPgraphic terminausemathstyleparameter terminausingbtxspecification terminavaia \
+terminavboxtohbox terminavboxtohboxseparator terminaviewerlayer terminaxcell terminaxcellgroup \
+terminaxgroup terminaxmldisplayverbatim terminaxmlinlineverbatim terminaxmlraw terminaxmlsetups \
+terminaxmlsetups terminaxrow terminaxrowgroup terminaxtable terminaxtable \
+terminaxtablebody terminaxtablebody terminaxtablefoot terminaxtablefoot terminaxtablehead \
+terminaxtablehead terminaxtablenext terminaxtablenext testa testandsplitstring \
+testcolumn testfeature testfeatureonce testoetichetta testoinmargine \
+testoinstestazioni testonotapdp testonotapdp testoriempimento testpage \
+testpageonly testpagesync testtokens tex texdefinition \
+texsetup textcitation textcitation textcitation textcite \
+textcite textcite textcontrolspace textflowcollector textmath \
+textminus textormathchar textplus textvisiblespace tfrac \
+thai thainumerals thefirstcharacter thenormalizedbodyfontsize theremainingcharacters \
+thickspace thinspace thinspace thirdoffivearguments thirdoffourarguments \
+thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow thookrightarrow \
+threedigitrounding tibetannumerals tieniblocchi tightlayer tilde \
+tinyfont title titoloinmargine tlap tleftarrow \
+tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto \
+tochar tolinenote tooltip tooltip topbox \
+topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \
+tracedfontname traceoutputroutines tracepositions traduci transparencycomponents \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttraggedright \
+ttriplerel ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx \
+txt txt txx typ typ \
+type type typebuffer typedefinedbuffer typeface \
+typefile typescriptone typescriptprefix typescriptthree typescripttwo \
+typesetbuffer typesetfile uconvertnumber uedcatcodecommand undefinevalue \
+undepthed underbar underbar underbars underbartext \
+underbrace underbracetext underbracket underbrackettext underdash \
+underdashes underdot underdots underleftarrow underleftharpoondown \
+underleftharpoonup underleftrightarrow underparent underparenttext underrandom \
+underrandoms underrightarrow underrightharpoondown underrightharpoonup underset \
+understrike understrikes undertwoheadleftarrow undertwoheadrightarrow undoassign \
+unframed unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic \
+unit unitlanguage unittext unprotected unregisterhyphenationpattern \
+unspaceafter unspaceargument unspaced unspacestring untexargument \
+untexcommand uppercased uppercasestring upperleftdoubleninequote upperleftdoublesixquote \
+upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote \
+upperrightsinglesixquote url usaJSscripts usaURL usablocco \
+usacartella usacolonnasonoraesterna usadocumentoesterno usafiguraesterna usamodulo \
+usasimboli usaurl useMPenvironmentbuffer useMPgraphic useMPlibrary \
+useMPrun useMPvariables usealignparameter usebodyfont usebodyfontparameter \
+usebtxdataset usebtxdefinitions usecolors usecomponent usedummycolorparameter \
+usedummystyleandcolor usedummystyleparameter useenvironment useexternalrendering usefigurebase \
+usefile usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter \
+useinterlinespaceparameter uselanguageparameter useluamodule usemathstyleparameter useproduct \
+useprofileparameter useproject usereferenceparameter userpagenumber usesetupsparameter \
+usestaticMPfigure usesubpath usetexmodule usetypescript usetypescriptfile \
+usezipfile utfchar utflower utfupper utilityregisterlength \
vaia vaiabox vaiapagina vaigiu valorecolore \
-valoregrigio variabiletesto version versione vl \
-weekday whitespace wordright writebetweenlist writetolist \
-writetoreferencelist writetoregister
+vboxreference vec verbatim verbatimstring verbosenumber \
+versione verticalgrowingbar verticalpositionbar veryraggedcenter veryraggedleft \
+veryraggedright vglue viewerlayer vl vphantom \
+vpos vsmash vsmashbox vsmashed vspace \
+vspacing wdofstring widthofstring widthspanningtext withoutpt \
+word words wordtonumber writedatatolist writestatus \
+xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument xequal \
+xfrac xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown \
+xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto xmladdindex \
+xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup \
+xmlapplyselectors xmlatt xmlattdef xmlattribute xmlattributedef \
+xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef \
+xmlchecknamespace xmlcommand xmlconcat xmlconcatrange xmlcontext \
+xmlcount xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore \
+xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty \
+xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext \
+xmldoifselfempty xmldoiftext xmlelement xmlfilter xmlfirst \
+xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure \
+xmlflushspacewise xmlflushtext xmlinclude xmlinclusion xmlinclusions \
+xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective xmllast \
+xmllastatt xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives \
+xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \
+xmlnamespace xmlnonspace xmlpath xmlpos xmlposition \
+xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata \
+xmlprocessfile xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups \
+xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname xmlremapnamespace \
+xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups \
+xmlsave xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup \
+xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \
+xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \
+xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \
+xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \
+xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \
+xxfrac xypos
keywordclass.context.nl=\
-CAP Cap Caps Character \
-Characters Cijfers KAP Kap Kaps \
-Letter Letters MAAND MONTH Romannumerals \
-Romeins WEEKDAG WEEKDAY WOORD WOORDEN \
-WORD WORDS Woord Woorden Word \
-Words aantalsubpaginas about achtergrond adaptlayout \
-appendix arg at atpage background \
-bepaalkopnummer bepaallijstkenmerken bepaalregisterkenmerken betekenis binnenmargeafstand \
-binnenmargebreedte binnenrandafstand binnenrandbreedte blackrule blackrules \
-blank blanko blokje blokjes blokkeerinteractiemenu \
-bodemwit bookmark bovenafstand bovenhoogte breuk \
-buitenmargeafstand buitenmargebreedte buitenrandafstand buitenrandbreedte but \
-button bypassblocks cap chapter character \
-characters chem cijfers citaat citeer \
-clip clonefield color column comment \
-comparecolorgroup comparepalet completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms completeregister converteernummer convertnumber copieerveld \
-copyfield correctwhitespace corrigeerwitruimte coupledocument coupledregister \
-couplemarking couplepage couplepaper coupleregister crlf \
-currentdate currentheadnumber date datum decouplemarking \
-define defineblank defineblock definebodyfont definebodyfontDEF \
-definebodyfontREF definebodyfontenvironment definebuffer definecolor definecolorgroup \
-definecombinedlist defineconversion definedescription definedfont defineenumeration \
-definefield definefieldstack definefiguresymbol definefloat definefont \
-definefontfeature definefonthandling definefontsynonym defineframed defineframedtext \
-definehead defineindentedtext defineinteractionmenu definelabel definelist \
-definelogo definemakeup definemarking defineoutput defineoverlay \
-definepalet definepapersize defineparagraphs defineprofile defineprogram \
-definerawfont definereference definereferenceformat definereferencelist defineregister \
-definesection definesectionblock definesorting definestartstop definesubfield \
-definesymbol definesynonyms definetabletemplate definetabulate definetext \
-definetype definetypeface definetyping defineversion definieer \
-definieeraccent definieeralineas definieerbeeldmerk definieerblanko definieerblok \
-definieerbuffer definieercombinatie definieercommando definieerconversie definieerfiguursymbool \
-definieerfont definieerfontstijl definieerfontsynoniem definieerhbox definieerhoofdveld \
-definieeringesprongentext definieerinmarge definieerinteractiemenu definieeritemgroep definieerkadertekst \
-definieerkarakter definieerkleur definieerkleurgroep definieerkolomgroep definieerkolomovergang \
-definieerkop definieerkorps definieerkorpsomgeving definieerlayer definieerlayout \
-definieerletter definieerlijn definieerlijst definieermarkering definieeromlijnd \
-definieeropmaak definieeroverlay definieerpaginaovergang definieerpalet definieerpapierformaat \
-definieerplaats definieerplaatsblok definieerprofiel definieerprogramma definieerreferentie \
-definieerreferentieformaat definieerreferentielijst definieerregister definieersamengesteldelijst definieersectie \
-definieersectieblok definieersorteren definieerstartstop definieersubveld definieersymbool \
-definieersynoniemen definieertabelvorm definieertabulatie definieertekst definieertekstachtergrond \
-definieertekstpositie definieertekstvariabele definieertype definieertypen definieeruitvoer \
-definieerveld definieerveldstapel definieerversie definieerwiskundeuitlijnen description \
-determineheadnumber determinelistcharacteristics dimensie directnaarlijst directtussenlijst \
-disableinteractionmenu doordefinieren doorlabelen doornummeren dunnelijn \
-dunnelijnen eenregel emptylines enumeration ergens \
-externalfigure externfiguur field fieldstack fillinfield \
-fillinline fillinrules fillintext fitfield fixedspaces \
-followprofile followprofileversion followversion footnote footnotetext \
-forceblocks forceerblokken formulenummer fraction framed \
-framedtext from gebruikJSscripts gebruikURL gebruikXMLfilter \
-gebruikblokken gebruikcommandos gebruikexterndocument gebruikexternefile gebruikexternefiles \
-gebruikexternfiguur gebruikexterngeluidsfragment gebruikgebied gebruikmodule gebruikmodules \
-gebruikreferenties gebruikspecials gebruiksymbolen gebruiktypescript gebruiktypescriptfile \
-gebruikurl geenblokkenmeer geenbovenenonderregels geendimensie geenfilesmeer \
-geenhoofdenvoetregels geenlijst geenmarkering geenspatie geentest \
-geenwitruimte geg getbuffer getmarking godown \
-goto gotobox graycolor grid grijskleur \
-grijswaarde haalbuffer haalmarkering haalnummer haarlijn \
-hairline handhaafblokken head headnumber headtext \
-herhaal hideblocks high hl hoofdafstand \
-hoofdhoogte hoofdtaal hoog huidigedatum huidigekopnummer \
-in inanderemarge inbinnen inbuiten indentation \
-indenting inframed ininner inleft inlijnd \
-inline inlinker inlinkermarge inlinkerrand inmarge \
-inmargin inothermargin inouter inrechter inrechtermarge \
-inrechterrand inregel inright inspringen installeertaal \
-installlanguage interactiebalk interactiebuttons interactiemenu interactionbar \
-interactionbuttons invullijnen invulregel invultekst invulveld \
-inwilijnd item items its kantlijn \
-kap keepblocks kenmerk kenmerkdatum kentekstvariabeletoe \
-kleur kleurenbalk kleurwaarde kloonveld kolom \
-kop kopniveau kopnummer koppeldocument koppelmarkering \
-koppelpagina koppelpapier koppelregister kopsym koptekst \
-kopwit laag label labeling labels \
-labeltekst labeltext laho language leftaligned \
-leg legeregels letter letters lijndikte \
-lijstbreedte lijsthoogte lijstlengte lijstsymbool linkermargeafstand \
-linkermargebreedte linkerrandafstand linkerrandbreedte listsymbol loadsorts \
-loadsynonyms logfields lohi low maand \
-mainlanguage mapfontsize mar margeafstand margebreedte \
-margetekst margetitel margewoord marginrule margintext \
-markeer markeerversie marking markversion mathematics \
-mediaeval menubutton midaligned mirror month \
-moveongrid naam naar naarbox naarpagina \
-name navigerend nextsection nietinspringen nocap \
-noheaderandfooterlines noindenting nokap nolist nomarking \
-nomoreblocks nomorefiles noot nop nospace \
-note notopandbottomlines nowhitespace numbers omgeving \
-omlaag omlijnd onbekend onderafstand onderdeel \
-onderhoogte ontkoppelmarkering op opelkaar oplinkermarge \
-oppagina oprechtermarge overbar overbars overstrike \
-overstrikes packed page pagereference pagina \
-paginadiepte paginanummer paginaoffset paginareferentie papierbreedte \
-papierhoogte paragraph part paslayoutaan passeerblokken \
-passendveld periods plaatsbeeldmerken plaatsbookmarks plaatsformule \
-plaatskopnummer plaatskoptekst plaatslegenda plaatslijn plaatslijst \
-plaatslijstmetsynoniemen plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid \
-plaatspaginanummer plaatsplaatsblok plaatsreferentielijst plaatsregister plaatsruwelijst \
-plaatssamengesteldelijst plaatssubformule plaatstekstvariabele plaatsvoetnoten placebookmarks \
-placecombinedlist placefloat placefootnotes placeformula placelegend \
-placelist placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes \
-placelogos placeongrid placeontopofeachother placereferencelist placeregister \
-placesidebyside placesubformula position positioneer positioneertekst \
-printpapierbreedte printpapierhoogte processblocks processpage produkt \
-program programma projekt publicatie publication \
-punten quotation quote ran randafstand \
-randbreedte rechtermargeafstand rechtermargebreedte rechterrandafstand rechterrandbreedte \
-ref refereer reference referentie referral \
-referraldate regellinks regelmidden regelrechts register \
-registreervelden reservefloat reset resetmarkering resetmarking \
-resetnummer resettekstinhoud resettextcontent rightaligned romannumerals \
-romeins rooster rotate roteer rugwit \
-scale schaal scherm schrijfnaarlijst schrijfnaarreferentielijst \
-schrijfnaarregister schrijftussenlijst screen section seeregister \
-selectblocks selecteerblokken selecteerpapier selecteerversie selectpaper \
-selectversion setnummer settextcontent setupalign setuparranging \
-setupbackground setupbackgrounds setupblackrules setupblank setupblock \
-setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer \
-setupbuttons setupcapitals setupcaption setupcaptions setupclipping \
-setupcolor setupcolors setupcolumns setupcombinations setupcombinedlist \
-setupcomment setupdescriptions setupenumerations setupexternalfigures setupfield \
-setupfields setupfillinlines setupfillinrules setupfloat setupfloats \
-setupfloatsplitting setupfonthandling setupfontsynonym setupfooter setupfootertexts \
-setupfootnotedefinition setupfootnotes setupforms setupformulas setupframed \
-setupframedtexts setuphead setupheader setupheadertexts setupheadnumber \
-setupheads setupheadtext setuphyphenmark setupindentedtext setupindenting \
-setupinmargin setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen \
-setupinterlinespace setupinterlinespace2 setupitemgroup setupitems setuplabeltext \
-setuplanguage setuplayout setuplegend setuplinenumbering setuplines \
-setuplinewidth setuplist setuplistalternative setupmakeup setupmarginblocks \
-setupmarginrules setupmarking setupnarrower setupnumbering setupoppositeplacing \
-setupoutput setuppagenumber setuppagenumbering setuppagetransitions setuppalet \
-setuppaper setuppapersize setupparagraphnumbering setupparagraphs setuppositioning \
-setupprofiles setupprograms setuppublications setupquote setupreferencelist \
-setupreferencing setupregister setuprotate setupscreens setupsection \
-setupsectionblock setupsorting setupspacing setupstrut setupsubpagenumber \
-setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms setupsystem \
-setuptab setuptables setuptabulate setuptext setuptextrules \
-setuptexttexts setupthinrules setuptolerance setuptop setuptoptexts \
-setuptype setuptyping setupunderbar setupurl setupversions \
-setupwhitespace showbodyfont showbodyfontenvironment showcolor showcolorgroup \
-showexternalfigures showfields showframe showgrid showlayout \
-showmakeup showpalet showprint showsetups showstruts \
-showsymbolset snijwit som someline somewhere \
-sort space spatie spiegel splitfloat \
-splitsplaatsblok startachtergrond startalignment startbackground startbuffer \
-startcitaat startcodering startcolor startcolumns startcombinatie \
-startcombination startcomment startcomponent startdescription startdocument \
-startenumeration startenvironment startfact startfigure startfiguur \
-startfloattext startformula startframedtext startglobaal starthiding \
-startinteractionmenu startitemgroup startkantlijn startkleur startkolomgroep \
-startkolommen startkolomopmaak startlegend startline startlinecorrection \
-startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes \
-startlokaal startlokalevoetnoten startmakeup startmargeblok startmarginblock \
-startmarginrule startnaast startnamemakeup startnarrower startomgeving \
-startomlijnd startonderdeel startopelkaar startopmaak startopposite \
-startoverlay startoverview startoverzicht startpacked startparagraph \
-startpositioneren startpositioning startpostponing startproduct startprodukt \
-startprofiel startprofile startproject startprojekt startquotation \
-startraster startregel startregelcorrectie startregelnummeren startregels \
-startregister startsmaller startsymbolset startsymboolset startsynchronisatie \
-startsynchronization starttabel starttabellen starttable starttables \
-starttabulate starttekst starttekstachtergrond starttekstlijn starttextrule \
-starttyping startuitlijnen startunpacked startvanelkaar startversie \
-startversion stelachtergrondenin stelachtergrondin stelalineasin stelantwoordgebiedin \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Caps Cijfers ConTeXt Context \
+ConvertConstantAfter ConvertToConstant ETEX EveryLine EveryPar \
+GetPar GotoPar Greeknumerals INRSTEX Kap \
+LAMSTEX LATEX LUAJITTEX LUATEX LaTeX \
+LamSTeX Letter Letters LuaTeX LuajitTeX \
+MAAND METAFONT METAFUN METAPOST MKII \
+MKIV MKIX MKVI MKXI MONTHLONG \
+MONTHSHORT MPII MPIV MPVI MPanchor \
+MPbetex MPc MPcode MPcolor MPcoloronly \
+MPcolumn MPd MPdrawing MPfontsizehskip MPgetmultipars \
+MPgetmultishape MPgetposboxes MPh MPinclusions MPleftskip \
+MPll MPlr MPls MPmenubuttons MPn \
+MPoptions MPoverlayanchor MPp MPpage MPpardata \
+MPplus MPpos MPpositiongraphic MPposset MPr \
+MPrawvar MPregion MPrest MPrightskip MPrs \
+MPstring MPtext MPtransparency MPul MPur \
+MPv MPvar MPvariable MPvv MPw \
+MPx MPxy MPxywhd MPy MetaFont \
+MetaFun MetaPost NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight \
+NormalizeTextWidth PDFETEX PDFTEX PDFcolor PICTEX \
+PPCHTEX PPCHTeX PRAGMA PiCTeX PointsToBigPoints \
+PointsToReal PointsToWholeBigPoints PtToCm ReadFile Romeins \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Smallcapped TABLE TEX \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VerboseNumber \
+WEEKDAG WOORD WOORDEN WidthSpanningText Woord \
+Woorden XETEX XeTeX abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals about achtergrond activatespacehandler \
+acute adaptcollector adaptpapersize addfeature addfeature \
+addtoJSpreamble addtocommalist addvalue aftersplitstring aftertestandsplitstring \
+alignbottom aligned alignedbox alignedline alignmentcharacter \
+allinputpaths alphabeticnumerals alwayscitation alwayscitation alwayscitation \
+alwayscite alwayscite alwayscite ampersand anchor \
+appendetoks appendgvalue appendtocommalist appendtoks appendtoksonce \
+appendvalue apply applyalternativestyle applyprocessor applytocharacters \
+applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced \
+applytosplitstringword applytosplitstringwordspaced applytowords arabicdecimals arabicexnumerals \
+arabicnumerals arg asciistr assignalfadimension assigndimen \
+assigndimension assignifempty assigntranslation assignvalue assignwidth \
+assumelongusagecs astype attachment autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+bar basegrid baselinebottom baselineleftbox baselinemiddlebox \
+baselinerightbox bbox beforesplitstring beforetestandsplitstring bepaalkopnummer \
+bepaallijstkenmerken bepaalregisterkenmerken big bigbodyfont bigg \
+bigger biggl biggm biggr bigl \
+bigm bigr bigskip binom bitmapimage \
+blanko blap bleed bleedheight bleedwidth \
+blockquote blokje blokjes bodyfontenvironmentlist bodyfontsize \
+bold boldface bolditalic boldslanted bookmark \
+booleanmodevalue bottombox bottomleftbox bottomrightbox boxcursor \
+boxmarker boxofsize boxreference bpos breve \
+bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation btxalwayscitation \
+btxalwayscitation btxauthorfield btxdetail btxdirect btxdoif \
+btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked \
+btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse btxdoifuservariableelse \
+btxexpandedjournal btxfield btxfieldname btxfieldtype btxfirstofrange \
+btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort btxflushauthorname \
+btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname btxfoundtype \
+btxhybridcite btxhybridcite btxhybridcite btxhybridcite btxlabellanguage \
+btxlabeltext btxlistcitation btxlistcitation btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation btxtextcitation btxtextcitation buildmathaccent \
+buildtextaccent buildtextbottomcomma buildtextbottomdot buildtextcedilla buildtextgrave \
+buildtextmacron buildtextognek but but button \
+calligraphic camel catcodetablename cbox centeraligned \
+centerbox centeredbox centeredlastline centerednextbox centerline \
+cfrac chapter chardescription charwidthlanguage check \
+checkcharacteralign checkedchar checkedfiller checkedstrippedcsname checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata chem chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chineseallnumerals chinesecapnumerals chinesenumerals cijfers citaat \
+citation citation citation citation cite \
+cite cite cite citeer clap \
+classfont cldcommand cldcontext cldloadfile cldprocessfile \
+cleftarrow clip collect collectedtext collectexpanded \
+colorcomponents colored colored columnbreak com \
+combinepages commalistelement commalistsentence commalistsize comment \
+comparedimension comparedimensioneps completebtxrendering completecontent completeindex \
+completelist completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics \
+completelistofintermezzi completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms \
+completelistoftables complexorsimple complexorsimple complexorsimpleempty complexorsimpleempty \
+composedcollector composedlayer compresult constantdimen constantdimenargument \
+constantemptyargument constantnumber constantnumberargument contentreference continuednumber \
+continueifinputfile convertargument convertcommand convertedcounter converteddimen \
+convertedsubcounter converteernummer convertmonth convertvalue convertvboxtohbox \
+copieerveld copybtxlabeltext copyheadtext copylabeltext copymathlabeltext \
+copyoperatortext copypages copyparameters copyposition copyprefixtext \
+copytaglabeltext copyunittext corrigeerwitruimte countersubs counttoken \
+counttokens cramped crampedclap crampedllap crampedrlap \
+crightarrow crightoverleftarrow ctop ctxcommand ctxdirectcommand \
+ctxdirectlua ctxfunction ctxlatecommand ctxlatelua ctxloadluafile \
+ctxlua ctxluabuffer ctxluacode ctxreport ctxsprint \
+currentassignmentlistkey currentassignmentlistvalue currentbtxuservariable currentcommalistitem currentcomponent \
+currentenvironment currentfeaturetest currentinterface currentlanguage currentlistentrydestinationattribute \
+currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute currentlistentrytitle \
+currentlistentrytitlerendered currentlistsymbol currentmainlanguage currentmessagetext currentmoduleparameter \
+currentoutputstream currentproduct currentproject currentregime currentregisterpageuserdata \
+currentresponses currenttime currentvalue currentxtablecolumn currentxtablerow \
+d datasetvariable datum dayoftheweek dayspermonth \
+dbinom ddot decrement decrement decrementcounter \
+decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface \
+defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand \
+defconvertedvalue defineMPinstance defineTABLEsetup defineactivecharacter definealternativestyle \
+defineanchor defineattachment defineattribute definebackground definebar \
+definebodyfontswitch definebreakpoint definebreakpoints definebtx definebtxdataset \
+definebtxregister definebtxrendering definebutton definecapitals definecharacterkerning \
+definecharacterspacing definechemical definechemicals definechemicalsymbol definecollector \
+definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty \
+defineconversionset definecounter definedataset definedelimitedtext definedfont \
+defineeffect defineenumerations defineexpandable defineexternalfigure definefallbackfamily \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamily definefontfamilypreset \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineframedcontent definefrozenfont defineglobalcolor \
+defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative definehelp \
+definehigh definehighlight definehspace definehypenationfeatures defineindenting \
+defineinitial defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant \
+defineinterfaceelement defineinterfacevariable defineinterlinespace defineinterlinespace defineintermediatecolor \
+defineitems definelabelclass definelayerpreset definelayerpreset definelinenote \
+definelinenumbering definelines definelistalternative definelistextra definelow \
+definelowhigh definelowmidhigh definemarginblock definemargindata definemarker \
+definemathaccent definemathcases definemathcommand definemathdoubleextensible definemathematics \
+definemathextensible definemathfence definemathfraction definemathframed definemathmatrix \
+definemathornament definemathoverextensible definemathovertextextensible definemathradical definemathstackers \
+definemathstyle definemathtriplet definemathunderextensible definemathundertextextensible definemathunstacked \
+definemeasure definemessageconstant definemixedcolumns definemode definemultitonecolor \
+definenamedcolor definenamedcolor definenamespace definenarrower definenote \
+defineornament defineornament defineoutputroutine defineoutputroutinecommand definepage \
+definepagechecker definepagegrid definepagegridarea definepagegridspan definepageinjection \
+definepageinjectionalternative definepageshift definepagestate definepairedbox defineparagraph \
+defineparallel defineparbuilder definepositioning defineprefixset defineprocesscolor \
+defineprocessor definepushbutton definepushsymbol definerenderingwindow defineresetset \
+definescale definescript definesectionlevels defineselector defineseparatorset \
+defineshift definesidebar definesort definespotcolor definestyleinstance \
+definesubformula definesynonym definesystemattribute definesystemconstant definesystemvariable \
+definetabulation definetextflow definetooltip definetransparency definetwopasslist \
+definetypeface definetypescriptprefix definetypescriptsynonym definetypesetting defineunit \
+defineviewerlayer definevspace definevspacing definevspacingamount definextable \
+definieer definieeraccent definieeralineas definieerblok definieerbuffer \
+definieercombinatie definieercommando definieerconversie definieerconversie definieerfiguursymbool \
+definieerfont definieerfont definieerfontstijl definieerfontsynoniem definieerhbox \
+definieeringesprongentext definieerinteractiemenu definieeritemgroep definieerkadertekst definieerkarakter \
+definieerkleur definieerkleur definieerkleurgroep definieerkolomovergang definieerkop \
+definieerkorps definieerkorps definieerkorpsomgeving definieerlayer definieerlayout \
+definieerletter definieerlijst definieermarkering definieeromlijnd definieeropmaak \
+definieeroverlay definieerpaginaovergang definieerpalet definieerpalet definieerpapierformaat \
+definieerpapierformaat definieerplaats definieerplaatsblok definieerplaatsblok definieerprofiel \
+definieerprogramma definieerreferentie definieerreferentieformaat definieerregister definieersamengesteldelijst \
+definieersectie definieersectieblok definieersorteren definieerstartstop definieersubveld \
+definieersymbool definieersynoniemen definieertabelvorm definieertabulatie definieertekst \
+definieertekstachtergrond definieertype definieertypen definieerveld definieerveldstapel \
+definieerwiskundeuitlijnen delimited delimitedtext depthofstring depthonlybox \
+depthspanningtext determinenoflines devanagarinumerals dfrac digits \
+digits dimensiontocount directcolor directcolored directcolored \
+directconvertedcounter directdummyparameter directgetboxllx directgetboxlly directhighlight \
+directlocalframed directluacode directselect directsetbar directsetup \
+directsymbol directvspacing dis disabledirectives disableexperiments \
+disablemode disableoutputstream disableparpositions disableregime disabletrackers \
+displaymath displaymathematics displaymessage distributedhsize dividedsize \
+doadaptleftskip doadaptrightskip doaddfeature doassign doassignempty \
+doboundtext docheckassignment docheckedpagestate docheckedpair documentvariable \
+dodoubleargument dodoubleargumentwithset dodoubleempty dodoubleemptywithset dodoublegroupempty \
+doeassign doexpandedrecurse dogetattribute dogetattributeid dogetcommacommandelement \
+dogobbledoubleempty dogobblesingleempty doif doifMPgraphicelse doifallcommon \
+doifallcommonelse doifalldefinedelse doifallmodes doifallmodeselse doifassignmentelse \
+doifblackelse doifbothsides doifbothsidesoverruled doifboxelse doifbufferelse \
+doifcolor doifcolorelse doifcommandhandler doifcommandhandlerelse doifcommon \
+doifcommonelse doifcontent doifconversiondefinedelse doifconversionnumberelse doifcounter \
+doifcounterelse doifcurrentfonthasfeatureelse doifdefined doifdefinedcounter doifdefinedcounterelse \
+doifdefinedelse doifdimensionelse doifdimenstringelse doifdocumentargument doifdocumentargumentelse \
+doifdocumentfilename doifdocumentfilenameelse doifdrawingblackelse doifelse doifelseMPgraphic \
+doifelseallcommon doifelsealldefined doifelseallmodes doifelseassignment doifelseblack \
+doifelsebox doifelsebuffer doifelsecolor doifelsecommandhandler doifelsecommon \
+doifelseconversiondefined doifelseconversionnumber doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused \
+doifelsecurrentsynonymshown doifelsecurrentsynonymused doifelsedefined doifelsedefinedcounter doifelsedimension \
+doifelsedimenstring doifelsedocumentargument doifelsedocumentfilename doifelsedrawingblack doifelseempty \
+doifelseemptyvalue doifelseemptyvariable doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs \
+doifelsefieldbody doifelsefieldcategory doifelsefigure doifelsefile doifelsefiledefined \
+doifelsefileexists doifelsefirstchar doifelseflagged doifelsefontchar doifelsefontpresent \
+doifelsefontsynonym doifelsehasspace doifelsehelp doifelseincsname doifelseinelement \
+doifelseinputfile doifelseinsertion doifelseinset doifelseinstring doifelseinsymbolset \
+doifelseintoks doifelseintwopassdata doifelseitalic doifelselanguage doifelselayerdata \
+doifelselayoutdefined doifelselayoutsomeline doifelselayouttextline doifelseleapyear doifelselist \
+doifelselocation doifelselocfile doifelsemainfloatbody doifelsemarking doifelsemeaning \
+doifelsemessage doifelsemode doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar \
+doifelsenextoptional doifelsenextoptionalcs doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage \
+doifelsenothing doifelsenumber doifelseobjectfound doifelseobjectreferencefound doifelseoddpage \
+doifelseoddpagefloat doifelseoldercontext doifelseolderversion doifelseoverlapping doifelseoverlay \
+doifelseparallel doifelseparentfile doifelsepath doifelsepathexists doifelsepatterns \
+doifelseposition doifelsepositionaction doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage \
+doifelsepositionsused doifelsereferencefound doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference \
+doifelsesamestring doifelsesetups doifelsesomebackground doifelsesomespace doifelsesomething \
+doifelsesometoks doifelsestringinstring doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined \
+doifelsesymbolset doifelsetext doifelsetextflow doifelsetextflowcollector doifelsetypingfile \
+doifelseundefined doifelseurldefined doifelsevalue doifelsevaluenothing doifelsevariable \
+doifempty doifemptyelse doifemptytoks doifemptyvalue doifemptyvalueelse \
+doifemptyvariable doifemptyvariableelse doifenv doifenvelse doiffastoptionalcheckcselse \
+doiffastoptionalcheckelse doiffieldbodyelse doiffieldcategoryelse doiffigureelse doiffile \
+doiffiledefinedelse doiffileelse doiffileexistselse doiffirstcharelse doifflaggedelse \
+doiffontcharelse doiffontpresentelse doiffontsynonymelse doifhasspaceelse doifhelpelse \
+doifincsnameelse doifinelementelse doifinputfileelse doifinsertionelse doifinset \
+doifinsetelse doifinstring doifinstringelse doifinsymbolset doifinsymbolsetelse \
+doifintokselse doifintwopassdataelse doifitalicelse doiflanguageelse doiflayerdataelse \
+doiflayoutdefinedelse doiflayoutsomelineelse doiflayouttextlineelse doifleapyearelse doiflistelse \
+doiflocationelse doiflocfileelse doifmainfloatbodyelse doifmarkingelse doifmeaningelse \
+doifmessageelse doifmode doifmodeelse doifnextbgroupcselse doifnextbgroupelse \
+doifnextcharelse doifnextoptionalcselse doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse \
+doifnot doifnotallcommon doifnotallmodes doifnotcommandhandler doifnotcommon \
+doifnotcounter doifnotdocumentargument doifnotdocumentfilename doifnotempty doifnotemptyvalue \
+doifnotemptyvariable doifnotenv doifnoteonsamepageelse doifnotescollected doifnotfile \
+doifnotflagged doifnothing doifnothingelse doifnotinset doifnotinsidesplitfloat \
+doifnotinstring doifnotmode doifnotnumber doifnotsamestring doifnotsetups \
+doifnotvalue doifnotvariable doifnumber doifnumberelse doifobjectfoundelse \
+doifobjectreferencefoundelse doifoddpageelse doifoddpagefloatelse doifoldercontextelse doifolderversionelse \
+doifoverlappingelse doifoverlayelse doifparallelelse doifparentfileelse doifpathelse \
+doifpathexistselse doifpatternselse doifposition doifpositionaction doifpositionactionelse \
+doifpositionelse doifpositiononpageelse doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse \
+doifreferencefoundelse doifrightpagefloatelse doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring \
+doifsamestringelse doifsetups doifsetupselse doifsomebackground doifsomebackgroundelse \
+doifsomespaceelse doifsomething doifsomethingelse doifsometoks doifsometokselse \
+doifstringinstringelse doifstructurelisthasnumberelse doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse \
+doiftext doiftextelse doiftextflowcollectorelse doiftextflowelse doiftypingfileelse \
+doifundefined doifundefinedcounter doifundefinedelse doifurldefinedelse doifvalue \
+doifvalueelse doifvaluenothing doifvaluenothingelse doifvaluesomething doifvariable \
+doifvariableelse doindentation dollar doloop doloopoverlist \
+donothing dontconvertfont dontleavehmode dontpermitspacesbetweengroups doordefinieren \
+doorlabelen dopositionaction doprocesslocalsetups doquadrupleargument doquadrupleempty \
+doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty dorechecknextindentation \
+dorecurse dorecurse dorepeatwithcommand doreplacefeature doresetandafffeature \
+doresetattribute dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument dosingleempty \
+dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature \
+dot dotfskip dotoks dotripleargument dotripleargumentwithset \
+dotripleempty dotripleemptywithset dotriplegroupempty doublebar doublebond \
+doublebrace doublebracket doubleparent dowith dowithnextbox \
+dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument dowithrange \
+dowithwargument dpofstring dummydigit dummyparameter dunnelijn \
+dunnelijnen eTeX edefconvertedargument eenregel efcmaxheight \
+efcmaxwidth efcminheight efcminwidth efcparameter effect \
+elapsedseconds elapsedtime eleftarrowfill eleftharpoondownfill eleftharpoonupfill \
+eleftrightarrowfill emphasisboldface emphasistypeface emspace enabledirectives \
+enableexperiments enablemode enableoutputstream enableparpositions enableregime \
+enabletrackers endnote endnote enskip enspace \
+env envvar eoverbarfill eoverbracefill eoverbracketfill \
+eoverparentfill epos equaldigits ergens erightarrowfill \
+erightharpoondownfill erightharpoonupfill ethiopic etwoheadrightarrowfill eunderbarfill \
+eunderbracefill eunderbracketfill eunderparentfill executeifdefined exitloop \
+exitloopnow expandcheckedcsname expanded expandfontsynonym externalfigurecollectionmaxheight \
+externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth externalfigurecollectionparameter externfiguur \
+fakebox fastdecrement fastincrement fastlocalframed fastscale \
+fastsetup fastsetupwithargument fastsetupwithargumentswapped fastswitchtobodyfont fastsxsy \
+feature feature fence fenced fetchallmarkings \
+fetchallmarks fetchmark fetchmarking fetchonemark fetchonemarking \
+fetchruntinecommand fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments \
+fifthofsixarguments figurefilename figurefilepath figurefiletype figurefullname \
+figureheight figurenaturalheight figurenaturalwidth figuresymbol figurewidth \
+filename filledhboxb filledhboxc filledhboxg filledhboxk \
+filledhboxm filledhboxr filledhboxy filler filterfromnext \
+filterfromvalue filterpages filterreference findtwopassdata finishregisterentry \
+firstcharacter firstcounter firstcountervalue firstoffivearguments firstoffourarguments \
+firstofoneargument firstofoneunexpanded firstofsixarguments firstofthreearguments firstofthreeunexpanded \
+firstoftwoarguments firstoftwounexpanded firstrealpage firstrealpagenumber firstsubcountervalue \
+firstsubpage firstsubpagenumber firstuserpage firstuserpagenumber fitfieldframed \
+fittopbaselinegrid flag floatuserdataparameter flushcollector flushlayer \
+flushlocalfloats flushnextbox flushnotes flushoutputstream flushshapebox \
+flushtextflow flushtokens flushtoks fontalternative fontbody \
+fontchar fontcharbyindex fontclass fontclassname fontface \
+fontfeaturelist fontsize fontstyle forcecharacterstripping forcelocalfloats \
+forgeteverypar forgetparameters forgetragged formula formulenummer \
+foundbox fourthoffivearguments fourthoffourarguments fourthofsixarguments frac \
+frameddimension framedparameter framedtext freezedimenmacro freezemeasure \
+frenchspacing fromlinenote frozenhbox gdefconvertedargument gdefconvertedcommand \
+gebruikJSscripts gebruikURL gebruikblokken gebruikexterndocument gebruikexternfiguur \
+gebruikexterngeluidsfragment gebruikgebied gebruikmodule gebruiksymbolen gebruiktypescript \
+gebruiktypescriptfile gebruikurl geenbovenenonderregels geenhoofdenvoetregels geenspatie \
+getMPdrawing getMPlayer getboxllx getboxlly getbufferdata \
+getcommacommandsize getcommalistsize getdayoftheweek getdayspermonth getdefinedbuffer \
+getdocumentargument getdocumentargumentdefault getdocumentfilename getdummyparameters getemptyparameters \
+geteparameters getexpandedparameters getfiguredimensions getfirstcharacter getfirsttwopassdata \
+getfromcommacommand getfromcommalist getfromtwopassdata getglyphdirect getglyphstyled \
+getgparameters getlasttwopassdata getlocalfloat getlocalfloats getmessage \
+getnamedglyphdirect getnamedglyphstyled getnamedtwopassdatalist getnaturaldimensions getnoflines \
+getobject getobjectdimensions getpaletsize getparameters getrandomcount \
+getrandomdimen getrandomfloat getrandomnumber getrandomseed getraweparameters \
+getrawgparameters getrawnoflines getrawparameters getrawxparameters getreference \
+getreferenceentry getroundednoflines getsubstring gettwopassdata gettwopassdatalist \
+getuvalue getvalue getvariable getvariabledefault getxparameters \
+globaldisablemode globalenablemode globalletempty globalpopbox globalpopmacro \
+globalpreventmode globalprocesscommalist globalpushbox globalpushmacro globalswapcounts \
+globalswapdimens globalswapmacros globalundefine glyphfontfile gobbledoubleempty \
+gobbleeightarguments gobblefivearguments gobblefiveoptionals gobblefourarguments gobblefouroptionals \
+gobbleninearguments gobbleoneargument gobbleoneoptional gobblesevenarguments gobblesingleempty \
+gobblesixarguments gobblespacetokens gobbletenarguments gobblethreearguments gobblethreeoptionals \
+gobbletwoarguments gobbletwooptionals gobbleuntil gobbleuntilrelax got \
+grabbufferdata grabbufferdatadirect grabuntil grave grayvalue \
+greedysplitstring greeknumerals grijskleur groupedcommand gsetboxllx \
+gsetboxlly gujaratinumerals gurmurkhinumerals haalbuffer haalmarkering \
+haarlijn hairspace halfwaybox handhaafblokken handletokens \
+handwritten hangul hanzi hash hat \
+hboxofvbox hboxreference hdofstring headhbox headlanguage \
+headnumbercontent headnumberdistance headnumberwidth headreferenceattributes headtextcontent \
+headtexts headtextwidth headvbox headwidth heightanddepthofstring \
+heightofstring heightspanningtext helptext hglue hiddencitation \
+hiddencite highlight highordinalstr hilo himilo \
+hl hoofdtaal hoog horizontalgrowingbar horizontalpositionbar \
+hphantom hpos hsizefraction hsmash hsmashbox \
+hsmashed hspace htdpofstring htofstring huidigedatum \
+huidigekopnummer hyphen hyphenatedcoloredword hyphenatedfile hyphenatedfilename \
+hyphenatedhbox hyphenatedpar hyphenatedurl hyphenatedword ibox \
+ifassignment iff ifinobject ifinoutputstream ifparameters \
+iftrialtypesetting ignoreimplicitspaces ignorevalue immediatesavetwopassdata impliedby \
+implies in inbinnen inbuiten includemenu \
+includeversioninfo increment increment increment increment \
+incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue \
+indentation index index infofont infofontbold \
+inheritparameter inhibitblank ininneredge ininnermargin initializeboxstack \
+inlijnd inlinebuffer inlinedbox inlinemath inlinemathematics \
+inlinemessage inlineordisplaymath inlinerange inlinker inlinkermarge \
+inlinkerrand inmarge innerflushshapebox inother inouteredge \
+inoutermargin input input inputfilebarename inputfilename \
+inputfilerealsuffix inputfilesuffix inputgivenfile inrechter inrechtermarge \
+inrechterrand inregel insertpages installactionhandler installactivecharacter \
+installanddefineactivecharacter installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler \
+installbasicparameterhandler installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler \
+installdefinitionset installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler \
+installdirectsetuphandler installdirectstyleandcolorhandler installeertaal installeertaal installframedautocommandhandler \
+installframedcommandhandler installleftframerenderer installnamespace installoutputroutine installpagearrangement \
+installparameterhandler installparameterhashhandler installparametersethandler installparentinjector installrightframerenderer \
+installrootparameterhandler installsetuphandler installsetuponlycommandhandler installshipoutmethod installsimplecommandhandler \
+installsimpleframedcommandhandler installstyleandcolorhandler installswitchcommandhandler installswitchsetuphandler installtexdirective \
+installtextracker installtopframerenderer installunitsseparator installunitsspace installversioninfo \
+integerrounding interactiebalk interactiebuttons interactiemenu intertext \
+invokepageheandler invullijnen invulregel invultekst inwilijnd \
+istltdir istrtdir italic italicbold italiccorrection \
+items itemtag itm its jobfilename \
+jobfilesuffix kap kap keeplinestogether keepunwantedspaces \
+kerncharacters kleur kleurenbalk kleurwaarde kloonveld \
+kolom kop kopnummer kopsym koptekst \
+koreancirclenumerals koreannumerals koreannumeralsc koreannumeralsp koreanparentnumerals \
+laag labellanguage labeltekst labeltexts laho \
+languageCharacters languagecharacters languagecharwidth lastcounter lastcountervalue \
+lastdigit lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol \
+lastrealpage lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber \
+lasttwodigits lastuserpage lastuserpagenumber lateluacode latin \
+layeredtext layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata \
+lbox left leftbottombox leftbox lefthbox \
+leftheadtext leftlabeltext leftline leftmathlabeltext leftorrighthbox \
+leftorrightvbox leftorrightvtop leftskipadaption leftsubguillemot lefttopbox \
+lefttoright lefttorighthbox lefttorightvbox lefttorightvtop legeregels \
+letbeundefined letcatcodecommand letcscsname letcsnamecs letcsnamecsname \
+letdummyparameter letempty letgvalue letgvalueempty letgvalurelax \
+letter letterampersand letterat letterbackslash letterbar \
+letterbgroup letterclosebrace lettercolon letterdollar letterdoublequote \
+letteregroup letterescape letterexclamationmark letterhash letterhat \
+letterleftbrace letterless lettermore letteropenbrace letterpercent \
+letterquestionmark letterrightbrace letters lettersinglequote letterslash \
+letterspacing lettertilde letterunderscore letvalue letvalueempty \
+letvaluerelax lfence lhbox lijndikte lijstlengte \
+limitatelines limitatetext limitatetext limtatefirstline line \
+linenote linespanningtext listcitation listcitation listcitation \
+listcite listcite listcite listnamespaces llap \
+loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \
+loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \
+loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \
+localhsize localpopbox localpopmacro localpushbox localpushmacro \
+localundefine locatedfilepath locatefilepath locfilename logo \
+lomihi lowerbox lowercased lowercasestring lowerleftdoubleninequote \
+lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop \
+luaTeX luacode luaconditional luaenvironment luaexpanded \
+luafunction luajitTeX luamajorversion luaminorversion luaparameterset \
+luasetup luaversion m mLeftarrow mLeftrightarrow \
+mRightarrow maand makecharacteractive makerawcommalist makestrutofbox \
+mapfontsize mar margetekst margetitel margewoord \
+margindata markcontent markeer markinjector mat \
+math mathbf mathbi mathblackboard mathbs \
+mathcommand mathdefault mathfraktur mathfunction mathit \
+mathlabellanguage mathlabeltext mathlabeltexts mathop mathrm \
+mathscript mathsl mathss mathtext mathtextbf \
+mathtextbi mathtextbs mathtextit mathtextsl mathtexttf \
+mathtf mathtriplet mathtt mathupright mathword \
+mathwordbf mathwordbi mathwordbs mathwordit mathwordsl \
+mathwordtf maxaligned mbox mcframed measure \
+measured medskip medspace menubutton menubutton \
+mequal message metaTeX mfence mfunction \
+mfunctionlabeltext mhbox mhookleftarrow mhookrightarrow middle \
+middlealigned middlebox midhbox minimalhbox mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold monobold mononormal monthlong monthshort \
+mprandomnumber mrel mrightarrow mrightharpoondown mrightharpoonup \
+mrightleftharpoons mrightoverleftarrow mtext mtriplerel mtwoheadleftarrow \
+mtwoheadrightarrow naar naarbox naarpagina namedheadnumber \
+namedstructureheadlocation namedstructureuservariable namedstructurevariable namedtaggedlabeltexts naturalhbox \
+naturalhpack naturalvbox naturalvcenter naturalvpack naturalvtop \
+naturalwd negatecolorbox negated negthinspace newattribute \
+newcatcodetable newcounter newevery newfrenchspacing newmode \
+newsignal newsystemmode nextbox nextboxdp nextboxht \
+nextboxhtdp nextboxwd nextcounter nextcountervalue nextdepth \
+nextparagraphs nextrealpage nextrealpagenumber nextsubcountervalue nextsubpage \
+nextsubpagenumber nextuserpage nextuserpagenumber nihongo nocitation \
+nocitation nocite nocite nodetostring noffigurepages \
+noflines noflocalfloats noindentation nokap nonfrenchspacing \
+nonmathematics noot nop nop normal \
+normalboldface normalframedwithsettings normalizebodyfontsize normalizedfontsize normalizefontdepth \
+normalizefontheight normalizefontline normalizefontwidth normalizetextdepth normalizetextheight \
+normalizetextline normalizetextwidth normaltypeface notesymbol notragged \
+ntimes numberofpoints obeydepth objectdepth objectheight \
+objectmargin objectwidth obox offset offsetbox \
+omgeving omgeving omlaag omlijnd onbekend \
+onderdeel onderdeel onedigitrounding op operatorlanguage \
+operatortext oplinkermarge oppagina oprechtermarge ordinaldaynumber \
+ordinalstr ornamenttext ornamenttext ornamenttext outputfilename \
+outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy over \
+overbar overbar overbars overbartext overbarunderbar \
+overbrace overbracetext overbraceunderbrace overbracket overbrackettext \
+overbracketunderbracket overlaybutton overlaybutton overlaycolor overlaydepth \
+overlayfigure overlayheight overlaylinecolor overlaylinewidth overlayoffset \
+overlayrollbutton overlaywidth overleftarrow overleftharpoondown overleftharpoonup \
+overleftrightarrow overloaderror overparent overparenttext overparentunderparent \
+overrightarrow overrightharpoondown overrightharpoonup overset overstrike \
+overstrikes overtwoheadleftarrow overtwoheadrightarrow pagearea pagebreak \
+pagefigure pagegridspanwidth pageinjection pageinjection pagestaterealpage \
+pagina paginanummer paginareferentie paletsize part \
+paslayoutaan passendveld pdfTeX pdfactualtext pdfbackendactualtext \
+pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo \
+pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern \
+pdfbackendsetshade pdfcolor pdfeTeX percent percentdimen \
+permitcaretescape permitcircumflexescape permitspacesbetweengroups persiandecimals persiannumerals \
+phantom phantombox pickupgroupedcommand plaatsbookmarks plaatsformule \
+plaatskopnummer plaatskoptekst plaatslegenda plaatslijst plaatslijstmetsynoniemen \
+plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatsopgrid \
+plaatspaginanummer plaatsplaatsblok plaatsregister plaatsruwelijst plaatssamengesteldelijst \
+plaatssubformule plaatsvoetnoten placeattachments placebtxrendering placechemical \
+placecitation placecomments placecontent placecurrentformulanumber placedbox \
+placefigure placefloatwithsetups placeframed placegraphic placehelp \
+placeindex placeinitial placeintermezzo placelayer placelayeredtext \
+placelistofabbreviations placelistofchemicals placelistoffigures placelistofgraphics placelistofintermezzi \
+placelistoflogos placelistofpublications placelistofsorts placelistoftables placelocalnotes \
+placement placenamedfloat placenamedformula placenotes placepairedbox \
+placeparallel placerenderingwindow placetable popattribute popmacro \
+popmode popsystemmode positioneer positionoverlay positionregionoverlay \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prefixlanguage prefixtext prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols \
+presetheadtext presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext \
+presettaglabeltext presetunittext pretocommalist prevcounter prevcountervalue \
+preventmode prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage \
+prevsubpagenumber prevuserpage prevuserpagenumber procent processMPbuffer \
+processMPfigurefile processaction processallactionsinset processassignlist processassignmentcommand \
+processassignmentlist processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand \
+processcommalist processcommalistwithparameters processcontent processfile processfilemany \
+processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \
+processlinetablebuffer processlinetablefile processlist processmonth processranges \
+processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \
+processyear produkt produkt profiledbox profilegivenbox \
+programma projekt projekt pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped psh punten punten \
+purenumber pushattribute pushbutton pushmacro pushmode \
+pushoutputstream pushsystemmode qquad quad quitcommalist \
+quitprevcommalist quittypescriptscanning raggedbottom raggedcenter raggedleft \
+raggedright raggedwidecenter raisebox ran randomizetext \
+randomnumber raw rawcounter rawcountervalue rawdate \
+rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters rawprocessaction \
+rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue rbox \
+readfile readfixfile readjobfile readlocfile readsetfile \
+readsysfile readtexfile readxmlfile realSmallCapped realSmallcapped \
+realpagenumber realsmallcapped recursedepth recurselevel recursestring \
+redoconvertfont ref refereer referenceprefix referentie \
+regellinks regelmidden regelrechts registerattachment registerctxluafile \
+registerexternalfigure registerfontclass registerhyphenationexception registerhyphenationpattern registermenubuttons \
+registersort registersynonym registerunit regular relatemarking \
+relateparameterhandlers relaxvalueifundefined remainingcharacters removebottomthings removedepth \
+removefromcommalist removelastskip removelastspace removemarkedcontent removepunctuation \
+removesubstring removetoks removeunwantedspaces replacefeature replacefeature \
+replaceincommalist replaceword rescan rescanwithsetup resetMPdrawing \
+resetMPenvironment resetMPinstance resetallattributes resetandaddfeature resetandaddfeature \
+resetbreakpoints resetbuffer resetcharacteralign resetcharacterkerning resetcharacterspacing \
+resetcharacterstripping resetcollector resetcounter resetdigitsmanipulation resetdirection \
+resetfeature resetflag resetfontcolorsheme resetfontfallback resetfontsolution \
+resethyphenationfeatures resetinjector resetinteractionmenu resetitaliccorrection resetlayer \
+resetlocalfloats resetmarker resetmarkering resetmode resetpagenumber \
+resetparallel resetpath resetpenalties resetprofile resetreference \
+resetreplacement resetscript resetsetups resetshownsynonyms resetsubpagenumber \
+resetsymbolset resetsystemmode resettimer resettrackers resettrialtypesetting \
+resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue resetvisualizers \
+reshapebox restartcounter restorebox restorecatcodes restorecounter \
+restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic reuseMPgraphic \
+reuserandomseed revivefeature rfence rhbox right \
+rightbottombox rightbox righthbox rightheadtext rightlabeltext \
+rightline rightmathlabeltext rightorleftpageaction rightskipadaption rightsubguillemot \
+righttoleft righttolefthbox righttoleftvbox righttoleftvtop righttopbox \
+rlap rob robustaddtocommalist robustdoifelseinset robustdoifinsetelse \
+robustpretocommalist rollbutton rollbutton roman romeins \
+rooster roteer rtop rul ruledhbox \
+ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \
+ruledvpack ruledvtop runMPbuffer safechar sans \
+sansbold sansnormal sansserif savebox savebtxdataset \
+savebuffer savebuffer savecounter savecurrentattributes savenormalmeaning \
+savetaggedtwopassdata savetwopassdata sbox schaal scherm \
+schrijfnaarlijst schrijftussenlijst secondoffivearguments secondoffourarguments secondofsixarguments \
+secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \
+seeindex select selecteerblokken serializecommalist serializedcommalist \
+serif serifbold serifnormal setJSpreamble setMPlayer \
+setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable setMPvariables \
+setbar setbigbodyfont setboxllx setboxlly setbreakpoints \
+setcapstrut setcatcodetable setcharacteralign setcharactercasing setcharactercleaning \
+setcharacterkerning setcharacterspacing setcharacterstripping setcharstrut setcollector \
+setcolormodell setcounter setcounterown setcurrentfontclass setdataset \
+setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument setdocumentargumentdefault \
+setdocumentfilename setdummyparameter setelementexporttag setemeasure setevalue \
+setevariable setevariables setfirstline setflag setfont \
+setfontcolorsheme setfontfeature setfontsolution setfontstrut setgmeasure \
+setgvalue setgvariable setgvariables sethyphenatedurlafter sethyphenatedurlbefore \
+sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector setinteraction \
+setinterfacecommand setinterfaceconstant setinterfaceelements setinterfacemessage setinterfacevariable \
+setinternalrendering setitaliccorrection setlayer setlayerframed setlayerframed \
+setlayertext setlocalhsize setmainbodyfont setmainparbuilder setmarker \
+setmarking setmathstyle setmeasure setmessagetext setmode \
+setnostrut setnote setnote setnotetext setnotetext \
+setobject setoldstyle setpagegrid setpagereference setpagestate \
+setpagestaterealpageno setpenalties setpercentdimen setposition setpositionbox \
+setpositiondata setpositiondataplus setpositiononly setpositionplus setpositionstrut \
+setprofile setrandomseed setreference setreferencedobject setregisterentry \
+setreplacement setrigidcolumnbalance setrigidcolumnhsize setscript setsectionblock \
+setsimplecolumnhsize setsmallbodyfont setsmallcaps setstackbox setstructurepageregister \
+setstrut setsuperiors setsystemmode settabular settaggedmetadata \
+settightobject settightreferencedobject settightunreferencedobject settrialtypesetting setuevalue \
+setugvalue setunreferencedobject setup setup setupMPgraphics \
+setupMPinstance setupMPpage setupMPvariables setupTABLE setupTEXpage \
+setupattachment setupbackend setupbar setupbleeding setupbookmark \
+setupbtx setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist \
+setupbtxregister setupbtxrendering setupbutton setupcharacterkerning setupcharacterspacing \
+setupchemical setupchemicalframed setupcollector setupcolumnspan setupcombination \
+setupcontent setupcounter setupdataset setupdelimitedtext setupdescription \
+setupdirections setupdocument setupeffect setupenumeration setupenv \
+setupexport setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory \
+setupfieldcontentframed setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline \
+setupfittingpage setupfloatcaption setupfontexpansion setupfontprotrusion setupfontsolution \
+setupformula setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative \
+setuphelp setuphigh setuphighlight setuphyphenation setupindex \
+setupinitial setupinsertion setupitaliccorrection setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinenote setuplinetable setuplistalternative \
+setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh \
+setuplowmidhigh setupmarginblock setupmargindata setupmarginframed setupmarginrule \
+setupmathcases setupmathematics setupmathfence setupmathfraction setupmathframed \
+setupmathlabeltext setupmathmatrix setupmathornament setupmathradical setupmathstackers \
+setupmathstyle setupmixedcolumns setupmodule setupnotation setupnote \
+setupoffset setupoffsetbox setupoperatortext setupoutputroutine setupoutputroutine \
+setuppagechecker setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines \
+setuppagegridspan setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift \
+setuppagestate setuppairedbox setupparagraph setupparagraphintro setupparallel \
+setupperiods setuppositionbar setupprefixtext setupprocessor setupprofile \
+setupquotation setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix \
+setuprenderingwindow setups setups setupscale setupscript \
+setupselector setupshift setupsidebar setupspellchecking setupstretched \
+setupstruts setupstyle setupsubformula setuptabulation setuptagging \
+setuptaglabeltext setuptextflow setuptooltip setupunit setupunittext \
+setupuserpagenumber setupversion setupviewerlayer setupvspacing setupwithargument \
+setupwithargumentswapped setupxml setupxtable setuvalue setuxvalue \
+setvalue setvariable setvariables setvisualizerfont setwidthof \
+setxmeasure setxvalue setxvariable setxvariables sfrac \
+shapedhbox shiftdown shiftup showallmakeup showattributes \
+showboxes showbtxdatasetauthors showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetcompleteness \
+showbtxdatasetfields showbtxdatasetfields showbtxfields showbtxfields showbtxhashedauthors \
+showbtxtables showchardata showcharratio showcolorbar showcolorcomponents \
+showcolorset showcolorstruts showcounter showdirectives showdirsinmargin \
+showedebuginfo showexperiments showfont showfontdata showfontkerns \
+showfontparameters showfontstrip showfontstyle showglyphs showgridsnapping \
+showhelp showhyphenationtrace showhyphens showinjector showjustification \
+showkerning showlayoutcomponents showligature showligatures showlogcategories \
+showmargins showmessage showminimalbaseline shownextbox showotfcomposition \
+showparentchain showsetupsdefinition showtimer showtokens showtrackers \
+showvalue showvariable showwarning simplealignedbox simplealignedboxplus \
+simplealignedspreadbox simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign \
+singlebond sixthofsixarguments slanted slantedbold slicepages \
+slovenianNumerals sloveniannumerals small smallbodyfont smallbold \
+smallbolditalic smallboldslanted smallcappedcharacters smallcappedromannumerals smaller \
+smallitalicbold smallnormal smallskip smallslanted smallslantedbold \
+smalltype smash smashbox smashboxed smashedhbox \
+smashedvbox snaptogrid snaptogrid som someheadnumber \
+somekindoftab somelocalfloat somenamedheadnumber someplace spanishNumerals \
+spanishnumerals spatie speech spiegel splitdfrac \
+splitfilename splitfrac splitoffbase splitofffull splitoffkind \
+splitoffname splitoffpath splitoffroot splitofftokens splitofftype \
+splitsplaatsblok splitstring spreadhbox sqrt stackrel \
+startJScode startJSpreamble startLUA startLUA startMP \
+startMP startMPclip startMPcode startMPdefinitions startMPdrawing \
+startMPdrawing startMPenvironment startMPextensions startMPinclusions startMPinitializations \
+startMPpage startMPpositiongraphic startMPpositionmethod startMPrun startPARSEDXML \
+startPARSEDXML startTABLE startTABLE startTABLEbody startTABLEbody \
+startTABLEfoot startTABLEfoot startTABLEhead startTABLEhead startTABLEnext \
+startTABLEnext startTC startTD startTDs startTEX \
+startTEX startTEXpage startTH startTN startTR \
+startTRs startTX startTY startXML startXML \
+startachtergrond startachtergrond startalign startalignment startallmodes \
+startappendices startarrangedpages startattachment startbackmatter startbar \
+startbar startbitmapimage startblockquote startbodymatter startboxedcolumns \
+startbtxlabeltext startbtxrenderingdefinitions startbuffer startbuffer startbut \
+startcases startcatcodetable startcatcodetable startcenteraligned startchapter \
+startcharacteralign startcheckedfences startchemical startcitaat startciteer \
+startcollect startcollecting startcolorintent startcolorset startcolumns \
+startcolumnspan startcom startcombination startcombination startcomment \
+startcontextcode startcontextdefinitioncode startctxfunction startctxfunctiondefinition startcurrentcolor \
+startcurrentlistentrywrapper startdelimited startdelimitedtext startdisplaymath startdmath \
+startdocument starteffect startembeddedxtable startembeddedxtable startendnote \
+startendnote startendofline startexceptions startexpanded startexpandedcollect \
+startextendedcatcodetable startexternalfigurecollection startfigure startfiguretext startfittingpage \
+startfloatcombination startfloatcombination startfont startfontclass startfontsolution \
+startformula startformulas startframedcontent startframedtext startfrontmatter \
+startgeg startgot startgraphictext startgridsnapping startgridsnapping \
+starthboxestohbox starthelptext starthiding starthighlight starthyphenation \
+startimath startindentation startindentedtext startinteractiemenu startinteraction \
+startinterface startintermezzotext startintertext startitemgroup startitemize \
+startkantlijn startkantlijn startkleur startkleur startkleur \
+startknockout startkop startkoptekst startlabeltekst startlayout \
+startlegend startlinealignment startlinecorrection startlinenote startlinenumbering \
+startlinenumbering startlines startlinetable startlinetablebody startlinetablecell \
+startlinetablehead startlocalfootnotes startlocalheadsetup startlocallinecorrection startlocalnotes \
+startlocalsetups startlocalsetups startlua startluacode startluaparameterset \
+startluasetups startluasetups startmakeup startmarginblock startmarkedcontent \
+startmathalignment startmathcases startmathlabeltext startmathmatrix startmathmode \
+startmathstyle startmathstyle startmatrices startmatrix startmaxaligned \
+startmdformula startmiddlealigned startmixedcolumns startmode startmodeset \
+startmodule startmodule startmoduletestsection startmpformula startnaar \
+startnamedsection startnamedsubformulas startnarrow startnarrow startnarrow \
+startnarrower startnegative startnicelyfilledbox startnointerference startnop \
+startnotallmodes startnotext startnotmode startomgeving startomgeving \
+startomlijnd startonderdeel startonderdeel startopelkaar startoperatortext \
+startopposite startoutputstream startoverlay startoverprint startpagecomment \
+startpagefigure startpagegrid startpagegridspan startpagelayout startpar \
+startpar startparagraph startparagraphs startparagraphscell startparbuilder \
+startpart startpath startplaatsformule startplaatsformule startplaatslegenda \
+startplaatsplaatsblok startplacechemical startplacefigure startplacegraphic startplaceintermezzo \
+startplacepairedbox startplacetable startpositioning startpositionoverlay startpositive \
+startpostponing startprefixtext startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand \
+startprocesscommalist startprodukt startprodukt startprojekt startprojekt \
+startprotect startprotectedcolors startpsh startpublicatie startpunctuation \
+startrandomized startrandomseed startraw startrawsetups startrawsetups \
+startreadingfile startreferenceprefix startreferenceprefix startregel startregellinks \
+startregelmidden startregelrechts startregime startregister startreusableMPgraphic \
+startrob startrul startscript startsdformula startsection \
+startsectionblock startsectionblockenvironment startsectionlevel startsetups startsetups \
+startshapebox startshift startsidebar startsimplecolumns startsom \
+startspecialitem startspecialitem startspecialitem startspeech startspformula \
+startspread startstartstop startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter \
+startstructurepageregister startstrut startstyle startstyle startsubformulas \
+startsubject startsubsection startsubsentence startsubstack startsubsubject \
+startsubsubsection startsubsubsubject startsubsubsubsection startsubsubsubsubject startsubsubsubsubsection \
+startsubsubsubsubsubject startsymbolset starttable starttable starttablehead \
+starttables starttables starttabletail starttabletext starttabulate \
+starttabulatehead starttabulatetail starttagged starttaglabeltext starttekstlijn \
+starttexcode starttexcode starttexdefinition starttext starttext \
+starttextbackground starttextbackgroundmanual starttextcolor starttextcolorintent starttextflow \
+starttitle starttokens starttxt starttypescript starttypescriptcollection \
+starttyping starttyping startuniqueMPgraphic startuniqueMPpagegraphic startunittext \
+startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter startusingbtxspecification \
+startvboxtohbox startvboxtohboxseparator startviewerlayer startvoetnoot startvoetnoot \
+startxcell startxcellgroup startxgroup startxmldisplayverbatim startxmlinlineverbatim \
+startxmlraw startxmlsetups startxmlsetups startxrow startxrowgroup \
+startxtable startxtable startxtablebody startxtablebody startxtablefoot \
+startxtablefoot startxtablehead startxtablehead startxtablenext startxtablenext \
+stelachtergrondenin stelachtergrondenin stelachtergrondin stelalineasin stelalineasin \
stelarrangerenin stelblankoin stelblokin stelblokjesin stelblokkopjein \
-stelblokkopjesin stelbovenin stelboventekstenin stelbufferin stelbuttonsin \
-stelciterenin stelclipin stelcombinatiesin stelcommentaarin steldoordefinierenin \
-steldoornummerenin steldunnelijnenin stelexternefigurenin stelformulesin stelformulierenin \
-stelhoofdin stelhoofdtekstenin stelingesprongentextin stelinmargein stelinspringenin \
-stelinteractiebalkin stelinteractiein stelinteractiemenuin stelinteractieschermin stelinterliniein \
-stelinvullijnenin stelinvulregelsin stelitemgroepin stelitemsin stelkadertekstenin \
-stelkantlijnin stelkapitalenin stelkleurenin stelkleurin stelkolomgroepin \
-stelkolomgroepregelsin stelkolomgroepstartin stelkolommenin stelkopin stelkopnummerin \
-stelkoppeltekenin stelkoppenin stelkoptekstin stelkorpsin stelkorpsomgevingin \
-stellabeltekstin stellayoutin stellegendain stellijndiktein stellijnin \
-stellijstin stelmargeblokkenin stelmarkeringin stelnaastplaatsenin stelnummerenin \
-stelnummerin stelomlijndin stelonderin stelonderstrepenin stelondertekstenin \
-stelopmaakin stelopsommingenin stelpaginacommentaarin stelpaginanummerin stelpaginanummeringin \
-stelpaginaovergangenin stelpaletin stelpapierformaatin stelpapierin stelparagraafnummerenin \
-stelplaatsblokin stelplaatsblokkenin stelplaatsbloksplitsenin stelplaatsin stelpositionerenin \
-stelprofielenin stelprogrammasin stelpublicatiesin stelrastersin stelreferentielijstin \
-stelrefererenin stelregelnummerenin stelregelsin stelregisterin stelroterenin \
-stelsamengesteldelijstin stelsectieblokin stelsectiein stelsmallerin stelsorterenin \
-stelspatieringin stelstartstopin stelstrutin stelsubpaginanummerin stelsymboolsetin \
-stelsynchronisatiebalkin stelsynchronisatiein stelsynoniemenin stelsysteemin steltaalin \
-steltabellenin steltabin steltabulatiein steltekstachtergrondin steltekstin \
-steltekstinhoudin steltekstlijnenin steltekstpositiein stelteksttekstenin steltekstvariabelein \
-steltolerantiein steltypein steltypenin steluitlijnenin steluitvoerin \
-stelurlin stelveldenin stelveldin stelversiesin stelvoetin \
-stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin stelwiskundeuitlijnenin stelwitruimtein \
-stopachtergrond stopalignment stopbackground stopbuffer stopcitaat \
-stopcodering stopcolor stopcolumns stopcombinatie stopcombination \
-stopcomment stopcomponent stopdescription stopdocument stopenumeration \
-stopenvironment stopfact stopfigure stopfloattext stopformula \
-stopframedtext stopglobaal stophiding stopinteractionmenu stopitemgroup \
-stopkantlijn stopkleur stopkolomgroep stopkolommen stopkolomopmaak \
-stoplegend stopline stoplinecorrection stoplinenumbering stoplines \
-stoplocal stoplocalenvironment stoplocalfootnotes stoplokaal stoplokalevoetnoten \
-stopmakeup stopmargeblok stopmarginblock stopmarginrule stopnaast \
-stopnamemakeup stopnarrower stopomgeving stopomlijnd stoponderdeel \
-stopopelkaar stopopmaak stopopposite stopoverlay stopoverview \
-stopoverzicht stoppacked stopparagraph stoppositioneren stoppositioning \
-stoppostponing stopproduct stopprodukt stopprofiel stopprofile \
-stopproject stopprojekt stopquotation stopraster stopregel \
-stopregelcorrectie stopregelnummeren stopregels stopsmaller stopsymbolset \
-stopsynchronisatie stopsynchronization stoptabel stoptabellen stoptable \
-stoptables stoptabulate stoptekst stoptekstachtergrond stoptekstlijn \
-stoptextrule stoptyping stopuitlijnen stopunpacked stopvanelkaar \
-stopversie stopversion stretched sub subformulenummer \
-subject subpaginanummer subsection subsubject subsubsection \
-subsubsubject suggestie switchnaarkorps switchtobodyfont switchtorawfont \
-sym symbol symbool symoffset synchronisatiebalk \
-synchroniseer synchronizationbar synchronize synonym taal \
-tab tekstbreedte teksthoogte tekstlijn tekstreferentie \
-tekstvariabele testkolom testpagina tex textreference \
-textrule thinrule thinrules title toelichting \
-tooltip toonexternefiguren toongrid tooninstellingen toonkader \
+stelbovenin stelboventekstenin stelbufferin stelciterenin stelclipin \
+stelcommentaarin steldunnelijnenin stelformulierenin stelhoofdin stelhoofdtekstenin \
+stelingesprongentextin stelinspringenin stelinteractiebalkin stelinteractiein stelinteractiein \
+stelinteractiemenuin stelinteractieschermin stelinterliniein stelinterliniein stelinterliniein \
+stelinterliniein stelinterliniein stelinterliniein stelinvullijnenin stelinvulregelsin \
+stelitemgroepin stelitemgroepin stelitemsin stelkantlijnin stelkapitalenin \
+stelkleurenin stelkleurin stelkolommenin stelkopin stelkopnummerin \
+stelkoppeltekenin stelkoptekstin stelkorpsin stellabeltekstin stellayoutin \
+stellayoutin stellegendain stellijndiktein stellijstin stelmarkeringin \
+stelnaastplaatsenin stelomlijndin stelonderin stelondertekstenin stelopmaakin \
+stelpaginacommentaarin stelpaginanummerin stelpaginanummeringin stelpaginaovergangenin stelpaletin \
+stelpapierformaatin stelpapierformaatin stelpapierin stelparagraafnummerenin stelplaatsblokin \
+stelplaatsbloksplitsenin stelplaatsin stelpositionerenin stelprogrammasin stelrefererenin \
+stelregelnummerenin stelregelsin stelregisterin stelregisterin stelroterenin \
+stelsamengesteldelijstin stelsectieblokin stelsmallerin stelsorterenin stelspatieringin \
+stelstartstopin stelsubpaginanummerin stelsymboolsetin stelsynoniemenin steltaalin \
+steltabellenin steltabulatiein steltekstachtergrondin steltekstin steltekstinhoudin \
+steltekstlijnenin stelteksttekstenin steltolerantiein steltypein steltypenin \
+steluitlijnenin stelurlin stelveldenin stelveldin stelvoetin \
+stelvoettekstenin stelwiskundeuitlijnenin stelwitruimtein stopJScode stopJSpreamble \
+stopLUA stopLUA stopMP stopMP stopMPclip \
+stopMPcode stopMPdefinitions stopMPdrawing stopMPdrawing stopMPenvironment \
+stopMPextensions stopMPinclusions stopMPinitializations stopMPpage stopMPpositiongraphic \
+stopMPpositionmethod stopMPrun stopPARSEDXML stopPARSEDXML stopTABLE \
+stopTABLE stopTABLEbody stopTABLEbody stopTABLEfoot stopTABLEfoot \
+stopTABLEhead stopTABLEhead stopTABLEnext stopTABLEnext stopTC \
+stopTD stopTDs stopTEX stopTEX stopTEXpage \
+stopTH stopTN stopTR stopTRs stopTX \
+stopTY stopXML stopXML stopachtergrond stopachtergrond \
+stopalign stopalignment stopallmodes stopappendices stoparrangedpages \
+stopattachment stopbackmatter stopbar stopbar stopbitmapimage \
+stopblockquote stopbodymatter stopboxedcolumns stopbtxlabeltext stopbtxrenderingdefinitions \
+stopbuffer stopbuffer stopbut stopcases stopcatcodetable \
+stopcatcodetable stopcenteraligned stopchapter stopcharacteralign stopcheckedfences \
+stopchemical stopcitaat stopciteer stopcollect stopcollecting \
+stopcolorintent stopcolorset stopcolumns stopcolumnspan stopcom \
+stopcombination stopcombination stopcomment stopcontextcode stopcontextdefinitioncode \
+stopctxfunction stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper stopdelimited \
+stopdelimitedtext stopdisplaymath stopdmath stopdocument stopeffect \
+stopembeddedxtable stopembeddedxtable stopendnote stopendnote stopendofline \
+stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection \
+stopfigure stopfiguretext stopfittingpage stopfloatcombination stopfloatcombination \
+stopfont stopfontclass stopfontsolution stopformula stopformulas \
+stopframedcontent stopframedtext stopfrontmatter stopgeg stopgot \
+stopgraphictext stopgridsnapping stopgridsnapping stophboxestohbox stophelptext \
+stophiding stophighlight stophyphenation stopimath stopindentation \
+stopindentedtext stopinteractiemenu stopinteraction stopinterface stopintermezzotext \
+stopintertext stopitemgroup stopitemize stopkantlijn stopkantlijn \
+stopkleur stopkleur stopkleur stopknockout stopkop \
+stopkoptekst stoplabeltekst stoplayout stoplegend stoplinealignment \
+stoplinecorrection stoplinenote stoplinenumbering stoplinenumbering stoplines \
+stoplinetable stoplinetablebody stoplinetablecell stoplinetablehead stoplocalfootnotes \
+stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups stoplocalsetups \
+stoplua stopluacode stopluaparameterset stopluasetups stopluasetups \
+stopmakeup stopmarginblock stopmarkedcontent stopmathalignment stopmathcases \
+stopmathlabeltext stopmathmatrix stopmathmode stopmathstyle stopmathstyle \
+stopmatrices stopmatrix stopmaxaligned stopmdformula stopmiddlealigned \
+stopmixedcolumns stopmode stopmodeset stopmodule stopmodule \
+stopmoduletestsection stopmpformula stopnaar stopnamedsection stopnamedsubformulas \
+stopnarrow stopnarrow stopnarrow stopnarrower stopnegative \
+stopnicelyfilledbox stopnointerference stopnop stopnotallmodes stopnotext \
+stopnotmode stopomgeving stopomgeving stopomlijnd stoponderdeel \
+stoponderdeel stopopelkaar stopoperatortext stopopposite stopoutputstream \
+stopoverlay stopoverprint stoppagecomment stoppagefigure stoppagegrid \
+stoppagegridspan stoppagelayout stoppar stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \
+stopplaatsformule stopplaatsformule stopplaatslegenda stopplaatsplaatsblok stopplacechemical \
+stopplacefigure stopplacegraphic stopplaceintermezzo stopplacepairedbox stopplacetable \
+stoppositioning stoppositionoverlay stoppositive stoppostponing stopprefixtext \
+stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopprodukt \
+stopprodukt stopprojekt stopprojekt stopprotect stopprotectedcolors \
+stoppsh stoppublicatie stoppunctuation stoprandomized stoprandomseed \
+stopraw stoprawsetups stoprawsetups stopreadingfile stopreferenceprefix \
+stopreferenceprefix stopregel stopregellinks stopregelmidden stopregelrechts \
+stopregime stopregister stopreusableMPgraphic stoprob stoprul \
+stopscript stopsdformula stopsection stopsectionblock stopsectionblockenvironment \
+stopsectionlevel stopsetups stopsetups stopshapebox stopshift \
+stopsidebar stopsimplecolumns stopsom stopspecialitem stopspecialitem \
+stopspecialitem stopspeech stopspformula stopspread stopstartstop \
+stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter stopstructurepageregister stopstrut \
+stopstyle stopstyle stopsubformulas stopsubject stopsubsection \
+stopsubsentence stopsubstack stopsubsubject stopsubsubsection stopsubsubsubject \
+stopsubsubsubsection stopsubsubsubsubject stopsubsubsubsubsection stopsubsubsubsubsubject stopsymbolset \
+stoptable stoptable stoptablehead stoptables stoptables \
+stoptabletail stoptabletext stoptabulate stoptabulatehead stoptabulatetail \
+stoptagged stoptaglabeltext stoptekstlijn stoptexcode stoptexcode \
+stoptexdefinition stoptext stoptext stoptextbackground stoptextbackgroundmanual \
+stoptextcolor stoptextcolorintent stoptextflow stoptitle stoptokens \
+stoptxt stoptypescript stoptypescriptcollection stoptyping stoptyping \
+stopuniqueMPgraphic stopuniqueMPpagegraphic stopunittext stopunpacked stopusableMPgraphic \
+stopuseMPgraphic stopusemathstyleparameter stopusingbtxspecification stopvboxtohbox stopvboxtohboxseparator \
+stopviewerlayer stopvoetnoot stopvoetnoot stopxcell stopxcellgroup \
+stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw stopxmlsetups \
+stopxmlsetups stopxrow stopxrowgroup stopxtable stopxtable \
+stopxtablebody stopxtablebody stopxtablefoot stopxtablefoot stopxtablehead \
+stopxtablehead stopxtablenext stopxtablenext strictdoifelsenextoptional strictdoifnextoptionalelse \
+stripcharacter strippedcsname strippedcsname stripspaces structurelistuservariable \
+structurenumber structuretitle structureuservariable structurevariable strut \
+strutdp strutht struthtdp struttedbox strutwd \
+style style styleinstance sub subject \
+subpaginanummer subsection subsentence substituteincommalist subsubject \
+subsubsection subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection \
+subsubsubsubsubject subtractfeature subtractfeature suggestie suggestie \
+swapcounts swapdimens swapface swapmacros swaptypeface \
+switchnaarkorps switchstyleonly switchstyleonly switchtocolor switchtointerlinespace \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+sym symbolreference symbool symbool synchronizeblank \
+synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace \
+systemlog systemlogfirst systemloglast systemsetups tLeftarrow \
+tLeftrightarrow tRightarrow taal tabulateautoline tabulateautorule \
+tabulateline tabulaterule taggedctxcommand taggedlabeltexts taglabellanguage \
+taglabeltext tbinom tbox tekstlijn tekstreferentie \
+tequal testandsplitstring testfeature testfeatureonce testkolom \
+testpageonly testpagesync testpagina testtokens tex \
+texdefinition texsetup textcitation textcitation textcitation \
+textcite textcite textcite textcontrolspace textflowcollector \
+textmath textminus textormathchar textplus textvisiblespace \
+tfrac thai thainumerals thefirstcharacter thenormalizedbodyfontsize \
+theremainingcharacters thickspace thinspace thinspace thirdoffivearguments \
+thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded thookleftarrow \
+thookrightarrow threedigitrounding tibetannumerals tightlayer tilde \
+tinyfont title tlap tleftarrow tleftharpoondown \
+tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto tochar \
+toelichting tolinenote toongrid tooninstellingen toonkader \
toonkleur toonkleurgroep toonkorps toonkorpsomgeving toonlayout \
toonopmaak toonpalet toonprint toonstruts toonsymboolset \
-toonvelden totaalaantalpaginas translate txt typ \
-type typebuffer typefile uit uitgerekt \
-underbar underbars useURL useblocks usecodering \
-usecommands usedirectory useencoding useexternaldocument useexternalfigure \
-useexternalfile useexternalfiles useexternalsoundtrack usemodule usereferences \
-usespecials usesymbols usetypescript usetypescriptfile vastespatie \
-vastespaties veld veldstapel verbergblokken vergelijkkleurgroep \
-vergelijkpalet verhoognummer verlaagnummer verplaatsformule verplaatsopgrid \
-verplaatszijblok versie version vertaal verwerkblokken \
-verwerkpagina vl voetafstand voethoogte voetnoot \
-voetnoottekst volgprofiel volgprofielversie volgversie volledigepaginanummer \
-volledigregister voluit weekdag weekday whitespace \
-wilijnd wiskunde witruimte woonplaats woordrechts \
-wordright writebetweenlist writetolist writetoreferencelist writetoregister \
-zetbreedte zethoogte
+topbox topleftbox toplinebox toprightbox topskippedbox \
+tracecatcodetables tracedfontname traceoutputroutines tracepositions transparencycomponents \
+trel trightarrow trightharpoondown trightharpoonup trightleftharpoons \
+trightoverleftarrow triplebond truefilename truefontname ttraggedright \
+ttriplerel ttwoheadleftarrow ttwoheadrightarrow twodigitrounding tx \
+txt txt txx typ typ \
+type type typebuffer typedefinedbuffer typeface \
+typefile typescriptone typescriptprefix typescriptthree typescripttwo \
+typesetbuffer typesetfile uconvertnumber uedcatcodecommand uit \
+uitgerekt undefinevalue undepthed underbar underbar \
+underbars underbartext underbrace underbracetext underbracket \
+underbrackettext underdash underdashes underdot underdots \
+underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow underparent \
+underparenttext underrandom underrandoms underrightarrow underrightharpoondown \
+underrightharpoonup underset understrike understrikes undertwoheadleftarrow \
+undertwoheadrightarrow undoassign unframed unhhbox unihex \
+uniqueMPgraphic uniqueMPpagegraphic unit unitlanguage unittext \
+unprotected unregisterhyphenationpattern unspaceafter unspaceargument unspaced \
+unspacestring untexargument untexcommand uppercased uppercasestring \
+upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote \
+upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote url useMPenvironmentbuffer \
+useMPgraphic useMPlibrary useMPrun useMPvariables usealignparameter \
+usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions usecolors \
+usecomponent usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment \
+useexternalrendering usefigurebase usefile usegridparameter useindentingparameter \
+useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter uselanguageparameter useluamodule \
+usemathstyleparameter useproduct useprofileparameter useproject usereferenceparameter \
+userpagenumber usesetupsparameter usestaticMPfigure usesubpath usetexmodule \
+usezipfile utfchar utflower utfupper utilityregisterlength \
+vastespatie vastespaties vboxreference vec veld \
+veldstapel verbatim verbatimstring verbergblokken verbosenumber \
+vergelijkkleurgroep vergelijkpalet versie vertaal verticalgrowingbar \
+verticalpositionbar verwerkblokken veryraggedcenter veryraggedleft veryraggedright \
+vglue viewerlayer vl voetnoot voetnoot \
+voetnoottekst voetnoottekst volledigepaginanummer volledigregister voluit \
+vphantom vpos vsmash vsmashbox vsmashed \
+vspace vspacing wdofstring weekdag widthofstring \
+widthspanningtext wilijnd wiskunde withoutpt woordrechts \
+word words wordtonumber writedatatolist writestatus \
+xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument xequal \
+xfrac xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown \
+xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto xmladdindex \
+xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup \
+xmlapplyselectors xmlatt xmlattdef xmlattribute xmlattributedef \
+xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef \
+xmlchecknamespace xmlcommand xmlconcat xmlconcatrange xmlcontext \
+xmlcount xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore \
+xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty \
+xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext \
+xmldoifselfempty xmldoiftext xmlelement xmlfilter xmlfirst \
+xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure \
+xmlflushspacewise xmlflushtext xmlinclude xmlinclusion xmlinclusions \
+xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective xmllast \
+xmllastatt xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives \
+xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \
+xmlnamespace xmlnonspace xmlpath xmlpos xmlposition \
+xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata \
+xmlprocessfile xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups \
+xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname xmlremapnamespace \
+xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups \
+xmlsave xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup \
+xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \
+xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \
+xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \
+xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \
+xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \
+xxfrac xypos
keywordclass.context.pe=\
-CAP Cap Caps Character \
-Characters MONTH Numbers Romannumerals WEEKDAY \
-WORD WORDS Word Words about \
-adaptlayout appendix at atpage background \
-blackrule blackrules blank bookmark but \
-button bypassblocks cap chapter character \
-characters chem clip clonefield color \
-column comment comparecolorgroup comparepalet completecombinedlist \
-completelistoffloats completelistofsorts completelistofsynonyms completeregister convertnumber \
-copyfield correctwhitespace coupledocument coupledregister couplemarking \
-couplepage couplepaper coupleregister crlf currentdate \
-currentheadnumber date decouplemarking define defineblank \
-defineblock definebodyfont definebodyfontDEF definebodyfontREF definebodyfontenvironment \
-definebuffer definecolor definecolorgroup definecombinedlist defineconversion \
-definedescription definedfont defineenumeration definefield definefieldstack \
-definefiguresymbol definefloat definefont definefontfeature definefonthandling \
-definefontsynonym defineframed defineframedtext definehead defineindentedtext \
-defineinteractionmenu definelabel definelist definelogo definemakeup \
-definemarking defineoutput defineoverlay definepalet definepapersize \
-defineparagraphs defineprofile defineprogram definereference definereferenceformat \
-definereferencelist defineregister definesection definesectionblock definesorting \
-definestartstop definesubfield definesymbol definesynonyms definetabletemplate \
-definetabulate definetext definetype definetypeface definetyping \
-defineversion description determineheadnumber determinelistcharacteristics disableinteractionmenu \
-emptylines enumeration externalfigure field fieldstack \
-fillinfield fillinline fillinrules fillintext fitfield \
-fixedspaces followprofile followprofileversion followversion footnote \
-footnotetext forceblocks fraction framed framedtext \
-from getbuffer getmarking godown goto \
-gotobox graycolor grid hairline head \
-headnumber headtext hideblocks high hl \
-in indentation indenting inframed ininner \
-inleft inline inmargin inmframed inothermargin \
-inouter inright installlanguage interactionbar interactionbuttons \
-item items its keepblocks labeling \
-labels labeltext language leftaligned listsymbol \
-loadsorts loadsynonyms logfields lohi low \
-mainlanguage mapfontsize mar marginrule margintext \
-marking markversion mathematics mediaeval mframed \
-midaligned mirror month moveongrid name \
-nextsection nocap noheaderandfooterlines noindenting nolist \
-nomarking nomoreblocks nomorefiles nop nospace \
-note notopandbottomlines nowhitespace numbers overbar \
-overbars overstrike overstrikes packed page \
-pagereference paragraph part periods placebookmarks \
-placecombinedlist placefloat placefootnotes placeformula placelegend \
-placelist placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes \
-placelogos placeongrid placeontopofeachother placereferencelist placeregister \
-placesidebyside placesubformula position processblocks processpage \
-program publication quotation quote ran \
-ref reference referral referraldate register \
-reservefloat reset resetmarking resettextcontent rightaligned \
-romannumerals rotate scale screen section \
-seeregister selectblocks selectpaper selectversion settextcontent \
-setupalign setupanswerarea setuparranging setupbackground setupbackgrounds \
-setupblackrules setupblank setupblock setupbodyfont setupbodyfontenvironment \
-setupbottom setupbottomtexts setupbuffer setupbuttons setupcapitals \
-setupcaption setupcaptions setupclipping setupcolor setupcolors \
-setupcolumns setupcombinations setupcombinedlist setupcomment setupdescriptions \
-setupenumerations setupexternalfigures setupfield setupfields setupfillinlines \
-setupfillinrules setupfloat setupfloats setupfloatsplitting setupfonthandling \
-setupfontsynonym setupfooter setupfootertexts setupfootnotedefinition setupfootnotes \
-setupforms setupformulas setupframed setupframedtexts setuphead \
-setupheader setupheadertexts setupheadnumber setupheads setupheadtext \
-setuphyphenmark setupindentedtext setupindenting setupinmargin setupinteraction \
-setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 \
-setupitemgroup setupitems setuplabeltext setuplanguage setuplayout \
-setuplegend setuplinenumbering setuplines setuplinewidth setuplist \
-setuplistalternative setupmakeup setupmarginblocks setupmarginrules setupmarking \
-setupnarrower setupnumbering setupoppositeplacing setupoutput setuppagenumber \
-setuppagenumbering setuppagetransitions setuppalet setuppaper setuppapersize \
-setupparagraphnumbering setupparagraphs setuppositioning setupprofiles setupprograms \
-setuppublications setupquote setupreferencelist setupreferencing setupregister \
-setuprotate setupscreens setupsection setupsectionblock setupsorting \
-setupspacing setupstrut setupsubpagenumber setupsymbolset setupsynchronization \
-setupsynchronizationbar setupsynonyms setupsystem setuptab setuptables \
-setuptabulate setuptext setuptextrules setuptexttexts setupthinrules \
-setuptolerance setuptop setuptoptexts setuptype setuptyping \
-setupunderbar setupurl setupversions setupwhitespace showbodyfont \
-showbodyfontenvironment showcolor showcolorgroup showexternalfigures showfields \
-showframe showgrid showlayout showmakeup showpalet \
-showprint showsetups showstruts showsymbolset someline \
-somewhere sort space splitfloat startalignment \
-startbackground startbuffer startcolor startcolumns startcombination \
-startcomment startcomponent startdescription startdocument startenumeration \
-startenvironment startfact startfigure startfloattext startformula \
-startframedtext starthiding startinteractionmenu startitemgroup startlegend \
-startline startlinecorrection startlinenumbering startlines startlocal \
-startlocalenvironment startlocalfootnotes startmakeup startmarginblock startmarginrule \
-startnamemakeup startnarrower startopposite startoverlay startoverview \
-startpacked startparagraph startpositioning startpostponing startproduct \
-startprofile startproject startquotation startraster startregister \
-startsymbolset startsynchronization starttable starttables starttabulate \
-starttextrule starttyping startunpacked startversion stopalignment \
-stopbackground stopbuffer stopcolor stopcolumns stopcombination \
-stopcomment stopcomponent stopdescription stopdocument stopenumeration \
-stopenvironment stopfact stopfigure stopfloattext stopformula \
-stopframedtext stophiding stopinteractionmenu stopitemgroup stoplegend \
-stopline stoplinecorrection stoplinenumbering stoplines stoplocal \
-stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmarginrule \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview \
-stoppacked stopparagraph stoppositioning stoppostponing stopproduct \
-stopprofile stopproject stopquotation stopraster stopsymbolset \
-stopsynchronization stoptable stoptables stoptabulate stoptextrule \
-stoptyping stopunpacked stopversion stretched sub \
-subject subsection subsubject subsubsection subsubsubject \
-switchtobodyfont sym symbol synchronizationbar synchronize \
-synonym tab tex textreference textrule \
-thinrule thinrules title tooltip translate \
-txt typ type typebuffer typefile \
-underbar underbars useJSscripts useURL useXMLfilter \
-useblocks usecommands usedirectory useencoding useexternaldocument \
-useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule \
-usereferences usespecials usesymbols usetypescript usetypescriptfile \
-useurl version vl weekday whitespace \
-wordright writebetweenlist writetolist writetoreferencelist writetoregister \
-آفست‌صفحه آیتم آیتمها آینه اجباربلوکها \
-ارتفاع‌آرایش ارتفاع‌بالا ارتفاع‌برگ ارتفاع‌ته‌برگ ارتفاع‌خط \
-ارتفاع‌سربرگ ارتفاع‌متن ارتفاع‌پایین از ازکارانداختن‌منوی‌پانل \
-استفاده‌بلوکها استفاده‌دستخط‌تایپ استفاده‌رمزینه استفاده‌شکل‌خارجی استفاده‌فرمانها \
-استفاده‌قطعه‌موزیک‌خارجی استفاده‌مدول استفاده‌مدولها استفاده‌مرجعها استفاده‌مسیر \
-استفاده‌نمادها استفاده‌نوشتارخارجی استفاده‌ویژگیها استفاده‌پرونده‌خارجی استفاده‌پرونده‌دستخط‌تایپ \
-استفاده‌پرونده‌های‌خارجی اعدادلاتین افزودن اما امتحان‌نکن \
-انتخاب‌برگ انتخاب‌بلوکها انتخاب‌نسخه انتقال‌به‌توری انتقال‌فرمول \
-انتقال‌کنار‌شناور انجام‌دوباره بارگذاری‌آرایش بارگذاری‌آیتمها بارگذاری‌ارجاع \
-بارگذاری‌اندازه‌برگ بارگذاری‌باریکتر بارگذاری‌بافر بارگذاری‌بالا بارگذاری‌بخش \
-بارگذاری‌بردباری بارگذاری‌برنامه‌ها بارگذاری‌برگ بارگذاری‌بست بارگذاری‌بلوک \
-بارگذاری‌بلوکهای‌حاشیه بارگذاری‌بلوک‌بخش بارگذاری‌تایپ بارگذاری‌تایپ‌کردن بارگذاری‌تب \
-بارگذاری‌ترتیب بارگذاری‌ترکیب‌ها بارگذاری‌تطابق بارگذاری‌تعریف‌پانوشت بارگذاری‌تنظیم \
-بارگذاری‌تنظیم‌ریاضی بارگذاری‌ته‌برگ بارگذاری‌تورفتگی بارگذاری‌توضیح بارگذاری‌توضیح‌صفحه \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT Cap Caps Character Characters \
+ConTeXt Context ConvertConstantAfter ConvertToConstant ETEX \
+EveryLine EveryPar GetPar GotoPar Greeknumerals \
+INRSTEX LAMSTEX LATEX LUAJITTEX LUATEX \
+LaTeX LamSTeX LuaTeX LuajitTeX METAFONT \
+METAFUN METAPOST MKII MKIV MKIX \
+MKVI MKXI MONTH MONTHLONG MONTHSHORT \
+MPII MPIV MPVI MPanchor MPbetex \
+MPc MPcode MPcolor MPcoloronly MPcolumn \
+MPd MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape \
+MPgetposboxes MPh MPinclusions MPleftskip MPll \
+MPlr MPls MPmenubuttons MPn MPoptions \
+MPoverlayanchor MPp MPpage MPpardata MPplus \
+MPpos MPpositiongraphic MPposset MPr MPrawvar \
+MPregion MPrest MPrightskip MPrs MPstring \
+MPtext MPtransparency MPul MPur MPv \
+MPvar MPvariable MPvv MPw MPx \
+MPxy MPxywhd MPy MetaFont MetaFun \
+MetaPost NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight NormalizeTextWidth \
+Numbers PDFETEX PDFTEX PDFcolor PICTEX \
+PPCHTEX PPCHTeX PRAGMA PiCTeX PointsToBigPoints \
+PointsToReal PointsToWholeBigPoints PtToCm ReadFile Romannumerals \
+ScaledPointsToBigPoints ScaledPointsToWholeBigPoints Smallcapped TABLE TEX \
+TaBlE TeX TheNormalizedFontSize TransparencyHack VerboseNumber \
+WEEKDAY WORD WORDS WidthSpanningText Word \
+Words XETEX XeTeX abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals activatespacehandler acute adaptcollector \
+adaptpapersize addfeature addfeature addtoJSpreamble addtocommalist \
+addvalue aftersplitstring aftertestandsplitstring alignbottom aligned \
+alignedbox alignedline alignmentcharacter allinputpaths alphabeticnumerals \
+alwayscitation alwayscitation alwayscitation alwayscite alwayscite \
+alwayscite ampersand anchor appendetoks appendgvalue \
+appendtocommalist appendtoks appendtoksonce appendvalue apply \
+applyalternativestyle applyprocessor applytocharacters applytofirstcharacter applytosplitstringchar \
+applytosplitstringcharspaced applytosplitstringline applytosplitstringlinespaced applytosplitstringword applytosplitstringwordspaced \
+applytowords arabicdecimals arabicexnumerals arabicnumerals asciistr \
+assignalfadimension assigndimen assigndimension assignifempty assigntranslation \
+assignvalue assignwidth assumelongusagecs astype attachment \
+autocap autodirhbox autodirvbox autodirvtop autoinsertnextspace \
+automathematics autosetups availablehsize averagecharwidth backgroundimage \
+backgroundimagefill backgroundline bar basegrid baselinebottom \
+baselineleftbox baselinemiddlebox baselinerightbox bbox beforesplitstring \
+beforetestandsplitstring big bigbodyfont bigg bigger \
+biggl biggm biggr bigl bigm \
+bigr bigskip binom bitmapimage blap \
+bleed bleedheight bleedwidth blockquote bodyfontenvironmentlist \
+bodyfontsize bold boldface bolditalic boldslanted \
+booleanmodevalue bottombox bottomleftbox bottomrightbox boxcursor \
+boxmarker boxofsize boxreference bpos breve \
+bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation btxalwayscitation \
+btxalwayscitation btxauthorfield btxdetail btxdirect btxdoif \
+btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious btxdoifelsesameaspreviouschecked \
+btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse btxdoifuservariableelse \
+btxexpandedjournal btxfield btxfieldname btxfieldtype btxfirstofrange \
+btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort btxflushauthorname \
+btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname btxfoundtype \
+btxhybridcite btxhybridcite btxhybridcite btxhybridcite btxlabellanguage \
+btxlabeltext btxlistcitation btxlistcitation btxlistcitation btxloadjournalist \
+btxoneorrange btxremapauthor btxsavejournalist btxsetup btxsingularorplural \
+btxsingularplural btxtextcitation btxtextcitation btxtextcitation buildmathaccent \
+buildtextaccent buildtextbottomcomma buildtextbottomdot buildtextcedilla buildtextgrave \
+buildtextmacron buildtextognek calligraphic camel cap \
+catcodetablename cbox centeraligned centerbox centeredbox \
+centeredlastline centerednextbox centerline cfrac chapter \
+chardescription charwidthlanguage check checkcharacteralign checkedchar \
+checkedfiller checkedstrippedcsname checkedstrippedcsname checkinjector checknextindentation \
+checknextinjector checkpage checkparameters checkpreviousinjector checksoundtrack \
+checktwopassdata chem chemical chemicalbottext chemicalmidtext \
+chemicalsymbol chemicaltext chemicaltoptext chineseallnumerals chinesecapnumerals \
+chinesenumerals citation citation citation citation \
+cite cite cite cite clap \
+classfont cldcommand cldcontext cldloadfile cldprocessfile \
+cleftarrow collect collectedtext collectexpanded colorcomponents \
+colored colored columnbreak com combinepages \
+commalistelement commalistsentence commalistsize comment comparedimension \
+comparedimensioneps completebtxrendering completecontent completeindex completelist \
+completelistofabbreviations completelistofchemicals completelistoffigures completelistofgraphics completelistofintermezzi \
+completelistoflogos completelistofpublications completelistofsorts completelistofsynonyms completelistoftables \
+complexorsimple complexorsimple complexorsimpleempty complexorsimpleempty composedcollector \
+composedlayer compresult constantdimen constantdimenargument constantemptyargument \
+constantnumber constantnumberargument contentreference continuednumber continueifinputfile \
+convertargument convertcommand convertedcounter converteddimen convertedsubcounter \
+convertmonth convertvalue convertvboxtohbox copybtxlabeltext copyheadtext \
+copylabeltext copymathlabeltext copyoperatortext copypages copyparameters \
+copyposition copyprefixtext copytaglabeltext copyunittext countersubs \
+counttoken counttokens cramped crampedclap crampedllap \
+crampedrlap crightarrow crightoverleftarrow ctop ctxcommand \
+ctxdirectcommand ctxdirectlua ctxfunction ctxlatecommand ctxlatelua \
+ctxloadluafile ctxlua ctxluabuffer ctxluacode ctxreport \
+ctxsprint currentassignmentlistkey currentassignmentlistvalue currentbtxuservariable currentcommalistitem \
+currentcomponent currentenvironment currentfeaturetest currentinterface currentlanguage \
+currentlistentrydestinationattribute currentlistentrylimitedtext currentlistentrynumber currentlistentrypagenumber currentlistentryreferenceattribute \
+currentlistentrytitle currentlistentrytitlerendered currentlistsymbol currentmainlanguage currentmessagetext \
+currentmoduleparameter currentoutputstream currentproduct currentproject currentregime \
+currentregisterpageuserdata currentresponses currenttime currentvalue currentxtablecolumn \
+currentxtablerow d datasetvariable dayoftheweek dayspermonth \
+dbinom ddot decrement decrement decrementcounter \
+decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue defaultinterface \
+defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument defconvertedcommand \
+defconvertedvalue defineMPinstance defineTABLEsetup defineactivecharacter definealternativestyle \
+defineanchor defineattachment defineattribute definebackground definebar \
+definebodyfontswitch definebreakpoint definebreakpoints definebtx definebtxdataset \
+definebtxregister definebtxrendering definebutton definecapitals definecharacterkerning \
+definecharacterspacing definechemical definechemicals definechemicalsymbol definecollector \
+definecomment definecomplexorsimple definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty \
+defineconversionset definecounter definedataset definedelimitedtext definedfont \
+defineeffect defineenumerations defineexpandable defineexternalfigure definefallbackfamily \
+definefallbackfamily definefieldbody definefieldbodyset definefieldcategory definefileconstant \
+definefilefallback definefilesynonym definefiller definefirstline definefittingpage \
+definefontalternative definefontfallback definefontfamily definefontfamily definefontfamilypreset \
+definefontfamilypreset definefontfeature definefontfile definefontsize definefontsolution \
+defineformula defineformulaalternative defineframedcontent definefrozenfont defineglobalcolor \
+defineglobalcolor definegraphictypesynonym definegridsnapping defineheadalternative definehelp \
+definehigh definehighlight definehspace definehypenationfeatures defineindentedtext \
+defineindenting defineinitial defineinsertion defineinteraction defineinteractionbar \
+defineinterfaceconstant defineinterfaceelement defineinterfacevariable defineinterlinespace defineinterlinespace \
+defineintermediatecolor defineitems definelabelclass definelayerpreset definelayerpreset \
+definelinenote definelinenumbering definelines definelistalternative definelistextra \
+definelow definelowhigh definelowmidhigh definemarginblock definemargindata \
+definemarker definemathaccent definemathcases definemathcommand definemathdoubleextensible \
+definemathematics definemathextensible definemathfence definemathfraction definemathframed \
+definemathmatrix definemathornament definemathoverextensible definemathovertextextensible definemathradical \
+definemathstackers definemathstyle definemathtriplet definemathunderextensible definemathundertextextensible \
+definemathunstacked definemeasure definemessageconstant definemixedcolumns definemode \
+definemultitonecolor definenamedcolor definenamedcolor definenamespace definenarrower \
+definenote defineornament defineornament defineoutputroutine defineoutputroutinecommand \
+definepage definepagechecker definepagegrid definepagegridarea definepagegridspan \
+definepageinjection definepageinjectionalternative definepageshift definepagestate definepairedbox \
+defineparagraph defineparallel defineparbuilder definepositioning defineprefixset \
+defineprocesscolor defineprocessor definepushbutton definepushsymbol definerenderingwindow \
+defineresetset definescale definescript definesectionlevels defineselector \
+defineseparatorset defineshift definesidebar definesort definespotcolor \
+definestyleinstance definesubformula definesynonym definesystemattribute definesystemconstant \
+definesystemvariable definetabulation definetextbackground definetextflow definetooltip \
+definetransparency definetwopasslist definetypeface definetypescriptprefix definetypescriptsynonym \
+definetypesetting defineunit defineviewerlayer definevspace definevspacing \
+definevspacingamount definextable delimited delimitedtext depthofstring \
+depthonlybox depthspanningtext determinenoflines devanagarinumerals dfrac \
+digits digits dimensiontocount directcolor directcolored \
+directcolored directconvertedcounter directdummyparameter directgetboxllx directgetboxlly \
+directhighlight directlocalframed directluacode directselect directsetbar \
+directsetup directsymbol directvspacing dis disabledirectives \
+disableexperiments disablemode disableoutputstream disableparpositions disableregime \
+disabletrackers displaymath displaymathematics displaymessage distributedhsize \
+dividedsize doadaptleftskip doadaptrightskip doaddfeature doassign \
+doassignempty doboundtext docheckassignment docheckedpagestate docheckedpair \
+documentvariable dodoubleargument dodoubleargumentwithset dodoubleempty dodoubleemptywithset \
+dodoublegroupempty doeassign doexpandedrecurse dogetattribute dogetattributeid \
+dogetcommacommandelement dogobbledoubleempty dogobblesingleempty doif doifMPgraphicelse \
+doifallcommon doifallcommonelse doifalldefinedelse doifallmodes doifallmodeselse \
+doifassignmentelse doifblackelse doifbothsides doifbothsidesoverruled doifboxelse \
+doifbufferelse doifcolor doifcolorelse doifcommandhandler doifcommandhandlerelse \
+doifcommon doifcommonelse doifcontent doifconversiondefinedelse doifconversionnumberelse \
+doifcounter doifcounterelse doifcurrentfonthasfeatureelse doifdefined doifdefinedcounter \
+doifdefinedcounterelse doifdefinedelse doifdimensionelse doifdimenstringelse doifdocumentargument \
+doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse doifdrawingblackelse doifelse \
+doifelseMPgraphic doifelseallcommon doifelsealldefined doifelseallmodes doifelseassignment \
+doifelseblack doifelsebox doifelsebuffer doifelsecolor doifelsecommandhandler \
+doifelsecommon doifelseconversiondefined doifelseconversionnumber doifelsecounter doifelsecurrentfonthasfeature \
+doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused doifelsedefined doifelsedefinedcounter \
+doifelsedimension doifelsedimenstring doifelsedocumentargument doifelsedocumentfilename doifelsedrawingblack \
+doifelseempty doifelseemptyvalue doifelseemptyvariable doifelseenv doifelsefastoptionalcheck \
+doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory doifelsefigure doifelsefile \
+doifelsefiledefined doifelsefileexists doifelsefirstchar doifelseflagged doifelsefontchar \
+doifelsefontpresent doifelsefontsynonym doifelsehasspace doifelsehelp doifelseincsname \
+doifelseinelement doifelseinputfile doifelseinsertion doifelseinset doifelseinstring \
+doifelseinsymbolset doifelseintoks doifelseintwopassdata doifelseitalic doifelselanguage \
+doifelselayerdata doifelselayoutdefined doifelselayoutsomeline doifelselayouttextline doifelseleapyear \
+doifelselist doifelselocation doifelselocfile doifelsemainfloatbody doifelsemarking \
+doifelsemeaning doifelsemessage doifelsemode doifelsenextbgroup doifelsenextbgroupcs \
+doifelsenextchar doifelsenextoptional doifelsenextoptionalcs doifelsenextparenthesis doifelsenonzeropositive \
+doifelsenoteonsamepage doifelsenothing doifelsenumber doifelseobjectfound doifelseobjectreferencefound \
+doifelseoddpage doifelseoddpagefloat doifelseoldercontext doifelseolderversion doifelseoverlapping \
+doifelseoverlay doifelseparallel doifelseparentfile doifelsepath doifelsepathexists \
+doifelsepatterns doifelseposition doifelsepositionaction doifelsepositiononpage doifelsepositionsonsamepage \
+doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound doifelserightpagefloat doifelserighttoleftinbox \
+doifelsesamelinereference doifelsesamestring doifelsesetups doifelsesomebackground doifelsesomespace \
+doifelsesomething doifelsesometoks doifelsestringinstring doifelsestructurelisthasnumber doifelsestructurelisthaspage \
+doifelsesymboldefined doifelsesymbolset doifelsetext doifelsetextflow doifelsetextflowcollector \
+doifelsetypingfile doifelseundefined doifelseurldefined doifelsevalue doifelsevaluenothing \
+doifelsevariable doifempty doifemptyelse doifemptytoks doifemptyvalue \
+doifemptyvalueelse doifemptyvariable doifemptyvariableelse doifenv doifenvelse \
+doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse doiffieldcategoryelse doiffigureelse \
+doiffile doiffiledefinedelse doiffileelse doiffileexistselse doiffirstcharelse \
+doifflaggedelse doiffontcharelse doiffontpresentelse doiffontsynonymelse doifhasspaceelse \
+doifhelpelse doifincsnameelse doifinelementelse doifinputfileelse doifinsertionelse \
+doifinset doifinsetelse doifinstring doifinstringelse doifinsymbolset \
+doifinsymbolsetelse doifintokselse doifintwopassdataelse doifitalicelse doiflanguageelse \
+doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse doiflayouttextlineelse doifleapyearelse \
+doiflistelse doiflocationelse doiflocfileelse doifmainfloatbodyelse doifmarkingelse \
+doifmeaningelse doifmessageelse doifmode doifmodeelse doifnextbgroupcselse \
+doifnextbgroupelse doifnextcharelse doifnextoptionalcselse doifnextoptionalelse doifnextparenthesiselse \
+doifnonzeropositiveelse doifnot doifnotallcommon doifnotallmodes doifnotcommandhandler \
+doifnotcommon doifnotcounter doifnotdocumentargument doifnotdocumentfilename doifnotempty \
+doifnotemptyvalue doifnotemptyvariable doifnotenv doifnoteonsamepageelse doifnotescollected \
+doifnotfile doifnotflagged doifnothing doifnothingelse doifnotinset \
+doifnotinsidesplitfloat doifnotinstring doifnotmode doifnotnumber doifnotsamestring \
+doifnotsetups doifnotvalue doifnotvariable doifnumber doifnumberelse \
+doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse doifoddpagefloatelse doifoldercontextelse \
+doifolderversionelse doifoverlappingelse doifoverlayelse doifparallelelse doifparentfileelse \
+doifpathelse doifpathexistselse doifpatternselse doifposition doifpositionaction \
+doifpositionactionelse doifpositionelse doifpositiononpageelse doifpositionsonsamepageelse doifpositionsonthispageelse \
+doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse doifrighttoleftinboxelse doifsamelinereferenceelse \
+doifsamestring doifsamestringelse doifsetups doifsetupselse doifsomebackground \
+doifsomebackgroundelse doifsomespaceelse doifsomething doifsomethingelse doifsometoks \
+doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse doifstructurelisthaspageelse doifsymboldefinedelse \
+doifsymbolsetelse doiftext doiftextelse doiftextflowcollectorelse doiftextflowelse \
+doiftypingfileelse doifundefined doifundefinedcounter doifundefinedelse doifurldefinedelse \
+doifvalue doifvalueelse doifvaluenothing doifvaluenothingelse doifvaluesomething \
+doifvariable doifvariableelse doindentation dollar doloop \
+doloopoverlist donothing dontconvertfont dontleavehmode dontpermitspacesbetweengroups \
+dopositionaction doprocesslocalsetups doquadrupleargument doquadrupleempty doquadruplegroupempty \
+doquintupleargument doquintupleempty doquintuplegroupempty dorechecknextindentation dorecurse \
+dorecurse dorepeatwithcommand doreplacefeature doresetandafffeature doresetattribute \
+dorotatebox dosetattribute dosetleftskipadaption dosetrightskipadaption dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+doseventupleargument doseventupleempty dosingleargument dosingleempty dosinglegroupempty \
+dosixtupleargument dosixtupleempty dostepwiserecurse dosubtractfeature dot \
+dotfskip dotoks dotripleargument dotripleargumentwithset dotripleempty \
+dotripleemptywithset dotriplegroupempty doublebar doublebond doublebrace \
+doublebracket doubleparent dowith dowithnextbox dowithnextboxcontent \
+dowithnextboxcontentcs dowithnextboxcs dowithpargument dowithrange dowithwargument \
+dpofstring dummydigit dummyparameter eTeX edefconvertedargument \
+efcmaxheight efcmaxwidth efcminheight efcminwidth efcparameter \
+effect elapsedseconds elapsedtime eleftarrowfill eleftharpoondownfill \
+eleftharpoonupfill eleftrightarrowfill emphasisboldface emphasistypeface emspace \
+enabledirectives enableexperiments enablemode enableoutputstream enableparpositions \
+enableregime enabletrackers endnote endnote enskip \
+enspace env envvar eoverbarfill eoverbracefill \
+eoverbracketfill eoverparentfill epos equaldigits erightarrowfill \
+erightharpoondownfill erightharpoonupfill ethiopic etwoheadrightarrowfill eunderbarfill \
+eunderbracefill eunderbracketfill eunderparentfill executeifdefined exitloop \
+exitloopnow expandcheckedcsname expanded expandfontsynonym externalfigurecollectionmaxheight \
+externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth externalfigurecollectionparameter fakebox \
+fastdecrement fastincrement fastlocalframed fastscale fastsetup \
+fastsetupwithargument fastsetupwithargumentswapped fastswitchtobodyfont fastsxsy feature \
+feature fence fenced fetchallmarkings fetchallmarks \
+fetchmark fetchmarking fetchonemark fetchonemarking fetchruntinecommand \
+fetchtwomarkings fetchtwomarks fieldbody fifthoffivearguments fifthofsixarguments \
+figurefilename figurefilepath figurefiletype figurefullname figureheight \
+figurenaturalheight figurenaturalwidth figuresymbol figurewidth filename \
+filledhboxb filledhboxc filledhboxg filledhboxk filledhboxm \
+filledhboxr filledhboxy filler filterfromnext filterfromvalue \
+filterpages filterreference findtwopassdata finishregisterentry firstcharacter \
+firstcounter firstcountervalue firstoffivearguments firstoffourarguments firstofoneargument \
+firstofoneunexpanded firstofsixarguments firstofthreearguments firstofthreeunexpanded firstoftwoarguments \
+firstoftwounexpanded firstrealpage firstrealpagenumber firstsubcountervalue firstsubpage \
+firstsubpagenumber firstuserpage firstuserpagenumber fitfieldframed fittopbaselinegrid \
+flag floatuserdataparameter flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle forcecharacterstripping forcelocalfloats forgeteverypar \
+forgetparameters forgetragged formula foundbox fourthoffivearguments \
+fourthoffourarguments fourthofsixarguments frac frameddimension framedparameter \
+framedtext freezedimenmacro freezemeasure frenchspacing fromlinenote \
+frozenhbox gdefconvertedargument gdefconvertedcommand getMPdrawing getMPlayer \
+getboxllx getboxlly getbufferdata getcommacommandsize getcommalistsize \
+getdayoftheweek getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault \
+getdocumentfilename getdummyparameters getemptyparameters geteparameters getexpandedparameters \
+getfiguredimensions getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist \
+getfromtwopassdata getglyphdirect getglyphstyled getgparameters getlasttwopassdata \
+getlocalfloat getlocalfloats getmessage getnamedglyphdirect getnamedglyphstyled \
+getnamedtwopassdatalist getnaturaldimensions getnoflines getobject getobjectdimensions \
+getpaletsize getparameters getrandomcount getrandomdimen getrandomfloat \
+getrandomnumber getrandomseed getraweparameters getrawgparameters getrawnoflines \
+getrawparameters getrawxparameters getreference getreferenceentry getroundednoflines \
+getsubstring gettwopassdata gettwopassdatalist getuvalue getvalue \
+getvariable getvariabledefault getxparameters globaldisablemode globalenablemode \
+globalletempty globalpopbox globalpopmacro globalpreventmode globalprocesscommalist \
+globalpushbox globalpushmacro globalswapcounts globalswapdimens globalswapmacros \
+globalundefine glyphfontfile gobbledoubleempty gobbleeightarguments gobblefivearguments \
+gobblefiveoptionals gobblefourarguments gobblefouroptionals gobbleninearguments gobbleoneargument \
+gobbleoneoptional gobblesevenarguments gobblesingleempty gobblesixarguments gobblespacetokens \
+gobbletenarguments gobblethreearguments gobblethreeoptionals gobbletwoarguments gobbletwooptionals \
+gobbleuntil gobbleuntilrelax got grabbufferdata grabbufferdatadirect \
+grabuntil grave grayvalue greedysplitstring greeknumerals \
+groupedcommand gsetboxllx gsetboxlly gujaratinumerals gurmurkhinumerals \
+hairspace halfwaybox handletokens handwritten hangul \
+hanzi hash hat hboxofvbox hboxreference \
+hdofstring headhbox headlanguage headnumbercontent headnumberdistance \
+headnumberwidth headreferenceattributes headtextcontent headtexts headtextwidth \
+headvbox headwidth heightanddepthofstring heightofstring heightspanningtext \
+helptext hglue hiddencitation hiddencite highlight \
+highordinalstr hilo himilo horizontalgrowingbar horizontalpositionbar \
+hphantom hpos hsizefraction hsmash hsmashbox \
+hsmashed hspace htdpofstring htofstring hyphen \
+hyphenatedcoloredword hyphenatedfile hyphenatedfilename hyphenatedhbox hyphenatedpar \
+hyphenatedurl hyphenatedword ibox ifassignment iff \
+ifinobject ifinoutputstream ifparameters iftrialtypesetting ignoreimplicitspaces \
+ignorevalue immediatesavetwopassdata impliedby implies includemenu \
+includeversioninfo increment increment increment increment \
+incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber incrementvalue \
+indentation index index infofont infofontbold \
+inheritparameter inhibitblank ininneredge ininnermargin initializeboxstack \
+inlinebuffer inlinedbox inlinemath inlinemathematics inlinemessage \
+inlineordisplaymath inlinerange inmframed innerflushshapebox inother \
+inouteredge inoutermargin input input inputfilebarename \
+inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile insertpages \
+installactionhandler installactivecharacter installanddefineactivecharacter installattributestack installautocommandhandler \
+installautosetuphandler installbasicautosetuphandler installbasicparameterhandler installbottomframerenderer installcommandhandler \
+installcorenamespace installdefinehandler installdefinitionset installdefinitionsetmember installdirectcommandhandler \
+installdirectparameterhandler installdirectparametersethandler installdirectsetuphandler installdirectstyleandcolorhandler installframedautocommandhandler \
+installframedcommandhandler installleftframerenderer installnamespace installoutputroutine installpagearrangement \
+installparameterhandler installparameterhashhandler installparametersethandler installparentinjector installrightframerenderer \
+installrootparameterhandler installsetuphandler installsetuponlycommandhandler installshipoutmethod installsimplecommandhandler \
+installsimpleframedcommandhandler installstyleandcolorhandler installswitchcommandhandler installswitchsetuphandler installtexdirective \
+installtextracker installtopframerenderer installunitsseparator installunitsspace installversioninfo \
+integerrounding intertext invokepageheandler istltdir istrtdir \
+italic italicbold italiccorrection itemtag itm \
+its jobfilename jobfilesuffix kap keeplinestogether \
+keepunwantedspaces kerncharacters koreancirclenumerals koreannumerals koreannumeralsc \
+koreannumeralsp koreanparentnumerals labellanguage labeltexts languageCharacters \
+languagecharacters languagecharwidth lastcounter lastcountervalue lastdigit \
+lastnaturalboxdp lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol lastrealpage \
+lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits \
+lastuserpage lastuserpagenumber lateluacode latin layeredtext \
+layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox \
+left leftbottombox leftbox lefthbox leftheadtext \
+leftlabeltext leftline leftmathlabeltext leftorrighthbox leftorrightvbox \
+leftorrightvtop leftskipadaption leftsubguillemot lefttopbox lefttoright \
+lefttorighthbox lefttorightvbox lefttorightvtop letbeundefined letcatcodecommand \
+letcscsname letcsnamecs letcsnamecsname letdummyparameter letempty \
+letgvalue letgvalueempty letgvalurelax letterampersand letterat \
+letterbackslash letterbar letterbgroup letterclosebrace lettercolon \
+letterdollar letterdoublequote letteregroup letterescape letterexclamationmark \
+letterhash letterhat letterleftbrace letterless lettermore \
+letteropenbrace letterpercent letterquestionmark letterrightbrace lettersinglequote \
+letterslash letterspacing lettertilde letterunderscore letvalue \
+letvalueempty letvaluerelax lfence lhbox limitatelines \
+limitatetext limitatetext limtatefirstline line linenote \
+linespanningtext listcitation listcitation listcitation listcite \
+listcite listcite listnamespaces llap loadanyfile \
+loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile loadcldfileonce \
+loadfontgoodies loadluafile loadluafileonce loadspellchecklist loadtexfile \
+loadtexfileonce loadtypescriptfile localframed localframedwithsettings localhsize \
+localpopbox localpopmacro localpushbox localpushmacro localundefine \
+locatedfilepath locatefilepath locfilename logo lomihi \
+lowerbox lowercased lowercasestring lowerleftdoubleninequote lowerleftsingleninequote \
+lowerrightdoubleninequote lowerrightsingleninequote lrtbbox ltop luaTeX \
+luacode luaconditional luaenvironment luaexpanded luafunction \
+luajitTeX luamajorversion luaminorversion luaparameterset luasetup \
+luaversion m mLeftarrow mLeftrightarrow mRightarrow \
+makecharacteractive makerawcommalist makestrutofbox mapfontsize margindata \
+markcontent markinjector mat math mathbf \
+mathbi mathblackboard mathbs mathcommand mathdefault \
+mathfraktur mathfunction mathit mathlabellanguage mathlabeltext \
+mathlabeltexts mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf maxaligned \
+mbox mcframed measure measured medskip \
+medspace mequal message metaTeX mfence \
+mframed mfunction mfunctionlabeltext mhbox mhookleftarrow \
+mhookrightarrow middle middlealigned middlebox midhbox \
+minimalhbox mixedcaps mkvibuffer mleftarrow mleftharpoondown \
+mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto moduleparameter \
+molecule mono monobold monobold mononormal \
+monthlong monthshort mprandomnumber mrel mrightarrow \
+mrightharpoondown mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext \
+mtriplerel mtwoheadleftarrow mtwoheadrightarrow namedheadnumber namedstructureheadlocation \
+namedstructureuservariable namedstructurevariable namedtaggedlabeltexts naturalhbox naturalhpack \
+naturalvbox naturalvcenter naturalvpack naturalvtop naturalwd \
+negatecolorbox negated negthinspace newattribute newcatcodetable \
+newcounter newevery newfrenchspacing newmode newsignal \
+newsystemmode nextbox nextboxdp nextboxht nextboxhtdp \
+nextboxwd nextcounter nextcountervalue nextdepth nextparagraphs \
+nextrealpage nextrealpagenumber nextsubcountervalue nextsubpage nextsubpagenumber \
+nextuserpage nextuserpagenumber nihongo nocitation nocitation \
+nocite nocite nodetostring noffigurepages noflines \
+noflocalfloats noindentation nonfrenchspacing nonmathematics normal \
+normalboldface normalframedwithsettings normalizebodyfontsize normalizedfontsize normalizefontdepth \
+normalizefontheight normalizefontline normalizefontwidth normalizetextdepth normalizetextheight \
+normalizetextline normalizetextwidth normaltypeface notesymbol notragged \
+ntimes numberofpoints obeydepth objectdepth objectheight \
+objectmargin objectwidth obox offset offsetbox \
+onedigitrounding operatorlanguage operatortext ordinaldaynumber ordinalstr \
+ornamenttext ornamenttext ornamenttext outputfilename outputstreambox \
+outputstreamcopy outputstreamunvbox outputstreamunvcopy over overbar \
+overbar overbars overbartext overbarunderbar overbrace \
+overbracetext overbraceunderbrace overbracket overbrackettext overbracketunderbracket \
+overlaybutton overlaybutton overlaycolor overlaydepth overlayfigure \
+overlayheight overlaylinecolor overlaylinewidth overlayoffset overlayrollbutton \
+overlaywidth overleftarrow overleftharpoondown overleftharpoonup overleftrightarrow \
+overloaderror overparent overparenttext overparentunderparent overrightarrow \
+overrightharpoondown overrightharpoonup overset overstrike overstrikes \
+overtwoheadleftarrow overtwoheadrightarrow pagearea pagebreak pagefigure \
+pagegridspanwidth pageinjection pageinjection pagestaterealpage paletsize \
+part pdfTeX pdfactualtext pdfbackendactualtext pdfbackendcurrentresources \
+pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname \
+pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade \
+pdfcolor pdfeTeX percent percentdimen permitcaretescape \
+permitcircumflexescape permitspacesbetweengroups persiandecimals persiannumerals phantom \
+phantombox pickupgroupedcommand placeattachments placebtxrendering placechemical \
+placecitation placecomments placecontent placecurrentformulanumber placedbox \
+placefigure placefloatwithsetups placeframed placegraphic placehelp \
+placeindex placeinitial placeintermezzo placelayer placelayeredtext \
+placelistofabbreviations placelistofchemicals placelistoffigures placelistofgraphics placelistofintermezzi \
+placelistoflogos placelistofpublications placelistofsorts placelistofsynonyms placelistoftables \
+placelocalnotes placement placenamedfloat placenamedformula placenotes \
+placepairedbox placeparallel placerenderingwindow placetable popattribute \
+popmacro popmode popsystemmode positionoverlay positionregionoverlay \
+postponenotes predefinedfont predefinefont predefinesymbol prefixedpagenumber \
+prefixlanguage prefixtext prependetoks prependgvalue prependtocommalist \
+prependtoks prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols \
+presetheadtext presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext \
+presettaglabeltext presetunittext pretocommalist prevcounter prevcountervalue \
+preventmode prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage \
+prevsubpagenumber prevuserpage prevuserpagenumber procent processMPbuffer \
+processMPfigurefile processaction processallactionsinset processassignlist processassignmentcommand \
+processassignmentlist processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand \
+processcommalist processcommalistwithparameters processcontent processfile processfilemany \
+processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \
+processlinetablebuffer processlinetablefile processlist processmonth processranges \
+processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \
+processyear profiledbox profilegivenbox pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped psh purenumber pushattribute \
+pushbutton pushmacro pushmode pushoutputstream pushsystemmode \
+qquad quad quitcommalist quitprevcommalist quittypescriptscanning \
+raggedbottom raggedcenter raggedleft raggedright raggedwidecenter \
+raisebox ran randomizetext randomnumber raw \
+rawcounter rawcountervalue rawdate rawdoifelseinset rawdoifinset \
+rawdoifinsetelse rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist \
+rawstructurelistuservariable rawsubcountervalue rbox readfile readfixfile \
+readjobfile readlocfile readsetfile readsysfile readtexfile \
+readxmlfile realSmallCapped realSmallcapped realpagenumber realsmallcapped \
+recursedepth recurselevel recursestring redoconvertfont referenceprefix \
+registerattachment registerctxluafile registerexternalfigure registerfontclass registerhyphenationexception \
+registerhyphenationpattern registermenubuttons registersort registersynonym registerunit \
+regular relatemarking relateparameterhandlers relaxvalueifundefined remainingcharacters \
+removebottomthings removedepth removefromcommalist removelastskip removelastspace \
+removemarkedcontent removepunctuation removesubstring removetoks removeunwantedspaces \
+replacefeature replacefeature replaceincommalist replaceword rescan \
+rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \
+resetandaddfeature resetandaddfeature resetbreakpoints resetbuffer resetcharacteralign \
+resetcharacterkerning resetcharacterspacing resetcharacterstripping resetcollector resetcounter \
+resetdigitsmanipulation resetdirection resetfeature resetflag resetfontcolorsheme \
+resetfontfallback resetfontsolution resethyphenationfeatures resetinjector resetinteractionmenu \
+resetitaliccorrection resetlayer resetlocalfloats resetmarker resetmode \
+resetpagenumber resetparallel resetpath resetpenalties resetprofile \
+resetreference resetreplacement resetscript resetsetups resetshownsynonyms \
+resetsubpagenumber resetsymbolset resetsystemmode resettimer resettrackers \
+resettrialtypesetting resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue \
+resetvisualizers reshapebox restartcounter restorebox restorecatcodes \
+restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont reusableMPgraphic \
+reuseMPgraphic reuserandomseed revivefeature rfence rhbox \
+right rightbottombox rightbox righthbox rightheadtext \
+rightlabeltext rightline rightmathlabeltext rightorleftpageaction rightskipadaption \
+rightsubguillemot righttoleft righttolefthbox righttoleftvbox righttoleftvtop \
+righttopbox rlap rob robustaddtocommalist robustdoifelseinset \
+robustdoifinsetelse robustpretocommalist rollbutton rollbutton roman \
+rtop rul ruledhbox ruledhpack ruledmbox \
+ruledtopv ruledtpack ruledvbox ruledvpack ruledvtop \
+runMPbuffer safechar sans sansbold sansnormal \
+sansserif savebox savebtxdataset savebuffer savebuffer \
+savecounter savecurrentattributes savenormalmeaning savetaggedtwopassdata savetwopassdata \
+sbox secondoffivearguments secondoffourarguments secondofsixarguments secondofthreearguments \
+secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section seeindex \
+select serializecommalist serializedcommalist serif serifbold \
+serifnormal setJSpreamble setMPlayer setMPpositiongraphic setMPpositiongraphicrange \
+setMPtext setMPvariable setMPvariables setbar setbigbodyfont \
+setboxllx setboxlly setbreakpoints setcapstrut setcatcodetable \
+setcharacteralign setcharactercasing setcharactercleaning setcharacterkerning setcharacterspacing \
+setcharacterstripping setcharstrut setcollector setcolormodell setcounter \
+setcounterown setcurrentfontclass setdataset setdefaultpenalties setdigitsmanipulation \
+setdirection setdocumentargument setdocumentargumentdefault setdocumentfilename setdummyparameter \
+setelementexporttag setemeasure setevalue setevariable setevariables \
+setfirstline setflag setfont setfontcolorsheme setfontfeature \
+setfontsolution setfontstrut setgmeasure setgvalue setgvariable \
+setgvariables sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures \
+setinitial setinjector setinteraction setinterfacecommand setinterfaceconstant \
+setinterfaceelements setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection \
+setlayer setlayerframed setlayerframed setlayertext setlocalhsize \
+setmainbodyfont setmainparbuilder setmarker setmarking setmathstyle \
+setmeasure setmessagetext setmode setnostrut setnote \
+setnote setnotetext setnotetext setobject setoldstyle \
+setpagegrid setpagereference setpagestate setpagestaterealpageno setpenalties \
+setpercentdimen setposition setpositionbox setpositiondata setpositiondataplus \
+setpositiononly setpositionplus setpositionstrut setprofile setrandomseed \
+setreference setreferencedobject setregisterentry setreplacement setrigidcolumnbalance \
+setrigidcolumnhsize setscript setsectionblock setsimplecolumnhsize setsmallbodyfont \
+setsmallcaps setstackbox setstructurepageregister setstrut setsuperiors \
+setsystemmode settabular settaggedmetadata settightobject settightreferencedobject \
+settightunreferencedobject settrialtypesetting setuevalue setugvalue setunreferencedobject \
+setup setup setupMPgraphics setupMPinstance setupMPpage \
+setupMPvariables setupTABLE setupTEXpage setupattachment setupbackend \
+setupbar setupbleeding setupbookmark setupbtx setupbtx \
+setupbtxdataset setupbtxlabeltext setupbtxlist setupbtxregister setupbtxrendering \
+setupbutton setupcapitals setupcharacterkerning setupcharacterspacing setupchemical \
+setupchemicalframed setupcollector setupcolumnspan setupcombination setupcontent \
+setupcounter setupdataset setupdelimitedtext setupdescription setupdirections \
+setupdocument setupeffect setupenumeration setupenv setupexport \
+setupexternalfigure setupexternalsoundtracks setupfieldbody setupfieldcategory setupfieldcontentframed \
+setupfieldlabelframed setupfieldtotalframed setupfiller setupfirstline setupfittingpage \
+setupfloatcaption setupfontexpansion setupfontprotrusion setupfontsolution setupformula \
+setupframedcontent setupframedtext setupglobalreferenceprefix setupheadalternative setuphelp \
+setuphigh setuphighlight setuphyphenation setupindentedtext setupindex \
+setupinitial setupinsertion setupitaliccorrection setuplabel setuplayer \
+setuplayeredtext setuplayouttext setuplinenote setuplinetable setuplistalternative \
+setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow setuplowhigh \
+setuplowmidhigh setupmarginblock setupmargindata setupmarginframed setupmarginrule \
+setupmathcases setupmathematics setupmathfence setupmathfraction setupmathframed \
+setupmathlabeltext setupmathmatrix setupmathornament setupmathradical setupmathstackers \
+setupmathstyle setupmixedcolumns setupmodule setupnotation setupnote \
+setupoffset setupoffsetbox setupoperatortext setupoutputroutine setupoutputroutine \
+setuppagechecker setuppagegrid setuppagegridarea setuppagegridareatext setuppagegridlines \
+setuppagegridspan setuppagegridstart setuppageinjection setuppageinjectionalternative setuppageshift \
+setuppagestate setuppairedbox setupparagraph setupparagraphintro setupparallel \
+setupperiods setuppositionbar setupprefixtext setupprocessor setupprofile \
+setupquotation setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix \
+setuprenderingwindow setups setups setupscale setupscript \
+setupselector setupshift setupsidebar setupspellchecking setupstretched \
+setupstruts setupstyle setupsubformula setuptabulation setuptagging \
+setuptaglabeltext setuptextbackground setuptextflow setuptooltip setupunit \
+setupunittext setupurl setupuserpagenumber setupversion setupviewerlayer \
+setupvspacing setupwithargument setupwithargumentswapped setupxml setupxtable \
+setuvalue setuxvalue setvalue setvariable setvariables \
+setvisualizerfont setwidthof setxmeasure setxvalue setxvariable \
+setxvariables sfrac shapedhbox shiftdown shiftup \
+showallmakeup showattributes showboxes showbtxdatasetauthors showbtxdatasetauthors \
+showbtxdatasetcompleteness showbtxdatasetcompleteness showbtxdatasetfields showbtxdatasetfields showbtxfields \
+showbtxfields showbtxhashedauthors showbtxtables showchardata showcharratio \
+showcolorbar showcolorcomponents showcolorset showcolorstruts showcounter \
+showdirectives showdirsinmargin showedebuginfo showexperiments showfont \
+showfontdata showfontkerns showfontparameters showfontstrip showfontstyle \
+showglyphs showgridsnapping showhelp showhyphenationtrace showhyphens \
+showinjector showjustification showkerning showlayoutcomponents showligature \
+showligatures showlogcategories showmargins showmessage showminimalbaseline \
+shownextbox showotfcomposition showparentchain showsetupsdefinition showtimer \
+showtokens showtrackers showvalue showvariable showwarning \
+simplealignedbox simplealignedboxplus simplealignedspreadbox simplegroupedcommand simplereversealignedbox \
+simplereversealignedboxplus singalcharacteralign singlebond sixthofsixarguments slanted \
+slantedbold slicepages slovenianNumerals sloveniannumerals small \
+smallbodyfont smallbold smallbolditalic smallboldslanted smallcappedcharacters \
+smallcappedromannumerals smaller smallitalicbold smallnormal smallskip \
+smallslanted smallslantedbold smalltype smash smashbox \
+smashboxed smashedhbox smashedvbox snaptogrid snaptogrid \
+someheadnumber somekindoftab somelocalfloat somenamedheadnumber someplace \
+spanishNumerals spanishnumerals speech splitdfrac splitfilename \
+splitfrac splitoffbase splitofffull splitoffkind splitoffname \
+splitoffpath splitoffroot splitofftokens splitofftype splitstring \
+spreadhbox sqrt stackrel startlinenote startregister \
+startstructurepageregister stoplinenote stopregister stopstructurepageregister strictdoifelsenextoptional \
+strictdoifnextoptionalelse stripcharacter strippedcsname strippedcsname stripspaces \
+structurelistuservariable structurenumber structuretitle structureuservariable structurevariable \
+strut strutdp strutht struthtdp struttedbox \
+strutwd style style styleinstance sub \
+subject subsection subsentence substituteincommalist subsubject \
+subsubsection subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection \
+subsubsubsubsubject subtractfeature subtractfeature swapcounts swapdimens \
+swapface swapmacros swaptypeface switchstyleonly switchstyleonly \
+switchtocolor switchtointerlinespace switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace switchtointerlinespace symbolreference synchronizeblank synchronizeindenting \
+synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace systemlog \
+systemlogfirst systemloglast systemsetups tLeftarrow tLeftrightarrow \
+tRightarrow tabulateautoline tabulateautorule tabulateline tabulaterule \
+taggedctxcommand taggedlabeltexts taglabellanguage taglabeltext tbinom \
+tbox tequal testandsplitstring testfeature testfeatureonce \
+testpageonly testpagesync testtokens texdefinition texsetup \
+textcitation textcitation textcitation textcite textcite \
+textcite textcontrolspace textflowcollector textmath textminus \
+textormathchar textplus textvisiblespace tfrac thai \
+thainumerals thefirstcharacter thenormalizedbodyfontsize theremainingcharacters thickspace \
+thinspace thinspace thirdoffivearguments thirdoffourarguments thirdofsixarguments \
+thirdofthreearguments thirdofthreeunexpanded thookleftarrow thookrightarrow threedigitrounding \
+tibetannumerals tightlayer tilde tinyfont title \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tmapsto tochar tolinenote tooltip \
+tooltip topbox topleftbox toplinebox toprightbox \
+topskippedbox tracecatcodetables tracedfontname traceoutputroutines tracepositions \
+transparencycomponents trel trightarrow trightharpoondown trightharpoonup \
+trightleftharpoons trightoverleftarrow triplebond truefilename truefontname \
+ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow twodigitrounding \
+tx txt txt txx typ \
+typ typedefinedbuffer typeface typescriptone typescriptprefix \
+typescriptthree typescripttwo typesetbuffer typesetfile uconvertnumber \
+uedcatcodecommand undefinevalue undepthed underbar underbar \
+underbars underbartext underbrace underbracetext underbracket \
+underbrackettext underdash underdashes underdot underdots \
+underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow underparent \
+underparenttext underrandom underrandoms underrightarrow underrightharpoondown \
+underrightharpoonup underset understrike understrikes undertwoheadleftarrow \
+undertwoheadrightarrow undoassign unframed unhhbox unihex \
+uniqueMPgraphic uniqueMPpagegraphic unit unitlanguage unittext \
+unprotected unregisterhyphenationpattern unspaceafter unspaceargument unspaced \
+unspacestring untexargument untexcommand uppercased uppercasestring \
+upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote \
+upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote url useJSscripts \
+useMPenvironmentbuffer useMPgraphic useMPlibrary useMPrun useMPvariables \
+useURL usealignparameter usebodyfont usebodyfontparameter usebtxdataset \
+usebtxdefinitions usecolors usecomponent usedummycolorparameter usedummystyleandcolor \
+usedummystyleparameter useenvironment useexternalrendering usefigurebase usefile \
+usegridparameter useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter \
+uselanguageparameter useluamodule usemathstyleparameter useproduct useprofileparameter \
+useproject usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure \
+usesubpath usetexmodule useurl usezipfile utfchar \
+utflower utfupper utilityregisterlength vboxreference vec \
+verbatim verbatimstring verbosenumber verticalgrowingbar verticalpositionbar \
+veryraggedcenter veryraggedleft veryraggedright vglue viewerlayer \
+vphantom vpos vsmash vsmashbox vsmashed \
+vspace vspacing wdofstring widthofstring widthspanningtext \
+withoutpt word words wordtonumber writedatatolist \
+writestatus xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument \
+xequal xfrac xhookleftarrow xhookrightarrow xleftarrow \
+xleftharpoondown xleftharpoonup xleftrightarrow xleftrightharpoons xmapsto \
+xmladdindex xmlafterdocumentsetup xmlaftersetup xmlall xmlappenddocumentsetup \
+xmlappendsetup xmlapplyselectors xmlatt xmlattdef xmlattribute \
+xmlattributedef xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup xmlchainatt \
+xmlchainattdef xmlchecknamespace xmlcommand xmlconcat xmlconcatrange \
+xmlcontext xmlcount xmldefaulttotext xmldirectives xmldirectivesafter \
+xmldirectivesbefore xmldisplayverbatim xmldoif xmldoifelse xmldoifelseempty \
+xmldoifelseselfempty xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotselfempty \
+xmldoifnottext xmldoifselfempty xmldoiftext xmlelement xmlfilter \
+xmlfirst xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise \
+xmlflushpure xmlflushspacewise xmlflushtext xmlinclude xmlinclusion \
+xmlinclusions xmlinfo xmlinjector xmlinlineverbatim xmlinstalldirective \
+xmllast xmllastatt xmllastmatch xmlloadbuffer xmlloaddata \
+xmlloaddirectives xmlloadfile xmlloadonly xmlmain xmlmapvalue \
+xmlname xmlnamespace xmlnonspace xmlpath xmlpos \
+xmlposition xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprocessbuffer \
+xmlprocessdata xmlprocessfile xmlpure xmlraw xmlrefatt \
+xmlregistereddocumentsetups xmlregisteredsetups xmlregisterns xmlregisterns xmlremapname \
+xmlremapnamespace xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors \
+xmlresetsetups xmlsave xmlsetentity xmlsetfunction xmlsetinjectors \
+xmlsetsetup xmlsetup xmlshow xmlsnippet xmlstrip \
+xmlstripnolines xmlstripped xmlstrippednolines xmltag xmltexentity \
+xmltext xmltobuffer xmltobufferverbose xmltofile xmlvalue \
+xmlverbatim xrel xrightarrow xrightharpoondown xrightharpoonup \
+xrightleftharpoons xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow \
+xtwoheadrightarrow xxfrac xypos آیتم آیتمها \
+آینه از استفاده‌بلوکها استفاده‌دستخط‌تایپ استفاده‌شکل‌خارجی \
+استفاده‌قطعه‌موزیک‌خارجی استفاده‌مدول استفاده‌مسیر استفاده‌نمادها استفاده‌نوشتارخارجی \
+استفاده‌پرونده‌دستخط‌تایپ اعدادلاتین افزودن اما اما \
+انتخاب‌بلوکها بارگذاری‌آرایش بارگذاری‌آیتمها بارگذاری‌ارجاع بارگذاری‌اندازه‌برگ \
+بارگذاری‌اندازه‌برگ بارگذاری‌باریکتر بارگذاری‌بافر بارگذاری‌بالا بارگذاری‌بردباری \
+بارگذاری‌برنامه‌ها بارگذاری‌برگ بارگذاری‌بلوک بارگذاری‌بلوک‌بخش بارگذاری‌تایپ \
+بارگذاری‌تایپ‌کردن بارگذاری‌ترتیب بارگذاری‌ترتیب بارگذاری‌تنظیم بارگذاری‌تنظیم‌ریاضی \
+بارگذاری‌ته‌برگ بارگذاری‌تورفتگی بارگذاری‌توضیح بارگذاری‌توضیح‌صفحه بارگذاری‌ثبت \
بارگذاری‌ثبت بارگذاری‌جانشانی بارگذاری‌جدولها بارگذاری‌جدول‌بندی بارگذاری‌خالی \
-بارگذاری‌خروجی بارگذاری‌خط بارگذاری‌خطها بارگذاری‌خطهای‌حاشیه بارگذاری‌خطهای‌سیاه \
-بارگذاری‌خطهای‌متن بارگذاری‌خطهای‌مجموعه‌ستون بارگذاری‌خطها‌ی‌نازک بارگذاری‌درج‌درخطها بارگذاری‌درج‌مخالف \
-بارگذاری‌درون‌حاشیه بارگذاری‌دوران بارگذاری‌دکمه‌ها بارگذاری‌راهنما بارگذاری‌رنگ \
+بارگذاری‌خطها بارگذاری‌خطهای‌حاشیه بارگذاری‌خطهای‌سیاه بارگذاری‌خطهای‌متن بارگذاری‌خطها‌ی‌نازک \
+بارگذاری‌درج‌درخطها بارگذاری‌درج‌مخالف بارگذاری‌دوران بارگذاری‌راهنما بارگذاری‌رنگ \
بارگذاری‌رنگها بارگذاری‌زبان بارگذاری‌ستونها بارگذاری‌سر بارگذاری‌سربرگ \
-بارگذاری‌سرها بارگذاری‌سیستم بارگذاری‌شرح بارگذاری‌شرحها بارگذاری‌شروع‌مجموعه‌ستون \
-بارگذاری‌شروع‌پایان بارگذاری‌شماره بارگذاری‌شماره‌زیرصفحه بارگذاری‌شماره‌سر بارگذاری‌شماره‌صفحه \
-بارگذاری‌شماره‌گذاری بارگذاری‌شماره‌گذاریها بارگذاری‌شماره‌گذاری‌صفحه بارگذاری‌شماره‌گذاری‌پاراگراف بارگذاری‌شماره‌‌گذاری‌خط \
-بارگذاری‌شناور بارگذاری‌شناورها بارگذاری‌شکافتن‌شناورها بارگذاری‌شکلهای‌خارجی بارگذاری‌طرح \
-بارگذاری‌طرح‌بندی بارگذاری‌عرض‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فرمولها بارگذاری‌فضای‌سفید \
-بارگذاری‌فضا‌گذاری بارگذاری‌قالبی بارگذاری‌قلم‌متن بارگذاری‌لوح بارگذاری‌لیست \
-بارگذاری‌لیست‌ترکیبی بارگذاری‌لیست‌مرجع بارگذاری‌مترادفها بارگذاری‌متغیر‌متن بارگذاری‌متن \
-بارگذاری‌متنهای‌بالا بارگذاری‌متن‌سر بارگذاری‌متن‌سربرگ بارگذاری‌متن‌قالبی بارگذاری‌متن‌متنها \
-بارگذاری‌متن‌پانوشت بارگذاری‌متن‌پایین بارگذاری‌مجموعه‌ستون بارگذاری‌مجموعه‌نماد بارگذاری‌محیط‌قلم‌متن \
-بارگذاری‌منوی‌پانل بارگذاری‌مکان‌متن بارگذاری‌مکان‌گذاری بارگذاری‌میدان بارگذاری‌میدانها \
-بارگذاری‌میله‌تطابق بارگذاری‌میله‌زیر بارگذاری‌میله‌پانل بارگذاری‌نسخه‌ها بارگذاری‌نشانه‌شکستن \
-بارگذاری‌نشانه‌گذاری بارگذاری‌نشرها بارگذاری‌نقل بارگذاری‌پاراگرافها بارگذاری‌پانل \
-بارگذاری‌پانوشتها بارگذاری‌پایین بارگذاری‌پرده‌ها بارگذاری‌پرده‌پانل بارگذاری‌پروفایلها \
-بارگذاری‌پرکردن‌خطها بارگذاری‌پس‌زمینه بارگذاری‌پس‌زمینه‌ها بارگذاری‌چیدن بارگذاری‌گذارصفحه \
-بارگذاری‌گروههای‌آیتم بارگذاری‌گروه‌آیتم بازنشانی بازنشانی‌شماره بازنشانی‌متن \
-بازنشانی‌نشانه‌گذاری باگذاری‌متن‌برچسب بدون‌بعد بدون‌بلوکهای‌بیشتر بدون‌تورفتگی \
-بدون‌خط‌بالاوپایین بدون‌خط‌سروته‌برگ بدون‌فایلهای‌بیشتر بدون‌فضا بدون‌فضای‌سفید \
-بدون‌لیست بدون‌نشانه‌گذاری برنامه بروبه بروبه‌جعبه \
-بروبه‌صفحه بروپایین برچسب برچسبها بعد \
-بلند بلوکهای‌پردازش بلوکها‌پنهان بنویس‌بین‌لیست بنویس‌درثبت \
-بنویس‌درلیست‌مرجع بنویس‌در‌لیست تاریخ تاریخ‌جاری تاریخ‌رجوع \
-تایپ تایپ‌بافر تایپ‌پرونده تب ترجمه \
-تطابق تعریف تعریف‌آرایش تعریف‌آرم تعریف‌الگوی‌جدول \
-تعریف‌اندازه‌برگ تعریف‌بافر تعریف‌بخش تعریف‌برنامه تعریف‌برچسب \
-تعریف‌بلوک تعریف‌بلوک‌بخش تعریف‌تایپ تعریف‌تایپ‌کردن تعریف‌تبدیل \
+بارگذاری‌شرح بارگذاری‌شروع‌پایان بارگذاری‌شماره‌زیرصفحه بارگذاری‌شماره‌سر بارگذاری‌شماره‌صفحه \
+بارگذاری‌شماره‌گذاری‌صفحه بارگذاری‌شماره‌گذاری‌پاراگراف بارگذاری‌شماره‌‌گذاری‌خط بارگذاری‌شناور بارگذاری‌شکافتن‌شناورها \
+بارگذاری‌طرح بارگذاری‌طرح‌بندی بارگذاری‌طرح‌بندی بارگذاری‌عرض‌خط بارگذاری‌فاصله‌بین‌خط \
+بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فاصله‌بین‌خط \
+بارگذاری‌فضای‌سفید بارگذاری‌فضا‌گذاری بارگذاری‌قالبی بارگذاری‌قلم‌متن بارگذاری‌لوح \
+بارگذاری‌لیست بارگذاری‌لیست‌ترکیبی بارگذاری‌مترادفها بارگذاری‌متن بارگذاری‌متنهای‌بالا \
+بارگذاری‌متن‌سر بارگذاری‌متن‌سربرگ بارگذاری‌متن‌متنها بارگذاری‌متن‌پانوشت بارگذاری‌متن‌پایین \
+بارگذاری‌مجموعه‌نماد بارگذاری‌منوی‌پانل بارگذاری‌مکان‌گذاری بارگذاری‌میدان بارگذاری‌میدانها \
+بارگذاری‌میله‌پانل بارگذاری‌نشانه‌شکستن بارگذاری‌نشانه‌گذاری بارگذاری‌نقل بارگذاری‌پاراگرافها \
+بارگذاری‌پاراگرافها بارگذاری‌پانل بارگذاری‌پانل بارگذاری‌پایین بارگذاری‌پرده‌پانل \
+بارگذاری‌پرکردن‌خطها بارگذاری‌پس‌زمینه بارگذاری‌پس‌زمینه‌ها بارگذاری‌پس‌زمینه‌ها بارگذاری‌چیدن \
+بارگذاری‌گذارصفحه بارگذاری‌گروه‌آیتم بارگذاری‌گروه‌آیتم بازنشانی‌نشانه‌گذاری باگذاری‌متن‌برچسب \
+بدون‌خط‌بالاوپایین بدون‌خط‌سروته‌برگ بدون‌فضا برنامه بروبه \
+بروبه‌جعبه بروبه‌صفحه بروپایین بلند بلوکهای‌پردازش \
+بلوکها‌پنهان بنویس‌بین‌لیست بنویس‌در‌لیست تاریخ تاریخ‌جاری \
+تایپ تایپ تایپ‌بافر تایپ‌پرونده ترجمه \
+تعریف تعریف‌آرایش تعریف‌الگوی‌جدول تعریف‌اندازه‌برگ تعریف‌اندازه‌برگ \
+تعریف‌بافر تعریف‌بخش تعریف‌برنامه تعریف‌برچسب تعریف‌بلوک \
+تعریف‌بلوک‌بخش تعریف‌تایپ تعریف‌تایپ‌کردن تعریف‌تبدیل تعریف‌تبدیل \
تعریف‌ترتیب تعریف‌ترکیب تعریف‌تنظیم‌ریاضی تعریف‌توده‌میدان تعریف‌ثبت \
-تعریف‌جانشانی تعریف‌جدول‌بندی تعریف‌جعبه‌‌افقی تعریف‌حرف تعریف‌خالی \
-تعریف‌خروجی تعریف‌خط‌حائل تعریف‌درون‌حاشیه تعریف‌رنگ تعریف‌زیرمیدان \
-تعریف‌سبک تعریف‌سبک‌قلم تعریف‌سر تعریف‌شرح تعریف‌شروع‌پایان \
-تعریف‌شماره‌بندی تعریف‌شمایل‌مرجع تعریف‌شناور تعریف‌شکستن‌ستون تعریف‌شکست‌صفحه \
-تعریف‌طرح‌بندی تعریف‌فرمان تعریف‌قالبی تعریف‌قلم تعریف‌قلم‌خام \
-تعریف‌قلم‌متن تعریف‌لایه تعریف‌لهجه تعریف‌لوح تعریف‌لیست \
-تعریف‌لیست‌ترکیبی تعریف‌لیست‌مرجع تعریف‌مترادفها تعریف‌مترادف‌قلم تعریف‌متغیرمتن \
-تعریف‌متن تعریف‌متن‌قالبی تعریف‌مجموعه‌ستون تعریف‌محیط‌قلم‌بدنه تعریف‌مرجع \
-تعریف‌منوی‌پانل تعریف‌مکان‌متن تعریف‌میدان تعریف‌میدان‌اصلی تعریف‌نسخه \
-تعریف‌نشانه‌گذاری تعریف‌نماد تعریف‌نمادشکل تعریف‌پاراگرافها تعریف‌پروفایل \
-تعریف‌پوشش تعریف‌گروه‌آیتم تعریف‌گروه‌رنگ تعیین‌شماره تعیین‌شماره‌سر \
-تعیین‌متغیر‌متن تعیین‌محتوای‌متن تعیین‌مشخصات‌ثبت تعیین‌مشخصات‌لیست تغییربه‌قلم‌بدنه \
-تغییربه‌قلم‌خام تنظیم‌راست تنظیم‌طرح‌بندی تنظیم‌وسط توجه \
-تورفتگی توری تولید تک ثبت‌زوج \
-ثبت‌کامل جداسازی‌نشانه‌گذاری حاش حرف حرفها \
-حفظ‌بلوکها حقیقت خالی خطهای‌سیاه خطهای‌نازک \
-خطها‌خالی خط‌حاشیه خط‌سیاه خط‌متن خط‌مو \
-خط‌نازک خ‌ا خ‌ع در درج‌آرمها \
-درج‌ثبت درج‌خط درج‌درخط درج‌درخطها درج‌درمتن \
-درج‌درمیدان درج‌در‌بالای‌یکدیگر درج‌در‌توری درج‌راهنما درج‌زیرفرمول \
-درج‌شماره‌سر درج‌شماره‌صفحه درج‌شناور درج‌فرمول درج‌لیست \
-درج‌لیست‌خام درج‌لیست‌مختلط درج‌لیست‌مرجع درج‌متغیرمتن درج‌متن‌سر \
-درج‌پانوشتها درج‌پانوشتهای‌موضعی درج‌چوب‌خط درج‌کنار‌به‌کنار درحاشیه \
-درحاشیه‌دیگر درحاشیه‌راست درحاشیه‌چپ درخارجی درخط \
-درداخلی درراست درصفحه درقالبی درلبه‌راست \
-درلبه‌چپ درمورد درون درپر درچپ \
-دریافت‌بافر دریافت‌شماره دریافت‌نشانه دوران دکمه \
-دکمه‌منو دکمه‌پانل رج رجوع رنگ \
-رنگ‌خاکستری روزهفته ریاضی زبان زبان‌اصلی \
-ستون ستون‌امتحان سر سرپوش‌کوچک‌نه شروع‌آرایش \
-شروع‌آرایش‌ستون شروع‌باریکتر شروع‌بازبینی شروع‌بلوک‌حاشیه شروع‌ترکیب \
-شروع‌تصحیح‌خط شروع‌تطابق شروع‌تنظیم شروع‌تولید شروع‌جدول \
-شروع‌جدولها شروع‌خط شروع‌خطها شروع‌خط‌حاشیه شروع‌خط‌متن \
-شروع‌رنگ شروع‌ستونها شروع‌سراسری شروع‌شماره‌گذاری‌خط شروع‌شکل \
-شروع‌غیر‌فشرده شروع‌فشرده شروع‌متن شروع‌مجموعه‌ستون شروع‌مجموعه‌نماد \
-شروع‌محیط شروع‌مخالف شروع‌موضعی شروع‌مولفه شروع‌مکان‌گذاری \
-شروع‌نسخه شروع‌نقل‌قول شروع‌نوشتار شروع‌پانوشتهای‌موضعی شروع‌پروفایل \
-شروع‌پروژه شروع‌پس‌زمینه شروع‌پوشش شروع‌کد شماره‌افزایش \
-شماره‌زیرصفحه شماره‌زیرفرمول شماره‌سر شماره‌سرجاری شماره‌صفحه \
-شماره‌صفحه‌کامل شماره‌فرمول شماره‌مبدل شماره‌ها شماره‌کاهش \
-شماره‌کل‌صفحه‌ها شکافتن‌شناور شکل‌خارجی صفحه صفحه‌تست \
-صفحه‌زوج صفحه‌پردازش طول‌لیست عبوربلوکها عرض‌آرایش \
-عرض‌برگ عرض‌حاشیه عرض‌حاشیه‌خارجی عرض‌حاشیه‌داخلی عرض‌حاشیه‌راست \
-عرض‌حاشیه‌چپ عرض‌خط عرض‌لبه عرض‌لبه‌خارجی عرض‌لبه‌داخلی \
-عرض‌لبه‌راست عرض‌لبه‌چپ عرض‌لیست عرض‌متن عمق‌صفحه \
-عنوان‌حاشیه فاصله‌بالا فاصله‌ته‌برگ فاصله‌حاشیه فاصله‌حاشیه‌خارجی \
-فاصله‌حاشیه‌داخلی فاصله‌حاشیه‌راست فاصله‌حاشیه‌چپ فاصله‌سربرگ فاصله‌لبه \
-فاصله‌لبه‌خارجی فاصله‌لبه‌داخلی فاصله‌لبه‌راست فاصله‌لبه‌چپ فاصله‌پایین \
-فاصله‌پشت فشرده فضا فضاهای‌ثابت فضای‌بالا \
-فضای‌برش فضای‌ثابت فضای‌سفید فضای‌سفیدصحیح فضای‌پایین \
-فوری‌به‌لیست فوری‌بین‌لیست قالبی لوح‌مقایسه ماه \
-متغیر متن متن‌برچسب متن‌حاشیه متن‌سر متن‌پانوشت \
-محیط مراجعه مرجع مرجع‌صفحه مرجع‌متن \
-مرحله‌سر مسکن معنی‌واحد مقایسه‌گروه‌رنگ مقدارخاکستری \
-مقداررنگ مقیاس منفی منوی‌پانل مولفه \
-مکان مکان‌متن میدان میدانهای‌گزارش میدان‌شبیه‌سازی \
-میدان‌پشته میدان‌کپی میله‌تطابق میله‌رنگ میله‌پانل \
-ناشناس نام‌ماکرو نسخه نسخه‌نشانه نشانه‌گذاری \
-نشانه‌گذاری‌زوج نشر نصب‌زبان نقطه‌ها نقل \
-نقل‌قول نم نماد نمادسر نمادلیست \
-نمایش‌آرایش نمایش‌بارگذاریها نمایش‌بستها نمایش‌توری نمایش‌رنگ \
-نمایش‌شکلهای‌خارجی نمایش‌طرح‌بندی نمایش‌قالب نمایش‌قلم‌بدنه نمایش‌لوح \
-نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه نمایش‌میدانها نمایش‌چاپ نمایش‌گروه‌رنگ \
-نوشتارزوج هدایت پا پابا پانوشت \
-پایان‌آرایش پایان‌آرایش‌ستون پایان‌بازبینی پایان‌بلوک‌حاشیه پایان‌ترکیب \
-پایان‌تصحیح‌خط پایان‌تطابق پایان‌تنظیم پایان‌تولید پایان‌جدول \
-پایان‌جدولها پایان‌خط پایان‌خطها پایان‌خط‌حاشیه پایان‌خط‌متن \
-پایان‌رنگ پایان‌ستونها پایان‌سراسری پایان‌شماره‌گذاری‌خط پایان‌غیرفشرده \
-پایان‌فشرده پایان‌متن پایان‌مجموعه‌ستون پایان‌محیط پایان‌مخالف \
-پایان‌موضعی پایان‌مولفه پایان‌مکان‌گذاری پایان‌نازکتر پایان‌نسخه \
-پایان‌نقل‌قول پایان‌نوشتار پایان‌پانوشتهای‌موضعی پایان‌پروفایل پایان‌پروژه \
-پایان‌پس‌زمینه پایان‌پوشش پایان‌کد پایین پرده \
-پروژه پرکردن‌میدان پس‌زمینه پیروی‌نسخه پیروی‌نسخه‌پروفایل \
-پیروی‌پروفایل چاپ‌ارتفاع‌برگ چاپ‌عرض‌برگ چوبخط چپ‌چین \
-کاغذزوج کسر کشیده کلمه‌حاشیه کلمه‌راست \
-گیره یادداشت یک‌جا یک‌خط
+تعریف‌جانشانی تعریف‌جدول‌بندی تعریف‌جعبه‌‌افقی تعریف‌حرف تعریف‌رنگ \
+تعریف‌رنگ تعریف‌زیرمیدان تعریف‌سبک تعریف‌سبک‌قلم تعریف‌سر \
+تعریف‌شرح تعریف‌شروع‌پایان تعریف‌شمایل‌مرجع تعریف‌شناور تعریف‌شناور \
+تعریف‌شکستن‌ستون تعریف‌شکست‌صفحه تعریف‌طرح‌بندی تعریف‌فرمان تعریف‌قالبی \
+تعریف‌قلم تعریف‌قلم تعریف‌قلم‌متن تعریف‌قلم‌متن تعریف‌لایه \
+تعریف‌لهجه تعریف‌لوح تعریف‌لوح تعریف‌لیست تعریف‌لیست‌ترکیبی \
+تعریف‌مترادفها تعریف‌مترادف‌قلم تعریف‌متن تعریف‌متن‌قالبی تعریف‌محیط‌قلم‌بدنه \
+تعریف‌مرجع تعریف‌منوی‌پانل تعریف‌میدان تعریف‌نشانه‌گذاری تعریف‌نماد \
+تعریف‌نمادشکل تعریف‌پاراگرافها تعریف‌پروفایل تعریف‌پوشش تعریف‌گروه‌آیتم \
+تعریف‌گروه‌رنگ تعیین‌شماره‌سر تعیین‌محتوای‌متن تعیین‌مشخصات‌ثبت تعیین‌مشخصات‌لیست \
+تغییربه‌قلم‌بدنه تنظیم‌راست تنظیم‌طرح‌بندی تنظیم‌وسط توجه \
+توری تولید تولید تک ثبت‌کامل \
+حاش حرف حرفها حفظ‌بلوکها خالی \
+خطهای‌سیاه خطهای‌نازک خطها‌خالی خط‌سیاه خط‌متن \
+خط‌مو خط‌نازک خ‌ا خ‌ع در \
+درج‌ثبت درج‌درخط درج‌درخطها درج‌درمتن درج‌در‌بالای‌یکدیگر \
+درج‌در‌توری درج‌در‌توری درج‌راهنما درج‌زیرفرمول درج‌شماره‌سر \
+درج‌شماره‌صفحه درج‌شناور درج‌فرمول درج‌لیست درج‌لیست‌خام \
+درج‌لیست‌مختلط درج‌متن‌سر درج‌پانوشتها درج‌پانوشتهای‌موضعی درج‌چوب‌خط \
+درج‌کنار‌به‌کنار درحاشیه درحاشیه‌راست درحاشیه‌راست درحاشیه‌چپ \
+درحاشیه‌چپ درخارجی درخط درداخلی درراست \
+درصفحه درقالبی درلبه‌راست درلبه‌چپ درمورد \
+درون درپر درچپ دریافت‌بافر دریافت‌نشانه \
+دوران دکمه دکمه‌منو دکمه‌منو دکمه‌پانل \
+رج رنگ رنگ‌خاکستری روزهفته ریاضی \
+زبان زبان‌اصلی ستون ستون‌امتحان سر \
+سرپوش‌کوچک‌نه شروعJScode شروعJSpreamble شروعLUA شروعLUA \
+شروعMP شروعMP شروعMPclip شروعMPcode شروعMPdefinitions \
+شروعMPdrawing شروعMPdrawing شروعMPenvironment شروعMPextensions شروعMPinclusions \
+شروعMPinitializations شروعMPpage شروعMPpositiongraphic شروعMPpositionmethod شروعMPrun \
+شروعPARSEDXML شروعPARSEDXML شروعTABLE شروعTABLE شروعTABLEbody \
+شروعTABLEbody شروعTABLEfoot شروعTABLEfoot شروعTABLEhead شروعTABLEhead \
+شروعTABLEnext شروعTABLEnext شروعTC شروعTD شروعTDs \
+شروعTEX شروعTEX شروعTEXpage شروعTH شروعTN \
+شروعTR شروعTRs شروعTX شروعTY شروعXML \
+شروعXML شروعalign شروعalignment شروعallmodes شروعappendices \
+شروعarrangedpages شروعattachment شروعbackmatter شروعbar شروعbar \
+شروعbitmapimage شروعblockquote شروعbodymatter شروعboxedcolumns شروعbtxlabeltext \
+شروعbtxrenderingdefinitions شروعbuffer شروعbuffer شروعcases شروعcatcodetable \
+شروعcatcodetable شروعcenteraligned شروعchapter شروعcharacteralign شروعcheckedfences \
+شروعchemical شروعcollect شروعcollecting شروعcolorintent شروعcolorset \
+شروعcolumns شروعcolumnspan شروعcom شروعcombination شروعcombination \
+شروعcomment شروعcontextcode شروعcontextdefinitioncode شروعctxfunction شروعctxfunctiondefinition \
+شروعcurrentcolor شروعcurrentlistentrywrapper شروعdelimited شروعdelimitedtext شروعdisplaymath \
+شروعdmath شروعdocument شروعeffect شروعembeddedxtable شروعembeddedxtable \
+شروعendnote شروعendnote شروعendofline شروعexceptions شروعexpanded \
+شروعexpandedcollect شروعextendedcatcodetable شروعexternalfigurecollection شروعfigure شروعfiguretext \
+شروعfittingpage شروعfloatcombination شروعfloatcombination شروعfont شروعfontclass \
+شروعfontsolution شروعformula شروعformulas شروعframedcontent شروعframedtext \
+شروعfrontmatter شروعgot شروعgraphictext شروعgridsnapping شروعgridsnapping \
+شروعhboxestohbox شروعhelptext شروعhiding شروعhighlight شروعhyphenation \
+شروعimath شروعindentation شروعindentedtext شروعinteraction شروعinterface \
+شروعintermezzotext شروعintertext شروعitemgroup شروعitemize شروعknockout \
+شروعlayout شروعlegend شروعlinealignment شروعlinecorrection شروعlinenumbering \
+شروعlinenumbering شروعlines شروعlinetable شروعlinetablebody شروعlinetablecell \
+شروعlinetablehead شروعlocalfootnotes شروعlocalheadsetup شروعlocallinecorrection شروعlocalnotes \
+شروعlocalsetups شروعlocalsetups شروعlua شروعluacode شروعluaparameterset \
+شروعluasetups شروعluasetups شروعmakeup شروعmarginblock شروعmarkedcontent \
+شروعmathalignment شروعmathcases شروعmathlabeltext شروعmathmatrix شروعmathmode \
+شروعmathstyle شروعmathstyle شروعmatrices شروعmatrix شروعmaxaligned \
+شروعmdformula شروعmiddlealigned شروعmixedcolumns شروعmode شروعmodeset \
+شروعmodule شروعmodule شروعmoduletestsection شروعmpformula شروعnamedsection \
+شروعnamedsubformulas شروعnarrow شروعnarrow شروعnarrow شروعnarrower \
+شروعnegative شروعnicelyfilledbox شروعnointerference شروعnotallmodes شروعnotext \
+شروعnotmode شروعoperatortext شروعopposite شروعoutputstream شروعoverlay \
+شروعoverprint شروعpagecomment شروعpagefigure شروعpagegrid شروعpagegridspan \
+شروعpagelayout شروعpar شروعpar شروعparagraph شروعparagraphs \
+شروعparagraphscell شروعparbuilder شروعpart شروعpath شروعplacechemical \
+شروعplacefigure شروعplacegraphic شروعplaceintermezzo شروعplacepairedbox شروعplacetable \
+شروعpositioning شروعpositionoverlay شروعpositive شروعpostponing شروعprefixtext \
+شروعprocessassignmentcommand شروعprocessassignmentlist شروعprocesscommacommand شروعprocesscommalist شروعprotect \
+شروعprotectedcolors شروعpsh شروعpunctuation شروعrandomized شروعrandomseed \
+شروعraw شروعrawsetups شروعrawsetups شروعreadingfile شروعreferenceprefix \
+شروعreferenceprefix شروعregime شروعreusableMPgraphic شروعrob شروعrul \
+شروعscript شروعsdformula شروعsection شروعsectionblock شروعsectionblockenvironment \
+شروعsectionlevel شروعsetups شروعsetups شروعshapebox شروعshift \
+شروعsidebar شروعsimplecolumns شروعspecialitem شروعspecialitem شروعspecialitem \
+شروعspeech شروعspformula شروعspread شروعstartstop شروعstaticMPfigure \
+شروعstaticMPgraphic شروعstrictinspectnextcharacter شروعstrut شروعstyle شروعstyle \
+شروعsubformulas شروعsubject شروعsubsection شروعsubsentence شروعsubstack \
+شروعsubsubject شروعsubsubsection شروعsubsubsubject شروعsubsubsubsection شروعsubsubsubsubject \
+شروعsubsubsubsubsection شروعsubsubsubsubsubject شروعsymbolset شروعtable شروعtable \
+شروعtablehead شروعtables شروعtables شروعtabletail شروعtabletext \
+شروعtabulate شروعtabulatehead شروعtabulatetail شروعtagged شروعtaglabeltext \
+شروعtexcode شروعtexcode شروعtexdefinition شروعtext شروعtext \
+شروعtextbackground شروعtextbackgroundmanual شروعtextcolor شروعtextcolorintent شروعtextflow \
+شروعtitle شروعtokens شروعtxt شروعtypescript شروعtypescriptcollection \
+شروعtyping شروعtyping شروعuniqueMPgraphic شروعuniqueMPpagegraphic شروعunittext \
+شروعunpacked شروعusableMPgraphic شروعuseMPgraphic شروعusemathstyleparameter شروعusingbtxspecification \
+شروعvboxtohbox شروعvboxtohboxseparator شروعviewerlayer شروعxcell شروعxcellgroup \
+شروعxgroup شروعxmldisplayverbatim شروعxmlinlineverbatim شروعxmlraw شروعxmlsetups \
+شروعxmlsetups شروعxrow شروعxrowgroup شروعxtable شروعxtable \
+شروعxtablebody شروعxtablebody شروعxtablefoot شروعxtablefoot شروعxtablehead \
+شروعxtablehead شروعxtablenext شروعxtablenext شروعآیتم شروعاما \
+شروعبروبه شروعتنظیم‌راست شروعتنظیم‌وسط شروعتولید شروعتولید \
+شروعحقیقت شروعخط‌حاشیه شروعخط‌حاشیه شروعخط‌متن شروعدرج‌راهنما \
+شروعدرج‌شناور شروعدرج‌فرمول شروعدرج‌فرمول شروعرنگ شروعرنگ \
+شروعرنگ شروعسر شروعفشرده شروعقالبی شروعمتن‌برچسب \
+شروعمتن‌سر شروعمحیط شروعمحیط شروعمنفی شروعمنوی‌پانل \
+شروعمولفه شروعمولفه شروعنشر شروعنقل شروعنقل‌قول \
+شروعپانوشت شروعپانوشت شروعپروژه شروعپروژه شروعپس‌زمینه \
+شروعپس‌زمینه شروعچپ‌چین شروع‌خط شماره‌زیرصفحه شماره‌سر \
+شماره‌سرجاری شماره‌صفحه شماره‌صفحه‌کامل شماره‌فرمول شماره‌مبدل \
+شماره‌ها شکافتن‌شناور شکل‌خارجی صفحه صفحه‌تست \
+طول‌لیست عرض‌خط عنوان‌حاشیه فضا فضاهای‌ثابت \
+فضای‌ثابت فضای‌سفیدصحیح قالبی لوح‌مقایسه ماه \
+متن‌برچسب متن‌حاشیه متن‌سر متن‌پانوشت متن‌پانوشت \
+محیط محیط مراجعه مرجع مرجع‌صفحه \
+مرجع‌متن مقایسه‌گروه‌رنگ مقداررنگ مقیاس منفی \
+منفی منوی‌پانل مولفه مولفه مکان \
+میدان میدان‌شبیه‌سازی میدان‌پشته میدان‌کپی میله‌رنگ \
+میله‌پانل ناشناس نسخه نشانه‌گذاری نصب‌زبان \
+نصب‌زبان نقطه‌ها نقطه‌ها نقل نقل‌قول \
+نم نماد نماد نمادسر نمایش‌آرایش \
+نمایش‌بارگذاریها نمایش‌بستها نمایش‌توری نمایش‌رنگ نمایش‌طرح‌بندی \
+نمایش‌قالب نمایش‌قلم‌بدنه نمایش‌لوح نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه \
+نمایش‌چاپ نمایش‌گروه‌رنگ پابا پانوشت پانوشت \
+پایانJScode پایانJSpreamble پایانLUA پایانLUA پایانMP \
+پایانMP پایانMPclip پایانMPcode پایانMPdefinitions پایانMPdrawing \
+پایانMPdrawing پایانMPenvironment پایانMPextensions پایانMPinclusions پایانMPinitializations \
+پایانMPpage پایانMPpositiongraphic پایانMPpositionmethod پایانMPrun پایانPARSEDXML \
+پایانPARSEDXML پایانTABLE پایانTABLE پایانTABLEbody پایانTABLEbody \
+پایانTABLEfoot پایانTABLEfoot پایانTABLEhead پایانTABLEhead پایانTABLEnext \
+پایانTABLEnext پایانTC پایانTD پایانTDs پایانTEX \
+پایانTEX پایانTEXpage پایانTH پایانTN پایانTR \
+پایانTRs پایانTX پایانTY پایانXML پایانXML \
+پایانalign پایانalignment پایانallmodes پایانappendices پایانarrangedpages \
+پایانattachment پایانbackmatter پایانbar پایانbar پایانbitmapimage \
+پایانblockquote پایانbodymatter پایانboxedcolumns پایانbtxlabeltext پایانbtxrenderingdefinitions \
+پایانbuffer پایانbuffer پایانcases پایانcatcodetable پایانcatcodetable \
+پایانcenteraligned پایانchapter پایانcharacteralign پایانcheckedfences پایانchemical \
+پایانcollect پایانcollecting پایانcolorintent پایانcolorset پایانcolumns \
+پایانcolumnspan پایانcom پایانcombination پایانcombination پایانcomment \
+پایانcontextcode پایانcontextdefinitioncode پایانctxfunction پایانctxfunctiondefinition پایانcurrentcolor \
+پایانcurrentlistentrywrapper پایانdelimited پایانdelimitedtext پایانdisplaymath پایانdmath \
+پایانdocument پایانeffect پایانembeddedxtable پایانembeddedxtable پایانendnote \
+پایانendnote پایانendofline پایانexceptions پایانexpanded پایانexpandedcollect \
+پایانextendedcatcodetable پایانexternalfigurecollection پایانfigure پایانfiguretext پایانfittingpage \
+پایانfloatcombination پایانfloatcombination پایانfont پایانfontclass پایانfontsolution \
+پایانformula پایانformulas پایانframedcontent پایانframedtext پایانfrontmatter \
+پایانgot پایانgraphictext پایانgridsnapping پایانgridsnapping پایانhboxestohbox \
+پایانhelptext پایانhiding پایانhighlight پایانhyphenation پایانimath \
+پایانindentation پایانindentedtext پایانinteraction پایانinterface پایانintermezzotext \
+پایانintertext پایانitemgroup پایانitemize پایانknockout پایانlayout \
+پایانlegend پایانlinealignment پایانlinecorrection پایانlinenumbering پایانlinenumbering \
+پایانlines پایانlinetable پایانlinetablebody پایانlinetablecell پایانlinetablehead \
+پایانlocalfootnotes پایانlocalheadsetup پایانlocallinecorrection پایانlocalnotes پایانlocalsetups \
+پایانlocalsetups پایانlua پایانluacode پایانluaparameterset پایانluasetups \
+پایانluasetups پایانmakeup پایانmarginblock پایانmarkedcontent پایانmathalignment \
+پایانmathcases پایانmathlabeltext پایانmathmatrix پایانmathmode پایانmathstyle \
+پایانmathstyle پایانmatrices پایانmatrix پایانmaxaligned پایانmdformula \
+پایانmiddlealigned پایانmixedcolumns پایانmode پایانmodeset پایانmodule \
+پایانmodule پایانmoduletestsection پایانmpformula پایانnamedsection پایانnamedsubformulas \
+پایانnarrow پایانnarrow پایانnarrow پایانnarrower پایانnegative \
+پایانnicelyfilledbox پایانnointerference پایانnotallmodes پایانnotext پایانnotmode \
+پایانoperatortext پایانopposite پایانoutputstream پایانoverlay پایانoverprint \
+پایانpagecomment پایانpagefigure پایانpagegrid پایانpagegridspan پایانpagelayout \
+پایانpar پایانpar پایانparagraph پایانparagraphs پایانparagraphscell \
+پایانparbuilder پایانpart پایانpath پایانplacechemical پایانplacefigure \
+پایانplacegraphic پایانplaceintermezzo پایانplacepairedbox پایانplacetable پایانpositioning \
+پایانpositionoverlay پایانpositive پایانpostponing پایانprefixtext پایانprocessassignmentcommand \
+پایانprocessassignmentlist پایانprocesscommacommand پایانprocesscommalist پایانprotect پایانprotectedcolors \
+پایانpsh پایانpunctuation پایانrandomized پایانrandomseed پایانraw \
+پایانrawsetups پایانrawsetups پایانreadingfile پایانreferenceprefix پایانreferenceprefix \
+پایانregime پایانreusableMPgraphic پایانrob پایانrul پایانscript \
+پایانsdformula پایانsection پایانsectionblock پایانsectionblockenvironment پایانsectionlevel \
+پایانsetups پایانsetups پایانshapebox پایانshift پایانsidebar \
+پایانsimplecolumns پایانspecialitem پایانspecialitem پایانspecialitem پایانspeech \
+پایانspformula پایانspread پایانstartstop پایانstaticMPfigure پایانstaticMPgraphic \
+پایانstrictinspectnextcharacter پایانstrut پایانstyle پایانstyle پایانsubformulas \
+پایانsubject پایانsubsection پایانsubsentence پایانsubstack پایانsubsubject \
+پایانsubsubsection پایانsubsubsubject پایانsubsubsubsection پایانsubsubsubsubject پایانsubsubsubsubsection \
+پایانsubsubsubsubsubject پایانsymbolset پایانtable پایانtable پایانtablehead \
+پایانtables پایانtables پایانtabletail پایانtabletext پایانtabulate \
+پایانtabulatehead پایانtabulatetail پایانtagged پایانtaglabeltext پایانtexcode \
+پایانtexcode پایانtexdefinition پایانtext پایانtext پایانtextbackground \
+پایانtextbackgroundmanual پایانtextcolor پایانtextcolorintent پایانtextflow پایانtitle \
+پایانtokens پایانtxt پایانtypescript پایانtypescriptcollection پایانtyping \
+پایانtyping پایانuniqueMPgraphic پایانuniqueMPpagegraphic پایانunittext پایانunpacked \
+پایانusableMPgraphic پایانuseMPgraphic پایانusemathstyleparameter پایانusingbtxspecification پایانvboxtohbox \
+پایانvboxtohboxseparator پایانviewerlayer پایانxcell پایانxcellgroup پایانxgroup \
+پایانxmldisplayverbatim پایانxmlinlineverbatim پایانxmlraw پایانxmlsetups پایانxmlsetups \
+پایانxrow پایانxrowgroup پایانxtable پایانxtable پایانxtablebody \
+پایانxtablebody پایانxtablefoot پایانxtablefoot پایانxtablehead پایانxtablehead \
+پایانxtablenext پایانxtablenext پایانآیتم پایاناما پایانبروبه \
+پایانتنظیم‌راست پایانتنظیم‌وسط پایانتولید پایانتولید پایانحقیقت \
+پایانخط‌حاشیه پایانخط‌حاشیه پایانخط‌متن پایاندرج‌راهنما پایاندرج‌شناور \
+پایاندرج‌فرمول پایاندرج‌فرمول پایانرنگ پایانرنگ پایانرنگ \
+پایانسر پایانفشرده پایانقالبی پایانمتن‌برچسب پایانمتن‌سر \
+پایانمحیط پایانمحیط پایانمنفی پایانمنوی‌پانل پایانمولفه \
+پایانمولفه پایاننشر پایاننقل پایاننقل‌قول پایانپانوشت \
+پایانپانوشت پایانپروژه پایانپروژه پایانپس‌زمینه پایانپس‌زمینه \
+پایانچپ‌چین پایان‌خط پایین پرده پروژه \
+پروژه پرکردن‌میدان پس‌زمینه چوبخط چپ‌چین \
+کشیده کلمه‌حاشیه کلمه‌راست گیره یادداشت \
+یک‌جا یک‌خط
keywordclass.context.ro=\
-CAP CUVANT CUVINTE Cap \
-Caps Character Characters Cuvant Cuvinte \
-KAP Kap Kaps LUNA Litera \
-Litere MONTH Numere Numereromane Romannumerals \
-WEEKDAY WORD WORDS Word Words \
-ZIDINSAPTAMANA about adapteazaaspect adaptlayout adubuffer \
-adumarcaje afiseazaaspect afiseazacampuri afiseazaculoare afiseazafiguriexterne \
-afiseazafonttext afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext \
-afiseazapaleta afiseazarama afiseazasetari afiseazasetsimboluri afiseazastruts \
-afiseazatiparire aliniat aliniatcentru aliniatdreapta aliniatstanga \
-appendix arg ascundeblocuri at atleftmargin \
-atpage atrightmargin background baraculoare barainteractiune \
-barasincronizare blackrule blackrules blanc blank \
-bookmark but butoaneinteractiune buton butonmeniu \
-button bypassblocks camp campumplere cap \
-chapter character characters chem citat \
-clip cloneazacamp clonefield coloana color \
-column comment comparagrupculoare comparapaleta comparecolorgroup \
-comparepalet completeazanumarpagina completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms completeregister componenta convertestenumar convertnumber \
-copiazacamp copyfield corecteazaspatiualb correctwhitespace coupledocument \
-coupledregister couplemarking couplepage couplepaper coupleregister \
-crlf culoare culoaregri cupleazadocument cupleazamarcaje \
-cupleazaregistru currentdate currentheadnumber cutspace cuvantdreapta \
-cuvantmarginal data datacurenta datareferit date \
-decouplemarking decrementnumber decupleazamarcaje define defineblank \
-defineblock definebodyfont definebodyfontDEF definebodyfontREF definebodyfontenvironment \
-definebuffer definecolor definecolorgroup definecolumnbreak definecolumnset \
-definecombination definecombinedlist defineconversion definedescription definedfont \
-defineenumeration definefield definefieldstack definefiguresymbol definefloat \
-definefont definefontfeature definefonthandling definefontsynonym defineframed \
-defineframedtext definehead defineindentedtext defineinmargin defineinteractionmenu \
-defineitemgroup definelabel definelayer definelayout definelist \
-definelogo definemakeup definemarking definemathalignment defineoutput \
-defineoverlay definepagebreak definepalet definepapersize defineparagraphs \
-defineplacement defineprofile defineprogram definereference definereferenceformat \
-definereferencelist defineregister definesection definesectionblock definesorting \
-definestartstop defineste definesteaccent definesteantet definesteblanc \
-definestebloc definesteblocsectiune definestebuffer definestecamp definestecampprincipal \
-definestecaracter definestecomanda definesteconversie definesteculoare definestedescriere \
-definestedimensiunehartie definesteenumerare definesteeticheta definestefloat definestefont \
-definestefontraw definestefonttext definesteformatreferinte definestegrupculori definestehbox \
-definesteinconjurare definestelista definestelistacombinata definestelistareferinte definestelogo \
-definestemakeup definestemarcaje definestemediulfonttext definestemeniuinteractiune definesteoutput \
-definesteoverlay definestepaleta definesteparagraf definestepozitietext definesteprofil \
-definesteprogram definestereferinte definesteregistru definesterigla definestesablontabel \
-definestesectiune definestesimbol definestesimbolfigura definestesinonim definestesinonimfont \
-definestesortare definestestartstop definestestil definestestilfont definestestivacampuri \
-definestesubcamp definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat \
-definestetyping definestevariabilatext definesteversiune definesubfield definesymbol \
-definesynonyms definetabletemplate definetabulate definetext definetype \
-definetypeface definetyping defineversion description despre \
-determinacaracteristicilelistei determinacaracteristiciregistru determinanumartitlu determineheadnumber determinelistcharacteristics \
-dezactiveazameniuinteractiune dimensiune din disableinteractionmenu distantaantet \
-distantacolt distantacoltdreapta distantacoltstanga distantajos distantamargine \
-distantamarginedreapta distantamarginestanga distantasubsol distantasus domiciliu \
-dute dutebox dutepagina ecran el \
-element emptylines enumeration eticheta etichete \
-externalfigure fact faraaliniat faradimensiune farafisiere \
-faraliniiantetsisubsol faraliniisussijos faralista faramarcaje faraspatiu \
-faraspatiualb field fieldstack figuraexterna fillinfield \
-fillinline fillinrules fillintext firdepar fitfield \
-fixedspaces followprofile followprofileversion followversion folosesteURL \
-folosestebloc folosestecodificarea folosestecomenzi folosestedirector folosestedocumentextern \
-folosestefiguraexterna folosestefisiereexterne folosestefisierextern folosestemodul folosestemodule \
-folosestemuzicaexterna folosestereferinte folosestescriptJS folosestesimboluri folosestespeciale \
-folosesteurl footnote footnotetext forceblocks forteazablocuri \
-fractie fraction framed framedtext from \
-fundal gatablocuri getbuffer getmarking getnumber \
-godown goto gotobox graycolor grid \
-grosimelinie hairline hartiedubla head headnumber \
-headsym headtext hideblocks high hl \
-immediatebetweenlist immediatetolist impachetat impartefloat in \
-inalt inaltamargine inaltimeantet inaltimehartie inaltimehartieimprimanta \
-inaltimejos inaltimelista inaltimemakeup inaltimesubsol inaltimesus \
-inaltimetext indentation indenting indreapta inframed \
-ininner injos inleft inline inlinie \
-inmaframed inmargin inmargineadreapta inmargineastanga inneredgedistance \
-inneredgewidth innermargindistance innermarginwidth inothermargin inouter \
-inparteadreapta inparteastanga inright instalarelimba installlanguage \
-instanga interactionbar interactionbuttons intins item \
-items its jos jossus kap \
-keepblocks la labeling labels labeltext \
-language lapagina latimecoltdreapta latimecoltstanga latimecolturi \
-latimehartie latimehartieimprimanta latimelista latimemakeup latimemargine \
-latimemarginedreapta latimemarginestanga latimetext leftaligned leg \
-limba limbaprincipala liniemargine linieneagra liniesubtire \
-linieumplere liniinegre liniisubtiri listsymbol litera \
-litere loadsorts loadsynonyms logcampuri logfields \
-lohi low luna lungimelista maframed \
-mainlanguage mapfontsize mar marcaje marcheazaversiune \
-marginal marginrule margintext marking markversion \
-matematica mathematics mediaeval mediu meniuinteractiune \
-midaligned minicitat mirror month moveformula \
-moveongrid movesidefloat mutapegrid name navigating \
-necunoscut nextsection niveltitlu nocap noheaderandfooterlines \
-noindenting nokap nolist nomarking nomoreblocks \
-nomorefiles nop nospace nota notasubsol \
-note notopandbottomlines nowhitespace numarformula numarincrement \
-numarpagina numarsubformula numartitlu numartitlucurent numartotalpagini \
-numberofsubpages numbers nume numere numereromane \
-numeunitate nutesta olinie outeredgedistance outeredgewidth \
-outermargindistance outermarginwidth overbar overbars overstrike \
-overstrikes packed page pagedepth pageoffset \
-pagereference pagina paginadubla paragraph part \
-pastreazablocuri pelung periods placebookmarks placecombinedlist \
-placefloat placefootnotes placeformula placeheadnumber placeheadtext \
-placelegend placelist placelistoffloats placelistofsorts placelistofsynonyms \
-placelocalfootnotes placelogos placeongrid placeontopofeachother placerawlist \
-placereferencelist placeregister placesidebyside placesubformula plaseazapegrid \
-plaseazasemnecarte position potrivestecamp pozitie pozitietext \
-proceseazabloc proceseazapagina processblocks processpage produs \
-program proiect publicatie publication puncte \
+AMSTEX AfterPar Alphabeticnumerals AmSTeX \
+And BeforePar Big Bigg Biggl \
+Biggm Biggr Bigl Bigm Bigr \
+CONTEXT CUVANT CUVINTE Caps ConTeXt \
+Context ConvertConstantAfter ConvertToConstant Cuvant Cuvinte \
+ETEX EveryLine EveryPar GetPar GotoPar \
+Greeknumerals INRSTEX Kap LAMSTEX LATEX \
+LUAJITTEX LUATEX LUNA LaTeX LamSTeX \
+Litera Litere LuaTeX LuajitTeX METAFONT \
+METAFUN METAPOST MKII MKIV MKIX \
+MKVI MKXI MONTHLONG MONTHSHORT MPII \
+MPIV MPVI MPanchor MPbetex MPc \
+MPcode MPcolor MPcoloronly MPcolumn MPd \
+MPdrawing MPfontsizehskip MPgetmultipars MPgetmultishape MPgetposboxes \
+MPh MPinclusions MPleftskip MPll MPlr \
+MPls MPmenubuttons MPn MPoptions MPoverlayanchor \
+MPp MPpage MPpardata MPplus MPpos \
+MPpositiongraphic MPposset MPr MPrawvar MPregion \
+MPrest MPrightskip MPrs MPstring MPtext \
+MPtransparency MPul MPur MPv MPvar \
+MPvariable MPvv MPw MPx MPxy \
+MPxywhd MPy MetaFont MetaFun MetaPost \
+NormalizeFontHeight NormalizeFontWidth NormalizeTextHeight NormalizeTextWidth Numere \
+Numereromane PDFETEX PDFTEX PDFcolor PICTEX \
+PPCHTEX PPCHTeX PRAGMA PiCTeX PointsToBigPoints \
+PointsToReal PointsToWholeBigPoints PtToCm ReadFile ScaledPointsToBigPoints \
+ScaledPointsToWholeBigPoints Smallcapped TABLE TEX TaBlE \
+TeX TheNormalizedFontSize TransparencyHack VerboseNumber WidthSpanningText \
+XETEX XeTeX ZIDINSAPTAMANA abbreviation abjadnaivenumerals \
+abjadnodotnumerals abjadnumerals activatespacehandler acute adaptcollector \
+adapteazaaspect adaptpapersize addfeature addfeature addtoJSpreamble \
+addtocommalist addvalue adubuffer adumarcaje afiseazaaspect \
+afiseazaculoare afiseazafonttext afiseazagrid afiseazagrupculoare afiseazamakeup \
+afiseazamediufonttext afiseazapaleta afiseazarama afiseazasetari afiseazasetsimboluri \
+afiseazastruts afiseazatiparire aftersplitstring aftertestandsplitstring alignbottom \
+aligned alignedbox alignedline alignmentcharacter aliniatcentru \
+aliniatdreapta aliniatstanga allinputpaths alphabeticnumerals alwayscitation \
+alwayscitation alwayscitation alwayscite alwayscite alwayscite \
+ampersand anchor appendetoks appendgvalue appendtocommalist \
+appendtoks appendtoksonce appendvalue apply applyalternativestyle \
+applyprocessor applytocharacters applytofirstcharacter applytosplitstringchar applytosplitstringcharspaced \
+applytosplitstringline applytosplitstringlinespaced applytosplitstringword applytosplitstringwordspaced applytowords \
+arabicdecimals arabicexnumerals arabicnumerals arg asciistr \
+ascundeblocuri assignalfadimension assigndimen assigndimension assignifempty \
+assigntranslation assignvalue assignwidth assumelongusagecs astype \
+atleftmargin atrightmargin attachment autocap autodirhbox \
+autodirvbox autodirvtop autoinsertnextspace automathematics autosetups \
+availablehsize averagecharwidth backgroundimage backgroundimagefill backgroundline \
+bar baraculoare barainteractiune basegrid baselinebottom \
+baselineleftbox baselinemiddlebox baselinerightbox bbox beforesplitstring \
+beforetestandsplitstring big bigbodyfont bigg bigger \
+biggl biggm biggr bigl bigm \
+bigr bigskip binom bitmapimage blanc \
+blap bleed bleedheight bleedwidth blockquote \
+bodyfontenvironmentlist bodyfontsize bold boldface bolditalic \
+boldslanted booleanmodevalue bottombox bottomleftbox bottomrightbox \
+boxcursor boxmarker boxofsize boxreference bpos \
+breve bthiddencitation btxabbreviatedjournal btxaddjournal btxalwayscitation \
+btxalwayscitation btxalwayscitation btxauthorfield btxdetail btxdirect \
+btxdoif btxdoifcombiinlistelse btxdoifelse btxdoifelsecombiinlist btxdoifelsesameasprevious \
+btxdoifelsesameaspreviouschecked btxdoifelseuservariable btxdoifnot btxdoifsameaspreviouscheckedelse btxdoifsameaspreviouselse \
+btxdoifuservariableelse btxexpandedjournal btxfield btxfieldname btxfieldtype \
+btxfirstofrange btxflush btxflushauthor btxflushauthorinverted btxflushauthorinvertedshort \
+btxflushauthorname btxflushauthornormal btxflushauthornormalshort btxflushsuffix btxfoundname \
+btxfoundtype btxhybridcite btxhybridcite btxhybridcite btxhybridcite \
+btxlabellanguage btxlabeltext btxlistcitation btxlistcitation btxlistcitation \
+btxloadjournalist btxoneorrange btxremapauthor btxsavejournalist btxsetup \
+btxsingularorplural btxsingularplural btxtextcitation btxtextcitation btxtextcitation \
+buildmathaccent buildtextaccent buildtextbottomcomma buildtextbottomdot buildtextcedilla \
+buildtextgrave buildtextmacron buildtextognek but but \
+butoaneinteractiune buton butonmeniu butonmeniu calligraphic \
+camel camp catcodetablename cbox centeraligned \
+centerbox centeredbox centeredlastline centerednextbox centerline \
+cfrac chapter chardescription charwidthlanguage check \
+checkcharacteralign checkedchar checkedfiller checkedstrippedcsname checkedstrippedcsname \
+checkinjector checknextindentation checknextinjector checkpage checkparameters \
+checkpreviousinjector checksoundtrack checktwopassdata chem chemical \
+chemicalbottext chemicalmidtext chemicalsymbol chemicaltext chemicaltoptext \
+chineseallnumerals chinesecapnumerals chinesenumerals citat citation \
+citation citation citation cite cite \
+cite cite clap classfont cldcommand \
+cldcontext cldloadfile cldprocessfile cleftarrow clip \
+cloneazacamp collect collectedtext collectexpanded coloana \
+colorcomponents colored colored columnbreak com \
+combinepages commalistelement commalistsentence commalistsize comment \
+comparagrupculoare comparapaleta comparedimension comparedimensioneps completeazanumarpagina \
+completebtxrendering completecontent completeindex completelist completelistofabbreviations \
+completelistofchemicals completelistoffigures completelistofgraphics completelistofintermezzi completelistoflogos \
+completelistofpublications completelistofsorts completelistofsynonyms completelistoftables completeregister \
+complexorsimple complexorsimple complexorsimpleempty complexorsimpleempty componenta \
+componenta composedcollector composedlayer compresult constantdimen \
+constantdimenargument constantemptyargument constantnumber constantnumberargument contentreference \
+continuednumber continueifinputfile convertargument convertcommand convertedcounter \
+converteddimen convertedsubcounter convertestenumar convertmonth convertvalue \
+convertvboxtohbox copiazacamp copybtxlabeltext copyheadtext copylabeltext \
+copymathlabeltext copyoperatortext copypages copyparameters copyposition \
+copyprefixtext copytaglabeltext copyunittext corecteazaspatiualb countersubs \
+counttoken counttokens cramped crampedclap crampedllap \
+crampedrlap crightarrow crightoverleftarrow ctop ctxcommand \
+ctxdirectcommand ctxdirectlua ctxfunction ctxlatecommand ctxlatelua \
+ctxloadluafile ctxlua ctxluabuffer ctxluacode ctxreport \
+ctxsprint culoare culoaregri currentassignmentlistkey currentassignmentlistvalue \
+currentbtxuservariable currentcommalistitem currentcomponent currentenvironment currentfeaturetest \
+currentinterface currentlanguage currentlistentrydestinationattribute currentlistentrylimitedtext currentlistentrynumber \
+currentlistentrypagenumber currentlistentryreferenceattribute currentlistentrytitle currentlistentrytitlerendered currentlistsymbol \
+currentmainlanguage currentmessagetext currentmoduleparameter currentoutputstream currentproduct \
+currentproject currentregime currentregisterpageuserdata currentresponses currenttime \
+currentvalue currentxtablecolumn currentxtablerow cuvantdreapta cuvantmarginal \
+d data datacurenta datasetvariable dayoftheweek \
+dayspermonth dbinom ddot decrement decrement \
+decrementcounter decrementedcounter decrementpagenumber decrementsubpagenumber decrementvalue \
+defaultinterface defaultobjectpage defaultobjectreference defcatcodecommand defconvertedargument \
+defconvertedcommand defconvertedvalue defineMPinstance defineTABLEsetup defineactivecharacter \
+definealternativestyle defineanchor defineattachment defineattribute definebackground \
+definebar definebodyfontswitch definebreakpoint definebreakpoints definebtx \
+definebtxdataset definebtxregister definebtxrendering definebutton definecapitals \
+definecharacterkerning definecharacterspacing definechemical definechemicals definechemicalsymbol \
+definecollector definecolumnbreak definecombination definecomment definecomplexorsimple \
+definecomplexorsimple definecomplexorsimpleempty definecomplexorsimpleempty defineconversionset definecounter \
+definedataset definedelimitedtext definedfont defineeffect defineenumerations \
+defineexpandable defineexternalfigure definefallbackfamily definefallbackfamily definefieldbody \
+definefieldbodyset definefieldcategory definefileconstant definefilefallback definefilesynonym \
+definefiller definefirstline definefittingpage definefontalternative definefontfallback \
+definefontfamily definefontfamily definefontfamilypreset definefontfamilypreset definefontfeature \
+definefontfile definefontsize definefontsolution defineformula defineformulaalternative \
+defineframedcontent definefrozenfont defineglobalcolor defineglobalcolor definegraphictypesynonym \
+definegridsnapping defineheadalternative definehelp definehigh definehighlight \
+definehspace definehypenationfeatures defineindentedtext defineindenting defineinitial \
+defineinsertion defineinteraction defineinteractionbar defineinterfaceconstant defineinterfaceelement \
+defineinterfacevariable defineinterlinespace defineinterlinespace defineintermediatecolor defineitemgroup \
+defineitems definelabelclass definelayer definelayerpreset definelayerpreset \
+definelayout definelinenote definelinenumbering definelines definelistalternative \
+definelistextra definelow definelowhigh definelowmidhigh definemarginblock \
+definemargindata definemarker definemathaccent definemathalignment definemathcases \
+definemathcommand definemathdoubleextensible definemathematics definemathextensible definemathfence \
+definemathfraction definemathframed definemathmatrix definemathornament definemathoverextensible \
+definemathovertextextensible definemathradical definemathstackers definemathstyle definemathtriplet \
+definemathunderextensible definemathundertextextensible definemathunstacked definemeasure definemessageconstant \
+definemixedcolumns definemode definemultitonecolor definenamedcolor definenamedcolor \
+definenamespace definenarrower definenote defineornament defineornament \
+defineoutputroutine defineoutputroutinecommand definepage definepagebreak definepagechecker \
+definepagegrid definepagegridarea definepagegridspan definepageinjection definepageinjectionalternative \
+definepageshift definepagestate definepairedbox defineparagraph defineparallel \
+defineparbuilder defineplacement definepositioning defineprefixset defineprocesscolor \
+defineprocessor definepushbutton definepushsymbol definerenderingwindow defineresetset \
+definescale definescript definesectionlevels defineselector defineseparatorset \
+defineshift definesidebar definesort definespotcolor defineste \
+definesteaccent definesteantet definestebloc definesteblocsectiune definestebuffer \
+definestecamp definestecaracter definestecomanda definesteconversie definesteconversie \
+definesteculoare definesteculoare definestedescriere definestedimensiunehartie definestedimensiunehartie \
+definesteeticheta definestefloat definestefloat definestefont definestefont \
+definestefonttext definestefonttext definesteformatreferinte definestegrupculori definestehbox \
+definesteinconjurare definestelista definestelistacombinata definestemakeup definestemarcaje \
+definestemediulfonttext definestemeniuinteractiune definesteoverlay definestepaleta definestepaleta \
+definesteparagraf definesteprofil definesteprogram definestereferinte definesteregistru \
+definestesablontabel definestesectiune definestesimbol definestesimbolfigura definestesinonim \
+definestesinonimfont definestesortare definestestartstop definestestil definestestilfont \
+definestestivacampuri definestesubcamp definestetabulatori definestetext definestetextinconjurat \
+definestetyping definestyleinstance definesubformula definesynonym definesystemattribute \
+definesystemconstant definesystemvariable definetabulation definetextbackground definetextflow \
+definetooltip definetransparency definetwopasslist definetype definetypeface \
+definetypescriptprefix definetypescriptsynonym definetypesetting defineunit defineviewerlayer \
+definevspace definevspacing definevspacingamount definextable delimited \
+delimitedtext depthofstring depthonlybox depthspanningtext despre \
+determinacaracteristicilelistei determinacaracteristiciregistru determinanumartitlu determinenoflines devanagarinumerals \
+dfrac digits digits dimensiontocount din \
+directcolor directcolored directcolored directconvertedcounter directdummyparameter \
+directgetboxllx directgetboxlly directhighlight directlocalframed directluacode \
+directselect directsetbar directsetup directsymbol directvspacing \
+dis disabledirectives disableexperiments disablemode disableoutputstream \
+disableparpositions disableregime disabletrackers displaymath displaymathematics \
+displaymessage distributedhsize dividedsize doadaptleftskip doadaptrightskip \
+doaddfeature doassign doassignempty doboundtext docheckassignment \
+docheckedpagestate docheckedpair documentvariable dodoubleargument dodoubleargumentwithset \
+dodoubleempty dodoubleemptywithset dodoublegroupempty doeassign doexpandedrecurse \
+dogetattribute dogetattributeid dogetcommacommandelement dogobbledoubleempty dogobblesingleempty \
+doif doifMPgraphicelse doifallcommon doifallcommonelse doifalldefinedelse \
+doifallmodes doifallmodeselse doifassignmentelse doifblackelse doifbothsides \
+doifbothsidesoverruled doifboxelse doifbufferelse doifcolor doifcolorelse \
+doifcommandhandler doifcommandhandlerelse doifcommon doifcommonelse doifcontent \
+doifconversiondefinedelse doifconversionnumberelse doifcounter doifcounterelse doifcurrentfonthasfeatureelse \
+doifdefined doifdefinedcounter doifdefinedcounterelse doifdefinedelse doifdimensionelse \
+doifdimenstringelse doifdocumentargument doifdocumentargumentelse doifdocumentfilename doifdocumentfilenameelse \
+doifdrawingblackelse doifelse doifelseMPgraphic doifelseallcommon doifelsealldefined \
+doifelseallmodes doifelseassignment doifelseblack doifelsebox doifelsebuffer \
+doifelsecolor doifelsecommandhandler doifelsecommon doifelseconversiondefined doifelseconversionnumber \
+doifelsecounter doifelsecurrentfonthasfeature doifelsecurrentsortingused doifelsecurrentsynonymshown doifelsecurrentsynonymused \
+doifelsedefined doifelsedefinedcounter doifelsedimension doifelsedimenstring doifelsedocumentargument \
+doifelsedocumentfilename doifelsedrawingblack doifelseempty doifelseemptyvalue doifelseemptyvariable \
+doifelseenv doifelsefastoptionalcheck doifelsefastoptionalcheckcs doifelsefieldbody doifelsefieldcategory \
+doifelsefigure doifelsefile doifelsefiledefined doifelsefileexists doifelsefirstchar \
+doifelseflagged doifelsefontchar doifelsefontpresent doifelsefontsynonym doifelsehasspace \
+doifelsehelp doifelseincsname doifelseinelement doifelseinputfile doifelseinsertion \
+doifelseinset doifelseinstring doifelseinsymbolset doifelseintoks doifelseintwopassdata \
+doifelseitalic doifelselanguage doifelselayerdata doifelselayoutdefined doifelselayoutsomeline \
+doifelselayouttextline doifelseleapyear doifelselist doifelselocation doifelselocfile \
+doifelsemainfloatbody doifelsemarking doifelsemeaning doifelsemessage doifelsemode \
+doifelsenextbgroup doifelsenextbgroupcs doifelsenextchar doifelsenextoptional doifelsenextoptionalcs \
+doifelsenextparenthesis doifelsenonzeropositive doifelsenoteonsamepage doifelsenothing doifelsenumber \
+doifelseobjectfound doifelseobjectreferencefound doifelseoddpage doifelseoddpagefloat doifelseoldercontext \
+doifelseolderversion doifelseoverlapping doifelseoverlay doifelseparallel doifelseparentfile \
+doifelsepath doifelsepathexists doifelsepatterns doifelseposition doifelsepositionaction \
+doifelsepositiononpage doifelsepositionsonsamepage doifelsepositionsonthispage doifelsepositionsused doifelsereferencefound \
+doifelserightpagefloat doifelserighttoleftinbox doifelsesamelinereference doifelsesamestring doifelsesetups \
+doifelsesomebackground doifelsesomespace doifelsesomething doifelsesometoks doifelsestringinstring \
+doifelsestructurelisthasnumber doifelsestructurelisthaspage doifelsesymboldefined doifelsesymbolset doifelsetext \
+doifelsetextflow doifelsetextflowcollector doifelsetypingfile doifelseundefined doifelseurldefined \
+doifelsevalue doifelsevaluenothing doifelsevariable doifempty doifemptyelse \
+doifemptytoks doifemptyvalue doifemptyvalueelse doifemptyvariable doifemptyvariableelse \
+doifenv doifenvelse doiffastoptionalcheckcselse doiffastoptionalcheckelse doiffieldbodyelse \
+doiffieldcategoryelse doiffigureelse doiffile doiffiledefinedelse doiffileelse \
+doiffileexistselse doiffirstcharelse doifflaggedelse doiffontcharelse doiffontpresentelse \
+doiffontsynonymelse doifhasspaceelse doifhelpelse doifincsnameelse doifinelementelse \
+doifinputfileelse doifinsertionelse doifinset doifinsetelse doifinstring \
+doifinstringelse doifinsymbolset doifinsymbolsetelse doifintokselse doifintwopassdataelse \
+doifitalicelse doiflanguageelse doiflayerdataelse doiflayoutdefinedelse doiflayoutsomelineelse \
+doiflayouttextlineelse doifleapyearelse doiflistelse doiflocationelse doiflocfileelse \
+doifmainfloatbodyelse doifmarkingelse doifmeaningelse doifmessageelse doifmode \
+doifmodeelse doifnextbgroupcselse doifnextbgroupelse doifnextcharelse doifnextoptionalcselse \
+doifnextoptionalelse doifnextparenthesiselse doifnonzeropositiveelse doifnot doifnotallcommon \
+doifnotallmodes doifnotcommandhandler doifnotcommon doifnotcounter doifnotdocumentargument \
+doifnotdocumentfilename doifnotempty doifnotemptyvalue doifnotemptyvariable doifnotenv \
+doifnoteonsamepageelse doifnotescollected doifnotfile doifnotflagged doifnothing \
+doifnothingelse doifnotinset doifnotinsidesplitfloat doifnotinstring doifnotmode \
+doifnotnumber doifnotsamestring doifnotsetups doifnotvalue doifnotvariable \
+doifnumber doifnumberelse doifobjectfoundelse doifobjectreferencefoundelse doifoddpageelse \
+doifoddpagefloatelse doifoldercontextelse doifolderversionelse doifoverlappingelse doifoverlayelse \
+doifparallelelse doifparentfileelse doifpathelse doifpathexistselse doifpatternselse \
+doifposition doifpositionaction doifpositionactionelse doifpositionelse doifpositiononpageelse \
+doifpositionsonsamepageelse doifpositionsonthispageelse doifpositionsusedelse doifreferencefoundelse doifrightpagefloatelse \
+doifrighttoleftinboxelse doifsamelinereferenceelse doifsamestring doifsamestringelse doifsetups \
+doifsetupselse doifsomebackground doifsomebackgroundelse doifsomespaceelse doifsomething \
+doifsomethingelse doifsometoks doifsometokselse doifstringinstringelse doifstructurelisthasnumberelse \
+doifstructurelisthaspageelse doifsymboldefinedelse doifsymbolsetelse doiftext doiftextelse \
+doiftextflowcollectorelse doiftextflowelse doiftypingfileelse doifundefined doifundefinedcounter \
+doifundefinedelse doifurldefinedelse doifvalue doifvalueelse doifvaluenothing \
+doifvaluenothingelse doifvaluesomething doifvariable doifvariableelse doindentation \
+dollar doloop doloopoverlist donothing dontconvertfont \
+dontleavehmode dontpermitspacesbetweengroups dopositionaction doprocesslocalsetups doquadrupleargument \
+doquadrupleempty doquadruplegroupempty doquintupleargument doquintupleempty doquintuplegroupempty \
+dorechecknextindentation dorecurse dorecurse dorepeatwithcommand doreplacefeature \
+doresetandafffeature doresetattribute dorotatebox dosetattribute dosetleftskipadaption \
+dosetrightskipadaption dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace dosetupcheckedinterlinespace \
+dosetupcheckedinterlinespace dosetupcheckedinterlinespace doseventupleargument doseventupleempty dosingleargument \
+dosingleempty dosinglegroupempty dosixtupleargument dosixtupleempty dostepwiserecurse \
+dosubtractfeature dot dotfskip dotoks dotripleargument \
+dotripleargumentwithset dotripleempty dotripleemptywithset dotriplegroupempty doublebar \
+doublebond doublebrace doublebracket doubleparent dowith \
+dowithnextbox dowithnextboxcontent dowithnextboxcontentcs dowithnextboxcs dowithpargument \
+dowithrange dowithwargument dpofstring dummydigit dummyparameter \
+dute dutebox dutepagina eTeX ecran \
+edefconvertedargument efcmaxheight efcmaxwidth efcminheight efcminwidth \
+efcparameter effect el elapsedseconds elapsedtime \
+eleftarrowfill eleftharpoondownfill eleftharpoonupfill eleftrightarrowfill element \
+element emphasisboldface emphasistypeface emptylines emspace \
+enabledirectives enableexperiments enablemode enableoutputstream enableparpositions \
+enableregime enabletrackers endnote endnote enskip \
+enspace env envvar eoverbarfill eoverbracefill \
+eoverbracketfill eoverparentfill epos equaldigits erightarrowfill \
+erightharpoondownfill erightharpoonupfill ethiopic etwoheadrightarrowfill eunderbarfill \
+eunderbracefill eunderbracketfill eunderparentfill executeifdefined exitloop \
+exitloopnow expandcheckedcsname expanded expandfontsynonym externalfigurecollectionmaxheight \
+externalfigurecollectionmaxwidth externalfigurecollectionminheight externalfigurecollectionminwidth externalfigurecollectionparameter fakebox \
+faraliniiantetsisubsol faraliniisussijos faraspatiu fastdecrement fastincrement \
+fastlocalframed fastscale fastsetup fastsetupwithargument fastsetupwithargumentswapped \
+fastswitchtobodyfont fastsxsy feature feature fence \
+fenced fetchallmarkings fetchallmarks fetchmark fetchmarking \
+fetchonemark fetchonemarking fetchruntinecommand fetchtwomarkings fetchtwomarks \
+fieldbody fifthoffivearguments fifthofsixarguments figuraexterna figurefilename \
+figurefilepath figurefiletype figurefullname figureheight figurenaturalheight \
+figurenaturalwidth figuresymbol figurewidth filename filledhboxb \
+filledhboxc filledhboxg filledhboxk filledhboxm filledhboxr \
+filledhboxy filler filterfromnext filterfromvalue filterpages \
+filterreference findtwopassdata finishregisterentry firdepar firstcharacter \
+firstcounter firstcountervalue firstoffivearguments firstoffourarguments firstofoneargument \
+firstofoneunexpanded firstofsixarguments firstofthreearguments firstofthreeunexpanded firstoftwoarguments \
+firstoftwounexpanded firstrealpage firstrealpagenumber firstsubcountervalue firstsubpage \
+firstsubpagenumber firstuserpage firstuserpagenumber fitfieldframed fittopbaselinegrid \
+flag floatuserdataparameter flushcollector flushlayer flushlocalfloats \
+flushnextbox flushnotes flushoutputstream flushshapebox flushtextflow \
+flushtokens flushtoks folosesteURL folosestebloc folosestedirector \
+folosestedocumentextern folosestefiguraexterna folosestemodul folosestemuzicaexterna folosestescriptJS \
+folosestesimboluri folosesteurl fontalternative fontbody fontchar \
+fontcharbyindex fontclass fontclassname fontface fontfeaturelist \
+fontsize fontstyle footnotetext footnotetext forcecharacterstripping \
+forcelocalfloats forgeteverypar forgetparameters forgetragged formula \
+foundbox fourthoffivearguments fourthoffourarguments fourthofsixarguments frac \
+framed frameddimension framedparameter framedtext freezedimenmacro \
+freezemeasure frenchspacing fromlinenote frozenhbox fundal \
+gdefconvertedargument gdefconvertedcommand getMPdrawing getMPlayer getboxllx \
+getboxlly getbufferdata getcommacommandsize getcommalistsize getdayoftheweek \
+getdayspermonth getdefinedbuffer getdocumentargument getdocumentargumentdefault getdocumentfilename \
+getdummyparameters getemptyparameters geteparameters getexpandedparameters getfiguredimensions \
+getfirstcharacter getfirsttwopassdata getfromcommacommand getfromcommalist getfromtwopassdata \
+getglyphdirect getglyphstyled getgparameters getlasttwopassdata getlocalfloat \
+getlocalfloats getmessage getnamedglyphdirect getnamedglyphstyled getnamedtwopassdatalist \
+getnaturaldimensions getnoflines getobject getobjectdimensions getpaletsize \
+getparameters getrandomcount getrandomdimen getrandomfloat getrandomnumber \
+getrandomseed getraweparameters getrawgparameters getrawnoflines getrawparameters \
+getrawxparameters getreference getreferenceentry getroundednoflines getsubstring \
+gettwopassdata gettwopassdatalist getuvalue getvalue getvariable \
+getvariabledefault getxparameters globaldisablemode globalenablemode globalletempty \
+globalpopbox globalpopmacro globalpreventmode globalprocesscommalist globalpushbox \
+globalpushmacro globalswapcounts globalswapdimens globalswapmacros globalundefine \
+glyphfontfile gobbledoubleempty gobbleeightarguments gobblefivearguments gobblefiveoptionals \
+gobblefourarguments gobblefouroptionals gobbleninearguments gobbleoneargument gobbleoneoptional \
+gobblesevenarguments gobblesingleempty gobblesixarguments gobblespacetokens gobbletenarguments \
+gobblethreearguments gobblethreeoptionals gobbletwoarguments gobbletwooptionals gobbleuntil \
+gobbleuntilrelax got grabbufferdata grabbufferdatadirect grabuntil \
+grave grayvalue greedysplitstring greeknumerals grid \
+grosimelinie groupedcommand gsetboxllx gsetboxlly gujaratinumerals \
+gurmurkhinumerals hairspace halfwaybox handletokens handwritten \
+hangul hanzi hash hat hboxofvbox \
+hboxreference hdofstring headhbox headlanguage headnumbercontent \
+headnumberdistance headnumberwidth headreferenceattributes headsym headtextcontent \
+headtexts headtextwidth headvbox headwidth heightanddepthofstring \
+heightofstring heightspanningtext helptext hglue hiddencitation \
+hiddencite highlight highordinalstr hilo himilo \
+hl horizontalgrowingbar horizontalpositionbar hphantom hpos \
+hsizefraction hsmash hsmashbox hsmashed hspace \
+htdpofstring htofstring hyphen hyphenatedcoloredword hyphenatedfile \
+hyphenatedfilename hyphenatedhbox hyphenatedpar hyphenatedurl hyphenatedword \
+ibox ifassignment iff ifinobject ifinoutputstream \
+ifparameters iftrialtypesetting ignoreimplicitspaces ignorevalue immediatesavetwopassdata \
+impartefloat impliedby implies in inalt \
+includemenu includeversioninfo increment increment increment \
+increment incrementcounter incrementedcounter incrementpagenumber incrementsubpagenumber \
+incrementvalue indentation index index indreapta \
+infofont infofontbold inframed inheritparameter inhibitblank \
+ininner ininneredge ininnermargin initializeboxstack injos \
+inlinebuffer inlinedbox inlinemath inlinemathematics inlinemessage \
+inlineordisplaymath inlinerange inlinie inmaframed inmargineadreapta \
+inmargineastanga innerflushshapebox inother inouter inouteredge \
+inoutermargin inparteadreapta inparteastanga input input \
+inputfilebarename inputfilename inputfilerealsuffix inputfilesuffix inputgivenfile \
+insertpages instalarelimba instalarelimba installactionhandler installactivecharacter \
+installanddefineactivecharacter installattributestack installautocommandhandler installautosetuphandler installbasicautosetuphandler \
+installbasicparameterhandler installbottomframerenderer installcommandhandler installcorenamespace installdefinehandler \
+installdefinitionset installdefinitionsetmember installdirectcommandhandler installdirectparameterhandler installdirectparametersethandler \
+installdirectsetuphandler installdirectstyleandcolorhandler installframedautocommandhandler installframedcommandhandler installleftframerenderer \
+installnamespace installoutputroutine installpagearrangement installparameterhandler installparameterhashhandler \
+installparametersethandler installparentinjector installrightframerenderer installrootparameterhandler installsetuphandler \
+installsetuponlycommandhandler installshipoutmethod installsimplecommandhandler installsimpleframedcommandhandler installstyleandcolorhandler \
+installswitchcommandhandler installswitchsetuphandler installtexdirective installtextracker installtopframerenderer \
+installunitsseparator installunitsspace installversioninfo instanga integerrounding \
+intertext intins invokepageheandler istltdir istrtdir \
+italic italicbold italiccorrection itemtag itm \
+jobfilename jobfilesuffix jos jossus kap \
+kap keeplinestogether keepunwantedspaces kerncharacters koreancirclenumerals \
+koreannumerals koreannumeralsc koreannumeralsp koreanparentnumerals la \
+labellanguage labeltexts languageCharacters languagecharacters languagecharwidth \
+lapagina lastcounter lastcountervalue lastdigit lastnaturalboxdp \
+lastnaturalboxht lastnaturalboxwd lastpredefinedsymbol lastrealpage lastrealpagenumber \
+lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits lastuserpage \
+lastuserpagenumber lateluacode latin layeredtext layerheight \
+layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbox left \
+leftbottombox leftbox lefthbox leftheadtext leftlabeltext \
+leftline leftmathlabeltext leftorrighthbox leftorrightvbox leftorrightvtop \
+leftskipadaption leftsubguillemot lefttopbox lefttoright lefttorighthbox \
+lefttorightvbox lefttorightvtop letbeundefined letcatcodecommand letcscsname \
+letcsnamecs letcsnamecsname letdummyparameter letempty letgvalue \
+letgvalueempty letgvalurelax letterampersand letterat letterbackslash \
+letterbar letterbgroup letterclosebrace lettercolon letterdollar \
+letterdoublequote letteregroup letterescape letterexclamationmark letterhash \
+letterhat letterleftbrace letterless lettermore letteropenbrace \
+letterpercent letterquestionmark letterrightbrace lettersinglequote letterslash \
+letterspacing lettertilde letterunderscore letvalue letvalueempty \
+letvaluerelax lfence lhbox limba limbaprincipala \
+limitatelines limitatetext limitatetext limtatefirstline line \
+linenote linespanningtext linieneagra liniesubtire linieumplere \
+liniinegre liniisubtiri listcitation listcitation listcitation \
+listcite listcite listcite listnamespaces litera \
+litere llap loadanyfile loadanyfileonce loadbtxdefinitionfile \
+loadbtxreplacementfile loadcldfile loadcldfileonce loadfontgoodies loadluafile \
+loadluafileonce loadspellchecklist loadtexfile loadtexfileonce loadtypescriptfile \
+localframed localframedwithsettings localhsize localpopbox localpopmacro \
+localpushbox localpushmacro localundefine locatedfilepath locatefilepath \
+locfilename logo lomihi lowerbox lowercased \
+lowercasestring lowerleftdoubleninequote lowerleftsingleninequote lowerrightdoubleninequote lowerrightsingleninequote \
+lrtbbox ltop luaTeX luacode luaconditional \
+luaenvironment luaexpanded luafunction luajitTeX luamajorversion \
+luaminorversion luaparameterset luasetup luaversion luna \
+lungimelista m mLeftarrow mLeftrightarrow mRightarrow \
+maframed makecharacteractive makerawcommalist makestrutofbox mapfontsize \
+mar marcaje marginal margindata markcontent \
+markinjector mat matematica math mathbf \
+mathbi mathblackboard mathbs mathcommand mathdefault \
+mathfraktur mathfunction mathit mathlabellanguage mathlabeltext \
+mathlabeltexts mathop mathrm mathscript mathsl \
+mathss mathtext mathtextbf mathtextbi mathtextbs \
+mathtextit mathtextsl mathtexttf mathtf mathtriplet \
+mathtt mathupright mathword mathwordbf mathwordbi \
+mathwordbs mathwordit mathwordsl mathwordtf maxaligned \
+mbox mcframed measure measured mediu \
+mediu medskip medspace meniuinteractiune mequal \
+message metaTeX mfence mfunction mfunctionlabeltext \
+mhbox mhookleftarrow mhookrightarrow middle middlealigned \
+middlebox midhbox minicitat minimalhbox mixedcaps \
+mkvibuffer mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow \
+mleftrightharpoons mmapsto moduleparameter molecule mono \
+monobold monobold mononormal monthlong monthshort \
+mprandomnumber mrel mrightarrow mrightharpoondown mrightharpoonup \
+mrightleftharpoons mrightoverleftarrow mtext mtriplerel mtwoheadleftarrow \
+mtwoheadrightarrow namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable \
+namedtaggedlabeltexts naturalhbox naturalhpack naturalvbox naturalvcenter \
+naturalvpack naturalvtop naturalwd necunoscut negatecolorbox \
+negated negthinspace newattribute newcatcodetable newcounter \
+newevery newfrenchspacing newmode newsignal newsystemmode \
+nextbox nextboxdp nextboxht nextboxhtdp nextboxwd \
+nextcounter nextcountervalue nextdepth nextparagraphs nextrealpage \
+nextrealpagenumber nextsubcountervalue nextsubpage nextsubpagenumber nextuserpage \
+nextuserpagenumber nihongo nocitation nocitation nocite \
+nocite nodetostring noffigurepages noflines noflocalfloats \
+noindentation nokap nonfrenchspacing nonmathematics nop \
+nop normal normalboldface normalframedwithsettings normalizebodyfontsize \
+normalizedfontsize normalizefontdepth normalizefontheight normalizefontline normalizefontwidth \
+normalizetextdepth normalizetextheight normalizetextline normalizetextwidth normaltypeface \
+nota notasubsol notasubsol notesymbol notragged \
+ntimes numarformula numarpagina numartitlu numartitlucurent \
+numberofpoints numere numereromane obeydepth objectdepth \
+objectheight objectmargin objectwidth obox offset \
+offsetbox olinie onedigitrounding operatorlanguage operatortext \
+ordinaldaynumber ordinalstr ornamenttext ornamenttext ornamenttext \
+outputfilename outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy \
+over overbar overbar overbars overbartext \
+overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \
+overbrackettext overbracketunderbracket overlaybutton overlaybutton overlaycolor \
+overlaydepth overlayfigure overlayheight overlaylinecolor overlaylinewidth \
+overlayoffset overlayrollbutton overlaywidth overleftarrow overleftharpoondown \
+overleftharpoonup overleftrightarrow overloaderror overparent overparenttext \
+overparentunderparent overrightarrow overrightharpoondown overrightharpoonup overset \
+overstrike overstrikes overtwoheadleftarrow overtwoheadrightarrow pagearea \
+pagebreak pagefigure pagegridspanwidth pageinjection pageinjection \
+pagestaterealpage pagina paletsize part pastreazablocuri \
+pdfTeX pdfactualtext pdfbackendactualtext pdfbackendcurrentresources pdfbackendsetcatalog \
+pdfbackendsetcolorspace pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname pdfbackendsetpageattribute \
+pdfbackendsetpageresource pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade pdfcolor \
+pdfeTeX pelung percent percentdimen permitcaretescape \
+permitcircumflexescape permitspacesbetweengroups persiandecimals persiannumerals phantom \
+phantombox pickupgroupedcommand placeattachments placebtxrendering placechemical \
+placecitation placecomments placecontent placecurrentformulanumber placedbox \
+placefigure placefloat placefloatwithsetups placeframed placegraphic \
+placeheadnumber placeheadtext placehelp placeindex placeinitial \
+placeintermezzo placelayer placelayeredtext placelistofabbreviations placelistofchemicals \
+placelistoffigures placelistofgraphics placelistofintermezzi placelistoflogos placelistofpublications \
+placelistofsorts placelistofsynonyms placelistoftables placelocalnotes placement \
+placenamedfloat placenamedformula placenotes placepairedbox placeparallel \
+placerawlist placerenderingwindow placetable plaseazapegrid plaseazapegrid \
+plaseazasemnecarte popattribute popmacro popmode popsystemmode \
+positionoverlay positionregionoverlay postponenotes potrivestecamp pozitie \
+predefinedfont predefinefont predefinesymbol prefixedpagenumber prefixlanguage \
+prefixtext prependetoks prependgvalue prependtocommalist prependtoks \
+prependtoksonce prependvalue presetbtxlabeltext presetfieldsymbols presetheadtext \
+presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext presettaglabeltext \
+presetunittext pretocommalist prevcounter prevcountervalue preventmode \
+prevrealpage prevrealpagenumber prevsubcountervalue prevsubpage prevsubpagenumber \
+prevuserpage prevuserpagenumber procent proceseazabloc processMPbuffer \
+processMPfigurefile processaction processallactionsinset processassignlist processassignmentcommand \
+processassignmentlist processbetween processbodyfontenvironmentlist processcolorcomponents processcommacommand \
+processcommalist processcommalistwithparameters processcontent processfile processfilemany \
+processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \
+processlinetablebuffer processlinetablefile processlist processmonth processranges \
+processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \
+processyear produs produs profiledbox profilegivenbox \
+program proiect proiect pseudoMixedCapped pseudoSmallCapped \
+pseudoSmallcapped pseudosmallcapped psh puncte puncte \
punedeasuprafiecareia punefatainfata puneformula punelegenda punelista \
-punelistacombinata punelogouri punenotesubsol punenotesubsollocale punenumarpagina \
-puneregistru punerigla punesubformula punevariabilatext quotation \
-quote ran ref refa reference \
-referinta referintapagina referintatext referit referral \
-referraldate referring reflexie register remarca \
-reservefloat reset reseteazamarcaje resetmarking resetnumber \
-resettextcontent rightaligned riglatext rigleumplere romannumerals \
-rotate roteste saripesteblocuri scala scale \
-screen scriebuffer scrieinlista scrieinlistareferinte scrieinregistru \
-scrieintreliste section seeregister selectblocks selecteazablocuri \
-selecteazahartie selecteazaversiune selectpaper selectversion semncarte \
-setarebarasincronizare setareitemization setarelimba setareoutput setarepozitie \
-setaresincronizare seteazaaliniat seteazaalinierea seteazaantet seteazaaranjareapag \
-seteazaaspect seteazabarainteractiune seteazablanc seteazabloc seteazablocsectiune \
-seteazablocurimarginale seteazabuffer seteazabutoane seteazacamp seteazacampuri \
-seteazaclipping seteazacoloane seteazacombinari seteazacomentariu seteazacomentariupagina \
-seteazaculoare seteazaculori seteazadefinireanotasubsol seteazadescriere seteazadimensiunihartie \
-seteazaecrane seteazaecraninteractiune seteazaelemente seteazaenumerare seteazafiguriexterne \
-seteazafloat seteazafloats seteazafonttext seteazaformulare seteazaformule \
-seteazafundal seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat \
-seteazaingust seteazainteractiunea seteazajos seteazalegenda seteazalegendele \
+punelistacombinata punenotesubsol punenotesubsollocale punenumarpagina puneregistru \
+punesubformula purenumber pushattribute pushbutton pushmacro \
+pushmode pushoutputstream pushsystemmode qquad quad \
+quitcommalist quitprevcommalist quittypescriptscanning raggedbottom raggedcenter \
+raggedleft raggedright raggedwidecenter raisebox ran \
+randomizetext randomnumber raw rawcounter rawcountervalue \
+rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse rawgetparameters \
+rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable rawsubcountervalue \
+rbox readfile readfixfile readjobfile readlocfile \
+readsetfile readsysfile readtexfile readxmlfile realSmallCapped \
+realSmallcapped realpagenumber realsmallcapped recursedepth recurselevel \
+recursestring redoconvertfont ref referenceprefix referinta \
+referintapagina referintatext referring reflexie registerattachment \
+registerctxluafile registerexternalfigure registerfontclass registerhyphenationexception registerhyphenationpattern \
+registermenubuttons registersort registersynonym registerunit regular \
+relatemarking relateparameterhandlers relaxvalueifundefined remainingcharacters remarca \
+removebottomthings removedepth removefromcommalist removelastskip removelastspace \
+removemarkedcontent removepunctuation removesubstring removetoks removeunwantedspaces \
+replacefeature replacefeature replaceincommalist replaceword rescan \
+rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \
+resetandaddfeature resetandaddfeature resetbreakpoints resetbuffer resetcharacteralign \
+resetcharacterkerning resetcharacterspacing resetcharacterstripping resetcollector resetcounter \
+resetdigitsmanipulation resetdirection reseteazamarcaje resetfeature resetflag \
+resetfontcolorsheme resetfontfallback resetfontsolution resethyphenationfeatures resetinjector \
+resetinteractionmenu resetitaliccorrection resetlayer resetlocalfloats resetmarker \
+resetmode resetpagenumber resetparallel resetpath resetpenalties \
+resetprofile resetreference resetreplacement resetscript resetsetups \
+resetshownsynonyms resetsubpagenumber resetsymbolset resetsystemmode resettimer \
+resettrackers resettrialtypesetting resetusedsortings resetusedsynonyms resetuserpagenumber \
+resetvalue resetvisualizers reshapebox restartcounter restorebox \
+restorecatcodes restorecounter restorecurrentattributes restoreendofline restoreglobalbodyfont \
+reusableMPgraphic reuseMPgraphic reuserandomseed revivefeature rfence \
+rhbox right rightbottombox rightbox righthbox \
+rightheadtext rightlabeltext rightline rightmathlabeltext rightorleftpageaction \
+rightskipadaption rightsubguillemot righttoleft righttolefthbox righttoleftvbox \
+righttoleftvtop righttopbox riglatext rigleumplere rlap \
+rob robustaddtocommalist robustdoifelseinset robustdoifinsetelse robustpretocommalist \
+rollbutton rollbutton roman roteste rtop \
+rul ruledhbox ruledhpack ruledmbox ruledtopv \
+ruledtpack ruledvbox ruledvpack ruledvtop runMPbuffer \
+safechar sans sansbold sansnormal sansserif \
+savebox savebtxdataset savebuffer savebuffer savecounter \
+savecurrentattributes savenormalmeaning savetaggedtwopassdata savetwopassdata sbox \
+scala scriebuffer scrieinlista scrieintreliste secondoffivearguments \
+secondoffourarguments secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments \
+secondoftwounexpanded section seeindex select selecteazablocuri \
+semncarte serializecommalist serializedcommalist serif serifbold \
+serifnormal setJSpreamble setMPlayer setMPpositiongraphic setMPpositiongraphicrange \
+setMPtext setMPvariable setMPvariables setarelimba setarepozitie \
+setbar setbigbodyfont setboxllx setboxlly setbreakpoints \
+setcapstrut setcatcodetable setcharacteralign setcharactercasing setcharactercleaning \
+setcharacterkerning setcharacterspacing setcharacterstripping setcharstrut setcollector \
+setcolormodell setcounter setcounterown setcurrentfontclass setdataset \
+setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument setdocumentargumentdefault \
+setdocumentfilename setdummyparameter seteazaaliniat seteazaalinierea seteazaantet \
+seteazaaranjareapag seteazaaspect seteazaaspect seteazabarainteractiune seteazablanc \
+seteazabloc seteazablocsectiune seteazabuffer seteazacamp seteazacampuri \
+seteazaclipping seteazacoloane seteazacomentariu seteazacomentariupagina seteazaculoare \
+seteazaculori seteazadimensiunihartie seteazadimensiunihartie seteazaecraninteractiune seteazaelemente \
+seteazafloat seteazafonttext seteazaformulare seteazafundal seteazafundaluri \
+seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat seteazaingust \
+seteazainteractiunea seteazainteractiunea seteazajos seteazalegenda seteazalegenda \
seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine seteazaliniinegre \
-seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule \
-seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazameniuinteractiune \
-seteazaminicitat seteazanotasubsol seteazanumarpagina seteazanumarsubpagina seteazanumartitlu \
-seteazanumerotare seteazanumerotarelinii seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta \
-seteazaparagrafe seteazaplasareaopozita seteazapozitietext seteazaprofile seteazaprograme \
-seteazapublicatii seteazareferinte seteazaregistru seteazarigla seteazarigletext \
-seteazarigleumplere seteazarotare seteazasectiune seteazasimbol seteazasinonime \
-seteazasistem seteazasortare seteazaspatiu seteazaspatiualb seteazaspatiuinterliniar \
-seteazastrut seteazasublinie seteazasubsol seteazasus seteazatab \
-seteazatabele seteazatabulatori seteazatext seteazatexteantet seteazatextejos \
-seteazatextesubsol seteazatextesus seteazatextetext seteazatexteticheta seteazatexttitlu \
-seteazatitlu seteazatitluri seteazatoleranta seteazatranzitiepagina seteazatype \
-seteazatyping seteazaurl seteazavariabilatext seteazaversiuni setnumber \
-settextcontent setupalign setupanswerarea setuparranging setupbackground \
-setupbackgrounds setupblackrules setupblank setupblock setupbodyfont \
-setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer setupbuttons \
-setupcapitals setupcaption setupcaptions setupclipping setupcolor \
-setupcolors setupcolumns setupcolumnset setupcolumnsetlines setupcolumnsetstart \
-setupcombinations setupcombinedlist setupcomment setupdescriptions setupenumerations \
-setupexternalfigures setupfield setupfields setupfillinlines setupfillinrules \
-setupfloat setupfloats setupfloatsplitting setupfonthandling setupfontsynonym \
-setupfooter setupfootertexts setupfootnotedefinition setupfootnotes setupforms \
-setupformulas setupframed setupframedtexts setuphead setupheader \
-setupheadertexts setupheadnumber setupheads setupheadtext setuphyphenmark \
-setupindentedtext setupindenting setupinmargin setupinteraction setupinteractionbar \
-setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 setupitemgroup \
-setupitems setuplabeltext setuplanguage setuplayout setuplegend \
-setuplinenumbering setuplines setuplinewidth setuplist setuplistalternative \
-setupmakeup setupmarginblocks setupmarginrules setupmarking setupmathalignment \
-setupnarrower setupnumber setupnumbering setupoppositeplacing setupoutput \
-setuppagenumber setuppagenumbering setuppagetransitions setuppalet setuppaper \
-setuppapersize setupparagraphnumbering setupparagraphs setupplacement setuppositioning \
-setupprofiles setupprograms setuppublications setupquote setupreferencelist \
-setupreferencing setupregister setuprotate setupscreens setupsection \
-setupsectionblock setupsorting setupspacing setupstartstop setupstrut \
-setupsubpagenumber setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms \
-setupsystem setuptab setuptables setuptabulate setuptext \
-setuptextrules setuptexttexts setupthinrules setuptolerance setuptop \
-setuptoptexts setuptype setuptyping setupunderbar setupurl \
-setupversions setupwhitespace setvariabilatext showbodyfont showbodyfontenvironment \
-showcolor showcolorgroup showexternalfigures showfields showframe \
-showgrid showlayout showmakeup showpalet showprint \
-showsetups showstruts showsymbolset sim simbol \
-sincronizeaza someline somewhere sort space \
-spatiifixate spatiu spatiualb spatiufixat spatiujos \
-spatiuspate spatiusus splitfloat startalignment startaliniere \
-startbackground startblocmarginal startbuffer startcitat startcodificare \
-startcoloane startcolor startcolumnmakeup startcolumns startcolumnset \
-startcombinare startcombination startcomment startcomponent startcomponenta \
-startcorectielinie startculoare startdescription startdocument startenumeration \
-startenvironment startfact startfigura startfigure startfloattext \
-startformula startframedtext startfundal startglobal starthiding \
-startimpachetat startingust startinteractionmenu startitemgroup startlegend \
-startline startlinecorrection startlinenumbering startlines startlinie \
-startliniemargine startlinii startlocal startlocalenvironment startlocalfootnotes \
-startmakeup startmarginblock startmarginrule startmediu startnamemakeup \
-startnarrower startneimpachetat startnotesubsollocale startnumerotarelinii startopozit \
-startopposite startoverlay startoverview startpacked startparagraph \
-startpositioning startpostponing startpozitionare startproduct startprodus \
-startprofil startprofile startproiect startproject startquotation \
-startraster startregister startriglatext startsetsimboluri startsincronizare \
-startsymbolset startsynchronization starttabel starttabele starttable \
-starttables starttabulate starttext starttextrule starttyping \
-startunpacked startversion startversiune stivacampuri stopalignment \
-stopaliniere stopbackground stopblobal stopblocmarginal stopbuffer \
-stopcitat stopcodificare stopcoloane stopcolor stopcolumnmakeup \
-stopcolumns stopcolumnset stopcombinare stopcombination stopcomment \
-stopcomponent stopcomponenta stopcorectielinie stopculoare stopdescription \
-stopdocument stopenumeration stopenvironment stopfact stopfigure \
-stopfloattext stopformula stopframedtext stopfundal stophiding \
-stopimpachetat stopingust stopinteractionmenu stopitemgroup stoplegend \
-stopline stoplinecorrection stoplinenumbering stoplines stoplinie \
-stopliniemargine stoplinii stoplocal stoplocalenvironment stoplocalfootnotes \
-stopmakeup stopmarginblock stopmarginrule stopmediu stopnamemakeup \
-stopnarrower stopneimpachetat stopnotesubsollocale stopnumerotarelinii stopopozit \
-stopopposite stopoverlay stopoverview stoppacked stopparagraph \
-stoppositioning stoppostponing stoppozitionare stopproduct stopprodus \
-stopprofil stopprofile stopproiect stopproject stopquotation \
-stopraster stopriglatext stopsincronizare stopsymbolset stopsynchronization \
-stoptabel stoptabele stoptable stoptables stoptabulate \
-stoptext stoptextrule stoptyping stopunpacked stopversion \
-stopversiune stretched sub subject subpagenumber \
-subsection subsubject subsubsection subsubsubject switchtobodyfont \
-sym symbol synchronizationbar synchronize synonym \
-tab testcolumn testpage tex texteticheta \
-textmarginal textreference textrule texttitlu textumplere \
-thinrule thinrules title titlu titlumarginal \
-tooltip traduce translate trecilafontraw trecilafonttext \
-txt typ type typebuffer typefile \
-underbar underbars undeva urmeazaprofil urmeazaversiune \
-urmeazaversiuneprofil useURL useXMLfilter useblocks usecommands \
-usedirectory useencoding useexternaldocument useexternalfigure useexternalfile \
-useexternalfiles useexternalsoundtrack usemodule usereferences usespecials \
-usesymbols usetypescript usetypescriptfile valoareculoare valoaregri \
-variabilatext version versiune vl weekday \
-whitespace wordright writebetweenlist writetolist writetoreferencelist \
-writetoregister zidinsaptamana
+seteazaliniiumplere seteazalista seteazalistacombinata seteazamajuscule seteazamakeup \
+seteazamarcaje seteazameniuinteractiune seteazaminicitat seteazanumarpagina seteazanumarsubpagina \
+seteazanumartitlu seteazanumerotarelinii seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta \
+seteazaparagrafe seteazaparagrafe seteazaplasareaopozita seteazaprograme seteazareferinte \
+seteazaregistru seteazaregistru seteazarigletext seteazarigleumplere seteazarotare \
+seteazasimbol seteazasinonime seteazasortare seteazaspatiu seteazaspatiualb \
+seteazaspatiuinterliniar seteazaspatiuinterliniar seteazaspatiuinterliniar seteazaspatiuinterliniar seteazaspatiuinterliniar \
+seteazaspatiuinterliniar seteazasubsol seteazasus seteazatabele seteazatabulatori \
+seteazatext seteazatexteantet seteazatextejos seteazatextesubsol seteazatextesus \
+seteazatextetext seteazatexteticheta seteazatexttitlu seteazatitlu seteazatoleranta \
+seteazatranzitiepagina seteazatype seteazatyping seteazaurl setelementexporttag \
+setemeasure setevalue setevariable setevariables setfirstline \
+setflag setfont setfontcolorsheme setfontfeature setfontsolution \
+setfontstrut setgmeasure setgvalue setgvariable setgvariables \
+sethyphenatedurlafter sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial \
+setinjector setinteraction setinterfacecommand setinterfaceconstant setinterfaceelements \
+setinterfacemessage setinterfacevariable setinternalrendering setitaliccorrection setlayer \
+setlayerframed setlayerframed setlayertext setlocalhsize setmainbodyfont \
+setmainparbuilder setmarker setmarking setmathstyle setmeasure \
+setmessagetext setmode setnostrut setnote setnote \
+setnotetext setnotetext setobject setoldstyle setpagegrid \
+setpagereference setpagestate setpagestaterealpageno setpenalties setpercentdimen \
+setposition setpositionbox setpositiondata setpositiondataplus setpositiononly \
+setpositionplus setpositionstrut setprofile setrandomseed setreference \
+setreferencedobject setregisterentry setreplacement setrigidcolumnbalance setrigidcolumnhsize \
+setscript setsectionblock setsimplecolumnhsize setsmallbodyfont setsmallcaps \
+setstackbox setstructurepageregister setstrut setsuperiors setsystemmode \
+settabular settaggedmetadata settextcontent settightobject settightreferencedobject \
+settightunreferencedobject settrialtypesetting setuevalue setugvalue setunreferencedobject \
+setup setup setupMPgraphics setupMPinstance setupMPpage \
+setupMPvariables setupTABLE setupTEXpage setupattachment setupbackend \
+setupbar setupbleeding setupbookmark setupbtx setupbtx \
+setupbtxdataset setupbtxlabeltext setupbtxlist setupbtxregister setupbtxrendering \
+setupbutton setupcharacterkerning setupcharacterspacing setupchemical setupchemicalframed \
+setupcollector setupcolumnspan setupcombination setupcontent setupcounter \
+setupdataset setupdelimitedtext setupdescription setupdirections setupdocument \
+setupeffect setupenumeration setupenv setupexport setupexternalfigure \
+setupexternalsoundtracks setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed \
+setupfieldtotalframed setupfiller setupfirstline setupfittingpage setupfloatcaption \
+setupfontexpansion setupfontprotrusion setupfontsolution setupformula setupframedcontent \
+setupframedtext setupglobalreferenceprefix setupheadalternative setuphelp setuphigh \
+setuphighlight setuphyphenation setupindentedtext setupindex setupinitial \
+setupinsertion setupitaliccorrection setupitemgroup setupitemgroup setuplabel \
+setuplayer setuplayeredtext setuplayouttext setuplinenote setuplinetable \
+setuplistalternative setuplistextra setuplocalfloats setuplocalinterlinespace setuplocalinterlinespace \
+setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplocalinterlinespace setuplow \
+setuplowhigh setuplowmidhigh setupmarginblock setupmargindata setupmarginframed \
+setupmarginrule setupmathalignment setupmathcases setupmathematics setupmathfence \
+setupmathfraction setupmathframed setupmathlabeltext setupmathmatrix setupmathornament \
+setupmathradical setupmathstackers setupmathstyle setupmixedcolumns setupmodule \
+setupnotation setupnote setupoffset setupoffsetbox setupoperatortext \
+setupoutputroutine setupoutputroutine setuppagechecker setuppagegrid setuppagegridarea \
+setuppagegridareatext setuppagegridlines setuppagegridspan setuppagegridstart setuppageinjection \
+setuppageinjectionalternative setuppageshift setuppagestate setuppairedbox setuppaper \
+setupparagraph setupparagraphintro setupparallel setupperiods setupplacement \
+setuppositionbar setupprefixtext setupprocessor setupprofile setupquotation \
+setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix setuprenderingwindow \
+setups setups setupscale setupscript setupselector \
+setupshift setupsidebar setupspellchecking setupstartstop setupstretched \
+setupstruts setupstyle setupsubformula setuptabulation setuptagging \
+setuptaglabeltext setuptextbackground setuptextflow setuptooltip setupunit \
+setupunittext setupuserpagenumber setupversion setupviewerlayer setupvspacing \
+setupwithargument setupwithargumentswapped setupxml setupxtable setuvalue \
+setuxvalue setvalue setvariable setvariables setvisualizerfont \
+setwidthof setxmeasure setxvalue setxvariable setxvariables \
+sfrac shapedhbox shiftdown shiftup showallmakeup \
+showattributes showboxes showbtxdatasetauthors showbtxdatasetauthors showbtxdatasetcompleteness \
+showbtxdatasetcompleteness showbtxdatasetfields showbtxdatasetfields showbtxfields showbtxfields \
+showbtxhashedauthors showbtxtables showchardata showcharratio showcolorbar \
+showcolorcomponents showcolorset showcolorstruts showcounter showdirectives \
+showdirsinmargin showedebuginfo showexperiments showfont showfontdata \
+showfontkerns showfontparameters showfontstrip showfontstyle showglyphs \
+showgridsnapping showhelp showhyphenationtrace showhyphens showinjector \
+showjustification showkerning showlayoutcomponents showligature showligatures \
+showlogcategories showmargins showmessage showminimalbaseline shownextbox \
+showotfcomposition showparentchain showsetupsdefinition showtimer showtokens \
+showtrackers showvalue showvariable showwarning sim \
+simbol simbol simplealignedbox simplealignedboxplus simplealignedspreadbox \
+simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond \
+sixthofsixarguments slanted slantedbold slicepages slovenianNumerals \
+sloveniannumerals small smallbodyfont smallbold smallbolditalic \
+smallboldslanted smallcappedcharacters smallcappedromannumerals smaller smallitalicbold \
+smallnormal smallskip smallslanted smallslantedbold smalltype \
+smash smashbox smashboxed smashedhbox smashedvbox \
+snaptogrid snaptogrid someheadnumber somekindoftab somelocalfloat \
+somenamedheadnumber someplace spanishNumerals spanishnumerals spatiifixate \
+spatiu spatiufixat speech splitdfrac splitfilename \
+splitfrac splitoffbase splitofffull splitoffkind splitoffname \
+splitoffpath splitoffroot splitofftokens splitofftype splitstring \
+spreadhbox sqrt stackrel startJScode startJSpreamble \
+startLUA startLUA startMP startMP startMPclip \
+startMPcode startMPdefinitions startMPdrawing startMPdrawing startMPenvironment \
+startMPextensions startMPinclusions startMPinitializations startMPpage startMPpositiongraphic \
+startMPpositionmethod startMPrun startPARSEDXML startPARSEDXML startTABLE \
+startTABLE startTABLEbody startTABLEbody startTABLEfoot startTABLEfoot \
+startTABLEhead startTABLEhead startTABLEnext startTABLEnext startTC \
+startTD startTDs startTEX startTEX startTEXpage \
+startTH startTN startTR startTRs startTX \
+startTY startXML startXML startalign startalignment \
+startaliniatcentru startaliniatdreapta startaliniatstanga startallmodes startappendices \
+startarrangedpages startattachment startbackmatter startbar startbar \
+startbitmapimage startblockquote startbodymatter startboxedcolumns startbtxlabeltext \
+startbtxrenderingdefinitions startbuffer startbuffer startbut startcases \
+startcatcodetable startcatcodetable startcenteraligned startchapter startcharacteralign \
+startcheckedfences startchemical startcitat startcollect startcollecting \
+startcolorintent startcolorset startcolumns startcolumnspan startcom \
+startcombination startcombination startcomment startcomponenta startcomponenta \
+startcontextcode startcontextdefinitioncode startctxfunction startctxfunctiondefinition startculoare \
+startculoare startculoare startcurrentcolor startcurrentlistentrywrapper startdelimited \
+startdelimitedtext startdisplaymath startdmath startdocument startdute \
+starteffect startelement startembeddedxtable startembeddedxtable startendnote \
+startendnote startendofline startexceptions startexpanded startexpandedcollect \
+startextendedcatcodetable startexternalfigurecollection startfact startfigure startfiguretext \
+startfittingpage startfloatcombination startfloatcombination startfont startfontclass \
+startfontsolution startformula startformulas startframed startframedcontent \
+startframedtext startfrontmatter startfundal startfundal startgot \
+startgraphictext startgridsnapping startgridsnapping starthboxestohbox starthelptext \
+starthiding starthighlight starthyphenation startimath startimpachetat \
+startindentation startindentedtext startinteraction startinterface startintermezzotext \
+startintertext startitemgroup startitemize startknockout startlayout \
+startlegend startlinealignment startlinecorrection startlinenote startlinenumbering \
+startlinenumbering startlines startlinetable startlinetablebody startlinetablecell \
+startlinetablehead startlinie startliniemargine startliniemargine startlocalfootnotes \
+startlocalheadsetup startlocallinecorrection startlocalnotes startlocalsetups startlocalsetups \
+startlua startluacode startluaparameterset startluasetups startluasetups \
+startmakeup startmarginblock startmarkedcontent startmathalignment startmathcases \
+startmathlabeltext startmathmatrix startmathmode startmathstyle startmathstyle \
+startmatrices startmatrix startmaxaligned startmdformula startmediu \
+startmediu startmeniuinteractiune startmiddlealigned startminicitat startmixedcolumns \
+startmode startmodeset startmodule startmodule startmoduletestsection \
+startmpformula startnamedsection startnamedsubformulas startnarrow startnarrow \
+startnarrow startnarrower startnegative startnicelyfilledbox startnointerference \
+startnop startnotallmodes startnotasubsol startnotasubsol startnotext \
+startnotmode startoperatortext startopposite startoutputstream startoverlay \
+startoverprint startpagecomment startpagefigure startpagegrid startpagegridspan \
+startpagelayout startpar startpar startparagraph startparagraphs \
+startparagraphscell startparbuilder startpart startpath startplacechemical \
+startplacefigure startplacefloat startplacegraphic startplaceintermezzo startplacepairedbox \
+startplacetable startpositioning startpositionoverlay startpositive startpostponing \
+startprefixtext startprocessassignmentcommand startprocessassignmentlist startprocesscommacommand startprocesscommalist \
+startprodus startprodus startproiect startproiect startprotect \
+startprotectedcolors startpsh startpublicatie startpunctuation startpuneformula \
+startpuneformula startpunelegenda startrandomized startrandomseed startraw \
+startrawsetups startrawsetups startreadingfile startreferenceprefix startreferenceprefix \
+startregime startregister startreusableMPgraphic startriglatext startrob \
+startrul startscript startsdformula startsection startsectionblock \
+startsectionblockenvironment startsectionlevel startsetups startsetups startshapebox \
+startshift startsidebar startsimplecolumns startspecialitem startspecialitem \
+startspecialitem startspeech startspformula startspread startstartstop \
+startstaticMPfigure startstaticMPgraphic startstrictinspectnextcharacter startstructurepageregister startstrut \
+startstyle startstyle startsubformulas startsubject startsubsection \
+startsubsentence startsubstack startsubsubject startsubsubsection startsubsubsubject \
+startsubsubsubsection startsubsubsubsubject startsubsubsubsubsection startsubsubsubsubsubject startsymbolset \
+starttable starttable starttablehead starttables starttables \
+starttabletail starttabletext starttabulate starttabulatehead starttabulatetail \
+starttagged starttaglabeltext starttexcode starttexcode starttexdefinition \
+starttext starttext starttextbackground starttextbackgroundmanual starttextcolor \
+starttextcolorintent starttexteticheta starttextflow starttexttitlu starttitle \
+starttitlu starttokens starttxt starttypescript starttypescriptcollection \
+starttyping starttyping startuniqueMPgraphic startuniqueMPpagegraphic startunittext \
+startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter startusingbtxspecification \
+startvboxtohbox startvboxtohboxseparator startviewerlayer startxcell startxcellgroup \
+startxgroup startxmldisplayverbatim startxmlinlineverbatim startxmlraw startxmlsetups \
+startxmlsetups startxrow startxrowgroup startxtable startxtable \
+startxtablebody startxtablebody startxtablefoot startxtablefoot startxtablehead \
+startxtablehead startxtablenext startxtablenext stivacampuri stopJScode \
+stopJSpreamble stopLUA stopLUA stopMP stopMP \
+stopMPclip stopMPcode stopMPdefinitions stopMPdrawing stopMPdrawing \
+stopMPenvironment stopMPextensions stopMPinclusions stopMPinitializations stopMPpage \
+stopMPpositiongraphic stopMPpositionmethod stopMPrun stopPARSEDXML stopPARSEDXML \
+stopTABLE stopTABLE stopTABLEbody stopTABLEbody stopTABLEfoot \
+stopTABLEfoot stopTABLEhead stopTABLEhead stopTABLEnext stopTABLEnext \
+stopTC stopTD stopTDs stopTEX stopTEX \
+stopTEXpage stopTH stopTN stopTR stopTRs \
+stopTX stopTY stopXML stopXML stopalign \
+stopalignment stopaliniatcentru stopaliniatdreapta stopaliniatstanga stopallmodes \
+stopappendices stoparrangedpages stopattachment stopbackmatter stopbar \
+stopbar stopbitmapimage stopblockquote stopbodymatter stopboxedcolumns \
+stopbtxlabeltext stopbtxrenderingdefinitions stopbuffer stopbuffer stopbut \
+stopcases stopcatcodetable stopcatcodetable stopcenteraligned stopchapter \
+stopcharacteralign stopcheckedfences stopchemical stopcitat stopcollect \
+stopcollecting stopcolorintent stopcolorset stopcolumns stopcolumnspan \
+stopcom stopcombination stopcombination stopcomment stopcomponenta \
+stopcomponenta stopcontextcode stopcontextdefinitioncode stopctxfunction stopctxfunctiondefinition \
+stopculoare stopculoare stopculoare stopcurrentcolor stopcurrentlistentrywrapper \
+stopdelimited stopdelimitedtext stopdisplaymath stopdmath stopdocument \
+stopdute stopeffect stopelement stopembeddedxtable stopembeddedxtable \
+stopendnote stopendnote stopendofline stopexceptions stopexpanded \
+stopexpandedcollect stopextendedcatcodetable stopexternalfigurecollection stopfact stopfigure \
+stopfiguretext stopfittingpage stopfloatcombination stopfloatcombination stopfont \
+stopfontclass stopfontsolution stopformula stopformulas stopframed \
+stopframedcontent stopframedtext stopfrontmatter stopfundal stopfundal \
+stopgot stopgraphictext stopgridsnapping stopgridsnapping stophboxestohbox \
+stophelptext stophiding stophighlight stophyphenation stopimath \
+stopimpachetat stopindentation stopindentedtext stopinteraction stopinterface \
+stopintermezzotext stopintertext stopitemgroup stopitemize stopknockout \
+stoplayout stoplegend stoplinealignment stoplinecorrection stoplinenote \
+stoplinenumbering stoplinenumbering stoplines stoplinetable stoplinetablebody \
+stoplinetablecell stoplinetablehead stoplinie stopliniemargine stopliniemargine \
+stoplocalfootnotes stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups \
+stoplocalsetups stoplua stopluacode stopluaparameterset stopluasetups \
+stopluasetups stopmakeup stopmarginblock stopmarkedcontent stopmathalignment \
+stopmathcases stopmathlabeltext stopmathmatrix stopmathmode stopmathstyle \
+stopmathstyle stopmatrices stopmatrix stopmaxaligned stopmdformula \
+stopmediu stopmediu stopmeniuinteractiune stopmiddlealigned stopminicitat \
+stopmixedcolumns stopmode stopmodeset stopmodule stopmodule \
+stopmoduletestsection stopmpformula stopnamedsection stopnamedsubformulas stopnarrow \
+stopnarrow stopnarrow stopnarrower stopnegative stopnicelyfilledbox \
+stopnointerference stopnop stopnotallmodes stopnotasubsol stopnotasubsol \
+stopnotext stopnotmode stopoperatortext stopopposite stopoutputstream \
+stopoverlay stopoverprint stoppagecomment stoppagefigure stoppagegrid \
+stoppagegridspan stoppagelayout stoppar stoppar stopparagraph \
+stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \
+stopplacechemical stopplacefigure stopplacefloat stopplacegraphic stopplaceintermezzo \
+stopplacepairedbox stopplacetable stoppositioning stoppositionoverlay stoppositive \
+stoppostponing stopprefixtext stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand \
+stopprocesscommalist stopprodus stopprodus stopproiect stopproiect \
+stopprotect stopprotectedcolors stoppsh stoppublicatie stoppunctuation \
+stoppuneformula stoppuneformula stoppunelegenda stoprandomized stoprandomseed \
+stopraw stoprawsetups stoprawsetups stopreadingfile stopreferenceprefix \
+stopreferenceprefix stopregime stopregister stopreusableMPgraphic stopriglatext \
+stoprob stoprul stopscript stopsdformula stopsection \
+stopsectionblock stopsectionblockenvironment stopsectionlevel stopsetups stopsetups \
+stopshapebox stopshift stopsidebar stopsimplecolumns stopspecialitem \
+stopspecialitem stopspecialitem stopspeech stopspformula stopspread \
+stopstartstop stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter stopstructurepageregister \
+stopstrut stopstyle stopstyle stopsubformulas stopsubject \
+stopsubsection stopsubsentence stopsubstack stopsubsubject stopsubsubsection \
+stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject stopsubsubsubsubsection stopsubsubsubsubsubject \
+stopsymbolset stoptable stoptable stoptablehead stoptables \
+stoptables stoptabletail stoptabletext stoptabulate stoptabulatehead \
+stoptabulatetail stoptagged stoptaglabeltext stoptexcode stoptexcode \
+stoptexdefinition stoptext stoptext stoptextbackground stoptextbackgroundmanual \
+stoptextcolor stoptextcolorintent stoptexteticheta stoptextflow stoptexttitlu \
+stoptitle stoptitlu stoptokens stoptxt stoptypescript \
+stoptypescriptcollection stoptyping stoptyping stopuniqueMPgraphic stopuniqueMPpagegraphic \
+stopunittext stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter \
+stopusingbtxspecification stopvboxtohbox stopvboxtohboxseparator stopviewerlayer stopxcell \
+stopxcellgroup stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw \
+stopxmlsetups stopxmlsetups stopxrow stopxrowgroup stopxtable \
+stopxtable stopxtablebody stopxtablebody stopxtablefoot stopxtablefoot \
+stopxtablehead stopxtablehead stopxtablenext stopxtablenext strictdoifelsenextoptional \
+strictdoifnextoptionalelse stripcharacter strippedcsname strippedcsname stripspaces \
+structurelistuservariable structurenumber structuretitle structureuservariable structurevariable \
+strut strutdp strutht struthtdp struttedbox \
+strutwd style style styleinstance sub \
+subject subpagenumber subsection subsentence substituteincommalist \
+subsubject subsubsection subsubsubject subsubsubsection subsubsubsubject \
+subsubsubsubsection subsubsubsubsubject subtractfeature subtractfeature swapcounts \
+swapdimens swapface swapmacros swaptypeface switchstyleonly \
+switchstyleonly switchtocolor switchtointerlinespace switchtointerlinespace switchtointerlinespace \
+switchtointerlinespace switchtointerlinespace switchtointerlinespace symbolreference synchronizeblank \
+synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace \
+systemlog systemlogfirst systemloglast systemsetups tLeftarrow \
+tLeftrightarrow tRightarrow tabulateautoline tabulateautorule tabulateline \
+tabulaterule taggedctxcommand taggedlabeltexts taglabellanguage taglabeltext \
+tbinom tbox tequal testandsplitstring testcolumn \
+testfeature testfeatureonce testpage testpageonly testpagesync \
+testtokens tex texdefinition texsetup textcitation \
+textcitation textcitation textcite textcite textcite \
+textcontrolspace texteticheta textflowcollector textmarginal textmath \
+textminus textormathchar textplus texttitlu textumplere \
+textvisiblespace tfrac thai thainumerals thefirstcharacter \
+thenormalizedbodyfontsize theremainingcharacters thickspace thinspace thinspace \
+thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments thirdofthreeunexpanded \
+thookleftarrow thookrightarrow threedigitrounding tibetannumerals tightlayer \
+tilde tinyfont title titlu titlumarginal \
+tlap tleftarrow tleftharpoondown tleftharpoonup tleftrightarrow \
+tleftrightharpoons tmapsto tochar tolinenote tooltip \
+tooltip topbox topleftbox toplinebox toprightbox \
+topskippedbox tracecatcodetables tracedfontname traceoutputroutines tracepositions \
+traduce transparencycomponents trecilafonttext trel trightarrow \
+trightharpoondown trightharpoonup trightleftharpoons trightoverleftarrow triplebond \
+truefilename truefontname ttraggedright ttriplerel ttwoheadleftarrow \
+ttwoheadrightarrow twodigitrounding tx txt txt \
+txx typ typ type type \
+typedefinedbuffer typeface typefile typescriptone typescriptprefix \
+typescriptthree typescripttwo typesetbuffer typesetfile uconvertnumber \
+uedcatcodecommand undefinevalue undepthed underbar underbar \
+underbars underbartext underbrace underbracetext underbracket \
+underbrackettext underdash underdashes underdot underdots \
+underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow underparent \
+underparenttext underrandom underrandoms underrightarrow underrightharpoondown \
+underrightharpoonup underset understrike understrikes undertwoheadleftarrow \
+undertwoheadrightarrow undeva undoassign unframed unhhbox \
+unihex uniqueMPgraphic uniqueMPpagegraphic unit unitlanguage \
+unittext unprotected unregisterhyphenationpattern unspaceafter unspaceargument \
+unspaced unspacestring untexargument untexcommand uppercased \
+uppercasestring upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote upperleftsinglesixquote \
+upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote url \
+useMPenvironmentbuffer useMPgraphic useMPlibrary useMPrun useMPvariables \
+usealignparameter usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions \
+usecolors usecomponent usedummycolorparameter usedummystyleandcolor usedummystyleparameter \
+useenvironment useexternalrendering usefigurebase usefile usegridparameter \
+useindentingparameter useindentnextparameter useinterlinespaceparameter useinterlinespaceparameter uselanguageparameter \
+useluamodule usemathstyleparameter useproduct useprofileparameter useproject \
+usereferenceparameter userpagenumber usesetupsparameter usestaticMPfigure usesubpath \
+usetexmodule usetypescript usetypescriptfile usezipfile utfchar \
+utflower utfupper utilityregisterlength valoareculoare vboxreference \
+vec verbatim verbatimstring verbosenumber versiune \
+verticalgrowingbar verticalpositionbar veryraggedcenter veryraggedleft veryraggedright \
+vglue viewerlayer vl vphantom vpos \
+vsmash vsmashbox vsmashed vspace vspacing \
+wdofstring widthofstring widthspanningtext withoutpt word \
+words wordtonumber writedatatolist writestatus xLeftarrow \
+xLeftrightarrow xRightarrow xdefconvertedargument xequal xfrac \
+xhookleftarrow xhookrightarrow xleftarrow xleftharpoondown xleftharpoonup \
+xleftrightarrow xleftrightharpoons xmapsto xmladdindex xmlafterdocumentsetup \
+xmlaftersetup xmlall xmlappenddocumentsetup xmlappendsetup xmlapplyselectors \
+xmlatt xmlattdef xmlattribute xmlattributedef xmlbadinclusions \
+xmlbeforedocumentsetup xmlbeforesetup xmlchainatt xmlchainattdef xmlchecknamespace \
+xmlcommand xmlconcat xmlconcatrange xmlcontext xmlcount \
+xmldefaulttotext xmldirectives xmldirectivesafter xmldirectivesbefore xmldisplayverbatim \
+xmldoif xmldoifelse xmldoifelseempty xmldoifelseselfempty xmldoifelsetext \
+xmldoifelsevalue xmldoifnot xmldoifnotselfempty xmldoifnottext xmldoifselfempty \
+xmldoiftext xmlelement xmlfilter xmlfirst xmlflush \
+xmlflushcontext xmlflushdocumentsetups xmlflushlinewise xmlflushpure xmlflushspacewise \
+xmlflushtext xmlinclude xmlinclusion xmlinclusions xmlinfo \
+xmlinjector xmlinlineverbatim xmlinstalldirective xmllast xmllastatt \
+xmllastmatch xmlloadbuffer xmlloaddata xmlloaddirectives xmlloadfile \
+xmlloadonly xmlmain xmlmapvalue xmlname xmlnamespace \
+xmlnonspace xmlpath xmlpos xmlposition xmlprependdocumentsetup \
+xmlprependsetup xmlprettyprint xmlprocessbuffer xmlprocessdata xmlprocessfile \
+xmlpure xmlraw xmlrefatt xmlregistereddocumentsetups xmlregisteredsetups \
+xmlregisterns xmlregisterns xmlremapname xmlremapnamespace xmlremovedocumentsetup \
+xmlremovesetup xmlresetdocumentsetups xmlresetinjectors xmlresetsetups xmlsave \
+xmlsetentity xmlsetfunction xmlsetinjectors xmlsetsetup xmlsetup \
+xmlshow xmlsnippet xmlstrip xmlstripnolines xmlstripped \
+xmlstrippednolines xmltag xmltexentity xmltext xmltobuffer \
+xmltobufferverbose xmltofile xmlvalue xmlverbatim xrel \
+xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons xrightoverleftarrow \
+xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow xxfrac \
+xypos zidinsaptamana
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context-data-metafun.properties b/Master/texmf-dist/context/data/scite/context/scite-context-data-metafun.properties
index 977ca9dfd4b..1b00cc5e0d7 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context-data-metafun.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context-data-metafun.properties
@@ -22,38 +22,42 @@ xsized ysized xysized sized xyscaled \
intersection_point intersection_found penpoint bbwidth bbheight \
withshade withcircularshade withlinearshade defineshade shaded \
shadedinto withshadecolors withshadedomain withshademethod withshadefactor \
-withshadevector withshadecenter cmyk spotcolor multitonecolor \
-namedcolor drawfill undrawfill inverted uncolored \
-softened grayed greyed onlayer along \
-graphictext loadfigure externalfigure figure register \
-withmask bitmapimage colordecimals ddecimal dddecimal \
-ddddecimal textext thetextext rawtextext textextoffset \
-verbatim thelabel label autoalign transparent \
-withtransparency property properties withproperties asgroup \
-infont space crlf dquote percent \
-SPACE CRLF DQUOTE PERCENT grayscale \
-greyscale withgray withgrey colorpart readfile \
-clearxy unitvector center epsed anchored \
-originpath infinite break xstretched ystretched \
-snapped pathconnectors function constructedfunction constructedpath \
-constructedpairs straightfunction straightpath straightpairs curvedfunction \
-curvedpath curvedpairs evenly oddly condition \
-pushcurrentpicture popcurrentpicture arrowpath tensecircle roundedsquare \
-colortype whitecolor blackcolor basiccolors normalfill \
-normaldraw visualizepaths naturalizepaths drawboundary drawwholepath \
-visualizeddraw visualizedfill draworigin drawboundingbox drawpath \
-drawpoint drawpoints drawcontrolpoints drawcontrollines drawpointlabels \
-drawlineoptions drawpointoptions drawcontroloptions drawlabeloptions draworiginoptions \
-drawboundoptions drawpathoptions resetdrawoptions undashed decorated \
-redecorated undecorated passvariable passarrayvariable tostring \
-format formatted startpassingvariable stoppassingvariable eofill \
-eoclip area
+withshadevector withshadecenter withshadedirection withshadestep withshadefraction \
+cmyk spotcolor multitonecolor namedcolor drawfill \
+undrawfill inverted uncolored softened grayed \
+greyed onlayer along graphictext loadfigure \
+externalfigure figure register outlinetext checkedbounds \
+checkbounds strut rule withmask bitmapimage \
+colordecimals ddecimal dddecimal ddddecimal textext \
+thetextext rawtextext textextoffset verbatim thelabel \
+label autoalign transparent withtransparency property \
+properties withproperties asgroup infont space \
+crlf dquote percent SPACE CRLF \
+DQUOTE PERCENT grayscale greyscale withgray \
+withgrey colorpart readfile clearxy unitvector \
+center epsed anchored originpath infinite \
+break xstretched ystretched snapped pathconnectors \
+function constructedfunction constructedpath constructedpairs straightfunction \
+straightpath straightpairs curvedfunction curvedpath curvedpairs \
+evenly oddly condition pushcurrentpicture popcurrentpicture \
+arrowpath tensecircle roundedsquare colortype whitecolor \
+blackcolor basiccolors normalfill normaldraw visualizepaths \
+detailpaths naturalizepaths drawboundary drawwholepath drawpathonly \
+visualizeddraw visualizedfill detaileddraw draworigin drawboundingbox \
+drawpath drawpoint drawpoints drawcontrolpoints drawcontrollines \
+drawpointlabels drawlineoptions drawpointoptions drawcontroloptions drawlabeloptions \
+draworiginoptions drawboundoptions drawpathoptions resetdrawoptions undashed \
+decorated redecorated undecorated passvariable passarrayvariable \
+tostring format formatted startpassingvariable stoppassingvariable \
+eofill eoclip nofill fillup eofillup \
+area addbackground shadedup shadeddown shadedleft \
+shadedright
keywordclass.metafun.internals=\
nocolormodel greycolormodel graycolormodel rgbcolormodel \
cmykcolormodel shadefactor textextoffset normaltransparent multiplytransparent \
screentransparent overlaytransparent softlighttransparent hardlighttransparent colordodgetransparent \
colorburntransparent darkentransparent lightentransparent differencetransparent exclusiontransparent \
-huetransparent saturationtransparent colortransparent luminositytransparent metapostversion \
-maxdimensions
+huetransparent saturationtransparent colortransparent luminositytransparent ahvariant \
+ahdimple ahfactor metapostversion maxdimensions drawoptionsfactor
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context-data-tex.properties b/Master/texmf-dist/context/data/scite/context/scite-context-data-tex.properties
index 6688ba9d5ef..267cb7b1c8c 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context-data-tex.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context-data-tex.properties
@@ -20,41 +20,59 @@ unexpanded unless widowpenalties
keywordclass.tex.luatex=\
Uchar Udelcode Udelcodenum Udelimiter \
-Udelimiterover Udelimiterunder Umathaccent Umathaxis Umathbinbinspacing \
-Umathbinclosespacing Umathbininnerspacing Umathbinopenspacing Umathbinopspacing Umathbinordspacing \
-Umathbinpunctspacing Umathbinrelspacing Umathchar Umathchardef Umathcharnum \
-Umathclosebinspacing Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing Umathcloseopspacing \
-Umathcloseordspacing Umathclosepunctspacing Umathcloserelspacing Umathcode Umathcodenum \
-Umathconnectoroverlapmin Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup \
-Umathfractionnumvgap Umathfractionrule Umathinnerbinspacing Umathinnerclosespacing Umathinnerinnerspacing \
-Umathinneropenspacing Umathinneropspacing Umathinnerordspacing Umathinnerpunctspacing Umathinnerrelspacing \
-Umathlimitabovebgap Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern \
-Umathlimitbelowvgap Umathopbinspacing Umathopclosespacing Umathopenbinspacing Umathopenclosespacing \
-Umathopeninnerspacing Umathopenopenspacing Umathopenopspacing Umathopenordspacing Umathopenpunctspacing \
-Umathopenrelspacing Umathoperatorsize Umathopinnerspacing Umathopopenspacing Umathopopspacing \
-Umathopordspacing Umathoppunctspacing Umathoprelspacing Umathordbinspacing Umathordclosespacing \
-Umathordinnerspacing Umathordopenspacing Umathordopspacing Umathordordspacing Umathordpunctspacing \
-Umathordrelspacing Umathoverbarkern Umathoverbarrule Umathoverbarvgap Umathoverdelimiterbgap \
-Umathoverdelimitervgap Umathpunctbinspacing Umathpunctclosespacing Umathpunctinnerspacing Umathpunctopenspacing \
-Umathpunctopspacing Umathpunctordspacing Umathpunctpunctspacing Umathpunctrelspacing Umathquad \
-Umathradicaldegreeafter Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern Umathradicalrule \
-Umathradicalvgap Umathrelbinspacing Umathrelclosespacing Umathrelinnerspacing Umathrelopenspacing \
-Umathrelopspacing Umathrelordspacing Umathrelpunctspacing Umathrelrelspacing Umathspaceafterscript \
-Umathstackdenomdown Umathstacknumup Umathstackvgap Umathsubshiftdown Umathsubshiftdrop \
-Umathsubsupshiftdown Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsupshiftdrop \
-Umathsupshiftup Umathsupsubbottommax Umathunderbarkern Umathunderbarrule Umathunderbarvgap \
-Umathunderdelimiterbgap Umathunderdelimitervgap Uoverdelimiter Uradical Uroot \
-Ustack Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath \
-Usubscript Usuperscript Uunderdelimiter alignmark aligntab \
-attribute attributedef catcodetable clearmarks crampeddisplaystyle \
-crampedscriptscriptstyle crampedscriptstyle crampedtextstyle fontid formatname \
-gleaders ifabsdim ifabsnum ifprimitive initcatcodetable \
-latelua luaescapestring luastartup luatexbanner luatexrevision \
-luatexversion luafunction mathstyle nokerns noligs \
-outputbox pageleftoffset pagetopoffset postexhyphenchar posthyphenchar \
-preexhyphenchar prehyphenchar primitive savecatcodetable scantextokens \
+Udelimiterover Udelimiterunder Uhextensible Uleft Umathaccent \
+Umathaxis Umathbinbinspacing Umathbinclosespacing Umathbininnerspacing Umathbinopenspacing \
+Umathbinopspacing Umathbinordspacing Umathbinpunctspacing Umathbinrelspacing Umathchar \
+Umathcharclass Umathchardef Umathcharfam Umathcharnum Umathcharnumdef \
+Umathcharslot Umathclosebinspacing Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing \
+Umathcloseopspacing Umathcloseordspacing Umathclosepunctspacing Umathcloserelspacing Umathcode \
+Umathcodenum Umathcodenumdef Umathconnectoroverlapmin Umathfractiondelsize Umathfractiondenomdown \
+Umathfractiondenomvgap Umathfractionnumup Umathfractionnumvgap Umathfractionrule Umathinnerbinspacing \
+Umathinnerclosespacing Umathinnerinnerspacing Umathinneropenspacing Umathinneropspacing Umathinnerordspacing \
+Umathinnerpunctspacing Umathinnerrelspacing Umathlimitabovebgap Umathlimitabovekern Umathlimitabovevgap \
+Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap Umathopbinspacing Umathopclosespacing \
+Umathopenbinspacing Umathopenclosespacing Umathopeninnerspacing Umathopenopenspacing Umathopenopspacing \
+Umathopenordspacing Umathopenpunctspacing Umathopenrelspacing Umathoperatorsize Umathopinnerspacing \
+Umathopopenspacing Umathopopspacing Umathopordspacing Umathoppunctspacing Umathoprelspacing \
+Umathordbinspacing Umathordclosespacing Umathordinnerspacing Umathordopenspacing Umathordopspacing \
+Umathordordspacing Umathordpunctspacing Umathordrelspacing Umathoverbarkern Umathoverbarrule \
+Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervgap Umathpunctbinspacing Umathpunctclosespacing \
+Umathpunctinnerspacing Umathpunctopenspacing Umathpunctopspacing Umathpunctordspacing Umathpunctpunctspacing \
+Umathpunctrelspacing Umathquad Umathradicaldegreeafter Umathradicaldegreebefore Umathradicaldegreeraise \
+Umathradicalkern Umathradicalrule Umathradicalvgap Umathrelbinspacing Umathrelclosespacing \
+Umathrelinnerspacing Umathrelopenspacing Umathrelopspacing Umathrelordspacing Umathrelpunctspacing \
+Umathrelrelspacing Umathskewedfractionhgap Umathskewedfractionvgap Umathspaceafterscript Umathstackdenomdown \
+Umathstacknumup Umathstackvgap Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown \
+Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsupshiftdrop Umathsupshiftup \
+Umathsupsubbottommax Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap \
+Umathunderdelimitervgap Umiddle Uoverdelimiter Uradical Uright \
+Uroot Uskewed Uskewedwithdelims Ustack Ustartdisplaymath \
+Ustartmath Ustopdisplaymath Ustopmath Usubscript Usuperscript \
+Uunderdelimiter Uvextensible adjustspacing alignmark aligntab \
+attribute attributedef bodydir boundary boxdir \
+catcodetable clearmarks copyfont crampeddisplaystyle crampedscriptscriptstyle \
+crampedscriptstyle crampedtextstyle draftmode dviextension dvifeedback \
+dvivariable efcode hjcode firstvalidlanguage fontid \
+formatname gleaders hyphenationmin ifabsdim ifabsnum \
+ifprimitive ignoreligaturesinfont initcatcodetable insertht lastsavedboxresourceindex \
+lastsavedimageresourceindex lastsavedimageresourcepages lastxpos lastypos latelua \
+leftghost leftmarginkern letcharcode letterspacefont localbrokenpenalty \
+localinterlinepenalty localleftbox localrightbox lpcode luaescapestring \
+luatexbanner luatexrevision luatexversion luafunction mathdir \
+mathdisplayskipmode matheqnogapstep mathoption mathscriptsmode mathstyle \
+mathsurroundskip noboundary nokerns nohrule noligs \
+nospaces novrule normaldeviate outputbox outputmode \
+pagedir pageheight pagebottomoffset pageleftoffset pagerightoffset \
+pagetopoffset pagewidth pardir pdfextension pdffeedback \
+pdfvariable postexhyphenchar posthyphenchar preexhyphenchar prehyphenchar \
+primitive protrudechars protrusionboundary pxdimen randomseed \
+rightghost rightmarginkern rpcode saveboxresource savecatcodetable \
+saveimageresource savepos scantextokens setfontid setrandomseed \
suppressfontnotfounderror suppressifcsnameerror suppresslongerror suppressoutererror suppressmathparerror \
-matheqnogapstep synctex
+synctex tagcode textdir tracingfonts uniformdeviate \
+useboxresource useimageresource wordboundary vpack hpack \
+tpack csstring begincsname lastnamedcs toksapp \
+tokspre etoksapp etokspre
keywordclass.tex.omega=\
OmegaVersion bodydir chardp charht \
@@ -69,169 +87,184 @@ efcode expanded ifincsname ifpdfabsdim \
ifpdfabsnum ifpdfprimitive leftmarginkern letterspacefont lpcode \
pdfadjustspacing pdfannot pdfcatalog pdfcolorstack pdfcolorstackinit \
pdfcompresslevel pdfcopyfont pdfcreationdate pdfdecimaldigits pdfdest \
-pdfdestmargin pdfdraftmode pdfeachlinedepth pdfeachlineheight pdfendlink \
+pdfdestmargin pdfdraftmode pdfeachlineheight pdfeachlinedepth pdfendlink \
pdfendthread pdffirstlineheight pdffontattr pdffontexpand pdffontname \
-pdffontobjnum pdffontsize pdfgamma pdfgentounicode pdfglyphtounicode \
-pdfhorigin pdfignoreddimen pdfimageapplygamma pdfimagegamma pdfimagehicolor \
-pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfinclusionerrorlevel pdfinfo \
+pdffontobjnum pdffontsize pdfxformmargin pdfgamma pdfgentounicode \
+pdfglyphtounicode pdfhorigin pdfignoreddimen pdfimageapplygamma pdfimagegamma \
+pdfimagehicolor pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfignoreunknownimages \
+pdfinclusionerrorlevel pdfignoreunknownimages pdfinfo pdfinfoomitdate pdftrailerid \
pdfinsertht pdflastannot pdflastlinedepth pdflastlink pdflastobj \
-pdflastxform pdflastximage pdflastximagecolordepth pdflastximagepages pdflastxpos \
-pdflastypos pdflinkmargin pdfliteral pdfmapfile pdfmapline \
-pdfminorversion pdfnames pdfnoligatures pdfnormaldeviate pdfobj \
-pdfobjcompresslevel pdfoptionpdfminorversion pdfoutline pdfoutput pdfpageattr \
-pdfpagebox pdfpageheight pdfpageref pdfpageresources pdfpagesattr \
-pdfpagewidth pdfpkmode pdfpkresolution pdfprimitive pdfprotrudechars \
-pdfpxdimen pdfrandomseed pdfrefobj pdfrefxform pdfrefximage \
-pdfreplacefont pdfrestore pdfretval pdfsave pdfsavepos \
-pdfsetmatrix pdfsetrandomseed pdfstartlink pdfstartthread pdftexbanner \
-pdftexrevision pdftexversion pdfthread pdfthreadmargin pdftracingfonts \
-pdftrailer pdfuniformdeviate pdfuniqueresname pdfvorigin pdfxform \
-pdfxformattr pdfxformname pdfxformresources pdfximage pdfximagebbox \
+pdflastxform pdflastximage pdflastximagepages pdflastxpos pdflastypos \
+pdflinkmargin pdfliteral pdfmapfile pdfmapline pdfminorversion \
+pdfnames pdfnoligatures pdfnormaldeviate pdfobj pdfobjcompresslevel \
+pdfoutline pdfoutput pdfpageattr pdfpagebox pdfpageheight \
+pdfpageref pdfpageresources pdfpagesattr pdfpagewidth pdfpkmode \
+pdfpkresolution pdfpkfixeddpi pdfprimitive pdfprotrudechars pdfpxdimen \
+pdfrandomseed pdfrefobj pdfrefxform pdfrefximage pdfreplacefont \
+pdfrestore pdfretval pdfsave pdfsavepos pdfsetmatrix \
+pdfsetrandomseed pdfstartlink pdfstartthread pdftexbanner pdftexrevision \
+pdftexversion pdfsuppressptexinfo pdfsuppressoptionalinfo pdfthread pdfthreadmargin \
+pdftracingfonts pdftrailer pdfuniformdeviate pdfuniqueresname pdfvorigin \
+pdfxform pdfxformattr pdfxformname pdfxformresources pdfximage \
quitvmode rightmarginkern rpcode tagcode
keywordclass.tex.tex=\
- / AlephVersion Alephminorversion \
Alephrevision Alephversion OmegaVersion Omegaminorversion Omegarevision \
Omegaversion Udelcode Udelcodenum Udelimiter Udelimiterover \
-Udelimiterunder Umathaccent Umathaxis Umathbinbinspacing Umathbinclosespacing \
-Umathbininnerspacing Umathbinopenspacing Umathbinopspacing Umathbinordspacing Umathbinpunctspacing \
-Umathbinrelspacing Umathchar Umathchardef Umathcharnum Umathclosebinspacing \
-Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing Umathcloseopspacing Umathcloseordspacing \
-Umathclosepunctspacing Umathcloserelspacing Umathcode Umathcodenum Umathconnectoroverlapmin \
-Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup Umathfractionnumvgap \
-Umathfractionrule Umathinnerbinspacing Umathinnerclosespacing Umathinnerinnerspacing Umathinneropenspacing \
-Umathinneropspacing Umathinnerordspacing Umathinnerpunctspacing Umathinnerrelspacing Umathlimitabovebgap \
-Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap \
-Umathopbinspacing Umathopclosespacing Umathopenbinspacing Umathopenclosespacing Umathopeninnerspacing \
-Umathopenopenspacing Umathopenopspacing Umathopenordspacing Umathopenpunctspacing Umathopenrelspacing \
-Umathoperatorsize Umathopinnerspacing Umathopopenspacing Umathopopspacing Umathopordspacing \
-Umathoppunctspacing Umathoprelspacing Umathordbinspacing Umathordclosespacing Umathordinnerspacing \
-Umathordopenspacing Umathordopspacing Umathordordspacing Umathordpunctspacing Umathordrelspacing \
-Umathoverbarkern Umathoverbarrule Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervgap \
-Umathpunctbinspacing Umathpunctclosespacing Umathpunctinnerspacing Umathpunctopenspacing Umathpunctopspacing \
-Umathpunctordspacing Umathpunctpunctspacing Umathpunctrelspacing Umathquad Umathradicaldegreeafter \
-Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern Umathradicalrule Umathradicalvgap \
-Umathrelbinspacing Umathrelclosespacing Umathrelinnerspacing Umathrelopenspacing Umathrelopspacing \
-Umathrelordspacing Umathrelpunctspacing Umathrelrelspacing Umathspaceafterscript Umathstackdenomdown \
-Umathstacknumup Umathstackvgap Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown \
-Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsupshiftdrop Umathsupshiftup \
-Umathsupsubbottommax Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap \
-Umathunderdelimitervgap Uoverdelimiter Uradical Uroot Ustack \
-Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath Usubscript \
-Usuperscript Uunderdelimiter above abovedisplayshortskip abovedisplayskip \
-abovewithdelims accent adjdemerits advance afterassignment \
-aftergroup alignmark aligntab atop atopwithdelims \
-attribute attributedef badness baselineskip batchmode \
-begingroup belowdisplayshortskip belowdisplayskip binoppenalty bodydir \
-botmark botmarks box boxdir boxmaxdepth \
+Udelimiterunder Uhextensible Uleft Umathaccent Umathaxis \
+Umathbinbinspacing Umathbinclosespacing Umathbininnerspacing Umathbinopenspacing Umathbinopspacing \
+Umathbinordspacing Umathbinpunctspacing Umathbinrelspacing Umathchar Umathcharclass \
+Umathchardef Umathcharfam Umathcharnum Umathcharnumdef Umathcharslot \
+Umathclosebinspacing Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing Umathcloseopspacing \
+Umathcloseordspacing Umathclosepunctspacing Umathcloserelspacing Umathcode Umathcodenum \
+Umathcodenumdef Umathconnectoroverlapmin Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap \
+Umathfractionnumup Umathfractionnumvgap Umathfractionrule Umathinnerbinspacing Umathinnerclosespacing \
+Umathinnerinnerspacing Umathinneropenspacing Umathinneropspacing Umathinnerordspacing Umathinnerpunctspacing \
+Umathinnerrelspacing Umathlimitabovebgap Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap \
+Umathlimitbelowkern Umathlimitbelowvgap Umathopbinspacing Umathopclosespacing Umathopenbinspacing \
+Umathopenclosespacing Umathopeninnerspacing Umathopenopenspacing Umathopenopspacing Umathopenordspacing \
+Umathopenpunctspacing Umathopenrelspacing Umathoperatorsize Umathopinnerspacing Umathopopenspacing \
+Umathopopspacing Umathopordspacing Umathoppunctspacing Umathoprelspacing Umathordbinspacing \
+Umathordclosespacing Umathordinnerspacing Umathordopenspacing Umathordopspacing Umathordordspacing \
+Umathordpunctspacing Umathordrelspacing Umathoverbarkern Umathoverbarrule Umathoverbarvgap \
+Umathoverdelimiterbgap Umathoverdelimitervgap Umathpunctbinspacing Umathpunctclosespacing Umathpunctinnerspacing \
+Umathpunctopenspacing Umathpunctopspacing Umathpunctordspacing Umathpunctpunctspacing Umathpunctrelspacing \
+Umathquad Umathradicaldegreeafter Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern \
+Umathradicalrule Umathradicalvgap Umathrelbinspacing Umathrelclosespacing Umathrelinnerspacing \
+Umathrelopenspacing Umathrelopspacing Umathrelordspacing Umathrelpunctspacing Umathrelrelspacing \
+Umathskewedfractionhgap Umathskewedfractionvgap Umathspaceafterscript Umathstackdenomdown Umathstacknumup \
+Umathstackvgap Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown Umathsubsupvgap \
+Umathsubtopmax Umathsupbottommin Umathsupshiftdrop Umathsupshiftup Umathsupsubbottommax \
+Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap Umathunderdelimitervgap \
+Umiddle Uoverdelimiter Uradical Uright Uroot \
+Uskewed Uskewedwithdelims Ustack Ustartdisplaymath Ustartmath \
+Ustopdisplaymath Ustopmath Usubscript Usuperscript Uunderdelimiter \
+Uvextensible above abovedisplayshortskip abovedisplayskip abovewithdelims \
+accent adjdemerits advance afterassignment aftergroup \
+alignmark aligntab atop atopwithdelims attribute \
+attributedef badness baselineskip batchmode begingroup \
+belowdisplayshortskip belowdisplayskip binoppenalty bodydir botmark \
+botmarks boundary box boxdir boxmaxdepth \
brokenpenalty catcode catcodetable char chardef \
cleaders clearmarks closein closeout clubpenalties \
-clubpenalty copy count countdef cr \
-crampeddisplaystyle crampedscriptscriptstyle crampedscriptstyle crampedtextstyle crcr \
-csname currentgrouplevel currentgrouptype currentifbranch currentiflevel \
-currentiftype day deadcycles def defaulthyphenchar \
-defaultskewchar delcode delimiter delimiterfactor delimitershortfall \
-detokenize dimen dimendef dimexpr directlua \
-discretionary displayindent displaylimits displaystyle displaywidowpenalties \
-displaywidowpenalty displaywidth divide doublehyphendemerits dp \
-dump eTeXVersion eTeXminorversion eTeXrevision eTeXversion \
-edef efcode else emergencystretch end \
+clubpenalty copy copyfont count countdef \
+cr crampeddisplaystyle crampedscriptscriptstyle crampedscriptstyle crampedtextstyle \
+crcr csname currentgrouplevel currentgrouptype currentifbranch \
+currentiflevel currentiftype day deadcycles def \
+defaulthyphenchar defaultskewchar delcode delimiter delimiterfactor \
+delimitershortfall detokenize dimen dimendef dimexpr \
+directlua discretionary displayindent displaylimits displaystyle \
+displaywidowpenalties displaywidowpenalty displaywidth divide doublehyphendemerits \
+dp dump dviextension dvifeedback dvivariable \
+eTeXVersion eTeXminorversion eTeXrevision eTeXversion edef \
+efcode hjcode else emergencystretch end \
endcsname endgroup endinput endlinechar eqno \
errhelp errmessage errorcontextlines errorstopmode escapechar \
everycr everydisplay everyeof everyhbox everyjob \
everymath everypar everyvbox exhyphenchar exhyphenpenalty \
-expandafter expanded fam fi finalhyphendemerits \
-firstmark firstmarks floatingpenalty font fontchardp \
-fontcharht fontcharic fontcharwd fontdimen fontid \
-fontname formatname futurelet gdef gleaders \
-global globaldefs glueexpr glueshrink glueshrinkorder \
-gluestretch gluestretchorder gluetomu halign hangafter \
-hangindent hbadness hbox hfil hfill \
-hfilneg hfuzz hoffset holdinginserts hrule \
-hsize hskip hss ht hyphenation \
-hyphenchar hyphenpenalty if ifabsdim ifabsnum \
-ifcase ifcat ifcsname ifdefined ifdim \
-ifeof iffalse iffontchar ifhbox ifhmode \
-ifincsname ifinner ifmmode ifnum ifodd \
-ifpdfabsdim ifpdfabsnum ifpdfprimitive ifprimitive iftrue \
-ifvbox ifvmode ifvoid ifx ignorespaces \
-immediate indent initcatcodetable input inputlineno \
-insert insertpenalties interactionmode interlinepenalties interlinepenalty \
-jobname kern language lastbox lastkern \
-lastlinefit lastnodetype lastpenalty lastskip latelua \
-lccode leaders left leftghost lefthyphenmin \
-leftmarginkern leftskip leqno let letterspacefont \
-limits linepenalty lineskip lineskiplimit localbrokenpenalty \
-localinterlinepenalty localleftbox localrightbox long looseness \
-lower lowercase lpcode luaescapestring luastartup \
-luatexbanner luatexrevision luatexversion mag mark \
-marks mathaccent mathbin mathchar mathchardef \
-mathchoice mathclose mathcode mathdir mathinner \
-mathop mathopen mathord mathpunct mathrel \
-mathstyle mathsurround maxdeadcycles maxdepth meaning \
-medmuskip message middle mkern month \
-moveleft moveright mskip muexpr multiply \
-muskip muskipdef mutoglue newlinechar noalign \
-noboundary noexpand noindent nokerns noligs \
-nolimits nolocaldirs nolocalwhatsits nonscript nonstopmode \
-nulldelimiterspace nullfont number numexpr odelcode \
-odelimiter omathaccent omathchar omathchardef omathcode \
-omit openin openout or oradical \
-outer output outputbox outputpenalty over \
-overfullrule overline overwithdelims pagebottomoffset pagedepth \
-pagedir pagediscards pagefilllstretch pagefillstretch pagefilstretch \
-pagegoal pageheight pageleftoffset pagerightoffset pageshrink \
-pagestretch pagetopoffset pagetotal pagewidth par \
-pardir parfillskip parindent parshape parshapedimen \
-parshapeindent parshapelength parskip patterns pausing \
-pdfadjustspacing pdfannot pdfcatalog pdfcolorstack pdfcolorstackinit \
-pdfcompresslevel pdfcopyfont pdfcreationdate pdfdecimaldigits pdfdest \
-pdfdestmargin pdfdraftmode pdfeachlinedepth pdfeachlineheight pdfendlink \
-pdfendthread pdffirstlineheight pdffontattr pdffontexpand pdffontname \
-pdffontobjnum pdffontsize pdfgamma pdfgentounicode pdfglyphtounicode \
-pdfhorigin pdfignoreddimen pdfimageapplygamma pdfimagegamma pdfimagehicolor \
-pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfinclusionerrorlevel pdfinfo \
-pdfinsertht pdflastannot pdflastlinedepth pdflastlink pdflastobj \
-pdflastxform pdflastximage pdflastximagecolordepth pdflastximagepages pdflastxpos \
-pdflastypos pdflinkmargin pdfliteral pdfmapfile pdfmapline \
-pdfminorversion pdfnames pdfnoligatures pdfnormaldeviate pdfobj \
-pdfobjcompresslevel pdfoptionpdfminorversion pdfoutline pdfoutput pdfpageattr \
-pdfpagebox pdfpageheight pdfpageref pdfpageresources pdfpagesattr \
-pdfpagewidth pdfpkmode pdfpkresolution pdfprimitive pdfprotrudechars \
-pdfpxdimen pdfrandomseed pdfrefobj pdfrefxform pdfrefximage \
-pdfreplacefont pdfrestore pdfretval pdfsave pdfsavepos \
-pdfsetmatrix pdfsetrandomseed pdfstartlink pdfstartthread pdftexbanner \
-pdftexrevision pdftexversion pdfthread pdfthreadmargin pdftracingfonts \
+expandafter expanded expandglyphsinfont fam fi \
+finalhyphendemerits firstmark firstmarks floatingpenalty font \
+fontchardp fontcharht fontcharic fontcharwd fontdimen \
+firstvalidlanguage fontid fontname formatname futurelet \
+gdef gleaders global globaldefs glueexpr \
+glueshrink glueshrinkorder gluestretch gluestretchorder gluetomu \
+halign hangafter hangindent hbadness hbox \
+hfil hfill hfilneg hfuzz hoffset \
+holdinginserts hrule hsize hskip hss \
+ht hyphenation hyphenchar hyphenpenalty if \
+ifabsdim ifabsnum ifcase ifcat ifcsname \
+ifdefined ifdim ifeof iffalse iffontchar \
+ifhbox ifhmode ifincsname ifinner ifmmode \
+ifnum ifodd ifpdfabsdim ifpdfabsnum ifpdfprimitive \
+ifprimitive iftrue ifvbox ifvmode ifvoid \
+ifx ignoreligaturesinfont ignorespaces immediate indent \
+initcatcodetable input inputlineno insert insertpenalties \
+interactionmode interlinepenalties interlinepenalty jobname kern \
+language lastbox lastkern lastlinefit lastnodetype \
+lastpenalty lastsavedboxresourceindex lastsavedimageresourceindex lastsavedimageresourcepages lastskip \
+lastxpos lastypos latelua lccode leaders \
+left leftghost lefthyphenmin leftmarginkern leftskip \
+leqno let letcharcode letterspacefont limits \
+linepenalty lineskip lineskiplimit localbrokenpenalty localinterlinepenalty \
+localleftbox localrightbox long looseness lower \
+lowercase lpcode luaescapestring luatexbanner luatexrevision \
+luatexversion mag mark marks mathaccent \
+mathbin mathchar mathchardef mathchoice mathclose \
+mathcode mathdir mathdisplayskipmode matheqnogapstep mathinner \
+mathop mathopen mathoption mathord mathpunct \
+mathrel mathscriptsmode mathstyle mathsurroundskip mathsurround \
+maxdeadcycles maxdepth meaning medmuskip message \
+middle mkern month moveleft moveright \
+mskip muexpr multiply muskip muskipdef \
+mutoglue newlinechar noalign noboundary noexpand \
+noindent nokerns nohrule noligs nospaces \
+novrule nolimits nolocaldirs nolocalwhatsits nonscript \
+nonstopmode normaldeviate nulldelimiterspace nullfont number \
+numexpr odelcode odelimiter omathaccent omathchar \
+omathchardef omathcode omit openin openout \
+or oradical outer output outputbox \
+outputpenalty over overfullrule overline overwithdelims \
+pagebottomoffset pagedepth pagedir pagediscards pagefilllstretch \
+pagefillstretch pagefilstretch pagegoal pageheight pageleftoffset \
+pagerightoffset pageshrink pagestretch pagetopoffset pagetotal \
+pagewidth par pardir parfillskip parindent \
+parshape parshapedimen parshapeindent parshapelength parskip \
+patterns pausing pdfadjustspacing pdfannot pdfcatalog \
+pdfcolorstack pdfcolorstackinit pdfcompresslevel pdfcopyfont pdfcreationdate \
+pdfdecimaldigits pdfdest pdfdestmargin pdfdraftmode pdfeachlineheight \
+pdfeachlinedepth pdfendlink pdfendthread pdfextension pdfvariable \
+pdffirstlineheight pdffontattr pdffontexpand pdffontname pdffontobjnum \
+pdffontsize pdfxformmargin pdfgamma pdfgentounicode pdfglyphtounicode \
+pdfhorigin pdfignoreddimen pdfimageaddfilename pdfimageapplygamma pdfimagegamma \
+pdfimagehicolor pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfinclusionerrorlevel \
+pdfignoreunknownimages pdfinfo pdfinfoomitdate pdftrailerid pdfinsertht \
+pdflastannot pdflastlinedepth pdflastlink pdflastobj pdflastxform \
+pdflastximage pdflastximagepages pdflastxpos pdflastypos pdflinkmargin \
+pdfliteral pdfmapfile pdfmapline pdfminorversion pdfnames \
+pdfnoligatures pdfnormaldeviate pdfobj pdfobjcompresslevel pdfoutline \
+pdfoutput pdfpageattr pdfpagebox pdfpageheight pdfpageref \
+pdfpageresources pdfpagesattr pdfpagewidth pdfpkmode pdfpkresolution \
+pdfpkfixeddpi pdfprimitive pdfprotrudechars pdfpxdimen pdfrandomseed \
+pdfrefobj pdfrefxform pdfrefximage pdfreplacefont pdfrestore \
+pdfretval pdfsave pdfsavepos pdfsetmatrix pdfsetrandomseed \
+pdfstartlink pdfstartthread pdftexbanner pdftexrevision pdftexversion \
+pdfsuppressptexinfo pdfsuppressoptionalinfo pdfthread pdfthreadmargin pdftracingfonts \
pdftrailer pdfuniformdeviate pdfuniqueresname pdfvorigin pdfxform \
-pdfxformattr pdfxformname pdfxformresources pdfximage pdfximagebbox \
-penalty postdisplaypenalty postexhyphenchar posthyphenchar predisplaydirection \
-predisplaypenalty predisplaysize preexhyphenchar prehyphenchar pretolerance \
-prevdepth prevgraf primitive protected quitvmode \
-radical raise read readline relax \
-relpenalty right rightghost righthyphenmin rightmarginkern \
-rightskip romannumeral rpcode savecatcodetable savinghyphcodes \
-savingvdiscards scantextokens scantokens scriptfont scriptscriptfont \
-scriptscriptstyle scriptspace scriptstyle scrollmode setbox \
-setlanguage sfcode shipout show showbox \
-showboxbreadth showboxdepth showgroups showifs showlists \
-showthe showtokens skewchar skip skipdef \
-spacefactor spaceskip span special splitbotmark \
-splitbotmarks splitdiscards splitfirstmark splitfirstmarks splitmaxdepth \
-splittopskip string suppressfontnotfounderror suppressifcsnameerror suppresslongerror \
-suppressoutererror synctex tabskip tagcode textdir \
-textfont textstyle the thickmuskip thinmuskip \
-time toks toksdef tolerance topmark \
-topmarks topskip tracingassigns tracingcommands tracinggroups \
-tracingifs tracinglostchars tracingmacros tracingnesting tracingonline \
-tracingoutput tracingpages tracingparagraphs tracingrestores tracingscantokens \
-tracingstats uccode uchyph underline unexpanded \
-unhbox unhcopy unkern unless unpenalty \
-unskip unvbox unvcopy uppercase vadjust \
-valign vbadness vbox vcenter vfil \
-vfill vfilneg vfuzz voffset vrule \
-vsize vskip vsplit vss vtop \
-wd widowpenalties widowpenalty write xdef \
-xleaders xspaceskip year
+pdfxformattr pdfxformname pdfxformresources pdfximage penalty \
+postdisplaypenalty postexhyphenchar posthyphenchar predisplaydirection predisplaypenalty \
+predisplaysize preexhyphenchar prehyphenchar pretolerance prevdepth \
+prevgraf primitive protected protrudechars protrusionboundary \
+pxdimen quitvmode radical raise randomseed \
+read readline relax relpenalty right \
+rightghost righthyphenmin rightmarginkern rightskip romannumeral \
+rpcode saveboxresource saveimageresource savepos savecatcodetable \
+savinghyphcodes savingvdiscards scantextokens scantokens scriptfont \
+scriptscriptfont scriptscriptstyle scriptspace scriptstyle scrollmode \
+setbox setfontid setlanguage setrandomseed sfcode \
+shipout show showbox showboxbreadth showboxdepth \
+showgroups showifs showlists showthe showtokens \
+skewchar skip skipdef spacefactor spaceskip \
+span special splitbotmark splitbotmarks splitdiscards \
+splitfirstmark splitfirstmarks splitmaxdepth splittopskip string \
+suppressfontnotfounderror suppressifcsnameerror suppresslongerror suppressoutererror synctex \
+tabskip tagcode textdir textfont textstyle \
+the thickmuskip thinmuskip time toks \
+toksdef tolerance topmark topmarks topskip \
+tracingassigns tracingcommands tracingfonts tracinggroups tracingifs \
+tracinglostchars tracingmacros tracingnesting tracingonline tracingoutput \
+tracingpages tracingparagraphs tracingrestores tracingscantokens tracingstats \
+uccode uchyph underline unexpanded unhbox \
+unhcopy uniformdeviate unkern unless unpenalty \
+unskip unvbox unvcopy uppercase useboxresource \
+useimageresource vadjust valign vbadness vbox \
+vcenter vfil vfill vfilneg vfuzz \
+voffset vrule vsize vskip vsplit \
+vss vtop wd widowpenalties widowpenalty \
+wordboundary write xdef xleaders xspaceskip \
+year vpack hpack tpack csstring \
+begincsname lastnamedcs toksapp tokspre etoksapp \
+etokspre
keywordclass.tex.xetex=\
XeTeXversion
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context-external.properties b/Master/texmf-dist/context/data/scite/context/scite-context-external.properties
index b48f2552543..06e71643267 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context-external.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context-external.properties
@@ -41,6 +41,7 @@ lexer.*.lpeg=lpeg
file.patterns.cweb=*.w;*.ww;
file.patterns.cpp=*.h;*.c;*.hh;*.cc;*.hpp;*.cpp;*.hxx;*.cxx;
file.patterns.bib=*.bib
+file.patterns.sql=*.sql
lexer.$(file.patterns.metapost)=lpeg_scite-context-lexer-mps
lexer.$(file.patterns.metafun)=lpeg_scite-context-lexer-mps
@@ -52,6 +53,7 @@ lexer.$(file.patterns.pdf)=lpeg_scite-context-lexer-pdf
lexer.$(file.patterns.cweb)=lpeg_scite-context-lexer-web
lexer.$(file.patterns.cpp)=lpeg_scite-context-lexer-cpp
lexer.$(file.patterns.bib)=lpeg_scite-context-lexer-bibtex
+lexer.$(file.patterns.sql)=lpeg_scite-context-lexer-sql
lexer.$(file.patterns.tex)=lpeg_scite-context-lexer-tex
lexer.$(file.patterns.xml)=lpeg_scite-context-lexer-xml
diff --git a/Master/texmf-dist/context/data/scite/context/scite-context.properties b/Master/texmf-dist/context/data/scite/context/scite-context.properties
index f1deb9df5f6..d034c5e7fb0 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-context.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-context.properties
@@ -457,7 +457,7 @@ tabbar.visible=1
tabbar.hide.one=0
tabbar.multiline=1
-buffers=100
+buffers=256
load.on.activate=1
check.if.already.open=1
tabbar.multiline=1
diff --git a/Master/texmf-dist/context/data/scite/context/scite-ctx.properties b/Master/texmf-dist/context/data/scite/context/scite-ctx.properties
index 874a381e349..0b791f008e7 100644
--- a/Master/texmf-dist/context/data/scite/context/scite-ctx.properties
+++ b/Master/texmf-dist/context/data/scite/context/scite-ctx.properties
@@ -55,6 +55,14 @@ ctx.menulist.example=\
reset=reset_text|\
strip=toggle_strip
+ctx.menulist.cweb=\
+ wrap=wrap_text|\
+ sort=sort_text
+
+ctx.menulist.cpp=\
+ wrap=wrap_text|\
+ sort=sort_text
+
ctx.wraptext.length=80
ctx.spellcheck.language=auto
@@ -97,6 +105,20 @@ command.groupundo.21.$(file.patterns.example)=yes
command.save.before.21.$(file.patterns.example)=2
command.shortcut.21.$(file.patterns.example)=Shift+F11
+command.name.21.$(file.patterns.cweb)=CWEB Action List
+command.subsystem.21.$(file.patterns.cweb)=3
+command.21.$(file.patterns.cweb)=show_menu $(ctx.menulist.cweb)
+command.groupundo.21.$(file.patterns.cweb)=yes
+command.save.before.21.$(file.patterns.cweb)=2
+command.shortcut.21.$(file.patterns.cweb)=Shift+F11
+
+command.name.21.$(file.patterns.cpp)=C Action List
+command.subsystem.21.$(file.patterns.cpp)=3
+command.21.$(file.patterns.cpp)=show_menu $(ctx.menulist.cpp)
+command.groupundo.21.$(file.patterns.cpp)=yes
+command.save.before.21.$(file.patterns.cpp)=2
+command.shortcut.21.$(file.patterns.cpp)=Shift+F11
+
#~ command.name.21.*=CTX Action List
#~ command.subsystem.21.*=3
#~ command.21.*=show_menu $(ctx.menulist.default)
diff --git a/Master/texmf-dist/doc/context/documents/general/columnsets/columnsets.pdf b/Master/texmf-dist/doc/context/documents/general/columnsets/columnsets.pdf
new file mode 100644
index 00000000000..0d4e862f1a7
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/columnsets/columnsets.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.epub b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.epub
index 2fc6200ff25..a40c054d358 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.epub
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.epub
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.pdf
index 9a390cb92fe..78b8f1b99ba 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv-demo.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv.pdf
index 1045056cdaa..7ac31386b1d 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/epub-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/languages-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/languages-mkiv.pdf
new file mode 100644
index 00000000000..f48bf930de6
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/languages-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/lua-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/lua-mkiv.pdf
new file mode 100644
index 00000000000..2c1e444e316
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/lua-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/luatex.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/luatex.pdf
new file mode 100644
index 00000000000..61ff94bfba6
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/ma-cb-en.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/ma-cb-en.pdf
new file mode 100644
index 00000000000..6ad164eb06c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/ma-cb-en.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/mreadme.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/mreadme.pdf
index d27bbaedfd8..35aca89fc8d 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/mreadme.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/mreadme.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/spacing-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/spacing-mkiv.pdf
new file mode 100644
index 00000000000..c717e6abfe4
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/spacing-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/sql-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/sql-mkiv.pdf
new file mode 100644
index 00000000000..bf6013d33a7
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/sql-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/swiglib-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/swiglib-mkiv.pdf
index 3e146f9d1a3..c61666845a5 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/swiglib-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/swiglib-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/templates-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/templates-mkiv.pdf
new file mode 100644
index 00000000000..02a4aee0de5
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/templates-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/tiptrick.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/tiptrick.pdf
index 85bfda8938b..6455b07f88b 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/tiptrick.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/tiptrick.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/tools-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/tools-mkiv.pdf
index 563b35aac0d..53118457e8c 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/tools-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/tools-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/units-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/units-mkiv.pdf
index f931d6d6b0a..5631be78e72 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/units-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/units-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/workflows-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/workflows-mkiv.pdf
index 3a2caaede4c..9b8e1f142c2 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/workflows-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/workflows-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/xml-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/xml-mkiv.pdf
new file mode 100644
index 00000000000..7305fb7a822
--- /dev/null
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/xml-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/documents/general/manuals/xtables-mkiv.pdf b/Master/texmf-dist/doc/context/documents/general/manuals/xtables-mkiv.pdf
index d3550c0ee66..9dbf4469e5c 100644
--- a/Master/texmf-dist/doc/context/documents/general/manuals/xtables-mkiv.pdf
+++ b/Master/texmf-dist/doc/context/documents/general/manuals/xtables-mkiv.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/ctxtools.man b/Master/texmf-dist/doc/context/scripts/mkii/ctxtools.man
index 38f10ef7c62..a741aca56be 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/ctxtools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/ctxtools.man
@@ -1,4 +1,4 @@
-.TH "ctxtools" "1" "01-01-2015" "version 1.3.5" "CtxTools"
+.TH "ctxtools" "1" "01-01-2016" "version 1.3.5" "CtxTools"
.SH NAME
.B ctxtools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/imgtopdf.man b/Master/texmf-dist/doc/context/scripts/mkii/imgtopdf.man
index 864cf5a981b..220cbd4a7a5 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/imgtopdf.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/imgtopdf.man
@@ -1,4 +1,4 @@
-.TH "imgtopdf" "1" "01-01-2015" "version 1.1.2" "ImgToPdf"
+.TH "imgtopdf" "1" "01-01-2016" "version 1.1.2" "ImgToPdf"
.SH NAME
.B imgtopdf
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/pdftools.man b/Master/texmf-dist/doc/context/scripts/mkii/pdftools.man
index f63bf7e39eb..acb3b8c9205 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/pdftools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/pdftools.man
@@ -1,4 +1,4 @@
-.TH "pdftools" "1" "01-01-2015" "version 1.2.1" "PDFTools"
+.TH "pdftools" "1" "01-01-2016" "version 1.2.1" "PDFTools"
.SH NAME
.B pdftools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/pstopdf.man b/Master/texmf-dist/doc/context/scripts/mkii/pstopdf.man
index 8203e76cc19..628903964fe 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/pstopdf.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/pstopdf.man
@@ -1,4 +1,4 @@
-.TH "pstopdf" "1" "01-01-2015" "version 2.0.1" "PStoPDF"
+.TH "pstopdf" "1" "01-01-2016" "version 2.0.1" "PStoPDF"
.SH NAME
.B pstopdf
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/rlxtools.man b/Master/texmf-dist/doc/context/scripts/mkii/rlxtools.man
index 58e7032d8dd..0810b3a356a 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/rlxtools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/rlxtools.man
@@ -1,4 +1,4 @@
-.TH "rlxtools" "1" "01-01-2015" "version 1.0.1" "RlxTools"
+.TH "rlxtools" "1" "01-01-2016" "version 1.0.1" "RlxTools"
.SH NAME
.B rlxtools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/texexec.man b/Master/texmf-dist/doc/context/scripts/mkii/texexec.man
index 841622bcda1..a2c3325d0e3 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/texexec.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/texexec.man
@@ -1,4 +1,4 @@
-.TH "texexec" "1" "01-01-2015" "version 6.2.1" "TeXExec"
+.TH "texexec" "1" "01-01-2016" "version 6.2.1" "TeXExec"
.SH NAME
.B texexec
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/texmfstart.man b/Master/texmf-dist/doc/context/scripts/mkii/texmfstart.man
index 8a3a75b64a5..90a0f915212 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/texmfstart.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/texmfstart.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2015" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/textools.man b/Master/texmf-dist/doc/context/scripts/mkii/textools.man
index c256969fddd..17830ffaea3 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/textools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/textools.man
@@ -1,4 +1,4 @@
-.TH "textools" "1" "01-01-2015" "version 1.3.1" "TeXTools"
+.TH "textools" "1" "01-01-2016" "version 1.3.1" "TeXTools"
.SH NAME
.B textools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/texutil.man b/Master/texmf-dist/doc/context/scripts/mkii/texutil.man
index c92f51a6fb4..c8062b7f68a 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/texutil.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/texutil.man
@@ -1,4 +1,4 @@
-.TH "texutil" "1" "01-01-2015" "version 9.1.0" "TeXUtil"
+.TH "texutil" "1" "01-01-2016" "version 9.1.0" "TeXUtil"
.SH NAME
.B texutil
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/tmftools.man b/Master/texmf-dist/doc/context/scripts/mkii/tmftools.man
index 780efb7ebfb..f6c0d7dfee6 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/tmftools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/tmftools.man
@@ -1,4 +1,4 @@
-.TH "tmftools" "1" "01-01-2015" "version 1.1.0" "TMFTools"
+.TH "tmftools" "1" "01-01-2016" "version 1.1.0" "TMFTools"
.SH NAME
.B tmftools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkii/xmltools.man b/Master/texmf-dist/doc/context/scripts/mkii/xmltools.man
index d43cc1a03ad..7596f20ac76 100644
--- a/Master/texmf-dist/doc/context/scripts/mkii/xmltools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkii/xmltools.man
@@ -1,4 +1,4 @@
-.TH "xmltools" "1" "01-01-2015" "version 1.2.2" "XMLTools"
+.TH "xmltools" "1" "01-01-2016" "version 1.2.2" "XMLTools"
.SH NAME
.B xmltools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/context.html b/Master/texmf-dist/doc/context/scripts/mkiv/context.html
index b409de6e738..3161eac7250 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/context.html
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/context.html
@@ -14,7 +14,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>ConTeXt Process Management 0.61</title>
+ <title>ConTeXt Process Management 0.63</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type="text/css">
body { color: #FFFFFF; background-color: #808080; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans; font-size: 12px; line-height: 18px; } a:link, a:active, a:visited { color: #FFFFFF; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF; text-decoration: underline; } .valid { color: #00FF00; } .invalid { color: #FF0000; } button, .commonlink, .smallbutton { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; border-color: #7F7F7F; border-style: solid; border-width: .125ex; background-color: #FFFFFF; padding: .5ex; } .smallbutton { width: 1em; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; } h1, .title { font-style: normal; font-weight: normal; font-size: 18px; line-height: 18px; margin-bottom: 20px; } h2, .subtitle { font-style: normal; font-weight: normal; font-size: 12px; margin-top: 18px; margin-bottom: 18px; } table { line-height: 18px; font-size: 12px; margin: 0; } th { font-weight: bold; text-align: left; padding-bottom: 6px; } .tc { font-weight: bold; text-align: left; } p, li { max-width: 60em; } .empty-line { margin-top: 4px; } .more-room { margin-right: 1.5em; } .much-more-room { margin-right: 3em; } #main { position: absolute; left: 10%; top: 10%; right: 10%; bottom: 10%; z-index: 2; width: 80%; height: 80%; padding: 0%; margin: 0%; overflow: auto; border-style: none; border-width: 0; background-color: #3F3F3F; } #main-settings { margin: 12px; x_max-width: 60em; line-height: 18px; font-size: 12px; } #left { position: absolute; top : 10%; left: 0%; bottom: 0%; right: 90%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; } #right { position: absolute; top : 0%; left: 90%; bottom: 10%; right: 0%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; _margin-left: -15px; } #bottom { position: absolute; left: 10%; right: 0%; top: 90%; bottom: 0%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top { position: absolute; left: 0%; right: 10%; top: 0%; bottom: 90%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #top-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: right; vertical-align: middle; } #bottom-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #bottom-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: left; vertical-align: middle; } #left-one { position: absolute; width: 100%; buggedheight: 100%; } #left-two { position: relative; margin-top: 12px; line-height: 18px; text-align: center; vertical-align: top; } #right-one { display: table; height: 100%; width: 100%; } #right-two { display: table-row; height: 100%; width: 100%; } #right-three { display: table-cell; width: 100%; vertical-align: bottom; _position: absolute; _top: 100%; } #right-four { text-align: center; margin-bottom: 2ex; _position: relative; _top: -100%; } #more-top { position: absolute; top: 0%; left: 90%; bottom: 90%; right: 0%; z-index: 3; width: 10%; height: 10%; padding: 0%; margin: 0%; border-style: none; border-width: 0; } #more-top-settings { text-align: center; } #more-right-settings { margin-right: 12px; margin-left: 12px; line-height: 18px; font-size: 10px; text-align: center; } #right-safari { _display: table; width: 100%; height: 100%; }
@@ -24,7 +24,7 @@
</head>
<body>
<div id="top"> <div id="top-one">
- <div id="top-two">ConTeXt Process Management 0.61 </div>
+ <div id="top-two">ConTeXt Process Management 0.63 </div>
</div>
</div>
<div id="bottom"> <div id="bottom-one">
@@ -44,6 +44,7 @@
<tr><th>--make</th><td></td><td>create context formats</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--ctx=name</th><td></td><td>use ctx file (process management specification)</td></tr>
+ <tr><th>--noctx</th><td></td><td>ignore ctx directives and flags</td></tr>
<tr><th>--interface</th><td></td><td>use specified user interface (default: en)</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--autopdf</th><td></td><td>close pdf file in viewer and start pdf viewer afterwards</td></tr>
@@ -81,6 +82,8 @@
<tr><th>--batchmode</th><td></td><td>run without stopping and do not show messages on the console</td></tr>
<tr><th>--nonstopmode</th><td></td><td>run without stopping</td></tr>
<tr><th>--synctex</th><td></td><td>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</td></tr>
+ <tr><th>--nodates</th><td></td><td>omit runtime dates in pdf file</td></tr>
+ <tr><th>--trailerid</th><td></td><td>alternative trailer id (or constant one)</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--generate</th><td></td><td>generate file database etc. (as luatools does)</td></tr>
<tr><th>--paranoid</th><td></td><td>do not descend to .. and ../..</td></tr>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/context.man b/Master/texmf-dist/doc/context/scripts/mkiv/context.man
index 0c2f607f21d..f1c552832c2 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/context.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2015" "version 0.60" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -20,6 +20,9 @@ create context formats
.B --ctx=name
use ctx file (process management specification)
.TP
+.B --noctx
+ignore ctx directives and flags
+.TP
.B --interface
use specified user interface (default: en)
.TP
@@ -110,6 +113,12 @@ run without stopping
.B --synctex
run with synctex enabled (optional value: zipped, unzipped, 1, -1)
.TP
+.B --nodates
+omit runtime dates in pdf file
+.TP
+.B --trailerid
+alternative trailer id (or constant one)
+.TP
.B --generate
generate file database etc. (as luatools does)
.TP
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/context.xml b/Master/texmf-dist/doc/context/scripts/mkiv/context.xml
index c4109328900..f5a67424165 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/context.xml
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/context.xml
@@ -4,7 +4,7 @@
<metadata>
<entry name="name">mtx-context</entry>
<entry name="detail">ConTeXt Process Management</entry>
- <entry name="version">0.60</entry>
+ <entry name="version">0.62</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -21,6 +21,9 @@
<flag name="ctx=name">
<short>use ctx file (process management specification)</short>
</flag>
+ <flag name="noctx">
+ <short>ignore ctx directives and flags</short>
+ </flag>
<flag name="interface">
<short>use specified user interface (default: en)</short>
</flag>
@@ -125,6 +128,12 @@
<flag name="synctex">
<short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
</flag>
+ <flag name="nodates">
+ <short>omit runtime dates in pdf file</short>
+ </flag>
+ <flag name="trailerid">
+ <short>alternative trailer id (or constant one)</short>
+ </flag>
</subcategory>
<subcategory>
<flag name="generate">
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/luatools.man b/Master/texmf-dist/doc/context/scripts/mkiv/luatools.man
index ecdd6aa326a..bcf7fb5142e 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/luatools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/luatools.man
@@ -1,4 +1,4 @@
-.TH "luatools" "1" "01-01-2015" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "luatools" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B luatools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-babel.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-babel.man
index 8477eb522e2..a0a3f312f41 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-babel.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-babel.man
@@ -1,4 +1,4 @@
-.TH "mtx-babel" "1" "01-01-2015" "version 1.20" "Babel Input To UTF Conversion"
+.TH "mtx-babel" "1" "01-01-2016" "version 1.20" "Babel Input To UTF Conversion"
.SH NAME
.B mtx-babel
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-base.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-base.man
index 08e13b09d67..fdd239c68db 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-base.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-base.man
@@ -1,4 +1,4 @@
-.TH "mtx-base" "1" "01-01-2015" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "mtx-base" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B mtx-base
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.html
new file mode 100644
index 00000000000..61a6797161c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<!-- compare with lmx framework variant -->
+
+<!--
+ filename : context-base.xml
+ comment : companion to mtx-server-ctx-startup.tex
+ author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+ copyright: PRAGMA ADE / ConTeXt Development Team
+ license : see context related readme files
+-->
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>bibtex helpers</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <style type="text/css">
+ body { color: #FFFFFF; background-color: #808080; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans; font-size: 12px; line-height: 18px; } a:link, a:active, a:visited { color: #FFFFFF; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF; text-decoration: underline; } .valid { color: #00FF00; } .invalid { color: #FF0000; } button, .commonlink, .smallbutton { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; border-color: #7F7F7F; border-style: solid; border-width: .125ex; background-color: #FFFFFF; padding: .5ex; } .smallbutton { width: 1em; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; } h1, .title { font-style: normal; font-weight: normal; font-size: 18px; line-height: 18px; margin-bottom: 20px; } h2, .subtitle { font-style: normal; font-weight: normal; font-size: 12px; margin-top: 18px; margin-bottom: 18px; } table { line-height: 18px; font-size: 12px; margin: 0; } th { font-weight: bold; text-align: left; padding-bottom: 6px; } .tc { font-weight: bold; text-align: left; } p, li { max-width: 60em; } .empty-line { margin-top: 4px; } .more-room { margin-right: 1.5em; } .much-more-room { margin-right: 3em; } #main { position: absolute; left: 10%; top: 10%; right: 10%; bottom: 10%; z-index: 2; width: 80%; height: 80%; padding: 0%; margin: 0%; overflow: auto; border-style: none; border-width: 0; background-color: #3F3F3F; } #main-settings { margin: 12px; x_max-width: 60em; line-height: 18px; font-size: 12px; } #left { position: absolute; top : 10%; left: 0%; bottom: 0%; right: 90%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; } #right { position: absolute; top : 0%; left: 90%; bottom: 10%; right: 0%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; _margin-left: -15px; } #bottom { position: absolute; left: 10%; right: 0%; top: 90%; bottom: 0%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top { position: absolute; left: 0%; right: 10%; top: 0%; bottom: 90%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #top-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: right; vertical-align: middle; } #bottom-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #bottom-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: left; vertical-align: middle; } #left-one { position: absolute; width: 100%; buggedheight: 100%; } #left-two { position: relative; margin-top: 12px; line-height: 18px; text-align: center; vertical-align: top; } #right-one { display: table; height: 100%; width: 100%; } #right-two { display: table-row; height: 100%; width: 100%; } #right-three { display: table-cell; width: 100%; vertical-align: bottom; _position: absolute; _top: 100%; } #right-four { text-align: center; margin-bottom: 2ex; _position: relative; _top: -100%; } #more-top { position: absolute; top: 0%; left: 90%; bottom: 90%; right: 0%; z-index: 3; width: 10%; height: 10%; padding: 0%; margin: 0%; border-style: none; border-width: 0; } #more-top-settings { text-align: center; } #more-right-settings { margin-right: 12px; margin-left: 12px; line-height: 18px; font-size: 10px; text-align: center; } #right-safari { _display: table; width: 100%; height: 100%; }
+ </style>
+ <style type="text/css">
+ </style>
+ </head>
+ <body>
+ <div id="top"> <div id="top-one">
+ <div id="top-two">bibtex helpers </div>
+ </div>
+ </div>
+ <div id="bottom"> <div id="bottom-one">
+ <div id="bottom-two">wiki: http://contextgarden.net | mail: ntg-context@ntg.nl | website: http://www.pragma-ade.nl</div>
+ </div>
+ </div>
+ <div id="left"></div>
+ <div id="right"></div>
+ <div id="main">
+ <div id='main-settings'>
+ <h1>Command line options</h1>
+<table>
+ <tr><th style="width: 10em">flag</th><th style="width: 8em">value</th><th>description</th></tr>
+ <tr><th/><td/><td/></tr>
+ <tr><th>--toxml</th><td></td><td>convert bibtex database(s) to xml</td></tr>
+ <tr><th>--tolua</th><td></td><td>convert bibtex database(s) to lua</td></tr>
+ <tr><th>--search</th><td></td><td>seatch bibtex database(s)</td></tr>
+ </table>
+<br/>
+<h1>Example</h1>
+<tt>mtxrun --script bibtex --tolua bibl-001.bib</tt>
+<br/><tt>mtxrun --script bibtex --tolua --simple bibl-001.bib</tt>
+<br/><tt>mtxrun --script bibtex --toxml bibl-001.bib bibl-002.bib bibl-003.bib biblio.xml</tt>
+<br/><tt>mtxrun --script bibtex --search --list --pattern=match(author:foo) bar.bib</tt>
+<br/><br/> </div>
+ </div>
+ </body>
+ </html>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.man
new file mode 100644
index 00000000000..7fdb304a59c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.man
@@ -0,0 +1,33 @@
+.TH "mtx-bibtex" "1" "01-01-2016" "version 1.00" "bibtex helpers"
+.SH NAME
+.B mtx-bibtex
+.SH SYNOPSIS
+.B mtxrun --script bibtex [
+.I OPTIONS ...
+.B ] [
+.I FILENAMES
+.B ]
+.SH DESCRIPTION
+.B bibtex helpers
+.SH OPTIONS
+.TP
+.B --toxml
+convert bibtex database(s) to xml
+.TP
+.B --tolua
+convert bibtex database(s) to lua
+.TP
+.B --search
+seatch bibtex database(s)
+.SH AUTHOR
+More information about ConTeXt and the tools that come with it can be found at:
+
+
+.B "maillist:"
+ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
+
+.B "webpage:"
+http://www.pragma-ade.nl / http://tex.aanhet.net
+
+.B "wiki:"
+http://contextgarden.net
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.xml
new file mode 100644
index 00000000000..5c28b946a64
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-bibtex.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-bibtex</entry>
+ <entry name="detail">bibtex helpers</entry>
+ <entry name="version">1.00</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="toxml"><short>convert bibtex database(s) to xml</short></flag>
+ <flag name="tolua"><short>convert bibtex database(s) to lua</short></flag>
+ <flag name="search"><short>seatch bibtex database(s)</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+ <examples>
+ <category>
+ <title>Example</title>
+ <subcategory>
+ <example><command>mtxrun --script bibtex --tolua bibl-001.bib</command></example>
+ <example><command>mtxrun --script bibtex --tolua --simple bibl-001.bib</command></example>
+ <example><command>mtxrun --script bibtex --toxml bibl-001.bib bibl-002.bib bibl-003.bib biblio.xml</command></example>
+ <example><command>mtxrun --script bibtex --search --list --pattern=match(author:foo) bar.bib</command></example>
+ </subcategory>
+ </category>
+ </examples>
+</application>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-cache.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-cache.man
index cc448a5c817..91c9aa45e92 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-cache.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-cache.man
@@ -1,4 +1,4 @@
-.TH "mtx-cache" "1" "01-01-2015" "version 0.10" "ConTeXt & MetaTeX Cache Management"
+.TH "mtx-cache" "1" "01-01-2016" "version 0.10" "ConTeXt & MetaTeX Cache Management"
.SH NAME
.B mtx-cache
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-chars.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-chars.man
index 5c9d79bb3b8..f05536430ef 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-chars.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-chars.man
@@ -1,4 +1,4 @@
-.TH "mtx-chars" "1" "01-01-2015" "version 0.10" "MkII Character Table Generators"
+.TH "mtx-chars" "1" "01-01-2016" "version 0.10" "MkII Character Table Generators"
.SH NAME
.B mtx-chars
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-check.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-check.man
index ca18bc1a601..85a352d04a5 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-check.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-check.man
@@ -1,4 +1,4 @@
-.TH "mtx-check" "1" "01-01-2015" "version 0.10" "Basic ConTeXt Syntax Checking"
+.TH "mtx-check" "1" "01-01-2016" "version 0.10" "Basic ConTeXt Syntax Checking"
.SH NAME
.B mtx-check
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-colors.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-colors.man
index a969e474cbc..9d1de2b357c 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-colors.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-colors.man
@@ -1,4 +1,4 @@
-.TH "mtx-colors" "1" "01-01-2015" "version 0.10" "ConTeXt Color Management"
+.TH "mtx-colors" "1" "01-01-2016" "version 0.10" "ConTeXt Color Management"
.SH NAME
.B mtx-colors
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.html
index b409de6e738..3161eac7250 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.html
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.html
@@ -14,7 +14,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>ConTeXt Process Management 0.61</title>
+ <title>ConTeXt Process Management 0.63</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type="text/css">
body { color: #FFFFFF; background-color: #808080; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans; font-size: 12px; line-height: 18px; } a:link, a:active, a:visited { color: #FFFFFF; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF; text-decoration: underline; } .valid { color: #00FF00; } .invalid { color: #FF0000; } button, .commonlink, .smallbutton { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; border-color: #7F7F7F; border-style: solid; border-width: .125ex; background-color: #FFFFFF; padding: .5ex; } .smallbutton { width: 1em; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; } h1, .title { font-style: normal; font-weight: normal; font-size: 18px; line-height: 18px; margin-bottom: 20px; } h2, .subtitle { font-style: normal; font-weight: normal; font-size: 12px; margin-top: 18px; margin-bottom: 18px; } table { line-height: 18px; font-size: 12px; margin: 0; } th { font-weight: bold; text-align: left; padding-bottom: 6px; } .tc { font-weight: bold; text-align: left; } p, li { max-width: 60em; } .empty-line { margin-top: 4px; } .more-room { margin-right: 1.5em; } .much-more-room { margin-right: 3em; } #main { position: absolute; left: 10%; top: 10%; right: 10%; bottom: 10%; z-index: 2; width: 80%; height: 80%; padding: 0%; margin: 0%; overflow: auto; border-style: none; border-width: 0; background-color: #3F3F3F; } #main-settings { margin: 12px; x_max-width: 60em; line-height: 18px; font-size: 12px; } #left { position: absolute; top : 10%; left: 0%; bottom: 0%; right: 90%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; } #right { position: absolute; top : 0%; left: 90%; bottom: 10%; right: 0%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; _margin-left: -15px; } #bottom { position: absolute; left: 10%; right: 0%; top: 90%; bottom: 0%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top { position: absolute; left: 0%; right: 10%; top: 0%; bottom: 90%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #top-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: right; vertical-align: middle; } #bottom-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #bottom-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: left; vertical-align: middle; } #left-one { position: absolute; width: 100%; buggedheight: 100%; } #left-two { position: relative; margin-top: 12px; line-height: 18px; text-align: center; vertical-align: top; } #right-one { display: table; height: 100%; width: 100%; } #right-two { display: table-row; height: 100%; width: 100%; } #right-three { display: table-cell; width: 100%; vertical-align: bottom; _position: absolute; _top: 100%; } #right-four { text-align: center; margin-bottom: 2ex; _position: relative; _top: -100%; } #more-top { position: absolute; top: 0%; left: 90%; bottom: 90%; right: 0%; z-index: 3; width: 10%; height: 10%; padding: 0%; margin: 0%; border-style: none; border-width: 0; } #more-top-settings { text-align: center; } #more-right-settings { margin-right: 12px; margin-left: 12px; line-height: 18px; font-size: 10px; text-align: center; } #right-safari { _display: table; width: 100%; height: 100%; }
@@ -24,7 +24,7 @@
</head>
<body>
<div id="top"> <div id="top-one">
- <div id="top-two">ConTeXt Process Management 0.61 </div>
+ <div id="top-two">ConTeXt Process Management 0.63 </div>
</div>
</div>
<div id="bottom"> <div id="bottom-one">
@@ -44,6 +44,7 @@
<tr><th>--make</th><td></td><td>create context formats</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--ctx=name</th><td></td><td>use ctx file (process management specification)</td></tr>
+ <tr><th>--noctx</th><td></td><td>ignore ctx directives and flags</td></tr>
<tr><th>--interface</th><td></td><td>use specified user interface (default: en)</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--autopdf</th><td></td><td>close pdf file in viewer and start pdf viewer afterwards</td></tr>
@@ -81,6 +82,8 @@
<tr><th>--batchmode</th><td></td><td>run without stopping and do not show messages on the console</td></tr>
<tr><th>--nonstopmode</th><td></td><td>run without stopping</td></tr>
<tr><th>--synctex</th><td></td><td>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</td></tr>
+ <tr><th>--nodates</th><td></td><td>omit runtime dates in pdf file</td></tr>
+ <tr><th>--trailerid</th><td></td><td>alternative trailer id (or constant one)</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--generate</th><td></td><td>generate file database etc. (as luatools does)</td></tr>
<tr><th>--paranoid</th><td></td><td>do not descend to .. and ../..</td></tr>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.man
index 0c2f607f21d..f1c552832c2 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2015" "version 0.60" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -20,6 +20,9 @@ create context formats
.B --ctx=name
use ctx file (process management specification)
.TP
+.B --noctx
+ignore ctx directives and flags
+.TP
.B --interface
use specified user interface (default: en)
.TP
@@ -110,6 +113,12 @@ run without stopping
.B --synctex
run with synctex enabled (optional value: zipped, unzipped, 1, -1)
.TP
+.B --nodates
+omit runtime dates in pdf file
+.TP
+.B --trailerid
+alternative trailer id (or constant one)
+.TP
.B --generate
generate file database etc. (as luatools does)
.TP
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.xml
index c4109328900..f5a67424165 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.xml
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-context.xml
@@ -4,7 +4,7 @@
<metadata>
<entry name="name">mtx-context</entry>
<entry name="detail">ConTeXt Process Management</entry>
- <entry name="version">0.60</entry>
+ <entry name="version">0.62</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -21,6 +21,9 @@
<flag name="ctx=name">
<short>use ctx file (process management specification)</short>
</flag>
+ <flag name="noctx">
+ <short>ignore ctx directives and flags</short>
+ </flag>
<flag name="interface">
<short>use specified user interface (default: en)</short>
</flag>
@@ -125,6 +128,12 @@
<flag name="synctex">
<short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
</flag>
+ <flag name="nodates">
+ <short>omit runtime dates in pdf file</short>
+ </flag>
+ <flag name="trailerid">
+ <short>alternative trailer id (or constant one)</short>
+ </flag>
</subcategory>
<subcategory>
<flag name="generate">
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-epub.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-epub.man
index bb33c23df29..f40501270ae 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-epub.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-epub.man
@@ -1,4 +1,4 @@
-.TH "mtx-epub" "1" "01-01-2015" "version 1.10" "ConTeXt EPUB Helpers"
+.TH "mtx-epub" "1" "01-01-2016" "version 1.10" "ConTeXt EPUB Helpers"
.SH NAME
.B mtx-epub
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fcd.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fcd.man
index 311f90e4a8a..80d8670e4b8 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fcd.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fcd.man
@@ -1,4 +1,4 @@
-.TH "mtx-fcd" "1" "01-01-2015" "version 1.00" "Fast Directory Change"
+.TH "mtx-fcd" "1" "01-01-2016" "version 1.00" "Fast Directory Change"
.SH NAME
.B mtx-fcd
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-flac.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-flac.man
index 4ab875899c6..693cb71ed72 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-flac.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-flac.man
@@ -1,4 +1,4 @@
-.TH "mtx-flac" "1" "01-01-2015" "version 0.10" "ConTeXt Flac Helpers"
+.TH "mtx-flac" "1" "01-01-2016" "version 0.10" "ConTeXt Flac Helpers"
.SH NAME
.B mtx-flac
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.html
index 97a16c79a0e..e4548b2559d 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.html
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.html
@@ -39,7 +39,8 @@
<table>
<tr><th style="width: 10em">flag</th><th style="width: 8em">value</th><th>description</th></tr>
<tr><th/><td/><td/></tr>
- <tr><th>--save</th><td></td><td>save open type font in raw table</td></tr>
+ <tr><th>--save</th><td></td><td>save open type font in raw table (ff format)</td></tr>
+ <tr><th>--convert</th><td></td><td>save open type font in raw table (ctx format)</td></tr>
<tr><th>--unpack</th><td></td><td>save a tma file in a more readable format</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--reload</th><td></td><td>generate new font database (use --force when in doubt)</td></tr>
@@ -55,6 +56,8 @@
<tr><th>--info</th><td></td><td>give more details</td></tr>
<tr><th>--trackers</th><td>list</td><td>enable trackers</td></tr>
<tr><th>--statistics</th><td></td><td>some info about the database</td></tr>
+ <tr><th>--names</th><td></td><td>use name instead of unicodes</td></tr>
+ <tr><th>--cache</th><td>str</td><td>use specific cache (otl or otf)</td></tr>
</table>
<br/>
<h1>Examples</h1>
@@ -71,6 +74,9 @@
<br/><tt>mtxrun --script font --list --file somename</tt>
<br/><tt>mtxrun --script font --list --file --all somename</tt>
<br/><tt>mtxrun --script font --list --file --pattern=*somename*</tt>
+<br/><br/><tt>mtxrun --script font --save texgyrepagella-regular.otf</tt>
+<br/><tt>mtxrun --script font --convert texgyrepagella-regular.otf</tt>
+<br/><tt>mtxrun --script font --convert --names texgyrepagella-regular.otf</tt>
<br/><br/> </div>
</div>
</body>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.man
index c0806a32c8c..676ca17ab08 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.man
@@ -1,4 +1,4 @@
-.TH "mtx-fonts" "1" "01-01-2015" "version 0.21" "ConTeXt Font Database Management"
+.TH "mtx-fonts" "1" "01-01-2016" "version 0.21" "ConTeXt Font Database Management"
.SH NAME
.B mtx-fonts
.SH SYNOPSIS
@@ -12,7 +12,10 @@
.SH OPTIONS
.TP
.B --save
-save open type font in raw table
+save open type font in raw table (ff format)
+.TP
+.B --convert
+save open type font in raw table (ctx format)
.TP
.B --unpack
save a tma file in a more readable format
@@ -49,6 +52,12 @@ enable trackers
.TP
.B --statistics
some info about the database
+.TP
+.B --names
+use name instead of unicodes
+.TP
+.B --cache=str
+use specific cache (otl or otf)
.SH AUTHOR
More information about ConTeXt and the tools that come with it can be found at:
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.xml
index c3c571ca82b..8541c8dfb99 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.xml
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-fonts.xml
@@ -8,7 +8,8 @@
<flags>
<category name="basic">
<subcategory>
- <flag name="save"><short>save open type font in raw table</short></flag>
+ <flag name="save"><short>save open type font in raw table (ff format)</short></flag>
+ <flag name="convert"><short>save open type font in raw table (ctx format)</short></flag>
<flag name="unpack"><short>save a tma file in a more readable format</short></flag>
</subcategory>
<subcategory>
@@ -27,6 +28,8 @@
<flag name="info"><short>give more details</short></flag>
<flag name="trackers" value="list"><short>enable trackers</short></flag>
<flag name="statistics"><short>some info about the database</short></flag>
+ <flag name="names"><short>use name instead of unicodes</short></flag>
+ <flag name="cache" value="str"><short>use specific cache (otl or otf)</short></flag>
</subcategory>
</category>
</flags>
@@ -54,6 +57,11 @@
<example><command>mtxrun --script font --list --file --all somename</command></example>
<example><command>mtxrun --script font --list --file --pattern=*somename*</command></example>
</subcategory>
+ <subcategory>
+ <example><command>mtxrun --script font --save texgyrepagella-regular.otf</command></example>
+ <example><command>mtxrun --script font --convert texgyrepagella-regular.otf</command></example>
+ <example><command>mtxrun --script font --convert --names texgyrepagella-regular.otf</command></example>
+ </subcategory>
</category>
</examples>
</application>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-grep.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-grep.man
index 6b85f541fd3..2a3d3031615 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-grep.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-grep.man
@@ -1,4 +1,4 @@
-.TH "mtx-grep" "1" "01-01-2015" "version 0.10" "Simple Grepper"
+.TH "mtx-grep" "1" "01-01-2016" "version 0.10" "Simple Grepper"
.SH NAME
.B mtx-grep
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.html
index baafab87da0..468342893b0 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.html
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.html
@@ -39,9 +39,7 @@
<table>
<tr><th style="width: 10em">flag</th><th style="width: 8em">value</th><th>description</th></tr>
<tr><th/><td/><td/></tr>
- <tr><th>--interfaces</th><td></td><td>generate context interface files</td></tr>
- <tr><th>--messages</th><td></td><td>generate context message files</td></tr>
- <tr><th>--labels</th><td></td><td>generate context label files</td></tr>
+ <tr><th>--interfaces</th><td></td><td>generate context mkii interface files</td></tr>
<tr><th/><td/><td/></tr>
<tr><th>--context</th><td></td><td>equals --interfaces --messages --languages</td></tr>
<tr><th/><td/><td/></tr>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.man
index 36bf8bc138b..2b21c8dba69 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.man
@@ -1,4 +1,4 @@
-.TH "mtx-interface" "1" "01-01-2015" "version 0.13" "ConTeXt Interface Related Goodies"
+.TH "mtx-interface" "1" "01-01-2016" "version 0.13" "ConTeXt Interface Related Goodies"
.SH NAME
.B mtx-interface
.SH SYNOPSIS
@@ -12,13 +12,7 @@
.SH OPTIONS
.TP
.B --interfaces
-generate context interface files
-.TP
-.B --messages
-generate context message files
-.TP
-.B --labels
-generate context label files
+generate context mkii interface files
.TP
.B --context
equals --interfaces --messages --languages
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.xml
index 6150215f6bb..495154004f3 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.xml
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-interface.xml
@@ -8,9 +8,7 @@
<flags>
<category name="basic">
<subcategory>
- <flag name="interfaces"><short>generate context interface files</short></flag>
- <flag name="messages"><short>generate context message files</short></flag>
- <flag name="labels"><short>generate context label files</short></flag>
+ <flag name="interfaces"><short>generate context mkii interface files</short></flag>
</subcategory>
<subcategory>
<flag name="context"><short>equals <ref name="interfaces"/> <ref name="messages"/> <ref name="languages"/></short></flag>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metapost.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metapost.man
index 37b1b7c9f3a..ca712c7f847 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metapost.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metapost.man
@@ -1,4 +1,4 @@
-.TH "mtx-metapost" "1" "01-01-2015" "version 0.10" "MetaPost to PDF processor"
+.TH "mtx-metapost" "1" "01-01-2016" "version 0.10" "MetaPost to PDF processor"
.SH NAME
.B mtx-metapost
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metatex.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metatex.man
index 72635044ff6..68e090031d1 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metatex.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-metatex.man
@@ -1,4 +1,4 @@
-.TH "mtx-metatex" "1" "01-01-2015" "version 0.10" "MetaTeX Process Management"
+.TH "mtx-metatex" "1" "01-01-2016" "version 0.10" "MetaTeX Process Management"
.SH NAME
.B mtx-metatex
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-modules.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-modules.man
index a51a1b00e22..1e1e34fc2eb 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-modules.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-modules.man
@@ -1,4 +1,4 @@
-.TH "mtx-modules" "1" "01-01-2015" "version 1.00" "ConTeXt Module Documentation Generators"
+.TH "mtx-modules" "1" "01-01-2016" "version 1.00" "ConTeXt Module Documentation Generators"
.SH NAME
.B mtx-modules
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-package.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-package.man
index 83c140f35f7..dfd8d21f095 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-package.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-package.man
@@ -1,4 +1,4 @@
-.TH "mtx-package" "1" "01-01-2015" "version 0.10" "Distribution Related Goodies"
+.TH "mtx-package" "1" "01-01-2016" "version 0.10" "Distribution Related Goodies"
.SH NAME
.B mtx-package
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-patterns.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-patterns.man
index e93c1aff063..fd0088cca09 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-patterns.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-patterns.man
@@ -1,4 +1,4 @@
-.TH "mtx-patterns" "1" "01-01-2015" "version 0.20" "ConTeXt Pattern File Management"
+.TH "mtx-patterns" "1" "01-01-2016" "version 0.20" "ConTeXt Pattern File Management"
.SH NAME
.B mtx-patterns
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-pdf.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-pdf.man
index 29b5ad420c2..60fa91e50f3 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-pdf.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-pdf.man
@@ -1,4 +1,4 @@
-.TH "mtx-pdf" "1" "01-01-2015" "version 0.10" "ConTeXt PDF Helpers"
+.TH "mtx-pdf" "1" "01-01-2016" "version 0.10" "ConTeXt PDF Helpers"
.SH NAME
.B mtx-pdf
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-plain.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-plain.man
index c2e0e0bd9d5..174402377e5 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-plain.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-plain.man
@@ -1,4 +1,4 @@
-.TH "mtx-plain" "1" "01-01-2015" "version 1.00" "Plain TeX Runner"
+.TH "mtx-plain" "1" "01-01-2016" "version 1.00" "Plain TeX Runner"
.SH NAME
.B mtx-plain
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-profile.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-profile.man
index 6aa8e2087a4..d095634155a 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-profile.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-profile.man
@@ -1,4 +1,4 @@
-.TH "mtx-profile" "1" "01-01-2015" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
+.TH "mtx-profile" "1" "01-01-2016" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
.SH NAME
.B mtx-profile
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-rsync.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-rsync.man
index 195b6b0f0e4..7297ace5060 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-rsync.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-rsync.man
@@ -1,4 +1,4 @@
-.TH "mtx-rsync" "1" "01-01-2015" "version 0.10" "Rsync Helpers"
+.TH "mtx-rsync" "1" "01-01-2016" "version 0.10" "Rsync Helpers"
.SH NAME
.B mtx-rsync
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-scite.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-scite.man
index cbaed08d1bc..f88d4b01677 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-scite.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-scite.man
@@ -1,4 +1,4 @@
-.TH "mtx-scite" "1" "01-01-2015" "version 1.00" "Scite Helper Script"
+.TH "mtx-scite" "1" "01-01-2016" "version 1.00" "Scite Helper Script"
.SH NAME
.B mtx-scite
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-server.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-server.man
index f3d3ae6e429..3c115c0c159 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-server.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-server.man
@@ -1,4 +1,4 @@
-.TH "mtx-server" "1" "01-01-2015" "version 0.10" "Simple Webserver For Helpers"
+.TH "mtx-server" "1" "01-01-2016" "version 0.10" "Simple Webserver For Helpers"
.SH NAME
.B mtx-server
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-texworks.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-texworks.man
index b9cc2ed98d7..1422b802a5d 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-texworks.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-texworks.man
@@ -1,4 +1,4 @@
-.TH "mtx-texworks" "1" "01-01-2015" "version 1.00" "TeXworks Startup Script"
+.TH "mtx-texworks" "1" "01-01-2016" "version 1.00" "TeXworks Startup Script"
.SH NAME
.B mtx-texworks
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-timing.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-timing.man
index 2f7584f3da7..9a5b987903b 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-timing.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-timing.man
@@ -1,4 +1,4 @@
-.TH "mtx-timing" "1" "01-01-2015" "version 0.10" "ConTeXt Timing Tools"
+.TH "mtx-timing" "1" "01-01-2016" "version 0.10" "ConTeXt Timing Tools"
.SH NAME
.B mtx-timing
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-tools.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-tools.man
index 408d467cdbf..b828f48d0d9 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-tools.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-tools.man
@@ -1,4 +1,4 @@
-.TH "mtx-tools" "1" "01-01-2015" "version 1.01" "Some File Related Goodies"
+.TH "mtx-tools" "1" "01-01-2016" "version 1.01" "Some File Related Goodies"
.SH NAME
.B mtx-tools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.html
new file mode 100644
index 00000000000..c042b28c0e4
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<!-- compare with lmx framework variant -->
+
+<!--
+ filename : context-base.xml
+ comment : companion to mtx-server-ctx-startup.tex
+ author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+ copyright: PRAGMA ADE / ConTeXt Development Team
+ license : see context related readme files
+-->
+
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>Checker for char-def.lua 1.02</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <style type="text/css">
+ body { color: #FFFFFF; background-color: #808080; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans; font-size: 12px; line-height: 18px; } a:link, a:active, a:visited { color: #FFFFFF; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF; text-decoration: underline; } .valid { color: #00FF00; } .invalid { color: #FF0000; } button, .commonlink, .smallbutton { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; border-color: #7F7F7F; border-style: solid; border-width: .125ex; background-color: #FFFFFF; padding: .5ex; } .smallbutton { width: 1em; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; } h1, .title { font-style: normal; font-weight: normal; font-size: 18px; line-height: 18px; margin-bottom: 20px; } h2, .subtitle { font-style: normal; font-weight: normal; font-size: 12px; margin-top: 18px; margin-bottom: 18px; } table { line-height: 18px; font-size: 12px; margin: 0; } th { font-weight: bold; text-align: left; padding-bottom: 6px; } .tc { font-weight: bold; text-align: left; } p, li { max-width: 60em; } .empty-line { margin-top: 4px; } .more-room { margin-right: 1.5em; } .much-more-room { margin-right: 3em; } #main { position: absolute; left: 10%; top: 10%; right: 10%; bottom: 10%; z-index: 2; width: 80%; height: 80%; padding: 0%; margin: 0%; overflow: auto; border-style: none; border-width: 0; background-color: #3F3F3F; } #main-settings { margin: 12px; x_max-width: 60em; line-height: 18px; font-size: 12px; } #left { position: absolute; top : 10%; left: 0%; bottom: 0%; right: 90%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; } #right { position: absolute; top : 0%; left: 90%; bottom: 10%; right: 0%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; _margin-left: -15px; } #bottom { position: absolute; left: 10%; right: 0%; top: 90%; bottom: 0%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top { position: absolute; left: 0%; right: 10%; top: 0%; bottom: 90%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #top-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: right; vertical-align: middle; } #bottom-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #bottom-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: left; vertical-align: middle; } #left-one { position: absolute; width: 100%; buggedheight: 100%; } #left-two { position: relative; margin-top: 12px; line-height: 18px; text-align: center; vertical-align: top; } #right-one { display: table; height: 100%; width: 100%; } #right-two { display: table-row; height: 100%; width: 100%; } #right-three { display: table-cell; width: 100%; vertical-align: bottom; _position: absolute; _top: 100%; } #right-four { text-align: center; margin-bottom: 2ex; _position: relative; _top: -100%; } #more-top { position: absolute; top: 0%; left: 90%; bottom: 90%; right: 0%; z-index: 3; width: 10%; height: 10%; padding: 0%; margin: 0%; border-style: none; border-width: 0; } #more-top-settings { text-align: center; } #more-right-settings { margin-right: 12px; margin-left: 12px; line-height: 18px; font-size: 10px; text-align: center; } #right-safari { _display: table; width: 100%; height: 100%; }
+ </style>
+ <style type="text/css">
+ </style>
+ </head>
+ <body>
+ <div id="top"> <div id="top-one">
+ <div id="top-two">Checker for char-def.lua 1.02 </div>
+ </div>
+ </div>
+ <div id="bottom"> <div id="bottom-one">
+ <div id="bottom-two">wiki: http://contextgarden.net | mail: ntg-context@ntg.nl | website: http://www.pragma-ade.nl</div>
+ </div>
+ </div>
+ <div id="left"></div>
+ <div id="right"></div>
+ <div id="main">
+ <div id='main-settings'>
+ <h1>Command line options</h1>
+<table>
+ <tr><th style="width: 10em">flag</th><th style="width: 8em">value</th><th>description</th></tr>
+ <tr><th/><td/><td/></tr>
+ <tr><th>--whatever</th><td></td><td>do whatever</td></tr>
+ </table>
+<br/>
+ </div>
+ </div>
+ </body>
+ </html>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.man
new file mode 100644
index 00000000000..4f520b9b8f9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.man
@@ -0,0 +1,27 @@
+.TH "mtx-unicode" "1" "01-01-2016" "version 1.02" "Checker for char-dat.lua"
+.SH NAME
+.B mtx-unicode
+.SH SYNOPSIS
+.B mtxrun --script unicode [
+.I OPTIONS ...
+.B ] [
+.I FILENAMES
+.B ]
+.SH DESCRIPTION
+.B Checker for char-dat.lua
+.SH OPTIONS
+.TP
+.B --whatever
+do whatever
+.SH AUTHOR
+More information about ConTeXt and the tools that come with it can be found at:
+
+
+.B "maillist:"
+ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
+
+.B "webpage:"
+http://www.pragma-ade.nl / http://tex.aanhet.net
+
+.B "wiki:"
+http://contextgarden.net
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.xml
new file mode 100644
index 00000000000..2ab23f58244
--- /dev/null
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unicode.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-unicode</entry>
+ <entry name="detail">Checker for char-dat.lua</entry>
+ <entry name="version">1.02</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="whatever"><short>do whatever</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unzip.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unzip.man
index d9e2c844760..548ca1dc35e 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unzip.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-unzip.man
@@ -1,4 +1,4 @@
-.TH "mtx-unzip" "1" "01-01-2015" "version 0.10" "Simple Unzipper"
+.TH "mtx-unzip" "1" "01-01-2016" "version 0.10" "Simple Unzipper"
.SH NAME
.B mtx-unzip
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.html b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.html
index 1cc6bd3af39..feae398eca3 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.html
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.html
@@ -57,6 +57,7 @@
<tr><th>--state</th><td></td><td>update tree using saved state</td></tr>
<tr><th>--cygwin</th><td></td><td>adapt drive specs to cygwin</td></tr>
<tr><th>--mingw</th><td></td><td>assume mingw binaries being used</td></tr>
+ <tr><th>--silent</th><td></td><td>less (or no) logging</td></tr>
</table>
<br/>
</div>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.man
index e27c2ab43f0..3a3ca6ae85b 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.man
@@ -1,4 +1,4 @@
-.TH "mtx-update" "1" "01-01-2015" "version 1.02" "ConTeXt Minimals Updater"
+.TH "mtx-update" "1" "01-01-2016" "version 1.02" "ConTeXt Minimals Updater"
.SH NAME
.B mtx-update
.SH SYNOPSIS
@@ -64,6 +64,9 @@ adapt drive specs to cygwin
.TP
.B --mingw
assume mingw binaries being used
+.TP
+.B --silent
+less (or no) logging
.SH AUTHOR
More information about ConTeXt and the tools that come with it can be found at:
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.xml b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.xml
index c5d9205c383..00be476fbad 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.xml
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-update.xml
@@ -26,6 +26,7 @@
<flag name="state"><short>update tree using saved state</short></flag>
<flag name="cygwin"><short>adapt drive specs to cygwin</short></flag>
<flag name="mingw"><short>assume mingw binaries being used</short></flag>
+ <flag name="silent"><short>less (or no) logging</short></flag>
</subcategory>
</category>
</flags>
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-watch.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-watch.man
index d8fab3acd5b..1fcb090d061 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-watch.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-watch.man
@@ -1,4 +1,4 @@
-.TH "mtx-watch" "1" "01-01-2015" "version 1.00" "ConTeXt Request Watchdog"
+.TH "mtx-watch" "1" "01-01-2016" "version 1.00" "ConTeXt Request Watchdog"
.SH NAME
.B mtx-watch
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-youless.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-youless.man
index 2703ec34f79..d360430bdb9 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtx-youless.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtx-youless.man
@@ -1,4 +1,4 @@
-.TH "mtx-youless" "1" "01-01-2015" "version 1.00" "youless Fetcher"
+.TH "mtx-youless" "1" "01-01-2016" "version 1.00" "youless Fetcher"
.SH NAME
.B mtx-youless
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/scripts/mkiv/mtxrun.man b/Master/texmf-dist/doc/context/scripts/mkiv/mtxrun.man
index 8a3a75b64a5..90a0f915212 100644
--- a/Master/texmf-dist/doc/context/scripts/mkiv/mtxrun.man
+++ b/Master/texmf-dist/doc/context/scripts/mkiv/mtxrun.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2015" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-000.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-000.tex
new file mode 100644
index 00000000000..429a067de44
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-000.tex
@@ -0,0 +1,63 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[visual]
+\usemodule[simulate]
+
+\dontcomplain
+
+\startenvironment columnsets-000
+
+\useMPlibrary[dum]
+
+\setupbodyfont
+ [palatino]
+
+\setuplayout
+ [grid=yes]
+
+\setuplayout
+ [backspace=20mm,
+ cutspace=15mm,
+ width=middle,
+ height=middle]
+
+\setupsystem
+ [random=1234]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupheadertexts
+ [pagenumber][right]
+ [left][pagenumber]
+
+\setupfootertexts
+ [\inputfilename]
+
+\setupfooter
+ [style=\tttf]
+
+\setuptolerance
+ [verytolerant,stretch]
+
+\definecolor[color-1][.5(red,green)]
+\definecolor[color-2][.5(green,blue)]
+\definecolor[color-3][.5(blue,red)]
+\definecolor[color-4][.5(white,black)]
+\definecolor[color-5][.5(white,color-4)]
+
+\startuniqueMPgraphic{frame}
+ fill OverlayBox withcolor \MPcolor{color-1} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{contrast}
+ fill OverlayBox withcolor \MPcolor{color-3} ;
+\stopuniqueMPgraphic
+
+\defineoverlay[frame] [\uniqueMPgraphic{frame}]
+\defineoverlay[contrast][\uniqueMPgraphic{contrast}]
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-001.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-001.tex
new file mode 100644
index 00000000000..689f4e04499
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-001.tex
@@ -0,0 +1,17 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{20}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-002.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-002.tex
new file mode 100644
index 00000000000..a67dd3161e5
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-002.tex
@@ -0,0 +1,17 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][nleft=3,nright=2,width=5cm]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-003.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-003.tex
new file mode 100644
index 00000000000..eed0286f8a9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-003.tex
@@ -0,0 +1,35 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2,page=left]
+
+\setupbackgrounds[text][background=color,backgroundcolor=color-1]
+
+\setupcolumnsetstart[example][1][1][2]
+\setupcolumnsetstart[example][1][2][4]
+\setupcolumnsetstart[example][2][1][6]
+\setupcolumnsetstart[example][2][2][6]
+\setupcolumnsetstart[example][3][1][4]
+\setupcolumnsetstart[example][3][2][2]
+
+\setupcolumnsetlines[example][1][1][-2]
+\setupcolumnsetlines[example][1][2][-4]
+\setupcolumnsetlines[example][2][1][-6]
+\setupcolumnsetlines[example][2][2][-6]
+\setupcolumnsetlines[example][3][1][-4]
+\setupcolumnsetlines[example][3][2][-2]
+\setupcolumnsetlines[example][4][1][4]
+\setupcolumnsetlines[example][4][2][10]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{20}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-004.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-004.tex
new file mode 100644
index 00000000000..a58ddf62194
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-004.tex
@@ -0,0 +1,32 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide] [n=2,background=contrast,color=white]
+\definecolumnsetspan[wider][n=4,background=contrast,color=white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wider]
+ wider: \dorecurse{2}{#1: \fakewords{25}{50}\par}
+ \stopcolumnsetspan
+
+ inbetween: \fakewords{25}{50}\par
+
+ \startcolumnsetspan[wide]
+ wide : \dorecurse{2}{#1: \fakewords{25}{50}\par}
+ \stopcolumnsetspan
+
+ after: \dorecurse{15}{#1: \fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-005.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-005.tex
new file mode 100644
index 00000000000..f1d970d9ea6
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-005.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\definecolor[fakerulecolor]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wide][default=btlr]
+
+ \startsimplecolumns
+ \dorecurse{2}{\fakewords{25}{40}\par}
+ \stopsimplecolumns
+
+ \stopcolumnsetspan
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-006.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-006.tex
new file mode 100644
index 00000000000..0336199708d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-006.tex
@@ -0,0 +1,35 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \fakewords{25}{50}
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \startcolumnsetspan[wide][default=btrl]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \dorecurse{15}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-007.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-007.tex
new file mode 100644
index 00000000000..137a414d96f
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-007.tex
@@ -0,0 +1,43 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\definecolor[fakerulecolor]
+
+\definecolumnsetspan[wide][n=2,background=contrast,color=white]
+
+\starttext
+
+\startbuffer
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \fakewords{25}{50}
+
+ \startcolumnsetspan[wide]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \startcolumnsetspan[wide][default=btrl]
+ \fakewords{25}{50}
+ \stopcolumnsetspan
+
+ \dorecurse{3}{\fakewords{100}{200}\par}
+
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse{4}{\getbuffer}
+
+ \dorecurse{5}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-101.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-101.tex
new file mode 100644
index 00000000000..f9c7b59cb47
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-101.tex
@@ -0,0 +1,30 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startbuffer
+\fakewords{100}{200}
+\placefigure
+ {}
+ {\externalfigure[placeholder][width=\columnsetspanwidth{1}]}
+\fakewords{100}{200}
+\placefigure
+ {}
+ {\externalfigure[placeholder][width=\columnsetspanwidth{2}]}
+\fakewords{100}{200}
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse {5}{\getbuffer}
+ \dorecurse{10}{\fakewords{100}{200}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-102.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-102.tex
new file mode 100644
index 00000000000..3cf4dcd0eae
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-102.tex
@@ -0,0 +1,36 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startbuffer
+\placefigure [tbrl]
+ {tblr}
+ {\externalfigure[fake][width=\columnsetspanwidth{1},lines=5]}
+\placefigure [fxtb:6*4]
+ {fxtb}
+ {\externalfigure[fake][width=\columnsetspanwidth{2},lines=5]}
+\placefigure [btlr]
+ {btlr}
+ {\externalfigure[fake][width=\columnsetspanwidth{2},lines=5]}
+\placefigure [btlr]
+ {btlr}
+ {\externalfigure[fake][width=\columnsetspanwidth{3},lines=5]}
+
+\dorecurse {5} {
+ \fakewords{100}{200}\par
+}
+\stopbuffer
+
+\startcolumnset[example]
+
+ \dorecurse{6}{\getbuffer}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-103.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-103.tex
new file mode 100644
index 00000000000..f1d4dbedc57
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-103.tex
@@ -0,0 +1,37 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\starttext
+
+\startcolumnset[example]
+
+\useexternalfigure[fake][fake][width=\textwidth,lines=3]
+
+\placefigure[btlr]{brlr}{\externalfigure[fake]}
+\placefigure[btlr]{brlr}{\externalfigure[fake]}
+\placefigure[btrl]{btrl}{\externalfigure[fake]}
+\placefigure[btrl]{btrl}{\externalfigure[fake]}
+\placefigure[tblr]{tblr}{\externalfigure[fake]}
+\placefigure[tblr]{tblr}{\externalfigure[fake]}
+\placefigure[tbrl]{tbrl}{\externalfigure[fake]}
+\placefigure[tbrl]{tbrl}{\externalfigure[fake]}
+
+\placefigure[lrbt]{lrbt}{\externalfigure[fake]}
+\placefigure[lrbt]{lrbt}{\externalfigure[fake]}
+\placefigure[lrtb]{lrtb}{\externalfigure[fake]}
+\placefigure[lrtb]{lrtb}{\externalfigure[fake]}
+\placefigure[rlbt]{rlbt}{\externalfigure[fake]}
+\placefigure[rlbt]{rlbt}{\externalfigure[fake]}
+\placefigure[rltb]{rltb}{\externalfigure[fake]}
+\placefigure[rltb]{rltb}{\externalfigure[fake]}
+
+\dorecurse{10}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-201.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-201.tex
new file mode 100644
index 00000000000..37b26c391db
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-201.tex
@@ -0,0 +1,31 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one]
+ [type=both,
+ x=1,y=1,nx=2,ny=6,
+ background=contrast,
+ state=repeat]
+
+\definecolumnsetarea
+ [two]
+ [type=both,
+ x=4,y=10,nx=1,ny=6,
+ background=contrast,
+ state=repeat]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{40}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-202.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-202.tex
new file mode 100644
index 00000000000..1721d9cbc88
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-202.tex
@@ -0,0 +1,32 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one][left]
+ [x=1,y=1,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\definecolumnsetarea
+ [two][right]
+ [x=3,y=1,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\definecolumnsetarea
+ [three][both]
+ [x=2,y=10,nx=2,ny=6,
+ background=contrast,state=repeat]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-203.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-203.tex
new file mode 100644
index 00000000000..6c15578bce9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-203.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [one]% [left]
+ [x=1,y=1,nx=6,ny=6,
+ background=contrast,state=start]
+
+\definecolumnsetarea
+ [two]%[left]
+ [x=3,y=10,nx=4,ny=6,
+ background=contrast,state=start]
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{50}{100}}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-204.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-204.tex
new file mode 100644
index 00000000000..d390f468e96
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-204.tex
@@ -0,0 +1,41 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[oldfun]
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,
+ color=white,
+ align={lohi,right},
+ state=start]
+
+\setupcolumnsetareatext
+ [title]
+ [\setups{the title}]
+
+\startsetups[the title]
+
+ \GapText
+ {\dimexpr\makeupwidth+\backspace\relax}
+ {6pt}
+ {RegularBold*default} {sa 4}
+ {A Title Spanni\+ng 2 Pages}
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-205.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-205.tex
new file mode 100644
index 00000000000..b5370977010
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-205.tex
@@ -0,0 +1,42 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\usemodule[oldfun]
+
+\environment columnsets-000
+
+\unprotected \def\SpreadGapText#1#2{{\def\+{\blackrule[\c!width=#1]}#2}}
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,
+ color=white,
+ align={lohi,right},
+ state=start]
+
+\setupcolumnsetareatext
+ [title]
+ [\setups{the title}]
+
+\startsetups[the title]
+
+ \GapText
+ {\dimexpr(\makeupwidth+\backspace)} {6pt}
+ {RegularBold} {sa 4}
+ {A Title Spanni\+ng 2 Pages}
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-206.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-206.tex
new file mode 100644
index 00000000000..8b9f524b1da
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-206.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [first]
+ [x=2,y=4,nx=2,ny=8,
+ background=contrast,
+ state=start]
+
+\definecolumnsetarea
+ [second]
+ [x=1,y=20,nx=1,ny=3,
+ background=contrast,
+ state=start]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{50}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-301.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-301.tex
new file mode 100644
index 00000000000..4d21f2b0216
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-301.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4]
+
+\starttext
+
+\startcolumnset[example]
+
+ 1: \fakewords{50}{75} \column
+ 2: [] \fakewords{50}{75} \column[yes]
+ 3: [yes] \fakewords{50}{75} \column[page]
+ \column[page] % redundant
+ 4: [page] \fakewords{50}{75} \column[3]
+ 5: [3] \fakewords{50}{75} \column[4]
+ 6: [4] \fakewords{50}{75} \column[first]
+ 7: [first] \fakewords{50}{75} \column[last]
+ 8: [last] \fakewords{50}{75} \page
+ 9: (page) \fakewords{50}{75} \page
+ \page % redundant
+ 10: (page) \fakewords{50}{75} \column[3*5]
+ 11: [3*5] \fakewords{50}{75}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-401.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-401.tex
new file mode 100644
index 00000000000..ee91e608cec
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-401.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:2][distance=36pt]
+\setupcolumnset[example:3][distance=72pt]
+\setupcolumnset[example:4][distance=24pt]
+\setupcolumnset[example:5][distance=48pt]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-402.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-402.tex
new file mode 100644
index 00000000000..00db6017cf1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-402.tex
@@ -0,0 +1,24 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[example] [distance=24pt]
+\setupcolumnset[example:1][distance=96pt]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-403.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-403.tex
new file mode 100644
index 00000000000..c9bc2e648cf
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-403.tex
@@ -0,0 +1,23 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example][width=.15\makeupwidth]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{25}{\fakewords{100}{150}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-404.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-404.tex
new file mode 100644
index 00000000000..05a25acfea1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-404.tex
@@ -0,0 +1,34 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[frame=on,framecolor=color-4,rulethickness=1mm]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:1][width=2cm]
+\setupcolumnset[example:2][width=4cm]
+\setupcolumnset[example:3][width=3cm]
+
+\setupcolumnset[example:4][width=3cm]
+\setupcolumnset[example:5][width=4cm]
+\setupcolumnset[example:6][width=6cm]
+
+\starttext
+
+\startcolumnset[example]
+
+\dorecurse{15}{
+ \dorecurse{3}{\fakewords{10}{15}\par}
+ \column[yes]
+}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-405.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-405.tex
new file mode 100644
index 00000000000..fa20ef34c6c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-405.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\setupcolumnset[frame=on,framecolor=color-4,rulethickness=1mm]
+
+\definecolor[fakerulecolor][white]
+
+\setupcolumnset[example:1][width=.3\makeupwidth]
+
+\starttext
+
+\startcolumnset[example]
+
+ \fakewords{150}{150}
+ \column
+ \fakewords{25}{50}
+
+ \dorecurse{25}{\fakewords{50}{75}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-601.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-601.tex
new file mode 100644
index 00000000000..b139210f424
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-601.tex
@@ -0,0 +1,29 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left,direction=reverse]
+
+\setupbackgrounds[text][text][background=contrast]
+
+\definecolor[fakerulecolor][color-1]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{50}{
+ \dontleavehmode
+ \snaptogrid\hbox
+ {\scale[height=2.5\lineheight]{\color[white]{#1}}}%
+ \space
+ \fakewords{30}{60}
+ %\simulatewords[n=30,m=60,min=1,max=5,color=color-1,line=yes]\par
+ \par
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-701.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-701.tex
new file mode 100644
index 00000000000..b2c50cfafea
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-701.tex
@@ -0,0 +1,23 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-702.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-702.tex
new file mode 100644
index 00000000000..5b9a879c114
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-702.tex
@@ -0,0 +1,27 @@
+content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\setupcolumnset
+ [example]
+ [background=contrast,
+ backgroundoffset=4pt,
+ frame=on,
+ framecolor=white,
+ rulethickness=2pt]
+
+\definecolor[fakerulecolor][white]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-703.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-703.tex
new file mode 100644
index 00000000000..549b49f611a
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-703.tex
@@ -0,0 +1,34 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=4,page=left]
+
+\definecolumnsetarea
+ [title][left]
+ [x=1,y=1,nx=8,ny=8,
+ background=contrast,state=repeat]
+
+\setupcolumnsetareatext
+ [title][left][\setups{cow}]
+
+\startsetups[cow]
+
+ \externalfigure
+ [cow.pdf]
+ [height=15\lineheight,
+ width=2\dimexpr\makeupwidth+\backspace\relax]
+
+\stopsetups
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{\fakewords{50}{100}\par}
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-704.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-704.tex
new file mode 100644
index 00000000000..7fa6cb313a9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-704.tex
@@ -0,0 +1,69 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\startuseMPgraphic{mpos:par:columns}
+ path p ; numeric h ;
+ for i=1 upto nofmultipars :
+ p := multipars[i] ;
+ h := bbheight(p) ;
+ if multikind[i] = "single" :
+ fill p topenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-1} shadedinto white ;
+ fill p bottomenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-1} ;
+ elseif multikind[i] = "first" :
+ fill p
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-2} shadedinto white ;
+ elseif multikind[i] = "middle" :
+ fill p topenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor \MPcolor{color-2} shadedinto white ;
+ fill p bottomenlarged -.5h
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-3} ;
+ elseif multikind[i] = "last" :
+ fill p
+ withshademethod "linear"
+ withshadedirection shadedup
+ withcolor white shadedinto \MPcolor{color-3} ;
+ fi ;
+ endfor ;
+\stopuseMPgraphic
+
+\definecolumnset
+ [example]
+ [n=4,
+ page=left]
+
+\definetextbackground
+ [shade]
+ [location=paragraph,
+ mp=mpos:par:columns,
+ before=\blank,
+ after=\blank]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse {40} {
+ \starttextbackground[shade]
+ \fakewords{10}{200}
+ \stoptextbackground
+ \par
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-801.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-801.tex
new file mode 100644
index 00000000000..1a84f99ab32
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-801.tex
@@ -0,0 +1,19 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2]
+\definecolumnset [example-2] [n=3]
+
+\starttext \showgrid
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-802.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-802.tex
new file mode 100644
index 00000000000..a126d001260
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-802.tex
@@ -0,0 +1,22 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-803.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-803.tex
new file mode 100644
index 00000000000..58a278bb144
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-803.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetlines[example-2][1][1][19]
+ \setupcolumnsetlines[example-2][1][2][18]
+ \setupcolumnsetlines[example-2][1][3][19]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-804.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-804.tex
new file mode 100644
index 00000000000..c2b7a6b1e8d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-804.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetlines[example-2][1][1] [0]
+ \setupcolumnsetlines[example-2][1][2][-2]
+ \setupcolumnsetlines[example-2][1][3] [0]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {6}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-805.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-805.tex
new file mode 100644
index 00000000000..fc80e7e9c86
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-805.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetstart[example-2][1][1][19]
+ \setupcolumnsetstart[example-2][1][2][17]
+ \setupcolumnsetstart[example-2][1][3][19]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-806.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-806.tex
new file mode 100644
index 00000000000..0322a336f68
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-806.tex
@@ -0,0 +1,26 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset [example-1] [n=2,balance=yes]
+\definecolumnset [example-2] [n=3,balance=yes]
+
+\starttext \showgrid
+
+ \setupcolumnsetlines[example-1][1][1] [8]
+ \setupcolumnsetlines[example-1][1][2][10]
+
+ \setupcolumnsetstart[example-2][1][1][29]
+ \setupcolumnsetstart[example-2][1][2][29]
+ \setupcolumnsetstart[example-2][1][3][29]
+
+ \startcolumnset [example-1]
+ \dorecurse {1}{\input tufte \par}
+ \stopcolumnset
+ \startcolumnset [example-2]
+ \dorecurse {2}{\input ward \par}
+ \stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-901.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-901.tex
new file mode 100644
index 00000000000..300458bf5ba
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-901.tex
@@ -0,0 +1,38 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=2,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-902.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-902.tex
new file mode 100644
index 00000000000..fda2969af62
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-902.tex
@@ -0,0 +1,38 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-903.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-903.tex
new file mode 100644
index 00000000000..68cd31ae205
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets-903.tex
@@ -0,0 +1,41 @@
+% content=tex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\environment columnsets-000
+
+\definecolumnset[example][n=3,page=left,distance=1cm]
+
+\setupcolumnset
+ [example]
+ [background=contrast]
+
+\definecolor[fakerulecolor][white] \faketriggertrue
+
+\setupblank
+ [line]
+
+\setuphead
+ [section]
+ [style=\bfd]
+
+\setuplinenumbering
+ [style=bold,
+ distance=0pt,
+ align=inner]
+
+\starttext
+
+\startcolumnset[example]
+
+ \dorecurse{30}{
+ \startsection[title=foo #1]
+ \startlinenumbering
+ \fakewords{50}{100}\par
+ \stoplinenumbering
+ \stopsection
+ }
+
+\stopcolumnset
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets.tex b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets.tex
new file mode 100644
index 00000000000..7d68872efd8
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/columnsets/columnsets/columnsets.tex
@@ -0,0 +1,873 @@
+% engine=luatex
+%
+% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
+
+\dontcomplain
+
+\definepagebreak[mine][yes]
+
+% A complete otf optima pack is too expensive for this (I only have the
+% type one set).
+%
+% \usetypescriptfile
+% [type-ghz]
+%
+% \usetypescript
+% [sans]
+% [optima-nova]
+%
+% \setupbodyfont
+% [optima-nova,11pt]
+%
+% \definefont[QuiteLarge][SansBold sa 3]
+% \definefont[NotSoLarge][SansBold sa 1.5]
+%
+% So we could use:
+%
+% \setupbodyfont
+% [pagella,11pt]
+%
+% \definefont[QuiteLarge][Bold sa 2.50]
+% \definefont[NotSoLarge][Bold sa 1.25]
+%
+% But this one has a matching sans:
+
+\setupbodyfont
+ [dejavu,11pt]
+
+\definefont[QuiteLarge][SansBold sa 2.50]
+\definefont[NotSoLarge][SansBold sa 1.25]
+
+\setuplayout
+ [backspace=.1\paperwidth,
+ topspace=.025\paperheight,
+ header=0.025\paperheight,
+ footer=0.025\paperheight,
+ headerdistance=0.025\paperheight,
+ footerdistance=0.025\paperheight,
+ width=middle,
+ height=middle]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupwhitespace
+ [line]
+
+\setupblank
+ [line]
+
+\setuptyping
+ [blank=halfline]
+
+\startsetups [pagenumber]
+ \hbox to .2\paperwidth {
+ \hss
+ Page \pagenumber
+ \hss
+ }
+\stopsetups
+
+\setupfooter [before=\vfill,after=\vfill,style=\bf,color=color-4]
+\setupheader [before=\vfill,after=\vfill,style=\bf,color=color-4]
+
+\setupfootertexts [] [\setups{pagenumber}]
+\setupheadertexts [] [\setups{chapterhead}]
+
+\startsetups [chapterhead]
+ \hbox to .2\paperwidth {
+ \hss
+ \getmarking[chapter]
+ \hss
+ }
+\stopsetups
+
+\setuphead
+ [chapter]
+ [header=empty]
+
+\definecolor[color-1][.5(red,green)]
+\definecolor[color-2][.5(green,blue)]
+\definecolor[color-3][.5(blue,red)]
+\definecolor[color-4][.5(white,black)]
+\definecolor[color-5][.5(white,color-4)]
+\definecolor[color-6][.2(white,color-4)]
+
+\startuseMPgraphic{page}
+StartPage ;
+ path p ;
+ numeric n; n := PageNumber ;
+ numeric w; w := bbwidth(Page) ;
+ numeric h; h := bbheight(Page) ;
+ def DrawBit (expr bit, dx, dy) =
+ path p ; p := unitsquare xyscaled(w/5,h/40) shifted (dx*w/10,dy*(h-h/40)) ;
+ if n div bit > 0 :
+ n := n - (n div bit)*bit ;
+ fill p withcolor \MPcolor{color-1} ;
+ else :
+ fill p withcolor \MPcolor{color-2} ;
+ fi ;
+ enddef ;
+ DrawBit(32,7,1) ;
+ DrawBit(16,4,1) ;
+ DrawBit( 8,1,1) ;
+ DrawBit( 4,7,0) ;
+ DrawBit( 2,4,0) ;
+ DrawBit( 1,1,0) ;
+StopPage ;
+\stopuseMPgraphic
+
+\startuniqueMPgraphic{frame}
+ fill OverlayBox withcolor \MPcolor{color-5} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{contrast}
+ fill OverlayBox withcolor \MPcolor{color-4} ;
+\stopuniqueMPgraphic
+
+\defineoverlay[page] [\useMPgraphic{page}]
+\defineoverlay[frame] [\useMPgraphic{frame}]
+\defineoverlay[contrast][\useMPgraphic{contrast}]
+
+\setupexternalfigures
+ [background=frame]
+
+\definecombination
+ [sixpages]
+ [%inbetween=\blank,
+ style=mono,
+ distance=.5\bodyfontsize,
+ width=\textwidth]
+
+\definecombination
+ [fourpages]
+ [%inbetween=\blank,
+ style=mono,
+ distance=.5\bodyfontsize,
+ width=\textwidth]
+
+\definecombination
+ [twopages]
+ [style=mono]
+
+\definemeasure[twopages] [\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[fourpages] [\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[eightpages][\dimexpr\dimexpr\textwidth-3 \bodyfontsize\relax/4\relax]
+\definemeasure[sixpages] [\dimexpr\dimexpr\textwidth-2.5\bodyfontsize\relax/6\relax]
+
+\starttexdefinition unexpanded OnePage #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][1*1]
+ {\typesetfile[#1.tex][page=1,lines=15]} {1}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded OneSpread #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][1*1]
+ {\typesetfile[#1.tex][page=2,lines=15]} {2}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded TwoPages #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][2*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{twopages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{twopages}]} {2}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded TwoSpread #1
+ \startlinecorrection[blank]
+ \startcombination[twopages][2*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{twopages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{twopages}]} {3}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded FourPages #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{fourpages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{fourpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{fourpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{fourpages}]} {4}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded FourSpread #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{fourpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{fourpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{fourpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{fourpages}]} {5}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded SixPages #1
+ \startlinecorrection[blank]
+ \startcombination[sixpages][6*1]
+ {\typesetfile[#1.tex][page=1,width=\measure{sixpages}]} {1}
+ {\typesetfile[#1.tex][page=2,width=\measure{sixpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{sixpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{sixpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{sixpages}]} {5}
+ {\typesetfile[#1.tex][page=6,width=\measure{sixpages}]} {6}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded SixSpread #1
+ \startlinecorrection[blank]
+ \startcombination[sixpages][6*1]
+ {\typesetfile[#1.tex][page=2,width=\measure{sixpages}]} {2}
+ {\typesetfile[#1.tex][page=3,width=\measure{sixpages}]} {3}
+ {\typesetfile[#1.tex][page=4,width=\measure{sixpages}]} {4}
+ {\typesetfile[#1.tex][page=5,width=\measure{sixpages}]} {5}
+ {\typesetfile[#1.tex][page=6,width=\measure{sixpages}]} {6}
+ {\typesetfile[#1.tex][page=7,width=\measure{sixpages}]} {7}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded EightPages #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*2]
+ {\typesetfile[#1.tex][page=1,width=\measure{eightpages}]} {#1 / 1}
+ {\typesetfile[#1.tex][page=2,width=\measure{eightpages}]} {#1 / 2}
+ {\typesetfile[#1.tex][page=3,width=\measure{eightpages}]} {#1 / 3}
+ {\typesetfile[#1.tex][page=4,width=\measure{eightpages}]} {#1 / 4}
+ {\typesetfile[#1.tex][page=5,width=\measure{eightpages}]} {#1 / 5}
+ {\typesetfile[#1.tex][page=6,width=\measure{eightpages}]} {#1 / 6}
+ {\typesetfile[#1.tex][page=7,width=\measure{eightpages}]} {#1 / 7}
+ {\typesetfile[#1.tex][page=8,width=\measure{eightpages}]} {#1 / 8}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\starttexdefinition unexpanded EightSpread #1
+ \startlinecorrection[blank]
+ \startcombination[fourpages][4*2]
+ {\typesetfile[#1.tex][page=2,width=\measure{eightpages}]} {#1 / 2}
+ {\typesetfile[#1.tex][page=3,width=\measure{eightpages}]} {#1 / 3}
+ {\typesetfile[#1.tex][page=4,width=\measure{eightpages}]} {#1 / 4}
+ {\typesetfile[#1.tex][page=5,width=\measure{eightpages}]} {#1 / 5}
+ {\typesetfile[#1.tex][page=6,width=\measure{eightpages}]} {#1 / 6}
+ {\typesetfile[#1.tex][page=7,width=\measure{eightpages}]} {#1 / 7}
+ {\typesetfile[#1.tex][page=8,width=\measure{eightpages}]} {#1 / 8}
+ {\typesetfile[#1.tex][page=9,width=\measure{eightpages}]} {#1 / 9}
+ \stopcombination
+ \stoplinecorrection
+\stoptexdefinition
+
+\setuphead
+ [chapter]
+ [style=\QuiteLarge,
+ color=color-3,
+ number=no]
+
+\setuplist
+ [chapter]
+ [command=\MyListCommand,
+ alternative=command]
+
+\starttexdefinition unexpanded MyListCommand #1#2#3
+ \snaptogrid
+ [line,-line]\vbox {
+ \tfb
+ \setstrut
+ \strut#2
+ \quad#3
+ }
+\stoptexdefinition
+
+\setupmargindata
+ [style=\tttf,
+ color=color-3]
+
+\starttexdefinition unexpanded ShowFile #1
+ \margintext
+ {\cldcontext{string.match("#1","\letterpercent d+")}}
+ \typefile
+ [range={environment}]
+ {#1}
+\stoptexdefinition
+
+% \typefile[range=4] {...}
+% \typefile[range={=}]{...} % start after comment lines
+
+\starttexdefinition unexpanded ShowEnvironmentFile #1
+ \margintext
+ {\cldcontext{string.match("#1","\letterpercent d+")}}
+ \typefile
+ [range={=startenvironment}]
+ {#1}
+\stoptexdefinition
+
+\startdocument
+
+\startMPpage
+StartPage ;
+ path p ; numeric w, h, d ; picture q ;
+ if true :
+ q := image(draw textext.urt("\ssbf COLUMNS") withcolor \MPcolor{color-6}) ;
+ else :
+ q := image(draw textext.urt("\ssbf COLUMNSETS") withcolor \MPcolor{color-6}) ;
+ fi ;
+ w := bbwidth(Page) ;
+ h := bbheight(Page) ;
+ d := h/100 ;
+ fill Page withcolor \MPcolor{color-1} ;
+ p := Page xysized (w,d) ;
+ for i := 5d step 2d until h-5d :
+ fill p shifted (0,i) withcolor \MPcolor{color-2} ;
+ endfor
+ p := Page xysized(w/10,h) ;
+ for i = 0, .3, .6, .9 :
+ fill p shifted (i*w,0) withcolor \MPcolor{color-1} withtransparency(1,.75) ;
+ endfor ;
+ def do_it(expr sz, sh) =
+ p := Page xysized sz ;
+ fill p shifted sh withcolor \MPcolor{color-3} withtransparency(1,.5) ;
+ draw q xysized (bbwidth(p),bbheight(p)) shifted sh ;
+ enddef ;
+ if true :
+ do_it ((2w/10,17d),(.1w,20d)) ;
+ do_it ((2w/10,15d),(.1w,56d)) ;
+ do_it ((2w/10,21d),(.4w,66d)) ;
+ do_it ((2w/10,13d),(.7w,38d)) ;
+ do_it ((5w/10,13d),(.4w,13d)) ;
+ draw textext.urt("\ssbf Hans Hagen")
+ xysized (5w/10,5d)
+ shifted (.4w,6d)
+ withcolor \MPcolor{color-5} ;
+ else :
+ do_it ((2w/10,17d),(.1w,15d)) ;
+ do_it ((2w/10,15d),(.1w,51d)) ;
+ do_it ((2w/10,21d),(.4w,61d)) ;
+ do_it ((2w/10,13d),(.7w,31d)) ;
+ do_it ((5w/10,13d),(.4w, 7d)) ;
+ fi ;
+StopPage ;
+\stopMPpage
+
+\page[empty] \setuppagenumber[number=1]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\starttitle[title=Contents]
+
+ \placelist[chapter]
+
+\stoptitle
+
+\startchapter[title=Introduction]
+
+This manual introduces {\em column sets}, one of the output routines of \CONTEXT.
+Although column sets are mainly meant for typesetting journals in a
+semi||automated way, you can also use them for books. We assume that the user is
+familiar with \CONTEXT\ and only discuss the commands that are related to column
+sets.
+
+This mechanism performs okay but it needs to be used with care: an occasional
+manual intervention is needed to get optimal results. After all, we're operating
+in the area where normally click and point desktop publishing is used.
+
+{\bf For the moment you need to load the new code with: \type{\usemodule[newcolumnsets]}}
+
+\startlines
+Hans Hagen
+PRAGMA ADE
+Hasselt, 2003\endash2016
+\stoplines
+
+\stopchapter
+
+\startchapter[title=Basics]
+
+As soon as enough content is collected to build a page, \TEX\ will invoke the
+output routine. This is not a fixed piece of code, but a collection of macro
+calls. The default output routine is a meant for typesetting a single column, as
+in this document. A multi||column output routine is available as well. This
+routine mixes well with the single column one, and is activated by:
+
+\starttyping
+\startcolumns
+some text ...
+\stopcolumns
+\stoptyping
+
+In \MKIV\ a new mixed column mechanism has been introduced that will be
+developped further and eventually replace the old multi column handler. In \MKII\
+there is also a columnset mechanism that can be used to construct complex multi
+column pages. In \MKIV\ this gets replaced by grid columns. All these multi
+column mechanisms have in common that the output routine is more complex because
+now a page is in fact a collection of pages wrapped onto one. Each column is
+(from \TEX's perspective) similar to a one narrow column page. Here we focus on
+columnsets (page grids).
+
+There are some limitations to what you can do with this kind of multi columns,
+which is why we have a third routine at out disposal: {\em column sets}. This
+routine can be used for rather complex layouts with graphics all over the place,
+and text spanning columns or even spreads. There are of course some shortcomings,
+which we will discuss later.
+
+In the examples that follow we use the following style to set up the layout. The
+number in the margin serves a reference to the file where this snippet of \TEX\
+is stored.
+
+\ShowEnvironmentFile{columnsets-000}
+
+\page[mine]
+
+Before we will demonstrate more complex layouts, we will introduce a few
+features. In the next series of examples we use fake text. You can enlarge the
+pages in your viewer if you want to see more detail.
+
+\FourSpread{columnsets-001}
+
+These pages were typeset with the following code:
+
+\ShowFile{columnsets-001}
+
+We will showmost examples on a spread, so we don't show a first page. On a
+spread like above we number columns from~1 to~4, which in practice means that in
+this case columns starting on right page start with column~3!
+
+\SixPages{columnsets-001}
+
+\page[mine]
+
+The number of columns is not fixed to two. You can even have a different number
+of columns on left and right pages.
+
+\FourSpread{columnsets-002}
+
+This time the input is:
+
+\ShowFile{columnsets-002}
+
+Again, we started on a right page but showed the spreads. You can see it from the
+positioning of the header texts.
+
+\SixPages{columnsets-002}
+
+\page[mine]
+
+In order to get the balancing you want, you can manually influence the height of
+a column.
+
+\FourSpread{columnsets-003}
+
+When you set the number of column lines to a positive value, that will be the
+number of lines. A negative value will be subtracted from the maximum number of
+lines.
+
+\ShowFile{columnsets-003}
+
+\page[mine]
+
+In articles you may want to let the introduction span multiple columns. A column
+span is defined independent of a column set and shows up as follows:
+
+\FourSpread{columnsets-004}
+
+Here we've given the span a background so that it stands out.
+
+\ShowFile{columnsets-004}
+
+\page[mine]
+
+A column span can be positioned like any graphic. Later we will discuss the
+placement options in more detail, for the moment all you need to know is that
+\type {btlr} tells \CONTEXT\ to place the graphic in the left bottom of the the
+text area.
+
+\FourSpread{columnsets-005}
+
+Here we pass the \type {default} placement as parameter to the span, but you can
+also set it at definition time. We use a brute force simple column splitter to
+fake columns inside the span.
+
+\ShowFile{columnsets-005}
+
+\page[mine]
+
+You are not limited to one column span. In this sense a span is like a graphic:
+as long as there is room, it will be placed where you want it to be placed. The
+main difference between a span and a graphic is that a span expects text and
+tries to align the baselines with the rest of the text. In many ways a column
+span behaves like a framed text.
+
+\FourSpread{columnsets-006}
+
+This time we flushed one of the spans from bottom to top, starting at the right
+edge: \type {btrl}.
+
+\ShowFile{columnsets-006}
+
+\page[mine]
+
+Column spans are treated like graphics, which means that they will float if
+needed. In the process, the width is limited to the available space, which in
+some cases may lead to a smaller span than you may expect. Think of a column
+span, calculated (and prepared) in the last column and ending up on the next page
+in the first column, where a broader span would have been possible.
+
+\FourSpread{columnsets-007}
+
+\ShowFile{columnsets-007}
+
+\stopchapter
+
+\startchapter[title=Graphics]
+
+Most documents have graphics, and therefore column sets can contain them. The
+main thing that you have to keep in mind when placing graphics, is that column
+sets are based on grids. Therefore spacing around graphics is also grid based.
+
+\FourSpread{columnsets-101}
+
+\ShowFile{columnsets-101}
+
+\page[mine]
+
+You can tell \CONTEXT\ where it should place the graphic, but this will only be
+honored when there is still place.
+
+\EightSpread{columnsets-102}
+
+The prefered location is passed as a four character directive:
+
+\ShowFile{columnsets-102}
+
+\page[mine]
+
+The following directives are available:
+
+\starttabulate[|lT|p|]
+\NC btlr \NC flush from bottom to top and left to right \NC \NR
+\NC btrl \NC flush from bottom to top and right to left \NC \NR
+\NC tblr \NC flush from top to bottom and left to right \NC \NR
+\NC tbrl \NC flush from top to bottom and right to left \NC \NR
+\NC lrbt \NC flush from left to right and bottom to top \NC \NR
+\NC lrtb \NC flush from left to right and top to bottom \NC \NR
+\NC rlbt \NC flush from right to left and bottom to top \NC \NR
+\NC rltb \NC flush from right to left and top to bottom \NC \NR
+\NC here \NC try to place the graphic here \NC \NR
+\NC fixd \NC force the graphic here and don't float \NC \NR
+\NC fxtb:c*r \NC place the graphic at (c,r) or lower if needed \NC \NR
+\NC fxbt:c*r \NC place the graphic at (c,r) or higher if needed \NC \NR
+\NC tops \NC place the graphic at the top of the page \NC \NR
+\NC bots \NC place the graphic at the bottom of the page \NC \NR
+\NC page \NC place the graphic at a separate page \NC \NR
+\stoptabulate
+
+In the next example we show the directional locations:
+
+\OneSpread{columnsets-103}
+
+\ShowFile{columnsets-103}
+
+\stopchapter
+
+\startchapter[title=Areas]
+
+So far we have seen texts and graphics that span multiple columns using span
+commands and floats placement commands. We have also seen that you can define a
+different number of columns for left and right pages. Now that we have arrives at
+column areas you will see how we can span information over not only a page but
+also over pages in a spread.
+
+\FourSpread{columnsets-201}
+
+Being a framed text, by default an area is aligned at the baseline. You can lower
+an area by setting the \type {location} to \type {depth}.
+
+\ShowFile{columnsets-201}
+
+\page[mine]
+
+You can position areas on the left, right or next page or on both pages. When you
+set \type {state} to \type {repeat}, an area is repeated, otherwise it is only
+placed once.
+
+\FourSpread{columnsets-202}
+
+Here we just repeat the areas. Normally this only make sense when the content is
+worth repeating.
+
+\ShowFile{columnsets-202}
+
+\page[mine]
+
+Areas can span a spread, as is demonstrated in the next example.
+
+\FourSpread{columnsets-203}
+
+\ShowFile{columnsets-203}
+
+\page[mine]
+
+An application of a spread area is a title. In the next example we show two
+spread pages.
+
+\FourSpread{columnsets-204}
+
+Watch how we explicitly go to a left page.
+
+\ShowFile{columnsets-204}
+
+\page[mine]
+
+The \type {\GapText} macro is an experimental fun macro and is used to make sure
+that we don't end up with a clipped character.
+
+\startlinecorrection[blank]
+\startcombination
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=2,y=2]
+ {\typesetfile[columnsets-204.tex][page=2]}}}
+ {left page}
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=1,y=2]
+ {\typesetfile[columnsets-204.tex][page=3]}}}
+ {right page}
+\stopcombination
+\stoplinecorrection
+
+This is a typical example of the kind of optimizations that are needed when you
+make documents of styles with text that spans a spread. In the next clip we
+visualize the gap.
+
+\startlinecorrection[blank]
+\startcombination
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=2,y=2]
+ {\typesetfile[columnsets-205.tex][page=2]}}}
+ {left page}
+ {\scale[width=.4\textwidth]{\clip
+ [nx=2,ny=6,x=1,y=2]
+ {\typesetfile[columnsets-205.tex][page=3]}}}
+ {right page}
+\stopcombination
+\stoplinecorrection
+
+At some moment you may want to set up an area in advance as we have done in the
+following example.
+
+\FourSpread{columnsets-206}
+
+The \type {page} key is used to specify the page in the column set that the area
+should go into. Column set pages start numbering at~1. The \type {fixed} stands
+for left or right, whatever comes first.
+
+\ShowFile{columnsets-206}
+
+\stopchapter
+
+\startchapter[title=Columns]
+
+You can use \type {\page} to go to a new page in a column set. Likewise you can
+use \type {\column} to force a column break.
+
+\FourPages{columnsets-301}
+
+This example demonstrates that you can supply \type {\column} with explicit
+directives.
+
+\ShowFile{columnsets-301}
+
+You can use \type {\column[page]} as an alternative for \type {\page}.
+
+\stopchapter
+
+\startchapter[title=Details]
+
+This chapter will cover a couple of cosmetic details of column sets. {\em Some
+features need to be improved, especially in combination with areas, graphics and
+alike. We will also provide side floats etc.}
+
+\FourSpread{columnsets-401}
+
+You can set the distance between columns for each pair of columns. {\em Todo:
+left and right page distances and margins.}
+
+\ShowFile{columnsets-401}
+
+\page[mine]
+
+When you can the distance of the first column as well. This creates a margin.
+
+\FourSpread{columnsets-402}
+
+This time we used equal distances:
+
+\ShowFile{columnsets-402}
+
+\page[mine]
+
+The width of columns is normally calculated automatically, but you can also set
+the width explicitly:
+
+\FourSpread{columnsets-403}
+
+In code:
+
+\ShowFile{columnsets-403}
+
+\page[mine]
+
+For special effects, you can set the width per column. In that case you need to
+be aware of the fact that \TEX\ works its way through the document per paragraph.
+Changing the width halfway a paragraph is possible but will affect the whole
+paragraph. Therefore, this feature works best when you also goto the next column
+explicitly.
+
+\FourSpread{columnsets-404}
+
+In code:
+
+\ShowFile{columnsets-404}
+
+\page[mine]
+
+If you really want to change the width in the middle of a paragraph, you can do a
+trial run and include a breakpoint at the palce where you want it to occur:
+
+\FourSpread{columnsets-405}
+
+In the second spread you see how the narrow hsize carries on in the wider
+column. A \type {\column} command will synchronize the hsize.
+
+\ShowFile{columnsets-405}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Directions]
+
+\FourSpread{columnsets-601}
+
+The direction of flushing columns is determined by the \type {direction}
+parameters as demonstrated below.
+
+\ShowFile{columnsets-601}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Backgrounds]
+
+As with many \CONTEXT\ components, column sets can have backgrounds.
+
+\FourSpread{columnsets-701}
+
+Watch how we use the \type {each} keyword to tell \CONTEXT\ that we want to apply
+the background to each column of the set.
+
+\ShowFile{columnsets-701}
+
+\page[mine]
+
+Normally, if you apply backgrounds this way, you will also set the background
+offset. In a similar fashion you can apply backgrounds to areas and spans. Such
+backgrounds can be a color, or any overlay or layer you want.
+
+\FourSpread{columnsets-702}
+
+Here we've set the background offset as well as the frame.
+
+\ShowFile{columnsets-702}
+
+\page[mine]
+
+When dealing with areas, you need to be aware of the fact that they are clipped,
+the content as well as the background.
+
+\FourSpread{columnsets-703}
+
+De default clip offset is two times the lineheight, except in the binding, where
+it is set to zero points. You can set the clip offset with the \type {clipoffset}
+parameter.
+
+\ShowFile{columnsets-703}
+
+\page[mine]
+
+The text background mechanism is rather well adapted to column sets. The
+following example is a variant on an example shown in the manual titled
+{details}.
+
+\EightSpread{columnsets-704}
+
+Watch how we adapt the background to the fact and extent that the text spans one
+or more columns.
+
+\ShowFile{columnsets-704}
+
+Backgrounds that follow the paragraph shape also work ok in column sets.
+
+{\em todo: an example of a bleeding graphic with column feed back (from
+techniek)}
+
+% \page[mine]
+
+\stopchapter
+
+\startchapter[title=Numbering lines]
+
+\FourSpread{columnsets-901}
+
+This example shows how numbering lines in columns works out. In a two column
+layout the numbers end up in the outer margins by default. If you want you can
+set the \type {location} to for instance \type {left} or \type {right}.
+
+\ShowFile{columnsets-901}
+
+\page[mine]
+
+\FourSpread{columnsets-902}
+
+In a three column setup the numbers end up in the left margins.Make sure you make
+the distance large enough.
+
+\ShowFile{columnsets-902}
+
+% \page[mine]
+%
+% \FourSpread{columnsets-903}
+%
+% This example shows again lune numbers but here we made sure that there is no
+% stretch in the whitespace.
+%
+% \ShowFile{columnsets-903}
+
+\stopchapter
+
+% \startchapter[title=Spanning and More]
+%
+% {\em todo: explanation} \page
+%
+% \TwoPages{columnsets-801} \ShowFile{columnsets-801} \page[mine]
+% \TwoPages{columnsets-802} \ShowFile{columnsets-802} \page[mine]
+% \TwoPages{columnsets-803} \ShowFile{columnsets-803} \page[mine]
+% \TwoPages{columnsets-804} \ShowFile{columnsets-804} \page[mine]
+% \TwoPages{columnsets-805} \ShowFile{columnsets-805} \page[mine]
+% \TwoPages{columnsets-806} \ShowFile{columnsets-806} \page[mine]
+%
+% \stopchapter
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-appendix.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-appendix.tex
new file mode 100644
index 00000000000..d8f33e44ac3
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-appendix.tex
@@ -0,0 +1,48 @@
+% language=uk
+
+\startcomponent languages-appendix
+
+\environment languages-environment
+
+\startchapter[title=Appendix][color=darkgray]
+
+\startsection[title=The language files]
+
+ Todo.
+
+\stopsection
+
+\startsection[title=The \type {mtx-patterns} script]
+
+ Todo.
+
+\stopsection
+
+\startsection[title=Installed sorters]
+
+\startbuffer
+\usemodule[s-languages-sorting]
+
+\showinstalledsorting
+\stopbuffer
+
+\typebuffer \blank[2*line] \getbuffer
+
+\stopsection
+
+\startsection[title=Verbose counters]
+
+\startbuffer
+\usemodule[s-languages-counters]
+
+\showverbosecounters[language={en,es}]
+\stopbuffer
+
+\typebuffer \blank[2*line] \getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-back.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-back.tex
new file mode 100644
index 00000000000..aadcc3aa404
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-back.tex
@@ -0,0 +1,14 @@
+% \doifmodeelse {simple} {
+%
+% \page
+% \page[empty,left]
+%
+% \startMPpage
+% DrawCoverPage("back") ;
+% \stopMPpage
+%
+% } {
+%
+% % not needed as it's part of the cover page
+%
+% }
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-basics.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-basics.tex
new file mode 100644
index 00000000000..39ce840f324
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-basics.tex
@@ -0,0 +1,348 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-basics
+
+\startchapter[title=Some basics][color=darkyellow]
+
+\startsection[title={Introduction}]
+
+In this chapter we will see how we can toggle between languages. A first
+introduction to patterns will be given. Some details of how to control the
+hyphenation with specific patterns will be given in a later chapter.
+
+\stopsection
+
+\startsection[title={Available languages}]
+
+When you use the English version of \CONTEXT\ you will default to US English as
+main language. This means that hyphenation will be US specific, which by the way
+is different from the rules in GB. All labels that are generated by the system
+are also in English. Languages can often be accessed by names like \type
+{english} or \type {dutch} although it is quite common to use the short tags like
+\type {en} and \type {nl}. Because we want to be as compatible as possible with
+\MKII, there are quite some synonyms. The following table lists the languages that
+for which support is built|-|in.\footnote {More languages can be defined. It is
+up to users to provide the information.}
+
+\startbuffer
+\usemodule[languages-system]
+
+\loadinstalledlanguages
+\showinstalledlanguages
+\stopbuffer
+
+\getbuffer
+
+\noindentation You can call up such a table with the following commands:
+
+\typebuffer
+
+\noindentation Instead you can run \type {context --global languages-system.mkiv}.
+
+As you can see, many languages have hyphenation patterns but for Japanese,
+Korean, Chinese as well as Arabic languages they make no sense. The patterns are
+loaded on demand. The number is the internal number that is used in the engine; a
+user never has to use that number. Numbers $<1$ are used to disable hyphenation.
+The file tag is used to locate and load a specification. Such files have names
+like type {lang-nl.lua}.
+
+Some languages share the same hyphenation patterns but can have demands that
+differ, like labels or quotes. The characters shown in the table are those found
+in the pattern files. The number of patterns differs a lot between languages.
+This relates to the systematic behind them. Some languages use word stems, others
+base their hyphenation on syllables. Some language have inflections which adds to
+the complexity while others can combine words in ways that demand special care
+for word boundaries. Of course a low or high number can signal a low quality as
+well, but most pattern collections are assembled over many years and updated when
+for instance spelling rules change. I think that we can safely say that most patterns
+are quite stable and of good quality.
+
+\stopsection
+
+\startsection[title=Switching]
+
+The document language is set with
+
+\starttyping
+\mainlanguage[en]
+\stoptyping
+
+but when you want to apply the proper hyphenation rules to an embedded language
+you can use:
+
+\starttyping
+\language[en]
+\stoptyping
+
+or just:
+
+\starttyping
+\en
+\stoptyping
+
+The main language determines what labels show up, how numbering happens, in what
+way dates get formatted, etc. Normally the \typ {\mainlanguage} command comes
+before the \typ {\starttext} command.
+
+\stopsection
+
+\startsection[title=Hyphenation]
+
+In \LUATEX\ each character that gets typeset not only carries a font id and character
+code, but also a language number. You can switch language whenever you want and
+the change will be carried with the characters. Switching within a word doesn't make
+sense but it is permitted:
+
+\starttabulate[|||T|]
+\NC 1 \NC \type{\de incrediblykompliziert} \NC \hyphenatedword{\de incrediblykompliziert} \NC \NR
+\NC 2 \NC \type{\en incrediblykompliziert} \NC \hyphenatedword{\en incrediblykompliziert} \NC \NR
+\NC 3 \NC \type{\en incredibly\de kompliziert} \NC \hyphenatedword{\en incredibly\de kompliziert} \NC \NR
+\NC 4 \NC \type{\en incredibly\de\-kompliziert} \NC \hyphenatedword{\en incredibly\de\-kompliziert} \NC \NR
+\NC 5 \NC \type{\en incredibly\de-kompliziert} \NC \hyphenatedword{\en incredibly\de-kompliziert} \NC \NR
+\stoptabulate
+
+In the line 4 we have a \type {\-} between the two words, and in the last
+line just a \type {-}. If you look closely you will notice that the snippets
+can be quite small. If we typeset a word with a 1mm text width we get this:
+
+\blank \noindentation \start \en \hsize 1mm incredibly \par \stop \blank
+
+If you are familiar with the details of hyphenation, you know that the number of
+characters at the end and beginning of a word is controlled by the two variables
+\typ {\lefthyphenmin} and \typ {\righthyphenmin}. However, these only influence
+the hyphenation process. What bits and pieces eventually end up on a line is
+determined by the par builder and there the \type {\hsize} matters. In practice
+you will not run into these situations, unless you have extreme long words and a
+narrow column.
+
+Hyphenation normally is limited to regular characters that make up the alphabet of
+a language. It is insensitive for capitalization as the following text shows:
+
+\blank
+
+\startnarrower \noindentation
+\hyphenatedword {This time the musical distraction while developing code came
+from watching youtube performances of Cory Henry (also known from Snarky Puppy,
+a conglomerate of excellent players). Just search the web for his name with \quote
+{Stevie Wonder and Michael Jackson Tribute}. There is no keyboard he can't play.
+Another interesting keyboard player is Sun Rai (a short name for Rai
+Thistlethwayte, just google for \quote {The Beatles, Come Together, Live Piano
+Acoustic with Loop Pedal}, or do a combined search with \quote {Matt
+Chamberlain}. Okay, and talking of keyboards, let's not forget Vika Yermolyeva
+(vkgoeswild) as she's one of a kind too on the web. And then there is Jacob
+Collier, in one word: incredible (or hyphenated the Dutch way {\nl incredible},
+let me repeat that in French {\fr incredible}).} \footnote {Get me right, there
+are of course many more fantastic musicians.}
+\stopnarrower
+
+\blank
+
+\noindentation Of course, names are often short and don't need to be hyphenated
+(or the left and right settings prohibit it). Another complication with names is
+that they can come from another language so we either need to switch language
+temporarily or we need to add an exception (more about that later).
+
+\stopsection
+
+\startsection[title=Primitives]
+
+In traditional \TEX\ the language is not a property of a character but is
+triggered by a signal in the (so called) list. Think of:
+
+\starttyping
+<language 1>this is <language 2>nederlands<language 1> mixed with english
+\stoptyping
+
+This number is set by the primitive \typ {\language}. Language triggers are
+injected into the list depending on the value of this number. There is also a \typ
+{\setlanguage} primitive that can inject triggers without setting the \typ
+{\language} number. Because in \LUATEX\ the state is kept with the character
+you don't need to worry about the subtle differences here.
+
+In \CONTEXT\ the \typ {\language} and \typ {\setlanguage} commands are overloaded
+by a more advanced switch macro. You cannot assume that they work as explained in
+general manuals about \TEX. Currently you can still assign a number but that
+might change. Just consider the language to be an abstraction and don't mess with
+this number. Both commands not only change the current language but also do
+specific initializations when needed.
+
+What characters get involved in hyhenation is historically determines by the so
+called \type {\lccode} values. Each character can have such a value which maps
+an uppercase to a lowercase character. This concept has been extended in \ETEX\
+where it binds to a pattern set (language). However, in \CONTEXT\ the user never
+has to worry about such details.
+
+% The \type {\patterns} primitive is
+% The \type {\hyphenation} primitive is
+
+In traditional hyphenation there will not be hyphenated if the sum of \typ
+{\lefthyphenmin} and \typ {\righthyphenmin} exceeds 62. This limitation is not
+present in the to be presented \LUA\ variant of this routine as there is no
+good reason for this limitation other than implementation constraints.
+
+\stopsection
+
+\startsection[title=Control]
+
+We already mentioned \typ {\lefthyphenmin} and \typ {\righthyphenmin}. These
+two variables control the area in a word that is subjected to hyphenation.
+Setting these values is a matter of taste but making them too small can result in
+bad hyphenation when the patterns are made with the assumptions that certain
+minima are used. Using a \typ {\lefthyphenmin} of 2 while the patterns are made
+with a value of 3 in mind is a bad idea.
+
+\startlinecorrection[blank]
+\startluacode
+context.bTABLE { option = "stretch", align= "middle" }
+ context.bTR()
+ context.bTD { ny = 2, align = "middle,lohi", style = "monobold" }
+ context.verbatim("\\lefthyphenmin")
+ context.eTD()
+ context.bTD { nx = 5, style = "monobold" }
+ context.verbatim("\\righthyphenmin")
+ context.eTD()
+ context.eTR()
+ context.bTR()
+ for right=1,5 do
+ context.bTD()
+ context.mono(right)
+ context.eTD()
+ end
+ context.eTR()
+ for left=1,5 do
+ context.bTR()
+ context.bTD()
+ context.mono(left)
+ context.eTD()
+ for right=1,5 do
+ context.bTD()
+ context("\\lefthyphenmin %s \\righthyphenmin %s \\hyphenatedword{interesting}",left,right)
+ context.eTD()
+ end
+ context.eTR()
+ end
+context.eTABLE()
+\stopluacode
+\stoplinecorrection
+
+When \TEX\ breaks a paragraph into lines it will try do so without hyphenation.
+When that fails (read: when the badness becomes too high) a next effort will take
+hyphenation into account. \footnote {Because in \LUATEX\ we always hyphenate
+there is no real gain in trying not to hyphenate. Because in traditional \TEX\
+hyphenation happens on the fly a pass without hyphenating makes more sense.} When
+the badness is still too high, an optional emergency pass can be made but only
+when the tolerances are set to permit this. In \CONTEXT\ you can try these
+settings when you get too many over- or underfull boxes reported on the console.
+
+\starttyping
+\setupalign[tolerant]
+\setupalign[verytolerant]
+\setupalign[verytolerant,stretch]
+\stoptyping
+
+Personally I tend to use the last setting, especially in automated flows. After
+all, \TEX\ will not apply stretch unless it's really needed.
+
+The two \typ {\*hyphenmin} parameters can be set any time and the current value
+is stored with each character. They can also be set with the language which we
+will see later.
+
+When \TEX\ hyphenates words it has to decide where a word starts and ends. In
+traditional \TEX\ the words starts normally at a character that falls within the
+scope of the hyphenator. It ends at when a box (hlist or vlist) is seen, but also
+at a rule, discretionary, accent (forget about this in \CONTEXT) or math. An
+example will be given in the chapter that discussed the \LUA\ alternative.
+
+\stopsection
+
+\startsection[title=Installing]
+
+ todo
+
+\stopsection
+
+\startsection[title=Modes]
+
+Languages are one of the mechanisms where you can access the current state. There are
+for instance two (official) macros that contain the current (main) language:
+
+\startbuffer
+\starttabulate[||Tc|]
+\HL
+\NC \bf macro \NC \bf value \NC \NR
+\HL
+\NC \type {\currentmainlanguage} \NC \currentmainlanguage \NC \NR
+\NC \type {\currentlanguage} \NC \currentlanguage \NC \NR
+\HL
+\stoptabulate
+\stopbuffer
+
+\getbuffer
+
+When we have set \type {\language[nl]} we get this:
+
+\start \nl \getbuffer \stop
+
+If you write a style that needs to adapt to a language you can use modes. There
+are several ways to do this:
+
+\startbuffer
+\language[nl]
+
+\startmode[**en]
+ \color[darkred]{main english}
+\stopmode
+
+\startmode[*en]
+ \color[darkred]{local english}
+\stopmode
+
+\startmode[**nl]
+ \color[darkblue]{main dutch}
+\stopmode
+
+\startmode[*nl]
+ \color[darkblue]{local dutch}
+\stopmode
+
+\startmodeset
+ [*en] {\color[darkgreen]{english set}}
+ [*nl] {\color[darkgreen]{dutch set}}
+\stopmodeset
+\stopbuffer
+
+\typebuffer
+
+\noindentation This typesets:
+
+\blank \start \setupindenting[no] \getbuffer \stop \blank
+
+When you use setups you can use the following trick:
+
+\startbuffer
+\language[nl]
+
+\startsetups language:en
+ \color[darkorange]{something english}
+\stopsetups
+
+\startsetups language:nl
+ \color[darkorange]{something dutch}
+\stopsetups
+
+\setups[language:\currentlanguage]
+\stopbuffer
+
+\typebuffer
+
+\noindentation As expected we get:
+
+\blank \start \setupindenting[no] \getbuffer \stop \blank
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-contents.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-contents.tex
new file mode 100644
index 00000000000..10fadb56bf8
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-contents.tex
@@ -0,0 +1,13 @@
+% language=uk
+
+\startcomponent languages-contents
+
+\environment languages-environment
+
+\starttitle[title=Contents][color=darkgray]
+
+\placelist[chapter][criterium=text]
+
+\stoptitle
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-cover.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-cover.tex
new file mode 100644
index 00000000000..75a033b5fa9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-cover.tex
@@ -0,0 +1,133 @@
+% language=uk
+
+\startcomponent languages-cover
+
+\environment languages-environment
+
+\startbuffer[abstract]
+
+This book explains how we support languages (and
+scripts) in \CONTEXT\ \MKIV\ and \LUATEX. Some of
+the mechanisms discussed are generic and not
+\CONTEXT\ specific. We discuss the way languages are
+dealt with in the engine, hyphenation, standard
+features and additional goodies. Tracing and the
+extensibility of code are also discussed.
+
+\stopbuffer
+
+\startsetups document:abstract
+ \framed [
+ foregroundstyle=bold,
+ foregroundcolor=white,
+ width=7.5cm,
+ align={normal,tolerant},
+ frame=off,
+ strut=no,
+ ] {
+ \getbuffer[abstract]
+ }
+\stopsetups
+
+\startMPextensions
+
+ def DrawCoverPage (expr what) =
+
+ begingroup ;
+
+ save SpineWidth ; numeric SpineWidth ; SpineWidth := 8mm ;
+ save PaperBleed ; numeric PaperBleed ; PaperBleed := 2mm ; % todo
+
+ StartCover ;
+
+ save width, size, anchor ;
+
+ numeric width, size ; pair anchor, offset ;
+
+ color ColorVariant[] ;
+
+ % ColorVariant[1] := \MPcolor{darkred} ;
+ % ColorVariant[2] := \MPcolor{darkgreen} ;
+ % ColorVariant[3] := \MPcolor{darkblue} ;
+ % ColorVariant[4] := \MPcolor{darkyellow} ;
+
+ ColorVariant[1] := \MPcolor{darkmagenta} ;
+ ColorVariant[2] := \MPcolor{darkorange} ;
+ ColorVariant[3] := \MPcolor{darkyellow} ;
+ ColorVariant[4] := \MPcolor{darkcyan} ;
+
+ fill CoverPage enlarged PaperBleed withcolor \MPcolor{darkgray} ;
+
+ fill Spine bottomenlarged -.5CoverHeight withcolor ColorVariant[3] ;
+ fill Spine topenlarged -.5CoverHeight withcolor ColorVariant[2] ;
+
+ width := FrontPageWidth ;
+ height := FrontPageHeight ;
+ size := 4 * width / 3 ;
+ offset := (-1cm,1cm) ;
+ anchor := .5[lrcorner CoverPage,urcorner CoverPage] ;
+
+ fill anchored.llft(lltriangle scaled size, urcorner FrontPage) withcolor ColorVariant[1] ;
+ fill anchored.urt (urtriangle scaled size, llcorner FrontPage) withcolor ColorVariant[2] ;
+ fill anchored.lrt (lrtriangle scaled size, ulcorner FrontPage) withcolor ColorVariant[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner FrontPage) withcolor ColorVariant[4] ;
+
+ fill anchored.lrt (lrtriangle scaled size, ulcorner BackPage) withcolor ColorVariant[1] ;
+ fill anchored.llft(lltriangle scaled size, urcorner BackPage) withcolor ColorVariant[3] ;
+ fill anchored.ulft(ultriangle scaled size, lrcorner BackPage) withcolor ColorVariant[2] ;
+ fill anchored.urt (urtriangle scaled size, llcorner BackPage) withcolor ColorVariant[4] ;
+
+ draw thetextext.llft(textext("\bf Languages in \ConTeXt\hskip-.1em") rotated 45 ysized .350height, anchor shifted (6*offset+offset)) withcolor white ;
+ draw thetextext.llft(textext("\bf explaining luatex and mkiv") rotated 45 ysized .275height, anchor shifted (5*offset+offset)) withcolor white ;
+ draw thetextext.llft(textext("\bf Hans Hagen") rotated 45 ysized .200height, anchor shifted (2*offset+offset)) withcolor white ;
+ draw thetextext.llft(textext("\bf PRAGMA ADE") rotated 45 ysized .200height, anchor shifted (1*offset+offset)) withcolor white ;
+
+ % for the moment
+
+ draw thetextext.top(textext("\bf work in progress") xsized 4cm, lrcorner Page shifted (-3cm,1cm)) withcolor white ;
+
+ % till here
+
+ width := BackPageWidth ;
+
+ draw thetextext(textext("\bf\setups[document:abstract]") xsized .65width rotated 45 , center BackPage) withcolor white ;
+
+ anchor := .5[ulcorner Spine,urcorner Spine] shifted (0,-1cm);
+
+ draw thetextext.bot(textext("\bf Languages in \ConTeXt\hskip-.1em") rotated 90 xsized .8SpineWidth, anchor) withcolor white ;
+
+ anchor := .5[llcorner Spine,lrcorner Spine] shifted (0,1cm);
+
+ draw thetextext.top(textext("\bf Hans Hagen") rotated 90 xsized .8SpineWidth, anchor) withcolor white ;
+
+ StopCover ;
+
+ if what = "front" :
+ clip currentpicture to FrontPage ;
+ elseif what = "back" :
+ clip currentpicture to BackPage ;
+ else :
+ drawboundary CoverPage ;
+ fi ;
+
+ endgroup ;
+
+ enddef ;
+
+\stopMPextensions
+
+\doifmodeelse {simple} {
+
+ \startMPpage
+ DrawCoverPage("front") ;
+ \stopMPpage
+
+} {
+
+ \startMPpage
+ DrawCoverPage("cover") ;
+ \stopMPpage
+
+}
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-environment.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-environment.tex
new file mode 100644
index 00000000000..ff529a8d176
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-environment.tex
@@ -0,0 +1,347 @@
+\startenvironment languages-environment
+
+\usemodule[visual]
+\usemodule[simulate]
+
+\dontcomplain
+
+\definepapersize
+ [book]
+ [width=18cm,
+ height=24cm]
+
+\setuppapersize
+ [book]
+
+\startmode[oversized]
+
+ \setuppapersize
+ [book]
+ [oversized]
+
+ \setuplayout
+ [marking=on]
+
+\stopmode
+
+\setuplayout
+ [location=middle,
+ topspace=1.5cm,
+ bottomspace=2cm,
+ backspace=2cm,
+ cutspace=2cm,
+ header=0cm,
+ footer=0cm,
+ margindistance=.25cm,
+ margin=1.25cm,
+ width=middle,
+ height=middle]
+
+\setuplayout
+ [style=\ss]
+
+\usetypescript
+ [dejavu-condensed]
+
+\setupbodyfont
+ [ipaex,9pt]
+
+\setupbodyfont
+ [dejavu,9pt]
+
+\definetyping
+ [narrowtyping]
+ [typing]
+ [bodyfont=dejavu-condensed]
+
+% This is way too ugly for a manual:
+%
+% \setuptyping
+% [indentnext=no]
+%
+% \setupindenting
+% [medium,yes]
+
+\setupwhitespace
+ [big]
+
+\defineoverlay
+ [page]
+ [\useMPgraphic{page}]
+
+\setupbackgrounds
+ [page]
+ [background=page]
+
+\setuphead
+ [chapter,section,subsection]
+ [color=\namedstructureuservariable{chapter}{color}]
+
+\setuphead
+ [chapter]
+ [style=\bfc]
+
+\setuphead
+ [section]
+ [style=\bfb]
+
+\setuphead
+ [subsection]
+ [style=\bf,
+ before=\blank,
+ after=\blank]
+
+\startsetups document:chapter:inside
+ \definecolor[maincolor][1.0(\namedheadparameter{chapter}{color})] % this expands the color
+ \definecolor[halfcolor][0.5(maincolor,white)]
+\stopsetups
+
+\setuphead
+ [chapter]
+ [insidesection=\setup{document:chapter:inside}]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setuplist
+ [aligntitle=yes]
+
+\setuplist
+ [chapter]
+ [pagenumber=no,
+ style=bold,
+ before={\blank\startcolor[\structurelistuservariable{color}]},
+ after={\placelist[section]\stopcolor}]
+
+\setuplist
+ [chapter,section]
+ [width=3em]
+
+\startuseMPgraphic{page}
+
+ StartPage ;
+
+ linecap := butt ;
+
+ if OnRightPage :
+
+ path p ; p := (
+ urcorner Page shifted (-2cm,0) --
+ urcorner Page --
+ urcorner Page shifted (0,-2cm) -- cycle
+ ) shifted (-2.5mm,-2.5mm) ;
+
+ else :
+
+ path p ; p := (
+ ulcorner Page shifted (2cm,0) --
+ ulcorner Page --
+ ulcorner Page shifted (0,-2cm) -- cycle
+ ) shifted (2.5mm,-2.5mm) ;
+
+ fi ;
+
+ fill p
+ withpen pencircle scaled 1mm
+ % withcolor \MPcolor{\namedstructureuservariable{chapter}{color}} ;
+ withcolor \MPcolor{maincolor} ;
+
+ draw thetextext("\bf\userpagenumber",
+ if OnRightPage : urcorner p shifted (-5mm,-5mm) else : ulcorner p shifted (5mm,-5mm) fi)
+ withcolor white ;
+
+ if OnRightPage :
+
+ path p ; p := (
+ lrcorner Page shifted (-5cm,0) --
+ lrcorner Page
+ ) shifted (-5mm,10mm)
+
+ else :
+
+ path p ; p := (
+ llcorner Page shifted (5cm,0) --
+ llcorner Page
+ ) shifted (5mm,10mm) ;
+
+ fi ;
+
+ draw p
+ withpen pencircle scaled 1mm
+ % withcolor \MPcolor{\namedstructureuservariable{chapter}{color}} ;
+ withcolor \MPcolor{maincolor} ;
+
+ draw if OnRightPage :
+ thetextext.lft("\bf\getspecificstructuretitle{chapter}",lrcorner Page shifted (-5mm,5mm))
+ else :
+ thetextext.rt ("\bf\getspecificstructuretitle{chapter}",llcorner Page shifted ( 5mm,5mm))
+ fi withcolor \MPcolor{\namedstructureuservariable{chapter}{color}} ;
+ % fi withcolor \MPcolor{maincolor} ;
+
+ StopPage ;
+\stopuseMPgraphic
+
+\definecolor[orange] [r=1,g=.6,b=.1]
+
+\definecolor[middlegray] [s=.75]
+\definecolor[darkgray] [s=.25]
+\definecolor[darkred] [r=.5]
+\definecolor[darkgreen] [g=.5]
+\definecolor[darkblue] [b=.5]
+
+\definecolor[darkyellow] [.5(red,green)]
+\definecolor[darkmagenta][.5(red,blue)]
+\definecolor[darkcyan] [.5(green,blue)]
+
+\definecolor[darkorange] [.5(orange)]
+
+\definecolor [mix-1] [r=1,g=.75,b=.25] \definecolor [darkmix-1][.5(mix-1)]
+\definecolor [mix-2] [r=1,g=.25,b=.75] \definecolor [darkmix-2][.5(mix-2)]
+\definecolor [mix-3] [r=.75,g=1,b=.25] \definecolor [darkmix-3][.5(mix-3)]
+\definecolor [mix-4] [r=.75,g=.25,b=1] \definecolor [darkmix-4][.5(mix-4)]
+\definecolor [mix-5] [r=.25,g=1,b=.75] \definecolor [darkmix-5][.5(mix-5)]
+\definecolor [mix-6] [r=.25,g=.75,b=1] \definecolor [darkmix-6][.5(mix-6)]
+
+% \blackrule[height=1cm,width=10cm,color=mix-1] \blackrule[height=1cm,width=10cm,color=darkmix-1]
+% \blackrule[height=1cm,width=10cm,color=mix-2] \blackrule[height=1cm,width=10cm,color=darkmix-2]
+% \blackrule[height=1cm,width=10cm,color=mix-3] \blackrule[height=1cm,width=10cm,color=darkmix-3]
+% \blackrule[height=1cm,width=10cm,color=mix-4] \blackrule[height=1cm,width=10cm,color=darkmix-4]
+% \blackrule[height=1cm,width=10cm,color=mix-5] \blackrule[height=1cm,width=10cm,color=darkmix-5]
+% \blackrule[height=1cm,width=10cm,color=mix-6] \blackrule[height=1cm,width=10cm,color=darkmix-6]
+
+\definecolor[maincolor] [darkgray]
+
+% modules
+
+\usemodule
+ [abr-01]
+
+\setupsorting
+ [logo]
+ [style=]
+
+\usemodule [chart]
+\usemodule [nodechart]
+
+% \usemodule [s] [fonts-tables]
+% \usemodule [s] [fonts-missing]
+% \usemodule [s] [fonts-vectors]
+% \usemodule [s] [fonts-features]
+
+\usemodule [s] [languages-words]
+\usemodule [s] [languages-hyphenation]
+\usemodule [s] [languages-frequencies]
+\usemodule [s] [languages-sorting]
+\usemodule [s] [languages-counters]
+\usemodule [s] [languages-system]
+
+\usemodule [s] [math-extensibles]
+
+\setupFLOWchart
+ [width=6em,
+ height=3em,
+ offset=-2em, % maybe default : todo: hoffset and voffset
+ dx=2em,
+ dy=2em]
+
+\setupFLOWlines
+ [color=maincolor]
+
+\setupFLOWshapes
+ [rulecolor=maincolor]
+
+% tables
+
+\setuptabulate
+ [rulethickness=.5mm,
+ rulecolor=maincolor]
+
+% special commands
+
+\startuniqueMPgraphic{reference}{color}
+ fill
+ .5[llcorner OverlayBox,ulcorner OverlayBox] --
+ .5[ulcorner OverlayBox,urcorner OverlayBox] --
+ .5[urcorner OverlayBox,lrcorner OverlayBox] --
+ .5[lrcorner OverlayBox,llcorner OverlayBox] -- cycle
+ withcolor \MPvar{color} ;
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{reference}{color}
+ path p ; p := OverlayBox enlarged -1mm ;
+ filldraw
+ ulcorner p --
+ urcorner p --
+ lrcorner p --
+ .5[lrcorner p,llcorner p] shifted (0,-1ExHeight) --
+ llcorner p -- cycle
+ withpen pencircle scaled 1mm
+ withcolor \MPvar{color} ;
+ setbounds currentpicture to OverlayBox enlarged 1ExHeight ;
+\stopuniqueMPgraphic
+
+\defineoverlay[reference][\uniqueMPgraphic{reference}{color=maincolor,}]
+
+\definecolor[maincolor][red]
+
+\definemargindata
+ [appendixdata]
+% [inner]
+ [outer]
+ [stack=yes]
+
+\definemarginframed
+ [appendixdata]
+ [width=3.5em,
+ height=\lineheight, % we know what goes in there
+ align=middle,
+ offset=overlay,
+ foregroundcolor=white,
+ background=reference]
+
+% todo:
+%
+% \appendixdata[reference=bla]{}
+%
+% whole data
+
+% interaction
+
+\setupinteraction
+ [state=start,
+ click=no,
+ color=,
+ contrastcolor=,
+ style=]
+
+% extra fonts (shared among chapters)
+
+\definefontfeature[demo-onum][kern=yes,onum=yes]
+%definefontfeature[demo-lnum][kern=yes,lnum=yes]
+\definefontfeature[demo-tnum][kern=yes,tnum=yes]
+\definefontfeature[demo-pnum][kern=yes,pnum=yes]
+\definefontfeature[demo-zero][zero=yes]
+\definefontfeature[demo-none][]
+
+\definefont[DemoOnumLM][file:lmroman10-regular*demo-onum at 42pt]
+%definefont[DemoLnumLM][file:lmroman10-regular*demo-lnum at 42pt]
+\definefont[DemoTnumLM][file:lmroman10-regular*demo-tnum at 42pt]
+\definefont[DemoPnumLM][file:lmroman10-regular*demo-pnum at 42pt]
+
+\definefont[DemoZeroLM][file:lmroman10-regular*demo-zero at 42pt]
+\definefont[DemoNoneLM][file:lmroman10-regular*demo-none at 42pt]
+
+\definefont[DemoZeroLT][file:lmtypewriter10-regular*demo-zero at 42pt]
+\definefont[DemoNoneLT][file:lmtypewriter10-regular*demo-none at 42pt]
+
+\definestartstop
+ [notabene]
+ [before=\blank,
+ after=\blank,
+ style=\em]
+
+\setuphyphenation
+ [method=default]
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-goodies.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-goodies.tex
new file mode 100644
index 00000000000..fbbfafc34a1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-goodies.tex
@@ -0,0 +1,138 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-goodies
+
+\startchapter[title=Goodies][color=darkorange]
+
+\startsection[title=Introduction]
+
+There are some features that will only be used in rare cases. They were often
+implemented as experiment but found useful enough to keep around.
+
+\stopsection
+
+\startsection[title=Spell checking]
+
+There are some means to check the spelling of words in your document but get it
+right: \CONTEXT\ is not a spell|-|checker. These features were added in order to
+be able to do some quick checking of documents written by multiple authors. There
+are currently three options and we only show a simple examples.
+
+First you need to load word lists. These are either text files with just words
+separated by spacing.
+
+\starttyping[color=maincolor]
+foobar foo-bar foo=bar foo{}{}{}bar foo{}{}{bar}
+\stoptyping
+
+All these words become \type {foobar} which means that one can use words with
+discretionary specifications. A text list is loaded with:
+
+\startbuffer
+\loadspellchecklist[en][t:/manuals/lua/words-en.txt]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Instead you can load a \LUA\ file with words. Here we use the same structure that
+we use for the spell checker provided for \SCITE:
+
+\starttyping[color=maincolor]
+return {
+ max = 9,
+ min = 6,
+ n = 2,
+ words = {
+ ["barfoo"] = "Barfoo"
+ ["foobarred"] = "foobarred",
+ }
+}
+\stoptyping
+
+We use the same load command (you can also load bytecode files with suffix \type
+{luc} this way):
+
+\startbuffer
+\loadspellchecklist[nl][t:/scite/data/context/lexers/data/spell-nl.lua]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Usage boils down to enabling the checker. If needed we can add more methods. The
+first method colors the known and unknown colors. Words shorter then the
+threshold of 4 will be skipped.
+
+\startbuffer
+\setupspellchecking[state=start,method=1]
+\en Is this written right or is this wromg?\par % m -> n error
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+You can change the colors:
+
+\starttyping
+\definecolor[word:yes] [g=.75]
+\definecolor[word:no] [r=.75]
+\stoptyping
+
+The second method doesn't show anything but produces a file \type
+{jobname.words}) with used words. The \type {found} value of \type {list} is used
+as key in the produced table.
+
+\startbuffer
+\setupspellchecking[state=start,method=2,list=found]
+\en Is this written right or is this wrong?\par
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+The produced table is:
+
+\typefile{\jobname.words}
+
+The result can be traced with a module:
+
+\startbuffer
+\usemodule[s-languages-words]
+
+\showwords
+\stopbuffer
+
+\typebuffer
+
+This shows up as:
+
+\getbuffer
+
+The third mechanism colors languages differently. We only defined a few colors:
+
+\starttyping
+\definecolor[word:en] [b=.75]
+\definecolor[word:de] [r=.75]
+\definecolor[word:nl] [g=.75]
+\definecolor[word:unknown][r=.75,g=.75]
+\stoptyping
+
+but you can of course define a color for your favourite language in a similar way.
+
+\startbuffer
+\setupspellchecking[state=start,method=3]
+\en Is this written right or is this wrong?\par
+\nl Is dit goed geschreven of niet?\par
+\setupspellchecking[state=stop]
+\stopbuffer
+
+\typebuffer \startpacked \getbuffer \stoppacked
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-hyphenation.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
new file mode 100644
index 00000000000..48e6eb385cc
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-hyphenation.tex
@@ -0,0 +1,810 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-hyphenation
+
+\startchapter[title=Hyphenation][color=darkmagenta]
+
+\startsection[title=How it works]
+
+Proper hyphenation is one of the strong points of \TEX. Hyphenation in \TEX\ is
+done using so called hyphenation patterns. Making these patterns is an art
+and most users (including me) happily use whatever is available. Patterns can be
+created automatically using \type {patgen} but often manual tweaking is needed
+too. A pattern looks as follows:
+
+\starttyping
+pat1tern
+\stoptyping
+
+This means as much as: you can split the word \type {pattern} in two pieces, with
+a hyphen between the two \type {t}'s. Actually it will also split the word \type
+{patterns} because the hyphenation mechanism looks at substrings. When no number
+between characters in a pattern is given, a zero is assumed. This means as much
+as {\em undefined}. An even number inhibits hyphenation, an odd number permits
+it. The larger the number (weight), the more influence it has. A more restricted
+pattern is:
+
+\starttyping
+.pat1tern.
+\stoptyping
+
+Here the periods set the word boundaries. The pattern dictionary for us
+english has smaller patterns and the next trace shows how these are applied.
+
+\starthyphenation[traditional]
+\showhyphenationtrace[en][pattern]
+\stophyphenation
+
+The effective hyphenation of a word is determined by several factors:
+
+\startitemize[packed]
+\startitem the current language, each language can have different patterns \stopitem
+\startitem the characters, as some characters might block hyphenation \stopitem
+\startitem the settings of \type {\lefthyphenmin} and \type {\righthyphenmin} \stopitem
+\stopitemize
+
+A place where a word can be hyphenated is called a discretionary. When \TEX\
+analyzes a stream, it will inject discretionary nodes into that stream.
+
+\starttyping
+pat\discretionary{-}{}{}tern.
+\stoptyping
+
+In traditional \TEX\ hyphenation, ligature building and kerning are tightly
+interwoven which is quite effective. However, there was also a strong
+relationship between the current font and hyphenation. This is a side effect of
+traditional \TEX\ having at most 256 characters in a font and the fact that the
+used character is fact a reference to a slot in a font. There a character in the
+input initially ends up as a character node and eventually becomes a glyph node.
+For instance two characters \type {fi} can become a ligature glyph representing
+this combination.
+
+In \LUATEX\ the hyphenation, ligature building and kerning stages are separated
+and can be overloaded. In \CONTEXT\ all three can be replaced by code written in
+\LUA. Because normally hyphenation happens before font logic is applied, there is
+no relationship with font encoding. I wrote the first \LUA\ version of the
+hyohenator on a rainy weekend and the result was not that bad so it was presented
+at the 2014 \CONTEXT\ meeting. After some polishing I decided to add this routine
+to the standard \MKIV\ repertoire which then involved some proper interfacing.
+
+You can enable the \LUA\ variant with the following command:
+
+\starttyping
+\setuphyphenation[method=traditional]
+\stoptyping
+
+We call this method \type {traditional} because in principle we can have
+many more methods and this one is (supposed to be) mostly compatible to the
+built-in method. This is a global setting. You can switch back with:
+
+\starttyping
+\setuphyphenation[method=default]
+\stoptyping
+
+In the next sections we will see how we can provide alternatives within the
+traditional method. These alternatives can be set local and therefore can operate
+over a limited range of characters.
+
+One complication in interfacing is that \TEX\ has grouping (which permits local
+settings) and we want to limit some of the above functionality using groups. At
+the same time hyphenation is a paragraph related action so we need to enable the
+hyphenation related code at a global level (or at least make sure that it gets
+exercised by forcing a \type {\par}). That means that the alternative
+hyphenator has to be quite compatible so that we could just enable it for a whole
+document. This can have an impact on performance but in practice that can be
+neglected. In \LUATEX\ the \LUA\ variant is 4~times slower than the built-in one,
+in \LUAJITTEX\ it's 3~times slower. But the good news is that the amount of time
+spent in the hyphenator is relatively small compared to other manipulations and
+macro expansion. The additional time needed for loading and preparing the
+patterns into a more \LUA\ specific format can be neglected.
+
+You can check how words get hyphenated using the patterns management script:
+
+\starttyping
+>mtxrun --script patterns --hyphenate language
+
+hyphenator |
+hyphenator | . l a n g u a g e . . l a n g u a g e .
+hyphenator | 0a2n0 0 0 2 0 0 0 0 0 0
+hyphenator | 2a0n0g0 0 2 2 0 0 0 0 0 0
+hyphenator | 0n1g0u0 0 2 2 1 0 0 0 0 0
+hyphenator | 0g0u4a0 0 2 2 1 0 4 0 0 0
+hyphenator | 2g0e0.0 0 2 2 1 0 4 2 0 0
+hyphenator | .0l2a2n1g0u4a2g0e0. . l a n-g u a g e .
+hyphenator |
+mtx-patterns | us 3 3 : language : lan-guage
+\stoptyping
+
+\stopsection
+
+\startsection[title=The last words]
+
+Mid 2014 we had to upgrade a style for a \PDF\ assembly service: chapters from
+(technical) school books are combined into arbitrary new books. There are some
+nasty aspects with this flow: for instance, all section numbers in a chapter are
+replaced by new numbers and this also involves figure and table prefixes.
+It boils down to splitting up books, analyzing the typeset content and
+preparing it for replacements. The structure is described in \XML\ files so that
+we can generate tables of contents. The reason for not generating from \XML\
+sources is that the publisher doesn't have a \XML\ workflow and that books
+already were available. Also, books from several series are combined and even
+within a series structure (and rendering) differs.
+
+What has this to do with hyphenation? Writing a style for such a flow always
+results in a more complex one that estimated and as usual it's in the details.
+The original style was written in \MKII\ and used some box juggling to achieve
+reasonable results but in \MKIV\ we can do better.
+
+Each chapter has a title and books get titles and subtitles as well. The titles
+are typeset each time a new book is composed. This happens within some layout
+constraints. Think of constraints like these:
+
+\startitemize[packed]
+\startitem the title goes on top of a shape that doesn't permit much overflow \stopitem
+\startitem there can be very long words (not uncommon in Dutch or German) \stopitem
+\startitem a short word or hyphenated part should not end up on the last line \stopitem
+\startitem the left and right hyphenation minima are at least four \stopitem
+\stopitemize
+
+The last requirement is a compromise because in most cases publishers seem to
+want ragged right not hyphenated rendering (at least in Dutch schoolbooks). The
+arguments for this are quite weak and probably originate in fear of bad rendering
+given past experiences. It's this kind of situations that drive the development
+of the more obscure features that ship with \CONTEXT\ and a (partial) solution
+for this specific case will be given later.
+
+If you look at thousands of titles and turn these into (small) paragraphs \TEX\
+does a pretty good job. It's the few exceptions that we need to catch. The next
+examples demonstrate such an extreme case.
+
+\startbuffer[example]
+\dorecurse{5} { % dejavu
+ \startlinecorrection[blank]
+ \bTABLE
+ \bTR
+ \bTD[align=middle,width=2em,foregroundstyle=bold]
+ #1
+ \eTD
+ \bTD[align={verytolerant,flushleft},width=15em,offset=1ex]
+ \hsize \dimexpr11\emwidth-#1\dimexpr.5\emwidth\relax
+ \dontcomplain
+ \lefthyphenmin=4\righthyphenmin=4
+ \blackrule[color=darkyellow,width=\hsize,height=-3pt,depth=5pt]\par
+ \begstrut\getbuffer[long]\endstrut\par
+ \eTD
+ \bTD[align={verytolerant,flushleft},width=15em,offset=1ex]
+ \sethyphenationfeatures[demo]
+ \hsize \dimexpr11\emwidth-#1\dimexpr.5\emwidth\relax
+ \dontcomplain
+ \blackrule[color=darkyellow,width=\hsize,height=-3pt,depth=5pt]\par
+ \begstrut\getbuffer[long]\endstrut\par
+ \eTD
+ \eTR
+ \eTABLE
+ \stoplinecorrection
+}
+\stopbuffer
+
+\definehyphenationfeatures
+ [demo]
+ [rightwords=1,
+ lefthyphenmin=4,
+ righthyphenmin=4]
+
+\startbuffer[long]
+a verylongword and then anevenlongerword
+\stopbuffer
+
+\starthyphenation[traditional]
+ \enabletrackers[hyphenator.visualize]
+ \getbuffer[example]\par
+ \disabletrackers[hyphenator.visualize]
+\stophyphenation
+
+Of course in practice there need to be some reasonable width and when we pose
+these limits the longest possible word should fit into the allocated space. In
+these examples the rule shows the width. In the right columns we see a red
+colored word and that one will not get hyphenated.
+
+\stopsection
+
+\startsection[title=Explicit hyphens]
+
+Another special case that we needed to handle were (compound) words with explicit
+hyphens. Because often data comes from \XML\ files we can not really control the
+typesetting as in a \TEX\ document where the author sees what gets done. So here
+we need a way to turn these hyphens into proper hyphenation directives and at the
+same time permit the words to be hyphenated.
+
+\definehyphenationfeatures
+ [demo]
+ [hyphens=yes,
+ lefthyphenmin=4,
+ righthyphenmin=4]
+
+\startbuffer[long]
+a very-long-word and then an-even-longer-word
+\stopbuffer
+
+\starthyphenation[traditional]
+ \enabletrackers[hyphenator.visualize]
+ \getbuffer[example]\par
+ \disabletrackers[hyphenator.visualize]
+\stophyphenation
+
+\stopsection
+
+\startsection[title=Extended patterns]
+
+As with more opened up mechanisms, in \MKIV\ we can extend functionality. As an
+example I have implemented the extensions discussed in the article by László
+Németh in the Proceedings of Euro\TEX\ 2006: {\em Hyphenation in OpenOffice.org}
+(TUGboat, Volume 27, 2006). The syntax for these extension is somewhat ugly and
+involves optional offsets and ranges. \footnote {I'm not sure if there were ever
+patterns released that used this syntax.}
+
+\startbuffer
+\registerhyphenationpattern[nl][e1ë/e=e]
+\registerhyphenationpattern[nl][a9atje./a=t,1,3]
+\registerhyphenationpattern[en][eigh1tee/t=t,5,1]
+\registerhyphenationpattern[de][c1k/k=k]
+\registerhyphenationpattern[de][schif1f/ff=f,5,2]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+These patterns result in the following hyphenations:
+
+\starthyphenation[traditional]
+ \switchtobodyfont[big]
+ \starttabulate[|||]
+ \NC reëel \NC \language[nl]\hyphenatedcoloredword{reëel} \NC \NR
+ \NC omaatje \NC \language[nl]\hyphenatedcoloredword{omaatje} \NC \NR
+ \NC eighteen \NC \language[en]\hyphenatedcoloredword{eighteen} \NC \NR
+ \NC Zucker \NC \language[de]\hyphenatedcoloredword{Zucker} \NC \NR
+ \NC Schiffahrt \NC \language[de]\hyphenatedcoloredword{Schiffahrt} \NC \NR
+ \stoptabulate
+\stophyphenation
+
+In a specification, the \type {.} indicates a word boundary and numbers indicate
+the weight of a breakpoint. The optional extended specification comes after the
+\type {/}. The values separated by a \type {=} are the pre and post sequences:
+these end up at the end of the current line and beginning of the next one. The
+optional numbers are the start position and length. These default to~1 and~2, so
+in the first example they identify \type {eë} (the weights don't count).
+
+There is a pitfall here. When the language already has patterns that for
+instance prohibit a hyphen between \type {e} and type {ë}, like \type{e2ë}, we
+need to make sure that we give our new one a higher priority, which is why we
+used a \type{e9ë}.
+
+This feature is somewhat experimental and can be improved. Here is a more \LUA-ish
+way of setting such patterns:
+
+\starttyping
+local registerpattern =
+ languages.hyphenators.traditional.registerpattern
+
+registerpattern("nl","e1ë", {
+ start = 1,
+ length = 2,
+ before = "e",
+ after = "e",
+} )
+
+registerpattern("nl","a9atje./a=t,1,3")
+\stoptyping
+
+Just adding extra patterns to an existing set without much testing is not wise. For
+instance we could add these to the dutch dictionary:
+
+\starttyping
+\registerhyphenationpattern[nl][e3ë/e=e]
+\registerhyphenationpattern[nl][o3ë/o=e]
+\registerhyphenationpattern[nl][e3ï/e=i]
+\registerhyphenationpattern[nl][i3ë/i=e]
+\registerhyphenationpattern[nl][a5atje./a=t,1,3]
+\registerhyphenationpattern[nl][toma8at5je]
+\stoptyping
+
+That would work oke well for words like
+
+\starttyping
+coëfficiënt
+geïntroduceerd
+copiëren
+omaatje
+tomaatje
+\stoptyping
+
+However, the last word only goes right because we explicitly added a pattern
+for it. One reason is that the existing patterns already contain rules to
+prevent weird hyphenations. The same is true for the accented characters. So,
+consider these examples and coordinate additional patterns with other users
+so that errors can be identified.
+
+\stopsection
+
+\startsection[title=Exceptions]
+
+We have a variant on the \TEX\ primitive \type {\hyphenation}, the official way
+to register a specific way to hyphenate a word.
+
+\startbuffer
+\registerhyphenationexception[aaaaa-bbbbb]
+aaaaabbbbb \par
+\stopbuffer
+
+\typebuffer
+
+\noindentation This code is self explaining and results in:
+
+\blank
+
+\starthyphenation[traditional]
+\setupindenting[no]\hsize 1mm \lefthyphenmin 1 \righthyphenmin 1 \getbuffer
+\stophyphenation
+
+\noindentation There can be multiple hyphens and even multiple words in such a
+specification:
+
+\startbuffer
+\registerhyphenationexception[aaaaa-bbbbb cc-ccc-ddd-dd]
+aaaaabbbbb \par
+cccccddddd \par
+\stopbuffer
+
+\typebuffer
+
+\noindentation We get:
+
+\blank
+
+\starthyphenation[traditional]
+\setupindenting[no]\hsize 1mm \lefthyphenmin 1 \righthyphenmin 1 \getbuffer
+\stophyphenation
+
+
+\stopsection
+
+\startsection[title=Boundaries]
+
+A box, rule, math or discretionary will end a word and prohibit hyphenation
+of that word. Take this example:
+
+\startbuffer[demo]
+whatever \par
+whatever\hbox{!} \par
+\vl whatever\vl \par
+whatever$x$ \par
+whatever-whatever \par
+\stopbuffer
+
+\typebuffer[demo]
+
+These lines will hyphenate differently and in traditional \TEX\ you need to
+insert penalties and|/|or glue to get around it. In the \LUA\ variant we can
+enable that limitation.
+
+\startbuffer
+\definehyphenationfeatures
+ [strict]
+ [rightedge=tex]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we show the three variants: traditional \TEX\ and \LUA\ with and without
+strict settings.
+
+\starttabulate[|p|p|p|]
+\HL
+\NC \ttbf \hbox to 11em{default\hss}
+\NC \ttbf \hbox to 11em{traditional\hss}
+\NC \ttbf \hbox to 11em{traditional strict\hss}
+\NC \NR
+\HL
+\NC \starthyphenation[default] \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \starthyphenation[traditional] \sethyphenationfeatures[strict]
+ \hsize1mm \getbuffer[demo] \stophyphenation
+\NC \NR
+\HL
+\stoptabulate
+
+By default \CONTEXT\ is configured to hyphenate words that start with an
+uppercase character. This behaviour is controlled in \TEX\ by the \typ {\uchyph}
+variable. A positive value will enable this and a negative one disables it.
+
+\starttabulate[|p|p|p|p|]
+\HL
+\NC \ttbf \hbox to 8em{default 0\hss}
+\NC \ttbf \hbox to 8em{default 1\hss}
+\NC \ttbf \hbox to 8em{traditional 0\hss}
+\NC \ttbf \hbox to 8em{traditional 1\hss}
+\NC \NR
+\HL
+\NC \starthyphenation[default] \hsize1mm \uchyph\zerocount TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \uchyph\zerocount TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[default] \hsize1mm \uchyph\plusone TEXified \dontcomplain \stophyphenation
+\NC \starthyphenation[traditional] \hsize1mm \uchyph\plusone TEXified \dontcomplain \stophyphenation
+\NC \NR
+\HL
+\stoptabulate
+
+The \LUA\ variants behaves the same as the built-in implementation (that of course
+remains the reference).
+
+\stopsection
+
+\startsection[title=Plug-ins]
+
+The default hyphenator is similar to the built-in one, with a couple of
+extensions as mentioned. However, you can plug in your own code, given that it
+does return a proper hyphenation result. One reason for providing this plug is
+that there are users who want to play with hyphenators based on a different
+logic. In \CONTEXT\ we already have some methods to deal with languages that
+(for instance) have no spaces but split on words or syllabes. A more tight
+integration with the hyphenator can have advantages so I will explore these
+options when there is demand.
+
+A result table indicates where we can break a word. If we have a four character
+word and can break after the second character, the result looks like this:
+
+\starttyping
+result = { false, true, false, false }
+\stoptyping
+
+Instead of \type {true} we can also have a table that has entries like the
+extensions discussed in a previous section. Let's give an example of a
+plug-in.
+
+\startbuffer
+\startluacode
+ local subset = {
+ a = true,
+ e = true,
+ i = true,
+ o = true,
+ u = true,
+ y = true,
+ }
+
+ languages.hyphenators.traditional.installmethod("test",
+ function(dictionary,word,n)
+ local t = { }
+ for i=1,#word do
+ local w = word[i]
+ if subset[w] then
+ t[i] = {
+ before = "<" .. w,
+ after = w .. ">",
+ left = false,
+ right = false,
+ }
+ else
+ t[i] = false
+ end
+ end
+ return t
+ end
+ )
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Here we hyphenate on vowels and surround them by angle brackets when
+split over lines. This alternative is installed as follows:
+
+\startbuffer
+\definehyphenationfeatures
+ [demo]
+ [alternative=test]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+We can now use it as follows:
+
+\starttyping
+\setuphyphenation[method=traditional]
+\sethyphenationfeatures[demo]
+\stoptyping
+
+When applied to one the tufte example we get:
+
+\startbuffer[demo]
+\starthyphenation[traditional]
+ \setuptolerance[tolerant]
+ \sethyphenationfeatures[demo]
+ \noindentation % \dontleavehmode
+ \input tufte\relax
+\stophyphenation
+\stopbuffer
+
+\blank \startnarrower \getbuffer[demo] \stopnarrower \blank
+
+A more realistic (but not perfect) example is the following:
+
+\startbuffer
+\startluacode
+ local packslashes = false
+
+ local specials = {
+ ["!"] = "before", ["?"] = "before",
+ ['"'] = "before", ["'"] = "before",
+ ["/"] = "before", ["\\"] = "before",
+ ["#"] = "before",
+ ["$"] = "before",
+ ["%"] = "before",
+ ["&"] = "before",
+ ["*"] = "before",
+ ["+"] = "before", ["-"] = "before",
+ [","] = "before", ["."] = "before",
+ [":"] = "before", [";"] = "before",
+ ["<"] = "before", [">"] = "before",
+ ["="] = "before",
+ ["@"] = "before",
+ ["("] = "before",
+ ["["] = "before",
+ ["{"] = "before",
+ ["^"] = "before", ["_"] = "before",
+ ["`"] = "before",
+ ["|"] = "before",
+ ["~"] = "before",
+ --
+ [")"] = "after",
+ ["]"] = "after",
+ ["}"] = "after",
+ }
+
+ languages.hyphenators.traditional.installmethod("url",
+ function(dictionary,word,n)
+ local t = { }
+ local p = nil
+ for i=1,#word do
+ local w = word[i]
+ local s = specials[w]
+ if s == "after" then
+ s = {
+ start = 1,
+ length = 1,
+ after = w,
+ left = false,
+ right = false,
+ }
+ specials[w] = s
+ elseif s == "before" then
+ s = {
+ start = 1,
+ length = 1,
+ before = w,
+ left = false,
+ right = false,
+ }
+ specials[w] = s
+ end
+ if not s then
+ s = false
+ elseif w == p and w == "/" then
+ t[i-1] = false
+ end
+ t[i] = s
+ if packslashes then
+ p = w
+ end
+ end
+ return t
+ end
+ )
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+Again we define a plug:
+
+\startbuffer
+\definehyphenationfeatures
+ [url]
+ [characters=all,
+ alternative=url]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+So, we only break a line after symbols.
+
+\startlinecorrection[blank]
+ \starthyphenation[traditional]
+ \tt
+ \sethyphenationfeatures[url]
+ \scale[width=\hsize]{\hyphenatedcoloredword{http://www.pragma-ade.nl}}
+ \stophyphenation
+\stoplinecorrection
+
+\noindentation A quick test can look as follows:
+
+\startbuffer
+\starthyphenation[traditional]
+ \sethyphenationfeatures[url]
+ \tt
+ \dontcomplain
+ \hsize 1mm
+ http://www.pragma-ade.nl
+\stophyphenation
+\stopbuffer
+
+\typebuffer
+
+Or:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Blocking ligatures]
+
+Yet another predefined feature is the ability to block a ligature. In
+traditional \TEX\ this can be done by putting a \type {{}} between
+the characters, although that effect can get lost when the text is
+manipulated. The natural way to do this in a \UNICODE\ environment
+is to use the special characters \type {zwj} and \type {zwnj}.
+
+We use the following example lines:
+
+\startbuffer[sample]
+supereffective \blank
+superef\zwnj fective
+\stopbuffer
+
+\typebuffer[sample]
+
+\noindentation and define two featuresets:
+
+\startbuffer
+\definehyphenationfeatures
+ [demo-1]
+ [characters=\zwnj\zwj,
+ joiners=yes]
+
+\definehyphenationfeatures
+ [demo-2]
+ [joiners=no]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\noindentation We limit the width to 1mm and get:
+
+\startlinecorrection[blank]
+\bTABLE[option=stretch,offset=.5ex]
+ \bTR
+ \bTD \tx
+ \type{method=default}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}\par
+ \type{featureset=demo-1}
+ \eTD
+ \bTD \tx
+ \type{method=traditional}\par
+ \type{featureset=demo-2}
+ \eTD
+ \eTR
+ \bTR
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[default]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \sethyphenationfeatures[demo-1]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \bTD
+ \hsize 1mm \dontcomplain
+ \starthyphenation[traditional]
+ \sethyphenationfeatures[demo-2]
+ \getbuffer[sample]
+ \stophyphenation
+ \eTD
+ \eTR
+\eTABLE
+\stoplinecorrection
+
+\stopsection
+
+\startsection[title=Special characters]
+
+The \type {characters} example can be used (to some extend) to do the
+same as the breakpoints mechanism (compounds).
+
+\startbuffer
+\definehyphenationfeatures
+ [demo-3]
+ [characters={()[]}]
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+\startbuffer[demo]
+\starthyphenation[traditional]
+ \sethyphenationfeatures[demo-3]
+ \dontcomplain
+ \hsize 1mm \noindentation
+ we use (super)special(ized) patterns
+\stophyphenation
+\stopbuffer
+
+\typebuffer[demo] \blank \getbuffer[demo] \blank
+
+We can make this more clever by adding patterns:
+
+\startbuffer
+\registerhyphenationpattern[en][)9]
+\registerhyphenationpattern[en][9(]
+\stopbuffer
+
+\typebuffer \blank \getbuffer \blank
+
+\noindentation This gives:
+
+\blank \getbuffer[demo] \blank
+
+\noindentation A detailed trace shows that these patterns get applied:
+
+\starthyphenation[traditional]
+ \ttx
+ \showhyphenationtrace[en][(super)special(ized)]
+\stophyphenation
+
+\unregisterhyphenationpattern[en][)9]
+\unregisterhyphenationpattern[en][9(]
+
+\noindentation The somewhat weird hyphens at the edges will in practice not show
+up because there is always one regular character there.
+
+\stopsection
+
+\startsection[title=Tracing]
+
+Among the tracing options (low level trackers) there is one for pattern developers:
+
+\startbuffer
+\usemodule[s-languages-hyphenation]
+
+\startcomparepatterns[de,nl,en,fr]
+ \input zapf \quad (\showcomparepatternslegend)
+\stopcomparepatterns
+\stopbuffer
+
+\typebuffer
+
+The different hyphenation points are shown with colored bars. Some valid points
+might not be shown because the font engine can collapse successive
+discretionaries.
+
+\getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-introduction.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-introduction.tex
new file mode 100644
index 00000000000..25bbb1a90e5
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-introduction.tex
@@ -0,0 +1,69 @@
+% language=uk
+
+\startcomponent languages-introduction
+
+\environment languages-environment
+
+\startchapter[title=Introduction][color=darkgray]
+
+This document describes an important property of the \TEX\ typesetting system and
+\CONTEXT\ in particular: the ability to deal with different languages at the same
+time. With languages we refer to natural languages. So, we're not going to
+discuss the \TEX\ language itself, not \METAPOST, nor \LUA.
+
+The original application of \TEX\ was English that uses the Latin script. The
+fonts that came with \TEX\ were suitable for that usage. When lines became too
+long they could be hyphenated using so called hyphenation patterns. Due to the
+implementation for many years there was a close relationship between fonts and
+hyphenation. Although at some point many more languages and scripts were
+supported, it was only when the \UNICODE\ aware variants showed up that
+hyphenation and fonts were decoupled. This makes it much more easier to mix
+languages that use different scripts. Although Greek, Cyrillic, Arabic, Chinese,
+Japanese, Korean and other languages have been supported for a while using
+(sometimes dirty) tricks, we now have cleaner implementations.
+
+We can hyphenate words in all languages (and scripts) that have a need for it,
+that is, split it at the end of a line and add a symbol before and|/|or after the
+break. The way words are broken into parts is called hyphenation and so called
+patterns are used to achieve that goal. The way these patterns are constructed
+and applied was part of the research related to \TEX\ development. The method
+used is also applied in other programs and is probably one of the few popular
+ways to deal with hyphenation. There have been ideas about extensions that cover
+the demands of certain languages but so far nothing better has shown up. In the
+end \TEX\ does a pretty decent job and more advanced tricks don't necessarily
+lead to better results.
+
+Hyphenation is driven by a language number and that's about it. This means that
+one cannot claim that \TEX\ in its raw form supports languages, other than that
+it can hyphenate and use fonts that provide the glyphs. It's upto a macro package
+to wrap this into a mechanism that provides the user an interface. So, when we
+speak about language support, hyphenation is only one aspect. Labels, like the
+\type {figure} in {\em figure~1.2} need to adapt to the main document language.
+When dates are shown they can be language specific. Scientific units and math
+function names can also be subjected to translation. Registers and other lists
+have to be sorted according to specific rules. Spacing dan differ per language.
+
+In this manual we will cover some of functionality in \CONTEXT\ \MKIV\ that
+relates to languages (and scripts). This manual is a compliment to other manuals,
+articles and documentation. Here we mostly focus on the language aspects. Some of
+the content (or maybe most) might looks alien and complex to you. This is because
+one purpose of this manual is to provide a place to wrap up some aspects of
+\CONTEXT. If you're not interested in that, just stick to the more general
+manuals that also cover language aspects.
+
+\startnotabene
+ This document is still under construction. The functionality discussed here
+ will stay and more might show up. Of course there are errors, and they're all
+ mine. The text is not checked for spelling errors. Feel free to let me know
+ what should get added.
+\stopnotabene
+
+\startlines
+Hans Hagen
+PRAGMA ADE, Hasselt NL
+2013 \emdash\ 2016
+\stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-labels.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-labels.tex
new file mode 100644
index 00000000000..3d1c00c044c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-labels.tex
@@ -0,0 +1,141 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-labels
+
+\startchapter[title=Labels][color=darkcyan]
+
+\startsection[title=Introduction]
+
+When we started using \TEX, I naturally started with plain \TEX. But it didn't
+take long before we tried \LATEX. Because our documents were in Dutch one of the
+first fights with this package was to get rid of the english labels. Because
+rather soon we decided to cook up an alternative package, a decent label
+mechanism was one of the first things to show up. And as soon as multiple
+language typesetting gets into view, such a mechanism becomes one of those
+language dependent features. In this chapter the basics will be covered.
+
+\stopsection
+
+\startsection[title=Defining labels]
+
+Before we define a label we need to define a label class. You probably seldom
+need that but this is how it's done:
+
+\startbuffer
+\definelabelclass [mylabel]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+There are some classes predefined:
+
+\starttabulate[|lB|l|]
+ \NC head \NC (complete) titles like \headtext {chapter} and \headtext {figure} \NC \NR
+ \NC label \NC in||text labels like \labeltext {chapter} and \labeltext {figure} \NC \NR
+ \NC mathlabel \NC function names like \mathlabeltext{sin} and \mathlabeltext{cos} \NC \NR
+ \NC taglabel \NC labels used for tagging purposed in the backend \NC \NR
+ \NC btxlabel \NC labels used in typesetting bibliographic items \NC \NR
+\stoptabulate
+
+The physical units mechanism also uses labels: unit, operator, prefix and suffix.
+All these labels are defined per language with a fall back on english.
+
+Given that we have defined class \type {mylabel}, a label itself is set like
+this:
+
+\startbuffer
+\setupmylabeltext
+ [en]
+ [first={<after first},
+ second={{before second>},{<after second}}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The first argument (the language) is optional. In the next section we will see
+how these labels are used. A lot of labels are predefined, in \MKIV\ this happens
+in the file \type {lang-txt.lua}. There is no need to adapt this file as you can
+always add labels run time.
+
+\stopsection
+
+\startsection[title=Using labels]
+
+How a label is called depends on the way it needs to be used. In any case the
+main language set determines the language of the label. So, when in an Dutch text
+we temporary switch to German, the Dutch labels are used.
+
+\startbuffer
+\starttabulate[||||]
+ \NC \bf command \NC \ttbf first \NC \ttbf {second} \NC \NR
+ \HL
+ \NC \type {\leftmylabeltext {tag}} \NC \leftmylabeltext {first} \NC \leftmylabeltext {second} \NC \NR
+ \NC \type {\rightmylabeltext{tag}} \NC \rightmylabeltext{first} \NC \rightmylabeltext{second} \NC \NR
+ \NC \type {\mylabeltext {tag}} \NC \mylabeltext {first} \NC \mylabeltext {second} \NC \NR
+ \NC \type {\mylabeltexts {tag}{text}} \NC \mylabeltexts {first}{text} \NC \mylabeltexts {second}{text} \NC \NR
+\stoptabulate
+\stopbuffer
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Hooks]
+
+Some mechanisms have label support built in, most noticeably sections
+heads and numbered items, like figure captions.
+
+\startbuffer
+\definehead
+ [myhead]
+ [subsection]
+
+\setuphead
+ [myhead]
+ [bodypartlabel=bodypartmyhead]
+
+\setuplabeltext
+ [en]
+ [bodypartmyhead=My Head: ]
+
+\myhead{Welcome}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The head text label class can be used as follows:
+
+\startbuffer
+\setupheadtext
+ [SomeHead=Just A Title]
+
+\subsection
+ [title=\headtext{SomeHead}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+A label will obey the style settings, as in:
+
+\startbuffer
+\definehead
+ [MyFancyHead]
+ [subsection]
+ [style={\bs\setcharactercasing[Words]}]
+
+\setupheadtext
+ [SomeHead=just another title]
+
+\MyFancyHead
+ [title=\headtext{SomeHead}]
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-mkiv.tex
new file mode 100644
index 00000000000..dbf9875e16b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-mkiv.tex
@@ -0,0 +1,38 @@
+\enablemode[simple] % ,oversized
+
+\startproduct languages-mkiv
+
+\environment languages-environment
+
+\setupbackgrounds[page][background=]
+
+\component languages-cover
+
+% \startcovermatter
+
+\page[dummy] \setupbackgrounds[page][background=page] \resetuserpagenumber
+
+% \stopcovermatter
+
+\startfrontmatter
+ \component languages-contents
+ \component languages-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component languages-basics
+ \component languages-hyphenation
+ \component languages-labels
+ \component languages-numbering
+ \component languages-typesetting
+ \component languages-goodies
+ \component languages-sorting
+\stopbodymatter
+
+\startappendices
+ \component languages-appendix
+\stopappendices
+
+\component languages-back
+
+\stopproduct
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-numbering.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-numbering.tex
new file mode 100644
index 00000000000..510f5103486
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-numbering.tex
@@ -0,0 +1,295 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-numbering
+
+\startchapter[title=Numbering][color=darkgreen]
+
+\startsection[title=Introduction]
+
+Numbering is complex and in \CONTEXT\ it's not easy either. This is because we
+not only have 1, 2, 3 \unknown\ but also sub numbers like 1a, 1b, 1ic \unknown\
+or 1.a, 1.b, 1.c \unknown\ There can be many levels, different separators, final
+symbols. As we're talking languages we only discuss conversion here: the
+mechanism that turns a number in for instance a letter. It happens that the
+mapping from a number onto a letter is language dependent. The next lines show
+how English, Spanish and Slovenian numbers:
+
+\blank
+\startpacked
+\startcolor[maincolor]
+\noindentation\dontleavehmode
+ {\ttbf\mainlanguage[en]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\noindentation\dontleavehmode
+ {\ttbf\mainlanguage[es]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\noindentation\dontleavehmode
+ {\ttbf\mainlanguage[sl]\dorecurse{28}
+ {\hbox to 1.5em{\convertnumber{alphabetic}{#1}\hss}}}\par
+\stopcolor
+\stoppacked
+\blank
+
+You convert a number into a letter with:
+
+\starttyping
+\convertnumber{alphabetic}{15}
+\stoptyping
+
+There is also \type {\uconvertnumber} which does not expand unless typesetting
+is going on. Normally you don't need to bother about this.
+
+The \type {alphabetic} converter adapts to the current main language. When a
+language has no special alphabet, the regular 26 characters are used.
+
+A converter can also convert to a roman numeral, a language specific ordered
+list, a day or month, an ordinal string and again there can be a language
+specific conversion. The general conversion macro takes a conversion name and
+a number. When a conversion can be set (for instance in an itemized list, or in
+section numbering) you can use these names. You can define additional
+converters if needed, as long as the converter can handle a number.
+
+\starttyping
+\defineconversion [alphabetic] [\alphabeticnumerals]
+\stoptyping
+
+Here \type {\alphabeticnumerals} is a converter. If you look into the source of
+\CONTEXT\ you will see that many converters are calling out to \LUA, where we
+have implemented those specific conversions. The following table has long and
+short names. The short one are historic.
+
+\starttabulate
+\FL
+\NC month \NC \type {\monthlong} \NC \NR
+\NC month:mnem \NC \type {\monthshort} \NC \NR
+\ML
+\NC character \NC \type {\character} \NC \NR
+\NC Character \NC \type {\Character} \NC \NR
+\NC characters \NC \type {\characters} \NC \NR
+\NC Characters \NC \type {\Characters} \NC \NR
+\ML
+\NC AK \NC \type {\smallcappedcharacters} \NC \NR
+\NC KA \NC \type {\smallcappedcharacters} \NC \NR
+\ML
+\NC alphabetic a \NC \type {\alphabeticnumerals} \NC \NR
+\NC Alphabetic A \NC \type {\Alphabeticnumerals} \NC \NR
+\ML
+\NC number numbers n \NC \type {\numbers} \NC \NR
+\NC Numbers N \NC \type {\Numbers} \NC \NR
+\NC mediaeval m \NC \type {\mediaeval} \NC \NR
+\ML
+\NC word words \NC \type {\verbosenumber} \NC \NR
+\NC Word Words \NC \type {\VerboseNumber} \NC \NR
+\ML
+\NC ordinal \NC \type {\ordinalnumber} \NC \NR
+\NC Ordinal \NC \type {\Ordinalnumber} \NC \NR
+\ML
+\NC romannumerals i r \NC \type {\romannumerals} \NC \NR
+\NC Romannumerals I R \NC \type {\Romannumerals} \NC \NR
+\ML
+\NC o \NC \type {\oldstylenumerals} \NC \NR
+\NC O \NC \type {\oldstylenumerals} \NC \NR
+\NC or \NC \type {\oldstyleromannumerals} \NC \NR
+\ML
+\NC KR \NC \type {\smallcappedromannumerals} \NC \NR
+\NC RK \NC \type {\smallcappedromannumerals} \NC \NR
+\ML
+\NC greek g \NC \type {\greeknumerals} \NC \NR
+\NC Greek G \NC \type {\Greeknumerals} \NC \NR
+\NC mathgreek \NC \type {\mathgreek} \NC \NR
+\ML
+\NC abjadnumerals \NC \type {\abjadnumerals} \NC \NR
+\NC abjadnodotnumerals \NC \type {\abjadnodotnumerals} \NC \NR
+\NC abjadnaivenumerals \NC \type {\abjadnaivenumerals} \NC \NR
+\ML
+\NC thainumerals \NC \type {\thainumerals} \NC \NR
+\NC devanagarinumerals \NC \type {\devanagarinumerals} \NC \NR
+\NC gurmurkhinumerals \NC \type {\gurmurkhinumerals} \NC \NR
+\NC gujaratinumerals \NC \type {\gujaratinumerals} \NC \NR
+\NC tibetannumerals \NC \type {\tibetannumerals} \NC \NR
+\NC greeknumerals \NC \type {\greeknumerals} \NC \NR
+\NC Greeknumerals \NC \type {\Greeknumerals} \NC \NR
+\NC arabicnumerals \NC \type {\arabicnumerals} \NC \NR
+\NC persiannumerals \NC \type {\persiannumerals} \NC \NR
+\NC arabicexnumerals \NC \type {\arabicexnumerals} \NC \NR
+\NC arabicdecimals \NC \type {\arabicdecimals} \NC \NR
+\NC persiandecimals \NC \type {\persiandecimals} \NC \NR
+\ML
+\NC koreannumerals kr \NC \type {\koreannumerals} \NC \NR
+\NC koreanparenthesisnumerals kr-p \NC \type {\koreanparenthesisnumerals} \NC \NR
+\NC koreancirclenumerals kr-c \NC \type {\koreancirclenumerals} \NC \NR
+\ML
+\NC chinesenumerals cn \NC \type {\chinesenumerals} \NC \NR
+\NC chinesecapnumerals cn-c \NC \type {\chinesecapnumerals} \NC \NR
+\NC chineseallnumerals cn-a \NC \type {\chineseallnumerals} \NC \NR
+\ML
+\NC sloveniannumerals \NC \type {\sloveniannumerals} \NC \NR
+\NC slovenianNumerals \NC \type {\slovenianNumerals} \NC \NR
+\ML
+\NC spanishnumerals \NC \type {\spanishnumerals} \NC \NR
+\NC spanishNumerals \NC \type {\spanishNumerals} \NC \NR
+\LR
+\stoptabulate
+
+The \type {alphabetic} and \type {Alphabetic} converters adapt to slovenian and
+spanish as do their small capped alternatives. There are more general helpers for it
+too:
+
+\starttyping
+\languagecharacters{number}
+\languageCharacters{number}
+\stoptyping
+
+Also language related is the \type {\continuednumber} macro. Here we see an
+application:
+
+\startbuffer
+1 \continuednumber{1}
+1, 2 \continuednumber{2}
+1, 2, 3 \continuednumber{3}
+\stopbuffer
+
+\typebuffer
+
+\noindentation What renders as:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+Such a macro is typically used in combination with counters ant it just typesets
+a label text depending on the valu ebeing non|-|zero.
+
+\startbuffer
+\setuplabeltext[en][continued={and so on}]
+1, 2, 3 \continuednumber{3}
+1, 2, 3 \convertnumber{continued}{3}
+\stopbuffer
+
+\typebuffer
+
+\noindentation This gives:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+In the rare case that you want to check if a conversion is defined you can use
+
+\starttyping
+\doifelseconversiondefined{name}{true}{false}
+\stoptyping
+
+So,
+
+\startbuffer
+\doifelseconversiondefined{characters}{we can convert}{forget about it}
+\stopbuffer
+
+\typebuffer
+
+\noindentation Gives:
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+There are also some non language related converters that we mention here for
+completeness:
+
+\blank
+\noindentation\type {set 0}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 0}{#1} }\stopcolor\par
+\noindentation\type {set 1}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 1}{#1} }\stopcolor\par
+\noindentation\type {set 2}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 2}{#1} }\stopcolor\par
+\noindentation\type {set 3}: \startcolor[maincolor]\dorecurse{20}{\convertnumber{set 3}{#1} }\stopcolor\par
+\blank
+
+When a set overruns we start again at the first element.
+
+\noindentation The ordinal converter produces output like \color [maincolor]
+{\convertnumber {ordinal}{123}} and \color [maincolor] {\convertnumber
+{ordinal}{654}}. The corresponding string renderer is \type {\highordinalstr}.
+
+% quite limited currently op not documented here:
+%
+% \wordtonumber{two}{3}
+% \wordtonumber{fivethousand}{unknown}
+
+\stopsection
+
+\startsection[title=Dates]
+
+Dates are also language dependent. The following macros take a number and return
+the name of the month or day.
+
+\starttabulate
+\NC \type {\monthlong } \NC \monthlong {10} \NC \NR
+\NC \type {\monthshort} \NC \monthshort{10} \NC \NR
+\NC \type {\MONTH } \NC \MONTH {10} \NC \NR
+\NC \type {\MONTHLONG } \NC \MONTHLONG {10} \NC \NR
+\NC \type {\MONTHSHORT} \NC \MONTHSHORT{10} \NC \NR
+\NC \type {\weekday } \NC \weekday {5} \NC \NR
+\NC \type {\WEEKDAY } \NC \WEEKDAY {5} \NC \NR
+\stoptabulate
+
+The current date can be typeset with \type {\currentdate} and a
+specific date with \type {\date}, for instance:
+
+\startbuffer
+\currentdate[weekday,day,month,year]
+\currentdate[WEEKDAY,day,MONTH,year]
+\date[d=12,m=12,y=1998][weekday]
+\date[d=12,m=12,y=1998]
+\stopbuffer
+
+\typebuffer
+
+\startlines[color=maincolor]
+\getbuffer
+\stoplines
+
+\noindentation Possible elements of the specification are:
+
+\starttabulate
+\FL
+\NC + ord \NC ordinal suffix \NC \NR
+\NC ++ highord \NC high ordinal suffix \NC \NR
+\ML
+\NC mnem: \NC mnemonic prefix \NC \NR
+\ML
+\NC Y y year \NC year 4 digits \NC \NR
+\NC yy \NC year 2 digits \NC \NR
+\ML
+\NC M \NC month 1 or 2 digits \NC \NR
+\NC mm \NC month 2 digits \NC \NR
+\ML
+\NC D \NC day 1 or 2 digits \NC \NR
+\NC dd \NC day 2 digits \NC \NR
+\ML
+\NC W \NC 1 digit \NC \NR
+\ML
+\NC month m \NC language dependent (can be mnemonic) \NC \NR
+\NC day d \NC language dependent \NC \NR
+\NC weekday w \NC language dependent \NC \NR
+\ML
+\NC MONTH \NC month uppercased \NC \NR
+\NC WEEKDAY \NC weekday uppercased \NC \NR
+\ML
+\NC referral \NC YYYMMDD \NC \NR
+\ML
+\NC space \\ \NC space \NC \NR
+\NC <word> \NC word \NC \NR
+\LL
+\stoptabulate
+
+\stopsection
+
+% \startsection[title=Counters]
+%
+% \stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-sorting.tex b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-sorting.tex
new file mode 100644
index 00000000000..abf7b292cd0
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/languages/languages-sorting.tex
@@ -0,0 +1,235 @@
+% language=uk
+
+\environment languages-environment
+
+\startcomponent languages-sorting
+
+\startchapter[title=Sorting][color=darkblue]
+
+\startsection[title=Introduction]
+
+Sorting is complex, not so much for English, Dutch, German, etc. only texts but
+there are languages and scripts that are more demanding. There are several
+complications:
+
+\startitemize
+
+ \startitem
+ There can be characters that have accents, like à, á, â, ã, ä
+ \unknown\ that have a base shape a and in an index these often end up
+ close to each other. The order can differ per language.
+ \stopitem
+
+ \startitem
+ There are upper and lowercase words and there can be different
+ expectations to them being mixed or separated.
+ \stopitem
+ \startitem
+ Some scripts have characters that are combinations, like Æ, and
+ one might want to see them as one character or two, in which the
+ second one obeys the sorting order. The shape can dominate here.
+ \stopitem
+ \startitem
+ Some scripts, like Japanese, are a combination of several scripts
+ and sorting then depends on normalization.
+ \stopitem
+ \startitem
+ When there are many glyphs, like in Chinese, the order can depend
+ on the complexity of the glyph and when we're lucky that order is
+ reflected in the numeric character order.
+ \stopitem
+\stopitemize
+
+Often the rules are somewhat strict and one can doubt of the same rules would
+have been imposed if computers had been developed earlier. Given discussions one
+can doubt if the rules are really consistent or just there because someone (or a
+group) with influence set the standard (not so much different from grammar). So,
+if we deal with sorting, we do that in such a way that users can (to some extend)
+influence the outcome. After all, one important aspect of typesetting and
+organizing content is that the users gets the feeling of control and a diversion
+from a standard can be part of that. The reader will often not notice these
+details. In the next sections we will explore the way sorting is done in
+\CONTEXT. The method evolved over a few decades. In \MKII\ sorting happened
+between runs and it was just part of the processing of a document that users
+never really saw in action. Sorting just happened and few users will have noticed
+that we moved from a \MODULA\ program to a \PERL\ script and ended up with a
+\RUBY\ script. In fact, there is a \LUA\ replacement but it never got tested well
+because we moved in to \MKIV. There all happens inside the engine using \LUA.
+Some principles stayed the same but we are more flexible now.
+
+\stopsection
+
+\startsection[title=How it works]
+
+How does sorting work out? Take these words:
+
+\startlines
+abracadabra
+abräcàdábra
+àbracádabrä
+ábracadàbra
+äbrácadabrà
+\stoplines
+
+As long as they end up in an order where the reader can find it, we're okay.
+After all we're pretty good in pattern recognition.
+
+There are probably many ways to implement a sorter but the one we uses is more or
+less a follow up on the one we had for over a decade and was the result of an
+evolution based on user demand. It boils down to cleaning up the string in such a
+way that it can be split into meaningful characters. One can argue that we should
+use some kd of standardized sorting method but the problem is that we always have
+to deal with for instance embedded tex commands and mixed content, for instance
+numbers. And users using the same language can have different opinions about the
+rules too.
+
+A word (or sequence of words) is split into characters. Because there can be
+\TEX\ commands in there some cleanup happens beforehand. After that we create
+several lists with numbers that will be compared when sorting two entries.
+
+\startluacode
+
+-- local ignoredoffset = sorters.constants.ignoredoffset
+-- local replacementoffset = sorters.constants.replacementoffset
+-- local digitsoffset = sorters.constants.digitsoffset
+-- local digitsmaximum = sorters.constants.digitsmaximum
+
+local context = context
+
+local utfchar = utf.char
+local utfyte = utf.byte
+local concat = table.concat
+local gsub = string.gsub
+local formatters = string.formatters
+
+local f_char = formatters["%s"]
+local f_byte = formatters["x%02X"]
+
+local meaning = {
+ ch = "raw character",
+ mm = "minus mapping",
+ zm = "zero mapping",
+ pm = "plus mapping",
+ mc = "lowercase - 1",
+ zc = "lowercase",
+ pc = "lowercase + 1",
+ uc = "unicode",
+}
+
+local function show(s,key,bodyfont)
+ local c = s[key]
+ local t = { }
+ for i=1,#c do
+ local ci = c[i]
+ if type(ci) == "string" then
+ t[i] = f_char(ci)
+ else
+ t[i] = f_byte(ci)
+ end
+ end
+ t = concat(t,"~")
+ context.NC() context.maincolor() context(key)
+ context.NC() context.maincolor() context(meaning[key])
+ context.NC() if bodyfont then context.switchtobodyfont{bodyfont} end context(t)
+ context.NC() context.NR()
+end
+
+function document.ShowSortSplit(str,language,bodyfont)
+ sorters.setlanguage(language or "en")
+ local s = sorters.splitters.utf(str)
+ context.starttabulate{ "|Tl|Tlj2|Tp|" }
+ context.FL()
+ context.NC()
+ context.NC() context.maincolor() context(language)
+ context.NC() if bodyfont then context.switchtobodyfont{bodyfont} end context.maincolor() context(str)
+ context.NC() context.NR()
+ context.ML()
+ show(s,"ch",bodyfont)
+ show(s,"uc")
+ show(s,"zc")
+ show(s,"mc")
+ show(s,"pc")
+ show(s,"zm")
+ show(s,"mm")
+ show(s,"pm")
+ context.LL()
+ context.stoptabulate()
+end
+
+\stopluacode
+
+We can best demonstrate this with a few examples. As usual an English language
+example is trivial.
+
+\ctxlua{document.ShowSortSplit("abracadabra","en")}
+
+When we add an uppercase character we get a slightly different outcome:
+
+\ctxlua{document.ShowSortSplit("Abracadabra","en")}
+
+Some characters will be split, like \type {æ}:
+
+\ctxlua{document.ShowSortSplit("æsop","en")}
+
+It gets more complex when langiage specific demands kick in. Compare an English, German
+and Austrian split:
+
+\ctxlua{document.ShowSortSplit("Abräcàdábra","en")}
+\ctxlua{document.ShowSortSplit("Abräcàdábra","de")}
+\ctxlua{document.ShowSortSplit("Abräcàdábra","de-at")}
+
+The way a character gets replaced, like \type {ä} into \type {ae}, is defined in
+\type {sort-lan.lua} using \LUA\ tables. We will not explain all the obscure
+details here; most of the work is already done, so users are not bothered by
+these definitions. And new ones can often be made by copying and adapting an
+existing one.
+
+The sorting itself is specified by a sequence:
+
+\starttabulate[|TlCT{maincolor}|Tl|]
+\NC default \NC zc,pc,zm,pm,uc \NC \NR
+\NC before \NC mm,mc,uc \NC \NR
+\NC after \NC pm,mc,uc \NC \NR
+\NC first \NC pc,mm,uc \NC \NR
+\NC last \NC mc,mm,uc \NC \NR
+\stoptabulate
+
+The raw character is what we get after the (language specific) replacement has
+been applied and the unicodes are used when comparing. Lowercasing is done using
+the \UNICODE\ lowercase code, but one can define language specific ones too. The
+plus and minus variants can be used to force lowercase before or after uppercase.
+The mapping is based on an alphabet specification so this can differ per language
+and again we also provide plus and minus values that depend on case. When a
+character has no case we use shapes instead. For instance, the shape of \type
+{à} is \type {a}. Digits are treated special and currently get an offset so that
+they end up last in the sort order.
+
+\defineregister[jindex]
+
+\startbuffer
+ぱあ \jindex{ぱあ}
+ぱー \jindex{ぱー}
+ぱぁ \jindex{ぱぁ}
+\stopbuffer
+
+{\switchtobodyfont[ipaex]\startlines\typebuffer\stoplines}
+
+This three entry index\jindex{ぱあ}\jindex{ぱー}\jindex{ぱぁ} should be sorted in the order:
+{\switchtobodyfont[ipaex]\ruledhbox{ぱー}\enspace\ruledhbox{ぱぁ}\enspace\ruledhbox{ぱあ}}.
+
+{\mainlanguage[jp]\switchtobodyfont[ipaex]\placeregister[jindex][language=jp,n=1,method=default]}
+{\mainlanguage[jp]\switchtobodyfont[ipaex]\placeregister[jindex][language=jp,n=1,method=zm]}
+
+\ctxlua{document.ShowSortSplit("ぱあ","jp","ipaex")}
+\ctxlua{document.ShowSortSplit("ぱー","jp","ipaex")}
+\ctxlua{document.ShowSortSplit("ぱぁ","jp","ipaex")}
+
+{\em To be continued!}
+
+\stopsection
+
+% ぱー $\prec$ ぱぁ $\prec$ ぱあ
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/lua/lua-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/lua/lua-mkiv.tex
new file mode 100644
index 00000000000..a6a2b465a22
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/lua/lua-mkiv.tex
@@ -0,0 +1,129 @@
+% language=uk
+
+% author : Hans Hagen, PRAGMA ADE, NL
+% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported
+
+\usemodule[art-01,abr-02]
+
+\setupbodyfont
+ [10pt]
+
+\definecolor
+ [maincolor]
+ [b=.4]
+
+\usesymbols
+ [cc]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\definefont
+ [TitlePageFont]
+ [file:lmmonolt10-bold.otf]
+
+\setuphead
+ [color=maincolor]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title={Lua, the context libraries},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=Lua,
+ subtitle=the context libraries,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage ;
+
+ numeric w ; w := bbwidth(Page) ;
+ numeric h ; h := bbheight(Page) ;
+
+ fill Page withcolor \MPcolor{maincolor} ;
+
+ draw textext.urt("\TitlePageFont \getvariable{document}{title}") xsized (0.8w) shifted (.1w,.2h) withcolor .80white ;
+ draw textext.top("\TitlePageFont \getvariable{document}{subtitle}") xsized (0.8w) shifted (.5w,.1h) withcolor .60white ;
+
+ StopPage ;
+
+\stopMPpage
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title=Introduction]
+
+Once we started the \LUATEX\ project it didn't take long for \CONTEXT\ to use
+the \LUA\ language extensively. And so, rather soon, a bunch of libraries
+evolved that provided all kind of helpers. Because \LUATEX\ can also act as
+a \LUA\ interpreter, and because we have \type {mtxrun} as script runner
+we can also use some of those libraries outside \CONTEXT. So, for me, a rather
+natural way to run a \LUA\ script is:
+
+\starttyping
+mtxrun --script myscript.lua <optional arguments>
+\stoptyping
+
+The advantage of this approach is that you operate in the same file domain as
+your \TEX\ runs as all file locators are preloaded as well. However, in some
+cases this is not possible, for instance when you run a stock \LUA\ or some
+embedded version. For this we provide an alternative mechanism.
+
+\stopsection
+
+\startsection[title=Making libraries]
+
+In the \CONTEXT\ distribution there is a script called \type {mtxlibs.lua} that
+can create a library for you that has the basic general purpose \CONTEXT\
+libraries on board, as well as whatever more you specify.
+
+\starttyping
+lua mtxlibs.lua --selfmerge myproject-a-libs.lua
+lua mtxlibs.lua --selfmerge myproject-b-libs.lua \
+ trac-lmx
+lua mtxlibs.lua --selfmerge myproject-c-libs.lua \
+ util-sql util-sql-imp-client util-sql-imp-library
+\stoptyping
+
+Here we create three libs. The first one has only the core libraries. You can
+read more about what they provide in the \type {cld-mkiv.pdf} manual. The second
+library includes code for creating web pages. The third variant preloads \SQL\
+support.
+
+You can best run this file in its own directory, in the \CONTEXT\ tree, so that
+it knows where to find the libraries needed. Of course you can put the result
+everywhere you want, preferably alongside your normal scripts. As we merge code,
+this is a rather good way to prevent compatibility issues. After all, some of
+the code might get improved.
+
+You can \type {require("mtxlibs")} directly in which case it will load the core
+libraries runtime. Of course this means that \LUA\ should be able to figure out
+where it can find them.
+
+\stopsection
+
+\startsubject[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsubject
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-contents.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-contents.tex
new file mode 100644
index 00000000000..6d06b3ef082
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-contents.tex
@@ -0,0 +1,20 @@
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-contents
+
+\starttitle[title=Contents]
+
+\start
+
+ \definecolor[maincolor][black]
+
+ \placelist
+ [chapter,section,subsection]
+ [criterium=text]
+
+\stop
+
+\stoptitle
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
new file mode 100644
index 00000000000..35c27cfb601
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
@@ -0,0 +1,879 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-enhancements
+
+\startchapter[reference=enhancements,title={Basic \TEX\ enhancements}]
+
+\section{Introduction}
+
+From day one, \LUATEX\ has offered extra features compared to the superset of
+\PDFTEX\ and \ALEPH. This has not been limited to the possibility to execute
+\LUA\ code via \type {\directlua}, but \LUATEX\ also adds functionality via new
+\TEX|-|side primitives or extensions to existing ones.
+
+When \LUATEX\ starts up in \quote {iniluatex} mode (\type {luatex -ini}), it
+defines only the primitive commands known by \TEX82 and the one extra command
+\type {\directlua}. As is fitting, a \LUA\ function has to be called to add the
+extra primitives to the user environment. The simplest method to get access to
+all of the new primitive commands is by adding this line to the format generation
+file:
+
+\starttyping
+\directlua { tex.enableprimitives('',tex.extraprimitives()) }
+\stoptyping
+
+But be aware that the curly braces may not have the proper \type {\catcode}
+assigned to them at this early time (giving a \quote {Missing number} error), so
+it may be needed to put these assignments before the above line:
+
+\starttyping
+\catcode `\{=1
+\catcode `\}=2
+\stoptyping
+
+More fine|-|grained primitives control is possible and you can look up the
+details in \in {section} [luaprimitives]. For simplicity's sake, this manual
+assumes that you have executed the \type {\directlua} command as given above.
+
+The startup behaviour documented above is considered stable in the sense that
+there will not be backward|-|incompatible changes any more. We have promoted some
+rather generic \PDFTEX\ primitives to core \LUATEX\ ones, and the ones inherited
+frome \ALEPH\ (\OMEGA) are also promoted. Effectively this means that we now only
+have the \type {tex}, \type {etex} and \type {luatex} sets left.
+
+In \in {Chapter} [modifications] we discuss several primitives that are derived
+from \PDFTEX\ and \ALEPH\ (\OMEGA). Here we stick to real new ones. In the
+chapters on fonts and math we discuss a few more new ones.
+
+\section{Version information}
+
+\subsection {\type {\luatexbanner}, \type {\luatexversion} and \type {\luatexrevision}}
+
+There are three new primitives to test the version of \LUATEX:
+
+\starttabulate[|l|pl|pl|]
+\NC \bf primitive \NC \bf explanation \NC \bf value \NC \NR
+\NC \type {\luatexbanner} \NC the banner reported on the command line \NC \luatexbanner \NC \NR
+\NC \type {\luatexversion} \NC a combination of major and minor number \NC \the\luatexversion \NC \NR
+\NC \type {\luatexrevision} \NC the revision number, the current value is \NC \luatexrevision \NC \NR
+\stoptabulate
+
+The official \LUATEX\ version is defined as follows:
+
+\startitemize
+\startitem
+ The major version is the integer result of \type {\luatexversion} divided by
+ 100. The primitive is an \quote {internal variable}, so you may need to prefix
+ its use with \type {\the} depending on the context.
+\stopitem
+\startitem
+ The minor version is the two-digit result of \type {\luatexversion} modulo 100.
+\stopitem
+\startitem
+ The revision is the given by \type {\luatexrevision}. This primitive expands to
+ a positive integer.
+\stopitem
+\startitem
+ The full version number consists of the major version, minor version and
+ revision, separated by dots.
+\stopitem
+\stopitemize
+
+\subsection{\type {\formatname}}
+
+The \type {\formatname} syntax is identical to \type {\jobname}. In \INITEX, the
+expansion is empty. Otherwise, the expansion is the value that \type {\jobname} had
+during the \INITEX\ run that dumped the currently loaded format. You can use this
+token list to provide your own version info.
+
+\section{\UNICODE\ text support}
+
+\subsection {Extended ranges}
+
+Text input and output is now considered to be \UNICODE\ text, so input characters
+can use the full range of \UNICODE\ ($2^{20}+2^{16}-1 = \hbox{0x10FFFF}$). Later
+chapters will talk of characters and glyphs. Although these are not
+interchangeable, they are closely related. During typesetting, a character is
+always converted to a suitable graphic representation of that character in a
+specific font. However, while processing a list of to|-|be|-|typeset nodes, its
+contents may still be seen as a character. Inside \LUATEX\ there is no clear
+separation between the two concepts. Because the subtype of a glyph node can be
+changed in \LUA\ it is up to the user: subtypes larger than 255 indicate that
+font processing has happened.
+
+A few primitives are affected by this, all in a similar fashion: each of them has
+to accommodate for a larger range of acceptable numbers. For instance, \type
+{\char} now accepts values between~0 and $1{,}114{,}111$. This should not be a
+problem for well|-|behaved input files, but it could create incompatibilities for
+input that would have generated an error when processed by older \TEX|-|based
+engines. The affected commands with an altered initial (left of the equals sign)
+or secondary (right of the equals sign) value are: \type {\char}, \type
+{\lccode}, \type {\uccode}, \type {\catcode}, \type {\sfcode}, \type {\efcode},
+\type {\lpcode}, \type {\rpcode}, \type {\chardef}.
+
+As far as the core engine is concerned, all input and output to text files is
+\UTF-8 encoded. Input files can be pre|-|processed using the \type {reader}
+callback. This will be explained in a later chapter.
+
+Output in byte|-|sized chunks can be achieved by using characters just outside of
+the valid \UNICODE\ range, starting at the value $1{,}114{,}112$ (0x110000). When
+the time comes to print a character $c>=1{,}114{,}112$, \LUATEX\ will actually
+print the single byte corresponding to $c$ minus 1{,}114{,}112.
+
+Output to the terminal uses \type {^^} notation for the lower control range
+($c<32$), with the exception of \type {^^I}, \type {^^J} and \type {^^M}. These
+are considered \quote {safe} and therefore printed as|-|is. You can disable
+escaping with \type {texio.setescape(false)} in which case you get the normal
+characters on the console.
+
+Normalization of the \UNICODE\ input can be handled by a macro package during
+callback processing (this will be explained in \in {section} [iocallback]).
+
+\subsection{\type {\Uchar}}
+
+The expandable command \type {\Uchar} reads a number between~0 and $1{,}114{,}111$
+and expands to the associated \UNICODE\ character.
+
+\section{Extended tables}
+
+All traditional \TEX\ and \ETEX\ registers can be 16-bit numbers. The affected
+commands are:
+
+\startfourcolumns
+\starttyping
+\count
+\dimen
+\skip
+\muskip
+\marks
+\toks
+\countdef
+\dimendef
+\skipdef
+\muskipdef
+\toksdef
+\insert
+\box
+\unhbox
+\unvbox
+\copy
+\unhcopy
+\unvcopy
+\wd
+\ht
+\dp
+\setbox
+\vsplit
+\stoptyping
+\stopfourcolumns
+
+Because font memory management has been rewritten, character properties in fonts
+are no longer shared among fonts instances that originate from the same metric
+file.
+
+\section{Attributes}
+
+\subsection{Attribute registers}
+
+Attributes are a completely new concept in \LUATEX. Syntactically, they behave a
+lot like counters: attributes obey \TEX's nesting stack and can be used after
+\type {\the} etc.\ just like the normal \type {\count} registers.
+
+\startsyntax
+\attribute <16-bit number> <optional equals> <32-bit number>!crlf
+\attributedef <csname> <optional equals> <16-bit number>
+\stopsyntax
+
+Conceptually, an attribute is either \quote {set} or \quote {unset}. Unset
+attributes have a special negative value to indicate that they are unset, that
+value is the lowest legal value: \type {-"7FFFFFFF} in hexadecimal, a.k.a.
+$-2147483647$ in decimal. It follows that the value \type {-"7FFFFFFF} cannot be
+used as a legal attribute value, but you {\it can\/} assign \type {-"7FFFFFFF} to
+\quote {unset} an attribute. All attributes start out in this \quote {unset}
+state in \INITEX.
+
+Attributes can be used as extra counter values, but their usefulness comes mostly
+from the fact that the numbers and values of all \quote {set} attributes are
+attached to all nodes created in their scope. These can then be queried from any
+\LUA\ code that deals with node processing. Further information about how to use
+attributes for node list processing from \LUA\ is given in~\in {chapter}[nodes].
+
+Attributes are stored in a sorted (sparse) linked list that are shared when
+possible. This permits efficient testing and updating.
+
+\subsection{Box attributes}
+
+Nodes typically receive the list of attributes that is in effect when they are
+created. This moment can be quite asynchronous. For example: in paragraph
+building, the individual line boxes are created after the \type {\par} command has
+been processed, so they will receive the list of attributes that is in effect
+then, not the attributes that were in effect in, say, the first or third line of
+the paragraph.
+
+Similar situations happen in \LUATEX\ regularly. A few of the more obvious
+problematic cases are dealt with: the attributes for nodes that are created
+during hyphenation, kerning and ligaturing borrow their attributes from their
+surrounding glyphs, and it is possible to influence box attributes directly.
+
+When you assemble a box in a register, the attributes of the nodes contained in
+the box are unchanged when such a box is placed, unboxed, or copied. In this
+respect attributes act the same as characters that have been converted to
+references to glyphs in fonts. For instance, when you use attributes to implement
+color support, each node carries information about its eventual color. In that
+case, unless you implement mechanisms that deal with it, applying a color to
+already boxed material will have no effect. Keep in mind that this
+incompatibility is mostly due to the fact that separate specials and literals are
+a more unnatural approach to colors than attributes.
+
+It is possible to fine-tune the list of attributes that are applied to a \type
+{hbox}, \type {vbox} or \type {vtop} by the use of the keyword \type {attr}. An
+example:
+
+\starttyping
+\attribute2=5
+\setbox0=\hbox {Hello}
+\setbox2=\hbox attr1=12 attr2=-"7FFFFFFF{Hello}
+\stoptyping
+
+This will set the attribute list of box~2 to $1=12$, and the attributes of box~0
+will be $2=5$. As you can see, assigning the maximum negative value causes an
+attribute to be ignored.
+
+The \type {attr} keyword(s) should come before a \type {to} or \type {spread}, if
+that is also specified.
+
+\section{\LUA\ related primitives}
+
+\subsection{\type {\directlua}}
+
+In order to merge \LUA\ code with \TEX\ input, a few new primitives are needed.
+The primitive \type {\directlua} is used to execute \LUA\ code immediately. The
+syntax is
+
+\startsyntax
+\directlua <general text>!crlf
+\directlua <16-bit number> <general text>
+\stopsyntax
+
+The \syntax {<general text>} is expanded fully, and then fed into the \LUA\
+interpreter. After reading and expansion has been applied to the \syntax
+{<general text>}, the resulting token list is converted to a string as if it was
+displayed using \type {\the\toks}. On the \LUA\ side, each \type {\directlua}
+block is treated as a separate chunk. In such a chunk you can use the \type
+{local} directive to keep your variables from interfering with those used by the
+macro package.
+
+The conversion to and from a token list means that you normally can not use \LUA\
+line comments (starting with \type {--}) within the argument. As there typically
+will be only one \quote {line} the first line comment will run on until the end
+of the input. You will either need to use \TEX|-|style line comments (starting
+with \%), or change the \TEX\ category codes locally. Another possibility is to
+say:
+
+\starttyping
+\begingroup
+\endlinechar=10
+\directlua ...
+\endgroup
+\stoptyping
+
+Then \LUA\ line comments can be used, since \TEX\ does not replace line endings
+with spaces.
+
+Likewise, the \syntax {<16-bit number>} designates a name of a \LUA\ chunk and is
+taken from the \type {lua.name} array (see the documentation of the \type {lua}
+table further in this manual). When a chunk name starts with a \type {@} it will
+be displayed as a file name. This is a side effect of the way \LUA\ implements
+error handling.
+
+The \type {\directlua} command is expandable. Since it passes \LUA\ code to the
+\LUA\ interpreter its expansion from the \TEX\ viewpoint is usually empty.
+However, there are some \LUA\ functions that produce material to be read by \TEX,
+the so called print functions. The most simple use of these is \type
+{tex.print(<string> s)}. The characters of the string \type {s} will be placed on
+the \TEX\ input buffer, that is, \quote {before \TEX's eyes} to be read by \TEX\
+immediately. For example:
+
+\startbuffer
+\count10=20
+a\directlua{tex.print(tex.count[10]+5)}b
+\stopbuffer
+
+\typebuffer
+
+expands to
+
+\getbuffer
+
+Here is another example:
+
+\startbuffer
+$\pi = \directlua{tex.print(math.pi)}$
+\stopbuffer
+
+\typebuffer
+
+will result in
+
+\getbuffer
+
+Note that the expansion of \type {\directlua} is a sequence of characters, not of
+tokens, contrary to all \TEX\ commands. So formally speaking its expansion is
+null, but it places material on a pseudo-file to be immediately read by \TEX, as
+\ETEX's \type {\scantokens}. For a description of print functions look at \in
+{section} [sec:luaprint].
+
+Because the \syntax {<general text>} is a chunk, the normal \LUA\ error handling
+is triggered if there is a problem in the included code. The \LUA\ error messages
+should be clear enough, but the contextual information is still pretty bad.
+Often, you will only see the line number of the right brace at the end of the
+code.
+
+While on the subject of errors: some of the things you can do inside \LUA\ code
+can break up \LUATEX\ pretty bad. If you are not careful while working with the
+node list interface, you may even end up with assertion errors from within the
+\TEX\ portion of the executable.
+
+The behaviour documented in the above subsection is considered stable in the sense
+that there will not be backward-incompatible changes any more.
+
+\subsection{\type {\latelua}}
+
+Contrary to \type {\directlua}, \type {\latelua} stores \LUA\ code in a whatsit
+that will be processed at the time of shipping out. Its intended use is a cross
+between \PDF\ literals (often available as \type {\pdfliteral}) and the
+traditional \TEX\ extension \type {\write}. Within the \LUA\ code you can print
+\PDF\ statements directly to the \PDF\ file via \type {pdf.print}, or you can
+write to other output streams via \type {texio.write} or simply using \LUA\ \IO\
+routines.
+
+\startsyntax
+\latelua <general text>!crlf
+\latelua <16-bit number> <general text>
+\stopsyntax
+
+Expansion of macros in the final \type {<general text>} is delayed until just
+before the whatsit is executed (like in \type {\write}). With regard to \PDF\
+output stream \type {\latelua} behaves as \PDF\ page literals. The \syntax
+{name <general text>} and \syntax {<16-bit number>} behave in the same way as
+they do for \type {\directlua}
+
+\subsection{\type {\luaescapestring}}
+
+This primitive converts a \TEX\ token sequence so that it can be safely used as
+the contents of a \LUA\ string: embedded backslashes, double and single quotes,
+and newlines and carriage returns are escaped. This is done by prepending an
+extra token consisting of a backslash with category code~12, and for the line
+endings, converting them to \type {n} and \type {r} respectively. The token
+sequence is fully expanded.
+
+\startsyntax
+\luaescapestring <general text>
+\stopsyntax
+
+Most often, this command is not actually the best way to deal with the
+differences between the \TEX\ and \LUA. In very short bits of \LUA\
+code it is often not needed, and for longer stretches of \LUA\ code it
+is easier to keep the code in a separate file and load it using \LUA's
+\type {dofile}:
+
+\starttyping
+\directlua { dofile('mysetups.lua') }
+\stoptyping
+
+\subsection{\type {\luafunction}}
+
+The \type {\directlua} commands involves tokenization of its argument (after
+picking up an optional name or number specification). The tokenlist is then
+converted into a string and given to \LUA\ to turn into a function that is
+called. The overhead is rather small but when you use this primitive hundreds of
+thousands of times, it can become noticeable. For this reason there is a variant
+call available: \type {\luafunction}. This command is used as follows:
+
+\starttyping
+\directlua {
+ local t = lua.get_functions_table()
+ t[1] = function() tex.print("!") end
+ t[2] = function() tex.print("?") end
+}
+
+\luafunction1
+\luafunction2
+\stoptyping
+
+Of course the functions can also be defined in a separate file. There is no limit
+on the number of functions apart from normal \LUA\ limitations. Of course there
+is the limitation of no arguments but that would involve parsing and thereby give
+no gain. The function, when called in fact gets one argument, being the index, so
+in the following example the number \type {8} gets typeset.
+
+\starttyping
+\directlua {
+ local t = lua.get_functions_table()
+ t[8] = function(slot) tex.print(slot) end
+}
+\stoptyping
+
+\section {Alignments}
+
+\subsection{\tex {alignmark}}
+
+This primitive duplicates the functionality of \type {#} inside alignment
+preambles.
+
+\subsection{\tex {aligntab}}
+
+This primitive duplicates the functionality of \type {&} inside alignments and
+preambles.
+
+\section{Catcode tables}
+
+Catcode tables are a new feature that allows you to switch to a predefined
+catcode regime in a single statement. You can have a practically unlimited number
+of different tables. This subsystem is backward compatible: if you never use the
+following commands, your document will not notice any difference in behaviour
+compared to traditional \TEX. The contents of each catcode table is independent
+from any other catcode tables, and their contents is stored and retrieved from
+the format file.
+
+\subsection{\type {\catcodetable}}
+
+\startsyntax
+\catcodetable <15-bit number>
+\stopsyntax
+
+The primitive \type {\catcodetable} switches to a different catcode table. Such a
+table has to be previously created using one of the two primitives below, or it
+has to be zero. Table zero is initialized by \INITEX.
+
+\subsection{\type {\initcatcodetable}}
+
+\startsyntax
+\initcatcodetable <15-bit number>
+\stopsyntax
+
+The primitive \type {\initcatcodetable} creates a new table with catcodes identical
+to those defined by \INITEX:
+
+\starttabulate[|r|l|l|l|]
+\NC 0 \NC \tttf \letterbackslash \NC \NC \type {escape} \NC\NR
+\NC 5 \NC \tttf \letterhat\letterhat M \NC return \NC \type {car_ret} \NC\NR
+\NC 9 \NC \tttf \letterhat\letterhat @ \NC null \NC \type {ignore} \NC\NR
+\NC 10 \NC \tttf <space> \NC space \NC \type {spacer} \NC\NR
+\NC 11 \NC {\tttf a} \endash\ {\tttf z} \NC \NC \type {letter} \NC\NR
+\NC 11 \NC {\tttf A} \endash\ {\tttf Z} \NC \NC \type {letter} \NC\NR
+\NC 12 \NC everything else \NC \NC \type {other} \NC\NR
+\NC 14 \NC \tttf \letterpercent \NC \NC \type {comment} \NC\NR
+\NC 15 \NC \tttf \letterhat\letterhat ? \NC delete \NC \type {invalid_char} \NC\NR
+\stoptabulate
+
+The new catcode table is allocated globally: it will not go away after the
+current group has ended. If the supplied number is identical to the currently
+active table, an error is raised.
+
+\subsection{\type {\savecatcodetable}}
+
+\startsyntax
+\savecatcodetable <15-bit number>
+\stopsyntax
+
+\type {\savecatcodetable} copies the current set of catcodes to a new table with
+the requested number. The definitions in this new table are all treated as if
+they were made in the outermost level.
+
+The new table is allocated globally: it will not go away after the current group
+has ended. If the supplied number is the currently active table, an error is
+raised.
+
+\section{Suppressing errors}
+
+\subsection{\type {\suppressfontnotfounderror}}
+
+\startsyntax
+\suppressfontnotfounderror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+font metrics that are not found. Instead it will silently skip the font
+assignment, making the requested csname for the font \type {\ifx} equal to \type
+{\nullfont}, so that it can be tested against that without bothering the user.
+
+\subsection{\type {\suppresslongerror}}
+
+\startsyntax
+\suppresslongerror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+\type {\par} commands encountered in contexts where that is normally prohibited
+(most prominently in the arguments of non-long macros).
+
+\subsection{\type {\suppressifcsnameerror}}
+
+\startsyntax
+\suppressifcsnameerror = 1
+\stopsyntax
+
+If this integer parameter is non|-|zero, then \LUATEX\ will not complain about
+non-expandable commands appearing in the middle of a \type {\ifcsname} expansion.
+Instead, it will keep getting expanded tokens from the input until it encounters
+an \type {\endcsname} command. If the input expansion is unbalanced with respect
+to \type {\csname} \ldots \type {\endcsname} pairs, the \LUATEX\ process may hang
+indefinitely.
+
+\subsection{\type {\suppressoutererror}}
+
+\startsyntax
+\suppressoutererror = 1
+\stopsyntax
+
+If this new integer parameter is non|-|zero, then \LUATEX\ will not complain
+about \type {\outer} commands encountered in contexts where that is normally
+prohibited.
+
+\subsection{\type {\suppressmathparerror}}
+
+The following setting will permit \type {\par} tokens in a math formula:
+
+\startsyntax
+\suppressmathparerror = 1
+\stopsyntax
+
+So, the next code is valid then:
+
+\starttyping
+$ x + 1 =
+
+a $
+\stoptyping
+
+\section {Math}
+
+\subsection{Extensions}
+
+We will cover math in its own chapter because not only the font subsystem and
+spacing model have been enhanced (thereby introducing many new primitives) but
+also because some more control has been added to existing functionality.
+
+\subsection{\type {\matheqnogapstep}}
+
+By default \TEX\ will add one quad between the equation and the number. This is
+hard coded. A new primitive can control this:
+
+\startsyntax
+\matheqnogapstep = 1000
+\stopsyntax
+
+Because a math quad from the math text font is used instead of a dimension, we
+use a step to control the size. A value of zero will suppress the gap. The step
+is divided by 1000 which is the usual way to mimmick floating point factors in
+\TEX.
+
+\section{Fonts}
+
+\subsection{Font syntax}
+
+\LUATEX\ will accept a braced argument as a font name:
+
+\starttyping
+\font\myfont = {cmr10}
+\stoptyping
+
+This allows for embedded spaces, without the need for double quotes. Macro
+expansion takes place inside the argument.
+
+\subsection{\type {\fontid}}
+
+\startsyntax
+\fontid\font
+\stopsyntax
+
+This primitive expands into a number. It is not a register so there is no need to
+prefix with \type {\number} (and using \type {\the} gives an error). The currently
+used font id is \fontid\font. Here are some more:
+
+\starttabulate[|l|c|]
+\NC \type {\bf} \NC \bf \fontid\font \NC \NR
+\NC \type {\it} \NC \it \fontid\font \NC \NR
+\NC \type {\bi} \NC \bi \fontid\font \NC \NR
+\stoptabulate
+
+These numbers depend on the macro package used because each one has its own way
+of dealing with fonts. They can also differ per run, as they can depend on the
+order of loading fonts. For instance, when in \CONTEXT\ virtual math \UNICODE\
+fonts are used, we can easily get over a hundred ids in use. Not all ids have to
+be bound to a real font, after all it's just a number.
+
+\subsection{\type {\setfontid}}
+
+The primitive \type {\setfontid} can be used to enable a font with the given id
+(which of course needs to be a valid one).
+
+\subsection{\type {\noligs} and \type {\nokerns}}
+
+These primitives prohibit ligature and kerning insertion at the time when the
+initial node list is built by \LUATEX's main control loop. You can enable these
+primitives when you want to do node list processing of \quote {characters}, where
+\TEX's normal processing would get in the way.
+
+\startsyntax
+\noligs <integer>!crlf
+\nokerns <integer>
+\stopsyntax
+
+These primitives can also be implemented by overloading the ligature building and
+kerning functions, i.e.\ by assigning dummy functions to their associated
+callbacks. Keep in mind that when you define a font (using \LUA) you can also
+omit the kern and ligature tables, which has the same effect as the above.
+
+\subsection{\type{\nospaces}}
+
+This new primitive can be used to overrule the usual \type {\spaceskip}
+related heuristics when a space character is seen in a text flow. The
+value~\type{1} triggers no injection while \type{2} results in injection of
+a zero skip. Below we see the results for four characters separated by a
+space.
+
+\startlinecorrection
+\startcombination[3*2]
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 10mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 10mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=0\relax x x x x \par}\hss}} {\type {0 / hsize 1mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=1\relax x x x x \par}\hss}} {\type {1 / hsize 1mm}}
+ {\ruledhbox to 5cm{\vtop{\hsize 1mm\nospaces=2\relax x x x x \par}\hss}} {\type {2 / hsize 1mm}}
+\stopcombination
+\stoplinecorrection
+
+\section{Tokens, commands and strings}
+
+\subsection{\type {\scantextokens}}
+
+The syntax of \type {\scantextokens} is identical to \type {\scantokens}. This
+primitive is a slightly adapted version of \ETEX's \type {\scantokens}. The
+differences are:
+
+\startitemize
+\startitem
+ The last (and usually only) line does not have a \type {\endlinechar}
+ appended.
+\stopitem
+\startitem
+ \type {\scantextokens} never raises an EOF error, and it does not execute
+ \type {\everyeof} tokens.
+\stopitem
+\startitem
+ There are no \quote {\unknown\ while end of file \unknown} error tests
+ executed. This allows the expansion to end on a different grouping level or
+ while a conditional is still incomplete.
+\stopitem
+\stopitemize
+
+\subsection{\type {\toksapp}, \type {\tokspre}, \type {\etoksapp} and \type {\etokspre}}
+
+Instead of:
+
+\starttyping
+\toks0\expandafter{\the\toks0 foo}
+\stoptyping
+
+you can use:
+
+\starttyping
+\etoksapp0{foo}
+\stoptyping
+
+The \type {pre} variants prepend instead of append, and the \type {e} variants
+expand the passed general text.
+
+\subsection{\type {\csstring}, \type {\begincsname} and \type {\lastnamedcs}}
+
+These are somewhat special. The \type {\csstring} primitive is like
+\type {\string} but it omits the leading escape character. This can be
+somewhat more efficient that stripping it of afterwards.
+
+The \type {\begincsname} primitive is like \type {\csname} but doesn't create
+a relaxed equivalent when there is no such name. It is equivalent to
+
+\starttyping
+\ifcsname foo\endcsname
+ \csname foo\endcsname
+\fi
+\stoptyping
+
+The advantage is that it saves a lookup (don't expect much speedup) but more
+important is that it avoids using the \type {\if}.
+
+The \type {\lastnamedcs} is one that should be used with care. The above
+example could be written as:
+
+\starttyping
+\ifcsname foo\endcsname
+ \lastnamedcs
+\fi
+\stoptyping
+
+This is slightly more efficient than constructing the string twice (deep down in
+\LUATEX\ this also involves some \UTF8 juggling), but probably more relevant is
+that it saves a few tokens and can make code a bit more more readable.
+
+\subsection{\type {\clearmarks}}
+
+This primitive complements the \ETEX\ mark primitives and clears a mark class
+completely, resetting all three connected mark texts to empty. It is an
+immediate command.
+
+\startsyntax
+\clearmarks <16-bit number>
+\stopsyntax
+
+\subsection{\type{\letcharcode}}
+
+This primitive is still experimental but can be used to assign a meaning to an active
+character, as in:
+
+\starttyping
+\def\foo{bar} \letcharcode123\foo
+\stoptyping
+
+This can be a bit nicer that using the uppercase tricks (using the property of
+\type {\uppercase} that it treats active characters special).
+
+\section{Boxes, rules and leaders}
+
+\subsection{\type {\outputbox}}
+
+\startsyntax
+\outputbox = 65535
+\stopsyntax
+
+This new integer parameter allows you to alter the number of the box that will be
+used to store the page sent to the output routine. Its default value is 255, and
+the acceptable range is from 0 to 65535.
+
+\subsection{\type {\vpack}, \type {\hpack} and \type {\tpack}}
+
+These three primitives are like \type {\vbox}, \type {\hbox} and \type {\vtop}
+but don't apply the related callbacks.
+
+\subsection{Images and Forms}
+
+These two concepts are now core concepts and no longer whatsits. They are in fact
+now implemented as rules with special properties. Normal rules have subtype~0,
+saved boxes have subtype~1 and images have subtype~2. This has the positive side
+effect that whenever we need to take content with dimensions into account, when we
+look at rule nodes, we automatically also deal with these two types.
+
+The syntax of the \type {\save...resource} is the same as in \PDFTEX\ but you
+should consider them to be backend specific. This means that a macro package
+should treat them as such and check for the current output mode if applicable.
+Here are the equivalents:
+
+\starttabulate[|l|l|]
+\NC \type {\saveboxresource} \EQ \type {\pdfxform} \NC \NR
+\NC \type {\saveimageresource} \EQ \type {\pdfximage} \NC \NR
+\NC \type {\useboxresource} \EQ \type {\pdfrefxform} \NC \NR
+\NC \type {\useimageresource} \EQ \type {\pdfrefximage} \NC \NR
+\NC \type {\lastsavedboxresourceindex} \EQ \type {\pdflastxform} \NC \NR
+\NC \type {\lastsavedimageresourceindex} \EQ \type {\pdflastximage} \NC \NR
+\NC \type {\lastsavedimageresourcepages} \EQ \type {\pdflastximagepages} \NC \NR
+\stoptabulate
+
+\LUATEX\ accepts optional dimension parameters for \type {\use...resource} in the
+same format as for rules. With images, these dimensions are then used instead of
+the ones given to \type {\useimageresource} but the original dimensions are not
+overwritten, so that a \type {\useimageresource} without dimensions still
+provides the image with dimensions defined by \type {\saveimageresource}. These
+optional parameters are not implemented for \type {\saveboxresource}.
+
+\starttyping
+\useimageresource width 20mm height 10mm depth 5mm \lastsavedimageresourceindex
+\useboxresource width 20mm height 10mm depth 5mm \lastsavedboxresourceindex
+\stoptyping
+
+\subsection{\type {\nohrule} and \type {\novrule}}
+
+Because introducing a new keyword can cause incompatibilities, two new primitives
+were introduced: \type {\nohrule} and \type {\novrule}. These can be used to
+reserve space. This is often more efficient than creating an empty box with fake
+dimensions).
+
+\subsection{\type {\gleaders}}
+
+This type of leaders is anchored to the origin of the box to be shipped out. So
+they are like normal \type {\leaders} in that they align nicely, except that the
+alignment is based on the {\it largest\/} enclosing box instead of the {\it
+smallest\/}. The \type {g} stresses this global nature.
+
+\section {Languages}
+
+\subsection{\type {\hyphenationmin}}
+
+This primitive can be used to set the minimal word length, so setting it to a value
+of~$5$ means that only words of 6 characters and more will be hyphenated, of course
+within the constraints of the \type {\lefthyphenmin} and \type {\righthyphenmin}
+values (as stored in the glyph node). This primitive accepts a number and stores
+the value with the language.
+
+\subsection{\type {\boundary}, \type {\noboundary}, \type {\protrusionboundary} and \type
+{\wordboundary}}
+
+The \type {\noboundary} commands used to inject a whatsit node but now injects a normal
+node with type \type {boundary} and subtype~0. In addition you can say:
+
+\starttyping
+x\boundary 123\relax y
+\stoptyping
+
+This has the same effect but the subtype is now~1 and the value~123 is stored.
+The traditional ligature builder still sees this as a cancel boundary directive
+but at the \LUA\ end you can implement different behaviour. The added benefit of
+passing this value is a side effect of the generalization. The subtypes~2 and~3
+are used to control protrusion and word boundaries in hyphenation.
+
+\section{Control and debugging}
+
+\subsection {Tracing}
+
+If \type {\tracingonline} is larger than~2, the node list display will also print
+the node number of the nodes.
+
+\subsection{\type {\outputmode} and \type {\draftmode}}
+
+The \type {\outputmode} variable tells \LUATEX\ what it has to produce:
+
+\starttabulate[|l|l|]
+\NC \type {0} \NC \DVI\ code \NC \NR
+\NC \type {1} \NC \PDF\ code \NC \NR
+\stoptabulate
+
+The value of the \type {\draftmode} counter signals the backend if it should
+output less. The \PDF\ backend accepts a value of~$1$, while the \DVI\ backend
+ignores the value.
+
+\section {Files}
+
+\subsection{File syntax}
+
+\LUATEX\ will accept a braced argument as a file name:
+
+\starttyping
+\input {plain}
+\openin 0 {plain}
+\stoptyping
+
+This allows for embedded spaces, without the need for double quotes. Macro
+expansion takes place inside the argument.
+
+\subsection{Writing to file}
+
+You can now open upto 127 files with \type {\openout}. When no file is open
+writes will go to the console and log. As a consequence a system command is
+no longer possible but one can use \type {os.execute} to do the same.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-fonts.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
new file mode 100644
index 00000000000..7384f3b3ecc
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
@@ -0,0 +1,717 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-fonts
+
+\startchapter[reference=fonts,title={Font structure}]
+
+\section {The font tables}
+
+All \TEX\ fonts are represented to \LUA\ code as tables, and internally as
+\CCODE~structures. All keys in the table below are saved in the internal font
+structure if they are present in the table returned by the \type {define_font}
+callback, or if they result from the normal \TFM|/|\VF\ reading routines if there
+is no \type {define_font} callback defined.
+
+The column \quote {\VF} means that this key will be created by the \type
+{font.read_vf()} routine, \quote {\TFM} means that the key will be created by the
+\type {font.read_tfm()} routine, and \quote{used} means whether or not the
+\LUATEX\ engine itself will do something with the key.
+
+The top|-|level keys in the table are as follows:
+
+\starttabulate[|Tl|c|c|c|l|p|]
+\NC \rmbf key \NC \bf vf \NC \bf tfm \NC \bf used \NC \bf value type \NC \bf description \NC \NR
+\NC name \NC yes \NC yes \NC yes \NC string \NC metric (file) name \NC \NR
+\NC area \NC no \NC yes \NC yes \NC string \NC (directory) location, typically empty \NC \NR
+\NC used \NC no \NC yes \NC yes \NC boolean\NC indicates usage (initial: false) \NC \NR
+\NC characters \NC yes \NC yes \NC yes \NC table \NC the defined glyphs of this font \NC \NR
+\NC checksum \NC yes \NC yes \NC no \NC number \NC default: 0 \NC \NR
+\NC designsize \NC no \NC yes \NC yes \NC number \NC expected size (default: 655360 == 10pt) \NC \NR
+\NC direction \NC no \NC yes \NC yes \NC number \NC default: 0 \NC \NR
+\NC encodingbytes \NC no \NC no \NC yes \NC number \NC default: depends on \type {format} \NC \NR
+\NC encodingname \NC no \NC no \NC yes \NC string \NC encoding name \NC \NR
+\NC fonts \NC yes \NC no \NC yes \NC table \NC locally used fonts \NC \NR
+\NC psname \NC no \NC no \NC yes \NC string \NC This is the \POSTSCRIPT\ fontname in the incoming font
+ source, and it's used as fontname identifier in the \PDF\
+ output. \NC \NR
+\NC fullname \NC no \NC no \NC yes \NC string \NC output font name, used as a fallback in the \PDF\ output
+ if the \type {psname} is not set \NC \NR
+\NC header \NC yes \NC no \NC no \NC string \NC header comments, if any \NC \NR
+\NC hyphenchar \NC no \NC no \NC yes \NC number \NC default: \TEX's \type {\hyphenchar} \NC \NR
+\NC parameters \NC no \NC yes \NC yes \NC hash \NC default: 7 parameters, all zero \NC \NR
+\NC size \NC no \NC yes \NC yes \NC number \NC loaded (at) size. (default: same as designsize) \NC \NR
+\NC skewchar \NC no \NC no \NC yes \NC number \NC default: \TEX's \type {\skewchar} \NC \NR
+\NC type \NC yes \NC no \NC yes \NC string \NC basic type of this font \NC \NR
+\NC format \NC no \NC no \NC yes \NC string \NC disk format type \NC \NR
+\NC embedding \NC no \NC no \NC yes \NC string \NC \PDF\ inclusion \NC \NR
+\NC filename \NC no \NC no \NC yes \NC string \NC the name of the font on disk \NC \NR
+\NC tounicode \NC no \NC yes \NC yes \NC number \NC When this is set to~1 \LUATEX\ assumes per|-|glyph
+ tounicode entries are present in the font. \NC \NR
+\NC stretch \NC no \NC no \NC yes \NC number \NC the \quote {stretch} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC shrink \NC no \NC no \NC yes \NC number \NC the \quote {shrink} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC step \NC no \NC no \NC yes \NC number \NC the \quote {step} value from \type
+ {\expandglyphsinfont} \NC \NR
+\NC auto_expand \NC no \NC no \NC yes \NC boolean\NC the \quote {autoexpand} keyword from \crlf
+ \type {\expandglyphsinfont} \NC \NR
+\NC expansion_factor \NC no \NC no \NC no \NC number \NC the actual expansion factor of an expanded font \NC \NR
+\NC attributes \NC no \NC no \NC yes \NC string \NC the \type {\pdffontattr} \NC \NR
+\NC cache \NC no \NC no \NC yes \NC string \NC This key controls caching of the \LUA\ table on the
+ \TEX\ end where \type {yes} means: use a reference to
+ the table that is passed to \LUATEX\ (this is the
+ default), and no \type {no} means: don't store the
+ table reference, don't cache any \LUA\ data for this
+ font while \type {renew} means: don't store the table
+ reference, but save a reference to the table that is
+ created at the first access to one of its fields in font.
+ Note: the saved reference is thread|-|local, so be
+ careful when you are using coroutines: an error will be
+ thrown if the table has been cached in one thread, but
+ you reference it from another thread. \NC \NR
+\NC nomath \NC no \NC no \NC yes \NC boolean\NC This key allows a minor speedup for text fonts. If it
+ is present and true, then \LUATEX\ will not check the
+ character entries for math|-|specific keys. \NC \NR
+\NC slant \NC no \NC no \NC yes \NC number \NC This has the same semantics as the \type {SlantFont}
+ operator in font map files. \NC \NR
+\NC extent \NC no \NC no \NC yes \NC number \NC This has the same semantics as the \type {ExtendFont}
+ operator in font map files. \NC \NR
+\stoptabulate
+
+The key \type {name} is always required. The keys \type {stretch}, \type
+{shrink}, \type {step} and optionally \type {auto_expand} only have meaning when
+used together: they can be used to replace a post|-|loading \type
+{\expandglyphsinfont} command. The \type {expansion_factor} is value that can be
+present inside a font in \type {font.fonts}. It is the actual expansion factor (a
+value between \type {-shrink} and \type {stretch}, with step \type {step}) of a
+font that was automatically generated by the font expansion algorithm. The key
+\type {attributes} can be used to set font attributes in the \PDF\ file. The key
+\type {used} is set by the engine when a font is actively in use, this makes sure
+that the font's definition is written to the output file (\DVI\ or \PDF). The
+\TFM\ reader sets it to false. The \type {direction} is a number signalling the
+\quote {normal} direction for this font. There are sixteen possibilities:
+
+\starttabulate[|Tc|Tc|Tc|Tc|]
+\NC \rmbf number \NC \rmbf meaning \NC \rmbf number \NC \rmbf meaning \NC\NR
+\NC 0 \NC LT \NC 8 \NC TT \NC\NR
+\NC 1 \NC LL \NC 9 \NC TL \NC\NR
+\NC 2 \NC LB \NC 10 \NC TB \NC\NR
+\NC 3 \NC LR \NC 11 \NC TR \NC\NR
+\NC 4 \NC RT \NC 12 \NC BT \NC\NR
+\NC 5 \NC RL \NC 13 \NC BL \NC\NR
+\NC 6 \NC RB \NC 14 \NC BB \NC\NR
+\NC 7 \NC RR \NC 15 \NC BR \NC\NR
+\stoptabulate
+
+These are \OMEGA|-|style direction abbreviations: the first character indicates
+the \quote {first} edge of the character glyphs (the edge that is seen first in
+the writing direction), the second the \quote {top} side. Keep in mind that
+\LUATEX\ has a bit different directional model so these values are not used for
+anything.
+
+The \type {parameters} is a hash with mixed key types. There are seven possible
+string keys, as well as a number of integer indices (these start from 8 up). The
+seven strings are actually used instead of the bottom seven indices, because that
+gives a nicer user interface.
+
+The names and their internal remapping are:
+
+\starttabulate[|lT|c|]
+\NC \rmbf name \NC \rmbf remapping \NC\NR
+\NC slant \NC 1 \NC\NR
+\NC space \NC 2 \NC\NR
+\NC space_stretch \NC 3 \NC\NR
+\NC space_shrink \NC 4 \NC\NR
+\NC x_height \NC 5 \NC\NR
+\NC quad \NC 6 \NC\NR
+\NC extra_space \NC 7 \NC\LR
+\stoptabulate
+
+The keys \type {type}, \type {format}, \type {embedding}, \type {fullname} and
+\type {filename} are used to embed \OPENTYPE\ fonts in the result \PDF.
+
+The \type {characters} table is a list of character hashes indexed by an integer
+number. The number is the \quote {internal code} \TEX\ knows this character by.
+
+Two very special string indexes can be used also: \type {left_boundary} is a
+virtual character whose ligatures and kerns are used to handle word boundary
+processing. \type {right_boundary} is similar but not actually used for anything
+(yet).
+
+Other index keys are ignored.
+
+Each character hash itself is a hash. For example, here is the character \quote
+{f} (decimal 102) in the font \type {cmr10 at 10pt}:
+
+\starttyping
+[102] = {
+ ['width'] = 200250,
+ ['height'] = 455111,
+ ['depth'] = 0,
+ ['italic'] = 50973,
+ ['kerns'] = {
+ [63] = 50973,
+ [93] = 50973,
+ [39] = 50973,
+ [33] = 50973,
+ [41] = 50973
+ },
+ ['ligatures'] = {
+ [102] = {
+ ['char'] = 11,
+ ['type'] = 0
+ },
+ [108] = {
+ ['char'] = 13,
+ ['type'] = 0
+ },
+ [105] = {
+ ['char'] = 12,
+ ['type'] = 0
+ }
+ }
+}
+\stoptyping
+
+The following top|-|level keys can be present inside a character hash:
+
+\starttabulate[|lT|c|c|c|l|p|]
+\NC \rmbf key \NC \bf vf \NC \bf tfm \NC \bf used \NC \bf type \NC \bf description \NC\NR
+\NC width \NC yes \NC yes \NC yes \NC number \NC character's width, in sp (default 0) \NC\NR
+\NC height \NC no \NC yes \NC yes \NC number \NC character's height, in sp (default 0) \NC\NR
+\NC depth \NC no \NC yes \NC yes \NC number \NC character's depth, in sp (default 0) \NC\NR
+\NC italic \NC no \NC yes \NC yes \NC number \NC character's italic correction, in sp (default zero) \NC\NR
+\NC top_accent \NC no \NC no \NC maybe \NC number \NC character's top accent alignment place, in sp (default zero) \NC\NR
+\NC bot_accent \NC no \NC no \NC maybe \NC number \NC character's bottom accent alignment place, in sp (default zero) \NC\NR
+\NC left_protruding \NC no \NC no \NC maybe \NC number \NC character's \type {\lpcode} \NC\NR
+\NC right_protruding \NC no \NC no \NC maybe \NC number \NC character's \type {\rpcode} \NC\NR
+\NC expansion_factor \NC no \NC no \NC maybe \NC number \NC character's \type {\efcode} \NC\NR
+\NC tounicode \NC no \NC no \NC maybe \NC string \NC character's \UNICODE\ equivalent(s), in \UTF|-|16BE hexadecimal format \NC\NR
+\NC next \NC no \NC yes \NC yes \NC number \NC the \quote {next larger} character index \NC\NR
+\NC extensible \NC no \NC yes \NC yes \NC table \NC the constituent parts of an extensible recipe \NC\NR
+\NC vert_variants \NC no \NC no \NC yes \NC table \NC constituent parts of a vertical variant set \NC \NR
+\NC horiz_variants \NC no \NC no \NC yes \NC table \NC constituent parts of a horizontal variant set \NC \NR
+\NC kerns \NC no \NC yes \NC yes \NC table \NC kerning information \NC\NR
+\NC ligatures \NC no \NC yes \NC yes \NC table \NC ligaturing information \NC\NR
+\NC commands \NC yes \NC no \NC yes \NC array \NC virtual font commands \NC\NR
+\NC name \NC no \NC no \NC no \NC string \NC the character (\POSTSCRIPT) name \NC\NR
+\NC index \NC no \NC no \NC yes \NC number \NC the (\OPENTYPE\ or \TRUETYPE) font glyph index \NC\NR
+\NC used \NC no \NC yes \NC yes \NC boolean \NC typeset already (default: false)? \NC\NR
+\NC mathkern \NC no \NC no \NC yes \NC table \NC math cut-in specifications \NC\NR
+\stoptabulate
+
+The values of \type {top_accent}, \type {bot_accent} and \type {mathkern} are
+used only for math accent and superscript placement, see the \at {math chapter}
+[math] in this manual for details.
+
+The values of \type {left_protruding} and \type {right_protruding} are used only
+when \type {\protrudechars} is non-zero.
+
+Whether or not \type {expansion_factor} is used depends on the font's global
+expansion settings, as well as on the value of \type {\adjustspacing}.
+
+The usage of \type {tounicode} is this: if this font specifies a \type
+{tounicode=1} at the top level, then \LUATEX\ will construct a \type {/ToUnicode}
+entry for the \PDF\ font (or font subset) based on the character|-|level \type
+{tounicode} strings, where they are available. If a character does not have a
+sensible \UNICODE\ equivalent, do not provide a string either (no empty strings).
+
+If the font level \type {tounicode} is not set, then \LUATEX\ will build up \type
+{/ToUnicode} based on the \TEX\ code points you used, and any character-level
+\type {tounicodes} will be ignored. The string format is exactly the format that
+is expected by Adobe \CMAP\ files (\UTF-16BE in hexadecimal encoding), minus the
+enclosing angle brackets. For instance the \type {tounicode} for a \type {fi}
+ligature would be \type {00660069}. When you pass a number the conversion will be
+done for you.
+
+The presence of \type {extensible} will overrule \type {next}, if that is also
+present. It in in turn can be overruled by \type {vert_variants}.
+
+The \type {extensible} table is very simple:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf description \NC\NR
+\NC top \NC number \NC top character index \NC\NR
+\NC mid \NC number \NC middle character index \NC\NR
+\NC bot \NC number \NC bottom character index \NC\NR
+\NC rep \NC number \NC repeatable character index \NC\NR
+\stoptabulate
+
+The \type {horiz_variants} and \type {vert_variants} are arrays of components.
+Each of those components is itself a hash of up to five keys:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf explanation \NC\NR
+\NC glyph \NC number \NC The character index. Note that this is an encoding number, not a name. \NC \NR
+\NC extender \NC number \NC One (1) if this part is repeatable, zero (0) otherwise. \NC \NR
+\NC start \NC number \NC The maximum overlap at the starting side (in scaled points). \NC \NR
+\NC end \NC number \NC The maximum overlap at the ending side (in scaled points). \NC \NR
+\NC advance \NC number \NC The total advance width of this item. It can be zero or missing,
+ then the natural size of the glyph for character \type {component}
+ is used. \NC \NR
+\stoptabulate
+
+The \type {kerns} table is a hash indexed by character index (and \quote
+{character index} is defined as either a non|-|negative integer or the string
+value \type {right_boundary}), with the values the kerning to be applied, in
+scaled points.
+
+The \type {ligatures} table is a hash indexed by character index (and \quote
+{character index} is defined as either a non|-|negative integer or the string
+value \type {right_boundary}), with the values being yet another small hash, with
+two fields:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf description \NC \NR
+\NC type \NC number \NC the type of this ligature command, default 0 \NC \NR
+\NC char \NC number \NC the character index of the resultant ligature \NC \NR
+\stoptabulate
+
+The \type {char} field in a ligature is required.
+
+The \type {type} field inside a ligature is the numerical or string value of one
+of the eight possible ligature types supported by \TEX. When \TEX\ inserts a new
+ligature, it puts the new glyph in the middle of the left and right glyphs. The
+original left and right glyphs can optionally be retained, and when at least one
+of them is kept, it is also possible to move the new \quote {insertion point}
+forward one or two places. The glyph that ends up to the right of the insertion
+point will become the next \quote {left}.
+
+\starttabulate[|l|c|l|l|]
+\NC \bf textual (Knuth) \NC \bf number \NC \bf string \NC result \NC\NR
+\NC \type{l + r =: n} \NC 0 \NC \type{=:} \NC \type{|n} \NC\NR
+\NC \type{l + r =:| n} \NC 1 \NC \type{=:|} \NC \type{|nr} \NC\NR
+\NC \type{l + r |=: n} \NC 2 \NC \type{|=:} \NC \type{|ln} \NC\NR
+\NC \type{l + r |=:| n} \NC 3 \NC \type{|=:|} \NC \type{|lnr} \NC\NR
+\NC \type{l + r =:|> n} \NC 5 \NC \type{=:|>} \NC \type{n|r} \NC\NR
+\NC \type{l + r |=:> n} \NC 6 \NC \type{|=:>} \NC \type{l|n} \NC\NR
+\NC \type{l + r |=:|> n} \NC 7 \NC \type{|=:|>} \NC \type{l|nr} \NC\NR
+\NC \type{l + r |=:|>> n} \NC 11 \NC \type{|=:|>>} \NC \type{ln|r} \NC\NR
+\stoptabulate
+
+The default value is~0, and can be left out. That signifies a \quote {normal}
+ligature where the ligature replaces both original glyphs. In this table the~\type {|}
+indicates the final insertion point.
+
+The \type {commands} array is explained below.
+
+\section {Real fonts}
+
+Whether or not a \TEX\ font is a \quote {real} font that should be written to the
+\PDF\ document is decided by the \type {type} value in the top|-|level font
+structure. If the value is \type {real}, then this is a proper font, and the
+inclusion mechanism will attempt to add the needed font object definitions to the
+\PDF. Values for \type {type} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC\NR
+\NC real \NC this is a base font \NC\NR
+\NC virtual \NC this is a virtual font \NC\NR
+\stoptabulate
+
+The actions to be taken depend on a number of different variables:
+
+\startitemize[packed]
+\startitem
+ Whether the used font fits in an 8-bit encoding scheme or not.
+\stopitem
+\startitem
+ The type of the disk font file.
+\stopitem
+\startitem
+ The level of embedding requested.
+\stopitem
+\stopitemize
+
+A font that uses anything other than an 8-bit encoding vector has to be written
+to the \PDF\ in a different way.
+
+The rule is: if the font table has \type {encodingbytes} set to~2, then this is a
+wide font, in all other cases it isn't. The value~2 is the default for \OPENTYPE\
+and \TRUETYPE\ fonts loaded via \LUA. For \TYPEONE\ fonts, you have to set \type
+{encodingbytes} to~2 explicitly. For \PK\ bitmap fonts, wide font encoding is not
+supported at all.
+
+If no special care is needed, \LUATEX\ currently falls back to the
+mapfile|-|based solution used by \PDFTEX\ and \DVIPS. This behaviour might
+silently be removed in the future, in which case the related primitives and \LUA\
+functions will become no|-|ops.
+
+If a \quote {wide} font is used, the new subsystem kicks in, and some
+extra fields have to be present in the font structure. In this case, \LUATEX\
+does not use a map file at all.
+
+The extra fields are: \type {format}, \type {embedding}, \type {fullname}, \type
+{cidinfo} (as explained above), \type {filename}, and the \type {index} key in
+the separate characters.
+
+Values for \type {format} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC \NR
+\NC type1 \NC this is a \POSTSCRIPT\ \TYPEONE\ font \NC \NR
+\NC type3 \NC this is a bitmapped (\PK) font \NC \NR
+\NC truetype \NC this is a \TRUETYPE\ or \TRUETYPE|-|based \OPENTYPE\ font \NC \NR
+\NC opentype \NC this is a \POSTSCRIPT|-|based \OPENTYPE\ font \NC \NR
+\stoptabulate
+
+\type {type3} fonts are provided for backward compatibility only, and do not
+support the new wide encoding options.
+
+Values for \type {embedding} are:
+
+\starttabulate[|Tl|p|]
+\NC \rmbf value \NC \rmbf description \NC \NR
+\NC no \NC don't embed the font at all \NC \NR
+\NC subset \NC include and atttempt to subset the font \NC \NR
+\NC full \NC include this font in its entirety \NC \NR
+\stoptabulate
+
+The other fields are used as follows: The \type {fullname} will be the
+\POSTSCRIPT|/|\PDF\ font name. The \type {cidinfo} will be used as the character
+set (the CID \type {/Ordering} and \type {/Registry} keys). The \type {filename}
+points to the actual font file. If you include the full path in the \type
+{filename} or if the file is in the local directory, \LUATEX\ will run a little
+bit more efficient because it will not have to re|-|run the \type {find_xxx_file}
+callback in that case.
+
+Be careful: when mixing old and new fonts in one document, it is possible to
+create \POSTSCRIPT\ name clashes that can result in printing errors. When this
+happens, you have to change the \type {fullname} of the font.
+
+Typeset strings are written out in a wide format using 2~bytes per glyph, using
+the \type {index} key in the character information as value. The overall effect
+is like having an encoding based on numbers instead of traditional (\POSTSCRIPT)
+name|-|based reencoding. The way to get the correct \type {index} numbers for
+\TYPEONE\ fonts is by loading the font via \type {fontloader.open} and use the table
+indices as \type {index} fields.
+
+In order to make sure that cut and paste of the final document works okay you can
+best make sure that there is a \type {tounicode} vector enforced.
+
+\section[virtualfonts]{Virtual fonts}
+
+\subsection{The structure}
+
+You have to take the following steps if you want \LUATEX\ to treat the returned
+table from \type {define_font} as a virtual font:
+
+\startitemize[packed]
+\startitem
+ Set the top|-|level key \type {type} to \type {virtual}.
+\stopitem
+\startitem
+ Make sure there is at least one valid entry in \type {fonts} (see below).
+\stopitem
+\startitem
+ Give a \type {commands} array to every character (see below).
+\stopitem
+\stopitemize
+
+The presence of the toplevel \type {type} key with the specific value \type
+{virtual} will trigger handling of the rest of the special virtual font fields in
+the table, but the mere existence of 'type' is enough to prevent \LUATEX\ from
+looking for a virtual font on its own.
+
+Therefore, this also works \quote {in reverse}: if you are absolutely certain
+that a font is not a virtual font, assigning the value \type {base} or \type
+{real} to \type {type} will inhibit \LUATEX\ from looking for a virtual font
+file, thereby saving you a disk search.
+
+The \type {fonts} is another \LUA\ array. The values are one- or two|-|key
+hashes themselves, each entry indicating one of the base fonts in a virtual font.
+In case your font is referring to itself, you can use the \type {font.nextid()}
+function which returns the index of the next to be defined font which is probably
+the currently defined one.
+
+An example makes this easy to understand
+
+\starttyping
+fonts = {
+ { name = 'ptmr8a', size = 655360 },
+ { name = 'psyr', size = 600000 },
+ { id = 38 }
+}
+\stoptyping
+
+says that the first referenced font (index 1) in this virtual font is \type
+{ptrmr8a} loaded at 10pt, and the second is \type {psyr} loaded at a little over
+9pt. The third one is previously defined font that is known to \LUATEX\ as font id
+\quote {38}.
+
+The array index numbers are used by the character command definitions that are
+part of each character.
+
+The \type {commands} array is a hash where each item is another small array,
+with the first entry representing a command and the extra items being the
+parameters to that command. The allowed commands and their arguments are:
+
+\starttabulate[|Tl|l|l|p|]
+\NC \rmbf command name \NC \bf arguments \NC \bf type \NC \bf description \NC\NR
+\NC font \NC 1 \NC number \NC select a new font from the local \type {fonts} table\NC\NR
+\NC char \NC 1 \NC number \NC typeset this character number from the current font,
+ and move right by the character's width\NC\NR
+\NC node \NC 1 \NC node \NC output this node (list), and move right
+ by the width of this list\NC\NR
+\NC slot \NC 2 \NC number \NC a shortcut for the combination of a font and char command\NC\NR
+\NC push \NC 0 \NC \NC save current position\NC\NR
+\NC nop \NC 0 \NC \NC do nothing \NC\NR
+\NC pop \NC 0 \NC \NC pop position \NC\NR
+\NC rule \NC 2 \NC 2 numbers \NC output a rule $ht*wd$, and move right.\NC\NR
+\NC down \NC 1 \NC number \NC move down on the page\NC\NR
+\NC right \NC 1 \NC number \NC move right on the page\NC\NR
+\NC special \NC 1 \NC string \NC output a \type {\special} command\NC\NR
+\NC lua \NC 1 \NC string \NC execute a \LUA\ script (at \type {\latelua} time)\NC\NR
+\NC image \NC 1 \NC image \NC output an image (the argument can be either an \type
+ {<image>} variable or an \type {image_spec} table)\NC\NR
+\NC comment \NC any \NC any \NC the arguments of this command are ignored\NC\NR
+\stoptabulate
+
+When a font id is set to~0 then it will be replaced by the currently assigned
+font id. This prevents the need for hackery with future id's (normally one could
+use \type {font.nextid} but when more complex fonts are built in the meantime
+other instances could have been loaded.
+
+Here is a rather elaborate glyph commands example:
+
+\starttyping
+...
+commands = {
+ { 'push' }, -- remember where we are
+ { 'right', 5000 }, -- move right about 0.08pt
+ { 'font', 3 }, -- select the fonts[3] entry
+ { 'char', 97 }, -- place character 97 (ASCII 'a')
+ { 'pop' }, -- go all the way back
+ { 'down', -200000 }, -- move upwards by about 3pt
+ { 'special', 'pdf: 1 0 0 rg' } -- switch to red color
+ { 'rule', 500000, 20000 } -- draw a bar
+ { 'special','pdf: 0 g' } -- back to black
+}
+...
+\stoptyping
+
+The default value for \type {font} is always~1 at the start of the
+\type {commands} array. Therefore, if the virtual font is essentially only a
+re|-|encoding, then you do usually not have create an explicit \quote {font}
+command in the array.
+
+Rules inside of \type {commands} arrays are built up using only two dimensions:
+they do not have depth. For correct vertical placement, an extra \type {down}
+command may be needed.
+
+Regardless of the amount of movement you create within the \type {commands}, the
+output pointer will always move by exactly the width that was given in the \type
+{width} key of the character hash. Any movements that take place inside the \type
+{commands} array are ignored on the upper level.
+
+\subsection{Artificial fonts}
+
+Even in a \quote {real} font, there can be virtual characters. When \LUATEX\
+encounters a \type {commands} field inside a character when it becomes time to
+typeset the character, it will interpret the commands, just like for a true
+virtual character. In this case, if you have created no \quote {fonts} array,
+then the default (and only) \quote {base} font is taken to be the current font
+itself. In practice, this means that you can create virtual duplicates of
+existing characters which is useful if you want to create composite characters.
+
+Note: this feature does {\it not\/} work the other way around. There can not be
+\quote {real} characters in a virtual font! You cannot use this technique for
+font re-encoding either; you need a truly virtual font for that (because
+characters that are already present cannot be altered).
+
+\subsection{Example virtual font}
+
+Finally, here is a plain \TEX\ input file with a virtual font demonstration:
+
+\startbuffer
+\directlua {
+ callback.register('define_font',
+ function (name,size)
+ if name == 'cmr10-red' then
+ f = font.read_tfm('cmr10',size)
+ f.name = 'cmr10-red'
+ f.type = 'virtual'
+ f.fonts = {{ name = 'cmr10', size = size }}
+ for i,v in pairs(f.characters) do
+ if (string.char(i)):find('[tacohanshartmut]') then
+ v.commands = {
+ {'special','pdf: 1 0 0 rg'},
+ {'char',i},
+ {'special','pdf: 0 g'},
+ }
+ else
+ v.commands = {{'char',i}}
+ end
+ end
+ else
+ f = font.read_tfm(name,size)
+ end
+ return f
+ end
+ )
+}
+
+\font\myfont = cmr10-red at 10pt \myfont This is a line of text \par
+\font\myfontx= cmr10 at 10pt \myfontx Here is another line of text \par
+\stopbuffer
+
+\typebuffer
+
+\section{The \type {font} library}
+
+The font library provides the interface into the internals of the font system,
+and also it contains helper functions to load traditional \TEX\ font metrics
+formats. Other font loading functionality is provided by the \type {fontloader}
+library that will be discussed in the next section.
+
+\subsection{Loading a \TFM\ file}
+
+The behavior documented in this subsection is considered stable in the sense that
+there will not be backward-incompatible changes any more.
+
+\startfunctioncall
+<table> fnt =
+ font.read_tfm(<string> name, <number> s)
+\stopfunctioncall
+
+The number is a bit special:
+
+\startitemize
+\startitem
+ If it is positive, it specifies an \quote {at size} in scaled points.
+\stopitem
+\startitem
+ If it is negative, its absolute value represents a \quote {scaled}
+ setting relative to the designsize of the font.
+\stopitem
+\stopitemize
+
+The internal structure of the metrics font table that is returned is explained in
+\in {chapter} [fonts].
+
+\subsection{Loading a \VF\ file}
+
+The behavior documented in this subsection is considered stable in the sense that
+there will not be backward-incompatible changes any more.
+
+\startfunctioncall
+<table> vf_fnt =
+ font.read_vf(<string> name, <number> s)
+\stopfunctioncall
+
+The meaning of the number \type {s} and the format of the returned table are
+similar to the ones in the \type {read_tfm()} function.
+
+\subsection{The fonts array}
+
+The whole table of \TEX\ fonts is accessible from \LUA\ using a virtual array.
+
+\starttyping
+font.fonts[n] = { ... }
+<table> f = font.fonts[n]
+\stoptyping
+
+See \in {chapter} [fonts] for the structure of the tables. Because this is a
+virtual array, you cannot call \type {pairs} on it, but see below for the \type
+{font.each} iterator.
+
+The two metatable functions implementing the virtual array are:
+
+\startfunctioncall
+<table> f = font.getfont(<number> n)
+font.setfont(<number> n, <table> f)
+\stopfunctioncall
+
+Note that at the moment, each access to the \type {font.fonts} or call to \type
+{font.getfont} creates a \LUA\ table for the whole font. This process can be quite
+slow. In a later version of \LUATEX, this interface will change (it will start
+using userdata objects instead of actual tables).
+
+Also note the following: assignments can only be made to fonts that have already
+been defined in \TEX, but have not been accessed {\it at all\/} since that
+definition. This limits the usability of the write access to \type {font.fonts}
+quite a lot, a less stringent ruleset will likely be implemented later.
+
+\subsection{Checking a font's status}
+
+You can test for the status of a font by calling this function:
+
+\startfunctioncall
+<boolean> f =
+ font.frozen(<number> n)
+\stopfunctioncall
+
+The return value is one of \type {true} (unassignable), \type {false} (can be
+changed) or \type {nil} (not a valid font at all).
+
+\subsection{Defining a font directly}
+
+You can define your own font into \type {font.fonts} by calling this function:
+
+\startfunctioncall
+<number> i =
+ font.define(<table> f)
+\stopfunctioncall
+
+The return value is the internal id number of the defined font (the index into
+\type {font.fonts}). If the font creation fails, an error is raised. The table
+is a font structure, as explained in \in {chapter} [fonts].
+
+\subsection{Projected next font id}
+
+\startfunctioncall
+<number> i =
+ font.nextid()
+\stopfunctioncall
+
+This returns the font id number that would be returned by a \type {font.define}
+call if it was executed at this spot in the code flow. This is useful for virtual
+fonts that need to reference themselves.
+
+\subsection{Font id}
+
+\startfunctioncall
+<number> i =
+ font.id(<string> csname)
+\stopfunctioncall
+
+This returns the font id associated with \type {csname} string, or $-1$ if \type
+{csname} is not defined.
+
+\subsection{Currently active font}
+
+\startfunctioncall
+<number> i = font.current()
+font.current(<number> i)
+\stopfunctioncall
+
+This gets or sets the currently used font number.
+
+\subsection{Maximum font id}
+
+\startfunctioncall
+<number> i =
+ font.max()
+\stopfunctioncall
+
+This is the largest used index in \type {font.fonts}.
+
+\subsection{Iterating over all fonts}
+
+\startfunctioncall
+for i,v in font.each() do
+ ...
+end
+\stopfunctioncall
+
+This is an iterator over each of the defined \TEX\ fonts. The first returned
+value is the index in \type {font.fonts}, the second the font itself, as a \LUA\
+table. The indices are listed incrementally, but they do not always form an array
+of consecutive numbers: in some cases there can be holes in the sequence.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-introduction.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
new file mode 100644
index 00000000000..8ab8b4463df
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-introduction.tex
@@ -0,0 +1,121 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-introduction
+
+\startchapter[title=Introduction]
+
+This is the reference manual of \LUATEX. We don't claim it is complete and we
+assume that the reader knows about \TEX\ as described in \quotation {The \TEX\
+Book}, the \quotation {\ETEX\ manual}, the \quotation {\PDFTEX\ manual}, etc.
+Additional reference material is published in journals of user groups and
+\CONTEXT\ related documentation.
+
+It took about a decade to reach stable version 1.0, but for good reason.
+Successive versions brought new functionality, more control, some cleanup of
+internals and experimental features evolved into stable ones or were dropped.
+Already quite early \LUATEX\ could be used for production and it was used on a
+daily basis by the authors. Successive versions sometimes demanded a adaption to
+the \LUA\ interfacing, but the concepts were unchanged. The current version can
+be considered stable in functionality and there will be no fundamental changes.
+Of course we then can decide to move towards version 2.00 with different
+properties.
+
+Don't expect \LUATEX\ to behave the same as \PDFTEX ! Although the core
+functionality of that 8 bit engine was starting point, it has been combined with
+the directional support of \OMEGA\ (\ALEPH). But, \LUATEX\ can behave different
+due to its wide (32 bit) characters, many registers and large memory support.
+There is native \UTF\ input, support for large (more that 8 bit) fonts, and the
+math machinery is tuned for \OPENTYPE\ math. There is support for directional
+typesetting too. The log output can differ from other engines and will likely
+differ more as we move forward. When you run plain \TEX\ for sure \LUATEX\ runs
+slower than \PDFTEX\ but when you run for instance \CONTEXT\ \MKIV\ in many cases
+it runs faster, especially when you have a bit more complex documents or input.
+Anyway, 32 bit all||over combined with more features has a price, but on a modern
+machine this is no real problem.
+
+Testing is done with \CONTEXT, but \LUATEX\ should work fine with other macro
+packages too. For that purpose we provide generic font handlers that are mostly
+the same as used in \CONTEXT. Discussing specific implementations is beyond this
+manual. Even when we keep \LUATEX\ lean and mean, we already have enough to
+discuss here.
+
+\LUATEX\ consists of a number of interrelated but (still) distinguishable parts.
+The organization of the source code is adapted so that it can glue all these
+components together. We continue cleaning up side effects of the accumulated
+code in \TEX\ engines (especially code that is not needed any longer).
+
+\startitemize[packed]
+ \startitem
+ Most of \PDFTEX\ version 1.40.9, converted to \CCODE. Some experimental
+ features have been removed and some utility macros are not inherited as
+ their functionality can be done in \LUA. The number of backend interface
+ commands has been reduced to a few. The extensions are separated from the
+ core (which we keep close to the original \TEX\ core). Some mechanisms
+ like expansion and protrusion can behave different from the original due
+ to some cleanup and optimization. Some whatsit based functionality (image
+ support and reusable content) is now core functionality.
+ \stopitem
+ \startitem
+ The direction model and some other bits from \ALEPH\ RC4 (derived from
+ \OMEGA) is included. The related primitives are part of core \LUATEX\ but
+ at the node level directional support is no longer based on so called
+ whatsits but on real nodes. In fact, whatsits are now only used for
+ backend specific extensions.
+ \stopitem
+ \startitem
+ Neither \ALEPH's I/O translation processes, nor tcx files, nor \ENCTEX\
+ can be used, these encoding|-|related functions are superseded by a
+ \LUA|-|based solution (reader callbacks). In a similar fashion all file
+ \IO\ can be intercepted.
+ \stopitem
+ \startitem
+ We currently use \LUA\ 5.2.*. At some point we might decide to move to
+ 5.3.* but that is yet to be decided. There are few \LUA\ libraries that
+ we consider part of the core \LUA\ machinery, for instance \type {lpeg}.
+ There are additional \LUA\ libraries that interface to the internals of
+ \TEX.
+ \stopitem
+ \startitem
+ There are various \TEX\ extensions but only those that cannot be done
+ using the \LUA\ interfaces. The math machinery often has two code paths:
+ one traditional and the other more suitable for wide \OPENTYPE\ fonts.
+ \stopitem
+ \startitem
+ The fontloader uses parts of \FONTFORGE\ 2008.11.17 combined with
+ additional code specific for usage in a \TEX\ engine. We try to minimize
+ specific font support to what \TEX\ needs: character references and
+ dimensions and delegate everything else to \LUA. That way we keep \TEX\
+ open for extensions without touching the core.
+ \stopitem
+ \startitem
+ The \METAPOST\ library is integral part of \LUATEX. This gives \TEX\ some
+ graphical capabilities using a relative high speed graphical subsystem.
+ Again \LUA\ is used as glue between the frontend and backend. Further
+ development of \METAPOST\ is closely related to \LUATEX.
+ \stopitem
+\stopitemize
+
+The \TEXLIVE\ version is to be considered the current stable version. Any version
+between the yearly \TEXLIVE\ releases are to be considered beta. The beta
+releases are normally available via the \CONTEXT\ distribution channels (the
+garden and so called minimals).
+
+\blank[1*big]
+
+Hans Hagen, Harmut Henkel, \crlf
+Taco Hoekwater \& Luigi Scarso
+
+\blank[3*big]
+
+\starttabulate
+\NC Version \EQ \currentdate \NC \NR
+\NC \LUATEX \EQ Snapshot \number\luatexversion.\luatexrevision \NC \NR
+\NC \CONTEXT \EQ \contextversion \NC \NR
+\stoptabulate
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-languages.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-languages.tex
new file mode 100644
index 00000000000..19e3f7b1458
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-languages.tex
@@ -0,0 +1,705 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-languages
+
+\startchapter[reference=languages,title={Languages, characters, fonts and glyphs}]
+
+\LUATEX's internal handling of the characters and glyphs that eventually become
+typeset is quite different from the way \TEX82 handles those same objects. The
+easiest way to explain the difference is to focus on unrestricted horizontal mode
+(i.e.\ paragraphs) and hyphenation first. Later on, it will be easy to deal
+with the differences that occur in horizontal and math modes.
+
+In \TEX82, the characters you type are converted into \type {char_node} records
+when they are encountered by the main control loop. \TEX\ attaches and processes
+the font information while creating those records, so that the resulting \quote
+{horizontal list} contains the final forms of ligatures and implicit kerning.
+This packaging is needed because we may want to get the effective width of for
+instance a horizontal box.
+
+When it becomes necessary to hyphenate words in a paragraph, \TEX\ converts (one
+word at time) the \type {char_node} records into a string by replacing ligatures
+with their components and ignoring the kerning. Then it runs the hyphenation
+algorithm on this string, and converts the hyphenated result back into a \quote
+{horizontal list} that is consecutively spliced back into the paragraph stream.
+Keep in mind that the paragraph may contain unboxed horizontal material, which
+then already contains ligatures and kerns and the words therein are part of the
+hyphenation process.
+
+Those \type {char_node} records are somewhat misnamed, as they are glyph
+positions in specific fonts, and therefore not really \quote {characters} in the
+linguistic sense. There is no language information inside the \type {char_node}
+records at all. Instead, language information is passed along using \type
+{language whatsit} records inside the horizontal list.
+
+In \LUATEX, the situation is quite different. The characters you type are always
+converted into \type {glyph_node} records with a special subtype to identify them
+as being intended as linguistic characters. \LUATEX\ stores the needed language
+information in those records, but does not do any font|-|related processing at
+the time of node creation. It only stores the index of the current font and a
+reference to a character in that font.
+
+When it becomes necessary to typeset a paragraph, \LUATEX\ first inserts all
+hyphenation points right into the whole node list. Next, it processes all the
+font information in the whole list (creating ligatures and adjusting kerning),
+and finally it adjusts all the subtype identifiers so that the records are \quote
+{glyph nodes} from now on.
+
+\section[charsandglyphs]{Characters and glyphs}
+
+\TEX82 (including \PDFTEX) differentiates between \type {char_node}s and \type
+{lig_node}s. The former are simple items that contained nothing but a \quote
+{character} and a \quote {font} field, and they lived in the same memory as
+tokens did. The latter also contained a list of components, and a subtype
+indicating whether this ligature was the result of a word boundary, and it was
+stored in the same place as other nodes like boxes and kerns and glues.
+
+In \LUATEX, these two types are merged into one, somewhat larger structure called
+a \type {glyph_node}. Besides having the old character, font, and component
+fields, and the new special fields like \quote {attr} (see~\in {section}
+[glyphnodes]), these nodes also contain:
+
+\startitemize
+
+\startitem A subtype, split into four main types:
+
+ \startitemize
+ \startitem
+ \type {character}, for characters to be hyphenated: the lowest bit
+ (bit 0) is set to 1.
+ \stopitem
+ \startitem
+ \type {glyph}, for specific font glyphs: the lowest bit (bit 0) is
+ not set.
+ \stopitem
+ \startitem
+ \type {ligature}, for ligatures (bit 1 is set)
+ \stopitem
+ \startitem
+ \type {ghost}, for \quote {ghost objects} (bit 2 is set)
+ \stopitem
+ \stopitemize
+
+ The latter two make further use of two extra fields (bits 3 and 4):
+
+ \startitemize
+ \startitem
+ \type {left}, for ligatures created from a left word boundary and for
+ ghosts created from \type {\leftghost}
+ \stopitem
+ \startitem
+ \type {right}, for ligatures created from a right word boundary and
+ for ghosts created from \type {\rightghost}
+ \stopitem
+ \stopitemize
+
+ For ligatures, both bits can be set at the same time (in case of a
+ single|-|glyph word).
+
+\stopitem
+
+\startitem
+ \type {glyph_node}s of type \quote {character} also contain language data,
+ split into four items that were current when the node was created: the
+ \type {\setlanguage} (15 bits), \type {\lefthyphenmin} (8 bits), \type
+ {\righthyphenmin} (8 bits), and \type {\uchyph} (1 bit).
+\stopitem
+
+\stopitemize
+
+Incidentally, \LUATEX\ allows 16383 separate languages, and words can be 256
+characters long. The language is stored with each character. You can set
+\type {\firstvalidlanguage} to for instance~1 and make thereby language~0
+an ignored hyphenation language.
+
+The new primitive \type {\hyphenationmin} can be used to signal the minimal length
+of a word. This value stored with the (current) language.
+
+Because the \type {\uchyph} value is saved in the actual nodes, its handling is
+subtly different from \TEX82: changes to \type {\uchyph} become effective
+immediately, not at the end of the current partial paragraph.
+
+Typeset boxes now always have their language information embedded in the nodes
+themselves, so there is no longer a possible dependency on the surrounding
+language settings. In \TEX82, a mid-paragraph statement like \type {\unhbox0} would
+process the box using the current paragraph language unless there was a
+\type {\setlanguage} issued inside the box. In \LUATEX, all language variables are
+already frozen.
+
+In traditional \TEX\ the process of hyphenation is driven by \type {lccode}s. In
+\LUATEX\ we made this dependency less strong. There are several strategies
+possible. When you do nothing, the currently used \type {lccode}s are used, when
+loading patterns, setting exceptions or hyphenating a list.
+
+When you set \type {\savinghyphcodes} to a value larger than zero the current set
+of \type {lccode}s will be saved with the language. In that case changing a \type
+{lccode} afterwards has no effect. However, you can adapt the set with:
+
+\starttyping
+\hjcode`a=`a
+\stoptyping
+
+This change is global which makes sense if you keep in mind that the moment that
+hyphenation happens is (normally) when the paragraph or a horizontal box is
+constructed. When \type {\savinghyphcodes} was zero when the language got
+initialized you start out with nothing, otherwise you already have a set.
+
+Carrying all this information with each glyph would give too much overhead and
+also make the process of setting up thee codes more complex. A solution with
+\type {hjcode} sets was considered but rejected because in practice the current
+approach is sufficient and it would not be compatible anyway.
+
+Beware: the values are always saved in the format, independent of the setting
+of \type {\savinghyphcodes} at the moment the format is dumped.
+
+A boundary node normally would mark the end of a word which interferes with for
+instance discretionary injection. For this you can use the \type {\wordboundary}
+as trigger. Here are a few examples of usage:
+
+\startbuffer
+ discrete---discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\discretionary{}{}{---}discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{}{}{---}discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{}{}{---}\wordboundary discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+\startbuffer
+ discrete\wordboundary\discretionary{---}{}{}\wordboundary discrete
+\stopbuffer
+\typebuffer \start \dontcomplain \hsize 1pt \getbuffer \par \stop
+
+\section{The main control loop}
+
+In \LUATEX's main loop, almost all input characters that are to be typeset are
+converted into \type {glyph} node records with subtype \quote {character}, but
+there are a few exceptions.
+
+First, the \type {\accent} primitives creates nodes with subtype \quote {glyph}
+instead of \quote {character}: one for the actual accent and one for the
+accentee. The primary reason for this is that \type {\accent} in \TEX82 is
+explicitly dependent on the current font encoding, so it would not make much
+sense to attach a new meaning to the primitive's name, as that would invalidate
+many old documents and macro packages. \footnote {Of course, modern packages will
+not use the \type {\accent} primitive at all but try to map directly on composed
+characters.} A secondary reason is that in \TEX82, \type {\accent} prohibits
+hyphenation of the current word. Since in \LUATEX\ hyphenation only takes place
+on \quote {character} nodes, it is possible to achieve the same effect.
+
+This change of meaning did happen with \type {\char}, that now generates \quote
+{glyph} nodes with a character subtype. In traditional \TEX\ there was a strong
+relationship between the 8|-|bit input encoding, hyphenation and glyphs taken
+from a font. In \LUATEX\ we have \UTF\ input, and in most cases this maps
+directly to a character in a font, apart from glyph replacement in the font
+engine. If you want to access arbitrary glyphs in a font directly you can always
+use \LUA\ to do so, because fonts are available as \LUA\ table.
+
+Second, all the results of processing in math mode eventually become nodes with
+\quote {glyph} subtypes.
+
+Third, the \ALEPH|-|derived commands \type {\leftghost} and \type {\rightghost}
+create nodes of a third subtype: \quote {ghost}. These nodes are ignored
+completely by all further processing until the stage where inter|-|glyph kerning
+is added.
+
+Fourth, automatic discretionaries are handled differently. \TEX82 inserts an
+empty discretionary after sensing an input character that matches the \type
+{\hyphenchar} in the current font. This test is wrong in our opinion: whether or
+not hyphenation takes place should not depend on the current font, it is a
+language property. \footnote {When \TEX\ showed up we didn't have \UNICODE\ yet
+and being limited to eight bits meant that one sometimes had to compromise
+between supporting character input, glyph rendering, hyphenation.}
+
+In \LUATEX, it works like this: if \LUATEX\ senses a string of input characters
+that matches the value of the new integer parameter \type {\exhyphenchar}, it will
+insert an explicit discretionary after that series of nodes. Initex sets the \type
+{\exhyphenchar=`\-}. Incidentally, this is a global parameter instead of a
+language-specific one because it may be useful to change the value depending on
+the document structure instead of the text language.
+
+The insertion of discretionaries after a sequence of explicit hyphens happens at
+the same time as the other hyphenation processing, {\it not\/} inside the main
+control loop.
+
+The only use \LUATEX\ has for \type {\hyphenchar} is at the check whether a word
+should be considered for hyphenation at all. If the \type {\hyphenchar} of the
+font attached to the first character node in a word is negative, then hyphenation
+of that word is abandoned immediately. This behaviour is added for backward
+compatibility only, and the use of \type {\hyphenchar=-1} as a means of
+preventing hyphenation should not be used in new \LUATEX\ documents.
+
+Fifth, \type {\setlanguage} no longer creates whatsits. The meaning of \type
+{\setlanguage} is changed so that it is now an integer parameter like all others.
+That integer parameter is used in \type {\glyph_node} creation to add language
+information to the glyph nodes. In conjunction, the \type {\language} primitive is
+extended so that it always also updates the value of \type {\setlanguage}.
+
+Sixth, the \type {\noboundary} command (that prohibits word boundary processing
+where that would normally take place) now does create nodes. These nodes are
+needed because the exact place of the \type {\noboundary} command in the input
+stream has to be retained until after the ligature and font processing stages.
+
+Finally, there is no longer a \type {main_loop} label in the code. Remember that
+\TEX82 did quite a lot of processing while adding \type {char_nodes} to the
+horizontal list? For speed reasons, it handled that processing code outside of
+the \quote {main control} loop, and only the first character of any \quote {word}
+was handled by that \quote {main control} loop. In \LUATEX, there is no longer a
+need for that (all hard work is done later), and the (now very small) bits of
+character|-|handling code have been moved back inline. When \type
+{\tracingcommands} is on, this is visible because the full word is reported,
+instead of just the initial character.
+
+\section[patternsexceptions]{Loading patterns and exceptions}
+
+The hyphenation algorithm in \LUATEX\ is quite different from the one in \TEX82,
+although it uses essentially the same user input.
+
+After expansion, the argument for \type {\patterns} has to be proper \UTF8 with
+individual patterns separated by spaces, no \type {\char} or \type {\chardef}d
+commands are allowed. The current implementation quite strict and will reject all
+non|-|\UNICODE\ characters.
+
+Likewise, the expanded argument for \type {\hyphenation} also has to be proper
+\UTF8, but here a bit of extra syntax is provided:
+
+\startitemize[n]
+\startitem
+ Three sets of arguments in curly braces (\type {{}{}{}}) indicates a desired
+ complex discretionary, with arguments as in \type {\discretionary}'s command in
+ normal document input.
+\stopitem
+\startitem
+ A \type {-} indicates a desired simple discretionary, cf.\ \type {\-} and \type
+ {\discretionary{-}{}{}} in normal document input.
+\stopitem
+\startitem
+ Internal command names are ignored. This rule is provided especially for \type
+ {\discretionary}, but it also helps to deal with \type {\relax} commands that
+ may sneak in.
+\stopitem
+\startitem
+ An \type {=} indicates a (non|-|discretionary) hyphen in the document input.
+\stopitem
+\stopitemize
+
+The expanded argument is first converted back to a space-separated string while
+dropping the internal command names. This string is then converted into a
+dictionary by a routine that creates key|-|value pairs by converting the other
+listed items. It is important to note that the keys in an exception dictionary
+can always be generated from the values. Here are a few examples:
+
+\starttabulate[|l|l|l|]
+\NC \bf value \NC \bf implied key (input) \NC \bf effect \NC\NR
+\NC \type {ta-ble} \NC table \NC \type {ta\-ble} ($=$ \type {ta\discretionary{-}{}{}ble}) \NC\NR
+\NC \type {ba{k-}{}{c}ken} \NC backen \NC \type {ba\discretionary{k-}{}{c}ken} \NC\NR
+\stoptabulate
+
+The resultant patterns and exception dictionary will be stored under the language
+code that is the present value of \type {\language}.
+
+In the last line of the table, you see there is no \type {\discretionary} command
+in the value: the command is optional in the \TEX-based input syntax. The
+underlying reason for that is that it is conceivable that a whole dictionary of
+words is stored as a plain text file and loaded into \LUATEX\ using one of the
+functions in the \LUA\ \type {lang} library. This loading method is quite a bit
+faster than going through the \TEX\ language primitives, but some (most?) of that
+speed gain would be lost if it had to interpret command sequences while doing so.
+
+It is possible to specify extra hyphenation points in compound words by using
+\type {{-}{}{-}} for the explicit hyphen character (replace \type {-} by the
+actual explicit hyphen character if needed). For example, this matches the word
+\quote {multi|-|word|-|boundaries} and allows an extra break inbetween \quote
+{boun} and \quote {daries}:
+
+\starttyping
+\hyphenation{multi{-}{}{-}word{-}{}{-}boun-daries}
+\stoptyping
+
+The motivation behind the \ETEX\ extension \type {\savinghyphcodes} was that
+hyphenation heavily depended on font encodings. This is no longer true in
+\LUATEX, and the corresponding primitive is basically ignored. Because we now
+have \type {hjcode}, the case relate codes can be used exclusively for \type
+{\uppercase} and \type {\lowercase}.
+
+\section{Applying hyphenation}
+
+The internal structures \LUATEX\ uses for the insertion of discretionaries in
+words is very different from the ones in \TEX82, and that means there are some
+noticeable differences in handling as well.
+
+First and foremost, there is no \quote {compressed trie} involved in hyphenation.
+The algorithm still reads \PATGEN-generated pattern files, but \LUATEX\ uses a
+finite state hash to match the patterns against the word to be hyphenated. This
+algorithm is based on the \quote {libhnj} library used by \OPENOFFICE, which in
+turn is inspired by \TEX.
+
+There are a few differences between \LUATEX\ and \TEX82 that are a direct result
+of the implementation:
+
+\startitemize
+\startitem
+ \LUATEX\ happily hyphenates the full \UNICODE\ character range.
+\stopitem
+\startitem
+ Pattern and exception dictionary size is limited by the available memory
+ only, all allocations are done dynamically. The trie|-|related settings in
+ \type {texmf.cnf} are ignored.
+\stopitem
+\startitem
+ Because there is no \quote {trie preparation} stage, language patterns never
+ become frozen. This means that the primitive \type {\patterns} (and its \LUA\
+ counterpart \type {lang.patterns}) can be used at any time, not only in
+ ini\TEX.
+\stopitem
+\startitem
+ Only the string representation of \type {\patterns} and \type {\hyphenation} is
+ stored in the format file. At format load time, they are simply
+ re|-|evaluated. It follows that there is no real reason to preload languages
+ in the format file. In fact, it is usually not a good idea to do so. It is
+ much smarter to load patterns no sooner than the first time they are actually
+ needed.
+\stopitem
+\startitem
+ \LUATEX\ uses the language-specific variables \type {\prehyphenchar} and \type
+ {\posthyphenchar} in the creation of implicit discretionaries, instead of
+ \TEX82's \type {\hyphenchar}, and the values of the language|-|specific variables
+ \type {\preexhyphenchar} and \type {\postexhyphenchar} for explicit
+ discretionaries (instead of \TEX82's empty discretionary).
+\stopitem
+\startitem
+ The value of the two counters related to hyphenation, \type {\hyphenpenalty}
+ and \type {\exhyphenpenalty}, are now stored in the discretionary nodes. This
+ permits a local overload for explicit \type {\discretionary} commands. The
+ value current when the hyphenation pass is applied is used. When no callbacks
+ are used this is compatible with traditional \TEX. When you apply the \LUA\
+ \type {lang.hyphenate} function the current values are used.
+\stopitem
+\stopitemize
+
+Because we store penalties in the disc node the \type {\discretionary} command has
+been extended to accept an optional penalty specification, so you can do the
+following:
+
+\startbuffer
+\hsize1mm
+1:foo{\hyphenpenalty 10000\discretionary{}{}{}}bar\par
+2:foo\discretionary penalty 10000 {}{}{}bar\par
+3:foo\discretionary{}{}{}bar\par
+\stopbuffer
+
+\typebuffer
+
+This results in:
+
+\blank \start \getbuffer \stop \blank
+
+Inserted characters and ligatures inherit their attributes from the nearest glyph
+node item (usually the preceding one, but the following one for the items
+inserted at the left-hand side of a word).
+
+Word boundaries are no longer implied by font switches, but by language switches.
+One word can have two separate fonts and still be hyphenated correctly (but it
+can not have two different languages, the \type {\setlanguage} command forces a
+word boundary).
+
+All languages start out with \type {\prehyphenchar=`\-}, \type {\posthyphenchar=0},
+\type {\preexhyphenchar=0} and \type {\postexhyphenchar=0}. When you assign the
+values of one of these four parameters, you are actually changing the settings
+for the current \type {\language}, this behaviour is compatible with \type {\patterns}
+and \type {\hyphenation}.
+
+\LUATEX\ also hyphenates the first word in a paragraph. Words can be up to 256
+characters long (up from 64 in \TEX82). Longer words generate an error right now,
+but eventually either the limitation will be removed or perhaps it will become
+possible to silently ignore the excess characters (this is what happens in
+\TEX82, but there the behaviour cannot be controlled).
+
+If you are using the \LUA\ function \type {lang.hyphenate}, you should be aware
+that this function expects to receive a list of \quote {character} nodes. It will
+not operate properly in the presence of \quote {glyph}, \quote {ligature}, or
+\quote {ghost} nodes, nor does it know how to deal with kerning.
+
+The hyphenation exception dictionary is maintained as key|-|value hash, and that
+is also dynamic, so the \type {hyph_size} setting is not used either.
+
+\section{Applying ligatures and kerning}
+
+After all possible hyphenation points have been inserted in the list, \LUATEX\
+will process the list to convert the \quote {character} nodes into \quote {glyph}
+and \quote {ligature} nodes. This is actually done in two stages: first all
+ligatures are processed, then all kerning information is applied to the result
+list. But those two stages are somewhat dependent on each other: If the used font
+makes it possible to do so, the ligaturing stage adds virtual \quote {character}
+nodes to the word boundaries in the list. While doing so, it removes and
+interprets \type {\noboundary} nodes. The kerning stage deletes those word
+boundary items after it is done with them, and it does the same for \quote
+{ghost} nodes. Finally, at the end of the kerning stage, all remaining \quote
+{character} nodes are converted to \quote {glyph} nodes.
+
+This work separation is worth mentioning because, if you overrule from \LUA\ only
+one of the two callbacks related to font handling, then you have to make sure you
+perform the tasks normally done by \LUATEX\ itself in order to make sure that the
+other, non|-|overruled, routine continues to function properly.
+
+Work in this area is not yet complete, but most of the possible cases are handled
+by our rewritten ligaturing engine. At some point all of the possible inputs will
+become supported. \footnote {Not all of this makes sense because we nowadays have
+\OPENTYPE\ fonts and ligature building can happen in ,any different ways there.}
+
+For example, take the word \type {office}, hyphenated \type {of-fice}, using a
+\quote {normal} font with all the \type {f}-\type {f} and \type {f}-\type {i}
+type ligatures:
+
+\starttabulate[|l|l|]
+\NC Initial: \NC \type {{o}{f}{f}{i}{c}{e}} \NC\NR
+\NC After hyphenation: \NC \type {{o}{f}{{-},{},{}}{f}{i}{c}{e}} \NC\NR
+\NC First ligature stage: \NC \type {{o}{{f-},{f},{<ff>}}{i}{c}{e}} \NC\NR
+\NC Final result: \NC \type {{o}{{f-},{<fi>},{<ffi>}}{c}{e}} \NC\NR
+\stoptabulate
+
+That's bad enough, but let us assume that there is also a hyphenation point
+between the \type {f} and the \type {i}, to create \type {of-f-ice}. Then the
+final result should be:
+
+\starttyping
+{o}{{f-},
+ {{f-},
+ {i},
+ {<fi>}},
+ {{<ff>-},
+ {i},
+ {<ffi>}}}{c}{e}
+\stoptyping
+
+with discretionaries in the post-break text as well as in the replacement text of
+the top-level discretionary that resulted from the first hyphenation point.
+
+Here is that nested solution again, in a different representation:
+
+\starttabulate[|l|l|l|l|]
+\NC \NC pre \NC post \NC replace \NC \NR
+\NC topdisc \NC \type {f-}$^1$ \NC sub1 \NC sub2 \NC \NR
+\NC sub1 \NC \type {f-}$^2$ \NC \type {i}$^3$ \NC \type {<fi>}$^4$ \NC \NR
+\NC sub2 \NC \type {<ff>-}$^5$\NC \type {i}$^6$ \NC \type {<ffi>}$^7$ \NC \NR
+\stoptabulate
+
+When line breaking is choosing its breakpoints, the following fields will
+eventually be selected:
+
+\starttabulate[|l|l|l|]
+\NC \type {of-f-ice} \NC \type {f-}$^1$ \NC \NR
+\NC \NC \type {f-}$^2$ \NC \NR
+\NC \NC \type {i}$^3$ \NC \NR
+\NC \type {of-fice} \NC \type {f-}$^1$ \NC \NR
+\NC \NC \type {<fi>}$^4$ \NC \NR
+\NC \type {off-ice} \NC \type {<ff>-}$^5$ \NC \NR
+\NC \NC \type {i}$^6$ \NC \NR
+\NC \type {office} \NC \type {<ffi>}$^7$ \NC \NR
+\stoptabulate
+
+The current solution in \LUATEX\ is not able to handle nested discretionaries,
+but it is in fact smart enough to handle this fictional \type {of-f-ice} example.
+It does so by combining two sequential discretionary nodes as if they were a
+single object (where the second discretionary node is treated as an extension of
+the first node).
+
+One can observe that the \type {of-f-ice} and \type {off-ice} cases both end with
+the same actual post replacement list (\type {i}), and that this would be the
+case even if that \type {i} was the first item of a potential following ligature
+like \type {ic}. This allows \LUATEX\ to do away with one of the fields, and thus
+make the whole stuff fit into just two discretionary nodes.
+
+The mapping of the seven list fields to the six fields in this discretionary node
+pair is as follows:
+
+\starttabulate[|l|p|]
+\NC \bf field \NC \bf description \NC \NR
+\NC \type {disc1.pre} \NC \type {f-}$^1$ \NC \NR
+\NC \type {disc1.post} \NC \type {<fi>}$^4$ \NC \NR
+\NC \type {disc1.replace} \NC \type {<ffi>}$^7$ \NC \NR
+\NC \type {disc2.pre} \NC \type {f-}$^2$ \NC \NR
+\NC \type {disc2.post} \NC \type {i}$^{3{,}6}$\NC \NR
+\NC \type {disc2.replace} \NC \type {<ff>-}$^5$\NC \NR
+\stoptabulate
+
+What is actually generated after ligaturing has been applied is therefore:
+
+\starttyping
+{o}{{f-},
+ {<fi>},
+ {<ffi>}}
+ {{f-},
+ {i},
+ {<ff>-}}{c}{e}
+\stoptyping
+
+The two discretionaries have different subtypes from a discretionary appearing on
+its own: the first has subtype 4, and the second has subtype 5. The need for
+these special subtypes stems from the fact that not all of the fields appear in
+their \quote {normal} location. The second discretionary especially looks odd,
+with things like the \type {<ff>-} appearing in \type {disc2.replace}. The fact
+that some of the fields have different meanings (and different processing code
+internally) is what makes it necessary to have different subtypes: this enables
+\LUATEX\ to distinguish this sequence of two joined discretionary nodes from the
+case of two standalone discretionaries appearing in a row.
+
+Of course there is still that relationship with fonts: ligatures can be implemented by
+mapping a sequence of glyphs onto one glyph, but also by selective replacement and
+kerning. This means that the above examples are just representing the traditional
+approach.
+
+\section{Breaking paragraphs into lines}
+
+This code is still almost unchanged, but because of the above|-|mentioned changes
+with respect to discretionaries and ligatures, line breaking will potentially be
+different from traditional \TEX. The actual line breaking code is still based on
+the \TEX82 algorithms, and it does not expect there to be discretionaries inside
+of discretionaries.
+
+But that situation is now fairly common in \LUATEX, due to the changes to the
+ligaturing mechanism. And also, the \LUATEX\ discretionary nodes are implemented
+slightly different from the \TEX82 nodes: the \type {no_break} text is now
+embedded inside the disc node, where previously these nodes kept their place in
+the horizontal list. In traditional \TEX\ the discretionary node contains a
+counter indicating how many nodes to skip, but in \LUATEX\ we store the pre, post
+and replace text in the discretionary node.
+
+The combined effect of these two differences is that \LUATEX\ does not always use
+all of the potential breakpoints in a paragraph, especially when fonts with many
+ligatures are used. Of course kerning also complicates matters here.
+
+\section{The \type {lang} library}
+
+This library provides the interface to \LUATEX's structure
+representing a language, and the associated functions.
+
+\startfunctioncall
+<language> l = lang.new()
+<language> l = lang.new(<number> id)
+\stopfunctioncall
+
+This function creates a new userdata object. An object of type \type {<language>}
+is the first argument to most of the other functions in the \type {lang}
+library. These functions can also be used as if they were object methods, using
+the colon syntax.
+
+Without an argument, the next available internal id number will be assigned to
+this object. With argument, an object will be created that links to the internal
+language with that id number.
+
+\startfunctioncall
+<number> n = lang.id(<language> l)
+\stopfunctioncall
+
+returns the internal \type {\language} id number this object refers to.
+
+\startfunctioncall
+<string> n = lang.hyphenation(<language> l)
+lang.hyphenation(<language> l, <string> n)
+\stopfunctioncall
+
+Either returns the current hyphenation exceptions for this language, or adds new
+ones. The syntax of the string is explained in~\in {section}
+[patternsexceptions].
+
+\startfunctioncall
+lang.clear_hyphenation(<language> l)
+\stopfunctioncall
+
+Clears the exception dictionary (string) for this language.
+
+\startfunctioncall
+<string> n = lang.clean(<language> l, <string> o)
+<string> n = lang.clean(<string> o)
+\stopfunctioncall
+
+Creates a hyphenation key from the supplied hyphenation value. The syntax of the
+argument string is explained in~\in {section} [patternsexceptions]. This function
+is useful if you want to do something else based on the words in a dictionary
+file, like spell|-|checking.
+
+\startfunctioncall
+<string> n = lang.patterns(<language> l)
+lang.patterns(<language> l, <string> n)
+\stopfunctioncall
+
+Adds additional patterns for this language object, or returns the current set.
+The syntax of this string is explained in~\in {section} [patternsexceptions].
+
+\startfunctioncall
+lang.clear_patterns(<language> l)
+\stopfunctioncall
+
+Clears the pattern dictionary for this language.
+
+\startfunctioncall
+<number> n = lang.prehyphenchar(<language> l)
+lang.prehyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {pre|-|break} hyphen character for implicit hyphenation
+in this language (initially the hyphen, decimal 45).
+
+\startfunctioncall
+<number> n = lang.posthyphenchar(<language> l)
+lang.posthyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {post|-|break} hyphen character for implicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<number> n = lang.preexhyphenchar(<language> l)
+lang.preexhyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {pre|-|break} hyphen character for explicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<number> n = lang.postexhyphenchar(<language> l)
+lang.postexhyphenchar(<language> l, <number> n)
+\stopfunctioncall
+
+Gets or sets the \quote {post|-|break} hyphen character for explicit hyphenation
+in this language (initially null, decimal~0, indicating emptiness).
+
+\startfunctioncall
+<boolean> success = lang.hyphenate(<node> head)
+<boolean> success = lang.hyphenate(<node> head, <node> tail)
+\stopfunctioncall
+
+Inserts hyphenation points (discretionary nodes) in a node list. If \type {tail}
+is given as argument, processing stops on that node. Currently, \type {success}
+is always true if \type {head} (and \type {tail}, if specified) are proper nodes,
+regardless of possible other errors.
+
+Hyphenation works only on \quote {characters}, a special subtype of all the glyph
+nodes with the node subtype having the value \type {1}. Glyph modes with
+different subtypes are not processed. See \in {section~} [charsandglyphs] for
+more details.
+
+The following two commands can be used to set or query hj codes:
+
+\startfunctioncall
+lang.sethjcode(<language> l, <number> char, <number> usedchar)
+<number> usedchar = lang.gethjcode(<language> l, <number> char)
+\stopfunctioncall
+
+When you set a hjcode the current sets get initialized unless the set was already
+initialized due to \type {\savinghyphcodes} being larger than zero.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-logos.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-logos.tex
new file mode 100644
index 00000000000..7406dd60206
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-logos.tex
@@ -0,0 +1,19 @@
+\startenvironment luatex-logos
+
+\logo[DFONT] {dfont}
+\logo[CFF] {cff}
+\logo[CMAP] {CMap}
+\logo[PATGEN] {patgen}
+\logo[MP] {MetaPost}
+\logo[METAPOST] {MetaPost}
+\logo[MPLIB] {MPlib}
+\logo[COCO] {coco}
+\logo[SUNOS] {SunOS}
+\logo[BSD] {bsd}
+\logo[SYSV] {sysv}
+\logo[DPI] {dpi}
+\logo[DLL] {dll}
+\logo[OPENOFFICE]{OpenOffice}
+\logo[OCP] {OCP}
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-lua.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-lua.tex
new file mode 100644
index 00000000000..79c4e08ed6b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-lua.tex
@@ -0,0 +1,548 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-lua
+
+\startchapter[reference=lua,title={\LUA\ general}]
+
+\section[init]{Initialization}
+
+\subsection{\LUATEX\ as a \LUA\ interpreter}
+
+There are some situations that make \LUATEX\ behave like a standalone \LUA\
+interpreter:
+
+\startitemize[packed]
+\startitem
+ if a \type {--luaonly} option is given on the commandline, or
+\stopitem
+\startitem
+ if the executable is named \type {texlua} or \type {luatexlua}, or
+\stopitem
+\startitem
+ if the only non|-|option argument (file) on the commandline has the extension
+ \type {lua} or \type {luc}.
+\stopitem
+\stopitemize
+
+In this mode, it will set \LUA's \type {arg[0]} to the found script name, pushing
+preceding options in negative values and the rest of the command line in the
+positive values, just like the \LUA\ interpreter.
+
+\LUATEX\ will exit immediately after executing the specified \LUA\ script and is,
+in effect, a somewhat bulky stand alone \LUA\ interpreter with a bunch of extra
+preloaded libraries.
+
+\subsection{\LUATEX\ as a \LUA\ byte compiler}
+
+There are two situations that make \LUATEX\ behave like the \LUA\ byte compiler:
+
+\startitemize[packed]
+\startitem if a \type {--luaconly} option is given on the command line, or \stopitem
+\startitem if the executable is named \type {texluac} \stopitem
+\stopitemize
+
+In this mode, \LUATEX\ is exactly like \type {luac} from the stand alone \LUA\
+distribution, except that it does not have the \type {-l} switch, and that it
+accepts (but ignores) the \type {--luaconly} switch.
+
+\subsection{Other commandline processing}
+
+When the \LUATEX\ executable starts, it looks for the \type {--lua} command line
+option. If there is no \type {--lua} option, the command line is interpreted in a
+similar fashion as the other \TEX\ engines. Some options are accepted but have no
+consequence. The following command|-|line options are understood:
+
+\starttabulate[|lT|p|]
+\NC --fmt=FORMAT \NC load the format file \type {FORMAT} \NC\NR
+\NC --lua=FILE \NC load and execute a \LUA\ initialization script\NC\NR
+\NC --safer \NC disable easily exploitable \LUA\ commands \NC\NR
+\NC --nosocket \NC disable the \LUA\ socket library \NC\NR
+\NC --help \NC display help and exit \NC\NR
+\NC --ini \NC be \type {iniluatex}, for dumping formats \NC\NR
+\NC --interaction=STRING \NC set interaction mode: \type {batchmode}, \type {nonstopmode},
+ \type {scrollmode} or \type {errorstopmode} \NC \NR
+\NC --halt-on-error \NC stop processing at the first error\NC \NR
+\NC --kpathsea-debug=NUMBER \NC set path searching debugging flags according to
+ the bits of \type {NUMBER} \NC \NR
+\NC --progname=STRING \NC set the program name to \type {STRING} \NC \NR
+\NC --version \NC display version and exit \NC \NR
+\NC --credits \NC display credits and exit \NC \NR
+\NC --recorder \NC enable filename recorder \NC \NR
+\NC --output-comment=STRING \NC use \type {STRING} for \DVI\ file comment
+ instead of date (no effect for \PDF) \NC \NR
+\NC --output-directory=DIR \NC use \type {DIR} as the directory to write
+ files to \NC \NR
+\NC --draftmode \NC switch on draft mode i.e.\ generate no
+ output in \PDF\ mode \NC \NR
+\NC --output-format=FORMAT \NC use \type {FORMAT} for job output; \type
+ {FORMAT} is \type {dvi} or \type {pdf} \NC
+ \NR
+\NC --[no-]shell-escape \NC disable/enable system calls \NC \NR
+\NC --enable-write18 \NC enable system calls \NC \NR
+\NC --disable-write18 \NC disable system calls \NC \NR
+\NC --shell-restricted \NC restrict system calls to a list of commands
+ given in \type {texmf.cnf} \NC \NR
+\NC --debug-format \NC enable format debugging \NC \NR
+\NC --[no-]file-line-error \NC disable/enable \type {file:line:error} style
+ messages \NC \NR
+\NC --[no-]file-line-error-style \NC aliases of \type {--[no-]file-line-error} \NC \NR
+\NC --jobname=STRING \NC set the job name to \type {STRING} \NC \NR
+\NC --[no-]mktex=FMT \NC disable/enable \type {mktexFMT} generation
+ with \type {FMT} is \type {tex} or \type
+ {tfm} \NC \NR
+\NC --synctex=NUMBER \NC enable \type {synctex} \NC \NR
+\stoptabulate
+
+Some of the traditional flags are just ignored: \type {--etex}, \type
+{--translate-file}, \type {--8bit}. \type {--[no-]parse-first-line}, \type
+{--default-translate-file}. Also, we no longer support write18 because \type
+{os.execute} can do the same.
+
+The value to use for \type {\jobname} is decided as follows:
+
+\startitemize
+\startitem
+ If \type {--jobname} is given on the command line, its argument will be the
+ value for \type {\jobname}, without any changes. The argument will not be
+ used for actual input so it need not exist. The \type {--jobname} switch only
+ controls the \type {\jobname} setting.
+\stopitem
+\startitem
+ Otherwise, \type {\jobname} will be the name of the first file that is read
+ from the file system, with any path components and the last extension (the
+ part following the last \type {.}) stripped off.
+\stopitem
+\startitem
+ An exception to the previous point: if the command line goes into interactive
+ mode (by starting with a command) and there are no files input via \type
+ {\everyjob} either, then the \type {\jobname} is set to \type {texput} as a
+ last resort.
+\stopitem
+\stopitemize
+
+The file names for output files that are generated automatically are created by
+attaching the proper extension (\type {log}, \type {pdf}, etc.) to the found
+\type {\jobname}. These files are created in the directory pointed to by \type
+{--output-directory}, or in the current directory, if that switch is not present.
+
+\blank
+
+Without the \type {--lua} option, command line processing works like it does in
+any other web2c-based typesetting engine, except that \LUATEX\ has a few extra
+switches.
+
+If the \type {--lua} option is present, \LUATEX\ will enter an alternative mode
+of command line processing in comparison to the standard web2c programs.
+
+In this mode, a small series of actions is taken in order. First, it will parse
+the command line as usual, but it will only interpret a small subset of the
+options immediately: \type {--safer}, \type {--nosocket}, \type
+{--[no-]shell-escape}, \type {--enable-write18}, \type {--disable-write18}, \type
+{--shell-restricted}, \type {--help}, \type {--version}, and \type {--credits}.
+
+Next \LUATEX\ searches for the requested \LUA\ initialization script. If it
+cannot be found using the actual name given on the command line, a second attempt
+is made by prepending the value of the environment variable \type {LUATEXDIR}, if
+that variable is defined in the environment.
+
+Then it checks the various safety switches. You can use those to disable some
+\LUA\ commands that can easily be abused by a malicious document. At the moment,
+\type {--safer} \type {nil}s the following functions:
+
+\starttabulate[|l|l|]
+\NC \bf library \NC \bf functions \NC \NR
+\NC \type {os} \NC \type {execute} \type {exec} \type {spawn} \type {setenv} \type {rename} \type {remove} \type {tmpdir} \NC \NR
+\NC \type {io} \NC \type {popen} \type {output} \type {tmpfile} \NC \NR
+\NC \type {lfs} \NC \type {rmdir} \type {mkdir} \type {chdir} \type {lock} \type {touch} \NC \NR
+\stoptabulate
+
+Furthermore, it disables loading of compiled \LUA\ libraries and it makes \type
+{io.open()} fail on files that are opened for anything besides reading.
+
+When \LUATEX\ starts it set the locale to a neutral value. If for some reason you
+use \type {os.locale}, you need to make sure you \type {nil} it afterwards
+because otherwise it can interfere with code that for instance generates dates.
+You can nil the locale with
+
+\starttyping
+os.setlocale(nil.nil)
+\stoptyping
+
+The \type {--nosocket} option makes the socket library unavailable, so that \LUA\
+cannot use networking.
+
+The switches \type {--[no-]shell-escape}, \type {--[enable|disable]-write18}, and
+\type {--shell-restricted} have the same effects as in \PDFTEX, and additionally
+make \type {io.popen()}, \type {os.execute}, \type {os.exec} and \type {os.spawn}
+adhere to the requested option.
+
+Next the initialization script is loaded and executed. From within the script,
+the entire command line is available in the \LUA\ table \type {arg}, beginning with
+\type {arg[0]}, containing the name of the executable. As consequence warnings
+about unrecognized options are suppressed.
+
+Command line processing happens very early on. So early, in fact, that none of
+\TEX's initializations have taken place yet. For that reason, the tables that
+deal with typesetting, like \type {tex}, \type {token}, \type {node} and
+\type {pdf}, are off|-|limits during the execution of the startup file (they
+are \type {nil}'d). Special care is taken that \type {texio.write} and \type
+{texio.write_nl} function properly, so that you can at least report your actions
+to the log file when (and if) it eventually becomes opened (note that \TEX\ does
+not even know its \type {\jobname} yet at this point). See \in {chapter} [libraries]
+for more information about the \LUATEX-specific \LUA\ extension tables.
+
+Everything you do in the \LUA\ initialization script will remain visible during
+the rest of the run, with the exception of the \TEX\ specific libraries like
+\type {tex}, \type {token}, \type {node} and \type {pdf} tables. These will be
+initialized to their documented state after the execution of the script. You
+should not store anything in variables or within tables with these four global
+names, as they will be overwritten completely.
+
+We recommend you use the startup file only for your own \TEX|-|independent
+initializations (if you need any), to parse the command line, set values in the
+\type {texconfig} table, and register the callbacks you need.
+
+\LUATEX\ allows some of the command line options to be overridden by reading
+values from the \type {texconfig} table at the end of script execution (see the
+description of the \type {texconfig} table later on in this document for more
+details on which ones exactly).
+
+Unless the \type {texconfig} table tells \LUATEX\ not to initialize \KPATHSEA\
+at all (set \type {texconfig.kpse_init} to \type {false} for that), \LUATEX\
+acts on some more command line options after the initialization script is
+finished: in order to initialize the built|-|in \KPATHSEA\ library properly,
+\LUATEX\ needs to know the correct program name to use, and for that it needs to
+check \type {--progname}, or \type {--ini} and \type {--fmt}, if \type
+{--progname} is missing.
+
+\section{\LUA\ behaviour}
+
+\LUA s \type {tostring} function (and \type {string.format} may return values in
+scientific notation, thereby confusing the \TEX\ end of things when it is used as
+the right|-|hand side of an assignment to a \type {\dimen} or \type {\count}.
+
+Loading dynamic \LUA\ libraries will fail if there are two \LUA\ libraries loaded
+at the same time (which will typically happen on \type {win32}, because there is
+one \LUA\ 5.2 inside \LUATEX, and another will likely be linked to the \DLL\ file
+of the module itself).
+
+\LUATEX\ is able to use the kpathsea library to find \type {require()}d modules.
+For this purpose, \type {package.searchers[2]} is replaced by a different loader
+function, that decides at runtime whether to use kpathsea or the built|-|in core
+\LUA\ function. It uses \KPATHSEA\ when that is already initialized at that point
+in time, otherwise it reverts to using the normal \type {package.path} loader.
+
+Initialization of \KPATHSEA\ can happen either implicitly (when \LUATEX\ starts
+up and the startup script has not set \type {texconfig.kpse_init} to false), or
+explicitly by calling the \LUA\ function \type {kpse.set_program_name()}.
+
+\LUATEX\ is able to use dynamically loadable \LUA\ libraries, unless
+\type {--safer} was given as an option on the command line. For this purpose,
+\type {package.searchers[3]} is replaced by a different loader function, that
+decides at runtime whether to use \KPATHSEA\ or the built|-|in core \LUA\
+function. It uses \KPATHSEA\ when that is already initialized at that point in
+time, otherwise it reverts to using the normal \type {package.cpath} loader.
+
+This functionality required an extension to kpathsea:
+
+\startnarrower
+There is a new kpathsea file format: \type {kpse_clua_format} that searches for
+files with extension \type {.dll} and \type {.so}. The \type {texmf.cnf} setting
+for this variable is \type {CLUAINPUTS}, and by default it has this value:
+
+\starttyping
+CLUAINPUTS=.:$SELFAUTOLOC/lib/{$progname,$engine,}/lua//
+\stoptyping
+
+This path is imperfect (it requires a \TDS\ subtree below the binaries
+directory), but the architecture has to be in the path somewhere, and the
+currently simplest way to do that is to search below the binaries directory only.
+Of course it no big deal to write an alternative loader and use that in a macro
+package.
+
+One level up (a \type {lib} directory parallel to \type {bin}) would have been
+nicer, but that is not doable because \TEXLIVE\ uses a \type {bin/<arch>}
+structure.
+\stopnarrower
+
+In keeping with the other \TEX|-|like programs in \TEXLIVE, the two \LUA\ functions
+\type {os.execute} and \type {io.popen}, as well as the two new functions \type
+{os.exec} and \type {os.spawn} that are explained below, take the value of \type
+{shell_escape} and|/|or \type {shell_escape_commands} in account. Whenever
+\LUATEX\ is run with the assumed intention to typeset a document (and by that we
+mean that it is called as \type {luatex}, as opposed to \type {texlua}, and that
+the command line option \type {--luaonly} was not given), it will only run the
+four functions above if the matching \type {texmf.cnf} variable(s) or their \type
+{texconfig} (see \in {section} [texconfig]) counterparts allow execution of the
+requested system command. In \quote {script interpreter} runs of \LUATEX, these
+settings have no effect, and all four functions function as normal.
+
+The \type {f:read("*line")} and \type {f:lines()} functions from the io library
+have been adjusted so that they are line|-|ending neutral: any of \type {LF},
+\type {CR} or \type {CR+LF} are acceptable line endings.
+
+\type {luafilesystem} has been extended: there are two extra boolean functions
+(\type {lfs.isdir(filename)} and \type {lfs.isfile(filename)}) and one extra
+string field in its attributes table (\type {permissions}). There is an
+additional function \type {lfs.shortname()} which takes a file name and returns
+its short name on \type {win32} platforms. On other platforms, it just returns
+the given argument. The file name is not tested for existence. Finally, for
+non|-|\type {win32} platforms only, there is the new function \type
+{lfs.readlink()} hat takes an existing symbolic link as argument and returns its
+content. It returns an error on \type {win32}.
+
+The \type {string} library has an extra function: \type {string.explode(s[,m])}.
+This function returns an array containing the string argument \type {s} split
+into sub-strings based on the value of the string argument \type {m}. The second
+argument is a string that is either empty (this splits the string into
+characters), a single character (this splits on each occurrence of that
+character, possibly introducing empty strings), or a single character followed by
+the plus sign \type {+} (this special version does not create empty sub-strings).
+The default value for \type {m} is \quote {\type { +}} (multiple spaces). Note:
+\type {m} is not hidden by surrounding braces as it would be if this function was
+written in \TEX\ macros.
+
+The \type {string} library also has six extra iterators that return strings
+piecemeal:
+
+\startitemize
+\startitem
+ \type {string.utfvalues(s)}: an integer value in the \UNICODE\ range
+\stopitem
+\startitem
+ \type {string.utfcharacters(s)}: a string with a single \UTF-8 token in it
+\stopitem
+\startitem
+ \type {string.characters(s)} \NC a string containing one byte
+\stopitem
+\startitem
+ \type {string.characterpairs(s)} two strings each containing one byte or an
+ empty second string if the string length was odd
+\stopitem
+\startitem
+ \type {string.bytes(s)} a single byte value
+\stopitem
+\startitem
+ \type {string.bytepairs(s)} two byte values or nil instead of a number as
+ its second return value if the string length was odd
+\stopitem
+\stopitemize
+
+The \type {string.characterpairs()} and \type {string.bytepairs()} iterators
+are useful especially in the conversion of \UTF16 encoded data into \UTF8.
+
+There is also a two|-|argument form of \type {string.dump()}. The second argument
+is a boolean which, if true, strips the symbols from the dumped data. This
+matches an extension made in \type {luajit}.
+
+The \type {string} library functions \type {len}, \type {lower}, \type {sub}
+etc.\ are not \UNICODE|-|aware. For strings in the \UTF8 encoding, i.e., strings
+containing characters above code point 127, the corresponding functions from the
+\type {slnunicode} library can be used, e.g., \type {unicode.utf8.len}, \type
+{unicode.utf8.lower} etc.\ The exceptions are \type {unicode.utf8.find}, that
+always returns byte positions in a string, and \type {unicode.utf8.match} and
+\type {unicode.utf8.gmatch}. While the latter two functions in general {\it
+are} \UNICODE|-|aware, they fall|-|back to non|-|\UNICODE|-|aware behavior when
+using the empty capture \type {()} but other captures work as expected. For the
+interpretation of character classes in \type {unicode.utf8} functions refer to
+the library sources at \hyphenatedurl {http://luaforge.net/projects/sln}. Version
+5.3 of \LUA\ will provide some native \UTF8 support.
+
+\blank
+
+The \type {os} library has a few extra functions and variables:
+
+\startitemize
+
+\startitem
+ \type {os.selfdir} is a variable that holds the directory path of the
+ actual executable. For example: \type {\directlua {tex.sprint(os.selfdir)}}.
+\stopitem
+
+\startitem
+ \type {os.exec(commandline)} is a variation on \type {os.execute}. Here
+ \type {commandline} can be either a single string or a single table.
+
+ If the argument is a table \LUATEX\ first checks if there is a value at
+ integer index zero. If there is, this is the command to be executed.
+ Otherwise, it will use the value at integer index one. If neither are
+ present, nothing at all happens.
+
+ The set of consecutive values starting at integer~1 in the table are the
+ arguments that are passed on to the command (the value at index~1 becomes
+ \type {arg[0]}). The command is searched for in the execution path, so there
+ is normally no need to pass on a fully qualified path name.
+
+ If the argument is a string, then it is automatically converted into a table
+ by splitting on whitespace. In this case, it is impossible for the command
+ and first argument to differ from each other.
+
+ In the string argument format, whitespace can be protected by putting (part
+ of) an argument inside single or double quotes. One layer of quotes is
+ interpreted by \LUATEX, and all occurrences of \type {\"}, \type {\'} or \type
+ {\\} within the quoted text are unescaped. In the table format, there is no
+ string handling taking place.
+
+ This function normally does not return control back to the \LUA\ script: the
+ command will replace the current process. However, it will return the two
+ values \type {nil} and \type {error} if there was a problem while
+ attempting to execute the command.
+
+ On \MSWINDOWS, the current process is actually kept in memory until after the
+ execution of the command has finished. This prevents crashes in situations
+ where \TEXLUA\ scripts are run inside integrated \TEX\ environments.
+
+ The original reason for this command is that it cleans out the current
+ process before starting the new one, making it especially useful for use in
+ \TEXLUA.
+\stopitem
+
+\startitem
+ \type {os.spawn(commandline)} is a returning version of \type {os.exec},
+ with otherwise identical calling conventions.
+
+ If the command ran ok, then the return value is the exit status of the
+ command. Otherwise, it will return the two values \type {nil} and \type
+ {error}.
+\stopitem
+
+\startitem
+ \type {os.setenv(key,value)} sets a variable in the environment. Passing
+ \type {nil} instead of a value string will remove the variable.
+\stopitem
+
+\startitem
+ \type {os.env} is a hash table containing a dump of the variables and
+ values in the process environment at the start of the run. It is writeable,
+ but the actual environment is {\em not\/} updated automatically.
+\stopitem
+
+\startitem
+ \type {os.gettimeofday()} returns the current \quote {\UNIX\ time}, but as a
+ float. This function is not available on the \SUNOS\ platforms, so do not use
+ this function for portable documents.
+\stopitem
+
+\startitem
+ \type {os.times()}returns the current process times according to \ the
+ \UNIX\ C library function \quote {times}. This function is not available on
+ the \MSWINDOWS\ and \SUNOS\ platforms, so do not use this function for
+ portable documents.
+\stopitem
+
+\startitem
+ \type {os.tmpdir()} creates a directory in the \quote {current directory}
+ with the name \type {luatex.XXXXXX} where the \type {X}-es are replaced by a
+ unique string. The function also returns this string, so you can \type
+ {lfs.chdir()} into it, or \type {nil} if it failed to create the directory.
+ The user is responsible for cleaning up at the end of the run, it does not
+ happen automatically.
+\stopitem
+
+\startitem
+ \type {os.type} is a string that gives a global indication of the class of
+ operating system. The possible values are currently \type {windows}, \type
+ {unix}, and \type {msdos} (you are unlikely to find this value \quote {in the
+ wild}).
+\stopitem
+
+\startitem
+ \type {os.name} is a string that gives a more precise indication of the
+ operating system. These possible values are not yet fixed, and for \type
+ {os.type} values \type {windows} and \type {msdos}, the \type {os.name}
+ values are simply \type {windows} and \type {msdos}
+
+ The list for the type \type {unix} is more precise: \type {linux}, \type
+ {freebsd}, \type {kfreebsd}, \type {cygwin}, \type {openbsd}, \type
+ {solaris}, \type {sunos} (pre-solaris), \type {hpux}, \type {irix}, \type
+ {macosx}, \type {gnu} (hurd), \type {bsd} (unknown, but \BSD|-|like), \type
+ {sysv} (unknown, but \SYSV|-|like), \type {generic} (unknown).
+\stopitem
+
+\startitem
+ \type {os.uname()} returns a table with specific operating system
+ information acquired at runtime. The keys in the returned table are all
+ string valued, and their names are: \type {sysname}, \type {machine}, \type
+ {release}, \type {version}, and \type {nodename}.
+\stopitem
+
+\stopitemize
+
+In stock \LUA, many things depend on the current locale. In \LUATEX, we can't do
+that, because it makes documents unportable. While \LUATEX\ is running if
+forces the following locale settings:
+
+\starttyping
+LC_CTYPE=C
+LC_COLLATE=C
+LC_NUMERIC=C
+\stoptyping
+
+\section {\LUA\ modules}
+
+Some modules that are normally external to \LUA\ are statically linked in with
+\LUATEX, because they offer useful functionality:
+
+\startitemize
+
+\startitem
+ \type {slnunicode}, from the \type {selene} libraries, \hyphenatedurl
+ {http://luaforge.net/projects/sln}. This library has been slightly extended
+ so that the \type {unicode.utf8.*} functions also accept the first 256 values
+ of plane~18. This is the range \LUATEX\ uses for raw binary output, as
+ explained above.
+\stopitem
+
+\startitem
+ \type {luazip}, from the kepler project, \hyphenatedurl
+ {http://www.keplerproject.org/luazip/}.
+\stopitem
+
+\startitem
+ \type {luafilesystem}, also from the kepler project, \hyphenatedurl
+ {http://www.keplerproject.org/luafilesystem/}.
+\stopitem
+
+\startitem
+ \type {lpeg}, by Roberto Ierusalimschy, \hyphenatedurl
+ {http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html}. This library is not
+ \UNICODE|-|aware, but interprets strings on a byte|-|per|-|byte basis. This
+ mainly means that \type {lpeg.S} cannot be used with \UTF8 characters encoded
+ in more than two bytes, and thus \type {lpeg.S} will look for one of those
+ two bytes when matching, not the combination of the two. The same is true for
+ \type {lpeg.R}, although the latter will display an error message if used
+ with multibyte characters. Therefore \type {lpeg.R('aä')} results in the
+ message \type {bad argument #1 to 'R' (range must have two characters)},
+ since to \type {lpeg}, \type {ä} is two 'characters' (bytes), so \type {aä}
+ totals three. In practice this is no real issue.
+\stopitem
+
+\startitem
+ \type {lzlib}, by Tiago Dionizio, \hyphenatedurl
+ {http://luaforge.net/projects/lzlib/}.
+\stopitem
+
+\startitem
+ \type {md5}, by Roberto Ierusalimschy \hyphenatedurl
+ {http://www.inf.puc-rio.br/~roberto/md5/md5-5/md5.html}.
+\stopitem
+
+\startitem
+ \type {luasocket}, by Diego Nehab \hyphenatedurl
+ {http://w3.impa.br/~diego/software/luasocket/}. The \type {.lua} support
+ modules from \type {luasocket} are also preloaded inside the executable,
+ there are no external file dependencies.
+\stopitem
+
+\stopitemize
+
+At some point (this also depends on distributions) \LUATEX\ might have these
+libraries loaded on demand. For this reason you can best use \type {require} to
+make sure they are loaded.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-math.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-math.tex
new file mode 100644
index 00000000000..cb8d198b1fc
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-math.tex
@@ -0,0 +1,1049 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-math
+
+\startchapter[reference=math,title={Math}]
+
+The handling of mathematics in \LUATEX\ differs quite a bit from how \TEX82 (and
+therefore \PDFTEX) handles math. First, \LUATEX\ adds primitives and extends some
+others so that \UNICODE\ input can be used easily. Second, all of \TEX82's
+internal special values (for example for operator spacing) have been made
+accessible and changeable via control sequences. Third, there are extensions that
+make it easier to use \OPENTYPE\ math fonts. And finally, there are some
+extensions that have been proposed or considered in the past that are now added
+to the engine.
+
+\section{The current math style}
+
+It is possible to discover the math style that will be used for a formula in an
+expandable fashion (while the math list is still being read). To make this
+possible, \LUATEX\ adds the new primitive: \type {\mathstyle}. This is a \quote
+{convert command} like e.g. \type {\romannumeral}: its value can only be read,
+not set.
+
+\subsection{\type {\mathstyle}}
+
+The returned value is between 0 and 7 (in math mode), or $-1$ (all other modes).
+For easy testing, the eight math style commands have been altered so that the can
+be used as numeric values, so you can write code like this:
+
+\starttyping
+\ifnum\mathstyle=\textstyle
+ \message{normal text style}
+\else \ifnum\mathstyle=\crampedtextstyle
+ \message{cramped text style}
+\fi \fi
+\stoptyping
+
+\subsection{\type {\Ustack}}
+
+There are a few math commands in \TEX\ where the style that will be used is not
+known straight from the start. These commands (\type {\over}, \type {\atop},
+\type {\overwithdelims}, \type {\atopwithdelims}) would therefore normally return
+wrong values for \type {\mathstyle}. To fix this, \LUATEX\ introduces a special
+prefix command: \type {\Ustack}:
+
+\starttyping
+$\Ustack {a \over b}$
+\stoptyping
+
+The \type {\Ustack} command will scan the next brace and start a new math group
+with the correct (numerator) math style.
+
+\section{Unicode math characters}
+
+Character handling is now extended up to the full \UNICODE\ range (the \type {\U}
+prefix), which is compatible with \XETEX.
+
+The math primitives from \TEX\ are kept as they are, except for the ones that
+convert from input to math commands: \type {mathcode}, and \type {delcode}. These
+two now allow for a 21-bit character argument on the left hand side of the equals
+sign.
+
+Some of the new \LUATEX\ primitives read more than one separate value. This is
+shown in the tables below by a plus sign in the second column.
+
+The input for such primitives would look like this:
+
+\starttyping
+\def\overbrace{\Umathaccent 0 1 "23DE }
+\stoptyping
+
+The altered \TEX82 primitives are:
+
+\starttabulate[|l|l|r|c|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR
+\NC \type {\mathcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC 8000 \NC \NR
+\NC \type {\delcode} \NC 0 \NC 10FFFF \NC = \NC 0 \NC FFFFFF \NC \NR
+\stoptabulate
+
+The unaltered ones are:
+
+\starttabulate[|l|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \NR
+\NC \type {\mathchardef} \NC 0 \NC 8000 \NC \NR
+\NC \type {\mathchar} \NC 0 \NC 7FFF \NC \NR
+\NC \type {\mathaccent} \NC 0 \NC 7FFF \NC \NR
+\NC \type {\delimiter} \NC 0 \NC 7FFFFFF \NC \NR
+\NC \type {\radical} \NC 0 \NC 7FFFFFF \NC \NR
+\stoptabulate
+
+For practical reasons \type {\mathchardef} will silently accept values larger
+that \type {0x8000} and interpret it as \type {\Umathcharnumdef}. This is needed
+to satisfy older macro packages.
+
+The following new primitives are compatible with \XETEX:
+
+% somewhat fuzzy:
+
+\starttabulate[|l|l|r|c|l|r|]
+\NC \bf primitive \NC \bf min \NC \bf max \NC \kern 2em \NC \bf min \NC \bf max \NC \NR
+\NC \type {\Umathchardef} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcharnumdef}\rlap{\high{5}} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcode} \NC 0 \NC 10FFFF \NC = \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{1}} \NC \NR
+\NC \type {\Udelcode} \NC 0 \NC 10FFFF \NC = \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NR
+\NC \type {\Umathchar} \NC 0+0+0 \NC 7+FF+10FFFF \NC \NC \NC \NC \NR
+\NC \type {\Umathaccent} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2,4}} \NC \NC \NC \NC \NR
+\NC \type {\Udelimiter} \NC 0+0+0 \NC 7+FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR
+\NC \type {\Uradical} \NC 0+0 \NC FF+10FFFF\rlap{\high{2}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcharnum} \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NC \NC \NC \NR
+\NC \type {\Umathcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR
+\NC \type {\Udelcodenum} \NC 0 \NC 10FFFF \NC = \NC -80000000 \NC 7FFFFFFF\rlap{\high{3}} \NC \NR
+\stoptabulate
+
+Specifications typically look like:
+
+\starttyping
+\Umathchardef\xx="1"0"456
+\Umathcode 123="1"0"789
+\stoptyping
+
+Note 1: The new primitives that deal with delimiter|-|style objects do not set up a
+\quote {large family}. Selecting a suitable size for display purposes is expected
+to be dealt with by the font via the \type {\Umathoperatorsize} parameter (more
+information can be found in a following section).
+
+Note 2: For these three primitives, all information is packed into a single
+signed integer. For the first two (\type {\Umathcharnum} and \type
+{\Umathcodenum}), the lowest 21 bits are the character code, the 3 bits above
+that represent the math class, and the family data is kept in the topmost bits
+(This means that the values for math families 128--255 are actually negative).
+For \type {\Udelcodenum} there is no math class. The math family information is
+stored in the bits directly on top of the character code. Using these three
+commands is not as natural as using the two- and three|-|value commands, so
+unless you know exactly what you are doing and absolutely require the speedup
+resulting from the faster input scanning, it is better to use the verbose
+commands instead.
+
+Note 3: The \type {\Umathaccent} command accepts optional keywords to control
+various details regarding math accents. See \in {section} [mathacc] below for
+details.
+
+New primitives that exist in \LUATEX\ only (all of these will be explained
+in following sections):
+
+\starttabulate[|l|l|l|l|]
+\NC \bf primitive \NC \bf value range (in hex) \NC \NR
+\NC \type {\Uroot} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Uoverdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Uunderdelimiter} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Udelimiterover} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\NC \type {\Udelimiterunder} \NC 0+0--FF+10FFFF$^2$ \NC \NR
+\stoptabulate
+
+\section{Cramped math styles}
+
+\LUATEX\ has four new primitives to set the cramped math styles directly:
+
+\starttyping
+\crampeddisplaystyle
+\crampedtextstyle
+\crampedscriptstyle
+\crampedscriptscriptstyle
+\stoptyping
+
+These additional commands are not all that valuable on their own, but they come
+in handy as arguments to the math parameter settings that will be added shortly.
+
+In Eijkhouts \quotation {\TEX\ by Topic} the rules for handling styles in scripts
+are described as follows:
+
+\startitemize
+\startitem
+ In any style superscripts and subscripts are taken from the next smaller style.
+ Exception: in display style they are taken in script style.
+\stopitem
+\startitem
+ Subscripts are always in the cramped variant of the style; superscripts are only
+ cramped if the original style was cramped.
+\stopitem
+\startitem
+ In an \type {..\over..} formula in any style the numerator and denominator are
+ taken from the next smaller style.
+\stopitem
+\startitem
+ The denominator is always in cramped style; the numerator is only in cramped
+ style if the original style was cramped.
+\stopitem
+\startitem
+ Formulas under a \type {\sqrt} or \type {\overline} are in cramped style.
+\stopitem
+\stopitemize
+
+In \LUATEX\ one can set the styles in more detail which means that you sometimes
+have to set both normal and cramped styles to get the effect you want. If we
+force styles in the script using \type {\scriptstyle} and \type {\crampedscriptstyle}
+we get this:
+
+\startbuffer[demo]
+\starttabulate
+\NC default \NC $b_{x=xx}^{x=xx}$ \NC \NR
+\NC script \NC $b_{\scriptstyle x=xx}^{\scriptstyle x=xx}$ \NC \NR
+\NC crampedscript \NC $b_{\crampedscriptstyle x=xx}^{\crampedscriptstyle x=xx}$ \NC \NR
+\stoptabulate
+\stopbuffer
+
+\getbuffer[demo]
+
+Now we set the following parameters
+
+\startbuffer[setup]
+\Umathordrelspacing\scriptstyle=30mu
+\Umathordordspacing\scriptstyle=30mu
+\stopbuffer
+
+\typebuffer[setup]
+
+This gives:
+
+\start\getbuffer[setup,demo]\stop
+
+But, as this is not what is expected (visually) we should say:
+
+\startbuffer[setup]
+\Umathordrelspacing\scriptstyle=30mu
+\Umathordordspacing\scriptstyle=30mu
+\Umathordrelspacing\crampedscriptstyle=30mu
+\Umathordordspacing\crampedscriptstyle=30mu
+\stopbuffer
+
+\typebuffer[setup]
+
+Now we get:
+
+\start\getbuffer[setup,demo]\stop
+
+\section{Math parameter settings}
+
+In \LUATEX, the font dimension parameters that \TEX\ used in math typesetting are
+now accessible via primitive commands. In fact, refactoring of the math engine
+has resulted in many more parameters than were accessible before.
+
+\starttabulate
+\NC \bf primitive name \NC \bf description \NC \NR
+\NC \type {\Umathquad} \NC the width of 18 mu's \NC \NR
+\NC \type {\Umathaxis} \NC height of the vertical center axis of
+ the math formula above the baseline \NC \NR
+\NC \type {\Umathoperatorsize} \NC minimum size of large operators in display mode \NC \NR
+\NC \type {\Umathoverbarkern} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathoverbarrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathoverbarvgap} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathunderbarkern} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathunderbarrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathunderbarvgap} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathradicalkern} \NC vertical clearance above the rule \NC \NR
+\NC \type {\Umathradicalrule} \NC the width of the rule \NC \NR
+\NC \type {\Umathradicalvgap} \NC vertical clearance below the rule \NC \NR
+\NC \type {\Umathradicaldegreebefore}\NC the forward kern that takes place before placement of
+ the radical degree \NC \NR
+\NC \type {\Umathradicaldegreeafter} \NC the backward kern that takes place after placement of
+ the radical degree \NC \NR
+\NC \type {\Umathradicaldegreeraise} \NC this is the percentage of the total height and depth of
+ the radical sign that the degree is raised by; it is
+ expressed in \type {percents}, so 60\% is expressed as the
+ integer $60$ \NC \NR
+\NC \type {\Umathstackvgap} \NC vertical clearance between the two
+ elements in a \type {\atop} stack \NC \NR
+\NC \type {\Umathstacknumup} \NC numerator shift upward in \type {\atop} stack \NC \NR
+\NC \type {\Umathstackdenomdown} \NC denominator shift downward in \type {\atop} stack \NC \NR
+\NC \type {\Umathfractionrule} \NC the width of the rule in a \type {\over} \NC \NR
+\NC \type {\Umathfractionnumvgap} \NC vertical clearance between the numerator and the rule \NC \NR
+\NC \type {\Umathfractionnumup} \NC numerator shift upward in \type {\over} \NC \NR
+\NC \type {\Umathfractiondenomvgap} \NC vertical clearance between the denominator and the rule \NC \NR
+\NC \type {\Umathfractiondenomdown} \NC denominator shift downward in \type {\over} \NC \NR
+\NC \type {\Umathfractiondelsize} \NC minimum delimiter size for \type {\...withdelims} \NC \NR
+\NC \type {\Umathlimitabovevgap} \NC vertical clearance for limits above operators \NC \NR
+\NC \type {\Umathlimitabovebgap} \NC vertical baseline clearance for limits above operators \NC \NR
+\NC \type {\Umathlimitabovekern} \NC space reserved at the top of the limit \NC \NR
+\NC \type {\Umathlimitbelowvgap} \NC vertical clearance for limits below operators \NC \NR
+\NC \type {\Umathlimitbelowbgap} \NC vertical baseline clearance for limits below operators \NC \NR
+\NC \type {\Umathlimitbelowkern} \NC space reserved at the bottom of the limit \NC \NR
+\NC \type {\Umathoverdelimitervgap} \NC vertical clearance for limits above delimiters \NC \NR
+\NC \type {\Umathoverdelimiterbgap} \NC vertical baseline clearance for limits above delimiters \NC \NR
+\NC \type {\Umathunderdelimitervgap} \NC vertical clearance for limits below delimiters \NC \NR
+\NC \type {\Umathunderdelimiterbgap} \NC vertical baseline clearance for limits below delimiters \NC \NR
+\NC \type {\Umathsubshiftdrop} \NC subscript drop for boxes and subformulas \NC \NR
+\NC \type {\Umathsubshiftdown} \NC subscript drop for characters \NC \NR
+\NC \type {\Umathsupshiftdrop} \NC superscript drop (raise, actually) for boxes and subformulas \NC \NR
+\NC \type {\Umathsupshiftup} \NC superscript raise for characters \NC \NR
+\NC \type {\Umathsubsupshiftdown} \NC subscript drop in the presence of a superscript \NC \NR
+\NC \type {\Umathsubtopmax} \NC the top of standalone subscripts cannot be higher than this
+ above the baseline \NC \NR
+\NC \type {\Umathsupbottommin} \NC the bottom of standalone superscripts cannot be less than
+ this above the baseline \NC \NR
+\NC \type {\Umathsupsubbottommax} \NC the bottom of the superscript of a combined super- and subscript
+ be at least as high as this above the baseline \NC \NR
+\NC \type {\Umathsubsupvgap} \NC vertical clearance between super- and subscript \NC \NR
+\NC \type {\Umathspaceafterscript} \NC additional space added after a super- or subscript \NC \NR
+\NC \type {\Umathconnectoroverlapmin}\NC minimum overlap between parts in an extensible recipe \NC \NR
+\stoptabulate
+
+Each of the parameters in this section can be set by a command like this:
+
+\starttyping
+\Umathquad\displaystyle=1em
+\stoptyping
+
+they obey grouping, and you can use \type {\the\Umathquad\displaystyle} if
+needed.
+
+\section{Skips around display math}
+
+The injection of \type {\abovedisplayskip} and \type {\belowdisplayskip} is not
+symmetrical. An above one is always inserted, also when zero, but the below is
+only inserted when larger than zero. Especially the later mkes it sometimes hard
+to fully control spacing. Therefore \LUATEX\ comes with a new directive: \type
+{\mathdisplayskipmode}. The following values apply:
+
+\starttabulate
+\NC 0 \NC normal \TEX\ behaviour: always above, only below when larger than zero \NC \NR
+\NC 1 \NC always \NC \NR
+\NC 2 \NC only when not zero \NC \NR
+\NC 3 \NC never, not even when not zero \NC \NR
+\stoptabulate
+
+\section{Font-based Math Parameters}
+
+While it is nice to have these math parameters available for tweaking, it would
+be tedious to have to set each of them by hand. For this reason, \LUATEX\
+initializes a bunch of these parameters whenever you assign a font identifier to
+a math family based on either the traditional math font dimensions in the font
+(for assignments to math family~2 and~3 using \TFM|-|based fonts like \type
+{cmsy} and \type {cmex}), or based on the named values in a potential \type
+{MathConstants} table when the font is loaded via Lua. If there is a \type
+{MathConstants} table, this takes precedence over font dimensions, and in that
+case no attention is paid to which family is being assigned to: the \type
+{MathConstants} tables in the last assigned family sets all parameters.
+
+In the table below, the one|-|letter style abbreviations and symbolic tfm font
+dimension names match those using in the \TeX book. Assignments to \type
+{\textfont} set the values for the cramped and uncramped display and text styles,
+\type {\scriptfont} sets the script styles, and \type {\scriptscriptfont} sets
+the scriptscript styles, so we have eight parameters for three font sizes. In the
+\TFM\ case, assignments only happen in family~2 and family~3 (and of course only
+for the parameters for which there are font dimensions).
+
+Besides the parameters below, \LUATEX\ also looks at the \quote {space} font
+dimension parameter. For math fonts, this should be set to zero.
+
+\start
+
+\switchtobodyfont[8pt]
+
+\starttabulate[|l|l|l|p|]
+\NC \bf variable \NC \bf style \NC \bf default value opentype \NC \bf default value tfm \NC \NR
+\NC \type {\Umathaxis} \NC -- \NC AxisHeight \NC axis_height \NC \NR
+\NC \type {\Umathoperatorsize} \NC D, D' \NC DisplayOperatorMinHeight \NC $^6$ \NC \NR
+\NC \type {\Umathfractiondelsize} \NC D, D' \NC FractionDelimiterDisplayStyleSize$^9$ \NC delim1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDelimiterSize$^9$ \NC delim2 \NC \NR
+\NC \type {\Umathfractiondenomdown} \NC D, D' \NC FractionDenominatorDisplayStyleShiftDown \NC denom1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDenominatorShiftDown \NC denom2 \NC \NR
+\NC \type {\Umathfractiondenomvgap} \NC D, D' \NC FractionDenominatorDisplayStyleGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionDenominatorGapMin \NC default_rule_thickness \NC \NR
+\NC \type {\Umathfractionnumup} \NC D, D' \NC FractionNumeratorDisplayStyleShiftUp \NC num1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionNumeratorShiftUp \NC num2 \NC \NR
+\NC \type {\Umathfractionnumvgap} \NC D, D' \NC FractionNumeratorDisplayStyleGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC FractionNumeratorGapMin \NC default_rule_thickness \NC \NR
+\NC \type {\Umathfractionrule} \NC -- \NC FractionRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathskewedfractionhgap} \NC -- \NC SkewedFractionHorizontalGap \NC math_quad/2 \NC \NR
+\NC \type {\Umathskewedfractionvgap} \NC -- \NC SkewedFractionVerticalGap \NC math_x_height \NC \NR
+\NC \type {\Umathlimitabovebgap} \NC -- \NC UpperLimitBaselineRiseMin \NC big_op_spacing3 \NC \NR
+\NC \type {\Umathlimitabovekern} \NC -- \NC 0$^1$ \NC big_op_spacing5 \NC \NR
+\NC \type {\Umathlimitabovevgap} \NC -- \NC UpperLimitGapMin \NC big_op_spacing1 \NC \NR
+\NC \type {\Umathlimitbelowbgap} \NC -- \NC LowerLimitBaselineDropMin \NC big_op_spacing4 \NC \NR
+\NC \type {\Umathlimitbelowkern} \NC -- \NC 0$^1$ \NC big_op_spacing5 \NC \NR
+\NC \type {\Umathlimitbelowvgap} \NC -- \NC LowerLimitGapMin \NC big_op_spacing2 \NC \NR
+\NC \type {\Umathoverdelimitervgap} \NC -- \NC StretchStackGapBelowMin \NC big_op_spacing1 \NC \NR
+\NC \type {\Umathoverdelimiterbgap} \NC -- \NC StretchStackTopShiftUp \NC big_op_spacing3 \NC \NR
+\NC \type {\Umathunderdelimitervgap} \NC-- \NC StretchStackGapAboveMin \NC big_op_spacing2 \NC \NR
+\NC \type {\Umathunderdelimiterbgap} \NC-- \NC StretchStackBottomShiftDown \NC big_op_spacing4 \NC \NR
+\NC \type {\Umathoverbarkern} \NC -- \NC OverbarExtraAscender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathoverbarrule} \NC -- \NC OverbarRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathoverbarvgap} \NC -- \NC OverbarVerticalGap \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathquad} \NC -- \NC <font_size(f)>$^1$ \NC math_quad \NC \NR
+\NC \type {\Umathradicalkern} \NC -- \NC RadicalExtraAscender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathradicalrule} \NC -- \NC RadicalRuleThickness \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicalvgap} \NC D, D' \NC RadicalDisplayStyleVerticalGap \NC (default_rule_thickness+\crlf
+ (abs(math_x_height)/4))$^3$ \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC RadicalVerticalGap \NC (default_rule_thickness+\crlf
+ (abs(default_rule_thickness)/4))$^3$ \NC \NR
+\NC \type {\Umathradicaldegreebefore} \NC -- \NC RadicalKernBeforeDegree \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicaldegreeafter} \NC -- \NC RadicalKernAfterDegree \NC <not set>$^2$ \NC \NR
+\NC \type {\Umathradicaldegreeraise} \NC -- \NC RadicalDegreeBottomRaisePercent \NC <not set>$^{2,7}$ \NC \NR
+\NC \type {\Umathspaceafterscript} \NC -- \NC SpaceAfterScript \NC script_space$^4$ \NC \NR
+\NC \type {\Umathstackdenomdown} \NC D, D' \NC StackBottomDisplayStyleShiftDown \NC denom1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackBottomShiftDown \NC denom2 \NC \NR
+\NC \type {\Umathstacknumup} \NC D, D' \NC StackTopDisplayStyleShiftUp \NC num1 \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackTopShiftUp \NC num3 \NC \NR
+\NC \type {\Umathstackvgap} \NC D, D' \NC StackDisplayStyleGapMin \NC 7*default_rule_thickness \NC \NR
+\NC \NC T, T', S, S', SS, SS' \NC StackGapMin \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathsubshiftdown} \NC -- \NC SubscriptShiftDown \NC sub1 \NC \NR
+\NC \type {\Umathsubshiftdrop} \NC -- \NC SubscriptBaselineDropMin \NC sub_drop \NC \NR
+\NC \type {\Umathsubsupshiftdown} \NC -- \NC SubscriptShiftDownWithSuperscript$^8$ \NC \NC \NR
+\NC \NC \NC \quad\ or SubscriptShiftDown \NC sub2 \NC \NR
+\NC \type {\Umathsubtopmax} \NC -- \NC SubscriptTopMax \NC (abs(math_x_height * 4) / 5) \NC \NR
+\NC \type {\Umathsubsupvgap} \NC -- \NC SubSuperscriptGapMin \NC 4*default_rule_thickness \NC \NR
+\NC \type {\Umathsupbottommin} \NC -- \NC SuperscriptBottomMin \NC (abs(math_x_height) / 4) \NC \NR
+\NC \type {\Umathsupshiftdrop} \NC -- \NC SuperscriptBaselineDropMax \NC sup_drop \NC \NR
+\NC \type {\Umathsupshiftup} \NC D \NC SuperscriptShiftUp \NC sup1 \NC \NR
+\NC \NC T, S, SS, \NC SuperscriptShiftUp \NC sup2 \NC \NR
+\NC \NC D', T', S', SS' \NC SuperscriptShiftUpCramped \NC sup3 \NC \NR
+\NC \type {\Umathsupsubbottommax} \NC -- \NC SuperscriptBottomMaxWithSubscript \NC (abs(math_x_height * 4) / 5) \NC \NR
+\NC \type {\Umathunderbarkern} \NC -- \NC UnderbarExtraDescender \NC default_rule_thickness \NC \NR
+\NC \type {\Umathunderbarrule} \NC -- \NC UnderbarRuleThickness \NC default_rule_thickness \NC \NR
+\NC \type {\Umathunderbarvgap} \NC -- \NC UnderbarVerticalGap \NC 3*default_rule_thickness \NC \NR
+\NC \type {\Umathconnectoroverlapmin} \NC -- \NC MinConnectorOverlap \NC 0$^5$ \NC \NR
+\stoptabulate
+
+\stop
+
+Note 1: \OPENTYPE\ fonts set \type {\Umathlimitabovekern} and \type
+{\Umathlimitbelowkern} to zero and set \type {\Umathquad} to the font size of the
+used font, because these are not supported in the \type {MATH} table,
+
+Note 2: Traditional \TFM\ fonts do not set \type {\Umathradicalrule} because
+\TEX82\ uses the height of the radical instead. When this parameter is indeed not
+set when \LUATEX\ has to typeset a radical, a backward compatibility mode will
+kick in that assumes that an oldstyle \TEX\ font is used. Also, they do not set
+\type {\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type
+{\Umathradicaldegreeraise}. These are then automatically initialized to
+$5/18$quad, $-10/18$quad, and 60.
+
+Note 3: If \TFM\ fonts are used, then the \type {\Umathradicalvgap} is not set
+until the first time \LUATEX\ has to typeset a formula because this needs
+parameters from both family~2 and family~3. This provides a partial backward
+compatibility with \TEX82, but that compatibility is only partial: once the \type
+{\Umathradicalvgap} is set, it will not be recalculated any more.
+
+Note 4: When \TFM\ fonts are used a similar situation arises with respect to
+\type {\Umathspaceafterscript}: it is not set until the first time \LUATEX\ has
+to typeset a formula. This provides some backward compatibility with \TEX82. But
+once the \type {\Umathspaceafterscript} is set, \type {\scriptspace} will never
+be looked at again.
+
+Note 5: Traditional \TFM\ fonts set \type {\Umathconnectoroverlapmin} to zero
+because \TEX82\ always stacks extensibles without any overlap.
+
+Note 6: The \type {\Umathoperatorsize} is only used in \type {\displaystyle}, and
+is only set in \OPENTYPE\ fonts. In \TFM\ font mode, it is artificially set to
+one scaled point more than the initial attempt's size, so that always the \quote
+{first next} will be tried, just like in \TEX82.
+
+Note 7: The \type {\Umathradicaldegreeraise} is a special case because it is the
+only parameter that is expressed in a percentage instead of as a number of scaled
+points.
+
+Note 8: \type {SubscriptShiftDownWithSuperscript} does not actually exist in the
+\quote {standard} \OPENTYPE\ math font Cambria, but it is useful enough to be
+added.
+
+Note 9: \type {FractionDelimiterDisplayStyleSize} and \type
+{FractionDelimiterSize} do not actually exist in the \quote {standard} \OPENTYPE\
+math font Cambria, but were useful enough to be added.
+
+\section{Math spacing setting}
+
+Besides the parameters mentioned in the previous sections, there are also 64 new
+primitives to control the math spacing table (as explained in Chapter~18 of the
+\TEX book). The primitive names are a simple matter of combining two math atom
+types, but for completeness' sake, here is the whole list:
+
+\starttwocolumns
+\starttyping
+\Umathordordspacing
+\Umathordopspacing
+\Umathordbinspacing
+\Umathordrelspacing
+\Umathordopenspacing
+\Umathordclosespacing
+\Umathordpunctspacing
+\Umathordinnerspacing
+\Umathopordspacing
+\Umathopopspacing
+\Umathopbinspacing
+\Umathoprelspacing
+\Umathopopenspacing
+\Umathopclosespacing
+\Umathoppunctspacing
+\Umathopinnerspacing
+\Umathbinordspacing
+\Umathbinopspacing
+\Umathbinbinspacing
+\Umathbinrelspacing
+\Umathbinopenspacing
+\Umathbinclosespacing
+\Umathbinpunctspacing
+\Umathbininnerspacing
+\Umathrelordspacing
+\Umathrelopspacing
+\Umathrelbinspacing
+\Umathrelrelspacing
+\Umathrelopenspacing
+\Umathrelclosespacing
+\Umathrelpunctspacing
+\Umathrelinnerspacing
+\Umathopenordspacing
+\Umathopenopspacing
+\Umathopenbinspacing
+\Umathopenrelspacing
+\Umathopenopenspacing
+\Umathopenclosespacing
+\Umathopenpunctspacing
+\Umathopeninnerspacing
+\Umathcloseordspacing
+\Umathcloseopspacing
+\Umathclosebinspacing
+\Umathcloserelspacing
+\Umathcloseopenspacing
+\Umathcloseclosespacing
+\Umathclosepunctspacing
+\Umathcloseinnerspacing
+\Umathpunctordspacing
+\Umathpunctopspacing
+\Umathpunctbinspacing
+\Umathpunctrelspacing
+\Umathpunctopenspacing
+\Umathpunctclosespacing
+\Umathpunctpunctspacing
+\Umathpunctinnerspacing
+\Umathinnerordspacing
+\Umathinneropspacing
+\Umathinnerbinspacing
+\Umathinnerrelspacing
+\Umathinneropenspacing
+\Umathinnerclosespacing
+\Umathinnerpunctspacing
+\Umathinnerinnerspacing
+\stoptyping
+\stoptwocolumns
+
+These parameters are of type \type {\muskip}, so setting a parameter can be done
+like this:
+
+\starttyping
+\Umathopordspacing\displaystyle=4mu plus 2mu
+\stoptyping
+
+They are all initialized by \type {initex} to the values mentioned in the table
+in Chapter~18 of the \TEX book.
+
+Note 1: for ease of use as well as for backward compatibility, \type
+{\thinmuskip}, \type {\medmuskip} and \type {\thickmuskip} are treated
+especially. In their case a pointer to the corresponding internal parameter is
+saved, not the actual \type {\muskip} value. This means that any later changes to
+one of these three parameters will be taken into account.
+
+Note 2: Careful readers will realise that there are also primitives for the items
+marked \type {*} in the \TEX book. These will not actually be used as those
+combinations of atoms cannot actually happen, but it seemed better not to break
+orthogonality. They are initialized to zero.
+
+\section[mathacc]{Math accent handling}
+
+\LUATEX\ supports both top accents and bottom accents in math mode, and math
+accents stretch automatically (if this is supported by the font the accent comes
+from, of course). Bottom and combined accents as well as fixed-width math accents
+are controlled by optional keywords following \type {\Umathaccent}.
+
+The keyword \type {bottom} after \type {\Umathaccent} signals that a bottom accent
+is needed, and the keyword \type {both} signals that both a top and a bottom
+accent are needed (in this case two accents need to be specified, of course).
+
+Then the set of three integers defining the accent is read. This set of integers
+can be prefixed by the \type {fixed} keyword to indicate that a non-stretching
+variant is requested (in case of both accents, this step is repeated).
+
+A simple example:
+
+\starttyping
+\Umathaccent both fixed 0 0 "20D7 fixed 0 0 "20D7 {example}
+\stoptyping
+
+If a math top accent has to be placed and the accentee is a character and has a
+non-zero \type {top_accent} value, then this value will be used to place the
+accent instead of the \type {\skewchar} kern used by \TEX82.
+
+The \type {top_accent} value represents a vertical line somewhere in the
+accentee. The accent will be shifted horizontally such that its own \type
+{top_accent} line coincides with the one from the accentee. If the \type
+{top_accent} value of the accent is zero, then half the width of the accent
+followed by its italic correction is used instead.
+
+The vertical placement of a top accent depends on the \type {x_height} of the
+font of the accentee (as explained in the \TEX book), but if value that turns out
+to be zero and the font had a \type {MathConstants} table, then \type
+{AccentBaseHeight} is used instead.
+
+The vertical placement of a bottom accent is straight below the accentee, no
+correction takes place.
+
+Possible locations are \type {top}, \type {bottom}, \type {both} and \type
+{center}. When no location is given \type {top} is assumed. An additional
+parameter \type {fraction} can be specified followed by a number; a value of for
+instance 1200 means that the criterium is 1.2 times the width of the nuclues. The
+fraction only applies to the stepwise selected shapes and is mostly meant for the
+\type {overlay} location. It also works for the other locations but then it
+concerns the width.
+
+\section{Math root extension}
+
+The new primitive \type {\Uroot} allows the construction of a radical noad
+including a degree field. Its syntax is an extension of \type {\Uradical}:
+
+\starttyping
+\Uradical <fam integer> <char integer> <radicand>
+\Uroot <fam integer> <char integer> <degree> <radicand>
+\stoptyping
+
+The placement of the degree is controlled by the math parameters \type
+{\Umathradicaldegreebefore}, \type {\Umathradicaldegreeafter}, and \type
+{\Umathradicaldegreeraise}. The degree will be typeset in \type
+{\scriptscriptstyle}.
+
+\section{Math kerning in super- and subscripts}
+
+The character fields in a \LUA|-|loaded \OPENTYPE\ math font can have a \quote
+{mathkern} table. The format of this table is the same as the \quote {mathkern}
+table that is returned by the \type {fontloader} library, except that all height
+and kern values have to be specified in actual scaled points.
+
+When a super- or subscript has to be placed next to a math item, \LUATEX\ checks
+whether the super- or subscript and the nucleus are both simple character items.
+If they are, and if the fonts of both character items are \OPENTYPE\ fonts (as
+opposed to legacy \TEX\ fonts), then \LUATEX\ will use the \OPENTYPE\ math
+algorithm for deciding on the horizontal placement of the super- or subscript.
+
+This works as follows:
+
+\startitemize
+ \startitem
+ The vertical position of the script is calculated.
+ \stopitem
+ \startitem
+ The default horizontal position is flat next to the base character.
+ \stopitem
+ \startitem
+ For superscripts, the italic correction of the base character is added.
+ \stopitem
+ \startitem
+ For a superscript, two vertical values are calculated: the bottom of the
+ script (after shifting up), and the top of the base. For a subscript, the two
+ values are the top of the (shifted down) script, and the bottom of the base.
+ \stopitem
+ \startitem
+ For each of these two locations:
+ \startitemize
+ \startitem
+ find the math kern value at this height for the base (for a subscript
+ placement, this is the bottom_right corner, for a superscript
+ placement the top_right corner)
+ \stopitem
+ \startitem
+ find the math kern value at this height for the script (for a
+ subscript placement, this is the top_left corner, for a superscript
+ placement the bottom_left corner)
+ \stopitem
+ \startitem
+ add the found values together to get a preliminary result.
+ \stopitem
+ \stopitemize
+ \stopitem
+ \startitem
+ The horizontal kern to be applied is the smallest of the two results from
+ previous step.
+ \stopitem
+\stopitemize
+
+The math kern value at a specific height is the kern value that is specified by the
+next higher height and kern pair, or the highest one in the character (if there is no
+value high enough in the character), or simply zero (if the character has no math kern
+pairs at all).
+
+\section{Scripts on horizontally extensible items like arrows}
+
+The primitives \type {\Uunderdelimiter} and \type {\Uoverdelimiter} allow the
+placement of a subscript or superscript on an automatically extensible item and
+\type {\Udelimiterunder} and \type {\Udelimiterover} allow the placement of an
+automatically extensible item as a subscript or superscript on a nucleus. The
+input:
+
+% these produce radical noads .. in fact the code base has the numbers wrong for
+% quite a while, so no one seems to use this
+
+\startbuffer
+$\Uoverdelimiter 0 "2194 {\hbox{\strut overdelimiter}}$
+$\Uunderdelimiter 0 "2194 {\hbox{\strut underdelimiter}}$
+$\Udelimiterover 0 "2194 {\hbox{\strut delimiterover}}$
+$\Udelimiterunder 0 "2194 {\hbox{\strut delimiterunder}}$
+\stopbuffer
+
+\typebuffer will render this:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+The vertical placements are controlled by \type {\Umathunderdelimiterbgap}, \type
+{\Umathunderdelimitervgap}, \type {\Umathoverdelimiterbgap}, and \type
+{\Umathoverdelimitervgap} in a similar way as limit placements on large operators.
+The superscript in \type {\Uoverdelimiter} is typeset in a suitable scripted style,
+the subscript in \type {\Uunderdelimiter} is cramped as well.
+
+These primitives accepts an option \type {width} specification. When used the
+also optional keywords \type {left}, \type {middle} and \type {right} will
+determine what happens when a requested size can't be met (which can happen when
+we step to successive larger variants).
+
+An extra primitive \type {\Uhextensible} is available that can be used like this:
+
+\startbuffer
+$\Uhextensible width 10cm 0 "2194$
+\stopbuffer
+
+\typebuffer This will render this:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+Here you can also pass options, like:
+
+\startbuffer
+$\Uhextensible width 1pt middle 0 "2194$
+\stopbuffer
+
+\typebuffer This gives:
+
+\blank \startnarrower \getbuffer \stopnarrower \blank
+
+\LUATEX\ internally uses a structure that supports \OPENTYPE\ \quote
+{MathVariants} as well as \TFM\ \quote {extensible recipes}. In most cases where
+font metrics are involved we have a different code path for traditional fonts end
+\OPENTYPE\ fonts.
+
+\section {Extracting values}
+
+You can extract the components of a math character. Say that we have defined:
+
+\starttyping
+\Umathcode 1 2 3 4
+\stoptyping
+
+then
+
+\starttyping
+[\Umathcharclass1] [\Umathcharfam1] [\Umathcharslot1]
+\stoptyping
+
+will return:
+
+\starttyping
+[2] [3] [4]
+\stoptyping
+
+These commands are provides as convenience. Before they came available you could
+do the following:
+
+\starttyping
+\def\Umathcharclass{\directlua{tex.print(tex.getmathcode(token.scan_int())[1])}}
+\def\Umathcharfam {\directlua{tex.print(tex.getmathcode(token.scan_int())[2])}}
+\def\Umathcharslot {\directlua{tex.print(tex.getmathcode(token.scan_int())[3])}}
+\stoptyping
+
+\section{fractions}
+
+The \type {\abovewithdelims} command accepts a keyword \type {exact}. When issued
+the extra space relative to the rule thickness is not added. One can of course
+use the \type {\Umathfraction..gap} commands to influence the spacing. Also the
+rule is still positioned around the math axis.
+
+\starttyping
+$$ { {a} \abovewithdelims() exact 4pt {b} }$$
+\stoptyping
+
+The math parameter table contains some parameters that specify a horizontal and
+vertical gap for skewed fractions. Of course some guessing is needed in order to
+implement something that uses them. And so we now provide a primitive similar to the
+other fraction related ones but with a few options so that one can influence the
+rendering. Of course a user can also mess around a bit with the parameters
+\type {\Umathskewedfractionhgap} and \type {\Umathskewedfractionvgap}.
+
+The syntax used here is:
+
+\starttyping
+{ {1} \Uskewed / <options> {2} }
+{ {1} \Uskewedwithdelims / () <options> {2} }
+\stoptyping
+
+where the options can be \type {noaxis} and \type {exact}. By default we add half
+the axis to the shifts and by default we zero the width of the middle character.
+For Latin Modern The result looks as follows:
+
+\def\ShowA#1#2#3{$x + { {#1} \Uskewed / #3 {#2} } + x$}
+\def\ShowB#1#2#3{$x + { {#1} \Uskewedwithdelims / () #3 {#2} } + x$}
+
+\start
+ \switchtobodyfont[modern]
+ \starttabulate[||||||]
+ \NC \NC
+ \ShowA{a}{b}{} \NC
+ \ShowA{1}{2}{} \NC
+ \ShowB{a}{b}{} \NC
+ \ShowB{1}{2}{} \NC
+ \NR
+ \NC \type{exact} \NC
+ \ShowA{a}{b}{exact} \NC
+ \ShowA{1}{2}{exact} \NC
+ \ShowB{a}{b}{exact} \NC
+ \ShowB{1}{2}{exact} \NC
+ \NR
+ \NC \type{noaxis} \NC
+ \ShowA{a}{b}{noaxis} \NC
+ \ShowA{1}{2}{noaxis} \NC
+ \ShowB{a}{b}{noaxis} \NC
+ \ShowB{1}{2}{noaxis} \NC
+ \NR
+ \NC \type{exact noaxis} \NC
+ \ShowA{a}{b}{exact noaxis} \NC
+ \ShowA{1}{2}{exact noaxis} \NC
+ \ShowB{a}{b}{exact noaxis} \NC
+ \ShowB{1}{2}{exact noaxis} \NC
+ \NR
+ \stoptabulate
+\stop
+
+\section {Other Math changes}
+
+\subsection {Verbose versions of single-character math commands}
+
+\LUATEX\ defines six new primitives that have the same function as
+\type {^}, \type {_}, \type {$}, and \type {$$}: %$
+
+\starttabulate[|l|l|l|l|]
+\NC \bf primitive \NC \bf explanation \NC \NR
+\NC \type {\Usuperscript} \NC Duplicates the functionality of \type {^} \NC \NR
+\NC \type {\Usubscript} \NC Duplicates the functionality of \type {_} \NC \NR
+\NC \type {\Ustartmath} \NC Duplicates the functionality of \type {$}, % $
+ when used in non-math mode. \NC \NR
+\NC \type {\Ustopmath} \NC Duplicates the functionality of \type {$}, % $
+ when used in inline math mode. \NC \NR
+\NC \type {\Ustartdisplaymath} \NC Duplicates the functionality of \type {$$}, % $$
+ when used in non-math mode. \NC \NR
+\NC \type {\Ustopdisplaymath} \NC Duplicates the functionality of \type {$$}, % $$
+ when used in display math mode. \NC \NR
+\stoptabulate
+
+The \type {\Ustopmath} and \type {\Ustopdisplaymath} primitives check if the current
+math mode is the correct one (inline vs.\ displayed), but you can freely intermix
+the four mathon|/|mathoff commands with explicit dollar sign(s).
+
+\subsection{Allowed math commands in non-math modes}
+
+The commands \type {\mathchar}, and \type {\Umathchar} and control sequences that
+are the result of \type {\mathchardef} or \type {\Umathchardef} are also
+acceptable in the horizontal and vertical modes. In those cases, the \type
+{\textfont} from the requested math family is used.
+
+\section{Math surrounding skips}
+
+Inline math is surrounded by (optional) \type {\mathsurround} spacing but that is fixed
+dimension. There is now an additional parameter \type {\mathsurroundskip}. When set to a
+non|-|zero value (or zero with some stretch or shrink) this parameter will replace
+\type {\mathsurround}. By using an additional parameter instead of changing the nature
+of \type {\mathsurround}, we can remain compatible.
+
+% \section{Math todo}
+%
+% The following items are still todo.
+%
+% \startitemize
+% \startitem
+% Pre-scripts.
+% \stopitem
+% \startitem
+% Multi-story stacks.
+% \stopitem
+% \startitem
+% Flattened accents for high characters (maybe).
+% \stopitem
+% \startitem
+% Better control over the spacing around displays and handling of equation numbers.
+% \stopitem
+% \startitem
+% Support for multi|-|line displays using \MATHML\ style alignment points.
+% \stopitem
+% \stopitemize
+
+\subsection {Delimiters: \type{\Uleft}, \type {\Umiddle} and \type {\Uright}}
+
+Normally you will force delimiters to certain sizes by putting an empty box or
+rule next to it. The resulting delimiter will either be a character from the
+stepwise size range or an extensible. The latter can be quite differently
+positioned that the characters as it depends on the fit as well as the fact if
+the used characters in the font have depth or height. Commands like (plain \TEX
+s) \type {\big} need use this feature. In \LUATEX\ we provide a bit more control
+by three variants that supporting optional parameters \type {height}, \type
+{depth} and \type {axis}. The following example uses this:
+
+\startbuffer
+\Uleft height 30pt depth 10pt \Udelimiter "0 "0 "000028
+\quad x\quad
+\Umiddle height 40pt depth 15pt \Udelimiter "0 "0 "002016
+\quad x\quad
+\Uright height 30pt depth 10pt \Udelimiter "0 "0 "000029
+\quad \quad \quad
+\Uleft height 30pt depth 10pt axis \Udelimiter "0 "0 "000028
+\quad x\quad
+\Umiddle height 40pt depth 15pt axis \Udelimiter "0 "0 "002016
+\quad x\quad
+\Uright height 30pt depth 10pt axis \Udelimiter "0 "0 "000029
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection
+\ruledhbox{\mathematics{\getbuffer}}
+\stoplinecorrection
+
+The keyword \type {exact} can be used as directive that the real dimensions
+should be applied when the criteria can't be met which can happen when we're
+still stepping through the successively larger variants. When no dimensions are
+given the \type {noaxis} command can be used to prevent shifting over the axis.
+
+You can influence the final class with the keyword \type {class} which will
+influence the spacing.
+
+\subsection{Fixed scripts}
+
+We have three parameters that are used for this fixed anchoring:
+
+\starttabulate[|l|l|]
+\NC $d$ \NC \type {\Umathsubshiftdown} \NC \NR
+\NC $u$ \NC \type {\Umathsupshiftup} \NC \NR
+\NC $s$ \NC \type {\Umathsubsupshiftdown} \NC \NR
+\stoptabulate
+
+When we set \type {\mathscriptsmode} to a value other than zero these are used
+for calculating fixed positions. This is something that is needed for instance
+for chemistry. You can manipulate the mentioned variables to achive different
+effects.
+
+\def\SampleMath#1%
+ {$\mathscriptsmode#1\mathupright CH_2 + CH^+_2 + CH^2_2$}
+
+\starttabulate[|c|c|c|l|]
+\NC \bf mode \NC \bf down \NC \bf up \NC \NC \NR
+\NC 0 \NC dynamic \NC dynamic \NC \SampleMath{0} \NC \NR
+\NC 1 \NC $d$ \NC $u$ \NC \SampleMath{1} \NC \NR
+\NC 2 \NC $s$ \NC $u$ \NC \SampleMath{2} \NC \NR
+\NC 3 \NC $s$ \NC $u + s - d$ \NC \SampleMath{3} \NC \NR
+\NC 4 \NC $d + (s-d)/2$ \NC $u + (s-d)/2$ \NC \SampleMath{4} \NC \NR
+\NC 5 \NC $d$ \NC $u + s - d$ \NC \SampleMath{5} \NC \NR
+\stoptabulate
+
+The value of this parameter obeys grouping but applies to the whole current
+formula.
+
+% if needed we can put the value in stylenodes but maybe more should go there
+
+\subsection {Tracing}
+
+Because there are quite some math related parameters and values, it is possible
+to limit tracing. Only when \type {tracingassigns} and|/|or \type
+{tracingrestores} are set to~2 or more they will be traced.
+
+\subsection {Math options}
+
+The logic in the math engine is rather complex and there are often no universal
+solutions (read: what works out well for one font, fails for another). Therefore
+some variations in the implementation will be driven by options for which a new
+primitive \type {\mathoption} has been introduced (so that we don't end up with
+many new commands). The approach of options also permits us to see what effect a
+specific solution has.
+
+\subsubsection {\type {\mathoption noitaliccompensation}}
+
+This option compensates placement for characters with a built|-|in italic
+correction.
+
+\startbuffer
+{\showboxes\int}\quad
+{\showboxes\int_{|}^{|}}\quad
+{\showboxes\int\limits_{|}^{|}}
+\stopbuffer
+
+\typebuffer
+
+Gives (with computer modern that has such italics):
+
+\startlinecorrection[blank]
+ \switchtobodyfont[modern]
+ \startcombination[nx=2,ny=2,distance=5em]
+ {\mathoption noitaliccompensation 0\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{0:inline}}
+ {\mathoption noitaliccompensation 0\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{0:display}}
+ {\mathoption noitaliccompensation 1\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{1:inline}}
+ {\mathoption noitaliccompensation 1\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{1:display}}
+ \stopcombination
+\stoplinecorrection
+
+\subsubsection {\type {\mathoption nocharitalic}}
+
+When two characters follow each other italic correction can interfere. The
+following example shows what this option does:
+
+\startbuffer
+\catcode"1D443=11
+\catcode"1D444=11
+\catcode"1D445=11
+P( PP PQR
+\stopbuffer
+
+\typebuffer
+
+Gives (with computer modern that has such italics):
+
+\startlinecorrection[blank]
+ \switchtobodyfont[modern]
+ \startcombination[nx=2,ny=2,distance=5em]
+ {\mathoption nocharitalic 0\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{0:inline}}
+ {\mathoption nocharitalic 0\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{0:display}}
+ {\mathoption nocharitalic 1\relax \mathematics{\getbuffer}}
+ {\nohyphens\type{1:inline}}
+ {\mathoption nocharitalic 1\relax \mathematics{\displaymath\getbuffer}}
+ {\nohyphens\type{1:display}}
+ \stopcombination
+\stoplinecorrection
+
+\subsubsection {\type {\mathoption useoldfractionscaling}}
+
+This option has been introduced as solution for tracker item 604 for fuzzy cases
+around either or not present fraction related settings for new fonts.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-modifications.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
new file mode 100644
index 00000000000..0507a56e0fa
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-modifications.tex
@@ -0,0 +1,867 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-modifications
+
+\startchapter[reference=modifications,title={Modifications}]
+
+\startsection[title=The merged engines]
+
+\startsubsection[title=The need for change]
+
+The first version of \LUATEX\ only had a few extra primitives and it was largely
+the same as \PDFTEX. Then we merged substantial parts of \ALEPH\ into the code
+and got more primitives. When we got more stable the decision was made to clean
+up the rather hybrid nature of the program. This means that some primitives have
+been promoted to core primitives, often with a different name, and that others
+were removed. This made it possible to start cleaning up the code base. In \in
+{chapter} [enhancements] we discussed some new primitives, here we will cover
+most of the adapted ones.
+
+Besides the expected changes caused by new functionality, there are a number of
+not|-|so|-|expected changes. These are sometimes a side|-|effect of a new
+(conflicting) feature, or, more often than not, a change neccessary to clean up
+the internal interfaces. These will also be mentioned.
+
+\stopsubsection
+
+\startsubsection[title=Changes from \TEX\ 3.1415926]
+
+Of course it all starts with traditional \TEX. Even if we started with \PDFTEX,
+most still comes from the original. But we divert a bit.
+
+\startitemize
+
+\startitem
+ The current code base is written in \CCODE, not \PASCAL. We use \CWEB\ when
+ possible. As a consequence instead of one large file plus change files, we
+ now have multiple files organized in categories like \type {tex}, \type
+ {pdf}, \type {lang}, \type {font}, \type {lua}, etc. There are some artefacts
+ of the conversion to \CCODE, but in due time we will clean up the source code
+ and make sure that the documentation is done right. Many files are in the
+ \CWEB\ format, but others, like those interfacing to \LUA, are \CCODE\ files.
+ Of course we want to stay as close as possible to the original so that the
+ documentation of the fundamentals behind \TEX\ by Don Knuth still applies.
+\stopitem
+
+\startitem
+ See \in {chapter} [languages] for many small changes related to paragraph
+ building, language handling and hyphenation. The most important change is
+ that adding a brace group in the middle of a word (like in \type {of{}fice})
+ does not prevent ligature creation.
+\stopitem
+
+\startitem
+ There is no pool file, all strings are embedded during compilation.
+\stopitem
+
+\startitem
+ The specifier \type {plus 1 fillll} does not generate an error. The extra
+ \quote{l} is simply typeset.
+\stopitem
+
+\startitem
+ The upper limit to \type {\endlinechar} and \type {\newlinechar} is 127.
+\stopitem
+
+\startitem
+ Magnification (\type {\mag}) is only supported in \DVI\ output mode.
+\stopitemize
+
+\stopsubsection
+
+\startsubsection[title=Changes from \ETEX\ 2.2]
+
+Being the de factor standard extension of course we provide the \ETEX\
+functionality, but with a few small adaptations.
+
+\startitemize
+
+\startitem
+ The \ETEX\ functionality is always present and enabled so the prepended
+ asterisk or \type {-etex} switch for \INITEX\ is not needed.
+\stopitem
+
+\startitem
+ The \TEXXET\ extension is not present, so the primitives \type
+ {\TeXXeTstate}, \type {\beginR}, \type {\beginL}, \type {\endR} and \type
+ {\endL} are missing. Instead we use the \OMEGA\ approach to directionality.
+\stopitem
+
+\startitem
+ Some of the tracing information that is output by \ETEX's \type
+ {\tracingassigns} and \type {\tracingrestores} is not there.
+\stopitem
+
+\startitem
+ Register management in \LUATEX\ uses the \ALEPH\ model, so the maximum value
+ is 65535 and the implementation uses a flat array instead of the mixed
+ flat|\&|sparse model from \ETEX.
+\stopitem
+
+\startitem
+ When kpathsea is used to find files, \LUATEX\ uses the \type {ofm} file
+ format to search for font metrics. In turn, this means that \LUATEX\ looks at
+ the \type {OFMFONTS} configuration variable (like \OMEGA\ and \ALEPH) instead
+ of \type {TFMFONTS} (like \TEX\ and \PDFTEX). Likewise for virtual fonts
+ (\LUATEX\ uses the variable \type {OVFFONTS} instead of \type {VFFONTS}).
+\stopitem
+
+\stopitemize
+
+\stopsubsection
+
+\startsubsection[title=Changes from \PDFTEX\ 1.40]
+
+Because we want to produce \PDF\ the most natural starting point was the popular
+\PDFTEX\ program. We inherit the stable features, dropped most of the
+experimental code and promoted some functionality to core \LUATEX\ functionality
+which in turn triggered renaming primitives.
+
+For compatibility reasons we still refer to \type {\pdf...} commands but \LUATEX\
+has a different backend interface. Instead of these primitives there are three
+interfacing primitives: \type {\pdfextension}, \type {\pdfvariable} and
+\type {\pdffeedback} that take keywords and optional further arguments. This way
+we can extend the features when needed but don't need to adapt the core engine.
+The front- and backend are decoupled as much as possible.
+
+\startitemize
+
+\startitem
+ The (experimental) support for snap nodes has been removed, because it is
+ much more natural to build this functionality on top of node processing and
+ attributes. The associated primitives that are now gone are: \type
+ {\pdfsnaprefpoint}, \type {\pdfsnapy}, and \type {\pdfsnapycomp}.
+\stopitem
+
+\startitem
+ The (experimental) support for specialized spacing around nodes has also been
+ removed. The associated primitives that are now gone are: \type
+ {\pdfadjustinterwordglue}, \type {\pdfprependkern}, and \type
+ {\pdfappendkern}, as well as the five supporting primitives \type
+ {\knbscode}, \type {\stbscode}, \type {\shbscode}, \type {\knbccode}, and
+ \type {\knaccode}.
+\stopitem
+
+\startitem
+ A number of \quote {\PDFTEX\ primitives} have been removed as they can be
+ implemented using \LUA:
+
+ \start \raggedright
+ \type {\pdfelapsedtime}, \type {\pdfescapehex}, \type {\pdfescapename}, \type
+ {\pdfescapestring}, \type {\pdffiledump}, \type {\pdffilemoddate}, \type
+ {\pdffilesize}, \type {\pdfforcepagebox}, \type {\pdflastmatch}, \type
+ {\pdfmatch}, \type {\pdfmdfivesum}, \type {\pdfmovechars}, \type
+ {\pdfoptionalwaysusepdfpagebox}, \type {\pdfoptionpdfinclusionerrorlevel},
+ \type {\pdfresettimer}, \type {\pdfshellescape}, \type {\pdfstrcmp} and \type
+ {\pdfunescapehex}
+ \par \stop
+\stopitem
+
+\startitem
+ The version related primitives \type {\pdftexbanner}, \type {\pdftexversion}
+ and \type {\pdftexrevision} are no longer present as there is no longer a
+ relationship with \PDFTEX\ development.
+\stopitem
+
+\startitem
+ The experimental snapper mechanism has been removed and therefore also the
+ primitives:
+
+ \start \raggedright
+ \type {\pdfignoreddimen}, \type {\pdffirstlineheight}, \type
+ {\pdfeachlineheight}, \type {\pdfeachlinedepth} and \type
+ {\pdflastlinedepth}
+ \par \stop
+\stopitem
+
+\startitem
+ The experimental primitives \type {\primitive}, \type {\ifprimitive}, \type
+ {\ifabsnum} and \type {\ifabsdim} are promoted to core primitives. The \type
+ {\pdf*} prefixed originals are not available.
+\stopitem
+
+\startitem
+ The \PNG\ transparency fix from 1.40.6 is not applied as high|-|level support
+ is pending. Because \LUATEX\ has a different subsystem for managing images,
+ more diversion from its ancestor happened in the meantime.
+\stopitem
+
+\startitem
+ Two extra token lists are provides, \type {\pdfxformresources} and \type
+ {\pdfxformattr}, as an alternative to \type {\pdfxform} keywords.
+\stopitem
+
+\startitem
+ The current version of \LUATEX\ no longer replaces and|/|or merges fonts in
+ embedded \PDF\ files with fonts of the enveloping \PDF\ document. This
+ regression may be temporary, depending on how the rewritten font backend will
+ look like.
+\stopitem
+
+\startitem
+ The primitives \type {\pdfpagewidth} and \type {\pdfpageheight} have been removed
+ because \type {\pagewidth} and \type {\pageheight} have that purpose.
+\stopitem
+
+\startitem
+ The primitives \type {\pdfnormaldeviate}, \type {\pdfuniformdeviate}, \type
+ {\pdfsetrandomseed} and \type {\pdfrandomseed} have been promoted to core
+ primitives without \type {pdf} prefix so the original commands are no longer
+ recognized.
+\stopitem
+
+\startitem
+ The primitives \type {\ifincsname}, \type {\expanded} and \type {\quitvmode}
+ are now core primitives.
+\stopitem
+
+\startitem
+ As the hz and protrusion mechanism are part of the core the related
+ primitives \type {\lpcode}, \type {\rpcode}, \type {\efcode}, \type
+ {\leftmarginkern}, \type {\rightmarginkern} are promoted to core primitives. The
+ two commands \type {\protrudechars} and \type {\adjustspacing} replace their
+ prefixed with \type {\pdf} originals.
+\stopitem
+
+\startitem
+ The hz optimization code has been partially redone so that we no longer need
+ to create extra font instances. The front- and backend have been decoupled
+ and more efficient (\PDF) code is generated.
+\stopitem
+
+\startitem
+ When \type {\adjustspacing} has value~2, hz optimization will be applied to
+ glyphs and kerns. When the value is~3, only glyphs will be treated. A value
+ smaller than~2 disables this feature.
+\stopitem
+
+\startitem
+ The \type {\tagcode} primitive is promoted to core primitive.
+\stopitem
+
+\startitem
+ The \type {\letterspacefont} feature is now part of the core but will not be
+ changed (improved). We just provide it for legacy use.
+\stopitem
+
+\startitem
+ The \type {\pdfnoligatures} primitive is now \type {\ignoreligaturesinfont}.
+\stopitem
+
+\startitem
+ The \type {\pdfcopyfont} primitive is now \type {\copyfont}.
+\stopitem
+
+\startitem
+ The \type {\pdffontexpand} primitive is now \type {\expandglyphsinfont}.
+\stopitem
+
+\startitem
+ Because position tracking is also available in \DVI\ mode the \type
+ {\savepos}, \type {\lastxpos} and \type {\lastypos} commands now replace
+ their \type {pdf} prefixed originals.
+\stopitem
+
+\startitem
+ The introspective primitives \type {\pdflastximagecolordepth} and \type
+ {\pdfximagebbox} have been removed. One can use external applications to
+ determine these properties or use the built|-|in \type {img} library.
+\stopitem
+
+\startitem
+ The initializers \type {\pdfoutput} has been replaced by \type {\outputmode} and
+ \type {\pdfdraftmode} is now \type {\draftmode}.
+\stopitem
+
+\startitem
+ The pixel multiplier dimension \type {\pdfpxdimen} lots its prefix and is now calles
+ \type {\pxdimen}.
+\stopitem
+
+\startitem
+ An extra \type {\pdfimageaddfilename} option has been added that can be used to block
+ writing the filename to the \PDF\ file.
+\stopitem
+
+\startitem
+ The primitive \type {\pdftracingfonts} is now \type {\tracingfonts} as it
+ doesn't relate to the backend.
+\stopitem
+
+\startitem
+ The experimental primitive \type {\pdfinsertht} is kept as \type {\insertht}.
+\stopitem
+
+\startitem
+ The promotion of primitives to core primitives as well as the separation of
+ font- and backend means that the initialization namespace \type {pdftex} is
+ gone.
+\stopitem
+
+\stopitemize
+
+One change involves the so called xforms and ximages. In \PDFTEX\ these are
+implemented as so called whatsits. But contrary to other whatsits they have
+dimensions that need to be taken into account when for instance calculating
+optimal line breaks. In \LUATEX\ these are now promoted to normal nodes, which
+simplifies code that needs those dimensions.
+
+Another reason for promotion is that these are useful concepts. Backends can
+provide the ability to use content that has been rendered in several places,
+and images are also common. For that reason we also changed the names:
+
+\starttabulate[|l|l|]
+\NC \bf new name \NC \bf old name \NC \NR
+\NC \type {\saveboxresource} \NC \type {\pdfxform} \NC \NR
+\NC \type {\saveimageresource} \NC \type {\pdfximage} \NC \NR
+\NC \type {\useboxresource} \NC \type {\pdfrefxform} \NC \NR
+\NC \type {\useimageresource} \NC \type {\pdfrefximage} \NC \NR
+\NC \type {\lastsavedboxresourceindex} \NC \type {\pdflastxform} \NC \NR
+\NC \type {\lastsavedimageresourceindex} \NC \type {\pdflastximage} \NC \NR
+\NC \type {\lastsavedimageresourcepages} \NC \type {\pdflastximagepages} \NC \NR
+\stoptabulate
+
+There are a few \type {\pdffeedback} features that relate to this but these are
+typical backend specific ones. The index that gets returned is to be considered
+as \quote {just a number} and although it still has the same meaning (object
+related) as before, you should not depend on that.
+
+The protrusion detection mechanism is enhanced a bit to enable a bit more complex
+situations. When protrusion characters are identified some nodes are skipped:
+
+\startitemize[packed]
+\startitem zero glue \stopitem
+\startitem penalties \stopitem
+\startitem empty discretionaries \stopitem
+\startitem normal zero kerns \stopitem
+\startitem rules with zero dimensions \stopitem
+\startitem math nodes with a surround of zero \stopitem
+\startitem dir nodes \stopitem
+\startitem empty horizontal lists \stopitem
+\startitem local par nodes \stopitem
+\startitem inserts, marks and adjusts \stopitem
+\startitem boundaries \stopitem
+\startitem whatsits \stopitem
+\stopitemize
+
+Because this can not be enough, you can also use a protrusion boundary node to
+make the next node being ignored. When the value is~1 or~3, the next node will be
+ignored in the test when locating a left boundary condition. When the value is~2
+or~3, the previous node will be ignored when locating a right boundary condition
+(the search goes from right to left). This permits protrusion combined with for
+instance content moved into the margin:
+
+\starttyping
+\protrusionboundary1\llap{!\quad}«Who needs protrusion?»
+\stoptyping
+
+\stopsubsection
+
+\startsubsection[title=Changes from \ALEPH\ RC4]
+
+Because we wanted proper directional typesetting the \ALEPH\ mechanisms looked
+most attractive. These are rather close to the ones provided by \OMEGA, so what
+we say next applies to both these programs.
+
+\startitemize
+
+\startitem
+ The extended 16-bit math primitives (\type {\omathcode} etc.) have been
+ removed.
+\stopitem
+
+\startitem
+ The \OCP\ processing has been removed completely and as a consequence, the
+ following primitives have been removed:
+
+ \start \raggedright
+ \type {\ocp}, \type {\externalocp}, \type {\ocplist}, \type {\pushocplist},
+ \type {\popocplist}, \type {\clearocplists}, \type {\addbeforeocplist}, \type
+ {\addafterocplist}, \type {\removebeforeocplist}, \type {\removeafterocplist}
+ and \type {\ocptracelevel}
+ \par \stop
+\stopitem
+
+\startitem
+ \LUATEX\ only understands 4~of the 16~direction specifiers of \ALEPH: \type
+ {TLT} (latin), \type {TRT} (arabic), \type {RTT} (cjk), \type {LTL}
+ (mongolian). All other direction specifiers generate an error.
+\stopitem
+
+\startitem
+ The input translations from \ALEPH\ are not implemented, the related
+ primitives are not available:
+
+ \start \raggedright
+ \type {\DefaultInputMode}, \type {\noDefaultInputMode}, \type {\noInputMode},
+ \type {\InputMode}, \type {\DefaultOutputMode}, \type {\noDefaultOutputMode},
+ \type {\noOutputMode}, \type {\OutputMode}, \type {\DefaultInputTranslation},
+ \type {\noDefaultInputTranslation}, \type {\noInputTranslation}, \type
+ {\InputTranslation}, \type {\DefaultOutputTranslation}, \type
+ {\noDefaultOutputTranslation}, \type {\noOutputTranslation} and \type
+ {\OutputTranslation}
+ \par \stop
+\stopitem
+
+\startitem
+ Several bugs have been fixed an confusing implementation details have been sorted
+ out.
+\stopitem
+
+\startitem
+ The scanner for direction specifications now allows an optional space after
+ the direction is completely parsed.
+\stopitem
+
+\startitem
+ The \type {^^} notation has been extended: after \type {^^^^} four hexadecimal
+ characters are expected and after \type {^^^^^^} six hexadecimal characters
+ have to be given. The original \TEX\ interpretation is still valid for the
+ \type {^^} case but the four and six variants do no backtracking, i.e.\ when
+ they are not followed by the right number of hexadecimal digits they issue an
+ error message. Because \type{^^^} is a normal \TEX\ case, we don't support the
+ odd number of \type {^^^^^} either.
+\stopitem
+
+\startitem
+ Glues {\it immediately after} direction change commands are not legal
+ breakpoints.
+\stopitem
+
+\startitem
+ Several mechanisms that need to be right|-|to|-|left aware have been
+ improved. For instance placement of formula numbers.
+\stopitem
+
+\startitem
+ The page dimension related primitives \type {\pagewidth} and \type
+ {\pageheight} have been promoted to core primitives. The \type {\hoffset} and
+ \type {\voffset} primitives have been fixed.
+\stopitem
+
+\startitem
+ The primitives \type {\charwd}, \type {\charht}, \type {\chardp} and \type
+ {\charit} have been removed as we have the \ETEX\ variants \type
+ {\fontchar*}.
+\stopitem
+
+\startitem
+ The two dimension registers \type {\pagerightoffset} and \type
+ {\pagebottomoffset} are now core primitives.
+\stopitem
+
+\startitem
+ The direction related primitives \type {\pagedir}, \type {\bodydir}, \type
+ {\pardir}, \type {\textdir}, \type {\mathdir} and \type {\boxdir} are now
+ core primitives.
+\stopitem
+
+\startitem
+ The promotion of primitives to core primitives as well as the removed of all
+ others means that the initialization namespace \type {aleph} is gone.
+\stopitem
+
+\stopitemize
+
+The above let's itself summarize as: we took the 32 bit aspects and much of the
+directional mechanisms.
+
+\stopsubsection
+
+\startsubsection[title=Changes from standard \WEBC]
+
+The compilation framework is \WEBC\ and we keep using that but without the
+\PASCAL\ to \CCODE\ step. This framework also provides some common features that
+deal with reading bytes from files and locating files in \TDS. This is what we do
+different:
+
+\startitemize
+
+\startitem
+ There is no mltex support.
+\stopitem
+
+\startitem
+ There is no enctex support.
+\stopitem
+
+\startitem
+ The following encoding related command line switches are silently ignored,
+ even in non|-|\LUA\ mode: \type {-8bit}, \type {-translate-file}, \type
+ {-mltex}, \type {-enc} and \type {-etex}.
+\stopitem
+
+\startitem
+ The \type {\openout} whatsits are not written to the log file.
+\stopitem
+
+\startitem
+ Some of the so|-|called \WEBC\ extensions are hard to set up in non|-|\KPSE\
+ mode because \type {texmf.cnf} is not read: \type {shell-escape} is off (but
+ that is not a problem because of \LUA's \type {os.execute}), and the paranoia
+ checks on \type {openin} and \type {openout} do not happen. However, it is
+ easy for a \LUA\ script to do this itself by overloading \type {io.open}.
+\stopitem
+
+\startitem
+ The \quote{E} option does not do anything useful.
+\stopitem
+
+\stopitemize
+
+\stopsubsection
+
+\startsubsection[reference=backendprimitives,title=The backend primitives \type {\pdf*}]
+
+In a previous section we mentioned that some \PDFTEX\ primitives were removed and
+others promoted to core \LUATEX\ primitives. That is only part of the story. In
+order to separate the backend specific primitives in de code these commands are
+now replaced by only a few. In traditional \TEX\ we only had the \DVI\ backend
+but now we have two: \DVI\ and \PDF. Additional functionality is implemented as
+\quote {extensions} in \TEX speak. By separating more strickly we are able to
+keep the core (fontend) clean and stable. If for some reason an extra backend
+option is needed, it can be implemented without touching the core. The three
+\PDF\ backend related primitives are
+
+\starttyping
+\pdfextension command [specification]
+\pdfvariable name
+\pdffeedback name
+\stoptyping
+
+An extension triggers further parsing, depending on the command given. A variable is
+a (kind of) register and can be read and written, while a feedback is reporting
+something (as it comes from the backend it's normally a sequence of tokens).
+
+In order for \LUATEX\ to be more than just \TEX\ you need to enable primitives. That
+has already be the case right from the start. If you want the traditional \PDFTEX\
+primitives (for as far their functionality is still around) you now can do this:
+
+\starttyping
+\protected\def\pdfliteral {\pdfextension literal}
+\protected\def\pdfcolorstack {\pdfextension colorstack}
+\protected\def\pdfsetmatrix {\pdfextension setmatrix}
+\protected\def\pdfsave {\pdfextension save\relax}
+\protected\def\pdfrestore {\pdfextension restore\relax}
+\protected\def\pdfobj {\pdfextension obj }
+\protected\def\pdfrefobj {\pdfextension refobj }
+\protected\def\pdfannot {\pdfextension annot }
+\protected\def\pdfstartlink {\pdfextension startlink }
+\protected\def\pdfendlink {\pdfextension endlink\relax}
+\protected\def\pdfoutline {\pdfextension outline }
+\protected\def\pdfdest {\pdfextension dest }
+\protected\def\pdfthread {\pdfextension thread }
+\protected\def\pdfstartthread {\pdfextension startthread }
+\protected\def\pdfendthread {\pdfextension endthread\relax}
+\protected\def\pdfinfo {\pdfextension info }
+\protected\def\pdfcatalog {\pdfextension catalog }
+\protected\def\pdfnames {\pdfextension names }
+\protected\def\pdfincludechars {\pdfextension includechars }
+\protected\def\pdffontattr {\pdfextension fontattr }
+\protected\def\pdfmapfile {\pdfextension mapfile }
+\protected\def\pdfmapline {\pdfextension mapline }
+\protected\def\pdftrailer {\pdfextension trailer }
+\protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+\stoptyping
+
+The introspective primitives can be defined as:
+
+\starttyping
+\def\pdftexversion {\numexpr\pdffeedback version\relax}
+\def\pdftexrevision {\pdffeedback revision}
+\def\pdflastlink {\numexpr\pdffeedback lastlink\relax}
+\def\pdfretval {\numexpr\pdffeedback retval\relax}
+\def\pdflastobj {\numexpr\pdffeedback lastobj\relax}
+\def\pdflastannot {\numexpr\pdffeedback lastannot\relax}
+\def\pdfxformname {\numexpr\pdffeedback xformname\relax}
+\def\pdfcreationdate {\pdffeedback creationdate}
+\def\pdffontname {\numexpr\pdffeedback fontname\relax}
+\def\pdffontobjnum {\numexpr\pdffeedback fontobjnum\relax}
+\def\pdffontsize {\dimexpr\pdffeedback fontsize\relax}
+\def\pdfpageref {\numexpr\pdffeedback pageref\relax}
+\def\pdfcolorstackinit {\pdffeedback colorstackinit}
+\stoptyping
+
+The configuration related registers have become:
+
+\starttyping
+\edef\pdfcompresslevel {\pdfvariable compresslevel}
+\edef\pdfobjcompresslevel {\pdfvariable objcompresslevel}
+\edef\pdfdecimaldigits {\pdfvariable decimaldigits}
+\edef\pdfgamma {\pdfvariable gamma}
+\edef\pdfimageresolution {\pdfvariable imageresolution}
+\edef\pdfimageapplygamma {\pdfvariable imageapplygamma}
+\edef\pdfimagegamma {\pdfvariable imagegamma}
+\edef\pdfimagehicolor {\pdfvariable imagehicolor}
+\edef\pdfimageaddfilename {\pdfvariable imageaddfilename}
+\edef\pdfpkresolution {\pdfvariable pkresolution}
+\edef\pdfpkfixeddpi {\pdfvariable pkfixeddpi}
+\edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts}
+\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
+\edef\pdfignoreunknownimages {\pdfvariable ignoreunknownimages}
+\edef\pdfgentounicode {\pdfvariable gentounicode}
+\edef\pdfpagebox {\pdfvariable pagebox}
+\edef\pdfminorversion {\pdfvariable minorversion}
+\edef\pdfuniqueresname {\pdfvariable uniqueresname}
+
+\edef\pdfhorigin {\pdfvariable horigin}
+\edef\pdfvorigin {\pdfvariable vorigin}
+\edef\pdflinkmargin {\pdfvariable linkmargin}
+\edef\pdfdestmargin {\pdfvariable destmargin}
+\edef\pdfthreadmargin {\pdfvariable threadmargin}
+\edef\pdfxformmargin {\pdfvariable xformmargin}
+
+\edef\pdfpagesattr {\pdfvariable pagesattr}
+\edef\pdfpageattr {\pdfvariable pageattr}
+\edef\pdfpageresources {\pdfvariable pageresources}
+\edef\pdfxformattr {\pdfvariable xformattr}
+\edef\pdfxformresources {\pdfvariable xformresources}
+\edef\pdfpkmode {\pdfvariable pkmode}
+
+\edef\pdfsuppressoptionalinfo {\pdfvariable suppressoptionalinfo }
+\edef\pdftrailerid {\pdfvariable trailerid }
+\stoptyping
+
+The variables are internal ones, so they are anonymous. When you ask for the
+meaning of a few previously defined ones:
+
+\starttyping
+\meaning\pdfhorigin
+\meaning\pdfcompresslevel
+\meaning\pdfpageattr
+\stoptyping
+
+you will get:
+
+\starttyping
+macro:->[internal backend dimension]
+macro:->[internal backend integer]
+macro:->[internal backend tokenlist]
+\stoptyping
+
+The \type {\edef} can also be an \type {\def} but it's a bit more efficient
+to expand the lookup related register beforehand. After that you can adapt
+the defaults; these are:
+
+\starttyping
+\pdfcompresslevel 9
+\pdfobjcompresslevel 1 % used: (0,9)
+\pdfdecimaldigits 4 % used: (3,6)
+\pdfgamma 1000
+\pdfimageresolution 71
+\pdfimageapplygamma 0
+\pdfimagegamma 2200
+\pdfimagehicolor 1
+\pdfimageaddfilename 1
+\pdfpkresolution 72
+\pdfpkfixeddpi 0
+\pdfinclusioncopyfonts 0
+\pdfinclusionerrorlevel 0
+\pdfignoreunknownimages 0
+\pdfgentounicode 0
+\pdfpagebox 0
+\pdfminorversion 4
+\pdfuniqueresname 0
+
+\pdfhorigin 1in
+\pdfvorigin 1in
+\pdflinkmargin 0pt
+\pdfdestmargin 0pt
+\pdfthreadmargin 0pt
+\pdfxformmargin 0pt
+\stoptyping
+
+If you also want some backward compatibility, you can add:
+
+\starttyping
+\let\pdfpagewidth \pagewidth
+\let\pdfpageheight \pageheight
+
+\let\pdfadjustspacing \adjustspacing
+\let\pdfprotrudechars \protrudechars
+\let\pdfnoligatures \ignoreligaturesinfont
+\let\pdffontexpand \expandglyphsinfont
+\let\pdfcopyfont \copyfont
+
+\let\pdfxform \saveboxresource
+\let\pdflastxform \lastsavedboxresourceindex
+\let\pdfrefxform \useboxresource
+
+\let\pdfximage \saveimageresource
+\let\pdflastximage \lastsavedimageresourceindex
+\let\pdflastximagepages\lastsavedimageresourcepages
+\let\pdfrefximage \useimageresource
+
+\let\pdfsavepos \savepos
+\let\pdflastxpos \lastxpos
+\let\pdflastypos \lastypos
+
+\let\pdfoutput \outputmode
+\let\pdfdraftmode \draftmode
+
+\let\pdfpxdimen \pxdimen
+
+\let\pdfinsertht \insertht
+
+\let\pdfnormaldeviate \normaldeviate
+\let\pdfuniformdeviate \uniformdeviate
+\let\pdfsetrandomseed \setrandomseed
+\let\pdfrandomseed \randomseed
+
+\let\pdfprimitive \primitive
+\let\ifpdfprimitive \ifprimitive
+
+\let\ifpdfabsnum \ifabsnum
+\let\ifpdfabsdim \ifabsdim
+\stoptyping
+
+And even:
+
+\starttyping
+\newdimen\pdfeachlineheight
+\newdimen\pdfeachlinedepth
+\newdimen\pdflastlinedepth
+\newdimen\pdffirstlineheight
+\newdimen\pdfignoreddimen
+\stoptyping
+
+The backend is derived from \PDFTEX\ so the same syntax applies. However, the
+\type {outline} command accepts a \type {objnum} followed by a number. No
+checking takes place so when this is used it had better be a valid (flushed)
+object.
+
+In order to be (more or less) compatible with \PDFTEX\ we also support the
+option to suppress some info:
+
+\starttyping
+\pdfvariable suppressoptionalinfo \numexpr
+ 0
+ + 1 % PTEX.FullBanner
+ + 2 % PTEX.FileName
+ + 4 % PTEX.PageNumber
+ + 8 % PTEX.InfoDict
+ + 16 % Creator
+ + 32 % CreationDate
+ + 64 % ModDate
+ + 128 % Producer
+ + 256 % Trapped
+ + 512 % ID
+\relax
+\stoptyping
+
+In addition you can overload the trailer id, but we don't do any checking on
+validity, so you have to pass a valid array. The following is like the ones
+normally generated by the engine:
+
+\starttyping
+\pdfvariable trailerid {[
+ <FA052949448907805BA83C1E78896398>
+ <FA052949448907805BA83C1E78896398>
+]}
+\stoptyping
+
+So, you even need to include the brackets!
+
+\stopsubsection
+
+\stopsection
+
+\startsection[title=Implementation notes]
+
+\startsubsection[title=Memory allocation]
+
+The single internal memory heap that traditional \TEX\ used for tokens and nodes
+is split into two separate arrays. Each of these will grow dynamically when
+needed.
+
+The \type {texmf.cnf} settings related to main memory are no longer used (these
+are: \type {main_memory}, \type {mem_bot}, \type {extra_mem_top} and \type
+{extra_mem_bot}). \quote {Out of main memory} errors can still occur, but the
+limiting factor is now the amount of RAM in your system, not a predefined limit.
+
+Also, the memory (de)allocation routines for nodes are completely rewritten. The
+relevant code now lives in the C file \type {texnode.c}, and basically uses a
+dozen or so \quote {avail} lists instead of a doubly|-|linked model. An extra
+function layer is added so that the code can ask for nodes by type instead of
+directly requisitioning a certain amount of memory words.
+
+Because of the split into two arrays and the resulting differences in the data
+structures, some of the macros have been duplicated. For instance, there are now
+\type {vlink} and \type {vinfo} as well as \type {token_link} and \type
+{token_info}. All access to the variable memory array is now hidden behind a
+macro called \type {vmem}. We mention this because using the \TEX book as
+reference is still quite valid but not for memory related details. Another
+significate detail is that we have double linked node lists and that some nodes
+carry more data.
+
+The implementation of the growth of two arrays (via reallocation) introduces a
+potential pitfall: the memory arrays should never be used as the left hand side
+of a statement that can modify the array in question. Details like this are
+of no concern to users.
+
+The input line buffer and pool size are now also reallocated when needed, and the
+\type {texmf.cnf} settings \type {buf_size} and \type {pool_size} are silently
+ignored.
+
+\stopsubsection
+
+\startsubsection[title=Sparse arrays]
+
+The \type {\mathcode}, \type {\delcode}, \type {\catcode}, \type {\sfcode}, \type
+{\lccode} and \type {\uccode} (and the new \type {\hjcode}) tables are now sparse
+arrays that are implemented in~\CCODE. They are no longer part of the \TEX\
+\quote {equivalence table} and because each had 1.1 million entries with a few
+memory words each, this makes a major difference in memory usage.
+
+The \type {\catcode}, \type {\sfcode}, \type {\lccode}, \type {\uccode} and \type
+{\hjcode} assignments do not yet show up when using the \ETEX\ tracing routines
+\type {\tracingassigns} and \type {\tracingrestores}.
+
+A side|-|effect of the current implementation is that \type {\global} is now more
+expensive in terms of processing than non|-|global assignments.
+
+The glyph ids within a font are also managed by means of a sparse array as glyph
+ids can go up to index $2^{21}-1$.
+
+\stopsubsection
+
+\startsubsection[title=Simple single-character csnames]
+
+Single|-|character commands are no longer treated specially in the internals,
+they are stored in the hash just like the multiletter csnames.
+
+The code that displays control sequences explicitly checks if the length is one
+when it has to decide whether or not to add a trailing space.
+
+Active characters are internally implemented as a special type of multi|-|letter
+control sequences that uses a prefix that is otherwise impossible to obtain.
+
+\stopsubsection
+
+\startsubsection[title=Compressed format]
+
+The format is passed through \type {zlib}, allowing it to shrink to roughly half
+of the size it would have had in uncompressed form. This takes a bit more \CPU\
+cycles but much less disk \IO, so it should still be faster.
+
+\stopsubsection
+
+\startsubsection[title=Binary file reading]
+
+All of the internal code is changed in such a way that if one of the \type
+{read_xxx_file} callbacks is not set, then the file is read by a \CCODE\ function
+using basically the same convention as the callback: a single read into a buffer
+big enough to hold the entire file contents. While this uses more memory than the
+previous code (that mostly used \type {getc} calls), it can be quite a bit faster
+(depending on your \IO\ subsystem).
+
+\stopsubsection
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-nodes.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
new file mode 100644
index 00000000000..372aca1e58b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-nodes.tex
@@ -0,0 +1,1804 @@
+% language=uk
+
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-nodes
+
+\startchapter[reference=nodes,title={Nodes}]
+
+\section{\LUA\ node representation}
+
+\TEX's nodes are represented in \LUA\ as userdata object with a variable set of
+fields. In the following syntax tables, such the type of such a userdata object
+is represented as \syntax {<node>}.
+
+The current return value of \type {node.types()} is:
+\startluacode
+ for id, name in table.sortedhash(node.types()) do
+ context.type(name)
+ context(" (%s), ",id)
+ end
+ context.removeunwantedspaces()
+ context.removepunctuation()
+\stopluacode
+. % period
+
+The \type {\lastnodetype} primitive is \ETEX\ compliant. The valid range is still
+$[-1,15]$ and glyph nodes (formerly known as char nodes) have number~0 while
+ligature nodes are mapped to~7. That way macro packages can use the same symbolic
+names as in traditional \ETEX. Keep in mind that these \ETEX\ node numbers are
+different from the real internal ones and that there are more \ETEX\ node types
+than~15.
+
+You can ask for a list of fields with the \type {node.fields} (which takes an id)
+and for valid subtypes with \type {node.subtypes} (which takes a string because
+eventually we might support more used enumerations).
+
+\subsection{Attributes}
+
+The newly introduced attribute registers are non|-|trivial, because the value
+that is attached to a node is essentially a sparse array of key|-|value pairs. It
+is generally easiest to deal with attribute lists and attributes by using the
+dedicated functions in the \type {node} library, but for completeness, here is
+the low|-|level interface.
+
+\subsubsection{attribute_list nodes}
+
+An \type {attribute_list} item is used as a head pointer for a list of attribute
+items. It has only one user-visible field:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC pointer to the first attribute \NC \NR
+\stoptabulate
+
+\subsubsection{attribute nodes}
+
+A normal node's attribute field will point to an item of type \type
+{attribute_list}, and the \type {next} field in that item will point to the first
+defined \quote {attribute} item, whose \type {next} will point to the second
+\quote {attribute} item, etc.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC pointer to the next attribute \NC \NR
+\NC number \NC number \NC the attribute type id \NC \NR
+\NC value \NC number \NC the attribute value \NC \NR
+\stoptabulate
+
+As mentioned it's better to use the official helpers rather than edit these
+fields directly. For instance the \type {prev} field is used for other purposes
+and there is no double linked list.
+
+\subsection{Main text nodes}
+
+These are the nodes that comprise actual typesetting commands. A few fields are
+present in all nodes regardless of their type, these are:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC next \NC node \NC the next node in a list, or nil \NC \NR
+\NC id \NC number \NC the node's type (\type {id}) number \NC \NR
+\NC subtype \NC number \NC the node \type {subtype} identifier \NC \NR
+\stoptabulate
+
+The \type {subtype} is sometimes just a stub entry. Not all nodes actually use
+the \type {subtype}, but this way you can be sure that all nodes accept it as a
+valid field name, and that is often handy in node list traversal. In the
+following tables \type {next} and \type {id} are not explicitly mentioned.
+
+Besides these three fields, almost all nodes also have an \type {attr} field, and
+there is a also a field called \type {prev}. That last field is always present,
+but only initialized on explicit request: when the function \type {node.slide()}
+is called, it will set up the \type {prev} fields to be a backwards pointer in
+the argument node list. By now most of \TEX's node processing makes sure that the
+\type {prev} nodes are valid but there can be exceptions, especially when the
+internal magic uses a leading \type {temp} nodes to temporarily store a state.
+
+\subsubsection{hlist nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{list} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width of the box \NC \NR
+\NC height \NC number \NC the height of the box \NC \NR
+\NC depth \NC number \NC the depth of the box \NC \NR
+\NC shift \NC number \NC a displacement perpendicular to the character progression direction \NC \NR
+\NC glue_order \NC number \NC a number in the range $[0,4]$, indicating the glue order \NC \NR
+\NC glue_set \NC number \NC the calculated glue ratio \NC \NR
+\NC glue_sign \NC number \NC 0 = \type {normal}, 1 = \type {stretching}, 2 = \type {shrinking} \NC \NR
+\NC head/list \NC node \NC the first node of the body of this list \NC \NR
+\NC dir \NC string \NC the direction of this box, see~\in[dirnodes] \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may result.
+
+Note: the field name \type {head} and \type {list} are both valid. Sometimes it
+makes more sense to refer to a list by \type {head}, sometimes \type {list} makes
+more sense.
+
+\subsubsection{vlist nodes}
+
+This node is similar to \type {hlist}, except that \quote {shift} is a displacement
+perpendicular to the line progression direction, and \quote {subtype} only has
+the values 0, 4, and~5.
+
+\subsubsection{rule nodes}
+
+Contrary to traditional \TEX, \LUATEX\ has more subtypes because we also use
+rules to store reuseable objects and images. User nodes are invisible and can be
+intercepted by a callback.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{rule} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width of the rule where the special value $-1073741824$ is used for \quote {running} glue dimensions \NC \NR
+\NC height \NC number \NC the height of the rule (can be negative) \NC \NR
+\NC depth \NC number \NC the depth of the rule (can be negative) \NC \NR
+\NC dir \NC string \NC the direction of this rule, see~\in[dirnodes] \NC \NR
+\NC index \NC number \NC an optional index that can be referred to \NC \NR
+\stoptabulate
+
+\subsubsection{ins nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC the insertion class \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC cost \NC number \NC the penalty associated with this insert \NC \NR
+\NC height \NC number \NC height of the insert \NC \NR
+\NC depth \NC number \NC depth of the insert \NC \NR
+\NC head/list \NC node \NC the first node of the body of this insert \NC \NR
+\stoptabulate
+
+There is a set of extra fields that concern the associated glue: \type {width},
+\type {stretch}, \type {stretch_order}, \type {shrink} and \type {shrink_order}.
+These are all numbers.
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result. You can use
+\type {list} instead (often in functions you want to use local variable swith similar
+names and both names are equally sensible).
+
+\subsubsection{mark nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC unused \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC class \NC number \NC the mark class \NC \NR
+\NC mark \NC table \NC a table representing a token list \NC \NR
+\stoptabulate
+
+\subsubsection{adjust nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{adjust} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC head/list \NC node \NC adjusted material \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result.
+
+\subsubsection{disc nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{disc} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC pre \NC node \NC pointer to the pre|-|break text \NC \NR
+\NC post \NC node \NC pointer to the post|-|break text \NC \NR
+\NC replace \NC node \NC pointer to the no|-|break text \NC \NR
+\NC penalty \NC number \NC the penalty associated with the break, normally \type {\hyphenpenalty} or \type {\exhyphenpenalty} \NC \NR
+\stoptabulate
+
+The subtype numbers~4 and~5 belong to the \quote {of-f-ice} explanation given
+elsewhere.
+
+\subsubsection{math nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{math} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC surround \NC number \NC width of the \type {\mathsurround} kern \NC \NR
+\stoptabulate
+
+There is a set of extra fields that concern the associated glue: \type {width},
+\type {stretch}, \type {stretch_order}, \type {shrink} and \type {shrink_order}.
+These are all numbers.
+
+\subsubsection{glue nodes}
+
+Skips are about the only type of data objects in traditional \TEX\ that are not a
+simple value. The structure that represents the glue components of a skip is
+called a \type {glue_spec}, and it has the following accessible fields:
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf key \NC \bf type \NC \bf explanation \NC \NR
+\NC width \NC number \NC the horizontal or vertical displacement \NC \NR
+\NC stretch \NC number \NC extra (positive) displacement or stretch amount \NC \NR
+\NC stretch_order \NC number \NC factor applied to stretch amount \NC \NR
+\NC shrink \NC number \NC extra (negative) displacement or shrink amount\NC \NR
+\NC shrink_order \NC number \NC factor applied to shrink amount \NC \NR
+\stoptabulate
+
+The effective width of some glue subtypes depends on the stretch or shrink needed
+to make the encapsulating box fit its dimensions. For instance, in a paragraph
+lines normally have glue representing spaces and these stretch of shrink to make
+the content fit in the available space. The \type {effective_glue} function that
+takes a glue node and a parent (hlist or vlist) returns the effective width of
+that glue item.
+
+A gluespec node is a special kind of node that is used for storing a set of glue
+values in registers. Originally they were also used to store properties of glue
+nodes (using a system of reference counts) but we now keep these properties in
+the glue nodes themselves, which gives a cleaner interface to \LUA.
+
+The indirect spec approach was in fact an optimization in the original \TEX\
+code. First of all it can save quite some memory because all these spaces that
+become glue now share the same specification (only the reference count is
+incremented), and zero testing is also a bit faster because only the pointer has
+to be checked (this is no longer true for engines that implement for instance
+protrusion where we really need to ensure that zero is zero when we test for
+bounds). Another side effect is that glue specifications are read|-|only, so in
+the end copies need to be made when they are used from \LUA\ (each assignment to
+a field can result in a new copy). So in the end the advantages of sharing are
+not that high (and nowadays memory is less an issue, also given that a glue node
+is only a few memory words larger than a spec).
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{glue} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC leader \NC node \NC pointer to a box or rule for leaders \NC \NR
+\stoptabulate
+
+In addition there are the \type {width}, \type {stretch} \type {stretch_order},
+\type {shrink}, and \type {shrink_order} fields. Note that we use the key \type
+{width} in both horizontal and vertical glue. This suits the \TEX\ internals well
+so we decided to stick to that naming.
+
+A regular word space also results in a \type {spaceskip} subtype (this used to be
+a \type {userskip} with subtype zero).
+
+\subsubsection{kern nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{kern} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC kern \NC number \NC fixed horizontal or vertical advance \NC \NR
+\stoptabulate
+
+\subsubsection{penalty nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC not used \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC penalty \NC number \NC the penalty value \NC \NR
+\stoptabulate
+
+\subsubsection[glyphnodes]{glyph nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \rmbf type \NC \rmbf explanation \NC \NR
+\NC subtype \NC number \NC bitfield \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC char \NC number \NC the chatacter index in the font \NC \NR
+\NC font \NC number \NC the font identifier \NC \NR
+\NC lang \NC number \NC the language identifier \NC \NR
+\NC left \NC number \NC the frozen \type {\lefthyphenmnin} value \NC \NR
+\NC right \NC number \NC the frozen \type {\righthyphenmnin} value \NC \NR
+\NC uchyph \NC boolean \NC the frozen \type {\uchyph} value \NC \NR
+\NC components \NC node \NC pointer to ligature components \NC \NR
+\NC xoffset \NC number \NC a virtual displacement in horizontal direction \NC \NR
+\NC yoffset \NC number \NC a virtual displacement in vertical direction \NC \NR
+\NC xadvance \NC number \NC an additional advance after the glyph (experimental) \NC \NR
+\NC width \NC number \NC the (original) width of the character \NC \NR
+\NC height \NC number \NC the (original) height of the character\NC \NR
+\NC depth \NC number \NC the (original) depth of the character\NC \NR
+\NC expansion_factor \NC number \NC the to be applied expansion_factor \NC \NR
+\stoptabulate
+
+The \type {width}, \type {height} and \type {depth} values are read|-|only. The
+\type {expansion_factor} is assigned in the parbuilder and used in the backend.
+
+A warning: never assign a node list to the components field unless you are sure
+its internal link structure is correct, otherwise an error may be result. Valid
+bits for the \type {subtype} field are:
+
+\starttabulate[|c|l|]
+\NC \rmbf bit \NC \bf meaning \NC \NR
+\NC 0 \NC character \NC \NR
+\NC 1 \NC ligature \NC \NR
+\NC 2 \NC ghost \NC \NR
+\NC 3 \NC left \NC \NR
+\NC 4 \NC right \NC \NR
+\stoptabulate
+
+See \in {section} [charsandglyphs] for a detailed description of the \type
+{subtype} field.
+
+The \type {expansion_factor} has been introduced as part of the separation
+between font- and backend. It is the result of extensive experiments with a more
+efficient implementation of expansion. Early versions of \LUATEX\ already
+replaced multiple instances of fonts in the backend by scaling but contrary to
+\PDFTEX\ in \LUATEX\ we now also got rid of font copies in the frontend and
+replaced them by expansion factors that travel with glyph nodes. Apart from a
+cleaner approach this is also a step towards a better separation between front-
+and backend.
+
+The \type {is_char} function checks if a node is a glyph node with a subtype still
+less than 256. This function can be used to determine if applying font logic to a
+glyph node makes sense. The value \type {nil} gets returned when the node is not
+a glyph, a character number is returned if the node is still tagged as character
+and \type {false} gets returned otherwise. When nil is returned, the id is also
+returned. The \type {is_glyph} variant doesn't check for a subtype being less
+than 256, so it returns either the character value or nil plus the id. These
+helpers are not always faster than separate calls but they sometimes permit
+making more readable tests.
+
+\subsubsection{boundary nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{boundary} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC value \NC number \NC values 0--255 are reserved \NC \NR
+\stoptabulate
+
+This node relates to the \type {\noboundary}, \type {\boundary}, \type
+{\protrusionboundary} and \type {\wordboundary} primitives.
+
+\subsubsection{local_par nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC pen_inter \NC number \NC local interline penalty (from \type {\localinterlinepenalty}) \NC \NR
+\NC pen_broken \NC number \NC local broken penalty (from \type {\localbrokenpenalty}) \NC \NR
+\NC dir \NC string \NC the direction of this par. see~\in [dirnodes] \NC \NR
+\NC box_left \NC node \NC the \type {\localleftbox} \NC \NR
+\NC box_left_width \NC number \NC width of the \type {\localleftbox} \NC \NR
+\NC box_right \NC node \NC the \type {\localrightbox} \NC \NR
+\NC box_right_width \NC number \NC width of the \type {\localrightbox} \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the \type {box_left} or \type {box_right}
+field unless you are sure its internal link structure is correct, otherwise an
+error may be result.
+
+\subsubsection[dirnodes]{dir nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC dir \NC string \NC the direction (but see below) \NC \NR
+\NC level \NC number \NC nesting level of this direction whatsit \NC \NR
+\stoptabulate
+
+A note on \type {dir} strings. Direction specifiers are three|-|letter
+combinations of \type {T}, \type {B}, \type {R}, and \type {L}.
+
+These are built up out of three separate items:
+
+\startitemize[packed]
+\startitem
+ the first is the direction of the \quote{top} of paragraphs.
+\stopitem
+\startitem
+ the second is the direction of the \quote{start} of lines.
+\stopitem
+\startitem
+ the third is the direction of the \quote{top} of glyphs.
+\stopitem
+\stopitemize
+
+However, only four combinations are accepted: \type {TLT}, \type {TRT}, \type
+{RTT}, and \type {LTL}.
+
+Inside actual \type {dir} whatsit nodes, the representation of \type {dir} is not
+a three-letter but a four|-|letter combination. The first character in this case
+is always either \type {+} or \type {-}, indicating whether the value is pushed
+or popped from the direction stack.
+
+\subsubsection{margin_kern nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{margin_kern} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the advance of the kern \NC \NR
+\NC glyph \NC node \NC the glyph to be used \NC \NR
+\stoptabulate
+
+\subsection{Math nodes}
+
+These are the so||called \quote {noad}s and the nodes that are specifically
+associated with math processing. Most of these nodes contain subnodes so that the
+list of possible fields is actually quite small. First, the subnodes:
+
+\subsubsection{Math kernel subnodes}
+
+Many object fields in math mode are either simple characters in a specific family
+or math lists or node lists. There are four associated subnodes that represent
+these cases (in the following node descriptions these are indicated by the word
+\type {<kernel>}).
+
+The \type {next} and \type {prev} fields for these subnodes are unused.
+
+\subsubsubsection{math_char and math_text_char subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC char \NC number \NC the character index \NC \NR
+\NC fam \NC number \NC the family number \NC \NR
+\stoptabulate
+
+The \type {math_char} is the simplest subnode field, it contains the character
+and family for a single glyph object. The \type {math_text_char} is a special
+case that you will not normally encounter, it arises temporarily during math list
+conversion (its sole function is to suppress a following italic correction).
+
+\subsubsubsection{sub_box and sub_mlist subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC head/list \NC node \NC list of nodes \NC \NR
+\stoptabulate
+
+These two subnode types are used for subsidiary list items. For \type {sub_box},
+the \type {head} points to a \quote {normal} vbox or hbox. For \type {sub_mlist},
+the \type {head} points to a math list that is yet to be converted.
+
+A warning: never assign a node list to the \type {head} field unless you are sure
+its internal link structure is correct, otherwise an error may be result.
+
+\subsubsection{Math delimiter subnode}
+
+There is a fifth subnode type that is used exclusively for delimiter fields. As
+before, the \type {next} and \type {prev} fields are unused.
+
+\subsubsubsection{delim subnodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC small_char \NC number \NC character index of base character \NC \NR
+\NC small_fam \NC number \NC family number of base character \NC \NR
+\NC large_char \NC number \NC character index of next larger character \NC \NR
+\NC large_fam \NC number \NC family number of next larger character \NC \NR
+\stoptabulate
+
+The fields \type {large_char} and \type {large_fam} can be zero, in that case the
+font that is sed for the \type {small_fam} is expected to provide the large
+version as an extension to the \type {small_char}.
+
+\subsubsection{Math core nodes}
+
+First, there are the objects (the \TEX book calls then \quote {atoms}) that are
+associated with the simple math objects: ord, op, bin, rel, open, close, punct,
+inner, over, under, vcent. These all have the same fields, and they are combined
+into a single node type with separate subtypes for differentiation.
+
+\subsubsubsection{simple nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{noad} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\stoptabulate
+
+\subsubsubsection{accent nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{accent} \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\NC accent \NC kernel node \NC top accent \NC \NR
+\NC bot_accent \NC kernel node \NC bottom accent \NC \NR
+\stoptabulate
+
+\subsubsubsection{style nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC style \NC string \NC contains the style \NC \NR
+\stoptabulate
+
+There are eight possibilities for the string value: one of \quote {display},
+\quote {text}, \quote {script}, or \quote {scriptscript}. Each of these can have
+a trailing \type {'} to signify \quote {cramped} styles.
+
+\subsubsubsection{choice nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC display \NC node \NC list of display size alternatives \NC \NR
+\NC text \NC node \NC list of text size alternatives \NC \NR
+\NC script \NC node \NC list of scriptsize alternatives \NC \NR
+\NC scriptscript \NC node \NC list of scriptscriptsize alternatives \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the display, text, script, or
+scriptscript field unless you are sure its internal link structure is
+correct, otherwise an error may be result.
+
+\subsubsubsection{radical nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{radical} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC nucleus \NC kernel node \NC base \NC \NR
+\NC sub \NC kernel node \NC subscript \NC \NR
+\NC sup \NC kernel node \NC superscript \NC \NR
+\NC left \NC delimiter node \NC \NC \NR
+\NC degree \NC kernel node \NC only set by \type {\Uroot} \NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the nucleus, sub, sup, left, or degree
+field unless you are sure its internal link structure is correct, otherwise an
+error may be result.
+
+\subsubsubsection{fraction nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC (optional) width of the fraction \NC \NR
+\NC num \NC kernel node \NC numerator \NC \NR
+\NC denom \NC kernel node \NC denominator \NC \NR
+\NC left \NC delimiter node \NC left side symbol \NC \NR
+\NC right \NC delimiter node \NC right side symbol\NC \NR
+\stoptabulate
+
+A warning: never assign a node list to the num, or denom field unless you are
+sure its internal link structure is correct, otherwise an error may be result.
+
+\subsubsubsection{fence nodes}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC subtype \NC number \NC \showsubtypes{fence} \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC delim \NC delimiter node \NC delimiter specification \NC \NR
+\stoptabulate
+
+\subsection{whatsit nodes}
+
+Whatsit nodes come in many subtypes that you can ask for by running
+\type {node.whatsits()}:
+\startluacode
+ for id, name in table.sortedpairs(node.whatsits()) do
+ context.type(name)
+ context(" (%s), ",id)
+ end
+ context.removeunwantedspaces()
+ context.removepunctuation()
+\stopluacode
+. % period
+
+\subsubsection{front|-|end whatits}
+
+\subsubsubsection{open whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\NC name \NC string \NC file name \NC \NR
+\NC ext \NC string \NC file extension \NC \NR
+\NC area \NC string \NC file area (this may become obsolete) \NC \NR
+\stoptabulate
+
+\subsubsubsection{write whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\NC data \NC table \NC a table representing the token list to be written \NC \NR
+\stoptabulate
+
+\subsubsubsection{close whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stream \NC number \NC \TEX's stream id number \NC \NR
+\stoptabulate
+
+\subsubsubsection{user_defined whatits}
+
+User|-|defined whatsit nodes can only be created and handled from \LUA\ code. In
+effect, they are an extension to the extension mechanism. The \LUATEX\ engine
+will simply step over such whatsits without ever looking at the contents.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC user_id \NC number \NC id number \NC \NR
+\NC type \NC number \NC type of the value \NC \NR
+\NC value \NC number \NC a \LUA\ number \NC \NR
+\NC \NC node \NC a node list \NC \NR
+\NC \NC string \NC a \LUA\ string \NC \NR
+\NC \NC table \NC a \LUA\ table \NC \NR
+\stoptabulate
+
+The \type {type} can have one of five distinct values:
+
+\starttabulate[|lT|p|]
+\NC \rmbf value \NC \bf explanation \NC \NR
+\NC 97 \NC list of attributes \NC \NR
+\NC 100 \NC a \LUA\ number \NC \NR
+\NC 110 \NC a node list \NC \NR
+\NC 115 \NC a \LUA\ string \NC \NR
+\NC 116 \NC a \LUA\ token list in \LUA\ table form \NC \NR
+\stoptabulate
+
+\subsubsubsection{save_pos whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\subsubsubsection{late_lua whatsits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC data to execute \NC \NR
+\NC string \NC string \NC data to execute \NC \NR
+\NC name \NC string \NC the name to use for \LUA\ error reporting \NC \NR
+\stoptabulate
+
+The difference between \type {data} and \type {string} is that on assignment, the
+\type {data} field is converted to a token list, cf. use as \type {\latelua}. The
+\type {string} version is treated as a literal string.
+
+\subsubsection{\DVI\ backend whatits}
+
+\subsubsection{special whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC the \type {\special} information \NC \NR
+\stoptabulate
+
+\subsubsection{\PDF\ backend whatits}
+
+\subsubsubsection{pdf_literal whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC mode \NC number \NC the \quote {mode} setting of this literal \NC \NR
+\NC data \NC string \NC the \type {\pdfliteral} information \NC \NR
+\stoptabulate
+
+Possible mode values are:
+
+\starttabulate[|lT|p|]
+\NC \rmbf value \NC \rmbf \PDFTEX\ keyword \NC \NR
+\NC 0 \NC setorigin \NC \NR
+\NC 1 \NC page \NC \NR
+\NC 2 \NC direct \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_refobj whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_annot whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\NC data \NC string \NC the annotation data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_start_link whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC objnum \NC number \NC the referenced \PDF\ object number \NC \NR
+\NC link_attr \NC table \NC the link attribute token list \NC \NR
+\NC action \NC node \NC the action to perform \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_end_link whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_dest whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is the \type {dest_id} a string value? \NC \NR
+\NC dest_id \NC number \NC the destination id \NC \NR
+\NC \NC string \NC the destination name \NC \NR
+\NC dest_type \NC number \NC type of destination \NC \NR
+\NC xyz_zoom \NC number \NC the zoom factor (times 1000) \NC \NR
+\NC objnum \NC number \NC the \PDF\ object number \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_action whatits}
+
+These are a special kind of item that only appears inside \PDF\ start link
+objects.
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC action_type \NC number \NC the kind of action involved \NC \NR
+\NC action_id \NC number or string \NC token list reference or string \NC \NR
+\NC named_id \NC number \NC the index of the destination \NC \NR
+\NC file \NC string \NC the target filename \NC \NR
+\NC new_window \NC number \NC the window state of the target \NC \NR
+\NC data \NC string \NC the name of the destination \NC \NR
+\stoptabulate
+
+Valid action types are:
+
+\starttabulate[|lT|lT|]
+\NC 0 \NC page \NC \NR
+\NC 1 \NC goto \NC \NR
+\NC 2 \NC thread \NC \NR
+\NC 3 \NC user \NC \NR
+\stoptabulate
+
+Valid window types are:
+
+\starttabulate[|lT|lT|]
+\NC 0 \NC notset \NC \NR
+\NC 1 \NC new \NC \NR
+\NC 2 \NC nonew \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_thread whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is \type {tread_id} a string value? \NC \NR
+\NC tread_id \NC number \NC the thread id \NC \NR
+\NC \NC string \NC the thread name \NC \NR
+\NC thread_attr \NC number \NC extra thread information \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_start_thread whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC width \NC number \NC the width (not used in calculations) \NC \NR
+\NC height \NC number \NC the height (not used in calculations) \NC \NR
+\NC depth \NC number \NC the depth (not used in calculations) \NC \NR
+\NC named_id \NC number \NC is \type {tread_id} a string value? \NC \NR
+\NC tread_id \NC number \NC the thread id \NC \NR
+\NC \NC string \NC the thread name \NC \NR
+\NC thread_attr \NC number \NC extra thread information \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_end_thread whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_colorstack whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC stack \NC number \NC colorstack id number \NC \NR
+\NC command \NC number \NC command to execute \NC \NR
+\NC data \NC string \NC data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_setmatrix whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\NC data \NC string \NC data \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_save whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\subsubsubsection{pdf_restore whatits}
+
+\starttabulate[|lT|l|p|]
+\NC \rmbf field \NC \bf type \NC \bf explanation \NC \NR
+\NC attr \NC node \NC list of attributes \NC \NR
+\stoptabulate
+
+\section{Two access models}
+
+Deep down in \TEX\ a node has a number which is an numeric entry in a memory
+table. In fact, this model, where \TEX\ manages memory is real fast and one of
+the reasons why plugging in callbacks that operate on nodes is quite fast too.
+Each node gets a number that is in fact an index in the memory table and that
+number often gets reported when you print node related information.
+
+There are two access models, a robust one using a so called user data object that
+provides a virtual interface to the internal nodes, and a more direct access which
+uses the node numbers directly. The first model provide key based access while
+the second always accesses fields via functions:
+
+\starttyping
+nodeobject.char
+getfield(nodenumber,"char")
+\stoptyping
+
+If you use the direct model, even if you know that you deal with numbers, you
+should not depend on that property but treat it an abstraction just like
+traditional nodes. In fact, the fact that we use a simple basic datatype has the
+penalty that less checking can be done, but less checking is also the reason why
+it's somewhat faster. An important aspect is that one cannot mix both methods,
+but you can cast both models. So, multiplying a node number makes no sense.
+
+So our advice is: use the indexed (table) approach when possible and investigate
+the direct one when speed might be an real issue. For that reason we also provide
+the \type {get*} and \type {set*} functions in the top level node namespace.
+There is a limited set of getters. When implementing this direct approach the
+regular index by key variant was also optimized, so direct access only makes
+sense when we're accessing nodes millions of times (which happens in some font
+processing for instance).
+
+We're talking mostly of getters because setters are less important. Documents
+have not that many content related nodes and setting many thousands of properties
+is hardly a burden contrary to millions of consultations.
+
+Normally you will access nodes like this:
+
+\starttyping
+local next = current.next
+if next then
+ -- do something
+end
+\stoptyping
+
+Here \type {next} is not a real field, but a virtual one. Accessing it results in
+a metatable method being called. In practice it boils down to looking up the node
+type and based on the node type checking for the field name. In a worst case you
+have a node type that sits at the end of the lookup list and a field that is last
+in the lookup chain. However, in successive versions of \LUATEX\ these lookups
+have been optimized and the most frequently accessed nodes and fields have a
+higher priority.
+
+Because in practice the \type {next} accessor results in a function call, there
+is some overhead involved. The next code does the same and performs a tiny bit
+faster (but not that much because it is still a function call but one that knows
+what to look up).
+
+\starttyping
+local next = node.next(current)
+if next then
+ -- do something
+end
+\stoptyping
+
+If performance matters you can use an function instead:
+
+\starttabulate[|T|p|]
+\NC getnext \NC parsing nodelist always involves this one \NC \NR
+\NC getprev \NC used less but is logical companion to \type {getnext} \NC \NR
+\NC getboth \NC returns the next and prev pointer of a node \NC \NR
+\NC getid \NC consulted a lot \NC \NR
+\NC getsubtype \NC consulted less but also a topper \NC \NR
+\NC getfont \NC used a lot in \OPENTYPE\ handling (glyph nodes are consulted a lot) \NC \NR
+\NC getchar \NC idem and also in other places \NC \NR
+\NC getdisc \NC returns the \type {pre}, \type {post} and \type {replace} fields and
+ optionally when true is passed also the tail fields. \NC \NR
+\NC getlist \NC we often parse nested lists so this is a convenient one too
+ (only works for hlist and vlist!) \NC \NR
+\NC getleader \NC comparable to list, seldom used in \TEX\ (but needs frequent consulting
+ like lists; leaders could have been made a dedicated node type) \NC \NR
+\NC getfield \NC generic getter, sufficient for the rest (other field names are
+ often shared so a specific getter makes no sense then) \NC \NR
+\stoptabulate
+
+The direct variants also have setters, where the discretionary setter takes three
+(optional) arguments plus an optional fourth indicating the subtype.
+
+It doesn't make sense to add getters for all fields, also because some are not
+unique to one node type. Profiling demonstrated that these fields can get
+accesses way more times than other fields. Even in complex documents, many node
+and fields types never get seen, or seen only a few times. Most functions in the
+\type {node} namespace have a companion in \type {node.direct}, but of course not
+the ones that don't deal with nodes themselves. The following table summarized
+this:
+
+% \startcolumns[balance=yes]
+
+\def\yes{$+$} \def\nop{$-$}
+
+\starttabulate[|T|c|c|]
+\HL
+\NC \bf function \NC \bf node \NC \bf direct \NC \NR
+\HL
+\NC \type {copy_list} \NC \yes \NC \yes \NC \NR
+\NC \type {copy} \NC \yes \NC \yes \NC \NR
+\NC \type {count} \NC \yes \NC \yes \NC \NR
+\NC \type {current_attr} \NC \yes \NC \yes \NC \NR
+\NC \type {dimensions} \NC \yes \NC \yes \NC \NR
+\NC \type {do_ligature_n} \NC \yes \NC \yes \NC \NR
+\NC \type {effective_glue} \NC \yes \NC \yes \NC \NR
+\NC \type {end_of_math} \NC \yes \NC \yes \NC \NR
+\NC \type {family_font} \NC \yes \NC \nop \NC \NR
+\NC \type {fields} \NC \yes \NC \nop \NC \NR
+\NC \type {first_character} \NC \yes \NC \nop \NC \NR
+\NC \type {first_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {flush_list} \NC \yes \NC \yes \NC \NR
+\NC \type {flush_node} \NC \yes \NC \yes \NC \NR
+\NC \type {free} \NC \yes \NC \yes \NC \NR
+\NC \type {getboth} \NC \yes \NC \yes \NC \NR
+\NC \type {getbox} \NC \nop \NC \yes \NC \NR
+\NC \type {getchar} \NC \yes \NC \yes \NC \NR
+\NC \type {getdisc} \NC \yes \NC \yes \NC \NR
+\NC \type {getfield} \NC \yes \NC \yes \NC \NR
+\NC \type {getfont} \NC \yes \NC \yes \NC \NR
+\NC \type {getid} \NC \yes \NC \yes \NC \NR
+\NC \type {getleader} \NC \yes \NC \yes \NC \NR
+\NC \type {getlist} \NC \yes \NC \yes \NC \NR
+\NC \type {getnext} \NC \yes \NC \yes \NC \NR
+\NC \type {getprev} \NC \yes \NC \yes \NC \NR
+\NC \type {getsubtype} \NC \yes \NC \yes \NC \NR
+\NC \type {has_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {has_field} \NC \yes \NC \yes \NC \NR
+\NC \type {has_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {hpack} \NC \yes \NC \yes \NC \NR
+\NC \type {id} \NC \yes \NC \nop \NC \NR
+\NC \type {insert_after} \NC \yes \NC \yes \NC \NR
+\NC \type {insert_before} \NC \yes \NC \yes \NC \NR
+\NC \type {is_char} \NC \yes \NC \yes \NC \NR
+\NC \type {is_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {is_direct} \NC \nop \NC \yes \NC \NR
+\NC \type {is_node} \NC \yes \NC \yes \NC \NR
+\NC \type {kerning} \NC \yes \NC \yes \NC \NR
+\NC \type {last_node} \NC \yes \NC \yes \NC \NR
+\NC \type {length} \NC \yes \NC \yes \NC \NR
+\NC \type {ligaturing} \NC \yes \NC \yes \NC \NR
+\NC \type {mlist_to_hlist} \NC \yes \NC \nop \NC \NR
+\NC \type {new} \NC \yes \NC \yes \NC \NR
+\NC \type {next} \NC \yes \NC \nop \NC \NR
+\NC \type {prev} \NC \yes \NC \nop \NC \NR
+\NC \type {protect_glyph} \NC \yes \NC \yes \NC \NR
+\NC \type {protect_glyphs} \NC \yes \NC \yes \NC \NR
+\NC \type {protrusion_skippable} \NC \yes \NC \yes \NC \NR
+\NC \type {remove} \NC \yes \NC \yes \NC \NR
+\NC \type {set_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {setboth} \NC \yes \NC \yes \NC \NR
+\NC \type {setbox} \NC \yes \NC \yes \NC \NR
+\NC \type {setchar} \NC \yes \NC \yes \NC \NR
+\NC \type {setdisc} \NC \yes \NC \yes \NC \NR
+\NC \type {setfield} \NC \yes \NC \yes \NC \NR
+\NC \type {setlink} \NC \yes \NC \yes \NC \NR
+\NC \type {setnext} \NC \yes \NC \yes \NC \NR
+\NC \type {setprev} \NC \yes \NC \yes \NC \NR
+\NC \type {slide} \NC \yes \NC \yes \NC \NR
+\NC \type {subtype} \NC \yes \NC \nop \NC \NR
+\NC \type {subtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {tail} \NC \yes \NC \yes \NC \NR
+\NC \type {todirect} \NC \yes \NC \yes \NC \NR
+\NC \type {tonode} \NC \yes \NC \yes \NC \NR
+\NC \type {tostring} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse_id} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse_char} \NC \yes \NC \yes \NC \NR
+\NC \type {traverse} \NC \yes \NC \yes \NC \NR
+\NC \type {types} \NC \yes \NC \nop \NC \NR
+\NC \type {type} \NC \yes \NC \nop \NC \NR
+\NC \type {unprotect_glyphs} \NC \yes \NC \yes \NC \NR
+\NC \type {unset_attribute} \NC \yes \NC \yes \NC \NR
+\NC \type {usedlist} \NC \yes \NC \yes \NC \NR
+\NC \type {vpack} \NC \yes \NC \yes \NC \NR
+\NC \type {whatsits} \NC \yes \NC \nop \NC \NR
+\NC \type {whatsitsubtypes} \NC \yes \NC \nop \NC \NR
+\NC \type {write} \NC \yes \NC \yes \NC \NR
+\NC \type {setglue} \NC \yes \NC \yes \NC \NR
+\NC \type {getglue} \NC \yes \NC \yes \NC \NR
+\NC \type {glue_is_zero} \NC \yes \NC \yes \NC \NR
+\stoptabulate
+
+% \stopcolumns
+
+The \type {node.next} and \type {node.prev} functions will stay but for
+consistency there are variants called \type {getnext} and \type {getprev}. We had
+to use \type {get} because \type {node.id} and \type {node.subtype} are already
+taken for providing meta information about nodes. Note: The getters do only basic
+checking for valid keys. You should just stick to the keys mentioned in the
+sections that describe node properties.
+
+Some nodes have indirect references. For instance a math character refers to a
+family instead of a font. In that case we provide a virtual font field as
+accessor. So, \type {getfont} and \type {.font} can be used on them. The same is
+true for the \type {width}, \type {height} and \type {depth} of glue nodes. These
+actually access the spec node properties, and here we can set as well as get the
+values.
+
+\section{The \type {node} library}
+
+The \type {node} library contains functions that facilitate dealing with (lists
+of) nodes and their values. They allow you to create, alter, copy, delete, and
+insert \LUATEX\ node objects, the core objects within the typesetter.
+
+\LUATEX\ nodes are represented in \LUA\ as userdata with the metadata type
+\type {luatex.node}. The various parts within a node can be accessed using
+named fields.
+
+Each node has at least the three fields \type {next}, \type {id}, and \type
+{subtype}:
+
+\startitemize[intro]
+
+\startitem
+ The \type {next} field returns the userdata object for the next node in a
+ linked list of nodes, or \type {nil}, if there is no next node.
+\stopitem
+
+\startitem
+ The \type {id} indicates \TEX's \quote{node type}. The field \type {id} has a
+ numeric value for efficiency reasons, but some of the library functions also
+ accept a string value instead of \type {id}.
+\stopitem
+
+\startitem
+ The \type {subtype} is another number. It often gives further information
+ about a node of a particular \type {id}, but it is most important when
+ dealing with \quote {whatsits}, because they are differentiated solely based
+ on their \type {subtype}.
+\stopitem
+
+\stopitemize
+
+The other available fields depend on the \type {id} (and for \quote {whatsits},
+the \type {subtype}) of the node. Further details on the various fields and their
+meanings are given in~\in{chapter}[nodes].
+
+Support for \type {unset} (alignment) nodes is partial: they can be queried and
+modified from \LUA\ code, but not created.
+
+Nodes can be compared to each other, but: you are actually comparing indices into
+the node memory. This means that equality tests can only be trusted under very
+limited conditions. It will not work correctly in any situation where one of the
+two nodes has been freed and|/|or reallocated: in that case, there will be false
+positives.
+
+At the moment, memory management of nodes should still be done explicitly by the
+user. Nodes are not \quote {seen} by the \LUA\ garbage collector, so you have to
+call the node freeing functions yourself when you are no longer in need of a node
+(list). Nodes form linked lists without reference counting, so you have to be
+careful that when control returns back to \LUATEX\ itself, you have not deleted
+nodes that are still referenced from a \type {next} pointer elsewhere, and that
+you did not create nodes that are referenced more than once.
+
+There are statistics available with regards to the allocated node memory, which
+can be handy for tracing.
+
+\subsection{Node handling functions}
+
+\subsubsection{\type {node.is_node}}
+
+\startfunctioncall
+<boolean> t =
+ node.is_node(<any> item)
+\stopfunctioncall
+
+This function returns true if the argument is a userdata object of
+type \type {<node>}.
+
+\subsubsection{\type {node.types}}
+
+\startfunctioncall
+<table> t =
+ node.types()
+\stopfunctioncall
+
+This function returns an array that maps node id numbers to node type strings,
+providing an overview of the possible top|-|level \type {id} types.
+
+\subsubsection{\type {node.whatsits}}
+
+\startfunctioncall
+<table> t =
+ node.whatsits()
+\stopfunctioncall
+
+\TEX's \quote{whatsits} all have the same \type {id}. The various subtypes are
+defined by their \type {subtype} fields. The function is much like \type
+{node.types}, except that it provides an array of \type {subtype} mappings.
+
+\subsubsection{\type {node.id}}
+
+\startfunctioncall
+<number> id =
+ node.id(<string> type)
+\stopfunctioncall
+
+This converts a single type name to its internal numeric representation.
+
+\subsubsection{\type {node.subtype}}
+
+\startfunctioncall
+<number> subtype =
+ node.subtype(<string> type)
+\stopfunctioncall
+
+This converts a single whatsit name to its internal numeric representation (\type
+{subtype}).
+
+\subsubsection{\type {node.type}}
+
+\startfunctioncall
+<string> type =
+ node.type(<any> n)
+\stopfunctioncall
+
+In the argument is a number, then this function converts an internal numeric
+representation to an external string representation. Otherwise, it will return
+the string \type {node} if the object represents a node, and \type {nil}
+otherwise.
+
+\subsubsection{\type {node.fields}}
+
+\startfunctioncall
+<table> t =
+ node.fields(<number> id)
+<table> t =
+ node.fields(<number> id, <number> subtype)
+\stopfunctioncall
+
+This function returns an array of valid field names for a particular type of
+node. If you want to get the valid fields for a \quote {whatsit}, you have to
+supply the second argument also. In other cases, any given second argument will
+be silently ignored.
+
+This function accepts string \type {id} and \type {subtype} values as well.
+
+\subsubsection{\type {node.has_field}}
+
+\startfunctioncall
+<boolean> t =
+ node.has_field(<node> n, <string> field)
+\stopfunctioncall
+
+This function returns a boolean that is only true if \type {n} is
+actually a node, and it has the field.
+
+\subsubsection{\type {node.new}}
+
+\startfunctioncall
+<node> n =
+ node.new(<number> id)
+<node> n =
+ node.new(<number> id, <number> subtype)
+\stopfunctioncall
+
+Creates a new node. All of the new node's fields are initialized to either zero
+or \type {nil} except for \type {id} and \type {subtype} (if supplied). If you
+want to create a new whatsit, then the second argument is required, otherwise it
+need not be present. As with all node functions, this function creates a node on
+the \TEX\ level.
+
+This function accepts string \type {id} and \type {subtype} values as well.
+
+\subsubsection{\type {node.free}}
+
+\startfunctioncall
+node.free(<node> n)
+\stopfunctioncall
+
+Removes the node \type {n} from \TEX's memory. Be careful: no checks are done on
+whether this node is still pointed to from a register or some \type {next} field:
+it is up to you to make sure that the internal data structures remain correct.
+
+\subsubsection{\type {node.flush_list}}
+
+\startfunctioncall
+node.flush_list(<node> n)
+\stopfunctioncall
+
+Removes the node list \type {n} and the complete node list following \type {n}
+from \TEX's memory. Be careful: no checks are done on whether any of these nodes
+is still pointed to from a register or some \type {next} field: it is up to you
+to make sure that the internal data structures remain correct.
+
+\subsubsection{\type {node.copy}}
+
+\startfunctioncall
+<node> m =
+ node.copy(<node> n)
+\stopfunctioncall
+
+Creates a deep copy of node \type {n}, including all nested lists as in the case
+of a hlist or vlist node. Only the \type {next} field is not copied.
+
+\subsubsection{\type {node.copy_list}}
+
+\startfunctioncall
+<node> m =
+ node.copy_list(<node> n)
+<node> m =
+ node.copy_list(<node> n, <node> m)
+\stopfunctioncall
+
+Creates a deep copy of the node list that starts at \type {n}. If \type {m} is
+also given, the copy stops just before node \type {m}.
+
+Note that you cannot copy attribute lists this way, specialized functions for
+dealing with attribute lists will be provided later but are not there yet.
+However, there is normally no need to copy attribute lists as when you do
+assignments to the \type {attr} field or make changes to specific attributes, the
+needed copying and freeing takes place automatically.
+
+\subsubsection{\type {node.next}}
+
+\startfunctioncall
+<node> m =
+ node.next(<node> n)
+\stopfunctioncall
+
+Returns the node following this node, or \type {nil} if there is no such node.
+
+\subsubsection{\type {node.prev}}
+
+\startfunctioncall
+<node> m =
+ node.prev(<node> n)
+\stopfunctioncall
+
+Returns the node preceding this node, or \type {nil} if there is no such node.
+
+\subsubsection{\type {node.current_attr}}
+
+\startfunctioncall
+<node> m =
+ node.current_attr()
+\stopfunctioncall
+
+Returns the currently active list of attributes, if there is one.
+
+The intended usage of \type {current_attr} is as follows:
+
+\starttyping
+local x1 = node.new("glyph")
+x1.attr = node.current_attr()
+local x2 = node.new("glyph")
+x2.attr = node.current_attr()
+\stoptyping
+
+or:
+
+\starttyping
+local x1 = node.new("glyph")
+local x2 = node.new("glyph")
+local ca = node.current_attr()
+x1.attr = ca
+x2.attr = ca
+\stoptyping
+
+The attribute lists are ref counted and the assignment takes care of incrementing
+the refcount. You cannot expect the value \type {ca} to be valid any more when
+you assign attributes (using \type {tex.setattribute}) or when control has been
+passed back to \TEX.
+
+Note: this function is somewhat experimental, and it returns the {\it actual}
+attribute list, not a copy thereof. Therefore, changing any of the attributes in
+the list will change these values for all nodes that have the current attribute
+list assigned to them.
+
+\subsubsection{\type {node.hpack}}
+
+\startfunctioncall
+<node> h, <number> b =
+ node.hpack(<node> n)
+<node> h, <number> b =
+ node.hpack(<node> n, <number> w, <string> info)
+<node> h, <number> b =
+ node.hpack(<node> n, <number> w, <string> info, <string> dir)
+\stopfunctioncall
+
+This function creates a new hlist by packaging the list that begins at node \type
+{n} into a horizontal box. With only a single argument, this box is created using
+the natural width of its components. In the three argument form, \type {info}
+must be either \type {additional} or \type {exactly}, and \type {w} is the
+additional (\type {\hbox spread}) or exact (\type {\hbox to}) width to be used. The
+second return value is the badness of the generated box.
+
+Caveat: at this moment, there can be unexpected side|-|effects to this function,
+like updating some of the \type {\marks} and \type {\inserts}. Also note that the
+content of \type {h} is the original node list \type {n}: if you call \type
+{node.free(h)} you will also free the node list itself, unless you explicitly set
+the \type {list} field to \type {nil} beforehand. And in a similar way, calling
+\type {node.free(n)} will invalidate \type {h} as well!
+
+\subsubsection{\type {node.vpack}}
+
+\startfunctioncall
+<node> h, <number> b =
+ node.vpack(<node> n)
+<node> h, <number> b =
+ node.vpack(<node> n, <number> w, <string> info)
+<node> h, <number> b =
+ node.vpack(<node> n, <number> w, <string> info, <string> dir)
+\stopfunctioncall
+
+This function creates a new vlist by packaging the list that begins at node \type
+{n} into a vertical box. With only a single argument, this box is created using
+the natural height of its components. In the three argument form, \type {info}
+must be either \type {additional} or \type {exactly}, and \type {w} is the
+additional (\type {\vbox spread}) or exact (\type {\vbox to}) height to be used.
+
+The second return value is the badness of the generated box.
+
+See the description of \type {node.hpack()} for a few memory allocation caveats.
+
+\subsubsection{\type {node.dimensions}}
+
+\startfunctioncall
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <string> dir)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <node> t)
+<number> w, <number> h, <number> d =
+ node.dimensions(<node> n, <node> t, <string> dir)
+\stopfunctioncall
+
+This function calculates the natural in|-|line dimensions of the node list starting
+at node \type {n} and terminating just before node \type {t} (or the end of the
+list, if there is no second argument). The return values are scaled points. An
+alternative format that starts with glue parameters as the first three arguments
+is also possible:
+
+\startfunctioncall
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <string> dir)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <node> t)
+<number> w, <number> h, <number> d =
+ node.dimensions(<number> glue_set, <number> glue_sign, <number> glue_order,
+ <node> n, <node> t, <string> dir)
+\stopfunctioncall
+
+This calling method takes glue settings into account and is especially useful for
+finding the actual width of a sublist of nodes that are already boxed, for
+example in code like this, which prints the width of the space in between the
+\type {a} and \type {b} as it would be if \type {\box0} was used as-is:
+
+\starttyping
+\setbox0 = \hbox to 20pt {a b}
+
+\directlua{print (node.dimensions(
+ tex.box[0].glue_set,
+ tex.box[0].glue_sign,
+ tex.box[0].glue_order,
+ tex.box[0].head.next,
+ node.tail(tex.box[0].head)
+)) }
+\stoptyping
+
+You need to keep in mind that this is one of the few places in \TEX\ where floats
+are used, which means that you can get small differences in rounding when you
+compare the width repported by \type {hpack} with \type {dimensions}.
+
+\subsubsection{\type {node.mlist_to_hlist}}
+
+\startfunctioncall
+<node> h =
+ node.mlist_to_hlist(<node> n, <string> display_type, <boolean> penalties)
+\stopfunctioncall
+
+This runs the internal mlist to hlist conversion, converting the math list in
+\type {n} into the horizontal list \type {h}. The interface is exactly the same
+as for the callback \type {mlist_to_hlist}.
+
+\subsubsection{\type {node.slide}}
+
+\startfunctioncall
+<node> m =
+ node.slide(<node> n)
+\stopfunctioncall
+
+Returns the last node of the node list that starts at \type {n}. As a
+side|-|effect, it also creates a reverse chain of \type {prev} pointers between
+nodes.
+
+\subsubsection{\type {node.tail}}
+
+\startfunctioncall
+<node> m =
+ node.tail(<node> n)
+\stopfunctioncall
+
+Returns the last node of the node list that starts at \type {n}.
+
+\subsubsection{\type {node.length}}
+
+\startfunctioncall
+<number> i =
+ node.length(<node> n)
+<number> i =
+ node.length(<node> n, <node> m)
+\stopfunctioncall
+
+Returns the number of nodes contained in the node list that starts at \type {n}.
+If \type {m} is also supplied it stops at \type {m} instead of at the end of the
+list. The node \type {m} is not counted.
+
+\subsubsection{\type {node.count}}
+
+\startfunctioncall
+<number> i =
+ node.count(<number> id, <node> n)
+<number> i =
+ node.count(<number> id, <node> n, <node> m)
+\stopfunctioncall
+
+Returns the number of nodes contained in the node list that starts at \type {n}
+that have a matching \type {id} field. If \type {m} is also supplied, counting
+stops at \type {m} instead of at the end of the list. The node \type {m} is not
+counted.
+
+This function also accept string \type {id}'s.
+
+\subsubsection{\type {node.traverse}}
+
+\startfunctioncall
+<node> t =
+ node.traverse(<node> n)
+\stopfunctioncall
+
+This is a \LUA\ iterator that loops over the node list that starts at \type {n}.
+Typically code looks like this:
+
+\starttyping
+for n in node.traverse(head) do
+ ...
+end
+\stoptyping
+
+is functionally equivalent to:
+
+\starttyping
+do
+ local n
+ local function f (head,var)
+ local t
+ if var == nil then
+ t = head
+ else
+ t = var.next
+ end
+ return t
+ end
+ while true do
+ n = f (head, n)
+ if n == nil then break end
+ ...
+ end
+end
+\stoptyping
+
+It should be clear from the definition of the function \type {f} that even though
+it is possible to add or remove nodes from the node list while traversing, you
+have to take great care to make sure all the \type {next} (and \type {prev})
+pointers remain valid.
+
+If the above is unclear to you, see the section \quote {For Statement} in the
+\LUA\ Reference Manual.
+
+\subsubsection{\type {node.traverse_id}}
+
+\startfunctioncall
+<node> t =
+ node.traverse_id(<number> id, <node> n)
+\stopfunctioncall
+
+This is an iterator that loops over all the nodes in the list that starts at
+\type {n} that have a matching \type {id} field.
+
+See the previous section for details. The change is in the local function \type
+{f}, which now does an extra while loop checking against the upvalue \type {id}:
+
+\starttyping
+ local function f(head,var)
+ local t
+ if var == nil then
+ t = head
+ else
+ t = var.next
+ end
+ while not t.id == id do
+ t = t.next
+ end
+ return t
+ end
+\stoptyping
+
+\subsubsection{\type {node.end_of_math}}
+
+\startfunctioncall
+<node> t =
+ node.end_of_math(<node> start)
+\stopfunctioncall
+
+Looks for and returns the next \type {math_node} following the \type {start}. If
+the given node is a math endnode this helper return that node, else it follows
+the list and return the next math endnote. If no such node is found nil is
+returned.
+
+\subsubsection{\type {node.remove}}
+
+\startfunctioncall
+<node> head, current =
+ node.remove(<node> head, <node> current)
+\stopfunctioncall
+
+This function removes the node \type {current} from the list following \type
+{head}. It is your responsibility to make sure it is really part of that list.
+The return values are the new \type {head} and \type {current} nodes. The
+returned \type {current} is the node following the \type {current} in the calling
+argument, and is only passed back as a convenience (or \type {nil}, if there is
+no such node). The returned \type {head} is more important, because if the
+function is called with \type {current} equal to \type {head}, it will be
+changed.
+
+\subsubsection{\type {node.insert_before}}
+
+\startfunctioncall
+<node> head, new =
+ node.insert_before(<node> head, <node> current, <node> new)
+\stopfunctioncall
+
+This function inserts the node \type {new} before \type {current} into the list
+following \type {head}. It is your responsibility to make sure that \type
+{current} is really part of that list. The return values are the (potentially
+mutated) \type {head} and the node \type {new}, set up to be part of the list
+(with correct \type {next} field). If \type {head} is initially \type {nil}, it
+will become \type {new}.
+
+\subsubsection{\type {node.insert_after}}
+
+\startfunctioncall
+<node> head, new =
+ node.insert_after(<node> head, <node> current, <node> new)
+\stopfunctioncall
+
+This function inserts the node \type {new} after \type {current} into the list
+following \type {head}. It is your responsibility to make sure that \type
+{current} is really part of that list. The return values are the \type {head} and
+the node \type {new}, set up to be part of the list (with correct \type {next}
+field). If \type {head} is initially \type {nil}, it will become \type {new}.
+
+\subsubsection{\type {node.first_glyph}}
+
+\startfunctioncall
+<node> n =
+ node.first_glyph(<node> n)
+<node> n =
+ node.first_glyph(<node> n, <node> m)
+\stopfunctioncall
+
+Returns the first node in the list starting at \type {n} that is a glyph node
+with a subtype indicating it is a glyph, or \type {nil}. If \type {m} is given,
+processing stops at (but including) that node, otherwise processing stops at the
+end of the list.
+
+\subsubsection{\type {node.ligaturing}}
+
+\startfunctioncall
+<node> h, <node> t, <boolean> success =
+ node.ligaturing(<node> n)
+<node> h, <node> t, <boolean> success =
+ node.ligaturing(<node> n, <node> m)
+\stopfunctioncall
+
+Apply \TEX-style ligaturing to the specified nodelist. The tail node \type {m} is
+optional. The two returned nodes \type {h} and \type {t} are the new head and
+tail (both \type {n} and \type {m} can change into a new ligature).
+
+\subsubsection{\type {node.kerning}}
+
+\startfunctioncall
+<node> h, <node> t, <boolean> success =
+ node.kerning(<node> n)
+<node> h, <node> t, <boolean> success =
+ node.kerning(<node> n, <node> m)
+\stopfunctioncall
+
+Apply \TEX|-|style kerning to the specified node list. The tail node \type {m} is
+optional. The two returned nodes \type {h} and \type {t} are the head and tail
+(either one of these can be an inserted kern node, because special kernings with
+word boundaries are possible).
+
+\subsubsection{\type {node.unprotect_glyphs}}
+
+\startfunctioncall
+node.unprotect_glyphs(<node> n)
+\stopfunctioncall
+
+Subtracts 256 from all glyph node subtypes. This and the next function are
+helpers to convert from \type {characters} to \type {glyphs} during node
+processing.
+
+\subsubsection{\type {node.protect_glyphs}}
+
+\startfunctioncall
+node.protect_glyphs(<node> n)
+\stopfunctioncall
+
+Adds 256 to all glyph node subtypes in the node list starting at \type {n},
+except that if the value is 1, it adds only 255. The special handling of 1 means
+that \type {characters} will become \type {glyphs} after subtraction of 256.
+
+\subsubsection{\type {node.last_node}}
+
+\startfunctioncall
+<node> n =
+ node.last_node()
+\stopfunctioncall
+
+This function pops the last node from \TEX's \quote{current list}. It returns
+that node, or \type {nil} if the current list is empty.
+
+\subsubsection{\type {node.write}}
+
+\startfunctioncall
+node.write(<node> n)
+\stopfunctioncall
+
+This is an experimental function that will append a node list to \TEX's \quote
+{current list} The node list is not deep|-|copied! There is no error checking
+either!
+
+\subsubsection{\type {node.protrusion_skippable}}
+
+\startfunctioncall
+<boolean> skippable =
+ node.protrusion_skippable(<node> n)
+\stopfunctioncall
+
+Returns \type {true} if, for the purpose of line boundary discovery when
+character protrusion is active, this node can be skipped.
+
+\subsection{Glue handling}
+
+\subsubsection{\type {node.setglue}}
+
+You can set the properties of a glue in one go. If you pass no values, the glue
+will become a zero glue.
+
+\startfunctioncall
+node.setglue(<node> n)
+node.setglue(<node> n,width,stretch,shrink,stretch_order,shrink_order)
+\stopfunctioncall
+
+When you pass values, only arguments that are numbers
+are assigned so
+
+\starttyping
+node.setglue(n,655360,false,65536)
+\stoptyping
+
+will only adapt the width and shrink.
+
+\subsubsection{\type {node.getglue}}
+
+The next call will return 5 values (or northing when no glue is passed).
+
+\startfunctioncall
+<integer> width, <integer> stretch, <integer> shrink, <integer> stretch_order,
+ <integer> shrink_order = node.getglue(<node> n)
+\stopfunctioncall
+
+\subsubsection{\type {node.is_zero_glue}}
+
+This function returns \type {true} when the width, stretch and shrink properties
+are zero.
+
+\startfunctioncall
+<boolean> isglue =
+ node.is_zero_glue(<node> n)
+\stopfunctioncall
+
+\subsection{Attribute handling}
+
+Attributes appear as linked list of userdata objects in the \type {attr} field of
+individual nodes. They can be handled individually, but it is much safer and more
+efficient to use the dedicated functions associated with them.
+
+\subsubsection{\type {node.has_attribute}}
+
+\startfunctioncall
+<number> v =
+ node.has_attribute(<node> n, <number> id)
+<number> v =
+ node.has_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Tests if a node has the attribute with number \type {id} set. If \type {val} is
+also supplied, also tests if the value matches \type {val}. It returns the value,
+or, if no match is found, \type {nil}.
+
+\subsubsection{\type {node.set_attribute}}
+
+\startfunctioncall
+node.set_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Sets the attribute with number \type {id} to the value \type {val}. Duplicate
+assignments are ignored. {\em [needs explanation]}
+
+\subsubsection{\type {node.unset_attribute}}
+
+\startfunctioncall
+<number> v =
+ node.unset_attribute(<node> n, <number> id)
+<number> v =
+ node.unset_attribute(<node> n, <number> id, <number> val)
+\stopfunctioncall
+
+Unsets the attribute with number \type {id}. If \type {val} is also supplied, it
+will only perform this operation if the value matches \type {val}. Missing
+attributes or attribute|-|value pairs are ignored.
+
+If the attribute was actually deleted, returns its old value. Otherwise, returns
+\type {nil}.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-style.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-style.tex
new file mode 100644
index 00000000000..feca120eddb
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-style.tex
@@ -0,0 +1,355 @@
+\startenvironment luatex-style
+
+\usemodule[abr-02]
+
+\setuplayout
+ [height=middle,
+ width=middle,
+ backspace=2cm,
+ topspace=10mm,
+ bottomspace=10mm,
+ header=10mm,
+ footer=10mm,
+ footerdistance=10mm,
+ headerdistance=10mm]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setuptolerance
+ [stretch,tolerant]
+
+\setuptype
+ [lines=hyphenated]
+
+\setuptyping
+ [lines=hyphenated]
+
+\setupitemize
+ [each]
+ [packed]
+
+\setupwhitespace
+ [medium]
+
+\startluacode
+ local skipped = table.tohash { 'id', 'subtype', 'next', 'prev' }
+
+ function document.functions.showfields(s)
+ local t = string.split(s,',')
+ local f = node.fields(t[1],t[2])
+ if f then
+ local d = false
+ for i=1,#f do
+ local fi = f[i]
+ if skipped[fi] then
+ -- okay
+ elseif d then
+ context(', {\tttf %s}', fi)
+ else
+ context('{\tttf %s}', fi)
+ d = true
+ end
+ end
+ end
+ end
+
+ function document.functions.showid(s)
+ local t = string.split(s,',')
+ context('{tttf %s}',node.id(t[1]))
+ if t[2] then
+ context(', {tttf %s}',node.subtype(t[2]))
+ end
+ end
+
+ function document.functions.showsubtypes(s)
+ local s = node.subtypes(s)
+ local d = false
+ for k, v in table.sortedhash(s) do
+ if d then
+ context(', %s = {\\tttf %s}',k,v)
+ else
+ context('%s = {\\tttf %s}',k,v)
+ d = true
+ end
+ end
+ end
+\stopluacode
+
+\unexpanded\def\showfields #1{\ctxlua{document.functions.showfields("#1")}}
+\unexpanded\def\showid #1{\ctxlua{document.functions.showid("#1")}}
+\unexpanded\def\showsubtypes#1{\ctxlua{document.functions.showsubtypes("#1")}}
+
+\definecolor[blue] [b=.5]
+\definecolor[red] [r=.5]
+\definecolor[green] [g=.5]
+\definecolor[maincolor] [b=.5]
+\definecolor[keptcolor] [b=.5]
+\definecolor[othercolor][r=.5,g=.5]
+
+\setupbodyfont[modern] % we need this in examples so we predefine
+
+% \doifmodeelse {atpragma} {
+%
+% % \setupbodyfont
+% % [lucidaot,10pt]
+%
+% \setupbodyfont
+% [dejavu,10pt]
+%
+% \setuphead [chapter] [style=\bfd]
+% \setuphead [section] [style=\bfb]
+% \setuphead [subsection] [style=\bfa]
+% \setuphead [subsubsection][style=\bf]
+%
+% } {
+%
+% \definetypeface[mainfacenormal] [ss][sans] [iwona] [default]
+% \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+% \definetypeface[mainfacenormal] [tt][mono] [modern] [default][rscale=1.1]
+% \definetypeface[mainfacenormal] [mm][math] [iwona] [default]
+%
+% \definetypeface[mainfacemedium] [ss][sans] [iwona-medium][default]
+% \definetypeface[mainfacemedium] [rm][serif][palatino] [default]
+% \definetypeface[mainfacemedium] [tt][mono] [modern] [default][rscale=1.1]
+% \definetypeface[mainfacemedium] [mm][math] [iwona-medium][default]
+%
+% \setupbodyfont
+% [mainfacenormal,10pt]
+%
+% \setuphead [chapter] [style=\mainfacemedium\bfd]
+% \setuphead [section] [style=\mainfacemedium\bfb]
+% \setuphead [subsection] [style=\mainfacemedium\bfa]
+% \setuphead [subsubsection][style=\mainfacemedium\bf]
+%
+% }
+
+\writestatus{luatex manual}{we assume that dejavu math is available}
+
+\setupbodyfont % assumes dejavu-math
+ [dejavu,10pt]
+
+\setuphead [chapter] [align={flushleft,broad},style=\bfd]
+\setuphead [section] [align={flushleft,broad},style=\bfb]
+\setuphead [subsection] [align={flushleft,broad},style=\bfa]
+\setuphead [subsubsection][align={flushleft,broad},style=\bf]
+
+\setuphead [chapter] [color=maincolor]
+\setuphead [section] [color=maincolor]
+\setuphead [subsection] [color=maincolor]
+\setuphead [subsubsection][color=maincolor]
+
+\definehead
+ [remark]
+ [subsubsubject]
+
+\setupheadertexts
+ []
+
+\definemixedcolumns
+ [twocolumns]
+ [n=2,
+ balance=yes,
+ before=\blank,
+ after=\blank]
+
+\definemixedcolumns
+ [threecolumns]
+ [twocolumns]
+ [n=3]
+
+\definemixedcolumns
+ [fourcolumns]
+ [threecolumns]
+ [n=4]
+
+% if we do this we also need to do it in table cells
+%
+% \setuptyping
+% [color=maincolor]
+%
+% \setuptype
+% [color=maincolor]
+
+\definetyping
+ [functioncall]
+
+\startMPdefinitions
+
+ color luaplanetcolor ; luaplanetcolor := \MPcolor{maincolor} ;
+ color luaholecolor ; luaholecolor := white ;
+ numeric luaextraangle ; luaextraangle := 0 ;
+ numeric luaorbitfactor ; luaorbitfactor := .25 ;
+
+ vardef lualogo = image (
+
+ % Graphic design by A. Nakonechnyj. Copyright (c) 1998, All rights reserved.
+
+ save d, r, p ; numeric d, r, p ;
+
+ d := sqrt(2)/4 ; r := 1/4 ; p := r/8 ;
+
+ fill fullcircle scaled 1
+ withcolor luaplanetcolor ;
+ draw fullcircle rotated 40.5 scaled (1+r)
+ dashed evenly scaled p
+ withpen pencircle scaled (p/2)
+ withcolor (luaorbitfactor * luaholecolor) ;
+ fill fullcircle scaled r shifted (d+1/8,d+1/8)
+ rotated luaextraangle
+ withcolor luaplanetcolor ;
+ fill fullcircle scaled r shifted (d-1/8,d-1/8)
+ withcolor luaholecolor ;
+ luaorbitfactor := .25 ;
+ ) enddef ;
+
+\stopMPdefinitions
+
+\startuseMPgraphic{luapage}
+ StartPage ;
+
+ fill Page withcolor \MPcolor{othercolor} ;
+
+ luaorbitfactor := 1 ;
+ picture p ; p := lualogo xsized (3PaperWidth/5) ;
+ draw p shifted center Page shifted (0,-.5ypart center ulcorner p) ;
+
+ StopPage ;
+\stopuseMPgraphic
+
+\starttexdefinition luaextraangle
+ % we can also just access the last page and so in mp directly
+ \ctxlua {
+ context(\lastpage == 0 and 0 or \realfolio*360/\lastpage)
+ }
+\stoptexdefinition
+
+\startuseMPgraphic{luanumber}
+ luaextraangle := \luaextraangle;
+ luaorbitfactor := 0.25 ;
+ picture p ; p := lualogo ;
+ setbounds p to boundingbox fullcircle ;
+ draw p ysized 1cm ;
+\stopuseMPgraphic
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\setupbackgrounds
+ [leftpage]
+ [background=page]
+
+\setupbackgrounds
+ [rightpage]
+ [background=page]
+
+\startsetups pagenumber:right
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\useMPgraphic{luanumber}}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm,x=1.5cm]
+ [frame=off,height=1cm,width=1cm,offset=overlay]
+ {\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=1cm,x=2.5cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\getmarking[chapter]}
+\stopsetups
+
+\startsetups pagenumber:left
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm,x=2.5cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\getmarking[chapter]}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm,x=1.5cm]
+ [frame=off,height=1cm,width=1cm,offset=overlay]
+ {\pagenumber}
+ \setlayerframed
+ [page]
+ [preset=leftbottom,offset=1cm]
+ [frame=off,height=1cm,offset=overlay]
+ {\useMPgraphic{luanumber}}
+\stopsetups
+
+\unexpanded\def\nonterminal#1>{\mathematics{\langle\hbox{\rm #1}\rangle}}
+
+% taco's brainwave -)
+
+\newcatcodetable\syntaxcodetable
+
+\unexpanded\def\makesyntaxcodetable
+ {\begingroup
+ \catcode`\<=13 \catcode`\|=12
+ \catcode`\!= 0 \catcode`\\=12
+ \savecatcodetable\syntaxcodetable
+ \endgroup}
+
+\makesyntaxcodetable
+
+\unexpanded\def\startsyntax {\begingroup\catcodetable\syntaxcodetable \dostartsyntax}
+\unexpanded\def\syntax {\begingroup\catcodetable\syntaxcodetable \dosyntax}
+ \let\stopsyntax \relax
+
+\unexpanded\def\syntaxenvbody#1%
+ {\par
+ \tt
+ \startnarrower
+ \maincolor #1
+ \stopnarrower
+ \par}
+
+\unexpanded\def\syntaxbody#1%
+ {\begingroup
+ \maincolor \tt #1%
+ \endgroup}
+
+\bgroup \catcodetable\syntaxcodetable
+
+!gdef!dostartsyntax#1\stopsyntax{!let<!nonterminal!syntaxenvbody{#1}!endgroup}
+!gdef!dosyntax #1{!let<!nonterminal!syntaxbody{#1}!endgroup}
+
+!egroup
+
+% end of wave
+
+\setupinteraction
+ [state=start,
+ focus=standard,
+ style=,
+ color=,
+ contrastcolor=]
+
+\placebookmarks
+ [chapter,section,subsection]
+
+\setuplist
+ [chapter,section,subsection,subsubsection]
+ [interaction=all,
+ width=3em]
+
+\setuplist
+ [chapter]
+ [style=bold,
+ color=keptcolor]
+
+\setuplist
+ [subsection,subsubsection]
+ [margin=3em,
+ width=5em]
+
+% Hans doesn't like the bookmarks opening by default so we comment this:
+%
+% \setupinteractionscreen
+% [option=bookmark]
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
new file mode 100644
index 00000000000..8ab56f85dd2
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
@@ -0,0 +1,70 @@
+\environment luatex-style
+\environment luatex-logos
+
+\startcomponent luatex-titlepage
+
+\startstandardmakeup
+
+ \switchtobodyfont
+ [mainfacemedium]
+
+ \definedfont[Bold*default at \the\dimexpr.08\paperheight\relax] \setupinterlinespace
+
+ \setlayer
+ [page]
+ {\useMPgraphic{luapage}}
+
+ \setlayerframed
+ [page]
+ [preset=middletop,
+ voffset=.05\paperheight]
+ [align=middle,
+ foregroundcolor=blue,
+ frame=off]
+ {Lua\TeX\\Reference}
+
+ \definedfont[Bold*default at 18pt] \setupinterlinespace
+
+ \setlayerframed
+ [page]
+ [preset=rightbottom,
+ offset=.01\paperheight]
+ [align=flushright,
+ foregroundcolor=blue,
+ frame=off]
+ {\doifsomething{\documentvariable{status}}{\documentvariable{status}\par}
+ \currentdate[month,space,year]\par
+ Version \documentvariable{version}}
+
+\stopstandardmakeup
+
+\startstandardmakeup
+
+ \start
+ \raggedleft
+ \definedfont[Bold*default at 48pt]
+ \setupinterlinespace
+ \blue Lua\TeX \endgraf Reference \endgraf Manual \endgraf
+ \stop
+
+ \vfill
+
+ \definedfont[Bold*default at 12pt]
+
+ \starttabulate[|l|l|]
+ \NC copyright \EQ Lua\TeX\ development team \NC \NR
+ \NC more info \EQ www.luatex.org \NC \NR
+ \NC version \EQ \currentdate \doifsomething{\documentvariable{snapshot}}{(snapshot \documentvariable{snapshot})} \NC \NR
+ \stoptabulate
+
+\stopstandardmakeup
+
+\setupbackgrounds
+ [leftpage]
+ [setups=pagenumber:left]
+
+\setupbackgrounds
+ [rightpage]
+ [setups=pagenumber:right]
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex.tex b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex.tex
new file mode 100644
index 00000000000..a9524246b9c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/luatex/luatex.tex
@@ -0,0 +1,37 @@
+% macros=mkvi
+
+% \tex vs \type vs \syntax vs. \luatex
+% \em \it \/
+
+\environment luatex-style
+\environment luatex-logos
+
+\dontcomplain
+
+\startdocument
+ [version=0.95.0,
+ status=Pre-release]
+
+\component luatex-titlepage
+
+\startfrontmatter
+ \component luatex-contents
+ \component luatex-introduction
+\stopfrontmatter
+
+\startbodymatter
+ \component luatex-enhancements
+ \component luatex-modifications
+ \component luatex-lua
+ \component luatex-languages
+ \component luatex-fonts
+ \component luatex-math
+ \component luatex-nodes
+ \component luatex-callbacks
+ \component luatex-tex
+ \component luatex-graphics
+ \component luatex-fontloader
+ \component luatex-backend
+\stopbodymatter
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-contents.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-contents.tex
new file mode 100644
index 00000000000..d7c709e2ec8
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-contents.tex
@@ -0,0 +1,9 @@
+\startcomponent spacing-contents
+
+\starttitle[title=Contents]
+
+\placelist[chapter,section]
+
+\stoptitle
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-introduction.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-introduction.tex
new file mode 100644
index 00000000000..d4d385c5e72
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-introduction.tex
@@ -0,0 +1,19 @@
+\environment spacing-style
+
+\startcomponent spacing-introduction
+
+\startchapter[title=Introduction]
+
+ In this document I will collext some remarks about spacing (related) commands
+ but it will happen stepwise. Feel free to contribute.
+
+ \blank
+
+ \startlines
+ Hans Hagen
+ Hasselt NL
+ \stoplines
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
new file mode 100644
index 00000000000..c16afbf0a69
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-linecorrection.tex
@@ -0,0 +1,108 @@
+% language=uk
+
+\environment spacing-style
+
+\startcomponent spacing-linecorrection
+
+\startchapter[title=Line correction]
+
+\startbuffer[linecorrection]
+\typebuffer
+\blank
+\enabletrackers[linecorrection.boxes]
+\getbuffer
+\disabletrackers[linecorrection.boxes]
+\blank
+\stopbuffer
+
+We really do out best to make the spacing look as good as possible
+(or at least consistent) but sometimes \TEX\ needs a bit of help.
+An example of a helper is the following:
+
+\startbuffer
+\startlinecorrection
+ \input ward
+\stoplinecorrection
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+When we use the same command with some left and/or right margins set, we get
+this:
+
+\startbuffer
+\startnarrower
+ \startlinecorrection
+ \input ward
+ \stoplinecorrection
+\stopnarrower
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Here we do obey the margins inside the correction box but the box itself is still
+as wide as the current width. A typical case where this happens is:
+
+\startbuffer
+\startitemize
+ \startitem an item:
+ \startlinecorrection
+ \input ward
+ \stoplinecorrection
+ \stopitem
+\stopitemize
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Here is a variant:
+
+\startbuffer
+\startitemize
+ \startitem a local linecorrection:
+ \startlocallinecorrection
+ \input ward
+ \stoplocallinecorrection
+ \stopitem
+\stopitemize
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Both types of correction wrap their content in a box and make sure that the
+spacing around it is visually as good as possible. The local variant uses a box
+fitting the available width taking margins into account and but resetting them
+inside the box. The normal variant applies the margins inside the box. Which one
+you use depends on the situation and content.
+
+You can pass an optional argument that indicates the amount of spacing to be
+added before and after the correction.
+
+\startbuffer
+\startlinecorrection[3*line]
+ \input ward
+\stoplinecorrection
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Normally you don't need this correction. It is mainly used for correcting spacing
+around boxed material, like \type {\framed}:
+
+\startbuffer
+before
+\startlinecorrection
+ \framed{something inbetween}
+\stoplinecorrection
+after
+\stopbuffer
+
+\getbuffer[linecorrection]
+
+Because in this document we have set the whitespace this also gets added around
+the box. So, in case your spacing around some special content looks bad, consider
+using these commands.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
new file mode 100644
index 00000000000..4261a388416
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-mkiv.tex
@@ -0,0 +1,16 @@
+\environment spacing-style
+
+\startdocument
+
+ \component spacing-titlepage
+
+ \startfrontmatter
+ \component spacing-contents
+ \component spacing-introduction
+ \stopfrontmatter
+
+ \startbodymatter
+ \component spacing-linecorrection
+ \stopbodymatter
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-style.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-style.tex
new file mode 100644
index 00000000000..cf0bae7bf9a
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-style.tex
@@ -0,0 +1,55 @@
+\startenvironment spacing-style
+
+\setupbodyfont
+ [pagella]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ topspace=15mm,
+ header=15mm,
+ footer=0pt,
+ bottomspace=20mm]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\setupwhitespace
+ [big]
+
+\definecolor
+ [blackcolor]
+ [r=0,b=0,g=0]
+
+\definecolor
+ [whitecolor]
+ [r=1,b=1,g=1]
+
+\definecolor
+ [maincolor]
+ [.25(blackcolor,green)]
+
+\definecolor
+ [extracolor]
+ [.25(whitecolor,green)]
+
+% \blackrule[color=maincolor,width=10cm,,height=10cm]
+% \blackrule[color=extracolor,width=10cm,,height=10cm]
+
+\setuptyping
+ [color=maincolor]
+
+\setuptype
+ [color=maincolor]
+
+\setuphead
+ [chapter]
+ [style=\bfd,
+ color=maincolor]
+
+\setuphead
+ [section]
+ [style=\bfc,
+ color=maincolor]
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex
new file mode 100644
index 00000000000..1f21d769a8d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/spacing/spacing-titlepage.tex
@@ -0,0 +1,37 @@
+\environment spacing-style
+
+\startcomponent spacing-titlepage
+
+% This titlepage demonstrates once again how well designed the computer modern monospaced
+% font is, especially when we look at the consistent grayness.
+
+\startMPpage
+
+ fill Page enlarged 4mm withcolor \MPcolor{maincolor} ;
+
+ draw image (
+ for i=1 upto 20 :
+ draw bottomboundary Page shifted (0,100*log(i)) ;
+ endfor ;
+ )
+ xysized (PaperWidth-6mm,PaperHeight-6mm)
+ shifted (3mm,3mm)
+ withcolor \MPcolor{extracolor}
+ withpen pencircle scaled 1mm ;
+
+ numeric a ; a := log(1)*PaperHeight/(log(20)) ;
+ numeric b ; b := log(2)*PaperHeight/(log(20)) ;
+
+ picture p ; p := textext.lrt("\ttbf Spacing in Con\TeX t") xsized(.9PaperWidth) ;
+
+ draw p
+ shifted (.05PaperWidth,(b+a)/2 - ypart center p)
+ withcolor \MPcolor{extracolor} ;
+
+ setbounds currentpicture to Page ;
+
+\stopMPpage
+
+\page[right] \setuppagenumber[number=1]
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/sql/sql-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/sql/sql-mkiv.tex
new file mode 100644
index 00000000000..520532e0bee
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/sql/sql-mkiv.tex
@@ -0,0 +1,482 @@
+% language=uk
+
+% author : Hans Hagen, PRAGMA ADE, NL
+% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported
+
+\usemodule[art-01,abr-02]
+
+\definecolor
+ [maincolor]
+ [r=.4]
+
+\setupbodyfont
+ [10pt]
+
+\setuptype
+ [color=maincolor]
+
+\setuptyping
+ [color=maincolor]
+
+\definefont
+ [TitlePageFont]
+ [file:lmmonolt10-bold.otf]
+
+\setuphead
+ [color=maincolor]
+
+\usesymbols
+ [cc]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=SQL in ConTeXt,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=SQL in \CONTEXT,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage ;
+
+ numeric w ; w := bbwidth(Page) ;
+ numeric h ; h := bbheight(Page) ;
+
+ fill Page withcolor \MPcolor{maincolor} ;
+
+ draw textext.urt("\TitlePageFont Q") xysized (1.1 w,0.9 h) shifted (-.05w,.05h) withcolor .20white ;
+ draw textext.top("\TitlePageFont SQL") xysized (0.4725w,0.13h) shifted (.675w,.24w) withcolor .60white ;
+ draw textext.top("\TitlePageFont CONTEXT") xsized (0.6 w) shifted (.675w,.10w) withcolor .60white ;
+
+ StopPage ;
+
+\stopMPpage
+
+\startsubject[title=Contents]
+
+\placelist[section][alternative=a]
+
+\stopsubject
+
+\startsection[title=Introduction]
+
+Although \CONTEXT\ is a likely candidate for typesetting content that comes from
+databases it was only in 2011 that I ran into a project where a connection was
+needed. After all, much document related typesetting happens on files or
+dedicated storage systems.
+
+Because we run most projects in an infrastructure suitable for \TEX, it made
+sense to add some helper scripts to the \CONTEXT\ core distribution that deal
+with getting data from (in our case) \MYSQL\ databases. That way we can use the
+already stable infrastructure for installing and updating files that comes with
+\CONTEXT.
+
+As \LUA\ support is nicely integrated in \CONTEXT, and as dealing with
+information from databases involves some kind of programming anyway, there is (at
+least currently) no \TEX\ interface. The examples shown here work in \CONTEXT,
+but you need to keep in mind that \LUA\ scripts can also use this interface.
+
+{\em Although this code is under construction the interfaces are unlikely to
+change, if only because we use it on production.}
+
+\stopsection
+
+\startsection[title=Presets]
+
+In order to consult a database you need to provide credentials. You also need
+to reach the database server, either by using some client program or via a
+library. More about that later.
+
+Because we don't want to key in all that information again and again, we will
+collect it in a table. This also permits us to store it in a file and load it
+on demand. For instance:
+
+\starttyping
+local presets = {
+ database = "test",
+ username = "root",
+ password = "none",
+ host = "localhost",
+ port = 3306,
+}
+\stoptyping
+
+You can put a table in a file \type {presets.lua} like this:
+
+\starttyping
+return {
+ database = "test",
+ username = "root",
+ password = "none",
+ host = "localhost",
+ port = 3306,
+}
+\stoptyping
+
+and then load it as follows:
+
+\starttyping
+local presets = table.load("presets.lua")
+\stoptyping
+
+If you really want, you can use some library to open a connection, execute a
+query, collect results and close the connection, but here we use just one
+function that does it all. The presets are used to access the database and the
+same presets will be used more often it makes sense to keep a connection open as
+long as possible. That way you can execute much more queries per second,
+something that makes sense when there are many small ones, as in web related
+services. A connection is made persistent when the presets have an \type {id}
+key, like
+
+\starttyping
+presets.id = "myproject"
+\stoptyping
+
+\stopsection
+
+\startsection[title=Templates]
+
+A query often looks like this:
+
+\starttyping
+SELECT
+ `artist`, `title`
+FROM
+ `cd`
+WHERE
+ `artist` = 'archive' ;
+\stoptyping
+
+However, often you want to use the same query for multiple lookups, in which case
+you can do this:
+
+\starttyping
+SELECT
+ `artist`, `title`
+FROM
+ `cd`
+WHERE
+ `artist` = '%artist%' ;
+\stoptyping
+
+In the next section we will see how \type {%artist%} can be replaced by a more
+meaningful value. You can a percent sign by entering two in a row: \type {%%}.
+
+As with any programming language that deals with strings natively, you need a
+way to escape the characters that fence the string. In \SQL\ a field name is
+fenced by \type {``} and a string by \type {''}. Field names can often be
+used without \type {``} but you can better play safe.
+
+\starttyping
+`artist` = 'Chilly Gonzales'
+\stoptyping
+
+Escaping of the \type {'} is simple:
+
+\starttyping
+`artist` = 'Jasper van''t Hof'
+\stoptyping
+
+When you use templates you often pass a string as variable and you don't want to
+be bothered with escaping them. In the previous example we used:
+
+\starttyping
+`artist` = '%artist%'
+\stoptyping
+
+When you expect embedded quotes you can use this:
+
+\starttyping
+`artist` = '%[artist]%'
+\stoptyping
+
+In this case the variable {artist} will be escaped. When we reuse a template we
+store it in a variable:
+
+\starttyping
+local template = [[
+ SELECT
+ `artist`, `title`
+ FROM
+ `cd`
+ WHERE
+ `artist` = '%artist%' ;
+]]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Queries]
+
+In order to execute a query you need to pass the previously discussed presets
+as well as the query itself.
+
+\starttyping
+local data, keys = utilities.sql.execute {
+ presets = presets,
+ template = template,
+ variables = {
+ artist = "Dream Theater",
+ },
+}
+\stoptyping
+
+The variables in the presets table can also be passed at the outer
+level. In fact there are three levels of inheritance: settings, presets
+and module defaults.
+
+\starttabulate
+\NC presets \NC a table with values \NC \NR
+\NC template \NC a query string \NC \NR
+\NC templatefile \NC a file containing a template \NC \NR
+\NC \em resultfile \NC a (temporary) file to store the result \NC \NR
+\NC \em queryfile \NC a (temporary) file to store a query \NC \NR
+\NC variables \NC variables that are subsituted in the template \NC \NR
+\NC username \NC used to connect to the database \NC \NR
+\NC password \NC used to connect to the database \NC \NR
+\NC host \NC the \quote {machine} where the database server runs on \NC \NR
+\NC port \NC the port where the database server listens to \NC \NR
+\NC database \NC the name of the database \NC \NR
+\stoptabulate
+
+The \type {resultfile} and \type {queryfile} parameters are used when a client
+approach is used. When a library is used all happens in memory.
+
+When the query succeeds two tables are returned: \type {data} and \type {keys}. The
+first is an indexed table where each entry is a hash. So, if we have only one
+match and that match has only one field, you get something like this:
+
+\starttyping
+data = {
+ {
+ key = "value"
+ }
+}
+
+keys = {
+ "key"
+}
+\stoptyping
+
+\stopsection
+
+\startsection[title=Converters]
+
+All values in the result are strings. Of course we could have provided some
+automatic type conversion but there are more basetypes in \MYSQL\ and some are
+not even standard \SQL. Instead the module provides a converter mechanism
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ { name = "id", type = "number" },
+ { name = "name", type = "string" },
+ { name = "enabled", type = "boolean" },
+}
+\stoptyping
+
+You can pass the converter to the execute function:
+
+\starttyping
+local data, keys = utilities.sql.execute {
+ presets = presets,
+ template = template,
+ converter = converter,
+ variables = {
+ name = "Hans Hagen",
+ },
+}
+\stoptyping
+
+In addition to numbers, strings and booleans you can also use a function
+or table:
+
+\starttyping
+local remap = {
+ ["1"] = "info"
+ ["2"] = "warning"
+ ["3"] = "debug"
+ ["4"] = "error"
+}
+
+local converter = utilities.sql.makeconverter {
+ { name = "id", type = "number" },
+ { name = "status", type = remap },
+}
+\stoptyping
+
+I use this module for managing \CONTEXT\ jobs in web services. In that case we
+need to store jobtickets and they have some common properties. The definition of
+the table looks as follows: \footnote {The tickets manager is part of the
+\CONTEXT\ distribution.}
+
+\starttyping
+CREATE TABLE IF NOT EXISTS %basename% (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `token` varchar(50) NOT NULL,
+ `subtoken` INT(11) NOT NULL,
+ `created` int(11) NOT NULL,
+ `accessed` int(11) NOT NULL,
+ `category` int(11) NOT NULL,
+ `status` int(11) NOT NULL,
+ `usertoken` varchar(50) NOT NULL,
+ `data` longtext NOT NULL,
+ `comment` longtext NOT NULL,
+
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `id_unique_index` (`id` ASC),
+ KEY `token_unique_key` (`token`)
+)
+DEFAULT CHARSET = utf8 ;
+\stoptyping
+
+We can register a ticket from (for instance) a web service and use an independent
+watchdog to consult the database for tickets that need to be processed. When the
+job is finished we register this in the database and the web service can poll for
+the status.
+
+It's easy to imagine more fields, for instance the way \CONTEXT\ is called, what
+files to use, what results to expect, what extra data to pass, like style
+directives, etc. Instead of putting that kind of information in fields we store
+them in a \LUA\ table, serialize that table, and put that in the data field.
+
+The other way around is that we take this data field and convert it back to \LUA.
+For this you can use a helper:
+
+\starttyping
+local results = utilities.sql.execute { ... }
+
+for i=1,#results do
+ local result = results[i]
+ result.data = utilities.sql.deserialize(result.data)
+end
+\stoptyping
+
+Much more efficient is to use a converter:
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ ...
+ { name = "data", type = "deserialize" },
+ ...
+}
+\stoptyping
+
+This way you don't need to loop over the result and deserialize each data
+field which not only takes less runtime (often neglectable) but also takes
+less (intermediate) memory. Of course in some cases it can make sense to
+postpone the deserialization.
+
+A variant is not to store a serialized data table, but to store a key|-|value
+list, like:
+
+\starttyping
+data = [[key_1="value_1" key_2="value_2"]]
+\stoptyping
+
+Such data fields can be converted with:
+
+\starttyping
+local converter = utilities.sql.makeconverter {
+ ...
+ { name = "data", type = utilities.parsers.keq_to_hash },
+ ...
+}
+\stoptyping
+
+You can imagine more converters like this, and if needed you can use them to
+preprocess data as well.
+
+\starttabulate[|Tl|p|]
+\NC "boolean" \NC This converts a string into the value \type {true} or \type {false}.
+ Valid values for \type {true} are: \type {1}, \type {true}, \type
+ {yes}, \type {on} and \type {t} \NC \NR
+\NC "number" \NC This one does a straightforward \type {tonumber} on the value. \NC \NR
+\NC function \NC The given function is applied to value. \NC \NR
+\NC table \NC The value is resolved via the given table. \NC \NR
+\NC "deserialize" \NC The value is deserialized into \LUA\ code. \NC \NR
+\NC "key" \NC The value is used as key which makes the result table is now hashed
+ instead of indexed. \NC \NR
+\NC "entry" \NC An entry is added with the given name and optionally with a default
+ value. \NC \NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Typesetting]
+
+For good reason a \CONTEXT\ job often involves multiple passes. Although the
+database related code is quite efficient it can be considered a waste of time
+and bandwidth to fetch the data several times. For this reason there is
+another function:
+
+\starttyping
+local data, keys = utilities.sql.prepare {
+ tag = "table-1",
+ ...
+}
+
+-- do something useful with the result
+
+local data, keys = utilities.sql.prepare {
+ tag = "table-2",
+ ...
+}
+
+-- do something useful with the result
+\stoptyping
+
+The \type {prepare} alternative stores the result in a file and reuses
+it in successive runs.
+
+\stopsection
+
+\startsection[title=Methods]
+
+Currently we have several methods for accessing a database:
+
+\starttabulate
+\NC client \NC use the command line tool, pass arguments and use files \NC \NR
+\NC library \NC use the standard library (somewhat tricky in \LUATEX\ as we need to work around bugs) \NC \NR
+\NC lmxsql \NC use the library with a \LUA\ based pseudo client (stay in the \LUA\ domain) \NC \NR
+\NC swiglib \NC use the (still experimental) library that comes with \LUATEX \NC \NR
+\stoptabulate
+
+All methods use the same interface (\type {execute}) and hide the dirty details
+for the user. All return the data and keys tables and all take care of the proper
+escaping and parsing.
+
+\stopsection
+
+\startsection[title=Helpers]
+
+There are some helper functions and extra modules that will be described when
+they are stable.
+
+There is an \quote {extra} option to the \type {context} command that can be used
+to produce an overview of a database. You can get more information about this
+with the command:
+
+\starttyping
+context --extra=sql-tables --help
+\stoptyping
+
+\stopsection
+
+\startsection[title=Colofon]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsection
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/cont-en-extra.xml b/Master/texmf-dist/doc/context/sources/general/manuals/start/cont-en-extra.xml
new file mode 100644
index 00000000000..4d41391d0a0
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/cont-en-extra.xml
@@ -0,0 +1,749 @@
+<?xml version="1.0"?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2004.11.17">
+
+<!--
+Todo:
+
+ -- bycd:section (\setuppagenumbering)
+ -- cd:sectionnumber (\setuppagenumbering)
+-->
+
+<cd:command name="textbackground" type="environment">
+ <cd:sequence>
+ <cd:string value="textbackground"/>
+ </cd:sequence>
+</cd:command>
+
+<cd:command name="textbackground">
+ <cd:sequence>
+ <cd:string value="textbackground"/>
+ </cd:sequence>
+</cd:command>
+
+<cd:command name="setuptextbackground" file="core-pgr.tex">
+ <cd:sequence>
+ <cd:string value="setuptextbackground"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="leftoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset" default="0pt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="0" default="yes"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="defineinteractionmenu" variant="1" file="core-int.tex">
+ <cd:sequence>
+ <cd:string value="defineinteractionmenu"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords interactive="exclusive">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords interactive="exclusive" list="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="overlay"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="yes"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="unknownreference">
+ <cd:constant type="yes"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="position">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupframed" file="core-rul.tex">
+ <!-- new: rulethickness -->
+ <cd:sequence>
+ <cd:string value="setupframed"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="local"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="autowidth">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="force"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="depth"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="high"/>
+ <cd:constant type="lohi"/>
+ <cd:constant type="low"/>
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="keep"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="none"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="global"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:resolve name="align"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ <cd:parameter name="topframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="bottomframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="leftframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="rightframe">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="frameoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framedepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecorner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="frameradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="screen"/>
+ <cd:constant type="color"/>
+ <cd:constant type="none"/>
+ <cd:constant type="foreground"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundscreen">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundoffset">
+ <cd:constant type="frame"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgrounddepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcorner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="corner">
+ <cd:constant type="round"/>
+ <cd:constant type="rectangular"/>
+ </cd:parameter>
+ <cd:parameter name="radius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="empty">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="namemakeup" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="name"/>
+ <cd:string value="makeup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="startmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="hiding" type="environment">
+ <cd:sequence>
+ <cd:string value="hiding"/>
+ </cd:sequence>
+ <cd:arguments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupthinrules" file="core-rul.tex">
+ <cd:sequence>
+ <cd:string value="setupthinrules"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <!--<cd:constant type="b"/>-->
+ <cd:constant type="c"/>
+ <!--<cd:constant type="d"/>-->
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupitemize" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="setupitemize"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="each"/>
+ </cd:keywords>
+ <cd:keywords optional="yes" list="yes">
+ <cd:constant type="standard" default="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="unpacked"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="autointro"/>
+ <cd:constant type="loose"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="intext"/>
+ <cd:constant type="random"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:parameter name="margin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="items">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="beforehead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="afterhead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:resolve name="align"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="indentnext"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="itemize" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="itemize"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes" list="yes">
+ <cd:constant type="a"/>
+ <cd:constant type="A"/>
+ <cd:constant type="KA"/>
+ <cd:constant type="n"/>
+ <cd:constant type="N"/>
+ <cd:constant type="m"/>
+ <cd:constant type="r"/>
+ <cd:constant type="R"/>
+ <cd:constant type="KR"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="continue"/>
+ <cd:constant type="standard" default="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="intro"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="repeat"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="setupitemize"/>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="framedtext" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="framedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ <cd:assignments optional="yes" list="yes">
+ <cd:inherit name="setupframedtexts"/>
+ </cd:assignments>
+ <!-- new -->
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="tabulate" type="environment" generated="yes">
+ <cd:sequence>
+ <cd:variable value="tabulate"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <!-- change! -->
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupcolors" file="colo-ini.tex">
+ <cd:sequence>
+ <cd:string value="setupcolors"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <!-- change! -->
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="global"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="reduction">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="rgb">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cmyk">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mpcmyk">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mpspot">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="c"/>
+ <cd:constant type="m"/>
+ <cd:constant type="y"/>
+ <cd:constant type="k"/>
+ <cd:constant type="p"/>
+ <cd:constant type="s"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="all"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:command name="setupinteraction" file="core-nav.tex">
+ <cd:sequence>
+ <cd:string value="setupinteraction"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments interactive="exclusive" list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <!-- change! -->
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="menu">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="click">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="new"/>
+ </cd:parameter>
+ <cd:parameter name="openaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closeaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="openpageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closepageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="calculate">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="symbolset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="date">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keyword">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <!-- maybe this will move elsewhere -->
+ <cd:parameter name="fieldlayer">
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+</cd:command>
+
+<cd:define name="regime">
+ <cd:constant type="Latin1"/>
+ <cd:constant type="Latin2"/>
+ <cd:constant type="Latin7"/>
+ <cd:constant type="Latin15"/>
+ <cd:constant type="iso-8859-1"/>
+ <cd:constant type="iso-8859-2"/>
+ <cd:constant type="iso-8859-7"/>
+ <cd:constant type="iso-8859-15"/>
+ <cd:constant type="cp1250"/>
+ <cd:constant type="cp1251"/>
+ <cd:constant type="cp1252"/>
+ <cd:constant type="cp1253"/>
+ <cd:constant type="cp1254"/>
+ <cd:constant type="cp1257"/>
+ <cd:constant type="viscii"/>
+ <cd:constant type="cyr"/>
+ <cd:constant type="grk"/>
+ <cd:constant type="mac"/>
+ <cd:constant type="utf8"/>
+ <cd:constant type="unicode"/>
+</cd:define>
+
+<cd:command name="enableregime" file="regi-ini.tex">
+ <cd:sequence>
+ <cd:string value="enableregime"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="regime"/>
+ </cd:keywords>
+ </cd:arguments>
+</cd:command>
+
+</cd:interface>
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.bib b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.bib
new file mode 100644
index 00000000000..ea7bbfd3192
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.bib
@@ -0,0 +1,7 @@
+@INBOOK{book01,
+ author = "Jonker, J.",
+ title = "From Hasselt to America",
+ publisher = "Bookplan Publishers",
+ year = "2012",
+ chapter = "1.2",
+}
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.pdf
new file mode 100644
index 00000000000..03c894ff45a
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.tex
new file mode 100644
index 00000000000..9c0d319f57b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/hasseltbook.tex
@@ -0,0 +1,30 @@
+
+\starttext
+
+\startstandardmakeup
+ \midaligned{\tfd Festivities in Hasselt}
+\stopstandardmakeup
+
+\completecontent
+
+\startchapter[title=Introduction]
+ An introduction.
+\stopchapter
+
+\startchapter[title=Kingsday]
+ Something about the Kingsday in Hasselt.\index{Kingsday}
+\stopchapter
+
+\startchapter[title=Hassailt]
+ Something about Hassailt.\index{Hassailt}
+\stopchapter
+
+\startchapter[title=Euifeest,reference=euifeest]
+ Something about the Euifeest.\index{Euifeest}
+\stopchapter
+
+\completeindex
+
+\stoptext
+
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex
new file mode 100644
index 00000000000..327bc8a6bf3
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-alignments.tex
@@ -0,0 +1,73 @@
+\startcomponent ma-cb-en-alignments
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Alignment]
+
+\index{alignment}
+
+\Command{\tex{setupalign}}
+\Command{\tex{setup tolerance}}
+\Command{\tex{rightaligned}}
+\Command{\tex{leftlines}}
+\Command{\tex{midaligned}}
+
+Horizontal and vertical alignment can be set up with:
+
+\shortsetup{setupalign}
+
+Single lines can be aligned with:
+
+\starttyping
+\rightaligned{}
+\leftaligned{}
+\midaligned{}
+\stoptyping
+
+An example can illustrate the alignment behavior:
+
+\startbuffer
+\leftaligned {Hasselt was built on a sandhill.}
+\midaligned {Hasselt was built on the crossing of two rivers.}
+\rightaligned {Hasselt's name stems from hazelwood.}
+\stopbuffer
+
+\typebuffer
+
+After processing this would look like:
+
+\getbuffer
+
+Alignment of a paragraph is done with:
+
+\shortsetup{startalignment}
+
+\startbuffer
+\startalignment[flushright,nothyphenated]
+ For Hasselt the 15th and 16th century were relatively unstable times.
+ There were uprises and disputes with neighbouring cities. To be
+ able to defend themselves the city council ordered a number of
+ arquebuses (very primitive firearms). Fourteen of these have survived
+ and now form one of the greatest arquebus collections in Europe.
+\stopalignment
+\stopbuffer
+
+\typebuffer
+
+This will become a rightaligned paragraph without hyphenations:
+
+\getbuffer
+
+In case of alignment you can specify a tolerance and the direction (vertical or
+horizontal). Normally the tolerance is \type{verystrict}. In colums you could
+specify \type{verytolerant}. The tolerance in this manual is:
+
+\starttyping
+\setuptolerance[horizontal,verystrict]
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex
new file mode 100644
index 00000000000..bb7ae025098
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-backpage.tex
@@ -0,0 +1,40 @@
+\startcomponent ma-cb-en-backpage
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+This manual describes some features of \CONTEXT, a document
+production system, based on \TEX.
+
+\vfil
+
+\CONTEXT\ offers the user a flexible and high quality
+typesetting environment. No in||depth knowledge of \TEX\
+is needed. The parameter driven character of \CONTEXT\
+enables users to define their own layout rather easy.
+
+\vfil
+
+\CONTEXT\ is developed and tested in a production
+environment and is used for typesetting simple books as
+well as complex documents, paper and/or screen based. This
+introduction manual describes the functionality needed for
+everyday publications, like manuals and educational
+materials.
+
+\vfil
+
+This manual is also available as an interactive document, be
+it in a bit different layout. The macro package \CONTEXT,
+some more advanced examples and additional information can
+be found at www.pragma-ade.com.
+
+\vfil
+
+PRAGMA ADE \break
+Ridderstraat 27 \break
+8061 GH Hasselt NL \break
+www.pragma-ade.com
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex
new file mode 100644
index 00000000000..1b8451934e2
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-bibliography.tex
@@ -0,0 +1,63 @@
+\startcomponent ma-cb-en-bibliography
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Bibliography]
+
+\index{bibliography}
+\index{\BIBTEX}
+
+\Command{\tex{setuppublications}}
+\Command{\tex{placepublications}}
+\Command{\tex{setupbibtex}}
+
+\CONTEXT\ support the \BIBTEX\ way of managing article and book references. The data
+is stored in a \type{.bib} file. A data entry in a \BIBTEX\ data file could be:
+
+\startbuffer
+@INBOOK{book01,
+ author = "Jonker, J.",
+ title = "From Hasselt to America",
+ publisher = "Bookplan Publishers",
+ year = "2012",
+ chapter = "1.2",
+}
+\stopbuffer
+
+\typebuffer
+
+After loading the database with \type{\setupbibtex[database=hasseltbook]} the following
+command is available:
+
+\setupbibtex[database={hasseltbook},sort=author]
+\setuppublications[refcommand=authoryear]
+
+\startbuffer
+Please refer to \cite[book01] for more information on famous people
+that were born in Hasselt.
+\stopbuffer
+
+\typebuffer
+
+Which would produce:
+
+\getbuffer
+
+In an appendix you can place the complete book list with:
+
+\startbuffer
+\placepublications[criterium=text]
+\stopbuffer
+
+\typebuffer
+
+At this moment (2013 -- 2014) the bibliography mechanism is being completely
+overhauled, so please visit the \goto {\CONTEXTWIKI} [ url
+(http://wiki.contextgarden.net) ] and the \goto {Pragma ADE website} [ url
+(http://www.pragma-ade.com/overview.htm) ] regularly for information.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex
new file mode 100644
index 00000000000..3919ccb012e
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-chemical.tex
@@ -0,0 +1,77 @@
+\startcomponent ma-cb-en-chemical
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Chemical stuf,reference=chemical]
+
+\index{chemistry}
+\index{chemical equitation}
+
+\Command{\tex{}chemical}
+
+Chemical structures may look very impressive.
+
+\startbuffer
+\startchemical[scale=small,width=fit,top=3000,bottom=3000]
+ \chemical[SIX,SB2356,DB14,Z2346,SR3,RZ3,SR6,-RZ6,+RZ6]
+ [C,N,C,C,H,H]
+ \chemical[PB:Z1,ONE,Z0,MOV8,Z0,SB24,DB7,Z27,PE][C,C,CH_3,O]
+ \chemical[PB:Z5,ONE,Z0,MOV6,Z0,SB24,DB7,Z47,PE][C,C,H_3C,O]
+ \chemical[SR24,RZ24][CH_3,H_3C]
+ \bottext{Compound A}
+\stopchemical
+\stopbuffer
+
+\placeformula[-]
+\startformula
+ \getbuffer
+\stopformula
+
+\CONTEXT\ relies on \METAPOST\ to draw these kind of chemical structures.
+Although these chemical structures are defined with only two or three commands,
+it takes some practice to get the right results. This is how the input looks:
+
+\typebuffer
+
+Chemical reactions can be typeset within a paragraph or as a display formula with
+the \type{\inlinechemical} and \type{\startchemicalformula} commands:
+
+\startbuffer
+\definefloat
+ [chemicalformula]
+ [chemicalformulas]
+
+One of the steps in the Hasselt canal water treatment is the removal of
+phosphate by means of a chemical reaction with iron:
+
+\placechemicalformula[none][]{}
+ {\startchemicalformula
+ \chemical{Fe(OH)_3}{iron hydroxide}
+ \chemical{PLUS}
+ \chemical{H_3PO_4}{phosphoric acid}
+ \chemical{GIVES}{\hphantom{whatever}}
+ \chemical{FePO_4}{iron phosphate}
+ \chemical{PLUS}
+ \chemical{H_2O}{water}
+ \stopchemicalformula}
+
+The \inlinechemical{FePO_4} is a solid and precipitates in water. It
+is filtered and re-used as a furtilizer resource.
+\stopbuffer
+
+\getbuffer
+
+This is defined by:
+
+\typebuffer
+
+The use of the chemical commands is described in the \goto{PPCHTeX Manual}[ url(manual:chemic) ]
+and the example manual \goto{Chemical Formulas in \CONTEXT} [ url(manual:chemic-ex) ].
+
+\stopchapter
+
+\stopcomponent
+
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex
new file mode 100644
index 00000000000..b0e416ee0de
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-citations.tex
@@ -0,0 +1,64 @@
+\startcomponent ma-cb-en-citations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Citations and quotations, reference=quotations]
+
+\index{citation}
+\index{quote}
+
+\Command{\tex{quote}}
+
+The consistent use of quote and quotation marks in the running text is invoked by
+the use of \type{\quote} or \type{\quotation}. For longer text fragments you can use:
+
+\shortsetup{startquotation}
+
+\startbuffer
+In the book \quote{Hasselt, beelden van een middeleeuwse stad} it says:
+\startquotation
+Het stadhuis wordt voor het eerst vermeld in 1431. Oorspronkelijk
+is het een houten huis, dat wordt afgebroken om plaats te maken voor
+een nieuw stadhuis van steen. Dit wordt echter halverwege de 16e eeuw
+ook afgebroken en vervangen door een nog groter pand. Het nieuwe
+stadhuis wordt weer in dezelfde fraaie stijl opgebouwd. De bestuurders
+laten daarmee zien dat het is gebouwd in een tijd van grote welvaart.
+\stopquotation
+\stopbuffer
+
+\typebuffer
+
+In the example below you can see that quotation is language sensitive:
+
+\startbuffer
+\nl Hij zei tegen me: \quotation{In Hasselt noemen ze dat
+ \quote{noaberschop} of zoiets.}
+
+\en He told me: \quotation{In Hasselt they call this
+ \quote{noaberschop} or something like that.}
+
+\de Er sagte zu mir: \quotation{In Hasselt nennt man das
+ \quote{noaberschop} oder so etwas.}
+
+\fr Il a dit: \quotation{À Hasselt on c'appelle \quote{noaberschop}
+ ou quelque chose comme ça.}
+\stopbuffer
+
+\typebuffer
+
+Note the automatic change of the quotation marks in case of a quote within a
+quote.
+
+\startpacked
+\getbuffer
+\stoppacked
+
+You can alter the default settings with:
+
+\shortsetup{setuplanguage}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex
new file mode 100644
index 00000000000..1cfeadf9ae1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-color.tex
@@ -0,0 +1,71 @@
+\startcomponent ma-cb-en-color
+
+\project ma-cb
+
+\startchapter[title=Color]
+
+\index{color}
+
+\Command{\tex{setupcolors}}
+\Command{\tex{color}}
+\Command{\tex{definecolor}}
+
+Text, frames or backgrounds can be set in color with:
+
+\shortsetup{color}
+
+Default the basic colors are available. Basic colors are for example
+red, white and blue. A color like orange can be defined with:
+
+\shortsetup{definecolor}
+
+You can define orange like this:
+
+\startbuffer[a]
+\definecolor [darkorange] [c=0.0,m=0.60,y=1.00,k=0.0]
+\definecolor [middleorange] [.5(darkorange)]
+\stopbuffer
+
+\typebuffer[a]
+
+\getbuffer[a]
+
+It is of good practice to check (combinations of) colors on a larger
+surface:
+
+\startbuffer
+\blackrule[width=\hsize,height=1cm,color=red,after=]
+\blackrule[width=\hsize,height=1cm,color=white,after=]
+\blackrule[width=\hsize,height=1cm,color=blue,after=]
+\blackrule[width=\hsize,height=1cm,color=darkorange]
+\stopbuffer
+
+\typebuffer
+
+so you can see if they fit together:
+
+\blank
+
+\getbuffer
+
+A color can be invoked in a number of ways:
+
+\startbuffer
+\startcolor[red]
+On {\darkorange Kingsday} {\blue Hasselt} turns into a
+\color[darkorange]{colorfull} city.
+\stopcolor
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+More information on the use of color models, transparency and palets can be found
+on the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Color) ]
+and in the
+\goto {\em Color Separation} [ url (manual:color) ] manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex
new file mode 100644
index 00000000000..06bb3025994
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-columns.tex
@@ -0,0 +1,154 @@
+\startcomponent ma-cb-en-columns
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Columns]
+
+\index{columns}
+
+\Command{\tex{startcolums}}
+\Command{\tex{setupcolumns}}
+\Command{\tex{column}}
+
+Simple sections of text can be typeset in columns. If you preceed a text fragment
+by \type{\startcolumns} and close the text fragment by \type{\stopcolumns}
+everything in between will be set in columns.
+
+\shortsetup{startcolumns}
+
+Let's give an example:
+
+\startbuffer
+\startcolumns[n=3,tolerance=verytolerant]
+ Hasselt is an old Hanseatic City, situated 12~km north of Zwolle
+ at the river Zwartewater.
+
+ ...
+
+ Furthermore some events of special interest should be
+ mentioned. Every year at the end of August Hasselt celebrates
+ the \quote{Eui Festival} (hay festival).
+\stopcolumns
+\stopbuffer
+
+\typebuffer
+
+\startbuffer
+\hyphenation{Ste-pha-nus}
+\startcolumns[n=3,tolerance=verytolerant]
+Hasselt is an old Hanseatic City, situated 12~km north of Zwolle at
+the river Zwartewater.
+
+The city has a long history since obtaining the city charter around
+1252. Part and parcel of this history can be traced back to a large
+number of monuments to be admired in the city center.
+
+There you will find the St. Stephanus church, a late gothic church
+dating back to 1479 with a magnificent organ. The former Municipal
+Building is situated on The Market Place. Constituted between 1500
+and 1550 it houses a large collection of weapons, amongst which one
+of the largest collection of black powder guns (haakhussen) in the
+whole world should be mentioned.
+
+Furthermore there is a corn windmill \quote{The Swallow}, dating back to
+1748 as well as the \quote{Stenendijk}, a unique embankment and the last
+shell limekiln in Europe still in full operation.
+
+The city center with the townmoat adorned by lime-trees, the Van
+Stolkspark and the hustle and bustle at the docks are ideally suited
+for a stroll.
+
+The area around Hasselt is also worth mentioning. In wintertime
+polder Mastenbroek harbours large numbers of geese. In summertime the
+hamlets Gen\-ne, Streukel and Celle\-mui\-den form, together with the very
+rare lapwing flowers (Lat. Fritillaria meleagris) found on the banks
+of the river Zwatewater, the ideal surroundings for walking or
+cycling trips.
+
+Hasselt also is a very important center for watersports. The lakes of
+northwest Overijssel, the river IJssel, the Overijsselse Vecht and
+the Randmeren are within easy reach from the yacht harbour `De
+Molenwaard'. Sailing, fishing, swimming and ca\-noe\-ing can be fully
+enjoyed in Hasselt.
+
+Furthermore some events of special interest should be
+mentioned. Every year at the end of August Hasselt celebrates the
+\quote{Eui Festival} (hay festival).
+\stopcolumns
+\stopbuffer
+
+The result will be a three column text.
+
+\start
+\switchtobodyfont[9pt]
+\getbuffer
+\stop
+
+If possible a new column can be enforced with \type{\column}. You can set up
+columns with:
+
+\shortsetup{setupcolumns}
+
+In most cases you will obtain a better result by type setting the text on
+\quote{grid}. This is done by typing \type{grid=yes} in the command \type
+{\setuplayout}.
+
+If you want to use columns within a framed text \type{\start ... \stopframedtext}
+there is the simple column mechanism.
+
+\startbuffer
+\startframedtext[background=color,backgroundcolor=gray]
+\startsimplecolumns
+ In Hasselt's local newspaper there was a column on the
+ local customs during New Years Eve.
+ ...
+ \midaligned{\inlinechemical{CaC_2,+,2H_2O,GIVES,C_2H_2(g),+,Ca(OH)_2}}
+ ...
+ Nowadays the heavy metal lid of the milk can is replaced by
+ a football. This does not reduce the sound but it is much
+ saver.
+\stopsimplecolumns
+\stopbuffer
+
+\typebuffer
+
+\startbuffer
+\startframedtext[background=color,backgroundcolor=gray,width=\textwidth]
+\startsimplecolumns
+ In Hasselt's local newspaper there was a column on the
+ local customs during new years Eve. Next to the more
+ general custom of eating Dutch doughnuts (oliebollen)
+ and lighting fireworks there is the carbide shooting.
+ What you need is an oldfashioned metal milk can, carbide,
+ a little water and a lighter.
+
+ The carbide and water is mixed in the closed milk can and
+ will produce \inlinechemical{C_2H_2} gas (acetylene), via:
+
+ \midaligned{\inlinechemical{CaC_2,+,2H_2O,GIVES,C_2H_2 (g),+,Ca(OH)_2}}
+
+ The volatile acetylene gas in the milk can is ignited via a small
+ opening in the can. The result is a very loud detonation and the lid
+ flies off.
+
+ It will not surprise you that Hasselts youth has a designated
+ shooting ground for carbide shooting. Nowadays the heavy
+ metal lid of the milk can is replaced by a football. This
+ does not reduce the sound but it is much saver!
+\stopsimplecolumns
+\stopframedtext
+\stopbuffer
+
+This will result in:
+
+\getbuffer
+
+There is an advanced column mechanism available that is described in the
+\goto {\em Columns} [ url (manual:columns)
+] manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex
new file mode 100644
index 00000000000..d14d9d2021f
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commandlist.tex
@@ -0,0 +1,16 @@
+\startcomponent ma-cb-en-commandlist
+
+\project ma-cb
+
+Here we summarize the commands we introduced in the previous chapters. This is
+just a selection of the whole repertoire of \CONTEXT\ commands. Those who want to
+see them all can take a look at the more extensive manual or the {\em Quick
+Reference Manuals} that give a complete overview of all \CONTEXT||commands.
+
+Arguments that are typeset {\sl slanted} are optional and can be omited. The
+number points to the page where the command is explained. Black arrows indicate
+that the command is only of use in interactive documents and gray arrows tell us
+that additional functionality is provided in interactive mode. Keep in mind that
+we only show the commands we described in this manual, there are many more.
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex
new file mode 100644
index 00000000000..df0d2a29315
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-commands.tex
@@ -0,0 +1,94 @@
+\startcomponent ma-cb-en-commands
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Defining commands / macros]
+
+\CONTEXT\ is a set of macros based on \TEX. \TEX\ is a programming language as
+well as a typographical system. This means that you can do the programming
+yourself if you need that kind of flexability.
+
+You can define a new command with:
+
+\shortsetup{define}
+
+The next example will explain its meaning.
+
+You may have a well illustrated document and you are tired of typing:
+
+\startbuffer
+\placefigure
+ [here,force]
+ [fig:logical name]
+ {Caption.}
+ {\externalfigure[filename][width=5cm]}
+\stopbuffer
+
+\typebuffer
+
+You could define your own command with a few variables like:
+
+\startitemize[packed]
+\item logical name
+\item caption
+\item file name
+\stopitemize
+
+Your command definition and call could look something like
+this:
+
+\startbuffer
+\define[3]\myputfigure
+ {\placefigure
+ [here,force][fig:#1]
+ {#2}{\externalfigure[#3][width=5cm]}}
+
+\myputfigure{lion}{The Dutch lion is a sentry.}{ma-cb-13}
+\stopbuffer
+
+\typebuffer
+
+From then on the \type{\myputfigure} is available.
+Between brackets \type{[3]} indicates that you want to use three variables
+\type{#1}, \type{#2} and \type{#3}. In the command call \type{\myputfigure} you
+have to place these variables between curly braces. The result is shown in
+\in{figure}[fig:lion].
+
+\getbuffer
+
+Very sophisticated commands can be programmed, but this is left to your own
+inventiveness.
+
+In addition to defining commands you can also define \type{\start...\stop}
+command pairs.
+
+\shortsetup{definestartstop}
+
+For example:
+
+\startbuffer
+\definestartstop
+ [attention]
+ [before=\blank\startmarginrule,
+ after=\stopmarginrule\blank]
+
+\startattention
+{\em Hasselter Juffers} are sweet cookies but the name is no
+coincidence. On July 21 in 1233 the {\em Zwartewaterklooster}
+(Blackwater Monastery) was founded. The monastery was meant
+for unmarried girls and women belonging to the nobility of
+Hasselt. These girls and women were called {\em juffers}.
+\stopattention
+\stopbuffer
+
+\typebuffer
+
+This will result in:
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex
new file mode 100644
index 00000000000..59c17600483
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-composedcharacters.tex
@@ -0,0 +1,55 @@
+\startcomponent ma-cb-en-composedcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Composite characters]
+
+\index{accents}
+\index{foreign characters}
+
+In \in{chapter}[special chars] you have already seen that you have to type more
+than one token to obtain special characters like \# \$ \% \& \_ $\{$ and $\}$.
+
+Characters with accents for example can be composed or coded with specific
+\CONTEXT\ commands in order to display them on paper. In case you have a text
+editor that can display utf8 you can type the composed characters directly.
+
+It is not within the scope of this manual to go into accented characters in math
+mode. See the {\TEX Book} by Donald E. Knuth on that subject.
+
+\in{Table}[tab:composed-characters] shows a few examples and the way you can code
+composed characters.
+
+\placetable
+ [here,force]
+ [tab:composed-characters]
+ {Composed characters.}
+ {\starttable[|c|l|l|c|]
+ \HL
+ \NC \bf Character \NC \bf Composed \NC \bf \CONTEXT\ command \NC \bf UTF8 \NC\SR
+ \HL
+ \NC ü \NC \type{\"u} \NC \type{\uacute} \NC \type{ü} \NC\FR
+ \NC é \NC \type{\'e} \NC \type{\egrave} \NC \type{é} \NC\MR
+ \NC â \NC \type{\^a} \NC \type{\acircumflex} \NC \type{â} \NC\MR
+ \NC ä \NC \type{\"a} \NC \type{\aacute} \NC \type{ä} \NC\MR
+ \NC à \NC \type{\`a} \NC \type{\agrave} \NC \type{à} \NC\MR
+ \NC å \NC \type{\aa} \NC \type{\aring} \NC \type{å} \NC\MR
+ \NC ç \NC \type{\c{c}} \NC \type{\ccedilla} \NC \type{ç} \NC\MR
+ \NC ï \NC \type{\"{\i}} \NC \type{\idiaeresis} \NC \type{ï} \NC\MR
+ \NC î \NC \type{\^{\i}} \NC \type{\icircumflex} \NC \type{î} \NC\MR
+ \NC Ä \NC \type{\"A} \NC \type{\Adiaeresis} \NC \type{Ä} \NC\MR
+ \NC Å \NC \type{\AA} \NC \type{\Aring} \NC \type{Å} \NC\MR
+ \NC É \NC \type{\'E} \NC \type{\Egrave} \NC \type{É} \NC\MR
+ \NC æ \NC \type{\ae} \NC \type{\aeligature} \NC \type{æ} \NC\MR
+ \NC Æ \NC \type{\AE} \NC \type{\AEligature} \NC \type{Æ} \NC\MR
+ \NC ÿ \NC \type{\"y} \NC \type{\ydiaeresis} \NC \type{ÿ} \NC\LR
+ \HL
+ \stoptable}
+
+The character you want to display should be in the font.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex
new file mode 100644
index 00000000000..01c8fb60868
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-descriptions.tex
@@ -0,0 +1,94 @@
+\startcomponent ma-cb-en-descriptions
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Definitions]
+
+\index{definition}
+
+\Command{\tex{definedescription}}
+\Command{\tex{setupdescriptions}}
+
+If you want to display notions, concepts and ideas in a consistent manner you can
+use:
+
+\shortsetup{definedescription}
+
+For example:
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=serried,headstyle=bold,width=broad]
+
+\concept{Hasselter juffer} A sort of biscuit made of puff pastry and
+covered with sugar. It tastes very sweet. \par
+\stopbuffer
+
+\typebuffer
+
+It would look like this:
+
+\getbuffer
+
+But you can also choose other layouts:
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=top,
+ inbetween={\blank[none]},
+ headstyle=bold,
+ width=broad,
+ style=slanted]
+
+\concept{Hasselter bitter} A very strong alcoholic drink (up to 40\%)
+mixed with herbs to give it a special taste. It is sold in a stone
+flask and it should be served {\em ijskoud} (as cold as ice). \par
+
+\definedescription
+ [concept]
+ [alternative=inmargin,headstyle=bold,width=broad]
+
+\concept{Euifeest} A harvest home to celebrate the end of a period of
+hard work. The festivities take place in the last week of August. \par
+\stopbuffer
+
+\start
+\getbuffer
+\stop
+
+If you want to avoid the \type{\par} or when you have more than one paragraph in
+the definition you can use the \type{\start...\stop} construct.
+
+\startbuffer
+\definedescription
+ [concept]
+ [alternative=right,
+ headstyle=bold,
+ width=broad]
+
+\startconcept{Euifeest} A harvest home to celebrate the end of a
+period of hard work.
+This event takes place at the end of August and lasts one week. The
+city is completely illuminated and the streets are decorated. This
+feast week ends with a {\em Braderie}.
+\stopconcept
+\stopbuffer
+
+\typebuffer
+
+This would become:
+
+\getbuffer
+
+Layout is set up within the second bracket pair of
+\type{\definedescription[][]}. But you can also use:
+
+\shortsetup{setupdescriptions}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex
new file mode 100644
index 00000000000..94fdb7ea2ea
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-document.tex
@@ -0,0 +1,117 @@
+\startcomponent ma-cb-en-document
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=How to create a textbook]
+
+\index{input file}
+
+Let's assume you want to create a simple textbook. It has some structure and
+contains a title page, a few chapters, sections and sub sections. Of course there
+is a table of contents.
+
+\CONTEXT\ can create such a document automatically if you offer the right input
+by means of a file. So first you have to create an input file. An input file
+consists of a name and an extension. You can choose any name you want but the
+extension has to be \type{.tex}. If you create a file with the name
+\type{mybook.tex} you will find no difficulties in running \CONTEXT.
+
+An \pagereference[inputfile] input file could look like this:
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\placecombinedlist[content]
+
+\chapter{Introduction}
+
+... ties between Hasselt and America ...
+
+\chapter[rensselaer]{The Rensselaer family}
+
+\section{The first born}
+
+... was born in the year ...
+
+\section{The early years}
+
+... in those days Hasselt was ...
+
+\section{Living and workin in America}
+
+... life in America was ...
+
+\chapter[lansing]{The Lansing family}
+
+... the Lansing family was also ...
+
+\chapter[cuyler]{The Cuyler family}
+
+... much later Tydeman Cuyler ...
+
+\stoptext
+\stopbuffer
+
+{\switchtobodyfont[9pt]\typebuffer}
+
+\CONTEXT\ expects a plain \ASCII\ input file. Of course you can use any
+text|-|editor, as long as you save the file as standard \ASCII\ (also called txt
+file) with the extension \type{.tex}. Note that spaces in the filename are
+not allowed.
+
+The input file contains the text you want to typeset and the \CONTEXT\ commands.
+A \CONTEXT\ command begins with a backslash~\tex{}. With the command
+\type{\starttext} you indicate the beginning of your text.
+
+A command is sometimes followed by an argument which is enclosed by curly braces
+\type{{}}. The command \type{\chapter[cuyler]{The Cuyler family}} that you see in
+the example will have its effect on {\em The Cuyler family}. Its actions will
+have effect on the design, typography and structure. The actions may be:
+
+\startitemize[n,packed]
+\item start a new page
+\item increase chapter number by one
+\item place chapter number in front of chapter title
+\item reserve some vertical space
+\item use a big font
+\item put chapter title (and page number) in the table of contents
+\stopitemize
+
+Other actions concerning running heads, number resetting and interactivity are
+disregarded at this moment.
+
+Sometimes you will see two brackets (\type{[]}) directly after the command. These
+brackets are used to feed specific options to the command. Further on in this
+manual you will get more information on these brackets.
+
+The commands in your input file can have the following appearance:
+
+\starttabulate[|||]
+\HL
+\NC \bf Appearance of command \NC \bf Example \NC\NR
+\HL
+\NC \type{\startcommand ... \stopcommand} \NC \type{\starttext ... \stoptext} \NC\NR
+\NC \type{\startcommand[] ... \stopcommand} \NC \type{\startitemize[packed] ... \stopitemize} \NC\NR
+\NC \type{\command} \NC \type{\item} \NC\NR
+\NC \type{\command[]} \NC \type{\in[cuyler]} \NC\NR
+\NC \type{\command{}[]} \NC \type{\at{page}[cuyler]} \NC\NR
+\NC \type{\command{}} \NC \type{\index{America}} \NC\NR
+\NC \type{\command[]{}} \NC \type{\chapter[cuyler]{The Cuyler family}} \NC\NR
+\HL
+\stoptabulate
+
+If you have \CONTEXT\ process the above example file, you would obtain a very
+simple document with a title page, a few numbered chapters and section headers
+and a table of content (because of \type{\placecombinedlist[content]}).
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex
new file mode 100644
index 00000000000..6f2fa5f22c9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-enumerations.tex
@@ -0,0 +1,106 @@
+\startcomponent ma-cb-en-enumerations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Numbered definitions]
+
+\index{numbered definition}
+
+\Command{\tex{defineenumeration}}
+\Command{\tex{setupenumerations}}
+
+With \type{\defineenumeration} you can number text elements like remarks or
+questions. If you want to make numbered remarks in your document you use:
+
+\shortsetup{defineenumeration}
+
+For example:
+
+\startbuffer[a]
+\defineenumeration
+ [remark]
+ [alternative=top,
+ text=Remark,
+ inbetween={\blank[none]},
+ after=\blank]
+\stopbuffer
+
+\typebuffer[a]
+
+Now the new commands \type{\remark}, \type{\subremark}, \type{\resetremark} and
+\type{\nextremark} are available and you can type remarks like this:
+
+\startbuffer[b]
+\remark In the early medieval times Hasselt was a place of
+pilgrimage. The {\em Heilige Stede} (Holy Place) was torn down during
+the Reformation. In 1930, after 300 years, the {\em Heilige Stede} was
+reopened.
+
+\subremark Nowadays the {\em Heilige Stede} is closed again but once
+a year an open air service is held on the same spot. \par
+\stopbuffer
+
+\typebuffer[b]
+
+This becomes:
+
+\start
+\getbuffer[a]\getbuffer[b]
+\stop
+
+You can reset numbering with \type{\resetremark} or \type{\resetsubremark} or
+increment a number with \type{\nextremark} or \type{\nextsubremark}. This is
+normally done automatically per chapter, section or whatever.
+
+You can set up the layout of \type{\defineenumeration} with:
+
+\shortsetup{setupenumerations}
+
+You can also vary the layout of \type{remark} and \type{subremark} in the example
+above with:
+
+\starttyping
+\setupenumeration[remark][headstyle=bold]
+\setupenumeration[subremark][headstyle=slanted]
+\stoptyping
+
+If a number becomes obsolete you can type:
+
+\starttyping
+\remark[-]
+\stoptyping
+
+If the \type{remark} contains several paragraphs you should use the command
+pair \type{\start ... \stopremark} that becomes available after defining
+\type{remark} with \type{\defineenumeration[remark]}.
+
+\startbuffer[c]
+\setupenumeration
+ [remark]
+ [alternative=hanging,
+ width=broad]
+
+\startremark
+In the early medieval times Hasselt was a place of pilgrimage. The
+{\em Heilige Stede} (Holy Place) was torn down during the
+Reformation.
+
+After 300 years in 1930 the {\em Heilige Stede} was reopened.
+Nowadays the {\em Heilige Stede} is closed again but once a year an
+open air service is held on the same spot.
+\stopremark
+\stopbuffer
+
+\typebuffer[c]
+
+So the example above would look like this:
+
+\start
+\getbuffer[a]\getbuffer[c] \par
+\stop
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex
new file mode 100644
index 00000000000..229cb66bc48
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-errors.tex
@@ -0,0 +1,79 @@
+\startcomponent ma-cb-en-errors
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=trouble,title=Problems during processing]
+
+\index{errors}
+\index{problems}
+
+If processing is not succesful ---for example because you typed \type{\stptext}
+instead of \type{\stoptext}--- \CONTEXT\ produces a \type{ ? } on your screen
+and tells you it has just processed an error. It will give you some basic
+information on the type of error and the line number where the error becomes
+effective.
+
+At the instant of \type{ ? } you can type:
+
+\starttabulate[|||]
+\NC \type{H} \NC for help information on your error \NC\NR
+\NC \type{I} \NC for inserting the correct \CONTEXT\ command \NC\NR
+\NC \type{Q} \NC for quiting and entering batch mode \NC\NR
+\NC \type{X} \NC for exiting the running mode \NC\NR
+\NC \Enter \NC for ignoring the error \NC\NR
+\stoptabulate
+
+Most of the time you will type \Enter\ and processing will continue. Then you can
+edit the input file and fix the error.
+
+Some errors will produce a~\type{ * } on your screen and processing will stop.
+This error is due to a fatal error in your input file. You can't ignore this
+error and the only option you have is to type \type{\stop} or {\sc Ctrl}~Z. The
+program will be halted and you can fix the error in your text editor.
+
+\startframedtext[width=\hsize]
+A well known error is:
+
+\starttyping
+! I can't write on file 'myfile.pdf'.
+Please type another filename for output:
+\stoptyping
+
+This error is due to the fact that the file \type{myfile.pdf} is stil open
+in \READER.
+
+\blank
+
+The best way to proceed is:
+
+\startitemize[packed]
+\item close the file in \READER
+\item type \Enter\ at the console
+\stopitemize
+\stopframedtext
+
+Sometimes the error messages are very obscure. Finding the location of the error
+in an extensive document can then be a tedious job. You could try to isolate
+the error:
+
+\startitemize[packed]
+\item open the file in your text editor
+\item save a copy of your file (to be on the safe side)
+\item isolate the error
+ \startitemize[n,packed]
+ \item place a \type{\stoptext} command higher up in your text
+ \item process the file
+ \item repeat step 1 and 2 until the file processes correctly
+ \stopitemize
+\item study the content that produces the error
+\item fix the error
+\item place the \type{\stoptext} command after the corrected error
+\item process your file
+\item etc.
+\stopitemize
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex
new file mode 100644
index 00000000000..90f24935948
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-figures.tex
@@ -0,0 +1,258 @@
+\startcomponent ma-cb-en-figures
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=figures,title=Figures]
+
+\index{figure}
+\seeindex{picture}{figure}
+\index{floating blocks}
+
+\Command{\tex{placefigure}}
+\Command{\tex{startfiguretext}}
+\Command{\tex{setupfigures}}
+\Command{\tex{startcombination}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{externalfigure}}
+
+Images can be placed in your document with the command \type{\externalfigure}.
+
+\startbuffer
+\externalfigure
+ [cow.pdf]
+ [width=.1\textwidth,
+ frame=on,
+ framecolor=gray,
+ frameoffset=3pt,
+ rulethickness=3pt,
+ framecorner=round]
+\stopbuffer
+
+\typebuffer
+
+Such an image will be placed on the location where you defined it \space \getbuffer
+\space and can have some strange effects on the surrounding white space. By the way,
+the cow image is always available for \CONTEXT\ users which is very convenient when
+you are testing the figure related commands.
+
+You can use the command \type{\placefigure} to influence the positioning of
+images in your document.
+
+\startbuffer
+\placefigure
+ [][fig:church]
+ {Stephanus Church.}
+ {\externalfigure[ma-cb-24][width=.4\textwidth]}
+\stopbuffer
+
+\typebuffer
+
+After processing this will come out as \in{figure}[fig:church] at the first
+available location.
+
+\getbuffer
+
+The command \type{\placefigure} handles numbering and vertical spacing before and
+after your figure. Furthermore this command initializes a float mechanism, which
+means that \CONTEXT\ looks whether there is enough space for your figure on the
+page. If not, the figure will be placed at another location and the text carries
+on, while the figure floats in your document until the optimal location is found.
+You can influence this mechanism within the first bracket
+pair.
+
+The command \type{\placefigure} is a predefined example of:
+
+\shortsetup{placefloat}
+
+A number of basic options is described in \in{table}[tab:placefigure].
+
+\placetable
+ [here]
+ [tab:placefigure]
+ {Options in \type{\placefigure}.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC here \NC put figure at this location if possible \NC\FR
+\NC force \NC force figure placement here \NC\MR
+\NC page \NC put figure on its own page \NC\MR
+\NC top \NC put the figure at the top of the page \NC\MR
+\NC bottom \NC put the figure at the botom of the page \NC\MR
+\NC left \NC place figure at the left margin \NC\MR
+\NC right \NC place figure at the right margin \NC\MR
+\NC margin \NC place figure in the margin \NC\MR
+\NC none \NC set no caption \NC\LR
+\HL
+\stoptable
+
+The second bracket pair is used for cross-referencing. You can refer to this
+particular figure by typing:
+
+\starttyping
+\in{figure}[fig:church]
+\stoptyping
+
+The first brace pair is used for the caption. You can type any text you want. The
+figure labels are set up with \type{\setupcaptions} and the numbering is (re)set
+by \type{\setupnumbering} (see \in{paragraph}[floatingblocks]).
+
+The second brace pair is used for defining the figure and addressing the file
+names of external figures.
+
+In the next example you see how \inframed{Hasselt} is defined within
+the last brace pair to show you the function of \type{\placefigure{}{}}.
+
+\startbuffer
+\placefigure
+ {The boundaries of Hasselt.}
+ {\framed{\tfd Hasselt}}
+\stopbuffer
+
+\typebuffer
+
+This will produce:
+
+\getbuffer
+
+However, your images are often created using programs like Illustrator and photos
+are --- after scanning --- improved in packages like PhotoShop. Then the images
+are available as files. \CONTEXT\ supports image file types like \type {JPG},
+\type {PNG} and (pages from) \type {PDF} files as well as \METAPOST\ output
+(\type {MPS} files). Users normally can trust \CONTEXT\ to find the best possible
+file type.
+
+In \in{figure}[fig:canals] you see a photo and a graphic combined into one
+figure.
+
+\startbuffer
+\placefigure
+ [here,force]
+ [fig:canals]
+ {The Hasselt Canals.}
+ {\startcombination[2*1]
+ {\externalfigure[ma-cb-03][width=.4\textwidth]}{a bitmap picture}
+ {\externalfigure[ma-cb-00][width=.4\textwidth]}{a vector graphic}
+ \stopcombination}
+\stopbuffer
+
+\getbuffer
+
+You can produce this figure by typing something like:
+
+\typebuffer
+
+In this figure two pictures are combined with:
+
+\shortsetup{startcombination}
+
+The \type{\start ...\stopcombination} pair is used for
+combining two pictures in one figure. You can type the number of pictures within
+the bracket pair. If you want to display one picture below the other you would
+have typed \type{[1*2]}. You can imagine what happens when you combine 6~pictures
+as \type{[3*2]} (\type{[rows*columns]}).
+
+The examples shown above are enough for creating illustrated documents. Sometimes
+however you want a more integrated layout of the picture and the text. For that
+purpose you can use \type{\start ...\stopfiguretext} command pair.
+
+\startbuffer
+\startfiguretext
+ [left,none]
+ [fig:citizens]
+ {}
+ {\externalfigure[ma-cb-18][width=.5\makeupwidth]}
+ Hasselt has always had a varying number of citizens due to
+ economic events. For example the Dedemsvaart was dug around
+ 1810. This canal runs through Hasselt and therefore trade
+ flourished. This led to a population growth of almost 40\%
+ within 10~years. Nowadays the Dedemsvaart has no commercial
+ value anymore and the canals have become a tourist
+ attraction. But reminders of these prosperous times can be
+ found everywhere.
+\stopfiguretext
+\stopbuffer
+
+The effect of:
+
+\typebuffer
+
+is shown in the figure below.
+
+\start
+\setuptolerance[verytolerant]
+\getbuffer
+\stop
+
+
+\startbuffer[marginpicture]
+\inmargin
+ {\externalfigure
+ [ma-cb-23]
+ [width=.7\marginwidth]}
+\stopbuffer
+
+As you have seen you in the examples above you can summon a figure with the
+command:
+
+\shortsetup{externalfigure}
+
+The command \type{\externalfigure} has two bracket pairs. The first is used for
+the exact file name without extension, the second for file formats and
+dimensions. It is not difficult to guess what happens if you
+type:\getbuffer[marginpicture]
+
+\typebuffer[marginpicture]
+
+You can set up the layout of figures with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaptions}
+
+\startbuffer[figuresetups]
+\setupfloat
+ [figure]
+ [default=right,
+ spacebefore=none]
+
+\setupcaptions
+ [location=bottom,
+ style=boldslanted]
+\stopbuffer
+
+\startbuffer[figuredefinition]
+\placefigure
+ {A characteristic view on Hasselt.}
+ {\externalfigure[ma-cb-12][width=6cm]}
+\stopbuffer
+
+\start
+\getbuffer[figuresetups]
+\getbuffer[figuredefinition]
+\stop
+
+These commands are typed in the set up area of your input file and have a global
+effect on all floating blocks.
+
+\typebuffer[figuresetups,figuredefinition]
+
+For figure management there are commands like \crlf
+\type{\setupexternalfigure}.
+
+Please refer to the \goto {\CONTEXTWIKI} [
+url(http://wiki.contextgarden.net/Command/defineexternalfigure) ] for practical
+applications of these commands.
+
+If you want to work with a \XML\ based figure database please see the \goto
+{Figures} [ url (manual:figures) ]
+manual.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex
new file mode 100644
index 00000000000..029386ec101
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-fonts.tex
@@ -0,0 +1,299 @@
+\startcomponent ma-cb-en-fonts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Fonts and font switches]
+
+\startsection[title=Introduction]
+
+\index{Computer Modern Roman}
+\index{Lucida Bright}
+\index{AMS}
+
+The default font in \CONTEXT\ is the {\em Computer Modern Roman} (\type{cmr}).
+In \CONTEXT\ the following fonts are available.
+
+\startplacetable[reference=tab:fonts in context,title={Fonts in \CONTEXT.}]
+\starttable[|l|l|l|]
+\HL
+\NC \bf Name \NC \bf Logical name \NC \bf Also known as \NC\MR
+\HL
+\NC Computer Modern Roman \NC cmr \NC Computer Modern Roman \NC\FR
+\NC Termes \NC termes \NC Times New Roman \NC\MR
+\NC Adventor \NC adventor \NC Avant Garde \NC\MR
+\NC Bonum \NC bonum \NC Bookman \NC\MR
+\NC Chorus \NC chorus \NC Zapf Chancery \NC\MR
+\NC Cursor \NC cursor \NC Courier \NC\MR
+\NC Heros \NC heros \NC Helvetica \NC\MR
+\NC Pagella \NC pagella \NC Palatino \NC\MR
+\NC Schola \NC schola \NC Century Schoolbook \NC\MR
+\NC Dejavu \NC dejavu \NC \NC\MR
+\NC Iwona \NC iwona \NC \NC\MR
+\NC Gentium \NC gentium \NC \NC\MR
+\NC Cambria \NC cambria \NC \NC\MR
+\NC Antykwa \NC antykwa \NC \NC\MR
+\NC Utopia \NC utopia \NC \NC\MR
+\NC LucidaBright \NC lucidanova \NC \NC\LR
+\HL
+\stoptable
+\stopplacetable
+
+% in map: tex-context\tex\texmf\fonts
+
+For further reading we refer to the \goto {\em Fonts in \CONTEXT}
+[ url (manual:fonts) ] manual where you can find information on how to install
+your own font.
+
+\stopsection
+
+\startsection[title=Fontstyle and size]
+
+\index{font+style}
+\index{font+size}
+
+\Command{\tex{setupbodyfont}}
+\Command{\tex{switchtobodyfont}}
+
+You can select the font family, style and size for a document with:
+
+\shortsetup{setupbodyfont}
+
+If you typed \type{\setupbodyfont[chorus,9pt]} {\switchtobodyfont[chorus,9pt] in
+the setup area of the input file your text would look something like this.}
+
+For changes in mid-document and on section level you should use:
+
+\shortsetup{switchtobodyfont}
+
+\startbuffer
+On November 10th (one day before Saint Martinsday) the youth of
+Hasselt go from door to door to sing a special song and they
+accompany themselves on a {\em foekepot}. They won't leave
+before you give them some money or sweets. The song goes like this:
+
+\startnarrower
+\switchtobodyfont[heros,small]
+\startlines
+Foekepotterij, foekepotterij,
+Geef mij een centje dan ga'k voorbij.
+Geef mij een alfje dan blijf ik staan,
+'k Zal nog liever naar m'n arrenmoeder gaan.
+Hier woont zo'n rieke man, die zo vulle gèven kan.
+Gèf wat, old wat, gèf die arme stumpers wat,
+'k Eb zo lange met de foekepot elopen.
+'k Eb gien geld om brood te kopen.
+Foekepotterij, foekepotterij,
+Geef mij een centje dan ga'k voorbij.
+\stoplines
+\stopnarrower
+\stopbuffer
+
+\typebuffer
+
+Notice that \type{\start...\stopnarrower} is also used as a begin and end of the
+fontswitch. The function of \type{\start...\stoplines} in this example is
+obvious.
+
+\start
+\getbuffer
+\stop
+
+If you want an overview of the available font family you can type:
+
+\startbuffer
+\showbodyfont[pagella]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Style and size switch in commands]
+
+In a number of commands one of the parameters is \type{style} to indicate the
+desired typestyle. For example:
+
+\startbuffer
+\setuphead[chapter][style=\tfd]
+\stopbuffer
+
+\typebuffer
+
+In this case the character size for chapters is indicated with a command
+\type{\tfd}. But instead of a command you could use the predefined options that
+are related to the actual typeface:
+
+\startbuffer
+normal bold slanted boldslanted type mediaeval
+small smallbold smallslanted smallboldslanted smalltype
+capital cap
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Local font style and size]
+
+\Command{\tex{rm}}
+\Command{\tex{ss}}
+\Command{\tex{tt}}
+\Command{\tex{sl}}
+\Command{\tex{bf}}
+\Command{\tex{tfa}}
+\Command{\tex{tfb}}
+\Command{\tex{tfc}}
+\Command{\tex{tfd}}
+
+In the running text (local) you can change the {\em typestyle} into roman, sans
+serif and teletype with \type{\rm}, \type{\ss} and \type{\tt}.
+
+You can change the {\em typeface} like italic and boldface with \type{\sl} and
+\type{\bf}.
+
+The {\em typesize} is changed with \type{\switchtobodyfont}.
+
+The actual style is indicated with \type{\tf}. If you want to change into a
+somewhat greater size you can type \type{\tfa}, \type{\tfb}, \type{\tfc} and
+\type{\tfd}. An addition of \type{a}, \type{b}, \type{c} and \type{d} to
+\type{\sl}, \type{\it} and \type{\bf} is also allowed.
+
+\startbuffer
+{\tfc Mintage}
+
+In the period from {\tt 1404} till {\tt 1585} Hasselt had its own
+{\sl right of coinage}. This right was challenged by other cities,
+but the {\switchtobodyfont[7pt] bishops of Utrecht} did not honour
+these {\slb protests}.
+\stopbuffer
+
+\typebuffer
+
+The curly braces indicate begin and end of style or size switches.
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Redefining fontsize]
+
+\index{fontsize}
+
+\Command{\tex{definebodyfont}}
+
+For special purposes you can define your own size of the bodyfont.
+
+\shortsetup{definebodyfont}
+
+A definition could look like this:
+
+\startbuffer
+\definebodyfont[10pt][rm][tfe=Regular at 36pt]
+
+{\tfe Hasselt!}
+\stopbuffer
+
+\typebuffer
+
+Now \type{\tfe} will produce 36pt characters saying:
+{\hbox{\getbuffer}}
+
+\stopsection
+
+\startsection[title=Small caps]
+
+\index{small caps}
+
+\Command{\tex{cap}}
+
+Abbreviations like \PDF\ (\infull{PDF}) are printed in pseudo small caps. A small
+capital is somewhat smaller than the capital of the actual typeface. Pseudo small
+caps are produced with:
+
+\shortsetup{cap}
+
+If you compare \type{\cap{hasselt}} and \type{\sc hasselt}: \cap{hasselt} and
+{\sc hasselt} you can see the difference. The command \type{\sc} shows the real
+small caps. The reason for using pseudo small caps instead of real small caps is
+just a matter of taste.
+
+\stopsection
+
+\startsection[title=Emphasized]
+
+\index{emphasized}
+
+\Command{\tex{em}}
+
+To emphasize words consistently throughout your document
+you use:
+
+\starttyping
+\em
+\stoptyping
+
+Empasized words appear in a slanted style.
+
+\startbuffer
+If you walk through Hasselt you should {\bf \em watch out} for
+{\em Amsterdammers}. An {\em Amsterdammer} is {\bf \em not} a
+person from Amsterdam but a little stone pillar used to separate
+sidewalk and road. A pedestrian should be protected by these
+{\em Amsterdammers} against cars but more often people get hurt
+from tripping over them.
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\getbuffer
+
+{\em An emphasize within an emphasize is {\em normal} again
+and a boldface emphasize looks like {\bf this or \em this}}.
+
+\stopsection
+
+\startsection[title=Teletype / verbatim]
+
+\index{type}
+\index{verbatim}
+
+\Command{\tex{starttyping}}
+\Command{\tex{type}}
+\Command{\tex{setuptyping}}
+\Command{\tex{setuptype}}
+
+If you want to display typed text and want to keep your line breaking exactly as
+it is you use:
+
+\shortsetup{starttyping}
+
+In the text you can use:
+
+\shortsetup{type}
+
+The curly braces enclose the text you want in teletype. You have to be careful
+with \type{\type} because the line breaking mechanism does not work anymore.
+
+You can set up the 'typing' with:
+
+\shortsetup{setuptyping}
+\shortsetup{setuptype}
+
+\stopsection
+
+\startsection[title=Encodings]
+
+In \CONTEXT\ \MKIV\ font ecoding is no issue (anymore).
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex
new file mode 100644
index 00000000000..5eeade3836d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-footnotes.tex
@@ -0,0 +1,99 @@
+\startcomponent ma-cb-en-footnotes
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Footnotes]
+
+\index{footnote}
+
+\Command{\tex{footnote}}
+\Command{\tex{setupfootnotes}}
+
+If you want to annotate your text you can use \type{\footnote}. The command looks
+like this:
+
+\shortsetup{footnote}
+
+The bracket pair is optional and contains a logical name. The curly braces
+contain the text you want to display at the foot of the page.
+
+The same footnote number can be called with its logical name.
+
+\shortsetup{note}
+
+If you have typed this text:
+
+\startbuffer
+The Hanse was a late medieval commercial alliance of towns in the
+regions of the North and the Baltic Sea. The association was formed
+for the furtherance and protection of the commerce of its
+members.\footnote[war]{This was the source of jealousy and fear among
+other towns that caused a number of wars.} In the Hanse period there
+was a lively trade in all sorts of articles such as wood, wool,
+metal, cloth, salt, wine and beer.\note[war] The prosperous trade
+caused an enormous growth of welfare in the Hanseatic
+towns.\footnote{Hasselt is one of these towns.}
+\stopbuffer
+
+\typebuffer
+
+It would look like this:
+
+\getbuffer
+
+The footnote numbering is done automatically. The command \type{\setupfootnotes}
+enables you to influence the display of footnotes:
+
+\shortsetup{setupfootnotes}
+
+Footnotes can be set at the bottom of a page but also at other locations, like
+the end of a chapter. This is done with the command:
+
+\shortsetup{placefootnotes}
+
+The footnotes will be placed at the end of your document with
+\type{\setupfootnotes[location=text]} in combination with \type{\placefootnotes}
+at the desired location.
+
+You can also couple footnotes to a table. In that case we speak of local
+footnotes. The commands are:
+
+\shortsetup{startlocalfootnotes}
+
+\shortsetup{placelocalfootnotes}
+
+An example illustrates the use of local footnotes:
+
+\startbuffer
+
+\placetable[][productivity]
+ {Decline of Hasselt's productivity.\footnote{Source: {\em Uit
+ de geschiedenis van Hasselt.}}}
+ {\startlocalfootnotes
+ \starttable[|l|c|c|c|c|]
+ \HL
+ \NC
+ \NC Ovens
+ \NC Blacksmiths
+ \NC Breweries
+ \NC Tile works\footnote{The factories that produced roof tiles.} \NC\SR
+ \HL
+ \NC 1682 \NC 15 \NC 9 \NC 3 \NC 2 \NC\FR
+ \NC 1752 \NC ~6 \NC 4 \NC 0 \NC 0 \NC\LR
+ \HL
+ \NC \use5 \JustLeft{\placelocalfootnotes} \NC\FR
+ \stoptable
+ \stoplocalfootnotes}
+\stopbuffer
+
+\typebuffer
+
+This will result in \in{table}[productivity] with a local footnote. The footnote
+in the caption will appear at the bottom of the page.
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex
new file mode 100644
index 00000000000..2f422344b85
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-framedtexts.tex
@@ -0,0 +1,58 @@
+\startcomponent ma-cb-en-framedtexts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Outlined paragraphs]
+
+\index{outline+paragraph}
+
+\Command{\tex{startframedtext}}
+\Command{\tex{setupframedtext}}
+
+Complete paragraphs can be outlined with:
+
+\shortsetup{startframedtext}
+
+\startbuffer
+\definefloat[intermezzo]
+\setupframedtexts
+ [width=.8\makeupwidth,
+ background=color,
+ backgroundcolor=gray,
+ corner=round,
+ framecolor=blue,
+ rulethickness=2pt]
+
+\placeintermezzo[here][block:bridge]{An intermezzo.}
+\startframedtext
+ It was essential for Hasselt to have a bridge across the Zwarte
+ Water river. The bishop of Utrecht gave Hasselt his consent in
+ 1486.
+ \blank
+ Other cities in the neighbourhood of Hasselt were afraid of the
+ toll money to be paid when crossing this bridge so they
+ prevented the construction for many years.
+\stopframedtext
+\stopbuffer
+
+Let's give an example:
+
+\typebuffer
+
+This example also illustrates the command \type{\definefloat}. You can find more
+information on this command in \in{paragraph}[floatingblocks]. The \type{\blank}
+is necessary to enforce a blank line.
+
+\start
+\getbuffer
+\stop
+
+The outlining can be set up with:
+
+\shortsetup{setupframedtexts}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex
new file mode 100644
index 00000000000..bbdb6a61cbf
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-frames.tex
@@ -0,0 +1,144 @@
+\startcomponent ma-cb-en-frames
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Outlined text]
+
+\index{outline+text}
+
+\Command{\tex{framed}}
+\Command{\tex{setupframed}}
+\Command{\tex{inframed}}
+
+You can \inframed{outline} a text with \type{\framed}. The
+command looks like this:
+
+\shortsetup{framed}
+
+The bracket pair is optional and contains the set up parameters. The curly braces
+enclose the text. To be honest, the outlined text in the first paragraph was done
+with \type{\inframed}. This command takes care of the interline spacing.
+
+Some other examples of \type{\framed} and its set up parameters are shown below.
+
+\startbuffer[a]
+\framed
+ [height=fit,
+ width=.5\textwidth]
+ {Hasselt}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[a][type=buffer]}
+\typebuffer[a]
+
+\startbuffer[b]
+\framed
+ [height=3em,
+ width=.5\textwidth]
+ {Hasselt now has more space}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[b][type=buffer]}
+\typebuffer[b]
+
+\startbuffer[d]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue]
+ {Hasselt now has some color}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[d][type=buffer]}
+\typebuffer[d]
+
+\startbuffer[e]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt]
+ {Hasselt now has more frame}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[e][type=buffer]}
+\typebuffer[e]
+
+\startbuffer[f]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=color,
+ backgroundcolor=green]
+ {Hasselt now has a colorful background}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[f][type=buffer]}
+\typebuffer[f]
+
+\startbuffer[g]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=color,
+ backgroundcolor=green,
+ foregroundstyle=bold]
+ {Hasselt now has another style}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[g][type=buffer]}
+\typebuffer[g]
+
+\startbuffer[needed-for-h]
+\definecolor[a][black]
+\definecolor[b][white]
+
+\startuniqueMPgraphic{LinearShade}
+ fill OverlayBox
+ withshademethod "linear" withcolor \MPcolor{a} shadedinto \MPcolor{b} ;
+\stopuniqueMPgraphic
+
+\defineoverlay
+ [linear shade]
+ [\uniqueMPgraphic{LinearShade}]
+\stopbuffer
+
+\getbuffer[needed-for-h]
+
+\startbuffer[h]
+\framed
+ [height=3em,
+ width=.5\textwidth,
+ foregroundcolor=red,
+ framecolor=blue,
+ rulethickness=2pt,
+ background=linear shade,
+ foregroundstyle=bold]
+ {Hasselt now has a little shade}
+\stopbuffer
+
+\placefigure[right,none][]{}{\externalfigure[h][type=buffer]}
+\typebuffer[h]
+
+The shady background was defined with:
+
+\typebuffer[needed-for-h]
+
+The \type{\framed} command is very sophisticated and is used in many macros.
+The command to set up frames is:
+
+\shortsetup{setupframed}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex
new file mode 100644
index 00000000000..6314aeec5e3
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-gettingstarted.tex
@@ -0,0 +1,46 @@
+\startcomponent ma-cb-en-gettingstarted
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=How to process a file]
+
+\index{input file+processing}
+\index[pdffile]{\type{pdf}--file}
+
+In this chapter we assume that you have installed and initiated \CONTEXT\ \MKIV\
+correctly so that you can run it from the commandline in your working directory.
+You can find the \CONTEXT\ installation procedure on the \goto {\CONTEXTWIKI}
+[ url (http://wiki.contextgarden.net/ConTeXt_Standalone#Windows) ].
+
+If you want to process a \CONTEXT\ input file, you should type at the command line
+prompt:
+
+\starttyping
+context myfile.tex
+\stoptyping
+
+the extension \type{.tex} is not needed. See \in{appendices}[contextcommand] and
+\in[runtimefiles] for more information on the \type{context} command.
+
+After pressing \Enter\ processing will be started. \CONTEXT\ will show processing
+information on your screen. During the processing of your input file \CONTEXT\
+will also inform you of what it is doing with your document. For example it will
+show page numbers and information about processing steps. Further more it gives
+warnings. These are of a typographical order and tells you when line breaking is
+not successful. All information on processing is stored in a \type{log} file that
+can be used for reviewing warnings and errors and the respective line numbers
+where they occur in your file.
+
+If processing is succesful the command line prompt will return and \CONTEXT\ will
+produce the file \type{myfile.pdf}. The abbreviation \PDF\ stands for Portable
+Document Format. This is a platform independent format for printing and viewing
+with \READER.
+
+When you use a configurable text editor you can also run \CONTEXT\ from that editor.
+More information on that topic can be found \in{appendix}[texteditor].
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex
new file mode 100644
index 00000000000..d51403d5dba
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-headers.tex
@@ -0,0 +1,53 @@
+\startcomponent ma-cb-en-headers
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page headers and footers]
+
+\index{page header}
+\index{page footer}
+
+\Command{\tex{setupfootertexts}}
+\Command{\tex{setupheadertexts}}
+\Command{\tex{setupheader}}
+\Command{\tex{setupfooter}}
+\Command{\tex{noheaderandfooterlines}}
+
+In some cases you want to give your document a page header and footer. The
+commands to do this are:
+
+\shortsetup{setupfootertexts}
+\shortsetup{setupheadertexts}
+
+The first bracket pair is used for the location of the footer or header
+(\type{text}, \type{edge} etc). Footer and header are placed within the second
+and third bracket pairs. In a double sided document a fourth and fifth bracket
+pair is used for footer and header on the left-hand side page and the right-hand
+side page. In most cases you can omit these last two bracket pairs.
+
+\startbuffer
+\setupfootertexts[Manual][section]
+\stopbuffer
+
+\typebuffer
+
+In this case the text {\em Manual} will appear in the left-hand side corner and
+the title of the actual section on the right-hand side of the page. This footer
+will change with the beginning of a new section.
+
+You can set up the layout of the header and footer with:
+
+\shortsetup{setupheader}
+\shortsetup{setupfooter}
+
+If you want to leave out the page header and footer you can type:
+
+\starttyping
+\noheaderandfooterlines
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex
new file mode 100644
index 00000000000..aa7e7b16100
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-heads.tex
@@ -0,0 +1,135 @@
+\startcomponent ma-cb-en-heads
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=heads,title=Heads]
+
+\index{headers}
+
+\Command{\tex{chapter}}
+\Command{\tex{paragraph}}
+\Command{\tex{subparagraph}}
+\Command{\tex{title}}
+\Command{\tex{subject}}
+\Command{\tex{subsubject}}
+\Command{\tex{setuphead}}
+\Command{\tex{setupheads}}
+
+The structure of a document is determined by its chapter and section titles.
+These titles are created with the commands shown in \in{table}[tab:headers]:
+
+\placetable[here][tab:headers]{Headers.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Numbered header \NC \bf Unnumbered header \NC\SR
+ \HL
+ \NC \type{\chapter} \NC \type{\title} \NC\FR
+ \NC \type{\section} \NC \type{\subject} \NC\MR
+ \NC \type{\subsection} \NC \type{\subsubject} \NC\MR
+ \NC \type{\subsubsection} \NC \type{\subsubsubject} \NC\MR
+ \NC \unknown \NC \unknown \NC\LR
+ \HL
+ \stoptable}
+
+\shortsetup{chapter}
+\shortsetup{section}
+\shortsetup{subsection}
+\shortsetup{title}
+\shortsetup{subject}
+\shortsetup{subsubject}
+
+These commands will produce a numbered or unnumbered title in a predefined
+fontsize and fonttype with some vertical spacing before and after the header.
+
+The title commands can take several arguments, like in:
+
+\starttyping
+\title[hasselt by night]{Hasselt by night}
+\stoptyping
+
+and
+
+\starttyping
+\title{Hasselt by night}
+\stoptyping
+
+The bracket pair is optional and used for internal references. If you want to
+refer to this chapter you type for example \type{\at{page}[hasselt by night]}.
+
+For a more structured way to define chapters and sections you can use the more
+preferred \type{\start ... \stop} construction.
+
+\placetable[here][tab:headers]{Structured headers.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Numbered header \NC \bf Un-numbered header \NC\SR
+ \HL
+ \NC \type{\start ... \stopchapter} \NC \type{\start ... \stoptitle} \NC\FR
+ \NC \type{\start ... \stopsection} \NC \type{\start ... \stopsubject} \NC\MR
+ \NC \type{\start ... \stopsubsection} \NC \type{\start ... \stopsubsubject} \NC\MR
+ \NC \type{\start ... \stopsubsubsection} \NC \type{\start ... \stopsubsubsubject} \NC\MR
+ \NC \unknown \NC \unknown \NC\LR
+ \HL
+ \stoptable}
+
+In that case the definition looks like this:
+
+\starttyping
+\starttitle[reference="hasselt by night",title="Hasselt by night"}
+ ...
+\stoptitle
+\stoptyping
+
+Of course the chapter and section titles can be set to your own preferences and you can even
+define your own sections. This is done with the \type{\setuphead} and
+\type{\definehead} command.
+
+\shortsetup{definehead}
+
+\shortsetup{setuphead}
+
+\startbuffer
+\definehead
+ [myhead]
+ [section]
+
+\setuphead
+ [myhead]
+ [numberstyle=bold,
+ textstyle=bold,
+ before=\hairline\blank,
+ after=\nowhitespace\hairline]
+
+\myhead[headlines]{Hasselt makes headlines}
+\stopbuffer
+
+\typebuffer
+
+A new header \type{\myhead} is defined and it inherits the properties of
+\type{\section}. It would look something like this:
+
+\getbuffer
+
+There is one other command you should know now, and that is \type{\setupheads}.
+You can use this command to set up the numbering of the numbered chapters and
+sections. If you type:
+
+\startbuffer
+\setupheads
+ [alternative=inmargin,
+ separator=--]
+\stopbuffer
+
+\typebuffer
+
+all numbers will appear in the margin. Section 1.1 would look like 1--1.
+
+Commands like \type{\setupheads} are typed in the set up area of your input file.
+
+\shortsetup{setupheads}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex
new file mode 100644
index 00000000000..64beb179db1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-interactivity.tex
@@ -0,0 +1,310 @@
+\startcomponent ma-cb-en-interactivity
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Interactive mode in electronic documents,reference=interactivity]
+
+\startsection[title=Introduction]
+
+\index[reader]{\READER}
+
+Documents that are electronically available for consulting and displaying on a
+computer screen are called interactive documents.
+
+Interaction means that you can click on active areas and jump to the indicated
+locations. For example if you consult a register you can click on a (active) page
+number and you will jump to the corresponding page.
+
+Interaction relates to:
+
+\startitemize[packed]
+\item active chapter numbers in the table of content
+\item active page numbers in registers
+\item active page numbers, chapter numbers and figure numbers in internal
+ references to pages, chapters, figures etc. in the running text
+\item active titles, page numbers, and chapter numbers in external references to
+ other interactive documents
+\item active menus as navigation tools
+\item references to webpages and programs
+\stopitemize
+
+Interactivity depends on the program you use to view the interactive document. We
+assume here that you will use \READER\ for viewing.
+
+\CONTEXT\ is a very powerful system for producing electronic or interactive \PDF\
+documents. However, only a few standard features are described in this chapter. As
+the authors of this manual are planning to make all \CONTEXT\ related manuals
+electronically (sources included) available, reverse engineering is one of the
+options to become more acquainted with the possibilities of \CONTEXT.
+
+Good examples of interactive documents are \CONTEXT\ presentations (see \in{chapter}[presentations]).
+For more complex interactive \PDF\ documents with forms you should read the
+\goto {Widgets} [ url (manual:widget) ]
+manual.
+
+\stopsection
+
+\startsection[title=Interactive mode]
+
+\index{interactive mode}
+
+\Command{\tex{setupinteraction}}
+
+The interactive mode is activated by:
+
+\shortsetup{setupinteraction}
+
+For example:
+
+\startbuffer
+\setupinteraction
+ [state=start,
+ color=green,
+ style=bold]
+\stopbuffer
+
+\typebuffer
+
+The hyper links are now generated automatically and the active words are
+displayed in bold green.
+
+The interactive document is considerably bigger (in MB's) than its paper cousin
+because hyperlinks consume space. You will also notice that processing time
+becomes longer. Therefore it is advisable to de-activate the interactive mode as
+long as your document is under construction.
+
+\stopsection
+
+\startsection[title=Interaction within a document]
+
+\index{interaction+internal}
+
+\Command{\tex{in}}
+\Command{\tex{at}}
+\Command{\tex{goto}}
+
+Earlier you have seen how to make a reference with \type{\in} and \type{\at}. You
+may have wondered why you had to type \type{\in{chapter}[chap:introduction]}. In
+the first place {\em chapter} and its corresponding chapter number will not be
+separated at line breaking. In the second place the word {\em chapter} and its
+number are typeset differently in the interactive mode. This gives the user a
+larger clickable area.
+
+\stopsection
+
+\startsection[title=Interaction between documents]
+
+\index{interaction+external}
+
+\Command{\tex{from}}
+\Command{\tex{useexternaldocument}}
+
+It is possible to link one document to another. First you have to state that you
+want to refer to another document. This is done by:
+
+\shortsetup{useexternaldocument}
+
+The first bracket pair must contain a logical name of the document, the second
+pair the file name of the other document and the third pair is used for the title
+of the document.
+
+For refering to these other documents you can use:
+
+\shortsetup{from}
+
+The curly braces contain text and the brackets contain the reference.
+
+Look at the example below.
+
+\startbuffer
+\useexternaldocument
+ [hia][hasseltbook][Festivities in Hasselt]
+
+Most tourist attractions are described in \from[hia].\crlf
+A description of the \about[hia::euifeest] is found in \from[hia].\crlf
+The eui||feest is described on \at{page}[hia::euifeest] in \from[hia].\crlf
+See for more information \in{chapter}[hia::euifeest] in \from[hia].
+\stopbuffer
+
+\typebuffer
+
+The \type{\useexternaldocument} is usually typed in the set up area of your input
+file.
+
+After processing your input file and the file \type{hasseltbook.tex},
+you will have two \PDF\ documents. The references come out like this:
+
+\start
+\setupinteraction[state=start]
+\getbuffer
+\stop
+
+For more information on cross referencing look at
+\goto {\CONTEXT\ Magazine 1103} [ url (thisway:crossrefs)].
+
+\stopsection
+
+\startsection[title=Interaction with the world wide web]
+
+In interactive mode there is one other command that has little meaning in the
+paper version.
+
+\shortsetup{goto}
+
+The curly braces contain text, the brackets contain a reference (logical name or a
+location).
+
+\startbuffer
+In \goto {Hasselt} [ url(http://www.stadindex.nl/plattegrond/hasselt) ]
+all streets are build in a circular way.
+\stopbuffer
+
+\typebuffer
+
+In the interactive document \goto{Hasselt}[ url(http://www.stadindex.nl/plattegrond/hasselt) ]
+will be green and active. When you click the text you will jump to a map of Hasselt.
+
+For a consistent definition of the urls there is the command:
+
+\shortsetup{useURL}
+
+The adress is defined with:
+
+\startbuffer
+\useURL
+ [loc:cityplan] % id
+ [http://www.stadindex.nl/plattegrond/hasselt] % adress
+ [] % document
+ [] % text
+\stopbuffer
+
+\typebuffer
+
+The webadress is recalled by its logical name:
+\type{\goto {Hasselt} [ url(loc:cityplan) ]}.
+
+It is of good practice to define and maintain the urls in a separate
+file.
+
+\stopsection
+
+\startsection[title=Buttons]
+
+The command to define a button is:
+
+\shortsetup{button}
+
+The first bracket pair contains the setup keys, the curly brackets contain the
+button text and the last bracket pair the destination.
+
+\startbuffer
+\useexternalsoundtrack
+ [stranger][wayfaring_stranger.mp3]
+
+\button{Website Hasselt} [ url(http://www.hasselt.nl) ]
+\button{MSWord Document} [ program(hasselt.doc) ]
+\button{Sound Clip} [ StartSound{stranger} ]
+\stopbuffer
+
+\typebuffer
+
+The first example results in a jump to a webpage, the second opens the file
+\type{hasselt.doc} in \MSWORD\ and the third plays a tune. Note the use of the
+\type{\useexternalsoundtrack} command.
+
+\stopsection
+
+\startsection[title=Menus]
+
+You can define a menu with:
+
+\shortsetup{startinteractionmenu}
+
+And set it up with:
+
+\shortsetup{setupinteractionmenu}
+
+The first bracket pair is used for its name and the second pair for setting up
+the menu.
+
+A menu can be used in an interactive document. Below you can find a simple
+example that you can copy to do some experimenting:
+
+\startbuffer
+\setuppapersize
+ [S6][S6]
+
+\setuplayout
+ [header=0cm, topspace=.5cm, backspace=2cm,
+ margindistance=.5cm, margin=1cm, rightmargin=0cm,
+ edgedistance=.5cm, rightedge=2cm, width=fit,
+ height=13.8cm, footer=1cm, bottom=1cm]
+
+\setupinteraction
+ [state=start, menu=on]
+
+\setupinteractionmenu
+ [bottom]
+ [background=color, backgroundcolor=gray, frame=off]
+
+\startinteractionmenu[bottom]
+\hfill
+\startbut [content] contents \stopbut \quad
+\startbut [index] index \stopbut \quad
+\startbut [PreviousJump] last location \stopbut \quad
+\startbut [NextPage] next page \stopbut \quad
+\startbut [CloseDocument] exit \stopbut \quad
+\stopinteractionmenu
+
+\starttext
+
+\startstandardmakeup
+ \midaligned{\tfd Festivities in Hasselt}
+\stopstandardmakeup
+
+\completecontent
+
+\startchapter[title=Introduction]
+ An introduction.
+\stopchapter
+
+\startchapter[title=Kingsday]
+ Something about Kingsday in Hasselt.\index{Kingsday}
+\stopchapter
+
+\startchapter[title=Hassailt]
+ Something about Hassailt.\index{Hassailt}
+\stopchapter
+
+\startchapter[title=Euifeest,reference=euifeest]
+ Something about the Euifeest.\index{Euifeest}
+\stopchapter
+
+\completeindex
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+The definition of the \type{\startinteractionmenu} will produce a menu at the
+bottom of every screen. The menu buttons contain the text {\em contents}, {\em
+index}, {\em last location}, {\em next page} and {\em exit} with respectively the
+following functions: jump to the table of contents, jump to the index, goto the
+last location in the document, goto next page and close the document. The labels
+to obvious destinations like \type{content} and \type{index} are predefined.
+Other predefined destinations are \type{FirstPage}, \type{LastPage},
+\type{NextPage} and \type{PreviousPage}.
+
+An action like \type{CloseDocument} is necessary to make an electronic document
+self containing. Other predefined actions you can use are \type{PrintDocument},
+\type{SearchDocument} and \type{PreviousJump}. The meaning of these actions is
+obvious.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex
new file mode 100644
index 00000000000..11acf8f9c44
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-introduction.tex
@@ -0,0 +1,33 @@
+\startcomponent ma-cb-en-introduction
+
+\project ma-cb
+
+\startchapter[title=Introduction]
+
+\CONTEXT\ is a document engineering system based on \TEX, a typesetting
+system and programming language to typeset and produce documents. Ths system is
+easy to use and enables you to make complex paper and electronic documents.
+
+This manual describes the capabilities of \CONTEXT\ \MKIV, the available commands
+and their functionality.\footnote {All paper and electronic products around
+\CONTEXT\ are produced with \CONTEXT. All sources of these products are or will
+be made available electronically to give you insight in the way these products
+are made up.}
+
+This system is developed for practical applications: the typesetting and
+production of documents ranging from simple straight forward books up to very
+complex and advanced technical manuals and textbooks in a paper or an electronic
+version. This introductory manual describes the functionality necessary to apply
+standard text elements in a manual or textbook. \CONTEXT, however, is capable of
+much more and for users who want more there are other manuals and sources
+available.
+
+\CONTEXT\ has a multi lingual interface to enable users to work with the system
+in their own language. This manual is available in Dutch and English.
+
+If you want to install \CONTEXT\ on your computer you can follow the installation
+description on the \goto {\CONTEXTWIKI} [url(install)].
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex
new file mode 100644
index 00000000000..ac711be63a2
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-itemizations.tex
@@ -0,0 +1,297 @@
+\startcomponent ma-cb-en-itemizations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=itemize,title=Itemize]
+
+\index{itemize}
+\index{columns in itemize}
+
+\Command{\tex{startitemize}}
+\Command{\tex{setupitemize}}
+\Command{\tex{definesymbol}}
+\Command{\tex{item}}
+\Command{\tex{head}}
+
+One way of structuring your information is by way of enumeration or summing up
+items. The itemize command looks like this:
+
+\shortsetup{startitemize}
+
+For example:
+
+\startbuffer
+\startitemize[R,packed,broad]
+\item Hasselt was founded in the 14th century.
+\item Hasselt is known as a so called Hanze town.
+\item Hasselt's name stems from a tree.
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+Within the \type{\start ... \stopitemize} pair you start a new item with
+\type{\item}. The space after \type{\item} is required. In the example above
+\type{R} specifies Roman numbering and \type{packed} keeps line spacing to a
+minimum. The parameter \type{broad} takes care of the spacing between item
+separator and item. The example would produce:
+
+\getbuffer
+
+Items can be defined in a more structured way:
+
+\startbuffer
+\startitemize[R,packed,broad]
+\startitem Hasselt was founded in the 14th century. \stopitem
+\startitem Hasselt is known as a so called Hanze town. \stopitem
+\startitem Hasselt's name stems from a tree. \stopitem
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+The bracket pair contains information on item separators and local set up
+variables.
+
+\placetable
+ [here]
+ [tab:itemsetup]
+ {Item separators in itemize.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Argument \NC \bf Item separator symbol \NC\SR
+ \HL
+ \NC 1 \NC $\bullet$ \NC\FR
+ \NC 2 \NC $-$ \NC\MR
+ \NC 3 \NC $\star$ \NC\MR
+ \NC $\vdots$ \NC $\vdots$ \NC\MR
+ \NC n \NC 1 2 3 4 $\cdots$ \NC\MR
+ \NC a \NC a b c d $\cdots$ \NC\MR
+ \NC A \NC A B C D $\cdots$ \NC\MR
+ \NC r \NC i ii iii iv $\cdots$ \NC\MR
+ \NC R \NC I II III IV $\cdots$ \NC\LR
+ \HL
+ \stoptable}
+
+You can also define your own item separator by means of \type{\definesymbol}. For
+example if you try this:
+
+\startbuffer
+\definesymbol[5][$\clubsuit$]
+
+\startitemize[5,packed]
+\item Hasselt was built on a riverdune.
+\item Hasselt lies at the crossing of two rivers.
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+You will get:
+
+\getbuffer
+
+If you want to have a sort of head within an enumeration you should use
+\type{\head} instead of \type{\item}.
+
+\startbuffer
+Hasselt lies in the province of Overijssel and there are a number
+of customs that are typical of this province.
+
+\startitemize
+
+\head kraamschudden \hfill (child welcoming)
+
+ When a child is born the neighbours come to visit the new
+ parents. The women come to admire the baby and the men come to
+ judge the baby (if it is a boy) on other aspects.
+ The neighbours will bring a {\em krentenwegge} along. A
+ krentenwegge is a loaf of currant bread of about 1 \unit{Meter}
+ long. Of course the birth is celebrated with {\em jenever}.
+
+\head nabuurschap (naberschop) \hfill (neighbourship)
+
+ Smaller communities used to be very dependent on the
+ cooperation among the members for their well being. Members of
+ the {\em nabuurschap} helped each other in difficult times
+ during harvest times, funerals or any hardship that fell upon
+ the community.
+
+\head Abraham \& Sarah \hfill (identical)
+
+ When people turn 50 in Hasselt it is said that they see Abraham
+ or Sarah. The custom is to give these people a {\em speculaas}
+ Abraham or a Sarah. Speculaas is a kind of hard spiced biscuit.
+
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+The \type{\head} can be set up with \type{\setupitemize}. In case of a page
+breaking a \type{\head} will appear on a new page. (The \type {\unit{Meter}}
+command is explained in \in {chapter} [units].)
+
+The example of old customs will look like this:
+
+\getbuffer
+
+The set up parameters of itemize are described in \in {table} [tab:itemizesetup].
+
+\placetable
+ [here,force]
+ [tab:itemizesetup]
+ {Set up parameters in itemize.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Set up \NC \bf Meaning \NC\SR
+ \HL
+ \NC standard \NC standard (global) set up \NC\FR
+ \NC packed \NC no vertical spacing between items \NC\MR
+ \NC serried \NC no horizontal spacing between separator and text \NC\MR
+ \NC joinedup \NC no vertical spacing before and after itemize \NC\MR
+ \NC broad \NC horizontal spacing between separator and text \NC\MR
+ \NC inmargin \NC place separator in margin \NC\MR
+ \NC atmargin \NC place separator on margin \NC\MR
+ \NC stopper \NC place full stop after separator \NC\MR
+ \NC columns \NC put items in columns \NC\MR
+ \NC intro \NC prevent page breaking after introduction line \NC\MR
+ \NC continue \NC continue numbering or lettering \NC\LR
+ \HL
+ \stoptable}
+
+You can use the set up parameters in \type{\startitemize}, but for reasons of
+consistency you can make them valid for the complete document with
+\type{\setupitemize}.
+
+The parameter \type{columns} is used in conjunction with
+a (written) number. If you type this:
+
+\startbuffer
+\startitemize[n,columns,four]
+\item Achter 't Werk
+.
+.
+.
+\item Justitiebastion
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+\page[bigpreference]
+
+You will get:
+
+\startbuffer
+\startitemize[n,packed,columns,four,broad]
+\item Achter 't Werk
+\item Baangracht
+\item Brouwersgracht
+\item Eikenlaan
+\item Eiland
+\item Gasthuisstraat
+\item Heerengracht
+\item Hofstraat
+\item Hoogstraat
+\item Julianakade
+\item Justitiebastion
+\item Kaai
+\item Kalverstraat
+\item Kastanjelaan
+\item Keppelstraat
+\stopitemize
+\stopbuffer
+
+\bgroup
+\getbuffer
+\egroup
+
+Sometimes you want to continue the enumeration after a short intermezzo. Then you
+type for example \type{\startitemize[continue]} and numbering
+will continue and all other preferences are kept.
+
+\startbuffer
+\startitemize[continue]
+\item Markt
+\item Meestersteeg
+\item Prinsengracht
+\item Raamstraat
+\item Ridderstraat
+\item Rosmolenstraat
+\item Royenplein
+\item Van Nahuijsweg
+\item Vicariehof
+\item Vissteeg
+\item Watersteeg
+\item Wilhelminalaan
+\item Ziekenhuisstraat
+\stopitemize
+\stopbuffer
+
+\getbuffer
+
+The parameter \type{broad} enlarges the horizontal space between item separator
+and itemtext.
+
+\shortsetup{setupitemize}
+
+An itemize within an itemize is automatically typeset in a correct way. For
+example if you type:
+
+\startbuffer
+In the Netherlands the cities can determine the height of a number of
+taxes. So the cost of living can differ from town to town. There are
+differences of up to 50\% in taxes such as:
+
+\setupitemize[2][width=5em]
+\startitemize[n]
+
+\item[estate tax] real estate tax
+
+ The real estate tax is divided into two components:
+
+ \startitemize[a,packed]
+ \item the ownership tax
+ \item the tenant tax
+ \stopitemize
+
+ If the real estate has no tenant the owner pays both components.
+
+\item dog licence fee
+
+ The owner of one or more dogs pays a fee. When a dog has died
+ or been sold the owner has to inform city hall.
+
+\stopitemize
+\stopbuffer
+
+\typebuffer
+
+then the horizontal space between item separator and text at the second level of
+itemizing is set with \type{\setupitemize[2][width=5em]}.
+
+The example will look like this:
+
+\start
+\getbuffer
+\stop
+
+You can refer to an item if you give it a label (see \type{\item[estate tax]}).
+If you then type:
+
+\startbuffer
+\in{In item}[estate tax] we discussed one of the income sources of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+You'll get a reference to that item:
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex
new file mode 100644
index 00000000000..243f96b15a2
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-layout.tex
@@ -0,0 +1,241 @@
+\startcomponent ma-cb-en-layout
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page layout]
+
+\index{layout}
+\index{page design}
+
+\Command{\tex{setuplayout}}
+\Command{\tex{adaptlayout}}
+\Command{\tex{showlayout}}
+\Command{\tex{showframe}} % VZ 2006-11-15
+\Command{\tex{showsetups}}
+\Command{\tex{showmakeup}}
+\Command{\tex{startlocal}}
+
+\startsection[title=Introduction]
+
+The {\em Layouts in \CONTEXT} manual by Willy Egger contains the necessary
+background information on page layout and design. Below you will find only the
+basic information necessary for defining rather simple layouts for paper and
+screen documents.
+
+For more information (examples and usage) on the \type{\setuplayout} command
+please refer to the
+\goto {\CONTEXTWIKI} [ url(http://wiki.contextgarden.net/Layout) ].
+
+\stopsection
+
+\startsection[title=Designing the pagelayout]
+
+To be able to design a page layout you have to familiarize yourself with the
+pagemodel of \CONTEXT. \in{Figure}[fig:pageareas] shows the areas on a page
+that you can use in your design.
+
+\placefigure
+ [here]
+ [fig:pageareas]
+ {The page areas.}
+ {\externalfigure[fig-page-areas-en.pdf][width=.75\hsize]}
+
+The orange bodytext area contains the running text. The top, bottom, and edge
+area are useful for buttons in screen documents.
+
+Please keep in mind that in \CONTEXT\ you are defining|/|designing a
+right-hand page. Only after you have setup
+\type{\setuppagenumbering[alternative=doublesided]} the left page
+is available (mirrored right page).
+
+\starthiding
+ % AFO: this is the file minibook-en.tex in graphics map
+ \setuppapersize[A10][A10]
+ \setuplayout[cutspace=2mm,backspace=6mm,width=15mm]
+ \setupbodyfont[6pt]
+ \setuppagenumbering[state=stop]
+ \setupbackgrounds[text][text][background=color,backgroundcolor=orange]
+ \setupbackgrounds[header,text,footer][leftmargin][background=color,backgroundcolor=lightgreen]
+ \setupbackgrounds[header,text,footer][leftmargin,text,rightmargin][frame=on]
+ \setupfootertexts[margin][\midaligned{l}][\midaligned{r}][\midaligned{r}][\midaligned{l}]
+ \starttext
+ \midaligned{design page} \page
+ \setuppagenumbering[alternative={singlesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page} \page
+ \setuppagenumbering[alternative={singlesided,doublesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page} \page
+ \setuppagenumbering[alternative={doublesided}]
+ \inmargin{\midaligned{m}}\midaligned{left page} \page
+ \inmargin{\midaligned{m}}\midaligned{right page}
+ \stoptext
+\stophiding
+
+\placefigure
+ [here]
+ [fig:sidedness]
+ {Page alternatives.}
+ {\startcombination[3*1]
+ {\externalfigure[minibook-en.pdf][type=pdf,page=2,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=3,width=2.4cm]}{singlesided}
+ {\externalfigure[minibook-en.pdf][type=pdf,page=4,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=5,width=2.4cm]}{single-double}
+ {\externalfigure[minibook-en.pdf][type=pdf,page=6,width=2.4cm]\externalfigure[minibook-en.pdf][type=pdf,page=7,width=2.4cm]}{doublesided}
+ \stopcombination}
+
+Note in \in{figure}[fig:sidedness] that:
+
+\startitemize[packed]
+\item the margintext (\type{\inmargin{m}}) is always in the left margin
+\item the footertext in the margin (\type{\setupfootertexts[margin][l][r][r][l]}) adapts automatically
+\item the page is completely mirrored when \type{alternative=doublesided}
+\stopitemize
+
+When designing a page ask yourself a few questions:
+
+\startitemize[packed]
+\item do I want margin texts or margin figures
+\item will I use the margin for the section numbering
+\item do I have footer and/or header texts
+\item do I want a double sided layout (right--left page mirrored)
+\item do I use ornaments (like tabs) on the page
+\item do I have navigational buttons (screen documents)
+\stopitemize
+
+\stopsection
+
+\startsection[title=Defining the papersize / screensize]
+
+Before you can set up your page layout you have to have an idea about the paper
+dimensions. The cutmarks connected by the dashed lines in \in{figure}[fig:pageareas]
+indicate the papersize. In \CONTEXT\ you set up your papersize with:
+
+\shortsetup{\tex{setuppapersize}}
+
+Most common predefined papersizes in \CONTEXT\ are A0..A10 and B1..B10 for paper
+and S3..S8 for screen documents.
+
+Mostly you will use the default setup:
+
+\startbuffer
+\setuppapersize
+ [A4][A4]
+\stopbuffer
+
+\typebuffer
+
+But you can also define your own paper size for specific products:
+
+\startbuffer
+\definelayout
+ [postcard]
+ [width=15cm,
+ height=10cm]
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Defining the page layout]
+
+The page layout is defined by:
+
+\shortsetup{setuplayout}
+
+This command is typed in the set up area of your input file.
+
+\placefigure
+ [here]
+ [fig:pageparameters]
+ {The page parameters.}
+ {\externalfigure[fig-page-parameters-en.pdf][width=.8\hsize]}
+
+The layout of this manual was set with:
+
+\startbuffer
+\setuplayout
+ [backspace=3cm,
+ margin=2cm,
+ margindistance=.5cm,
+ width=15cm,
+ topspace=2cm,
+ header=2cm,
+ footer=2cm,
+ height=25.7cm]
+\stopbuffer
+
+\typebuffer
+
+If you want to look at your page layout you can type the command
+\type{\showframe} and process one page or the whole file. The areas are shown in
+a number of frames.
+
+The command \type{\showsetups} shows the values of the parameters. A combination
+of both commands is \type{\showlayout}.
+
+The values of the layout parameters are available as commands. This enables you
+to work more accurately when defining measures of columns, figures and tables. A
+few of these parameters are explained in \in{table}[tab:fewparameters].
+
+\placetable
+ [here,force]
+ [tab:fewparameters]
+ {A few parameters as commands.}
+\starttable[|l|l|]
+\HL
+\NC \bf Commands \NC \bf Meaning \NC\SR
+\HL
+\NC \type{\makeupwidth} \NC width of the typing area \NC\FR
+\NC \type{\makeupheight} \NC height of the typing area \NC\MR
+\NC \type{\textwidth} \NC width of the text area \NC\MR
+\NC \type{\textheight} \NC height of the text area \NC\LR
+\HL
+\stoptable
+
+If you want to define the width of a column or the height of a figure you can do
+it relative to the \type{\makeupwidth} or \type{\makeupheight}. Changes in this
+width or height will alter columns and figures proportionally.
+
+\startbuffer
+\placefigure
+ [here]
+ [fig:stepgable]
+ {A stepgable.}
+ {\externalfigure[ma-cb-19][width=.6\textwidth]}
+\stopbuffer
+
+\typebuffer
+
+After processing this would become:
+
+\getbuffer
+
+The other available values are (shown with \type{\showsetups}):
+
+\startcolumns
+\switchtobodyfont[8pt]
+\showsetups
+\stopcolumns
+
+The parameter values have a global effect and are default throughout the
+document. Nevertheless you might want to make slight changes in the page design
+for a number of pages.
+
+\startbuffer
+\adaptlayout[21,38][height=+.5cm]
+\stopbuffer
+
+\typebuffer
+
+In this case page 21 and 38 have a height of .5~cm + \type{textheight}.
+
+It is advisable not to use these local changes too often. It is always better to
+alter the text than to change the page layout.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex
new file mode 100644
index 00000000000..54ed6db6a7b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-margintexts.tex
@@ -0,0 +1,100 @@
+\startcomponent ma-cb-en-margintexts
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Margin texts]
+
+\index{margin text}
+
+\Command{\tex{margintext}}
+\Command{\tex{inmargin}}
+\Command{\tex{inleft}}
+\Command{\tex{inright}}
+\Command{\tex{margintitle}}
+
+It is very easy to put text in the margin. You just use \type{\inmargin}.
+
+\shortsetup{inmargin}
+
+You may remember one of the earlier examples:
+
+\startbuffer[marginpicture]
+\inmargin
+ {\externalfigure
+ [ma-cb-23]
+ [width=.6\marginwidth]}
+\stopbuffer
+
+\typebuffer[marginpicture]
+
+This would result in a figure in the \pagereference [marginpicture]
+margin. You can imagine that it looks quite nice in some
+documents. But be careful. The margin is rather small so the figure could become
+very marginal.
+
+A few other examples are shown in the text below.\getbuffer
+[marginpicture]
+
+\startbuffer
+The Ridderstraat (Street of knights) \inmargin{Street of\\Knights}
+is an obvious name. In the 14th and 15th centuries, nobility and
+prominent citizens lived in this street. Some of their big houses
+were later turned into poorhouses \inright{poorhouse}and old
+peoples homes.
+
+Up until \inleft[low]{\tfc 1940}1940 there was a synagog in the
+Ridderstraat. Some 40 Jews gathered there to celebrate their
+sabbath. During the war all Jews were deported to Westerbork and
+then to the extermination camps in Germany and Poland. None of
+the Jewish families returned. The synagog was knocked down in
+1958.
+\stopbuffer
+
+\typebuffer
+
+The commands \type{\inmargin}, \type{\inleft} and \type{\inright} all have the
+same function. In a two sided document \type{\inmargin} puts the margin text in
+the correct margin. The \type{\\} is used for line breaking. The example above
+would look like this:
+
+\getbuffer
+
+You can set up the margin text with:
+
+\shortsetup{setupinmargin}
+
+Other commands that you can use for forcing text into the margin
+are listed in \in{table}[tab:margincommands].
+
+\placetable
+ [here]
+ [tab:margincommands]
+ {Overview of margin commands.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\ininner} \NC text in inner margin \NC\FR
+ \NC \type{\inouter} \NC text in outer margin \NC\MR
+ \NC \type{\inright} \NC text in right margin \NC\MR
+ \NC \type{\inleft} \NC text in left margin \NC\MR
+ \NC \type{\inmargin} \NC text in the margin \NC\MR
+ \NC \type{\inothermargin} \NC text in other margin \NC\MR
+ \NC \type{\margintext} \NC text in the margin \NC\LR
+ \HL
+ \stoptable}
+
+If you want to place more extensive text blocks in the margin there is the
+command:
+
+\shortsetup{marginblock}
+
+and the accompanying command:
+
+\shortsetup{setupmarginblocks}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex
new file mode 100644
index 00000000000..c1430603f3f
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-math.tex
@@ -0,0 +1,524 @@
+\startcomponent ma-cb-en-math
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=formulas,title=Typesetting math]
+
+\startsection[title=Introduction]
+
+\index {math}
+
+\TEX\ is {\em the} typesetting program for math. However, this is not the
+extensive chapter on typesetting math you might expect. We advise you to do some
+further reading on typesetting formulas in \TEX. See for example: \footnote{In
+this introduction on typesetting math we relied on the booklet {\em \TEX niques}
+by Arthur Samuel.}
+
+\startitemize[packed]
+\item {\em The \TeX Book} by D.E. Knuth
+\item {\em The Beginners Book of \TeX} by S. Levy and R. Seroul
+\stopitemize
+
+\startsection[title=Typesetting math]
+
+\index {math mode}
+\index {display mode}
+\index {text mode}
+
+Normally different conventions are applied for typesetting normal text and math
+text. These conventions are \quote{known} by \TEX\ and applied accordingly when
+generating a document. We can rely on \TEX\ for delivering high quality math
+output.
+
+A number of conventions for math are:
+
+\startitemize[n,packed]
+
+\item Characters are typeset in $math\ italic$ (don't confuse this with the
+ normal {\it italic characters} in a font).
+
+\item Symbols like Greek characters ($\alpha$, $\chi$) and math symbols ($\leq$,
+ $\geq$, $\in$) are used.
+
+\item Spacing will differ from normal spacing.
+
+\item Math expressions have a different alignment than that of the running text.
+
+\item The sub and superscripts are downsized automatically, like in $a^{b}_{c}$.
+
+\item Certain symbols have different appearances in the inline and display mode.
+
+\stopitemize
+
+When typesetting math you have to work in the so called math mode in which math
+expressions can be defined by means of plain \TEX||commands.
+
+Math mode has two alternatives: text mode and display mode. Math in text
+mode is activated by \type{$} and \type{$}, while display mode is activated by
+\type{$$} and \type{$$}. In \CONTEXT\ however, display mode is activated with
+the \type{\start ... \stopformula} command pair to have more grip on vertical
+spacing around the formula.
+
+\startbuffer
+The municipality of Hasselt covers an area of 42,05 \unit{Square Kilo
+Meter}. Now, if you consider a circular area of this size with the
+market place of Hasselt as the center point $M$ you can calculate its
+diameter with ${{1}\over{4}} \pi r^2$.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+The many \type{{}} (grouping) in ${{1}\over{4}} \pi r^2$ are essential for
+separating operations in the expression. If you omit the outer curly braces like
+this: \type{${1}\over{4} \pi r^2$}, you would get a non desired result:
+${1}\over{4} \pi r^2$.
+
+The letters and numbers are typeset in three different sizes: text size $a+b$,
+script size $\scriptstyle a+b$ and scriptscript size $\scriptscriptstyle a+b$.
+These can be influenced by the commands \type{\scriptstyle} and
+\type{\scriptscriptstyle}.
+
+Symbols like $\int$ and $\sum$ will have a different form in text and display
+mode. If we type \type {$\sum_{n=1}^{m}$} or \type {$\int_{-\infty}^{+\infty}$}
+we will get {$\sum_{n=1}^{m}$} and {$\int_{-\infty}^{+\infty}$}. But when you
+type:
+
+\startbuffer
+\startformula
+ \sum_{n=1}^{m} \quad {\rm and} \quad \int_{-\infty}^{+\infty}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to get displaymode you get:
+
+\getbuffer
+
+With the commands \type {\nolimits} and \type{\limits} you can influence the
+appearances of \type{\sum} and \type{\int}:
+
+\startbuffer
+\startformula
+ \sum_{n=1}^{m}\nolimits
+ \quad {\rm and} \quad
+ \int_{-\infty}^{+\infty}\limits
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+which will result in:
+
+\getbuffer
+
+For typesetting fractions there is the command \type {\over}. In \CONTEXT\ you
+can use the alternative \type {\frac}. For ${\frac{a}{1+b}}+c$ we type for
+instance \type {${\frac{a}{1+b}}+c$}.
+
+Other commands to put one thing above the other, are:
+
+\startbuffer[atop]
+${a} \atop {b}$
+\stopbuffer
+\startbuffer[choose]
+${n+1} \choose {k}$
+\stopbuffer
+\startbuffer[brack]
+${m} \brack {n}$
+\stopbuffer
+\startbuffer[brace]
+${m} \brace {n-1}$
+\stopbuffer
+
+\starttabulate[|l|l|l|l|]
+\NC \type {\atop}
+\NC \typebuffer[atop]
+\NC \mathstrut\getbuffer[atop]
+\NC
+\NC\NR
+\NC \type {\choose}
+\NC \typebuffer[choose]
+\NC
+\NC \mathstrut\getbuffer[choose]
+\NC\NR
+\NC \type {\brack}
+\NC \typebuffer[brack]
+\NC \mathstrut\getbuffer[brack]
+\NC
+\NC\NR
+\NC \type {\brace}
+\NC \typebuffer[brace]
+\NC
+\NC \mathstrut\getbuffer[brace]
+\NC\NR
+\stoptabulate
+
+\TEX\ can enlarge delimiters like (~) and $\{~\}$ automatically if the left and
+right delimiter is preceeded by the commands \type {\left} and \type {\right}
+respectively. If you type:
+
+\startbuffer
+\startformula
+ 1+\left(\frac{1}{1-x^{x-2}}\right)^3
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+you will get:
+
+\getbuffer
+
+Sub and superscripts are invoked by \quote {\type{_}} and \quote {\type{^}}. They
+have effect on the next first character so grouping with $\{$~$\}$ is necessary
+in case of multi character sub and superscripts.
+
+In certain situations the delimiters can be preceeded by \type{\bigl},
+\type{\Bigl}, \type{\biggl} and \type{\Biggl} and their right counterparts. Even
+bigger delimiters can be produced by placing \type{\left} and \type{\right} in a
+\type{\vbox} construction. When we type a senseless expression like:
+
+\startbuffer
+\startformula
+ \left(\vbox to 16pt{}x^{2^{2^{2^{2}}}}\right)
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+In display mode the following delimiters will work in the automatic enlargement
+mechanism:
+
+\starttabulate[|l|l|l|l|l|l|l|l|]
+\NC \type{\lfloor} \NC $\lfloor$
+\NC \type{\langle} \NC $\langle$
+\NC \type{\vert} \NC $\vert$
+\NC \type{\downarrow} \NC $\downarrow$
+\NC\NR
+\NC \type{\rfloor} \NC $\rfloor$
+\NC \type{\rangle} \NC $\rangle$
+\NC \type{\Vert} \NC $\Vert$
+\NC \type{\Downarrow} \NC $\Downarrow$
+\NC\NR
+\NC \type{\lceil} \NC $\lceil$
+\NC \type{/} \NC $/$
+\NC \type{\uparrow} \NC $\uparrow$
+\NC \type{\updownarrow} \NC $\updownarrow$
+\NC\NR
+\NC \type{\rceil} \NC $\rceil$
+\NC \type{\backslash} \NC $\backslash$
+\NC \type{\Uparrow} \NC $\Uparrow$
+\NC \type{\Updownarrow} \NC $\Updownarrow$
+\NC\NR
+\stoptabulate
+
+In display mode we should typeset only one fraction and otherwise switch to the
+\type{a/b} notation. To get:
+
+\startformula
+ a_0 + {\frac{a}{a_1 + \frac{1}{a_2}}}
+\stopformula
+
+we will not type:
+
+\startbuffer
+\startformula
+ a_0+{\frac{a}{a_1+\frac{1}{a_2}}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+but prefer:
+
+\startbuffer
+\startformula
+ a_0 + {\frac{a}{a_1 + 1/a_2}}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to obtain:
+
+\getbuffer
+
+In addition we could also use the command \type{\displaystyle}. If we would type:
+
+\startbuffer
+\startformula
+ a_0 + {\frac{a}{a_1 + \frac{1}{\strut \displaystyle a_2}}}
+\stopformula
+\stopbuffer
+
+\getbuffer
+
+we will get:
+
+\getbuffer
+
+Below we demonstrate the commands \type{\matrix}, \type{\pmatrix}, \type{\ldots},
+\type{\cdots} and \type{\cases} without any further explanation.
+
+\startbuffer[a]
+\startformula
+\stopbuffer
+
+\startbuffer[c]
+\stopformula
+\stopbuffer
+
+\startbuffer[b]
+ A=\left(\matrix{x-\lambda & 1 & 0 \cr
+ 0 & x-\lambda & 1 \cr
+ 0 & 0 & x-\lambda \cr}\right)
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\left|\matrix{x-\mu& 1 & 0 \cr
+ 0 & x-\mu & 1 \cr
+ 0 & 0 & x-\mu \cr}\right|
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\pmatrix{a_{11} & a_{12} & \ldots & a_{1n} \cr
+ a_{21} & a_{22} & \ldots & a_{2n} \cr
+ \vdots & \vdots & \ddots & \vdots \cr
+ a_{m1} & a_{m2} & \ldots & a_{mn} \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ A=\pmatrix{a_{11} & a_{12} & \ldots & a_{1n} \cr
+ a_{21} & a_{22} & \ldots & a_{2n} \cr
+ \vdots & \vdots & \ddots & \vdots \cr
+ a_{m1} & a_{m2} & \ldots & a_{mn} \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+\startbuffer[b]
+ |x|=\cases{ x, & if $x\geq0$; \cr
+ -x, & otherwise \cr}
+\stopbuffer
+
+\typebuffer[a,b,c] \startformula\getbuffer[b]\stopformula
+
+To typeset normal text in a math expression we have to consider the following.
+First a space is not typeset in math mode so we have to enforce one with
+\type{ \ } (backslash). Second we have to indicate a font switch, because the text should
+not appear in $math\ italic$ but in the actual font. So in \CONTEXT\ we have to
+type:
+
+\startbuffer
+\startformula
+ x^3+{\tf lower\ order\ terms}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+to get:
+
+\getbuffer
+
+The math functions like $\sin$ and $\tan$ that have to be typeset in the actual
+font are predefined functions in \TEX:
+
+\starttabulate[|l|l|l|l|l|l|l|l|]
+\NC \type{\arccos} \NC \type{\cos} \NC \type{\csc} \NC \type{\exp} \NC \type{\ker} \NC \type{\limsup} \NC \type{\min} \NC \type{\sinh} \NC\NR
+\NC \type{\arcsin} \NC \type{\cosh} \NC \type{\deg} \NC \type{\gcd} \NC \type{\lg} \NC \type{\ln} \NC \type{\Pr} \NC \type{\sup} \NC\NR
+\NC \type{\arctan} \NC \type{\cot} \NC \type{\det} \NC \type{\hom} \NC \type{\lim} \NC \type{\log} \NC \type{\sec} \NC \type{\tan} \NC\NR
+\NC \type{\arg} \NC \type{\coth} \NC \type{\dim} \NC \type{\inf} \NC \type{\liminf} \NC \type{\max} \NC \type{\sin} \NC \type{\tanh} \NC\NR
+\stoptabulate
+
+If we type the sinus or limit function:
+
+\startbuffer
+\startformula
+ \sin 2\theta=2\sin\theta\cos\theta
+ \quad {\tf or} \quad
+ \lim_{x\to0}{\frac{\sin x}{x}}=1
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+Alignment in math expressions may need special attention. In multi line
+expressions we sometimes need alignment at the \quote {$=$} sign. This is done by
+the command \type{\eqalign}. If we type:
+
+\startbuffer
+\startformula
+ \eqalign{
+ ax^2+bx+c &= 0 \cr
+ x &= \frac{-b \pm \sqrt{b^2-4ac}}{2a} \cr}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+we get:
+
+\getbuffer
+
+Sometimes alignment at more than one location is wanted. Watch the second line in
+the next example and see how it is defined:
+
+\startbuffer
+\startformula
+ \eqalign{
+ ax+bx+\cdots+yx+zx & = x(a +b+ \cdots \cr
+ &\phantom{= x(a~}+y+z) \cr
+ & = y \cr}
+\stopformula
+\stopbuffer
+
+\typebuffer
+
+This results in:
+
+\getbuffer
+
+Next to the command \type{\phantom} there are \type{\hphantom} without height and
+depth and \type{\vphantom} without width.
+
+You can rely on \TEX\ for spacing within a math expression. In some situations,
+however you may want to influence spacing. This is done by:
+
+\starttabulate[|l|r|]
+\NC \type{\!} \NC $-\frac{1}{6}$\type{\quad} \NC\NR
+\NC \type{\,} \NC $\frac{1}{6}$\type{\quad} \NC\NR
+\NC \type{\>} \NC $\frac{2}{9}$\type{\quad} \NC\NR
+\NC \type{\;} \NC $\frac{5}{18}$\type{\quad} \NC\NR
+\stoptabulate
+
+These \quote {spaces} are related to \type {\quad} that stands for the width of
+the capital \quote{M}.
+
+The use of the command \type{\prime} speaks for itself. For example if would want
+$y_1^\prime+y_2^{\prime\prime}$ you should type
+\type{$y_1^\prime+y_2^{\prime\prime}$}.
+
+An expression like $\root 3 \of {x^2+y^2}$ is obtained by \type{$\root 3 \of
+{x^2+y^2}$}.
+
+At the end of this section we point to the command \type{\mathstrut} which we can
+use to enforce consistency, for example within the root symbol. With
+\type{$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$} we will get
+$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$ in stead of
+$\sqrt{a}+\sqrt{d}+\sqrt{y}$.
+
+See \in{appendix}[overviews] for a complete overview of math commands.
+
+\stopsection
+
+\startsection[title=Placing formulas]
+
+\index{formula}
+
+\Command{\tex{placeformula}}
+\Command{\tex{startformula}}
+\Command{\tex{setupformulas}}
+
+You can typeset numbered formulas with:
+
+\shortsetup{placeformula}
+\shortsetup{startformula}
+
+Two examples:
+
+\startbuffer
+\placeformula[formula:aformula]
+ \startformula
+ y=x^2
+ \stopformula
+
+\placeformula
+ \startformula
+ \int_0^1 x^2 dx
+ \stopformula
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+The command \type{\placeformula} handles spacing around the formulas and the
+numbering. The bracket pair is optional and is used for referencing and to switch
+numbering on and off.
+
+\startbuffer
+\placeformula[first one]
+\startformula
+ y=x^2
+\stopformula
+
+\placeformula[middle one]
+\startformula
+ y=x^3
+\stopformula
+
+\placeformula[last one]
+\startformula
+ y=x^4
+\stopformula
+\stopbuffer
+
+\getbuffer
+
+\in{Formula}[middle one] was typed like this:
+
+\startbuffer
+\placeformula[middle one]
+ \startformula
+ y=x^3
+ \stopformula
+\stopbuffer
+
+\typebuffer
+
+The lable \type{[middle one]} is used for refering to this formula. Such a
+reference is made with \type{\in{formula}[middle one]}.
+
+If no numbering is required you type:
+
+\type{\placeformula[-]}
+
+Numbering of formulas is set up with \type{\setupnumbering}. In this manual
+numbering is set up with \type{\setupnumbering[way=bychapter]}. This means that
+the chapter number preceeds the formula number and numbering is reset with each
+new chapter. For reasons of consistency the tables, figures, intermezzi etc. are
+numbered in the same way. Therefore you use \type{\setupnumbering} in the set up
+area of your input file.
+
+Formulas can be set up with:
+
+\shortsetup{setupformulae}
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex
new file mode 100644
index 00000000000..d7f09e89a32
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-mathcharacters.tex
@@ -0,0 +1,330 @@
+\startcomponent ma-cb-en-mathcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=overviews,title=Commands in math mode]
+
+\index{symbols in math mode}
+
+\startsection[title=Greek characters]
+
+\starttabulate[|l|l|l|l|l|l|l|l|l|]
+\NC \NC $\alpha$ \NC \type{\alpha}
+\NC \NC $\iota$ \NC \type{\iota}
+\NC \NC $\varrho$ \NC \type{\varrho} \NC\NR
+\NC \NC $\beta$ \NC \type{\beta}
+\NC \NC $\kappa$ \NC \type{\kappa}
+\NC $\Sigma$ \NC $\sigma$ \NC \type{\sigma} \NC\NR
+\NC $\Gamma$ \NC $\gamma$ \NC \type{\gamma}
+\NC $\Lambda$ \NC $\lambda$ \NC \type{\lambda}
+\NC \NC $\varsigma$ \NC \type{\varsigma} \NC\NR
+\NC $\Delta$ \NC $\delta$ \NC \type{\delta}
+\NC \NC $\mu$ \NC \type{\mu}
+\NC \NC $\tau$ \NC \type{\tau} \NC\NR
+\NC \NC $\epsilon$ \NC \type{\epsilon}
+\NC \NC $\nu$ \NC \type{\nu}
+\NC \NC $\upsilon$ \NC \type{\upsilon} \NC\NR
+\NC \NC $\varepsilon$ \NC \type{\varepsilon}
+\NC $\Xi$ \NC $\xi$ \NC \type{\xi}
+\NC $\Phi$ \NC $\phi$ \NC \type{\phi} \NC\NR
+\NC \NC $\zeta$ \NC \type{\zeta}
+\NC \NC $o$ \NC \type{o}
+\NC \NC $\varphi$ \NC \type{\varphi} \NC\NR
+\NC \NC $\eta$ \NC \type{\eta}
+\NC $\Pi$ \NC $\pi$ \NC \type{\pi}
+\NC \NC $\chi$ \NC \type{\chi} \NC\NR
+\NC $\Theta$ \NC $\theta$ \NC \type{\theta}
+\NC \NC $\varpi$ \NC \type{\varpi}
+\NC $\Psi$ \NC $\psi$ \NC \type{\psi} \NC\NR
+\NC \NC $\vartheta$ \NC \type{\vartheta}
+\NC \NC $\rho$ \NC \type{\rho}
+\NC $\Omega$ \NC $\omega$ \NC \type{\omega} \NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Special symbols]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\aleph$ \NC \type{\aleph}
+\NC $\prime$ \NC \type{\prime}
+\NC $\forall$ \NC \type{\forall}
+\NC\NR
+\NC $\hbar$ \NC \type{\hbar}
+\NC $\emptyset$ \NC \type{\emptyset}
+\NC $\exists$ \NC \type{\exists}
+\NC\NR
+\NC $\imath$ \NC \type{\imath}
+\NC $\nabla$ \NC \type{\nabla}
+\NC $\neg$ \NC \type{\neg}
+\NC\NR
+\NC $\jmath$ \NC \type{\jmath}
+\NC $\surd$ \NC \type{\surd}
+\NC $\flat$ \NC \type{\flat}
+\NC\NR
+\NC $\ell$ \NC \type{\ell}
+\NC $\top$ \NC \type{\top}
+\NC $\natural$ \NC \type{\natural}
+\NC\NR
+\NC $\wp$ \NC \type{\wp}
+\NC $\bot$ \NC \type{\bot}
+\NC $\sharp$ \NC \type{\sharp}
+\NC\NR
+\NC $\Re$ \NC \type{\Re}
+\NC $\Vert$ \NC \type{\Vert}
+\NC $\clubsuit$ \NC \type{\clubsuit}
+\NC\NR
+\NC $\Im$ \NC \type{\Im}
+\NC $\angle$ \NC \type{\angle}
+\NC $\diamondsuit$ \NC \type{\diamondsuit}
+\NC\NR
+\NC $\partial$ \NC \type{\partial}
+\NC $\triangle$ \NC \type{\triangle}
+\NC $\heartsuit$ \NC \type{\heartsuit}
+\NC\NR
+\NC $\infty$ \NC \type{\infty}
+\NC $\backslash$ \NC \type{\backslash}
+\NC $\spadesuit$ \NC \type{\spadesuit}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Operators in addition to $+$, $-$ and $*$]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\pm$ \NC \type{\pm}
+\NC $\cap$ \NC \type{\cap}
+\NC $\vee$ \NC \type{\vee}
+\NC\NR
+\NC $\mp$ \NC \type{\mp}
+\NC $\cup$ \NC \type{\cup}
+\NC $\wedge$ \NC \type{\wedge}
+\NC\NR
+\NC $\setminus$ \NC \type{\setminus}
+\NC $\uplus$ \NC \type{\uplus}
+\NC $\oplus$ \NC \type{\oplus}
+\NC\NR
+\NC $\cdot$ \NC \type{\cdot}
+\NC $\sqcap$ \NC \type{\sqcap}
+\NC $\ominus$ \NC \type{\ominus}
+\NC\NR
+\NC $\times$ \NC \type{\times}
+\NC $\sqcup$ \NC \type{\sqcup}
+\NC $\otimes$ \NC \type{\otimes}
+\NC\NR
+\NC $\ast$ \NC \type{\ast}
+\NC $\triangleleft$ \NC \type{\triangleleft}
+\NC $\oslash$ \NC \type{\oslash}
+\NC\NR
+\NC $\star$ \NC \type{\star}
+\NC $\triangleright$ \NC \type{\triangleright}
+\NC $\odot$ \NC \type{\odot}
+\NC\NR
+\NC $\diamond$ \NC \type{\diamond}
+\NC $\wr$ \NC \type{\wr}
+\NC $\dagger$ \NC \type{\dagger}
+\NC\NR
+\NC $\circ$ \NC \type{\circ}
+\NC $\bigcirc$ \NC \type{\bigcirc}
+\NC $\ddagger$ \NC \type{\ddagger}
+\NC\NR
+\NC $\bullet$ \NC \type{\bullet}
+\NC $\bigtriangleup$ \NC \type{\bigtriangleup}
+\NC $\amalg$ \NC \type{\amalg}
+\NC\NR
+\NC $\div$ \NC \type{\div}
+\NC $\bigtriangledown$ \NC \type{\bigtriangledown}
+\NC ~ \NC ~
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Operators]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\sum$ \NC \type{\sum}
+\NC $\prod$ \NC \type{\prod}
+\NC $\coprod$ \NC \type{\coprod}
+\NC\NR
+\NC $\int$ \NC \type{\int}
+\NC $\oint$ \NC \type{\oint}
+\NC $\bigcap$ \NC \type{\bigcap}
+\NC\NR
+\NC $\bigcup$ \NC \type{\bigcup}
+\NC $\bigsqcup$ \NC \type{\bigsqcup}
+\NC $\bigvee$ \NC \type{\bigvee}
+\NC\NR
+\NC $\bigwedge$ \NC \type{\bigwedge}
+\NC $\bigodot$ \NC \type{\bigodot}
+\NC $\bigotimes$ \NC \type{\bigotimes}
+\NC\NR
+\NC $\bigoplus$ \NC \type{\bigoplus}
+\NC $\biguplus$ \NC \type{\biguplus}
+\NC \NC
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Relation in addition to $>$, $<$ and $=$]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\leq$ \NC \type{\leq}
+\NC $\geq$ \NC \type{\geq}
+\NC $\equiv$ \NC \type{\equiv}
+\NC\NR
+\NC $\prec$ \NC \type{\prec}
+\NC $\succ$ \NC \type{\succ}
+\NC $\sim$ \NC \type{\sim}
+\NC\NR
+\NC $\preceq$ \NC \type{\preceq}
+\NC $\succeq$ \NC \type{\succeq}
+\NC $\simeq$ \NC \type{\simeq}
+\NC\NR
+\NC $\ll$ \NC \type{\ll}
+\NC $\gg$ \NC \type{\gg}
+\NC $\asymp$ \NC \type{\asymp}
+\NC\NR
+\NC $\subset$ \NC \type{\subset}
+\NC $\supset$ \NC \type{\supset}
+\NC $\approx$ \NC \type{\approx}
+\NC\NR
+\NC $\subseteq$ \NC \type{\subseteq}
+\NC $\supseteq$ \NC \type{\supseteq}
+\NC $\cong$ \NC \type{\cong}
+\NC\NR
+\NC $\sqsubseteq$ \NC \type{\sqsubseteq}
+\NC $\sqsupseteq$ \NC \type{\sqsupseteq}
+\NC $\bowtie$ \NC \type{\bowtie}
+\NC\NR
+\NC $\in$ \NC \type{\in}
+\NC $\ni$ \NC \type{\ni}
+\NC $\propto$ \NC \type{\propto}
+\NC\NR
+\NC $\vdash$ \NC \type{\vdash}
+\NC $\dashv$ \NC \type{\dashv}
+\NC $\models$ \NC \type{\models}
+\NC\NR
+\NC $\smile$ \NC \type{\smile}
+\NC $\mid$ \NC \type{\mid}
+\NC $\doteq$ \NC \type{\doteq}
+\NC\NR
+\NC $\frown$ \NC \type{\frown}
+\NC $\parallel$ \NC \type{\parallel}
+\NC $\perp$ \NC \type{\perp}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Negated relations]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\not<$ \NC \type{\not}\type{<}
+\NC $\not>$ \NC \type{\not}\type{>}
+\NC $\not=$ \NC \type{\not}\type{=}
+\NC\NR
+\NC $\not\leq$ \NC \type{\not}\type{\leq}
+\NC $\not\geq$ \NC \type{\not}\type{\geq}
+\NC $\not\equiv$ \NC \type{\not}\type{\equiv}
+\NC\NR
+\NC $\not\prec$ \NC \type{\not}\type{\prec}
+\NC $\not\succ$ \NC \type{\not}\type{\succ}
+\NC $\not\sim$ \NC \type{\not}\type{\sim}
+\NC\NR
+\NC $\not\preceq$ \NC \type{\not}\type{\preceq}
+\NC $\not\succeq$ \NC \type{\not}\type{\succeq}
+\NC $\not\simeq$ \NC \type{\not}\type{\simeq}
+\NC\NR
+\NC $\not\subset$ \NC \type{\not}\type{\subset}
+\NC $\not\supset$ \NC \type{\not}\type{\supset}
+\NC $\not\approx$ \NC \type{\not}\type{\approx}
+\NC\NR
+\NC $\not\subseteq$ \NC \type{\not}\type{\subseteq}
+\NC $\not\supseteq$ \NC \type{\not}\type{\supseteq}
+\NC $\not\cong$ \NC \type{\not}\type{\cong}
+\NC\NR
+\NC $\not\sqsubseteq$ \NC \type{\not}\type{\sqsubseteq}
+\NC $\not\sqsupseteq$ \NC \type{\not}\type{\sqsupseteq}
+\NC $\not\asymp$ \NC \type{\not}\type{\asymp}
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Some arrows]
+
+\starttabulate[|l|l|l|l|l|l|]
+\NC $\leftarrow$ \NC \type{\leftarrow}
+\NC $\longleftarrow$ \NC \type{\longleftarrow}
+\NC $\uparrow$ \NC \type{\uparrow}
+\NC\NR
+\NC $\Leftarrow$ \NC \type{\Leftarrow}
+\NC $\Longleftarrow$ \NC \type{\Longleftarrow}
+\NC $\Uparrow$ \NC \type{\Uparrow}
+\NC\NR
+\NC $\rightarrow$ \NC \type{\rightarrow}
+\NC $\longrightarrow$ \NC \type{\Rightarrow}
+\NC $\downarrow$ \NC \type{\downarrow}
+\NC\NR
+\NC $\Rightarrow$ \NC \type{\Rightarrow}
+\NC $\Longrightarrow$ \NC \type{\Longrightarrow}
+\NC $\Downarrow$ \NC \type{\Downarrow}
+\NC\NR
+\NC $\leftrightarrow$ \NC \type{\leftrightarrow}
+\NC $\longleftrightarrow$ \NC \type{\longleftrightarrow}
+\NC $\updownarrow$ \NC \type{\updownarrow}
+\NC\NR
+\NC $\Leftrightarrow$ \NC \type{\Leftrightarrow}
+\NC $\Longleftrightarrow$ \NC \type{\Longleftrightarrow}
+\NC $\Updownarrow$ \NC \type{\Updownarrow}
+\NC\NR
+\NC $\mapsto$ \NC \type{\mapsto}
+\NC $\longmapsto$ \NC \type{\longmapsto}
+\NC $\nearrow$ \NC \type{\nearrow}
+\NC\NR
+\NC $\searrow$ \NC \type{\searrow}
+\NC $\swarrow$ \NC \type{\swarrow}
+\NC $\nwarrow$ \NC \type{\nwarrow}
+\NC\NR
+\NC $\hookleftarrow$ \NC \type{\hookleftarrow}
+\NC $\hookrightarrow$ \NC \type{\hookrightarrow}
+\NC ~ \NC ~
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\startsection[title=Alternative commands]
+
+\starttabulate[|l|l|l|l|l|l|l|l|l|l|]
+\NC $\ne$ \NC \type{\ne}
+\NC $\{$ \NC {\tttf\leftargument}
+\NC $\land$ \NC \type{\land}
+\NC $\to$ \NC \type{\to}
+\NC $\vert$ \NC \type{\vert}
+\NC\NR
+\NC $\le$ \NC \type{\le}
+\NC $\}$ \NC {\tttf\rightargument}
+\NC $\lor$ \NC \type{\lor}
+\NC $\gets$ \NC \type{\gets}
+\NC $\Vert$ \NC \type{\Vert}
+\NC\NR
+\NC $\ge$ \NC \type{\ge}
+\NC $\owns$ \NC \type{\owns}
+\NC $\lnot$ \NC \type{\lnot}
+\NC \NC
+\NC \NC
+\NC\NR
+\stoptabulate
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex
new file mode 100644
index 00000000000..e50bed03652
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-metapost.tex
@@ -0,0 +1,75 @@
+\startcomponent ma-cb-en-metapost
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Graphical extension / \METAPOST]
+
+\index[metapost]{\METAPOST}
+\index{graphical features}
+
+The graphical possibilities of \TEX||related macro packages are rather limited.
+However, by using the graphical package \METAPOST\ of John Hobby a complete range
+of graphical features has become available that may improve the look of your
+documents.
+
+In \CONTEXT\ there is a direct link to \METAPOST\ so users can apply the features
+of \METAPOST\ directly into their documents. The chapter headers and page numbers
+of this manual are extended by some graphical elements that are generated by
+\METAPOST.
+
+If you look carefully at these \METAPOST\ extensions you will notice a lot of
+contextual adaptation (width and height dependend) and randomization. So you can do
+things in your document that are not possible in other typesetting applications.
+
+A more practical example (for a mathematician at least) is drawn in \in {figure}
+[fig:metapostexample]:
+
+\startbuffer
+\startreusableMPgraphic{origin}
+ path pb; pb:=(5.5cm,0cm)..(10.5cm,0cm);
+ path qb; qb:=(8cm,-1cm)..(8cm,2.5cm);
+ pickup pencircle scaled 0.5mm;
+ drawarrow pb;
+ drawarrow qb;
+ draw thelabel.rt(btex $x$ etex,(10.6cm,0cm));
+ draw thelabel.top(btex $y$ etex,(8cm,2.6cm));
+ path l; l:=(5.5cm,-0.5cm)..(10.5cm,2cm);
+ pickup pencircle scaled 0.3mm;
+ draw l withcolor blue ;
+ pair A; A:=(6cm,-0.25cm);
+ pair B; B:=(9.3cm,1.4cm);
+ pair C; C:=(9.3cm,-0.25cm);
+ pickup pencircle scaled 0.15cm;
+ drawdot A; drawdot B; drawdot C;
+ draw thelabel.lrt(btex $\scriptstyle P_1(x_1,y_1)$ etex ,A);
+ draw thelabel.lrt(btex $\scriptstyle P_2(x_2,y_2)$ etex ,B);
+ draw thelabel.bot(btex $\scriptstyle P(x_2,y_1)$ etex ,C);
+ path s; s:=A..(9.3cm,-0.25cm);
+ draw s dashed (evenly scaled 1mm) withpen pencircle scaled 0.3mm;
+ path t; t:=B..(9.3cm,-0.25cm);
+ draw t dashed (evenly scaled 1mm) withpen pencircle scaled 0.3mm;
+\stopreusableMPgraphic
+\stopbuffer
+
+\getbuffer
+
+\placefigure
+ [here]
+ [fig:metapostexample]
+ {\METAPOST\ example.}
+ {\reuseMPgraphic{origin}}
+
+This example is taken from the mathematical text book {\em Algetrigulus} by
+Philip Brown. All graphics in his book are made by means of \METAPOST. This
+one is defined by:
+
+\typebuffer
+
+The usage and features of \METAPOST\ within \CONTEXT\ are described in the
+extensive \goto {\METAFUN\ manual} [ url (manual:metafun) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex
new file mode 100644
index 00000000000..4f92e8e4764
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-modules.tex
@@ -0,0 +1,45 @@
+\startcomponent ma-cb-en-modules
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Using modules]
+
+%% VZ: many new modules was added (see ma-cb-cz-modules.tex)
+
+\index{module}
+
+\Command{\tex{usemodule}}
+
+For reasons of efficiency \CONTEXT\ comes with a number of modules that contain
+specific functionality. Loading a module is done in the set up area of your input
+file by means of:
+
+\shortsetup{usemodule}
+
+When you load a module \CONTEXT\ looks for a file with the following (prefix-)name:
+
+\startitemize[packed]
+\item m-modulename (core module)
+\item p-modulename (private module)
+\item s-modulename (\CONTEXT\ style file)
+\item x-modulename (XML module)
+\item t-modulename (third party module)
+\item modulename
+\stopitemize
+
+A few example core modules are:
+
+\startitemize[packed]
+\item m-fields (\type{m-fields.mkiv}): for PDF forms
+\item m-morse (\type{m-morse.mkvi}): for morse
+\item m-spreadsheet (\type{m-spreadsheet.mkiv}): for spreadsheets
+\item m-visual (\type{m-visual.mkiv}): for visual debugging
+\item m-zint (\type{m-zint.mkiv}): for generating bar codes
+\item s-pre-** (\type{s-pre-**}): for presentations
+\stopitemize
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex
new file mode 100644
index 00000000000..ff7bf0b4d90
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pagebackgrounds.tex
@@ -0,0 +1,93 @@
+\startcomponent ma-cb-en-pagebackgrounds
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Backgrounds in page areas]
+
+\index{page areas}
+\index{background+page areas}
+
+\Command{\tex{setupbackgrounds}}
+
+The page background can be set, with:
+
+\shortsetup{setupbackgrounds}
+
+The first two bracket pairs are used to define the page areas. The last bracket
+pair is used for set up.
+
+\startbuffer
+\hbox
+ {\framed[width=1.5cm,frame=off] {}
+ \framed[width=2cm,frame=off] {left}
+ \framed[width=2.5cm,frame=off] {left}
+ \framed[width=3cm,frame=off] {text}
+ \framed[width=2.5cm,frame=off] {right}
+ \framed[width=2cm,frame=off] {right}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {}
+ \framed[width=2cm,frame=off] {edge}
+ \framed[width=2.5cm,frame=off] {margin}
+ \framed[width=3cm,frame=off] {}
+ \framed[width=2.5cm,frame=off] {margin}
+ \framed[width=2cm,frame=off] {edge}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {top}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=3cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {header}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=3cm,background=screen] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off,height=3cm] {text}
+ \framed[width=2cm,height=3cm] {}
+ \framed[width=2.5cm,height=3cm,background=screen]{}
+ \framed[width=3cm,height=3cm,background=screen] {}
+ \framed[width=2.5cm,height=3cm,background=screen]{}
+ \framed[width=2cm,height=3cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {footer}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=3cm,background=screen] {}
+ \framed[width=2.5cm,background=screen] {}
+ \framed[width=2cm] {}}
+\hbox
+ {\framed[width=1.5cm,frame=off] {bottom}
+ \framed[width=2cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=3cm] {}
+ \framed[width=2.5cm] {}
+ \framed[width=2cm] {}}
+\stopbuffer
+
+\placefigure
+ [here]
+ [fig:pageareas]
+ {The page areas defined in \type{\setupbackgrounds}.}
+ {\tt\getbuffer}
+
+If you want to have backgrounds in the gray areas of the page layout of
+\in{figure}[fig:pageareas] you type:
+
+\startbuffer
+\setupbackgrounds
+ [header,text,footer]
+ [leftmargin,text,rightmargin]
+ [background=screen]
+\stopbuffer
+
+\typebuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex
new file mode 100644
index 00000000000..61e2d6ce991
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-pages.tex
@@ -0,0 +1,208 @@
+\startcomponent ma-cb-en-pages
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Page breaking and page numbering]
+
+\index{page breaking}
+\index{page numbering}
+
+\Command{\tex{page}}
+\Command{\tex{setuppagenumbering}}
+\Command{\tex{setupuserpagenumber}}
+
+\startsection[title=Page break]
+
+A page can be enforced or blocked by:
+
+\shortsetup{page}
+
+The options can be stated within the brackets. The options and their meaning are
+presented in \in{table}[tab:page options].
+
+\placetable
+ []
+ [tab:page options]
+ {Page options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{yes} \NC enforce a page \NC\FR
+\NC \type{makeup} \NC enforce a page without filling \NC\MR
+\NC \type{no} \NC no page \NC\MR
+\NC \type{preference} \NC prefer a new page here \NC\MR
+\NC \type{bigpreference} \NC great preference for a new page here \NC\MR
+\NC \type{left} \NC next page is a left handside page \NC\MR
+\NC \type{right} \NC next page is a right handside page \NC\MR
+\NC \type{disable} \NC following commands have no effect \NC\MR
+\NC \type{last} \NC add pages till even number is reached \NC\MR
+\NC \type{quadruple} \NC add pages till a multiple of four is reached \NC\MR
+\NC \type{even} \NC next page is even \NC\MR
+\NC \type{odd} \NC next page in odd \NC\MR
+\NC \type{blank} \NC no page number \NC\MR
+\NC \type{empty} \NC insert an empty page \NC\MR
+\NC \type{reset} \NC following commands do have effect \NC\MR
+\NC \type{start} \NC from now on page commands have effect \NC\MR
+\NC \type{stop} \NC from now on page commands have no effect \NC\LR
+\HL
+\stoptable
+
+\stopsection
+
+\startsection[title=Page numbering]
+
+Numbering pages is done automatically by \CONTEXT. However, numbering the pages
+the way you want it may take some effort.
+
+A rather simple \type{\start ... \stoptext} document will be numbered from
+$1 .. n$ (where $n$ is the last page). If you want your document to number
+its pages alphabetical you can type:
+
+\startbuffer
+\setupuserpagenumber
+ [numberconversion=character]
+\stopbuffer
+
+\typebuffer
+
+in the setup area of your file.
+
+You can enforce a page number with:
+
+\starttyping
+\setupuserpagenumber[number=25]
+\stoptyping
+
+\shortsetup{setupuserpagenumber}
+
+The options of the \type{\setupuserpagenumber} command are given in
+\in{table}[tab:user page number options].
+
+\placetable
+ []
+ [tab:user page number options]
+ {Page numbering: numbering options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{way} \NC how to number the document \NC\FR
+\NC \type{prefix} \NC use pagenumber prefix \NC\MR
+\NC \type{prefixset} \NC use defined prefixset \NC\MR
+\NC \type{prefixseparatorset} \NC use defined separator \NC\MR
+\NC \type{state} \NC start -- stop page numbering \NC\MR
+\NC \type{number} \NC define page number \NC\MR
+\NC \type{numberconversion} \NC convert page number \NC\MR
+\NC \type{numberconversionset} \NC used defined conversion set \NC\LR
+\HL
+\stoptable
+
+The \type{prefixset}, \type{prefixseparatorset} and the \type{numberconversionset}
+options are defined with the \type{\defineprefixset}, \type{\defineseparatorset}
+and \type{\defineconversionset} respectively.
+
+This manual uses the \CONTEXT\ standard document section blocks: frontpart,
+bodymatter and appendices. These section blocks are numbered with roman
+characters, numeral digits and characters respectively.
+
+\startbuffer
+\defineconversionset
+ [frontpart:pagenumber][][romannumerals]
+
+\defineconversionset
+ [bodypart:pagenumber] [][numbers]
+
+\defineconversionset
+ [appendix:pagenumber] [][Characters]
+\stopbuffer
+
+\typebuffer
+
+At the start of each section block the number is reset to i, 1 and A respectively.
+
+The same effect would have been obntained with:
+
+\startbuffer
+\startsectionblockenvironment[frontpart]
+ \setupuserpagenumber[numberconversion=romannumerals]
+\stopsectionblockenvironment
+\stopbuffer
+
+\typebuffer
+
+Page numbering and the location of the page numbers can be set up with:
+
+\shortsetup{setuppagenumbering}
+
+The options of this command are shown in \in{table}[tab:page numbering options]:
+
+\placetable
+ []
+ [tab:page numbering options]
+ {Page numbering: layout options.}
+\starttable[|l|l|]
+\HL
+\NC \bf Option \NC \bf Meaning \NC\SR
+\HL
+\NC \type{alternative} \NC page layout: single or double sided \NC\MR
+\NC \type{location} \NC location of page number on page \NC\MR
+\NC \type{width} \NC width of pagen umber \NC\MR
+\NC \type{left} \NC text left of page number \NC\MR
+\NC \type{right} \NC text right of page number \NC\MR
+\NC \type{page} \NC \unknown \NC\MR
+\NC \type{state} \NC start -- stop page numbering \NC\MR
+\NC \type{command} \NC invoke command \NC\MR
+\NC \type{style} \NC set character style \NC\MR
+\NC \type{color} \NC set color \NC\LR
+\HL
+\stoptable
+
+Note that this is also the command that indicates that your document is single or
+double sided which has an effect on the left-right page layout.
+
+\startbuffer
+\setuppagenumbering
+ [alternative=doublesided]
+\stopbuffer
+
+\typebuffer
+
+In this manual page numbering is set up with:
+
+\starttyping
+\setuppagenumbering
+ [location={footer,middle},
+ command=\NummerCommando]
+\stoptyping
+
+The \type{\NummerCommando} uses \METAPOST\ to draw a unique random image around
+each page number.
+
+You can recal a page number with \type{\userpagenumber}. If you set up your headertext
+with:
+
+\startbuffer
+ \setupheadertexts
+ [Page \userpagenumber\ of \lastuserpagenumber]
+\stopbuffer
+
+\typebuffer
+
+You would get a header with the actual page number and the total of pages (in that
+section block).
+
+The actual page number and the real page number may differ since there may be pages
+or sections that in your document that are not numbered. If you feel the need to
+display the real page number there is the command \type{\realpagenumber}.
+
+Please refer to the \goto {\CONTEXTWIKI} [
+url(http://wiki.contextgarden.net/Command/setupuserpagenumber) ] for more
+details.
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex
new file mode 100644
index 00000000000..668b6ab01ce
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-paragraphs.tex
@@ -0,0 +1,280 @@
+\startcomponent ma-cb-en-paragraphs
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Paragraph spacing]
+
+\startsection[title=Introduction]
+
+\index{paragraph}
+
+\Command{\tex{par}}
+\Command{\tex{paragraph}}
+
+In \TEX\ and \CONTEXT\ the most important unit of text is the paragraph. You can
+start a new paragraph by:
+
+\startitemize[packed]
+\item an empty line
+\item the \TEX\ command \type{\par}
+\stopitemize
+
+In your \ASCII\ input file you should use empty lines as paragraph separators.
+This will lead to a readable, clearly structured and well organized file and will
+prevent mistakes.
+
+In situations where a command has to be closed explicitly you should use
+\type{\par}.
+
+\startbuffer
+During one of the wars Hasselt lay under siege. After some
+time the city was famine stricken, everything edible was
+eaten. Except for one cow. The cow was kept alive and
+treated very well. \par
+Once a day the citizens of Hasselt took the cow for a walk
+on the ramparts. The besiegers saw the well fed cow and
+became very discouraged. They broke up their camps and
+Hasselt was saved. \par
+In the Hoogstraat in Hasselt there is a stone tablet with a
+representation of the cow that commemorates the siege and
+the shrewdness of the citizens of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+This could also be typed without \type{\par}s and a few empty lines.
+
+\startbuffer
+During one of the wars Hasselt lay under siege. After some
+time the city was famine stricken, everything edible was
+eaten. Except for one cow. The cow was kept alive and
+treated very well.
+
+Once a day the citizens of Hasselt took the cow for a walk
+on the ramparts. The besiegers saw the well fed cow and
+became very discouraged. They broke up their camps and
+Hasselt was saved.
+
+In the Hoogstraat in Hasselt there is a stone tablet with a
+representation of the cow that commemorates the siege and
+the wisdom of the citizens of Hasselt.
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Inter paragraph spacing]
+
+\index{inter paragraph spacing}
+
+\Command{\tex{setupwhitespace}}
+\Command{\tex{nowhitespace}}
+\Command{\tex{whitespace}}
+\Command{\tex{startlinecorrection}} % VZ 2006-11-15 setup->start
+\Command{\tex{blank}}
+\Command{\tex{setupblank}}
+\Command{\tex{startpacked}}
+\Command{\tex{startunpacked}}
+
+The vertical spacing between paragraphs can be specified by:
+
+\shortsetup{setupwhitespace}
+
+This document is produced with \type{\setupwhitespace[medium]}.
+
+When inter paragraph spacing is specified there are two commands available that
+are seldom needed:
+
+\starttyping
+\nowhitespace
+\whitespace
+\stoptyping
+
+When a paragraph consists of a horizontal line or a framed text like this:
+
+\startbuffer
+\framed{Ridderstraat 27, 8061GH Hasselt}
+\stopbuffer
+
+\getbuffer
+
+Sometimes spacing is suboptimal. For that purpose you could carry out a
+correction with:
+
+\shortsetup{startlinecorrection}
+
+So if you would type:
+
+\startbuffer
+\startlinecorrection
+\framed{Ridderstraat 27, 8061GH Hasselt}
+\stoplinecorrection
+\stopbuffer
+
+\typebuffer
+
+you will get a better output. Only use these commands if really needed!
+
+\getbuffer
+
+Another command to deal with vertical spacing is:
+
+\shortsetup{blank}
+
+The bracket pair is optional and within the bracket pair you can type the amount
+of spacing. Keywords like \type{small}, \type{medium} and \type{big} are related
+to the fontsize.
+
+\startbuffer
+In official writings Hasselt always has the affix Ov. This is an
+abbrevation for the province of {\em Overijssel}.
+\blank[2*big]
+The funny thing is that there is no other Hasselt in the Netherlands.
+So it is redundant.
+\blank
+The affix is a leftover from the times that the Netherlands and
+Belgium were one country under the reign of King Philip II of Spain.
+\blank[2*big]
+Hasselt in Belgium lies in the province of Limburg. One wonders if
+the Belgian people write Hasselt (Li) on their letters.
+\stopbuffer
+
+\typebuffer
+
+The command \type{\blank} without the bracket pair is the default space.
+
+The example would become:
+
+\getbuffer
+
+The default spacing can be set up with:
+
+\shortsetup{setupblank}
+
+If you want to surpress vertical spacing you can use:
+
+\shortsetup{startpacked}
+
+In this manual the whitespace is set at \type{medium}. In the next situation this
+set up is ignored and the lines are packed.
+
+\startbuffer
+\startpacked
+Hasselt (Ov) lies in Overijssel.
+
+Hasselt (Li) lies in Limburg.
+
+Watch out: we talk about Limburg in Belgium. There is
+also a Dutch Limburg.
+\stoppacked
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+It is not hard to imagine why there is also:
+
+\shortsetup{startunpacked}
+
+You can force vertical space with \type{\godown}. The distance is specified
+within the brackets.
+
+\shortsetup{godown}
+
+Try not to use this command. It is always better use the \type{\setup...} commands
+to setup your spacing model.
+
+\stopsection
+
+\startsection[title=Whitespace before and after text components]
+
+Most text components that are coded with \CONTEXT\ have a \type{\setup...} command
+with which you can define the whitespace before and after that component.
+
+\starttyping
+\setupitemize
+ [before=,after=]
+
+\setuphead
+ [chapter]
+ [before=,after=]
+
+\setupframedtexts
+ [before=,after=]
+\stoptyping
+
+The use of the \type{\setup...} commands prevents you from having to code
+whitespaces throughout your \TEX\ document. This would lead to unreadable sources
+and inconsistent use of whitepaces.
+
+\stopsection
+
+\startsection[title=Skipping space]
+
+\Command{\tex{hskip}}
+\Command{\tex{vskip}}
+
+You can introduce horizontal and vertical space with \type{\hskip} and
+\type{\vskip} commands.
+
+Try to avoid these commands in your text. It will probably lead to inconsistent
+spacing.
+
+\stopsection
+
+\startsection[title=Indentation]
+
+\index{indentation}
+\index{paragraph+indentation}
+
+\Command{\tex{indenting}}
+\Command{\tex{noindenting}}
+\Command{\tex{setupindenting}}
+
+You can set up the amount of the indentation with:
+
+\shortsetup{setupindenting}
+
+A reasonable indentation is achieved by:
+
+\starttyping
+\setupindenting[yes,]
+\stoptyping
+
+This will lead to indented paragraphs. By default, indentation after white space
+(as issued by \type {\blank}) is suppressed.
+
+You can locally influence the indentation state by using:
+
+\shortsetup{indenting}
+
+When for instance you say \type {never}, from that moment on indentation will be
+surpressed. Saying \type {none}, only influences the next paragraph.
+
+If you choose to use indentations, and at a certain place you explicitly {\em do
+not} want to indent, you can also say:
+
+\starttyping
+\noindenting
+\stoptyping
+
+In some \type{\setup...} commands you can set the parameter \type{indent=yes}. This means
+that the paragraph that follows the textcomponent will indent:
+
+\startbuffer
+\setupitemize[indentnext=yes]
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex
new file mode 100644
index 00000000000..623ba9490b3
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-presentations.tex
@@ -0,0 +1,38 @@
+\startcomponent ma-cb-en-presentations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Presentations,reference=presentations]
+
+\index{presentation}
+
+You can use \CONTEXT\ for making your own presentations. A \CONTEXT\ presentation
+is an interactive PDF document with a screen layout. Often presentations are good
+examples of the cooperation between \CONTEXT\ and \METAPOST.
+
+\CONTEXT\ comes with a number ready-to-use presentations. A presentation is a
+module with the prefix \type{s-} and that you can load with the \type{\usemodule}
+command.
+
+If you want to use an already existing presentation the best way to proceed is:
+
+\startitemize[packed]
+\item goto \type{../your-contextdir/tex/texmf-context/tex/context/base} in your text editor
+\item open a presentation: for example \type{s-pre-05.tex}
+\item goto the end of the file and study the commands between
+ the \type{\start...\stoptext} pair
+\item copy the commands into your own presentation file
+\item invoke the presentation with \type{\usemodule[s][pre-05]} in de setup
+ area of your presentation file
+\item process the file to view the result
+\item edit the content of your presentation
+\stopitemize
+
+A stepwise setup of a presentation is given at the
+\goto{\CONTEXTWIKI}[ url (http://wiki.contextgarden.net/Presentations) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex
new file mode 100644
index 00000000000..1ceabfeb143
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-processingfiles.tex
@@ -0,0 +1,44 @@
+\startcomponent ma-cb-en-processingfiles
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=The \type{context} command,reference=contextcommand]
+
+\index{\type{context} (command)}
+\index{\type{mtxrun} (command)}
+\index{processing TeX file}
+
+You can process a \TEX\ file or run \CONTEXT\ with the command \type{context}
+that you can type at your console:
+
+\starttyping
+context myfile
+\stoptyping
+
+\CONTEXT\ will make multiple runs to get the layout, references, lists and
+pagenumbering straight. You can see those runs echoed on your screen and listed
+in the \type{myfile.log} file.
+
+You can add parameters to give the command \type{context} additional
+tasks while processing the file. If you want start up \READER\ automatically
+you can type:
+
+\starttyping
+context --autopdf myfile
+\stoptyping
+
+A full overview of the parameters is given when you type:
+
+\starttyping
+context --help
+\stoptyping
+
+Please refer to the manual \goto{luatools, mtxrun, context}[ url (manual:tools) ]
+for more information on running \CONTEXT.
+
+\stopchapter
+
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex
new file mode 100644
index 00000000000..bc758e5213e
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-references.tex
@@ -0,0 +1,148 @@
+\startcomponent ma-cb-en-references
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Refering to text elements]
+
+\index{refering}
+\index{label}
+
+\Command{\tex{in}}
+\Command{\tex{at}}
+\Command{\tex{pagereference}}
+
+To disclose your document for your readers you can use the table of contents and
+the register. However, it is not uncommon to refer to specific text elements like
+formulas, tables, images and sections to enhance readability.
+
+For refering from one location in a document to another you can use the command:
+
+\shortsetup{in}
+
+The curly braces contain text and the brackets contain a logical label. If you have
+written a chapter header like this:
+
+\starttyping
+\startchapter[title=Hotels in Hasselt,reference=hotel]
+ ...
+\stopchapter
+\stoptyping
+
+then you can refer to this chapter with:
+
+\starttyping
+\in{chapter}[hotel]
+\stoptyping
+
+After processing the chapter number is available and the reference could look
+something like: {\em chapter 23}. You can use \type{\in} for any references to
+text elements like chapters, sections, figures, tables, formulas etc.
+
+Another example:
+
+\startbuffer
+There are a number of things you can do in Hasselt:
+
+\startitemize[n,packed]
+\item swimming
+\item sailing
+\item[hiking] hiking
+\item biking
+\stopitemize
+
+An activity like \in{activity}[hiking] described on \at{page}[hiking]
+is very tiring.
+\stopbuffer
+
+\typebuffer
+
+This would look like this:
+
+\getbuffer
+
+As you can see, it is also possible to refer to pages. This is done with:
+
+\shortsetup{at}
+
+For example with:
+
+\starttyping
+\at{page}[hiking]
+\stoptyping
+
+This command can be used in combination with:
+
+\shortsetup{pagereference}
+
+and
+
+\shortsetup{textreference}
+
+If you want to refer to the chapter {\em Hotels in Hasselt} you could type:
+
+\startbuffer
+Look in \in{chapter}[hotel] on \at{page}[hotel] for a complete
+overview of accomodations in \pagereference[accomodation]Hasselt.
+\stopbuffer
+
+\typebuffer
+
+A chapter number and a page number will be generated when processing the input
+file. On another spot in the document you can refer to \type{accomodation} with
+\type{\at{page}[accomodation]}.
+
+You can also define a set of labels separated by commas.
+
+\startbuffer
+\placefigure
+ [here]
+ [fig:canals,fig:boats]
+ {A characteristic picture of Hasselt.}
+ {\externalfigure[ma-cb-08][width=10cm]}
+
+There are many canals in Hasselt (see \in{figure}[fig:canals]).
+.
+.
+.
+Boats can be moored in the canals of Hasselt (see
+\in{figure}[fig:boats]).
+\stopbuffer
+
+\typebuffer
+
+This might look like this:
+
+\getbuffer
+
+You can also refer to a title of a chapter or section or even a caption of an
+image. This is done with:
+
+\shortsetup{about}
+
+This:
+
+\startbuffer
+The caption of \in{figure}[fig:canals] is {\em \about[fig:canals]}.
+\stopbuffer
+
+\typebuffer
+
+Becomes:
+
+\getbuffer
+
+With the command:
+
+\starttyping
+\setupinteraction[state=start]
+\stoptyping
+
+all references become active links. See \in{chapter}[interactivity] for more
+information on this subject.
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex
new file mode 100644
index 00000000000..315e2bfa488
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-registers.tex
@@ -0,0 +1,83 @@
+\startcomponent ma-cb-en-registers
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Registers]
+
+\index{register}
+
+\Command{\tex{index}}
+\Command{\tex{placeindex}}
+\Command{\tex{completeindex}}
+\Command{\tex{defineregister}}
+\Command{\tex{placeregister}}
+\Command{\tex{completeregister}}
+\Command{\tex{setupregister}}
+
+It is possible to generate one or more registers. By default the command
+\type{\index} is available. If you want to add a word to the index you type:
+
+\starttyping
+\index{town hall}
+\stoptyping
+
+The word {\em town hall} will appear as an index entry in the sorted register.
+Sometimes the index word does not appear in normal alphabetic order. For example,
+entries such as symbols have to provide extra sorting information in order to
+produce a correct alphabetical list:
+
+\starttyping
+\index[minus]{$-$}
+\stoptyping
+
+Sometimes you have sub- or sub sub entries. These can be defined as follows:
+
+\starttyping
+\index{town hall+location}
+\index{town hall+architecture}
+\stoptyping
+
+You can generate your register with the command:
+
+\starttyping
+\placeindex
+\stoptyping
+
+or
+
+\starttyping
+\completeindex
+\stoptyping
+
+The command \type{\index} is a predefined \CONTEXT\ command, but of course you
+can also define your own registers.
+
+\shortsetup{defineregister}
+
+For example if you want to make a new register based on the streets in Hasselt
+you could type:
+
+\starttyping
+\defineregister[street]
+\stoptyping
+
+Now a new register command \type{\street} is available. Now
+\type{\street{Ridderstraat}} is a new index entry. To produce a list of entries
+you could now use:
+
+\starttyping
+\placeregister[street]
+\placestreet
+\completestreet
+\stoptyping
+
+You can alter the layout of the registers with:
+
+\shortsetup{setupregister}
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex
new file mode 100644
index 00000000000..d72b536a5ee
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-runtimefiles.tex
@@ -0,0 +1,41 @@
+\startcomponent ma-cb-en-runtimefiles
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Auxilliary files,reference=runtimefiles]
+
+\index[tuc]{{\tt tuc}--file}
+\index{auxilliary files}
+
+\CONTEXT\ will produce a number of auxilliary files during processing. If your
+input file is called \type{myfile.tex} the following files may appear on your
+working directory.
+
+\index[tuc]{{\tt tuc}--file}
+\index{auxilliary files}
+
+\starttabulate[|l|l|l|]
+\HL
+\NC \darkgray \bf \CONTEXT\ MkII \NC \bf \CONTEXT\ MkIV \NC \bf Meaning \NC\NR
+\HL
+\NC \darkgray \tt myfile.tex \NC \tt myfile.tex \NC your text file \NC\NR
+\HL
+\NC \darkgray \tt myfile.log \NC \tt myfile.log \NC log information \NC\NR
+\NC \darkgray \tt myfile.tuo \NC \tt myfile.tuc \NC output information \NC\NR
+\NC \darkgray \tt myfile.tui \NC \NC \darkgray input information \NC\NR
+\NC \darkgray \tt myfile.tmp \NC \NC \darkgray temporary information \NC\NR
+\NC \darkgray \tt mpgraph.mp \NC \NC \darkgray \METAPOST\ information \NC\NR
+\HL
+\NC \darkgray \tt myfile.pdf \NC \tt myfile.pdf \NC result file \NC\NR
+\HL
+\stoptabulate
+
+The \type{myfile.tuc} file contains information about registers, lists and
+references which will be used when necessary. The \type{myfile.log}
+can be viewed in case there are problems during processing.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex
new file mode 100644
index 00000000000..2f087ea8d23
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-setupcommands.tex
@@ -0,0 +1,54 @@
+\startcomponent ma-cb-en-setupcommands
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Setup commands]
+
+\index{set up}
+\index{layout}
+
+Global commands are placed in the setup area of your input file, before
+\type{\starttext}. In \in{appendix}[commandsetups] there is a complete overview of the
+available commands and their parameters.
+
+The set up commands all have the same structure. They look something like:
+
+\shortsetup{setupparagraphs}
+
+A set up command consists of a more or less logical name and a number of bracket
+pairs. Bracket pairs may be optional and in that case the \type{[]} are typeset
+slanted {\tt \sl []}. In the definition the bracket pairs may contain:
+
+\starttyping
+\setupacommand[.1.][.2.][..,..=..,..]
+\stoptyping
+
+The commas indicate that a list of parameters can be enclosed. In the options
+list following the definition, the \type{.1.} and \type{.2.} show the possible
+options that can be set in the first and second bracket pair respectively. The
+parameters and their possible values are placed in the third bracket pair.
+
+The default options and parameter values are underlined.
+
+Furthermore you will notice that some values are typeset in a slanted way: {\sl
+section}, {\sl name}, {\sl dimension}, {\sl number}, {\sl command} and {\sl
+text}. This indicates that you can set the value yourself.
+
+\starttabulate[|S||]
+\NC section \NC a section name like chapter, section, subsection etc. \NC\NR
+\NC name \NC an identifier (logical name) \NC\NR
+\NC dimension \NC a dimension with a unit in \type{cm}, \type{pt},
+ \type{em}, \type{ex}, \type{sp} or \type{in} \NC\NR
+\NC number \NC an integer \NC\NR
+\NC command \NC a command \NC\NR
+\NC text \NC text \NC\NR
+\stoptabulate
+
+In the \goto {Quick Reference} [ url (manual:qr-en) ]
+manual you can find a complete overview of the commands and their parameters.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex
new file mode 100644
index 00000000000..c3b47ea27ea
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-sortedlists.tex
@@ -0,0 +1,71 @@
+\startcomponent ma-cb-en-sortedlists
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=synonyms,title=Sorted lists]
+
+\index{sorted lists}
+
+\Command{\tex{definesorting}}
+\Command{\tex{setupsorting}}
+\Command{\tex{sort}}
+\Command{\tex{placelistofsorts}}
+\Command{\tex{completelistofsorts}}
+
+If you want to create a sorted list you can use:
+
+\shortsetup{definesorting}
+
+For example:
+
+\startbuffer
+\define[1]\street{#1\Street{#1}}
+\definesorting[Street][Streets]
+\setupsorting[Street][criterium=all]
+
+When you walk in the \street{Eikenlaan} you will cross the
+\street{Vechtlaan} and \street{Gasthuisstraat}. Go left into the
+\street{Gasthuisstraat} and take another left on the
+\street{Heerengracht}. You walk along the canal to the
+\street{Ridderstraat}, there you turn right. Cross the canal and
+turn left to the \street{Julianakade}. There you can enjoy the
+view over the Zwartewater.
+
+So the streets you visited are:
+
+\placelistofStreets
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+Note that the Gasthuisstraat appears only once in the list.
+
+The predefined \type{\logo} command is used for the consistent use of text logos.
+
+When you define:
+\startbuffer
+\logo [HSTEX] {Hassel\TeX}
+\stopbuffer
+
+\getbuffer\typebuffer
+
+You can use that logo througout your text.
+
+\startbuffer
+How would you call a \TEX\ based macropackage when you work
+in Hasselt? \HSTEX?
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex
new file mode 100644
index 00000000000..619ccf3a6cb
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-specialcharacters.tex
@@ -0,0 +1,60 @@
+\startcomponent ma-cb-en-specialcharacters
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=special chars,title=Special characters]
+
+\index{special characters}
+
+You have seen that \CONTEXT\ commands are preceded by a \tex{} (backslash). This
+means that \tex{} has a special meaning to \CONTEXT. Aside from \tex{} there are
+other characters that need special attention when you want them to appear in
+verbatim mode or in text mode. \in{Table}[tab:specchars] gives an overview of
+these special characters and what you have to type to produce them.
+
+\placetable[here,force][tab:specchars]
+ {Special characters (1).}
+ {\starttable[|c|l|c|c|c|c|]
+ \HL
+ \NC \use2 \JustCenter{\bf Special character} \NC \use2 \bf Verbatim \NC \use2 \bf Text \NC\FR
+ \NC \bf Character \NC \bf Name \NC \bf Type \NC \bf Generates \NC \bf Type\NC \bf Generates \NC\LR
+ \HL
+ \NC \type{#} \NC hashtag \NC \type{\type{#}} \NC \type{#} \VL \type{\#} \NC \# \NC\FR
+ \NC \type{$} \NC dollar \NC \type{\type{$}} \NC \type{$} \VL \type{\$} \NC \$ \NC\MR
+ \NC \type{&} \NC ampersand \NC \type{\type{&}} \NC \type{&} \VL \type{\&} \NC \& \NC\MR
+ \NC \type{%} \NC percent \NC \type{\type{%}} \NC \type{%} \VL \type{\%} \NC \% \NC\MR
+ \NC \type{\} \NC backslash \NC \type{\type{\}} \NC \type{\} \VL \type{\backslash} \NC \backslash \NC\MR
+ \NC \type+{+ \NC right curly brace \NC \type-\type+{+- \NC \type+{+ \VL \type+\{+ \NC \{ \NC\MR
+ \NC \type+}+ \NC left curly brace \NC \type-\type+}+- \NC \type+}+ \VL \type+\}+ \NC \} \NC\MR
+ \NC \type{|} \NC vertical bar \NC \type{\type{|}} \NC \type{|} \VL \type{\|} \NC \| \NC\MR
+ \NC \type{_} \NC underscore \NC \type{\type{_}} \NC \type{_} \VL \type{\_} \NC \_ \NC\MR
+ \NC \type{~} \NC tilde \NC \type{\type{~}} \NC \type{~} \VL \type{\lettertilde} \NC \lettertilde \NC\MR
+ \NC \type{^} \NC caret \NC \type{\type{^}} \NC \type{^} \VL \type{\letterhat} \NC \letterhat \NC\LR
+ \HL
+ \stoptable}
+
+Other special characters have a meaning in typesetting mathematical expressions
+and some can be used in math mode only (see \in{chapter}[formulas]).
+
+\placetable
+ [here,force]
+ [tab:special chars]
+ {Special characters (2).}
+ {\starttable[|c|c|c|c|c|]
+ \HL
+ \NC \bf \LOW{Special character} \NC \use2 \bf Verbatim \NC \use2 \bf Text \NC\FR
+ \NC \NC \bf Type \NC \bf Generates \NC \bf Type \NC \bf Generates \NC\LR
+ \HL
+ \NC \type{+} \NC \type{\type{+}} \NC \type{+} \VL \type{$+$} \NC $+$ \NC\FR
+ \NC \type{-} \NC \type{\type{-}} \NC \type{-} \VL \type{$-$} \NC $-$ \NC\MR
+ \NC \type{=} \NC \type{\type{=}} \NC \type{=} \VL \type{$=$} \NC $=$ \NC\MR
+ \NC \type{<} \NC \type{\type{<}} \NC \type{<} \VL \type{$<$} \NC $<$ \NC\MR
+ \NC \type{>} \NC \type{\type{>}} \NC \type{>} \VL \type{$>$} \NC $>$ \NC\LR
+ \HL
+ \stoptable}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex
new file mode 100644
index 00000000000..4001a683149
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-structure.tex
@@ -0,0 +1,133 @@
+\startcomponent ma-cb-en-structure
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Defining a document]
+
+Every document is started with \type{\starttext} and closed with
+\type{\stoptext}. All textual input is placed between these two commands and
+\CONTEXT\ will only process that information.
+
+Setup information is placed in the set up area just before \type{\starttext}.
+
+\setuptyping
+ [escape=yes]
+
+\definestartstop
+ [comment][style={\rm}]
+
+\starttyping
+
+\setupbodyfont[12pt] /BTEX \comment{setuparea of document} /ETEX
+
+\starttext
+This is a one line document. /BTEX \comment{your text} /ETEX
+\stoptext
+\stoptyping
+
+The definition of a (very simple) book could look something like this:
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\title{Foreword}
+
+\chapter{Introduction}
+
+\chapter{The Rensselaer family}
+
+\chapter{The Lansing family}
+
+\chapter{The Cuyler family}
+
+\chapter{Appendix: Photos}
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+\CONTEXT\ comes with a predefined overall structure in which the document is
+divided into four main document divisions:\footnote{Here we try to avoid the
+word {\em section}.}
+
+\startitemize[n,packed]
+\item front matter
+\item body matter
+\item appendices
+\item back matter
+\stopitemize
+
+The document divisions are defined with:
+
+\starttyping
+\startfrontmatter ... \stopfrontmatter
+\startbodymatter ... \stopbodymatter
+\startappendices ... \stopappendices
+\startbackmatter ... \stopbackmatter
+\stoptyping
+
+The chapters in your book can be divided over these divisions.
+
+\startbuffer
+\starttext
+
+\startstandardmakeup
+ \midaligned{From Hasselt to America}
+ \midaligned{by}
+ \midaligned{J. Jonker and C. van Marle}
+\stopstandardmakeup
+
+\startfrontmatter
+
+ \title{Preface}
+
+ \chapter{Introduction}
+
+\stopfrontmatter
+
+\startbodymatter
+
+ \chapter{The Rensselaer family}
+
+ \chapter{The Lansing family}
+
+ \chapter{The Cuyler family}
+
+\stopbodymatter
+
+\startappendices
+
+ \chapter{Photos}
+
+\stopappendices
+
+\stoptext
+\stopbuffer
+
+\typebuffer
+
+In the front matter as well as back matter the command \type{\chapter}
+produces an un-numbered header in the table of contents. The front matter is mostly
+used for the table of contents, the list of figures and tables, the preface, the
+acknowledgements etc. It often comes with a roman page numbering.
+
+The appendices division is used for (indeed) appendices. Headers may be typeset in
+a different way; for example, \type{\chapter} may be numbered alphabetically.
+
+The style of each document division can be set up with:
+
+\shortsetup{setupsectionblock}
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex
new file mode 100644
index 00000000000..cc6b5819fe5
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-support.tex
@@ -0,0 +1,17 @@
+\startcomponent ma-cb-en-support
+
+\project ma-cb
+
+% only text
+
+For your Questions and Answers you can subscribe to the \goto {\CONTEXT\ mailing
+list} [ url(list:context) ].
+
+Visit the \goto {Pragma ADE website} [ url
+(http://www.pragma-ade.com/overview.htm) ] for extensive information about
+\CONTEXT.
+
+Goto the \goto {ConTeXt Garden} [ url (http://wiki.contextgarden.net) ] to find
+all kinds of practical information on how to use \CONTEXT.
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex
new file mode 100644
index 00000000000..8d921d5b023
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-synonyms.tex
@@ -0,0 +1,89 @@
+\startcomponent ma-cb-en-synonyms
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=synonyms,title=Synonyms]
+
+\index{synonyms}
+
+\Command{\tex{definesynonyms}}
+\Command{\tex{setupsynonyms}}
+\Command{\tex{abbreviation}}
+\Command{\tex{infull}}
+\Command{\tex{loadabbreviations}}
+\Command{\tex{placelistofabbreviations}}
+\Command{\tex{completelistofabbreviations}}
+
+In many documents people want to use specific words consistently throughout the
+document. To enforce consistency the command below is available.
+
+\shortsetup{definesynonyms}
+
+The first bracket pair contains the singular form of the synonym, and the second
+contains the plural form. The third bracket pair contains a command.
+
+For example the command \type{\abbreviation} is defined by:
+
+\starttyping
+\definesynonyms[abbreviation][abbreviations][\infull]
+\setupsynonyms[style=cap]
+\stoptyping
+
+Now the command \type{\abbreviation} is available and can be used to state your
+abbreviations:
+
+\starttyping
+\abbreviation{ANWB}{Dutch Automobile Association}
+\abbreviation{VVV}{Bureau of Tourist Information}
+\abbreviation{NS}{Dutch Railways}
+\stoptyping
+
+\abbreviation{VVV}{Bureau of Tourist Information}
+
+If you would type:
+
+\startbuffer
+The Dutch \VVV\ (\infull{VVV}) can provide you with the tourist
+information on Hasselt.
+\stopbuffer
+
+\typebuffer
+
+You would obtain something like this:
+
+\getbuffer
+
+The list of synonyms or abbreviations is best defined in the set up area of your
+input file for maintenance purposes. You can also store this kind of information
+in an external file, and load the file (e.g. \type{abbrev.tex}) with:
+
+\starttyping
+\input abbrev.tex
+\stoptyping
+
+If you want to put a list of the abbreviations used in your document you can
+type:
+
+\starttyping
+\placelistofabbreviations
+\stoptyping
+
+or
+
+\starttyping
+\completelistofabbreviations
+\stoptyping
+
+A complete and sorted list with used abbreviations and their meaning is produced.
+
+The typesetting of synonynms can be influenced with:
+
+\starttyping
+\setupsynonyms
+\stoptyping
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex
new file mode 100644
index 00000000000..39ce0cb4ac1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tables.tex
@@ -0,0 +1,385 @@
+\startcomponent ma-cb-en-tables
+
+% AFO: the \start ... \stoplinetable mechanism is not stable enough
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=tables,title=Tables]
+
+\index{tables}
+\index{natural tables}
+\index{extreme tables}
+\index{floating blocks}
+
+\Command{\tex{placetable}}
+\Command{\tex{setuptables}}
+\Command{\tex{starttable}}
+\Command{\tex{startcombination}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{NR}}
+\Command{\tex{FR}}
+\Command{\tex{LR}}
+\Command{\tex{MR}}
+\Command{\tex{SR}}
+\Command{\tex{VL}}
+\Command{\tex{NC}}
+\Command{\tex{HL}}
+\Command{\tex{DL}}
+\Command{\tex{DC}}
+\Command{\tex{DR}}
+\Command{\tex{LOW}}
+\Command{\tex{TWO}}
+\Command{\tex{THREE}}
+\Command{\tex{bTABLE}}
+\Command{\tex{eTABLE}}
+\Command{\tex{bTR}}
+\Command{\tex{eTR}}
+\Command{\tex{bTD}}
+\Command{\tex{eTD}}
+\Command{\tex{setupTABLE}}
+\Command{\tex{startxtable}}
+\Command{\tex{stopxtable}}
+\Command{\tex{startxcell}}
+\Command{\tex{startxrow}}
+\Command{\tex{setupxtable}}
+
+There are a number of ways to define a table:
+
+\startitemize[packed]
+\item the \type{\start ... \stoptable} mechanism, based on the work of M. Wichura
+\item the \type{\bTABLE ... \eTABLE} mechanism (natural tables)
+\item the \type{\start ... \stopxtable} mechanism (extreme tables)
+\stopitemize
+
+In the next sections we describe the principles of the three table mechanisms.
+
+\startsection[title=Simple tables]
+
+For defining the table you use:
+
+\shortsetup{starttable}
+
+The definition of a table could look something like this:
+
+\startbuffer
+\placetable
+ [here]
+ [tab:ships]
+ {Ships that moored at Hasselt.}
+ {\starttable[|c|c|]
+ \HL
+ \NC \bf Year \NC \bf Number of ships \NC\SR
+ \HL
+ \NC 1645 \NC 450 \NC\FR
+ \NC 1671 \NC 480 \NC\MR
+ \NC 1676 \NC 500 \NC\MR
+ \NC 1695 \NC 930 \NC\LR
+ \HL
+ \stoptable}
+\stopbuffer
+
+\typebuffer
+
+This table is typeset as \in{table}[tab:ships].
+
+\getbuffer
+
+Although this table mechanism is still available and supported in \CONTEXT\
+it is better to use one of the other mechanisms.
+
+\stopsection
+
+\startsection[title=Natural tables]
+
+The natural table mechanism (\type{\bTABLE ... \eTABLE}) is developed for more
+complex tables and has features of the general interface of \CONTEXT.
+
+\startbuffer
+\placetable
+ [here,force]
+ [tab:votedivision]
+ {Division of votes over political parties.}
+ {\bTABLE[align=middle,offset=4pt]
+ \bTABLEhead
+ \bTR[width=6cm] \bTD [nc=5] Elections City Council \eTD \eTR
+ \eTABLEhead
+ \bTABLEbody
+ \bTR \bTD[nr=2,align={right,lohi}] Party \eTD
+ \bTD[nc=3,foregroundstyle=bold] Districts \eTD
+ \bTD[nr=2,align={middle,lohi}] Total \eTD \eTR
+ \bTR \bTD 1 \eTD \bTD 2 \eTD \bTD 3 \eTD \eTR
+ \bTR \bTD[align=right] PvdA \eTD
+ \bTD 351 \eTD \bTD 433 \eTD \bTD 459 \eTD \bTD 1243 \eTD \eTR
+ \bTR \bTD[align=right] CDA \eTD
+ \bTD 346 \eTD \bTD 350 \eTD \bTD 285 \eTD \bTD ~981 \eTD \eTR
+ \bTR \bTD[align=right] VVD \eTD
+ \bTD 140 \eTD
+ \bTD[offset=2pt,background=color,
+ backgroundcolor=red,foregroundcolor=white,
+ foregroundstyle=bold,framecolor=blue,
+ rulethickness=2pt] 113 \eTD
+ \bTD 132 \eTD \bTD ~385 \eTD \eTR
+ \bTR \bTD[align=right] SGP \eTD
+ \bTD 348 \eTD \bTD 261 \eTD \bTD 158 \eTD \bTD ~767 \eTD \eTR
+ \bTR \bTD[align=right] GPV \eTD
+ \bTD 117 \eTD \bTD 192 \eTD \bTD 291 \eTD \bTD ~600 \eTD \eTR
+ \eTABLEbody
+ \eTABLE}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+In the last column a \type{~} is used to simulate a four digit number. The
+\type{~} has the width of a digit.
+
+\start
+\getbuffer
+\stop
+
+The setup of the table is placed between the square brackets \type{[ ]}. To keep
+the data in the table more readable you can set up the table with the \type
+{\setupTABLE} command.
+
+\shortsetup{bTABLE}
+
+\startbuffer
+\setupTABLE[row][align=middle,offset=4pt]
+\setupTABLE[1][1][width=6cm]
+\setupTABLE[1][2][align={right,lohi}]
+\setupTABLE[5][2][align={right,lohi}]
+\setupTABLE[2][2][foregroundstyle=bold]
+\setupTABLE[1][4,5,6,7,8][align=right]
+\setupTABLE[3][6][offset=2pt,background=color,
+ backgroundcolor=red,foregroundcolor=white,
+ foregroundstyle=bold,framecolor=blue,
+ rulethickness=2pt]
+
+\bTABLE
+ \bTABLEhead
+ \bTR \bTD[nc=5] Elections City Council \eTD \eTR
+ \bTR \bTD[nr=2] Party \eTD \bTD[nc=3] Districts \eTD \bTD[nr=2] Total \eTD \eTR
+ \bTR \bTD 1 \eTD \bTD 2 \eTD \bTD 3 \eTD \eTR
+ \eTABLEhead
+ \bTABLEbody
+ \bTR \bTD PvdA \eTD \bTD 351 \eTD \bTD 433 \eTD \bTD 459 \eTD \bTD 1243 \eTD \eTR
+ \bTR \bTD CDA \eTD \bTD 346 \eTD \bTD 350 \eTD \bTD 285 \eTD \bTD ~981 \eTD \eTR
+ \bTR \bTD VVD \eTD \bTD 140 \eTD \bTD 113 \eTD \bTD 132 \eTD \bTD ~385 \eTD \eTR
+ \bTR \bTD SGP \eTD \bTD 348 \eTD \bTD 261 \eTD \bTD 158 \eTD \bTD ~767 \eTD \eTR
+ \bTR \bTD GPV \eTD \bTD 117 \eTD \bTD 192 \eTD \bTD 291 \eTD \bTD ~600 \eTD \eTR
+ \eTABLEbody
+\eTABLE
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+The meaning of the \CONTEXT\ commands are indicated in \in {table}
+[tab:tablecommands02].
+
+\placetable
+ []
+ [tab:tablecommands02]
+ {Commands to define natural tables.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\bTABLE ... \eTABLE} \NC begin end table \NC\FR
+ \NC \type{\bTR ... \eTR} \NC begin end row \NC\MR
+ \NC \type{\bTD ... \eTD} \NC begin end column \NC\MR
+ \NC \type{\bTABLEhead ... \eTABLEhead} \NC begin end tablehead \NC\MR
+ \NC \type{\bTABLEbody ... \eTABLEbody} \NC begin end tablebody \NC\MR
+ \NC \type{\bTABLEfoot ...\eTABLEfoot} \NC begin end tablefoot \NC\MR
+ \NC \type{\setupTABLE} \NC table setup \NC\LR
+ \HL
+ \stoptable}
+
+You can find more information on this table mechanism on the \CONTEXTWIKI\ and
+examples in the \goto {\em Natural Tables} [ url (manual:nattab) ] manual.
+
+\stopsection
+
+\startsection[title=Extreme tables]
+
+For large tables that extend over a number of pages and where you want the
+table head repeated after each pagebreak \CONTEXT\ has the {\em extreme table}
+mechanism.
+
+\shortsetup{startxtable}
+
+\startbuffer
+\setupxtable[split=yes,header=repeat]
+\setupxtable[offset=4pt]
+
+\placetable
+ []
+ [tab:wealthdecline]
+ {Decline of wealth through the ages.}
+ {\startxtable
+ \startxtablehead[align=middle,foregroundstyle=bold]
+ \startxrow
+ \startxcell[nx=6]
+ Decline of wealth in Dutch florine (Dfl)
+ \stopxcell
+ \stopxrow
+ \startxrow[foregroundstyle=bold]
+ \startxcell[width=1.2cm] Year \stopxcell
+ \startxcell 1.000--2.000 \stopxcell
+ \startxcell 2.000--3.000 \stopxcell
+ \startxcell 3.000--5.000 \stopxcell
+ \startxcell 5.000--10.000 \stopxcell
+ \startxcell over 10.000 \stopxcell
+ \stopxrow
+ \stopxtablehead
+ \startxtablenext
+ \startxrow
+ \startxcell[nx=6,align=middle,foregroundstyle=bold]
+ Decline of wealth in Dutch florine (Dfl) / Continued
+ \stopxcell
+ \stopxrow
+ \startxrow[foregroundstyle=bold]
+ \startxcell Year \stopxcell
+ \startxcell 1.000--2.000 \stopxcell
+ \startxcell 2.000--3.000 \stopxcell
+ \startxcell 3.000--5.000 \stopxcell
+ \startxcell 5.000--10.000 \stopxcell
+ \startxcell over 10.000 \stopxcell
+ \stopxrow
+ \stopxtablenext
+ \startxtablebody[align=middle]
+ \startxrow
+ \startxcell 1675 \stopxcell
+ \startxcell 22 \stopxcell
+ \startxcell ~7 \stopxcell
+ \startxcell ~5 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~5 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1724 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell ~4 \stopxcell
+ \startxcell ~3 \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1750 \stopxcell
+ \startxcell 12 \stopxcell
+ \startxcell ~3 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell -- \stopxcell
+ \stopxrow
+ \startxrow
+ \startxcell 1808 \stopxcell
+ \startxcell ~9 \stopxcell
+ \startxcell ~2 \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell -- \stopxcell
+ \startxcell -- \stopxcell
+ \stopxrow
+ \stopxtablebody
+ \stopxtable}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+With the \type{\setupxtable} it is indicated that the table is allowed to split
+at a pagebreak and that the head should contain the content of the \type {\start
+... \stopxtablenext}.
+
+The result of this definition is shown in \in {table} [tab:wealthdecline].
+
+\getbuffer
+
+The meaning of the commands are explained \in {table} [tab:tablecommands03].
+
+\placetable
+ []
+ [tab:tablecommands03]
+ {Commands to define extreme tables.}
+ {\starttable[|l|l|]
+ \HL
+ \NC \bf Command \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\startxtable ... \stopxtable} \NC begin end table \NC\FR
+ \NC \type{\startxrow ... \stopxrow} \NC begin end row \NC\MR
+ \NC \type{\startxcell ... \stopxcell} \NC begin end column \NC\MR
+ \NC \type{\startxtablehead ... \stopxtablehead} \NC begin end tablehead \NC\MR
+ \NC \type{\startxtablebody ... \stopxtablebody} \NC begin end tablebody \NC\MR
+ \NC \type{\startxtablefoot ... \stopxtablefoot} \NC begin end tablefoot \NC\MR
+ \NC \type{\setupxtable} \NC table setup \NC\LR
+ \HL
+ \stoptable}
+
+More information and examples can be found in the \goto {\em Extreme Tables} [
+url (manual:extab) ] manual.
+
+\stopsection
+
+\startsection[title=Placing tables]
+
+In all examples you see the command \type{\placetable}. This command has
+the same function as \type{placefigure}. It takes care of the vertical
+spacing and numbering. The float mechanism is invoked and the table will
+end up on the most optimal location in your document.
+
+\shortsetup{placefloat}
+
+You can also set up the layout of tables with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaptions}
+
+These commands are typed in the set up area of your input file and have a global
+effect on all floating blocks.
+
+\startbuffer
+\setupfloats[location=left]
+\setupcaptions[style=boldslanted,location={right,middle}]
+
+\placetable[here][tab:opening hours]{Library opening hours.}
+ {\bTABLE[offset=4pt]
+ \bTR \bTD \bf Day \eTD \bTD[nx=2,align=middle] \bf Opening hours \eTD \eTR
+ \bTR \bTD Monday \eTD \bTD 14.00 -- 17.30 \eTD \bTD 18.30 -- 20.30 \eTD \eTR
+ \bTR \bTD Tuesday \eTD \bTD \eTD \bTD \eTD \eTR
+ \bTR \bTD Wednesday \eTD \bTD 10.00 -- 12.00 \eTD \bTD 14.00 -- 17.30 \eTD \eTR
+ \bTR \bTD Thursday \eTD \bTD 14.00 -- 17.30 \eTD \bTD 18.30 -- 20.30 \eTD \eTR
+ \bTR \bTD Friday \eTD \bTD 14.00 -- 17.30 \eTD \bTD \eTD \eTR
+ \bTR \bTD Saturday \eTD \bTD 10.00 -- 12.30 \eTD \bTD \eTD \eTR
+ \eTABLE}
+\stopbuffer
+
+\start
+\switchtobodyfont[8pt]
+\typebuffer
+\stop
+
+The result is displayed in \in{table}[tab:opening hours].
+
+\start
+\getbuffer
+\stop
+
+\stopsection
+
+% AFO: the \start ... \stoplinetable mechanism is not stable enough
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex
new file mode 100644
index 00000000000..0bc81014e2c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tablesofcontent.tex
@@ -0,0 +1,174 @@
+\startcomponent ma-cb-en-tablesofcontent
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Table of contents (lists)]
+
+\index{table of contents}
+\index{list}
+
+\Command{\tex{completecontent}}
+\Command{\tex{placecontent}}
+\Command{\tex{definelist}}
+\Command{\tex{setuplist}}
+\Command{\tex{writetolist}}
+\Command{\tex{writebetweenlist}}
+\Command{\tex{definecombinedlist}}
+\Command{\tex{setupcombinedlist}}
+
+A table of contents contains chapter numbers, chapter titles and page numbers and
+can be extended with sections, sub sections, etc. A table of contents is
+generated automatically by typing:
+
+\starttyping
+\placecontent
+\stoptyping
+
+Which table of contents is produced depends on the location of this command in
+your document. At the start of the document it will generate a list of chapters,
+sections etc. But at the top of a chapter:
+
+\startbuffer
+\chapter{Hasselt in Summer}
+
+\placecontent
+
+\section{Hasselt in July}
+
+\section{Hasselt in August}
+
+\stopbuffer
+
+\typebuffer
+
+it will only produce a list of (sub) section titles with the corresponding
+section numbers and page numbers.
+
+The predefined command \type{\placecontent} is available because it was defined
+with:
+
+\shortsetup{definecombinedlist}
+
+This command and \type{\definelist} allows you to define your own lists necessary
+for accessing your documents.
+
+The use of this command and its related commands is illustrated for the default available
+table of contents.
+
+\startbuffer
+\definelist[chapter]
+\setuplist
+ [chapter]
+ [before=\blank,
+ after=\blank,
+ style=bold]
+
+\definelist[section]
+\setuplist
+ [section]
+ [alternative=d]
+\stopbuffer
+
+\typebuffer
+
+Now there are two lists of chapters and sections and these will be combined in a
+table of contents with the command \type{\definecombinedlist}.
+
+\startbuffer
+\definecombinedlist
+ [content]
+ [chapter,section]
+ [level=subsection]
+\stopbuffer
+
+\typebuffer
+
+Now two commands are available: \type{\placecontent} and \type{\completecontent}.
+With the second command the title of the table of contents will be added to the
+table of contents.
+
+The layout of lists can be varied with the parameter \type{alternative}.
+
+\placetable
+ [here,force]
+ [tab:alternatives]
+ {Alternatives for displaying lists.}
+ {\starttable[|c|l|]
+ \HL
+ \NC \bf Alternative \NC \bf Display \NC\SR
+ \HL
+ \NC \type{a} \NC number -- title -- page number \NC\FR
+ \NC \type{b} \NC number -- title -- spaces -- page number \NC\MR
+ \NC \type{c} \NC number -- title -- dots -- page number \NC\MR
+ \NC \type{d} \NC number -- title -- page number (continuing) \NC\MR
+ \NC \type{e} \NC reserved for interactive purposes \NC\MR
+ \NC \type{f} \NC reserved for interactive purposes \NC\MR
+ \NC \type{g} \NC reserved for interactive purposes \NC\LR
+ \HL
+ \stoptable}
+
+Lists are set up with:
+
+\shortsetup{setuplist}
+\shortsetup{setupcombinedlist}
+
+If you want to change the layout of the generated table of contents you'll have
+to remember that it is a (combined) list and that we can set the partial lists
+separately.
+
+\startbuffer
+\setuplist
+ [section]
+ [textstyle=bold,
+ pagestyle=bold,
+ numberstyle=bold]
+\stopbuffer
+
+\typebuffer
+
+This will result in a bold page number, section title and section number.
+
+Lists are generated and placed with:
+
+\shortsetup{placelist}
+
+So if you want a list of sections at the beginning of a new chapter, you type:
+
+\starttyping
+\placelist[section]
+\stoptyping
+
+only the sections will be displayed.
+
+A long list or a long table of contents will use up more than one page. To be
+able to force page breaking you can type:
+
+\starttyping
+\placecontent[extras={8.2=page}]
+\stoptyping
+
+A page break will then occur after section 8.2.
+
+In some cases you want to be able to write your own text in an automatically
+generated list. This is done with:
+
+\shortsetup{writetolist}
+\shortsetup{writebetweenlist}
+
+For example if you want to make a remark in your table of contents after a
+section titled {\em Hotels in Hasselt} you can type:
+
+\startbuffer
+\section{Hotels in Hasselt}
+\writebetweenlist[section]{\blank}
+\writetolist[section][location=here]{}{Section under construction}
+\writebetweenlist[section]{\blank}
+\stopbuffer
+
+\typebuffer
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex
new file mode 100644
index 00000000000..5ed877c7666
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-tabulations.tex
@@ -0,0 +1,163 @@
+\startcomponent ma-cb-en-tabulations
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=tabulation,title=Tabulation / Paragraph formatting]
+
+\index{tabulation}
+\index{tables+running text}
+\index{columns}
+\Command{\tex{starttabulate}}
+\Command{\tex{definetabulate}}
+\Command{\tex{setuptabulate}}
+\Command{\tex{NR}}
+\Command{\tex{NC}}
+
+Sometimes you want to typeset paragraphs in a specific formatted way. This is
+done with:
+
+\shortsetup{starttabulate}
+
+The tabulation mechanism is closely related to the table mechanism. You can use
+the tabulation mechanism in cases you want to typeset complete paragraphs within
+a cell. The tabulation mechanism also works fine at a page break.
+
+\startbuffer
+\starttabulate[|w(1.5cm)B|p(6.0cm)|p|]
+\NC 1252
+ \NC Hasselt obtains its city charter from bishop Hendrik
+ van Vianden.
+ \NC Hendrik van Vianden was pressed by other towns not
+ to agree with the charter. It took Hasselt a long
+ period of time to convince the Bishop. After
+ supporting the Bishop in a small war against the
+ Drents, the charter was released. \NC\NR
+\NC 1350
+ \NC Hasselt joins the Hanzepact to protect their
+ international trade.
+ \NC The Hanzepact was of great importance for merchants
+ in Hasselt. In those days trading goods were taxed
+ at every city, highway or rivercrossing. After
+ joining the Hanzepact duty free routes all over
+ Europe became available to Hasselt. However
+ important the Hanzepact was, Hasselt always stayed a
+ minor member of the pact. \NC\NR
+\stoptabulate
+\stopbuffer
+
+A tabulate definition could look like this:
+
+\typebuffer
+
+In this case the first column is \unit{1.5 centi meter} wide and is typeset bold
+(\type{B}). The second column has a width of \unit{6 centi meter} and is typeset
+like a paragraph. The remaining horizontal space is used up by the last
+paragraph.
+
+The example is typeset like this:
+
+\getbuffer
+
+The tabulation entries are placed between the \type{\start ... \stoptabulate}
+pair. Between the bracket pair your can specify the tabulate format with the
+column separators \type{|} and the format keys (see \in {table}
+[tab:tabularformattingkeys]).
+
+\placetable[][tab:tabularformattingkeys]
+ {Formatting keys for tabulate.}
+ {\starttable[|lT|l|lT|l|]
+ \HL
+ \NC \rm \bf Key \NC \rm \bf Meaning
+ \NC \rm \bf Key \NC \rm \bf Meaning
+ \NC \SR
+ \HL
+ \NC l \NC left align
+ \NC I \NC \it italic
+ \NC \FR
+ \NC c \NC center
+ \NC R \NC \sl roman
+ \NC \MR
+ \NC r \NC right align
+ \NC S \NC \sl slanted
+ \NC \MR
+ \NC i\sl n \NC spacing left
+ \NC T \NC \tt teletype
+ \NC \MR
+ \NC j\sl n \NC spacing right
+ \NC m \NC in||line math
+ \NC \MR
+ \NC k\sl n \NC spacing around
+ \NC M \NC display math
+ \NC \MR
+ \NC w({\sl d}) \NC 1 line, fixed width
+ \NC f\tex{command} \NC font specification
+ \NC \MR
+ \NC p({\sl d}) \NC paragraph, fixed width
+ \NC b\arg{..} \NC place \type{..} before the entry
+ \NC \MR
+ \NC p \NC paragraph, maximum width
+ \NC a\arg{..} \NC place \type{..} after the entry
+ \NC \MR
+ \NC B \NC \bf boldface
+ \NC h\tex{command} \NC apply \tex{command} on the entry
+ \NC \LR
+ \HL
+ \stoptable}
+
+In \in {table} [tab:tabulatestructurecommands] you find an overview
+of the tabulate structuring commands.
+
+\placetable
+ []
+ [tab:tabulatestructurecommands]
+ {Commands to define tabulate.}
+ {\starttable[|l|l|l|]
+ \HL
+ \NC \bf Command \NC \NC \bf Meaning \NC\SR
+ \HL
+ \NC \type{\start ... \stoptabulate} \NC \NC begin end tabulate \NC\FR
+ \NC \type{\NC} \NC next column \NC next column \NC\MR
+ \NC \type{\NR} \NC next row \NC next row \NC\MR
+ \NC \type{\HL} \NC horizontal line \NC horizontal line \NC\MR
+ \NC \type{\TB} \NC table blank \NC empty line \NC\MR
+ \NC \type{\definetabulate} \NC \NC define own tabulate \NC\MR
+ \NC \type{\setuptabulate} \NC \NC tabulate setup \NC\LR
+ \HL
+ \stoptable}
+
+Another example of paragraph formatting could look like this.
+
+\startbuffer
+\definetabulate[ChemPar][|l|p|l|]
+
+\startChemPar
+\NC Limekilns
+ \NC Hasselt has its own limekilns. These were build in 1504
+ and produced quick lime up to 1956. Nowadays they are a
+ tourist attraction.
+ \NC \inlinechemical{CaCO_3,GIVES,CaO,+,CO_2} \NC\NR
+\stopChemPar
+\stopbuffer
+
+\typebuffer
+
+And it would come out like this:
+
+\getbuffer
+
+In \in{chapter}[chemical] your can find some more information on chemistry
+and \CONTEXT.
+
+Here we also introduced the command to define our own paragraph layout.
+
+\shortsetup{definetabulate}
+
+and we also have:
+
+\shortsetup{setuptabulate}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex
new file mode 100644
index 00000000000..0f4689f3f29
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-textbackgrounds.tex
@@ -0,0 +1,55 @@
+\startcomponent ma-cb-en-textbackgrounds
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Background in paragraphs]
+
+\index{background+text}
+
+\Command{\tex{setuptextbackground}}
+\Command{\tex{definetextbackground}}
+\Command{\tex{starttextbackground}}
+
+To emphasize a paragraph you can use backgrounds. A background is set with the
+command pair:
+
+\shortsetup{starttextbackground}
+
+An example can illustrate the use:
+
+\startbuffer
+\setuptextbackground
+ [corner=round,frame=on,
+ location=paragraph,
+ leftoffset=.5\bodyfontsize,
+ rightoffset=.5\bodyfontsize,
+ bottomoffset=5pt]
+
+\starttextbackground
+Hasselt has produced a number of well known people. Only recently
+it turned out that Kilian van Rensselaer played a prominent role
+in the foundation of the State of New York.
+\stoptextbackground
+\stopbuffer
+
+\typebuffer
+
+This would be displayed as:
+
+\getbuffer
+
+Backgrounds can span multiple pages.
+
+You can vary the display of the backgrounds with:
+
+\shortsetup{setuptextbackground}
+
+You can even define your own text backgrounds with:
+
+\shortsetup{definetextbackground}
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex
new file mode 100644
index 00000000000..bed8017d519
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-texteditor.tex
@@ -0,0 +1,32 @@
+\startcomponent ma-cb-en-texteditor
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=texteditor,title=The \SCITE\ text editor]
+
+The developers of \CONTEXT\ have always been able to proces their \TEX\ files
+from a text editor. In that way \CONTEXT\ became an effective authoring tool.
+
+At this moment the text editors \SCITE\ and \TEXWORKS\ are more or less part of
+the \CONTEXT\ distribution.
+
+Please refer to the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Windows_Installation:_ConTeXt_Suite_with_SciTe) ]
+and learn how to install \SCITE.
+
+\SCITE\ supports the:
+
+\startitemize[packed]
+\item processing \TEX\ of files
+\item colored display of commands (lexing)
+\item syntax checking of \TEX, \XML\ and \LUA\ files
+\item spell checking of your text
+\stopitemize
+
+The \CONTEXT\ specific support of \SCITE\ is described in the manual \goto
+{\SCITE\ in \CONTEXT} [ url (manual:scite) ].
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex
new file mode 100644
index 00000000000..ce596c0b51c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-units.tex
@@ -0,0 +1,101 @@
+\startcomponent ma-cb-en-units
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[reference=units,title=Units]
+
+\index{units}
+\index[siunit]{SI--unit}
+
+\Command{\tex{unit}}
+
+To force yourself to use dimensions and units consistently throughout your
+document you can use the \type{\unit} command. Let's give a few examples:
+
+\startbuffer
+\unit{meter per square meter}
+\unit{cubic meter per sec}
+\unit{square milli meter per inch}
+\unit{centi liter per sec}
+\unit{meter inverse sec}
+\unit{newton per square inch}
+\unit{newton times meter per square sec}
+\stopbuffer
+
+\typebuffer
+
+It looks like a lot of typing but it does guarantee a consistent use of units.
+The command \type{\unit} also prevents linebreaking between number and unit.
+The examples above come out as:
+
+\startnarrower
+\startlines
+\getbuffer
+\stoplines
+\stopnarrower
+
+You can add your own units with:
+
+\shortsetup{registerunit}
+
+and set them up with:
+
+\shortsetup{setupunit}
+
+\startbuffer
+\registerunit[unit][inhab=inhabitants] \setupunittext[inhabitants=inh]
+\registerunit[unit][north=north] \setupunittext[north= N]
+\registerunit[unit][east=east] \setupunittext[east= E]
+
+Hasselt is part of the municipality of Zwartewaterland
+(coordinates \unit {52 degrees 35 arcminute north},
+\unit {6 degrees 5 arcminute east}). Its area is about
+\unit {88 square kilometer} (land \unit {83 square kilom}
+and water \unit{5 square km}). As of 1st Augustus 2013 the
+population is 22.201 that is \unit {268 inhab per square kilo
+meter}).
+\stopbuffer
+
+In the example below you can see some new units and the non-consistent
+use of \unit{kilo meter}.
+
+\typebuffer
+
+This results in:
+
+\getbuffer
+
+The \type{\unit} command also allows you to align rows of units in a column.
+
+\startbuffer
+\bTABLE
+\bTR \bTD \bf Street \eTD \bTD \bf Length \eTD \eTR
+\bTR \bTD Ridderstraat \eTD \bTD \unit{_,160 meter} \eTD \eTR
+\bTR \bTD Prinsengracht \eTD \bTD \unit{_,240 meter} \eTD \eTR
+\bTR \bTD Kalverstraat \eTD \bTD \unit{_,_60 meter} \eTD \eTR
+\bTR \bTD H.A.W. van de Vechtlaan \eTD \bTD \unit{1,250 meter} \eTD \eTR
+\bTR \bTD Meestersteeg \eTD \bTD \unit{_,_45 meter} \eTD \eTR
+\eTABLE
+\stopbuffer
+
+When you type:
+
+\typebuffer
+
+It will generate a well aligned second column:
+
+\bgroup
+\setupTABLE[frame=off,offset=0pt]
+\setupTABLE[c][1][width=4.5cm]
+
+\getbuffer
+\egroup
+
+Please refer to the manual \goto {\em Units} [ url(manual:units) ] for more
+information and details.
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex
new file mode 100644
index 00000000000..2d89e937a46
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-usersetups.tex
@@ -0,0 +1,68 @@
+\startcomponent ma-cb-en-usersetups
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=User specifications]
+
+\index{preamble}
+\index{input file}
+
+The setup area of your document is the area before
+the \type{\starttext} command. For example:
+
+\setuptyping
+ [escape=yes]
+
+\definestartstop
+ [comment][style={\rm}]
+
+\starttyping
+ /BTEX \comment{first line of your file} /ETEX
+\setuplayout[width=25cm] /BTEX \comment{set the width of your text} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\starttext /BTEX \comment{starts your text} /ETEX
+Hello Hasselt. /BTEX \comment{your text} /ETEX
+\stoptext /BTEX \comment{ends your text} /ETEX
+\stoptyping
+
+Note that the first line of this file is empty. However, this first line
+is a preamble and can be used for specific user specifications. For example:
+
+\starttyping
+% engine=luatex /BTEX \comment{use the \type{luatex} engine} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\setuplayout[width=25cm] /BTEX \comment{set the width of your text} /ETEX
+ /BTEX \comment{empty line for readability} /ETEX
+\starttext /BTEX \comment{starts your text} /ETEX
+Hello Hasselt. /BTEX \comment{your text} /ETEX
+\stoptext /BTEX \comment{ends your text} /ETEX
+\stoptyping
+
+Note that \CONTEXT\ sees the text after the \type{ % }
+sign in this first line not as a comment.
+
+The preamble can have a meaning for both \CONTEXT\ and \SCITE:
+
+\starttyping
+% engine=pdftex interface=en modes=screen language=uk
+
+\starttext
+Hello Hasselt.
+\stoptext
+\stoptyping
+
+This will be interpreted as:
+
+\starttabulate[|T||p|]
+\NC engine=pdftex \NC \CONTEXT \EQ run as \PDFTEX \NC\NR
+\NC interface=en \NC \CONTEXT \EQ expect english \CONTEXT\ commands (lexing) \NC\NR
+\NC \NC \SCITE \EQ use english lexing \NC\NR
+\NC modes=screen \NC \CONTEXT \EQ invoke mode \type{screen} that is set in the text \NC\NR
+\NC language=uk \NC \SCITE \EQ use the english spell checker \NC\NR
+\stoptabulate
+
+\stopchapter
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex
new file mode 100644
index 00000000000..aa61bb0cb4f
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en-whatever.tex
@@ -0,0 +1,1079 @@
+\startcomponent ma-cb-en-whatever
+
+\enablemode[**en-us]
+
+\project ma-cb
+
+\startchapter[title=Miscellaneous]
+
+\startsection[title=A titlepage]
+
+\index{titlepage}
+
+\Command{\tex{startstandardmakeup}}
+\Command{\tex{definemakeup}}
+\Command{\tex{setupmakeup}}
+
+In the first example of this manual on \at{page}[inputfile] we used the command:
+
+\shortsetup{startnamemakeup}
+%\shortsetup{start<<name>>makeup} % does not work
+
+This command can be used to define titlepages. Such a command is needed since
+title pages often have a different layout than that of the bodytext. With the
+command pair \type{\start ... \stopstandardmakeup} you can make up a page within
+the default page dimensions.
+
+A simple titlepage may look like this:
+
+\startbuffer
+\startstandardmakeup
+\blank
+\rightaligned{\tfd Hasselt in the 21st century}
+\blank
+\rightaligned{\tfb The future}
+\vfill
+\rightaligned{\tfa C. van Marle}
+\rightaligned{Hasselt, 2013}
+\stopstandardmakeup
+\stopbuffer
+
+\typebuffer
+
+In a doublesided document you have to go through some additional actions to
+typeset the back of the titlepage.
+
+\startbuffer
+\startstandardmakeup[doublesided=no]
+\blank
+\rightaligned{\tfd Hasselt in the 21st century}
+\blank
+\rightaligned{\tfb The future}
+\vfill
+\rightaligned{\tfa C. van Marle}
+\rightaligned{Hasselt, \currentdate[year]}
+\stopstandardmakeup
+\startstandardmakeup[page=no]
+\vfill
+\copyright \currentdate[year]
+
+This book is dedicated to the people living in Hasselt. We
+want to thank photographer J. Jonker for manipulating the
+photos in this book in such a way that readers can get a
+clear picture of Hasselt's future look.
+\stopstandardmakeup
+\stopbuffer
+
+\typebuffer
+
+Your own make ups can be made and set up with:
+
+\shortsetup{definemakeup}
+
+and
+
+\shortsetup{setupmakeup}
+
+Please refer to the \goto {\CONTEXTWIKI} [ url (http://wiki.contextgarden.net/Command/setupmakeup) ]
+for more information on the \type{\start...\stopmakeup} command.
+
+\stopsection
+
+\startsection[reference=overlays,title=Overlays]
+
+\index{overlay}
+
+The overlay mechanism gives you the opportunity to add a specific layout
+to a text component. When there is a background option in a \CONTEXT\ command
+you can use overlays.
+
+\startbuffer
+\defineoverlay
+ [verticalbar]
+ [{\blackrule[height=2cm,width=.5cm,color=red]}]
+
+\defineoverlay
+ [horizontalbar]
+ [{\blackrule[height=.5cm,width=12cm,color=red]}]
+
+\framed
+ [width=12cm,
+ height=6cm,
+ background={color,foreground,verticalbar,horizontalbar},
+ offset=overlay,
+ backgroundcolor=blue,
+ frame=off]
+ {\blackrule[width=12cm,height=2cm,color=white]}
+\stopbuffer
+
+The flag of Hasselt could be defined with framed and a number of overlays:
+
+\typebuffer
+
+This will become:
+
+\startlinecorrection
+\getbuffer
+\stoplinecorrection
+
+The pagenumber in this manual has a background with an overlay where the
+\type{\MPclipFive} command takes care of drawing the image with \METAPOST.
+
+\startbuffer
+\defineoverlay
+ [NumberBackground]
+ [\MPclipFive{\overlaywidth}{\overlayheight}{30pt}{5pt}]
+
+\setuppagenumbering
+ [\location={footer,middle},
+ \command=\NummerCommand]
+
+\def\NummerCommand#1%
+ {\framed
+ [\background=NumberBackground,
+ \frame=off,
+ \offset=6pt]
+ {\lower.5\dp\strutbox\hbox spread 60pt{\hss#1\hss}}}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[reference=setups,title=Setups]
+
+\index{setups}
+
+\Command{\tex{setup}}
+
+While defining the layout of a document you can define setups
+with \type{\start...\stopsetups}. Setups are placed in the setup area of
+input file and mostly used to combine a number of commands.
+
+\startbuffer
+\startsetups colorize
+ \blue
+\stopsetups
+
+\startsetups decolorize
+ \black
+\stopsetups
+
+\setupitemize
+ [before=\setups{colorize},
+ after=\setups{decolorize}]
+
+Some data on the church are:
+
+\startitemize[packed,3*broad]
+\sym{997} mentioned for the first time
+\sym{1380} destroyed by fire
+\sym{1466} rebuild
+\sym{1657} restored after shelling by enemy troops
+\sym{1725} struck by lightning
+\stopitemize
+
+\stopbuffer
+
+\typebuffer
+
+Which would result in:
+
+\start % AFO: to keep color and distance local
+\getbuffer
+\stop
+
+Another way of invoking the setups is by the \type{setups} option
+that comes with some \CONTEXT\ commands:
+
+\startbuffer
+\definestartstop[remark]
+
+\setupstartstop[remark]
+ [before=\startframed,
+ after=\stopframed]
+
+\startsetups important
+ \inleftmargin
+ [scope=local,
+ hoffset=1em]{\bf\color[blue]{→}}
+\stopsetups
+
+\setupframed
+ [align=normal,
+ setups=important,
+ frame=on,
+ framecolor=blue,
+ offset=5pt]
+
+\startremark
+ The Stephanus Church was built in 997. After an enormous
+ fire in 1380 it was rebuilt and that's why it has Gothic
+ features. The rebuilding was finished in 1466.\endgraf
+\stopremark
+\stopbuffer
+
+\typebuffer
+
+This becomes:
+
+\blank
+
+\start
+\getbuffer
+\stop
+
+\stopsection
+
+\startsection[reference=variables,title=Variables]
+
+\index{variables}
+
+\Command{\tex{getvariable}}
+\Command{\tex{setvariables}}
+
+There is a mechanism in \CONTEXT\ that enables you to compact information in a
+list of variables that you can recall throughout the document.
+
+\shortsetup{setvariables}
+
+The example below shows how to use variables in defining a coverpage.
+
+\startbuffer
+\setvariables
+ [cover]
+ [set=\setups{coverpage},
+ student=no,
+ teacher=yes,
+ title=From Hasselt to America,
+ subtitle=An Odyssey,
+ authors=\setup{allauthors},
+ edition=2012,
+ isbn=0123456789]
+\stopbuffer
+
+\typebuffer
+
+The moment you need the title on your cover page (or somewhere else in your document) you can
+summon it by:
+
+\startbuffer
+\getvariable{cover}{title}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[reference=floatingblocks,title=Floating blocks]
+
+\index{floating blocks}
+\index{postponing a block}
+
+\Command{\tex{definefloat}}
+\Command{\tex{setupfloat}}
+\Command{\tex{setupfloats}}
+\Command{\tex{setupcaptions}}
+\Command{\tex{placeintermezzo}}
+
+A block in \CONTEXT\ is a text element, for example a table or a figure that you
+can process in a special way. You have already seen the use of
+\type{\placefigure} and \type{\placetable}. These are both examples of floating
+blocks. The floating mechanism is described in \in{chapter}[figures] and
+\in[tables].
+
+You can define these kind of blocks yourself with:
+
+\shortsetup{definefloat}
+
+The bracket pairs are used for the name in singular and
+plural form. For example:
+
+\starttyping
+\definefloat[intermezzo][intermezzi]
+\stoptyping
+
+Now the following commands are available:
+
+\starttyping
+\placeintermezzo[][]{}{}
+\startintermezzotext ... \stopintermezzotext
+\placelistofintermezzi
+\completelistofintermezzi
+\stoptyping
+
+The newly defined floating block can be set up with:
+
+\shortsetup{setupfloat}
+
+You can set up the layout of floating blocks with:
+
+\shortsetup{setupfloats}
+
+You can set up the numbering and the labels with:
+
+\shortsetup{setupcaption}
+
+These commands are typed in the set up area of your input file and will have a
+global effect on all floating blocks.
+
+\setupframedtexts
+ [width=.8\makeupwidth,
+ background=color,
+ backgroundcolor=gray,
+ corner=round,
+ framecolor=blue,
+ rulethickness=2pt]
+
+\startbuffer
+\setupfloat[intermezzo][location=middle]
+\setupcaption[location=bottom,headstyle=boldslanted]
+
+\placeintermezzo{An intermezzo.}
+\startframedtext
+At the beginning of this century there was a tram line from
+Zwolle to Blokzijl via Hasselt. Other means of transport became
+more important and just before the second world war the tram line
+was stopped. Nowadays such a tram line would have been very
+profitable.
+\stopframedtext
+\stopbuffer
+
+\typebuffer
+
+\start
+\getbuffer
+\stop
+
+The framed texts inherits its layout from the example \at{page}[block:bridge].
+
+Tables or figures may take up a lot of space. The placing of these text elements
+can be postponed till the next page break. This is done with:
+\type{\start ... \stoppostponing}:
+
+\startbuffer
+\startpostponing
+\placefigure
+ {A postponed figure.}
+ {\externalfigure[ma-cb-16][width=\textwidth]}
+\stoppostponing
+\stopbuffer
+
+\typebuffer
+
+The figure will be placed at the top of the next page and will cause minimal
+disruption of the running text.
+
+\getbuffer
+
+\stopsection
+
+% \startsection[reference=textblocks,title=Text blocks] % AFO 2013: weggehaald, wordt toch nooit gebruikt
+
+% \index{text blocks}
+
+% \Command{\tex{defineblock}}
+% \Command{\tex{useblocks}}
+% \Command{\tex{hideblocks}}
+% \Command{\tex{setupblock}}
+
+% \stopsection
+
+\startsection[title=Storing text for later use]
+
+\index{storing text}
+
+\Command{\tex{startbuffer}}
+\Command{\tex{getbuffer}}
+\Command{\tex{typebuffer}}
+\Command{\tex{savebuffer}}
+\Command{\tex{setupbuffer}}
+
+You can store information temporarily for future use in your document with:
+
+\shortsetup{startbuffer}
+
+For example:
+
+\starttyping
+\startbuffer[visit]
+If you want to see what Hasselt has in store you should come and
+visit it some time. If you take this manual with you, you will
+recognise some locations.
+\stopbuffer
+
+\getbuffer[visit]
+\stoptyping
+
+With \type{\getbuffer[visit]} you recall the stored text. The logical name is
+optional. With \type{\typebuffer[visit]} you get back the typeset version of the
+content of the buffer.
+
+Buffers are set up with:
+
+\shortsetup{setupbuffer}
+
+You can also save a buffer to an external file with:
+
+\shortsetup{savebuffer}
+
+If you want to save the buffer \type{visit} in an external file called
+\type{myfile-sightseeing.tmp} you type:
+
+\starttyping
+\savebuffer[visit][sightseeing]
+\stoptyping
+
+\stopsection
+
+\startsection[title=Lines]
+
+\index{lines}
+
+\Command{\tex{hairline}}
+\Command{\tex{starttextrule}}
+\Command{\tex{thinrule}}
+\Command{\tex{thinrules}}
+\Command{\tex{setupthinrules}}
+\Command{\tex{underbar}}
+\Command{\tex{overstrikes}}
+\Command{\tex{periods}}
+
+There are many comands to draw lines. For a single line you type:
+
+\shortsetup{hairline}
+
+or:
+
+\shortsetup{thinrule}
+
+For more lines you type:
+
+\shortsetup{thinrules}
+
+Text in combination with lines is also possible:
+
+\startbuffer
+\starttextrule{Hasselt -- Amsterdam}
+If you draw a straight line from Hasselt to Amsterdam you would have
+to cover a distance of almost 145 \unit{Kilo Meter}.
+\stoptextrule
+
+If you draw two straight lines from Hasselt to Amsterdam you would
+have to cover a distance of almost 290 \unit{Kilo Meter}.
+
+Amsterdam \thinrules[n=3] Hasselt
+\stopbuffer
+
+\getbuffer
+
+The code of this example is:
+
+\typebuffer
+
+You always have to be careful in drawing lines. Empty lines around
+\type{\thinrules} must not be forgotten and the vertical spacing is always a
+point of concern.
+
+You can set up line spacing with:
+
+\shortsetup{setupthinrules}
+
+There are a few complementary commands that might be very
+useful.
+
+\shortsetup{setupfillinrules}
+
+These commands are introduced in the examples below:
+
+\startbuffer
+\setupfillinrules[width=2cm]
+\setupfillinlines[width=3cm]
+
+\fillinrules[n=1]{\bf name}
+\fillinrules[n=3]{\bf adress}
+
+\fillinline{Can you please state the \underbar{number} of houses
+ in Hasselt.} \par
+
+Strike out \overstrikes{Hasselt in this text}\periods[18]
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+These commands are used in questionaires. Text that is
+struck out or underlined will not be hyphenated.
+
+In \in{section}[overlays] you have already seen the use of the
+\type{\blackrule} command that can be set up with:
+
+\shortsetup{setupblackrules}
+
+\startbuffer
+\blank
+\blackrule[width=\textwidth,height=1cm,color=blue]
+\stopbuffer
+
+\typebuffer
+
+This will result in a rather fat line:
+
+\getbuffer
+
+
+\stopsection
+
+\startsection[title=Super- and subscript in text]
+
+\index{subscript}
+\index{superscript}
+
+\Command{\tex{low}}
+\Command{\tex{high}}
+\Command{\tex{lohi}}
+
+\startbuffer
+Hasselt's economy has known its \high{ups} and \low{downs}.
+Since the nineties of the last century its economy is
+\lohi{so}{so}.
+\stopbuffer
+
+\getbuffer
+
+This ugly text was made with \type{\low{}}, \type{\high{}} and \type{\lohi{}{}}.
+The text was placed between the curly braces.
+
+\stopsection
+
+\startsection[title=Date]
+
+\index{date}
+
+\Command{\tex{currentdate}}
+
+You can invoke the system date in your text with:
+
+\shortsetup{currentdate}
+
+With \type{\currentdate[day]}, \type{\currentdate[month]} and \type{\currentdate[year]} you can
+invoke day, month and year separately.
+
+\stopsection
+
+\startsection[title=Rotating text, figures and tables]
+
+\index{rotating}
+
+\Command{\tex{rotate}}
+
+Sometimes you may want to rotate text or images. You can rotate
+text and other objects with:
+
+\shortsetup{rotate}
+
+The first bracket pair is optional. Within that bracket pair
+you specify the rotation: \type{rotation=90}. The curly
+braces contain the text or object you want to rotate.
+
+\startbuffer
+Hasselt got its municipal rights in 1252. From that time on it had
+the \rotate[rotation=90]{right} to use its own seal on official
+documents. This seal showed Holy Stephanus known as one of the first
+Christian martyrs, and was the \rotate[rotation=270]{patron} of
+Hasselt. After the Reformation the seal was redesigned and Stephanus
+lost his \quote{holiness} and was from that time on depicted without
+his aureole.
+\stopbuffer
+
+\typebuffer
+
+This results in a very ugly paragraph:
+
+\getbuffer
+
+You can rotate an image just as easily:
+
+% \placetable[rotate][]{}{}
+
+\startbuffer
+\placefigure
+ [][fig:rotation]
+ {The 180 \unit{Degrees} rotated fishing port (de Vispoort).}
+ {\rotate[rotation=180]{\externalfigure[ma-cb-15][width=10cm]}}
+\stopbuffer
+
+\typebuffer
+
+You can see in \in{figure}[fig:rotation] that it is not always clear what you get
+when you rotate.
+
+\getbuffer
+
+We can set up rotating with:
+
+\shortsetup{setuprotate}
+
+In the example above you could also rotate image and caption by:
+
+\startbuffer
+\placefigure
+ [180][fig:rotation]
+ {The 180 \unit{Degrees} rotated fishing port (de Vispoort).}
+ {\externalfigure[ma-cb-15][width=10cm]}
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Scaling text]
+
+\index{scaling}
+
+\Command{\tex{scale}}
+\Command{\tex{setupscale}}
+
+For some obscure reasons you may want to scale text. You can scale text and other
+objects with:
+
+\shortsetup{scale}
+
+\startbuffer
+After 1810 the Dedemsvaart brought some prosperity to Hasselt. All
+ships went through the canals of Hasselt and the \scale[factor=10]{shops} on both
+sides of the canals \scale[factor=10]{prospered}.
+\stopbuffer
+
+\typebuffer
+
+Which will result in:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=Space]
+
+\index{space}
+\index{tilde}
+\index{non-breakable space}
+
+\Command{\tex{space}}
+\Command{\tex{fixedspaces}}
+
+The command \type{\space} will produce a space. In \CONTEXT\ the
+\type{~} (tilde) is a non-breakable space.
+
+\startbuffer
+The Ridderstraat in Hasselt is about 160~m long and 5 to 6~m wide
+with houses on both sides of the street.
+\stopbuffer
+
+\typebuffer
+
+Tildes can also be used to align numbers in a row. The command
+\type{\fixedspaces} will give the tilde the fixed width of a number.
+
+\startbuffer
+\fixedspaces
+
+\bTABLE[frame=off]
+\bTR \bTD Ridderstraat \eTD \bTD 160 m \eTD \eTR
+\bTR \bTD Prinsengracht \eTD \bTD 240 m \eTD \eTR
+\bTR \bTD Kalverstraat \eTD \bTD ~60 m \eTD \eTR
+\bTR \bTD Meestersteeg \eTD \bTD ~45 m \eTD \eTR
+\eTABLE
+\stopbuffer
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Carriage return]
+
+\index{carriage return}
+
+\Command{\tex{crlf}}
+\Command{\tex{startlines}}
+
+A new line can be enforced with:
+
+\shortsetup{crlf}
+
+As a \CONTEXT\ user you should use this command only as a last resort.
+
+When a number of lines should be followed by a {\em carriage return and line feed}
+you can use:
+
+\shortsetup{startlines}
+
+\starttyping
+\startlines
+.
+.
+.
+\stoplines
+\stoptyping
+
+\startbuffer
+On a wooden panel in the town hall of Hasselt you can read:
+
+\startlines
+Heimelijcken haet
+eigen baet
+jongen raet
+Door diese drie wilt verstaen
+is het Roomsche Rijck vergaen.
+\stoplines
+
+This little rhyme contains a warning for the magistrates of
+Hasselt: don't allow personal benefits or feelings to
+influence your wisdom in decision making.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+In a few commands new lines are generated by \type{\\}. For example if you type
+\type{\inmargin{in the\\margin}} then the text will be divided over two lines.
+
+\stopsection
+
+\startsection[title=Hyphenation]
+
+\index{hyphenation}
+\index{language}
+
+\Command{\tex{mainlanguage}}
+\Command{\tex{language}}
+\Command{\tex{nl}}
+\Command{\tex{en}}
+
+When writing multi-lingual texts you have to be aware of the fact that
+hyphenation may differ from one language to another.
+
+To activate a language you type:
+
+\shortsetup{mainlanguage}
+
+Between the brackets you fill in
+\type{af},
+\type{ca},
+\type{cs},
+\type{cs},
+\type{da},
+\type{de},
+\type{en},
+\type{fi},
+\type{fr},
+\type{it},
+\type{la},
+\type{nl},
+\type{nb},
+\type{nn},
+\type{pl},
+\type{pt},
+\type{es},
+\type{sv} and
+\type{tr} for
+afrikaans,
+catalan,
+czech,
+slovak,
+danish,
+german,
+english,
+finnish,
+french,
+italian,
+latin,
+dutch,
+bokmal,
+nnynorsk,
+polish,
+portuguese,
+spanish,
+swedish and
+turkish respectively.
+
+To change from one language to another you can use:
+
+\starttyping
+\language[nl] \language[en] \language[de] \language[fr] \language[sp] ...
+\stoptyping
+
+or the shorthand versions:
+
+\starttyping
+\nl \en \de \fr \sp ...
+\stoptyping
+
+An example:
+
+\startbuffer
+If you want to know more about Hasselt, the best book to read is
+probably \quote{\nl Uit de geschiedenis van Hasselt} by
+F.~Peereboom.
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+If a word is wrongly hyphenated you can define the hyphenation points yourself.
+This is done in the set up area of your input file:
+
+\startbuffer
+\hyphenation{his-to-ry}
+\stopbuffer
+
+\typebuffer
+
+Note that the language setting is also responsible for the way quotes are placed
+around quotes and quotations (see \in{section}[quotations]).
+
+In some languages (like Dutch) compound words are used that are connected with a
+hyphen. The separate words have to be hyphenated correctly. In order to do that
+you can use \type{||}.
+
+\startbuffer
+If your looking for an English||speaking person in Hasselt you should
+go to the Tourist Information Office. There you may expect to find
+full|| and part||time employees who are fluent in German, English,
+French and of course Dutch.
+\stopbuffer
+
+\typebuffer
+
+This will become:
+
+\getbuffer
+
+The double \type{||} takes care of the hyphen and the correct hyphenation of the
+separate words. Also note the suspended compounds.
+
+\stopsection
+
+\startsection[title=Charts]
+
+\index{chart}
+
+\Command{\tex{FLOWchart}}
+
+To enable you to draw flow diagrams \CONTEXT\ contains the core module
+\type{chart}. A simple organogram may look like this:
+
+\startbuffer
+\setupFLOWcharts
+ [width=9\bodyfontsize,
+ height=2\bodyfontsize,
+ dx=1\bodyfontsize,
+ dy=1\bodyfontsize]
+
+\setupFLOWlines
+ [arrow=no]
+
+\startFLOWchart[organogram]
+ \startFLOWcell
+ \shape {action}
+ \name {01}
+ \location {2,1}
+ \text {Zwartewaterland}
+ \connect [bt]{02}
+ \connect [bt]{03}
+ \connect [bt]{04}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {02}
+ \location {1,2}
+ \text {Hasselt}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {03}
+ \location {2,2}
+ \text {Zwartsluis}
+ \stopFLOWcell
+ \startFLOWcell
+ \shape {action}
+ \name {04}
+ \location {3,2}
+ \text {Genemuiden}
+ \stopFLOWcell
+\stopFLOWchart
+\stopbuffer
+
+\midaligned{\getbuffer\FLOWchart[organogram]}
+
+This diagram is defined with the commands below:
+
+\typebuffer
+
+It is of good practice to define your setups and flow diagrams in separate
+definition files (environments).
+
+\startbuffer
+\FLOWchart[organogram]
+\stopbuffer
+
+The flowchart can then be invoked by:
+
+\typebuffer
+
+\stopsection
+
+\startsection[title=Comment in input file]
+
+\index{comment}
+\index[percent]{\% in input file}
+
+All text between \type{\start...\stoptext} will be processed while running
+\CONTEXT. Sometimes however you may have text fragments you don't want to be
+processed or you want to comment on your \CONTEXT\ commands.
+
+If you preceed your text with the percentage sign \type{%}
+it will not be processed.
+
+\startbuffer
+% In very big documents you can use the command \input for
+% different files.
+%
+% For example:
+%
+% \input hass01.tex % chapter 1 on Hasselt
+% \input hass02.tex % chapter 2 on Hasselt
+% \input hass03.tex % chapter 3 on Hasselt
+\stopbuffer
+
+\typebuffer
+
+When you delete the \type{%} before \type{\input} the three files will be
+processed. The comment describing the contents of the files will not be
+processed.
+
+\stopsection
+
+\startsection[title=Notes]
+
+\index{note}
+
+\Command{\tex{startcomment}}
+
+If you want your comment in the input file visible as a 'note' in the PDF file
+you can use:
+
+\shortsetup{startcomment}
+
+\startbuffer
+\startcomment
+ The image of the Vispoort should be in color.
+\stopcomment
+\stopbuffer
+
+\typebuffer
+
+The command will produce a sticky note in the PDF.
+
+The note is only visible when interactivity is set with \type{\setupinteraction}
+and the comment with \type{\setupcomment}.
+
+\stopsection
+
+\startsection[title=Hiding text]
+
+\index{hiding text}
+
+\Command{\tex{starthiding}}
+
+Text can be hidden with:
+
+\shortsetup{starthiding}
+
+The text between \type{\start ... \stophiding} will not be processed.
+
+\stopsection
+
+\startsection[title=Input of another {\tt tex} file]
+
+\index{input other \TEX--files}
+
+\Command{\tex{input}}
+
+In a number of situations you may want to insert other \TEX\ files in your input
+file. For example, sometimes it is more efficient to specify \CONTEXT\ sources in
+more than one file in order to be able to partially process your files.
+
+Another file (with the name \type{another.tex}) can be inserted by:
+
+\starttyping
+\input another.tex
+\stoptyping
+
+The extension is optional so this will work too:
+
+\starttyping
+\input another
+\stoptyping
+
+The command \type{\input} is a \TEX\ command.
+
+For a more systematic approach in maintaining your documents \CONTEXT\ supports a
+project structure with commands like \type{\start...\stopenvironment} and
+\type{\start...\stopproduct}. Please refer to the magazine
+\goto {\em Project structure} [ url(thisway:proj-struc) ]
+for more information.
+
+\stopsection
+
+\startsection[title=XML (eXtended Markup Language)]
+
+\index{xml}
+\index{mathml}
+\index{openmath}
+
+Normally you code your document with \CONTEXT\ commands so you can tell \CONTEXT\
+what to do with the coded text elements.
+
+A more rigid way to code your content is \XML\ (eXtended Markup Language) which enables
+you to have more control over your content (scripting, xslt, validation). A simple
+\XML\ coded document could look like this:
+
+\startbuffer
+<?xml version='1.0' standalone='yes?>
+
+<document>
+ <section>
+ <title>Hasselt in winter</title>
+ <content>
+ <p>In winter scating is a very popular sport in Hasselt.
+ All over Hasselt the frozen canals offer children a great
+ play ground.</p>
+ <p>...</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+\typebuffer
+
+\CONTEXT\ is able to deal with \XML\ directly without underlying XML2TEX
+conversions. Please refer to the manual \goto {Dealing with XML} [ url
+(manual:xml) ] for more information on how to process \XML\ documents.
+
+\CONTEXT\ also supports \MATHML\ (presentational and content markup) and
+\OPENMATH\ with which math expressions can be coded in \XML\ documents.
+
+\stopsection
+
+\stopchapter
+
+\stopcomponent
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf
new file mode 100644
index 00000000000..6ad164eb06c
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.tex
new file mode 100644
index 00000000000..2e0b283af65
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-en.tex
@@ -0,0 +1,86 @@
+% interface=english language=uk modes=screen,bound
+
+% \showframe
+
+\startproduct ma-cb-en
+
+\project ma-cb
+
+% \disabledirectives[otf.kernruns]
+% \disabledirectives[otf.discruns]
+% \disabledirectives[otf.compruns]
+
+\startdocument
+ [title={\ConTeXt\ Mark IV\crlf an excursion},
+ subtitle={English\crlf version},
+ author={Ton Otten\crlf PRAGMA ADE}]
+
+\startfrontmatter
+
+ \component ma-cb-en-introduction
+
+\stopfrontmatter
+
+\startbodymatter
+
+ \component ma-cb-en-document
+ \component ma-cb-en-gettingstarted
+ \component ma-cb-en-specialcharacters
+ \component ma-cb-en-structure
+ \component ma-cb-en-setupcommands
+ \component ma-cb-en-heads
+ \component ma-cb-en-itemizations
+ \component ma-cb-en-math
+ \component ma-cb-en-chemical
+ \component ma-cb-en-units
+ \component ma-cb-en-bibliography
+ \component ma-cb-en-figures
+ \component ma-cb-en-tables
+ \component ma-cb-en-tabulations
+ \component ma-cb-en-columns
+ \component ma-cb-en-footnotes % Hans: zie lokale voetnoot tabel
+ \component ma-cb-en-citations
+ \component ma-cb-en-descriptions
+ \component ma-cb-en-enumerations
+ \component ma-cb-en-frames % Hans 2015: "background=linear shape" werkt niet en zorgt ervoor dat de background van de shortsetup niet meer werken
+ \component ma-cb-en-framedtexts
+ \component ma-cb-en-margintexts
+ \component ma-cb-en-pages
+ \component ma-cb-en-headers
+ \component ma-cb-en-tablesofcontent
+ \component ma-cb-en-registers
+ \component ma-cb-en-synonyms
+ \component ma-cb-en-sortedlists
+ \component ma-cb-en-references
+ \component ma-cb-en-color
+ \component ma-cb-en-alignments
+ \component ma-cb-en-interactivity % Hans: de soundtrack werkt niet en crossref met hasseltbook.tex werkt niet
+ \component ma-cb-en-fonts
+ \component ma-cb-en-composedcharacters
+ \component ma-cb-en-layout
+ \component ma-cb-en-pagebackgrounds
+ \component ma-cb-en-textbackgrounds
+ \component ma-cb-en-paragraphs
+ \component ma-cb-en-commands
+ \component ma-cb-en-whatever
+ \component ma-cb-en-modules
+ \component ma-cb-en-presentations
+ \component ma-cb-en-metapost
+ \component ma-cb-en-usersetups
+
+\stopbodymatter
+
+\startappendices
+
+ \component ma-cb-en-mathcharacters
+ \component ma-cb-en-errors
+ \component ma-cb-en-texteditor
+ \component ma-cb-en-processingfiles
+ \component ma-cb-en-runtimefiles
+
+\stopappendices
+
+\stopdocument
+
+\stopproduct
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-language.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-language.tex
new file mode 100644
index 00000000000..5c6d91d07ed
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/ma-cb-language.tex
@@ -0,0 +1,21 @@
+\startenvironment ma-cb-language
+
+\mainlanguage[en]
+
+\setuplabeltext
+ [en]
+ [ document:author=Main author,
+ document:design=Design and style,
+ document:contributions=Contributions,
+ document:translations=Translations,
+ document:illustrations=Illustrations,
+ document:commanddefinitions=Command definitions,
+ document:commandindex=Command index,
+ document:subjectindex=Subject index,
+ document:contents=Contents,
+ document:manuals=Manuals,
+ document:magazines=Magazines,
+ document:supportandreading=Support and further reading,
+ document:furtherreading=Further reading]
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/en/sounds-001.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/sounds-001.tex
new file mode 100644
index 00000000000..7d1428113a9
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/en/sounds-001.tex
@@ -0,0 +1,34 @@
+\definerenderingwindow
+ [example]
+ [width=0pt,height=0pt,frame=off]
+
+\setupinteraction[state=start]
+
+\useexternalrendering
+ [mysound]
+ [audio/mpeg] % audio/x-mp3
+ [akkerman.mp3]
+ []
+
+\definereference [StartSoundTrack] [StartRendering{mysound}]
+\definereference [StopSoundTrack] [StopRendering{mysound}]
+
+\definelayer[resources][width=\paperwidth,height=\paperheight]
+
+\setupbackgrounds[page][background=resources]
+
+\starttext
+
+ \setlayer[resources]{\placerenderingwindow[example][mysound]} % once
+
+ \startTEXpage
+ \button{start}[StartSoundTrack]
+ \button{stop}[StopSoundTrack]
+ \stopTEXpage
+
+ \startTEXpage
+ \button{start}[StartSoundTrack]
+ \button{stop}[StopSoundTrack]
+ \stopTEXpage
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/sample/cow.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/cow.pdf
index 2441faf74e7..2441faf74e7 100644
--- a/Master/texmf-dist/tex/context/sample/cow.pdf
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/cow.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md
new file mode 100644
index 00000000000..b7c0ab5a636
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.md
@@ -0,0 +1,830 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mayura Draw, Version 4.3
+%%Title: fig-page-areas-en.md
+%%CreationDate: Fri Jan 10 14:38:13 2014
+%%BoundingBox: 8 140 580 700
+%%DocumentFonts: ArialMT
+%%+ Arial-BoldMT
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset MayuraDraw_ops
+%%Version: 4.3
+%%Copyright: (c) 1993-2003 Mayura Software
+/PDXDict 100 dict def
+PDXDict begin
+% width height matrix proc key cache
+% definepattern -\> font
+/definepattern { %def
+ 7 dict begin
+ /FontDict 9 dict def
+ FontDict begin
+ /cache exch def
+ /key exch def
+ /proc exch cvx def
+ /mtx exch matrix invertmatrix def
+ /height exch def
+ /width exch def
+ /ctm matrix currentmatrix def
+ /ptm matrix identmatrix def
+ /str
+ (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
+ def
+ end
+ /FontBBox [ %def
+ 0 0 FontDict /width get
+ FontDict /height get
+ ] def
+ /FontMatrix FontDict /mtx get def
+ /Encoding StandardEncoding def
+ /FontType 3 def
+ /BuildChar { %def
+ pop begin
+ FontDict begin
+ width 0 cache { %ifelse
+ 0 0 width height setcachedevice
+ }{ %else
+ setcharwidth
+ } ifelse
+ 0 0 moveto width 0 lineto
+ width height lineto 0 height lineto
+ closepath clip newpath
+ gsave proc grestore
+ end end
+ } def
+ FontDict /key get currentdict definefont
+ end
+} bind def
+
+% dict patternpath -
+% dict matrix patternpath -
+/patternpath { %def
+ dup type /dicttype eq { %ifelse
+ begin FontDict /ctm get setmatrix
+ }{ %else
+ exch begin FontDict /ctm get setmatrix
+ concat
+ } ifelse
+ currentdict setfont
+ FontDict begin
+ FontMatrix concat
+ width 0 dtransform
+ round width div exch round width div exch
+ 0 height dtransform
+ round height div exch
+ round height div exch
+ 0 0 transform round exch round exch
+ ptm astore setmatrix
+
+ pathbbox
+ height div ceiling height mul 4 1 roll
+ width div ceiling width mul 4 1 roll
+ height div floor height mul 4 1 roll
+ width div floor width mul 4 1 roll
+
+ 2 index sub height div ceiling cvi exch
+ 3 index sub width div ceiling cvi exch
+ 4 2 roll moveto
+
+ FontMatrix ptm invertmatrix pop
+ { %repeat
+ gsave
+ ptm concat
+ dup str length idiv { %repeat
+ str show
+ } repeat
+ dup str length mod str exch
+ 0 exch getinterval show
+ grestore
+ 0 height rmoveto
+ } repeat
+ pop
+ end end
+} bind def
+
+% dict patternfill -
+% dict matrix patternfill -
+/patternfill { %def
+ gsave
+ eoclip patternpath
+ grestore
+ newpath
+} bind def
+
+/img { %def
+ gsave
+ /imgh exch def
+ /imgw exch def
+ concat
+ imgw imgh 8
+ [imgw 0 0 imgh neg 0 imgh]
+ /colorstr 768 string def
+ /colorimage where {
+ pop
+ { currentfile colorstr readhexstring pop }
+ false 3 colorimage
+ }{
+ /graystr 256 string def
+ {
+ currentfile colorstr readhexstring pop
+ length 3 idiv
+ dup 1 sub 0 1 3 -1 roll
+ {
+ graystr exch
+ colorstr 1 index 3 mul get 30 mul
+ colorstr 2 index 3 mul 1 add get 59 mul
+ colorstr 3 index 3 mul 2 add get 11 mul
+ add add 100 idiv
+ put
+ } for
+ graystr 0 3 -1 roll getinterval
+ } image
+ } ifelse
+ grestore
+} bind def
+
+/arrowhead {
+ gsave
+ [] 0 setdash
+ strokeC strokeM strokeY strokeK setcmykcolor
+ 2 copy moveto
+ 4 2 roll exch 4 -1 roll exch
+ sub 3 1 roll sub
+ exch atan rotate dup scale
+ arrowtype
+ dup 0 eq {
+ -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 1 eq {
+ 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 2 eq {
+ -6 -6 rmoveto 6 6 rlineto -6 6 rlineto
+ -1.4142 -1.4142 rlineto 4.5858 -4.5858 rlineto
+ -4.5858 -4.5858 rlineto closepath fill
+ } if
+ dup 3 eq {
+ -6 0 rmoveto -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 4 eq {
+ -9 0 rmoveto 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 5 eq {
+ currentpoint newpath 3 0 360 arc
+ closepath fill
+ } if
+ dup 6 eq {
+ 2.5 2.5 rmoveto 0 -5 rlineto -5 0 rlineto 0 5 rlineto
+ closepath fill
+ } if
+ pop
+ grestore
+} bind def
+
+/setcmykcolor where { %ifelse
+ pop
+}{ %else
+ /setcmykcolor {
+ /black exch def /yellow exch def
+ /magenta exch def /cyan exch def
+ cyan black add dup 1 gt { pop 1 } if 1 exch sub
+ magenta black add dup 1 gt { pop 1 } if 1 exch sub
+ yellow black add dup 1 gt { pop 1 } if 1 exch sub
+ setrgbcolor
+ } bind def
+} ifelse
+
+/RE { %def
+ findfont begin
+ currentdict dup length dict begin
+ { %forall
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /FontName exch def dup length 0 ne { %if
+ /Encoding Encoding 256 array copy def
+ 0 exch { %forall
+ dup type /nametype eq { %ifelse
+ Encoding 2 index 2 index put
+ pop 1 add
+ }{ %else
+ exch pop
+ } ifelse
+ } forall
+ } if pop
+ currentdict dup end end
+ /FontName get exch definefont pop
+} bind def
+
+/spacecount { %def
+ 0 exch
+ ( ) { %loop
+ search { %ifelse
+ pop 3 -1 roll 1 add 3 1 roll
+ }{ pop exit } ifelse
+ } loop
+} bind def
+
+/WinAnsiEncoding [
+ 39/quotesingle 96/grave 130/quotesinglbase/florin/quotedblbase
+ /ellipsis/dagger/daggerdbl/circumflex/perthousand
+ /Scaron/guilsinglleft/OE 145/quoteleft/quoteright
+ /quotedblleft/quotedblright/bullet/endash/emdash
+ /tilde/trademark/scaron/guilsinglright/oe/dotlessi
+ 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright
+ /ordfeminine 172/logicalnot 174/registered/macron/ring
+ 177/plusminus/twosuperior/threesuperior/acute/mu
+ 183/periodcentered/cedilla/onesuperior/ordmasculine
+ 188/onequarter/onehalf/threequarters 192/Agrave/Aacute
+ /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+ /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+ /germandbls/agrave/aacute/acircumflex/atilde/adieresis
+ /aring/ae/ccedilla/egrave/eacute/ecircumflex
+ /edieresis/igrave/iacute/icircumflex/idieresis
+ /eth/ntilde/ograve/oacute/ocircumflex/otilde
+ /odieresis/divide/oslash/ugrave/uacute/ucircumflex
+ /udieresis/yacute/thorn/ydieresis
+] def
+
+/SymbolEncoding [
+ 32/space/exclam/universal/numbersign/existential/percent
+ /ampersand/suchthat/parenleft/parenright/asteriskmath/plus
+ /comma/minus/period/slash/zero/one/two/three/four/five/six
+ /seven/eight/nine/colon/semicolon/less/equal/greater/question
+ /congruent/Alpha/Beta/Chi/Delta/Epsilon/Phi/Gamma/Eta/Iota
+ /theta1/Kappa/Lambda/Mu/Nu/Omicron/Pi/Theta/Rho/Sigma/Tau
+ /Upsilon/sigma1/Omega/Xi/Psi/Zeta/bracketleft/therefore
+ /bracketright/perpendicular/underscore/radicalex/alpha
+ /beta/chi/delta/epsilon/phi/gamma/eta/iota/phi1/kappa/lambda
+ /mu/nu/omicron/pi/theta/rho/sigma/tau/upsilon/omega1/omega
+ /xi/psi/zeta/braceleft/bar/braceright/similar
+ 161/Upsilon1/minute/lessequal/fraction/infinity/florin/club
+ /diamond/heart/spade/arrowboth/arrowleft/arrowup/arrowright
+ /arrowdown/degree/plusminus/second/greaterequal/multiply
+ /proportional/partialdiff/bullet/divide/notequal/equivalence
+ /approxequal/ellipsis/arrowvertex/arrowhorizex/carriagereturn
+ /aleph/Ifraktur/Rfraktur/weierstrass/circlemultiply
+ /circleplus/emptyset/intersection/union/propersuperset
+ /reflexsuperset/notsubset/propersubset/reflexsubset/element
+ /notelement/angle/gradient/registerserif/copyrightserif
+ /trademarkserif/product/radical/dotmath/logicalnot/logicaland
+ /logicalor/arrowdblboth/arrowdblleft/arrowdblup/arrowdblright
+ /arrowdbldown/lozenge/angleleft/registersans/copyrightsans
+ /trademarksans/summation/parenlefttp/parenleftex/parenleftbt
+ /bracketlefttp/bracketleftex/bracketleftbt/bracelefttp
+ /braceleftmid/braceleftbt/braceex
+ 241/angleright/integral/integraltp/integralex/integralbt
+ /parenrighttp/parenrightex/parenrightbt/bracketrighttp
+ /bracketrightex/bracketrightbt/bracerighttp/bracerightmid
+ /bracerightbt
+] def
+
+/patarray [
+/leftdiagonal /rightdiagonal /crossdiagonal /horizontal
+/vertical /crosshatch /fishscale /wave /brick
+] def
+/arrowtype 0 def
+/fillC 0 def /fillM 0 def /fillY 0 def /fillK 0 def
+/strokeC 0 def /strokeM 0 def /strokeY 0 def /strokeK 1 def
+/pattern -1 def
+/mat matrix def
+/mat2 matrix def
+/nesting 0 def
+/deferred /N def
+/c /curveto load def
+/c2 { pop pop c } bind def
+/C /curveto load def
+/C2 { pop pop C } bind def
+/e { gsave concat 0 0 moveto } bind def
+/F {
+ nesting 0 eq { %ifelse
+ pattern -1 eq { %ifelse
+ fillC fillM fillY fillK setcmykcolor eofill
+ }{ %else
+ gsave fillC fillM fillY fillK setcmykcolor eofill grestore
+ 0 0 0 1 setcmykcolor
+ patarray pattern get findfont patternfill
+ } ifelse
+ }{ %else
+ /deferred /F def
+ } ifelse
+} bind def
+/f { closepath F } bind def
+/K { /strokeK exch def /strokeY exch def
+ /strokeM exch def /strokeC exch def } bind def
+/k { /fillK exch def /fillY exch def
+ /fillM exch def /fillC exch def } bind def
+/opc { pop } bind def
+/Opc { pop } bind def
+/L /lineto load def
+/L2 { pop pop L } bind def
+/m /moveto load def
+/m2 { pop pop m } bind def
+/n /newpath load def
+/N {
+ nesting 0 eq { %ifelse
+ newpath
+ }{ %else
+ /deferred /N def
+ } ifelse
+} def
+/S {
+ nesting 0 eq { %ifelse
+ strokeC strokeM strokeY strokeK setcmykcolor stroke
+ }{ %else
+ /deferred /S def
+ } ifelse
+} bind def
+/s { closepath S } bind def
+/Tx { fillC fillM fillY fillK setcmykcolor show
+ 0 leading neg translate 0 0 moveto } bind def
+/T { grestore } bind def
+/TX { pop } bind def
+/Ts { pop } bind def
+/tal { pop } bind def
+/tld { pop } bind def
+/tbx { pop exch pop sub /jwidth exch def } def
+/tpt { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto show
+} bind def
+/tpj { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto
+ dup stringwidth pop
+ 3 -1 roll
+ exch sub
+ 1 index spacecount
+ dup 0 eq { %ifelse
+ pop pop show
+ }{ %else
+ div 0 8#040 4 -1 roll widthshow
+ } ifelse
+} bind def
+/u {} def
+/U {} def
+/*u { /nesting nesting 1 add def } def
+/*U {
+ /nesting nesting 1 sub def
+ nesting 0 eq {
+ deferred cvx exec
+ } if
+} def
+/w /setlinewidth load def
+/d /setdash load def
+/B {
+ nesting 0 eq { %ifelse
+ gsave F grestore S
+ }{ %else
+ /deferred /B def
+ } ifelse
+} bind def
+/b { closepath B } bind def
+/z { /align exch def pop /leading exch def exch findfont
+ exch scalefont setfont } bind def
+/tfn { exch findfont
+ exch scalefont setfont } bind def
+/Pat { /pattern exch def } bind def
+/cm { 6 array astore concat } bind def
+/q { mat2 currentmatrix pop } bind def
+/Q { mat2 setmatrix } bind def
+/Ah {
+ pop /arrowtype exch def
+ currentlinewidth 5 1 roll arrowhead
+} bind def
+/Arc {
+ mat currentmatrix pop
+ translate scale 0 0 1 5 -2 roll arc
+ mat setmatrix
+} bind def
+/Arc2 { pop pop Arc } bind def
+/Bx {
+ mat currentmatrix pop
+ concat /y1 exch def /x1 exch def /y2 exch def /x2 exch def
+ x1 y1 moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+ mat setmatrix
+} bind def
+/Rr {
+ mat currentmatrix pop
+ concat /yrad exch def /xrad exch def
+ 2 copy gt { exch } if /x2 exch def /x1 exch def
+ 2 copy gt { exch } if /y2 exch def /y1 exch def
+ x1 xrad add y2 moveto
+ matrix currentmatrix x1 xrad add y2 yrad sub translate xrad yrad scale
+ 0 0 1 90 -180 arc setmatrix
+ matrix currentmatrix x1 xrad add y1 yrad add translate xrad yrad scale
+ 0 0 1 180 270 arc setmatrix
+ matrix currentmatrix x2 xrad sub y1 yrad add translate xrad yrad scale
+ 0 0 1 270 0 arc setmatrix
+ matrix currentmatrix x2 xrad sub y2 yrad sub translate xrad yrad scale
+ 0 0 1 0 90 arc setmatrix
+ closepath
+ mat setmatrix
+} bind def
+/Ov {
+ mat currentmatrix pop
+ concat translate scale 1 0 moveto 0 0 1 0 360 arc closepath
+ mat setmatrix
+} bind def
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%PDX g 3 3 1 1
+%%IncludeFont: ArialMT
+%%IncludeFont: Arial-BoldMT
+PDXDict begin
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+/_PDX_savepage save def
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/rightdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/leftdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 2 setlinewidth stroke
+} bind
+/horizontal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/vertical true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/crosshatch true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 30 7.5 lineto
+ 0 22.5 moveto 30 22.5 lineto
+ 7.5 0 moveto 7.5 7.5 lineto
+ 7.5 22.5 moveto 7.5 30 lineto
+ 22.5 7.5 moveto 22.5 22.5 lineto
+ 1 setlinewidth stroke
+} bind
+/brick true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 0.5 setlinewidth stroke
+} bind
+/crossdiagonal true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 1 setlinecap
+ 0 7.5 moveto 0 15 7.5 270 360 arc
+ 7.5 15 moveto 15 15 7.5 180 270 arc
+ 0 7.5 moveto 7.5 7.5 7.5 180 360 arc
+ 0.5 setlinewidth stroke
+} bind
+/fishscale true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 1 setlinecap 0.5 setlinewidth
+ 7.5 0 10.6 135 45 arcn
+ 22.5 15 10.6 225 315 arc
+ stroke
+ 7.5 15 10.6 135 45 arcn
+ 22.5 30 10.6 225 315 arc
+ stroke
+} bind
+/wave true definepattern pop
+
+WinAnsiEncoding /_ArialMT /ArialMT RE
+WinAnsiEncoding /_Arial-BoldMT /Arial-BoldMT RE
+
+newpath 2 setlinecap 0 setlinejoin 2 setmiterlimit
+[] 0 setdash
+8 140 moveto 8 700 lineto 580 700 lineto 580 140 lineto closepath clip
+newpath
+%%EndPageSetup
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+543 249 -9 789 [1 0 0 1 27.09 -98.91] Bx
+s
+0.133333 0.133333 0.133333 0 k
+0.133333 0.133333 0.133333 0 K
+0.5 w
+150 480 90 510 [1 0 0 1 -14.91 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 60.42 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 299.9 90.09] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 90.09] Bx
+b
+150 480 90 510 [1 0 0 1 375.4 90.09] Bx
+b
+[1 0 0 1 15.14 -89.21] e
+33 681 33 681 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 33 670.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 45.09] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 45.09] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 45.09] Bx
+b
+[1 0 0 1 -5.536 -83.21] e
+33 630 33 630 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(header) 33 619.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 -180.6] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 -180.6] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 -180.6] Bx
+b
+[1 0 0 1 1.136 -80.91] e
+33 402 33 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 33 391.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -14.91 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 60.09 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 300.1 -224.9] Bx
+b
+240 480 90 510 [1 0 0 1 135.1 -224.9] Bx
+b
+150 480 90 510 [1 0 0 1 375.1 -224.9] Bx
+b
+[1 0 0 1 -7.866 -86.21] e
+36 363 36 363 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(bottom) 36 352.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 -14.91 0.09051] Bx
+b
+150 345 90 510 [1 0 0 1 60.09 0.09051] Bx
+b
+150 345 90 510 [1 0 0 1 300.1 0.09051] Bx
+b
+-1.42109e-016 0.4 0.8 0 k
+240 345 90 510 [1 0 0 1 135 0.09051] Bx
+b
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 375.1 0.09051] Bx
+b
+[1 0 0 1 21.47 -72.71] e
+24 507 24 507 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(text) 24 496.14 tpt
+T
+[1 0 0 1 -10.93 -38.72] e
+93 705 93 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left edge) 93 694.14 tpt
+T
+[1 0 0 1 -4.409 -41.72] e
+159 708 159 708 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left margin) 159 697.14 tpt
+T
+[1 0 0 1 17.42 -38.72] e
+273 705 273 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(text) 273 694.14 tpt
+T
+[1 0 0 1 -13.78 -35.72] e
+402 702 402 702 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right margin) 402 691.14 tpt
+T
+[1 0 0 1 -11.25 -38.72] e
+480 705 480 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right edge) 480 694.14 tpt
+T
+[1 0 0 1 -13.55 -89.21] e
+75 352.596 39 366 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 39 355.14 tpt
+T
+[1 0 0 1 0.09051 -89.91] e
+402 460.596 333 474 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 333 463.14 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 -14.91 -89.91 cm
+60 285 m
+90 285 L
+Q
+S
+q
+1 0 0 1 0.09051 -89.91 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+-1 0 0 1 615.1 -89.91 cm
+60 285 m
+90 285 L
+Q
+S
+q
+-1 0 0 1 600.1 -89.91 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 -1 0 810.1 735.1 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 -1 0 810.1 720.1 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 1 0 -209.9 735.1 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 1 0 -209.9 720.1 cm
+75 285 m
+75 255 L
+Q
+S
+U
+0.5 w
+[3 3] 0 d
+525 735 75 285 [1 0 0 1 0.09051 -89.91] Bx
+s
+1 w
+[] 0 d
+q
+1 0 0 1 -45 -524.9 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+1 0 0 1 -45 -524.9 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[1 0 0 1 0.09051 -89.91] e
+271.57 246.83 246 258 tbx
+0 tal
+11 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 10 tfn
+() 246 248.95 tpt
+T
+[1 0 0 1 0.09051 -89.91] e
+261 255 261 255 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+() 261 245.95 tpt
+T
+[1 0 0 1 9.698 -77.82] e
+261 255 261 255 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(paperwidth) 261 244.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+0 1 -1 0 1244 74.39 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+0 1 -1 0 1244 74.39 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[0 1 -1 0 797.3 129.1] e
+261 255 261 255 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(paperheight) 261 244.14 tpt
+T
+[1 0 0 1 -10.41 8.644] e
+273 429 273 429 tbx
+0 tal
+19 tld
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+/_Arial-BoldMT 18 tfn
+(bodytext) 273 412.71 tpt
+T
+%%PageTrailer
+_PDX_savepage restore
+%%Trailer
+end
+showpage
+%%EOF
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf
new file mode 100644
index 00000000000..88350bf2a34
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-areas-en.pdf
@@ -0,0 +1,527 @@
+%PDF-1.0
+1 0 obj
+<<
+/Creator (Mayura Draw 4.3)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 4 0 R
+/Outlines 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type /Outlines
+/Count 0
+>>
+endobj
+4 0 obj
+<<
+/Type /Pages
+/Count 1
+/Kids [ 5 0 R ]
+>>
+endobj
+5 0 obj
+<<
+/Type /Page
+/Parent 4 0 R
+/MediaBox [ 8 140 580 700 ]
+/Resources <<
+/ProcSet 6 0 R
+/XObject 9 0 R
+/Font 10 0 R
+>>
+/Contents 7 0 R
+>>
+endobj
+6 0 obj
+[ /PDF /Text ]
+endobj
+7 0 obj
+<< /Length 8 0 R >>
+stream
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+18.0905 690.091 m
+18.0905 150.091 l
+570.091 150.091 l
+570.091 690.091 l
+18.0905 690.091 l
+s
+0.866667 0.866667 0.866667 rg
+0.866667 0.866667 0.866667 RG
+0.5 w
+75.0905 600.091 m
+75.0905 570.091 l
+135.091 570.091 l
+135.091 600.091 l
+75.0905 600.091 l
+b*
+150.421 600.091 m
+150.421 570.091 l
+210.421 570.091 l
+210.421 600.091 l
+150.421 600.091 l
+b*
+389.89 600.091 m
+389.89 570.091 l
+449.89 570.091 l
+449.89 600.091 l
+389.89 600.091 l
+b*
+225.091 600.091 m
+225.091 570.091 l
+375.091 570.091 l
+375.091 600.091 l
+225.091 600.091 l
+b*
+465.39 600.091 m
+465.39 570.091 l
+525.39 570.091 l
+525.39 600.091 l
+465.39 600.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 48.14 580.9 Tm
+0 Tw
+(top) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 555.091 m
+75.0905 525.091 l
+135.091 525.091 l
+135.091 555.091 l
+75.0905 555.091 l
+b*
+150.091 555.091 m
+150.091 525.091 l
+210.091 525.091 l
+210.091 555.091 l
+150.091 555.091 l
+b*
+390.09 555.091 m
+390.09 525.091 l
+450.09 525.091 l
+450.09 555.091 l
+390.09 555.091 l
+b*
+225.091 555.091 m
+225.091 525.091 l
+375.091 525.091 l
+375.091 555.091 l
+225.091 555.091 l
+b*
+465.09 555.091 m
+465.09 525.091 l
+525.09 525.091 l
+525.09 555.091 l
+465.09 555.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 27.46 535.9 Tm
+0 Tw
+(header) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 329.391 m
+75.0905 299.391 l
+135.091 299.391 l
+135.091 329.391 l
+75.0905 329.391 l
+b*
+150.091 329.391 m
+150.091 299.391 l
+210.091 299.391 l
+210.091 329.391 l
+150.091 329.391 l
+b*
+390.09 329.391 m
+390.09 299.391 l
+450.09 299.391 l
+450.09 329.391 l
+390.09 329.391 l
+b*
+225.091 329.391 m
+225.091 299.391 l
+375.091 299.391 l
+375.091 329.391 l
+225.091 329.391 l
+b*
+465.09 329.391 m
+465.09 299.391 l
+525.09 299.391 l
+525.09 329.391 l
+465.09 329.391 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 34.14 310.2 Tm
+0 Tw
+(footer) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 285.091 m
+75.0905 255.091 l
+135.091 255.091 l
+135.091 285.091 l
+75.0905 285.091 l
+b*
+150.091 285.091 m
+150.091 255.091 l
+210.091 255.091 l
+210.091 285.091 l
+150.091 285.091 l
+b*
+390.09 285.091 m
+390.09 255.091 l
+450.09 255.091 l
+450.09 285.091 l
+390.09 285.091 l
+b*
+225.091 285.091 m
+225.091 255.091 l
+375.091 255.091 l
+375.091 285.091 l
+225.091 285.091 l
+b*
+465.09 285.091 m
+465.09 255.091 l
+525.09 255.091 l
+525.09 285.091 l
+465.09 285.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 28.13 265.9 Tm
+0 Tw
+(bottom) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75.0905 510.091 m
+75.0905 345.091 l
+135.091 345.091 l
+135.091 510.091 l
+75.0905 510.091 l
+b*
+150.091 510.091 m
+150.091 345.091 l
+210.091 345.091 l
+210.091 510.091 l
+150.091 510.091 l
+b*
+390.09 510.091 m
+390.09 345.091 l
+450.09 345.091 l
+450.09 510.091 l
+390.09 510.091 l
+b*
+1 0.6 0.2 rg
+225 510.091 m
+225 345.091 l
+375 345.091 l
+375 510.091 l
+225 510.091 l
+b*
+0.866667 0.866667 0.866667 rg
+465.09 510.091 m
+465.09 345.091 l
+525.09 345.091 l
+525.09 510.091 l
+465.09 510.091 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 45.47 423.4 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 82.07 655.4 Tm
+0 Tw
+(left edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.6 655.4 Tm
+0 Tw
+(left margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 290.4 655.4 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 388.2 655.4 Tm
+0 Tw
+(right margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 468.8 655.4 Tm
+0 Tw
+(right edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 25.45 265.9 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 333.1 373.2 Tm
+0 Tw
+() Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+45.0905 195.091 m
+75.0905 195.091 l
+S
+75.0905 195.091 m
+75.0905 165.091 l
+S
+555.091 195.091 m
+525.091 195.091 l
+S
+525.091 195.091 m
+525.091 165.091 l
+S
+525.091 675.091 m
+525.091 645.091 l
+S
+525.091 645.091 m
+555.091 645.091 l
+S
+75.0905 675.091 m
+75.0905 645.091 l
+S
+75.0905 645.091 m
+45.0905 645.091 l
+S
+0.5 w
+[3 3] 0 d
+75.0905 195.091 m
+75.0905 645.091 l
+525.091 645.091 l
+525.091 195.091 l
+75.0905 195.091 l
+s
+1 w
+[] 0 d
+83.0005 180.091 m
+517.094 180.091 l
+S
+0 0 0 rg
+0 w
+75.0005 180.091 m
+84.0005 180.091 l
+84.0005 177.091 l
+75.0005 180.091 l
+84.0005 183.091 l
+84.0005 180.091 l
+75.0005 180.091 l
+f*
+525.094 180.091 m
+516.094 180.091 l
+516.094 183.091 l
+525.094 180.091 l
+516.094 177.091 l
+516.094 180.091 l
+525.094 180.091 l
+f*
+0.137255 0.0431373 1 rg
+BT
+/F1 10 Tf
+1 0 0 1 246.1 159 Tm
+0 Tw
+() Tj
+ET
+0 0 0 rg
+BT
+/F1 10 Tf
+1 0 0 1 261.1 156 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 270.7 166.3 Tm
+0 Tw
+(paperwidth) Tj
+ET
+1 1 1 rg
+1 w
+539.09 202.391 m
+539.09 636.484 l
+S
+0 0 0 rg
+0 w
+539.09 194.391 m
+539.09 203.391 l
+542.09 203.391 l
+539.09 194.391 l
+536.09 203.391 l
+539.09 203.391 l
+539.09 194.391 l
+f*
+539.09 644.484 m
+539.09 635.484 l
+536.09 635.484 l
+539.09 644.484 l
+542.09 635.484 l
+539.09 635.484 l
+539.09 644.484 l
+f*
+BT
+/F1 12 Tf
+0 1 -1 0 553.2 390.1 Tm
+0 Tw
+(paperheight) Tj
+ET
+1 1 1 rg
+BT
+/F2 18 Tf
+1 0 0 1 262.6 421.4 Tm
+0 Tw
+(bodytext) Tj
+ET
+endstream
+endobj
+8 0 obj
+5066
+endobj
+10 0 obj
+<<
+/F1 11 0 R
+/F2 12 0 R
+>>
+endobj
+11 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F1
+/BaseFont /Arial
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584
+ 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278
+ 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833
+ 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334
+ 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750
+ 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834
+ 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278
+ 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500
+ 556 500]
+/FontDescriptor 13 0 R
+>>
+endobj
+12 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F2
+/BaseFont /Arial,Bold
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 333 474 556 556 889 722 238 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584
+ 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333
+ 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889
+ 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389
+ 584 750 556 750 278 556 500 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 278 278 500 500 350 556 1000 333 1000 556 333 944 750
+ 500 667 278 333 556 556 556 556 280 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 556 278 333 333 365 556 834 834
+ 834 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278
+ 278 278 611 611 611 611 611 611 611 549 611 611 611 611 611 556
+ 611 556]
+/FontDescriptor 14 0 R
+>>
+endobj
+13 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial
+/FontBBox [ -665 -325 2000 1006 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 70
+>>
+endobj
+14 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial,Bold
+/FontBBox [ -628 -376 2000 1010 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 120
+>>
+endobj
+9 0 obj
+<<
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000000010 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000187 00000 n
+0000000253 00000 n
+0000000417 00000 n
+0000000450 00000 n
+0000005573 00000 n
+0000008294 00000 n
+0000005596 00000 n
+0000005646 00000 n
+0000006767 00000 n
+0000007892 00000 n
+0000008090 00000 n
+trailer
+<<
+/Size 15
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+8319
+%%EOF
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md
new file mode 100644
index 00000000000..35c04b4458b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.md
@@ -0,0 +1,1371 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mayura Draw, Version 4.3
+%%Title: fig-page-parameters-en.md
+%%CreationDate: Fri Jan 10 17:04:54 2014
+%%BoundingBox: 8 230 580 790
+%%DocumentFonts: ArialMT
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset MayuraDraw_ops
+%%Version: 4.3
+%%Copyright: (c) 1993-2003 Mayura Software
+/PDXDict 100 dict def
+PDXDict begin
+% width height matrix proc key cache
+% definepattern -\> font
+/definepattern { %def
+ 7 dict begin
+ /FontDict 9 dict def
+ FontDict begin
+ /cache exch def
+ /key exch def
+ /proc exch cvx def
+ /mtx exch matrix invertmatrix def
+ /height exch def
+ /width exch def
+ /ctm matrix currentmatrix def
+ /ptm matrix identmatrix def
+ /str
+ (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
+ def
+ end
+ /FontBBox [ %def
+ 0 0 FontDict /width get
+ FontDict /height get
+ ] def
+ /FontMatrix FontDict /mtx get def
+ /Encoding StandardEncoding def
+ /FontType 3 def
+ /BuildChar { %def
+ pop begin
+ FontDict begin
+ width 0 cache { %ifelse
+ 0 0 width height setcachedevice
+ }{ %else
+ setcharwidth
+ } ifelse
+ 0 0 moveto width 0 lineto
+ width height lineto 0 height lineto
+ closepath clip newpath
+ gsave proc grestore
+ end end
+ } def
+ FontDict /key get currentdict definefont
+ end
+} bind def
+
+% dict patternpath -
+% dict matrix patternpath -
+/patternpath { %def
+ dup type /dicttype eq { %ifelse
+ begin FontDict /ctm get setmatrix
+ }{ %else
+ exch begin FontDict /ctm get setmatrix
+ concat
+ } ifelse
+ currentdict setfont
+ FontDict begin
+ FontMatrix concat
+ width 0 dtransform
+ round width div exch round width div exch
+ 0 height dtransform
+ round height div exch
+ round height div exch
+ 0 0 transform round exch round exch
+ ptm astore setmatrix
+
+ pathbbox
+ height div ceiling height mul 4 1 roll
+ width div ceiling width mul 4 1 roll
+ height div floor height mul 4 1 roll
+ width div floor width mul 4 1 roll
+
+ 2 index sub height div ceiling cvi exch
+ 3 index sub width div ceiling cvi exch
+ 4 2 roll moveto
+
+ FontMatrix ptm invertmatrix pop
+ { %repeat
+ gsave
+ ptm concat
+ dup str length idiv { %repeat
+ str show
+ } repeat
+ dup str length mod str exch
+ 0 exch getinterval show
+ grestore
+ 0 height rmoveto
+ } repeat
+ pop
+ end end
+} bind def
+
+% dict patternfill -
+% dict matrix patternfill -
+/patternfill { %def
+ gsave
+ eoclip patternpath
+ grestore
+ newpath
+} bind def
+
+/img { %def
+ gsave
+ /imgh exch def
+ /imgw exch def
+ concat
+ imgw imgh 8
+ [imgw 0 0 imgh neg 0 imgh]
+ /colorstr 768 string def
+ /colorimage where {
+ pop
+ { currentfile colorstr readhexstring pop }
+ false 3 colorimage
+ }{
+ /graystr 256 string def
+ {
+ currentfile colorstr readhexstring pop
+ length 3 idiv
+ dup 1 sub 0 1 3 -1 roll
+ {
+ graystr exch
+ colorstr 1 index 3 mul get 30 mul
+ colorstr 2 index 3 mul 1 add get 59 mul
+ colorstr 3 index 3 mul 2 add get 11 mul
+ add add 100 idiv
+ put
+ } for
+ graystr 0 3 -1 roll getinterval
+ } image
+ } ifelse
+ grestore
+} bind def
+
+/arrowhead {
+ gsave
+ [] 0 setdash
+ strokeC strokeM strokeY strokeK setcmykcolor
+ 2 copy moveto
+ 4 2 roll exch 4 -1 roll exch
+ sub 3 1 roll sub
+ exch atan rotate dup scale
+ arrowtype
+ dup 0 eq {
+ -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 1 eq {
+ 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 2 eq {
+ -6 -6 rmoveto 6 6 rlineto -6 6 rlineto
+ -1.4142 -1.4142 rlineto 4.5858 -4.5858 rlineto
+ -4.5858 -4.5858 rlineto closepath fill
+ } if
+ dup 3 eq {
+ -6 0 rmoveto -1 2 rlineto 7 -2 rlineto -7 -2 rlineto
+ closepath fill
+ } if
+ dup 4 eq {
+ -9 0 rmoveto 0 3 rlineto 9 -3 rlineto -9 -3 rlineto
+ closepath fill
+ } if
+ dup 5 eq {
+ currentpoint newpath 3 0 360 arc
+ closepath fill
+ } if
+ dup 6 eq {
+ 2.5 2.5 rmoveto 0 -5 rlineto -5 0 rlineto 0 5 rlineto
+ closepath fill
+ } if
+ pop
+ grestore
+} bind def
+
+/setcmykcolor where { %ifelse
+ pop
+}{ %else
+ /setcmykcolor {
+ /black exch def /yellow exch def
+ /magenta exch def /cyan exch def
+ cyan black add dup 1 gt { pop 1 } if 1 exch sub
+ magenta black add dup 1 gt { pop 1 } if 1 exch sub
+ yellow black add dup 1 gt { pop 1 } if 1 exch sub
+ setrgbcolor
+ } bind def
+} ifelse
+
+/RE { %def
+ findfont begin
+ currentdict dup length dict begin
+ { %forall
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /FontName exch def dup length 0 ne { %if
+ /Encoding Encoding 256 array copy def
+ 0 exch { %forall
+ dup type /nametype eq { %ifelse
+ Encoding 2 index 2 index put
+ pop 1 add
+ }{ %else
+ exch pop
+ } ifelse
+ } forall
+ } if pop
+ currentdict dup end end
+ /FontName get exch definefont pop
+} bind def
+
+/spacecount { %def
+ 0 exch
+ ( ) { %loop
+ search { %ifelse
+ pop 3 -1 roll 1 add 3 1 roll
+ }{ pop exit } ifelse
+ } loop
+} bind def
+
+/WinAnsiEncoding [
+ 39/quotesingle 96/grave 130/quotesinglbase/florin/quotedblbase
+ /ellipsis/dagger/daggerdbl/circumflex/perthousand
+ /Scaron/guilsinglleft/OE 145/quoteleft/quoteright
+ /quotedblleft/quotedblright/bullet/endash/emdash
+ /tilde/trademark/scaron/guilsinglright/oe/dotlessi
+ 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright
+ /ordfeminine 172/logicalnot 174/registered/macron/ring
+ 177/plusminus/twosuperior/threesuperior/acute/mu
+ 183/periodcentered/cedilla/onesuperior/ordmasculine
+ 188/onequarter/onehalf/threequarters 192/Agrave/Aacute
+ /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+ /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+ /germandbls/agrave/aacute/acircumflex/atilde/adieresis
+ /aring/ae/ccedilla/egrave/eacute/ecircumflex
+ /edieresis/igrave/iacute/icircumflex/idieresis
+ /eth/ntilde/ograve/oacute/ocircumflex/otilde
+ /odieresis/divide/oslash/ugrave/uacute/ucircumflex
+ /udieresis/yacute/thorn/ydieresis
+] def
+
+/SymbolEncoding [
+ 32/space/exclam/universal/numbersign/existential/percent
+ /ampersand/suchthat/parenleft/parenright/asteriskmath/plus
+ /comma/minus/period/slash/zero/one/two/three/four/five/six
+ /seven/eight/nine/colon/semicolon/less/equal/greater/question
+ /congruent/Alpha/Beta/Chi/Delta/Epsilon/Phi/Gamma/Eta/Iota
+ /theta1/Kappa/Lambda/Mu/Nu/Omicron/Pi/Theta/Rho/Sigma/Tau
+ /Upsilon/sigma1/Omega/Xi/Psi/Zeta/bracketleft/therefore
+ /bracketright/perpendicular/underscore/radicalex/alpha
+ /beta/chi/delta/epsilon/phi/gamma/eta/iota/phi1/kappa/lambda
+ /mu/nu/omicron/pi/theta/rho/sigma/tau/upsilon/omega1/omega
+ /xi/psi/zeta/braceleft/bar/braceright/similar
+ 161/Upsilon1/minute/lessequal/fraction/infinity/florin/club
+ /diamond/heart/spade/arrowboth/arrowleft/arrowup/arrowright
+ /arrowdown/degree/plusminus/second/greaterequal/multiply
+ /proportional/partialdiff/bullet/divide/notequal/equivalence
+ /approxequal/ellipsis/arrowvertex/arrowhorizex/carriagereturn
+ /aleph/Ifraktur/Rfraktur/weierstrass/circlemultiply
+ /circleplus/emptyset/intersection/union/propersuperset
+ /reflexsuperset/notsubset/propersubset/reflexsubset/element
+ /notelement/angle/gradient/registerserif/copyrightserif
+ /trademarkserif/product/radical/dotmath/logicalnot/logicaland
+ /logicalor/arrowdblboth/arrowdblleft/arrowdblup/arrowdblright
+ /arrowdbldown/lozenge/angleleft/registersans/copyrightsans
+ /trademarksans/summation/parenlefttp/parenleftex/parenleftbt
+ /bracketlefttp/bracketleftex/bracketleftbt/bracelefttp
+ /braceleftmid/braceleftbt/braceex
+ 241/angleright/integral/integraltp/integralex/integralbt
+ /parenrighttp/parenrightex/parenrightbt/bracketrighttp
+ /bracketrightex/bracketrightbt/bracerighttp/bracerightmid
+ /bracerightbt
+] def
+
+/patarray [
+/leftdiagonal /rightdiagonal /crossdiagonal /horizontal
+/vertical /crosshatch /fishscale /wave /brick
+] def
+/arrowtype 0 def
+/fillC 0 def /fillM 0 def /fillY 0 def /fillK 0 def
+/strokeC 0 def /strokeM 0 def /strokeY 0 def /strokeK 1 def
+/pattern -1 def
+/mat matrix def
+/mat2 matrix def
+/nesting 0 def
+/deferred /N def
+/c /curveto load def
+/c2 { pop pop c } bind def
+/C /curveto load def
+/C2 { pop pop C } bind def
+/e { gsave concat 0 0 moveto } bind def
+/F {
+ nesting 0 eq { %ifelse
+ pattern -1 eq { %ifelse
+ fillC fillM fillY fillK setcmykcolor eofill
+ }{ %else
+ gsave fillC fillM fillY fillK setcmykcolor eofill grestore
+ 0 0 0 1 setcmykcolor
+ patarray pattern get findfont patternfill
+ } ifelse
+ }{ %else
+ /deferred /F def
+ } ifelse
+} bind def
+/f { closepath F } bind def
+/K { /strokeK exch def /strokeY exch def
+ /strokeM exch def /strokeC exch def } bind def
+/k { /fillK exch def /fillY exch def
+ /fillM exch def /fillC exch def } bind def
+/opc { pop } bind def
+/Opc { pop } bind def
+/L /lineto load def
+/L2 { pop pop L } bind def
+/m /moveto load def
+/m2 { pop pop m } bind def
+/n /newpath load def
+/N {
+ nesting 0 eq { %ifelse
+ newpath
+ }{ %else
+ /deferred /N def
+ } ifelse
+} def
+/S {
+ nesting 0 eq { %ifelse
+ strokeC strokeM strokeY strokeK setcmykcolor stroke
+ }{ %else
+ /deferred /S def
+ } ifelse
+} bind def
+/s { closepath S } bind def
+/Tx { fillC fillM fillY fillK setcmykcolor show
+ 0 leading neg translate 0 0 moveto } bind def
+/T { grestore } bind def
+/TX { pop } bind def
+/Ts { pop } bind def
+/tal { pop } bind def
+/tld { pop } bind def
+/tbx { pop exch pop sub /jwidth exch def } def
+/tpt { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto show
+} bind def
+/tpj { %def
+ fillC fillM fillY fillK setcmykcolor
+ moveto
+ dup stringwidth pop
+ 3 -1 roll
+ exch sub
+ 1 index spacecount
+ dup 0 eq { %ifelse
+ pop pop show
+ }{ %else
+ div 0 8#040 4 -1 roll widthshow
+ } ifelse
+} bind def
+/u {} def
+/U {} def
+/*u { /nesting nesting 1 add def } def
+/*U {
+ /nesting nesting 1 sub def
+ nesting 0 eq {
+ deferred cvx exec
+ } if
+} def
+/w /setlinewidth load def
+/d /setdash load def
+/B {
+ nesting 0 eq { %ifelse
+ gsave F grestore S
+ }{ %else
+ /deferred /B def
+ } ifelse
+} bind def
+/b { closepath B } bind def
+/z { /align exch def pop /leading exch def exch findfont
+ exch scalefont setfont } bind def
+/tfn { exch findfont
+ exch scalefont setfont } bind def
+/Pat { /pattern exch def } bind def
+/cm { 6 array astore concat } bind def
+/q { mat2 currentmatrix pop } bind def
+/Q { mat2 setmatrix } bind def
+/Ah {
+ pop /arrowtype exch def
+ currentlinewidth 5 1 roll arrowhead
+} bind def
+/Arc {
+ mat currentmatrix pop
+ translate scale 0 0 1 5 -2 roll arc
+ mat setmatrix
+} bind def
+/Arc2 { pop pop Arc } bind def
+/Bx {
+ mat currentmatrix pop
+ concat /y1 exch def /x1 exch def /y2 exch def /x2 exch def
+ x1 y1 moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+ mat setmatrix
+} bind def
+/Rr {
+ mat currentmatrix pop
+ concat /yrad exch def /xrad exch def
+ 2 copy gt { exch } if /x2 exch def /x1 exch def
+ 2 copy gt { exch } if /y2 exch def /y1 exch def
+ x1 xrad add y2 moveto
+ matrix currentmatrix x1 xrad add y2 yrad sub translate xrad yrad scale
+ 0 0 1 90 -180 arc setmatrix
+ matrix currentmatrix x1 xrad add y1 yrad add translate xrad yrad scale
+ 0 0 1 180 270 arc setmatrix
+ matrix currentmatrix x2 xrad sub y1 yrad add translate xrad yrad scale
+ 0 0 1 270 0 arc setmatrix
+ matrix currentmatrix x2 xrad sub y2 yrad sub translate xrad yrad scale
+ 0 0 1 0 90 arc setmatrix
+ closepath
+ mat setmatrix
+} bind def
+/Ov {
+ mat currentmatrix pop
+ concat translate scale 1 0 moveto 0 0 1 0 360 arc closepath
+ mat setmatrix
+} bind def
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%PDX g 3 3 1 1
+%%IncludeFont: ArialMT
+PDXDict begin
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+/_PDX_savepage save def
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/rightdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/leftdiagonal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 2 setlinewidth stroke
+} bind
+/horizontal true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/vertical true definepattern pop
+
+15 15 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 15 7.5 lineto
+ 7.5 0 moveto 7.5 15 lineto
+ 2 setlinewidth stroke
+} bind
+/crosshatch true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 setlinecap
+ 0 7.5 moveto 30 7.5 lineto
+ 0 22.5 moveto 30 22.5 lineto
+ 7.5 0 moveto 7.5 7.5 lineto
+ 7.5 22.5 moveto 7.5 30 lineto
+ 22.5 7.5 moveto 22.5 22.5 lineto
+ 1 setlinewidth stroke
+} bind
+/brick true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 2 setlinecap
+ 7.5 0 moveto 15 7.5 lineto
+ 0 7.5 moveto 7.5 15 lineto
+ 7.5 0 moveto 0 7.5 lineto
+ 15 7.5 moveto 7.5 15 lineto
+ 0.5 setlinewidth stroke
+} bind
+/crossdiagonal true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 2 2 scale
+ 1 setlinecap
+ 0 7.5 moveto 0 15 7.5 270 360 arc
+ 7.5 15 moveto 15 15 7.5 180 270 arc
+ 0 7.5 moveto 7.5 7.5 7.5 180 360 arc
+ 0.5 setlinewidth stroke
+} bind
+/fishscale true definepattern pop
+
+30 30 [300 72 div 0 0 300 72 div 0 0]
+{ %definepattern
+ 1 setlinecap 0.5 setlinewidth
+ 7.5 0 10.6 135 45 arcn
+ 22.5 15 10.6 225 315 arc
+ stroke
+ 7.5 15 10.6 135 45 arcn
+ 22.5 30 10.6 225 315 arc
+ stroke
+} bind
+/wave true definepattern pop
+
+WinAnsiEncoding /_ArialMT /ArialMT RE
+
+newpath 2 setlinecap 0 setlinejoin 2 setmiterlimit
+[] 0 setdash
+8 230 moveto 8 790 lineto 580 790 lineto 580 230 lineto closepath clip
+newpath
+%%EndPageSetup
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+543 249 -9 789 [1 0 0 1 27 -9] Bx
+s
+0.133333 0.133333 0.133333 0 k
+0.133333 0.133333 0.133333 0 K
+0.5 w
+150 480 90 510 [1 0 0 1 -15 180] Bx
+b
+150 480 90 510 [1 0 0 1 60.33 180] Bx
+b
+150 480 90 510 [1 0 0 1 299.8 180] Bx
+b
+240 480 90 510 [1 0 0 1 135 180] Bx
+b
+150 480 90 510 [1 0 0 1 375.3 180] Bx
+b
+[1 0 0 1 15.05 0.702] e
+33 681 33 681 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 33 670.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 135] Bx
+b
+150 480 90 510 [1 0 0 1 60 135] Bx
+b
+150 480 90 510 [1 0 0 1 300 135] Bx
+b
+240 480 90 510 [1 0 0 1 135 135] Bx
+b
+150 480 90 510 [1 0 0 1 375 135] Bx
+b
+[1 0 0 1 -5.627 6.702] e
+33 630 33 630 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(header) 33 619.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 60 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 300 -90.7] Bx
+b
+240 480 90 510 [1 0 0 1 135 -90.7] Bx
+b
+150 480 90 510 [1 0 0 1 375 -90.7] Bx
+b
+[1 0 0 1 1.045 9] e
+33 402 33 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 33 391.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 480 90 510 [1 0 0 1 -15 -135] Bx
+b
+150 480 90 510 [1 0 0 1 60 -135] Bx
+b
+150 480 90 510 [1 0 0 1 300 -135] Bx
+b
+240 480 90 510 [1 0 0 1 135 -135] Bx
+b
+150 480 90 510 [1 0 0 1 375 -135] Bx
+b
+[1 0 0 1 -7.957 3.702] e
+36 363 36 363 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(bottom) 36 352.14 tpt
+T
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 -15 90] Bx
+b
+150 345 90 510 [1 0 0 1 60 90] Bx
+b
+150 345 90 510 [1 0 0 1 300 90] Bx
+b
+-1.42109e-016 0.4 0.8 0 k
+240 345 90 510 [1 0 0 1 135 90] Bx
+b
+0.133333 0.133333 0.133333 0 k
+150 345 90 510 [1 0 0 1 375 90] Bx
+b
+[1 0 0 1 21.38 17.2] e
+24 507 24 507 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(text) 24 496.14 tpt
+T
+[1 0 0 1 -11.02 51.19] e
+93 705 93 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left edge) 93 694.14 tpt
+T
+[1 0 0 1 -4.5 48.19] e
+159 708 159 708 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(left margin) 159 697.14 tpt
+T
+[1 0 0 1 17.33 51.19] e
+273 705 273 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(text) 273 694.14 tpt
+T
+[1 0 0 1 -13.87 54.19] e
+402 702 402 702 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right margin) 402 691.14 tpt
+T
+[1 0 0 1 -11.34 51.19] e
+480 705 480 705 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(right edge) 480 694.14 tpt
+T
+[1 0 0 1 -13.64 0.702] e
+75 352.596 39 366 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+() 39 355.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 91.45 14.02 cm
+150 712 150 720 m2
+150 638 150 630 L2
+Q
+S
+q
+1 0 0 1 91.45 14.02 cm
+150 630 150 720 4 1 Ah
+150 720 150 630 4 2 Ah
+Q
+q
+1 0 0 1 165 -30 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -30 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 -47.91 0 cm
+130.909 705 122.909 705 m2
+265 705 273 705 L2
+Q
+S
+q
+1 0 0 1 -47.91 0 cm
+273 705 122.909 705 4 1 Ah
+122.909 705 273 705 4 2 Ah
+Q
+q
+1 0 0 1 -45 -150 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 -45 -150 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+0.25 w
+q
+1 0 0 1 0.09051 53.27 cm
+225 660 m
+225 645 L
+Q
+S
+q
+1 0 0 1 6.094 0 cm
+228 645 m
+243 645 L
+Q
+S
+[1 0 0 1 -2.909 66] e
+126 654 126 654 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(backspace) 126 643.14 tpt
+T
+[1 0 0 1 -9 30] e
+255 690 255 690 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(topspace) 255 679.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 w
+q
+1 0 0 1 29.91 -210 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 29.91 -210 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 270 -210 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 270 -210 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 345 -150 cm
+128 705 120 705 m2
+172 705 180 705 L2
+Q
+S
+q
+1 0 0 1 345 -150 cm
+180 705 120 705 4 1 Ah
+120 705 180 705 4 2 Ah
+Q
+q
+1 0 0 1 165 -75 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -75 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 165 -300 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -300 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+q
+1 0 0 1 165 -345 cm
+150 712 150 720 m2
+150 698 150 690 L2
+Q
+S
+q
+1 0 0 1 165 -345 cm
+150 690 150 720 4 1 Ah
+150 720 150 690 4 2 Ah
+Q
+0.862745 0.956863 -1.42109e-016 0 K
+2 w
+q
+1 0 0 1 104.9 -150 cm
+136 705 120 705 m2
+254.094 705 270.094 705 L2
+Q
+S
+q
+1 0 0 1 104.9 -150 cm
+270.094 705 120 705 4 1 Ah
+120 705 270.094 705 4 2 Ah
+Q
+q
+1 0 0 1 105 -118.5 cm
+150 747.547 150 763.547 m2
+150 524.547 150 508.547 L2
+Q
+S
+q
+1 0 0 1 105 -118.5 cm
+150 508.547 150 763.547 4 1 Ah
+150 763.547 150 508.547 4 2 Ah
+Q
+[1 0 0 1 -3 6.702] e
+324 675 324 675 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(top) 324 664.14 tpt
+T
+[1 0 0 1 -3 3.702] e
+324 633 324 633 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(header) 324 622.14 tpt
+T
+[1 0 0 1 0 0] e
+261 498 261 498 tbx
+0 tal
+13 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 12 tfn
+(height) 261 487.14 tpt
+T
+[1 0 0 1 -14.05 7.406] e
+291 564 291 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(width) 291 553.14 tpt
+T
+[1 0 0 1 0 9.702] e
+321 402 321 402 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(footer) 321 391.14 tpt
+T
+[1 0 0 1 0 9.702] e
+321 357 321 357 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(bottom) 321 346.14 tpt
+T
+[1 0 0 1 -0.348 7.5] e
+84 564 84 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(leftedge) 84 553.14 tpt
+T
+[1 0 0 1 -13.08 4.359] e
+168 507 168 507 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(leftmargin) 168 496.14 tpt
+T
+[1 0 0 1 -17.44 7.359] e
+408 504 408 504 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(rightmargin) 408 493.14 tpt
+T
+[1 0 0 1 -13.01 7.5] e
+483 564 483 564 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(rightedge) 483 553.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 1 1 0 K
+1 w
+q
+1 0 0 1 165 -120 cm
+150 712 150 720 m2
+150 563 150 555 L2
+Q
+S
+q
+1 0 0 1 165 -120 cm
+150 555 150 720 4 1 Ah
+150 720 150 555 4 2 Ah
+Q
+[1 0 0 1 0 0] e
+402 460.596 333 474 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+() 333 463.14 tpt
+T
+[1 0 0 1 -33 15.64] e
+354 468 354 468 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(textheight) 354 457.14 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+0.5 w
+q
+1 0 0 1 255 -60 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -60 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 7.659] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(topdistance) 411 641.95 tpt
+T
+U
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -105 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -105 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -37.34] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(headerdistance) 411 641.95 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -285 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -285 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -217.3] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(footerdistance) 411 641.95 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 255 -330 cm
+150 716 150 720 m2
+150 709 150 705 L2
+Q
+S
+q
+1 0 0 1 255 -330 cm
+150 705 150 720 4 1 Ah
+150 720 150 705 4 2 Ah
+Q
+[1 0 0 1 -2.33 -262.3] e
+411 651 411 651 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(bottomdistance) 411 641.95 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 45 0 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 45 0 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 30 0 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 30 0 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 120 -15 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 120 -15 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 105 -15 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 105 -15 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 285 -15 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 285 -15 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 270 -15 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 270 -15 cm
+90 330 105 330 4 1 Ah
+Q
+U
+u
+q
+1 0 0 1 360 0 cm
+109 330 105 330 m2
+120 330 L
+Q
+S
+q
+1 0 0 1 360 0 cm
+120 330 105 330 4 1 Ah
+Q
+q
+1 0 0 1 345 0 cm
+101 330 105 330 m2
+90 330 L
+Q
+S
+q
+1 0 0 1 345 0 cm
+90 330 105 330 4 1 Ah
+Q
+U
+[1 0 0 1 -15 5.998] e
+123 321 123 321 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+(leftedgedistance) 123 311.95 tpt
+T
+[1 0 0 1 -36 9.633] e
+300.14 291.83 219 303 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(leftmargindistance) 219 293.95 tpt
+T
+[1 0 0 1 120.2 8.906] e
+306.25 291.83 219 303 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(rightmargindistance) 219 293.95 tpt
+T
+[1 0 0 1 -27 8.998] e
+450 318 450 318 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(rightedgedistance) 450 308.95 tpt
+T
+[1 0 0 1 -6 58.55] e
+183 246.83 120 258 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(edgedistance) 120 248.95 tpt
+T
+[1 0 0 1 18 53.27] e
+171 249 171 249 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(margindistance) 171 239.95 tpt
+T
+[1 0 0 1 180 53.27] e
+171 249 171 249 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(margindistance) 171 239.95 tpt
+T
+[1 0 0 1 312 58.55] e
+183 246.83 120 258 tbx
+0 tal
+11 tld
+/_ArialMT 10 tfn
+(edgedistance) 120 248.95 tpt
+T
+u
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+1 w
+q
+1 0 0 1 -15 0 cm
+60 285 m
+90 285 L
+Q
+S
+q
+1 0 0 1 0 0 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+-1 0 0 1 615 0 cm
+60 285 m
+90 285 L
+Q
+S
+q
+-1 0 0 1 600 0 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 -1 0 810 825 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 -1 0 810 810 cm
+75 285 m
+75 255 L
+Q
+S
+U
+u
+q
+0 -1 1 0 -210 825 cm
+60 285 m
+90 285 L
+Q
+S
+q
+0 -1 1 0 -210 810 cm
+75 285 m
+75 255 L
+Q
+S
+U
+0.5 w
+[3 3] 0 d
+525 735 75 285 [1 0 0 1 0 0] Bx
+s
+1 w
+[] 0 d
+q
+1 0 0 1 -45.09 -435 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+1 0 0 1 -45.09 -435 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[1 0 0 1 0 0] e
+271.57 246.83 246 258 tbx
+0 tal
+11 tld
+0.862745 0.956863 -1.42109e-016 0 k
+/_ArialMT 10 tfn
+() 246 248.95 tpt
+T
+[1 0 0 1 0 0] e
+261 255 261 255 tbx
+0 tal
+11 tld
+1 1 1 0 k
+/_ArialMT 10 tfn
+() 261 245.95 tpt
+T
+[1 0 0 1 9.607 12.09] e
+261 255 261 255 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(paperwidth) 261 244.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+0 1 -1 0 1244 164.3 cm
+128 705 120 705 m2
+562.094 705 570.094 705 L2
+Q
+S
+q
+0 1 -1 0 1244 164.3 cm
+570.094 705 120 705 4 1 Ah
+120 705 570.094 705 4 2 Ah
+Q
+[0 1 -1 0 797.2 219] e
+261 255 261 255 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(paperheight) 261 244.14 tpt
+T
+[1 0 0 1 -12 12] e
+285 540 285 540 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(textwidth) 285 529.14 tpt
+T
+[1 0 0 1 0 12] e
+90 540 90 540 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(edge) 90 529.14 tpt
+T
+[1 0 0 1 0 9] e
+162 483 162 483 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(margin) 162 472.14 tpt
+T
+[1 0 0 1 -6.336 12] e
+408 480 408 480 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(margin) 408 469.14 tpt
+T
+[1 0 0 1 -6 18] e
+489 534 489 534 tbx
+0 tal
+13 tld
+/_ArialMT 12 tfn
+(edge) 489 523.14 tpt
+T
+-1.42109e-016 -1.42109e-016 -1.42109e-016 0 k
+q
+1 0 0 1 252.1 0 cm
+130.909 705 122.909 705 m2
+265 705 273 705 L2
+Q
+S
+q
+1 0 0 1 252.1 0 cm
+273 705 122.909 705 4 1 Ah
+122.909 705 273 705 4 2 Ah
+Q
+0.25 w
+q
+1 0 0 1 150.1 52.55 cm
+225 660 m
+225 645 L
+Q
+S
+[1 0 0 1 297.1 66] e
+126 654 126 654 tbx
+0 tal
+13 tld
+1 1 1 0 k
+/_ArialMT 12 tfn
+(cutspace) 126 643.14 tpt
+T
+%%PageTrailer
+_PDX_savepage restore
+%%Trailer
+end
+showpage
+%%EOF
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf
new file mode 100644
index 00000000000..1dd1f75b1c7
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/fig-page-parameters-en.pdf
@@ -0,0 +1,1216 @@
+%PDF-1.0
+1 0 obj
+<<
+/Creator (Mayura Draw 4.3)
+>>
+endobj
+2 0 obj
+<<
+/Type /Catalog
+/Pages 4 0 R
+/Outlines 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type /Outlines
+/Count 0
+>>
+endobj
+4 0 obj
+<<
+/Type /Pages
+/Count 1
+/Kids [ 5 0 R ]
+>>
+endobj
+5 0 obj
+<<
+/Type /Page
+/Parent 4 0 R
+/MediaBox [ 8 230 580 790 ]
+/Resources <<
+/ProcSet 6 0 R
+/XObject 9 0 R
+/Font 10 0 R
+>>
+/Contents 7 0 R
+>>
+endobj
+6 0 obj
+[ /PDF /Text ]
+endobj
+7 0 obj
+<< /Length 8 0 R >>
+stream
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+18 780 m
+18 240 l
+570 240 l
+570 780 l
+18 780 l
+s
+0.866667 0.866667 0.866667 rg
+0.866667 0.866667 0.866667 RG
+0.5 w
+75 690 m
+75 660 l
+135 660 l
+135 690 l
+75 690 l
+b*
+150.33 690 m
+150.33 660 l
+210.33 660 l
+210.33 690 l
+150.33 690 l
+b*
+389.8 690 m
+389.8 660 l
+449.8 660 l
+449.8 690 l
+389.8 690 l
+b*
+225 690 m
+225 660 l
+375 660 l
+375 690 l
+225 690 l
+b*
+465.3 690 m
+465.3 660 l
+525.3 660 l
+525.3 690 l
+465.3 690 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 48.05 670.8 Tm
+0 Tw
+(top) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 645 m
+75 615 l
+135 615 l
+135 645 l
+75 645 l
+b*
+150 645 m
+150 615 l
+210 615 l
+210 645 l
+150 645 l
+b*
+390 645 m
+390 615 l
+450 615 l
+450 645 l
+390 645 l
+b*
+225 645 m
+225 615 l
+375 615 l
+375 645 l
+225 645 l
+b*
+465 645 m
+465 615 l
+525 615 l
+525 645 l
+465 645 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 27.37 625.8 Tm
+0 Tw
+(header) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 419.3 m
+75 389.3 l
+135 389.3 l
+135 419.3 l
+75 419.3 l
+b*
+150 419.3 m
+150 389.3 l
+210 389.3 l
+210 419.3 l
+150 419.3 l
+b*
+390 419.3 m
+390 389.3 l
+450 389.3 l
+450 419.3 l
+390 419.3 l
+b*
+225 419.3 m
+225 389.3 l
+375 389.3 l
+375 419.3 l
+225 419.3 l
+b*
+465 419.3 m
+465 389.3 l
+525 389.3 l
+525 419.3 l
+465 419.3 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 34.04 400.1 Tm
+0 Tw
+(footer) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 375 m
+75 345 l
+135 345 l
+135 375 l
+75 375 l
+b*
+150 375 m
+150 345 l
+210 345 l
+210 375 l
+150 375 l
+b*
+390 375 m
+390 345 l
+450 345 l
+450 375 l
+390 375 l
+b*
+225 375 m
+225 345 l
+375 345 l
+375 375 l
+225 375 l
+b*
+465 375 m
+465 345 l
+525 345 l
+525 375 l
+465 375 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 28.04 355.8 Tm
+0 Tw
+(bottom) Tj
+ET
+0.866667 0.866667 0.866667 rg
+75 600 m
+75 435 l
+135 435 l
+135 600 l
+75 600 l
+b*
+150 600 m
+150 435 l
+210 435 l
+210 600 l
+150 600 l
+b*
+390 600 m
+390 435 l
+450 435 l
+450 600 l
+390 600 l
+b*
+1 0.6 0.2 rg
+225 600 m
+225 435 l
+375 435 l
+375 600 l
+225 600 l
+b*
+0.866667 0.866667 0.866667 rg
+465 600 m
+465 435 l
+525 435 l
+525 600 l
+465 600 l
+b*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 45.38 513.3 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 81.98 745.3 Tm
+0 Tw
+(left edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.5 745.3 Tm
+0 Tw
+(left margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 290.3 745.3 Tm
+0 Tw
+(text) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 388.1 745.3 Tm
+0 Tw
+(right margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 468.7 745.3 Tm
+0 Tw
+(right edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 25.36 355.8 Tm
+0 Tw
+() Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+241.45 726.02 m
+241.45 652.02 l
+S
+0 0 0 rg
+0 w
+241.45 734.02 m
+241.45 725.02 l
+238.45 725.02 l
+241.45 734.02 l
+244.45 725.02 l
+241.45 725.02 l
+241.45 734.02 l
+f*
+241.45 644.02 m
+241.45 653.02 l
+244.45 653.02 l
+241.45 644.02 l
+238.45 653.02 l
+241.45 653.02 l
+241.45 644.02 l
+f*
+1 1 1 rg
+1 w
+315 682 m
+315 668 l
+S
+0 0 0 rg
+0 w
+315 690 m
+315 681 l
+312 681 l
+315 690 l
+318 681 l
+315 681 l
+315 690 l
+f*
+315 660 m
+315 669 l
+318 669 l
+315 660 l
+312 669 l
+315 669 l
+315 660 l
+f*
+1 1 1 rg
+1 w
+83 705 m
+217.091 705 l
+S
+0 0 0 rg
+0 w
+75 705 m
+84 705 l
+84 702 l
+75 705 l
+84 708 l
+84 705 l
+75 705 l
+f*
+225.091 705 m
+216.091 705 l
+216.091 708 l
+225.091 705 l
+216.091 702 l
+216.091 705 l
+225.091 705 l
+f*
+1 1 1 rg
+1 w
+83 555 m
+127 555 l
+S
+0 0 0 rg
+0 w
+75 555 m
+84 555 l
+84 552 l
+75 555 l
+84 558 l
+84 555 l
+75 555 l
+f*
+135 555 m
+126 555 l
+126 558 l
+135 555 l
+126 552 l
+126 555 l
+135 555 l
+f*
+1 1 1 rg
+0.25 w
+225.091 713.273 m
+225.091 698.273 l
+S
+234.094 645 m
+249.094 645 l
+S
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 123.1 709.1 Tm
+0 Tw
+(backspace) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 246 709.1 Tm
+0 Tw
+(topspace) Tj
+ET
+1 1 1 rg
+1 w
+157.91 495 m
+201.91 495 l
+S
+0 0 0 rg
+0 w
+149.91 495 m
+158.91 495 l
+158.91 492 l
+149.91 495 l
+158.91 498 l
+158.91 495 l
+149.91 495 l
+f*
+209.91 495 m
+200.91 495 l
+200.91 498 l
+209.91 495 l
+200.91 492 l
+200.91 495 l
+209.91 495 l
+f*
+1 1 1 rg
+1 w
+398 495 m
+442 495 l
+S
+0 0 0 rg
+0 w
+390 495 m
+399 495 l
+399 492 l
+390 495 l
+399 498 l
+399 495 l
+390 495 l
+f*
+450 495 m
+441 495 l
+441 498 l
+450 495 l
+441 492 l
+441 495 l
+450 495 l
+f*
+1 1 1 rg
+1 w
+473 555 m
+517 555 l
+S
+0 0 0 rg
+0 w
+465 555 m
+474 555 l
+474 552 l
+465 555 l
+474 558 l
+474 555 l
+465 555 l
+f*
+525 555 m
+516 555 l
+516 558 l
+525 555 l
+516 552 l
+516 555 l
+525 555 l
+f*
+1 1 1 rg
+1 w
+315 637 m
+315 623 l
+S
+0 0 0 rg
+0 w
+315 645 m
+315 636 l
+312 636 l
+315 645 l
+318 636 l
+315 636 l
+315 645 l
+f*
+315 615 m
+315 624 l
+318 624 l
+315 615 l
+312 624 l
+315 624 l
+315 615 l
+f*
+1 1 1 rg
+1 w
+315 412 m
+315 398 l
+S
+0 0 0 rg
+0 w
+315 420 m
+315 411 l
+312 411 l
+315 420 l
+318 411 l
+315 411 l
+315 420 l
+f*
+315 390 m
+315 399 l
+318 399 l
+315 390 l
+312 399 l
+315 399 l
+315 390 l
+f*
+1 1 1 rg
+1 w
+315 367 m
+315 353 l
+S
+0 0 0 rg
+0 w
+315 375 m
+315 366 l
+312 366 l
+315 375 l
+318 366 l
+315 366 l
+315 375 l
+f*
+315 345 m
+315 354 l
+318 354 l
+315 345 l
+312 354 l
+315 354 l
+315 345 l
+f*
+1 1 1 rg
+0.137255 0.0431373 1 RG
+2 w
+240.9 555 m
+358.994 555 l
+S
+0.137255 0.0431373 1 rg
+0 w
+224.9 555 m
+242.9 555 l
+242.9 549 l
+224.9 555 l
+242.9 561 l
+242.9 555 l
+224.9 555 l
+f*
+374.994 555 m
+356.994 555 l
+356.994 561 l
+374.994 555 l
+356.994 549 l
+356.994 555 l
+374.994 555 l
+f*
+1 1 1 rg
+2 w
+255 629.047 m
+255 406.047 l
+S
+0.137255 0.0431373 1 rg
+0 w
+255 645.047 m
+255 627.047 l
+249 627.047 l
+255 645.047 l
+261 627.047 l
+255 627.047 l
+255 645.047 l
+f*
+255 390.047 m
+255 408.047 l
+261 408.047 l
+255 390.047 l
+249 408.047 l
+255 408.047 l
+255 390.047 l
+f*
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 321 670.8 Tm
+0 Tw
+(top) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 625.8 Tm
+0 Tw
+(header) Tj
+ET
+0.137255 0.0431373 1 rg
+BT
+/F1 12 Tf
+1 0 0 1 261 487.1 Tm
+0 Tw
+(height) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 277 560.5 Tm
+0 Tw
+(width) Tj
+ET
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 321 400.8 Tm
+0 Tw
+(footer) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 355.8 Tm
+0 Tw
+(bottom) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 83.65 560.6 Tm
+0 Tw
+(leftedge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 154.9 500.5 Tm
+0 Tw
+(leftmargin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 390.6 500.5 Tm
+0 Tw
+(rightmargin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 470 560.6 Tm
+0 Tw
+(rightedge) Tj
+ET
+1 1 1 rg
+0 0 0 RG
+1 w
+315 592 m
+315 443 l
+S
+0 0 0 rg
+0 w
+315 600 m
+315 591 l
+312 591 l
+315 600 l
+318 591 l
+315 591 l
+315 600 l
+f*
+315 435 m
+315 444 l
+318 444 l
+315 435 l
+312 444 l
+315 444 l
+315 435 l
+f*
+BT
+/F1 12 Tf
+1 0 0 1 333 463.1 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 321 472.8 Tm
+0 Tw
+(textheight) Tj
+ET
+1 1 1 rg
+0.5 w
+405 656 m
+405 649 l
+S
+0 0 0 rg
+0 w
+405 660 m
+405 655.5 l
+403.5 655.5 l
+405 660 l
+406.5 655.5 l
+405 655.5 l
+405 660 l
+f*
+405 645 m
+405 649.5 l
+406.5 649.5 l
+405 645 l
+403.5 649.5 l
+405 649.5 l
+405 645 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 649.6 Tm
+0 Tw
+(topdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 611 m
+405 604 l
+S
+0 0 0 rg
+0 w
+405 615 m
+405 610.5 l
+403.5 610.5 l
+405 615 l
+406.5 610.5 l
+405 610.5 l
+405 615 l
+f*
+405 600 m
+405 604.5 l
+406.5 604.5 l
+405 600 l
+403.5 604.5 l
+405 604.5 l
+405 600 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 604.6 Tm
+0 Tw
+(headerdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 431 m
+405 424 l
+S
+0 0 0 rg
+0 w
+405 435 m
+405 430.5 l
+403.5 430.5 l
+405 435 l
+406.5 430.5 l
+405 430.5 l
+405 435 l
+f*
+405 420 m
+405 424.5 l
+406.5 424.5 l
+405 420 l
+403.5 424.5 l
+405 424.5 l
+405 420 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 424.7 Tm
+0 Tw
+(footerdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+405 386 m
+405 379 l
+S
+0 0 0 rg
+0 w
+405 390 m
+405 385.5 l
+403.5 385.5 l
+405 390 l
+406.5 385.5 l
+405 385.5 l
+405 390 l
+f*
+405 375 m
+405 379.5 l
+406.5 379.5 l
+405 375 l
+403.5 379.5 l
+405 379.5 l
+405 375 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 408.7 379.7 Tm
+0 Tw
+(bottomdistance) Tj
+ET
+1 1 1 rg
+0.5 w
+154 330 m
+165 330 l
+S
+0 0 0 rg
+0 w
+150 330 m
+154.5 330 l
+154.5 328.5 l
+150 330 l
+154.5 331.5 l
+154.5 330 l
+150 330 l
+f*
+1 1 1 rg
+0.5 w
+131 330 m
+120 330 l
+S
+0 0 0 rg
+0 w
+135 330 m
+130.5 330 l
+130.5 331.5 l
+135 330 l
+130.5 328.5 l
+130.5 330 l
+135 330 l
+f*
+1 1 1 rg
+0.5 w
+229 315 m
+240 315 l
+S
+0 0 0 rg
+0 w
+225 315 m
+229.5 315 l
+229.5 313.5 l
+225 315 l
+229.5 316.5 l
+229.5 315 l
+225 315 l
+f*
+1 1 1 rg
+0.5 w
+206 315 m
+195 315 l
+S
+0 0 0 rg
+0 w
+210 315 m
+205.5 315 l
+205.5 316.5 l
+210 315 l
+205.5 313.5 l
+205.5 315 l
+210 315 l
+f*
+1 1 1 rg
+0.5 w
+394 315 m
+405 315 l
+S
+0 0 0 rg
+0 w
+390 315 m
+394.5 315 l
+394.5 313.5 l
+390 315 l
+394.5 316.5 l
+394.5 315 l
+390 315 l
+f*
+1 1 1 rg
+0.5 w
+371 315 m
+360 315 l
+S
+0 0 0 rg
+0 w
+375 315 m
+370.5 315 l
+370.5 316.5 l
+375 315 l
+370.5 313.5 l
+370.5 315 l
+375 315 l
+f*
+1 1 1 rg
+0.5 w
+469 330 m
+480 330 l
+S
+0 0 0 rg
+0 w
+465 330 m
+469.5 330 l
+469.5 328.5 l
+465 330 l
+469.5 331.5 l
+469.5 330 l
+465 330 l
+f*
+1 1 1 rg
+0.5 w
+446 330 m
+435 330 l
+S
+0 0 0 rg
+0 w
+450 330 m
+445.5 330 l
+445.5 331.5 l
+450 330 l
+445.5 328.5 l
+445.5 330 l
+450 330 l
+f*
+BT
+/F1 10 Tf
+1 0 0 1 108 317.9 Tm
+0 Tw
+(leftedgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 183 303.6 Tm
+0 Tw
+(leftmargindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 339.2 302.9 Tm
+0 Tw
+(rightmargindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 423 317.9 Tm
+0 Tw
+(rightedgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 114 307.5 Tm
+0 Tw
+(edgedistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 189 293.2 Tm
+0 Tw
+(margindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 351 293.2 Tm
+0 Tw
+(margindistance) Tj
+ET
+BT
+/F1 10 Tf
+1 0 0 1 432 307.5 Tm
+0 Tw
+(edgedistance) Tj
+ET
+1 1 1 rg
+1 w
+45 285 m
+75 285 l
+S
+75 285 m
+75 255 l
+S
+555 285 m
+525 285 l
+S
+525 285 m
+525 255 l
+S
+525 765 m
+525 735 l
+S
+525 735 m
+555 735 l
+S
+75 765 m
+75 735 l
+S
+75 735 m
+45 735 l
+S
+0.5 w
+[3 3] 0 d
+75 285 m
+75 735 l
+525 735 l
+525 285 l
+75 285 l
+s
+1 w
+[] 0 d
+82.91 270 m
+517.004 270 l
+S
+0 0 0 rg
+0 w
+74.91 270 m
+83.91 270 l
+83.91 267 l
+74.91 270 l
+83.91 273 l
+83.91 270 l
+74.91 270 l
+f*
+525.004 270 m
+516.004 270 l
+516.004 273 l
+525.004 270 l
+516.004 267 l
+516.004 270 l
+525.004 270 l
+f*
+0.137255 0.0431373 1 rg
+BT
+/F1 10 Tf
+1 0 0 1 246 248.9 Tm
+0 Tw
+() Tj
+ET
+0 0 0 rg
+BT
+/F1 10 Tf
+1 0 0 1 261 245.9 Tm
+0 Tw
+() Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 270.6 256.2 Tm
+0 Tw
+(paperwidth) Tj
+ET
+1 1 1 rg
+1 w
+539 292.3 m
+539 726.394 l
+S
+0 0 0 rg
+0 w
+539 284.3 m
+539 293.3 l
+542 293.3 l
+539 284.3 l
+536 293.3 l
+539 293.3 l
+539 284.3 l
+f*
+539 734.394 m
+539 725.394 l
+536 725.394 l
+539 734.394 l
+542 725.394 l
+539 725.394 l
+539 734.394 l
+f*
+BT
+/F1 12 Tf
+0 1 -1 0 553.1 480 Tm
+0 Tw
+(paperheight) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 273 541.1 Tm
+0 Tw
+(textwidth) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 90 541.1 Tm
+0 Tw
+(edge) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 162 481.1 Tm
+0 Tw
+(margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 401.7 481.1 Tm
+0 Tw
+(margin) Tj
+ET
+BT
+/F1 12 Tf
+1 0 0 1 483 541.1 Tm
+0 Tw
+(edge) Tj
+ET
+1 1 1 rg
+1 w
+383 705 m
+517.091 705 l
+S
+0 0 0 rg
+0 w
+375 705 m
+384 705 l
+384 702 l
+375 705 l
+384 708 l
+384 705 l
+375 705 l
+f*
+525.091 705 m
+516.091 705 l
+516.091 708 l
+525.091 705 l
+516.091 702 l
+516.091 705 l
+525.091 705 l
+f*
+1 1 1 rg
+0.25 w
+375.091 712.545 m
+375.091 697.545 l
+S
+0 0 0 rg
+BT
+/F1 12 Tf
+1 0 0 1 423.1 709.1 Tm
+0 Tw
+(cutspace) Tj
+ET
+endstream
+endobj
+8 0 obj
+11561
+endobj
+10 0 obj
+<<
+/F1 11 0 R
+>>
+endobj
+11 0 obj
+<<
+/Type /Font
+/Subtype /TrueType
+/Name /F1
+/BaseFont /Arial
+/Encoding /WinAnsiEncoding
+/FirstChar 30
+/LastChar 255
+/Widths [ 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333
+ 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584
+ 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833
+ 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278
+ 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833
+ 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334
+ 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750
+ 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750
+ 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333
+ 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834
+ 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278
+ 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667
+ 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278
+ 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500
+ 556 500]
+/FontDescriptor 12 0 R
+>>
+endobj
+12 0 obj
+<<
+/Type /FontDescriptor
+/FontName /Arial
+/FontBBox [ -665 -325 2000 1006 ]
+/Ascent 905
+/Descent -212
+/CapHeight 905
+/XHeight 724
+/ItalicAngle 0
+/Flags 32
+/StemV 70
+>>
+endobj
+9 0 obj
+<<
+>>
+endobj
+xref
+0 13
+0000000000 65535 f
+0000000010 00000 n
+0000000063 00000 n
+0000000135 00000 n
+0000000187 00000 n
+0000000253 00000 n
+0000000417 00000 n
+0000000450 00000 n
+0000012068 00000 n
+0000013449 00000 n
+0000012092 00000 n
+0000012130 00000 n
+0000013251 00000 n
+trailer
+<<
+/Size 13
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+13474
+%%EOF
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps
new file mode 100644
index 00000000000..dece521c511
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.eps
@@ -0,0 +1,2799 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 154 313 441 529
+%%Creator: CorelDRAW!
+%%Title: GRACHT.EPS
+%%CreationDate: Wed Aug 13 17:01:56 1997
+
+%%DocumentFonts:
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------
+% Copyright 1992 Corel Corporation. All rights reserved.
+/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def
+/ld{load def}bd/xd{exch def}bd/_ null def
+/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def
+/$n _ def/$o 0 def/$fil 0 def/$bkg false def
+/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def
+/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def
+/$ptm matrix def/$ttm matrix def/$stm matrix def
+/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def
+currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd
+/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def
+/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld
+/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd
+/@ss{exch $Scra add exch load setscreen}bd
+AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def
+/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt
+{@err1 exit}{currentflat 2 add setflat}ifelse}bd
+/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse
+}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd
+/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit
+}ifelse}bind loop setflat}bd/@eoclip/eoclip ld
+/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse
+}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if
+/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse
+2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd
+/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd
+/setcmykcolor where{pop}{/setcmykcolor{4 1 roll
+3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat
+setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd
+/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd
+/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd
+/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{
+0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat
+setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd
+/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{
+exch aload pop pop 4{4 index mul 4 1 roll}repeat
+5 -1 roll pop setcmykcolor}{exch aload pop
+CurrentInkName eq{4 index}{0}ifelse 6 1 roll
+5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{
+/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop}
+repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup
+6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint
+dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor
+exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{
+currentgray 1 eq currentoverprint and not}ifelse}bd
+/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def
+/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd
+/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd
+/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def
+2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if
+dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if
+$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl
+0 $phei rl clip @np $pn cvlit load aload pop
+7 -1 roll 5 index sub 7 -1 roll 3 index sub translate
+/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse
+@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{
+dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub
+0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch
+@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add
+exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop
+0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for
+pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat
+@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd
+Bbllx Bblly $pm itransform/$tlly xd/$tllx xd
+/$wid $turx $tllx sub def/$hei $tury $tlly sub def
+@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{
+$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask
+/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{
+$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd
+exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def
+/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if
+@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{
+/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def
+/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def
+/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def
+/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def
+true}{$frt $frc $frm $fry $frk $frn $o @scc
+dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse
+$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{
+/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def
+/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if
+}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd
+2 mul sub $fst div/$wid xd 2 index sub/$hei xd
+pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill
+$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll
+$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll
+ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd
+2 div 1 index 4 index sub dup $roy mul/$roh xd
+2 div 2 copy dup mul exch dup mul add sqrt
+$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd
+4 index add $roh add exch 5 index add $row add
+exch translate pop pop pop pop currentflat dup 5 mul setflat
+$c $m $y $k 4 copy ColorSeparationMode 0 ne
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale
+$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill
+/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll
+$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop
+setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip
+newpath Bbllx Bblly moveto Bbllx Bbury lineto
+Bburx Bbury lineto Bburx Bblly lineto $fan rotate
+pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if
+@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d
+$t $c $m $y $k $n $o @scc pop $ctm setmatrix
+72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop
+$Psn load exec}{1 setgray eofill}ifelse @rs
+@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def
+}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd
+/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd
+/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd
+/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd
+/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd
+/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd
+/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld
+/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd
+/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd
+/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld
+/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld
+/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc
+{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix
+$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{
+matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse
+$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp
+S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd
+/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd
+/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd
+/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore
+exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd
+/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe
+16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] def/@cc{currentfile $dat readhexstring pop}bd
+/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def
+1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd
+/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore
+/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd
+/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def
+}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd
+/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd
+/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd
+/@ii{concat 3 index 3 index m 3 index 1 index l
+2 copy l 1 index 3 index l 3 index 3 index l
+clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def
+pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def
+}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if
+@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def
+$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate
+$urx $llx sub $ury $lly sub scale $wid $hei abs
+$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0
+$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse
+$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse
+@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def
+1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll
+@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd
+/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def
+$llx $lly translate $urx $llx sub $ury $lly sub scale
+$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]
+/@cc load false $ncl colorimage @gr $ctm setmatrix}bd
+/z{exch findfont exch scalefont setfont}bd
+/ZB{9 dict dup begin 4 1 roll/FontType 3 def
+/FontMatrix xd/FontBBox xd/Encoding 256 array def
+0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def
+CharStrings/.notdef{}put/Metrics 256 dict def
+Metrics/.notdef 3 -1 roll put/BuildChar{exch
+dup/$char exch/Encoding get 3 index get def
+dup/Metrics get $char get aload pop setcachedevice
+begin Encoding exch get CharStrings exch get
+end exec}def end definefont pop}bd/ZBAddChar{findfont begin
+dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put
+CharStrings 3 1 roll put Metrics 3 1 roll put
+end}bd/Z{findfont dup maxlength 2 add dict exch
+dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall
+pop dup dup/Encoding get 256 array copy dup/$fe xd
+/Encoding exch put dup/Fontname 3 index put
+3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{
+$fe exch 2 index exch put 1 add}ifelse}forall
+pop}if dup 256 dict dup/$met xd/Metrics exch put
+dup/FontMatrix get 0 get 1000 mul 1 exch div
+3 index length 256 eq{0 1 255{dup $fe exch get
+dup/.notdef eq{pop pop}{5 index 3 -1 roll get
+2 index mul $met 3 1 roll put}ifelse}for}if
+pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if
+$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
+{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse
+}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd
+/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if
+$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto
+}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if
+setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup
+@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
+/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd
+/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd
+/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix
+/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def
+3 1 roll moveto $ttm concat t $stm setmatrix}def
+/@n{/$ttm exch matrix rotate def}bd/@s{}bd
+/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd
+matrix scale $ptm dup concatmatrix/$ptm xd
+1 eq{$ptm exch dup concatmatrix/$ptm xd}if
+1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd
+/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd
+/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd
+/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def
+/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def
+/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{
+/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{
+/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq
+{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{
+CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq
+{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def
+}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep
+/@whi{@gs -72000 dup moveto -72000 72000 lineto
+72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill
+@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer
+@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth
+2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto
+2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto
+moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def
+/rightbracket{(\051)}def
+
+%%EndProlog
+%%BeginSetup
+11.4737 setmiterlimit
+1.00 setflat
+/$fst 128 def
+
+%%EndSetup
+@sv
+/$ctm matrix currentmatrix def
+@sv
+%%Note: Object
+188.06 385.92 440.57 527.47 @E
+ 0 O 0 @g
+0.20 0.10 0.00 0.00 k
+%%CURV 5
+188.06 527.47 m
+440.57 527.47 L
+439.20 385.92 L
+192.17 396.86 L
+188.06 527.47 L
+@c
+F
+%%Note: Object
+216.00 452.23 288.86 468.65 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 24
+216.00 465.91 m
+216.00 465.91 228.24 463.18 231.62 465.91 c
+235.08 468.65 252.07 465.91 252.07 465.91 c
+252.07 465.91 260.21 461.81 265.68 461.81 c
+271.15 461.81 284.76 460.37 284.76 460.37 c
+288.86 453.53 l
+288.86 453.53 284.11 452.88 277.92 452.88 c
+271.80 452.88 252.72 452.23 252.72 452.23 c
+236.38 452.23 L
+226.15 458.35 L
+218.02 460.37 L
+216.00 465.91 L
+@c
+F
+%%Note: Object
+223.49 392.04 439.92 439.85 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.10 k
+%%CURV 20
+356.11 425.52 m
+354.82 439.85 L
+338.47 430.99 L
+324.86 429.62 L
+304.42 430.34 L
+295.63 427.61 L
+258.19 428.26 L
+241.13 428.26 L
+223.49 426.17 L
+228.96 420.77 L
+260.21 421.42 L
+294.98 421.42 L
+301.03 423.50 L
+319.39 423.50 L
+318.74 417.38 L
+326.88 416.74 L
+439.92 392.04 L
+439.20 411.91 L
+425.59 413.93 L
+356.11 425.52 L
+@c
+F
+%%Note: Object
+413.78 461.88 439.92 506.23 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 0.60 0.00 k
+%%CURV 6
+439.92 506.23 m
+413.78 506.23 L
+413.78 501.70 L
+431.35 461.88 L
+439.92 468.72 L
+439.92 506.23 L
+@c
+B
+%%Note: Object
+385.85 414.00 427.32 483.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 0.10 0.00 k
+%%CURV 7
+385.85 478.66 m
+389.95 482.69 L
+400.75 483.62 L
+427.32 462.82 L
+426.89 414.00 L
+389.02 420.34 L
+385.85 478.66 L
+@c
+B
+%%Note: Object
+322.99 428.69 340.63 446.26 @E
+ 0 O 0 @g
+0.50 0.00 0.50 0.50 k
+%%CURV 40
+332.28 446.26 m
+332.28 446.26 329.98 445.39 329.11 443.09 c
+328.25 440.78 326.38 438.62 326.38 438.62 c
+326.38 438.62 324.86 437.47 324.00 434.88 c
+323.21 432.36 322.99 432.14 322.99 431.06 c
+322.99 429.98 323.21 429.19 324.43 429.41 c
+325.73 429.55 326.81 430.63 326.81 430.63 c
+329.33 429.84 l
+329.33 429.84 329.90 429.62 331.42 430.85 c
+332.86 432.14 333.29 434.52 333.72 433.22 c
+334.15 431.93 333.94 432.58 334.73 431.06 c
+335.59 429.55 337.03 428.98 338.11 429.41 c
+339.19 429.84 338.47 428.69 339.55 430.20 c
+340.63 431.71 339.19 435.74 339.19 435.74 c
+336.24 445.39 L
+332.28 446.26 L
+@c
+F
+%%Note: Object
+325.51 428.04 361.44 475.92 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 42
+357.19 445.82 m
+361.44 445.82 352.58 438.84 348.55 436.61 c
+344.45 434.30 342.65 428.04 338.11 433.87 c
+333.65 439.70 338.54 445.61 334.51 446.04 c
+330.48 446.54 331.85 445.18 328.68 446.54 c
+325.51 447.84 326.45 453.31 326.45 453.31 c
+326.45 453.31 329.98 458.71 331.42 461.88 c
+332.78 465.05 331.42 465.91 331.85 468.22 c
+332.28 470.52 335.02 472.32 335.02 472.32 c
+344.02 471.82 L
+346.25 475.78 l
+346.25 475.78 350.78 475.92 353.02 474.12 c
+355.25 472.32 355.25 469.58 355.25 469.58 c
+357.98 468.22 L
+357.55 460.58 L
+355.68 456.12 l
+355.68 456.12 355.82 452.95 357.19 450.72 C
+358.56 448.42 356.76 445.82 357.19 445.82 c
+@c
+F
+%%Note: Object
+154.87 359.28 227.88 448.34 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+%%CURV 7
+155.38 448.34 m
+217.94 442.01 L
+221.98 427.97 L
+227.88 421.63 L
+211.68 402.26 L
+154.87 359.28 L
+155.38 448.34 L
+@c
+F
+%%Note: Object
+197.28 425.66 300.74 440.21 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 65
+295.27 433.87 m
+294.84 434.23 297.65 435.46 293.62 436.32 c
+289.51 437.26 288.65 435.67 283.25 435.67 c
+277.85 435.67 278.28 433.87 276.05 435.67 c
+273.82 437.47 273.38 439.27 269.28 439.27 c
+265.25 439.27 263.45 439.70 260.78 437.90 c
+258.05 436.10 256.68 436.10 254.45 436.10 c
+252.22 436.10 250.34 436.18 247.68 436.61 c
+245.02 437.04 242.78 437.47 240.05 437.90 c
+237.31 438.41 234.58 438.84 231.91 438.41 c
+229.25 437.90 224.28 437.47 220.68 437.90 c
+217.08 438.41 214.34 440.21 211.18 438.41 c
+208.08 436.61 203.11 436.61 203.11 436.61 c
+198.14 435.67 L
+199.08 428.90 l
+199.08 428.90 197.28 426.60 203.54 426.60 c
+209.88 426.60 212.98 426.60 218.88 426.60 c
+224.71 426.60 223.42 425.66 230.11 427.03 c
+236.88 428.47 240.98 428.47 245.88 428.47 c
+250.85 428.47 254.88 427.97 259.85 427.97 c
+264.82 427.97 266.62 427.97 272.02 427.97 c
+277.42 427.97 279.22 427.54 290.02 427.54 c
+300.74 427.54 300.74 428.90 300.74 428.90 c
+299.88 433.37 L
+295.27 433.87 L
+@c
+F
+%%Note: Object
+154.87 380.95 228.31 427.03 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+%%CURV 8
+159.84 411.26 m
+181.51 422.14 L
+200.38 426.60 L
+224.28 427.03 L
+228.31 422.57 L
+203.54 418.54 L
+154.87 380.95 L
+159.84 411.26 L
+@c
+F
+%%Note: Object
+154.73 314.06 260.78 423.00 @E
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%CURV 17
+259.85 421.20 m
+260.78 398.23 L
+227.88 397.30 L
+220.25 351.14 L
+190.80 314.06 L
+154.73 314.06 L
+154.87 362.88 l
+154.87 362.88 178.78 380.09 190.08 387.79 c
+201.31 395.50 224.28 417.60 226.51 420.34 c
+228.74 423.00 231.48 421.20 231.48 421.20 C
+259.85 421.20 L
+@c
+F
+%%Note: Object
+229.25 398.23 259.85 420.77 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 56.088 -41.400 0.000
+229.25 420.77 m
+259.85 420.77 L
+259.85 398.23 L
+229.25 398.23 L
+229.25 420.77 L
+@c
+B
+%%Note: Object
+271.22 374.90 272.59 384.19 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+272.59 384.19 m
+271.22 374.90 L
+S
+%%Note: Object
+191.23 313.85 421.34 420.77 @E
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%CURV 12
+420.48 314.57 m
+421.34 358.92 L
+312.84 395.35 L
+303.26 394.20 L
+298.15 399.31 L
+294.84 420.77 L
+258.84 420.26 L
+259.92 399.31 L
+268.92 353.45 L
+209.59 351.58 L
+191.23 313.85 L
+420.48 314.57 L
+@c
+F
+%%Note: Object
+189.65 314.06 322.34 353.09 @E
+ 0 O 0 @g
+1.00 0.80 0.00 0.00 k
+%%CURV 16
+209.16 353.09 m
+267.98 350.21 L
+307.94 338.90 l
+307.94 338.90 277.42 330.84 299.88 327.67 c
+322.34 324.43 312.91 324.00 306.65 320.40 c
+300.31 316.80 272.95 314.06 267.48 314.06 c
+262.08 314.06 189.65 314.06 189.65 314.06 C
+209.16 353.09 L
+@c
+F
+%%Note: Object
+300.96 431.06 303.77 470.59 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 1.00 0.00 k
+%%RECT 5.040 -73.800 0.000
+300.96 470.59 m
+303.77 470.59 L
+303.77 431.06 L
+300.96 431.06 L
+300.96 470.59 L
+@c
+B
+%%Note: Object
+262.66 467.86 334.37 474.05 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 1.00 0.00 k
+%%CURV 5
+263.16 474.05 m
+334.37 471.53 L
+330.41 467.86 L
+262.66 470.30 L
+263.16 474.05 L
+@c
+B
+%%Note: Object
+261.65 472.54 346.18 479.74 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 5
+261.65 479.74 m
+346.18 475.27 L
+343.94 472.54 L
+262.15 475.99 L
+261.65 479.74 L
+@c
+B
+%%Note: Object
+303.77 423.07 307.80 476.86 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%RECT 7.416 -75.024 0.000
+303.77 476.86 m
+307.80 476.86 L
+307.80 423.07 L
+303.77 423.07 L
+303.77 476.86 L
+@c
+B
+%%Note: Object
+258.77 422.14 266.26 478.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+266.26 478.30 m
+258.77 422.14 L
+S
+%%Note: Object
+256.75 429.62 263.59 472.82 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+263.59 472.82 m
+256.75 429.62 L
+S
+%%Note: Object
+307.73 442.30 317.38 463.61 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+307.73 463.61 m
+317.38 442.30 L
+S
+%%Note: Object
+307.51 437.33 317.09 453.17 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+307.51 453.17 m
+317.09 437.33 L
+S
+%%Note: Object
+316.58 427.90 322.99 443.74 @E
+ 0 O 0 @g
+1.00 0.80 0.00 0.00 k
+%%RECT 11.736 -29.016 0.000
+316.58 443.74 m
+322.99 443.74 L
+322.99 427.90 L
+316.58 427.90 L
+316.58 443.74 L
+@c
+F
+%%Note: Object
+307.22 428.90 316.58 436.10 @E
+ 0 O 0 @g
+1.00 0.60 0.00 0.00 k
+%%RECT 17.136 -13.176 0.000
+307.22 436.10 m
+316.58 436.10 L
+316.58 428.90 L
+307.22 428.90 L
+307.22 436.10 L
+@c
+F
+%%Note: Object
+255.89 430.42 303.05 430.92 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+255.89 430.92 m
+303.05 430.42 L
+S
+%%Note: Object
+257.98 426.46 304.56 426.67 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 2.02 2.02 0.00 @w
+%%CURV 2
+257.98 426.46 m
+304.56 426.67 L
+S
+%%Note: Object
+256.25 420.77 300.82 422.71 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 81.792 -3.600 0.000
+256.25 422.71 m
+300.82 422.71 L
+300.82 420.77 L
+256.25 420.77 L
+256.25 422.71 L
+@c
+B
+%%Note: Object
+244.44 430.92 246.17 471.02 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 2.736 -73.512 0.000
+244.44 471.02 m
+246.17 471.02 L
+246.17 430.92 L
+244.44 430.92 L
+244.44 471.02 L
+@c
+B
+%%Note: Object
+315.86 405.22 318.10 407.88 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%RECT 4.104 -4.968 0.000
+315.86 407.88 m
+318.10 407.88 L
+318.10 405.22 L
+315.86 405.22 L
+315.86 407.88 L
+@c
+S
+%%Note: Object
+301.32 400.97 303.05 417.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%RECT 3.168 -29.448 0.000
+301.32 417.10 m
+303.05 417.10 L
+303.05 400.97 L
+301.32 400.97 L
+301.32 417.10 L
+@c
+B
+%%Note: Object
+302.54 400.68 304.27 417.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 3.168 -30.888 0.000
+302.54 417.60 m
+304.27 417.60 L
+304.27 400.68 L
+302.54 400.68 L
+302.54 417.60 L
+@c
+B
+%%Note: Object
+295.20 400.25 301.10 420.55 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 10.872 -37.224 0.000
+295.20 420.55 m
+301.10 420.55 L
+301.10 400.25 L
+295.20 400.25 L
+295.20 420.55 L
+@c
+B
+%%Note: Object
+295.49 394.20 315.22 401.18 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+1.00 0.25 0.00 0.00 k
+%%CURV 5
+295.49 401.18 m
+307.58 401.18 L
+315.22 394.99 L
+297.22 394.20 L
+295.49 401.18 L
+@c
+B
+%%Note: Object
+300.53 400.97 319.10 423.22 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%CURV 7
+300.53 423.22 m
+319.10 423.22 L
+319.10 416.09 L
+316.80 416.09 L
+306.94 400.97 L
+301.32 400.97 L
+300.53 423.22 L
+@c
+B
+%%Note: Object
+306.43 343.66 439.92 417.31 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 1.00 0.00 k
+%%CURV 15
+439.92 391.39 m
+317.09 417.31 L
+306.43 401.69 L
+314.57 395.50 l
+314.57 395.50 319.39 392.76 329.62 387.29 c
+339.84 381.82 341.86 384.55 346.61 380.45 c
+351.36 376.34 369.65 375.05 369.65 375.05 c
+439.63 343.66 L
+439.92 391.39 L
+@c
+B
+%%Note: Object
+155.38 429.62 222.98 527.47 @E
+ 0 O 0 @g
+0.70 0.00 0.70 0.10 k
+%%CURV 33
+194.18 527.47 m
+201.67 527.47 191.02 515.59 194.40 508.82 c
+197.78 501.98 195.05 507.46 201.89 500.62 c
+208.66 493.78 213.41 491.76 213.41 486.29 c
+213.41 480.82 213.41 479.45 214.13 472.61 c
+214.78 465.77 218.81 458.93 219.53 454.82 c
+220.25 450.79 222.98 447.34 220.25 443.95 c
+217.51 440.57 216.79 440.57 206.64 440.57 c
+196.49 440.57 196.49 443.30 187.63 438.48 c
+178.78 433.73 179.50 429.62 172.66 433.73 c
+165.89 437.76 155.66 441.22 155.66 441.22 c
+155.38 527.47 L
+194.18 527.47 L
+@c
+F
+%%Note: Object
+208.87 338.18 276.41 368.64 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+1.00 0.50 0.00 0.00 k
+%%CURV 30
+276.41 364.90 m
+276.41 364.90 275.76 365.47 274.25 362.38 c
+272.66 359.21 272.66 357.34 269.86 352.94 c
+267.05 348.48 268.27 349.49 264.53 345.67 c
+260.71 341.93 263.38 345.38 258.34 341.93 c
+253.30 338.47 248.26 339.34 243.79 339.70 c
+239.40 339.98 230.62 338.18 226.87 340.34 c
+223.13 342.58 221.90 343.51 219.74 347.26 c
+217.58 351.00 217.58 351.00 215.71 354.46 c
+213.84 357.91 213.34 361.58 212.26 363.31 c
+208.87 368.64 L
+276.41 364.90 L
+@c
+B
+%%Note: Object
+354.53 420.26 388.87 480.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+356.04 469.87 m
+354.53 425.81 L
+388.87 420.26 L
+387.29 480.10 L
+356.04 469.87 L
+@c
+S
+%%Note: Object
+356.76 473.26 400.90 502.63 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.75 0.75 0.00 k
+%%CURV 5
+400.90 502.63 m
+377.06 490.32 L
+356.76 473.26 L
+384.55 483.55 L
+400.90 502.63 L
+@c
+B
+%%Note: Object
+384.98 482.83 428.76 501.98 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 0.60 0.00 k
+%%CURV 4
+400.25 501.98 m
+384.98 483.62 L
+428.76 482.83 L
+400.25 501.98 L
+@c
+B
+%%Note: Object
+384.62 434.45 436.90 507.38 @E
+ 0 O 0 @g
+0.70 0.00 0.70 0.00 k
+%%CURV 40
+409.75 435.10 m
+406.30 435.10 407.02 434.45 402.26 438.48 c
+397.51 442.58 396.79 439.20 393.41 448.06 c
+390.02 456.91 388.01 454.18 388.66 461.66 c
+389.30 469.22 384.62 468.50 390.02 476.06 c
+395.42 483.55 394.13 479.45 399.53 487.66 c
+405.00 495.79 404.28 498.53 409.03 499.90 c
+413.78 501.26 412.49 507.38 418.61 499.90 c
+424.66 492.41 425.30 487.58 430.06 486.94 c
+434.88 486.29 436.25 488.95 436.25 480.82 c
+436.25 472.61 436.90 467.86 431.50 462.38 c
+426.02 456.91 421.27 458.28 420.55 450.07 c
+419.90 441.86 420.55 437.83 417.17 437.11 C
+413.78 436.39 409.75 435.10 409.75 435.10 c
+@c
+F
+%%Note: Object
+424.66 313.63 430.78 365.47 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.50 0.80 0.20 k
+%%RECT 11.232 -94.968 0.000
+424.66 365.47 m
+430.78 365.47 L
+430.78 313.63 L
+424.66 313.63 L
+424.66 365.47 L
+@c
+B
+%%Note: Object
+244.58 465.84 246.02 471.02 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 471.02 m
+246.02 471.02 L
+246.02 465.84 L
+244.58 465.84 L
+244.58 471.02 L
+@c
+F
+%%Note: Object
+244.58 455.47 246.02 460.66 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 460.66 m
+246.02 460.66 L
+246.02 455.47 L
+244.58 455.47 L
+244.58 460.66 L
+@c
+F
+%%Note: Object
+244.58 445.25 246.02 450.43 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 450.43 m
+246.02 450.43 L
+246.02 445.25 L
+244.58 445.25 L
+244.58 450.43 L
+@c
+F
+%%Note: Object
+244.58 435.96 246.02 441.14 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 2.664 -9.576 0.000
+244.58 441.14 m
+246.02 441.14 L
+246.02 435.96 L
+244.58 435.96 L
+244.58 441.14 L
+@c
+F
+%%Note: Object
+353.38 468.29 390.02 482.98 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 7
+357.34 473.98 m
+354.53 473.98 L
+353.38 468.29 L
+387.22 480.17 L
+390.02 482.98 L
+384.34 482.98 L
+357.34 473.98 L
+@c
+B
+%%Note: Object
+356.11 420.77 389.52 479.59 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.20 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.30 0.00 k
+%%CURV 5
+386.14 479.59 m
+389.52 420.77 L
+356.11 425.52 L
+356.83 468.65 L
+386.14 479.59 L
+@c
+B
+%%Note: Object
+368.42 458.35 371.81 470.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+368.42 469.30 m
+368.42 458.35 L
+371.81 459.07 L
+371.16 470.66 L
+368.42 469.30 L
+@c
+S
+%%Note: Object
+373.75 421.42 384.77 446.04 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 5
+373.90 446.04 m
+373.75 422.86 L
+384.77 421.42 L
+384.12 446.04 L
+373.90 446.04 L
+@c
+S
+%%Note: Object
+350.06 430.34 378.65 466.42 @E
+ 0 O 0 @g
+0.80 0.00 0.80 0.20 k
+%%CURV 25
+366.34 431.64 m
+371.16 435.10 373.82 430.34 375.19 439.20 c
+376.56 448.13 378.65 450.86 375.91 454.25 c
+373.18 457.70 367.06 459.07 367.06 459.07 c
+367.06 459.07 367.70 465.26 362.30 462.46 c
+356.83 459.72 350.06 466.42 350.06 458.93 c
+350.06 451.37 354.10 448.13 357.55 444.67 c
+360.94 441.29 360.22 440.57 361.58 437.18 C
+362.95 433.73 366.34 431.64 366.34 431.64 c
+@c
+F
+%%Note: Object
+405.86 405.07 411.34 435.10 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 9.936 -55.080 0.000
+405.86 435.10 m
+411.34 435.10 L
+411.34 405.07 L
+405.86 405.07 L
+405.86 435.10 L
+@c
+B
+%%Note: Object
+209.16 359.21 277.06 377.42 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.40 0.15 0.00 0.00 k
+%%CURV 29
+270.50 375.84 m
+270.50 375.84 277.06 370.22 277.06 367.99 c
+277.06 365.83 276.98 364.25 272.66 362.95 c
+268.27 361.73 258.62 360.79 256.10 360.79 c
+253.58 360.79 247.32 359.86 245.45 359.86 c
+243.58 359.86 231.05 359.21 228.53 359.86 c
+226.08 360.43 219.82 359.21 217.58 360.79 c
+215.42 362.38 212.33 362.95 210.74 365.47 c
+209.16 367.99 209.16 368.35 209.16 371.16 c
+209.16 373.97 213.84 377.42 213.84 377.42 C
+270.50 375.84 L
+@c
+B
+%%Note: Object
+217.37 363.60 270.29 396.50 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.20 0.10 0.00 0.00 k
+%%CURV 25
+217.37 394.42 m
+217.37 394.42 235.51 396.50 241.85 396.50 c
+248.18 396.50 265.82 395.14 265.82 395.14 c
+265.82 395.14 268.06 384.41 268.06 383.04 c
+268.06 381.74 269.64 377.64 269.64 377.64 c
+270.29 367.63 l
+270.29 367.63 252.50 365.54 247.25 365.54 c
+241.99 365.54 223.27 363.60 221.47 364.25 c
+219.67 364.90 219.67 372.82 219.67 372.82 c
+217.37 376.49 L
+217.37 394.42 L
+@c
+B
+%%Note: Object
+220.10 381.53 239.18 392.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 22
+220.68 391.25 m
+222.91 392.26 228.24 392.26 229.82 392.26 c
+231.34 392.26 238.25 392.54 238.25 392.54 c
+239.18 390.02 L
+239.18 385.63 L
+237.60 383.76 L
+237.60 383.76 234.22 383.76 231.05 383.11 c
+227.88 382.46 222.26 381.53 222.26 381.53 c
+222.26 381.53 220.10 382.46 220.10 384.05 C
+220.10 385.63 220.68 391.25 220.68 391.25 c
+@c
+B
+%%Note: Object
+245.16 383.40 263.30 392.83 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 21
+247.03 392.83 m
+259.85 392.54 l
+259.85 392.54 262.37 392.26 262.66 390.31 c
+262.94 388.44 263.30 385.92 263.30 385.92 c
+263.30 385.92 262.94 383.76 261.43 383.76 c
+259.85 383.76 247.61 383.40 247.61 383.40 c
+247.61 383.40 245.45 384.34 245.45 385.92 c
+245.45 387.50 245.16 390.31 245.16 390.31 C
+247.03 392.83 L
+@c
+B
+%%Note: Object
+247.03 367.70 264.82 374.33 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 16
+249.48 374.33 m
+252.65 374.33 262.01 374.33 262.01 374.33 c
+264.82 371.81 L
+264.82 369.29 L
+262.01 368.35 250.42 367.99 250.42 367.99 c
+250.42 367.99 247.32 367.70 247.32 369.29 c
+247.32 370.87 247.03 372.38 247.03 372.38 C
+249.48 374.33 L
+@c
+B
+%%Note: Object
+223.20 366.12 242.35 373.03 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 13
+238.54 373.03 m
+242.28 371.81 L
+242.28 368.64 l
+242.28 368.64 242.35 367.70 240.12 367.70 c
+237.96 367.70 225.72 366.12 225.72 366.12 c
+223.20 367.70 L
+223.20 370.51 L
+225.43 372.74 L
+238.54 373.03 L
+@c
+B
+%%Note: Object
+219.38 372.82 269.64 379.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.30 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 7
+219.38 372.82 m
+224.64 376.06 235.22 379.66 242.28 379.44 c
+249.26 379.22 265.97 378.29 269.64 374.47 C
+S
+%%Note: Object
+217.58 394.20 265.82 400.39 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.60 0.20 0.00 0.00 k
+%%CURV 18
+265.82 395.14 m
+259.92 399.46 l
+259.92 399.46 249.98 400.39 247.90 400.39 c
+245.88 400.39 235.94 400.39 235.94 400.39 c
+228.24 400.39 L
+222.34 397.87 L
+217.58 394.92 L
+218.95 394.20 l
+218.95 394.20 233.42 396.50 241.34 396.29 C
+249.26 396.07 265.61 395.14 265.82 395.14 C
+@c
+B
+%%Note: Object
+210.82 375.77 276.62 386.93 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 40
+267.84 385.85 m
+268.92 385.85 270.29 385.85 272.16 384.70 c
+273.96 383.54 273.53 383.54 275.11 381.96 c
+276.62 380.38 275.98 379.22 275.98 379.22 c
+275.98 379.22 274.82 378.58 273.02 378.58 c
+271.22 378.58 265.82 378.07 263.74 378.07 c
+261.72 378.07 257.40 378.07 253.80 378.07 c
+250.20 378.07 244.94 377.86 242.28 377.86 c
+239.54 377.86 233.42 377.14 230.47 376.92 c
+227.52 376.70 223.49 376.70 220.10 376.70 c
+216.72 376.70 217.80 375.77 215.35 377.14 c
+212.83 378.58 211.97 377.21 211.97 379.66 c
+211.97 382.18 210.82 382.46 213.34 384.70 c
+215.78 386.93 215.35 386.06 217.15 386.06 C
+S
+%%Note: Object
+211.82 372.17 212.11 380.09 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+211.97 380.09 m
+211.97 372.17 L
+S
+%%Note: Object
+216.79 364.25 217.08 375.77 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+216.94 375.77 m
+216.94 364.25 L
+S
+%%Note: Object
+244.30 361.94 245.45 377.86 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+244.30 377.86 m
+245.45 361.94 L
+S
+%%Note: Object
+274.61 367.63 275.26 379.01 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+275.26 379.01 m
+274.61 367.63 L
+S
+%%Note: Object
+214.92 379.01 216.00 385.85 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+214.92 385.85 m
+216.00 379.01 L
+S
+%%Note: Object
+268.56 380.38 268.85 385.56 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.23 2.23 0.00 @w
+%%CURV 2
+268.70 385.56 m
+268.70 380.38 L
+S
+%%Note: Object
+238.61 400.10 238.90 407.38 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 2
+238.61 400.10 m
+238.90 407.38 L
+S
+%%Note: Object
+250.70 399.46 250.99 403.78 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.00 K
+0 2.81 2.81 0.00 @w
+%%CURV 2
+250.85 399.46 m
+250.85 403.78 L
+S
+%%Note: Object
+248.11 404.21 253.15 409.25 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.90 0.90 0.10 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%ELLI 9.216 -9.216 270.000 270.000 0
+250.63 409.25 m
+252.00 409.25 253.15 408.17 253.15 406.73 c
+253.15 405.29 252.00 404.21 250.63 404.21 c
+249.26 404.21 248.11 405.29 248.11 406.73 c
+248.11 408.17 249.26 409.25 250.63 409.25 c
+@c
+B
+%%Note: Object
+431.14 313.70 439.99 342.43 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%RECT 14.976 -52.632 0.000
+431.14 342.43 m
+439.99 342.43 L
+439.99 313.70 L
+431.14 313.70 L
+431.14 342.43 L
+@c
+B
+%%Note: Object
+425.16 361.94 430.70 365.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+425.16 364.75 m
+430.49 365.62 L
+430.70 362.95 L
+425.16 361.94 L
+425.16 364.75 L
+@c
+B
+%%Note: Object
+430.85 342.36 439.56 345.53 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+439.56 342.36 m
+439.27 345.53 L
+430.85 345.53 L
+431.64 342.36 L
+439.56 342.36 L
+@c
+B
+%%Note: Object
+319.82 415.08 326.95 417.53 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 13.104 -4.536 0.000
+319.82 417.53 m
+326.95 417.53 L
+326.95 415.08 L
+319.82 415.08 L
+319.82 417.53 L
+@c
+B
+%%Note: Object
+316.30 390.38 318.10 405.22 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 3.168 -25.920 0.000
+316.37 405.22 m
+316.58 405.22 316.87 405.22 317.16 405.22 c
+317.52 405.22 317.81 405.22 318.10 405.22 C
+318.02 402.77 318.02 400.32 318.02 397.87 c
+318.02 395.35 318.02 392.90 318.10 390.38 C
+317.81 390.53 317.52 390.67 317.16 390.74 c
+316.94 390.82 316.58 391.03 316.37 391.03 C
+316.30 393.41 316.30 395.78 316.30 398.16 c
+316.30 400.46 316.37 402.91 316.37 405.22 C
+@c
+B
+%%Note: Object
+315.94 405.65 318.31 406.66 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 4.248 1.800 0.000
+315.94 405.65 m
+318.31 405.65 L
+318.31 406.66 L
+315.94 406.66 L
+315.94 405.65 L
+@c
+B
+%%Note: Object
+301.25 417.53 304.34 418.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.90 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 5.688 -2.520 0.000
+301.25 418.90 m
+304.34 418.90 L
+304.34 417.53 L
+301.25 417.53 L
+301.25 418.90 L
+@c
+B
+%%Note: Object
+259.85 382.39 313.78 406.80 @E
+ 0 O 0 @g
+1.00 0.30 0.00 0.00 k
+%%CURV 33
+259.85 403.63 m
+264.82 405.50 264.82 405.00 267.98 405.94 c
+271.08 406.80 271.58 405.50 274.25 405.50 c
+276.91 405.50 282.67 405.00 284.62 405.00 c
+289.58 405.00 L
+295.85 406.37 L
+297.22 395.50 L
+308.45 395.50 L
+313.78 392.33 l
+313.78 392.33 313.34 385.13 309.74 385.13 c
+306.22 385.13 301.61 382.39 298.08 385.13 c
+294.55 387.79 290.88 388.22 288.22 387.79 c
+285.55 387.36 280.94 386.93 277.42 386.93 c
+273.82 386.93 267.05 386.93 267.05 386.93 c
+265.25 395.93 L
+259.85 400.46 L
+259.85 403.63 L
+@c
+F
+%%Note: Object
+258.55 404.93 293.18 417.89 @E
+ 0 O 0 @g
+1.00 0.60 0.00 0.00 k
+%%CURV 33
+263.88 413.93 m
+270.22 416.45 273.82 416.23 277.85 416.66 c
+281.95 417.10 286.49 417.89 287.35 417.60 c
+292.75 415.80 L
+290.02 412.63 l
+290.02 412.63 292.25 406.30 290.02 408.10 c
+287.78 409.90 284.18 409.90 281.02 410.33 c
+277.85 410.76 272.45 408.53 275.18 408.53 c
+277.85 408.53 285.98 408.53 288.65 407.23 c
+293.18 404.93 l
+293.18 404.93 266.18 404.93 262.51 404.93 c
+258.91 404.93 258.55 409.03 260.78 409.03 c
+263.02 409.03 269.78 411.70 269.78 411.70 c
+261.65 413.06 L
+263.88 413.93 L
+@c
+F
+%%Note: Object
+194.98 412.63 208.94 441.07 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 18
+199.94 441.07 m
+199.94 441.07 199.08 435.60 199.94 431.57 c
+200.88 427.54 199.94 426.17 201.31 423.43 c
+202.68 420.77 204.48 417.17 204.48 417.17 c
+208.94 414.50 L
+206.71 412.63 L
+201.74 412.63 L
+197.21 416.30 L
+195.91 427.03 L
+195.41 436.10 L
+194.98 440.64 L
+199.94 441.07 L
+@c
+F
+%%Note: Object
+185.04 407.23 199.08 441.07 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 24
+199.08 408.17 m
+199.08 408.17 196.27 411.70 195.41 414.94 c
+194.54 418.10 192.74 424.37 192.74 427.97 c
+192.74 431.57 192.74 441.07 192.74 441.07 c
+185.54 437.04 l
+185.54 437.04 185.04 432.50 185.54 429.34 c
+185.98 426.17 186.84 421.20 187.34 418.10 c
+187.78 414.94 188.21 413.57 188.21 410.83 c
+188.21 408.17 193.68 407.23 193.68 407.23 C
+199.08 408.17 L
+@c
+F
+%%Note: Object
+167.98 398.23 181.94 436.61 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 24
+181.94 400.46 m
+181.94 400.46 181.51 409.46 181.51 412.20 c
+181.51 414.94 181.51 426.17 181.51 426.17 c
+181.08 433.37 L
+176.98 432.07 L
+169.34 436.61 l
+169.34 436.61 169.34 426.60 169.34 423.94 c
+169.34 421.20 169.78 414.50 169.34 409.97 c
+168.91 405.43 169.78 405.00 168.91 401.83 c
+167.98 398.66 175.18 399.53 175.18 399.53 c
+180.14 398.23 L
+181.94 400.46 L
+@c
+F
+%%Note: Object
+155.38 390.53 169.34 440.64 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 16
+155.38 391.39 m
+169.34 390.53 l
+169.34 390.53 168.84 393.70 167.54 396.36 c
+166.18 399.10 161.64 399.96 160.78 405.86 c
+159.84 411.77 158.54 415.80 158.54 420.77 c
+158.54 425.74 158.11 440.21 158.11 440.21 c
+155.38 440.64 L
+155.38 391.39 L
+@c
+F
+%%Note: Object
+371.45 343.94 421.42 376.92 @E
+ 0 O 0 @g
+1.00 0.25 0.00 0.00 k
+%%CURV 29
+374.62 376.92 m
+371.45 371.52 L
+377.78 364.68 l
+377.78 364.68 384.98 360.22 388.15 359.28 c
+391.32 358.34 398.52 356.54 398.52 356.54 c
+411.12 356.54 L
+415.66 357.05 L
+421.42 355.68 L
+420.55 349.34 L
+413.78 345.74 l
+413.78 345.74 408.46 343.94 402.98 345.74 c
+397.58 347.54 394.92 347.11 390.38 347.98 c
+385.85 348.91 376.42 350.71 375.98 353.45 c
+375.55 356.11 373.32 362.02 373.32 362.02 c
+371.45 367.42 L
+372.38 375.55 L
+374.62 376.92 L
+@c
+F
+%%Note: Object
+372.82 354.74 420.98 376.92 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 17
+373.75 376.92 m
+389.02 376.92 l
+389.02 376.92 392.18 376.92 397.15 375.12 c
+402.12 373.32 411.12 369.22 411.12 369.22 c
+416.09 364.25 L
+420.98 361.58 L
+420.98 355.68 L
+414.72 357.05 L
+400.32 354.74 L
+385.42 359.78 L
+376.42 365.18 L
+372.82 370.15 L
+373.75 376.92 L
+@c
+F
+%%Note: Object
+377.78 359.28 410.18 374.69 @E
+ 0 O 0 @g
+0.00 0.10 1.00 0.00 k
+%%CURV 18
+377.78 368.78 m
+381.38 373.75 L
+385.42 374.69 l
+385.42 374.69 389.88 374.69 392.62 374.26 c
+395.35 373.75 399.38 372.38 402.12 370.58 c
+404.78 368.78 410.18 365.62 410.18 365.62 c
+408.89 361.58 L
+403.42 359.28 L
+397.58 361.08 L
+391.75 366.05 L
+387.65 367.92 L
+377.78 368.78 L
+@c
+F
+%%Note: Object
+375.34 355.25 405.29 369.22 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 14
+375.34 367.42 m
+378.65 363.38 l
+378.65 363.38 383.62 360.65 386.35 359.78 c
+389.02 358.85 394.56 357.62 394.92 357.48 c
+400.75 355.25 L
+405.29 361.08 L
+397.58 364.25 L
+390.02 367.42 L
+383.18 369.22 L
+375.34 367.42 L
+@c
+F
+%%Note: Object
+372.38 351.65 421.42 376.06 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+%%CURV 32
+373.32 376.06 m
+373.32 371.02 L
+378.22 364.25 l
+378.22 364.25 385.92 360.22 389.02 358.85 c
+392.18 357.48 397.15 356.11 399.89 356.11 c
+402.55 356.11 407.09 356.11 409.75 356.11 c
+412.42 356.11 416.02 357.05 418.32 356.11 c
+420.55 355.25 421.42 353.45 421.42 353.45 c
+416.09 351.65 l
+416.09 351.65 409.75 351.65 405.65 351.65 c
+401.62 351.65 394.92 352.51 391.32 353.45 c
+387.65 354.31 380.88 356.98 377.78 360.22 c
+374.62 363.38 372.38 366.98 372.38 366.98 C
+373.32 376.06 L
+@c
+F
+%%Note: Object
+420.34 314.42 426.17 367.20 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 7
+425.45 365.90 m
+425.23 314.42 L
+420.34 314.42 L
+420.41 367.20 L
+420.41 367.20 426.17 366.19 425.45 365.90 C
+@c
+B
+%%Note: Object
+420.26 361.94 425.16 367.13 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+425.16 364.75 m
+420.26 367.13 L
+420.26 363.89 L
+425.16 361.94 L
+425.16 364.75 L
+@c
+B
+%%Note: Object
+257.62 338.47 349.99 364.68 @E
+ 0 O 0 @g
+0.40 0.15 0.00 0.00 k
+%%CURV 47
+275.98 361.08 m
+283.82 361.51 292.90 361.51 297.36 361.51 c
+301.75 361.51 311.69 364.68 317.52 362.02 c
+323.42 359.28 322.99 357.05 328.82 356.54 c
+334.66 356.11 343.66 352.51 343.66 352.51 c
+343.66 352.51 344.52 348.84 347.26 347.04 c
+349.99 345.24 339.62 342.50 339.62 342.50 c
+327.89 348.84 l
+327.89 348.84 310.32 353.88 306.72 353.88 c
+303.12 353.88 288.79 352.94 288.79 352.94 c
+288.79 352.94 284.69 347.47 294.19 347.04 c
+303.55 346.61 311.69 343.94 311.69 343.94 c
+311.69 343.94 310.32 338.47 306.72 338.47 c
+303.12 338.47 283.82 339.41 279.36 339.41 c
+274.82 339.41 257.62 341.21 262.51 343.94 c
+267.48 346.61 270.79 354.31 270.79 354.31 c
+270.79 354.31 272.59 359.71 275.98 361.08 C
+@c
+F
+%%Note: Object
+420.12 364.46 430.70 367.99 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+420.12 367.13 m
+425.30 364.46 L
+430.70 365.62 L
+427.68 367.99 L
+420.12 367.13 L
+@c
+B
+%%Note: Object
+330.19 468.07 343.73 472.75 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 5
+343.73 472.75 m
+339.05 468.07 L
+330.19 468.07 L
+335.09 472.75 L
+343.73 472.75 L
+@c
+B
+%%Note: Object
+344.38 416.16 349.06 436.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 20
+345.24 434.45 m
+345.24 431.71 345.24 428.54 345.24 426.89 c
+345.24 425.16 345.60 422.35 345.24 420.91 c
+344.81 419.54 344.38 418.46 344.38 418.46 c
+344.59 416.16 L
+347.98 417.02 L
+348.41 419.54 l
+348.41 419.54 348.41 424.94 348.41 426.02 c
+348.41 427.03 349.06 436.54 349.06 436.54 C
+345.24 434.45 L
+@c
+B
+%%Note: Object
+365.40 411.55 370.58 433.37 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 29
+370.58 411.55 m
+370.58 413.21 370.15 412.34 370.01 415.73 c
+369.79 419.11 369.14 420.12 369.14 423.22 c
+369.14 426.46 369.14 429.98 369.14 431.06 c
+369.14 432.14 369.14 433.37 369.14 433.37 c
+366.19 432.36 l
+366.19 432.36 366.19 431.71 366.19 429.98 c
+366.19 428.33 366.19 426.17 366.19 424.30 c
+366.19 422.42 366.19 422.50 366.19 419.98 c
+366.19 417.46 366.05 414.94 366.05 414.94 c
+365.40 412.34 L
+367.27 411.70 L
+370.58 411.55 L
+@c
+B
+%%Note: Object
+336.67 421.78 338.54 429.19 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 11
+338.54 421.78 m
+338.54 427.46 L
+337.46 429.19 L
+336.67 427.46 l
+336.67 427.46 336.82 426.24 336.82 425.16 c
+336.82 424.08 336.82 422.64 336.82 422.64 C
+338.54 421.78 L
+@c
+B
+%%Note: Object
+330.98 422.64 332.42 430.85 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 11
+332.28 430.85 m
+332.28 430.85 332.42 428.76 332.42 427.68 c
+332.42 426.60 332.42 424.30 332.42 424.30 c
+330.98 422.64 L
+330.98 426.46 L
+330.98 429.55 L
+332.28 430.85 L
+@c
+B
+%%Note: Object
+333.29 421.99 334.73 431.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 16
+334.51 422.21 m
+334.51 422.21 334.30 422.50 334.51 425.16 c
+334.73 427.90 334.73 430.85 334.73 430.85 c
+333.50 431.06 l
+333.50 431.06 333.50 428.90 333.50 427.90 c
+333.50 426.89 333.29 423.86 333.29 423.86 c
+333.50 421.99 L
+334.51 422.21 L
+@c
+B
+@rs
+@sv
+%%Note: Object
+336.24 446.90 349.06 464.98 @E
+ 0 O 0 @g
+0.50 0.00 0.50 0.50 k
+%%CURV 23
+346.46 463.97 m
+339.55 463.54 336.60 464.98 336.38 461.88 c
+336.24 458.71 338.54 463.97 339.34 458.28 c
+340.20 452.59 340.85 451.51 340.85 449.21 c
+340.85 446.90 342.86 446.90 343.30 449.42 c
+343.73 451.94 344.02 453.89 346.10 455.11 c
+348.19 456.41 349.06 459.94 345.46 459.50 c
+341.86 459.14 344.59 462.89 344.59 462.89 C
+346.46 463.97 L
+@c
+F
+%%Note: Object
+375.77 458.93 381.17 476.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 5
+375.77 472.61 m
+381.17 476.06 L
+380.52 459.65 L
+376.42 458.93 L
+375.77 472.61 L
+@c
+S
+%%Note: Object
+359.28 462.10 361.80 468.43 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 3
+361.80 468.43 m
+359.28 466.92 L
+359.28 462.10 L
+S
+%%Note: Object
+358.63 430.63 363.24 438.48 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+358.63 438.48 m
+358.63 431.28 L
+363.24 430.63 L
+S
+%%Note: Object
+378.00 461.88 378.14 473.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+378.00 473.90 m
+378.14 461.88 L
+S
+%%Note: Object
+376.06 467.78 380.88 470.09 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+376.06 467.78 m
+380.88 470.09 L
+S
+%%Note: Object
+369.79 458.71 370.01 464.62 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+370.01 464.62 m
+369.79 458.71 L
+S
+%%Note: Object
+377.50 437.40 382.18 443.52 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+377.50 443.52 m
+381.96 443.52 L
+382.18 437.40 L
+S
+%%Note: Object
+376.70 428.11 382.39 431.28 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 3
+376.70 431.28 m
+376.70 428.76 L
+382.39 428.11 L
+S
+%%Note: Object
+376.27 436.18 381.53 436.32 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 1.44 1.44 0.00 @w
+%%CURV 2
+376.27 436.32 m
+381.53 436.18 L
+S
+%%Note: Object
+390.82 426.17 395.35 439.70 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+394.42 439.27 m
+390.82 439.70 L
+390.82 426.17 L
+395.35 426.17 L
+394.42 439.27 L
+@c
+B
+%%Note: Object
+396.65 424.80 402.55 439.70 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 6
+400.75 439.70 m
+396.65 439.70 L
+397.58 425.23 L
+402.12 424.80 L
+402.55 432.07 L
+400.75 439.70 L
+@c
+B
+%%Note: Object
+412.27 424.66 417.24 436.82 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 6
+412.70 432.79 m
+412.70 424.66 L
+416.74 424.66 L
+417.24 436.82 L
+412.27 435.96 L
+412.70 432.79 L
+@c
+B
+%%Note: Object
+418.82 423.22 424.73 439.49 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.22 0.22 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+423.36 439.49 m
+418.82 439.49 L
+419.33 423.22 L
+424.73 423.22 L
+423.36 439.49 L
+@c
+B
+%%Note: Object
+427.32 411.26 439.92 469.58 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.20 0.20 0.00 k
+%%CURV 5
+427.32 414.50 m
+439.92 411.26 L
+439.92 469.58 L
+427.32 458.28 L
+427.32 414.50 L
+@c
+B
+%%Note: Object
+430.92 420.77 439.92 438.41 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 5
+431.86 438.41 m
+430.92 422.57 L
+439.92 420.77 L
+439.49 436.61 L
+431.86 438.41 L
+@c
+B
+%%Note: Object
+432.29 436.61 439.92 445.18 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.10 k
+%%CURV 5
+432.29 438.84 m
+439.49 436.61 L
+439.92 444.24 L
+432.29 445.18 L
+432.29 438.84 L
+@c
+B
+%%Note: Object
+391.32 434.16 394.42 434.45 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+391.32 434.30 m
+394.42 434.30 L
+S
+%%Note: Object
+397.15 433.87 402.12 434.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+397.15 434.30 m
+402.12 433.87 L
+S
+%%Note: Object
+413.35 432.94 416.52 433.37 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+413.35 433.37 m
+416.52 432.94 L
+S
+%%Note: Object
+419.69 433.87 423.22 434.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+419.69 434.30 m
+423.22 433.87 L
+S
+%%Note: Object
+320.04 388.58 326.74 414.94 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 12.168 -43.128 0.000
+320.04 414.86 m
+321.12 414.94 322.20 414.94 323.35 414.94 c
+324.43 414.94 325.51 414.94 326.74 414.86 C
+326.66 410.54 326.66 406.15 326.66 401.76 c
+326.66 397.37 326.66 392.98 326.74 388.58 C
+325.51 389.09 324.43 389.59 323.35 390.02 c
+322.27 390.46 321.12 390.96 320.04 391.32 C
+320.04 395.28 320.04 399.17 320.04 403.13 c
+320.04 407.02 320.04 410.98 320.04 414.86 C
+@c
+B
+%%Note: Object
+157.39 457.70 189.43 508.32 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 31
+179.21 464.54 m
+189.43 470.66 187.34 474.05 186.70 482.33 c
+186.05 490.54 183.31 496.01 184.68 502.13 c
+186.05 508.32 179.93 500.04 177.84 494.57 c
+175.82 489.17 167.62 484.34 167.62 484.34 c
+167.62 484.34 159.48 480.89 162.86 492.55 c
+166.25 504.22 159.48 502.78 159.48 498.02 c
+159.48 493.27 157.39 483.62 159.48 477.50 c
+161.50 471.38 166.32 470.66 166.97 474.05 c
+167.62 477.50 171.07 472.68 171.07 465.19 C
+171.07 457.70 179.21 464.54 179.21 464.54 c
+@c
+F
+%%Note: Object
+188.06 447.41 213.26 491.18 @E
+ 0 O 0 @g
+0.60 0.00 0.60 0.40 k
+%%CURV 20
+192.82 456.98 m
+198.29 463.18 198.29 468.00 198.29 472.75 c
+198.29 477.50 197.57 491.18 200.30 487.73 c
+203.04 484.34 207.79 476.86 207.79 471.38 c
+207.79 465.91 200.38 461.09 205.13 456.98 c
+209.88 452.88 213.26 449.50 204.41 449.50 c
+195.55 449.50 188.06 447.41 188.06 447.41 C
+192.82 456.98 L
+@c
+F
+%%Note: Object
+405.14 442.66 423.58 483.70 @E
+ 0 O 0 @g
+0.80 0.00 0.80 0.20 k
+%%CURV 21
+408.60 450.86 m
+408.60 458.42 405.14 461.16 408.60 468.00 c
+411.98 474.84 415.44 483.70 415.44 483.70 c
+415.44 483.70 416.74 483.70 416.74 478.94 c
+416.74 474.12 422.93 469.30 422.93 469.30 c
+423.58 462.46 L
+416.09 454.97 l
+416.09 454.97 416.09 452.23 416.09 447.48 C
+416.09 442.66 408.60 450.86 408.60 450.86 c
+@c
+F
+%%Note: Object
+201.67 479.52 360.29 518.54 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.05 k
+%%CURV 43
+234.36 510.34 m
+271.80 510.34 252.07 515.81 277.92 515.81 c
+303.77 515.81 304.42 516.53 316.66 513.79 c
+328.97 511.06 328.25 508.25 339.84 506.23 c
+351.43 504.22 360.29 502.78 358.92 498.02 c
+357.55 493.27 334.44 487.15 328.97 489.82 c
+323.50 492.55 309.17 497.38 304.42 497.38 c
+299.66 497.38 264.31 505.58 264.31 505.58 c
+264.31 505.58 256.82 501.41 269.14 498.74 c
+281.38 496.01 308.52 491.90 296.28 485.71 c
+284.04 479.52 269.78 489.17 260.93 489.17 c
+252.07 489.17 239.18 489.82 232.99 492.55 c
+226.87 495.29 215.28 503.50 208.51 506.95 c
+201.67 510.34 203.69 518.54 213.26 517.18 C
+222.77 515.81 234.36 510.34 234.36 510.34 c
+@c
+F
+%%Note: Object
+166.25 331.20 199.66 372.89 @E
+ 0 O 0 @g
+0.00 0.60 1.00 0.00 k
+%%CURV 20
+168.34 353.81 m
+175.82 358.56 186.70 366.05 188.78 369.50 c
+190.80 372.89 191.45 362.66 191.45 362.66 c
+199.66 370.15 L
+199.66 360.65 l
+199.66 360.65 196.20 355.82 193.54 351.00 c
+190.80 346.25 176.47 331.20 176.47 331.20 c
+173.81 338.04 L
+179.21 347.62 L
+177.84 354.46 L
+166.25 348.26 L
+168.34 353.81 L
+@c
+F
+%%Note: Object
+409.25 405.72 432.43 409.18 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+411.98 409.18 m
+432.43 407.81 L
+418.18 405.72 L
+409.25 405.72 L
+411.98 409.18 L
+@c
+F
+%%Note: Object
+369.14 410.54 384.77 415.37 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 10
+369.14 415.37 m
+369.14 415.37 371.16 413.28 374.54 413.28 c
+378.00 413.28 384.77 412.56 384.77 412.56 c
+381.31 411.19 L
+369.79 410.54 L
+369.14 415.37 L
+@c
+F
+%%Note: Object
+347.33 413.93 358.92 417.38 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.60 k
+%%CURV 5
+347.98 417.38 m
+358.92 417.38 L
+357.55 413.93 L
+347.33 415.37 L
+347.98 417.38 L
+@c
+F
+%%Note: Object
+313.06 313.70 420.12 331.70 @E
+ 0 O 0 @g
+1.00 0.50 0.00 0.00 k
+%%CURV 26
+420.12 324.86 m
+414.65 328.25 405.79 331.70 400.32 331.70 c
+394.85 331.70 393.48 330.34 384.62 330.34 c
+375.70 330.34 366.91 328.97 360.07 330.34 c
+353.23 331.70 345.74 329.62 340.92 329.62 c
+336.17 329.62 337.54 324.14 332.06 323.50 c
+326.59 322.78 325.94 318.67 321.84 318.67 c
+317.74 318.67 313.06 313.85 322.49 313.85 c
+331.92 313.85 420.12 313.70 420.12 314.42 C
+420.12 324.86 L
+@c
+F
+%%Note: Object
+155.02 313.85 440.28 528.34 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%RECT 522.576 -392.976 0.000
+155.02 528.34 m
+440.28 528.34 L
+440.28 313.85 L
+155.02 313.85 L
+155.02 528.34 L
+@c
+S
+%%Note: Object
+431.42 344.66 440.28 348.84 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%CURV 5
+440.28 344.66 m
+434.81 348.84 L
+431.42 348.84 L
+431.42 344.66 L
+440.28 344.66 L
+@c
+B
+%%Note: Object
+223.27 498.24 235.58 505.73 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+223.27 505.73 m
+228.74 503.71 229.46 498.89 229.46 498.89 c
+235.58 498.24 L
+S
+%%Note: Object
+216.14 489.60 226.44 493.27 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+216.14 491.62 m
+221.54 489.60 223.70 489.89 223.70 489.89 c
+226.44 493.27 L
+S
+%%Note: Object
+206.35 502.27 215.21 509.11 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 2.81 2.81 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.70 k
+%%CURV 5
+206.35 509.11 m
+211.82 507.02 212.47 502.27 212.47 502.27 c
+215.21 505.66 L
+S
+%%Note: Object
+327.17 341.50 329.18 343.73 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+327.17 343.73 m
+327.17 342.72 327.38 341.50 327.38 341.50 c
+329.18 342.07 L
+S
+%%Note: Object
+322.13 342.36 329.98 347.40 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+322.99 345.74 m
+324.50 347.40 325.51 346.18 326.88 345.53 c
+328.25 344.88 329.98 345.31 329.11 344.23 c
+328.32 343.22 322.56 342.36 322.56 342.65 c
+322.63 343.94 L
+322.13 344.66 L
+322.99 345.74 L
+@c
+F
+%%Note: Object
+327.24 345.31 329.33 347.54 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+327.24 345.31 m
+327.24 346.32 327.46 347.54 327.46 347.54 c
+329.33 346.97 L
+S
+%%Note: Object
+338.33 335.16 340.42 337.39 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+338.33 337.39 m
+338.33 336.38 338.54 335.16 338.54 335.16 c
+340.42 335.81 L
+S
+%%Note: Object
+333.29 336.02 341.14 341.06 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+334.22 339.41 m
+335.74 341.06 336.67 339.84 338.04 339.19 c
+339.41 338.54 341.14 338.98 340.34 337.97 c
+339.55 336.89 333.72 336.02 333.72 336.31 c
+333.86 337.61 L
+333.29 338.40 L
+334.22 339.41 L
+@c
+F
+%%Note: Object
+338.47 338.98 340.56 341.21 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+338.47 338.98 m
+338.47 339.98 338.69 341.21 338.69 341.21 c
+340.56 340.63 L
+S
+%%Note: Object
+349.70 345.53 351.79 347.83 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+349.70 347.83 m
+349.70 346.75 349.92 345.53 349.92 345.53 c
+351.79 346.18 L
+S
+%%Note: Object
+344.66 346.46 352.51 351.50 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+345.60 349.78 m
+347.04 351.50 348.05 350.28 349.42 349.63 c
+350.78 348.91 352.51 349.34 351.72 348.34 c
+350.86 347.33 345.10 346.46 345.10 346.68 c
+345.24 348.05 L
+344.66 348.77 L
+345.60 349.78 L
+@c
+F
+%%Note: Object
+349.85 349.34 351.94 351.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+349.85 349.34 m
+349.85 350.42 350.06 351.65 350.06 351.65 c
+351.94 351.00 L
+S
+%%Note: Object
+352.44 336.96 354.53 339.26 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+352.44 339.26 m
+352.44 338.18 352.66 336.96 352.66 336.96 c
+354.53 337.61 L
+S
+%%Note: Object
+347.40 337.90 355.25 342.94 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+348.34 341.21 m
+349.85 342.94 350.78 341.71 352.15 341.06 c
+353.52 340.34 355.25 340.78 354.46 339.77 c
+353.66 338.76 347.83 337.90 347.83 338.11 c
+347.98 339.48 L
+347.40 340.20 L
+348.34 341.21 L
+@c
+F
+%%Note: Object
+352.58 340.78 354.67 343.08 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+352.58 340.78 m
+352.58 341.86 352.80 343.08 352.80 343.08 c
+354.67 342.43 L
+S
+%%Note: Object
+311.47 331.78 313.56 334.08 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 2.23 2.23 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+%%CURV 5
+311.47 334.08 m
+311.47 333.00 311.76 331.78 311.76 331.78 c
+313.56 332.42 L
+S
+%%Note: Object
+306.43 332.71 314.35 337.75 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.80 k
+%%CURV 13
+307.37 336.02 m
+308.88 337.75 309.82 336.53 311.18 335.88 c
+312.62 335.16 314.35 335.59 313.49 334.58 c
+312.70 333.58 306.86 332.71 306.86 332.93 c
+307.01 334.30 L
+306.43 335.02 L
+307.37 336.02 L
+@c
+F
+%%Note: Object
+311.62 335.59 313.70 337.90 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.23 2.23 0.00 @w
+%%CURV 5
+311.62 335.59 m
+311.62 336.67 311.83 337.90 311.83 337.90 c
+313.70 337.25 L
+S
+%%Note: Object
+268.70 422.71 268.99 426.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+268.85 426.60 m
+268.85 422.71 L
+S
+%%Note: Object
+278.50 422.28 278.78 426.60 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+278.64 426.60 m
+278.64 422.28 L
+S
+%%Note: Object
+288.86 422.93 289.15 426.46 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+289.01 426.46 m
+289.01 422.93 L
+S
+%%Note: Object
+297.94 423.07 298.22 426.46 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.30 0.60 0.40 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+298.08 426.46 m
+298.08 423.07 L
+S
+%%Note: Object
+345.38 380.38 373.39 402.98 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 9
+345.38 402.98 m
+366.55 396.79 L
+366.55 391.32 L
+373.39 385.13 L
+372.02 380.38 L
+358.34 387.22 L
+359.06 393.34 L
+346.10 398.88 L
+345.38 402.98 L
+@c
+F
+%%Note: Object
+402.70 378.29 429.98 389.95 @E
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%CURV 9
+429.98 386.50 m
+417.02 389.95 L
+412.27 384.48 L
+404.06 385.85 L
+402.70 380.38 L
+415.01 378.29 L
+421.13 384.48 L
+429.98 381.10 L
+429.98 386.50 L
+@c
+F
+%%Note: Object
+223.27 388.58 229.46 389.95 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+223.27 388.58 m
+229.46 389.95 L
+S
+%%Note: Object
+252.86 389.52 259.92 390.67 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+252.86 390.67 m
+259.92 389.52 L
+S
+%%Note: Object
+226.94 387.14 230.40 387.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.50 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+226.94 387.14 m
+230.40 387.65 L
+S
+%%Note: Object
+255.17 387.50 259.63 388.44 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.60 K
+0 0.86 0.86 0.00 @w
+%%CURV 2
+255.17 388.44 m
+259.63 387.50 L
+S
+%%Note: Object
+168.19 375.34 171.43 381.74 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 5.904 11.736 1.584
+169.06 375.34 m
+170.57 375.34 l
+171.07 375.34 171.43 375.70 171.43 376.20 c
+171.43 380.88 l
+171.43 381.38 171.07 381.74 170.57 381.74 c
+169.06 381.74 l
+168.55 381.74 168.19 381.38 168.19 380.88 c
+168.19 376.20 l
+168.19 375.70 168.55 375.34 169.06 375.34 c
+@c
+B
+%%Note: Object
+166.32 380.02 173.02 383.11 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+167.33 383.11 m
+172.01 383.11 l
+172.58 383.11 173.02 382.68 173.02 382.18 c
+173.02 380.95 l
+173.02 380.45 172.58 380.02 172.01 380.02 c
+167.33 380.02 l
+166.75 380.02 166.32 380.45 166.32 380.95 c
+166.32 382.18 l
+166.32 382.68 166.75 383.11 167.33 383.11 c
+@c
+B
+%%Note: Object
+215.86 362.45 217.73 366.26 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 5.904 11.736 1.584
+216.36 362.45 m
+217.22 362.45 l
+217.51 362.45 217.73 362.66 217.73 362.95 c
+217.73 365.76 l
+217.73 366.05 217.51 366.26 217.22 366.26 c
+216.36 366.26 l
+216.00 366.26 215.86 366.05 215.86 365.76 c
+215.86 362.95 l
+215.86 362.66 216.00 362.45 216.36 362.45 c
+@c
+B
+%%Note: Object
+214.70 365.18 218.66 367.06 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+215.35 367.06 m
+218.09 367.06 l
+218.38 367.06 218.66 366.84 218.66 366.48 c
+218.66 365.83 l
+218.66 365.47 218.38 365.18 218.09 365.18 c
+215.35 365.18 l
+214.99 365.18 214.70 365.47 214.70 365.83 c
+214.70 366.48 l
+214.70 366.84 214.99 367.06 215.35 367.06 c
+@c
+B
+%%Note: Object
+272.23 364.46 274.10 368.21 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 5.904 11.736 1.584
+272.74 364.46 m
+273.60 364.46 l
+273.89 364.46 274.10 364.61 274.10 364.97 c
+274.10 367.70 l
+274.10 367.99 273.89 368.21 273.60 368.21 c
+272.74 368.21 l
+272.38 368.21 272.23 367.99 272.23 367.70 c
+272.23 364.97 l
+272.23 364.61 272.38 364.46 272.74 364.46 c
+@c
+B
+%%Note: Object
+271.08 367.20 274.97 369.00 @E
+0 J 0 j [] 0 d 0 R 0 @G
+1.00 0.80 0.00 0.00 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.10 0.05 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+271.73 369.00 m
+274.46 369.00 l
+274.75 369.00 274.97 368.78 274.97 368.42 c
+274.97 367.78 l
+274.97 367.49 274.75 367.20 274.46 367.20 c
+271.73 367.20 l
+271.37 367.20 271.08 367.49 271.08 367.78 c
+271.08 368.42 l
+271.08 368.78 271.37 369.00 271.73 369.00 c
+@c
+B
+%%Note: Object
+205.13 403.34 207.36 407.88 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 0.86 0.86 0.00 @w
+ 0 O 0 @g
+0.00 0.30 0.60 0.40 k
+%%RECT 5.904 11.736 1.584
+205.70 403.34 m
+206.78 403.34 l
+207.14 403.34 207.36 403.63 207.36 403.99 c
+207.36 407.30 l
+207.36 407.66 207.14 407.88 206.78 407.88 c
+205.70 407.88 l
+205.34 407.88 205.13 407.66 205.13 407.30 c
+205.13 403.99 l
+205.13 403.63 205.34 403.34 205.70 403.34 c
+@c
+B
+%%Note: Object
+203.83 406.66 208.51 408.89 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.70 K
+0 1.44 1.44 0.00 @w
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+%%RECT 12.168 -5.760 1.800
+204.48 408.89 m
+207.79 408.89 l
+208.22 408.89 208.51 408.60 208.51 408.24 c
+208.51 407.38 l
+208.51 406.94 208.22 406.66 207.79 406.66 c
+204.48 406.66 l
+204.12 406.66 203.83 406.94 203.83 407.38 c
+203.83 408.24 l
+203.83 408.60 204.12 408.89 204.48 408.89 c
+@c
+B
+%%Note: Object
+207.00 380.88 217.58 405.65 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 1.44 1.44 0.00 @w
+%%CURV 7
+207.00 405.65 m
+207.00 401.83 209.30 393.41 211.54 389.88 c
+213.77 386.35 217.58 380.88 217.58 380.88 C
+S
+%%Note: Object
+169.85 362.52 217.15 379.30 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 0.80 K
+0 2.02 2.02 0.00 @w
+%%CURV 7
+217.15 365.26 m
+217.15 365.26 211.03 362.52 195.98 365.98 c
+180.94 369.36 170.86 379.01 169.85 379.30 C
+S
+%%Note: Object
+241.70 426.89 248.54 436.46 @E
+ 0 O 0 @g
+0.00 0.90 0.90 0.10 k
+%%RECT 12.528 -17.568 0.000
+241.70 436.46 m
+248.54 436.46 L
+248.54 426.89 L
+241.70 426.89 L
+241.70 436.46 L
+@c
+F
+@rs
+@rs
+%%Trailer
+ end
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp
new file mode 100644
index 00000000000..be9ad9b2884
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.mp
@@ -0,0 +1,1282 @@
+% Converted from PostScript(TM) to MetaPost by pstoedit
+% MetaPost backend contributed by Scott Pakin <pakin@uiuc.edu>
+% pstoedit is Copyright (C) 1993 - 1999 Wolfgang Glunz <wglunz@geocities.com>
+
+% Generate structured PostScript
+prologues := 1;
+
+% Display a given string with its *baseline* at a given location
+% and with a given rotation angle
+vardef showtext(expr origin)(expr angle)(expr string) =
+ draw string infont defaultfont scaled defaultscale
+ rotated angle shifted origin;
+enddef;
+
+beginfig(1);
+drawoptions (withcolor (0.8,0.9,1));
+linecap := butt;
+linejoin := mitered;
+fill (34.0598,214.47)--(286.57,214.47)--(285.2,72.9199)
+ --(38.1699,83.8599)--(34.0598,214.47)--cycle;
+drawoptions (withcolor (0.95,0.95,0.95));
+fill (62,152.91)..controls (62,152.91) and (74.24,150.18)..(77.6199,152.91)
+ ..controls (81.0798,155.65) and (98.0698,152.91)..(98.0698,152.91)
+ ..controls (98.0698,152.91) and (106.21,148.81)..(111.68,148.81)
+ ..controls (117.15,148.81) and (130.76,147.37)..(130.76,147.37)
+ --(134.86,140.53)..controls (134.86,140.53) and (130.11,139.88)..(123.92,139.88)
+ ..controls (117.8,139.88) and (98.72,139.23)..(98.72,139.23)
+ --(82.3799,139.23)--(72.1499,145.35)--(64.0198,147.37)
+ --(62,152.91)--cycle;
+drawoptions (withcolor (0.9,0.9,0.9));
+fill (202.11,112.52)--(200.82,126.85)--(184.47,117.99)
+ --(170.86,116.62)--(150.42,117.34)--(141.63,114.61)
+ --(104.19,115.26)--(87.1299,115.26)--(69.49,113.17)
+ --(74.96,107.77)--(106.21,108.42)--(140.98,108.42)
+ --(147.03,110.5)--(165.39,110.5)--(164.74,104.38)
+ --(172.88,103.74)--(285.92,79.0398)--(285.2,98.9099)
+ --(271.59,100.93)--(202.11,112.52)--cycle;
+drawoptions (withcolor (1,0.4,0.4));
+fill (285.92,193.23)--(259.78,193.23)--(259.78,188.7)
+ --(277.35,148.88)--(285.92,155.72)--(285.92,193.23)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (285.92,193.23)--(259.78,193.23)--(259.78,188.7)
+ --(277.35,148.88)--(285.92,155.72)--(285.92,193.23);
+drawoptions (withcolor (1,0.9,0.9));
+pickup pencircle scaled 0bp;
+fill (231.85,165.66)--(235.95,169.69)--(246.75,170.62)
+ --(273.32,149.82)--(272.89,101)--(235.02,107.34)
+ --(231.85,165.66)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (231.85,165.66)--(235.95,169.69)--(246.75,170.62)
+ --(273.32,149.82)--(272.89,101)--(235.02,107.34)
+ --(231.85,165.66);
+drawoptions (withcolor (0,0.5,0));
+pickup pencircle scaled 0bp;
+fill (178.28,133.26)..controls (178.28,133.26) and (175.98,132.39)..(175.11,130.09)
+ ..controls (174.25,127.78) and (172.38,125.62)..(172.38,125.62)
+ ..controls (172.38,125.62) and (170.86,124.47)..(170,121.88)
+ ..controls (169.21,119.36) and (168.99,119.14)..(168.99,118.06)
+ ..controls (168.99,116.98) and (169.21,116.19)..(170.43,116.41)
+ ..controls (171.73,116.55) and (172.81,117.63)..(172.81,117.63)
+ --(175.33,116.84)..controls (175.33,116.84) and (175.9,116.62)..(177.42,117.85)
+ ..controls (178.86,119.14) and (179.29,121.52)..(179.72,120.22)
+ ..controls (180.15,118.93) and (179.94,119.58)..(180.73,118.06)
+ ..controls (181.59,116.55) and (183.03,115.98)..(184.11,116.41)
+ ..controls (185.19,116.84) and (184.47,115.69)..(185.55,117.2)
+ ..controls (186.63,118.71) and (185.19,122.74)..(185.19,122.74)
+ --(182.24,132.39)--(178.28,133.26)--cycle;
+drawoptions (withcolor (0,0.6,0));
+fill (203.19,132.82)..controls (207.44,132.82) and (198.58,125.84)..(194.55,123.61)
+ ..controls (190.45,121.3) and (188.65,115.04)..(184.11,120.87)
+ ..controls (179.65,126.7) and (184.54,132.61)..(180.51,133.04)
+ ..controls (176.48,133.54) and (177.85,132.18)..(174.68,133.54)
+ ..controls (171.51,134.84) and (172.45,140.31)..(172.45,140.31)
+ ..controls (172.45,140.31) and (175.98,145.71)..(177.42,148.88)
+ ..controls (178.78,152.05) and (177.42,152.91)..(177.85,155.22)
+ ..controls (178.28,157.52) and (181.02,159.32)..(181.02,159.32)
+ --(190.02,158.82)--(192.25,162.78)..controls (192.25,162.78) and (196.78,162.92)..(199.02,161.12)
+ ..controls (201.25,159.32) and (201.25,156.58)..(201.25,156.58)
+ --(203.98,155.22)--(203.55,147.58)--(201.68,143.12)
+ ..controls (201.68,143.12) and (201.82,139.95)..(203.19,137.72)
+ ..controls (204.56,135.42) and (202.76,132.82)..(203.19,132.82)
+ --cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+fill (1.37988,135.34)--(63.9399,129.01)--(67.98,114.97)
+ --(73.8799,108.63)--(57.6799,89.26)--(0.869873,46.2798)
+ --(1.37988,135.34)--cycle;
+drawoptions (withcolor (0,0.6,0));
+fill (141.27,120.87)..controls (140.84,121.23) and (143.65,122.46)..(139.62,123.32)
+ ..controls (135.51,124.26) and (134.65,122.67)..(129.25,122.67)
+ ..controls (123.85,122.67) and (124.28,120.87)..(122.05,122.67)
+ ..controls (119.82,124.47) and (119.38,126.27)..(115.28,126.27)
+ ..controls (111.25,126.27) and (109.45,126.7)..(106.78,124.9)
+ ..controls (104.05,123.1) and (102.68,123.1)..(100.45,123.1)
+ ..controls (98.22,123.1) and (96.3398,123.18)..(93.6799,123.61)
+ ..controls (91.0198,124.04) and (88.7798,124.47)..(86.0498,124.9)
+ ..controls (83.3098,125.41) and (80.5798,125.84)..(77.9099,125.41)
+ ..controls (75.25,124.9) and (70.2798,124.47)..(66.6799,124.9)
+ ..controls (63.0798,125.41) and (60.3398,127.21)..(57.1799,125.41)
+ ..controls (54.0798,123.61) and (49.1099,123.61)..(49.1099,123.61)
+ --(44.1399,122.67)--(45.0798,115.9)..controls (45.0798,115.9) and (43.2798,113.6)..(49.5398,113.6)
+ ..controls (55.8799,113.6) and (58.98,113.6)..(64.8799,113.6)
+ ..controls (70.71,113.6) and (69.4199,112.66)..(76.1099,114.03)
+ ..controls (82.8799,115.47) and (86.98,115.47)..(91.8799,115.47)
+ ..controls (96.8499,115.47) and (100.88,114.97)..(105.85,114.97)
+ ..controls (110.82,114.97) and (112.62,114.97)..(118.02,114.97)
+ ..controls (123.42,114.97) and (125.22,114.54)..(136.02,114.54)
+ ..controls (146.74,114.54) and (146.74,115.9)..(146.74,115.9)
+ --(145.88,120.37)--(141.27,120.87)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+fill (5.83984,98.26)--(27.5098,109.14)--(46.3799,113.6)
+ --(70.2798,114.03)--(74.3098,109.57)--(49.5398,105.54)
+ --(0.869873,67.95)--(5.83984,98.26)--cycle;
+drawoptions (withcolor (0.8,0.3,0));
+fill (105.85,108.2)--(106.78,85.23)--(73.8799,84.2998)
+ --(66.25,38.1399)--(36.7998,1.05981)--(0.72998,1.05981)
+ --(0.869873,49.8799)..controls (0.869873,49.8799) and (24.7798,67.0898)..(36.0798,74.7898)
+ ..controls (47.3098,82.5) and (70.2798,104.6)..(72.5098,107.34)
+ ..controls (74.74,110) and (77.48,108.2)..(77.48,108.2)
+ --(105.85,108.2)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (75.25,107.77)--(105.85,107.77)--(105.85,85.23)
+ --(75.25,85.23)--(75.25,107.77)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (75.25,107.77)--(105.85,107.77)--(105.85,85.23)
+ --(75.25,85.23)--(75.25,107.77);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 2.23bp;
+draw (118.59,71.1899)--(117.22,61.8999);
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (266.48,1.56982)--(267.34,45.9199)--(158.84,82.3499)
+ --(149.26,81.2)--(144.15,86.3098)--(140.84,107.77)
+ --(104.84,107.26)--(105.92,86.3098)--(114.92,40.45)
+ --(55.5898,38.5798)--(37.23,0.849854)--(266.48,1.56982)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+fill (55.1599,40.0898)--(113.98,37.21)--(153.94,25.8999)
+ ..controls (153.94,25.8999) and (123.42,17.8398)..(145.88,14.6699)
+ ..controls (168.34,11.4299) and (158.91,11)..(152.65,7.3999)
+ ..controls (146.31,3.7998) and (118.95,1.05981)..(113.48,1.05981)
+ ..controls (108.08,1.05981) and (35.6499,1.05981)..(35.6499,1.05981)
+ --(55.1599,40.0898)--cycle;
+drawoptions (withcolor (1,0.7,0));
+fill (146.96,157.59)--(149.77,157.59)--(149.77,118.06)
+ --(146.96,118.06)--(146.96,157.59)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (146.96,157.59)--(149.77,157.59)--(149.77,118.06)
+ --(146.96,118.06)--(146.96,157.59);
+drawoptions (withcolor (1,0.7,0));
+pickup pencircle scaled 0bp;
+fill (109.16,161.05)--(180.37,158.53)--(176.41,154.86)
+ --(108.66,157.3)--(109.16,161.05)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (109.16,161.05)--(180.37,158.53)--(176.41,154.86)
+ --(108.66,157.3)--(109.16,161.05);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (107.65,166.74)--(192.18,162.27)--(189.94,159.54)
+ --(108.15,162.99)--(107.65,166.74)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (107.65,166.74)--(192.18,162.27)--(189.94,159.54)
+ --(108.15,162.99)--(107.65,166.74);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (149.77,163.86)--(153.8,163.86)--(153.8,110.07)
+ --(149.77,110.07)--(149.77,163.86)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (149.77,163.86)--(153.8,163.86)--(153.8,110.07)
+ --(149.77,110.07)--(149.77,163.86);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 2.23bp;
+draw (112.26,165.3)--(104.77,109.14);
+draw (109.59,159.82)--(102.75,116.62);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (153.73,150.61)--(163.38,129.3);
+draw (153.51,140.17)--(163.09,124.33);
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0bp;
+fill (162.58,130.74)--(168.99,130.74)--(168.99,114.9)
+ --(162.58,114.9)--(162.58,130.74)--cycle;
+drawoptions (withcolor (0,0.4,1));
+fill (153.22,123.1)--(162.58,123.1)--(162.58,115.9)
+ --(153.22,115.9)--(153.22,123.1)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (101.89,117.92)--(149.05,117.42);
+pickup pencircle scaled 2.02bp;
+draw (103.98,113.46)--(150.56,113.67);
+pickup pencircle scaled 0bp;
+fill (102.25,109.71)--(146.82,109.71)--(146.82,107.77)
+ --(102.25,107.77)--(102.25,109.71)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (102.25,109.71)--(146.82,109.71)--(146.82,107.77)
+ --(102.25,107.77)--(102.25,109.71);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92)
+ --(90.4399,117.92)--(90.4399,158.02)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (90.4399,158.02)--(92.1699,158.02)--(92.1699,117.92)
+ --(90.4399,117.92)--(90.4399,158.02);
+drawoptions (withcolor (0,0,0));
+draw (161.86,94.8799)--(164.1,94.8799)--(164.1,92.22)
+ --(161.86,92.22)--(161.86,94.8799);
+drawoptions (withcolor (0.8,0.3,0));
+pickup pencircle scaled 0bp;
+fill (147.32,104.1)--(149.05,104.1)--(149.05,87.97)
+ --(147.32,87.97)--(147.32,104.1)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (147.32,104.1)--(149.05,104.1)--(149.05,87.97)
+ --(147.32,87.97)--(147.32,104.1);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (148.54,104.6)--(150.27,104.6)--(150.27,87.6799)
+ --(148.54,87.6799)--(148.54,104.6)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (148.54,104.6)--(150.27,104.6)--(150.27,87.6799)
+ --(148.54,87.6799)--(148.54,104.6);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (141.2,107.55)--(147.1,107.55)--(147.1,87.25)
+ --(141.2,87.25)--(141.2,107.55)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (141.2,107.55)--(147.1,107.55)--(147.1,87.25)
+ --(141.2,87.25)--(141.2,107.55);
+drawoptions (withcolor (0,0.75,1));
+pickup pencircle scaled 0bp;
+fill (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99)
+ --(143.22,81.2)--(141.49,88.1799)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (141.49,88.1799)--(153.58,88.1799)--(161.22,81.99)
+ --(143.22,81.2)--(141.49,88.1799);
+drawoptions (withcolor (1,0.4,0));
+pickup pencircle scaled 0bp;
+fill (146.53,110.22)--(165.1,110.22)--(165.1,103.09)
+ --(162.8,103.09)--(152.94,87.97)--(147.32,87.97)
+ --(146.53,110.22)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (146.53,110.22)--(165.1,110.22)--(165.1,103.09)
+ --(162.8,103.09)--(152.94,87.97)--(147.32,87.97)
+ --(146.53,110.22);
+drawoptions (withcolor (1,0.5,0));
+pickup pencircle scaled 0bp;
+fill (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899)
+ --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898)
+ ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45)
+ ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498)
+ --(285.63,30.6599)--(285.92,78.3899)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (285.92,78.3899)--(163.09,104.31)--(152.43,88.6899)
+ --(160.57,82.5)..controls (160.57,82.5) and (165.39,79.76)..(175.62,74.2898)
+ ..controls (185.84,68.8198) and (187.86,71.5498)..(192.61,67.45)
+ ..controls (197.36,63.3398) and (215.65,62.0498)..(215.65,62.0498)
+ --(285.63,30.6599)--(285.92,78.3899);
+drawoptions (withcolor (0.2,0.9,0.2));
+pickup pencircle scaled 0bp;
+fill (40.1799,214.47)..controls (47.6699,214.47) and (37.0198,202.59)..(40.3999,195.82)
+ ..controls (43.7798,188.98) and (41.0498,194.46)..(47.8899,187.62)
+ ..controls (54.6599,180.78) and (59.4099,178.76)..(59.4099,173.29)
+ ..controls (59.4099,167.82) and (59.4099,166.45)..(60.1299,159.61)
+ ..controls (60.7798,152.77) and (64.8098,145.93)..(65.5298,141.82)
+ ..controls (66.25,137.79) and (68.98,134.34)..(66.25,130.95)
+ ..controls (63.5098,127.57) and (62.7898,127.57)..(52.6399,127.57)
+ ..controls (42.49,127.57) and (42.49,130.3)..(33.6299,125.48)
+ ..controls (24.7798,120.73) and (25.5,116.62)..(18.6599,120.73)
+ ..controls (11.8899,124.76) and (1.65991,128.22)..(1.65991,128.22)
+ --(1.37988,214.47)--(40.1799,214.47)--cycle;
+drawoptions (withcolor (0,0.5,1));
+fill (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799)
+ ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399)
+ ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699)
+ ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299)
+ ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7)
+ ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398)
+ ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26)
+ ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46)
+ ..controls (59.8398,44.9099) and (59.3398,48.5798)..(58.2598,50.3098)
+ --(54.8699,55.6399)--(122.41,51.8999)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (122.41,51.8999)..controls (122.41,51.8999) and (121.76,52.47)..(120.25,49.3799)
+ ..controls (118.66,46.21) and (118.66,44.3398)..(115.86,39.9399)
+ ..controls (113.05,35.48) and (114.27,36.49)..(110.53,32.6699)
+ ..controls (106.71,28.9299) and (109.38,32.3799)..(104.34,28.9299)
+ ..controls (99.2998,25.47) and (94.2598,26.3398)..(89.7898,26.7)
+ ..controls (85.3999,26.98) and (76.6199,25.1799)..(72.8699,27.3398)
+ ..controls (69.1299,29.5798) and (67.8999,30.51)..(65.74,34.26)
+ ..controls (63.5798,38) and (63.5798,38)..(61.71,41.46)
+ ..controls (59.8399,44.9099) and (59.3398,48.5798)..(58.2598,50.3098)
+ --(54.8699,55.6399)--(122.41,51.8999);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (202.04,156.87)--(200.53,112.81)--(234.87,107.26)
+ --(233.29,167.1)--(202.04,156.87);
+drawoptions (withcolor (1,0.25,0.25));
+pickup pencircle scaled 0bp;
+fill (246.9,189.63)--(223.06,177.32)--(202.76,160.26)
+ --(230.55,170.55)--(246.9,189.63)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (246.9,189.63)--(223.06,177.32)--(202.76,160.26)
+ --(230.55,170.55)--(246.9,189.63);
+drawoptions (withcolor (1,0.4,0.4));
+pickup pencircle scaled 0bp;
+fill (246.25,188.98)--(230.98,170.62)--(274.76,169.83)
+ --(246.25,188.98)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (246.25,188.98)--(230.98,170.62)--(274.76,169.83)
+ --(246.25,188.98);
+drawoptions (withcolor (0.3,1,0.3));
+pickup pencircle scaled 0bp;
+fill (255.75,122.1)..controls (252.3,122.1) and (253.02,121.45)..(248.26,125.48)
+ ..controls (243.51,129.58) and (242.79,126.2)..(239.41,135.06)
+ ..controls (236.02,143.91) and (234.01,141.18)..(234.66,148.66)
+ ..controls (235.3,156.22) and (230.62,155.5)..(236.02,163.06)
+ ..controls (241.42,170.55) and (240.13,166.45)..(245.53,174.66)
+ ..controls (251,182.79) and (250.28,185.53)..(255.03,186.9)
+ ..controls (259.78,188.26) and (258.49,194.38)..(264.61,186.9)
+ ..controls (270.66,179.41) and (271.3,174.58)..(276.06,173.94)
+ ..controls (280.88,173.29) and (282.25,175.95)..(282.25,167.82)
+ ..controls (282.25,159.61) and (282.9,154.86)..(277.5,149.38)
+ ..controls (272.02,143.91) and (267.27,145.28)..(266.55,137.07)
+ ..controls (265.9,128.86) and (266.55,124.83)..(263.17,124.11)
+ ..controls (259.78,123.39) and (255.75,122.1)..(255.75,122.1)
+ --cycle;
+drawoptions (withcolor (0.8,0.3,0));
+fill (270.66,52.47)--(276.78,52.47)--(276.78,0.629883)
+ --(270.66,0.629883)--(270.66,52.47)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (270.66,52.47)--(276.78,52.47)--(276.78,0.629898)
+ --(270.66,0.629898)--(270.66,52.47);
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 0bp;
+fill (90.5798,158.02)--(92.0198,158.02)--(92.0198,152.84)
+ --(90.5798,152.84)--(90.5798,158.02)--cycle;
+fill (90.5798,147.66)--(92.0198,147.66)--(92.0198,142.47)
+ --(90.5798,142.47)--(90.5798,147.66)--cycle;
+fill (90.5798,137.43)--(92.0198,137.43)--(92.0198,132.25)
+ --(90.5798,132.25)--(90.5798,137.43)--cycle;
+fill (90.5798,128.14)--(92.0198,128.14)--(92.0198,122.96)
+ --(90.5798,122.96)--(90.5798,128.14)--cycle;
+drawoptions (withcolor (1,0.9,0));
+fill (203.34,160.98)--(200.53,160.98)--(199.38,155.29)
+ --(233.22,167.17)--(236.02,169.98)--(230.34,169.98)
+ --(203.34,160.98)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (203.34,160.98)--(200.53,160.98)--(199.38,155.29)
+ --(233.22,167.17)--(236.02,169.98)--(230.34,169.98)
+ --(203.34,160.98);
+drawoptions (withcolor (1,1,0.7));
+pickup pencircle scaled 0bp;
+fill (232.14,166.59)--(235.52,107.77)--(202.11,112.52)
+ --(202.83,155.65)--(232.14,166.59)--cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+pickup pencircle scaled 0.22bp;
+draw (232.14,166.59)--(235.52,107.77)--(202.11,112.52)
+ --(202.83,155.65)--(232.14,166.59);
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (214.42,156.3)--(214.42,145.35)--(217.81,146.07)
+ --(217.16,157.66)--(214.42,156.3);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (219.9,133.04)--(219.75,109.86)--(230.77,108.42)
+ --(230.12,133.04)--(219.9,133.04);
+drawoptions (withcolor (0,0.8,0));
+pickup pencircle scaled 0bp;
+fill (212.34,118.64)..controls (217.16,122.1) and (219.82,117.34)..(221.19,126.2)
+ ..controls (222.56,135.13) and (224.65,137.86)..(221.91,141.25)
+ ..controls (219.18,144.7) and (213.06,146.07)..(213.06,146.07)
+ ..controls (213.06,146.07) and (213.7,152.26)..(208.3,149.46)
+ ..controls (202.83,146.72) and (196.06,153.42)..(196.06,145.93)
+ ..controls (196.06,138.37) and (200.1,135.13)..(203.55,131.67)
+ ..controls (206.94,128.29) and (206.22,127.57)..(207.58,124.18)
+ ..controls (208.95,120.73) and (212.34,118.64)..(212.34,118.64)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (251.86,122.1)--(257.34,122.1)--(257.34,92.0698)
+ --(251.86,92.0698)--(251.86,122.1)--cycle;
+pickup pencircle scaled 0.86bp;
+draw (251.86,122.1)--(257.34,122.1)--(257.34,92.0698)
+ --(251.86,92.0698)--(251.86,122.1);
+drawoptions (withcolor (0.6,0.85,1));
+pickup pencircle scaled 0bp;
+fill (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99)
+ ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95)
+ ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898)
+ ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599)
+ ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599)
+ ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898)
+ ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47)
+ ..controls (55.1599,54.99) and (55.1599,55.3499)..(55.1599,58.1599)
+ ..controls (55.1599,60.97) and (59.8398,64.4199)..(59.8398,64.4199)
+ --(116.5,62.8398)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (116.5,62.8398)..controls (116.5,62.8398) and (123.06,57.22)..(123.06,54.99)
+ ..controls (123.06,52.8298) and (122.98,51.25)..(118.66,49.95)
+ ..controls (114.27,48.73) and (104.62,47.7898)..(102.1,47.7898)
+ ..controls (99.5798,47.7898) and (93.3198,46.8599)..(91.45,46.8599)
+ ..controls (89.5798,46.8599) and (77.0498,46.21)..(74.5298,46.8599)
+ ..controls (72.0798,47.4299) and (65.8198,46.21)..(63.5798,47.7898)
+ ..controls (61.4199,49.3799) and (58.3298,49.95)..(56.74,52.47)
+ ..controls (55.1599,54.99) and (55.1599,55.3498)..(55.1599,58.1599)
+ ..controls (55.1599,60.97) and (59.8399,64.4199)..(59.8399,64.4199)
+ --(116.5,62.8398);
+drawoptions (withcolor (0.8,0.9,1));
+pickup pencircle scaled 0bp;
+fill (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5)
+ ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399)
+ ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398)
+ ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399)
+ --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398)
+ ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25)
+ ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198)
+ --(63.3699,63.49)--(63.3699,81.4199)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (63.3699,81.4199)..controls (63.3699,81.4199) and (81.5098,83.5)..(87.8499,83.5)
+ ..controls (94.1799,83.5) and (111.82,82.1399)..(111.82,82.1399)
+ ..controls (111.82,82.1399) and (114.06,71.4099)..(114.06,70.0398)
+ ..controls (114.06,68.74) and (115.64,64.6399)..(115.64,64.6399)
+ --(116.29,54.6299)..controls (116.29,54.6299) and (98.5,52.5398)..(93.25,52.5398)
+ ..controls (87.99,52.5398) and (69.2698,50.5999)..(67.47,51.25)
+ ..controls (65.6699,51.8999) and (65.6699,59.8198)..(65.6699,59.8198)
+ --(63.3699,63.49)--(63.3699,81.4199);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26)
+ ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398)
+ --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76)
+ ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099)
+ ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298)
+ ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498)
+ ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (66.6799,78.25)..controls (68.9099,79.26) and (74.24,79.26)..(75.8198,79.26)
+ ..controls (77.3398,79.26) and (84.25,79.5398)..(84.25,79.5398)
+ --(85.1799,77.0198)--(85.1799,72.6299)--(83.5999,70.76)
+ ..controls (83.5999,70.76) and (80.22,70.76)..(77.0498,70.1099)
+ ..controls (73.8799,69.46) and (68.2598,68.5298)..(68.2598,68.5298)
+ ..controls (68.2598,68.5298) and (66.0999,69.46)..(66.0999,71.0498)
+ ..controls (66.0999,72.6299) and (66.6799,78.25)..(66.6799,78.25)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098)
+ ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199)
+ ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76)
+ ..controls (105.85,70.76) and (93.6099,70.3999)..(93.6099,70.3999)
+ ..controls (93.6099,70.3999) and (91.45,71.3398)..(91.45,72.9199)
+ ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098)
+ --(93.0298,79.8298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (93.0298,79.8298)--(105.85,79.5398)..controls (105.85,79.5398) and (108.37,79.26)..(108.66,77.3098)
+ ..controls (108.94,75.4399) and (109.3,72.9199)..(109.3,72.9199)
+ ..controls (109.3,72.9199) and (108.94,70.76)..(107.43,70.76)
+ ..controls (105.85,70.76) and (93.6098,70.3999)..(93.6098,70.3999)
+ ..controls (93.6098,70.3999) and (91.45,71.3399)..(91.45,72.9199)
+ ..controls (91.45,74.5) and (91.1599,77.3098)..(91.1599,77.3098)
+ --(93.0298,79.8298);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298)
+ --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99)
+ ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898)
+ ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799)
+ --(95.48,61.3298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (95.48,61.3298)..controls (98.6499,61.3298) and (108.01,61.3298)..(108.01,61.3298)
+ --(110.82,58.8098)--(110.82,56.2898)..controls (108.01,55.3499) and (96.4199,54.99)..(96.4199,54.99)
+ ..controls (96.4199,54.99) and (93.3198,54.7)..(93.3198,56.2898)
+ ..controls (93.3198,57.8699) and (93.0298,59.3799)..(93.0298,59.3799)
+ --(95.48,61.3298);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399)
+ ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7)
+ ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199)
+ --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74)
+ --(84.5398,60.0298)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (84.5398,60.0298)--(88.2798,58.8098)--(88.2798,55.6399)
+ ..controls (88.2798,55.6399) and (88.3499,54.7)..(86.1199,54.7)
+ ..controls (83.96,54.7) and (71.72,53.1199)..(71.72,53.1199)
+ --(69.2,54.7)--(69.2,57.51)--(71.4299,59.74)
+ --(84.5398,60.0298);
+drawoptions (withcolor (0,0.7,1));
+pickup pencircle scaled 2.23bp;
+draw (65.3799,59.8198)..controls (70.6399,63.0598) and (81.22,66.6599)..(88.2798,66.4399)
+ ..controls (95.2598,66.22) and (111.97,65.2898)..(115.64,61.47);
+drawoptions (withcolor (0.4,0.8,1));
+pickup pencircle scaled 0bp;
+fill (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899)
+ ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899)
+ --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199)
+ --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898)
+ ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 1.44bp;
+draw (111.82,82.1399)--(105.92,86.46)..controls (105.92,86.46) and (95.98,87.3899)..(93.8999,87.3899)
+ ..controls (91.8799,87.3899) and (81.9399,87.3899)..(81.9399,87.3899)
+ --(74.24,87.3899)--(68.3398,84.8699)--(63.5798,81.9199)
+ --(64.95,81.2)..controls (64.95,81.2) and (79.4199,83.5)..(87.3398,83.2898)
+ ..controls (95.2598,83.0698) and (111.61,82.1399)..(111.82,82.1399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 2.81bp;
+draw (113.84,72.8498)..controls (114.92,72.8498) and (116.29,72.8498)..(118.16,71.7)
+ ..controls (119.96,70.5398) and (119.53,70.5398)..(121.11,68.96)
+ ..controls (122.62,67.3799) and (121.98,66.22)..(121.98,66.22)
+ ..controls (121.98,66.22) and (120.82,65.5798)..(119.02,65.5798)
+ ..controls (117.22,65.5798) and (111.82,65.0698)..(109.74,65.0698)
+ ..controls (107.72,65.0698) and (103.4,65.0698)..(99.7998,65.0698)
+ ..controls (96.2,65.0698) and (90.9399,64.8599)..(88.2798,64.8599)
+ ..controls (85.5398,64.8599) and (79.4199,64.1399)..(76.47,63.9199)
+ ..controls (73.5198,63.7) and (69.49,63.7)..(66.0999,63.7)
+ ..controls (62.72,63.7) and (63.7998,62.7698)..(61.3499,64.1399)
+ ..controls (58.8298,65.5798) and (57.97,64.2099)..(57.97,66.6599)
+ ..controls (57.97,69.1799) and (56.8198,69.46)..(59.3398,71.7)
+ ..controls (61.7798,73.9299) and (61.3499,73.0598)..(63.1499,73.0598);
+pickup pencircle scaled 2.23bp;
+draw (57.97,67.0899)--(57.97,59.1699);
+draw (62.9399,62.7698)--(62.9399,51.25);
+draw (90.2998,64.8598)--(91.45,48.9399);
+draw (121.26,66.01)--(120.61,54.6299);
+draw (60.9199,72.8499)--(62,66.01);
+draw (114.7,72.5598)--(114.7,67.3799);
+pickup pencircle scaled 2.81bp;
+draw (84.6099,87.0999)--(84.8999,94.3799);
+draw (96.8498,86.46)--(96.8498,90.7798);
+drawoptions (withcolor (1,0.9,0));
+pickup pencircle scaled 0bp;
+fill (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73)
+ ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21)
+ ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73)
+ ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25)
+ --cycle;
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 2.23bp;
+draw (96.6299,96.25)..controls (98,96.25) and (99.1499,95.1699)..(99.1499,93.73)
+ ..controls (99.1499,92.2898) and (98,91.21)..(96.6299,91.21)
+ ..controls (95.2598,91.21) and (94.1099,92.2898)..(94.1099,93.73)
+ ..controls (94.1099,95.1699) and (95.2598,96.25)..(96.6299,96.25)
+ --cycle;
+drawoptions (withcolor (1,0.4,0));
+pickup pencircle scaled 0bp;
+fill (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699951)
+ --(277.14,0.699951)--(277.14,29.4299)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (277.14,29.4299)--(285.99,29.4299)--(285.99,0.699936)
+ --(277.14,0.699936)--(277.14,29.4299);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (271.16,51.75)--(276.49,52.6199)--(276.7,49.95)
+ --(271.16,48.9399)--(271.16,51.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (271.16,51.75)--(276.49,52.6199)--(276.7,49.95)
+ --(271.16,48.9399)--(271.16,51.75);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298)
+ --(277.64,29.3599)--(285.56,29.3599)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (285.56,29.3599)--(285.27,32.5298)--(276.85,32.5298)
+ --(277.64,29.3599)--(285.56,29.3599);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (165.82,104.53)--(172.95,104.53)--(172.95,102.08)
+ --(165.82,102.08)--(165.82,104.53)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (165.82,104.53)--(172.95,104.53)--(172.95,102.08)
+ --(165.82,102.08)--(165.82,104.53);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22)
+ ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22)
+ ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699)
+ ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799)
+ ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74)
+ ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298)
+ ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599)
+ ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (162.37,92.22)..controls (162.58,92.22) and (162.87,92.22)..(163.16,92.22)
+ ..controls (163.52,92.22) and (163.81,92.22)..(164.1,92.22)
+ ..controls (164.02,89.7698) and (164.02,87.3198)..(164.02,84.8699)
+ ..controls (164.02,82.3499) and (164.02,79.8999)..(164.1,77.3799)
+ ..controls (163.81,77.5298) and (163.52,77.6699)..(163.16,77.74)
+ ..controls (162.94,77.8198) and (162.58,78.0298)..(162.37,78.0298)
+ ..controls (162.3,80.4099) and (162.3,82.7798)..(162.3,85.1599)
+ ..controls (162.3,87.46) and (162.37,89.9099)..(162.37,92.22)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599)
+ --(161.94,93.6599)--(161.94,92.6499)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (161.94,92.6499)--(164.31,92.6499)--(164.31,93.6599)
+ --(161.94,93.6599)--(161.94,92.6499);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (147.25,105.9)--(150.34,105.9)--(150.34,104.53)
+ --(147.25,104.53)--(147.25,105.9)--cycle;
+drawoptions (withcolor (0.1,0.1,0.1));
+pickup pencircle scaled 0.86bp;
+draw (147.25,105.9)--(150.34,105.9)--(150.34,104.53)
+ --(147.25,104.53)--(147.25,105.9);
+drawoptions (withcolor (0,0.7,1));
+pickup pencircle scaled 0bp;
+fill (105.85,90.6299)..controls (110.82,92.5) and (110.82,92)..(113.98,92.9399)
+ ..controls (117.08,93.7998) and (117.58,92.5)..(120.25,92.5)
+ ..controls (122.91,92.5) and (128.67,92)..(130.62,92)
+ --(135.58,92)--(141.85,93.3699)--(143.22,82.5)
+ --(154.45,82.5)--(159.78,79.3298)..controls (159.78,79.3298) and (159.34,72.1299)..(155.74,72.1299)
+ ..controls (152.22,72.1299) and (147.61,69.3899)..(144.08,72.1299)
+ ..controls (140.55,74.7898) and (136.88,75.22)..(134.22,74.7898)
+ ..controls (131.55,74.3599) and (126.94,73.9299)..(123.42,73.9299)
+ ..controls (119.82,73.9299) and (113.05,73.9299)..(113.05,73.9299)
+ --(111.25,82.9299)--(105.85,87.46)--(105.85,90.6299)
+ --cycle;
+drawoptions (withcolor (0,0.4,1));
+fill (109.88,100.93)..controls (116.22,103.45) and (119.82,103.23)..(123.85,103.66)
+ ..controls (127.95,104.1) and (132.49,104.89)..(133.35,104.6)
+ --(138.75,102.8)--(136.02,99.6299)..controls (136.02,99.6299) and (138.25,93.2998)..(136.02,95.0999)
+ ..controls (133.78,96.8999) and (130.18,96.8999)..(127.02,97.3298)
+ ..controls (123.85,97.76) and (118.45,95.5298)..(121.18,95.5298)
+ ..controls (123.85,95.5298) and (131.98,95.5298)..(134.65,94.23)
+ --(139.18,91.9299)..controls (139.18,91.9299) and (112.18,91.9299)..(108.51,91.9299)
+ ..controls (104.91,91.9299) and (104.55,96.0298)..(106.78,96.0298)
+ ..controls (109.02,96.0298) and (115.78,98.7)..(115.78,98.7)
+ --(107.65,100.06)--(109.88,100.93)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (45.9399,128.07)..controls (45.9399,128.07) and (45.0798,122.6)..(45.9399,118.57)
+ ..controls (46.8799,114.54) and (45.9399,113.17)..(47.3098,110.43)
+ ..controls (48.6799,107.77) and (50.48,104.17)..(50.48,104.17)
+ --(54.9399,101.5)--(52.71,99.6299)--(47.74,99.6299)
+ --(43.21,103.3)--(41.9099,114.03)--(41.4099,123.1)
+ --(40.98,127.64)--(45.9399,128.07)--cycle;
+fill (45.0798,95.1699)..controls (45.0798,95.1699) and (42.2698,98.7)..(41.4099,101.94)
+ ..controls (40.5398,105.1) and (38.74,111.37)..(38.74,114.97)
+ ..controls (38.74,118.57) and (38.74,128.07)..(38.74,128.07)
+ --(31.5398,124.04)..controls (31.5398,124.04) and (31.0398,119.5)..(31.5398,116.34)
+ ..controls (31.98,113.17) and (32.8398,108.2)..(33.3398,105.1)
+ ..controls (33.7798,101.94) and (34.21,100.57)..(34.21,97.8298)
+ ..controls (34.21,95.1699) and (39.6799,94.23)..(39.6799,94.23)
+ --(45.0798,95.1699)--cycle;
+fill (27.9399,87.46)..controls (27.9399,87.46) and (27.5098,96.46)..(27.5098,99.2)
+ ..controls (27.5098,101.94) and (27.5098,113.17)..(27.5098,113.17)
+ --(27.0798,120.37)--(22.98,119.07)--(15.3398,123.61)
+ ..controls (15.3398,123.61) and (15.3398,113.6)..(15.3398,110.94)
+ ..controls (15.3398,108.2) and (15.7798,101.5)..(15.3398,96.97)
+ ..controls (14.9099,92.4299) and (15.7798,92)..(14.9099,88.8298)
+ ..controls (13.98,85.6599) and (21.1799,86.5298)..(21.1799,86.5298)
+ --(26.1399,85.23)--(27.9399,87.46)--cycle;
+fill (1.37988,78.3899)--(15.3398,77.5298)..controls (15.3398,77.5298) and (14.8398,80.7)..(13.5398,83.3599)
+ ..controls (12.1799,86.0999) and (7.63989,86.96)..(6.77979,92.8599)
+ ..controls (5.83984,98.7698) and (4.53979,102.8)..(4.53979,107.77)
+ ..controls (4.53979,112.74) and (4.10986,127.21)..(4.10986,127.21)
+ --(1.37988,127.64)--(1.37988,78.3899)--cycle;
+drawoptions (withcolor (0,0.75,1));
+fill (220.62,63.9199)--(217.45,58.5198)--(223.78,51.6799)
+ ..controls (223.78,51.6799) and (230.98,47.22)..(234.15,46.2798)
+ ..controls (237.32,45.3398) and (244.52,43.5398)..(244.52,43.5398)
+ --(257.12,43.5398)--(261.66,44.0498)--(267.42,42.6799)
+ --(266.55,36.3398)--(259.78,32.74)..controls (259.78,32.74) and (254.46,30.9399)..(248.98,32.74)
+ ..controls (243.58,34.5398) and (240.92,34.1099)..(236.38,34.98)
+ ..controls (231.85,35.9099) and (222.42,37.71)..(221.98,40.45)
+ ..controls (221.55,43.1099) and (219.32,49.0198)..(219.32,49.0198)
+ --(217.45,54.4199)--(218.38,62.5498)--(220.62,63.9199)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (219.75,63.9199)--(235.02,63.9199)..controls (235.02,63.9199) and (238.18,63.9199)..(243.15,62.1199)
+ ..controls (248.12,60.3198) and (257.12,56.22)..(257.12,56.22)
+ --(262.09,51.25)--(266.98,48.5798)--(266.98,42.6799)
+ --(260.72,44.0498)--(246.32,41.74)--(231.42,46.7798)
+ --(222.42,52.1799)--(218.82,57.1499)--(219.75,63.9199)
+ --cycle;
+drawoptions (withcolor (1,0.9,0));
+fill (223.78,55.7798)--(227.38,60.75)--(231.42,61.6899)
+ ..controls (231.42,61.6899) and (235.88,61.6899)..(238.62,61.26)
+ ..controls (241.35,60.75) and (245.38,59.3799)..(248.12,57.5798)
+ ..controls (250.78,55.7798) and (256.18,52.6199)..(256.18,52.6199)
+ --(254.89,48.5798)--(249.42,46.2798)--(243.58,48.0798)
+ --(237.75,53.0498)--(233.65,54.9199)--(223.78,55.7798)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+fill (221.34,54.4199)--(224.65,50.3799)..controls (224.65,50.3799) and (229.62,47.6499)..(232.35,46.7798)
+ ..controls (235.02,45.8499) and (240.56,44.6199)..(240.92,44.48)
+ --(246.75,42.25)--(251.29,48.0798)--(243.58,51.25)
+ --(236.02,54.4199)--(229.18,56.22)--(221.34,54.4199)
+ --cycle;
+drawoptions (withcolor (0.8,0.8,0.8));
+fill (219.32,63.0598)--(219.32,58.0198)--(224.22,51.25)
+ ..controls (224.22,51.25) and (231.92,47.22)..(235.02,45.8499)
+ ..controls (238.18,44.48) and (243.15,43.1099)..(245.89,43.1099)
+ ..controls (248.55,43.1099) and (253.09,43.1099)..(255.75,43.1099)
+ ..controls (258.42,43.1099) and (262.02,44.0498)..(264.32,43.1099)
+ ..controls (266.55,42.25) and (267.42,40.45)..(267.42,40.45)
+ --(262.09,38.6499)..controls (262.09,38.6499) and (255.75,38.6499)..(251.65,38.6499)
+ ..controls (247.62,38.6499) and (240.92,39.51)..(237.32,40.45)
+ ..controls (233.65,41.3098) and (226.88,43.98)..(223.78,47.22)
+ ..controls (220.62,50.3799) and (218.38,53.98)..(218.38,53.98)
+ --(219.32,63.0598)--cycle;
+drawoptions (withcolor (0.6,0.3,0));
+fill (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992)
+ --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (271.45,52.8999)--(271.23,1.41992)--(266.34,1.41992)
+ --(266.41,54.2)..controls (266.41,54.2) and (272.17,53.1899)..(271.45,52.8999)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899)
+ --(271.16,48.9399)--(271.16,51.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (271.16,51.75)--(266.26,54.1299)--(266.26,50.8899)
+ --(271.16,48.9399)--(271.16,51.75);
+drawoptions (withcolor (0.6,0.85,1));
+pickup pencircle scaled 0bp;
+fill (121.98,48.0798)..controls (129.82,48.51) and (138.9,48.51)..(143.36,48.51)
+ ..controls (147.75,48.51) and (157.69,51.6799)..(163.52,49.0198)
+ ..controls (169.42,46.2798) and (168.99,44.0498)..(174.82,43.5398)
+ ..controls (180.66,43.1099) and (189.66,39.51)..(189.66,39.51)
+ ..controls (189.66,39.51) and (190.52,35.8398)..(193.26,34.0398)
+ ..controls (195.99,32.24) and (185.62,29.5)..(185.62,29.5)
+ --(173.89,35.8398)..controls (173.89,35.8398) and (156.32,40.8799)..(152.72,40.8799)
+ ..controls (149.12,40.8799) and (134.79,39.9399)..(134.79,39.9399)
+ ..controls (134.79,39.9399) and (130.69,34.47)..(140.19,34.0398)
+ ..controls (149.55,33.6099) and (157.69,30.9399)..(157.69,30.9399)
+ ..controls (157.69,30.9399) and (156.32,25.47)..(152.72,25.47)
+ ..controls (149.12,25.47) and (129.82,26.4099)..(125.36,26.4099)
+ ..controls (120.82,26.4099) and (103.62,28.21)..(108.51,30.9399)
+ ..controls (113.48,33.6099) and (116.79,41.3098)..(116.79,41.3098)
+ ..controls (116.79,41.3098) and (118.59,46.71)..(121.98,48.0798)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+fill (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199)
+ --(273.68,54.99)--(266.12,54.1299)--cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (266.12,54.1299)--(271.3,51.46)--(276.7,52.6199)
+ --(273.68,54.99)--(266.12,54.1299);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (189.73,159.75)--(185.05,155.07)--(176.19,155.07)
+ --(181.09,159.75)--(189.73,159.75)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (189.73,159.75)--(185.05,155.07)--(176.19,155.07)
+ --(181.09,159.75)--(189.73,159.75);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89)
+ ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91)
+ ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46)
+ --(190.59,103.16)--(193.98,104.02)--(194.41,106.54)
+ ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02)
+ ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54)
+ --(191.24,121.45)--cycle;
+pickup pencircle scaled 0.86bp;
+draw (191.24,121.45)..controls (191.24,118.71) and (191.24,115.54)..(191.24,113.89)
+ ..controls (191.24,112.16) and (191.6,109.35)..(191.24,107.91)
+ ..controls (190.81,106.54) and (190.38,105.46)..(190.38,105.46)
+ --(190.59,103.16)--(193.98,104.02)--(194.41,106.54)
+ ..controls (194.41,106.54) and (194.41,111.94)..(194.41,113.02)
+ ..controls (194.41,114.03) and (195.06,123.54)..(195.06,123.54)
+ --(191.24,121.45);
+pickup pencircle scaled 0bp;
+fill (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3398)..(216.01,102.73)
+ ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22)
+ ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06)
+ ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37)
+ --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98)
+ ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3)
+ ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98)
+ ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94)
+ --(211.4,99.3398)--(213.27,98.7)--(216.58,98.5498)
+ --cycle;
+pickup pencircle scaled 0.86bp;
+draw (216.58,98.5498)..controls (216.58,100.21) and (216.15,99.3399)..(216.01,102.73)
+ ..controls (215.79,106.11) and (215.14,107.12)..(215.14,110.22)
+ ..controls (215.14,113.46) and (215.14,116.98)..(215.14,118.06)
+ ..controls (215.14,119.14) and (215.14,120.37)..(215.14,120.37)
+ --(212.19,119.36)..controls (212.19,119.36) and (212.19,118.71)..(212.19,116.98)
+ ..controls (212.19,115.33) and (212.19,113.17)..(212.19,111.3)
+ ..controls (212.19,109.42) and (212.19,109.5)..(212.19,106.98)
+ ..controls (212.19,104.46) and (212.05,101.94)..(212.05,101.94)
+ --(211.4,99.3399)--(213.27,98.6999)--(216.58,98.5498);
+pickup pencircle scaled 0bp;
+fill (184.54,108.78)--(184.54,114.46)--(183.46,116.19)
+ --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16)
+ ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64)
+ --(184.54,108.78)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (184.54,108.78)--(184.54,114.46)--(183.46,116.19)
+ --(182.67,114.46)..controls (182.67,114.46) and (182.82,113.24)..(182.82,112.16)
+ ..controls (182.82,111.08) and (182.82,109.64)..(182.82,109.64)
+ --(184.54,108.78);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68)
+ ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3)
+ --(176.98,109.64)--(176.98,113.46)--(176.98,116.55)
+ --(178.28,117.85)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (178.28,117.85)..controls (178.28,117.85) and (178.42,115.76)..(178.42,114.68)
+ ..controls (178.42,113.6) and (178.42,111.3)..(178.42,111.3)
+ --(176.98,109.64)--(176.98,113.46)--(176.98,116.55)
+ --(178.28,117.85);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16)
+ ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85)
+ --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9)
+ ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86)
+ --(179.5,108.99)--(180.51,109.21)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (180.51,109.21)..controls (180.51,109.21) and (180.3,109.5)..(180.51,112.16)
+ ..controls (180.73,114.9) and (180.73,117.85)..(180.73,117.85)
+ --(179.5,118.06)..controls (179.5,118.06) and (179.5,115.9)..(179.5,114.9)
+ ..controls (179.5,113.89) and (179.29,110.86)..(179.29,110.86)
+ --(179.5,108.99)--(180.51,109.21);
+drawoptions (withcolor (0,0.5,0));
+pickup pencircle scaled 0bp;
+fill (192.46,150.97)..controls (185.55,150.54) and (182.6,151.98)..(182.38,148.88)
+ ..controls (182.24,145.71) and (184.54,150.97)..(185.34,145.28)
+ ..controls (186.2,139.59) and (186.85,138.51)..(186.85,136.21)
+ ..controls (186.85,133.9) and (188.86,133.9)..(189.3,136.42)
+ ..controls (189.73,138.94) and (190.02,140.89)..(192.1,142.11)
+ ..controls (194.19,143.41) and (195.06,146.94)..(191.46,146.5)
+ ..controls (187.86,146.14) and (190.59,149.89)..(190.59,149.89)
+ --(192.46,150.97)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (221.77,159.61)--(227.17,163.06)--(226.52,146.65)
+ --(222.42,145.93)--(221.77,159.61);
+draw (207.8,155.43)--(205.28,153.92)--(205.28,149.1);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (204.63,125.48)--(204.63,118.28)--(209.24,117.63);
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (224,160.9)--(224.14,148.88);
+draw (222.06,154.78)--(226.88,157.09);
+draw (216.01,151.62)--(215.79,145.71);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 1.44bp;
+draw (223.5,130.52)--(227.96,130.52)--(228.18,124.4);
+draw (222.7,118.28)--(222.7,115.76)--(228.39,115.11);
+draw (222.27,123.32)--(227.53,123.18);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (240.42,126.27)--(236.82,126.7)--(236.82,113.17)
+ --(241.35,113.17)--(240.42,126.27)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (240.42,126.27)--(236.82,126.7)--(236.82,113.17)
+ --(241.35,113.17)--(240.42,126.27);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (246.75,126.7)--(242.65,126.7)--(243.58,112.23)
+ --(248.12,111.8)--(248.55,119.07)--(246.75,126.7)
+ --cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (246.75,126.7)--(242.65,126.7)--(243.58,112.23)
+ --(248.12,111.8)--(248.55,119.07)--(246.75,126.7);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (258.7,119.79)--(258.7,111.66)--(262.74,111.66)
+ --(263.24,123.82)--(258.27,122.96)--(258.7,119.79)
+ --cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (258.7,119.79)--(258.7,111.66)--(262.74,111.66)
+ --(263.24,123.82)--(258.27,122.96)--(258.7,119.79);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (269.36,126.49)--(264.82,126.49)--(265.33,110.22)
+ --(270.73,110.22)--(269.36,126.49)--cycle;
+drawoptions (withcolor (0.5,0.5,0.5));
+pickup pencircle scaled 0.22bp;
+draw (269.36,126.49)--(264.82,126.49)--(265.33,110.22)
+ --(270.73,110.22)--(269.36,126.49);
+drawoptions (withcolor (1,0.8,0.8));
+pickup pencircle scaled 0bp;
+fill (273.32,101.5)--(285.92,98.26)--(285.92,156.58)
+ --(273.32,145.28)--(273.32,101.5)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (273.32,101.5)--(285.92,98.26)--(285.92,156.58)
+ --(273.32,145.28)--(273.32,101.5);
+drawoptions (withcolor (0.95,0.95,0.95));
+pickup pencircle scaled 0bp;
+fill (277.86,125.41)--(276.92,109.57)--(285.92,107.77)
+ --(285.49,123.61)--(277.86,125.41)--cycle;
+drawoptions (withcolor (0.6,0.6,0.6));
+pickup pencircle scaled 1.44bp;
+draw (277.86,125.41)--(276.92,109.57)--(285.92,107.77)
+ --(285.49,123.61)--(277.86,125.41);
+drawoptions (withcolor (0.9,0.9,0.9));
+pickup pencircle scaled 0bp;
+fill (278.29,125.84)--(285.49,123.61)--(285.92,131.24)
+ --(278.29,132.18)--(278.29,125.84)--cycle;
+drawoptions (withcolor (0.6,0.6,0.6));
+pickup pencircle scaled 1.44bp;
+draw (278.29,125.84)--(285.49,123.61)--(285.92,131.24)
+ --(278.29,132.18)--(278.29,125.84);
+pickup pencircle scaled 0.86bp;
+draw (237.32,121.3)--(240.42,121.3);
+drawoptions (withcolor (0.5,0.5,0.5));
+draw (243.15,121.3)--(248.12,120.87);
+draw (259.35,120.37)--(262.52,119.94);
+draw (265.69,121.3)--(269.22,120.87);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94)
+ ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86)
+ ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76)
+ ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798)
+ ..controls (171.51,76.0898) and (170.43,76.5898)..(169.35,77.0198)
+ ..controls (168.27,77.46) and (167.12,77.96)..(166.04,78.3198)
+ ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299)
+ ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0.86bp;
+draw (166.04,101.86)..controls (167.12,101.94) and (168.2,101.94)..(169.35,101.94)
+ ..controls (170.43,101.94) and (171.51,101.94)..(172.74,101.86)
+ ..controls (172.66,97.5398) and (172.66,93.1499)..(172.66,88.76)
+ ..controls (172.66,84.3699) and (172.66,79.98)..(172.74,75.5798)
+ ..controls (171.51,76.0899) and (170.43,76.5898)..(169.35,77.0198)
+ ..controls (168.27,77.4599) and (167.12,77.9599)..(166.04,78.3198)
+ ..controls (166.04,82.2798) and (166.04,86.1699)..(166.04,90.1299)
+ ..controls (166.04,94.0198) and (166.04,97.98)..(166.04,101.86)
+ --cycle;
+drawoptions (withcolor (0,0.6,0));
+pickup pencircle scaled 0bp;
+fill (25.21,151.54)..controls (35.4299,157.66) and (33.3398,161.05)..(32.7,169.33)
+ ..controls (32.0498,177.54) and (29.3098,183.01)..(30.6799,189.13)
+ ..controls (32.0498,195.32) and (25.9299,187.04)..(23.8398,181.57)
+ ..controls (21.8198,176.17) and (13.6199,171.34)..(13.6199,171.34)
+ ..controls (13.6199,171.34) and (5.47998,167.89)..(8.85986,179.55)
+ ..controls (12.25,191.22) and (5.47998,189.78)..(5.47998,185.02)
+ ..controls (5.47998,180.27) and (3.38989,170.62)..(5.47998,164.5)
+ ..controls (7.5,158.38) and (12.3198,157.66)..(12.97,161.05)
+ ..controls (13.6199,164.5) and (17.0698,159.68)..(17.0698,152.19)
+ ..controls (17.0698,144.7) and (25.21,151.54)..(25.21,151.54)
+ --cycle;
+fill (38.8198,143.98)..controls (44.2898,150.18) and (44.2898,155)..(44.2898,159.75)
+ ..controls (44.2898,164.5) and (43.5698,178.18)..(46.2998,174.73)
+ ..controls (49.0398,171.34) and (53.7898,163.86)..(53.7898,158.38)
+ ..controls (53.7898,152.91) and (46.3799,148.09)..(51.1299,143.98)
+ ..controls (55.8799,139.88) and (59.2598,136.5)..(50.4099,136.5)
+ ..controls (41.5498,136.5) and (34.0598,134.41)..(34.0598,134.41)
+ --(38.8198,143.98)--cycle;
+drawoptions (withcolor (0,0.8,0));
+fill (254.6,137.86)..controls (254.6,145.42) and (251.14,148.16)..(254.6,155)
+ ..controls (257.98,161.84) and (261.44,170.7)..(261.44,170.7)
+ ..controls (261.44,170.7) and (262.74,170.7)..(262.74,165.94)
+ ..controls (262.74,161.12) and (268.93,156.3)..(268.93,156.3)
+ --(269.58,149.46)--(262.09,141.97)..controls (262.09,141.97) and (262.09,139.23)..(262.09,134.48)
+ ..controls (262.09,129.66) and (254.6,137.86)..(254.6,137.86)
+ --cycle;
+drawoptions (withcolor (0.95,0.95,0.95));
+fill (80.3599,197.34)..controls (117.8,197.34) and (98.0698,202.81)..(123.92,202.81)
+ ..controls (149.77,202.81) and (150.42,203.53)..(162.66,200.79)
+ ..controls (174.97,198.06) and (174.25,195.25)..(185.84,193.23)
+ ..controls (197.43,191.22) and (206.29,189.78)..(204.92,185.02)
+ ..controls (203.55,180.27) and (180.44,174.15)..(174.97,176.82)
+ ..controls (169.5,179.55) and (155.17,184.38)..(150.42,184.38)
+ ..controls (145.66,184.38) and (110.31,192.58)..(110.31,192.58)
+ ..controls (110.31,192.58) and (102.82,188.41)..(115.14,185.74)
+ ..controls (127.38,183.01) and (154.52,178.9)..(142.28,172.71)
+ ..controls (130.04,166.52) and (115.78,176.17)..(106.93,176.17)
+ ..controls (98.0698,176.17) and (85.1799,176.82)..(78.99,179.55)
+ ..controls (72.8699,182.29) and (61.2798,190.5)..(54.5098,193.95)
+ ..controls (47.6699,197.34) and (49.6899,205.54)..(59.2598,204.18)
+ ..controls (68.7698,202.81) and (80.3599,197.34)..(80.3599,197.34)
+ --cycle;
+drawoptions (withcolor (1,0.4,0));
+fill (14.3398,40.8098)..controls (21.8198,45.5598) and (32.7,53.0498)..(34.7798,56.5)
+ ..controls (36.7998,59.8899) and (37.45,49.6599)..(37.45,49.6599)
+ --(45.6599,57.1499)--(45.6599,47.6499)..controls (45.6599,47.6499) and (42.2,42.8198)..(39.5398,38)
+ ..controls (36.7998,33.25) and (22.47,18.2)..(22.47,18.2)
+ --(19.8098,25.0398)--(25.21,34.6199)--(23.8398,41.46)
+ --(12.25,35.26)--(14.3398,40.8098)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+fill (257.98,96.1799)--(278.43,94.8098)--(264.18,92.72)
+ --(255.25,92.72)--(257.98,96.1799)--cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+fill (215.14,102.37)..controls (215.14,102.37) and (217.16,100.28)..(220.54,100.28)
+ ..controls (224,100.28) and (230.77,99.5598)..(230.77,99.5598)
+ --(227.31,98.1899)--(215.79,97.5398)--(215.14,102.37)
+ --cycle;
+fill (193.98,104.38)--(204.92,104.38)--(203.55,100.93)
+ --(193.33,102.37)--(193.98,104.38)--cycle;
+drawoptions (withcolor (0,0.5,1));
+fill (266.12,11.8599)..controls (260.65,15.25) and (251.79,18.7)..(246.32,18.7)
+ ..controls (240.85,18.7) and (239.48,17.3398)..(230.62,17.3398)
+ ..controls (221.7,17.3398) and (212.91,15.97)..(206.07,17.3398)
+ ..controls (199.23,18.7) and (191.74,16.6199)..(186.92,16.6199)
+ ..controls (182.17,16.6199) and (183.54,11.1399)..(178.06,10.5)
+ ..controls (172.59,9.77979) and (171.94,5.66992)..(167.84,5.66992)
+ ..controls (163.74,5.66992) and (159.06,0.849854)..(168.49,0.849854)
+ ..controls (177.92,0.849854) and (266.12,0.699951)..(266.12,1.41992)
+ --(266.12,11.8599)--cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (1.01978,215.34)--(286.28,215.34)--(286.28,0.849854)
+ --(1.01978,0.849854)--(1.01978,215.34);
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398)
+ --(277.42,31.6599)--(286.28,31.6599)--cycle;
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 0.86bp;
+draw (286.28,31.6599)--(280.81,35.8398)--(277.42,35.8398)
+ --(277.42,31.6599)--(286.28,31.6599);
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 2.81bp;
+draw (69.2698,192.73)..controls (74.74,190.71) and (75.46,185.89)..(75.46,185.89)
+ --(81.5798,185.24);
+draw (62.1399,178.62)..controls (67.5398,176.6) and (69.7,176.89)..(69.7,176.89)
+ --(72.4399,180.27);
+draw (52.3499,196.11)..controls (57.8198,194.02) and (58.47,189.27)..(58.47,189.27)
+ --(61.21,192.66);
+drawoptions (withcolor (0,0,0));
+pickup pencircle scaled 2.23bp;
+draw (173.17,30.73)..controls (173.17,29.72) and (173.38,28.5)..(173.38,28.5)
+ --(175.18,29.0698);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (168.99,32.74)..controls (170.5,34.3999) and (171.51,33.1799)..(172.88,32.5298)
+ ..controls (174.25,31.8799) and (175.98,32.3098)..(175.11,31.23)
+ ..controls (174.32,30.22) and (168.56,29.3599)..(168.56,29.6499)
+ --(168.63,30.9399)--(168.13,31.6599)--(168.99,32.74)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (173.24,32.3098)..controls (173.24,33.3198) and (173.46,34.5398)..(173.46,34.5398)
+ --(175.33,33.97);
+drawoptions (withcolor (0,0,0));
+draw (184.33,24.3899)..controls (184.33,23.3799) and (184.54,22.1599)..(184.54,22.1599)
+ --(186.42,22.8098);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (180.22,26.4099)..controls (181.74,28.0598) and (182.67,26.8398)..(184.04,26.1899)
+ ..controls (185.41,25.5398) and (187.14,25.98)..(186.34,24.97)
+ ..controls (185.55,23.8899) and (179.72,23.0198)..(179.72,23.3098)
+ --(179.86,24.6099)--(179.29,25.3999)--(180.22,26.4099)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (184.47,25.98)..controls (184.47,26.98) and (184.69,28.21)..(184.69,28.21)
+ --(186.56,27.6299);
+drawoptions (withcolor (0,0,0));
+draw (195.7,34.8298)..controls (195.7,33.75) and (195.92,32.5298)..(195.92,32.5298)
+ --(197.79,33.1799);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (191.6,36.7798)..controls (193.04,38.5) and (194.05,37.2798)..(195.42,36.6299)
+ ..controls (196.78,35.9099) and (198.51,36.3398)..(197.72,35.3398)
+ ..controls (196.86,34.3298) and (191.1,33.46)..(191.1,33.6799)
+ --(191.24,35.0498)--(190.66,35.7698)--(191.6,36.7798)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (195.85,36.3398)..controls (195.85,37.4199) and (196.06,38.6499)..(196.06,38.6499)
+ --(197.94,38);
+drawoptions (withcolor (0,0,0));
+draw (198.44,26.26)..controls (198.44,25.1799) and (198.66,23.96)..(198.66,23.96)
+ --(200.53,24.6099);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (194.34,28.21)..controls (195.85,29.9399) and (196.78,28.71)..(198.15,28.0598)
+ ..controls (199.52,27.3398) and (201.25,27.7798)..(200.46,26.7698)
+ ..controls (199.66,25.76) and (193.83,24.8999)..(193.83,25.1099)
+ --(193.98,26.48)--(193.4,27.2)--(194.34,28.21)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (198.58,27.7798)..controls (198.58,28.8599) and (198.8,30.0798)..(198.8,30.0798)
+ --(200.67,29.4299);
+drawoptions (withcolor (0,0,0));
+draw (157.47,21.0798)..controls (157.47,20) and (157.76,18.7798)..(157.76,18.7798)
+ --(159.56,19.4199);
+drawoptions (withcolor (0.2,0.2,0.2));
+pickup pencircle scaled 0bp;
+fill (153.37,23.0198)..controls (154.88,24.75) and (155.82,23.5298)..(157.18,22.8799)
+ ..controls (158.62,22.1599) and (160.35,22.5898)..(159.49,21.5798)
+ ..controls (158.7,20.5798) and (152.86,19.71)..(152.86,19.9299)
+ --(153.01,21.2998)--(152.43,22.0198)--(153.37,23.0198)
+ --cycle;
+pickup pencircle scaled 2.23bp;
+draw (157.62,22.5899)..controls (157.62,23.6699) and (157.83,24.8999)..(157.83,24.8999)
+ --(159.7,24.25);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0.86bp;
+draw (114.85,113.6)--(114.85,109.71);
+draw (124.64,113.6)--(124.64,109.28);
+draw (135.01,113.46)--(135.01,109.93);
+draw (144.08,113.46)--(144.08,110.07);
+pickup pencircle scaled 0bp;
+fill (191.38,89.98)--(212.55,83.7898)--(212.55,78.3198)
+ --(219.39,72.1299)--(218.02,67.3799)--(204.34,74.22)
+ --(205.06,80.3398)--(192.1,85.8799)--(191.38,89.98)
+ --cycle;
+fill (275.98,73.5)--(263.02,76.95)--(258.27,71.48)
+ --(250.06,72.8499)--(248.7,67.3799)--(261.01,65.2898)
+ --(267.13,71.48)--(275.98,68.0999)--(275.98,73.5)
+ --cycle;
+drawoptions (withcolor (0.4,0.4,0.4));
+pickup pencircle scaled 0.86bp;
+draw (69.2698,75.5798)--(75.46,76.95);
+drawoptions (withcolor (0.3,0.3,0.3));
+draw (98.8599,77.6699)--(105.92,76.5198);
+drawoptions (withcolor (0.5,0.5,0.5));
+draw (72.9399,74.1399)--(76.3999,74.6499);
+drawoptions (withcolor (0.4,0.4,0.4));
+draw (101.17,75.4399)--(105.63,74.5);
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (15.0598,62.3398)--(16.5698,62.3398)..controls (17.0698,62.3398) and (17.4299,62.7)..(17.4299,63.2)
+ --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74)
+ --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799)
+ --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3398)..(15.0598,62.3398)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (15.0598,62.3399)--(16.5698,62.3399)..controls (17.0698,62.3399) and (17.4299,62.7)..(17.4299,63.2)
+ --(17.4299,67.8799)..controls (17.4299,68.3799) and (17.0698,68.74)..(16.5698,68.74)
+ --(15.0598,68.74)..controls (14.5498,68.74) and (14.1899,68.3799)..(14.1899,67.8799)
+ --(14.1899,63.2)..controls (14.1899,62.7) and (14.5498,62.3399)..(15.0598,62.3399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (13.3298,70.1099)--(18.0098,70.1099)..controls (18.5798,70.1099) and (19.0198,69.6799)..(19.0198,69.1799)
+ --(19.0198,67.95)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198)
+ --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.95)
+ --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1099)..(13.3298,70.1099)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 1.44bp;
+draw (13.3298,70.1098)--(18.0098,70.1098)..controls (18.5798,70.1098) and (19.0198,69.6799)..(19.0198,69.1799)
+ --(19.0198,67.9499)..controls (19.0198,67.45) and (18.5798,67.0198)..(18.0098,67.0198)
+ --(13.3298,67.0198)..controls (12.75,67.0198) and (12.3198,67.45)..(12.3198,67.9499)
+ --(12.3198,69.1799)..controls (12.3198,69.6799) and (12.75,70.1098)..(13.3298,70.1098)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95)
+ --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26)
+ --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76)
+ --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0.86bp;
+draw (62.3599,49.45)--(63.22,49.45)..controls (63.5098,49.45) and (63.73,49.6599)..(63.73,49.95)
+ --(63.73,52.76)..controls (63.73,53.0498) and (63.5098,53.26)..(63.22,53.26)
+ --(62.3599,53.26)..controls (62,53.26) and (61.8599,53.0498)..(61.8599,52.76)
+ --(61.8599,49.95)..controls (61.8599,49.6599) and (62,49.45)..(62.3599,49.45)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (61.3499,54.0598)--(64.0898,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48)
+ --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0898,52.1799)
+ --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298)
+ --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 1.44bp;
+draw (61.3499,54.0598)--(64.0899,54.0598)..controls (64.3799,54.0598) and (64.6599,53.8398)..(64.6599,53.48)
+ --(64.6599,52.8298)..controls (64.6599,52.47) and (64.3799,52.1799)..(64.0899,52.1799)
+ --(61.3499,52.1799)..controls (60.99,52.1799) and (60.7,52.47)..(60.7,52.8298)
+ --(60.7,53.48)..controls (60.7,53.8398) and (60.99,54.0598)..(61.3499,54.0598)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6099)..(120.1,51.97)
+ --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21)
+ --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7)
+ --(118.23,51.97)..controls (118.23,51.6099) and (118.38,51.46)..(118.74,51.46)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 0.86bp;
+draw (118.74,51.46)--(119.6,51.46)..controls (119.89,51.46) and (120.1,51.6098)..(120.1,51.97)
+ --(120.1,54.7)..controls (120.1,54.99) and (119.89,55.21)..(119.6,55.21)
+ --(118.74,55.21)..controls (118.38,55.21) and (118.23,54.99)..(118.23,54.7)
+ --(118.23,51.97)..controls (118.23,51.6098) and (118.38,51.46)..(118.74,51.46)
+ --cycle;
+drawoptions (withcolor (0.9,0.95,1));
+pickup pencircle scaled 0bp;
+fill (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199)
+ --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2)
+ --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798)
+ --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56)
+ --cycle;
+drawoptions (withcolor (0,0.2,1));
+pickup pencircle scaled 1.44bp;
+draw (117.73,56)--(120.46,56)..controls (120.75,56) and (120.97,55.7798)..(120.97,55.4199)
+ --(120.97,54.7798)..controls (120.97,54.49) and (120.75,54.2)..(120.46,54.2)
+ --(117.73,54.2)..controls (117.37,54.2) and (117.08,54.49)..(117.08,54.7798)
+ --(117.08,55.4199)..controls (117.08,55.7798) and (117.37,56)..(117.73,56)
+ --cycle;
+drawoptions (withcolor (0.6,0.3,0));
+pickup pencircle scaled 0bp;
+fill (51.7,90.3398)--(52.7798,90.3398)..controls (53.1399,90.3398) and (53.3599,90.6299)..(53.3599,90.99)
+ --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799)
+ --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998)
+ --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3398)..(51.7,90.3398)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 0.86bp;
+draw (51.7,90.3399)--(52.7798,90.3399)..controls (53.1399,90.3399) and (53.3599,90.6299)..(53.3599,90.99)
+ --(53.3599,94.2998)..controls (53.3599,94.6599) and (53.1399,94.8799)..(52.7798,94.8799)
+ --(51.7,94.8799)..controls (51.3398,94.8799) and (51.1299,94.6599)..(51.1299,94.2998)
+ --(51.1299,90.99)..controls (51.1299,90.6299) and (51.3398,90.3399)..(51.7,90.3399)
+ --cycle;
+drawoptions (withcolor (1,1,1));
+pickup pencircle scaled 0bp;
+fill (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5999)..(54.5098,95.24)
+ --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599)
+ --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799)
+ --(49.8298,95.24)..controls (49.8298,95.5999) and (50.1199,95.8899)..(50.48,95.8899)
+ --cycle;
+drawoptions (withcolor (0.3,0.3,0.3));
+pickup pencircle scaled 1.44bp;
+draw (50.48,95.8899)--(53.7898,95.8899)..controls (54.22,95.8899) and (54.5098,95.5998)..(54.5098,95.24)
+ --(54.5098,94.3799)..controls (54.5098,93.9399) and (54.22,93.6599)..(53.7898,93.6599)
+ --(50.48,93.6599)..controls (50.1199,93.6599) and (49.8298,93.9399)..(49.8298,94.3799)
+ --(49.8298,95.24)..controls (49.8298,95.5998) and (50.1199,95.8899)..(50.48,95.8899)
+ --cycle;
+drawoptions (withcolor (0.2,0.2,0.2));
+draw (53,92.6499)..controls (53,88.8298) and (55.2998,80.4099)..(57.5398,76.8799)
+ ..controls (59.7698,73.3498) and (63.5798,67.8799)..(63.5798,67.8799);
+pickup pencircle scaled 2.02bp;
+draw (63.1499,52.26)..controls (63.1499,52.26) and (57.0298,49.5198)..(41.98,52.98)
+ ..controls (26.9399,56.3599) and (16.8599,66.01)..(15.8498,66.2998);
+drawoptions (withcolor (0.9,0,0));
+pickup pencircle scaled 0bp;
+fill (87.7,123.46)--(94.5398,123.46)--(94.5398,113.89)
+ --(87.7,113.89)--(87.7,123.46)--cycle;
+endfig;
+end
+
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf
new file mode 100644
index 00000000000..118276b5dae
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-00.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png
new file mode 100644
index 00000000000..be41b9e2284
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-01.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png
new file mode 100644
index 00000000000..2a0b2de586b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-03.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png
new file mode 100644
index 00000000000..5487062fd97
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-04.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png
new file mode 100644
index 00000000000..e69c2877f61
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-07.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png
new file mode 100644
index 00000000000..e49426e89c4
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-08.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png
new file mode 100644
index 00000000000..f27252027f6
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-12.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png
new file mode 100644
index 00000000000..9e8d72e6c9d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-13.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png
new file mode 100644
index 00000000000..8c7ed6ae7bc
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-15.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png
new file mode 100644
index 00000000000..e22eab8dcfe
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-16.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png
new file mode 100644
index 00000000000..25a529b33f6
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-18.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png
new file mode 100644
index 00000000000..d1af184c48b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-19.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png
new file mode 100644
index 00000000000..28973888606
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-20.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png
new file mode 100644
index 00000000000..af876a5467d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-21.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png
new file mode 100644
index 00000000000..55ded4c358b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-22.png
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/mill.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png
index 9a1bf14e817..9a1bf14e817 100644
--- a/Master/texmf-dist/tex/context/sample/mill.png
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-23.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png
new file mode 100644
index 00000000000..47b4409e0b4
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-24.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png
new file mode 100644
index 00000000000..079b8556ad1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-25.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png
new file mode 100644
index 00000000000..f4294dc57bb
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/ma-cb-26.png
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf
new file mode 100644
index 00000000000..a75e7e4914d
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.tex
new file mode 100644
index 00000000000..1bde2de3cbe
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/graphics/minibook-en.tex
@@ -0,0 +1,20 @@
+\setuppapersize[A10][A10]
+\setuplayout[cutspace=2mm,backspace=6mm,width=15mm]
+\setupbodyfont[6pt]
+\setuppagenumbering[state=stop]
+\setupbackgrounds[text][text][background=color,backgroundcolor=orange]
+\setupbackgrounds[header,text,footer][leftmargin][background=color,backgroundcolor=lightgreen]
+\setupbackgrounds[header,text,footer][leftmargin,text,rightmargin][frame=on]
+\setupfootertexts[margin][\midaligned{l}][\midaligned{r}][\midaligned{r}][\midaligned{l}]
+\starttext
+\midaligned{design page} \page
+\setuppagenumbering[alternative={singlesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page} \page
+\setuppagenumbering[alternative={singlesided,doublesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page} \page
+\setuppagenumbering[alternative={doublesided}]
+\inmargin{\midaligned{m}}\midaligned{left page} \page
+\inmargin{\midaligned{m}}\midaligned{right page}
+\stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex
new file mode 100644
index 00000000000..1f5f1074447
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-abbreviations.tex
@@ -0,0 +1,7 @@
+\startenvironment ma-cb-abbreviations
+
+% a weird one: (\keycap) ... volledige lijst maken ... symbol
+
+\logo [Enter] {\type{Enter}}
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-colofon.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-colofon.tex
new file mode 100644
index 00000000000..feb77726a84
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-colofon.tex
@@ -0,0 +1,95 @@
+\startcomponent ma-cb-colophon
+
+\unprotect
+
+\startmakeup[\v!standard]
+
+ % This reference is needed for the interactive version.
+
+ \pagereference[colofon]
+
+ % We align the text in the middle.
+
+ \setupalign
+ [\v!middle]
+
+ % We use the default \framed macro but add a background. For most
+ % texts an offset of 20pt is adequate.
+
+ \defineframed
+ [colofon]
+ [\c!frame=\v!off,
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!align=\v!middle,
+ \c!offset=15pt]
+
+ \bfa \setupinterlinespace
+
+ \doifsomething {\documentvariable{author}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:author}:\space
+ \documentvariable{author}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \doifsomething {\documentvariable{translator}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:translations}:\space
+ \documentvariable{translator}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \doifsomething {\documentvariable{contributer}} {
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:contributions}:\space
+ \documentvariable{contributer}
+ \stopframed
+
+ \vfill
+
+ }
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:design}:\space
+ Hans Hagen
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon]
+ \labeltext{document:illustrations}:\space
+ Johan Jonker
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon][offset=25pt]
+ PRAGMA ADE\\
+ Ridderstraat 27\\
+ 8061GH Hasselt NL\\
+ www.pragma-ade.com
+ \stopframed
+
+ \vfill
+
+ \dontleavehmode \startframed[colofon]
+ \currentdate
+ \stopframed
+
+ \vfill
+
+\stopmakeup
+
+\protect
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-copyright.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-copyright.tex
new file mode 100644
index 00000000000..abb344eef44
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-copyright.tex
@@ -0,0 +1,41 @@
+\startcomponent ma-cb-copyright
+
+% The copyright page. English it is and english it will be.
+
+\unprotect
+
+\page
+ [\v!right]
+
+\startmakeup[\v!standard]
+
+ \switchtobodyfont
+ [\v!small]
+
+ \setupframed
+ [\c!frame=\v!off,
+ \c!width=.8\textwidth,
+ \c!align=\v!normal,
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!offset=30pt]
+
+ \vfill
+
+ \hfill \startframed
+ This document is produced with \CONTEXT\ \MKIV\ and \LUATEX. The source is edited
+ with \SCITE\ and previewed with \SUMATRAPDF.
+ \stopframed
+
+ \blank[3*\v!big]
+
+ \hfill \startframed
+ \copyright\ 1991\endash\currentdate[\v!year]\ PRAGMA ADE, Ridderstraat 27, 8061GH
+ Hasselt, The Netherlands, www.pragma-ade.com
+ \stopframed
+
+\stopmakeup
+
+\protect
+
+\stopcomponent
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-graphics.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-graphics.tex
new file mode 100644
index 00000000000..bb85c00314b
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-graphics.tex
@@ -0,0 +1,266 @@
+\startenvironment ma-cb-graphics
+
+% These graphics were made when I had little experience in MetaPost so
+% they are not that efficient or nicely codes. Sorry about that.
+
+\definecolor[ShapeDarkLine] [s=.4]
+\definecolor[ShapeDarkDots] [r=1]
+\definecolor[ShapeDarkEnd] [g=1]
+\definecolor[ShapeLightLine] [s=.95]
+\definecolor[ShapeLightDots] [r=.9,g=,5,b=.5]
+\definecolor[ShapeLightFill] [s=.95]
+\definecolor[ShapeLightFrame][r=.5,g=.50,b=.9]
+
+\startuseMPgraphic{basic-shape-dark}
+ color shapedotscolor ; shapedotscolor := \MPcolor{ShapeDarkDots} ;
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ \includeMPgraphic{basic-shape}
+\stopuseMPgraphic
+
+\startuseMPgraphic{basic-shape-light}
+ color shapedotscolor ; shapedotscolor := \MPcolor{ShapeLightDots} ;
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightLine} ;
+ \includeMPgraphic{basic-shape}
+\stopuseMPgraphic
+
+\startuseMPgraphic{basic-shape}
+ w := OverlayWidth ; width := 100 ; wfactor := w/width ;
+ h := OverlayHeight ; height := 100 ; hfactor := h/height ;
+ d := OverlayOffset ;
+ %
+ def random_delta (expr d) =
+ d - (uniformdeviate 2d)
+ enddef;
+ %
+ z1 = (0,height) ;
+ z2 = (0,0) ;
+ z3 = (width,0) ;
+ z4 = (width,height) ;
+ %
+ z5 = ( width+random_delta(.2width),height+random_delta(.2height)) ;
+ z6 = (.5width+random_delta(.1width),height+random_delta(.1height)) ;
+ %
+ pickup pencircle
+ xscaled (OverlayLineWidth/ wfactor)
+ yscaled (OverlayLineWidth/(2*hfactor))
+ rotated 30 ;
+ %
+ draw z5 .. z1 .. z2 .. z3 .. z4 .. z6 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ xscaled (OverlayLineWidth/wfactor)
+ yscaled (OverlayLineWidth/hfactor) ;
+ %
+ draw z1 withcolor shapedotscolor ;
+ draw z2 withcolor shapedotscolor ;
+ draw z3 withcolor shapedotscolor ;
+ draw z4 withcolor shapedotscolor ;
+ draw z5 withcolor shapedotscolor ;
+ draw z6 withcolor shapedotscolor ;
+ %
+ currentpicture := currentpicture xysized (w,h) ;
+\stopuseMPgraphic
+
+\startuniqueMPpagegraphic{chapter-state}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ %
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2*delta ;
+ height := (OverlayHeight - 2*delta) / 3 ;
+ %
+ z1 = (0,3height) ;
+ z2 = (0,2height) ;
+ z3 = (if not odd RealPageNumber : - fi width,1.5height) ;
+ z4 = (0,height) ;
+ z5 = (0,0) ;
+ %
+ pickup pencircle
+ xscaled delta
+ yscaled .5delta
+ rotated 30 ;
+ %
+ draw z1 -- z2{up} .. z3 .. {up} z4 -- z5 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ scaled delta ;
+ %
+ draw z1 withcolor red ;
+ draw z2 withcolor red ;
+ draw z3 withcolor red ;
+ draw z4 withcolor red ;
+ draw z5 withcolor red ;
+ %
+\stopuniqueMPpagegraphic
+
+\startreusableMPgraphic{pagenumber-state}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ %
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2delta ;
+ height := OverlayHeight - 2delta ;
+ lines := 5*OverlayOffset ;
+ %
+ z1 = (0,0) ;
+ z2 = (lines,0) ;
+ z3 = (.5width,height) ;
+ z4 = (width-lines,0) ;
+ z5 = (width,0) ;
+ %
+ pickup pencircle
+ xscaled delta
+ yscaled .5delta
+ rotated 30;
+ %
+ draw z1 -- z2 {dir 135} ... z3 ... {dir -135} z4 -- z5 withcolor shapelinecolor ;
+ %
+ pickup pencircle
+ scaled delta ;
+ %
+ draw z1 withcolor red ;
+ draw z2 withcolor red ;
+ draw z3 withcolor red ;
+ draw z4 withcolor red ;
+ draw z5 withcolor red ;
+ %
+\stopreusableMPgraphic
+
+\startreusableMPgraphic{manualsymbol}
+ logo_type := 401 ;
+ input "mp-prag" ;
+ currentpicture := currentpicture scaled 0.25 ;
+\stopreusableMPgraphic
+
+\startuseMPgraphic{frame-shape}
+ delta := OverlayOffset ;
+ width := OverlayWidth - 2delta ;
+ height := OverlayHeight - 2delta ;
+ %
+ vardef gamma =
+ g := OverlayOffset ; ((g/3) + (uniformdeviate (2g/3)))
+ enddef;
+ %
+ z1 = (0,0) ;
+ z2 = (width,0) ;
+ z3 = (width,height) ;
+ z4 = (0,height) ;
+ %
+ x12= .5[x1,x2] ; y12=y1 + gamma ;
+ y23= .5[y2,y3] ; x23=x2 - gamma ;
+ x34= .5[x3,x4] ; y34=y3 - gamma ;
+ y41= .5[y4,y1] ; x41=x4 + gamma ;
+ %
+ pickup pencircle
+ xscaled OverlayLineWidth
+ yscaled .5OverlayLineWidth
+ rotated 30;
+ %
+ path p;
+ p :=
+ z1..z12..z2 &
+ z2..z23..z3 &
+ z3..z34..z4 &
+ z4..z41..z1 &
+ cycle ;
+ %
+ fill p withcolor shapefillcolor ;
+ draw p withcolor shapelinecolor ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{setup-shape}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFrame} ;
+ color shapefillcolor ; shapefillcolor := \MPcolor{ShapeLightFill} ;
+ \includeMPgraphic{frame-shape}
+\stopuseMPgraphic
+
+% \startuseMPgraphic{setup-shape-x}
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFrame} ;
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeLightFill} ;
+% \includeMPgraphic{frame-shape}
+% \stopuseMPgraphic
+
+\startuniqueMPgraphic{note-rule}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+ %
+ draw bottomboundary OverlayBox withcolor shapelinecolor withpen pencircle scaled OverlayLineWidth ;
+ draw llcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ draw lrcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ %
+\stopuniqueMPgraphic
+
+\startuniqueMPgraphic{column-rule}
+ color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+ color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+ %
+ draw leftboundary OverlayBox withcolor shapelinecolor withpen pencircle scaled OverlayLineWidth ;
+ draw ulcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ draw llcorner OverlayBox withcolor shapeendcolor withpen pencircle scaled 3OverlayLineWidth ;
+ %
+\stopuniqueMPgraphic
+
+% alternative implemenation
+%
+% \startuniqueMPgraphic{column-rule}{height,linewidth}
+% color shapelinecolor ; shapelinecolor := \MPcolor{ShapeDarkLine} ;
+% color shapeendcolor ; shapeendcolor := \MPcolor{ShapeDarkEnd} ;
+% numeric shapelinewidth ; shapelinewidth := \MPvar{linewidth} ;
+% pair shapeboundary ; shapeboundary := (0,\MPvar{height}) ;
+% %
+% draw origin -- shapeboundary withcolor shapelinecolor withpen pencircle scaled shapelinewidth ;
+% draw origin withcolor shapeendcolor withpen pencircle scaled 3shapelinewidth ;
+% draw shapeboundary withcolor shapeendcolor withpen pencircle scaled 3shapelinewidth ;
+% %
+% \stopuniqueMPgraphic
+
+% todo
+
+% \startreusableMPgraphic{clip:six}
+% %
+% delta := OverlayOffset ;
+% height := OverlayWidth - delta ;
+% %
+% color green; green := (.1,.8,.1) ;
+% %
+% z1 = (0,0) ;
+% z2 = (0,height) ;
+% %
+% pickup pencircle
+% scaled OverlayLineWidth ;
+% %
+% draw z1 -- z2 withcolor .5white ;
+% %
+% pickup pencircle
+% scaled 3OverlayLineWidth ;
+% %
+% draw z1 withcolor green ;
+% draw z2 withcolor green ;
+% %
+% \stopreusableMPgraphic
+
+% \startreusableMPgraphic{clip:seven}
+% %
+% width := OverlayWidth ;
+% height := OverlayHeight ;
+% delta := OverlayOffset ;
+% %
+% color green ; green := (.1,.8,.1) ;
+% %
+% x1 = x4 = 0 ; x2 = x3 = width ;
+% y1 = y2 = 0 ; y3 = y4 = height ;
+% %
+% pickup pencircle
+% scaled OverlayLineWidth ;
+% %
+% draw z1 -- z2 -- z3 -- z4 -- cycle withcolor .white ;
+% %
+% pickup pencircle
+% scaled 3OverlayLineWidth ;
+% %
+% draw z1 withcolor green ;
+% draw z2 withcolor green ;
+% draw z3 withcolor green ;
+% draw z4 withcolor green ;
+% %
+% \stopreusableMPgraphic
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-links.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-links.tex
new file mode 100644
index 00000000000..d2e03944dc3
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-links.tex
@@ -0,0 +1,268 @@
+\startenvironment ma-cb-links
+
+% Links to external document for referencing.
+
+% --- www
+
+\useURL
+ [www:pragma]
+ [http://www.pragma-ade.com]
+ []
+ [Pragma ADE]
+
+\useURL
+ [www:garden]
+ [http://wiki.contextgarden.net]
+ []
+ [ConTeXt garden]
+
+\useURL
+ [www:showweb]
+ [http://texshow.contextgarden.net]
+ []
+ [Show-web]
+
+\useURL
+ [www:wiki-modules]
+ [http://wiki.contextgarden.net/Modules]
+ []
+ [Wiki Modules]
+
+\useURL
+ [www:supelec]
+ [https://foundry.supelec.fr]
+ []
+ [Supelec]
+
+\useURL
+ [www:dir]
+ [http://www.pragma-ade.com/dir/general]
+ []
+ [http://www.pragma-ade.com/dir/general]
+
+\useURL
+ [www:cstug]
+ [http://www.cstug.cz]
+ []
+ [\CSTUG]
+
+\useURL
+ [modul:storm]
+ [http://modules.contextgarden.net/stormfontsupport]
+ []
+ [http://modules.contextgarden.net/stormfontsupport]
+
+\useURL
+ [modul:storm-catalog]
+ [http://dl.contextgarden.net/modules/stormfontsupport/cont-storm-catalog.pdf]
+ []
+ [cont-storm-catalog.pdf]
+
+% --- usergroups
+
+\useURL
+ [list:context]
+ [http://www.ntg.nl/mailman/listinfo/ntg-context]
+ []
+ []
+
+\useURL
+ [group:tug]
+ [https://tug.org]
+ []
+ []
+
+\useURL
+ [group:ntg]
+ [www.ntg.nl]
+ []
+ []
+
+\useURL
+ [group:context]
+ [www.????]
+ []
+ []
+
+\useURL
+ [install]
+ [http://wiki.contextgarden.net/ConTeXt_Standalone]
+ []
+ []
+
+
+% --- manuals
+
+\useURL
+ [manual:general]
+ [http://www.pragma-ade.com/general/manuals/cont-eni.pdf]
+ []
+ [cont-eni.pdf]
+
+\useURL
+ [manual:metafun]
+ [http://www.pragma-ade.com/general/manuals/metafun-s.pdf]
+ []
+ [metafun-s.pdf]
+
+\useURL
+ [manual:columns]
+ [http://www.pragma-ade.com/general/manuals/columns.pdf]
+ []
+ [columns.pdf]
+
+\useURL
+ [manual:nattab]
+ [http://www.pragma-ade.com/general/manuals/enattab.pdf]
+ []
+ [enattab.pdf]
+
+\useURL
+ [manual:extab]
+ [http://www.pragma-ade.com/general/manuals/xtables-mkiv.pdf]
+ []
+ [xtables-mkiv.pdf]
+
+\useURL
+ [manual:details]
+ [http://www.pragma-ade.com/general/manuals/details.pdf]
+ []
+ [details.pdf]
+
+\useURL
+ [manual:fonts]
+ [http://www.pragma-ade.com/general/manuals/mfonts.pdf]
+ []
+ [mfonts.pdf]
+
+\useURL
+ [manual:charts]
+ [http://www.pragma-ade.com/general/manuals/mcharts.pdf]
+ []
+ [mcharts.pdf]
+
+\useURL
+ [manual:context]
+ [http://www.pragma-ade.com/general/manuals/cont-enp.pdf]
+ []
+ [cont-enp.pdf]
+
+\useURL
+ [manual:chemic]
+ [http://www.pragma-ade.com/general/manuals/mp-ch-en.pdf]
+ []
+ [mp-ch-en.pdf]
+
+\useURL
+ [manual:chemic-ex]
+ [http://www.pragma-ade.com/general/manuals/eppchtex.pdf]
+ []
+ [eppchtex.pdf]
+
+\useURL
+ [manual:labels]
+ [http://www.pragma-ade.com/general/manuals/mlabels.pdf]
+ []
+ [mlabels.pdf]
+
+\useURL
+ [manual:widgets]
+ [http://www.pragma-ade.com/general/manuals/mwidget.pdf]
+ []
+ [mwidget.pdf]
+
+\useURL
+ [manual:style]
+ [http://www.pragma-ade.com/general/manuals/style.pdf]
+ []
+ [style.pdf]
+
+\useURL
+ [manual:xml]
+ [http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf]
+ []
+ [xml-mkiv.pdf]
+
+\useURL
+ [manual:units]
+ [http://www.pragma-ade.com/general/manuals/units-mkiv.pdf]
+ []
+ [units-mkiv.pdf]
+
+\useURL
+ [manual:scite]
+ [http://www.pragma-ade.com/general/manuals/scite-context-readme.pdf]
+ []
+ [scite-context-readme.pdf]
+
+\useURL
+ [manual:qr-en]
+ [http://www.pragma-ade.com/general/qrcs/setup-en.pdf]
+ []
+ [setup-en.pdf]
+
+\useURL
+ [manual:qr-nl]
+ [http://www.pragma-ade.com/general/qrcs/setup-nl.pdf]
+ []
+ [setup-nl.pdf]
+
+\useURL
+ [manual:tools]
+ [http://www.pragma-ade.com/general/manuals/tools-mkiv.pdf]
+ []
+ [tools-mkiv.pdf]
+
+\useURL
+ [manual:figures]
+ [http://www.pragma-ade.com/general/manuals/xfigures-p.pdf]
+ []
+ [xfigures-p.pdf]
+
+\useURL
+ [manual:color]
+ [http://www.pragma-ade.nl/general/manuals/msplit.pdf]
+ []
+ [msplit.pdf]
+
+% --- magazins
+
+\useURL
+ [thisway:shapes]
+ [http://www.pragma-ade.com/general/myway/mag-0010.pdf]
+ []
+ [mag-0010.pdf]
+
+\useURL
+ [thisway:crossrefs]
+ [http://www.pragma-ade.com/general/magazines/mag-1103.pdf]
+ []
+ [mag-1103.pdf]
+
+\useURL
+ [thisway:proj-struc]
+ [http://www.pragma-ade.com/general/magazines/mag-1101.pdf]
+ []
+ [mag-1103.pdf]
+
+\useURL
+ [myway:nattab]
+ [http://www.pragma-ade.com/general/myway/NaturalTables.pdf]
+ []
+ [NaturalTables.pdf]
+
+\useURL
+ [myway:startalign]
+ [http://www.pragma-ade.com/general/myway/mathalign.pdf]
+ []
+ [mathalign.pdf]
+
+% AFO 2013: needed for example in manual
+
+\useURL
+ [loc:cityplan]
+ [http://www.stadindex.nl/plattegrond/hasselt]
+ []
+ []
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-screen.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-screen.tex
new file mode 100644
index 00000000000..c3af1f78357
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-screen.tex
@@ -0,0 +1,201 @@
+\startenvironment ma-cb-screen
+
+% This setups adds some functionality as well as redefines
+% some of the previously defined layout.
+
+\unprotect
+
+\definepapersize
+ [LocalPaperFormat]
+ [\c!width=28cm,
+ \c!height=21cm]
+
+\setuppapersize
+ [LocalPaperFormat]
+ [LocalPaperFormat]
+
+\setuplayout
+ [\c!location=\v!middle,
+ \c!topspace=.5cm,
+ \c!header=1.5cm,
+ \c!height=20cm,
+ \c!rightedge=5cm,
+ \c!rightedgedistance=1cm]
+
+\setupinteractionscreen
+ [\c!width=28cm,
+ \c!height=21cm,
+ \c!option=\v!max]
+
+% We place the pagenumber (not that useful in an interactive
+% document) somewhere else and the chapter number in the
+% footer.
+
+\setuppagenumbering
+ [\c!alternative=\v!singlesided,
+ \c!location=,
+ \c!command=\NummerCommando]
+
+\unexpanded\def\NummerCommando#1% uitlijnen op onderkant voet
+ {\hbox to \rightedgewidth
+ {\scratchcounter=\lastpage
+ \advance\scratchcounter by -\realpageno
+ \hskip0pt plus \realpageno cm
+ \framed
+ [\c!background=NummerAchtergrond,
+ \c!frame=\v!off,
+ \c!offset=4pt]%
+ {\lower.5\dp\strutbox\hbox spread 60pt{\hss\tx#1\hss}}% {\hss#1\hss}}%
+ \hskip0pt plus \scratchcounter cm}}
+
+\setupfootertexts
+ [\v!edge]
+ [][\v!pagenumber]
+
+\unexpanded\def\PlaatsHoofdstukStatus
+ {\determineheadnumber[\v!chapter]%
+ \ifnum\currentheadnumber>0
+ \hbox to \hsize
+ {\hss
+ \framed
+ [\c!background=NummerAchtergrond,
+ \c!frame=\v!off,
+ \c!offset=6pt]
+ {\lower.5\dp\strutbox\hbox spread 60pt
+ {\hss\getmarking[\v!chapter\v!number]\hss}}%
+ \hss}
+ \fi}
+
+\setupfootertexts
+ [\v!margin]
+ [][]
+
+\setupfootertexts
+ [\v!text]
+ [][\PlaatsHoofdstukStatus]
+
+\setupinteraction
+ [\c!state=\v!start,
+ \c!color=,
+ \c!menu=\v!on]
+
+% We let users click on the whole table of contents line and
+% provide some menus.
+
+\setuplist
+ [\v!chapter]
+ [\c!interaction=\v!all]
+
+\setupinteractionmenu
+ [\v!right]
+ [\c!state=\v!start,
+ \c!color=,
+ \c!offset=4pt,
+ \c!background=MenuAchtergrond,
+ \c!frame=\v!off]
+
+\startmode[**nl]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {inhoud[contents]},
+ {index[subind]},
+ {commando's[comind]},
+ {definities[comdefs]},
+ {colofon[colofon]},
+ {\vfill},
+ {stoppen[\v!CloseDocument]},
+ {\ZoekEnZoek{zoeken}},
+ {terug[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**en,**uk]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {contents[contents]},
+ {index[subind]},
+ {commands[comind]},
+ {definitions[comdefs]},
+ {colofon[colofon]},
+ {\vfill},
+ {exit[\v!CloseDocument]},
+ {\ZoekEnZoek{search}},
+ {go back[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**cz]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {obsah[contents]},
+ {rejst\rcaron\iacute k[subind]},
+ {seznam p\rcaron\iacute kaz\uring[comind]},
+ {definice p\rcaron\iacute kaz\uring[comdefs]},
+ {tir\aacute\zcaron[colofon]},
+ {\vfill},
+ {konec[\v!CloseDocument]},
+ {\ZoekEnZoek{vyhledej}},
+ {krok zp\ecaron t[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**fr]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {table des mati\egrave res[contents]},
+ {index[subind]},
+ {commandes[comind]},
+ {d\eacute finitions[comdefs]},
+ {colophon[colofon]},
+ {\vfill},
+ {quitter[\v!CloseDocument]},
+ {\ZoekEnZoek{recherche}},
+ {retour[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+\startmode[**vn]
+
+ \setupinteractionmenu
+ [\v!right]
+ [ {mục lục[contents]},
+ {bảng tra[subind]},
+ {lệnh[comind]},
+ {định nghĩa[comdefs]},
+ {trang cuối[colofon]},
+ {\vfill},
+ {thoát[\v!CloseDocument]},
+ {\ZoekEnZoek{tìm kiếm}},
+ {quay lại[\v!PreviousJump]},
+ {\HeenEnWeer}]
+
+\stopmode
+
+% This not that \TEX nical definition deals with the two sets
+% of buttons. Someday I'll make a general macro for this.
+
+\def\TwoMenuButtons#1[#2]#3[#4]%
+ {\hbox to \hsize
+ {\dimen0=\hsize
+ \advance\hsize by -12pt
+ \menubutton[\v!right][\c!width=.5\hsize]{#1}[#2]%
+ \hss
+ \menubutton[\v!right][\c!width=.5\hsize]{#3}[#4]}}
+
+\def\HeenEnWeer
+ {\TwoMenuButtons{--}[\v!previouspage]{+}[\v!nextpage]}
+
+\def\ZoekEnZoek#1%
+ {\TwoMenuButtons{#1}[\v!SearchDocument]{+}[\v!SearchAgain]}
+
+\protect
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-style.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-style.tex
new file mode 100644
index 00000000000..294e4a5cc7a
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb-style.tex
@@ -0,0 +1,678 @@
+% macros=mkvi
+
+\startenvironment ma-cb-style
+
+\usemodule[chart]
+
+\usemodule[s][abr-03]
+\usemodule[x][set-11]
+
+\unprotect
+
+% Setups are kind of special.
+
+\loadsetups[cont-\currentmainlanguage.xml]
+
+\setupsetup
+ [\c!criterium=\v!used]
+
+\setupframedtexts
+ [setuptext]
+ [\c!before={\blank[\v!big]},
+ \c!after={\blank[\v!big]},
+ \c!background=setup-shape,
+ \c!backgroundoffset=10pt,
+ \c!rulethickness=5pt,
+ \c!offset=15pt,
+ \c!frame=\v!off]
+
+\setupexternalfigures
+ [\c!directory={../graphics}]
+
+% The layout dimensions are based on the A4 paper dimensions because that way users
+% can print this manual themselves. Let's be economical with paper. We also assume a
+% decent doublesided A4 printer. We use equal margins so that a single sided run or
+% print also comes out all right.
+
+\setuplayout
+ [\c!backspace=22.5mm,
+ \c!width=\v!fit,
+ \c!cutspace=22.5mm,
+ \c!margin=20mm,
+ \c!margindistance=5mm,
+ \c!topspace=15mm,
+ \c!header=10mm,
+ \c!headerdistance=5mm,
+ \c!height=\v!fit,
+ \c!footerdistance=5mm,
+ \c!footer=15mm,
+ \c!bottomspace=15mm]
+
+\setuppagenumbering
+ [\c!alternative=\v!doublesided]
+
+% The lucida fonts look a bit more informal.
+
+\doifmodeelse {atpragma} {
+ \setupbodyfont[lucidaot,10pt]
+} {
+ \setupbodyfont[palatino,10pt]
+}
+
+% All colors will go here.
+
+% todo
+
+% Let's keep the text compact.
+
+\setupwhitespace
+ [\v!medium]
+
+\setupblank
+ [\v!medium]
+
+% We indent verbatim with the default indenting value.
+
+\setuptyping
+ [\c!margin=\v!standard,
+ \c!blank=\v!medium]
+
+% Manuals as usual need a bit more tolerance, because a lot of in||line verbatim is
+% used.
+
+\setuptolerance
+ [\v!verytolerant,\v!stretch]
+
+% This manual makes heavy use of backgrounds. During a run about many metaclips are
+% generated.
+
+\defineoverlay [chapter-state] [\uniqueMPpagegraphic{chapter-state}]
+\defineoverlay [pagenumber-state] [\uniqueMPgraphic{pagenumber-state}]
+
+\defineoverlay [basic-shape-light] [\useMPgraphic{basic-shape-light}]
+\defineoverlay [basic-shape-dark] [\useMPgraphic{basic-shape-dark}]
+
+\defineoverlay [setup-shape] [\useMPgraphic{setup-shape}]
+\defineoverlay [note-rule] [\uniqueMPgraphic{note-rule}]
+\defineoverlay [column-rule] [\uniqueMPgraphic{column-rule}]
+
+% \defineoverlay
+% [MenuAchtergrond]
+% [\MPclipTwoA{\overlaywidth}{\overlayheight}{3pt}{3pt}{red}{white}]
+
+\starttexdefinition unexpanded FootnoteRule
+ \blank[2*\v!big]
+ \framed
+ [\c!background=note-rule,
+ \c!width=.4\makeupwidth,
+ \c!height=2pt,
+ \c!offset=\v!overlay,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off]
+ {}
+ \blank[\v!small]
+\stoptexdefinition
+
+\setupfootnotes
+ [\c!rule=off,
+ \c!before=\FootnoteRule]
+
+% Chapter titles have a fancy shape around them. Because we have a lot of small
+% chapters, we don't go to a new page. Titles look the same, but there we go to
+% a new page.
+
+\setuphead
+ [\v!chapter]
+ [\c!command=\HeadCommand,
+ \c!page=,
+ \c!before={\blank[3*\v!big]},
+ \c!after={\blank[2*\v!big,\v!samepage]}]
+
+\setuphead
+ [\v!title]
+ [\c!page=\v!right]
+
+\starttexdefinition unexpanded HeadCommand #number #title
+ \alignedline {\v!outer} {\v!left} {
+ \framed [
+ \c!background=basic-shape-dark,
+ \c!rulethickness=10pt,
+ \c!frame=\v!off,
+ \c!strut=\v!no,
+ \c!offset=24pt,
+ \c!align=\v!middle
+ ] {
+ \doifmode {*\v!sectionnumber} {
+ #number
+ \kern.5em
+ \blackrule [
+ color=green,
+ width=1pt,
+ height=1.5\ht\strutbox,
+ depth=1.25\dp\strutbox
+ ]
+ \kern.5em
+ }
+ #title
+ }
+ }
+\stoptexdefinition
+
+% The current chapter number is typeset in the (outer) margin and slowly moves
+% down. We could have directly put it in the margin but using the footermargin as
+% starting point works better. This is an old command and there is no reason to
+% change the definition to more fabce MkIV version.
+
+\setupfootertexts
+ [\v!margin]
+ [][\fastsetup{chapterindicator}]
+
+\startsetups chapterindicator
+ \determineheadnumber[\v!chapter]
+ \ifcase\currentheadnumber\else
+ \vbox to \makeupheight {
+ \scratchcounter=\numexpr\lastpage-\realpageno\relax
+ \vskip2cm
+ \vskip0pt plus \realpageno cm
+ \framed [
+ \c!background=chapter-state,
+ \c!width=36pt,
+ \c!height=72pt,
+ \c!backgroundoffset=5pt,
+ %\c!align={\v!lohi,\v!middle},
+ \c!frame=\v!off
+ ] {
+ \lower.5\dp\strutbox\hbox {
+ \bfb
+ \getmarking[\v!chapter\v!number]
+ }
+ }
+ \vskip0pt plus \scratchcounter cm
+ \vskip2cm
+ }
+ \fi
+\stopsetups
+
+% The index is put on a double collumned grid. The numbers is surrounded by a
+% shape.
+
+\setupregister
+ [\v!index]
+ [\c!command=\IndexCommand,
+ \c!before={\blank[\v!line]},
+ \c!after=]
+
+\starttexdefinition unexpanded IndexCommand #text
+ \framed [
+ \c!background=basic-shape-dark,
+ \c!width=36pt,
+ \c!frame=\v!off,
+ \c!offset=4pt,
+ \c!align=\v!middle,
+ \c!rulethickness=4pt
+ ] {
+ #text
+ }
+\stoptexdefinition
+
+% When bound, we use a double sided layout and put the pagenumber in the margin,
+% enhanced by a fancy background.
+
+\setuppagenumbering
+ [\c!location={\v!footer,\v!middle},
+ \c!command=\PageNumberCommand]
+
+\starttexdefinition unexpanded PageNumberCommand #pagenumber
+ \framed [
+ \c!background=pagenumber-state,
+ \c!backgroundoffset=5pt,
+ \c!frame=\v!off,
+ \c!offset=6pt
+ ] {
+ \lower.5\dp\strutbox\hbox spread 60pt {
+ \hss
+ #pagenumber
+ \hss
+ }
+ }
+\stoptexdefinition
+
+% We put the chapter title in the head. If we wouldn't have to center, the more
+% simple setting would be:
+
+\setupheadertexts
+ [{\getmarking[\v!chapter]}]
+
+% Guess what the next one does.
+
+\setupitemgroup
+ [\v!itemize]
+ [1]
+ [\v!autointro]
+
+% The coverpage looks more complex than it is. We can reuse it.
+
+\newbox\CoverBackgroundBox % reuse saves .8 sec, could be an object!
+
+\starttexdefinition unexpanded ShowSetupOnCover #n #tag #xmlroot
+ \dontleavehmode
+ \framed [
+ \c!background=basic-shape-light,
+ \c!backgroundoffset=5pt,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off
+ ] {
+ \xmlsetup{#xmlroot}{xml:setups:assemblename}
+ \tttf
+ \texescape\currentSETUPfullname
+ }
+ \hskip1.25em plus 1em minus 1em\relax
+\stoptexdefinition
+
+% \startsetups coverbackground
+%
+% \ifvoid\CoverBackgroundBox
+%
+% \global\setbox\CoverBackgroundBox=\vbox to \paperheight \bgroup
+% \hsize\paperwidth
+% \emergencystretch3em
+% \parfillskip0pt
+% \switchtobodyfont
+% [6pt]
+% \baselineskip 0pt plus 1pt minus 1pt
+% \setupsorting
+% [texcommand]
+% [\c!command=\ShowSetupOnCover,
+% \c!criterium=\v!all]
+% \beginofshapebox
+% \leftskip3pt
+% \rightskip3pt
+% \placelistofsorts
+% [texcommand]
+% \endofshapebox
+% \doreshapebox
+% {\box\shapebox}
+% {\penalty\shapepenalty}
+% {\kern\shapekern}
+% {\vfil}
+% \kern3pt
+% \vfilneg
+% \flushshapebox
+% \vfilneg
+% \kern3pt
+% \egroup
+%
+% \fi
+%
+% \copy\CoverBackgroundBox
+%
+% \stopsetups
+
+\startsetups coverbackground
+
+ \ifvoid\CoverBackgroundBox
+
+ \global\setbox\CoverBackgroundBox
+ \startnicelyfilledbox
+ [\c!width=\paperwidth,
+ \c!height=\paperheight,
+ \c!offset=\exheight,
+ \c!strut=\v!no]
+ \switchtobodyfont
+ [6pt]
+ \placelistofsorts
+ [texcommand]
+ [\c!command=\ShowSetupOnCover,
+ \c!criterium=\v!all]
+ \stopnicelyfilledbox
+
+ \fi
+
+ \copy\CoverBackgroundBox
+
+\stopsetups
+
+\defineoverlay[coverbackground][\setups{coverbackground}]
+
+\setupdocument
+ [author={Ton Otten\crlf PRAGMA ADE},
+ translator=,
+ contributer=,
+ before=\setups{coverpage},
+ after=\setups{backpage}]
+
+\defineoverlay[gotocontents][\overlaybutton{contents}]
+
+\startsetups coverpage
+
+ \setupbackgrounds
+ [\v!rightpage]
+ [\c!background=coverbackground]
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!background=gotocontents]
+
+ \startmakeup
+ [\v!standard]
+ [\c!doublesided=\v!empty,
+ \c!headerstate=\v!none,
+ \c!footerstate=\v!none]
+
+ \hbox to \hsize \bgroup
+ \hss
+ \definedfont[SansBold*default at 40pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=15pt,
+ \c!align=\v!middle,
+ \c!offset=40pt]
+ {\documentvariable{title}}
+ \egroup
+
+ \vfill
+
+ \doifsomething {\documentvariable{subtitle}} {
+
+ \hbox to \hsize \bgroup
+ \definedfont[SansBold*default at 14pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=10pt,
+ \c!align=\v!middle,
+ \c!offset=20pt]
+ {\documentvariable{subtitle}}
+ \hss
+ \egroup
+
+ }
+
+ \hbox to \hsize \bgroup
+ \hss
+ \definedfont[SansBold*default at 20pt]
+ \framed
+ [\c!background=basic-shape-dark,
+ \c!frame=\v!off,
+ \c!rulethickness=12.5pt,
+ \c!align=\v!middle,
+ \c!offset=35pt]
+ {\documentvariable{author}}
+ \egroup
+
+ \stopmakeup
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!background=]
+
+ \setupbackgrounds
+ [\v!rightpage]
+ [\c!background=]
+
+ \doifmode {screen} {
+
+ \setupbackgrounds
+ [\v!page]
+ [\c!background=\v!screen,
+ \c!backgroundscreen=.95]
+
+ \setupbackgrounds
+ [\v!text]
+ [\v!text]
+ [\c!backgroundoffset=.25cm,
+ \c!depth=.125cm,
+ \c!background=\v!color,
+ \c!backgroundcolor=white]
+
+ }
+
+ \component[ma-cb-copyright]
+
+\stopsetups
+
+% The backpage uses the same background and overlays a piece of text.
+
+\startsetups backpage
+
+ \page
+ [\v!yes,\v!blank,\v!right]
+
+ \component[ma-cb-colofon]
+
+ \page
+ [\v!yes,\v!blank,\v!left]
+
+ \setupbackgrounds
+ [\v!leftpage]
+ [\c!background=coverbackground]
+
+ \startmakeup
+ [\v!standard]
+ [\c!page=,
+ \c!doublesided=\v!no,
+ \c!headerstate=\v!none,
+ \c!footerstate=\v!none]
+
+ \setuptolerance
+ [\v!verytolerant]
+
+ \vfill
+
+ \hbox to \hsize \bgroup
+
+ \framed
+ [\c!background=\v!color,
+ \c!backgroundcolor=white,
+ \c!frame=\v!off,
+ \c!offset=10pt,
+ \c!corner=\v!round,
+ \c!width=.4\makeupwidth,
+ \c!height=\textheight,
+ \c!align=\v!middle,
+ \c!strut=\v!no]
+ {
+ \vfil
+ \component[ma-cb-en-backpage]
+ \vfil
+ }
+
+ \hss
+
+ \egroup
+
+ \vfill
+
+ \stopmakeup
+
+\stopsetups
+
+% To save space we don't start chapters on a new page, except in appendices and the
+% introduction. These settings happen in dedicated setups sections (see later). We
+% also add some white space between table of content entries.
+
+\setupsectionblock [\v!frontpart] [\c!page=\v!right,\c!before=\setups{frontpart}]
+\setupsectionblock [\v!bodypart] [\c!page=\v!right,\c!before=\setups{bodypart}]
+\setupsectionblock [\v!appendix] [\c!page=\v!right,\c!before=\setups{appendix}]
+\setupsectionblock [\v!backpart] [\c!page=\v!right,\c!before=\setups{backpart}]
+
+\setuplist
+ [\v!chapter]
+ [\c!criterium=\v!all,
+ \c!before=,
+ \c!after=]
+
+\startsetups frontpart
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:contents}]
+
+ \startmixedcolumns[documentcolumns]
+ \placelist[\v!chapter]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \page[\v!right]
+
+\stopsetups
+
+\startsetups bodypart
+
+ \setuphead[\v!chapter][\c!page=]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+\stopsetups
+
+\startsetups appendix
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:commanddefinitions},\c!reference=commandsetups]
+
+ \component[ma-cb-\currentmainlanguage-commandlist]
+
+ \blank[2*\v!big]
+
+ \start
+
+ \switchtobodyfont[8pt]
+
+ \startmixedcolumns[documentcolumns]
+ \placelistofsorts[texcommand]
+ \stopmixedcolumns
+
+ \stop
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:commandindex}]
+
+ \startmixedcolumns[documentcolumns]
+ \placeregister[Command]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:subjectindex}]
+
+ \startmixedcolumns[documentcolumns]
+ \placeregister[\v!index]
+ \stopmixedcolumns
+
+ \stopnamedsection
+
+ \startnamedsection[\v!chapter][\c!title=\labeltext{document:supportandreading}]
+
+ \index{support}
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:support}]
+
+ \component[ma-cb-\currentmainlanguage-support]
+
+ \stopnamedsection
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:manuals}]
+
+ % this will be done from a bib file
+
+ \startlines
+ \goto {Chemical Formulas in \CONTEXT} [ url (manual:chemic-ex) ]
+ \goto {Color Separation} [ url (manual:color) ]
+ \goto {Columns} [ url (manual:columns) ]
+ \goto {\CONTEXT, the manual} [ url (manual:context) ]
+ \goto {Dealing with \XML} [ url (manual:xml) ]
+ \goto {Extreme Tables} [ url (manual:extab) ]
+ \goto {Figures} [ url (manual:figures) ]
+ \goto {Fonts in \CONTEXT} [ url (manual:fonts) ]
+ \goto {luatools, mtxrun, context} [ url (manual:tools) ]
+ \goto {\METAFUN\ manual} [ url (manual:metafun) ]
+ \goto {Natural Tables} [ url (manual:nattab) ]
+ \goto {\PPCHTEX\ Manual} [ url (manual:chemic) ]
+ \goto {Quick Reference (dutch)} [ url (manual:qr-nl) ]
+ \goto {Quick Reference (english)} [ url (manual:qr-en) ]
+ \goto {\SCITE\ in \CONTEXT} [ url (manual:scite) ]
+ \goto {Units} [ url (manual:units) ]
+ \goto {Widgets} [ url (manual:widgets) ]
+ \stoplines
+
+ \stopnamedsection
+
+ \startnamedsection[\v!section][\c!title=\labeltext{document:magazines}]
+
+ % this will be done from a bib file
+
+ \startlines
+ \goto {\CONTEXT\ Magazine 1103} [ url (thisway:crossrefs) ]
+ \goto {Project structure} [ url (thisway:proj-struc) ]
+ \stoplines
+
+ \stopnamedsection
+
+ \stopnamedsection
+
+\stopsetups
+
+\startsetups backpart
+
+ \setuphead[\v!chapter][\c!page=\v!right]
+
+ \writebetweenlist[\v!chapter]{\blank}
+
+\stopsetups
+
+% In normal documents one will never find awful things like below. Because we want
+% an international setup, we just call the chapters in an indirect way.
+
+% We draw a nice line between columns. The next command does the job. Of course a
+% normal line can be set more easily, but here we hook in a command.
+
+\installmixedcolumnseparator{ColumnRule}%
+ {\framed
+ [\c!background=column-rule,
+ \c!height=\mixedcolumnseparatorheight,
+ \c!depth=\mixedcolumnseparatordepth,
+ \c!width=\mixedcolumnseparatorwidth,
+ \c!offset=\v!overlay,
+ \c!rulethickness=2pt,
+ \c!frame=\v!off]
+ {}}
+
+% alternative implemenation
+%
+% \installmixedcolumnseparator{ColumnRule}%
+% {\lower\mixedcolumnseparatordepth\hbox{\uniqueMPgraphic
+% {column-rule}%
+% {height=\the\dimexpr\mixedcolumnseparatorheight+\mixedcolumnseparatordepth,linewidth=2pt}}}
+
+\setupmixedcolumns
+ [\c!n=2,
+ \c!distance=36pt,
+ \c!separator=ColumnRule]
+
+\definemixedcolumns
+ [documentcolumns]
+ [\c!n=2,
+ \c!distance=36pt,
+ \c!separator=ColumnRule]
+
+\defineregister
+ [Command]
+
+\setupregister
+ [Command]
+ [\c!indicator=\v!off,
+ c!before={\blank[\v!line]}]
+
+\protect
+
+\stopenvironment
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb.tex b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb.tex
new file mode 100644
index 00000000000..7f23597a1bd
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/start/ma-cb.tex
@@ -0,0 +1,17 @@
+\startproject ma-cb
+
+ \environment ma-cb-language
+
+ \environment ma-cb-abbreviations
+ \environment ma-cb-graphics
+ \environment ma-cb-style
+ \environment ma-cb-links
+
+ \startmode[screen]
+ \environment ma-cb-screen
+ \stopmode
+
+ \product ma-cb-en
+ \product ma-cb-nl
+
+\stopproject
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/templates/templates-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/templates/templates-mkiv.tex
new file mode 100644
index 00000000000..9361d1a8d30
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/templates/templates-mkiv.tex
@@ -0,0 +1,273 @@
+% language=uk
+
+% author : Hans Hagen, PRAGMA ADE, NL
+% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported
+
+\usemodule[art-01,abr-02]
+
+\definecolor[maincolor] [r=.4]
+\definecolor[extracolor][b=.4]
+
+\setupbodyfont
+ [10pt]
+
+\usesymbols
+ [cc]
+
+\setuptyping
+ [color=extracolor]
+
+\setuptype
+ [color=extracolor]
+
+\setuphead
+ [section]
+ [color=maincolor]
+
+\setupinteraction
+ [hidden]
+
+\startdocument
+ [metadata:author=Hans Hagen,
+ metadata:title=LMX Templates,
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ location=Hasselt NL,
+ title=LMX Templates,
+ extra-1=LMX,
+ extra-2=TEMPLATES,
+ extra-3=HANS HAGEN,
+ support=www.contextgarden.net,
+ website=www.pragma-ade.nl]
+
+\startMPpage
+
+ StartPage;
+
+ numeric n, m ; n := 3 * 4 ; m := 4 * 4 ;
+ numeric w, h ; w := PaperWidth/n ; h := PaperHeight/m ;
+ numeric max ; max := 20 ;
+
+ for i=1 upto n :
+ for j=1 upto m :
+ fill
+ unitsquare
+ xysized (w,h)
+ shifted ((i-1)*w,(j-1)*h)
+ withcolor (.5[red,blue] randomized(.75,.75,.75))
+ ;
+ endfor ;
+ endfor ;
+
+ path p ; p := Page enlarged -5mm ;
+
+ pair a[] ; % <
+
+ a[1] := .80[lrcorner p,urcorner p] ;
+ a[2] := .50[llcorner p,ulcorner p] ;
+ a[3] := .20[lrcorner p,urcorner p] ;
+
+ pair b[] ; % \
+
+ b[1] := ulcorner p ;
+ b[2] := center p ;
+ b[3] := lrcorner p ;
+
+ path c[] ; % from < (xml) to \ (tex)
+
+ c[1] := a[1] .. b[1] ;
+ c[2] := a[2] .. b[2] ;
+ c[3] := a[3] .. b[3] ;
+
+ linecap := butt ;
+
+ numeric fraction ;
+
+ for i=1 step 1 until max :
+ fraction := i/max ;
+ draw
+ ((point fraction along c[1]) -- (point fraction along c[2]) -- (point fraction along c[3]))
+ withpen pencircle scaled 5mm
+ withcolor .75[(max+1-i)*green/n,i*yellow/max]
+ withtransparency (1,.5)
+ ;
+ endfor ;
+
+ draw
+ textext.rt("\ssbf{\documentvariable{extra-1}}")
+ xsized (7w)
+ shifted (.8w,3h)
+ withcolor white
+ ;
+
+ draw
+ textext.rt("\ssbf{\documentvariable{extra-2}}")
+ xsized (8w)
+ shifted (w,h)
+ withcolor white
+ ;
+
+ draw
+ textext.ulft("\ssbf{\documentvariable{extra-3}}")
+ rotated 90
+ ysized (5.9h)
+ shifted (PaperWidth-1.2w,PaperHeight/2+2.95h)
+ withcolor white
+ ;
+
+ StopPage;
+
+\stopMPpage
+
+\startsubject[title={Contents}]
+
+\placelist[section][criterium=all,interaction=all]
+
+\stopsubject
+
+\startsection [title={Introduction}]
+
+{\em This manual is not finished yet. The main reason is that what is described
+here is an afternoon experiment resulting in a dozen lines of \LUA\ glue code
+that builds upon an already existing mechanism. When users like this, I will
+extend the basic \LMX\ handler to suit the \TEX\ end better. There will also be
+also support for cache based and in||document templates.)}
+
+The acronym \type {lmx} stands for document that are a mix of \LUA\ and \XML\ and
+is just the three letters \type {xml} reversed. Such documents showed up pretty
+soon in \MKIV\ while I was exploring ways to present debugging and error
+information to users using \XML. As a consequence this is one of the older
+mechanisms available, although I doubt if users start looking for it when they
+start using \CONTEXT.
+
+Anyhow, because we also use \LMX\ for populating web pages, at some point I wondered
+if using the same approach for \TEX\ files made sense. I'm still not sure about it
+but who knows where this ends up. Currently code is shared but in the future we might
+end up with a variant that adds some more flexibility.
+
+\stopsection
+
+\startsection [title={How it works}]
+
+First of all, using this mechanism involves yet another kind of \type {mk}, so
+now we have:
+
+\starttabulate[|TB||]
+\HL
+\NC mkii \NC The old version of \CONTEXT, using \PDFTEX,\XETEX, etc. \NC \NR
+\HL
+\NC mkiv \NC The new version of \CONTEXT, using \LUATEX. \NC \NR
+\NC mkvi \NC Similar to \MKIV\ but with named macro parameters. \NC \NR
+\HL
+\NC mkix \NC A \MKIV\ file mixed with \LUA\ wrapped in \XML\ processing instructions. \NC \NR
+\NC mkxi \NC Similar to \MKIX\ but with named macro parameters. \NC \NR
+\HL
+\stoptabulate
+
+The nice thing about sticking to wrapping in angle brackets is that it plays nice
+with syntax highlighting. Before we show an example of such a mix, we first point
+out that loading (and thereby conversion) happens automatically. A \type {mkix} or
+\type {mkxi} file is just a regular \CONTEXT\ file. In the test suite there
+is a demo file that can be included like this:
+
+\starttyping
+\input lmxlike-001.mkxi
+\stoptyping
+
+This file is loaded and converted on the fly. No caching takes place, but in due time
+we can use the cache built into the \LMX\ handlers if needed. The template itself
+can be fed with variables in the \type {document} namespace:
+
+\starttyping
+\starttext
+
+ \startluacode
+ document.variables.text = "set"
+ \stopluacode
+
+ \input lmxlike-001.mkxi
+
+\stoptext
+\stoptyping
+
+Instead of a special suffix, you can also force conversion with the \type {macros}
+directive:
+
+\starttyping
+% macros=mkix
+\stoptyping
+
+Part of the mentioned looks as follows:
+
+\starttyping
+\bTABLE
+ <?lua for i=1,40 do ?>
+ \bTR
+ <?lua for j=1,5 do ?>
+ \bTD
+ cell (<?lua inject(i) ?>,<?lua inject(j)?>)
+ is <?lua inject(variables.text or "unset") ?>
+ \eTD
+ <?lua end ?>
+ \eTR
+ <?lua end ?>
+\eTABLE
+\stoptyping
+
+The \type {<?lua ... ?>} command is conceptually different from (say) \type
+{\ctxlua} in the sense that the later executes some \LUA\ code at that spot,
+while in a template a \LUA\ function is constructed out of the whole that gets
+executed. In fact, we use \LUA\ to construct an input file.
+
+For the moment we only mention the predefined \type {inject} command. There are
+some more but they make more sense for \XML\ and \HTML\ and in due time this will
+be decoupled so that we can have dedicated helpers. Even the \XML\ and \HTML\
+part is somewhat in flux.
+
+The previous example can of course also be done differently. It's a matter of
+taste and usage what method gets used:
+
+\starttyping
+\startluacode
+ context.bTABLE()
+ for i=1,40 do
+ context.bTR()
+ for j=1,5 do
+ context.bTD()
+ context("cell (%s,%s) is %s",i,j,document.variables.text or "unset")
+ context.eTD()
+ end
+ context.eTR()
+ end
+ context.eTABLE()
+\stopluacode
+\stoptyping
+
+The difference between a \MKIX\ and \MKXI\ file is the same as between a \MKIV\
+and \MKVI\ file: the way macros can be defined:
+
+\starttyping
+\def\testmacro#one#two{[#one,#two]}
+
+\testmacro{1}{2}
+\testmacro{one}{two}
+\testmacro{second}{first}
+\stoptyping
+
+In practice one will seldom need macro definitions in a template file but the
+possibility is provided.
+
+\stopsection
+
+\startsubject[title={Colofon}]
+
+\starttabulate[|B|p|]
+\NC author \NC \getvariable{document}{author}, \getvariable{document}{affiliation}, \getvariable{document}{location} \NC \NR
+\NC version \NC \currentdate \NC \NR
+\NC website \NC \getvariable{document}{website} \endash\ \getvariable{document}{support} \NC \NR
+\NC copyright \NC \symbol[cc][cc-by-sa-nc] \NC \NR
+\stoptabulate
+
+\stopsubject
+
+\stopdocument
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/workflows/workflows-injectors.tex b/Master/texmf-dist/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
index d2f837d8236..daae11c82f9 100644
--- a/Master/texmf-dist/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/workflows/workflows-injectors.tex
@@ -84,3 +84,19 @@ and
\stopchapter
\stopcomponent
+
+% to be described:
+
+% \setinjector[register][3][\column]
+% \setinjector[list] [2][{\blank[3*big]}]
+
+% \starttext
+% \placelist[section][criterium=text]
+% \blank[3*big]
+% \placeregister[index][criterium=text]
+% \page
+% \startsection[title=Alpha] first \index{first} \stopsection
+% \startsection[title=Beta] second \index{second} \stopsection
+% \startsection[title=Gamma] third \index{third} \stopsection
+% \startsection[title=Delta] fourth \index{fourth} \stopsection
+% \stoptext
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml
new file mode 100644
index 00000000000..c2feac218a5
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-01.xml
@@ -0,0 +1,15 @@
+<name>Land Of Dreams</name>
+<tracks>
+ <track length="248">Dixie Flyer</track>
+ <track length="212">New Orleans Wins The War</track>
+ <track length="218">Four Eyes</track>
+ <track length="181">Falling In Love</track>
+ <track length="187">Something Special</track>
+ <track length="168">Bad News From Home</track>
+ <track length="207">Roll With The Punches</track>
+ <track length="209">Masterman And Baby J</track>
+ <track length="134">Follow The Flag</track>
+ <track length="246">I Want You To Hurt Like I Do</track>
+ <track length="248">It&apos;s Money That Matters</track>
+ <track length="156">Red Bandana</track>
+</tracks>
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml
new file mode 100644
index 00000000000..997123ad6fb
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv-02.xml
@@ -0,0 +1,15 @@
+<name>Bad Love</name>
+<tracks>
+ <track length="340">My Country</track>
+ <track length="295">Shame</track>
+ <track length="205">I&apos;m Dead (But I Don&apos;t Know It)</track>
+ <track length="213">Every Time It Rains</track>
+ <track length="206">The Great Nations of Europe</track>
+ <track length="220">The One You Love</track>
+ <track length="164">The World Isn&apos;t Fair</track>
+ <track length="264">Big Hat, No Cattle</track>
+ <track length="243">Better Off Dead</track>
+ <track length="236">I Miss You</track>
+ <track length="126">Going Home</track>
+ <track length="180">I Want Everyone To Like Me</track>
+</tracks>
diff --git a/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv.tex b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv.tex
new file mode 100644
index 00000000000..42ec7df9ac1
--- /dev/null
+++ b/Master/texmf-dist/doc/context/sources/general/manuals/xml/xml-mkiv.tex
@@ -0,0 +1,3735 @@
+% language=uk
+
+% to be checked:
+%
+% \Ux in index
+%
+% undocumented:
+%
+% \processXMLbuffer
+% \processxmlbuffer
+% \processxmlfile
+%
+% kind of special ... tricky explanation needed:
+%
+% \xmldirect
+
+\input lxml-ctx.mkiv
+
+\settrue \xmllshowtitle
+\setfalse\xmllshowwarning
+
+\usemodule[set-11]
+
+\loadsetups[i-en-xml.xml]
+
+% \definehspace[squad][1em plus .25em minus .25em]
+
+\usemodule[abr-02]
+
+\setuplayout
+ [location=middle,
+ marking=on,
+ backspace=20mm,
+ cutspace=20mm,
+ topspace=15mm,
+ header=15mm,
+ footer=15mm,
+ height=middle,
+ width=middle]
+
+\setuppagenumbering
+ [alternative=doublesided,
+ location=]
+
+\setupfootertexts
+ [][pagenumber]
+
+\setupheadertexts
+ [][chapter]
+
+\setupheader
+ [color=colortwo,
+ style=bold]
+
+\setupfooter
+ [color=colortwo,
+ style=bold]
+
+\setuphead
+ [chapter]
+ [page={yes,header,right},
+ header=empty,
+ style=\bfc]
+
+\setupsectionblock
+ [page={yes,header,right}]
+
+\starttexdefinition unexpanded section:chapter:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<\enspace}#1\enspace>
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded section:section:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<<\enspace}#1\enspace>>
+ }
+\stoptexdefinition
+
+\starttexdefinition unexpanded section:subsection:number #1
+ \doifmode{*sectionnumber} {
+ \llap{<<<\enspace}#1\enspace>>>
+ }
+\stoptexdefinition
+
+\setuphead[chapter] [numbercolor=black,numbercommand=\texdefinition{section:chapter:number}]
+\setuphead[section] [numbercolor=black,numbercommand=\texdefinition{section:section:number}]
+\setuphead[subsection][numbercolor=black,numbercommand=\texdefinition{section:subsection:number}]
+
+\setuphead
+ [section]
+ [style=\bfa]
+
+\setuplist
+ [chapter]
+ [style=bold]
+
+\setupinteractionscreen
+ [option=doublesided]
+
+\setupalign
+ [tolerant,stretch]
+
+\setupwhitespace
+ [big]
+
+\setuptolerance
+ [tolerant]
+
+\doifelsemode {atpragma} {
+ \setupbodyfont[lucidaot,10pt]
+} {
+ \setupbodyfont[dejavu,10pt]
+}
+
+\definecolor[colorone] [b=.5]
+\definecolor[colortwo] [s=.3]
+\definecolor[colorthree][y=.5]
+
+\setuptype
+ [color=colorone]
+
+\setuptyping
+ [color=colorone]
+
+\setuphead
+ [lshowtitle]
+ [style=\tt,
+ color=colorone]
+
+\setuphead
+ [chapter,section]
+ [numbercolor=colortwo,
+ color=colorone]
+
+\definedescription
+ [xmlcmd]
+ [alternative=hanging,
+ width=line,
+ distance=1em,
+ margin=2em,
+ headstyle=monobold,
+ headcolor=colorone]
+
+\setupframedtext
+ [setuptext]
+ [framecolor=colorone,
+ rulethickness=1pt,
+ corner=round]
+
+\usemodule[punk]
+
+\usetypescript[punk]
+
+\definelayer
+ [page]
+ [width=\paperwidth,
+ height=\paperheight]
+
+\starttext
+
+\setuplayout[page]
+
+\startstandardmakeup
+ \startfontclass[none] % nil the current fontclass since it may append its features
+ \EnableRandomPunk
+ \setlayerframed
+ [page]
+ [width=\paperwidth,height=\paperheight,
+ background=color,backgroundcolor=colorone,backgroundoffset=1ex,frame=off]
+ {}
+ \definedfont[demo@punk at 18pt]
+ \setbox\scratchbox\vbox {
+ \hsize\dimexpr\paperwidth+2ex\relax
+ \setupinterlinespace
+ \baselineskip 1\baselineskip plus 1pt minus 1pt
+ \raggedcenter
+ \color[colortwo]{\dorecurse{1000}{XML }}
+ }
+ \setlayer
+ [page]
+ [preset=middle]
+ {\vsplit\scratchbox to \dimexpr\paperheight+2ex\relax}
+ \definedfont[demo@punk at 90pt]
+ \setstrut
+ \setlayerframed
+ [page]
+ [preset=rightbottom,offset=10mm]
+ [foregroundcolor=colorthree,align=flushright,offset=overlay,frame=off]
+ {Dealing\\with XML in\\Con\TeX t MkIV}
+ \definedfont[demo@punk at 18pt]
+ \setstrut
+ \setlayerframed
+ [page]
+ [preset=righttop,offset=10mm,x=3mm,rotation=90]
+ [foregroundcolor=colorthree,align=flushright,offset=overlay,frame=off]
+ {Hans Hagen, Pragma ADE, \currentdate}
+ \tightlayer[page]
+ \stopfontclass
+\stopstandardmakeup
+
+\setuplayout
+
+\startfrontmatter
+
+\starttitle[title=Contents]
+
+\placelist
+ [chapter,section]
+
+\stoptitle
+
+\startchapter[title={Introduction}]
+
+This manual presents the \MKIV\ way of dealing with \XML. Although the
+traditional \MKII\ streaming parser has a charming simplicity in its control, for
+complex documents the tree based \MKIV\ method is more convenient. It is for this
+reason that the old method has been removed from \MKIV. If you are familiar with
+\XML\ processing in \MKII, then you will have noticed that the \MKII\ commands
+have \type {XML} in their name. The \MKIV\ commands have a lowercase \type {xml}
+in their names. That way there is no danger for confusion or a mixup.
+
+You may wonder why we do these manipulations in \TEX\ and not use \XSLT\ (or
+other transformation methods) instead. The advantage of an integrated approach is
+that it simplifies usage. Think of not only processing the document, but also
+using \XML\ for managing resources in the same run. An \XSLT\ approach is just as
+verbose (after all, you still need to produce \TEX\ code) and probably less
+readable. In the case of \MKIV\ the integrated approach is also faster and gives
+us the option to manipulate content at runtime using \LUA. It has the additional
+advantage that to some extend we can handle a mix of \TEX\ and \XML\ because we
+know when we're doing one or the other.
+
+This manual is dedicated to Taco Hoekwater, one of the first \CONTEXT\ users, and
+also the first to use it for processing \XML. Who could have thought at that time
+that we would have a more convenient way of dealing with those angle brackets.
+The second version for this manual is dedicated to Thomas Schmitz, a power user
+who occasionally became victim of the evolving mechanisms.
+
+\blank
+
+\startlines
+Hans Hagen
+\PRAGMA
+Hasselt NL
+2008\endash2016
+\stoplines
+
+\stopchapter
+
+\stopfrontmatter
+
+\startbodymatter
+
+\startchapter[title={Setting up a converter}]
+
+\startsection[title={from structure to setup}]
+
+We use a very simple document structure for demonstrating how a converter is
+defined. In practice a mapping will be more complex, especially when we have a
+style with complex chapter openings using data coming from all kind of places,
+different styling of sections with the same name, selectively (out of order)
+flushed content, special formatting, etc.
+
+\typefile{manual-demo-1.xml}
+
+Say that this document is stored in the file \type {demo.xml}, then the following
+code can be used as starting point:
+
+\starttyping
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{*}{-}
+ \xmlsetsetup{#1}{document|section|p}{xml:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{demo}{xml:demo:base}
+
+\startxmlsetups xml:demo:document
+ \starttitle[title={Contents}]
+ \placelist[chapter]
+ \stoptitle
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:section
+ \startchapter[title=\xmlfirst{#1}{/title}]
+ \xmlfirst{#1}{/content}
+ \stopchapter
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \xmlflush{#1}\endgraf
+\stopxmlsetups
+
+\xmlprocessfile{demo}{demo.xml}{}
+\stoptyping
+
+Watch out! These are not just setups, but specific \XML\ setups which get an
+argument passed (the \type {#1}). If for some reason your \XML\ processing fails,
+it might be that you mistakenly have used a normal setup definition. The argument
+\type {#1} represents the current node (element) and is a unique identifier. For
+instance a \type {<p>..</p>} can have an identifier {demo::5}. So, we can get
+something:
+
+\starttyping
+\xmlflush{demo::5}\endgraf
+\stoptyping
+
+but as well:
+
+\starttyping
+\xmlflush{demo::6}\endgraf
+\stoptyping
+
+Keep in mind that the references tor the actual nodes (elements) are
+abstractions, you never see those \type {<id>::<number>}'s, because we will use
+either the abstract \type {#1} (any node) or an explicit reference like \type
+{demo}. The previous setup when issued will be like:
+
+\starttyping
+\startchapter[title=\xmlfirst{demo::3}{/title}]
+ \xmlfirst{demo::4}{/content}
+\stopchapter
+\stoptyping
+
+Here the \type {title} is used to typeset the chapter title but also for an entry
+in the table of contents. At the moment the title is typeset the \XML\ node gets
+looked up and expanded in real text. However, for the list it gets stored for
+later use. One can argue that this is not needed for \XML, because one can just
+filter all the titles and use page references, but then one also looses the
+control one normally has over such titles. For instance it can be that some
+titles are rendered differently and for that we need to keep track of usage.
+Doing that with transformations or filtering is often more complex than leaving
+that to \TEX. As soon as the list gets typeset, the reference (\type {demo::#3})
+is used for the lookup. This is because by default the title is stored as given.
+So, as long as we make sure the \XML\ source is loaded before the table of
+contents is typeset we're ok. Later we will look into this in more detail, for
+now it's enough to know that in most cases the abstract \type {#1} reference will
+work out ok.
+
+Contrary to the style definitions this interface looks rather low level (with no
+optional arguments) and the main reason for this is that we want processing to be
+fast. So, the basic framework is:
+
+\starttyping
+\startxmlsetups xml:demo:base
+ % associate setups with elements
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{demo}{xml:demo:base}
+
+% define setups for matches
+
+\xmlprocessfile{demo}{demo.xml}{}
+\stoptyping
+
+In this example we mostly just flush the content of an element and in the case of
+a section we flush explicit child elements. The \type {#1} in the example code
+represents the current element. The line:
+
+\starttyping
+\xmlsetsetup{demo}{*}{-}
+\stoptyping
+
+sets the default for each element to \quote {just ignore it}. A \type {+} would
+make the default to always flush the content. This means that at this point we
+only handle:
+
+\starttyping
+<section>
+ <title>Some title</title>
+ <content>
+ <p>a paragraph of text</p>
+ </content>
+</section>
+\stoptyping
+
+In the next section we will deal with the slightly more complex itemize and
+figure placement. At first sight all these setups may look overkill but keep in
+mind that normally the number of elements is rather limited. The complexity is
+often in the style and having access to each snippet of content is actually
+quite handy for that.
+
+\stopsection
+
+\startsection[title={alternative solutions}]
+
+Dealing with an itemize is rather simple (as long as we forget about
+attributes that control the behaviour):
+
+\starttyping
+<itemize>
+ <item>first</item>
+ <item>second</item>
+</itemize>
+\stoptyping
+
+First we need to add \type {itemize} to the setup assignment (unless we've used
+the wildcard \type {*}):
+
+\starttyping
+\xmlsetsetup{demo}{document|section|p|itemize}{xml:demo:*}
+\stoptyping
+
+The setup can look like:
+
+\starttyping
+\startxmlsetups xml:demo:itemize
+ \startitemize
+ \xmlfilter{#1}{/item/command(xml:demo:itemize:item)}
+ \stopitemize
+\stopxmlsetups
+
+\startxmlsetups xml:demo:itemize:item
+ \startitem
+ \xmlflush{#1}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+An alternative is to map item directly:
+
+\starttyping
+\xmlsetsetup{demo}{document|section|p|itemize|item}{xml:demo:*}
+\stoptyping
+
+and use:
+
+\starttyping
+\startxmlsetups xml:demo:itemize
+ \startitemize
+ \xmlflush{#1}
+ \stopitemize
+\stopxmlsetups
+
+\startxmlsetups xml:demo:item
+ \startitem
+ \xmlflush{#1}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+Sometimes, a more local solution using filters and \type {/command(...)} makes more
+sense, especially when the \type {item} tag is used for other purposes as well.
+
+Explicit flushing with \type {command} is definitely the way to go when you have
+complex products. In one of our projects we compose math school books from many
+thousands of small \XML\ files, and from one source set several products are
+typeset. Within a book sections get done differently, content gets used, ignored
+or interpreted differently depending on the kind of content, so there is a
+constant checking of attributes that drive the rendering. In that a generic setup
+for a title element makes less sense than explicit ones for each case. (We're
+talking of huge amounts of files here, including multiple images on each rendered
+page.)
+
+When using \type {command} you can pass two arguments, the first is the setup for
+the match, the second one for the miss, as in:
+
+\starttyping
+\xmlfilter{#1}{/element/command(xml:true,xml:false)}
+\stoptyping
+
+Back to the example, this leaves us with dealing with the resources, like
+figures:
+
+\starttyping
+<resource type='figure'>
+ <caption>A picture of a cow.</caption>
+ <content><external file="cow.pdf"/></content>
+</resource>
+\stoptyping
+
+Here we can use a more restricted match:
+
+\starttyping
+\xmlsetsetup{demo}{resource[@type='figure']}{xml:demo:figure}
+\xmlsetsetup{demo}{external}{xml:demo:*}
+\stoptyping
+
+and the definitions:
+
+\starttyping
+\startxmlsetups xml:demo:figure
+ \placefigure
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:external
+ \externalfigure[\xmlatt{#1}{file}]
+\stopxmlsetups
+\stoptyping
+
+At this point it is good to notice that \type {\xmlatt{#1}{file}} is passed as it
+is: a macro call. This means that when a macro like \type {\externalfigure} uses
+the first argument frequently without first storing its value, the lookup is done
+several times. A solution for this is:
+
+\starttyping
+\startxmlsetups xml:demo:external
+ \expanded{\externalfigure[\xmlatt{#1}{file}]}
+\stopxmlsetups
+\stoptyping
+
+Because the lookup is rather fast, normally there is no need to bother about this
+too much because internally \CONTEXT\ already makes sure such expansion happens
+only once.
+
+An alternative definition for placement is the following:
+
+\starttyping
+\xmlsetsetup{demo}{resource}{xml:demo:resource}
+\stoptyping
+
+with:
+
+\starttyping
+\startxmlsetups xml:demo:resource
+ \placefloat
+ [\xmlatt{#1}{type}]
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+\stoptyping
+
+This way you can specify \type {table} as type too. Because you can define your
+own float types, more complex variants are also possible. In that case it makes
+sense to provide some default behaviour too:
+
+\starttyping
+\definefloat[figure-here][figure][default=here]
+\definefloat[figure-left][figure][default=left]
+\definefloat[table-here] [table] [default=here]
+\definefloat[table-left] [table] [default=left]
+
+\startxmlsetups xml:demo:resource
+ \placefloat
+ [\xmlattdef{#1}{type}{figure}-\xmlattdef{#1}{location}{here}]
+ {\xmlfirst{#1}{/caption}}
+ {\xmlfirst{#1}{/content}}
+\stopxmlsetups
+\stoptyping
+
+In this example we support two types and two locations. We default to a figure
+placed (when possible) at the current location.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Filtering content}]
+
+\startsection[title={\TEX\ versus \LUA}]
+
+It will not come as a surprise that we can access \XML\ files from \TEX\ as well
+as from \LUA. In fact there are two methods to deal with \XML\ in \LUA. First
+there are the low level \XML\ functions in the \type {xml} namespace. On top of
+those functions there is a set of functions in the \type {lxml} namespace that
+deals with \XML\ in a more \TEX ie way. Most of these have similar commands at
+the \TEX\ end.
+
+\startbuffer
+\startxmlsetups first:demo:one
+ \xmlfilter {#1} {artist/name[text()='Randy Newman']/..
+ /albums/album[position()=3]/command(first:demo:two)}
+\stopxmlsetups
+
+\startxmlsetups first:demo:two
+ \blank \start \tt
+ \xmldisplayverbatim{#1}
+ \stop \blank
+\stopxmlsetups
+
+\xmlprocessfile{demo}{music-collection.xml}{first:demo:one}
+\stopbuffer
+
+\typebuffer
+
+This gives the following snippet of verbatim \XML\ code. The indentation is
+conform the indentation in the whole \XML\ file. \footnote {The (probably
+outdated) \XML\ file contains the collection stores on my slimserver instance.
+You can use the \type {mtxrun --script flac} to generate such files.}
+
+\doifmodeelse {atpragma} {
+ \getbuffer
+} {
+ \typefile{xml-mkiv-01.xml}
+}
+
+An alternative written in \LUA\ looks as follows:
+
+\startbuffer
+\blank \start \tt \startluacode
+ local m = lxml.load("mine","music-collection.xml") -- m == lxml.id("mine")
+ local p = "artist/name[text()='Randy Newman']/../albums/album[position()=4]"
+ local l = lxml.filter(m,p) -- returns a list (with one entry)
+ lxml.displayverbatim(l[1])
+\stopluacode \stop \blank
+\stopbuffer
+
+\typebuffer
+
+This produces:
+
+\doifmodeelse {atpragma} {
+ \getbuffer
+} {
+ \typefile{xml-mkiv-02.xml}
+}
+
+You can use both methods mixed but in practice we will use the \TEX\ commands in
+regular styles and the mixture in modules, for instance in those dealing with
+\MATHML\ and cals tables. For complex matters you can write your own finalizers
+(the last action to be taken in a match) in \LUA\ and use them at the \TEX\ end.
+
+\stopsection
+
+\startsection[title={a few details}]
+
+In \CONTEXT\ setups are a rather common variant on macros (\TEX\ commands) but
+with their own namespace. An example of a setup is:
+
+\starttyping
+\startsetup doc:print
+ \setuppapersize[A4][A4]
+\stopsetup
+
+\startsetup doc:screen
+ \setuppapersize[S6][S4]
+\stopsetup
+\stoptyping
+
+Given the previous definitions, later on we can say something like:
+
+\starttyping
+\doifmodeelse {paper} {
+ \setup[doc:print]
+} {
+ \setup[doc:screen]
+}
+\stoptyping
+
+Another example is:
+
+\starttyping
+\startsetup[doc:header]
+ \marking[chapter]
+ \space
+ --
+ \space
+ \pagenumber
+\stopsetup
+\stoptyping
+
+in combination with:
+
+\starttyping
+\setupheadertexts[\setup{doc:header}]
+\stoptyping
+
+Here the advantage is that instead of ending up with an unreadable header
+definitions, we use a nicely formatted setup. An important property of setups and
+the reason why they were introduced long ago is that spaces and newlines are
+ignored in the definition. This means that we don't have to worry about so called
+spurious spaces but it also means that when we do want a space, we have to use
+the \type {\space} command.
+
+The only difference between setups and \XML\ setups is that the following ones
+get an argument (\type {#1}) that reflects the current node in the \XML\ tree.
+
+\stopsection
+
+\startsection[title={CDATA}]
+
+What to do with \type {CDATA}? There are a few methods at tle \LUA\ end for
+dealing with it but here we just mention how you can influence the rendering.
+There are four macros that play a role here:
+
+\starttyping
+\unexpanded\def\xmlcdataobeyedline {\obeyedline}
+\unexpanded\def\xmlcdataobeyedspace{\strut\obeyedspace}
+\unexpanded\def\xmlcdatabefore {\begingroup\tt}
+\unexpanded\def\xmlcdataafter {\endgroup}
+\stoptyping
+
+Technically you can overload them but beware of side effects. Normally you won't
+see much \type {CDATA} and whenever we do, it involves special data that needs
+very special treatment anyway.
+
+\stopsection
+
+\startsection[title={Entities}]
+
+As usual with any way of encoding documents you need escapes in order to encode
+the characters that are used in tagging the content, embedding comments, escaping
+special characters in strings (in programming languages), etc. In \XML\ this
+means that in order characters like \type {<} you need an escape like \type
+{&lt;} and in order then to encode an \type {&} you need \type {&amp;}.
+
+In a typesetting workflow using a programming language like \TEX, another problem
+shows up. There we have different special characters, like \type {$ $} for triggering
+math, but also the backslash, braces etc. Even one such special character is already
+enough to have yet another escaping mechanism at work.
+
+Ideally a user should not worry about these issues but it helps figuring out issues
+when you know what happens under the hood. Also it is good to know that in the
+code there are several ways to deal with these issues. Take the following document:
+
+\starttyping
+<text>
+ Here we have a bit of a &lt;&mess&gt;:
+
+ # &#35;
+ % &#37;
+ \ &#92;
+ { &#123;
+ | &#124;
+ } &#125;
+ ~ &#126;
+</text>
+\stoptyping
+
+When the file is read the \type {&lt;} entity will be replaced by \type {<} and
+the \type {&gt;} by \type {>}. The numeric entities will be replaced by the
+characters they refer to. The \type {&mess} is kind of special. We do preload
+a huge list of more or less standardized entities but \type {mess} is not in
+there. However, it is possible to have it defined in the document preamble, like:
+
+\starttyping
+<!DOCTYPE dummy SYSTEM "dummy.dtd" [
+ <!ENTITY mess "what a mess" >
+]>
+\stoptyping
+
+or even this:
+
+\starttyping
+<!DOCTYPE dummy SYSTEM "dummy.dtd" [
+ <!ENTITY mess "<p>what a mess</p>" >
+]>
+\stoptyping
+
+You can also define it in your document style using one of:
+
+\startxmlcmd {\cmdbasicsetup{xmlsetentity}}
+ replaces entity with name \cmdinternal {cd:name} by \cmdinternal {cd:text}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltexentity}}
+ replaces entity with name \cmdinternal {cd:name} by \cmdinternal {cd:text}
+ typeset under a \TEX\ regime
+\stopxmlcmd
+
+Such a definition will always have a higher priority than the one defined
+in the document. Anyway, when the document is read in all entities are
+resolved and those that need a special treatment because they map to some
+text are stored in such a way that we can roundtrip them. As a consequence,
+as soon as the content gets pushed into \TEX, we need not only to intercept
+special characters but also have to make sure that the following works:
+
+\starttyping
+\xmltexentity {tex} {\TEX}
+\stoptyping
+
+Here the backslash starts a control sequence while in regular content a
+backslash is just that: a backslash.
+
+Special characters are really special when we have to move text around
+in a \TEX\ ecosystem.
+
+\starttyping
+<text>
+ <title>About #3</title>
+</text>
+\stoptyping
+
+If we map and define title as follows:
+
+\starttyping
+\startxmlsetup xml:title
+ \title{\xmlflush{#1}}
+\stopxmlsetup
+\stoptyping
+
+normally something \type {\xmlflush {id::123}} will be written to the
+auxiliary file and in most cases that is quite okay, but if we have this:
+
+\starttyping
+\setuphead[title][expansion=yes]
+\stoptyping
+
+then we don't want the \type {#} to end up as hash because later on \TEX\
+can get very confused about it because it sees some argument then in a
+probably unexpected way. This is solved by escaping the hash like this:
+
+\starttyping
+About \Ux{23}3
+\stoptyping
+
+The \type {\Ux} command will convert its hexadecimal argument into a
+character. Of course one then needs to typeset such a text under a \TEX\
+character regime but that is normally the case anyway.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Commands}]
+
+\startsection[title={nodes and lpaths}]
+
+The amount of commands available for manipulating the \XML\ file is rather large.
+Many of the commands cooperate with the already discussed setups, a fancy name
+for a collection of macro calls either or not mixed with text.
+
+Most of the commands are just shortcuts to \LUA\ calls, which means that the real
+work is done by \LUA. In fact, what happens is that we have a continuous transfer
+of control from \TEX\ to \LUA, where \LUA\ prints back either data (like element
+content or attribute values) or just invokes a setup whereby it passes a
+reference to the node resolved conform the path expression. The invoked setup
+itself might return control to \LUA\ again, etc.
+
+This sounds complicated but examples will show what we mean here. First we
+present the whole repertoire of commands. Because users can read the source code,
+they might uncover more commands, but only the ones discussed here are official.
+The commands are grouped in categories.
+
+In the following sections \cmdinternal {cd:node} means a reference to a node:
+this can be the identifier of the root (the loaded xml tree) or a reference to a
+node in that tree (often the result of some lookup. A \cmdinternal {cd:lpath} is
+a fancy name for a path expression (as with \XSLT) but resolved by \LUA.
+
+\stopsection
+
+\startsection[title={commands}]
+
+There are a lot of commands available but you probably can ignore most of them.
+We try to be complete which means that there is for instance \type {\xmlfirst} as
+well as \type {\xmllast} but you probably never need the last one. There are also
+commands that were used when testing this interface and we see no reason to
+remove them. Some obscure ones are used in modules and after a while even I often
+forget that they exist. To give you an idea of what commands are important we
+show their use in generating the \CONTEXT\ command definitions (\type
+{x-set-11.mkiv}) per Januari 2016:
+
+\startcolumns[n=2,balance=yes]
+\starttabulate[|l|r|]
+\NC \type {\xmlall} \NC 1 \NC \NR
+\NC \type {\xmlatt} \NC 23 \NC \NR
+\NC \type {\xmlattribute} \NC 1 \NC \NR
+\NC \type {\xmlcount} \NC 1 \NC \NR
+\NC \type {\xmldoif} \NC 2 \NC \NR
+\NC \type {\xmldoifelse} \NC 1 \NC \NR
+\NC \type {\xmlfilterlist} \NC 4 \NC \NR
+\NC \type {\xmlflush} \NC 5 \NC \NR
+\NC \type {\xmlinclude} \NC 1 \NC \NR
+\NC \type {\xmlloadonly} \NC 1 \NC \NR
+\NC \type {\xmlregisterdocumentsetup} \NC 1 \NC \NR
+\NC \type {\xmlsetsetup} \NC 1 \NC \NR
+\NC \type {\xmlsetup} \NC 4 \NC \NR
+\stoptabulate
+\stopcolumns
+
+As you can see filtering, flushing and accessing attributes score high. Below we show
+the statistics of a quite complex rendering (5 variants of schoolbooks: basic book,
+answers, teachers guide, worksheets, full blown version with extensive tracing).
+
+\startcolumns[n=2,balance=yes]
+\starttabulate[|l|r|]
+\NC \type {\xmladdindex} \NC 3 \NC \NR
+\NC \type {\xmlall} \NC 5 \NC \NR
+\NC \type {\xmlappendsetup} \NC 1 \NC \NR
+\NC \type {\xmlapplyselectors} \NC 1 \NC \NR
+\NC \type {\xmlatt} \NC 40 \NC \NR
+\NC \type {\xmlattdef} \NC 9 \NC \NR
+\NC \type {\xmlattribute} \NC 10 \NC \NR
+\NC \type {\xmlbadinclusions} \NC 3 \NC \NR
+\NC \type {\xmlconcat} \NC 3 \NC \NR
+\NC \type {\xmlcount} \NC 1 \NC \NR
+\NC \type {\xmldelete} \NC 11 \NC \NR
+\NC \type {\xmldoif} \NC 39 \NC \NR
+\NC \type {\xmldoifelse} \NC 28 \NC \NR
+\NC \type {\xmldoifelsetext} \NC 13 \NC \NR
+\NC \type {\xmldoifnot} \NC 2 \NC \NR
+\NC \type {\xmldoifnotselfempty} \NC 1 \NC \NR
+\NC \type {\xmlfilter} \NC 100 \NC \NR
+\NC \type {\xmlfirst} \NC 51 \NC \NR
+\NC \type {\xmlflush} \NC 69 \NC \NR
+\NC \type {\xmlflushcontext} \NC 2 \NC \NR
+\NC \type {\xmlinclude} \NC 1 \NC \NR
+\NC \type {\xmlincludeoptions} \NC 5 \NC \NR
+\NC \type {\xmlinclusion} \NC 16 \NC \NR
+\NC \type {\xmlinjector} \NC 1 \NC \NR
+\NC \type {\xmlloaddirectives} \NC 1 \NC \NR
+\NC \type {\xmlmapvalue} \NC 4 \NC \NR
+\NC \type {\xmlmatch} \NC 1 \NC \NR
+\NC \type {\xmlprependsetup} \NC 5 \NC \NR
+\NC \type {\xmlregisterdocumentsetup} \NC 2 \NC \NR
+\NC \type {\xmlregistersetup} \NC 1 \NC \NR
+\NC \type {\xmlremapnamespace} \NC 1 \NC \NR
+\NC \type {\xmlsetfunction} \NC 2 \NC \NR
+\NC \type {\xmlsetinjectors} \NC 2 \NC \NR
+\NC \type {\xmlsetsetup} \NC 11 \NC \NR
+\NC \type {\xmlsetup} \NC 76 \NC \NR
+\NC \type {\xmlstrip} \NC 1 \NC \NR
+\NC \type {\xmlstripanywhere} \NC 1 \NC \NR
+\NC \type {\xmltag} \NC 1 \NC \NR
+\NC \type {\xmltext} \NC 53 \NC \NR
+\NC \type {\xmlvalue} \NC 2 \NC \NR
+\stoptabulate
+\stopcolumns
+
+Here many more are used but this is an exceptional case. The top is again
+dominated by filtering, flushing and attribute consulting. The list can actually
+be smaller. For instance, the \type {\xmlcount} can just as well be \type
+{\xmlfilter} with a \type {count} finalizer. There are also some special ones,
+like the injectors, that are needed for finetuning the final result.
+
+\stopsection
+
+\startsection[title={loading}]
+
+\startxmlcmd {\cmdbasicsetup{xmlloadfile}}
+ loads the file \cmdinternal {cd:file} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup} (alias: \type {\xmlload})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloadbuffer}}
+ loads the buffer \cmdinternal {cd:buffer} and registers it under
+ \cmdinternal {cd:name} and applies either given or standard
+ \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloaddata}}
+ loads \cmdinternal {cd:text} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlloadonly}}
+ loads \cmdinternal {cd:text} and registers it under \cmdinternal
+ {cd:name} and applies either given or standard \cmdinternal
+ {cd:xmlsetup} but doesn't flush the content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinclude}}
+ includes the file specified by attribute \cmdinternal {cd:name} of the
+ element located by \cmdinternal {cd:lpath} at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessfile}}
+ registers file \cmdinternal {cd:file} as \cmdinternal {cd:name} and
+ process the tree starting with \cmdinternal {cd:xmlsetup} (alias:
+ \type {\xmlprocess})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessbuffer}}
+ registers buffer \cmdinternal {cd:name} as \cmdinternal {cd:name} and process
+ the tree starting with \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprocessdata}}
+ registers \cmdinternal {cd:text} as \cmdinternal {cd:name} and process
+ the tree starting with \cmdinternal {cd:xmlsetup}
+\stopxmlcmd
+
+The initial setup defaults to \type {xml:process} that is defined
+as follows:
+
+\starttyping
+\startsetups xml:process
+ \xmlregistereddocumentsetups\xmldocument
+ \xmlmain\xmldocument
+\stopsetups
+\stoptyping
+
+First we apply the setups associated with the document (including common setups)
+and then we flush the whole document. The macro \type {\xmldocument} expands to
+the current document id. There is also \type {\xmlself} which expands to the
+current node number (\type {#1} in setups).
+
+\startxmlcmd {\cmdbasicsetup{xmlmain}}
+ returns the whole document
+\stopxmlcmd
+
+Normally such a flush will trigger a chain reaction of setups associated with the
+child elements.
+
+\stopsection
+
+\startsection[title={saving}]
+
+\startxmlcmd {\cmdbasicsetup{xmlsave}}
+ saves the given node \cmdinternal {cd:node} in the file \cmdinternal {cd:file}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltofile}}
+ saves the match of \cmdinternal {cd:lpath} in the file \cmdinternal {cd:file}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltobuffer}}
+ saves the match of \cmdinternal {cd:lpath} in the buffer \cmdinternal {cd:buffer}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltobufferverbose}}
+ saves the match of \cmdinternal {cd:lpath} verbatim in the buffer \cmdinternal
+ {cd:buffer}
+\stopxmlcmd
+
+% \startxmlcmd {\cmdbasicsetup{xmltoparameters}}
+% converts the match of \cmdinternal {cd:lpath} to key|/|values (for tracing)
+% \stopxmlcmd
+
+The next command is only needed when you have messed with the tree using
+\LUA\ code.
+
+\startxmlcmd {\cmdbasicsetup{xmladdindex}}
+ (re)indexes a tree
+\stopxmlcmd
+
+The following macros are only used in special situations and are not really meant
+for users.
+
+\startxmlcmd {\cmdbasicsetup{xmlraw}}
+ flush the content if \cmdinternal {cd:node} with original entities
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmlraw}}
+ flush the wrapped content with original entities
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={flushing data}]
+
+When we flush an element, the associated \XML\ setups are expanded. The most
+straightforward way to flush an element is the following. Keep in mind that the
+returned values itself can trigger setups and therefore flushes.
+
+\startxmlcmd {\cmdbasicsetup{xmlflush}}
+ returns all nodes under \cmdinternal {cd:node}
+\stopxmlcmd
+
+You can restrict flushing by using commands that accept a specification.
+
+\startxmlcmd {\cmdbasicsetup{xmltext}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpure}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node} without \type {\Ux} escaped special \TEX\ characters
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushtext}}
+ returns the text of the \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushpure}}
+ returns the text of the \cmdinternal {cd:node} without \type {\Ux} escaped
+ special \TEX\ characters
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlnonspace}}
+ returns the text of the matching \cmdinternal {cd:lpath} under \cmdinternal
+ {cd:node} without embedded spaces
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlall}}
+ returns all nodes under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllastmatch}}
+ returns all nodes found in the last match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlfirst}}
+ returns the first node under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllast}}
+ returns the last node under \cmdinternal {cd:node} that matches \cmdinternal
+ {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlfilter}}
+ at a match of \cmdinternal {cd:lpath} a given filter \type {filter} is applied
+ and the result is returned
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlsnippet}}
+ returns the \cmdinternal {cd:number}\high{th} element under \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlposition}}
+ returns the \cmdinternal {cd:number}\high{th} match of \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node}; a negative number starts at the
+ end (alias: \type {\xmlindex})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlelement}}
+ returns the \cmdinternal {cd:number}\high{th} child of node \cmdinternal {cd:node};
+ a negative number starts at the end
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpos}}
+ returns the index (position) in the parent node of \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlconcat}}
+ returns the sequence of nodes that match \cmdinternal {cd:lpath} at
+ \cmdinternal {cd:node} whereby \cmdinternal {cd:text} is put between each
+ match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlconcatrange}}
+ returns the \cmdinternal {cd:first}\high {th} upto \cmdinternal
+ {cd:last}\high {th} of nodes that match \cmdinternal {cd:lpath} at
+ \cmdinternal {cd:node} whereby \cmdinternal {cd:text} is put between each
+ match
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcommand}}
+ apply the given \cmdinternal {cd:xmlsetup} to each match of \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstrip}}
+ remove leading and trailing spaces from nodes under \cmdinternal {cd:node}
+ that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstripped}}
+ remove leading and trailing spaces from nodes under \cmdinternal {cd:node}
+ that match \cmdinternal {cd:lpath} and return the content afterwards
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstripnolines}}
+ remove leading and trailing spaces as well as collapse embedded spaces
+ from nodes under \cmdinternal {cd:node} that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlstrippednolines}}
+ remove leading and trailing spaces as well as collapse embedded spaces from
+ nodes under \cmdinternal {cd:node} that match \cmdinternal {cd:lpath} and
+ return the content afterwards
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlverbatim}}
+ flushes the content verbatim code (without any wrapping, i.e. no fonts
+ are selected and such)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinlineverbatim}}
+ return the content of the node as inline verbatim code; no further
+ interpretation (expansion) takes place and spaces are honoured; it uses the
+ following wrapper
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmlinlineverbatim}}
+ wraps inline verbatim mode using the environment specified (a prefix \type
+ {xml:} is added to the environment name)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldisplayverbatim}}
+ return the content of the node as display verbatim code; no further
+ interpretation (expansion) takes place and leading and trailing spaces and
+ newlines are treated special; it uses the following wrapper
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{startxmldisplayverbatim}}
+ wraps the content in display verbatim using the environment specified (a prefix
+ \type {xml:} is added to the environment name)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprettyprint}}
+ pretty print (with colors) the node \cmdinternal {cd:node}; use the \CONTEXT\
+ \SCITE\ lexers when available (\type {\usemodule [scite]})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushspacewise}}
+ flush node \cmdinternal {cd:node} obeying spaces and newlines
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushlinewise}}
+ flush node \cmdinternal {cd:node} obeying newlines
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={information}]
+
+The following commands return strings. Normally these are used in tests.
+
+\startxmlcmd {\cmdbasicsetup{xmlname}}
+ returns the complete name (including namespace prefix) of the
+ given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlnamespace}}
+ returns the namespace of the given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmltag}}
+ returns the tag of the element, without namespace prefix
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcount}}
+ returns the number of matches of \cmdinternal {cd:lpath} at node \cmdinternal
+ {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattdef}}
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:string} if no such attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlrefatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists; a leading \type {#} is removed (nicer for tex)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchainatt}}
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists; backtracks till a match is found
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchainattdef}}
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:string} if no such attribute exists; backtracks till a match is found
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattribute}}
+ finds a first match for \cmdinternal {cd:lpath} at \cmdinternal {cd:node} and
+ returns the value of attribute \cmdinternal {cd:name} or empty if no such
+ attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlattributedef}}
+ finds a first match for \cmdinternal {cd:lpath} at \cmdinternal {cd:node} and
+ returns the value of attribute \cmdinternal {cd:name} or \cmdinternal
+ {cd:text} if no such attribute exists
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmllastatt}}
+ returns the last attribute found (this avoids a lookup)
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={manipulation}]
+
+You can use \LUA\ code to manipulate the tree and it makes no sense to duplicate
+this in \TEX. In the future we might provide an interface to some of this
+functionality. Keep in mind that manipuating the tree might have side effects as
+we maintain several indices into the tree that also needs to be updated then.
+
+\stopsection
+
+\startsection[title={integration}]
+
+If you write a module that deals with \XML, for instance processing cals tables,
+then you need ways to control specific behaviour. For instance, you might want to
+add a background to the table. Such directives are collected in \XML\ files and
+can be loaded on demand.
+
+\startxmlcmd {\cmdbasicsetup{xmlloaddirectives}}
+ loads \CONTEXT\ directives from \cmdinternal {cd:file} that will get
+ interpreted when processing documents
+\stopxmlcmd
+
+A directives definition file looks as follows:
+
+\starttyping
+<?xml version="1.0" standalone="yes"?>
+
+<directives>
+ <directive attribute='id' value="100"
+ setup="cdx:100"/>
+ <directive attribute='id' value="101"
+ setup="cdx:101"/>
+ <directive attribute='cdx' value="colors" element="cals:table"
+ setup="cdx:cals:table:colors"/>
+ <directive attribute='cdx' value="vertical" element="cals:table"
+ setup="cdx:cals:table:vertical"/>
+ <directive attribute='cdx' value="noframe" element="cals:table"
+ setup="cdx:cals:table:noframe"/>
+ <directive attribute='cdx' value="*" element="cals:table"
+ setup="cdx:cals:table:*"/>
+</directives>
+\stoptyping
+
+Examples of usage can be found in \type {x-cals.mkiv}. The directive is triggered
+by an attribute. Instead of a setup you can specify a setup to be applied before
+and after the node gets flushed.
+
+\startxmlcmd {\cmdbasicsetup{xmldirectives}}
+ apply the setups directive associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldirectivesbefore}}
+ apply the before directives associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldirectivesafter}}
+ apply the after directives associated with the node
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinstalldirective}}
+ defines a directive that hooks into a handler
+\stopxmlcmd
+
+Normally a directive will be put in the \XML\ file, for instance as:
+
+\starttyping
+<?context-mathml-directive minus reduction yes ?>
+\stoptyping
+
+Here the \type {mathml} is the general class of directives and \type {minus} a
+subclass, in our case a specific element.
+
+\stopsection
+
+\startsection[title={setups}]
+
+The basic building blocks of \XML\ processing are setups. These are just
+collections of macros that are expanded. These setups get one argument passed
+(\type {#1}):
+
+\starttyping
+\startxmlsetups somedoc:somesetup
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+This argument is normally a number that internally refers to a specific node in
+the \XML\ tree. The user should see it as an abstract reference and not depend on
+its numeric property. Just think of it as \quote {the current node}. You can (and
+probably will) call such setups using:
+
+\startxmlcmd {\cmdbasicsetup{xmlsetup}}
+ expands setup \cmdinternal {cd:setup} and pass \cmdinternal {cd:node} as
+ argument
+\stopxmlcmd
+
+However, in most cases the setups are associated to specific elements,
+something that users of \XSLT\ might recognize as templates.
+
+\startxmlcmd {\cmdbasicsetup{xmlsetfunction}}
+ associates function \cmdinternal {cd:luafunction} to the elements in
+ namespace \cmdinternal {cd:name} that match \cmdinternal {cd:lpath}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlsetsetup}}
+ associates setups \cmdinternal {cd:setup} (\TEX\ code) with the matching
+ nodes of \cmdinternal {cd:lpath} or root \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprependsetup}}
+ pushes \cmdinternal {cd:setup} to the front of global list of setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlappendsetup}}
+ adds \cmdinternal {cd:setup} to the global list of setups to be applied
+ (alias: \type{\xmlregistersetup})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbeforesetup}}
+ pushes \cmdinternal {cd:setup} into the global list of setups; the
+ last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlaftersetup}}
+ adds \cmdinternal {cd:setup} to the global list of setups; the last setup
+ is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremovesetup}}
+ removes \cmdinternal {cd:setup} from the global list of setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlprependdocumentsetup}}
+ pushes \cmdinternal {cd:setup} to the front of list of setups to be applied
+ to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlappenddocumentsetup}}
+ adds \cmdinternal {cd:setup} to the list of setups to be applied to
+ \cmdinternal {cd:name} (you can also use the alias: \type
+ {\xmlregisterdocumentsetup})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbeforedocumentsetup}}
+ pushes \cmdinternal {cd:setup} into the setups to be applied to \cmdinternal
+ {cd:name}; the last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlafterdocumentsetup}}
+ adds \cmdinternal {cd:setup} to the setups to be applied to \cmdinternal
+ {cd:name}; the last setup is the position
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremovedocumentsetup}}
+ removes \cmdinternal {cd:setup} from the global list of setups to be applied
+ to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetsetups}}
+ removes all global setups
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetdocumentsetups}}
+ removes all setups from the \cmdinternal {cd:name} specific list of setups to
+ be applied
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlflushdocumentsetups}{setup}}
+ applies \cmdinternal {cd:setup} (can be a list) to \cmdinternal {cd:name}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlregisteredsetups}}
+ applies all global setups to the current document
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlregistereddocumentsetups}}
+ applies all document specific \cmdinternal {cd:setup} to document
+ \cmdinternal {cd:name}
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={testing}]
+
+The following test macros all take a \cmdinternal {cd:node} as first argument
+and an \cmdinternal {cd:lpath} as second:
+
+\startxmlcmd {\cmdbasicsetup{xmldoif}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} matches at
+ node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnot}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} does not match
+ at node \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelse}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:lpath} matches at
+ node \cmdinternal {cd:node} and to \cmdinternal {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoiftext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has some content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnottext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has no content
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelsetext}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} has content and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelseempty}}
+ expands to \cmdinternal {cd:true} when the node matching \cmdinternal
+ {cd:lpath} at node \cmdinternal {cd:node} is empty and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelseselfempty}}
+ expands to \cmdinternal {cd:true} when the node is empty and to \cmdinternal
+ {cd:false} otherwise
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifselfempty}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:node} is empty
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifnotselfempty}}
+ expands to \cmdinternal {cd:true} when \cmdinternal {cd:node} is not empty
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={initialization}]
+
+The general setup command (not to be confused with setups) that deals with the
+\MKIV\ tree handler is \type {\setupxml}. There are currently only a few options.
+
+\cmdfullsetup{setupxml}
+
+When you set \type {default} to \cmdinternal {cd:text} elements with no setup
+assigned will end up as text. When set to \type {hidden} such elements will be
+hidden. You can apply the default yourself using:
+
+\startxmlcmd {\cmdbasicsetup{xmldefaulttotext}}
+ presets the tree with root \cmdinternal {cd:node} to the handlers set up with
+ \type {\setupxml} option \cmdinternal{default}
+\stopxmlcmd
+
+You can set \type {compress} to \type {yes} in which case comment is stripped
+from the tree when the file is read.
+
+\startxmlcmd {\cmdbasicsetup{xmlregisterns}}
+ associates an internal namespace (like \type {mml}) with one given in the
+ document as \URL\ (like mathml)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremapname}}
+ changes the namespace and tag of the matching elements
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlremapnamespace}}
+ replaces all references to the given namespace to a new one (applied
+ recursively)
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlchecknamespace}}
+ sets the namespace of the matching elements unless a namespace is already set
+\stopxmlcmd
+
+\stopsection
+
+\startsection[title={helpers}]
+
+Often an attribute will determine the rendering and this may result in many
+tests. Especially when we have multiple attributes that control the output such
+tests can become rather extensive and redundant because one gets $n\times m$ or
+more such tests.
+
+Therefore we have a convenient way to map attributes onto for instance strings or
+commands.
+
+\startxmlcmd {\cmdbasicsetup{xmlmapvalue}}
+ associate a \cmdinternal {cd:text} with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name} (alias: \type{\xmlmapval})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlvalue}}
+ expand the value associated with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name} and if not resolved, expand to the \cmdinternal
+ {cd:text} (alias: \type{\xmlval})
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmldoifelsevalue}}
+ associate a \cmdinternal {cd:text} with a \cmdinternal {cd:category} and
+ \cmdinternal {cd:name}
+\stopxmlcmd
+
+This is used as follows. We define a couple of mappings in the same category:
+
+\starttyping
+\xmlmapvalue{emph}{bold} {\bf}
+\xmlmapvalue{emph}{italic}{\it}
+\stoptyping
+
+Assuming that we have associated the following setup with the \type {emph}
+element, we can say (with \type {#1} being the current element):
+
+\starttyping
+\startxmlsetups demo:emph
+ \begingroup
+ \xmlvalue{emph}{\xmlatt{#1}{type}}{}
+ \endgroup
+\stopxmlsetups
+\stoptyping
+
+In this case we have no default. The \type {type} attribute triggers the actions,
+as in:
+
+\starttyping
+normal <emph type='bold'>bold</emph> normal
+\stoptyping
+
+This mechanism is not really bound to elements and attributes so you can use this
+mechanism for other purposes as well.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Expressions and filters}]
+
+\startsection[title={path expressions}]
+
+In the previous chapters we used \cmdinternal {cd:lpath} expressions, which are a variant
+on \type {xpath} expressions as in \XSLT\ but in this case more geared towards
+usage in \TEX. This mechanisms will be extended when demands are there.
+
+A path is a sequence of matches. A simple path expression is:
+
+\starttyping
+a/b/c/d
+\stoptyping
+
+Here each \type {/} goes one level deeper. We can go backwards in a lookup with
+\type {..}:
+
+\starttyping
+a/b/../d
+\stoptyping
+
+We can also combine lookups, as in:
+
+\starttyping
+a/(b|c)/d
+\stoptyping
+
+A negated lookup is preceded by a \type {!}:
+
+\starttyping
+a/(b|c)/!d
+\stoptyping
+
+A wildcard is specified with a \type {*}:
+
+\starttyping
+a/(b|c)/!d/e/*/f
+\stoptyping
+
+In addition to these tag based lookups we can use attributes:
+
+\starttyping
+a/(b|c)/!d/e/*/f[@type=whatever]
+\stoptyping
+
+An \type {@} as first character means that we are dealing with an attribute.
+Within the square brackets there can be boolean expressions:
+
+\starttyping
+a/(b|c)/!d/e/*/f[@type=whatever and @id>100]
+\stoptyping
+
+You can use functions as in:
+
+\starttyping
+a/(b|c)/!d/e/*/f[something(text()) == "oeps"]
+\stoptyping
+
+There are a couple of predefined functions:
+
+\starttabulate[|l|l|p|]
+\NC \type{rootposition} \type{order} \NC number \NC the index of the matched root element (kind of special) \NC \NR
+\NC \type{position} \NC number \NC the current index of the matched element in the match list \NC \NR
+\NC \type{match} \NC number \NC the current index of the matched element sub list with the same parent \NC \NR
+\NC \type{first} \NC number \NC \NC \NR
+\NC \type{last} \NC number \NC \NC \NR
+\NC \type{index} \NC number \NC the current index of the matched element in its parent list \NC \NR
+\NC \type{firstindex} \NC number \NC \NC \NR
+\NC \type{lastindex} \NC number \NC \NC \NR
+\NC \type{element} \NC number \NC the element's index \NC \NR
+\NC \type{firstelement} \NC number \NC \NC \NR
+\NC \type{lastelement} \NC number \NC \NC \NR
+\NC \type{text} \NC string \NC the textual representation of the matched element \NC \NR
+\NC \type{content} \NC table \NC the node of the matched element \NC \NR
+\NC \type{name} \NC string \NC the full name of the matched element: namespace and tag \NC \NR
+\NC \type{namespace} \type{ns} \NC string \NC the namespace of the matched element \NC \NR
+\NC \type{tag} \NC string \NC the tag of the matched element \NC \NR
+\NC \type{attribute} \NC string \NC the value of the attribute with the given name of the matched element \NC \NR
+\stoptabulate
+
+There are fundamental differences between \type {position}, \type {match} and
+\type {index}. Each step results in a new list of matches. The \type {position}
+is the index in this new (possibly intermediate) list. The \type {match} is also
+an index in this list but related to the specific match of element names. The
+\type {index} refers to the location in the parent element.
+
+Say that we have:
+
+\starttyping
+<collection>
+ <resources>
+ <manual>
+ <screen>.1.</screen>
+ <paper>.1.</paper>
+ </manual>
+ <manual>
+ <paper>.2.</paper>
+ <screen>.2.</screen>
+ </manual>
+ <resources>
+ <resources>
+ <manual>
+ <screen>.3.</screen>
+ <paper>.3.</paper>
+ </manual>
+ <resources>
+<collection>
+\stoptyping
+
+The following then applies:
+
+\starttabulate[|l|l|]
+\NC \type {collection/resources/manual[position()==1]/paper} \NC \type{.1.} \NC \NR
+\NC \type {collection/resources/manual[match()==1]/paper} \NC \type{.1.} \type{.3.} \NC \NR
+\NC \type {collection/resources/manual/paper[index()==1]} \NC \type{.2.} \NC \NR
+\stoptabulate
+
+In most cases the \type {position} test is more restrictive than the \type
+{match} test.
+
+You can pass your own functions too. Such functions are defined in the the \type
+{xml.expressions} namespace. We have defined a few shortcuts:
+
+\starttabulate[|l|l|]
+\NC \type {find(str,pattern)} \NC \type{string.find} \NC \NR
+\NC \type {contains(str)} \NC \type{string.find} \NC \NR
+\NC \type {oneof(str,...)} \NC is \type{str} in list \NC \NR
+\NC \type {upper(str)} \NC \type{characters.upper} \NC \NR
+\NC \type {lower(str)} \NC \type{characters.lower} \NC \NR
+\NC \type {number(str)} \NC \type{tonumber} \NC \NR
+\NC \type {boolean(str)} \NC \type{toboolean} \NC \NR
+\NC \type {idstring(str)} \NC removes leading hash \NC \NR
+\NC \type {name(index)} \NC full tag name \NC \NR
+\NC \type {tag(index)} \NC tag name \NC \NR
+\NC \type {namespace(index)} \NC namespace of tag \NC \NR
+\NC \type {text(index)} \NC content \NC \NR
+\NC \type {error(str)} \NC quit and show error \NC \NR
+\NC \type {quit()} \NC quit \NC \NR
+\NC \type {print()} \NC print message \NC \NR
+\NC \type {count(pattern)} \NC number of matches \NC \NR
+\NC \type {child(pattern)} \NC take child that matches \NC \NR
+\stoptabulate
+
+
+You can also use normal \LUA\ functions as long as you make sure that you pass
+the right arguments. There are a few predefined variables available inside such
+functions.
+
+\starttabulate[|Tl|l|p|]
+\NC \type{list} \NC table \NC the list of matches \NC \NR
+\NC \type{l} \NC number \NC the current index in the list of matches \NC \NR
+\NC \type{ll} \NC element \NC the current element that matched \NC \NR
+\NC \type{order} \NC number \NC the position of the root of the path \NC \NR
+\stoptabulate
+
+The given expression between \type {[]} is converted to a \LUA\ expression so you
+can use the usual operators:
+
+\starttyping
+== ~= <= >= < > not and or ()
+\stoptyping
+
+In addition, \type {=} equals \type {==} and \type {!=} is the same as \type
+{~=}. If you mess up the expression, you quite likely get a \LUA\ error message.
+
+\stopsection
+
+\startsection[title={functions as filters}]
+
+At the \LUA\ end a whole \cmdinternal {cd:lpath} expression results in a (set of) node(s)
+with its environment, but that is hardly usable in \TEX. Think of code like:
+
+\starttyping
+for e in xml.collected(xml.load('text.xml'),"title") do
+ -- e = the element that matched
+end
+\stoptyping
+
+The older variant is still supported but you can best use the previous variant.
+
+\starttyping
+for r, d, k in xml.elements(xml.load('text.xml'),"title") do
+ -- r = root of the title element
+ -- d = data table
+ -- k = index in data table
+end
+\stoptyping
+
+Here \type {d[k]} points to the \type {title} element and in this case all titles
+in the tree pass by. In practice this kind of code is encapsulated in function
+calls, like those returning elements one by one, or returning the first or last
+match. The result is then fed back into \TEX, possibly after being altered by an
+associated setup. We've seen the wrappers to such functions already in a previous
+chapter.
+
+In addition to the previously discussed expressions, one can add so called
+filters to the expression, for instance:
+
+\starttyping
+a/(b|c)/!d/e/text()
+\stoptyping
+
+In a filter, the last part of the \cmdinternal {cd:lpath} expression is a
+function call. The previous example returns the text of each element \type {e}
+that results from matching the expression. When running \TEX\ the following
+functions are available. Some are also available when using pure \LUA. In \TEX\
+you can often use one of the macros like \type {\xmlfirst} instead of a \type
+{\xmlfilter} with finalizer \type {first()}. The filter can be somewhat faster
+but that is hardly noticeable.
+
+\starttabulate[|l|l|p|]
+\NC \type {context()} \NC string \NC the serialized text with \TEX\ catcode regime \NC \NR
+%NC \type {ctxtext()} \NC string \NC \NC \NR
+\NC \type {function()} \NC string \NC depends on the function \NC \NR
+%
+\NC \type {name()} \NC string \NC the (remapped) namespace \NC \NR
+\NC \type {tag()} \NC string \NC the name of the element \NC \NR
+\NC \type {tags()} \NC list \NC the names of the element \NC \NR
+%
+\NC \type {text()} \NC string \NC the serialized text \NC \NR
+\NC \type {upper()} \NC string \NC the serialized text uppercased \NC \NR
+\NC \type {lower()} \NC string \NC the serialized text lowercased \NC \NR
+\NC \type {stripped()} \NC string \NC the serialized text stripped \NC \NR
+\NC \type {lettered()} \NC string \NC the serialized text only letters (cf. \UNICODE) \NC \NR
+%
+\NC \type {count()} \NC number \NC the number of matches \NC \NR
+\NC \type {index()} \NC number \NC the matched index in the current path \NC \NR
+\NC \type {match()} \NC number \NC the matched index in the preceding path \NC \NR
+%
+%NC \type {lowerall()} \NC string \NC \NC \NR
+%NC \type {upperall()} \NC string \NC \NC \NR
+%
+\NC \type {attribute(name)} \NC content \NC returns the attribute with the given name \NC \NR
+\NC \type {chainattribute(name)} \NC content \NC sidem, but backtracks till one is found \NC \NR
+\NC \type {command(name)} \NC content \NC expands the setup with the given name for each found element \NC \NR
+\NC \type {position(n)} \NC content \NC processes the \type {n}\high{th} instance of the found element \NC \NR
+\NC \type {all()} \NC content \NC processes all instances of the found element \NC \NR
+%NC \type {default} \NC content \NC all \NC \NR
+\NC \type {reverse()} \NC content \NC idem in reverse order \NC \NR
+\NC \type {first()} \NC content \NC processes the first instance of the found element \NC \NR
+\NC \type {last()} \NC content \NC processes the last instance of the found element \NC \NR
+\NC \type {concat(...)} \NC content \NC concatinates the match \NC \NC \NR
+\NC \type {concatrange(from,to,...)} \NC content \NC concatinates a range of matches \NC \NC \NR
+\stoptabulate
+
+The extra arguments of the concatinators are: \type {separator} (string), \type
+{lastseparator} (string) and \type {textonly} (a boolean).
+
+These filters are in fact \LUA\ functions which means that if needed more of them
+can be added. Indeed this happens in some of the \XML\ related \MKIV\ modules,
+for instance in the \MATHML\ processor.
+
+\stopsection
+
+\startsection[title={example}]
+
+The number of commands is rather large and if you want to avoid them this is
+often possible. Take for instance:
+
+\starttyping
+\xmlall{#1}{/a/b[position()>3]}
+\stoptyping
+
+Alternatively you can use:
+
+\starttyping
+\xmlfilter{#1}{/a/b[position()>3]/all()}
+\stoptyping
+
+and actually this is also faster as internally it avoids a function call. Of
+course in practice this is hardly measurable.
+
+In previous examples we've already seen quite some expressions, and it might be
+good to point out that the syntax is modelled after \XSLT\ but is not quite the
+same. The reason is that we started with a rather minimal system and have already
+styles in use that depend on compatibility.
+
+\starttyping
+namespace:// axis node(set) [expr 1]..[expr n] / ... / filter
+\stoptyping
+
+When we are inside a \CONTEXT\ run, the namespace is \type {tex}. Hoewever, if
+you want not to print back to \TEX\ you need to be more explicit. Say that we
+typeset examns and have a (not that logical) structure like:
+
+\starttyping
+<question>
+ <text>...</text>
+ <answer>
+ <item>one</item>
+ <item>two</item>
+ <item>three</item>
+ </answer>
+ <alternative>
+ <condition>true</condition>
+ <score>1</score>
+ </alternative>
+ <alternative>
+ <condition>false</condition>
+ <score>0</score>
+ </alternative>
+ <alternative>
+ <condition>true</condition>
+ <score>2</score>
+ </alternative>
+</question>
+\stoptyping
+
+Say that we typeset the questions with:
+
+\starttyping
+\startxmlsetups question
+ \blank
+ score: \xmlfunction{#1}{totalscore}
+ \blank
+ \xmlfirst{#1}{text}
+ \startitemize
+ \xmlfilter{#1}{/answer/item/command(answer:item)}
+ \stopitemize
+ \endgraf
+ \blank
+\stopxmlsetups
+\stoptyping
+
+Each item in the answer results in a call to:
+
+\starttyping
+\startxmlsetups answer:item
+ \startitem
+ \xmlflush{#1}
+ \endgraf
+ \xmlfilter{#1}{../../alternative[position()=rootposition()]/
+ condition/command(answer:condition)}
+ \stopitem
+\stopxmlsetups
+\stoptyping
+
+\starttyping
+\startxmlsetups answer:condition
+ \endgraf
+ condition: \xmlflush{#1}
+ \endgraf
+\stopxmlsetups
+\stoptyping
+
+Now, there are two rather special filters here. The first one involves
+calculating the total score. As we look forward we use a function to deal with
+this.
+
+\starttyping
+\startluacode
+function xml.functions.totalscore(root)
+ local score = 0
+ for e in xml.collected(root,"/alternative") do
+ score = score + xml.filter(e,"xml:///score/number()") or 0
+ end
+ tex.write(score)
+end
+\stopluacode
+\stoptyping
+
+Watch how we use the namespace to keep the results at the \LUA\ end.
+
+The second special trick shown here is to limit a match using the current
+position of the root (\type {#}) match.
+
+As you can see, a path expression can be more than just filtering a few nodes. At
+the end of this manual you will find a bunch of examples.
+
+\stopsection
+
+\startsection[title={tables}]
+
+If you want to know how the internal \XML\ tables look you can print such a
+table:
+
+\starttyping
+print(table.serialize(e))
+\stoptyping
+
+This produces for instance:
+
+% s = xml.convert("<document><demo label='whatever'>some text</demo></document>")
+% print(table.serialize(xml.filter(s,"demo")[1]))
+
+\starttyping
+t={
+ ["at"]={
+ ["label"]="whatever",
+ },
+ ["dt"]={ "some text" },
+ ["ns"]="",
+ ["rn"]="",
+ ["tg"]="demo",
+}
+\stoptyping
+
+The \type {rn} entry is the renamed namespace (when renaming is applied). If you
+see tags like \type {@pi@} this means that we don't have an element, but (in this
+case) a processing instruction.
+
+\starttabulate[|l|p|]
+\NC \type {@rt@} \NC the root element \NC \NR
+\NC \type {@dd@} \NC document definition \NC \NR
+\NC \type {@cm@} \NC comment, like \type {<!-- whatever -->} \NC \NR
+\NC \type {@cd@} \NC so called \type {CDATA} \NC \NR
+\NC \type {@pi@} \NC processing instruction, like \type {<?whatever we want ?>} \NC \NR
+\stoptabulate
+
+There are many ways to deal with the content, but in the perspective of \TEX\
+only a few matter.
+
+\starttabulate[|l|p|]
+\NC \type {xml.sprint(e)} \NC print the content to \TEX\ and apply setups if needed \NC \NR
+\NC \type {xml.tprint(e)} \NC print the content to \TEX\ (serialize elements verbose) \NC \NR
+\NC \type {xml.cprint(e)} \NC print the content to \TEX\ (used for special content) \NC \NR
+\stoptabulate
+
+Keep in mind that anything low level that you uncover is not part of the official
+interface unless mentioned in this manual.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Tips and tricks}]
+
+\startsection[title={tracing}]
+
+It can be hard to debug code as much happens kind of behind the screens.
+Therefore we have a couple of tracing options. Of course you can typeset some
+status information, using for instance:
+
+\startxmlcmd {\cmdbasicsetup{xmlshow}}
+ typeset the tree given by \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinfo}}
+ typeset the name if the element given by \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlpath}}
+ returns the complete path (including namespace prefix and index) of the
+ given \cmdinternal {cd:node}
+\stopxmlcmd
+
+\startbuffer[demo]
+<?xml version "1.0"?>
+<document>
+ <section>
+ <content>
+ <p>first</p>
+ <p><b>second</b></p>
+ </content>
+ </section>
+ <section>
+ <content>
+ <p><b>third</b></p>
+ <p>fourth</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+Say that we have the following \XML:
+
+\typebuffer[demo]
+
+and the next definitions:
+
+\startbuffer
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{p|b}{xml:demo:*}
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \xmlflush{#1}
+ \par
+\stopxmlsetups
+
+\startxmlsetups xml:demo:b
+ \par
+ \xmlpath{#1} : \xmlflush{#1}
+ \par
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-10}{xml:demo:base}
+
+\xmlprocessbuffer{example-10}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+This will give us:
+
+\blank \startpacked \getbuffer \stoppacked \blank
+
+If you use \type {\xmlshow} you will get a complete subtree which can
+be handy for tracing but can also lead to large documents.
+
+We also have a bunch of trackers that can be enabled, like:
+
+\starttyping
+\enabletrackers[xml.show,xml.parse]
+\stoptyping
+
+The full list (currently) is:
+
+\starttabulate[|lT|p|]
+\NC xml.entities \NC show what entities are seen and replaced \NC \NR
+\NC xml.path \NC show the result of parsing an lpath expression \NC \NR
+\NC xml.parse \NC show stepwise resolving of expressions \NC \NR
+\NC xml.profile \NC report all parsed lpath expressions (in the log) \NC \NR
+\NC xml.remap \NC show what namespaces are remapped \NC \NR
+\NC lxml.access \NC report errors with respect to resolving (symbolic) nodes \NC \NR
+\NC lxml.comments \NC show the comments that are encountered (if at all) \NC \NR
+\NC lxml.loading \NC show what files are loaded and converted \NC \NR
+\NC lxml.setups \NC show what setups are being associated to elements \NC \NR
+\stoptabulate
+
+In one of our workflows we produce books from \XML\ where the (educational)
+content is organized in many small files. Each book has about 5~chapters and each
+chapter is made of sections that contain text, exercises, resources, etc.\ and so
+the document is assembled from thousands of files (don't worry, runtime inclusion
+is pretty fast). In order to see where in the sources content resides we can
+trace the filename.
+
+\startxmlcmd {\cmdbasicsetup{xmlinclusion}}
+ returns the file where the node comes from
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinclusions}}
+ returns the list of files where the node comes from
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlbadinclusions}}
+ returns a list of files that were not included due to some problem
+\stopxmlcmd
+
+Of course you have to make sure that these names end up somewhere visible, for
+instance in the margin.
+
+\stopsection
+
+\startsection[title={expansion}]
+
+For novice users the concept of expansion might sound frightening and to some
+extend it is. However, it is important enough to spend some words on it here.
+
+It is good to realize that most setups are sort of immediate. When one setup is
+issued, it can call another one and so on. Normally you won't notice that but
+there are cases where that can be a problem. In \TEX\ you can define a macro,
+take for instance:
+
+\starttyping
+\startxmlsetups xml:foo
+ \def\foobar{\xmlfirst{#1}{/bar}}
+\stopxmlsetups
+\stoptyping
+
+you store the reference top node \type {bar} in \type {\foobar} maybe for later use. In
+this case the content is not yet fetched, it will be done when \type {\foobar} is
+called.
+
+\starttyping
+\startxmlsetups xml:foo
+ \edef\foobar{\xmlfirst{#1}{/bar}}
+\stopxmlsetups
+\stoptyping
+
+Here the content of \type {bar} becomes the body of the macro. But what if
+\type {bar} itself contains elements that also contain elements. When there
+is a setup for \type {bar} it will be triggered and so on.
+
+When that setup looks like:
+
+\starttyping
+\startxmlsetups xml:bar
+ \def\barfoo{\xmlflush{#1}}
+\stopxmlsetups
+\stoptyping
+
+Here we get something like:
+
+\starttyping
+\foobar => {\def\barfoo{...}}
+\stoptyping
+
+When \type {\barfoo} is not defined we get an error and when it is known and expands
+to something weird we might also get an error.
+
+Especially when you don't know what content can show up, this can result in errors
+when an expansion fails, for example because some macro being used is not defined.
+To prevent this we can define a macro:
+
+\starttyping
+\starttexdefinition unexpanded xml:bar:macro #1
+ \def\barfoo{\xmlflush{#1}}
+\stoptexdefinition
+
+\startxmlsetups xml:bar
+ \texdefinition{xml:bar:macro}{#1}
+\stopxmlsetups
+\stoptyping
+
+The setup \type {xml:bar} will still expand but the replacement text now is just the
+call to the macro, think of:
+
+\starttyping
+\foobar => {\texdefinition{xml:bar:macro}{#1}}
+\stoptyping
+
+But this is often not needed, most \CONTEXT\ commands can handle the expansions
+quite well but it's good to know that there is a way out. So, now to some
+examples. Imagine that we have an \XML\ file that looks as follows:
+
+\starttyping
+<?xml version='1.0' ?>
+<demo>
+ <chapter>
+ <title>Some <em>short</em> title</title>
+ <content>
+ zeta
+ <index>
+ <key>zeta</key>
+ <content>zeta again</content>
+ </index>
+ alpha
+ <index>
+ <key>alpha</key>
+ <content>alpha <em>again</em></content>
+ </index>
+ gamma
+ <index>
+ <key>gamma</key>
+ <content>gamma</content>
+ </index>
+ beta
+ <index>
+ <key>beta</key>
+ <content>beta</content>
+ </index>
+ delta
+ <index>
+ <key>delta</key>
+ <content>delta</content>
+ </index>
+ done!
+ </content>
+ </chapter>
+</demo>
+\stoptyping
+
+There are a few structure related elements here: a chapter (with its list entry)
+and some index entries. Both are multipass related and therefore travel around.
+This means that when we let data end up in the auxiliary file, we need to make
+sure that we end up with either expanded data (i.e.\ no references to the \XML\
+tree) or with robust forward and backward references to elements in the tree.
+
+Here we discuss three approaches (and more may show up later): pushing \XML\ into
+the auxiliary file and using references to elements either or not with an
+associated setup. We control the variants with a switch.
+
+\starttyping
+\newcount\TestMode
+
+\TestMode=0 % expansion=xml
+\TestMode=1 % expansion=yes, index, setup
+\TestMode=2 % expansion=yes
+\stoptyping
+
+We apply a couple of setups:
+
+\starttyping
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{\xmldocument}{demo|index|content|chapter|title|em}{xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+\stoptyping
+
+The main document is processed with:
+
+\starttyping
+\startxmlsetups xml:demo
+ \xmlflush{#1}
+ \subject{contents}
+ \placelist[chapter][criterium=all]
+ \subject{index}
+ \placeregister[index][criterium=all]
+ \page % else buffer is forgotten when placing header
+\stopxmlsetups
+\stoptyping
+
+First we show three alternative ways to deal with the chapter. The first case
+expands the \XML\ reference so that we have an \XML\ stream in the auxiliary
+file. This stream is processed as a small independent subfile when needed. The
+second case registers a reference to the current element (\type {#1}). This means
+that we have access to all data of this element, like attributes, title and
+content. What happens depends on the given setup. The third variant does the same
+but here the setup is part of the reference.
+
+\starttyping
+\startxmlsetups xml:chapter
+ \ifcase \TestMode
+ % xml code travels around
+ \setuphead[chapter][expansion=xml]
+ \startchapter[title=eh: \xmltext{#1}{title}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \or
+ % index is used for access via setup
+ \setuphead[chapter][expansion=yes,xmlsetup=xml:title:flush]
+ \startchapter[title=\xmlgetindex{#1}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \or
+ % tex call to xml using index is used
+ \setuphead[chapter][expansion=yes]
+ \startchapter[title=hm: \xmlreference{#1}{xml:title:flush}]
+ \xmlfirst{#1}{content}
+ \stopchapter
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:title:flush
+ \xmltext{#1}{title}
+\stopxmlsetups
+\stoptyping
+
+We need to deal with emphasis and the content of the chapter.
+
+\starttyping
+\startxmlsetups xml:em
+ \begingroup\em\xmlflush{#1}\endgroup
+\stopxmlsetups
+
+\startxmlsetups xml:content
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+A similar approach is followed with the index entries. Watch how we use the
+numbered entries variant (in this case we could also have used just \type
+{entries} and \type {keys}).
+
+\starttyping
+\startxmlsetups xml:index
+ \ifcase \TestMode
+ \setupregister[index][expansion=xml,xmlsetup=]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlfirst{#1}{content},
+ keys:1=\xmltext{#1}{key}]
+ \or
+ \setupregister[index][expansion=yes,xmlsetup=xml:index:flush]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlgetindex{#1},
+ keys:1=\xmltext{#1}{key}]
+ \or
+ \setupregister[index][expansion=yes,xmlsetup=]
+ \setstructurepageregister
+ [index]
+ [entries:1=\xmlreference{#1}{xml:index:flush},
+ keys:1=\xmltext{#1}{key}]
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:index:flush
+ \xmlfirst{#1}{content}
+\stopxmlsetups
+\stoptyping
+
+Instead of this flush, you can use the predefined setup \type {xml:flush}
+unless it is overloaded by you.
+
+The file is processed by:
+
+\starttyping
+\starttext
+ \xmlprocessfile{main}{test.xml}{}
+\stoptext
+\stoptyping
+
+We don't show the result here. If you're curious what the output is, you can test
+it yourself. In that case it also makes sense to peek into the \type {test.tuc}
+file to see how the information travels around. The \type {metadata} fields carry
+information about how to process the data.
+
+The first case, the \XML\ expansion one, is somewhat special in the sense that
+internally we use small pseudo files. You can control the rendering by tweaking
+the following setups:
+
+\starttyping
+\startxmlsetups xml:ctx:sectionentry
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:ctx:registerentry
+ \xmlflush{#1}
+\stopxmlsetups
+\stoptyping
+
+{\em When these methods work out okay the other structural elements will be
+dealt with in a similar way.}
+
+\stopsection
+
+\startsection[title={special cases}]
+
+Normally the content will be flushed under a special (so called) catcode regime.
+This means that characters that have a special meaning in \TEX\ will have no such
+meaning in an \XML\ file. If you want content to be treated as \TEX\ code, you can
+use one of the following:
+
+\startxmlcmd {\cmdbasicsetup{xmlflushcontext}}
+ flush the given \cmdinternal {cd:node} using the \TEX\ character
+ interpretation scheme
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlcontext}}
+ flush the match of \cmdinternal {cd:lpath} for the given \cmdinternal
+ {cd:node} using the \TEX\ character interpretation scheme
+\stopxmlcmd
+
+We use this in cases like:
+
+\starttyping
+....
+ \xmlsetsetup {#1} {
+ tm|texformula|
+ } {xml:*}
+....
+
+\startxmlsetups xml:tm
+ \mathematics{\xmlflushcontext{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:texformula
+ \placeformula\startformula\xmlflushcontext{#1}\stopformula
+\stopxmlsetups
+\stoptyping
+
+\stopsection
+
+\startsection[title={collecting}]
+
+Say that your document has
+
+\starttyping
+<table>
+ <tr>
+ <td>foo</td>
+ <td>bar<td>
+ </tr>
+</table>
+\stoptyping
+
+And that you need to convert that to \TEX\ speak like:
+
+\starttyping
+\bTABLE
+ \bTR
+ \bTD foo \eTD
+ \bTD bar \eTD
+ \eTR
+\eTABLE
+\stoptyping
+
+A simple mapping is:
+
+\starttyping
+\startxmlsetups xml:table
+ \bTABLE \xmlflush{#1} \eTABLE
+\stopxmlsetups
+\startxmlsetups xml:tr
+ \bTR \xmlflush{#1} \eTR
+\stopxmlsetups
+\startxmlsetups xml:td
+ \bTD \xmlflush{#1} \eTD
+\stopxmlsetups
+\stoptyping
+
+The \type {\bTD} command is a so called delimited command which means that it
+picks up its argument by looking for an \type {\eTD}. For the simple case here
+this works quite well because the flush is inside the pair. This is not the case
+in the following variant:
+
+\starttyping
+\startxmlsetups xml:td:start
+ \bTD
+\stopxmlsetups
+\startxmlsetups xml:td:stop
+ \eTD
+\stopxmlsetups
+\startxmlsetups xml:td
+ \xmlsetup{#1}{xml:td:start}
+ \xmlflush{#1}
+ \xmlsetup{#1}{xml:td:stop}
+\stopxmlsetups
+\stoptyping
+
+When for some reason \TEX\ gets confused you can revert to a mechanism that
+collects content.
+
+\starttyping
+\startxmlsetups xml:td:start
+ \startcollect
+ \bTD
+ \stopcollect
+\stopxmlsetups
+\startxmlsetups xml:td:stop
+ \startcollect
+ \eTD
+ \stopcollect
+\stopxmlsetups
+\startxmlsetups xml:td
+ \startcollecting
+ \xmlsetup{#1}{xml:td:start}
+ \xmlflush{#1}
+ \xmlsetup{#1}{xml:td:stop}
+ \stopcollecting
+\stopxmlsetups
+\stoptyping
+
+You can even implement solutions that effectively do this:
+
+\starttyping
+\startcollecting
+ \startcollect \bTABLE \stopcollect
+ \startcollect \bTR \stopcollect
+ \startcollect \bTD \stopcollect
+ \startcollect foo\stopcollect
+ \startcollect \eTD \stopcollect
+ \startcollect \bTD \stopcollect
+ \startcollect bar\stopcollect
+ \startcollect \eTD \stopcollect
+ \startcollect \eTR \stopcollect
+ \startcollect \eTABLE \stopcollect
+\stopcollecting
+\stoptyping
+
+Of course you only need to go that complex when the situation demands it. Here is
+another weird one:
+
+\starttyping
+\startcollecting
+ \startcollect \setupsomething[\stopcollect
+ \startcollect foo=\stopcollect
+ \startcollect FOO,\stopcollect
+ \startcollect bar=\stopcollect
+ \startcollect BAR,\stopcollect
+ \startcollect ]\stopcollect
+\stopcollecting
+\stoptyping
+
+\stopsection
+
+\startsection[title={selectors and injectors}]
+
+This section describes a bit special feature, one that we needed for a project
+where we could not touch the original content but could add specific sections for
+our own purpose. Hopefully the example demonstrates its useability.
+
+\enabletrackers[lxml.selectors]
+
+\startbuffer[foo]
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive message info 1: this is a demo file ?>
+<?context-message-directive info 2: this is a demo file ?>
+
+<one>
+ <two>
+ <?context-select begin t1 t2 t3 ?>
+ <three>
+ t1 t2 t3
+ <?context-directive injector crlf t1 ?>
+ t1 t2 t3
+ </three>
+ <?context-select end ?>
+ <?context-select begin t4 ?>
+ <four>
+ t4
+ </four>
+ <?context-select end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.0
+ t8.0
+ </four>
+ <?context-select end ?>
+ <?context-include begin t4 ?>
+ <!--
+ <three>
+ t4.t3
+ <?context-directive injector crlf t1 ?>
+ t4.t3
+ </three>
+ -->
+ <three>
+ t3
+ <?context-directive injector crlf t1 ?>
+ t3
+ </three>
+ <?context-include end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.1
+ t8.1
+ </four>
+ <?context-select end ?>
+ <?context-select begin t8 ?>
+ <four>
+ t8.2
+ t8.2
+ </four>
+ <?context-select end ?>
+ <?context-select begin t4 ?>
+ <four>
+ t4
+ t4
+ </four>
+ <?context-select end ?>
+ <?context-directive injector page t7 t8 ?>
+ foo
+ <?context-directive injector blank t1 ?>
+ bar
+ <?context-directive injector page t7 t8 ?>
+ bar
+ </two>
+</one>
+\stopbuffer
+
+\typebuffer[foo]
+
+First we show how to plug in a directive. Processing instructions like the
+following are normally ignored by an \XML\ processor, unless they make sense
+to it.
+
+\starttyping
+<?context-directive message info 1: this is a demo file ?>
+<?context-message-directive info 2: this is a demo file ?>
+\stoptyping
+
+We can define a message handler as follows:
+
+\startbuffer
+\def\MyMessage#1#2#3{\writestatus{#1}{#2 #3}}
+
+\xmlinstalldirective{message}{MyMessage}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+When this file is processed you will see this on the console:
+
+\starttyping
+info > 1: this is a demo file
+info > 2: this is a demo file
+\stoptyping
+
+The file has some sections that can be used or ignored. The recipe for
+obeying \type {t1} and \type {t4} is the following:
+
+\startbuffer
+\xmlsetinjectors[t1]
+\xmlsetinjectors[t4]
+
+\startxmlsetups xml:initialize
+ \xmlapplyselectors{#1}
+ \xmlsetsetup {#1} {
+ one|two|three|four
+ } {xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:initialize}
+
+\startxmlsetups xml:one
+ [ONE \xmlflush{#1} ONE]
+\stopxmlsetups
+
+\startxmlsetups xml:two
+ [TWO \xmlflush{#1} TWO]
+\stopxmlsetups
+
+\startxmlsetups xml:three
+ [THREE \xmlflush{#1} THREE]
+\stopxmlsetups
+
+\startxmlsetups xml:four
+ [FOUR \xmlflush{#1} FOUR]
+\stopxmlsetups
+\stopbuffer
+
+\typebuffer \getbuffer
+
+This typesets:
+
+\startnarrower
+\xmlprocessbuffer{main}{foo}{}
+\stopnarrower
+
+The include coding is kind of special: it permits adding content (in a comment)
+and ignoring the rest so that we indeed can add something without interfering
+with the original. Of course in a normal workflow such messy solutions are
+not needed, but alas, often workflows are not that clean, especially when one
+has no real control over the source.
+
+\startxmlcmd {\cmdbasicsetup{xmlsetinjectors}}
+ enables a list of injectors that will be used
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlresetinjectors}}
+ resets the list of injectors
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlinjector}}
+ expands an injection (command); normally this one is only used
+ (in some setup) or for testing
+\stopxmlcmd
+
+\startxmlcmd {\cmdbasicsetup{xmlapplyselectors}}
+ analyze the tree \cmdinternal {cd:node} for marked sections that
+ will be injected
+\stopxmlcmd
+
+We have some injections predefined:
+
+\starttyping
+\startsetups xml:directive:injector:page
+ \page
+\stopsetups
+
+\startsetups xml:directive:injector:column
+ \column
+\stopsetups
+
+\startsetups xml:directive:injector:blank
+ \blank
+\stopsetups
+\stoptyping
+
+In the example we see:
+
+\starttyping
+<?context-directive injector page t7 t8 ?>
+\stoptyping
+
+When we set \type {\xmlsetinjector[t7]} a pagebreak will injected in that spot.
+Tags like \type {t7}, \type {t8} etc.\ can represent versions.
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title={Lookups using lpaths}]
+
+\startsection[title={introduction}]
+
+There is not that much system in the following examples. They resulted from tests
+with different documents. The current implementation evolved out of the
+experimental code. For instance, I decided to add the multiple expressions in row
+handling after a few email exchanges with Jean|-|Michel Huffen.
+
+One of the main differences between the way \XSLT\ resolves a path and our way is
+the anchor. Take:
+
+\starttyping
+/something
+something
+\stoptyping
+
+The first one anchors in the current (!) element so it will only consider direct
+children. The second one does a deep lookup and looks at the descendants as well.
+Furthermore we have a few extra shortcuts like \type {**} in \type {a/**/b} which
+represents all descendants.
+
+The expressions (between square brackets) has to be valid \LUA\ and some
+preprocessing is done to resolve the built in functions. So, you might use code
+like:
+
+\starttyping
+my_lpeg_expression:match(text()) == "whatever"
+\stoptyping
+
+given that \type {my_lpeg_expression} is known. In the examples below we use the
+visualizer to show the steps. Some are shown more than once as part of a set.
+
+\stopsection
+
+\startsection[title={special cases}]
+
+\xmllshow{}
+\xmllshow{*}
+\xmllshow{.}
+\xmllshow{/}
+
+\stopsection
+
+\startsection[title={wildcards}]
+
+\xmllshow{*}
+\xmllshow{*:*}
+\xmllshow{/*}
+\xmllshow{/*:*}
+\xmllshow{*/*}
+\xmllshow{*:*/*:*}
+
+\xmllshow{a/*}
+\xmllshow{a/*:*}
+\xmllshow{/a/*}
+\xmllshow{/a/*:*}
+
+\xmllshow{/*}
+\xmllshow{/**}
+\xmllshow{/***}
+
+\stopsection
+
+\startsection[title={multiple steps}]
+
+\xmllshow{answer}
+\xmllshow{answer/test/*}
+\xmllshow{answer/test/child::}
+\xmllshow{answer/*}
+\xmllshow{answer/*[tag()='p' and position()=1 and text()!='']}
+
+\stopsection
+
+\startsection[title={pitfals}]
+
+\xmllshow{[oneof(lower(@encoding),'tex','context','ctx')]}
+\xmllshow{.[oneof(lower(@encoding),'tex','context','ctx')]}
+
+\stopsection
+
+\startsection[title={more special cases}]
+
+\xmllshow{**}
+\xmllshow{*}
+\xmllshow{..}
+\xmllshow{.}
+\xmllshow{//}
+\xmllshow{/}
+
+\xmllshow{**/}
+\xmllshow{**/*}
+\xmllshow{**/.}
+\xmllshow{**//}
+
+\xmllshow{*/}
+\xmllshow{*/*}
+\xmllshow{*/.}
+\xmllshow{*//}
+
+\xmllshow{/**/}
+\xmllshow{/**/*}
+\xmllshow{/**/.}
+\xmllshow{/**//}
+
+\xmllshow{/*/}
+\xmllshow{/*/*}
+\xmllshow{/*/.}
+\xmllshow{/*//}
+
+\xmllshow{./}
+\xmllshow{./*}
+\xmllshow{./.}
+\xmllshow{.//}
+
+\xmllshow{../}
+\xmllshow{../*}
+\xmllshow{../.}
+\xmllshow{..//}
+
+\stopsection
+
+\startsection[title={more wildcards}]
+
+\xmllshow{one//two}
+\xmllshow{one/*/two}
+\xmllshow{one/**/two}
+\xmllshow{one/***/two}
+\xmllshow{one/x//two}
+\xmllshow{one//x/two}
+\xmllshow{//x/two}
+
+\stopsection
+
+\startsection[title={special axis}]
+
+\xmllshow{descendant::whocares/ancestor::whoknows}
+\xmllshow{descendant::whocares/ancestor::whoknows/parent::}
+\xmllshow{descendant::whocares/ancestor::}
+\xmllshow{child::something/child::whatever/child::whocares}
+\xmllshow{child::something/child::whatever/child::whocares|whoknows}
+\xmllshow{child::something/child::whatever/child::(whocares|whoknows)}
+\xmllshow{child::something/child::whatever/child::!(whocares|whoknows)}
+\xmllshow{child::something/child::whatever/child::(whocares)}
+\xmllshow{child::something/child::whatever/child::(whocares)[position()>2]}
+\xmllshow{child::something/child::whatever[position()>2][position()=1]}
+\xmllshow{child::something/child::whatever[whocares][whocaresnot]}
+\xmllshow{child::something/child::whatever[whocares][not(whocaresnot)]}
+\xmllshow{child::something/child::whatever/self::whatever}
+
+There is also \type {last-match::} that starts with the last found set of nodes.
+This can save some runtime when you do lots of tests combined with a same check
+afterwards.
+
+\stopsection
+
+\startsection[title={some more examples}]
+
+\xmllshow{/something/whatever}
+\xmllshow{something/whatever}
+\xmllshow{/**/whocares}
+\xmllshow{whoknows/whocares}
+\xmllshow{whoknows}
+\xmllshow{whocares[contains(text(),'f') or contains(text(),'g')]}
+\xmllshow{whocares/first()}
+\xmllshow{whocares/last()}
+\xmllshow{whatever/all()}
+\xmllshow{whocares/position(2)}
+\xmllshow{whocares/position(-2)}
+\xmllshow{whocares[1]}
+\xmllshow{whocares[-1]}
+\xmllshow{whocares[2]}
+\xmllshow{whocares[-2]}
+\xmllshow{whatever[3]/attribute(id)}
+\xmllshow{whatever[2]/attribute('id')}
+\xmllshow{whatever[3]/text()}
+\xmllshow{/whocares/first()}
+\xmllshow{/whocares/last()}
+
+\xmllshow{xml://whatever/all()}
+\xmllshow{whatever/all()}
+\xmllshow{//whocares}
+\xmllshow{..[2]}
+\xmllshow{../*[2]}
+
+\xmllshow{/(whocares|whocaresnot)}
+\xmllshow{/!(whocares|whocaresnot)}
+\xmllshow{/!whocares}
+
+\xmllshow{/interface/command/command(xml:setups:register)}
+\xmllshow{/interface/command[@name='xxx']/command(xml:setups:typeset)}
+\xmllshow{/arguments/*}
+\xmllshow{/sequence/first()}
+\xmllshow{/arguments/text()}
+\xmllshow{/sequence/variable/first()}
+\xmllshow{/interface/define[@name='xxx']/first()}
+\xmllshow{/parameter/command(xml:setups:parameter:measure)}
+
+\xmllshow{/(*:library|figurelibrary)/*:figure/*:label}
+\xmllshow{/(*:library|figurelibrary)/figure/*:label}
+\xmllshow{/(*:library|figurelibrary)/figure/label}
+\xmllshow{/(*:library|figurelibrary)/figure:*/label}
+
+\xmlshow {whatever//br[tag(1)='br']}
+
+\stopsection
+
+\stopchapter
+
+\startchapter[title=Examples]
+
+\startsection[title=attribute chains]
+
+In \CSS, when an attribute is not present, the parent element is checked, and when
+not found again, the lookup follows the chain till a match is found or the root is
+reached. The following example demonstrates how such a chain lookup works.
+
+\startbuffer[test]
+<something mine="1" test="one" more="alpha">
+ <whatever mine="2" test="two">
+ <whocares mine="3">
+ <!-- this is a test -->
+ </whocares>
+ </whatever>
+</something>
+\stopbuffer
+
+\typebuffer[test]
+
+We apply the following setups to this tree:
+
+\startbuffer[setups]
+\startxmlsetups xml:common
+ [
+ \xmlchainatt{#1}{mine},
+ \xmlchainatt{#1}{test},
+ \xmlchainatt{#1}{more},
+ \xmlchainatt{#1}{none}
+ ]\par
+\stopxmlsetups
+
+\startxmlsetups xml:something
+ something: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:whatever
+ whatever: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:whocares
+ whocares: \xmlsetup{#1}{xml:common}
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{#1}{something|whatever|whocares}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-1}{xml:mysetups}
+
+\xmlprocessbuffer{example-1}{test}{}
+\stopbuffer
+
+\typebuffer[setups]
+
+This gives:
+
+\start
+ \getbuffer[setups]
+\stop
+
+\stopsection
+
+\startsection[title=conditional setups]
+
+Say that we have this code:
+
+\starttyping
+\xmldoifelse {#1} {/what[@a='1']} {
+ \xmlfilter {#1} {/what/command('xml:yes')}
+} {
+ \xmlfilter {#1} {/what/command('xml:nop')}
+}
+\stoptyping
+
+Here we first determine if there is a child \type {what} with attribute \type {a}
+set to \type {1}. Depending on the outcome again we check the child nodes for
+being named \type {what}. A faster solution which also takes less code is this:
+
+\starttyping
+\xmlfilter {#1} {/what[@a='1']/command('xml:yes','xml:nop')}
+\stoptyping
+
+\stopsection
+
+\startsection[title=manipulating]
+
+Assume that we have the following \XML\ data:
+
+\startbuffer[test]
+<A>
+ <B>right</B>
+ <B>wrong</B>
+</A>
+\stopbuffer
+
+\typebuffer[test]
+
+But, instead of \type {right} we want to see \type {okay}. We can do that with a
+finalizer:
+
+\startbuffer
+\startluacode
+local rehash = {
+ ["right"] = "okay",
+}
+
+function xml.finalizers.tex.Okayed(collected,what)
+ for i=1,#collected do
+ if what == "all" then
+ local str = xml.text(collected[i])
+ context(rehash[str] or str)
+ else
+ context(str)
+ end
+ end
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startbuffer
+\startxmlsetups xml:A
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:B
+ (It's \xmlfilter{#1}{./Okayed("all")})
+\stopxmlsetups
+
+\startxmlsetups xml:testsetups
+ \xmlsetsetup{#1}{A|B}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-2}{xml:testsetups}
+\xmlprocessbuffer{example-2}{test}{}
+\stopbuffer
+
+\typebuffer
+
+The result is: \start \inlinebuffer \stop
+
+\stopsection
+
+\startsection[title=cross referencing]
+
+A rather common way to add cross references to \XML\ files is to borrow the
+asymmetrical id's from \HTML. This means that one cannot simply use a value
+of (say) \type {href} to locate an \type {id}. The next example came up on
+the \CONTEXT\ mailing list.
+
+\startbuffer[test]
+<doc>
+ <p>Text
+ <a href="#fn1" class="footnoteref" id="fnref1"><sup>1</sup></a> and
+ <a href="#fn2" class="footnoteref" id="fnref2"><sup>2</sup></a>
+ </p>
+ <div class="footnotes">
+ <hr />
+ <ol>
+ <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li>
+ <li id="fn2"><p>A second footnote.<a href="#fnref2">↩</a></p></li>
+ </ol>
+ </div>
+</doc>
+\stopbuffer
+
+\typebuffer[test]
+
+We give two variants for dealing with such references. The first solution does
+lookups and depending on the size of the file can be somewhat inefficient.
+
+\startbuffer
+\startxmlsetups xml:doc
+ \blank
+ \xmlflush{#1}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:p
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:footnote
+ (variant 1)\footnote
+ {\xmlfirst
+ {example-3-1}
+ {div[@class='footnotes']/ol/li[@id='\xmlrefatt{#1}{href}']}}
+\stopxmlsetups
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup{#1}{p|doc}{xml:*}
+ \xmlsetsetup{#1}{a[@class='footnoteref']}{xml:footnote}
+ \xmlsetsetup{#1}{div[@class='footnotes']}{xml:nothing}
+\stopxmlsetups
+
+\xmlresetdocumentsetups{*}
+\xmlregisterdocumentsetup{example-3-1}{xml:initialize}
+
+\xmlprocessbuffer{example-3-1}{test}{}
+\stopbuffer
+
+\typebuffer
+
+This will typeset two footnotes.
+
+\getbuffer
+
+The second variant collects the references so that the time spend on lookups is
+less.
+
+\startbuffer
+\startxmlsetups xml:doc
+ \blank
+ \xmlflush{#1}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:p
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startluacode
+ userdata.notes = {}
+\stopluacode
+
+\startxmlsetups xml:collectnotes
+ \ctxlua{userdata.notes['\xmlrefatt{#1}{id}'] = '#1'}
+\stopxmlsetups
+
+\startxmlsetups xml:footnote
+ (variant 2)\footnote
+ {\xmlflush
+ {\cldcontext{userdata.notes['\xmlrefatt{#1}{href}']}}}
+\stopxmlsetups
+
+\startxmlsetups xml:initialize
+ \xmlsetsetup{#1}{p|doc}{xml:*}
+ \xmlsetsetup{#1}{a[@class='footnoteref']}{xml:footnote}
+ \xmlfilter{#1}{div[@class='footnotes']/ol/li/command(xml:collectnotes)}
+ \xmlsetsetup{#1}{div[@class='footnotes']}{}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-3-2}{xml:initialize}
+
+\xmlprocessbuffer{example-3-2}{test}{}
+\stopbuffer
+
+\typebuffer
+
+This will again typeset two footnotes:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=mapping values]
+
+One way to process options \type {frame} in the example below is to map the
+values to values known by \CONTEXT.
+
+\startbuffer[test]
+<a>
+ <nattable frame="on">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+ <nattable frame="off">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+ <nattable frame="no">
+ <tr><td>#1</td><td>#2</td><td>#3</td><td>#4</td></tr>
+ <tr><td>#5</td><td>#6</td><td>#7</td><td>#8</td></tr>
+ </nattable>
+</a>
+\stopbuffer
+
+\typebuffer[test]
+
+\startbuffer
+\startxmlsetups xml:a
+ \xmlflush{#1}
+\stopxmlsetups
+
+\xmlmapvalue {nattable:frame} {on} {on}
+\xmlmapvalue {nattable:frame} {yes} {on}
+\xmlmapvalue {nattable:frame} {off} {off}
+\xmlmapvalue {nattable:frame} {no} {off}
+
+\startxmlsetups xml:nattable
+ \startplacetable[title=#1]
+ \setupTABLE[frame=\xmlval{nattable:frame}{\xmlatt{#1}{frame}}{on}]%
+ \bTABLE
+ \xmlflush{#1}
+ \eTABLE
+ \stopplacetable
+\stopxmlsetups
+
+\startxmlsetups xml:tr
+ \bTR
+ \xmlflush{#1}
+ \eTR
+\stopxmlsetups
+
+\startxmlsetups xml:td
+ \bTD
+ \xmlflush{#1}
+ \eTD
+\stopxmlsetups
+
+\startxmlsetups xml:testsetups
+ \xmlsetsetup{example-4}{a|nattable|tr|td|}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-4}{xml:testsetups}
+
+\xmlprocessbuffer{example-4}{test}{}
+\stopbuffer
+
+The \type {\xmlmapvalue} mechanism is rather efficient and involves a minimum
+of testing.
+
+\typebuffer
+
+We get:
+
+\getbuffer
+
+\stopsection
+
+\startsection[title=using \LUA]
+
+In this example we demonstrate how you can delegate rendering to \LUA. We
+will construct a so called extreme table. The input is:
+
+\startbuffer[demo]
+<?xml version="1.0" encoding="utf-8"?>
+
+<a>
+ <b> <c>1</c> <d>Text</d> </b>
+ <b> <c>2</c> <d>More text</d> </b>
+ <b> <c>2</c> <d>Even more text</d> </b>
+ <b> <c>2</c> <d>And more</d> </b>
+ <b> <c>3</c> <d>And even more</d> </b>
+ <b> <c>2</c> <d>The last text</d> </b>
+</a>
+\stopbuffer
+
+\typebuffer[demo]
+
+The processor code is:
+
+\startbuffer[process]
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{a|b|c|d}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+We color a sequence of the same titles (numbers here) differently. The first
+solution remembers the last title:
+
+\startbuffer
+\startxmlsetups xml:a
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_ba}
+\stopxmlsetups
+
+\startluacode
+local lasttitle = nil
+
+function xml.functions.test_ba(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ context.startxcell {
+ background = "color",
+ backgroundcolor = lasttitle == title and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ lasttitle = title
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+The \type {embeddedxtable} environment is needed because the table is picked up
+as argument.
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+The second implemetation remembers what titles are already processed so here we
+can color the last one too.
+
+\startbuffer
+\startxmlsetups xml:a
+ \ctxlua{xml.functions.reset_bb()}
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_bb}
+\stopxmlsetups
+
+\startluacode
+local titles
+
+function xml.functions.reset_bb(t)
+ titles = { }
+end
+
+function xml.functions.test_bb(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ context.startxcell {
+ background = "color",
+ backgroundcolor = titles[title] and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ titles[title] = true
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+A solution without any state variable is given below.
+
+\startbuffer
+\startxmlsetups xml:a
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \xmlfunction{#1}{test_bc}
+\stopxmlsetups
+
+\startluacode
+function xml.functions.test_bc(t)
+ local title = xml.text(t, "/c")
+ local content = xml.text(t, "/d")
+ context.startxrow()
+ local okay = xml.text(t,"./preceding-sibling::/[-1]") == title
+ context.startxcell {
+ background = "color",
+ backgroundcolor = okay and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ context(title)
+ context.stopxcell()
+ context.startxcell()
+ context(content)
+ context.stopxcell()
+ context.stopxrow()
+end
+\stopluacode
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\startlinecorrection \getbuffer[process] \stoplinecorrection
+
+Here is a solution that delegates even more to \LUA. The previous variants were
+actually not that safe with repect to special characters and didn't handle
+nested elements either but the next one does.
+
+\startbuffer[demo]
+<?xml version="1.0" encoding="utf-8"?>
+
+<a>
+ <b> <c>#1</c> <d>Text</d> </b>
+ <b> <c>#2</c> <d>More text</d> </b>
+ <b> <c>#2</c> <d>Even more text</d> </b>
+ <b> <c>#2</c> <d>And more</d> </b>
+ <b> <c>#3</c> <d>And even more</d> </b>
+ <b> <c>#2</c> <d>Something <i>nested</i> </d> </b>
+</a>
+\stopbuffer
+
+\typebuffer[demo]
+
+We also need to map the \type {i} element.
+
+\startbuffer
+\startxmlsetups xml:a
+ \starttexcode
+ \xmlfunction{#1}{test_a}
+ \stoptexcode
+\stopxmlsetups
+
+\startxmlsetups xml:c
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:d
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:i
+ {\em\xmlflush{#1}}
+\stopxmlsetups
+
+\startluacode
+function xml.functions.test_a(t)
+ context.startxtable()
+ local previous = false
+ for b in xml.collected(lxml.getid(t),"/b") do
+ context.startxrow()
+ local current = xml.text(b,"/c")
+ context.startxcell {
+ background = "color",
+ backgroundcolor = (previous == current) and "colorone" or "colortwo",
+ foregroundstyle = "bold",
+ foregroundcolor = "white",
+ }
+ lxml.first(b,"/c")
+ context.stopxcell()
+ context.startxcell()
+ lxml.first(b,"/d")
+ context.stopxcell()
+ previous = current
+ context.stopxrow()
+ end
+ context.stopxtable()
+end
+\stopluacode
+
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{a|b|c|d|i}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+The question is, do we really need \LUA ? Often we don't, apart maybe from an
+occasional special finalizer. A pure \TEX\ solution is given next:
+
+\startbuffer
+\startxmlsetups xml:a
+ \glet\MyPreviousTitle\empty
+ \glet\MyCurrentTitle \empty
+ \startembeddedxtable
+ \xmlflush{#1}
+ \stopembeddedxtable
+\stopxmlsetups
+
+\startxmlsetups xml:b
+ \startxrow
+ \xmlflush{#1}
+ \stopxrow
+\stopxmlsetups
+
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \doifelse {\MyPreviousTitle} {\MyCurrentTitle} {
+ \startxcell
+ [background=color,
+ backgroundcolor=colorone,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ } {
+ \glet\MyPreviousTitle\MyCurrentTitle
+ \startxcell
+ [background=color,
+ backgroundcolor=colortwo,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ }
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:d
+ \startxcell
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:i
+ {\em\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:test_setups
+ \xmlsetsetup{#1}{*}{xml:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-5}{xml:test_setups}
+
+\xmlprocessbuffer{example-5}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+\startlinecorrection \getbuffer \stoplinecorrection
+
+You can even save a few lines of code:
+
+\starttyping
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \startxcell
+ [background=color,
+ backgroundcolor=color\ifx\MyPreviousTitle\MyCurrentTitle one\else two\fi,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+ \glet\MyPreviousTitle\MyCurrentTitle
+\stopxmlsetups
+\stoptyping
+
+Or if you prefer:
+
+\starttyping
+\startxmlsetups xml:c
+ \xdef\MyCurrentTitle{\xmltext{#1}{.}}
+ \doifelse {\MyPreviousTitle} {\MyCurrentTitle} {
+ \xmlsetup{#1}{xml:c:one}
+ } {
+ \xmlsetup{#1}{xml:c:two}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:c:one
+ \startxcell
+ [background=color,
+ backgroundcolor=colorone,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+\stopxmlsetups
+
+\startxmlsetups xml:c:two
+ \startxcell
+ [background=color,
+ backgroundcolor=colortwo,
+ foregroundstyle=bold,
+ foregroundcolor=white]
+ \xmlflush{#1}
+ \stopxcell
+ \global\let\MyPreviousTitle\MyCurrentTitle
+\stopxmlsetups
+\stoptyping
+
+These examples demonstrate that it doesn't hurt to know a little bit of \TEX\
+programming: defining macros and basic comparisons can come in handy. There are
+examples in the test suite, you can peek in the source code, you can consult
+the wiki or you can just ask on the list.
+
+\stopsection
+
+\startsection[title=last match]
+
+For the next example we use the following \XML\ input:
+
+\startbuffer[demo]
+<?xml version "1.0"?>
+<document>
+ <section id="1">
+ <content>
+ <p>first</p>
+ <p>second</p>
+ </content>
+ </section>
+ <section id="2">
+ <content>
+ <p>third</p>
+ <p>fourth</p>
+ </content>
+ </section>
+</document>
+\stopbuffer
+
+\typebuffer[demo]
+
+If you check if some element is present and then act accordingly, you can
+end up with doing the same lookup twice. Although it might sound inefficient,
+in practice it's often not measureable.
+
+\startbuffer
+\startxmlsetups xml:demo:document
+ \type{\xmlall{#1}{/section[@id='2']/content/p}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlall{#1}{/section[@id='2']/content/p}
+ }
+ \type{\xmllastmatch}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmllastmatch
+ }
+ \type{\xmlall{#1}{last-match::}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlall{#1}{last-match::}
+ }
+ \type{\xmlfilter{#1}{last-match::/command(xml:demo:p)}}\par
+ \xmldoif{#1}{/section[@id='2']/content/p} {
+ \xmlfilter{#1}{last-match::/command(xml:demo:p)}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:demo:p
+ \quad\xmlflush{#1}\endgraf
+\stopxmlsetups
+
+\startxmlsetups xml:demo:base
+ \xmlsetsetup{#1}{document|p}{xml:demo:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{example-6}{xml:demo:base}
+
+\xmlprocessbuffer{example-6}{demo}{}
+\stopbuffer
+
+\typebuffer
+
+In the second check we just flush the last match, so effective we do an \type
+{\xmlall} here. The third and fourth alternatives demonstrate how we can use
+\type {last-match} as axis. The gain is 10\% or more on the lookup but of course
+typesetting often takes relatively more time than the lookup.
+
+\startpacked
+\getbuffer
+\stoppacked
+
+\stopsection
+
+\stopchapter
+
+\stopbodymatter
+
+\stoptext
diff --git a/Master/texmf-dist/doc/man/man1/context.1 b/Master/texmf-dist/doc/man/man1/context.1
index 0c2f607f21d..f1c552832c2 100644
--- a/Master/texmf-dist/doc/man/man1/context.1
+++ b/Master/texmf-dist/doc/man/man1/context.1
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2015" "version 0.60" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -20,6 +20,9 @@ create context formats
.B --ctx=name
use ctx file (process management specification)
.TP
+.B --noctx
+ignore ctx directives and flags
+.TP
.B --interface
use specified user interface (default: en)
.TP
@@ -110,6 +113,12 @@ run without stopping
.B --synctex
run with synctex enabled (optional value: zipped, unzipped, 1, -1)
.TP
+.B --nodates
+omit runtime dates in pdf file
+.TP
+.B --trailerid
+alternative trailer id (or constant one)
+.TP
.B --generate
generate file database etc. (as luatools does)
.TP
diff --git a/Master/texmf-dist/doc/man/man1/context.man1.pdf b/Master/texmf-dist/doc/man/man1/context.man1.pdf
index 2aa548e8e79..73e045441c0 100644
--- a/Master/texmf-dist/doc/man/man1/context.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/context.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/luatools.1 b/Master/texmf-dist/doc/man/man1/luatools.1
index ecdd6aa326a..bcf7fb5142e 100644
--- a/Master/texmf-dist/doc/man/man1/luatools.1
+++ b/Master/texmf-dist/doc/man/man1/luatools.1
@@ -1,4 +1,4 @@
-.TH "luatools" "1" "01-01-2015" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "luatools" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B luatools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/luatools.man1.pdf b/Master/texmf-dist/doc/man/man1/luatools.man1.pdf
index c35b66696c5..7cc69197832 100644
--- a/Master/texmf-dist/doc/man/man1/luatools.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/luatools.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-babel.1 b/Master/texmf-dist/doc/man/man1/mtx-babel.1
index 8477eb522e2..a0a3f312f41 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-babel.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-babel.1
@@ -1,4 +1,4 @@
-.TH "mtx-babel" "1" "01-01-2015" "version 1.20" "Babel Input To UTF Conversion"
+.TH "mtx-babel" "1" "01-01-2016" "version 1.20" "Babel Input To UTF Conversion"
.SH NAME
.B mtx-babel
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-babel.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-babel.man1.pdf
index 4260817a38e..e1bc4e198e4 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-babel.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-babel.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-base.1 b/Master/texmf-dist/doc/man/man1/mtx-base.1
index 08e13b09d67..fdd239c68db 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-base.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-base.1
@@ -1,4 +1,4 @@
-.TH "mtx-base" "1" "01-01-2015" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "mtx-base" "1" "01-01-2016" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B mtx-base
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-base.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-base.man1.pdf
index 450c2b6335a..d6a6a12dbac 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-base.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-base.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-bibtex.1 b/Master/texmf-dist/doc/man/man1/mtx-bibtex.1
new file mode 100644
index 00000000000..7fdb304a59c
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/mtx-bibtex.1
@@ -0,0 +1,33 @@
+.TH "mtx-bibtex" "1" "01-01-2016" "version 1.00" "bibtex helpers"
+.SH NAME
+.B mtx-bibtex
+.SH SYNOPSIS
+.B mtxrun --script bibtex [
+.I OPTIONS ...
+.B ] [
+.I FILENAMES
+.B ]
+.SH DESCRIPTION
+.B bibtex helpers
+.SH OPTIONS
+.TP
+.B --toxml
+convert bibtex database(s) to xml
+.TP
+.B --tolua
+convert bibtex database(s) to lua
+.TP
+.B --search
+seatch bibtex database(s)
+.SH AUTHOR
+More information about ConTeXt and the tools that come with it can be found at:
+
+
+.B "maillist:"
+ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
+
+.B "webpage:"
+http://www.pragma-ade.nl / http://tex.aanhet.net
+
+.B "wiki:"
+http://contextgarden.net
diff --git a/Master/texmf-dist/doc/man/man1/mtx-bibtex.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-bibtex.man1.pdf
new file mode 100644
index 00000000000..e2e7e410abd
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/mtx-bibtex.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-cache.1 b/Master/texmf-dist/doc/man/man1/mtx-cache.1
index cc448a5c817..91c9aa45e92 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-cache.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-cache.1
@@ -1,4 +1,4 @@
-.TH "mtx-cache" "1" "01-01-2015" "version 0.10" "ConTeXt & MetaTeX Cache Management"
+.TH "mtx-cache" "1" "01-01-2016" "version 0.10" "ConTeXt & MetaTeX Cache Management"
.SH NAME
.B mtx-cache
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-cache.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-cache.man1.pdf
index db5072ed658..94d1cd65e99 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-cache.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-cache.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-chars.1 b/Master/texmf-dist/doc/man/man1/mtx-chars.1
index 5c9d79bb3b8..f05536430ef 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-chars.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-chars.1
@@ -1,4 +1,4 @@
-.TH "mtx-chars" "1" "01-01-2015" "version 0.10" "MkII Character Table Generators"
+.TH "mtx-chars" "1" "01-01-2016" "version 0.10" "MkII Character Table Generators"
.SH NAME
.B mtx-chars
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-chars.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-chars.man1.pdf
index bc5b41457cb..d3c930ffdc6 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-chars.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-chars.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-check.1 b/Master/texmf-dist/doc/man/man1/mtx-check.1
index ca18bc1a601..85a352d04a5 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-check.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-check.1
@@ -1,4 +1,4 @@
-.TH "mtx-check" "1" "01-01-2015" "version 0.10" "Basic ConTeXt Syntax Checking"
+.TH "mtx-check" "1" "01-01-2016" "version 0.10" "Basic ConTeXt Syntax Checking"
.SH NAME
.B mtx-check
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-check.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-check.man1.pdf
index 57e7446191f..143af9c3576 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-check.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-check.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-colors.1 b/Master/texmf-dist/doc/man/man1/mtx-colors.1
index a969e474cbc..9d1de2b357c 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-colors.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-colors.1
@@ -1,4 +1,4 @@
-.TH "mtx-colors" "1" "01-01-2015" "version 0.10" "ConTeXt Color Management"
+.TH "mtx-colors" "1" "01-01-2016" "version 0.10" "ConTeXt Color Management"
.SH NAME
.B mtx-colors
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-colors.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-colors.man1.pdf
index 71b027d7dc3..31b0362a21f 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-colors.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-colors.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-context.1 b/Master/texmf-dist/doc/man/man1/mtx-context.1
index 0c2f607f21d..f1c552832c2 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-context.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-context.1
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2015" "version 0.60" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2016" "version 0.62" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
@@ -20,6 +20,9 @@ create context formats
.B --ctx=name
use ctx file (process management specification)
.TP
+.B --noctx
+ignore ctx directives and flags
+.TP
.B --interface
use specified user interface (default: en)
.TP
@@ -110,6 +113,12 @@ run without stopping
.B --synctex
run with synctex enabled (optional value: zipped, unzipped, 1, -1)
.TP
+.B --nodates
+omit runtime dates in pdf file
+.TP
+.B --trailerid
+alternative trailer id (or constant one)
+.TP
.B --generate
generate file database etc. (as luatools does)
.TP
diff --git a/Master/texmf-dist/doc/man/man1/mtx-context.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-context.man1.pdf
index 6c39157d728..728eebdc354 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-context.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-context.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-epub.1 b/Master/texmf-dist/doc/man/man1/mtx-epub.1
index bb33c23df29..f40501270ae 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-epub.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-epub.1
@@ -1,4 +1,4 @@
-.TH "mtx-epub" "1" "01-01-2015" "version 1.10" "ConTeXt EPUB Helpers"
+.TH "mtx-epub" "1" "01-01-2016" "version 1.10" "ConTeXt EPUB Helpers"
.SH NAME
.B mtx-epub
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-epub.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-epub.man1.pdf
index fa22a0231a0..00b91ae6524 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-epub.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-epub.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-fcd.1 b/Master/texmf-dist/doc/man/man1/mtx-fcd.1
index 311f90e4a8a..80d8670e4b8 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-fcd.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-fcd.1
@@ -1,4 +1,4 @@
-.TH "mtx-fcd" "1" "01-01-2015" "version 1.00" "Fast Directory Change"
+.TH "mtx-fcd" "1" "01-01-2016" "version 1.00" "Fast Directory Change"
.SH NAME
.B mtx-fcd
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-fcd.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-fcd.man1.pdf
index 2e60078cf38..89b28e04153 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-fcd.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-fcd.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-flac.1 b/Master/texmf-dist/doc/man/man1/mtx-flac.1
index 4ab875899c6..693cb71ed72 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-flac.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-flac.1
@@ -1,4 +1,4 @@
-.TH "mtx-flac" "1" "01-01-2015" "version 0.10" "ConTeXt Flac Helpers"
+.TH "mtx-flac" "1" "01-01-2016" "version 0.10" "ConTeXt Flac Helpers"
.SH NAME
.B mtx-flac
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-flac.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-flac.man1.pdf
index 9f4d7f050b0..d39cbe636f5 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-flac.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-flac.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-fonts.1 b/Master/texmf-dist/doc/man/man1/mtx-fonts.1
index c0806a32c8c..676ca17ab08 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-fonts.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-fonts.1
@@ -1,4 +1,4 @@
-.TH "mtx-fonts" "1" "01-01-2015" "version 0.21" "ConTeXt Font Database Management"
+.TH "mtx-fonts" "1" "01-01-2016" "version 0.21" "ConTeXt Font Database Management"
.SH NAME
.B mtx-fonts
.SH SYNOPSIS
@@ -12,7 +12,10 @@
.SH OPTIONS
.TP
.B --save
-save open type font in raw table
+save open type font in raw table (ff format)
+.TP
+.B --convert
+save open type font in raw table (ctx format)
.TP
.B --unpack
save a tma file in a more readable format
@@ -49,6 +52,12 @@ enable trackers
.TP
.B --statistics
some info about the database
+.TP
+.B --names
+use name instead of unicodes
+.TP
+.B --cache=str
+use specific cache (otl or otf)
.SH AUTHOR
More information about ConTeXt and the tools that come with it can be found at:
diff --git a/Master/texmf-dist/doc/man/man1/mtx-fonts.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-fonts.man1.pdf
index e040358fc94..cfe5fa7e800 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-fonts.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-fonts.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-grep.1 b/Master/texmf-dist/doc/man/man1/mtx-grep.1
index 6b85f541fd3..2a3d3031615 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-grep.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-grep.1
@@ -1,4 +1,4 @@
-.TH "mtx-grep" "1" "01-01-2015" "version 0.10" "Simple Grepper"
+.TH "mtx-grep" "1" "01-01-2016" "version 0.10" "Simple Grepper"
.SH NAME
.B mtx-grep
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-grep.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-grep.man1.pdf
index 2f3cd2ca4e7..31c1ba5f8f2 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-grep.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-grep.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-interface.1 b/Master/texmf-dist/doc/man/man1/mtx-interface.1
index 36bf8bc138b..2b21c8dba69 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-interface.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-interface.1
@@ -1,4 +1,4 @@
-.TH "mtx-interface" "1" "01-01-2015" "version 0.13" "ConTeXt Interface Related Goodies"
+.TH "mtx-interface" "1" "01-01-2016" "version 0.13" "ConTeXt Interface Related Goodies"
.SH NAME
.B mtx-interface
.SH SYNOPSIS
@@ -12,13 +12,7 @@
.SH OPTIONS
.TP
.B --interfaces
-generate context interface files
-.TP
-.B --messages
-generate context message files
-.TP
-.B --labels
-generate context label files
+generate context mkii interface files
.TP
.B --context
equals --interfaces --messages --languages
diff --git a/Master/texmf-dist/doc/man/man1/mtx-interface.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-interface.man1.pdf
index 7688a280ea3..6869e30c095 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-interface.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-interface.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-metapost.1 b/Master/texmf-dist/doc/man/man1/mtx-metapost.1
index 37b1b7c9f3a..ca712c7f847 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-metapost.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-metapost.1
@@ -1,4 +1,4 @@
-.TH "mtx-metapost" "1" "01-01-2015" "version 0.10" "MetaPost to PDF processor"
+.TH "mtx-metapost" "1" "01-01-2016" "version 0.10" "MetaPost to PDF processor"
.SH NAME
.B mtx-metapost
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-metapost.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-metapost.man1.pdf
index c80a75cac79..297e0addad6 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-metapost.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-metapost.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-metatex.1 b/Master/texmf-dist/doc/man/man1/mtx-metatex.1
index 72635044ff6..68e090031d1 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-metatex.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-metatex.1
@@ -1,4 +1,4 @@
-.TH "mtx-metatex" "1" "01-01-2015" "version 0.10" "MetaTeX Process Management"
+.TH "mtx-metatex" "1" "01-01-2016" "version 0.10" "MetaTeX Process Management"
.SH NAME
.B mtx-metatex
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-metatex.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-metatex.man1.pdf
index a4b1766d01d..7d05b0759ce 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-metatex.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-metatex.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-modules.1 b/Master/texmf-dist/doc/man/man1/mtx-modules.1
index a51a1b00e22..1e1e34fc2eb 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-modules.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-modules.1
@@ -1,4 +1,4 @@
-.TH "mtx-modules" "1" "01-01-2015" "version 1.00" "ConTeXt Module Documentation Generators"
+.TH "mtx-modules" "1" "01-01-2016" "version 1.00" "ConTeXt Module Documentation Generators"
.SH NAME
.B mtx-modules
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-modules.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-modules.man1.pdf
index d0d961638c1..18ad3e09a12 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-modules.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-modules.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-package.1 b/Master/texmf-dist/doc/man/man1/mtx-package.1
index 83c140f35f7..dfd8d21f095 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-package.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-package.1
@@ -1,4 +1,4 @@
-.TH "mtx-package" "1" "01-01-2015" "version 0.10" "Distribution Related Goodies"
+.TH "mtx-package" "1" "01-01-2016" "version 0.10" "Distribution Related Goodies"
.SH NAME
.B mtx-package
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-package.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-package.man1.pdf
index 21b703d4231..7de534acf7d 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-package.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-package.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-patterns.1 b/Master/texmf-dist/doc/man/man1/mtx-patterns.1
index e93c1aff063..fd0088cca09 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-patterns.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-patterns.1
@@ -1,4 +1,4 @@
-.TH "mtx-patterns" "1" "01-01-2015" "version 0.20" "ConTeXt Pattern File Management"
+.TH "mtx-patterns" "1" "01-01-2016" "version 0.20" "ConTeXt Pattern File Management"
.SH NAME
.B mtx-patterns
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-patterns.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-patterns.man1.pdf
index 2be4b7538b5..7c9996efcce 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-patterns.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-patterns.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-pdf.1 b/Master/texmf-dist/doc/man/man1/mtx-pdf.1
index 29b5ad420c2..60fa91e50f3 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-pdf.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-pdf.1
@@ -1,4 +1,4 @@
-.TH "mtx-pdf" "1" "01-01-2015" "version 0.10" "ConTeXt PDF Helpers"
+.TH "mtx-pdf" "1" "01-01-2016" "version 0.10" "ConTeXt PDF Helpers"
.SH NAME
.B mtx-pdf
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-pdf.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-pdf.man1.pdf
index 8f1c3e52062..0e5bb982b0a 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-pdf.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-pdf.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-plain.1 b/Master/texmf-dist/doc/man/man1/mtx-plain.1
index c2e0e0bd9d5..174402377e5 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-plain.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-plain.1
@@ -1,4 +1,4 @@
-.TH "mtx-plain" "1" "01-01-2015" "version 1.00" "Plain TeX Runner"
+.TH "mtx-plain" "1" "01-01-2016" "version 1.00" "Plain TeX Runner"
.SH NAME
.B mtx-plain
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-plain.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-plain.man1.pdf
index 30a96c3b14b..d3f693c6ec3 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-plain.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-plain.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-profile.1 b/Master/texmf-dist/doc/man/man1/mtx-profile.1
index 6aa8e2087a4..d095634155a 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-profile.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-profile.1
@@ -1,4 +1,4 @@
-.TH "mtx-profile" "1" "01-01-2015" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
+.TH "mtx-profile" "1" "01-01-2016" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
.SH NAME
.B mtx-profile
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-profile.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-profile.man1.pdf
index 2bc65780a88..a9d9012fc9a 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-profile.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-profile.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-rsync.1 b/Master/texmf-dist/doc/man/man1/mtx-rsync.1
index 195b6b0f0e4..7297ace5060 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-rsync.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-rsync.1
@@ -1,4 +1,4 @@
-.TH "mtx-rsync" "1" "01-01-2015" "version 0.10" "Rsync Helpers"
+.TH "mtx-rsync" "1" "01-01-2016" "version 0.10" "Rsync Helpers"
.SH NAME
.B mtx-rsync
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-rsync.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-rsync.man1.pdf
index a8b11318f15..821da41fe48 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-rsync.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-rsync.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-scite.1 b/Master/texmf-dist/doc/man/man1/mtx-scite.1
index cbaed08d1bc..f88d4b01677 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-scite.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-scite.1
@@ -1,4 +1,4 @@
-.TH "mtx-scite" "1" "01-01-2015" "version 1.00" "Scite Helper Script"
+.TH "mtx-scite" "1" "01-01-2016" "version 1.00" "Scite Helper Script"
.SH NAME
.B mtx-scite
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-scite.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-scite.man1.pdf
index 50029bd1c51..a0f627b4bb2 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-scite.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-scite.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-server.1 b/Master/texmf-dist/doc/man/man1/mtx-server.1
index f3d3ae6e429..3c115c0c159 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-server.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-server.1
@@ -1,4 +1,4 @@
-.TH "mtx-server" "1" "01-01-2015" "version 0.10" "Simple Webserver For Helpers"
+.TH "mtx-server" "1" "01-01-2016" "version 0.10" "Simple Webserver For Helpers"
.SH NAME
.B mtx-server
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-server.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-server.man1.pdf
index 2ff1fe77eaa..af1c4233c2a 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-server.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-server.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-texworks.1 b/Master/texmf-dist/doc/man/man1/mtx-texworks.1
index b9cc2ed98d7..1422b802a5d 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-texworks.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-texworks.1
@@ -1,4 +1,4 @@
-.TH "mtx-texworks" "1" "01-01-2015" "version 1.00" "TeXworks Startup Script"
+.TH "mtx-texworks" "1" "01-01-2016" "version 1.00" "TeXworks Startup Script"
.SH NAME
.B mtx-texworks
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-texworks.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-texworks.man1.pdf
index aa0b336aa25..35e7b32d11c 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-texworks.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-texworks.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-timing.1 b/Master/texmf-dist/doc/man/man1/mtx-timing.1
index 2f7584f3da7..9a5b987903b 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-timing.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-timing.1
@@ -1,4 +1,4 @@
-.TH "mtx-timing" "1" "01-01-2015" "version 0.10" "ConTeXt Timing Tools"
+.TH "mtx-timing" "1" "01-01-2016" "version 0.10" "ConTeXt Timing Tools"
.SH NAME
.B mtx-timing
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-timing.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-timing.man1.pdf
index 915d79dc674..57f928fb84c 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-timing.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-timing.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-tools.1 b/Master/texmf-dist/doc/man/man1/mtx-tools.1
index 408d467cdbf..b828f48d0d9 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-tools.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-tools.1
@@ -1,4 +1,4 @@
-.TH "mtx-tools" "1" "01-01-2015" "version 1.01" "Some File Related Goodies"
+.TH "mtx-tools" "1" "01-01-2016" "version 1.01" "Some File Related Goodies"
.SH NAME
.B mtx-tools
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-tools.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-tools.man1.pdf
index 64c2903e1bc..620083f154b 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-tools.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-tools.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-unicode.1 b/Master/texmf-dist/doc/man/man1/mtx-unicode.1
new file mode 100644
index 00000000000..4f520b9b8f9
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/mtx-unicode.1
@@ -0,0 +1,27 @@
+.TH "mtx-unicode" "1" "01-01-2016" "version 1.02" "Checker for char-dat.lua"
+.SH NAME
+.B mtx-unicode
+.SH SYNOPSIS
+.B mtxrun --script unicode [
+.I OPTIONS ...
+.B ] [
+.I FILENAMES
+.B ]
+.SH DESCRIPTION
+.B Checker for char-dat.lua
+.SH OPTIONS
+.TP
+.B --whatever
+do whatever
+.SH AUTHOR
+More information about ConTeXt and the tools that come with it can be found at:
+
+
+.B "maillist:"
+ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
+
+.B "webpage:"
+http://www.pragma-ade.nl / http://tex.aanhet.net
+
+.B "wiki:"
+http://contextgarden.net
diff --git a/Master/texmf-dist/doc/man/man1/mtx-unicode.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-unicode.man1.pdf
new file mode 100644
index 00000000000..c354c439659
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/mtx-unicode.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-unzip.1 b/Master/texmf-dist/doc/man/man1/mtx-unzip.1
index d9e2c844760..548ca1dc35e 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-unzip.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-unzip.1
@@ -1,4 +1,4 @@
-.TH "mtx-unzip" "1" "01-01-2015" "version 0.10" "Simple Unzipper"
+.TH "mtx-unzip" "1" "01-01-2016" "version 0.10" "Simple Unzipper"
.SH NAME
.B mtx-unzip
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-unzip.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-unzip.man1.pdf
index 4a0ef4fc73a..c05cf274a4d 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-unzip.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-unzip.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-update.1 b/Master/texmf-dist/doc/man/man1/mtx-update.1
index e27c2ab43f0..3a3ca6ae85b 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-update.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-update.1
@@ -1,4 +1,4 @@
-.TH "mtx-update" "1" "01-01-2015" "version 1.02" "ConTeXt Minimals Updater"
+.TH "mtx-update" "1" "01-01-2016" "version 1.02" "ConTeXt Minimals Updater"
.SH NAME
.B mtx-update
.SH SYNOPSIS
@@ -64,6 +64,9 @@ adapt drive specs to cygwin
.TP
.B --mingw
assume mingw binaries being used
+.TP
+.B --silent
+less (or no) logging
.SH AUTHOR
More information about ConTeXt and the tools that come with it can be found at:
diff --git a/Master/texmf-dist/doc/man/man1/mtx-update.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-update.man1.pdf
index e30bca58b08..742cadf8278 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-update.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-update.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-watch.1 b/Master/texmf-dist/doc/man/man1/mtx-watch.1
index d8fab3acd5b..1fcb090d061 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-watch.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-watch.1
@@ -1,4 +1,4 @@
-.TH "mtx-watch" "1" "01-01-2015" "version 1.00" "ConTeXt Request Watchdog"
+.TH "mtx-watch" "1" "01-01-2016" "version 1.00" "ConTeXt Request Watchdog"
.SH NAME
.B mtx-watch
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-watch.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-watch.man1.pdf
index 3e064ad343a..f71dbe7aa1c 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-watch.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-watch.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtx-youless.1 b/Master/texmf-dist/doc/man/man1/mtx-youless.1
index 2703ec34f79..d360430bdb9 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-youless.1
+++ b/Master/texmf-dist/doc/man/man1/mtx-youless.1
@@ -1,4 +1,4 @@
-.TH "mtx-youless" "1" "01-01-2015" "version 1.00" "youless Fetcher"
+.TH "mtx-youless" "1" "01-01-2016" "version 1.00" "youless Fetcher"
.SH NAME
.B mtx-youless
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtx-youless.man1.pdf b/Master/texmf-dist/doc/man/man1/mtx-youless.man1.pdf
index a1ff500da41..89b65e8c987 100644
--- a/Master/texmf-dist/doc/man/man1/mtx-youless.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtx-youless.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/mtxrun.1 b/Master/texmf-dist/doc/man/man1/mtxrun.1
index 8a3a75b64a5..90a0f915212 100644
--- a/Master/texmf-dist/doc/man/man1/mtxrun.1
+++ b/Master/texmf-dist/doc/man/man1/mtxrun.1
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2015" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/mtxrun.man1.pdf b/Master/texmf-dist/doc/man/man1/mtxrun.man1.pdf
index 488715bbe08..dfe7c460511 100644
--- a/Master/texmf-dist/doc/man/man1/mtxrun.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/mtxrun.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/texexec.1 b/Master/texmf-dist/doc/man/man1/texexec.1
index 841622bcda1..a2c3325d0e3 100644
--- a/Master/texmf-dist/doc/man/man1/texexec.1
+++ b/Master/texmf-dist/doc/man/man1/texexec.1
@@ -1,4 +1,4 @@
-.TH "texexec" "1" "01-01-2015" "version 6.2.1" "TeXExec"
+.TH "texexec" "1" "01-01-2016" "version 6.2.1" "TeXExec"
.SH NAME
.B texexec
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/texexec.man1.pdf b/Master/texmf-dist/doc/man/man1/texexec.man1.pdf
index 0dc7e3a44be..3bc4d6c7f3c 100644
--- a/Master/texmf-dist/doc/man/man1/texexec.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/texexec.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/texmfstart.1 b/Master/texmf-dist/doc/man/man1/texmfstart.1
index 8a3a75b64a5..90a0f915212 100644
--- a/Master/texmf-dist/doc/man/man1/texmfstart.1
+++ b/Master/texmf-dist/doc/man/man1/texmfstart.1
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2015" "version 1.31" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2016" "version 1.31" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/Master/texmf-dist/doc/man/man1/texmfstart.man1.pdf b/Master/texmf-dist/doc/man/man1/texmfstart.man1.pdf
index 8e87e060d90..2cd180e1465 100644
--- a/Master/texmf-dist/doc/man/man1/texmfstart.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/texmfstart.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/metapost/context/base/metafun.mp b/Master/texmf-dist/metapost/context/base/common/metafun.mp
index ae0a6d6fdf7..ae0a6d6fdf7 100644
--- a/Master/texmf-dist/metapost/context/base/metafun.mp
+++ b/Master/texmf-dist/metapost/context/base/common/metafun.mp
diff --git a/Master/texmf-dist/metapost/context/base/common/mp-back.mp b/Master/texmf-dist/metapost/context/base/common/mp-back.mp
new file mode 100644
index 00000000000..ecfb0c816be
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/common/mp-back.mp
@@ -0,0 +1,5 @@
+if known mplib :
+ input mp-back.mpiv
+else :
+ input mp-back.mpii
+fi ;
diff --git a/Master/texmf-dist/metapost/context/base/common/mp-fobg.mp b/Master/texmf-dist/metapost/context/base/common/mp-fobg.mp
new file mode 100644
index 00000000000..b61ea4724a0
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/common/mp-fobg.mp
@@ -0,0 +1,5 @@
+if known mplib :
+ input mp-fobg.mpiv
+else :
+ input mp-fobg.mpii
+fi ;
diff --git a/Master/texmf-dist/metapost/context/base/common/mp-symb.mp b/Master/texmf-dist/metapost/context/base/common/mp-symb.mp
new file mode 100644
index 00000000000..b39ceaab7fc
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/common/mp-symb.mp
@@ -0,0 +1,6 @@
+if known mplib :
+ input mp-symb.mpiv
+else :
+ input mp-symb.mpii
+fi ;
+
diff --git a/Master/texmf-dist/metapost/context/base/metafun.mpii b/Master/texmf-dist/metapost/context/base/mpii/metafun.mpii
index 9c55191f773..9c55191f773 100644
--- a/Master/texmf-dist/metapost/context/base/metafun.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/metafun.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-back.mp b/Master/texmf-dist/metapost/context/base/mpii/mp-back.mpii
index f588adea9c4..f588adea9c4 100644
--- a/Master/texmf-dist/metapost/context/base/mp-back.mp
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-back.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-base.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-base.mpii
index 7af4bc436e3..7af4bc436e3 100644
--- a/Master/texmf-dist/metapost/context/base/mp-base.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-base.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-butt.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-butt.mpii
index 107886bb5c4..107886bb5c4 100644
--- a/Master/texmf-dist/metapost/context/base/mp-butt.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-butt.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-char.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-char.mpii
index 63a71eff860..63a71eff860 100644
--- a/Master/texmf-dist/metapost/context/base/mp-char.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-char.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-core.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-core.mpii
index 33e9b386e5b..33e9b386e5b 100644
--- a/Master/texmf-dist/metapost/context/base/mp-core.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-core.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-figs.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-figs.mpii
index d4fcc2b3564..d4fcc2b3564 100644
--- a/Master/texmf-dist/metapost/context/base/mp-figs.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-figs.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-fobg.mp b/Master/texmf-dist/metapost/context/base/mpii/mp-fobg.mpii
index f8b709572bb..f8b709572bb 100644
--- a/Master/texmf-dist/metapost/context/base/mp-fobg.mp
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-fobg.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-form.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-form.mpii
index d1dac32db23..d1dac32db23 100644
--- a/Master/texmf-dist/metapost/context/base/mp-form.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-form.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-func.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-func.mpii
index 94e400b91a2..94e400b91a2 100644
--- a/Master/texmf-dist/metapost/context/base/mp-func.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-func.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-grid.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-grid.mpii
index ea28d60afd1..ea28d60afd1 100644
--- a/Master/texmf-dist/metapost/context/base/mp-grid.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-grid.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-grph.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-grph.mpii
index 78294294624..78294294624 100644
--- a/Master/texmf-dist/metapost/context/base/mp-grph.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-grph.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-page.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-page.mpii
index 456ee61cc31..456ee61cc31 100644
--- a/Master/texmf-dist/metapost/context/base/mp-page.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-page.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-shap.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-shap.mpii
index 17d21314c32..17d21314c32 100644
--- a/Master/texmf-dist/metapost/context/base/mp-shap.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-shap.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-spec.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-spec.mpii
index 19d81f31254..19d81f31254 100644
--- a/Master/texmf-dist/metapost/context/base/mp-spec.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-spec.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-step.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-step.mpii
index e05f00b6e0f..e05f00b6e0f 100644
--- a/Master/texmf-dist/metapost/context/base/mp-step.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-step.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-text.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii
index 5f96f6788e1..5f96f6788e1 100644
--- a/Master/texmf-dist/metapost/context/base/mp-text.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii
diff --git a/Master/texmf-dist/metapost/context/base/mp-tool.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-tool.mpii
index a5bb345a1a3..f476361c7a5 100644
--- a/Master/texmf-dist/metapost/context/base/mp-tool.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-tool.mpii
@@ -2373,7 +2373,7 @@ if unknown darkcyan : color darkcyan ; darkcyan := .625(0,1,1) fi ;
if unknown darkmagenta : color darkmagenta ; darkmagenta := .625(1,0,1) fi ;
if unknown darkyellow : color darkyellow ; darkyellow := .625(1,1,0) fi ;
if unknown darkgray : color darkgray ; darkgray := .625(1,1,1) fi ;
-if unknown lightgray : color lightgray ; lightgray := .875(1,1,1) fi ;
+if unknown lightgray : color lightgray ; lightgray := .850(1,1,1) fi ;
% an improved plain mp macro
diff --git a/Master/texmf-dist/metapost/context/base/mp-txts.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-txts.mpii
index d3597488f10..d3597488f10 100644
--- a/Master/texmf-dist/metapost/context/base/mp-txts.mpii
+++ b/Master/texmf-dist/metapost/context/base/mpii/mp-txts.mpii
diff --git a/Master/texmf-dist/metapost/context/base/metafun.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv
index b1d4f32e7ee..b1d4f32e7ee 100644
--- a/Master/texmf-dist/metapost/context/base/metafun.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-abck.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-abck.mpiv
index abd7d8848ec..abd7d8848ec 100644
--- a/Master/texmf-dist/metapost/context/base/mp-abck.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-abck.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-apos.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-apos.mpiv
index 7b77377545a..7b77377545a 100644
--- a/Master/texmf-dist/metapost/context/base/mp-apos.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-apos.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-asnc.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv
index 2626e4d584e..2626e4d584e 100644
--- a/Master/texmf-dist/metapost/context/base/mp-asnc.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-back.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-back.mpiv
new file mode 100644
index 00000000000..f588adea9c4
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-back.mpiv
@@ -0,0 +1,205 @@
+%D \module
+%D [ file=mp-back.mp,
+%D version=2000.05.31,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=backgrounds,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
+%C details.
+
+if known context_back : endinput ; fi ;
+
+boolean context_back ; context_back := true ;
+
+def some_hash ( expr hash_width ,
+ hash_height ,
+ hash_linewidth ,
+ hash_linecolor ,
+ hash_angle ,
+ hash_gap ) =
+
+ stripe_gap := hash_gap ;
+ stripe_angle := hash_angle ;
+ drawoptions (withpen pencircle scaled hash_linewidth
+ withcolor hash_linecolor) ;
+ path p ; p := unitsquare xscaled hash_width yscaled hash_height ;
+ stripe_path_a () (draw) p ; % next we move it all to quadrant 1
+ currentpicture := currentpicture shifted urcorner currentpicture ;
+
+enddef ;
+
+def some_double_back (expr back_type ,
+ back_width ,
+ back_height ,
+ back_delta ,
+ back_linewidth ,
+ back_linecolor ,
+ back_fillcolor ,
+ back_topcolor ,
+ back_bottomcolor ,
+ back_leftcolor ,
+ back_rightcolor ) =
+
+ numeric ww ; ww := back_width ;
+ numeric hh ; hh := back_height ;
+ numeric dd ; dd := back_delta ;
+
+ color back_nillcolor ; back_nillcolor := back_topcolor ;
+
+ path p ; p := fullsquare xscaled ww yscaled hh ;
+ path q ; q := fullsquare xscaled (ww-2dd) yscaled (hh-2dd) ;
+ path r ; r := llcorner p --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p -- cycle ;
+ path s ; s := r xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path t ; t := llcorner p --
+ lrcorner p --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ ulcorner p shifted (0,-3dd) --
+ llcorner p -- cycle ;
+ path u ; u := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path v ; v := llcorner p shifted ( 3dd,0) --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ ulcorner p shifted (0,-3dd) ..
+ llcorner p shifted (0, 3dd) .. controls llcorner p .. cycle ; % {down} .. cycle ;
+ path w ; w := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path a ; a := llcorner p -- ulcorner p --
+ ulcorner q -- llcorner q -- cycle ;
+ path b ; b := llcorner p -- lrcorner p --
+ lrcorner q -- llcorner q -- cycle ;
+ path c ; c := lrcorner p -- urcorner p --
+ urcorner q -- lrcorner q -- cycle ;
+ path d ; d := ulcorner p -- urcorner p --
+ urcorner q -- ulcorner q -- cycle ;
+ path e ; e := llcorner p -- lrcorner p --
+ urcorner p -- urcorner q --
+ lrcorner q -- llcorner q -- cycle ;
+ path f ; f := llcorner p -- ulcorner p --
+ urcorner p -- urcorner q --
+ ulcorner q -- llcorner q -- cycle ;
+
+ linecap := butt ; pickup pencircle scaled back_linewidth ;
+
+ if back_type=1 :
+
+ fill p withcolor back_fillcolor ;
+ fill a withcolor back_leftcolor ;
+ fill b withcolor back_bottomcolor ;
+ fill c withcolor back_rightcolor ;
+ fill d withcolor back_topcolor ;
+ draw a withcolor back_linecolor ;
+ draw d withcolor back_linecolor ;
+ draw b withcolor back_linecolor ;
+ draw c withcolor back_linecolor ;
+
+ elseif back_type=2 :
+
+ fill p withcolor back_fillcolor ;
+ fill e withcolor back_bottomcolor ;
+ fill f withcolor back_topcolor ;
+ draw e withcolor back_linecolor ;
+ draw f withcolor back_linecolor ;
+
+ elseif back_type=3 :
+
+ fill v withcolor back_nillcolor ;
+ fill w withcolor back_fillcolor ;
+ draw v withcolor back_linecolor ;
+ draw w withcolor back_linecolor ;
+
+ elseif back_type=4 :
+
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
+
+ elseif back_type=5 :
+
+ t := t rotatedaround(center t,180) ;
+ u := u rotatedaround(center u,180) ;
+
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
+
+ elseif back_type=6 :
+
+ r := r rotatedaround(center r,180) ;
+ s := s rotatedaround(center s,180) ;
+
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
+
+ elseif back_type=7 :
+
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
+
+fi ;
+
+enddef ;
+
+endinput ;
+
+beginfig (1) ;
+
+some_double_back (1, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, .6white, .7white, .6white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (2, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, .6white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (3, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (4, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (5, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (6, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (7, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (8, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+endfig ;
+
+end .
diff --git a/Master/texmf-dist/metapost/context/base/mp-bare.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv
index c6194b1ee00..c6194b1ee00 100644
--- a/Master/texmf-dist/metapost/context/base/mp-bare.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-base.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv
index 28eb57fb895..28eb57fb895 100644
--- a/Master/texmf-dist/metapost/context/base/mp-base.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-butt.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-butt.mpiv
index 6f5b90a7e66..6f5b90a7e66 100644
--- a/Master/texmf-dist/metapost/context/base/mp-butt.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-butt.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-char.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-char.mpiv
index f604accd8e4..f604accd8e4 100644
--- a/Master/texmf-dist/metapost/context/base/mp-char.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-char.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-chem.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-chem.mpiv
index b861d3f123e..b861d3f123e 100644
--- a/Master/texmf-dist/metapost/context/base/mp-chem.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-chem.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-core.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-core.mpiv
index 9b7182908ab..9b7182908ab 100644
--- a/Master/texmf-dist/metapost/context/base/mp-core.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-core.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-cows.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-cows.mpiv
new file mode 100644
index 00000000000..3ad1a98f508
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-cows.mpiv
@@ -0,0 +1,156 @@
+%D \module
+%D [ file=mp-cows.mpiv,
+%D version=2015.05.27,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=the cow,
+%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 licen-en.pdf for
+%C details.
+
+if known context_cows : endinput ; fi ;
+
+boolean context_cows ; context_cows := true ;
+
+picture cow ; cow := image (
+ fill (245.449005,600.340027)..controls (242.781006,599.398010) and (239.621002,596.020020)..(237.671997,594.070007)
+ ..controls (236.738007,584.421997) and (244.578003,583.629028)..(250.199005,577.440979)
+ ..controls (258.769989,573.698975) and (251.210999,567.718994)..(256.179993,557.421997)
+ ..controls (257.039001,550.940979) and (257.898010,543.890991)..(255.309006,539.781006)
+ ..controls (249.479996,538.921997) and (247.968994,540.218994)..(246.891006,531.429993)
+ ..controls (246.309006,526.968994) and (231.770004,529.059021)..(229.031006,538.270020)
+ ..controls (227.089996,544.968994) and (221.328003,546.698975)..(217.800995,543.171997)
+ ..controls (213.770004,538.059021) and (215.781006,531.218994)..(217.800995,527.468994)
+ ..controls (224.929993,517.320007) and (212.039001,511.421997)..(205.128998,516.737976)
+ ..controls (199.729996,508.679993) and (211.391006,500.039001)..(207.429993,494.500000)
+ ..controls (205.781006,493.988007) and (204.770004,489.171997)..(185.468994,500.539001)
+ ..controls (180.358994,504.140991) and (167.828003,500.761993)..(168.770004,520.629028)
+ ..controls (168.770004,525.820007) and (165.602005,543.531006)..(162.141006,555.909973)
+ ..controls (159.410004,561.237976) and (156.738007,559.078003)..(156.891006,553.898010)
+ ..controls (157.179993,547.851990) and (162.940994,531.218994)..(155.520004,540.218994)
+ ..controls (153.578003,539.210999) and (156.891006,523.578003)..(156.891006,521.640991)
+ ..controls (162.000000,517.031006) and (157.391006,513.578003)..(154.729996,512.281006)
+ ..controls (151.270004,518.328003) and (149.621002,518.039001)..(147.171997,514.440979)
+ ..controls (141.699005,514.078003) and (144.578003,528.190979)..(140.261993,528.620972)
+ ..controls (137.020004,527.762024) and (139.179993,520.059021)..(138.238007,518.762024)
+ ..controls (132.979996,524.737976) and (130.897995,529.270020)..(127.012001,521.640991)
+ ..controls (126.140999,521.640991) and (122.109001,519.190979)..(120.960999,526.539001)
+ ..controls (117.648003,552.737976) and (107.058998,558.359009)..(93.820297,565.129028)
+ ..controls (92.019501,565.629028) and (84.238297,566.710999)..(79.339798,568.148010)
+ ..controls (73.511703,560.879028) and (58.320301,565.629028)..(56.230499,570.309021)
+ ..controls (54.789101,572.690979) and (54.648399,575.210999)..(54.789101,576.500000)
+ ..controls (52.339802,580.101990) and (55.871101,582.698975)..(59.621101,583.059021)
+ ..controls (62.859402,587.159973) and (68.539101,594.940979)..(71.281303,601.559021)
+ ..controls (72.289101,603.070007) and (74.949203,609.340027)..(78.191399,609.551025)
+ ..controls (74.949203,612.940979) and (74.300797,622.512024)..(82.660202,617.328003)
+ ..controls (87.121101,624.020020) and (92.089798,624.309021)..(95.761703,615.820007)
+ ..controls (102.890999,615.379028) and (102.308998,608.690979)..(115.780998,605.520020)
+ ..controls (122.762001,602.859009) and (132.770004,604.578003)..(140.261993,603.718994)
+ ..controls (136.218994,596.879028) and (127.441002,566.859009)..(132.979996,559.801025)
+ ..controls (140.761993,564.698975) and (141.839996,605.379028)..(157.031006,595.659973)
+ ..controls (160.559006,593.929993) and (159.910004,590.039001)..(164.089996,590.179993)
+ ..controls (170.421997,587.448975) and (169.128998,600.770020)..(172.511993,600.770020)
+ ..controls (176.468994,599.762024) and (183.020004,599.039001)..(186.979996,599.539001)
+ ..controls (197.710999,600.770020) and (206.929993,604.078003)..(223.921997,602.500000)
+ ..controls (231.121002,601.781006) and (238.250000,601.059021)..(245.449005,600.340027)
+ --cycle;
+ fill (305.281006,560.948975)..controls (304.628998,560.948975) and (299.949005,561.237976)..(299.378998,561.237976)
+ ..controls (302.398010,550.440979) and (303.980011,536.468994)..(304.199005,525.309021)
+ ..controls (303.699005,521.351990) and (299.808990,517.460999)..(299.378998,525.671997)
+ ..controls (295.851990,530.859009) and (296.421997,540.070007)..(293.398010,540.289001)
+ ..controls (287.351990,539.640991) and (285.339996,513.218994)..(280.011993,509.328003)
+ ..controls (276.261993,512.281006) and (280.730011,524.020020)..(275.539001,524.737976)
+ ..controls (270.500000,524.020020) and (264.308990,526.679993)..(266.691010,534.460999)
+ ..controls (270.289001,543.020020) and (268.339996,554.762024)..(266.539001,561.601990)
+ ..controls (262.371002,578.590027) and (264.019989,587.090027)..(271.578003,596.090027)
+ --(267.480011,604.512024)..controls (275.398010,608.262024) and (285.621002,604.578003)..(290.019989,602.210999)
+ ..controls (294.621002,600.262024) and (300.238007,595.940979)..(301.101990,587.379028)
+ ..controls (303.339996,578.879028) and (304.421997,569.737976)..(305.281006,560.948975)
+ --cycle;
+ pickup pencircle scaled 2.000000bp;
+ draw (84.378899,618.551025)..controls (88.339798,624.379028) and (92.589798,622.940979)..(96.339798,615.671997)
+ ..controls (101.230003,615.601990) and (102.460999,612.429993)..(104.980003,610.781006)
+ ..controls (122.621002,598.390991) and (147.460999,607.179993)..(167.897995,601.921997)
+ ..controls (180.940994,598.539001) and (190.871002,599.762024)..(200.089996,602.059021)
+ ..controls (220.320007,607.250000) and (246.102005,596.159973)..(263.738007,603.859009)
+ ..controls (274.750000,608.620972) and (284.761993,605.659973)..(292.968994,600.909973)
+ ..controls (297.578003,597.960999) and (299.589996,596.090027)..(300.960999,591.262024)
+ ..controls (306.289001,572.539001) and (306.289001,551.020020)..(309.531006,530.570007)
+ ..controls (309.531006,528.840027) and (312.191010,526.101990)..(312.480011,522.070007)
+ ..controls (315.789001,511.339996) and (316.078003,510.121002)..(317.160004,502.199005)
+ ..controls (317.160004,501.339996) and (326.519989,488.449005)..(325.011993,479.019989)
+ ..controls (323.929993,481.250000) and (323.859009,482.828003)..(321.621002,481.679993)
+ ..controls (320.328003,479.300995) and (320.898010,473.898010)..(322.558990,471.738007)
+ ..controls (320.828003,470.808990) and (318.460999,473.468994)..(317.519989,475.199005)
+ ..controls (318.171997,473.039001) and (317.808990,470.808990)..(316.730011,469.300995)
+ ..controls (315.859009,472.250000) and (316.578003,473.179993)..(315.359009,473.898010)
+ ..controls (313.988007,472.898010) and (314.210999,469.300995)..(314.281006,466.199005)
+ ..controls (313.488007,468.070007) and (311.468994,472.460999)..(312.550995,476.421997)
+ ..controls (312.480011,484.199005) and (308.808990,489.101990)..(310.320007,499.101990)
+ ..controls (310.101990,504.429993) and (307.300995,521.059021)..(304.558990,524.301025)
+ ..controls (303.121002,526.250000) and (306.359009,510.769989)..(306.359009,506.160004)
+ ..controls (306.648010,500.898010) and (307.078003,468.718994)..(306.429993,463.101990)
+ ..controls (306.429993,459.218994) and (306.218994,453.960999)..(307.078003,452.160004)
+ ..controls (308.738007,450.789001) and (309.378998,450.500000)..(309.601990,447.980011)
+ ..controls (309.238007,446.621002) and (308.738007,446.039001)..(307.730011,445.539001)
+ ..controls (306.070007,444.601990) and (307.371002,441.789001)..(306.070007,439.851990)
+ ..controls (304.488007,438.769989) and (304.128998,441.859009)..(303.339996,441.859009)
+ ..controls (302.691010,441.000000) and (303.050995,437.980011)..(302.468994,436.179993)
+ ..controls (299.660004,433.800995) and (292.179993,432.500000)..(289.148010,434.660004)
+ ..controls (289.730011,440.640991) and (291.738007,441.578003)..(295.628998,446.621002)
+ ..controls (298.660004,452.589996) and (297.000000,460.941010)..(296.929993,468.140991)
+ ..controls (295.488007,480.378998) and (289.218994,487.300995)..(289.441010,496.441010)
+ ..controls (287.859009,495.718994) and (286.421997,494.570007)..(284.261993,494.859009)
+ ..controls (283.390991,489.460999) and (286.421997,484.558990)..(284.828003,480.820007)
+ ..controls (281.949005,471.960999) and (277.058990,446.621002)..(279.000000,437.761993)
+ ..controls (280.011993,434.738007) and (278.210999,433.148010)..(277.058990,433.941010)
+ ..controls (276.769989,433.941010) and (276.550995,433.941010)..(276.410004,433.941010)
+ ..controls (276.410004,433.941010) and (276.550995,431.421997)..(275.691010,430.921997)
+ ..controls (274.101990,430.339996) and (273.671997,431.710999)..(272.660004,432.140991)
+ ..controls (271.218994,430.851990) and (272.519989,429.480011)..(271.148010,428.039001)
+ ..controls (267.191010,428.039001) and (261.359009,425.378998)..(257.980011,428.261993)
+ ..controls (257.328003,434.160004) and (263.300995,436.679993)..(266.468994,440.710999)
+ ..controls (268.628998,446.621002) and (271.078003,462.890991)..(267.769989,474.621002)
+ ..controls (267.769989,475.558990) and (264.378998,485.281006)..(261.429993,488.660004)
+ ..controls (258.699005,487.660004) and (257.328003,485.500000)..(253.218994,486.289001)
+ ..controls (252.578003,484.339996) and (253.300995,482.328003)..(252.218994,480.101990)
+ ..controls (251.858994,479.519989) and (249.339996,478.578003)..(249.190994,481.390991)
+ ..controls (248.979996,483.050995) and (248.897995,486.359009)..(248.261993,486.718994)
+ ..controls (243.647995,486.718994) and (233.710999,487.078003)..(231.770004,493.921997)
+ ..controls (219.891006,492.339996) and (215.929993,491.261993)..(206.570007,493.421997)
+ ..controls (196.628998,489.671997) and (183.238007,506.160004)..(174.531006,502.199005)
+ ..controls (172.511993,496.148010) and (173.089996,485.640991)..(171.647995,481.390991)
+ ..controls (169.339996,474.769989) and (171.141006,467.140991)..(171.141006,456.410004)
+ ..controls (170.570007,455.398010) and (169.852005,454.460999)..(168.479996,454.460999)
+ ..controls (168.479996,453.101990) and (169.339996,450.859009)..(168.621002,449.421997)
+ ..controls (167.179993,447.621002) and (165.891006,451.800995)..(165.020004,444.601990)
+ ..controls (163.147995,443.738007) and (157.750000,442.218994)..(155.589996,445.179993)
+ ..controls (155.878998,448.988007) and (158.328003,451.300995)..(160.128998,453.378998)
+ ..controls (161.421997,456.910004) and (160.988007,458.281006)..(160.699005,461.808990)
+ ..controls (160.988007,464.980011) and (161.710999,468.578003)..(161.858994,470.089996)
+ ..controls (161.858994,473.039001) and (162.500000,479.300995)..(161.141006,481.179993)
+ --(159.410004,482.691010)..controls (157.179993,487.218994) and (158.328003,494.640991)..(157.608994,500.261993)
+ ..controls (155.809006,500.691010) and (155.809006,500.980011)..(154.011993,498.308990)
+ ..controls (154.011993,494.421997) and (153.500000,486.359009)..(152.352005,483.839996)
+ ..controls (149.690994,479.808990) and (150.839996,459.648010)..(151.421997,448.558990)
+ ..controls (151.781006,446.468994) and (149.690994,447.699005)..(149.761993,444.738007)
+ ..controls (150.050995,442.800995) and (147.891006,443.589996)..(146.089996,444.601990)
+ ..controls (145.147995,445.179993) and (146.589996,439.781006)..(145.371002,439.558990)
+ ..controls (142.339996,438.839996) and (136.871002,438.191010)..(135.218994,440.710999)
+ ..controls (134.570007,444.601990) and (137.878998,448.058990)..(140.621002,451.011993)
+ ..controls (143.141006,455.828003) and (140.897995,465.699005)..(140.468994,476.281006)
+ --(138.891006,478.218994)..controls (134.858994,483.191010) and (139.608994,496.941010)..(136.511993,506.230011)
+ ..controls (120.019997,514.870972) and (122.109001,519.190979)..(118.730003,537.620972)
+ ..controls (115.128998,557.640991) and (93.378899,567.648010)..(79.058601,567.648010)
+ ..controls (73.441399,563.039001) and (66.238297,563.620972)..(58.539101,567.648010)
+ ..controls (55.660198,569.229980) and (54.429699,573.190979)..(54.500000,576.500000)
+ ..controls (52.628899,580.750000) and (55.218800,582.190979)..(59.621101,583.487976)
+ ..controls (62.710899,587.809021) and (68.621101,594.648010)..(69.191399,597.737976)
+ ..controls (70.339798,601.921997) and (75.531303,608.109009)..(77.761703,609.770020)
+ ..controls (75.820297,613.012024) and (74.808601,615.171997)..(77.109398,618.551025)
+ ..controls (79.558601,620.140991) and (81.789101,616.609009)..(84.378899,618.551025)
+ --cycle;
+) ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-crop.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-crop.mpiv
index 00bcdcb4454..00bcdcb4454 100644
--- a/Master/texmf-dist/metapost/context/base/mp-crop.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-crop.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-figs.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-figs.mpiv
index aac7c5ad219..aac7c5ad219 100644
--- a/Master/texmf-dist/metapost/context/base/mp-figs.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-figs.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-fobg.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-fobg.mpiv
new file mode 100644
index 00000000000..f8b709572bb
--- /dev/null
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-fobg.mpiv
@@ -0,0 +1,87 @@
+%D \module
+%D [ file=mp-fobg.mp,
+%D version=2004.03.12,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=Formatting Objects,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
+%C details.
+
+if known context_fobg : endinput ; fi ;
+
+boolean context_fobg ; context_fobg := true ;
+
+FoNone := 0 ; FoHidden := 1 ; FoDotted := 2 ; FoDashed := 3 ; FoSolid := 4 ;
+FoDouble := 5 ; FoGroove := 6 ; FoRidge := 7 ; FoInset := 8 ; FoOutset := 9 ;
+FoAll := 0 ; FoTop := 1 ; FoBottom := 2 ; FoLeft := 3 ; FoRight := 4 ;
+FoMedium := .5pt ; FoThin := FoMedium/2 ; FoThick := FoMedium*2 ;
+
+color FoBackgroundColor, FoNoColor, FoLineColor[] ; FoNoColor := (-1,-1,-1) ;
+numeric FoLineWidth[], FoLineStyle[] ;
+boolean FoFrame, FoBackground, FoSplit ;
+
+FoFrame := FoBackground := FoSplit := false ;
+FoBackgroundColor := white ;
+FoDashFactor := .5 ;
+FoDotFactor := .375 ;
+
+for i = FoAll upto FoRight :
+ FoLineColor[i] := black ;
+ FoLineWidth[i] := .5pt ;
+ FoLineStyle[i] := FoNone ;
+endfor ;
+
+def DrawFoFrame(expr n, p) =
+ drawoptions(withcolor FoLineColor[n] withpen pencircle scaled FoLineWidth[n]) ;
+ if FoLineStyle[n] = FoNone :
+ % nothing
+ elseif FoLineStyle[n] = FoHidden :
+ % nothing
+ elseif FoLineStyle[n] = FoDotted :
+ draw p dashed (withdots scaled (FoDotFactor*FoLineWidth[n])) ;
+ elseif FoLineStyle[n] = FoDashed :
+ draw p dashed (evenly scaled (FoDashFactor*FoLineWidth[n])) ;
+ elseif FoLineStyle[n] = FoSolid :
+ draw p ;
+ elseif FoLineStyle[n] = FoDouble :
+ draw p enlarged FoLineWidth[n] ; draw p enlarged -FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoGroove :
+ draw p ;
+ draw p withpen pencircle scaled .5FoLineWidth[n] withcolor (inverted FoLineColor[n] softened .5) ;
+ elseif FoLineStyle[n] = FoRidge :
+ draw p withcolor (inverted FoLineColor[n] softened .5) ;
+ draw p withpen pencircle scaled .5FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoInset :
+ draw p ; draw p inset 2.5FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoOutset :
+ draw p ; draw p outset 2.5FoLineWidth[n] ;
+ fi ;
+enddef ;
+
+primarydef p outset d =
+ ((lrcorner p -- urcorner p -- ulcorner p -- llcorner p -- cycle)
+ shifted (d*(-1,1)) cutbefore topboundary p) cutafter leftboundary p
+enddef ;
+
+primarydef p inset d =
+ ((ulcorner p -- llcorner p -- lrcorner p -- urcorner p -- cycle)
+ shifted (d*(1,-1)) cutbefore bottomboundary p) cutafter rightboundary p
+enddef ;
+
+vardef equalpaths(expr p, q) =
+ if length(p) = length(q) :
+ save ok ; boolean ok ; ok := true ;
+ for i = 0 upto length(p)-1 :
+ ok := ok and (round(point i of p) = round(point i of q)) ;
+ endfor ;
+ ok
+ else :
+ false
+ fi
+enddef ;
+
+endinput ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-form.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-form.mpiv
index 88b15e09796..88b15e09796 100644
--- a/Master/texmf-dist/metapost/context/base/mp-form.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-form.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-func.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-func.mpiv
index b1b9d6d5d22..b1b9d6d5d22 100644
--- a/Master/texmf-dist/metapost/context/base/mp-func.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-func.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-grap.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv
index 4fd8ee5bd59..4fd8ee5bd59 100644
--- a/Master/texmf-dist/metapost/context/base/mp-grap.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-grid.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-grid.mpiv
index b9243b1b96e..b9243b1b96e 100644
--- a/Master/texmf-dist/metapost/context/base/mp-grid.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-grid.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-grph.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv
index a3c057a98b5..5938b9f02eb 100644
--- a/Master/texmf-dist/metapost/context/base/mp-grph.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv
@@ -118,7 +118,18 @@ def doloadfigure (expr filename) text figureattributes =
endgroup ;
enddef ;
-def graphictext primary t =
+% shared between old and new
+
+boolean mfun_gt_color_fill ;
+boolean mfun_gt_color_draw ;
+boolean mfun_gt_shade_fill ;
+boolean mfun_gt_reverse_fill ;
+boolean mfun_gt_outline_fill ;
+picture mfun_gt_picture ;
+
+% this is the old version:
+
+def old_graphictext primary t =
hide (
if mfun_trial_run :
let mfun_graphic_text = mfun_no_graphic_text ;
@@ -146,7 +157,7 @@ def mfun_no_graphic_text (expr t) text rest =
withpostscript t
enddef ;
-def mfun_finish_graphic_text text x_op_x =
+def mfun_finish_graphic_text text rest =
protectgraphicmacros ; % resets currentpicture
interim linecap := butt ; % normally rounded
interim linejoin := mitered ; % normally rounded
@@ -166,84 +177,158 @@ def mfun_finish_graphic_text text x_op_x =
def fill expr p =
addto scratchpicture contour p withpen currentpen ;
enddef ;
- def f_op_f = enddef ; boolean f_color ; f_color := false ;
- def d_op_d = enddef ; boolean d_color ; d_color := false ;
- def s_op_s = enddef ; boolean s_color ; s_color := false ;
- boolean reverse_fill ; reverse_fill := false ;
- boolean outline_fill ; outline_fill := false ;
+ def mfun_gt_fill = enddef ; boolean mfun_gt_color_fill ; mfun_gt_color_fill := false ;
+ def mfun_gt_draw = enddef ; boolean mfun_gt_color_draw ; mfun_gt_color_draw := false ;
+ def mfun_gt_shade = enddef ; boolean mfun_gt_shade_fill ; mfun_gt_shade_fill := false ;
+ boolean mfun_gt_reverse_fill ; mfun_gt_reverse_fill := false ;
+ boolean mfun_gt_outline_fill ; mfun_gt_outline_fill := false ;
def reversefill =
- hide(reverse_fill := true )
+ hide(mfun_gt_reverse_fill := true )
enddef ;
def outlinefill =
- hide(outline_fill := true )
+ hide(mfun_gt_outline_fill := true )
enddef ;
def withshade primary c =
- hide(def s_op_s = normalwithshade c enddef ; s_color := true )
+ hide(def mfun_gt_shade = normalwithshade c enddef ; mfun_gt_shade_fill := true )
enddef ;
def withfillcolor primary c =
- hide(def f_op_f = withcolor c enddef ; f_color := true )
+ hide(def mfun_gt_fill = withcolor c enddef ; mfun_gt_color_fill := true )
enddef ;
def withdrawcolor primary c =
- hide(def d_op_d = withcolor c enddef ; d_color := true )
+ hide(def mfun_gt_draw = withcolor c enddef ; mfun_gt_color_draw := true )
enddef ;
scratchpicture := nullpicture ;
- addto scratchpicture doublepath origin x_op_x ; % pre-roll
+ addto scratchpicture doublepath origin rest ; % pre-roll
for i within scratchpicture : % Below here is a dirty tricky test!
if (urcorner dashpart i) = origin :
- outline_fill := false ;
+ mfun_gt_outline_fill := false ;
fi ;
endfor ;
scratchpicture := nullpicture ;
readfile(data_mpy_file) ;
scratchpicture := (scratchpicture shifted -llcorner scratchpicture) scaled (1/10) ;
- if not d_color and not f_color :
- d_color := true ;
+ if not mfun_gt_color_draw and not mfun_gt_color_fill :
+ mfun_gt_color_draw := true ;
fi
- if s_color :
- d_color := false ;
- f_color := false ;
+ if mfun_gt_shade_fill :
+ mfun_gt_color_draw := false ;
+ mfun_gt_color_fill := false ;
fi ;
currentpicture := figurepicture ;
- if d_color and not reverse_fill :
+ if mfun_gt_shade_fill :
for i within scratchpicture :
- if f_color and outline_fill :
- addto currentpicture doublepath pathpart i _op_ x_op_x f_op_f dashed nullpicture ;
- fi ;
if filled i :
- addto currentpicture doublepath pathpart i _op_ x_op_x d_op_d ;
- fi ;
- endfor ;
- fi ;
- if f_color :
- for i within scratchpicture :
- if filled i :
- addto currentpicture contour pathpart i _op_ x_op_x f_op_f withpen pencircle scaled 0 ;
- fi ;
- endfor ;
- fi ;
- if d_color and reverse_fill :
- for i within scratchpicture :
- if filled i :
- addto currentpicture doublepath pathpart i _op_ x_op_x d_op_d ;
- fi ;
- endfor ;
- fi ;
- if s_color :
- for i within scratchpicture :
- if filled i :
- addto currentpicture contour pathpart i _op_ x_op_x s_op_s ;
+ addto currentpicture contour pathpart i _op_ rest mfun_gt_shade ;
fi ;
endfor ;
else :
+ if mfun_gt_color_draw and not mfun_gt_reverse_fill :
+ for i within scratchpicture :
+ if mfun_gt_color_fill and mfun_gt_outline_fill :
+ addto currentpicture doublepath pathpart i _op_ rest mfun_gt_fill dashed nullpicture ;
+ fi ;
+ if filled i :
+ addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ;
+ fi ;
+ endfor ;
+ fi ;
+ if mfun_gt_color_fill :
+ for i within scratchpicture :
+ if filled i :
+ addto currentpicture contour pathpart i _op_ rest mfun_gt_fill withpen pencircle scaled 0 ;
+ fi ;
+ endfor ;
+ fi ;
+ if mfun_gt_color_draw and mfun_gt_reverse_fill :
+ for i within scratchpicture :
+ if filled i :
+ addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ;
+ fi ;
+ endfor ;
+ fi ;
for i within scratchpicture :
if stroked i :
- addto currentpicture doublepath pathpart i _op_ x_op_x d_op_d ;
+ addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ;
fi ;
endfor ;
fi ;
endgroup ;
enddef ;
+% and this is the new one:
+
+% boolean mfun_gt_color_fill ;
+% boolean mfun_gt_color_draw ;
+% boolean mfun_gt_shade_fill ;
+% boolean mfun_gt_reverse_fill ;
+% picture mfun_gt_picture ;
+
+def mfun_gt_default = % somewhat compatible
+ scaled 11.5
+ withpen pencircle scaled .1
+enddef ;
+
+def new_graphictext primary t = % use outlinetext instead
+ begingroup ;
+ mfun_graphic_text_indeed(t)
+enddef ;
+
+def mfun_graphic_text_indeed(expr t) text rest =
+ interim linecap := butt ; % normally rounded
+ interim linejoin := mitered ; % normally rounded
+ % interim miterlimit := 10 ; % todo
+ %
+ let normalwithshade = withshade ;
+ %
+ save reversefill, outlinefill, withshade, withfillcolor, withdrawcolor ;
+ %
+ def mfun_gt_fill = enddef ;
+ def mfun_gt_draw = enddef ;
+ def mfun_gt_shade = enddef ;
+ %
+ mfun_gt_color_fill := false ;
+ mfun_gt_color_draw := false ;
+ mfun_gt_shade_fill := false ;
+ mfun_gt_reverse_fill := false ;
+ %
+ def reversefill = hide(mfun_gt_reverse_fill := true) enddef ;
+ def outlinefill = enddef ;
+ def withshade primary c = hide(mfun_gt_shade_fill := true; def mfun_gt_shade = normalwithshade c enddef ;) enddef ;
+ def withfillcolor primary c = hide(mfun_gt_color_fill := true; def mfun_gt_fill = withcolor c enddef ;) enddef ;
+ def withdrawcolor primary c = hide(mfun_gt_color_draw := true; def mfun_gt_draw = withcolor c enddef ;) enddef ;
+ %
+ mfun_gt_picture := nullpicture ;
+ addto mfun_gt_picture doublepath origin rest ; % preroll
+ mfun_gt_picture := nullpicture ;
+ %
+ def reversefill = enddef ;
+ def outlinefill = enddef ;
+ def withshade primary c = enddef ;
+ def withfillcolor primary c = enddef ;
+ def withdrawcolor primary c = enddef ;
+ %
+ if mfun_gt_shade_fill :
+ draw outlinetext.f(t)(mfun_gt_shade) rest;
+ elseif mfun_gt_color_fill and mfun_gt_color_draw :
+ if mfun_gt_reverse_fill :
+ draw outlinetext.r(t)(mfun_gt_default mfun_gt_fill rest)(mfun_gt_default mfun_gt_draw rest) ;
+ else :
+ draw outlinetext.b(t)(mfun_gt_default mfun_gt_draw rest)(mfun_gt_default mfun_gt_fill rest);
+ fi ;
+ elseif mfun_gt_color_fill :
+ draw outlinetext.f(t)(mfun_gt_default mfun_gt_fill rest) ;
+ elseif mfun_gt_color_draw :
+ draw outlinetext.d(t)(mfun_gt_default mfun_gt_draw rest) ;
+ else :
+ draw outlinetext.d(t)(mfun_gt_default rest) ;
+ fi ;
+ %
+ endgroup ;
+enddef ;
+
+let graphictext = old_graphictext ;
+%%% graphictext = new_graphictext ; % more than 10 times faster
+
% example
%
% beginfig (1) ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-idea.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-idea.mpiv
index 462d9755359..462d9755359 100644
--- a/Master/texmf-dist/metapost/context/base/mp-idea.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-idea.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-luas.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv
index c919ba2159c..c919ba2159c 100644
--- a/Master/texmf-dist/metapost/context/base/mp-luas.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-mlib.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv
index b19f47f1e55..326342b70ba 100644
--- a/Master/texmf-dist/metapost/context/base/mp-mlib.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -205,8 +205,11 @@ extra_beginfig := extra_beginfig & "mfun_reset_tex_texts ;" ;
% fi
% enddef ;
+boolean mfun_onetime_textext ; mfun_onetime_textext := false ;
+
vardef rawtextext(expr s) = % todo: avoid currentpicture
if s = "" :
+ mfun_onetime_textext := false ;
nullpicture
else :
mfun_tt_n := mfun_tt_n + 1 ;
@@ -219,7 +222,10 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
withprescript "tx_stage=trial"
withprescript "tx_color=" & colordecimals colorpart mfun_tt_o
withpostscript s ;
- addto mfun_tt_p also mfun_tt_c ;
+ if not mfun_onetime_textext :
+ addto mfun_tt_p also mfun_tt_c
+ withprescript "tx_global=yes" ;
+ fi ;
else :
mfun_tt_b := lua.mp.tt_dimensions(mfun_tt_n) ;
addto mfun_tt_c doublepath unitsquare
@@ -229,6 +235,7 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
withprescript "tx_number=" & decimal mfun_tt_n
withprescript "tx_stage=final" ;
fi ;
+ mfun_onetime_textext := false ;
mfun_tt_c
fi
enddef ;
@@ -346,7 +353,7 @@ vardef plain_thelabel@#(expr p,z) =
enddef;
def plain_label = % takes two arguments, contrary to textext that takes one
- draw plain_thelabel
+ normaldraw plain_thelabel
enddef ;
let mfun_label = label ;
@@ -362,6 +369,12 @@ def usemetafunlabels =
let thelabel = mfun_thelabel ;
enddef ;
+vardef dotlabel@#(expr s,z) text t_ =
+ label@#(s,z) t_ ;
+ interim linecap := rounded ;
+ normaldraw z withpen pencircle scaled dotlabeldiam t_ ;
+enddef ;
+
plain_compatibility_data := plain_compatibility_data & "save label, thelabel ;" & "useplainlabels ;" ;
% next comes own own:
@@ -385,6 +398,11 @@ vardef textext@#(expr p) = % no draw here
thetextext@#(p,origin)
enddef ;
+vardef onetimetextext@#(expr p) = % no draw here
+ mfun_onetime_textext := true ;
+ thetextext@#(p,origin)
+enddef ;
+
vardef thelabel@#(expr p,z) =
if string p :
thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z)
@@ -394,7 +412,7 @@ vardef thelabel@#(expr p,z) =
enddef;
def label = % takes two arguments, contrary to textext that takes one
- draw thelabel
+ normaldraw thelabel
enddef ;
vardef anchored@#(expr p, z) = % beware: no "+ mfun_laboff@#" here (never!)
@@ -467,10 +485,33 @@ boolean trace_shades ; trace_shades := false ; % still there
% but this is nicer
-path mfun_shade_path ;
+% fill fullcircle scaled 10cm
+% withshademethod "circular"
+% withshadevector (5cm,1cm)
+% withshadecenter (.1,.5)
+% withshadedomain (.2,.6)
+% withshadefactor 1.2
+% withshadecolors (red,green)
+% ;
+
+path mfun_shade_path ;
+numeric mfun_shade_step ; mfun_shade_step := 0 ;
+
+def withshadestep =
+ hide(mfun_shade_step := mfun_shade_step + 1 ;)
+ mfun_withshadestep
+enddef ;
+
+def mfun_withshadestep (text t) =
+ withprescript "sh_step=" & decimal mfun_shade_step
+ t
+enddef ;
primarydef p withshademethod m =
- hide(mfun_shade_path := p ;)
+ hide(
+ mfun_shade_path := p ;
+ mfun_shade_step := 1 ;
+ )
p
withprescript "sh_domain=0 1"
withprescript "sh_color=into"
@@ -501,6 +542,16 @@ def withshadevector expr a =
withprescript "sh_center_b=" & ddecimal (point ypart a of mfun_shade_path)
enddef ;
+def withshadedirection expr a =
+ withprescript "sh_center_a=" & ddecimal (point xpart a of boundingbox(mfun_shade_path))
+ withprescript "sh_center_b=" & ddecimal (point ypart a of boundingbox(mfun_shade_path))
+enddef ;
+
+pair shadedup ; shadedup := (0.5,2.5) ;
+pair shadeddown ; shadeddown := (2.5,0.5) ;
+pair shadedleft ; shadedleft := (1.5,3.5) ;
+pair shadedright ; shadedright := (3.5,1.5) ;
+
def withshadecenter expr a =
withprescript "sh_center_a=" & ddecimal (
center mfun_shade_path shifted (
@@ -518,10 +569,28 @@ def withshadefactor expr f =
withprescript "sh_factor=" & decimal f
enddef ;
+% def withshadebound (expr a) =
+% if mfun_shade_step > 0 :
+% withprescript "sh_bound_" & decimal mfun_shade_step & "=" & decimal a
+% fi
+% enddef ;
+
+def withshadefraction expr a =
+ if mfun_shade_step > 0 :
+ withprescript "sh_fraction_" & decimal mfun_shade_step & "=" & decimal a
+ fi
+enddef ;
+
def withshadecolors (expr a, b) =
- withprescript "sh_color=into"
- withprescript "sh_color_a=" & colordecimals a
- withprescript "sh_color_b=" & colordecimals b
+ if mfun_shade_step > 0 :
+ withprescript "sh_color=into"
+ withprescript "sh_color_a_" & decimal mfun_shade_step & "=" & colordecimals a
+ withprescript "sh_color_b_" & decimal mfun_shade_step & "=" & colordecimals b
+ else :
+ withprescript "sh_color=into"
+ withprescript "sh_color_a=" & colordecimals a
+ withprescript "sh_color_b=" & colordecimals b
+ fi
enddef ;
primarydef a shadedinto b = % withcolor red shadedinto green
@@ -746,9 +815,186 @@ def register (expr tag, width, height, offset) =
% ) ; % no transformations
enddef ;
+% outlines (todo: pass around less arguments)
+
+numeric currentoutlinetext ; currentoutlinetext := 0 ;
+
+vardef mfun_do_outline_text_flush (expr kind, n, x, y) (text t) =
+ if kind = "f" :
+ mfun_do_outline_text_f (n, x, y) (t)
+ elseif kind = "d" :
+ mfun_do_outline_text_d (n, x, y) (t)
+ elseif kind = "b" :
+ mfun_do_outline_text_b (n, x, y) (t)
+ elseif kind = "r" :
+ mfun_do_outline_text_r (n, x, y) (t)
+ elseif kind = "p" :
+ mfun_do_outline_text_p (n, x, y) (t)
+ else :
+ mfun_do_outline_text_n (n, x, y) (t)
+ fi ;
+enddef ;
+
+numeric mfun_do_outline_n ; mfun_do_outline_n := 0 ;
+
+vardef mfun_do_outline_text_f (expr n, x, y) (text t) =
+ mfun_do_outline_n := 0 ;
+ for i=t :
+ mfun_do_outline_n := mfun_do_outline_n + 1 ;
+ if mfun_do_outline_n = n :
+ fill i shifted(x,y) mfun_do_outline_options_f
+ else :
+ nofill i shifted(x,y)
+ fi ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_d (expr n, x, y) (text t) =
+ for i=t :
+ draw i shifted(x,y) mfun_do_outline_options_d ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_p (expr n, x, y) (text t) =
+ for i=t :
+ draw i shifted(x,y) ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_b (expr n, x, y) (text t) =
+ mfun_do_outline_n := 0 ;
+ for i=t :
+ mfun_do_outline_n := mfun_do_outline_n + 1 ;
+ if mfun_do_outline_n = n :
+ fill i shifted(x,y) mfun_do_outline_options_f
+ else :
+ nofill i shifted(x,y)
+ fi ;
+ endfor ;
+ for i=t :
+ draw i shifted(x,y) mfun_do_outline_options_d ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_r (expr n, x, y) (text t) =
+ mfun_do_outline_n := 0 ;
+ for i=t :
+ draw i shifted(x,y) mfun_do_outline_options_d ;
+ endfor ;
+ for i=t :
+ mfun_do_outline_n := mfun_do_outline_n + 1 ;
+ if mfun_do_outline_n = n :
+ fill i shifted(x,y) mfun_do_outline_options_f
+ else :
+ nofill i shifted(x,y)
+ fi ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_n (expr n, x, y) (text t) =
+ mfun_do_outline_n := 0 ;
+ for i=t :
+ mfun_do_outline_n := mfun_do_outline_n + 1 ;
+ if mfun_do_outline_n = n : fill else : nofill fi i shifted(x,y) ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_set_f (text f) text r =
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_d (text d) text r =
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_b (text f) (text d) text r =
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_r (text d) (text f) text r =
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_n text r =
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_p =
+enddef ;
+
+def mfun_do_outline_options_d = enddef ;
+def mfun_do_outline_options_f = enddef ;
+def mfun_do_outline_options_r = enddef ;
+
+vardef outlinetext@# (expr t) text rest =
+ save kind ; string kind ; kind := str @# ;
+ currentoutlinetext := currentoutlinetext + 1 ;
+ image ( normaldraw image (
+ if mfun_trial_run :
+ % lua.mp.report("set outline text",currentoutlinetext);
+ normaldraw unitsquare
+ withprescript "ot_stage=trial"
+ withprescript "ot_index=" & decimal currentoutlinetext
+ withprescript "ot_kind=" & kind
+ withpostscript t ;
+ else :
+ % lua.mp.report("get outline text",currentoutlinetext);
+ if kind = "f" :
+ mfun_do_outline_text_set_f rest ;
+ elseif kind = "d" :
+ mfun_do_outline_text_set_d rest ;
+ elseif kind = "b" :
+ mfun_do_outline_text_set_b rest ;
+ elseif kind = "r" :
+ mfun_do_outline_text_set_r rest ;
+ elseif kind = "p" :
+ mfun_do_outline_text_set_p ;
+ else :
+ mfun_do_outline_text_set_n rest ;
+ fi ;
+ lua.mp.get_outline_text(currentoutlinetext) ;
+ fi ;
+ ) mfun_do_outline_options_r ; )
+enddef ;
+
+% A few helpers:
+
+numeric mfun_c_b_llx, mfun_c_b_h, mfun_c_b_w, mfun_c_b_l ;
+
+vardef checkedbounds(expr llx,lly,urx,ury) =
+ mfun_c_b_llx := min(xpart llcorner currentpicture,llx) ;
+ mfun_c_b_urx := max(xpart urcorner currentpicture,urx) ;
+ mfun_c_b_lly := min(ypart llcorner currentpicture,lly) ;
+ mfun_c_b_ury := max(ypart urcorner currentpicture,ury) ;
+ (mfun_c_b_llx,mfun_c_b_lly) --
+ (mfun_c_b_urx,mfun_c_b_lly) --
+ (mfun_c_b_urx,mfun_c_b_ury) --
+ (mfun_c_b_llx,mfun_c_b_ury) -- cycle
+enddef ;
+
+vardef checkbounds(expr llx,lly,urx,ury) =
+ setbounds currentpicture to checkedbounds(llx,lly,urx,ury) ;
+enddef ;
+
+vardef strut(expr ht,dp) =
+ setbounds currentpicture to checkedbounds(0,0,ht,dp) ;
+enddef ;
+
+vardef rule(expr wd,ht,dp) =
+ image (fill (0,-dp)--(wd,-dp)--(wd,ht)--(0,ht)--cycle)
+enddef ;
+
+
% Housekeeping
extra_beginfig := extra_beginfig & "currentgraphictext := 0 ; " ;
+extra_beginfig := extra_beginfig & "currentoutlinetext := 0 ; " ;
extra_endfig := extra_endfig & "finishsavingdata ; " ;
extra_endfig := extra_endfig & "mfun_reset_tex_texts ; " ;
@@ -1205,8 +1451,11 @@ vardef formatted(expr f, x) = textext(varfmt(f, x)) enddef ;
% new
-def eofill text t = fill t withpostscript "evenodd" enddef ;
-%%% eoclip text t = clip t withpostscript "evenodd" enddef ; % no postscripts yet
+def fillup text t = draw t withpostscript "both" enddef ; % we use draw because we need the proper boundingbox
+def eofillup text t = draw t withpostscript "eoboth" enddef ; % we use draw because we need the proper boundingbox
+def eofill text t = fill t withpostscript "evenodd" enddef ;
+def nofill text t = fill t withpostscript "collect" enddef ;
+%%% eoclip text t = clip t withpostscript "evenodd" enddef ; % no postscripts yet
% def withrule expr r =
% if (t = "even-odd") or (t = "evenodd") : withpostscript "evenodd" fi
diff --git a/Master/texmf-dist/metapost/context/base/mp-page.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv
index a6fa3fba366..4ccf4448ec2 100644
--- a/Master/texmf-dist/metapost/context/base/mp-page.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv
@@ -662,3 +662,32 @@ def Enlarged (expr p, d) =
urEnlarged (p,d) --
ulEnlarged (p,d) -- cycle)
enddef ;
+
+% for the moment we put these here:
+
+numeric RuleWidth ; RuleWidth := 0 ;
+numeric RuleHeight ; RuleHeight := 0 ;
+numeric RuleDepth ; RuleDepth := 0 ;
+numeric RuleThickness ; RuleThickness := 0 ;
+numeric RuleFactor ; RuleFactor := 0 ;
+numeric RuleOffset ; RuleOffset := 0 ;
+ def RuleColor = (.5white) enddef ;
+
+def FakeWord(expr RuleWidth, RuleHeight, RuleDepth, RuleThickness) (text RuleColor) =
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled (RuleDepth-RuleThickness/2)
+ withcolor RuleColor ;
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled (RuleHeight-RuleDepth-RuleThickness/2)
+ shifted (0,RuleDepth+RuleThickness)
+ withcolor RuleColor ;
+enddef ;
+
+def FakeRule(expr RuleWidth, RuleHeight, RuleDepth, RuleThickness) (text RuleColor) =
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled RuleHeight
+ withcolor RuleColor ;
+enddef ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-shap.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-shap.mpiv
index 7136565108d..7136565108d 100644
--- a/Master/texmf-dist/metapost/context/base/mp-shap.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-shap.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-step.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-step.mpiv
index f7a7ba5debb..f7a7ba5debb 100644
--- a/Master/texmf-dist/metapost/context/base/mp-step.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-step.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-symb.mp b/Master/texmf-dist/metapost/context/base/mpiv/mp-symb.mpiv
index a84c84e828d..a84c84e828d 100644
--- a/Master/texmf-dist/metapost/context/base/mp-symb.mp
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-symb.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-text.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-text.mpiv
index b68e8412aef..b68e8412aef 100644
--- a/Master/texmf-dist/metapost/context/base/mp-text.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-text.mpiv
diff --git a/Master/texmf-dist/metapost/context/base/mp-tool.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv
index e497e2f7242..05f9d9edc0a 100644
--- a/Master/texmf-dist/metapost/context/base/mp-tool.mpiv
+++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv
@@ -1074,14 +1074,16 @@ def draworiginoptions (text t) = def _ori_opt_ = t enddef ; enddef ;
def drawboundoptions (text t) = def _bnd_opt_ = t enddef ; enddef ;
def drawpathoptions (text t) = def _pth_opt_ = t enddef ; enddef ;
+numeric drawoptionsfactor ; drawoptionsfactor := pt ;
+
def resetdrawoptions =
- drawlineoptions (withpen pencircle scaled 1pt withcolor .5white) ;
- drawpointoptions (withpen pencircle scaled 4pt withcolor black) ;
- drawcontroloptions(withpen pencircle scaled 2.5pt withcolor black) ;
+ drawlineoptions (withpen pencircle scaled 1.0 drawoptionsfactor withcolor .5white) ;
+ drawpointoptions (withpen pencircle scaled 4.0 drawoptionsfactor withcolor black) ;
+ drawcontroloptions(withpen pencircle scaled 2.5 drawoptionsfactor withcolor black) ;
drawlabeloptions () ;
- draworiginoptions (withpen pencircle scaled 1pt withcolor .5white) ;
+ draworiginoptions (withpen pencircle scaled 1.0 drawoptionsfactor withcolor .5white) ;
drawboundoptions (dashed evenly _ori_opt_) ;
- drawpathoptions (withpen pencircle scaled 5pt withcolor .8white) ;
+ drawpathoptions (withpen pencircle scaled 5.0 drawoptionsfactor withcolor .8white) ;
enddef ;
resetdrawoptions ;
@@ -1094,20 +1096,42 @@ enddef ;
%D Arrow.
+newinternal ahvariant ; ahvariant := 0 ;
+newinternal ahdimple ; ahdimple := 1/5 ;
+
+vardef arrowhead expr p =
+ save q, e, r ;
+ pair e ; e = point length p of p ;
+ path q ; q = gobble(p shifted -e cutafter makepath(pencircle scaled (2ahlength))) cuttings ;
+ if ahvariant > 0:
+ path r ; r = gobble(p shifted -e cutafter makepath(pencircle scaled ((1-ahdimple)*2ahlength))) cuttings ;
+ fi
+ (q rotated (ahangle/2) & reverse q rotated -(ahangle/2)
+ if ahvariant = 1 :
+ -- point 0 of r --
+ elseif ahvariant = 2 :
+ ... point 0 of r ...
+ else :
+ --
+ fi
+ cycle
+ ) shifted e
+enddef ;
+
vardef drawarrowpath expr p =
save autoarrows ; boolean autoarrows ; autoarrows := true ;
drawarrow p _pth_opt_
enddef ;
def midarrowhead expr p =
- arrowhead p cutafter (point length(p cutafter point .5 along p)+ahlength on p)
+ arrowhead p cutafter (point length(p cutafter point .5 along p) + ahlength on p)
enddef ;
vardef arrowheadonpath (expr p, s) =
save autoarrows ; boolean autoarrows ;
autoarrows := true ;
set_ahlength(scaled ahfactor) ; % added
- arrowhead p if s<1 : cutafter (point (s*arclength(p)+.5ahlength) on p) fi
+ arrowhead p if s < 1 : cutafter (point (s*arclength(p) + (ahlength/2)) on p) fi
enddef ;
%D Points.
@@ -1152,13 +1176,25 @@ def mfun_draw_controllines text t =
enddef;
boolean swappointlabels ; swappointlabels := false ;
+numeric pointlabelscale ; pointlabelscale := 0 ;
+string pointlabelfont ; pointlabelfont := "" ;
def mfun_draw_pointlabels text t =
for _i_=0 upto length(_c_) :
pair _u_ ; _u_ := unitvector(direction _i_ of _c_) rotated if swappointlabels : - fi 90 ;
pair _p_ ; _p_ := (point _i_ of _c_) ;
- _u_ := 12 * defaultscale * _u_ ;
+ begingroup ;
+ if pointlabelscale > 0 :
+ save defaultscale ; numeric defaultscale ;
+ defaultscale := pointlabelscale ;
+ fi ;
+ if pointlabelfont <> "" :
+ save defaultfont ; string defaultfont ;
+ defaultfont := pointlabelfont ;
+ fi ;
+ _u_ := 10 * drawoptionsfactor * defaultscale * _u_ ;
normaldraw thelabel ( decimal _i_, _p_ shifted if cycle _c_ and (_i_=0) : - fi _u_ ) _lab_opt_ t ;
+ endgroup ;
endfor ;
enddef;
@@ -1233,6 +1269,14 @@ def drawwholepath expr p =
drawpointlabels p ;
enddef ;
+def drawpathonly expr p =
+ drawpath p ;
+ drawcontrollines p ;
+ drawcontrolpoints p ;
+ drawpoints p ;
+ drawpointlabels p ;
+enddef ;
+
%D Tracing.
def visualizeddraw expr c =
@@ -1263,11 +1307,29 @@ def do_visualizedfill text t =
drawpointlabels _c_ ;
enddef ;
+def detaileddraw expr c =
+ if picture c : normaldraw c else : path _c_ ; _c_ := c ; do_detaileddraw fi
+enddef ;
+
+def do_detaileddraw text t =
+ drawpath _c_ t ;
+ drawcontrollines _c_ ;
+ drawcontrolpoints _c_ ;
+ drawpoints _c_ ;
+ % % for labels we need an third run (as the second will mark the numbers); i could preroll them
+ % % but then the hash needs to handle that as well (as now we keep numbering)
+ % drawpointlabels _c_ ;
+enddef ;
+
def visualizepaths =
let fill = visualizedfill ;
let draw = visualizeddraw ;
enddef ;
+def detailpaths =
+ let draw = detaileddraw ;
+enddef ;
+
def naturalizepaths =
let fill = normalfill ;
let draw = normaldraw ;
@@ -1314,7 +1376,10 @@ enddef ;
%D \METAPOST\ definitions.
vardef arrowpath expr p = % patch by Peter Rolf: supports squared pen and shifting (hh: maybe just use center of head as first)
- (p cutafter makepath(pencircle scaled 2(ahlength*cosd(.5ahangle)) shifted point length p of p))
+ (p cutafter makepath(pencircle
+ scaled (if ahvariant > 0 : (1-ahdimple)* fi 2ahlength*cosd(ahangle/2))
+ shifted point length p of p
+ ))
enddef;
% def _finarr text t =
@@ -1323,18 +1388,24 @@ enddef;
% filldraw arrowhead _apth t ;
% enddef;
-def _finarr text t =
- if autoarrows : set_ahlength (t) fi ;
- draw arrowpath _apth t ; % arrowpath added
- fill arrowhead _apth t ;
- draw arrowhead _apth t ;
-enddef;
+% def _finarr text t =
+% if autoarrows : set_ahlength (t) fi ;
+% draw arrowpath _apth t ; % arrowpath added
+% fill arrowhead _apth t ;
+% draw arrowhead _apth t ;
+% enddef;
+
+% def _finarr text t =
+% if autoarrows : set_ahlength (t) fi ;
+% draw arrowpath _apth t ; % arrowpath added
+% fill arrowhead _apth t ;
+% draw arrowhead _apth t undashed ;
+% enddef;
def _finarr text t =
if autoarrows : set_ahlength (t) fi ;
draw arrowpath _apth t ; % arrowpath added
- fill arrowhead _apth t ;
- draw arrowhead _apth t undashed ;
+ fillup arrowhead _apth t ;
enddef;
%D Handy too ......
@@ -1631,6 +1702,22 @@ enddef ;
let greyed = grayed ;
+vardef hsvtorgb(expr h,s,v) =
+ save H, S, V, x ;
+ H = h mod 360 ;
+ S = if s < 0 : 0 elseif s > 1 : 1 else: s fi ;
+ V = if v < 0 : 0 elseif v > 1 : 1 else: v fi ;
+ x = 1 - abs(H mod 120 - 60)/60 ;
+ V * ( (1-S) * (1,1,1) + S *
+ if H < 60 : (1,x,0)
+ elseif H < 120 : (x,1,0)
+ elseif H < 180 : (0,1,x)
+ elseif H < 240 : (0,x,1)
+ elseif H < 300 : (x,0,1)
+ else : (1,0,x)
+ fi )
+enddef ;
+
% yes or no: "text" infont "cmr12" at 24pt ;
% let normalinfont = infont ;
@@ -2110,7 +2197,7 @@ if unknown darkcyan : color darkcyan ; darkcyan := .625(0,1,1) fi ;
if unknown darkmagenta : color darkmagenta ; darkmagenta := .625(1,0,1) fi ;
if unknown darkyellow : color darkyellow ; darkyellow := .625(1,1,0) fi ;
if unknown darkgray : color darkgray ; darkgray := .625(1,1,1) fi ;
-if unknown lightgray : color lightgray ; lightgray := .875(1,1,1) fi ;
+if unknown lightgray : color lightgray ; lightgray := .850(1,1,1) fi ;
% an improved plain mp macro
diff --git a/Master/texmf-dist/metapost/context/fonts/bidi-symbols.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.mp
index abe48b95116..abe48b95116 100644
--- a/Master/texmf-dist/metapost/context/fonts/bidi-symbols.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/bidi-symbols.tex b/Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.tex
index ba659ccb714..ba659ccb714 100644
--- a/Master/texmf-dist/metapost/context/fonts/bidi-symbols.tex
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/bidi-symbols.tex
diff --git a/Master/texmf-dist/metapost/context/fonts/demo-symbols.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.mp
index 822854c9419..822854c9419 100644
--- a/Master/texmf-dist/metapost/context/fonts/demo-symbols.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/demo-symbols.tex b/Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.tex
index e9af4a027ed..e9af4a027ed 100644
--- a/Master/texmf-dist/metapost/context/fonts/demo-symbols.tex
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/demo-symbols.tex
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont-bold.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-bold.mp
index 1c62963f9aa..1c62963f9aa 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont-bold.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-bold.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont-boldslanted.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-boldslanted.mp
index 3e5fa1561df..3e5fa1561df 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont-boldslanted.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-boldslanted.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont-characters.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-characters.mp
index da0015b02b4..da0015b02b4 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont-characters.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-characters.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont-definitions.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-definitions.mp
index 2901a9d0312..2901a9d0312 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont-definitions.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-definitions.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont-slanted.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-slanted.mp
index 5c1ff46b233..5c1ff46b233 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont-slanted.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont-slanted.mp
diff --git a/Master/texmf-dist/metapost/context/fonts/punkfont.mp b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont.mp
index 2a03aae81df..2a03aae81df 100644
--- a/Master/texmf-dist/metapost/context/fonts/punkfont.mp
+++ b/Master/texmf-dist/metapost/context/fonts/mpiv/punkfont.mp
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-chars.lua b/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
index 9f6852da245..d54804a1bf8 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
@@ -36,85 +36,15 @@ local application = logs.application {
local report = application.report
-local format, gmatch, upper, lower = string.format, string.gmatch, string.upper, string.lower
-local tonumber = tonumber
+local format, gmatch, upper, lower, find = string.format, string.gmatch, string.upper, string.lower, string.find
+local formatters = string.formatters
+local tonumber, type = tonumber, type
local concat = table.concat
local utfchar = utf.char
scripts = scripts or { }
scripts.chars = scripts.chars or { }
---~ local banner = [[
---~ -- filename : char-mth.lua
---~ -- comment : companion to char-mth.tex (in ConTeXt)
---~ -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
---~ -- license : see context related readme files
---~ -- comment : generated from data file downloaded from STIX website
---~
---~ if not versions then versions = { } end versions['char-mth'] = 1.001
---~ if not characters then characters = { } end
---~ ]]
---~
---~ function scripts.chars.stixtomkiv(inname,outname)
---~ if inname == "" then
---~ report("aquiring math data, invalid datafilename")
---~ end
---~ local f = io.open(inname)
---~ if not f then
---~ report("aquiring math data, invalid datafile")
---~ else
---~ report("aquiring math data, processing %s",inname)
---~ if not outname or outname == "" then
---~ outname = "char-mth.lua"
---~ end
---~ local classes = {
---~ N = "normal",
---~ A = "alphabetic",
---~ D = "diacritic",
---~ P = "punctuation",
---~ B = "binary",
---~ R = "relation",
---~ L = "large",
---~ O = "opening",
---~ C = "closing",
---~ F = "fence"
---~ }
---~ local valid, done = false, { }
---~ local g = io.open(outname,'w')
---~ g:write(banner)
---~ g:write(format("\ncharacters.math = {\n"))
---~ for l in f:lines() do
---~ if not valid then
---~ valid = l:find("AMS/TeX name")
---~ end
---~ if valid then
---~ local unicode = l:sub(2,6)
---~ if unicode:sub(1,1) ~= " " and unicode ~= "" and not done[unicode] then
---~ local mathclass, adobename, texname = l:sub(57,57) or "", l:sub(13,36) or "", l:sub(84,109) or ""
---~ texname, adobename = texname:gsub("[\\ ]",""), adobename:gsub("[\\ ]","")
---~ local t = { }
---~ if mathclass ~= "" then t[#t+1] = format("mathclass='%s'", classes[mathclass] or "unknown") end
---~ if adobename ~= "" then t[#t+1] = format("adobename='%s'", adobename ) end
---~ if texname ~= "" then t[#t+1] = format("texname='%s'" , texname ) end
---~ if #t > 0 then
---~ g:write(format("\t[0x%s] = { %s },\n",unicode, concat(t,", ")))
---~ end
---~ done[unicode] = true
---~ end
---~ end
---~ end
---~ if not valid then
---~ g:write("\t-- The data file is corrupt, invalid or maybe the format has changed.\n")
---~ report("aquiring math data, problems with data table")
---~ else
---~ report("aquiring math data, table saved in %s",outname)
---~ end
---~ g:write("}\n")
---~ g:close()
---~ f:close()
---~ end
---~ end
-
function scripts.chars.stixtomkiv(inname,outname)
report("we no longer use this options but use our own tables instead")
end
@@ -133,6 +63,17 @@ local banner_pdf_2 = [[
\endinput
]]
+local f_tounicode = formatters['\\pdfglyphtounicode{%s}{%04X}%%\n']
+local f_case = formatters['\\setXTXcharcodes "%05X "%05X "%05X %% %s\n']
+local f_range = formatters['\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharcodes\\recurselevel\\recurselevel\\recurselevel}\n']
+local f_classes = formatters['\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n']
+local f_charclass_a = formatters['\\defineXTXcharinjectionclass[lb:%s]\n']
+local f_charclass_b = formatters['\\dosetXTXcharacterclass{"%05X}{lb:%s}\n']
+local f_charclass_c = formatters['\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n']
+local f_hex = formatters['%s %05X"']
+local f_unicode = formatters['U+%05X']
+local f_entity = formatters[' ["%s"] = %q, -- %s']
+
function scripts.chars.makepdfr()
local chartable = resolvers.findfile("char-def.lua") or ""
if chartable ~= "" then
@@ -146,7 +87,7 @@ function scripts.chars.makepdfr()
for i=1,#sd do
local char = cd[sd[i]]
if char.adobename then
- f:write(format("\\pdfglyphtounicode{%s}{%04X}%%\n",char.adobename,char.unicodeslot))
+ f:write(f_tounicode(char.adobename,char.unicodeslot))
end
end
f:write(banner_pdf_2)
@@ -156,13 +97,13 @@ function scripts.chars.makepdfr()
end
end
-local banner_utf_module = [[
+local banner_utf_module = formatters [ [[
%% filename : %s
%% comment : generated by mtxrun --script chars --xtx
%% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
%% copyright: PRAGMA ADE / ConTeXt Development Team
%% license : see context related readme files
-]]
+]] ]
local banner_utf_mappings = [[
@@ -219,7 +160,7 @@ function scripts.chars.makeencoutf()
local f = io.open(name,'w')
if f then
report("writing '%s'",name)
- f:write(format(banner_utf_module,name))
+ f:write(banner_utf_module(name))
f:write(banner)
f:write()
return f
@@ -232,7 +173,7 @@ function scripts.chars.makeencoutf()
local data = characters and characters.data
if data then
local list = table.sortedkeys(characters.data)
- local f = open("xetx-utf.tex",banner_utf_mappings)
+ local f = open("xetx-utf.mkii",banner_utf_mappings)
if f then
for i=1,#list do
local code = list[i]
@@ -240,9 +181,15 @@ function scripts.chars.makeencoutf()
local chr = data[code]
local cc = chr.category
if cc == 'll' or cc == 'lu' or cc == 'lt' then
- if not chr.lccode then chr.lccode = code end
- if not chr.uccode then chr.uccode = code end
- f:write(format('\\setXTXcharcodes "%05X "%05X "%05X %% %s\n',code,chr.lccode,chr.uccode,chr.description))
+ local lccode = chr.lccode or code
+ local uccode = chr.uccode or code
+ if type(lccode) == "table" then
+ lccode = code
+ end
+ if type(uccode) == "table" then
+ uccode = code
+ end
+ f:write(f_case(code,lccode,uccode,chr.description))
end
end
end
@@ -253,51 +200,57 @@ function scripts.chars.makeencoutf()
if chr and chr.range then
local cc = chr.category
if cc == 'lo' then
- f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharcodes\\recurselevel\\recurselevel\\recurselevel}\n',code,chr.range))
+ f:write(f_range(code,chr.range))
end
end
end
f:write(banner_utf_patch)
close(f)
end
- local f = open("xetx-chr.tex",banner_utf_names)
+ local f = open("xetx-chr.mkii",banner_utf_names)
if f then
local length = 0
for i=1,#list do
local code = list[i]
if code > 0x5B and code <= 0xFFFF then
local chr = data[code]
- if chr and #(chr.contextname or "") > length then
- length = #chr.contextname
+ if chr then
+ local l = #(chr.contextname or "")
+ if l > length then
+ length = l
+ end
end
end
end
- local template = "\\def\\%-".. length .. "s{\\char\"%05X } %% %s: %s\n"
+ local f_def = formatters["\\def\\%-".. length .. "s{\\char\"%05X } %% %s: %s\n"]
for i=1,#list do
local code = list[i]
if code > 0x5B and code <= 0xFFFF then
local chr = data[code]
- if chr and chr.contextname then
- local ch = utfchar(code)
- f:write(format(template, chr.contextname, code, chr.description, ch))
+ if chr then
+ local contextname = chr.contextname
+ if contextname and not find(contextname,"space$") then
+ local ch = utfchar(code)
+ f:write(f_def(contextname, code, chr.description, ch))
+ end
end
end
end
close(f)
end
- local f = open("xetx-cls.tex",banner_utf_classes)
+ local f = open("xetx-cls.mkii",banner_utf_classes)
if f then
for k, v in next, xtxclasses do
- f:write(format("\\defineXTXcharinjectionclass[lb:%s]\n",k))
+ f:write(f_charclass_a(k))
end
f:write("\n")
local i_first, i_last, i_clb = nil, nil, nil
local function flush()
if i_first then
if i_first == i_last then
- f:write(format('\\dosetXTXcharacterclass{"%05X}{lb:%s}\n',i_first,i_clb))
+ f:write(f_charclass_b(i_first,i_clb))
else
- f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n',i_first,i_last,i_clb))
+ f:write(f_charclass_c(i_first,i_last,i_clb))
end
end
i_first, i_last, i_clb = nil, nil, nil
@@ -330,7 +283,7 @@ function scripts.chars.makeencoutf()
if chr and chr.range then
local lbc = chr.linebreak
if xtxclasses[lbc] then
- f:write(format('\\dofastrecurse{"%05X}{"%05X}{1}{\\dosetXTXcharacterclass\\fastrecursecounter{lb:%s}}\n',code,chr.range,lbc))
+ f:write(f_classes(code,chr.range,lbc))
end
end
end
@@ -362,11 +315,11 @@ function scripts.chars.xmlentities()
if name == "newline" then
-- let's forget about that one
elseif name == "lt" then
- str, hex = "<", format("%s %05X",hex,c)
+ str, hex = "<", f_hex(hex,c)
elseif name == "gt" then
- str, hex = ">", format("%s %05X",hex,c)
+ str, hex = ">", f_hex(hex,c)
elseif name == "amp" then
- str, hex = "&", format("%s %05X",hex,c)
+ str, hex = "&", f_hex(hex,c)
else
for t, c in gmatch(value,"&#([x]*)([^;]+);") do
if t == "x" then
@@ -375,14 +328,14 @@ function scripts.chars.xmlentities()
c = tonumber(c)
end
if str then
- str, hex = str .. utfchar(c), format("%s %05X",hex,c)
+ str, hex = str .. utfchar(c), f_hex(hex,c)
else
- str, hex = utfchar(c), format("U+%05X",c)
+ str, hex = utfchar(c), f_unicode(c)
end
end
end
if str and hex then
- entities[#entities+1] = format(' ["%s"] = %q, -- %s',name,str,hex)
+ entities[#entities+1] = f_entity(name,str,hex)
end
end
end
@@ -406,28 +359,3 @@ elseif environment.argument("exporthelp") then
else
application.help()
end
-
--- local http = require("socket.http")
--- local ltn12 = require("ltn12")
---
--- local t = { }
--- local status, message = http.request {
--- url = f,
--- sink = ltn12.sink.table(t)
--- }
---
--- local template = [[
--- <?xml version='1.0' ?>
---
--- <!DOCTYPE dummy [
---
--- %s
---
--- ]>
---
--- <dummy>This is just a placeholder.</dummy>
--- ]]
---
--- local e = string.format(template,io.loaddata(n))
--- local x = xml.convert(e, { utfize_entities = true } )
--- local entities = x.entities
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-check.lua b/Master/texmf-dist/scripts/context/lua/mtx-check.lua
index c456b44143e..16b9cb64a82 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-check.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-check.lua
@@ -114,7 +114,7 @@ local contextgrammar = P { "tokens",
["start"] = start,
["stop"] = stop,
["whatever"] = line + esc * 1 + C(P("%") * (1-line)^0),
- ["grouped"] = l_g * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + line + (1 - l_g - r_g))^0 * r_g,
+ ["grouped"] = l_g * (V("start") + V("stop") + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + line + (1 - l_g - r_g))^0 * r_g,
["setup"] = l_s * (okay + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s,
["display"] = d_m * (V("whatever") + V("grouped") + (1 - d_m))^0 * d_m,
["inline"] = i_m * (V("whatever") + V("grouped") + (1 - i_m))^0 * i_m,
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-context.lua b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
index d624f68315f..dce9170ccbc 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-context.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
@@ -34,7 +34,7 @@ local formatters = string.formatters
local application = logs.application {
name = "mtx-context",
- banner = "ConTeXt Process Management 0.61",
+ banner = "ConTeXt Process Management 0.63",
-- helpinfo = helpinfo, -- table with { category_a = text_1, category_b = text_2 } or helpstring or xml_blob
helpinfo = "mtx-context.xml",
}
@@ -44,6 +44,8 @@ local application = logs.application {
-- ["default-translate-file"] = true, -- ignored, input is assumed to be in UTF-8 encoding
-- ["translate-file"] = true, -- ignored, input is assumed to be in UTF-8 encoding
-- ["etex"] = true, -- ignored, the etex extensions are always active
+-- ["parse-first-line"] = true, -- ignored, enable parsing of the first line of the input file
+-- ["no-parse-first-line"] = true, -- ignored, disable parsing of the first line of the input file
--
-- ["credits"] = true, -- display credits and exit
-- ["debug-format"] = true, -- enable format debugging
@@ -68,14 +70,14 @@ local application = logs.application {
-- ["output-comment"] = true, -- use STRING for DVI file comment instead of date (no effect for PDF)
-- ["output-directory"] = true, -- use existing DIR as the directory to write files in
-- ["output-format"] = true, -- use FORMAT for job output; FORMAT is 'dvi' or 'pdf'
--- ["parse-first-line"] = true, -- enable parsing of the first line of the input file
--- ["no-parse-first-line"] = true, -- disable parsing of the first line of the input file
-- ["progname"] = true, -- set the program name to STRING
-- ["recorder"] = true, -- enable filename recorder
-- ["safer"] = true, -- disable easily exploitable lua commands
-- ["shell-escape"] = true, -- enable \write18{SHELL COMMAND}
-- ["no-shell-escape"] = true, -- disable \write18{SHELL COMMAND}
-- ["shell-restricted"] = true, -- restrict \write18 to a list of commands given in texmf.cnf
+-- ["nodates"] = true, -- no production dates in pdf file
+-- ["trailerid"] = true, -- alternative trailer id
-- ["synctex"] = true, -- enable synctex
-- ["version"] = true, -- display version and exit
-- ["luaonly"] = true, -- run a lua file, then exit
@@ -173,7 +175,7 @@ end
function ctxrunner.checkfile(ctxdata,ctxname,defaultname)
- if not ctxdata.jobname or ctxdata.jobname == "" then
+ if not ctxdata.jobname or ctxdata.jobname == "" or getargument("noctx") then
return
end
@@ -284,7 +286,7 @@ end
local f_tempfile = formatters["%s-%s-%02d.tmp"]
-local function backup(run,kind,filename)
+local function backup(jobname,run,kind,filename)
if run == 1 then
for i=1,10 do
local tmpname = f_tempfile(jobname,kind,i)
@@ -307,7 +309,7 @@ local function multipass_copyluafile(jobname,run)
local tuaname, tucname = jobname..".tua", jobname..".tuc"
if validfile(tuaname) then
if run then
- backup(run,"tuc",tucname)
+ backup(jobname,run,"tuc",tucname)
report("copying %a into %a",tuaname,tucname)
report()
end
@@ -320,7 +322,7 @@ local function multipass_copylogfile(jobname,run)
local logname = jobname..".log"
if validfile(logname) then
if run then
- backup(run,"log",logname)
+ backup(jobname,run,"log",logname)
report()
end
end
@@ -590,6 +592,9 @@ function scripts.context.run(ctxdata,filename)
local a_texformat = getargument("texformat")
local a_keeptuc = getargument("keeptuc")
local a_keeplog = getargument("keeplog")
+ local a_export = getargument("export")
+ local a_nodates = getargument("nodates")
+ local a_trailerid = getargument("trailerid")
-- the following flag is not officially supported because i cannot forsee
-- side effects (so no bug reports please) .. we provide --sandbox that
@@ -716,6 +721,7 @@ function scripts.context.run(ctxdata,filename)
fulljobname = validstring(filename),
files = concat(files,","),
ctx = validstring(ctxname),
+ export = a_export and true or nil,
}
--
for k, v in next, environment.arguments do
@@ -725,11 +731,12 @@ function scripts.context.run(ctxdata,filename)
end
end
--
+ -- todo: --output-file=... in luatex
--
local l_flags = {
["interaction"] = a_batchmode,
["synctex"] = a_synctex,
- ["no-parse-first-line"] = true,
+ ["no-parse-first-line"] = true, -- obsolete
["safer"] = a_safer,
-- ["no-mktex"] = true,
-- ["file-line-error-style"] = true,
@@ -748,21 +755,26 @@ function scripts.context.run(ctxdata,filename)
c_flags.usemodule = "timing"
end
--
- if not a_profile then
- -- okay
- elseif c_flags.directives then
- c_flags.directives = format("system.profile,%s",c_flags.directives)
- else
- c_flags.directives = "system.profile"
+ local directives = { }
+ --
+ if a_nodates then
+ directives[#directives+1] = "backend.nodates"
+ end
+ --
+ if a_trailerid then
+ directives[#directives+1] = format("backend.trailerid=%s",a_trailerid)
+ end
+ --
+ if a_profile then
+ directives[#directives+1] = "system.profile"
end
--
if a_synctex then
report("warning: synctex is enabled") -- can add upto 5% runtime
- if c_flags.directives then
- c_flags.directives = format("system.synctex=%s,%s",a_synctex,c_flags.directives)
- else
- c_flags.directives = format("system.synctex=%s",a_synctex)
- end
+ directives[#directives+1] = format("system.synctex=%s",a_synctex)
+ end
+ if #directives > 0 then
+ c_flags.directives = concat(directives,",")
end
--
-- kindofrun: 1:first run, 2:successive run, 3:once, 4:last of maxruns
@@ -958,13 +970,122 @@ function scripts.context.pipe() -- still used?
end
local function make_mkiv_format(name,engine)
- environment.make_format(name) -- jit is picked up later
+ environment.make_format(name,environment.arguments.silent) -- jit is picked up later
end
-local function make_mkii_format(name,engine)
- local command = format("mtxrun texexec.rb --make %s --%s",name,engine)
- report("running command: %s",command)
- os.spawn(command)
+local make_mkii_format
+
+do -- more or less copied from mtx-plain.lua:
+
+ local function mktexlsr()
+ if environment.arguments.silent then
+ local result = os.execute("mktexlsr --quiet > temp.log")
+ if result ~= 0 then
+ print("mktexlsr silent run > fatal error") -- we use a basic print
+ else
+ print("mktexlsr silent run") -- we use a basic print
+ end
+ os.remove("temp.log")
+ else
+ report("running mktexlsr")
+ os.execute("mktexlsr")
+ end
+ end
+
+ local function engine(texengine,texformat)
+ local command = string.format('%s --ini --etex --8bit %s \\dump',texengine,file.addsuffix(texformat,"mkii"))
+ if environment.arguments.silent then
+ statistics.starttiming()
+ local command = format("%s > temp.log",command)
+ local result = os.execute(command)
+ local runtime = statistics.stoptiming()
+ if result ~= 0 then
+ print(format("%s silent make > fatal error when making format %q",texengine,texformat)) -- we use a basic print
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",texengine,texformat,runtime)) -- we use a basic print
+ end
+ os.remove("temp.log")
+ else
+ report("running command: %s",command)
+ os.execute(command)
+ end
+ end
+
+ local function resultof(...)
+ local command = string.format(...)
+ report("running command %a",command)
+ return string.strip(os.resultof(command) or "")
+ end
+
+ local function make(texengine,texformat)
+ report("generating kpse file database")
+ mktexlsr()
+ local fmtpathspec = resultof("kpsewhich --var-value=TEXFORMATS --engine=%s",texengine)
+ if fmtpathspec ~= "" then
+ report("using path specification %a",fmtpathspec)
+ fmtpathspec = resultof('kpsewhich -expand-braces="%s"',fmtpathspec)
+ end
+ if fmtpathspec ~= "" then
+ report("using path expansion %a",fmtpathspec)
+ else
+ report("no valid path reported, trying alternative")
+ fmtpathspec = resultof("kpsewhich --show-path=fmt --engine=%s",texengine)
+ if fmtpathspec ~= "" then
+ report("using path expansion %a",fmtpathspec)
+ else
+ report("no valid path reported, falling back to current path")
+ fmtpathspec = "."
+ end
+ end
+ fmtpathspec = string.splitlines(fmtpathspec)[1] or fmtpathspec
+ fmtpathspec = fmtpathspec and file.splitpath(fmtpathspec)
+ local fmtpath = nil
+ if fmtpathspec then
+ for i=1,#fmtpathspec do
+ local path = fmtpathspec[i]
+ if path ~= "." then
+ dir.makedirs(path)
+ if lfs.isdir(path) and file.is_writable(path) then
+ fmtpath = path
+ break
+ end
+ end
+ end
+ end
+ if not fmtpath or fmtpath == "" then
+ fmtpath = "."
+ else
+ lfs.chdir(fmtpath)
+ end
+ engine(texengine,texformat)
+ report("generating kpse file database")
+ mktexlsr()
+ report("format %a saved on path %a",texformat,fmtpath)
+ end
+
+ local function run(texengine,texformat,filename)
+ local t = { }
+ for k, v in next, environment.arguments do
+ t[#t+1] = string.format("--mtx:%s=%s",k,v)
+ end
+ execute('%s --fmt=%s %s "%s"',texengine,file.removesuffix(texformat),table.concat(t," "),filename)
+ end
+
+ make_mkii_format = function(name,engine)
+
+ -- let the binary sort it out
+
+ os.setenv('SELFAUTOPARENT', "")
+ os.setenv('SELFAUTODIR', "")
+ os.setenv('SELFAUTOLOC', "")
+ os.setenv('TEXROOT', "")
+ os.setenv('TEXOS', "")
+ os.setenv('TEXMFOS', "")
+ os.setenv('TEXMFCNF', "")
+
+ make(engine,name)
+ end
+
end
function scripts.context.generate()
@@ -1445,7 +1566,7 @@ function scripts.context.update()
report("quiting, no 'context.mkiv' found")
return
end
- local basetree = basepath.match(basepath,"^(.-)tex/context/base/context.mkiv$") or ""
+ local basetree = basepath.match(basepath,"^(.-)tex/context/base/.*context.mkiv$") or ""
if basetree == "" then
report("quiting, no proper tds structure (%s)",basepath)
return
@@ -1487,7 +1608,7 @@ function scripts.context.update()
report("quiting, unable to open '%s'",zipname)
return
end
- local newfile = zip.loaddata(zipfile,"tex/context/base/context.mkiv")
+ local newfile = zip.loaddata(zipfile,"tex/context/base/mkiv/context.mkiv")
if not newfile then
report("quiting, unable to open '%s'","context.mkiv")
return
@@ -1600,7 +1721,7 @@ elseif getargument("make") then
scripts.context.timed(function() scripts.context.make() end)
elseif getargument("generate") then
scripts.context.timed(function() scripts.context.generate() end)
-elseif getargument("ctx") then
+elseif getargument("ctx") and not getargument("noctx") then
scripts.context.timed(scripts.context.ctx)
-- elseif getargument("mp") or getargument("metapost") then
-- scripts.context.timed(scripts.context.metapost)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-context.xml b/Master/texmf-dist/scripts/context/lua/mtx-context.xml
index c4109328900..f5a67424165 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-context.xml
+++ b/Master/texmf-dist/scripts/context/lua/mtx-context.xml
@@ -4,7 +4,7 @@
<metadata>
<entry name="name">mtx-context</entry>
<entry name="detail">ConTeXt Process Management</entry>
- <entry name="version">0.60</entry>
+ <entry name="version">0.62</entry>
<entry name="comment">external helpinfo file</entry>
</metadata>
<flags>
@@ -21,6 +21,9 @@
<flag name="ctx=name">
<short>use ctx file (process management specification)</short>
</flag>
+ <flag name="noctx">
+ <short>ignore ctx directives and flags</short>
+ </flag>
<flag name="interface">
<short>use specified user interface (default: en)</short>
</flag>
@@ -125,6 +128,12 @@
<flag name="synctex">
<short>run with synctex enabled (optional value: zipped, unzipped, 1, -1)</short>
</flag>
+ <flag name="nodates">
+ <short>omit runtime dates in pdf file</short>
+ </flag>
+ <flag name="trailerid">
+ <short>alternative trailer id (or constant one)</short>
+ </flag>
</subcategory>
<subcategory>
<flag name="generate">
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-convert.lua b/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
index d5dba075acf..b3e20ea8769 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
@@ -49,6 +49,12 @@ convert.converters = convert.converters or { }
local converters = convert.converters
local gsprogram = (os.type == "windows" and (os.which("gswin64c.exe") or os.which("gswin32c.exe"))) or "gs"
+
+if string.find(gsprogram," ") then
+ -- c:/program files/...../gswinNNc.exe"
+ gsprogram = '"' .. gsprogram .. '"'
+end
+
local gstemplate_eps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEPSCrop -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit"
local gstemplate_ps = "%s -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dSAFER -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit"
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua b/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
index 694e6a6496f..7af80a15638 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
@@ -10,6 +10,13 @@ local getargument = environment.getargument
local setargument = environment.setargument
local givenfiles = environment.files
+local suffix, addsuffix, removesuffix, replacesuffix = file.suffix, file.addsuffix, file.removesuffix, file.replacesuffix
+local nameonly, basename, joinpath, collapsepath = file.nameonly, file.basename, file.join, file.collapsepath
+local lower = string.lower
+
+local otfversion = 2.824
+local otlversion = 3.018
+
local helpinfo = [[
<?xml version="1.0"?>
<application>
@@ -21,7 +28,8 @@ local helpinfo = [[
<flags>
<category name="basic">
<subcategory>
- <flag name="save"><short>save open type font in raw table</short></flag>
+ <flag name="save"><short>save open type font in raw table (ff format)</short></flag>
+ <flag name="convert"><short>save open type font in raw table (ctx format)</short></flag>
<flag name="unpack"><short>save a tma file in a more readable format</short></flag>
</subcategory>
<subcategory>
@@ -40,6 +48,8 @@ local helpinfo = [[
<flag name="info"><short>give more details</short></flag>
<flag name="trackers" value="list"><short>enable trackers</short></flag>
<flag name="statistics"><short>some info about the database</short></flag>
+ <flag name="names"><short>use name instead of unicodes</short></flag>
+ <flag name="cache" value="str"><short>use specific cache (otl or otf)</short></flag>
</subcategory>
</category>
</flags>
@@ -67,6 +77,11 @@ local helpinfo = [[
<example><command>mtxrun --script font --list --file --all somename</command></example>
<example><command>mtxrun --script font --list --file --pattern=*somename*</command></example>
</subcategory>
+ <subcategory>
+ <example><command>mtxrun --script font --save texgyrepagella-regular.otf</command></example>
+ <example><command>mtxrun --script font --convert texgyrepagella-regular.otf</command></example>
+ <example><command>mtxrun --script font --convert --names texgyrepagella-regular.otf</command></example>
+ </subcategory>
</category>
</examples>
</application>
@@ -84,10 +99,31 @@ local report = application.report
if not fontloader then fontloader = fontforge end
-dofile(resolvers.findfile("font-otp.lua","tex")) -- we need to unpack the font for analysis
-dofile(resolvers.findfile("font-syn.lua","tex"))
-dofile(resolvers.findfile("font-trt.lua","tex"))
-dofile(resolvers.findfile("font-mis.lua","tex"))
+local function loadmodule(filename)
+ local fullname = resolvers.findfile(filename,"tex")
+ if fullname and fullname ~= "" then
+ dofile(fullname)
+ end
+end
+
+-- old loader code
+
+loadmodule("font-otp.lua") -- we need to unpack the font for analysis
+
+-- new loader code
+
+loadmodule("font-otr.lua")
+loadmodule("font-cff.lua")
+loadmodule("font-ttf.lua")
+loadmodule("font-tmp.lua")
+loadmodule("font-dsp.lua") -- not yet in distribution
+loadmodule("font-oup.lua") -- not yet in distribution
+
+-- extra code
+
+loadmodule("font-syn.lua")
+loadmodule("font-trt.lua")
+loadmodule("font-mis.lua")
scripts = scripts or { }
scripts.fonts = scripts.fonts or { }
@@ -134,9 +170,9 @@ end
function fonts.names.simple(alsotypeone)
local simpleversion = 1.001
- local simplelist = { "ttf", "otf", "ttc", "dfont", alsotypeone and "afm" or nil }
+ local simplelist = { "ttf", "otf", "ttc", alsotypeone and "afm" or nil }
local name = "luatex-fonts-names.lua"
- local path = file.collapsepath(caches.getwritablepath("..","..","generic","fonts","data"))
+ local path = collapsepath(caches.getwritablepath("..","..","generic","fonts","data"))
fonts.names.filters.list = simplelist
fonts.names.version = simpleversion -- this number is the same as in font-dum.lua
report("generating font database for 'luatex-fonts' version %s",fonts.names.version)
@@ -154,7 +190,7 @@ function fonts.names.simple(alsotypeone)
local format = simplelist[i]
for tag, index in next, data.mappings[format] do
local s = specifications[index]
- simplemappings[tag] = { s.rawname, s.filename, s.subfont }
+ simplemappings[tag] = { s.rawname or nameonly(s.filename), s.filename, s.subfont }
end
end
if environment.arguments.nocache then
@@ -163,7 +199,7 @@ function fonts.names.simple(alsotypeone)
dir.mkdirs(path)
if lfs.isdir(path) then
report("saving names on cache path %a",path)
- name = file.join(path,name)
+ name = joinpath(path,name)
else
report("invalid cache path %a",path)
end
@@ -204,21 +240,28 @@ local function fontweight(fw)
end
end
+local function indeed(f,s)
+ if s and s ~= "" then
+ report(f,s)
+ end
+end
+
local function showfeatures(tag,specification)
report()
- report("mapping : %s",tag)
- report("fontname: %s",specification.fontname)
- report("fullname: %s",specification.fullname)
- report("filename: %s",specification.filename)
- report("family : %s",specification.familyname or "<nofamily>")
- report("weight : %s",specification.weight or "<noweight>")
- report("style : %s",specification.style or "<nostyle>")
- report("width : %s",specification.width or "<nowidth>")
- report("variant : %s",specification.variant or "<novariant>")
- report("subfont : %s",subfont(specification.subfont))
- report("fweight : %s",fontweight(specification.fontweight))
+ indeed("mapping : %s",tag)
+ indeed("fontname : %s",specification.fontname)
+ indeed("fullname : %s",specification.fullname)
+ indeed("filename : %s",specification.filename)
+ indeed("family : %s",specification.familyname or "<nofamily>")
+ -- indeed("subfamily : %s",specification.subfamilyname or "<nosubfamily>")
+ indeed("weight : %s",specification.weight or "<noweight>")
+ indeed("style : %s",specification.style or "<nostyle>")
+ indeed("width : %s",specification.width or "<nowidth>")
+ indeed("variant : %s",specification.variant or "<novariant>")
+ indeed("subfont : %s",subfont(specification.subfont))
+ indeed("fweight : %s",fontweight(specification.fontweight))
-- maybe more
- local features = fonts.helpers.getfeatures(specification.filename,specification.format)
+ local features = fonts.helpers.getfeatures(specification.filename,not getargument("nosave"))
if features then
for what, v in table.sortedhash(features) do
local data = features[what]
@@ -270,11 +313,12 @@ local function list_specifications(t,info)
local v = s[k]
local entry = t[v]
s[k] = {
- entry.familyname or "<nofamily>",
- entry.weight or "<noweight>",
- entry.style or "<nostyle>",
- entry.width or "<nowidth>",
- entry.variant or "<novariant>",
+ entry.familyname or "<nofamily>",
+ -- entry.subfamilyname or "<nosubfamily>",
+ entry.weight or "<noweight>",
+ entry.style or "<nostyle>",
+ entry.width or "<nowidth>",
+ entry.variant or "<novariant>",
entry.fontname,
entry.filename,
subfont(entry.subfont),
@@ -392,18 +436,23 @@ function scripts.fonts.justload()
end
function scripts.fonts.unpack()
- local name = file.removesuffix(file.basename(givenfiles[1] or ""))
+ local name = removesuffix(basename(givenfiles[1] or ""))
if name and name ~= "" then
- local cache = containers.define("fonts", "otf", 2.742, true)
+ local cacheid = getargument("cache") or "otl"
+ local cache = containers.define("fonts", cacheid, otlversion, true) -- cache is temp
local cleanname = containers.cleanname(name)
local data = containers.read(cache,cleanname)
if data then
- local savename = file.addsuffix(cleanname .. "-unpacked","tma")
+ local savename = addsuffix(cleanname .. "-unpacked","tma")
report("fontsave, saving data in %s",savename)
- fonts.handlers.otf.enhancers.unpack(data)
+ if data.creator == "context mkiv" then
+ fonts.handlers.otf.readers.unpack(data)
+ else
+ fonts.handlers.otf.enhancers.unpack(data)
+ end
io.savedata(savename,table.serialize(data,true))
else
- report("unknown file %a",name)
+ report("unknown file %a in cache %a",name,cacheid)
end
end
end
@@ -415,9 +464,9 @@ function scripts.fonts.save()
if fontblob then
if fontblob.validation_state and table.contains(fontblob.validation_state,"bad_ps_fontname") then
report("ignoring bad fontname for %a",name)
- savename = file.nameonly(name) .. "-bad-ps-name"
+ savename = nameonly(name) .. "-bad-ps-name"
end
- savename = file.addsuffix(string.lower(savename),"lua")
+ savename = addsuffix(lower(savename),"lua")
report("fontsave, saving data in %a",savename)
table.tofile(savename,fontloader.to_table(fontblob),"return")
fontloader.close(fontblob)
@@ -426,7 +475,7 @@ function scripts.fonts.save()
if name and name ~= "" then
local filename = resolvers.findfile(name) -- maybe also search for opentype
if filename and filename ~= "" then
- local suffix = string.lower(file.suffix(filename))
+ local suffix = lower(suffix(filename))
if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' or suffix == "dfont" then
local fontinfo = fontloader.info(filename)
if fontinfo then
@@ -453,6 +502,36 @@ function scripts.fonts.save()
end
end
+function scripts.fonts.convert() -- new save
+ local name = givenfiles[1] or ""
+ local sub = givenfiles[2] or ""
+ if name and name ~= "" then
+ local filename = resolvers.findfile(name) -- maybe also search for opentype
+ if filename and filename ~= "" then
+ local suffix = lower(suffix(filename))
+ if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' then
+ local data = fonts.handlers.otf.readers.loadfont(filename,sub)
+ if data then
+ fonts.handlers.otf.readers.compact(data)
+ fonts.handlers.otf.readers.rehash(data,getargument("names") and "names" or "unicodes")
+ local savename = replacesuffix(lower(data.metadata.fullname or filename),"lua")
+ table.save(savename,data)
+ report("font: %a saved as %a",filename,savename)
+ else
+ report("font: %a not loaded",filename)
+ end
+ else
+ report("font: %a not saved",filename)
+ end
+ else
+ report("font: %a not found",name)
+ end
+ else
+ report("font: no name given")
+ end
+end
+
+
if getargument("names") then
setargument("reload",true)
setargument("simple",true)
@@ -464,6 +543,8 @@ elseif getargument("reload") then
scripts.fonts.reload()
elseif getargument("save") then
scripts.fonts.save()
+elseif getargument("convert") then
+ scripts.fonts.convert()
elseif getargument("justload") then
scripts.fonts.justload()
elseif getargument("unpack") then
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-interface.lua b/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
index 1640f0891fd..6a968d6b1b6 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
@@ -21,9 +21,7 @@ local helpinfo = [[
<flags>
<category name="basic">
<subcategory>
- <flag name="interfaces"><short>generate context interface files</short></flag>
- <flag name="messages"><short>generate context message files</short></flag>
- <flag name="labels"><short>generate context label files</short></flag>
+ <flag name="interfaces"><short>generate context mkii interface files</short></flag>
</subcategory>
<subcategory>
<flag name="context"><short>equals <ref name="interfaces"/> <ref name="messages"/> <ref name="languages"/></short></flag>
@@ -228,87 +226,232 @@ function flushers.textpad(collected)
end
end
+-- function scripts.interface.editor(editor,split,forcedinterfaces)
+-- local interfaces= forcedinterfaces or environment.files
+-- if #interfaces == 0 then
+-- interfaces= userinterfaces
+-- end
+-- local xmlfile = resolvers.findfile("cont-en.xml") or ""
+-- if xmlfile == "" then
+-- report("unable to locate cont-en.xml")
+-- end
+-- local collected = { }
+-- for i=1,#interfaces do
+-- local interface = interfaces[i]
+-- local keyfile = resolvers.findfile(format("keys-%s.xml",interface)) or ""
+-- if keyfile == "" then
+-- report("unable to locate keys-*.xml")
+-- else
+-- local commands = { }
+-- local mappings = { }
+-- local environments = { }
+-- local x = xml.load(keyfile)
+-- for e, d, k in xml.elements(x,"/cd:interface/cd:commands/cd:command") do -- somehow this was variable
+-- local at = d[k].at
+-- local name, value = at.name, at.value
+-- if name and value then
+-- mappings[name] = value
+-- end
+-- end
+-- local x = xml.load(xmlfile)
+-- for e, d, k in xml.elements(x,"/cd:interface/cd:command") do
+-- local at = d[k].at
+-- local name, type = at.name, at["type"]
+-- if name and name ~= "" then
+-- local remapped = mappings[name] or name
+-- if type == "environment" then
+-- if split then
+-- environments[#environments+1] = remapped
+-- else
+-- commands[#commands+1] = "start" .. remapped
+-- commands[#commands+1] = "stop" .. remapped
+-- end
+-- else
+-- commands[#commands+1] = remapped
+-- end
+-- end
+-- end
+-- if #commands > 0 then
+-- sort(commands)
+-- sort(environments)
+-- collected[interface] = {
+-- commands = commands,
+-- environments = environments,
+-- }
+-- end
+-- end
+-- end
+-- -- awaiting completion of the xml file
+-- local definitions = dofile(resolvers.findfile("mult-def.lua"))
+-- if definitions then
+-- local commands = { en = { } }
+-- for command, languages in next, definitions.commands do
+-- commands.en[languages.en or command] = true
+-- for language, command in next, languages do
+-- local c = commands[language]
+-- if c then
+-- c[command] = true
+-- else
+-- commands[language] = { [command] = true }
+-- end
+-- end
+-- end
+-- for language, data in next, commands do
+-- local fromlua = data
+-- local fromxml = collected[language].commands
+-- for i=1,#fromxml do
+-- local c = fromxml[i]
+-- if not fromlua[c] then
+-- -- print(language,c)
+-- fromlua[c] = true
+-- end
+-- end
+-- collected[language].commands = table.sortedkeys(fromlua)
+-- end
+-- end
+-- --
+-- flushers[editor](collected)
+-- end
+
+-- function scripts.interface.editor(editor,split,forcedinterfaces)
+-- local interfaces= forcedinterfaces or environment.files
+-- if #interfaces == 0 then
+-- interfaces= userinterfaces
+-- end
+-- --
+-- local filename = "context-en.xml"
+-- local xmlfile = resolvers.findfile(filename) or ""
+-- if xmlfile == "" then
+-- report("unable to locate %a",filename)
+-- return
+-- end
+-- local x = xml.load(xmlfile)
+-- --
+-- local filename = "mult-def.lua"
+-- local deffile = resolvers.findfile(filename) or ""
+-- if deffile == "" then
+-- report("unable to locate %a",filename)
+-- return
+-- end
+-- local interface = dofile(filename)
+-- if not interface or not next(interface) then
+-- report("invalid file %a",filename)
+-- return
+-- end
+-- local variables = interface.variables
+-- local constants = interface.constants
+-- local commands = interface.commands
+-- local elements = interface.elements
+-- local collected = { }
+-- for i=1,#interfaces do
+-- local interface = interfaces[i]
+-- local i_commands = { }
+-- local i_environments = { }
+-- local start = elements.start[interface] or elements.start.en
+-- local stop = elements.stop [interface] or elements.stop .en
+-- for e, d, k in xml.elements(x,"cd:interface/cd:command") do
+-- local at = d[k].at
+-- local name = at["name"] or ""
+-- local type = at["type"]
+-- if name ~= "" then
+-- local c = commands[name]
+-- local n = c and (c[interface] or c.en) or name
+-- if type ~= "environment" then
+-- i_commands[#i_commands+1] = n
+-- elseif split then
+-- i_environments[#i_environments+1] = n
+-- else
+-- -- variables ?
+-- i_commands[#i_commands+1] = start .. n
+-- i_commands[#i_commands+1] = stop .. n
+-- end
+-- end
+-- end
+-- if #i_commands > 0 then
+-- sort(i_commands)
+-- sort(i_environments)
+-- collected[interface] = {
+-- commands = i_commands,
+-- environments = i_environments,
+-- }
+-- end
+-- end
+-- --
+-- flushers[editor](collected)
+-- end
+
function scripts.interface.editor(editor,split,forcedinterfaces)
local interfaces= forcedinterfaces or environment.files
if #interfaces == 0 then
interfaces= userinterfaces
end
- local xmlfile = resolvers.findfile("cont-en.xml") or ""
+ --
+ local filename = "i-context.xml"
+ local xmlfile = resolvers.findfile(filename) or ""
if xmlfile == "" then
- report("unable to locate cont-en.xml")
+ report("unable to locate %a",filename)
+ return
+ end
+ --
+ local filename = "mult-def.lua"
+ local deffile = resolvers.findfile(filename) or ""
+ if deffile == "" then
+ report("unable to locate %a",filename)
+ return
end
+ local interface = dofile(deffile)
+ if not interface or not next(interface) then
+ report("invalid file %a",filename)
+ return
+ end
+ local variables = interface.variables
+ local constants = interface.constants
+ local commands = interface.commands
+ local elements = interface.elements
+ --
local collected = { }
- for i=1,#interfaces do
- local interface = interfaces[i]
- local keyfile = resolvers.findfile(format("keys-%s.xml",interface)) or ""
- if keyfile == "" then
- report("unable to locate keys-*.xml")
- else
- local commands = { }
- local mappings = { }
- local environments = { }
- local x = xml.load(keyfile)
- for e, d, k in xml.elements(x,"/cd:interface/cd:commands/cd:command") do -- somehow this was variable
- local at = d[k].at
- local name, value = at.name, at.value
- if name and value then
- mappings[name] = value
- end
- end
- local x = xml.load(xmlfile)
- for e, d, k in xml.elements(x,"/cd:interface/cd:command") do
- local at = d[k].at
- local name, type = at.name, at["type"]
- if name and name ~= "" then
- local remapped = mappings[name] or name
- if type == "environment" then
- if split then
- environments[#environments+1] = remapped
- else
- commands[#commands+1] = "start" .. remapped
- commands[#commands+1] = "stop" .. remapped
- end
- else
- commands[#commands+1] = remapped
- end
- end
- end
- if #commands > 0 then
- sort(commands)
- sort(environments)
- collected[interface] = {
- commands = commands,
- environments = environments,
- }
- end
+ --
+ local xmlroot = xml.load(xmlfile)
+ xml.include(xmlroot,"cd:interfacefile","filename",true,function(s)
+ local fullname = resolvers.findfile(s)
+ if fullname and fullname ~= "" then
+ return io.loaddata(fullname)
end
- end
- -- awaiting completion of the xml file
- local definitions = dofile(resolvers.findfile("mult-def.lua"))
- if definitions then
- local commands = { en = { } }
- for command, languages in next, definitions.commands do
- commands.en[languages.en or command] = true
- for language, command in next, languages do
- local c = commands[language]
- if c then
- c[command] = true
+ end)
+ --
+ for i=1,#interfaces do
+ local interface = interfaces[i]
+ local i_commands = { }
+ local i_environments = { }
+ local start = elements.start[interface] or elements.start.en
+ local stop = elements.stop [interface] or elements.stop .en
+ for e in xml.collected(xmlroot,"cd:interface/cd:command") do
+ local at = e.at
+ local name = at["name"] or ""
+ local type = at["type"]
+ if name ~= "" then
+ local c = commands[name]
+ local n = c and (c[interface] or c.en) or name
+ if at.generated == "yes" then
+ -- skip (for now)
+ elseif type ~= "environment" then
+ i_commands[#i_commands+1] = n
+ elseif split then
+ i_environments[#i_environments+1] = n
else
- commands[language] = { [command] = true }
+ -- variables ?
+ i_commands[#i_commands+1] = start .. n
+ i_commands[#i_commands+1] = stop .. n
end
end
end
- for language, data in next, commands do
- local fromlua = data
- local fromxml = collected[language].commands
- for i=1,#fromxml do
- local c = fromxml[i]
- if not fromlua[c] then
- -- print(language,c)
- fromlua[c] = true
- end
- end
- collected[language].commands = table.sortedkeys(fromlua)
+ if #i_commands > 0 then
+ sort(i_commands)
+ sort(i_environments)
+ collected[interface] = {
+ commands = i_commands,
+ environments = i_environments,
+ }
end
end
--
@@ -341,7 +484,7 @@ function scripts.interface.check()
end
end
-function scripts.interface.interfaces()
+function scripts.interface.mkii()
local filename = resolvers.findfile(environment.files[1] or "mult-def.lua") or ""
if filename ~= "" then
local interface = dofile(filename)
@@ -367,7 +510,7 @@ function scripts.interface.interfaces()
xmlresult[#xmlresult+1] = format("\t\t<cd:%s name='%s' value='%s'/>",tag,key,value)
end
end
- xmlresult[#xmlresult+1] = format("\t</cd:%s>\n",tag)
+ xmlresult[#xmlresult+1] = format("\t</cd:%s>\n",what)
end
local function replace(str, element, attribute, category, othercategory, language)
return str:gsub(format("(<%s[^>]-%s=)([\"\'])([^\"\']-)([\"\'])",element,attribute), function(a,b,c)
@@ -386,6 +529,7 @@ function scripts.interface.interfaces()
end
-- we could just replace attributes
for language, _ in next, commands.setuplayout do
+ -- keyword files
local texresult, xmlresult = { }, { }
texresult[#texresult+1] = format("%% this file is auto-generated, don't edit this file\n%%")
xmlresult[#xmlresult+1] = format("<?xml version='1.0'?>\n",tag)
@@ -402,9 +546,10 @@ function scripts.interface.interfaces()
report("saving interface definitions '%s'",texfilename)
io.savedata(xmlfilename,concat(xmlresult,"\n"))
report("saving interface translations '%s'",xmlfilename)
+ -- mkii files
if language ~= "en" and xmldata ~= "" then
local newdata = xmldata:gsub("(<cd:interface.*language=.)en(.)","%1"..language.."%2",1)
--- newdata = replace(newdata, 'cd:command', 'name', interface.commands, interface.elements, language)
+ -- newdata = replace(newdata, 'cd:command', 'name', interface.commands, interface.elements, language)
newdata = replace(newdata, 'cd:string', 'value', interface.commands, interface.elements, language)
newdata = replace(newdata, 'cd:variable' , 'value', interface.variables, nil, language)
newdata = replace(newdata, 'cd:parameter', 'name', interface.constants, nil, language)
@@ -415,6 +560,7 @@ function scripts.interface.interfaces()
io.savedata(xmlfilename,newdata)
report("saving interface specification '%s'",xmlfilename)
end
+ -- mkiv is generated otherwise
end
end
end
@@ -439,33 +585,6 @@ function scripts.interface.preprocess()
end
end
--- function scripts.interface.messages()
--- local filename = resolvers.findfile(environment.files[1] or "mult-mes.lua") or ""
--- if filename ~= "" then
--- local messages = dofile(filename)
--- report("messages for * loaded from '%s'",filename)
--- report()
--- for i=1,#messageinterfaces do
--- local interface = messageinterfaces[i]
--- local texresult = { }
--- for category, data in next, messages do
--- for tag, message in next, data do
--- if tag ~= "files" then
--- local msg = message[interface] or message["all"] or message["en"]
--- if msg then
--- texresult[#texresult+1] = format("\\setinterfacemessage{%s}{%s}{%s}",category,tag,msg)
--- end
--- end
--- end
--- end
--- texresult[#texresult+1] = format("%%\n\\endinput")
--- local interfacefile = format("mult-m%s.mkii",interface)
--- io.savedata(interfacefile,concat(texresult,"\n"))
--- report("messages for '%s' saved in '%s'",interface,interfacefile)
--- end
--- end
--- end
-
function scripts.interface.toutf()
local filename = environment.files[1]
if filename then
@@ -509,88 +628,10 @@ function scripts.interface.toutf()
end
end
--- function scripts.interface.labels()
--- require("char-def.lua")
--- require("lang-txt.lua")
--- local interfaces = require("mult-def.lua")
--- local variables = interfaces.variables
--- local contextnames = { }
--- for unicode, data in next, characters.data do
--- local contextname = data.contextname
--- if contextname then
--- contextnames[utfchar(unicode)] = "\\" .. contextname .. " "
--- end
--- end
--- contextnames["i"] = nil
--- contextnames["'"] = nil
--- contextnames["\\"] = nil
--- local function flush(f,kind,what,expand,namespace,prefix)
--- local whatdata = languages.data.labels[what]
--- f:write("\n")
--- f:write(format("%% %s => %s\n",what,kind))
--- for tag, data in table.sortedpairs(whatdata) do
--- if not data.hidden then
--- f:write("\n")
--- for language, text in table.sortedpairs(data.labels) do
--- if text ~= "" then
--- if expand then
--- text = utfgsub(text,".",contextnames)
--- text = gsub(text," ", "\ ")
--- end
--- if namespace and namespace[tag] then
--- tag = prefix .. tag
--- end
--- if find(text,",") then
--- text = "{" .. text .. "}"
--- end
--- if text == "" then
--- -- skip
--- else
--- if type(text) == "table" then
--- f:write(format("\\setup%stext[\\s!%s][%s={{%s},}]\n",kind,language,tag,text))
--- else
--- f:write(format("\\setup%stext[\\s!%s][%s={{%s},{%s}}]\n",kind,language,tag,text[1],text[2]))
--- end
--- end
--- end
--- end
--- end
--- end
--- end
--- function flushall(txtname,expand)
--- local f = io.open(txtname,"w")
--- if f then
--- report("saving '%s'",txtname)
--- f:write("% this file is auto-generated, don't edit this file\n")
--- flush(f,"head","titles",expand,variables,"\\v!")
--- flush(f,"label","texts",expand,variables,"\\v!")
--- flush(f,"mathlabel","functions",expand)
--- flush(f,"taglabel","tags",expand)
--- f:write("\n")
--- f:write("\\endinput\n")
--- f:close()
--- end
--- end
--- flushall("lang-txt.mkii",true)
--- flushall("lang-txt.mkiv",false)
--- end
-
local ea = environment.argument
-if ea("context") then
- scripts.interface.interfaces()
- -- scripts.interface.messages()
- -- scripts.interface.labels()
-elseif ea("interfaces") or ea("messages") or ea("labels") then
- if ea("interfaces") then
- scripts.interface.interfaces()
- end
- -- if ea("messages") then
- -- scripts.interface.messages()
- -- end
- -- if ea("labels") then
- -- scripts.interface.labels()
- -- end
+if ea("mkii") then
+ scripts.interface.mkii()
elseif ea("preprocess") then
scripts.interface.preprocess()
elseif ea("toutf") then
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-package.lua b/Master/texmf-dist/scripts/context/lua/mtx-package.lua
index 8c9e6b9fc85..23da30bf23f 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-package.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-package.lua
@@ -55,7 +55,7 @@ function scripts.package.merge_luatex_files(name)
collected[#collected+1] = format("-- parent file : %s\n",oldname)
collected[#collected+1] = format("-- merge date : %s\n",os.date())
-- loadmodule can have extra arguments
- for lib in gmatch(data,"loadmodule *%([\'\"](.-)[\'\"]") do
+ for lib in gmatch(data,"loadmodule *%([\'\"](.-)[\'\"]") do -- todo: not -- lines
if file.basename(lib) ~= file.basename(newname) then
local fullname = resolvers.findfile(lib) or ""
if fullname == "" then
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua b/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
index b7d41e2b26e..716fed281bc 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
@@ -105,7 +105,7 @@ scripts.patterns.list = {
-- { "gr", "hyph-el-polyton", "greek" },
{ "agr", "hyph-grc", "ancient greek", ignored_ancient_greek },
{ "gb", "hyph-en-gb", "british english" },
- { "us", "hyph-en-us", "american english" },
+ { "us", "hyph-en-us", "american english" },
-- { "eo", "hyph-eo", "esperanto" },
{ "es", "hyph-es", "spanish" },
{ "et", "hyph-et", "estonian" },
@@ -128,6 +128,7 @@ scripts.patterns.list = {
-- { "??", "hyph-kmr", "kurmanji" },
-- { "kn", "hyph-kn", "kannada" },
{ "la", "hyph-la", "latin" },
+ { "ala", "hyph-la-x-classic", "ancient latin" },
-- { "lo", "hyph-lo", "lao" },
{ "lt", "hyph-lt", "lithuanian" },
{ "lv", "hyph-lv", "latvian" },
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-plain.lua b/Master/texmf-dist/scripts/context/lua/mtx-plain.lua
index 1076572fcc3..949b57952f5 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-plain.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-plain.lua
@@ -49,13 +49,15 @@ scripts.plain = scripts.plain or { }
local function execute(...)
local command = string.format(...)
report("running command %a\n",command)
- os.execute(command)
+ return os.execute(command)
end
local function resultof(...)
local command = string.format(...)
report("running command %a",command)
- return string.strip(os.resultof(command) or "")
+ local result = os.resultof(command) or ""
+ result = string.gsub(result,"[\n\r]+","")
+ return result
end
function scripts.plain.make(texengine,texformat)
@@ -64,13 +66,13 @@ function scripts.plain.make(texengine,texformat)
local fmtpathspec = resultof("kpsewhich --var-value=TEXFORMATS --engine=%s",texengine)
if fmtpathspec ~= "" then
report("using path specification %a",fmtpathspec)
- fmtpathspec = resultof('kpsewhich -expand-braces="%s"',fmtpathspec)
+ fmtpathspec = resultof('kpsewhich --expand-braces="%s"',fmtpathspec)
end
if fmtpathspec ~= "" then
report("using path expansion %a",fmtpathspec)
else
report("no valid path reported, trying alternative")
- fmtpathspec = resultof("kpsewhich --show-path=fmt --engine=%s",texengine)
+-- fmtpathspec = resultof("kpsewhich --show-path=fmt --engine=%s",texengine)
if fmtpathspec ~= "" then
report("using path expansion %a",fmtpathspec)
else
@@ -91,6 +93,7 @@ function scripts.plain.make(texengine,texformat)
end
end
end
+-- local fmtpath = resultof("kpsewhich --expand-path $safe-out-name=$TEXFORMATS")
if not fmtpath or fmtpath == "" then
fmtpath = "."
else
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
index 0d0c28084f3..355694e2851 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
@@ -8,8 +8,9 @@ if not modules then modules = { } end modules ['mtx-profile'] = {
-- todo: also line number
-- todo: sort runtime as option
+-- todo: make it more efficient .. real old code
-local match, format, find = string.match, string.format, string.find
+local match, format, find, gsub = string.match, string.format, string.find, string.gsub
local helpinfo = [[
<?xml version="1.0"?>
@@ -57,7 +58,7 @@ function scripts.profiler.analyze(filename)
local totalruntime, totalcount, totalcalls = 0, 0, 0
for line in f:lines() do
if not find(line,"__index") and not find(line,"__newindex") then
- local stacklevel, filename, functionname, linenumber, currentline, localtime, totaltime = line:match("^(%d+)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)")
+ local stacklevel, filename, functionname, linenumber, currentline, localtime, totaltime = match(line,"^(%d+)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)\t(.-)")
if not filename then
-- next
elseif filename == "=[C]" then
@@ -65,7 +66,7 @@ function scripts.profiler.analyze(filename)
calls[functionname] = (calls[functionname] or 0) + 1
end
else
- local filename = filename:match("^@(.*)$")
+ local filename = match(filename,"^@(.*)$")
if filename then
local fi = times[filename]
if not fi then fi = { } times[filename] = fi end
@@ -90,7 +91,7 @@ function scripts.profiler.analyze(filename)
totalcount = totalcount + count
if totaltime > timethreshold or count > countthreshold then
totalruntime = totalruntime + totaltime
- local functionfile, somenumber = functionname:match("^@(.+):(.-)$")
+ local functionfile, somenumber = match(functionname,"^@(.+):(.-)$")
if functionfile then
local number = tonumber(somenumber)
if number then
@@ -98,13 +99,13 @@ function scripts.profiler.analyze(filename)
loaded[functionfile] = string.splitlines(io.loaddata(functionfile) or "")
end
functionname = loaded[functionfile][number] or functionname
- functionname = functionname:gsub("^%s*","")
- functionname = functionname:gsub("%s*%-%-.*$","")
+ functionname = gsub(functionname,"^%s*","")
+ functionname = gsub(functionname,"%s*%-%-.*$","")
functionname = number .. ": " .. functionname
end
end
filename = file.basename(filename)
- print(functiontemplate:format(filename,totaltime,count,functionname))
+ print(format(functiontemplate,filename,totaltime,count,functionname))
end
end
end
@@ -149,7 +150,7 @@ function scripts.profiler.x_analyze(filename)
end
f:close()
local noc = 0
-local criterium = 100
+ local criterium = 100
for name, n in next, calls do
if n > criterium then
if find(name,"^@@[a-z][a-z]") then
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
index d948c6e46d1..04217dab901 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
@@ -6,580 +6,561 @@ if not modules then modules = { } end modules ['mtx-server-ctx-help'] = {
license = "see context related readme files"
}
--- todo in lua interface: noargument, oneargument, twoarguments, threearguments
--- todo: pickup translations from mult file
+local gsub, find, lower, match = string.gsub, string.find, string.lower, string.match
+local concat, sort = table.concat, table.sort
dofile(resolvers.findfile("trac-lmx.lua","tex"))
+dofile(resolvers.findfile("util-sci.lua","tex"))
+dofile(resolvers.findfile("char-def.lua","tex"))
+dofile(resolvers.findfile("char-ini.lua","tex"))
+dofile(resolvers.findfile("char-utf.lua","tex"))
+
+local scite = utilities.scite
+local formatters = string.formatters
+local sortedkeys = table.sortedkeys
+local setmetatableindex = table.setmetatableindex
+local lowercase = characters.lower
+local uppercase = characters.upper
+local interfaces = dofile(resolvers.findfile("mult-def.lua","tex"))
+local i_setupstrings = interfaces.setupstrings
+local i_commands = interfaces.commands
+local i_variables = interfaces.variables
+local i_constants = interfaces.constants
+local i_elements = interfaces.elements
+local report = logs.reporter("ctx-help")
+local gettime = os.gettimeofday or os.clock
+
+local xmlcollected = xml.collected
+local xmlfirst = xml.first
+local xmltext = xml.text
+local xmlload = xml.load
+
+document = document or { }
+document.setups = document.setups or { }
+
+local usedsetupfile = resolvers.findfile("i-context.xml") or ""
+local usedsetuproot = usedsetupfile ~= "" and xmlload(usedsetupfile) or false
+local useddefinitions = { }
+
+if usedsetuproot then
+ report("main file loaded: %s",usedsetupfile)
+ xml.include(usedsetuproot,"cd:interfacefile","filename",true,function(s)
+ local fullname = resolvers.findfile(s)
+ if fullname and fullname ~= "" then
+ report("inclusion loaded: %s",fullname)
+ return io.loaddata(fullname)
+ end
+ end)
+else
+ report("no main file")
+ return false, false
+end
--- problem ... serialize parent stack
+local defaultinterface = "en"
-local format, match, gsub, find = string.format, string.match, string.gsub, string.find
-local concat = table.concat
+-- todo: store mode|interface in field but then we need post
-local report = logs.reporter("ctx-help")
+for e in xmlcollected(usedsetuproot,"cd:define") do
+ useddefinitions[e.at.name] = e
+end
--- -- -- make this a module: cont-xx.lua
+for e in xml.collected(usedsetuproot,"cd:interface/cd:interface") do
+ e.at.file = e.__f__ -- nicer
+end
-document = document or { }
-document.setups = document.setups or { }
+local f_divs_t = {
+ pe = formatters["<div dir='rtl' lang='arabic'>%s</div>"],
+}
-document.setups.div = {
- pe = "<div dir='rtl' lang='arabic'>%s</div>"
+local f_spans_t = {
+ pe = formatters["<span dir='rtl' lang='arabic'>%s</span>"]
}
-document.setups.span = {
- pe = "<span dir='rtl' lang='arabic'>%s</span>"
+local f_href_in_list_t = {
+ tex = formatters["<a class='setupmenuurl' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s'>%s</a>"],
+ lua = formatters["<a class='setupmenuurl' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s'>%s</a>"],
}
-document.setups.translations = document.setups.translations or {
-
- nl = {
- ["title"] = "setup",
- ["formula"] = "formule",
- ["number"] = "getal",
- ["list"] = "lijst",
- ["dimension"] = "maat",
- ["mark"] = "markering",
- ["reference"] = "verwijzing",
- ["command"] = "commando",
- ["file"] = "file",
- ["name"] = "naam",
- ["identifier"] = "naam",
- ["text"] = "tekst",
- ["section"] = "sectie",
- ["singular"] = "naam enkelvoud",
- ["plural"] = "naam meervoud",
- ["matrix"] = "n*m",
- ["see"] = "zie",
- ["inherits"] = "erft van",
- ["optional"] = "optioneel",
- ["displaymath"] = "formule",
- ["index"] = "ingang",
- ["math"] = "formule",
- ["nothing"] = "leeg",
- ["file"] = "file",
- ["position"] = "positie",
- ["reference"] = "verwijzing",
- ["csname"] = "naam",
- ["destination"] = "bestemming",
- ["triplet"] = "triplet",
- ["word"] = "woord",
- ["content"] = "tekst",
- },
-
- en = {
- ["title"] = "setup",
- ["formula"] = "formula",
- ["number"] = "number",
- ["list"] = "list",
- ["dimension"] = "dimension",
- ["mark"] = "mark",
- ["reference"] = "reference",
- ["command"] = "command",
- ["file"] = "file",
- ["name"] = "name",
- ["identifier"] = "identifier",
- ["text"] = "text",
- ["section"] = "section",
- ["singular"] = "singular name",
- ["plural"] = "plural name",
- ["matrix"] = "n*m",
- ["see"] = "see",
- ["inherits"] = "inherits from",
- ["optional"] = "optional",
- ["displaymath"] = "formula",
- ["index"] = "entry",
- ["math"] = "formula",
- ["nothing"] = "empty",
- ["file"] = "file",
- ["position"] = "position",
- ["reference"] = "reference",
- ["csname"] = "name",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "word",
- ["content"] = "text",
-
- ["noargument"] = "\\cs",
- ["oneargument"] = "\\cs#1{..}",
- ["twoarguments"] = "\\cs#1#2{..}{..}",
- ["threearguments"] = "\\cs#1#2#3{..}{..}{..}",
-
- },
-
- de = {
- ["title"] = "Setup",
- ["formula"] = "Formel",
- ["number"] = "Nummer",
- ["list"] = "Liste",
- ["dimension"] = "Dimension",
- ["mark"] = "Beschriftung",
- ["reference"] = "Referenz",
- ["command"] = "Befehl",
- ["file"] = "Datei",
- ["name"] = "Name",
- ["identifier"] = "Name",
- ["text"] = "Text",
- ["section"] = "Abschnitt",
- ["singular"] = "singular",
- ["plural"] = "plural",
- ["matrix"] = "n*m",
- ["see"] = "siehe",
- ["inherits"] = "inherits from",
- ["optional"] = "optioneel",
- ["displaymath"] = "formula",
- ["index"] = "entry",
- ["math"] = "formula",
- ["nothing"] = "empty",
- ["file"] = "file",
- ["position"] = "position",
- ["reference"] = "reference",
- ["csname"] = "name",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "word",
- ["content"] = "text",
- },
-
- cz = {
- ["title"] = "setup",
- ["formula"] = "rovnice",
- ["number"] = "cislo",
- ["list"] = "seznam",
- ["dimension"] = "dimenze",
- ["mark"] = "znacka",
- ["reference"] = "reference",
- ["command"] = "prikaz",
- ["file"] = "soubor",
- ["name"] = "jmeno",
- ["identifier"] = "jmeno",
- ["text"] = "text",
- ["section"] = "sekce",
- ["singular"] = "jmeno v singularu",
- ["plural"] = "jmeno v pluralu",
- ["matrix"] = "n*m",
- ["see"] = "viz",
- ["inherits"] = "inherits from",
- ["optional"] = "optioneel",
- ["displaymath"] = "formula",
- ["index"] = "entry",
- ["math"] = "formula",
- ["nothing"] = "empty",
- ["file"] = "file",
- ["position"] = "position",
- ["reference"] = "reference",
- ["csname"] = "name",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "word",
- ["content"] = "text",
- },
-
- it = {
- ["title"] = "setup",
- ["formula"] = "formula",
- ["number"] = "number",
- ["list"] = "list",
- ["dimension"] = "dimension",
- ["mark"] = "mark",
- ["reference"] = "reference",
- ["command"] = "command",
- ["file"] = "file",
- ["name"] = "name",
- ["identifier"] = "name",
- ["text"] = "text",
- ["section"] = "section",
- ["singular"] = "singular name",
- ["plural"] = "plural name",
- ["matrix"] = "n*m",
- ["see"] = "see",
- ["inherits"] = "inherits from",
- ["optional"] = "optioneel",
- ["displaymath"] = "formula",
- ["index"] = "entry",
- ["math"] = "formula",
- ["nothing"] = "empty",
- ["file"] = "file",
- ["position"] = "position",
- ["reference"] = "reference",
- ["csname"] = "name",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "word",
- ["content"] = "text",
- },
-
- ro = {
- ["title"] = "setari",
- ["formula"] = "formula",
- ["number"] = "numar",
- ["list"] = "lista",
- ["dimension"] = "dimensiune",
- ["mark"] = "marcaj",
- ["reference"] = "referinta",
- ["command"] = "comanda",
- ["file"] = "fisier",
- ["name"] = "nume",
- ["identifier"] = "nume",
- ["text"] = "text",
- ["section"] = "sectiune",
- ["singular"] = "nume singular",
- ["plural"] = "nume pluram",
- ["matrix"] = "n*m",
- ["see"] = "vezi",
- ["inherits"] = "inherits from",
- ["optional"] = "optioneel",
- ["displaymath"] = "formula",
- ["index"] = "entry",
- ["math"] = "formula",
- ["nothing"] = "empty",
- ["file"] = "file",
- ["position"] = "position",
- ["reference"] = "reference",
- ["csname"] = "name",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "word",
- ["content"] = "text",
- },
-
- fr = {
- ["title"] = "réglage",
- ["formula"] = "formule",
- ["number"] = "numéro",
- ["list"] = "liste",
- ["dimension"] = "dimension",
- ["mark"] = "marquage",
- ["reference"] = "reference",
- ["command"] = "commande",
- ["file"] = "fichier",
- ["name"] = "nom",
- ["identifier"] = "identificateur",
- ["text"] = "texte",
- ["section"] = "section",
- ["singular"] = "nom singulier",
- ["plural"] = "nom pluriel",
- ["matrix"] = "n*m",
- ["see"] = "vois",
- ["inherits"] = "herite de",
- ["optional"] = "optionel",
- ["displaymath"] = "formule",
- ["index"] = "entrée",
- ["math"] = "formule",
- ["nothing"] = "vide",
- ["file"] = "fichier",
- ["position"] = "position",
- ["reference"] = "réference",
- ["csname"] = "nom",
- ["destination"] = "destination",
- ["triplet"] = "triplet",
- ["word"] = "mot",
- ["content"] = "texte",
- }
+local f_href_in_list_i = {
+ tex = formatters["<a class='setupmenucmd' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s' id='#current'>%s</a>"],
+ lua = formatters["<a class='setupmenucmd' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s' id='#current'>%s</a>"],
+}
+
+local f_href_as_command_t = {
+ tex = formatters["<a class='setuplisturl' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s'>\\%s</a>"],
+ lua = formatters["<a class='setuplisturl' href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s'>context.%s</a>"],
+}
+local f_modes_t = {
+ tex = formatters["<a class='setupmodeurl' href='mtx-server-ctx-help.lua?interface=%s&mode=lua'>lua mode</a>"],
+ lua = formatters["<a class='setupmodeurl' href='mtx-server-ctx-help.lua?interface=%s&mode=tex'>tex mode</a>"],
}
-document.setups.formats = {
- open_command = {
- tex = [[\%s]],
- lua = [[context.%s (]],
- },
- close_command = {
- tex = [[]],
- lua = [[ )]],
- },
- connector = {
- tex = [[]],
- lua = [[, ]],
- },
- href_in_list = {
- tex = [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>%s</a>]],
- lua = [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>%s</a>]],
- },
- href_as_command = {
- tex = [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>\%s</a>]],
- lua = [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>context.%s</a>]],
- },
- modes = {
- tex = [[<a href='mtx-server-ctx-help.lua?mode=lua'>lua mode</a>]],
- lua = [[<a href='mtx-server-ctx-help.lua?mode=tex'>tex mode</a>]],
- },
- optional_single = {
- tex = "[optional string %s]",
- lua = "{optional string %s}",
- },
- optional_list = {
- tex = "[optional list %s]",
- lua = "{optional table %s}" ,
- } ,
- mandate_single = {
- tex = "[mandate string %s]",
- lua = "{mandate string %s}",
- },
- mandate_list = {
- tex = "[mandate list %s]",
- lua = "{mandate list %s}",
- },
- interface = [[<a href='mtx-server-ctx-help.lua?interface=%s&mode=%s'>%s</a>]],
- source = [[<a href='mtx-server-ctx-help.lua?source=%s&mode=%s'>%s</a>]],
- parameter = [[<tr><td width='15%%'>%s</td><td width='15%%'>%s</td><td width='70%%'>%s</td></tr>]],
- parameters = [[<table width='100%%'>%s</table>]],
- listing = [[<pre><t>%s</t></listing>]],
- special = [[<i>%s</i>]],
- default = [[<u>%s</u>]],
+local f_views_t = {
+ groups = formatters["<a class='setupviewurl' href='mtx-server-ctx-help.lua?interface=%s&view=names'>names</a>"],
+ names = formatters["<a class='setupviewurl' href='mtx-server-ctx-help.lua?interface=%s&view=groups'>groups</a>"],
}
-local function translate(tag,int,noformat)
- local t = document.setups.translations
- local te = t["en"]
- local ti = t[int] or te
+local f_interface = formatters["<a href='mtx-server-ctx-help.lua?interface=%s&command=%s&mode=%s'>%s</a>"]
+local f_source = formatters["<a href='mtx-server-ctx-help.lua?interface=%s&command=%s&source=%s&mode=%s'>%s</a>"]
+local f_keyword = formatters[" <tr>\n <td width='15%%'>%s</td>\n <td width='85%%' colspan='2'>%s</td>\n </tr>\n"]
+local f_parameter = formatters[" <tr>\n <td width='15%%'>%s</td>\n <td width='15%%'>%s</td>\n <td width='70%%'>%s</td>\n </tr>\n"]
+local f_url = formatters[" <tr>\n <td width='15%%'>%s</td>\n <td width='85%%' colspan='2'><i>%s</i>: %s</td>\n </tr>\n"]
+local f_parameters = formatters["\n<table width='100%%'>\n%s</table>\n"]
+local f_instance = formatters["<tt>%s</tt>"]
+local f_instances = formatters["\n<div class='setupinstances'><b>predefined instances</b>:&nbsp;%s</div>\n"]
+local f_listing = formatters["<pre><t>%s</t></pre>"]
+local f_special = formatters["<i>%s</i>"]
+local f_default = formatters["<u>%s</u>"]
+local f_group = formatters["<div class='setupmenugroup'>\n<div class='setupmenucategory'>%s</div>%s</div>"]
+
+-- replace('cd:string', 'value', i_commands, i_elements)
+-- replace('cd:variable' , 'value', i_variables)
+-- replace('cd:parameter', 'name', i_constants)
+-- replace('cd:constant', 'type', i_variables)
+-- replace('cd:constant', 'default', i_variables)
+-- replace('cd:variable', 'type', i_variables)
+-- replace('cd:inherit', 'name', i_commands, i_elements)
+
+local function translate(tag,interface,noformat) -- to be checked
+ local translation = i_setupstrings[tag]
+ local translated = translation and (translation[interface] or translation[interface]) or tag
if noformat then
- return ti[tag] or te[tag] or tag
+ return translated
else
- return format(document.setups.formats.special,ti[tag] or te[tag] or tag)
+ return f_special(translated)
end
end
-local function translated(e,int)
+local function translatedparameter(e,interface)
local attributes = e.at
local s = attributes.type or "?"
- local tag = match(s,"^cd:(.*)$")
- if attributes.default == "yes" then
- return format(document.setups.formats.default,tag or "?")
- elseif tag then
- return translate(tag,int)
+ if find(s,"^cd:") then
+ local t = i_setupstrings[s]
+ local f = t and (t[interface] or t.en) or s
+ return f
else
- return s
+ local t = i_variables[s]
+ local f = t and (t[interface] or t.en) or s
+ return f
end
end
-document.setups.loaded = document.setups.loaded or { }
-
-document.setups.current = { }
-document.setups.showsources = true
-document.setups.mode = "tex"
-
-function document.setups.load(filename)
- filename = resolvers.findfile(filename) or ""
- if filename ~= "" then
- local current = document.setups.loaded[filename]
- if not current then
- local loaded = xml.load(filename)
- if loaded then
- -- xml.inject(document.setups.root,"/",loaded)
- current = {
- file = filename,
- root = loaded,
- names = { },
- used = { },
- }
- document.setups.loaded[filename] = current
- end
+local function translatedkeyword(e,interface)
+ local attributes = e.at
+ local s = attributes.type or "?"
+ if find(s,"^cd:") then
+ local t = i_setupstrings[s]
+ local f = t and (t[interface] or t.en) or s
+ return f
+ else
+ local t = i_variables[s]
+ local f = t and (t[interface] or t.en) or s
+ if attributes.default == "yes" then
+ return f_default(f)
+ else
+ return f
end
- document.setups.current = current or { }
end
end
-function document.setups.name(ek)
- local at = ek.at
+local function translatedvariable(s,interface)
+ local t = i_variables[s]
+ return t and (t[interface] or t.en) or s
+end
+
+local function translatedconstant(s,interface) -- cache
+ local t = i_constants[s]
+ return t and (t[interface] or t.en) or s
+end
+
+local function translatedelement(s,interface) -- cache
+ local t = i_elements[s]
+ return t and (t[interface] or t.en) or s
+end
+
+local function translatedstring(s,interface) -- cache
+ local t = i_commands[s]
+ if t then
+ t = t[interface] or t.en
+ end
+ if t then
+ return t
+ end
+ t = i_elements[s]
+ return t and (t[interface] or t.en) or s
+end
+
+local function translatedcommand(s,interface) -- cache
+ local t = i_commands[s]
+ return t and (t[interface] or t.en) or s
+end
+
+local function makeidname(e)
+ local at = e.at
local name = at.name
if at.type == 'environment' then
- name = "start" .. name
+ name = name .. ":environment"
+ end
+ if at.generated == "yes" then
+ name = name .. ":generated"
end
if at.variant then
name = name .. ":" .. at.variant
end
- if at.generated == "yes" then
- name = name .. "*"
- end
- return name:lower()
+ return lower(name)
end
-function document.setups.csname(ek,int)
+local function makecsname(e,interface,prefix) -- stop ?
local cs = ""
- local at = ek.at or { }
- if at.type == 'environment' then
- cs = translate("start",int,true) .. cs
+ local at = e.at
+ local ok = false
+ local en = at.type == 'environment'
+ if prefix and en then
+ cs = translatedelement("start",interface)
end
- for e in xml.collected(ek,'cd:sequence/(cd:string|variable)') do
- if e.tg == "string" then
- cs = cs .. e.at.value
+ for f in xmlcollected(e,'cd:sequence/(cd:string|cd:variable)') do -- always at the start
+ local tag = f.tg
+ local val = f.at.value or ""
+ if tag == "string" then
+ cs = cs .. translatedstring(val,interface)
+ elseif tag == "variable" then
+ cs = cs .. f_special(translatedconstant("name",interface))
+ else -- can't happen
+ cs = cs .. val
+ end
+ ok = true
+ end
+ if not ok then
+ if en then
+ cs = cs .. translatedstring(at.name,interface)
else
- cs = cs .. e.at.value -- to be translated
+ cs = cs .. translatedcommand(at.name,interface)
end
end
return cs
end
-function document.setups.names()
- local current = document.setups.current
- local names = current.names
- if not names or #names == 0 then
- names = { }
- local name = document.setups.name
- local csname = document.setups.csname
- for e in xml.collected(current.root,'cd:command') do
- names[#names+1] = { e.at.name, csname(e,int) }
+local function getnames(root,interface)
+ local found = { }
+ local names = { }
+ local groups = { }
+ for e in xmlcollected(root,'cd:interface/cd:interface') do
+ local category = match(e.at.file or "","^i%-(.*)%.xml$")
+ local list = { }
+ for e in xmlcollected(e,'cd:command') do
+ local idname = makeidname(e)
+ local csname = makecsname(e,interface,true)
+ if not found[idname] then
+ local t = { idname, csname }
+ names[#names+1] = t
+ list[#list+1] = t
+ found[idname] = e
+ else
+ -- variant
+ end
+ end
+ if #list > 0 then
+ sort(list, function(a,b) return lower(a[2]) < lower(b[2]) end)
+ groups[#groups+1] = { category, list }
end
- table.sort(names, function(a,b) return a[2]:lower() < b[2]:lower() end)
- current.names = names
- end
- return names
-end
-function document.setups.show(name)
- local current = document.setups.current
- if current.root then
- local name = gsub(name,"[<>]","")
- local setup = xml.first(current.root,"cd:command[@name='" .. name .. "']")
- current.used[#current.used+1] = setup
- xml.sprint(setup)
end
+ sort(names, function(a,b) return lower(a[2]) < lower(b[2]) end)
+ sort(groups, function(a,b) return lower(a[1]) < lower(b[1]) end)
+ return names, groups, found
end
-function document.setups.showused()
- local current = document.setups.current
- if current.root and next(current.used) then
- local sorted = table.sortedkeys(current.used)
- for i=1,#sorted do
- xml.sprint(current.used[sorted[i]])
- end
- end
-end
-function document.setups.showall()
- local current = document.setups.current
- if current.root then
- local list = { }
- for e in xml.collected(current.root,"cd:command") do
- list[document.setups.name(e)] = e
+local loaded = setmetatableindex(function(loaded,interface)
+ local names, groups, found = getnames(usedsetuproot,interface)
+ local current = {
+ interface = interface,
+ root = usedsetuproot,
+ definitions = useddefinitions,
+ names = names,
+ groups = groups,
+ found = found,
+ }
+ loaded[interface] = current
+ return current
+end)
+
+local function collect(current,name,interface,lastmode)
+ local command = current.found[name]
+ if command then
+ local definitions = current.definitions
+ local attributes = command.at or { }
+ local generated = attributes.generated == "yes"
+ local environment = attributes.type == "environment"
+ local sequence = { }
+ local tags = { }
+ local arguments = { }
+ local parameters = { }
+ local instances = { }
+ local tag = ""
+ local category = attributes.category or ""
+ local source = attributes.file and f_source(lastinterface,lastcommand,attributes.file,lastmode,attributes.file) or ""
+
+ -- first pass: construct the top line
+
+ local start = environment and (attributes["begin"] or translatedelement("start",interface)) or ""
+ local stop = environment and (attributes["end"] or translatedelement("stop" ,interface)) or ""
+ local name = makecsname(command,interface) -- we can use the stored one
+ local valid = true
+ local texmode = lastmode == "tex"
+
+ local function process(e)
+ for e in xmlcollected(e,"/*") do
+ if not e.special then
+ local tag = e.tg
+ local attributes = e.at
+ if tag == "resolve" then
+ local resolved = definitions[e.at.name or ""]
+ if resolved then
+ process(resolved)
+ end
+ else
+ -- we need a 'lua' tag i.e. we only support a subset of string/table
+ local delimiters = attributes.delimiters or "brackets"
+ local optional = attributes.optional == "yes"
+ local list = attributes.list == "yes"
+ if texmode then
+ local okay
+ if tag == "keywords" then
+ -- todo = optional
+ okay = i_setupstrings["cd:" .. delimiters .. (list and "-l" or "-s")]
+ elseif tag == "assignments" then
+ -- todo = optional
+ okay = i_setupstrings["cd:assignment" .. delimiters .. (list and "-l" or "-s")]
+ elseif tag == "delimiter" then
+ tag = "\\" .. attributes.name
+ elseif tag == "string" then
+ tag = translatedstring(attributes.value,interface)
+ else
+ -- todo = optional
+ okay = i_setupstrings["cd:" .. tag .. (list and "-l" or "-s")]
+ or i_setupstrings["cd:" .. tag]
+ end
+ if okay then
+ tag = okay.en or tag
+ end
+ else
+ local okay
+ if tag == "keywords" then
+ -- todo = optional
+ okay = i_setupstrings["cd:" .. delimiters .. (list and "-l" or "-s")]
+ elseif tag == "assignments" then
+ -- todo = optional
+ okay = i_setupstrings["cd:assignment" .. delimiters .. (list and "-l" or "-s")]
+ elseif tag == "delimiter" then
+ okay = false
+ elseif tag == "string" then
+ okay = false
+ else
+ -- todo = optional
+ okay = i_setupstrings["cd:" .. tag .. (list and "-l" or "-s")]
+ or i_setupstrings["cd:" .. tag]
+ end
+ if okay then
+ local luatag = okay.lua
+ if luatag then
+ tag = luatag
+ else
+ tag = "unsupported"
+ valid = false
+ end
+ else
+ tag = "unsupported"
+ valid = false
+ end
+ end
+ if tag then
+ sequence[#sequence+1] = tag
+ tags[#tags+1] = tag
+ end
+ end
+ end
+ end
end
- local sorted = table.sortedkeys(list)
- for i=1,#sorted do
- xml.sprint(list[sorted[i]])
+
+ if start and start ~= "" then
+ if texmode then
+ sequence[#sequence+1] = formatters["\\%s%s"](start,name)
+ else
+ sequence[#sequence+1] = formatters["context.%s%s("](start,name)
+ end
+ else
+ if texmode then
+ sequence[#sequence+1] = formatters["\\%s"](name)
+ else
+ sequence[#sequence+1] = formatters["context.%s("](name)
+ end
end
- end
-end
-function document.setups.resolve(name)
- local current = document.setups.current
- if current.root then
- local e = xml.filter(current.root,format("cd:define[@name='%s']/text()",name))
- if e then
- xml.sprint(e)
+
+ for e in xmlcollected(command,"/cd:arguments") do
+ process(e)
end
- end
-end
-function document.setups.collect(name,int,lastmode)
- local current = document.setups.current
- local formats = document.setups.formats
- local command = xml.filter(current.root,format("cd:command[@name='%s']/first()",name))
- if command then
- local attributes = command.at or { }
- local data = {
- command = command,
- category = attributes.category or "",
- }
- if document.setups.showsources then
- data.source = (attributes.file and format(formats.source,attributes.file,lastmode,attributes.file)) or ""
+ if texmode then
+ if stop and stop ~= "" then
+ sequence[#sequence+1] = "\\" .. stop .. name
+ end
else
- data.source = attributes.file or ""
- end
- local n, sequence, tags = 0, { }, { }
- sequence[#sequence+1] = format(formats.open_command[lastmode],document.setups.csname(command,int))
- local arguments, tag = { }, ""
- for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
- n = n + 1
- local attributes = d[k].at
- if #sequence > 1 then
- local c = formats.connector[lastmode]
- if c ~= "" then
- sequence[#sequence+1] = c
- end
+ for i=2,#sequence-1 do
+ sequence[i] = sequence[i] .. ", "
end
- if attributes.optional == 'yes' then
- if attributes.list == 'yes' then
- tag = format(formats.optional_list[lastmode],n)
- else
- tag = format(formats.optional_single[lastmode],n)
- end
+
+ if stop and stop ~= "" then
+ sequence[#sequence+1] = formatters[") context.%s%s()"](stop,name)
else
- if attributes.list == 'yes' then
- tag = format(formats.mandate_list[lastmode],n)
- else
- tag = format(formats.mandate_single[lastmode],n)
- end
+ sequence[#sequence+1] = ")"
end
- sequence[#sequence+1] = tag
- tags[#tags+1] = tag
end
- sequence[#sequence+1] = formats.close_command[lastmode]
- data.sequence = concat(sequence, " ")
- local parameters, n = { }, 0
- for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
- n = n + 1
- if d[k].tg == "keywords" then
- local left = tags[n]
- local right = { }
- for r, d, k in xml.elements(d[k],"(cd:constant|cd:resolve)") do
- local tag = d[k].tg
+
+ if valid then
+
+ sequence = concat(sequence," ")
+
+ -- second pass: construct the descriptions
+
+ local n = 0
+
+ local function process(e)
+ for e in xmlcollected(e,"/*") do
+ local tag = e.tg
+
if tag == "resolve" then
- local name = d[k].at.name or ""
- if name ~= "" then
- local resolved = xml.filter(current.root,format("cd:define[@name='%s']",name))
- for r, d, k in xml.elements(resolved,"cd:constant") do
- right[#right+1] = translated(d[k],int)
+
+ local resolved = definitions[e.at.name or ""]
+ if resolved then
+ process(resolved)
+ end
+
+ elseif tag == "keywords" then
+
+ n = n + 1
+ local left = tags[n]
+ local right = { }
+
+ local function processkeyword(e)
+ right[#right+1] = translatedkeyword(e,interface)
+ end
+
+ for e in xmlcollected(e,"/*") do
+ if not e.special then
+ local tag = e.tg
+ if tag == "resolve" then
+ local resolved = definitions[e.at.name or ""]
+ if resolved then
+ processkeyword(resolved)
+ end
+ elseif tag == "constant" then
+ processkeyword(e)
+ else
+ right[#right+1] = "KEYWORD TODO"
+ end
end
end
- else
- right[#right+1] = translated(d[k],int)
- end
- end
- parameters[#parameters+1] = format(formats.parameter,left,"",concat(right, ", "))
- else
- local what = tags[n]
- for r, d, k in xml.elements(d[k],"(cd:parameter|cd:inherit)") do
- local tag = d[k].tg
- local left, right = d[k].at.name or "?", { }
- if tag == "inherit" then
- local name = d[k].at.name or "?"
- local url = format(document.setups.formats.href_as_command[lastmode],name,lastmode,name)
- if #parameters > 0 and not find(parameters[#parameters],"<br/>") then
- parameters[#parameters+1] = format(formats.parameter,"<br/>","","")
+ parameters[#parameters+1] = f_keyword(left,concat(right, ", "))
+
+ elseif tag == "assignments" then
+
+ n = n + 1
+ local what = tags[n]
+ local done = false
+
+ local function processparameter(e,right)
+ for e in xmlcollected(e,"/*") do
+ if not e.special then
+ local tag = e.tg
+ if tag == "resolve" then
+ local resolved = definitions[e.at.name or ""]
+ if resolved then
+ processparameter(resolved,right)
+ end
+ elseif tag == "constant" then
+ right[#right+1] = translatedparameter(e,interface)
+ else
+ right[#right+1] = "PARAMETER TODO"
+ end
+ end
+ end
end
- parameters[#parameters+1] = format(formats.parameter,what,format(formats.special,translate("inherits",int)),url)
- else
- for r, d, k in xml.elements(d[k],"(cd:constant|cd:resolve)") do
- local tag = d[k].tg
- if tag == "resolve" then
- local name = d[k].at.name or ""
- if name ~= "" then
- local resolved = xml.filter(current.root,format("cd:define[@name='%s']",name))
- for r, d, k in xml.elements(resolved,"cd:constant") do
- right[#right+1] = translated(d[k],int)
+
+ for e in xmlcollected(e,"/*") do
+ if not e.special then
+ local tag = e.tg
+ local left = translatedconstant(e.at.name,interface)
+ local right = { }
+ if tag == "resolve" then
+ local resolved = definitions[e.at.name or ""]
+ if resolved then
+ -- todo
+ process(resolved)
end
+ elseif tag == "inherit" then
+ local name = e.at.name or "?"
+ local url = f_href_as_command_t[lastmode](lastinterface,name,lastmode,name)
+ parameters[#parameters+1] = f_url(what,translate("cd:inherits",interface),url)
+ elseif tag == "parameter" then
+ processparameter(e,right)
+ parameters[#parameters+1] = f_parameter(what,left,concat(right, ", "))
+ else
+ parameters[#parameters+1] = "PARAMETER TODO"
+ end
+ if not done then
+ done = true
+ what = ""
end
- else
- right[#right+1] = translated(d[k],int)
end
end
- parameters[#parameters+1] = format(formats.parameter,what,left,concat(right, ", "))
+
+ what = ""
+ else
+
+ n = n + 1
+ local left = tags[n]
+ local right = i_setupstrings["cd:"..tag]
+
+ if right then
+ right = uppercase(right[interface] or right.en or tag)
+ end
+
+ parameters[#parameters+1] = f_keyword(left,right)
+
end
- what = ""
end
end
- parameters[#parameters+1] = format(formats.parameter,"<br/>","","")
+
+ for e in xmlcollected(command,"/cd:arguments") do
+ process(e)
+ end
+
+ else
+ if texmode then
+ sequence = formatters["unsupported command '%s%s'"](start or "",name)
+ else
+ sequence = formatters["unsupported function '%s%s'"](start or "",name)
+ end
+ parameters = { }
end
- data.parameters = parameters or { }
- data.mode = formats.modes[lastmode or "tex"]
- return data
- else
- return nil
- end
-end
--- -- --
-tex = tex or { }
+ for e in xmlcollected(command,"/cd:instances/cd:constant") do
+ instances[#instances+1] = f_instance(translatedconstant(e.at.value or "?",interface))
+ end
+
+ return {
+ category = category,
+ source = source,
+ mode = f_modes_t[lastmode or "tex"](lastinterface),
+ view = f_views_t[lastview or "groups"](lastinterface),
+ sequence = sequence,
+ parameters = parameters,
+ instances = instances,
+ }
+ end
+end
-- -- --
@@ -594,8 +575,6 @@ local interfaces = {
romanian = 'ro',
}
-local lastinterface, lastcommand, lastsource, lastmode = "en", "", "", "tex"
-
local variables = {
['color-background-main-left'] = '#3F3F3F',
['color-background-main-right'] = '#5F5F5F',
@@ -604,66 +583,85 @@ local variables = {
['title'] = 'ConTeXt Help Information',
}
---~ function lmx.loadedfile(filename)
---~ return io.loaddata(resolvers.findfile(filename)) -- return resolvers.texdatablob(filename)
---~ end
+local what = { "environment", "category", "source", "mode", "view" }
-local function doit(configuration,filename,hashed)
+local function generate(configuration,filename,hashed)
- local formats = document.setups.formats
-
- local start = os.clock()
- local detail = hashed.queries or { }
+ local start = gettime()
+ local detail = hashed.queries or { }
+ local variables = setmetatableindex({},variables)
if detail then
+ local lastinterface = detail.interface or defaultinterface or "en"
+ local lastcommand = detail.command or ""
+ local lastview = detail.view or "groups"
+ local lastsource = detail.source or ""
+ local lastmode = detail.mode or "tex"
+
+ local current = loaded[lastinterface]
- lastinterface = detail.interface or lastinterface
- lastcommand = detail.command or lastcommand
- lastsource = detail.source or lastsource
- lastmode = detail.mode or lastmode or "tex"
+ local title = variables.title .. ": " .. lastinterface
+ variables.title = title
lastcommand = gsub(lastcommand,"%s*^\\*(.+)%s*","%1")
- if lastinterface then
- report("checking interface: %s",lastinterface)
- document.setups.load(format("cont-%s.xml",lastinterface))
+ local f_div = f_divs_t[lastinterface]
+ ----- f_span = f_spans[lastinterface]
+
+ local names = current.names
+ local groups = current.groups
+ local refs = { }
+ local ints = { }
+
+ local function addnames(names)
+ local target = { }
+ for k=1,#names do
+ local namedata = names[k]
+ local command = namedata[1]
+ local text = namedata[2]
+ if command == lastcommand then
+ target[#target+1] = f_href_in_list_i[lastmode](lastinterface,command,lastmode,text)
+ else
+ target[#target+1] = f_href_in_list_t[lastmode](lastinterface,command,lastmode,text)
+ end
+ end
+ return concat(target,"<br/>\n")
end
- local div = document.setups.div [lastinterface]
- local span = document.setups.span[lastinterface]
-
- local names, refs, ints = document.setups.names(lastinterface), { }, { }
- for k=1,#names do
- local v = names[k]
- refs[k] = format(formats.href_in_list[lastmode],v[1],lastmode,v[2])
+ if lastview == "groups" then
+ local target = { }
+ for i=1,#groups do
+ local group = groups[i]
+ target[#target+1] = f_group(group[1],addnames(group[2]))
+ end
+ refs = concat(target,"<br/>\n")
+ else
+ refs = addnames(names)
end
+
if lastmode ~= "lua" then
- local sorted = table.sortedkeys(interfaces)
+ local sorted = sortedkeys(interfaces)
for k=1,#sorted do
local v = sorted[k]
- ints[k] = format(formats.interface,interfaces[v],lastmode,v)
+ ints[k] = f_interface(interfaces[v],lastcommand,lastmode,v)
end
end
- local n = concat(refs,"<br/>")
- local i = concat(ints,"<br/><br/>")
+ local n = refs
+ local i = concat(ints,"<br/><br/>\n")
- if div then
- variables.names = format(div,n)
- variables.interfaces = format(div,i)
+ if f_div then
+ variables.names = f_div(n)
+ variables.interfaces = f_div(i)
else
variables.names = n
variables.interfaces = i
end
- -- first we need to add information about mkii/mkiv
+ -- we only support mkiv
- variables.maintitle = "no definition"
- variables.maintext = ""
- variables.extra = ""
+ if lastsource and lastsource ~= "" then
- if document.setups.showsources and lastsource and lastsource ~= "" then
- -- todo: mkii, mkiv, tex (can be different)
local name = lastsource
local full = resolvers.findfile(name)
if full == "" and file.suffix(lastsource) == "tex" then
@@ -676,16 +674,21 @@ local function doit(configuration,filename,hashed)
end
if full == "" then
variables.maintitle = lastsource
- variables.maintext = format(formats.listing,"no source found")
+ variables.maintext = f_listing("no source found")
else
+ local data = io.loaddata(full)
+ data = scite.html(data,file.suffix(full),true)
variables.maintitle = name
- variables.maintext = format(formats.listing,io.loaddata(full))
+ variables.maintext = f_listing(data)
end
- lastsource = ""
+ lastsource = ""
+ variables.extra = "mode: " .. f_modes_t.tex(lastinterface) .. " " .. f_modes_t.lua(lastinterface)
+
elseif lastcommand and lastcommand ~= "" then
- local data = document.setups.collect(lastcommand,lastinterface,lastmode)
+
+ local data = collect(current,lastcommand,lastinterface,lastmode)
if data then
- local what, extra = { "environment", "category", "source", "mode" }, { }
+ local extra = { }
for k=1,#what do
local v = what[k]
if data[v] and data[v] ~= "" then
@@ -693,12 +696,19 @@ local function doit(configuration,filename,hashed)
extra[#extra+1] = v .. ": " .. data[v]
end
end
+ local instances = data.instances
variables.maintitle = data.sequence
- variables.maintext = format(formats.parameters,concat(data.parameters))
+ variables.maintext = f_parameters(concat(data.parameters)) .. (#instances > 0 and f_instances(concat(instances,",&nbsp;")) or "")
variables.extra = concat(extra,"&nbsp;&nbsp;&nbsp;")
else
- variables.maintext = "select command"
+ variables.maintitle = "no definition"
+ variables.maintext = ""
+ variables.extra = ""
end
+ else
+ variables.maintitle = "no definition"
+ variables.maintext = ""
+ variables.extra = ""
end
else
@@ -711,9 +721,9 @@ local function doit(configuration,filename,hashed)
local content = lmx.convert('context-help.lmx',false,variables)
- report("time spent on page: %0.03f seconds",os.clock()-start)
+ report("time spent on building page: %0.03f seconds",gettime()-start)
return { content = content }
end
-return doit, true
+return generate, true
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server.lua b/Master/texmf-dist/scripts/context/lua/mtx-server.lua
index dba07f1d584..448b20ac534 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server.lua
@@ -35,7 +35,15 @@ local application = logs.application {
helpinfo = helpinfo,
}
+local tonumber, tostring, loadfile, type = tonumber, tostring, loadfile, type
+local find, gsub = string.find, string.gsub
+local joinpath, filesuffix, dirname, is_qualified_path = file.join, file.suffix, file.dirname, file.is_qualified_path
+local loaddata = io.loaddata
+local P, C, patterns, lpegmatch = lpeg.P, lpeg.C, lpeg.patterns, lpeg.match
+local formatters = string.formatters
+local urlhashed, urlquery = url.hashed, url.query
local report = application.report
+local gettime = os.gettimeofday or os.clock
scripts = scripts or { }
scripts.webserver = scripts.webserver or { }
@@ -44,7 +52,6 @@ dofile(resolvers.findfile("luat-soc.lua","tex"))
local socket = socket or require("socket")
----- http = http or require("socket.http") -- not needed
-local format = string.format
-- The following two lists are taken from webrick (ruby) and
-- extended with a few extra suffixes.
@@ -154,10 +161,14 @@ local messages = {
[505] = 'HTTP Version Not Supported',
}
+local f_content_length = formatters["Content-Length: %s\r\n"]
+local f_content_type = formatters["Content-Type: %s\r\n"]
+local f_error_title = formatters["<head><title>%s %s</title></head><html><h2>%s %s</h2></html>"]
+
local handlers = { }
local function errormessage(client,configuration,n)
- local data = format("<head><title>%s %s</title></head><html><h2>%s %s</h2></html>",n,messages[n],n,messages[n])
+ local data = f_error_title(n,messages[n],n,messages[n])
report("handling error %s: %s",n,messages[n])
handlers.generic(client,configuration,data,nil,true)
end
@@ -166,42 +177,43 @@ local validpaths, registered = { }, { }
function scripts.webserver.registerpath(name)
if not registered[name] then
- local cleanname = string.gsub(name,"%.%.","deleted-parent")
- report("registering path '%s'",cleanname)
+ local cleanname = gsub(name,"%.%.","deleted-parent")
+ report("registering path: %s",cleanname)
validpaths[#validpaths+1] = cleanname
registered[name] = true
end
end
function handlers.generic(client,configuration,data,suffix,iscontent)
+ local name = data
if not iscontent then
- local name = data
- report("requested file '%s'",name)
- local fullname = file.join(configuration.root,name)
- data = io.loaddata(fullname) or ""
+ report("requested file: %s",name)
+ local fullname = joinpath(configuration.root,name)
+ data = loaddata(fullname) or ""
if data == "" then
for n=1,#validpaths do
- local fullname = file.join(validpaths[n],name)
- data = io.loaddata(fullname) or ""
+ local fullname = joinpath(validpaths[n],name)
+ data = loaddata(fullname) or ""
if data ~= "" then
- report("sending generic file '%s'",fullname)
+ report("sending generic file: %s",fullname)
break
end
end
else
- report("sending generic file '%s'",fullname)
+ report("sending generic file: %s",fullname)
end
end
if data and data ~= "" then
client:send("HTTP/1.1 200 OK\r\n")
client:send("Connection: close\r\n")
- client:send(format("Content-Length: %s\r\n",#data))
- client:send(format("Content-Type: %s\r\n",(suffix and mimetypes[suffix]) or "text/html"))
+ client:send(f_content_length(#data))
+ client:send(f_content_type(suffix and mimetypes[suffix] or "text/html"))
client:send("Cache-Control: no-cache, no-store, must-revalidate, max-age=0\r\n")
client:send("\r\n")
client:send(data)
client:send("\r\n")
else
+ report("unknown file: %s",tostring(name))
errormessage(client,configuration,404)
end
end
@@ -217,9 +229,9 @@ end
local loaded = { }
function handlers.lua(client,configuration,filename,suffix,iscontent,hashed) -- filename will disappear, and become hashed.filename
- local filename = file.join(configuration.scripts,filename)
- if not file.is_qualified_path(filename) then
- filename = file.join(configuration.root,filename)
+ local filename = joinpath(configuration.scripts,filename)
+ if not is_qualified_path(filename) then
+ filename = joinpath(configuration.root,filename)
end
-- todo: split url in components, see l-url; rather trivial
local result, keep = loaded[filename], false
@@ -258,16 +270,19 @@ function handlers.lua(client,configuration,filename,suffix,iscontent,hashed) --
local action = handlers[suffix] or handlers.generic
action(client,configuration,result.content,suffix,true) -- content
elseif result.filename then
- local suffix = file.suffix(result.filename) or "text/html"
+ local suffix = filesuffix(result.filename) or "text/html"
local action = handlers[suffix] or handlers.generic
action(client,configuration,result.filename,suffix,false) -- filename
else
+ report("no content of filename in result")
errormessage(client,configuration,404)
end
else
+ report("no valid result")
errormessage(client,configuration,500)
end
else
+ report("no result")
errormessage(client,configuration,404)
end
end
@@ -276,21 +291,21 @@ handlers.luc = handlers.lua
handlers.html = handlers.htm
local indices = { "index.htm", "index.html" }
-local portnumber = 31415 -- pi suits tex
+local portnumber = 8088
-local newline = lpeg.patterns.newline
-local spacer = lpeg.patterns.spacer
-local whitespace = lpeg.patterns.whitespace
-local method = lpeg.P("GET")
- + lpeg.P("POST")
+local newline = patterns.newline
+local spacer = patterns.spacer
+local whitespace = patterns.whitespace
+local method = P("GET")
+ + P("POST")
local identify = (1-method)^0
- * lpeg.C(method)
+ * C(method)
* spacer^1
- * lpeg.C((1-spacer)^1)
+ * C((1-spacer)^1)
* spacer^1
- * lpeg.P("HTTP/")
+ * P("HTTP/")
* (1-whitespace)^0
- * lpeg.C(lpeg.P(1)^0)
+ * C(P(1)^0)
function scripts.webserver.run(configuration)
-- check configuration
@@ -314,7 +329,7 @@ function scripts.webserver.run(configuration)
if not configuration.index then
for i=1,#indices do
local name = indices[i]
- if lfs.isfile(file.join(configuration.root,name)) then
+ if lfs.isfile(joinpath(configuration.root,name)) then
configuration.index = name -- we will prepend the rootpath later
break
end
@@ -322,7 +337,7 @@ function scripts.webserver.run(configuration)
configuration.index = configuration.index or "unknown"
end
if not configuration.scripts or configuration.scripts == "" then
- configuration.scripts = dir.expandname(file.join(configuration.root or ".",configuration.scripts or "."))
+ configuration.scripts = dir.expandname(joinpath(configuration.root or ".",configuration.scripts or "."))
end
-- so far for checks
report("running at port: %s",configuration.port)
@@ -333,20 +348,20 @@ function scripts.webserver.run(configuration)
local server = assert(socket.bind("*", configuration.port))
local script = configuration.script
while true do -- blocking
- local start = os.clock()
+ -- local start = gettime()
local client = server:accept()
client:settimeout(configuration.timeout or 60)
local request, e = client:receive()
if e then
- errormessage(client,configuration,404)
+ -- probably a time out
+ -- errormessage(client,configuration,404)
else
local from = client:getpeername()
report("request from: %s",tostring(from))
report("request data: %s",tostring(request))
- -- local fullurl = string.match(request,"(GET) (.+) HTTP/.*$") or "" -- todo: more clever / post
+ -- local fullurl = match(request,"(GET) (.+) HTTP/.*$") or "" -- todo: more clever / post
-- if fullurl == "" then
--- print("!!!!",request)
- local method, fullurl, body = lpeg.match(identify,request)
+ local method, fullurl, body = lpegmatch(identify,request)
if method == "" or fullurl == "" then
report("no url")
errormessage(client,configuration,404)
@@ -357,46 +372,50 @@ function scripts.webserver.run(configuration)
fullurl = url.unescapeget(fullurl)
report("requested url: %s",fullurl)
-- fullurl = socket.url.unescape(fullurl) -- happens later
- local hashed = url.hashed(fullurl)
- local query = url.query(hashed.query)
+ local hashed = urlhashed(fullurl)
+ local query = urlquery(hashed.query)
local filename = hashed.path -- hm, not query?
hashed.body = body
if script then
filename = script
report("forced script: %s",filename)
- local suffix = file.suffix(filename)
+ local suffix = filesuffix(filename)
local action = handlers[suffix] or handlers.generic
if action then
report("performing action: %s",filename)
action(client,configuration,filename,suffix,false,hashed) -- filename and no content
else
+ report("invalid action: %s",filename)
errormessage(client,configuration,404)
end
elseif filename then
- filename = socket.url.unescape(filename)
- report("requested action: %s",filename)
- if string.find(filename,"%.%.") then
+ local rawname = socket.url.unescape(filename)
+ filename = rawname
+ report("requested action: %s",filename or "?")
+ if find(filename,"%.%.") then
filename = nil -- invalid path
end
if filename == nil or filename == "" or filename == "/" then
filename = configuration.index
report("invalid filename, forcing: %s",filename)
end
- local suffix = file.suffix(filename)
+ local suffix = filesuffix(filename)
local action = handlers[suffix] or handlers.generic
if action then
- report("performing action: %s",filename)
+ report("performing action: %s",filename or "?")
action(client,configuration,filename,suffix,false,hashed) -- filename and no content
else
+ report("invalid action: %s",filename or "?")
errormessage(client,configuration,404)
end
else
+ report("invalid request")
errormessage(client,configuration,404)
end
end
end
client:close()
- report("time spent with client: %0.03f seconds",os.clock()-start)
+ -- report("time spent with client: %0.03f seconds",gettime()-start)
end
end
@@ -404,8 +423,8 @@ if environment.argument("auto") then
local path = resolvers.findfile("mtx-server.lua") or "."
scripts.webserver.run {
port = environment.argument("port"),
- root = environment.argument("root") or file.dirname(path) or ".",
- scripts = environment.argument("scripts") or file.dirname(path) or ".",
+ root = environment.argument("root") or dirname(path) or ".",
+ scripts = environment.argument("scripts") or dirname(path) or ".",
script = environment.argument("script"),
}
elseif environment.argument("start") then
@@ -422,4 +441,4 @@ else
application.help()
end
--- mtxrun --script server --start => http://localhost:31415/mtx-server-ctx-startup.lua
+-- mtxrun --script server --start => http://localhost:8088/mtx-server-ctx-startup.lua
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-unicode.lua b/Master/texmf-dist/scripts/context/lua/mtx-unicode.lua
new file mode 100644
index 00000000000..02dafda0c00
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/lua/mtx-unicode.lua
@@ -0,0 +1,525 @@
+if not modules then modules = { } end modules ['mtx-unicode'] = {
+ version = 1.002,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is very old code that I started writing in 2005 but occasionally
+-- extended. Don't use it yourself, it's just a sort of reference. The
+-- data that we use in ConTeXt is more extensive.
+--
+-- In my local tree I keep files in places like this:
+--
+-- e:/tex-context/tex/texmf-local/data/unicode/blocks.txt
+--
+-- last checked:
+--
+-- code freeze tl 2014 / unicode 7
+--
+-- todo:
+--
+-- specialcasing ?
+
+local helpinfo = [[
+<?xml version="1.0"?>
+<application>
+ <metadata>
+ <entry name="name">mtx-unicode</entry>
+ <entry name="detail">Checker for char-dat.lua</entry>
+ <entry name="version">1.02</entry>
+ </metadata>
+ <flags>
+ <category name="basic">
+ <subcategory>
+ <flag name="whatever"><short>do whatever</short></flag>
+ </subcategory>
+ </category>
+ </flags>
+</application>
+]]
+
+local application = logs.application {
+ name = "mtx-unicode",
+ banner = "Checker for char-def.lua 1.02",
+ helpinfo = helpinfo,
+}
+
+local gmatch, match, gsub, find, lower, format = string.gmatch, string.match, string.gsub, string.find, string.lower, string.format
+local concat = table.concat
+local split = string.split
+local are_equal = table.are_equal
+local tonumber = tonumber
+local lpegmatch = lpeg.match
+local formatters = string.formatters
+
+local report = application.report
+
+scripts = scripts or { }
+scripts.unicode = scripts.unicode or { }
+
+characters = characters or { }
+characters.data = characters.data or { }
+
+fonts = fonts or { }
+fonts.encodings = fonts.encodings or { }
+
+local textfiles = { }
+local textdata = { }
+
+local sparse = false
+
+local split_space_table = lpeg.tsplitat(" ")
+local split_space_two = lpeg.splitat (" ")
+local split_range_two = lpeg.splitat ("..")
+local split_colon_table = lpeg.tsplitat(lpeg.P(" ")^0 * lpeg.P(";") * lpeg.P(" ")^0)
+
+
+local skipped = {
+ [0x002C6] = true, -- MODIFIER LETTER CIRCUMFLEX ACCENT
+ [0x002C7] = true, -- CARON
+}
+
+for i=0x0FE00,0x0FE0F do skipped[i] = true end -- variant selector
+for i=0xE0100,0xE01EF do skipped[i] = true end -- variant selector extension
+
+function scripts.unicode.update()
+ local unicodedata = texttables.unicodedata
+ local bidimirroring = texttables.bidimirroring
+ local linebreak = texttables.linebreak
+ local eastasianwidth = texttables.eastasianwidth
+ local standardizedvariants = texttables.standardizedvariants
+ local arabicshaping = texttables.arabicshaping
+ local characterdata = characters.data
+ --
+ for unicode, ud in table.sortedpairs(unicodedata) do
+ if not skipped[unicode] then
+ local char = rawget(characterdata,unicode)
+ local description = ud[2] or formatters["UNICODE ENTRY %U"](unicode)
+ if not find(description,"^<") then
+ local ld = linebreak[unicode]
+ local bd = bidimirroring[unicode]
+ local ed = eastasianwidth[unicode]
+ local category = lower(ud[3] or "?")
+ local combining = tonumber(ud[4])
+ local direction = lower(ud[5] or "l") -- we could omit 'l' being the default
+ local linebreak = ld and lower(ld[2] or "xx")
+ local specials = ud[6] or ""
+ local cjkwd = ed and lower(ed[2] or "n")
+ local mirror = bd and tonumber(bd[2],16)
+ local arabic = nil
+ if sparse and direction == "l" then
+ direction = nil
+ end
+ if linebreak == "xx" then
+ linebreak = nil
+ end
+ if specials == "" then
+ specials = nil
+ else
+ specials = lpegmatch(split_space_table,specials) -- split(specials," ")
+ if tonumber(specials[1],16) then
+ for i=#specials,1,-1 do
+ specials[i+1] = tonumber(specials[i],16)
+ end
+ specials[1] = "char"
+ else
+ specials[1] = lower(gsub(specials[1],"[<>]",""))
+ for i=2,#specials do
+ specials[i] = tonumber(specials[i],16)
+ end
+ end
+ end
+ if cjkwd == "n" then
+ cjkwd = nil
+ end
+ local comment
+ if find(description,"MATHEMATICAL") then
+ comment = "check math properties"
+ end
+ -- there are more than arabic
+ local as = arabicshaping[unicode]
+ if as then
+ arabic = lower(as[3])
+ end
+ --
+ if not combining or combining == 0 then
+ combining = nil
+ end
+ if not char then
+ report("%U : adding entry %a",unicode,description)
+ char = {
+ -- adobename = ,
+ category = category,
+ comment = comment,
+ cjkwd = cjkwd,
+ description = description,
+ direction = direction,
+ mirror = mirror,
+ linebreak = linebreak,
+ unicodeslot = unicode,
+ specials = specials,
+ arabic = arabic,
+ combining = combining,
+ }
+ characterdata[unicode] = char
+ else
+ if direction then
+ if char.direction ~= direction then
+ report("%U : setting direction to %a, %a",unicode,direction,description)
+ char.direction = direction
+ end
+ else
+ if char.direction then
+ report("%U : resetting direction from %a, %a",unicode,char.direction,description)
+ char.direction = nil
+ end
+ end
+ if mirror then
+ if mirror ~= char.mirror then
+ report("%U : setting mirror to %a, %a",unicode,mirror,description)
+ char.mirror = mirror
+ end
+ else
+ if char.mirror then
+ report("%U : resetting mirror from %a, %a",unicode,char.mirror,description)
+ char.mirror = nil
+ end
+ end
+ if linebreak then
+ if linebreak ~= char.linebreak then
+ report("%U : setting linebreak to %a, %a",unicode,linebreak,description)
+ char.linebreak = linebreak
+ end
+ else
+ if char.linebreak then
+ report("%U : resetting linebreak from %a, %a",unicode,char.linebreak,description)
+ char.linebreak = nil
+ end
+ end
+ if cjkwd then
+ if cjkwd ~= char.cjkwd then
+ report("%U : setting cjkwd of to %a, %a",unicode,cjkwd,description)
+ char.cjkwd = cjkwd
+ end
+ else
+ if char.cjkwd then
+ report("%U : resetting cjkwd of from %a, %a",unicode,char.cjkwd,description)
+ char.cjkwd = nil
+ end
+ end
+ if arabic then
+ if arabic ~= char.arabic then
+ report("%U : setting arabic to %a, %a",unicode,arabic,description)
+ char.arabic = arabic
+ end
+ else
+ if char.arabic then
+ report("%U : resetting arabic from %a, %a",unicode,char.arabic,description)
+ char.arabic = nil
+ end
+ end
+ if combining then
+ if combining ~= char.combining then
+ report("%U : setting combining to %a, %a",unicode,combining,description)
+ char.combining = combining
+ end
+ else
+ if char.combining then
+ report("%U : resetting combining from %a, %a",unicode,char.combining,description)
+ end
+ end
+ if specials then
+ if not char.specials or not are_equal(specials,char.specials) then
+ local t = { specials[1] } for i=2,#specials do t[i] = formatters["%U"](specials[i]) end
+ report("%U : setting specials to % + t, %a",unicode,t,description)
+ char.specials = specials
+ end
+ else
+ local specials = char.specials
+ if specials then
+ local t = { } for i=2,#specials do t[i] = formatters["%U"](specials[i]) end
+ if false then
+ char.comment = nil
+ report("%U : resetting specials from % + t, %a",unicode,t,description)
+ else
+ local comment = char.comment
+ if not comment then
+ char.comment = "check special"
+ elseif not find(comment,"check special") then
+ char.comment = comment .. ", check special"
+ end
+ report("%U : check specials % + t, %a",unicode,t,description)
+ end
+ end
+ end
+ end
+ --
+ local visual = char.visual
+ if not visual and find(description,"MATH") then
+ if find(description,"BOLD ITALIC") then
+ visual = "bi"
+ elseif find(description,"ITALIC") then
+ visual = "it"
+ elseif find(description,"BOLD") then
+ visual = "bf"
+ end
+ if visual then
+ report("%U : setting visual to %a, %a",unicode,visual,description)
+ char.visual = visual
+ end
+ end
+ -- mathextensible
+ if category == "sm" or (category == "so" and char.mathclass) then
+ local mathextensible = char.mathextensible
+ if mathextensible then
+ -- already done
+ elseif find(description,"ABOVE") then
+ -- skip
+ elseif find(description,"ARROWHEAD") then
+ -- skip
+ elseif find(description,"HALFWIDTH") then
+ -- skip
+ elseif find(description,"ANGLE") then
+ -- skip
+ elseif find(description,"THROUGH") then
+ -- skip
+ elseif find(description,"ARROW") then
+ -- skip
+ local u = find(description,"UP")
+ local d = find(description,"DOWN")
+ local l = find(description,"LEFT")
+ local r = find(description,"RIGHT")
+ if find(description,"ARROWHEAD") then
+ -- skip
+ elseif find(description,"HALFWIDTH") then
+ -- skip
+ elseif u and d then
+ if l or r then
+ mathextensible = 'm' -- mixed
+ else
+ mathextensible = 'v' -- vertical
+ end
+ elseif u then
+ if l or r then
+ mathextensible = 'm' -- mixed
+ else
+ mathextensible = "u" -- up
+ end
+ elseif d then
+ if l or r then
+ mathextensible = 'm' -- mixed
+ else
+ mathextensible = "d" -- down
+ end
+ elseif l and r then
+ mathextensible = "h" -- horizontal
+ elseif r then
+ mathextensible = "r" -- right
+ elseif l then
+ mathextensible = "l" -- left
+ end
+ if mathextensible then
+ report("%U : setting mathextensible to %a, %a",unicode,mathextensible,description)
+ char.mathextensible = mathextensible
+ end
+ end
+ end
+ end
+ end
+ end
+ for i=1,#standardizedvariants do
+ local si = standardizedvariants[i]
+ local pair, addendum = si[1], string.strip(si[2])
+ local first, second = lpegmatch(split_space_two,pair) -- string.splitup(pair," ")
+ first = tonumber(first,16)
+ second = tonumber(second,16)
+ if first then
+ local d = characterdata[first]
+ if d then
+ local v = d.variants
+ if not v then
+ v = { }
+ d.variants = v
+ end
+ if not v[second] then
+ report("%U : adding variant %U as %s, %a",first,second,addendum,d.description)
+ v[second] = addendum
+ end
+ end
+ end
+ end
+end
+
+local preamble
+
+local function splitdefinition(str,index)
+ local l = string.splitlines(str)
+ local t = { }
+ if index then
+ for i=1,#l do
+ local s = gsub(l[i]," *#.*$","")
+ if s ~= "" then
+ local d = lpegmatch(split_colon_table,s) -- split(s,";")
+ local o = d[1]
+ local u = tonumber(o,16)
+ if u then
+ t[u] = d
+ else
+ -- local b, e = match(o,"^([^%.]+)%.%.([^%.]+)$")
+ local b, e = lpegmatch(split_range_two,o)
+ if b and e then
+ b = tonumber(b,16)
+ e = tonumber(e,16)
+ for k=b,e do
+ t[k] = d
+ end
+ else
+ report("problem: %s",s)
+ end
+ end
+ end
+ end
+ else
+ local n = 0
+ for i=1,#l do
+ local s = gsub(l[i]," *#.*$","")
+ if s ~= "" then
+ n = n + 1
+ t[n] = lpegmatch(split_colon_table,s) -- split(s,";")
+ end
+ end
+ end
+ return t
+end
+
+function scripts.unicode.load()
+ local fullname = resolvers.findfile("char-def.lua")
+ report("using: %s",fullname)
+ local data = io.loaddata(fullname)
+ if data then
+ loadstring(data)()
+ --
+ local fullname = resolvers.findfile("char-ini.lua")
+ report("using: %s",fullname)
+ dofile(fullname)
+ --
+ local fullname = resolvers.findfile("char-utf.lua")
+ report("using: %s",fullname)
+ dofile(fullname)
+ --
+ local fullname = resolvers.findfile("char-cjk.lua")
+ report("using: %s",fullname)
+ dofile(fullname)
+ --
+ preamble = data:gsub("characters%.data%s*=%s*%{.*","")
+ --
+ textfiles = {
+ unicodedata = resolvers.findfile("unicodedata.txt") or "",
+ bidimirroring = resolvers.findfile("bidimirroring.txt") or "",
+ linebreak = resolvers.findfile("linebreak.txt") or "",
+ eastasianwidth = resolvers.findfile("eastasianwidth.txt") or "",
+ standardizedvariants = resolvers.findfile("standardizedvariants.txt") or "",
+ arabicshaping = resolvers.findfile("arabicshaping.txt") or "",
+ }
+ --
+ textdata = {
+ unicodedata = textfiles.unicodedata ~= "" and io.loaddata(textfiles.unicodedata) or "",
+ bidimirroring = textfiles.bidimirroring ~= "" and io.loaddata(textfiles.bidimirroring) or "",
+ linebreak = textfiles.linebreak ~= "" and io.loaddata(textfiles.linebreak) or "",
+ eastasianwidth = textfiles.eastasianwidth ~= "" and io.loaddata(textfiles.eastasianwidth) or "",
+ standardizedvariants = textfiles.standardizedvariants ~= "" and io.loaddata(textfiles.standardizedvariants) or "",
+ arabicshaping = textfiles.arabicshaping ~= "" and io.loaddata(textfiles.arabicshaping) or "",
+ }
+ texttables = {
+ unicodedata = splitdefinition(textdata.unicodedata,true),
+ bidimirroring = splitdefinition(textdata.bidimirroring,true),
+ linebreak = splitdefinition(textdata.linebreak,true),
+ eastasianwidth = splitdefinition(textdata.eastasianwidth,true),
+ standardizedvariants = splitdefinition(textdata.standardizedvariants,false),
+ arabicshaping = splitdefinition(textdata.arabicshaping,true),
+ }
+ return true
+ else
+ preamble = nil
+ return false
+ end
+end
+
+function scripts.unicode.save(filename)
+ if preamble then
+ io.savedata(filename,preamble .. table.serialize(characters.data,"characters.data", { hexify = true, noquotes = true } ))
+ end
+end
+
+function scripts.unicode.extras() -- old code
+ --
+ -- 0000..007F; Basic Latin
+ -- 0080..00FF; Latin-1 Supplement
+ -- 0100..017F; Latin Extended-A
+ --
+ local fullname = resolvers.findfile("blocks.txt") or ""
+ if fullname ~= "" then
+ local data = io.loaddata(fullname)
+ local lines = string.splitlines(data)
+ local map = { }
+ local blocks = characters.blocks
+ local result = { }
+ for i=1,#lines do
+ local line = gsub(lines[i]," *#.*$","")
+ if line ~= "" then
+ local specification = lpegmatch(split_colon_table,line) -- split(s,";")
+ local range = specification[1]
+ local description = specification[2]
+ if range and description then
+ local start, stop = lpegmatch(split_range_two,range)
+ if start and stop then
+ local start = tonumber(start,16)
+ local stop = tonumber(stop,16)
+ local name = gsub(lower(description),"[^a-z]+","")
+ if start and stop then
+ local b = blocks[name]
+ if not b then
+ result[#result+1] = formatters[ [[+ block: ["%s"] = { first = 0x%05X, last = 0x%05X, description = "%S" }]] ](name,start,stop,description)
+ blocks[name] = { first = start, last = stop, description = description }
+ elseif b.first ~= start or b.last ~= stop or b.description ~= description then
+ result[#result+1] = formatters[ [[? block: ["%s"] = { first = 0x%05X, last = 0x%05X, description = "%S" }]] ](name,start,stop,description)
+ end
+ end
+ map[#map+1] = name
+ end
+ end
+ end
+ end
+ table.sort(result)
+ for i=1,#result do
+ report(result[i])
+ end
+ table.sort(map)
+ for i=1,#map do
+ local m = map[i]
+ if not blocks[m] then
+ report("obsolete block %a",m)
+ end
+ end
+ end
+end
+
+-- the action
+
+local filename = environment.files[1]
+
+if environment.arguments.exporthelp then
+ application.export(environment.arguments.exporthelp,filename)
+else
+ report("start working on %a, input char-def.lua",lfs.currentdir())
+ if scripts.unicode.load() then
+ scripts.unicode.update()
+ scripts.unicode.extras()
+ scripts.unicode.save("char-def-new.lua")
+ else
+ report("nothing to do")
+ end
+ report("stop working on %a, output char-def-new.lua\n",lfs.currentdir())
+end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-update.lua b/Master/texmf-dist/scripts/context/lua/mtx-update.lua
index daf4f5b16ef..8a23ba9a6f5 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-update.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-update.lua
@@ -42,6 +42,7 @@ local helpinfo = [[
<flag name="state"><short>update tree using saved state</short></flag>
<flag name="cygwin"><short>adapt drive specs to cygwin</short></flag>
<flag name="mingw"><short>assume mingw binaries being used</short></flag>
+ <flag name="silent"><short>less (or no) logging</short></flag>
</subcategory>
</category>
</flags>
@@ -84,10 +85,10 @@ scripts.update.texformats = {
"plain"
}
-scripts.update.mpformats = {
- -- "metafun",
- -- "mpost",
-}
+-- scripts.update.mpformats = {
+-- -- "metafun",
+-- -- "mpost",
+-- }
-- experimental is not functional at the moment
@@ -280,6 +281,8 @@ function scripts.update.synchronize()
local fonts = states.get("fonts") -- fonts (experimental or special)
local goodies = states.get("goodies") -- goodies (like editors)
local force = environment.argument("force")
+ local silent = environment.argument("silent") and "--silent" or ""
+ local quiet = silent == "" and "" or "--quiet"
bin = gsub(bin,"\\","/")
@@ -517,9 +520,9 @@ function scripts.update.synchronize()
resolvers.load_tree(texroot) -- else we operate in the wrong tree
-- update filename database for pdftex/xetex
- scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot))
+ scripts.update.run(format('mtxrun --tree="%s" %s --direct --resolve mktexlsr %s',texroot,silent,quiet))
-- update filename database for luatex
- scripts.update.run(format('mtxrun --tree="%s" --generate',texroot))
+ scripts.update.run(format('mtxrun --tree="%s" %s --generate',texroot,silent))
report("update, done")
end
@@ -538,6 +541,8 @@ function scripts.update.make()
report("make, start")
local force = environment.argument("force")
+ local silent = environment.argument("silent") and "--silent" or ""
+ local quiet = silent == "" and "" or "--quiet"
local texroot = scripts.update.fullpath(states.get("paths.root"))
local engines = states.get('engines')
local goodies = states.get('goodies')
@@ -546,43 +551,44 @@ function scripts.update.make()
resolvers.load_tree(texroot)
- scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot))
- scripts.update.run(format('mtxrun --tree="%s" --generate',texroot))
+ scripts.update.run(format('mtxrun --tree="%s" %s --direct --resolve mktexlsr %s',texroot,silent,quiet))
+ scripts.update.run(format('mtxrun --tree="%s" %s --generate',texroot,silent))
local askedformats = formats
local texformats = table.tohash(scripts.update.texformats)
- local mpformats = table.tohash(scripts.update.mpformats)
+ -- local mpformats = table.tohash(scripts.update.mpformats)
for k,v in table.sortedhash(texformats) do
if not askedformats[k] then
texformats[k] = nil
end
end
- for k,v in table.sortedhash(mpformats) do
- if not askedformats[k] then
- mpformats[k] = nil
- end
- end
+ -- for k,v in table.sortedhash(mpformats) do
+ -- if not askedformats[k] then
+ -- mpformats[k] = nil
+ -- end
+ -- end
local formatlist = concat(table.fromhash(texformats), " ")
if formatlist ~= "" then
for engine in table.sortedhash(engines) do
if engine == "luatex" or engine == "luajittex" then
- scripts.update.run(format('mtxrun --tree="%s" --script context --autogenerate --make',texroot))
- scripts.update.run(format('mtxrun --tree="%s" --script context --autogenerate --make --engine=luajittex',texroot))
+ scripts.update.run(format('mtxrun --tree="%s" %s --script context --autogenerate --make %s',texroot,silent,silent))
+ scripts.update.run(format('mtxrun --tree="%s" %s --script context --autogenerate --make --engine=luajittex %s',texroot,silent,silent))
else
- scripts.update.run(format('mtxrun --tree="%s" --script texexec --make --all --%s %s',texroot,engine,formatlist))
+ -- scripts.update.run(format('mtxrun --tree="%s" %s --script texexec --make --all %s --%s %s',texroot,silent,silent,engine,formatlist))
+ scripts.update.run(format('mtxrun --tree="%s" --resolve %s --script context --resolve --make %s --engine=%s %s',texroot,silent,silent,engine,formatlist))
end
end
end
- local formatlist = concat(table.fromhash(mpformats), " ")
- if formatlist ~= "" then
- scripts.update.run(format('mtxrun --tree="%s" --script texexec --make --all %s',texroot,formatlist))
- end
+ -- local formatlist = concat(table.fromhash(mpformats), " ")
+ -- if formatlist ~= "" then
+ -- scripts.update.run(format('mtxrun --tree="%s" %s --script texexec --make --all %s %s',texroot,silent,silent,formatlist))
+ -- end
if not force then
report("make, use --force to really make formats")
end
- scripts.update.run(format('mtxrun --tree="%s" --direct --resolve mktexlsr',texroot)) -- needed for mpost
- scripts.update.run(format('mtxrun --tree="%s" --generate',texroot))
+ -- scripts.update.run(format('mtxrun --tree="%s" %s --direct --resolve mktexlsr',texroot,silent)) -- needed for mpost
+ scripts.update.run(format('mtxrun --tree="%s" %s --generate',texroot,silent))
report("make, done")
end
@@ -649,14 +655,14 @@ if scripts.savestate then
for r in gmatch(environment.argument("formats") or "","([^, ]+)") do
if valid[r] then states.set("formats." .. r, true) end
end
- local valid = table.tohash(scripts.update.mpformats)
- for r in gmatch(environment.argument("formats") or "","([^, ]+)") do
- if valid[r] then states.set("formats." .. r, true) end
- end
+ -- local valid = table.tohash(scripts.update.mpformats)
+ -- for r in gmatch(environment.argument("formats") or "","([^, ]+)") do
+ -- if valid[r] then states.set("formats." .. r, true) end
+ -- end
states.set("formats.cont-en", true)
states.set("formats.cont-nl", true)
- states.set("formats.metafun", true)
+ -- states.set("formats.metafun", true)
for r in gmatch(environment.argument("extras") or "","([^, ]+)") do -- for old times sake
if r ~= "all" and not find(r,"^[a-z]%-") then
diff --git a/Master/texmf-dist/scripts/context/lua/mtxlibs.lua b/Master/texmf-dist/scripts/context/lua/mtxlibs.lua
index ae9d70108a1..6eee507ae59 100644
--- a/Master/texmf-dist/scripts/context/lua/mtxlibs.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtxlibs.lua
@@ -88,6 +88,8 @@ local ownlibs = {
"util-str.lua",
"util-tab.lua",
+ "util-fil.lua",
+ "util-sac.lua",
"util-sto.lua",
-- "util-lua.lua", -- no need for compiling
"util-prs.lua",
@@ -120,13 +122,19 @@ local ownlist = {
'.',
ownpath ,
ownpath .. "/../sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
- owntree .. "/../../texmf-dist/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
owntree .. "/../../../texmf-local/tex/context/base",
owntree .. "/../../../texmf-context/tex/context/base",
- owntree .. "/../../../texmf-dist/tex/context/base",
owntree .. "/../../../texmf/tex/context/base",
}
diff --git a/Master/texmf-dist/scripts/context/lua/mtxrun.lua b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
index 5c09b3b44ff..6a4babe9961 100755
--- a/Master/texmf-dist/scripts/context/lua/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 3888, stripped down to: 2197
+-- original size: 4734, stripped down to: 2626
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -65,10 +65,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -111,21 +115,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -154,7 +170,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10587, stripped down to: 7815
+-- original size: 10949, stripped down to: 8037
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -444,7 +460,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36977, stripped down to: 20349
+-- original size: 38185, stripped down to: 20990
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -461,7 +477,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -481,7 +497,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -1248,7 +1264,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 361, stripped down to: 322
+-- original size: 372, stripped down to: 329
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1267,7 +1283,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5694, stripped down to: 2827
+-- original size: 5983, stripped down to: 2959
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1354,9 +1370,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1372,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 35724, stripped down to: 21525
+-- original size: 36997, stripped down to: 22376
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -2248,7 +2265,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2348,7 +2365,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 8643, stripped down to: 6232
+-- original size: 9001, stripped down to: 6512
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2663,7 +2680,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 4939, stripped down to: 2830
+-- original size: 5146, stripped down to: 2933
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2808,7 +2825,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 1923, stripped down to: 1133
+-- original size: 2010, stripped down to: 1186
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2881,7 +2898,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15832, stripped down to: 9456
+-- original size: 16390, stripped down to: 9734
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3263,7 +3280,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 20949, stripped down to: 9945
+-- original size: 21647, stripped down to: 10237
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3643,7 +3660,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1211, stripped down to: 1002
+-- original size: 1265, stripped down to: 1038
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3697,7 +3714,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3248, stripped down to: 2266
+-- original size: 3355, stripped down to: 2321
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3785,7 +3802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12531, stripped down to: 5721
+-- original size: 12897, stripped down to: 5882
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4002,7 +4019,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 16765, stripped down to: 11003
+-- original size: 17358, stripped down to: 11378
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4467,7 +4484,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1850, stripped down to: 1568
+-- original size: 1919, stripped down to: 1621
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4539,7 +4556,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37388, stripped down to: 15817
+-- original size: 38699, stripped down to: 16321
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4768,9 +4785,10 @@ if not utf.sub then
end
end
end
-function utf.remapper(mapping,option)
+function utf.remapper(mapping,option,action)
local variant=type(mapping)
if variant=="table" then
+ action=action or mapping
if option=="dynamic" then
local pattern=false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
@@ -4779,15 +4797,15 @@ function utf.remapper(mapping,option)
return ""
else
if not pattern then
- pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option=="pattern" then
- return Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
else
- local pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
return function(str)
if not str or str=="" then
return ""
@@ -5157,7 +5175,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 974, stripped down to: 890
+-- original size: 1012, stripped down to: 912
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5197,7 +5215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34513, stripped down to: 18943
+-- original size: 36053, stripped down to: 19685
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5368,7 +5386,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -5885,7 +5909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 25338, stripped down to: 16247
+-- original size: 28680, stripped down to: 18636
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -6314,19 +6338,21 @@ local f_val_str=formatters["%w%q,"]
local f_val_boo=formatters["%w%l,"]
local f_val_not=formatters["%w{},"]
local f_val_seq=formatters["%w{ %, t },"]
+local f_fin_seq=formatters[" %, t }"]
local f_table_return=formatters["return {"]
local f_table_name=formatters["%s={"]
local f_table_direct=formatters["{"]
local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
-local serialize=table.serialize
-function table.serialize(root,name,specification)
+local original_serialize=table.serialize
+local function serialize(root,name,specification)
if type(specification)=="table" then
- return serialize(root,name,specification)
+ return original_serialize(root,name,specification)
end
- local t
+ local t
local n=1
+ local unknown=false
local function simple_table(t)
local nt=#t
if nt>0 then
@@ -6337,6 +6363,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero=t[0]
if n==nt then
local tt={}
for i=1,nt do
@@ -6353,6 +6380,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ tt[i+1]=v
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
end
end
return nil
@@ -6401,7 +6445,7 @@ function table.serialize(root,name,specification)
elseif tv=="string" then
n=n+1 t[n]=f_val_str(depth,v)
elseif tv=="table" then
- if next(v)==nil then
+ if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
local st=simple_table(v)
@@ -6413,6 +6457,8 @@ function table.serialize(root,name,specification)
end
elseif tv=="boolean" then
n=n+1 t[n]=f_val_boo(depth,v)
+ elseif unknown then
+ n=n+1 t[n]=f_val_str(depth,tostring(v))
end
elseif tv=="number" then
if tk=="number" then
@@ -6421,6 +6467,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_num(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_num(depth,tostring(k),v)
end
elseif tv=="string" then
if tk=="number" then
@@ -6429,6 +6477,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_str(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),v)
end
elseif tv=="table" then
if next(v)==nil then
@@ -6438,6 +6488,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,k)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
local st=simple_table(v)
@@ -6449,6 +6501,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_seq(depth,k,st)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv=="boolean" then
@@ -6458,6 +6512,18 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_boo(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk=="number" then
+ n=n+1 t[n]=f_key_num_value_str(depth,k,tostring(v))
+ elseif tk=="string" then
+ n=n+1 t[n]=f_key_str_value_str(depth,k,tostring(v))
+ elseif tk=="boolean" then
+ n=n+1 t[n]=f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -6490,13 +6556,351 @@ function table.serialize(root,name,specification)
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- do_serialize(root,name,1,0)
+ local st=simple_table(root)
+ if st then
+ return t[1]..f_fin_seq(st)
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n=n+1
t[n]=f_table_finish()
return concat(t,"\n")
end
+table.serialize=serialize
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-fil"] = package.loaded["util-fil"] or true
+
+-- original size: 3577, stripped down to: 2870
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4264, stripped down to: 3349
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -6505,7 +6909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4172, stripped down to: 2953
+-- original size: 4100, stripped down to: 2852
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -6583,39 +6987,32 @@ local f_index={
["table"]=f_table,
["number"]=f_number,
}
-local t_index={
- ["empty"]={ __index=f_empty },
- ["self"]={ __index=f_self },
- ["table"]={ __index=f_table },
- ["number"]={ __index=f_number },
-}
function table.setmetatableindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__index=f_index[f] or f
+ m.__index=i
else
- setmetatable(t,t_index[f] or { __index=f })
+ setmetatable(t,{ __index=i })
end
return t
end
local f_index={
["ignore"]=f_ignore,
}
-local t_index={
- ["ignore"]={ __newindex=f_ignore },
-}
function table.setmetatablenewindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__newindex=f_index[f] or f
+ m.__newindex=i
else
- setmetatable(t,t_index[f] or { __newindex=f })
+ setmetatable(t,{ __newindex=i })
end
return t
end
@@ -6652,7 +7049,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 21780, stripped down to: 15121
+-- original size: 22839, stripped down to: 15769
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -6676,6 +7073,8 @@ local setmetatableindex=table.setmetatableindex
local sortedhash=table.sortedhash
local sortedkeys=table.sortedkeys
local tohash=table.tohash
+local hashes={}
+utilities.parsers.hashes=hashes
local digit=R("09")
local space=P(' ')
local equal=P("=")
@@ -6894,9 +7293,15 @@ function parsers.array_to_string(a,separator)
end
end
local pattern=Cf(Ct("")*Cg(C((1-S(", "))^1)*S(", ")^0*Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or {}
end
+hashes.settings_to_set=table.setmetatableindex(function(t,k)
+ local v=k and lpegmatch(pattern,k) or {}
+ t[k]=v
+ return v
+end)
+getmetatable(hashes.settings_to_set).__mode="kv"
function parsers.simple_hash_to_string(h,separator)
local t,tn={},0
for k,v in sortedhash(h) do
@@ -7173,7 +7578,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2274, stripped down to: 1781
+-- original size: 2350, stripped down to: 1847
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7254,7 +7659,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12482, stripped down to: 8864
+-- original size: 12862, stripped down to: 9104
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7567,7 +7972,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 29359, stripped down to: 20483
+-- original size: 30767, stripped down to: 21355
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -7610,6 +8015,9 @@ 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
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0)
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -7627,6 +8035,8 @@ if tex and (tex.jobname or tex.formatname) then
elseif target=="term" then
texio_write_nl("term","")
io_write(...)
+ elseif type(target)=="number" then
+ texio_write_nl(target,...)
elseif target~="none" then
texio_write_nl("log",target,...)
texio_write_nl("term","")
@@ -7644,6 +8054,8 @@ if tex and (tex.jobname or tex.formatname) then
texio_write("log",...)
elseif target=="term" then
io_write(...)
+ elseif type(target)=="number" then
+ texio_write(target,...)
elseif target~="none" then
texio_write("log",target,...)
io_write(target,...)
@@ -7714,7 +8126,7 @@ if tex and (tex.jobname or tex.formatname) then
write_nl(target,"\n")
end
report=function(a,b,c,...)
- if c then
+ 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]))
@@ -7725,7 +8137,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
direct=function(a,b,c,...)
- if c then
+ if c~=nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -7736,7 +8148,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subreport=function(a,s,b,c,...)
- if c then
+ 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]))
@@ -7747,7 +8159,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subdirect=function(a,s,b,c,...)
- if c then
+ 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])
@@ -7758,7 +8170,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
status=function(a,b,c,...)
- if c then
+ 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]))
@@ -8056,7 +8468,7 @@ function logs.messenger(category,subcategory)
end
end
end
-local function setblocked(category,value)
+local function setblocked(category,value)
if category==true then
category,value="*",true
elseif category==false then
@@ -8071,7 +8483,7 @@ local function setblocked(category,value)
end
else
states=utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c,_ in next,states do
+ for c in next,states do
local v=data[c]
if v then
v.state=value
@@ -8353,7 +8765,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6704, stripped down to: 5343
+-- original size: 6917, stripped down to: 5484
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8474,13 +8886,13 @@ function statistics.show()
end
end
register("lua properties",function()
- local list=status.list()
- local hashchar=tonumber(list.luatex_hashchars)
+ local hashchar=tonumber(status.luatex_hashchars)
+ local hashtype=status.luatex_hashtype
local mask=lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask=="utf" and "τεχ" or "tex")
@@ -8534,7 +8946,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 5829, stripped down to: 3501
+-- original size: 6039, stripped down to: 3616
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -8681,7 +9093,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 4982, stripped down to: 3511
+-- original size: 5142, stripped down to: 3611
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -8811,7 +9223,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 3898, stripped down to: 2644
+-- original size: 4030, stripped down to: 2718
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -8915,7 +9327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7757, stripped down to: 6015
+-- original size: 7985, stripped down to: 6153
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9092,7 +9504,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
--- original size: 7100, stripped down to: 3978
+-- original size: 7313, stripped down to: 4076
if not modules then modules={} end modules ['util-tpl']={
version=1.001,
@@ -9237,7 +9649,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8022, stripped down to: 5038
+-- original size: 8284, stripped down to: 5176
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9424,7 +9836,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6174, stripped down to: 4141
+-- original size: 6358, stripped down to: 4257
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9577,7 +9989,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 45848, stripped down to: 27914
+-- original size: 56973, stripped down to: 35872
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9586,7 +9998,7 @@ if not modules then modules={} end modules ['lxml-tab']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end)
+local trace_entities=false trackers .register("xml.entities",function(v) trace_entities=v end)
local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
@@ -9594,10 +10006,12 @@ local xml=xml
local concat,remove,insert=table.concat,table.remove,table.insert
local type,next,setmetatable,getmetatable,tonumber,rawset=type,next,setmetatable,getmetatable,tonumber,rawset
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
+local sort=table.sort
local utfchar=utf.char
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs
local formatters=string.formatters
+do
xml.xmlns=xml.xmlns or {}
local check=P(false)
local parse=check
@@ -9614,23 +10028,68 @@ end
function xml.resolvens(url)
return lpegmatch(parse,lower(url)) or ""
end
+end
local nsremap,resolvens=xml.xmlns,xml.resolvens
-local stack={}
-local top={}
-local dt={}
-local at={}
-local xmlns={}
-local errorstr=nil
-local entities={}
-local strip=false
-local cleanup=false
-local utfize=false
-local resolve_predefined=false
-local unify_predefined=false
-local dcache={}
-local hcache={}
-local acache={}
-local mt={}
+local stack,level,top,at,xmlnms,errorstr
+local entities,parameters
+local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined
+local dcache,hcache,acache
+local mt,dt,nt
+local function preparexmlstate(settings)
+ if settings then
+ stack={}
+ level=0
+ top={}
+ at={}
+ mt={}
+ dt={}
+ nt=0
+ xmlns={}
+ errorstr=nil
+ strip=settings.strip_cm_and_dt
+ utfize=settings.utfize_entities
+ resolve=settings.resolve_entities
+ resolve_predefined=settings.resolve_predefined_entities
+ unify_predefined=settings.unify_predefined_entities
+ cleanup=settings.text_cleanup
+ entities=settings.entities or {}
+ parameters={}
+ reported_at_errors={}
+ dcache={}
+ hcache={}
+ acache={}
+ if utfize==nil then
+ settings.utfize_entities=true
+ utfize=true
+ end
+ if resolve_predefined==nil then
+ settings.resolve_predefined_entities=true
+ resolve_predefined=true
+ end
+ else
+ stack=nil
+ level=nil
+ top=nil
+ at=nil
+ mt=nil
+ dt=nil
+ nt=nil
+ xmlns=nil
+ errorstr=nil
+ strip=nil
+ utfize=nil
+ resolve=nil
+ resolve_predefined=nil
+ unify_predefined=nil
+ cleanup=nil
+ entities=nil
+ parameters=nil
+ reported_at_errors=nil
+ dcache=nil
+ hcache=nil
+ acache=nil
+ end
+end
local function initialize_mt(root)
mt={ __index=root }
end
@@ -9640,8 +10099,9 @@ end
function xml.checkerror(top,toclose)
return ""
end
+local checkns=xml.checkns
local function add_attribute(namespace,tag,value)
- if cleanup and #value>0 then
+ if cleanup and value~="" then
value=cleanup(value)
end
if tag=="xmlns" then
@@ -9650,21 +10110,30 @@ local function add_attribute(namespace,tag,value)
elseif namespace=="" then
at[tag]=value
elseif namespace=="xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:"..tag]=value
else
at[namespace..":"..tag]=value
end
end
local function add_empty(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top=stack[#stack]
+ top=stack[level]
dt=top.dt
- local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top }
- dt[#dt+1]=t
+ nt=#dt+1
+ local t={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=top
+ }
+ dt[nt]=t
setmetatable(t,mt)
if at.xmlns then
remove(xmlns)
@@ -9672,23 +10141,35 @@ local function add_empty(spacing,namespace,tag)
at={}
end
local function add_begin(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] }
+ top={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=stack[level]
+ }
setmetatable(top,mt)
dt=top.dt
- stack[#stack+1]=top
+ nt=#dt
+ level=level+1
+ stack[level]=top
at={}
end
local function add_end(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
- local toclose=remove(stack)
- top=stack[#stack]
- if #stack<1 then
+ local toclose=stack[level]
+ level=level-1
+ top=stack[level]
+ if level<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg~=tag then
@@ -9696,202 +10177,236 @@ local function add_end(spacing,namespace,tag)
report_xml(errorstr)
end
dt=top.dt
- dt[#dt+1]=toclose
+ nt=#dt+1
+ dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
end
end
-local spaceonly=lpegpatterns.whitespace^0*P(-1)
local function add_text(text)
- local n=#dt
- if cleanup and #text>0 then
- if n>0 then
- local s=dt[n]
+ if text=="" then
+ return
+ end
+ if cleanup then
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..cleanup(text)
+ dt[nt]=s..cleanup(text)
else
- dt[n+1]=cleanup(text)
+ nt=nt+1
+ dt[nt]=cleanup(text)
end
else
+ nt=1
dt[1]=cleanup(text)
end
else
- if n>0 then
- local s=dt[n]
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..text
+ dt[nt]=s..text
else
- dt[n+1]=text
+ nt=nt+1
+ dt[nt]=text
end
else
+ nt=1
dt[1]=text
end
end
end
local function add_special(what,spacing,text)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
if strip and (what=="@cm@" or what=="@dt@") then
else
- dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } }
+ nt=nt+1
+ dt[nt]={ special=true,ns="",tg=what,dt={ text } }
end
end
local function set_message(txt)
errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors={}
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
-local badentity="&error;"
-local badentity="&"
-xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
-}
-local placeholders=xml.placeholders
-local function fromhex(s)
- local n=tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s),true
- end
-end
-local function fromdec(s)
- local n=tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s),true
- end
-end
-local p_rest=(1-P(";"))^0
-local p_many=P(1)^0
-local p_char=lpegpatterns.utf8character
-local parsedentity=P("&")*(P("#x")*(p_rest/fromhex)+P("#")*(p_rest/fromdec))*P(";")*P(-1)+(P("#x")*(p_many/fromhex)+P("#")*(p_many/fromdec))
-local predefined_unified={
- [38]="&amp;",
- [42]="&quot;",
- [47]="&apos;",
- [74]="&lt;",
- [76]="&gt;",
-}
-local predefined_simplified={
- [38]="&",amp="&",
- [42]='"',quot='"',
- [47]="'",apos="'",
- [74]="<",lt="<",
- [76]=">",gt=">",
-}
-local nofprivates=0xF0000
-local privates_u={
- [ [[&]] ]="&amp;",
- [ [["]] ]="&quot;",
- [ [[']] ]="&apos;",
- [ [[<]] ]="&lt;",
- [ [[>]] ]="&gt;",
-}
-local privates_p={}
-local privates_n={
-}
-local escaped=utf.remapper(privates_u,"dynamic")
-local unprivatized=utf.remapper(privates_p,"dynamic")
-xml.unprivatized=unprivatized
-local function unescaped(s)
- local p=privates_n[s]
- if not p then
- nofprivates=nofprivates+1
- p=utfchar(nofprivates)
- privates_n[s]=p
- s="&"..s..";"
- privates_u[p]=s
- privates_p[p]=s
+local grammar_parsed_text_one
+local grammar_parsed_text_two
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
+do
+ local badentity="&"
+ xml.placeholders={
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
+ }
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s),true
+ end
end
- return p
-end
-xml.privatetoken=unescaped
-xml.privatecodes=privates_n
-local function handle_hex_entity(str)
- local h=hcache[str]
- if not h then
- local n=tonumber(str,16)
- h=unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return utfchar(n)
else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
- end
- h="&#x"..str..";"
+ return formatters["d:%s"](s),true
+ end
+ end
+ local p_rest=(1-P(";"))^0
+ local p_many=P(1)^0
+ local p_char=lpegpatterns.utf8character
+ local parsedentity=P("&#")*(P("x")*(p_rest/fromhex)+(p_rest/fromdec))*P(";")*P(-1)+P ("#")*(P("x")*(p_many/fromhex)+(p_many/fromdec))
+ xml.parsedentitylpeg=parsedentity
+ local predefined_unified={
+ [38]="&amp;",
+ [42]="&quot;",
+ [47]="&apos;",
+ [74]="&lt;",
+ [76]="&gt;",
+ }
+ local predefined_simplified={
+ [38]="&",amp="&",
+ [42]='"',quot='"',
+ [47]="'",apos="'",
+ [74]="<",lt="<",
+ [76]=">",gt=">",
+ }
+ local nofprivates=0xF0000
+ local privates_u={
+ [ [[&]] ]="&amp;",
+ [ [["]] ]="&quot;",
+ [ [[']] ]="&apos;",
+ [ [[<]] ]="&lt;",
+ [ [[>]] ]="&gt;",
+ }
+ local privates_p={
+ }
+ local privates_s={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[&]] ]="&U+26;",
+ [ [[']] ]="&U+27;",
+ [ [[<]] ]="&U+3C;",
+ [ [[>]] ]="&U+3E;",
+ [ [[\]] ]="&U+5C;",
+ [ [[{]] ]="&U+7B;",
+ [ [[|]] ]="&U+7C;",
+ [ [[}]] ]="&U+7D;",
+ [ [[~]] ]="&U+7E;",
+ }
+ local privates_n={
+ }
+ local escaped=utf.remapper(privates_u,"dynamic")
+ local unprivatized=utf.remapper(privates_p,"dynamic")
+ local unspecialized=utf.remapper(privates_s,"dynamic")
+ xml.unprivatized=unprivatized
+ xml.unspecialized=unspecialized
+ xml.escaped=escaped
+ local function unescaped(s)
+ local p=privates_n[s]
+ if not p then
+ nofprivates=nofprivates+1
+ p=utfchar(nofprivates)
+ privates_n[s]=p
+ s="&"..s..";"
+ privates_u[p]=s
+ privates_p[p]=s
+ privates_s[p]=s
end
- hcache[str]=h
+ return p
end
- return h
-end
-local function handle_dec_entity(str)
- local d=dcache[str]
- if not d then
- local n=tonumber(str)
- d=unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ xml.privatetoken=unescaped
+ xml.privatecodes=privates_n
+ xml.specialcodes=privates_s
+ function xml.addspecialcode(key,value)
+ privates_s[key]=value or "&"..s..";"
+ end
+ handle_hex_entity=function(str)
+ local h=hcache[str]
+ if not h then
+ local n=tonumber(str,16)
+ h=unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h="&#x"..str..";"
end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ hcache[str]=h
+ end
+ return h
+ end
+ handle_dec_entity=function(str)
+ local d=dcache[str]
+ if not d then
+ local n=tonumber(str)
+ d=unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d="&#"..str..";"
end
- d="&#"..str..";"
+ dcache[str]=d
end
- dcache[str]=d
+ return d
end
- return d
-end
-xml.parsedentitylpeg=parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve)=="function" then
- a=resolve(str) or entities[str]
+ a=resolve(str,entities) or entities[str]
else
a=entities[str]
end
@@ -9927,40 +10442,194 @@ local function handle_any_entity(str)
end
end
end
- acache[str]=a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str]=a
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
+ end
end
+ return a
end
- return a
- else
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ end
+ handle_any_entity_text=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
- acache[str]=a
if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str=="" then
- if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a=badentity
- acache[str]=a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve)=="function" then
+ a=resolve(str,entities) or entities[str]
+ else
+ a=entities[str]
+ end
+ if a then
+ if type(a)=="function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a=a(str) or ""
+ end
+ a=lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a)=="number" then
+ return ""
+ else
+ a=lpegmatch(parsedentity,a) or a
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity=placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a=unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str=="" then
+ a=badentity
+ else
+ a="&"..str..";"
+ end
+ end
+ end
+ end
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
end
- a=unescaped(str)
- acache[str]=a
end
+ return a
+ end
+ end
+ local p_rest=(1-P(";"))^1
+ local spec={
+ [0x23]="\\Ux{23}",
+ [0x24]="\\Ux{24}",
+ [0x25]="\\Ux{25}",
+ [0x5C]="\\Ux{5C}",
+ [0x7B]="\\Ux{7B}",
+ [0x7C]="\\Ux{7C}",
+ [0x7D]="\\Ux{7D}",
+ [0x7E]="\\Ux{7E}",
+ }
+ local hash=table.setmetatableindex(spec,function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
end
- return a
end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local reparsedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ local hash=table.setmetatableindex(function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
+ end
+ end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local unescapedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ xml.reparsedentitylpeg=reparsedentity
+ xml.unescapedentitylpeg=unescapedentity
end
+local escaped=xml.escaped
+local unescaped=xml.unescaped
+local placeholders=xml.placeholders
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
return str
@@ -9987,14 +10656,18 @@ local name=name_yes+name_nop
local utfbom=lpegpatterns.utfbom
local spacing=C(space^0)
local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent=R("AF","af","09")^0
-local decentitycontent=R("09")^0
+local hexentitycontent=R("AF","af","09")^1
+local decentitycontent=R("09")^1
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
- )+(anyentitycontent/handle_any_entity)
+ )+(anyentitycontent/handle_any_entity_dtd)
+local parsedentity_text=P("#")/""*(
+ P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
+ )+(anyentitycontent/handle_any_entity_text)
local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
+local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
-local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
+local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1
local somespace=space^1
local optionalspace=space^0
local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote)
@@ -10004,7 +10677,7 @@ local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error
local attributevalue=value+wrongvalue
local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute
local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext=text_parsed/add_text
+local parsedtext=text_parsed
local unparsedtext=text_unparsed/add_text
local balanced=P { "["*((1-S"[]")+V(1))^0*"]" }
local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty
@@ -10019,21 +10692,52 @@ local endcdata=P("]]")*close
local someinstruction=C((1-endinstruction)^0)
local somecomment=C((1-endcomment )^0)
local somecdata=C((1-endcdata )^0)
-local function normalentity(k,v ) entities[k]=v end
-local function systementity(k,v,n) entities[k]=v end
-local function publicentity(k,v,n) entities[k]=v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k]=v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k]=v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k]=v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k]=v
+end
local begindoctype=open*P("!DOCTYPE")
local enddoctype=close
local beginset=P("[")
local endset=P("]")
+local wrdtypename=C((1-somespace-P(";"))^1)
local doctypename=C((1-somespace-close)^0)
local elementdoctype=optionalspace*P("<!ELEMENT")*(1-close)^0*close
local basiccomment=begincomment*((1-endcomment)^0)*endcomment
+local weirdentitytype=P("%")*(somespace*doctypename*somespace*value)/weirdentity
local normalentitytype=(doctypename*somespace*value)/normalentity
local publicentitytype=(doctypename*somespace*P("PUBLIC")*somespace*value)/publicentity
local systementitytype=(doctypename*somespace*P("SYSTEM")*somespace*value*somespace*P("NDATA")*somespace*doctypename)/systementity
-local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype)*optionalspace*close
-local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+basiccomment+space)^0*optionalspace*endset
+local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype+weirdentitytype)*optionalspace*close
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+local entityresolve=P("%")*(wrdtypename/weirdresolve )*P(";")+P("&")*(wrdtypename/normalresolve)*P(";")
+entitydoctype=entitydoctype+entityresolve
+local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+entityresolve+basiccomment+space)^0*optionalspace*endset
local definitiondoctype=doctypename*somespace*doctypeset
local publicdoctype=doctypename*somespace*P("PUBLIC")*somespace*value*somespace*value*somespace*doctypeset
local systemdoctype=doctypename*somespace*P("SYSTEM")*somespace*value*somespace*doctypeset
@@ -10045,11 +10749,15 @@ local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
-local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
-local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
-local grammar_parsed_text=P { "preamble",
- preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
+grammar_parsed_text_one=P { "preamble",
+ preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0,
+}
+grammar_parsed_text_two=P { "followup",
+ followup=V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
@@ -10059,37 +10767,26 @@ local grammar_unparsed_text=P { "preamble",
children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
- settings=settings or {}
- strip=settings.strip_cm_and_dt
- utfize=settings.utfize_entities
- resolve=settings.resolve_entities
- resolve_predefined=settings.resolve_predefined_entities
- unify_predefined=settings.unify_predefined_entities
- cleanup=settings.text_cleanup
- entities=settings.entities or {}
- if utfize==nil then
- settings.utfize_entities=true
- utfize=true
- end
- if resolve_predefined==nil then
- settings.resolve_predefined_entities=true
- resolve_predefined=true
- end
- stack,top,at,xmlns,errorstr={},{},{},{},nil
- acache,hcache,dcache={},{},{}
- reported_attribute_errors={}
+ settings=settings or {}
+ preparexmlstate(settings)
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1]=top
+ level=level+1
+ stack[level]=top
top.dt={}
dt=top.dt
+ nt=0
if not data or data=="" then
errorstr="empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m=lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m=lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ if m then
else
errorstr="invalid xml file - parsed text"
end
@@ -10105,8 +10802,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
-setmetatable(result,mt)
-setmetatable(result.dt[1],mt)
+ setmetatable(result,mt)
+ setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -10148,13 +10845,10 @@ setmetatable(result.dt[1],mt)
decimals=dcache,
hexadecimals=hcache,
names=acache,
+ intermediates=parameters,
}
}
- strip,utfize,resolve,resolve_predefined=nil,nil,nil,nil
- unify_predefined,cleanup,entities=nil,nil,nil
- stack,top,at,xmlns,errorstr=nil,nil,nil,nil,nil
- acache,hcache,dcache=nil,nil,nil
- reported_attribute_errors,mt,errorhandler=nil,nil,nil
+ preparexmlstate()
return result
end
local function xmlconvert(data,settings)
@@ -10216,15 +10910,15 @@ function xml.toxml(data)
return data
end
end
-local function copy(old,tables)
+local function copy(old)
if old then
- tables=tables or {}
local new={}
- if not tables[old] then
- tables[old]=new
- end
for k,v in next,old do
- new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v
+ if type(v)=="table" then
+ new[k]=table.copy(v)
+ else
+ new[k]=v
+ end
end
local mt=getmetatable(old)
if mt then
@@ -10257,22 +10951,34 @@ local function verbose_element(e,handlers,escape)
local ats=eat and next(eat) and {}
if ats then
local n=0
- for k,v in next,eat do
+ for k in next,eat do
n=n+1
- ats[n]=f_attribute(k,escaped(v))
+ ats[n]=k
+ end
+ if n==1 then
+ local k=ats[1]
+ ats=f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k=ats[i]
+ ats[i]=f_attribute(k,escaped(eat[k]))
+ end
+ ats=concat(ats," ")
end
end
if ern and trace_entities and ern~=ens then
ens=ern
end
+ local n=edt and #edt
if ens~="" then
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10283,19 +10989,19 @@ local function verbose_element(e,handlers,escape)
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10306,7 +11012,7 @@ local function verbose_element(e,handlers,escape)
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -10323,7 +11029,7 @@ local function verbose_cdata(e,handlers)
handlers.handle("<![CDATA[",e.dt[1],"]]>")
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">")
end
local function verbose_root(e,handlers)
handlers.serialize(e.dt,handlers)
@@ -10366,12 +11072,14 @@ local function serialize(e,handlers,...)
end
end
local function xserialize(e,handlers)
- local functions=handlers.functions
- local etg=e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions=handlers.functions
+ local etg=e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
local handlers={}
@@ -10603,7 +11311,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 48229, stripped down to: 30684
+-- original size: 53877, stripped down to: 32495
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -10618,10 +11326,23 @@ local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
-local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end
-local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end
-local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end
+local trace_lpath=false
+local trace_lparse=false
+local trace_lprofile=false
local report_lpath=logs.reporter("xml","lpath")
+if trackers then
+ trackers.register("xml.path",function(v)
+ trace_lpath=v
+ end)
+ trackers.register("xml.parse",function(v)
+ trace_lparse=v
+ end)
+ trackers.register("xml.profile",function(v)
+ trace_lpath=v
+ trace_lparse=v
+ trace_lprofile=v
+ end)
+end
local xml=xml
local lpathcalls=0 function xml.lpathcalls () return lpathcalls end
local lpathcached=0 function xml.lpathcached() return lpathcached end
@@ -10980,13 +11701,27 @@ local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==")
local lp_doequal=P("=")/"=="
local lp_or=P("|")/" or "
local lp_and=P("&")/" and "
-local lp_builtin=P (
- P("text")/"(ll.dt[1] or '')"+
- P("content")/"ll.dt"+
- P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+
- P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+
- P("ns")/"ll.ns"
- )*((spaces*P("(")*spaces*P(")"))/"")
+local builtin={
+ text="(ll.dt[1] or '')",
+ content="ll.dt",
+ name="((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag="ll.tg",
+ position="l",
+ firstindex="1",
+ firstelement="1",
+ first="1",
+ lastindex="(#ll.__p__.dt or 1)",
+ lastelement="(ll.__p__.en or 1)",
+ last="#list",
+ rootposition="order",
+ order="order",
+ element="(ll.ei or 1)",
+ index="(ll.ni or 1)",
+ match="(ll.mi or 1)",
+ namespace="ll.ns",
+ ns="ll.ns",
+}
+local lp_builtin=lpeg.utfchartabletopattern(builtin)/builtin*((spaces*P("(")*spaces*P(")"))/"")
local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])")
local lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0"
local lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))"
@@ -11044,6 +11779,7 @@ local template_f_y=[[
local template_f_n=[[
return xml.finalizers['%s']['%s']
]]
+local register_last_match={ kind="axis",axis="last-match" }
local register_self={ kind="axis",axis="self" }
local register_parent={ kind="axis",axis="parent" }
local register_descendant={ kind="axis",axis="descendant" }
@@ -11121,7 +11857,7 @@ local pathparser=Ct { "patterns",
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
- axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
+ axis=V("last_match")+V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
special=special_1+special_2+special_3,
initial=(P("/")*spaces*Cc(register_initial_child))^-1,
error=(P(1)^1)/register_error,
@@ -11147,6 +11883,7 @@ local pathparser=Ct { "patterns",
preceding=P('preceding::')*Cc(register_preceding ),
preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
+ last_match=P('last-match::')*Cc(register_last_match ),
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -11193,13 +11930,12 @@ local function tagstostring(list)
end
xml.nodesettostring=nodesettostring
local lpath
-local lshowoptions={ functions=false }
local function lshow(parsed)
if type(parsed)=="string" then
parsed=lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow=lshow
local function add_comment(p,str)
@@ -11265,140 +12001,168 @@ lpath=function (pattern)
end
end
xml.lpath=lpath
-local profiled={} xml.profiled=profiled
-local function profiled_apply(list,parsed,nofparsed,order)
- local p=profiled[parsed.pattern]
- if p then
- p.tested=p.tested+1
- else
- p={ tested=1,matched=0,finalized=0 }
- profiled[parsed.pattern]=p
- end
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- p.matched=p.matched+1
- p.finalized=p.finalized+1
- return collected
- end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
+do
+ local profiled={}
+ xml.profiled=profiled
+ local lastmatch=nil
+ local keepmatch=nil
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch=v
+ lastmatch=nil
+ end)
+ end
+ apply_axis["last-match"]=function()
+ return lastmatch or {}
+ end
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p=profiled[parsed.pattern]
+ if p then
+ p.tested=p.tested+1
+ else
+ p={ tested=1,matched=0,finalized=0 }
+ profiled[parsed.pattern]=p
+ end
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ p.matched=p.matched+1
p.finalized=p.finalized+1
return collected
end
- return nil
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ p.finalized=p.finalized+1
+ return collected
+ end
+ return nil
+ end
end
- end
- if collected then
- p.matched=p.matched+1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ if collected then
+ p.matched=p.matched+1
end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
- end
- end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- local axis=pi.axis
- if axis~="self" then
- collected=apply_axis[axis](collected)
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
end
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- return pi.finalizer(collected)
end
- if not collected or #collected==0 then
- local pf=i<nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected)
+ return collected
+ end
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ local axis=pi.axis
+ if axis~="self" then
+ collected=apply_axis[axis](collected)
+ end
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected==0 then
+ local pf=i<nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected)
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed=cache[pattern]
- if parsed then
- lpathcalls=lpathcalls+1
- lpathcached=lpathcached+1
- elseif type(pattern)=="table" then
- lpathcalls=lpathcalls+1
- parsed=pattern
- else
- parsed=lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply=normal_apply
+ if trackers then
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply=profiled_apply
+ elseif trace_lpath then
+ apply=traced_apply
+ else
+ apply=normal_apply
+ end
+ end)
end
- local nofparsed=#parsed
- if nofparsed==0 then
- return
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch=nil
+ return
+ end
+ local parsed=cache[pattern]
+ if parsed then
+ lpathcalls=lpathcalls+1
+ lpathcached=lpathcached+1
+ elseif type(pattern)=="table" then
+ lpathcalls=lpathcalls+1
+ parsed=pattern
+ else
+ parsed=lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch=nil
+ return
+ end
+ local nofparsed=#parsed
+ if nofparsed==0 then
+ lastmatch=nil
+ return
+ end
+ local collected=apply({ list },parsed,nofparsed,list.mi)
+ lastmatch=keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+ function xml.lastmatch()
+ return lastmatch
end
end
-xml.applylpath=applylpath
+local applylpath=xml.applylpath
function xml.filter(root,pattern)
return applylpath(root,pattern)
end
@@ -11676,7 +12440,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3684, stripped down to: 1957
+-- original size: 3787, stripped down to: 2003
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -11745,7 +12509,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28786, stripped down to: 20578
+-- original size: 30566, stripped down to: 21741
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12079,55 +12843,63 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek=collected[c]
local name=nil
local ekdt=ek.dt
- local ekat=ek.at
- local ekrt=ek.__p__
- local epdt=ekrt.dt
- if not attribute or attribute=="" then
- name=(type(ekdt)=="table" and ekdt[1]) or ekdt
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name=ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat=ek.at
+ local ekrt=ek.__p__
+ if ekrt then
+ local epdt=ekrt.dt
+ if not attribute or attribute=="" then
+ name=(type(ekdt)=="table" and ekdt[1]) or ekdt
end
- end
- end
- local data=nil
- if name and name~="" then
- data=loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data=="" then
- epdt[ek.ni]=""
- elseif ekat["parse"]=="text" then
- epdt[ek.ni]=xml.escaped(data)
- else
- local xi=xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni]=""
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name=ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child=xml.body(xi)
- child.__p__=ekrt
- child.__f__=name
- epdt[ek.ni]=child
- local inclusions=xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1]=name
- else
- xmldata.settings.inclusions={ name }
+ local data=nil
+ if name and name~="" then
+ data=loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions=xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1]=name
+ if not data or data=="" then
+ epdt[ek.ni]=""
+ elseif ekat["parse"]=="text" then
+ epdt[ek.ni]=xml.escaped(data)
+ else
+ local xi=xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni]=""
else
- xmldata.settings.badinclusions={ name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child=xml.body(xi)
+ child.__p__=ekrt
+ child.__f__=name
+ epdt[ek.ni]=child
+ local settings=xmldata.settings
+ local inclusions=settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1]=name
+ elseif settings then
+ settings.inclusions={ name }
+ else
+ settings={ inclusions={ name } }
+ xmldata.settings=settings
+ end
+ if child.er then
+ local badinclusions=settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12598,7 +13370,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10274, stripped down to: 7538
+-- original size: 10719, stripped down to: 7841
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -12976,7 +13748,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6351, stripped down to: 4919
+-- original size: 6534, stripped down to: 5072
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13146,7 +13918,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11085, stripped down to: 7662
+-- original size: 11445, stripped down to: 7830
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -13402,7 +14174,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 17216, stripped down to: 10657
+-- original size: 18619, stripped down to: 11042
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -13413,6 +14185,7 @@ if not modules then modules={} end modules ['data-exp']={
}
local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub
local concat,sort=table.concat,table.sort
+local sortedkeys=table.sortedkeys
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local Ct,Cs,Cc,Carg,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.P,lpeg.C,lpeg.S
local type,next=type,next
@@ -13758,14 +14531,16 @@ local nothing=function() end
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern)=="string" then
local pattern=lower(pattern)
- local files=content.files
+ local files=content.files
local remap=content.remap
if files and remap then
- local n=next(files)
+ local f=sortedkeys(files)
+ local n=#f
+ local i=0
local function iterator()
- while n do
- local k=n
- n=next(files,k)
+ while i<n do
+ i=i+1
+ local k=f[i]
if find(k,pattern) then
return files[k],remap and remap[k] or k
end
@@ -13784,7 +14559,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9216, stripped down to: 6798
+-- original size: 9649, stripped down to: 7131
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -13920,6 +14695,11 @@ local relations=allocate {
names={ 'fontconfig','fontconfig file','fontconfig files' },
variable='FONTCONFIG_PATH',
},
+ pk={
+ names={ "pk" },
+ variable='PKFONTS',
+ suffixes={ 'pk' },
+ },
},
obsolete={
enc={
@@ -14063,7 +14843,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 15618, stripped down to: 11629
+-- original size: 16066, stripped down to: 11938
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -14439,7 +15219,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5347, stripped down to: 4015
+-- original size: 5488, stripped down to: 4101
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -14558,7 +15338,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67003, stripped down to: 46291
+-- original size: 67241, stripped down to: 46427
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15828,10 +16608,18 @@ local function findfiles(filename,filetype,allresults)
return result or {},status
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
return filedirname(findfiles(filename,filetype,false)[1] or "")
@@ -16106,7 +16894,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 3950, stripped down to: 2935
+-- original size: 4092, stripped down to: 3016
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -16224,7 +17012,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 910, stripped down to: 823
+-- original size: 935, stripped down to: 838
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -16254,7 +17042,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 530, stripped down to: 475
+-- original size: 548, stripped down to: 483
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -16277,7 +17065,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3863, stripped down to: 3310
+-- original size: 3976, stripped down to: 3391
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -16385,7 +17173,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5010, stripped down to: 3588
+-- original size: 5148, stripped down to: 3680
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -16504,7 +17292,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 3899, stripped down to: 2984
+-- original size: 4000, stripped down to: 3052
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -16595,7 +17383,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 8772, stripped down to: 6841
+-- original size: 9036, stripped down to: 7041
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -16832,7 +17620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8479, stripped down to: 5580
+-- original size: 8712, stripped down to: 5726
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17021,7 +17809,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6569, stripped down to: 5304
+-- original size: 6779, stripped down to: 5444
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17202,7 +17990,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4313, stripped down to: 3227
+-- original size: 4447, stripped down to: 3302
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -17311,7 +18099,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2431, stripped down to: 1996
+-- original size: 2494, stripped down to: 2047
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -17378,7 +18166,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2601, stripped down to: 1627
+-- original size: 2674, stripped down to: 1658
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -17434,7 +18222,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2734, stripped down to: 2354
+-- original size: 2815, stripped down to: 2415
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -17514,7 +18302,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11549, stripped down to: 5905
+-- original size: 11846, stripped down to: 6059
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -17700,7 +18488,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5703, stripped down to: 2507
+-- original size: 5914, stripped down to: 2584
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -17803,7 +18591,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 5955, stripped down to: 4926
+-- original size: 6967, stripped down to: 5631
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -17832,7 +18620,7 @@ local function primaryflags()
end
return concat(flags," ")
end
-function environment.make_format(name)
+function environment.make_format(name,silent)
local engine=environment.ownmain or "luatex"
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
@@ -17889,9 +18677,23 @@ function environment.make_format(name)
lfs.chdir(olddir)
return
end
- local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command=format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result=os.execute(command)
+ local runtime=statistics.stoptiming()
+ if result~=0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name))
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime))
+ end
+ os.remove("temp.log")
+ else
+ local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
if mp then
@@ -17935,10 +18737,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 745793
--- stripped bytes : 269308
+-- original bytes : 796826
+-- stripped bytes : 289016
-- end library merge
@@ -17982,6 +18784,8 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
+ 'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
@@ -18037,13 +18841,21 @@ local ownlibs = { -- order can be made better
}
--- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/data-tmf.lua
+-- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/mkiv/data-tmf.lua
-- c:/data/develop/context/sources/data-tmf.lua
local ownlist = {
-- '.',
-- ownpath ,
owntree .. "/../../../../context/sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
diff --git a/Master/texmf-dist/scripts/context/stubs/install/first-setup.bat b/Master/texmf-dist/scripts/context/stubs/install/first-setup.bat
index f06ad0e6b79..f388b0ac0f3 100755
--- a/Master/texmf-dist/scripts/context/stubs/install/first-setup.bat
+++ b/Master/texmf-dist/scripts/context/stubs/install/first-setup.bat
@@ -38,7 +38,7 @@ REM ~ copy /y bin\x.lua bin\mtx-update.lua
REM --mingw --nofiledatabase --engine=luatex
-mtxrun --script ./bin/mtx-update.lua --update --force --make --engine=all --context=beta --texroot=%OWNPATH%tex %*
+mtxrun --script ./bin/mtx-update.lua --update --force --make --engine=all --context=beta --texroot="%OWNPATH%tex" %*
echo.
echo.
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/contextjit.exe b/Master/texmf-dist/scripts/context/stubs/mswin/contextjit.exe
new file mode 100755
index 00000000000..0e7882cf926
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/contextjit.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
index 5c09b3b44ff..6a4babe9961 100644
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 3888, stripped down to: 2197
+-- original size: 4734, stripped down to: 2626
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -65,10 +65,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -111,21 +115,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -154,7 +170,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10587, stripped down to: 7815
+-- original size: 10949, stripped down to: 8037
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -444,7 +460,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36977, stripped down to: 20349
+-- original size: 38185, stripped down to: 20990
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -461,7 +477,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -481,7 +497,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -1248,7 +1264,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 361, stripped down to: 322
+-- original size: 372, stripped down to: 329
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1267,7 +1283,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5694, stripped down to: 2827
+-- original size: 5983, stripped down to: 2959
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1354,9 +1370,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1372,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 35724, stripped down to: 21525
+-- original size: 36997, stripped down to: 22376
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -2248,7 +2265,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2348,7 +2365,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 8643, stripped down to: 6232
+-- original size: 9001, stripped down to: 6512
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2663,7 +2680,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 4939, stripped down to: 2830
+-- original size: 5146, stripped down to: 2933
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2808,7 +2825,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 1923, stripped down to: 1133
+-- original size: 2010, stripped down to: 1186
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2881,7 +2898,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15832, stripped down to: 9456
+-- original size: 16390, stripped down to: 9734
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3263,7 +3280,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 20949, stripped down to: 9945
+-- original size: 21647, stripped down to: 10237
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3643,7 +3660,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1211, stripped down to: 1002
+-- original size: 1265, stripped down to: 1038
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3697,7 +3714,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3248, stripped down to: 2266
+-- original size: 3355, stripped down to: 2321
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3785,7 +3802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12531, stripped down to: 5721
+-- original size: 12897, stripped down to: 5882
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4002,7 +4019,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 16765, stripped down to: 11003
+-- original size: 17358, stripped down to: 11378
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4467,7 +4484,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1850, stripped down to: 1568
+-- original size: 1919, stripped down to: 1621
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4539,7 +4556,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37388, stripped down to: 15817
+-- original size: 38699, stripped down to: 16321
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4768,9 +4785,10 @@ if not utf.sub then
end
end
end
-function utf.remapper(mapping,option)
+function utf.remapper(mapping,option,action)
local variant=type(mapping)
if variant=="table" then
+ action=action or mapping
if option=="dynamic" then
local pattern=false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
@@ -4779,15 +4797,15 @@ function utf.remapper(mapping,option)
return ""
else
if not pattern then
- pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option=="pattern" then
- return Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
else
- local pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
return function(str)
if not str or str=="" then
return ""
@@ -5157,7 +5175,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 974, stripped down to: 890
+-- original size: 1012, stripped down to: 912
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5197,7 +5215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34513, stripped down to: 18943
+-- original size: 36053, stripped down to: 19685
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5368,7 +5386,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -5885,7 +5909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 25338, stripped down to: 16247
+-- original size: 28680, stripped down to: 18636
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -6314,19 +6338,21 @@ local f_val_str=formatters["%w%q,"]
local f_val_boo=formatters["%w%l,"]
local f_val_not=formatters["%w{},"]
local f_val_seq=formatters["%w{ %, t },"]
+local f_fin_seq=formatters[" %, t }"]
local f_table_return=formatters["return {"]
local f_table_name=formatters["%s={"]
local f_table_direct=formatters["{"]
local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
-local serialize=table.serialize
-function table.serialize(root,name,specification)
+local original_serialize=table.serialize
+local function serialize(root,name,specification)
if type(specification)=="table" then
- return serialize(root,name,specification)
+ return original_serialize(root,name,specification)
end
- local t
+ local t
local n=1
+ local unknown=false
local function simple_table(t)
local nt=#t
if nt>0 then
@@ -6337,6 +6363,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero=t[0]
if n==nt then
local tt={}
for i=1,nt do
@@ -6353,6 +6380,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ tt[i+1]=v
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
end
end
return nil
@@ -6401,7 +6445,7 @@ function table.serialize(root,name,specification)
elseif tv=="string" then
n=n+1 t[n]=f_val_str(depth,v)
elseif tv=="table" then
- if next(v)==nil then
+ if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
local st=simple_table(v)
@@ -6413,6 +6457,8 @@ function table.serialize(root,name,specification)
end
elseif tv=="boolean" then
n=n+1 t[n]=f_val_boo(depth,v)
+ elseif unknown then
+ n=n+1 t[n]=f_val_str(depth,tostring(v))
end
elseif tv=="number" then
if tk=="number" then
@@ -6421,6 +6467,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_num(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_num(depth,tostring(k),v)
end
elseif tv=="string" then
if tk=="number" then
@@ -6429,6 +6477,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_str(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),v)
end
elseif tv=="table" then
if next(v)==nil then
@@ -6438,6 +6488,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,k)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
local st=simple_table(v)
@@ -6449,6 +6501,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_seq(depth,k,st)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv=="boolean" then
@@ -6458,6 +6512,18 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_boo(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk=="number" then
+ n=n+1 t[n]=f_key_num_value_str(depth,k,tostring(v))
+ elseif tk=="string" then
+ n=n+1 t[n]=f_key_str_value_str(depth,k,tostring(v))
+ elseif tk=="boolean" then
+ n=n+1 t[n]=f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -6490,13 +6556,351 @@ function table.serialize(root,name,specification)
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- do_serialize(root,name,1,0)
+ local st=simple_table(root)
+ if st then
+ return t[1]..f_fin_seq(st)
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n=n+1
t[n]=f_table_finish()
return concat(t,"\n")
end
+table.serialize=serialize
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-fil"] = package.loaded["util-fil"] or true
+
+-- original size: 3577, stripped down to: 2870
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4264, stripped down to: 3349
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -6505,7 +6909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4172, stripped down to: 2953
+-- original size: 4100, stripped down to: 2852
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -6583,39 +6987,32 @@ local f_index={
["table"]=f_table,
["number"]=f_number,
}
-local t_index={
- ["empty"]={ __index=f_empty },
- ["self"]={ __index=f_self },
- ["table"]={ __index=f_table },
- ["number"]={ __index=f_number },
-}
function table.setmetatableindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__index=f_index[f] or f
+ m.__index=i
else
- setmetatable(t,t_index[f] or { __index=f })
+ setmetatable(t,{ __index=i })
end
return t
end
local f_index={
["ignore"]=f_ignore,
}
-local t_index={
- ["ignore"]={ __newindex=f_ignore },
-}
function table.setmetatablenewindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__newindex=f_index[f] or f
+ m.__newindex=i
else
- setmetatable(t,t_index[f] or { __newindex=f })
+ setmetatable(t,{ __newindex=i })
end
return t
end
@@ -6652,7 +7049,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 21780, stripped down to: 15121
+-- original size: 22839, stripped down to: 15769
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -6676,6 +7073,8 @@ local setmetatableindex=table.setmetatableindex
local sortedhash=table.sortedhash
local sortedkeys=table.sortedkeys
local tohash=table.tohash
+local hashes={}
+utilities.parsers.hashes=hashes
local digit=R("09")
local space=P(' ')
local equal=P("=")
@@ -6894,9 +7293,15 @@ function parsers.array_to_string(a,separator)
end
end
local pattern=Cf(Ct("")*Cg(C((1-S(", "))^1)*S(", ")^0*Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or {}
end
+hashes.settings_to_set=table.setmetatableindex(function(t,k)
+ local v=k and lpegmatch(pattern,k) or {}
+ t[k]=v
+ return v
+end)
+getmetatable(hashes.settings_to_set).__mode="kv"
function parsers.simple_hash_to_string(h,separator)
local t,tn={},0
for k,v in sortedhash(h) do
@@ -7173,7 +7578,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2274, stripped down to: 1781
+-- original size: 2350, stripped down to: 1847
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7254,7 +7659,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12482, stripped down to: 8864
+-- original size: 12862, stripped down to: 9104
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7567,7 +7972,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 29359, stripped down to: 20483
+-- original size: 30767, stripped down to: 21355
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -7610,6 +8015,9 @@ 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
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0)
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -7627,6 +8035,8 @@ if tex and (tex.jobname or tex.formatname) then
elseif target=="term" then
texio_write_nl("term","")
io_write(...)
+ elseif type(target)=="number" then
+ texio_write_nl(target,...)
elseif target~="none" then
texio_write_nl("log",target,...)
texio_write_nl("term","")
@@ -7644,6 +8054,8 @@ if tex and (tex.jobname or tex.formatname) then
texio_write("log",...)
elseif target=="term" then
io_write(...)
+ elseif type(target)=="number" then
+ texio_write(target,...)
elseif target~="none" then
texio_write("log",target,...)
io_write(target,...)
@@ -7714,7 +8126,7 @@ if tex and (tex.jobname or tex.formatname) then
write_nl(target,"\n")
end
report=function(a,b,c,...)
- if c then
+ 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]))
@@ -7725,7 +8137,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
direct=function(a,b,c,...)
- if c then
+ if c~=nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -7736,7 +8148,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subreport=function(a,s,b,c,...)
- if c then
+ 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]))
@@ -7747,7 +8159,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subdirect=function(a,s,b,c,...)
- if c then
+ 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])
@@ -7758,7 +8170,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
status=function(a,b,c,...)
- if c then
+ 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]))
@@ -8056,7 +8468,7 @@ function logs.messenger(category,subcategory)
end
end
end
-local function setblocked(category,value)
+local function setblocked(category,value)
if category==true then
category,value="*",true
elseif category==false then
@@ -8071,7 +8483,7 @@ local function setblocked(category,value)
end
else
states=utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c,_ in next,states do
+ for c in next,states do
local v=data[c]
if v then
v.state=value
@@ -8353,7 +8765,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6704, stripped down to: 5343
+-- original size: 6917, stripped down to: 5484
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8474,13 +8886,13 @@ function statistics.show()
end
end
register("lua properties",function()
- local list=status.list()
- local hashchar=tonumber(list.luatex_hashchars)
+ local hashchar=tonumber(status.luatex_hashchars)
+ local hashtype=status.luatex_hashtype
local mask=lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask=="utf" and "τεχ" or "tex")
@@ -8534,7 +8946,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 5829, stripped down to: 3501
+-- original size: 6039, stripped down to: 3616
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -8681,7 +9093,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 4982, stripped down to: 3511
+-- original size: 5142, stripped down to: 3611
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -8811,7 +9223,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 3898, stripped down to: 2644
+-- original size: 4030, stripped down to: 2718
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -8915,7 +9327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7757, stripped down to: 6015
+-- original size: 7985, stripped down to: 6153
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9092,7 +9504,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
--- original size: 7100, stripped down to: 3978
+-- original size: 7313, stripped down to: 4076
if not modules then modules={} end modules ['util-tpl']={
version=1.001,
@@ -9237,7 +9649,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8022, stripped down to: 5038
+-- original size: 8284, stripped down to: 5176
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9424,7 +9836,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6174, stripped down to: 4141
+-- original size: 6358, stripped down to: 4257
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9577,7 +9989,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 45848, stripped down to: 27914
+-- original size: 56973, stripped down to: 35872
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9586,7 +9998,7 @@ if not modules then modules={} end modules ['lxml-tab']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end)
+local trace_entities=false trackers .register("xml.entities",function(v) trace_entities=v end)
local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
@@ -9594,10 +10006,12 @@ local xml=xml
local concat,remove,insert=table.concat,table.remove,table.insert
local type,next,setmetatable,getmetatable,tonumber,rawset=type,next,setmetatable,getmetatable,tonumber,rawset
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
+local sort=table.sort
local utfchar=utf.char
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs
local formatters=string.formatters
+do
xml.xmlns=xml.xmlns or {}
local check=P(false)
local parse=check
@@ -9614,23 +10028,68 @@ end
function xml.resolvens(url)
return lpegmatch(parse,lower(url)) or ""
end
+end
local nsremap,resolvens=xml.xmlns,xml.resolvens
-local stack={}
-local top={}
-local dt={}
-local at={}
-local xmlns={}
-local errorstr=nil
-local entities={}
-local strip=false
-local cleanup=false
-local utfize=false
-local resolve_predefined=false
-local unify_predefined=false
-local dcache={}
-local hcache={}
-local acache={}
-local mt={}
+local stack,level,top,at,xmlnms,errorstr
+local entities,parameters
+local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined
+local dcache,hcache,acache
+local mt,dt,nt
+local function preparexmlstate(settings)
+ if settings then
+ stack={}
+ level=0
+ top={}
+ at={}
+ mt={}
+ dt={}
+ nt=0
+ xmlns={}
+ errorstr=nil
+ strip=settings.strip_cm_and_dt
+ utfize=settings.utfize_entities
+ resolve=settings.resolve_entities
+ resolve_predefined=settings.resolve_predefined_entities
+ unify_predefined=settings.unify_predefined_entities
+ cleanup=settings.text_cleanup
+ entities=settings.entities or {}
+ parameters={}
+ reported_at_errors={}
+ dcache={}
+ hcache={}
+ acache={}
+ if utfize==nil then
+ settings.utfize_entities=true
+ utfize=true
+ end
+ if resolve_predefined==nil then
+ settings.resolve_predefined_entities=true
+ resolve_predefined=true
+ end
+ else
+ stack=nil
+ level=nil
+ top=nil
+ at=nil
+ mt=nil
+ dt=nil
+ nt=nil
+ xmlns=nil
+ errorstr=nil
+ strip=nil
+ utfize=nil
+ resolve=nil
+ resolve_predefined=nil
+ unify_predefined=nil
+ cleanup=nil
+ entities=nil
+ parameters=nil
+ reported_at_errors=nil
+ dcache=nil
+ hcache=nil
+ acache=nil
+ end
+end
local function initialize_mt(root)
mt={ __index=root }
end
@@ -9640,8 +10099,9 @@ end
function xml.checkerror(top,toclose)
return ""
end
+local checkns=xml.checkns
local function add_attribute(namespace,tag,value)
- if cleanup and #value>0 then
+ if cleanup and value~="" then
value=cleanup(value)
end
if tag=="xmlns" then
@@ -9650,21 +10110,30 @@ local function add_attribute(namespace,tag,value)
elseif namespace=="" then
at[tag]=value
elseif namespace=="xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:"..tag]=value
else
at[namespace..":"..tag]=value
end
end
local function add_empty(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top=stack[#stack]
+ top=stack[level]
dt=top.dt
- local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top }
- dt[#dt+1]=t
+ nt=#dt+1
+ local t={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=top
+ }
+ dt[nt]=t
setmetatable(t,mt)
if at.xmlns then
remove(xmlns)
@@ -9672,23 +10141,35 @@ local function add_empty(spacing,namespace,tag)
at={}
end
local function add_begin(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] }
+ top={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=stack[level]
+ }
setmetatable(top,mt)
dt=top.dt
- stack[#stack+1]=top
+ nt=#dt
+ level=level+1
+ stack[level]=top
at={}
end
local function add_end(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
- local toclose=remove(stack)
- top=stack[#stack]
- if #stack<1 then
+ local toclose=stack[level]
+ level=level-1
+ top=stack[level]
+ if level<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg~=tag then
@@ -9696,202 +10177,236 @@ local function add_end(spacing,namespace,tag)
report_xml(errorstr)
end
dt=top.dt
- dt[#dt+1]=toclose
+ nt=#dt+1
+ dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
end
end
-local spaceonly=lpegpatterns.whitespace^0*P(-1)
local function add_text(text)
- local n=#dt
- if cleanup and #text>0 then
- if n>0 then
- local s=dt[n]
+ if text=="" then
+ return
+ end
+ if cleanup then
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..cleanup(text)
+ dt[nt]=s..cleanup(text)
else
- dt[n+1]=cleanup(text)
+ nt=nt+1
+ dt[nt]=cleanup(text)
end
else
+ nt=1
dt[1]=cleanup(text)
end
else
- if n>0 then
- local s=dt[n]
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..text
+ dt[nt]=s..text
else
- dt[n+1]=text
+ nt=nt+1
+ dt[nt]=text
end
else
+ nt=1
dt[1]=text
end
end
end
local function add_special(what,spacing,text)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
if strip and (what=="@cm@" or what=="@dt@") then
else
- dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } }
+ nt=nt+1
+ dt[nt]={ special=true,ns="",tg=what,dt={ text } }
end
end
local function set_message(txt)
errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors={}
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
-local badentity="&error;"
-local badentity="&"
-xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
-}
-local placeholders=xml.placeholders
-local function fromhex(s)
- local n=tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s),true
- end
-end
-local function fromdec(s)
- local n=tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s),true
- end
-end
-local p_rest=(1-P(";"))^0
-local p_many=P(1)^0
-local p_char=lpegpatterns.utf8character
-local parsedentity=P("&")*(P("#x")*(p_rest/fromhex)+P("#")*(p_rest/fromdec))*P(";")*P(-1)+(P("#x")*(p_many/fromhex)+P("#")*(p_many/fromdec))
-local predefined_unified={
- [38]="&amp;",
- [42]="&quot;",
- [47]="&apos;",
- [74]="&lt;",
- [76]="&gt;",
-}
-local predefined_simplified={
- [38]="&",amp="&",
- [42]='"',quot='"',
- [47]="'",apos="'",
- [74]="<",lt="<",
- [76]=">",gt=">",
-}
-local nofprivates=0xF0000
-local privates_u={
- [ [[&]] ]="&amp;",
- [ [["]] ]="&quot;",
- [ [[']] ]="&apos;",
- [ [[<]] ]="&lt;",
- [ [[>]] ]="&gt;",
-}
-local privates_p={}
-local privates_n={
-}
-local escaped=utf.remapper(privates_u,"dynamic")
-local unprivatized=utf.remapper(privates_p,"dynamic")
-xml.unprivatized=unprivatized
-local function unescaped(s)
- local p=privates_n[s]
- if not p then
- nofprivates=nofprivates+1
- p=utfchar(nofprivates)
- privates_n[s]=p
- s="&"..s..";"
- privates_u[p]=s
- privates_p[p]=s
+local grammar_parsed_text_one
+local grammar_parsed_text_two
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
+do
+ local badentity="&"
+ xml.placeholders={
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
+ }
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s),true
+ end
end
- return p
-end
-xml.privatetoken=unescaped
-xml.privatecodes=privates_n
-local function handle_hex_entity(str)
- local h=hcache[str]
- if not h then
- local n=tonumber(str,16)
- h=unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return utfchar(n)
else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
- end
- h="&#x"..str..";"
+ return formatters["d:%s"](s),true
+ end
+ end
+ local p_rest=(1-P(";"))^0
+ local p_many=P(1)^0
+ local p_char=lpegpatterns.utf8character
+ local parsedentity=P("&#")*(P("x")*(p_rest/fromhex)+(p_rest/fromdec))*P(";")*P(-1)+P ("#")*(P("x")*(p_many/fromhex)+(p_many/fromdec))
+ xml.parsedentitylpeg=parsedentity
+ local predefined_unified={
+ [38]="&amp;",
+ [42]="&quot;",
+ [47]="&apos;",
+ [74]="&lt;",
+ [76]="&gt;",
+ }
+ local predefined_simplified={
+ [38]="&",amp="&",
+ [42]='"',quot='"',
+ [47]="'",apos="'",
+ [74]="<",lt="<",
+ [76]=">",gt=">",
+ }
+ local nofprivates=0xF0000
+ local privates_u={
+ [ [[&]] ]="&amp;",
+ [ [["]] ]="&quot;",
+ [ [[']] ]="&apos;",
+ [ [[<]] ]="&lt;",
+ [ [[>]] ]="&gt;",
+ }
+ local privates_p={
+ }
+ local privates_s={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[&]] ]="&U+26;",
+ [ [[']] ]="&U+27;",
+ [ [[<]] ]="&U+3C;",
+ [ [[>]] ]="&U+3E;",
+ [ [[\]] ]="&U+5C;",
+ [ [[{]] ]="&U+7B;",
+ [ [[|]] ]="&U+7C;",
+ [ [[}]] ]="&U+7D;",
+ [ [[~]] ]="&U+7E;",
+ }
+ local privates_n={
+ }
+ local escaped=utf.remapper(privates_u,"dynamic")
+ local unprivatized=utf.remapper(privates_p,"dynamic")
+ local unspecialized=utf.remapper(privates_s,"dynamic")
+ xml.unprivatized=unprivatized
+ xml.unspecialized=unspecialized
+ xml.escaped=escaped
+ local function unescaped(s)
+ local p=privates_n[s]
+ if not p then
+ nofprivates=nofprivates+1
+ p=utfchar(nofprivates)
+ privates_n[s]=p
+ s="&"..s..";"
+ privates_u[p]=s
+ privates_p[p]=s
+ privates_s[p]=s
end
- hcache[str]=h
+ return p
end
- return h
-end
-local function handle_dec_entity(str)
- local d=dcache[str]
- if not d then
- local n=tonumber(str)
- d=unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ xml.privatetoken=unescaped
+ xml.privatecodes=privates_n
+ xml.specialcodes=privates_s
+ function xml.addspecialcode(key,value)
+ privates_s[key]=value or "&"..s..";"
+ end
+ handle_hex_entity=function(str)
+ local h=hcache[str]
+ if not h then
+ local n=tonumber(str,16)
+ h=unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h="&#x"..str..";"
end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ hcache[str]=h
+ end
+ return h
+ end
+ handle_dec_entity=function(str)
+ local d=dcache[str]
+ if not d then
+ local n=tonumber(str)
+ d=unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d="&#"..str..";"
end
- d="&#"..str..";"
+ dcache[str]=d
end
- dcache[str]=d
+ return d
end
- return d
-end
-xml.parsedentitylpeg=parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve)=="function" then
- a=resolve(str) or entities[str]
+ a=resolve(str,entities) or entities[str]
else
a=entities[str]
end
@@ -9927,40 +10442,194 @@ local function handle_any_entity(str)
end
end
end
- acache[str]=a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str]=a
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
+ end
end
+ return a
end
- return a
- else
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ end
+ handle_any_entity_text=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
- acache[str]=a
if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str=="" then
- if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a=badentity
- acache[str]=a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve)=="function" then
+ a=resolve(str,entities) or entities[str]
+ else
+ a=entities[str]
+ end
+ if a then
+ if type(a)=="function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a=a(str) or ""
+ end
+ a=lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a)=="number" then
+ return ""
+ else
+ a=lpegmatch(parsedentity,a) or a
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity=placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a=unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str=="" then
+ a=badentity
+ else
+ a="&"..str..";"
+ end
+ end
+ end
+ end
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
end
- a=unescaped(str)
- acache[str]=a
end
+ return a
+ end
+ end
+ local p_rest=(1-P(";"))^1
+ local spec={
+ [0x23]="\\Ux{23}",
+ [0x24]="\\Ux{24}",
+ [0x25]="\\Ux{25}",
+ [0x5C]="\\Ux{5C}",
+ [0x7B]="\\Ux{7B}",
+ [0x7C]="\\Ux{7C}",
+ [0x7D]="\\Ux{7D}",
+ [0x7E]="\\Ux{7E}",
+ }
+ local hash=table.setmetatableindex(spec,function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
end
- return a
end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local reparsedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ local hash=table.setmetatableindex(function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
+ end
+ end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local unescapedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ xml.reparsedentitylpeg=reparsedentity
+ xml.unescapedentitylpeg=unescapedentity
end
+local escaped=xml.escaped
+local unescaped=xml.unescaped
+local placeholders=xml.placeholders
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
return str
@@ -9987,14 +10656,18 @@ local name=name_yes+name_nop
local utfbom=lpegpatterns.utfbom
local spacing=C(space^0)
local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent=R("AF","af","09")^0
-local decentitycontent=R("09")^0
+local hexentitycontent=R("AF","af","09")^1
+local decentitycontent=R("09")^1
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
- )+(anyentitycontent/handle_any_entity)
+ )+(anyentitycontent/handle_any_entity_dtd)
+local parsedentity_text=P("#")/""*(
+ P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
+ )+(anyentitycontent/handle_any_entity_text)
local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
+local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
-local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
+local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1
local somespace=space^1
local optionalspace=space^0
local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote)
@@ -10004,7 +10677,7 @@ local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error
local attributevalue=value+wrongvalue
local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute
local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext=text_parsed/add_text
+local parsedtext=text_parsed
local unparsedtext=text_unparsed/add_text
local balanced=P { "["*((1-S"[]")+V(1))^0*"]" }
local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty
@@ -10019,21 +10692,52 @@ local endcdata=P("]]")*close
local someinstruction=C((1-endinstruction)^0)
local somecomment=C((1-endcomment )^0)
local somecdata=C((1-endcdata )^0)
-local function normalentity(k,v ) entities[k]=v end
-local function systementity(k,v,n) entities[k]=v end
-local function publicentity(k,v,n) entities[k]=v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k]=v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k]=v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k]=v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k]=v
+end
local begindoctype=open*P("!DOCTYPE")
local enddoctype=close
local beginset=P("[")
local endset=P("]")
+local wrdtypename=C((1-somespace-P(";"))^1)
local doctypename=C((1-somespace-close)^0)
local elementdoctype=optionalspace*P("<!ELEMENT")*(1-close)^0*close
local basiccomment=begincomment*((1-endcomment)^0)*endcomment
+local weirdentitytype=P("%")*(somespace*doctypename*somespace*value)/weirdentity
local normalentitytype=(doctypename*somespace*value)/normalentity
local publicentitytype=(doctypename*somespace*P("PUBLIC")*somespace*value)/publicentity
local systementitytype=(doctypename*somespace*P("SYSTEM")*somespace*value*somespace*P("NDATA")*somespace*doctypename)/systementity
-local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype)*optionalspace*close
-local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+basiccomment+space)^0*optionalspace*endset
+local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype+weirdentitytype)*optionalspace*close
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+local entityresolve=P("%")*(wrdtypename/weirdresolve )*P(";")+P("&")*(wrdtypename/normalresolve)*P(";")
+entitydoctype=entitydoctype+entityresolve
+local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+entityresolve+basiccomment+space)^0*optionalspace*endset
local definitiondoctype=doctypename*somespace*doctypeset
local publicdoctype=doctypename*somespace*P("PUBLIC")*somespace*value*somespace*value*somespace*doctypeset
local systemdoctype=doctypename*somespace*P("SYSTEM")*somespace*value*somespace*doctypeset
@@ -10045,11 +10749,15 @@ local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
-local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
-local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
-local grammar_parsed_text=P { "preamble",
- preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
+grammar_parsed_text_one=P { "preamble",
+ preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0,
+}
+grammar_parsed_text_two=P { "followup",
+ followup=V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
@@ -10059,37 +10767,26 @@ local grammar_unparsed_text=P { "preamble",
children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
- settings=settings or {}
- strip=settings.strip_cm_and_dt
- utfize=settings.utfize_entities
- resolve=settings.resolve_entities
- resolve_predefined=settings.resolve_predefined_entities
- unify_predefined=settings.unify_predefined_entities
- cleanup=settings.text_cleanup
- entities=settings.entities or {}
- if utfize==nil then
- settings.utfize_entities=true
- utfize=true
- end
- if resolve_predefined==nil then
- settings.resolve_predefined_entities=true
- resolve_predefined=true
- end
- stack,top,at,xmlns,errorstr={},{},{},{},nil
- acache,hcache,dcache={},{},{}
- reported_attribute_errors={}
+ settings=settings or {}
+ preparexmlstate(settings)
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1]=top
+ level=level+1
+ stack[level]=top
top.dt={}
dt=top.dt
+ nt=0
if not data or data=="" then
errorstr="empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m=lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m=lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ if m then
else
errorstr="invalid xml file - parsed text"
end
@@ -10105,8 +10802,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
-setmetatable(result,mt)
-setmetatable(result.dt[1],mt)
+ setmetatable(result,mt)
+ setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -10148,13 +10845,10 @@ setmetatable(result.dt[1],mt)
decimals=dcache,
hexadecimals=hcache,
names=acache,
+ intermediates=parameters,
}
}
- strip,utfize,resolve,resolve_predefined=nil,nil,nil,nil
- unify_predefined,cleanup,entities=nil,nil,nil
- stack,top,at,xmlns,errorstr=nil,nil,nil,nil,nil
- acache,hcache,dcache=nil,nil,nil
- reported_attribute_errors,mt,errorhandler=nil,nil,nil
+ preparexmlstate()
return result
end
local function xmlconvert(data,settings)
@@ -10216,15 +10910,15 @@ function xml.toxml(data)
return data
end
end
-local function copy(old,tables)
+local function copy(old)
if old then
- tables=tables or {}
local new={}
- if not tables[old] then
- tables[old]=new
- end
for k,v in next,old do
- new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v
+ if type(v)=="table" then
+ new[k]=table.copy(v)
+ else
+ new[k]=v
+ end
end
local mt=getmetatable(old)
if mt then
@@ -10257,22 +10951,34 @@ local function verbose_element(e,handlers,escape)
local ats=eat and next(eat) and {}
if ats then
local n=0
- for k,v in next,eat do
+ for k in next,eat do
n=n+1
- ats[n]=f_attribute(k,escaped(v))
+ ats[n]=k
+ end
+ if n==1 then
+ local k=ats[1]
+ ats=f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k=ats[i]
+ ats[i]=f_attribute(k,escaped(eat[k]))
+ end
+ ats=concat(ats," ")
end
end
if ern and trace_entities and ern~=ens then
ens=ern
end
+ local n=edt and #edt
if ens~="" then
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10283,19 +10989,19 @@ local function verbose_element(e,handlers,escape)
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10306,7 +11012,7 @@ local function verbose_element(e,handlers,escape)
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -10323,7 +11029,7 @@ local function verbose_cdata(e,handlers)
handlers.handle("<![CDATA[",e.dt[1],"]]>")
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">")
end
local function verbose_root(e,handlers)
handlers.serialize(e.dt,handlers)
@@ -10366,12 +11072,14 @@ local function serialize(e,handlers,...)
end
end
local function xserialize(e,handlers)
- local functions=handlers.functions
- local etg=e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions=handlers.functions
+ local etg=e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
local handlers={}
@@ -10603,7 +11311,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 48229, stripped down to: 30684
+-- original size: 53877, stripped down to: 32495
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -10618,10 +11326,23 @@ local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
-local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end
-local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end
-local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end
+local trace_lpath=false
+local trace_lparse=false
+local trace_lprofile=false
local report_lpath=logs.reporter("xml","lpath")
+if trackers then
+ trackers.register("xml.path",function(v)
+ trace_lpath=v
+ end)
+ trackers.register("xml.parse",function(v)
+ trace_lparse=v
+ end)
+ trackers.register("xml.profile",function(v)
+ trace_lpath=v
+ trace_lparse=v
+ trace_lprofile=v
+ end)
+end
local xml=xml
local lpathcalls=0 function xml.lpathcalls () return lpathcalls end
local lpathcached=0 function xml.lpathcached() return lpathcached end
@@ -10980,13 +11701,27 @@ local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==")
local lp_doequal=P("=")/"=="
local lp_or=P("|")/" or "
local lp_and=P("&")/" and "
-local lp_builtin=P (
- P("text")/"(ll.dt[1] or '')"+
- P("content")/"ll.dt"+
- P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+
- P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+
- P("ns")/"ll.ns"
- )*((spaces*P("(")*spaces*P(")"))/"")
+local builtin={
+ text="(ll.dt[1] or '')",
+ content="ll.dt",
+ name="((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag="ll.tg",
+ position="l",
+ firstindex="1",
+ firstelement="1",
+ first="1",
+ lastindex="(#ll.__p__.dt or 1)",
+ lastelement="(ll.__p__.en or 1)",
+ last="#list",
+ rootposition="order",
+ order="order",
+ element="(ll.ei or 1)",
+ index="(ll.ni or 1)",
+ match="(ll.mi or 1)",
+ namespace="ll.ns",
+ ns="ll.ns",
+}
+local lp_builtin=lpeg.utfchartabletopattern(builtin)/builtin*((spaces*P("(")*spaces*P(")"))/"")
local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])")
local lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0"
local lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))"
@@ -11044,6 +11779,7 @@ local template_f_y=[[
local template_f_n=[[
return xml.finalizers['%s']['%s']
]]
+local register_last_match={ kind="axis",axis="last-match" }
local register_self={ kind="axis",axis="self" }
local register_parent={ kind="axis",axis="parent" }
local register_descendant={ kind="axis",axis="descendant" }
@@ -11121,7 +11857,7 @@ local pathparser=Ct { "patterns",
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
- axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
+ axis=V("last_match")+V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
special=special_1+special_2+special_3,
initial=(P("/")*spaces*Cc(register_initial_child))^-1,
error=(P(1)^1)/register_error,
@@ -11147,6 +11883,7 @@ local pathparser=Ct { "patterns",
preceding=P('preceding::')*Cc(register_preceding ),
preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
+ last_match=P('last-match::')*Cc(register_last_match ),
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -11193,13 +11930,12 @@ local function tagstostring(list)
end
xml.nodesettostring=nodesettostring
local lpath
-local lshowoptions={ functions=false }
local function lshow(parsed)
if type(parsed)=="string" then
parsed=lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow=lshow
local function add_comment(p,str)
@@ -11265,140 +12001,168 @@ lpath=function (pattern)
end
end
xml.lpath=lpath
-local profiled={} xml.profiled=profiled
-local function profiled_apply(list,parsed,nofparsed,order)
- local p=profiled[parsed.pattern]
- if p then
- p.tested=p.tested+1
- else
- p={ tested=1,matched=0,finalized=0 }
- profiled[parsed.pattern]=p
- end
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- p.matched=p.matched+1
- p.finalized=p.finalized+1
- return collected
- end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
+do
+ local profiled={}
+ xml.profiled=profiled
+ local lastmatch=nil
+ local keepmatch=nil
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch=v
+ lastmatch=nil
+ end)
+ end
+ apply_axis["last-match"]=function()
+ return lastmatch or {}
+ end
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p=profiled[parsed.pattern]
+ if p then
+ p.tested=p.tested+1
+ else
+ p={ tested=1,matched=0,finalized=0 }
+ profiled[parsed.pattern]=p
+ end
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ p.matched=p.matched+1
p.finalized=p.finalized+1
return collected
end
- return nil
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ p.finalized=p.finalized+1
+ return collected
+ end
+ return nil
+ end
end
- end
- if collected then
- p.matched=p.matched+1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ if collected then
+ p.matched=p.matched+1
end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
- end
- end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- local axis=pi.axis
- if axis~="self" then
- collected=apply_axis[axis](collected)
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
end
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- return pi.finalizer(collected)
end
- if not collected or #collected==0 then
- local pf=i<nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected)
+ return collected
+ end
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ local axis=pi.axis
+ if axis~="self" then
+ collected=apply_axis[axis](collected)
+ end
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected==0 then
+ local pf=i<nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected)
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed=cache[pattern]
- if parsed then
- lpathcalls=lpathcalls+1
- lpathcached=lpathcached+1
- elseif type(pattern)=="table" then
- lpathcalls=lpathcalls+1
- parsed=pattern
- else
- parsed=lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply=normal_apply
+ if trackers then
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply=profiled_apply
+ elseif trace_lpath then
+ apply=traced_apply
+ else
+ apply=normal_apply
+ end
+ end)
end
- local nofparsed=#parsed
- if nofparsed==0 then
- return
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch=nil
+ return
+ end
+ local parsed=cache[pattern]
+ if parsed then
+ lpathcalls=lpathcalls+1
+ lpathcached=lpathcached+1
+ elseif type(pattern)=="table" then
+ lpathcalls=lpathcalls+1
+ parsed=pattern
+ else
+ parsed=lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch=nil
+ return
+ end
+ local nofparsed=#parsed
+ if nofparsed==0 then
+ lastmatch=nil
+ return
+ end
+ local collected=apply({ list },parsed,nofparsed,list.mi)
+ lastmatch=keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+ function xml.lastmatch()
+ return lastmatch
end
end
-xml.applylpath=applylpath
+local applylpath=xml.applylpath
function xml.filter(root,pattern)
return applylpath(root,pattern)
end
@@ -11676,7 +12440,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3684, stripped down to: 1957
+-- original size: 3787, stripped down to: 2003
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -11745,7 +12509,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28786, stripped down to: 20578
+-- original size: 30566, stripped down to: 21741
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12079,55 +12843,63 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek=collected[c]
local name=nil
local ekdt=ek.dt
- local ekat=ek.at
- local ekrt=ek.__p__
- local epdt=ekrt.dt
- if not attribute or attribute=="" then
- name=(type(ekdt)=="table" and ekdt[1]) or ekdt
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name=ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat=ek.at
+ local ekrt=ek.__p__
+ if ekrt then
+ local epdt=ekrt.dt
+ if not attribute or attribute=="" then
+ name=(type(ekdt)=="table" and ekdt[1]) or ekdt
end
- end
- end
- local data=nil
- if name and name~="" then
- data=loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data=="" then
- epdt[ek.ni]=""
- elseif ekat["parse"]=="text" then
- epdt[ek.ni]=xml.escaped(data)
- else
- local xi=xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni]=""
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name=ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child=xml.body(xi)
- child.__p__=ekrt
- child.__f__=name
- epdt[ek.ni]=child
- local inclusions=xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1]=name
- else
- xmldata.settings.inclusions={ name }
+ local data=nil
+ if name and name~="" then
+ data=loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions=xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1]=name
+ if not data or data=="" then
+ epdt[ek.ni]=""
+ elseif ekat["parse"]=="text" then
+ epdt[ek.ni]=xml.escaped(data)
+ else
+ local xi=xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni]=""
else
- xmldata.settings.badinclusions={ name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child=xml.body(xi)
+ child.__p__=ekrt
+ child.__f__=name
+ epdt[ek.ni]=child
+ local settings=xmldata.settings
+ local inclusions=settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1]=name
+ elseif settings then
+ settings.inclusions={ name }
+ else
+ settings={ inclusions={ name } }
+ xmldata.settings=settings
+ end
+ if child.er then
+ local badinclusions=settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12598,7 +13370,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10274, stripped down to: 7538
+-- original size: 10719, stripped down to: 7841
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -12976,7 +13748,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6351, stripped down to: 4919
+-- original size: 6534, stripped down to: 5072
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13146,7 +13918,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11085, stripped down to: 7662
+-- original size: 11445, stripped down to: 7830
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -13402,7 +14174,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 17216, stripped down to: 10657
+-- original size: 18619, stripped down to: 11042
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -13413,6 +14185,7 @@ if not modules then modules={} end modules ['data-exp']={
}
local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub
local concat,sort=table.concat,table.sort
+local sortedkeys=table.sortedkeys
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local Ct,Cs,Cc,Carg,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.P,lpeg.C,lpeg.S
local type,next=type,next
@@ -13758,14 +14531,16 @@ local nothing=function() end
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern)=="string" then
local pattern=lower(pattern)
- local files=content.files
+ local files=content.files
local remap=content.remap
if files and remap then
- local n=next(files)
+ local f=sortedkeys(files)
+ local n=#f
+ local i=0
local function iterator()
- while n do
- local k=n
- n=next(files,k)
+ while i<n do
+ i=i+1
+ local k=f[i]
if find(k,pattern) then
return files[k],remap and remap[k] or k
end
@@ -13784,7 +14559,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9216, stripped down to: 6798
+-- original size: 9649, stripped down to: 7131
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -13920,6 +14695,11 @@ local relations=allocate {
names={ 'fontconfig','fontconfig file','fontconfig files' },
variable='FONTCONFIG_PATH',
},
+ pk={
+ names={ "pk" },
+ variable='PKFONTS',
+ suffixes={ 'pk' },
+ },
},
obsolete={
enc={
@@ -14063,7 +14843,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 15618, stripped down to: 11629
+-- original size: 16066, stripped down to: 11938
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -14439,7 +15219,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5347, stripped down to: 4015
+-- original size: 5488, stripped down to: 4101
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -14558,7 +15338,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67003, stripped down to: 46291
+-- original size: 67241, stripped down to: 46427
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15828,10 +16608,18 @@ local function findfiles(filename,filetype,allresults)
return result or {},status
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
return filedirname(findfiles(filename,filetype,false)[1] or "")
@@ -16106,7 +16894,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 3950, stripped down to: 2935
+-- original size: 4092, stripped down to: 3016
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -16224,7 +17012,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 910, stripped down to: 823
+-- original size: 935, stripped down to: 838
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -16254,7 +17042,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 530, stripped down to: 475
+-- original size: 548, stripped down to: 483
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -16277,7 +17065,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3863, stripped down to: 3310
+-- original size: 3976, stripped down to: 3391
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -16385,7 +17173,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5010, stripped down to: 3588
+-- original size: 5148, stripped down to: 3680
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -16504,7 +17292,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 3899, stripped down to: 2984
+-- original size: 4000, stripped down to: 3052
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -16595,7 +17383,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 8772, stripped down to: 6841
+-- original size: 9036, stripped down to: 7041
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -16832,7 +17620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8479, stripped down to: 5580
+-- original size: 8712, stripped down to: 5726
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17021,7 +17809,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6569, stripped down to: 5304
+-- original size: 6779, stripped down to: 5444
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17202,7 +17990,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4313, stripped down to: 3227
+-- original size: 4447, stripped down to: 3302
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -17311,7 +18099,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2431, stripped down to: 1996
+-- original size: 2494, stripped down to: 2047
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -17378,7 +18166,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2601, stripped down to: 1627
+-- original size: 2674, stripped down to: 1658
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -17434,7 +18222,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2734, stripped down to: 2354
+-- original size: 2815, stripped down to: 2415
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -17514,7 +18302,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11549, stripped down to: 5905
+-- original size: 11846, stripped down to: 6059
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -17700,7 +18488,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5703, stripped down to: 2507
+-- original size: 5914, stripped down to: 2584
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -17803,7 +18591,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 5955, stripped down to: 4926
+-- original size: 6967, stripped down to: 5631
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -17832,7 +18620,7 @@ local function primaryflags()
end
return concat(flags," ")
end
-function environment.make_format(name)
+function environment.make_format(name,silent)
local engine=environment.ownmain or "luatex"
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
@@ -17889,9 +18677,23 @@ function environment.make_format(name)
lfs.chdir(olddir)
return
end
- local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command=format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result=os.execute(command)
+ local runtime=statistics.stoptiming()
+ if result~=0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name))
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime))
+ end
+ os.remove("temp.log")
+ else
+ local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
if mp then
@@ -17935,10 +18737,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 745793
--- stripped bytes : 269308
+-- original bytes : 796826
+-- stripped bytes : 289016
-- end library merge
@@ -17982,6 +18784,8 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
+ 'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
@@ -18037,13 +18841,21 @@ local ownlibs = { -- order can be made better
}
--- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/data-tmf.lua
+-- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/mkiv/data-tmf.lua
-- c:/data/develop/context/sources/data-tmf.lua
local ownlist = {
-- '.',
-- ownpath ,
owntree .. "/../../../../context/sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
index 5c09b3b44ff..6a4babe9961 100755
--- a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
+++ b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 3888, stripped down to: 2197
+-- original size: 4734, stripped down to: 2626
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -65,10 +65,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -111,21 +115,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -154,7 +170,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10587, stripped down to: 7815
+-- original size: 10949, stripped down to: 8037
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -444,7 +460,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36977, stripped down to: 20349
+-- original size: 38185, stripped down to: 20990
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -461,7 +477,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -481,7 +497,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -1248,7 +1264,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 361, stripped down to: 322
+-- original size: 372, stripped down to: 329
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1267,7 +1283,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5694, stripped down to: 2827
+-- original size: 5983, stripped down to: 2959
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1354,9 +1370,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1372,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 35724, stripped down to: 21525
+-- original size: 36997, stripped down to: 22376
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -2248,7 +2265,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2348,7 +2365,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 8643, stripped down to: 6232
+-- original size: 9001, stripped down to: 6512
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2663,7 +2680,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 4939, stripped down to: 2830
+-- original size: 5146, stripped down to: 2933
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2808,7 +2825,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 1923, stripped down to: 1133
+-- original size: 2010, stripped down to: 1186
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2881,7 +2898,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15832, stripped down to: 9456
+-- original size: 16390, stripped down to: 9734
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3263,7 +3280,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 20949, stripped down to: 9945
+-- original size: 21647, stripped down to: 10237
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3643,7 +3660,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1211, stripped down to: 1002
+-- original size: 1265, stripped down to: 1038
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3697,7 +3714,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3248, stripped down to: 2266
+-- original size: 3355, stripped down to: 2321
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3785,7 +3802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12531, stripped down to: 5721
+-- original size: 12897, stripped down to: 5882
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4002,7 +4019,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 16765, stripped down to: 11003
+-- original size: 17358, stripped down to: 11378
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4467,7 +4484,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1850, stripped down to: 1568
+-- original size: 1919, stripped down to: 1621
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4539,7 +4556,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37388, stripped down to: 15817
+-- original size: 38699, stripped down to: 16321
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4768,9 +4785,10 @@ if not utf.sub then
end
end
end
-function utf.remapper(mapping,option)
+function utf.remapper(mapping,option,action)
local variant=type(mapping)
if variant=="table" then
+ action=action or mapping
if option=="dynamic" then
local pattern=false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
@@ -4779,15 +4797,15 @@ function utf.remapper(mapping,option)
return ""
else
if not pattern then
- pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option=="pattern" then
- return Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
else
- local pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
return function(str)
if not str or str=="" then
return ""
@@ -5157,7 +5175,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 974, stripped down to: 890
+-- original size: 1012, stripped down to: 912
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5197,7 +5215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34513, stripped down to: 18943
+-- original size: 36053, stripped down to: 19685
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5368,7 +5386,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -5885,7 +5909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 25338, stripped down to: 16247
+-- original size: 28680, stripped down to: 18636
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -6314,19 +6338,21 @@ local f_val_str=formatters["%w%q,"]
local f_val_boo=formatters["%w%l,"]
local f_val_not=formatters["%w{},"]
local f_val_seq=formatters["%w{ %, t },"]
+local f_fin_seq=formatters[" %, t }"]
local f_table_return=formatters["return {"]
local f_table_name=formatters["%s={"]
local f_table_direct=formatters["{"]
local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
-local serialize=table.serialize
-function table.serialize(root,name,specification)
+local original_serialize=table.serialize
+local function serialize(root,name,specification)
if type(specification)=="table" then
- return serialize(root,name,specification)
+ return original_serialize(root,name,specification)
end
- local t
+ local t
local n=1
+ local unknown=false
local function simple_table(t)
local nt=#t
if nt>0 then
@@ -6337,6 +6363,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero=t[0]
if n==nt then
local tt={}
for i=1,nt do
@@ -6353,6 +6380,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ tt[i+1]=v
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
end
end
return nil
@@ -6401,7 +6445,7 @@ function table.serialize(root,name,specification)
elseif tv=="string" then
n=n+1 t[n]=f_val_str(depth,v)
elseif tv=="table" then
- if next(v)==nil then
+ if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
local st=simple_table(v)
@@ -6413,6 +6457,8 @@ function table.serialize(root,name,specification)
end
elseif tv=="boolean" then
n=n+1 t[n]=f_val_boo(depth,v)
+ elseif unknown then
+ n=n+1 t[n]=f_val_str(depth,tostring(v))
end
elseif tv=="number" then
if tk=="number" then
@@ -6421,6 +6467,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_num(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_num(depth,tostring(k),v)
end
elseif tv=="string" then
if tk=="number" then
@@ -6429,6 +6477,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_str(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),v)
end
elseif tv=="table" then
if next(v)==nil then
@@ -6438,6 +6488,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,k)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
local st=simple_table(v)
@@ -6449,6 +6501,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_seq(depth,k,st)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv=="boolean" then
@@ -6458,6 +6512,18 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_boo(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk=="number" then
+ n=n+1 t[n]=f_key_num_value_str(depth,k,tostring(v))
+ elseif tk=="string" then
+ n=n+1 t[n]=f_key_str_value_str(depth,k,tostring(v))
+ elseif tk=="boolean" then
+ n=n+1 t[n]=f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -6490,13 +6556,351 @@ function table.serialize(root,name,specification)
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- do_serialize(root,name,1,0)
+ local st=simple_table(root)
+ if st then
+ return t[1]..f_fin_seq(st)
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n=n+1
t[n]=f_table_finish()
return concat(t,"\n")
end
+table.serialize=serialize
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-fil"] = package.loaded["util-fil"] or true
+
+-- original size: 3577, stripped down to: 2870
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4264, stripped down to: 3349
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -6505,7 +6909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4172, stripped down to: 2953
+-- original size: 4100, stripped down to: 2852
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -6583,39 +6987,32 @@ local f_index={
["table"]=f_table,
["number"]=f_number,
}
-local t_index={
- ["empty"]={ __index=f_empty },
- ["self"]={ __index=f_self },
- ["table"]={ __index=f_table },
- ["number"]={ __index=f_number },
-}
function table.setmetatableindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__index=f_index[f] or f
+ m.__index=i
else
- setmetatable(t,t_index[f] or { __index=f })
+ setmetatable(t,{ __index=i })
end
return t
end
local f_index={
["ignore"]=f_ignore,
}
-local t_index={
- ["ignore"]={ __newindex=f_ignore },
-}
function table.setmetatablenewindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__newindex=f_index[f] or f
+ m.__newindex=i
else
- setmetatable(t,t_index[f] or { __newindex=f })
+ setmetatable(t,{ __newindex=i })
end
return t
end
@@ -6652,7 +7049,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 21780, stripped down to: 15121
+-- original size: 22839, stripped down to: 15769
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -6676,6 +7073,8 @@ local setmetatableindex=table.setmetatableindex
local sortedhash=table.sortedhash
local sortedkeys=table.sortedkeys
local tohash=table.tohash
+local hashes={}
+utilities.parsers.hashes=hashes
local digit=R("09")
local space=P(' ')
local equal=P("=")
@@ -6894,9 +7293,15 @@ function parsers.array_to_string(a,separator)
end
end
local pattern=Cf(Ct("")*Cg(C((1-S(", "))^1)*S(", ")^0*Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or {}
end
+hashes.settings_to_set=table.setmetatableindex(function(t,k)
+ local v=k and lpegmatch(pattern,k) or {}
+ t[k]=v
+ return v
+end)
+getmetatable(hashes.settings_to_set).__mode="kv"
function parsers.simple_hash_to_string(h,separator)
local t,tn={},0
for k,v in sortedhash(h) do
@@ -7173,7 +7578,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2274, stripped down to: 1781
+-- original size: 2350, stripped down to: 1847
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7254,7 +7659,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12482, stripped down to: 8864
+-- original size: 12862, stripped down to: 9104
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7567,7 +7972,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 29359, stripped down to: 20483
+-- original size: 30767, stripped down to: 21355
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -7610,6 +8015,9 @@ 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
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0)
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -7627,6 +8035,8 @@ if tex and (tex.jobname or tex.formatname) then
elseif target=="term" then
texio_write_nl("term","")
io_write(...)
+ elseif type(target)=="number" then
+ texio_write_nl(target,...)
elseif target~="none" then
texio_write_nl("log",target,...)
texio_write_nl("term","")
@@ -7644,6 +8054,8 @@ if tex and (tex.jobname or tex.formatname) then
texio_write("log",...)
elseif target=="term" then
io_write(...)
+ elseif type(target)=="number" then
+ texio_write(target,...)
elseif target~="none" then
texio_write("log",target,...)
io_write(target,...)
@@ -7714,7 +8126,7 @@ if tex and (tex.jobname or tex.formatname) then
write_nl(target,"\n")
end
report=function(a,b,c,...)
- if c then
+ 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]))
@@ -7725,7 +8137,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
direct=function(a,b,c,...)
- if c then
+ if c~=nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -7736,7 +8148,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subreport=function(a,s,b,c,...)
- if c then
+ 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]))
@@ -7747,7 +8159,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subdirect=function(a,s,b,c,...)
- if c then
+ 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])
@@ -7758,7 +8170,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
status=function(a,b,c,...)
- if c then
+ 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]))
@@ -8056,7 +8468,7 @@ function logs.messenger(category,subcategory)
end
end
end
-local function setblocked(category,value)
+local function setblocked(category,value)
if category==true then
category,value="*",true
elseif category==false then
@@ -8071,7 +8483,7 @@ local function setblocked(category,value)
end
else
states=utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c,_ in next,states do
+ for c in next,states do
local v=data[c]
if v then
v.state=value
@@ -8353,7 +8765,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6704, stripped down to: 5343
+-- original size: 6917, stripped down to: 5484
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8474,13 +8886,13 @@ function statistics.show()
end
end
register("lua properties",function()
- local list=status.list()
- local hashchar=tonumber(list.luatex_hashchars)
+ local hashchar=tonumber(status.luatex_hashchars)
+ local hashtype=status.luatex_hashtype
local mask=lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask=="utf" and "τεχ" or "tex")
@@ -8534,7 +8946,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 5829, stripped down to: 3501
+-- original size: 6039, stripped down to: 3616
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -8681,7 +9093,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 4982, stripped down to: 3511
+-- original size: 5142, stripped down to: 3611
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -8811,7 +9223,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 3898, stripped down to: 2644
+-- original size: 4030, stripped down to: 2718
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -8915,7 +9327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7757, stripped down to: 6015
+-- original size: 7985, stripped down to: 6153
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9092,7 +9504,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
--- original size: 7100, stripped down to: 3978
+-- original size: 7313, stripped down to: 4076
if not modules then modules={} end modules ['util-tpl']={
version=1.001,
@@ -9237,7 +9649,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8022, stripped down to: 5038
+-- original size: 8284, stripped down to: 5176
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9424,7 +9836,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6174, stripped down to: 4141
+-- original size: 6358, stripped down to: 4257
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9577,7 +9989,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 45848, stripped down to: 27914
+-- original size: 56973, stripped down to: 35872
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9586,7 +9998,7 @@ if not modules then modules={} end modules ['lxml-tab']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end)
+local trace_entities=false trackers .register("xml.entities",function(v) trace_entities=v end)
local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
@@ -9594,10 +10006,12 @@ local xml=xml
local concat,remove,insert=table.concat,table.remove,table.insert
local type,next,setmetatable,getmetatable,tonumber,rawset=type,next,setmetatable,getmetatable,tonumber,rawset
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
+local sort=table.sort
local utfchar=utf.char
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs
local formatters=string.formatters
+do
xml.xmlns=xml.xmlns or {}
local check=P(false)
local parse=check
@@ -9614,23 +10028,68 @@ end
function xml.resolvens(url)
return lpegmatch(parse,lower(url)) or ""
end
+end
local nsremap,resolvens=xml.xmlns,xml.resolvens
-local stack={}
-local top={}
-local dt={}
-local at={}
-local xmlns={}
-local errorstr=nil
-local entities={}
-local strip=false
-local cleanup=false
-local utfize=false
-local resolve_predefined=false
-local unify_predefined=false
-local dcache={}
-local hcache={}
-local acache={}
-local mt={}
+local stack,level,top,at,xmlnms,errorstr
+local entities,parameters
+local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined
+local dcache,hcache,acache
+local mt,dt,nt
+local function preparexmlstate(settings)
+ if settings then
+ stack={}
+ level=0
+ top={}
+ at={}
+ mt={}
+ dt={}
+ nt=0
+ xmlns={}
+ errorstr=nil
+ strip=settings.strip_cm_and_dt
+ utfize=settings.utfize_entities
+ resolve=settings.resolve_entities
+ resolve_predefined=settings.resolve_predefined_entities
+ unify_predefined=settings.unify_predefined_entities
+ cleanup=settings.text_cleanup
+ entities=settings.entities or {}
+ parameters={}
+ reported_at_errors={}
+ dcache={}
+ hcache={}
+ acache={}
+ if utfize==nil then
+ settings.utfize_entities=true
+ utfize=true
+ end
+ if resolve_predefined==nil then
+ settings.resolve_predefined_entities=true
+ resolve_predefined=true
+ end
+ else
+ stack=nil
+ level=nil
+ top=nil
+ at=nil
+ mt=nil
+ dt=nil
+ nt=nil
+ xmlns=nil
+ errorstr=nil
+ strip=nil
+ utfize=nil
+ resolve=nil
+ resolve_predefined=nil
+ unify_predefined=nil
+ cleanup=nil
+ entities=nil
+ parameters=nil
+ reported_at_errors=nil
+ dcache=nil
+ hcache=nil
+ acache=nil
+ end
+end
local function initialize_mt(root)
mt={ __index=root }
end
@@ -9640,8 +10099,9 @@ end
function xml.checkerror(top,toclose)
return ""
end
+local checkns=xml.checkns
local function add_attribute(namespace,tag,value)
- if cleanup and #value>0 then
+ if cleanup and value~="" then
value=cleanup(value)
end
if tag=="xmlns" then
@@ -9650,21 +10110,30 @@ local function add_attribute(namespace,tag,value)
elseif namespace=="" then
at[tag]=value
elseif namespace=="xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:"..tag]=value
else
at[namespace..":"..tag]=value
end
end
local function add_empty(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top=stack[#stack]
+ top=stack[level]
dt=top.dt
- local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top }
- dt[#dt+1]=t
+ nt=#dt+1
+ local t={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=top
+ }
+ dt[nt]=t
setmetatable(t,mt)
if at.xmlns then
remove(xmlns)
@@ -9672,23 +10141,35 @@ local function add_empty(spacing,namespace,tag)
at={}
end
local function add_begin(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] }
+ top={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=stack[level]
+ }
setmetatable(top,mt)
dt=top.dt
- stack[#stack+1]=top
+ nt=#dt
+ level=level+1
+ stack[level]=top
at={}
end
local function add_end(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
- local toclose=remove(stack)
- top=stack[#stack]
- if #stack<1 then
+ local toclose=stack[level]
+ level=level-1
+ top=stack[level]
+ if level<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg~=tag then
@@ -9696,202 +10177,236 @@ local function add_end(spacing,namespace,tag)
report_xml(errorstr)
end
dt=top.dt
- dt[#dt+1]=toclose
+ nt=#dt+1
+ dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
end
end
-local spaceonly=lpegpatterns.whitespace^0*P(-1)
local function add_text(text)
- local n=#dt
- if cleanup and #text>0 then
- if n>0 then
- local s=dt[n]
+ if text=="" then
+ return
+ end
+ if cleanup then
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..cleanup(text)
+ dt[nt]=s..cleanup(text)
else
- dt[n+1]=cleanup(text)
+ nt=nt+1
+ dt[nt]=cleanup(text)
end
else
+ nt=1
dt[1]=cleanup(text)
end
else
- if n>0 then
- local s=dt[n]
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..text
+ dt[nt]=s..text
else
- dt[n+1]=text
+ nt=nt+1
+ dt[nt]=text
end
else
+ nt=1
dt[1]=text
end
end
end
local function add_special(what,spacing,text)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
if strip and (what=="@cm@" or what=="@dt@") then
else
- dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } }
+ nt=nt+1
+ dt[nt]={ special=true,ns="",tg=what,dt={ text } }
end
end
local function set_message(txt)
errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors={}
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
-local badentity="&error;"
-local badentity="&"
-xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
-}
-local placeholders=xml.placeholders
-local function fromhex(s)
- local n=tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s),true
- end
-end
-local function fromdec(s)
- local n=tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s),true
- end
-end
-local p_rest=(1-P(";"))^0
-local p_many=P(1)^0
-local p_char=lpegpatterns.utf8character
-local parsedentity=P("&")*(P("#x")*(p_rest/fromhex)+P("#")*(p_rest/fromdec))*P(";")*P(-1)+(P("#x")*(p_many/fromhex)+P("#")*(p_many/fromdec))
-local predefined_unified={
- [38]="&amp;",
- [42]="&quot;",
- [47]="&apos;",
- [74]="&lt;",
- [76]="&gt;",
-}
-local predefined_simplified={
- [38]="&",amp="&",
- [42]='"',quot='"',
- [47]="'",apos="'",
- [74]="<",lt="<",
- [76]=">",gt=">",
-}
-local nofprivates=0xF0000
-local privates_u={
- [ [[&]] ]="&amp;",
- [ [["]] ]="&quot;",
- [ [[']] ]="&apos;",
- [ [[<]] ]="&lt;",
- [ [[>]] ]="&gt;",
-}
-local privates_p={}
-local privates_n={
-}
-local escaped=utf.remapper(privates_u,"dynamic")
-local unprivatized=utf.remapper(privates_p,"dynamic")
-xml.unprivatized=unprivatized
-local function unescaped(s)
- local p=privates_n[s]
- if not p then
- nofprivates=nofprivates+1
- p=utfchar(nofprivates)
- privates_n[s]=p
- s="&"..s..";"
- privates_u[p]=s
- privates_p[p]=s
+local grammar_parsed_text_one
+local grammar_parsed_text_two
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
+do
+ local badentity="&"
+ xml.placeholders={
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
+ }
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s),true
+ end
end
- return p
-end
-xml.privatetoken=unescaped
-xml.privatecodes=privates_n
-local function handle_hex_entity(str)
- local h=hcache[str]
- if not h then
- local n=tonumber(str,16)
- h=unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return utfchar(n)
else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
- end
- h="&#x"..str..";"
+ return formatters["d:%s"](s),true
+ end
+ end
+ local p_rest=(1-P(";"))^0
+ local p_many=P(1)^0
+ local p_char=lpegpatterns.utf8character
+ local parsedentity=P("&#")*(P("x")*(p_rest/fromhex)+(p_rest/fromdec))*P(";")*P(-1)+P ("#")*(P("x")*(p_many/fromhex)+(p_many/fromdec))
+ xml.parsedentitylpeg=parsedentity
+ local predefined_unified={
+ [38]="&amp;",
+ [42]="&quot;",
+ [47]="&apos;",
+ [74]="&lt;",
+ [76]="&gt;",
+ }
+ local predefined_simplified={
+ [38]="&",amp="&",
+ [42]='"',quot='"',
+ [47]="'",apos="'",
+ [74]="<",lt="<",
+ [76]=">",gt=">",
+ }
+ local nofprivates=0xF0000
+ local privates_u={
+ [ [[&]] ]="&amp;",
+ [ [["]] ]="&quot;",
+ [ [[']] ]="&apos;",
+ [ [[<]] ]="&lt;",
+ [ [[>]] ]="&gt;",
+ }
+ local privates_p={
+ }
+ local privates_s={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[&]] ]="&U+26;",
+ [ [[']] ]="&U+27;",
+ [ [[<]] ]="&U+3C;",
+ [ [[>]] ]="&U+3E;",
+ [ [[\]] ]="&U+5C;",
+ [ [[{]] ]="&U+7B;",
+ [ [[|]] ]="&U+7C;",
+ [ [[}]] ]="&U+7D;",
+ [ [[~]] ]="&U+7E;",
+ }
+ local privates_n={
+ }
+ local escaped=utf.remapper(privates_u,"dynamic")
+ local unprivatized=utf.remapper(privates_p,"dynamic")
+ local unspecialized=utf.remapper(privates_s,"dynamic")
+ xml.unprivatized=unprivatized
+ xml.unspecialized=unspecialized
+ xml.escaped=escaped
+ local function unescaped(s)
+ local p=privates_n[s]
+ if not p then
+ nofprivates=nofprivates+1
+ p=utfchar(nofprivates)
+ privates_n[s]=p
+ s="&"..s..";"
+ privates_u[p]=s
+ privates_p[p]=s
+ privates_s[p]=s
end
- hcache[str]=h
+ return p
end
- return h
-end
-local function handle_dec_entity(str)
- local d=dcache[str]
- if not d then
- local n=tonumber(str)
- d=unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ xml.privatetoken=unescaped
+ xml.privatecodes=privates_n
+ xml.specialcodes=privates_s
+ function xml.addspecialcode(key,value)
+ privates_s[key]=value or "&"..s..";"
+ end
+ handle_hex_entity=function(str)
+ local h=hcache[str]
+ if not h then
+ local n=tonumber(str,16)
+ h=unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h="&#x"..str..";"
end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ hcache[str]=h
+ end
+ return h
+ end
+ handle_dec_entity=function(str)
+ local d=dcache[str]
+ if not d then
+ local n=tonumber(str)
+ d=unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d="&#"..str..";"
end
- d="&#"..str..";"
+ dcache[str]=d
end
- dcache[str]=d
+ return d
end
- return d
-end
-xml.parsedentitylpeg=parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve)=="function" then
- a=resolve(str) or entities[str]
+ a=resolve(str,entities) or entities[str]
else
a=entities[str]
end
@@ -9927,40 +10442,194 @@ local function handle_any_entity(str)
end
end
end
- acache[str]=a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str]=a
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
+ end
end
+ return a
end
- return a
- else
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ end
+ handle_any_entity_text=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
- acache[str]=a
if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str=="" then
- if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a=badentity
- acache[str]=a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve)=="function" then
+ a=resolve(str,entities) or entities[str]
+ else
+ a=entities[str]
+ end
+ if a then
+ if type(a)=="function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a=a(str) or ""
+ end
+ a=lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a)=="number" then
+ return ""
+ else
+ a=lpegmatch(parsedentity,a) or a
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity=placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a=unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str=="" then
+ a=badentity
+ else
+ a="&"..str..";"
+ end
+ end
+ end
+ end
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
end
- a=unescaped(str)
- acache[str]=a
end
+ return a
+ end
+ end
+ local p_rest=(1-P(";"))^1
+ local spec={
+ [0x23]="\\Ux{23}",
+ [0x24]="\\Ux{24}",
+ [0x25]="\\Ux{25}",
+ [0x5C]="\\Ux{5C}",
+ [0x7B]="\\Ux{7B}",
+ [0x7C]="\\Ux{7C}",
+ [0x7D]="\\Ux{7D}",
+ [0x7E]="\\Ux{7E}",
+ }
+ local hash=table.setmetatableindex(spec,function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
end
- return a
end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local reparsedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ local hash=table.setmetatableindex(function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
+ end
+ end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local unescapedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ xml.reparsedentitylpeg=reparsedentity
+ xml.unescapedentitylpeg=unescapedentity
end
+local escaped=xml.escaped
+local unescaped=xml.unescaped
+local placeholders=xml.placeholders
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
return str
@@ -9987,14 +10656,18 @@ local name=name_yes+name_nop
local utfbom=lpegpatterns.utfbom
local spacing=C(space^0)
local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent=R("AF","af","09")^0
-local decentitycontent=R("09")^0
+local hexentitycontent=R("AF","af","09")^1
+local decentitycontent=R("09")^1
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
- )+(anyentitycontent/handle_any_entity)
+ )+(anyentitycontent/handle_any_entity_dtd)
+local parsedentity_text=P("#")/""*(
+ P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
+ )+(anyentitycontent/handle_any_entity_text)
local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
+local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
-local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
+local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1
local somespace=space^1
local optionalspace=space^0
local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote)
@@ -10004,7 +10677,7 @@ local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error
local attributevalue=value+wrongvalue
local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute
local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext=text_parsed/add_text
+local parsedtext=text_parsed
local unparsedtext=text_unparsed/add_text
local balanced=P { "["*((1-S"[]")+V(1))^0*"]" }
local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty
@@ -10019,21 +10692,52 @@ local endcdata=P("]]")*close
local someinstruction=C((1-endinstruction)^0)
local somecomment=C((1-endcomment )^0)
local somecdata=C((1-endcdata )^0)
-local function normalentity(k,v ) entities[k]=v end
-local function systementity(k,v,n) entities[k]=v end
-local function publicentity(k,v,n) entities[k]=v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k]=v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k]=v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k]=v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k]=v
+end
local begindoctype=open*P("!DOCTYPE")
local enddoctype=close
local beginset=P("[")
local endset=P("]")
+local wrdtypename=C((1-somespace-P(";"))^1)
local doctypename=C((1-somespace-close)^0)
local elementdoctype=optionalspace*P("<!ELEMENT")*(1-close)^0*close
local basiccomment=begincomment*((1-endcomment)^0)*endcomment
+local weirdentitytype=P("%")*(somespace*doctypename*somespace*value)/weirdentity
local normalentitytype=(doctypename*somespace*value)/normalentity
local publicentitytype=(doctypename*somespace*P("PUBLIC")*somespace*value)/publicentity
local systementitytype=(doctypename*somespace*P("SYSTEM")*somespace*value*somespace*P("NDATA")*somespace*doctypename)/systementity
-local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype)*optionalspace*close
-local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+basiccomment+space)^0*optionalspace*endset
+local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype+weirdentitytype)*optionalspace*close
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+local entityresolve=P("%")*(wrdtypename/weirdresolve )*P(";")+P("&")*(wrdtypename/normalresolve)*P(";")
+entitydoctype=entitydoctype+entityresolve
+local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+entityresolve+basiccomment+space)^0*optionalspace*endset
local definitiondoctype=doctypename*somespace*doctypeset
local publicdoctype=doctypename*somespace*P("PUBLIC")*somespace*value*somespace*value*somespace*doctypeset
local systemdoctype=doctypename*somespace*P("SYSTEM")*somespace*value*somespace*doctypeset
@@ -10045,11 +10749,15 @@ local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
-local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
-local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
-local grammar_parsed_text=P { "preamble",
- preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
+grammar_parsed_text_one=P { "preamble",
+ preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0,
+}
+grammar_parsed_text_two=P { "followup",
+ followup=V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
@@ -10059,37 +10767,26 @@ local grammar_unparsed_text=P { "preamble",
children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
- settings=settings or {}
- strip=settings.strip_cm_and_dt
- utfize=settings.utfize_entities
- resolve=settings.resolve_entities
- resolve_predefined=settings.resolve_predefined_entities
- unify_predefined=settings.unify_predefined_entities
- cleanup=settings.text_cleanup
- entities=settings.entities or {}
- if utfize==nil then
- settings.utfize_entities=true
- utfize=true
- end
- if resolve_predefined==nil then
- settings.resolve_predefined_entities=true
- resolve_predefined=true
- end
- stack,top,at,xmlns,errorstr={},{},{},{},nil
- acache,hcache,dcache={},{},{}
- reported_attribute_errors={}
+ settings=settings or {}
+ preparexmlstate(settings)
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1]=top
+ level=level+1
+ stack[level]=top
top.dt={}
dt=top.dt
+ nt=0
if not data or data=="" then
errorstr="empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m=lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m=lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ if m then
else
errorstr="invalid xml file - parsed text"
end
@@ -10105,8 +10802,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
-setmetatable(result,mt)
-setmetatable(result.dt[1],mt)
+ setmetatable(result,mt)
+ setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -10148,13 +10845,10 @@ setmetatable(result.dt[1],mt)
decimals=dcache,
hexadecimals=hcache,
names=acache,
+ intermediates=parameters,
}
}
- strip,utfize,resolve,resolve_predefined=nil,nil,nil,nil
- unify_predefined,cleanup,entities=nil,nil,nil
- stack,top,at,xmlns,errorstr=nil,nil,nil,nil,nil
- acache,hcache,dcache=nil,nil,nil
- reported_attribute_errors,mt,errorhandler=nil,nil,nil
+ preparexmlstate()
return result
end
local function xmlconvert(data,settings)
@@ -10216,15 +10910,15 @@ function xml.toxml(data)
return data
end
end
-local function copy(old,tables)
+local function copy(old)
if old then
- tables=tables or {}
local new={}
- if not tables[old] then
- tables[old]=new
- end
for k,v in next,old do
- new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v
+ if type(v)=="table" then
+ new[k]=table.copy(v)
+ else
+ new[k]=v
+ end
end
local mt=getmetatable(old)
if mt then
@@ -10257,22 +10951,34 @@ local function verbose_element(e,handlers,escape)
local ats=eat and next(eat) and {}
if ats then
local n=0
- for k,v in next,eat do
+ for k in next,eat do
n=n+1
- ats[n]=f_attribute(k,escaped(v))
+ ats[n]=k
+ end
+ if n==1 then
+ local k=ats[1]
+ ats=f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k=ats[i]
+ ats[i]=f_attribute(k,escaped(eat[k]))
+ end
+ ats=concat(ats," ")
end
end
if ern and trace_entities and ern~=ens then
ens=ern
end
+ local n=edt and #edt
if ens~="" then
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10283,19 +10989,19 @@ local function verbose_element(e,handlers,escape)
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10306,7 +11012,7 @@ local function verbose_element(e,handlers,escape)
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -10323,7 +11029,7 @@ local function verbose_cdata(e,handlers)
handlers.handle("<![CDATA[",e.dt[1],"]]>")
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">")
end
local function verbose_root(e,handlers)
handlers.serialize(e.dt,handlers)
@@ -10366,12 +11072,14 @@ local function serialize(e,handlers,...)
end
end
local function xserialize(e,handlers)
- local functions=handlers.functions
- local etg=e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions=handlers.functions
+ local etg=e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
local handlers={}
@@ -10603,7 +11311,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 48229, stripped down to: 30684
+-- original size: 53877, stripped down to: 32495
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -10618,10 +11326,23 @@ local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
-local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end
-local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end
-local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end
+local trace_lpath=false
+local trace_lparse=false
+local trace_lprofile=false
local report_lpath=logs.reporter("xml","lpath")
+if trackers then
+ trackers.register("xml.path",function(v)
+ trace_lpath=v
+ end)
+ trackers.register("xml.parse",function(v)
+ trace_lparse=v
+ end)
+ trackers.register("xml.profile",function(v)
+ trace_lpath=v
+ trace_lparse=v
+ trace_lprofile=v
+ end)
+end
local xml=xml
local lpathcalls=0 function xml.lpathcalls () return lpathcalls end
local lpathcached=0 function xml.lpathcached() return lpathcached end
@@ -10980,13 +11701,27 @@ local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==")
local lp_doequal=P("=")/"=="
local lp_or=P("|")/" or "
local lp_and=P("&")/" and "
-local lp_builtin=P (
- P("text")/"(ll.dt[1] or '')"+
- P("content")/"ll.dt"+
- P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+
- P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+
- P("ns")/"ll.ns"
- )*((spaces*P("(")*spaces*P(")"))/"")
+local builtin={
+ text="(ll.dt[1] or '')",
+ content="ll.dt",
+ name="((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag="ll.tg",
+ position="l",
+ firstindex="1",
+ firstelement="1",
+ first="1",
+ lastindex="(#ll.__p__.dt or 1)",
+ lastelement="(ll.__p__.en or 1)",
+ last="#list",
+ rootposition="order",
+ order="order",
+ element="(ll.ei or 1)",
+ index="(ll.ni or 1)",
+ match="(ll.mi or 1)",
+ namespace="ll.ns",
+ ns="ll.ns",
+}
+local lp_builtin=lpeg.utfchartabletopattern(builtin)/builtin*((spaces*P("(")*spaces*P(")"))/"")
local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])")
local lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0"
local lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))"
@@ -11044,6 +11779,7 @@ local template_f_y=[[
local template_f_n=[[
return xml.finalizers['%s']['%s']
]]
+local register_last_match={ kind="axis",axis="last-match" }
local register_self={ kind="axis",axis="self" }
local register_parent={ kind="axis",axis="parent" }
local register_descendant={ kind="axis",axis="descendant" }
@@ -11121,7 +11857,7 @@ local pathparser=Ct { "patterns",
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
- axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
+ axis=V("last_match")+V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
special=special_1+special_2+special_3,
initial=(P("/")*spaces*Cc(register_initial_child))^-1,
error=(P(1)^1)/register_error,
@@ -11147,6 +11883,7 @@ local pathparser=Ct { "patterns",
preceding=P('preceding::')*Cc(register_preceding ),
preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
+ last_match=P('last-match::')*Cc(register_last_match ),
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -11193,13 +11930,12 @@ local function tagstostring(list)
end
xml.nodesettostring=nodesettostring
local lpath
-local lshowoptions={ functions=false }
local function lshow(parsed)
if type(parsed)=="string" then
parsed=lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow=lshow
local function add_comment(p,str)
@@ -11265,140 +12001,168 @@ lpath=function (pattern)
end
end
xml.lpath=lpath
-local profiled={} xml.profiled=profiled
-local function profiled_apply(list,parsed,nofparsed,order)
- local p=profiled[parsed.pattern]
- if p then
- p.tested=p.tested+1
- else
- p={ tested=1,matched=0,finalized=0 }
- profiled[parsed.pattern]=p
- end
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- p.matched=p.matched+1
- p.finalized=p.finalized+1
- return collected
- end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
+do
+ local profiled={}
+ xml.profiled=profiled
+ local lastmatch=nil
+ local keepmatch=nil
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch=v
+ lastmatch=nil
+ end)
+ end
+ apply_axis["last-match"]=function()
+ return lastmatch or {}
+ end
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p=profiled[parsed.pattern]
+ if p then
+ p.tested=p.tested+1
+ else
+ p={ tested=1,matched=0,finalized=0 }
+ profiled[parsed.pattern]=p
+ end
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ p.matched=p.matched+1
p.finalized=p.finalized+1
return collected
end
- return nil
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ p.finalized=p.finalized+1
+ return collected
+ end
+ return nil
+ end
end
- end
- if collected then
- p.matched=p.matched+1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ if collected then
+ p.matched=p.matched+1
end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
- end
- end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- local axis=pi.axis
- if axis~="self" then
- collected=apply_axis[axis](collected)
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
end
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- return pi.finalizer(collected)
end
- if not collected or #collected==0 then
- local pf=i<nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected)
+ return collected
+ end
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ local axis=pi.axis
+ if axis~="self" then
+ collected=apply_axis[axis](collected)
+ end
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected==0 then
+ local pf=i<nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected)
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed=cache[pattern]
- if parsed then
- lpathcalls=lpathcalls+1
- lpathcached=lpathcached+1
- elseif type(pattern)=="table" then
- lpathcalls=lpathcalls+1
- parsed=pattern
- else
- parsed=lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply=normal_apply
+ if trackers then
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply=profiled_apply
+ elseif trace_lpath then
+ apply=traced_apply
+ else
+ apply=normal_apply
+ end
+ end)
end
- local nofparsed=#parsed
- if nofparsed==0 then
- return
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch=nil
+ return
+ end
+ local parsed=cache[pattern]
+ if parsed then
+ lpathcalls=lpathcalls+1
+ lpathcached=lpathcached+1
+ elseif type(pattern)=="table" then
+ lpathcalls=lpathcalls+1
+ parsed=pattern
+ else
+ parsed=lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch=nil
+ return
+ end
+ local nofparsed=#parsed
+ if nofparsed==0 then
+ lastmatch=nil
+ return
+ end
+ local collected=apply({ list },parsed,nofparsed,list.mi)
+ lastmatch=keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+ function xml.lastmatch()
+ return lastmatch
end
end
-xml.applylpath=applylpath
+local applylpath=xml.applylpath
function xml.filter(root,pattern)
return applylpath(root,pattern)
end
@@ -11676,7 +12440,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3684, stripped down to: 1957
+-- original size: 3787, stripped down to: 2003
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -11745,7 +12509,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28786, stripped down to: 20578
+-- original size: 30566, stripped down to: 21741
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12079,55 +12843,63 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek=collected[c]
local name=nil
local ekdt=ek.dt
- local ekat=ek.at
- local ekrt=ek.__p__
- local epdt=ekrt.dt
- if not attribute or attribute=="" then
- name=(type(ekdt)=="table" and ekdt[1]) or ekdt
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name=ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat=ek.at
+ local ekrt=ek.__p__
+ if ekrt then
+ local epdt=ekrt.dt
+ if not attribute or attribute=="" then
+ name=(type(ekdt)=="table" and ekdt[1]) or ekdt
end
- end
- end
- local data=nil
- if name and name~="" then
- data=loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data=="" then
- epdt[ek.ni]=""
- elseif ekat["parse"]=="text" then
- epdt[ek.ni]=xml.escaped(data)
- else
- local xi=xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni]=""
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name=ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child=xml.body(xi)
- child.__p__=ekrt
- child.__f__=name
- epdt[ek.ni]=child
- local inclusions=xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1]=name
- else
- xmldata.settings.inclusions={ name }
+ local data=nil
+ if name and name~="" then
+ data=loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions=xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1]=name
+ if not data or data=="" then
+ epdt[ek.ni]=""
+ elseif ekat["parse"]=="text" then
+ epdt[ek.ni]=xml.escaped(data)
+ else
+ local xi=xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni]=""
else
- xmldata.settings.badinclusions={ name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child=xml.body(xi)
+ child.__p__=ekrt
+ child.__f__=name
+ epdt[ek.ni]=child
+ local settings=xmldata.settings
+ local inclusions=settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1]=name
+ elseif settings then
+ settings.inclusions={ name }
+ else
+ settings={ inclusions={ name } }
+ xmldata.settings=settings
+ end
+ if child.er then
+ local badinclusions=settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12598,7 +13370,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10274, stripped down to: 7538
+-- original size: 10719, stripped down to: 7841
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -12976,7 +13748,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6351, stripped down to: 4919
+-- original size: 6534, stripped down to: 5072
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13146,7 +13918,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11085, stripped down to: 7662
+-- original size: 11445, stripped down to: 7830
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -13402,7 +14174,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 17216, stripped down to: 10657
+-- original size: 18619, stripped down to: 11042
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -13413,6 +14185,7 @@ if not modules then modules={} end modules ['data-exp']={
}
local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub
local concat,sort=table.concat,table.sort
+local sortedkeys=table.sortedkeys
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local Ct,Cs,Cc,Carg,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.P,lpeg.C,lpeg.S
local type,next=type,next
@@ -13758,14 +14531,16 @@ local nothing=function() end
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern)=="string" then
local pattern=lower(pattern)
- local files=content.files
+ local files=content.files
local remap=content.remap
if files and remap then
- local n=next(files)
+ local f=sortedkeys(files)
+ local n=#f
+ local i=0
local function iterator()
- while n do
- local k=n
- n=next(files,k)
+ while i<n do
+ i=i+1
+ local k=f[i]
if find(k,pattern) then
return files[k],remap and remap[k] or k
end
@@ -13784,7 +14559,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9216, stripped down to: 6798
+-- original size: 9649, stripped down to: 7131
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -13920,6 +14695,11 @@ local relations=allocate {
names={ 'fontconfig','fontconfig file','fontconfig files' },
variable='FONTCONFIG_PATH',
},
+ pk={
+ names={ "pk" },
+ variable='PKFONTS',
+ suffixes={ 'pk' },
+ },
},
obsolete={
enc={
@@ -14063,7 +14843,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 15618, stripped down to: 11629
+-- original size: 16066, stripped down to: 11938
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -14439,7 +15219,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5347, stripped down to: 4015
+-- original size: 5488, stripped down to: 4101
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -14558,7 +15338,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67003, stripped down to: 46291
+-- original size: 67241, stripped down to: 46427
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15828,10 +16608,18 @@ local function findfiles(filename,filetype,allresults)
return result or {},status
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
return filedirname(findfiles(filename,filetype,false)[1] or "")
@@ -16106,7 +16894,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 3950, stripped down to: 2935
+-- original size: 4092, stripped down to: 3016
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -16224,7 +17012,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 910, stripped down to: 823
+-- original size: 935, stripped down to: 838
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -16254,7 +17042,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 530, stripped down to: 475
+-- original size: 548, stripped down to: 483
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -16277,7 +17065,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3863, stripped down to: 3310
+-- original size: 3976, stripped down to: 3391
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -16385,7 +17173,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5010, stripped down to: 3588
+-- original size: 5148, stripped down to: 3680
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -16504,7 +17292,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 3899, stripped down to: 2984
+-- original size: 4000, stripped down to: 3052
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -16595,7 +17383,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 8772, stripped down to: 6841
+-- original size: 9036, stripped down to: 7041
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -16832,7 +17620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8479, stripped down to: 5580
+-- original size: 8712, stripped down to: 5726
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17021,7 +17809,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6569, stripped down to: 5304
+-- original size: 6779, stripped down to: 5444
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17202,7 +17990,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4313, stripped down to: 3227
+-- original size: 4447, stripped down to: 3302
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -17311,7 +18099,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2431, stripped down to: 1996
+-- original size: 2494, stripped down to: 2047
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -17378,7 +18166,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2601, stripped down to: 1627
+-- original size: 2674, stripped down to: 1658
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -17434,7 +18222,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2734, stripped down to: 2354
+-- original size: 2815, stripped down to: 2415
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -17514,7 +18302,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11549, stripped down to: 5905
+-- original size: 11846, stripped down to: 6059
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -17700,7 +18488,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5703, stripped down to: 2507
+-- original size: 5914, stripped down to: 2584
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -17803,7 +18591,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 5955, stripped down to: 4926
+-- original size: 6967, stripped down to: 5631
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -17832,7 +18620,7 @@ local function primaryflags()
end
return concat(flags," ")
end
-function environment.make_format(name)
+function environment.make_format(name,silent)
local engine=environment.ownmain or "luatex"
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
@@ -17889,9 +18677,23 @@ function environment.make_format(name)
lfs.chdir(olddir)
return
end
- local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command=format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result=os.execute(command)
+ local runtime=statistics.stoptiming()
+ if result~=0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name))
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime))
+ end
+ os.remove("temp.log")
+ else
+ local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
if mp then
@@ -17935,10 +18737,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 745793
--- stripped bytes : 269308
+-- original bytes : 796826
+-- stripped bytes : 289016
-- end library merge
@@ -17982,6 +18784,8 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
+ 'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
@@ -18037,13 +18841,21 @@ local ownlibs = { -- order can be made better
}
--- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/data-tmf.lua
+-- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/mkiv/data-tmf.lua
-- c:/data/develop/context/sources/data-tmf.lua
local ownlist = {
-- '.',
-- ownpath ,
owntree .. "/../../../../context/sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
diff --git a/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua b/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
index 5c09b3b44ff..6a4babe9961 100644
--- a/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 3888, stripped down to: 2197
+-- original size: 4734, stripped down to: 2626
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -65,10 +65,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -111,21 +115,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -154,7 +170,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-package"] = package.loaded["l-package"] or true
--- original size: 10587, stripped down to: 7815
+-- original size: 10949, stripped down to: 8037
if not modules then modules={} end modules ['l-package']={
version=1.001,
@@ -444,7 +460,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36977, stripped down to: 20349
+-- original size: 38185, stripped down to: 20990
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -461,7 +477,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -481,7 +497,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -1248,7 +1264,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-function"] = package.loaded["l-function"] or true
--- original size: 361, stripped down to: 322
+-- original size: 372, stripped down to: 329
if not modules then modules={} end modules ['l-functions']={
version=1.001,
@@ -1267,7 +1283,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-string"] = package.loaded["l-string"] or true
--- original size: 5694, stripped down to: 2827
+-- original size: 5983, stripped down to: 2959
if not modules then modules={} end modules ['l-string']={
version=1.001,
@@ -1354,9 +1370,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1372,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 35724, stripped down to: 21525
+-- original size: 36997, stripped down to: 22376
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -2248,7 +2265,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2348,7 +2365,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-io"] = package.loaded["l-io"] or true
--- original size: 8643, stripped down to: 6232
+-- original size: 9001, stripped down to: 6512
if not modules then modules={} end modules ['l-io']={
version=1.001,
@@ -2663,7 +2680,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-number"] = package.loaded["l-number"] or true
--- original size: 4939, stripped down to: 2830
+-- original size: 5146, stripped down to: 2933
if not modules then modules={} end modules ['l-number']={
version=1.001,
@@ -2808,7 +2825,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-set"] = package.loaded["l-set"] or true
--- original size: 1923, stripped down to: 1133
+-- original size: 2010, stripped down to: 1186
if not modules then modules={} end modules ['l-set']={
version=1.001,
@@ -2881,7 +2898,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15832, stripped down to: 9456
+-- original size: 16390, stripped down to: 9734
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3263,7 +3280,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-file"] = package.loaded["l-file"] or true
--- original size: 20949, stripped down to: 9945
+-- original size: 21647, stripped down to: 10237
if not modules then modules={} end modules ['l-file']={
version=1.001,
@@ -3643,7 +3660,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-gzip"] = package.loaded["l-gzip"] or true
--- original size: 1211, stripped down to: 1002
+-- original size: 1265, stripped down to: 1038
if not modules then modules={} end modules ['l-gzip']={
version=1.001,
@@ -3697,7 +3714,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-md5"] = package.loaded["l-md5"] or true
--- original size: 3248, stripped down to: 2266
+-- original size: 3355, stripped down to: 2321
if not modules then modules={} end modules ['l-md5']={
version=1.001,
@@ -3785,7 +3802,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-url"] = package.loaded["l-url"] or true
--- original size: 12531, stripped down to: 5721
+-- original size: 12897, stripped down to: 5882
if not modules then modules={} end modules ['l-url']={
version=1.001,
@@ -4002,7 +4019,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 16765, stripped down to: 11003
+-- original size: 17358, stripped down to: 11378
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -4467,7 +4484,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-boolean"] = package.loaded["l-boolean"] or true
--- original size: 1850, stripped down to: 1568
+-- original size: 1919, stripped down to: 1621
if not modules then modules={} end modules ['l-boolean']={
version=1.001,
@@ -4539,7 +4556,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37388, stripped down to: 15817
+-- original size: 38699, stripped down to: 16321
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4768,9 +4785,10 @@ if not utf.sub then
end
end
end
-function utf.remapper(mapping,option)
+function utf.remapper(mapping,option,action)
local variant=type(mapping)
if variant=="table" then
+ action=action or mapping
if option=="dynamic" then
local pattern=false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern=false end)
@@ -4779,15 +4797,15 @@ function utf.remapper(mapping,option)
return ""
else
if not pattern then
- pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option=="pattern" then
- return Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action+p_utf8char)^0)
else
- local pattern=Cs((tabletopattern(mapping)/mapping+p_utf8char)^0)
+ local pattern=Cs((tabletopattern(mapping)/action+p_utf8char)^0)
return function(str)
if not str or str=="" then
return ""
@@ -5157,7 +5175,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-math"] = package.loaded["l-math"] or true
--- original size: 974, stripped down to: 890
+-- original size: 1012, stripped down to: 912
if not modules then modules={} end modules ['l-math']={
version=1.001,
@@ -5197,7 +5215,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34513, stripped down to: 18943
+-- original size: 36053, stripped down to: 19685
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5368,7 +5386,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -5885,7 +5909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tab"] = package.loaded["util-tab"] or true
--- original size: 25338, stripped down to: 16247
+-- original size: 28680, stripped down to: 18636
if not modules then modules={} end modules ['util-tab']={
version=1.001,
@@ -6314,19 +6338,21 @@ local f_val_str=formatters["%w%q,"]
local f_val_boo=formatters["%w%l,"]
local f_val_not=formatters["%w{},"]
local f_val_seq=formatters["%w{ %, t },"]
+local f_fin_seq=formatters[" %, t }"]
local f_table_return=formatters["return {"]
local f_table_name=formatters["%s={"]
local f_table_direct=formatters["{"]
local f_table_entry=formatters["[%q]={"]
local f_table_finish=formatters["}"]
local spaces=utilities.strings.newrepeater(" ")
-local serialize=table.serialize
-function table.serialize(root,name,specification)
+local original_serialize=table.serialize
+local function serialize(root,name,specification)
if type(specification)=="table" then
- return serialize(root,name,specification)
+ return original_serialize(root,name,specification)
end
- local t
+ local t
local n=1
+ local unknown=false
local function simple_table(t)
local nt=#t
if nt>0 then
@@ -6337,6 +6363,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero=t[0]
if n==nt then
local tt={}
for i=1,nt do
@@ -6353,6 +6380,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n==nt+1) then
+ local tt={}
+ for i=0,nt do
+ local v=t[i]
+ local tv=type(v)
+ if tv=="number" then
+ tt[i+1]=v
+ elseif tv=="string" then
+ tt[i+1]=format("%q",v)
+ elseif tv=="boolean" then
+ tt[i+1]=v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1]="[0] = "..tt[1]
+ return tt
end
end
return nil
@@ -6401,7 +6445,7 @@ function table.serialize(root,name,specification)
elseif tv=="string" then
n=n+1 t[n]=f_val_str(depth,v)
elseif tv=="table" then
- if next(v)==nil then
+ if next(v)==nil then
n=n+1 t[n]=f_val_not(depth)
else
local st=simple_table(v)
@@ -6413,6 +6457,8 @@ function table.serialize(root,name,specification)
end
elseif tv=="boolean" then
n=n+1 t[n]=f_val_boo(depth,v)
+ elseif unknown then
+ n=n+1 t[n]=f_val_str(depth,tostring(v))
end
elseif tv=="number" then
if tk=="number" then
@@ -6421,6 +6467,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_num(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_num(depth,tostring(k),v)
end
elseif tv=="string" then
if tk=="number" then
@@ -6429,6 +6477,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_str(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),v)
end
elseif tv=="table" then
if next(v)==nil then
@@ -6438,6 +6488,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_not(depth,k)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_not(depth,tostring(k))
end
else
local st=simple_table(v)
@@ -6449,6 +6501,8 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_seq(depth,k,st)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv=="boolean" then
@@ -6458,6 +6512,18 @@ function table.serialize(root,name,specification)
n=n+1 t[n]=f_key_str_value_boo(depth,k,v)
elseif tk=="boolean" then
n=n+1 t[n]=f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk=="number" then
+ n=n+1 t[n]=f_key_num_value_str(depth,k,tostring(v))
+ elseif tk=="string" then
+ n=n+1 t[n]=f_key_str_value_str(depth,k,tostring(v))
+ elseif tk=="boolean" then
+ n=n+1 t[n]=f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n=n+1 t[n]=f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -6490,13 +6556,351 @@ function table.serialize(root,name,specification)
root._w_h_a_t_e_v_e_r_=nil
end
if next(root)~=nil then
- do_serialize(root,name,1,0)
+ local st=simple_table(root)
+ if st then
+ return t[1]..f_fin_seq(st)
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n=n+1
t[n]=f_table_finish()
return concat(t,"\n")
end
+table.serialize=serialize
+if setinspector then
+ setinspector("table",function(v) if type(v)=="table" then print(serialize(v,"table",{})) return true end end)
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-fil"] = package.loaded["util-fil"] or true
+
+-- original size: 3577, stripped down to: 2870
+
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+package.loaded["util-sac"] = package.loaded["util-sac"] or true
+
+-- original size: 4264, stripped down to: 3349
+
+if not modules then modules={} end modules ['util-sac']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte,sub=string.byte,string.sub
+local extract=bit32.extract
+utilities=utilities or {}
+local streams={}
+utilities.streams=streams
+function streams.open(filename,zerobased)
+ local f=io.loaddata(filename)
+ return { f,1,#f,zerobased or false }
+end
+function streams.close()
+end
+function streams.size(f)
+ return f and f[3] or 0
+end
+function streams.setposition(f,i)
+ if f[4] then
+ if i<=0 then
+ f[2]=1
+ else
+ f[2]=i+1
+ end
+ else
+ if i<=1 then
+ f[2]=1
+ else
+ f[2]=i
+ end
+ end
+end
+function streams.getposition(f)
+ if f[4] then
+ return f[2]-1
+ else
+ return f[2]
+ end
+end
+function streams.look(f,n,chars)
+ local b=f[2]
+ local e=b+n-1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+function streams.skip(f,n)
+ f[2]=f[2]+n
+end
+function streams.readbyte(f)
+ local i=f[2]
+ f[2]=i+1
+ return byte(f[1],i)
+end
+function streams.readbytes(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return byte(f[1],i,j-1)
+end
+function streams.skipbytes(f,n)
+ f[2]=f[2]+n
+end
+function streams.readchar(f)
+ local i=f[2]
+ f[2]=i+1
+ return sub(f[1],i,i)
+end
+function streams.readstring(f,n)
+ local i=f[2]
+ local j=i+n
+ f[2]=j
+ return sub(f[1],i,j-1)
+end
+function streams.readinteger1(f)
+ local i=f[2]
+ f[2]=i+1
+ local n=byte(f[1],i)
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+streams.readcardinal1=streams.readbyte
+streams.readcardinal=streams.readcardinal1
+streams.readinteger=streams.readinteger1
+function streams.readcardinal2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ return 0x100*a+b
+end
+function streams.readinteger2(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function streams.readcardinal3(f)
+ local i=f[2]
+ local j=i+2
+ f[2]=j+1
+ local a,b,c=byte(f[1],i,j)
+ return 0x10000*a+0x100*b+c
+end
+function streams.readcardinal4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function streams.readinteger4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function streams.readfixed4(f)
+ local i=f[2]
+ local j=i+3
+ f[2]=j+1
+ local a,b,c,d=byte(f[1],i,j)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function streams.read2dot14(f)
+ local i=f[2]
+ local j=i+1
+ f[2]=j+1
+ local a,b=byte(f[1],i,j)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function streams.skipshort(f,n)
+ f[2]=f[2]+2*(n or 1)
+end
+function streams.skiplong(f,n)
+ f[2]=f[2]+4*(n or 1)
+end
end -- of closure
@@ -6505,7 +6909,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4172, stripped down to: 2953
+-- original size: 4100, stripped down to: 2852
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -6583,39 +6987,32 @@ local f_index={
["table"]=f_table,
["number"]=f_number,
}
-local t_index={
- ["empty"]={ __index=f_empty },
- ["self"]={ __index=f_self },
- ["table"]={ __index=f_table },
- ["number"]={ __index=f_number },
-}
function table.setmetatableindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__index=f_index[f] or f
+ m.__index=i
else
- setmetatable(t,t_index[f] or { __index=f })
+ setmetatable(t,{ __index=i })
end
return t
end
local f_index={
["ignore"]=f_ignore,
}
-local t_index={
- ["ignore"]={ __newindex=f_ignore },
-}
function table.setmetatablenewindex(t,f)
if type(t)~="table" then
f,t=t,{}
end
local m=getmetatable(t)
+ local i=f_index[f] or f
if m then
- m.__newindex=f_index[f] or f
+ m.__newindex=i
else
- setmetatable(t,t_index[f] or { __newindex=f })
+ setmetatable(t,{ __newindex=i })
end
return t
end
@@ -6652,7 +7049,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-prs"] = package.loaded["util-prs"] or true
--- original size: 21780, stripped down to: 15121
+-- original size: 22839, stripped down to: 15769
if not modules then modules={} end modules ['util-prs']={
version=1.001,
@@ -6676,6 +7073,8 @@ local setmetatableindex=table.setmetatableindex
local sortedhash=table.sortedhash
local sortedkeys=table.sortedkeys
local tohash=table.tohash
+local hashes={}
+utilities.parsers.hashes=hashes
local digit=R("09")
local space=P(' ')
local equal=P("=")
@@ -6894,9 +7293,15 @@ function parsers.array_to_string(a,separator)
end
end
local pattern=Cf(Ct("")*Cg(C((1-S(", "))^1)*S(", ")^0*Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or {}
end
+hashes.settings_to_set=table.setmetatableindex(function(t,k)
+ local v=k and lpegmatch(pattern,k) or {}
+ t[k]=v
+ return v
+end)
+getmetatable(hashes.settings_to_set).__mode="kv"
function parsers.simple_hash_to_string(h,separator)
local t,tn={},0
for k,v in sortedhash(h) do
@@ -7173,7 +7578,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-fmt"] = package.loaded["util-fmt"] or true
--- original size: 2274, stripped down to: 1781
+-- original size: 2350, stripped down to: 1847
if not modules then modules={} end modules ['util-fmt']={
version=1.001,
@@ -7254,7 +7659,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-set"] = package.loaded["trac-set"] or true
--- original size: 12482, stripped down to: 8864
+-- original size: 12862, stripped down to: 9104
if not modules then modules={} end modules ['trac-set']={
version=1.001,
@@ -7567,7 +7972,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-log"] = package.loaded["trac-log"] or true
--- original size: 29359, stripped down to: 20483
+-- original size: 30767, stripped down to: 21355
if not modules then modules={} end modules ['trac-log']={
version=1.001,
@@ -7610,6 +8015,9 @@ 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
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0)
+ end
local function useluawrites()
local texio_write_nl=texio.write_nl
local texio_write=texio.write
@@ -7627,6 +8035,8 @@ if tex and (tex.jobname or tex.formatname) then
elseif target=="term" then
texio_write_nl("term","")
io_write(...)
+ elseif type(target)=="number" then
+ texio_write_nl(target,...)
elseif target~="none" then
texio_write_nl("log",target,...)
texio_write_nl("term","")
@@ -7644,6 +8054,8 @@ if tex and (tex.jobname or tex.formatname) then
texio_write("log",...)
elseif target=="term" then
io_write(...)
+ elseif type(target)=="number" then
+ texio_write(target,...)
elseif target~="none" then
texio_write("log",target,...)
io_write(target,...)
@@ -7714,7 +8126,7 @@ if tex and (tex.jobname or tex.formatname) then
write_nl(target,"\n")
end
report=function(a,b,c,...)
- if c then
+ 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]))
@@ -7725,7 +8137,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
direct=function(a,b,c,...)
- if c then
+ if c~=nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -7736,7 +8148,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subreport=function(a,s,b,c,...)
- if c then
+ 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]))
@@ -7747,7 +8159,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
subdirect=function(a,s,b,c,...)
- if c then
+ 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])
@@ -7758,7 +8170,7 @@ if tex and (tex.jobname or tex.formatname) then
end
end
status=function(a,b,c,...)
- if c then
+ 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]))
@@ -8056,7 +8468,7 @@ function logs.messenger(category,subcategory)
end
end
end
-local function setblocked(category,value)
+local function setblocked(category,value)
if category==true then
category,value="*",true
elseif category==false then
@@ -8071,7 +8483,7 @@ local function setblocked(category,value)
end
else
states=utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c,_ in next,states do
+ for c in next,states do
local v=data[c]
if v then
v.state=value
@@ -8353,7 +8765,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-inf"] = package.loaded["trac-inf"] or true
--- original size: 6704, stripped down to: 5343
+-- original size: 6917, stripped down to: 5484
if not modules then modules={} end modules ['trac-inf']={
version=1.001,
@@ -8474,13 +8886,13 @@ function statistics.show()
end
end
register("lua properties",function()
- local list=status.list()
- local hashchar=tonumber(list.luatex_hashchars)
+ local hashchar=tonumber(status.luatex_hashchars)
+ local hashtype=status.luatex_hashtype
local mask=lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask=="utf" and "τεχ" or "tex")
@@ -8534,7 +8946,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-pro"] = package.loaded["trac-pro"] or true
--- original size: 5829, stripped down to: 3501
+-- original size: 6039, stripped down to: 3616
if not modules then modules={} end modules ['trac-pro']={
version=1.001,
@@ -8681,7 +9093,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lua"] = package.loaded["util-lua"] or true
--- original size: 4982, stripped down to: 3511
+-- original size: 5142, stripped down to: 3611
if not modules then modules={} end modules ['util-lua']={
version=1.001,
@@ -8811,7 +9223,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-deb"] = package.loaded["util-deb"] or true
--- original size: 3898, stripped down to: 2644
+-- original size: 4030, stripped down to: 2718
if not modules then modules={} end modules ['util-deb']={
version=1.001,
@@ -8915,7 +9327,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-mrg"] = package.loaded["util-mrg"] or true
--- original size: 7757, stripped down to: 6015
+-- original size: 7985, stripped down to: 6153
if not modules then modules={} end modules ['util-mrg']={
version=1.001,
@@ -9092,7 +9504,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-tpl"] = package.loaded["util-tpl"] or true
--- original size: 7100, stripped down to: 3978
+-- original size: 7313, stripped down to: 4076
if not modules then modules={} end modules ['util-tpl']={
version=1.001,
@@ -9237,7 +9649,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-env"] = package.loaded["util-env"] or true
--- original size: 8022, stripped down to: 5038
+-- original size: 8284, stripped down to: 5176
if not modules then modules={} end modules ['util-env']={
version=1.001,
@@ -9424,7 +9836,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 6174, stripped down to: 4141
+-- original size: 6358, stripped down to: 4257
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -9577,7 +9989,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 45848, stripped down to: 27914
+-- original size: 56973, stripped down to: 35872
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9586,7 +9998,7 @@ if not modules then modules={} end modules ['lxml-tab']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local trace_entities=false trackers.register("xml.entities",function(v) trace_entities=v end)
+local trace_entities=false trackers .register("xml.entities",function(v) trace_entities=v end)
local report_xml=logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end
xml=xml or {}
@@ -9594,10 +10006,12 @@ local xml=xml
local concat,remove,insert=table.concat,table.remove,table.insert
local type,next,setmetatable,getmetatable,tonumber,rawset=type,next,setmetatable,getmetatable,tonumber,rawset
local lower,find,match,gsub=string.lower,string.find,string.match,string.gsub
+local sort=table.sort
local utfchar=utf.char
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local P,S,R,C,V,C,Cs=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.V,lpeg.C,lpeg.Cs
local formatters=string.formatters
+do
xml.xmlns=xml.xmlns or {}
local check=P(false)
local parse=check
@@ -9614,23 +10028,68 @@ end
function xml.resolvens(url)
return lpegmatch(parse,lower(url)) or ""
end
+end
local nsremap,resolvens=xml.xmlns,xml.resolvens
-local stack={}
-local top={}
-local dt={}
-local at={}
-local xmlns={}
-local errorstr=nil
-local entities={}
-local strip=false
-local cleanup=false
-local utfize=false
-local resolve_predefined=false
-local unify_predefined=false
-local dcache={}
-local hcache={}
-local acache={}
-local mt={}
+local stack,level,top,at,xmlnms,errorstr
+local entities,parameters
+local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined
+local dcache,hcache,acache
+local mt,dt,nt
+local function preparexmlstate(settings)
+ if settings then
+ stack={}
+ level=0
+ top={}
+ at={}
+ mt={}
+ dt={}
+ nt=0
+ xmlns={}
+ errorstr=nil
+ strip=settings.strip_cm_and_dt
+ utfize=settings.utfize_entities
+ resolve=settings.resolve_entities
+ resolve_predefined=settings.resolve_predefined_entities
+ unify_predefined=settings.unify_predefined_entities
+ cleanup=settings.text_cleanup
+ entities=settings.entities or {}
+ parameters={}
+ reported_at_errors={}
+ dcache={}
+ hcache={}
+ acache={}
+ if utfize==nil then
+ settings.utfize_entities=true
+ utfize=true
+ end
+ if resolve_predefined==nil then
+ settings.resolve_predefined_entities=true
+ resolve_predefined=true
+ end
+ else
+ stack=nil
+ level=nil
+ top=nil
+ at=nil
+ mt=nil
+ dt=nil
+ nt=nil
+ xmlns=nil
+ errorstr=nil
+ strip=nil
+ utfize=nil
+ resolve=nil
+ resolve_predefined=nil
+ unify_predefined=nil
+ cleanup=nil
+ entities=nil
+ parameters=nil
+ reported_at_errors=nil
+ dcache=nil
+ hcache=nil
+ acache=nil
+ end
+end
local function initialize_mt(root)
mt={ __index=root }
end
@@ -9640,8 +10099,9 @@ end
function xml.checkerror(top,toclose)
return ""
end
+local checkns=xml.checkns
local function add_attribute(namespace,tag,value)
- if cleanup and #value>0 then
+ if cleanup and value~="" then
value=cleanup(value)
end
if tag=="xmlns" then
@@ -9650,21 +10110,30 @@ local function add_attribute(namespace,tag,value)
elseif namespace=="" then
at[tag]=value
elseif namespace=="xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:"..tag]=value
else
at[namespace..":"..tag]=value
end
end
local function add_empty(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top=stack[#stack]
+ top=stack[level]
dt=top.dt
- local t={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=top }
- dt[#dt+1]=t
+ nt=#dt+1
+ local t={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=top
+ }
+ dt[nt]=t
setmetatable(t,mt)
if at.xmlns then
remove(xmlns)
@@ -9672,23 +10141,35 @@ local function add_empty(spacing,namespace,tag)
at={}
end
local function add_begin(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top={ ns=namespace or "",rn=resolved,tg=tag,at=at,dt={},__p__=stack[#stack] }
+ top={
+ ns=namespace or "",
+ rn=resolved,
+ tg=tag,
+ at=at,
+ dt={},
+ __p__=stack[level]
+ }
setmetatable(top,mt)
dt=top.dt
- stack[#stack+1]=top
+ nt=#dt
+ level=level+1
+ stack[level]=top
at={}
end
local function add_end(spacing,namespace,tag)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
- local toclose=remove(stack)
- top=stack[#stack]
- if #stack<1 then
+ local toclose=stack[level]
+ level=level-1
+ top=stack[level]
+ if level<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg~=tag then
@@ -9696,202 +10177,236 @@ local function add_end(spacing,namespace,tag)
report_xml(errorstr)
end
dt=top.dt
- dt[#dt+1]=toclose
+ nt=#dt+1
+ dt[nt]=toclose
if toclose.at.xmlns then
remove(xmlns)
end
end
-local spaceonly=lpegpatterns.whitespace^0*P(-1)
local function add_text(text)
- local n=#dt
- if cleanup and #text>0 then
- if n>0 then
- local s=dt[n]
+ if text=="" then
+ return
+ end
+ if cleanup then
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..cleanup(text)
+ dt[nt]=s..cleanup(text)
else
- dt[n+1]=cleanup(text)
+ nt=nt+1
+ dt[nt]=cleanup(text)
end
else
+ nt=1
dt[1]=cleanup(text)
end
else
- if n>0 then
- local s=dt[n]
+ if nt>0 then
+ local s=dt[nt]
if type(s)=="string" then
- dt[n]=s..text
+ dt[nt]=s..text
else
- dt[n+1]=text
+ nt=nt+1
+ dt[nt]=text
end
else
+ nt=1
dt[1]=text
end
end
end
local function add_special(what,spacing,text)
- if #spacing>0 then
- dt[#dt+1]=spacing
+ if spacing~="" then
+ nt=nt+1
+ dt[nt]=spacing
end
if strip and (what=="@cm@" or what=="@dt@") then
else
- dt[#dt+1]={ special=true,ns="",tg=what,dt={ text } }
+ nt=nt+1
+ dt[nt]={ special=true,ns="",tg=what,dt={ text } }
end
end
local function set_message(txt)
errorstr="garbage at the end of the file: "..gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors={}
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str]=true
+ reported_at_errors[str]=true
at._error_=str
end
return str
end
-local badentity="&error;"
-local badentity="&"
-xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
-}
-local placeholders=xml.placeholders
-local function fromhex(s)
- local n=tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s),true
- end
-end
-local function fromdec(s)
- local n=tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s),true
- end
-end
-local p_rest=(1-P(";"))^0
-local p_many=P(1)^0
-local p_char=lpegpatterns.utf8character
-local parsedentity=P("&")*(P("#x")*(p_rest/fromhex)+P("#")*(p_rest/fromdec))*P(";")*P(-1)+(P("#x")*(p_many/fromhex)+P("#")*(p_many/fromdec))
-local predefined_unified={
- [38]="&amp;",
- [42]="&quot;",
- [47]="&apos;",
- [74]="&lt;",
- [76]="&gt;",
-}
-local predefined_simplified={
- [38]="&",amp="&",
- [42]='"',quot='"',
- [47]="'",apos="'",
- [74]="<",lt="<",
- [76]=">",gt=">",
-}
-local nofprivates=0xF0000
-local privates_u={
- [ [[&]] ]="&amp;",
- [ [["]] ]="&quot;",
- [ [[']] ]="&apos;",
- [ [[<]] ]="&lt;",
- [ [[>]] ]="&gt;",
-}
-local privates_p={}
-local privates_n={
-}
-local escaped=utf.remapper(privates_u,"dynamic")
-local unprivatized=utf.remapper(privates_p,"dynamic")
-xml.unprivatized=unprivatized
-local function unescaped(s)
- local p=privates_n[s]
- if not p then
- nofprivates=nofprivates+1
- p=utfchar(nofprivates)
- privates_n[s]=p
- s="&"..s..";"
- privates_u[p]=s
- privates_p[p]=s
+local grammar_parsed_text_one
+local grammar_parsed_text_two
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
+do
+ local badentity="&"
+ xml.placeholders={
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
+ }
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s),true
+ end
end
- return p
-end
-xml.privatetoken=unescaped
-xml.privatecodes=privates_n
-local function handle_hex_entity(str)
- local h=hcache[str]
- if not h then
- local n=tonumber(str,16)
- h=unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return utfchar(n)
else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
- end
- h="&#x"..str..";"
+ return formatters["d:%s"](s),true
+ end
+ end
+ local p_rest=(1-P(";"))^0
+ local p_many=P(1)^0
+ local p_char=lpegpatterns.utf8character
+ local parsedentity=P("&#")*(P("x")*(p_rest/fromhex)+(p_rest/fromdec))*P(";")*P(-1)+P ("#")*(P("x")*(p_many/fromhex)+(p_many/fromdec))
+ xml.parsedentitylpeg=parsedentity
+ local predefined_unified={
+ [38]="&amp;",
+ [42]="&quot;",
+ [47]="&apos;",
+ [74]="&lt;",
+ [76]="&gt;",
+ }
+ local predefined_simplified={
+ [38]="&",amp="&",
+ [42]='"',quot='"',
+ [47]="'",apos="'",
+ [74]="<",lt="<",
+ [76]=">",gt=">",
+ }
+ local nofprivates=0xF0000
+ local privates_u={
+ [ [[&]] ]="&amp;",
+ [ [["]] ]="&quot;",
+ [ [[']] ]="&apos;",
+ [ [[<]] ]="&lt;",
+ [ [[>]] ]="&gt;",
+ }
+ local privates_p={
+ }
+ local privates_s={
+ [ [["]] ]="&U+22;",
+ [ [[#]] ]="&U+23;",
+ [ [[$]] ]="&U+24;",
+ [ [[%]] ]="&U+25;",
+ [ [[&]] ]="&U+26;",
+ [ [[']] ]="&U+27;",
+ [ [[<]] ]="&U+3C;",
+ [ [[>]] ]="&U+3E;",
+ [ [[\]] ]="&U+5C;",
+ [ [[{]] ]="&U+7B;",
+ [ [[|]] ]="&U+7C;",
+ [ [[}]] ]="&U+7D;",
+ [ [[~]] ]="&U+7E;",
+ }
+ local privates_n={
+ }
+ local escaped=utf.remapper(privates_u,"dynamic")
+ local unprivatized=utf.remapper(privates_p,"dynamic")
+ local unspecialized=utf.remapper(privates_s,"dynamic")
+ xml.unprivatized=unprivatized
+ xml.unspecialized=unspecialized
+ xml.escaped=escaped
+ local function unescaped(s)
+ local p=privates_n[s]
+ if not p then
+ nofprivates=nofprivates+1
+ p=utfchar(nofprivates)
+ privates_n[s]=p
+ s="&"..s..";"
+ privates_u[p]=s
+ privates_p[p]=s
+ privates_s[p]=s
end
- hcache[str]=h
+ return p
end
- return h
-end
-local function handle_dec_entity(str)
- local d=dcache[str]
- if not d then
- local n=tonumber(str)
- d=unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ xml.privatetoken=unescaped
+ xml.privatecodes=privates_n
+ xml.specialcodes=privates_s
+ function xml.addspecialcode(key,value)
+ privates_s[key]=value or "&"..s..";"
+ end
+ handle_hex_entity=function(str)
+ local h=hcache[str]
+ if not h then
+ local n=tonumber(str,16)
+ h=unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h=(n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h="&#x"..str..";"
end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ hcache[str]=h
+ end
+ return h
+ end
+ handle_dec_entity=function(str)
+ local d=dcache[str]
+ if not d then
+ local n=tonumber(str)
+ d=unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d=(n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d="&#"..str..";"
end
- d="&#"..str..";"
+ dcache[str]=d
end
- dcache[str]=d
+ return d
end
- return d
-end
-xml.parsedentitylpeg=parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve)=="function" then
- a=resolve(str) or entities[str]
+ a=resolve(str,entities) or entities[str]
else
a=entities[str]
end
@@ -9927,40 +10442,194 @@ local function handle_any_entity(str)
end
end
end
- acache[str]=a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str]=a
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
+ end
end
+ return a
end
- return a
- else
- local a=acache[str]
- if not a then
- a=resolve_predefined and predefined_simplified[str]
+ end
+ handle_any_entity_text=function(str)
+ if resolve then
+ local a=resolve_predefined and predefined_simplified[str]
if a then
- acache[str]=a
if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str=="" then
- if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a=badentity
- acache[str]=a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve)=="function" then
+ a=resolve(str,entities) or entities[str]
+ else
+ a=entities[str]
+ end
+ if a then
+ if type(a)=="function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a=a(str) or ""
+ end
+ a=lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a)=="number" then
+ return ""
+ else
+ a=lpegmatch(parsedentity,a) or a
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity=placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a=unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str=="" then
+ a=badentity
+ else
+ a="&"..str..";"
+ end
+ end
+ end
+ end
+ return a
+ else
+ local a=acache[str]
+ if not a then
+ a=resolve_predefined and predefined_simplified[str]
+ if a then
+ acache[str]=a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str=="" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a=badentity
+ acache[str]=a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ a=unescaped(str)
+ acache[str]=a
end
- a=unescaped(str)
- acache[str]=a
end
+ return a
+ end
+ end
+ local p_rest=(1-P(";"))^1
+ local spec={
+ [0x23]="\\Ux{23}",
+ [0x24]="\\Ux{24}",
+ [0x25]="\\Ux{25}",
+ [0x5C]="\\Ux{5C}",
+ [0x7B]="\\Ux{7B}",
+ [0x7C]="\\Ux{7C}",
+ [0x7D]="\\Ux{7D}",
+ [0x7E]="\\Ux{7E}",
+ }
+ local hash=table.setmetatableindex(spec,function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
end
- return a
end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local reparsedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ local hash=table.setmetatableindex(function(t,k)
+ local v=utfchar(k)
+ t[k]=v
+ return v
+ end)
+ local function fromuni(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s),true
+ end
+ end
+ local function fromhex(s)
+ local n=tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s),true
+ end
+ end
+ local function fromdec(s)
+ local n=tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s),true
+ end
+ end
+ local unescapedentity=P("U+")*(p_rest/fromuni)+P("#")*(
+ P("x")*(p_rest/fromhex)+p_rest/fromdec
+ )
+ xml.reparsedentitylpeg=reparsedentity
+ xml.unescapedentitylpeg=unescapedentity
end
+local escaped=xml.escaped
+local unescaped=xml.unescaped
+local placeholders=xml.placeholders
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
return str
@@ -9987,14 +10656,18 @@ local name=name_yes+name_nop
local utfbom=lpegpatterns.utfbom
local spacing=C(space^0)
local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent=R("AF","af","09")^0
-local decentitycontent=R("09")^0
+local hexentitycontent=R("AF","af","09")^1
+local decentitycontent=R("09")^1
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
- )+(anyentitycontent/handle_any_entity)
+ )+(anyentitycontent/handle_any_entity_dtd)
+local parsedentity_text=P("#")/""*(
+ P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
+ )+(anyentitycontent/handle_any_entity_text)
local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
+local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
-local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
+local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1
local somespace=space^1
local optionalspace=space^0
local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote)
@@ -10004,7 +10677,7 @@ local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error
local attributevalue=value+wrongvalue
local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute
local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext=text_parsed/add_text
+local parsedtext=text_parsed
local unparsedtext=text_unparsed/add_text
local balanced=P { "["*((1-S"[]")+V(1))^0*"]" }
local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty
@@ -10019,21 +10692,52 @@ local endcdata=P("]]")*close
local someinstruction=C((1-endinstruction)^0)
local somecomment=C((1-endcomment )^0)
local somecdata=C((1-endcdata )^0)
-local function normalentity(k,v ) entities[k]=v end
-local function systementity(k,v,n) entities[k]=v end
-local function publicentity(k,v,n) entities[k]=v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k]=v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k]=v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k]=v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k]=v
+end
local begindoctype=open*P("!DOCTYPE")
local enddoctype=close
local beginset=P("[")
local endset=P("]")
+local wrdtypename=C((1-somespace-P(";"))^1)
local doctypename=C((1-somespace-close)^0)
local elementdoctype=optionalspace*P("<!ELEMENT")*(1-close)^0*close
local basiccomment=begincomment*((1-endcomment)^0)*endcomment
+local weirdentitytype=P("%")*(somespace*doctypename*somespace*value)/weirdentity
local normalentitytype=(doctypename*somespace*value)/normalentity
local publicentitytype=(doctypename*somespace*P("PUBLIC")*somespace*value)/publicentity
local systementitytype=(doctypename*somespace*P("SYSTEM")*somespace*value*somespace*P("NDATA")*somespace*doctypename)/systementity
-local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype)*optionalspace*close
-local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+basiccomment+space)^0*optionalspace*endset
+local entitydoctype=optionalspace*P("<!ENTITY")*somespace*(systementitytype+publicentitytype+normalentitytype+weirdentitytype)*optionalspace*close
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+local entityresolve=P("%")*(wrdtypename/weirdresolve )*P(";")+P("&")*(wrdtypename/normalresolve)*P(";")
+entitydoctype=entitydoctype+entityresolve
+local doctypeset=beginset*optionalspace*P(elementdoctype+entitydoctype+entityresolve+basiccomment+space)^0*optionalspace*endset
local definitiondoctype=doctypename*somespace*doctypeset
local publicdoctype=doctypename*somespace*P("PUBLIC")*somespace*value*somespace*value*somespace*doctypeset
local systemdoctype=doctypename*somespace*P("SYSTEM")*somespace*value*somespace*doctypeset
@@ -10045,11 +10749,15 @@ local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
-local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
-local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local parsedcrap=Cs((crap_parsed^1+entity_text)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
-local grammar_parsed_text=P { "preamble",
- preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
+grammar_parsed_text_one=P { "preamble",
+ preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0,
+}
+grammar_parsed_text_two=P { "followup",
+ followup=V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
@@ -10059,37 +10767,26 @@ local grammar_unparsed_text=P { "preamble",
children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
- settings=settings or {}
- strip=settings.strip_cm_and_dt
- utfize=settings.utfize_entities
- resolve=settings.resolve_entities
- resolve_predefined=settings.resolve_predefined_entities
- unify_predefined=settings.unify_predefined_entities
- cleanup=settings.text_cleanup
- entities=settings.entities or {}
- if utfize==nil then
- settings.utfize_entities=true
- utfize=true
- end
- if resolve_predefined==nil then
- settings.resolve_predefined_entities=true
- resolve_predefined=true
- end
- stack,top,at,xmlns,errorstr={},{},{},{},nil
- acache,hcache,dcache={},{},{}
- reported_attribute_errors={}
+ settings=settings or {}
+ preparexmlstate(settings)
if settings.parent_root then
mt=getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1]=top
+ level=level+1
+ stack[level]=top
top.dt={}
dt=top.dt
+ nt=0
if not data or data=="" then
errorstr="empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m=lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m=lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ if m then
else
errorstr="invalid xml file - parsed text"
end
@@ -10105,8 +10802,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
-setmetatable(result,mt)
-setmetatable(result.dt[1],mt)
+ setmetatable(result,mt)
+ setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -10148,13 +10845,10 @@ setmetatable(result.dt[1],mt)
decimals=dcache,
hexadecimals=hcache,
names=acache,
+ intermediates=parameters,
}
}
- strip,utfize,resolve,resolve_predefined=nil,nil,nil,nil
- unify_predefined,cleanup,entities=nil,nil,nil
- stack,top,at,xmlns,errorstr=nil,nil,nil,nil,nil
- acache,hcache,dcache=nil,nil,nil
- reported_attribute_errors,mt,errorhandler=nil,nil,nil
+ preparexmlstate()
return result
end
local function xmlconvert(data,settings)
@@ -10216,15 +10910,15 @@ function xml.toxml(data)
return data
end
end
-local function copy(old,tables)
+local function copy(old)
if old then
- tables=tables or {}
local new={}
- if not tables[old] then
- tables[old]=new
- end
for k,v in next,old do
- new[k]=(type(v)=="table" and (tables[v] or copy(v,tables))) or v
+ if type(v)=="table" then
+ new[k]=table.copy(v)
+ else
+ new[k]=v
+ end
end
local mt=getmetatable(old)
if mt then
@@ -10257,22 +10951,34 @@ local function verbose_element(e,handlers,escape)
local ats=eat and next(eat) and {}
if ats then
local n=0
- for k,v in next,eat do
+ for k in next,eat do
n=n+1
- ats[n]=f_attribute(k,escaped(v))
+ ats[n]=k
+ end
+ if n==1 then
+ local k=ats[1]
+ ats=f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k=ats[i]
+ ats[i]=f_attribute(k,escaped(eat[k]))
+ end
+ ats=concat(ats," ")
end
end
if ern and trace_entities and ern~=ens then
ens=ern
end
+ local n=edt and #edt
if ens~="" then
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10283,19 +10989,19 @@ local function verbose_element(e,handlers,escape)
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt>0 then
+ if n and n>0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e=edt[i]
if type(e)=="string" then
handle(escaped(e))
@@ -10306,7 +11012,7 @@ local function verbose_element(e,handlers,escape)
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -10323,7 +11029,7 @@ local function verbose_cdata(e,handlers)
handlers.handle("<![CDATA[",e.dt[1],"]]>")
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">")
end
local function verbose_root(e,handlers)
handlers.serialize(e.dt,handlers)
@@ -10366,12 +11072,14 @@ local function serialize(e,handlers,...)
end
end
local function xserialize(e,handlers)
- local functions=handlers.functions
- local etg=e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions=handlers.functions
+ local etg=e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
local handlers={}
@@ -10603,7 +11311,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-lpt"] = package.loaded["lxml-lpt"] or true
--- original size: 48229, stripped down to: 30684
+-- original size: 53877, stripped down to: 32495
if not modules then modules={} end modules ['lxml-lpt']={
version=1.001,
@@ -10618,10 +11326,23 @@ local format,upper,lower,gmatch,gsub,find,rep=string.format,string.upper,string.
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local setmetatableindex=table.setmetatableindex
local formatters=string.formatters
-local trace_lpath=false if trackers then trackers.register("xml.path",function(v) trace_lpath=v end) end
-local trace_lparse=false if trackers then trackers.register("xml.parse",function(v) trace_lparse=v end) end
-local trace_lprofile=false if trackers then trackers.register("xml.profile",function(v) trace_lpath=v trace_lparse=v trace_lprofile=v end) end
+local trace_lpath=false
+local trace_lparse=false
+local trace_lprofile=false
local report_lpath=logs.reporter("xml","lpath")
+if trackers then
+ trackers.register("xml.path",function(v)
+ trace_lpath=v
+ end)
+ trackers.register("xml.parse",function(v)
+ trace_lparse=v
+ end)
+ trackers.register("xml.profile",function(v)
+ trace_lpath=v
+ trace_lparse=v
+ trace_lprofile=v
+ end)
+end
local xml=xml
local lpathcalls=0 function xml.lpathcalls () return lpathcalls end
local lpathcached=0 function xml.lpathcached() return lpathcached end
@@ -10980,13 +11701,27 @@ local lp_noequal=P("!=")/"~="+P("<=")+P(">=")+P("==")
local lp_doequal=P("=")/"=="
local lp_or=P("|")/" or "
local lp_and=P("&")/" and "
-local lp_builtin=P (
- P("text")/"(ll.dt[1] or '')"+
- P("content")/"ll.dt"+
- P("name")/"((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)"+P("tag")/"ll.tg"+P("position")/"l"+
- P("firstindex")/"1"+P("lastindex")/"(#ll.__p__.dt or 1)"+P("firstelement")/"1"+P("lastelement")/"(ll.__p__.en or 1)"+P("first")/"1"+P("last")/"#list"+P("rootposition")/"order"+P("order")/"order"+P("element")/"(ll.ei or 1)"+P("index")/"(ll.ni or 1)"+P("match")/"(ll.mi or 1)"+
- P("ns")/"ll.ns"
- )*((spaces*P("(")*spaces*P(")"))/"")
+local builtin={
+ text="(ll.dt[1] or '')",
+ content="ll.dt",
+ name="((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag="ll.tg",
+ position="l",
+ firstindex="1",
+ firstelement="1",
+ first="1",
+ lastindex="(#ll.__p__.dt or 1)",
+ lastelement="(ll.__p__.en or 1)",
+ last="#list",
+ rootposition="order",
+ order="order",
+ element="(ll.ei or 1)",
+ index="(ll.ni or 1)",
+ match="(ll.mi or 1)",
+ namespace="ll.ns",
+ ns="ll.ns",
+}
+local lp_builtin=lpeg.utfchartabletopattern(builtin)/builtin*((spaces*P("(")*spaces*P(")"))/"")
local lp_attribute=(P("@")+P("attribute::"))/""*Cc("(ll.at and ll.at['")*((R("az","AZ")+S("-_:"))^1)*Cc("'])")
local lp_fastpos_p=P("+")^0*R("09")^1*P(-1)/"l==%0"
local lp_fastpos_n=P("-")*R("09")^1*P(-1)/"(%0<0 and (#list+%0==l))"
@@ -11044,6 +11779,7 @@ local template_f_y=[[
local template_f_n=[[
return xml.finalizers['%s']['%s']
]]
+local register_last_match={ kind="axis",axis="last-match" }
local register_self={ kind="axis",axis="self" }
local register_parent={ kind="axis",axis="parent" }
local register_descendant={ kind="axis",axis="descendant" }
@@ -11121,7 +11857,7 @@ local pathparser=Ct { "patterns",
),
protocol=Cg(V("letters"),"protocol")*P("://")+Cg(Cc(nil),"protocol"),
step=((V("shortcuts")+P("/")+V("axis"))*spaces*V("nodes")^0+V("error"))*spaces*V("expressions")^0*spaces*V("finalizer")^0,
- axis=V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
+ axis=V("last_match")+V("descendant")+V("child")+V("parent")+V("self")+V("root")+V("ancestor")+V("descendant_or_self")+V("following_sibling")+V("following")+V("reverse_sibling")+V("preceding_sibling")+V("preceding")+V("ancestor_or_self")+#(1-P(-1))*Cc(register_auto_child),
special=special_1+special_2+special_3,
initial=(P("/")*spaces*Cc(register_initial_child))^-1,
error=(P(1)^1)/register_error,
@@ -11147,6 +11883,7 @@ local pathparser=Ct { "patterns",
preceding=P('preceding::')*Cc(register_preceding ),
preceding_sibling=P('preceding-sibling::')*Cc(register_preceding_sibling ),
reverse_sibling=P('reverse-sibling::')*Cc(register_reverse_sibling ),
+ last_match=P('last-match::')*Cc(register_last_match ),
nodes=(V("nodefunction")*spaces*P("(")*V("nodeset")*P(")")+V("nodetest")*V("nodeset"))/register_nodes,
expressions=expression/register_expression,
letters=R("az")^1,
@@ -11193,13 +11930,12 @@ local function tagstostring(list)
end
xml.nodesettostring=nodesettostring
local lpath
-local lshowoptions={ functions=false }
local function lshow(parsed)
if type(parsed)=="string" then
parsed=lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow=lshow
local function add_comment(p,str)
@@ -11265,140 +12001,168 @@ lpath=function (pattern)
end
end
xml.lpath=lpath
-local profiled={} xml.profiled=profiled
-local function profiled_apply(list,parsed,nofparsed,order)
- local p=profiled[parsed.pattern]
- if p then
- p.tested=p.tested+1
- else
- p={ tested=1,matched=0,finalized=0 }
- profiled[parsed.pattern]=p
- end
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- p.matched=p.matched+1
- p.finalized=p.finalized+1
- return collected
- end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
+do
+ local profiled={}
+ xml.profiled=profiled
+ local lastmatch=nil
+ local keepmatch=nil
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch=v
+ lastmatch=nil
+ end)
+ end
+ apply_axis["last-match"]=function()
+ return lastmatch or {}
+ end
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p=profiled[parsed.pattern]
+ if p then
+ p.tested=p.tested+1
+ else
+ p={ tested=1,matched=0,finalized=0 }
+ profiled[parsed.pattern]=p
+ end
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ p.matched=p.matched+1
p.finalized=p.finalized+1
return collected
end
- return nil
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ p.finalized=p.finalized+1
+ return collected
+ end
+ return nil
+ end
end
- end
- if collected then
- p.matched=p.matched+1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- collected=apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind=="finalizer" then
- collected=pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ if collected then
+ p.matched=p.matched+1
end
- if not collected or #collected==0 then
- local pn=i<nofparsed and parsed[nofparsed]
- if pn and pn.kind=="finalizer" then
- collected=pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ collected=apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind=="finalizer" then
+ collected=pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
- end
- end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected=list
- for i=1,nofparsed do
- local pi=parsed[i]
- local kind=pi.kind
- if kind=="axis" then
- local axis=pi.axis
- if axis~="self" then
- collected=apply_axis[axis](collected)
+ if not collected or #collected==0 then
+ local pn=i<nofparsed and parsed[nofparsed]
+ if pn and pn.kind=="finalizer" then
+ collected=pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected)=="table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
end
- elseif kind=="nodes" then
- collected=apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind=="expression" then
- collected=apply_expression(collected,pi.evaluator,order)
- elseif kind=="finalizer" then
- return pi.finalizer(collected)
end
- if not collected or #collected==0 then
- local pf=i<nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected)
+ return collected
+ end
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected=list
+ for i=1,nofparsed do
+ local pi=parsed[i]
+ local kind=pi.kind
+ if kind=="axis" then
+ local axis=pi.axis
+ if axis~="self" then
+ collected=apply_axis[axis](collected)
+ end
+ elseif kind=="nodes" then
+ collected=apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind=="expression" then
+ collected=apply_expression(collected,pi.evaluator,order)
+ elseif kind=="finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected==0 then
+ local pf=i<nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected)
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed=cache[pattern]
- if parsed then
- lpathcalls=lpathcalls+1
- lpathcached=lpathcached+1
- elseif type(pattern)=="table" then
- lpathcalls=lpathcalls+1
- parsed=pattern
- else
- parsed=lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply=normal_apply
+ if trackers then
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply=profiled_apply
+ elseif trace_lpath then
+ apply=traced_apply
+ else
+ apply=normal_apply
+ end
+ end)
end
- local nofparsed=#parsed
- if nofparsed==0 then
- return
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch=nil
+ return
+ end
+ local parsed=cache[pattern]
+ if parsed then
+ lpathcalls=lpathcalls+1
+ lpathcached=lpathcached+1
+ elseif type(pattern)=="table" then
+ lpathcalls=lpathcalls+1
+ parsed=pattern
+ else
+ parsed=lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch=nil
+ return
+ end
+ local nofparsed=#parsed
+ if nofparsed==0 then
+ lastmatch=nil
+ return
+ end
+ local collected=apply({ list },parsed,nofparsed,list.mi)
+ lastmatch=keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+ function xml.lastmatch()
+ return lastmatch
end
end
-xml.applylpath=applylpath
+local applylpath=xml.applylpath
function xml.filter(root,pattern)
return applylpath(root,pattern)
end
@@ -11676,7 +12440,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-mis"] = package.loaded["lxml-mis"] or true
--- original size: 3684, stripped down to: 1957
+-- original size: 3787, stripped down to: 2003
if not modules then modules={} end modules ['lxml-mis']={
version=1.001,
@@ -11745,7 +12509,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28786, stripped down to: 20578
+-- original size: 30566, stripped down to: 21741
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12079,55 +12843,63 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek=collected[c]
local name=nil
local ekdt=ek.dt
- local ekat=ek.at
- local ekrt=ek.__p__
- local epdt=ekrt.dt
- if not attribute or attribute=="" then
- name=(type(ekdt)=="table" and ekdt[1]) or ekdt
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name=ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat=ek.at
+ local ekrt=ek.__p__
+ if ekrt then
+ local epdt=ekrt.dt
+ if not attribute or attribute=="" then
+ name=(type(ekdt)=="table" and ekdt[1]) or ekdt
end
- end
- end
- local data=nil
- if name and name~="" then
- data=loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data=="" then
- epdt[ek.ni]=""
- elseif ekat["parse"]=="text" then
- epdt[ek.ni]=xml.escaped(data)
- else
- local xi=xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni]=""
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name=ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child=xml.body(xi)
- child.__p__=ekrt
- child.__f__=name
- epdt[ek.ni]=child
- local inclusions=xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1]=name
- else
- xmldata.settings.inclusions={ name }
+ local data=nil
+ if name and name~="" then
+ data=loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions=xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1]=name
+ if not data or data=="" then
+ epdt[ek.ni]=""
+ elseif ekat["parse"]=="text" then
+ epdt[ek.ni]=xml.escaped(data)
+ else
+ local xi=xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni]=""
else
- xmldata.settings.badinclusions={ name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child=xml.body(xi)
+ child.__p__=ekrt
+ child.__f__=name
+ epdt[ek.ni]=child
+ local settings=xmldata.settings
+ local inclusions=settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1]=name
+ elseif settings then
+ settings.inclusions={ name }
+ else
+ settings={ inclusions={ name } }
+ xmldata.settings=settings
+ end
+ if child.er then
+ local badinclusions=settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12598,7 +13370,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-xml"] = package.loaded["lxml-xml"] or true
--- original size: 10274, stripped down to: 7538
+-- original size: 10719, stripped down to: 7841
if not modules then modules={} end modules ['lxml-xml']={
version=1.001,
@@ -12976,7 +13748,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["trac-xml"] = package.loaded["trac-xml"] or true
--- original size: 6351, stripped down to: 4919
+-- original size: 6534, stripped down to: 5072
if not modules then modules={} end modules ['trac-xml']={
version=1.001,
@@ -13146,7 +13918,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-ini"] = package.loaded["data-ini"] or true
--- original size: 11085, stripped down to: 7662
+-- original size: 11445, stripped down to: 7830
if not modules then modules={} end modules ['data-ini']={
version=1.001,
@@ -13402,7 +14174,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-exp"] = package.loaded["data-exp"] or true
--- original size: 17216, stripped down to: 10657
+-- original size: 18619, stripped down to: 11042
if not modules then modules={} end modules ['data-exp']={
version=1.001,
@@ -13413,6 +14185,7 @@ if not modules then modules={} end modules ['data-exp']={
}
local format,find,gmatch,lower,char,sub=string.format,string.find,string.gmatch,string.lower,string.char,string.sub
local concat,sort=table.concat,table.sort
+local sortedkeys=table.sortedkeys
local lpegmatch,lpegpatterns=lpeg.match,lpeg.patterns
local Ct,Cs,Cc,Carg,P,C,S=lpeg.Ct,lpeg.Cs,lpeg.Cc,lpeg.Carg,lpeg.P,lpeg.C,lpeg.S
local type,next=type,next
@@ -13758,14 +14531,16 @@ local nothing=function() end
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern)=="string" then
local pattern=lower(pattern)
- local files=content.files
+ local files=content.files
local remap=content.remap
if files and remap then
- local n=next(files)
+ local f=sortedkeys(files)
+ local n=#f
+ local i=0
local function iterator()
- while n do
- local k=n
- n=next(files,k)
+ while i<n do
+ i=i+1
+ local k=f[i]
if find(k,pattern) then
return files[k],remap and remap[k] or k
end
@@ -13784,7 +14559,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-env"] = package.loaded["data-env"] or true
--- original size: 9216, stripped down to: 6798
+-- original size: 9649, stripped down to: 7131
if not modules then modules={} end modules ['data-env']={
version=1.001,
@@ -13920,6 +14695,11 @@ local relations=allocate {
names={ 'fontconfig','fontconfig file','fontconfig files' },
variable='FONTCONFIG_PATH',
},
+ pk={
+ names={ "pk" },
+ variable='PKFONTS',
+ suffixes={ 'pk' },
+ },
},
obsolete={
enc={
@@ -14063,7 +14843,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmp"] = package.loaded["data-tmp"] or true
--- original size: 15618, stripped down to: 11629
+-- original size: 16066, stripped down to: 11938
if not modules then modules={} end modules ['data-tmp']={
version=1.100,
@@ -14439,7 +15219,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-met"] = package.loaded["data-met"] or true
--- original size: 5347, stripped down to: 4015
+-- original size: 5488, stripped down to: 4101
if not modules then modules={} end modules ['data-met']={
version=1.100,
@@ -14558,7 +15338,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 67003, stripped down to: 46291
+-- original size: 67241, stripped down to: 46427
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -15828,10 +16608,18 @@ local function findfiles(filename,filetype,allresults)
return result or {},status
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename=="" then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
return filedirname(findfiles(filename,filetype,false)[1] or "")
@@ -16106,7 +16894,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-pre"] = package.loaded["data-pre"] or true
--- original size: 3950, stripped down to: 2935
+-- original size: 4092, stripped down to: 3016
if not modules then modules={} end modules ['data-pre']={
version=1.001,
@@ -16224,7 +17012,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-inp"] = package.loaded["data-inp"] or true
--- original size: 910, stripped down to: 823
+-- original size: 935, stripped down to: 838
if not modules then modules={} end modules ['data-inp']={
version=1.001,
@@ -16254,7 +17042,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-out"] = package.loaded["data-out"] or true
--- original size: 530, stripped down to: 475
+-- original size: 548, stripped down to: 483
if not modules then modules={} end modules ['data-out']={
version=1.001,
@@ -16277,7 +17065,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-fil"] = package.loaded["data-fil"] or true
--- original size: 3863, stripped down to: 3310
+-- original size: 3976, stripped down to: 3391
if not modules then modules={} end modules ['data-fil']={
version=1.001,
@@ -16385,7 +17173,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-con"] = package.loaded["data-con"] or true
--- original size: 5010, stripped down to: 3588
+-- original size: 5148, stripped down to: 3680
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -16504,7 +17292,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-use"] = package.loaded["data-use"] or true
--- original size: 3899, stripped down to: 2984
+-- original size: 4000, stripped down to: 3052
if not modules then modules={} end modules ['data-use']={
version=1.001,
@@ -16595,7 +17383,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-zip"] = package.loaded["data-zip"] or true
--- original size: 8772, stripped down to: 6841
+-- original size: 9036, stripped down to: 7041
if not modules then modules={} end modules ['data-zip']={
version=1.001,
@@ -16832,7 +17620,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tre"] = package.loaded["data-tre"] or true
--- original size: 8479, stripped down to: 5580
+-- original size: 8712, stripped down to: 5726
if not modules then modules={} end modules ['data-tre']={
version=1.001,
@@ -17021,7 +17809,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-sch"] = package.loaded["data-sch"] or true
--- original size: 6569, stripped down to: 5304
+-- original size: 6779, stripped down to: 5444
if not modules then modules={} end modules ['data-sch']={
version=1.001,
@@ -17202,7 +17990,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 4313, stripped down to: 3227
+-- original size: 4447, stripped down to: 3302
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -17311,7 +18099,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-aux"] = package.loaded["data-aux"] or true
--- original size: 2431, stripped down to: 1996
+-- original size: 2494, stripped down to: 2047
if not modules then modules={} end modules ['data-aux']={
version=1.001,
@@ -17378,7 +18166,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-tmf"] = package.loaded["data-tmf"] or true
--- original size: 2601, stripped down to: 1627
+-- original size: 2674, stripped down to: 1658
if not modules then modules={} end modules ['data-tmf']={
version=1.001,
@@ -17434,7 +18222,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lst"] = package.loaded["data-lst"] or true
--- original size: 2734, stripped down to: 2354
+-- original size: 2815, stripped down to: 2415
if not modules then modules={} end modules ['data-lst']={
version=1.001,
@@ -17514,7 +18302,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-lib"] = package.loaded["util-lib"] or true
--- original size: 11549, stripped down to: 5905
+-- original size: 11846, stripped down to: 6059
if not modules then modules={} end modules ['util-lib']={
version=1.001,
@@ -17700,7 +18488,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-sta"] = package.loaded["luat-sta"] or true
--- original size: 5703, stripped down to: 2507
+-- original size: 5914, stripped down to: 2584
if not modules then modules={} end modules ['luat-sta']={
version=1.001,
@@ -17803,7 +18591,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-fmt"] = package.loaded["luat-fmt"] or true
--- original size: 5955, stripped down to: 4926
+-- original size: 6967, stripped down to: 5631
if not modules then modules={} end modules ['luat-fmt']={
version=1.001,
@@ -17832,7 +18620,7 @@ local function primaryflags()
end
return concat(flags," ")
end
-function environment.make_format(name)
+function environment.make_format(name,silent)
local engine=environment.ownmain or "luatex"
local olddir=dir.current()
local path=caches.getwritablepath("formats",engine) or ""
@@ -17889,9 +18677,23 @@ function environment.make_format(name)
lfs.chdir(olddir)
return
end
- local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform=="unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump=os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command=format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result=os.execute(command)
+ local runtime=statistics.stoptiming()
+ if result~=0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name))
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime))
+ end
+ os.remove("temp.log")
+ else
+ local command=format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
local pattern=file.removesuffix(file.basename(usedluastub)).."-*.mem"
local mp=dir.glob(pattern)
if mp then
@@ -17935,10 +18737,10 @@ end
end -- of closure
--- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
+-- used libraries : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 745793
--- stripped bytes : 269308
+-- original bytes : 796826
+-- stripped bytes : 289016
-- end library merge
@@ -17982,6 +18784,8 @@ local ownlibs = { -- order can be made better
'util-str.lua', -- code might move to l-string
'util-tab.lua',
+ 'util-fil.lua',
+ 'util-sac.lua',
'util-sto.lua',
'util-prs.lua',
'util-fmt.lua',
@@ -18037,13 +18841,21 @@ local ownlibs = { -- order can be made better
}
--- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/data-tmf.lua
+-- c:/data/develop/tex-context/tex/texmf-win64/bin/../../texmf-context/tex/context/base/mkiv/data-tmf.lua
-- c:/data/develop/context/sources/data-tmf.lua
local ownlist = {
-- '.',
-- ownpath ,
owntree .. "/../../../../context/sources", -- HH's development path
+ --
+ owntree .. "/../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../texmf/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-local/tex/context/base/mkiv",
+ owntree .. "/../../../texmf-context/tex/context/base/mkiv",
+ owntree .. "/../../../texmf/tex/context/base/mkiv",
+ --
owntree .. "/../../texmf-local/tex/context/base",
owntree .. "/../../texmf-context/tex/context/base",
owntree .. "/../../texmf/tex/context/base",
diff --git a/Master/texmf-dist/tex/context/base/char-cjk.lua b/Master/texmf-dist/tex/context/base/char-cjk.lua
deleted file mode 100644
index 30f61889620..00000000000
--- a/Master/texmf-dist/tex/context/base/char-cjk.lua
+++ /dev/null
@@ -1,365 +0,0 @@
-if not modules then modules = { } end modules ['char-cjk'] = {
- version = 1.001,
- comment = "companion to char-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local setmetatable = setmetatable
-local insert = table.insert
-local floor = math.floor
-local formatters = string.formatters
-local utfchar = utf.char
-
-local ranges = characters.ranges
-local allocate = utilities.storage.allocate
-
--- Hangul Syllable
-
--- The following conversion is taken from unicode.org/reports/tr15/tr15-23.html#Hangul
--- but adapted to our needs.
-
--- local SBase = 0xAC00
---
--- local LBase, LCount = 0x1100, 19
--- local VBase, VCount = 0x1161, 21
--- local TBase, TCount = 0x11A7, 28
---
--- local NCount = VCount * TCount
--- local SCount = LCount * NCount
---
--- local function decomposed(unicode)
--- local SIndex = unicode - SBase
--- if SIndex >= 0 and SIndex < SCount then
--- local lead_consonant = LBase + floor( SIndex / NCount)
--- local medial_vowel = VBase + floor((SIndex % NCount) / TCount)
--- local tail_consonant = TBase + SIndex % TCount
--- if tail_consonant ~= TBase then
--- return lead_consonant, medial_vowel, tail_consonant
--- else
--- return lead_consonant, medial_vowel
--- end
--- end
--- end
---
--- Lua will optimize the inline constants so the next variant is
--- 10% faster. In practice this will go unnoticed, but it's also less
--- code, so let's do it. Pushing the constant section into the
--- function body saves 5%.
-
-local function decomposed(unicode)
- local index = unicode - 0xAC00
- if index >= 0 and index < 19 * 21 * 28 then
- local lead_consonant = 0x1100 + floor( index / (21 * 28))
- local medial_vowel = 0x1161 + floor((index % (21 * 28)) / 28)
- local tail_consonant = 0x11A7 + index % 28
- if tail_consonant ~= 0x11A7 then
- return lead_consonant, medial_vowel, tail_consonant
- else
- return lead_consonant, medial_vowel
- end
- end
-end
-
-local lead_consonants = { [0] =
- "G", "GG", "N", "D", "DD", "R", "M", "B", "BB",
- "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H"
-}
-
-local medial_vowels = { [0] =
- "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O",
- "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI",
- "YU", "EU", "YI", "I"
-}
-
-local tail_consonants = { [0] =
- "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", "LG", "LM",
- "LB", "LS", "LT", "LP", "LH", "M", "B", "BS",
- "S", "SS", "NG", "J", "C", "K", "T", "P", "H"
-}
-
--- local function description(unicode)
--- local index = unicode - 0xAC00
--- if index >= 0 and index < 19 * 21 * 28 then
--- local lead_consonant = floor( index / NCount)
--- local medial_vowel = floor((index % NCount) / TCount)
--- local tail_consonant = index % TCount
--- return formatters["HANGUL SYLLABLE %s%s%s"](
--- lead_consonants[lead_consonant],
--- medial_vowels [medial_vowel ],
--- tail_consonants[tail_consonant]
--- )
--- end
--- end
-
-local function description(unicode)
- local index = unicode - 0xAC00
- if index >= 0 and index < 19 * 21 * 28 then
- local lead_consonant = floor( index / (21 * 28))
- local medial_vowel = floor((index % (21 * 28)) / 28)
- local tail_consonant = index % 28
- return formatters["HANGUL SYLLABLE %s%s%s"](
- lead_consonants[lead_consonant],
- medial_vowels [medial_vowel ],
- tail_consonants[tail_consonant]
- )
- end
-end
-
--- so far
-
--- We have a [lead consonant,medial vowel,tail consonant] where the last one
--- is optional. For sort ranges we need the first one but some are collapsed.
--- Beware, we map to modern so the font should support it.
-
-local function leadconsonant(unicode)
- return
- -- unicode < 0xAC00 and nil -- original
- -- unicode > 0xD7AF and nil or -- original
- unicode >= 0xD558 and 0x314E or -- 하 => ㅎ
- unicode >= 0xD30C and 0x314D or -- 파 => ㅍ
- unicode >= 0xD0C0 and 0x314C or -- 타 => ㅌ
- unicode >= 0xCE74 and 0x314B or -- 카 => ㅋ
- unicode >= 0xCC28 and 0x314A or -- 차 => ㅊ
- unicode >= 0xC790 and 0x3148 or -- 자 => ㅈ
- unicode >= 0xC544 and 0x3147 or -- 아 => ㅇ
- unicode >= 0xC0AC and 0x3145 or -- 사 => ㅅ
- unicode >= 0xBC14 and 0x3142 or -- 바 => ㅂ
- unicode >= 0xB9C8 and 0x3141 or -- 마 => ㅁ
- unicode >= 0xB77C and 0x3139 or -- 라 => ㄹ
- unicode >= 0xB2E4 and 0x3137 or -- 다 => ㄷ
- unicode >= 0xB098 and 0x3134 or -- 나 => ㄴ
- unicode >= 0xAC00 and 0x3131 or -- 가 => ㄱ
- nil -- can't happen
-end
-
-local remapped = { -- this might be merged into char-def.lua
- [0x1100] = 0x3131, -- G
- [0x1101] = 0x3132, -- GG
- [0x1102] = 0x3134, -- N
- [0x1103] = 0x3137, -- D
- [0x1104] = 0x3138, -- DD
- [0x1105] = 0x3139, -- R
- -- [0X111A] = 0x3140, -- LH used for last sound
- [0x1106] = 0x3141, -- M
- [0x1107] = 0x3142, -- B
- [0x1108] = 0x3143, -- BB
- -- [0x1121] = 0x3144, -- BS used for last sound
- [0x1109] = 0x3145, -- S
- [0x110A] = 0x3146, -- SS
- [0x110B] = 0x3147, -- (IEUNG) no sound but has form
- [0x110C] = 0x3148, -- J
- [0x110D] = 0x3149, -- JJ
- [0x110E] = 0x314A, -- C
- [0x110F] = 0x314B, -- K
- [0x1110] = 0x314C, -- T
- [0x1111] = 0x314D, -- P
- [0x1112] = 0x314E, -- H
-
- [0x1161] = 0x314F, -- A
- [0x1162] = 0x3150, -- AE
- [0x1163] = 0x3151, -- YA
- [0x1164] = 0x3152, -- YAE
- [0x1165] = 0x3153, -- EO
- [0x1166] = 0x3154, -- E
- [0x1167] = 0x3155, -- YEO
- [0x1168] = 0x3156, -- YE
- [0x1169] = 0x3157, -- O
- [0x116A] = 0x3158, -- WA
- [0x116B] = 0x3159, -- WAE
- [0x116C] = 0x315A, -- OE
- [0x116D] = 0x315B, -- YO
- [0x116E] = 0x315C, -- U
- [0x116F] = 0x315D, -- WEO
- [0x1170] = 0x315E, -- WE
- [0x1171] = 0x315F, -- WI
- [0x1172] = 0x3160, -- YU
- [0x1173] = 0x3161, -- EU
- [0x1174] = 0x3162, -- YI
- [0x1175] = 0x3163, -- I
-
- [0x11A8] = 0x3131, -- G
- [0x11A9] = 0x3132, -- GG
- [0x11AA] = 0x3133, -- GS
- [0x11AB] = 0x3134, -- N
- [0x11AC] = 0x3135, -- NJ
- [0x11AD] = 0x3136, -- NH
- [0x11AE] = 0x3137, -- D
- [0x11AF] = 0x3139, -- L
- [0x11B0] = 0x313A, -- LG
- [0x11B1] = 0x313B, -- LM
- [0x11B2] = 0x313C, -- LB
- [0x11B3] = 0x313D, -- LS
- [0x11B4] = 0x313E, -- LT
- [0x11B5] = 0x313F, -- LP
- [0x11B6] = 0x3140, -- LH
- [0x11B7] = 0x3141, -- M
- [0x11B8] = 0x3142, -- B
- [0x11B9] = 0x3144, -- BS
- [0x11BA] = 0x3145, -- S
- [0x11BB] = 0x3146, -- SS
- [0x11BC] = 0x3147, -- NG
- [0x11BD] = 0x3148, -- J
- [0x11BE] = 0x314A, -- C
- [0x11BF] = 0x314B, -- K
- [0x11C0] = 0x314C, -- T
- [0x11C1] = 0x314D, -- P
- [0x11C2] = 0x314E, -- H
-}
-
-characters.hangul = allocate {
- decomposed = decomposed,
- description = description,
- leadconsonant = leadconsonant,
- remapped = remapped,
-}
-
--- so far
-
-local hangul_syllable_basetable = {
- category = "lo",
- cjkwd = "w",
- description = "<Hangul Syllable>",
- direction = "l",
- linebreak = "h2",
-}
-
-local hangul_syllable_metatable = {
- __index = function(t,k)
- local u = t.unicodeslot
- if k == "fscode" or k == "leadconsonant" then
- return leadconsonant(u)
- elseif k == "decomposed" then
- return { decomposed(u) }
- elseif k == "specials" then
- return { "char", decomposed(u) }
- elseif k == "description" then
- return description(u)
- else
- return hangul_syllable_basetable[k]
- end
- end
-}
-
-function characters.remap_hangul_syllabe(t)
- local tt = type(t)
- if tt == "number" then
- return remapped[t] or t
- elseif tt == "table" then
- local r = { }
- for i=1,#t do
- local ti = t[i]
- r[i] = remapped[ti] or ti
- end
- return r
- else
- return t
- end
-end
-
-local hangul_syllable_extender = function(k,v)
- local t = {
- unicodeslot = k,
- }
- setmetatable(t,hangul_syllable_metatable)
- return t
-end
-
-local hangul_syllable_range = {
- first = 0xAC00,
- last = 0xD7A3,
- extender = hangul_syllable_extender,
-}
-
-setmetatable(hangul_syllable_range, hangul_syllable_metatable)
-
--- CJK Ideograph
-
-local cjk_ideograph_metatable = {
- __index = {
- category = "lo",
- cjkwd = "w",
- description = "<CJK Ideograph>",
- direction = "l",
- linebreak = "id",
- }
-}
-
-local cjk_ideograph_extender = function(k,v)
- local t = {
- -- shcode = shcode,
- unicodeslot = k,
- }
- setmetatable(t,cjk_ideograph_metatable)
- return t
-end
-
-local cjk_ideograph_range = {
- first = 0x4E00,
- last = 0x9FBB,
- extender = cjk_ideograph_extender,
-}
-
--- CJK Ideograph Extension A
-
-local cjk_ideograph_extension_a_metatable = {
- __index = {
- category = "lo",
- cjkwd = "w",
- description = "<CJK Ideograph Extension A>",
- direction = "l",
- linebreak = "id",
- }
-}
-
-local cjk_ideograph_extension_a_extender = function(k,v)
- local t = {
- -- shcode = shcode,
- unicodeslot = k,
- }
- setmetatable(t,cjk_ideograph_extension_a_metatable)
- return t
-end
-
-local cjk_ideograph_extension_a_range = {
- first = 0x3400,
- last = 0x4DB5,
- extender = cjk_ideograph_extension_a_extender,
-}
-
--- CJK Ideograph Extension B
-
-local cjk_ideograph_extension_b_metatable = {
- __index = {
- category = "lo",
- cjkwd = "w",
- description = "<CJK Ideograph Extension B>",
- direction = "l",
- linebreak = "id",
- }
-}
-
-local cjk_ideograph_extension_b_extender = function(k,v)
- local t = {
- -- shcode = shcode,
- unicodeslot = k,
- }
- setmetatable(t,cjk_ideograph_extension_b_metatable)
- return t
-end
-
-local cjk_ideograph_extension_b_range = {
- first = 0x20000,
- last = 0x2A6D6,
- extender = cjk_ideograph_extension_b_extender,
-}
-
--- Ranges
-
-insert(ranges, hangul_syllable_range)
-insert(ranges, cjk_ideograph_range)
-insert(ranges, cjk_ideograph_extension_a_range)
-insert(ranges, cjk_ideograph_extension_b_range)
-
--- Japanese
diff --git a/Master/texmf-dist/tex/context/base/context-version.pdf b/Master/texmf-dist/tex/context/base/context-version.pdf
index 5244e0ba98b..daf462b45de 100644
--- a/Master/texmf-dist/tex/context/base/context-version.pdf
+++ b/Master/texmf-dist/tex/context/base/context-version.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/core-env.lua b/Master/texmf-dist/tex/context/base/core-env.lua
deleted file mode 100644
index a3a87b7f78e..00000000000
--- a/Master/texmf-dist/tex/context/base/core-env.lua
+++ /dev/null
@@ -1,261 +0,0 @@
-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 P, C, S, Cc, lpegmatch, patterns = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc, lpeg.match, lpeg.patterns
-
-local texgetcount = tex.getcount
-local texsetcount = tex.setcount
-
-local allocate = utilities.storage.allocate
-local setmetatableindex = table.setmetatableindex
-local setmetatablecall = table.setmetatablecall
-
-local context = context
-
-tex.modes = allocate { }
-tex.systemmodes = allocate { }
-tex.constants = allocate { }
-tex.conditionals = allocate { }
-tex.ifs = allocate { }
-tex.isdefined = allocate { }
-
-local modes = { }
-local systemmodes = { }
-
--- if newtoken then -- we keep the old code for historic reasons
-
- -- undefined: mode == 0 or cmdname = "undefined_cs"
-
- local create = newtoken.create
-
- local cache = table.setmetatableindex(function(t,k)
- local v = create(k)
- t[k] = v
- return v
- end)
-
- -- we can have a modes cache too
-
- local iftrue = cache["iftrue"].mode
- local undefined = cache["*undefined*crap*"].mode -- is this ok?
-
- setmetatableindex(tex.modes, function(t,k)
- local m = modes[k]
- if m then
- return m()
- else
- local n = "mode>" .. k
- if cache[n].mode == 0 then
- return false
- else
- modes[k] = function() return texgetcount(n) == 1 end
- return texgetcount(n) == 1 -- 2 is prevented
- end
- end
- end)
-
- setmetatableindex(tex.systemmodes, function(t,k)
- local m = systemmodes[k]
- if m then
- return m()
- else
- local n = "mode>*" .. k
- if cache[n].mode == 0 then
- return false
- else
- systemmodes[k] = function() return texgetcount(n) == 1 end
- return texgetcount(n) == 1 -- 2 is prevented
- end
- end
- end)
-
- setmetatableindex(tex.constants, function(t,k)
- return cache[k].mode ~= 0 and texgetcount(k) or 0
- end)
-
- setmetatableindex(tex.conditionals, function(t,k) -- 0 == true
- return cache[k].mode ~= 0 and texgetcount(k) == 0
- end)
-
- table.setmetatableindex(tex.ifs, function(t,k)
- -- local mode = cache[k].mode
- -- if mode == 0 then
- -- return nil
- -- else
- -- return mode == iftrue
- -- end
- return cache[k].mode == iftrue
- end)
-
- setmetatableindex(tex.isdefined, function(t,k)
- return k and cache[k].mode ~= 0
- end)
-
- setmetatablecall(tex.isdefined, function(t,k)
- return k and cache[k].mode ~= 0
- end)
-
- local dimencode = cache["scratchdimen" ].command
- local countcode = cache["scratchcounter"].command
- local tokencode = cache["scratchtoken" ].command
- local skipcode = cache["scratchskip" ].command
-
- local types = {
- [dimencode] = "dimen",
- [countcode] = "count",
- [tokencode] = "token",
- [skipcode ] = "skip",
- }
-
- function tex.isdimen(name)
- return cache[name].command == dimencode
- end
-
- function tex.iscount(name)
- return cache[name].command == countcode
- end
-
- function tex.istoken(name)
- return cache[name].command == tokencode
- end
-
- function tex.isskip(name)
- return cache[name].command == skipcode
- end
-
- function tex.type(name)
- return types[cache[name].command] or "macro"
- end
-
--- else
---
--- local csname_id = token.csname_id
--- local create = token.create
---
--- local undefined = csname_id("*undefined*crap*")
--- local iftrue = create("iftrue")[2] -- inefficient hack
---
--- setmetatableindex(tex.modes, function(t,k)
--- local m = modes[k]
--- if m then
--- return m()
--- else
--- local n = "mode>" .. k
--- if csname_id(n) == undefined then
--- return false
--- else
--- modes[k] = function() return texgetcount(n) == 1 end
--- return texgetcount(n) == 1 -- 2 is prevented
--- end
--- end
--- end)
---
--- setmetatableindex(tex.systemmodes, function(t,k)
--- local m = systemmodes[k]
--- if m then
--- return m()
--- else
--- local n = "mode>*" .. k
--- if csname_id(n) == undefined then
--- return false
--- else
--- systemmodes[k] = function() return texgetcount(n) == 1 end
--- return texgetcount(n) == 1 -- 2 is prevented
--- end
--- end
--- end)
---
--- setmetatableindex(tex.constants, function(t,k)
--- return csname_id(k) ~= undefined and texgetcount(k) or 0
--- end)
---
--- setmetatableindex(tex.conditionals, function(t,k) -- 0 == true
--- return csname_id(k) ~= undefined and texgetcount(k) == 0
--- end)
---
--- setmetatableindex(tex.ifs, function(t,k)
--- -- k = "if" .. k -- better not
--- return csname_id(k) ~= undefined and create(k)[2] == iftrue -- inefficient, this create, we need a helper
--- end)
---
--- setmetatableindex(tex.isdefined, function(t,k)
--- return k and csname_id(k) ~= undefined
--- end)
--- setmetatablecall(tex.isdefined, function(t,k)
--- return k and csname_id(k) ~= undefined
--- end)
---
--- local lookuptoken = token.lookup
---
--- local dimencode = lookuptoken("scratchdimen" )[1]
--- local countcode = lookuptoken("scratchcounter")[1]
--- local tokencode = lookuptoken("scratchtoken" )[1]
--- local skipcode = lookuptoken("scratchskip" )[1]
---
--- local types = {
--- [dimencode] = "dimen",
--- [countcode] = "count",
--- [tokencode] = "token",
--- [skipcode ] = "skip",
--- }
---
--- function tex.isdimen(name)
--- return lookuptoken(name)[1] == dimencode
--- end
---
--- function tex.iscount(name)
--- return lookuptoken(name)[1] == countcode
--- end
---
--- function tex.istoken(name)
--- return lookuptoken(name)[1] == tokencode
--- end
---
--- function tex.isskip(name)
--- return lookuptoken(name)[1] == skipcode
--- end
---
--- function tex.type(name)
--- return types[lookuptoken(name)[1]] or "macro"
--- end
---
--- end
-
-function context.setconditional(name,value)
- if value then
- context.settruevalue(name)
- else
- context.setfalsevalue(name)
- end
-end
-
----- arg = P("{") * C(patterns.nested) * P("}") + Cc("")
-
-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 / context.luasetup
- + P("xml") * arg / context.setupwithargument -- or xmlw as xmlsetup has swapped arguments
- + (P("tex") * tag + str) / context.texsetup
- + sep^1
-)^1
-
-interfaces.implement {
- name = "autosetups",
- actions = function(str) lpegmatch(pattern,str) end,
- arguments = "string"
-}
-
diff --git a/Master/texmf-dist/tex/context/base/font-map.lua b/Master/texmf-dist/tex/context/base/font-map.lua
deleted file mode 100644
index 449a00f2efd..00000000000
--- a/Master/texmf-dist/tex/context/base/font-map.lua
+++ /dev/null
@@ -1,535 +0,0 @@
-if not modules then modules = { } end modules ['font-map'] = {
- version = 1.001,
- comment = "companion to font-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local tonumber, next, type = tonumber, next, type
-
-local match, format, find, concat, gsub, lower = string.match, string.format, string.find, table.concat, string.gsub, string.lower
-local P, R, S, C, Ct, Cc, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cc, lpeg.match
-local utfbyte = utf.byte
-local floor = math.floor
-local formatters = string.formatters
-
-local trace_loading = false trackers.register("fonts.loading", function(v) trace_loading = v end)
-local trace_mapping = false trackers.register("fonts.mapping", function(v) trace_unimapping = v end)
-
-local report_fonts = logs.reporter("fonts","loading") -- not otf only
-
-local fonts = fonts or { }
-local mappings = fonts.mappings or { }
-fonts.mappings = mappings
-
-local allocate = utilities.storage.allocate
-
---[[ldx--
-<p>Eventually this code will disappear because map files are kind
-of obsolete. Some code may move to runtime or auxiliary modules.</p>
-<p>The name to unciode related code will stay of course.</p>
---ldx]]--
-
-local function loadlumtable(filename) -- will move to font goodies
- local lumname = file.replacesuffix(file.basename(filename),"lum")
- local lumfile = resolvers.findfile(lumname,"map") or ""
- if lumfile ~= "" and lfs.isfile(lumfile) then
- if trace_loading or trace_mapping then
- report_fonts("loading map table %a",lumfile)
- end
- lumunic = dofile(lumfile)
- return lumunic, lumfile
- end
-end
-
-local hex = R("AF","09")
-local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local hexsix = (hex*hex*hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local dec = (R("09")^1) / tonumber
-local period = P(".")
-local unicode = P("uni") * (hexfour * (period + P(-1)) * Cc(false) + Ct(hexfour^1) * Cc(true))
-local ucode = P("u") * (hexsix * (period + P(-1)) * Cc(false) + Ct(hexsix ^1) * Cc(true))
-local index = P("index") * dec * Cc(false)
-
-local parser = unicode + ucode + index
-
-local parsers = { }
-
-local function makenameparser(str)
- if not str or str == "" then
- return parser
- else
- local p = parsers[str]
- if not p then
- p = P(str) * period * dec * Cc(false)
- parsers[str] = p
- end
- return p
- end
-end
-
-local f_single = formatters["%04X"]
-local f_double = formatters["%04X%04X"]
-
-local function tounicode16(unicode,name)
- if unicode < 0x10000 then
- return f_single(unicode)
- elseif unicode < 0x1FFFFFFFFF then
- return f_double(floor(unicode/1024),unicode%1024+0xDC00)
- else
- report_fonts("can't convert %a in %a into tounicode",unicode,name)
- end
-end
-
-local function tounicode16sequence(unicodes,name)
- local t = { }
- for l=1,#unicodes do
- local u = unicodes[l]
- if u < 0x10000 then
- t[l] = f_single(u)
- elseif unicode < 0x1FFFFFFFFF then
- t[l] = f_double(floor(u/1024),u%1024+0xDC00)
- else
- report_fonts ("can't convert %a in %a into tounicode",u,name)
- return
- end
- end
- return concat(t)
-end
-
-local function tounicode(unicode,name)
- if type(unicode) == "table" then
- local t = { }
- for l=1,#unicode do
- local u = unicode[l]
- if u < 0x10000 then
- t[l] = f_single(u)
- elseif u < 0x1FFFFFFFFF then
- t[l] = f_double(floor(u/1024),u%1024+0xDC00)
- else
- report_fonts ("can't convert %a in %a into tounicode",u,name)
- return
- end
- end
- return concat(t)
- else
- if unicode < 0x10000 then
- return f_single(unicode)
- elseif unicode < 0x1FFFFFFFFF then
- return f_double(floor(unicode/1024),unicode%1024+0xDC00)
- else
- report_fonts("can't convert %a in %a into tounicode",unicode,name)
- end
- end
-end
-
-
-local function fromunicode16(str)
- if #str == 4 then
- return tonumber(str,16)
- else
- local l, r = match(str,"(....)(....)")
- return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
- end
-end
-
--- Slightly slower:
---
--- local p = C(4) * (C(4)^-1) / function(l,r)
--- if r then
--- return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
--- else
--- return tonumber(l,16)
--- end
--- end
---
--- local function fromunicode16(str)
--- return lpegmatch(p,str)
--- end
-
--- This is quite a bit faster but at the cost of some memory but if we
--- do this we will also use it elsewhere so let's not follow this route
--- now. I might use this method in the plain variant (no caching there)
--- but then I need a flag that distinguishes between code branches.
---
--- local cache = { }
---
--- function mappings.tounicode16(unicode)
--- local s = cache[unicode]
--- if not s then
--- if unicode < 0x10000 then
--- s = format("%04X",unicode)
--- else
--- s = format("%04X%04X",unicode/0x400+0xD800,unicode%0x400+0xDC00)
--- end
--- cache[unicode] = s
--- end
--- return s
--- end
-
-mappings.loadlumtable = loadlumtable
-mappings.makenameparser = makenameparser
-mappings.tounicode = tounicode
-mappings.tounicode16 = tounicode16
-mappings.tounicode16sequence = tounicode16sequence
-mappings.fromunicode16 = fromunicode16
-
-local ligseparator = P("_")
-local varseparator = P(".")
-local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator * C((1 - ligseparator - varseparator)^1))^0)
-
--- local function test(name)
--- local split = lpegmatch(namesplitter,name)
--- print(string.formatters["%s: [% t]"](name,split))
--- end
-
--- maybe: ff fi fl ffi ffl => f_f f_i f_l f_f_i f_f_l
-
--- test("i.f_")
--- test("this")
--- test("this.that")
--- test("japan1.123")
--- test("such_so_more")
--- test("such_so_more.that")
-
--- to be completed .. for fonts that use unicodes for ligatures which
--- is a actually a bad thing and should be avoided in the first place
-
-local overloads = allocate {
- IJ = { name = "I_J", unicode = { 0x49, 0x4A }, mess = 0x0132 },
- ij = { name = "i_j", unicode = { 0x69, 0x6A }, mess = 0x0133 },
- ff = { name = "f_f", unicode = { 0x66, 0x66 }, mess = 0xFB00 },
- fi = { name = "f_i", unicode = { 0x66, 0x69 }, mess = 0xFB01 },
- fl = { name = "f_l", unicode = { 0x66, 0x6C }, mess = 0xFB02 },
- ffi = { name = "f_f_i", unicode = { 0x66, 0x66, 0x69 }, mess = 0xFB03 },
- ffl = { name = "f_f_l", unicode = { 0x66, 0x66, 0x6C }, mess = 0xFB04 },
- fj = { name = "f_j", unicode = { 0x66, 0x6A } },
- fk = { name = "f_k", unicode = { 0x66, 0x6B } },
-}
-
-for k, v in next, overloads do
- local name = v.name
- local mess = v.mess
- if name then
- overloads[name] = v
- end
- if mess then
- overloads[mess] = v
- end
-end
-
-mappings.overloads = overloads
-
-function mappings.addtounicode(data,filename)
- local resources = data.resources
- local properties = data.properties
- local descriptions = data.descriptions
- local unicodes = resources.unicodes
- local lookuptypes = resources.lookuptypes
- if not unicodes then
- return
- end
- -- we need to move this code
- unicodes['space'] = unicodes['space'] or 32
- unicodes['hyphen'] = unicodes['hyphen'] or 45
- unicodes['zwj'] = unicodes['zwj'] or 0x200D
- unicodes['zwnj'] = unicodes['zwnj'] or 0x200C
- local private = fonts.constructors.privateoffset
- local unicodevector = fonts.encodings.agl.unicodes -- loaded runtime in context
- ----- namevector = fonts.encodings.agl.names -- loaded runtime in context
- local missing = { }
- local lumunic, uparser, oparser
- local cidinfo, cidnames, cidcodes, usedmap
- --
- cidinfo = properties.cidinfo
- usedmap = cidinfo and fonts.cid.getmap(cidinfo)
- --
- if usedmap then
- oparser = usedmap and makenameparser(cidinfo.ordering)
- cidnames = usedmap.names
- cidcodes = usedmap.unicodes
- end
- uparser = makenameparser()
- local ns, nl = 0, 0
- for unic, glyph in next, descriptions do
- local index = glyph.index
- local name = glyph.name
- local r = overloads[name]
- if r then
- -- get rid of weird ligatures
- -- glyph.name = r.name
- glyph.unicode = r.unicode
- elseif unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- local unicode = lumunic and lumunic[name] or unicodevector[name]
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
- end
- -- cidmap heuristics, beware, there is no guarantee for a match unless
- -- the chain resolves
- if (not unicode) and usedmap then
- local foundindex = lpegmatch(oparser,name)
- if foundindex then
- unicode = cidcodes[foundindex] -- name to number
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
- else
- local reference = cidnames[foundindex] -- number to name
- if reference then
- local foundindex = lpegmatch(oparser,reference)
- if foundindex then
- unicode = cidcodes[foundindex]
- if unicode then
- glyph.unicode = unicode
- ns = ns + 1
- end
- end
- if not unicode or unicode == "" then
- local foundcodes, multiple = lpegmatch(uparser,reference)
- if foundcodes then
- glyph.unicode = foundcodes
- if multiple then
- nl = nl + 1
- unicode = true
- else
- ns = ns + 1
- unicode = foundcodes
- end
- end
- end
- end
- end
- end
- end
- -- a.whatever or a_b_c.whatever or a_b_c (no numbers) a.b_
- --
- -- It is not trivial to find a solution that suits all fonts. We tried several alternatives
- -- and this one seems to work reasonable also with fonts that use less standardized naming
- -- schemes. The extra private test is tested by KE and seems to work okay with non-typical
- -- fonts as well.
- --
- -- The next time I look into this, I'll add an extra analysis step to the otf loader (we can
- -- resolve some tounicodes by looking into the gsub data tables that are bound to glyphs.
- --
- if not unicode or unicode == "" then
- local split = lpegmatch(namesplitter,name)
- local nsplit = split and #split or 0
- local t, n = { }, 0
- unicode = true
- for l=1,nsplit do
- local base = split[l]
- local u = unicodes[base] or unicodevector[base]
- if not u then
- break
- elseif type(u) == "table" then
- if u[1] >= private then
- unicode = false
- break
- end
- n = n + 1
- t[n] = u[1]
- else
- if u >= private then
- unicode = false
- break
- end
- n = n + 1
- t[n] = u
- end
- end
- if n == 0 then -- done then
- -- nothing
- elseif n == 1 then
- glyph.unicode = t[1]
- else
- glyph.unicode = t
- end
- nl = nl + 1
- end
- -- last resort (we might need to catch private here as well)
- if not unicode or unicode == "" then
- local foundcodes, multiple = lpegmatch(uparser,name)
- if foundcodes then
- glyph.unicode = foundcodes
- if multiple then
- nl = nl + 1
- unicode = true
- else
- ns = ns + 1
- unicode = foundcodes
- end
- end
- end
- -- check using substitutes and alternates
- local r = overloads[unicode]
- if r then
- unicode = r.unicode
- glyph.unicode = unicode
- end
- --
- if not unicode then
- missing[name] = true
- end
- end
- end
- if next(missing) then
- local guess = { }
- -- helper
- local function check(gname,code,unicode)
- local description = descriptions[code]
- -- no need to add a self reference
- local variant = description.name
- if variant == gname then
- return
- end
- -- the variant already has a unicode (normally that resultrs in a default tounicode to self)
- local unic = unicodes[variant]
- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- -- no default mapping and therefore maybe no tounicode yet
- else
- return
- end
- -- the variant already has a tounicode
- if descriptions[code].unicode then
- return
- end
- -- add to the list
- local g = guess[variant]
- -- local r = overloads[unicode]
- -- if r then
- -- unicode = r.unicode
- -- end
- if g then
- g[gname] = unicode
- else
- guess[variant] = { [gname] = unicode }
- end
- end
- --
- for unicode, description in next, descriptions do
- local slookups = description.slookups
- if slookups then
- local gname = description.name
- for tag, data in next, slookups do
- local lookuptype = lookuptypes[tag]
- if lookuptype == "alternate" then
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- elseif lookuptype == "substitution" then
- check(gname,data,unicode)
- end
- end
- end
- local mlookups = description.mlookups
- if mlookups then
- local gname = description.name
- for tag, list in next, mlookups do
- local lookuptype = lookuptypes[tag]
- if lookuptype == "alternate" then
- for i=1,#list do
- local data = list[i]
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- end
- elseif lookuptype == "substitution" then
- for i=1,#list do
- check(gname,list[i],unicode)
- end
- end
- end
- end
- end
- -- resolve references
- local done = true
- while done do
- done = false
- for k, v in next, guess do
- if type(v) ~= "number" then
- for kk, vv in next, v do
- if vv == -1 or vv >= private or (vv >= 0xE000 and vv <= 0xF8FF) or vv == 0xFFFE or vv == 0xFFFF then
- local uu = guess[kk]
- if type(uu) == "number" then
- guess[k] = uu
- done = true
- end
- else
- guess[k] = vv
- done = true
- end
- end
- end
- end
- end
- -- wrap up
- local orphans = 0
- local guessed = 0
- for k, v in next, guess do
- if type(v) == "number" then
- descriptions[unicodes[k]].unicode = descriptions[v].unicode or v -- can also be a table
- guessed = guessed + 1
- else
- local t = nil
- local l = lower(k)
- local u = unicodes[l]
- if not u then
- orphans = orphans + 1
- elseif u == -1 or u >= private or (u >= 0xE000 and u <= 0xF8FF) or u == 0xFFFE or u == 0xFFFF then
- local unicode = descriptions[u].unicode
- if unicode then
- descriptions[unicodes[k]].unicode = unicode
- guessed = guessed + 1
- else
- orphans = orphans + 1
- end
- else
- orphans = orphans + 1
- end
- end
- end
- if trace_loading and orphans > 0 or guessed > 0 then
- report_fonts("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
- end
- end
- if trace_mapping then
- for unic, glyph in table.sortedhash(descriptions) do
- local name = glyph.name
- local index = glyph.index
- local unicode = glyph.unicode
- if unicode then
- if type(unicode) == "table" then
- local unicodes = { }
- for i=1,#unicode do
- unicodes[i] = formatters("%U",unicode[i])
- end
- report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,unic,unicodes)
- else
- report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,unic,unicode)
- end
- else
- report_fonts("internal slot %U, name %a, unicode %U",index,name,unic)
- end
- end
- end
- if trace_loading and (ns > 0 or nl > 0) then
- report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns)
- end
-end
-
--- local parser = makenameparser("Japan1")
--- local parser = makenameparser()
--- local function test(str)
--- local b, a = lpegmatch(parser,str)
--- print((a and table.serialize(b)) or b)
--- end
--- test("a.sc")
--- test("a")
--- test("uni1234")
--- test("uni1234.xx")
--- test("uni12349876")
--- test("u123400987600")
--- test("index1234")
--- test("Japan1.123")
diff --git a/Master/texmf-dist/tex/context/base/font-mis.lua b/Master/texmf-dist/tex/context/base/font-mis.lua
deleted file mode 100644
index 0ec95ee1b56..00000000000
--- a/Master/texmf-dist/tex/context/base/font-mis.lua
+++ /dev/null
@@ -1,117 +0,0 @@
-if not modules then modules = { } end modules ['font-mis'] = {
- version = 1.001,
- comment = "companion to mtx-fonts",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local next = next
-local lower, strip = string.lower, string.strip
-
--- also used in other scripts so we need to check some tables:
-
-fonts = fonts or { }
-
-fonts.helpers = fonts.helpers or { }
-local helpers = fonts.helpers
-
-fonts.handlers = fonts.handlers or { }
-local handlers = fonts.handlers
-
-handlers.otf = handlers.otf or { }
-local otf = handlers.otf
-
-otf.version = otf.version or 2.803
-otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true)
-
-local fontloader = fontloader
-local font_to_table = fontloader.to_table
-local open_font = fontloader.open
-local get_font_info = fontloader.info
-local close_font = fontloader.close
-
-function otf.loadcached(filename,format,sub)
- -- no recache when version mismatch
- local name = file.basename(file.removesuffix(filename))
- if sub == "" then sub = false end
- local hash = name
- if sub then
- hash = hash .. "-" .. sub
- end
- hash = containers.cleanname(hash)
- local data = containers.read(otf.cache, hash)
- if data and not data.verbose then
- otf.enhancers.unpack(data)
- return data
- else
- return nil
- end
-end
-
-local featuregroups = { "gsub", "gpos" }
-
-function fonts.helpers.getfeatures(name,t,script,language) -- maybe per font type
- local t = lower(t or (name and file.suffix(name)) or "")
- if t == "otf" or t == "ttf" or t == "ttc" or t == "dfont" then
- local filename = resolvers.findfile(name,t) or ""
- if filename ~= "" then
- local data = otf.loadcached(filename)
- if data and data.resources and data.resources.features then
- return data.resources.features
- else
- local ff = open_font(filename)
- if ff then
- local data = font_to_table(ff)
- close_font(ff)
- local features = { }
- for k=1,#featuregroups do
- local what = featuregroups[k]
- local dw = data[what]
- if dw then
- local f = { }
- features[what] = f
- for i=1,#dw do
- local d = dw[i]
- local dfeatures = d.features
- if dfeatures then
- for i=1,#dfeatures do
- local df = dfeatures[i]
- local tag = strip(lower(df.tag))
- local ft = f[tag] if not ft then ft = {} f[tag] = ft end
- local dfscripts = df.scripts
- for i=1,#dfscripts do
- local ds = dfscripts[i]
- local scri = strip(lower(ds.script))
- local fts = ft[scri] if not fts then fts = {} ft[scri] = fts end
- local dslangs = ds.langs
- for i=1,#dslangs do
- local lang = dslangs[i]
- lang = strip(lower(lang))
- if scri == script then
- if lang == language then
- fts[lang] = 'sl'
- else
- fts[lang] = 's'
- end
- else
- if lang == language then
- fts[lang] = 'l'
- else
- fts[lang] = true
- end
- end
- end
- end
- end
- end
- end
- end
- end
- return features
- end
- end
- end
- end
- return nil, nil
-end
diff --git a/Master/texmf-dist/tex/context/base/font-otc.lua b/Master/texmf-dist/tex/context/base/font-otc.lua
deleted file mode 100644
index f7f8e9ce2c1..00000000000
--- a/Master/texmf-dist/tex/context/base/font-otc.lua
+++ /dev/null
@@ -1,349 +0,0 @@
-if not modules then modules = { } end modules ['font-otc'] = {
- version = 1.001,
- comment = "companion to font-otf.lua (context)",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local format, insert = string.format, table.insert
-local type, next = type, next
-local lpegmatch = lpeg.match
-
--- we assume that the other otf stuff is loaded already
-
-local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
-local report_otf = logs.reporter("fonts","otf loading")
-
-local fonts = fonts
-local otf = fonts.handlers.otf
-local registerotffeature = otf.features.register
-local setmetatableindex = table.setmetatableindex
-
--- In the userdata interface we can not longer tweak the loaded font as
--- conveniently as before. For instance, instead of pushing extra data in
--- in the table using the original structure, we now have to operate on
--- the mkiv representation. And as the fontloader interface is modelled
--- after fontforge we cannot change that one too much either.
-
-local types = {
- substitution = "gsub_single",
- ligature = "gsub_ligature",
- alternate = "gsub_alternate",
-}
-
-setmetatableindex(types, function(t,k) t[k] = k return k end) -- "key"
-
-local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
-local noflags = { }
-
-local function addfeature(data,feature,specifications)
- local descriptions = data.descriptions
- local resources = data.resources
- local lookups = resources.lookups
- local gsubfeatures = resources.features.gsub
- if gsubfeatures and gsubfeatures[feature] then
- -- already present
- else
- local sequences = resources.sequences
- local fontfeatures = resources.features
- local unicodes = resources.unicodes
- local lookuptypes = resources.lookuptypes
- local splitter = lpeg.splitter(" ",unicodes)
- local done = 0
- local skip = 0
- if not specifications[1] then
- -- so we accept a one entry specification
- specifications = { specifications }
- end
- -- subtables are tables themselves but we also accept flattened singular subtables
- for s=1,#specifications do
- local specification = specifications[s]
- local valid = specification.valid
- if not valid or valid(data,specification,feature) then
- local initialize = specification.initialize
- if initialize then
- -- when false is returned we initialize only once
- specification.initialize = initialize(specification) and initialize or nil
- end
- local askedfeatures = specification.features or everywhere
- local subtables = specification.subtables or { specification.data } or { }
- local featuretype = types[specification.type or "substitution"]
- local featureflags = specification.flags or noflags
- local featureorder = specification.order or { feature }
- local added = false
- local featurename = format("ctx_%s_%s",feature,s)
- local st = { }
- for t=1,#subtables do
- local list = subtables[t]
- local full = format("%s_%s",featurename,t)
- st[t] = full
- if featuretype == "gsub_ligature" then
- lookuptypes[full] = "ligature"
- for code, ligature in next, list do
- local unicode = tonumber(code) or unicodes[code]
- local description = descriptions[unicode]
- if description then
- local slookups = description.slookups
- if type(ligature) == "string" then
- ligature = { lpegmatch(splitter,ligature) }
- end
- local present = true
- for i=1,#ligature do
- if not descriptions[ligature[i]] then
- present = false
- break
- end
- end
- if present then
- if slookups then
- slookups[full] = ligature
- else
- description.slookups = { [full] = ligature }
- end
- done, added = done + 1, true
- else
- skip = skip + 1
- end
- end
- end
- elseif featuretype == "gsub_single" then
- lookuptypes[full] = "substitution"
- for code, replacement in next, list do
- local unicode = tonumber(code) or unicodes[code]
- local description = descriptions[unicode]
- if description then
- local slookups = description.slookups
- replacement = tonumber(replacement) or unicodes[replacement]
- if descriptions[replacement] then
- if slookups then
- slookups[full] = replacement
- else
- description.slookups = { [full] = replacement }
- end
- done, added = done + 1, true
- end
- end
- end
- end
- end
- if added then
- -- script = { lang1, lang2, lang3 } or script = { lang1 = true, ... }
- for k, v in next, askedfeatures do
- if v[1] then
- askedfeatures[k] = table.tohash(v)
- end
- end
- local sequence = {
- chain = 0,
- features = { [feature] = askedfeatures },
- flags = featureflags,
- name = featurename,
- order = featureorder,
- subtables = st,
- type = featuretype,
- }
- if specification.prepend then
- insert(sequences,1,sequence)
- else
- insert(sequences,sequence)
- end
- -- register in metadata (merge as there can be a few)
- if not gsubfeatures then
- gsubfeatures = { }
- fontfeatures.gsub = gsubfeatures
- end
- local k = gsubfeatures[feature]
- if not k then
- k = { }
- gsubfeatures[feature] = k
- end
- for script, languages in next, askedfeatures do
- local kk = k[script]
- if not kk then
- kk = { }
- k[script] = kk
- end
- for language, value in next, languages do
- kk[language] = value
- end
- end
- end
- end
- end
- if trace_loading then
- report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip)
- end
- end
-end
-
-otf.enhancers.addfeature = addfeature
-
-local extrafeatures = { }
-
-function otf.addfeature(name,specification)
- extrafeatures[name] = specification
-end
-
-local function enhance(data,filename,raw)
- for feature, specification in next, extrafeatures do
- addfeature(data,feature,specification)
- end
-end
-
-otf.enhancers.register("check extra features",enhance)
-
--- tlig --
-
-local tlig = { -- we need numbers for some fonts so ...
- -- endash = "hyphen hyphen",
- -- emdash = "hyphen hyphen hyphen",
- [0x2013] = { 0x002D, 0x002D },
- [0x2014] = { 0x002D, 0x002D, 0x002D },
- -- quotedblleft = "quoteleft quoteleft",
- -- quotedblright = "quoteright quoteright",
- -- quotedblleft = "grave grave",
- -- quotedblright = "quotesingle quotesingle",
- -- quotedblbase = "comma comma",
-}
-
-local tlig_specification = {
- type = "ligature",
- features = everywhere,
- data = tlig,
- order = { "tlig" },
- flags = noflags,
- prepend = true,
-}
-
-otf.addfeature("tlig",tlig_specification)
-
-registerotffeature {
- name = 'tlig',
- description = 'tex ligatures',
-}
-
--- trep
-
-local trep = {
- -- [0x0022] = 0x201D,
- [0x0027] = 0x2019,
- -- [0x0060] = 0x2018,
-}
-
-local trep_specification = {
- type = "substitution",
- features = everywhere,
- data = trep,
- order = { "trep" },
- flags = noflags,
- prepend = true,
-}
-
-otf.addfeature("trep",trep_specification)
-
-registerotffeature {
- name = 'trep',
- description = 'tex replacements',
-}
-
--- tcom
-
-if characters.combined then
-
- local tcom = { }
-
- local function initialize()
- characters.initialize()
- for first, seconds in next, characters.combined do
- for second, combination in next, seconds do
- tcom[combination] = { first, second }
- end
- end
- -- return false
- end
-
- local tcom_specification = {
- type = "ligature",
- features = everywhere,
- data = tcom,
- order = { "tcom" },
- flags = noflags,
- initialize = initialize,
- }
-
- otf.addfeature("tcom",tcom_specification)
-
- registerotffeature {
- name = 'tcom',
- description = 'tex combinations',
- }
-
-end
-
--- anum
-
-local anum_arabic = {
- [0x0030] = 0x0660,
- [0x0031] = 0x0661,
- [0x0032] = 0x0662,
- [0x0033] = 0x0663,
- [0x0034] = 0x0664,
- [0x0035] = 0x0665,
- [0x0036] = 0x0666,
- [0x0037] = 0x0667,
- [0x0038] = 0x0668,
- [0x0039] = 0x0669,
-}
-
-local anum_persian = {
- [0x0030] = 0x06F0,
- [0x0031] = 0x06F1,
- [0x0032] = 0x06F2,
- [0x0033] = 0x06F3,
- [0x0034] = 0x06F4,
- [0x0035] = 0x06F5,
- [0x0036] = 0x06F6,
- [0x0037] = 0x06F7,
- [0x0038] = 0x06F8,
- [0x0039] = 0x06F9,
-}
-
-local function valid(data)
- local features = data.resources.features
- if features then
- for k, v in next, features do
- for k, v in next, v do
- if v.arab then
- return true
- end
- end
- end
- end
-end
-
-local anum_specification = {
- {
- type = "substitution",
- features = { arab = { urd = true, dflt = true } },
- order = { "anum" },
- data = anum_arabic,
- flags = noflags, -- { },
- valid = valid,
- },
- {
- type = "substitution",
- features = { arab = { urd = true } },
- order = { "anum" },
- data = anum_persian,
- flags = noflags, -- { },
- valid = valid,
- },
-}
-
-otf.addfeature("anum",anum_specification) -- todo: only when there is already an arab script feature
-
-registerotffeature {
- name = 'anum',
- description = 'arabic digits',
-}
diff --git a/Master/texmf-dist/tex/context/base/font-oth.lua b/Master/texmf-dist/tex/context/base/font-oth.lua
deleted file mode 100644
index 59dca31d918..00000000000
--- a/Master/texmf-dist/tex/context/base/font-oth.lua
+++ /dev/null
@@ -1,51 +0,0 @@
-if not modules then modules = { } end modules ['font-oth'] = {
- version = 1.001,
- comment = "companion to font-oth.lua (helpers)",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local fonts = fonts
-local otf = fonts.handlers.otf
-
--- todo: use nodemode data is available
-
-function otf.getalternate(tfmdata,k,kind,value) -- just initialize nodemode and use that (larger mem print)
- if value then
- local description = tfmdata.descriptions[k]
- if description then
- local slookups = description.slookups -- we assume only slookups (we can always extend)
- if slookups then
- local shared = tfmdata.shared
- local rawdata = shared and shared.rawdata
- if rawdata then
- local lookuptypes = rawdata.resources.lookuptypes
- if lookuptypes then
- local properties = tfmdata.properties
- -- we could cache these
- local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language)
- if validlookups then
- local choice = tonumber(value) or 1 -- no random here (yet)
- for l=1,#lookuplist do
- local lookup = lookuplist[l]
- local found = slookups[lookup]
- if found then
- local lookuptype = lookuptypes[lookup]
- if lookuptype == "substitution" then
- return found
- elseif lookuptype == "alternate" then
- return found[choice] or found[#found]
- else
- -- ignore
- end
- end
- end
- end
- end
- end
- end
- end
- end
- return k
-end
diff --git a/Master/texmf-dist/tex/context/base/font-oti.lua b/Master/texmf-dist/tex/context/base/font-oti.lua
deleted file mode 100644
index 06c2a42fac2..00000000000
--- a/Master/texmf-dist/tex/context/base/font-oti.lua
+++ /dev/null
@@ -1,91 +0,0 @@
-if not modules then modules = { } end modules ['font-oti'] = {
- version = 1.001,
- comment = "companion to font-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local lower = string.lower
-
-local fonts = fonts
-local constructors = fonts.constructors
-
-local otf = constructors.newhandler("otf")
-local otffeatures = constructors.newfeatures("otf")
-local otftables = otf.tables
-local registerotffeature = otffeatures.register
-
-local allocate = utilities.storage.allocate
-
-registerotffeature {
- name = "features",
- description = "initialization of feature handler",
- default = true,
-}
-
--- these are later hooked into node and base initializaters
-
-local function setmode(tfmdata,value)
- if value then
- tfmdata.properties.mode = lower(value)
- end
-end
-
-local function setlanguage(tfmdata,value)
- if value then
- local cleanvalue = lower(value)
- local languages = otftables and otftables.languages
- local properties = tfmdata.properties
- if not languages then
- properties.language = cleanvalue
- elseif languages[value] then
- properties.language = cleanvalue
- else
- properties.language = "dflt"
- end
- end
-end
-
-local function setscript(tfmdata,value)
- if value then
- local cleanvalue = lower(value)
- local scripts = otftables and otftables.scripts
- local properties = tfmdata.properties
- if not scripts then
- properties.script = cleanvalue
- elseif scripts[value] then
- properties.script = cleanvalue
- else
- properties.script = "dflt"
- end
- end
-end
-
-registerotffeature {
- name = "mode",
- description = "mode",
- initializers = {
- base = setmode,
- node = setmode,
- }
-}
-
-registerotffeature {
- name = "language",
- description = "language",
- initializers = {
- base = setlanguage,
- node = setlanguage,
- }
-}
-
-registerotffeature {
- name = "script",
- description = "script",
- initializers = {
- base = setscript,
- node = setscript,
- }
-}
-
diff --git a/Master/texmf-dist/tex/context/base/font-ott.lua b/Master/texmf-dist/tex/context/base/font-ott.lua
deleted file mode 100644
index 1f9a1ac041a..00000000000
--- a/Master/texmf-dist/tex/context/base/font-ott.lua
+++ /dev/null
@@ -1,1119 +0,0 @@
-if not modules then modules = { } end modules ['font-ott'] = {
- version = 1.001,
- comment = "companion to font-otf.lua (tables)",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
- -- dataonly = true,
-}
-
-local type, next, tonumber, tostring, rawget, rawset = type, next, tonumber, tostring, rawget, rawset
-local gsub, lower, format, match = string.gsub, string.lower, string.format, string.match
-local is_boolean = string.is_boolean
-
-local setmetatableindex = table.setmetatableindex
-local setmetatablenewindex = table.setmetatablenewindex
-local allocate = utilities.storage.allocate
-
-local fonts = fonts
-local otf = fonts.handlers.otf
-local otffeatures = otf.features
-local registerotffeature = otffeatures.register
-
-local tables = otf.tables or { }
-otf.tables = tables
-
-local statistics = otf.statistics or { }
-otf.statistics = statistics
-
-local scripts = allocate {
- ['arab'] = 'arabic',
- ['armn'] = 'armenian',
- ['bali'] = 'balinese',
- ['beng'] = 'bengali',
- ['bopo'] = 'bopomofo',
- ['brai'] = 'braille',
- ['bugi'] = 'buginese',
- ['buhd'] = 'buhid',
- ['byzm'] = 'byzantine music',
- ['cans'] = 'canadian syllabics',
- ['cher'] = 'cherokee',
- ['copt'] = 'coptic',
- ['cprt'] = 'cypriot syllabary',
- ['cyrl'] = 'cyrillic',
- ['deva'] = 'devanagari',
- ['dev2'] = 'devanagari variant 2',
- ['dsrt'] = 'deseret',
- ['ethi'] = 'ethiopic',
- ['geor'] = 'georgian',
- ['glag'] = 'glagolitic',
- ['goth'] = 'gothic',
- ['grek'] = 'greek',
- ['gujr'] = 'gujarati',
- ['guru'] = 'gurmukhi',
- ['hang'] = 'hangul',
- ['hani'] = 'cjk ideographic',
- ['hano'] = 'hanunoo',
- ['hebr'] = 'hebrew',
- ['ital'] = 'old italic',
- ['jamo'] = 'hangul jamo',
- ['java'] = 'javanese',
- ['kana'] = 'hiragana and katakana',
- ['khar'] = 'kharosthi',
- ['khmr'] = 'khmer',
- ['knda'] = 'kannada',
- ['lao' ] = 'lao',
- ['latn'] = 'latin',
- ['limb'] = 'limbu',
- ['linb'] = 'linear b',
- ['math'] = 'mathematical alphanumeric symbols',
- ['mlym'] = 'malayalam',
- ['mlm2'] = 'malayalam variant 2',
- ['mong'] = 'mongolian',
- ['musc'] = 'musical symbols',
- ['mymr'] = 'myanmar',
- ['nko' ] = "n'ko",
- ['ogam'] = 'ogham',
- ['orya'] = 'oriya',
- ['osma'] = 'osmanya',
- ['phag'] = 'phags-pa',
- ['phnx'] = 'phoenician',
- ['runr'] = 'runic',
- ['shaw'] = 'shavian',
- ['sinh'] = 'sinhala',
- ['sylo'] = 'syloti nagri',
- ['syrc'] = 'syriac',
- ['tagb'] = 'tagbanwa',
- ['tale'] = 'tai le',
- ['talu'] = 'tai lu',
- ['taml'] = 'tamil',
- ['telu'] = 'telugu',
- ['tfng'] = 'tifinagh',
- ['tglg'] = 'tagalog',
- ['thaa'] = 'thaana',
- ['thai'] = 'thai',
- ['tibt'] = 'tibetan',
- ['ugar'] = 'ugaritic cuneiform',
- ['xpeo'] = 'old persian cuneiform',
- ['xsux'] = 'sumero-akkadian cuneiform',
- ['yi' ] = 'yi',
-}
-
-local languages = allocate {
- ['aba'] = 'abaza',
- ['abk'] = 'abkhazian',
- ['ady'] = 'adyghe',
- ['afk'] = 'afrikaans',
- ['afr'] = 'afar',
- ['agw'] = 'agaw',
- ['als'] = 'alsatian',
- ['alt'] = 'altai',
- ['amh'] = 'amharic',
- ['ara'] = 'arabic',
- ['ari'] = 'aari',
- ['ark'] = 'arakanese',
- ['asm'] = 'assamese',
- ['ath'] = 'athapaskan',
- ['avr'] = 'avar',
- ['awa'] = 'awadhi',
- ['aym'] = 'aymara',
- ['aze'] = 'azeri',
- ['bad'] = 'badaga',
- ['bag'] = 'baghelkhandi',
- ['bal'] = 'balkar',
- ['bau'] = 'baule',
- ['bbr'] = 'berber',
- ['bch'] = 'bench',
- ['bcr'] = 'bible cree',
- ['bel'] = 'belarussian',
- ['bem'] = 'bemba',
- ['ben'] = 'bengali',
- ['bgr'] = 'bulgarian',
- ['bhi'] = 'bhili',
- ['bho'] = 'bhojpuri',
- ['bik'] = 'bikol',
- ['bil'] = 'bilen',
- ['bkf'] = 'blackfoot',
- ['bli'] = 'balochi',
- ['bln'] = 'balante',
- ['blt'] = 'balti',
- ['bmb'] = 'bambara',
- ['bml'] = 'bamileke',
- ['bos'] = 'bosnian',
- ['bre'] = 'breton',
- ['brh'] = 'brahui',
- ['bri'] = 'braj bhasha',
- ['brm'] = 'burmese',
- ['bsh'] = 'bashkir',
- ['bti'] = 'beti',
- ['cat'] = 'catalan',
- ['ceb'] = 'cebuano',
- ['che'] = 'chechen',
- ['chg'] = 'chaha gurage',
- ['chh'] = 'chattisgarhi',
- ['chi'] = 'chichewa',
- ['chk'] = 'chukchi',
- ['chp'] = 'chipewyan',
- ['chr'] = 'cherokee',
- ['chu'] = 'chuvash',
- ['cmr'] = 'comorian',
- ['cop'] = 'coptic',
- ['cos'] = 'corsican',
- ['cre'] = 'cree',
- ['crr'] = 'carrier',
- ['crt'] = 'crimean tatar',
- ['csl'] = 'church slavonic',
- ['csy'] = 'czech',
- ['dan'] = 'danish',
- ['dar'] = 'dargwa',
- ['dcr'] = 'woods cree',
- ['deu'] = 'german',
- ['dgr'] = 'dogri',
- ['div'] = 'divehi',
- ['djr'] = 'djerma',
- ['dng'] = 'dangme',
- ['dnk'] = 'dinka',
- ['dri'] = 'dari',
- ['dun'] = 'dungan',
- ['dzn'] = 'dzongkha',
- ['ebi'] = 'ebira',
- ['ecr'] = 'eastern cree',
- ['edo'] = 'edo',
- ['efi'] = 'efik',
- ['ell'] = 'greek',
- ['eng'] = 'english',
- ['erz'] = 'erzya',
- ['esp'] = 'spanish',
- ['eti'] = 'estonian',
- ['euq'] = 'basque',
- ['evk'] = 'evenki',
- ['evn'] = 'even',
- ['ewe'] = 'ewe',
- ['fan'] = 'french antillean',
- ['far'] = 'farsi',
- ['fin'] = 'finnish',
- ['fji'] = 'fijian',
- ['fle'] = 'flemish',
- ['fne'] = 'forest nenets',
- ['fon'] = 'fon',
- ['fos'] = 'faroese',
- ['fra'] = 'french',
- ['fri'] = 'frisian',
- ['frl'] = 'friulian',
- ['fta'] = 'futa',
- ['ful'] = 'fulani',
- ['gad'] = 'ga',
- ['gae'] = 'gaelic',
- ['gag'] = 'gagauz',
- ['gal'] = 'galician',
- ['gar'] = 'garshuni',
- ['gaw'] = 'garhwali',
- ['gez'] = "ge'ez",
- ['gil'] = 'gilyak',
- ['gmz'] = 'gumuz',
- ['gon'] = 'gondi',
- ['grn'] = 'greenlandic',
- ['gro'] = 'garo',
- ['gua'] = 'guarani',
- ['guj'] = 'gujarati',
- ['hai'] = 'haitian',
- ['hal'] = 'halam',
- ['har'] = 'harauti',
- ['hau'] = 'hausa',
- ['haw'] = 'hawaiin',
- ['hbn'] = 'hammer-banna',
- ['hil'] = 'hiligaynon',
- ['hin'] = 'hindi',
- ['hma'] = 'high mari',
- ['hnd'] = 'hindko',
- ['ho'] = 'ho',
- ['hri'] = 'harari',
- ['hrv'] = 'croatian',
- ['hun'] = 'hungarian',
- ['hye'] = 'armenian',
- ['ibo'] = 'igbo',
- ['ijo'] = 'ijo',
- ['ilo'] = 'ilokano',
- ['ind'] = 'indonesian',
- ['ing'] = 'ingush',
- ['inu'] = 'inuktitut',
- ['iri'] = 'irish',
- ['irt'] = 'irish traditional',
- ['isl'] = 'icelandic',
- ['ism'] = 'inari sami',
- ['ita'] = 'italian',
- ['iwr'] = 'hebrew',
- ['jan'] = 'japanese',
- ['jav'] = 'javanese',
- ['jii'] = 'yiddish',
- ['jud'] = 'judezmo',
- ['jul'] = 'jula',
- ['kab'] = 'kabardian',
- ['kac'] = 'kachchi',
- ['kal'] = 'kalenjin',
- ['kan'] = 'kannada',
- ['kar'] = 'karachay',
- ['kat'] = 'georgian',
- ['kaz'] = 'kazakh',
- ['keb'] = 'kebena',
- ['kge'] = 'khutsuri georgian',
- ['kha'] = 'khakass',
- ['khk'] = 'khanty-kazim',
- ['khm'] = 'khmer',
- ['khs'] = 'khanty-shurishkar',
- ['khv'] = 'khanty-vakhi',
- ['khw'] = 'khowar',
- ['kik'] = 'kikuyu',
- ['kir'] = 'kirghiz',
- ['kis'] = 'kisii',
- ['kkn'] = 'kokni',
- ['klm'] = 'kalmyk',
- ['kmb'] = 'kamba',
- ['kmn'] = 'kumaoni',
- ['kmo'] = 'komo',
- ['kms'] = 'komso',
- ['knr'] = 'kanuri',
- ['kod'] = 'kodagu',
- ['koh'] = 'korean old hangul',
- ['kok'] = 'konkani',
- ['kon'] = 'kikongo',
- ['kop'] = 'komi-permyak',
- ['kor'] = 'korean',
- ['koz'] = 'komi-zyrian',
- ['kpl'] = 'kpelle',
- ['kri'] = 'krio',
- ['krk'] = 'karakalpak',
- ['krl'] = 'karelian',
- ['krm'] = 'karaim',
- ['krn'] = 'karen',
- ['krt'] = 'koorete',
- ['ksh'] = 'kashmiri',
- ['ksi'] = 'khasi',
- ['ksm'] = 'kildin sami',
- ['kui'] = 'kui',
- ['kul'] = 'kulvi',
- ['kum'] = 'kumyk',
- ['kur'] = 'kurdish',
- ['kuu'] = 'kurukh',
- ['kuy'] = 'kuy',
- ['kyk'] = 'koryak',
- ['lad'] = 'ladin',
- ['lah'] = 'lahuli',
- ['lak'] = 'lak',
- ['lam'] = 'lambani',
- ['lao'] = 'lao',
- ['lat'] = 'latin',
- ['laz'] = 'laz',
- ['lcr'] = 'l-cree',
- ['ldk'] = 'ladakhi',
- ['lez'] = 'lezgi',
- ['lin'] = 'lingala',
- ['lma'] = 'low mari',
- ['lmb'] = 'limbu',
- ['lmw'] = 'lomwe',
- ['lsb'] = 'lower sorbian',
- ['lsm'] = 'lule sami',
- ['lth'] = 'lithuanian',
- ['ltz'] = 'luxembourgish',
- ['lub'] = 'luba',
- ['lug'] = 'luganda',
- ['luh'] = 'luhya',
- ['luo'] = 'luo',
- ['lvi'] = 'latvian',
- ['maj'] = 'majang',
- ['mak'] = 'makua',
- ['mal'] = 'malayalam traditional',
- ['man'] = 'mansi',
- ['map'] = 'mapudungun',
- ['mar'] = 'marathi',
- ['maw'] = 'marwari',
- ['mbn'] = 'mbundu',
- ['mch'] = 'manchu',
- ['mcr'] = 'moose cree',
- ['mde'] = 'mende',
- ['men'] = "me'en",
- ['miz'] = 'mizo',
- ['mkd'] = 'macedonian',
- ['mle'] = 'male',
- ['mlg'] = 'malagasy',
- ['mln'] = 'malinke',
- ['mlr'] = 'malayalam reformed',
- ['mly'] = 'malay',
- ['mnd'] = 'mandinka',
- ['mng'] = 'mongolian',
- ['mni'] = 'manipuri',
- ['mnk'] = 'maninka',
- ['mnx'] = 'manx gaelic',
- ['moh'] = 'mohawk',
- ['mok'] = 'moksha',
- ['mol'] = 'moldavian',
- ['mon'] = 'mon',
- ['mor'] = 'moroccan',
- ['mri'] = 'maori',
- ['mth'] = 'maithili',
- ['mts'] = 'maltese',
- ['mun'] = 'mundari',
- ['nag'] = 'naga-assamese',
- ['nan'] = 'nanai',
- ['nas'] = 'naskapi',
- ['ncr'] = 'n-cree',
- ['ndb'] = 'ndebele',
- ['ndg'] = 'ndonga',
- ['nep'] = 'nepali',
- ['new'] = 'newari',
- ['ngr'] = 'nagari',
- ['nhc'] = 'norway house cree',
- ['nis'] = 'nisi',
- ['niu'] = 'niuean',
- ['nkl'] = 'nkole',
- ['nko'] = "n'ko",
- ['nld'] = 'dutch',
- ['nog'] = 'nogai',
- ['nor'] = 'norwegian',
- ['nsm'] = 'northern sami',
- ['nta'] = 'northern tai',
- ['nto'] = 'esperanto',
- ['nyn'] = 'nynorsk',
- ['oci'] = 'occitan',
- ['ocr'] = 'oji-cree',
- ['ojb'] = 'ojibway',
- ['ori'] = 'oriya',
- ['oro'] = 'oromo',
- ['oss'] = 'ossetian',
- ['paa'] = 'palestinian aramaic',
- ['pal'] = 'pali',
- ['pan'] = 'punjabi',
- ['pap'] = 'palpa',
- ['pas'] = 'pashto',
- ['pgr'] = 'polytonic greek',
- ['pil'] = 'pilipino',
- ['plg'] = 'palaung',
- ['plk'] = 'polish',
- ['pro'] = 'provencal',
- ['ptg'] = 'portuguese',
- ['qin'] = 'chin',
- ['raj'] = 'rajasthani',
- ['rbu'] = 'russian buriat',
- ['rcr'] = 'r-cree',
- ['ria'] = 'riang',
- ['rms'] = 'rhaeto-romanic',
- ['rom'] = 'romanian',
- ['roy'] = 'romany',
- ['rsy'] = 'rusyn',
- ['rua'] = 'ruanda',
- ['rus'] = 'russian',
- ['sad'] = 'sadri',
- ['san'] = 'sanskrit',
- ['sat'] = 'santali',
- ['say'] = 'sayisi',
- ['sek'] = 'sekota',
- ['sel'] = 'selkup',
- ['sgo'] = 'sango',
- ['shn'] = 'shan',
- ['sib'] = 'sibe',
- ['sid'] = 'sidamo',
- ['sig'] = 'silte gurage',
- ['sks'] = 'skolt sami',
- ['sky'] = 'slovak',
- ['sla'] = 'slavey',
- ['slv'] = 'slovenian',
- ['sml'] = 'somali',
- ['smo'] = 'samoan',
- ['sna'] = 'sena',
- ['snd'] = 'sindhi',
- ['snh'] = 'sinhalese',
- ['snk'] = 'soninke',
- ['sog'] = 'sodo gurage',
- ['sot'] = 'sotho',
- ['sqi'] = 'albanian',
- ['srb'] = 'serbian',
- ['srk'] = 'saraiki',
- ['srr'] = 'serer',
- ['ssl'] = 'south slavey',
- ['ssm'] = 'southern sami',
- ['sur'] = 'suri',
- ['sva'] = 'svan',
- ['sve'] = 'swedish',
- ['swa'] = 'swadaya aramaic',
- ['swk'] = 'swahili',
- ['swz'] = 'swazi',
- ['sxt'] = 'sutu',
- ['syr'] = 'syriac',
- ['tab'] = 'tabasaran',
- ['taj'] = 'tajiki',
- ['tam'] = 'tamil',
- ['tat'] = 'tatar',
- ['tcr'] = 'th-cree',
- ['tel'] = 'telugu',
- ['tgn'] = 'tongan',
- ['tgr'] = 'tigre',
- ['tgy'] = 'tigrinya',
- ['tha'] = 'thai',
- ['tht'] = 'tahitian',
- ['tib'] = 'tibetan',
- ['tkm'] = 'turkmen',
- ['tmn'] = 'temne',
- ['tna'] = 'tswana',
- ['tne'] = 'tundra nenets',
- ['tng'] = 'tonga',
- ['tod'] = 'todo',
- ['trk'] = 'turkish',
- ['tsg'] = 'tsonga',
- ['tua'] = 'turoyo aramaic',
- ['tul'] = 'tulu',
- ['tuv'] = 'tuvin',
- ['twi'] = 'twi',
- ['udm'] = 'udmurt',
- ['ukr'] = 'ukrainian',
- ['urd'] = 'urdu',
- ['usb'] = 'upper sorbian',
- ['uyg'] = 'uyghur',
- ['uzb'] = 'uzbek',
- ['ven'] = 'venda',
- ['vit'] = 'vietnamese',
- ['wa' ] = 'wa',
- ['wag'] = 'wagdi',
- ['wcr'] = 'west-cree',
- ['wel'] = 'welsh',
- ['wlf'] = 'wolof',
- ['xbd'] = 'tai lue',
- ['xhs'] = 'xhosa',
- ['yak'] = 'yakut',
- ['yba'] = 'yoruba',
- ['ycr'] = 'y-cree',
- ['yic'] = 'yi classic',
- ['yim'] = 'yi modern',
- ['zhh'] = 'chinese hong kong',
- ['zhp'] = 'chinese phonetic',
- ['zhs'] = 'chinese simplified',
- ['zht'] = 'chinese traditional',
- ['znd'] = 'zande',
- ['zul'] = 'zulu'
-}
-
-local features = allocate {
- ['aalt'] = 'access all alternates',
- ['abvf'] = 'above-base forms',
- ['abvm'] = 'above-base mark positioning',
- ['abvs'] = 'above-base substitutions',
- ['afrc'] = 'alternative fractions',
- ['akhn'] = 'akhands',
- ['blwf'] = 'below-base forms',
- ['blwm'] = 'below-base mark positioning',
- ['blws'] = 'below-base substitutions',
- ['c2pc'] = 'petite capitals from capitals',
- ['c2sc'] = 'small capitals from capitals',
- ['calt'] = 'contextual alternates',
- ['case'] = 'case-sensitive forms',
- ['ccmp'] = 'glyph composition/decomposition',
- ['cjct'] = 'conjunct forms',
- ['clig'] = 'contextual ligatures',
- ['cpsp'] = 'capital spacing',
- ['cswh'] = 'contextual swash',
- ['curs'] = 'cursive positioning',
- ['dflt'] = 'default processing',
- ['dist'] = 'distances',
- ['dlig'] = 'discretionary ligatures',
- ['dnom'] = 'denominators',
- ['dtls'] = 'dotless forms', -- math
- ['expt'] = 'expert forms',
- ['falt'] = 'final glyph alternates',
- ['fin2'] = 'terminal forms #2',
- ['fin3'] = 'terminal forms #3',
- ['fina'] = 'terminal forms',
- ['flac'] = 'flattened accents over capitals', -- math
- ['frac'] = 'fractions',
- ['fwid'] = 'full width',
- ['half'] = 'half forms',
- ['haln'] = 'halant forms',
- ['halt'] = 'alternate half width',
- ['hist'] = 'historical forms',
- ['hkna'] = 'horizontal kana alternates',
- ['hlig'] = 'historical ligatures',
- ['hngl'] = 'hangul',
- ['hojo'] = 'hojo kanji forms',
- ['hwid'] = 'half width',
- ['init'] = 'initial forms',
- ['isol'] = 'isolated forms',
- ['ital'] = 'italics',
- ['jalt'] = 'justification alternatives',
- ['jp04'] = 'jis2004 forms',
- ['jp78'] = 'jis78 forms',
- ['jp83'] = 'jis83 forms',
- ['jp90'] = 'jis90 forms',
- ['kern'] = 'kerning',
- ['lfbd'] = 'left bounds',
- ['liga'] = 'standard ligatures',
- ['ljmo'] = 'leading jamo forms',
- ['lnum'] = 'lining figures',
- ['locl'] = 'localized forms',
- ['mark'] = 'mark positioning',
- ['med2'] = 'medial forms #2',
- ['medi'] = 'medial forms',
- ['mgrk'] = 'mathematical greek',
- ['mkmk'] = 'mark to mark positioning',
- ['mset'] = 'mark positioning via substitution',
- ['nalt'] = 'alternate annotation forms',
- ['nlck'] = 'nlc kanji forms',
- ['nukt'] = 'nukta forms',
- ['numr'] = 'numerators',
- ['onum'] = 'old style figures',
- ['opbd'] = 'optical bounds',
- ['ordn'] = 'ordinals',
- ['ornm'] = 'ornaments',
- ['palt'] = 'proportional alternate width',
- ['pcap'] = 'petite capitals',
- ['pnum'] = 'proportional figures',
- ['pref'] = 'pre-base forms',
- ['pres'] = 'pre-base substitutions',
- ['pstf'] = 'post-base forms',
- ['psts'] = 'post-base substitutions',
- ['pwid'] = 'proportional widths',
- ['qwid'] = 'quarter widths',
- ['rand'] = 'randomize',
- ['rkrf'] = 'rakar forms',
- ['rlig'] = 'required ligatures',
- ['rphf'] = 'reph form',
- ['rtbd'] = 'right bounds',
- ['rtla'] = 'right-to-left alternates',
- ['rtlm'] = 'right to left math', -- math
- ['ruby'] = 'ruby notation forms',
- ['salt'] = 'stylistic alternates',
- ['sinf'] = 'scientific inferiors',
- ['size'] = 'optical size',
- ['smcp'] = 'small capitals',
- ['smpl'] = 'simplified forms',
- -- ['ss01'] = 'stylistic set 1',
- -- ['ss02'] = 'stylistic set 2',
- -- ['ss03'] = 'stylistic set 3',
- -- ['ss04'] = 'stylistic set 4',
- -- ['ss05'] = 'stylistic set 5',
- -- ['ss06'] = 'stylistic set 6',
- -- ['ss07'] = 'stylistic set 7',
- -- ['ss08'] = 'stylistic set 8',
- -- ['ss09'] = 'stylistic set 9',
- -- ['ss10'] = 'stylistic set 10',
- -- ['ss11'] = 'stylistic set 11',
- -- ['ss12'] = 'stylistic set 12',
- -- ['ss13'] = 'stylistic set 13',
- -- ['ss14'] = 'stylistic set 14',
- -- ['ss15'] = 'stylistic set 15',
- -- ['ss16'] = 'stylistic set 16',
- -- ['ss17'] = 'stylistic set 17',
- -- ['ss18'] = 'stylistic set 18',
- -- ['ss19'] = 'stylistic set 19',
- -- ['ss20'] = 'stylistic set 20',
- ['ssty'] = 'script style', -- math
- ['subs'] = 'subscript',
- ['sups'] = 'superscript',
- ['swsh'] = 'swash',
- ['titl'] = 'titling',
- ['tjmo'] = 'trailing jamo forms',
- ['tnam'] = 'traditional name forms',
- ['tnum'] = 'tabular figures',
- ['trad'] = 'traditional forms',
- ['twid'] = 'third widths',
- ['unic'] = 'unicase',
- ['valt'] = 'alternate vertical metrics',
- ['vatu'] = 'vattu variants',
- ['vert'] = 'vertical writing',
- ['vhal'] = 'alternate vertical half metrics',
- ['vjmo'] = 'vowel jamo forms',
- ['vkna'] = 'vertical kana alternates',
- ['vkrn'] = 'vertical kerning',
- ['vpal'] = 'proportional alternate vertical metrics',
- ['vrt2'] = 'vertical rotation',
- ['zero'] = 'slashed zero',
-
- ['trep'] = 'traditional tex replacements',
- ['tlig'] = 'traditional tex ligatures',
-
- ['ss..'] = 'stylistic set ..',
- ['cv..'] = 'character variant ..',
- ['js..'] = 'justification ..',
-
- ["dv.."] = "devanagari ..",
- ["ml.."] = "malayalam ..",
-}
-
-local baselines = allocate {
- ['hang'] = 'hanging baseline',
- ['icfb'] = 'ideographic character face bottom edge baseline',
- ['icft'] = 'ideographic character face tope edige baseline',
- ['ideo'] = 'ideographic em-box bottom edge baseline',
- ['idtp'] = 'ideographic em-box top edge baseline',
- ['math'] = 'mathmatical centered baseline',
- ['romn'] = 'roman baseline'
-}
-
-tables.scripts = scripts
-tables.languages = languages
-tables.features = features
-tables.baselines = baselines
-
-local acceptscripts = true directives.register("otf.acceptscripts", function(v) acceptscripts = v end)
-local acceptlanguages = true directives.register("otf.acceptlanguages", function(v) acceptlanguages = v end)
-
-local report_checks = logs.reporter("fonts","checks")
-
--- hm, we overload the metatables
-
-if otffeatures.features then
- for k, v in next, otffeatures.features do
- features[k] = v
- end
- otffeatures.features = features
-end
-
-local function swapped(h)
- local r = { }
- for k, v in next, h do
- r[gsub(v,"[^a-z0-9]","")] = k -- is already lower
- end
- return r
-end
-
-local verbosescripts = allocate(swapped(scripts ))
-local verboselanguages = allocate(swapped(languages))
-local verbosefeatures = allocate(swapped(features ))
-local verbosebaselines = allocate(swapped(baselines))
-
--- lets forget about trailing spaces
-
-local function resolve(t,k)
- if k then
- k = gsub(lower(k),"[^a-z0-9]","")
- local v = rawget(t,k)
- if v then
- return v
- end
- end
-end
-
-setmetatableindex(verbosescripts, resolve)
-setmetatableindex(verboselanguages, resolve)
-setmetatableindex(verbosefeatures, resolve)
-setmetatableindex(verbosebaselines, resolve)
-
--- We could optimize the next lookups by using an extra metatable and storing
--- already found values but in practice there are not that many lookups so
--- it's never a bottleneck.
-
-setmetatableindex(scripts, function(t,k)
- if k then
- k = lower(k)
- if k == "dflt" then
- return k
- end
- local v = rawget(t,k)
- if v then
- return v
- end
- k = gsub(k," ","")
- v = rawget(t,v)
- if v then
- return v
- elseif acceptscripts then
- report_checks("registering extra script %a",k)
- rawset(t,k,k)
- return k
- end
- end
- return "dflt"
-end)
-
-setmetatableindex(languages, function(t,k)
- if k then
- k = lower(k)
- if k == "dflt" then
- return k
- end
- local v = rawget(t,k)
- if v then
- return v
- end
- k = gsub(k," ","")
- v = rawget(t,v)
- if v then
- return v
- elseif acceptlanguages then
- report_checks("registering extra language %a",k)
- rawset(t,k,k)
- return k
- end
- end
- return "dflt"
-end)
-
-setmetatablenewindex(languages, "ignore")
-setmetatablenewindex(baselines, "ignore")
-setmetatablenewindex(baselines, "ignore")
-
-local function resolve(t,k)
- if k then
- k = lower(k)
- local v = rawget(t,k)
- if v then
- return v
- end
- k = gsub(k," ","")
- local v = rawget(t,k)
- if v then
- return v
- end
- local tag, dd = match(k,"(..)(%d+)")
- if tag and dd then
- local v = rawget(t,tag)
- if v then
- return v -- return format(v,tonumber(dd)) -- old way
- else
- local v = rawget(t,tag.."..") -- nicer in overview
- if v then
- return (gsub(v,"%.%.",tonumber(dd))) -- new way
- end
- end
- end
- end
- return k -- "dflt"
-end
-
-setmetatableindex(features, resolve)
-
-local function assign(t,k,v)
- if k and v then
- v = lower(v)
- rawset(t,k,v) -- rawset ?
- -- rawset(features,gsub(v,"[^a-z0-9]",""),k) -- why ? old code
- end
-end
-
-setmetatablenewindex(features, assign)
-
-local checkers = {
- rand = function(v)
- return v == true and "random" or v
- end
-}
-
--- Keep this:
---
--- function otf.features.normalize(features)
--- if features then
--- local h = { }
--- for k, v in next, features do
--- k = lower(k)
--- if k == "language" then
--- v = gsub(lower(v),"[^a-z0-9]","")
--- h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds
--- elseif k == "script" then
--- v = gsub(lower(v),"[^a-z0-9]","")
--- h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds
--- else
--- if type(v) == "string" then
--- local b = is_boolean(v)
--- if type(b) == "nil" then
--- v = tonumber(v) or lower(v)
--- else
--- v = b
--- end
--- end
--- if not rawget(features,k) then
--- k = rawget(verbosefeatures,k) or k
--- end
--- local c = checkers[k]
--- h[k] = c and c(v) or v
--- end
--- end
--- return h
--- end
--- end
-
--- inspect(fonts.handlers.otf.statistics.usedfeatures)
-
-if not storage then
- return
-end
-
-local usedfeatures = statistics.usedfeatures or { }
-statistics.usedfeatures = usedfeatures
-
-table.setmetatableindex(usedfeatures, function(t,k) if k then local v = { } t[k] = v return v end end) -- table.autotable
-
-storage.register("fonts/otf/usedfeatures", usedfeatures, "fonts.handlers.otf.statistics.usedfeatures" )
-
-function otf.features.normalize(features)
- if features then
- local h = { }
- for key, value in next, features do
- local k = lower(key)
- if k == "language" then
- local v = gsub(lower(value),"[^a-z0-9]","")
- h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds
- elseif k == "script" then
- local v = gsub(lower(value),"[^a-z0-9]","")
- h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds
- else
- local uk = usedfeatures[key]
- local uv = uk[value]
- if uv then
- -- report_checks("feature value %a first seen at %a",value,key)
- else
- uv = tonumber(value) -- before boolean as there we also handle 0/1
- if uv then
- -- we're okay
- elseif type(value) == "string" then
- local b = is_boolean(value)
- if type(b) == "nil" then
- uv = lower(value)
- else
- uv = b
- end
- else
- uv = value
- end
- if not rawget(features,k) then
- k = rawget(verbosefeatures,k) or k
- end
- local c = checkers[k]
- if c then
- uv = c(uv) or vc
- end
- uk[value] = uv
- end
- h[k] = uv
- end
- end
- return h
- end
-end
-
---~ table.print(otf.features.normalize({ language = "dutch", liga = "yes", ss99 = true, aalt = 3, abcd = "yes" } ))
-
--- When I feel the need ...
-
---~ tables.aat = {
---~ [ 0] = {
---~ name = "allTypographicFeaturesType",
---~ [ 0] = "allTypeFeaturesOnSelector",
---~ [ 1] = "allTypeFeaturesOffSelector",
---~ },
---~ [ 1] = {
---~ name = "ligaturesType",
---~ [0 ] = "requiredLigaturesOnSelector",
---~ [1 ] = "requiredLigaturesOffSelector",
---~ [2 ] = "commonLigaturesOnSelector",
---~ [3 ] = "commonLigaturesOffSelector",
---~ [4 ] = "rareLigaturesOnSelector",
---~ [5 ] = "rareLigaturesOffSelector",
---~ [6 ] = "logosOnSelector ",
---~ [7 ] = "logosOffSelector ",
---~ [8 ] = "rebusPicturesOnSelector",
---~ [9 ] = "rebusPicturesOffSelector",
---~ [10] = "diphthongLigaturesOnSelector",
---~ [11] = "diphthongLigaturesOffSelector",
---~ [12] = "squaredLigaturesOnSelector",
---~ [13] = "squaredLigaturesOffSelector",
---~ [14] = "abbrevSquaredLigaturesOnSelector",
---~ [15] = "abbrevSquaredLigaturesOffSelector",
---~ },
---~ [ 2] = {
---~ name = "cursiveConnectionType",
---~ [ 0] = "unconnectedSelector",
---~ [ 1] = "partiallyConnectedSelector",
---~ [ 2] = "cursiveSelector ",
---~ },
---~ [ 3] = {
---~ name = "letterCaseType",
---~ [ 0] = "upperAndLowerCaseSelector",
---~ [ 1] = "allCapsSelector ",
---~ [ 2] = "allLowerCaseSelector",
---~ [ 3] = "smallCapsSelector ",
---~ [ 4] = "initialCapsSelector",
---~ [ 5] = "initialCapsAndSmallCapsSelector",
---~ },
---~ [ 4] = {
---~ name = "verticalSubstitutionType",
---~ [ 0] = "substituteVerticalFormsOnSelector",
---~ [ 1] = "substituteVerticalFormsOffSelector",
---~ },
---~ [ 5] = {
---~ name = "linguisticRearrangementType",
---~ [ 0] = "linguisticRearrangementOnSelector",
---~ [ 1] = "linguisticRearrangementOffSelector",
---~ },
---~ [ 6] = {
---~ name = "numberSpacingType",
---~ [ 0] = "monospacedNumbersSelector",
---~ [ 1] = "proportionalNumbersSelector",
---~ },
---~ [ 7] = {
---~ name = "appleReserved1Type",
---~ },
---~ [ 8] = {
---~ name = "smartSwashType",
---~ [ 0] = "wordInitialSwashesOnSelector",
---~ [ 1] = "wordInitialSwashesOffSelector",
---~ [ 2] = "wordFinalSwashesOnSelector",
---~ [ 3] = "wordFinalSwashesOffSelector",
---~ [ 4] = "lineInitialSwashesOnSelector",
---~ [ 5] = "lineInitialSwashesOffSelector",
---~ [ 6] = "lineFinalSwashesOnSelector",
---~ [ 7] = "lineFinalSwashesOffSelector",
---~ [ 8] = "nonFinalSwashesOnSelector",
---~ [ 9] = "nonFinalSwashesOffSelector",
---~ },
---~ [ 9] = {
---~ name = "diacriticsType",
---~ [ 0] = "showDiacriticsSelector",
---~ [ 1] = "hideDiacriticsSelector",
---~ [ 2] = "decomposeDiacriticsSelector",
---~ },
---~ [10] = {
---~ name = "verticalPositionType",
---~ [ 0] = "normalPositionSelector",
---~ [ 1] = "superiorsSelector ",
---~ [ 2] = "inferiorsSelector ",
---~ [ 3] = "ordinalsSelector ",
---~ },
---~ [11] = {
---~ name = "fractionsType",
---~ [ 0] = "noFractionsSelector",
---~ [ 1] = "verticalFractionsSelector",
---~ [ 2] = "diagonalFractionsSelector",
---~ },
---~ [12] = {
---~ name = "appleReserved2Type",
---~ },
---~ [13] = {
---~ name = "overlappingCharactersType",
---~ [ 0] = "preventOverlapOnSelector",
---~ [ 1] = "preventOverlapOffSelector",
---~ },
---~ [14] = {
---~ name = "typographicExtrasType",
---~ [0 ] = "hyphensToEmDashOnSelector",
---~ [1 ] = "hyphensToEmDashOffSelector",
---~ [2 ] = "hyphenToEnDashOnSelector",
---~ [3 ] = "hyphenToEnDashOffSelector",
---~ [4 ] = "unslashedZeroOnSelector",
---~ [5 ] = "unslashedZeroOffSelector",
---~ [6 ] = "formInterrobangOnSelector",
---~ [7 ] = "formInterrobangOffSelector",
---~ [8 ] = "smartQuotesOnSelector",
---~ [9 ] = "smartQuotesOffSelector",
---~ [10] = "periodsToEllipsisOnSelector",
---~ [11] = "periodsToEllipsisOffSelector",
---~ },
---~ [15] = {
---~ name = "mathematicalExtrasType",
---~ [ 0] = "hyphenToMinusOnSelector",
---~ [ 1] = "hyphenToMinusOffSelector",
---~ [ 2] = "asteriskToMultiplyOnSelector",
---~ [ 3] = "asteriskToMultiplyOffSelector",
---~ [ 4] = "slashToDivideOnSelector",
---~ [ 5] = "slashToDivideOffSelector",
---~ [ 6] = "inequalityLigaturesOnSelector",
---~ [ 7] = "inequalityLigaturesOffSelector",
---~ [ 8] = "exponentsOnSelector",
---~ [ 9] = "exponentsOffSelector",
---~ },
---~ [16] = {
---~ name = "ornamentSetsType",
---~ [ 0] = "noOrnamentsSelector",
---~ [ 1] = "dingbatsSelector ",
---~ [ 2] = "piCharactersSelector",
---~ [ 3] = "fleuronsSelector ",
---~ [ 4] = "decorativeBordersSelector",
---~ [ 5] = "internationalSymbolsSelector",
---~ [ 6] = "mathSymbolsSelector",
---~ },
---~ [17] = {
---~ name = "characterAlternativesType",
---~ [ 0] = "noAlternatesSelector",
---~ },
---~ [18] = {
---~ name = "designComplexityType",
---~ [ 0] = "designLevel1Selector",
---~ [ 1] = "designLevel2Selector",
---~ [ 2] = "designLevel3Selector",
---~ [ 3] = "designLevel4Selector",
---~ [ 4] = "designLevel5Selector",
---~ },
---~ [19] = {
---~ name = "styleOptionsType",
---~ [ 0] = "noStyleOptionsSelector",
---~ [ 1] = "displayTextSelector",
---~ [ 2] = "engravedTextSelector",
---~ [ 3] = "illuminatedCapsSelector",
---~ [ 4] = "titlingCapsSelector",
---~ [ 5] = "tallCapsSelector ",
---~ },
---~ [20] = {
---~ name = "characterShapeType",
---~ [0 ] = "traditionalCharactersSelector",
---~ [1 ] = "simplifiedCharactersSelector",
---~ [2 ] = "jis1978CharactersSelector",
---~ [3 ] = "jis1983CharactersSelector",
---~ [4 ] = "jis1990CharactersSelector",
---~ [5 ] = "traditionalAltOneSelector",
---~ [6 ] = "traditionalAltTwoSelector",
---~ [7 ] = "traditionalAltThreeSelector",
---~ [8 ] = "traditionalAltFourSelector",
---~ [9 ] = "traditionalAltFiveSelector",
---~ [10] = "expertCharactersSelector",
---~ },
---~ [21] = {
---~ name = "numberCaseType",
---~ [ 0] = "lowerCaseNumbersSelector",
---~ [ 1] = "upperCaseNumbersSelector",
---~ },
---~ [22] = {
---~ name = "textSpacingType",
---~ [ 0] = "proportionalTextSelector",
---~ [ 1] = "monospacedTextSelector",
---~ [ 2] = "halfWidthTextSelector",
---~ [ 3] = "normallySpacedTextSelector",
---~ },
---~ [23] = {
---~ name = "transliterationType",
---~ [ 0] = "noTransliterationSelector",
---~ [ 1] = "hanjaToHangulSelector",
---~ [ 2] = "hiraganaToKatakanaSelector",
---~ [ 3] = "katakanaToHiraganaSelector",
---~ [ 4] = "kanaToRomanizationSelector",
---~ [ 5] = "romanizationToHiraganaSelector",
---~ [ 6] = "romanizationToKatakanaSelector",
---~ [ 7] = "hanjaToHangulAltOneSelector",
---~ [ 8] = "hanjaToHangulAltTwoSelector",
---~ [ 9] = "hanjaToHangulAltThreeSelector",
---~ },
---~ [24] = {
---~ name = "annotationType",
---~ [ 0] = "noAnnotationSelector",
---~ [ 1] = "boxAnnotationSelector",
---~ [ 2] = "roundedBoxAnnotationSelector",
---~ [ 3] = "circleAnnotationSelector",
---~ [ 4] = "invertedCircleAnnotationSelector",
---~ [ 5] = "parenthesisAnnotationSelector",
---~ [ 6] = "periodAnnotationSelector",
---~ [ 7] = "romanNumeralAnnotationSelector",
---~ [ 8] = "diamondAnnotationSelector",
---~ },
---~ [25] = {
---~ name = "kanaSpacingType",
---~ [ 0] = "fullWidthKanaSelector",
---~ [ 1] = "proportionalKanaSelector",
---~ },
---~ [26] = {
---~ name = "ideographicSpacingType",
---~ [ 0] = "fullWidthIdeographsSelector",
---~ [ 1] = "proportionalIdeographsSelector",
---~ },
---~ [103] = {
---~ name = "cjkRomanSpacingType",
---~ [ 0] = "halfWidthCJKRomanSelector",
---~ [ 1] = "proportionalCJKRomanSelector",
---~ [ 2] = "defaultCJKRomanSelector",
---~ [ 3] = "fullWidthCJKRomanSelector",
---~ },
---~ }
diff --git a/Master/texmf-dist/tex/context/base/lang-all.xml b/Master/texmf-dist/tex/context/base/lang-all.xml
deleted file mode 100644
index 503cb0ae5db..00000000000
--- a/Master/texmf-dist/tex/context/base/lang-all.xml
+++ /dev/null
@@ -1,376 +0,0 @@
-<?xml version='1.0' standalone='yes'?>
-
-<!-- author: Willy Egger -->
-
-<descriptions>
-
-<description language='ba'>
- <sourcefile>bahyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Basque language</title>
- <copyright>
- <year>1991</year>
- <owner>Julio Sanchez (jsanchez@gmv.es)</owner>
- <comment>These patterns have been derived from "On Word Division in Spanish"
- Jos'e A. Ma~nas</comment>
- </copyright>
- <copyright>
- <year>1997</year>
- <owner>Juan M. Aguirregabiria (wtpagagj@lg.ehu.es)</owner>
- <comment>Adaption to TeX based on shyphen.sh</comment>
- </copyright>
-</description>
-
-<description language='ca'>
- <sourcefile>cahyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Catalan language</title>
- <remarks>Version 1.11</remarks>
- <copyright>
- <year>1991-1995 </year>
- <owner>Gon\c{c}al Badenes,Francina Turon</owner>
- </copyright>
- <copyright>
- <year>1991-2003</year>
- <owner>Gon\c{c}al Badenes</owner>
- </copyright>
-</description>
-
-<description language='cy'>
- <sourcefile>cyhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Welsh Language</title>
- <remarks>v3,GNU General Public License</remarks>
- <copyright>
- <year>1996</year>
- <owner>Yannis Haralambous</owner>
- <comment>Inputs cathyph.tex, patterns in EC/DC encoding</comment>
- </copyright>
-</description>
-
-<description language='cz'>
- <sourcefile>czhyphen.tex</sourcefile>
- <title>TeX hyphenation patterns for the Czech language</title>
- <copyright>
- <year>1991</year>
- <owner>Karel Horak</owner>
- <comment>List of exceptions</comment>
- </copyright>
- <copyright>
- <year>1995</year>
- <owner>Pavel Sevecek (\v{S}eve\v{c}ek) (pavel@lingea.cz)</owner>
- <comment>Macros, adaption for TeX 2</comment>
- </copyright>
- <!-- samples>
- <sample>au-to-ma-tic-k</sample>
- <sample>bram-bo-rk</sample>
- <sample>da-ta-b-ze</sample>
- <sample>kr-ka-vec</sample>
- <sample>Kro-me-r</sample>
- <sample>ob-hos-po-da-ro-vat</sample>
- <sample>rem-dich</sample>
- <sample>scvrk-nout</sample>
- <sample>za-les-nit</sample>
- <sample>e-u-lic-ka</sample>
- </samples -->
-</description>
-
-<description language='da'>
- <sourcefile>dkspecial.tex dkcommon.tex</sourcefile>
- <title>TeX hyphenation patterns for the Danish language</title>
- <copyright/>
-</description>
-
-<description language='de'>
- <sourcefile>dehyphn.tex</sourcefile>
- <title>TeX hyphenation patterns for the German language (new orthography)</title>
- <copyright>
- <year>1988, 1991</year>
- <owner>Rechenzentrum der Ruhr-Universitaet Bochum</owner>
- <comment>German hyphen patterns</comment>
- </copyright>
- <copyright>
- <year>1993, 1994, 1999</year>
- <owner>Bernd Raichle/DANTE e.V.</owner>
- <comment>Macros, adaption for TeX 2</comment>
- </copyright>
- <copyright>
- <year>1998-2001</year>
- <owner>Walter Schmidt</owner>
- <comment>Adaption to new German orthography</comment>
- </copyright>
-</description>
-
-<description language='deo'>
- <sourcefile>dehypht.tex</sourcefile>
- <title>TeX hyphenation patterns for the German language (traditional orthography)</title>
- <copyright>
- <year>1988, 1991</year>
- <owner>Rechenzentrum der Ruhr-Universitaet Bochum</owner>
- <comment>German hyphen patterns</comment>
- </copyright>
- <copyright>
- <year>1993, 1994, 1999</year>
- <owner>Bernd Raichle/DANTE e.V.</owner>
- <comment>Macros, adaption for TeX 2</comment>
- </copyright>
-</description>
-
-<description language='en'>
- <sourcefile>hyphen.tex</sourcefile>
- <title>Plain TeX hyphenation patterns for the English language (US) </title>
- <remarks>[NOT TO BE CHANGED IN ANY WAY!]</remarks>
- <copyright/>
-</description>
-
-<description language='es'>
- <sourcefile>eshyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Spanish language</title>
- <copyright>
- <year>1993</year>
- <owner>Francesc Carmona (franc@porthos.bio.ub.es)</owner>
- </copyright>
-</description>
-
-<description language='fi'>
- <sourcefile>fihyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Finnish language</title>
- <copyright>
- <year>1986</year>
- <owner>Kauko Saarinen</owner>
- <comment>First release</comment>
- </copyright>
- <copyright>
- <year>1988</year>
- <owner>Fred Karlsson</owner>
- <comment>Completely rewritten patterns</comment>
- </copyright>
- <copyright>
- <year>1989</year>
- <owner>Fred Karlsson</owner>
- <comment>Some vowel tripples added</comment>
- </copyright>
- <copyright>
- <year>1995</year>
- <owner>Thomas Esser</owner>
- <comment>Added \uccode and \lccode </comment>
- </copyright>
-</description>
-
-<description language='fr'>
- <sourcefile>frhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the French language</title>
- <remarks>V2.11</remarks>
- <copyright>
- <owner>Jacques Desarmenien, Norman Buckle, Michael Ferguson, Justin Bur, Daniel Flipo and Bernard Gaulle</owner>
- </copyright>
- <copyright>
- <year>1996</year>
- <owner>Bernd Raichle/DANTE e.V.</owner>
- <comment>Adaption for TeX 3.x and MLTeX 3.x (2.x)</comment>
- </copyright>
-</description>
-
-<description language='hr'>
- <sourcefile> hrhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Croatian language</title>
- <copyright>
- <year>1994, 1996</year>
- <owner>Marinovi\'c Igor (migor@student.math.hr)</owner>
- </copyright>
-</description>
-
-<description language='hu'>
- <sourcefile> huhyphn.tex</sourcefile>
- <title>TeX hyphenation patterns for the Hungarian language</title>
-</description>
-
-<description language='is'>
- <sourcefile>ishyph.tex</sourcefile>
- <title>Plain TeX hyphenation patterns for the Icelandic language</title>
- <remarks>[NOT TO BE CHANGED IN ANY WAY!]</remarks>
- <copyright>
- <year>1987</year>
- <owner>Jorgen Pind</owner>
- </copyright>
-</description>
-
-<description language='it'>
- <sourcefile>ithyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Italian language</title>
- <remarks>v4.8d</remarks>
- <copyright>
- <year>1998, 2001</year>
- <owner>Claudio Beccari</owner>
- </copyright>
- <copyright>
- <year>1993, 1994, 1999</year>
- <owner>Bernd Raichle/DANTE e.V.</owner>
- <comment>Macros, adaption for TeX 2</comment>
- </copyright>
-</description>
-
-<description language='la'>
- <sourcefile>lahyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Latin language</title>
- <remarks>v3.0b</remarks>
- <copyright>
- <year>1999-2001</year>
- <owner>Claudio Beccari</owner>
- </copyright>
- <copyright>
- <year>1993, 1994, 1998, 1999</year>
- <owner>Bernd Raichle/DANTE e.V.</owner>
- <comment>Macro code in 'dehypht.tex'</comment>
- </copyright>
-</description>
-
-<description language='nl'>
- <sourcefile>nehyph96.tex</sourcefile>
- <title>TeX hyphenation patterns for the Dutch language</title>
- <copyright>
- <year>1996</year>
- <owner> Piet Tutelaers (P.T.H.Tutelaers@tue.nl)</owner>
- <comment>8-bit hyphenation patterns for TeX based upon the new Dutch
- spelling, officially since 1 August 1996. These patterns follow
- the new hyphenation rules in the `Woordenlijst Nederlandse
- Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene
- Boekje') described in section 5.2 (Het afbreekteken)</comment>
- </copyright>
-</description>
-
-<!-- Watch the next one: what a naming mess. What user can keep track of
-such an inconsistent name scheme (well, no name scheme). Please warn me
-when yet another name shows up -->
-
-<description language='no'>
- <sourcefile>nohyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Norwegian language</title>
- <copyright>
- <year>2005</year>
- <owner>Rune Kleveland with patches from Ole Michael Selberg</owner>
- <comment>nohyphbx.tex</comment>
- </copyright>
- <copyright>
- <year>200+</year>
- <owner>Rune Kleveland</owner>
- <comment>nohyphb.tex</comment>
- </copyright>
- <copyright>
- <year>199+</year>
- <owner>Dag Langmyhr and student</owner>
- <comment>nohyph2.tex</comment>
- </copyright>
- <copyright>
- <year>199+</year>
- <owner>Ivar Aavatsmark and others</owner>
- <comment>nohyph.tex sometimes named nohyph1.tex</comment>
- </copyright>
- <copyright>
- <year>1992,1993</year>
- <owner>Ivar Aavatsmark</owner>
- <comment>nohyphen.tex based on danhyph.tex</comment>
- </copyright>
- <copyright>
- <year>1994</year>
- <owner>Preben Randhol, Jon Martin Solaas</owner>
- </copyright>
- <copyright>
- <year>1995</year>
- <owner>Thomas Esser (te@dbs.uni-hannover.de)</owner>
- <comment>Make patterns work with non-T1 encoding</comment>
- </copyright>
-</description>
-
-<description language='pl'>
- <sourcefile>plhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Polish language</title>
- <copyright/>
-</description>
-
-<description language='pt'>
- <sourcefile>pthyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Portuguese language</title>
- <copyright/>
-</description>
-
-<description language='ro'>
- <sourcefile>rohyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Romanian language</title>
- <copyright/>
-</description>
-
-<description language='sk'>
- <sourcefile>skhyphen.tex skhyphen.ex</sourcefile>
- <title>TeX hyphenation patterns for the Slovakian language</title>
- <copyright>
- <year>1992</year>
- <owner>Jana Chlebikova</owner>
- </copyright>
- <copyright>
- <year>1991</year>
- <owner>Karel Horak</owner>
- <comment>List of exceptions</comment>
- </copyright>
-</description>
-
-<description language='sl'>
- <sourcefile>sihyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Slovenian language</title>
- <copyright>
- <year>1990</year>
- <owner>TeXCeX (SLO),TeXCeH Norbert Schwarz</owner>
- </copyright>
- <copyright>
- <year>1994</year>
- <owner>Leon "Zlajpah (leon.zlajpah@ijs.si)</owner>
- <comment>Use of code page 852 in patterns</comment>
- </copyright>
- <copyright>
- <year>1995,1997</year>
- <owner>Leon "Zlajpah (leon.zlajpah@ijs.si)</owner>
- <comment>Adaptaion of Slovenian hyphenation pattens, macros</comment>
- </copyright>
-</description>
-
-<description language='sv'>
- <sourcefile>svhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the Swedish language</title>
- <copyright>
- <year>1991,1994</year>
- <owner>Jan Michael Rynning</owner>
- </copyright>
-</description>
-
-<description language='tr'>
- <sourcefile>tkhyph.tex</sourcefile>
- <title>TeX hyphenation patterns for the modern Turkish language</title>
- <copyright>
- <year>1996</year>
- <owner>Yannis Haralambous</owner>
- <comment>A mechanically generated Turkish Hyphenation table for TeX,
- using the University of Washington diacritical coding
- developed by P. A. MacKay for the Ottoman Texts Project</comment>
- </copyright>
-</description>
-
-<description language='uk'>
- <sourcefile>ukhyphen.tex</sourcefile>
- <title>TeX hyphenation patterns for the English language (UK)</title>
- <copyright/>
-</description>
-
-<description language='vn'>
- <comment>Vietnamese needs no patterns.</comment>
-</description>
-
-<description language='agr'>
- <sourcefile>grahyph4.tex</sourcefile>
- <title>TeX hyphenation patterns for the ancient Greek language</title>
- <copyright>
- <year>2004</year>
- <owner>Dimitrios Filippou</owner>
- <comment>These hyphenation patterns are explained in "ancient.pdf".
- Hyphenation examples are given in the file "anc-test.pdf".
- Some doubtful patterns are marked by three question marks "???".</comment>
- </copyright>
-</description>
-
-</descriptions>
diff --git a/Master/texmf-dist/tex/context/base/lang-frq-de.lua b/Master/texmf-dist/tex/context/base/lang-frq-de.lua
deleted file mode 100644
index 3733f39f92e..00000000000
--- a/Master/texmf-dist/tex/context/base/lang-frq-de.lua
+++ /dev/null
@@ -1,12 +0,0 @@
-return {
- language = "de",
- source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm",
- frequencies = {
- [0x0061] = 6.47, [0x0062] = 1.93, [0x0063] = 2.68, [0x0064] = 4.83, [0x0065] = 17.48,
- [0x0066] = 1.65, [0x0067] = 3.06, [0x0068] = 4.23, [0x0069] = 7.73, [0x006A] = 0.27,
- [0x006B] = 1.46, [0x006C] = 3.49, [0x006D] = 2.58, [0x006E] = 9.84, [0x006F] = 2.98,
- [0x0070] = 0.96, [0x0071] = 0.02, [0x0072] = 7.54, [0x0073] = 6.83, [0x0074] = 6.13,
- [0x0075] = 4.17, [0x0076] = 0.94, [0x0077] = 1.48, [0x0078] = 0.04, [0x0079] = 0.08,
- [0x007A] = 1.14,
- }
-}
diff --git a/Master/texmf-dist/tex/context/base/lang-frq-en.lua b/Master/texmf-dist/tex/context/base/lang-frq-en.lua
deleted file mode 100644
index 9e18d716679..00000000000
--- a/Master/texmf-dist/tex/context/base/lang-frq-en.lua
+++ /dev/null
@@ -1,26 +0,0 @@
--- return {
--- language = "en",
--- source = "http://caislab.icu.ac.kr/course/2001/spring/ice605/down/010306.pdf",
--- frequencies = {
--- [0x0061] = 8.2, [0x0062] = 1.5, [0x0063] = 2.8, [0x0064] = 4.3, [0x0065] = 12.7,
--- [0x0066] = 2.2, [0x0067] = 2.0, [0x0068] = 6.1, [0x0069] = 7.0, [0x006A] = 0.2,
--- [0x006B] = 0.8, [0x006C] = 4.0, [0x006D] = 2.4, [0x006E] = 6.7, [0x006F] = 7.5,
--- [0x0070] = 1.9, [0x0071] = 0.1, [0x0072] = 6.0, [0x0073] = 6.3, [0x0074] = 9.1,
--- [0x0075] = 2.8, [0x0076] = 1.0, [0x0077] = 2.3, [0x0078] = 0.1, [0x0079] = 2.0,
--- [0x007A] = 0.1,
--- }
--- }
-
-return {
- language = "en",
- source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm",
- frequencies = {
- [0x0061] = 8.04, [0x0062] = 1.54, [0x0063] = 3.06, [0x0064] = 3.99, [0x0065] = 12.51,
- [0x0066] = 2.30, [0x0067] = 1.96, [0x0068] = 5.49, [0x0069] = 7.26, [0x006A] = 0.16,
- [0x006B] = 0.67, [0x006C] = 4.14, [0x006D] = 2.53, [0x006E] = 7.09, [0x006F] = 7.60,
- [0x0070] = 2.00, [0x0071] = 0.11, [0x0072] = 6.12, [0x0073] = 6.54, [0x0074] = 9.25,
- [0x0075] = 2.71, [0x0076] = 0.99, [0x0077] = 1.92, [0x0078] = 0.19, [0x0079] = 1.73,
- [0x007A] = 0.09,
- }
-}
-
diff --git a/Master/texmf-dist/tex/context/base/lang-frq-nl.lua b/Master/texmf-dist/tex/context/base/lang-frq-nl.lua
deleted file mode 100644
index 7b640b77929..00000000000
--- a/Master/texmf-dist/tex/context/base/lang-frq-nl.lua
+++ /dev/null
@@ -1,12 +0,0 @@
-return {
- language = "nl",
- source = "http://www.onzetaal.nl/advies/letterfreq.html",
- frequencies = {
- [0x0061] = 7.47, [0x0062] = 1.58, [0x0063] = 1.24, [0x0064] = 5.93, [0x0065] = 18.91,
- [0x0066] = 0.81, [0x0067] = 3.40, [0x0068] = 2.38, [0x0069] = 6.50, [0x006A] = 1.46,
- [0x006B] = 2.25, [0x006C] = 3.57, [0x006D] = 2.21, [0x006E] = 10.03, [0x006F] = 6.06,
- [0x0070] = 1.57, [0x0071] = 0.009, [0x0072] = 6.41, [0x0073] = 3.73, [0x0074] = 6.79,
- [0x0075] = 1.99, [0x0076] = 2.85, [0x0077] = 1.52, [0x0078] = 0.04, [0x0079] = 0.035,
- [0x007A] = 1.39,
- }
-}
diff --git a/Master/texmf-dist/tex/context/base/lang-url.lua b/Master/texmf-dist/tex/context/base/lang-url.lua
deleted file mode 100644
index 39418beefa2..00000000000
--- a/Master/texmf-dist/tex/context/base/lang-url.lua
+++ /dev/null
@@ -1,186 +0,0 @@
-if not modules then modules = { } end modules ['lang-url'] = {
- version = 1.001,
- comment = "companion to lang-url.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local utfcharacters, utfvalues, utfbyte, utfchar = utf.characters, utf.values, utf.byte, utf.char
-
-local commands = commands
-local context = context
-
-local implement = interfaces.implement
-
-local variables = interfaces.variables
-local v_before = variables.before
-local v_after = variables.after
-
-local is_letter = characters.is_letter
-
---[[
-<p>Hyphenating <l n='url'/>'s is somewhat tricky and a matter of taste. I did
-consider using a dedicated hyphenation pattern or dealing with it by node
-parsing, but the following solution suits as well. After all, we're mostly
-dealing with <l n='ascii'/> characters.</p>
-]]--
-
-commands.hyphenatedurl = commands.hyphenatedurl or { }
-local hyphenatedurl = commands.hyphenatedurl
-
-local characters = utilities.storage.allocate {
- ["!"] = "before",
- ["\""] = "before",
- ["#"] = "before",
- ["$"] = "before",
- ["%"] = "before",
- ["&"] = "before",
- ["("] = "before",
- ["*"] = "before",
- ["+"] = "before",
- [","] = "before",
- ["-"] = "before",
- ["."] = "before",
- ["/"] = "before",
- [":"] = "before",
- [";"] = "before",
- ["<"] = "before",
- ["="] = "before",
- [">"] = "before",
- ["?"] = "before",
- ["@"] = "before",
- ["["] = "before",
- ["\\"] = "before",
- ["^"] = "before",
- ["_"] = "before",
- ["`"] = "before",
- ["{"] = "before",
- ["|"] = "before",
- ["~"] = "before",
-
- ["'"] = "after",
- [")"] = "after",
- ["]"] = "after",
- ["}"] = "after",
-}
-
-local mapping = utilities.storage.allocate {
- -- [utfchar(0xA0)] = "~", -- nbsp (catch)
-}
-
-hyphenatedurl.characters = characters
-hyphenatedurl.mapping = mapping
-hyphenatedurl.lefthyphenmin = 2
-hyphenatedurl.righthyphenmin = 3
-hyphenatedurl.discretionary = nil
-
--- more fun is to write nodes .. maybe it's nicer to do this
--- in an attribute handler anyway
-
--- local ctx_a = context.a
--- local ctx_b = context.b
--- local ctx_d = context.d
--- local ctx_n = context.n
--- local ctx_s = context.s
-
--- local function action(hyphenatedurl,str,left,right,disc)
--- local n = 0
--- local b = math.max( left or hyphenatedurl.lefthyphenmin, 2)
--- local e = math.min(#str-(right or hyphenatedurl.righthyphenmin)+2,#str)
--- local d = disc or hyphenatedurl.discretionary
--- local p = nil
--- for s in utfcharacters(str) do
--- n = n + 1
--- s = mapping[s] or s
--- if n > 1 then
--- ctx_s() -- can be option
--- end
--- if s == d then
--- ctx_d(utfbyte(s))
--- else
--- local c = characters[s]
--- if not c or n <= b or n >= e then
--- ctx_n(utfbyte(s))
--- elseif c == 1 then
--- ctx_b(utfbyte(s))
--- elseif c == 2 then
--- ctx_a(utfbyte(s))
--- end
--- end
--- p = s
--- end
--- end
-
-local ctx_a = context.a
-local ctx_b = context.b
-local ctx_d = context.d
-local ctx_c = context.c
-local ctx_l = context.l
-local ctx_C = context.C
-local ctx_L = context.L
-
-local function action(hyphenatedurl,str,left,right,disc)
- local n = 0
- local b = math.max( left or hyphenatedurl.lefthyphenmin, 2)
- local e = math.min(#str-(right or hyphenatedurl.righthyphenmin)+2,#str)
- local d = disc or hyphenatedurl.discretionary
- local p = nil
- for s in utfcharacters(str) do
- n = n + 1
- s = mapping[s] or s
- if s == d then
- ctx_d(utfbyte(s))
- else
- local c = characters[s]
- if c == v_before then
- p = false
- ctx_b(utfbyte(s))
- elseif c == v_after then
- p = false
- ctx_a(utfbyte(s))
- else
- local l = is_letter[s]
- if n <= b or n >= e then
- if p and l then
- ctx_L(utfbyte(s))
- else
- ctx_C(utfbyte(s))
- end
- elseif p and l then
- ctx_l(utfbyte(s))
- else
- ctx_c(utfbyte(s))
- end
- p = l
- end
- end
- end
-end
-
--- hyphenatedurl.action = function(_,...) action(...) end -- sort of obsolete
-
-table.setmetatablecall(hyphenatedurl,action) -- watch out: a caller
-
--- todo, no interface in mkiv yet
-
-function hyphenatedurl.setcharacters(str,value) -- 1, 2 == before, after
- for s in utfcharacters(str) do
- characters[s] = value or v_before
- end
-end
-
--- .hyphenatedurl.setcharacters("')]}",2)
-
-implement {
- name = "sethyphenatedurlcharacters",
- actions = hyphenatedurl.setcharacters,
- arguments = { "string", "string" }
-}
-
-implement {
- name = "hyphenatedurl",
- scope = "private",
- actions = function(...) action(hyphenatedurl,...) end,
- arguments = { "string", "integer", "integer", "string" }
-}
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.lua b/Master/texmf-dist/tex/context/base/lxml-ini.lua
deleted file mode 100644
index 115403395e5..00000000000
--- a/Master/texmf-dist/tex/context/base/lxml-ini.lua
+++ /dev/null
@@ -1,142 +0,0 @@
-if not modules then modules = { } end modules ['lxml-ini'] = {
- version = 1.001,
- comment = "this module is the basis for the lxml-* ones",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local xml = xml
-local lxml = lxml
-
--- this defines an extra scanner lxmlid:
-
-local scanners = tokens.scanners
-local scanstring = scanners.string
-local getid = lxml.id
-
-scanners.lxmlid = function() return getid(scanstring()) end
-
-local implement = interfaces.implement
-
--- lxml.id
-
-implement { name = "lxmlid", actions = lxml.getid, arguments = "string" }
-
-implement { name = "xmldoif", actions = lxml.doif, arguments = { "string", "string" } }
-implement { name = "xmldoifnot", actions = lxml.doifnot, arguments = { "string", "string" } }
-implement { name = "xmldoifelse", actions = lxml.doifelse, arguments = { "string", "string" } }
-implement { name = "xmldoiftext", actions = lxml.doiftext, arguments = { "string", "string" } }
-implement { name = "xmldoifnottext", actions = lxml.doifnottext, arguments = { "string", "string" } }
-implement { name = "xmldoifelsetext", actions = lxml.doifelsetext, arguments = { "string", "string" } }
-
-implement { name = "xmldoifempty", actions = lxml.doifempty, arguments = { "string", "string" } }
-implement { name = "xmldoifnotempty", actions = lxml.doifnotempty, arguments = { "string", "string" } }
-implement { name = "xmldoifelseempty", actions = lxml.doifelseempty, arguments = { "string", "string" } }
-implement { name = "xmldoifselfempty", actions = lxml.doifempty, arguments = "string" }
-implement { name = "xmldoifnotselfempty", actions = lxml.doifnotempty, arguments = "string" }
-implement { name = "xmldoifelseselfempty", actions = lxml.doifelseempty, arguments = "string" }
-
---------- { name = "xmlcontent", actions = lxml.content, arguments = "string" }
---------- { name = "xmlflushstripped", actions = lxml.strip, arguments = { "string", true } }
-implement { name = "xmlall", actions = lxml.all, arguments = { "string", "string" } }
-implement { name = "xmlatt", actions = lxml.att, arguments = { "string", "string" } }
-implement { name = "xmlattdef", actions = lxml.att, arguments = { "string", "string", "string" } }
-implement { name = "xmlattribute", actions = lxml.attribute, arguments = { "string", "string", "string" } }
-implement { name = "xmlattributedef", actions = lxml.attribute, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlchainatt", actions = lxml.chainattribute, arguments = { "string", "'/'", "string" } }
-implement { name = "xmlchainattdef", actions = lxml.chainattribute, arguments = { "string", "'/'", "string", "string" } }
-implement { name = "xmlrefatt", actions = lxml.refatt, arguments = { "string", "string" } }
-implement { name = "xmlchecknamespace", actions = xml.checknamespace, arguments = { "lxmlid", "string", "string" } }
-implement { name = "xmlcommand", actions = lxml.command, arguments = { "string", "string", "string" } }
-implement { name = "xmlconcat", actions = lxml.concat, arguments = { "string", "string", "string" } } -- \detokenize{#3}
-implement { name = "xmlconcatrange", actions = lxml.concatrange, arguments = { "string", "string", "string", "string", "string" } } -- \detokenize{#5}
-implement { name = "xmlcontext", actions = lxml.context, arguments = { "string", "string" } }
-implement { name = "xmlcount", actions = lxml.count, arguments = { "string", "string" } }
-implement { name = "xmldelete", actions = lxml.delete, arguments = { "string", "string" } }
-implement { name = "xmldirect", actions = lxml.direct, arguments = "string" }
-implement { name = "xmldirectives", actions = lxml.directives.setup, arguments = "string" }
-implement { name = "xmldirectivesafter", actions = lxml.directives.after, arguments = "string" }
-implement { name = "xmldirectivesbefore", actions = lxml.directives.before, arguments = "string" }
-implement { name = "xmldisplayverbatim", actions = lxml.displayverbatim, arguments = "string" }
-implement { name = "xmlelement", actions = lxml.element, arguments = { "string", "string" } } -- could be integer but now we can alias
-implement { name = "xmlfilter", actions = lxml.filter, arguments = { "string", "string" } }
-implement { name = "xmlfilterlist", actions = lxml.filterlist, arguments = { "string", "string" } }
-implement { name = "xmlfirst", actions = lxml.first, arguments = { "string", "string" } }
-implement { name = "xmlflush", actions = lxml.flush, arguments = "string" }
-implement { name = "xmlflushcontext", actions = lxml.context, arguments = "string" }
-implement { name = "xmlflushlinewise", actions = lxml.flushlinewise, arguments = "string" }
-implement { name = "xmlflushspacewise", actions = lxml.flushspacewise, arguments = "string" }
-implement { name = "xmlfunction", actions = lxml.applyfunction, arguments = { "string", "string" } }
-implement { name = "xmlinclude", actions = lxml.include, arguments = { "string", "string", "string", true } }
-implement { name = "xmlincludeoptions", actions = lxml.include, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlinclusion", actions = lxml.inclusion, arguments = "string" }
-implement { name = "xmlinclusions", actions = lxml.inclusions, arguments = "string" }
-implement { name = "xmlbadinclusions", actions = lxml.badinclusions, arguments = "string" }
-implement { name = "xmlindex", actions = lxml.index, arguments = { "string", "string", "string" } } -- can be integer but now we can alias
-implement { name = "xmlinfo", actions = lxml.info, arguments = "string" }
-implement { name = "xmlinlineverbatim", actions = lxml.inlineverbatim, arguments = "string" }
-implement { name = "xmllast", actions = lxml.last, arguments = "string" }
-implement { name = "xmlload", actions = lxml.load, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlloadbuffer", actions = lxml.loadbuffer, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlloaddata", actions = lxml.loaddata, arguments = { "string", "string", "string", "string" } }
-implement { name = "xmlloaddirectives", actions = lxml.directives.load, arguments = "string" }
-implement { name = "xmlloadregistered", actions = lxml.loadregistered, arguments = { "string", "string", "string" } }
-implement { name = "xmlmain", actions = lxml.main, arguments = "string" }
-implement { name = "xmlmatch", actions = lxml.match, arguments = "string" }
-implement { name = "xmlname", actions = lxml.name, arguments = "string" }
-implement { name = "xmlnamespace", actions = lxml.namespace, arguments = "string" }
-implement { name = "xmlnonspace", actions = lxml.nonspace, arguments = { "string", "string" } }
-implement { name = "xmlpos", actions = lxml.pos, arguments = "string" }
-implement { name = "xmlraw", actions = lxml.raw, arguments = { "string", "string" } }
-implement { name = "xmlregisterns", actions = xml.registerns, arguments = { "string", "string" } }
-implement { name = "xmlremapname", actions = xml.remapname, arguments = { "lxmlid", "string","string","string" } }
-implement { name = "xmlremapnamespace", actions = xml.renamespace, arguments = { "lxmlid", "string", "string" } }
-implement { name = "xmlsave", actions = lxml.save, arguments = { "string", "string" } }
---------- { name = "xmlsetfunction", actions = lxml.setaction, arguments = { "string", "string", "string" } }
-implement { name = "xmlsetsetup", actions = lxml.setsetup, arguments = { "string", "string", "string" } }
-implement { name = "xmlsnippet", actions = lxml.snippet, arguments = { "string", "string" } }
-implement { name = "xmlstrip", actions = lxml.strip, arguments = { "string", "string" } }
-implement { name = "xmlstripanywhere", actions = lxml.strip, arguments = { "string", "string", true, true } }
-implement { name = "xmlstripnolines", actions = lxml.strip, arguments = { "string", "string", true } }
-implement { name = "xmlstripped", actions = lxml.stripped, arguments = { "string", "string" } }
-implement { name = "xmlstrippednolines", actions = lxml.stripped, arguments = { "string", "string", true } }
-implement { name = "xmltag", actions = lxml.tag, arguments = "string" }
-implement { name = "xmltext", actions = lxml.text, arguments = { "string", "string" } }
-implement { name = "xmltobuffer", actions = lxml.tobuffer, arguments = { "string", "string", "string" } }
-implement { name = "xmltobufferverbose", actions = lxml.tobuffer, arguments = { "string", "string", "string", true } }
-implement { name = "xmltofile", actions = lxml.tofile, arguments = { "string", "string", "string" } }
-implement { name = "xmltoparameters", actions = lxml.toparameters, arguments = "string" }
-implement { name = "xmlverbatim", actions = lxml.verbatim, arguments = "string" }
-
-implement { name = "xmlstartraw", actions = lxml.startraw }
-implement { name = "xmlstopraw", actions = lxml.stopraw }
-
-implement { name = "xmlprependsetup", actions = lxml.installsetup, arguments = { 1, "string", "string" } } -- 2:*
-implement { name = "xmlappendsetup", actions = lxml.installsetup, arguments = { 2, "string", "string" } } -- 2:*
-implement { name = "xmlbeforesetup", actions = lxml.installsetup, arguments = { 3, "string", "string", "string" } } -- 2:*
-implement { name = "xmlaftersetup", actions = lxml.installsetup, arguments = { 4, "string", "string", "string" } } -- 2:*
-implement { name = "xmlprependdocumentsetup", actions = lxml.installsetup, arguments = { 1, "string", "string" } }
-implement { name = "xmlappenddocumentsetup", actions = lxml.installsetup, arguments = { 2, "string", "string" } }
-implement { name = "xmlbeforedocumentsetup", actions = lxml.installsetup, arguments = { 3, "string", "string", "string" } }
-implement { name = "xmlafterdocumentsetup", actions = lxml.installsetup, arguments = { 4, "string", "string" } }
-implement { name = "xmlremovesetup", actions = lxml.removesetup, arguments = { "string", "string" } } -- 1:*
-implement { name = "xmlremovedocumentsetup", actions = lxml.removesetup, arguments = { "string", "string" } }
-implement { name = "xmlflushdocumentsetups", actions = lxml.flushsetups, arguments = { "string", "string", "string" } } -- 2:*
-implement { name = "xmlresetdocumentsetups", actions = lxml.resetsetups, arguments = "string" }
-
-implement { name = "xmlgetindex", actions = lxml.getindex, arguments = { "string", "string" } }
-implement { name = "xmlwithindex", actions = lxml.withindex, arguments = { "string", "string", "string" } }
-
-implement { name = "xmlsetentity", actions = xml.registerentity, arguments = { "string", "string" } }
-implement { name = "xmltexentity", actions = lxml.registerentity, arguments = { "string", "string" } }
-
-implement { name = "xmlsetcommandtotext", actions = lxml.setcommandtotext, arguments = "string" }
-implement { name = "xmlsetcommandtonone", actions = lxml.setcommandtonone, arguments = "string" }
-
-implement { name = "xmlstarttiming", actions = function() statistics.starttiming(lxml) end }
-implement { name = "xmlstoptiming", actions = function() statistics.stoptiming (lxml) end }
-
--- kind of special (3rd argument is a function)
-
-commands.xmlsetfunction = lxml.setaction
diff --git a/Master/texmf-dist/tex/context/base/m-datastrc.tex b/Master/texmf-dist/tex/context/base/m-datastrc.tex
deleted file mode 100644
index 1fd5a9e42c4..00000000000
--- a/Master/texmf-dist/tex/context/base/m-datastrc.tex
+++ /dev/null
@@ -1,228 +0,0 @@
-%D \module
-%D [ file=m-datastrc, % was: core-dat % was core-02a
-%D version=1999.08.10, % 1997.03.31,
-%D title=\CONTEXT\ Modules,
-%D subtitle=Database Support, % 2A
-%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 / Database Support}
-
-\unprotect
-
-%D This module is a (limited) rewrite of the original \type
-%D {core-02a} module, the module that dealt with managing a
-%D database of addresses. The principles and methods have not
-%D changed; they are only generalized.
-%D
-%D A database file |<|in most cases such a base is generated
-%D from another one|>| is structured as follows:
-%D
-%D \starttyping
-%D \startrecord{tag}
-%D \memberofgroup{grouplist}
-%D \setrecordentry{name}{...}
-%D ....
-%D \stoprecord
-%D \stoptyping
-%D
-%D The interface to such a database is defined as follows:
-%D
-%D \starttyping
-%D \definerecord[class][settings]
-%D \setuprecord[class][settings]
-%D \definerecordentry[class][name]
-%D \stoptyping
-%D
-%D and processed by
-%D
-%D \starttyping
-%D \processrecords[file list][tag and/or group list]
-%D \stoptyping
-%D
-%D The actual processing is done by a macro assigned to \type
-%D {command}:
-%D
-%D \starttyping
-%D \setuprecord[class][command=\DoWithRecord]
-%D \stoptyping
-%D
-%D Given that one can ask for a field with
-%D
-%D \starttyping
-%D \getrecordentry{name}
-%D \stoptyping
-%D
-%D such a command can look like:
-%D
-%D \starttyping
-%D \def\DoWithRecord#1%
-%D {\startpacked
-%D \let\\=\quad
-%D name: \getrecordentry{name}~\getrecordentry{family name}\par
-%D address: \getrecordentry{postal address}\par
-%D \stoppacked}
-%D \stoptyping
-%D
-%D The argument passed is the tag. The database can look like:
-%D
-%D \starttyping
-%D \startrecord{hagenj}
-%D \memberofgroup{a,b}
-%D \setrecordentry{naam}{Hans}
-%D \setrecordentry{family name}{Hagen}
-%D \setrecordentry{postal address}{J. Hagen\\Ridderstraat 29\\Hasselt NL}
-%D \stoprecord
-%D
-%D \startrecord{ottenaf}
-%D \memberofgroup{a}
-%D \setrecordentry{name}{Ton}
-%D \setrecordentry{family name}{Otten}
-%D \setrecordentry{postal address}{A.F. Otten\\Prinsengracht 17\\Hasselt NL}
-%D \stoprecord
-%D \stoptyping
-%D
-%D The definition of this database looks like:
-%D
-%D \starttyping
-%D \definerecord[address][command=\DoWithRecord]
-%D
-%D \definerecordentry[address][name]
-%D \definerecordentry[address][family name]
-%D \definerecordentry[address][postal address]
-%D \stoptyping
-%D
-%D The actual processing is now done by (for instance):
-%D
-%D \starttyping
-%D \processrecords[datafile][hagenj]
-%D \processrecords[datafile][hagenj,offenaf]
-%D \processrecords[datafile][all]
-%D \processrecords[datafile][a]
-%D \processrecords[datafile][b]
-%D \stoptyping
-%D
-%D Of course one can reassign the command used to handle the
-%D records in between.
-
-% \??kt ->
-% \??kw ->
-
-\def\??db {@@db}
-\def\c!velden{velden}
-
-%\newevery \everyrecord \EveryRecord
-
-\def\definerecord
- {\dodoubleempty\dodefinerecord}
-
-\def\dodefinerecord[#1][#2]%
- {\getparameters
- [\??db#1]
- [\c!velden=,
- \c!command=\gobbleoneargument,
- #2]}
-
-\def\setuprecord
- {\dodoubleargument\dosetuprecord}
-
-\def\dosetuprecord[#1][#2]%
- {\getparameters[\??db#1][#2]}%
-
-\def\definerecordentry[#1][#2]%
- {\edef\recordentries{\getvalue{\??db#1\c!velden}}%
- \addtocommalist{#2}\recordentries
- \letvalue{\??db#1\c!velden}\recordentries}
-
-%D Watch out: the entries are defined global! While
-%D processing a record, no grouping is applied.
-
-\def\getrecordentry #1{\getvalue {\??db:#1}}
-\def\resetrecordentry #1{\letgvalueempty{\??db:#1}}
-\def\assignrecordentry#1{\setgvalue {\??db:#1}}
-
-\long\def\skiprecord#1\stoprecord
- {\egroup}
-
-\newif\ifrecordok
-
-\newtoks\resetrecordlist
-
-\def\processrecords
- {\dotripleargument\doprocessrecords}
-
-\def\doprocessrecords[#1][#2][#3]%
- {\bgroup
- \ifx\\\undefined\let\\\relax\fi
- \def\docommand##1%
- {\resetrecordentry{##1}%
- \appendtoks\resetrecordentry{##1}\to\resetrecordlist}%
- \processcommacommand[\getvalue{\??db#1\c!velden}]\docommand
- \let\setrecordentry\skiprecord
- \the\resetrecordlist
- \doifelse{#2}\v!all % 't Is nu eenmaal alles
- \recordoktrue
- {\doifelsenothing{#2} % of niets
- \recordoktrue
- \recordokfalse}% % zullen we maar zeggen.
- \ifrecordok
- \let\askedrecords\v!all
- \else
- \makerawcommalist[#2]\askedrecords
- \fi
- \def\checkrecord##1%
- {\rawdoifinsetelse{##1}{\askedrecords}{\recordoktrue}{}}%
- \def\presetrecord##1%
- {\let\setrecordentry\assignrecordentry
- \let\memberofgroup\gobbleoneargument
- \the\resetrecordlist
- \def\stoprecord{\dostoprecord{##1}}}%
- \def\memberofgroup##1%
- {\doifsomething{##1}
- {\rawprocesscommalist[##1]\checkrecord}%
- \ifrecordok
- \presetrecord{##1}%
- \else
- \expandafter\skiprecord
- \fi}%
- \def\startrecord##1%
- {\bgroup
- \ifrecordok
- \presetrecord{##1}%
- \else
- \checkrecord{##1}%
- \ifrecordok
- \presetrecord{##1}%
- \fi
- \fi}%
- \def\dostoprecord##1%
- {\relax
- \egroup
- %\the\everyrecord
- \getvalue{\??db#1\c!command}{##1}}%
- \showmessage\m!databases1\askedrecords
- \def\doprocessrecords##1%
- {\readjobfile{##1}
- {\showmessage\m!databases2{(job)}}
- {\readsysfile{##1}
- {\showmessage\m!databases3{(sys)}}
- {\showmessage\m!databases4{}}}}%
- \processcommalist[#3]\doprocessrecords
- \egroup}
-
-%D While writing the original implementation, I did some
-%D experiments with \type {%} before each entry and changing
-%D the category code of the comment char. Because \TEX\ scans
-%D the line anyway |<|this is needed because the end of line
-%D character can be non standard|>| this is not faster.
-%D
-%D Although this mechanism could have been combined with the
-%D block moving mechanism, the current implementation is
-%D prefered out of speed reasons.
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-newmat.tex b/Master/texmf-dist/tex/context/base/m-newmat.tex
deleted file mode 100644
index 202fec76ff1..00000000000
--- a/Master/texmf-dist/tex/context/base/m-newmat.tex
+++ /dev/null
@@ -1,80 +0,0 @@
-%D \module
-%D [ file=m-newmat,
-%D version=2000.11.16,
-%D title=\CONTEXT\ Math Module,
-%D subtitle=AMS-like math extensions,
-%D author={Taco Hoekwater \& Hans Hagen},
-%D date=\currentdate,
-%D copyright={Taco Hoekwater \& Hans Hagen}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
-%C details.
-
-\unprotect
-
-%D Code has been integrated.
-
-\protect \endinput
-
-%D This module collects macros that \TEX\ users kind of expect
-%D to be available when typesetting math. Most of them
-%D originate in the \AMS\ macro packages. We have taken the
-%D freedom to adapt them to \CONTEXT. This module is derived
-%D from the \type {m-math} module by Taco Hoekwater (partially
-%D derived from AMS math modules) and adapted|/|extended by
-%D Hans Hagen.
-
-%D \macros
-%D {startsubarray,substack,startsmallmatrix}
-%D
-%D [HH] I wonder what these are supposed to do. An example
-%D will be inserted later. Contrary to the original we
-%D support an optional argument between either \type {{}} or
-%D \type {[]}.
-
-\def\startsubarray
- {\doifnextcharelse\bgroup
- \simplestartsubarray{\dosingleempty\complexstartsubarray}}
-
-\def\complexstartsubarray[#1]%
- {\simplestartsubarray{#1}}
-
-\def\simplestartsubarray#1%
- {\vcenter\bgroup
- \baselineskip\fontdimen10 \scriptfont\plustwo
- \advance\baselineskip\fontdimen12 \scriptfont\plustwo
- \lineskip\plusthree\fontdimen8 \scriptfont\plusthree
- \lineskiplimit\lineskip
- \ialign\bgroup\ifx c#1\hfil\fi$\mathsurround\zeropoint\scriptstyle##$\hfil\crcr}
-
-\def\stopsubarray
- {\crcr\egroup
- \egroup}
-
-\def\startsubstack
- {\doifnextcharelse\bgroup
- \simplestartsubstack{\dosingleempty\complexstartsubstack}}
-
-\def\complexstartsubstack[#1]%
- {\simplestartsubstack{#1}}
-
-\def\simplesubstack#1%
- {\startsubarray[c]#1\stopsubarray}
-
-\def\startsmallmatrix
- {\null
- \,%
- \vcenter\bgroup
- \baselineskip6\ex@
- \lineskip1.5\ex@
- \lineskiplimit\lineskip
- \ialign\bgroup\hfil$\mathsurround\zeropoint\scriptstyle##$\hfil&&\thickspace\hfil
- $\mathsurround\zeropoint\scriptstyle##$\hfil\crcr}
-
-\def\stopsmallmatrix
- {\crcr\egroup
- \egroup
- \,}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-streams.tex b/Master/texmf-dist/tex/context/base/m-streams.tex
deleted file mode 100644
index a8589a89c13..00000000000
--- a/Master/texmf-dist/tex/context/base/m-streams.tex
+++ /dev/null
@@ -1,446 +0,0 @@
-%D \module
-%D [ file=m-streams,
-%D version=2006.03.21,
-%D title=\CONTEXT\ Modules,
-%D subtitle=Streams,
-%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 First we implement a simple left||right synchronization
-%D mechanism, which we may perfect and extend over time.
-
-\unprotect
-
-\defineoutputstream [\v!left]
-\defineoutputstream [\v!right]
-
-\definemarknote[\v!left]
-\definemarknote[\v!right]
-
-\startsetups stream:\v!left:bottom
- \flushmarknotes[\v!left]
-\stopsetups
-\startsetups stream:\v!right:bottom
- \flushmarknotes[\v!right]
-\stopsetups
-\startsetups stream:\v!left:reset
- \erasemarknotes[\v!left]
-\stopsetups
-\startsetups stream:\v!right:reset
- \erasemarknotes[\v!right]
-\stopsetups
-
-\def\LeftNote {\setmarknote [\v!left]} % {#1}
-\def\RightNote {\setmarknote [\v!right]} % {#1}
-\def\SwitchToLeft {\enableoutputstream [\v!left]}
-\def\SwitchToRight {\enableoutputstream [\v!right]}
-\def\SwitchToNormal {\enableoutputstream [\s!default]}
-\def\SynchronizeLeftAndRight{\synchronizeoutputstreams[\v!left,\v!right]}
-\def\FlushLeftAndRight {\flushoutputstreampages [\v!left,\v!right]}
-
-\protect
-
-% \topskip \strutheight
-% \splittopskip\strutheight
-
-%D Example of usage:
-%D
-%D \starttyping
-%D \nopenalties \setupinterlinespace[top=height] \setupcolors[state=start]
-%D
-%D \showgrid \showstruts
-%D
-%D \starttext
-%D
-%D \title{Whatever} \page
-%D
-%D \dorecurse {5} {
-%D \let\RecurseLevel\recurselevel
-%D \SwitchToLeft \dorecurse{10}{\dontleavehmode{\tf\RecurseLevel:l \begstrut \input tufte \endstrut \endgraf}}
-%D \SwitchToRight \dorecurse{10}{\dontleavehmode{\sl\RecurseLevel:r \begstrut \input knuth \endstrut \endgraf}}
-%D \SwitchToNormal \SynchronizeLeftAndRight
-%D \SwitchToLeft \dorecurse{10}{\dontleavehmode{\bf\RecurseLevel:l \begstrut \input zapf \endstrut \endgraf}}
-%D \SwitchToRight \dorecurse{10}{\dontleavehmode{\bs\RecurseLevel:r \begstrut \input davis \endstrut \endgraf}}
-%D \SwitchToNormal \SynchronizeLeftAndRight
-%D }
-%D
-%D \FlushLeftAndRight
-%D
-%D \stoptext
-%D \stoptyping
-%D
-%D Another example:
-%D
-%D \starttyping
-%D \nopenalties \setupinterlinespace[top=height] \setupcolors[state=start]
-%D
-%D \showgrid \showstruts
-%D
-%D \starttext
-%D
-%D \SwitchToNormal \FlushLeftAndRight \page
-%D
-%D \def\StartCouple{\page\SwitchToNormal}
-%D \def\StopCouple {\SwitchToNormal \SynchronizeLeftAndRight \FlushLeftAndRight}
-%D
-%D \def\Original {\SwitchToNormal\SynchronizeLeftAndRight\SwitchToLeft}
-%D \def\Translation{\SwitchToRight}
-%D
-%D \StartCouple
-%D \dorecurse{10} {
-%D \Original o: \begstrut \inright{\blackrule}\input tufte \endstrut \LeftNote {tufte} \endgraf
-%D \Translation t: \begstrut \inleft {\blackrule}\input zapf \endstrut \RightNote{zapf} \endgraf
-%D \Original o: \begstrut \inright{\blackrule}\input knuth \endstrut \LeftNote {knuth} \endgraf
-%D \Translation t: \begstrut \inleft {\blackrule}\input davis \endstrut \RightNote{davis} \endgraf
-%D \Original o: \begstrut \inright{\blackrule}\input douglas \endstrut \LeftNote {douglas} \endgraf
-%D \Translation t: \begstrut \inleft {\blackrule}\input bryson \endstrut \RightNote{bryson} \endgraf
-%D }
-%D \StopCouple
-%D \stoptext
-%D \stoptyping
-
-%D Next we implement stream layers.
-
-\unprotect
-
-\def\overloadtextwidth#1%
- {\makeupwidth#1\relax
- \textwidth\makeupwidth
- \hsize\makeupwidth}
-
-\startsetups streamlayer:default:settings
- % set hsize etc, like \overloadtextwidth{12cm}
-\stopsetups
-
-\startsetups streamlayer:default:extras
- % flush goodies, like local floats
-\stopsetups
-
-\startsetups streamlayer:default:place
- \setlayer
- [\currentstreamlayer]
- [\c!preset=\v!left\v!top]
- {\outputstreambox[\currentstreamlayer]}%
-\stopsetups
-
-\startsetups streamlayer:default:copy
- \setlayer
- [\currentstreamlayer]
- [\c!preset=\v!left\v!top]
- {\outputstreamcopy[\currentstreamlayer]}%
-\stopsetups
-
-\startsetups streamlayer:default:reset
- \outputstreambox[\currentstreamlayer]
-\stopsetups
-
-\startsetups streamlayer:default:flush
- \tightlayer[\currentstreamlayer]
-\stopsetups
-
-\def\definestreamlayer
- {\dodoubleempty\dodefinestreamlayer}
-
-\def\dodefinestreamlayer[#1][#2]%
- {\defineoutputstream[#1]%
- \defineoutputstream[main]%
- \definelayer[#1][\c!method=\v!fit,\c!width=\textwidth,#2]}
-
-\def\dostreamsetups#1%
- {\doifsetupselse{streamlayer:\currentstreamlayer:#1}
- {\directsetup{streamlayer:\currentstreamlayer:#1}}
- {\directsetup{streamlayer:\s!default:#1}}}
-
-\def\startstreamlayer[#1]%
- {\bgroup
-% \def\startstreamlayer[##1]{\bgroup\let\stopstreamlayer\egroup}%
- \edef\currentstreamlayer{#1}%
- \enableoutputstream[main]%
- \synchronizeoutput
- \enableoutputstream[\currentstreamlayer]%
- \bgroup
- \dostreamsetups{settings}}
-
-\def\stopstreamlayer
- {\endgraf
- \egroup
- \disableoutputstream % \enableoutputstream[\s!default]%
- \outputstreambox[main]%
-% \dostreamsetups{place}%
-% \dostreamsetups{extras}%
-% \dostreamsetups{flush}%
- \egroup}
-
-\def\preparestreamlayer{\dosingleempty\dopreparestreamlayer}
-\def\flushstreamlayer {\dosingleempty\doflushstreamlayer }
-\def\placestreamlayer {\dosingleempty\doplacestreamlayer }
-
-\def\dopreparestreamlayer[#1]%
- {\bgroup
- \edef\currentstreamlayer{\iffirstargument#1\else\currentstreamlayer\fi}%
- \dostreamsetups{place}%
- \dostreamsetups{extras}%
-% \dostreamsetups{flush}%
- \egroup}
-
-\def\doflushstreamlayer[#1]%
- {\bgroup
- \edef\currentstreamlayer{\iffirstargument#1\else\currentstreamlayer\fi}%
- \dostreamsetups{flush}%
- \egroup}
-
-\def\doplacestreamlayer[#1]%
- {\preparestreamlayer[#1]%
- \flushstreamlayer[#1]}
-
-\protect
-
-%D Usage:
-
-%D \starttyping
-%D \setupinterlinespace[top=height]
-%D
-%D \setupcolors[state=start]
-%D
-%D \definestreamlayer[block]
-%D
-%D \definemeasure[localtextwidth] [\dimexpr.7\textwidth\relax]
-%D \definemeasure[localfloatwidth][\dimexpr.3\textwidth-2\bodyfontsize\relax]
-%D
-%D \startsetups streamlayer:block:settings
-%D \hsize=\measure{localtextwidth}
-%D \setupfloat[figure][maxwidth=\measure{localfloatwidth}]
-%D \stopsetups
-%D
-%D \startsetups streamlayer:block:extras
-%D \setuplocalfloats
-%D [before=\blank,
-%D after=\blank,
-%D inbetween=\blank]
-%D \setbox\scratchbox\vbox{\hsize\measure{localfloatwidth}\getlocalfloats}
-%D \ifdim\ht\scratchbox>\thelayerheight\currentstreamlayer\relax
-%D % more float than text
-%D \setlayerframed
-%D [\currentstreamlayer]
-%D [preset=righttop]
-%D [frame=off,
-%D offset=overlay]
-%D {\box\scratchbox}
-%D \else
-%D % more text than float
-%D \setuplocalfloats
-%D [before=\vfill,
-%D after=\removedepth\vfill,
-%D inbetween=\removedepth\vfill]
-%D \setlayerframed
-%D [\currentstreamlayer]
-%D [preset=righttop]
-%D [frame=off,
-%D offset=overlay]
-%D {\vbox to \thelayerheight\currentstreamlayer {\hsize\measure{localfloatwidth}\getlocalfloats}}
-%D \fi
-%D \resetlocalfloats
-%D \stopsetups
-%D
-%D \startsetups streamlayer:block:place
-%D \setlayerframed
-%D [\currentstreamlayer]
-%D [preset=lefttop]
-%D [frame=off,
-%D offset=overlay]
-%D {\outputstreambox[\currentstreamlayer]}%
-%D \stopsetups
-%D
-%D \startsetups streamlayer:block:flush
-%D \framed
-%D [offset=overlay,
-%D frame=off,
-%D background=color,
-%D backgroundcolor=red]
-%D {\tightlayer[\currentstreamlayer]}
-%D \stopsetups
-%D
-%D \setupbodyfont[small]
-%D
-%D \starttext
-%D
-%D \dorecurse {10} {
-%D \startstreamlayer[block]
-%D \title{Sample \recurselevel}
-%D \input tufte \endgraf
-%D \placefigure[local]{}{}
-%D \placefigure[local]{}{}
-%D \ifodd\recurselevel\relax \placefigure[local]{}{} \fi
-%D \startitemize[columns]
-%D \item xxx
-%D \item xxx
-%D \item xxx
-%D \item xxx
-%D \item xxx
-%D \stopitemize
-%D \stopstreamlayer
-%D \placestreamlayer[block]
-%D }
-%D
-%D \dorecurse {10} {
-%D \startstreamlayer[block]
-%D \title{Sample \recurselevel}
-%D \startcolumns
-%D \input tufte
-%D \stopcolumns
-%D \stopstreamlayer
-%D \placestreamlayer[block]
-%D }
-%D
-%D \stoptext
-%D \stoptyping
-
-\def\starttextstreamlayer
- {\startstreamlayer}
-
-\def\stoptextstreamlayer
- {\endgraf
- % maybe depth if no proper depth and no skip
- \removelastskip
- \stopstreamlayer}
-
-\def\placetextstreamlayer{\placestreamlayer}
-
-%D \starttyping
-%D \definestreamlayer[whatever][width=12cm]
-%D
-%D \startstreamlayer[whatever]
-%D \startitemize[columns,two][after=]
-%D \item one
-%D \item two
-%D \item three
-%D \item four
-%D \stopitemize
-%D \stopstreamlayer
-%D
-%D \framed[strut=no,align=normal]{\placestreamlayer[whatever]\obeydepth}
-%D
-%D \starttextstreamlayer[whatever]
-%D \startitemize[columns,two]
-%D \item one
-%D \item two
-%D \item three
-%D \item four
-%D \stopitemize
-%D \stoptextstreamlayer
-%D
-%D \framed[strut=no]{\placetextstreamlayer[whatever]}
-%D \stoptyping
-
-\endinput
-
-\setupinterlinespace[top=height]
-
-\setupcolors[state=start]
-
-\definestreamlayer[block]
-
-\definemeasure[localtextwidth] [\dimexpr.7\textwidth\relax]
-\definemeasure[localfloatwidth][\dimexpr.3\textwidth-2\bodyfontsize\relax]
-
-\startsetups streamlayer:block:settings
- \hsize=\measure{localtextwidth}
- \setupfloat[figure][maxwidth=\measure{localfloatwidth}]
-\stopsetups
-
-\startsetups streamlayer:block:extras
- \setuplocalfloats
- [before=\whitespace\blank,
- after=\whitespace\blank,
- inbetween=\whitespace\blank]
- \setbox\scratchbox\vbox{\hsize\measure{localfloatwidth}\getlocalfloats}
- \ifdim\ht\scratchbox>\thelayerheight\currentstreamlayer\relax
- % more float than text
- \setlayerframed
- [\currentstreamlayer]
- [preset=righttop]
- [frame=off,
- offset=overlay]
- {\box\scratchbox}
- \else
- % more text than float
- \setuplocalfloats
- [before=\vfill,
- after=\removedepth\vfill,
- inbetween=\removedepth\vfill]
- \setlayerframed
- [\currentstreamlayer]
- [preset=righttop]
- [frame=off,
- offset=overlay]
- {\vbox to \thelayerheight\currentstreamlayer {\hsize\measure{localfloatwidth}\getlocalfloats}}
- \fi
- \resetlocalfloats
-\stopsetups
-
-\startsetups streamlayer:block:place
- \setlayerframed
- [\currentstreamlayer]
- [preset=lefttop]
- [frame=off,
- offset=overlay]
- {\outputstreambox[\currentstreamlayer]}%
-\stopsetups
-
-\startsetups streamlayer:block:flush
- \framed
- [offset=overlay,
- frame=off,
- background=color,
- backgroundcolor=red]
- {\tightlayer[\currentstreamlayer]}
-\stopsetups
-
-\setupbodyfont[small]
-
-\starttext
-
-% \definestreamlayer[block]
-%
-% \startstreamlayer[block]
-% \title{Sample \recurselevel}
-% \startcolumns
-% \dorecurse{4}{\input tufte \par}
-% \stopcolumns
-% \stopstreamlayer
-% \placestreamlayer[block]
-
-\dorecurse {10} {
- \startstreamlayer[block]
- \title{Sample \recurselevel}
- \input tufte \endgraf
- \placefigure[local]{}{}
- \placefigure[local]{}{}
- \ifodd\recurselevel\relax \placefigure[local]{}{} \fi
- \startitemize[columns]
- \item xxx
- \item xxx
- \item xxx
- \item xxx
- \item xxx
- \stopitemize
- \stopstreamlayer
- \placestreamlayer[block]
-}
-
-\dorecurse {10} {
- \startstreamlayer[block]
- \title{Sample \recurselevel}
- \startcolumns
- \input tufte
- \stopcolumns
- \stopstreamlayer
- \placestreamlayer[block]
-}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/math-noa.lua b/Master/texmf-dist/tex/context/base/math-noa.lua
deleted file mode 100644
index cdbbe36c377..00000000000
--- a/Master/texmf-dist/tex/context/base/math-noa.lua
+++ /dev/null
@@ -1,1304 +0,0 @@
-if not modules then modules = { } end modules ['math-noa'] = {
- 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"
-}
-
--- beware: this is experimental code and there will be a more
--- generic (attribute value driven) interface too but for the
--- moment this is ok
---
--- 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
-
-local utfchar, utfbyte = utf.char, utf.byte
-local formatters = string.formatters
-local div = math.div
-
-local fonts, nodes, node, mathematics = fonts, nodes, node, mathematics
-
-local otf = fonts.handlers.otf
-local otffeatures = fonts.constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
-
-local privateattribute = attributes.private
-local registertracker = trackers.register
-local registerdirective = directives.register
-local logreporter = logs.reporter
-
-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_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_families = false registertracker("math.families", function(v) trace_families = 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_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_families = logreporter("mathematics","families")
-
-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 getfield = nuts.getfield
-local setfield = nuts.setfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-local getattr = nuts.getattr
-local setattr = nuts.setattr
-
-local insert_node_after = nuts.insert_after
-local insert_node_before = nuts.insert_before
-local free_node = nuts.free
-local new_node = nuts.new -- todo: pool: math_noad math_sub
-local copy_node = nuts.copy
-
-local mlist_to_hlist = nodes.mlist_to_hlist
-
-local font_of_family = node.family_font
-
-local new_kern = nodepool.kern
-local new_rule = nodepool.rule
-
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
-local fontcharacters = fonthashes.characters
-local fontproperties = fonthashes.properties
-local fontitalics = fonthashes.italics
-local fontemwidths = fonthashes.emwidths
-local fontexheights = fonthashes.exheights
-
-local variables = interfaces.variables
-local texsetattribute = tex.setattribute
-local texgetattribute = tex.getattribute
-local unsetvalue = attributes.unsetvalue
-
-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 nodecodes = nodes.nodecodes
-local noadcodes = nodes.noadcodes
-
-local noad_ord = noadcodes.ord
-local noad_rel = noadcodes.rel
-local noad_punct = noadcodes.punct
-local noad_opdisplaylimits= noadcodes.opdisplaylimits
-local noad_oplimits = noadcodes.oplimits
-local noad_opnolimits = noadcodes.opnolimits
-
-local math_noad = nodecodes.noad -- attr nucleus sub sup
-local math_accent = nodecodes.accent -- attr nucleus sub sup accent
-local math_radical = nodecodes.radical -- attr nucleus sub sup left degree
-local math_fraction = nodecodes.fraction -- attr nucleus sub sup left right
-local math_box = nodecodes.subbox -- attr list
-local math_sub = nodecodes.submlist -- attr list
-local math_char = nodecodes.mathchar -- attr fam char
-local math_textchar = nodecodes.mathtextchar -- attr fam char
-local math_delim = nodecodes.delim -- attr small_fam small_char large_fam large_char
-local math_style = nodecodes.style -- attr style
-local math_choice = nodecodes.choice -- attr display text script scriptscript
-local math_fence = nodecodes.fence -- attr subtype
-
-local hlist_code = nodecodes.hlist
-local glyph_code = nodecodes.glyph
-
-local left_fence_code = 1
-local right_fence_code = 3
-
-local function process(start,what,n,parent)
- if n then n = n + 1 else n = 0 end
- local prev = nil
- while start do
- local id = getid(start)
- if trace_processing then
- if id == math_noad then
- report_processing("%w%S, class %a",n*2,nutstring(start),noadcodes[getsubtype(start)])
- elseif id == math_char then
- local char = getchar(start)
- local fam = getfield(start,"fam")
- local font = font_of_family(fam)
- 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 = proc(start,what,n,parent) -- prev is bugged: or getprev(start)
- if newstart then
- start = newstart
- -- report_processing("stop processing (new start)")
- else
- -- report_processing("stop processing")
- end
- elseif id == math_char or id == math_textchar or id == math_delim then
- break
- elseif id == math_noad then
-if prev then
- -- we have no proper prev in math nodes yet
- setfield(start,"prev",prev)
-end
-
- local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sub") if noad then process(noad,what,n,start) end -- list
- elseif id == math_box or id == math_sub then
- local noad = getfield(start,"list") if noad then process(noad,what,n,start) end -- list (not getlist !)
- elseif id == math_fraction 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 == math_fence then
- local noad = getfield(start,"delim") if noad then process(noad,what,n,start) end -- delimiter
- elseif id == math_radical then
- local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sub") 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,"degree") if noad then process(noad,what,n,start) end -- list
- elseif id == math_accent then
- local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
- noad = getfield(start,"sub") if noad then process(noad,what,n,start) end -- list
- 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 == math_style then
- -- has a next
- else
- -- glue, penalty, etc
- end
-prev = start
- start = getnext(start)
- end
-end
-
-local function processnoads(head,actions,banner)
- if trace_processing then
- report_processing("start %a",banner)
- process(tonut(head),actions)
- report_processing("stop %a",banner)
- else
- process(tonut(head),actions)
- end
-end
-
-noads.process = processnoads
-
---
-
-local unknowns = { }
-local checked = { } -- simple case
-local tracked = false trackers.register("fonts.missing", function(v) tracked = v end)
-local cached = table.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
-
--- experiment (when not present fall back to fam 0) -- needs documentation
-
--- 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
-
-local families = { }
-local a_mathfamily = privateattribute("mathfamily")
-local boldmap = mathematics.boldmap
-
-local familymap = { [0] =
- "regular",
- "regular",
- "regular",
- "bold",
- "bold",
- "bold",
- "pseudobold",
- "pseudobold",
- "pseudobold",
-}
-
-families[math_char] = function(pointer)
- if getfield(pointer,"fam") == 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
- setfield(pointer,"fam",newa)
- elseif not fontcharacters[font_of_family(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
- setfield(pointer,"fam",newa-3)
- end
- else
- setattr(pointer,a_exportstatus,char)
- setfield(pointer,"char",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
- setfield(pointer,"fam",newa)
- end
- else
- local char = getchar(pointer)
- if not fontcharacters[font_of_family(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
- setfield(pointer,"fam",a)
- end
- end
- end
- end
-end
-
-families[math_delim] = 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[font_of_family(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[font_of_family(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
-
-families[math_textchar] = families[math_char]
-
-function handlers.families(head,style,penalties)
- processnoads(head,families,"families")
- return true
-end
-
--- character remapping
-
-local a_mathalphabet = privateattribute("mathalphabet")
-local a_mathgreek = privateattribute("mathgreek")
-
-processors.relocate = { }
-
-local function report_remap(tag,id,old,new,extra)
- report_remapping("remapping %s in font %s from %C to %C%s",tag,id,old,new,extra)
-end
-
-local remapalphabets = mathematics.remapalphabets
-local fallbackstyleattr = mathematics.fallbackstyleattr
-local setnodecolor = nodes.tracers.colors.set
-
-local function checked(pointer)
- local char = getchar(pointer)
- local fam = getfield(pointer,"fam")
- local id = font_of_family(fam)
- local tc = fontcharacters[id]
- if not tc[char] then
- local specials = characters.data[char].specials
- if specials and (specials[1] == "char" or specials[1] == "font") then
- newchar = specials[#specials]
- if trace_remapping then
- report_remap("fallback",id,char,newchar)
- end
- if trace_analyzing then
- setnodecolor(pointer,"font:isol")
- end
- setattr(pointer,a_exportstatus,char) -- testcase: exponentiale
- setfield(pointer,"char",newchar)
- return true
- end
- end
-end
-
-processors.relocate[math_char] = function(pointer)
- local g = getattr(pointer,a_mathgreek) or 0
- local a = getattr(pointer,a_mathalphabet) or 0
- local char = getchar(pointer)
- local fam = getfield(pointer,"fam")
- local font = font_of_family(fam)
- local characters = fontcharacters[font]
- if a > 0 or g > 0 then
- if a > 0 then
- setattr(pointer,a_mathgreek,0)
- end
- if g > 0 then
- setattr(pointer,a_mathalphabet,0)
- end
- local newchar = remapalphabets(char,a,g)
- if newchar then
- if characters[newchar] then
- if trace_remapping then
- report_remap("char",font,char,newchar)
- end
- if trace_analyzing then
- setnodecolor(pointer,"font:isol")
- end
- setfield(pointer,"char",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
- setfield(pointer,"char",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
- end
- end
- if not characters[char] then
- setfield(pointer,"char",errorchar(font,char))
- end
- if trace_analyzing then
- setnodecolor(pointer,"font:medi")
- end
- if check_coverage then
- return checked(pointer)
- end
-end
-
-processors.relocate[math_textchar] = function(pointer)
- if trace_analyzing then
- setnodecolor(pointer,"font:init")
- end
-end
-
-processors.relocate[math_delim] = function(pointer)
- if trace_analyzing then
- setnodecolor(pointer,"font:fina")
- end
-end
-
-function handlers.relocate(head,style,penalties)
- processnoads(head,processors.relocate,"relocate")
- return true
-end
-
--- rendering (beware, not exported)
-
-processors.render = { }
-
-local rendersets = mathematics.renderings.numbers or { } -- store
-
-processors.render[math_char] = 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 fam = getfield(pointer,"fam")
- local font = font_of_family(fam)
- local characters = fontcharacters[font]
- if characters and characters[newchar] then
- setfield(pointer,"char",newchar)
- setattr(pointer,a_exportstatus,char)
- end
- end
- end
- end
-end
-
-function handlers.render(head,style,penalties)
- processnoads(head,processors.render,"render")
- return true
-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
-
-local mathsize = privateattribute("mathsize")
-
-local resize = { } processors.resize = resize
-
-resize[math_fence] = function(pointer)
- local subtype = getsubtype(pointer)
- if subtype == left_fence_code or subtype == right_fence_code then
- local a = getattr(pointer,mathsize)
- if a and a > 0 then
- local method, size = div(a,100), a % 100
- setattr(pointer,mathsize,0)
- local delimiter = getfield(pointer,"delim")
- local chr = getfield(delimiter,"small_char")
- if chr > 0 then
- local fam = getfield(delimiter,"small_fam")
- local id = font_of_family(fam)
- if id > 0 then
- setfield(delimiter,"small_char",mathematics.big(fontdata[id],chr,size,method))
- end
- end
- end
- end
-end
-
-function handlers.resize(head,style,penalties)
- processnoads(head,resize,"resize")
- return true
-end
-
--- normalize scripts
-
-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) == math_noad do
- local nextnucleus = getfield(next,"nucleus")
- if nextnucleus and getid(nextnucleus) == math_char and not getfield(next,"sub") and not getfield(next,"sup") 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)
- setfield(nextnucleus,"char",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)
- setfield(nextnucleus,"char",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
- setfield(pointer,"sup",getfield(start_super,"nucleus"))
- else
- local list = new_node(math_sub) -- todo attr
- setfield(list,"list",start_super)
- setfield(pointer,"sup",list)
- end
- if mode == "super" then
- setfield(pointer,"next",getnext(stop_super))
- end
- setfield(stop_super,"next",nil)
- end
- if start_sub then
- if start_sub == stop_sub then
- setfield(pointer,"sub",getfield(start_sub,"nucleus"))
- else
- local list = new_node(math_sub) -- todo attr
- setfield(list,"list",start_sub)
- setfield(pointer,"sub",list)
- end
- if mode == "sub" then
- setfield(pointer,"next",getnext(stop_sub))
- end
- setfield(stop_sub,"next",nil)
- end
- -- we could return stop
-end
-
-unscript[math_char] = replace -- not noads as we need to recurse
-
-function handlers.unscript(head,style,penalties)
- processnoads(head,unscript,"unscript")
--- processnoads(head,checkers,"checkers")
- return true
-end
-
-local function collected(list)
- if list and next(list) then
- local n, t = 0, { }
- for k, v in table.sortedpairs(list) do
- n = n + v
- t[#t+1] = 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)
-
--- math alternates: (in xits lgf: $ABC$ $\cal ABC$ $\mathalternate{cal}\cal ABC$)
--- math alternates: (in lucidanova lgf: $ABC \mathalternate{italic} ABC$)
-
--- todo: set alternate for specific symbols
-
-local function initializemathalternates(tfmdata)
- local goodies = tfmdata.goodies
- if goodies then
- local shared = tfmdata.shared
- 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
- local lastattribute, attributes = 0, { }
- for k, v in next, alternates do
- lastattribute = lastattribute + 1
- v.attribute = lastattribute
- attributes[lastattribute] = v
- end
- shared.mathalternates = alternates -- to be checked if shared is ok here
- shared.mathalternatesattributes = attributes -- to be checked if shared is ok here
- return
- end
- end
- end
-end
-
-registerotffeature {
- name = "mathalternates",
- description = "additional math alternative shapes",
- initializers = {
- base = initializemathalternates,
- node = initializemathalternates,
- }
-}
-
-local getalternate = otf.getalternate
-
-local a_mathalternate = privateattribute("mathalternate")
-
-local alternate = { } -- processors.alternate = alternate
-
-function mathematics.setalternate(fam,tag)
- local id = font_of_family(fam)
- local tfmdata = fontdata[id]
- local mathalternates = tfmdata.shared and tfmdata.shared.mathalternates
- if mathalternates then
- local m = mathalternates[tag]
- texsetattribute(a_mathalternate,m and m.attribute or unsetvalue)
- end
-end
-
-alternate[math_char] = function(pointer)
- local a = getattr(pointer,a_mathalternate)
- if a and a > 0 then
- setattr(pointer,a_mathalternate,0)
- local tfmdata = fontdata[font_of_family(getfield(pointer,"fam"))] -- we can also have a famdata
- local mathalternatesattributes = tfmdata.shared.mathalternatesattributes
- if mathalternatesattributes then
- local what = mathalternatesattributes[a]
- local alt = getalternate(tfmdata,getchar(pointer),what.feature,what.value)
- if alt then
- if trace_alternates then
- report_alternates("alternate %a, value %a, replacing glyph %U by glyph %U",
- tostring(what.feature),tostring(what.value),getchar(pointer),alt)
- end
- setfield(pointer,"char",alt)
- end
- end
- end
-end
-
-function handlers.check(head,style,penalties)
- processnoads(head,alternate,"check")
- return true
-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 a mess. There are all kind of assumptions based on
--- old fonts and new font. 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 mxed math
--- and text.
-
-local a_mathitalics = privateattribute("mathitalics")
-
-local italics = { }
-local default_factor = 1/20
-
-local function getcorrection(method,font,char) -- -- or character.italic -- (this one is for tex)
-
- local correction, fromvisual
-
- if method == 1 then
- -- only font data triggered by fontitalics
- local italics = fontitalics[font]
- if italics then
- local character = fontcharacters[font][char]
- if character then
- correction = character.italic_correction
- if correction and correction ~= 0 then
- return correction, false
- end
- end
- end
- elseif method == 2 then
- -- only font data triggered by fontdata
- local character = fontcharacters[font][char]
- if character then
- correction = character.italic_correction
- if correction and correction ~= 0 then
- return correction, false
- end
- end
- elseif method == 3 then
- -- only quad based by selective
- local visual = chardata[char].visual
- if not visual then
- -- skip
- elseif visual == "it" or visual == "bi" then
- correction = fontproperties[font].mathitalic_defaultvalue or default_factor*fontemwidths[font]
- if correction and correction ~= 0 then
- return correction, true
- end
- end
- elseif method == 4 then
- -- combination of 1 and 3
- local italics = fontitalics[font]
- if italics then
- local character = fontcharacters[font][char]
- if character then
- correction = character.italic_correction
- if correction and correction ~= 0 then
- return correction, false
- end
- end
- end
- if not correction then
- local visual = chardata[char].visual
- if not visual then
- -- skip
- elseif visual == "it" or visual == "bi" then
- correction = fontproperties[font].mathitalic_defaultvalue or default_factor*fontemwidths[font]
- if correction and correction ~= 0 then
- return correction, true
- end
- end
- end
- end
-
-end
-
-local setcolor = nodes.tracers.colors.set
-local resetcolor = nodes.tracers.colors.reset
-local italic_kern = new_kern
-local c_positive_d = "trace:db"
-local c_negative_d = "trace:dr"
-
-local function insert_kern(current,kern)
- local sub = new_node(math_sub) -- todo: pool
- local noad = new_node(math_noad) -- todo: pool
- setfield(sub,"list",kern)
- setfield(kern,"next",noad)
- setfield(noad,"nucleus",current)
- return sub
-end
-
-registertracker("math.italics.visualize", function(v)
- if v then
- italic_kern = function(k,font)
- local ex = 1.5 * fontexheights[font]
- if k > 0 then
- return setcolor(new_rule(k,ex,ex),c_positive_d)
- else
- -- influences un*
- return old_kern(k) .. setcolor(new_rule(-k,ex,ex),c_negative_d) .. old_kern(k)
- end
- end
- else
- italic_kern = new_kern
- end
-end)
-
-italics[math_char] = function(pointer,what,n,parent)
- local method = getattr(pointer,a_mathitalics)
- if method and method > 0 then
- local char = getchar(pointer)
- local font = font_of_family(getfield(pointer,"fam")) -- todo: table
- local correction, visual = getcorrection(method,font,char)
- if correction then
- local pid = getid(parent)
- local sub, sup
- if pid == math_noad then
- sup = getfield(parent,"sup")
- sub = getfield(parent,"sub")
- end
- if sup or sub then
- local subtype = getsubtype(parent)
- if subtype == noad_oplimits then
- if sup then
- setfield(parent,"sup",insert_kern(sup,italic_kern(correction,font)))
- if trace_italics then
- report_italics("method %a, adding %p italic correction for upper limit of %C",method,correction,char)
- end
- end
- if sub then
- local correction = - correction
- setfield(parent,"sub",insert_kern(sub,italic_kern(correction,font)))
- if trace_italics then
- report_italics("method %a, adding %p italic correction for lower limit of %C",method,correction,char)
- end
- end
- elseif sup then
- if pointer ~= sub then
- setfield(parent,"sup",insert_kern(sup,italic_kern(correction,font)))
- if trace_italics then
- report_italics("method %a, adding %p italic correction before superscript after %C",method,correction,char)
- end
- else
- -- otherwise we inject twice
- end
- end
- else
- 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, adding %p italic correction between %C and end math",method,correctio,char)
- end
- insert_node_after(parent,parent,italic_kern(correction,font))
- end
- elseif getid(next_noad) == math_noad then
- local next_subtype = getsubtype(next_noad)
- if next_subtype == noad_punct or next_subtype == noad_ord then
- local next_nucleus = getfield(next_noad,"nucleus")
- if getid(next_nucleus) == math_char then
- local next_char = getchar(next_nucleus)
- local next_data = chardata[next_char]
- local visual = next_data.visual
- if visual == "it" or visual == "bi" then
- -- if trace_italics then
- -- report_italics("method %a, skipping %p italic correction between italic %C and italic %C",method,correction,char,next_char)
- -- end
- else
- local category = next_data.category
- if category == "nd" or category == "ll" or category == "lu" then
- if trace_italics then
- report_italics("method %a, adding %p italic correction between italic %C and non italic %C",method,correction,char,next_char)
- end
- insert_node_after(parent,parent,italic_kern(correction,font))
- -- elseif next_data.height > (fontexheights[font]/2) then
- -- if trace_italics then
- -- report_italics("method %a, adding %p italic correction between %C and ascending %C",method,correction,char,next_char)
- -- end
- -- insert_node_after(parent,parent,italic_kern(correction,font))
- -- elseif trace_italics then
- -- -- report_italics("method %a, skipping %p italic correction between %C and %C",method,correction,char,next_char)
- end
- end
- end
- end
- end
- end
- end
- end
-end
-
-function handlers.italics(head,style,penalties)
- processnoads(head,italics,"italics")
- return true
-end
-
-local enable
-
-enable = function()
- tasks.enableaction("math", "noads.handlers.italics")
- if trace_italics then
- report_italics("enabling math italics")
- end
- enable = false
-end
-
--- best do this only on math mode (less overhead)
-
-function mathematics.setitalics(n)
- if enable then
- enable()
- end
- if n == variables.reset then
- texsetattribute(a_mathitalics,unsetvalue)
- else
- texsetattribute(a_mathitalics,tonumber(n) or unsetvalue)
- end
-end
-
-function mathematics.resetitalics()
- texsetattribute(a_mathitalics,unsetvalue)
-end
-
--- primes and such
-
-local collapse = { } processors.collapse = collapse
-
-local mathpairs = characters.mathpairs
-
-mathpairs[0x2032] = { [0x2032] = 0x2033, [0x2033] = 0x2034, [0x2034] = 0x2057 } -- (prime,prime) (prime,doubleprime) (prime,tripleprime)
-mathpairs[0x2033] = { [0x2032] = 0x2034, [0x2033] = 0x2057 } -- (doubleprime,prime) (doubleprime,doubleprime)
-mathpairs[0x2034] = { [0x2032] = 0x2057 } -- (tripleprime,prime)
-
-mathpairs[0x2035] = { [0x2035] = 0x2036, [0x2036] = 0x2037 } -- (reversedprime,reversedprime) (reversedprime,doublereversedprime)
-mathpairs[0x2036] = { [0x2035] = 0x2037 } -- (doublereversedprime,reversedprime)
-
-mathpairs[0x222B] = { [0x222B] = 0x222C, [0x222C] = 0x222D }
-mathpairs[0x222C] = { [0x222B] = 0x222D }
-
-mathpairs[0x007C] = { [0x007C] = 0x2016, [0x2016] = 0x2980 } -- bar+bar=double bar+double=triple
-mathpairs[0x2016] = { [0x007C] = 0x2980 } -- double+bar=triple
-
-local movesub = {
- -- primes
- [0x2032] = 0xFE932,
- [0x2033] = 0xFE933,
- [0x2034] = 0xFE934,
- [0x2057] = 0xFE957,
- -- reverse primes
- [0x2035] = 0xFE935,
- [0x2036] = 0xFE936,
- [0x2037] = 0xFE937,
-}
-
-local validpair = {
- [noad_rel] = true,
- [noad_ord] = true,
- [noad_opdisplaylimits] = true,
- [noad_oplimits] = true,
- [noad_opnolimits] = true,
-}
-
-local function movesubscript(parent,current_nucleus,current_char)
- local prev = getfield(parent,"prev")
- if prev and getid(prev) == math_noad then
- if not getfield(prev,"sup") and not getfield(prev,"sub") then
- -- {f} {'}_n => f_n^'
- setfield(current_nucleus,"char",movesub[current_char or getchar(current_nucleus)])
- local nucleus = getfield(parent,"nucleus")
- local sub = getfield(parent,"sub")
- local sup = getfield(parent,"sup")
- setfield(prev,"sup",nucleus)
- setfield(prev,"sub",sub)
- local dummy = copy_node(nucleus)
- setfield(dummy,"char",0)
- setfield(parent,"nucleus",dummy)
- setfield(parent,"sub",nil)
- if trace_collapsing then
- report_collapsing("fixing subscript")
- end
- elseif not getfield(prev,"sup") then
- -- {f} {'}_n => f_n^'
- setfield(current_nucleus,"char",movesub[current_char or getchar(current_nucleus)])
- local nucleus = getfield(parent,"nucleus")
- local sup = getfield(parent,"sup")
- setfield(prev,"sup",nucleus)
- local dummy = copy_node(nucleus)
- setfield(dummy,"char",0)
- setfield(parent,"nucleus",dummy)
- if trace_collapsing then
- report_collapsing("fixing subscript")
- end
- end
- end
-end
-
-local function collapsepair(pointer,what,n,parent,nested) -- todo: switch to turn in on and off
- if parent then
- if validpair[getsubtype(parent)] then
- local current_nucleus = getfield(parent,"nucleus")
- if getid(current_nucleus) == math_char then
- local current_char = getchar(current_nucleus)
- if not getfield(parent,"sub") and not getfield(parent,"sup") then
- local mathpair = mathpairs[current_char]
- if mathpair then
- local next_noad = getnext(parent)
- if next_noad and getid(next_noad) == math_noad then
- if validpair[getsubtype(next_noad)] then
- local next_nucleus = getfield(next_noad,"nucleus")
- local next_char = getchar(next_nucleus)
- if getid(next_nucleus) == math_char then
- local newchar = mathpair[next_char]
- if newchar then
- local fam = getfield(current_nucleus,"fam")
- local id = font_of_family(fam)
- local characters = fontcharacters[id]
- if characters and characters[newchar] then
- if trace_collapsing then
- report_collapsing("%U + %U => %U",current_char,next_char,newchar)
- end
- setfield(current_nucleus,"char",newchar)
- local next_next_noad = getnext(next_noad)
- if next_next_noad then
- setfield(parent,"next",next_next_noad)
- setfield(next_next_noad,"prev",parent)
- else
- setfield(parent,"next",nil)
- end
- setfield(parent,"sup",getfield(next_noad,"sup"))
- setfield(parent,"sub",getfield(next_noad,"sub"))
- setfield(next_noad,"sup",nil)
- setfield(next_noad,"sub",nil)
- free_node(next_noad)
- collapsepair(pointer,what,n,parent,true)
- -- if not nested and movesub[current_char] then
- -- movesubscript(parent,current_nucleus,current_char)
- -- end
- end
- elseif not nested and movesub[current_char] then
- movesubscript(parent,current_nucleus,current_char)
- end
- end
- end
- elseif not nested and movesub[current_char] then
- movesubscript(parent,current_nucleus,current_char)
- end
- elseif not nested and movesub[current_char] then
- movesubscript(parent,current_nucleus,current_char)
- end
- elseif not nested and movesub[current_char] then
- movesubscript(parent,current_nucleus,current_char)
- end
- end
- end
- end
-end
-
-collapse[math_char] = collapsepair
-
-function noads.handlers.collapse(head,style,penalties)
- processnoads(head,collapse,"collapse")
- return true
-end
-
--- variants
-
-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[math_char] = 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) == math_noad then
- local nucleus = getfield(next,"nucleus")
- if nucleus and getid(nucleus) == math_char and getchar(nucleus) == selector then
- local variant
- local tfmdata = fontdata[font_of_family(getfield(pointer,"fam"))] -- we can also have a famdata
- local mathvariants = tfmdata.resources.variants -- and variantdata
- if mathvariants then
- mathvariants = mathvariants[selector]
- if mathvariants then
- variant = mathvariants[char]
- end
- end
- if variant then
- setfield(pointer,"char",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
- setfield(next,"prev",pointer)
- setfield(parent,"next",getnext(next))
- free_node(next)
- end
- end
- end
-end
-
-function handlers.variants(head,style,penalties)
- processnoads(head,variants,"unicode variant")
- return true
-end
-
--- for manuals
-
-local classes = { }
-
-local colors = {
- [noadcodes.rel] = "trace:dr",
- [noadcodes.ord] = "trace:db",
- [noadcodes.bin] = "trace:dg",
- [noadcodes.open] = "trace:dm",
- [noadcodes.close] = "trace:dm",
- [noadcodes.punct] = "trace:dc",
- -- [noadcodes.opdisplaylimits] = "",
- -- [noadcodes.oplimits] = "",
- -- [noadcodes.opnolimits] = "",
- -- [noadcodes.inner = "",
- -- [noadcodes.under = "",
- -- [noadcodes.over = "",
- -- [noadcodes.vcenter = "",
-}
-
-classes[math_char] = 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
-end
-
-registertracker("math.classes",function(v) tasks.setaction("math","noads.handlers.classes",v) end)
-
--- just for me
-
-function handlers.showtree(head,style,penalties)
- inspect(nodes.totree(head))
-end
-
-registertracker("math.showtree",function(v) tasks.setaction("math","noads.handlers.showtree",v) end)
-
--- the normal builder
-
-function builders.kernel.mlist_to_hlist(head,style,penalties)
- return mlist_to_hlist(head,style,penalties), true
-end
-
--- function builders.kernel.mlist_to_hlist(head,style,penalties)
--- print("!!!!!!! BEFORE",penalties)
--- for n in node.traverse(head) do print(n) end
--- print("!!!!!!!")
--- head = mlist_to_hlist(head,style,penalties)
--- print("!!!!!!! AFTER")
--- for n in node.traverse(head) do print(n) end
--- print("!!!!!!!")
--- return head, true
--- end
-
-tasks.new {
- name = "math",
- arguments = 2,
- processor = utilities.sequencers.nodeprocessor,
- sequence = {
- "before",
- "normalizers",
- "builders",
- "after",
- },
-}
-
-tasks.freezegroup("math", "normalizers") -- experimental
-tasks.freezegroup("math", "builders") -- experimental
-
-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)
- local head, done = actions(head,style,penalties)
- stoptiming(noads)
- return head, done
-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)
-
--- interface
-
-local implement = interfaces.implement
-
-implement {
- name = "setmathalternate",
- actions = mathematics.setalternate,
- arguments = { "integer", "string" }
-}
-
-implement {
- name = "setmathitalics",
- actions = mathematics.setitalics
-}
-
-implement {
- name = "resetmathitalics",
- actions = mathematics.resetitalics
-}
diff --git a/Master/texmf-dist/tex/context/base/anch-bar.mkii b/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii
index 39d5c7f77e7..39d5c7f77e7 100644
--- a/Master/texmf-dist/tex/context/base/anch-bar.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii
diff --git a/Master/texmf-dist/tex/context/base/anch-pgr.mkii b/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii
index 4ceea844c1f..4ceea844c1f 100644
--- a/Master/texmf-dist/tex/context/base/anch-pgr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii
diff --git a/Master/texmf-dist/tex/context/base/anch-pos.mkii b/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii
index b86cee5cc03..b86cee5cc03 100644
--- a/Master/texmf-dist/tex/context/base/anch-pos.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii
diff --git a/Master/texmf-dist/tex/context/base/anch-snc.mkii b/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii
index 01704e0c8e6..01704e0c8e6 100644
--- a/Master/texmf-dist/tex/context/base/anch-snc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii
diff --git a/Master/texmf-dist/tex/context/base/bibl-tra.mkii b/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii
index 868ca0fc681..868ca0fc681 100644
--- a/Master/texmf-dist/tex/context/base/bibl-tra.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii
index 7fdb89e45cd..7fdb89e45cd 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/buff-ver.mkii b/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii
index fbe56892ea1..fbe56892ea1 100644
--- a/Master/texmf-dist/tex/context/base/buff-ver.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-act.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii
index 6535afc56b8..6535afc56b8 100644
--- a/Master/texmf-dist/tex/context/base/catc-act.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-ctx.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii
index 8bb43c1f92c..8bb43c1f92c 100644
--- a/Master/texmf-dist/tex/context/base/catc-ctx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-def.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii
index 25044bdf056..25044bdf056 100644
--- a/Master/texmf-dist/tex/context/base/catc-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii
index 7527466e103..7527466e103 100644
--- a/Master/texmf-dist/tex/context/base/catc-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-sym.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii
index 55782f11ed2..55782f11ed2 100644
--- a/Master/texmf-dist/tex/context/base/catc-sym.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii
diff --git a/Master/texmf-dist/tex/context/base/catc-xml.mkii b/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii
index 45eb5a421a1..45eb5a421a1 100644
--- a/Master/texmf-dist/tex/context/base/catc-xml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-ema.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii
index 11d76f34209..11d76f34209 100644
--- a/Master/texmf-dist/tex/context/base/colo-ema.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-ext.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii
index 5b39a8e85dd..5b39a8e85dd 100644
--- a/Master/texmf-dist/tex/context/base/colo-ext.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-hex.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii
index ddf2d47065d..ddf2d47065d 100644
--- a/Master/texmf-dist/tex/context/base/colo-hex.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii
index 56b9d14da80..56b9d14da80 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-rgb.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii
index f734c7a014c..f734c7a014c 100644
--- a/Master/texmf-dist/tex/context/base/colo-rgb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-run.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii
index 02da462d385..02da462d385 100644
--- a/Master/texmf-dist/tex/context/base/colo-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-x11.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii
index 45d3aac6248..45d3aac6248 100644
--- a/Master/texmf-dist/tex/context/base/colo-x11.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii
diff --git a/Master/texmf-dist/tex/context/base/colo-xwi.mkii b/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii
index 13d04759e77..48ffe234eff 100644
--- a/Master/texmf-dist/tex/context/base/colo-xwi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii
@@ -128,7 +128,7 @@
\definecolor [snow] [r=1.00,g=0.98,b=0.98]
\definecolor [springgreen] [r=0.00,g=1.00,b=0.50]
\definecolor [steelblue] [r=0.27,g=0.51,b=0.71]
-\definecolor [tan ] [r=0.82,g=0.71,b=0.55]
+\definecolor [tancolor] [r=0.82,g=0.71,b=0.55] % we don't want it to clash
\definecolor [thistle] [r=0.85,g=0.75,b=0.85]
\definecolor [tomato] [r=1.00,g=0.39,b=0.28]
\definecolor [turquoise] [r=0.25,g=0.88,b=0.82]
diff --git a/Master/texmf-dist/tex/context/base/cont-cs.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii
index 89b781c37a1..89b781c37a1 100644
--- a/Master/texmf-dist/tex/context/base/cont-cs.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-de.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii
index 5badc59d00b..5badc59d00b 100644
--- a/Master/texmf-dist/tex/context/base/cont-de.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-en.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii
index 9d0d4de2e33..9d0d4de2e33 100644
--- a/Master/texmf-dist/tex/context/base/cont-en.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-err.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii
index 00118f6ccec..00118f6ccec 100644
--- a/Master/texmf-dist/tex/context/base/cont-err.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-fil.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii
index 604ea233d06..604ea233d06 100644
--- a/Master/texmf-dist/tex/context/base/cont-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-fr.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii
index e70cfe65eec..e70cfe65eec 100644
--- a/Master/texmf-dist/tex/context/base/cont-fr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-gb.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii
index 5cd0a9635b0..5cd0a9635b0 100644
--- a/Master/texmf-dist/tex/context/base/cont-gb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-it.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii
index f15171403b3..f15171403b3 100644
--- a/Master/texmf-dist/tex/context/base/cont-it.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-log.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii
index 6a7a707952d..6a7a707952d 100644
--- a/Master/texmf-dist/tex/context/base/cont-log.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii
index f0385c0653a..f0385c0653a 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-nl.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii
index f9cefaaac06..f9cefaaac06 100644
--- a/Master/texmf-dist/tex/context/base/cont-nl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-ro.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii
index d68cf5a4558..d68cf5a4558 100644
--- a/Master/texmf-dist/tex/context/base/cont-ro.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii
diff --git a/Master/texmf-dist/tex/context/base/cont-sys.ori b/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori
index fa438a78d4f..fa438a78d4f 100644
--- a/Master/texmf-dist/tex/context/base/cont-sys.ori
+++ b/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori
diff --git a/Master/texmf-dist/tex/context/base/context.mkii b/Master/texmf-dist/tex/context/base/mkii/context.mkii
index 990c8bd11c8..84679a9a21d 100644
--- a/Master/texmf-dist/tex/context/base/context.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/context.mkii
@@ -85,6 +85,7 @@
\loadmarkfile{xetx-cls}
\fi
+
%D To enable selective loading, we say:
\newif\ifCONTEXT \CONTEXTtrue % will disappear
diff --git a/Master/texmf-dist/tex/context/base/core-con.mkii b/Master/texmf-dist/tex/context/base/mkii/core-con.mkii
index 46fbe9b9ee6..46fbe9b9ee6 100644
--- a/Master/texmf-dist/tex/context/base/core-con.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-con.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.mkii b/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii
index c693d10db6f..c693d10db6f 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-def.mkii b/Master/texmf-dist/tex/context/base/mkii/core-def.mkii
index 971e8953d99..971e8953d99 100644
--- a/Master/texmf-dist/tex/context/base/core-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-env.mkii b/Master/texmf-dist/tex/context/base/mkii/core-env.mkii
index 6058c4c9fa8..6058c4c9fa8 100644
--- a/Master/texmf-dist/tex/context/base/core-env.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-env.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-fil.mkii b/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii
index 16daf7bf60f..16daf7bf60f 100644
--- a/Master/texmf-dist/tex/context/base/core-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-fnt.mkii b/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii
index 542ca062a68..542ca062a68 100644
--- a/Master/texmf-dist/tex/context/base/core-fnt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-gen.mkii b/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii
index 0d7fcebe00c..0d7fcebe00c 100644
--- a/Master/texmf-dist/tex/context/base/core-gen.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii
index 04535bec6f6..04535bec6f6 100644
--- a/Master/texmf-dist/tex/context/base/core-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-job.mkii b/Master/texmf-dist/tex/context/base/mkii/core-job.mkii
index e2dc16031ff..e2dc16031ff 100644
--- a/Master/texmf-dist/tex/context/base/core-job.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-job.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii
index c44d61cbc3e..c44d61cbc3e 100644
--- a/Master/texmf-dist/tex/context/base/core-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-par.mkii b/Master/texmf-dist/tex/context/base/mkii/core-par.mkii
index 69e2976d1f3..69e2976d1f3 100644
--- a/Master/texmf-dist/tex/context/base/core-par.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-par.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-stg.mkii b/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii
index 0d98da851d3..0d98da851d3 100644
--- a/Master/texmf-dist/tex/context/base/core-stg.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-sys.mkii b/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii
index 54778eeed52..54778eeed52 100644
--- a/Master/texmf-dist/tex/context/base/core-sys.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-two.mkii b/Master/texmf-dist/tex/context/base/mkii/core-two.mkii
index 235be988edc..235be988edc 100644
--- a/Master/texmf-dist/tex/context/base/core-two.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-two.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-uti.mkii b/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii
index bd2fa46a0ff..bd2fa46a0ff 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii
diff --git a/Master/texmf-dist/tex/context/base/core-var.mkii b/Master/texmf-dist/tex/context/base/mkii/core-var.mkii
index 55c587fbfaf..55c587fbfaf 100644
--- a/Master/texmf-dist/tex/context/base/core-var.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/core-var.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-032.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii
index e3c24271e55..e3c24271e55 100644
--- a/Master/texmf-dist/tex/context/base/enco-032.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-037.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii
index a2aad46a575..a2aad46a575 100644
--- a/Master/texmf-dist/tex/context/base/enco-037.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-acc.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii
index 7484fd50ee2..7484fd50ee2 100644
--- a/Master/texmf-dist/tex/context/base/enco-acc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-agr.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii
index 1dbb9b577af..1dbb9b577af 100644
--- a/Master/texmf-dist/tex/context/base/enco-agr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ans.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii
index c71b2451a60..c71b2451a60 100644
--- a/Master/texmf-dist/tex/context/base/enco-ans.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-cas.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii
index 6ac35eb325c..6ac35eb325c 100644
--- a/Master/texmf-dist/tex/context/base/enco-cas.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-chi.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii
index 727720565fd..727720565fd 100644
--- a/Master/texmf-dist/tex/context/base/enco-chi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-com.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii
index 620ac0c96ee..620ac0c96ee 100644
--- a/Master/texmf-dist/tex/context/base/enco-com.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-cyr.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii
index aa412d8d3a4..aa412d8d3a4 100644
--- a/Master/texmf-dist/tex/context/base/enco-cyr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-def.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii
index 20c885d4dca..20c885d4dca 100644
--- a/Master/texmf-dist/tex/context/base/enco-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ec.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii
index 918c85e1261..918c85e1261 100644
--- a/Master/texmf-dist/tex/context/base/enco-ec.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ecm.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii
index 8a97065747a..8a97065747a 100644
--- a/Master/texmf-dist/tex/context/base/enco-ecm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-el.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii
index f268dcb3c24..f268dcb3c24 100644
--- a/Master/texmf-dist/tex/context/base/enco-el.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-fde.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii
index 57e572c04f4..57e572c04f4 100644
--- a/Master/texmf-dist/tex/context/base/enco-fde.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ffr.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii
index 7e605bb052c..7e605bb052c 100644
--- a/Master/texmf-dist/tex/context/base/enco-ffr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-fpl.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii
index ddf86569838..ddf86569838 100644
--- a/Master/texmf-dist/tex/context/base/enco-fpl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-fro.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii
index af127216383..af127216383 100644
--- a/Master/texmf-dist/tex/context/base/enco-fro.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-fsl.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii
index 8fbca98cafc..8fbca98cafc 100644
--- a/Master/texmf-dist/tex/context/base/enco-fsl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-grk.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii
index 6264f362e88..6264f362e88 100644
--- a/Master/texmf-dist/tex/context/base/enco-grk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-heb.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii
index a4ef2cd2c11..a4ef2cd2c11 100644
--- a/Master/texmf-dist/tex/context/base/enco-heb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ibm.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii
index 48695ca5298..48695ca5298 100644
--- a/Master/texmf-dist/tex/context/base/enco-ibm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-il2.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii
index 9b08dc8972f..9b08dc8972f 100644
--- a/Master/texmf-dist/tex/context/base/enco-il2.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii
index 8603f2420e1..8603f2420e1 100644
--- a/Master/texmf-dist/tex/context/base/enco-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-l7x.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii
index 2a0d12c9f57..2a0d12c9f57 100644
--- a/Master/texmf-dist/tex/context/base/enco-l7x.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-lat.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii
index 2623aae8d7d..2623aae8d7d 100644
--- a/Master/texmf-dist/tex/context/base/enco-lat.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii
index 28523685e4e..28523685e4e 100644
--- a/Master/texmf-dist/tex/context/base/enco-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-pdf.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii
index 28e96067361..28e96067361 100644
--- a/Master/texmf-dist/tex/context/base/enco-pdf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-pfr.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii
index aca2436c130..aca2436c130 100644
--- a/Master/texmf-dist/tex/context/base/enco-pfr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-pol.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii
index ec49c6e1d37..ec49c6e1d37 100644
--- a/Master/texmf-dist/tex/context/base/enco-pol.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-qx.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii
index b184fe0ac0c..b184fe0ac0c 100644
--- a/Master/texmf-dist/tex/context/base/enco-qx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-raw.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii
index e3a46e3d768..e3a46e3d768 100644
--- a/Master/texmf-dist/tex/context/base/enco-raw.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-run.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii
index 2f60a35b874..2f60a35b874 100644
--- a/Master/texmf-dist/tex/context/base/enco-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-t5.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii
index 3f51b85855b..3f51b85855b 100644
--- a/Master/texmf-dist/tex/context/base/enco-t5.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-tbo.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii
index 5733acd32e0..5733acd32e0 100644
--- a/Master/texmf-dist/tex/context/base/enco-tbo.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-uc.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii
index 0be22318a0f..0be22318a0f 100644
--- a/Master/texmf-dist/tex/context/base/enco-uc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-vis.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii
index 3c1fd776566..3c1fd776566 100644
--- a/Master/texmf-dist/tex/context/base/enco-vis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-vna.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii
index 42fee43417b..42fee43417b 100644
--- a/Master/texmf-dist/tex/context/base/enco-vna.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-win.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii
index 826371d8a68..826371d8a68 100644
--- a/Master/texmf-dist/tex/context/base/enco-win.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii
diff --git a/Master/texmf-dist/tex/context/base/enco-x5.mkii b/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii
index cde394e294c..cde394e294c 100644
--- a/Master/texmf-dist/tex/context/base/enco-x5.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii
diff --git a/Master/texmf-dist/tex/context/base/filt-bas.mkii b/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii
index fedeb694b19..fedeb694b19 100644
--- a/Master/texmf-dist/tex/context/base/filt-bas.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii
diff --git a/Master/texmf-dist/tex/context/base/filt-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii
index f2f59349a51..f2f59349a51 100644
--- a/Master/texmf-dist/tex/context/base/filt-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-arb.mkii b/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii
index 3ec0395f32a..3ec0395f32a 100644
--- a/Master/texmf-dist/tex/context/base/font-arb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-bfm.mkii b/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii
index 0a25ec7422f..0a25ec7422f 100644
--- a/Master/texmf-dist/tex/context/base/font-bfm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-chi.mkii b/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii
index 5e545722735..5e545722735 100644
--- a/Master/texmf-dist/tex/context/base/font-chi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-heb.mkii b/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii
index 3ec0395f32a..3ec0395f32a 100644
--- a/Master/texmf-dist/tex/context/base/font-heb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii
index 2bee006370f..2bee006370f 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-jap.mkii b/Master/texmf-dist/tex/context/base/mkii/font-jap.mkii
index b8aa3d8368d..b8aa3d8368d 100644
--- a/Master/texmf-dist/tex/context/base/font-jap.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-jap.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-run.mkii b/Master/texmf-dist/tex/context/base/mkii/font-run.mkii
index 04fcd576a60..04fcd576a60 100644
--- a/Master/texmf-dist/tex/context/base/font-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-uni.mkii b/Master/texmf-dist/tex/context/base/mkii/font-uni.mkii
index 77eb680e20f..77eb680e20f 100644
--- a/Master/texmf-dist/tex/context/base/font-uni.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-uni.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-unk.mkii b/Master/texmf-dist/tex/context/base/mkii/font-unk.mkii
index 241369f6812..241369f6812 100644
--- a/Master/texmf-dist/tex/context/base/font-unk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-unk.mkii
diff --git a/Master/texmf-dist/tex/context/base/font-xtx.mkii b/Master/texmf-dist/tex/context/base/mkii/font-xtx.mkii
index e7a6c8d80cc..e7a6c8d80cc 100644
--- a/Master/texmf-dist/tex/context/base/font-xtx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/font-xtx.mkii
diff --git a/Master/texmf-dist/tex/context/base/grph-fig.mkii b/Master/texmf-dist/tex/context/base/mkii/grph-fig.mkii
index c488ccc4f6c..c488ccc4f6c 100644
--- a/Master/texmf-dist/tex/context/base/grph-fig.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/grph-fig.mkii
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.mkii b/Master/texmf-dist/tex/context/base/mkii/grph-inc.mkii
index 33f11a2bc8f..33f11a2bc8f 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/grph-inc.mkii
diff --git a/Master/texmf-dist/tex/context/base/grph-trf.mkii b/Master/texmf-dist/tex/context/base/mkii/grph-trf.mkii
index bd9875806b9..bd9875806b9 100644
--- a/Master/texmf-dist/tex/context/base/grph-trf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/grph-trf.mkii
diff --git a/Master/texmf-dist/tex/context/base/hand-def.mkii b/Master/texmf-dist/tex/context/base/mkii/hand-def.mkii
index ab0044a8eda..ab0044a8eda 100644
--- a/Master/texmf-dist/tex/context/base/hand-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/hand-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/hand-ini.mkii
index 1d41c3adab7..1d41c3adab7 100644
--- a/Master/texmf-dist/tex/context/base/hand-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/hand-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-ans.mkii b/Master/texmf-dist/tex/context/base/mkii/java-ans.mkii
index 7e310baa495..7e310baa495 100644
--- a/Master/texmf-dist/tex/context/base/java-ans.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-ans.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-exa.mkii b/Master/texmf-dist/tex/context/base/mkii/java-exa.mkii
index 584ee13512d..584ee13512d 100644
--- a/Master/texmf-dist/tex/context/base/java-exa.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-exa.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-fil.mkii b/Master/texmf-dist/tex/context/base/mkii/java-fil.mkii
index 20376af44d6..20376af44d6 100644
--- a/Master/texmf-dist/tex/context/base/java-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-fil.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-fld.mkii b/Master/texmf-dist/tex/context/base/mkii/java-fld.mkii
index 0a76cc93c12..0a76cc93c12 100644
--- a/Master/texmf-dist/tex/context/base/java-fld.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-fld.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/java-ini.mkii
index 2e62ca166f4..2e62ca166f4 100644
--- a/Master/texmf-dist/tex/context/base/java-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/java-stp.mkii b/Master/texmf-dist/tex/context/base/mkii/java-stp.mkii
index 7283c8ceb3d..7283c8ceb3d 100644
--- a/Master/texmf-dist/tex/context/base/java-stp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/java-stp.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-alt.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-alt.mkii
index 1e49945d5fd..1e49945d5fd 100644
--- a/Master/texmf-dist/tex/context/base/lang-alt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-alt.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ana.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ana.mkii
index f2dc4a17c00..f2dc4a17c00 100644
--- a/Master/texmf-dist/tex/context/base/lang-ana.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ana.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-art.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-art.mkii
index 20216b571bf..20216b571bf 100644
--- a/Master/texmf-dist/tex/context/base/lang-art.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-art.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-bal.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-bal.mkii
index 4ab751a448d..4ab751a448d 100644
--- a/Master/texmf-dist/tex/context/base/lang-bal.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-bal.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-cel.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-cel.mkii
index e6519497b3d..e6519497b3d 100644
--- a/Master/texmf-dist/tex/context/base/lang-cel.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-cel.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-chi.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-chi.mkii
index 5d61281b0a2..5d61281b0a2 100644
--- a/Master/texmf-dist/tex/context/base/lang-chi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-chi.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ctx.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ctx.mkii
index 2aecb918ee2..2aecb918ee2 100644
--- a/Master/texmf-dist/tex/context/base/lang-ctx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ctx.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-cyr.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-cyr.mkii
index eed3ec80e68..eed3ec80e68 100644
--- a/Master/texmf-dist/tex/context/base/lang-cyr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-cyr.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-dis.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-dis.mkii
index 213c5110f57..213c5110f57 100644
--- a/Master/texmf-dist/tex/context/base/lang-dis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-dis.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-frd.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-frd.mkii
index be4e07b75df..be4e07b75df 100644
--- a/Master/texmf-dist/tex/context/base/lang-frd.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-frd.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-frq.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-frq.mkii
index afeb5329c64..afeb5329c64 100644
--- a/Master/texmf-dist/tex/context/base/lang-frq.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-frq.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ger.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ger.mkii
index d33620cc7bc..d33620cc7bc 100644
--- a/Master/texmf-dist/tex/context/base/lang-ger.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ger.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-grk.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-grk.mkii
index 9fd59382a0c..9fd59382a0c 100644
--- a/Master/texmf-dist/tex/context/base/lang-grk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-grk.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ind.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ind.mkii
index bb33dacfd24..bb33dacfd24 100644
--- a/Master/texmf-dist/tex/context/base/lang-ind.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ind.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ini.mkii
index 6ad6f02e3ad..4561f4dd1f3 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ini.mkii
@@ -670,9 +670,9 @@
\def\nopatterns{\normallanguage\minusone}
-%D \XETEX\ is \UNICODE:
+%D \XETEX\ (and also \LUATEX) are \UNICODE:
-\ifnum\texengine=\xetexengine
+\ifnum\texengine>\pdftexengine
\def\synchronizepatternswithfont{}
\def\doloadpatterns #1#2{\dodoloadpatterns{#1}{#2}\s!default\s!default}
diff --git a/Master/texmf-dist/tex/context/base/lang-ita.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ita.mkii
index 04acf3265c2..04acf3265c2 100644
--- a/Master/texmf-dist/tex/context/base/lang-ita.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ita.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-jap.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-jap.mkii
index 1417e8ec58c..1417e8ec58c 100644
--- a/Master/texmf-dist/tex/context/base/lang-jap.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-jap.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-lab.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-lab.mkii
index 1ff964615e0..1ff964615e0 100644
--- a/Master/texmf-dist/tex/context/base/lang-lab.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-lab.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-mis.mkii
index 3923df3e8ae..3923df3e8ae 100644
--- a/Master/texmf-dist/tex/context/base/lang-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-run.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-run.mkii
index 320ee8dabf6..320ee8dabf6 100644
--- a/Master/texmf-dist/tex/context/base/lang-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-sla.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-sla.mkii
index 81f9a9bf711..81f9a9bf711 100644
--- a/Master/texmf-dist/tex/context/base/lang-sla.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-sla.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-spa.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-spa.mkii
index 313e5f3e6e7..313e5f3e6e7 100644
--- a/Master/texmf-dist/tex/context/base/lang-spa.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-spa.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-spe.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-spe.mkii
index 11c57af3f23..11c57af3f23 100644
--- a/Master/texmf-dist/tex/context/base/lang-spe.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-spe.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-ura.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-ura.mkii
index 21bc8d94a74..21bc8d94a74 100644
--- a/Master/texmf-dist/tex/context/base/lang-ura.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-ura.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-url.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-url.mkii
index 1f340ffb0e4..1f340ffb0e4 100644
--- a/Master/texmf-dist/tex/context/base/lang-url.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-url.mkii
diff --git a/Master/texmf-dist/tex/context/base/lang-vn.mkii b/Master/texmf-dist/tex/context/base/mkii/lang-vn.mkii
index e564d989c70..e564d989c70 100644
--- a/Master/texmf-dist/tex/context/base/lang-vn.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/lang-vn.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-ams.mkii b/Master/texmf-dist/tex/context/base/mkii/math-ams.mkii
index c73a890c02f..c73a890c02f 100644
--- a/Master/texmf-dist/tex/context/base/math-ams.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-ams.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-arr.mkii b/Master/texmf-dist/tex/context/base/mkii/math-arr.mkii
index 71a833b8974..71a833b8974 100644
--- a/Master/texmf-dist/tex/context/base/math-arr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-arr.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-cow.mkii b/Master/texmf-dist/tex/context/base/mkii/math-cow.mkii
index 04f659b4425..04f659b4425 100644
--- a/Master/texmf-dist/tex/context/base/math-cow.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-cow.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-eul.mkii b/Master/texmf-dist/tex/context/base/mkii/math-eul.mkii
index f502445259c..f502445259c 100644
--- a/Master/texmf-dist/tex/context/base/math-eul.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-eul.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-fou.mkii b/Master/texmf-dist/tex/context/base/mkii/math-fou.mkii
index 26b03d73ec9..26b03d73ec9 100644
--- a/Master/texmf-dist/tex/context/base/math-fou.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-fou.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-frc.mkii b/Master/texmf-dist/tex/context/base/mkii/math-frc.mkii
index b14c9377497..b14c9377497 100644
--- a/Master/texmf-dist/tex/context/base/math-frc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-frc.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/math-ini.mkii
index d6d10feb323..d6d10feb323 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-lbr.mkii b/Master/texmf-dist/tex/context/base/mkii/math-lbr.mkii
index 0aa1df66514..0aa1df66514 100644
--- a/Master/texmf-dist/tex/context/base/math-lbr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-lbr.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-pln.mkii b/Master/texmf-dist/tex/context/base/mkii/math-pln.mkii
index 975869c702c..975869c702c 100644
--- a/Master/texmf-dist/tex/context/base/math-pln.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-pln.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-run.mkii b/Master/texmf-dist/tex/context/base/mkii/math-run.mkii
index 79d08fbedb1..79d08fbedb1 100644
--- a/Master/texmf-dist/tex/context/base/math-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-tex.mkii b/Master/texmf-dist/tex/context/base/mkii/math-tex.mkii
index e3dd634e6ef..e3dd634e6ef 100644
--- a/Master/texmf-dist/tex/context/base/math-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-tex.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-tim.mkii b/Master/texmf-dist/tex/context/base/mkii/math-tim.mkii
index da7d17e7ba6..da7d17e7ba6 100644
--- a/Master/texmf-dist/tex/context/base/math-tim.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-tim.mkii
diff --git a/Master/texmf-dist/tex/context/base/math-uni.mkii b/Master/texmf-dist/tex/context/base/mkii/math-uni.mkii
index 5c75a9fb44b..5c75a9fb44b 100644
--- a/Master/texmf-dist/tex/context/base/math-uni.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/math-uni.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-clp.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-clp.mkii
index 5c9206deee9..5c9206deee9 100644
--- a/Master/texmf-dist/tex/context/base/meta-clp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-clp.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-dum.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-dum.mkii
index dae30ed695b..dae30ed695b 100644
--- a/Master/texmf-dist/tex/context/base/meta-dum.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-dum.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-fig.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-fig.mkii
index 31fe5fc0c0e..31fe5fc0c0e 100644
--- a/Master/texmf-dist/tex/context/base/meta-fig.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-fig.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-ini.mkii
index 9780fecfadf..9780fecfadf 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-mis.mkii
index e8282c381b8..e8282c381b8 100644
--- a/Master/texmf-dist/tex/context/base/meta-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-nav.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-nav.mkii
index 45a31ba5ecf..45a31ba5ecf 100644
--- a/Master/texmf-dist/tex/context/base/meta-nav.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-nav.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-pag.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-pag.mkii
index 82a525a0820..82a525a0820 100644
--- a/Master/texmf-dist/tex/context/base/meta-pag.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-pag.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-pdf.mkii
index e1311339878..e1311339878 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-pdf.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-pre.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-pre.mkii
index 098be030b19..098be030b19 100644
--- a/Master/texmf-dist/tex/context/base/meta-pre.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-pre.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-tex.mkii
index ab0f244570f..ab0f244570f 100644
--- a/Master/texmf-dist/tex/context/base/meta-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-tex.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-txt.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-txt.mkii
index dc8bb7ca83b..dc8bb7ca83b 100644
--- a/Master/texmf-dist/tex/context/base/meta-txt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-txt.mkii
diff --git a/Master/texmf-dist/tex/context/base/meta-xml.mkii b/Master/texmf-dist/tex/context/base/mkii/meta-xml.mkii
index 71708a0f9a5..71708a0f9a5 100644
--- a/Master/texmf-dist/tex/context/base/meta-xml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/meta-xml.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-aux.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-aux.mkii
index 3869a95db2e..3869a95db2e 100644
--- a/Master/texmf-dist/tex/context/base/mult-aux.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-aux.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-chk.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-chk.mkii
index cde00fd44c4..cde00fd44c4 100644
--- a/Master/texmf-dist/tex/context/base/mult-chk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-chk.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-com.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-com.mkii
index 600819b7ebc..600819b7ebc 100644
--- a/Master/texmf-dist/tex/context/base/mult-com.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-com.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-con.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-con.mkii
index 7d0a47bd0a6..7d0a47bd0a6 100644
--- a/Master/texmf-dist/tex/context/base/mult-con.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-con.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-de.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii
index 90aae390e0d..e0099f4e7e7 100644
--- a/Master/texmf-dist/tex/context/base/mult-de.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language de
%
\setinterfacevariable{Addition}{Zusatz}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Ballon}
\setinterfacevariable{Cap}{Kap}
\setinterfacevariable{Capital}{Versalien}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{FolgendeSeite}
\setinterfacevariable{Numbers}{Ziffern}
\setinterfacevariable{OpenNamedDocument}{OpenNamedDocument}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Absatz}
\setinterfacevariable{PauseMovie}{PauseFilm}
\setinterfacevariable{PauseRendering}{PauseRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{aktion}
\setinterfacevariable{after}{nach}
\setinterfacevariable{all}{alles}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{immer}
\setinterfacevariable{and}{und}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{anhaenge}
\setinterfacevariable{appendix}{anhang}
\setinterfacevariable{april}{april}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
\setinterfacevariable{atmargin}{amrand}
\setinterfacevariable{atpage}{aufseite}
+\setinterfacevariable{atrightmargin}{atrightmargin}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{august}
\setinterfacevariable{author}{autor}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{zurueck}
\setinterfacevariable{background}{hintergrund}
\setinterfacevariable{backmatter}{epiloge}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{grosszuegig}
\setinterfacevariable{blank}{blanko}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blockquote}
\setinterfacevariable{bodymatter}{haupttexte}
\setinterfacevariable{bodypart}{haupttext}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{fettgeneigt}
\setinterfacevariable{bookmark}{bookmark}
\setinterfacevariable{both}{beide}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{unten}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{breit}
\setinterfacevariable{buffer}{puffer}
\setinterfacevariable{by}{pro}
\setinterfacevariable{calligraphic}{kalligraphie}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{kap}
\setinterfacevariable{capital}{versalien}
\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{kapitel}
\setinterfacevariable{character}{buchstabe}
\setinterfacevariable{characters}{buchstaben}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{farbe}
\setinterfacevariable{column}{column}
\setinterfacevariable{columns}{spalten}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{befehl}
\setinterfacevariable{commands}{befehle}
\setinterfacevariable{comment}{kommentar}
\setinterfacevariable{component}{komponente}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{konzept}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{inhalt}
\setinterfacevariable{contents}{inhalte}
\setinterfacevariable{continue}{fortsetzten}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{konversion}
\setinterfacevariable{current}{aktuell}
\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{datum}
\setinterfacevariable{day}{tag}
\setinterfacevariable{december}{dezember}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{jede}
\setinterfacevariable{edge}{kante}
+\setinterfacevariable{eight}{acht}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{leer}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{gerade}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{extern}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{gegeben}
\setinterfacevariable{february}{februar}
\setinterfacevariable{figure}{abbildung}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{freitag}
\setinterfacevariable{frontmatter}{einleitungen}
\setinterfacevariable{frontpart}{einleitung}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{global}
\setinterfacevariable{graphic}{grafik}
\setinterfacevariable{graphics}{grafiken}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indizies}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{inherit}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{imlinken}
+\setinterfacevariable{inleftedge}{imlinkenrand}
+\setinterfacevariable{inleftmargin}{inlinkermarginale}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{imrand}
\setinterfacevariable{inner}{innen}
\setinterfacevariable{inneredge}{inneredge}
\setinterfacevariable{innermargin}{innermargin}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{imrechten}
+\setinterfacevariable{inrightedge}{imrechtenrand}
+\setinterfacevariable{inrightmargin}{inrechtermarginale}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interaktion}
\setinterfacevariable{interactionmenu}{interaktionsmenue}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzi}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{imtext}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{juli}
\setinterfacevariable{june}{juni}
\setinterfacevariable{keep}{behalte}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{label}
\setinterfacevariable{landscape}{querformat}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legende}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{zeile}
\setinterfacevariable{linenote}{linenote}
\setinterfacevariable{lines}{zeilen}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{logos}
\setinterfacevariable{lohi}{hoti}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{lose}
\setinterfacevariable{low}{tief}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{maerz}
\setinterfacevariable{margin}{marginalie}
\setinterfacevariable{marginedge}{marginalkante}
+\setinterfacevariable{margintext}{marginaltext}
\setinterfacevariable{margintitle}{marginaltitel}
\setinterfacevariable{marking}{beschriftung}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{minhoehe}
\setinterfacevariable{minwidth}{minbreite}
\setinterfacevariable{mirrored}{gespiegelt}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{montag}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monofett}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{monat}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{naechsteungeradeseite}
\setinterfacevariable{nextpage}{folgendeseite}
\setinterfacevariable{nextsubpage}{folgendeunterseite}
+\setinterfacevariable{nine}{neun}
\setinterfacevariable{no}{nein}
\setinterfacevariable{nocheck}{nocheck}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nofit}
\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{keinebeschriftung}
\setinterfacevariable{none}{kein}
\setinterfacevariable{nonumber}{nonumber}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normal}
\setinterfacevariable{nospacing}{nospacing}
\setinterfacevariable{not}{nicht}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nothyphenated}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{aus}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{an}
\setinterfacevariable{one}{eins}
\setinterfacevariable{opposite}{gegenueber}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{aussen}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{selbeseite}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansfett}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{grotesk}
\setinterfacevariable{saturday}{samstag}
\setinterfacevariable{screen}{raster}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{september}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{kleinerabstand}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{sieben}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{kurz}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{einzelseitig}
+\setinterfacevariable{six}{sechs}
\setinterfacevariable{slanted}{geneigt}
\setinterfacevariable{slantedbold}{geneigtfett}
\setinterfacevariable{small}{klein}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{kleintippen}
\setinterfacevariable{somewhere}{irgendwo}
\setinterfacevariable{sorted}{sortiert}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{spatium}
\setinterfacevariable{spacing}{spatiumausgleich}
\setinterfacevariable{speech}{speech}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{trenner}
\setinterfacevariable{stretch}{strecken}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{streng}
\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sym}
\setinterfacevariable{symbol}{symbol}
\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{systeme}
\setinterfacevariable{table}{tabelle}
\setinterfacevariable{tablehead}{tabellenueberschrift}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{unterstreichen}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{einheit}
\setinterfacevariable{units}{einheiten}
\setinterfacevariable{unknown}{unbekannt}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{sehr}
\setinterfacevariable{verystrict}{sehrstreng}
\setinterfacevariable{verytolerant}{sehrtolerant}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{mittwoch}
\setinterfacevariable{week}{woche}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{breit}
\setinterfacevariable{width}{breite}
\setinterfacevariable{word}{wort}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{jahr}
\setinterfacevariable{yes}{ja}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{bei}
\setinterfaceconstant{author}{autor}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{gross}
\setinterfaceconstant{blank}{blanko}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blockauf}
\setinterfaceconstant{bodyfont}{fliesstext}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{berechnen}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{cbefehl}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{klick}
\setinterfaceconstant{clickin}{klickin}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{spalte}
\setinterfaceconstant{columndistance}{spaltenabstand}
\setinterfaceconstant{columns}{spalten}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{befehl}
\setinterfaceconstant{commandafter}{zumbefehl}
\setinterfaceconstant{commandbefore}{vorbefehl}
\setinterfaceconstant{commands}{befehle}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{component}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{compress}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{fortsetzen}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{verknuepfung}
\setinterfaceconstant{couplingway}{verkopplungsart}
\setinterfaceconstant{criterium}{kriterium}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{aktuell}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{strich}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{datum}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{verzeichnis}
\setinterfaceconstant{display}{bildschirm}
\setinterfaceconstant{distance}{abstand}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{punkt}
\setinterfaceconstant{doublesided}{doppelseitig}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{geraderand}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{fallback}
\setinterfaceconstant{family}{familie}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{feldhintergrundfarbe}
\setinterfaceconstant{fieldframecolor}{feldrahmenfarbe}
\setinterfaceconstant{fieldlayer}{fieldlayer}
\setinterfaceconstant{fieldoffset}{feldoffset}
\setinterfaceconstant{file}{datei}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{ersteseite}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusout}
\setinterfaceconstant{footer}{fusszeile}
\setinterfaceconstant{footerdistance}{fusszeilenabstand}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{foregroundcolor}
\setinterfaceconstant{foregroundstyle}{foregroundstyle}
\setinterfaceconstant{format}{formatieren}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{rahmen}
\setinterfaceconstant{framecolor}{rahmenfarbe}
\setinterfaceconstant{framecorner}{rahmenwinkel}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{rahmenradius}
\setinterfaceconstant{frames}{umrahmen}
\setinterfaceconstant{from}{von}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{hole}
\setinterfaceconstant{global}{global}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{gritter}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{haengend}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{hoffset}
\setinterfaceconstant{horoffset}{rumpfabstand}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{ibefehl}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{zwischen}
\setinterfaceconstant{increment}{erhoehen}
\setinterfaceconstant{incrementnumber}{nummererhoehen}
\setinterfaceconstant{indenting}{einziehen}
\setinterfaceconstant{indentnext}{ziehefolgendeein}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{indikator}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{innen}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaktion}
\setinterfaceconstant{interlinespace}{zeilenabstande}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{posten}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{label}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{letzteseite}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{links}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{linkersubsatz}
\setinterfaceconstant{lefttext}{linkertext}
\setinterfaceconstant{leftwidth}{linkerbreite}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{niveau}
\setinterfaceconstant{levels}{niveaus}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{nunten}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{folgende}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nlinks}
\setinterfaceconstant{nlines}{zzeile}
\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{nrechts}
\setinterfaceconstant{ntop}{noben}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{oeffenaktion}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{openpageaction}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{option}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{seitenfarbe}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{seitenbefehl}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{seitennummer}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{palette}
\setinterfaceconstant{paper}{papier}
\setinterfaceconstant{paragraph}{absatz}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{platziere}
\setinterfaceconstant{placehead}{setzekopf}
\setinterfaceconstant{placestopper}{setzetrenner}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{druckbar}
\setinterfaceconstant{process}{process}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{radius}
\setinterfaceconstant{random}{zufaellig}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{referenz}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referieren}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{regionin}
\setinterfaceconstant{regionout}{regionaus}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{wiederholen}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{resetnumber}
\setinterfaceconstant{resolution}{aufloesung}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{reverse}
\setinterfaceconstant{right}{rechts}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{rechterfarbe}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{rechtekante}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{rechtersubsatz}
\setinterfaceconstant{righttext}{rechtertext}
\setinterfaceconstant{rightwidth}{rechterbreite}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotation}
\setinterfaceconstant{rule}{linie}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{bereich}
\setinterfaceconstant{screen}{raster}
\setinterfaceconstant{section}{abschnitt}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{abschnittsnummer}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{vorspatium}
\setinterfaceconstant{spaceinbetween}{spaceinbetween}
\setinterfaceconstant{spacing}{spatiumausgleich}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{split}
\setinterfaceconstant{splitcolor}{splitcolor}
\setinterfaceconstant{splitmethod}{splitmethod}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symausrichtung}
\setinterfaceconstant{symbol}{symbol}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{symbolset}
\setinterfaceconstant{symcolor}{symfarbe}
\setinterfaceconstant{symstyle}{symstil}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{synonymstil}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{text}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{textfarbe}
\setinterfaceconstant{textcommand}{textbefehl}
\setinterfaceconstant{textdistance}{textdistance}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{kopfspatium}
\setinterfaceconstant{topstate}{statusoben}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{typ}
\setinterfaceconstant{unit}{einheit}
\setinterfaceconstant{unknownreference}{unbekantereferenz}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{urlalternative}
\setinterfaceconstant{urlspace}{urlspatium}
\setinterfaceconstant{validate}{validieren}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{kopfoffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{art}
\setinterfaceconstant{wfactor}{bfaktor}
\setinterfaceconstant{white}{weiss}
\setinterfaceconstant{width}{breite}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfaktor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xformat}
\setinterfaceconstant{xstep}{xschritt}
diff --git a/Master/texmf-dist/tex/context/base/mult-def.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-def.mkii
index a75ef993f55..a75ef993f55 100644
--- a/Master/texmf-dist/tex/context/base/mult-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-en.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii
index b08070ba044..116868cc980 100644
--- a/Master/texmf-dist/tex/context/base/mult-en.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language en
%
\setinterfacevariable{Addition}{Addition}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Balloon}
\setinterfacevariable{Cap}{Cap}
\setinterfacevariable{Capital}{Capital}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{NextPage}
\setinterfacevariable{Numbers}{Numbers}
\setinterfacevariable{OpenNamedDocument}{OpenNamedDocument}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Paragraph}
\setinterfacevariable{PauseMovie}{PauseMovie}
\setinterfacevariable{PauseRendering}{PauseRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{action}
\setinterfacevariable{after}{after}
\setinterfacevariable{all}{all}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{always}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{appendices}
\setinterfacevariable{appendix}{appendix}
\setinterfacevariable{april}{april}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
\setinterfacevariable{atmargin}{atmargin}
\setinterfacevariable{atpage}{atpage}
+\setinterfacevariable{atrightmargin}{atrightmargin}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{august}
\setinterfacevariable{author}{author}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{back}
\setinterfacevariable{background}{background}
\setinterfacevariable{backmatter}{backmatter}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{bigpreference}
\setinterfacevariable{blank}{blank}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blockquote}
\setinterfacevariable{bodymatter}{bodymatter}
\setinterfacevariable{bodypart}{bodypart}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{boldslanted}
\setinterfacevariable{bookmark}{bookmark}
\setinterfacevariable{both}{both}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{bottom}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{broad}
\setinterfacevariable{buffer}{buffer}
\setinterfacevariable{by}{by}
\setinterfacevariable{calligraphic}{calligraphic}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{cap}
\setinterfacevariable{capital}{capital}
\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{chapter}
\setinterfacevariable{character}{character}
\setinterfacevariable{characters}{characters}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{color}
\setinterfacevariable{column}{column}
\setinterfacevariable{columns}{columns}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{command}
\setinterfacevariable{commands}{commands}
\setinterfacevariable{comment}{comment}
\setinterfacevariable{component}{component}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{concept}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{content}
\setinterfacevariable{contents}{contents}
\setinterfacevariable{continue}{continue}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{conversion}
\setinterfacevariable{current}{current}
\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{date}
\setinterfacevariable{day}{day}
\setinterfacevariable{december}{december}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{each}
\setinterfacevariable{edge}{edge}
+\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{empty}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{even}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{external}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{fact}
\setinterfacevariable{february}{february}
\setinterfacevariable{figure}{figure}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{friday}
\setinterfacevariable{frontmatter}{frontmatter}
\setinterfacevariable{frontpart}{frontpart}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{global}
\setinterfacevariable{graphic}{graphic}
\setinterfacevariable{graphics}{graphics}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indices}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{inherit}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{inleft}
+\setinterfacevariable{inleftedge}{inleftedge}
+\setinterfacevariable{inleftmargin}{inleftmargin}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{inmargin}
\setinterfacevariable{inner}{inner}
\setinterfacevariable{inneredge}{inneredge}
\setinterfacevariable{innermargin}{innermargin}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{inright}
+\setinterfacevariable{inrightedge}{inrightedge}
+\setinterfacevariable{inrightmargin}{inrightmargin}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interaction}
\setinterfacevariable{interactionmenu}{interactionmenu}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzi}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{intext}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{july}
\setinterfacevariable{june}{june}
\setinterfacevariable{keep}{keep}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{label}
\setinterfacevariable{landscape}{landscape}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legend}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{line}
\setinterfacevariable{linenote}{linenote}
\setinterfacevariable{lines}{lines}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{logos}
\setinterfacevariable{lohi}{lohi}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{loose}
\setinterfacevariable{low}{low}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{march}
\setinterfacevariable{margin}{margin}
\setinterfacevariable{marginedge}{marginedge}
+\setinterfacevariable{margintext}{margintext}
\setinterfacevariable{margintitle}{margintitle}
\setinterfacevariable{marking}{marking}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{minheight}
\setinterfacevariable{minwidth}{minwidth}
\setinterfacevariable{mirrored}{mirrored}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{monday}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monobold}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{month}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{nextoddpage}
\setinterfacevariable{nextpage}{nextpage}
\setinterfacevariable{nextsubpage}{nextsubpage}
+\setinterfacevariable{nine}{nine}
\setinterfacevariable{no}{no}
\setinterfacevariable{nocheck}{nocheck}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nofit}
\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{nomarking}
\setinterfacevariable{none}{none}
\setinterfacevariable{nonumber}{nonumber}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normal}
\setinterfacevariable{nospacing}{nospacing}
\setinterfacevariable{not}{not}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nothyphenated}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{off}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{on}
\setinterfacevariable{one}{one}
\setinterfacevariable{opposite}{opposite}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{outer}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{samepage}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansbold}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{sansserif}
\setinterfacevariable{saturday}{saturday}
\setinterfacevariable{screen}{screen}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{september}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{seven}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{short}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{singlesided}
+\setinterfacevariable{six}{six}
\setinterfacevariable{slanted}{slanted}
\setinterfacevariable{slantedbold}{slantedbold}
\setinterfacevariable{small}{small}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{smalltype}
\setinterfacevariable{somewhere}{somewhere}
\setinterfacevariable{sorted}{sorted}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{space}
\setinterfacevariable{spacing}{spacing}
\setinterfacevariable{speech}{speech}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{stopper}
\setinterfacevariable{stretch}{stretch}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{strict}
\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sym}
\setinterfacevariable{symbol}{symbol}
\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{system}
\setinterfacevariable{table}{table}
\setinterfacevariable{tablehead}{tablehead}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{underbars}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{unit}
\setinterfacevariable{units}{units}
\setinterfacevariable{unknown}{unknown}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{very}
\setinterfacevariable{verystrict}{verystrict}
\setinterfacevariable{verytolerant}{verytolerant}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{wednesday}
\setinterfacevariable{week}{week}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{wide}
\setinterfacevariable{width}{width}
\setinterfacevariable{word}{word}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{year}
\setinterfacevariable{yes}{yes}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{at}
\setinterfaceconstant{author}{author}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{big}
\setinterfaceconstant{blank}{blank}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blockway}
\setinterfaceconstant{bodyfont}{bodyfont}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{calculate}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{ccommand}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{click}
\setinterfaceconstant{clickin}{clickin}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{column}
\setinterfaceconstant{columndistance}{columndistance}
\setinterfaceconstant{columns}{columns}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{command}
\setinterfaceconstant{commandafter}{commandafter}
\setinterfaceconstant{commandbefore}{commandbefore}
\setinterfaceconstant{commands}{commands}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{component}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{compress}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{continue}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{coupling}
\setinterfaceconstant{couplingway}{couplingway}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{current}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{date}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{directory}
\setinterfaceconstant{display}{display}
\setinterfaceconstant{distance}{distance}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{dot}
\setinterfaceconstant{doublesided}{doublesided}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{evenmargin}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{fallback}
\setinterfaceconstant{family}{family}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{fieldbackgroundcolor}
\setinterfaceconstant{fieldframecolor}{fieldframecolor}
\setinterfaceconstant{fieldlayer}{fieldlayer}
\setinterfaceconstant{fieldoffset}{fieldoffset}
\setinterfaceconstant{file}{file}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{firstpage}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusout}
\setinterfaceconstant{footer}{footer}
\setinterfaceconstant{footerdistance}{footerdistance}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{foregroundcolor}
\setinterfaceconstant{foregroundstyle}{foregroundstyle}
\setinterfaceconstant{format}{format}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{frame}
\setinterfaceconstant{framecolor}{framecolor}
\setinterfaceconstant{framecorner}{framecorner}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{frameradius}
\setinterfaceconstant{frames}{frames}
\setinterfaceconstant{from}{from}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{get}
\setinterfaceconstant{global}{global}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{grid}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{hang}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{hoffset}
\setinterfaceconstant{horoffset}{horoffset}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{icommand}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{inbetween}
\setinterfaceconstant{increment}{increment}
\setinterfaceconstant{incrementnumber}{incrementnumber}
\setinterfaceconstant{indenting}{indenting}
\setinterfaceconstant{indentnext}{indentnext}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{indicator}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{inner}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaction}
\setinterfaceconstant{interlinespace}{interlinespace}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{items}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{label}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{lastpage}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{left}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{leftsubsentence}
\setinterfaceconstant{lefttext}{lefttext}
\setinterfaceconstant{leftwidth}{leftwidth}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{level}
\setinterfaceconstant{levels}{levels}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{nbottom}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{next}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nleft}
\setinterfaceconstant{nlines}{nlines}
\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{nright}
\setinterfaceconstant{ntop}{ntop}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{openaction}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{openpageaction}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{option}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{pagecolor}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{pagecommand}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{pagenumber}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{palet}
\setinterfaceconstant{paper}{paper}
\setinterfaceconstant{paragraph}{paragraph}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{place}
\setinterfaceconstant{placehead}{placehead}
\setinterfaceconstant{placestopper}{placestopper}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{printable}
\setinterfaceconstant{process}{process}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{radius}
\setinterfaceconstant{random}{random}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{reference}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{regionin}
\setinterfaceconstant{regionout}{regionout}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{repeat}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{resetnumber}
\setinterfaceconstant{resolution}{resolution}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{reverse}
\setinterfaceconstant{right}{right}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{rightcolor}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{rightedge}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{rightsubsentence}
\setinterfaceconstant{righttext}{righttext}
\setinterfaceconstant{rightwidth}{rightwidth}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotation}
\setinterfaceconstant{rule}{rule}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{scope}
\setinterfaceconstant{screen}{screen}
\setinterfaceconstant{section}{section}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{sectionnumber}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{spacebefore}
\setinterfaceconstant{spaceinbetween}{spaceinbetween}
\setinterfaceconstant{spacing}{spacing}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{split}
\setinterfaceconstant{splitcolor}{splitcolor}
\setinterfaceconstant{splitmethod}{splitmethod}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symalign}
\setinterfaceconstant{symbol}{symbol}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{symbolset}
\setinterfaceconstant{symcolor}{symcolor}
\setinterfaceconstant{symstyle}{symstyle}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{synonymstyle}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{text}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{textcolor}
\setinterfaceconstant{textcommand}{textcommand}
\setinterfaceconstant{textdistance}{textdistance}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{topspace}
\setinterfaceconstant{topstate}{topstate}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unit}
\setinterfaceconstant{unknownreference}{unknownreference}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{urlalternative}
\setinterfaceconstant{urlspace}{urlspace}
\setinterfaceconstant{validate}{validate}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{way}
\setinterfaceconstant{wfactor}{wfactor}
\setinterfaceconstant{white}{white}
\setinterfaceconstant{width}{width}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
\setinterfaceconstant{xstep}{xstep}
diff --git a/Master/texmf-dist/tex/context/base/mult-fr.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii
index d76da18d9e0..44251d72764 100644
--- a/Master/texmf-dist/tex/context/base/mult-fr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language fr
%
\setinterfacevariable{Addition}{Ajout}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Ballon}
\setinterfacevariable{Cap}{Cap}
\setinterfacevariable{Capital}{Capitale}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{PageSuivante}
\setinterfacevariable{Numbers}{Numeros}
\setinterfacevariable{OpenNamedDocument}{OuvreDocumentNomme}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Paragraphe}
\setinterfacevariable{PauseMovie}{PauseFilm}
\setinterfacevariable{PauseRendering}{PauseRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{action}
\setinterfacevariable{after}{apres}
\setinterfacevariable{all}{tout}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{toujours}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{annexes}
\setinterfacevariable{appendix}{annexe}
\setinterfacevariable{april}{avril}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
\setinterfacevariable{atmargin}{alamarge}
\setinterfacevariable{atpage}{alapage}
+\setinterfacevariable{atrightmargin}{atrightmargin}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{août}
\setinterfacevariable{author}{auteur}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{retour}
\setinterfacevariable{background}{arriereplan}
\setinterfacevariable{backmatter}{epilogue}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{grandepreference}
\setinterfacevariable{blank}{vide}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blockquote}
\setinterfacevariable{bodymatter}{texteprincipal}
\setinterfacevariable{bodypart}{corpsdetexte}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{inclinegras}
\setinterfacevariable{bookmark}{marquepage}
\setinterfacevariable{both}{lesdeux}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{inf}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{large}
\setinterfacevariable{buffer}{buffer}
\setinterfacevariable{by}{par}
\setinterfacevariable{calligraphic}{calligraphique}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{cap}
\setinterfacevariable{capital}{capitale}
\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{chapitre}
\setinterfacevariable{character}{caractere}
\setinterfacevariable{characters}{caracteres}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{couleur}
\setinterfacevariable{column}{colonne}
\setinterfacevariable{columns}{colonnes}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{commande}
\setinterfacevariable{commands}{commandes}
\setinterfacevariable{comment}{commentaire}
\setinterfacevariable{component}{composant}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{concept}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{contenu}
\setinterfacevariable{contents}{contenus}
\setinterfacevariable{continue}{continue}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{conversion}
\setinterfacevariable{current}{courant}
\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{date}
\setinterfacevariable{day}{jour}
\setinterfacevariable{december}{decembre}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{chaque}
\setinterfacevariable{edge}{bord}
+\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{vide}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{paire}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{external}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{fait}
\setinterfacevariable{february}{fevrier}
\setinterfacevariable{figure}{figure}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{vendredi}
\setinterfacevariable{frontmatter}{preambule}
\setinterfacevariable{frontpart}{preface}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{global}
\setinterfacevariable{graphic}{graphique}
\setinterfacevariable{graphics}{graphiques}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indices}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{herite}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{dansgauche}
+\setinterfacevariable{inleftedge}{dansbordgauche}
+\setinterfacevariable{inleftmargin}{dansmargegauche}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{dansmarge}
\setinterfacevariable{inner}{interieur}
\setinterfacevariable{inneredge}{bordinterieur}
\setinterfacevariable{innermargin}{margeinterieure}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{dansdroit}
+\setinterfacevariable{inrightedge}{dansborddroit}
+\setinterfacevariable{inrightmargin}{dansmargedroite}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interaction}
\setinterfacevariable{interactionmenu}{menuinteraction}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzi}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{danstexte}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{juillet}
\setinterfacevariable{june}{juin}
\setinterfacevariable{keep}{maintient}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{etiquette}
\setinterfacevariable{landscape}{paysage}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legende}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{ligne}
\setinterfacevariable{linenote}{noteligne}
\setinterfacevariable{lines}{lignes}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{logos}
\setinterfacevariable{lohi}{baha}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{perte}
\setinterfacevariable{low}{bas}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{mars}
\setinterfacevariable{margin}{marge}
\setinterfacevariable{marginedge}{bordmarge}
+\setinterfacevariable{margintext}{textemarge}
\setinterfacevariable{margintitle}{titremarge}
\setinterfacevariable{marking}{marquage}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{hauteurmin}
\setinterfacevariable{minwidth}{largeurmin}
\setinterfacevariable{mirrored}{reflete}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{lundi}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monogras}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{mois}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{pageimpairesuivante}
\setinterfacevariable{nextpage}{pagesuivante}
\setinterfacevariable{nextsubpage}{souspagesuivante}
+\setinterfacevariable{nine}{nine}
\setinterfacevariable{no}{non}
\setinterfacevariable{nocheck}{nonverifie}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nofit}
\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{sansmarquage}
\setinterfacevariable{none}{rien}
\setinterfacevariable{nonumber}{sansnumero}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normal}
\setinterfacevariable{nospacing}{sansespacement}
\setinterfacevariable{not}{pas}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nonsuspendu}
\setinterfacevariable{nothyphenated}{nothyphenated}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{desactive}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{actif}
\setinterfacevariable{one}{un}
\setinterfacevariable{opposite}{opposition}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{exterieur}
\setinterfacevariable{outeredge}{bordexterieur}
\setinterfacevariable{outermargin}{margeexterieure}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{memepage}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansgras}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{sansserif}
\setinterfacevariable{saturday}{samedi}
\setinterfacevariable{screen}{ecran}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{septembre}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{seven}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{short}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{recto}
+\setinterfacevariable{six}{six}
\setinterfacevariable{slanted}{incline}
\setinterfacevariable{slantedbold}{grasincline}
\setinterfacevariable{small}{petit}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{petittype}
\setinterfacevariable{somewhere}{qqpart}
\setinterfacevariable{sorted}{trie}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{espace}
\setinterfacevariable{spacing}{espacement}
\setinterfacevariable{speech}{discours}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{stoppe}
\setinterfacevariable{stopper}{stopper}
\setinterfacevariable{stretch}{etire}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{strict}
\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sym}
\setinterfacevariable{symbol}{symbole}
\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{systeme}
\setinterfacevariable{table}{tableau}
\setinterfacevariable{tablehead}{tetetableau}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{sousligne}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{unite}
\setinterfacevariable{units}{unites}
\setinterfacevariable{unknown}{inconnu}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{tres}
\setinterfacevariable{verystrict}{tresstrict}
\setinterfacevariable{verytolerant}{trestolerant}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{mercredi}
\setinterfacevariable{week}{semaine}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{ample}
\setinterfacevariable{width}{largeur}
\setinterfacevariable{word}{mot}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{annee}
\setinterfacevariable{yes}{oui}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{a}
\setinterfaceconstant{author}{auteur}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{grand}
\setinterfaceconstant{blank}{vide}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blockway}
\setinterfaceconstant{bodyfont}{policecorps}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{calculer}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{ccommande}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{clic}
\setinterfaceconstant{clickin}{clicinterieur}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{colonne}
\setinterfaceconstant{columndistance}{distancecolonne}
\setinterfaceconstant{columns}{colonnes}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{commande}
\setinterfaceconstant{commandafter}{commandeapres}
\setinterfaceconstant{commandbefore}{commandeavant}
\setinterfaceconstant{commands}{commandes}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{composant}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{compress}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{continue}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{couplage}
\setinterfaceconstant{couplingway}{modecouplage}
\setinterfaceconstant{criterium}{critere}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{courant}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{pointille}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{date}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{repertoire}
\setinterfaceconstant{display}{affichage}
\setinterfaceconstant{distance}{distance}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{point}
\setinterfaceconstant{doublesided}{rectoverso}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{margepaire}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansion}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{fallback}
\setinterfaceconstant{family}{famille}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{couleurarrierreplanchamp}
\setinterfaceconstant{fieldframecolor}{couleurcadrechamp}
\setinterfaceconstant{fieldlayer}{calquechamp}
\setinterfaceconstant{fieldoffset}{offsetchamp}
\setinterfaceconstant{file}{fichier}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{premierepage}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusout}
\setinterfaceconstant{footer}{pdp}
\setinterfaceconstant{footerdistance}{dsitancepdp}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{couleurpremierplan}
\setinterfaceconstant{foregroundstyle}{stylepremierplan}
\setinterfaceconstant{format}{formatter}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{cadre}
\setinterfaceconstant{framecolor}{couleurcadre}
\setinterfaceconstant{framecorner}{coincadre}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{rayoncadre}
\setinterfaceconstant{frames}{cadres}
\setinterfaceconstant{from}{de}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{obtient}
\setinterfaceconstant{global}{global}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{grille}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{suspend}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{decalagehauteur}
\setinterfaceconstant{horoffset}{horoffset}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{icommande}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{entre}
\setinterfaceconstant{increment}{incremente}
\setinterfaceconstant{incrementnumber}{incrementenumero}
\setinterfaceconstant{indenting}{composeenalinea}
\setinterfaceconstant{indentnext}{indentesuivant}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{indicateur}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{interieur}
\setinterfaceconstant{innermargin}{margeinterieure}
\setinterfaceconstant{inputfile}{fichierentree}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaction}
\setinterfaceconstant{interlinespace}{espaceinterligne}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elements}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{motcle}
\setinterfaceconstant{label}{etiquette}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{dernierepage}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{gauche}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{sousphrasegauche}
\setinterfaceconstant{lefttext}{textegauche}
\setinterfaceconstant{leftwidth}{largeurgauche}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{niveau}
\setinterfaceconstant{levels}{niveaux}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{ninf}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{suivant}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{ngauche}
\setinterfaceconstant{nlines}{nlignes}
\setinterfaceconstant{norm}{norme}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{ndroite}
\setinterfaceconstant{ntop}{nsup}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{actionouverture}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{actionouverturepage}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{option}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{couleurpage}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{commandepage}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{numeropage}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{palette}
\setinterfaceconstant{paper}{papier}
\setinterfaceconstant{paragraph}{paragraphe}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{place}
\setinterfaceconstant{placehead}{placetete}
\setinterfaceconstant{placestopper}{emplacementstopper}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{editable}
\setinterfaceconstant{process}{process}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{rayon}
\setinterfaceconstant{random}{aleatoire}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{reference}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{entreregion}
\setinterfaceconstant{regionout}{regionexterieure}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{repete}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{raznumero}
\setinterfaceconstant{resolution}{resolution}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{inverse}
\setinterfaceconstant{right}{droite}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{couleurdroite}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{borddroit}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{sousphrasedroite}
\setinterfaceconstant{righttext}{textedroit}
\setinterfaceconstant{rightwidth}{largeurdroite}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotation}
\setinterfaceconstant{rule}{ligne}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{scope}
\setinterfaceconstant{screen}{ecran}
\setinterfaceconstant{section}{section}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{numerosection}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{espaceavant}
\setinterfaceconstant{spaceinbetween}{spaceinbetween}
\setinterfaceconstant{spacing}{espacement}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{split}
\setinterfaceconstant{splitcolor}{splitcolor}
\setinterfaceconstant{splitmethod}{splitmethod}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symalignement}
\setinterfaceconstant{symbol}{symbole}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{jeusymbole}
\setinterfaceconstant{symcolor}{couleursym}
\setinterfaceconstant{symstyle}{stylesym}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{stylesynonyme}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{texte}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{couleurtexte}
\setinterfaceconstant{textcommand}{commandetexte}
\setinterfaceconstant{textdistance}{distancetexte}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{espacesup}
\setinterfaceconstant{topstate}{etatsup}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unite}
\setinterfaceconstant{unknownreference}{referenceinconnue}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{alternativeurl}
\setinterfaceconstant{urlspace}{espaceurl}
\setinterfaceconstant{validate}{valider}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{mode}
\setinterfaceconstant{wfactor}{facteurlargeur}
\setinterfaceconstant{white}{blanc}
\setinterfaceconstant{width}{largeur}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
\setinterfaceconstant{xstep}{xstep}
diff --git a/Master/texmf-dist/tex/context/base/mult-fst.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-fst.mkii
index 36c3f181f22..36c3f181f22 100644
--- a/Master/texmf-dist/tex/context/base/mult-fst.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-fst.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-ini.mkii
index 76f6d69f2b8..76f6d69f2b8 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-it.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii
index 6474d93c4c3..e6de935e67a 100644
--- a/Master/texmf-dist/tex/context/base/mult-it.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language it
%
\setinterfacevariable{Addition}{Aggiunta}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Pallone}
\setinterfacevariable{Cap}{Cap}
\setinterfacevariable{Capital}{Maiuscolo}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{PaginaSuccessiva}
\setinterfacevariable{Numbers}{Numeri}
\setinterfacevariable{OpenNamedDocument}{OpenNamedDocument}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Capoverso}
\setinterfacevariable{PauseMovie}{PausaFilm}
\setinterfacevariable{PauseRendering}{PauseRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{azione}
\setinterfacevariable{after}{dopo}
\setinterfacevariable{all}{tutti}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{sempre}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{appendici}
\setinterfacevariable{appendix}{appendice}
\setinterfacevariable{april}{aprile}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
\setinterfacevariable{atmargin}{almargine}
\setinterfacevariable{atpage}{apagina}
+\setinterfacevariable{atrightmargin}{atrightmargin}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{agosto}
\setinterfacevariable{author}{autore}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{dietro}
\setinterfacevariable{background}{sfondo}
\setinterfacevariable{backmatter}{postambolo}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{grandepreferenza}
\setinterfacevariable{blank}{rigovuoto}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blockquote}
\setinterfacevariable{bodymatter}{testiprincipali}
\setinterfacevariable{bodypart}{testoprincipale}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{grassettoinclinato}
\setinterfacevariable{bookmark}{segnalibro}
\setinterfacevariable{both}{entrambi}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{fondo}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{ampio}
\setinterfacevariable{buffer}{buffer}
\setinterfacevariable{by}{da}
\setinterfacevariable{calligraphic}{calligrafico}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{cap}
\setinterfacevariable{capital}{maiuscolo}
\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{capitolo}
\setinterfacevariable{character}{lettera}
\setinterfacevariable{characters}{lettere}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{colore}
\setinterfacevariable{column}{colonna}
\setinterfacevariable{columns}{colonne}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{comando}
\setinterfacevariable{commands}{comandi}
\setinterfacevariable{comment}{commento}
\setinterfacevariable{component}{componente}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{concetto}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{indice}
\setinterfacevariable{contents}{indici}
\setinterfacevariable{continue}{continua}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{coversione}
\setinterfacevariable{current}{corrente}
\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{data}
\setinterfacevariable{day}{giorno}
\setinterfacevariable{december}{dicembre}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{ogni}
\setinterfacevariable{edge}{bordo}
+\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{vuoto}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{pari}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{esterno}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{fatto}
\setinterfacevariable{february}{febbraio}
\setinterfacevariable{figure}{figura}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{venerdi}
\setinterfacevariable{frontmatter}{preambolo}
\setinterfacevariable{frontpart}{prefazione}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{globale}
\setinterfacevariable{graphic}{grafico}
\setinterfacevariable{graphics}{grafici}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indicianalitici}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{inherit}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{insinistra}
+\setinterfacevariable{inleftedge}{inlatosinistro}
+\setinterfacevariable{inleftmargin}{inmarginesinistro}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{inmargine}
\setinterfacevariable{inner}{interno}
\setinterfacevariable{inneredge}{bordointerno}
\setinterfacevariable{innermargin}{margineinterno}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{indestra}
+\setinterfacevariable{inrightedge}{inlatodestro}
+\setinterfacevariable{inrightmargin}{inmarginedestro}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interazione}
\setinterfacevariable{interactionmenu}{menuinterattivo}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzi}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{intesto}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{luglio}
\setinterfacevariable{june}{giugno}
\setinterfacevariable{keep}{mantieni}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{etichetta}
\setinterfacevariable{landscape}{orizzontale}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legenda}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{riga}
\setinterfacevariable{linenote}{linenote}
\setinterfacevariable{lines}{righe}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{loghi}
\setinterfacevariable{lohi}{pedap}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{lento}
\setinterfacevariable{low}{basso}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{marzo}
\setinterfacevariable{margin}{margine}
\setinterfacevariable{marginedge}{bordomargine}
+\setinterfacevariable{margintext}{testoinmargine}
\setinterfacevariable{margintitle}{titoloinmargine}
\setinterfacevariable{marking}{marcatura}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{altezzamin}
\setinterfacevariable{minwidth}{ampiezzamin}
\setinterfacevariable{mirrored}{riflesso}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{lunedi}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monograssetto}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{mese}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{paginadisparisuccessiva}
\setinterfacevariable{nextpage}{paginasuccessiva}
\setinterfacevariable{nextsubpage}{sottopaginasuccessiva}
+\setinterfacevariable{nine}{nine}
\setinterfacevariable{no}{no}
\setinterfacevariable{nocheck}{nocheck}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nofit}
\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{nomarcature}
\setinterfacevariable{none}{nessuno}
\setinterfacevariable{nonumber}{nonumber}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normale}
\setinterfacevariable{nospacing}{nospacing}
\setinterfacevariable{not}{non}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nonsospeso}
\setinterfacevariable{nothyphenated}{nonsillabato}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{disattivo}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{attivo}
\setinterfacevariable{one}{uno}
\setinterfacevariable{opposite}{opposto}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{esterno}
\setinterfacevariable{outeredge}{bordoesterno}
\setinterfacevariable{outermargin}{margineesterno}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{stessapagina}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansgrassetto}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{sansserif}
\setinterfacevariable{saturday}{sabato}
\setinterfacevariable{screen}{schermo}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{settembre}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{vicino}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{seven}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{short}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{facciasingola}
+\setinterfacevariable{six}{six}
\setinterfacevariable{slanted}{inclinato}
\setinterfacevariable{slantedbold}{inclinatograssetto}
\setinterfacevariable{small}{piccolo}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{piccolotype}
\setinterfacevariable{somewhere}{daqualcheparte}
\setinterfacevariable{sorted}{ordinato}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{spazio}
\setinterfacevariable{spacing}{spaziatura}
\setinterfacevariable{speech}{speech}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{termina}
\setinterfacevariable{stopper}{stopper}
\setinterfacevariable{stretch}{dilata}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{rigido}
\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sim}
\setinterfacevariable{symbol}{simbolo}
\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{sistema}
\setinterfacevariable{table}{tabella}
\setinterfacevariable{tablehead}{testatabella}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{sottolinee}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{unita}
\setinterfacevariable{units}{unita}
\setinterfacevariable{unknown}{ignoto}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{molto}
\setinterfacevariable{verystrict}{moltorigido}
\setinterfacevariable{verytolerant}{moltotollerante}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{mercoledi}
\setinterfacevariable{week}{settimana}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{ampio}
\setinterfacevariable{width}{ampiezza}
\setinterfacevariable{word}{parola}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{anno}
\setinterfacevariable{yes}{si}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{ad}
\setinterfaceconstant{author}{autore}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{grande}
\setinterfaceconstant{blank}{rigovuoto}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blockway}
\setinterfaceconstant{bodyfont}{fonttesto}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{calcola}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{ccomando}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{click}
\setinterfaceconstant{clickin}{clickdentro}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{colonna}
\setinterfaceconstant{columndistance}{distanzacolonne}
\setinterfaceconstant{columns}{colonne}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{comando}
\setinterfaceconstant{commandafter}{comdandodopo}
\setinterfaceconstant{commandbefore}{comandoprima}
\setinterfaceconstant{commands}{comandi}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{component}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{compress}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{continua}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{accoppiamento}
\setinterfaceconstant{couplingway}{modoaccoppiamento}
\setinterfaceconstant{criterium}{criterio}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{corrente}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{data}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{directory}
\setinterfaceconstant{display}{display}
\setinterfaceconstant{distance}{distanza}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{punto}
\setinterfaceconstant{doublesided}{doppiafaccia}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{marginepari}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{espansione}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{fallback}
\setinterfaceconstant{family}{famiglia}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{coloresfondocampo}
\setinterfaceconstant{fieldframecolor}{colorecornicecampo}
\setinterfaceconstant{fieldlayer}{fieldlayer}
\setinterfaceconstant{fieldoffset}{offsetcampo}
\setinterfaceconstant{file}{file}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{primapagina}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusout}
\setinterfaceconstant{footer}{piedipagina}
\setinterfaceconstant{footerdistance}{distanzapdp}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{coloreprimopiano}
\setinterfaceconstant{foregroundstyle}{foregroundstyle}
\setinterfaceconstant{format}{format}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{cornice}
\setinterfaceconstant{framecolor}{colorecornice}
\setinterfaceconstant{framecorner}{angolocornice}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{raggiocornice}
\setinterfaceconstant{frames}{cornici}
\setinterfaceconstant{from}{da}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{prendi}
\setinterfaceconstant{global}{globale}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{griglia}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{sospendi}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{hoffset}
\setinterfaceconstant{horoffset}{horoffset}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{icomando}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{tra}
\setinterfaceconstant{increment}{incremento}
\setinterfaceconstant{incrementnumber}{incrementanumero}
\setinterfaceconstant{indenting}{rientro}
\setinterfaceconstant{indentnext}{rientrasuccessivo}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{indicatore}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{interno}
\setinterfaceconstant{innermargin}{margineinterno}
\setinterfaceconstant{inputfile}{inputfile}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interazione}
\setinterfaceconstant{interlinespace}{interlinea}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elementi}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{parolachiave}
\setinterfaceconstant{label}{etichetta}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{ultimapagina}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{sinistra}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{sottofrasesinistra}
\setinterfaceconstant{lefttext}{testosinistro}
\setinterfaceconstant{leftwidth}{ampiezzasinistra}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{livello}
\setinterfaceconstant{levels}{livelli}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{nfondo}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{successivo}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nsinistra}
\setinterfaceconstant{nlines}{nrighe}
\setinterfaceconstant{norm}{norma}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{ndestra}
\setinterfaceconstant{ntop}{ncima}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{azioneapri}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{azioneapripagina}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{opzione}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{colorepagina}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{comandopagina}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{numeropagina}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{tavolozza}
\setinterfaceconstant{paper}{carta}
\setinterfaceconstant{paragraph}{capoverso}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{metti}
\setinterfaceconstant{placehead}{mettitesta}
\setinterfaceconstant{placestopper}{mettistopper}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{stampabile}
\setinterfaceconstant{process}{process}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{raggio}
\setinterfaceconstant{random}{casuale}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{riferimento}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{entraregione}
\setinterfaceconstant{regionout}{esciregione}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{ripeti}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{resetnumber}
\setinterfaceconstant{resolution}{risoluzione}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{invertito}
\setinterfaceconstant{right}{destra}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{coloredestra}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{bordodestro}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{sottofrasedestra}
\setinterfaceconstant{righttext}{testodestro}
\setinterfaceconstant{rightwidth}{ampiezzadestra}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotazione}
\setinterfaceconstant{rule}{linea}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{scope}
\setinterfaceconstant{screen}{schermo}
\setinterfaceconstant{section}{sezione}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{numerosezione}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{spazioprima}
\setinterfaceconstant{spaceinbetween}{spaceinbetween}
\setinterfaceconstant{spacing}{spaziatura}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{separa}
\setinterfaceconstant{splitcolor}{splitcolor}
\setinterfaceconstant{splitmethod}{splitmethod}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symallinea}
\setinterfaceconstant{symbol}{simbolo}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{setsimboli}
\setinterfaceconstant{symcolor}{coloresimbolo}
\setinterfaceconstant{symstyle}{stilesimbolo}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{stilesinonimi}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{testo}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{coloretesto}
\setinterfaceconstant{textcommand}{comandotesto}
\setinterfaceconstant{textdistance}{distanzatesto}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{spaziocima}
\setinterfaceconstant{topstate}{statocima}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unita}
\setinterfaceconstant{unknownreference}{riferimentoingoto}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{alternativaurl}
\setinterfaceconstant{urlspace}{spaziourl}
\setinterfaceconstant{validate}{verifica}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{modo}
\setinterfaceconstant{wfactor}{wfactor}
\setinterfaceconstant{white}{bianco}
\setinterfaceconstant{width}{ampiezza}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
\setinterfaceconstant{xstep}{xstep}
diff --git a/Master/texmf-dist/tex/context/base/mult-mcs.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mcs.mkii
index c733798e642..c733798e642 100644
--- a/Master/texmf-dist/tex/context/base/mult-mcs.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mcs.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mde.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mde.mkii
index 4d7f009e482..4d7f009e482 100644
--- a/Master/texmf-dist/tex/context/base/mult-mde.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mde.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-men.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-men.mkii
index a8d42935602..a8d42935602 100644
--- a/Master/texmf-dist/tex/context/base/mult-men.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-men.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mfr.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mfr.mkii
index 7fee954c039..7fee954c039 100644
--- a/Master/texmf-dist/tex/context/base/mult-mfr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mfr.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mit.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mit.mkii
index 9d09e267654..9d09e267654 100644
--- a/Master/texmf-dist/tex/context/base/mult-mit.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mit.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mnl.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mnl.mkii
index fb527d4adeb..fb527d4adeb 100644
--- a/Master/texmf-dist/tex/context/base/mult-mnl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mnl.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mno.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mno.mkii
index bbbc3a6585c..bbbc3a6585c 100644
--- a/Master/texmf-dist/tex/context/base/mult-mno.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mno.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mpe.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mpe.mkii
index a8d42935602..a8d42935602 100644
--- a/Master/texmf-dist/tex/context/base/mult-mpe.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mpe.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-mro.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-mro.mkii
index 70673c31717..70673c31717 100644
--- a/Master/texmf-dist/tex/context/base/mult-mro.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-mro.mkii
diff --git a/Master/texmf-dist/tex/context/base/mult-nl.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii
index 22350dc50c3..8c2063ea8d6 100644
--- a/Master/texmf-dist/tex/context/base/mult-nl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language nl
%
\setinterfacevariable{Addition}{Toevoeging}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Ballon}
\setinterfacevariable{Cap}{Kap}
\setinterfacevariable{Capital}{Kapitaal}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{VolgendePagina}
\setinterfacevariable{Numbers}{Cijfers}
\setinterfacevariable{OpenNamedDocument}{OpenDocumentOpNaam}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Paragraaf}
\setinterfacevariable{PauseMovie}{PauzeerFilm}
\setinterfacevariable{PauseRendering}{PauzeerRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{actie}
\setinterfacevariable{after}{na}
\setinterfacevariable{all}{alles}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{altijd}
\setinterfacevariable{and}{en}
\setinterfacevariable{answerarea}{antwoordgebied}
\setinterfacevariable{appendices}{bijlagen}
\setinterfacevariable{appendix}{bijlage}
\setinterfacevariable{april}{april}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{oplinkermarge}
\setinterfacevariable{atmargin}{opmarge}
\setinterfacevariable{atpage}{oppagina}
+\setinterfacevariable{atrightmargin}{oprechtermarge}
\setinterfacevariable{attachment}{aanhangsel}
\setinterfacevariable{august}{augustus}
\setinterfacevariable{author}{auteur}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{terug}
\setinterfacevariable{background}{achtergrond}
\setinterfacevariable{backmatter}{uitleidingen}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{groter}
\setinterfacevariable{bigpreference}{grotevoorkeur}
\setinterfacevariable{blank}{blanko}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blokcitaat}
\setinterfacevariable{bodymatter}{hoofdteksten}
\setinterfacevariable{bodypart}{hoofdtekst}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{vetschuin}
\setinterfacevariable{bookmark}{bookmark}
\setinterfacevariable{both}{beide}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{onder}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{ruim}
\setinterfacevariable{buffer}{buffer}
\setinterfacevariable{by}{per}
\setinterfacevariable{calligraphic}{calligrafie}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{kap}
\setinterfacevariable{capital}{kapitaal}
\setinterfacevariable{center}{centreer}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{hoofdstuk}
\setinterfacevariable{character}{letter}
\setinterfacevariable{characters}{letters}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemie}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{kleur}
\setinterfacevariable{column}{kolom}
\setinterfacevariable{columns}{kolommen}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{commando}
\setinterfacevariable{commands}{commandos}
\setinterfacevariable{comment}{commentaar}
\setinterfacevariable{component}{onderdeel}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{concept}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{inhoud}
\setinterfacevariable{contents}{inhouden}
\setinterfacevariable{continue}{verder}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{conversie}
\setinterfacevariable{current}{huidige}
\setinterfacevariable{cutspace}{snijwit}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{datum}
\setinterfacevariable{day}{dag}
\setinterfacevariable{december}{december}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{omlaag}
\setinterfacevariable{each}{elk}
\setinterfacevariable{edge}{rand}
+\setinterfacevariable{eight}{acht}
\setinterfacevariable{embed}{sluitin}
\setinterfacevariable{empty}{leeg}
\setinterfacevariable{end}{eind}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{even}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{extern}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{gegeven}
\setinterfacevariable{february}{februari}
\setinterfacevariable{figure}{figuur}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{vrijdag}
\setinterfacevariable{frontmatter}{inleidingen}
\setinterfacevariable{frontpart}{inleiding}
+\setinterfacevariable{fullhz}{fullenhz}
\setinterfacevariable{global}{globaal}
\setinterfacevariable{graphic}{grafiek}
\setinterfacevariable{graphics}{grafieken}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indices}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{erf}
+\setinterfacevariable{ininner}{inbinnen}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{inlinker}
+\setinterfacevariable{inleftedge}{inlinkerrand}
+\setinterfacevariable{inleftmargin}{inlinkermarge}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{inmarge}
\setinterfacevariable{inner}{binnen}
\setinterfacevariable{inneredge}{binnenrand}
\setinterfacevariable{innermargin}{binnenmarge}
+\setinterfacevariable{inother}{inandere}
+\setinterfacevariable{inouter}{inbuiten}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{inrechter}
+\setinterfacevariable{inrightedge}{inrechterrand}
+\setinterfacevariable{inrightmargin}{inrechtermarge}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interactie}
\setinterfacevariable{interactionmenu}{interactiemenu}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzos}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{intekst}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{juli}
\setinterfacevariable{june}{juni}
\setinterfacevariable{keep}{handhaaf}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{label}
\setinterfacevariable{landscape}{liggend}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legenda}
\setinterfacevariable{less}{minder}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{regel}
\setinterfacevariable{linenote}{regelnoot}
\setinterfacevariable{lines}{regels}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{logos}
\setinterfacevariable{lohi}{laho}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{los}
\setinterfacevariable{low}{laag}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{maart}
\setinterfacevariable{margin}{marge}
\setinterfacevariable{marginedge}{kantlijn}
+\setinterfacevariable{margintext}{margetekst}
\setinterfacevariable{margintitle}{margetitel}
\setinterfacevariable{marking}{markering}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{minhoogte}
\setinterfacevariable{minwidth}{minbreedte}
\setinterfacevariable{mirrored}{gespiegeld}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{maandag}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monovet}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{maand}
\setinterfacevariable{more}{meer}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{volgendeonevenpagina}
\setinterfacevariable{nextpage}{volgendepagina}
\setinterfacevariable{nextsubpage}{volgendesubpagina}
+\setinterfacevariable{nine}{negen}
\setinterfacevariable{no}{nee}
\setinterfacevariable{nocheck}{geencontrole}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nietpassend}
\setinterfacevariable{nogrid}{geengrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{geenhz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{geenmarkering}
\setinterfacevariable{none}{geen}
\setinterfacevariable{nonumber}{geennummer}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normaal}
\setinterfacevariable{nospacing}{geenspatiering}
\setinterfacevariable{not}{niet}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{niethangend}
\setinterfacevariable{nothyphenated}{nietafgebroken}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{uit}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{oud}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{aan}
\setinterfacevariable{one}{een}
\setinterfacevariable{opposite}{naast}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{buiten}
\setinterfacevariable{outeredge}{buitenrand}
\setinterfacevariable{outermargin}{buitenmarge}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{zelfdepagina}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansvet}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{schreefloos}
\setinterfacevariable{saturday}{zaterdag}
\setinterfacevariable{screen}{raster}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{september}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{aanelkaar}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{zeven}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{kort}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{enkelzijdig}
+\setinterfacevariable{six}{zes}
\setinterfacevariable{slanted}{schuin}
\setinterfacevariable{slantedbold}{schuinvet}
\setinterfacevariable{small}{klein}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{kleintype}
\setinterfacevariable{somewhere}{ergens}
\setinterfacevariable{sorted}{gesorteerd}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{spatie}
\setinterfacevariable{spacing}{spatiering}
\setinterfacevariable{speech}{spraak}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{afsluiter}
\setinterfacevariable{stretch}{rek}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{streng}
\setinterfacevariable{strong}{sterk}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sym}
\setinterfacevariable{symbol}{symbool}
\setinterfacevariable{synchronize}{synchroniseer}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{systeem}
\setinterfacevariable{table}{tabel}
\setinterfacevariable{tablehead}{tabelkop}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{onderstrepen}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{eenheid}
\setinterfacevariable{units}{eenheden}
\setinterfacevariable{unknown}{onbekend}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{zeer}
\setinterfacevariable{verystrict}{zeerstreng}
\setinterfacevariable{verytolerant}{zeersoepel}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{zwak}
\setinterfacevariable{wednesday}{woensdag}
\setinterfacevariable{week}{week}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{breed}
\setinterfacevariable{width}{breedte}
\setinterfacevariable{word}{woord}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{jaar}
\setinterfacevariable{yes}{ja}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{op}
\setinterfaceconstant{author}{auteur}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{groot}
\setinterfaceconstant{blank}{blanko}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blokwijze}
\setinterfaceconstant{bodyfont}{korps}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{bereken}
\setinterfaceconstant{category}{categorie}
\setinterfaceconstant{ccommand}{ccommando}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{klik}
\setinterfaceconstant{clickin}{klikin}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{kolom}
\setinterfaceconstant{columndistance}{kolomafstand}
\setinterfaceconstant{columns}{kolommen}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{commando}
\setinterfaceconstant{commandafter}{nacommando}
\setinterfaceconstant{commandbefore}{voorcommando}
\setinterfaceconstant{commands}{commandos}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{component}
\setinterfaceconstant{compoundhyphen}{koppelteken}
\setinterfaceconstant{compress}{comprimeren}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{betreft}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{doorgaan}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{koppeling}
\setinterfaceconstant{couplingway}{koppelwijze}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{huidige}
\setinterfaceconstant{cutspace}{snijwit}
\setinterfaceconstant{dash}{streep}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{datum}
\setinterfaceconstant{deepnumbercommand}{diepnummercommando}
\setinterfaceconstant{deeptextcommand}{dieptekstcommando}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{directory}
\setinterfaceconstant{display}{scherm}
\setinterfaceconstant{distance}{afstand}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{punt}
\setinterfaceconstant{doublesided}{dubbelzijdig}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{evenmarge}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansie}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{terugval}
\setinterfaceconstant{family}{soort}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{veldachtergrondkleur}
\setinterfaceconstant{fieldframecolor}{veldkaderkleur}
\setinterfaceconstant{fieldlayer}{veldlaag}
\setinterfaceconstant{fieldoffset}{veldoffset}
\setinterfaceconstant{file}{file}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{eerstepagina}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusuit}
\setinterfaceconstant{footer}{voet}
\setinterfaceconstant{footerdistance}{voetafstand}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{voorgrondkleur}
\setinterfaceconstant{foregroundstyle}{voorgrondletter}
\setinterfaceconstant{format}{formatteer}
+\setinterfaceconstant{fractions}{breuken}
\setinterfaceconstant{frame}{kader}
\setinterfaceconstant{framecolor}{kaderkleur}
\setinterfaceconstant{framecorner}{kaderhoek}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{kaderstraal}
\setinterfaceconstant{frames}{hokjes}
\setinterfaceconstant{from}{van}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{haal}
\setinterfaceconstant{global}{globaal}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{grid}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{hang}
\setinterfaceconstant{hcompact}{hcomprimeer}
\setinterfaceconstant{headalign}{kopuitlijnen}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{hoffset}
\setinterfaceconstant{horoffset}{rugoffset}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{icommando}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{tussen}
\setinterfaceconstant{increment}{verhoog}
\setinterfaceconstant{incrementnumber}{verhoognummer}
\setinterfaceconstant{indenting}{inspringen}
\setinterfaceconstant{indentnext}{springvolgendein}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{aanduiding}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{binnen}
\setinterfaceconstant{innermargin}{binnenmarge}
\setinterfaceconstant{inputfile}{inputfile}
\setinterfaceconstant{insidesection}{binnensectie}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interactie}
\setinterfaceconstant{interlinespace}{interlinie}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemuitlijnen}
\setinterfaceconstant{items}{items}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{sleutelexpansie}
\setinterfaceconstant{keys}{sleutels}
\setinterfaceconstant{keyword}{trefwoord}
\setinterfaceconstant{label}{label}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{laatstepagina}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{links}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{linkersubzin}
\setinterfaceconstant{lefttext}{linkertekst}
\setinterfaceconstant{leftwidth}{linkerbreedte}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{minder}
\setinterfaceconstant{level}{niveau}
\setinterfaceconstant{levels}{niveaus}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{nonder}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{volgende}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nlinks}
\setinterfaceconstant{nlines}{nregels}
\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{nrechts}
\setinterfaceconstant{ntop}{nboven}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{openactie}
\setinterfaceconstant{openpage}{openpagina}
\setinterfaceconstant{openpageaction}{openpaginaactie}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{optie}
\setinterfaceconstant{order}{volgorde}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{paginakleur}
\setinterfaceconstant{pagecolormodel}{paginakleurmodel}
\setinterfaceconstant{pagecommand}{paginacommando}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{paginanummer}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{palet}
\setinterfaceconstant{paper}{papier}
\setinterfaceconstant{paragraph}{alinea}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{plaatsen}
\setinterfaceconstant{placehead}{plaatskop}
\setinterfaceconstant{placestopper}{plaatsafsluiter}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{printbaar}
\setinterfaceconstant{process}{proces}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{straal}
\setinterfaceconstant{random}{willekeur}
\setinterfaceconstant{range}{bereik}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{referentie}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{refereren}
\setinterfaceconstant{region}{gebied}
\setinterfaceconstant{regionin}{gebiedin}
\setinterfaceconstant{regionout}{gebieduit}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{herhaal}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{resetnummer}
\setinterfaceconstant{resolution}{resolutie}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{omgekeerd}
\setinterfaceconstant{right}{rechts}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{rechterkleur}
\setinterfaceconstant{rightcompoundhyphen}{rechterkoppelteken}
\setinterfaceconstant{rightedge}{rechterrand}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{rechtersubzin}
\setinterfaceconstant{righttext}{rechtertekst}
\setinterfaceconstant{rightwidth}{rechterbreedte}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotatie}
\setinterfaceconstant{rule}{lijn}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{scope}
\setinterfaceconstant{screen}{raster}
\setinterfaceconstant{section}{sectie}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{sectienummer}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{voorwit}
\setinterfaceconstant{spaceinbetween}{tussenwit}
\setinterfaceconstant{spacing}{spatiering}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{splitsen}
\setinterfaceconstant{splitcolor}{splitskleur}
\setinterfaceconstant{splitmethod}{splitsmethode}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symuitlijnen}
\setinterfaceconstant{symbol}{symbool}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{symboolset}
\setinterfaceconstant{symcolor}{symkleur}
\setinterfaceconstant{symstyle}{symletter}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{synoniemletter}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{tekst}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{tekstkleur}
\setinterfaceconstant{textcommand}{tekstcommando}
\setinterfaceconstant{textdistance}{tekstafstand}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{kopwit}
\setinterfaceconstant{topstate}{bovenstatus}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{eenheid}
\setinterfaceconstant{unknownreference}{onbekendereferentie}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{urlvariant}
\setinterfaceconstant{urlspace}{urlspatie}
\setinterfaceconstant{validate}{valideer}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{kopoffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{wijze}
\setinterfaceconstant{wfactor}{bfactor}
\setinterfaceconstant{white}{wit}
\setinterfaceconstant{width}{breedte}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xschaal}
\setinterfaceconstant{xstep}{xstap}
diff --git a/Master/texmf-dist/tex/context/base/mult-pe.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii
index 32cf32db1c3..a058f9ad362 100644
--- a/Master/texmf-dist/tex/context/base/mult-pe.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language pe
%
\setinterfacevariable{Addition}{جمع}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{بادکنک}
\setinterfacevariable{Cap}{Cap}
\setinterfacevariable{Capital}{Capital}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{صفحه‌بعدی}
\setinterfacevariable{Numbers}{شماره‌ها}
\setinterfacevariable{OpenNamedDocument}{بازکردن‌نوشتار‌ذخیره‌شده}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{پاراگراف}
\setinterfacevariable{PauseMovie}{ایست‌فیلم}
\setinterfacevariable{PauseRendering}{توقف‌تعبیر}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{کنش}
\setinterfacevariable{after}{بعداز}
\setinterfacevariable{all}{همه}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{همواره}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{پیوستها}
\setinterfacevariable{appendix}{پیوست}
\setinterfacevariable{april}{آوریل}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{درحاشیه‌چپ}
\setinterfacevariable{atmargin}{درحاشیه}
\setinterfacevariable{atpage}{درصفحه}
+\setinterfacevariable{atrightmargin}{درحاشیه‌راست}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{آگوست}
\setinterfacevariable{author}{author}
\setinterfacevariable{auto}{خودکار}
\setinterfacevariable{autointro}{پیشگفتارخودکار}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{پشت}
\setinterfacevariable{background}{پس‌زمینه}
\setinterfacevariable{backmatter}{پس‌مطلب}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{اولویت‌بزرگ}
\setinterfacevariable{blank}{خالی}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{نقل‌بلوک}
\setinterfacevariable{bodymatter}{مطلب‌بدنه}
\setinterfacevariable{bodypart}{قسمت‌بدنه}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{خوابیده‌مشکی}
\setinterfacevariable{bookmark}{چوبخط}
\setinterfacevariable{both}{هردو}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{پایین}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{مختصر}
\setinterfacevariable{broad}{گسترده}
\setinterfacevariable{buffer}{بافر}
\setinterfacevariable{by}{بوسیله}
\setinterfacevariable{calligraphic}{خوشنویسی}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{cap}
\setinterfacevariable{capital}{capital}
\setinterfacevariable{center}{مرکز}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{فصل}
\setinterfacevariable{character}{حرف}
\setinterfacevariable{characters}{حرفها}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{رنگ}
\setinterfacevariable{column}{ستون}
\setinterfacevariable{columns}{ستونها}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{فرمان}
\setinterfacevariable{commands}{فرمانها}
\setinterfacevariable{comment}{توضیح}
\setinterfacevariable{component}{مولفه}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{مفهوم}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{محتوا}
\setinterfacevariable{contents}{محتویات}
\setinterfacevariable{continue}{ادامه}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{تبدیل}
\setinterfacevariable{current}{جاری}
\setinterfacevariable{cutspace}{فضای‌برش}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{تاریخ}
\setinterfacevariable{day}{روز}
\setinterfacevariable{december}{دسامبر}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{هر}
\setinterfacevariable{edge}{لبه}
+\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{تهی}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{زوج}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{خارجی}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{fact}
\setinterfacevariable{february}{فوریه}
\setinterfacevariable{figure}{شکل}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{جمعه}
\setinterfacevariable{frontmatter}{پیش‌مطلب}
\setinterfacevariable{frontpart}{پیش‌قسمت}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{سراسری}
\setinterfacevariable{graphic}{گرافیک}
\setinterfacevariable{graphics}{گرافیکها}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{نمایه‌ها}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{ارث‌بردن}
+\setinterfacevariable{ininner}{درداخلی}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{درون‌چپ}
+\setinterfacevariable{inleftedge}{درلبه‌چپ}
+\setinterfacevariable{inleftmargin}{درحاشیه‌چپ}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{درون‌حاشیه}
\setinterfacevariable{inner}{داخلی}
\setinterfacevariable{inneredge}{لبه‌داخلی}
\setinterfacevariable{innermargin}{حاشیه‌داخلی}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{درخارجی}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{درون‌راست}
+\setinterfacevariable{inrightedge}{درلبه‌راست}
+\setinterfacevariable{inrightmargin}{درحاشیه‌راست}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{پانل}
\setinterfacevariable{interactionmenu}{منوی‌پانل}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{میان‌پرده‌ها}
\setinterfacevariable{intermezzo}{میان‌پرده}
\setinterfacevariable{intext}{درون‌متن}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{ژولای}
\setinterfacevariable{june}{ژوئن}
\setinterfacevariable{keep}{نگهدار}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{برچسب}
\setinterfacevariable{landscape}{صفحه‌گسترده}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{راهنما}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{شکست‌کلمات‌کمتر}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{خط}
\setinterfacevariable{linenote}{خط‌نوشت}
\setinterfacevariable{lines}{خطها}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{آرم}
\setinterfacevariable{logos}{آرمها}
\setinterfacevariable{lohi}{پابا}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{شل}
\setinterfacevariable{low}{پایین}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{مارس}
\setinterfacevariable{margin}{حاشیه}
\setinterfacevariable{marginedge}{لبه‌حاشیه}
+\setinterfacevariable{margintext}{متن‌حاشیه}
\setinterfacevariable{margintitle}{عنوان‌حاشیه}
\setinterfacevariable{marking}{نشانه‌گذاری}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{کمترین‌ارتفاع}
\setinterfacevariable{minwidth}{کمترین‌عرض}
\setinterfacevariable{mirrored}{منعکس}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{دوشنبه}
\setinterfacevariable{mono}{مونو}
\setinterfacevariable{monobold}{monobold}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{ماه}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{شکست‌کلمات‌بیشتر}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{صفحه‌فردبعدی}
\setinterfacevariable{nextpage}{صفحه‌بعدی}
\setinterfacevariable{nextsubpage}{زیرصفحه‌بعدی}
+\setinterfacevariable{nine}{nine}
\setinterfacevariable{no}{نه}
\setinterfacevariable{nocheck}{بدون‌بررسی}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{بدون‌پرکردن}
\setinterfacevariable{nogrid}{بدون‌توری}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{بدون‌نشانه‌گذاری}
\setinterfacevariable{none}{هیچکدام}
\setinterfacevariable{nonumber}{بدون‌شماره}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{نرمال}
\setinterfacevariable{nospacing}{بدون‌فضاگذاری}
\setinterfacevariable{not}{بدون}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{بدون‌آویزان‌کردن}
\setinterfacevariable{nothyphenated}{بدون‌شکست}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{خاموش}
\setinterfacevariable{offset}{آفست}
\setinterfacevariable{old}{قدیمی}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{روی}
\setinterfacevariable{one}{یک}
\setinterfacevariable{opposite}{مخالف}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{خارجی}
\setinterfacevariable{outeredge}{لبه‌خارجی}
\setinterfacevariable{outermargin}{حاشیه‌خارجی}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{همان‌صفحه}
\setinterfacevariable{sans}{سانز}
\setinterfacevariable{sansbold}{مشکی‌سانز}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{سانزسریف}
\setinterfacevariable{saturday}{شنبه}
\setinterfacevariable{screen}{پرده}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{سپتامبر}
\setinterfacevariable{serif}{سریف}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{تنگ‌هم}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{seven}
\setinterfacevariable{sheet}{ورقه}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{short}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{یک‌رو}
+\setinterfacevariable{six}{six}
\setinterfacevariable{slanted}{خوابیده}
\setinterfacevariable{slantedbold}{مشکی‌خوابیده}
\setinterfacevariable{small}{کوچک}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{تایپ‌کوچک}
\setinterfacevariable{somewhere}{جایی}
\setinterfacevariable{sorted}{مرتب}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{فضا}
\setinterfacevariable{spacing}{فضاگذاری}
\setinterfacevariable{speech}{سخنرانی}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{پایان}
\setinterfacevariable{stopper}{ایست}
\setinterfacevariable{stretch}{بکش}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{اکید}
\setinterfacevariable{strong}{محکم}
\setinterfacevariable{strut}{بست}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{نم}
\setinterfacevariable{symbol}{نماد}
\setinterfacevariable{synchronize}{تطابق}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{سیستم}
\setinterfacevariable{table}{جدول}
\setinterfacevariable{tablehead}{سرجدول}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{میله‌‌های‌زیر}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{واحد}
\setinterfacevariable{units}{واحدها}
\setinterfacevariable{unknown}{ناشناس}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{خیلی}
\setinterfacevariable{verystrict}{خیلی‌سختگیر}
\setinterfacevariable{verytolerant}{خیلی‌بردبار}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{هفته}
\setinterfacevariable{wednesday}{چهارشنبه}
\setinterfacevariable{week}{هفته}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{گسترده}
\setinterfacevariable{width}{عرض}
\setinterfacevariable{word}{word}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{سال}
\setinterfacevariable{yes}{بله}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{در}
\setinterfaceconstant{author}{نویسنده}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{بزرگ}
\setinterfaceconstant{blank}{خالی}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{راه‌بلوک}
\setinterfaceconstant{bodyfont}{قلم‌بدنه}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{محاسبه}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{فرمان}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{فشردن}
\setinterfaceconstant{clickin}{فشردن‌داخل}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{ستون}
\setinterfaceconstant{columndistance}{فاصله‌ستون}
\setinterfaceconstant{columns}{ستونها}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{فرمان}
\setinterfaceconstant{commandafter}{فرمان‌بعداز}
\setinterfaceconstant{commandbefore}{فرمان‌قبل‌از}
\setinterfaceconstant{commands}{فرمانها}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{مولفه}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{فشردن}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{ادامه}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{تزویج}
\setinterfaceconstant{couplingway}{روش‌تزویج}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{جاری}
\setinterfaceconstant{cutspace}{فضای‌برش}
\setinterfaceconstant{dash}{دش}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{تاریخ}
\setinterfaceconstant{deepnumbercommand}{فرمان‌شماره‌عمیق}
\setinterfaceconstant{deeptextcommand}{فرمان‌متن‌عمیق}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{پوشه}
\setinterfaceconstant{display}{نمایش}
\setinterfaceconstant{distance}{فاصله}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{نقطه}
\setinterfaceconstant{doublesided}{دورو}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{مصنوعی}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{ارتفاع‌یکسان}
\setinterfaceconstant{equalwidth}{عرض‌یکسان}
\setinterfaceconstant{escape}{فرار}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{حاشیه‌زوج}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{گسترش}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{عقب‌ریختن}
\setinterfaceconstant{family}{خانواده}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{رنگ‌پس‌زمینه‌میدان}
\setinterfaceconstant{fieldframecolor}{رنگ‌قالب‌میدان}
\setinterfaceconstant{fieldlayer}{لایه‌میدان}
\setinterfaceconstant{fieldoffset}{آفست‌میدان}
\setinterfaceconstant{file}{پرونده}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{صفحه‌اول}
\setinterfaceconstant{focus}{تمرکز}
\setinterfaceconstant{focusin}{تمرکزدرون}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{تمرکزبیرون}
\setinterfaceconstant{footer}{ته‌برگ}
\setinterfaceconstant{footerdistance}{فاصله‌ته‌برگ}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{رنگ‌پیش‌زمینه}
\setinterfaceconstant{foregroundstyle}{سبک‌پیش‌زمینه}
\setinterfaceconstant{format}{شمایل}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{قالب}
\setinterfaceconstant{framecolor}{رنگ‌قالب}
\setinterfaceconstant{framecorner}{گوشه‌قالب}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{شعاع‌قالب}
\setinterfaceconstant{frames}{قالبها}
\setinterfaceconstant{from}{از}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{بگیر}
\setinterfaceconstant{global}{سراسری}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{توری}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{بیاویز}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{آفست‌ا}
\setinterfaceconstant{horoffset}{آفست‌افق}
\setinterfaceconstant{hyphen}{شکستن}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{icommand}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{درون}
\setinterfaceconstant{inbetween}{دربین}
\setinterfaceconstant{increment}{افزایش}
\setinterfaceconstant{incrementnumber}{شماره‌افزایش}
\setinterfaceconstant{indenting}{تورفتگی}
\setinterfaceconstant{indentnext}{متن‌تورفته}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{اندیکاتور}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{داخلی}
\setinterfaceconstant{innermargin}{حاشیه‌داخلی}
\setinterfaceconstant{inputfile}{پرونده‌ورودی}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{پانل}
\setinterfaceconstant{interlinespace}{فضای‌بین‌خط}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{تنظیم‌آیتم}
\setinterfaceconstant{items}{آیتمها}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{گسترش‌کلید}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{کلید‌واژه}
\setinterfaceconstant{label}{برچسب}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{صفحه‌آخر}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{چپ}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{زیرجمله‌چپ}
\setinterfaceconstant{lefttext}{متن‌چپ}
\setinterfaceconstant{leftwidth}{عرض‌خط}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{مرحله}
\setinterfaceconstant{levels}{مرحله‌ها}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{nbottom}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{بعدی}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nleft}
\setinterfaceconstant{nlines}{nlines}
\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{nright}
\setinterfaceconstant{ntop}{ntop}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{عمل‌باز}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{عمل‌صفحه‌باز}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{گزینه}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{رنگ‌صفحه}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{فرمان‌صفحه}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{شماره‌صفحه}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{لوح}
\setinterfaceconstant{paper}{برگ}
\setinterfaceconstant{paragraph}{پاراگراف}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{بگذار}
\setinterfaceconstant{placehead}{بگذارسر}
\setinterfaceconstant{placestopper}{بگذارایست}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{قابل‌چاپ}
\setinterfaceconstant{process}{پردازش}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{شعاع}
\setinterfaceconstant{random}{تصادفی}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{رج}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{مرجع}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{مراجعه}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{ناحیه‌درون}
\setinterfaceconstant{regionout}{ناحیه‌بیرون}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{تکرار}
\setinterfaceconstant{reset}{بازنشانی}
\setinterfaceconstant{resetnumber}{بازنشانی‌شماره}
\setinterfaceconstant{resolution}{کیفیت}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{برعکس}
\setinterfaceconstant{right}{راست}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{رنگ‌راست}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{لبه‌راست}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{زیرجمله‌راست}
\setinterfaceconstant{righttext}{متن‌راست}
\setinterfaceconstant{rightwidth}{عرض‌راست}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{دوران}
\setinterfaceconstant{rule}{خط}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{طرح}
\setinterfaceconstant{screen}{پرده}
\setinterfaceconstant{section}{بخش}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{شماره‌بخش}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{فضا‌قبل‌از}
\setinterfaceconstant{spaceinbetween}{فضا‌دربین}
\setinterfaceconstant{spacing}{فضاگذاری}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{شکافتن}
\setinterfaceconstant{splitcolor}{شکافتن‌رنگ}
\setinterfaceconstant{splitmethod}{روش‌شکافتن}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{تنظیم‌نماد}
\setinterfaceconstant{symbol}{نماد}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{مجموعه‌نماد}
\setinterfaceconstant{symcolor}{رنگ‌نماد}
\setinterfaceconstant{symstyle}{سبک‌نماد}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{سبک‌مترادف}
\setinterfaceconstant{tab}{تب}
\setinterfaceconstant{text}{متن}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{رنگ‌متن}
\setinterfaceconstant{textcommand}{فرمان‌متن}
\setinterfaceconstant{textdistance}{فاصله‌متن}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{فضای‌بالا}
\setinterfaceconstant{topstate}{وضعیت‌بالا}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{تایپ}
\setinterfaceconstant{unit}{واحد}
\setinterfaceconstant{unknownreference}{مرجع‌ناشناس}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{urlalternative}
\setinterfaceconstant{urlspace}{urlspace}
\setinterfaceconstant{validate}{تاییداعتبار}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{آفست‌عم}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{آفست‌ع}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{راه}
\setinterfaceconstant{wfactor}{wfactor}
\setinterfaceconstant{white}{سفید}
\setinterfaceconstant{width}{عرض}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{فاکتورایکس}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{آفست‌ایکس}
\setinterfaceconstant{xscale}{مقیاس‌ایکس}
\setinterfaceconstant{xstep}{گام‌ایکس}
diff --git a/Master/texmf-dist/tex/context/base/mult-ro.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii
index a5d90033f03..062230226d0 100644
--- a/Master/texmf-dist/tex/context/base/mult-ro.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii
@@ -3,6 +3,7 @@
% definitions for interface variables for language ro
%
\setinterfacevariable{Addition}{Adaugare}
+\setinterfacevariable{Alphabetic}{Alphabetic}
\setinterfacevariable{Balloon}{Balon}
\setinterfacevariable{Cap}{Cap}
\setinterfacevariable{Capital}{Majuscula}
@@ -27,6 +28,7 @@
\setinterfacevariable{NextPage}{PaginaUrmatoare}
\setinterfacevariable{Numbers}{Numere}
\setinterfacevariable{OpenNamedDocument}{OpenNamedDocument}
+\setinterfacevariable{Ordinal}{Ordinal}
\setinterfacevariable{Paragraph}{Paragraf}
\setinterfacevariable{PauseMovie}{PauzaFilm}
\setinterfacevariable{PauseRendering}{PauseRendering}
@@ -72,19 +74,24 @@
\setinterfacevariable{action}{actiune}
\setinterfacevariable{after}{dupa}
\setinterfacevariable{all}{tot}
+\setinterfacevariable{alphabetic}{alphabetic}
\setinterfacevariable{always}{totdeauna}
\setinterfacevariable{and}{and}
\setinterfacevariable{answerarea}{answerarea}
\setinterfacevariable{appendices}{apendixuri}
\setinterfacevariable{appendix}{apendix}
\setinterfacevariable{april}{aprilie}
+\setinterfacevariable{aside}{aside}
+\setinterfacevariable{atleftmargin}{atleftmargin}
\setinterfacevariable{atmargin}{lamargine}
\setinterfacevariable{atpage}{lapagina}
+\setinterfacevariable{atrightmargin}{atrightmargin}
\setinterfacevariable{attachment}{attachment}
\setinterfacevariable{august}{august}
\setinterfacevariable{author}{autor}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
+\setinterfacevariable{autopunctuation}{autopunctuation}
\setinterfacevariable{back}{inapot}
\setinterfacevariable{background}{fundal}
\setinterfacevariable{backmatter}{epilogul}
@@ -100,6 +107,7 @@
\setinterfacevariable{bigger}{bigger}
\setinterfacevariable{bigpreference}{preferintamare}
\setinterfacevariable{blank}{blank}
+\setinterfacevariable{block}{block}
\setinterfacevariable{blockquote}{blockquote}
\setinterfacevariable{bodymatter}{principalul}
\setinterfacevariable{bodypart}{principal}
@@ -108,28 +116,37 @@
\setinterfacevariable{boldslanted}{aldininclinat}
\setinterfacevariable{bookmark}{semncarte}
\setinterfacevariable{both}{ambele}
+\setinterfacevariable{bothtext}{bothtext}
\setinterfacevariable{bottom}{subsol}
+\setinterfacevariable{box}{box}
\setinterfacevariable{brief}{brief}
\setinterfacevariable{broad}{broad}
\setinterfacevariable{buffer}{buffer}
\setinterfacevariable{by}{de}
\setinterfacevariable{calligraphic}{caligrafic}
+\setinterfacevariable{camel}{camel}
\setinterfacevariable{cap}{cap}
\setinterfacevariable{capital}{majuscula}
\setinterfacevariable{center}{center}
+\setinterfacevariable{centerlast}{centerlast}
\setinterfacevariable{chapter}{capitol}
\setinterfacevariable{character}{caracter}
\setinterfacevariable{characters}{caractere}
+\setinterfacevariable{chemical}{chemical}
+\setinterfacevariable{chemicals}{chemicals}
\setinterfacevariable{chemistry}{chemistry}
\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{culoare}
\setinterfacevariable{column}{coloana}
\setinterfacevariable{columns}{coloane}
+\setinterfacevariable{combination}{combination}
\setinterfacevariable{command}{comanda}
\setinterfacevariable{commands}{comenzi}
\setinterfacevariable{comment}{comentariu}
\setinterfacevariable{component}{componenta}
+\setinterfacevariable{compressseparator}{compressseparator}
\setinterfacevariable{concept}{concept}
+\setinterfacevariable{construction}{construction}
\setinterfacevariable{content}{cuprins}
\setinterfacevariable{contents}{cuprinsuri}
\setinterfacevariable{continue}{continuu}
@@ -138,6 +155,7 @@
\setinterfacevariable{conversion}{conversie}
\setinterfacevariable{current}{curent}
\setinterfacevariable{cutspace}{cutspace}
+\setinterfacevariable{dataset}{dataset}
\setinterfacevariable{date}{data}
\setinterfacevariable{day}{zi}
\setinterfacevariable{december}{decembrie}
@@ -151,6 +169,7 @@
\setinterfacevariable{down}{down}
\setinterfacevariable{each}{fiecare}
\setinterfacevariable{edge}{bordura}
+\setinterfacevariable{eight}{eight}
\setinterfacevariable{embed}{embed}
\setinterfacevariable{empty}{gol}
\setinterfacevariable{end}{end}
@@ -160,6 +179,7 @@
\setinterfacevariable{even}{par}
\setinterfacevariable{export}{export}
\setinterfacevariable{external}{extern}
+\setinterfacevariable{extremestretch}{extremestretch}
\setinterfacevariable{fact}{fapt}
\setinterfacevariable{february}{februarie}
\setinterfacevariable{figure}{figura}
@@ -195,6 +215,7 @@
\setinterfacevariable{friday}{vineri}
\setinterfacevariable{frontmatter}{prologul}
\setinterfacevariable{frontpart}{prolog}
+\setinterfacevariable{fullhz}{fullhz}
\setinterfacevariable{global}{global}
\setinterfacevariable{graphic}{graficul}
\setinterfacevariable{graphics}{graficele}
@@ -223,14 +244,28 @@
\setinterfacevariable{indices}{indexuri}
\setinterfacevariable{informeel}{informeel}
\setinterfacevariable{inherit}{inherit}
+\setinterfacevariable{ininner}{ininner}
+\setinterfacevariable{ininneredge}{ininneredge}
+\setinterfacevariable{ininnermargin}{ininnermargin}
\setinterfacevariable{inleft}{instanga}
+\setinterfacevariable{inleftedge}{inparteastanga}
+\setinterfacevariable{inleftmargin}{inmargineastanga}
+\setinterfacevariable{inline}{inline}
\setinterfacevariable{inmargin}{inmargine}
\setinterfacevariable{inner}{intern}
\setinterfacevariable{inneredge}{inneredge}
\setinterfacevariable{innermargin}{innermargin}
+\setinterfacevariable{inother}{inother}
+\setinterfacevariable{inouter}{inouter}
+\setinterfacevariable{inouteredge}{inouteredge}
+\setinterfacevariable{inoutermargin}{inoutermargin}
\setinterfacevariable{inright}{indreapta}
+\setinterfacevariable{inrightedge}{inparteadreapta}
+\setinterfacevariable{inrightmargin}{inmargineadreapta}
+\setinterfacevariable{integral}{integral}
\setinterfacevariable{interaction}{interactiune}
\setinterfacevariable{interactionmenu}{meniuinteractiune}
+\setinterfacevariable{interactive}{interactive}
\setinterfacevariable{intermezzi}{intermezzi}
\setinterfacevariable{intermezzo}{intermezzo}
\setinterfacevariable{intext}{intext}
@@ -245,6 +280,7 @@
\setinterfacevariable{july}{iulie}
\setinterfacevariable{june}{iunie}
\setinterfacevariable{keep}{mentine}
+\setinterfacevariable{kerncharacters}{kerncharacters}
\setinterfacevariable{knockout}{knockout}
\setinterfacevariable{label}{eticheta}
\setinterfacevariable{landscape}{vedere}
@@ -263,6 +299,7 @@
\setinterfacevariable{legend}{legenda}
\setinterfacevariable{less}{less}
\setinterfacevariable{lesshyphenation}{lesshyphenation}
+\setinterfacevariable{letterspacing}{letterspacing}
\setinterfacevariable{line}{linie}
\setinterfacevariable{linenote}{linenote}
\setinterfacevariable{lines}{linii}
@@ -272,6 +309,7 @@
\setinterfacevariable{logo}{logo}
\setinterfacevariable{logos}{logos}
\setinterfacevariable{lohi}{lohi}
+\setinterfacevariable{long}{long}
\setinterfacevariable{loose}{larg}
\setinterfacevariable{low}{jos}
\setinterfacevariable{ls}{ls}
@@ -280,6 +318,7 @@
\setinterfacevariable{march}{martie}
\setinterfacevariable{margin}{margine}
\setinterfacevariable{marginedge}{marginebordura}
+\setinterfacevariable{margintext}{textmarginal}
\setinterfacevariable{margintitle}{titlumarginal}
\setinterfacevariable{marking}{marcaje}
\setinterfacevariable{math}{math}
@@ -300,9 +339,11 @@
\setinterfacevariable{minheight}{inaltimeminima}
\setinterfacevariable{minwidth}{latimeminima}
\setinterfacevariable{mirrored}{oglindit}
+\setinterfacevariable{mixed}{mixed}
\setinterfacevariable{monday}{luni}
\setinterfacevariable{mono}{mono}
\setinterfacevariable{monobold}{monoaldin}
+\setinterfacevariable{mononormal}{mononormal}
\setinterfacevariable{month}{luna}
\setinterfacevariable{more}{more}
\setinterfacevariable{morehyphenation}{morehyphenation}
@@ -316,17 +357,23 @@
\setinterfacevariable{nextoddpage}{paginaimparaurmatoarea}
\setinterfacevariable{nextpage}{paginaurmatoare}
\setinterfacevariable{nextsubpage}{urmatoareasubpagina}
+\setinterfacevariable{nine}{nine}
\setinterfacevariable{no}{nu}
\setinterfacevariable{nocheck}{nocheck}
+\setinterfacevariable{nodepth}{nodepth}
\setinterfacevariable{nofit}{nofit}
\setinterfacevariable{nogrid}{nogrid}
+\setinterfacevariable{noheight}{noheight}
\setinterfacevariable{nohz}{nohz}
+\setinterfacevariable{noline}{noline}
\setinterfacevariable{nomarking}{faramarcare}
\setinterfacevariable{none}{niciunul}
\setinterfacevariable{nonumber}{nonumber}
+\setinterfacevariable{norepeat}{norepeat}
\setinterfacevariable{normal}{normal}
\setinterfacevariable{nospacing}{nospacing}
\setinterfacevariable{not}{nu}
+\setinterfacevariable{notation}{notation}
\setinterfacevariable{note}{note}
\setinterfacevariable{nothanging}{nothanging}
\setinterfacevariable{nothyphenated}{nedespsilabe}
@@ -340,9 +387,11 @@
\setinterfacevariable{off}{dezactivat}
\setinterfacevariable{offset}{offset}
\setinterfacevariable{old}{old}
+\setinterfacevariable{oldstyle}{oldstyle}
\setinterfacevariable{on}{on}
\setinterfacevariable{one}{unu}
\setinterfacevariable{opposite}{opus}
+\setinterfacevariable{ordinal}{ordinal}
\setinterfacevariable{outer}{extern}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
@@ -411,6 +460,7 @@
\setinterfacevariable{samepage}{aceeasipagina}
\setinterfacevariable{sans}{sans}
\setinterfacevariable{sansbold}{sansaldin}
+\setinterfacevariable{sansnormal}{sansnormal}
\setinterfacevariable{sansserif}{sansserif}
\setinterfacevariable{saturday}{sambata}
\setinterfacevariable{screen}{ecran}
@@ -421,12 +471,19 @@
\setinterfacevariable{selectfont}{selectfont}
\setinterfacevariable{september}{septembrie}
\setinterfacevariable{serif}{serif}
+\setinterfacevariable{serifbold}{serifbold}
+\setinterfacevariable{serifnormal}{serifnormal}
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{setups}
+\setinterfacevariable{seven}{seven}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{shiftdown}{shiftdown}
+\setinterfacevariable{shiftup}{shiftup}
\setinterfacevariable{short}{short}
\setinterfacevariable{simplefonts}{simplefonts}
+\setinterfacevariable{simplelist}{simplelist}
\setinterfacevariable{singlesided}{ofata}
+\setinterfacevariable{six}{six}
\setinterfacevariable{slanted}{inclinat}
\setinterfacevariable{slantedbold}{inclinataldin}
\setinterfacevariable{small}{mic}
@@ -444,6 +501,7 @@
\setinterfacevariable{smalltype}{mictype}
\setinterfacevariable{somewhere}{undeva}
\setinterfacevariable{sorted}{sortat}
+\setinterfacevariable{sorting}{sorting}
\setinterfacevariable{space}{spatiu}
\setinterfacevariable{spacing}{spatiere}
\setinterfacevariable{speech}{speech}
@@ -456,6 +514,7 @@
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{stopper}
\setinterfacevariable{stretch}{dilatat}
+\setinterfacevariable{stretched}{stretched}
\setinterfacevariable{strict}{strict}
\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
@@ -489,6 +548,7 @@
\setinterfacevariable{sym}{sym}
\setinterfacevariable{symbol}{simbol}
\setinterfacevariable{synchronize}{synchronize}
+\setinterfacevariable{synonym}{synonym}
\setinterfacevariable{system}{sistem}
\setinterfacevariable{table}{tabelul}
\setinterfacevariable{tablehead}{antettabel}
@@ -519,6 +579,7 @@
\setinterfacevariable{underbars}{sublinii}
\setinterfacevariable{understrike}{understrike}
\setinterfacevariable{understrikes}{understrikes}
+\setinterfacevariable{unframed}{unframed}
\setinterfacevariable{unit}{unitate}
\setinterfacevariable{units}{unitati}
\setinterfacevariable{unknown}{necunoscut}
@@ -531,6 +592,8 @@
\setinterfacevariable{very}{foarte}
\setinterfacevariable{verystrict}{foartestrict}
\setinterfacevariable{verytolerant}{foartetolerant}
+\setinterfacevariable{vfenced}{vfenced}
+\setinterfacevariable{vulgarfraction}{vulgarfraction}
\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{miercuri}
\setinterfacevariable{week}{saptamana}
@@ -539,6 +602,7 @@
\setinterfacevariable{wide}{larg}
\setinterfacevariable{width}{latime}
\setinterfacevariable{word}{cuvant}
+\setinterfacevariable{words}{words}
\setinterfacevariable{xml}{xml}
\setinterfacevariable{year}{an}
\setinterfacevariable{yes}{da}
@@ -564,8 +628,10 @@
\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
+\setinterfaceconstant{artoffset}{artoffset}
\setinterfaceconstant{at}{la}
\setinterfaceconstant{author}{autor}
+\setinterfaceconstant{authorconversion}{authorconversion}
\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
\setinterfaceconstant{authoretallimit}{authoretallimit}
\setinterfaceconstant{authoretaltext}{authoretaltext}
@@ -596,6 +662,7 @@
\setinterfaceconstant{bidi}{bidi}
\setinterfaceconstant{big}{mare}
\setinterfaceconstant{blank}{blanc}
+\setinterfaceconstant{bleedoffset}{bleedoffset}
\setinterfaceconstant{blockway}{blockway}
\setinterfaceconstant{bodyfont}{fonttext}
\setinterfaceconstant{boffset}{boffset}
@@ -620,6 +687,8 @@
\setinterfaceconstant{calculate}{calculeaza}
\setinterfaceconstant{category}{category}
\setinterfaceconstant{ccommand}{comandac}
+\setinterfaceconstant{character}{character}
+\setinterfaceconstant{characters}{characters}
\setinterfaceconstant{check}{check}
\setinterfaceconstant{click}{click}
\setinterfaceconstant{clickin}{clickintru}
@@ -634,15 +703,19 @@
\setinterfaceconstant{column}{coloana}
\setinterfaceconstant{columndistance}{distantacoloane}
\setinterfaceconstant{columns}{coloane}
+\setinterfaceconstant{comma}{comma}
\setinterfaceconstant{command}{comanda}
\setinterfaceconstant{commandafter}{comandadupa}
\setinterfaceconstant{commandbefore}{comandainainte}
\setinterfaceconstant{commands}{comenzi}
+\setinterfaceconstant{comment}{comment}
+\setinterfaceconstant{commentchar}{commentchar}
\setinterfaceconstant{commentoffset}{commentoffset}
\setinterfaceconstant{compact}{compact}
\setinterfaceconstant{component}{component}
\setinterfaceconstant{compoundhyphen}{compoundhyphen}
\setinterfaceconstant{compress}{compress}
+\setinterfaceconstant{compressseparator}{compressseparator}
\setinterfaceconstant{concerns}{concerns}
\setinterfaceconstant{connector}{connector}
\setinterfaceconstant{continue}{continua}
@@ -654,12 +727,14 @@
\setinterfaceconstant{coupling}{cuplare}
\setinterfaceconstant{couplingway}{modcuplare}
\setinterfaceconstant{criterium}{criteriu}
+\setinterfaceconstant{cropoffset}{cropoffset}
\setinterfaceconstant{cssfile}{cssfile}
\setinterfaceconstant{current}{curent}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
\setinterfaceconstant{database}{database}
+\setinterfaceconstant{dataset}{dataset}
\setinterfaceconstant{date}{data}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -671,8 +746,10 @@
\setinterfaceconstant{directory}{director}
\setinterfaceconstant{display}{display}
\setinterfaceconstant{distance}{distanta}
+\setinterfaceconstant{domain}{domain}
\setinterfaceconstant{dot}{punct}
\setinterfaceconstant{doublesided}{douafete}
+\setinterfaceconstant{down}{down}
\setinterfaceconstant{dummy}{dummy}
\setinterfaceconstant{dx}{dx}
\setinterfaceconstant{dy}{dy}
@@ -688,6 +765,10 @@
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
+\setinterfaceconstant{etaldisplay}{etaldisplay}
+\setinterfaceconstant{etallimit}{etallimit}
+\setinterfaceconstant{etaloption}{etaloption}
+\setinterfaceconstant{etaltext}{etaltext}
\setinterfaceconstant{evenmargin}{marginepara}
\setinterfaceconstant{exitoffset}{exitoffset}
\setinterfaceconstant{expansion}{expansiune}
@@ -697,18 +778,24 @@
\setinterfaceconstant{fallback}{fallback}
\setinterfaceconstant{family}{familie}
\setinterfaceconstant{features}{features}
+\setinterfaceconstant{fences}{fences}
+\setinterfaceconstant{field}{field}
\setinterfaceconstant{fieldbackgroundcolor}{culoarefundalcamp}
\setinterfaceconstant{fieldframecolor}{culoareframecamp}
\setinterfaceconstant{fieldlayer}{fieldlayer}
\setinterfaceconstant{fieldoffset}{offsetcamp}
\setinterfaceconstant{file}{fisier}
+\setinterfaceconstant{filler}{filler}
\setinterfaceconstant{filtercommand}{filtercommand}
\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{finalpagesep}{finalpagesep}
\setinterfaceconstant{finalpubsep}{finalpubsep}
+\setinterfaceconstant{first}{first}
\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{firstpage}{primapagina}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
+\setinterfaceconstant{focusoffset}{focusoffset}
\setinterfaceconstant{focusout}{focusout}
\setinterfaceconstant{footer}{subsol}
\setinterfaceconstant{footerdistance}{distantasubsol}
@@ -717,6 +804,7 @@
\setinterfaceconstant{foregroundcolor}{foregroundcolor}
\setinterfaceconstant{foregroundstyle}{foregroundstyle}
\setinterfaceconstant{format}{format}
+\setinterfaceconstant{fractions}{fractions}
\setinterfaceconstant{frame}{frame}
\setinterfaceconstant{framecolor}{culoareframe}
\setinterfaceconstant{framecorner}{coltframe}
@@ -725,10 +813,14 @@
\setinterfaceconstant{frameradius}{razaframe}
\setinterfaceconstant{frames}{frames}
\setinterfaceconstant{from}{dela}
+\setinterfaceconstant{functioncolor}{functioncolor}
+\setinterfaceconstant{functionstyle}{functionstyle}
\setinterfaceconstant{get}{adu}
\setinterfaceconstant{global}{global}
\setinterfaceconstant{goodies}{goodies}
\setinterfaceconstant{grid}{grid}
+\setinterfaceconstant{group}{group}
+\setinterfaceconstant{groupsuffix}{groupsuffix}
\setinterfaceconstant{hang}{suspenda}
\setinterfaceconstant{hcompact}{hcompact}
\setinterfaceconstant{headalign}{headalign}
@@ -748,19 +840,23 @@
\setinterfaceconstant{hoffset}{hoffset}
\setinterfaceconstant{horoffset}{offsetoriz}
\setinterfaceconstant{hyphen}{hyphen}
+\setinterfaceconstant{hyphens}{hyphens}
\setinterfaceconstant{icommand}{comandai}
+\setinterfaceconstant{ignore}{ignore}
\setinterfaceconstant{in}{in}
\setinterfaceconstant{inbetween}{intre}
\setinterfaceconstant{increment}{increment}
\setinterfaceconstant{incrementnumber}{numarincrement}
\setinterfaceconstant{indenting}{aliniat}
\setinterfaceconstant{indentnext}{aliniaturmator}
+\setinterfaceconstant{index}{index}
\setinterfaceconstant{indicator}{indicator}
\setinterfaceconstant{initialsep}{initialsep}
\setinterfaceconstant{inner}{intern}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
\setinterfaceconstant{insidesection}{insidesection}
+\setinterfaceconstant{instance}{instance}
\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interactiune}
\setinterfaceconstant{interlinespace}{spatiereinterliniara}
@@ -769,15 +865,21 @@
\setinterfaceconstant{italicfont}{italicfont}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elemente}
+\setinterfaceconstant{joiners}{joiners}
+\setinterfaceconstant{journalconversion}{journalconversion}
\setinterfaceconstant{juniorsep}{juniorsep}
+\setinterfaceconstant{keeptogether}{keeptogether}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keys}{keys}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{eticheta}
\setinterfaceconstant{labeloffset}{labeloffset}
+\setinterfaceconstant{language}{language}
+\setinterfaceconstant{last}{last}
\setinterfaceconstant{lastnamesep}{lastnamesep}
\setinterfaceconstant{lastpage}{ultimapagina}
+\setinterfaceconstant{lastpagesep}{lastpagesep}
\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{layout}{layout}
\setinterfaceconstant{left}{stanga}
@@ -798,6 +900,7 @@
\setinterfaceconstant{leftsubsentence}{subpropozitiestanga}
\setinterfaceconstant{lefttext}{textstanga}
\setinterfaceconstant{leftwidth}{latimestanga}
+\setinterfaceconstant{leftwords}{leftwords}
\setinterfaceconstant{less}{less}
\setinterfaceconstant{level}{nivel}
\setinterfaceconstant{levels}{nivele}
@@ -854,10 +957,15 @@
\setinterfaceconstant{nbottom}{njos}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{urmatorul}
+\setinterfaceconstant{nextleft}{nextleft}
+\setinterfaceconstant{nextleftquotation}{nextleftquotation}
+\setinterfaceconstant{nextright}{nextright}
+\setinterfaceconstant{nextrightquotation}{nextrightquotation}
\setinterfaceconstant{nl}{nl}
\setinterfaceconstant{nleft}{nstanga}
\setinterfaceconstant{nlines}{nlinii}
\setinterfaceconstant{norm}{norm}
+\setinterfaceconstant{note}{note}
\setinterfaceconstant{nr}{nr}
\setinterfaceconstant{nright}{ndreapta}
\setinterfaceconstant{ntop}{nsus}
@@ -888,6 +996,7 @@
\setinterfaceconstant{openaction}{actiunedeschidere}
\setinterfaceconstant{openpage}{openpage}
\setinterfaceconstant{openpageaction}{actiunedeschiderepagina}
+\setinterfaceconstant{openup}{openup}
\setinterfaceconstant{opticalsize}{opticalsize}
\setinterfaceconstant{option}{optiune}
\setinterfaceconstant{order}{order}
@@ -901,8 +1010,10 @@
\setinterfaceconstant{pagecolor}{culoarepagina}
\setinterfaceconstant{pagecolormodel}{pagecolormodel}
\setinterfaceconstant{pagecommand}{comandapagina}
+\setinterfaceconstant{pageconnector}{pageconnector}
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
+\setinterfaceconstant{pageleft}{pageleft}
\setinterfaceconstant{pagenumber}{numarpagina}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
@@ -913,7 +1024,9 @@
\setinterfaceconstant{pageprefixset}{pageprefixset}
\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
+\setinterfaceconstant{pageright}{pageright}
\setinterfaceconstant{pagesegments}{pagesegments}
+\setinterfaceconstant{pagesep}{pagesep}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
\setinterfaceconstant{pagestarter}{pagestarter}
@@ -923,6 +1036,7 @@
\setinterfaceconstant{palet}{paleta}
\setinterfaceconstant{paper}{hartie}
\setinterfaceconstant{paragraph}{paragraf}
+\setinterfaceconstant{period}{period}
\setinterfaceconstant{place}{pune}
\setinterfaceconstant{placehead}{punetitlu}
\setinterfaceconstant{placestopper}{punestopper}
@@ -943,7 +1057,9 @@
\setinterfaceconstant{printable}{tiparibil}
\setinterfaceconstant{process}{process}
\setinterfaceconstant{profile}{profile}
+\setinterfaceconstant{properties}{properties}
\setinterfaceconstant{pubsep}{pubsep}
+\setinterfaceconstant{quotechar}{quotechar}
\setinterfaceconstant{radius}{raza}
\setinterfaceconstant{random}{aleator}
\setinterfaceconstant{range}{range}
@@ -951,18 +1067,24 @@
\setinterfaceconstant{ref}{ref}
\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{referinta}
+\setinterfaceconstant{referencemethod}{referencemethod}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referinta}
\setinterfaceconstant{region}{region}
\setinterfaceconstant{regionin}{regiuneintrare}
\setinterfaceconstant{regionout}{regiuneiesire}
+\setinterfaceconstant{register}{register}
\setinterfaceconstant{regularfeatures}{regularfeatures}
\setinterfaceconstant{regularfont}{regularfont}
+\setinterfaceconstant{renderingsetup}{renderingsetup}
\setinterfaceconstant{repeat}{repeta}
\setinterfaceconstant{reset}{reset}
\setinterfaceconstant{resetnumber}{resetnumber}
\setinterfaceconstant{resolution}{rezolutie}
+\setinterfaceconstant{resources}{resources}
+\setinterfaceconstant{reverse}{reverse}
\setinterfaceconstant{right}{dreapta}
+\setinterfaceconstant{rightchars}{rightchars}
\setinterfaceconstant{rightcolor}{culoaredreapta}
\setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen}
\setinterfaceconstant{rightedge}{borduradreapta}
@@ -980,6 +1102,7 @@
\setinterfaceconstant{rightsubsentence}{subpropozitiedreapta}
\setinterfaceconstant{righttext}{textdreapta}
\setinterfaceconstant{rightwidth}{marginedreapta}
+\setinterfaceconstant{rightwords}{rightwords}
\setinterfaceconstant{roffset}{roffset}
\setinterfaceconstant{rotation}{rotatie}
\setinterfaceconstant{rule}{rigla}
@@ -994,6 +1117,7 @@
\setinterfaceconstant{scope}{scop}
\setinterfaceconstant{screen}{ecran}
\setinterfaceconstant{section}{sectiune}
+\setinterfaceconstant{sectionblock}{sectionblock}
\setinterfaceconstant{sectionconversion}{sectionconversion}
\setinterfaceconstant{sectionconversionset}{sectionconversionset}
\setinterfaceconstant{sectionnumber}{numarsectiune}
@@ -1030,6 +1154,7 @@
\setinterfaceconstant{spacebefore}{spatiuinainte}
\setinterfaceconstant{spaceinbetween}{spaceinbetween}
\setinterfaceconstant{spacing}{spatiere}
+\setinterfaceconstant{specification}{specification}
\setinterfaceconstant{split}{split}
\setinterfaceconstant{splitcolor}{splitcolor}
\setinterfaceconstant{splitmethod}{splitmethod}
@@ -1054,10 +1179,12 @@
\setinterfaceconstant{surnamefirstnamesep}{surnamefirstnamesep}
\setinterfaceconstant{surnameinitialsep}{surnameinitialsep}
\setinterfaceconstant{surnamesep}{surnamesep}
+\setinterfaceconstant{svgstyle}{svgstyle}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symaliniere}
\setinterfaceconstant{symbol}{simbol}
+\setinterfaceconstant{symbolcommand}{symbolcommand}
\setinterfaceconstant{symbolset}{setsimbol}
\setinterfaceconstant{symcolor}{culoaresimbol}
\setinterfaceconstant{symstyle}{stilsimbol}
@@ -1067,6 +1194,7 @@
\setinterfaceconstant{synonymstyle}{stilsinonim}
\setinterfaceconstant{tab}{tab}
\setinterfaceconstant{text}{text}
+\setinterfaceconstant{textalign}{textalign}
\setinterfaceconstant{textcolor}{culoaretext}
\setinterfaceconstant{textcommand}{comandatext}
\setinterfaceconstant{textdistance}{textdistance}
@@ -1098,9 +1226,12 @@
\setinterfaceconstant{topspace}{spatiusus}
\setinterfaceconstant{topstate}{staresus}
\setinterfaceconstant{totalnumber}{totalnumber}
+\setinterfaceconstant{translate}{translate}
+\setinterfaceconstant{trimoffset}{trimoffset}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unitate}
\setinterfaceconstant{unknownreference}{referintanecunoscuta}
+\setinterfaceconstant{up}{up}
\setinterfaceconstant{urlalternative}{urlalternativ}
\setinterfaceconstant{urlspace}{spatiuurl}
\setinterfaceconstant{validate}{verifica}
@@ -1110,15 +1241,18 @@
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
+\setinterfaceconstant{viewerprefix}{viewerprefix}
\setinterfaceconstant{voffset}{voffset}
\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{mod}
\setinterfaceconstant{wfactor}{factorw}
\setinterfaceconstant{white}{alb}
\setinterfaceconstant{width}{latime}
+\setinterfaceconstant{words}{words}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
+\setinterfaceconstant{xmlsetup}{xmlsetup}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscala}
\setinterfaceconstant{xstep}{xstep}
diff --git a/Master/texmf-dist/tex/context/base/mult-sys.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-sys.mkii
index 1961fdf11b1..1961fdf11b1 100644
--- a/Master/texmf-dist/tex/context/base/mult-sys.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/mult-sys.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-alo.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-alo.mkii
index d359cf7e88f..d359cf7e88f 100644
--- a/Master/texmf-dist/tex/context/base/norm-alo.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-alo.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-ctx.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-ctx.mkii
index b1a4c7d3593..b1a4c7d3593 100644
--- a/Master/texmf-dist/tex/context/base/norm-ctx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-ctx.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-etx.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-etx.mkii
index bd244e4d1e9..bd244e4d1e9 100644
--- a/Master/texmf-dist/tex/context/base/norm-etx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-etx.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-ltx.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-ltx.mkii
index 9a8f7ba576c..9a8f7ba576c 100644
--- a/Master/texmf-dist/tex/context/base/norm-ltx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-ltx.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-ptx.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-ptx.mkii
index 14a57aeec1b..14a57aeec1b 100644
--- a/Master/texmf-dist/tex/context/base/norm-ptx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-ptx.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-tex.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-tex.mkii
index 0bd54f71a99..0bd54f71a99 100644
--- a/Master/texmf-dist/tex/context/base/norm-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-tex.mkii
diff --git a/Master/texmf-dist/tex/context/base/norm-xtx.mkii b/Master/texmf-dist/tex/context/base/mkii/norm-xtx.mkii
index 851b90b310c..851b90b310c 100644
--- a/Master/texmf-dist/tex/context/base/norm-xtx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/norm-xtx.mkii
diff --git a/Master/texmf-dist/tex/context/base/pack-box.mkii b/Master/texmf-dist/tex/context/base/mkii/pack-box.mkii
index 1752e2b9122..1752e2b9122 100644
--- a/Master/texmf-dist/tex/context/base/pack-box.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pack-box.mkii
diff --git a/Master/texmf-dist/tex/context/base/pack-lyr.mkii b/Master/texmf-dist/tex/context/base/mkii/pack-lyr.mkii
index 1b0c0fd63f2..1b0c0fd63f2 100644
--- a/Master/texmf-dist/tex/context/base/pack-lyr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pack-lyr.mkii
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.mkii b/Master/texmf-dist/tex/context/base/mkii/pack-obj.mkii
index 81523d52564..81523d52564 100644
--- a/Master/texmf-dist/tex/context/base/pack-obj.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pack-obj.mkii
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.mkii b/Master/texmf-dist/tex/context/base/mkii/pack-rul.mkii
index 7399cacd811..7399cacd811 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pack-rul.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-app.mkii b/Master/texmf-dist/tex/context/base/mkii/page-app.mkii
index 75e0cf87467..75e0cf87467 100644
--- a/Master/texmf-dist/tex/context/base/page-app.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-app.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-bck.mkii b/Master/texmf-dist/tex/context/base/mkii/page-bck.mkii
index 4c636d29e34..4c636d29e34 100644
--- a/Master/texmf-dist/tex/context/base/page-bck.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-bck.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-flw.mkii b/Master/texmf-dist/tex/context/base/mkii/page-flw.mkii
index ba8fd3eabaf..ba8fd3eabaf 100644
--- a/Master/texmf-dist/tex/context/base/page-flw.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-flw.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-imp.mkii b/Master/texmf-dist/tex/context/base/mkii/page-imp.mkii
index bf10504b48c..bf10504b48c 100644
--- a/Master/texmf-dist/tex/context/base/page-imp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-imp.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/page-ini.mkii
index bc4aab60f89..bc4aab60f89 100644
--- a/Master/texmf-dist/tex/context/base/page-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-ins.mkii b/Master/texmf-dist/tex/context/base/mkii/page-ins.mkii
index ce0f51d7282..ce0f51d7282 100644
--- a/Master/texmf-dist/tex/context/base/page-ins.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-ins.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-lay.mkii b/Master/texmf-dist/tex/context/base/mkii/page-lay.mkii
index 61ff8764f38..61ff8764f38 100644
--- a/Master/texmf-dist/tex/context/base/page-lay.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-lay.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkii b/Master/texmf-dist/tex/context/base/mkii/page-lin.mkii
index c6b352ae73c..c6b352ae73c 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-lin.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-log.mkii b/Master/texmf-dist/tex/context/base/mkii/page-log.mkii
index c64c27bce03..c64c27bce03 100644
--- a/Master/texmf-dist/tex/context/base/page-log.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-log.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-mak.mkii b/Master/texmf-dist/tex/context/base/mkii/page-mak.mkii
index 3a513137fe8..3a513137fe8 100644
--- a/Master/texmf-dist/tex/context/base/page-mak.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-mak.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-mar.mkii b/Master/texmf-dist/tex/context/base/mkii/page-mar.mkii
index d386d8ab93b..d386d8ab93b 100644
--- a/Master/texmf-dist/tex/context/base/page-mar.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-mar.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/page-mis.mkii
index a61b2435baf..a61b2435baf 100644
--- a/Master/texmf-dist/tex/context/base/page-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-mul.mkii b/Master/texmf-dist/tex/context/base/mkii/page-mul.mkii
index decf784f04e..decf784f04e 100644
--- a/Master/texmf-dist/tex/context/base/page-mul.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-mul.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-not.mkii b/Master/texmf-dist/tex/context/base/mkii/page-not.mkii
index 7bb9824307c..7bb9824307c 100644
--- a/Master/texmf-dist/tex/context/base/page-not.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-not.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-one.mkii b/Master/texmf-dist/tex/context/base/mkii/page-one.mkii
index fe4b285cb91..fe4b285cb91 100644
--- a/Master/texmf-dist/tex/context/base/page-one.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-one.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-par.mkii b/Master/texmf-dist/tex/context/base/mkii/page-par.mkii
index 9b5e0b6ebfa..9b5e0b6ebfa 100644
--- a/Master/texmf-dist/tex/context/base/page-par.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-par.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-plg.mkii b/Master/texmf-dist/tex/context/base/mkii/page-plg.mkii
index 3c3255f4c70..3c3255f4c70 100644
--- a/Master/texmf-dist/tex/context/base/page-plg.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-plg.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-run.mkii b/Master/texmf-dist/tex/context/base/mkii/page-run.mkii
index b128c192d87..b128c192d87 100644
--- a/Master/texmf-dist/tex/context/base/page-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-set.mkii b/Master/texmf-dist/tex/context/base/mkii/page-set.mkii
index 3c8c87e5c40..3c8c87e5c40 100644
--- a/Master/texmf-dist/tex/context/base/page-set.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-set.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-sid.mkii b/Master/texmf-dist/tex/context/base/mkii/page-sid.mkii
index 6c3447e1ca0..6c3447e1ca0 100644
--- a/Master/texmf-dist/tex/context/base/page-sid.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-sid.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-spr.mkii b/Master/texmf-dist/tex/context/base/mkii/page-spr.mkii
index 65e435d7c2f..65e435d7c2f 100644
--- a/Master/texmf-dist/tex/context/base/page-spr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-spr.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-str.mkii b/Master/texmf-dist/tex/context/base/mkii/page-str.mkii
index df0cc5aa2fd..df0cc5aa2fd 100644
--- a/Master/texmf-dist/tex/context/base/page-str.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-str.mkii
diff --git a/Master/texmf-dist/tex/context/base/page-txt.mkii b/Master/texmf-dist/tex/context/base/mkii/page-txt.mkii
index dd643b1b4e6..dd643b1b4e6 100644
--- a/Master/texmf-dist/tex/context/base/page-txt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/page-txt.mkii
diff --git a/Master/texmf-dist/tex/context/base/pdfr-def.mkii b/Master/texmf-dist/tex/context/base/mkii/pdfr-def.mkii
index b3f67b93f82..b3f67b93f82 100644
--- a/Master/texmf-dist/tex/context/base/pdfr-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pdfr-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/pdfr-ec.mkii b/Master/texmf-dist/tex/context/base/mkii/pdfr-ec.mkii
index e2208aa3657..e2208aa3657 100644
--- a/Master/texmf-dist/tex/context/base/pdfr-ec.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pdfr-ec.mkii
diff --git a/Master/texmf-dist/tex/context/base/pdfr-il2.mkii b/Master/texmf-dist/tex/context/base/mkii/pdfr-il2.mkii
index 81f9c42acca..81f9c42acca 100644
--- a/Master/texmf-dist/tex/context/base/pdfr-il2.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/pdfr-il2.mkii
diff --git a/Master/texmf-dist/tex/context/base/prop-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/prop-ini.mkii
index 11efd036234..11efd036234 100644
--- a/Master/texmf-dist/tex/context/base/prop-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/prop-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/prop-lay.mkii b/Master/texmf-dist/tex/context/base/mkii/prop-lay.mkii
index 77c48ca6ed2..77c48ca6ed2 100644
--- a/Master/texmf-dist/tex/context/base/prop-lay.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/prop-lay.mkii
diff --git a/Master/texmf-dist/tex/context/base/prop-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/prop-mis.mkii
index 47fb9ea0661..47fb9ea0661 100644
--- a/Master/texmf-dist/tex/context/base/prop-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/prop-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-1.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-1.mkii
index 00439ae9e3e..00439ae9e3e 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-1.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-1.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-10.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-10.mkii
index 6646860342a..6646860342a 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-10.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-10.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-13.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-13.mkii
index f1b1dbe7870..f1b1dbe7870 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-13.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-13.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-15.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-15.mkii
index 1455161c30e..1455161c30e 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-15.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-15.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-16.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-16.mkii
index f284c4116e7..f284c4116e7 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-16.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-16.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-2.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-2.mkii
index 9efc27a7968..9efc27a7968 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-2.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-2.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-3.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-3.mkii
index 99fa66ac313..99fa66ac313 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-3.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-3.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-4.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-4.mkii
index c7adf34710e..c7adf34710e 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-4.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-4.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-5.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-5.mkii
index 807d74640b4..807d74640b4 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-5.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-5.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-7.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-7.mkii
index 1c8197a4270..1c8197a4270 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-7.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-7.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-9.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-8859-9.mkii
index 60757b2e684..60757b2e684 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-9.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-8859-9.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1250.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1250.mkii
index c13ee53e2c1..c13ee53e2c1 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1250.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1250.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1251.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1251.mkii
index 66576bd16be..66576bd16be 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1251.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1251.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1252.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1252.mkii
index 316d694a67e..316d694a67e 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1252.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1252.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1253.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1253.mkii
index 05d53c1298e..05d53c1298e 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1253.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1253.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1254.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1254.mkii
index 73f8f270820..73f8f270820 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1254.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1254.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1257.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cp1257.mkii
index 4c9cb56f059..4c9cb56f059 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1257.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cp1257.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cyp.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cyp.mkii
index 3f45ace2307..3f45ace2307 100644
--- a/Master/texmf-dist/tex/context/base/regi-cyp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cyp.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-cyr.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-cyr.mkii
index 1910c0e7cb3..1910c0e7cb3 100644
--- a/Master/texmf-dist/tex/context/base/regi-cyr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-cyr.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-def.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-def.mkii
index 3af0c9d3c5d..3af0c9d3c5d 100644
--- a/Master/texmf-dist/tex/context/base/regi-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-ibm.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-ibm.mkii
index 5756e77054f..5756e77054f 100644
--- a/Master/texmf-dist/tex/context/base/regi-ibm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-ibm.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-ini.mkii
index 1122ce18ac9..1122ce18ac9 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-mac.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-mac.mkii
index 30f57ab18cb..30f57ab18cb 100644
--- a/Master/texmf-dist/tex/context/base/regi-mac.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-mac.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-syn.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-syn.mkii
index 09fd59deeb5..09fd59deeb5 100644
--- a/Master/texmf-dist/tex/context/base/regi-syn.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-syn.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-uni.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-uni.mkii
index fe2f99a4f2d..fe2f99a4f2d 100644
--- a/Master/texmf-dist/tex/context/base/regi-uni.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-uni.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-utf.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-utf.mkii
index 09926a17231..09926a17231 100644
--- a/Master/texmf-dist/tex/context/base/regi-utf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-utf.mkii
diff --git a/Master/texmf-dist/tex/context/base/regi-vis.mkii b/Master/texmf-dist/tex/context/base/mkii/regi-vis.mkii
index 1807bdc93df..1807bdc93df 100644
--- a/Master/texmf-dist/tex/context/base/regi-vis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/regi-vis.mkii
diff --git a/Master/texmf-dist/tex/context/base/scrn-fld.mkii b/Master/texmf-dist/tex/context/base/mkii/scrn-fld.mkii
index 993b510ea4b..993b510ea4b 100644
--- a/Master/texmf-dist/tex/context/base/scrn-fld.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/scrn-fld.mkii
diff --git a/Master/texmf-dist/tex/context/base/scrn-hlp.mkii b/Master/texmf-dist/tex/context/base/mkii/scrn-hlp.mkii
index c526f51ebb4..c526f51ebb4 100644
--- a/Master/texmf-dist/tex/context/base/scrn-hlp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/scrn-hlp.mkii
diff --git a/Master/texmf-dist/tex/context/base/scrn-int.mkii b/Master/texmf-dist/tex/context/base/mkii/scrn-int.mkii
index 01d8501e217..01d8501e217 100644
--- a/Master/texmf-dist/tex/context/base/scrn-int.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/scrn-int.mkii
diff --git a/Master/texmf-dist/tex/context/base/scrn-nav.mkii b/Master/texmf-dist/tex/context/base/mkii/scrn-nav.mkii
index 3bb56bacee7..3bb56bacee7 100644
--- a/Master/texmf-dist/tex/context/base/scrn-nav.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/scrn-nav.mkii
diff --git a/Master/texmf-dist/tex/context/base/sort-def.mkii b/Master/texmf-dist/tex/context/base/mkii/sort-def.mkii
index 168f94e9e9a..168f94e9e9a 100644
--- a/Master/texmf-dist/tex/context/base/sort-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/sort-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii
index 8114f82c8eb..8114f82c8eb 100644
--- a/Master/texmf-dist/tex/context/base/sort-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.mkii b/Master/texmf-dist/tex/context/base/mkii/sort-lan.mkii
index c239623718f..c239623718f 100644
--- a/Master/texmf-dist/tex/context/base/sort-lan.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/sort-lan.mkii
diff --git a/Master/texmf-dist/tex/context/base/spac-gen.mkii b/Master/texmf-dist/tex/context/base/mkii/spac-gen.mkii
index 91e37925041..91e37925041 100644
--- a/Master/texmf-dist/tex/context/base/spac-gen.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spac-gen.mkii
diff --git a/Master/texmf-dist/tex/context/base/spac-grd.mkii b/Master/texmf-dist/tex/context/base/mkii/spac-grd.mkii
index 97699de51c4..97699de51c4 100644
--- a/Master/texmf-dist/tex/context/base/spac-grd.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spac-grd.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-def.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-def.mkii
index 60051579d04..60051579d04 100644
--- a/Master/texmf-dist/tex/context/base/spec-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-dpm.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-dpm.mkii
index fe721405aee..fe721405aee 100644
--- a/Master/texmf-dist/tex/context/base/spec-dpm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-dpm.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-dpx.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-dpx.mkii
index 323152e0b3c..323152e0b3c 100644
--- a/Master/texmf-dist/tex/context/base/spec-dpx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-dpx.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-dvi.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-dvi.mkii
index 89a1330a2e5..89a1330a2e5 100644
--- a/Master/texmf-dist/tex/context/base/spec-dvi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-dvi.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-fdf.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-fdf.mkii
index 0713fa80cd1..0713fa80cd1 100644
--- a/Master/texmf-dist/tex/context/base/spec-fdf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-fdf.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-ini.mkii
index 9361ed2225a..9361ed2225a 100644
--- a/Master/texmf-dist/tex/context/base/spec-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-mis.mkii
index de0debd3cdf..de0debd3cdf 100644
--- a/Master/texmf-dist/tex/context/base/spec-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-pdf.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-pdf.mkii
index 33722f60345..33722f60345 100644
--- a/Master/texmf-dist/tex/context/base/spec-pdf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-pdf.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-ps.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-ps.mkii
index 02ec16453cb..02ec16453cb 100644
--- a/Master/texmf-dist/tex/context/base/spec-ps.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-ps.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-tpd.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-tpd.mkii
index 042d5cdfe36..042d5cdfe36 100644
--- a/Master/texmf-dist/tex/context/base/spec-tpd.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-tpd.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-tr.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-tr.mkii
index 19ddb7495a3..19ddb7495a3 100644
--- a/Master/texmf-dist/tex/context/base/spec-tr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-tr.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-tst.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-tst.mkii
index 4f580e7b403..4f580e7b403 100644
--- a/Master/texmf-dist/tex/context/base/spec-tst.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-tst.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-var.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-var.mkii
index 3641ba9599e..3641ba9599e 100644
--- a/Master/texmf-dist/tex/context/base/spec-var.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-var.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-win.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-win.mkii
index e16984a56e6..e16984a56e6 100644
--- a/Master/texmf-dist/tex/context/base/spec-win.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-win.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-xet.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-xet.mkii
index 0cbd55ba7fd..0cbd55ba7fd 100644
--- a/Master/texmf-dist/tex/context/base/spec-xet.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-xet.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-xtx.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-xtx.mkii
index 81b83e66318..81b83e66318 100644
--- a/Master/texmf-dist/tex/context/base/spec-xtx.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-xtx.mkii
diff --git a/Master/texmf-dist/tex/context/base/spec-yy.mkii b/Master/texmf-dist/tex/context/base/mkii/spec-yy.mkii
index b5a1d590b08..b5a1d590b08 100644
--- a/Master/texmf-dist/tex/context/base/spec-yy.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/spec-yy.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-blk.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-blk.mkii
index b6056769c87..b6056769c87 100644
--- a/Master/texmf-dist/tex/context/base/strc-blk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-blk.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-des.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-des.mkii
index e699df9ea1d..e699df9ea1d 100644
--- a/Master/texmf-dist/tex/context/base/strc-des.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-des.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-flt.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-flt.mkii
index 26125c65f96..26125c65f96 100644
--- a/Master/texmf-dist/tex/context/base/strc-flt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-flt.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii
index 697618323bb..697618323bb 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-lnt.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-lnt.mkii
index 3c878a8d232..3c878a8d232 100644
--- a/Master/texmf-dist/tex/context/base/strc-lnt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-lnt.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-lst.mkii
index ffb1a4dbde4..ffb1a4dbde4 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-lst.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-mar.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-mar.mkii
index 2ae81e47bb5..2ae81e47bb5 100644
--- a/Master/texmf-dist/tex/context/base/strc-mar.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-mar.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-mat.mkii
index 34f716f3bdf..34f716f3bdf 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-mat.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-not.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-not.mkii
index bee21342ea7..bee21342ea7 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-not.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-num.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-num.mkii
index 99fb687c865..99fb687c865 100644
--- a/Master/texmf-dist/tex/context/base/strc-num.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-num.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-pag.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-pag.mkii
index 40e69b849b3..40e69b849b3 100644
--- a/Master/texmf-dist/tex/context/base/strc-pag.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-pag.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-ref.mkii
index 8a135eb043e..8a135eb043e 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-ref.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-reg.mkii
index 45be825258f..45be825258f 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-reg.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-sec.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-sec.mkii
index 01ca71eadbc..01ca71eadbc 100644
--- a/Master/texmf-dist/tex/context/base/strc-sec.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-sec.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-swd.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-swd.mkii
index 1525ab597a1..1525ab597a1 100644
--- a/Master/texmf-dist/tex/context/base/strc-swd.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-swd.mkii
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-syn.mkii
index 2ba5c94679e..2ba5c94679e 100644
--- a/Master/texmf-dist/tex/context/base/strc-syn.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/strc-syn.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-ali.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-ali.mkii
index c4a1aadc526..c4a1aadc526 100644
--- a/Master/texmf-dist/tex/context/base/supp-ali.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-ali.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-box.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-box.mkii
index 55641fd6336..55641fd6336 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-box.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-dir.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-dir.mkii
index f4f2949035b..f4f2949035b 100644
--- a/Master/texmf-dist/tex/context/base/supp-dir.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-dir.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-emp.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-emp.mkii
index ba9e09e3a4c..ba9e09e3a4c 100644
--- a/Master/texmf-dist/tex/context/base/supp-emp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-emp.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-eps.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-eps.mkii
index fb99469c5d6..fb99469c5d6 100644
--- a/Master/texmf-dist/tex/context/base/supp-eps.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-eps.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-fil.mkii
index b76dfb901a2..9a981797e05 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-fil.mkii
@@ -37,9 +37,17 @@
\def\f!parentpath {..}
\fi
-\def\openinputfile #1#2{\immediate\openin #1="#2"\relax} \def\closeinputfile #1{\immediate\closein #1}
-\def\openoutputfile#1#2{\immediate\openout#1="#2"\relax} \def\closeoutputfile#1{\immediate\closeout#1}
-
+\ifnum\texengine=\luatexengine
+ \def\openinputfile #1#2{\openin #1{#2}\relax}
+ \def\openoutputfile#1#2{\immediate\openout#1{#2}\relax}
+\else
+ \def\openinputfile #1#2{\openin #1 "#2"\relax}
+ \def\openoutputfile#1#2{\immediate\openout#1 "#2"\relax}
+\fi
+
+\def\closeinputfile #1{\immediate\closein #1}
+\def\closeoutputfile#1{\immediate\closeout#1}
+
%D \macros
%D {pushendofline,popendofline}
%D
@@ -235,7 +243,11 @@
\unexpanded\def\input{\normalinput}
-\def\inputgivenfile#1{\normalinput"#1"\relax}
+\ifnum\texengine=\luatexengine
+ \def\inputgivenfile#1{\normalinput{#1}\relax}
+\else
+ \def\inputgivenfile#1{\normalinput"#1"\relax}
+\fi
%D \macros
%D {readfile,ReadFile,maxreadlevel}
diff --git a/Master/texmf-dist/tex/context/base/supp-fun.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-fun.mkii
index 9bba4f5a85f..9bba4f5a85f 100644
--- a/Master/texmf-dist/tex/context/base/supp-fun.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-fun.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-lat.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-lat.mkii
index 343a7674c27..343a7674c27 100644
--- a/Master/texmf-dist/tex/context/base/supp-lat.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-lat.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-mat.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-mat.mkii
index e8a34fc90ee..e8a34fc90ee 100644
--- a/Master/texmf-dist/tex/context/base/supp-mat.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mat.mkii
diff --git a/Master/texmf-dist/tex/context/base/mkii/supp-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-mis.mkii
new file mode 100644
index 00000000000..bc511e518b6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mis.mkii
@@ -0,0 +1,733 @@
+%D \module
+%D [ file=supp-mis,
+%D version=2004.10.26, % 1997.01.04,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=Missing (For Generic Use),
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D I will clean up this module (a la supp-pdf.tex preamble).
+
+%D Some support modules are more or less independant. This
+%D module, which is not part of plain \CONTEXT, provides the
+%D missing macros and declarations of registers.
+
+\ifx \undefined \writestatus \else \expandafter \endinput \fi
+
+%D Because \LATEX\ has no safe package loading mechanism, we
+%D need to take care of possible interference.
+
+\def\StartLatexHack % replace this by the one in supp-pdf
+ {\edef\StopLatexHack
+ {\catcode\string`\noexpand/=\the\catcode\string`/
+ \catcode\string`\noexpand-=\the\catcode\string`-
+ \catcode\string`\noexpand:=\the\catcode\string`:
+ \catcode\string`\noexpand;=\the\catcode\string`;
+ \catcode\string`\noexpand"=\the\catcode\string`"
+ \catcode\string`\noexpand<=\the\catcode\string`<
+ \catcode\string`\noexpand>=\the\catcode\string`>
+ \catcode\string`\noexpand`=\the\catcode\string``}%
+ \catcode\string`/=12 \catcode\string`-=12
+ \catcode\string`:=12 \catcode\string`;=12
+ \catcode\string`"=12 \catcode\string`<=12
+ \catcode\string`>=12 \catcode\string``=12 }
+
+%D This hack is needed especially for \LATEX\ users who use
+%D the Babel package. The Germans have active \type {"}'s, the
+%D Poles have \type {/}, while the French have \type {:} and
+%D \type {;} defines as command (thanks to Daniel Flipo for
+%D pointing that out and testing). Potentially active \type
+%D {?}'s and \type {!}'s are less dangerous since they are
+%D handled by the \type {\protect} and \type {\unprotect}
+%D macros.
+
+\StartLatexHack
+
+%D \macros
+%D {ifnocontextobject}
+%D
+%D First we take care of redundant defining. The next set of
+%D macros are a bit complicated by the fact that Plain
+%D \TEX\ defines the \type{\new}||macros as being outer.
+%D Furthermore nested \type{\if}'s can get us into
+%D trouble.
+
+\def\definecontextobject
+ {\iftrue}
+
+\def\gobblecontextobject
+ {\setbox0\hbox
+ \bgroup
+ \long\def\gobblecontextobject##1\fi{\egroup}%
+ \expandafter\gobblecontextobject\string}
+
+\long\def\ifnocontextobject#1\do
+ {\ifx#1\undefined
+ \expandafter\definecontextobject
+ \else
+ %\writestatus{system}{beware of conflicting \string#1}%
+ \expandafter\gobblecontextobject
+ \fi}
+
+%D \macros
+%D {beginETEX,beginTEX}
+%D
+%D Outside \CONTEXT\ we will not be \ETEX||aware.
+
+\long\def\beginETEX #1\endETEX {}
+
+\let\beginTEX\relax \let\endTEX\relax
+
+%D \macros
+%D {writestatus}
+%D
+%D We start each module with a message. Normally the output is
+%D formatted, but here we keep things simple.
+
+\ifnocontextobject \writestatus \do
+
+ \def\writestatus#1#2{\immediate\write16{#1 : #2}}
+
+\fi
+
+%D Let's see if it works.
+
+\writestatus{loading}{ConTeXt Support Macros / Miscellaneous (2004.10.26)}
+
+%D \macros
+%D {protect,unprotect}
+%D
+%D Next we present a poor mans alternative for \type{\protect}
+%D and \type{\unprotect}, two commands that enable us to use
+%D the characters \type{@}, \type{!} and \type{?} in macro
+%D names.
+
+\ifnocontextobject \protect \do
+
+ \let\protect\relax
+
+\fi
+
+\newcount\protectiondepth
+
+\ifnocontextobject \unprotect \do
+
+ \def\unprotect
+ {\advance\protectiondepth 1
+ \ifnum\protectiondepth=1
+ \let\normalprotect=\protect
+ \def\protect
+ {\ifnum\protectiondepth>0
+ \advance\protectiondepth -1
+ \ifnum\protectiondepth=0
+ \doprotect
+ \let\protect=\normalprotect
+ \fi
+ \fi}
+ \edef\doprotect
+ {\catcode`\noexpand @=\the\catcode`@\relax
+ \catcode`\noexpand !=\the\catcode`!\relax
+ \catcode`\noexpand ?=\the\catcode`?\relax}
+ \catcode`@=11
+ \catcode`!=11
+ \catcode`?=11
+ \fi}
+
+\fi
+
+%D We start using this one it at once.
+
+\unprotect
+
+%D \macros
+%D {scratch...,if...,next...}
+%D
+%D We need some scratch registers. Users are free to use them,
+%D but can never be sure of their value once another macro is
+%D called. We only allocate things when they are yet
+%D undefined. This way we can't mess up other macro packages,
+%D but of course previous definitions can mess up our modules.
+
+\ifnocontextobject \donetrue \do \newif\ifdone \fi
+
+% no time now, will do a better test later (based on dimendef)
+
+\def\!!stringa{plain} \ifx\!!stringa\fmtname \donetrue \else
+\def\!!stringa{eplain} \ifx\!!stringa\fmtname \donetrue \else
+\def\!!stringa{babel-plain} \ifx\!!stringa\fmtname \donetrue \else
+ \donefalse \fi \fi \fi
+
+\ifdone
+ % plain defines some 15 dimens, so we need to define a few
+ % dummies in order to get out of the scratch area
+ \newdimen\scratchdimen % 16
+ \newdimen\scratchdimen % 17
+ \newdimen\scratchdimen % 18
+ \newdimen\scratchdimen % 19
+ \newdimen\scratchdimen % 20
+ \newdimen\scratchdimen % 21
+\fi
+
+\def\stripnewabove#1%
+ {\ifnum10<9#1 #1\else\expandafter\stripnewabove\fi}%
+
+\def\newabove\csname#1\endcsname#2% \dimen \name
+ {\csname#1\endcsname#2%
+ \ifnum\expandafter\stripnewabove\meaning#2>20\else
+ \newabove\csname#1\endcsname#2%
+ \fi}
+
+\ifnocontextobject \scratchcounter \do \newabove \csname newcount\endcsname \scratchcounter \fi
+\ifnocontextobject \scratchtoks \do \newabove \csname newtoks\endcsname \scratchtoks \fi
+\ifnocontextobject \scratchdimen \do \newabove \csname newdimen\endcsname \scratchdimen \fi
+\ifnocontextobject \scratchskip \do \newabove \csname newskip\endcsname \scratchskip \fi
+\ifnocontextobject \scratchmuskip \do \newabove \csname newmuskip\endcsname \scratchmuskip \fi
+\ifnocontextobject \scratchbox \do \csname newbox\endcsname \scratchbox \fi
+\ifnocontextobject \scratchread \do \csname newread\endcsname \scratchread \fi
+\ifnocontextobject \scratchwrite \do \csname newwrite\endcsname \scratchwrite \fi
+
+%D Watch out, in the past we ran into troubles with \type {\onepoint}
+%D (and others) mening something different in \LATEX\ then here. In
+%D such situations clashes are bound to happen. For this reason the
+%D assignments are no inside the test. We try to catch those situations
+%D but we cannot keep ahead of the future.
+
+\ifnocontextobject \zeropoint \do \newdimen \zeropoint \zeropoint = 0pt \fi % else problems with dimen12
+\ifnocontextobject \onepoint \do \newdimen \onepoint \onepoint = 1pt \fi
+\ifnocontextobject \onebasepoint \do \newdimen \onebasepoint \onebasepoint = 1bp \fi
+\ifnocontextobject \zerocount \do \chardef \zerocount = 0 \fi
+\ifnocontextobject \plusone \do \chardef \plusone = 1 \fi
+\ifnocontextobject \minusone \do \newcount \minusone \minusone = -1 \fi
+\ifnocontextobject \thousandpoint \do \newdimen \thousandpoint \thousandpoint = 1000pt \fi
+\ifnocontextobject \onerealpoint \do \newdimen \onerealpoint \onerealpoint = 1pt \fi % latex has a funny \onepoint
+
+\ifnocontextobject \emptytoks \do \newtoks \emptytoks \fi
+\ifnocontextobject \nextbox \do \newbox \nextbox \fi
+\ifnocontextobject \nextdepth \do \newdimen \nextdepth \fi
+
+\ifnocontextobject \CONTEXTtrue \do \newif\ifCONTEXT \fi
+\ifnocontextobject \eightbitcharacterstrue \do \newif\ifeightbitcharacters \fi
+\ifnocontextobject \MPdrawingdonetrue \do \newif\ifMPdrawingdone \fi
+
+\ifnocontextobject \ifzeropt \do \let\ifzeropt\ifcase \fi
+
+%D \macros
+%D {@@...}
+%D
+%D We use symbolic name for \CATCODES. They can only be used
+%D when we are in unprotected state.
+
+\ifnocontextobject \@@escape \do \chardef\@@escape = 0 \fi
+\ifnocontextobject \@@begingroup \do \chardef\@@begingroup = 1 \fi
+\ifnocontextobject \@@endgroup \do \chardef\@@endgroup = 2 \fi
+\ifnocontextobject \@@endofline \do \chardef\@@endofline = 5 \fi
+\ifnocontextobject \@@ignore \do \chardef\@@ignore = 9 \fi
+\ifnocontextobject \@@space \do \chardef\@@space = 10 \fi
+\ifnocontextobject \@@letter \do \chardef\@@letter = 11 \fi
+\ifnocontextobject \@@other \do \chardef\@@other = 12 \fi
+\ifnocontextobject \@@active \do \chardef\@@active = 13 \fi
+\ifnocontextobject \@@comment \do \chardef\@@comment = 14 \fi
+
+\def\s!sp{sp}
+\def\s!pt{pt}
+\def\s!bp{bp}
+
+%D \macros
+%D {@EA,expanded,expandoneargafter,expandtwoargsafter}
+%D
+%D Also needed:
+
+\let\@EA=\expandafter \let\@@expanded\empty
+
+\def\expanded#1%
+ {\long\xdef\@@expanded{\noexpand#1}\@@expanded}
+
+\def\expandoneargafter#1#2%
+ {\@EA#1\@EA{#2}}
+
+\def\expandtwoargsafter#1#2#3%
+ {\@EA\@EA\@EA#1\@EA\@EA\@EA{\@EA#2\@EA}\@EA{#3}}
+
+\def\@EAEAEA{\@EA\@EA\@EA}
+
+%D \macros
+%D {everyline,EveryLine,EveryPar}
+%D
+%D In \CONTEXT\ we use \type{\everypar} for special purposes
+%D and provide \type{\EveryPar} as an alternative. The same
+%D goes for \type{\everyline} and \type{\EveryLine}.
+
+\ifnocontextobject \everyline \do \newtoks\everyline \fi
+\ifnocontextobject \EveryPar \do \let\EveryPar =\everypar \fi
+\ifnocontextobject \EveryLine \do \let\EveryLine=\everyline \fi
+
+%D \macros
+%D {globallet}
+
+\def\globallet{\global\let}
+
+%D \macros
+%D {!!...}
+%D
+%D We reserve ourselves some scratch strings (i.e. macros)
+%D and some more counters.
+
+\ifnocontextobject \!!stringa \do \def\!!stringa {} \fi
+\ifnocontextobject \!!stringb \do \def\!!stringb {} \fi
+\ifnocontextobject \!!stringc \do \def\!!stringc {} \fi
+\ifnocontextobject \!!stringd \do \def\!!stringd {} \fi
+
+\ifnocontextobject \!!counta \do \newcount\!!counta {} \fi
+\ifnocontextobject \!!countb \do \newcount\!!countb {} \fi
+
+%D \macros
+%D {!!...}
+%D
+%D The next set of definitions speed up processing a bit.
+%D Furthermore it saves memory.
+
+\ifnocontextobject \!!zeropoint \do \def\!!zeropoint {0pt} \fi
+\ifnocontextobject \!!zerocount \do \def\!!zerocount {0} \fi
+\ifnocontextobject \!!tenthousand \do \def\!!tenthousand {10000} \fi
+
+\ifnocontextobject \!!width \do \def\!!width {width} \fi
+\ifnocontextobject \!!height \do \def\!!height {height} \fi
+\ifnocontextobject \!!depth \do \def\!!depth {depth} \fi
+
+\ifnocontextobject \!!plus \do \def\!!plus {plus} \fi
+\ifnocontextobject \!!minus \do \def\!!minus {minus} \fi
+\ifnocontextobject \!!to \do \def\!!to {to} \fi
+
+%D \macros
+%D {smashbox}
+%D
+%D The system modules offer a range of smashing macros, of
+%D which we only copied \type{\smashbox}.
+
+\ifnocontextobject \smashbox \do
+
+ \def\smashbox#1%
+ {\wd#1\zeropoint
+ \ht#1\zeropoint
+ \dp#1\zeropoint}
+
+\fi
+
+%D \macros
+%D {dowithnextbox}
+%D
+%D Also without further comment, we introduce a macro that
+%D gets the next box and does something usefull with it.
+%D Because the \type{\afterassignment} is executed inside the
+%D box, we have to use a \type{\aftergroup} too.
+
+\ifnocontextobject \dowithnextbox \do
+
+ \def\dowithnextbox#1%
+ {\def\dodowithnextbox{#1}%
+ \afterassignment\dododowithnextbox
+ \setbox\nextbox}
+
+ \def\dododowithnextbox%
+ {\aftergroup\dodowithnextbox}
+
+\fi
+
+%D \macros
+%D {setvalue,setevalue,setxvalue,,setgvalue,
+%D getvalue,
+%D letvalue,letgvalue}
+%D
+%D The next two macros expand their argument to
+%D \type{\argument}. The first one is used to define macro's
+%D the second one executes them.
+
+\ifnocontextobject \setvalue \do
+
+ \def\setvalue #1{\expandafter\def\csname#1\endcsname}
+ \def\setevalue#1{\expandafter\edef\csname#1\endcsname}
+ \def\setgvalue#1{\expandafter\gdef\csname#1\endcsname}
+ \def\setxvalue#1{\expandafter\xdef\csname#1\endcsname}
+ \def\getvalue #1{\csname#1\endcsname}
+ \def\letvalue #1{\expandafter\let\csname#1\endcsname}
+ \def\letgvalue#1{\global\expandafter\let\csname#1\endcsname}
+\fi
+
+%D \macros
+%D {unexpanded}
+%D
+%D The next command can be used as prefixed for commands that
+%D need protection during tests and writing to files. This
+%D is a very \CONTEXT\ specific one.
+
+\ifnocontextobject \unexpanded \do
+
+ \let\unexpanded\relax
+
+\fi
+
+%D \macros
+%D {convertargument}
+%D
+%D The original one offers a bit more, like global assignment, the
+%D the next implementation is however a bit more byte saving.
+
+\ifnocontextobject \convertargument \do
+
+ \def\doconvertargument#1>{}
+
+ \long\def\convertargument#1\to#2%
+ {\long\def\@@convertedargument{#1}%
+ \edef#2{\expandafter\doconvertargument\meaning\@@convertedargument}}
+
+\fi
+
+%D \macros
+%D {forgetall}
+%D
+%D Sometimes we have to disable interference of whatever kind
+%D of skips and mechanisms. The next macro resets some.
+
+\ifnocontextobject \forgetall \do
+
+ \def\forgetall
+ {\parskip\zeropoint
+ \leftskip\zeropoint
+ \parindent\zeropoint
+ \everypar{}}
+
+\fi
+
+%D \macros
+%D {withoutpt,
+%D ScaledPointsToBigPoints,ScaledPointsToWholeBigPoints}
+%D
+%D \TEX\ lacks some real datastructure. We can however use
+%D \DIMENSIONS. This kind of trickery is needed when we want
+%D \TEX\ to communicate with the outside world (by means of
+%D \type{\specials}).
+
+\ifnocontextobject \withoutpt \do
+
+ {\catcode`\.=\@@other
+ \catcode`\p=\@@other
+ \catcode`\t=\@@other
+ \gdef\WITHOUTPT#1pt{#1}}
+
+ \def\withoutpt#1%
+ {\expandafter\WITHOUTPT#1}
+
+ \def\ScaledPointsToBigPoints#1#2%
+ {\scratchdimen=#1sp\relax
+ \scratchdimen=.996264\scratchdimen
+ \edef#2{\withoutpt{\the\scratchdimen}}}
+
+ \def\ScaledPointsToWholeBigPoints#1#2%
+ {\scratchdimen=#1sp
+ \scratchdimen=.996264\scratchdimen
+ \scratchcounter=\scratchdimen
+ \advance\scratchcounter by 32768
+ \divide\scratchcounter by 65536
+ \edef#2{\the\scratchcounter}}
+
+\fi
+
+%D \macros
+%D {doprocessfile}
+%D
+%D This macro takes three arguments: the file number, the
+%D filename and a macro that handles the content of a read
+%D line.
+
+\newif\iffileprocessed
+
+\ifnocontextobject \doprocessfile \do
+
+ \def\doprocessfile#1#2#3%
+ {\openin#1=#2\relax
+ \ifeof#1%
+ \fileprocessedfalse
+ \closein#1\relax
+ \else
+ \fileprocessedtrue
+ \gdef\dofinishfile%
+ {\closein#1\relax
+ \global\let\doprocessline\relax}%
+ \gdef\doprocessline%
+ {\ifeof#1%
+ \dofinishfile
+ \else
+ \global\read#1 to \fileline
+ #3\relax
+ \expandafter\doprocessline
+ \fi}%
+ \expandafter\doprocessline
+ \fi}
+
+\fi
+
+%D \macros
+%D {uncatcodespecials}
+%D
+%D This one is taken from the \TEX\ book. The \CONTEXT\
+%D alternative is a bit different, but we hope this one works
+%D here.
+
+\ifx\dospecials\undefined
+
+ \def\dospecials
+ {\do\ \do\\\do\{\do\}\do\$%
+ \do\#\do\^\do\_\do\&\do\%%
+ \do\~\do\^^A\do\^^K}
+
+\fi
+
+\ifnocontextobject \uncatcodespecials \do
+
+ \def\uncatcodespecials
+ {\def\do##1{\catcode`##1=12 }\dospecials
+ \catcode`\ =\@@space
+ \catcode`\^^L=\@@ignore
+ \catcode`\^^M=\@@endofline
+ \catcode`\^^?=\@@ignore}
+
+\fi
+
+\ifnocontextobject \setnaturalcatcodes \do
+
+\def\setnaturalcatcodes
+ {\catcode`\!=\@@other \catcode`\?=\@@other \catcode`\@=\@@other
+ \catcode`\#=\@@other \catcode`\&=\@@other \catcode`\|=\@@other
+ \catcode`\$=\@@other \catcode`\^=\@@other \catcode`\_=\@@other
+ \catcode`\*=\@@other \catcode`\/=\@@other
+ \catcode`\-=\@@other \catcode`+=\@@other
+ \catcode`\==\@@other \catcode`\<=\@@other \catcode`\>=\@@other
+ \catcode`\"=\@@other \catcode`\'=\@@other \catcode`\`=\@@other
+ \catcode`\:=\@@other \catcode`\;=\@@other
+ \catcode`\,=\@@other \catcode`\.=\@@other \catcode`\~=\@@other
+ \catcode`\(=\@@other \catcode`\)=\@@other
+ \catcode`\{=\@@other \catcode`\}=\@@other
+ \catcode`\\=\@@other \catcode`\%=\@@other }
+
+\fi
+
+%D \macros
+%D {doglobal}
+%D
+%D Some \CONTEXT\ low level macros can have a \type{\doglobal}
+%D prefix. Let's just forget about that here:
+
+\ifnocontextobject \doglobal \do \let\doglobal\relax \fi
+
+%D The next obscure one is needed in the generic verbatim
+%D environment. When we end up with more of these, it's time
+%D to load the module \type{syst-gen}.
+
+\ifnocontextobject \doifincsnameelse \do
+
+ \def\dodoifincsnameelse#1#2%
+ {\def\dododoifincsnameelse##1#1##2##3\war%
+ {\csname\if##2@iffalse\else iftrue\fi\endcsname}%
+ \expandafter\dododoifincsnameelse#2#1@@\war}
+
+ \long\def\doifincsnameelse#1#2#3#4%
+ {\edef\@@instring{#1}%
+ \expandafter\dodoifincsnameelse\expandafter{\@@instring}{#2}%
+ #3%
+ \else
+ #4%
+ \fi}
+
+\fi
+
+%D \macros
+%D {dostepwiserecurse, dorecurse, doloop, exitloop}
+%D
+%D The next loop macro is a real weak one, and does not offer
+%D the full \CONTEXT\ functionality, let alone nesting, but
+%D for simple purposes, its behaviour is acceptable.
+
+\newcount\recursecounter
+
+\def\dostepwiserecurse#1#2#3#4% very weak and rubishly version
+ {\ifnum#2<#1\relax\else\dodostepwiserecurse{#1}{#2}{#3}{#4}\fi}
+
+\def\dodostepwiserecurse#1#2#3#4% very weak and rubishly version
+ {\recursecounter=#1\relax
+ \loop
+ \edef\recurselevel{\the\recursecounter}%
+ #4\relax
+ \ifnum\recursecounter<#2\relax
+ \advance\recursecounter by #3\relax
+ \repeat}
+
+\def\dorecurse#1%
+ {\dostepwiserecurse{1}{#1}{1}}
+
+\def\doloop
+ {\dostepwiserecurse{1}{\maxdimen}{1}}
+
+\def\exitloop
+ {\recursecounter=\maxdimen}
+
+%D \macros
+%D {ifundefined,doifdefined,doifundefined,
+%D doifdefinedelse,doifundefinedelse}
+%D
+%D These alteratives are not robust but suitable for simple
+%D usage. The official ones are a bit faster.
+
+\ifnocontextobject \doifdefined \do
+
+ \def\ifundefined#1%
+ {\expandafter\ifx\csname#1\endcsname\relax}
+
+ \def\doifdefinedelse#1#2#3%
+ {\expandafter\ifx\csname#1\endcsname\relax#3\else#2\fi}
+
+ \def\doifundefinedelse#1#2#3%
+ {\expandafter\ifx\csname#1\endcsname\relax#2\else#3\fi}
+
+ \def\doifdefined#1#2%
+ {\expandafter\ifx\csname#1\endcsname\relax\else#2\fi}
+
+ \def\doifundefined#1#2%
+ {\expandafter\ifx\csname#1\endcsname\relax#2\fi}
+
+\fi
+
+%D \macros
+%D {doifinstringelse}
+%D
+%D It seems like we end up with more and more macros here.
+%D Sigh.
+
+\ifnocontextobject \doifinstringelse \do
+
+ \def\p!doifinstringelse#1#2%
+ {\def\pp!doifinstringelse##1#1##2##3\war%
+ {\csname if\if##2@fals\else tru\fi e\endcsname}%
+ \expanded{\pp!doifinstringelse#2#1@@\noexpand\war}}
+
+ \long\def\doifinstringelse#1#2#3#4%
+ {\edef\@@@instring{#1}%
+ \@EA\p!doifinstringelse\@EA{\@@@instring}{#2}#3\else#4\fi}
+
+\fi
+
+%D \macros
+%D {twodigitrounding}
+%D
+%D We don't support rounding outside \CONTEXT. Sorry.
+
+\def\twodigitrounding#1{#1}
+
+%D \macros
+%D {lineheight}
+%D
+%D In \CONTEXT\ we have \type{\lineheight}, which in many
+%D cases matches \type {\baselineskip}.
+
+\ifnocontextobject \lineheight \do
+
+ \def\lineheight{\baselineskip}
+
+\fi
+
+%D \macros
+%D {dohandletokens}
+%D
+%D The following macro is the simplified version, but good
+%D enough for day to day hacks.
+%D
+%D \starttyping
+%D \dohandletokens some text\with\somemacro
+%D \stoptyping
+
+\ifnocontextobject \dohandletokens \do
+
+\def\dodohandletokens
+ {\ifx\next\end \else
+ \docommand{\next}%
+ \expandafter\dohandletokens
+ \fi}
+
+\def\dohandletokens
+ {\afterassignment\dodohandletokens\let\next= }
+
+\long\def\handletokens#1\with#2%
+ {\let\docommand=#2%
+ \dohandletokens#1\end}
+
+\fi
+
+%D Very reduced:
+
+\long\def\appendtoks#1\to#2%
+ {\scratchtoks{#1}\expanded{#2{\the#2\the\scratchtoks}}}
+
+%D Well, also handy.
+
+\def\doiffileelse#1#2#3%
+ {\immediate\openin\scratchread=#1\relax
+ \ifeof\scratchread
+ \def\next{#3}%
+ \else
+ \def\next{#2}%
+ \fi
+ \immediate\closein\scratchread
+ \next}
+
+%D New.
+
+\let\donothing\empty
+
+%D Also new:
+
+\def\letempty #1{\let#1\empty}
+\def\globalletempty#1{\global\let#1\empty}
+
+\def\letvalueempty #1{\expandafter\let\csname#1\endcsname\empty}
+\def\letgvalueempty#1{\global\expandafter\let\csname#1\endcsname\empty}
+
+%D Sigh
+
+\def\settrue #1{\chardef#1\zerocount}
+\def\setfalse#1{\chardef#1\plusone}
+
+\let\newconditional = \setfalse
+\let\ifconditional = \ifcase
+
+%D We could load \type {norm-tex} but this takes less hash space:
+
+\let \normalif = \if
+\let \normalifcase = \ifcase
+\let \normalifcat = \ifcat
+\let \normalifdim = \ifdim
+\let \normalifeof = \ifeof
+\let \normaliffalse = \iffalse
+\let \normalifhbox = \ifhbox
+\let \normalifhmode = \ifhmode
+\let \normalifinner = \ifinner
+\let \normalifmmode = \ifmmode
+\let \normalifnum = \ifnum
+\let \normalifodd = \ifodd
+\let \normaliftrue = \iftrue
+\let \normalifvbox = \ifvbox
+\let \normalifvmode = \ifvmode
+\let \normalifvoid = \ifvoid
+\let \normalifx = \ifx
+\let \normalfi = \fi
+\let \normalelse = \else
+
+\let \normalunexpanded = \unexpanded % beware the primitive, not the context one
+
+%D That's it. Please forget this junk and take a look at how
+%D it should be done.
+
+\StopLatexHack \protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-mis.tex b/Master/texmf-dist/tex/context/base/mkii/supp-mis.tex
index bda8d4f6fda..bda8d4f6fda 100644
--- a/Master/texmf-dist/tex/context/base/supp-mis.tex
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mis.tex
diff --git a/Master/texmf-dist/tex/context/base/mkii/supp-mpe.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-mpe.mkii
new file mode 100644
index 00000000000..2e5e7e52820
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mpe.mkii
@@ -0,0 +1,1371 @@
+%D \module
+%D [ file=supp-mpe,
+%D version=1999.07.10,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=METAPOST Special Extensions,
+%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.
+
+% fuzzy and complicating is the fact that we need to support
+% context as well as mptopdf, so we cannot fall back on the
+% special drivers and color module (although there may be
+% good reasons to use a smaller context instead); also,
+% shading is handled here while it should move to the special
+% driver - to do!
+
+%D This module is still experimental and deals with some
+%D extensions to \METAPOST. When using \POSTSCRIPT\ output,
+%D these extensions can be supplied by means of proper
+%D preamble definitions, but when producing \PDF\ we have to
+%D set up the appropriate datastructures ourselves. It acts as
+%D a plug in into \type {supp-pdf}. As soon as we need more
+%D extensions, we will generalize these macro. Some
+%D definitions will move to the special drivers.
+
+%D For usage in plain \TEX, say something:
+%D
+%D \starttyping
+%D \input supp-pdf
+%D \input supp-mpe
+%D
+%D \MPcmykcolorstrue
+%D \MPspotcolorstrue
+%D \makeMPintoPDFobject\plusone
+%D \stoptyping
+
+\ifx\writestatus\undefined
+ \immediate\write16{[Loading MPS to PDF extensions.]}
+\else
+ \writestatus{loading}{ConTeXt Support Macros / MPS extensions}
+\fi
+
+%D We implement extensions by using the \METAPOST\ special
+%D mechanism. Opposite to \TEX's specials, the \METAPOST\ ones
+%D are flushed before or after the graphic data, but thereby
+%D are no longer connected to a position.
+%D
+%D We implement specials by overloading the \type {fill}
+%D operator. By counting the fills, we can let the converter
+%D treat the appropriate fill in a special way. The
+%D specification of the speciality can have two forms,
+%D determined by the setting of a boolean variable:
+%D
+%D \starttyping
+%D _inline_specials_ := false ; % comment like code (default)
+%D _inline_specials_ := true ; % command like code
+%D \stoptyping
+%D
+%D When the specification is embedded as comment, it looks
+%D like:
+%D
+%D \starttyping
+%D %%MetaPostSpecial <size> <data> <number> <identifier>
+%D \stoptyping
+%D
+%D The in||line alternative is more tuned for \POSTSCRIPT,
+%D since it permits us to define a macro \type {special}.
+%D
+%D \starttyping
+%D inline : <data> <number> <identifier> <size> special
+%D \stoptyping
+%D
+%D The \type {identifier} determines what to do, and the data
+%D can be used to accomplish this. A type~2 shading function
+%D has identifier~2. Alltogether, the number of parameters is
+%D specified in \type {size}. The \type {number} is the number
+%D of the fill that needs the special treatment. For a type~2
+%D and~3 shaded fill, the datablock contains the following
+
+%D data:
+%D
+%D \starttyping
+%D from to n inner_r g b x y outer_r g b x y
+%D from to n inner_r g b x y radius outer_r g b x y radius
+%D \stoptyping
+%D
+%D The implementation below saves the data on the stack in
+%D a way similar to the macros in \type {supp-pdf.tex}, and
+%D just overload a few already defined handlers. That way,
+%D the existing macros are still generic. \footnote {Actually,
+%D the macros here are just as generic.}
+%D
+%D Currently the only extension concerns shading, which is
+%D accomplished by handling yet another value of \type
+%D {\finiMPpath}. The recource disctionary is stored and
+%D later picked up by the general \CONTEXT\ figure inclusion
+%D macros.
+
+\unprotect
+
+%D The \type {%%MetaPostSpecials: version.revision signal} line
+%D triggers this module into handling color specifications kind
+%D of special. We need this safeguard for non||special
+%D usage.
+
+\chardef\MPspecialversion = 0 % specials when >1
+\chardef\MPspecialrevision = 0 % specials when >1
+\chardef\MPspecialsignal = 0 % passed on by graphic
+
+\chardef\inlineMPspecials = 1 % only needed for stack resetting
+
+%D This macro handles the special definitions that are
+%D passed as comment.
+
+\def\dohandleMPspecialcomment#1
+ {\setMPargument{#1}%
+ \advance\scratchcounter \minusone
+ \ifcase\scratchcounter
+ \handleMPspecialcommand
+ \donetrue
+ \doresetMPstack
+ \let\handleMPsequence\dohandleMPsequence
+ \expandafter\handleMPsequence
+ \else
+ \expandafter\dohandleMPspecialcomment
+ \fi}
+
+\def\handleMPspecialcomment #1 % number of arguments
+ {\doresetMPstack
+ \scratchcounter#1\relax
+ \ifcase\scratchcounter % when zero, inline shading is used
+ \chardef\inlineMPspecials\plusone
+ \let\handleMPsequence\dohandleMPsequence
+ \expandafter\handleMPsequence
+ \else
+ \chardef\inlineMPspecials\zerocount
+ \expandafter\dohandleMPspecialcomment
+ \fi}
+
+%D When defined inline, we use another macro to handle the
+%D definitions. Actually, this macro is called by the
+%D previous ones.
+
+\def\handleMPspecialcommand
+ {\ifcase\inlineMPspecials\or
+ \advance\nofMParguments \minusone % pop the size
+ \fi
+ \ifundefined\MPspecial
+ \message{[unknown \MPspecial]}%
+ \else
+ \csname\MPspecial\endcsname
+ \fi
+ \ifcase\inlineMPspecials
+ \doresetMPstack % 0
+ \else
+ \resetMPstack % 1
+ \fi}
+
+%D This macro triggers special support. Currently, the
+%D version and revision number are not used. Any version number
+%D greater than zero will enable special support.
+
+\newconditional\manyMPspecials % \settrue\manyMPspecials
+
+\def\handleMPspecialscomment #1.#2 #3 % version.revision signal #4=div=1000|10000
+ {\doresetMPstack
+ \chardef\MPspecialversion #1%
+ \chardef\MPspecialrevision#2%
+ \chardef\MPspecialsignal #3%
+ \let\handleMPsequence\dohandleMPsequence
+ \ifnum#1=\plusone
+ \expandafter\handleMPsequence
+ \else
+ \expandafter\handleMPspecialscommentx
+ \fi}
+
+\def\handleMPspecialscommentx #1 % version 2
+% {\doifelsedoifelse{#1}{10000}{\settrue\manyMPspecials}{\setfalse\manyMPspecials}% local
+ {\ifnum10000=0#1\relax
+ \settrue \manyMPspecials
+ \else
+ \setfalse\manyMPspecials
+ \fi
+ \setMPextensions
+ \handleMPsequence}
+
+% one can say (in meta-ini):
+%
+% \prependtoks
+% _special_div_ := 1000\ifconditional\manyMPspecials0\fi ;
+% \to \MPextensions
+
+%D In case of \PDF, we need to prepare resourcs.
+
+\newtoks\MPstartresources
+\newtoks\MPstopresources
+
+\def\startMPresources
+ {\the\MPstartresources
+ \ifx\currentPDFresources\empty\else
+ \message{[unused resources]}%
+ \fi
+ \global\let\currentPDFresources\empty}
+
+\def\stopMPresources
+ {\let\currentPDFresources\empty
+ \the\MPstopresources}
+
+%D Since colors are not subjected to transformations, we can
+%D only use colors as signal. In our case, we use a dummy colored
+%D path with a red color component of \type {0.n}, so \type
+%D {0.001} is the first path and \type {0.010} the tenth. Since
+%D \METAPOST strips trailing zeros, we have to padd the string.
+
+\newif\ifMPcmykcolors
+\newif\ifMPspotcolors
+
+\ifx\normalhandleMPrgbcolor\undefined % in case we reload this module
+
+ \let\normalhandleMPrgbcolor \handleMPrgbcolor
+ \let\normalhandleMPcmykcolor\handleMPcmykcolor
+ \let\normalhandleMPgraycolor\handleMPgraycolor
+ \let\normalhandleMPspotcolor\handleMPspotcolor
+
+\fi
+
+%D When we are using \CONTEXT, we will fall back to the
+%D better color conversion routines. This also has the advantage
+%D that we don't have to parse and convert the file. In this
+%D alternative, \type {\!MP} is not (yet) supported. Because
+%D we can (for efficiency reasons) turn off strokecolor,
+%D something we cannot do in \METAPOST\ converted code.
+
+\newif\ifPDFMPstrokecolor \PDFMPstrokecolortrue
+
+%D [This code should move to meta-ini.]
+
+\ifCONTEXT % we can use this for a better xgstate handling
+
+ \def\checkPDFMPstrokecolor
+ {\ifPDFMPstrokecolor \PDFstrokecolortrue \fi}
+
+ \def\normalhandleMPrgbcolor
+ {{\checkPDFMPstrokecolor\execcolorR\gMPa1:\gMPa2:\gMPa3:0:0\od}}
+
+ \def\normalhandleMPcmykcolor
+ {{\checkPDFMPstrokecolor\execcolorC\gMPa1:\gMPa2:\gMPa3:\gMPa4:0:0\od}}
+
+ \def\normalhandleMPgraycolor
+ {{\checkPDFMPstrokecolor\execcolorS\gMPa1:0:0\od}}
+
+% \def\normalhandleMPspotcolor
+% {{\checkPDFMPstrokecolor\execcolorP\gMPa1:\gMPa2:0:0\od}}
+
+ \def\normalhandleMPspotcolor % ???
+ {{\checkPDFMPstrokecolor\execcolorP\gMPa1:\gMPa2:\gMPa3:\gMPa4:0:0\od}}
+
+\fi
+
+% In the previous macros we use the special drivers. A more
+% direct approach would have been:
+%
+% \def\doPDFstartrgbcolormode#1#2#3%
+% {\PDFcode{#1 #2 #3 rg #1 #2 #3 RG}}
+%
+% \def\doPDFstartcmykcolormode#1#2#3#4%
+% {\PDFcode{#1 #2 #3 #4 k #1 #2 #3 #4 K}}
+%
+% \def\doPDFstartgraycolormode#1%
+% {\PDFcode{#1 g #1 G}}
+%
+% \appendtoks
+% \let\dostartrgbcolormode \doPDFstartrgbcolormode
+% \let\dostartcmykcolormode\doPDFstartcmykcolormode
+% \let\dostartgraycolormode\doPDFstartgraycolormode
+% \to \everyMPtoPDFconversion
+
+%D Now we can handle special color signals. We only do this
+%D when special are detected.
+
+% \def\MPrgbnumber#1{\expandafter\doMPrgbnumber#1000.0000\relax}
+% \def\doMPrgbnumber#1.#2#3#4#5\relax{#2#3#4}
+
+%D We cannot use \type {\everyMPtoPDFconversion} because in \MPTOPDF\
+%D we don't have the \type {\appendtoks} macro available.
+
+\def\setMPextensions
+ {\ifconditional\manyMPspecials
+ \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##10000.00000\relax}%
+ \def\doMPrgbnumber##1.##2##3##4##5##6\relax{##2##3##4##5}%
+ \else
+ \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##1000.0000\relax}%
+ \def\doMPrgbnumber##1.##2##3##4##5\relax{##2##3##4}%
+ \fi}
+
+%D The naive case looks like:
+%D
+%D \starttyping
+%D \def\handleMPrgbcolor%
+%D {\setMPcolor
+%D \ifcase\MPspecialversion
+%D \resetMPcolor\normalhandleMPrgbcolor
+%D \else\ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal
+%D % consider it to be a signal
+%D \else
+%D \resetMPcolor\normalhandleMPrgbcolor
+%D \fi\fi}
+%D \stoptyping
+%D
+%D However, since we want \CMYK\ support, we will use the
+%D following implementation:
+
+% \def\setMPcolor
+% {\edef\lastMPrvalue{\gMPa1}%
+% \edef\lastMPgvalue{\gMPa2}%
+% \edef\lastMPbvalue{\gMPa3}}
+%
+% speed up (hardly called, so no let is needed)
+
+\def\setMPcolor
+ {\edef\lastMPrvalue{\csname\@@MP01\endcsname}%
+ \edef\lastMPgvalue{\csname\@@MP02\endcsname}%
+ \edef\lastMPbvalue{\csname\@@MP03\endcsname}}
+
+\def\zeroMPrgbvalue{0.0}
+
+\def\resetMPcolor
+ {\let\lastMPrvalue\zeroMPrgbvalue
+ \let\lastMPgvalue\zeroMPrgbvalue
+ \let\lastMPbvalue\zeroMPrgbvalue}
+
+\resetMPcolor
+
+\def\@@MPSK{@MPSK@}
+\def\@@MPSP{@MPSP@}
+
+\def\interceptMPcmykcolor % todo : \ifMPcmykcolors
+ {\ifcase\MPrgbnumber\lastMPgvalue
+ % cannot happen
+ \or
+ % 1 == cmyk color spec
+ \ifMPcmykcolors \dointerceptMPcmykcolor \fi
+ \or
+ % 2 == spot color
+ \ifMPspotcolors \dointerceptMPspotcolor \fi
+ \or
+ % 3 == rgb transparency
+ \invokeMPtransparencyspecial
+ \or
+ % 4 == cmyk transparency
+ \ifMPcmykcolors \invokeMPtransparencyspecial \fi
+ \or
+ % 5 == spot transparency
+ \ifMPspotcolors \invokeMPtransparencyspecial \fi
+ \else
+ % \writestatus{MPtoPDF}{unknown direct special}%
+ \fi}
+
+% ifcsname
+
+\def\dointerceptMPcmykcolor
+ {\revokeMPtransparencyspecial
+ \@EA\ifx\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
+ \@EA\@EA\@EA\setMPcmyk\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname
+ \normalhandleMPcmykcolor
+ \fi}
+
+\def\dointerceptMPspotcolor
+ {\revokeMPtransparencyspecial
+ \@EA\ifx\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
+ \@EA\@EA\@EA\setMPspot\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname
+ \normalhandleMPspotcolor
+ \fi}
+
+\def\handleMPrgbcolor
+ {\resetMPcolor
+ \ifcase\MPspecialversion
+ \normalhandleMPrgbcolor
+ \else
+ \setMPcolor
+ \ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal\relax
+ \interceptMPcmykcolor
+ \else
+ \revokeMPtransparencyspecial
+ \normalhandleMPrgbcolor
+ \fi
+ \fi}
+
+\def\handleMPgraycolor
+ {\resetMPcolor
+ \ifcase\MPspecialversion \else \revokeMPtransparencyspecial \fi
+ \normalhandleMPgraycolor}
+
+\def\handleMPcmykcolor
+ {\resetMPcolor
+ \ifcase\MPspecialversion \else \revokeMPtransparencyspecial \fi
+ \normalhandleMPcmykcolor}
+
+%D Specials are define and recalled using:
+
+\def\MPspecial
+ {MP special \gMPs\nofMParguments}
+
+\def\defineMPspecial#1#2%
+ {\setvalue{MP special #1}{#2}}
+
+%D The path processing macro is slightly extended.
+
+\newtoks \invokeMPspecials
+
+\def\finishMPpath
+ {\PDFcode
+ {\ifcase\finiMPpath W n\or S\or f\or B\else W n\fi
+ \extraMPpathcode}}
+
+\def\processMPpath
+ {\checkMPpath % !
+ \ifcase\nofMPsegments\else
+ \let\extraMPpathcode\empty
+ \ifcase\MPspecialversion\else
+ \ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal
+ \ifnum\MPrgbnumber\lastMPgvalue>10 % really needed
+ \scratchcounter\MPrgbnumber\lastMPbvalue
+ \edef\currentMPspecial{\the\scratchcounter}%
+\let\previousMPcolorspec\currentMPcolorspec
+\edef\currentMPcolorspec{\lastMPrvalue\lastMPgvalue\lastMPbvalue}%
+\ifx\previousMPcolorspec\currentMPcolorspec \else
+ \revokeMPtransparencyspecial
+\fi
+ \ifnum\finiMPpath=2 % to outer level
+ \the\invokeMPspecials
+ \fi
+ \fi
+ \fi
+ \fi
+ \flushMPpath
+ \closeMPpath
+ \finishMPpath
+ \fi
+ \let\handleMPsequence\dohandleMPsequence
+ \resetMPstack
+ \nofMPsegments0
+ \handleMPsequence}
+
+%D Shading is an example of a more advanced graphic feature,
+%D but users will seldom encounter those complications. Here
+%D we only show a few simple examples, but many other
+%D alternatives are possible by setting up the functions built
+%D in \PDF\ in the appropriate way.
+%D
+%D Shading has to do with interpolation between two or more
+%D points or user supplied ranges. In \PDF, the specifications
+%D of a shade has to be encapsulated in objects and passed on
+%D as resources. This is a \PDF\ level 1.3. feature. One can
+%D simulate three dimensional shades as well and define simple
+%D functions using a limited set of \POSTSCRIPT\ primitives.
+%D Given the power of \METAPOST\ and these \PDF\ features, we
+%D can achieve superb graphic effects.
+%D
+%D Since everything is hidden in \TEX\ and \METAPOST\ graphics,
+%D we can stick to high level \CONTEXT\ command, as shown in
+%D the following exmples.
+%D
+%D \startbuffer
+%D \startuniqueMPgraphic{CircularShade}
+%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+%D circular_shade(p,0,.2red,.9red) ;
+%D \stopuniqueMPgraphic
+%D
+%D \startuniqueMPgraphic{LinearShade}
+%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+%D linear_shade(p,0,.2blue,.9blue) ;
+%D \stopuniqueMPgraphic
+%D
+%D \startuniqueMPgraphic{DuotoneShade}
+%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+%D linear_shade(p,2,.5green,.5red) ;
+%D \stopuniqueMPgraphic
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+%D
+%D These graphics can be hooked into the overlay mechanism,
+%D which is available in many commands.
+%D
+%D \startbuffer
+%D \defineoverlay[demo 1][\uniqueMPgraphic{CircularShade}]
+%D \defineoverlay[demo 2][\uniqueMPgraphic {LinearShade}]
+%D \defineoverlay[demo 3][\uniqueMPgraphic {DuotoneShade}]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+%D
+%D These backgrounds can for instance be applied to \type
+%D {\framed}:
+%D
+%D \startbuffer
+%D \setupframed[width=3cm,height=2cm,frame=off]
+%D \startcombination[3*1]
+%D {\framed[background=demo 1]{\bfd \white Demo 1}} {}
+%D {\framed[background=demo 2]{\bfd \white Demo 2}} {}
+%D {\framed[background=demo 3]{\bfd \white Demo 3}} {}
+%D \stopcombination
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D There are a few more alternatives, determined by the second
+%D parameter passed to \type {circular_shade} and alike.
+%D
+%D \def\SomeShade#1#2#3#4#5%
+%D {\startuniqueMPgraphic{Shade-#1}
+%D width := \overlaywidth ;
+%D height := \overlayheight ;
+%D path p ; p := unitsquare xscaled width yscaled height ;
+%D #2_shade(p,#3,#4,#5) ;
+%D \stopuniqueMPgraphic
+%D \defineoverlay[Shade-#1][\uniqueMPgraphic{Shade-#1}]%
+%D \framed[backgroundachtergrond=Shade-#1,width=2cm,height=2cm,frame=off]{}}
+%D
+%D \startlinecorrection
+%D \startcombination[5*1]
+%D {\SomeShade{10}{circular}{0}{.3blue}{.9blue}} {circular 0}
+%D {\SomeShade{11}{circular}{1}{.3blue}{.9blue}} {circular 1}
+%D {\SomeShade{12}{circular}{2}{.3blue}{.9blue}} {circular 2}
+%D {\SomeShade{13}{circular}{3}{.3blue}{.9blue}} {circular 3}
+%D {\SomeShade{14}{circular}{4}{.3blue}{.9blue}} {circular 4}
+%D \stopcombination
+%D \stoplinecorrection
+%D
+%D \blank
+%D
+%D \startlinecorrection
+%D \startcombination[5*1]
+%D {\SomeShade{20}{circular}{0}{.9green}{.3green}} {circular 0}
+%D {\SomeShade{21}{circular}{1}{.9green}{.3green}} {circular 1}
+%D {\SomeShade{22}{circular}{2}{.9green}{.3green}} {circular 2}
+%D {\SomeShade{23}{circular}{3}{.9green}{.3green}} {circular 3}
+%D {\SomeShade{24}{circular}{4}{.9green}{.3green}} {circular 4}
+%D \stopcombination
+%D \stoplinecorrection
+%D
+%D \blank
+%D
+%D \startlinecorrection
+%D \startcombination[4*1]
+%D {\SomeShade{30}{linear}{0}{.3red}{.9red}} {linear 0}
+%D {\SomeShade{31}{linear}{1}{.3red}{.9red}} {linear 1}
+%D {\SomeShade{32}{linear}{2}{.3red}{.9red}} {linear 2}
+%D {\SomeShade{33}{linear}{3}{.3red}{.9red}} {linear 3}
+%D \stopcombination
+%D \stoplinecorrection
+%D
+%D These macros closely cooperate with the \METAPOST\ module
+%D \type {mp-spec.mp}, which is part of the \CONTEXT\
+%D distribution.
+%D
+%D The low level (\PDF) implementation is based on the \TEX\
+%D based \METAPOST\ to \PDF\ converter. Shading is supported
+%D by overloading the \type {fill} operator as implemented
+%D earlier. In \PDF\ type~2 and~3 shading functions are
+%D specified in terms of:
+%D
+%D \starttabulate[|Tl|l|]
+%D \NC /Domain \NC sort of meeting range \NC \NR
+%D \NC /C0 \NC inner shade \NC \NR
+%D \NC /C1 \NC outer shade \NC \NR
+%D \NC /N \NC smaller values, bigger inner circles \NC \NR
+%D \stoptabulate
+
+\newcount\currentPDFshade % 0 % global (document wide) counter
+\let\currentMPshades\empty
+
+\def\startMPshading#1%
+ {\edef\currentMPspecial{\gMPs{#1}}}
+
+\def\stopMPshading
+ {\global\advance\currentPDFshade \plusone
+ \setxvalue{obj:Sh:\currentMPspecial}%
+ {/Sh\the\currentPDFshade\space\the\pdflastobj\space0 R }%
+ \setxvalue{mps:Sh:\currentMPspecial}%
+ {\the\currentPDFshade}}
+
+\appendtoks
+ \global\let\currentMPshades\empty
+\to \MPstartresources
+
+\appendtoks
+ \ifx\currentMPshades\empty \else
+ \xdef\currentPDFresources{\currentPDFresources
+ /Shading <<\currentMPshades>>}%
+ \fi
+\to \MPstopresources
+
+\def\invokeMPshadespecial
+ {\ifundefined{mps:Sh:\currentMPspecial}\else
+ \edef\currentMPshade{\getvalue{obj:Sh:\currentMPspecial}}%
+ \doifinstringelse\currentMPshade\currentMPshades \donothing
+ {\xdef\currentMPshades{\currentMPshades\currentMPshade}}%
+ \def\extraMPpathcode{/Sh\getvalue{mps:Sh:\currentMPspecial} sh Q}%
+ \chardef\finiMPpath\zerocount
+ \PDFcode{q /Pattern cs}%
+ \fi}
+
+\appendtoks \invokeMPshadespecial \to \invokeMPspecials
+
+%D We need to convert the \CMYK\ specials into colors, because
+%D we have to do it twice, we define a macro.
+
+% \def\checkMPshadingcolor#1#2#3#4#5%
+% {\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
+% \edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
+% \edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
+% \edef#5%
+% {\ifx\tempMPrvalue\tempMPgvalue
+% \ifx\tempMPrvalue\tempMPbvalue
+% \ifx\tempMPgvalue\tempMPbvalue
+% \tempMPbvalue
+% \fi
+% \fi
+% \fi}%
+% \edef#4% todo : spotcolors
+% {\ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\space
+% \ifMPcmykcolors\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}\fi
+% \fi}}
+
+\def\checkMPshadingcolor#1#2#3#4#5%
+ {\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
+ \edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
+ \edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
+ \global\let\MPresolvedspace\MPgrayspace
+ \global\let\MPresolvedcolor\!!zerocount
+ \ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\relax
+ \ifcase\MPrgbnumber\tempMPgvalue
+ \or % 1 = cmyk
+ \ifMPcmykcolors
+ \expanded{\resolveMPcmykcolor\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}}\end
+ \fi
+ \or % 2 = spot
+ \ifMPspotcolors
+ \expanded{\resolveMPspotcolor\getvalue{\@@MPSP\number\MPrgbnumber\tempMPbvalue}}\end
+ \fi
+ \or
+ % 3 = rgb transparency
+ % to do
+ \or
+ % 4 == cmyk transparency
+ % \ifMPcmykcolors
+ % to do
+ % \fi
+ \or
+ % 5 == spot transparency
+ % \ifMPspotcolors
+ % to do
+ % \fi
+ \fi
+ \else
+ \ifx\tempMPrvalue\tempMPgvalue
+ \ifx\tempMPrvalue\tempMPbvalue
+ \expanded{\resolveMPgraycolor\tempMPbvalue}\end
+ \else
+ \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
+ \fi
+ \else
+ \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
+ \fi
+ \fi
+ \let#4\MPresolvedcolor
+ \let#5\MPresolvedspace}
+
+%D We also need to make sure that we have two \RGB\ or
+%D \CMYK colors, since we have to set the colorspace.
+
+\def\setMPshadingcolors#1#2#3#4#5#6% color space
+ {\checkMPshadingcolor{#1}{#2}{#3}\MPshadeAc\MPshadeAs
+ \checkMPshadingcolor{#4}{#5}{#6}\MPshadeBc\MPshadeBs
+ \ifx\MPshadeAs\MPshadeBs
+ \let\MPshadeA\MPshadeAc
+ \let\MPshadeB\MPshadeBc
+ \let\MPshadeC\MPshadeAs
+ \else\ifx\MPshadeAs\MPgrayspace
+ \ifx\MPshadeBs\MPrgbspace
+ \edef\MPshadeA{\MPshadeAc\space\MPshadeAc\space\MPshadeAc}%
+ \else
+ \negatecolorcomponent\MPshadeAc
+ \edef\MPshadeA{0 0 0 \MPshadeAc}%
+ \fi
+ \let\MPshadeB\MPshadeBc
+ \let\MPshadeC\MPshadeBs
+ \else\ifx\MPshadeBs\MPgrayspace
+ \let\MPshadeA\MPshadeAc
+ \ifx\MPshadeAs\MPrgbspace
+ \edef\MPshadeB{\MPshadeBc\space\MPshadeBc\space\MPshadeBc}%
+ \else
+ \negatecolorcomponent\MPshadeBc
+ \edef\MPshadeB{0 0 0 \MPshadeBc}%
+ \fi
+ \let\MPshadeC\MPshadeAs
+ \else
+ % different color spaces
+ \def\MPshadeA{1}%
+ \def\MPshadeB{1}%
+ \let\MPshadeC\MPgrayspace
+ \fi\fi\fi}
+
+\let\MPshadeA\MPcmykWhite
+\let\MPshadeB\MPcmykBlack
+\let\MPshadeC\MPgrayspace
+
+%D The reason why this macro is a bit complicates is that we
+%D handle black and white situations (otherwise we would have
+%D to use \CMYK\ b/w in case of a \CMYK\ shade).
+
+%D Here are the special handlers:
+
+\defineMPspecial{30}
+ {\startMPshading{14}% type 2
+ \setMPshadingcolors{4}{5}{6}{9}{10}{11}%
+ \immediate\pdfobj
+ {<</FunctionType 2
+ /Domain [\gMPs1 \gMPs2]
+ /C0 [\MPshadeA]
+ /C1 [\MPshadeB]
+ /N \gMPs3>>}%
+ \immediate\pdfobj
+ {<</ShadingType 2
+ /ColorSpace /\MPshadeC\space
+ /Function \the\pdflastobj\space 0 R
+ /Coords [\gMPs7 \gMPs8 \gMPs{12} \gMPs{13}]
+ /Extend [true true]>>}%
+ \stopMPshading}
+
+\defineMPspecial{31}
+ {\startMPshading{16}% type 3
+ \setMPshadingcolors{4}{5}{6}{10}{11}{12}%
+ \immediate\pdfobj
+ {<</FunctionType 2
+ /Domain [\gMPs1 \gMPs2]
+ /C0 [\MPshadeA]
+ /C1 [\MPshadeB]
+ /N \gMPs3>>}%
+ \immediate\pdfobj
+ {<</ShadingType 3
+ /ColorSpace /\MPshadeC\space
+ /Function \the\pdflastobj\space 0 R
+ /Coords [\gMPs7 \gMPs8 \gMPs9 \gMPs{13} \gMPs{14} \gMPs{15}]
+ /Extend [true true]>>}%
+ \stopMPshading}
+
+%D Figure inclusion is kind of strange to \METAPOST, but when
+%D Santiago Muelas started discussing this with me, I was able
+%D to cook up a solution using specials.
+
+\def\invokeMPfigurespecial%
+ {\getvalue{mps:gr:\currentMPspecial}} % or \relax
+
+\appendtoks \invokeMPfigurespecial \to \invokeMPspecials
+
+\defineMPspecial{10}
+ {\setxvalue{mps:gr:\gMPs8}%
+ {\noexpand\handleMPfigurespecial
+ {\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}%
+ \noexpand\setxvalue{mps:gr:\gMPs8}{}}}
+
+% \def\handleMPfigurespecial#1#2#3#4#5#6#7%
+% {\vbox to 0pt
+% {\vss
+% \hbox to 0pt
+% {\pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%
+% \pdfimage width 1bp height 1bp {#7}% maybe 10 is better
+% \pdfliteral{Q}%
+% \hss}}}
+%
+% better, since xform reuse
+
+\def\handleMPfigurespecial#1#2#3#4#5#6#7% todo : combine with ext fig
+ {\vbox to \zeropoint
+ {\vss
+ \hbox to \zeropoint
+ {\ifcase\pdfoutput\or % will be hooked into the special driver
+ \doiffileelse{#7}
+ {\doifundefinedelse{mps:x:#7}
+ {\immediate\pdfximage\!!width\onebasepoint\!!height\onebasepoint{#7}%
+ \setxvalue{mps:x:#7}{\pdfrefximage\the\pdflastximage}}%
+ {\message{[reusing figure #7]}}%
+ \PDFcode{q #1 #2 #3 #4 #5 #6 cm}%
+ \rlap{\getvalue{mps:x:#7}}%
+ \PDFcode{Q}}
+ {\message{[unknown figure #7]}}%
+ \fi
+ \hss}}}
+
+%D An example of using both special features is the
+%D following.
+%D
+%D \starttyping
+%D \startMPpage
+%D externalfigure "hakker1b.png" scaled 22cm rotated 10 shifted (-2cm,0cm);
+%D externalfigure "hakker1b.png" scaled 10cm rotated -10 ;
+%D externalfigure "hakker1b.png" scaled 7cm rotated 45 shifted (8cm,12cm) ;
+%D path p ; p := unitcircle xscaled 15cm yscaled 20cm;
+%D path q ; q := p rotatedaround(center p,90) ;
+%D path r ; r := buildcycle(p,q) ; clip currentpicture to r ;
+%D path s ; s := boundingbox currentpicture enlarged 5mm ;
+%D picture c ; c := currentpicture ; currentpicture := nullpicture ;
+%D circular_shade(s,0,.2red,.9red) ;
+%D addto currentpicture also c ;
+%D \stopMPpage
+%D \stoptyping
+
+%D This is some experimental hyperlink driver that I wrote
+%D for Mark Wicks.
+
+\defineMPspecial{20}
+ {\setxvalue{mps:hl:\gMPs6}%
+ {\noexpand\handleMPhyperlink
+ {\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}%
+ \noexpand\setxvalue{mps:hl:\gMPs6}{}}}
+
+\def\handleMPhyperlink#1#2#3#4#5%
+ {%\ifcase\pdfoutput\or
+ \setbox\scratchbox\hbox
+ {\setbox\scratchbox\null
+ \scratchdimen#1\onebasepoint\scratchdimen-\scratchdimen
+ \advance\scratchdimen#3\onebasepoint
+ \wd\scratchbox\scratchdimen
+ \scratchdimen#2\onebasepoint\scratchdimen-\scratchdimen
+ \advance\scratchdimen#4\onebasepoint
+ \ht\scratchbox\scratchdimen
+ \incolorfalse
+ \gotobox{\box\scratchbox}[#5]}%
+ \setbox\scratchbox\hbox
+ {\scratchdimen\MPxoffset\onebasepoint\advance\scratchdimen#1\onebasepoint
+ \hskip\scratchdimen
+ \scratchdimen\MPyoffset\onebasepoint\advance\scratchdimen#2\onebasepoint
+ \raise\scratchdimen\box\scratchbox}%
+ \smashbox\scratchbox
+ \box\scratchbox
+ }%\fi}
+
+\def\invokeMPhyperlinkspecial%
+ {\getvalue{mps:hl:\currentMPspecial}} % or \relax
+
+\appendtoks \invokeMPhyperlinkspecial \to \invokeMPspecials
+
+%D Special number~1 is dedicated to \CMYK\ support. If you
+%D want to know why: look at this:
+%D
+%D \startbuffer[mp]
+%D fill fullcircle xyscaled (3cm,1cm) withcolor \MPcolor{test} ;
+%D \stopbuffer
+%D
+%D \startbuffer[cmyk]
+%D \startcombination[4*1]
+%D {\definecolor[test][c=1,y=.3,k=.3] \processMPbuffer[mp]} {c=1 y=.3 k=.3}
+%D {\definecolor[test][c=.9,y=.15] \processMPbuffer[mp]} {c=.9 y=.15}
+%D {\definecolor[test][c=.25,y=.8] \processMPbuffer[mp]} {c=.25 y=.8}
+%D {\definecolor[test][c=.45,y=.1] \processMPbuffer[mp]} {c=.45 y=.1}
+%D \stopcombination
+%D \stopbuffer
+%D
+%D \placefigure
+%D {\CMYK\ support disabled,
+%D conversion to \RGB.}
+%D {\setupcolors[cmyk=nee,state=start]\getbuffer[cmyk]}
+%D
+%D \placefigure
+%D {\CMYK\ support enabled,
+%D no support in \METAPOST.}
+%D {\setupcolors[cmyk=ja,mpcmyk=nee,state=start]\getbuffer[cmyk]}
+%D
+%D \placefigure
+%D {\CMYK\ support enabled,
+%D no conversion to \RGB,
+%D support in \METAPOST}
+%D {\setupcolors[cmyk=ja,state=start]\getbuffer[cmyk]}
+
+\defineMPspecial{1}
+ {\ifMPcmykcolors
+ \setxvalue{\@@MPSK\gMPs1}{\gMPs2 \gMPs3 \gMPs4 \gMPs5 }%
+ \fi}
+
+\def\setMPcmyk#1 #2 #3 #4 %
+ {\setvalue{\@@MP01}{#1}%
+ \setvalue{\@@MP02}{#2}%
+ \setvalue{\@@MP03}{#3}%
+ \setvalue{\@@MP04}{#4}}
+
+%\defineMPspecial{2}
+% {\ifMPspotcolors
+% \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
+% \fi}
+
+% \defineMPspecial{2}
+% {\ifMPspotcolors
+% \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
+% \checkMPspot{\gMPs2}{\gMPs3}%
+% \fi}
+%
+% \def\setMPspot#1 #2 %
+% {\setvalue{\@@MP01}{#1}%
+% \setvalue{\@@MP02}{#2}}
+%
+% \def\checkMPspot#1#2%
+% {\expanded{\resolveMPspotcolor#1 #2}\end
+% \ifx\MPspotspace\MPresolvedspace
+% \edef\MPspotspacespec{/\MPspotspace\space}%
+% \doifinstringelse\MPspotspacespec\currentMPcolorspaces
+% \donothing\registerMPcolorspace
+% \fi}
+
+\defineMPspecial{2}
+ {\ifMPspotcolors
+ \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 \gMPs4 \gMPs5 }% space is essential
+ \checkMPspot{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}%
+ \fi}
+
+\def\setMPspot#1 #2 #3 #4 %
+ {\setvalue{\@@MP01}{#1}%
+ \setvalue{\@@MP02}{#2}%
+ \setvalue{\@@MP03}{#3}%
+ \setvalue{\@@MP04}{#4}}
+
+\def\checkMPspot#1#2#3#4%
+ {\expanded{\resolveMPspotcolor#1 #2 #3 #4}\end
+ \ifx\MPspotspace\MPresolvedspace
+ \edef\MPspotspacespec{/\MPspotspace\space}%
+ \doifinstringelse\MPspotspacespec\currentMPcolorspaces
+ \donothing\registerMPcolorspace
+ \fi}
+
+%D This special (number 50) passes positions to a tex file.
+%D This method uses a two||pass approach an (mis|)|used the
+%D context positioning macros. In \type {core-pos} we will
+%D implement the low level submacro needed.
+%D
+%D \startbuffer
+%D \definelayer[test]
+%D
+%D \setlayer
+%D [test]
+%D [x=\MPx{somepos-1},y=\MPy{somepos-1}]
+%D {Whatever we want here!}
+%D
+%D \setlayer
+%D [test]
+%D [x=\MPx{somepos-2},y=\MPy{somepos-2}]
+%D {Whatever we need there!}
+%D
+%D \startuseMPgraphic{oeps}
+%D draw fullcircle scaled 6cm withcolor red ;
+%D register ("somepos-1",1cm,2cm,center currentpicture) ;
+%D register ("somepos-2",4cm,3cm,(-1cm,-2cm)) ;
+%D \stopuseMPgraphic
+%D
+%D \framed[background=test,offset=overlay]{\useMPgraphic{oeps}}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Here the width and height are not realy used, but one can
+%D imagine situations where tex has to work with values
+%D calculated by \METAPOST.
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D Later we will implement a more convenient macro:
+%D
+%D \starttyping
+%D \setMPlayer [test] [somepos-1] {Whatever we want here!}
+%D \setMPlayer [test] [somepos-2] {Whatever we need there!}
+%D \stoptyping
+
+\ifx\dosavepositionwhd\undefined
+ \let\dosavepositionwhd\gobblesevenarguments
+\fi
+
+\defineMPspecial{50} % x y width height label
+ {\bgroup
+ \scratchdimen\MPllx\onebasepoint\scratchdimen-\scratchdimen
+ % \scratchdimen-\MPllx\onebasepoint % moet ook werken
+ \advance\scratchdimen\gMPs1\onebasepoint
+ \edef\x{\number\scratchdimen}%
+ \scratchdimen\gMPs2\onebasepoint
+ \scratchdimen-\scratchdimen
+ \advance\scratchdimen\MPury\onebasepoint
+ \edef\y{\number\scratchdimen}%
+ \scratchdimen\gMPs3\onebasepoint
+ \edef\w{\number\scratchdimen}%
+ \scratchdimen\gMPs4\onebasepoint
+ \edef\h{\number\scratchdimen}%
+ \dosavepositionwhd{\gMPs5}0\x\y\w\h0%
+ \egroup}
+
+%D Transparency support used specials 60 (rgb) and 61
+%D (cmyk).
+%D
+%D \startbuffer
+%D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0);
+%D
+%D fill p rotated 90 withcolor transparent(1,.5,yellow) ;
+%D fill p rotated 210 withcolor transparent(1,.5,green) ;
+%D fill p rotated 330 withcolor transparent(1,.5,blue) ;
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startlinecorrection \processMPbuffer \stoplinecorrection
+%D
+%D One can also communicate colors between \CONTEXT\ and
+%D \METAPOST:
+%D
+%D \startbuffer
+%D \definecolor[tcyan] [c=1,k=.2,t=.5]
+%D \definecolor[tmagenta][m=1,k=.2,t=.5]
+%D \definecolor[tyellow] [y=1,k=.2,t=.5]
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D \startbuffer
+%D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0);
+%D
+%D fill p rotated 90 withcolor \MPcolor{tcyan} ;
+%D fill p rotated 210 withcolor \MPcolor{tmagenta} ;
+%D fill p rotated 330 withcolor \MPcolor{tyellow} ;
+%D \stopbuffer
+%D
+%D \startlinecorrection \processMPbuffer \stoplinecorrection
+%D
+%D We save all the three components needed in one macro,
+%D just to save hash space.
+
+\def\@@MPST{@MPST@}
+
+\def\assignMPStransparency#1#2#3%
+ {\edef\PDFtransparencyidentifier{#1}%
+ \edef\PDFtransparencyreference {#2}%
+ \edef\PDFtransparencycolorspecs{#3}}
+
+% \def\PDFtransparencyspec
+% {\ifx\MPresolvedspace\MPgrayspace
+% \MPresolvedcolor\space g \MPresolvedcolor\space G%
+% \else\ifx\MPresolvedspace\MPrgbspace
+% \MPresolvedcolor\space rg \MPresolvedcolor\space RG%
+% \else\ifx\MPresolvedspace\MPcmykspace
+% \MPresolvedcolor\space k \MPresolvedcolor\space K%
+% \else\ifx\MPresolvedspace\empty\else
+% /\MPresolvedspace\space cs \MPresolvedcolor\space sc
+% /\MPresolvedspace\space CS \MPresolvedcolor\space SC%
+% \fi\fi\fi\fi}
+
+\def\PDFtransparencyspec % todo
+ {\ifx\MPresolvedspace\MPgrayspace
+ \MPresolvedcolor\space g
+ \MPresolvedcolor\space G%
+ \else\ifx\MPresolvedspace\MPrgbspace
+ \MPresolvedcolor\space rg
+ \MPresolvedcolor\space RG%
+ \else\ifx\MPresolvedspace\MPcmykspace
+ \MPresolvedcolor\space k
+ \MPresolvedcolor\space K%
+ \else\ifx\MPresolvedspace\empty\else
+ /\MPresolvedspace\space cs
+ /\MPresolvedspace\space CS
+ \PDFgetspotcolorspec\MPresolvedcolor
+ \fi\fi\fi\fi}
+
+\defineMPspecial{3} % rgb
+ {\edef\currentMPspecial{\gMPs6}%
+ \presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \expanded{\resolveMPrgbcolor\gMPs3 \gMPs4 \gMPs5}\end
+ \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+ {\noexpand\assignMPStransparency
+ {\PDFtransparencyidentifier}%
+ {\PDFtransparencyreference}%
+ {\PDFtransparencyspec}}}
+
+\defineMPspecial{4} % cmyk
+ {\edef\currentMPspecial{\gMPs7}%
+ \presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \expanded{\resolveMPcmykcolor\gMPs3 \gMPs4 \gMPs5 \gMPs6}\end
+ \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+ {\noexpand\assignMPStransparency
+ {\PDFtransparencyidentifier}%
+ {\PDFtransparencyreference}%
+ {\PDFtransparencyspec}}}
+
+% \defineMPspecial{5} % spot
+% {\edef\currentMPspecial{\gMPs5}%
+% \presetPDFtransparency{\gMPs1}{\gMPs2}%
+% \checkMPspot{\gMPs3}{\gMPs4}%
+% \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+% {\noexpand\assignMPStransparency
+% {\PDFtransparencyidentifier}%
+% {\PDFtransparencyreference}%
+% {\PDFtransparencyspec}}}
+
+\defineMPspecial{5} % spot
+ {\edef\currentMPspecial{\gMPs7}%
+ \presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \checkMPspot{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}%
+ \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+ {\noexpand\assignMPStransparency
+ {\PDFtransparencyidentifier}%
+ {\PDFtransparencyreference}%
+ {\PDFtransparencyspec}}}
+
+% beware: for the moment only supported in pdftex; needs a cleanup!
+
+\def\registerMPcolorspace
+ {\doifobjectreferencefoundelse{PDFCS}\MPspotspace
+ {\doPDFgetobjectreference{PDFCS}\MPspotspace\PDFobjectreference
+ \xdef\currentMPcolorspaces
+ {\currentMPcolorspaces\MPspotspacespec\PDFobjectreference\space}}
+ \donothing}
+
+%D We need to add resource specifications!
+
+\appendtoks
+ \global\let\currentMPcolorspaces\empty
+\to \MPstartresources
+
+\appendtoks
+ \ifx\currentMPcolorspaces\empty \else
+ \xdef\currentPDFresources{\currentPDFresources
+ /ColorSpace <<\currentMPcolorspaces>>}%
+ \fi
+\to \MPstopresources
+
+%D For efficiency reasons, we fall back on the allocation
+%D mechanisms already present. For use within \MPTOPDF, we
+%D provide a fall back routine.
+
+\let\currentMPtransparencies\empty
+
+% \def\invokeMPtransparencyspecial
+% {\doifdefined{\@@MPST\currentMPspecial}
+% {\getvalue{\@@MPST\currentMPspecial}%
+% \doifinstringelse
+% {\PDFtransparencyidentifier}{\currentMPtransparencies}
+% {}
+% {\xdef\currentMPtransparencies
+% {\currentMPtransparencies
+% \PDFtransparencyidentifier\space
+% \PDFtransparencyreference\space}}%
+% \def\extraMPpathcode{ Q}%
+% \PDFcode{q
+% \PDFtransparencycolorspecs\space
+% \PDFtransparencyidentifier\space gs}}}
+
+% this one triggers a new graphic state
+
+\def\invokeMPtransparencyspecial
+ {\scratchcounter\MPrgbnumber\lastMPbvalue
+ \edef\currentMPspecial{\the\scratchcounter}%
+ \ifundefined{\@@MPST\currentMPspecial}\else
+ \getvalue{\@@MPST\currentMPspecial}%
+ \doifinstringelse\PDFtransparencyidentifier\currentMPtransparencies
+ \donothing\registerMPtransparencyresource % slow
+ \PDFcode
+ {\PDFtransparencycolorspecs\space
+ \PDFtransparencyidentifier\space gs}%
+ % potential optimization
+ % \setevalue{\@@MPST\currentMPspecial}%
+ % {\PDFcode
+ % {\PDFtransparencycolorspecs\space
+ % \PDFtransparencyidentifier\space gs}}%
+ % \getvalue{\@@MPST\currentMPspecial}%
+ \let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial
+ \fi}
+
+% this one does a reset
+
+\let\revokeMPtransparencyspecial\relax
+
+\appendtoks
+ \revokeMPtransparencyspecial
+\to \MPstopresources
+
+\def\dorevokeMPtransparencyspecial % only called if state is set
+ {\ifx\PDFtransparencyresetidentifier\empty\else
+ \doifinstringelse\PDFtransparencyresetidentifier\currentMPtransparencies
+ \donothing\registerMPtransparencyresetresource
+ \PDFcode{\PDFtransparencyresetidentifier\space gs}%
+ % potential optimization
+ % \def\dorevokeMPtransparencyspecial
+ % {\PDFcode
+ % {\PDFtransparencycolorspecs\space
+ % \PDFtransparencyidentifier\space gs}}%
+ \let\dorevokeMPtransparencyspecial\dodorevokeMPtransparencyspecial
+ \let\revokeMPtransparencyspecial\relax % invoke sets it
+ \fi}
+
+% and this one a simplified reset
+
+% \def\dodorevokeMPtransparencyspecial % used after first invocation
+% {\getvalue{\@@MPST0}%
+% \PDFcode{\PDFtransparencyidentifier\space gs}}
+
+\def\dodorevokeMPtransparencyspecial % used after first invocation
+ {\PDFcode{\PDFtransparencyresetidentifier\space gs}%
+ \let\revokeMPtransparencyspecial\relax} % invoke sets it
+
+% add a resource entry
+
+\def\registerMPtransparencyresource
+ {\xdef\currentMPtransparencies
+ {\currentMPtransparencies
+ \PDFtransparencyidentifier\space
+ \PDFtransparencyreference\space}}
+
+\def\registerMPtransparencyresetresource
+ {\xdef\currentMPtransparencies
+ {\currentMPtransparencies
+ \PDFtransparencyresetidentifier\space
+ \PDFtransparencyresetreference\space}}
+
+\appendtoks \invokeMPtransparencyspecial \to \invokeMPspecials
+
+\ifCONTEXT \else
+
+ \def\@@MPSTN{@MPSTN@}
+ \def\@@MPSTO{@MPSTO@}
+
+ \newcount\PDFcurrenttransparency
+
+ \let\PDFtransparencyresetidentifier\empty
+ \let\PDFtransparencyresetreference \empty
+
+ \let\PDFtransparencyidentifier\empty
+ \let\PDFtransparencyreference \empty
+
+ \def\initializePDFtransparency
+ {\global\let\initializePDFtransparency\relax
+ \presetPDFtransparency{1}{1}%
+ \xdef\PDFtransparencyresetidentifier{/Tr0}%
+ \xdef\PDFtransparencyresetreference{\the\pdflastobj\space 0 R}}
+
+ \def\presetPDFtransparency#1#2%
+ {\initializePDFtransparency
+ \@EA\ifx\csname\@@MPSTO#1:#2\endcsname\relax
+ \global\advance\PDFcurrenttransparency \plusone
+ \immediate\pdfobj{\PDFtransparencydictionary{#1}{#2}{}}%
+ \setxvalue{\@@MPSTN#1:#2}{\the\PDFcurrenttransparency}%
+ \setxvalue{\@@MPSTO#1:#2}{\the\pdflastobj}%
+ \fi
+ \edef\PDFtransparencyidentifier{/Tr\getvalue{\@@MPSTN#1:#2}}%
+ \edef\PDFtransparencyreference{\getvalue{\@@MPSTO#1:#2} 0 R}}
+
+ \def\PDFtransparencydictionary#1#2#3% type fraction extras
+ {<</Type /ExtGState
+ /ca #2 /CA #2
+ /BM /\ifcase#1 Normal\or Normal\or Multiply\or Screen\or
+ Overlay\or SoftLight\or HardLight\or ColorDodge\or
+ ColorBurn\or Darken\or Lighten\or Difference\or
+ Exclusion\or Hue\or Saturation\or Color\or
+ Luminosity\else Compatible\fi
+ #3>>}
+
+\fi
+
+\appendtoks
+ \global\let\currentMPtransparencies\empty
+\to \MPstartresources
+
+\appendtoks
+ \ifx\currentMPtransparencies\empty \else
+ \xdef\currentPDFresources{\currentPDFresources
+ /ExtGState <<\currentMPtransparencies>>}%
+ \fi
+\to \MPstopresources
+
+%D In all cases, we need to keep track of the resources
+%D used.
+
+%D A few auxiliary macros:
+
+\def\MPgrayspace{DeviceGray}
+\def\MPrgbspace {DeviceRGB}
+\def\MPcmykspace{DeviceCMYK}
+\let\MPspotspace\MPgrayspace
+
+\def\MPcmykBlack{0 0 0 0}
+\def\MPcmykWhite{0 0 0 1}
+
+\ifCONTEXT
+
+ \def\startMPcolorresolve
+ {\bgroup
+ \def\dostartgraycolormode##1%
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{##1}}%
+ \def\dostartrgbcolormode ##1##2##3%
+ {\global\let\MPresolvedspace\MPrgbspace
+ \xdef\MPresolvedcolor{##1 ##2 ##3}}%
+ \def\dostartcmykcolormode##1##2##3##4%
+ {\global\let\MPresolvedspace\MPcmykspace
+ \xdef\MPresolvedcolor{##1 ##2 ##3 ##4}}%
+ \def\dostartspotcolormode##1##2%
+ {\global\let\MPspotspace\empty
+ \xdef\MPresolvedspace{##1}%
+ \xdef\MPresolvedcolor{##2}%
+ \global\let\MPspotspace\MPresolvedspace}% signal
+ \dostartgraycolormode\!!zerocount} % kind of hackery initialization
+
+ \let\stopMPcolorresolve\egroup
+
+ \def\resolveMPrgbcolor#1 #2 #3\end
+ {\startMPcolorresolve
+ \execcolorR#1:#2:#3:0:0\od
+ \stopMPcolorresolve}
+
+ \def\resolveMPcmykcolor#1 #2 #3 #4\end
+ {\startMPcolorresolve
+ \execcolorC#1:#2:#3:#4:0:0\od
+ \stopMPcolorresolve}
+
+ \def\resolveMPgraycolor#1\end
+ {\startMPcolorresolve
+ \execcolorS#1:0:0\od
+ \stopMPcolorresolve}
+
+% \def\resolveMPspotcolor#1 #2\end
+% {\startMPcolorresolve
+% \execcolorP#1:#2:0:0\od
+% \stopMPcolorresolve}
+
+ \def\resolveMPspotcolor#1 #2 #3 #4\end
+ {\startMPcolorresolve
+ \ifnum#2>\plusone
+ \checkmultitonecolor{#1}%
+ \fi
+ \execcolorP#1:#2:#3:#4:0:0\od
+ \stopMPcolorresolve}
+
+\else
+
+ \def\resolveMPspotcolor#1 #2\end
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{0}}
+
+ \def\resolveMPrgbcolor#1 #2 #3\end
+ {\global\let\MPresolvedspace\MPrgbspace
+ \xdef\MPresolvedcolor{#1 #2 #3}}
+
+ \def\resolveMPcmykcolor#1 #2 #3 #4\end
+ {\global\let\MPresolvedspace\MPcmykspace
+ \xdef\MPresolvedcolor{#1 #2 #3 #4}}
+
+ \def\resolveMPgraycolor#1\end
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{#1}} % should be inverted
+
+\fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-mpe.tex b/Master/texmf-dist/tex/context/base/mkii/supp-mpe.tex
index f4438133a2a..f4438133a2a 100644
--- a/Master/texmf-dist/tex/context/base/supp-mpe.tex
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mpe.tex
diff --git a/Master/texmf-dist/tex/context/base/supp-mps.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-mps.mkii
index 3991280e6d4..3991280e6d4 100644
--- a/Master/texmf-dist/tex/context/base/supp-mps.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mps.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-mrk.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-mrk.mkii
index b9d476c2a7c..b9d476c2a7c 100644
--- a/Master/texmf-dist/tex/context/base/supp-mrk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-mrk.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-num.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-num.mkii
index 5e35a20b07d..5e35a20b07d 100644
--- a/Master/texmf-dist/tex/context/base/supp-num.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-num.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-pat.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-pat.mkii
index 425eae215f6..425eae215f6 100644
--- a/Master/texmf-dist/tex/context/base/supp-pat.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-pat.mkii
diff --git a/Master/texmf-dist/tex/context/base/mkii/supp-pdf.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
new file mode 100644
index 00000000000..4dd2db776b3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
@@ -0,0 +1,2187 @@
+%D \module
+%D [ file=supp-pdf,
+%D version=2006.09.02, % 2004.12.16,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=\METAPOST\ to \PDF\ conversion,
+%D author=Hans Hagen \& others (see text),
+%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.
+
+\ifx\writestatus\undefined
+ \immediate\write16{[Loading MPS to PDF converter (version 2006.09.02).]}
+\else
+ \writestatus{loading}{ConTeXt Support Macros / PDF}
+\fi
+
+%D This module is not optimized because it is used outside
+%D \CONTEXT\ and we cannot forsee what interference will take
+%D place. We no longer load supp-mis. I got too tired of
+%D keeping track of interferences with non \CONTEXT\ usage so
+%D I moved the necessary code in here and use a derived version
+%D in \CONTEXT. When I have the time I will clean up some of the
+%D code that is of no use for non||\CONTEXT\ users.
+
+\ifx\contextversion\undefined
+
+ \chardef\mptopdfstoredatcode\catcode`\@
+
+ \catcode\string`@=11
+
+ \def\unprotect
+ {\let\@@mpstopdf@@unprotect \unprotect
+ \let\@@mpstopdf@@protect \protect
+ \edef\protect
+ {\noexpand \let \noexpand \protect \noexpand \@@mpstopdf@@protect
+ \noexpand \let \noexpand \unprotect \noexpand \@@mpstopdf@@unprotect
+ % context specific
+ \catcode\string`\noexpand @=\the\catcode\string`@
+ \catcode\string`\noexpand !=\the\catcode\string`!
+ \catcode\string`\noexpand ?=\the\catcode\string`?
+ % latex specific
+ \catcode\string`\noexpand /=\the\catcode\string`/
+ \catcode\string`\noexpand -=\the\catcode\string`-
+ \catcode\string`\noexpand :=\the\catcode\string`:
+ \catcode\string`\noexpand ;=\the\catcode\string`;
+ \catcode\string`\noexpand "=\the\catcode\string`"
+ \catcode\string`\noexpand <=\the\catcode\string`<
+ \catcode\string`\noexpand >=\the\catcode\string`>
+ \catcode\string`\noexpand `=\the\catcode\string``}
+ \catcode\string`@=11 \catcode\string`!=11 \catcode\string`?=11
+ \catcode\string`/=12 \catcode\string`-=12
+ \catcode\string`:=12 \catcode\string`;=12
+ \catcode\string`>=12 \catcode\string`<=12
+ \catcode\string`"=12 \catcode\string``=12 }
+
+ \def\defineMPtoPDFfallbacks
+ {% shortcuts
+ \chardef\@@escape 0
+ \chardef\@@begingroup 1
+ \chardef\@@endgroup 2
+ \chardef\@@endofline 5
+ \chardef\@@ignore 9
+ \chardef\@@space 10
+ \chardef\@@letter 11
+ \chardef\@@other 12
+ \chardef\@@active 13
+ \chardef\@@comment 14
+ % placeholders
+ \ifx\withoutpt \undefined \let\withoutpt \@@mptopdf@@withoutpt \fi
+ \ifx\twodigitrounding \undefined \let\twodigitrounding \@@mptopdf@@twodigitrounding \fi
+ \ifx\forgetall \undefined \let\forgetall \@@mptopdf@@forgetall \fi
+ \ifx\uncatcodespecials \undefined \let\uncatcodespecials \@@mptopdf@@uncatcodespecials \fi
+ \ifx\setnaturalcatcodes\undefined \let\setnaturalcatcodes\@@mptopdf@@setnaturalcatcodes \fi
+ \ifx\dospecials \undefined \let\dospecials \@@mptopdf@@dospecials \fi}
+
+ \def\@@mptopdf@@forgetall
+ {\parskip0pt\leftskip0pt\parindent0pt\everypar{}}
+
+ \def\@@mptopdf@@twodigitrounding#1%
+ {#1}%
+
+ \def\@@mptopdf@@uncatcodespecials
+ {\def\do##1{\catcode`##1=\@@other}\dospecials
+ \catcode`\ =\@@space
+ \catcode`\^^L=\@@ignore
+ \catcode`\^^M=\@@endofline
+ \catcode`\^^?=\@@ignore}
+
+ \def\@@mptopdf@@setnaturalcatcodes
+ {\catcode`\!=\@@other \catcode`\?=\@@other \catcode`\@=\@@other
+ \catcode`\#=\@@other \catcode`\&=\@@other \catcode`\|=\@@other
+ \catcode`\$=\@@other \catcode`\^=\@@other \catcode`\_=\@@other
+ \catcode`\*=\@@other \catcode`\/=\@@other
+ \catcode`\-=\@@other \catcode`+=\@@other
+ \catcode`\==\@@other \catcode`\<=\@@other \catcode`\>=\@@other
+ \catcode`\"=\@@other \catcode`\'=\@@other \catcode`\`=\@@other
+ \catcode`\:=\@@other \catcode`\;=\@@other
+ \catcode`\,=\@@other \catcode`\.=\@@other \catcode`\~=\@@other
+ \catcode`\(=\@@other \catcode`\)=\@@other
+ \catcode`\{=\@@other \catcode`\}=\@@other
+ \catcode`\\=\@@other \catcode`\%=\@@other}
+
+ \def\@@mptopdf@@dospecials
+ {\do\ \do\\\do\{\do\}\do\$%
+ \do\#\do\^\do\_\do\&\do\%%
+ \do\~\do\^^A\do\^^K}
+
+ {
+ \catcode`\.=12
+ \catcode`\p=12
+ \catcode`\t=12
+ \gdef\@@MPTOPDF@@WITHOUTPT#1pt{#1}
+ }
+
+ \def\@@mptopdf@@withoutpt#1%
+ {\expandafter\@@MPTOPDF@@WITHOUTPT#1}
+
+% \def\@@mptopdf@@newabove#1#2% \dimen \name
+% {#1#2%
+% \ifnum\expandafter\gobblesixarguments\meaning#2>20\else
+% \expandafter\@@mptopdf@@newabove\expandafter#1\expandafter#2%
+% \fi}
+
+ \def\@@mptopdf@@stripnewabove#1%
+ {\ifnum10<9#1 #1\else\expandafter\@@mptopdf@@stripnewabove\fi}%
+
+ \def\@@mptopdf@@newabove\csname#1\endcsname#2% \dimen \name
+ {\csname#1\endcsname#2%
+ \ifnum\expandafter\@@mptopdf@@stripnewabove\meaning#2>20\else
+ \@@mptopdf@@newabove\csname#1\endcsname#2%
+ \fi}
+
+ \@@mptopdf@@newabove \csname newcount\endcsname \scratchcounter
+ \@@mptopdf@@newabove \csname newdimen\endcsname \scratchdimen
+ \csname newbox\endcsname \scratchbox
+
+ \expandafter \newif \csname ifdone\endcsname
+
+ \catcode`\@=\mptopdfstoredatcode
+
+\else
+
+ \let\defineMPtoPDFfallbacks\relax
+
+\fi
+
+%D These macros are written as generic as possible. Some
+%D general support macro's are loaded from a small module
+%D especially made for non \CONTEXT\ use. In this module I
+%D use a matrix transformation macro written by Tanmoy
+%D Bhattacharya. Thanks to extensive testing by Sebastian
+%D Ratz I was able to complete this module within reasonable
+%D time. This module has support for \METAPOST\ extensions
+%D built in.
+%D
+%D Daniel H. Luecking came up with a better (more precise)
+%D transformation method. You can recognize his comment by
+%D his initials. (We keep the old code around because it's a
+%D nice illustration on how a module like this evolves.)
+
+%D Beware, we cannot use \type{\zeropoint} here since it may be
+%D defined in the range \type{\dimen0} - 20 which we happen to use
+%D as scratch registers; inside context we may consider
+%D using dedicated registers.
+
+%D This module handles some \PDF\ conversion and insertions
+%D topics. By default, the macros use the \PDFTEX\ primitive
+%D \type{\pdfliteral} when available. Since \PDFTEX\ is now the
+%D default engine for \TEX\ distributions, we need a more complex
+%D test.
+
+\unprotect
+
+\ifx\PDFcode\undefined
+ \ifx\pdfliteral\undefined
+ \def\PDFcode#1{\special{PDF: #1}}
+ \else\ifx\pdfoutput\undefined
+ \def\PDFcode#1{\special{PDF: #1}}
+ \else\ifcase\pdfoutput
+ \def\PDFcode#1{\special{PDF: #1}}
+ \else % pdftex as well as in pdf mode
+ \let\PDFcode\pdfliteral
+ \fi\fi\fi
+\else
+ % we probably use context
+\fi
+
+%D First we define a handy constant:
+
+\bgroup \defineMPtoPDFfallbacks \catcode`\%=\@@other \xdef\letterpercent{\string%} \egroup
+
+%D \macros
+%D {pdfimage,pdfimages,pdfclippedimage}
+%D
+%D Starting with pdftex version 14, images are included more
+%D natural to the form embedding. This enables alternative
+%D images to be embedded.
+%D
+%D \starttyping
+%D \pdfimage <optional dimensions> {file}
+%D \pdfimages <optional dimensions> {high res file} {low res file}
+%D \stoptyping
+%D
+%D The first one replaces the pre||version||14 original,
+%D while the latter provides alternative images.
+%D
+%D The next macro is dedicated to Maarten Gelderman, who
+%D needed to paste prepared \PDF\ pages into conference
+%D proceedings.
+%D
+%D \starttyping
+%D \pdfclippedimage <optional dimensions> {file} {l} {r} {t} {b}
+%D \stoptyping
+
+\ifx\pdftexversion\undefined \else \ifnum\pdftexversion>13
+
+ \def\pdfimage#1#%
+ {\dopdfimage{#1}}
+
+ \def\dopdfimage#1#2%
+ {\immediate\pdfximage#1{#2}%
+ \pdfrefximage\pdflastximage}
+
+ \def\pdfimages#1#%
+ {\dopdfimages{#1}}
+
+ \def\dopdfimages#1#2#3%
+ {\immediate\pdfximage#1{#2}%
+ \immediate\pdfobj{[ << /Image \the\pdflastximage\space0 R /DefaultForPrinting true >> ]}%
+ \immediate\pdfximage#1 attr {/Alternates \the\pdflastobj\space0 R}{#3}%
+ \pdfrefximage\pdflastximage}
+
+ \def\pdfclippedimage#1#% specs {file}{left}{right}{top}{bottom}
+ {\dopdfclippedimage{#1}}
+
+ \def\dopdfclippedimage#1#2#3#4#5#6%
+ {\bgroup
+ \pdfximage#1{#2}%
+ \setbox\scratchbox\hbox
+ {\pdfrefximage\pdflastximage}%
+ \hsize\wd\scratchbox
+ \advance\hsize -#3
+ \advance\hsize -#4
+ \vsize\ht\scratchbox
+ \advance\vsize -#5
+ \advance\vsize -#6
+ \setbox\scratchbox\vbox to \vsize
+ {\vskip-#5\hbox to \hsize{\hskip-#3\box\scratchbox\hss}}%
+ \pdfxform\scratchbox
+ \pdfrefxform\pdflastxform
+ \egroup}
+
+\fi \fi
+
+%D If you want to save a few hash entries, you may prefer the
+%D less readable alternatives, like:
+%D
+%D \starttyping
+%D \def\pdfimage#1#% This one is less readable but needs no additional
+%D {\bgroup % hash entry for the second stage macro.
+%D \def\pdfimage##1%
+%D {\immediate\pdfximage##1{#2}%
+%D \pdfrefximage\pdflastximage\egroup}}
+%D \stoptyping
+
+%D For old times sake we provide a few aliases. These will be
+%D removed some day.
+
+\ifx\pdftexversion\undefined \else \ifnum\pdftexversion>13
+
+ \let\pdfform =\pdfxform
+ \let\pdflastform=\pdflastxform
+ \let\pdfrefform =\pdfrefxform
+
+\fi \fi
+
+%D The main conversion macro wraps the \PDF\ codes in a box
+%D that is output as an object. The graphics are embedded
+%D in~\type{q} and~\type{Q} and are scaled and positioned using
+%D one transform call (\type{cm}). This saves some additional
+%D scaling.
+
+%D \macros
+%D {convertMPtoPDF}
+%D
+%D The next set of macros implements \METAPOST\ to \PDF\
+%D conversion. Because we want to test as fast as possible, we
+%D first define the \POSTSCRIPT\ operators that \METAPOST\
+%D uses. We don't define irrelevant ones, because these are
+%D skipped anyway.
+
+%D The converter can be made a bit faster by replacing the
+%D two test macros (the ones with the many \type {\if's}) by
+%D a call to named branch macros (something \typ {\getvalue
+%D {xPSmoveto}}. For everyday documents with relatively
+%D small graphics the gain in speed can be neglected.
+
+\def \PScurveto {curveto}
+\def \PSlineto {lineto}
+\def \PSmoveto {moveto}
+\def \PSshowpage {showpage}
+\def \PSnewpath {newpath}
+\def \PSfshow {fshow}
+\def \PSclosepath {closepath}
+\def \PSfill {fill}
+\def \PSstroke {stroke}
+\def \PSclip {clip}
+\def \PSrlineto {rlineto}
+\def \PSsetlinejoin {setlinejoin}
+\def \PSsetlinecap {setlinecap}
+\def \PSsetmiterlimit {setmiterlimit}
+\def \PSsetgray {setgray}
+\def \PSsetrgbcolor {setrgbcolor}
+\def \PSsetcmykcolor {setcmykcolor}
+\def \PSsetdash {setdash}
+\def \PSgsave {gsave}
+\def \PSgrestore {grestore}
+\def \PStranslate {translate}
+\def \PSscale {scale}
+\def \PSconcat {concat}
+\def \PSdtransform {dtransform}
+\def \PSsetlinewidth {setlinewidth}
+\def \PSpop {pop}
+
+\def \PSnfont {nfont} % was needed for TUG98 proceedings
+\def \PSspecial {special} % extensions to MetaPost
+
+%D A previous version set \type {%} to ignore, which
+%D simplified the following definitions. At the start of
+%D conversion the percent character was made active again.
+%D Because the whole graphic is one paragraph (there are no
+%D empty lines) this does not give the desired effect. This
+%D went unnoticed untill Scott Pakin sent me a test file
+%D percent characters in a string. So, from now on we have
+%D to prefix the following strings with percentages.
+
+%D Some day I'll figure out a better solution (line by line reading
+%D using \ETEX).
+
+\edef \PSBoundingBox {\letterpercent\letterpercent BoundingBox:}
+\edef \PSHiResBoundingBox {\letterpercent\letterpercent HiResBoundingBox:}
+\edef \PSExactBoundingBox {\letterpercent\letterpercent ExactBoundingBox:}
+\edef \PSMetaPostSpecial {\letterpercent\letterpercent MetaPostSpecial:}
+\edef \PSMetaPostSpecials {\letterpercent\letterpercent MetaPostSpecials:}
+\edef \PSPage {\letterpercent\letterpercent Page:}
+\edef \PSBeginProlog {\letterpercent\letterpercent BeginProlog}
+\edef \PSEndProlog {\letterpercent\letterpercent EndProlog}
+\edef \PSEof {\letterpercent\letterpercent EOF}
+
+%D By the way, the \type {setcmykcolor} operator is not
+%D output by \METAPOST\ but can result from converting the
+%D \cap{RGB} color specifications, as implemented in
+%D \type{supp-mps}.
+
+%D In \POSTSCRIPT\ arguments precede the operators. Due to the
+%D fact that in some translations we need access to those
+%D arguments, and also because sometimes we have to skip them,
+%D we stack them up. The stack is one||dimensional for non path
+%D operators and two||dimensional for operators inside a path.
+%D This is because we have to save the whole path for
+%D (optional) postprocessing. Values are pushed onto the stack
+%D by:
+%D
+%D \starttyping
+%D \setMPargument {value}
+%D \stoptyping
+%D
+%D They can be retrieved by the short named macros:
+%D
+%D \starttyping
+%D \gMPa {number}
+%D \gMPs {number}
+%D \stoptyping
+%D
+%D When scanning a path specification, we also save the
+%D operator, using
+%D
+%D \starttyping
+%D \setMPkeyword {n}
+%D \stoptyping
+%D
+%D The path drawing operators are coded for speed: \type{clip},
+%D \type{stroke}, \type{fill} and \type{fillstroke} become
+%D 1, 2, 3 and~4.
+%D
+%D When processing the path this code can be retrieved
+%D using
+%D
+%D \starttyping
+%D \getMPkeyword % {n}
+%D \stoptyping
+%D
+%D When setting an argument, the exact position on the stack
+%D depends on the current value of the \COUNTERS\
+%D \type{\nofMPsegments} and \type{\nofMParguments}.
+
+\newcount\nofMPsegments
+\newcount\nofMParguments
+
+%D These variables hold the coordinates. The argument part of
+%D the stack is reset by:
+%D
+%D \starttyping
+%D \resetMPstack
+%D \stoptyping
+%D
+%D We use the prefix \type{@@MP} to keep the stack from
+%D conflicting with existing macros. To speed up things a bit
+%D more, we use the constant \type{\@@MP}.
+
+\def\@@MP{@@MP}
+
+\def\setMPargument% #1%
+ {\advance\nofMParguments 1
+ \expandafter\def
+ \csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname} % {#1}
+
+\def\letMPargument
+ {\advance\nofMParguments 1
+ \expandafter\let
+ \csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname}
+
+\def\setMPsequence#1 %
+ {\advance\nofMParguments 1
+ \expandafter\def
+ \csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname{#1}%
+ \handleMPsequence}
+
+\def\gMPa#1%
+ {\csname\@@MP0\number#1\endcsname}
+
+\def\gMPs#1%
+ {\csname\@@MP\the\nofMPsegments\number#1\endcsname}
+
+\def\dogMPa#1%
+ {\expandafter\expandafter\expandafter\do\csname\@@MP0\number#1\endcsname}
+
+\def\setMPkeyword#1 %
+ {\expandafter\def\csname\@@MP\the\nofMPsegments0\endcsname{#1}%
+ \advance\nofMPsegments 1
+ \nofMParguments0}
+
+\def\getMPkeyword% #1%
+ {\csname\@@MP\the\nofMPsegments0\endcsname} % {\csname\@@MP#10\endcsname}
+
+\def\docleanupMPargument#1% we need this because args can have [ or ] pre/appended
+ {\expandafter\edef\csname\@@MP\the\nofMPsegments\number#1\endcsname
+ {\csname\@@MP\the\nofMPsegments\number#1\endcsname}}
+
+%D When we reset the stack, we can assume that all further
+%D comment is to be ignored and handled in strings.
+%D By redefining the reset macro after the first call, we
+%D save some run time. Only use this macro after all
+%D comments are processed and use the simple alternative
+%D when dealing with comments.
+
+\def\doresetMPstack
+ {\nofMParguments0\relax}
+
+\def\resetMPstack
+ {\let\handleMPgraphic\handleMPendgraphic
+ \let\resetMPstack\doresetMPstack
+ \resetMPstack}
+
+%D The arguments are saved with the preceding command
+%D \type{\do}. By default this command expands to nothing, but
+%D when we deal with strings it's used to strip off the
+%D \type{(} and \type{)}.
+%D
+%D Strings are kind of tricky, because characters can be
+%D passed verbatim \type{(hello)}, by octal number
+%D \type{(\005)} or as command \type{(\()}. We therefore
+%D cannot simply ignore \type{(} and \type{)}, the way we do
+%D with \type{[} and \type{]}. Another complication is that
+%D strings may contain characters that normally have a
+%D special meaning in \TEX, like \type{$} and \type{{}}.
+%D
+%D A previous solution made \type{\} an active character and
+%D let it look ahead for a number or characters. We had to
+%D abandon this scheme because of the need for verbatim
+%D support. The next solution involved some \CATCODE\
+%D trickery but works well.
+
+\def\octalMPcharacter#1#2#3%
+ {\char'#1#2#3\relax}
+
+%D curly braces and squarly brackets are stored in the argument stack
+%D as part of strings, for instance in:
+%D
+%D \starttyping
+%D /fshow {exch findfont exch scalefont setfont show}bind def
+%D [3 3 ] 0 setdash
+%D \stoptyping
+%D
+%D but we need to keep them in situation like
+%D
+%D \starttyping
+%D ([bla bla] bla bla) ec-lmr10 9.96265 fshow
+%D ({bla bla} bla bla) ec-lmr10 9.96265 fshow
+%D \stoptyping
+%D
+%D So, when we store the snippets, we keep the special tokens, and
+%D when needed we either ignore or obey them
+
+\bgroup
+\defineMPtoPDFfallbacks
+\catcode`\|=\@@comment
+\catcode`\%=\@@active
+\catcode`\[=\@@active
+\catcode`\]=\@@active
+\catcode`\{=\@@active
+\catcode`\}=\@@active
+\catcode`B=\@@begingroup
+\catcode`E=\@@endgroup
+\gdef\keepMPspecials|
+ B\let%\letterpercent|
+ \def[B\noexpand[E|
+ \def]B\noexpand]E|
+ \def{B\noexpand{E|
+ \def}B\noexpand}EE
+\gdef\ignoreMPspecials|
+ B\let%\letterpercent|
+ \def[BE|
+ \def]BE|
+ \def{BE|
+ \def}BEE
+\gdef\obeyMPspecials|
+ B\def%B\char 37\relax E|
+ \def[B\char 91\relax E|
+ \def]B\char 93\relax E|
+ \def{B\char123\relax E|
+ \def}B\char125\relax EE
+\gdef\setMPspecials|
+ B\setnaturalcatcodes
+ \catcode`\\=\@@escape
+ \catcode`\%=\@@active
+ \catcode`\[=\@@active
+ \catcode`\]=\@@active
+ \catcode`\{=\@@active
+ \catcode`\}=\@@active
+ \lccode`\-=0 | latex sets this to `\-
+ \lccode`\%=`\% | otherwise it's seen as a number
+ \def\(B\char40\relax E|
+ \def\)B\char41\relax E|
+ \def\\B\char92\relax E|
+ \def\0B\octalMPcharacter0E|
+ \def\1B\octalMPcharacter1E|
+ \def\2B\octalMPcharacter2E|
+ \def\3B\octalMPcharacter3E|
+ \def\4B\octalMPcharacter4E|
+ \def\5B\octalMPcharacter5E|
+ \def\6B\octalMPcharacter6E|
+ \def\7B\octalMPcharacter7E|
+ \def\8B\octalMPcharacter8E|
+ \def\9B\octalMPcharacter9EE
+\egroup
+
+%D We use the comment symbol as a sort of trigger. Beware!
+%D The whole graphic is seen as on eparagraph, which means
+%D that we cannot change the catcodes in between.
+
+\bgroup
+\defineMPtoPDFfallbacks
+\catcode`\%=\@@active
+\gdef\startMPscanning{\let%=\startMPconversion}
+\egroup
+
+%D In earlier versions we used the sequence
+%D
+%D \starttyping
+%D \expandafter\handleMPsequence\input filename\relax
+%D \stoptyping
+%D
+%D Persistent problems in \LATEX\ however forced us to use a
+%D different scheme. Every \POSTSCRIPT\ file starts with a
+%D \type{%}, so we temporary make this an active character
+%D that starts the scanning and redefines itself. (The problem
+%D originates in the redefinition by \LATEX\ of the
+%D \type{\input} primitive.)
+
+\def\startMPconversion
+ {\keepMPspecials
+ \handleMPsequence}
+
+%D Here comes the main loop. Most arguments are numbers. This
+%D means that they can be recognized by their \type{\lccode}.
+%D This method saves a lot of processing time. We could
+%D speed up the conversion by handling the \type{path}
+%D seperately.
+
+\def\dohandleMPsequence#1%
+ {\ifdone
+ \ifcase\lccode`#1\relax
+ \expandafter\expandafter\expandafter\dohandleMPsequenceA
+ \else
+ \expandafter\expandafter\expandafter\dohandleMPsequenceB
+ \fi
+ \else
+ \expandafter\dohandleMPsequenceC
+ \fi#1}
+
+\let\dohandleMPsequenceA\setMPsequence
+
+\def\installMPSkeywordN#1#2%
+ {\expandafter\def\csname\@@MP:N:#1\endcsname{#2}}
+
+\def\installMPSshortcutN#1#2% todo: \let
+ {\expandafter\let\csname\@@MP:N:#1\expandafter\endcsname\csname\@@MP:N:#2\endcsname}
+
+\def\dohandleMPsequenceB#1 %
+ {\edef\somestring{#1}%
+ \ifcsname\@@MP:N:\somestring\endcsname
+ \csname\@@MP:N:\somestring\expandafter\endcsname
+ \else
+ \expandafter\handleMPgraphic
+ \fi
+ \handleMPsequence}
+
+\ifx\eTeXversion\undefined
+ \def\dohandleMPsequenceB#1 %
+ {\edef\somestring{#1}%
+ \expandafter\ifx\csname\@@MP:N:\somestring\endcsname\relax
+ \expandafter\handleMPgraphic
+ \else
+ \csname\@@MP:N:\somestring\expandafter\endcsname
+ \fi
+ \handleMPsequence}
+\fi
+
+\installMPSkeywordN \PSmoveto
+ {\edef\lastMPmoveX{\gMPa1}%
+ \edef\lastMPmoveY{\gMPa2}%
+ \resetMPstack}
+\installMPSkeywordN \PSnewpath
+ {\let\handleMPsequence\handleMPpath}
+\installMPSkeywordN \PSgsave
+ {\PDFcode{q}%
+ \resetMPstack}
+\installMPSkeywordN \PSgrestore
+ {\PDFcode{Q}%
+ \resetMPstack}
+\installMPSkeywordN \PSdtransform % == setlinewidth
+ {\let\handleMPsequence\handleMPdtransform}
+ % after that we will encounter more tokens until setlinewidth+pop
+ % or pop+setlinewidth which we catch next; we explicitly need to
+ % reset the stack since [] n setdash may follow; a more clever
+ % approach would be to read on till the condition is met, but it's
+ % the only pop / setlinewidth we will encounter so ...
+\installMPSkeywordN \PSsetlinewidth
+ {% already handled in dtransform
+ \resetMPstack}
+\installMPSkeywordN \PSpop
+ {% already handled in dtransform
+ \resetMPstack}
+\installMPSkeywordN \PSconcat
+ {\cleanupMPconcat
+ \PDFcode{\gMPa1 \gMPa2 \gMPa3 \gMPa4 \gMPa5 \gMPa6 cm}%
+ \resetMPstack}
+\installMPSkeywordN \PSsetrgbcolor
+ {\handleMPrgbcolor
+ \resetMPstack}
+\installMPSkeywordN \PSsetcmykcolor
+ {\handleMPcmykcolor
+ \resetMPstack}
+\installMPSkeywordN \PSsetgray
+ {\handleMPgraycolor
+ \resetMPstack}
+\installMPSkeywordN \PStranslate
+ {\PDFcode{1 0 0 1 \gMPa1 \gMPa2 cm}%
+ \resetMPstack}
+\installMPSkeywordN \PSsetdash
+ {\handleMPsetdash
+ \resetMPstack}
+\installMPSkeywordN \PSsetlinejoin
+ {\PDFcode{\gMPa1 j}%
+ \resetMPstack}
+\installMPSkeywordN \PSsetmiterlimit
+ {\PDFcode{\gMPa1 M}%
+ \resetMPstack}
+\installMPSkeywordN \PSfshow
+ {%\PDFcode{n}% removed !
+ \handleMPfshow
+ \resetMPstack}
+\installMPSkeywordN \PSsetlinecap
+ {\PDFcode{\gMPa1 J}%
+ \resetMPstack}
+\installMPSkeywordN \PSrlineto
+ {\flushMPmoveto
+ \PDFcode{\!MP\lastMPmoveX\space\!MP\lastMPmoveY\space l S}%
+ \resetMPmoveto
+ \resetMPstack}
+\installMPSkeywordN \PSscale
+ {\PDFcode{\gMPa1 0 0 \gMPa2 0 0 cm}%
+ \resetMPstack}
+\installMPSkeywordN \PSspecial
+ {\handleMPspecialcommand
+ \resetMPstack}
+
+\installMPSshortcutN {n} \PSnewpath
+\installMPSshortcutN {p} \PSclosepath
+\installMPSshortcutN {l} \PSlineto
+\installMPSshortcutN {r} \PSrlineto
+\installMPSshortcutN {m} \PSmoveto
+\installMPSshortcutN {c} \PScurveto
+\installMPSshortcutN {C} \PSsetcmykcolor
+\installMPSshortcutN {G} \PSsetgray
+\installMPSshortcutN {R} \PSsetrgbcolor
+\installMPSshortcutN {lj} \PSsetlinejoin
+\installMPSshortcutN {ml} \PSsetmiterlimit
+\installMPSshortcutN {lc} \PSsetlinecap
+\installMPSshortcutN {sd} \PSsetdash
+\installMPSshortcutN {S} \PSstroke
+\installMPSshortcutN {F} \PSfill
+\installMPSshortcutN {W} \PSclip
+
+\installMPSshortcutN {q} \PSgsave
+\installMPSshortcutN {Q} \PSgrestore
+
+\installMPSshortcutN {s} \PSscale
+\installMPSshortcutN {t} \PSconcat
+\installMPSshortcutN {P} \PSshowpage
+
+\installMPSkeywordN {hlw} {\PDFcode{\gMPa1 w}\resetMPstack}
+\installMPSkeywordN {vlw} {\PDFcode{\gMPa1 w}\resetMPstack}
+\installMPSkeywordN {rd} {\PDFcode{[] 0 d}\resetMPstack}
+
+\def\dohandleMPsequenceC#1 %
+ {\edef\somestring{#1}%
+ \handleMPgraphic % {#1}%
+ \handleMPsequence}
+
+%D Since colors are not sensitive to transformations, they
+%D are sometimes used for signaling. Therefore, we handle them
+%D separately. The next macro can be redefined if needed.
+
+\def\handleMPrgbcolor
+ {\PDFcode{\!MPgMPa1 \!MPgMPa2 \!MPgMPa3 rg
+ \!MPgMPa1 \!MPgMPa2 \!MPgMPa3 RG}}
+
+\def\handleMPcmykcolor
+ {\PDFcode{\!MPgMPa1 \!MPgMPa2 \!MPgMPa3 \!MPgMPa4 k
+ \!MPgMPa1 \!MPgMPa2 \!MPgMPa3 \!MPgMPa4 K}}
+
+\def\handleMPgraycolor
+ {\PDFcode{\!MPgMPa1 g
+ \!MPgMPa1 G}}
+
+\def\handleMPspotcolor
+ {\PDFcode{0 g
+ 0 G}}
+
+%D Beginning and ending the graphics is taken care of by the
+%D macro \type{\handleMPgraphic}, which is redefined when
+%D the first graphics operator is met.
+
+\def\handleMPendgraphic % #1%
+ {\ifx\somestring\PSshowpage
+ \let\handleMPsequence\finishMPgraphic
+ \else\ifx\somestring\PSEof
+ \let\handleMPsequence\finishMPgraphic
+ \else
+ \letMPargument\somestring % {#1}%
+ \fi\fi}
+
+\def\handleMPbegingraphic % #1%
+ {\ifx\somestring\PSBoundingBox
+ \def\handleMPsequence{\handleMPboundingbox1}%
+ \else\ifx\somestring\PSHiResBoundingBox
+ \def\handleMPsequence{\handleMPboundingbox2}%
+ \else\ifx\somestring\PSExactBoundingBox
+ \def\handleMPsequence{\handleMPboundingbox3}%
+ \else\ifx\somestring\PSshowpage
+ \let\handleMPsequence\finishMPgraphic
+ \else\ifx\somestring\PSEof
+ \let\handleMPsequence\finishMPgraphic
+ \else\ifx\somestring\PSPage
+ \let\handleMPsequence\handleMPpage
+ \else\ifx\somestring\PSMetaPostSpecials
+ \let\handleMPsequence\handleMPspecialscomment
+ \else\ifx\somestring\PSMetaPostSpecial
+ \let\handleMPsequence\handleMPspecialcomment
+ \else\ifx\somestring\PSBeginProlog
+ \let\handleMPsequence\handleMPprolog
+ \else
+ \letMPargument\somestring % {#1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+\let\handleMPgraphic=\handleMPbegingraphic
+
+%D New: we can best filter the prolog because nowdays it can contain
+%D quite some code.
+
+% hm, catcode mess, so we need to tweak %'s catcode here
+% \long\expandafter\def\expandafter\handleMPprolog\expandafter#\expandafter1\PSEndProlog%
+% but today i'm not in the mood for ugly stuff
+
+\long\def\handleMPprolog#1EndProlog %
+ {\doresetMPstack
+ \let\handleMPsequence\dohandleMPsequence
+ \handleMPsequence}
+
+%D We check for three kind of bounding boxes: the normal one
+%D and two high precision ones:
+%D
+%D \starttyping
+%D BoundingBox: llx lly ucx ucy
+%D HiResBoundingBox: llx lly ucx ucy
+%D ExactBoundingBox: llx lly ucx ucy
+%D \stoptyping
+%D
+%D The original as well as the recalculated dimensions are
+%D saved for later use.
+
+\newif\ifskipemptyMPgraphic \skipemptyMPgraphicfalse
+
+\chardef\currentMPboundingbox=0
+
+\def\handleMPboundingbox#1#2 #3 #4 #5
+ {\ifnum#1>\currentMPboundingbox
+ \xdef\MPllx{#2}\xdef\MPlly{#3}%
+ \xdef\MPurx{#4}\xdef\MPury{#5}%
+ \dimen0=#2pt
+ \dimen0=-\MPxscale\dimen0
+ \dimen2=#3pt
+ \dimen2=-\MPyscale\dimen2
+ \xdef\MPxoffset{\withoutpt\the\dimen0}%
+ \xdef\MPyoffset{\withoutpt\the\dimen2}%
+ \dimen0=#2bp
+ \dimen0=-\dimen0
+ \dimen2=#3bp
+ \dimen2=-\dimen2
+ \advance\dimen0 #4bp
+ \dimen0=\MPxscale\dimen0
+ \xdef\MPwidth{\the\dimen0}%
+ \advance\dimen2 #5bp
+ \xdef\MPyshift{\the\dimen2}% unscaled
+ \dimen2=\MPyscale\dimen2
+ \xdef\MPheight{\the\dimen2}%
+ \chardef\currentMPboundingbox#1\relax
+ \fi
+ \doresetMPstack
+ \let\handleMPsequence\dohandleMPsequence
+ \let\next\handleMPsequence
+ \ifskipemptyMPgraphic
+ \ifdim\MPheight=0pt\relax\ifdim\MPwidth=0pt\relax
+ \def\next{\endinput\finishMPgraphic}%
+ \fi\fi
+ \fi
+ \next}
+
+%D Unless defined otherwise, we simply ignore specialcomments.
+
+\def\handleMPspecialcomment
+ {\doresetMPstack
+ \let\handleMPsequence\dohandleMPsequence
+ \handleMPsequence}
+
+\let\handleMPspecialscomment\handleMPspecialcomment
+
+%D We use the \type{page} comment as a signal that
+%D stackbuilding can be started.
+
+\def\handleMPpage #1 #2
+ {\doresetMPstack
+ \donetrue
+ \let\handleMPsequence\dohandleMPsequence
+ \handleMPsequence}
+
+%D The same applies to the special extensions.
+
+\def\handleMPspecialcommand
+ {\doresetMPstack
+ \let\handleMPsequence\dohandleMPsequence
+ \handleMPsequence}
+
+%D \METAPOST\ draws its dots by moving to a location and
+%D invoking \type{0 0 rlineto}. This operator is not
+%D available in \PDF. Our solution is straightforward: we draw
+%D a line from $(current\_x, current\_y)$ to itself. This
+%D means that the arguments of the preceding \type{moveto} have
+%D to be saved.
+
+\def\lastMPmoveX{0}
+\def\lastMPmoveY{0}
+
+%D These saved coordinates are also used when we handle the
+%D texts. Text handling proved to be a bit of a nuisance, but
+%D finally I saw the light. It proved that we also had to
+%D take care of \type{(split arguments)}.
+
+% \def\setMPfshowfont#1#2%
+% {\font\temp=#1\space at #2\relax\temp}
+
+% \startMPcode
+% draw btex Ga toch effe f\kern0ptietsen?{}` etex ;
+% \stopMPcode
+
+\newtoks \everyMPshowfont
+
+\def\setMPfshowfont#1#2%
+ {\font\temp=#1\space at #2\relax\temp
+ \the\everyMPshowfont}
+
+\let\MPfshowcommand\empty
+
+%D The next hackery handles characters one by one. We only support this
+%D for the latest greatest \METAPOST\ binaries, the ones that escape
+%D problematic chars.
+
+\def\doflushMPtext#1%
+ {\edef\!!stringa{#1}%
+ \expandafter\dodoflushMPtext\!!stringa\relax}
+
+\def\dodoflushMPtext
+ {\afterassignment\dododoflushMPtext\let\nexttoken=}
+
+\def\dododoflushMPtext
+ {\ifx\nexttoken\relax
+ % done
+ \else\ifx\nexttoken\char
+ \expandafter\expandafter\expandafter\dodododoflushMPtext
+ \else
+ {\nexttoken}%
+ \expandafter\expandafter\expandafter\dodoflushMPtext
+ \fi\fi}
+
+\def\dodododoflushMPtext
+ {\afterassignment\dododododoflushMPtext\scratchcounter}
+
+\def\dododododoflushMPtext
+ {{\char\scratchcounter}\let\next\dodoflushMPtext}
+
+\def\dohandleMPfshow
+ {\bgroup
+ \setbox\scratchbox\hbox
+ {\obeyMPspecials
+ \let\ \relax % mp breaks long lines and appends a \
+ \edef\size{\gMPa\nofMParguments}%
+ \ifx\size\PSnfont % round font size (to pt)
+ \advance\nofMParguments -1
+ \expandafter\scratchdimen\gMPa\nofMParguments pt\relax
+ \ifdim\scratchdimen<1pt
+ \def\size{1pt}%
+ \else
+ \advance\scratchdimen .5pt
+ \def\size##1.##2\relax{\def\size{##1pt}}%
+ \expandafter\size\the\scratchdimen\relax
+ \fi
+ \else
+ \edef\size{\size bp}%
+ \fi
+ \advance\nofMParguments -1
+ %\font\temp=\gMPa\nofMParguments\space at \size
+ \let\temp\relax % to be sure
+ \setMPfshowfont{\gMPa\nofMParguments}\size
+ \advance\nofMParguments -1
+ \temp
+ \MPfshowcommand
+ {\ifnum\nofMParguments=1
+ \def\do(##1){##1}%
+ \doflushMPtext{\dogMPa1}% only latest mp gets this treatment
+ \else
+ % we need to catch ( a ) (a a a) (\123 \123 \123) etc
+ \scratchcounter1
+ \def\dodo##1% Andreas Fieger's bug: (\304...)
+ {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11
+ \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}%
+ \def\do(##1{\dodo{##1}}%
+ \dogMPa\scratchcounter\MPspacechar
+ \let\do\relax
+ \loop
+ \advance\scratchcounter 1
+ \ifnum\scratchcounter<\nofMParguments\relax
+ \gMPa\scratchcounter\MPspacechar
+ \repeat
+ \def\do##1){\dodo{##1}}%
+ \dogMPa\scratchcounter
+ \fi
+ \unskip}}%
+ \setbox\scratchbox\hbox
+ {\hskip\lastMPmoveX bp\raise\lastMPmoveY bp\box\scratchbox}%
+ \ht\scratchbox0pt%
+ \dp\scratchbox0pt%
+ \wd\scratchbox0pt%
+ \box\scratchbox
+ \egroup}
+
+\let\handleMPfshow\dohandleMPfshow % so we can overload this one later
+
+%D You could consider the following definition to be the most
+%D natural one.
+
+% \def\MPspacechar{\space} % normal case
+
+\def\MPspacechar{\char32\relax} % old solution does not work with math
+
+%D However, the following implementation is more robust, since
+%D some fonts have funny visible spaces in the space slot. This
+%D gives a mismatch between the space that \METAPOST\ took into
+%D account and the \quote {natural} space. This only happens in
+%D labels, since \type {btex}||\type {etex} thingies don't have
+%D spaces. This phenomena showed up when preparing the
+%D \METAFUN\ manual, where Palatino fonts are used. We can
+%D safely assume that \METAPOST\ considers \type {\char32} to
+%D be the space.
+
+\def\MPspacechar{\setbox\scratchbox\hbox{\char32}\kern\wd\scratchbox}
+
+%D Well, this does not work with math fonts, so:
+
+\def\MPspacechar{\char32\relax}
+
+%D Most operators are just converted and keep their
+%D arguments. Dashes however need a bit different treatment,
+%D otherwise \PDF\ viewers complain loudly. Another
+%D complication is that one argument comes after the \type{]}.
+%D When reading the data, we simply ignore the array boundary
+%D characters. We save ourselves some redundant newlines and
+%D at the same time keep the output readable by packing the
+%D literals.
+
+\def\handleMPsetdash
+ {\bgroup
+ \ignoreMPspecials
+ \def\somestring{[}%
+ \scratchcounter1
+ \loop
+ \ifnum\scratchcounter<\nofMParguments
+ \edef\somestring{\somestring\space\gMPa\scratchcounter}%
+ \advance\scratchcounter 1
+ \repeat
+ \edef\somestring{\somestring]\gMPa\scratchcounter\space d}%
+ \PDFcode{\somestring}%
+ \egroup}
+
+%D The \type{setlinewidth} commands looks a bit complicated. There are
+%D two alternatives, that result in a similar look in both
+%D $x$- and $y$-dorection. As John Hobby says:
+%D
+%D \startnarrower \switchtobodyfont[ss]
+%D \starttyping
+%D x 0 dtransform exch truncate exch idtransform pop setlinewidth
+%D 0 y dtransform truncate idtransform setlinewidth pop
+%D \stoptyping
+%D
+%D These are just fancy versions of \type{x setlinewidth} and
+%D \type{y setlinewidth}. The \type{x 0 ...} form is used if
+%D the path is {\em primarily vertical}. It rounds the width
+%D so that vertical lines come out an integer number of pixels
+%D wide in device space. The \type{0 y ...} form does the same
+%D for paths that are {\em primarily horizontal}. The reason
+%D why I did this is Knuth insists on getting exactly the
+%D widths \TEX\ intends for the horizontal and vertical rules
+%D in \type{btex...etex} output. (Note that PostScript scan
+%D conversion rules cause a horizontal or vertical line of
+%D integer width $n$ in device space to come out $n+1$ pixels
+%D wide, regardless of the phase relative to the pixel grid.)
+%D \stopnarrower
+%D
+%D The common operator in these sequences is \type{dtransform},
+%D so we can use this one to trigger setting the linewidth.
+
+\def\handleMPdtransform
+ {\ifdim\gMPa1 pt>0pt
+ \PDFcode{\gMPa1 w}%
+ \def\next##1 ##2 ##3 ##4 ##5 ##6 {\handleMPsequence}%
+ \else
+ \PDFcode{\gMPa2 w}%
+ \def\next##1 ##2 ##3 ##4 {\handleMPsequence}%
+ \fi
+ \let\handleMPsequence\dohandleMPsequence
+ \resetMPstack
+ \next}
+
+%D The most complicated command is \type{concat}. \METAPOST\
+%D applies this operator to \type{stroke}. At that moment the
+%D points set by \type{curveto} and \type{moveto}, are already
+%D fixed. In \PDF\ however the \type{cm} operator affects the
+%D points as well as the pen (stroke). Like more \PDF\
+%D operators, \type{cm} is defined in a bit ambiguous way.
+%D The only save route for non||circular penshapes, is saving
+%D the path, recalculating the points and applying the
+%D transformation matrix in such a way that we can be sure
+%D that its behavior is well defined. This comes down to
+%D inverting the path and applying \type{cm} to that path as
+%D well as the pen. This all means that we have to save the
+%D path.
+
+%D In \METAPOST\ there are three ways to handle a path $p$:
+%D
+%D \starttyping
+%D draw p; fill p; filldraw p;
+%D \stoptyping
+%D
+%D The last case outputs a \type{gsave fill grestore} before
+%D \type{stroke}. Handling the path outside the main loops
+%D saves about 40\% run time.\footnote{We can save some more by
+%D following the \METAPOST\ output routine, but for the moment
+%D we keep things simple.} Switching between the main loop and
+%D the path loop is done by means of the recursely called
+%D macro \type{\handleMPsequence}.
+
+\def\handleMPpath
+ {\chardef\finiMPpath0
+ \let\closeMPpath\relax
+ \let\flushMPpath\flushnormalMPpath
+ \resetMPstack
+ \nofMPsegments1
+ \let\handleMPsequence\dohandleMPpath
+ \dohandleMPpath}
+
+%D Most paths are drawn with simple round pens. Therefore we've
+%D split up the routine in two.
+
+\def\flushnormalMPsegment
+ {\ifcase\getMPkeyword\relax
+ \PDFcode{\!MPgMPs1 \!MPgMPs2 l}%
+ \or
+ \PDFcode{\!MPgMPs1 \!MPgMPs2 \!MPgMPs3 \!MPgMPs4 \!MPgMPs5 \!MPgMPs6 c}%
+ \or
+ \PDFcode{\!MP\lastMPmoveX\space\!MP\lastMPmoveY\space l}%
+ \or
+ \edef\lastMPmoveX{\gMPs1}% evt \!MP here
+ \edef\lastMPmoveY{\gMPs2}%
+ \PDFcode{\!MP\lastMPmoveX\space \!MP\lastMPmoveY\space m}%
+ \fi}
+
+\def\flushconcatMPsegment
+ {\ifcase\getMPkeyword\relax
+ \doMPconcat{\gMPs1}\a{\gMPs2}\b%
+ \PDFcode{\!MP\a\space\!MP\b\space l}%
+ \or
+ \doMPconcat{\gMPs1}\a{\gMPs2}\b%
+ \doMPconcat{\gMPs3}\c{\gMPs4}\d%
+ \doMPconcat{\gMPs5}\e{\gMPs6}\f%
+ \PDFcode{\!MP\a\space\!MP\b\space
+ \!MP\c\space\!MP\d\space
+ \!MP\e\space\!MP\f\space c}%
+ \or
+ \bgroup
+ \noMPtranslate
+ \doMPconcat\lastMPmoveX\a\lastMPmoveY\b%
+ \PDFcode{\!MP\a\space\!MP\b\space l S}%
+ \egroup
+ \or
+ \edef\lastMPmoveX{\gMPs1}%
+ \edef\lastMPmoveY{\gMPs2}%
+ \doMPconcat\lastMPmoveX\a\lastMPmoveY\b%
+ \PDFcode{\!MP\a\space\!MP\b\space m}%
+ \fi}
+
+% \def\flushnormalMPpath
+% {\scratchcounter\nofMPsegments
+% \nofMPsegments 1
+% \loop
+% \flushnormalMPsegment
+% \advance\nofMPsegments 1
+% \ifnum\nofMPsegments<\scratchcounter
+% \repeat}
+%
+% \def\flushconcatMPpath
+% {\scratchcounter\nofMPsegments
+% \nofMPsegments 1
+% \loop
+% \flushconcatMPsegment
+% \advance\nofMPsegments 1
+% \ifnum\nofMPsegments<\scratchcounter
+% \repeat}
+%
+% an alternative is presented below: (no \def assignment)
+
+\def\doflushsomeMPpath
+ {\dodoflushsomeMPpath
+ \advance\nofMPsegments 1
+ \ifnum\nofMPsegments<\scratchcounter
+ \expandafter\doflushsomeMPpath
+ \fi}
+
+\def\flushsomeMPpath
+ {\scratchcounter\nofMPsegments
+ \nofMPsegments 1
+ \doflushsomeMPpath}
+
+\def\flushnormalMPpath{\let\dodoflushsomeMPpath\flushnormalMPsegment\flushsomeMPpath}
+
+%OLD \def\flushconcatMPpath{\let\dodoflushsomeMPpath\flushconcatMPsegment\flushsomeMPpath}
+
+%NEW pre-calculate 1/D so it needn't be repeated for each control point.
+
+\def\flushconcatMPpath
+ {\MPreciprocaldeterminant
+ \let\dodoflushsomeMPpath\flushconcatMPsegment\flushsomeMPpath}
+
+%D The transformation of the coordinates is handled by one of
+%D the macros Tanmoy posted to the \PDFTEX\ mailing list.
+%D I rewrote and optimized the original macro to suit the other
+%D macros in this module.
+%D
+%D \starttyping
+%D \doMPconcat {x position} \xresult {y position} \yresult
+%D \stoptyping
+%D
+%D By setting the auxiliary \DIMENSIONS\ \type{\dimen0} upto
+%D \type{\dimen10} only once per path, we save over 20\% run
+%D time. Some more speed was gained by removing some parameter
+%D passing. These macros can be optimized a bit more by using
+%D more constants. There is however not much need for further
+%D optimization because penshapes usually are round and
+%D therefore need no transformation. Nevertheless we move the
+%D factor to the outer level and use a bit different \type{pt}
+%D removal macro. Although the values represent base points,
+%D we converted them to pure points, simply because those can
+%D be converted back.
+
+%OLD \mathchardef\MPconcatfactor=256 % beware don't remove spaces before it
+
+%OLD \def\doMPreducedimen#1
+%OLD {\count0\MPconcatfactor
+%OLD \advance\dimen#1 \ifdim\dimen#1>0pt .5\else -.5\fi\count0
+%OLD \divide\dimen#1 \count0\relax}
+
+%OLD % too inaccurate (see old pragma logo)
+%OLD
+%OLD \def\doMPreducedimen#1
+%OLD {\count0=\MPconcatfactor
+%OLD \divide\dimen#1 \count0\relax}
+
+%OLD \def\doMPreducedimen#1
+%OLD {\advance\dimen#1 \ifdim\dimen#1>0pt .5\else -.5\fi\MPconcatfactor
+%OLD \divide\dimen#1 \MPconcatfactor}
+
+%D The transformation code is rewritten by Daniel H. Luecking who
+%D describes his patch as follows:
+%D
+%D We would like to divide 1 by $X$, but all divisions are integer so
+%D for accuracy we want to convert to large integers and make sure the
+%D integer quotient has as many significant digits as possible. Thus we
+%D need to replace $1/X$ with $M/N$ where $N$ is as large as possible
+%D and $M/N$ is as large as possible. Also for simplicity $M$ should be
+%D a power of 2. So we make $M = 2^{30}$ \footnote{$2^{31} - 1$ is the
+%D largest legal integer. Using it (and simply ignoring the inaccuracy
+%D caused by $-1$) turns out to be at least as accurate in all cases,
+%D and more accurate in some.} (largest legal power of 2) and adjust
+%D $X$ downward (if necessary) to the the range $1-2^{16}$. This gives
+%D at least 15 significant binary digits, (almost as accurate as
+%D \METAPOST\ for numbers near 1) or almost 5 significant figures
+%D (decimal).
+
+\newcount\MPscratchCnt
+\newdimen\MPscratchDim % will be assigned global
+
+\def\MPadjustdimen % sets \MPscratchDim and \MPscratchCnt
+ {\MPscratchCnt0
+ \doMPadjustdimen}
+
+\def\doMPadjustdimen
+ {\ifdim\MPscratchDim>1pt
+ \divide\MPscratchDim 2
+ \advance\MPscratchCnt 1
+ \expandafter\doMPadjustdimen
+ \fi}
+
+%OLD \def\doMPexpanddimen#1
+%OLD {\multiply\dimen#1 \MPconcatfactor\relax}
+
+%D DHL: When viewed as an integer, $1 \hbox{pt}=2^{16}$ so $2^{32}/X$
+%D is the right way to do $(1 \hbox{pt})/(X \hbox{pt})$ and get the
+%D answer in points. But we are limited to $2^{30}/X$. However, we
+%D actually do $[ 2^{30} / (X/2^K) ]*2^{2-K}$ where $K$ is the number
+%D of halvings it takes to bring $X$ below $1 \hbox{pt}$. If $K$ is 0
+%D or 1 we readjust by multiplying by 4 or 2, otherwise by halving
+%D $(K-2)$ times \type {\MPscratchCnt} holds the value of $K$ from
+%D \type {\MPadjustdimen}.
+
+\def\MPreadjustdimen % acts on \MPscratchDim and MPscratchCnt
+ {\ifcase\MPscratchCnt
+ \multiply\scratchdimen 4
+ \or
+ \multiply\scratchdimen 2
+ \else
+ \expandafter\doMPreadjustdimen
+ \fi}
+
+\def\doMPreadjustdimen
+ {\ifnum\MPscratchCnt>2
+ \divide\scratchdimen 2
+ \advance\MPscratchCnt -1
+ \expandafter\doMPreadjustdimen
+ \fi}
+
+\def\MPreciprocaldeterminant
+ {\scratchdimen\withoutpt\the\dimen0 \dimen6 % s_x*s_y
+ \advance\scratchdimen - \withoutpt\the\dimen2 \dimen4 % s_x*s_y - r_x*r_y
+ \ifdim\scratchdimen<0pt % we need a positive dimension
+ \scratchdimen-\scratchdimen % for \MPadjustdimen (?)
+ \doMPreciprocal
+ \scratchdimen-\scratchdimen
+ \else
+ \doMPreciprocal
+ \fi
+ \edef\MPreciprocal{\withoutpt\the\scratchdimen}}
+
+\newcount\MPnumerator \MPnumerator = 1073741824 % 2^{30}
+
+% todo: dimexpr
+
+\def\doMPreciprocal % replace \scratchdimen with its reciprocal
+ {\ifdim\scratchdimen=1pt \else
+ \MPadjustdimen
+ \scratchcounter\MPnumerator
+ \divide\scratchcounter\scratchdimen
+ \scratchdimen1\scratchcounter % 1 needed !
+ \MPreadjustdimen
+ \fi}
+
+%OLD \def\presetMPconcat
+%OLD {\dimen 0=\gMPs1pt \doMPreducedimen 0 % r_x
+%OLD \dimen 2=\gMPs2pt \doMPreducedimen 2 % s_x
+%OLD \dimen 4=\gMPs3pt \doMPreducedimen 4 % s_y
+%OLD \dimen 6=\gMPs4pt \doMPreducedimen 6 % r_y
+%OLD \dimen 8=\gMPs5pt \doMPreducedimen 8 % t_x
+%OLD \dimen10=\gMPs6pt \doMPreducedimen10 } % t_y
+%OLD
+%OLD \def\presetMPscale
+%OLD {\dimen 0=\gMPs1pt \doMPreducedimen 0
+%OLD \dimen 2=0pt
+%OLD \dimen 4=0pt
+%OLD \dimen 6=\gMPs2pt \doMPreducedimen 6
+%OLD \dimen 8=0pt
+%OLD \dimen10=0pt}
+
+\def\cleanupMPconcat
+ {\ignoreMPspecials
+ \docleanupMPargument1%
+ \docleanupMPargument6%
+ \keepMPspecials}
+
+\def\presetMPconcat
+ {\dimen 0=\gMPs1pt % s_x
+ \dimen 2=\gMPs2pt % r_x
+ \dimen 4=\gMPs3pt % r_y
+ \dimen 6=\gMPs4pt % s_y
+ \dimen 8=\gMPs5pt % t_x
+ \dimen10=\gMPs6pt} % t_y
+
+\def\presetMPscale
+ {\dimen 0=\gMPs1pt
+ \dimen 2=0pt
+ \dimen 4=0pt
+ \dimen 6=\gMPs2pt
+ \dimen 8=0pt
+ \dimen10=0pt}
+
+\def\noMPtranslate % use this one grouped
+ {\dimen 8=0pt % t_x
+ \dimen10=0pt} % t_y
+
+%D \starttyping
+%D \def\doMPconcat#1#2#3#4%
+%D {\dimen12=#1 pt \doMPreducedimen12 % p_x
+%D \dimen14=#3 pt \doMPreducedimen14 % p_y
+%D %
+%D \dimen16 \dimen 0
+%D \multiply \dimen16 \dimen 6
+%D \dimen20 \dimen 2
+%D \multiply \dimen20 \dimen 4
+%D \advance \dimen16 -\dimen20
+%D %
+%D \dimen18 \dimen12
+%D \multiply \dimen18 \dimen 6
+%D \dimen20 \dimen14
+%D \multiply \dimen20 \dimen 4
+%D \advance \dimen18 -\dimen20
+%D \dimen20 \dimen 4
+%D \multiply \dimen20 \dimen10
+%D \advance \dimen18 \dimen20
+%D \dimen20 \dimen 6
+%D \multiply \dimen20 \dimen 8
+%D \advance \dimen18 -\dimen20
+%D %
+%D \multiply \dimen12 -\dimen 2
+%D \multiply \dimen14 \dimen 0
+%D \advance \dimen12 \dimen14
+%D \dimen20 \dimen 2
+%D \multiply \dimen20 \dimen 8
+%D \advance \dimen12 \dimen20
+%D \dimen20 \dimen 0
+%D \multiply \dimen20 \dimen10
+%D \advance \dimen12 -\dimen20
+%D %
+%D \doMPreducedimen16
+%D \divide \dimen18 \dimen16 \doMPexpanddimen18
+%D \divide \dimen12 \dimen16 \doMPexpanddimen12
+%D %
+%D \edef#2{\withoutpt\the\dimen18}% % p_x^\prime
+%D \edef#4{\withoutpt\the\dimen12}} % p_y^\prime
+%D \stoptyping
+
+%D The following optimization resulted from some tests by
+%D and email exchanges with Sanjoy Mahajan.
+%D
+%D \starttyping
+%D \def\doMPconcat#1#2#3#4%
+%D {\dimen12=#1 pt \doMPreducedimen12 % p_x
+%D \dimen14=#3 pt \doMPreducedimen14 % p_y
+%D %
+%D \dimen16 \dimen 0
+%D \multiply \dimen16 \dimen 6
+%D \dimen20 \dimen 2
+%D \multiply \dimen20 \dimen 4
+%D \advance \dimen16 -\dimen20
+%D %
+%D \dimen18 \dimen12
+%D \multiply \dimen18 \dimen 6
+%D \dimen20 \dimen14
+%D \multiply \dimen20 \dimen 4
+%D \advance \dimen18 -\dimen20
+%D \dimen20 \dimen 4
+%D \multiply \dimen20 \dimen10
+%D \advance \dimen18 \dimen20
+%D \dimen20 \dimen 6
+%D \multiply \dimen20 \dimen 8
+%D \advance \dimen18 -\dimen20
+%D %
+%D \multiply \dimen12 -\dimen 2
+%D \multiply \dimen14 \dimen 0
+%D \advance \dimen12 \dimen14
+%D \dimen20 \dimen 2
+%D \multiply \dimen20 \dimen 8
+%D \advance \dimen12 \dimen20
+%D \dimen20 \dimen 0
+%D \multiply \dimen20 \dimen10
+%D \advance \dimen12 -\dimen20
+%D %
+%D %\ifdim\dimen16>1pt % oeps, can be < 1pt too
+%D \ifdim\dimen16=1pt \else
+%D \ifdim\dimen16>\MPconcatfactor pt
+%D \doMPreducedimen16
+%D \divide \dimen18 \dimen16 \doMPexpanddimen18
+%D \divide \dimen12 \dimen16 \doMPexpanddimen12
+%D \else
+%D \divide \dimen18 \dimen16 \doMPexpanddimen18 \doMPexpanddimen18
+%D \divide \dimen12 \dimen16 \doMPexpanddimen12 \doMPexpanddimen12
+%D \fi
+%D \fi
+%D %
+%D \edef#2{\withoutpt\the\dimen18}% % p_x^\prime
+%D \edef#4{\withoutpt\the\dimen12}} % p_y^\prime
+%D \stoptyping
+%D
+%D But, this one is still too inaccurate, so we now have:
+
+% \def\doMPconcat#1#2#3#4%
+% {\dimen12=#1pt % p_x
+% \dimen14=#3pt % p_y
+% %
+% % we should test for >-1024 too, but for the moment take the gamble
+% \chardef\MPfactor1\ifdim\dimen12<1024pt \ifdim\dimen14<1024pt 6\fi\fi
+% %
+% \multiply\dimen12 \MPfactor
+% \multiply\dimen14 \MPfactor
+% %
+% \doMPreducedimen12
+% \doMPreducedimen14
+% %
+% \dimen16 \dimen 0
+% \multiply \dimen16 \dimen 6
+% \dimen20 \dimen 2
+% \multiply \dimen20 \dimen 4
+% \advance \dimen16 -\dimen20
+% %
+% \dimen18 \dimen12
+% \multiply \dimen18 \dimen 6
+% \dimen20 \dimen14
+% \multiply \dimen20 \dimen 4
+% \advance \dimen18 -\dimen20
+% \dimen20 \dimen 4
+% \multiply \dimen20 \dimen10
+% \advance \dimen18 \dimen20
+% \dimen20 \dimen 6
+% \multiply \dimen20 \dimen 8
+% \advance \dimen18 -\dimen20
+% %
+% \multiply \dimen12 -\dimen 2
+% \multiply \dimen14 \dimen 0
+% \advance \dimen12 \dimen14
+% \dimen20 \dimen 2
+% \multiply \dimen20 \dimen 8
+% \advance \dimen12 \dimen20
+% \dimen20 \dimen 0
+% \multiply \dimen20 \dimen10
+% \advance \dimen12 -\dimen20
+% %
+% \ifdim\dimen16=1pt \else
+% \ifdim\dimen16>\MPconcatfactor pt
+% \doMPreducedimen16
+% \divide \dimen18 \dimen16 \doMPexpanddimen18
+% \divide \dimen12 \dimen16 \doMPexpanddimen12
+% \else
+% \divide \dimen18 \dimen16 \doMPexpanddimen18 \doMPexpanddimen18
+% \divide \dimen12 \dimen16 \doMPexpanddimen12 \doMPexpanddimen12
+% \fi
+% \fi
+% %
+% \divide\dimen18 \MPfactor
+% \divide\dimen12 \MPfactor
+% %
+% \edef#2{\withoutpt\the\dimen18}% % p_x^\prime
+% \edef#4{\withoutpt\the\dimen12}} % p_y^\prime
+
+%D DHL: Ideally, $r_x$, $r_y$, $s_x$, $s_y$ should be in macros, not
+%D dimensions (they are scalar quantities after all, not lengths). I
+%D suppose the authors decided to do calculations with integer
+%D arithmetic instead of using real factors because it's faster.
+%D However, the actual macros test slower, possibly because I've
+%D omitted three nested loops. In my test files, my approach is more
+%D accurate. It is also far simpler and overflow does not seem to be a
+%D significant concern. The scale factors written by Metapost are (?)
+%D always $<=1$ (it scales coordinates internally) and coordinates are
+%D always likely to be less than \type {\maxdimen}.
+%D
+%D If this should ever cause problems, the scale factors can be reduced.
+
+% \def\doMPconcat#1#2#3#4%
+% {\dimen12=#1pt % p_x % #1pt
+% \dimen14=#3pt % p_y % #3pt
+% \advance\dimen12 -\dimen8 % p_x - t_x
+% \advance\dimen14 -\dimen10 % p_y - t_y
+% \dimen18=\withoutpt\the\dimen6 \dimen12 % s_y(p_x - t_x)
+% \advance\dimen18 -\withoutpt\the\dimen4 \dimen14 % - r_y(p_y-t_y)
+% \dimen14=\withoutpt\the\dimen0 \dimen14 % s_x(p_y-t_y)
+% \advance\dimen14 -\withoutpt\the\dimen2 \dimen12 % - r_x(p_x-t_x)
+% % \MPscratchDim contains precomputed 1/D:
+% \dimen18=\withoutpt\the\MPscratchDim \dimen18
+% \dimen14=\withoutpt\the\MPscratchDim \dimen14
+% \edef#2{\withoutpt\the\dimen18}% % p_x^\prime
+% \edef#4{\withoutpt\the\dimen14}} % p_y^\prime
+
+\def\doMPconcat#1#2#3#4%
+ {\dimen12=#1pt % p_x % #1pt
+ \dimen14=#3pt % p_y % #3pt
+ \advance\dimen12 -\dimen8 % p_x - t_x
+ \advance\dimen14 -\dimen10 % p_y - t_y
+ \dimen18=\withoutpt\the\dimen6 \dimen12 % s_y(p_x - t_x)
+ \advance\dimen18 -\withoutpt\the\dimen4 \dimen14 % - r_y(p_y-t_y)
+ \dimen14=\withoutpt\the\dimen0 \dimen14 % s_x(p_y-t_y)
+ \advance\dimen14 -\withoutpt\the\dimen2 \dimen12 % - r_x(p_x-t_x)
+ % \MPreciprocal contains precomputed 1/D:
+ \dimen18=\MPreciprocal\dimen18
+ \dimen14=\MPreciprocal\dimen14
+ \edef#2{\withoutpt\the\dimen18}% % p_x^\prime
+ \edef#4{\withoutpt\the\dimen14}} % p_y^\prime
+
+% faster but not that often used
+%
+% \def\doMPconcat#1#2#3#4%
+% {\dimen12\dimexpr#1\points-\dimen 8\relax % p_x-t_x
+% \dimen14\dimexpr#3\points-\dimen10\relax % p_y-t_y
+% \dimen18\dimexpr\withoutpt\the\dimen6\dimen12-\withoutpt\the\dimen4\dimen14\relax % s_y(p_x-t_x)-r_y(p_y-t_y)
+% \dimen14\dimexpr\withoutpt\the\dimen0\dimen14-\withoutpt\the\dimen2\dimen12\relax % s_x(p_y-t_y)-r_x(p_x-t_x)
+% \edef#2{\withoutpt\the\dimexpr\MPreciprocal\dimen18\relax}% % p_x^\prime
+% \edef#4{\withoutpt\the\dimexpr\MPreciprocal\dimen14\relax}} % p_y^\prime
+
+%D One reason for Daniel to write this patch was that at small sizes
+%D the accuracy was less than optimal. Here is a test that demonstrates
+%D that his alternative is pretty good:
+%D
+%D \startlinecorrection
+%D \startMPcode
+%D for i = 5cm,1cm,5mm,1mm,.5mm,.1mm,.01mm :
+%D draw fullcircle scaled i withpen pencircle xscaled (i/10) yscaled (i/20) rotated 45 ;
+%D endfor ;
+%D \stopMPcode
+%D \stoplinecorrection
+
+%D The following explanation of the conversion process was
+%D posted to the \PDFTEX\ mailing list by Tanmoy. The original
+%D macro was part of a set of macro's that included sinus and
+%D cosinus calculations as well as scaling and translating. The
+%D \METAPOST\ to \PDF\ conversion however only needs
+%D transformation.
+
+%M \start \switchtobodyfont [ss]
+
+%D Given a point $(U_x, U_y)$ in user coordinates, the business
+%D of \POSTSCRIPT\ is to convert it to device space. Let us say
+%D that the device space coordinates are $(D_x, D_y)$. Then, in
+%D \POSTSCRIPT\ $(D_x, D_y)$ can be written in terms of
+%D $(U_x, U_y)$ in matrix notation, either as
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{D_x&D_y&1\cr} = \pmatrix{U_x&U_y&1\cr}
+%D \pmatrix{s_x&r_x&0\cr
+%D r_y&s_y&0\cr
+%D t_x&t_y&1\cr}
+%D \stopformula
+%D
+%D or
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{D_x\cr D_y\cr 1} = \pmatrix{s_x&r_y&t_x\cr
+%D r_x&s_y&t_y\cr
+%D 0 &0 &1 \cr}
+%D \pmatrix{U_x\cr
+%D U_y\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D both of which is a shorthand for the same set of equations:
+%D
+%D \placeformula
+%D \startformula
+%D D_x = s_x U_x + r_y U_y + t_x
+%D \stopformula
+%D
+%D \placeformula
+%D \startformula
+%D D_y = r_x U_x + s_y U_y + t_y
+%D \stopformula
+%D
+%D which define what is called an `affine transformation'.
+%D
+%D \POSTSCRIPT\ represents the `transformation matrix' as a
+%D six element matrix instead of a $3\times 3$ array because
+%D three of the elements are always~0, 0 and~1. Thus the above
+%D transformation is written in postscript as $[s_x\, r_x\,
+%D r_y\, s_y\, t_x\, t_y]$. However, when doing any
+%D calculations, it is useful to go back to the original
+%D matrix notation (whichever: I will use the second) and
+%D continue from there.
+%D
+%D As an example, if the current transformation matrix is
+%D $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$ and you say \typ{[a b
+%D c d e f] concat}, this means:
+%D
+%D \startnarrower
+%D Take the user space coordinates and transform them to an
+%D intermediate set of coordinates using array $[a\, b\, c\, d\,
+%D e\, f]$ as the transformation matrix.
+%D
+%D Take the intermediate set of coordinates and change them to
+%D device coordinates using array $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$
+%D as the transformation matrix.
+%D \stopnarrower
+%D
+%D Well, what is the net effect? In matrix notation, it is
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{I_x\cr I_y\cr 1\cr} = \pmatrix{a&c&e\cr
+%D b&d&f\cr
+%D 0&0&1\cr}
+%D \pmatrix{U_x\cr
+%D U_y\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{D_y\cr D_y\cr 1\cr} = \pmatrix{s_x&r_y&t_x\cr
+%D r_x&s_y&t_y\cr
+%D 0 &0 &1 \cr}
+%D \pmatrix{I_x\cr
+%D I_y\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D where $(I_x, I_y)$ is the intermediate coordinate.
+%D
+%D Now, the beauty of the matrix notation is that when there is
+%D a chain of such matrix equations, one can always compose
+%D them into one matrix equation using the standard matrix
+%D composition law. The composite matrix from two matrices can
+%D be derived very easily: the element in the $i$\high{th}
+%D horizontal row and $j$\high{th} vertical column is
+%D calculated by`multiplying' the $i$\high{th} row of the first
+%D matrix and the $j$\high{th} column of the second matrix (and
+%D summing over the elements). Thus, in the above:
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{D_x\cr D_y\cr 1} = \pmatrix{s_x^\prime&r_y^\prime&t_x^\prime\cr
+%D r_x^\prime&s_y^\prime&t_y^\prime\cr
+%D 0 &0 &0 \cr}
+%D \pmatrix{U_x\cr
+%D U_y\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D with
+%D
+%D \placeformula
+%D \startformula
+%D \eqalign
+%D {s_x^\prime & = s_x a + r_y b \cr
+%D r_x^\prime & = r_x a + s_y b \cr
+%D r_y^\prime & = s_x c + r_y d \cr
+%D s_y^\prime & = r_x c + s_y d \cr
+%D t_x^\prime & = s_x e + r_y f + t_x \cr
+%D t_y^\prime & = r_x e + s_y f + t_y \cr}
+%D \stopformula
+
+%D In fact, the same rule is true not only when one is going
+%D from user coordinates to device coordinates, but whenever
+%D one is composing two `transformations' together
+%D (transformations are `associative'). Note that the formula
+%D is not symmetric: you have to keep track of which
+%D transformation existed before (i.e.\ the equivalent of
+%D $[s_x\, r_x\, r_y\, s_y\, t_x\, t_y]$) and which was
+%D specified later (i.e.\ the equivalent of $[a\, b\, c\, d\,
+%D e\, f]$). Note also that the language can be rather
+%D confusing: the one specified later `acts earlier',
+%D converting the user space coordinates to intermediate
+%D coordinates, which are then acted upon by the pre||existing
+%D transformation. The important point is that order of
+%D transformation matrices cannot be flipped (transformations
+%D are not `commutative').
+%D
+%D Now what does it mean to move a transformation matrix
+%D before a drawing? What it means is that given a point
+%D $(P_x, P_y)$ we need a different set of coordinates
+%D $(P_x^\prime, P_y^\prime)$ such that if the transformation
+%D acts on $(P_x^\prime, P_y^\prime)$, they produce $(P_x,
+%D P_y)$. That is we need to solve the set of equations:
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{P_x\cr P_y\cr 1\cr} = \pmatrix{s_x&r_y&t_x\cr
+%D r_x&s_y&t_y\cr
+%D 0 &0 &1 \cr}
+%D \pmatrix{P_x^\prime\cr
+%D P_y^\prime\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D Again matrix notation comes in handy (i.e. someone has
+%D already solved the problem for us): we need the inverse
+%D transformation matrix. The inverse transformation matrix can
+%D be calculated very easily:
+%D
+%D \placeformula
+%D \startformula
+%D \pmatrix{P_x^\prime\cr P_y^\prime\cr 1\cr} =
+%D \pmatrix{s_x^\prime&r_y^\prime&t_x^\prime\cr
+%D r_x^\prime&s_y^\prime&t_y^\prime\cr
+%D 0 &0 &1 \cr}
+%D \pmatrix{P_x\cr
+%D P_y\cr
+%D 1 \cr}
+%D \stopformula
+%D
+%D where, the inverse transformation matrix is given by
+%D
+%D \placeformula
+%D \startformula
+%D \eqalign
+%D {D & = s_x s_y - r_x r_y \cr
+%D s_x^\prime & = s_y / D \cr
+%D s_y^\prime & = s_x / D \cr
+%D r_x^\prime & = - r_x / D \cr
+%D r_y^\prime & = - r_y / D \cr
+%D t_x^\prime & = ( - s_y t_x + r_y t_y ) / D \cr
+%D t_y^\prime & = ( r_x t_x - s_x t_y ) / D \cr}
+%D \stopformula
+%D
+%D And you can see that when expanded out, this does
+%D give the formulas:
+%D
+%D \placeformula
+%D \startformula
+%D P_x^\prime = { { s_y(p_x-t_x) + r_y(t_y-p_y) } \over
+%D { s_x s_y-r_x r_y } }
+%D \stopformula
+%D
+%D \placeformula
+%D \startformula
+%D P_y^\prime = { { s_x(p_y-t_y) + r_x(t_x-p_x) } \over
+%D { s_x*s_y-r_x*r_y } }
+%D \stopformula
+%D
+%D The code works by representing a real number by converting
+%D it to a dimension to be put into a \DIMENSION\ register: 2.3 would
+%D be represented as 2.3pt for example. In this scheme,
+%D multiplying two numbers involves multiplying the \DIMENSION\
+%D registers and dividing by 65536. Accuracy demands that the
+%D division be done as late as possible, but overflow
+%D considerations need early division.
+%D
+%D Division involves dividing the two \DIMENSION\ registers and
+%D multiplying the result by 65536. Again, accuracy would
+%D demand that the numerator be multiplied (and|/|or the
+%D denominator divided) early: but that can lead to overflow
+%D which needs to be avoided.
+%D
+%D If nothing is known about the numbers to start with (in
+%D concat), I have chosen to divide the 65536 as a 256 in each
+%D operand. However, in the series calculating the sine and
+%D cosine, I know that the terms are small (because I never
+%D have an angle greater than 45 degrees), so I chose to
+%D apportion the factor in a different way.
+
+%M \stop
+
+%D The path is output using the values saved on the stack. If
+%D needed, all coordinates are recalculated.
+
+\def\finishMPpath
+ {\PDFcode{\ifcase\finiMPpath W n\or S\or f\or B\fi}}
+
+\def\processMPpath
+ {\checkMPpath
+ \ifcase\nofMPsegments\else
+ \flushMPpath
+ \closeMPpath
+ \finishMPpath
+ \fi
+ \let\handleMPsequence\dohandleMPsequence
+ \resetMPstack
+ \nofMPsegments0
+ \handleMPsequence}
+
+%D The following \METAPOST\ code is quite valid but, when
+%D processed and converted to \PDF, will make a file
+%D unprintable on a Hewlett Packard printer (from Acrobat
+%D $v<=5$). Who is to blame, the driver of the OS layer in
+%D between, is hard to determine, so we add an additional
+%D check.
+%D
+%D \starttyping
+%D clip currentpicture to origin -- cycle ;
+%D setbounds currentpicture to fullsquare scaled 5cm ;
+%D \stoptyping
+
+\def\checkMPpath
+ {\ifcase\finiMPpath
+ \ifnum\nofMPsegments<3 % n is one ahead
+ \message{omitting zero clip path}%
+ \nofMPsegments0
+ \fi
+ \fi}
+
+%D In \PDF\ the \type{cm} operator must precede the path
+%D specification. We therefore can output the \type{cm} at
+%D the moment we encounter it.
+
+\def\handleMPpathconcat
+ {\presetMPconcat
+ \PDFcode{\gMPs1 \gMPs2 \gMPs3 \gMPs4 \gMPs5 \gMPs6 cm}%
+ \resetMPstack}
+
+\def\handleMPpathscale
+ {\presetMPscale
+ \PDFcode{\gMPs1 0 0 \gMPs2 0 0 cm}%
+ \resetMPstack}
+
+%D This macro interprets the path and saves it as compact as
+%D possible.
+
+\def\dohandleMPpath#1%
+ {\ifcase\lccode`#1\relax
+ \expandafter\dohandleMPpathA
+ \else
+ \expandafter\dohandleMPpathB
+ \fi#1}
+
+%\def\dohandleMPpathA#1 %
+% {\setMPargument{#1}%
+% \handleMPsequence}
+
+\let\dohandleMPpathA\setMPsequence
+
+% \def\dohandleMPpathB#1 %
+% {\def\somestring{#1}%
+% \ifx\somestring\PSlineto
+% \setMPkeyword0
+% \else\ifx\somestring\PScurveto
+% \setMPkeyword1
+% \else\ifx\somestring\PSrlineto
+% \setMPkeyword2
+% \else\ifx\somestring\PSmoveto
+% \setMPkeyword3
+% \else\ifx\somestring\PSclip
+% % \chardef\finiMPpath0 % already
+% \let\handleMPsequence\processMPpath
+% \else\ifx\somestring\PSgsave
+% \chardef\finiMPpath3
+% \else\ifx\somestring\PSgrestore
+% \else\ifx\somestring\PSfill
+% \ifcase\finiMPpath
+% \chardef\finiMPpath2
+% \let\handleMPsequence\processMPpath
+% \fi
+% \else\ifx\somestring\PSstroke
+% \ifcase\finiMPpath
+% \chardef\finiMPpath1
+% \fi
+% \let\handleMPsequence\processMPpath
+% \else\ifx\somestring\PSclosepath
+% \def\closeMPpath{\PDFcode{h}}%
+% \else\ifx\somestring\PSconcat
+% \cleanupMPconcat
+% \let\flushMPpath\flushconcatMPpath
+% \handleMPpathconcat
+% \else\ifx\somestring\PSscale
+% \let\flushMPpath\flushconcatMPpath
+% \handleMPpathscale
+% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+% \handleMPsequence}
+
+\def\installMPSkeywordP#1#2%
+ {\expandafter\def\csname\@@MP:P:#1\endcsname{#2}}
+
+\def\installMPSshortcutP#1#2% todo: \let
+ {\expandafter\let\csname\@@MP:P:#1\expandafter\endcsname\csname\@@MP:P:#2\endcsname}
+
+\def\dohandleMPpathB#1 %
+ {\def\somestring{#1}%
+ \ifcsname\@@MP:P:\somestring\endcsname
+ \csname\@@MP:P:\somestring\expandafter\endcsname
+ \fi
+ \handleMPsequence}
+
+\ifx\eTeXversion\undefined
+ \def\dohandleMPpathB#1 %
+ {\def\somestring{#1}%
+ \csname\@@MP:P:\somestring\endcsname
+ \handleMPsequence}
+\fi
+
+\installMPSkeywordP \PSlineto
+ {\setMPkeyword0 }
+\installMPSkeywordP \PScurveto
+ {\setMPkeyword1 }
+\installMPSkeywordP \PSrlineto
+ {\setMPkeyword2 }
+\installMPSkeywordP \PSmoveto
+ {\edef\lastMPmoveX{\gMPs1}%
+ \edef\lastMPmoveY{\gMPs2}%
+ \resetMPstack
+ \setMPkeyword3 }
+\installMPSkeywordP \PSclip
+ {% \chardef\finiMPpath\zerocount % already
+ \let\handleMPsequence\processMPpath}
+\installMPSkeywordP \PSgsave
+ {\chardef\finiMPpath3 }
+\installMPSkeywordP \PSgrestore
+ {}
+\installMPSkeywordP \PSfill
+ {\ifcase\finiMPpath
+ \chardef\finiMPpath2
+ \let\handleMPsequence\processMPpath
+ \fi}
+\installMPSkeywordP \PSstroke
+ {\ifcase\finiMPpath
+ \chardef\finiMPpath1
+ \fi
+ \let\handleMPsequence\processMPpath}
+\installMPSkeywordP \PSclosepath
+ {\def\closeMPpath{\PDFcode{h}}}
+\installMPSkeywordP \PSconcat
+ {\cleanupMPconcat
+ \let\flushMPpath\flushconcatMPpath
+ \handleMPpathconcat}
+\installMPSkeywordP \PSscale
+ {\let\flushMPpath\flushconcatMPpath
+ \handleMPpathscale}
+
+\installMPSshortcutP {l} \PSlineto
+\installMPSshortcutP {r} \PSrlineto
+\installMPSshortcutP {m} \PSmoveto
+\installMPSshortcutP {c} \PScurveto
+
+\installMPSshortcutP {q} \PSgsave
+\installMPSshortcutP {Q} \PSgrestore
+\installMPSshortcutP {S} \PSstroke
+\installMPSshortcutP {F} \PSfill
+\installMPSshortcutP {B} \PSgsave
+\installMPSshortcutP {W} \PSclip
+\installMPSshortcutP {p} \PSclosepath
+
+\installMPSshortcutP {s} \PSscale
+\installMPSshortcutP {t} \PSconcat
+
+%D The main conversion command is:
+%D
+%D \starttyping
+%D \convertMPtoPDF {filename} {x scale} {y scale}
+%D \stoptyping
+%D
+%D The dimensions are derived from the bounding box. So we
+%D only have to say:
+%D
+%D \starttyping
+%D \convertMPtoPDF{mp-pra-1.eps}{1}{1}
+%D \convertMPtoPDF{mp-pra-1.eps}{.5}{.5}
+%D \stoptyping
+
+%D \macros
+%D {makeMPintoPDFobject,lastPDFMPobject}
+%D
+%D For experts there are a few more options. When attributes
+%D are to be added, the code must be embedded in an object
+%D accompanied with the appropriate directives. One can
+%D influence this process with \type {\makeMPintoPDFobject}.
+%D
+%D This option defaults to~0, because \CONTEXT\ takes care
+%D of objects at another level, which saves some bytes.
+%D
+%D \starttabulate[|l|l|p|]
+%D \NC 0 \NC never \NC don't use an object \NC\NR
+%D \NC 1 \NC always \NC always use an object \NC\NR
+%D \NC 2 \NC optional \NC use object when needed \NC\NR
+%D \stoptabulate
+%D
+%D The last object number used is avaliable in the macro
+%D \type {\lastPDFMPobject}.
+
+\ifx\makeMPintoPDFobject\undefined \newcount\makeMPintoPDFobject \fi
+
+\def\lastPDFMPobject{0}
+
+%D The additional code needed can be made available in the
+%D (global) macro \type {\currentPDFresources}.
+
+\let\currentPDFresources\empty
+
+\newtoks\everyMPtoPDFconversion
+
+\def\convertMPtoPDF % #1#2#3%
+ {\bgroup
+ \defineMPtoPDFfallbacks
+ \ifx\pdfdecimaldigits\undefined\else \pdfdecimaldigits=5 \fi % new
+ \setbox\scratchbox\vbox\bgroup
+ \xdef\MPheight{0pt}%
+ \xdef\MPwidth {0pt}%
+ \forgetall
+ \offinterlineskip
+ \startMPresources
+ \doprocessMPtoPDFfile} %
+
+%D The next one is kind of private and probably will become obsolete):
+
+\def\processMPtoPDFfile % file xscale yscale
+ {\bgroup
+ \let\finishMPgraphic\egroup
+ \doprocessMPtoPDFfile}
+
+\let\setMPextensions\relax
+
+\def\doprocessMPtoPDFfile#1#2#3% file xscale yscale
+ {\setMPspecials
+ \setMPextensions
+ \the\everyMPtoPDFconversion
+ \catcode`\^^M=\@@endofline
+ \startMPscanning
+ \let\do\empty
+ \xdef\MPxscale{#2}%
+ \xdef\MPyscale{#3}%
+ \xdef\MPxoffset{0}%
+ \xdef\MPyoffset{0}%
+ \xdef\MPyshift{0pt}%
+ \donefalse
+ \let\handleMPsequence\dohandleMPsequence
+ \message{[MP to PDF]}% was: [MP to PDF #1] but there is a (#1) anyway
+ \input#1\relax}
+
+\def\PDFMPformoffset
+ {\ifx\objectoffset\undefined0pt\else\objectoffset\fi}
+
+\chardef\blackoutMPgraphic0 % in ConTeXt 1
+
+\def\finishMPgraphic
+ {\stopMPresources
+ \egroup
+ \setbox\scratchbox\vbox
+ {\forgetall
+ \hbox
+ {\PDFcode{q \MPxscale\space 0 0 \MPyscale\space \MPxoffset\space \MPyoffset\space cm}%
+ \ifcase\blackoutMPgraphic\or\PDFcode{0 g 0 G}\fi
+ \lower\MPyshift\box\scratchbox % unscaled shift
+ \PDFcode{Q}}}%
+ \ht\scratchbox\MPheight
+ \wd\scratchbox\MPwidth
+ \dp\scratchbox0pt\relax
+ \dopackageMPgraphic\scratchbox
+ \egroup
+ \endinput}
+
+%D Alternative for \PDFTEX. We cannot come up with something more contexy
+%D because this module is also used in \LATEX.
+
+\def\dopackageMPgraphic#1% #1 = boxregister
+ {%\ifx\pdfxform\undefined
+ % \makeMPintoPDFobject0 % no pdftex at all
+ %\else\ifx\pdftexversion\undefined
+ % \makeMPintoPDFobject0 % no pdftex at all
+ %\else\ifnum\pdftexversion<14
+ % \makeMPintoPDFobject0 % no resource support
+ %\else
+ % % keep the default value
+ %\fi\fi\fi
+ \ifcase\makeMPintoPDFobject\or\or\ifx\currentPDFresources\empty\else
+ % an existing value of 2 signals object support (set elsewhere)
+ \makeMPintoPDFobject1
+ \fi\fi
+ \ifcase\makeMPintoPDFobject
+ \box#1%
+ \or
+ \scratchdimen\PDFMPformoffset\relax
+ \ifdim\scratchdimen>0pt % compensate for error
+ \setbox#1\vbox spread 2\scratchdimen
+ {\forgetall\vss\hbox spread 2\scratchdimen{\hss\box#1\hss}\vss}%
+ \fi
+ \setMPPDFobject{\currentPDFresources}{#1}%
+ \ifdim\scratchdimen>0pt % compensate for error
+ \vbox to \MPheight
+ {\forgetall\vss\hbox to \MPwidth{\hss\getMPPDFobject\hss}\vss}%
+ \else
+ \getMPPDFobject
+ \fi
+ \global\let\currentPDFresources\empty
+ \else
+ \box#1%
+ \fi}
+
+\def\setMPPDFobject#1#2% resources boxnumber
+ {\ifx\pdfxform\undefined
+ \def\getMPPDFobject{\box#2}%
+ \else\ifx\pdftexversion\undefined
+ \def\getMPPDFobject{\box#2}%
+ \else\ifnum\pdftexversion<14
+ \def\getMPPDFobject{\box#2}%
+ \else
+ \ifx\everyPDFxform\undefined\else\the\everyPDFxform\fi
+ \immediate\pdfxform resources{#1}#2%
+ \edef\getMPPDFobject{\noexpand\pdfrefxform\the\pdflastxform}%
+ \fi\fi\fi}
+
+\let\getMPPDFobject\relax
+
+%D \macros
+%D {deleteMPgraphic,
+%D startMPresources,
+%D stopMPresources}
+%D
+%D Here are a few hooks for \CONTEXT\ specific things.
+
+\ifx\deleteMPgraphic\undefined
+ \def\deleteMPgraphic#1{}
+\fi
+
+\ifx\startMPresources\undefined
+ \let\startMPresources\relax
+ \let\stopMPresources\relax
+\fi
+
+%D \macros
+%D {twodigitMPoutput}
+%D
+%D We can limit the precision to two digits after the comma
+%D by saying:
+%D
+%D \starttyping
+%D \twodigitMPoutput
+%D \stoptyping
+%D
+%D This option only works in \CONTEXT\ combined with \ETEX.
+
+\def\twodigitMPoutput
+ {\let\!MP \twodigitrounding
+ \def\!MPgMPs##1{\twodigitrounding{\gMPs##1}}%
+ \def\!MPgMPa##1{\twodigitrounding{\gMPa##1}}}
+
+\let\!MP \empty
+\let\!MPgMPa\gMPa
+\let\!MPgMPs\gMPs
+
+%D This kind of conversion is possible because \METAPOST\
+%D does all the calculations. Converting other \POSTSCRIPT\
+%D files would drive both me and \TEX\ crazy.
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-pdf.tex b/Master/texmf-dist/tex/context/base/mkii/supp-pdf.tex
index 2ae87806782..2ae87806782 100644
--- a/Master/texmf-dist/tex/context/base/supp-pdf.tex
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-pdf.tex
diff --git a/Master/texmf-dist/tex/context/base/supp-ran.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-ran.mkii
index 0a39026bfd3..0a39026bfd3 100644
--- a/Master/texmf-dist/tex/context/base/supp-ran.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-ran.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-spe.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-spe.mkii
index 4625695c7a2..4625695c7a2 100644
--- a/Master/texmf-dist/tex/context/base/supp-spe.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-spe.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-tpi.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-tpi.mkii
index dc230563b71..2c3e282e390 100644
--- a/Master/texmf-dist/tex/context/base/supp-tpi.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-tpi.mkii
@@ -20,7 +20,7 @@
%D implemented in \type{supp-mps}.
\ifnum\texengine=\luatexengine
- \endinput
+ \expandafter \endinput
\fi
\ifx\undefined\writestatus \input supp-mis.mkii \relax \fi
diff --git a/Master/texmf-dist/tex/context/base/supp-vis.mkii b/Master/texmf-dist/tex/context/base/mkii/supp-vis.mkii
index 22a745b1308..22a745b1308 100644
--- a/Master/texmf-dist/tex/context/base/supp-vis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/supp-vis.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-cow.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-cow.mkii
index 933a00c45e7..933a00c45e7 100644
--- a/Master/texmf-dist/tex/context/base/symb-cow.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-cow.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-eur.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-eur.mkii
index 67023ec91c0..67023ec91c0 100644
--- a/Master/texmf-dist/tex/context/base/symb-eur.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-eur.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-glm.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-glm.mkii
index ff94bfe7fc7..ff94bfe7fc7 100644
--- a/Master/texmf-dist/tex/context/base/symb-glm.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-glm.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-ini.mkii
index 3154c8a04c4..3154c8a04c4 100644
--- a/Master/texmf-dist/tex/context/base/symb-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-jmn.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-jmn.mkii
index aea2dce7b0b..aea2dce7b0b 100644
--- a/Master/texmf-dist/tex/context/base/symb-jmn.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-jmn.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-mis.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-mis.mkii
index dacb816b411..dacb816b411 100644
--- a/Master/texmf-dist/tex/context/base/symb-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-mvs.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-mvs.mkii
index aae4e92d66c..aae4e92d66c 100644
--- a/Master/texmf-dist/tex/context/base/symb-mvs.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-mvs.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-nav.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-nav.mkii
index c9d1aae1d73..c9d1aae1d73 100644
--- a/Master/texmf-dist/tex/context/base/symb-nav.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-nav.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-run.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-run.mkii
index 8b8c62d8b55..8b8c62d8b55 100644
--- a/Master/texmf-dist/tex/context/base/symb-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-uni.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-uni.mkii
index f5435810f15..f5435810f15 100644
--- a/Master/texmf-dist/tex/context/base/symb-uni.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-uni.mkii
diff --git a/Master/texmf-dist/tex/context/base/symb-was.mkii b/Master/texmf-dist/tex/context/base/mkii/symb-was.mkii
index e131cf04dae..e131cf04dae 100644
--- a/Master/texmf-dist/tex/context/base/symb-was.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/symb-was.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-con.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-con.mkii
index c1ad788cfe5..c1ad788cfe5 100644
--- a/Master/texmf-dist/tex/context/base/syst-con.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-con.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-ext.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-ext.mkii
index 39f4145f278..39f4145f278 100644
--- a/Master/texmf-dist/tex/context/base/syst-ext.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-ext.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-fnt.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-fnt.mkii
index 5669475a634..5669475a634 100644
--- a/Master/texmf-dist/tex/context/base/syst-fnt.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-fnt.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-gen.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-gen.mkii
index 8b71b77d5fc..8b71b77d5fc 100644
--- a/Master/texmf-dist/tex/context/base/syst-gen.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-gen.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-ini.mkii
index 9988efc10ca..7ae5f6c814f 100644
--- a/Master/texmf-dist/tex/context/base/syst-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-ini.mkii
@@ -90,10 +90,9 @@
\expandafter\end
\fi
-% todo: pdfsave pdfrestore pdfcolor... don't initialize them
-
\ifnum\texengine=\luatexengine
\directlua 0 { % this info is stored in the format
+ % kpse.set_program_name("context")
lua.name[0] = "main ctx instance"
local extraprimitives = tex.extraprimitives
local enableprimitives = tex.enableprimitives
@@ -119,6 +118,141 @@
}
\fi
+\ifdefined\pdfextension
+
+ % promoted
+
+ \let\pdfpagewidth \pagewidth
+ \let\pdfpageheight \pageheight
+
+ \let\pdfadjustspacing \adjustspacing
+ \let\pdfprotrudechars \protrudechars
+ \let\pdfnoligatures \ignoreligaturesinfont
+ \let\pdffontexpand \expandglyphsinfont
+ \let\pdfcopyfont \copyfont
+
+ \let\pdfxform \saveboxresource
+ \let\pdflastxform \lastsavedboxresourceindex
+ \let\pdfrefxform \useboxresource
+
+ \let\pdfximage \saveimageresource
+ \let\pdflastximage \lastsavedimageresourceindex
+ \let\pdflastximagepages\lastsavedimageresourcepages
+ \let\pdfrefximage \useimageresource
+
+ \let\pdfsavepos \savepos
+ \let\pdflastxpos \lastxpos
+ \let\pdflastypos \lastypos
+
+ % \let\pdftexversion \luatexversion
+ % \let\pdftexrevision \luatexrevision
+ \let\pdftexbanner \luatexbanner
+
+ \let\pdfoutput \outputmode
+ \let\pdfdraftmode \draftmode
+
+ \let\pdfpxdimen \pxdimen
+
+ \let\pdfinsertht \insertht
+
+ % also promoted
+
+ % \let\pdfnormaldeviate \normaldeviate
+ % \let\pdfuniformdeviate \uniformdeviate
+ % \let\pdfsetrandomseed \setrandomseed
+ % \let\pdfrandomseed \randomseed
+ %
+ % \let\pdfprimitive \primitive
+ %
+ % \let\expandafter\csname ifpdfabsnum\expandafter\endcsname\csname ifabsnum\endcsname
+ % \let\expandafter\csname ifpdfabsdim\expandafter\endcsname\csname ifabsdim\endcsname
+ % \let\expandafter\csname ifpdfprimitive\expandafter\endcsname\csname ifprimitive\endcsname
+
+ % removed (also some others but already long ago)
+
+ \newdimen\pdfeachlineheight
+ \newdimen\pdfeachlinedepth
+ \newdimen\pdflastlinedepth
+ \newdimen\pdffirstlineheight
+ \newdimen\pdfignoreddimen
+
+ % grouped
+
+ \protected\def\pdfliteral {\pdfextension literal}
+ \protected\def\pdfcolorstack {\pdfextension colorstack}
+ \protected\def\pdfsetmatrix {\pdfextension setmatrix}
+ \protected\def\pdfsave {\pdfextension save\relax}
+ \protected\def\pdfrestore {\pdfextension restore\relax}
+ \protected\def\pdfobj {\pdfextension obj }
+ \protected\def\pdfrefobj {\pdfextension refobj }
+ \protected\def\pdfannot {\pdfextension annot }
+ \protected\def\pdfstartlink {\pdfextension startlink }
+ \protected\def\pdfendlink {\pdfextension endlink\relax}
+ \protected\def\pdfoutline {\pdfextension outline }
+ \protected\def\pdfdest {\pdfextension dest }
+ \protected\def\pdfthread {\pdfextension thread }
+ \protected\def\pdfstartthread {\pdfextension startthread }
+ \protected\def\pdfendthread {\pdfextension endthread\relax}
+ \protected\def\pdfinfo {\pdfextension info }
+ \protected\def\pdfcatalog {\pdfextension catalog }
+ \protected\def\pdfnames {\pdfextension names }
+ \protected\def\pdfincludechars {\pdfextension includechars }
+ \protected\def\pdffontattr {\pdfextension fontattr }
+ \protected\def\pdfmapfile {\pdfextension mapfile }
+ \protected\def\pdfmapline {\pdfextension mapline }
+ \protected\def\pdftrailer {\pdfextension trailer }
+ \protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+
+ % grouped
+
+ \def\pdftexversion {\numexpr\pdffeedback version}
+ \def\pdftexrevision {\pdffeedback revision}
+ \def\pdflastlink {\numexpr\pdffeedback lastlink}
+ \def\pdfretval {\numexpr\pdffeedback retval}
+ \def\pdflastobj {\numexpr\pdffeedback lastobj}
+ \def\pdflastannot {\numexpr\pdffeedback lastannot}
+ \def\pdfxformname {\numexpr\pdffeedback xformname}
+ \def\pdfcreationdate {\pdffeedback creationdate}
+ \def\pdffontname {\numexpr\pdffeedback fontname}
+ \def\pdffontobjnum {\numexpr\pdffeedback fontobjnum}
+ \def\pdffontsize {\dimexpr\pdffeedback fontsize}
+ \def\pdfpageref {\numexpr\pdffeedback pageref}
+ \def\pdfcolorstackinit {\pdffeedback colorstackinit}
+
+ % used when defined
+
+ \edef\pdfcompresslevel {\pdfvariable compresslevel} \pdfcompresslevel 9
+ \edef\pdfobjcompresslevel {\pdfvariable objcompresslevel} \pdfobjcompresslevel 1
+ \edef\pdfdecimaldigits {\pdfvariable decimaldigits} \pdfdecimaldigits 3
+ \edef\pdfgamma {\pdfvariable gamma} \pdfgamma 1000
+ \edef\pdfimageresolution {\pdfvariable imageresolution} \pdfimageresolution 71
+ \edef\pdfimageapplygamma {\pdfvariable imageapplygamma} \pdfimageapplygamma 0
+ \edef\pdfimagegamma {\pdfvariable imagegamma} \pdfimagegamma 2200
+ \edef\pdfimagehicolor {\pdfvariable imagehicolor} \pdfimagehicolor 1
+ \edef\pdfimageaddfilename {\pdfvariable imageaddfilename} \pdfimageaddfilename 1
+ \edef\pdfpkresolution {\pdfvariable pkresolution} \pdfpkresolution 72
+ \edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts} \pdfinclusioncopyfonts 0
+ \edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel} \pdfinclusionerrorlevel 0
+ \edef\pdfgentounicode {\pdfvariable gentounicode} \pdfgentounicode 0
+ \edef\pdfpagebox {\pdfvariable pagebox} \pdfpagebox 0
+ \edef\pdfminorversion {\pdfvariable minorversion} \pdfminorversion 4
+ \edef\pdfuniqueresname {\pdfvariable uniqueresname} \pdfuniqueresname 0
+
+ \edef\pdfhorigin {\pdfvariable horigin} \pdfhorigin 1in
+ \edef\pdfvorigin {\pdfvariable vorigin} \pdfvorigin 1in
+ \edef\pdflinkmargin {\pdfvariable linkmargin} \pdflinkmargin 0pt
+ \edef\pdfdestmargin {\pdfvariable destmargin} \pdfdestmargin 0pt
+ \edef\pdfthreadmargin {\pdfvariable threadmargin} \pdfthreadmargin 0pt
+
+ \edef\pdfpagesattr {\pdfvariable pagesattr}
+ \edef\pdfpageattr {\pdfvariable pageattr}
+ \edef\pdfpageresources {\pdfvariable pageresources}
+ \edef\pdfxformattr {\pdfvariable xformattr}
+ \edef\pdfxformresources {\pdfvariable xformresources}
+ \edef\pdfpkmode {\pdfvariable pkmode}
+
+\fi
+
%D \ETEX\ has a not so handy way of telling you the version number,
%D i.e. the revision number has a period in it:
@@ -278,6 +412,12 @@
\fi\fi
#1#2#3#4#5}
+%D Goodie:
+
+\ifnum\texengine=\luatexengine
+ \input luatex-pdf \relax
+\fi
+
%D Since the number of chars exceed 256 now, we can use \type
%D {\chardef} instead of the more limited \type {\mathchardef}.
diff --git a/Master/texmf-dist/tex/context/base/syst-new.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-new.mkii
index 34b535b901e..34b535b901e 100644
--- a/Master/texmf-dist/tex/context/base/syst-new.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-new.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-pln.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-pln.mkii
index 1032b40b595..1032b40b595 100644
--- a/Master/texmf-dist/tex/context/base/syst-pln.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-pln.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-rtp.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkii
index fc0f503b062..fc0f503b062 100644
--- a/Master/texmf-dist/tex/context/base/syst-rtp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkii
diff --git a/Master/texmf-dist/tex/context/base/syst-rtp.mkiv b/Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkiv
index 82c0778b43f..82c0778b43f 100644
--- a/Master/texmf-dist/tex/context/base/syst-rtp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkiv
diff --git a/Master/texmf-dist/tex/context/base/syst-str.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-str.mkii
index aacb70ec742..aacb70ec742 100644
--- a/Master/texmf-dist/tex/context/base/syst-str.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-str.mkii
diff --git a/Master/texmf-dist/tex/context/base/mkii/syst-tex.mkii b/Master/texmf-dist/tex/context/base/mkii/syst-tex.mkii
new file mode 100644
index 00000000000..fee2b51b228
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkii/syst-tex.mkii
@@ -0,0 +1,314 @@
+%D \module
+%D [ file=syst-tex,
+%D version=1999.03.17, % an oldie: 1995.10.10
+%D title=\CONTEXT\ System Macros,
+%D subtitle=Efficient \PLAIN\ \TEX\ loading,
+%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 used by mptopdf.
+
+%D We've build \CONTEXT\ on top of \PLAIN\ \TEX. Because we
+%D want to make the format file as independant as possible of
+%D machine dependant font encodings, we have to bypass the
+%D loading of fonts.
+%D
+%D Let's start at the beginning. Because \PLAIN\ is not yet
+%D loaded we have to define some \CATCODES\ ourselves.
+
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\#=6 % hash mark is macro parameter character
+\catcode`\^=7 % circumflex is for superscripts
+
+%D To prevent all kind of end||of||file problems, for the
+%D moment we simply ignore the Control~Z token.
+
+\catcode`\^^Z=9
+
+%D We are going to report to the user what we are skipping.
+
+\def\skipmessage#1{\immediate\write16{skipping #1 in plain}}
+
+%D We want to be able to use the \type{\newsomething}
+%D declarations not only on the \type{\outer} level. This can
+%D be done by redefining \type{\outer} so we have to save its
+%D original meaning.
+
+\let\normalouter = \outer
+\let\outer = \relax
+
+%D We also want to postpone the loading of hyphenation patters,
+%D so we redefine and therefore save \type{\input}.
+
+\let\normalinput = \input
+\def\input #1 {\skipmessage{\string\input}}
+
+%D Finaly are going to we redefine some font specification
+%D commands and that's why we save them too. The redefinitions
+%D are straightforward because the macros have to do nothing
+%D but skipping.
+
+\let\normalskewchar = \skewchar
+\def\skewchar #1=#2 {\skipmessage{\string\skewchar}}
+
+\let\normaltextfont = \textfont
+\let\normalscriptfont = \scriptfont
+\let\normalscriptscriptfont = \scriptscriptfont
+
+\def\textfont #1=#2{\skipmessage{\string\textfont}}
+\def\scriptfont #1=#2{\skipmessage{\string\scriptfont}}
+\def\scriptscriptfont #1=#2{\skipmessage{\string\scriptscriptfont}}
+
+%D The redefinition of \type{\font} is a bit more complicated,
+%D because in version 3.14159 a scaled specification was
+%D introduced.
+
+\let\normalfont = \font
+
+\def\skipscaled scaled #1 {}
+
+\long\def\font#1=#2 #3%
+ {\ifx#3s%
+ \skipmessage{scaled \string\font}%
+ \let\next\skipscaled
+ \else
+ \skipmessage{\string\font}%
+ \let\next\relax
+ \fi
+ \next#3}
+
+% or:
+%
+% \long\def\font#1=#2 #3%
+% {\ifx#3s%
+% \skipmessage{scaled \string\font}%
+% \expandafter\skipscaled
+% \else
+% \skipmessage{\string\font}%
+% \fi
+% #3}
+
+%D Relaxing some font switching macros is needed because we
+%D don't want any error messages during loading. These
+%D unharmfull messages could be ingored.
+%D
+%D The next substitution is needed for determining
+%D \type{\p@renwd} in the macro \type{\bordermatrix}.
+
+\def\tenex#1%
+ {\skipmessage{used \string\tenex}\hskip8.75002pt}
+
+%D We need to define \type{\tenrm} for switching to
+%D \type{\rm}.
+
+\def\tenrm%
+ {\skipmessage{\string\tenrm}}
+
+%D In \CONTEXT\ all \PLAIN\ \TEX\ fonts are available, just
+%D like \type{\p@renwd}. We only postpone loading them until
+%D they are actually needed.
+
+%D By bypassing fonts, some definitions become less valid so
+%D we have to redefine them afterwards.
+%D
+%D \starttyping
+%D \let\normalbordermatrix=\bordermatrix
+%D
+%D \def\bordermatrix%
+%D {\bgroup
+%D \setbox0=\hbox{\getvalue{\textface\c!mm\c!ex}B}%
+%D \global\p@renwd=\wd0\relax
+%D \egroup
+%D \normalbordermatrix}
+%D \stoptyping
+
+%D Now we are ready for loading \PLAIN\ \TEX. Of couse we use
+%D \type{\normalinput} and not \type{\input}.
+
+\normalinput plain.tex \let\normalfmtversion\fmtversion
+
+%D We have to take care of unwanted \PDFTEX\
+%D initializations. We just want to default to \DVI\ output.
+
+\ifx\pdftexversion\undefined
+ \chardef\pdfoutput=0
+\else
+ \pdfoutput=0
+\fi
+
+%D When applicable, we also load the \ETEX\ source and
+%D definition files.
+
+\bgroup \obeylines
+
+\ifx\eTeXversion\undefined
+
+ \long\gdef\beginETEX#1\endETEX%
+ {}
+
+ \gdef\beginTEX%
+ {\bgroup\obeylines\dobeginTEX}
+
+ \gdef\dobeginTEX#1
+ {\egroup}
+
+ \global\let\endTEX\relax
+
+\else
+
+ \long\gdef\beginTEX#1\endTEX%
+ {}
+
+ \gdef\beginETEX%
+ {\bgroup\obeylines\dobeginETEX}
+
+% \gdef\dobeginETEX#1
+% {\egroup\immediate\write16%
+% {system (E-TEX) : [line \the\inputlineno] \detokenize{#1}}}
+
+ \gdef\dobeginETEX#1
+ {\egroup}
+
+ \global\let\endETEX\relax
+
+\fi
+
+\egroup
+
+% \ifx\eTeXversion\undefined
+% \long\def\onlyTEX #1{#1}
+% \long\def\onlyETEX#1{}
+% \else
+% \long\def\only TEX#1{}
+% \long\def\onlyETEX#1{#1}
+% \fi
+
+%D Well, this redefintion of \type {\input} fails on \ETEX,
+%D because of some \type {\cs\fi} constructs. So now we use:
+
+% \beginETEX etex.src etexdefs.lib
+%
+% \def\input#1%
+% {\bgroup
+% \skipmessage{\string\input}%
+% \expandafter\ifx\expandafter#1\csname l@ngdefnfile\endcsname
+% \let\input\egroup
+% \else
+% \def\input##1 {\egroup}%
+% \fi
+% \input}
+%
+% \normalinput etex.src \relax
+% \normalinput etexdefs.lib \relax
+%
+% \let\fmtversion\normalfmtversion
+%
+% \savinghyphcodes=1
+%
+% \endETEX
+%
+% \ifx\normalprotected \undefined \let\normalprotected \protected \fi
+% \ifx\normalunexpanded\undefined \let\normalunexpanded\unexpanded \fi
+% \ifx\normalexpanded \undefined \let\normalexpanded \expanded \fi
+
+\beginETEX \savinghyphcodes
+
+ \savinghyphcodes=1
+
+\endETEX
+
+%D We restore some redefined primitives to their old meaning.
+
+\let\font = \normalfont
+\let\skewchar = \normalskewchar
+\let\textfont = \normaltextfont
+\let\scriptfont = \normalscriptfont
+\let\scriptscriptfont = \normalscriptscriptfont
+\let\input = \normalinput
+\let\outer = \normalouter
+
+%D We reset some of the used auxiliary macro's to
+%D \type{\undefined}. One never knows what testing on them is
+%D done elsewhere.
+
+\let\skipmessage = \undefined
+\let\skipscaled = \undefined
+\let\normalfont = \undefined
+\let\normalskewchar = \undefined
+\let\normaltextfont = \undefined
+\let\normalscriptfont = \undefined
+\let\normalscriptscriptfont = \undefined
+
+% \let\normalinput = \undefined
+% \let\normalouter = \undefined
+
+%D We want a bit more statistics and some less logging info
+%D in the \type{log} file.
+
+\def\wlog#1{}
+
+% \let\normalwlog\wlog
+%
+% \def\wlog#1{\normalwlog{system (\string\wlog) : #1}}
+
+%D To prevent clashes, we slightly redefine the phantom
+%D macros: we let them hide their behaviour by grouping.
+
+\catcode`@=11
+
+%D Somehow this one does not work ok in math mode:
+
+\def\ph@nt%
+ {\bgroup
+ \ifmmode
+ \expandafter\mathpalette\expandafter\mathph@nt
+ \else
+ \expandafter\makeph@nt
+ \fi}
+
+\def\finph@nt%
+ {\setbox\tw@\null
+ \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@ \fi
+ \ifh@ \wd\tw@\wd\z@ \fi
+ \box\tw@
+ \egroup}
+
+%D But this one does work.
+
+\def\ph@nt%
+ {\ifmmode
+ \expandafter\mathpalette\expandafter\mathph@nt
+ \else
+ \bgroup\expandafter\makeph@nt
+ \fi}
+
+\def\finph@nt%
+ {\setbox\tw@\null
+ \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@ \fi
+ \ifh@ \wd\tw@\wd\z@ \fi
+ \box\tw@
+ \ifmmode\else\egroup\fi}
+
+\catcode`@=12
+
+%D Just for tracing purposes wet set:
+
+\tracingstats=1
+
+%D To circumvent dependencies, we can postpone certain
+%D initializations to dumping time, by appending them to the
+%D \type {\everydump} token register.
+
+\newtoks \everydump
+
+\let\normaldump \dump
+
+\def\dump{\the\everydump\normaldump}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/tabl-com.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-com.mkii
index 8a0bb9e0c48..8a0bb9e0c48 100644
--- a/Master/texmf-dist/tex/context/base/tabl-com.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-com.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-ltb.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-ltb.mkii
index bac2b589376..bac2b589376 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ltb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-ltb.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-ntb.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-ntb.mkii
index fbf43eb1edc..fbf43eb1edc 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ntb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-ntb.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-nte.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-nte.mkii
index 6a5391f243b..6a5391f243b 100644
--- a/Master/texmf-dist/tex/context/base/tabl-nte.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-nte.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-pln.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-pln.mkii
index 39bb50f2329..39bb50f2329 100644
--- a/Master/texmf-dist/tex/context/base/tabl-pln.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-pln.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-tab.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-tab.mkii
index 7909e509284..7909e509284 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tab.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-tab.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-tbl.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-tbl.mkii
index 9f2d7df475c..9f2d7df475c 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tbl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-tbl.mkii
diff --git a/Master/texmf-dist/tex/context/base/tabl-tsp.mkii b/Master/texmf-dist/tex/context/base/mkii/tabl-tsp.mkii
index 59e9185e81d..59e9185e81d 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tsp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/tabl-tsp.mkii
diff --git a/Master/texmf-dist/tex/context/base/thrd-pic.mkii b/Master/texmf-dist/tex/context/base/mkii/thrd-pic.mkii
index 3c25d8a81d1..3c25d8a81d1 100644
--- a/Master/texmf-dist/tex/context/base/thrd-pic.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/thrd-pic.mkii
diff --git a/Master/texmf-dist/tex/context/base/thrd-ran.mkii b/Master/texmf-dist/tex/context/base/mkii/thrd-ran.mkii
index 276a4f6249f..276a4f6249f 100644
--- a/Master/texmf-dist/tex/context/base/thrd-ran.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/thrd-ran.mkii
diff --git a/Master/texmf-dist/tex/context/base/thrd-tab.mkii b/Master/texmf-dist/tex/context/base/mkii/thrd-tab.mkii
index dd3838ce2d4..dd3838ce2d4 100644
--- a/Master/texmf-dist/tex/context/base/thrd-tab.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/thrd-tab.mkii
diff --git a/Master/texmf-dist/tex/context/base/thrd-trg.mkii b/Master/texmf-dist/tex/context/base/mkii/thrd-trg.mkii
index c0106f5a3f1..c0106f5a3f1 100644
--- a/Master/texmf-dist/tex/context/base/thrd-trg.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/thrd-trg.mkii
diff --git a/Master/texmf-dist/tex/context/base/trac-vis.mkii b/Master/texmf-dist/tex/context/base/mkii/trac-vis.mkii
index be7a204ec1d..be7a204ec1d 100644
--- a/Master/texmf-dist/tex/context/base/trac-vis.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/trac-vis.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-def.mkii b/Master/texmf-dist/tex/context/base/mkii/type-def.mkii
index 0ff1e0b7d8f..0ff1e0b7d8f 100644
--- a/Master/texmf-dist/tex/context/base/type-def.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-def.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/type-ini.mkii
index c6b0a8931d9..c6b0a8931d9 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-one.mkii b/Master/texmf-dist/tex/context/base/mkii/type-one.mkii
index e98f6864a64..4f6e437457c 100644
--- a/Master/texmf-dist/tex/context/base/type-one.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-one.mkii
@@ -188,66 +188,66 @@
%D {NNN}, i.e.\ four digit numbers).
\starttypescript [serif] [computer-modern] [cyr]
- \definefontsynonym [cmb10] [wcmb10] [encoding=t2a]
- \definefontsynonym [cmbsy10] [wcmbsy10] [encoding=t2a]
- \definefontsynonym [cmbx10] [wcmbx10] [encoding=t2a]
- \definefontsynonym [cmbx12] [wcmbx12] [encoding=t2a]
- \definefontsynonym [cmbx5] [wcmbx5] [encoding=t2a]
- \definefontsynonym [cmbx6] [wcmbx6] [encoding=t2a]
- \definefontsynonym [cmbx7] [wcmbx7] [encoding=t2a]
- \definefontsynonym [cmbx8] [wcmbx8] [encoding=t2a]
- \definefontsynonym [cmbx9] [wcmbx9] [encoding=t2a]
- \definefontsynonym [cmbxsl10] [wcmbxsl10] [encoding=t2a]
- \definefontsynonym [cmbxti10] [wcmbxti10] [encoding=t2a]
- \definefontsynonym [cmcsc10] [wcmcsc10] [encoding=t2a]
- %definefontsynonym [cmdunh10] [wcmdunh10] [encoding=t2a]
- \definefontsynonym [cminch] [wcminch] [encoding=t2a]
- \definefontsynonym [cmr10] [wcmr10] [encoding=t2a]
- \definefontsynonym [cmr12] [wcmr12] [encoding=t2a]
- \definefontsynonym [cmr17] [wcmr17] [encoding=t2a]
- \definefontsynonym [cmr5] [wcmr5] [encoding=t2a]
- \definefontsynonym [cmr6] [wcmr6] [encoding=t2a]
- \definefontsynonym [cmr7] [wcmr7] [encoding=t2a]
- \definefontsynonym [cmr8] [wcmr8] [encoding=t2a]
- \definefontsynonym [cmr9] [wcmr9] [encoding=t2a]
- \definefontsynonym [cmsl10] [wcmsl10] [encoding=t2a]
- \definefontsynonym [cmsl12] [wcmsl12] [encoding=t2a]
- \definefontsynonym [cmsl8] [wcmsl8] [encoding=t2a]
- \definefontsynonym [cmsl9] [wcmsl9] [encoding=t2a]
- \definefontsynonym [cmti10] [wcmti10] [encoding=t2a]
- \definefontsynonym [cmti12] [wcmti12] [encoding=t2a]
- \definefontsynonym [cmti7] [wcmti7] [encoding=t2a]
- \definefontsynonym [cmti8] [wcmti8] [encoding=t2a]
- \definefontsynonym [cmti9] [wcmti9] [encoding=t2a]
- \definefontsynonym [cmu10] [wcmu10] [encoding=t2a]
+ \definefontsynonym [cmb10] [wcmb10] [encoding=t2a]
+ \definefontsynonym [cmbsy10] [wcmbsy10] [encoding=t2a]
+ \definefontsynonym [cmbx10] [wcmbx10] [encoding=t2a]
+ \definefontsynonym [cmbx12] [wcmbx12] [encoding=t2a]
+ \definefontsynonym [cmbx5] [wcmbx5] [encoding=t2a]
+ \definefontsynonym [cmbx6] [wcmbx6] [encoding=t2a]
+ \definefontsynonym [cmbx7] [wcmbx7] [encoding=t2a]
+ \definefontsynonym [cmbx8] [wcmbx8] [encoding=t2a]
+ \definefontsynonym [cmbx9] [wcmbx9] [encoding=t2a]
+ \definefontsynonym [cmbxsl10] [wcmbxsl10] [encoding=t2a]
+ \definefontsynonym [cmbxti10] [wcmbxti10] [encoding=t2a]
+ \definefontsynonym [cmcsc10] [wcmcsc10] [encoding=t2a]
+ %definefontsynonym [cmdunh10] [wcmdunh10] [encoding=t2a]
+ \definefontsynonym [cminch] [wcminch] [encoding=t2a]
+ \definefontsynonym [cmr10] [wcmr10] [encoding=t2a]
+ \definefontsynonym [cmr12] [wcmr12] [encoding=t2a]
+ \definefontsynonym [cmr17] [wcmr17] [encoding=t2a]
+ \definefontsynonym [cmr5] [wcmr5] [encoding=t2a]
+ \definefontsynonym [cmr6] [wcmr6] [encoding=t2a]
+ \definefontsynonym [cmr7] [wcmr7] [encoding=t2a]
+ \definefontsynonym [cmr8] [wcmr8] [encoding=t2a]
+ \definefontsynonym [cmr9] [wcmr9] [encoding=t2a]
+ \definefontsynonym [cmsl10] [wcmsl10] [encoding=t2a]
+ \definefontsynonym [cmsl12] [wcmsl12] [encoding=t2a]
+ \definefontsynonym [cmsl8] [wcmsl8] [encoding=t2a]
+ \definefontsynonym [cmsl9] [wcmsl9] [encoding=t2a]
+ \definefontsynonym [cmti10] [wcmti10] [encoding=t2a]
+ \definefontsynonym [cmti12] [wcmti12] [encoding=t2a]
+ \definefontsynonym [cmti7] [wcmti7] [encoding=t2a]
+ \definefontsynonym [cmti8] [wcmti8] [encoding=t2a]
+ \definefontsynonym [cmti9] [wcmti9] [encoding=t2a]
+ \definefontsynonym [cmu10] [wcmu10] [encoding=t2a]
\stoptypescript
\starttypescript [sans] [computer-modern] [cyr]
- \definefontsynonym [cmss10] [wcmss10] [encoding=t2a]
- \definefontsynonym [cmss12] [wcmss12] [encoding=t2a]
- \definefontsynonym [cmss17] [wcmss17] [encoding=t2a]
- \definefontsynonym [cmss8] [wcmss8] [encoding=t2a]
- \definefontsynonym [cmss9] [wcmss9] [encoding=t2a]
- %definefontsynonym [cmssbi10] [wcmssbi10] [encoding=t2a]
- \definefontsynonym [cmssbx10] [wcmssbx10] [encoding=t2a]
- \definefontsynonym [cmssdc10] [wcmssdc10] [encoding=t2a]
- \definefontsynonym [cmssi10] [wcmssi10] [encoding=t2a]
- \definefontsynonym [cmssi12] [wcmssi12] [encoding=t2a]
- \definefontsynonym [cmssi17] [wcmssi17] [encoding=t2a]
- \definefontsynonym [cmssi8] [wcmssi8] [encoding=t2a]
- \definefontsynonym [cmssi9] [wcmssi9] [encoding=t2a]
- \definefontsynonym [cmssq8] [wcmssq8] [encoding=t2a]
- \definefontsynonym [cmssqi8] [wcmssqi8] [encoding=t2a]
+ \definefontsynonym [cmss10] [wcmss10] [encoding=t2a]
+ \definefontsynonym [cmss12] [wcmss12] [encoding=t2a]
+ \definefontsynonym [cmss17] [wcmss17] [encoding=t2a]
+ \definefontsynonym [cmss8] [wcmss8] [encoding=t2a]
+ \definefontsynonym [cmss9] [wcmss9] [encoding=t2a]
+ %definefontsynonym [cmssbi10] [wcmssbi10] [encoding=t2a]
+ \definefontsynonym [cmssbx10] [wcmssbx10] [encoding=t2a]
+ \definefontsynonym [cmssdc10] [wcmssdc10] [encoding=t2a]
+ \definefontsynonym [cmssi10] [wcmssi10] [encoding=t2a]
+ \definefontsynonym [cmssi12] [wcmssi12] [encoding=t2a]
+ \definefontsynonym [cmssi17] [wcmssi17] [encoding=t2a]
+ \definefontsynonym [cmssi8] [wcmssi8] [encoding=t2a]
+ \definefontsynonym [cmssi9] [wcmssi9] [encoding=t2a]
+ \definefontsynonym [cmssq8] [wcmssq8] [encoding=t2a]
+ \definefontsynonym [cmssqi8] [wcmssqi8] [encoding=t2a]
\stoptypescript
\starttypescript [mono] [computer-modern] [cyr]
- \definefontsynonym [cmitt10] [wcmitt10] [encoding=t2a]
- \definefontsynonym [cmsltt10] [wcmsltt10] [encoding=t2a]
- \definefontsynonym [cmtt10] [wcmtt10] [encoding=t2a]
- \definefontsynonym [cmtt12] [wcmtt12] [encoding=t2a]
- \definefontsynonym [cmtt8] [wcmtt8] [encoding=t2a]
- \definefontsynonym [cmtt9] [wcmtt9] [encoding=t2a]
- %definefontsynonym [cmvtt10] [wcmvtt10] [encoding=t2a]
+ \definefontsynonym [cmitt10] [wcmitt10] [encoding=t2a]
+ \definefontsynonym [cmsltt10] [wcmsltt10] [encoding=t2a]
+ \definefontsynonym [cmtt10] [wcmtt10] [encoding=t2a]
+ \definefontsynonym [cmtt12] [wcmtt12] [encoding=t2a]
+ \definefontsynonym [cmtt8] [wcmtt8] [encoding=t2a]
+ \definefontsynonym [cmtt9] [wcmtt9] [encoding=t2a]
+ %definefontsynonym [cmvtt10] [wcmvtt10] [encoding=t2a]
\stoptypescript
\definetypescriptprefix [c:t2a] [la]
@@ -262,155 +262,155 @@
\stoptypescript
\starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [cmb10] [\typescriptprefix{c:\typescriptthree}rb1000] [encoding=\typescriptthree]
- \definefontsynonym [cmbx10] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
- \definefontsynonym [cmbx12] [\typescriptprefix{c:\typescriptthree}bx1200] [encoding=\typescriptthree]
- \definefontsynonym [cmbx5] [\typescriptprefix{c:\typescriptthree}bx0500] [encoding=\typescriptthree]
- \definefontsynonym [cmbx6] [\typescriptprefix{c:\typescriptthree}bx0600] [encoding=\typescriptthree]
- \definefontsynonym [cmbx7] [\typescriptprefix{c:\typescriptthree}bx0700] [encoding=\typescriptthree]
- \definefontsynonym [cmbx8] [\typescriptprefix{c:\typescriptthree}bx0800] [encoding=\typescriptthree]
- \definefontsynonym [cmbx9] [\typescriptprefix{c:\typescriptthree}bx0900] [encoding=\typescriptthree]
- \definefontsynonym [cmbxsl10] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
- \definefontsynonym [cmbxti10] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
- \definefontsynonym [cmcsc10] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
- \definefontsynonym [cmdunh10] [\typescriptprefix{c:\typescriptthree}dh1000] [encoding=\typescriptthree]
- \definefontsynonym [cmff10] [\typescriptprefix{c:\typescriptthree}ff1000] [encoding=\typescriptthree]
- \definefontsynonym [cmfi10] [\typescriptprefix{c:\typescriptthree}fi1000] [encoding=\typescriptthree]
- \definefontsynonym [cmfib8] [\typescriptprefix{c:\typescriptthree}fb0800] [encoding=\typescriptthree]
- %\definefontsynonym [cminch] [\typescriptprefix{c:\typescriptthree}inch00] [encoding=\typescriptthree]
- \definefontsynonym [cmr10] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
- \definefontsynonym [cmr12] [\typescriptprefix{c:\typescriptthree}rm1200] [encoding=\typescriptthree]
- \definefontsynonym [cmr17] [\typescriptprefix{c:\typescriptthree}rm1700] [encoding=\typescriptthree]
- \definefontsynonym [cmr5] [\typescriptprefix{c:\typescriptthree}rm0500] [encoding=\typescriptthree]
- \definefontsynonym [cmr6] [\typescriptprefix{c:\typescriptthree}rm0600] [encoding=\typescriptthree]
- \definefontsynonym [cmr7] [\typescriptprefix{c:\typescriptthree}rm0700] [encoding=\typescriptthree]
- \definefontsynonym [cmr8] [\typescriptprefix{c:\typescriptthree}rm0800] [encoding=\typescriptthree]
- \definefontsynonym [cmr9] [\typescriptprefix{c:\typescriptthree}rm0900] [encoding=\typescriptthree]
- \definefontsynonym [cmsl10] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
- \definefontsynonym [cmsl12] [\typescriptprefix{c:\typescriptthree}sl1200] [encoding=\typescriptthree]
- \definefontsynonym [cmsl8] [\typescriptprefix{c:\typescriptthree}sl0800] [encoding=\typescriptthree]
- \definefontsynonym [cmsl9] [\typescriptprefix{c:\typescriptthree}sl0900] [encoding=\typescriptthree]
- \definefontsynonym [cmtcsc10] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
- \definefontsynonym [cmti10] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
- \definefontsynonym [cmti12] [\typescriptprefix{c:\typescriptthree}ti1200] [encoding=\typescriptthree]
- \definefontsynonym [cmti7] [\typescriptprefix{c:\typescriptthree}ti0700] [encoding=\typescriptthree]
- \definefontsynonym [cmti8] [\typescriptprefix{c:\typescriptthree}ti0800] [encoding=\typescriptthree]
- \definefontsynonym [cmti9] [\typescriptprefix{c:\typescriptthree}ti0900] [encoding=\typescriptthree]
- \definefontsynonym [cmu10] [\typescriptprefix{c:\typescriptthree}ui1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmb10] [\typescriptprefix{c:\typescriptthree}rb1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx10] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx12] [\typescriptprefix{c:\typescriptthree}bx1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx5] [\typescriptprefix{c:\typescriptthree}bx0500] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx6] [\typescriptprefix{c:\typescriptthree}bx0600] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx7] [\typescriptprefix{c:\typescriptthree}bx0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx8] [\typescriptprefix{c:\typescriptthree}bx0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx9] [\typescriptprefix{c:\typescriptthree}bx0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmbxsl10] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbxti10] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmcsc10] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmdunh10] [\typescriptprefix{c:\typescriptthree}dh1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmff10] [\typescriptprefix{c:\typescriptthree}ff1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmfi10] [\typescriptprefix{c:\typescriptthree}fi1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmfib8] [\typescriptprefix{c:\typescriptthree}fb0800] [encoding=\typescriptthree]
+ %\definefontsynonym [cminch] [\typescriptprefix{c:\typescriptthree}inch00] [encoding=\typescriptthree]
+ \definefontsynonym [cmr10] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmr12] [\typescriptprefix{c:\typescriptthree}rm1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmr17] [\typescriptprefix{c:\typescriptthree}rm1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmr5] [\typescriptprefix{c:\typescriptthree}rm0500] [encoding=\typescriptthree]
+ \definefontsynonym [cmr6] [\typescriptprefix{c:\typescriptthree}rm0600] [encoding=\typescriptthree]
+ \definefontsynonym [cmr7] [\typescriptprefix{c:\typescriptthree}rm0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmr8] [\typescriptprefix{c:\typescriptthree}rm0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmr9] [\typescriptprefix{c:\typescriptthree}rm0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl10] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl12] [\typescriptprefix{c:\typescriptthree}sl1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl8] [\typescriptprefix{c:\typescriptthree}sl0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl9] [\typescriptprefix{c:\typescriptthree}sl0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmtcsc10] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmti10] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmti12] [\typescriptprefix{c:\typescriptthree}ti1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmti7] [\typescriptprefix{c:\typescriptthree}ti0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmti8] [\typescriptprefix{c:\typescriptthree}ti0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmti9] [\typescriptprefix{c:\typescriptthree}ti0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmu10] [\typescriptprefix{c:\typescriptthree}ui1000] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [cmss10] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
- \definefontsynonym [cmss12] [\typescriptprefix{c:\typescriptthree}ss1200] [encoding=\typescriptthree]
- \definefontsynonym [cmss17] [\typescriptprefix{c:\typescriptthree}ss1700] [encoding=\typescriptthree]
- \definefontsynonym [cmss8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
- \definefontsynonym [cmss9] [\typescriptprefix{c:\typescriptthree}ss0900] [encoding=\typescriptthree]
- \definefontsynonym [cmssbx10] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
- %\definefontsynonym [cmssdc10] [\typescriptprefix{c:\typescriptthree}ssdc1000] [encoding=\typescriptthree]
- \definefontsynonym [cmssi10] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
- \definefontsynonym [cmssi12] [\typescriptprefix{c:\typescriptthree}si1200] [encoding=\typescriptthree]
- \definefontsynonym [cmssi17] [\typescriptprefix{c:\typescriptthree}si1700] [encoding=\typescriptthree]
- \definefontsynonym [cmssi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
- \definefontsynonym [cmssi9] [\typescriptprefix{c:\typescriptthree}si0900] [encoding=\typescriptthree]
- \definefontsynonym [cmssq8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
- \definefontsynonym [cmssqi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmss10] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmss12] [\typescriptprefix{c:\typescriptthree}ss1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmss17] [\typescriptprefix{c:\typescriptthree}ss1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmss8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmss9] [\typescriptprefix{c:\typescriptthree}ss0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmssbx10] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
+ %\definefontsynonym [cmssdc10] [\typescriptprefix{c:\typescriptthree}ssdc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi10] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi12] [\typescriptprefix{c:\typescriptthree}si1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi17] [\typescriptprefix{c:\typescriptthree}si1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi9] [\typescriptprefix{c:\typescriptthree}si0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmssq8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmssqi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [cmitt10] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
- \definefontsynonym [cmsltt10] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
- \definefontsynonym [cmtt10] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
- \definefontsynonym [cmtt12] [\typescriptprefix{c:\typescriptthree}tt1200] [encoding=\typescriptthree]
- \definefontsynonym [cmtt8] [\typescriptprefix{c:\typescriptthree}tt0800] [encoding=\typescriptthree]
- \definefontsynonym [cmtt9] [\typescriptprefix{c:\typescriptthree}tt0900] [encoding=\typescriptthree]
- \definefontsynonym [cmvtt10] [\typescriptprefix{c:\typescriptthree}vt1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmitt10] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmsltt10] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt10] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt12] [\typescriptprefix{c:\typescriptthree}tt1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt8] [\typescriptprefix{c:\typescriptthree}tt0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt9] [\typescriptprefix{c:\typescriptthree}tt0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmvtt10] [\typescriptprefix{c:\typescriptthree}vt1000] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [serif] [computer-modern] [lcy]
- \definefontsynonym [cmb10] [lhb10] [encoding=lcy]
- \definefontsynonym [cmbx10] [lhbx10] [encoding=lcy]
- \definefontsynonym [cmbx12] [lhbx12] [encoding=lcy]
- \definefontsynonym [cmbx5] [lhbx5] [encoding=lcy]
- \definefontsynonym [cmbx6] [lhbx6] [encoding=lcy]
- \definefontsynonym [cmbx7] [lhbx7] [encoding=lcy]
- \definefontsynonym [cmbx8] [lhbx8] [encoding=lcy]
- \definefontsynonym [cmbx9] [lhbx9] [encoding=lcy]
- \definefontsynonym [cmbxsl10] [lhbxsl10] [encoding=lcy]
- \definefontsynonym [cmbxti10] [lhbxti10] [encoding=lcy]
- \definefontsynonym [cmcsc10] [lhcsc10] [encoding=lcy]
- \definefontsynonym [cmdunh10] [lhdunh10] [encoding=lcy]
- \definefontsynonym [cmff10] [lhff10] [encoding=lcy]
- \definefontsynonym [cmfi10] [lhfi10] [encoding=lcy]
- \definefontsynonym [cmfib8] [lhfib8] [encoding=lcy]
- \definefontsynonym [cminch] [lhinch] [encoding=lcy]
- \definefontsynonym [cmr10] [lhr10] [encoding=lcy]
- \definefontsynonym [cmr12] [lhr12] [encoding=lcy]
- \definefontsynonym [cmr17] [lhr17] [encoding=lcy]
- \definefontsynonym [cmr5] [lhr5] [encoding=lcy]
- \definefontsynonym [cmr6] [lhr6] [encoding=lcy]
- \definefontsynonym [cmr7] [lhr7] [encoding=lcy]
- \definefontsynonym [cmr8] [lhr8] [encoding=lcy]
- \definefontsynonym [cmr9] [lhr9] [encoding=lcy]
- \definefontsynonym [cmsl10] [lhsl10] [encoding=lcy]
- \definefontsynonym [cmsl12] [lhsl12] [encoding=lcy]
- \definefontsynonym [cmsl8] [lhsl8] [encoding=lcy]
- \definefontsynonym [cmsl9] [lhsl9] [encoding=lcy]
- \definefontsynonym [cmtcsc10] [lhtcsc10] [encoding=lcy]
- \definefontsynonym [cmtex10] [lhtex10] [encoding=lcy]
- \definefontsynonym [cmtex8] [lhtex8] [encoding=lcy]
- \definefontsynonym [cmtex9] [lhtex9] [encoding=lcy]
- \definefontsynonym [cmti10] [lhti10] [encoding=lcy]
- \definefontsynonym [cmti12] [lhti12] [encoding=lcy]
- \definefontsynonym [cmti7] [lhti7] [encoding=lcy]
- \definefontsynonym [cmti8] [lhti8] [encoding=lcy]
- \definefontsynonym [cmti9] [lhti9] [encoding=lcy]
- \definefontsynonym [cmu10] [lhu10] [encoding=lcy]
+ \definefontsynonym [cmb10] [lhb10] [encoding=lcy]
+ \definefontsynonym [cmbx10] [lhbx10] [encoding=lcy]
+ \definefontsynonym [cmbx12] [lhbx12] [encoding=lcy]
+ \definefontsynonym [cmbx5] [lhbx5] [encoding=lcy]
+ \definefontsynonym [cmbx6] [lhbx6] [encoding=lcy]
+ \definefontsynonym [cmbx7] [lhbx7] [encoding=lcy]
+ \definefontsynonym [cmbx8] [lhbx8] [encoding=lcy]
+ \definefontsynonym [cmbx9] [lhbx9] [encoding=lcy]
+ \definefontsynonym [cmbxsl10] [lhbxsl10] [encoding=lcy]
+ \definefontsynonym [cmbxti10] [lhbxti10] [encoding=lcy]
+ \definefontsynonym [cmcsc10] [lhcsc10] [encoding=lcy]
+ \definefontsynonym [cmdunh10] [lhdunh10] [encoding=lcy]
+ \definefontsynonym [cmff10] [lhff10] [encoding=lcy]
+ \definefontsynonym [cmfi10] [lhfi10] [encoding=lcy]
+ \definefontsynonym [cmfib8] [lhfib8] [encoding=lcy]
+ \definefontsynonym [cminch] [lhinch] [encoding=lcy]
+ \definefontsynonym [cmr10] [lhr10] [encoding=lcy]
+ \definefontsynonym [cmr12] [lhr12] [encoding=lcy]
+ \definefontsynonym [cmr17] [lhr17] [encoding=lcy]
+ \definefontsynonym [cmr5] [lhr5] [encoding=lcy]
+ \definefontsynonym [cmr6] [lhr6] [encoding=lcy]
+ \definefontsynonym [cmr7] [lhr7] [encoding=lcy]
+ \definefontsynonym [cmr8] [lhr8] [encoding=lcy]
+ \definefontsynonym [cmr9] [lhr9] [encoding=lcy]
+ \definefontsynonym [cmsl10] [lhsl10] [encoding=lcy]
+ \definefontsynonym [cmsl12] [lhsl12] [encoding=lcy]
+ \definefontsynonym [cmsl8] [lhsl8] [encoding=lcy]
+ \definefontsynonym [cmsl9] [lhsl9] [encoding=lcy]
+ \definefontsynonym [cmtcsc10] [lhtcsc10] [encoding=lcy]
+ \definefontsynonym [cmtex10] [lhtex10] [encoding=lcy]
+ \definefontsynonym [cmtex8] [lhtex8] [encoding=lcy]
+ \definefontsynonym [cmtex9] [lhtex9] [encoding=lcy]
+ \definefontsynonym [cmti10] [lhti10] [encoding=lcy]
+ \definefontsynonym [cmti12] [lhti12] [encoding=lcy]
+ \definefontsynonym [cmti7] [lhti7] [encoding=lcy]
+ \definefontsynonym [cmti8] [lhti8] [encoding=lcy]
+ \definefontsynonym [cmti9] [lhti9] [encoding=lcy]
+ \definefontsynonym [cmu10] [lhu10] [encoding=lcy]
\stoptypescript
\starttypescript [sans] [computer-modern] [lcy]
- \definefontsynonym [cmss10] [lhss10] [encoding=lcy]
- \definefontsynonym [cmss12] [lhss12] [encoding=lcy]
- \definefontsynonym [cmss17] [lhss17] [encoding=lcy]
- \definefontsynonym [cmss8] [lhss8] [encoding=lcy]
- \definefontsynonym [cmss9] [lhss9] [encoding=lcy]
- \definefontsynonym [cmssbi10] [lhssbi10] [encoding=lcy]
- \definefontsynonym [cmssbx10] [lhssbx10] [encoding=lcy]
- \definefontsynonym [cmssdc10] [lhssdc10] [encoding=lcy]
- \definefontsynonym [cmssi10] [lhssi10] [encoding=lcy]
- \definefontsynonym [cmssi12] [lhssi12] [encoding=lcy]
- \definefontsynonym [cmssi17] [lhssi17] [encoding=lcy]
- \definefontsynonym [cmssi8] [lhssi8] [encoding=lcy]
- \definefontsynonym [cmssi9] [lhssi9] [encoding=lcy]
- \definefontsynonym [cmssq8] [lhssq8] [encoding=lcy]
- \definefontsynonym [cmssqi8] [lhssqi8] [encoding=lcy]
+ \definefontsynonym [cmss10] [lhss10] [encoding=lcy]
+ \definefontsynonym [cmss12] [lhss12] [encoding=lcy]
+ \definefontsynonym [cmss17] [lhss17] [encoding=lcy]
+ \definefontsynonym [cmss8] [lhss8] [encoding=lcy]
+ \definefontsynonym [cmss9] [lhss9] [encoding=lcy]
+ \definefontsynonym [cmssbi10] [lhssbi10] [encoding=lcy]
+ \definefontsynonym [cmssbx10] [lhssbx10] [encoding=lcy]
+ \definefontsynonym [cmssdc10] [lhssdc10] [encoding=lcy]
+ \definefontsynonym [cmssi10] [lhssi10] [encoding=lcy]
+ \definefontsynonym [cmssi12] [lhssi12] [encoding=lcy]
+ \definefontsynonym [cmssi17] [lhssi17] [encoding=lcy]
+ \definefontsynonym [cmssi8] [lhssi8] [encoding=lcy]
+ \definefontsynonym [cmssi9] [lhssi9] [encoding=lcy]
+ \definefontsynonym [cmssq8] [lhssq8] [encoding=lcy]
+ \definefontsynonym [cmssqi8] [lhssqi8] [encoding=lcy]
\stoptypescript
\starttypescript [mono] [computer-modern] [lcy]
- \definefontsynonym [cmitt10] [lhitt10] [encoding=lcy]
- \definefontsynonym [cmsltt10] [lhsltt10] [encoding=lcy]
- \definefontsynonym [cmtt10] [lhtt10] [encoding=lcy]
- \definefontsynonym [cmtt12] [lhtt12] [encoding=lcy]
- \definefontsynonym [cmtt8] [lhtt8] [encoding=lcy]
- \definefontsynonym [cmtt9] [lhtt9] [encoding=lcy]
- \definefontsynonym [cmvtt10] [lhvtt10] [encoding=lcy]
+ \definefontsynonym [cmitt10] [lhitt10] [encoding=lcy]
+ \definefontsynonym [cmsltt10] [lhsltt10] [encoding=lcy]
+ \definefontsynonym [cmtt10] [lhtt10] [encoding=lcy]
+ \definefontsynonym [cmtt12] [lhtt12] [encoding=lcy]
+ \definefontsynonym [cmtt8] [lhtt8] [encoding=lcy]
+ \definefontsynonym [cmtt9] [lhtt9] [encoding=lcy]
+ \definefontsynonym [cmvtt10] [lhvtt10] [encoding=lcy]
\stoptypescript
%
\starttypescript [math] [modern,computer-modern,latin-modern] % [default]
- % watch the space, it prevents remapping
- \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]% [lmr10 ]
- \definefontsynonym [ComputerModernMath-Extension] [lmex10]
- \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
- \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]% [lmr10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
+ \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
\stoptypescript
\starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern] % [default]
- % watch the space, it prevents remapping
- \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10] % [lmb10 ]
- \definefontsynonym [ComputerModernMath-Extension] [lmex10]
- \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
- \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10] % [lmb10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
+ \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
\stoptypescript
% Till we have cyrilic in lm:
@@ -419,48 +419,48 @@
% \setupbodyfont[modern,10pt]
\starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [Serif] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifItalic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifSlanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifCaps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifCapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree]
+ \definefontsynonym [Serif] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifItalic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifSlanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifCapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [Sans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
- \definefontsynonym [SansSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
- \definefontsynonym [SansCapsSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansItalic] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldItalic] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansCaps] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansCapsSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [Mono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBold] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBoldItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBoldSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoCaps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoCapsSlanted] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ \definefontsynonym [Mono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBold] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBoldItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBoldSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoCaps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoCapsSlanted] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
\stoptypescript
% Computer Concrete (AMS)
\starttypescript [serif] [concrete] [default]
- \definefontsynonym [ComputerConcrete] [ccr10]
- \definefontsynonym [ComputerConcrete-Italic] [ccti10]
- \definefontsynonym [ComputerConcrete-Slanted] [ccsl10]
- \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete]
- \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic]
- \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted]
- \definefontsynonym [ComputerConcrete-Caps] [cccsc10]
+ \definefontsynonym [ComputerConcrete] [ccr10]
+ \definefontsynonym [ComputerConcrete-Italic] [ccti10]
+ \definefontsynonym [ComputerConcrete-Slanted] [ccsl10]
+ \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete]
+ \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic]
+ \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted]
+ \definefontsynonym [ComputerConcrete-Caps] [cccsc10]
\stoptypescript
\starttypescript [serif] [modern,computer-modern,latin-modern] [name]
@@ -2553,13 +2553,13 @@
% so we keep using that as default
% \starttypescript [mono] [lucida] [name]
- % \definefontsynonym [Mono] [LucidaTypewriter]
- % \definefontsynonym [MonoBold] [LucidaTypewriterBold]
- % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
- % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
- % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
- % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
- % \definefontsynonym [MonoCaps] [LucidaTypewriter]
+ % \definefontsynonym [Mono] [LucidaTypewriter]
+ % \definefontsynonym [MonoBold] [LucidaTypewriterBold]
+ % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoCaps] [LucidaTypewriter]
% \stoptypescript
% Lucida Bright Sans Typewriter
@@ -2790,14 +2790,14 @@
\loadmapfile[dejavu-truetype.map]
\stoptypescript
- \starttypescript [mono] [dejavu,dejavu-condensed] [ec,qx,t2a]
- \definefontsynonym [DejaVuSansMono] [DejaVuSansMono-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
- \definefontsynonym [DejaVuSansMono-Italic] [DejaVuSansMono-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
- \definefontsynonym [DejaVuSansMono-Bold] [DejaVuSansMono-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
- \definefontsynonym [DejaVuSansMono-BoldItalic] [DejaVuSansMono-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
+ \starttypescript [mono] [dejavu,dejavu-condensed] [ec,qx,t2a]
+ \definefontsynonym [DejaVuSansMono] [DejaVuSansMono-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
+ \definefontsynonym [DejaVuSansMono-Italic] [DejaVuSansMono-Italic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
+ \definefontsynonym [DejaVuSansMono-Bold] [DejaVuSansMono-Bold-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
+ \definefontsynonym [DejaVuSansMono-BoldItalic] [DejaVuSansMono-BoldItalic-tlf-\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree]
- \loadmapfile[dejavu-truetype.map]
- \stoptypescript
+ \loadmapfile[dejavu-truetype.map]
+ \stoptypescript
\starttypescript [serif] [dejavu] [name]
\definefontsynonym [Serif] [DejaVuSerif]
@@ -2843,16 +2843,16 @@
\definefontsynonym [SansCaps] [Sans]
\stoptypescript
- \starttypescript [mono] [dejavu,dejavu-condensed] [name]
- \definefontsynonym [Mono] [DejaVuSansMono]
- \definefontsynonym [MonoItalic] [DejaVuSansMono-Italic]
- \definefontsynonym [MonoBold] [DejaVuSansMono-Bold]
- \definefontsynonym [MonoBoldItalic] [DejaVuSansMono-BoldItalic]
+ \starttypescript [mono] [dejavu,dejavu-condensed] [name]
+ \definefontsynonym [Mono] [DejaVuSansMono]
+ \definefontsynonym [MonoItalic] [DejaVuSansMono-Italic]
+ \definefontsynonym [MonoBold] [DejaVuSansMono-Bold]
+ \definefontsynonym [MonoBoldItalic] [DejaVuSansMono-BoldItalic]
- \definefontsynonym [MonoSlanted] [MonoItalic]
- \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
- \definefontsynonym [MonoCaps] [Mono]
- \stoptypescript
+ \definefontsynonym [MonoSlanted] [MonoItalic]
+ \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
+ \definefontsynonym [MonoCaps] [Mono]
+ \stoptypescript
\starttypescript [dejavu] [ec,qx,t2a]
\definetypeface [dejavu] [rm] [serif] [dejavu] [default] [encoding=\typescripttwo]
@@ -2872,4 +2872,46 @@
\stoptypescriptcollection
+\starttypescriptcollection[gentium]
+
+ \starttypescript [serif] [gentium] [ec,texnansi,qx,t5,l7x]
+ \definefontsynonym [Gentium-Roman] [\typescriptthree-gentiumplus-regular] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-Italic] [\typescriptthree-gentiumplus-italic] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-Bold] [\typescriptthree-gentiumbasic-bold] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-BoldItalic] [\typescriptthree-gentiumbasic-bolditalic] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-RomanCaps] [\typescriptthree-gentiumplus-regular-sc] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-Slanted] [Gentium-Italic]
+ \definefontsynonym [Gentium-BoldSlanted] [Gentium-BoldItalic]
+ \loadmapfile[gentium-\typescriptthree.map]
+ \stoptypescript
+
+ \starttypescript [serif] [gentium] [agr,t2a]
+ \definefontsynonym [Gentium-Roman] [\typescriptthree-gentiumplus-regular] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-Italic] [\typescriptthree-gentiumplus-italic] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-RomanCaps] [\typescriptthree-gentiumplus-regular-sc] [encoding=\typescriptthree]
+ \definefontsynonym [Gentium-Bold] [Gentium-Roman]
+ \definefontsynonym [Gentium-BoldItalic] [Gentium-Italic]
+ \definefontsynonym [Gentium-Slanted] [Gentium-Italic]
+ \definefontsynonym [Gentium-BoldSlanted] [Gentium-Italic]
+ \loadmapfile[gentium-\typescriptthree.map]
+ \stoptypescript
+
+ \starttypescript [serif] [gentium] [name]
+ \usetypescript[serif][fallback]
+ \definefontsynonym [Serif] [Gentium-Roman]
+ \definefontsynonym [SerifItalic] [Gentium-Italic]
+ \definefontsynonym [SerifBold] [Gentium-Bold]
+ \definefontsynonym [SerifBoldItalic] [Gentium-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Gentium-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [Gentium-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Gentium-RomanCaps]
+ \definefontsynonym [OldStyle] [Serif]
+ \stoptypescript
+
+ \starttypescript [gentium] [ec,texnansi,qx,t5,t2a,agr,l7x]
+ \definetypeface [gentium] [rm] [serif] [gentium] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+\stoptypescriptcollection
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-otf.mkii b/Master/texmf-dist/tex/context/base/mkii/type-otf.mkii
index d15994f6aed..d15994f6aed 100644
--- a/Master/texmf-dist/tex/context/base/type-otf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-otf.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-run.mkii b/Master/texmf-dist/tex/context/base/mkii/type-run.mkii
index 51a9f2a885d..51a9f2a885d 100644
--- a/Master/texmf-dist/tex/context/base/type-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-set.mkii b/Master/texmf-dist/tex/context/base/mkii/type-set.mkii
index 7f34deadaad..7f34deadaad 100644
--- a/Master/texmf-dist/tex/context/base/type-set.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-set.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-siz.mkii b/Master/texmf-dist/tex/context/base/mkii/type-siz.mkii
index 4c3cfb28b0e..4c3cfb28b0e 100644
--- a/Master/texmf-dist/tex/context/base/type-siz.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-siz.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.mkii b/Master/texmf-dist/tex/context/base/mkii/type-tmf.mkii
index 829b6baec99..829b6baec99 100644
--- a/Master/texmf-dist/tex/context/base/type-tmf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/type-tmf.mkii
diff --git a/Master/texmf-dist/tex/context/base/typo-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/typo-ini.mkii
index 6e19fb9b670..6e19fb9b670 100644
--- a/Master/texmf-dist/tex/context/base/typo-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/typo-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-000.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-000.mkii
index 4ef57044520..4ef57044520 100644
--- a/Master/texmf-dist/tex/context/base/unic-000.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-000.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-001.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-001.mkii
index 198a8d98d1b..198a8d98d1b 100644
--- a/Master/texmf-dist/tex/context/base/unic-001.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-001.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-002.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-002.mkii
index 906975f8691..906975f8691 100644
--- a/Master/texmf-dist/tex/context/base/unic-002.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-002.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-003.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-003.mkii
index ad7d6df6a8f..ad7d6df6a8f 100644
--- a/Master/texmf-dist/tex/context/base/unic-003.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-003.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-004.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-004.mkii
index 7b413cdb91f..7b413cdb91f 100644
--- a/Master/texmf-dist/tex/context/base/unic-004.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-004.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-005.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-005.mkii
index e21edb20584..e21edb20584 100644
--- a/Master/texmf-dist/tex/context/base/unic-005.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-005.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-030.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-030.mkii
index 0065a738a3b..0065a738a3b 100644
--- a/Master/texmf-dist/tex/context/base/unic-030.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-030.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-031.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-031.mkii
index 68d1633249b..68d1633249b 100644
--- a/Master/texmf-dist/tex/context/base/unic-031.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-031.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-032.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-032.mkii
index 6bd176c8071..6bd176c8071 100644
--- a/Master/texmf-dist/tex/context/base/unic-032.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-032.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-033.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-033.mkii
index ad7a3b11ff0..ad7a3b11ff0 100644
--- a/Master/texmf-dist/tex/context/base/unic-033.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-033.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-034.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-034.mkii
index f998c517070..f998c517070 100644
--- a/Master/texmf-dist/tex/context/base/unic-034.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-034.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-035.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-035.mkii
index 0c949017468..0c949017468 100644
--- a/Master/texmf-dist/tex/context/base/unic-035.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-035.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-037.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-037.mkii
index 646a4afb299..646a4afb299 100644
--- a/Master/texmf-dist/tex/context/base/unic-037.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-037.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-039.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-039.mkii
index 02d5d3af24f..02d5d3af24f 100644
--- a/Master/texmf-dist/tex/context/base/unic-039.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-039.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-251.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-251.mkii
index 909cf5e9473..909cf5e9473 100644
--- a/Master/texmf-dist/tex/context/base/unic-251.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-251.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-cjk.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-cjk.mkii
index dc06e912ceb..dc06e912ceb 100644
--- a/Master/texmf-dist/tex/context/base/unic-cjk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-cjk.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-exp.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-exp.mkii
index 4bdda3f6fe8..4bdda3f6fe8 100644
--- a/Master/texmf-dist/tex/context/base/unic-exp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-exp.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-ini.mkii
index 96aed77bcd8..96aed77bcd8 100644
--- a/Master/texmf-dist/tex/context/base/unic-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/unic-run.mkii b/Master/texmf-dist/tex/context/base/mkii/unic-run.mkii
index 96348d8a792..96348d8a792 100644
--- a/Master/texmf-dist/tex/context/base/unic-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/unic-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-c.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-c.mkii
index 930977ca4f6..930977ca4f6 100644
--- a/Master/texmf-dist/tex/context/base/verb-c.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-c.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-eif.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-eif.mkii
index 68c84d4bef4..68c84d4bef4 100644
--- a/Master/texmf-dist/tex/context/base/verb-eif.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-eif.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-ini.mkii
index 5a817b4bb91..5a817b4bb91 100644
--- a/Master/texmf-dist/tex/context/base/verb-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-js.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-js.mkii
index c249bd9bb2c..c249bd9bb2c 100644
--- a/Master/texmf-dist/tex/context/base/verb-js.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-js.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-jv.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-jv.mkii
index 2149c3a4abc..2149c3a4abc 100644
--- a/Master/texmf-dist/tex/context/base/verb-jv.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-jv.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-mp.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-mp.mkii
index aef52217d8c..aef52217d8c 100644
--- a/Master/texmf-dist/tex/context/base/verb-mp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-mp.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-pas.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-pas.mkii
index 71c0b5a1252..71c0b5a1252 100644
--- a/Master/texmf-dist/tex/context/base/verb-pas.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-pas.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-pl.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-pl.mkii
index 634a0a3142a..634a0a3142a 100644
--- a/Master/texmf-dist/tex/context/base/verb-pl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-pl.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-raw.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-raw.mkii
index 43a0891a039..43a0891a039 100644
--- a/Master/texmf-dist/tex/context/base/verb-raw.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-raw.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-sql.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-sql.mkii
index f145607f819..f145607f819 100644
--- a/Master/texmf-dist/tex/context/base/verb-sql.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-sql.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-tex.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-tex.mkii
index 98655cc2d8a..98655cc2d8a 100644
--- a/Master/texmf-dist/tex/context/base/verb-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-tex.mkii
diff --git a/Master/texmf-dist/tex/context/base/verb-xml.mkii b/Master/texmf-dist/tex/context/base/mkii/verb-xml.mkii
index dbf6635f655..dbf6635f655 100644
--- a/Master/texmf-dist/tex/context/base/verb-xml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/verb-xml.mkii
diff --git a/Master/texmf-dist/tex/context/base/xetx-chr.mkii b/Master/texmf-dist/tex/context/base/mkii/xetx-chr.mkii
index 31f15a0cbac..ca9c4aaa440 100644
--- a/Master/texmf-dist/tex/context/base/xetx-chr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xetx-chr.mkii
@@ -1,4 +1,4 @@
-% filename : xetx-chr.tex
+% filename : xetx-chr.mkii
% comment : generated by mtxrun --script chars --xtx
% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
% copyright: PRAGMA ADE / ConTeXt Development Team
@@ -15,7 +15,6 @@
\def\textbar {\char"0007C } % VERTICAL LINE: |
\def\textbraceright {\char"0007D } % RIGHT CURLY BRACKET: }
\def\textasciitilde {\char"0007E } % TILDE: ~
-\def\nobreakspace {\char"000A0 } % NO-BREAK SPACE:  
\def\exclamdown {\char"000A1 } % INVERTED EXCLAMATION MARK: ¡
\def\textcent {\char"000A2 } % CENT SIGN: ¢
\def\textsterling {\char"000A3 } % POUND SIGN: £
@@ -1068,16 +1067,8 @@
\def\greekOmegaiotasub {\char"01FFC } % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI: ῼ
\def\greekoxia {\char"01FFD } % GREEK OXIA: ´
\def\greekdasia {\char"01FFE } % GREEK DASIA: ῾
-\def\enspace {\char"02002 } % EN SPACE:  
-\def\emspace {\char"02003 } % EM SPACE:  
-\def\threeperemspace {\char"02004 } % THREE-PER-EM SPACE:  
-\def\fourperemspace {\char"02005 } % FOUR-PER-EM SPACE:  
-\def\sixperemspace {\char"02006 } % SIX-PER-EM SPACE:  
-\def\figurespace {\char"02007 } % FIGURE SPACE:  
-\def\punctuationspace {\char"02008 } % PUNCTUATION SPACE:  
-\def\thinspace {\char"02009 } % THIN SPACE:  
-\def\figurespace {\char"0200A } % HAIR SPACE:  
-\def\zerowidthspace {\char"0200B } % ZERO WIDTH SPACE: ​
+\def\zwnj {\char"0200C } % ZERO WIDTH NON-JOINER: ‌
+\def\zwj {\char"0200D } % ZERO WIDTH JOINER: ‍
\def\textminus {\char"02012 } % FIGURE DASH: ‒
\def\endash {\char"02013 } % EN DASH: –
\def\emdash {\char"02014 } % EM DASH: —
@@ -1092,12 +1083,10 @@
\def\textddag {\char"02021 } % DOUBLE DAGGER: ‡
\def\textbullet {\char"02022 } % BULLET: •
\def\textellipsis {\char"02026 } % HORIZONTAL ELLIPSIS: …
-\def\narrownobreakspace {\char"0202F } % NARROW NO-BREAK SPACE:  
\def\perthousand {\char"02030 } % PER MILLE SIGN: ‰
\def\guilsingleleft {\char"02039 } % SINGLE LEFT-POINTING ANGLE QUOTATION MARK: ‹
\def\guilsingleright {\char"0203A } % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK: ›
\def\textfraction {\char"02044 } % FRACTION SLASH: ⁄
-\def\medspace {\char"0205F } % MEDIUM MATHEMATICAL SPACE:  
\def\textdong {\char"020AB } % DONG SIGN: ₫
\def\texteuro {\char"020AC } % EURO SIGN: €
\def\textcelsius {\char"02103 } % DEGREE CELSIUS: ℃
@@ -1154,14 +1143,11 @@
\def\romand {\char"0217E } % SMALL ROMAN NUMERAL FIVE HUNDRED: ⅾ
\def\romanm {\char"0217F } % SMALL ROMAN NUMERAL ONE THOUSAND: ⅿ
\def\carriagereturn {\char"021B5 } % DOWNWARDS ARROW WITH CORNER LEFTWARDS: ↵
-\def\ideographicspace {\char"03000 } % IDEOGRAPHIC SPACE:  
-\def\ideographichalffillspace {\char"0303F } % IDEOGRAPHIC HALF FILL SPACE: 〿
\def\ffligature {\char"0FB00 } % LATIN SMALL LIGATURE FF: ff
\def\filigature {\char"0FB01 } % LATIN SMALL LIGATURE FI: fi
\def\flligature {\char"0FB02 } % LATIN SMALL LIGATURE FL: fl
\def\ffiligature {\char"0FB03 } % LATIN SMALL LIGATURE FFI: ffi
\def\fflligature {\char"0FB04 } % LATIN SMALL LIGATURE FFL: ffl
\def\stligature {\char"0FB06 } % LATIN SMALL LIGATURE ST: st
-\def\zerowidthnobreakspace {\char"0FEFF } % ZERO WIDTH NO-BREAK SPACE: 
\endinput
diff --git a/Master/texmf-dist/tex/context/base/xetx-cls.mkii b/Master/texmf-dist/tex/context/base/mkii/xetx-cls.mkii
index 6ce696f716a..9142f39e5c7 100644
--- a/Master/texmf-dist/tex/context/base/xetx-cls.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xetx-cls.mkii
@@ -1,4 +1,4 @@
-% filename : xetx-cls.tex
+% filename : xetx-cls.mkii
% comment : generated by mtxrun --script chars --xtx
% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
% copyright: PRAGMA ADE / ConTeXt Development Team
@@ -7,29 +7,29 @@
% some character classes for xetex; seems to be rather hard coded, these numbers
% and also a mix of several classes; here we do linebreaks
-\defineXTXcharinjectionclass[lb:cl]
-\defineXTXcharinjectionclass[lb:ex]
-\defineXTXcharinjectionclass[lb:ns]
\defineXTXcharinjectionclass[lb:id]
-\defineXTXcharinjectionclass[lb:op]
+\defineXTXcharinjectionclass[lb:cl]
\defineXTXcharinjectionclass[lb:cm]
\defineXTXcharinjectionclass[lb:is]
+\defineXTXcharinjectionclass[lb:ex]
+\defineXTXcharinjectionclass[lb:op]
+\defineXTXcharinjectionclass[lb:ns]
\dofastrecurse{"00000}{"00008}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0000E}{"0001F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00021}{lb:ex}
\dosetXTXcharacterclass{"00028}{lb:op}
-\dosetXTXcharacterclass{"00029}{lb:cl}
\dosetXTXcharacterclass{"0002C}{lb:is}
\dosetXTXcharacterclass{"0002E}{lb:is}
\dofastrecurse{"0003A}{"0003B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:is}}
\dosetXTXcharacterclass{"0003F}{lb:ex}
\dosetXTXcharacterclass{"0005B}{lb:op}
-\dosetXTXcharacterclass{"0005D}{lb:cl}
\dosetXTXcharacterclass{"0007B}{lb:op}
\dosetXTXcharacterclass{"0007D}{lb:cl}
\dofastrecurse{"0007F}{"00084}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00086}{"0009F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"000A1}{lb:op}
+\dosetXTXcharacterclass{"000BF}{lb:op}
\dofastrecurse{"00300}{"0034E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00350}{"0035B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00363}{"0036F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
@@ -42,16 +42,16 @@
\dofastrecurse{"005C4}{"005C5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"005C6}{lb:ex}
\dosetXTXcharacterclass{"005C7}{lb:cm}
-\dosetXTXcharacterclass{"0060C}{lb:ex}
-\dosetXTXcharacterclass{"0060D}{lb:is}
-\dofastrecurse{"00610}{"00615}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"0061B}{"0061F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
-\dofastrecurse{"0064B}{"0065E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dosetXTXcharacterclass{"0066A}{lb:ex}
+\dofastrecurse{"0060C}{"0060D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:is}}
+\dofastrecurse{"00610}{"0061A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"0061B}{lb:ex}
+\dosetXTXcharacterclass{"0061C}{lb:cm}
+\dofastrecurse{"0061E}{"0061F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
+\dofastrecurse{"0064B}{"0065F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00670}{lb:cm}
\dosetXTXcharacterclass{"006D4}{lb:ex}
\dofastrecurse{"006D6}{"006DC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"006DE}{"006E4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"006DF}{"006E4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"006E7}{"006E8}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"006EA}{"006ED}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00711}{lb:cm}
@@ -60,10 +60,15 @@
\dofastrecurse{"007EB}{"007F3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"007F8}{lb:is}
\dosetXTXcharacterclass{"007F9}{lb:ex}
-\dofastrecurse{"00901}{"00903}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dosetXTXcharacterclass{"0093C}{lb:cm}
-\dofastrecurse{"0093E}{"0094D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00951}{"00954}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00816}{"00819}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0081B}{"00823}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00825}{"00827}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00829}{"0082D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00859}{"0085B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"008E3}{"00903}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0093A}{"0093C}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0093E}{"0094F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00951}{"00957}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00962}{"00963}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00981}{"00983}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"009BC}{lb:cm}
@@ -71,27 +76,33 @@
\dosetXTXcharacterclass{"009D7}{lb:cm}
\dofastrecurse{"009E2}{"009E3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00A01}{"00A03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00A3C}{"00A4D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00A3C}{"00A51}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00A70}{"00A71}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00A81}{"00A83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00A75}{"00A83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00ABC}{lb:cm}
\dofastrecurse{"00ABE}{"00ACD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00AE2}{"00AE3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00B01}{"00B03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00B3C}{lb:cm}
\dofastrecurse{"00B3E}{"00B57}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00B62}{"00B63}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00B82}{lb:cm}
-\dofastrecurse{"00BBE}{"00BD7}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00C01}{"00C03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00BBE}{"00BCD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"00BD7}{lb:cm}
+\dofastrecurse{"00C00}{"00C03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00C3E}{"00C56}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00C82}{"00C83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00C62}{"00C63}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00C81}{"00C83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00CBC}{lb:cm}
\dofastrecurse{"00CBE}{"00CD6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00CE2}{"00CE3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00D02}{"00D03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00D3E}{"00D57}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00D01}{"00D03}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00D3E}{"00D4D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"00D57}{lb:cm}
+\dofastrecurse{"00D62}{"00D63}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00D82}{"00D83}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00DCA}{"00DF3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00DCA}{"00DDF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00DF2}{"00DF3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00F0D}{"00F11}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
\dosetXTXcharacterclass{"00F14}{lb:ex}
\dofastrecurse{"00F18}{"00F19}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
@@ -106,9 +117,9 @@
\dofastrecurse{"00F71}{"00F7E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00F80}{"00F84}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"00F86}{"00F87}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"00F90}{"00FBC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"00F8D}{"00FBC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"00FC6}{lb:cm}
-\dosetXTXcharacterclass{"0135F}{lb:cm}
+\dofastrecurse{"0135D}{"0135F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"0169B}{lb:op}
\dosetXTXcharacterclass{"0169C}{lb:cl}
\dofastrecurse{"01712}{"01714}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
@@ -116,14 +127,26 @@
\dofastrecurse{"01752}{"01753}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"01772}{"01773}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"017D6}{lb:ns}
+\dofastrecurse{"01802}{"01803}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
+\dofastrecurse{"01808}{"01809}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
\dofastrecurse{"0180B}{"0180D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"018A9}{lb:cm}
\dofastrecurse{"01920}{"0193B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"01944}{"01945}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
\dofastrecurse{"01A17}{"01A1B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"01B00}{"01B04}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"01A7F}{lb:cm}
+\dofastrecurse{"01AB0}{"01B04}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"01B34}{"01B44}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"01B6B}{"01B73}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01B80}{"01B82}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01BA1}{"01BAD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01BE6}{"01BF3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01C24}{"01C37}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01CD0}{"01CD2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01CD4}{"01CE8}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"01CED}{lb:cm}
+\dofastrecurse{"01CF2}{"01CF4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"01CF8}{"01CF9}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"01DC0}{"01DFF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0200C}{"0200F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"0201A}{lb:op}
@@ -134,14 +157,39 @@
\dosetXTXcharacterclass{"02045}{lb:op}
\dosetXTXcharacterclass{"02046}{lb:cl}
\dofastrecurse{"02047}{"02049}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
-\dofastrecurse{"0206A}{"0206F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"02066}{"0206F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"0207D}{lb:op}
\dosetXTXcharacterclass{"0207E}{lb:cl}
\dosetXTXcharacterclass{"0208D}{lb:op}
\dosetXTXcharacterclass{"0208E}{lb:cl}
-\dofastrecurse{"020D0}{"020EF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"020D0}{"020F0}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"02308}{lb:op}
+\dosetXTXcharacterclass{"02309}{lb:cl}
+\dosetXTXcharacterclass{"0230A}{lb:op}
+\dosetXTXcharacterclass{"0230B}{lb:cl}
+\dofastrecurse{"0231A}{"0231B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dosetXTXcharacterclass{"02329}{lb:op}
\dosetXTXcharacterclass{"0232A}{lb:cl}
+\dofastrecurse{"023F0}{"023F3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"02600}{"02603}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"02614}{"02615}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"02618}{lb:id}
+\dofastrecurse{"0261A}{"0261F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"02639}{"0263B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"02668}{lb:id}
+\dosetXTXcharacterclass{"0267F}{lb:id}
+\dofastrecurse{"026BD}{"026C8}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"026CD}{lb:id}
+\dofastrecurse{"026CF}{"026D1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"026D3}{"026D4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"026D8}{"026D9}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"026DC}{lb:id}
+\dofastrecurse{"026DF}{"026E1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"026EA}{lb:id}
+\dofastrecurse{"026F1}{"026F5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"026F7}{"026FA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"026FD}{"02704}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"02708}{"0270D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"02762}{"02763}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
\dosetXTXcharacterclass{"02768}{lb:op}
\dosetXTXcharacterclass{"02769}{lb:cl}
@@ -165,6 +213,10 @@
\dosetXTXcharacterclass{"027E9}{lb:cl}
\dosetXTXcharacterclass{"027EA}{lb:op}
\dosetXTXcharacterclass{"027EB}{lb:cl}
+\dosetXTXcharacterclass{"027EC}{lb:op}
+\dosetXTXcharacterclass{"027ED}{lb:cl}
+\dosetXTXcharacterclass{"027EE}{lb:op}
+\dosetXTXcharacterclass{"027EF}{lb:cl}
\dosetXTXcharacterclass{"02983}{lb:op}
\dosetXTXcharacterclass{"02984}{lb:cl}
\dosetXTXcharacterclass{"02985}{lb:op}
@@ -193,7 +245,23 @@
\dosetXTXcharacterclass{"029DB}{lb:cl}
\dosetXTXcharacterclass{"029FC}{lb:op}
\dosetXTXcharacterclass{"029FD}{lb:cl}
-\dofastrecurse{"02E80}{"03000}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"02CEF}{"02CF1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"02CF9}{lb:ex}
+\dosetXTXcharacterclass{"02CFE}{lb:ex}
+\dosetXTXcharacterclass{"02D7F}{lb:cm}
+\dofastrecurse{"02DE0}{"02DFF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"02E18}{lb:op}
+\dosetXTXcharacterclass{"02E22}{lb:op}
+\dosetXTXcharacterclass{"02E23}{lb:cl}
+\dosetXTXcharacterclass{"02E24}{lb:op}
+\dosetXTXcharacterclass{"02E25}{lb:cl}
+\dosetXTXcharacterclass{"02E26}{lb:op}
+\dosetXTXcharacterclass{"02E27}{lb:cl}
+\dosetXTXcharacterclass{"02E28}{lb:op}
+\dosetXTXcharacterclass{"02E29}{lb:cl}
+\dosetXTXcharacterclass{"02E2E}{lb:ex}
+\dosetXTXcharacterclass{"02E42}{lb:op}
+\dofastrecurse{"02E80}{"02FFB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"03001}{"03002}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
\dofastrecurse{"03003}{"03004}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dosetXTXcharacterclass{"03005}{lb:ns}
@@ -222,71 +290,72 @@
\dofastrecurse{"0301E}{"0301F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
\dofastrecurse{"03020}{"03029}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"0302A}{"0302F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"03030}{"0303A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"03030}{"03034}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"03035}{lb:cm}
+\dofastrecurse{"03036}{"0303A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"0303B}{"0303C}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dofastrecurse{"0303D}{"0303F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"03041}{lb:ns}
\dosetXTXcharacterclass{"03042}{lb:id}
-\dosetXTXcharacterclass{"03043}{lb:ns}
\dosetXTXcharacterclass{"03044}{lb:id}
-\dosetXTXcharacterclass{"03045}{lb:ns}
\dosetXTXcharacterclass{"03046}{lb:id}
-\dosetXTXcharacterclass{"03047}{lb:ns}
\dosetXTXcharacterclass{"03048}{lb:id}
-\dosetXTXcharacterclass{"03049}{lb:ns}
\dofastrecurse{"0304A}{"03062}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"03063}{lb:ns}
\dofastrecurse{"03064}{"03082}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"03083}{lb:ns}
\dosetXTXcharacterclass{"03084}{lb:id}
-\dosetXTXcharacterclass{"03085}{lb:ns}
\dosetXTXcharacterclass{"03086}{lb:id}
-\dosetXTXcharacterclass{"03087}{lb:ns}
\dofastrecurse{"03088}{"0308D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"0308E}{lb:ns}
\dofastrecurse{"0308F}{"03094}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"03095}{"03096}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dofastrecurse{"03099}{"0309A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0309B}{"0309E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dosetXTXcharacterclass{"0309F}{lb:id}
-\dofastrecurse{"030A0}{"030A1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
+\dosetXTXcharacterclass{"030A0}{lb:ns}
\dosetXTXcharacterclass{"030A2}{lb:id}
-\dosetXTXcharacterclass{"030A3}{lb:ns}
\dosetXTXcharacterclass{"030A4}{lb:id}
-\dosetXTXcharacterclass{"030A5}{lb:ns}
\dosetXTXcharacterclass{"030A6}{lb:id}
-\dosetXTXcharacterclass{"030A7}{lb:ns}
\dosetXTXcharacterclass{"030A8}{lb:id}
-\dosetXTXcharacterclass{"030A9}{lb:ns}
\dofastrecurse{"030AA}{"030C2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"030C3}{lb:ns}
\dofastrecurse{"030C4}{"030E2}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"030E3}{lb:ns}
\dosetXTXcharacterclass{"030E4}{lb:id}
-\dosetXTXcharacterclass{"030E5}{lb:ns}
\dosetXTXcharacterclass{"030E6}{lb:id}
-\dosetXTXcharacterclass{"030E7}{lb:ns}
\dofastrecurse{"030E8}{"030ED}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dosetXTXcharacterclass{"030EE}{lb:ns}
\dofastrecurse{"030EF}{"030F4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"030F5}{"030F6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dofastrecurse{"030F7}{"030FA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"030FB}{"030FE}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
-\dofastrecurse{"030FF}{"031CF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"031F0}{"031FF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
-\dofastrecurse{"03200}{"03400}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"04E00}{"0A014}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"030FB}{lb:ns}
+\dofastrecurse{"030FD}{"030FE}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
+\dofastrecurse{"030FF}{"031E3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"03200}{"03247}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"03250}{"033FF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"0A000}{"0A014}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dosetXTXcharacterclass{"0A015}{lb:ns}
\dofastrecurse{"0A016}{"0A4C6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"0A60E}{lb:ex}
+\dofastrecurse{"0A66F}{"0A672}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A674}{"0A67D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A69E}{"0A69F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A6F0}{"0A6F1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"0A802}{lb:cm}
\dosetXTXcharacterclass{"0A806}{lb:cm}
\dosetXTXcharacterclass{"0A80B}{lb:cm}
\dofastrecurse{"0A823}{"0A827}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0A876}{"0A877}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
+\dofastrecurse{"0A880}{"0A881}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A8B4}{"0A8C4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A8E0}{"0A8F1}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A926}{"0A92D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A947}{"0A953}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A980}{"0A983}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0A9B3}{"0A9C0}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0AA29}{"0AA36}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"0AA43}{lb:cm}
+\dofastrecurse{"0AA4C}{"0AA4D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0AAEB}{"0AAEF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0AAF5}{"0AAF6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0ABE3}{"0ABEA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0ABEC}{"0ABED}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0F900}{"0FAD9}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dosetXTXcharacterclass{"0FB1E}{lb:cm}
-\dosetXTXcharacterclass{"0FD3E}{lb:op}
-\dosetXTXcharacterclass{"0FD3F}{lb:cl}
+\dosetXTXcharacterclass{"0FD3E}{lb:cl}
+\dosetXTXcharacterclass{"0FD3F}{lb:op}
\dofastrecurse{"0FE00}{"0FE0F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dosetXTXcharacterclass{"0FE10}{lb:is}
\dofastrecurse{"0FE11}{"0FE12}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
@@ -294,7 +363,7 @@
\dofastrecurse{"0FE15}{"0FE16}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
\dosetXTXcharacterclass{"0FE17}{lb:op}
\dosetXTXcharacterclass{"0FE18}{lb:cl}
-\dofastrecurse{"0FE20}{"0FE23}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"0FE20}{"0FE2F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"0FE30}{"0FE34}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dosetXTXcharacterclass{"0FE35}{lb:op}
\dosetXTXcharacterclass{"0FE36}{lb:cl}
@@ -357,22 +426,86 @@
\dosetXTXcharacterclass{"0FF62}{lb:op}
\dofastrecurse{"0FF63}{"0FF64}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
\dosetXTXcharacterclass{"0FF65}{lb:ns}
-\dofastrecurse{"0FF67}{"0FF70}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dofastrecurse{"0FF9E}{"0FF9F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
\dofastrecurse{"0FFE2}{"0FFE4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"0FFF9}{"0FFFB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"101FD}{lb:cm}
+\dosetXTXcharacterclass{"102E0}{lb:cm}
+\dofastrecurse{"10376}{"1037A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"10A01}{"10A0F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"10A38}{"10A3F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"10AE5}{"10AE6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11000}{"11002}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11038}{"11046}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1107F}{"11082}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"110B0}{"110BA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11100}{"11102}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11127}{"11134}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"11173}{lb:cm}
+\dofastrecurse{"11180}{"11182}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"111B3}{"111C0}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"111CA}{"111CC}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1122C}{"11237}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"112DF}{"112EA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11300}{"11303}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"1133C}{lb:cm}
+\dofastrecurse{"1133E}{"1134D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"11357}{lb:cm}
+\dofastrecurse{"11362}{"11374}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"114B0}{"114C3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"115AF}{"115C0}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"115C4}{"115C5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ex}}
+\dofastrecurse{"115DC}{"115DD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"11630}{"11640}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"116AB}{"116B7}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"13258}{"1325A}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:op}}
+\dofastrecurse{"1325B}{"1325D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
+\dosetXTXcharacterclass{"13282}{lb:cl}
+\dosetXTXcharacterclass{"13286}{lb:op}
+\dosetXTXcharacterclass{"13287}{lb:cl}
+\dosetXTXcharacterclass{"13288}{lb:op}
+\dosetXTXcharacterclass{"13289}{lb:cl}
+\dosetXTXcharacterclass{"13379}{lb:op}
+\dofastrecurse{"1337A}{"1337B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cl}}
+\dosetXTXcharacterclass{"145CE}{lb:op}
+\dosetXTXcharacterclass{"145CF}{lb:cl}
+\dofastrecurse{"16AF0}{"16AF4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"16B30}{"16B36}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"16F51}{"16F92}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1B000}{"1B001}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1BC9D}{"1BC9E}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1BCA0}{"1BCA3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"1D165}{"1D169}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"1D16D}{"1D182}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"1D185}{"1D18B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"1D1AA}{"1D1AD}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
\dofastrecurse{"1D242}{"1D244}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"20000}{"2FA1D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1DA00}{"1DA36}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1DA3B}{"1DA6C}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dosetXTXcharacterclass{"1DA75}{lb:cm}
+\dosetXTXcharacterclass{"1DA84}{lb:cm}
+\dofastrecurse{"1DA9B}{"1DAAF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1E8D0}{"1E8D6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
+\dofastrecurse{"1F000}{"1F0F5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F200}{"1F39B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F39E}{"1F3B4}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F3B7}{"1F3BB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F3BD}{"1F3FA}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F400}{"1F49F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"1F4A1}{lb:id}
+\dosetXTXcharacterclass{"1F4A3}{lb:id}
+\dofastrecurse{"1F4A5}{"1F4AE}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dosetXTXcharacterclass{"1F4B0}{lb:id}
+\dofastrecurse{"1F4B3}{"1F4FF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F507}{"1F516}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F525}{"1F531}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F54A}{"1F5D3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F5DC}{"1F5F3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F5FA}{"1F64F}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F679}{"1F67B}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:ns}}
+\dofastrecurse{"1F680}{"1F6F3}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
+\dofastrecurse{"1F910}{"2FA1D}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\dofastrecurse{"E0001}{"E01EF}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:cm}}
-\dofastrecurse{"03400}{"04DB5}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"04E00}{"09FBB}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
-\dofastrecurse{"20000}{"2A6D6}{1}{\dosetXTXcharacterclass\fastrecursecounter{lb:id}}
\endinput
diff --git a/Master/texmf-dist/tex/context/base/xetx-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/xetx-ini.mkii
index 55155fa1af2..55155fa1af2 100644
--- a/Master/texmf-dist/tex/context/base/xetx-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xetx-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/xetx-utf.mkii b/Master/texmf-dist/tex/context/base/mkii/xetx-utf.mkii
index a337c9e7601..a157a2d11e4 100644
--- a/Master/texmf-dist/tex/context/base/xetx-utf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xetx-utf.mkii
@@ -1,4 +1,4 @@
-% filename : xetx-utf.tex
+% filename : xetx-utf.mkii
% comment : generated by mtxrun --script chars --xtx
% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
% copyright: PRAGMA ADE / ConTeXt Development Team
@@ -549,9 +549,16 @@
\setXTXcharcodes "002AD "002AD "002AD % LATIN LETTER BIDENTAL PERCUSSIVE
\setXTXcharcodes "002AE "002AE "002AE % LATIN SMALL LETTER TURNED H WITH FISHHOOK
\setXTXcharcodes "002AF "002AF "002AF % LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+\setXTXcharcodes "00370 "00370 "00370 % GREEK CAPITAL LETTER HETA
+\setXTXcharcodes "00371 "00371 "00371 % GREEK SMALL LETTER HETA
+\setXTXcharcodes "00372 "00372 "00372 % GREEK CAPITAL LETTER ARCHAIC SAMPI
+\setXTXcharcodes "00373 "00373 "00373 % GREEK SMALL LETTER ARCHAIC SAMPI
+\setXTXcharcodes "00376 "00376 "00376 % GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+\setXTXcharcodes "00377 "00377 "00377 % GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
\setXTXcharcodes "0037B "0037B "003FD % GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
\setXTXcharcodes "0037C "0037C "003FE % GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
\setXTXcharcodes "0037D "0037D "003FF % GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+\setXTXcharcodes "0037F "0037F "0037F % GREEK CAPITAL LETTER YOT
\setXTXcharcodes "00386 "003AC "00386 % GREEK CAPITAL LETTER ALPHA WITH TONOS
\setXTXcharcodes "00388 "003AD "00388 % GREEK CAPITAL LETTER EPSILON WITH TONOS
\setXTXcharcodes "00389 "003AE "00389 % GREEK CAPITAL LETTER ETA WITH TONOS
@@ -621,6 +628,7 @@
\setXTXcharcodes "003CC "003CC "0038C % GREEK SMALL LETTER OMICRON WITH TONOS
\setXTXcharcodes "003CD "003CD "0038E % GREEK SMALL LETTER UPSILON WITH TONOS
\setXTXcharcodes "003CE "003CE "0038F % GREEK SMALL LETTER OMEGA WITH TONOS
+\setXTXcharcodes "003CF "003CF "003CF % GREEK CAPITAL KAI SYMBOL
\setXTXcharcodes "003D0 "003D0 "00392 % GREEK BETA SYMBOL
\setXTXcharcodes "003D1 "003D1 "00398 % GREEK THETA SYMBOL
\setXTXcharcodes "003D2 "003D2 "003D2 % GREEK UPSILON WITH HOOK SYMBOL
@@ -936,6 +944,34 @@
\setXTXcharcodes "00511 "00511 "00510 % CYRILLIC SMALL LETTER REVERSED ZE
\setXTXcharcodes "00512 "00513 "00512 % CYRILLIC CAPITAL LETTER EL WITH HOOK
\setXTXcharcodes "00513 "00513 "00512 % CYRILLIC SMALL LETTER EL WITH HOOK
+\setXTXcharcodes "00514 "00514 "00514 % CYRILLIC CAPITAL LETTER LHA
+\setXTXcharcodes "00515 "00515 "00515 % CYRILLIC SMALL LETTER LHA
+\setXTXcharcodes "00516 "00516 "00516 % CYRILLIC CAPITAL LETTER RHA
+\setXTXcharcodes "00517 "00517 "00517 % CYRILLIC SMALL LETTER RHA
+\setXTXcharcodes "00518 "00518 "00518 % CYRILLIC CAPITAL LETTER YAE
+\setXTXcharcodes "00519 "00519 "00519 % CYRILLIC SMALL LETTER YAE
+\setXTXcharcodes "0051A "0051A "0051A % CYRILLIC CAPITAL LETTER QA
+\setXTXcharcodes "0051B "0051B "0051B % CYRILLIC SMALL LETTER QA
+\setXTXcharcodes "0051C "0051C "0051C % CYRILLIC CAPITAL LETTER WE
+\setXTXcharcodes "0051D "0051D "0051D % CYRILLIC SMALL LETTER WE
+\setXTXcharcodes "0051E "0051E "0051E % CYRILLIC CAPITAL LETTER ALEUT KA
+\setXTXcharcodes "0051F "0051F "0051F % CYRILLIC SMALL LETTER ALEUT KA
+\setXTXcharcodes "00520 "00520 "00520 % CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+\setXTXcharcodes "00521 "00521 "00521 % CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+\setXTXcharcodes "00522 "00522 "00522 % CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+\setXTXcharcodes "00523 "00523 "00523 % CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+\setXTXcharcodes "00524 "00524 "00524 % CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+\setXTXcharcodes "00525 "00525 "00525 % CYRILLIC SMALL LETTER PE WITH DESCENDER
+\setXTXcharcodes "00526 "00526 "00526 % CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+\setXTXcharcodes "00527 "00527 "00527 % CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+\setXTXcharcodes "00528 "00528 "00528 % CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+\setXTXcharcodes "00529 "00529 "00529 % CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+\setXTXcharcodes "0052A "0052A "0052A % CYRILLIC CAPITAL LETTER DZZHE
+\setXTXcharcodes "0052B "0052B "0052B % CYRILLIC SMALL LETTER DZZHE
+\setXTXcharcodes "0052C "0052C "0052C % CYRILLIC CAPITAL LETTER DCHE
+\setXTXcharcodes "0052D "0052D "0052D % CYRILLIC SMALL LETTER DCHE
+\setXTXcharcodes "0052E "0052E "0052E % CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+\setXTXcharcodes "0052F "0052F "0052F % CYRILLIC SMALL LETTER EL WITH DESCENDER
\setXTXcharcodes "00531 "00561 "00531 % ARMENIAN CAPITAL LETTER AYB
\setXTXcharcodes "00532 "00562 "00532 % ARMENIAN CAPITAL LETTER BEN
\setXTXcharcodes "00533 "00563 "00533 % ARMENIAN CAPITAL LETTER GIM
@@ -1051,6 +1087,15 @@
\setXTXcharcodes "010C3 "02D23 "010C3 % GEORGIAN CAPITAL LETTER WE
\setXTXcharcodes "010C4 "02D24 "010C4 % GEORGIAN CAPITAL LETTER HAR
\setXTXcharcodes "010C5 "02D25 "010C5 % GEORGIAN CAPITAL LETTER HOE
+\setXTXcharcodes "010C7 "010C7 "010C7 % GEORGIAN CAPITAL LETTER YN
+\setXTXcharcodes "010CD "010CD "010CD % GEORGIAN CAPITAL LETTER AEN
+\setXTXcharcodes "013F5 "013F5 "013F5 % CHEROKEE LETTER MV
+\setXTXcharcodes "013F8 "013F8 "013F8 % CHEROKEE SMALL LETTER YE
+\setXTXcharcodes "013F9 "013F9 "013F9 % CHEROKEE SMALL LETTER YI
+\setXTXcharcodes "013FA "013FA "013FA % CHEROKEE SMALL LETTER YO
+\setXTXcharcodes "013FB "013FB "013FB % CHEROKEE SMALL LETTER YU
+\setXTXcharcodes "013FC "013FC "013FC % CHEROKEE SMALL LETTER YV
+\setXTXcharcodes "013FD "013FD "013FD % CHEROKEE SMALL LETTER MV
\setXTXcharcodes "01D00 "01D00 "01D00 % LATIN LETTER SMALL CAPITAL A
\setXTXcharcodes "01D01 "01D01 "01D01 % LATIN LETTER SMALL CAPITAL AE
\setXTXcharcodes "01D02 "01D02 "01D02 % LATIN SMALL LETTER TURNED AE
@@ -1307,6 +1352,10 @@
\setXTXcharcodes "01E99 "01E99 "01E99 % LATIN SMALL LETTER Y WITH RING ABOVE
\setXTXcharcodes "01E9A "01E9A "01E9A % LATIN SMALL LETTER A WITH RIGHT HALF RING
\setXTXcharcodes "01E9B "01E9B "01E60 % LATIN SMALL LETTER LONG S WITH DOT ABOVE
+\setXTXcharcodes "01E9C "01E9C "01E9C % LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
+\setXTXcharcodes "01E9D "01E9D "01E9D % LATIN SMALL LETTER LONG S WITH HIGH STROKE
+\setXTXcharcodes "01E9E "01E9E "01E9E % LATIN CAPITAL LETTER SHARP S
+\setXTXcharcodes "01E9F "01E9F "01E9F % LATIN SMALL LETTER DELTA
\setXTXcharcodes "01EA0 "01EA1 "01EA0 % LATIN CAPITAL LETTER A WITH DOT BELOW
\setXTXcharcodes "01EA1 "01EA1 "01EA0 % LATIN SMALL LETTER A WITH DOT BELOW
\setXTXcharcodes "01EA2 "01EA3 "01EA2 % LATIN CAPITAL LETTER A WITH HOOK ABOVE
@@ -1397,6 +1446,12 @@
\setXTXcharcodes "01EF7 "01EF7 "01EF6 % LATIN SMALL LETTER Y WITH HOOK ABOVE
\setXTXcharcodes "01EF8 "01EF9 "01EF8 % LATIN CAPITAL LETTER Y WITH TILDE
\setXTXcharcodes "01EF9 "01EF9 "01EF8 % LATIN SMALL LETTER Y WITH TILDE
+\setXTXcharcodes "01EFA "01EFA "01EFA % LATIN CAPITAL LETTER MIDDLE-WELSH LL
+\setXTXcharcodes "01EFB "01EFB "01EFB % LATIN SMALL LETTER MIDDLE-WELSH LL
+\setXTXcharcodes "01EFC "01EFC "01EFC % LATIN CAPITAL LETTER MIDDLE-WELSH V
+\setXTXcharcodes "01EFD "01EFD "01EFD % LATIN SMALL LETTER MIDDLE-WELSH V
+\setXTXcharcodes "01EFE "01EFE "01EFE % LATIN CAPITAL LETTER Y WITH LOOP
+\setXTXcharcodes "01EFF "01EFF "01EFF % LATIN SMALL LETTER Y WITH LOOP
\setXTXcharcodes "01F00 "01F00 "01F08 % GREEK SMALL LETTER ALPHA WITH PSILI
\setXTXcharcodes "01F01 "01F01 "01F09 % GREEK SMALL LETTER ALPHA WITH DASIA
\setXTXcharcodes "01F02 "01F02 "01F0A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
@@ -1768,10 +1823,24 @@
\setXTXcharcodes "02C6A "02C6A "02C69 % LATIN SMALL LETTER K WITH DESCENDER
\setXTXcharcodes "02C6B "02C6C "02C6B % LATIN CAPITAL LETTER Z WITH DESCENDER
\setXTXcharcodes "02C6C "02C6C "02C6B % LATIN SMALL LETTER Z WITH DESCENDER
+\setXTXcharcodes "02C6D "02C6D "02C6D % LATIN CAPITAL LETTER ALPHA
+\setXTXcharcodes "02C6E "02C6E "02C6E % LATIN CAPITAL LETTER M WITH HOOK
+\setXTXcharcodes "02C6F "02C6F "02C6F % LATIN CAPITAL LETTER TURNED A
+\setXTXcharcodes "02C70 "02C70 "02C70 % LATIN CAPITAL LETTER TURNED ALPHA
+\setXTXcharcodes "02C71 "02C71 "02C71 % LATIN SMALL LETTER V WITH RIGHT HOOK
+\setXTXcharcodes "02C72 "02C72 "02C72 % LATIN CAPITAL LETTER W WITH HOOK
+\setXTXcharcodes "02C73 "02C73 "02C73 % LATIN SMALL LETTER W WITH HOOK
\setXTXcharcodes "02C74 "02C74 "02C74 % LATIN SMALL LETTER V WITH CURL
\setXTXcharcodes "02C75 "02C76 "02C75 % LATIN CAPITAL LETTER HALF H
\setXTXcharcodes "02C76 "02C76 "02C75 % LATIN SMALL LETTER HALF H
\setXTXcharcodes "02C77 "02C77 "02C77 % LATIN SMALL LETTER TAILLESS PHI
+\setXTXcharcodes "02C78 "02C78 "02C78 % LATIN SMALL LETTER E WITH NOTCH
+\setXTXcharcodes "02C79 "02C79 "02C79 % LATIN SMALL LETTER TURNED R WITH TAIL
+\setXTXcharcodes "02C7A "02C7A "02C7A % LATIN SMALL LETTER O WITH LOW RING INSIDE
+\setXTXcharcodes "02C7B "02C7B "02C7B % LATIN LETTER SMALL CAPITAL TURNED E
+\setXTXcharcodes "02C7C "02C7C "02C7C % LATIN SUBSCRIPT SMALL LETTER J
+\setXTXcharcodes "02C7E "02C7E "02C7E % LATIN CAPITAL LETTER S WITH SWASH TAIL
+\setXTXcharcodes "02C7F "02C7F "02C7F % LATIN CAPITAL LETTER Z WITH SWASH TAIL
\setXTXcharcodes "02C80 "02C81 "02C80 % COPTIC CAPITAL LETTER ALFA
\setXTXcharcodes "02C81 "02C81 "02C80 % COPTIC SMALL LETTER ALFA
\setXTXcharcodes "02C82 "02C83 "02C82 % COPTIC CAPITAL LETTER VIDA
@@ -1873,6 +1942,12 @@
\setXTXcharcodes "02CE2 "02CE3 "02CE2 % COPTIC CAPITAL LETTER OLD NUBIAN WAU
\setXTXcharcodes "02CE3 "02CE3 "02CE2 % COPTIC SMALL LETTER OLD NUBIAN WAU
\setXTXcharcodes "02CE4 "02CE4 "02CE4 % COPTIC SYMBOL KAI
+\setXTXcharcodes "02CEB "02CEB "02CEB % COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+\setXTXcharcodes "02CEC "02CEC "02CEC % COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+\setXTXcharcodes "02CED "02CED "02CED % COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+\setXTXcharcodes "02CEE "02CEE "02CEE % COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+\setXTXcharcodes "02CF2 "02CF2 "02CF2 % COPTIC CAPITAL LETTER BOHAIRIC KHEI
+\setXTXcharcodes "02CF3 "02CF3 "02CF3 % COPTIC SMALL LETTER BOHAIRIC KHEI
\setXTXcharcodes "02D00 "02D00 "010A0 % GEORGIAN SMALL LETTER AN
\setXTXcharcodes "02D01 "02D01 "010A1 % GEORGIAN SMALL LETTER BAN
\setXTXcharcodes "02D02 "02D02 "010A2 % GEORGIAN SMALL LETTER GAN
@@ -1911,6 +1986,355 @@
\setXTXcharcodes "02D23 "02D23 "010C3 % GEORGIAN SMALL LETTER WE
\setXTXcharcodes "02D24 "02D24 "010C4 % GEORGIAN SMALL LETTER HAR
\setXTXcharcodes "02D25 "02D25 "010C5 % GEORGIAN SMALL LETTER HOE
+\setXTXcharcodes "02D27 "02D27 "02D27 % GEORGIAN SMALL LETTER YN
+\setXTXcharcodes "02D2D "02D2D "02D2D % GEORGIAN SMALL LETTER AEN
+\setXTXcharcodes "0A640 "0A640 "0A640 % CYRILLIC CAPITAL LETTER ZEMLYA
+\setXTXcharcodes "0A641 "0A641 "0A641 % CYRILLIC SMALL LETTER ZEMLYA
+\setXTXcharcodes "0A642 "0A642 "0A642 % CYRILLIC CAPITAL LETTER DZELO
+\setXTXcharcodes "0A643 "0A643 "0A643 % CYRILLIC SMALL LETTER DZELO
+\setXTXcharcodes "0A644 "0A644 "0A644 % CYRILLIC CAPITAL LETTER REVERSED DZE
+\setXTXcharcodes "0A645 "0A645 "0A645 % CYRILLIC SMALL LETTER REVERSED DZE
+\setXTXcharcodes "0A646 "0A646 "0A646 % CYRILLIC CAPITAL LETTER IOTA
+\setXTXcharcodes "0A647 "0A647 "0A647 % CYRILLIC SMALL LETTER IOTA
+\setXTXcharcodes "0A648 "0A648 "0A648 % CYRILLIC CAPITAL LETTER DJERV
+\setXTXcharcodes "0A649 "0A649 "0A649 % CYRILLIC SMALL LETTER DJERV
+\setXTXcharcodes "0A64A "0A64A "0A64A % CYRILLIC CAPITAL LETTER MONOGRAPH UK
+\setXTXcharcodes "0A64B "0A64B "0A64B % CYRILLIC SMALL LETTER MONOGRAPH UK
+\setXTXcharcodes "0A64C "0A64C "0A64C % CYRILLIC CAPITAL LETTER BROAD OMEGA
+\setXTXcharcodes "0A64D "0A64D "0A64D % CYRILLIC SMALL LETTER BROAD OMEGA
+\setXTXcharcodes "0A64E "0A64E "0A64E % CYRILLIC CAPITAL LETTER NEUTRAL YER
+\setXTXcharcodes "0A64F "0A64F "0A64F % CYRILLIC SMALL LETTER NEUTRAL YER
+\setXTXcharcodes "0A650 "0A650 "0A650 % CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+\setXTXcharcodes "0A651 "0A651 "0A651 % CYRILLIC SMALL LETTER YERU WITH BACK YER
+\setXTXcharcodes "0A652 "0A652 "0A652 % CYRILLIC CAPITAL LETTER IOTIFIED YAT
+\setXTXcharcodes "0A653 "0A653 "0A653 % CYRILLIC SMALL LETTER IOTIFIED YAT
+\setXTXcharcodes "0A654 "0A654 "0A654 % CYRILLIC CAPITAL LETTER REVERSED YU
+\setXTXcharcodes "0A655 "0A655 "0A655 % CYRILLIC SMALL LETTER REVERSED YU
+\setXTXcharcodes "0A656 "0A656 "0A656 % CYRILLIC CAPITAL LETTER IOTIFIED A
+\setXTXcharcodes "0A657 "0A657 "0A657 % CYRILLIC SMALL LETTER IOTIFIED A
+\setXTXcharcodes "0A658 "0A658 "0A658 % CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+\setXTXcharcodes "0A659 "0A659 "0A659 % CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+\setXTXcharcodes "0A65A "0A65A "0A65A % CYRILLIC CAPITAL LETTER BLENDED YUS
+\setXTXcharcodes "0A65B "0A65B "0A65B % CYRILLIC SMALL LETTER BLENDED YUS
+\setXTXcharcodes "0A65C "0A65C "0A65C % CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+\setXTXcharcodes "0A65D "0A65D "0A65D % CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+\setXTXcharcodes "0A65E "0A65E "0A65E % CYRILLIC CAPITAL LETTER YN
+\setXTXcharcodes "0A65F "0A65F "0A65F % CYRILLIC SMALL LETTER YN
+\setXTXcharcodes "0A660 "0A660 "0A660 % CYRILLIC CAPITAL LETTER REVERSED TSE
+\setXTXcharcodes "0A661 "0A661 "0A661 % CYRILLIC SMALL LETTER REVERSED TSE
+\setXTXcharcodes "0A662 "0A662 "0A662 % CYRILLIC CAPITAL LETTER SOFT DE
+\setXTXcharcodes "0A663 "0A663 "0A663 % CYRILLIC SMALL LETTER SOFT DE
+\setXTXcharcodes "0A664 "0A664 "0A664 % CYRILLIC CAPITAL LETTER SOFT EL
+\setXTXcharcodes "0A665 "0A665 "0A665 % CYRILLIC SMALL LETTER SOFT EL
+\setXTXcharcodes "0A666 "0A666 "0A666 % CYRILLIC CAPITAL LETTER SOFT EM
+\setXTXcharcodes "0A667 "0A667 "0A667 % CYRILLIC SMALL LETTER SOFT EM
+\setXTXcharcodes "0A668 "0A668 "0A668 % CYRILLIC CAPITAL LETTER MONOCULAR O
+\setXTXcharcodes "0A669 "0A669 "0A669 % CYRILLIC SMALL LETTER MONOCULAR O
+\setXTXcharcodes "0A66A "0A66A "0A66A % CYRILLIC CAPITAL LETTER BINOCULAR O
+\setXTXcharcodes "0A66B "0A66B "0A66B % CYRILLIC SMALL LETTER BINOCULAR O
+\setXTXcharcodes "0A66C "0A66C "0A66C % CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+\setXTXcharcodes "0A66D "0A66D "0A66D % CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+\setXTXcharcodes "0A680 "0A680 "0A680 % CYRILLIC CAPITAL LETTER DWE
+\setXTXcharcodes "0A681 "0A681 "0A681 % CYRILLIC SMALL LETTER DWE
+\setXTXcharcodes "0A682 "0A682 "0A682 % CYRILLIC CAPITAL LETTER DZWE
+\setXTXcharcodes "0A683 "0A683 "0A683 % CYRILLIC SMALL LETTER DZWE
+\setXTXcharcodes "0A684 "0A684 "0A684 % CYRILLIC CAPITAL LETTER ZHWE
+\setXTXcharcodes "0A685 "0A685 "0A685 % CYRILLIC SMALL LETTER ZHWE
+\setXTXcharcodes "0A686 "0A686 "0A686 % CYRILLIC CAPITAL LETTER CCHE
+\setXTXcharcodes "0A687 "0A687 "0A687 % CYRILLIC SMALL LETTER CCHE
+\setXTXcharcodes "0A688 "0A688 "0A688 % CYRILLIC CAPITAL LETTER DZZE
+\setXTXcharcodes "0A689 "0A689 "0A689 % CYRILLIC SMALL LETTER DZZE
+\setXTXcharcodes "0A68A "0A68A "0A68A % CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+\setXTXcharcodes "0A68B "0A68B "0A68B % CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+\setXTXcharcodes "0A68C "0A68C "0A68C % CYRILLIC CAPITAL LETTER TWE
+\setXTXcharcodes "0A68D "0A68D "0A68D % CYRILLIC SMALL LETTER TWE
+\setXTXcharcodes "0A68E "0A68E "0A68E % CYRILLIC CAPITAL LETTER TSWE
+\setXTXcharcodes "0A68F "0A68F "0A68F % CYRILLIC SMALL LETTER TSWE
+\setXTXcharcodes "0A690 "0A690 "0A690 % CYRILLIC CAPITAL LETTER TSSE
+\setXTXcharcodes "0A691 "0A691 "0A691 % CYRILLIC SMALL LETTER TSSE
+\setXTXcharcodes "0A692 "0A692 "0A692 % CYRILLIC CAPITAL LETTER TCHE
+\setXTXcharcodes "0A693 "0A693 "0A693 % CYRILLIC SMALL LETTER TCHE
+\setXTXcharcodes "0A694 "0A694 "0A694 % CYRILLIC CAPITAL LETTER HWE
+\setXTXcharcodes "0A695 "0A695 "0A695 % CYRILLIC SMALL LETTER HWE
+\setXTXcharcodes "0A696 "0A696 "0A696 % CYRILLIC CAPITAL LETTER SHWE
+\setXTXcharcodes "0A697 "0A697 "0A697 % CYRILLIC SMALL LETTER SHWE
+\setXTXcharcodes "0A698 "0A698 "0A698 % CYRILLIC CAPITAL LETTER DOUBLE O
+\setXTXcharcodes "0A699 "0A699 "0A699 % CYRILLIC SMALL LETTER DOUBLE O
+\setXTXcharcodes "0A69A "0A69A "0A69A % CYRILLIC CAPITAL LETTER CROSSED O
+\setXTXcharcodes "0A69B "0A69B "0A69B % CYRILLIC SMALL LETTER CROSSED O
+\setXTXcharcodes "0A722 "0A722 "0A722 % LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+\setXTXcharcodes "0A723 "0A723 "0A723 % LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+\setXTXcharcodes "0A724 "0A724 "0A724 % LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+\setXTXcharcodes "0A725 "0A725 "0A725 % LATIN SMALL LETTER EGYPTOLOGICAL AIN
+\setXTXcharcodes "0A726 "0A726 "0A726 % LATIN CAPITAL LETTER HENG
+\setXTXcharcodes "0A727 "0A727 "0A727 % LATIN SMALL LETTER HENG
+\setXTXcharcodes "0A728 "0A728 "0A728 % LATIN CAPITAL LETTER TZ
+\setXTXcharcodes "0A729 "0A729 "0A729 % LATIN SMALL LETTER TZ
+\setXTXcharcodes "0A72A "0A72A "0A72A % LATIN CAPITAL LETTER TRESILLO
+\setXTXcharcodes "0A72B "0A72B "0A72B % LATIN SMALL LETTER TRESILLO
+\setXTXcharcodes "0A72C "0A72C "0A72C % LATIN CAPITAL LETTER CUATRILLO
+\setXTXcharcodes "0A72D "0A72D "0A72D % LATIN SMALL LETTER CUATRILLO
+\setXTXcharcodes "0A72E "0A72E "0A72E % LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+\setXTXcharcodes "0A72F "0A72F "0A72F % LATIN SMALL LETTER CUATRILLO WITH COMMA
+\setXTXcharcodes "0A730 "0A730 "0A730 % LATIN LETTER SMALL CAPITAL F
+\setXTXcharcodes "0A731 "0A731 "0A731 % LATIN LETTER SMALL CAPITAL S
+\setXTXcharcodes "0A732 "0A732 "0A732 % LATIN CAPITAL LETTER AA
+\setXTXcharcodes "0A733 "0A733 "0A733 % LATIN SMALL LETTER AA
+\setXTXcharcodes "0A734 "0A734 "0A734 % LATIN CAPITAL LETTER AO
+\setXTXcharcodes "0A735 "0A735 "0A735 % LATIN SMALL LETTER AO
+\setXTXcharcodes "0A736 "0A736 "0A736 % LATIN CAPITAL LETTER AU
+\setXTXcharcodes "0A737 "0A737 "0A737 % LATIN SMALL LETTER AU
+\setXTXcharcodes "0A738 "0A738 "0A738 % LATIN CAPITAL LETTER AV
+\setXTXcharcodes "0A739 "0A739 "0A739 % LATIN SMALL LETTER AV
+\setXTXcharcodes "0A73A "0A73A "0A73A % LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+\setXTXcharcodes "0A73B "0A73B "0A73B % LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+\setXTXcharcodes "0A73C "0A73C "0A73C % LATIN CAPITAL LETTER AY
+\setXTXcharcodes "0A73D "0A73D "0A73D % LATIN SMALL LETTER AY
+\setXTXcharcodes "0A73E "0A73E "0A73E % LATIN CAPITAL LETTER REVERSED C WITH DOT
+\setXTXcharcodes "0A73F "0A73F "0A73F % LATIN SMALL LETTER REVERSED C WITH DOT
+\setXTXcharcodes "0A740 "0A740 "0A740 % LATIN CAPITAL LETTER K WITH STROKE
+\setXTXcharcodes "0A741 "0A741 "0A741 % LATIN SMALL LETTER K WITH STROKE
+\setXTXcharcodes "0A742 "0A742 "0A742 % LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+\setXTXcharcodes "0A743 "0A743 "0A743 % LATIN SMALL LETTER K WITH DIAGONAL STROKE
+\setXTXcharcodes "0A744 "0A744 "0A744 % LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+\setXTXcharcodes "0A745 "0A745 "0A745 % LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+\setXTXcharcodes "0A746 "0A746 "0A746 % LATIN CAPITAL LETTER BROKEN L
+\setXTXcharcodes "0A747 "0A747 "0A747 % LATIN SMALL LETTER BROKEN L
+\setXTXcharcodes "0A748 "0A748 "0A748 % LATIN CAPITAL LETTER L WITH HIGH STROKE
+\setXTXcharcodes "0A749 "0A749 "0A749 % LATIN SMALL LETTER L WITH HIGH STROKE
+\setXTXcharcodes "0A74A "0A74A "0A74A % LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+\setXTXcharcodes "0A74B "0A74B "0A74B % LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+\setXTXcharcodes "0A74C "0A74C "0A74C % LATIN CAPITAL LETTER O WITH LOOP
+\setXTXcharcodes "0A74D "0A74D "0A74D % LATIN SMALL LETTER O WITH LOOP
+\setXTXcharcodes "0A74E "0A74E "0A74E % LATIN CAPITAL LETTER OO
+\setXTXcharcodes "0A74F "0A74F "0A74F % LATIN SMALL LETTER OO
+\setXTXcharcodes "0A750 "0A750 "0A750 % LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A751 "0A751 "0A751 % LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A752 "0A752 "0A752 % LATIN CAPITAL LETTER P WITH FLOURISH
+\setXTXcharcodes "0A753 "0A753 "0A753 % LATIN SMALL LETTER P WITH FLOURISH
+\setXTXcharcodes "0A754 "0A754 "0A754 % LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+\setXTXcharcodes "0A755 "0A755 "0A755 % LATIN SMALL LETTER P WITH SQUIRREL TAIL
+\setXTXcharcodes "0A756 "0A756 "0A756 % LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A757 "0A757 "0A757 % LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A758 "0A758 "0A758 % LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+\setXTXcharcodes "0A759 "0A759 "0A759 % LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+\setXTXcharcodes "0A75A "0A75A "0A75A % LATIN CAPITAL LETTER R ROTUNDA
+\setXTXcharcodes "0A75B "0A75B "0A75B % LATIN SMALL LETTER R ROTUNDA
+\setXTXcharcodes "0A75C "0A75C "0A75C % LATIN CAPITAL LETTER RUM ROTUNDA
+\setXTXcharcodes "0A75D "0A75D "0A75D % LATIN SMALL LETTER RUM ROTUNDA
+\setXTXcharcodes "0A75E "0A75E "0A75E % LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+\setXTXcharcodes "0A75F "0A75F "0A75F % LATIN SMALL LETTER V WITH DIAGONAL STROKE
+\setXTXcharcodes "0A760 "0A760 "0A760 % LATIN CAPITAL LETTER VY
+\setXTXcharcodes "0A761 "0A761 "0A761 % LATIN SMALL LETTER VY
+\setXTXcharcodes "0A762 "0A762 "0A762 % LATIN CAPITAL LETTER VISIGOTHIC Z
+\setXTXcharcodes "0A763 "0A763 "0A763 % LATIN SMALL LETTER VISIGOTHIC Z
+\setXTXcharcodes "0A764 "0A764 "0A764 % LATIN CAPITAL LETTER THORN WITH STROKE
+\setXTXcharcodes "0A765 "0A765 "0A765 % LATIN SMALL LETTER THORN WITH STROKE
+\setXTXcharcodes "0A766 "0A766 "0A766 % LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A767 "0A767 "0A767 % LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+\setXTXcharcodes "0A768 "0A768 "0A768 % LATIN CAPITAL LETTER VEND
+\setXTXcharcodes "0A769 "0A769 "0A769 % LATIN SMALL LETTER VEND
+\setXTXcharcodes "0A76A "0A76A "0A76A % LATIN CAPITAL LETTER ET
+\setXTXcharcodes "0A76B "0A76B "0A76B % LATIN SMALL LETTER ET
+\setXTXcharcodes "0A76C "0A76C "0A76C % LATIN CAPITAL LETTER IS
+\setXTXcharcodes "0A76D "0A76D "0A76D % LATIN SMALL LETTER IS
+\setXTXcharcodes "0A76E "0A76E "0A76E % LATIN CAPITAL LETTER CON
+\setXTXcharcodes "0A76F "0A76F "0A76F % LATIN SMALL LETTER CON
+\setXTXcharcodes "0A771 "0A771 "0A771 % LATIN SMALL LETTER DUM
+\setXTXcharcodes "0A772 "0A772 "0A772 % LATIN SMALL LETTER LUM
+\setXTXcharcodes "0A773 "0A773 "0A773 % LATIN SMALL LETTER MUM
+\setXTXcharcodes "0A774 "0A774 "0A774 % LATIN SMALL LETTER NUM
+\setXTXcharcodes "0A775 "0A775 "0A775 % LATIN SMALL LETTER RUM
+\setXTXcharcodes "0A776 "0A776 "0A776 % LATIN LETTER SMALL CAPITAL RUM
+\setXTXcharcodes "0A777 "0A777 "0A777 % LATIN SMALL LETTER TUM
+\setXTXcharcodes "0A778 "0A778 "0A778 % LATIN SMALL LETTER UM
+\setXTXcharcodes "0A779 "0A779 "0A779 % LATIN CAPITAL LETTER INSULAR D
+\setXTXcharcodes "0A77A "0A77A "0A77A % LATIN SMALL LETTER INSULAR D
+\setXTXcharcodes "0A77B "0A77B "0A77B % LATIN CAPITAL LETTER INSULAR F
+\setXTXcharcodes "0A77C "0A77C "0A77C % LATIN SMALL LETTER INSULAR F
+\setXTXcharcodes "0A77D "0A77D "0A77D % LATIN CAPITAL LETTER INSULAR G
+\setXTXcharcodes "0A77E "0A77E "0A77E % LATIN CAPITAL LETTER TURNED INSULAR G
+\setXTXcharcodes "0A77F "0A77F "0A77F % LATIN SMALL LETTER TURNED INSULAR G
+\setXTXcharcodes "0A780 "0A780 "0A780 % LATIN CAPITAL LETTER TURNED L
+\setXTXcharcodes "0A781 "0A781 "0A781 % LATIN SMALL LETTER TURNED L
+\setXTXcharcodes "0A782 "0A782 "0A782 % LATIN CAPITAL LETTER INSULAR R
+\setXTXcharcodes "0A783 "0A783 "0A783 % LATIN SMALL LETTER INSULAR R
+\setXTXcharcodes "0A784 "0A784 "0A784 % LATIN CAPITAL LETTER INSULAR S
+\setXTXcharcodes "0A785 "0A785 "0A785 % LATIN SMALL LETTER INSULAR S
+\setXTXcharcodes "0A786 "0A786 "0A786 % LATIN CAPITAL LETTER INSULAR T
+\setXTXcharcodes "0A787 "0A787 "0A787 % LATIN SMALL LETTER INSULAR T
+\setXTXcharcodes "0A78B "0A78B "0A78B % LATIN CAPITAL LETTER SALTILLO
+\setXTXcharcodes "0A78C "0A78C "0A78C % LATIN SMALL LETTER SALTILLO
+\setXTXcharcodes "0A78D "0A78D "0A78D % LATIN CAPITAL LETTER TURNED H
+\setXTXcharcodes "0A78E "0A78E "0A78E % LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+\setXTXcharcodes "0A790 "0A790 "0A790 % LATIN CAPITAL LETTER N WITH DESCENDER
+\setXTXcharcodes "0A791 "0A791 "0A791 % LATIN SMALL LETTER N WITH DESCENDER
+\setXTXcharcodes "0A792 "0A792 "0A792 % LATIN CAPITAL LETTER C WITH BAR
+\setXTXcharcodes "0A793 "0A793 "0A793 % LATIN SMALL LETTER C WITH BAR
+\setXTXcharcodes "0A794 "0A794 "0A794 % LATIN SMALL LETTER C WITH PALATAL HOOK
+\setXTXcharcodes "0A795 "0A795 "0A795 % LATIN SMALL LETTER H WITH PALATAL HOOK
+\setXTXcharcodes "0A796 "0A796 "0A796 % LATIN CAPITAL LETTER B WITH FLOURISH
+\setXTXcharcodes "0A797 "0A797 "0A797 % LATIN SMALL LETTER B WITH FLOURISH
+\setXTXcharcodes "0A798 "0A798 "0A798 % LATIN CAPITAL LETTER F WITH STROKE
+\setXTXcharcodes "0A799 "0A799 "0A799 % LATIN SMALL LETTER F WITH STROKE
+\setXTXcharcodes "0A79A "0A79A "0A79A % LATIN CAPITAL LETTER VOLAPUK AE
+\setXTXcharcodes "0A79B "0A79B "0A79B % LATIN SMALL LETTER VOLAPUK AE
+\setXTXcharcodes "0A79C "0A79C "0A79C % LATIN CAPITAL LETTER VOLAPUK OE
+\setXTXcharcodes "0A79D "0A79D "0A79D % LATIN SMALL LETTER VOLAPUK OE
+\setXTXcharcodes "0A79E "0A79E "0A79E % LATIN CAPITAL LETTER VOLAPUK UE
+\setXTXcharcodes "0A79F "0A79F "0A79F % LATIN SMALL LETTER VOLAPUK UE
+\setXTXcharcodes "0A7A0 "0A7A0 "0A7A0 % LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A1 "0A7A1 "0A7A1 % LATIN SMALL LETTER G WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A2 "0A7A2 "0A7A2 % LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A3 "0A7A3 "0A7A3 % LATIN SMALL LETTER K WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A4 "0A7A4 "0A7A4 % LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A5 "0A7A5 "0A7A5 % LATIN SMALL LETTER N WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A6 "0A7A6 "0A7A6 % LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A7 "0A7A7 "0A7A7 % LATIN SMALL LETTER R WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A8 "0A7A8 "0A7A8 % LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7A9 "0A7A9 "0A7A9 % LATIN SMALL LETTER S WITH OBLIQUE STROKE
+\setXTXcharcodes "0A7AA "0A7AA "0A7AA % LATIN CAPITAL LETTER H WITH HOOK
+\setXTXcharcodes "0A7AB "0A7AB "0A7AB % LATIN CAPITAL LETTER REVERSED OPEN E
+\setXTXcharcodes "0A7AC "0A7AC "0A7AC % LATIN CAPITAL LETTER SCRIPT G
+\setXTXcharcodes "0A7AD "0A7AD "0A7AD % LATIN CAPITAL LETTER L WITH BELT
+\setXTXcharcodes "0A7B0 "0A7B0 "0A7B0 % LATIN CAPITAL LETTER TURNED K
+\setXTXcharcodes "0A7B1 "0A7B1 "0A7B1 % LATIN CAPITAL LETTER TURNED T
+\setXTXcharcodes "0A7B2 "0A7B2 "0A7B2 % LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+\setXTXcharcodes "0A7B3 "0A7B3 "0A7B3 % LATIN CAPITAL LETTER CHI
+\setXTXcharcodes "0A7B4 "0A7B4 "0A7B4 % LATIN CAPITAL LETTER BETA
+\setXTXcharcodes "0A7B5 "0A7B5 "0A7B5 % LATIN SMALL LETTER BETA
+\setXTXcharcodes "0A7B6 "0A7B6 "0A7B6 % LATIN CAPITAL LETTER OMEGA
+\setXTXcharcodes "0A7B7 "0A7B7 "0A7B7 % LATIN SMALL LETTER OMEGA
+\setXTXcharcodes "0A7FA "0A7FA "0A7FA % LATIN LETTER SMALL CAPITAL TURNED M
+\setXTXcharcodes "0AB30 "0AB30 "0AB30 % LATIN SMALL LETTER BARRED ALPHA
+\setXTXcharcodes "0AB31 "0AB31 "0AB31 % LATIN SMALL LETTER A REVERSED-SCHWA
+\setXTXcharcodes "0AB32 "0AB32 "0AB32 % LATIN SMALL LETTER BLACKLETTER E
+\setXTXcharcodes "0AB33 "0AB33 "0AB33 % LATIN SMALL LETTER BARRED E
+\setXTXcharcodes "0AB34 "0AB34 "0AB34 % LATIN SMALL LETTER E WITH FLOURISH
+\setXTXcharcodes "0AB35 "0AB35 "0AB35 % LATIN SMALL LETTER LENIS F
+\setXTXcharcodes "0AB36 "0AB36 "0AB36 % LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
+\setXTXcharcodes "0AB37 "0AB37 "0AB37 % LATIN SMALL LETTER L WITH INVERTED LAZY S
+\setXTXcharcodes "0AB38 "0AB38 "0AB38 % LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+\setXTXcharcodes "0AB39 "0AB39 "0AB39 % LATIN SMALL LETTER L WITH MIDDLE RING
+\setXTXcharcodes "0AB3A "0AB3A "0AB3A % LATIN SMALL LETTER M WITH CROSSED-TAIL
+\setXTXcharcodes "0AB3B "0AB3B "0AB3B % LATIN SMALL LETTER N WITH CROSSED-TAIL
+\setXTXcharcodes "0AB3C "0AB3C "0AB3C % LATIN SMALL LETTER ENG WITH CROSSED-TAIL
+\setXTXcharcodes "0AB3D "0AB3D "0AB3D % LATIN SMALL LETTER BLACKLETTER O
+\setXTXcharcodes "0AB3E "0AB3E "0AB3E % LATIN SMALL LETTER BLACKLETTER O WITH STROKE
+\setXTXcharcodes "0AB3F "0AB3F "0AB3F % LATIN SMALL LETTER OPEN O WITH STROKE
+\setXTXcharcodes "0AB40 "0AB40 "0AB40 % LATIN SMALL LETTER INVERTED OE
+\setXTXcharcodes "0AB41 "0AB41 "0AB41 % LATIN SMALL LETTER TURNED OE WITH STROKE
+\setXTXcharcodes "0AB42 "0AB42 "0AB42 % LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE
+\setXTXcharcodes "0AB43 "0AB43 "0AB43 % LATIN SMALL LETTER TURNED O OPEN-O
+\setXTXcharcodes "0AB44 "0AB44 "0AB44 % LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE
+\setXTXcharcodes "0AB45 "0AB45 "0AB45 % LATIN SMALL LETTER STIRRUP R
+\setXTXcharcodes "0AB46 "0AB46 "0AB46 % LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG
+\setXTXcharcodes "0AB47 "0AB47 "0AB47 % LATIN SMALL LETTER R WITHOUT HANDLE
+\setXTXcharcodes "0AB48 "0AB48 "0AB48 % LATIN SMALL LETTER DOUBLE R
+\setXTXcharcodes "0AB49 "0AB49 "0AB49 % LATIN SMALL LETTER R WITH CROSSED-TAIL
+\setXTXcharcodes "0AB4A "0AB4A "0AB4A % LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL
+\setXTXcharcodes "0AB4B "0AB4B "0AB4B % LATIN SMALL LETTER SCRIPT R
+\setXTXcharcodes "0AB4C "0AB4C "0AB4C % LATIN SMALL LETTER SCRIPT R WITH RING
+\setXTXcharcodes "0AB4D "0AB4D "0AB4D % LATIN SMALL LETTER BASELINE ESH
+\setXTXcharcodes "0AB4E "0AB4E "0AB4E % LATIN SMALL LETTER U WITH SHORT RIGHT LEG
+\setXTXcharcodes "0AB4F "0AB4F "0AB4F % LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG
+\setXTXcharcodes "0AB50 "0AB50 "0AB50 % LATIN SMALL LETTER UI
+\setXTXcharcodes "0AB51 "0AB51 "0AB51 % LATIN SMALL LETTER TURNED UI
+\setXTXcharcodes "0AB52 "0AB52 "0AB52 % LATIN SMALL LETTER U WITH LEFT HOOK
+\setXTXcharcodes "0AB53 "0AB53 "0AB53 % LATIN SMALL LETTER CHI
+\setXTXcharcodes "0AB54 "0AB54 "0AB54 % LATIN SMALL LETTER CHI WITH LOW RIGHT RING
+\setXTXcharcodes "0AB55 "0AB55 "0AB55 % LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
+\setXTXcharcodes "0AB56 "0AB56 "0AB56 % LATIN SMALL LETTER X WITH LOW RIGHT RING
+\setXTXcharcodes "0AB57 "0AB57 "0AB57 % LATIN SMALL LETTER X WITH LONG LEFT LEG
+\setXTXcharcodes "0AB58 "0AB58 "0AB58 % LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING
+\setXTXcharcodes "0AB59 "0AB59 "0AB59 % LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF
+\setXTXcharcodes "0AB5A "0AB5A "0AB5A % LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+\setXTXcharcodes "0AB60 "0AB60 "0AB60 % LATIN SMALL LETTER SAKHA YAT
+\setXTXcharcodes "0AB61 "0AB61 "0AB61 % LATIN SMALL LETTER IOTIFIED E
+\setXTXcharcodes "0AB62 "0AB62 "0AB62 % LATIN SMALL LETTER OPEN OE
+\setXTXcharcodes "0AB63 "0AB63 "0AB63 % LATIN SMALL LETTER UO
+\setXTXcharcodes "0AB64 "0AB64 "0AB64 % LATIN SMALL LETTER INVERTED ALPHA
+\setXTXcharcodes "0AB65 "0AB65 "0AB65 % GREEK LETTER SMALL CAPITAL OMEGA
+\setXTXcharcodes "0AB70 "0AB70 "0AB70 % CHEROKEE SMALL LETTER A
+\setXTXcharcodes "0AB71 "0AB71 "0AB71 % CHEROKEE SMALL LETTER E
+\setXTXcharcodes "0AB72 "0AB72 "0AB72 % CHEROKEE SMALL LETTER I
+\setXTXcharcodes "0AB73 "0AB73 "0AB73 % CHEROKEE SMALL LETTER O
+\setXTXcharcodes "0AB74 "0AB74 "0AB74 % CHEROKEE SMALL LETTER U
+\setXTXcharcodes "0AB75 "0AB75 "0AB75 % CHEROKEE SMALL LETTER V
+\setXTXcharcodes "0AB76 "0AB76 "0AB76 % CHEROKEE SMALL LETTER GA
+\setXTXcharcodes "0AB77 "0AB77 "0AB77 % CHEROKEE SMALL LETTER KA
+\setXTXcharcodes "0AB78 "0AB78 "0AB78 % CHEROKEE SMALL LETTER GE
+\setXTXcharcodes "0AB79 "0AB79 "0AB79 % CHEROKEE SMALL LETTER GI
+\setXTXcharcodes "0AB7A "0AB7A "0AB7A % CHEROKEE SMALL LETTER GO
+\setXTXcharcodes "0AB7B "0AB7B "0AB7B % CHEROKEE SMALL LETTER GU
+\setXTXcharcodes "0AB7C "0AB7C "0AB7C % CHEROKEE SMALL LETTER GV
+\setXTXcharcodes "0AB7D "0AB7D "0AB7D % CHEROKEE SMALL LETTER HA
+\setXTXcharcodes "0AB7E "0AB7E "0AB7E % CHEROKEE SMALL LETTER HE
+\setXTXcharcodes "0AB7F "0AB7F "0AB7F % CHEROKEE SMALL LETTER HI
+\setXTXcharcodes "0AB80 "0AB80 "0AB80 % CHEROKEE SMALL LETTER HO
+\setXTXcharcodes "0AB81 "0AB81 "0AB81 % CHEROKEE SMALL LETTER HU
+\setXTXcharcodes "0AB82 "0AB82 "0AB82 % CHEROKEE SMALL LETTER HV
+\setXTXcharcodes "0AB83 "0AB83 "0AB83 % CHEROKEE SMALL LETTER LA
+\setXTXcharcodes "0AB84 "0AB84 "0AB84 % CHEROKEE SMALL LETTER LE
+\setXTXcharcodes "0AB85 "0AB85 "0AB85 % CHEROKEE SMALL LETTER LI
+\setXTXcharcodes "0AB86 "0AB86 "0AB86 % CHEROKEE SMALL LETTER LO
+\setXTXcharcodes "0AB87 "0AB87 "0AB87 % CHEROKEE SMALL LETTER LU
+\setXTXcharcodes "0AB88 "0AB88 "0AB88 % CHEROKEE SMALL LETTER LV
+\setXTXcharcodes "0AB89 "0AB89 "0AB89 % CHEROKEE SMALL LETTER MA
+\setXTXcharcodes "0AB8A "0AB8A "0AB8A % CHEROKEE SMALL LETTER ME
+\setXTXcharcodes "0AB8B "0AB8B "0AB8B % CHEROKEE SMALL LETTER MI
+\setXTXcharcodes "0AB8C "0AB8C "0AB8C % CHEROKEE SMALL LETTER MO
+\setXTXcharcodes "0AB8D "0AB8D "0AB8D % CHEROKEE SMALL LETTER MU
+\setXTXcharcodes "0AB8E "0AB8E "0AB8E % CHEROKEE SMALL LETTER NA
+\setXTXcharcodes "0AB8F "0AB8F "0AB8F % CHEROKEE SMALL LETTER HNA
+\setXTXcharcodes "0AB90 "0AB90 "0AB90 % CHEROKEE SMALL LETTER NAH
+\setXTXcharcodes "0AB91 "0AB91 "0AB91 % CHEROKEE SMALL LETTER NE
+\setXTXcharcodes "0AB92 "0AB92 "0AB92 % CHEROKEE SMALL LETTER NI
+\setXTXcharcodes "0AB93 "0AB93 "0AB93 % CHEROKEE SMALL LETTER NO
+\setXTXcharcodes "0AB94 "0AB94 "0AB94 % CHEROKEE SMALL LETTER NU
+\setXTXcharcodes "0AB95 "0AB95 "0AB95 % CHEROKEE SMALL LETTER NV
+\setXTXcharcodes "0AB96 "0AB96 "0AB96 % CHEROKEE SMALL LETTER QUA
+\setXTXcharcodes "0AB97 "0AB97 "0AB97 % CHEROKEE SMALL LETTER QUE
+\setXTXcharcodes "0AB98 "0AB98 "0AB98 % CHEROKEE SMALL LETTER QUI
+\setXTXcharcodes "0AB99 "0AB99 "0AB99 % CHEROKEE SMALL LETTER QUO
+\setXTXcharcodes "0AB9A "0AB9A "0AB9A % CHEROKEE SMALL LETTER QUU
+\setXTXcharcodes "0AB9B "0AB9B "0AB9B % CHEROKEE SMALL LETTER QUV
+\setXTXcharcodes "0AB9C "0AB9C "0AB9C % CHEROKEE SMALL LETTER SA
+\setXTXcharcodes "0AB9D "0AB9D "0AB9D % CHEROKEE SMALL LETTER S
+\setXTXcharcodes "0AB9E "0AB9E "0AB9E % CHEROKEE SMALL LETTER SE
+\setXTXcharcodes "0AB9F "0AB9F "0AB9F % CHEROKEE SMALL LETTER SI
+\setXTXcharcodes "0ABA0 "0ABA0 "0ABA0 % CHEROKEE SMALL LETTER SO
+\setXTXcharcodes "0ABA1 "0ABA1 "0ABA1 % CHEROKEE SMALL LETTER SU
+\setXTXcharcodes "0ABA2 "0ABA2 "0ABA2 % CHEROKEE SMALL LETTER SV
+\setXTXcharcodes "0ABA3 "0ABA3 "0ABA3 % CHEROKEE SMALL LETTER DA
+\setXTXcharcodes "0ABA4 "0ABA4 "0ABA4 % CHEROKEE SMALL LETTER TA
+\setXTXcharcodes "0ABA5 "0ABA5 "0ABA5 % CHEROKEE SMALL LETTER DE
+\setXTXcharcodes "0ABA6 "0ABA6 "0ABA6 % CHEROKEE SMALL LETTER TE
+\setXTXcharcodes "0ABA7 "0ABA7 "0ABA7 % CHEROKEE SMALL LETTER DI
+\setXTXcharcodes "0ABA8 "0ABA8 "0ABA8 % CHEROKEE SMALL LETTER TI
+\setXTXcharcodes "0ABA9 "0ABA9 "0ABA9 % CHEROKEE SMALL LETTER DO
+\setXTXcharcodes "0ABAA "0ABAA "0ABAA % CHEROKEE SMALL LETTER DU
+\setXTXcharcodes "0ABAB "0ABAB "0ABAB % CHEROKEE SMALL LETTER DV
+\setXTXcharcodes "0ABAC "0ABAC "0ABAC % CHEROKEE SMALL LETTER DLA
+\setXTXcharcodes "0ABAD "0ABAD "0ABAD % CHEROKEE SMALL LETTER TLA
+\setXTXcharcodes "0ABAE "0ABAE "0ABAE % CHEROKEE SMALL LETTER TLE
+\setXTXcharcodes "0ABAF "0ABAF "0ABAF % CHEROKEE SMALL LETTER TLI
+\setXTXcharcodes "0ABB0 "0ABB0 "0ABB0 % CHEROKEE SMALL LETTER TLO
+\setXTXcharcodes "0ABB1 "0ABB1 "0ABB1 % CHEROKEE SMALL LETTER TLU
+\setXTXcharcodes "0ABB2 "0ABB2 "0ABB2 % CHEROKEE SMALL LETTER TLV
+\setXTXcharcodes "0ABB3 "0ABB3 "0ABB3 % CHEROKEE SMALL LETTER TSA
+\setXTXcharcodes "0ABB4 "0ABB4 "0ABB4 % CHEROKEE SMALL LETTER TSE
+\setXTXcharcodes "0ABB5 "0ABB5 "0ABB5 % CHEROKEE SMALL LETTER TSI
+\setXTXcharcodes "0ABB6 "0ABB6 "0ABB6 % CHEROKEE SMALL LETTER TSO
+\setXTXcharcodes "0ABB7 "0ABB7 "0ABB7 % CHEROKEE SMALL LETTER TSU
+\setXTXcharcodes "0ABB8 "0ABB8 "0ABB8 % CHEROKEE SMALL LETTER TSV
+\setXTXcharcodes "0ABB9 "0ABB9 "0ABB9 % CHEROKEE SMALL LETTER WA
+\setXTXcharcodes "0ABBA "0ABBA "0ABBA % CHEROKEE SMALL LETTER WE
+\setXTXcharcodes "0ABBB "0ABBB "0ABBB % CHEROKEE SMALL LETTER WI
+\setXTXcharcodes "0ABBC "0ABBC "0ABBC % CHEROKEE SMALL LETTER WO
+\setXTXcharcodes "0ABBD "0ABBD "0ABBD % CHEROKEE SMALL LETTER WU
+\setXTXcharcodes "0ABBE "0ABBE "0ABBE % CHEROKEE SMALL LETTER WV
+\setXTXcharcodes "0ABBF "0ABBF "0ABBF % CHEROKEE SMALL LETTER YA
\setXTXcharcodes "0FB00 "0FB00 "0FB00 % LATIN SMALL LIGATURE FF
\setXTXcharcodes "0FB01 "0FB01 "0FB01 % LATIN SMALL LIGATURE FI
\setXTXcharcodes "0FB02 "0FB02 "0FB02 % LATIN SMALL LIGATURE FL
@@ -1976,10 +2400,6 @@
\setXTXcharcodes "0FF59 "0FF59 "0FF39 % FULLWIDTH LATIN SMALL LETTER Y
\setXTXcharcodes "0FF5A "0FF5A "0FF3A % FULLWIDTH LATIN SMALL LETTER Z
-\dofastrecurse{"03400}{"04DB5}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel}
-\dofastrecurse{"04E00}{"09FBB}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel}
-\dofastrecurse{"0AC00}{"0D7A3}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel}
-\dofastrecurse{"20000}{"2A6D6}{1}{\dosetXTXcharcodes\recurselevel\recurselevel\recurselevel}
% patch needed for turkish
@@ -1988,7 +2408,7 @@
% patch needed for french
-% \setXTXcharcodes "0027 "0027 "0027
\setXTXcharcodes "2019 "2019 "2019
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/xtag-cml.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-cml.mkii
index 6da7fd26f87..6da7fd26f87 100644
--- a/Master/texmf-dist/tex/context/base/xtag-cml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-cml.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-ent.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-ent.mkii
index 09051d0b435..09051d0b435 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ent.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-ent.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-exp.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-exp.mkii
index 9ecfcc5b124..9ecfcc5b124 100644
--- a/Master/texmf-dist/tex/context/base/xtag-exp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-exp.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-ext.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-ext.mkii
index 60615b1c241..60615b1c241 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ext.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-ext.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-hyp.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-hyp.mkii
index 105f1a1e373..105f1a1e373 100644
--- a/Master/texmf-dist/tex/context/base/xtag-hyp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-hyp.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-ini.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-ini.mkii
index ce3cbacd0b1..ce3cbacd0b1 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-ini.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-map.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-map.mkii
index 4f639bf0183..4f639bf0183 100644
--- a/Master/texmf-dist/tex/context/base/xtag-map.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-map.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mea.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mea.mkii
index d56d6c54ba9..d56d6c54ba9 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mea.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mea.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-meb.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-meb.mkii
index ba370cadf94..ba370cadf94 100644
--- a/Master/texmf-dist/tex/context/base/xtag-meb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-meb.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mec.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mec.mkii
index 9e941897c61..9e941897c61 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mec.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mec.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-meh.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-meh.mkii
index 1636f2a2b9d..1636f2a2b9d 100644
--- a/Master/texmf-dist/tex/context/base/xtag-meh.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-meh.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-men.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-men.mkii
index d548c83940e..d548c83940e 100644
--- a/Master/texmf-dist/tex/context/base/xtag-men.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-men.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-meo.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-meo.mkii
index f19f80fbe30..f19f80fbe30 100644
--- a/Master/texmf-dist/tex/context/base/xtag-meo.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-meo.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mer.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mer.mkii
index becff584a9c..becff584a9c 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mer.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mer.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mmc.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mmc.mkii
index 9da7fef8411..9da7fef8411 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mmc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mmc.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mml.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mml.mkii
index f948128fa5e..f948128fa5e 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mml.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mmp.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mmp.mkii
index 93f0a1504db..93f0a1504db 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mmp.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mmp.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxa.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxa.mkii
index 5e83367df79..5e83367df79 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxa.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxa.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxb.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxb.mkii
index c325a9e4493..c325a9e4493 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxb.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxb.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxc.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxc.mkii
index e692f2a249b..e692f2a249b 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxc.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxc.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxh.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxh.mkii
index 3cf0103c804..3cf0103c804 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxh.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxh.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxn.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxn.mkii
index 35eeade9a1a..35eeade9a1a 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxn.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxn.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxo.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxo.mkii
index 045b4f40696..045b4f40696 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxo.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxo.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-mxr.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-mxr.mkii
index ed1498f8137..ed1498f8137 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mxr.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-mxr.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-pml.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-pml.mkii
index a0930b63428..a0930b63428 100644
--- a/Master/texmf-dist/tex/context/base/xtag-pml.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-pml.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-pmu.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-pmu.mkii
index 5c7c9a8f61a..5c7c9a8f61a 100644
--- a/Master/texmf-dist/tex/context/base/xtag-pmu.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-pmu.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-pre.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-pre.mkii
index 5e75197b76b..5e75197b76b 100644
--- a/Master/texmf-dist/tex/context/base/xtag-pre.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-pre.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-prs.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-prs.mkii
index 8728d992a47..8728d992a47 100644
--- a/Master/texmf-dist/tex/context/base/xtag-prs.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-prs.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-raw.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-raw.mkii
index aab294c5adb..aab294c5adb 100644
--- a/Master/texmf-dist/tex/context/base/xtag-raw.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-raw.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-rng.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-rng.mkii
index 4b9dcfaf156..4b9dcfaf156 100644
--- a/Master/texmf-dist/tex/context/base/xtag-rng.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-rng.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-run.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-run.mkii
index 65424650c0f..65424650c0f 100644
--- a/Master/texmf-dist/tex/context/base/xtag-run.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-run.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-stk.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-stk.mkii
index d454a63ca8d..d454a63ca8d 100644
--- a/Master/texmf-dist/tex/context/base/xtag-stk.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-stk.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-utf.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-utf.mkii
index b58fbbe88b6..b58fbbe88b6 100644
--- a/Master/texmf-dist/tex/context/base/xtag-utf.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-utf.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-xsd.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-xsd.mkii
index c1f4b91b649..c1f4b91b649 100644
--- a/Master/texmf-dist/tex/context/base/xtag-xsd.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-xsd.mkii
diff --git a/Master/texmf-dist/tex/context/base/xtag-xsl.mkii b/Master/texmf-dist/tex/context/base/mkii/xtag-xsl.mkii
index 49767e30c79..49767e30c79 100644
--- a/Master/texmf-dist/tex/context/base/xtag-xsl.mkii
+++ b/Master/texmf-dist/tex/context/base/mkii/xtag-xsl.mkii
diff --git a/Master/texmf-dist/tex/context/base/anch-bar.mkiv b/Master/texmf-dist/tex/context/base/mkiv/anch-bar.mkiv
index b5df21a0797..b5df21a0797 100644
--- a/Master/texmf-dist/tex/context/base/anch-bar.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-bar.mkiv
diff --git a/Master/texmf-dist/tex/context/base/anch-bck.mkvi b/Master/texmf-dist/tex/context/base/mkiv/anch-bck.mkvi
index 273cf015968..ee392f11474 100644
--- a/Master/texmf-dist/tex/context/base/anch-bck.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-bck.mkvi
@@ -256,7 +256,6 @@
%
\usetextbackgroundstyleandcolor\c!style\c!color
\nowhitespace
- \nobreak % new per 23/04/2006 (else potential break when whitespace)
\seteffectivehsize
\doinhibitblank % \blank[\v!disable]% new
\par}
diff --git a/Master/texmf-dist/tex/context/base/anch-pgr.lua b/Master/texmf-dist/tex/context/base/mkiv/anch-pgr.lua
index b5c2ae6280a..b5c2ae6280a 100644
--- a/Master/texmf-dist/tex/context/base/anch-pgr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-pgr.lua
diff --git a/Master/texmf-dist/tex/context/base/anch-pgr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/anch-pgr.mkiv
index 56ff656d96d..a7ad26dff7f 100644
--- a/Master/texmf-dist/tex/context/base/anch-pgr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-pgr.mkiv
@@ -256,14 +256,15 @@
\def\MPoverlayanchor#1{\MPpos\MPanchorid}
\def\anch_positions_overlay_compose
- {\vbox to \d_overlay_height
+ {\vpack to \d_overlay_height
{%\writestatus{!!!}{\currentpositionoverlay/\MPanchoridentifier/\MPanchornumber}%
\edef\MPanchorid{\currentpositionoverlay::\MPanchoridentifier:\MPanchornumber}% realpageno
% \edef\MPanchor##1{\MPpos\MPanchorid}%
\let\MPanchor\MPoverlayanchor % no need to fetch it already, seldom used
\the\everyinsertpositionaction
\copyposition{\currentpositionoverlay::\MPanchoridentifier}\MPanchorid
- \setbox\scratchbox\hbox to \d_overlay_width{\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}%
+ \setbox\scratchbox\hbox to \d_overlay_width
+ {\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}%
\ht\scratchbox\d_overlay_height
\dp\scratchbox\zeropoint
\anch_mark_tagged_box\scratchbox\MPanchorid % needs an hbox
@@ -289,12 +290,13 @@
\endgroup}
\def\anch_positions_region_overlay_compose
- {\vbox to \d_overlay_height
+ {\vpack to \d_overlay_height
{\let\MPanchorid\currentpositionregion
\let\MPanchor\MPoverlayanchor % no need to fetch it already, seldom used
\the\everyinsertpositionaction
\copyposition{\currentpositionoverlay::\MPanchoridentifier}\MPanchorid
- \setbox\scratchbox\hbox to \d_overlay_width{\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}%
+ \setbox\scratchbox\hbox to \d_overlay_width
+ {\dopositionaction{\currentpositionoverlay::\MPanchoridentifier}\hss}%
\ht\scratchbox\d_overlay_height
\dp\scratchbox\zeropoint
\box\scratchbox
@@ -411,7 +413,8 @@
\anch_positions_meta_graphic_prepare
\obeyMPboxorigin % do we also set the size ? when needed this must be done in mp ... might change
\def\anch_positions_meta_graphic_direct{\anch_positions_meta_graphic_nested{#3}}% takes two extra arguments
- \setbox\b_anch_positions_graphic\hbox{\ignorespaces\csname#1#2\endcsname\removelastspace}%
+ \setbox\b_anch_positions_graphic\hbox
+ {\ignorespaces\csname#1#2\endcsname\removelastspace}%
\smashbox\b_anch_positions_graphic
\box\b_anch_positions_graphic
\endgroup}
@@ -421,7 +424,7 @@
\setupMPvariables[#2][#1,#3]%
\edef\currentmpvariableclass{#2}%
\anch_positions_meta_graphic_prepare
- \getvalue{\??positiongraphic#2}%
+ \csname\??positiongraphic#2\endcsname
\endgroup}%
\def\startMPpositionmethod#1#2\stopMPpositionmethod
diff --git a/Master/texmf-dist/tex/context/base/anch-pos.lua b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua
index 77e36e85ece..c01e9017976 100644
--- a/Master/texmf-dist/tex/context/base/anch-pos.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua
@@ -55,7 +55,9 @@ local nuts = nodes.nuts
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setlink = nuts.setlink
local getlist = nuts.getlist
+local setlist = nuts.setlist
local getbox = nuts.getbox
local getskip = nuts.getskip
@@ -444,15 +446,12 @@ local function markregionbox(n,tag,correct)
local head = getlist(box)
if head then
local tail = find_tail(head)
- setfield(head,"prev",push)
- setfield(push,"next",head)
- setfield(pop,"prev",tail)
- setfield(tail,"next",pop)
+ setlink(push,head)
+ setlink(tail,pop)
else -- we can have a simple push/pop
- setfield(push,"next",pop)
- setfield(pop,"prev",push)
+ setlink(push,pop)
end
- setfield(box,"list",push)
+ setlist(box,push)
end
jobpositions.markregionbox = markregionbox
diff --git a/Master/texmf-dist/tex/context/base/anch-pos.mkiv b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.mkiv
index 5d9c2fd3478..5d9c2fd3478 100644
--- a/Master/texmf-dist/tex/context/base/anch-pos.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.mkiv
diff --git a/Master/texmf-dist/tex/context/base/anch-snc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/anch-snc.mkiv
index 27769fbf935..d0d3a58d1f3 100644
--- a/Master/texmf-dist/tex/context/base/anch-snc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-snc.mkiv
@@ -60,7 +60,7 @@
\global\advance\csname\s!num:\s!syncpos:#1\endcsname\plusone
\setsyncpositions{#1}%
% option: geen w/h, alleen p 0 0 0 data
- \setpositionplus{\s!syncpos:#1:\the\csname\s!num:\s!syncpos:#1\endcsname}{#2}\hbox{\strut}%
+ \setpositionplus{\s!syncpos:#1:\the\csname\s!num:\s!syncpos:#1\endcsname}{#2}\hpack{\strut}%
\else
\strut
\fi}
diff --git a/Master/texmf-dist/tex/context/base/anch-tab.mkiv b/Master/texmf-dist/tex/context/base/mkiv/anch-tab.mkiv
index da735b49de5..7e0116cbff6 100644
--- a/Master/texmf-dist/tex/context/base/anch-tab.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/anch-tab.mkiv
@@ -184,7 +184,7 @@
\def\tabulateEQpos
{\setbox\scratchbox\hbox{\tabulateEQ}%
- \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}%
+ \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}% hpack
\kern-\wd\scratchbox
\box\scratchbox}
@@ -371,11 +371,11 @@
\dodoubleempty\anch_framed_indeed}
\def\anch_framed_indeed[#1][#2]%
- {\setbox\scratchbox\hbox
+ {\setbox\scratchbox\hpack
{\scratchwidth \dimexpr\MPx{e:#1}-\MPx{b:#1}\relax
\scratchdepth \dimexpr\MPy{b:#1}-\MPy{e:#1}+\MPd{e:#1}\relax
\scratchheight\dimexpr\scratchdepth+\MPh{b:#1}\relax
- \lower\scratchdepth\hbox
+ \lower\scratchdepth\hpack
{\framed[\c!width=\scratchwidth,\c!height=\scratchheight,\c!offset=\v!overlay,#2]{}}}%
\smashedbox\scratchbox
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/attr-col.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-col.lua
index b5fac9c2d1b..6b11333a7b9 100644
--- a/Master/texmf-dist/tex/context/base/attr-col.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-col.lua
@@ -583,5 +583,5 @@ implement { name = "enabletransparency", onlyonce = true, actions = transparenci
implement { name = "enablecolorintents", onlyonce = true, actions = colorintents.enable }
--------- { name = "registercolor", actions = { colors .register, context }, arguments = "string" }
---------- { name = "registertransparency", actions = { transparencies.register, context }, arguments = { ... } }
-implement { name = "registercolorintent", actions = { colorintents .register, context }, arguments = { ... } }
+--------- { name = "registertransparency", actions = { transparencies.register, context }, arguments = "string" }
+implement { name = "registercolorintent", actions = { colorintents .register, context }, arguments = "string" }
diff --git a/Master/texmf-dist/tex/context/base/attr-col.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-col.mkiv
index 6231755e914..6231755e914 100644
--- a/Master/texmf-dist/tex/context/base/attr-col.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-col.mkiv
diff --git a/Master/texmf-dist/tex/context/base/attr-eff.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-eff.lua
index ff41e12de70..ff41e12de70 100644
--- a/Master/texmf-dist/tex/context/base/attr-eff.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-eff.lua
diff --git a/Master/texmf-dist/tex/context/base/attr-eff.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-eff.mkiv
index bec8687ead5..859814ebc23 100644
--- a/Master/texmf-dist/tex/context/base/attr-eff.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-eff.mkiv
@@ -29,7 +29,7 @@
\appendtoks
\edef\p_method{\effectparameter\c!method}%
- \ifx\p_method\v!method
+ \ifx\p_method\v!command
\setuxvalue{\e!start\currenteffect}{\starteffect[#1]}%
\setuxvalue{\e!stop \currenteffect}{\stopeffect}%
\fi
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-ini.lua
index df7404d11b0..df7404d11b0 100644
--- a/Master/texmf-dist/tex/context/base/attr-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-ini.mkiv
index c6b798d18e3..3f0b7fb27e7 100644
--- a/Master/texmf-dist/tex/context/base/attr-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-ini.mkiv
@@ -52,19 +52,21 @@
\def\attr_basics_define_system{\attr_basics_define_indeed\s!private}
\def\attr_basics_define_indeed#1[#2][#3]%
- {\scratchcounter\clf_defineattribute{#2}{#1}\relax
- %\writestatus\m!system{defining #1 attribute #2 with number \number\scratchcounter}%
- \expandafter\attributedef\csname\??attributecount#2\endcsname\scratchcounter
- \expandafter\newconstant \csname\??attributeid#2\endcsname
- \csname\??attributeid#2\endcsname\scratchcounter
- % some attributes are always global
- \doifnotinset\s!global{#3}{\appendetoks\csname\??attributecount#2\endcsname\attributeunsetvalue\to\attributesresetlist}%
- % here public means 'visible' so it's not to be confused with 'public' at the lua end
- \doifinset \s!public{#3}{\expandafter\let\csname#2\s!attribute\expandafter\endcsname\csname\??attributeid#2\endcsname}}
+ {\ifcsname\??attributecount#2\endcsname\else
+ \scratchcounter\clf_defineattribute{#2}{#1}\relax
+ %\writestatus\m!system{defining #1 attribute #2 with number \number\scratchcounter}%
+ \expandafter\attributedef\csname\??attributecount#2\endcsname\scratchcounter
+ \expandafter\newconstant \csname\??attributeid#2\endcsname
+ \csname\??attributeid#2\endcsname\scratchcounter
+ % some attributes are always global
+ \doifnotinset\s!global{#3}{\appendetoks\csname\??attributecount#2\endcsname\attributeunsetvalue\to\attributesresetlist}%
+ % here public means 'visible' so it's not to be confused with 'public' at the lua end
+ \doifinset \s!public{#3}{\expandafter\let\csname#2\s!attribute\expandafter\endcsname\csname\??attributeid#2\endcsname}%
+ \fi}
\unexpanded\def\newattribute#1%
- {\attr_basics_define_indeed\s!public[\strippedcsname#1][]%
- \expandafter\let\expandafter#1\csname\??attributeid\strippedcsname#1\endcsname}
+ {\attr_basics_define_indeed\s!public[\csstring#1][]%
+ \expandafter\let\expandafter#1\csname\??attributeid\csstring#1\endcsname}
% expandable so we can \edef them for speed
@@ -108,3 +110,19 @@
\unexpanded\def\showattributes{\clf_showattributes}
\protect \endinput
+
+% for the luatex list:
+%
+% \attributedef\zeroattribute=0
+% \attributedef\someatriubute=999
+%
+% \directlua {
+% local createtoken = newtoken.create
+% function attributenumber(name)
+% local n = createtoken(name).mode - createtoken("zeroattribute").mode
+% return n >= 0 and n or false
+% end
+% }
+%
+% \directlua{print(attributenumber("noneattribute"))}
+% \directlua{print(attributenumber("someattribute"))}
diff --git a/Master/texmf-dist/tex/context/base/attr-lay.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-lay.lua
index 0d43979c813..0d43979c813 100644
--- a/Master/texmf-dist/tex/context/base/attr-lay.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-lay.lua
diff --git a/Master/texmf-dist/tex/context/base/attr-lay.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-lay.mkiv
index 14ef4a6d40f..14ef4a6d40f 100644
--- a/Master/texmf-dist/tex/context/base/attr-lay.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-lay.mkiv
diff --git a/Master/texmf-dist/tex/context/base/attr-mkr.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-mkr.lua
index 976598fa013..976598fa013 100644
--- a/Master/texmf-dist/tex/context/base/attr-mkr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-mkr.lua
diff --git a/Master/texmf-dist/tex/context/base/attr-mkr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-mkr.mkiv
index c8818ebae7e..c8818ebae7e 100644
--- a/Master/texmf-dist/tex/context/base/attr-mkr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-mkr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/attr-neg.lua b/Master/texmf-dist/tex/context/base/mkiv/attr-neg.lua
index 1347c3d1ad8..1347c3d1ad8 100644
--- a/Master/texmf-dist/tex/context/base/attr-neg.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-neg.lua
diff --git a/Master/texmf-dist/tex/context/base/attr-neg.mkiv b/Master/texmf-dist/tex/context/base/mkiv/attr-neg.mkiv
index ff1f52a96b4..ff1f52a96b4 100644
--- a/Master/texmf-dist/tex/context/base/attr-neg.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/attr-neg.mkiv
diff --git a/Master/texmf-dist/tex/context/base/back-exp.lua b/Master/texmf-dist/tex/context/base/mkiv/back-exp.lua
index 33b6aa1e8ea..681996d4802 100644
--- a/Master/texmf-dist/tex/context/base/back-exp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-exp.lua
@@ -19,7 +19,6 @@ if not modules then modules = { } end modules ['back-exp'] = {
-- tocs/registers -> maybe add a stripper (i.e. just don't flush entries in final tree)
-- footnotes -> css 3
-- bodyfont -> in styles.css
--- delimited -> left/right string (needs marking)
-- Because we need to look ahead we now always build a tree (this was optional in
-- the beginning). The extra overhead in the frontend is neglectable.
@@ -35,11 +34,11 @@ if not modules then modules = { } end modules ['back-exp'] = {
-- check setting __i__
local next, type, tonumber = next, type, tonumber
-local concat, sub, gsub = table.concat, string.sub, string.gsub
+local sub, gsub = string.sub, string.gsub
local validstring = string.valid
local lpegmatch = lpeg.match
local utfchar, utfvalues = utf.char, utf.values
-local insert, remove = table.insert, table.remove
+local concat, insert, remove, merge = table.concat, table.insert, table.remove, table.merge
local sortedhash = table.sortedhash
local formatters = string.formatters
local todimen = number.todimen
@@ -82,7 +81,6 @@ local languagenames = languages.numbers
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
-local whatsitcodes = nodes.whatsitcodes
local listcodes = nodes.listcodes
local hlist_code = nodecodes.hlist
@@ -92,9 +90,6 @@ local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
local disc_code = nodecodes.disc
local insert_code = nodecodes.insert
-local whatsit_code = nodecodes.whatsit
-local refximage_code = whatsitcodes.pdfrefximage
-local localpar_code = whatsitcodes.localpar
local userskip_code = skipcodes.userskip
local rightskip_code = skipcodes.rightskip
@@ -121,13 +116,13 @@ local tonut = nuts.tonut
local getnext = nuts.getnext
local getsubtype = nuts.getsubtype
local getfont = nuts.getfont
-local getchar = nuts.getchar
+local getdisc = nuts.getdisc
local getlist = nuts.getlist
local getid = nuts.getid
local getfield = nuts.getfield
local getattr = nuts.getattr
-
local setattr = nuts.setattr
+local isglyph = nuts.isglyph
local traverse_id = nuts.traverse_id
local traverse_nodes = nuts.traverse
@@ -139,6 +134,8 @@ local specifications = structurestags.specifications
local properties = structurestags.properties
local locatedtag = structurestags.locatedtag
+structurestags.usewithcare = { }
+
local starttiming = statistics.starttiming
local stoptiming = statistics.stoptiming
@@ -311,8 +308,8 @@ function wrapups.hashlistdata()
local tag = ci.references.tag
if tag then
local m = ci.metadata
--- listdata[m.kind .. ":" .. m.name .. "-" .. tag] = ci
- listdata[m.kind .. ">" .. tag] = ci
+ local t = m.kind .. ">" .. tag -- todo: use internal (see strc-lst.lua where it's set)
+ listdata[t] = ci
end
end
end
@@ -628,6 +625,44 @@ end
do
+ local symbols = { }
+
+ function structurestags.settagdelimitedsymbol(symbol)
+ symbols[locatedtag("delimitedsymbol")] = {
+ symbol = symbol,
+ }
+ end
+
+ function extras.delimitedsymbol(di,element,n,fulltag)
+ local hash = symbols[fulltag]
+ if hash then
+ setattribute(di,"symbol",hash.symbol or nil)
+ end
+ end
+
+end
+
+do
+
+ local symbols = { }
+
+ function structurestags.settagsubsentencesymbol(symbol)
+ symbols[locatedtag("subsentencesymbol")] = {
+ symbol = symbol,
+ }
+ end
+
+ function extras.subsentencesymbol(di,element,n,fulltag)
+ local hash = symbols[fulltag]
+ if hash then
+ setattribute(di,"symbol",hash.symbol or nil)
+ end
+ end
+
+end
+
+do
+
local itemgroups = { }
function structurestags.setitemgroup(packed,level,symbol)
@@ -712,13 +747,13 @@ end
do
- -- is this referencing still needed?
-
local descriptions = { }
local symbols = { }
local linked = { }
- function structurestags.setdescription(tag,n) -- needs checking (is tag needed)
+ -- we could move the notation itself to the first reference (can be an option)
+
+ function structurestags.setnotation(tag,n) -- needs checking (is tag needed)
-- we can also use the internals hash or list
local nd = structures.notes.get(tag,n)
if nd then
@@ -727,7 +762,7 @@ do
end
end
- function structurestags.setdescriptionsymbol(tag,n) -- needs checking (is tag needed)
+ function structurestags.setnotationsymbol(tag,n) -- needs checking (is tag needed)
local nd = structures.notes.get(tag,n) -- todo: use listdata instead
if nd then
local references = nd.references
@@ -771,12 +806,13 @@ end
do
- local image = { }
- usedimages.image = image
+ local f_id = formatters["%s-%s"]
+ local image = { }
+ usedimages.image = image
- local f_id = formatters["%s-%s"]
+ structurestags.usewithcare.images = image
- function structurestags.setfigure(name,used,page,width,height)
+ function structurestags.setfigure(name,used,page,width,height,label)
local fulltag = locatedtag("image")
local spec = specifications[fulltag]
local page = tonumber(page)
@@ -787,6 +823,7 @@ do
page = page and page > 1 and page or nil,
width = todimen(width, "cm","%0.3F%s"),
height = todimen(height,"cm","%0.3F%s"),
+ label = label,
}
end
@@ -798,6 +835,7 @@ do
setattribute(di,"id",data.id)
setattribute(di,"width",data.width)
setattribute(di,"height",data.height)
+ setattribute(di,"label",data.height)
end
end
@@ -1670,9 +1708,11 @@ do
function extras.registerlocation(di,element,n,fulltag)
local data = referencehash[fulltag]
- if data then
+ if type(data) == "table" then
extras.addinternal(di,data.references)
return true
+ else
+ -- needs checking, probably bookmarks
end
end
@@ -2492,13 +2532,11 @@ local function finishexport()
end
end
--- whatsit_code localpar_code
-
local function collectresults(head,list,pat,pap) -- is last used (we also have currentattribute)
local p
for n in traverse_nodes(head) do
- local id = getid(n) -- 14: image, 8: literal (mp)
- if id == glyph_code then
+ local c, id = isglyph(n) -- 14: image, 8: literal (mp)
+ if c then
local at = getattr(n,a_tagged) or pat
if not at then
-- we need to tag the pagebody stuff as being valid skippable
@@ -2507,7 +2545,6 @@ local function collectresults(head,list,pat,pap) -- is last used (we also have c
else
-- we could add tonunicodes for ligatures (todo)
local components = getfield(n,"components")
- local c = getchar(n)
if components and (not characterdata[c] or overloads[c]) then -- we loose data
collectresults(components,nil,at) -- this assumes that components have the same attribute as the glyph ... we should be more tolerant (see math)
else
@@ -2602,14 +2639,13 @@ local function collectresults(head,list,pat,pap) -- is last used (we also have c
end
end
elseif id == disc_code then -- probably too late
+ local pre, post, replace = getdisc(n)
if keephyphens then
- local pre = getfield(n,"pre")
- if pre and not getnext(pre) and getid(pre) == glyph_code and getchar(pre) == hyphencode then
+ if pre and not getnext(pre) and isglyph(pre) == hyphencode then
nofcurrentcontent = nofcurrentcontent + 1
currentcontent[nofcurrentcontent] = hyphen
end
end
- local replace = getfield(n,"replace")
if replace then
collectresults(replace,nil)
end
@@ -2658,8 +2694,7 @@ local function collectresults(head,list,pat,pap) -- is last used (we also have c
else
local subtype = getsubtype(n)
if subtype == userskip_code then
- local spec = getfield(n,"spec")
- if getfield(spec,"width") > threshold then
+ if getfield(n,"width") > threshold then
if last and not somespace[currentcontent[nofcurrentcontent]] then
local a = getattr(n,a_tagged) or pat
if a == last then
@@ -3190,13 +3225,16 @@ local htmltemplate = [[
at.href = nil
at.detail = nil
at.chain = nil
+ elseif tg == "metavariable" then
+ at.detail = "metaname-" .. at.name
+ class = makeclass(tg,at)
else
class = makeclass(tg,at)
end
- local id = at.id
- local href = at.href
+ local id = at.id
+ local href = at.href
if id then
- id = lpegmatch(p_cleanid, id) or id
+ id = lpegmatch(p_cleanid, id) or id
if href then
href = lpegmatch(p_cleanhref,href) or href
c.at = {
@@ -3509,7 +3547,7 @@ local htmltemplate = [[
local enableaction = nodes.tasks.enableaction
function structurestags.setupexport(t)
- table.merge(finetuning,t)
+ merge(finetuning,t)
keephyphens = finetuning.hyphen == v_yes
exportproperties = finetuning.properties
if exportproperties == v_no then
@@ -3590,6 +3628,18 @@ implement {
}
implement {
+ name = "settagdelimitedsymbol",
+ actions = structurestags.settagdelimitedsymbol,
+ arguments = "string"
+}
+
+implement {
+ name = "settagsubsentencesymbol",
+ actions = structurestags.settagsubsentencesymbol,
+ arguments = "string"
+}
+
+implement {
name = "settagsynonym",
actions = structurestags.setsynonym,
arguments = "string"
@@ -3602,14 +3652,14 @@ implement {
}
implement {
- name = "settagdescription",
- actions = structurestags.setdescription,
+ name = "settagnotation",
+ actions = structurestags.setnotation,
arguments = { "string", "integer" }
}
implement {
- name = "settagdescriptionsymbol",
- actions = structurestags.setdescriptionsymbol,
+ name = "settagnotationsymbol",
+ actions = structurestags.setnotationsymbol,
arguments = { "string", "integer" }
}
@@ -3622,7 +3672,7 @@ implement {
implement {
name = "settagfigure",
actions = structurestags.setfigure,
- arguments = { "string", "string", "string", "dimen", "dimen" }
+ arguments = { "string", "string", "string", "dimen", "dimen", "string" }
}
implement {
diff --git a/Master/texmf-dist/tex/context/base/back-exp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-exp.mkiv
index a4ebe38aafa..48f4d3c4871 100644
--- a/Master/texmf-dist/tex/context/base/back-exp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-exp.mkiv
@@ -89,14 +89,14 @@
\fi}%
% brrr, we need to tag empty cells (unless we start numbering)
\unexpanded\def\dotagTABLEsignal
- {\char\zerocount}%
+ {\signalcharacter}%
\to \everyenableelements
\appendtoks
\unexpanded\def\dotagtabulatecell
{\iftrialtypesetting\else\clf_settagtabulatecell\c_tabl_tabulate_align\fi}%
\unexpanded\def\dotagtabulatesignal
- {\dontleavehmode\char\zerocount\ignorespaces}%
+ {\dontleavehmode\signalcharacter\ignorespaces}%
\to \everyenableelements
\appendtoks
@@ -125,6 +125,7 @@
{\figurefilepage}%
\dimexpr\figurewidth\relax
\dimexpr\figureheight\relax
+ {\figurelabel}%
\fi}%
\to \everyenableelements
@@ -158,17 +159,24 @@
\fi}%
\to \everyenableelements
+% \appendtoks
+% \unexpanded\def\dotagsetdescription
+% {\iftrialtypesetting\else
+% \clf_settagdescription{\currentdescription}\currentdescriptionnumberentry\relax
+% \fi}%
+% \to \everyenableelements
+
\appendtoks
- \unexpanded\def\dotagsetdescription
+ \unexpanded\def\dotagsetnotation
{\iftrialtypesetting\else
- \clf_settagdescription{\currentdescription}\currentdescriptionnumberentry\relax
+ \clf_settagnotation{\currentnote}\currentnotenumber\relax
\fi}%
\to \everyenableelements
\appendtoks
\unexpanded\def\dotagsetnotesymbol
{\iftrialtypesetting\else
- \clf_settagdescriptionsymbol{\currentnote}\currentnotenumber\relax
+ \clf_settagnotationsymbol{\currentnote}\currentnotenumber\relax
\fi}%
\to \everyenableelements
@@ -187,6 +195,20 @@
\to \everyenableelements
\appendtoks
+ \unexpanded\def\dotagsetdelimitedsymbol#1%
+ {\iftrialtypesetting\else
+ \clf_settagdelimitedsymbol{#1}\relax
+ \fi}%
+\to \everyenableelements
+
+\appendtoks
+ \unexpanded\def\dotagsetsubsentencesymbol#1%
+ {\iftrialtypesetting\else
+ \clf_settagsubsentencesymbol{#1}\relax
+ \fi}%
+\to \everyenableelements
+
+\appendtoks
\let\specialfixedspace \explicitfixedspace
\let\specialobeyedspace \explicitobeyedspace
\let\specialstretchedspace\explicitstretchedspace
diff --git a/Master/texmf-dist/tex/context/base/back-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/back-ini.lua
index e8af4d9d9c2..e8af4d9d9c2 100644
--- a/Master/texmf-dist/tex/context/base/back-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/back-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-ini.mkiv
index 2b0f054eea4..9859f026a1f 100644
--- a/Master/texmf-dist/tex/context/base/back-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-ini.mkiv
@@ -42,14 +42,8 @@
%D versions might support more backends again, but this has a low
%D priority.
%D
-%D The big question is: what is to be considered a backend issue and
-%D what not. For the moment we treat image inclusion, object reuse,
-%D position tracking and color as frontend issues, if only because we
-%D deal with them via \LUA\ code and as such we don't depend too much
-%D on macro calls that need to inject code for the backend.
-%D
%D Not everything here makes sense and the content of this file will
-%D definitely change.
+%D definitely change (or even go away).
\let \dostartrotation \gobbleoneargument
\let \dostoprotation \donothing
@@ -91,45 +85,6 @@
\let \dostopclipping \donothing
%D \macros
-%D {dostartobject,
-%D dostopobject,
-%D doresetobjects,
-%D doinsertobject}
-%D
-%D Reuse of object can reduce the output filesize
-%D considerably. Reusable objects are implemented with:
-%D
-%D \starttyping
-%D \dostartobject{class}{name}{width}{height}{depth}
-%D some typeset material
-%D \dostopobject
-%D \stoptyping
-%D
-%D \starttyping
-%D \doinsertobject{class}{name}
-%D \stoptyping
-%D
-%D The savings can be huge in interactive texts. The next macro needs
-%D to be called after a graphic is inserted (in order to clean up
-%D global references).
-%D
-%D \starttyping
-%D \doresetobjects
-%D \stoptyping
-
-\let \dostartobject \gobblefourarguments
-\let \dostopobject \donothing
-\let \doinsertobject \gobbletwoarguments
-\let \doresetobjects \donothing
-
-%D From now on, mapfile loading is also a special; we assume the
-%D more or less standard dvips syntax.
-
-%let \doresetmapfilelist \donothing
-%let \doloadmapfile \gobbletwoarguments % + - = | filename
-%let \doloadmapline \gobbletwoarguments % + - = | fileline
-
-%D \macros
%D {jobsuffix}
%D
%D By default, \TEX\ produces \DVI\ files which can be
diff --git a/Master/texmf-dist/tex/context/base/back-pdf.lua b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.lua
index 7f0b1acc740..0821abb2895 100644
--- a/Master/texmf-dist/tex/context/base/back-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.lua
@@ -23,6 +23,7 @@ local scaninteger = scanners.integer
local scankeyword = scanners.keyword
local scanners = interfaces.scanners
+local implement = interfaces.implement
local outputfilename
@@ -57,7 +58,7 @@ local pdfsetmatrix = nodes.pool.pdfsetmatrix
local stack = { }
local restore = true -- false
-scanners.pdfstartrotation = function() -- a
+scanners.pdfstartrotation = function()
local a = scannumber()
if a == 0 then
insert(stack,false)
@@ -69,53 +70,56 @@ scanners.pdfstartrotation = function() -- a
end
end
-scanners.pdfstartscaling = function() -- sx sy
- local sx, sy = 0, 0
+scanners.pdfstartscaling = function() -- at the tex end we use sx and sy instead of rx and ry
+ local rx, ry = 1, 1
while true do
- if scankeyword("sx") then
- sx = scannumber()
- elseif scankeyword("sy") then
- sy = scannumber()
+ if scankeyword("rx") then
+ rx = scannumber()
+ elseif scankeyword("ry") then
+ ry = scannumber()
+ -- elseif scankeyword("revert") then
+ -- local top = stack[#stack]
+ -- if top then
+ -- rx = top[1]
+ -- ry = top[4]
+ -- else
+ -- rx = 1
+ -- ry = 1
+ -- end
else
break
end
end
- if sx == 1 and sy == 1 then
+ if rx == 1 and ry == 1 then
insert(stack,false)
else
- if sx == 0 then
- sx = 0.0001
+ if rx == 0 then
+ rx = 0.0001
end
- if sy == 0 then
- sy = 0.0001
+ if ry == 0 then
+ ry = 0.0001
end
context(pdfsave())
- context(pdfsetmatrix(sx,0,0,sy))
- insert(stack,restore and { 1/sx, 0, 0, 1/sy } or true)
+ context(pdfsetmatrix(rx,0,0,ry))
+ insert(stack,restore and { 1/rx, 0, 0, 1/ry } or true)
end
end
-scanners.pdfstartmatrix = function() -- sx rx ry sy -- tx, ty
- local sx, rx, ry, sy = 0, 0, 0, 0
+scanners.pdfstartmatrix = function() -- rx sx sy ry -- tx, ty
+ local rx, sx, sy, ry = 1, 0, 0, 1
while true do
- if scankeyword("sx") then
- sx = scannumber()
- elseif scankeyword("sy") then
- sy = scannumber()
- elseif scankeyword("rx") then
- rx = scannumber()
- elseif scankeyword("ry") then
- ry = scannumber()
- else
- break
- end
+ if scankeyword("rx") then rx = scannumber()
+ elseif scankeyword("ry") then ry = scannumber()
+ elseif scankeyword("sx") then sx = scannumber()
+ elseif scankeyword("sy") then sy = scannumber()
+ else break end
end
- if sx == 1 and rx == 0 and ry == 0 and sy == 1 then
+ if rx == 1 and sx == 0 and sy == 0 and ry == 1 then
insert(stack,false)
else
context(pdfsave())
- context(pdfsetmatrix(sx,rx,ry,sy))
- insert(stack,store and { -sx, -rx, -ry, -sy } or true)
+ context(pdfsetmatrix(rx,sx,sy,ry))
+ insert(stack,store and { -rx, -sx, -sy, -ry } or true)
end
end
@@ -126,7 +130,7 @@ local function pdfstopsomething()
elseif top == true then
context(pdfrestore())
elseif top then
- context(pdfsetmatrix(unpack(top)))
+ context(pdfsetmatrix(unpack(top))) -- not really needed anymore
context(pdfrestore())
else
-- nesting error
@@ -143,8 +147,25 @@ end
scanners.pdfstopmirroring = scanners.pdfstartmirroring
-scanners.registerbackendsymbol = function()
- backends.codeinjections.registersymbol(scanstring(),scaninteger())
-end
+-- todo, change the above to implement too --
+
+implement {
+ name = "setmapfile",
+ arguments = "string",
+ actions = pdf.mapfile
+}
--- todo : clipping
+implement {
+ name = "setmapline",
+ arguments = "string",
+ actions = pdf.mapline
+}
+
+implement {
+ name = "setpdfcompression",
+ arguments = { "integer", "integer" },
+ actions = function(c,o)
+ pdf.setcompresslevel(c)
+ pdf.setobjcompresslevel(o)
+ end
+}
diff --git a/Master/texmf-dist/tex/context/base/back-pdf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv
index 38de4bbfd48..ab9e4160cb9 100644
--- a/Master/texmf-dist/tex/context/base/back-pdf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-pdf.mkiv
@@ -19,6 +19,7 @@
\registerctxluafile{lpdf-col}{1.000}
\registerctxluafile{lpdf-xmp}{1.001}
\registerctxluafile{lpdf-ano}{1.001}
+\registerctxluafile{lpdf-res}{1.001}
\registerctxluafile{lpdf-mis}{1.001}
\registerctxluafile{lpdf-ren}{1.001}
\registerctxluafile{lpdf-grp}{1.001}
@@ -41,31 +42,126 @@
%D
%D Here we initialize some internal quantities. We also protect them.
-\pdfoutput \plusone \let\pdfoutput \undefined \newcount\pdfoutput \pdfoutput \plusone
-
-%D These are already set:
-
-\pdfhorigin 1 true in \let\pdfhorigin\undefined \newdimen\pdfhorigin \pdfhorigin 1 true in
-\pdfvorigin \pdfhorigin \let\pdfvorigin\undefined \newdimen\pdfvorigin \pdfvorigin \pdfhorigin
-
-%D These too and most of them will be protected as well:
-
-\pdfminorversion \plusseven
-\pdfgentounicode \plusone \let\pdfgentounicode \undefined \newcount\pdfgentounicode
-\pdfinclusioncopyfonts \plusone \let\pdfinclusioncopyfonts \undefined \newcount\pdfinclusioncopyfonts
-\pdfinclusionerrorlevel \zerocount \let\pdfinclusionerrorlevel\undefined \newcount\pdfinclusionerrorlevel
-\pdfdecimaldigits \plusten \let\pdfdecimaldigits \undefined \newcount\pdfdecimaldigits
-\pdfimageresolution 300
-\pdfpkresolution 600
-
-%D Let's block these (we could share a dummy:
-
-\let\pdfcatalog \relax \newtoks\pdfcatalog
-\let\pdfinfo \relax \newtoks\pdfinfo
-\let\pdfnames \relax \newtoks\pdfnames
-\let\pdfpageresources\relax \newtoks\pdfpageresources
-\let\pdfpageattr \relax \newtoks\pdfpageattr
-\let\pdfpagesattr \relax \newtoks\pdfpagesattr
+\outputmode \plusone \let\modeoutput \undefined \newcount\outputmode \outputmode \plusone
+
+%D Because we do a lot in \LUA\ and don't want interferences, we nil most of the
+%D \PDFTEX\ primitives. Of course one can always use the \type {\pdfvariable},
+%D \type {\pdfextension} and \type {\pdffeedback} primitives but it will probably
+%D have bad side effects.
+
+%D These are no-ops and don't even intercept what comes next. Maybe some day
+%D I'll write a parser that maps onto \CONTEXT.
+
+\let\pdfcolorstack \relax
+\let\pdfcolorstackinit \relax
+\let\pdfannot \relax
+\let\pdfstartlink \relax
+\let\pdfendlink \relax
+\let\pdfoutline \relax
+\let\pdfdest \relax
+\let\pdfthread \relax
+\let\pdfstartthread \relax
+\let\pdfendthread \relax
+\let\pdffontattr \relax
+\let\pdfglyphtounicode \relax
+
+%D Here we do intercept (silently) what gets passed. One should use the
+%D \CONTEXT\ interfaces instead.
+
+\let\pdfcatalog \relax \newtoks \pdfcatalog
+\let\pdfinfo \relax \newtoks \pdfinfo
+\let\pdfnames \relax \newtoks \pdfnames
+\let\pdftrailer \relax \newtoks \pdftrailer
+\let\pdfpageresources \relax \newtoks \pdfpageresources
+\let\pdfpageattr \relax \newtoks \pdfpageattr
+\let\pdfpagesattr \relax \newtoks \pdfpagesattr
+\let\pdfxformattr \relax \newtoks \pdfxformattr
+\let\pdfxformresources \relax \newtoks \pdfxformresources
+
+%D We use the \LUA\ interface (which then permits more control over
+%D possible pdf/x extensions).
+
+\let\pdfcompresslevel \relax \newcount\pdfcompresslevel
+\let\pdfobjcompresslevel\relax \newcount\pdfobjcompresslevel
+
+%D But we still provide:
+
+\unexpanded\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount}
+\unexpanded\def\maximumpdfcompression{\clf_setpdfcompression\plusnine \plusnine }
+\unexpanded\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree}
+
+%D These might even become no-ops as we don't need them in \CONTEXT:
+
+\unexpanded\def\pdfmapfile#1{\clf_setmapfile{#1}}
+\unexpanded\def\pdfmapline#1{\clf_setmapline{#1}}
+
+%D We don't support these directives, at least not this way. If they are needed
+%D by third party modules we can provide some interface.
+
+\let\pdfcreationdate \relax \newtoks \pdfcreationdate
+\let\pdfdecimaldigits \relax \newcount\pdfdecimaldigits
+\let\pdfdestmargin \relax \newcount\pdfdestmargin
+\let\pdffontname \relax \newcount\pdffontname
+\let\pdffontobjnum \relax \newcount\pdffontobjnum
+\let\pdffontsize \relax \newcount\pdffontsize
+\let\pdfgamma \relax \newcount\pdfgamma
+\let\pdfgentounicode \relax \newcount\pdfgentounicode
+\let\pdfhorigin \relax \newcount\pdfhorigin
+\let\pdfignoreunknownimages \relax \newcount\pdfignoreunknownimages
+\let\pdfimageaddfilename \relax \newcount\pdfimageaddfilename
+\let\pdfimageapplygamma \relax \newcount\pdfimageapplygamma
+\let\pdfimagegamma \relax \newcount\pdfimagegamma
+\let\pdfimagehicolor \relax \newcount\pdfimagehicolor
+\let\pdfimageresolution \relax \newcount\pdfimageresolution
+\let\pdfincludechars \relax \newtoks \pdffontsize
+\let\pdfinclusioncopyfonts \relax \newcount\pdfinclusioncopyfonts
+\let\pdfinclusionerrorlevel \relax \newcount\pdfinclusionerrorlevel
+\let\pdfinfoomitdate \relax \newcount\pdfinfoomitdate
+\let\pdflastannot \relax \newcount\pdflastannot
+\let\pdflastlink \relax \newcount\pdflastlink
+\let\pdflinkmargin \relax \newcount\pdflinkmargin
+\let\pdfminorversion \relax \newcount\pdfminorversion
+\let\pdfpagebox \relax \newcount\pdfpagebox
+\let\pdfpageref \relax \newcount\pdfpageref
+\let\pdfpkfixeddpi \relax \newcount\pdfpkfixeddpi
+\let\pdfpkmode \relax \newtoks \pdfpkmode
+\let\pdfpkresolution \relax \newcount\pdfpkresolution
+\let\pdfretval \relax \newcount\pdfretval
+\let\pdfsuppressoptionalinfo \relax \newcount\pdfsuppressoptionalinfo
+\let\pdfsuppressptexinfo \relax \newcount\pdfsuppressptexinfo
+\let\pdftexrevision \relax \newcount\pdftexrevision
+\let\pdftexversion \relax \newcount\pdftexversion
+\let\pdfthreadmargin \relax \newcount\pdfthreadmargin
+\let\pdftrailerid \relax \newtoks \pdftrailerid
+\let\pdfuniqueresname \relax \newcount\pdfuniqueresname
+\let\pdfvorigin \relax \newcount\pdfvorigin
+\let\pdfxformmargin \relax \newcount\pdfxformmargin
+\let\pdfxformname \relax \newcount\pdfxformname
+
+%D These are still accepted but are normally not needed.
+
+\let\pdflastxform \lastsavedboxresourceindex
+\let\pdflastximage \lastsavedimageresourceindex
+\let\pdflastximagepages \lastsavedimageresourcepages
+\let\pdflastxpos \lastxpos
+\let\pdflastypos \lastypos
+\let\pdfrefxform \useboxresource
+\let\pdfrefximage \useimageresource
+\let\pdfsavepos \savepos
+\let\pdfxform \saveboxresource
+\let\pdfximage \saveimageresource
+
+%D For the moment we keep these as they are but they will become \LUA\
+%D calls eventually, after which we will nil the three \type {\pdf}
+%D interface primitives.
+
+\normalprotected\def\pdfliteral {\pdfextension literal }
+\normalprotected\def\pdfobj {\pdfextension obj }
+ \def\pdflastobj {\numexpr\pdffeedback lastobj\relax}
+\normalprotected\def\pdfrefobj {\pdfextension refobj }
+\normalprotected\def\pdfrestore {\pdfextension restore\relax}
+\normalprotected\def\pdfsave {\pdfextension save\relax}
+\normalprotected\def\pdfsetmatrix{\pdfextension setmatrix }
%D This one can be consulted by users although the suffix is also
%D a system mode.
@@ -97,7 +193,7 @@
%D For the moment we keep these.
-\newtoks \pdfbackendeveryximage
+%newtoks \pdfbackendeveryximage
\newtoks \pdfbackendeveryxform
%D These are the only official methods to add stuff to the resources.
@@ -119,68 +215,29 @@
\def\pdfcolor #1{\clf_lpdf_color\numexpr\thecolorattribute{#1}\relax}
\let\PDFcolor\pdfcolor
-%D An example of usage is:
-
-\appendtoks % this will be moved to lua
- \pdfbackendsetinfo{ConTeXt.Version}{\contextversion}%
- \pdfbackendsetinfo{ConTeXt.Time} {\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute}%
- \pdfbackendsetinfo{ConTeXt.Jobname}{\jobname}%
- \pdfbackendsetinfo{ConTeXt.Url} {www.pragma-ade.com}%
- \pdfbackendsetinfo{ConTeXt.Support}{contextgarden.net}%
-\to \everylastbackendshipout
-
-%D Transformations. Some day we will use primitives (once they're fixed).
-
-% todo: inject at the lua end cq. deal with #5 and #6 too
-
-% % % rotation % % %
+%D Transformations
-% \unexpanded\def\dostartrotation#1% grouped
-% {\forcecolorhack
-% \pdfsave
-% \pdfsetmatrix{\clf_pdfrotation#1}}
-
-% \unexpanded\def\dostoprotation
-% {\pdfrestore
-% \forcecolorhack}
+% rotation
\unexpanded\def\dostartrotation#1%
{\forcecolorhack
- \clf_pdfstartrotation#1\relax}
+ \clf_pdfstartrotation#1\relax} % todo: implement without Q q
\unexpanded\def\dostoprotation
- {\clf_pdfstoprotation}
-
-% % % scaling % % %
-
-% \unexpanded\def\dostartscaling#1#2% the test is needed because acrobat is bugged!
-% {\forcecolorhack % maybe use signal instead
-% \pdfsave
-% \pdfsetmatrix
-% {\ifdim#1\points=\zeropoint.0001\else#1\fi\space 0 0
-% \ifdim#2\points=\zeropoint.0001\else#2\fi\space}}% 0 0
+ {\clf_pdfstoprotation
+ \forcecolorhack}
-% \unexpanded\def\dostopscaling
-% {\pdfrestore
-% \forcecolorhack}
+% scaling
\unexpanded\def\dostartscaling#1#2%
{\forcecolorhack
- \clf_pdfstartscaling sx #1 sy #2\relax}
+ \clf_pdfstartscaling rx #1 ry #2\relax}
\unexpanded\def\dostopscaling
- {\clf_pdfstopscaling}
-
-% % % mirroring % % %
-
-% \unexpanded\def\dostartmirroring
-% {\forcecolorhack
-% \pdfsave
-% \pdfsetmatrix{-1 0 0 1}} % 0 0
+ {\clf_pdfstopscaling
+ \forcecolorhack}
-% \unexpanded\def\dostopmirroring
-% {\pdfrestore
-% \forcecolorhack}
+% mirroring
\unexpanded\def\dostartmirroring
{\clf_pdfstartmirroring}
@@ -188,43 +245,17 @@
\unexpanded\def\dostopmirroring
{\clf_pdfstopmirroring}
-% % % transform % % %
+% transform
-% \unexpanded\def\dotransformnextbox#1#2#3#4#5#6% sx rx ry sy tx ty (will change) / basepoints !
-% {\dowithnextbox{\dodotransformnextbox{#5}{#6}{#1 #2 #3 #4}}}
-
-% \unexpanded\def\dodotransformnextbox#1#2#3%
-% {\hbox
-% {\kern#1\onebasepoint
-% \raise#2\onebasepoint\hbox
-% {\pdfsave
-% \pdfsetmatrix{#3}% 0 0 (no #5 #6 yet)
-% \box\nextbox
-% \pdfrestore
-% }}}
-
-% \unexpanded\def\dotransformnextbox#1#2#3#4#5#6% sx rx ry sy tx ty (will change) / basepoints !
-% {% fixing ht/dp/wd should happen elsewhere
-% \dowithnextbox{\dodotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-% \unexpanded\def\dodotransformnextbox#1#2#3#4#5#6%
-% {\hbox
-% {\kern #5\onebasepoint
-% \raise#6\onebasepoint
-% \hbox
-% {\clf_pdfstartmatrix sx #1 rx #2 ry #3 sy #4\relax
-% \box\nextbox
-% \clf_pdfstopmatrix}}}
-
-\unexpanded\def\dotransformnextbox#1#2#3#4#5#6% sx rx ry sy tx ty (will change) / basepoints !
+\unexpanded\def\dotransformnextbox#1#2#3#4#5#6%
{\dowithnextbox{\dodotransformnextbox{#1}{#2}{#3}{#4}{#5}{#6}}}
\unexpanded\def\dodotransformnextbox#1#2#3#4#5#6%
- {\hbox
+ {\hpack
{\kern #5\onebasepoint
\raise#6\onebasepoint
- \hbox
- {\clf_pdfstartmatrix sx #1 rx #2 ry #3 sy #4\relax
+ \hpack
+ {\clf_pdfstartmatrix rx #1 sx #2 sy #3 ry #4\relax
\box\nextbox
\clf_pdfstopmatrix}}}
@@ -235,8 +266,8 @@
% \box\nextbox}
%
% \startluacode
-% function commands.pdftransformbox(box,sx,rx,ry,sy,tx,ty)
-% if sx == 1 and rx == 0 and ry == 0 and sy == 1 then
+% function commands.pdftransformbox(box,rx,sx,sy,ry,tx,ty)
+% if rx == 1 and sx == 0 and sy == 0 and ry == 1 then
% if tx == 0 and ty == 0 then
% local b = nodes.hpack(nodes.concat {
% nodes.pool.kern(tx),
@@ -251,9 +282,9 @@
% local b = nodes.hpack(nodes.concat {
% nodes.pool.kern(tx),
% nodes.pool.pdfsave(),
-% nodes.pool.pdfsetmatrix(sx,rx,ry,sy),
+% nodes.pool.pdfsetmatrix(rx,sx,sy,ry),
% nodes.takebox(box),
-% nodes.pool.pdfsetmatrix(-sx,-rx,-ry,-sy),
+% nodes.pool.pdfsetmatrix(-rx,-sx,-sy,-ry),
% nodes.pool.pdfrestore(),
% })
% b.shift = -ty
@@ -262,7 +293,7 @@
% end
% \stopluacode
-% % % clipping % % %
+% clipping
\unexpanded\def\dostartclipping#1#2#3% we can move this to lua and only set a box here
{\PointsToBigPoints{#2}\width
@@ -278,63 +309,24 @@
\unexpanded\def\dostopclipping
{\pdfliteral{Q}}
-%D The following will move to the backend \LUA\ code:
-
-%appendtoks \ctxlua{backends.codeinjections.finalizepage ()}\to \everybackendshipout % is immediate
-%appendtoks \ctxlua{backends.codeinjections.finalizedocument()}\to \everylastbackendshipout % is immediate
-
%D Temporary hack, will be removed or improved or default.
-%def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}}
-\def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]}
-
-%D \macros
-%D {dostartobject,dostopobject,doinsertobject}
-
-%D This will change:
-
-\newbox\objectbox
-
-\unexpanded\def\dostartobject#1#2#3#4#5% needs to be \unexpanded
- {\bgroup
- \setbox\objectbox\vbox\bgroup
- \def\back_object_stop{\egroup\back_object_register{#1}{#2}}}
-
-\unexpanded\def\dostopobject % needs to be \unexpanded
- {\back_object_stop
- \egroup}
-
-\let\back_object_stop\relax
-
% attr {/Group << /S /Transparency /I false /K true >>}
-\def\back_object_register#1#2%
- {\the\pdfbackendeveryxform
- \finalizeobjectbox\objectbox
- \immediate\pdfxform resources {\pdfbackendcurrentresources}\objectbox
- \dosetobjectreference{#1}{#2}\pdflastxform}
-
-\let\m_back_object_reference\empty
-
-\unexpanded\def\doinsertobject#1#2%
- {\begingroup
- \doifelseobjectreferencefound{#1}{#2}
- {\dogetobjectreference{#1}{#2}\m_back_object_reference
- \pdfrefxform\m_back_object_reference}%
- \donothing
- \endgroup}
-
-\let\lastpredefinedsymbol\empty % some day we can do more at the lua end
+%def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}}
+\def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]}
-\unexpanded\def\predefinesymbol[#1]%
- {\begingroup
- \xdef\lastpredefinedsymbol{#1}%
- \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
- \dogetobjectreference{SYM}{#1}\m_back_object_reference
- \clf_registerbackendsymbol{#1}\m_back_object_reference\relax
- \endgroup}
+% \let\lastpredefinedsymbol\empty % some day we can do more at the lua end
+%
+% \unexpanded\def\predefinesymbol[#1]%
+% {\begingroup
+% \xdef\lastpredefinedsymbol{#1}%
+% \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
+% \dogetobjectreference{SYM}{#1}\m_back_object_reference
+% \clf_registerbackendsymbol{#1}\m_back_object_reference\relax
+% \endgroup}
-% for the moment here
+% Still here:
%D \macros
%D {back_ovalbox}
@@ -384,7 +376,7 @@
\edef\dofill{\number#7}%
\edef\mode{\number#8}%
% no \ifcase, else \relax in pdfcode
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\naturalhpack
{\ifnum\dostroke\dofill>\zerocount
\pdfliteral
{q
diff --git a/Master/texmf-dist/tex/context/base/back-swf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-swf.mkiv
index 09745e0f93f..09745e0f93f 100644
--- a/Master/texmf-dist/tex/context/base/back-swf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-swf.mkiv
diff --git a/Master/texmf-dist/tex/context/base/back-u3d.mkiv b/Master/texmf-dist/tex/context/base/mkiv/back-u3d.mkiv
index 297dd554579..297dd554579 100644
--- a/Master/texmf-dist/tex/context/base/back-u3d.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/back-u3d.mkiv
diff --git a/Master/texmf-dist/tex/context/base/bibl-bib.lua b/Master/texmf-dist/tex/context/base/mkiv/bibl-bib.lua
index baeb3d2f9af..baeb3d2f9af 100644
--- a/Master/texmf-dist/tex/context/base/bibl-bib.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/bibl-bib.lua
diff --git a/Master/texmf-dist/tex/context/base/bibl-bib.mkiv b/Master/texmf-dist/tex/context/base/mkiv/bibl-bib.mkiv
index 80d04099bd2..80d04099bd2 100644
--- a/Master/texmf-dist/tex/context/base/bibl-bib.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/bibl-bib.mkiv
diff --git a/Master/texmf-dist/tex/context/base/bibl-tra.lua b/Master/texmf-dist/tex/context/base/mkiv/bibl-tra.lua
index 223554b4daa..223554b4daa 100644
--- a/Master/texmf-dist/tex/context/base/bibl-tra.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/bibl-tra.lua
diff --git a/Master/texmf-dist/tex/context/base/bibl-tra.mkiv b/Master/texmf-dist/tex/context/base/mkiv/bibl-tra.mkiv
index 4c9e83fdf9d..4c9e83fdf9d 100644
--- a/Master/texmf-dist/tex/context/base/bibl-tra.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/bibl-tra.mkiv
diff --git a/Master/texmf-dist/tex/context/base/bibl-tst.lua b/Master/texmf-dist/tex/context/base/mkiv/bibl-tst.lua
index 5ff8f45709f..5ff8f45709f 100644
--- a/Master/texmf-dist/tex/context/base/bibl-tst.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/bibl-tst.lua
diff --git a/Master/texmf-dist/tex/context/base/blob-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/blob-ini.lua
index b837250ce70..106c10f4f32 100644
--- a/Master/texmf-dist/tex/context/base/blob-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/blob-ini.lua
@@ -6,16 +6,10 @@ if not modules then modules = { } end modules ['blob-ini'] = {
license = "see context related readme files"
}
--- Experimental ... names and functionality will change ... just a
--- place to collect code, so:
---
--- DON'T USE THESE FUNCTIONS AS THEY WILL CHANGE!
---
--- This module is just a playground. Occasionally we need to typeset
--- at the lua and and this is one method. In principle we can construct
--- pages this way too which sometimes makes sense in dumb cases. Actually,
--- if one only needs this, one does not really need tex, okay maybe the
--- parbuilder but that one can be simplified as well then.
+-- This module is just a playground. Occasionally we need to typeset at the lua and and
+-- this is one method. In principle we can construct pages this way too which sometimes
+-- makes sense in dumb cases. Actually, if one only needs this, one does not really need
+-- tex, okay maybe the parbuilder but that one can be simplified as well then.
-- set fonts, attributes
-- rest already done in packers etc
@@ -41,21 +35,18 @@ local write_node = node.write
local typesetters = nodes.typesetters
local tonodes = typesetters.tonodes
local tohpack = typesetters.tohpack
-local tohpackfast = typesetters.tohpackfast
local tovpack = typesetters.tovpack
-local tovpackfast = typesetters.tovpackfast
local implement = interfaces.implement
-blobs = blobs or { }
-
-- provide copies here (nicer for manuals)
+blobs = blobs or { }
+local blobs = blobs
+
blobs.tonodes = tonodes
blobs.tohpack = tohpack
-blobs.tohpackfast = tohpackfast
blobs.tovpack = tovpack
-blobs.tovpackfast = tovpackfast
-- end of helpers
@@ -146,21 +137,21 @@ end
-- blob.paragraph
-- blob.page
---~ local lineblob = {
---~ type = "line",
---~ head = false,
---~ tail = false,
---~ pack = false,
---~ properties = { },
---~ end
-
---~ local parblob = {
---~ type = "line",
---~ head = false,
---~ tail = false,
---~ pack = false,
---~ properties = { },
---~ end
+-- local lineblob = {
+-- type = "line",
+-- head = false,
+-- tail = false,
+-- pack = false,
+-- properties = { },
+-- end
+
+-- local parblob = {
+-- type = "line",
+-- head = false,
+-- tail = false,
+-- pack = false,
+-- properties = { },
+-- end
-- for the moment here:
diff --git a/Master/texmf-dist/tex/context/base/blob-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/blob-ini.mkiv
index 64582c0db59..64582c0db59 100644
--- a/Master/texmf-dist/tex/context/base/blob-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/blob-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-default.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.lua
index 79f01c47d31..79f01c47d31 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-default.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-default.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.mkiv
index 5cff34c7006..5cff34c7006 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-default.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-default.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-escaped.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.lua
index 159921e2a85..159921e2a85 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-escaped.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-escaped.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.mkiv
index 13850475a82..13850475a82 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-escaped.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-escaped.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.lua
index e873a34d182..e873a34d182 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-lua.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.mkiv
index dc601bd7b8e..dc601bd7b8e 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-lua.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-lua.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-mp.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.lua
index bcd18dd47a0..bcd18dd47a0 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-mp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-mp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.mkiv
index a40eb6c303f..a40eb6c303f 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-mp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-mp.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-nested.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.lua
index 019cd996d6e..019cd996d6e 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-nested.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-nested.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.mkiv
index 7815086dbfa..7815086dbfa 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-nested.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-nested.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.lua
index 22611ac8ab7..22611ac8ab7 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.mkiv
index bd348a67dd8..bd348a67dd8 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-parsed-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-parsed-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.lua
index 097dff21246..097dff21246 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-tex.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.mkiv
index c582523d53b..c582523d53b 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-tex.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-tex.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-xml.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.lua
index 0c48ed3b090..0c48ed3b090 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-xml.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-imp-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.mkiv
index f880ab88225..f880ab88225 100644
--- a/Master/texmf-dist/tex/context/base/buff-imp-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-imp-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-ini.lua
index dafe2ad0e75..c41c516073b 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-ini.lua
@@ -50,7 +50,12 @@ local registertempfile = luatex.registertempfile
local v_yes = variables.yes
-local p_whitespace = patterns.whitespace
+local eol = patterns.eol
+local space = patterns.space
+local whitespace = patterns.whitespace
+local blackspace = whitespace - eol
+local whatever = (1-eol)^1 * eol^0
+local emptyline = space^0 * eol
local catcodenumbers = catcodes.numbers
@@ -264,25 +269,24 @@ local continue = false
-- how about tabs
-local getmargin = (Cs(P(" ")^1)*P(-1)+1)^1 -- 1 or utf8character
-local eol = patterns.eol
-local whatever = (P(1)-eol)^0 * eol^1
+local strippers = { }
+local nofspaces = 0
-local strippers = { }
+local normalline = space^0 / function(s) local n = #s if n < nofspaces then nofspaces = n end end
+ * whatever
+
+local getmargin = (emptyline + normalline)^1
local function undent(str) -- new version, needs testing: todo: not always needed, like in xtables
+ nofspaces = #str
local margin = lpegmatch(getmargin,str)
- if type(margin) ~= "string" then
- return str
- end
- local indent = #margin
- if indent == 0 then
+ if nofspaces == #str or nofspaces ==0 then
return str
end
- local stripper = strippers[indent]
+ local stripper = strippers[nofspaces]
if not stripper then
- stripper = Cs((P(margin)/"" * whatever + eol^1)^1)
- strippers[indent] = stripper
+ stripper = Cs(((space^-nofspaces)/"" * whatever + emptyline)^1)
+ strippers[nofspaces] = stripper
end
return lpegmatch(stripper,str) or str
end
@@ -334,54 +338,61 @@ buffers.undent = undent
-- end
function tokens.pickup(start,stop)
- local stoplist = totable(stop)
- local stoplength = #stoplist
- local stoplast = stoplist[stoplength]
- local startlist = totable(start)
- local startlength = #startlist
- local startlast = startlist[startlength]
- local list = { }
- local size = 0
- local depth = 0
+ local stoplist = totable(stop)
+ local stoplength = #stoplist
+ local stoplast = stoplist[stoplength]
+ local startlist = totable(start)
+ local startlength = #startlist
+ local startlast = startlist[startlength]
+ local list = { }
+ local size = 0
+ local depth = 0
+-- local done = 32
while true do -- or use depth
local char = scancode()
if char then
- char = utfchar(char)
- size = size + 1
- list[size] = char
- if char == stoplast and size >= stoplength then
- local done = true
- local last = size
- for i=stoplength,1,-1 do
- if stoplist[i] ~= list[last] then
- done = false
- break
+-- if char < done then
+-- -- we skip leading control characters so that we can use them to
+-- -- obey spaces (a dirty trick)
+-- else
+-- done = 0
+ char = utfchar(char)
+ size = size + 1
+ list[size] = char
+ if char == stoplast and size >= stoplength then
+ local done = true
+ local last = size
+ for i=stoplength,1,-1 do
+ if stoplist[i] ~= list[last] then
+ done = false
+ break
+ end
+ last = last - 1
end
- last = last - 1
- end
- if done then
- if depth > 0 then
- depth = depth - 1
- else
- break
+ if done then
+ if depth > 0 then
+ depth = depth - 1
+ else
+ break
+ end
+ char = false -- trick: let's skip the next (start) test
end
- char = false -- trick: let's skip the next (start) test
end
- end
- if char == startlast and size >= startlength then
- local done = true
- local last = size
- for i=startlength,1,-1 do
- if startlist[i] ~= list[last] then
- done = false
- break
+ if char == startlast and size >= startlength then
+ local done = true
+ local last = size
+ for i=startlength,1,-1 do
+ if startlist[i] ~= list[last] then
+ done = false
+ break
+ end
+ last = last - 1
+ end
+ if done then
+ depth = depth + 1
end
- last = last - 1
- end
- if done then
- depth = depth + 1
end
- end
+-- end
else
-- local t = scantoken()
local t = gettoken()
@@ -394,15 +405,21 @@ function tokens.pickup(start,stop)
end
local start = 1
local stop = size-stoplength-1
+ -- not good enough: only empty lines, but even then we miss the leading
+ -- for verbatim
for i=start,stop do
- if lpegmatch(p_whitespace,list[i]) then
+ local li = list[i]
+ if lpegmatch(blackspace,li) then
+ -- keep going
+ elseif lpegmatch(eol,li) then
+ -- okay
start = i + 1
else
break
end
end
for i=stop,start,-1 do
- if lpegmatch(p_whitespace,list[i]) then
+ if lpegmatch(whitespace,list[i]) then
stop = i - 1
else
break
@@ -435,7 +452,7 @@ scanners.pickupbuffer = function()
local doundent = scanboolean()
local data = tokens.pickup(start,stop)
if doundent or (autoundent and doundent == nil) then
- data = buffers.undent(data)
+ data = undent(data)
end
buffers.assign(name,data,catcodes)
-- context[finish]()
@@ -572,3 +589,19 @@ implement {
actions = { collectcontent, context.printlines },
arguments = "string"
}
+
+local startbuffer = context.startbuffer
+local stopbuffer = context.stopbuffer
+
+local startcollecting = context.startcollecting
+local stopcollecting = context.stopcollecting
+
+function context.startbuffer(...)
+ startcollecting()
+ startbuffer(...)
+end
+
+function context.stopbuffer()
+ stopbuffer()
+ stopcollecting()
+end
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-ini.mkiv
index c1068008546..7cc6cdbd4f2 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-ini.mkiv
@@ -118,11 +118,11 @@
\scratchcounter
\ifnum#6=\plusone\s!true\else\s!false\fi
% \relax}
- \expandafter\relax\string}
+ \expandafter\relax\string} % maybe \normalexpanded{\relax\utfchar{7}}} signal
\unexpanded\def\buff_stop#1%
{\endgroup % (3 & 4 & 5 & 6)
- \getvalue{#1}}
+ \csname#1\endcsname}
% \installctxfunction\dopickupbuffer{commands.dopickupbuffer}
diff --git a/Master/texmf-dist/tex/context/base/buff-par.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-par.lua
index 58ea9ab9d06..58ea9ab9d06 100644
--- a/Master/texmf-dist/tex/context/base/buff-par.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-par.lua
diff --git a/Master/texmf-dist/tex/context/base/buff-par.mkvi b/Master/texmf-dist/tex/context/base/mkiv/buff-par.mkvi
index 5af04ba7c6b..b17edb1736c 100644
--- a/Master/texmf-dist/tex/context/base/buff-par.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-par.mkvi
@@ -93,7 +93,7 @@
\unexpanded\def\buff_parallel_save#instance% defined moet ook aan de lua kant kunnen
{\clf_saveparallel
{\currentparallel}%
- {#instance},
+ {#instance}%
{\thedefinedbuffer{#instance}}%
\relax}
diff --git a/Master/texmf-dist/tex/context/base/buff-ver.lua b/Master/texmf-dist/tex/context/base/mkiv/buff-ver.lua
index 0168c551d2c..448d1a60cf7 100644
--- a/Master/texmf-dist/tex/context/base/buff-ver.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-ver.lua
@@ -627,6 +627,17 @@ local function getstrip(lines,first,last)
return first, last, last - first + 1
end
+-- we look for text (todo):
+--
+-- "foo" : start after line with "foo"
+-- "=" : ignore first blob
+-- "=foo" : start at "foo"
+-- "!foo" : maybe a not "foo"
+
+-- % - # lines start a comment
+
+local comment = "^[%%%-#]"
+
local function getrange(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere
local noflines = #lines
local first = first or 1
@@ -634,7 +645,7 @@ local function getrange(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere
if last < 0 then
last = noflines + last
end
- local what = settings_to_array(range)
+ local what = settings_to_array(range) -- maybe also n:m
local r_first = what[1]
local r_last = what[2]
local f = tonumber(r_first)
@@ -644,11 +655,26 @@ local function getrange(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere
if f > first then
first = f
end
- else
+ elseif r_first == "=" then
for i=first,last do
- if find(lines[i],r_first) then
+ if find(lines[i],comment) then
first = i + 1
+ else
+ break
+ end
+ end
+ elseif r_first ~= "" then
+ local exact, r_first = match(r_first,"^([=]?)(.*)")
+ for i=first,last do
+ if find(lines[i],r_first) then
+ if exact == "=" then
+ first = i
+ else
+ first = i + 1
+ end
break
+ else
+ first = i
end
end
end
@@ -664,11 +690,24 @@ local function getrange(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere
if l < last then
last = l
end
- else
+ elseif r_first == "=" then
+ for i=first,last do
+ if find(lines[i],comment) then
+ break
+ else
+ last = i
+ end
+ end
+ elseif r_last ~= "" then
+ local exact, r_last = match(r_last,"^([=]?)(.*)")
for i=first,last do
if find(lines[i],r_last) then
- last = i - 1
+ if exact == "=" then
+ last = i
+ end
break
+ else
+ last = i
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/buff-ver.mkiv b/Master/texmf-dist/tex/context/base/mkiv/buff-ver.mkiv
index 67f861ba048..5b3ed6f2a74 100644
--- a/Master/texmf-dist/tex/context/base/buff-ver.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/buff-ver.mkiv
@@ -90,13 +90,9 @@
\let\obeyedspace\specialobeyedspace
\let\controlspace\specialcontrolspace
\edef\p_buff_lines{\typeparameter\c!lines}%
- \ifcsname\??typinglines\p_buff_lines\endcsname
- \csname\??typinglines\p_buff_lines\endcsname
- \fi
+ \begincsname\??typinglines\p_buff_lines\endcsname
\edef\p_buff_space{\typeparameter\c!space}%
- \ifcsname\??typingspace\p_buff_space\endcsname
- \csname\??typingspace\p_buff_space\endcsname
- \fi
+ \begincsname\??typingspace\p_buff_space\endcsname
\relax\the\everyinitializeverbatim\relax}
\unexpanded\def\doinitializeverbatim % for use elsewhere .. temp hack (see lxml-ini)
@@ -136,13 +132,9 @@
\let\obeyedspace\specialobeyedspace
\let\controlspace\specialcontrolspace
\edef\p_buff_lines{\typingparameter\c!lines}%
- \ifcsname\??typinglines\p_buff_lines\endcsname
- \csname\??typinglines\p_buff_lines\endcsname
- \fi
+ \begincsname\??typinglines\p_buff_lines\endcsname
\edef\p_buff_space{\typingparameter\c!space}%
- \ifcsname\??typingspace\p_buff_space\endcsname
- \csname\??typingspace\p_buff_space\endcsname
- \fi
+ \begincsname\??typingspace\p_buff_space\endcsname
\relax\the\everyinitializeverbatim\relax}
%D \macros
@@ -465,7 +457,8 @@
\let\normaltextdis\dis
\unexpanded\def\astype
- {\bgroup\usetypestyleandcolor\c!style\c!color\let\nexttoken}
+ {\dontleavehmode
+ \bgroup\usetypestyleandcolor\c!style\c!color\let\nexttoken}
\unexpanded\def\asciistr#1% used in some old styles
{\dontleavehmode\begingroup
@@ -514,7 +507,7 @@
\startpacked[\v!blank]
\doifelseassignment{#1}
{\setupcurrenttyping[#1]}
- {\doifinset\v!continue{#1}{\lettypingparameter\c!continue\v!yes}}%
+ {\doif\v!continue{#1}{\lettypingparameter\c!continue\v!yes}}%
\buff_verbatim_setup_line_numbering
\buff_verbatim_initialize_typing_one
\buff_verbatim_setup_keep_together
@@ -606,6 +599,10 @@
\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%
{\begingroup
\ifsecondargument
@@ -776,8 +773,13 @@
% [name] [settings] | [name] | [settings]
+% \unexpanded\def\typebuffer
+% {\dodoubleempty\buff_verbatim_type_buffer}
+
\unexpanded\def\typebuffer
- {\dodoubleempty\buff_verbatim_type_buffer}
+ {\begingroup
+ \let\currenttyping\v!buffer
+ \dodoubleempty\buff_verbatim_type_buffer}
\unexpanded\def\buff_verbatim_type_defined_buffer
{\dotripleempty\buff_verbatim_type_defined_buffer_indeed}
@@ -789,22 +791,45 @@
\setuevalue{\e!type\currentbuffer}{\buff_verbatim_type_defined_buffer[\v!buffer][\currentdefinedbuffer]}%
\to \everydefinebuffer
+\appendtoks % \e!buffer
+ \setuevalue{\e!type\currenttyping\v!buffer}{\buff_verbatim_type_buffer_class{\currenttyping}}%
+\to \everydefinetyping
+
+% \unexpanded\def\buff_verbatim_type_buffer[#1][#2]%
+% {\begingroup
+% \ifsecondargument
+% \setuptyping[\v!buffer][#2]%
+% \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}% [name] [settings]
+% \else\iffirstargument
+% \doifelseassignment{#1}
+% {\setuptyping[\v!buffer][#1]%
+% \buff_verbatim_type_buffer_indeed\v!buffer\empty}% [settings]
+% {\processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}}% [name]
+% \else
+% \buff_verbatim_type_buffer_indeed\v!buffer\empty% []
+% \fi\fi
+% \endgroup}
+
\unexpanded\def\buff_verbatim_type_buffer[#1][#2]%
- {\begingroup
- \ifsecondargument
- \setuptyping[\v!buffer][#2]%
- \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}% [name] [settings]
+ {\ifsecondargument
+ \setupcurrenttyping[#2]%
+ \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}% [name] [settings]
\else\iffirstargument
\doifelseassignment{#1}
- {\setuptyping[\v!buffer][#1]%
- \buff_verbatim_type_buffer_indeed\v!buffer\empty}% [settings]
- {\processcommalist[#1]{\buff_verbatim_type_buffer_indeed\v!buffer}}% [name]
+ {\setupcurrenttyping[#1]%
+ \buff_verbatim_type_buffer_indeed\currenttyping\empty}% [settings]
+ {\processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}}% [name]
\else
- \buff_verbatim_type_buffer_indeed\v!buffer\empty% []
+ \buff_verbatim_type_buffer_indeed\currenttyping\empty% []
\fi\fi
\endgroup}
-\def\buff_verbatim_type_defined_buffer_indeed[#1][#2][#3]% category name settings
+\unexpanded\def\buff_verbatim_type_buffer_class#1%
+ {\begingroup
+ \edef\currenttyping{#1}%
+ \dodoubleempty\buff_verbatim_type_buffer}
+
+\unexpanded\def\buff_verbatim_type_defined_buffer_indeed[#1][#2][#3]% category name settings
{\begingroup
\ifthirdargument
\setuptyping[#1][#3]%
@@ -812,7 +837,7 @@
\buff_verbatim_type_buffer_indeed{#1}{#2}%
\endgroup}
-\def\buff_verbatim_type_buffer_indeed#1#2% category name
+\unexpanded\def\buff_verbatim_type_buffer_indeed#1#2% category name
{\edef\currenttyping{#1}%
\typingparameter\c!before
\startpacked[\v!blank]
@@ -969,7 +994,8 @@
% \let\next}
\appendtoks
- \def\type#1{\letterbackslash\checkedstrippedcsname#1}% or maybe detokenize
+ %def\type#1{\letterbackslash\checkedstrippedcsname#1}% or maybe detokenize
+ \def\type#1{\detokenize\expandafter{\csstring#1}}% or maybe detokenize
\def\tex #1{\letterbackslash#1}%
\to \everysimplifycommands
diff --git a/Master/texmf-dist/tex/context/base/bxml-apa.mkiv b/Master/texmf-dist/tex/context/base/mkiv/bxml-apa.mkiv
index 6513a71c2df..6513a71c2df 100644
--- a/Master/texmf-dist/tex/context/base/bxml-apa.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/bxml-apa.mkiv
diff --git a/Master/texmf-dist/tex/context/base/catc-act.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-act.mkiv
index 8c7935d4d57..bd1ffd38d7d 100644
--- a/Master/texmf-dist/tex/context/base/catc-act.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-act.mkiv
@@ -16,6 +16,8 @@
\unprotect
+% todo: \letcharcode<number>=\something
+
%D \macros
%D {installactivecharacter}
diff --git a/Master/texmf-dist/tex/context/base/catc-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-ctx.mkiv
index 5af8a50356f..5af8a50356f 100644
--- a/Master/texmf-dist/tex/context/base/catc-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-ctx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/catc-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-def.mkiv
index bf794f045dc..bf794f045dc 100644
--- a/Master/texmf-dist/tex/context/base/catc-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-def.mkiv
diff --git a/Master/texmf-dist/tex/context/base/catc-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/catc-ini.lua
index 9241f5a1b16..9241f5a1b16 100644
--- a/Master/texmf-dist/tex/context/base/catc-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/catc-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-ini.mkiv
index bb1e47faabd..440d53efed2 100644
--- a/Master/texmf-dist/tex/context/base/catc-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-ini.mkiv
@@ -18,10 +18,10 @@
\unprotect
-%D A long standing wish has been the availability of catcode
-%D arrays. Because traditional \TEX\ does not provide this we
-%D implement a fake method in the \MKII\ file. There is some
-%D overlap in code with \MKII\ but we take that for granted.
+%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.
\setnewconstant\escapecatcode 0
\setnewconstant\begingroupcatcode 1
@@ -82,7 +82,7 @@
% rather special and used in writing to file: \let\par\outputnewlinechar
-\def\initializenewlinechar % operating system dependent
+\normalprotected\def\initializenewlinechar % operating system dependent
{\begingroup
\newlinechar\newlineasciicode
\xdef\outputnewlinechar{^^J}%
@@ -163,16 +163,15 @@
% \catcodetable\scratchcounter
% \egroup}
-%D The next command can be defined in a cleaner way in the
-%D Mk IV file but we want to have a fast one with a minimal
-%D chance for interference. Do we still need this complex
-%D mechanism? Future versions of \MKIV\ might only use
+%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
-%D faster.
+%D Once a catcode is assigned, the next assignments will happen faster. However,
+%D redefinitions probably happen seldom so it's sort of overkill.
\def\letcatcodecommand{\afterassignment\syst_catcodes_let_a\c_syst_catcodes_a}
\def\defcatcodecommand{\afterassignment\syst_catcodes_def_a\c_syst_catcodes_a}
@@ -184,21 +183,21 @@
\def\syst_catcodes_let_b % each time
{\ifcsname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname
- \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\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
- \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\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
- \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname
+ \expandafter\lastnamedcs
\else
\expandafter\syst_catcodes_ued_c
\fi}
@@ -209,7 +208,6 @@
\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)
{\expandafter\gdef\csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname
\expandafter##\expandafter1\expandafter
@@ -227,19 +225,36 @@
\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
+ {\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
+ {\begingroup % and the selector has been lost
\uccode\c_syst_catcodes_hack\c_syst_catcodes_b
\catcode\uccode\c_syst_catcodes_hack\activecatcode
\uppercase{\normalprotected\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\next{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}%
+% \global\letcharcode\c_syst_catcodes_b\next
+% \endgroup}
+%
+% \def\syst_catcodes_reinstate_unexpanded
+% {\begingroup
+% \normalprotected\edef\next{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}%
+% \global\letcharcode\c_syst_catcodes_b\next
+% \endgroup}
+
\newconstant\defaultcatcodetable
\def\catcodecommand#1%
@@ -252,15 +267,14 @@
%D \macros
%D {restorecatcodes,pushcatcodetable,popcatcodetable}
%D
-%D We're not finished dealing \CATCODES\ yet. In \CONTEXT\ we
-%D use only one auxiliary file, which deals with tables of
-%D contents, registers, two pass tracking, references etc. This
-%D file, as well as files concerning graphics, is processed when
-%D needed, which can be in the mid of typesetting verbatim.
-%D However, when reading in data in verbatim mode, we should
-%D temporary restore the normal \CATCODES, and that's exactly
-%D what the next macros do. Saving the catcodes can be
-%D disabled by saying \type{\localcatcodestrue}.
+%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
@@ -279,9 +293,9 @@
\fi}
\normalprotected\def\syst_catcodes_trace_nesting_error
- {\immediate\write16{}%
- \immediate\write16{Fatal error: catcode push/pop mismatch. Fix this! (restore level: \number\c_syst_catcodes_level)}\wait\end
- \immediate\write16{}}
+ {\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{}}
\normalprotected\def\restorecatcodes % takes previous level
{\ifnum\c_syst_catcodes_level>\plusone
@@ -302,11 +316,11 @@
%D \stoptyping
\normalprotected\def\tracecatcodetables
- {\def\syst_catcodes_trace_set {\syst_catcodes_trace{set \catcodetablename\space at \number\c_syst_catcodes_level}}%
+ {\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\write16{[#1]}}
+\def\syst_catcodes_trace#1{\immediate\write\statuswrite{[#1]}}
\def\syst_catcodes_prev
{\ifnum\numexpr\c_syst_catcodes_level-1\relax>\zerocount
diff --git a/Master/texmf-dist/tex/context/base/catc-sym.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-sym.mkiv
index 71e02f31dc1..ae12532720d 100644
--- a/Master/texmf-dist/tex/context/base/catc-sym.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-sym.mkiv
@@ -11,12 +11,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% we now have loaded syst-* so we have all @@catcode constants
-
-%D We want to have access to the raw alternatives of the
-%D special characters. We use a \type {\xdef} instead of
-%D \type {\let} because we need an expandable token in a
-%D \type {\write}.
+%D We want to have access to the raw alternatives of the special characters. We
+%D use a \type {\xdef} instead of \type {\let} because we need an expandable token
+%D in a \type {\write}.
\bgroup
@@ -24,32 +21,37 @@
\catcode`E=\endgroupcatcode
\catcode`.=\escapecatcode
-.catcode `.{ 12 .xdef .letteropenbrace B.string{E
-.catcode `.} 12 .xdef .letterclosebrace B.string}E
-.catcode `.& 12 .xdef .letterampersand B.string&E
-.catcode `.< 12 .xdef .letterless B.string<E
-.catcode `.> 12 .xdef .lettermore B.string>E
-.catcode `.# 12 .xdef .letterhash B.string#E
-.catcode `." 12 .xdef .letterdoublequote B.string"E
-.catcode `.' 12 .xdef .lettersinglequote B.string'E
-.catcode `.$ 12 .xdef .letterdollar B.string$E
-.catcode `.% 12 .xdef .letterpercent B.string%E
-.catcode `.^ 12 .xdef .letterhat B.string^E
-.catcode `._ 12 .xdef .letterunderscore B.string_E
-.catcode `.| 12 .xdef .letterbar B.string|E
-.catcode `.~ 12 .xdef .lettertilde B.string~E
-.catcode `.\ 12 .xdef .letterbackslash B.string\E
-.catcode `./ 12 .xdef .letterslash B.string/E
-.catcode `.? 12 .xdef .letterquestionmark B.string?E
-.catcode `.! 12 .xdef .letterexclamationmark B.string!E
-.catcode `.@ 12 .xdef .letterat B.string@E
-.catcode `.: 12 .xdef .lettercolon B.string:E
+.catcode `.{ 12 .xdef .letterleftbrace B.string{E
+.catcode `.} 12 .xdef .letterrightbrace B.string}E
+.catcode `.& 12 .xdef .letterampersand B.string&E
+.catcode `.< 12 .xdef .letterless B.string<E
+.catcode `.> 12 .xdef .lettermore B.string>E
+.catcode `.# 12 .xdef .letterhash B.string#E
+.catcode `." 12 .xdef .letterdoublequote B.string"E
+.catcode `.' 12 .xdef .lettersinglequote B.string'E
+.catcode `.$ 12 .xdef .letterdollar B.string$E
+.catcode `.% 12 .xdef .letterpercent B.string%E
+.catcode `.^ 12 .xdef .letterhat B.string^E
+.catcode `._ 12 .xdef .letterunderscore B.string_E
+.catcode `.| 12 .xdef .letterbar B.string|E
+.catcode `.~ 12 .xdef .lettertilde B.string~E
+.catcode `.\ 12 .xdef .letterbackslash B.string\E
+.catcode `./ 12 .xdef .letterslash B.string/E
+.catcode `.? 12 .xdef .letterquestionmark B.string?E
+.catcode `.! 12 .xdef .letterexclamationmark B.string!E
+.catcode `.@ 12 .xdef .letterat B.string@E
+.catcode `.: 12 .xdef .lettercolon B.string:E
+
+.catcode `.( 12 .xdef .letterleftparenthesis B.string(E
+.catcode `.) 12 .xdef .letterrightparenthesis B.string)E
+.catcode `.[ 12 .xdef .letterleftbracket B.string[E
+.catcode `.] 12 .xdef .letterrightbracket B.string]E
.global .let .letterescape .letterbackslash
- .global .let .letterbgroup .letteropenbrace
- .global .let .letteregroup .letterclosebrace
- .global .let .letterleftbrace .letteropenbrace
- .global .let .letterrightbrace .letterclosebrace
+ .global .let .letterbgroup .letterleftbrace
+ .global .let .letteregroup .letterrightbrace
+ .global .let .letteropenbrace .letterleftbrace
+ .global .let .letterclosebrace .letterrightbrace
.egroup
diff --git a/Master/texmf-dist/tex/context/base/catc-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/catc-xml.mkiv
index a23a2fe0a26..a23a2fe0a26 100644
--- a/Master/texmf-dist/tex/context/base/catc-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/catc-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/char-act.mkiv b/Master/texmf-dist/tex/context/base/mkiv/char-act.mkiv
index 7d7268c8ba6..7d7268c8ba6 100644
--- a/Master/texmf-dist/tex/context/base/char-act.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-act.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/char-cjk.lua b/Master/texmf-dist/tex/context/base/mkiv/char-cjk.lua
new file mode 100644
index 00000000000..9d6b28a603a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-cjk.lua
@@ -0,0 +1,1293 @@
+if not modules then modules = { } end modules ['char-cjk'] = {
+ version = 1.001,
+ comment = "companion to char-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local setmetatable, next = setmetatable, next
+local insert = table.insert
+local floor = math.floor
+local formatters = string.formatters
+local utfchar = utf.char
+
+local setmetatableindex = table.setmetatableindex
+
+characters = characters or { }
+local ranges = characters.ranges
+local allocate = utilities.storage.allocate
+
+-- Hangul Syllable
+
+-- The following conversion is taken from unicode.org/reports/tr15/tr15-23.html#Hangul
+-- but adapted to our needs.
+
+-- local SBase = 0xAC00
+--
+-- local LBase, LCount = 0x1100, 19
+-- local VBase, VCount = 0x1161, 21
+-- local TBase, TCount = 0x11A7, 28
+--
+-- local NCount = VCount * TCount
+-- local SCount = LCount * NCount
+--
+-- local function decomposed(unicode)
+-- local SIndex = unicode - SBase
+-- if SIndex >= 0 and SIndex < SCount then
+-- local lead_consonant = LBase + floor( SIndex / NCount)
+-- local medial_vowel = VBase + floor((SIndex % NCount) / TCount)
+-- local tail_consonant = TBase + SIndex % TCount
+-- if tail_consonant ~= TBase then
+-- return lead_consonant, medial_vowel, tail_consonant
+-- else
+-- return lead_consonant, medial_vowel
+-- end
+-- end
+-- end
+--
+-- Lua will optimize the inline constants so the next variant is
+-- 10% faster. In practice this will go unnoticed, but it's also less
+-- code, so let's do it. Pushing the constant section into the
+-- function body saves 5%.
+
+local function decomposed(unicode)
+ local index = unicode - 0xAC00
+ if index >= 0 and index < 19 * 21 * 28 then
+ local lead_consonant = 0x1100 + floor( index / (21 * 28))
+ local medial_vowel = 0x1161 + floor((index % (21 * 28)) / 28)
+ local tail_consonant = 0x11A7 + index % 28
+ if tail_consonant ~= 0x11A7 then
+ return lead_consonant, medial_vowel, tail_consonant
+ else
+ return lead_consonant, medial_vowel
+ end
+ end
+end
+
+local lead_consonants = { [0] =
+ "G", "GG", "N", "D", "DD", "R", "M", "B", "BB",
+ "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H"
+}
+
+local medial_vowels = { [0] =
+ "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O",
+ "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI",
+ "YU", "EU", "YI", "I"
+}
+
+local tail_consonants = { [0] =
+ "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", "LG", "LM",
+ "LB", "LS", "LT", "LP", "LH", "M", "B", "BS",
+ "S", "SS", "NG", "J", "C", "K", "T", "P", "H"
+}
+
+-- local function description(unicode)
+-- local index = unicode - 0xAC00
+-- if index >= 0 and index < 19 * 21 * 28 then
+-- local lead_consonant = floor( index / NCount)
+-- local medial_vowel = floor((index % NCount) / TCount)
+-- local tail_consonant = index % TCount
+-- return formatters["HANGUL SYLLABLE %s%s%s"](
+-- lead_consonants[lead_consonant],
+-- medial_vowels [medial_vowel ],
+-- tail_consonants[tail_consonant]
+-- )
+-- end
+-- end
+
+local function description(unicode)
+ local index = unicode - 0xAC00
+ if index >= 0 and index < 19 * 21 * 28 then
+ local lead_consonant = floor( index / (21 * 28))
+ local medial_vowel = floor((index % (21 * 28)) / 28)
+ local tail_consonant = index % 28
+ return formatters["HANGUL SYLLABLE %s%s%s"](
+ lead_consonants[lead_consonant],
+ medial_vowels [medial_vowel ],
+ tail_consonants[tail_consonant]
+ )
+ end
+end
+
+-- so far
+
+-- We have a [lead consonant,medial vowel,tail consonant] where the last one
+-- is optional. For sort ranges we need the first one but some are collapsed.
+-- Beware, we map to modern so the font should support it.
+
+local function leadconsonant(unicode)
+ return
+ -- unicode < 0xAC00 and nil -- original
+ -- unicode > 0xD7AF and nil or -- original
+ unicode >= 0xD558 and 0x314E or -- 하 => ㅎ
+ unicode >= 0xD30C and 0x314D or -- 파 => ㅍ
+ unicode >= 0xD0C0 and 0x314C or -- 타 => ㅌ
+ unicode >= 0xCE74 and 0x314B or -- 카 => ㅋ
+ unicode >= 0xCC28 and 0x314A or -- 차 => ㅊ
+ unicode >= 0xC790 and 0x3148 or -- 자 => ㅈ
+ unicode >= 0xC544 and 0x3147 or -- 아 => ㅇ
+ unicode >= 0xC0AC and 0x3145 or -- 사 => ㅅ
+ unicode >= 0xBC14 and 0x3142 or -- 바 => ㅂ
+ unicode >= 0xB9C8 and 0x3141 or -- 마 => ㅁ
+ unicode >= 0xB77C and 0x3139 or -- 라 => ㄹ
+ unicode >= 0xB2E4 and 0x3137 or -- 다 => ㄷ
+ unicode >= 0xB098 and 0x3134 or -- 나 => ㄴ
+ unicode >= 0xAC00 and 0x3131 or -- 가 => ㄱ
+ nil -- can't happen
+end
+
+local remapped = { -- this might be merged into char-def.lua
+ [0x1100] = 0x3131, -- G
+ [0x1101] = 0x3132, -- GG
+ [0x1102] = 0x3134, -- N
+ [0x1103] = 0x3137, -- D
+ [0x1104] = 0x3138, -- DD
+ [0x1105] = 0x3139, -- R
+ -- [0X111A] = 0x3140, -- LH used for last sound
+ [0x1106] = 0x3141, -- M
+ [0x1107] = 0x3142, -- B
+ [0x1108] = 0x3143, -- BB
+ -- [0x1121] = 0x3144, -- BS used for last sound
+ [0x1109] = 0x3145, -- S
+ [0x110A] = 0x3146, -- SS
+ [0x110B] = 0x3147, -- (IEUNG) no sound but has form
+ [0x110C] = 0x3148, -- J
+ [0x110D] = 0x3149, -- JJ
+ [0x110E] = 0x314A, -- C
+ [0x110F] = 0x314B, -- K
+ [0x1110] = 0x314C, -- T
+ [0x1111] = 0x314D, -- P
+ [0x1112] = 0x314E, -- H
+
+ [0x1161] = 0x314F, -- A
+ [0x1162] = 0x3150, -- AE
+ [0x1163] = 0x3151, -- YA
+ [0x1164] = 0x3152, -- YAE
+ [0x1165] = 0x3153, -- EO
+ [0x1166] = 0x3154, -- E
+ [0x1167] = 0x3155, -- YEO
+ [0x1168] = 0x3156, -- YE
+ [0x1169] = 0x3157, -- O
+ [0x116A] = 0x3158, -- WA
+ [0x116B] = 0x3159, -- WAE
+ [0x116C] = 0x315A, -- OE
+ [0x116D] = 0x315B, -- YO
+ [0x116E] = 0x315C, -- U
+ [0x116F] = 0x315D, -- WEO
+ [0x1170] = 0x315E, -- WE
+ [0x1171] = 0x315F, -- WI
+ [0x1172] = 0x3160, -- YU
+ [0x1173] = 0x3161, -- EU
+ [0x1174] = 0x3162, -- YI
+ [0x1175] = 0x3163, -- I
+
+ [0x11A8] = 0x3131, -- G
+ [0x11A9] = 0x3132, -- GG
+ [0x11AA] = 0x3133, -- GS
+ [0x11AB] = 0x3134, -- N
+ [0x11AC] = 0x3135, -- NJ
+ [0x11AD] = 0x3136, -- NH
+ [0x11AE] = 0x3137, -- D
+ [0x11AF] = 0x3139, -- L
+ [0x11B0] = 0x313A, -- LG
+ [0x11B1] = 0x313B, -- LM
+ [0x11B2] = 0x313C, -- LB
+ [0x11B3] = 0x313D, -- LS
+ [0x11B4] = 0x313E, -- LT
+ [0x11B5] = 0x313F, -- LP
+ [0x11B6] = 0x3140, -- LH
+ [0x11B7] = 0x3141, -- M
+ [0x11B8] = 0x3142, -- B
+ [0x11B9] = 0x3144, -- BS
+ [0x11BA] = 0x3145, -- S
+ [0x11BB] = 0x3146, -- SS
+ [0x11BC] = 0x3147, -- NG
+ [0x11BD] = 0x3148, -- J
+ [0x11BE] = 0x314A, -- C
+ [0x11BF] = 0x314B, -- K
+ [0x11C0] = 0x314C, -- T
+ [0x11C1] = 0x314D, -- P
+ [0x11C2] = 0x314E, -- H
+}
+
+characters.hangul = allocate {
+ decomposed = decomposed,
+ description = description,
+ leadconsonant = leadconsonant,
+ remapped = remapped,
+}
+
+-- so far
+
+local hangul_syllable_basetable = {
+ category = "lo",
+ cjkwd = "w",
+ description = "<Hangul Syllable>",
+ direction = "l",
+ linebreak = "h2",
+}
+
+local hangul_syllable_metatable = {
+ __index = function(t,k)
+ local u = t.unicodeslot
+ if k == "fscode" or k == "leadconsonant" then
+ return leadconsonant(u)
+ elseif k == "decomposed" then
+ return { decomposed(u) }
+ elseif k == "specials" then
+ return { "char", decomposed(u) }
+ elseif k == "description" then
+ return description(u)
+ else
+ return hangul_syllable_basetable[k]
+ end
+ end
+}
+
+function characters.remap_hangul_syllabe(t)
+ local tt = type(t)
+ if tt == "number" then
+ return remapped[t] or t
+ elseif tt == "table" then
+ local r = { }
+ for i=1,#t do
+ local ti = t[i]
+ r[i] = remapped[ti] or ti
+ end
+ return r
+ else
+ return t
+ end
+end
+
+local hangul_syllable_extender = function(k)
+ local t = {
+ unicodeslot = k,
+ }
+ setmetatable(t,hangul_syllable_metatable)
+ return t
+end
+
+local hangul_syllable_range = {
+ name = "hangul",
+ first = 0xAC00,
+ last = 0xD7A3,
+ extender = hangul_syllable_extender,
+}
+
+setmetatable(hangul_syllable_range, hangul_syllable_metatable)
+
+-- CJK Ideograph
+
+local knownvariants = {
+ [0x0349E] = { [0x0FE00] = 0x2F80C },
+ [0x034B9] = { [0x0FE00] = 0x2F813 },
+ [0x034BB] = { [0x0FE00] = 0x2F9CA },
+ [0x034DF] = { [0x0FE00] = 0x2F81F },
+ [0x03515] = { [0x0FE00] = 0x2F824 },
+ [0x036EE] = { [0x0FE00] = 0x2F867 },
+ [0x036FC] = { [0x0FE00] = 0x2F868 },
+ [0x03781] = { [0x0FE00] = 0x2F876 },
+ [0x0382F] = { [0x0FE00] = 0x2F883 },
+ [0x03862] = { [0x0FE00] = 0x2F888 },
+ [0x0387C] = { [0x0FE00] = 0x2F88A },
+ [0x038C7] = { [0x0FE00] = 0x2F896 },
+ [0x038E3] = { [0x0FE00] = 0x2F89B },
+ [0x0391C] = { [0x0FE00] = 0x2F8A2 },
+ [0x0393A] = { [0x0FE00] = 0x2F8A1 },
+ [0x03A2E] = { [0x0FE00] = 0x2F8C2 },
+ [0x03A6C] = { [0x0FE00] = 0x2F8C7 },
+ [0x03AE4] = { [0x0FE00] = 0x2F8D1 },
+ [0x03B08] = { [0x0FE00] = 0x2F8D0 },
+ [0x03B19] = { [0x0FE00] = 0x2F8CE },
+ [0x03B49] = { [0x0FE00] = 0x2F8DE },
+ [0x03B9D] = { [0x0FE00] = 0x0FAD2, [0x0FE01] = 0x2F8E7 },
+ [0x03C18] = { [0x0FE00] = 0x2F8EE },
+ [0x03C4E] = { [0x0FE00] = 0x2F8F2 },
+ [0x03D33] = { [0x0FE00] = 0x2F90A },
+ [0x03D96] = { [0x0FE00] = 0x2F916 },
+ [0x03EAC] = { [0x0FE00] = 0x2F92A },
+ [0x03EB8] = { [0x0FE00] = 0x2F92C, [0x0FE01] = 0x2F92D },
+ [0x03F1B] = { [0x0FE00] = 0x2F933 },
+ [0x03FFC] = { [0x0FE00] = 0x2F93E },
+ [0x04008] = { [0x0FE00] = 0x2F93F },
+ [0x04018] = { [0x0FE00] = 0x0FAD3 },
+ [0x04039] = { [0x0FE00] = 0x0FAD4, [0x0FE01] = 0x2F949 },
+ [0x04046] = { [0x0FE00] = 0x2F94B },
+ [0x04096] = { [0x0FE00] = 0x2F94C },
+ [0x040E3] = { [0x0FE00] = 0x2F951 },
+ [0x0412F] = { [0x0FE00] = 0x2F958 },
+ [0x04202] = { [0x0FE00] = 0x2F960 },
+ [0x04227] = { [0x0FE00] = 0x2F964 },
+ [0x042A0] = { [0x0FE00] = 0x2F967 },
+ [0x04301] = { [0x0FE00] = 0x2F96D },
+ [0x04334] = { [0x0FE00] = 0x2F971 },
+ [0x04359] = { [0x0FE00] = 0x2F974 },
+ [0x043D5] = { [0x0FE00] = 0x2F981 },
+ [0x043D9] = { [0x0FE00] = 0x2F8D7 },
+ [0x0440B] = { [0x0FE00] = 0x2F984 },
+ [0x0446B] = { [0x0FE00] = 0x2F98E },
+ [0x0452B] = { [0x0FE00] = 0x2F9A7 },
+ [0x0455D] = { [0x0FE00] = 0x2F9AE },
+ [0x04561] = { [0x0FE00] = 0x2F9AF },
+ [0x0456B] = { [0x0FE00] = 0x2F9B2 },
+ [0x045D7] = { [0x0FE00] = 0x2F9BF },
+ [0x045F9] = { [0x0FE00] = 0x2F9C2 },
+ [0x04635] = { [0x0FE00] = 0x2F9C8 },
+ [0x046BE] = { [0x0FE00] = 0x2F9CD },
+ [0x046C7] = { [0x0FE00] = 0x2F9CE },
+ [0x04995] = { [0x0FE00] = 0x2F9EF },
+ [0x049E6] = { [0x0FE00] = 0x2F9F2 },
+ [0x04A6E] = { [0x0FE00] = 0x2F9F8 },
+ [0x04A76] = { [0x0FE00] = 0x2F9F9 },
+ [0x04AB2] = { [0x0FE00] = 0x2F9FC },
+ [0x04B33] = { [0x0FE00] = 0x2FA03 },
+ [0x04BCE] = { [0x0FE00] = 0x2FA08 },
+ [0x04CCE] = { [0x0FE00] = 0x2FA0D },
+ [0x04CED] = { [0x0FE00] = 0x2FA0E },
+ [0x04CF8] = { [0x0FE00] = 0x2FA11 },
+ [0x04D56] = { [0x0FE00] = 0x2FA16 },
+ [0x04E0D] = { [0x0FE00] = 0x0F967 },
+ [0x04E26] = { [0x0FE00] = 0x0FA70 },
+ [0x04E32] = { [0x0FE00] = 0x0F905 },
+ [0x04E38] = { [0x0FE00] = 0x2F801 },
+ [0x04E39] = { [0x0FE00] = 0x0F95E },
+ [0x04E3D] = { [0x0FE00] = 0x2F800 },
+ [0x04E41] = { [0x0FE00] = 0x2F802 },
+ [0x04E82] = { [0x0FE00] = 0x0F91B },
+ [0x04E86] = { [0x0FE00] = 0x0F9BA },
+ [0x04EAE] = { [0x0FE00] = 0x0F977 },
+ [0x04EC0] = { [0x0FE00] = 0x0F9FD },
+ [0x04ECC] = { [0x0FE00] = 0x2F819 },
+ [0x04EE4] = { [0x0FE00] = 0x0F9A8 },
+ [0x04F60] = { [0x0FE00] = 0x2F804 },
+ [0x04F80] = { [0x0FE00] = 0x0FA73 },
+ [0x04F86] = { [0x0FE00] = 0x0F92D },
+ [0x04F8B] = { [0x0FE00] = 0x0F9B5 },
+ [0x04FAE] = { [0x0FE00] = 0x0FA30, [0x0FE01] = 0x2F805 },
+ [0x04FBB] = { [0x0FE00] = 0x2F806 },
+ [0x04FBF] = { [0x0FE00] = 0x0F965 },
+ [0x05002] = { [0x0FE00] = 0x2F807 },
+ [0x0502B] = { [0x0FE00] = 0x0F9D4 },
+ [0x0507A] = { [0x0FE00] = 0x2F808 },
+ [0x05099] = { [0x0FE00] = 0x2F809 },
+ [0x050CF] = { [0x0FE00] = 0x2F80B },
+ [0x050DA] = { [0x0FE00] = 0x0F9BB },
+ [0x050E7] = { [0x0FE00] = 0x0FA31, [0x0FE01] = 0x2F80A },
+ [0x05140] = { [0x0FE00] = 0x0FA0C },
+ [0x05145] = { [0x0FE00] = 0x0FA74 },
+ [0x0514D] = { [0x0FE00] = 0x0FA32, [0x0FE01] = 0x2F80E },
+ [0x05154] = { [0x0FE00] = 0x2F80F },
+ [0x05164] = { [0x0FE00] = 0x2F810 },
+ [0x05167] = { [0x0FE00] = 0x2F814 },
+ [0x05168] = { [0x0FE00] = 0x0FA72 },
+ [0x05169] = { [0x0FE00] = 0x0F978 },
+ [0x0516D] = { [0x0FE00] = 0x0F9D1 },
+ [0x05177] = { [0x0FE00] = 0x2F811 },
+ [0x05180] = { [0x0FE00] = 0x0FA75 },
+ [0x0518D] = { [0x0FE00] = 0x2F815 },
+ [0x05192] = { [0x0FE00] = 0x2F8D2 },
+ [0x05195] = { [0x0FE00] = 0x2F8D3 },
+ [0x05197] = { [0x0FE00] = 0x2F817 },
+ [0x051A4] = { [0x0FE00] = 0x2F818 },
+ [0x051AC] = { [0x0FE00] = 0x2F81A },
+ [0x051B5] = { [0x0FE00] = 0x0FA71, [0x0FE01] = 0x2F81B },
+ [0x051B7] = { [0x0FE00] = 0x0F92E },
+ [0x051C9] = { [0x0FE00] = 0x0F979 },
+ [0x051CC] = { [0x0FE00] = 0x0F955 },
+ [0x051DC] = { [0x0FE00] = 0x0F954 },
+ [0x051DE] = { [0x0FE00] = 0x0FA15 },
+ [0x051F5] = { [0x0FE00] = 0x2F81D },
+ [0x05203] = { [0x0FE00] = 0x2F81E },
+ [0x05207] = { [0x0FE00] = 0x0FA00, [0x0FE01] = 0x2F850 },
+ [0x05217] = { [0x0FE00] = 0x0F99C },
+ [0x05229] = { [0x0FE00] = 0x0F9DD },
+ [0x0523A] = { [0x0FE00] = 0x0F9FF },
+ [0x0523B] = { [0x0FE00] = 0x2F820 },
+ [0x05246] = { [0x0FE00] = 0x2F821 },
+ [0x05272] = { [0x0FE00] = 0x2F822 },
+ [0x05277] = { [0x0FE00] = 0x2F823 },
+ [0x05289] = { [0x0FE00] = 0x0F9C7 },
+ [0x0529B] = { [0x0FE00] = 0x0F98A },
+ [0x052A3] = { [0x0FE00] = 0x0F99D },
+ [0x052B3] = { [0x0FE00] = 0x2F992 },
+ [0x052C7] = { [0x0FE00] = 0x0FA76, [0x0FE01] = 0x2F825 },
+ [0x052C9] = { [0x0FE00] = 0x0FA33, [0x0FE01] = 0x2F826 },
+ [0x052D2] = { [0x0FE00] = 0x0F952 },
+ [0x052DE] = { [0x0FE00] = 0x0F92F },
+ [0x052E4] = { [0x0FE00] = 0x0FA34, [0x0FE01] = 0x2F827 },
+ [0x052F5] = { [0x0FE00] = 0x0F97F },
+ [0x052FA] = { [0x0FE00] = 0x0FA77, [0x0FE01] = 0x2F828 },
+ [0x05305] = { [0x0FE00] = 0x2F829 },
+ [0x05306] = { [0x0FE00] = 0x2F82A },
+ [0x05317] = { [0x0FE00] = 0x0F963, [0x0FE01] = 0x2F82B },
+ [0x0533F] = { [0x0FE00] = 0x0F9EB },
+ [0x05349] = { [0x0FE00] = 0x2F82C },
+ [0x05351] = { [0x0FE00] = 0x0FA35, [0x0FE01] = 0x2F82D },
+ [0x0535A] = { [0x0FE00] = 0x2F82E },
+ [0x05373] = { [0x0FE00] = 0x2F82F },
+ [0x05375] = { [0x0FE00] = 0x0F91C },
+ [0x0537D] = { [0x0FE00] = 0x2F830 },
+ [0x0537F] = { [0x0FE00] = 0x2F831, [0x0FE01] = 0x2F832, [0x0FE02] = 0x2F833 },
+ [0x053C3] = { [0x0FE00] = 0x0F96B },
+ [0x053CA] = { [0x0FE00] = 0x2F836 },
+ [0x053DF] = { [0x0FE00] = 0x2F837 },
+ [0x053E5] = { [0x0FE00] = 0x0F906 },
+ [0x053EB] = { [0x0FE00] = 0x2F839 },
+ [0x053F1] = { [0x0FE00] = 0x2F83A },
+ [0x05406] = { [0x0FE00] = 0x2F83B },
+ [0x0540F] = { [0x0FE00] = 0x0F9DE },
+ [0x0541D] = { [0x0FE00] = 0x0F9ED },
+ [0x05438] = { [0x0FE00] = 0x2F83D },
+ [0x05442] = { [0x0FE00] = 0x0F980 },
+ [0x05448] = { [0x0FE00] = 0x2F83E },
+ [0x05468] = { [0x0FE00] = 0x2F83F },
+ [0x0549E] = { [0x0FE00] = 0x2F83C },
+ [0x054A2] = { [0x0FE00] = 0x2F840 },
+ [0x054BD] = { [0x0FE00] = 0x0F99E },
+ [0x054F6] = { [0x0FE00] = 0x2F841 },
+ [0x05510] = { [0x0FE00] = 0x2F842 },
+ [0x05553] = { [0x0FE00] = 0x2F843 },
+ [0x05555] = { [0x0FE00] = 0x0FA79 },
+ [0x05563] = { [0x0FE00] = 0x2F844 },
+ [0x05584] = { [0x0FE00] = 0x2F845, [0x0FE01] = 0x2F846 },
+ [0x05587] = { [0x0FE00] = 0x0F90B },
+ [0x05599] = { [0x0FE00] = 0x0FA7A, [0x0FE01] = 0x2F847 },
+ [0x0559D] = { [0x0FE00] = 0x0FA36, [0x0FE01] = 0x0FA78 },
+ [0x055AB] = { [0x0FE00] = 0x2F848 },
+ [0x055B3] = { [0x0FE00] = 0x2F849 },
+ [0x055C0] = { [0x0FE00] = 0x0FA0D },
+ [0x055C2] = { [0x0FE00] = 0x2F84A },
+ [0x055E2] = { [0x0FE00] = 0x0FA7B },
+ [0x05606] = { [0x0FE00] = 0x0FA37, [0x0FE01] = 0x2F84C },
+ [0x05651] = { [0x0FE00] = 0x2F84E },
+ [0x05668] = { [0x0FE00] = 0x0FA38 },
+ [0x05674] = { [0x0FE00] = 0x2F84F },
+ [0x056F9] = { [0x0FE00] = 0x0F9A9 },
+ [0x05716] = { [0x0FE00] = 0x2F84B },
+ [0x05717] = { [0x0FE00] = 0x2F84D },
+ [0x0578B] = { [0x0FE00] = 0x2F855 },
+ [0x057CE] = { [0x0FE00] = 0x2F852 },
+ [0x057F4] = { [0x0FE00] = 0x2F853 },
+ [0x0580D] = { [0x0FE00] = 0x2F854 },
+ [0x05831] = { [0x0FE00] = 0x2F857 },
+ [0x05832] = { [0x0FE00] = 0x2F856 },
+ [0x05840] = { [0x0FE00] = 0x0FA39 },
+ [0x0585A] = { [0x0FE00] = 0x0FA10, [0x0FE01] = 0x0FA7C },
+ [0x0585E] = { [0x0FE00] = 0x0F96C },
+ [0x058A8] = { [0x0FE00] = 0x0FA3A },
+ [0x058AC] = { [0x0FE00] = 0x2F858 },
+ [0x058B3] = { [0x0FE00] = 0x0FA7D },
+ [0x058D8] = { [0x0FE00] = 0x0F94A },
+ [0x058DF] = { [0x0FE00] = 0x0F942 },
+ [0x058EE] = { [0x0FE00] = 0x2F851 },
+ [0x058F2] = { [0x0FE00] = 0x2F85A },
+ [0x058F7] = { [0x0FE00] = 0x2F85B },
+ [0x05906] = { [0x0FE00] = 0x2F85C },
+ [0x0591A] = { [0x0FE00] = 0x2F85D },
+ [0x05922] = { [0x0FE00] = 0x2F85E },
+ [0x05944] = { [0x0FE00] = 0x0FA7E },
+ [0x05948] = { [0x0FE00] = 0x0F90C },
+ [0x05951] = { [0x0FE00] = 0x0F909 },
+ [0x05954] = { [0x0FE00] = 0x0FA7F },
+ [0x05962] = { [0x0FE00] = 0x2F85F },
+ [0x05973] = { [0x0FE00] = 0x0F981 },
+ [0x059D8] = { [0x0FE00] = 0x2F865 },
+ [0x059EC] = { [0x0FE00] = 0x2F862 },
+ [0x05A1B] = { [0x0FE00] = 0x2F863 },
+ [0x05A27] = { [0x0FE00] = 0x2F864 },
+ [0x05A62] = { [0x0FE00] = 0x0FA80 },
+ [0x05A66] = { [0x0FE00] = 0x2F866 },
+ [0x05AB5] = { [0x0FE00] = 0x2F986 },
+ [0x05B08] = { [0x0FE00] = 0x2F869 },
+ [0x05B28] = { [0x0FE00] = 0x0FA81 },
+ [0x05B3E] = { [0x0FE00] = 0x2F86A, [0x0FE01] = 0x2F86B },
+ [0x05B85] = { [0x0FE00] = 0x0FA04 },
+ [0x05BC3] = { [0x0FE00] = 0x2F86D },
+ [0x05BD8] = { [0x0FE00] = 0x2F86E },
+ [0x05BE7] = { [0x0FE00] = 0x0F95F, [0x0FE01] = 0x0F9AA, [0x0FE02] = 0x2F86F },
+ [0x05BEE] = { [0x0FE00] = 0x0F9BC },
+ [0x05BF3] = { [0x0FE00] = 0x2F870 },
+ [0x05BFF] = { [0x0FE00] = 0x2F872 },
+ [0x05C06] = { [0x0FE00] = 0x2F873 },
+ [0x05C22] = { [0x0FE00] = 0x2F875 },
+ [0x05C3F] = { [0x0FE00] = 0x0F9BD },
+ [0x05C60] = { [0x0FE00] = 0x2F877 },
+ [0x05C62] = { [0x0FE00] = 0x0F94B },
+ [0x05C64] = { [0x0FE00] = 0x0FA3B },
+ [0x05C65] = { [0x0FE00] = 0x0F9DF },
+ [0x05C6E] = { [0x0FE00] = 0x0FA3C, [0x0FE01] = 0x2F878 },
+ [0x05C8D] = { [0x0FE00] = 0x2F87A },
+ [0x05CC0] = { [0x0FE00] = 0x2F879 },
+ [0x05D19] = { [0x0FE00] = 0x0F9D5 },
+ [0x05D43] = { [0x0FE00] = 0x2F87C },
+ [0x05D50] = { [0x0FE00] = 0x0F921 },
+ [0x05D6B] = { [0x0FE00] = 0x2F87F },
+ [0x05D6E] = { [0x0FE00] = 0x2F87E },
+ [0x05D7C] = { [0x0FE00] = 0x2F880 },
+ [0x05DB2] = { [0x0FE00] = 0x2F9F4 },
+ [0x05DBA] = { [0x0FE00] = 0x0F9AB },
+ [0x05DE1] = { [0x0FE00] = 0x2F881 },
+ [0x05DE2] = { [0x0FE00] = 0x2F882 },
+ [0x05DFD] = { [0x0FE00] = 0x2F884 },
+ [0x05E28] = { [0x0FE00] = 0x2F885 },
+ [0x05E3D] = { [0x0FE00] = 0x2F886 },
+ [0x05E69] = { [0x0FE00] = 0x2F887 },
+ [0x05E74] = { [0x0FE00] = 0x0F98E },
+ [0x05EA6] = { [0x0FE00] = 0x0FA01 },
+ [0x05EB0] = { [0x0FE00] = 0x2F88B },
+ [0x05EB3] = { [0x0FE00] = 0x2F88C },
+ [0x05EB6] = { [0x0FE00] = 0x2F88D },
+ [0x05EC9] = { [0x0FE00] = 0x0F9A2 },
+ [0x05ECA] = { [0x0FE00] = 0x0F928, [0x0FE01] = 0x2F88E },
+ [0x05ED2] = { [0x0FE00] = 0x0FA82 },
+ [0x05ED3] = { [0x0FE00] = 0x0FA0B },
+ [0x05ED9] = { [0x0FE00] = 0x0FA83 },
+ [0x05EEC] = { [0x0FE00] = 0x0F982 },
+ [0x05EFE] = { [0x0FE00] = 0x2F890 },
+ [0x05F04] = { [0x0FE00] = 0x0F943 },
+ [0x05F22] = { [0x0FE00] = 0x2F894, [0x0FE01] = 0x2F895 },
+ [0x05F53] = { [0x0FE00] = 0x2F874 },
+ [0x05F62] = { [0x0FE00] = 0x2F899 },
+ [0x05F69] = { [0x0FE00] = 0x0FA84 },
+ [0x05F6B] = { [0x0FE00] = 0x2F89A },
+ [0x05F8B] = { [0x0FE00] = 0x0F9D8 },
+ [0x05F9A] = { [0x0FE00] = 0x2F89C },
+ [0x05FA9] = { [0x0FE00] = 0x0F966 },
+ [0x05FAD] = { [0x0FE00] = 0x0FA85 },
+ [0x05FCD] = { [0x0FE00] = 0x2F89D },
+ [0x05FD7] = { [0x0FE00] = 0x2F89E },
+ [0x05FF5] = { [0x0FE00] = 0x0F9A3 },
+ [0x05FF9] = { [0x0FE00] = 0x2F89F },
+ [0x06012] = { [0x0FE00] = 0x0F960 },
+ [0x0601C] = { [0x0FE00] = 0x0F9AC },
+ [0x06075] = { [0x0FE00] = 0x0FA6B },
+ [0x06081] = { [0x0FE00] = 0x2F8A0 },
+ [0x06094] = { [0x0FE00] = 0x0FA3D, [0x0FE01] = 0x2F8A3 },
+ [0x060C7] = { [0x0FE00] = 0x2F8A5 },
+ [0x060D8] = { [0x0FE00] = 0x0FA86 },
+ [0x060E1] = { [0x0FE00] = 0x0F9B9 },
+ [0x06108] = { [0x0FE00] = 0x0FA88 },
+ [0x06144] = { [0x0FE00] = 0x0F9D9 },
+ [0x06148] = { [0x0FE00] = 0x2F8A6 },
+ [0x0614C] = { [0x0FE00] = 0x2F8A7, [0x0FE01] = 0x2F8A9 },
+ [0x0614E] = { [0x0FE00] = 0x0FA87, [0x0FE01] = 0x2F8A8 },
+ [0x06160] = { [0x0FE00] = 0x0FA8A },
+ [0x06168] = { [0x0FE00] = 0x0FA3E },
+ [0x0617A] = { [0x0FE00] = 0x2F8AA },
+ [0x0618E] = { [0x0FE00] = 0x0FA3F, [0x0FE01] = 0x0FA89, [0x0FE02] = 0x2F8AB },
+ [0x06190] = { [0x0FE00] = 0x0F98F },
+ [0x061A4] = { [0x0FE00] = 0x2F8AD },
+ [0x061AF] = { [0x0FE00] = 0x2F8AE },
+ [0x061B2] = { [0x0FE00] = 0x2F8AC },
+ [0x061DE] = { [0x0FE00] = 0x2F8AF },
+ [0x061F2] = { [0x0FE00] = 0x0FA40, [0x0FE01] = 0x0FA8B, [0x0FE02] = 0x2F8B0 },
+ [0x061F6] = { [0x0FE00] = 0x0F90D, [0x0FE01] = 0x2F8B1 },
+ [0x06200] = { [0x0FE00] = 0x0F990 },
+ [0x06210] = { [0x0FE00] = 0x2F8B2 },
+ [0x0621B] = { [0x0FE00] = 0x2F8B3 },
+ [0x0622E] = { [0x0FE00] = 0x0F9D2 },
+ [0x06234] = { [0x0FE00] = 0x0FA8C },
+ [0x0625D] = { [0x0FE00] = 0x2F8B4 },
+ [0x062B1] = { [0x0FE00] = 0x2F8B5 },
+ [0x062C9] = { [0x0FE00] = 0x0F925 },
+ [0x062CF] = { [0x0FE00] = 0x0F95B },
+ [0x062D3] = { [0x0FE00] = 0x0FA02 },
+ [0x062D4] = { [0x0FE00] = 0x2F8B6 },
+ [0x062FC] = { [0x0FE00] = 0x2F8BA },
+ [0x062FE] = { [0x0FE00] = 0x0F973 },
+ [0x0633D] = { [0x0FE00] = 0x2F8B9 },
+ [0x06350] = { [0x0FE00] = 0x2F8B7 },
+ [0x06368] = { [0x0FE00] = 0x2F8BB },
+ [0x0637B] = { [0x0FE00] = 0x0F9A4 },
+ [0x06383] = { [0x0FE00] = 0x2F8BC },
+ [0x063A0] = { [0x0FE00] = 0x0F975 },
+ [0x063A9] = { [0x0FE00] = 0x2F8C1 },
+ [0x063C4] = { [0x0FE00] = 0x0FA8D },
+ [0x063C5] = { [0x0FE00] = 0x2F8C0 },
+ [0x063E4] = { [0x0FE00] = 0x2F8BD },
+ [0x0641C] = { [0x0FE00] = 0x0FA8E },
+ [0x06422] = { [0x0FE00] = 0x2F8BF },
+ [0x06452] = { [0x0FE00] = 0x0FA8F },
+ [0x06469] = { [0x0FE00] = 0x2F8C3 },
+ [0x06477] = { [0x0FE00] = 0x2F8C6 },
+ [0x0647E] = { [0x0FE00] = 0x2F8C4 },
+ [0x0649A] = { [0x0FE00] = 0x0F991 },
+ [0x0649D] = { [0x0FE00] = 0x2F8C5 },
+ [0x064C4] = { [0x0FE00] = 0x0F930 },
+ [0x0654F] = { [0x0FE00] = 0x0FA41, [0x0FE01] = 0x2F8C8 },
+ [0x06556] = { [0x0FE00] = 0x0FA90 },
+ [0x0656C] = { [0x0FE00] = 0x2F8C9 },
+ [0x06578] = { [0x0FE00] = 0x0F969 },
+ [0x06599] = { [0x0FE00] = 0x0F9BE },
+ [0x065C5] = { [0x0FE00] = 0x0F983 },
+ [0x065E2] = { [0x0FE00] = 0x0FA42 },
+ [0x065E3] = { [0x0FE00] = 0x2F8CB },
+ [0x06613] = { [0x0FE00] = 0x0F9E0 },
+ [0x06649] = { [0x0FE00] = 0x2F8CD },
+ [0x06674] = { [0x0FE00] = 0x0FA12, [0x0FE01] = 0x0FA91 },
+ [0x06688] = { [0x0FE00] = 0x0F9C5 },
+ [0x06691] = { [0x0FE00] = 0x0FA43, [0x0FE01] = 0x2F8CF },
+ [0x0669C] = { [0x0FE00] = 0x2F8D5 },
+ [0x066B4] = { [0x0FE00] = 0x0FA06 },
+ [0x066C6] = { [0x0FE00] = 0x0F98B },
+ [0x066F4] = { [0x0FE00] = 0x0F901 },
+ [0x066F8] = { [0x0FE00] = 0x2F8CC },
+ [0x06700] = { [0x0FE00] = 0x2F8D4 },
+ [0x06717] = { [0x0FE00] = 0x0F929, [0x0FE01] = 0x0FA92, [0x0FE02] = 0x2F8D8 },
+ [0x0671B] = { [0x0FE00] = 0x0FA93, [0x0FE01] = 0x2F8D9 },
+ [0x06721] = { [0x0FE00] = 0x2F8DA },
+ [0x0674E] = { [0x0FE00] = 0x0F9E1 },
+ [0x06753] = { [0x0FE00] = 0x2F8DC },
+ [0x06756] = { [0x0FE00] = 0x0FA94 },
+ [0x0675E] = { [0x0FE00] = 0x2F8DB },
+ [0x0677B] = { [0x0FE00] = 0x0F9C8 },
+ [0x06785] = { [0x0FE00] = 0x2F8E0 },
+ [0x06797] = { [0x0FE00] = 0x0F9F4 },
+ [0x067F3] = { [0x0FE00] = 0x0F9C9 },
+ [0x067FA] = { [0x0FE00] = 0x2F8DF },
+ [0x06817] = { [0x0FE00] = 0x0F9DA },
+ [0x0681F] = { [0x0FE00] = 0x2F8E5 },
+ [0x06852] = { [0x0FE00] = 0x2F8E1 },
+ [0x06881] = { [0x0FE00] = 0x0F97A },
+ [0x06885] = { [0x0FE00] = 0x0FA44, [0x0FE01] = 0x2F8E2 },
+ [0x0688E] = { [0x0FE00] = 0x2F8E4 },
+ [0x068A8] = { [0x0FE00] = 0x0F9E2 },
+ [0x06914] = { [0x0FE00] = 0x2F8E6 },
+ [0x06942] = { [0x0FE00] = 0x2F8E8 },
+ [0x069A3] = { [0x0FE00] = 0x2F8E9 },
+ [0x069EA] = { [0x0FE00] = 0x2F8EA },
+ [0x06A02] = { [0x0FE00] = 0x0F914, [0x0FE01] = 0x0F95C, [0x0FE02] = 0x0F9BF },
+ [0x06A13] = { [0x0FE00] = 0x0F94C },
+ [0x06AA8] = { [0x0FE00] = 0x2F8EB },
+ [0x06AD3] = { [0x0FE00] = 0x0F931 },
+ [0x06ADB] = { [0x0FE00] = 0x2F8ED },
+ [0x06B04] = { [0x0FE00] = 0x0F91D },
+ [0x06B21] = { [0x0FE00] = 0x2F8EF },
+ [0x06B54] = { [0x0FE00] = 0x2F8F1 },
+ [0x06B72] = { [0x0FE00] = 0x2F8F3 },
+ [0x06B77] = { [0x0FE00] = 0x0F98C },
+ [0x06B79] = { [0x0FE00] = 0x0FA95 },
+ [0x06B9F] = { [0x0FE00] = 0x2F8F4 },
+ [0x06BAE] = { [0x0FE00] = 0x0F9A5 },
+ [0x06BBA] = { [0x0FE00] = 0x0F970, [0x0FE01] = 0x0FA96, [0x0FE02] = 0x2F8F5 },
+ [0x06BBB] = { [0x0FE00] = 0x2F8F6 },
+ [0x06C4E] = { [0x0FE00] = 0x2F8FA },
+ [0x06C67] = { [0x0FE00] = 0x2F8FE },
+ [0x06C88] = { [0x0FE00] = 0x0F972 },
+ [0x06CBF] = { [0x0FE00] = 0x2F8FC },
+ [0x06CCC] = { [0x0FE00] = 0x0F968 },
+ [0x06CCD] = { [0x0FE00] = 0x2F8FD },
+ [0x06CE5] = { [0x0FE00] = 0x0F9E3 },
+ [0x06D16] = { [0x0FE00] = 0x2F8FF },
+ [0x06D1B] = { [0x0FE00] = 0x0F915 },
+ [0x06D1E] = { [0x0FE00] = 0x0FA05 },
+ [0x06D34] = { [0x0FE00] = 0x2F907 },
+ [0x06D3E] = { [0x0FE00] = 0x2F900 },
+ [0x06D41] = { [0x0FE00] = 0x0F9CA, [0x0FE01] = 0x0FA97, [0x0FE02] = 0x2F902 },
+ [0x06D69] = { [0x0FE00] = 0x2F903 },
+ [0x06D6A] = { [0x0FE00] = 0x0F92A },
+ [0x06D77] = { [0x0FE00] = 0x0FA45, [0x0FE01] = 0x2F901 },
+ [0x06D78] = { [0x0FE00] = 0x2F904 },
+ [0x06D85] = { [0x0FE00] = 0x2F905 },
+ [0x06DCB] = { [0x0FE00] = 0x0F9F5 },
+ [0x06DDA] = { [0x0FE00] = 0x0F94D },
+ [0x06DEA] = { [0x0FE00] = 0x0F9D6 },
+ [0x06DF9] = { [0x0FE00] = 0x2F90E },
+ [0x06E1A] = { [0x0FE00] = 0x0FA46 },
+ [0x06E2F] = { [0x0FE00] = 0x2F908 },
+ [0x06E6E] = { [0x0FE00] = 0x2F909 },
+ [0x06E9C] = { [0x0FE00] = 0x0F9CB },
+ [0x06EBA] = { [0x0FE00] = 0x0F9EC },
+ [0x06EC7] = { [0x0FE00] = 0x2F90C },
+ [0x06ECB] = { [0x0FE00] = 0x0FA99, [0x0FE01] = 0x2F90B },
+ [0x06ED1] = { [0x0FE00] = 0x0F904 },
+ [0x06EDB] = { [0x0FE00] = 0x0FA98 },
+ [0x06F0F] = { [0x0FE00] = 0x0F94E },
+ [0x06F22] = { [0x0FE00] = 0x0FA47, [0x0FE01] = 0x0FA9A },
+ [0x06F23] = { [0x0FE00] = 0x0F992 },
+ [0x06F6E] = { [0x0FE00] = 0x2F90F },
+ [0x06FC6] = { [0x0FE00] = 0x2F912 },
+ [0x06FEB] = { [0x0FE00] = 0x0F922 },
+ [0x06FFE] = { [0x0FE00] = 0x0F984 },
+ [0x0701B] = { [0x0FE00] = 0x2F915 },
+ [0x0701E] = { [0x0FE00] = 0x0FA9B, [0x0FE01] = 0x2F914 },
+ [0x07039] = { [0x0FE00] = 0x2F913 },
+ [0x0704A] = { [0x0FE00] = 0x2F917 },
+ [0x07070] = { [0x0FE00] = 0x2F835 },
+ [0x07077] = { [0x0FE00] = 0x2F919 },
+ [0x0707D] = { [0x0FE00] = 0x2F918 },
+ [0x07099] = { [0x0FE00] = 0x0F9FB },
+ [0x070AD] = { [0x0FE00] = 0x2F91A },
+ [0x070C8] = { [0x0FE00] = 0x0F99F },
+ [0x070D9] = { [0x0FE00] = 0x0F916 },
+ [0x07145] = { [0x0FE00] = 0x2F91C },
+ [0x07149] = { [0x0FE00] = 0x0F993 },
+ [0x0716E] = { [0x0FE00] = 0x0FA48, [0x0FE01] = 0x0FA9C },
+ [0x0719C] = { [0x0FE00] = 0x2F91E },
+ [0x071CE] = { [0x0FE00] = 0x0F9C0 },
+ [0x071D0] = { [0x0FE00] = 0x0F9EE },
+ [0x07210] = { [0x0FE00] = 0x0F932 },
+ [0x0721B] = { [0x0FE00] = 0x0F91E },
+ [0x07228] = { [0x0FE00] = 0x2F920 },
+ [0x0722B] = { [0x0FE00] = 0x0FA49 },
+ [0x07235] = { [0x0FE00] = 0x0FA9E, [0x0FE01] = 0x2F921 },
+ [0x07250] = { [0x0FE00] = 0x2F922 },
+ [0x07262] = { [0x0FE00] = 0x0F946 },
+ [0x07280] = { [0x0FE00] = 0x2F924 },
+ [0x07295] = { [0x0FE00] = 0x2F925 },
+ [0x072AF] = { [0x0FE00] = 0x0FA9F },
+ [0x072C0] = { [0x0FE00] = 0x0F9FA },
+ [0x072FC] = { [0x0FE00] = 0x0F92B },
+ [0x0732A] = { [0x0FE00] = 0x0FA16, [0x0FE01] = 0x0FAA0 },
+ [0x07375] = { [0x0FE00] = 0x0F9A7 },
+ [0x0737A] = { [0x0FE00] = 0x2F928 },
+ [0x07387] = { [0x0FE00] = 0x0F961, [0x0FE01] = 0x0F9DB },
+ [0x0738B] = { [0x0FE00] = 0x2F929 },
+ [0x073A5] = { [0x0FE00] = 0x2F92B },
+ [0x073B2] = { [0x0FE00] = 0x0F9AD },
+ [0x073DE] = { [0x0FE00] = 0x0F917 },
+ [0x07406] = { [0x0FE00] = 0x0F9E4 },
+ [0x07409] = { [0x0FE00] = 0x0F9CC },
+ [0x07422] = { [0x0FE00] = 0x0FA4A },
+ [0x07447] = { [0x0FE00] = 0x2F92E },
+ [0x0745C] = { [0x0FE00] = 0x2F92F },
+ [0x07469] = { [0x0FE00] = 0x0F9AE },
+ [0x07471] = { [0x0FE00] = 0x0FAA1, [0x0FE01] = 0x2F930 },
+ [0x07485] = { [0x0FE00] = 0x2F931 },
+ [0x07489] = { [0x0FE00] = 0x0F994 },
+ [0x07498] = { [0x0FE00] = 0x0F9EF },
+ [0x074CA] = { [0x0FE00] = 0x2F932 },
+ [0x07506] = { [0x0FE00] = 0x0FAA2 },
+ [0x07524] = { [0x0FE00] = 0x2F934 },
+ [0x0753B] = { [0x0FE00] = 0x0FAA3 },
+ [0x0753E] = { [0x0FE00] = 0x2F936 },
+ [0x07559] = { [0x0FE00] = 0x0F9CD },
+ [0x07565] = { [0x0FE00] = 0x0F976 },
+ [0x07570] = { [0x0FE00] = 0x0F962, [0x0FE01] = 0x2F938 },
+ [0x075E2] = { [0x0FE00] = 0x0F9E5 },
+ [0x07610] = { [0x0FE00] = 0x2F93A },
+ [0x0761D] = { [0x0FE00] = 0x0FAA4 },
+ [0x0761F] = { [0x0FE00] = 0x0FAA5 },
+ [0x07642] = { [0x0FE00] = 0x0F9C1 },
+ [0x07669] = { [0x0FE00] = 0x0F90E },
+ [0x076CA] = { [0x0FE00] = 0x0FA17, [0x0FE01] = 0x0FAA6 },
+ [0x076DB] = { [0x0FE00] = 0x0FAA7 },
+ [0x076E7] = { [0x0FE00] = 0x0F933 },
+ [0x076F4] = { [0x0FE00] = 0x0FAA8, [0x0FE01] = 0x2F940 },
+ [0x07701] = { [0x0FE00] = 0x0F96D },
+ [0x0771E] = { [0x0FE00] = 0x2F945 },
+ [0x0771F] = { [0x0FE00] = 0x2F946, [0x0FE01] = 0x2F947 },
+ [0x07740] = { [0x0FE00] = 0x0FAAA },
+ [0x0774A] = { [0x0FE00] = 0x0FAA9, [0x0FE01] = 0x2F948 },
+ [0x0778B] = { [0x0FE00] = 0x2F94A },
+ [0x077A7] = { [0x0FE00] = 0x0FA9D },
+ [0x0784E] = { [0x0FE00] = 0x2F94E },
+ [0x0786B] = { [0x0FE00] = 0x0F9CE },
+ [0x0788C] = { [0x0FE00] = 0x0F93B, [0x0FE01] = 0x2F94F },
+ [0x07891] = { [0x0FE00] = 0x0FA4B },
+ [0x078CA] = { [0x0FE00] = 0x0F947 },
+ [0x078CC] = { [0x0FE00] = 0x0FAAB, [0x0FE01] = 0x2F950 },
+ [0x078FB] = { [0x0FE00] = 0x0F964 },
+ [0x0792A] = { [0x0FE00] = 0x0F985 },
+ [0x0793C] = { [0x0FE00] = 0x0FA18 },
+ [0x0793E] = { [0x0FE00] = 0x0FA4C },
+ [0x07948] = { [0x0FE00] = 0x0FA4E },
+ [0x07949] = { [0x0FE00] = 0x0FA4D },
+ [0x07950] = { [0x0FE00] = 0x0FA4F },
+ [0x07956] = { [0x0FE00] = 0x0FA50, [0x0FE01] = 0x2F953 },
+ [0x0795D] = { [0x0FE00] = 0x0FA51 },
+ [0x0795E] = { [0x0FE00] = 0x0FA19 },
+ [0x07965] = { [0x0FE00] = 0x0FA1A },
+ [0x0797F] = { [0x0FE00] = 0x0F93C },
+ [0x0798D] = { [0x0FE00] = 0x0FA52 },
+ [0x0798E] = { [0x0FE00] = 0x0FA53 },
+ [0x0798F] = { [0x0FE00] = 0x0FA1B, [0x0FE01] = 0x2F956 },
+ [0x079AE] = { [0x0FE00] = 0x0F9B6 },
+ [0x079CA] = { [0x0FE00] = 0x0F995 },
+ [0x079EB] = { [0x0FE00] = 0x2F957 },
+ [0x07A1C] = { [0x0FE00] = 0x0F956 },
+ [0x07A40] = { [0x0FE00] = 0x0FA54, [0x0FE01] = 0x2F959 },
+ [0x07A4A] = { [0x0FE00] = 0x2F95A },
+ [0x07A4F] = { [0x0FE00] = 0x2F95B },
+ [0x07A81] = { [0x0FE00] = 0x0FA55 },
+ [0x07AB1] = { [0x0FE00] = 0x0FAAC },
+ [0x07ACB] = { [0x0FE00] = 0x0F9F7 },
+ [0x07AEE] = { [0x0FE00] = 0x2F95F },
+ [0x07B20] = { [0x0FE00] = 0x0F9F8 },
+ [0x07BC0] = { [0x0FE00] = 0x0FA56, [0x0FE01] = 0x0FAAD },
+ [0x07BC6] = { [0x0FE00] = 0x2F962 },
+ [0x07BC9] = { [0x0FE00] = 0x2F963 },
+ [0x07C3E] = { [0x0FE00] = 0x0F9A6 },
+ [0x07C60] = { [0x0FE00] = 0x0F944 },
+ [0x07C7B] = { [0x0FE00] = 0x0FAAE },
+ [0x07C92] = { [0x0FE00] = 0x0F9F9 },
+ [0x07CBE] = { [0x0FE00] = 0x0FA1D },
+ [0x07CD2] = { [0x0FE00] = 0x2F966 },
+ [0x07CD6] = { [0x0FE00] = 0x0FA03 },
+ [0x07CE3] = { [0x0FE00] = 0x2F969 },
+ [0x07CE7] = { [0x0FE00] = 0x0F97B },
+ [0x07CE8] = { [0x0FE00] = 0x2F968 },
+ [0x07D00] = { [0x0FE00] = 0x2F96A },
+ [0x07D10] = { [0x0FE00] = 0x0F9CF },
+ [0x07D22] = { [0x0FE00] = 0x0F96A },
+ [0x07D2F] = { [0x0FE00] = 0x0F94F },
+ [0x07D5B] = { [0x0FE00] = 0x0FAAF },
+ [0x07D63] = { [0x0FE00] = 0x2F96C },
+ [0x07DA0] = { [0x0FE00] = 0x0F93D },
+ [0x07DBE] = { [0x0FE00] = 0x0F957 },
+ [0x07DC7] = { [0x0FE00] = 0x2F96E },
+ [0x07DF4] = { [0x0FE00] = 0x0F996, [0x0FE01] = 0x0FA57, [0x0FE02] = 0x0FAB0 },
+ [0x07E02] = { [0x0FE00] = 0x2F96F },
+ [0x07E09] = { [0x0FE00] = 0x0FA58 },
+ [0x07E37] = { [0x0FE00] = 0x0F950 },
+ [0x07E41] = { [0x0FE00] = 0x0FA59 },
+ [0x07E45] = { [0x0FE00] = 0x2F970 },
+ [0x07F3E] = { [0x0FE00] = 0x0FAB1 },
+ [0x07F72] = { [0x0FE00] = 0x0FA5A },
+ [0x07F79] = { [0x0FE00] = 0x0F9E6 },
+ [0x07F7A] = { [0x0FE00] = 0x2F976 },
+ [0x07F85] = { [0x0FE00] = 0x0F90F },
+ [0x07F95] = { [0x0FE00] = 0x2F978 },
+ [0x07F9A] = { [0x0FE00] = 0x0F9AF },
+ [0x07FBD] = { [0x0FE00] = 0x0FA1E },
+ [0x07FFA] = { [0x0FE00] = 0x2F979 },
+ [0x08001] = { [0x0FE00] = 0x0F934 },
+ [0x08005] = { [0x0FE00] = 0x0FA5B, [0x0FE01] = 0x0FAB2, [0x0FE02] = 0x2F97A },
+ [0x08046] = { [0x0FE00] = 0x0F9B0 },
+ [0x08060] = { [0x0FE00] = 0x2F97D },
+ [0x0806F] = { [0x0FE00] = 0x0F997 },
+ [0x08070] = { [0x0FE00] = 0x2F97F },
+ [0x0807E] = { [0x0FE00] = 0x0F945 },
+ [0x0808B] = { [0x0FE00] = 0x0F953 },
+ [0x080AD] = { [0x0FE00] = 0x2F8D6 },
+ [0x080B2] = { [0x0FE00] = 0x2F982 },
+ [0x08103] = { [0x0FE00] = 0x2F983 },
+ [0x0813E] = { [0x0FE00] = 0x2F985 },
+ [0x081D8] = { [0x0FE00] = 0x0F926 },
+ [0x081E8] = { [0x0FE00] = 0x0F9F6 },
+ [0x081ED] = { [0x0FE00] = 0x0FA5C },
+ [0x08201] = { [0x0FE00] = 0x2F893, [0x0FE01] = 0x2F98B },
+ [0x08204] = { [0x0FE00] = 0x2F98C },
+ [0x08218] = { [0x0FE00] = 0x0FA6D },
+ [0x0826F] = { [0x0FE00] = 0x0F97C },
+ [0x08279] = { [0x0FE00] = 0x0FA5D, [0x0FE01] = 0x0FA5E },
+ [0x0828B] = { [0x0FE00] = 0x2F990 },
+ [0x08291] = { [0x0FE00] = 0x2F98F },
+ [0x0829D] = { [0x0FE00] = 0x2F991 },
+ [0x082B1] = { [0x0FE00] = 0x2F993 },
+ [0x082B3] = { [0x0FE00] = 0x2F994 },
+ [0x082BD] = { [0x0FE00] = 0x2F995 },
+ [0x082E5] = { [0x0FE00] = 0x0F974, [0x0FE01] = 0x2F998 },
+ [0x082E6] = { [0x0FE00] = 0x2F996 },
+ [0x0831D] = { [0x0FE00] = 0x2F999 },
+ [0x08323] = { [0x0FE00] = 0x2F99C },
+ [0x08336] = { [0x0FE00] = 0x0F9FE },
+ [0x08352] = { [0x0FE00] = 0x0FAB3 },
+ [0x08353] = { [0x0FE00] = 0x2F9A0 },
+ [0x08363] = { [0x0FE00] = 0x2F99A },
+ [0x083AD] = { [0x0FE00] = 0x2F99B },
+ [0x083BD] = { [0x0FE00] = 0x2F99D },
+ [0x083C9] = { [0x0FE00] = 0x0F93E },
+ [0x083CA] = { [0x0FE00] = 0x2F9A1 },
+ [0x083CC] = { [0x0FE00] = 0x2F9A2 },
+ [0x083DC] = { [0x0FE00] = 0x2F9A3 },
+ [0x083E7] = { [0x0FE00] = 0x2F99E },
+ [0x083EF] = { [0x0FE00] = 0x0FAB4 },
+ [0x083F1] = { [0x0FE00] = 0x0F958 },
+ [0x0843D] = { [0x0FE00] = 0x0F918 },
+ [0x08449] = { [0x0FE00] = 0x0F96E },
+ [0x08457] = { [0x0FE00] = 0x0FA5F, [0x0FE01] = 0x2F99F },
+ [0x084EE] = { [0x0FE00] = 0x0F999 },
+ [0x084F1] = { [0x0FE00] = 0x2F9A8 },
+ [0x084F3] = { [0x0FE00] = 0x2F9A9 },
+ [0x084FC] = { [0x0FE00] = 0x0F9C2 },
+ [0x08516] = { [0x0FE00] = 0x2F9AA },
+ [0x08564] = { [0x0FE00] = 0x2F9AC },
+ [0x085CD] = { [0x0FE00] = 0x0F923 },
+ [0x085FA] = { [0x0FE00] = 0x0F9F0 },
+ [0x08606] = { [0x0FE00] = 0x0F935 },
+ [0x08612] = { [0x0FE00] = 0x0FA20 },
+ [0x0862D] = { [0x0FE00] = 0x0F91F },
+ [0x0863F] = { [0x0FE00] = 0x0F910 },
+ [0x08650] = { [0x0FE00] = 0x2F9B3 },
+ [0x0865C] = { [0x0FE00] = 0x0F936, [0x0FE01] = 0x2F9B4 },
+ [0x08667] = { [0x0FE00] = 0x2F9B5 },
+ [0x08669] = { [0x0FE00] = 0x2F9B6 },
+ [0x08688] = { [0x0FE00] = 0x2F9B8 },
+ [0x086A9] = { [0x0FE00] = 0x2F9B7 },
+ [0x086E2] = { [0x0FE00] = 0x2F9BA },
+ [0x0870E] = { [0x0FE00] = 0x2F9B9 },
+ [0x08728] = { [0x0FE00] = 0x2F9BC },
+ [0x0876B] = { [0x0FE00] = 0x2F9BD },
+ [0x08779] = { [0x0FE00] = 0x0FAB5, [0x0FE01] = 0x2F9BB },
+ [0x08786] = { [0x0FE00] = 0x2F9BE },
+ [0x087BA] = { [0x0FE00] = 0x0F911 },
+ [0x087E1] = { [0x0FE00] = 0x2F9C0 },
+ [0x08801] = { [0x0FE00] = 0x2F9C1 },
+ [0x0881F] = { [0x0FE00] = 0x0F927 },
+ [0x0884C] = { [0x0FE00] = 0x0FA08 },
+ [0x08860] = { [0x0FE00] = 0x2F9C3 },
+ [0x08863] = { [0x0FE00] = 0x2F9C4 },
+ [0x088C2] = { [0x0FE00] = 0x0F9A0 },
+ [0x088CF] = { [0x0FE00] = 0x0F9E7 },
+ [0x088D7] = { [0x0FE00] = 0x2F9C6 },
+ [0x088DE] = { [0x0FE00] = 0x2F9C7 },
+ [0x088E1] = { [0x0FE00] = 0x0F9E8 },
+ [0x088F8] = { [0x0FE00] = 0x0F912 },
+ [0x088FA] = { [0x0FE00] = 0x2F9C9 },
+ [0x08910] = { [0x0FE00] = 0x0FA60 },
+ [0x08941] = { [0x0FE00] = 0x0FAB6 },
+ [0x08964] = { [0x0FE00] = 0x0F924 },
+ [0x08986] = { [0x0FE00] = 0x0FAB7 },
+ [0x0898B] = { [0x0FE00] = 0x0FA0A },
+ [0x08996] = { [0x0FE00] = 0x0FA61, [0x0FE01] = 0x0FAB8 },
+ [0x08AA0] = { [0x0FE00] = 0x2F9CF },
+ [0x08AAA] = { [0x0FE00] = 0x0F96F, [0x0FE01] = 0x0F9A1 },
+ [0x08ABF] = { [0x0FE00] = 0x0FAB9 },
+ [0x08ACB] = { [0x0FE00] = 0x0FABB },
+ [0x08AD2] = { [0x0FE00] = 0x0F97D },
+ [0x08AD6] = { [0x0FE00] = 0x0F941 },
+ [0x08AED] = { [0x0FE00] = 0x0FABE, [0x0FE01] = 0x2F9D0 },
+ [0x08AF8] = { [0x0FE00] = 0x0FA22, [0x0FE01] = 0x0FABA },
+ [0x08AFE] = { [0x0FE00] = 0x0F95D, [0x0FE01] = 0x0FABD },
+ [0x08B01] = { [0x0FE00] = 0x0FA62, [0x0FE01] = 0x0FABC },
+ [0x08B39] = { [0x0FE00] = 0x0FA63, [0x0FE01] = 0x0FABF },
+ [0x08B58] = { [0x0FE00] = 0x0F9FC },
+ [0x08B80] = { [0x0FE00] = 0x0F95A },
+ [0x08B8A] = { [0x0FE00] = 0x0FAC0, [0x0FE01] = 0x2F9D1 },
+ [0x08C48] = { [0x0FE00] = 0x0F900 },
+ [0x08C55] = { [0x0FE00] = 0x2F9D2 },
+ [0x08CAB] = { [0x0FE00] = 0x2F9D4 },
+ [0x08CC1] = { [0x0FE00] = 0x2F9D5 },
+ [0x08CC2] = { [0x0FE00] = 0x0F948 },
+ [0x08CC8] = { [0x0FE00] = 0x0F903 },
+ [0x08CD3] = { [0x0FE00] = 0x0FA64 },
+ [0x08D08] = { [0x0FE00] = 0x0FA65, [0x0FE01] = 0x0FAC1 },
+ [0x08D1B] = { [0x0FE00] = 0x2F9D6 },
+ [0x08D77] = { [0x0FE00] = 0x2F9D7 },
+ [0x08DBC] = { [0x0FE00] = 0x2F9DB },
+ [0x08DCB] = { [0x0FE00] = 0x2F9DA },
+ [0x08DEF] = { [0x0FE00] = 0x0F937 },
+ [0x08DF0] = { [0x0FE00] = 0x2F9DC },
+ [0x08ECA] = { [0x0FE00] = 0x0F902 },
+ [0x08ED4] = { [0x0FE00] = 0x2F9DE },
+ [0x08F26] = { [0x0FE00] = 0x0F998 },
+ [0x08F2A] = { [0x0FE00] = 0x0F9D7 },
+ [0x08F38] = { [0x0FE00] = 0x0FAC2, [0x0FE01] = 0x2F9DF },
+ [0x08F3B] = { [0x0FE00] = 0x0FA07 },
+ [0x08F62] = { [0x0FE00] = 0x0F98D },
+ [0x08F9E] = { [0x0FE00] = 0x2F98D },
+ [0x08FB0] = { [0x0FE00] = 0x0F971 },
+ [0x08FB6] = { [0x0FE00] = 0x0FA66 },
+ [0x09023] = { [0x0FE00] = 0x0F99A },
+ [0x09038] = { [0x0FE00] = 0x0FA25, [0x0FE01] = 0x0FA67 },
+ [0x09072] = { [0x0FE00] = 0x0FAC3 },
+ [0x0907C] = { [0x0FE00] = 0x0F9C3 },
+ [0x0908F] = { [0x0FE00] = 0x0F913 },
+ [0x09094] = { [0x0FE00] = 0x2F9E2 },
+ [0x090CE] = { [0x0FE00] = 0x0F92C },
+ [0x090DE] = { [0x0FE00] = 0x0FA2E },
+ [0x090F1] = { [0x0FE00] = 0x2F9E3 },
+ [0x090FD] = { [0x0FE00] = 0x0FA26 },
+ [0x09111] = { [0x0FE00] = 0x2F9E4 },
+ [0x0911B] = { [0x0FE00] = 0x2F9E6 },
+ [0x0916A] = { [0x0FE00] = 0x0F919 },
+ [0x09199] = { [0x0FE00] = 0x0FAC4 },
+ [0x091B4] = { [0x0FE00] = 0x0F9B7 },
+ [0x091CC] = { [0x0FE00] = 0x0F9E9 },
+ [0x091CF] = { [0x0FE00] = 0x0F97E },
+ [0x091D1] = { [0x0FE00] = 0x0F90A },
+ [0x09234] = { [0x0FE00] = 0x0F9B1 },
+ [0x09238] = { [0x0FE00] = 0x2F9E7 },
+ [0x09276] = { [0x0FE00] = 0x0FAC5 },
+ [0x0927C] = { [0x0FE00] = 0x2F9EA },
+ [0x092D7] = { [0x0FE00] = 0x2F9E8 },
+ [0x092D8] = { [0x0FE00] = 0x2F9E9 },
+ [0x09304] = { [0x0FE00] = 0x0F93F },
+ [0x0934A] = { [0x0FE00] = 0x0F99B },
+ [0x093F9] = { [0x0FE00] = 0x2F9EB },
+ [0x09415] = { [0x0FE00] = 0x2F9EC },
+ [0x0958B] = { [0x0FE00] = 0x2F9EE },
+ [0x095AD] = { [0x0FE00] = 0x0F986 },
+ [0x095B7] = { [0x0FE00] = 0x2F9F0 },
+ [0x0962E] = { [0x0FE00] = 0x0F9C6 },
+ [0x0964B] = { [0x0FE00] = 0x0F951 },
+ [0x0964D] = { [0x0FE00] = 0x0FA09 },
+ [0x09675] = { [0x0FE00] = 0x0F959 },
+ [0x09678] = { [0x0FE00] = 0x0F9D3 },
+ [0x0967C] = { [0x0FE00] = 0x0FAC6 },
+ [0x09686] = { [0x0FE00] = 0x0F9DC },
+ [0x096A3] = { [0x0FE00] = 0x0F9F1 },
+ [0x096B7] = { [0x0FE00] = 0x0FA2F },
+ [0x096B8] = { [0x0FE00] = 0x0F9B8 },
+ [0x096C3] = { [0x0FE00] = 0x2F9F3 },
+ [0x096E2] = { [0x0FE00] = 0x0F9EA },
+ [0x096E3] = { [0x0FE00] = 0x0FA68, [0x0FE01] = 0x0FAC7 },
+ [0x096F6] = { [0x0FE00] = 0x0F9B2 },
+ [0x096F7] = { [0x0FE00] = 0x0F949 },
+ [0x09723] = { [0x0FE00] = 0x2F9F5 },
+ [0x09732] = { [0x0FE00] = 0x0F938 },
+ [0x09748] = { [0x0FE00] = 0x0F9B3 },
+ [0x09756] = { [0x0FE00] = 0x0FA1C, [0x0FE01] = 0x0FAC8 },
+ [0x097DB] = { [0x0FE00] = 0x0FAC9 },
+ [0x097E0] = { [0x0FE00] = 0x2F9FA },
+ [0x097FF] = { [0x0FE00] = 0x0FA69, [0x0FE01] = 0x0FACA },
+ [0x0980B] = { [0x0FE00] = 0x0FACB, [0x0FE01] = 0x2F9FE, [0x0FE02] = 0x2F9FF },
+ [0x09818] = { [0x0FE00] = 0x0F9B4 },
+ [0x09829] = { [0x0FE00] = 0x2FA00 },
+ [0x0983B] = { [0x0FE00] = 0x0FA6A, [0x0FE01] = 0x0FACC },
+ [0x0985E] = { [0x0FE00] = 0x0F9D0 },
+ [0x098E2] = { [0x0FE00] = 0x2FA02 },
+ [0x098EF] = { [0x0FE00] = 0x0FA2A },
+ [0x098FC] = { [0x0FE00] = 0x0FA2B },
+ [0x09928] = { [0x0FE00] = 0x0FA2C },
+ [0x09929] = { [0x0FE00] = 0x2FA04 },
+ [0x099A7] = { [0x0FE00] = 0x2FA05 },
+ [0x099C2] = { [0x0FE00] = 0x2FA06 },
+ [0x099F1] = { [0x0FE00] = 0x0F91A },
+ [0x099FE] = { [0x0FE00] = 0x2FA07 },
+ [0x09A6A] = { [0x0FE00] = 0x0F987 },
+ [0x09B12] = { [0x0FE00] = 0x0FACD, [0x0FE01] = 0x2FA0A },
+ [0x09B6F] = { [0x0FE00] = 0x0F939 },
+ [0x09C40] = { [0x0FE00] = 0x2FA0B },
+ [0x09C57] = { [0x0FE00] = 0x0F9F2 },
+ [0x09CFD] = { [0x0FE00] = 0x2FA0C },
+ [0x09D67] = { [0x0FE00] = 0x2FA0F },
+ [0x09DB4] = { [0x0FE00] = 0x0FA2D },
+ [0x09DFA] = { [0x0FE00] = 0x0F93A },
+ [0x09E1E] = { [0x0FE00] = 0x0F920 },
+ [0x09E7F] = { [0x0FE00] = 0x0F940 },
+ [0x09E97] = { [0x0FE00] = 0x0F988 },
+ [0x09E9F] = { [0x0FE00] = 0x0F9F3 },
+ [0x09EBB] = { [0x0FE00] = 0x2FA15 },
+ [0x09ECE] = { [0x0FE00] = 0x0F989 },
+ [0x09EF9] = { [0x0FE00] = 0x2FA17 },
+ [0x09EFE] = { [0x0FE00] = 0x2FA18 },
+ [0x09F05] = { [0x0FE00] = 0x2FA19 },
+ [0x09F0F] = { [0x0FE00] = 0x2FA1A },
+ [0x09F16] = { [0x0FE00] = 0x2FA1B },
+ [0x09F3B] = { [0x0FE00] = 0x2FA1C },
+ [0x09F43] = { [0x0FE00] = 0x0FAD8 },
+ [0x09F8D] = { [0x0FE00] = 0x0F9C4 },
+ [0x09F8E] = { [0x0FE00] = 0x0FAD9 },
+ [0x09F9C] = { [0x0FE00] = 0x0F907, [0x0FE01] = 0x0F908, [0x0FE02] = 0x0FACE },
+ [0x20122] = { [0x0FE00] = 0x2F803 },
+ [0x2051C] = { [0x0FE00] = 0x2F812 },
+ [0x20525] = { [0x0FE00] = 0x2F91B },
+ [0x2054B] = { [0x0FE00] = 0x2F816 },
+ [0x2063A] = { [0x0FE00] = 0x2F80D },
+ [0x20804] = { [0x0FE00] = 0x2F9D9 },
+ [0x208DE] = { [0x0FE00] = 0x2F9DD },
+ [0x20A2C] = { [0x0FE00] = 0x2F834 },
+ [0x20B63] = { [0x0FE00] = 0x2F838 },
+ [0x214E4] = { [0x0FE00] = 0x2F859 },
+ [0x216A8] = { [0x0FE00] = 0x2F860 },
+ [0x216EA] = { [0x0FE00] = 0x2F861 },
+ [0x219C8] = { [0x0FE00] = 0x2F86C },
+ [0x21B18] = { [0x0FE00] = 0x2F871 },
+ [0x21D0B] = { [0x0FE00] = 0x2F8F8 },
+ [0x21DE4] = { [0x0FE00] = 0x2F87B },
+ [0x21DE6] = { [0x0FE00] = 0x2F87D },
+ [0x22183] = { [0x0FE00] = 0x2F889 },
+ [0x2219F] = { [0x0FE00] = 0x2F939 },
+ [0x22331] = { [0x0FE00] = 0x2F891, [0x0FE01] = 0x2F892 },
+ [0x226D4] = { [0x0FE00] = 0x2F8A4 },
+ [0x22844] = { [0x0FE00] = 0x0FAD0 },
+ [0x2284A] = { [0x0FE00] = 0x0FACF },
+ [0x22B0C] = { [0x0FE00] = 0x2F8B8 },
+ [0x22BF1] = { [0x0FE00] = 0x2F8BE },
+ [0x2300A] = { [0x0FE00] = 0x2F8CA },
+ [0x232B8] = { [0x0FE00] = 0x2F897 },
+ [0x2335F] = { [0x0FE00] = 0x2F980 },
+ [0x23393] = { [0x0FE00] = 0x2F989 },
+ [0x2339C] = { [0x0FE00] = 0x2F98A },
+ [0x233C3] = { [0x0FE00] = 0x2F8DD },
+ [0x233D5] = { [0x0FE00] = 0x0FAD1 },
+ [0x2346D] = { [0x0FE00] = 0x2F8E3 },
+ [0x236A3] = { [0x0FE00] = 0x2F8EC },
+ [0x238A7] = { [0x0FE00] = 0x2F8F0 },
+ [0x23A8D] = { [0x0FE00] = 0x2F8F7 },
+ [0x23AFA] = { [0x0FE00] = 0x2F8F9 },
+ [0x23CBC] = { [0x0FE00] = 0x2F8FB },
+ [0x23D1E] = { [0x0FE00] = 0x2F906 },
+ [0x23ED1] = { [0x0FE00] = 0x2F90D },
+ [0x23F5E] = { [0x0FE00] = 0x2F910 },
+ [0x23F8E] = { [0x0FE00] = 0x2F911 },
+ [0x24263] = { [0x0FE00] = 0x2F91D },
+ [0x242EE] = { [0x0FE00] = 0x0FA6C },
+ [0x243AB] = { [0x0FE00] = 0x2F91F },
+ [0x24608] = { [0x0FE00] = 0x2F923 },
+ [0x24735] = { [0x0FE00] = 0x2F926 },
+ [0x24814] = { [0x0FE00] = 0x2F927 },
+ [0x24C36] = { [0x0FE00] = 0x2F935 },
+ [0x24C92] = { [0x0FE00] = 0x2F937 },
+ [0x24FA1] = { [0x0FE00] = 0x2F93B },
+ [0x24FB8] = { [0x0FE00] = 0x2F93C },
+ [0x25044] = { [0x0FE00] = 0x2F93D },
+ [0x250F2] = { [0x0FE00] = 0x2F942 },
+ [0x250F3] = { [0x0FE00] = 0x2F941 },
+ [0x25119] = { [0x0FE00] = 0x2F943 },
+ [0x25133] = { [0x0FE00] = 0x2F944 },
+ [0x25249] = { [0x0FE00] = 0x0FAD5 },
+ [0x2541D] = { [0x0FE00] = 0x2F94D },
+ [0x25626] = { [0x0FE00] = 0x2F952 },
+ [0x2569A] = { [0x0FE00] = 0x2F954 },
+ [0x256C5] = { [0x0FE00] = 0x2F955 },
+ [0x2597C] = { [0x0FE00] = 0x2F95C },
+ [0x25AA7] = { [0x0FE00] = 0x2F95D, [0x0FE01] = 0x2F95E },
+ [0x25BAB] = { [0x0FE00] = 0x2F961 },
+ [0x25C80] = { [0x0FE00] = 0x2F965 },
+ [0x25CD0] = { [0x0FE00] = 0x0FAD6 },
+ [0x25F86] = { [0x0FE00] = 0x2F96B },
+ [0x261DA] = { [0x0FE00] = 0x2F898 },
+ [0x26228] = { [0x0FE00] = 0x2F972 },
+ [0x26247] = { [0x0FE00] = 0x2F973 },
+ [0x262D9] = { [0x0FE00] = 0x2F975 },
+ [0x2633E] = { [0x0FE00] = 0x2F977 },
+ [0x264DA] = { [0x0FE00] = 0x2F97B },
+ [0x26523] = { [0x0FE00] = 0x2F97C },
+ [0x265A8] = { [0x0FE00] = 0x2F97E },
+ [0x267A7] = { [0x0FE00] = 0x2F987 },
+ [0x267B5] = { [0x0FE00] = 0x2F988 },
+ [0x26B3C] = { [0x0FE00] = 0x2F997 },
+ [0x26C36] = { [0x0FE00] = 0x2F9A4 },
+ [0x26CD5] = { [0x0FE00] = 0x2F9A6 },
+ [0x26D6B] = { [0x0FE00] = 0x2F9A5 },
+ [0x26F2C] = { [0x0FE00] = 0x2F9AD },
+ [0x26FB1] = { [0x0FE00] = 0x2F9B0 },
+ [0x270D2] = { [0x0FE00] = 0x2F9B1 },
+ [0x273CA] = { [0x0FE00] = 0x2F9AB },
+ [0x27667] = { [0x0FE00] = 0x2F9C5 },
+ [0x278AE] = { [0x0FE00] = 0x2F9CB },
+ [0x27966] = { [0x0FE00] = 0x2F9CC },
+ [0x27CA8] = { [0x0FE00] = 0x2F9D3 },
+ [0x27ED3] = { [0x0FE00] = 0x0FAD7 },
+ [0x27F2F] = { [0x0FE00] = 0x2F9D8 },
+ [0x285D2] = { [0x0FE00] = 0x2F9E0 },
+ [0x285ED] = { [0x0FE00] = 0x2F9E1 },
+ [0x2872E] = { [0x0FE00] = 0x2F9E5 },
+ [0x28BFA] = { [0x0FE00] = 0x2F9ED },
+ [0x28D77] = { [0x0FE00] = 0x2F9F1 },
+ [0x29145] = { [0x0FE00] = 0x2F9F6 },
+ [0x291DF] = { [0x0FE00] = 0x2F81C },
+ [0x2921A] = { [0x0FE00] = 0x2F9F7 },
+ [0x2940A] = { [0x0FE00] = 0x2F9FB },
+ [0x29496] = { [0x0FE00] = 0x2F9FD },
+ [0x295B6] = { [0x0FE00] = 0x2FA01 },
+ [0x29B30] = { [0x0FE00] = 0x2FA09 },
+ [0x2A0CE] = { [0x0FE00] = 0x2FA10 },
+ [0x2A105] = { [0x0FE00] = 0x2FA12 },
+ [0x2A20E] = { [0x0FE00] = 0x2FA13 },
+ [0x2A291] = { [0x0FE00] = 0x2FA14 },
+ [0x2A392] = { [0x0FE00] = 0x2F88F },
+ [0x2A600] = { [0x0FE00] = 0x2FA1D },
+}
+
+local cjk_ideograph_metatable = {
+ __index = {
+ category = "lo",
+ cjkwd = "w",
+ description = "<CJK Ideograph>",
+ direction = "l",
+ linebreak = "id",
+ }
+}
+
+local f_variant_name = formatters["CJK COMPATIBILITY IDEOGRAPH-%X"]
+
+local variants = setmetatableindex(function(t,k)
+ local kv = knownvariants[k]
+ if kv then
+ for k, v in next, kv do
+ kv[k] = f_variant_name(v)
+ end
+ end
+ knownvariants[k] = nil
+ return kv
+end)
+
+local cjk_ideograph_extender = function(k)
+ local t = {
+ -- shcode = shcode,
+ unicodeslot = k,
+ variants = variants[k],
+ }
+ setmetatable(t,cjk_ideograph_metatable)
+ return t
+end
+
+local cjk_ideograph_range = {
+ name = "cjk ideograph",
+ first = 0x4E00,
+ last = 0x9FBB,
+ extender = cjk_ideograph_extender,
+}
+
+-- CJK Ideograph Extension A
+
+local cjk_ideograph_extension_a_metatable = {
+ __index = {
+ category = "lo",
+ cjkwd = "w",
+ description = "<CJK Ideograph Extension A>",
+ direction = "l",
+ linebreak = "id",
+ }
+}
+
+local cjk_ideograph_extension_a_extender = function(k)
+ local t = {
+ -- shcode = shcode,
+ unicodeslot = k,
+ variants = variants[k],
+ }
+ setmetatable(t,cjk_ideograph_extension_a_metatable)
+ return t
+end
+
+local cjk_ideograph_extension_a_range = {
+ name = "cjk ideograph extension a",
+ first = 0x3400,
+ last = 0x4DB5,
+ extender = cjk_ideograph_extension_a_extender,
+}
+
+-- CJK Ideograph Extension B
+
+local cjk_ideograph_extension_b_metatable = {
+ __index = {
+ category = "lo",
+ cjkwd = "w",
+ description = "<CJK Ideograph Extension B>",
+ direction = "l",
+ linebreak = "id",
+ }
+}
+
+local cjk_ideograph_extension_b_extender = function(k)
+ local t = {
+ -- shcode = shcode,
+ unicodeslot = k,
+ variants = variants[k],
+ }
+ setmetatable(t,cjk_ideograph_extension_b_metatable)
+ return t
+end
+
+local cjk_ideograph_extension_b_range = {
+ name = "cjk ideograph extension b",
+ first = 0x20000,
+ last = 0x2A6D6,
+ extender = cjk_ideograph_extension_b_extender,
+}
+
+-- Ranges
+
+insert(ranges, hangul_syllable_range)
+insert(ranges, cjk_ideograph_range)
+insert(ranges, cjk_ideograph_extension_a_range)
+insert(ranges, cjk_ideograph_extension_b_range)
+
+-- Japanese
diff --git a/Master/texmf-dist/tex/context/base/char-def.lua b/Master/texmf-dist/tex/context/base/mkiv/char-def.lua
index 90ac4609d2c..bf21be70c37 100644
--- a/Master/texmf-dist/tex/context/base/char-def.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-def.lua
@@ -620,11 +620,12 @@ characters.data={
adobename="colon",
category="po",
cjkwd="na",
- comment="mathclass=punctuation,mathname=colon",
+ comment="mathclass=punctuation,mathname=colon,mathsymbol=0x2236",
description="COLON",
direction="cs",
linebreak="is",
mathclass="relation",
+--mathsymbol=0x2236,
unicodeslot=0x3A,
},
{
@@ -1764,6 +1765,10 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0xA9,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
{
adobename="ordfeminine",
@@ -1826,6 +1831,10 @@ characters.data={
direction="on",
linebreak="al",
unicodeslot=0xAE,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
{
adobename="macron",
@@ -2395,6 +2404,7 @@ characters.data={
adobename="germandbls",
category="ll",
cjkwd="a",
+ comment="uppercase can be 0x1E9E",
contextname="ssharp",
description="LATIN SMALL LETTER SHARP S",
direction="l",
@@ -19709,7 +19719,7 @@ characters.data={
unicodeslot=0x846,
},
[0x847]={
- arabic="d",
+ arabic="r",
category="lo",
description="MANDAIC LETTER IT",
direction="r",
@@ -19773,7 +19783,7 @@ characters.data={
unicodeslot=0x84E,
},
[0x84F]={
- arabic="r",
+ arabic="d",
category="lo",
description="MANDAIC LETTER IN",
direction="r",
@@ -20035,6 +20045,30 @@ characters.data={
linebreak="al",
unicodeslot=0x8B2,
},
+ [0x8B3]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER AIN WITH THREE DOTS BELOW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B3,
+ },
+ [0x8B4]={
+ arabic="d",
+ category="lo",
+ description="ARABIC LETTER KAF WITH DOT BELOW",
+ direction="al",
+ linebreak="al",
+ unicodeslot=0x8B4,
+ },
+ [0x8E3]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC TURNED DAMMA BELOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x8E3,
+ },
[0x8E4]={
category="mn",
combining=0xE6,
@@ -23327,6 +23361,13 @@ characters.data={
linebreak="pr",
unicodeslot=0xAF1,
},
+ [0xAF9]={
+ category="lo",
+ description="GUJARATI LETTER ZHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAF9,
+ },
[0xB01]={
category="mn",
description="ORIYA SIGN CANDRABINDU",
@@ -24988,6 +25029,13 @@ characters.data={
linebreak="al",
unicodeslot=0xC59,
},
+ [0xC5A]={
+ category="lo",
+ description="TELUGU LETTER RRRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xC5A,
+ },
[0xC60]={
category="lo",
description="TELUGU LETTER VOCALIC RR",
@@ -26266,6 +26314,13 @@ characters.data={
linebreak="cm",
unicodeslot=0xD57,
},
+ [0xD5F]={
+ category="lo",
+ description="MALAYALAM LETTER ARCHAIC II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xD5F,
+ },
[0xD60]={
category="lo",
description="MALAYALAM LETTER VOCALIC RR",
@@ -36746,6 +36801,55 @@ characters.data={
linebreak="al",
unicodeslot=0x13F4,
},
+ [0x13F5]={
+ category="lu",
+ description="CHEROKEE LETTER MV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F5,
+ },
+ [0x13F8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F8,
+ },
+ [0x13F9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13F9,
+ },
+ [0x13FA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FA,
+ },
+ [0x13FB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FB,
+ },
+ [0x13FC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FC,
+ },
+ [0x13FD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13FD,
+ },
[0x1400]={
category="pd",
description="CANADIAN SYLLABICS HYPHEN",
@@ -54653,6 +54757,8 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1E9E,
+ lccode=0xDF,
+ shcode={ 0x53, 0x53 },
},
[0x1E9F]={
category="ll",
@@ -59202,7 +59308,6 @@ characters.data={
[0x2061]={
category="cf",
comment="maybe: nulloperator",
- contextname="relax",
description="FUNCTION APPLICATION",
direction="bn",
linebreak="al",
@@ -59220,6 +59325,8 @@ characters.data={
description="INVISIBLE SEPARATOR",
direction="bn",
linebreak="al",
+ mathclass="binary",
+ mathname="invisibletimes",
unicodeslot=0x2063,
},
[0x2064]={
@@ -59905,6 +60012,13 @@ characters.data={
linebreak="pr",
unicodeslot=0x20BD,
},
+ [0x20BE]={
+ category="sc",
+ description="LARI SIGN",
+ direction="et",
+ linebreak="po",
+ unicodeslot=0x20BE,
+ },
[0x20D0]={
category="mn",
combining=0xE6,
@@ -60509,6 +60623,10 @@ characters.data={
linebreak="ai",
specials={ "super", 0x54, 0x4D },
unicodeslot=0x2122,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x2123]={
category="so",
@@ -61507,6 +61625,20 @@ characters.data={
specials={ "fraction", 0x30, 0x2044, 0x33 },
unicodeslot=0x2189,
},
+ [0x218A]={
+ category="so",
+ description="TURNED DIGIT TWO",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x218A,
+ },
+ [0x218B]={
+ category="so",
+ description="TURNED DIGIT THREE",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x218B,
+ },
[0x2190]={
adobename="arrowleft",
category="sm",
@@ -63743,6 +63875,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="colonequals",
+ mathpair={ 0x3A, 0x3D },
mirror=0x2255,
unicodeslot=0x2254,
},
@@ -63753,6 +63886,7 @@ characters.data={
linebreak="al",
mathclass="relation",
mathname="equalscolon",
+ mathpair={ 0x3D, 0x3A },
mirror=0x2254,
unicodeslot=0x2255,
},
@@ -63905,6 +64039,7 @@ characters.data={
description="LESS-THAN OR EQUAL TO",
direction="on",
linebreak="ai",
+ mathpair={ 0x3C, 0x3D },
mathspec={
{
class="relation",
@@ -63925,6 +64060,7 @@ characters.data={
description="GREATER-THAN OR EQUAL TO",
direction="on",
linebreak="ai",
+ mathpair={ 0x3E, 0x3D },
mathspec={
{
class="relation",
@@ -65406,7 +65542,7 @@ characters.data={
category="sm",
description="MIDLINE HORIZONTAL ELLIPSIS",
direction="on",
- linebreak="al",
+ linebreak="in",
mathclass="inner",
mathname="cdots",
unicodeslot=0x22EF,
@@ -65613,16 +65749,8 @@ characters.data={
description="LEFT CEILING",
direction="on",
linebreak="op",
- mathspec={
- {
- class="open",
- name="lceil",
- },
- {
- class="open",
- name="lceiling",
- },
- },
+ mathclass="open",
+ mathname="lceil",
mirror=0x2309,
unicodeslot=0x2308,
},
@@ -65631,16 +65759,8 @@ characters.data={
description="RIGHT CEILING",
direction="on",
linebreak="cl",
- mathspec={
- {
- class="close",
- name="rceil",
- },
- {
- class="close",
- name="rceiling",
- },
- },
+ mathclass="close",
+ mathname="rceil",
mirror=0x2308,
unicodeslot=0x2309,
},
@@ -82744,6 +82864,34 @@ characters.data={
linebreak="al",
unicodeslot=0x2BD1,
},
+ [0x2BEC]={
+ category="so",
+ description="LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEC,
+ },
+ [0x2BED]={
+ category="so",
+ description="UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BED,
+ },
+ [0x2BEE]={
+ category="so",
+ description="RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEE,
+ },
+ [0x2BEF]={
+ category="so",
+ description="DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x2BEF,
+ },
[0x2C00]={
category="lu",
description="GLAGOLITIC CAPITAL LETTER AZU",
@@ -90146,6 +90294,10 @@ characters.data={
direction="on",
linebreak="id",
unicodeslot=0x3030,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x3031]={
category="lm",
@@ -112827,6 +112979,14 @@ characters.data={
specials={ "super", 0x44C },
unicodeslot=0xA69D,
},
+ [0xA69E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC LETTER EF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xA69E,
+ },
[0xA69F]={
category="mn",
combining=0xE6,
@@ -114455,6 +114615,13 @@ characters.data={
linebreak="al",
unicodeslot=0xA78E,
},
+ [0xA78F]={
+ category="lo",
+ description="LATIN LETTER SINOLOGICAL DOT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA78F,
+ },
[0xA790]={
category="lu",
description="LATIN CAPITAL LETTER N WITH DESCENDER",
@@ -114679,6 +114846,48 @@ characters.data={
linebreak="al",
unicodeslot=0xA7B1,
},
+ [0xA7B2]={
+ category="lu",
+ description="LATIN CAPITAL LETTER J WITH CROSSED-TAIL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B2,
+ },
+ [0xA7B3]={
+ category="lu",
+ description="LATIN CAPITAL LETTER CHI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B3,
+ },
+ [0xA7B4]={
+ category="lu",
+ description="LATIN CAPITAL LETTER BETA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B4,
+ },
+ [0xA7B5]={
+ category="ll",
+ description="LATIN SMALL LETTER BETA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B5,
+ },
+ [0xA7B6]={
+ category="lu",
+ description="LATIN CAPITAL LETTER OMEGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B6,
+ },
+ [0xA7B7]={
+ category="ll",
+ description="LATIN SMALL LETTER OMEGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA7B7,
+ },
[0xA7F7]={
category="lo",
description="LATIN EPIGRAPHIC LETTER SIDEWAYS I",
@@ -116367,6 +116576,20 @@ characters.data={
linebreak="al",
unicodeslot=0xA8FB,
},
+ [0xA8FC]={
+ category="po",
+ description="DEVANAGARI SIGN SIDDHAM",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0xA8FC,
+ },
+ [0xA8FD]={
+ category="lo",
+ description="DEVANAGARI JAIN OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xA8FD,
+ },
[0xA900]={
category="nd",
description="KAYAH LI DIGIT ZERO",
@@ -120098,6 +120321,34 @@ characters.data={
specials={ "super", 0xAB52 },
unicodeslot=0xAB5F,
},
+ [0xAB60]={
+ category="ll",
+ description="LATIN SMALL LETTER SAKHA YAT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB60,
+ },
+ [0xAB61]={
+ category="ll",
+ description="LATIN SMALL LETTER IOTIFIED E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB61,
+ },
+ [0xAB62]={
+ category="ll",
+ description="LATIN SMALL LETTER OPEN OE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB62,
+ },
+ [0xAB63]={
+ category="ll",
+ description="LATIN SMALL LETTER UO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB63,
+ },
[0xAB64]={
category="ll",
description="LATIN SMALL LETTER INVERTED ALPHA",
@@ -120112,6 +120363,566 @@ characters.data={
linebreak="al",
unicodeslot=0xAB65,
},
+ [0xAB70]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB70,
+ },
+ [0xAB71]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB71,
+ },
+ [0xAB72]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB72,
+ },
+ [0xAB73]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB73,
+ },
+ [0xAB74]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB74,
+ },
+ [0xAB75]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER V",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB75,
+ },
+ [0xAB76]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB76,
+ },
+ [0xAB77]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB77,
+ },
+ [0xAB78]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB78,
+ },
+ [0xAB79]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB79,
+ },
+ [0xAB7A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7A,
+ },
+ [0xAB7B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7B,
+ },
+ [0xAB7C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER GV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7C,
+ },
+ [0xAB7D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7D,
+ },
+ [0xAB7E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7E,
+ },
+ [0xAB7F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB7F,
+ },
+ [0xAB80]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB80,
+ },
+ [0xAB81]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB81,
+ },
+ [0xAB82]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB82,
+ },
+ [0xAB83]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB83,
+ },
+ [0xAB84]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB84,
+ },
+ [0xAB85]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB85,
+ },
+ [0xAB86]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB86,
+ },
+ [0xAB87]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB87,
+ },
+ [0xAB88]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER LV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB88,
+ },
+ [0xAB89]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB89,
+ },
+ [0xAB8A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER ME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8A,
+ },
+ [0xAB8B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8B,
+ },
+ [0xAB8C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8C,
+ },
+ [0xAB8D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER MU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8D,
+ },
+ [0xAB8E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8E,
+ },
+ [0xAB8F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER HNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB8F,
+ },
+ [0xAB90]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NAH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB90,
+ },
+ [0xAB91]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB91,
+ },
+ [0xAB92]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB92,
+ },
+ [0xAB93]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB93,
+ },
+ [0xAB94]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB94,
+ },
+ [0xAB95]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER NV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB95,
+ },
+ [0xAB96]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB96,
+ },
+ [0xAB97]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB97,
+ },
+ [0xAB98]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB98,
+ },
+ [0xAB99]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB99,
+ },
+ [0xAB9A]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9A,
+ },
+ [0xAB9B]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER QUV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9B,
+ },
+ [0xAB9C]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9C,
+ },
+ [0xAB9D]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER S",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9D,
+ },
+ [0xAB9E]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9E,
+ },
+ [0xAB9F]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xAB9F,
+ },
+ [0xABA0]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA0,
+ },
+ [0xABA1]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA1,
+ },
+ [0xABA2]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER SV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA2,
+ },
+ [0xABA3]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA3,
+ },
+ [0xABA4]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA4,
+ },
+ [0xABA5]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA5,
+ },
+ [0xABA6]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA6,
+ },
+ [0xABA7]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA7,
+ },
+ [0xABA8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA8,
+ },
+ [0xABA9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABA9,
+ },
+ [0xABAA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAA,
+ },
+ [0xABAB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAB,
+ },
+ [0xABAC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER DLA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAC,
+ },
+ [0xABAD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAD,
+ },
+ [0xABAE]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAE,
+ },
+ [0xABAF]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABAF,
+ },
+ [0xABB0]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB0,
+ },
+ [0xABB1]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB1,
+ },
+ [0xABB2]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TLV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB2,
+ },
+ [0xABB3]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB3,
+ },
+ [0xABB4]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB4,
+ },
+ [0xABB5]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB5,
+ },
+ [0xABB6]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB6,
+ },
+ [0xABB7]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB7,
+ },
+ [0xABB8]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER TSV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB8,
+ },
+ [0xABB9]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABB9,
+ },
+ [0xABBA]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBA,
+ },
+ [0xABBB]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBB,
+ },
+ [0xABBC]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBC,
+ },
+ [0xABBD]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBD,
+ },
+ [0xABBE]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER WV",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBE,
+ },
+ [0xABBF]={
+ category="ll",
+ description="CHEROKEE SMALL LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0xABBF,
+ },
[0xABC0]={
category="lo",
description="MEETEI MAYEK LETTER KOK",
@@ -130779,134 +131590,6 @@ characters.data={
linebreak="al",
unicodeslot=0xFDFD,
},
- [0xFE00]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0001",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE00,
- },
- [0xFE01]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0002",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE01,
- },
- [0xFE02]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0003",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE02,
- },
- [0xFE03]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0004",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE03,
- },
- [0xFE04]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0005",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE04,
- },
- [0xFE05]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0006",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE05,
- },
- [0xFE06]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0007",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE06,
- },
- [0xFE07]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0008",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE07,
- },
- [0xFE08]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0009",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE08,
- },
- [0xFE09]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE09,
- },
- [0xFE0A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0A,
- },
- [0xFE0B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0B,
- },
- [0xFE0C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0C,
- },
- [0xFE0D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0D,
- },
- [0xFE0E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x000F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0E,
- },
- [0xFE0F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0010",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xFE0F,
- },
[0xFE10]={
category="po",
cjkwd="w",
@@ -131110,6 +131793,22 @@ characters.data={
linebreak="cm",
unicodeslot=0xFE2D,
},
+ [0xFE2E]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC TITLO LEFT HALF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xFE2E,
+ },
+ [0xFE2F]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC TITLO RIGHT HALF",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0xFE2F,
+ },
[0xFE30]={
adobename="twodotleadervertical",
category="po",
@@ -145565,6 +146264,188 @@ characters.data={
linebreak="al",
unicodeslot=0x108AF,
},
+ [0x108E0]={
+ category="lo",
+ description="HATRAN LETTER ALEPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E0,
+ },
+ [0x108E1]={
+ category="lo",
+ description="HATRAN LETTER BETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E1,
+ },
+ [0x108E2]={
+ category="lo",
+ description="HATRAN LETTER GIMEL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E2,
+ },
+ [0x108E3]={
+ category="lo",
+ description="HATRAN LETTER DALETH-RESH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E3,
+ },
+ [0x108E4]={
+ category="lo",
+ description="HATRAN LETTER HE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E4,
+ },
+ [0x108E5]={
+ category="lo",
+ description="HATRAN LETTER WAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E5,
+ },
+ [0x108E6]={
+ category="lo",
+ description="HATRAN LETTER ZAYN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E6,
+ },
+ [0x108E7]={
+ category="lo",
+ description="HATRAN LETTER HETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E7,
+ },
+ [0x108E8]={
+ category="lo",
+ description="HATRAN LETTER TETH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E8,
+ },
+ [0x108E9]={
+ category="lo",
+ description="HATRAN LETTER YODH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108E9,
+ },
+ [0x108EA]={
+ category="lo",
+ description="HATRAN LETTER KAPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EA,
+ },
+ [0x108EB]={
+ category="lo",
+ description="HATRAN LETTER LAMEDH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EB,
+ },
+ [0x108EC]={
+ category="lo",
+ description="HATRAN LETTER MEM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EC,
+ },
+ [0x108ED]={
+ category="lo",
+ description="HATRAN LETTER NUN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108ED,
+ },
+ [0x108EE]={
+ category="lo",
+ description="HATRAN LETTER SAMEKH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EE,
+ },
+ [0x108EF]={
+ category="lo",
+ description="HATRAN LETTER AYN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108EF,
+ },
+ [0x108F0]={
+ category="lo",
+ description="HATRAN LETTER PE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F0,
+ },
+ [0x108F1]={
+ category="lo",
+ description="HATRAN LETTER SADHE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F1,
+ },
+ [0x108F2]={
+ category="lo",
+ description="HATRAN LETTER QOPH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F2,
+ },
+ [0x108F4]={
+ category="lo",
+ description="HATRAN LETTER SHIN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F4,
+ },
+ [0x108F5]={
+ category="lo",
+ description="HATRAN LETTER TAW",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108F5,
+ },
+ [0x108FB]={
+ category="no",
+ description="HATRAN NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FB,
+ },
+ [0x108FC]={
+ category="no",
+ description="HATRAN NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FC,
+ },
+ [0x108FD]={
+ category="no",
+ description="HATRAN NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FD,
+ },
+ [0x108FE]={
+ category="no",
+ description="HATRAN NUMBER TWENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FE,
+ },
+ [0x108FF]={
+ category="no",
+ description="HATRAN NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x108FF,
+ },
[0x10900]={
category="lo",
description="PHOENICIAN LETTER ALF",
@@ -146349,6 +147230,20 @@ characters.data={
linebreak="al",
unicodeslot=0x109B7,
},
+ [0x109BC]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109BC,
+ },
+ [0x109BD]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ONE HALF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109BD,
+ },
[0x109BE]={
category="lo",
description="MEROITIC CURSIVE LOGOGRAM RMT",
@@ -146363,6 +147258,440 @@ characters.data={
linebreak="al",
unicodeslot=0x109BF,
},
+ [0x109C0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C0,
+ },
+ [0x109C1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C1,
+ },
+ [0x109C2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C2,
+ },
+ [0x109C3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C3,
+ },
+ [0x109C4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C4,
+ },
+ [0x109C5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C5,
+ },
+ [0x109C6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C6,
+ },
+ [0x109C7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C7,
+ },
+ [0x109C8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C8,
+ },
+ [0x109C9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109C9,
+ },
+ [0x109CA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CA,
+ },
+ [0x109CB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THIRTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CB,
+ },
+ [0x109CC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FORTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CC,
+ },
+ [0x109CD]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIFTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CD,
+ },
+ [0x109CE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIXTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CE,
+ },
+ [0x109CF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVENTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109CF,
+ },
+ [0x109D2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D2,
+ },
+ [0x109D3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D3,
+ },
+ [0x109D4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D4,
+ },
+ [0x109D5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D5,
+ },
+ [0x109D6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D6,
+ },
+ [0x109D7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D7,
+ },
+ [0x109D8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D8,
+ },
+ [0x109D9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109D9,
+ },
+ [0x109DA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DA,
+ },
+ [0x109DB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DB,
+ },
+ [0x109DC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DC,
+ },
+ [0x109DD]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DD,
+ },
+ [0x109DE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DE,
+ },
+ [0x109DF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109DF,
+ },
+ [0x109E0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E0,
+ },
+ [0x109E1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E1,
+ },
+ [0x109E2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E2,
+ },
+ [0x109E3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E3,
+ },
+ [0x109E4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TEN THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E4,
+ },
+ [0x109E5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWENTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E5,
+ },
+ [0x109E6]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THIRTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E6,
+ },
+ [0x109E7]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FORTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E7,
+ },
+ [0x109E8]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIFTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E8,
+ },
+ [0x109E9]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIXTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109E9,
+ },
+ [0x109EA]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVENTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EA,
+ },
+ [0x109EB]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHTY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EB,
+ },
+ [0x109EC]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINETY THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EC,
+ },
+ [0x109ED]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109ED,
+ },
+ [0x109EE]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EE,
+ },
+ [0x109EF]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109EF,
+ },
+ [0x109F0]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F0,
+ },
+ [0x109F1]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F1,
+ },
+ [0x109F2]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F2,
+ },
+ [0x109F3]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F3,
+ },
+ [0x109F4]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F4,
+ },
+ [0x109F5]={
+ category="no",
+ description="MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F5,
+ },
+ [0x109F6]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION ONE TWELFTH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F6,
+ },
+ [0x109F7]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION TWO TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F7,
+ },
+ [0x109F8]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION THREE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F8,
+ },
+ [0x109F9]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION FOUR TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109F9,
+ },
+ [0x109FA]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION FIVE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FA,
+ },
+ [0x109FB]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION SIX TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FB,
+ },
+ [0x109FC]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION SEVEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FC,
+ },
+ [0x109FD]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION EIGHT TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FD,
+ },
+ [0x109FE]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION NINE TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FE,
+ },
+ [0x109FF]={
+ category="no",
+ description="MEROITIC CURSIVE FRACTION TEN TWELFTHS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x109FF,
+ },
[0x10A00]={
category="lo",
description="KHAROSHTHI LETTER A",
@@ -147319,6 +148648,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AC5,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AC6]={
arabic="u",
@@ -147327,6 +148659,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AC6,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AC7]={
arabic="r",
@@ -147455,6 +148790,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AD6,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AD7]={
arabic="l",
@@ -147463,6 +148801,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AD7,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AD8]={
arabic="d",
@@ -147543,6 +148884,9 @@ characters.data={
direction="r",
linebreak="al",
unicodeslot=0x10AE1,
+ variants={
+ [0xFE00]="alternate form",
+ },
},
[0x10AE2]={
arabic="u",
@@ -149238,6 +150582,762 @@ characters.data={
linebreak="al",
unicodeslot=0x10C48,
},
+ [0x10C80]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER A",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C80,
+ },
+ [0x10C81]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C81,
+ },
+ [0x10C82]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C82,
+ },
+ [0x10C83]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AMB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C83,
+ },
+ [0x10C84]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C84,
+ },
+ [0x10C85]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C85,
+ },
+ [0x10C86]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ECS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C86,
+ },
+ [0x10C87]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C87,
+ },
+ [0x10C88]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C88,
+ },
+ [0x10C89]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C89,
+ },
+ [0x10C8A]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER CLOSE E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8A,
+ },
+ [0x10C8B]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8B,
+ },
+ [0x10C8C]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8C,
+ },
+ [0x10C8D]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EG",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8D,
+ },
+ [0x10C8E]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EGY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8E,
+ },
+ [0x10C8F]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C8F,
+ },
+ [0x10C90]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C90,
+ },
+ [0x10C91]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER II",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C91,
+ },
+ [0x10C92]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EJ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C92,
+ },
+ [0x10C93]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C93,
+ },
+ [0x10C94]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER AK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C94,
+ },
+ [0x10C95]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER UNK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C95,
+ },
+ [0x10C96]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C96,
+ },
+ [0x10C97]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ELY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C97,
+ },
+ [0x10C98]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C98,
+ },
+ [0x10C99]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C99,
+ },
+ [0x10C9A]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9A,
+ },
+ [0x10C9B]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9B,
+ },
+ [0x10C9C]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER OO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9C,
+ },
+ [0x10C9D]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9D,
+ },
+ [0x10C9E]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9E,
+ },
+ [0x10C9F]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER OEE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10C9F,
+ },
+ [0x10CA0]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA0,
+ },
+ [0x10CA1]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EMP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA1,
+ },
+ [0x10CA2]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA2,
+ },
+ [0x10CA3]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER SHORT ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA3,
+ },
+ [0x10CA4]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ES",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA4,
+ },
+ [0x10CA5]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ESZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA5,
+ },
+ [0x10CA6]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ET",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA6,
+ },
+ [0x10CA7]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA7,
+ },
+ [0x10CA8]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ETY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA8,
+ },
+ [0x10CA9]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ECH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CA9,
+ },
+ [0x10CAA]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAA,
+ },
+ [0x10CAB]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER UU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAB,
+ },
+ [0x10CAC]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAC,
+ },
+ [0x10CAD]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAD,
+ },
+ [0x10CAE]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EV",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAE,
+ },
+ [0x10CAF]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CAF,
+ },
+ [0x10CB0]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER EZS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB0,
+ },
+ [0x10CB1]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB1,
+ },
+ [0x10CB2]={
+ category="lu",
+ description="OLD HUNGARIAN CAPITAL LETTER US",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CB2,
+ },
+ [0x10CC0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER A",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC0,
+ },
+ [0x10CC1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AA",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC1,
+ },
+ [0x10CC2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC2,
+ },
+ [0x10CC3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AMB",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC3,
+ },
+ [0x10CC4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC4,
+ },
+ [0x10CC5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENC",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC5,
+ },
+ [0x10CC6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ECS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC6,
+ },
+ [0x10CC7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC7,
+ },
+ [0x10CC8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC8,
+ },
+ [0x10CC9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CC9,
+ },
+ [0x10CCA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER CLOSE E",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCA,
+ },
+ [0x10CCB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCB,
+ },
+ [0x10CCC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EF",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCC,
+ },
+ [0x10CCD]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EG",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCD,
+ },
+ [0x10CCE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EGY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCE,
+ },
+ [0x10CCF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CCF,
+ },
+ [0x10CD0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER I",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD0,
+ },
+ [0x10CD1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER II",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD1,
+ },
+ [0x10CD2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EJ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD2,
+ },
+ [0x10CD3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD3,
+ },
+ [0x10CD4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER AK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD4,
+ },
+ [0x10CD5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER UNK",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD5,
+ },
+ [0x10CD6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EL",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD6,
+ },
+ [0x10CD7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ELY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD7,
+ },
+ [0x10CD8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EM",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD8,
+ },
+ [0x10CD9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CD9,
+ },
+ [0x10CDA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDA,
+ },
+ [0x10CDB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER O",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDB,
+ },
+ [0x10CDC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER OO",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDC,
+ },
+ [0x10CDD]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDD,
+ },
+ [0x10CDE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER RUDIMENTA OE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDE,
+ },
+ [0x10CDF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER OEE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CDF,
+ },
+ [0x10CE0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE0,
+ },
+ [0x10CE1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EMP",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE1,
+ },
+ [0x10CE2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE2,
+ },
+ [0x10CE3]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER SHORT ER",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE3,
+ },
+ [0x10CE4]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ES",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE4,
+ },
+ [0x10CE5]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ESZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE5,
+ },
+ [0x10CE6]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ET",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE6,
+ },
+ [0x10CE7]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENT",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE7,
+ },
+ [0x10CE8]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ETY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE8,
+ },
+ [0x10CE9]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ECH",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CE9,
+ },
+ [0x10CEA]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER U",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEA,
+ },
+ [0x10CEB]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER UU",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEB,
+ },
+ [0x10CEC]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEC,
+ },
+ [0x10CED]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER RUDIMENTA UE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CED,
+ },
+ [0x10CEE]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EV",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEE,
+ },
+ [0x10CEF]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EZ",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CEF,
+ },
+ [0x10CF0]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER EZS",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF0,
+ },
+ [0x10CF1]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF1,
+ },
+ [0x10CF2]={
+ category="ll",
+ description="OLD HUNGARIAN SMALL LETTER US",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CF2,
+ },
+ [0x10CFA]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFA,
+ },
+ [0x10CFB]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER FIVE",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFB,
+ },
+ [0x10CFC]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER TEN",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFC,
+ },
+ [0x10CFD]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER FIFTY",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFD,
+ },
+ [0x10CFE]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE HUNDRED",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFE,
+ },
+ [0x10CFF]={
+ category="no",
+ description="OLD HUNGARIAN NUMBER ONE THOUSAND",
+ direction="r",
+ linebreak="al",
+ unicodeslot=0x10CFF,
+ },
[0x10E60]={
category="no",
description="RUMI DIGIT ONE",
@@ -152194,6 +154294,35 @@ characters.data={
linebreak="ba",
unicodeslot=0x111C8,
},
+ [0x111C9]={
+ category="po",
+ description="SHARADA SANDHI MARK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x111C9,
+ },
+ [0x111CA]={
+ category="mn",
+ combining=0x7,
+ description="SHARADA SIGN NUKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CA,
+ },
+ [0x111CB]={
+ category="mn",
+ description="SHARADA VOWEL MODIFIER MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CB,
+ },
+ [0x111CC]={
+ category="mn",
+ description="SHARADA EXTRA SHORT VOWEL MARK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x111CC,
+ },
[0x111CD]={
category="po",
description="SHARADA SUTRA MARK",
@@ -152278,6 +154407,41 @@ characters.data={
linebreak="al",
unicodeslot=0x111DA,
},
+ [0x111DB]={
+ category="po",
+ description="SHARADA SIGN SIDDHAM",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x111DB,
+ },
+ [0x111DC]={
+ category="lo",
+ description="SHARADA HEADSTROKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x111DC,
+ },
+ [0x111DD]={
+ category="po",
+ description="SHARADA CONTINUATION SIGN",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DD,
+ },
+ [0x111DE]={
+ category="po",
+ description="SHARADA SECTION MARK-1",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DE,
+ },
+ [0x111DF]={
+ category="po",
+ description="SHARADA SECTION MARK-2",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x111DF,
+ },
[0x111E1]={
category="no",
description="SINHALA ARCHAIC DIGIT ONE",
@@ -152847,6 +155011,272 @@ characters.data={
linebreak="al",
unicodeslot=0x1123D,
},
+ [0x11280]={
+ category="lo",
+ description="MULTANI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11280,
+ },
+ [0x11281]={
+ category="lo",
+ description="MULTANI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11281,
+ },
+ [0x11282]={
+ category="lo",
+ description="MULTANI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11282,
+ },
+ [0x11283]={
+ category="lo",
+ description="MULTANI LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11283,
+ },
+ [0x11284]={
+ category="lo",
+ description="MULTANI LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11284,
+ },
+ [0x11285]={
+ category="lo",
+ description="MULTANI LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11285,
+ },
+ [0x11286]={
+ category="lo",
+ description="MULTANI LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11286,
+ },
+ [0x11288]={
+ category="lo",
+ description="MULTANI LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11288,
+ },
+ [0x1128A]={
+ category="lo",
+ description="MULTANI LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128A,
+ },
+ [0x1128B]={
+ category="lo",
+ description="MULTANI LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128B,
+ },
+ [0x1128C]={
+ category="lo",
+ description="MULTANI LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128C,
+ },
+ [0x1128D]={
+ category="lo",
+ description="MULTANI LETTER JJA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128D,
+ },
+ [0x1128F]={
+ category="lo",
+ description="MULTANI LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1128F,
+ },
+ [0x11290]={
+ category="lo",
+ description="MULTANI LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11290,
+ },
+ [0x11291]={
+ category="lo",
+ description="MULTANI LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11291,
+ },
+ [0x11292]={
+ category="lo",
+ description="MULTANI LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11292,
+ },
+ [0x11293]={
+ category="lo",
+ description="MULTANI LETTER DDDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11293,
+ },
+ [0x11294]={
+ category="lo",
+ description="MULTANI LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11294,
+ },
+ [0x11295]={
+ category="lo",
+ description="MULTANI LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11295,
+ },
+ [0x11296]={
+ category="lo",
+ description="MULTANI LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11296,
+ },
+ [0x11297]={
+ category="lo",
+ description="MULTANI LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11297,
+ },
+ [0x11298]={
+ category="lo",
+ description="MULTANI LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11298,
+ },
+ [0x11299]={
+ category="lo",
+ description="MULTANI LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11299,
+ },
+ [0x1129A]={
+ category="lo",
+ description="MULTANI LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129A,
+ },
+ [0x1129B]={
+ category="lo",
+ description="MULTANI LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129B,
+ },
+ [0x1129C]={
+ category="lo",
+ description="MULTANI LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129C,
+ },
+ [0x1129D]={
+ category="lo",
+ description="MULTANI LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129D,
+ },
+ [0x1129F]={
+ category="lo",
+ description="MULTANI LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1129F,
+ },
+ [0x112A0]={
+ category="lo",
+ description="MULTANI LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A0,
+ },
+ [0x112A1]={
+ category="lo",
+ description="MULTANI LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A1,
+ },
+ [0x112A2]={
+ category="lo",
+ description="MULTANI LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A2,
+ },
+ [0x112A3]={
+ category="lo",
+ description="MULTANI LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A3,
+ },
+ [0x112A4]={
+ category="lo",
+ description="MULTANI LETTER VA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A4,
+ },
+ [0x112A5]={
+ category="lo",
+ description="MULTANI LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A5,
+ },
+ [0x112A6]={
+ category="lo",
+ description="MULTANI LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A6,
+ },
+ [0x112A7]={
+ category="lo",
+ description="MULTANI LETTER RRA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A7,
+ },
+ [0x112A8]={
+ category="lo",
+ description="MULTANI LETTER RHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x112A8,
+ },
+ [0x112A9]={
+ category="po",
+ description="MULTANI SECTION MARK",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x112A9,
+ },
[0x112B0]={
category="lo",
description="KHUDAWADI LETTER A",
@@ -153332,6 +155762,13 @@ characters.data={
linebreak="nu",
unicodeslot=0x112F9,
},
+ [0x11300]={
+ category="mn",
+ description="GRANTHA SIGN COMBINING ANUSVARA ABOVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11300,
+ },
[0x11301]={
category="mn",
description="GRANTHA SIGN CANDRABINDU",
@@ -153777,6 +156214,13 @@ characters.data={
linebreak="cm",
unicodeslot=0x1134D,
},
+ [0x11350]={
+ category="lo",
+ description="GRANTHA OM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11350,
+ },
[0x11357]={
category="mc",
description="GRANTHA AU LENGTH MARK",
@@ -155016,6 +157460,146 @@ characters.data={
linebreak="ba",
unicodeslot=0x115C9,
},
+ [0x115CA]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CA,
+ },
+ [0x115CB]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CB,
+ },
+ [0x115CC]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CC,
+ },
+ [0x115CD]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CD,
+ },
+ [0x115CE]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CE,
+ },
+ [0x115CF]={
+ category="po",
+ description="SIDDHAM SECTION MARK DOUBLE RING",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115CF,
+ },
+ [0x115D0]={
+ category="po",
+ description="SIDDHAM SECTION MARK DOUBLE RING WITH RAYS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D0,
+ },
+ [0x115D1]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D1,
+ },
+ [0x115D2]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D2,
+ },
+ [0x115D3]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D3,
+ },
+ [0x115D4]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D4,
+ },
+ [0x115D5]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND RAYS",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D5,
+ },
+ [0x115D6]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D6,
+ },
+ [0x115D7]={
+ category="po",
+ description="SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x115D7,
+ },
+ [0x115D8]={
+ category="lo",
+ description="SIDDHAM LETTER THREE-CIRCLE ALTERNATE I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115D8,
+ },
+ [0x115D9]={
+ category="lo",
+ description="SIDDHAM LETTER TWO-CIRCLE ALTERNATE I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115D9,
+ },
+ [0x115DA]={
+ category="lo",
+ description="SIDDHAM LETTER TWO-CIRCLE ALTERNATE II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115DA,
+ },
+ [0x115DB]={
+ category="lo",
+ description="SIDDHAM LETTER ALTERNATE U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x115DB,
+ },
+ [0x115DC]={
+ category="mn",
+ description="SIDDHAM VOWEL SIGN ALTERNATE U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x115DC,
+ },
+ [0x115DD]={
+ category="mn",
+ description="SIDDHAM VOWEL SIGN ALTERNATE UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x115DD,
+ },
[0x11600]={
category="lo",
description="MODI LETTER A",
@@ -156034,6 +158618,406 @@ characters.data={
linebreak="nu",
unicodeslot=0x116C9,
},
+ [0x11700]={
+ category="lo",
+ description="AHOM LETTER KA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11700,
+ },
+ [0x11701]={
+ category="lo",
+ description="AHOM LETTER KHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11701,
+ },
+ [0x11702]={
+ category="lo",
+ description="AHOM LETTER NGA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11702,
+ },
+ [0x11703]={
+ category="lo",
+ description="AHOM LETTER NA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11703,
+ },
+ [0x11704]={
+ category="lo",
+ description="AHOM LETTER TA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11704,
+ },
+ [0x11705]={
+ category="lo",
+ description="AHOM LETTER ALTERNATE TA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11705,
+ },
+ [0x11706]={
+ category="lo",
+ description="AHOM LETTER PA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11706,
+ },
+ [0x11707]={
+ category="lo",
+ description="AHOM LETTER PHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11707,
+ },
+ [0x11708]={
+ category="lo",
+ description="AHOM LETTER BA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11708,
+ },
+ [0x11709]={
+ category="lo",
+ description="AHOM LETTER MA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11709,
+ },
+ [0x1170A]={
+ category="lo",
+ description="AHOM LETTER JA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170A,
+ },
+ [0x1170B]={
+ category="lo",
+ description="AHOM LETTER CHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170B,
+ },
+ [0x1170C]={
+ category="lo",
+ description="AHOM LETTER THA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170C,
+ },
+ [0x1170D]={
+ category="lo",
+ description="AHOM LETTER RA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170D,
+ },
+ [0x1170E]={
+ category="lo",
+ description="AHOM LETTER LA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170E,
+ },
+ [0x1170F]={
+ category="lo",
+ description="AHOM LETTER SA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1170F,
+ },
+ [0x11710]={
+ category="lo",
+ description="AHOM LETTER NYA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11710,
+ },
+ [0x11711]={
+ category="lo",
+ description="AHOM LETTER HA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11711,
+ },
+ [0x11712]={
+ category="lo",
+ description="AHOM LETTER A",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11712,
+ },
+ [0x11713]={
+ category="lo",
+ description="AHOM LETTER DA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11713,
+ },
+ [0x11714]={
+ category="lo",
+ description="AHOM LETTER DHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11714,
+ },
+ [0x11715]={
+ category="lo",
+ description="AHOM LETTER GA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11715,
+ },
+ [0x11716]={
+ category="lo",
+ description="AHOM LETTER ALTERNATE GA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11716,
+ },
+ [0x11717]={
+ category="lo",
+ description="AHOM LETTER GHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11717,
+ },
+ [0x11718]={
+ category="lo",
+ description="AHOM LETTER BHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11718,
+ },
+ [0x11719]={
+ category="lo",
+ description="AHOM LETTER JHA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11719,
+ },
+ [0x1171D]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL LA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171D,
+ },
+ [0x1171E]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL RA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171E,
+ },
+ [0x1171F]={
+ category="mn",
+ description="AHOM CONSONANT SIGN MEDIAL LIGATING RA",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1171F,
+ },
+ [0x11720]={
+ category="mc",
+ description="AHOM VOWEL SIGN A",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11720,
+ },
+ [0x11721]={
+ category="mc",
+ description="AHOM VOWEL SIGN AA",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11721,
+ },
+ [0x11722]={
+ category="mn",
+ description="AHOM VOWEL SIGN I",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11722,
+ },
+ [0x11723]={
+ category="mn",
+ description="AHOM VOWEL SIGN II",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11723,
+ },
+ [0x11724]={
+ category="mn",
+ description="AHOM VOWEL SIGN U",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11724,
+ },
+ [0x11725]={
+ category="mn",
+ description="AHOM VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11725,
+ },
+ [0x11726]={
+ category="mc",
+ description="AHOM VOWEL SIGN E",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x11726,
+ },
+ [0x11727]={
+ category="mn",
+ description="AHOM VOWEL SIGN AW",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11727,
+ },
+ [0x11728]={
+ category="mn",
+ description="AHOM VOWEL SIGN O",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11728,
+ },
+ [0x11729]={
+ category="mn",
+ description="AHOM VOWEL SIGN AI",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x11729,
+ },
+ [0x1172A]={
+ category="mn",
+ description="AHOM VOWEL SIGN AM",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1172A,
+ },
+ [0x1172B]={
+ category="mn",
+ combining=0x9,
+ description="AHOM SIGN KILLER",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0x1172B,
+ },
+ [0x11730]={
+ category="nd",
+ description="AHOM DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11730,
+ },
+ [0x11731]={
+ category="nd",
+ description="AHOM DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11731,
+ },
+ [0x11732]={
+ category="nd",
+ description="AHOM DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11732,
+ },
+ [0x11733]={
+ category="nd",
+ description="AHOM DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11733,
+ },
+ [0x11734]={
+ category="nd",
+ description="AHOM DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11734,
+ },
+ [0x11735]={
+ category="nd",
+ description="AHOM DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11735,
+ },
+ [0x11736]={
+ category="nd",
+ description="AHOM DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11736,
+ },
+ [0x11737]={
+ category="nd",
+ description="AHOM DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11737,
+ },
+ [0x11738]={
+ category="nd",
+ description="AHOM DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11738,
+ },
+ [0x11739]={
+ category="nd",
+ description="AHOM DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11739,
+ },
+ [0x1173A]={
+ category="no",
+ description="AHOM NUMBER TEN",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173A,
+ },
+ [0x1173B]={
+ category="no",
+ description="AHOM NUMBER TWENTY",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173B,
+ },
+ [0x1173C]={
+ category="po",
+ description="AHOM SIGN SMALL SECTION",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173C,
+ },
+ [0x1173D]={
+ category="po",
+ description="AHOM SIGN SECTION",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173D,
+ },
+ [0x1173E]={
+ category="po",
+ description="AHOM SIGN RULAI",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1173E,
+ },
+ [0x1173F]={
+ category="so",
+ description="AHOM SYMBOL VI",
+ direction="l",
+ linebreak="sa",
+ unicodeslot=0x1173F,
+ },
[0x118A0]={
category="lu",
description="WARANG CITI CAPITAL LETTER NGAA",
@@ -163470,6 +166454,13 @@ characters.data={
linebreak="al",
unicodeslot=0x12398,
},
+ [0x12399]={
+ category="lo",
+ description="CUNEIFORM SIGN U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12399,
+ },
[0x12400]={
category="nl",
description="CUNEIFORM NUMERIC SIGN TWO ASH",
@@ -164282,6 +167273,1378 @@ characters.data={
linebreak="ba",
unicodeslot=0x12474,
},
+ [0x12480]={
+ category="lo",
+ description="CUNEIFORM SIGN AB TIMES NUN TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12480,
+ },
+ [0x12481]={
+ category="lo",
+ description="CUNEIFORM SIGN AB TIMES SHU2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12481,
+ },
+ [0x12482]={
+ category="lo",
+ description="CUNEIFORM SIGN AD TIMES ESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12482,
+ },
+ [0x12483]={
+ category="lo",
+ description="CUNEIFORM SIGN BAD TIMES DISH TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12483,
+ },
+ [0x12484]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES AB2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12484,
+ },
+ [0x12485]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12485,
+ },
+ [0x12486]={
+ category="lo",
+ description="CUNEIFORM SIGN BAHAR2 TIMES ZA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12486,
+ },
+ [0x12487]={
+ category="lo",
+ description="CUNEIFORM SIGN BU OVER BU TIMES NA2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12487,
+ },
+ [0x12488]={
+ category="lo",
+ description="CUNEIFORM SIGN DA TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12488,
+ },
+ [0x12489]={
+ category="lo",
+ description="CUNEIFORM SIGN DAG TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12489,
+ },
+ [0x1248A]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248A,
+ },
+ [0x1248B]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM TIMES U U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248B,
+ },
+ [0x1248C]={
+ category="lo",
+ description="CUNEIFORM SIGN DIM2 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248C,
+ },
+ [0x1248D]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ANSHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248D,
+ },
+ [0x1248E]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248E,
+ },
+ [0x1248F]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ASH AT LEFT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1248F,
+ },
+ [0x12490]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES DIN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12490,
+ },
+ [0x12491]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES DUN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12491,
+ },
+ [0x12492]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES ERIN2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12492,
+ },
+ [0x12493]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12493,
+ },
+ [0x12494]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12494,
+ },
+ [0x12495]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GIR2 GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12495,
+ },
+ [0x12496]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12496,
+ },
+ [0x12497]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12497,
+ },
+ [0x12498]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12498,
+ },
+ [0x12499]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12499,
+ },
+ [0x1249A]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249A,
+ },
+ [0x1249B]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249B,
+ },
+ [0x1249C]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUSHU2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249C,
+ },
+ [0x1249D]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249D,
+ },
+ [0x1249E]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAK-020",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249E,
+ },
+ [0x1249F]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1249F,
+ },
+ [0x124A0]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LAM TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A0,
+ },
+ [0x124A1]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES LUH PLUS GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A1,
+ },
+ [0x124A2]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A2,
+ },
+ [0x124A3]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A3,
+ },
+ [0x124A4]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES MI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A4,
+ },
+ [0x124A5]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A5,
+ },
+ [0x124A6]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES PI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A6,
+ },
+ [0x124A7]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES SHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A7,
+ },
+ [0x124A8]={
+ category="lo",
+ description="CUNEIFORM SIGN DUG TIMES SI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A8,
+ },
+ [0x124A9]={
+ category="lo",
+ description="CUNEIFORM SIGN E2 TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124A9,
+ },
+ [0x124AA]={
+ category="lo",
+ description="CUNEIFORM SIGN E2 TIMES PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AA,
+ },
+ [0x124AB]={
+ category="lo",
+ description="CUNEIFORM SIGN ERIN2 X",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AB,
+ },
+ [0x124AC]={
+ category="lo",
+ description="CUNEIFORM SIGN ESH2 CROSSING ESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AC,
+ },
+ [0x124AD]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AD,
+ },
+ [0x124AE]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AE,
+ },
+ [0x124AF]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124AF,
+ },
+ [0x124B0]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B0,
+ },
+ [0x124B1]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES LAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B1,
+ },
+ [0x124B2]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES ME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B2,
+ },
+ [0x124B3]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES MES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B3,
+ },
+ [0x124B4]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN SHESHIG TIMES SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B4,
+ },
+ [0x124B5]={
+ category="lo",
+ description="CUNEIFORM SIGN EZEN TIMES SU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B5,
+ },
+ [0x124B6]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES BAHAR2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B6,
+ },
+ [0x124B7]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DIM GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B7,
+ },
+ [0x124B8]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B8,
+ },
+ [0x124B9]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124B9,
+ },
+ [0x124BA]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES EREN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BA,
+ },
+ [0x124BB]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BB,
+ },
+ [0x124BC]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GAR PLUS DI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BC,
+ },
+ [0x124BD]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES GAR PLUS NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BD,
+ },
+ [0x124BE]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES HA PLUS A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BE,
+ },
+ [0x124BF]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124BF,
+ },
+ [0x124C0]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LAM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C0,
+ },
+ [0x124C1]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C1,
+ },
+ [0x124C2]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES LUH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C2,
+ },
+ [0x124C3]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES MUSH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C3,
+ },
+ [0x124C4]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C4,
+ },
+ [0x124C5]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE PLUS E2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C5,
+ },
+ [0x124C6]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES NE PLUS GI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C6,
+ },
+ [0x124C7]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES SHIM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C7,
+ },
+ [0x124C8]={
+ category="lo",
+ description="CUNEIFORM SIGN GA2 TIMES ZIZ2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C8,
+ },
+ [0x124C9]={
+ category="lo",
+ description="CUNEIFORM SIGN GABA ROTATED NINETY DEGREES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124C9,
+ },
+ [0x124CA]={
+ category="lo",
+ description="CUNEIFORM SIGN GESHTIN TIMES U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CA,
+ },
+ [0x124CB]={
+ category="lo",
+ description="CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CB,
+ },
+ [0x124CC]={
+ category="lo",
+ description="CUNEIFORM SIGN GU2 TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CC,
+ },
+ [0x124CD]={
+ category="lo",
+ description="CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CD,
+ },
+ [0x124CE]={
+ category="lo",
+ description="CUNEIFORM SIGN HA TENU GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CE,
+ },
+ [0x124CF]={
+ category="lo",
+ description="CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124CF,
+ },
+ [0x124D0]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES BU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D0,
+ },
+ [0x124D1]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D1,
+ },
+ [0x124D2]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES U U U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D2,
+ },
+ [0x124D3]={
+ category="lo",
+ description="CUNEIFORM SIGN KA TIMES UR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D3,
+ },
+ [0x124D4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D4,
+ },
+ [0x124D5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-003",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D5,
+ },
+ [0x124D6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-021",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D6,
+ },
+ [0x124D7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-025",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D7,
+ },
+ [0x124D8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-030",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D8,
+ },
+ [0x124D9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124D9,
+ },
+ [0x124DA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-051",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DA,
+ },
+ [0x124DB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-062",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DB,
+ },
+ [0x124DC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DC,
+ },
+ [0x124DD]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-080",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DD,
+ },
+ [0x124DE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-081 OVER LAK-081",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DE,
+ },
+ [0x124DF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-092",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124DF,
+ },
+ [0x124E0]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-130",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E0,
+ },
+ [0x124E1]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-142",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E1,
+ },
+ [0x124E2]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-210",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E2,
+ },
+ [0x124E3]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-219",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E3,
+ },
+ [0x124E4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-220",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E4,
+ },
+ [0x124E5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-225",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E5,
+ },
+ [0x124E6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-228",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E6,
+ },
+ [0x124E7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-238",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E7,
+ },
+ [0x124E8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-265",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E8,
+ },
+ [0x124E9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-266",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124E9,
+ },
+ [0x124EA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-343",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EA,
+ },
+ [0x124EB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-347",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EB,
+ },
+ [0x124EC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-348",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EC,
+ },
+ [0x124ED]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-383",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124ED,
+ },
+ [0x124EE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-384",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EE,
+ },
+ [0x124EF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-390",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124EF,
+ },
+ [0x124F0]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-441",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F0,
+ },
+ [0x124F1]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F1,
+ },
+ [0x124F2]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES GU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F2,
+ },
+ [0x124F3]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F3,
+ },
+ [0x124F4]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F4,
+ },
+ [0x124F5]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F5,
+ },
+ [0x124F6]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F6,
+ },
+ [0x124F7]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-450",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F7,
+ },
+ [0x124F8]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-457",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F8,
+ },
+ [0x124F9]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-470",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124F9,
+ },
+ [0x124FA]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-483",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FA,
+ },
+ [0x124FB]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-490",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FB,
+ },
+ [0x124FC]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-492",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FC,
+ },
+ [0x124FD]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-493",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FD,
+ },
+ [0x124FE]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-495",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FE,
+ },
+ [0x124FF]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-550",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x124FF,
+ },
+ [0x12500]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-608",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12500,
+ },
+ [0x12501]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12501,
+ },
+ [0x12502]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12502,
+ },
+ [0x12503]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES BAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12503,
+ },
+ [0x12504]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12504,
+ },
+ [0x12505]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES KU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12505,
+ },
+ [0x12506]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12506,
+ },
+ [0x12507]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES TAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12507,
+ },
+ [0x12508]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES TE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12508,
+ },
+ [0x12509]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES U2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12509,
+ },
+ [0x1250A]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250A,
+ },
+ [0x1250B]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-617 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250B,
+ },
+ [0x1250C]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-636",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250C,
+ },
+ [0x1250D]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250D,
+ },
+ [0x1250E]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES DUB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250E,
+ },
+ [0x1250F]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1250F,
+ },
+ [0x12510]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES IGI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12510,
+ },
+ [0x12511]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES IGI GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12511,
+ },
+ [0x12512]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12512,
+ },
+ [0x12513]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12513,
+ },
+ [0x12514]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12514,
+ },
+ [0x12515]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12515,
+ },
+ [0x12516]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-648 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12516,
+ },
+ [0x12517]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-724",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12517,
+ },
+ [0x12518]={
+ category="lo",
+ description="CUNEIFORM SIGN LAK-749",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12518,
+ },
+ [0x12519]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 GUNU TIMES ASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12519,
+ },
+ [0x1251A]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES DISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251A,
+ },
+ [0x1251B]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES HAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251B,
+ },
+ [0x1251C]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251C,
+ },
+ [0x1251D]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251D,
+ },
+ [0x1251E]={
+ category="lo",
+ description="CUNEIFORM SIGN LU2 TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251E,
+ },
+ [0x1251F]={
+ category="lo",
+ description="CUNEIFORM SIGN MI PLUS ZA7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1251F,
+ },
+ [0x12520]={
+ category="lo",
+ description="CUNEIFORM SIGN MUSH OVER MUSH TIMES GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12520,
+ },
+ [0x12521]={
+ category="lo",
+ description="CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12521,
+ },
+ [0x12522]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES DIM GUNU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12522,
+ },
+ [0x12523]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES GISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12523,
+ },
+ [0x12524]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES GUL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12524,
+ },
+ [0x12525]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES HI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12525,
+ },
+ [0x12526]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES KESH2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12526,
+ },
+ [0x12527]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES LAK-050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12527,
+ },
+ [0x12528]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES MASH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12528,
+ },
+ [0x12529]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12529,
+ },
+ [0x1252A]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252A,
+ },
+ [0x1252B]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES U PLUS U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252B,
+ },
+ [0x1252C]={
+ category="lo",
+ description="CUNEIFORM SIGN NINDA2 TIMES URUDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252C,
+ },
+ [0x1252D]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG GUNU TIMES HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252D,
+ },
+ [0x1252E]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES EN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252E,
+ },
+ [0x1252F]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES SHE AT LEFT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1252F,
+ },
+ [0x12530]={
+ category="lo",
+ description="CUNEIFORM SIGN SAG TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12530,
+ },
+ [0x12531]={
+ category="lo",
+ description="CUNEIFORM SIGN SHA6 TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12531,
+ },
+ [0x12532]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE OVER SHE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12532,
+ },
+ [0x12533]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS HUB2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12533,
+ },
+ [0x12534]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS NAM2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12534,
+ },
+ [0x12535]={
+ category="lo",
+ description="CUNEIFORM SIGN SHE PLUS SAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12535,
+ },
+ [0x12536]={
+ category="lo",
+ description="CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12536,
+ },
+ [0x12537]={
+ category="lo",
+ description="CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12537,
+ },
+ [0x12538]={
+ category="lo",
+ description="CUNEIFORM SIGN SI TIMES TAK4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12538,
+ },
+ [0x12539]={
+ category="lo",
+ description="CUNEIFORM SIGN TAK4 PLUS SAG",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12539,
+ },
+ [0x1253A]={
+ category="lo",
+ description="CUNEIFORM SIGN TUM TIMES GAN2 TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253A,
+ },
+ [0x1253B]={
+ category="lo",
+ description="CUNEIFORM SIGN TUM TIMES THREE DISH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253B,
+ },
+ [0x1253C]={
+ category="lo",
+ description="CUNEIFORM SIGN UR2 INVERTED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253C,
+ },
+ [0x1253D]={
+ category="lo",
+ description="CUNEIFORM SIGN UR2 TIMES UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253D,
+ },
+ [0x1253E]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES DARA3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253E,
+ },
+ [0x1253F]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES LAK-668",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1253F,
+ },
+ [0x12540]={
+ category="lo",
+ description="CUNEIFORM SIGN URU TIMES LU3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12540,
+ },
+ [0x12541]={
+ category="lo",
+ description="CUNEIFORM SIGN ZA7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12541,
+ },
+ [0x12542]={
+ category="lo",
+ description="CUNEIFORM SIGN ZU OVER ZU PLUS SAR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12542,
+ },
+ [0x12543]={
+ category="lo",
+ description="CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x12543,
+ },
[0x13000]={
category="lo",
description="EGYPTIAN HIEROGLYPH A001",
@@ -171779,6 +176142,4087 @@ characters.data={
linebreak="al",
unicodeslot=0x1342E,
},
+ [0x14400]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A001",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14400,
+ },
+ [0x14401]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A002",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14401,
+ },
+ [0x14402]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A003",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14402,
+ },
+ [0x14403]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A004",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14403,
+ },
+ [0x14404]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A005",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14404,
+ },
+ [0x14405]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A006",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14405,
+ },
+ [0x14406]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A007",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14406,
+ },
+ [0x14407]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A008",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14407,
+ },
+ [0x14408]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A009",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14408,
+ },
+ [0x14409]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A010",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14409,
+ },
+ [0x1440A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A010A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440A,
+ },
+ [0x1440B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A011",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440B,
+ },
+ [0x1440C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A012",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440C,
+ },
+ [0x1440D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A013",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440D,
+ },
+ [0x1440E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A014",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440E,
+ },
+ [0x1440F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A015",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1440F,
+ },
+ [0x14410]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A016",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14410,
+ },
+ [0x14411]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A017",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14411,
+ },
+ [0x14412]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A018",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14412,
+ },
+ [0x14413]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A019",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14413,
+ },
+ [0x14414]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A020",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14414,
+ },
+ [0x14415]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A021",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14415,
+ },
+ [0x14416]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A022",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14416,
+ },
+ [0x14417]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A023",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14417,
+ },
+ [0x14418]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A024",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14418,
+ },
+ [0x14419]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A025",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14419,
+ },
+ [0x1441A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A026",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441A,
+ },
+ [0x1441B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A026A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441B,
+ },
+ [0x1441C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A027",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441C,
+ },
+ [0x1441D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A028",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441D,
+ },
+ [0x1441E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A029",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441E,
+ },
+ [0x1441F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A030",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1441F,
+ },
+ [0x14420]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A031",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14420,
+ },
+ [0x14421]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A032",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14421,
+ },
+ [0x14422]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A033",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14422,
+ },
+ [0x14423]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A034",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14423,
+ },
+ [0x14424]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A035",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14424,
+ },
+ [0x14425]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A036",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14425,
+ },
+ [0x14426]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A037",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14426,
+ },
+ [0x14427]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A038",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14427,
+ },
+ [0x14428]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A039",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14428,
+ },
+ [0x14429]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A039A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14429,
+ },
+ [0x1442A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A040",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442A,
+ },
+ [0x1442B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A041",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442B,
+ },
+ [0x1442C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A041A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442C,
+ },
+ [0x1442D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A042",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442D,
+ },
+ [0x1442E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A043",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442E,
+ },
+ [0x1442F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A044",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1442F,
+ },
+ [0x14430]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A045",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14430,
+ },
+ [0x14431]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A045A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14431,
+ },
+ [0x14432]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14432,
+ },
+ [0x14433]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14433,
+ },
+ [0x14434]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A046B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14434,
+ },
+ [0x14435]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A047",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14435,
+ },
+ [0x14436]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A048",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14436,
+ },
+ [0x14437]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A049",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14437,
+ },
+ [0x14438]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A050",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14438,
+ },
+ [0x14439]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A051",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14439,
+ },
+ [0x1443A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A052",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443A,
+ },
+ [0x1443B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A053",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443B,
+ },
+ [0x1443C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A054",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443C,
+ },
+ [0x1443D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A055",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443D,
+ },
+ [0x1443E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A056",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443E,
+ },
+ [0x1443F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A057",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1443F,
+ },
+ [0x14440]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A058",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14440,
+ },
+ [0x14441]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A059",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14441,
+ },
+ [0x14442]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A060",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14442,
+ },
+ [0x14443]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A061",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14443,
+ },
+ [0x14444]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A062",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14444,
+ },
+ [0x14445]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A063",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14445,
+ },
+ [0x14446]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A064",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14446,
+ },
+ [0x14447]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A065",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14447,
+ },
+ [0x14448]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14448,
+ },
+ [0x14449]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14449,
+ },
+ [0x1444A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444A,
+ },
+ [0x1444B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A066C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444B,
+ },
+ [0x1444C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A067",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444C,
+ },
+ [0x1444D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A068",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444D,
+ },
+ [0x1444E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A069",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444E,
+ },
+ [0x1444F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A070",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1444F,
+ },
+ [0x14450]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A071",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14450,
+ },
+ [0x14451]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A072",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14451,
+ },
+ [0x14452]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A073",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14452,
+ },
+ [0x14453]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A074",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14453,
+ },
+ [0x14454]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A075",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14454,
+ },
+ [0x14455]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A076",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14455,
+ },
+ [0x14456]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A077",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14456,
+ },
+ [0x14457]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A078",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14457,
+ },
+ [0x14458]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A079",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14458,
+ },
+ [0x14459]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A080",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14459,
+ },
+ [0x1445A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A081",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445A,
+ },
+ [0x1445B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A082",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445B,
+ },
+ [0x1445C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A083",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445C,
+ },
+ [0x1445D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A084",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445D,
+ },
+ [0x1445E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A085",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445E,
+ },
+ [0x1445F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A086",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1445F,
+ },
+ [0x14460]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A087",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14460,
+ },
+ [0x14461]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A088",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14461,
+ },
+ [0x14462]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A089",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14462,
+ },
+ [0x14463]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A090",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14463,
+ },
+ [0x14464]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A091",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14464,
+ },
+ [0x14465]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A092",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14465,
+ },
+ [0x14466]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A093",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14466,
+ },
+ [0x14467]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A094",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14467,
+ },
+ [0x14468]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A095",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14468,
+ },
+ [0x14469]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A096",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14469,
+ },
+ [0x1446A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A097",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446A,
+ },
+ [0x1446B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A097A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446B,
+ },
+ [0x1446C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A098",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446C,
+ },
+ [0x1446D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A098A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446D,
+ },
+ [0x1446E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A099",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446E,
+ },
+ [0x1446F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A100",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1446F,
+ },
+ [0x14470]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A100A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14470,
+ },
+ [0x14471]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A101",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14471,
+ },
+ [0x14472]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A101A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14472,
+ },
+ [0x14473]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A102",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14473,
+ },
+ [0x14474]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A102A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14474,
+ },
+ [0x14475]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A103",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14475,
+ },
+ [0x14476]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14476,
+ },
+ [0x14477]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14477,
+ },
+ [0x14478]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14478,
+ },
+ [0x14479]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A104C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14479,
+ },
+ [0x1447A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447A,
+ },
+ [0x1447B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447B,
+ },
+ [0x1447C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A105B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447C,
+ },
+ [0x1447D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A106",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447D,
+ },
+ [0x1447E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447E,
+ },
+ [0x1447F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1447F,
+ },
+ [0x14480]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14480,
+ },
+ [0x14481]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A107C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14481,
+ },
+ [0x14482]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A108",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14482,
+ },
+ [0x14483]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A109",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14483,
+ },
+ [0x14484]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14484,
+ },
+ [0x14485]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14485,
+ },
+ [0x14486]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A110B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14486,
+ },
+ [0x14487]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A111",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14487,
+ },
+ [0x14488]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A112",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14488,
+ },
+ [0x14489]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A113",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14489,
+ },
+ [0x1448A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A114",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448A,
+ },
+ [0x1448B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A115",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448B,
+ },
+ [0x1448C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A115A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448C,
+ },
+ [0x1448D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A116",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448D,
+ },
+ [0x1448E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A117",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448E,
+ },
+ [0x1448F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A118",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1448F,
+ },
+ [0x14490]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A119",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14490,
+ },
+ [0x14491]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A120",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14491,
+ },
+ [0x14492]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A121",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14492,
+ },
+ [0x14493]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A122",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14493,
+ },
+ [0x14494]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A123",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14494,
+ },
+ [0x14495]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A124",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14495,
+ },
+ [0x14496]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A125",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14496,
+ },
+ [0x14497]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A125A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14497,
+ },
+ [0x14498]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A126",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14498,
+ },
+ [0x14499]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A127",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14499,
+ },
+ [0x1449A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A128",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449A,
+ },
+ [0x1449B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A129",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449B,
+ },
+ [0x1449C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A130",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449C,
+ },
+ [0x1449D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A131",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449D,
+ },
+ [0x1449E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A132",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449E,
+ },
+ [0x1449F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A133",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1449F,
+ },
+ [0x144A0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A134",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A0,
+ },
+ [0x144A1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A135",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A1,
+ },
+ [0x144A2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A135A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A2,
+ },
+ [0x144A3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A136",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A3,
+ },
+ [0x144A4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A137",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A4,
+ },
+ [0x144A5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A138",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A5,
+ },
+ [0x144A6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A139",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A6,
+ },
+ [0x144A7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A140",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A7,
+ },
+ [0x144A8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A141",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A8,
+ },
+ [0x144A9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A142",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144A9,
+ },
+ [0x144AA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A143",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AA,
+ },
+ [0x144AB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A144",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AB,
+ },
+ [0x144AC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A145",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AC,
+ },
+ [0x144AD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A146",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AD,
+ },
+ [0x144AE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A147",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AE,
+ },
+ [0x144AF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A148",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144AF,
+ },
+ [0x144B0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A149",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B0,
+ },
+ [0x144B1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A150",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B1,
+ },
+ [0x144B2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A151",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B2,
+ },
+ [0x144B3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A152",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B3,
+ },
+ [0x144B4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A153",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B4,
+ },
+ [0x144B5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A154",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B5,
+ },
+ [0x144B6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A155",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B6,
+ },
+ [0x144B7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A156",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B7,
+ },
+ [0x144B8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A157",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B8,
+ },
+ [0x144B9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A158",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144B9,
+ },
+ [0x144BA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A159",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BA,
+ },
+ [0x144BB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A160",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BB,
+ },
+ [0x144BC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A161",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BC,
+ },
+ [0x144BD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A162",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BD,
+ },
+ [0x144BE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A163",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BE,
+ },
+ [0x144BF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A164",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144BF,
+ },
+ [0x144C0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A165",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C0,
+ },
+ [0x144C1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A166",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C1,
+ },
+ [0x144C2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A167",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C2,
+ },
+ [0x144C3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A168",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C3,
+ },
+ [0x144C4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A169",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C4,
+ },
+ [0x144C5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A170",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C5,
+ },
+ [0x144C6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A171",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C6,
+ },
+ [0x144C7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A172",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C7,
+ },
+ [0x144C8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A173",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C8,
+ },
+ [0x144C9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A174",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144C9,
+ },
+ [0x144CA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A175",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CA,
+ },
+ [0x144CB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A176",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CB,
+ },
+ [0x144CC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A177",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CC,
+ },
+ [0x144CD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A178",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CD,
+ },
+ [0x144CE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A179",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CE,
+ },
+ [0x144CF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A180",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144CF,
+ },
+ [0x144D0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A181",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D0,
+ },
+ [0x144D1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A182",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D1,
+ },
+ [0x144D2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A183",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D2,
+ },
+ [0x144D3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A184",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D3,
+ },
+ [0x144D4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A185",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D4,
+ },
+ [0x144D5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A186",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D5,
+ },
+ [0x144D6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A187",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D6,
+ },
+ [0x144D7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A188",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D7,
+ },
+ [0x144D8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A189",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D8,
+ },
+ [0x144D9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A190",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144D9,
+ },
+ [0x144DA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A191",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DA,
+ },
+ [0x144DB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A192",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DB,
+ },
+ [0x144DC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A193",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DC,
+ },
+ [0x144DD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A194",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DD,
+ },
+ [0x144DE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A195",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DE,
+ },
+ [0x144DF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A196",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144DF,
+ },
+ [0x144E0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A197",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E0,
+ },
+ [0x144E1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A198",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E1,
+ },
+ [0x144E2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A199",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E2,
+ },
+ [0x144E3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A200",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E3,
+ },
+ [0x144E4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A201",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E4,
+ },
+ [0x144E5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E5,
+ },
+ [0x144E6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E6,
+ },
+ [0x144E7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A202B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E7,
+ },
+ [0x144E8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A203",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E8,
+ },
+ [0x144E9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A204",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144E9,
+ },
+ [0x144EA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A205",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EA,
+ },
+ [0x144EB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A206",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EB,
+ },
+ [0x144EC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A207",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EC,
+ },
+ [0x144ED]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A207A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144ED,
+ },
+ [0x144EE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A208",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EE,
+ },
+ [0x144EF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A209",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144EF,
+ },
+ [0x144F0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A209A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F0,
+ },
+ [0x144F1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A210",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F1,
+ },
+ [0x144F2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A211",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F2,
+ },
+ [0x144F3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A212",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F3,
+ },
+ [0x144F4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A213",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F4,
+ },
+ [0x144F5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A214",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F5,
+ },
+ [0x144F6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A215",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F6,
+ },
+ [0x144F7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A215A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F7,
+ },
+ [0x144F8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A216",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F8,
+ },
+ [0x144F9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A216A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144F9,
+ },
+ [0x144FA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A217",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FA,
+ },
+ [0x144FB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A218",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FB,
+ },
+ [0x144FC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A219",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FC,
+ },
+ [0x144FD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A220",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FD,
+ },
+ [0x144FE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A221",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FE,
+ },
+ [0x144FF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A222",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x144FF,
+ },
+ [0x14500]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A223",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14500,
+ },
+ [0x14501]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A224",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14501,
+ },
+ [0x14502]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A225",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14502,
+ },
+ [0x14503]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A226",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14503,
+ },
+ [0x14504]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A227",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14504,
+ },
+ [0x14505]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A227A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14505,
+ },
+ [0x14506]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A228",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14506,
+ },
+ [0x14507]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A229",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14507,
+ },
+ [0x14508]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A230",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14508,
+ },
+ [0x14509]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A231",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14509,
+ },
+ [0x1450A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A232",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450A,
+ },
+ [0x1450B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A233",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450B,
+ },
+ [0x1450C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A234",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450C,
+ },
+ [0x1450D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A235",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450D,
+ },
+ [0x1450E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A236",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450E,
+ },
+ [0x1450F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A237",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1450F,
+ },
+ [0x14510]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A238",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14510,
+ },
+ [0x14511]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A239",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14511,
+ },
+ [0x14512]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A240",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14512,
+ },
+ [0x14513]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A241",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14513,
+ },
+ [0x14514]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A242",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14514,
+ },
+ [0x14515]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A243",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14515,
+ },
+ [0x14516]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A244",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14516,
+ },
+ [0x14517]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A245",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14517,
+ },
+ [0x14518]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A246",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14518,
+ },
+ [0x14519]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A247",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14519,
+ },
+ [0x1451A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A248",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451A,
+ },
+ [0x1451B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A249",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451B,
+ },
+ [0x1451C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A250",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451C,
+ },
+ [0x1451D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A251",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451D,
+ },
+ [0x1451E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A252",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451E,
+ },
+ [0x1451F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A253",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1451F,
+ },
+ [0x14520]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A254",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14520,
+ },
+ [0x14521]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A255",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14521,
+ },
+ [0x14522]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A256",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14522,
+ },
+ [0x14523]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A257",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14523,
+ },
+ [0x14524]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A258",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14524,
+ },
+ [0x14525]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A259",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14525,
+ },
+ [0x14526]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A260",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14526,
+ },
+ [0x14527]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A261",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14527,
+ },
+ [0x14528]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A262",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14528,
+ },
+ [0x14529]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A263",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14529,
+ },
+ [0x1452A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A264",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452A,
+ },
+ [0x1452B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A265",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452B,
+ },
+ [0x1452C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A266",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452C,
+ },
+ [0x1452D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A267",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452D,
+ },
+ [0x1452E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A267A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452E,
+ },
+ [0x1452F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A268",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1452F,
+ },
+ [0x14530]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A269",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14530,
+ },
+ [0x14531]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A270",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14531,
+ },
+ [0x14532]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A271",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14532,
+ },
+ [0x14533]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A272",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14533,
+ },
+ [0x14534]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A273",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14534,
+ },
+ [0x14535]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A274",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14535,
+ },
+ [0x14536]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A275",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14536,
+ },
+ [0x14537]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A276",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14537,
+ },
+ [0x14538]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A277",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14538,
+ },
+ [0x14539]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A278",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14539,
+ },
+ [0x1453A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A279",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453A,
+ },
+ [0x1453B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A280",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453B,
+ },
+ [0x1453C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A281",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453C,
+ },
+ [0x1453D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A282",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453D,
+ },
+ [0x1453E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A283",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453E,
+ },
+ [0x1453F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A284",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1453F,
+ },
+ [0x14540]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A285",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14540,
+ },
+ [0x14541]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A286",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14541,
+ },
+ [0x14542]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A287",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14542,
+ },
+ [0x14543]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A288",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14543,
+ },
+ [0x14544]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A289",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14544,
+ },
+ [0x14545]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A289A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14545,
+ },
+ [0x14546]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A290",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14546,
+ },
+ [0x14547]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A291",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14547,
+ },
+ [0x14548]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A292",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14548,
+ },
+ [0x14549]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A293",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14549,
+ },
+ [0x1454A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A294",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454A,
+ },
+ [0x1454B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A294A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454B,
+ },
+ [0x1454C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A295",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454C,
+ },
+ [0x1454D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A296",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454D,
+ },
+ [0x1454E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A297",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454E,
+ },
+ [0x1454F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A298",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1454F,
+ },
+ [0x14550]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A299",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14550,
+ },
+ [0x14551]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A299A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14551,
+ },
+ [0x14552]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A300",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14552,
+ },
+ [0x14553]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A301",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14553,
+ },
+ [0x14554]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A302",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14554,
+ },
+ [0x14555]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A303",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14555,
+ },
+ [0x14556]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A304",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14556,
+ },
+ [0x14557]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A305",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14557,
+ },
+ [0x14558]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A306",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14558,
+ },
+ [0x14559]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A307",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14559,
+ },
+ [0x1455A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A308",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455A,
+ },
+ [0x1455B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A309",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455B,
+ },
+ [0x1455C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A309A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455C,
+ },
+ [0x1455D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A310",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455D,
+ },
+ [0x1455E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A311",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455E,
+ },
+ [0x1455F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A312",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1455F,
+ },
+ [0x14560]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A313",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14560,
+ },
+ [0x14561]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A314",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14561,
+ },
+ [0x14562]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A315",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14562,
+ },
+ [0x14563]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A316",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14563,
+ },
+ [0x14564]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A317",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14564,
+ },
+ [0x14565]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A318",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14565,
+ },
+ [0x14566]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A319",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14566,
+ },
+ [0x14567]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A320",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14567,
+ },
+ [0x14568]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A321",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14568,
+ },
+ [0x14569]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A322",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14569,
+ },
+ [0x1456A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A323",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456A,
+ },
+ [0x1456B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A324",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456B,
+ },
+ [0x1456C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A325",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456C,
+ },
+ [0x1456D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A326",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456D,
+ },
+ [0x1456E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A327",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456E,
+ },
+ [0x1456F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A328",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1456F,
+ },
+ [0x14570]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A329",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14570,
+ },
+ [0x14571]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A329A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14571,
+ },
+ [0x14572]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A330",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14572,
+ },
+ [0x14573]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A331",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14573,
+ },
+ [0x14574]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14574,
+ },
+ [0x14575]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14575,
+ },
+ [0x14576]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A332C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14576,
+ },
+ [0x14577]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A333",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14577,
+ },
+ [0x14578]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A334",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14578,
+ },
+ [0x14579]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A335",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14579,
+ },
+ [0x1457A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457A,
+ },
+ [0x1457B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457B,
+ },
+ [0x1457C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336B",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457C,
+ },
+ [0x1457D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A336C",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457D,
+ },
+ [0x1457E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A337",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457E,
+ },
+ [0x1457F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A338",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1457F,
+ },
+ [0x14580]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A339",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14580,
+ },
+ [0x14581]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A340",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14581,
+ },
+ [0x14582]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A341",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14582,
+ },
+ [0x14583]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A342",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14583,
+ },
+ [0x14584]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A343",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14584,
+ },
+ [0x14585]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A344",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14585,
+ },
+ [0x14586]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A345",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14586,
+ },
+ [0x14587]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A346",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14587,
+ },
+ [0x14588]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A347",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14588,
+ },
+ [0x14589]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A348",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14589,
+ },
+ [0x1458A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A349",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458A,
+ },
+ [0x1458B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A350",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458B,
+ },
+ [0x1458C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A351",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458C,
+ },
+ [0x1458D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A352",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458D,
+ },
+ [0x1458E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A353",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458E,
+ },
+ [0x1458F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A354",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1458F,
+ },
+ [0x14590]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A355",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14590,
+ },
+ [0x14591]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A356",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14591,
+ },
+ [0x14592]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A357",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14592,
+ },
+ [0x14593]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A358",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14593,
+ },
+ [0x14594]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A359",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14594,
+ },
+ [0x14595]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A359A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14595,
+ },
+ [0x14596]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A360",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14596,
+ },
+ [0x14597]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A361",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14597,
+ },
+ [0x14598]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A362",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14598,
+ },
+ [0x14599]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A363",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14599,
+ },
+ [0x1459A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A364",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459A,
+ },
+ [0x1459B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A364A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459B,
+ },
+ [0x1459C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A365",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459C,
+ },
+ [0x1459D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A366",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459D,
+ },
+ [0x1459E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A367",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459E,
+ },
+ [0x1459F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A368",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1459F,
+ },
+ [0x145A0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A368A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A0,
+ },
+ [0x145A1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A369",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A1,
+ },
+ [0x145A2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A370",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A2,
+ },
+ [0x145A3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A371",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A3,
+ },
+ [0x145A4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A371A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A4,
+ },
+ [0x145A5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A372",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A5,
+ },
+ [0x145A6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A373",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A6,
+ },
+ [0x145A7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A374",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A7,
+ },
+ [0x145A8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A375",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A8,
+ },
+ [0x145A9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A376",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145A9,
+ },
+ [0x145AA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A377",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AA,
+ },
+ [0x145AB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A378",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AB,
+ },
+ [0x145AC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A379",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AC,
+ },
+ [0x145AD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A380",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AD,
+ },
+ [0x145AE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A381",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AE,
+ },
+ [0x145AF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A381A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145AF,
+ },
+ [0x145B0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A382",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B0,
+ },
+ [0x145B1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A383 RA OR RI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B1,
+ },
+ [0x145B2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A383A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B2,
+ },
+ [0x145B3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A384",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B3,
+ },
+ [0x145B4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A385",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B4,
+ },
+ [0x145B5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A386",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B5,
+ },
+ [0x145B6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A386A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B6,
+ },
+ [0x145B7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A387",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B7,
+ },
+ [0x145B8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A388",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B8,
+ },
+ [0x145B9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A389",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145B9,
+ },
+ [0x145BA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A390",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BA,
+ },
+ [0x145BB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A391",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BB,
+ },
+ [0x145BC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A392",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BC,
+ },
+ [0x145BD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A393 EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BD,
+ },
+ [0x145BE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A394",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BE,
+ },
+ [0x145BF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A395",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145BF,
+ },
+ [0x145C0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A396",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C0,
+ },
+ [0x145C1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A397",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C1,
+ },
+ [0x145C2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A398",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C2,
+ },
+ [0x145C3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A399",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C3,
+ },
+ [0x145C4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A400",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C4,
+ },
+ [0x145C5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A401",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C5,
+ },
+ [0x145C6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A402",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C6,
+ },
+ [0x145C7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A403",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C7,
+ },
+ [0x145C8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A404",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C8,
+ },
+ [0x145C9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A405",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145C9,
+ },
+ [0x145CA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A406",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CA,
+ },
+ [0x145CB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A407",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CB,
+ },
+ [0x145CC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A408",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CC,
+ },
+ [0x145CD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A409",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145CD,
+ },
+ [0x145CE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK",
+ direction="l",
+ linebreak="op",
+ unicodeslot=0x145CE,
+ },
+ [0x145CF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK",
+ direction="l",
+ linebreak="cl",
+ unicodeslot=0x145CF,
+ },
+ [0x145D0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A411",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D0,
+ },
+ [0x145D1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A412",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D1,
+ },
+ [0x145D2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A413",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D2,
+ },
+ [0x145D3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A414",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D3,
+ },
+ [0x145D4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A415",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D4,
+ },
+ [0x145D5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A416",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D5,
+ },
+ [0x145D6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A417",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D6,
+ },
+ [0x145D7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A418",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D7,
+ },
+ [0x145D8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A419",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D8,
+ },
+ [0x145D9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A420",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145D9,
+ },
+ [0x145DA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A421",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DA,
+ },
+ [0x145DB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A422",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DB,
+ },
+ [0x145DC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A423",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DC,
+ },
+ [0x145DD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A424",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DD,
+ },
+ [0x145DE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A425",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DE,
+ },
+ [0x145DF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A426",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145DF,
+ },
+ [0x145E0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A427",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E0,
+ },
+ [0x145E1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A428",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E1,
+ },
+ [0x145E2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A429",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E2,
+ },
+ [0x145E3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A430",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E3,
+ },
+ [0x145E4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A431",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E4,
+ },
+ [0x145E5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A432",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E5,
+ },
+ [0x145E6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A433",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E6,
+ },
+ [0x145E7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A434",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E7,
+ },
+ [0x145E8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A435",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E8,
+ },
+ [0x145E9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A436",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145E9,
+ },
+ [0x145EA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A437",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EA,
+ },
+ [0x145EB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A438",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EB,
+ },
+ [0x145EC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A439",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EC,
+ },
+ [0x145ED]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A440",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145ED,
+ },
+ [0x145EE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A441",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EE,
+ },
+ [0x145EF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A442",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145EF,
+ },
+ [0x145F0]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A443",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F0,
+ },
+ [0x145F1]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A444",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F1,
+ },
+ [0x145F2]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A445",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F2,
+ },
+ [0x145F3]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A446",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F3,
+ },
+ [0x145F4]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A447",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F4,
+ },
+ [0x145F5]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A448",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F5,
+ },
+ [0x145F6]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A449",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F6,
+ },
+ [0x145F7]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A450",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F7,
+ },
+ [0x145F8]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A450A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F8,
+ },
+ [0x145F9]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A451",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145F9,
+ },
+ [0x145FA]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A452",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FA,
+ },
+ [0x145FB]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A453",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FB,
+ },
+ [0x145FC]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A454",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FC,
+ },
+ [0x145FD]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A455",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FD,
+ },
+ [0x145FE]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A456",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FE,
+ },
+ [0x145FF]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A457",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x145FF,
+ },
+ [0x14600]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A457A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14600,
+ },
+ [0x14601]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A458",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14601,
+ },
+ [0x14602]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A459",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14602,
+ },
+ [0x14603]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A460",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14603,
+ },
+ [0x14604]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A461",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14604,
+ },
+ [0x14605]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A462",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14605,
+ },
+ [0x14606]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A463",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14606,
+ },
+ [0x14607]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A464",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14607,
+ },
+ [0x14608]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A465",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14608,
+ },
+ [0x14609]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A466",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14609,
+ },
+ [0x1460A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A467",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460A,
+ },
+ [0x1460B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A468",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460B,
+ },
+ [0x1460C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A469",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460C,
+ },
+ [0x1460D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A470",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460D,
+ },
+ [0x1460E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A471",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460E,
+ },
+ [0x1460F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A472",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1460F,
+ },
+ [0x14610]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A473",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14610,
+ },
+ [0x14611]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A474",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14611,
+ },
+ [0x14612]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A475",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14612,
+ },
+ [0x14613]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A476",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14613,
+ },
+ [0x14614]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A477",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14614,
+ },
+ [0x14615]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A478",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14615,
+ },
+ [0x14616]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A479",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14616,
+ },
+ [0x14617]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A480",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14617,
+ },
+ [0x14618]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A481",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14618,
+ },
+ [0x14619]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A482",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14619,
+ },
+ [0x1461A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A483",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461A,
+ },
+ [0x1461B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A484",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461B,
+ },
+ [0x1461C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A485",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461C,
+ },
+ [0x1461D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A486",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461D,
+ },
+ [0x1461E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A487",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461E,
+ },
+ [0x1461F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A488",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1461F,
+ },
+ [0x14620]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A489",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14620,
+ },
+ [0x14621]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A490",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14621,
+ },
+ [0x14622]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A491",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14622,
+ },
+ [0x14623]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A492",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14623,
+ },
+ [0x14624]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A493",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14624,
+ },
+ [0x14625]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A494",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14625,
+ },
+ [0x14626]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A495",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14626,
+ },
+ [0x14627]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A496",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14627,
+ },
+ [0x14628]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A497",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14628,
+ },
+ [0x14629]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A501",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14629,
+ },
+ [0x1462A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A502",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462A,
+ },
+ [0x1462B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A503",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462B,
+ },
+ [0x1462C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A504",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462C,
+ },
+ [0x1462D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A505",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462D,
+ },
+ [0x1462E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A506",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462E,
+ },
+ [0x1462F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A507",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1462F,
+ },
+ [0x14630]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A508",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14630,
+ },
+ [0x14631]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A509",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14631,
+ },
+ [0x14632]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A510",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14632,
+ },
+ [0x14633]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A511",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14633,
+ },
+ [0x14634]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A512",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14634,
+ },
+ [0x14635]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A513",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14635,
+ },
+ [0x14636]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A514",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14636,
+ },
+ [0x14637]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A515",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14637,
+ },
+ [0x14638]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A516",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14638,
+ },
+ [0x14639]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A517",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14639,
+ },
+ [0x1463A]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A518",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463A,
+ },
+ [0x1463B]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A519",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463B,
+ },
+ [0x1463C]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A520",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463C,
+ },
+ [0x1463D]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A521",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463D,
+ },
+ [0x1463E]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A522",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463E,
+ },
+ [0x1463F]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A523",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1463F,
+ },
+ [0x14640]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A524",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14640,
+ },
+ [0x14641]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A525",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14641,
+ },
+ [0x14642]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A526",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14642,
+ },
+ [0x14643]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A527",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14643,
+ },
+ [0x14644]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A528",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14644,
+ },
+ [0x14645]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A529",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14645,
+ },
+ [0x14646]={
+ category="lo",
+ description="ANATOLIAN HIEROGLYPH A530",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x14646,
+ },
[0x16800]={
category="lo",
description="BAMUM LETTER PHASE-A NGKUE MFON",
@@ -182498,6 +190942,83 @@ characters.data={
linebreak="al",
unicodeslot=0x1D1DD,
},
+ [0x1D1DE]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN C CLEF",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1DE,
+ },
+ [0x1D1DF]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN END OF PIECE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1DF,
+ },
+ [0x1D1E0]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN FINAL NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E0,
+ },
+ [0x1D1E1]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN RECITATIVE MARK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E1,
+ },
+ [0x1D1E2]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN WHOLE NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E2,
+ },
+ [0x1D1E3]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN HALF NOTE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E3,
+ },
+ [0x1D1E4]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E4,
+ },
+ [0x1D1E5]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E5,
+ },
+ [0x1D1E6]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E6,
+ },
+ [0x1D1E7]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E7,
+ },
+ [0x1D1E8]={
+ category="so",
+ description="MUSICAL SYMBOL KIEVAN FLAT SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D1E8,
+ },
[0x1D200]={
category="so",
description="GREEK VOCAL NOTATION SYMBOL-0x0001",
@@ -192434,6 +200955,4710 @@ characters.data={
specials={ "font", 0x39 },
unicodeslot=0x1D7FF,
},
+ [0x1D800]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D800,
+ },
+ [0x1D801]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D801,
+ },
+ [0x1D802]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D802,
+ },
+ [0x1D803]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D803,
+ },
+ [0x1D804]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D804,
+ },
+ [0x1D805]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D805,
+ },
+ [0x1D806]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D806,
+ },
+ [0x1D807]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D807,
+ },
+ [0x1D808]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D808,
+ },
+ [0x1D809]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D809,
+ },
+ [0x1D80A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80A,
+ },
+ [0x1D80B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80B,
+ },
+ [0x1D80C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED LOW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80C,
+ },
+ [0x1D80D]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80D,
+ },
+ [0x1D80E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80E,
+ },
+ [0x1D80F]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D80F,
+ },
+ [0x1D810]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D810,
+ },
+ [0x1D811]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D811,
+ },
+ [0x1D812]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D812,
+ },
+ [0x1D813]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D813,
+ },
+ [0x1D814]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D814,
+ },
+ [0x1D815]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D815,
+ },
+ [0x1D816]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D816,
+ },
+ [0x1D817]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D817,
+ },
+ [0x1D818]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D818,
+ },
+ [0x1D819]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D819,
+ },
+ [0x1D81A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81A,
+ },
+ [0x1D81B]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81B,
+ },
+ [0x1D81C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81C,
+ },
+ [0x1D81D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81D,
+ },
+ [0x1D81E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81E,
+ },
+ [0x1D81F]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D81F,
+ },
+ [0x1D820]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D820,
+ },
+ [0x1D821]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D821,
+ },
+ [0x1D822]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D822,
+ },
+ [0x1D823]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D823,
+ },
+ [0x1D824]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D824,
+ },
+ [0x1D825]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D825,
+ },
+ [0x1D826]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D826,
+ },
+ [0x1D827]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D827,
+ },
+ [0x1D828]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D828,
+ },
+ [0x1D829]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D829,
+ },
+ [0x1D82A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82A,
+ },
+ [0x1D82B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82B,
+ },
+ [0x1D82C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82C,
+ },
+ [0x1D82D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82D,
+ },
+ [0x1D82E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82E,
+ },
+ [0x1D82F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D82F,
+ },
+ [0x1D830]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D830,
+ },
+ [0x1D831]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D831,
+ },
+ [0x1D832]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D832,
+ },
+ [0x1D833]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D833,
+ },
+ [0x1D834]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D834,
+ },
+ [0x1D835]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D835,
+ },
+ [0x1D836]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D836,
+ },
+ [0x1D837]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D837,
+ },
+ [0x1D838]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D838,
+ },
+ [0x1D839]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D839,
+ },
+ [0x1D83A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83A,
+ },
+ [0x1D83B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83B,
+ },
+ [0x1D83C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83C,
+ },
+ [0x1D83D]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83D,
+ },
+ [0x1D83E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83E,
+ },
+ [0x1D83F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D83F,
+ },
+ [0x1D840]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D840,
+ },
+ [0x1D841]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D841,
+ },
+ [0x1D842]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D842,
+ },
+ [0x1D843]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D843,
+ },
+ [0x1D844]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D844,
+ },
+ [0x1D845]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D845,
+ },
+ [0x1D846]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D846,
+ },
+ [0x1D847]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D847,
+ },
+ [0x1D848]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D848,
+ },
+ [0x1D849]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D849,
+ },
+ [0x1D84A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84A,
+ },
+ [0x1D84B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84B,
+ },
+ [0x1D84C]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84C,
+ },
+ [0x1D84D]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84D,
+ },
+ [0x1D84E]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84E,
+ },
+ [0x1D84F]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D84F,
+ },
+ [0x1D850]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D850,
+ },
+ [0x1D851]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D851,
+ },
+ [0x1D852]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D852,
+ },
+ [0x1D853]={
+ category="so",
+ description="SIGNWRITING HAND-CUP FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D853,
+ },
+ [0x1D854]={
+ category="so",
+ description="SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D854,
+ },
+ [0x1D855]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D855,
+ },
+ [0x1D856]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D856,
+ },
+ [0x1D857]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D857,
+ },
+ [0x1D858]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D858,
+ },
+ [0x1D859]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D859,
+ },
+ [0x1D85A]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85A,
+ },
+ [0x1D85B]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85B,
+ },
+ [0x1D85C]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85C,
+ },
+ [0x1D85D]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85D,
+ },
+ [0x1D85E]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT HEEL THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85E,
+ },
+ [0x1D85F]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D85F,
+ },
+ [0x1D860]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D860,
+ },
+ [0x1D861]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D861,
+ },
+ [0x1D862]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D862,
+ },
+ [0x1D863]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D863,
+ },
+ [0x1D864]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D864,
+ },
+ [0x1D865]={
+ category="so",
+ description="SIGNWRITING HAND-FLAT SPLIT LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D865,
+ },
+ [0x1D866]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D866,
+ },
+ [0x1D867]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D867,
+ },
+ [0x1D868]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D868,
+ },
+ [0x1D869]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D869,
+ },
+ [0x1D86A]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86A,
+ },
+ [0x1D86B]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86B,
+ },
+ [0x1D86C]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86C,
+ },
+ [0x1D86D]={
+ category="so",
+ description="SIGNWRITING HAND-CUP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86D,
+ },
+ [0x1D86E]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86E,
+ },
+ [0x1D86F]={
+ category="so",
+ description="SIGNWRITING HAND-CUP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D86F,
+ },
+ [0x1D870]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D870,
+ },
+ [0x1D871]={
+ category="so",
+ description="SIGNWRITING HAND-CUP NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D871,
+ },
+ [0x1D872]={
+ category="so",
+ description="SIGNWRITING HAND-CUP OPEN THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D872,
+ },
+ [0x1D873]={
+ category="so",
+ description="SIGNWRITING HAND-CUP THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D873,
+ },
+ [0x1D874]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D874,
+ },
+ [0x1D875]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D875,
+ },
+ [0x1D876]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D876,
+ },
+ [0x1D877]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D877,
+ },
+ [0x1D878]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D878,
+ },
+ [0x1D879]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D879,
+ },
+ [0x1D87A]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87A,
+ },
+ [0x1D87B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87B,
+ },
+ [0x1D87C]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87C,
+ },
+ [0x1D87D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87D,
+ },
+ [0x1D87E]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87E,
+ },
+ [0x1D87F]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D87F,
+ },
+ [0x1D880]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D880,
+ },
+ [0x1D881]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE OPEN NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D881,
+ },
+ [0x1D882]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE NO THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D882,
+ },
+ [0x1D883]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D883,
+ },
+ [0x1D884]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D884,
+ },
+ [0x1D885]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D885,
+ },
+ [0x1D886]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D886,
+ },
+ [0x1D887]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D887,
+ },
+ [0x1D888]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D888,
+ },
+ [0x1D889]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D889,
+ },
+ [0x1D88A]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88A,
+ },
+ [0x1D88B]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88B,
+ },
+ [0x1D88C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88C,
+ },
+ [0x1D88D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88D,
+ },
+ [0x1D88E]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88E,
+ },
+ [0x1D88F]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D88F,
+ },
+ [0x1D890]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D890,
+ },
+ [0x1D891]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D891,
+ },
+ [0x1D892]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D892,
+ },
+ [0x1D893]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D893,
+ },
+ [0x1D894]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D894,
+ },
+ [0x1D895]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D895,
+ },
+ [0x1D896]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D896,
+ },
+ [0x1D897]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D897,
+ },
+ [0x1D898]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D898,
+ },
+ [0x1D899]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D899,
+ },
+ [0x1D89A]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89A,
+ },
+ [0x1D89B]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89B,
+ },
+ [0x1D89C]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89C,
+ },
+ [0x1D89D]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89D,
+ },
+ [0x1D89E]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89E,
+ },
+ [0x1D89F]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D89F,
+ },
+ [0x1D8A0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A0,
+ },
+ [0x1D8A1]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A1,
+ },
+ [0x1D8A2]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A2,
+ },
+ [0x1D8A3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE LITTLE INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A3,
+ },
+ [0x1D8A4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A4,
+ },
+ [0x1D8A5]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A5,
+ },
+ [0x1D8A6]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A6,
+ },
+ [0x1D8A7]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A7,
+ },
+ [0x1D8A8]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A8,
+ },
+ [0x1D8A9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8A9,
+ },
+ [0x1D8AA]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AA,
+ },
+ [0x1D8AB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AB,
+ },
+ [0x1D8AC]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AC,
+ },
+ [0x1D8AD]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AD,
+ },
+ [0x1D8AE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AE,
+ },
+ [0x1D8AF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8AF,
+ },
+ [0x1D8B0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B0,
+ },
+ [0x1D8B1]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B1,
+ },
+ [0x1D8B2]={
+ category="so",
+ description="SIGNWRITING HAND-OVAL RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B2,
+ },
+ [0x1D8B3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B3,
+ },
+ [0x1D8B4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B4,
+ },
+ [0x1D8B5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B5,
+ },
+ [0x1D8B6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B6,
+ },
+ [0x1D8B7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING INDEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B7,
+ },
+ [0x1D8B8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST RING THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B8,
+ },
+ [0x1D8B9]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK RING THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8B9,
+ },
+ [0x1D8BA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BA,
+ },
+ [0x1D8BB]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BB,
+ },
+ [0x1D8BC]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BC,
+ },
+ [0x1D8BD]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BD,
+ },
+ [0x1D8BE]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BE,
+ },
+ [0x1D8BF]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8BF,
+ },
+ [0x1D8C0]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C0,
+ },
+ [0x1D8C1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C1,
+ },
+ [0x1D8C2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C2,
+ },
+ [0x1D8C3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C3,
+ },
+ [0x1D8C4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE DOWN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C4,
+ },
+ [0x1D8C5]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C5,
+ },
+ [0x1D8C6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C6,
+ },
+ [0x1D8C7]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE UP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C7,
+ },
+ [0x1D8C8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C8,
+ },
+ [0x1D8C9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8C9,
+ },
+ [0x1D8CA]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CA,
+ },
+ [0x1D8CB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CB,
+ },
+ [0x1D8CC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CC,
+ },
+ [0x1D8CD]={
+ category="so",
+ description="SIGNWRITING HAND-FIST MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CD,
+ },
+ [0x1D8CE]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CE,
+ },
+ [0x1D8CF]={
+ category="so",
+ description="SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8CF,
+ },
+ [0x1D8D0]={
+ category="so",
+ description="SIGNWRITING HAND-CUP MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D0,
+ },
+ [0x1D8D1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D1,
+ },
+ [0x1D8D2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D2,
+ },
+ [0x1D8D3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D3,
+ },
+ [0x1D8D4]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D4,
+ },
+ [0x1D8D5]={
+ category="so",
+ description="SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D5,
+ },
+ [0x1D8D6]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D6,
+ },
+ [0x1D8D7]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D7,
+ },
+ [0x1D8D8]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D8,
+ },
+ [0x1D8D9]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8D9,
+ },
+ [0x1D8DA]={
+ category="so",
+ description="SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DA,
+ },
+ [0x1D8DB]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX HINGED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DB,
+ },
+ [0x1D8DC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DC,
+ },
+ [0x1D8DD]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB SIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DD,
+ },
+ [0x1D8DE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DE,
+ },
+ [0x1D8DF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8DF,
+ },
+ [0x1D8E0]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E0,
+ },
+ [0x1D8E1]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E1,
+ },
+ [0x1D8E2]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E2,
+ },
+ [0x1D8E3]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E3,
+ },
+ [0x1D8E4]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E4,
+ },
+ [0x1D8E5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E5,
+ },
+ [0x1D8E6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E6,
+ },
+ [0x1D8E7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURLICUE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E7,
+ },
+ [0x1D8E8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E8,
+ },
+ [0x1D8E9]={
+ category="so",
+ description="SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8E9,
+ },
+ [0x1D8EA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EA,
+ },
+ [0x1D8EB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST INDEX THUMB CIRCLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EB,
+ },
+ [0x1D8EC]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EC,
+ },
+ [0x1D8ED]={
+ category="so",
+ description="SIGNWRITING HAND-CUP INDEX THUMB OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8ED,
+ },
+ [0x1D8EE]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB OPEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EE,
+ },
+ [0x1D8EF]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8EF,
+ },
+ [0x1D8F0]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F0,
+ },
+ [0x1D8F1]={
+ category="so",
+ description="SIGNWRITING HAND-HINGE INDEX THUMB SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F1,
+ },
+ [0x1D8F2]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB OUT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F2,
+ },
+ [0x1D8F3]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB IN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F3,
+ },
+ [0x1D8F4]={
+ category="so",
+ description="SIGNWRITING HAND-ANGLE INDEX THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F4,
+ },
+ [0x1D8F5]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F5,
+ },
+ [0x1D8F6]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F6,
+ },
+ [0x1D8F7]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F7,
+ },
+ [0x1D8F8]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE CONJOINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F8,
+ },
+ [0x1D8F9]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB SIDE BENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8F9,
+ },
+ [0x1D8FA]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB FORWARD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FA,
+ },
+ [0x1D8FB]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FB,
+ },
+ [0x1D8FC]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FC,
+ },
+ [0x1D8FD]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FD,
+ },
+ [0x1D8FE]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FE,
+ },
+ [0x1D8FF]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D8FF,
+ },
+ [0x1D900]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D900,
+ },
+ [0x1D901]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D901,
+ },
+ [0x1D902]={
+ category="so",
+ description="SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D902,
+ },
+ [0x1D903]={
+ category="so",
+ description="SIGNWRITING HAND-FIST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D903,
+ },
+ [0x1D904]={
+ category="so",
+ description="SIGNWRITING HAND-FIST HEEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D904,
+ },
+ [0x1D905]={
+ category="so",
+ description="SIGNWRITING TOUCH SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D905,
+ },
+ [0x1D906]={
+ category="so",
+ description="SIGNWRITING TOUCH MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D906,
+ },
+ [0x1D907]={
+ category="so",
+ description="SIGNWRITING TOUCH BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D907,
+ },
+ [0x1D908]={
+ category="so",
+ description="SIGNWRITING GRASP SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D908,
+ },
+ [0x1D909]={
+ category="so",
+ description="SIGNWRITING GRASP MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D909,
+ },
+ [0x1D90A]={
+ category="so",
+ description="SIGNWRITING GRASP BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90A,
+ },
+ [0x1D90B]={
+ category="so",
+ description="SIGNWRITING STRIKE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90B,
+ },
+ [0x1D90C]={
+ category="so",
+ description="SIGNWRITING STRIKE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90C,
+ },
+ [0x1D90D]={
+ category="so",
+ description="SIGNWRITING STRIKE BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90D,
+ },
+ [0x1D90E]={
+ category="so",
+ description="SIGNWRITING BRUSH SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90E,
+ },
+ [0x1D90F]={
+ category="so",
+ description="SIGNWRITING BRUSH MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D90F,
+ },
+ [0x1D910]={
+ category="so",
+ description="SIGNWRITING BRUSH BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D910,
+ },
+ [0x1D911]={
+ category="so",
+ description="SIGNWRITING RUB SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D911,
+ },
+ [0x1D912]={
+ category="so",
+ description="SIGNWRITING RUB MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D912,
+ },
+ [0x1D913]={
+ category="so",
+ description="SIGNWRITING RUB BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D913,
+ },
+ [0x1D914]={
+ category="so",
+ description="SIGNWRITING SURFACE SYMBOLS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D914,
+ },
+ [0x1D915]={
+ category="so",
+ description="SIGNWRITING SURFACE BETWEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D915,
+ },
+ [0x1D916]={
+ category="so",
+ description="SIGNWRITING SQUEEZE LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D916,
+ },
+ [0x1D917]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D917,
+ },
+ [0x1D918]={
+ category="so",
+ description="SIGNWRITING SQUEEZE LARGE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D918,
+ },
+ [0x1D919]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SMALL MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D919,
+ },
+ [0x1D91A]={
+ category="so",
+ description="SIGNWRITING SQUEEZE SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91A,
+ },
+ [0x1D91B]={
+ category="so",
+ description="SIGNWRITING FLICK LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91B,
+ },
+ [0x1D91C]={
+ category="so",
+ description="SIGNWRITING FLICK SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91C,
+ },
+ [0x1D91D]={
+ category="so",
+ description="SIGNWRITING FLICK LARGE MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91D,
+ },
+ [0x1D91E]={
+ category="so",
+ description="SIGNWRITING FLICK SMALL MULTIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91E,
+ },
+ [0x1D91F]={
+ category="so",
+ description="SIGNWRITING FLICK SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D91F,
+ },
+ [0x1D920]={
+ category="so",
+ description="SIGNWRITING SQUEEZE FLICK ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D920,
+ },
+ [0x1D921]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D921,
+ },
+ [0x1D922]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D922,
+ },
+ [0x1D923]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D923,
+ },
+ [0x1D924]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D924,
+ },
+ [0x1D925]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D925,
+ },
+ [0x1D926]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D926,
+ },
+ [0x1D927]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D927,
+ },
+ [0x1D928]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D928,
+ },
+ [0x1D929]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D929,
+ },
+ [0x1D92A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92A,
+ },
+ [0x1D92B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92B,
+ },
+ [0x1D92C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92C,
+ },
+ [0x1D92D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92D,
+ },
+ [0x1D92E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92E,
+ },
+ [0x1D92F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D92F,
+ },
+ [0x1D930]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D930,
+ },
+ [0x1D931]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D931,
+ },
+ [0x1D932]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D932,
+ },
+ [0x1D933]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D933,
+ },
+ [0x1D934]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D934,
+ },
+ [0x1D935]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D935,
+ },
+ [0x1D936]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D936,
+ },
+ [0x1D937]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D937,
+ },
+ [0x1D938]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D938,
+ },
+ [0x1D939]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D939,
+ },
+ [0x1D93A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93A,
+ },
+ [0x1D93B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93B,
+ },
+ [0x1D93C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93C,
+ },
+ [0x1D93D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93D,
+ },
+ [0x1D93E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93E,
+ },
+ [0x1D93F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D93F,
+ },
+ [0x1D940]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D940,
+ },
+ [0x1D941]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D941,
+ },
+ [0x1D942]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D942,
+ },
+ [0x1D943]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D943,
+ },
+ [0x1D944]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D944,
+ },
+ [0x1D945]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D945,
+ },
+ [0x1D946]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D946,
+ },
+ [0x1D947]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D947,
+ },
+ [0x1D948]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D948,
+ },
+ [0x1D949]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D949,
+ },
+ [0x1D94A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94A,
+ },
+ [0x1D94B]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94B,
+ },
+ [0x1D94C]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94C,
+ },
+ [0x1D94D]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94D,
+ },
+ [0x1D94E]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94E,
+ },
+ [0x1D94F]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D94F,
+ },
+ [0x1D950]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D950,
+ },
+ [0x1D951]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D951,
+ },
+ [0x1D952]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D952,
+ },
+ [0x1D953]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D953,
+ },
+ [0x1D954]={
+ category="so",
+ description="SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D954,
+ },
+ [0x1D955]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D955,
+ },
+ [0x1D956]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D956,
+ },
+ [0x1D957]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D957,
+ },
+ [0x1D958]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D958,
+ },
+ [0x1D959]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D959,
+ },
+ [0x1D95A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95A,
+ },
+ [0x1D95B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95B,
+ },
+ [0x1D95C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95C,
+ },
+ [0x1D95D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95D,
+ },
+ [0x1D95E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95E,
+ },
+ [0x1D95F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D95F,
+ },
+ [0x1D960]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D960,
+ },
+ [0x1D961]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D961,
+ },
+ [0x1D962]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D962,
+ },
+ [0x1D963]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D963,
+ },
+ [0x1D964]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D964,
+ },
+ [0x1D965]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D965,
+ },
+ [0x1D966]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D966,
+ },
+ [0x1D967]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D967,
+ },
+ [0x1D968]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D968,
+ },
+ [0x1D969]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D969,
+ },
+ [0x1D96A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96A,
+ },
+ [0x1D96B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96B,
+ },
+ [0x1D96C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96C,
+ },
+ [0x1D96D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96D,
+ },
+ [0x1D96E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CROSS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96E,
+ },
+ [0x1D96F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D96F,
+ },
+ [0x1D970]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D970,
+ },
+ [0x1D971]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D971,
+ },
+ [0x1D972]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D972,
+ },
+ [0x1D973]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BEND",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D973,
+ },
+ [0x1D974]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D974,
+ },
+ [0x1D975]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D975,
+ },
+ [0x1D976]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D976,
+ },
+ [0x1D977]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CHECK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D977,
+ },
+ [0x1D978]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D978,
+ },
+ [0x1D979]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D979,
+ },
+ [0x1D97A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97A,
+ },
+ [0x1D97B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97B,
+ },
+ [0x1D97C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97C,
+ },
+ [0x1D97D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97D,
+ },
+ [0x1D97E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97E,
+ },
+ [0x1D97F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D97F,
+ },
+ [0x1D980]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D980,
+ },
+ [0x1D981]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D981,
+ },
+ [0x1D982]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D982,
+ },
+ [0x1D983]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D983,
+ },
+ [0x1D984]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D984,
+ },
+ [0x1D985]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D985,
+ },
+ [0x1D986]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D986,
+ },
+ [0x1D987]={
+ category="so",
+ description="SIGNWRITING TRAVEL-FLOORPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D987,
+ },
+ [0x1D988]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D988,
+ },
+ [0x1D989]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D989,
+ },
+ [0x1D98A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98A,
+ },
+ [0x1D98B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98B,
+ },
+ [0x1D98C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98C,
+ },
+ [0x1D98D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98D,
+ },
+ [0x1D98E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98E,
+ },
+ [0x1D98F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D98F,
+ },
+ [0x1D990]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D990,
+ },
+ [0x1D991]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D991,
+ },
+ [0x1D992]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D992,
+ },
+ [0x1D993]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D993,
+ },
+ [0x1D994]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D994,
+ },
+ [0x1D995]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D995,
+ },
+ [0x1D996]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D996,
+ },
+ [0x1D997]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D997,
+ },
+ [0x1D998]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D998,
+ },
+ [0x1D999]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D999,
+ },
+ [0x1D99A]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99A,
+ },
+ [0x1D99B]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99B,
+ },
+ [0x1D99C]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99C,
+ },
+ [0x1D99D]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99D,
+ },
+ [0x1D99E]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99E,
+ },
+ [0x1D99F]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D99F,
+ },
+ [0x1D9A0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A0,
+ },
+ [0x1D9A1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A1,
+ },
+ [0x1D9A2]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A2,
+ },
+ [0x1D9A3]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A3,
+ },
+ [0x1D9A4]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A4,
+ },
+ [0x1D9A5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE SHAKING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A5,
+ },
+ [0x1D9A6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A6,
+ },
+ [0x1D9A7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A7,
+ },
+ [0x1D9A8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A8,
+ },
+ [0x1D9A9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9A9,
+ },
+ [0x1D9AA]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AA,
+ },
+ [0x1D9AB]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AB,
+ },
+ [0x1D9AC]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AC,
+ },
+ [0x1D9AD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AD,
+ },
+ [0x1D9AE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AE,
+ },
+ [0x1D9AF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9AF,
+ },
+ [0x1D9B0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B0,
+ },
+ [0x1D9B1]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B1,
+ },
+ [0x1D9B2]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B2,
+ },
+ [0x1D9B3]={
+ category="so",
+ description="SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B3,
+ },
+ [0x1D9B4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B4,
+ },
+ [0x1D9B5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B5,
+ },
+ [0x1D9B6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B6,
+ },
+ [0x1D9B7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B7,
+ },
+ [0x1D9B8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B8,
+ },
+ [0x1D9B9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9B9,
+ },
+ [0x1D9BA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BA,
+ },
+ [0x1D9BB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BB,
+ },
+ [0x1D9BC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BC,
+ },
+ [0x1D9BD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BD,
+ },
+ [0x1D9BE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BE,
+ },
+ [0x1D9BF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9BF,
+ },
+ [0x1D9C0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C0,
+ },
+ [0x1D9C1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C1,
+ },
+ [0x1D9C2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C2,
+ },
+ [0x1D9C3]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C3,
+ },
+ [0x1D9C4]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C4,
+ },
+ [0x1D9C5]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C5,
+ },
+ [0x1D9C6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C6,
+ },
+ [0x1D9C7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C7,
+ },
+ [0x1D9C8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C8,
+ },
+ [0x1D9C9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9C9,
+ },
+ [0x1D9CA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CA,
+ },
+ [0x1D9CB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CB,
+ },
+ [0x1D9CC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CC,
+ },
+ [0x1D9CD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CD,
+ },
+ [0x1D9CE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CE,
+ },
+ [0x1D9CF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9CF,
+ },
+ [0x1D9D0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D0,
+ },
+ [0x1D9D1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D1,
+ },
+ [0x1D9D2]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D2,
+ },
+ [0x1D9D3]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D3,
+ },
+ [0x1D9D4]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D4,
+ },
+ [0x1D9D5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D5,
+ },
+ [0x1D9D6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D6,
+ },
+ [0x1D9D7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D7,
+ },
+ [0x1D9D8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D8,
+ },
+ [0x1D9D9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9D9,
+ },
+ [0x1D9DA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DA,
+ },
+ [0x1D9DB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DB,
+ },
+ [0x1D9DC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DC,
+ },
+ [0x1D9DD]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DD,
+ },
+ [0x1D9DE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DE,
+ },
+ [0x1D9DF]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9DF,
+ },
+ [0x1D9E0]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E0,
+ },
+ [0x1D9E1]={
+ category="so",
+ description="SIGNWRITING ROTATION-FLOORPLANE ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E1,
+ },
+ [0x1D9E2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E2,
+ },
+ [0x1D9E3]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E3,
+ },
+ [0x1D9E4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E4,
+ },
+ [0x1D9E5]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E5,
+ },
+ [0x1D9E6]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E6,
+ },
+ [0x1D9E7]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E7,
+ },
+ [0x1D9E8]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E8,
+ },
+ [0x1D9E9]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9E9,
+ },
+ [0x1D9EA]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EA,
+ },
+ [0x1D9EB]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EB,
+ },
+ [0x1D9EC]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EC,
+ },
+ [0x1D9ED]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9ED,
+ },
+ [0x1D9EE]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EE,
+ },
+ [0x1D9EF]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9EF,
+ },
+ [0x1D9F0]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F0,
+ },
+ [0x1D9F1]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F1,
+ },
+ [0x1D9F2]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F2,
+ },
+ [0x1D9F3]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F3,
+ },
+ [0x1D9F4]={
+ category="so",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F4,
+ },
+ [0x1D9F5]={
+ category="so",
+ description="SIGNWRITING DYNAMIC ARROWHEAD SMALL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F5,
+ },
+ [0x1D9F6]={
+ category="so",
+ description="SIGNWRITING DYNAMIC ARROWHEAD LARGE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F6,
+ },
+ [0x1D9F7]={
+ category="so",
+ description="SIGNWRITING DYNAMIC FAST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F7,
+ },
+ [0x1D9F8]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SLOW",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F8,
+ },
+ [0x1D9F9]={
+ category="so",
+ description="SIGNWRITING DYNAMIC TENSE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9F9,
+ },
+ [0x1D9FA]={
+ category="so",
+ description="SIGNWRITING DYNAMIC RELAXED",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FA,
+ },
+ [0x1D9FB]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SIMULTANEOUS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FB,
+ },
+ [0x1D9FC]={
+ category="so",
+ description="SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FC,
+ },
+ [0x1D9FD]={
+ category="so",
+ description="SIGNWRITING DYNAMIC EVERY OTHER TIME",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FD,
+ },
+ [0x1D9FE]={
+ category="so",
+ description="SIGNWRITING DYNAMIC GRADUAL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FE,
+ },
+ [0x1D9FF]={
+ category="so",
+ description="SIGNWRITING HEAD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D9FF,
+ },
+ [0x1DA00]={
+ category="mn",
+ description="SIGNWRITING HEAD RIM",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA00,
+ },
+ [0x1DA01]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA01,
+ },
+ [0x1DA02]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA02,
+ },
+ [0x1DA03]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA03,
+ },
+ [0x1DA04]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA04,
+ },
+ [0x1DA05]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA05,
+ },
+ [0x1DA06]={
+ category="mn",
+ description="SIGNWRITING HEAD MOVEMENT CIRCLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA06,
+ },
+ [0x1DA07]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA07,
+ },
+ [0x1DA08]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA08,
+ },
+ [0x1DA09]={
+ category="mn",
+ description="SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA09,
+ },
+ [0x1DA0A]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0A,
+ },
+ [0x1DA0B]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0B,
+ },
+ [0x1DA0C]={
+ category="mn",
+ description="SIGNWRITING EYEBROWS STRAIGHT DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0C,
+ },
+ [0x1DA0D]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0D,
+ },
+ [0x1DA0E]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0E,
+ },
+ [0x1DA0F]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS UP NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA0F,
+ },
+ [0x1DA10]={
+ category="mn",
+ description="SIGNWRITING DREAMY EYEBROWS NEUTRAL UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA10,
+ },
+ [0x1DA11]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA11,
+ },
+ [0x1DA12]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA12,
+ },
+ [0x1DA13]={
+ category="mn",
+ description="SIGNWRITING FOREHEAD WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA13,
+ },
+ [0x1DA14]={
+ category="mn",
+ description="SIGNWRITING EYES OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA14,
+ },
+ [0x1DA15]={
+ category="mn",
+ description="SIGNWRITING EYES SQUEEZED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA15,
+ },
+ [0x1DA16]={
+ category="mn",
+ description="SIGNWRITING EYES CLOSED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA16,
+ },
+ [0x1DA17]={
+ category="mn",
+ description="SIGNWRITING EYE BLINK SINGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA17,
+ },
+ [0x1DA18]={
+ category="mn",
+ description="SIGNWRITING EYE BLINK MULTIPLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA18,
+ },
+ [0x1DA19]={
+ category="mn",
+ description="SIGNWRITING EYES HALF OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA19,
+ },
+ [0x1DA1A]={
+ category="mn",
+ description="SIGNWRITING EYES WIDE OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1A,
+ },
+ [0x1DA1B]={
+ category="mn",
+ description="SIGNWRITING EYES HALF CLOSED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1B,
+ },
+ [0x1DA1C]={
+ category="mn",
+ description="SIGNWRITING EYES WIDENING MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1C,
+ },
+ [0x1DA1D]={
+ category="mn",
+ description="SIGNWRITING EYE WINK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1D,
+ },
+ [0x1DA1E]={
+ category="mn",
+ description="SIGNWRITING EYELASHES UP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1E,
+ },
+ [0x1DA1F]={
+ category="mn",
+ description="SIGNWRITING EYELASHES DOWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA1F,
+ },
+ [0x1DA20]={
+ category="mn",
+ description="SIGNWRITING EYELASHES FLUTTERING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA20,
+ },
+ [0x1DA21]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA21,
+ },
+ [0x1DA22]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA22,
+ },
+ [0x1DA23]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA23,
+ },
+ [0x1DA24]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA24,
+ },
+ [0x1DA25]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA25,
+ },
+ [0x1DA26]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA26,
+ },
+ [0x1DA27]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE CURVED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA27,
+ },
+ [0x1DA28]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-FLOORPLANE CURVED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA28,
+ },
+ [0x1DA29]={
+ category="mn",
+ description="SIGNWRITING EYEGAZE-WALLPLANE CIRCLING",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA29,
+ },
+ [0x1DA2A]={
+ category="mn",
+ description="SIGNWRITING CHEEKS PUFFED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2A,
+ },
+ [0x1DA2B]={
+ category="mn",
+ description="SIGNWRITING CHEEKS NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2B,
+ },
+ [0x1DA2C]={
+ category="mn",
+ description="SIGNWRITING CHEEKS SUCKED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2C,
+ },
+ [0x1DA2D]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS HIGH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2D,
+ },
+ [0x1DA2E]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS MIDDLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2E,
+ },
+ [0x1DA2F]={
+ category="mn",
+ description="SIGNWRITING TENSE CHEEKS LOW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA2F,
+ },
+ [0x1DA30]={
+ category="mn",
+ description="SIGNWRITING EARS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA30,
+ },
+ [0x1DA31]={
+ category="mn",
+ description="SIGNWRITING NOSE NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA31,
+ },
+ [0x1DA32]={
+ category="mn",
+ description="SIGNWRITING NOSE CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA32,
+ },
+ [0x1DA33]={
+ category="mn",
+ description="SIGNWRITING NOSE WRINKLES",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA33,
+ },
+ [0x1DA34]={
+ category="mn",
+ description="SIGNWRITING NOSE WIGGLES",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA34,
+ },
+ [0x1DA35]={
+ category="mn",
+ description="SIGNWRITING AIR BLOWING OUT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA35,
+ },
+ [0x1DA36]={
+ category="mn",
+ description="SIGNWRITING AIR SUCKING IN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA36,
+ },
+ [0x1DA37]={
+ category="so",
+ description="SIGNWRITING AIR BLOW SMALL ROTATIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA37,
+ },
+ [0x1DA38]={
+ category="so",
+ description="SIGNWRITING AIR SUCK SMALL ROTATIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA38,
+ },
+ [0x1DA39]={
+ category="so",
+ description="SIGNWRITING BREATH INHALE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA39,
+ },
+ [0x1DA3A]={
+ category="so",
+ description="SIGNWRITING BREATH EXHALE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA3A,
+ },
+ [0x1DA3B]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED NEUTRAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3B,
+ },
+ [0x1DA3C]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3C,
+ },
+ [0x1DA3D]={
+ category="mn",
+ description="SIGNWRITING MOUTH CLOSED CONTACT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3D,
+ },
+ [0x1DA3E]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3E,
+ },
+ [0x1DA3F]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA3F,
+ },
+ [0x1DA40]={
+ category="mn",
+ description="SIGNWRITING MOUTH SMILE OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA40,
+ },
+ [0x1DA41]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA41,
+ },
+ [0x1DA42]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA42,
+ },
+ [0x1DA43]={
+ category="mn",
+ description="SIGNWRITING MOUTH FROWN OPEN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA43,
+ },
+ [0x1DA44]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN CIRCLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA44,
+ },
+ [0x1DA45]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA45,
+ },
+ [0x1DA46]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA46,
+ },
+ [0x1DA47]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA47,
+ },
+ [0x1DA48]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA48,
+ },
+ [0x1DA49]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN OVAL YAWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA49,
+ },
+ [0x1DA4A]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4A,
+ },
+ [0x1DA4B]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4B,
+ },
+ [0x1DA4C]={
+ category="mn",
+ description="SIGNWRITING MOUTH OPEN RECTANGLE YAWN",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4C,
+ },
+ [0x1DA4D]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4D,
+ },
+ [0x1DA4E]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4E,
+ },
+ [0x1DA4F]={
+ category="mn",
+ description="SIGNWRITING MOUTH KISS WRINKLED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA4F,
+ },
+ [0x1DA50]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA50,
+ },
+ [0x1DA51]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE FORWARD",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA51,
+ },
+ [0x1DA52]={
+ category="mn",
+ description="SIGNWRITING MOUTH TENSE SUCKED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA52,
+ },
+ [0x1DA53]={
+ category="mn",
+ description="SIGNWRITING LIPS PRESSED TOGETHER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA53,
+ },
+ [0x1DA54]={
+ category="mn",
+ description="SIGNWRITING LIP LOWER OVER UPPER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA54,
+ },
+ [0x1DA55]={
+ category="mn",
+ description="SIGNWRITING LIP UPPER OVER LOWER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA55,
+ },
+ [0x1DA56]={
+ category="mn",
+ description="SIGNWRITING MOUTH CORNERS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA56,
+ },
+ [0x1DA57]={
+ category="mn",
+ description="SIGNWRITING MOUTH WRINKLES SINGLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA57,
+ },
+ [0x1DA58]={
+ category="mn",
+ description="SIGNWRITING MOUTH WRINKLES DOUBLE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA58,
+ },
+ [0x1DA59]={
+ category="mn",
+ description="SIGNWRITING TONGUE STICKING OUT FAR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA59,
+ },
+ [0x1DA5A]={
+ category="mn",
+ description="SIGNWRITING TONGUE LICKING LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5A,
+ },
+ [0x1DA5B]={
+ category="mn",
+ description="SIGNWRITING TONGUE TIP BETWEEN LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5B,
+ },
+ [0x1DA5C]={
+ category="mn",
+ description="SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5C,
+ },
+ [0x1DA5D]={
+ category="mn",
+ description="SIGNWRITING TONGUE INSIDE MOUTH RELAXED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5D,
+ },
+ [0x1DA5E]={
+ category="mn",
+ description="SIGNWRITING TONGUE MOVES AGAINST CHEEK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5E,
+ },
+ [0x1DA5F]={
+ category="mn",
+ description="SIGNWRITING TONGUE CENTRE STICKING OUT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA5F,
+ },
+ [0x1DA60]={
+ category="mn",
+ description="SIGNWRITING TONGUE CENTRE INSIDE MOUTH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA60,
+ },
+ [0x1DA61]={
+ category="mn",
+ description="SIGNWRITING TEETH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA61,
+ },
+ [0x1DA62]={
+ category="mn",
+ description="SIGNWRITING TEETH MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA62,
+ },
+ [0x1DA63]={
+ category="mn",
+ description="SIGNWRITING TEETH ON TONGUE",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA63,
+ },
+ [0x1DA64]={
+ category="mn",
+ description="SIGNWRITING TEETH ON TONGUE MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA64,
+ },
+ [0x1DA65]={
+ category="mn",
+ description="SIGNWRITING TEETH ON LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA65,
+ },
+ [0x1DA66]={
+ category="mn",
+ description="SIGNWRITING TEETH ON LIPS MOVEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA66,
+ },
+ [0x1DA67]={
+ category="mn",
+ description="SIGNWRITING TEETH BITE LIPS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA67,
+ },
+ [0x1DA68]={
+ category="mn",
+ description="SIGNWRITING MOVEMENT-WALLPLANE JAW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA68,
+ },
+ [0x1DA69]={
+ category="mn",
+ description="SIGNWRITING MOVEMENT-FLOORPLANE JAW",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA69,
+ },
+ [0x1DA6A]={
+ category="mn",
+ description="SIGNWRITING NECK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6A,
+ },
+ [0x1DA6B]={
+ category="mn",
+ description="SIGNWRITING HAIR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6B,
+ },
+ [0x1DA6C]={
+ category="mn",
+ description="SIGNWRITING EXCITEMENT",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA6C,
+ },
+ [0x1DA6D]={
+ category="so",
+ description="SIGNWRITING SHOULDER HIP SPINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6D,
+ },
+ [0x1DA6E]={
+ category="so",
+ description="SIGNWRITING SHOULDER HIP POSITIONS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6E,
+ },
+ [0x1DA6F]={
+ category="so",
+ description="SIGNWRITING WALLPLANE SHOULDER HIP MOVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA6F,
+ },
+ [0x1DA70]={
+ category="so",
+ description="SIGNWRITING FLOORPLANE SHOULDER HIP MOVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA70,
+ },
+ [0x1DA71]={
+ category="so",
+ description="SIGNWRITING SHOULDER TILTING FROM WAIST",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA71,
+ },
+ [0x1DA72]={
+ category="so",
+ description="SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA72,
+ },
+ [0x1DA73]={
+ category="so",
+ description="SIGNWRITING TORSO-WALLPLANE CURVED BEND",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA73,
+ },
+ [0x1DA74]={
+ category="so",
+ description="SIGNWRITING TORSO-FLOORPLANE TWISTING",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA74,
+ },
+ [0x1DA75]={
+ category="mn",
+ description="SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA75,
+ },
+ [0x1DA76]={
+ category="so",
+ description="SIGNWRITING LIMB COMBINATION",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA76,
+ },
+ [0x1DA77]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-1",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA77,
+ },
+ [0x1DA78]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-2",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA78,
+ },
+ [0x1DA79]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-3",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA79,
+ },
+ [0x1DA7A]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-4",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7A,
+ },
+ [0x1DA7B]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-5",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7B,
+ },
+ [0x1DA7C]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-6",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7C,
+ },
+ [0x1DA7D]={
+ category="so",
+ description="SIGNWRITING LIMB LENGTH-7",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7D,
+ },
+ [0x1DA7E]={
+ category="so",
+ description="SIGNWRITING FINGER",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7E,
+ },
+ [0x1DA7F]={
+ category="so",
+ description="SIGNWRITING LOCATION-WALLPLANE SPACE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA7F,
+ },
+ [0x1DA80]={
+ category="so",
+ description="SIGNWRITING LOCATION-FLOORPLANE SPACE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA80,
+ },
+ [0x1DA81]={
+ category="so",
+ description="SIGNWRITING LOCATION HEIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA81,
+ },
+ [0x1DA82]={
+ category="so",
+ description="SIGNWRITING LOCATION WIDTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA82,
+ },
+ [0x1DA83]={
+ category="so",
+ description="SIGNWRITING LOCATION DEPTH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA83,
+ },
+ [0x1DA84]={
+ category="mn",
+ description="SIGNWRITING LOCATION HEAD NECK",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA84,
+ },
+ [0x1DA85]={
+ category="so",
+ description="SIGNWRITING LOCATION TORSO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA85,
+ },
+ [0x1DA86]={
+ category="so",
+ description="SIGNWRITING LOCATION LIMBS DIGITS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA86,
+ },
+ [0x1DA87]={
+ category="po",
+ description="SIGNWRITING COMMA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA87,
+ },
+ [0x1DA88]={
+ category="po",
+ description="SIGNWRITING FULL STOP",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA88,
+ },
+ [0x1DA89]={
+ category="po",
+ description="SIGNWRITING SEMICOLON",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA89,
+ },
+ [0x1DA8A]={
+ category="po",
+ description="SIGNWRITING COLON",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x1DA8A,
+ },
+ [0x1DA8B]={
+ category="po",
+ description="SIGNWRITING PARENTHESIS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DA8B,
+ },
+ [0x1DA9B]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-2",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9B,
+ },
+ [0x1DA9C]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-3",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9C,
+ },
+ [0x1DA9D]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-4",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9D,
+ },
+ [0x1DA9E]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-5",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9E,
+ },
+ [0x1DA9F]={
+ category="mn",
+ description="SIGNWRITING FILL MODIFIER-6",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DA9F,
+ },
+ [0x1DAA1]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-2",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA1,
+ },
+ [0x1DAA2]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-3",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA2,
+ },
+ [0x1DAA3]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-4",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA3,
+ },
+ [0x1DAA4]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-5",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA4,
+ },
+ [0x1DAA5]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-6",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA5,
+ },
+ [0x1DAA6]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-7",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA6,
+ },
+ [0x1DAA7]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-8",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA7,
+ },
+ [0x1DAA8]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-9",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA8,
+ },
+ [0x1DAA9]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-10",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAA9,
+ },
+ [0x1DAAA]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-11",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAA,
+ },
+ [0x1DAAB]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-12",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAB,
+ },
+ [0x1DAAC]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-13",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAC,
+ },
+ [0x1DAAD]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-14",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAD,
+ },
+ [0x1DAAE]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-15",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAE,
+ },
+ [0x1DAAF]={
+ category="mn",
+ description="SIGNWRITING ROTATION MODIFIER-16",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1DAAF,
+ },
[0x1E800]={
category="lo",
description="MENDE KIKAKUI SYLLABLE M001 KI",
@@ -197713,6 +210938,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F170,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F171]={
category="so",
@@ -197721,6 +210950,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F171,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F172]={
category="so",
@@ -197825,6 +211058,10 @@ characters.data={
direction="l",
linebreak="ai",
unicodeslot=0x1F17E,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F17F]={
category="so",
@@ -198263,6 +211500,10 @@ characters.data={
linebreak="id",
specials={ "square", 0x30B5 },
unicodeslot=0x1F202,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F210]={
category="so",
@@ -198631,6 +211872,10 @@ characters.data={
linebreak="id",
specials={ "square", 0x6708 },
unicodeslot=0x1F237,
+ variants={
+ [0xFE0E]="text style",
+ [0xFE0F]="emoji style",
+ },
},
[0x1F238]={
category="so",
@@ -199073,6 +212318,27 @@ characters.data={
linebreak="id",
unicodeslot=0x1F32C,
},
+ [0x1F32D]={
+ category="so",
+ description="HOT DOG",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32D,
+ },
+ [0x1F32E]={
+ category="so",
+ description="TACO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32E,
+ },
+ [0x1F32F]={
+ category="so",
+ description="BURRITO",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F32F,
+ },
[0x1F330]={
category="so",
description="CHESTNUT",
@@ -199619,6 +212885,20 @@ characters.data={
linebreak="id",
unicodeslot=0x1F37D,
},
+ [0x1F37E]={
+ category="so",
+ description="BOTTLE WITH POPPING CORK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F37E,
+ },
+ [0x1F37F]={
+ category="so",
+ description="POPCORN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F37F,
+ },
[0x1F380]={
category="so",
description="RIBBON",
@@ -200172,6 +213452,41 @@ characters.data={
linebreak="id",
unicodeslot=0x1F3CE,
},
+ [0x1F3CF]={
+ category="so",
+ description="CRICKET BAT AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3CF,
+ },
+ [0x1F3D0]={
+ category="so",
+ description="VOLLEYBALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D0,
+ },
+ [0x1F3D1]={
+ category="so",
+ description="FIELD HOCKEY STICK AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D1,
+ },
+ [0x1F3D2]={
+ category="so",
+ description="ICE HOCKEY STICK AND PUCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D2,
+ },
+ [0x1F3D3]={
+ category="so",
+ description="TABLE TENNIS PADDLE AND BALL",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3D3,
+ },
[0x1F3D4]={
category="so",
description="SNOW CAPPED MOUNTAIN",
@@ -200424,6 +213739,62 @@ characters.data={
linebreak="id",
unicodeslot=0x1F3F7,
},
+ [0x1F3F8]={
+ category="so",
+ description="BADMINTON RACQUET AND SHUTTLECOCK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3F8,
+ },
+ [0x1F3F9]={
+ category="so",
+ description="BOW AND ARROW",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3F9,
+ },
+ [0x1F3FA]={
+ category="so",
+ description="AMPHORA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F3FA,
+ },
+ [0x1F3FB]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-1-2",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FB,
+ },
+ [0x1F3FC]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-3",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FC,
+ },
+ [0x1F3FD]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-4",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FD,
+ },
+ [0x1F3FE]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-5",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FE,
+ },
+ [0x1F3FF]={
+ category="sk",
+ description="EMOJI MODIFIER FITZPATRICK TYPE-6",
+ direction="on",
+ linebreak="al",
+ unicodeslot=0x1F3FF,
+ },
[0x1F400]={
category="so",
description="RAT",
@@ -202209,6 +215580,13 @@ characters.data={
linebreak="id",
unicodeslot=0x1F4FE,
},
+ [0x1F4FF]={
+ category="so",
+ description="PRAYER BEADS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F4FF,
+ },
[0x1F500]={
category="so",
description="TWISTED RIGHTWARDS ARROWS",
@@ -202734,6 +216112,41 @@ characters.data={
linebreak="id",
unicodeslot=0x1F54A,
},
+ [0x1F54B]={
+ category="so",
+ description="KAABA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54B,
+ },
+ [0x1F54C]={
+ category="so",
+ description="MOSQUE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54C,
+ },
+ [0x1F54D]={
+ category="so",
+ description="SYNAGOGUE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54D,
+ },
+ [0x1F54E]={
+ category="so",
+ description="MENORAH WITH NINE BRANCHES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54E,
+ },
+ [0x1F54F]={
+ category="so",
+ description="BOWL OF HYGIEIA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F54F,
+ },
[0x1F550]={
category="so",
description="CLOCK FACE ONE OCLOCK",
@@ -204421,6 +217834,20 @@ characters.data={
linebreak="id",
unicodeslot=0x1F642,
},
+ [0x1F643]={
+ category="so",
+ description="UPSIDE-DOWN FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F643,
+ },
+ [0x1F644]={
+ category="so",
+ description="FACE WITH ROLLING EYES",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F644,
+ },
[0x1F645]={
category="so",
description="FACE WITH NO GOOD GESTURE",
@@ -205394,6 +218821,13 @@ characters.data={
linebreak="id",
unicodeslot=0x1F6CF,
},
+ [0x1F6D0]={
+ category="so",
+ description="PLACE OF WORSHIP",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6D0,
+ },
[0x1F6E0]={
category="so",
description="HAMMER AND WRENCH",
@@ -207956,6 +221390,111 @@ characters.data={
linebreak="al",
unicodeslot=0x1F8AD,
},
+ [0x1F910]={
+ category="so",
+ description="ZIPPER-MOUTH FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F910,
+ },
+ [0x1F911]={
+ category="so",
+ description="MONEY-MOUTH FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F911,
+ },
+ [0x1F912]={
+ category="so",
+ description="FACE WITH THERMOMETER",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F912,
+ },
+ [0x1F913]={
+ category="so",
+ description="NERD FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F913,
+ },
+ [0x1F914]={
+ category="so",
+ description="THINKING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F914,
+ },
+ [0x1F915]={
+ category="so",
+ description="FACE WITH HEAD-BANDAGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F915,
+ },
+ [0x1F916]={
+ category="so",
+ description="ROBOT FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F916,
+ },
+ [0x1F917]={
+ category="so",
+ description="HUGGING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F917,
+ },
+ [0x1F918]={
+ category="so",
+ description="SIGN OF THE HORNS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F918,
+ },
+ [0x1F980]={
+ category="so",
+ description="CRAB",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F980,
+ },
+ [0x1F981]={
+ category="so",
+ description="LION FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F981,
+ },
+ [0x1F982]={
+ category="so",
+ description="SCORPION",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F982,
+ },
+ [0x1F983]={
+ category="so",
+ description="TURKEY",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F983,
+ },
+ [0x1F984]={
+ category="so",
+ description="UNICORN FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F984,
+ },
+ [0x1F9C0]={
+ category="so",
+ description="CHEESE WEDGE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F9C0,
+ },
[0x2F800]={
category="lo",
cjkwd="w",
@@ -213513,1924 +227052,4 @@ characters.data={
linebreak="cm",
unicodeslot=0xE007F,
},
- [0xE0100]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0011",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0100,
- },
- [0xE0101]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0012",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0101,
- },
- [0xE0102]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0013",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0102,
- },
- [0xE0103]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0014",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0103,
- },
- [0xE0104]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0015",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0104,
- },
- [0xE0105]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0016",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0105,
- },
- [0xE0106]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0017",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0106,
- },
- [0xE0107]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0018",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0107,
- },
- [0xE0108]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0019",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0108,
- },
- [0xE0109]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0109,
- },
- [0xE010A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010A,
- },
- [0xE010B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010B,
- },
- [0xE010C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010C,
- },
- [0xE010D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010D,
- },
- [0xE010E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x001F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010E,
- },
- [0xE010F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0020",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE010F,
- },
- [0xE0110]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0021",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0110,
- },
- [0xE0111]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0022",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0111,
- },
- [0xE0112]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0023",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0112,
- },
- [0xE0113]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0024",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0113,
- },
- [0xE0114]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0025",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0114,
- },
- [0xE0115]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0026",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0115,
- },
- [0xE0116]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0027",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0116,
- },
- [0xE0117]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0028",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0117,
- },
- [0xE0118]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0029",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0118,
- },
- [0xE0119]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0119,
- },
- [0xE011A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011A,
- },
- [0xE011B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011B,
- },
- [0xE011C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011C,
- },
- [0xE011D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011D,
- },
- [0xE011E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x002F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011E,
- },
- [0xE011F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0030",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE011F,
- },
- [0xE0120]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0031",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0120,
- },
- [0xE0121]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0032",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0121,
- },
- [0xE0122]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0033",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0122,
- },
- [0xE0123]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0034",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0123,
- },
- [0xE0124]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0035",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0124,
- },
- [0xE0125]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0036",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0125,
- },
- [0xE0126]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0037",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0126,
- },
- [0xE0127]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0038",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0127,
- },
- [0xE0128]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0039",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0128,
- },
- [0xE0129]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0129,
- },
- [0xE012A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012A,
- },
- [0xE012B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012B,
- },
- [0xE012C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012C,
- },
- [0xE012D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012D,
- },
- [0xE012E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x003F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012E,
- },
- [0xE012F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0040",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE012F,
- },
- [0xE0130]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0041",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0130,
- },
- [0xE0131]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0042",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0131,
- },
- [0xE0132]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0043",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0132,
- },
- [0xE0133]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0044",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0133,
- },
- [0xE0134]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0045",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0134,
- },
- [0xE0135]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0046",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0135,
- },
- [0xE0136]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0047",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0136,
- },
- [0xE0137]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0048",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0137,
- },
- [0xE0138]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0049",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0138,
- },
- [0xE0139]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0139,
- },
- [0xE013A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013A,
- },
- [0xE013B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013B,
- },
- [0xE013C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013C,
- },
- [0xE013D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013D,
- },
- [0xE013E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x004F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013E,
- },
- [0xE013F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0050",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE013F,
- },
- [0xE0140]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0051",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0140,
- },
- [0xE0141]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0052",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0141,
- },
- [0xE0142]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0053",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0142,
- },
- [0xE0143]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0054",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0143,
- },
- [0xE0144]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0055",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0144,
- },
- [0xE0145]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0056",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0145,
- },
- [0xE0146]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0057",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0146,
- },
- [0xE0147]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0058",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0147,
- },
- [0xE0148]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0059",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0148,
- },
- [0xE0149]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0149,
- },
- [0xE014A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014A,
- },
- [0xE014B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014B,
- },
- [0xE014C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014C,
- },
- [0xE014D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014D,
- },
- [0xE014E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x005F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014E,
- },
- [0xE014F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0060",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE014F,
- },
- [0xE0150]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0061",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0150,
- },
- [0xE0151]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0062",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0151,
- },
- [0xE0152]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0063",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0152,
- },
- [0xE0153]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0064",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0153,
- },
- [0xE0154]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0065",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0154,
- },
- [0xE0155]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0066",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0155,
- },
- [0xE0156]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0067",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0156,
- },
- [0xE0157]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0068",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0157,
- },
- [0xE0158]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0069",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0158,
- },
- [0xE0159]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0159,
- },
- [0xE015A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015A,
- },
- [0xE015B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015B,
- },
- [0xE015C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015C,
- },
- [0xE015D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015D,
- },
- [0xE015E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x006F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015E,
- },
- [0xE015F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0070",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE015F,
- },
- [0xE0160]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0071",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0160,
- },
- [0xE0161]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0072",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0161,
- },
- [0xE0162]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0073",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0162,
- },
- [0xE0163]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0074",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0163,
- },
- [0xE0164]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0075",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0164,
- },
- [0xE0165]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0076",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0165,
- },
- [0xE0166]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0077",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0166,
- },
- [0xE0167]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0078",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0167,
- },
- [0xE0168]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0079",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0168,
- },
- [0xE0169]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0169,
- },
- [0xE016A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016A,
- },
- [0xE016B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016B,
- },
- [0xE016C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016C,
- },
- [0xE016D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016D,
- },
- [0xE016E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x007F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016E,
- },
- [0xE016F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0080",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE016F,
- },
- [0xE0170]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0081",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0170,
- },
- [0xE0171]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0082",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0171,
- },
- [0xE0172]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0083",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0172,
- },
- [0xE0173]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0084",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0173,
- },
- [0xE0174]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0085",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0174,
- },
- [0xE0175]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0086",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0175,
- },
- [0xE0176]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0087",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0176,
- },
- [0xE0177]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0088",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0177,
- },
- [0xE0178]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0089",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0178,
- },
- [0xE0179]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0179,
- },
- [0xE017A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017A,
- },
- [0xE017B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017B,
- },
- [0xE017C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017C,
- },
- [0xE017D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017D,
- },
- [0xE017E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x008F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017E,
- },
- [0xE017F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0090",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE017F,
- },
- [0xE0180]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0091",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0180,
- },
- [0xE0181]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0092",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0181,
- },
- [0xE0182]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0093",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0182,
- },
- [0xE0183]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0094",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0183,
- },
- [0xE0184]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0095",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0184,
- },
- [0xE0185]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0096",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0185,
- },
- [0xE0186]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0097",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0186,
- },
- [0xE0187]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0098",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0187,
- },
- [0xE0188]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0099",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0188,
- },
- [0xE0189]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009A",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0189,
- },
- [0xE018A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009B",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018A,
- },
- [0xE018B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009C",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018B,
- },
- [0xE018C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009D",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018C,
- },
- [0xE018D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009E",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018D,
- },
- [0xE018E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x009F",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018E,
- },
- [0xE018F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE018F,
- },
- [0xE0190]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0190,
- },
- [0xE0191]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0191,
- },
- [0xE0192]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0192,
- },
- [0xE0193]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0193,
- },
- [0xE0194]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0194,
- },
- [0xE0195]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0195,
- },
- [0xE0196]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0196,
- },
- [0xE0197]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0197,
- },
- [0xE0198]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00A9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0198,
- },
- [0xE0199]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE0199,
- },
- [0xE019A]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019A,
- },
- [0xE019B]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019B,
- },
- [0xE019C]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AD",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019C,
- },
- [0xE019D]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019D,
- },
- [0xE019E]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00AF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019E,
- },
- [0xE019F]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE019F,
- },
- [0xE01A0]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A0,
- },
- [0xE01A1]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A1,
- },
- [0xE01A2]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A2,
- },
- [0xE01A3]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A3,
- },
- [0xE01A4]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A4,
- },
- [0xE01A5]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A5,
- },
- [0xE01A6]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A6,
- },
- [0xE01A7]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A7,
- },
- [0xE01A8]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00B9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A8,
- },
- [0xE01A9]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01A9,
- },
- [0xE01AA]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AA,
- },
- [0xE01AB]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AB,
- },
- [0xE01AC]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BD",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AC,
- },
- [0xE01AD]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AD,
- },
- [0xE01AE]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00BF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AE,
- },
- [0xE01AF]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01AF,
- },
- [0xE01B0]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B0,
- },
- [0xE01B1]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B1,
- },
- [0xE01B2]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B2,
- },
- [0xE01B3]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B3,
- },
- [0xE01B4]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B4,
- },
- [0xE01B5]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B5,
- },
- [0xE01B6]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B6,
- },
- [0xE01B7]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B7,
- },
- [0xE01B8]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00C9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B8,
- },
- [0xE01B9]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01B9,
- },
- [0xE01BA]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BA,
- },
- [0xE01BB]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BB,
- },
- [0xE01BC]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CD",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BC,
- },
- [0xE01BD]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BD,
- },
- [0xE01BE]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00CF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BE,
- },
- [0xE01BF]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01BF,
- },
- [0xE01C0]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C0,
- },
- [0xE01C1]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C1,
- },
- [0xE01C2]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C2,
- },
- [0xE01C3]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C3,
- },
- [0xE01C4]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C4,
- },
- [0xE01C5]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C5,
- },
- [0xE01C6]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C6,
- },
- [0xE01C7]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C7,
- },
- [0xE01C8]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00D9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C8,
- },
- [0xE01C9]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01C9,
- },
- [0xE01CA]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CA,
- },
- [0xE01CB]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CB,
- },
- [0xE01CC]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DD",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CC,
- },
- [0xE01CD]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CD,
- },
- [0xE01CE]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00DF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CE,
- },
- [0xE01CF]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01CF,
- },
- [0xE01D0]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D0,
- },
- [0xE01D1]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D1,
- },
- [0xE01D2]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D2,
- },
- [0xE01D3]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D3,
- },
- [0xE01D4]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D4,
- },
- [0xE01D5]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D5,
- },
- [0xE01D6]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D6,
- },
- [0xE01D7]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D7,
- },
- [0xE01D8]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00E9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D8,
- },
- [0xE01D9]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00EA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01D9,
- },
- [0xE01DA]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00EB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DA,
- },
- [0xE01DB]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00EC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DB,
- },
- [0xE01DC]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00ED",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DC,
- },
- [0xE01DD]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00EE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DD,
- },
- [0xE01DE]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00EF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DE,
- },
- [0xE01DF]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F0",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01DF,
- },
- [0xE01E0]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F1",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E0,
- },
- [0xE01E1]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F2",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E1,
- },
- [0xE01E2]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F3",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E2,
- },
- [0xE01E3]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F4",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E3,
- },
- [0xE01E4]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F5",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E4,
- },
- [0xE01E5]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F6",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E5,
- },
- [0xE01E6]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F7",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E6,
- },
- [0xE01E7]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F8",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E7,
- },
- [0xE01E8]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00F9",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E8,
- },
- [0xE01E9]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FA",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01E9,
- },
- [0xE01EA]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FB",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01EA,
- },
- [0xE01EB]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FC",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01EB,
- },
- [0xE01EC]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FD",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01EC,
- },
- [0xE01ED]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FE",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01ED,
- },
- [0xE01EE]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x00FF",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01EE,
- },
- [0xE01EF]={
- category="mn",
- cjkwd="a",
- description="VARIATION SELECTOR-0x0100",
- direction="nsm",
- linebreak="cm",
- unicodeslot=0xE01EF,
- },
}
diff --git a/Master/texmf-dist/tex/context/base/char-enc.lua b/Master/texmf-dist/tex/context/base/mkiv/char-enc.lua
index c2061891ad4..c2061891ad4 100644
--- a/Master/texmf-dist/tex/context/base/char-enc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-enc.lua
diff --git a/Master/texmf-dist/tex/context/base/char-enc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/char-enc.mkiv
index 86ab2591a41..86ab2591a41 100644
--- a/Master/texmf-dist/tex/context/base/char-enc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-enc.mkiv
diff --git a/Master/texmf-dist/tex/context/base/char-ent.lua b/Master/texmf-dist/tex/context/base/mkiv/char-ent.lua
index e48856a8440..e48856a8440 100644
--- a/Master/texmf-dist/tex/context/base/char-ent.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-ent.lua
diff --git a/Master/texmf-dist/tex/context/base/char-fio.lua b/Master/texmf-dist/tex/context/base/mkiv/char-fio.lua
index ab255593575..ab255593575 100644
--- a/Master/texmf-dist/tex/context/base/char-fio.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-fio.lua
diff --git a/Master/texmf-dist/tex/context/base/char-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua
index 4559fa28c49..ad53cae8f34 100644
--- a/Master/texmf-dist/tex/context/base/char-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua
@@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['char-ini'] = {
-- we can remove the tag range starting at 0xE0000 (special applications)
local utfchar, utfbyte, utfvalues, ustring, utotable = utf.char, utf.byte, utf.values, utf.ustring, utf.totable
-local concat, unpack, tohash = table.concat, table.unpack, table.tohash
+local concat, unpack, tohash, insert = table.concat, table.unpack, table.tohash, table.insert
local next, tonumber, type, rawget, rawset = next, tonumber, type, rawget, rawset
local format, lower, gsub = string.format, string.lower, string.gsub
local P, R, S, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.Cs
@@ -128,7 +128,7 @@ setmetatableindex(data, function(t,k)
if k >= rr.first and k <= rr.last then
local extender = rr.extender
if extender then
- local v = extender(k,v)
+ local v = extender(k)
t[k] = v
return v
end
@@ -138,10 +138,51 @@ setmetatableindex(data, function(t,k)
return private -- handy for when we loop over characters in fonts and check for a property
end)
+local variant_selector_metatable = {
+ category = "mn",
+ cjkwd = "a",
+ direction = "nsm",
+ linebreak = "cm",
+}
+
+-- This saves a bit of memory and also serves as example.
+
+local f_variant = string.formatters["VARIATION SELECTOR-0x%04X"]
+
+insert(characters.ranges,{
+ first = 0xFE00,
+ last = 0xFE0F,
+ name = "variant selector",
+ extender = function(k)
+ local t = {
+ description = f_variant(k - 0xFE00 + 0x0001),
+ unicodeslot = k,
+ }
+ setmetatable(t,variant_selector_metatable)
+ return t
+ end,
+})
+
+insert(characters.ranges,{
+ first = 0xE0100,
+ last = 0xE01EF,
+ name = "variant selector extension",
+ extender = function(k)
+ local t = {
+ description = f_variant(k - 0xE0100 + 0x0011),
+ unicodeslot = k,
+ }
+ setmetatable(t,variant_selector_metatable)
+ return t
+ end,
+})
+
local blocks = allocate {
["aegeannumbers"] = { first = 0x10100, last = 0x1013F, description = "Aegean Numbers" },
+ ["ahom"] = { first = 0x11700, last = 0x1173F, description = "Ahom" },
["alchemicalsymbols"] = { first = 0x1F700, last = 0x1F77F, description = "Alchemical Symbols" },
["alphabeticpresentationforms"] = { first = 0x0FB00, last = 0x0FB4F, otf="latn", description = "Alphabetic Presentation Forms" },
+ ["anatolianhieroglyphs"] = { first = 0x14400, last = 0x1467F, description = "Anatolian Hieroglyphs" },
["ancientgreekmusicalnotation"] = { first = 0x1D200, last = 0x1D24F, otf="grek", description = "Ancient Greek Musical Notation" },
["ancientgreeknumbers"] = { first = 0x10140, last = 0x1018F, otf="grek", description = "Ancient Greek Numbers" },
["ancientsymbols"] = { first = 0x10190, last = 0x101CF, otf="grek", description = "Ancient Symbols" },
@@ -175,6 +216,7 @@ local blocks = allocate {
["chakma"] = { first = 0x11100, last = 0x1114F, description = "Chakma" },
["cham"] = { first = 0x0AA00, last = 0x0AA5F, description = "Cham" },
["cherokee"] = { first = 0x013A0, last = 0x013FF, otf="cher", description = "Cherokee" },
+ ["cherokeesupplement"] = { first = 0x0AB70, last = 0x0ABBF, description = "Cherokee Supplement" },
["cjkcompatibility"] = { first = 0x03300, last = 0x033FF, otf="hang", description = "CJK Compatibility" },
["cjkcompatibilityforms"] = { first = 0x0FE30, last = 0x0FE4F, otf="hang", description = "CJK Compatibility Forms" },
["cjkcompatibilityideographs"] = { first = 0x0F900, last = 0x0FAFF, otf="hang", description = "CJK Compatibility Ideographs" },
@@ -187,6 +229,7 @@ local blocks = allocate {
["cjkunifiedideographsextensionb"] = { first = 0x20000, last = 0x2A6DF, otf="hang", description = "CJK Unified Ideographs Extension B" },
["cjkunifiedideographsextensionc"] = { first = 0x2A700, last = 0x2B73F, description = "CJK Unified Ideographs Extension C" },
["cjkunifiedideographsextensiond"] = { first = 0x2B740, last = 0x2B81F, description = "CJK Unified Ideographs Extension D" },
+ ["cjkunifiedideographsextensione"] = { first = 0x2B820, last = 0x2CEAF, description = "CJK Unified Ideographs Extension E" },
["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" },
["combiningdiacriticalmarksextended"] = { first = 0x01AB0, last = 0x01AFF, description = "Combining Diacritical Marks Extended" },
["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" },
@@ -236,6 +279,7 @@ local blocks = allocate {
["dingbats"] = { first = 0x02700, last = 0x027BF, description = "Dingbats" },
["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" },
["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" },
+ ["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" },
["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" },
["elbasan"] = { first = 0x10500, last = 0x1052F, description = "Elbasan" },
["emoticons"] = { first = 0x1F600, last = 0x1F64F, description = "Emoticons" },
@@ -248,8 +292,7 @@ local blocks = allocate {
["ethiopicextendeda"] = { first = 0x0AB00, last = 0x0AB2F, description = "Ethiopic Extended-A" },
["ethiopicsupplement"] = { first = 0x01380, last = 0x0139F, otf="ethi", description = "Ethiopic Supplement" },
["generalpunctuation"] = { first = 0x02000, last = 0x0206F, description = "General Punctuation" },
- ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, description = "Geometric Shapes" },
- ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, math = true },
+ ["geometricshapes"] = { first = 0x025A0, last = 0x025FF, math = true, description = "Geometric Shapes" },
["geometricshapesextended"] = { first = 0x1F780, last = 0x1F7FF, description = "Geometric Shapes Extended" },
["georgian"] = { first = 0x010A0, last = 0x010FF, otf="geor", description = "Georgian" },
["georgiansupplement"] = { first = 0x02D00, last = 0x02D2F, otf="geor", description = "Georgian Supplement" },
@@ -267,6 +310,7 @@ local blocks = allocate {
["hanguljamoextendedb"] = { first = 0x0D7B0, last = 0x0D7FF, description = "Hangul Jamo Extended-B" },
["hangulsyllables"] = { first = 0x0AC00, last = 0x0D7AF, otf="hang", description = "Hangul Syllables" },
["hanunoo"] = { first = 0x01720, last = 0x0173F, otf="hano", description = "Hanunoo" },
+ ["hatran"] = { first = 0x108E0, last = 0x108FF, description = "Hatran" },
["hebrew"] = { first = 0x00590, last = 0x005FF, otf="hebr", description = "Hebrew" },
["highprivateusesurrogates"] = { first = 0x0DB80, last = 0x0DBFF, description = "High Private Use Surrogates" },
["highsurrogates"] = { first = 0x0D800, last = 0x0DB7F, description = "High Surrogates" },
@@ -299,8 +343,7 @@ local blocks = allocate {
["latinextendede"] = { first = 0x0AB30, last = 0x0AB6F, description = "Latin Extended-E" },
["latinsupplement"] = { first = 0x00080, last = 0x000FF, otf="latn", description = "Latin-1 Supplement" },
["lepcha"] = { first = 0x01C00, last = 0x01C4F, description = "Lepcha" },
- ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, description = "Letterlike Symbols" },
- ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, math = true },
+ ["letterlikesymbols"] = { first = 0x02100, last = 0x0214F, math = true, description = "Letterlike Symbols" },
["limbu"] = { first = 0x01900, last = 0x0194F, otf="limb", description = "Limbu" },
["lineara"] = { first = 0x10600, last = 0x1077F, description = "Linear A" },
["linearbideograms"] = { first = 0x10080, last = 0x100FF, otf="linb", description = "Linear B Ideograms" },
@@ -352,6 +395,7 @@ local blocks = allocate {
["modifiertoneletters"] = { first = 0x0A700, last = 0x0A71F, description = "Modifier Tone Letters" },
["mongolian"] = { first = 0x01800, last = 0x018AF, otf="mong", description = "Mongolian" },
["mro"] = { first = 0x16A40, last = 0x16A6F, description = "Mro" },
+ ["multani"] = { first = 0x11280, last = 0x112AF, description = "Multani" },
["musicalsymbols"] = { first = 0x1D100, last = 0x1D1FF, otf="musc", description = "Musical Symbols" },
["myanmar"] = { first = 0x01000, last = 0x0109F, otf="mymr", description = "Myanmar" },
["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" },
@@ -362,6 +406,7 @@ local blocks = allocate {
["numberforms"] = { first = 0x02150, last = 0x0218F, description = "Number Forms" },
["ogham"] = { first = 0x01680, last = 0x0169F, otf="ogam", description = "Ogham" },
["olchiki"] = { first = 0x01C50, last = 0x01C7F, description = "Ol Chiki" },
+ ["oldhungarian"] = { first = 0x10C80, last = 0x10CFF, description = "Old Hungarian" },
["olditalic"] = { first = 0x10300, last = 0x1032F, otf="ital", description = "Old Italic" },
["oldnortharabian"] = { first = 0x10A80, last = 0x10A9F, description = "Old North Arabian" },
["oldpermic"] = { first = 0x10350, last = 0x1037F, description = "Old Permic" },
@@ -406,8 +451,10 @@ local blocks = allocate {
["supplementalarrowsc"] = { first = 0x1F800, last = 0x1F8FF, math = true, description = "Supplemental Arrows-C" },
["supplementalmathematicaloperators"] = { first = 0x02A00, last = 0x02AFF, math = true, description = "Supplemental Mathematical Operators" },
["supplementalpunctuation"] = { first = 0x02E00, last = 0x02E7F, description = "Supplemental Punctuation" },
+ ["supplementalsymbolsandpictographs"] = { first = 0x1F900, last = 0x1F9FF, description = "Supplemental Symbols and Pictographs" },
["supplementaryprivateuseareaa"] = { first = 0xF0000, last = 0xFFFFF, description = "Supplementary Private Use Area-A" },
["supplementaryprivateuseareab"] = { first = 0x100000,last = 0x10FFFF, description = "Supplementary Private Use Area-B" },
+ ["suttonsignwriting"] = { first = 0x1D800, last = 0x1DAAF, description = "Sutton SignWriting" },
["sylotinagri"] = { first = 0x0A800, last = 0x0A82F, otf="sylo", description = "Syloti Nagri" },
["syriac"] = { first = 0x00700, last = 0x0074F, otf="syrc", description = "Syriac" },
["tagalog"] = { first = 0x01700, last = 0x0171F, otf="tglg", description = "Tagalog" },
@@ -715,20 +762,27 @@ table we derive a few more.</p>
if not characters.fallbacks then
- characters.fallbacks = { } -- not than many
-
- local fallbacks = characters.fallbacks
+ characters.fallbacks = {
+ [0x0308] = 0x00A8, [0x00A8] = 0x0308, -- dieresiscmb dieresis
+ [0x0304] = 0x00AF, [0x00AF] = 0x0304, -- macroncmb macron
+ [0x0301] = 0x00B4, [0x00B4] = 0x0301, -- acutecomb acute
+ [0x0327] = 0x00B8, [0x00B8] = 0x0327, -- cedillacmb cedilla
+ [0x0302] = 0x02C6, [0x02C6] = 0x0302, -- circumflexcmb circumflex
+ [0x030C] = 0x02C7, [0x02C7] = 0x030C, -- caroncmb caron
+ [0x0306] = 0x02D8, [0x02D8] = 0x0306, -- brevecmb breve
+ [0x0307] = 0x02D9, [0x02D9] = 0x0307, -- dotaccentcmb dotaccent
+ [0x030A] = 0x02DA, [0x02DA] = 0x030A, -- ringcmb ring
+ [0x0328] = 0x02DB, [0x02DB] = 0x0328, -- ogonekcmb ogonek
+ [0x0303] = 0x02DC, [0x02DC] = 0x0303, -- tildecomb tilde
+ [0x030B] = 0x02DD, [0x02DD] = 0x030B, -- hungarumlautcmb hungarumlaut
+ [0x0305] = 0x203E, [0x203E] = 0x0305, -- overlinecmb overline
+ [0x0300] = 0x0060, [0x0060] = 0x0333, -- gravecomb grave
+ }
- for k, d in next, data do
- local specials = d.specials
- if specials and specials[1] == "compat" and specials[2] == 0x0020 then
- local s = specials[3]
- if s then
- fallbacks[k] = s
- fallbacks[s] = k
- end
- end
- end
+ -- not done (would mess up mapping):
+ --
+ -- 0X0301/0X0384 0X0314/0X1FFE 0X0313/0X1FBD 0X0313/0X1FBF 0X0342/0X1FC0
+ -- 0X3099/0X309B 0X309A/0X309C 0X0333/0X2017 0X0345/0X037A
end
@@ -1286,22 +1340,11 @@ if not characters.superscripts then
if storage then
storage.register("characters/superscripts", superscripts, "characters.superscripts")
storage.register("characters/subscripts", subscripts, "characters.subscripts")
- storage.register("characters/fractions", fractions, "characters.fractions")
+ storage.register("characters/fractions", fractions, "characters.fractions")
end
end
--- for the moment only a few
-
-local tracedchars = utilities.strings.tracers
-
-tracedchars[0x00] = "[signal]"
-tracedchars[0x0A] = "[linefeed]"
-tracedchars[0x0B] = "[tab]"
-tracedchars[0x0C] = "[formfeed]"
-tracedchars[0x0D] = "[return]"
-tracedchars[0x20] = "[space]"
-
function characters.showstring(str)
local list = utotable(str)
for i=1,#list do
diff --git a/Master/texmf-dist/tex/context/base/char-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/char-ini.mkiv
index 95ff7af5a43..8f5a8da8fc8 100644
--- a/Master/texmf-dist/tex/context/base/char-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-ini.mkiv
@@ -45,6 +45,11 @@
\def\utfchar #1{\clf_utfchar \numexpr#1\relax}
\def\safechar#1{\clf_safechar\numexpr#1\relax}
+\unexpanded\def\Ux #1{\Uchar\numexpr"#1\relax} % used in xml
+ \def\eUx#1{\Uchar\numexpr"#1\relax} % used in xml
+
+\unexpanded\def\expandUx{\let\Ux\eUx}
+
\def\checkedchar {\relax\ifmmode\expandafter\checkedmathchar\else\expandafter\checkedtextchar\fi} % #1#2
\def\checkedmathchar#1#2{#2}
%def\checkedtextchar #1{\iffontchar\font#1 \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi{\char#1}}
@@ -58,7 +63,7 @@
\else\iffontchar\font#1\relax
\char#1\relax
\else
- $\char#1$%
+ \normalstartimath\char#1\normalstopimath
\fi\fi}
%D The codes are stored in the format, so we don't need to reinitialize
@@ -90,4 +95,13 @@
\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}
+
+\unexpanded\def\overloaduppercase{\clf_overloaduppercase}
+\unexpanded\def\overloadlowercase{\clf_overloadlowercase}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/char-map.lua b/Master/texmf-dist/tex/context/base/mkiv/char-map.lua
index 749da5289bd..749da5289bd 100644
--- a/Master/texmf-dist/tex/context/base/char-map.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-map.lua
diff --git a/Master/texmf-dist/tex/context/base/char-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/char-tex.lua
index 2093c6d6c68..60f324be2b2 100644
--- a/Master/texmf-dist/tex/context/base/char-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-tex.lua
@@ -23,7 +23,6 @@ local mark = utilities.storage.mark
local context = context
local commands = commands
-local implement = interfaces.implement
local characters = characters
local texcharacters = { }
@@ -281,7 +280,7 @@ local commandmapping = allocate {
["l"] = "ł", ["L"] = "Ł",
["o"] = "ø", ["O"] = "Ø",
["oe"] = "œ", ["OE"] = "Œ",
- ["sz"] = "ß", ["SZ"] = "SZ", ["ss"] = "ß", ["SS"] = "ß",
+ ["sz"] = "ß", ["SZ"] = "SZ", ["ss"] = "ß", ["SS"] = "ß", -- uppercase: ẞ
}
texcharacters.commandmapping = commandmapping
@@ -419,6 +418,10 @@ end
-- all kind of initializations
+if not interfaces then return end
+
+local implement = interfaces.implement
+
local tex = tex
local texsetlccode = tex.setlccode
local texsetuccode = tex.setuccode
@@ -774,3 +777,46 @@ 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 }
+
+-- experiment (some can move to char-ini.lua)
+
+local function overload(c,u,code,codes)
+ local c = tonumber(c)
+ if not c then
+ return
+ end
+ local u = utilities.parsers.settings_to_array(u)
+ local n = #u
+ if n == 0 then
+ return
+ end
+ local t = nil
+ if n == 1 then
+ t = tonumber(u[1])
+ else
+ t = { }
+ for i=1,n do
+ t[#t+1] = tonumber(u[i])
+ end
+ end
+ if t then
+ data[c][code] = t
+ characters[codes][c] = nil
+ end
+end
+
+interfaces.implement {
+ name = "overloaduppercase",
+ arguments = { "string", "string" },
+ actions = function(c,u)
+ overload(c,u,"uccode","uccodes")
+ end
+}
+
+interfaces.implement {
+ name = "overloadlowercase",
+ arguments = { "string", "string" },
+ actions = function(c,u)
+ overload(c,u,"lccode","lccodes")
+ end
+}
diff --git a/Master/texmf-dist/tex/context/base/char-utf.lua b/Master/texmf-dist/tex/context/base/mkiv/char-utf.lua
index 381602ededb..327529c32b6 100644
--- a/Master/texmf-dist/tex/context/base/char-utf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-utf.lua
@@ -166,7 +166,7 @@ characters.decomposed = decomposed
-- characters.initialize = function() end -- when used outside tex
-- end
-local function initialize()
+local function initialize() -- maybe in tex mode store in format !
local data = characters.data
local function backtrack(v,last,target)
local vs = v.specials
@@ -177,6 +177,22 @@ local function initialize()
backtrack(data[one],second,target)
end
end
+ local function setpair(one,two,unicode,first,second,combination)
+ local mps = mathpairs[one]
+ if not mps then
+ mps = { [two] = unicode }
+ mathpairs[one] = mps
+ else
+ mps[two] = unicode
+ end
+ local mps = mathpairs[first]
+ if not mps then
+ mps = { [second] = combination }
+ mathpairs[first] = mps
+ else
+ mps[second] = combination
+ end
+ end
for unicode, v in next, data do
local vs = v.specials
if vs and #vs == 3 and vs[1] == "char" then
@@ -196,22 +212,15 @@ local function initialize()
end
--
if v.mathclass or v.mathspec then
- local mps = mathpairs[two]
- if not mps then
- mps = { [one] = unicode }
- mathpairs[two] = mps
- else
- mps[one] = unicode -- here unicode
- end
- local mps = mathpairs[second]
- if not mps then
- mps = { [first] = combination }
- mathpairs[second] = mps
- else
- mps[first] = combination
- end
+ setpair(two,one,unicode,second,first,combination) -- watch order
end
end
+ local mp = v.mathpair
+ if mp then
+ local one, two = mp[1], mp[2]
+ local first, second, combination = utfchar(one), utfchar(two), utfchar(unicode)
+ setpair(one,two,unicode,first,second,combination)
+ end
end
initialize = false
characters.initialize = function() end
diff --git a/Master/texmf-dist/tex/context/base/char-utf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/char-utf.mkiv
index fe9f402ef23..fe9f402ef23 100644
--- a/Master/texmf-dist/tex/context/base/char-utf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/char-utf.mkiv
diff --git a/Master/texmf-dist/tex/context/base/chem-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/chem-ini.lua
index f7d10ffa272..f7d10ffa272 100644
--- a/Master/texmf-dist/tex/context/base/chem-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/chem-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/chem-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/chem-ini.mkiv
index 9a44b4f1aee..d18ba47a10a 100644
--- a/Master/texmf-dist/tex/context/base/chem-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/chem-ini.mkiv
@@ -10,12 +10,16 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% todo: \mathscriptsmode
+
\writestatus{loading}{ConTeXt Chemistry Macros / Initialization} % might become Inline
\registerctxluafile{chem-ini}{1.001}
\unprotect
+% todo: use \mathscriptsmode if needed
+
%D \macros
%D {molecule}
%D
diff --git a/Master/texmf-dist/tex/context/base/chem-str.lua b/Master/texmf-dist/tex/context/base/mkiv/chem-str.lua
index d724394bb1d..e90464ad2ed 100644
--- a/Master/texmf-dist/tex/context/base/chem-str.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/chem-str.lua
@@ -234,6 +234,7 @@ local syntax = {
space = { direct = 'chem_symbol("\\chemicalsymbol[space]");' },
plus = { direct = 'chem_symbol("\\chemicalsymbol[plus]");' },
minus = { direct = 'chem_symbol("\\chemicalsymbol[minus]");' },
+ equals = { direct = 'chem_symbol("\\chemicalsymbol[equals]");' },
gives = { direct = formatters['chem_symbol("\\chemicalsymbol[gives]{%s}{%s}");'], arguments = 2 },
equilibrium = { direct = formatters['chem_symbol("\\chemicalsymbol[equilibrium]{%s}{%s}");'], arguments = 2 },
mesomeric = { direct = formatters['chem_symbol("\\chemicalsymbol[mesomeric]{%s}{%s}");'], arguments = 2 },
@@ -846,17 +847,22 @@ implement {
}
-- todo: top / bottom
--- maybe add "=" for double and "≡" for triple?
+-- note that "<->" here differs from ppchtex
local inline = {
- ["single"] = "\\chemicalsinglebond", ["-"] = "\\chemicalsinglebond",
- ["double"] = "\\chemicaldoublebond", ["--"] = "\\chemicaldoublebond",
- ["triple"] = "\\chemicaltriplebond", ["---"] = "\\chemicaltriplebond",
- ["gives"] = "\\chemicalgives", ["->"] = "\\chemicalgives",
- ["equilibrium"] = "\\chemicalequilibrium", ["<->"] = "\\chemicalequilibrium",
- ["mesomeric"] = "\\chemicalmesomeric", ["<>"] = "\\chemicalmesomeric",
- ["plus"] = "\\chemicalplus", ["+"] = "\\chemicalplus",
+ ["single"] = "\\chemicalsinglebond", ["-"] = "\\chemicalsinglebond",
+ ["double"] = "\\chemicaldoublebond", ["--"] = "\\chemicaldoublebond",
+ ["="] = "\\chemicaldoublebond",
+ ["triple"] = "\\chemicaltriplebond", ["---"] = "\\chemicaltriplebond",
+ ["≡"] = "\\chemicaltriplebond",
+ ["gives"] = "\\chemicalgives", ["->"] = "\\chemicalgives",
+ ["equilibrium"] = "\\chemicalequilibrium", ["<-->"] = "\\chemicalequilibrium",
+ ["<=>"] = "\\chemicalequilibrium",
+ ["mesomeric"] = "\\chemicalmesomeric", ["<>"] = "\\chemicalmesomeric",
+ ["<->"] = "\\chemicalmesomeric",
+ ["plus"] = "\\chemicalplus", ["+"] = "\\chemicalplus",
["minus"] = "\\chemicalminus",
+ ["equals"] = "\\chemicalequals",
["space"] = "\\chemicalspace",
}
diff --git a/Master/texmf-dist/tex/context/base/chem-str.mkiv b/Master/texmf-dist/tex/context/base/mkiv/chem-str.mkiv
index f18b422f266..a0b0a932734 100644
--- a/Master/texmf-dist/tex/context/base/chem-str.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/chem-str.mkiv
@@ -54,9 +54,11 @@
\installcorenamespace{chemicalframed}
\installcorenamespace{chemicalsize}
-\installsimplecommandhandler \??chemical {chemical} \??chemical % no \define...
+% \installsimplecommandhandler \??chemical {chemical} \??chemical % no \define...
+\installcommandhandler \??chemical {chemical} \??chemical % no \define...
-\let\setupchemicals\setupchemical
+\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
@@ -142,7 +144,7 @@
{\dodoubleempty\chem_start}
\def\chem_start[#1][#2]%
- {\ifmmode\vcenter\else\vbox\fi
+ {\ifmmode\vcenter\else\vbox\fi % vpack ?
\bgroup
\synchronizestrut{\chemicalparameter\c!strut}%
\dontcomplain
@@ -159,7 +161,7 @@
{\edef\currentchemical{#1}}%
\fi\fi
\the\everystructurechemical
- \setbox\b_chem_result\hbox\bgroup
+ \setbox\b_chem_result\hpack\bgroup
\clf_startchemical
width {\chemicalparameter\c!width}%
height {\chemicalparameter\c!height}%
@@ -196,12 +198,12 @@
[\c!frame=\chemicalparameter\c!frame,
\c!rulethickness=\chemicalparameter\c!rulethickness,
\c!framecolor=\chemicalparameter\c!framecolor]%
- {\vbox{\box\b_chem_result\vss}}} % remove depth
+ {\vpack{\box\b_chem_result\vss}}} % remove depth
\unexpanded\def\chem_framed_nop
{\directlocalframed
[\??chemicalframed]%
- {\vbox{\box\b_chem_result\vss}}} % remove depth
+ {\vpack{\box\b_chem_result\vss}}} % remove depth
\let\startstructurechemical\startchemical
\let\stopstructurechemical \stopchemical
@@ -240,7 +242,7 @@
\ignorespaces}
\appendtoks
- \setbox\b_chem_result\hbox{\raise\MPlly\box\b_chem_result}%
+ \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
@@ -269,17 +271,17 @@
\to \everystructurechemical
\def\chem_add_texts
- {\setbox2\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_mid_text}\hss}%
- \setbox4\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_top_text}\hss}%
- \setbox6\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_bot_text}\hss}%
- \setbox\b_chem_result\hbox \bgroup
+ {\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\hbox{\lower\ht4\box4}%
+ \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 \hbox{\raise\dp6\box6}%
+ \lower\d_chem_depth \hpack{\raise\dp6\box6}%
\hss
\egroup} % text on top of chemicals
@@ -331,7 +333,7 @@
{\let\chem_box_visual_yes\hbox \let\chem_box_visual_nop\relax }
\def\chem_top_construct#1#2#3#4%
- {\hbox\bgroup
+ {\hpack\bgroup
\setstrut
\setbox\scratchboxone\chem_box_visual_yes{\strut#3}%
\setbox\scratchboxtwo\chem_box_visual_yes{\strut\molecule{#4}}%
@@ -342,7 +344,7 @@
\egroup}
\def\chem_bottom_construct#1#2#3#4%
- {\hbox\bgroup
+ {\hpack\bgroup
\setstrut
\setbox\scratchboxone\chem_box_visual_yes{\strut#3}%
\setbox\scratchboxtwo\chem_box_visual_yes{\strut\molecule{#4}}%
@@ -353,14 +355,14 @@
\egroup}
\unexpanded\def\chemicalleft#1#2% redundant boxes thanks to visual
- {\hbox\bgroup
+ {\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
+ {\hbox\bgroup % hpack ?
\setstrut
\chem_box_visual_yes{\strut#2}%
\rlap{\chem_box_visual_nop{\strut#1}}%
@@ -440,7 +442,7 @@
\unexpanded\def\chemicaloxidationseven{\chemicaloxidation\relax7}
\unexpanded\def\chemicalbar
- {\hbox \s!spread .5\emwidth \bgroup
+ {\hpack \s!spread .5\emwidth \bgroup
\hss
\vrule \s!height .9\strutht \s!depth .65\strutdp \s!width .1\exheight
\hss
@@ -538,17 +540,18 @@
\hbox{\usechemicalstyleandcolor\c!style\c!color\clf_inlinechemical{#1}}}
\unexpanded\def\chemicalbondrule
- {\hbox{\vrule\s!height.75\exheight\s!depth-\dimexpr.75\exheight-\linewidth\relax\s!width\emwidth\relax}}
+ {\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] [\hbox{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}]
-\definechemicalsymbol[i:triple] [\hbox{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\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]}
@@ -558,6 +561,7 @@
\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}
@@ -608,18 +612,20 @@
\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] [\hbox{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}]
-\definechemicalsymbol[d:triple] [\hbox{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\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]}]
diff --git a/Master/texmf-dist/tex/context/base/cldf-bas.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-bas.lua
index 1067a17d57e..1067a17d57e 100644
--- a/Master/texmf-dist/tex/context/base/cldf-bas.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-bas.lua
diff --git a/Master/texmf-dist/tex/context/base/cldf-bas.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cldf-bas.mkiv
index f8b5b5d6a3c..f8b5b5d6a3c 100644
--- a/Master/texmf-dist/tex/context/base/cldf-bas.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-bas.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cldf-com.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-com.lua
index bd357b712b2..bd357b712b2 100644
--- a/Master/texmf-dist/tex/context/base/cldf-com.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-com.lua
diff --git a/Master/texmf-dist/tex/context/base/cldf-com.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cldf-com.mkiv
index 49190988893..49190988893 100644
--- a/Master/texmf-dist/tex/context/base/cldf-com.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-com.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cldf-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-ini.lua
index da284ba5ead..0c39f72f55d 100644
--- a/Master/texmf-dist/tex/context/base/cldf-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-ini.lua
@@ -6,6 +6,15 @@ if not modules then modules = { } end modules ['cldf-ini'] = {
license = "see context related readme files"
}
+-- also see cldf-tod.* !
+-- old code moved to cldf-old.lua
+
+-- maybe:
+--
+-- 0.528 local foo = tex.ctxcatcodes
+-- 0.651 local foo = getcount("ctxcatcodes")
+-- 0.408 local foo = getcount(ctxcatcodes) -- local ctxcatcodes = tex.iscount("ctxcatcodes")
+
-- This started as an experiment: generating context code at the lua end. After all
-- it is surprisingly simple to implement due to metatables. I was wondering if
-- there was a more natural way to deal with commands at the lua end. Of course it's
@@ -32,7 +41,7 @@ if not modules then modules = { } end modules ['cldf-ini'] = {
-- context(string.formatters["%!tex!"]("${}"))
-- context("%!tex!","${}")
-local format, validstring, stripstring = string.format, string.valid, string.strip
+local format, stripstring = string.format, string.strip
local next, type, tostring, tonumber, setmetatable, unpack, select, rawset = next, type, tostring, tonumber, setmetatable, unpack, select, rawset
local insert, remove, concat = table.insert, table.remove, table.concat
local lpegmatch, lpegC, lpegS, lpegP, lpegV, lpegCc, lpegCs, patterns = lpeg.match, lpeg.C, lpeg.S, lpeg.P, lpeg.V, lpeg.Cc, lpeg.Cs, lpeg.patterns
@@ -49,12 +58,15 @@ local interfaces = interfaces
local loaddata = io.loaddata
local tex = tex
-local texsprint = tex.sprint
-local texprint = tex.print
-local texwrite = tex.write
+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 -- after 0.65 just node.type
+-- local function texsprint(...) print("sprint",...) tex.sprint(...) end
+-- local function texprint (...) print("print", ...) tex.print (...) end
+
+local isnode = node.is_node
local writenode = node.write
local copynodelist = node.copy_list
@@ -67,9 +79,9 @@ local txtcatcodes = catcodenumbers.txtcatcodes
local vrbcatcodes = catcodenumbers.vrbcatcodes
local xmlcatcodes = catcodenumbers.xmlcatcodes
-local flush = texsprint
-local flushdirect = texprint
-local flushraw = texwrite
+local flush = texsprint -- snippets
+local flushdirect = texprint -- lines
+----- flushraw = texwrite
local report_context = logs.reporter("cld","tex")
local report_cld = logs.reporter("cld","stack")
@@ -181,7 +193,7 @@ local registerfunction, unregisterfunction, reservefunction, knownfunctions, cal
local f_resolve = nil
local p_resolve = ((1-lpegP("."))^1 / function(s) f_resolve = f_resolve[s] end * lpegP(".")^0)^1
- function resolvestoredfunction(str)
+ local function resolvestoredfunction(str)
f_resolve = global
lpegmatch(p_resolve,str)
return f_resolve
@@ -207,6 +219,7 @@ local registerfunction, unregisterfunction, reservefunction, knownfunctions, cal
local slot = slots[i]
local data = storedfunctions[slot]
luafunctions[slot] = function(...)
+ -- print(data) -- could be trace
return expose(slot,data,...)
end
end
@@ -311,7 +324,6 @@ local registerfunction, unregisterfunction, reservefunction, knownfunctions, cal
interfaces.storedscanners = interfaces.storedscanners or { }
local storedscanners = interfaces.storedscanners
-
storage.register("interfaces/storedscanners", storedscanners, "interfaces.storedscanners")
local interfacescanners = table.setmetatablenewindex(function(t,k,v)
@@ -474,17 +486,37 @@ local catcodes = {
xml = xmlcatcodes, xmlcatcodes = xmlcatcodes,
}
+-- maybe just increment / decrement
+
+-- local function pushcatcodes(c)
+-- insert(catcodestack,currentcatcodes)
+-- currentcatcodes = (c and catcodes[c] or tonumber(c)) or currentcatcodes
+-- contentcatcodes = currentcatcodes
+-- end
+--
+-- local function popcatcodes()
+-- currentcatcodes = remove(catcodestack) or currentcatcodes
+-- contentcatcodes = currentcatcodes
+-- end
+
+local catcodelevel = 0
+
local function pushcatcodes(c)
- insert(catcodestack,currentcatcodes)
+ catcodelevel = catcodelevel + 1
+ catcodestack[catcodelevel] = currentcatcodes
currentcatcodes = (c and catcodes[c] or tonumber(c)) or currentcatcodes
contentcatcodes = currentcatcodes
end
local function popcatcodes()
- currentcatcodes = remove(catcodestack) or currentcatcodes
+ if catcodelevel > 0 then
+ currentcatcodes = catcodestack[catcodelevel] or currentcatcodes
+ catcodelevel = catcodelevel - 1
+ end
contentcatcodes = currentcatcodes
end
+context.catcodes = catcodes
context.pushcatcodes = pushcatcodes
context.popcatcodes = popcatcodes
@@ -669,36 +701,25 @@ function context.printlines(str,raw) -- todo: see if via file is useable
end
end
--- This is the most reliable way to deal with nested buffers and other
--- catcode sensitive data.
-
-local methodhandler = resolvers.methodhandler
-
-function context.viafile(data,tag)
- if data and data ~= "" then
- local filename = resolvers.savers.byscheme("virtual",validstring(tag,"viafile"),data)
- -- context.startregime { "utf" }
- context.input(filename)
- -- context.stopregime()
- end
-end
-
-- -- -- "{" .. ti .. "}" is somewhat slower in a cld-mkiv run than "{",ti,"}"
local containseol = patterns.containseol
-local writer
+local writer = nil
+local prtwriter = nil
-if luafunctions then
+-- if luafunctions then
- writer = function (parent,command,first,...) -- already optimized before call
- local t = { first, ... }
+ writer = function (parent,command,...) -- already optimized before call
flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
local direct = false
- for i=1,#t do
- local ti = t[i]
- local typ = type(ti)
+ -- local t = { ... }
+ -- for i=1,#t do
+ -- local ti = t[i]
+ for i=1,select("#",...) do
+ local ti = (select(i,...))
if direct then
+ local typ = type(ti)
if typ == "string" or typ == "number" then
flush(currentcatcodes,ti)
else -- node.write
@@ -709,208 +730,279 @@ if luafunctions then
-- nothing
elseif ti == "" then
flush(currentcatcodes,"{}")
- elseif typ == "string" then
- -- is processelines seen ?
- if processlines and lpegmatch(containseol,ti) then
- flush(currentcatcodes,"{")
- local flushlines = parent.__flushlines or flushlines
- flushlines(ti)
- flush(currentcatcodes,"}")
- elseif currentcatcodes == contentcatcodes then
+ else
+ local typ = type(ti)
+ if typ == "string" then
+ -- is processlines seen ?
+ if processlines and lpegmatch(containseol,ti) then
+ flush(currentcatcodes,"{")
+ local flushlines = parent.__flushlines or flushlines
+ flushlines(ti)
+ flush(currentcatcodes,"}")
+ elseif currentcatcodes == contentcatcodes then
+ flush(currentcatcodes,"{",ti,"}")
+ else
+ flush(currentcatcodes,"{")
+ flush(contentcatcodes,ti)
+ flush(currentcatcodes,"}")
+ end
+ elseif typ == "number" then
+ -- numbers never have funny catcodes
flush(currentcatcodes,"{",ti,"}")
- else
- flush(currentcatcodes,"{")
- flush(contentcatcodes,ti)
- flush(currentcatcodes,"}")
- end
- elseif typ == "number" then
- -- numbers never have funny catcodes
- flush(currentcatcodes,"{",ti,"}")
- elseif typ == "table" then
- local tn = #ti
- if tn == 0 then
- local done = false
- for k, v in next, ti do
- if done then
- if v == "" then
- flush(currentcatcodes,",",k,'=')
+ elseif typ == "table" then
+ local tn = #ti
+ if tn == 0 then
+ local done = false
+ for k, v in next, ti do
+ if done then
+ if v == "" then
+ flush(currentcatcodes,",",k,'=')
+ else
+ flush(currentcatcodes,",",k,"={",v,"}")
+ end
else
- flush(currentcatcodes,",",k,"={",v,"}")
+ if v == "" then
+ flush(currentcatcodes,"[",k,"=")
+ else
+ flush(currentcatcodes,"[",k,"={",v,"}")
+ end
+ done = true
end
+ end
+ if done then
+ flush(currentcatcodes,"]")
else
- if v == "" then
- flush(currentcatcodes,"[",k,"=")
- else
- flush(currentcatcodes,"[",k,"={",v,"}")
- end
- done = true
+ flush(currentcatcodes,"[]")
end
- end
- if done then
- flush(currentcatcodes,"]")
- else
- flush(currentcatcodes,"[]")
- end
- elseif tn == 1 then -- some 20% faster than the next loop
- local tj = ti[1]
- if type(tj) == "function" then
- flush(currentcatcodes,"[\\cldl",storefunction(tj),"]")
- else
- flush(currentcatcodes,"[",tj,"]")
- end
- else -- is concat really faster than flushes here? probably needed anyway (print artifacts)
- flush(currentcatcodes,"[")
- for j=1,tn do
- local tj = ti[j]
+ elseif tn == 1 then -- some 20% faster than the next loop
+ local tj = ti[1]
if type(tj) == "function" then
- if j == tn then
- flush(currentcatcodes,"\\cldl",storefunction(tj),"]")
- else
- flush(currentcatcodes,"\\cldl",storefunction(tj),",")
- end
+ flush(currentcatcodes,"[\\cldl",storefunction(tj),"]")
+ -- flush(currentcatcodes,"[",storefunction(tj),"]")
else
- if j == tn then
- flush(currentcatcodes,tj,"]")
+ flush(currentcatcodes,"[",tj,"]")
+ end
+ else -- is concat really faster than flushes here? probably needed anyway (print artifacts)
+ flush(currentcatcodes,"[")
+ for j=1,tn do
+ local tj = ti[j]
+ if type(tj) == "function" then
+ if j == tn then
+ flush(currentcatcodes,"\\cldl",storefunction(tj),"]")
+ -- flush(currentcatcodes,"",storefunction(tj),"]")
+ else
+ flush(currentcatcodes,"\\cldl",storefunction(tj),",")
+ -- flush(currentcatcodes,"",storefunction(tj),",")
+ end
else
- flush(currentcatcodes,tj,",")
+ if j == tn then
+ flush(currentcatcodes,tj,"]")
+ else
+ flush(currentcatcodes,tj,",")
+ end
end
end
end
- end
- elseif typ == "function" then
- flush(currentcatcodes,"{\\cldl ",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
- elseif typ == "boolean" then
- if ti then
- flushdirect(currentcatcodes,"\r")
+ elseif typ == "function" then
+ flush(currentcatcodes,"{\\cldl ",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
+ -- flush(currentcatcodes,"{",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
+ elseif typ == "boolean" then
+ if ti then
+ flushdirect(currentcatcodes,"\r")
+ else
+ direct = true
+ end
+ elseif typ == "thread" then
+ report_context("coroutines not supported as we cannot yield across boundaries")
+ elseif isnode(ti) then -- slow
+ flush(currentcatcodes,"{\\cldl",storenode(ti),"}")
+ -- flush(currentcatcodes,"{",storenode(ti),"}")
else
- direct = true
+ report_context("error: %a gets a weird argument %a",command,ti)
end
- elseif typ == "thread" then
- report_context("coroutines not supported as we cannot yield across boundaries")
- elseif isnode(ti) then -- slow
- flush(currentcatcodes,"{\\cldl",storenode(ti),"}")
- else
- report_context("error: %a gets a weird argument %a",command,ti)
end
end
end
-else
+ -- if performance really matters we can consider a compiler but it will never
+ -- pay off
- writer = function (parent,command,first,...) -- already optimized before call
- local t = { first, ... }
- flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
- local direct = false
- for i=1,#t do
- local ti = t[i]
- local typ = type(ti)
- if direct then
- if typ == "string" or typ == "number" then
- flush(currentcatcodes,ti)
- else -- node.write
- report_context("error: invalid use of direct in %a, only strings and numbers can be flushed directly, not %a",command,typ)
- end
- direct = false
- elseif ti == nil then
+ prtwriter = function (command,...) -- already optimized before call
+ flush(prtcatcodes,command)
+ for i=1,select("#",...) do
+ local ti = (select(i,...))
+ if ti == nil then
-- nothing
elseif ti == "" then
- flush(currentcatcodes,"{}")
- elseif typ == "string" then
- -- is processelines seen ?
- if processlines and lpegmatch(containseol,ti) then
- flush(currentcatcodes,"{")
- local flushlines = parent.__flushlines or flushlines
- flushlines(ti)
- flush(currentcatcodes,"}")
- elseif currentcatcodes == contentcatcodes then
- flush(currentcatcodes,"{",ti,"}")
- else
- flush(currentcatcodes,"{")
- flush(contentcatcodes,ti)
- flush(currentcatcodes,"}")
- end
- elseif typ == "number" then
- -- numbers never have funny catcodes
- flush(currentcatcodes,"{",ti,"}")
- elseif typ == "table" then
- local tn = #ti
- if tn == 0 then
- local done = false
- for k, v in next, ti do
- if done then
- if v == "" then
- flush(currentcatcodes,",",k,'=')
- else
- flush(currentcatcodes,",",k,"={",v,"}")
- end
- else
- if v == "" then
- flush(currentcatcodes,"[",k,"=")
- else
- flush(currentcatcodes,"[",k,"={",v,"}")
- end
- done = true
- end
- end
- if done then
- flush(currentcatcodes,"]")
- else
- flush(currentcatcodes,"[]")
- end
- elseif tn == 1 then -- some 20% faster than the next loop
- local tj = ti[1]
- if type(tj) == "function" then
- flush(currentcatcodes,"[\\cldf{",storefunction(tj),"}]")
- else
- flush(currentcatcodes,"[",tj,"]")
- end
- else -- is concat really faster than flushes here? probably needed anyway (print artifacts)
- for j=1,tn do
- local tj = ti[j]
- if type(tj) == "function" then
- ti[j] = "\\cldf{" .. storefunction(tj) .. "}"
- end
- end
- flush(currentcatcodes,"[",concat(ti,","),"]")
- end
- elseif typ == "function" then
- flush(currentcatcodes,"{\\cldf{",storefunction(ti),"}}") -- todo: ctx|prt|texcatcodes
- elseif typ == "boolean" then
- if ti then
- flushdirect(currentcatcodes,"\r")
+ flush(prtcatcodes,"{}")
+ else
+ local tp = type(ti)
+ if tp == "string" or tp == "number"then
+ flush(prtcatcodes,"{",ti,"}")
+ elseif tp == "function" then
+ flush(prtcatcodes,"{\\cldl ",storefunction(ti),"}")
+ -- flush(currentcatcodes,"{",storefunction(ti),"}") -- todo: ctx|prt|texcatcodes
+ elseif isnode(ti) then
+ flush(prtcatcodes,"{\\cldl",storenode(ti),"}")
+ -- flush(currentcatcodes,"{",storenode(ti),"}")
else
- direct = true
+ report_context("fatal error: prt %a gets a weird argument %a",command,ti)
end
- elseif typ == "thread" then
- report_context("coroutines not supported as we cannot yield across boundaries")
- elseif isnode(ti) then -- slow
- flush(currentcatcodes,"{\\cldn{",storenode(ti),"}}")
- else
- report_context("error: %a gets a weird argument %a",command,ti)
end
end
end
-end
+-- else
+--
+-- writer = function (parent,command,first,...) -- already optimized before call
+-- local t = { first, ... }
+-- flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes
+-- local direct = false
+-- for i=1,#t do
+-- local ti = t[i]
+-- local typ = type(ti)
+-- if direct then
+-- if typ == "string" or typ == "number" then
+-- flush(currentcatcodes,ti)
+-- else -- node.write
+-- report_context("error: invalid use of direct in %a, only strings and numbers can be flushed directly, not %a",command,typ)
+-- end
+-- direct = false
+-- elseif ti == nil then
+-- -- nothing
+-- elseif ti == "" then
+-- flush(currentcatcodes,"{}")
+-- elseif typ == "string" then
+-- -- is processelines seen ?
+-- if processlines and lpegmatch(containseol,ti) then
+-- flush(currentcatcodes,"{")
+-- local flushlines = parent.__flushlines or flushlines
+-- flushlines(ti)
+-- flush(currentcatcodes,"}")
+-- elseif currentcatcodes == contentcatcodes then
+-- flush(currentcatcodes,"{",ti,"}")
+-- else
+-- flush(currentcatcodes,"{")
+-- flush(contentcatcodes,ti)
+-- flush(currentcatcodes,"}")
+-- end
+-- elseif typ == "number" then
+-- -- numbers never have funny catcodes
+-- flush(currentcatcodes,"{",ti,"}")
+-- elseif typ == "table" then
+-- local tn = #ti
+-- if tn == 0 then
+-- local done = false
+-- for k, v in next, ti do
+-- if done then
+-- if v == "" then
+-- flush(currentcatcodes,",",k,'=')
+-- else
+-- flush(currentcatcodes,",",k,"={",v,"}")
+-- end
+-- else
+-- if v == "" then
+-- flush(currentcatcodes,"[",k,"=")
+-- else
+-- flush(currentcatcodes,"[",k,"={",v,"}")
+-- end
+-- done = true
+-- end
+-- end
+-- if done then
+-- flush(currentcatcodes,"]")
+-- else
+-- flush(currentcatcodes,"[]")
+-- end
+-- elseif tn == 1 then -- some 20% faster than the next loop
+-- local tj = ti[1]
+-- if type(tj) == "function" then
+-- flush(currentcatcodes,"[\\cldf{",storefunction(tj),"}]")
+-- else
+-- flush(currentcatcodes,"[",tj,"]")
+-- end
+-- else -- is concat really faster than flushes here? probably needed anyway (print artifacts)
+-- for j=1,tn do
+-- local tj = ti[j]
+-- if type(tj) == "function" then
+-- ti[j] = "\\cldf{" .. storefunction(tj) .. "}"
+-- end
+-- end
+-- flush(currentcatcodes,"[",concat(ti,","),"]")
+-- end
+-- elseif typ == "function" then
+-- flush(currentcatcodes,"{\\cldf{",storefunction(ti),"}}") -- todo: ctx|prt|texcatcodes
+-- elseif typ == "boolean" then
+-- if ti then
+-- flushdirect(currentcatcodes,"\r")
+-- else
+-- direct = true
+-- end
+-- elseif typ == "thread" then
+-- report_context("coroutines not supported as we cannot yield across boundaries")
+-- elseif isnode(ti) then -- slow
+-- flush(currentcatcodes,"{\\cldn{",storenode(ti),"}}")
+-- else
+-- report_context("error: %a gets a weird argument %a",command,ti)
+-- end
+-- end
+-- end
+--
+-- end
-local generics = { } context.generics = generics
+local generics = { } context.generics = generics
+local indexer = nil
+local prtindexer = nil
-local function indexer(parent,k)
- if type(k) == "string" then
- local c = "\\" .. tostring(generics[k] or k)
- local f = function(first,...)
- if first == nil then
- flush(currentcatcodes,c)
- else
- return writer(parent,c,first,...)
+-- if environment.initex then
+
+ indexer = function(parent,k)
+ if type(k) == "string" then
+ local c = "\\" .. tostring(generics[k] or k)
+ local f = function(first,...)
+ if first == nil then
+ flush(currentcatcodes,c)
+ else
+ return writer(parent,c,first,...)
+ end
end
+ parent[k] = f
+ return f
+ else
+ return context -- catch
end
- parent[k] = f
- return f
- else
- return context -- catch
end
-end
+
+-- else
+--
+-- local create = token.create
+-- local twrite = token.write
+-- local setmacro = token.set_macro
+--
+-- indexer = function(parent,k)
+-- if type(k) == "string" then
+-- local s = tostring(generics[k] or k)
+-- local t = create(s)
+-- if t.cmdname == "undefined_cs" then
+-- report_cld("macro \\%s is not yet defined",s)
+-- token.set_macro(s,"")
+-- t = create(s)
+-- end
+-- local i = t.id
+-- local f = function(first,...)
+-- twrite(t.tok) --= we need to keep t uncollected
+-- if first ~= nil then
+-- return writer(parent,first,...)
+-- end
+-- end
+-- parent[k] = f
+-- return f
+-- else
+-- return context -- catch
+-- end
+-- end
+--
+-- end
-- Potential optimization: after the first call we know if there will be an
-- argument. Of course there is the side effect that for instance abuse like
@@ -945,33 +1037,54 @@ end
-- only for internal usage:
-function context.constructcsonly(k) -- not much faster than the next but more mem efficient
- local c = "\\" .. tostring(generics[k] or k)
- local v = function()
- flush(prtcatcodes,c)
- end
- rawset(context,k,v)
- return v
-end
+do
-function context.constructcs(k)
- local c = "\\" .. tostring(generics[k] or k)
- local v = function(first,...)
- if first == nil then
+ function context.constructcsonly(k) -- not much faster than the next but more mem efficient
+ local c = "\\" .. tostring(generics[k] or k)
+ local v = function()
flush(prtcatcodes,c)
- else
- return writer(context,c,first,...)
end
+ rawset(context,k,v) -- context namespace
+ return v
+ end
+
+ function context.constructcs(k)
+ local c = "\\" .. tostring(generics[k] or k)
+ local v = function(first,...)
+ if first == nil then
+ flush(prtcatcodes,c)
+ else
+ return prtwriter(c,first,...)
+ end
+ end
+ rawset(context,k,v) -- context namespace
+ return v
+ end
+
+ local function prtindexer(t,k)
+ local c = "\\" .. tostring(generics[k] or k)
+ local v = function(first,...)
+ if first == nil then
+ flush(prtcatcodes,c)
+ else
+ return prtwriter(c,first,...)
+ end
+ end
+ rawset(t,k,v) -- protected namespace
+ return v
end
- rawset(context,k,v)
- return v
+
+ context.protected = { } -- we could check for _ in the context namespace
+
+ setmetatable(context.protected, { __index = prtindexer, __call = prtwriter } )
+
end
-- local splitformatters = utilities.strings.formatters.new(true) -- not faster (yet)
local caller
-if luafunctions then
+-- if luafunctions then
caller = function(parent,f,a,...)
if not parent then
@@ -1002,6 +1115,7 @@ if luafunctions then
elseif typ == "function" then
-- ignored: a ...
flush(currentcatcodes,"{\\cldl",storefunction(f),"}") -- todo: ctx|prt|texcatcodes
+ -- flush(currentcatcodes,"{",storefunction(f),"}") -- todo: ctx|prt|texcatcodes
elseif typ == "boolean" then
if f then
if a ~= nil then
@@ -1023,6 +1137,7 @@ if luafunctions then
elseif isnode(f) then -- slow
-- writenode(f)
flush(currentcatcodes,"\\cldl",storenode(f)," ")
+ -- flush(currentcatcodes,"",storenode(f)," ")
else
report_context("error: %a gets a weird argument %a","context",f)
end
@@ -1031,71 +1146,72 @@ if luafunctions then
function context.flushnode(n)
flush(currentcatcodes,"\\cldl",storenode(n)," ")
+ -- flush(currentcatcodes,"",storenode(n)," ")
end
-else
-
- caller = function(parent,f,a,...)
- if not parent then
- -- so we don't need to test in the calling (slower but often no issue)
- elseif f ~= nil then
- local typ = type(f)
- if typ == "string" then
- if f == "" then
- -- new, can save a bit sometimes
- -- if trace_context then
- -- report_context("empty argument to context()")
- -- end
- elseif a then
- flush(contentcatcodes,formatters[f](a,...)) -- was currentcatcodes
- -- flush(contentcatcodes,splitformatters[f](a,...)) -- was currentcatcodes
- elseif processlines and lpegmatch(containseol,f) then
- local flushlines = parent.__flushlines or flushlines
- flushlines(f)
- else
- flush(contentcatcodes,f)
- end
- elseif typ == "number" then
- if a then
- flush(currentcatcodes,f,a,...)
- else
- flush(currentcatcodes,f)
- end
- elseif typ == "function" then
- -- ignored: a ...
- flush(currentcatcodes,"{\\cldf{",storefunction(f),"}}") -- todo: ctx|prt|texcatcodes
- elseif typ == "boolean" then
- if f then
- if a ~= nil then
- local flushlines = parent.__flushlines or flushlines
- flushlines(a)
- else
- flushdirect(currentcatcodes,"\n") -- no \r, else issues with \startlines ... use context.par() otherwise
- end
- else
- if a ~= nil then
- -- no command, same as context(a,...)
- writer(parent,"",a,...)
- else
- -- ignored
- end
- end
- elseif typ == "thread" then
- report_context("coroutines not supported as we cannot yield across boundaries")
- elseif isnode(f) then -- slow
- -- writenode(f)
- flush(currentcatcodes,"\\cldn{",storenode(f),"}")
- else
- report_context("error: %a gets a weird argument %a","context",f)
- end
- end
- end
-
- function context.flushnode(n)
- flush(currentcatcodes,"\\cldn{",storenode(n),"}")
- end
-
-end
+-- else
+--
+-- caller = function(parent,f,a,...)
+-- if not parent then
+-- -- so we don't need to test in the calling (slower but often no issue)
+-- elseif f ~= nil then
+-- local typ = type(f)
+-- if typ == "string" then
+-- if f == "" then
+-- -- new, can save a bit sometimes
+-- -- if trace_context then
+-- -- report_context("empty argument to context()")
+-- -- end
+-- elseif a then
+-- flush(contentcatcodes,formatters[f](a,...)) -- was currentcatcodes
+-- -- flush(contentcatcodes,splitformatters[f](a,...)) -- was currentcatcodes
+-- elseif processlines and lpegmatch(containseol,f) then
+-- local flushlines = parent.__flushlines or flushlines
+-- flushlines(f)
+-- else
+-- flush(contentcatcodes,f)
+-- end
+-- elseif typ == "number" then
+-- if a then
+-- flush(currentcatcodes,f,a,...)
+-- else
+-- flush(currentcatcodes,f)
+-- end
+-- elseif typ == "function" then
+-- -- ignored: a ...
+-- flush(currentcatcodes,"{\\cldf{",storefunction(f),"}}") -- todo: ctx|prt|texcatcodes
+-- elseif typ == "boolean" then
+-- if f then
+-- if a ~= nil then
+-- local flushlines = parent.__flushlines or flushlines
+-- flushlines(a)
+-- else
+-- flushdirect(currentcatcodes,"\n") -- no \r, else issues with \startlines ... use context.par() otherwise
+-- end
+-- else
+-- if a ~= nil then
+-- -- no command, same as context(a,...)
+-- writer(parent,"",a,...)
+-- else
+-- -- ignored
+-- end
+-- end
+-- elseif typ == "thread" then
+-- report_context("coroutines not supported as we cannot yield across boundaries")
+-- elseif isnode(f) then -- slow
+-- -- writenode(f)
+-- flush(currentcatcodes,"\\cldn{",storenode(f),"}")
+-- else
+-- report_context("error: %a gets a weird argument %a","context",f)
+-- end
+-- end
+-- end
+--
+-- function context.flushnode(n)
+-- flush(currentcatcodes,"\\cldn{",storenode(n),"}")
+-- end
+--
+-- end
local defaultcaller = caller
@@ -1154,12 +1270,14 @@ local trace_stack = { }
local normalflush = flush
local normalflushdirect = flushdirect
-local normalflushraw = flushraw
+----- normalflushraw = flushraw
local normalwriter = writer
local currenttrace = nil
local nofwriters = 0
local nofflushes = 0
+local tracingpermitted = true
+
local visualizer = lpeg.replacer {
{ "\n","<<newline>>" },
{ "\r","<<par>>" },
@@ -1180,15 +1298,24 @@ local tracedwriter = function(parent,...) -- also catcodes ?
local savedflush = flush
local savedflushdirect = flushdirect -- unlikely to be used here
local t, n = { "w : - : " }, 1
- local traced = function(normal,catcodes,...) -- todo: check for catcodes
+ local traced = function(catcodes,...) -- todo: check for catcodes
local s = concat({...})
s = lpegmatch(visualizer,s)
n = n + 1
t[n] = s
- normal(catcodes,...)
end
- flush = function(...) traced(normalflush, ...) end
- flushdirect = function(...) traced(normalflushdirect,...) end
+ flush = function(...)
+ normalflush(...)
+ if tracingpermitted then
+ traced(...)
+ end
+ end
+ flushdirect = function(...)
+ normalflushdirect(...)
+ if tracingpermitted then
+ traced(...)
+ end
+ end
normalwriter(parent,...)
flush = savedflush
flushdirect = savedflushdirect
@@ -1197,11 +1324,9 @@ end
-- we could reuse collapsed
-local traced = function(normal,one,two,...)
- nofflushes = nofflushes + 1
- if two then
+local traced = function(one,two,...)
+ if two ~= nil then
-- only catcodes if 'one' is number
- normal(one,two,...)
local catcodes = type(one) == "number" and one
local arguments = catcodes and { two, ... } or { one, two, ... }
local collapsed, c = { formatters["f : %s : "](catcodes or '-') }, 1
@@ -1218,9 +1343,8 @@ local traced = function(normal,one,two,...)
end
end
currenttrace(concat(collapsed))
- else
+ elseif one ~= nil then
-- no catcodes
- normal(one)
local argtype = type(one)
if argtype == "string" then
currenttrace(formatters["f : - : %s"](lpegmatch(visualizer,one)))
@@ -1232,8 +1356,29 @@ local traced = function(normal,one,two,...)
end
end
-local tracedflush = function(...) traced(normalflush, ...) end
-local tracedflushdirect = function(...) traced(normalflushdirect,...) end
+local tracedflush = function(one,two,...)
+ nofflushes = nofflushes + 1
+ if two ~= nil then
+ normalflush(one,two,...)
+ else
+ normalflush(one)
+ end
+ if tracingpermitted then
+ traced(one,two,...)
+ end
+end
+
+local tracedflushdirect = function(one,two,...)
+ nofflushes = nofflushes + 1
+ if two ~= nil then
+ normalflushdirect(one,two,...)
+ else
+ normalflushdirect(one)
+ end
+ if tracingpermitted then
+ traced(one,two,...)
+ end
+end
local function pushlogger(trace)
trace = trace or report_context
@@ -1307,6 +1452,94 @@ end
local trace_cld = false trackers.register("context.files", function(v) trace_cld = v end)
+do
+
+ -- This is the most reliable way to deal with nested buffers and other
+ -- catcode sensitive data.
+
+ local resolve = resolvers.savers.byscheme
+ local validstring = string.valid
+ local input = context.input
+
+ local function viafile(data,tag)
+ if data and data ~= "" then
+ local filename = resolve("virtual",validstring(tag,"viafile"),data)
+ -- context.startregime { "utf" }
+ input(filename)
+ -- context.stopregime()
+ end
+ end
+
+ context.viafile = viafile
+
+ -- experiment for xtables, don't use it elsewhere yet
+
+ local collected = nil
+ local nofcollected = 0
+ local sentinel = string.char(26) -- ASCII SUB character : endoffileasciicode : ignorecatcode
+ local level = 0
+
+ local function collect(c,...) -- can be optimized
+ -- snippets
+ for i=1,select("#",...) do
+ nofcollected = nofcollected + 1
+ collected[nofcollected] = (select(i,...))
+ end
+ end
+
+ -- local function collectdirect(c,...) -- can be optimized
+ -- -- lines
+ -- for i=1,select("#",...) do
+ -- n = n + 1
+ -- t[n] = (select(i,...))
+ -- n = n + 1
+ -- t[n] = "\r"
+ -- end
+ -- end
+
+ local collectdirect = collect
+ local permitted = true
+
+ -- doesn't work well with tracing do we need to avoid that when
+ -- collecting stuff
+
+ function context.startcollecting()
+ if level == 0 then
+ collected = { }
+ nofcollected = 0
+ --
+ flush = collect
+ flushdirect = collectdirect
+ permitted = tracingpermitted
+ --
+ context.__flush = flush
+ context.__flushdirect = flushdirect
+ end
+ level = level + 1
+ end
+
+ function context.stopcollecting()
+ level = level - 1
+ if level < 1 then
+ flush = normalflush
+ flushdirect = normalflushdirect
+ tracingpermitted = permitted
+ --
+ context.__flush = flush
+ context.__flushdirect = flushdirect
+ --
+ viafile(concat(collected,sentinel))
+ --
+ collected = nil
+ nofcollected = 0
+ level = 0
+ end
+ end
+
+end
+
+--
+
function context.runfile(filename)
local foundname = resolvers.findtexfile(file.addsuffix(filename,"cld")) or ""
if foundname ~= "" then
@@ -1407,7 +1640,7 @@ setmetatable(delayed, { __index = indexer, __call = caller } )
local nested = { } context.nested = nested -- creates strings
-local function indexer(parent,k)
+local function indexer(parent,k) -- not ok when traced
local f = function(...)
local t, savedflush, n = { }, flush, 0
flush = function(c,f,s,...) -- catcodes are ignored
@@ -1547,8 +1780,8 @@ local function caller(parent,f,a,...)
end
elseif typ == "function" then
-- ignored: a ...
--- flush(currentcatcodes,mpdrawing,"{\\cldf{",store_(f),"}}")
flush(currentcatcodes,mpdrawing,"{\\cldl",store_(f),"}")
+ -- flush(currentcatcodes,mpdrawing,"{",store_(f),"}")
elseif typ == "boolean" then
-- ignored: a ...
if f then
@@ -1608,6 +1841,12 @@ function context.concat(...)
context(concat(...))
end
+local p_texescape = patterns.texescape
+
+function context.escaped(s)
+ return lpegmatch(p_texescape,s) or s
+end
+
-- templates
local single = lpegP("%")
diff --git a/Master/texmf-dist/tex/context/base/cldf-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cldf-ini.mkiv
index 12ada138318..a985f204ed6 100644
--- a/Master/texmf-dist/tex/context/base/cldf-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-ini.mkiv
@@ -33,15 +33,17 @@
% \zerocount removes as it's the default
-\def\cldf#1{\directlua{_cldf_(#1)}} % global (functions)
-\def\cldn#1{\directlua{_cldn_(#1)}} % global (nodes)
-
-\ifx\luafunction\undefined
- \def\luafunction#1{\directlua{_cldl_(#1)}}
-\fi
+% \def\cldf#1{\directlua{_cldf_(#1)}} % global (functions)
+% \def\cldn#1{\directlua{_cldn_(#1)}} % global (nodes)
+%
+% \ifx\luafunction\undefined
+% \def\luafunction#1{\directlua{_cldl_(#1)}}
+% \fi
\let\cldl\luafunction
+% \catcode`=\activecatcode \let\luafunction % saves 10% on the call
+
% \catcodetable\ctxcatcodes \catcode`^=\superscriptcatcode\catcode1=\activecatcode \global\let^^A=\cldf
% \catcodetable\ctxcatcodes \catcode`^=\superscriptcatcode\catcode2=\activecatcode \global\let^^B=\cldn
diff --git a/Master/texmf-dist/tex/context/base/cldf-int.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-int.lua
index 2743e49243b..2743e49243b 100644
--- a/Master/texmf-dist/tex/context/base/cldf-int.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-int.lua
diff --git a/Master/texmf-dist/tex/context/base/cldf-int.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cldf-int.mkiv
index da684694aee..da684694aee 100644
--- a/Master/texmf-dist/tex/context/base/cldf-int.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-int.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cldf-prs.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-prs.lua
index 3c3836a3ee8..3c3836a3ee8 100644
--- a/Master/texmf-dist/tex/context/base/cldf-prs.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-prs.lua
diff --git a/Master/texmf-dist/tex/context/base/cldf-scn.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-scn.lua
index 5f7e0c74bbd..755d7fed7b3 100644
--- a/Master/texmf-dist/tex/context/base/cldf-scn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-scn.lua
@@ -149,6 +149,8 @@ end
-- it's convenient to have copies here:
+interfaces.defined = tokens.defined
+
interfaces.setmacro = tokens.setters.macro
interfaces.setcount = tokens.setters.count
interfaces.setdimen = tokens.setters.dimen
diff --git a/Master/texmf-dist/tex/context/base/mkiv/cldf-stp.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-stp.lua
new file mode 100644
index 00000000000..7b5225dd353
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-stp.lua
@@ -0,0 +1,69 @@
+if not modules then modules = { } end modules ['cldf-stp'] = {
+ version = 1.001,
+ comment = "companion to cldf-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- limitation: input levels
+
+-- context.stepwise (function()
+-- ...
+-- context.step(nil|...)
+-- ...
+-- context.step(nil|...)
+-- ...
+-- context.stepwise (function()
+-- ...
+-- context.step(nil|...)
+-- ...
+-- context.step(nil|...)
+-- ...
+-- end)
+-- ...
+-- context.step(nil|...)
+-- ...
+-- context.step(nil|...)
+-- ...
+-- end)
+
+local create = coroutine.create
+local yield = coroutine.yield
+local resume = coroutine.resume
+local status = coroutine.status
+
+local stepper = nil
+local stack = { } -- will never be deep so no gc needed
+local depth = 0
+
+local nextstep = function()
+ if status(stepper) == "dead" then
+ stepper = stack[depth]
+ depth = depth - 1
+ stack[depth] = false
+ end
+ resume(stepper)
+end
+
+interfaces.implement {
+ name = "step",
+ actions = nextstep,
+}
+
+local cldresume = context.constructcsonly("clf_step")
+
+function context.step(first,...)
+ if first ~= nil then
+ context(first,...)
+ end
+ cldresume()
+ yield()
+end
+
+function context.stepwise(f)
+ depth = depth + 1
+ stack[depth] = stepper
+ stepper = create(f)
+ resume(stepper)
+end
diff --git a/Master/texmf-dist/tex/context/base/cldf-ver.lua b/Master/texmf-dist/tex/context/base/mkiv/cldf-ver.lua
index 66432eb1c8c..66432eb1c8c 100644
--- a/Master/texmf-dist/tex/context/base/cldf-ver.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-ver.lua
diff --git a/Master/texmf-dist/tex/context/base/cldf-ver.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cldf-ver.mkiv
index 8e009035d2d..8e009035d2d 100644
--- a/Master/texmf-dist/tex/context/base/cldf-ver.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cldf-ver.mkiv
diff --git a/Master/texmf-dist/tex/context/base/colo-ext.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-ext.mkiv
index c076fda9e5a..74ce2d3e5d4 100644
--- a/Master/texmf-dist/tex/context/base/colo-ext.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-ext.mkiv
@@ -30,7 +30,7 @@
%D will negate the colors in box zero.
\unexpanded\def\negatecolorbox#1% or just set attr of #1
- {\setbox#1\hbox to \wd#1%
+ {\setbox#1\hpack to \wd#1%
{\scratchdimen\wd#1\relax
\startnegative % might change
\blackrule[\c!color=\s!white,\c!height=\ht#1,\c!depth=\dp#1,\c!width=\scratchdimen]%
diff --git a/Master/texmf-dist/tex/context/base/colo-grp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-grp.mkiv
index e296bbc33d9..e296bbc33d9 100644
--- a/Master/texmf-dist/tex/context/base/colo-grp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-grp.mkiv
diff --git a/Master/texmf-dist/tex/context/base/colo-icc.lua b/Master/texmf-dist/tex/context/base/mkiv/colo-icc.lua
index f7ed561c1bf..f7ed561c1bf 100644
--- a/Master/texmf-dist/tex/context/base/colo-icc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-icc.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/colo-imp-crayola.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-crayola.mkiv
new file mode 100644
index 00000000000..dbae02d5a2a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-crayola.mkiv
@@ -0,0 +1,254 @@
+%D \module
+%D [ file=colo-imp-crayola
+%D version=2016.03.21,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Crayola,
+%D author=Alan Braslau]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA, See mreadme.pdf for
+%C details.
+
+%D Crayola (Binney & Smith) crayon colors.
+
+\startprotectedcolors
+
+\definecolor [Red] [h=ED0A3F] % produced 1903–present
+\definecolor [Maroon] [h=C32148] % produced 1949–present, known as "dark red", 1949–1958.
+\definecolor [Scarlet] [h=FD0E35] % produced 1998–present, known as "torch red", 1998.
+\definecolor [BrickRed] [h=C62D42] % produced 1958–present
+\definecolor [EnglishVermilion] [h=CC474B] % also spelled "vermillion", produced 1903–1935.
+\definecolor [MadderLake] [h=CC3336] % produced 1903–1935
+\definecolor [PermanentGeraniumLake] [h=E12C2C] % produced 1903–circa 1910
+\definecolor [MaximumRed] [h=D92121] % part of the munsell line, 1926–1944
+\definecolor [IndianRed] [h=B94E48] % produced 1903–present, known as "chestnut" since 1999.
+\definecolor [OrangeRed] [h=FF5349] % produced 1958–1990
+\definecolor [SunsetOrange] [h=FE4C40] % produced 1997–present
+\definecolor [Bittersweet] [h=FE6F5E] % produced 1958–present
+\definecolor [DarkVenetianRed] [h=B33B24] % "venetian red, dark" on labels, produced 1903–circa 1910.
+\definecolor [VenetianRed] [h=CC553D] % produced 1903–1944
+\definecolor [LightVenetianRed] [h=E6735C] % "venetian red, light" on labels, produced 1903–circa 1910.
+\definecolor [VividTangerine] [h=FF9980] % produced 1990–present
+\definecolor [MiddleRed] [h=E58E73] % part of the munsell line, 1926–1944.
+\definecolor [BurntOrange] [h=FF7F49] % produced 1958–present
+\definecolor [RedOrange] [h=FF681F] % produced 1930–present
+\definecolor [Orange] [h=FF8833] % produced 1903–present
+\definecolor [MacaroniandCheese] [h=FFB97B] % produced 1993–present, also found as "macaroni & cheese" and "macaroni-n-cheese".
+\definecolor [MiddleYellowRed] [h=ECB176] % part of the munsell line, 1926–1944, same color as "medium orange" (1949–1958).
+\definecolor [MangoTango] [h=E77200] % produced 2003–present
+\definecolor [YellowOrange] [h=FFAE42] % produced 1930–present
+\definecolor [MaximumYellowRed] [h=F2BA49] % part of the munsell line, 1926–1944.
+\definecolor [BananaMania] [h=FBE7B2] % produced 1998–present
+\definecolor [Maize] [h=F2C649] % produced 1903–1990, known as "gold ochre", 1903–1958, "golden ochre" on some labels.
+\definecolor [OrangeYellow] [h=F8D568] % produced 1958–1990.
+\definecolor [Goldenrod] [h=FCD667] % produced 1903–present, known as "medium chrome yellow" (1903–?) and "medium yellow" (1903–1958).
+\definecolor [Dandelion] [h=FED85D] % produced 1990–present
+\definecolor [Yellow] [h=FBE870] % produced 1903–present
+\definecolor [GreenYellow] [h=F1E788] % produced 1958–present
+\definecolor [MiddleYellow] [h=FFEB00] % part of the munsell line, 1926–1944.
+\definecolor [OliveGreen] [h=B5B35C] % produced 1903–present
+\definecolor [SpringGreen] [h=ECEBBD] % produced 1958–present
+\definecolor [MaximumYellow] [h=FAFA37] % part of the munsell line, 1926–1944.
+\definecolor [Canary] [h=FFFF99] % produced 1998–present
+\definecolor [LemonYellow] [h=FFFF9F] % produced 1903–1990, also known as "light chrome yellow" (on labels "chrome yellow, light") or "light yellow", 1903–1958, on labels "chrome yellow, light."
+\definecolor [MaximumGreenYellow] [h=D9E650] % part of the munsell line, 1926–1944.
+\definecolor [MiddleGreenYellow] [h=ACBF60] % part of the munsell line, 1926–1944.
+\definecolor [Inchworm] [h=AFE313] % produced 1993–present
+\definecolor [LightChromeGreen] [h=BEE64B] % "chrome green, light" on labels, produced 1903–1935, same color as "light green" (1903–1935).
+\definecolor [YellowGreen] [h=C5E17A] % produced 1930–present
+\definecolor [MaximumGreen] [h=5E8C31] % part of the munsell line, 1926–1944.
+\definecolor [Asparagus] [h=7BA05B] % produced 1993–present
+\definecolor [GrannySmithApple] [h=9DE093] % produced 1993–present
+\definecolor [Fern] [h=63B76C] % produced 1998–present
+\definecolor [MiddleGreen] [h=4D8C57] % part of the munsell line, 1926–1944.
+\definecolor [Green] [h=3AA655] % produced 1903–present
+\definecolor [MediumChromeGreen] [h=6CA67C] % "chrome green, medium" on labels, produced 1903–1939, same color as "medium green" (1903–1939).
+\definecolor [ForestGreen] [h=5FA777] % produced 1949–present, known as "dark green", 1949–1958.
+\definecolor [SeaGreen] [h=93DFB8] % produced 1949–present, known as "light green", 1949–1958.
+\definecolor [Shamrock] [h=33CC99] % produced 1993–present
+\definecolor [MountainMeadow] [h=1AB385] % produced 1998–present
+\definecolor [JungleGreen] [h=29AB87] % produced 1990–present
+\definecolor [CaribbeanGreen] [h=00CC99] % produced 1997–present
+\definecolor [TropicalRainForest] [h=00755E] % produced 1993–present
+\definecolor [MiddleBlueGreen] [h=8DD9CC] % part of the munsell line, 1926–1944.
+\definecolor [PineGreen] [h=01786F] % produced 1903–1949, 1958–present, known as "dark chrome green" ("chrome green, dark" on labels) or "dark green", 1903–1949.
+\definecolor [MaximumBlueGreen] [h=30BFBF] % part of the munsell line, 1926–1944.
+\definecolor [RobinsEggBlue] [h=00CCCC] % produced 1993–present
+\definecolor [TealBlue] [h=008080] % produced 1990–2003.
+\definecolor [LightBlue] [h=8FD8D8] % produced only in 1958.
+\definecolor [Aquamarine] [h=95E0E8] % produced 1949–present, known as "light turquoise blue", 1949–1958.
+\definecolor [TurquoiseBlue] [h=6CDAE7] % produced 1935–present, available only in bulk, 1935–1949.
+\definecolor [OuterSpace] [h=2D383A] % produced 1998–present
+\definecolor [SkyBlue] [h=76D7EA] % produced 1958–present
+\definecolor [MiddleBlue] [h=7ED4E6] % part of the munsell line, 1926–1944.
+\definecolor [BlueGreen] [h=0095B7] % produced 1949–present, known as "middle blue-green", 1949–1958.
+\definecolor [PacificBlue] [h=009DC4] % produced 1993–present
+\definecolor [Cerulean] [h=02A4D3] % produced 1990–present
+\definecolor [MaximumBlue] [h=47ABCC] % produced 1926–1958, part of the munsell line, 1926–1944, also known as "blue-green", 1930–1958.
+\definecolor [BlueI] [h=4997D0] % produced 1903–1958, known as "celestial blue", 1935–1949, and "azure blue", 1949–1958.
+\definecolor [CeruleanBlue] [h=339ACC] % produced 1949–1958.
+\definecolor [Cornflower] [h=93CCEA] % produced 1958–present
+\definecolor [GreenBlue] [h=2887C8] % produced 1958–1990.
+\definecolor [MidnightBlue] [h=00468C] % produced 1903–present, known as "prussian blue", 1903–1958.
+\definecolor [NavyBlue] [h=0066CC] % produced 1958–present
+\definecolor [Denim] [h=1560BD] % produced 1993–present
+\definecolor [BlueIII] [h=0066FF] % produced 1949–present
+\definecolor [CadetBlue] [h=A9B2C3] % produced 1958–present
+\definecolor [Periwinkle] [h=C3CDE6] % produced 1958–present
+\definecolor [BlueII] [h=4570E6] % produced 1935–1958, known as "medium blue", 1949–1958.
+\definecolor [WildBlueYonder] [h=7A89B8] % produced 2003–present
+\definecolor [Indigo] [h=4F69C6] % produced 1999–present
+\definecolor [Manatee] [h=8D90A1] % produced 1998–present
+\definecolor [CobaltBlue] [h=8C90C8] % produced 1903–1958.
+\definecolor [CelestialBlue] [h=7070CC] % produced 1903–circa 1910.
+\definecolor [BlueBell] [h=9999CC] % produced 1998–present
+\definecolor [MaximumBluePurple] [h=ACACE6] % part of the munsell line, 1926–1944.
+\definecolor [VioletBlue] [h=766EC8] % produced 1930–1990, known as blue-violet, 1930–1958.
+\definecolor [BlueViolet] [h=6456B7] % produced 1949–present, known as "violet" 1949–1958.
+\definecolor [UltramarineBlue] [h=3F26BF] % produced 1903–1944.
+\definecolor [MiddleBluePurple] [h=8B72BE] % part of the munsell line, 1926–1944.
+\definecolor [PurpleHeart] [h=652DC1] % produced 1998–present
+\definecolor [RoyalPurple] [h=6B3FA0] % produced 1990–present
+\definecolor [VioletII] [h=8359A3] % produced 1930–1949, 1958–present, on labels "violet (purple)".
+\definecolor [MediumViolet] [h=8F47B3] % produced 1949–1958.
+\definecolor [Wisteria] [h=C9A0DC] % produced 1993–present
+\definecolor [LavenderI] [h=BF8FCC] % produced 1949–1958.
+\definecolor [VividViolet] [h=803790] % produced 1997–present
+\definecolor [MaximumPurple] [h=733380] % part of the munsell line, 1926–1944.
+\definecolor [PurpleMountainsMajesty] [h=D6AEDD] % produced 1993–present, also found as "purple mountain majesty" and "purple mountain's majesty."
+\definecolor [Fuchsia] [h=C154C1] % produced 1990–present
+\definecolor [PinkFlamingo] [h=FC74FD] % produced 1997–present
+\definecolor [VioletI] [h=732E6C] % produced 1903–1930, also known as "purple" (1903–circa 1914).
+\definecolor [BrilliantRose] [h=E667CE] % produced 1949–1958.
+\definecolor [Orchid] [h=E29CD2] % produced 1949–present, known as "medium red-violet", 1949–1958.
+\definecolor [Plum] [h=8E3179] % produced 1958–present
+\definecolor [MediumRose] [h=D96CBE] % produced 1949–1958.
+\definecolor [Thistle] [h=EBB0D7] % produced 1949–1999, known as "light magenta", 1949–1958.
+\definecolor [Mulberry] [h=C8509B] % produced 1958–2003.
+\definecolor [RedViolet] [h=BB3385] % produced 1930–present
+\definecolor [MiddlePurple] [h=D982B5] % part of the munsell line, 1926–1944.
+\definecolor [MaximumRedPurple] [h=A63A79] % part of the munsell line, 1926–1944.
+\definecolor [JazzberryJam] [h=A50B5E] % produced 2003–present
+\definecolor [Eggplant] [h=614051] % produced 1998–present
+\definecolor [Magenta] [h=F653A6] % produced 1903–present, same color as "permanent magenta" (1903–?).
+\definecolor [Cerise] [h=DA3287] % produced 1993–present
+\definecolor [WildStrawberry] [h=FF3399] % produced 1990–present
+\definecolor [LavenderII] [h=FBAED2] % produced 1958–present
+\definecolor [CottonCandy] [h=FFB7D5] % produced 1998–present
+\definecolor [CarnationPink] [h=FFA6C9] % produced 1903–present, known as "rose pink" (1903–1958) and "pink" (1903–1917).
+\definecolor [VioletRed] [h=F7468A] % produced 1958–present
+\definecolor [Razzmatazz] [h=E30B5C] % produced 1993–present
+\definecolor [PigPink] [h=FDD7E4] % produced 1998–present, also called "piggy pink."
+\definecolor [Carmine] [h=E62E6B] % produced 1935–1958, known as "carmine red", 1949–1958.
+\definecolor [Blush] [h=DB5079] % produced 1998–present, known as "cranberry", 1998–2005.
+\definecolor [TickleMePink] [h=FC80A5] % produced 1993–present
+\definecolor [Mauvelous] [h=F091A9] % produced 1993–present
+\definecolor [Salmon] [h=FF91A4] % produced 1949–present
+\definecolor [MiddleRedPurple] [h=A55353] % part of the munsell line, 1926–1944.
+\definecolor [Mahogany] [h=CA3435] % produced 1949–present
+\definecolor [Melon] [h=FEBAAD] % produced 1958–present
+\definecolor [PinkSherbert] [h=F7A38E] % produced 1998–present, known as "brink pink", 1998–2005.
+\definecolor [BurntSienna] [h=E97451] % produced 1903–present
+\definecolor [Brown] [h=AF593E] % produced 1935–present
+\definecolor [Sepia] [h=9E5B40] % produced 1935–1944, 1958–present, available only in bulk, 1935–1939.
+\definecolor [FuzzyWuzzy] [h=87421F] % produced 1998–present, known as "fuzzy wuzzy brown", 1998–2005.
+\definecolor [Beaver] [h=926F5B] % produced 1998–present
+\definecolor [Tumbleweed] [h=DEA681] % produced 1993–present
+\definecolor [RawSienna] [h=D27D46] % produced 1958–present
+\definecolor [VanDykeBrown] [h=664228] % produced 1903–1935, same color as "brown" (1903–1935)
+\definecolor [Tan] [h=D99A6C] % produced 1958–present
+\definecolor [DesertSand] [h=EDC9AF] % produced 1998–present
+\definecolor [Peach] [h=FFCBA4] % produced 1903–present, known as "flesh tint" (1903–1949), "flesh" (1949–1956, 1958–1962), and "pink beige" (1956–1958)
+\definecolor [BurntUmber] [h=805533] % produced 1903–1944
+\definecolor [Apricot] [h=FDD5B1] % produced 1958–present
+\definecolor [Almond] [h=EED9C4] % produced 1998–present
+\definecolor [RawUmber] [h=665233] % produced 1903–1990
+\definecolor [Shadow] [h=837050] % produced 1998–present
+\definecolor [RawSiennaI] [h=E6BC5C] % produced 1903–circa 1910
+\definecolor [Timberwolf] [h=D9D6CF] % produced 1993–present
+\definecolor [GoldI] [h=92926E] % metallic, swatch represents nominal hue only, produced 1903–1944, available only in bulk after 1915
+\definecolor [GoldII] [h=E6BE8A] % metallic, swatch represents nominal hue only, produced 1953–present, available only in bulk, 1953–1956
+\definecolor [Silver] [h=C9C0BB] % metallic, swatch represents nominal hue only, produced 1903–present, available only in bulk, 1915–1944
+\definecolor [Copper] [h=DA8A67] % metallic, swatch represents nominal hue only, produced 1903–1915, 1958–present
+\definecolor [AntiqueBrass] [h=C88A65] % metallic, swatch represents nominal hue only, produced 1998–present
+\definecolor [Black] [h=000000] % produced 1903–present
+\definecolor [CharcoalGray] [h=736A62] % produced 1903–1910
+\definecolor [Gray] [h=8B8680] % as "middle grey", part of the munsell line, 1926–1944, spelled "grey" on labels, but "gray" on boxes, also called "neutral grey", 1930–1956
+\definecolor [BlueGray] [h=C8C8CD] % produced 1958–1990
+\definecolor [White] [h=FFFFFF] % produced 1903–present
+\definecolor [RadicalRed] [h=FF355E] % introduced in 1990
+\definecolor [WildWatermelon] [h=FD5B78] % same color as "ultra red" (1972–1990)
+\definecolor [OutrageousOrange] [h=FF6037] % same color as "ultra orange" (1972–1990)
+\definecolor [AtomicTangerine] [h=FF9966] % same color as "ultra yellow" (1972–1990)
+\definecolor [NeonCarrot] [h=FF9933] % introduced in 1990
+\definecolor [Sunglow] [h=FFCC33] % introduced in 1990
+\definecolor [LaserLemon] [h=FFFF66] % same color as "chartreuse" (1972–1990)
+\definecolor [UnmellowYellow] [h=FFFF66] % introduced in 1990
+\definecolor [ElectricLime] [h=CCFF00] % introduced in 1990
+\definecolor [ScreaminGreen] [h=66FF66] % same color as "ultra green" (1972–1990)
+\definecolor [MagicMint] [h=AAF0D1] % produced 1990–2003
+\definecolor [BlizzardBlue] [h=50BFE6] % same color as "ultra blue" (1972–1990), discontinued in 2003
+\definecolor [ShockingPink] [h=FF6EFF] % same color as "ultra pink" (1972–1990)
+\definecolor [RazzleDazzleRose] [h=EE34D2] % same color as "hot magenta" (1972–1990)
+\definecolor [HotMagenta] [h=FF00CC] % introduced in 1990
+\definecolor [PurplePizzazz] [h=FF00CC] % introduced in 1990
+\definecolor [AztecGold] [h=C39953]
+\definecolor [BurnishedBrown] [h=A17A74]
+\definecolor [CeruleanFrost] [h=6D9BC3]
+\definecolor [CinnamonSatin] [h=CD607E]
+\definecolor [CopperPenny] [h=AD6F69]
+\definecolor [CosmicCobalt] [h=2E2D88]
+\definecolor [GlossyGrape] [h=AB92B3]
+\definecolor [GraniteGray] [h=676767]
+\definecolor [GreenSheen] [h=6EAEA1]
+\definecolor [LilacLuster] [h=AE98AA]
+\definecolor [MistyMoss] [h=BBB477]
+\definecolor [MysticMaroon] [h=AD4379]
+\definecolor [PearlyPurple] [h=B768A2]
+\definecolor [PewterBlue] [h=8BA8B7]
+\definecolor [PolishedPine] [h=5DA493]
+\definecolor [QuickSilver] [h=A6A6A6]
+\definecolor [RoseDust] [h=9E5E6F]
+\definecolor [RustyRed] [h=DA2C43]
+\definecolor [ShadowBlue] [h=778BA5]
+\definecolor [ShinyShamrock] [h=5FA778]
+\definecolor [SteelTeal] [h=5F8A8B]
+\definecolor [SugarPlum] [h=914E75]
+\definecolor [TwilightLavender] [h=8A496B]
+\definecolor [WintergreenDream] [h=56887D]
+\definecolor [Amethyst] [h=64609A]
+\definecolor [Citrine] [h=933709]
+\definecolor [Emerald] [h=14A989]
+\definecolor [Jade] [h=469A84]
+\definecolor [Jasper] [h=D05340]
+\definecolor [LapisLazuli] [h=436CB9]
+\definecolor [Malachite] [h=469496]
+\definecolor [Moonstone] [h=3AA8C1]
+\definecolor [Onyx] [h=353839]
+\definecolor [Peridot] [h=ABAD48]
+\definecolor [PinkPearl] [h=B07080]
+\definecolor [RoseQuartz] [h=BD559C]
+\definecolor [Ruby] [h=AA4069]
+\definecolor [Sapphire] [h=2D5DA1]
+\definecolor [SmokeyTopaz] [h=832A0D]
+\definecolor [TigersEye] [h=B56917]
+\definecolor [AquaPearl] [h=5FBED7]
+\definecolor [BlackCoralPearl] [h=54626F]
+\definecolor [CaribbeanGreenPearl] [h=6ADA8E]
+\definecolor [CulturedPearl] [h=F5F5F5]
+\definecolor [KeyLimePearl] [h=E8F48C]
+\definecolor [MandarinPearl] [h=F37A48]
+\definecolor [MidnightPearl] [h=702670]
+\definecolor [MysticPearl] [h=D65282]
+\definecolor [OceanBluePearl] [h=4F42B5]
+\definecolor [OceanGreenPearl] [h=48BF91]
+\definecolor [OrchidPearl] [h=7B4259]
+\definecolor [RosePearl] [h=F03865]
+\definecolor [SalmonPearl] [h=F1444A]
+\definecolor [SunnyPearl] [h=F2F27A]
+\definecolor [SunsetPearl] [h=F1CC79]
+\definecolor [TurquoisePearl] [h=3BBCD0]
+
+\stopprotectedcolors
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-imp-dem.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-dem.mkiv
index 5b794c5517b..7744a216ef9 100644
--- a/Master/texmf-dist/tex/context/base/colo-imp-dem.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-dem.mkiv
@@ -11,8 +11,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D Like colors, we first define the english colorgroups. These
-%D colorgroups are tuned for distinctive gray scale printing.
+%D Like colors, we first define the english colorgroups. These colorgroups are
+%D tuned for distinctive gray scale printing. The yellow range is not really
+%D all yellow but is at least visible.
\definecolorgroup
[gray]
@@ -200,6 +201,20 @@
\definecolorgroup [giallo*] [yellow*]
\stopinterface
+\startinterface french
+ \definecolorgroup [gris] [gray]
+ \definecolorgroup [rouge] [red]
+ \definecolorgroup [vert] [green]
+ \definecolorgroup [bleu] [blue]
+ \definecolorgroup [cyan] [cyan]
+ \definecolorgroup [magenta] [magenta]
+ \definecolorgroup [jaune] [yellow]
+ \definecolorgroup [rouge*] [red*]
+ \definecolorgroup [vert*] [green*]
+ \definecolorgroup [bleu*] [blue*]
+ \definecolorgroup [jaune*] [yellow*]
+\stopinterface
+
%D The next set of color palets is quite language independant.
%D These palets are meant as examples.
diff --git a/Master/texmf-dist/tex/context/base/colo-imp-ema.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-ema.mkiv
index 11d76f34209..ff1db60fb55 100644
--- a/Master/texmf-dist/tex/context/base/colo-imp-ema.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-ema.mkiv
@@ -8,7 +8,7 @@
%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 therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
% author : Peter Rolf <peter.rolf@arcor.de>
@@ -17,28 +17,30 @@
%
% USAGE:
%
-% - select emacs menu: Edit -> Text Properties -> Display
+% - select emacs menu: Edit -> Text Properties -> Display
% Colors, if you don't know what I'm talking about
-% - copy this file to your /texmf/tex/context/user directory
+% - copy this file to your /texmf/tex/context/user directory
% and add "\input colo-emacs" to your tex-file
%
% IMPORTANT NOTES:
%
-% - all color names are written as ONE word in lowercase
-% letters (no redundancy as in rgb.txt) so if you want to
-% use the color "Light Sky Blue"/"light sky blue" it's new
+% - all color names are written as ONE word in lowercase
+% letters (no redundancy as in rgb.txt) so if you want to
+% use the color "Light Sky Blue"/"light sky blue" it's new
% name is lightskyblue
% - the grayX values [X=0..100] can only be used with \color
% [grayX]
% - use it at your own risk :)
%
% HINT:
-%
-% I only include this file (\showcolor [ema]) until I've
-% found the colors I want. Copy and paste the color
-% definitions to a seperate file, to decrease compilation
-% time (540 color definitions).
-
+%
+% I only include this file (\showcolor [ema]) until I've
+% found the colors I want. Copy and paste the color
+% definitions to a seperate file, to decrease compilation
+% time (540 color definitions).
+
+\startprotectedcolors
+
\definecolor [snow] [r=1,g=.980392,b=.980392]
\definecolor [ghostwhite] [r=.972549,g=.972549,b=1]
\definecolor [whitesmoke] [s=.960784]
@@ -481,110 +483,18 @@
\definecolor [thistle2] [r=.933333,g=.823529,b=.933333]
\definecolor [thistle3] [r=.803922,g=.709804,b=.803922]
\definecolor [thistle4] [r=.545098,g=.482353,b=.545098]
-\definecolor [gray0] [black]
-\definecolor [gray1] [s=.01]
-\definecolor [gray2] [s=.02]
-\definecolor [gray3] [s=.03]
-\definecolor [gray4] [s=.04]
-\definecolor [gray5] [s=.05]
-\definecolor [gray6] [s=.06]
-\definecolor [gray7] [s=.07]
-\definecolor [gray8] [s=.08]
-\definecolor [gray9] [s=.09]
-\definecolor [gray10] [s=.1]
-\definecolor [gray11] [s=.11]
-\definecolor [gray12] [s=.12]
-\definecolor [gray13] [s=.13]
-\definecolor [gray14] [s=.14]
-\definecolor [gray15] [s=.15]
-\definecolor [gray16] [s=.16]
-\definecolor [gray17] [s=.17]
-\definecolor [gray18] [s=.18]
-\definecolor [gray19] [s=.19]
-\definecolor [gray20] [s=.2]
-\definecolor [gray21] [s=.21]
-\definecolor [gray22] [s=.22]
-\definecolor [gray23] [s=.23]
-\definecolor [gray24] [s=.24]
-\definecolor [gray25] [s=.25]
-\definecolor [gray26] [s=.26]
-\definecolor [gray27] [s=.27]
-\definecolor [gray28] [s=.28]
-\definecolor [gray29] [s=.29]
-\definecolor [gray30] [s=.3]
-\definecolor [gray31] [s=.31]
-\definecolor [gray32] [s=.32]
-\definecolor [gray33] [s=.33]
-\definecolor [gray34] [s=.34]
-\definecolor [gray35] [s=.35]
-\definecolor [gray36] [s=.36]
-\definecolor [gray37] [s=.37]
-\definecolor [gray38] [s=.38]
-\definecolor [gray39] [s=.39]
-\definecolor [gray40] [s=.4]
-\definecolor [gray41] [s=.41]
-\definecolor [gray42] [s=.42]
-\definecolor [gray43] [s=.43]
-\definecolor [gray44] [s=.44]
-\definecolor [gray45] [s=.45]
-\definecolor [gray46] [s=.46]
-\definecolor [gray47] [s=.47]
-\definecolor [gray48] [s=.48]
-\definecolor [gray49] [s=.49]
-\definecolor [gray50] [s=.5]
-\definecolor [gray51] [s=.51]
-\definecolor [gray52] [s=.52]
-\definecolor [gray53] [s=.53]
-\definecolor [gray54] [s=.54]
-\definecolor [gray55] [s=.55]
-\definecolor [gray56] [s=.56]
-\definecolor [gray57] [s=.57]
-\definecolor [gray58] [s=.58]
-\definecolor [gray59] [s=.59]
-\definecolor [gray60] [s=.6]
-\definecolor [gray61] [s=.61]
-\definecolor [gray62] [s=.62]
-\definecolor [gray63] [s=.63]
-\definecolor [gray64] [s=.64]
-\definecolor [gray65] [s=.65]
-\definecolor [gray66] [s=.66]
-\definecolor [gray67] [s=.67]
-\definecolor [gray68] [s=.68]
-\definecolor [gray69] [s=.69]
-\definecolor [gray70] [s=.7]
-\definecolor [gray71] [s=.71]
-\definecolor [gray72] [s=.72]
-\definecolor [gray73] [s=.73]
-\definecolor [gray74] [s=.74]
-\definecolor [gray75] [s=.75]
-\definecolor [gray76] [s=.76]
-\definecolor [gray77] [s=.77]
-\definecolor [gray78] [s=.78]
-\definecolor [gray79] [s=.79]
-\definecolor [gray80] [s=.8]
-\definecolor [gray81] [s=.81]
-\definecolor [gray82] [s=.82]
-\definecolor [gray83] [s=.83]
-\definecolor [gray84] [s=.84]
-\definecolor [gray85] [s=.85]
-\definecolor [gray86] [s=.86]
-\definecolor [gray87] [s=.87]
-\definecolor [gray88] [s=.88]
-\definecolor [gray89] [s=.89]
-\definecolor [gray90] [s=.9]
-\definecolor [gray91] [s=.91]
-\definecolor [gray92] [s=.92]
-\definecolor [gray93] [s=.93]
-\definecolor [gray94] [s=.94]
-\definecolor [gray95] [s=.95]
-\definecolor [gray96] [s=.96]
-\definecolor [gray97] [s=.97]
-\definecolor [gray98] [s=.98]
-\definecolor [gray99] [s=.99]
-\definecolor [gray100] [white]
+
+\dorecurse{100}{
+ \definecolor [gray#1] [s=\cldcontext{#1/100}]
+}
+
\definecolor [darkgray] [s=.662745]
\definecolor [darkblue] [b=.545098]
\definecolor [darkcyan] [g=.545098,b=.545098]
\definecolor [darkmagenta] [r=.545098,b=.545098]
\definecolor [darkred] [r=.545098]
\definecolor [lightgreen] [r=.564706,g=.933333,b=.564706]
+
+\stopprotectedcolors
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/mkiv/colo-imp-ral.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-ral.mkiv
new file mode 100644
index 00000000000..e7b1a2408f4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-ral.mkiv
@@ -0,0 +1,239 @@
+%D \module
+%D [ file=colo-imp-ral,
+%D version=2009.11.13,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=RAL,
+%D author=Alan Braslau]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D RAL color system (Deutsches Institut für Gütesicherung und Kennzeichnung)
+%D approximate RGB colors (from \goto {ralcolor.com} [url(http://www.ralcolor.com)];
+%D see also \goto {ralcolors.com} [url(http://www.ralcolors.com)]). These could be
+%D good candidates for use as spot colors.
+
+\startprotectedcolors
+
+ % Deutsch English Français Español Italiano Nederlands
+
+\definecolor [RAL1000] [h=BEBD7F] % Grünbeige Green beige Beige vert Beige verdoso Beige verdastro Groenbeige
+\definecolor [RAL1001] [h=C2B078] % Beige Beige Beige Beige Beige Beige
+\definecolor [RAL1002] [h=C6A664] % Sandgelb Sand yellow Jaune sable Amarillo arena Giallo sabbia Zandgeel
+\definecolor [RAL1003] [h=E5BE01] % Signalgelb Signal yellow Jaune de sécurité Amarillo señales Giallo segnale Signaalgeel
+\definecolor [RAL1004] [h=CDA434] % Goldgelb Golden yellow Jaune or Amarillo oro Giallo oro Goudgeel
+\definecolor [RAL1005] [h=A98307] % Honiggelb Honey yellow Jaune miel Amarillo miel Giallo miele Honinggeel
+\definecolor [RAL1006] [h=E4A010] % Maisgelb Maize yellow Jaune maïs Amarillo maiz Giallo polenta Maisgeel
+\definecolor [RAL1007] [h=DC9D00] % Narzissengelb Daffodil yellow Jaune narcisse Amarillo narciso Giallo narciso Narcissengeel
+\definecolor [RAL1011] [h=8A6642] % Braunbeige Brown beige Beige brun Beige pardo Beige marrone Bruinbeige
+\definecolor [RAL1012] [h=C7B446] % Zitronengelb Lemon yellow Jaune citron Amarillo limón Giallo limone Citroengeel
+\definecolor [RAL1013] [h=EAE6CA] % Perlweiß Oyster white Blanc perlé Blanco perla Bianco perla Parelwit
+\definecolor [RAL1014] [h=E1CC4F] % Elfenbein Ivory Ivoire Marfil Avorio Ivoorkleurig
+\definecolor [RAL1015] [h=E6D690] % Hellelfenbein Light ivory Ivoire clair Marfil claro Avorio chiaro Licht ivoorkleurig
+\definecolor [RAL1016] [h=EDFF21] % Schwefelgelb Sulfur yellow Jaune soufre Amarillo azufre Giallo zolfo Zwavelgeel
+\definecolor [RAL1017] [h=F5D033] % Safrangelb Saffron yellow Jaune safran Amarillo azafrán Giallo zafferano Saffraangeel
+\definecolor [RAL1018] [h=F8F32B] % Zinkgelb Zinc yellow Jaune zinc Amarillo de zinc Giallo zinco Zinkgeel
+\definecolor [RAL1019] [h=9E9764] % Graubeige Grey beige Beige gris Beige agrisado Beige grigiastro Grijsbeige
+\definecolor [RAL1020] [h=999950] % Olivgelb Olive yellow Jaune olive Amarillo oliva Giallo olivastro Olijfgeel
+\definecolor [RAL1021] [h=F3DA0B] % Rapsgelb Rape yellow Jaune colza Amarillo colza Giallo navone Koolzaadgeel
+\definecolor [RAL1023] [h=FAD201] % Verkehrsgelb Traffic yellow Jaune signalisation Amarillo tráfico Giallo traffico Verkeersgeel
+\definecolor [RAL1024] [h=AEA04B] % Ockergelb Ochre yellow Jaune ocre Amarillo ocre Giallo ocra Okergeel
+\definecolor [RAL1026] [h=FFFF00] % Leuchtgelb Luminous yellow Jaune brillant Amarillo brillante Giallo brillante Briljantgeel
+\definecolor [RAL1027] [h=9D9101] % Currygelb Curry Jaune curry Amarillo curry Giallo curry Kerriegeel
+\definecolor [RAL1028] [h=F4A900] % Melonengelb Melon yellow Jaune melon Amarillo melón Giallo melone Meloengeel
+\definecolor [RAL1032] [h=D6AE01] % Ginstergelb Broom yellow Jaune genêt Amarillo retama Giallo scopa Bremgeel
+\definecolor [RAL1033] [h=F3A505] % Dahliengelb Dahlia yellow Jaune dahlia Amarillo dalia Giallo dahlien Dahliageel
+\definecolor [RAL1034] [h=EFA94A] % Pastellgelb Pastel yellow Jaune pastel Amarillo pastel Giallo pastello Pastelgeel
+\definecolor [RAL1035] [h=6A5D4D] % Perlbeige Pearl beige Beige nacré Beige perlado Beige perlato Parelmoergrijs
+\definecolor [RAL1036] [h=705335] % Perlgold Pearl gold Or nacré Oro perlado Oro perlato Parelmoergoud
+\definecolor [RAL1037] [h=F39F18] % Sonnengelb Sun yellow Jaune soleil Amarillo sol Giallo sole Zonnegeel
+\definecolor [RAL2000] [h=ED760E] % Gelborange Yellow orange Orangé jaune Amarillo naranja Arancio giallastro Geeloranje
+\definecolor [RAL2001] [h=C93C20] % Rotorange Red orange Orangé rouge Rojo anaranjado Arancio rossastro Roodoranje
+\definecolor [RAL2002] [h=CB2821] % Blutorange Vermilion Orangé sang Naranja sanguineo Arancio sanguigno Vermiljoen
+\definecolor [RAL2003] [h=FF7514] % Pastellorange Pastel orange Orangé pastel Naranja pálido Arancio pastello Pasteloranje
+\definecolor [RAL2004] [h=F44611] % Reinorange Pure orange Orangé pur Naranja puro Arancio puro Zuiver oranje
+\definecolor [RAL2005] [h=FF2301] % Leuchtorange Luminous orange Orangé brillant Naranja brillante Arancio brillante Briljant oranje
+\definecolor [RAL2007] [h=FFA420] % Leuchthellorange Luminous bright orange Orangé clair rillant Naranja claro brillante Arancio chiaro brillante Briljant lichtoranje
+\definecolor [RAL2008] [h=F75E25] % Hellrotorange Bright red orange Orangé rouge clair Rojo claro anaranjado Rosso arancio chiaro Licht roodoranje
+\definecolor [RAL2009] [h=F54021] % Verkehrsorange Traffic orange Orangé signalisation Naranja tráfico Arancio traffico Verkeersoranje
+\definecolor [RAL2010] [h=D84B20] % Signalorange Signal orange Orangé de sécurité Naranja señales Arancio segnale Signaaloranje
+\definecolor [RAL2011] [h=EC7C26] % Tieforange Deep orange Orangé foncé Naranja intenso Arancio profondo Dieporanje
+\definecolor [RAL2012] [h=E55137] % Lachsorange Salmon range Orangé saumon Naranja salmón Arancio salmone Zalmoranje
+\definecolor [RAL2013] [h=C35831] % Perlorange Pearl orange Orangé nacré Naranja perlado Arancio perlato Parelmoeroranje
+\definecolor [RAL3000] [h=AF2B1E] % Feuerrot Flame red Rouge feu Rojo vivo Rosso fuoco Vuurrood
+\definecolor [RAL3001] [h=A52019] % Signalrot Signal red Rouge de sécurité Rojo señales Rosso segnale Signaalrood
+\definecolor [RAL3002] [h=A2231D] % Karminrot Carmine red Rouge carmin Rojo carmin Rosso carminio Karmijnrood
+\definecolor [RAL3003] [h=9B111E] % Rubinrot Ruby red Rouge rubis Rojo rubí Rosso rubino Robijnrood
+\definecolor [RAL3004] [h=75151E] % Purpurrot Purple red Rouge pourpre Rojo purpura Rosso porpora Purperrood
+\definecolor [RAL3005] [h=5E2129] % Weinrot Wine red Rouge vin Rojo vino Rosso vino Wijnrood
+\definecolor [RAL3007] [h=412227] % Schwarzrot Black red Rouge noir Rojo negruzco Rosso nerastro Zwartrood
+\definecolor [RAL3009] [h=642424] % Oxidrot Oxide red Rouge oxyde Rojo óxido Rosso ossido Oxyderood
+\definecolor [RAL3011] [h=781F19] % Braunrot Brown red Rouge brun Rojo pardo Rosso marrone Bruinrood
+\definecolor [RAL3012] [h=C1876B] % Beigerot Beige red Rouge beige Rojo beige Rosso beige Beigerood
+\definecolor [RAL3013] [h=A12312] % Tomatenrot Tomato red Rouge tomate Rojo tomate Rosso pomodoro Tomaatrood
+\definecolor [RAL3014] [h=D36E70] % Altrosa Antique pink Vieux rose Rojo viejo Rosa antico Oudroze
+\definecolor [RAL3015] [h=EA899A] % Hellrosa Light pink Rose clair Rosa claro Rosa chiaro Lichtroze
+\definecolor [RAL3016] [h=B32821] % Korallenrot Coral red Rouge corail Rojo coral Rosso corallo Koraalrood
+\definecolor [RAL3017] [h=E63244] % Rosé Rose Rosé Rosa Rosato Bleekrood
+\definecolor [RAL3018] [h=D53032] % Erdbeerrot Strawberry red Rouge fraise Rojo fresa Rosso fragola Aardbeirood
+\definecolor [RAL3020] [h=CC0605] % Verkehrsrot Traffic red Rouge signalisation Rojo tráfico Rosso traffico Verkeersrood
+\definecolor [RAL3022] [h=D95030] % Lachsrot Salmon pink Rouge saumon Rojo salmón Rosso salmone Zalmrood
+\definecolor [RAL3024] [h=F80000] % Leuchtrot Luminous red Rouge brillant Rojo brillante Rosso brillante Briljantrood
+\definecolor [RAL3026] [h=FE0000] % Leuchthellrot Luminous bright red Rouge clair brillant Rojo claro brillante Rosso chiaro brillante
+\definecolor [RAL3027] [h=C51D34] % Himbeerrot Raspberry red Rouge framboise Rojo frambuesa Rosso lampone Framboosrood
+\definecolor [RAL3028] [h=CB3234] % Reinrot Pure red Rouge puro Rojo puro Rosso puro Zuiverrood
+\definecolor [RAL3031] [h=B32428] % Orientrot Orient red Rouge oriental Rojo oriente Rosso oriente Oriëntrood
+\definecolor [RAL3032] [h=721422] % Perlrubinrot Pearl ruby red Rouge rubis nacré Rojo rubí perlado Rosso rubino perlato Parelmoer donkerrood
+\definecolor [RAL3033] [h=B44C43] % Perlrosa Pearl pink Rose nacré Rosa perlado Rosa perlato Parelmoer lichtrood
+\definecolor [RAL4001] [h=6D3F5B] % Rotlila Red lilac Lilas rouge Rojo lila Lilla rossastro Roodlila
+\definecolor [RAL4002] [h=922B3E] % Rotviolett Red violet Violet rouge Rojo violeta Viola rossastro Roodpaars
+\definecolor [RAL4003] [h=DE4C8A] % Erikaviolett Heather violet Violet bruyère Violeta érica Viola erica Heidepaars
+\definecolor [RAL4004] [h=641C34] % Bordeauxviolett Claret violet Violet bordeaux Burdeos Viola bordeaux Bordeauxpaars
+\definecolor [RAL4005] [h=6C4675] % Blaulila Blue lilac Lilas bleu Lila azulado Lilla bluastro Blauwlila
+\definecolor [RAL4006] [h=A03472] % Verkehrspurpur Traffic purple Pourpre signalisation Púrpurá tráfico Porpora traffico Verkeerspurper
+\definecolor [RAL4007] [h=4A192C] % Purpurviolett Purple violet Violet pourpre Violeta púrpura Porpora violetto Purperviolet
+\definecolor [RAL4008] [h=924E7D] % Signalviolett Signal violet Violet de sécurité Violeta señales Violetto segnale Signaalviolet
+\definecolor [RAL4009] [h=A18594] % Pastellviolett Pastel violet Violet pastel Violeta pastel Violetto pastello Pastelviolet
+\definecolor [RAL4010] [h=CF3476] % Telemagenta Telemagenta Telemagenta Magenta tele Tele Magenta Telemagenta
+\definecolor [RAL4011] [h=8673A1] % Perlviolett Pearl violet Violet nacré Violeta perlado Violetto perlato Parelmoer donkerviolet
+\definecolor [RAL4012] [h=6C6874] % Perlbrombeer Pearl black berry Mûre nacré Morado perlado Mora perlato Parelmoer lichtviolet
+\definecolor [RAL5000] [h=354D73] % Violettblau Violet blue Bleu violet Azul violeta Blu violaceo Paarsblauw
+\definecolor [RAL5001] [h=1F3438] % Grünblau Green blue Bleu vert Azul verdoso Blu verdastro Groenblauw
+\definecolor [RAL5002] [h=20214F] % Ultramarinblau Ultramarine blue Bleu outremer Azul ultramar Blu oltremare Ultramarijnblauw
+\definecolor [RAL5003] [h=1D1E33] % Saphirblau Saphire blue Bleu saphir Azul zafiro Blu zaffiro Saffierblauw
+\definecolor [RAL5004] [h=18171C] % Schwarzblau Black blue Bleu noir Azul negruzco Blu nerastro Zwartblauw
+\definecolor [RAL5005] [h=1E2460] % Signalblau Signal blue Bleu de sécurité Azul señales Blu segnale Signaalblauw
+\definecolor [RAL5007] [h=3E5F8A] % Brillantblau Brillant blue Bleu brillant Azul brillante Blu brillante Briljantblauw
+\definecolor [RAL5008] [h=26252D] % Graublau Grey blue Bleu gris Azul grisáceo Blu grigiastro Grijsblauw
+\definecolor [RAL5009] [h=025669] % Azurblau Azure blue Bleu azur Azul azur Blu azzurro Azuurblauw
+\definecolor [RAL5010] [h=0E294B] % Enzianblau Gentian blue Bleu gentiane Azul genciana Blu genziana Gentiaanblauw
+\definecolor [RAL5011] [h=231A24] % Stahlblau Steel blue Bleu acier Azul acero Blu acciaio Staalblauw
+\definecolor [RAL5012] [h=3B83BD] % Lichtblau Light blue Bleu clair Azul luminoso Blu luce Lichtblauw
+\definecolor [RAL5013] [h=1E213D] % Kobaltblau Cobalt blue Bleu cobalt Azul cobalto Blu cobalto Kobaltblauw
+\definecolor [RAL5014] [h=606E8C] % Taubenblau Pigeon blue Bleu pigeon Azul olombino Blu colomba Duifblauw
+\definecolor [RAL5015] [h=2271B3] % Himmelblau Sky blue Bleu ciel Azul celeste Blu cielo Hemelsblauw
+\definecolor [RAL5017] [h=063971] % Verkehrsblau Traffic blue Bleu signalisation Azul tráfico Blu traffico Verkeersblauw
+\definecolor [RAL5018] [h=3F888F] % Türkisblau Turquoise blue Bleu turquoise Azul turquesa Blu turchese Turkooisblauw
+\definecolor [RAL5019] [h=1B5583] % Capriblau Capri blue Bleu capri Azul capri Blu capri Capriblauw
+\definecolor [RAL5020] [h=1D334A] % Ozeanblau Ocean blue Bleu océan Azul oceano Blu oceano Oceaanblauw
+\definecolor [RAL5021] [h=256D7B] % Wasserblau Water blue Bleu d’eau Azul agua Blu acqua Waterblauw
+\definecolor [RAL5022] [h=252850] % Nachtblau Night blue Bleu nocturne Azul noche Blu notte Nachtblauw
+\definecolor [RAL5023] [h=49678D] % Fernblau Distant blue Bleu distant Azul lejanía Blu distante Verblauw
+\definecolor [RAL5024] [h=5D9B9B] % Pastellblau Pastel blue Bleu pastel Azul pastel Blu pastello Pastelblauw
+\definecolor [RAL5025] [h=2A6478] % Perlenzian Pearl gentian blue Gentiane nacré Gencian perlado Blu genziana perlato Parelmoerblauw
+\definecolor [RAL5026] [h=102C54] % Perlnachtblau Pearl night blue Bleu nuit nacré Azul noche perlado Blu notte perlato Parelmoer nachtblauw
+\definecolor [RAL6000] [h=316650] % Patinagrün Patina green Vert patine Verde patina Verde patina Patinagroen
+\definecolor [RAL6001] [h=287233] % Smaragdgrün Emerald green Vert émeraude Verde esmeralda Verde smeraldo Smaragdgroen
+\definecolor [RAL6002] [h=2D572C] % Laubgrün Leaf green Vert feuillage Verde hoja Verde foglia Loofgroen
+\definecolor [RAL6003] [h=424632] % Olivgrün Olive green Vert olive Verde oliva Verde oliva Olijfgroen
+\definecolor [RAL6004] [h=1F3A3D] % Blaugrün Blue green Vert bleu Verde azulado Verde bluastro Blauwgroen
+\definecolor [RAL6005] [h=2F4538] % Moosgrün Moss green Vert mousse Verde musgo Verde muschio Mosgroen
+\definecolor [RAL6006] [h=3E3B32] % Grauoliv Grey olive Olive gris Oliva grisáceo Oliva grigiastro Grijs olijfgroen
+\definecolor [RAL6007] [h=343B29] % Flaschengrün Bottle green Vert bouteille Verde botella Verde bottiglia Flessegroen
+\definecolor [RAL6008] [h=39352A] % Braungrün Brown green Vert brun Verde parduzco Verde brunastro Bruingroen
+\definecolor [RAL6009] [h=31372B] % Tannengrün Fir green Vert sapin Verde abeto Verde abete Dennegroen
+\definecolor [RAL6010] [h=35682D] % Grasgrün Grass green Vert herbe Verde hierba Verde erba Grasgroen
+\definecolor [RAL6011] [h=587246] % Resedagrün Reseda green Vert réséda Verde reseda Verde reseda Resedagroen
+\definecolor [RAL6012] [h=343E40] % Schwarzgrün Black green Vert noir Verde negruzco Verde nerastro Zwartgroen
+\definecolor [RAL6013] [h=6C7156] % Schilfgrün Reed green Vert jonc Verde caña Verde canna Rietgroen
+\definecolor [RAL6014] [h=47402E] % Gelboliv Yellow olive Olive jaune Amarillo oliva Oliva giallastro Geel olijfgroen
+\definecolor [RAL6015] [h=3B3C36] % Schwarzoliv Black olive Olive noir Oliva negruzco Oliva nerastro Zwart olijfgroen
+\definecolor [RAL6016] [h=1E5945] % Türkisgrün Turquoise green Vert turquoise Verde turquesa Verde turchese Turkooisgroen
+\definecolor [RAL6017] [h=4C9141] % Maigrün May green Vert mai Verde mayo Verde maggio Meigroen
+\definecolor [RAL6018] [h=57A639] % Gelbgrün Yellow green Vert jaune Verde amarillento Verde giallastro Geelgroen
+\definecolor [RAL6019] [h=BDECB6] % Weißgrün Pastel green Vert blanc Verde lanquecino Verde biancastro Witgroen
+\definecolor [RAL6020] [h=2E3A23] % Chromoxidgrün Chrome green Vert oxyde chromique Verde cromo Verde cromo Chroomoxyde groen
+\definecolor [RAL6021] [h=89AC76] % Blassgrün Pale green Vert pâle Verde pálido Verde pallido Bleekgroen
+\definecolor [RAL6022] [h=25221B] % Braunoliv Olive drab Olive brun Oliva parduzco Oliva brunastro Bruin olijfgroen
+\definecolor [RAL6024] [h=308446] % Verkehrsgrün Traffic green Vert signalisation Verde tráfico Verde traffico Verkeersgroen
+\definecolor [RAL6025] [h=3D642D] % Farngrün Fern green Vert fougère Verde helecho Verde felce Varengroen
+\definecolor [RAL6026] [h=015D52] % Opalgrün Opal green Vert opale Verde opalo Verde opale Opaalgroen
+\definecolor [RAL6027] [h=84C3BE] % Lichtgrün Light green Vert clair Verde luminoso Verde chiaro Lichtgroen
+\definecolor [RAL6028] [h=2C5545] % Kieferngrün Pine green Vert pin Verde pino Verde pino Pijnboomgroen
+\definecolor [RAL6029] [h=20603D] % Minzgrün Mint green Vert menthe Verde menta Verde menta Mintgroen
+\definecolor [RAL6032] [h=317F43] % Signalgrün Signal green Vert de sécurité Verde señales Verde segnale Signaalgroen
+\definecolor [RAL6033] [h=497E76] % Minttürkis Mint turquoise Turquoise menthe Turquesa menta Turchese menta Mintturquoise
+\definecolor [RAL6034] [h=7FB5B5] % Pastelltürkis Pastel turquoise Turquoise pastel Turquesa pastel Turchese pastello Pastelturquoise
+\definecolor [RAL6035] [h=1C542D] % Perlgrün Pearl green Vert nacré Verde perlado Verde perlato Parelmoer donkergroen
+\definecolor [RAL6036] [h=193737] % Perlopalgrün Pearl opal green Vert opal nacré Verde ópalo perlado Verde opalo perlato Parelmoer lichtgroen
+\definecolor [RAL6037] [h=008F39] % Reingrün Pure green Vert pur Verde puro Verde puro Zuivergroen
+\definecolor [RAL6038] [h=00BB2D] % Leuchtgrün Luminous green Vert brillant Verde brillante Verde brillante Briljantgroen
+\definecolor [RAL7000] [h=78858B] % Fehgrau Squirrel grey Gris petit-gris Gris ardilla Grigio vaio Pelsgrijs
+\definecolor [RAL7001] [h=8A9597] % Silbergrau Silver grey Gris argent Gris plata Grigio argento Zilvergrijs
+\definecolor [RAL7002] [h=7E7B52] % Olivgrau Olive grey Gris olive Gris oliva Grigio olivastro Olijfgrijs
+\definecolor [RAL7003] [h=6C7059] % Moosgrau Moss grey Gris mousse Gris musgo Grigio muschio Mosgrijs
+\definecolor [RAL7004] [h=969992] % Signalgrau Signal grey Gris de sécurité Gris señales Grigio segnale Signaalgrijs
+\definecolor [RAL7005] [h=646B63] % Mausgrau Mouse grey Gris souris Gris ratón Grigio topo Muisgrijs
+\definecolor [RAL7006] [h=6D6552] % Beigegrau Beige grey Gris beige Gris beige Grigio beige Beigegrijs
+\definecolor [RAL7008] [h=6A5F31] % Khakigrau Khaki grey Gris kaki Gris caqui Grigio kaki Kakigrijs
+\definecolor [RAL7009] [h=4D5645] % Grüngrau Green grey Gris vert Gris verdoso Grigio verdastro Groengrijs
+\definecolor [RAL7010] [h=4C514A] % Zeltgrau Tarpaulin grey Gris tente Gris lona Grigio tenda Zeildoekgrijs
+\definecolor [RAL7011] [h=434B4D] % Eisengrau Iron grey Gris fer Gris hierro Grigio ferro IJzergrijs
+\definecolor [RAL7012] [h=4E5754] % Basaltgrau Basalt grey Gris basalte Gris basalto Grigio basalto Bazaltgrijs
+\definecolor [RAL7013] [h=464531] % Braungrau Brown grey Gris brun Gris parduzco Grigio brunastro Bruingrijs
+\definecolor [RAL7015] [h=434750] % Schiefergrau Slate grey Gris ardoise Gris pizarra Grigio ardesia Leigrijs
+\definecolor [RAL7016] [h=293133] % Anthrazitgrau Anthracite grey Gris anthracite Gris antracita Grigio antracite Antracietgrijs
+\definecolor [RAL7021] [h=23282B] % Schwarzgrau Black grey Gris noir Gris negruzco Grigio nerastro Zwartgrijs
+\definecolor [RAL7022] [h=332F2C] % Umbragrau Umbra grey Gris terre d’ombre Gris sombra Grigio ombra Ombergrijs
+\definecolor [RAL7023] [h=686C5E] % Betongrau Concrete grey Gris béton Gris hormigón Grigio calcestruzzo Betongrijs
+\definecolor [RAL7024] [h=474A51] % Graphitgrau Graphite grey Gris graphite Gris grafita Grigio grafite Grafietgrijs
+\definecolor [RAL7026] [h=2F353B] % Granitgrau Granite grey Gris granit Gris granito Grigio granito Granietgrijs
+\definecolor [RAL7030] [h=8B8C7A] % Steingrau Stone grey Gris pierre Gris piedra Grigio pietra Steengrijs
+\definecolor [RAL7031] [h=474B4E] % Blaugrau Blue grey Gris bleu Gris azulado Grigio bluastro Blauwgrijs
+\definecolor [RAL7032] [h=B8B799] % Kieselgrau Pebble grey Gris silex Gris guijarro Grigio ghiaia Kiezelgrijs
+\definecolor [RAL7033] [h=7D8471] % Zementgrau Cement grey Gris ciment Gris cemento Grigio cemento Cementgrijs
+\definecolor [RAL7034] [h=8F8B66] % Gelbgrau Yellow grey Gris jaune Gris amarillento Grigio giallastro Geelgrijs
+\definecolor [RAL7035] [h=D7D7D7] % Lichtgrau Light grey Gris clair Gris luminoso Grigio luce Lichtgrijs
+\definecolor [RAL7036] [h=7F7679] % Platingrau Platinum grey Gris platine Gris platino Grigio platino Platinagrijs
+\definecolor [RAL7037] [h=7D7F7D] % Staubgrau Dusty grey Gris poussière Gris polvo Grigio polvere Stofgrijs
+\definecolor [RAL7038] [h=B5B8B1] % Achatgrau Agate grey Gris agate Gris ágata Grigio agata Agaatgrijs
+\definecolor [RAL7039] [h=6C6960] % Quarzgrau Quartz grey Gris quartz Gris cuarzo Grigio quarzo Kwartsgrijs
+\definecolor [RAL7040] [h=9DA1AA] % Fenstergrau Window grey Gris fenêtre Gris ventana Grigio finestra Venstergrijs
+\definecolor [RAL7042] [h=8D948D] % Verkehrsgrau A Traffic grey A Gris signalisation A Gris tráfico A Grigio traffico A Verkeesgrijs A
+\definecolor [RAL7043] [h=4E5452] % Verkehrsgrau B Traffic grey B Gris signalisation B Gris tráfico B Grigio traffico B Verkeersgrijs B
+\definecolor [RAL7044] [h=CAC4B0] % Seidengrau Silk grey Gris soie Gris seda Grigio seta Zijdegrijs
+\definecolor [RAL7045] [h=909090] % Telegrau 1 Telegrey 1 Telegris 1 Gris tele 1 Tele grigio 1 Telegrijs 1
+\definecolor [RAL7046] [h=82898F] % Telegrau 2 Telegrey 2 Telegris 2 Gris tele 2 Tele grigio 2 Telegrijs 2
+\definecolor [RAL7047] [h=D0D0D0] % Telegrau 4 Telegrey 4 Telegris 4 Gris tele 4 Tele grigio 4 Telegrijs 4
+\definecolor [RAL7048] [h=898176] % Perlmausgrau Pearl mouse grey Gris souris nacré Gris musgo perlado Grigio topo perlato Parelmoer-muisgrijs
+\definecolor [RAL8000] [h=826C34] % Grünbraun Green brown Brun vert Pardo verdoso Marrone verdastro Groenbruin
+\definecolor [RAL8001] [h=955F20] % Ockerbraun Ochre brown Brun terre de Sienne Pardo ocre Marrone ocra Okerbruin
+\definecolor [RAL8002] [h=6C3B2A] % Signalbraun Signal brown Brun de sécurité Marrón señales Marrone segnale Signaalbruin
+\definecolor [RAL8003] [h=734222] % Lehmbraun Clay brown Brun argile Pardo arcilla Marrone fango Leembruin
+\definecolor [RAL8004] [h=8E402A] % Kupferbraun Copper brown Brun cuivré Pardo cobre Marrone rame Koperbruin
+\definecolor [RAL8007] [h=59351F] % Rehbraun Fawn brown Brun fauve Pardo corzo Marrone capriolo Reebruin
+\definecolor [RAL8008] [h=6F4F28] % Olivbraun Olive brown Brun olive Pardo oliva Marrone oliva Olijfbruin
+\definecolor [RAL8011] [h=5B3A29] % Nussbraun Nut brown Brun noisette Pardo nuez Marrone noce Notebruin
+\definecolor [RAL8012] [h=592321] % Rotbraun Red brown Brun rouge Pardo rojo Marrone rossiccio Roodbruin
+\definecolor [RAL8014] [h=382C1E] % Sepiabraun Sepia brown Brun sépia Sepia Marrone seppia Sepiabruin
+\definecolor [RAL8015] [h=633A34] % Kastanienbraun Chestnut brown Marron Castaño Marrone castagna Kastanjebruin
+\definecolor [RAL8016] [h=4C2F27] % Mahagonibraun Mahogany brown Brun acajou Caoba Marrone mogano Mahoniebruin
+\definecolor [RAL8017] [h=45322E] % Schokoladenbraun Chocolate brown Brun chocolat Chocolate Marrone cioccolata Chocoladebruin
+\definecolor [RAL8019] [h=403A3A] % Graubraun Grey brown Brun gris Pardo grisáceo Marrone grigiastro Grijsbruin
+\definecolor [RAL8022] [h=212121] % Schwarzbraun Black brown Brun noir Pardo negruzco Marrone nerastro Zwartbruin
+\definecolor [RAL8023] [h=A65E2E] % Orangebraun Orange brown Brun orangé Pardo anaranjado Marrone arancio Oranjebruin
+\definecolor [RAL8024] [h=79553D] % Beigebraun Beige brown Brun beige Pardo beige Marrone beige Beigebruin
+\definecolor [RAL8025] [h=755C48] % Blassbraun Pale brown Brun pâle Pardo pálido Marrone pallido Bleekbruin
+\definecolor [RAL8028] [h=4E3B31] % Terrabraun Terra brown Brun terre Marrón tierra Marrone terra Terrabruin
+\definecolor [RAL8029] [h=763C28] % Perlkupfer Pearl copper Cuivre nacré Cobre perlado Rame perlato Parelmoerkoper
+\definecolor [RAL9001] [h=FDF4E3] % Cremeweiß Cream Blanc crème Blanco crema Bianco crema Crèmewit
+\definecolor [RAL9002] [h=E7EBDA] % Grauweiß Grey white Blanc gris Blanco grisáceo Bianco grigiastro Grijswit
+\definecolor [RAL9003] [h=F4F4F4] % Signalweiß Signal white Blanc de sécurité Blanco señales Bianco segnale Signaalwit
+\definecolor [RAL9004] [h=282828] % Signalschwarz Signal black Noir de sécurité Negro señales Nero segnale Signaalzwart
+\definecolor [RAL9005] [h=0A0A0A] % Tiefschwarz Jet black Noir foncé Negro intenso Nero intenso Gitzwart
+\definecolor [RAL9006] [h=A5A5A5] % Weißaluminium White aluminium Aluminium blanc Aluminio blanco Aluminio brillante Blank aluminiumkleurig
+\definecolor [RAL9007] [h=8F8F8F] % Graualuminium Grey aluminium Aluminium gris Aluminio gris Aluminio grigiastro Grijs aluminiumkleurig
+\definecolor [RAL9010] [h=FFFFFF] % Reinweiß Pure white Blanc pur Blanco puro Bianco puro Zuiverwit
+\definecolor [RAL9011] [h=1C1C1C] % Graphitschwarz Graphite black Noir graphite Negro grafito Nero grafite Grafietzwart
+\definecolor [RAL9016] [h=F6F6F6] % Verkehrsweiß Traffic white Blanc signalisation Blanco tráfico Bianco traffico Verkeerswit
+\definecolor [RAL9017] [h=1E1E1E] % Verkehrsschwarz Traffic black Noir signalisation Negro tráfico Nero traffico Verkeerszwart
+\definecolor [RAL9018] [h=D7D7D7] % Papyrusweiß Papyrus white Blanc papyrus Blanco papiro Bianco papiro Papyruswit
+\definecolor [RAL9022] [h=9C9C9C] % Perlhellgrau Pearl light grey Gris clair nacré Gris claro perlado Grigio chiaro perlato Parelmoer lichtgrijs
+\definecolor [RAL9023] [h=828282] % Perldunkelgrau Pearl dark grey Gris fonçé nacré Gris oscuro perlado Grigio scuro perlato Parelmoer donkergrijs
+
+\stopprotectedcolors
+
+\endinput
+
+
diff --git a/Master/texmf-dist/tex/context/base/colo-imp-rgb.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-rgb.mkiv
index d7b691fccb2..58b2ca42c2a 100644
--- a/Master/texmf-dist/tex/context/base/colo-imp-rgb.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-rgb.mkiv
@@ -38,6 +38,9 @@
\definecolor [lightred] [r=1, g=0, b=0]
\definecolor [lightgreen] [r=0, g=1, b=0]
\definecolor [lightblue] [r=0, g=0, b=1]
+\definecolor [lightcyan] [r=0, g=1, b=1]
+\definecolor [lightmagenta] [r=1, g=0, b=1]
+\definecolor [lightyellow] [r=1, g=1, b=0]
\definecolor [middlered] [r=.8, g=0, b=0]
\definecolor [middlegreen] [r=0, g=.8, b=0]
@@ -87,12 +90,15 @@
\definecolor [donkercyaan] [darkcyan]
\definecolor [middelcyaan] [middlecyan]
+ \definecolor [lichtcyaan] [lightcyan]
\definecolor [donkermagenta] [darkmagenta]
\definecolor [middelmagenta] [middlemagenta]
+ \definecolor [lichtmagenta] [lightmagenta]
\definecolor [donkergeel] [darkyellow]
\definecolor [middelgeel] [middleyellow]
+ \definecolor [lichtgeel] [lightyellow]
\definecolor [donkergrijs] [darkgray]
\definecolor [middengrijs] [middlegray]
@@ -128,12 +134,15 @@
\definecolor [dunkelcyan] [darkcyan]
\definecolor [mittelcyan] [middlecyan]
+ \definecolor [hellcyan] [lightcyan]
\definecolor [dunkelmagenta] [darkmagenta]
\definecolor [mittelmagenta] [middlemagenta]
+ \definecolor [hellmagenta] [lightmagenta]
\definecolor [dunkelgelb] [darkyellow]
\definecolor [mittelgelb] [middleyellow]
+ \definecolor [hellgelb] [lightyellow]
\definecolor [dunkelgrau] [darkgray]
\definecolor [mittelgrau] [middlegray]
@@ -168,12 +177,15 @@
\definecolor [tmaveazurova] [darkcyan]
\definecolor [stredneazurova] [middlecyan]
+ \definecolor [svelteazurova] [lightcyan]
\definecolor [tmavefialova] [darkmagenta]
\definecolor [strednefialova] [middlemagenta]
+ \definecolor [sveltefialova] [lightmagenta]
\definecolor [tmavezluta] [darkyellow]
\definecolor [strednezluta] [middleyellow]
+ \definecolor [sveltezluta] [lightyellow]
\definecolor [tmaveseda] [darkgray]
\definecolor [stredneseda] [middlegray]
@@ -210,14 +222,16 @@
\definecolor [bluchiaro] [lightblue]
\definecolor [azzurroscuro] [darkcyan]
- \definecolor [azzurrochiaro] [middlecyan]
+ \definecolor [azzurromedio] [middlecyan]
+ \definecolor [azzurrochiaro] [lightcyan]
\definecolor [cremisiscuro] [darkmagenta]
- \definecolor [cremisichiaro] [middlemagenta]
-
+ \definecolor [cremisimedio] [middlemagenta]
+ \definecolor [cremisichiaro] [lightmagenta]
\definecolor [gialloscuro] [darkyellow]
\definecolor [giallomedio] [middleyellow]
+ \definecolor [giallochiaro] [lightyellow]
\definecolor [grigioscuro] [darkgray]
\definecolor [grigiomedio] [middlegray]
@@ -225,6 +239,50 @@
\stopinterface
+\startinterface french
+
+ \definecolor [rouge] [red]
+ \definecolor [vert] [green]
+ \definecolor [bleu] [blue]
+
+ \definecolor [cyan] [cyan]
+ \definecolor [magenta] [magenta]
+ \definecolor [jaune] [yellow]
+
+ \definecolor [blanche] [white]
+ \definecolor [gris] [gray]
+ \definecolor [noir] [black]
+
+ \definecolor [rougefoncé] [darkred]
+ \definecolor [rougemoyen] [middlered]
+ \definecolor [rougeclair] [lightred]
+
+ \definecolor [vertfoncé] [darkgreen]
+ \definecolor [vertmoyen] [middlegreen]
+ \definecolor [vertclair] [lightgreen]
+
+ \definecolor [bleufoncé] [darkblue]
+ \definecolor [bleumoyen] [middleblue]
+ \definecolor [bleuclair] [lightblue]
+
+ \definecolor [cyanfoncé] [darkcyan]
+ \definecolor [cyanmoyen] [middlecyan]
+ \definecolor [cyanclair] [lightcyan]
+
+ \definecolor [magentafoncé] [darkmagenta]
+ \definecolor [magentamoyen] [middlemagenta]
+ \definecolor [magentaclair] [lightmagenta]
+
+ \definecolor [jaunefoncé] [darkyellow]
+ \definecolor [jaunemoyen] [middleyellow]
+ \definecolor [jauneclair] [lightyellow]
+
+ \definecolor [grisfoncé] [darkgray]
+ \definecolor [grismoyen] [middlegray]
+ \definecolor [grisclair] [lightgray]
+
+\stopinterface
+
\startinterface romanian
\definecolor [rosu] [red]
@@ -253,12 +311,15 @@
\definecolor [cianinchis] [darkcyan]
\definecolor [cianmediu] [middlecyan]
+ \definecolor [ciandeschis] [lightcyan]
\definecolor [magentainchis] [darkmagenta]
\definecolor [magentamediu] [middlemagenta]
+ \definecolor [magentadeschis] [lightmagenta]
\definecolor [galbeninchis] [darkyellow]
\definecolor [galbenmediu] [middleyellow]
+ \definecolor [galbendeschis] [lightyellow]
\definecolor [griinchis] [darkgray]
\definecolor [grimediu] [middlegray]
@@ -269,6 +330,7 @@
%D Bonus (needed for FO test):
\definecolor [orange] [r=1, g=.5]
+\definecolor [lightorange] [r=1, g=.5]
\definecolor [middleorange] [r=.6,g=.3]
\definecolor [darkorange] [r=.4,g=.2]
diff --git a/Master/texmf-dist/tex/context/base/colo-imp-x11.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-x11.mkiv
index 45d3aac6248..98a71354d2f 100644
--- a/Master/texmf-dist/tex/context/base/colo-imp-x11.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-x11.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=colo-x11,
+%D [ file=colo-imp-x11,
%D version=2009.11.13,
%D title=\CONTEXT\ Color Macros,
%D subtitle=X11,
@@ -9,11 +9,10 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D Standard X11 rgb colors (from \type {/usr/share/X11/rgb.txt}):
+%D Standard X11 rgb colors (from, e.g. \type {/usr/share/X11/rgb.txt}).
+%D Note that we have dropped the \quote{grey} spelling variants.
-\doifnotmode{mkiv} {
- \input colo-hex.mkii
-}
+\startprotectedcolors
\definecolor [snow] [h=fffafa]
\definecolor [ghostwhite] [h=f8f8ff]
@@ -43,20 +42,14 @@
\definecolor [white] [s=1]
\definecolor [black] [s=0]
\definecolor [darkslategray] [h=2f4f4f]
-\definecolor [darkslategrey] [darkslategray]
\definecolor [dimgray] [s=0.41]
-\definecolor [dimgrey] [dimgray]
\definecolor [slategray] [h=708090]
-\definecolor [slategrey] [slategray]
\definecolor [lightslategray] [h=778899]
-\definecolor [lightslategrey] [lightslategray]
\definecolor [gray] [s=0.75]
-\definecolor [grey] [gray]
-\definecolor [lightgrey] [s=0.83]
-\definecolor [lightgray] [lightgrey]
+\definecolor [lightgray] [s=0.83]
\definecolor [midnightblue] [h=191970]
\definecolor [navy] [h=000080]
-\definecolor [navyblue] [navy]
+\definecolor [navyblue] [h=000080]
\definecolor [cornflowerblue] [h=6495ed]
\definecolor [darkslateblue] [h=483d8b]
\definecolor [slateblue] [h=6a5acd]
@@ -464,214 +457,22 @@
\definecolor [thistle2] [h=eed2ee]
\definecolor [thistle3] [h=cdb5cd]
\definecolor [thistle4] [h=8b7b8b]
-\definecolor [gray0] [s=0.00]
-\definecolor [grey0] [gray0]
-\definecolor [gray1] [s=0.01]
-\definecolor [grey1] [gray1]
-\definecolor [gray2] [s=0.02]
-\definecolor [grey2] [gray2]
-\definecolor [gray3] [s=0.03]
-\definecolor [grey3] [gray3]
-\definecolor [gray4] [s=0.04]
-\definecolor [grey4] [gray4]
-\definecolor [gray5] [s=0.05]
-\definecolor [grey5] [gray5]
-\definecolor [gray6] [s=0.06]
-\definecolor [grey6] [gray6]
-\definecolor [gray7] [s=0.07]
-\definecolor [grey7] [gray7]
-\definecolor [gray8] [s=0.08]
-\definecolor [grey8] [gray8]
-\definecolor [gray9] [s=0.09]
-\definecolor [grey9] [gray9]
-\definecolor [gray10] [s=0.10]
-\definecolor [grey10] [gray10]
-\definecolor [gray11] [s=0.11]
-\definecolor [grey11] [gray11]
-\definecolor [gray12] [s=0.12]
-\definecolor [grey12] [gray12]
-\definecolor [gray13] [s=0.13]
-\definecolor [grey13] [gray13]
-\definecolor [gray14] [s=0.14]
-\definecolor [grey14] [gray14]
-\definecolor [gray15] [s=0.15]
-\definecolor [grey15] [gray15]
-\definecolor [gray16] [s=0.16]
-\definecolor [grey16] [gray16]
-\definecolor [gray17] [s=0.17]
-\definecolor [grey17] [gray17]
-\definecolor [gray18] [s=0.18]
-\definecolor [grey18] [gray18]
-\definecolor [gray19] [s=0.19]
-\definecolor [grey19] [gray19]
-\definecolor [gray20] [s=0.20]
-\definecolor [grey20] [gray20]
-\definecolor [gray21] [s=0.21]
-\definecolor [grey21] [gray21]
-\definecolor [gray22] [s=0.22]
-\definecolor [grey22] [gray22]
-\definecolor [gray23] [s=0.23]
-\definecolor [grey23] [gray23]
-\definecolor [gray24] [s=0.24]
-\definecolor [grey24] [gray24]
-\definecolor [gray25] [s=0.25]
-\definecolor [grey25] [gray25]
-\definecolor [gray26] [s=0.26]
-\definecolor [grey26] [gray26]
-\definecolor [gray27] [s=0.27]
-\definecolor [grey27] [gray27]
-\definecolor [gray28] [s=0.28]
-\definecolor [grey28] [gray28]
-\definecolor [gray29] [s=0.29]
-\definecolor [grey29] [gray29]
-\definecolor [gray30] [s=0.30]
-\definecolor [grey30] [gray30]
-\definecolor [gray31] [s=0.31]
-\definecolor [grey31] [gray31]
-\definecolor [gray32] [s=0.32]
-\definecolor [grey32] [gray32]
-\definecolor [gray33] [s=0.33]
-\definecolor [grey33] [gray33]
-\definecolor [gray34] [s=0.34]
-\definecolor [grey34] [gray34]
-\definecolor [gray35] [s=0.35]
-\definecolor [grey35] [gray35]
-\definecolor [gray36] [s=0.36]
-\definecolor [grey36] [gray36]
-\definecolor [gray37] [s=0.37]
-\definecolor [grey37] [gray37]
-\definecolor [gray38] [s=0.38]
-\definecolor [grey38] [gray38]
-\definecolor [gray39] [s=0.39]
-\definecolor [grey39] [gray39]
-\definecolor [gray40] [s=0.40]
-\definecolor [grey40] [gray40]
-\definecolor [gray41] [s=0.41]
-\definecolor [grey41] [gray41]
-\definecolor [gray42] [s=0.42]
-\definecolor [grey42] [gray42]
-\definecolor [gray43] [s=0.43]
-\definecolor [grey43] [gray43]
-\definecolor [gray44] [s=0.44]
-\definecolor [grey44] [gray44]
-\definecolor [gray45] [s=0.45]
-\definecolor [grey45] [gray45]
-\definecolor [gray46] [s=0.46]
-\definecolor [grey46] [gray46]
-\definecolor [gray47] [s=0.47]
-\definecolor [grey47] [gray47]
-\definecolor [gray48] [s=0.48]
-\definecolor [grey48] [gray48]
-\definecolor [gray49] [s=0.49]
-\definecolor [grey49] [gray49]
-\definecolor [gray50] [s=0.50]
-\definecolor [grey50] [gray50]
-\definecolor [gray51] [s=0.51]
-\definecolor [grey51] [gray51]
-\definecolor [gray52] [s=0.52]
-\definecolor [grey52] [gray52]
-\definecolor [gray53] [s=0.53]
-\definecolor [grey53] [gray53]
-\definecolor [gray54] [s=0.54]
-\definecolor [grey54] [gray54]
-\definecolor [gray55] [s=0.55]
-\definecolor [grey55] [gray55]
-\definecolor [gray56] [s=0.56]
-\definecolor [grey56] [gray56]
-\definecolor [gray57] [s=0.57]
-\definecolor [grey57] [gray57]
-\definecolor [gray58] [s=0.58]
-\definecolor [grey58] [gray58]
-\definecolor [gray59] [s=0.59]
-\definecolor [grey59] [gray59]
-\definecolor [gray60] [s=0.60]
-\definecolor [grey60] [gray60]
-\definecolor [gray61] [s=0.61]
-\definecolor [grey61] [gray61]
-\definecolor [gray62] [s=0.62]
-\definecolor [grey62] [gray62]
-\definecolor [gray63] [s=0.63]
-\definecolor [grey63] [gray63]
-\definecolor [gray64] [s=0.64]
-\definecolor [grey64] [gray64]
-\definecolor [gray65] [s=0.65]
-\definecolor [grey65] [gray65]
-\definecolor [gray66] [s=0.66]
-\definecolor [grey66] [gray66]
-\definecolor [gray67] [s=0.67]
-\definecolor [grey67] [gray67]
-\definecolor [gray68] [s=0.68]
-\definecolor [grey68] [gray68]
-\definecolor [gray69] [s=0.69]
-\definecolor [grey69] [gray69]
-\definecolor [gray70] [s=0.70]
-\definecolor [grey70] [gray70]
-\definecolor [gray71] [s=0.71]
-\definecolor [grey71] [gray71]
-\definecolor [gray72] [s=0.72]
-\definecolor [grey72] [gray72]
-\definecolor [gray73] [s=0.73]
-\definecolor [grey73] [gray73]
-\definecolor [gray74] [s=0.74]
-\definecolor [grey74] [gray74]
-\definecolor [gray75] [s=0.75]
-\definecolor [grey75] [gray75]
-\definecolor [gray76] [s=0.76]
-\definecolor [grey76] [gray76]
-\definecolor [gray77] [s=0.77]
-\definecolor [grey77] [gray77]
-\definecolor [gray78] [s=0.78]
-\definecolor [grey78] [gray78]
-\definecolor [gray79] [s=0.79]
-\definecolor [grey79] [gray79]
-\definecolor [gray80] [s=0.80]
-\definecolor [grey80] [gray80]
-\definecolor [gray81] [s=0.81]
-\definecolor [grey81] [gray81]
-\definecolor [gray82] [s=0.82]
-\definecolor [grey82] [gray82]
-\definecolor [gray83] [s=0.83]
-\definecolor [grey83] [gray83]
-\definecolor [gray84] [s=0.84]
-\definecolor [grey84] [gray84]
-\definecolor [gray85] [s=0.85]
-\definecolor [grey85] [gray85]
-\definecolor [gray86] [s=0.86]
-\definecolor [grey86] [gray86]
-\definecolor [gray87] [s=0.87]
-\definecolor [grey87] [gray87]
-\definecolor [gray88] [s=0.88]
-\definecolor [grey88] [gray88]
-\definecolor [gray89] [s=0.89]
-\definecolor [grey89] [gray89]
-\definecolor [gray90] [s=0.90]
-\definecolor [grey90] [gray90]
-\definecolor [gray91] [s=0.91]
-\definecolor [grey91] [gray91]
-\definecolor [gray92] [s=0.92]
-\definecolor [grey92] [gray92]
-\definecolor [gray93] [s=0.93]
-\definecolor [grey93] [gray93]
-\definecolor [gray94] [s=0.94]
-\definecolor [grey94] [gray94]
-\definecolor [gray95] [s=0.95]
-\definecolor [grey95] [gray95]
-\definecolor [gray96] [s=0.96]
-\definecolor [grey96] [gray96]
-\definecolor [gray97] [s=0.97]
-\definecolor [grey97] [gray97]
-\definecolor [gray98] [s=0.98]
-\definecolor [grey98] [gray98]
-\definecolor [gray99] [s=0.99]
-\definecolor [grey99] [gray99]
-\definecolor [gray100] [s=1.00]
-\definecolor [grey100] [gray100]
-\definecolor [darkgrey] [s=0.66]
-\definecolor [darkgray] [darkgrey]
+
+% A lot of useless grays (since one can always specify \color[s=.XX]:
+
+\dostepwiserecurse{0}{100}{1}{
+ \definecolor [gray#1] [s=\cldcontext{#1/100}]
+}
+
+% These were missing in the original specification, but were added later:
+
+\definecolor [darkgray] [s=0.66]
\definecolor [darkblue] [h=00008b]
\definecolor [darkcyan] [h=008b8b]
\definecolor [darkmagenta] [h=8b008b]
\definecolor [darkred] [h=8b0000]
\definecolor [lightgreen] [h=90ee90]
+\stopprotectedcolors
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-imp-xwi.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-xwi.mkiv
index 557e9c57c54..57fe7965b7e 100644
--- a/Master/texmf-dist/tex/context/base/colo-imp-xwi.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-imp-xwi.mkiv
@@ -8,11 +8,13 @@
%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.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
%D I've forgotten where I got these definitions from, but maybe
-%D they can be of use.
+%D they can be of use.
+
+\startprotectedcolors
\definecolor [aliceblue] [r=0.94,g=0.97,b=1.00]
\definecolor [antiquewhite] [r=0.98,g=0.92,b=0.84]
@@ -127,7 +129,7 @@
\definecolor [snow] [r=1.00,g=0.98,b=0.98]
\definecolor [springgreen] [r=0.00,g=1.00,b=0.50]
\definecolor [steelblue] [r=0.27,g=0.51,b=0.71]
-\definecolor [tan ] [r=0.82,g=0.71,b=0.55]
+\definecolor [x11tan] [r=0.82,g=0.71,b=0.55]
\definecolor [thistle] [r=0.85,g=0.75,b=0.85]
\definecolor [tomato] [r=1.00,g=0.39,b=0.28]
\definecolor [turquoise] [r=0.25,g=0.88,b=0.82]
@@ -139,4 +141,6 @@
\definecolor [yellow] [r=1.00,g=1.00,b=0.00]
\definecolor [yellowgreen] [r=0.60,g=0.80,b=0.20]
+\stopprotectedcolors
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/colo-ini.lua
index 81adfa68091..1a055242b18 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-ini.lua
@@ -362,7 +362,7 @@ local function defineprocesscolor(name,str,global,freeze) -- still inconsistent
definecolor(name, register_color(name,'rgb', tonumber(r) or 0, tonumber(g) or 0, tonumber(b) or 0), global)
else
local c, m, y, k = settings.c, settings.m, settings.y, settings.k
- if c or m or y or b then
+ if c or m or y or k then
definecolor(name, register_color(name,'cmyk',tonumber(c) or 0, tonumber(m) or 0, tonumber(y) or 0, tonumber(k) or 0), global)
else
local h, s, v = settings.h, settings.s, settings.v
@@ -576,10 +576,13 @@ local function mpcolor(model,ca,ta,default)
return formatters["(%s,%s,%s)"](cv[3],cv[4],cv[5])
end
end
- else
- default = default or 0 -- rgb !
- return formatters["(%s,%s,%s)"](default,default,default)
end
+ local tv = transparencyvalues[ta]
+ if tv then
+ return formatters["(%s,%s)"](tv[1],tv[2])
+ end
+ default = default or 0 -- rgb !
+ return formatters["(%s,%s,%s)"](default,default,default)
end
local function mpnamedcolor(name)
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-ini.mkiv
index 1eb3d8d7e6e..26208edd448 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-ini.mkiv
@@ -16,6 +16,8 @@
\writestatus{loading}{ConTeXt Color Macros / Initialization}
+%D Todo: move color space in color attribute (last two bits)
+
%D This module implements color. Since \MKII\ and \MKIV\ use a completely
%D different approach, this module only implements a few generic mechanisms.
@@ -166,7 +168,7 @@
\unexpanded\def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}
\unexpanded\def\stopcolorpage {\stopcolor}
-\def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ...
+\unexpanded\def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ...
{\begingroup
\colo_helpers_activate{#1}%
\normalexpanded{\endgroup\edef\noexpand#2%
@@ -248,7 +250,7 @@
\fi
%
\setfalse\c_colo_convert_gray
- \getvalue{\??colorconversions\directcolorsparameter\c!conversion}% could be a nice \ifcsname
+ \begincsname\??colorconversions\directcolorsparameter\c!conversion\endcsname
% too often:
\ifconditional\c_colo_rgb_supported \colo_helpers_show_message\m!colors{10}\v!rgb \fi
\ifconditional\c_colo_cmyk_supported\colo_helpers_show_message\m!colors{10}\v!cmyk\fi
@@ -361,25 +363,73 @@
%D This saves us some typing in for instance the modules that
%D deal with pretty verbatim typesetting.
-\let\m_colo_palets_tmp\empty
+\installcorenamespace{paletlist}
+\installcorenamespace{paletsize}
+
+\let\m_colo_palet\relax
+\let\c_colo_palet\relax
+
+\def\colo_palet_allocate#1%
+ {\expandafter\let \csname\??paletlist#1\endcsname\empty
+ \expandafter\newcount\csname\??paletsize#1\endcsname}
+
+\def\colo_palet_prepare#1%
+ {\edef\colo_palet_name{#1}%
+ \ifcsname\??paletlist\colo_palet_name\endcsname\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}
+
+\def\colo_palet_extend#1%
+ {\addtocommalist{#1}\m_colo_palet
+ \expandafter\let\csname\??paletlist\colo_palet_name\endcsname\m_colo_palet
+ \advance\c_colo_palet\plusone}
+
+\unexpanded\def\doifelsecolorpalet#1%
+ {\ifcsname\??paletlist#1\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+\let\paletlist\empty
+\let\paletsize\!!zerocount
+
+\unexpanded\def\getpaletlist[#1]%
+ {\edef\paletlist{\begincsname\??paletlist#1\endcsname}}
+
+\unexpanded\def\getpaletsize[#1]%
+ {\ifcsname\??paletsize#1\endcsname
+ \edef\paletsize{\the\lastnamedcs}%
+ \else
+ \let\paletsize\!!zerocount
+ \fi}
\unexpanded\def\definepalet
- {\dodoubleargument\colo_palets_define}
-
-\unexpanded\def\colo_palets_define[#1][#2]% todo
- {\doifelseassignment{#2}
- {%\colo_helpers_show_message\m!colors6{#1}%
- \let\m_colo_palets_tmp\empty
- \setevalue{\??colorpaletspecification#1}{#2}%
- \processcommalist[#2]{\colo_palets_define_one{#1}}%
- \letvalue{\??colorpalet#1}\m_colo_palets_tmp
- \let\m_colo_palets_tmp\empty}
+ {\dotripleempty\colo_palets_define}
+
+\def\colo_palets_define
+ {\ifthirdargument
+ \expandafter\colo_palets_define_b
+ \else
+ \expandafter\colo_palets_define_a
+ \fi}
+
+\unexpanded\def\colo_palets_define_a[#1][#2][#3]%
+ {\colo_palet_prepare{#1}%
+ \doifelseassignment{#2}
+ {\setevalue{\??colorpaletspecification#1}{#2}%
+ \processcommalist[#2]{\colo_palets_define_one{#1}}}
{\ifcsname\??colorpaletspecification#2\endcsname
- \normalexpanded{\colo_palets_define[#1][\csname\??colorpaletspecification#2\endcsname]}%
+ \normalexpanded{\colo_palets_define[#1][\lastnamedcs]}%
\fi}}
-% \def\colo_palets_define_one#1#2% get rid of { } in #2
-% {\colo_palets_define_two{#1}[#2]}%
+\unexpanded\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}}
\def\colo_palets_define_one#1#2% get rid of { }
{\doifelseassignment{#2} % catch empty entries
@@ -387,20 +437,14 @@
{\colo_palets_define_three{#1}{#2}}}
\def\colo_palets_define_two#1[#2=#3]%
- {\edef\m_colo_palets_tmp{\ifx\m_colo_palets_tmp\empty\else\m_colo_palets_tmp,\fi#2}%
+ {\colo_palet_extend{#2}%
\colo_palets_define_set{#1}{#2}{#3}}%
\def\colo_palets_define_three#1#2%
{\ifcsname\??colorpaletspecification#2\endcsname
- \processcommacommand[\csname\??colorpaletspecification#2\endcsname]{\colo_palets_define_one{#1}}%
+ \processcommacommand[\lastnamedcs]{\colo_palets_define_one{#1}}%
\fi}
-\let\paletsize\!!zerocount
-
-\unexpanded\def\getpaletsize[#1]% only works for valid k=v definitions
- {\getcommacommandsize[\csname\??colorpaletspecification#1\endcsname]%
- \edef\paletsize{\number\commalistsize}}
-
%D Instead of refering to colors, one can also directly specify
%D a color:
%D
@@ -427,7 +471,7 @@
\ifx\currentcolorpalet\empty
% seems to be a reset
\let\currentcolorprefix\empty
- \else\ifcsname\??colorpalet\currentcolorpalet\endcsname
+ \else\ifcsname\??paletlist\currentcolorpalet\endcsname
\edef\currentcolorprefix{#1:}%
\else
\colo_helpers_show_message\m!colors7\currentcolorpalet
@@ -506,13 +550,11 @@
%D
%D These speak for themselves. See \type {colo-ext} for usage.
-\def\negatecolorcomponent#1% #1 = \macro
+\unexpanded\def\negatecolorcomponent#1% #1 = \macro
{\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
\ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
\edef#1{\withoutpt\the\scratchdimen}}
-\let\negatedcolorcomponent\firstofoneargument
-
\def\negatedcolorcomponent#1%
{\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
\!!zerocount
@@ -520,7 +562,7 @@
\expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
\fi}
-\def\negatecolorcomponent#1% #1 = \macro
+\unexpanded\def\negatecolorcomponent#1% #1 = \macro
{\edef#1{\negatedcolorcomponent{#1}}}
%D \macros
@@ -619,16 +661,16 @@
\def\colo_helpers_fast_activate_yes#1%
{\ifcsname\??colorsetter\currentcolorprefix#1\endcsname
- \csname\??colorsetter\currentcolorprefix#1\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorprefix#1\endcsname
\else\ifcsname\??colorsetter#1\endcsname
- \csname\??colorsetter#1\endcsname
+ \lastnamedcs
\csname\??transparencysetter#1\endcsname
\fi\fi}
\def\colo_helpers_fast_activate_nop#1%
{\ifcsname\??colorsetter#1\endcsname
- \csname\??colorsetter#1\endcsname
+ \lastnamedcs
\csname\??transparencysetter#1\endcsname
\fi}
@@ -646,17 +688,17 @@
\def\colo_helpers_activate_yes#1%
{\edef\currentcolorname{#1}%
\ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
- \csname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorprefix\currentcolorname\endcsname
\else\ifcsname\??colorsetter\currentcolorname\endcsname
- \csname\??colorsetter\currentcolorname\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorname\endcsname
\fi\fi}
\def\colo_helpers_activate_nop#1%
{\edef\currentcolorname{#1}%
\ifcsname\??colorsetter\currentcolorname\endcsname
- \csname\??colorsetter\currentcolorname\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorname\endcsname
\fi}
@@ -674,10 +716,10 @@
\unexpanded\def\dousecurrentcolorparameter
{\let\currentcolorname\currentcolorparameter % maybe only when success
\ifcsname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname
- \csname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorprefix\currentcolorparameter\endcsname
\else\ifcsname\??colorsetter\currentcolorparameter\endcsname
- \csname\??colorsetter\currentcolorparameter\endcsname
+ \lastnamedcs
\csname\??transparencysetter\currentcolorparameter\endcsname
\fi\fi}
@@ -972,15 +1014,28 @@
\appendtoks \colo_helpers_initialize_maintextcolor \to \everyjob
\appendtoks \colo_helpers_initialize_maintextcolor \to \everysetupcolors
-\def\colo_helpers_inherited_direct_cs#1{\csname\??colorsetter \ifcsname\??colorsetter #1\endcsname#1\fi\endcsname}
-\def\colo_helpers_inherited_direct_ca#1{\csname\??colorattribute \ifcsname\??colorattribute #1\endcsname#1\fi\endcsname}
-\def\colo_helpers_inherited_direct_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter #1\endcsname#1\fi\endcsname}
-\def\colo_helpers_inherited_direct_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute#1\endcsname#1\fi\endcsname}
+\letvalue{\??colorsetter }\empty \letvalue{\??colorattribute }\!!zerocount
+\letvalue{\??transparencysetter}\empty \letvalue{\??transparencyattribute}\!!zerocount
+
+%def\colo_helpers_inherited_direct_cs#1{\csname\??colorsetter \ifcsname\??colorsetter #1\endcsname#1\fi\endcsname}
+%def\colo_helpers_inherited_direct_ca#1{\csname\??colorattribute \ifcsname\??colorattribute #1\endcsname#1\fi\endcsname}
+%def\colo_helpers_inherited_direct_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter #1\endcsname#1\fi\endcsname}
+%def\colo_helpers_inherited_direct_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute#1\endcsname#1\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_cs#1#2{\csname\??colorsetter \ifcsname\??colorsetter \??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_ts#1#2{\csname\??transparencysetter \ifcsname\??transparencysetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname}
+\def\colo_helpers_inherited_direct_cs#1{\ifcsname\??colorsetter #1\endcsname\lastnamedcs\fi}
+\def\colo_helpers_inherited_direct_ca#1{\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\!!zerocount\fi}
+\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
@@ -992,36 +1047,69 @@
\fi
\to \everysetupcolors
+% \def\colo_palets_define_set#1#2#3%
+% {\doifelseassignment{#3}% \definepalet[test][xx={y=.4}]
+% {\definecolor[\??colorpalet#1:#2][#3]%
+% \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_palet_ca{#1}{#2}}%
+% \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_palet_cs{#1}{#2}}%
+% \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_palet_ta{#1}{#2}}%
+% \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_palet_ts{#1}{#2}}}
+% {\ifcsname\??colorsetter#3\endcsname % \definepalet[test][xx=green]
+% \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_direct_cs{#3}}%
+% \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_direct_ca{#3}}%
+% \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_direct_ts{#3}}%
+% \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_direct_ta{#3}}%
+% \else
+% % not entered when making format
+% \localundefine{\??colorsetter #1:#2}%
+% \localundefine{\??colorattribute #1:#2}%
+% \localundefine{\??transparencysetter #1:#2}%
+% \localundefine{\??transparencyattribute#1:#2}%
+% \fi}}
+
\def\colo_palets_define_set#1#2#3%
{\doifelseassignment{#3}% \definepalet[test][xx={y=.4}]
- {\definecolor[\??colorpalet#1:#2][#3]%
- \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_palet_ca{#1}{#2}}%
- \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_palet_cs{#1}{#2}}%
- \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_palet_ta{#1}{#2}}%
- \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_palet_ts{#1}{#2}}}
- {\ifcsname\??colorsetter#3\endcsname % \definepalet[test][xx=green]
- \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_direct_cs{#3}}%
- \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_direct_ca{#3}}%
- \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_direct_ts{#3}}%
- \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_direct_ta{#3}}%
+ {\colo_palets_define_assign}%
+ {\ifcsname\??colorsetter#3\endcsname
+ % \definepalet[test][xx=green]
+ \expandafter\colo_palets_define_inherit
\else
% not entered when making format
- \localundefine{\??colorsetter #1:#2}%
- \localundefine{\??colorattribute #1:#2}%
- \localundefine{\??transparencysetter #1:#2}%
- \localundefine{\??transparencyattribute#1:#2}%
- \fi}}
-
-\letvalue{\??colorsetter }\empty \letvalue{\??colorattribute }\!!zerocount
-\letvalue{\??transparencysetter}\empty \letvalue{\??transparencyattribute}\!!zerocount
+ \expandafter\colo_palets_define_undefine
+ \fi}%
+ {#1}{#2}{#3}}
+
+\def\colo_palets_define_inherit#1#2#3%
+ {\colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_direct_cs{#3}}%
+ \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_direct_ca{#3}}%
+ \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_direct_ts{#3}}%
+ \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_direct_ta{#3}}}
+
+\def\colo_palets_define_undefine#1#2#3%
+ {\localundefine{\??colorsetter #1:#2}%
+ \localundefine{\??colorattribute #1:#2}%
+ \localundefine{\??transparencysetter #1:#2}%
+ \localundefine{\??transparencyattribute#1:#2}}
+
+\def\colo_palets_define_assign#1#2#3%
+ {\definecolor[\??colorpalet#1:#2][#3]%
+ \colo_helpers_set_value{\??colorsetter #1:#2}{\colo_helpers_inherited_direct_cs{\??colorpalet#1:#2}}%
+ \colo_helpers_set_value{\??colorattribute #1:#2}{\colo_helpers_inherited_direct_ca{\??colorpalet#1:#2}}%
+ \colo_helpers_set_value{\??transparencysetter #1:#2}{\colo_helpers_inherited_direct_ts{\??colorpalet#1:#2}}%
+ \colo_helpers_set_value{\??transparencyattribute#1:#2}{\colo_helpers_inherited_direct_ta{\??colorpalet#1:#2}}}
\setvalue{\??colorattribute currentcolor}{\the\attribute\colorattribute} % for mpcolor
\setvalue{\??transparencyattribute currentcolor}{\the\attribute\transparencyattribute} % for mpcolor
-\def\colo_helpers_inherited_current_ca#1{\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
-\def\colo_helpers_inherited_current_cs#1{\csname\??colorsetter \ifcsname\??colorsetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorsetter #1\endcsname#1\fi\fi\endcsname}
-\def\colo_helpers_inherited_current_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
-\def\colo_helpers_inherited_current_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencysetter #1\endcsname#1\fi\fi\endcsname}
+%def\colo_helpers_inherited_current_ca#1{\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
+%def\colo_helpers_inherited_current_cs#1{\csname\??colorsetter \ifcsname\??colorsetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorsetter #1\endcsname#1\fi\fi\endcsname}
+%def\colo_helpers_inherited_current_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
+%def\colo_helpers_inherited_current_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencysetter #1\endcsname#1\fi\fi\endcsname}
+
+\def\colo_helpers_inherited_current_ca#1{\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\!!zerocount\fi\fi}
+\def\colo_helpers_inherited_current_cs#1{\ifcsname\??colorsetter \currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??colorsetter #1\endcsname\lastnamedcs\else\fi\fi}
+\def\colo_helpers_inherited_current_ta#1{\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\!!zerocount\fi\fi}
+\def\colo_helpers_inherited_current_ts#1{\ifcsname\??transparencysetter \currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??transparencysetter #1\endcsname\lastnamedcs\else\fi\fi}
%D Low level defs:
@@ -1070,6 +1158,17 @@
\colo_helpers_inherited_current_ca{#1} %
\colo_helpers_inherited_current_ta{#1} }
+\def\MPcoloronly#1%
+ {\clf_mpcolor
+ \attribute\colormodelattribute
+ \colo_helpers_inherited_current_ca{#1} %
+ \zerocount}
+
+\def\MPtransparency#1%
+ {\clf_mpcolor
+ \zerocount
+ \zerocount
+ \colo_helpers_inherited_current_ta{#1} }
\def\MPoptions#1%
{\clf_mpoptions
@@ -1078,10 +1177,13 @@
\colo_helpers_inherited_current_ta{#1} }
-\def\thecolorattribute #1{\number\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
-\def\thetransparencyattribute#1{\number\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
\def\thecolormodelattribute {\the\attribute\colormodelattribute}
+%def\thecolorattribute #1{\number\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
+%def\thetransparencyattribute#1{\number\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
+
+\def\thecolorattribute #1{\number\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi\fi}
+\def\thetransparencyattribute#1{\number\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\else\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi\fi}
\def\internalspotcolorname #1{\clf_spotcolorname \thecolorattribute{#1} }
\def\internalspotcolorparent #1{\clf_spotcolorparent\thecolorattribute{#1} }
\def\internalspotcolorsize #1{\clf_spotcolorvalue \thecolorattribute{#1} }
diff --git a/Master/texmf-dist/tex/context/base/colo-run.lua b/Master/texmf-dist/tex/context/base/mkiv/colo-run.lua
index 27f7c6b12ea..6368b330716 100644
--- a/Master/texmf-dist/tex/context/base/colo-run.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-run.lua
@@ -11,27 +11,31 @@ if not modules then modules = { } end modules ['colo-run'] = {
local colors, commands, context, utilities = colors, commands, context, utilities
-local colors= attributes.colors
+local colors = attributes.colors
+
+local private = table.tohash { "d_u_m_m_y", "maintextcolor", "themaintextcolor" }
function commands.showcolorset(name)
local set = colors.setlist(name)
context.starttabulate { "|l|l|l|l|l|l|l|" }
for i=1,#set do
local s = set[i]
- local r = { width = "4em", height = "max", depth = "max", color = s }
- context.NC()
- context.setcolormodel { "gray" }
- context.blackrule(r)
- context.NC()
- context.blackrule(r)
- context.NC()
- context.grayvalue(s)
- context.NC()
- context.colorvalue(s)
- context.NC()
- context(s)
- context.NC()
- context.NR()
+ if not private[s] then
+ local r = { width = "4em", height = "max", depth = "max", color = s }
+ context.NC()
+ context.setcolormodel { "gray" }
+ context.blackrule(r)
+ context.NC()
+ context.blackrule(r)
+ context.NC()
+ context.grayvalue(s)
+ context.NC()
+ context.colorvalue(s)
+ context.NC()
+ context(s)
+ context.NC()
+ context.NR()
+ end
end
context.stoptabulate()
end
@@ -52,16 +56,18 @@ function commands.showcolorcomponents(list)
context.TB()
for i=1,#set do
local s = set[i]
- context.NC()
- context.showcolorbar { s }
- context.NC()
- context(s)
- context.NC()
- context.transparencycomponents(s)
- context.NC()
- context.colorcomponents(s)
- context.NC()
- context.NR()
+ if not private[s] then
+ context.NC()
+ context.showcolorbar { s }
+ context.NC()
+ context(s)
+ context.NC()
+ context.transparencycomponents(s)
+ context.NC()
+ context.colorcomponents(s)
+ context.NC()
+ context.NR()
+ end
end
context.stoptabulate()
end
diff --git a/Master/texmf-dist/tex/context/base/colo-run.mkiv b/Master/texmf-dist/tex/context/base/mkiv/colo-run.mkiv
index 16f54c3b5fb..37a9de19017 100644
--- a/Master/texmf-dist/tex/context/base/colo-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/colo-run.mkiv
@@ -45,29 +45,33 @@
{\dodoubleargument\colo_show_palet}
\gdef\colo_show_palet[#1][#2]%
- {\ifcsname\??colorpalet#1\endcsname
- \doifelseinset\v!vertical{#2} \colo_palets_show_vertical \colo_palets_show_horizontal [#1][#2]%
- \fi}
-
-\gdef\colo_palets_show_vertical[#1][#2]%
- {\vbox
- {\forgetall
- \setlocalhsize
- \hsize\localhsize
- \offinterlineskip
- \setuppalet[#1]
- \tabskip\zeropoint
- \def\colo_palets_show_palet##1%
- {\doifelseinset\v!number{#2}{##1\hskip.5em}{}&
- \color[##1]{\vrule\s!width3em\s!height\strutht\s!depth\strutdp}%
- \graycolor[##1]{\vrule\s!width3em\s!height\strutht\s!depth\strutdp}&
- \doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr}
- \halign
- {\hss##&\hss##\hss&##\cr
- &\doifinset\v!name{#2}{\strut#1}&\cr%
- \colo_palets_process[#1]\colo_palets_show_palet\crcr}}}
-
-\gdef\colo_palets_show_horizontal[#1][#2]% todo: bTABLE etc
+ {\doifelsecolorpalet{#1}
+ {\doifelseinset\v!vertical{#2} \colo_palets_show_vertical \colo_palets_show_horizontal {#1}{#2}}%
+ {}}
+
+\gdef\colo_palets_show_vertical#1#2%
+ {\begingroup
+ \forgetall
+ \setlocalhsize
+ \hsize\localhsize
+ \offinterlineskip
+ \setuppalet[#1]
+ \tabskip\zeropoint
+ \def\colo_palets_show_palet##1%
+ {\doifelseinset\v!number{#2}{##1\hskip.5\emwidth}{}%
+ \aligntab
+ \color [##1]{\vrule\s!width3\emwidth\s!height\strutht\s!depth\strutdp}%
+ \graycolor[##1]{\vrule\s!width3\emwidth\s!height\strutht\s!depth\strutdp}%
+ \aligntab
+ \doifinset\v!value{#2}{\hskip.5\emwidth\colorvalue{##1}}%
+ \crcr}
+ \halign
+ {\hss\alignmark\alignmark\aligntab\hss\alignmark\alignmark\hss\aligntab\alignmark\alignmark\cr
+ \aligntab\doifinset\v!name{#2}{\strut#1}\aligntab\cr
+ \colo_palets_process[#1]\colo_palets_show_palet\crcr}%
+ \endgroup}
+
+\gdef\colo_palets_show_horizontal#1#2% todo: bTABLE etc
{\vbox
{\forgetall
\setlocalhsize
@@ -75,34 +79,36 @@
\offinterlineskip
\setuppalet[#1]
\tabskip\zeropoint
- \!!widtha\zeropoint
+ \scratchwidth\zeropoint
\doifinset\v!number{#2}
{\def\colo_palets_show_palet##1%
- {\setbox0\hbox{##1}%
- \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}%
+ {\setbox\scratchbox\hbox{##1}%
+ \ifdim\scratchwidth<\wd\scratchbox
+ \scratchwidth\wd\scratchbox
+ \fi}%
\colo_palets_process[#1]\colo_palets_show_palet}%
- \advance\!!widtha 1em
- \ifdim\!!widtha<5em
- \!!widtha5em
+ \advance\scratchwidth\emwidth
+ \ifdim\scratchwidth<5\emwidth
+ \scratchwidth5\emwidth
\fi
\halign
- {##&&\hbox to \!!widtha{\hss##\hss}\cr
+ {\alignmark\alignmark\aligntab\aligntab\hbox to \scratchwidth{\hss\alignmark\alignmark\hss}\cr
\doifinset\v!number{#2}
- {\def\colo_palets_show_palet##1{&\strut##1}%
+ {\def\colo_palets_show_palet##1{\aligntab\strut##1}%
\colo_palets_process[#1]\colo_palets_show_palet}\cr
- \doifinset\v!name{#2}{#1\hskip.5em}%
+ \doifinset\v!name{#2}{#1\hskip.5\emwidth}%
\def\colo_palets_show_palet##1%
- {&\strut\color[##1]{\vrule\s!width\!!widtha\s!height\strutht\s!depth\zeropoint}}%
+ {\aligntab\strut\color[##1]{\vrule\s!width\scratchwidth\s!height\strutht\s!depth\zeropoint}}%
\colo_palets_process[#1]\colo_palets_show_palet\crcr
\noalign{\vskip-\strutdepth}%
\def\colo_palets_show_palet##1%
- {&\graycolor[##1]{\vrule\s!width\!!widtha\s!height\zeropoint\s!depth\strutdp}}%
+ {\aligntab\graycolor[##1]{\vrule\s!width\scratchwidth\s!height\zeropoint\s!depth\strutdp}}%
\colo_palets_process[#1]\colo_palets_show_palet\crcr
\doifinset\v!value{#2}
{\def\colo_palets_show_palet##1%
- {&\vbox
- {\hsize\!!widtha
- \vskip.25ex
+ {\aligntab\vbox
+ {\hsize\scratchwidth
+ \vskip.25\exheight
\everypar{\strut}
\veryraggedcenter
\let\colorformatseparator\endgraf
@@ -111,29 +117,31 @@
\crcr}}}
\gdef\colo_palets_process[#1]%
- {\expanded{\globalprocesscommalist[\getvalue{\??colorpalet#1}]}}
+ {\getpaletlist[#1]%
+ \normalexpanded{\globalprocesscommalist[\paletlist]}}
\unexpanded\gdef\comparepalet
{\dosingleargument\colo_palets_compare}
\gdef\colo_palets_compare[#1]%
- {\ifcsname\??colorpalet#1\endcsname
- \hbox
- {\colo_palets_compare_indeed\color[#1]%
- \quad
- \colo_palets_compare_indeed\graycolor[#1]}%
- \fi}
-
-\gdef\colo_palets_compare_indeed#1[#2]%
+ {\doifelsecolorpalet{#1}%
+ {\hbox
+ {\colo_palets_compare_indeed\color{#1}%
+ \quad
+ \colo_palets_compare_indeed\graycolor{#1}}}%
+ {}}
+
+\gdef\colo_palets_compare_indeed#1#2%
{\vbox
{\forgetall
\setlocalhsize
\hsize\localhsize
\offinterlineskip
\setuppalet[#2]
- \getcommacommandsize[\getvalue{\??colorpalet#2}]
- \!!widtha2em\relax
- \hsize\commalistsize\!!widtha
+ \getpaletsize[#2]%
+ \getpaletlist[#2]%
+ \scratchwidth2\emwidth\relax
+ \hsize\paletsize\scratchwidth
\def\colo_palets_compare##1%
{\hbox
{\setbox0\hbox
@@ -142,11 +150,11 @@
\box0
\hbox to \hsize
{\def\colo_palets_compare####1%
- {\hbox to \!!widtha
- {\hss#1[####1]{\vrule\s!width.5\!!widtha\s!height2.25ex\s!depth-.75ex}\hss}}%
- \processcommacommand[\getvalue{\??colorpalet#2}]\colo_palets_compare}}
+ {\hbox to \scratchwidth
+ {\hss#1[####1]{\vrule\s!width.5\scratchwidth\s!height2.25\exheight\s!depth-.75\exheight}\hss}}%
+ \processcommacommand[\paletlist]\colo_palets_compare}}
\endgraf}
- \processcommacommand[\getvalue{\??colorpalet#2}]\colo_palets_compare}}
+ \processcommacommand[\paletlist]\colo_palets_compare}}
%D Groups
@@ -155,7 +163,10 @@
\gdef\colo_groups_show[#1][#2]%
{\doifcolor{#1:1}
- {\doifelseinset\v!vertical{#2} \colo_groups_show_vertical \colo_groups_show_horizontal [#1][#2]}}
+ {\doifelseinset\v!vertical{#2}
+ \colo_groups_show_vertical
+ \colo_groups_show_horizontal
+ [#1][#2]}}
\gdef\colo_groups_show_horizontal[#1][#2]%
{\vbox
@@ -169,18 +180,18 @@
\def\colo_groups_show_group##1%
{\doifcolor{#1:##1}{\vbox
{\halign
- {\hss####\hss\cr
+ {\hss\alignmark\alignmark\alignmark\alignmark\hss\cr
\doifinset\v!number{#2}{\strut##1}\cr
- \color[#1:##1]{\vrule\s!width4em\s!height\strutht\s!depth\zeropoint}\cr
- \graycolor[#1:##1]{\vrule\s!width4em\s!height\zeropoint\s!depth\strutdp}\cr
+ \color [#1:##1]{\vrule\s!width4\emwidth\s!height\strutht \s!depth\zeropoint}\cr
+ \graycolor[#1:##1]{\vrule\s!width4\emwidth\s!height\zeropoint\s!depth\strutdp }\cr
\doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}}}%
\hbox
{\doifinset\v!name{#2}
{\strut
\doifelseinset\v!value{#2}
- {\raise3\lineheight\hbox{#1\hskip.5em}}
+ {\raise3\lineheight\hbox{#1\hskip.5\emwidth}}
{#1}%
- \hskip.5em}%
+ \hskip.5\emwidth}%
\colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4%
\colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}}
@@ -194,13 +205,17 @@
\tabskip\zeropoint
\def\colo_groups_show_group##1%
{\doifcolor{#1:##1}
- {\doifinset\v!number{#2}{##1\hskip.5em}&
- \color[#1:##1]{\vrule\s!width2.5em\s!height\strutht\s!depth\strutdp}%
- \graycolor[#1:##1]{\vrule\s!width2.5em\s!height\strutht\s!depth\strutdp}&
- \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}%
+ {\doifinset\v!number{#2}
+ {##1\hskip.5\emwidth}%
+ \aligntab
+ \color [#1:##1]{\vrule\s!width2.5\emwidth\s!height\strutht\s!depth\strutdp}%
+ \graycolor[#1:##1]{\vrule\s!width2.5\emwidth\s!height\strutht\s!depth\strutdp}
+ \aligntab
+ \doifinset\v!value{#2}{\hskip.5\emwidth\colorvalue{#1:##1}}%
+ \crcr}}%
\halign
- {\hss##&\hss##\hss&##\hss\cr
- &\doifinset\v!name{#2}{\strut#1}&\crcr
+ {\hss\alignmark\alignmark\aligntab\hss\alignmark\alignmark\hss\aligntab\alignmark\alignmark\hss\cr
+ \aligntab\doifinset\v!name{#2}{\strut#1}\aligntab\crcr
\colo_groups_show_group1\colo_groups_show_group2\colo_groups_show_group3\colo_groups_show_group4%
\colo_groups_show_group5\colo_groups_show_group6\colo_groups_show_group7\colo_groups_show_group8}}}
@@ -210,8 +225,7 @@
\gdef\colo_groups_compare[#1]%
{\doifcolor{#1:1}
{\hbox
- {\colo_groups_compare_indeed\color[#1]%
- \quad
+ {\colo_groups_compare_indeed\color [#1]\quad
\colo_groups_compare_indeed\graycolor[#1]}}}
\gdef\colo_groups_compare_indeed#1[#2]%
@@ -219,20 +233,23 @@
{\forgetall
\setlocalhsize
\hsize\localhsize
- \!!counta\zerocount
- \dorecurse{15}{\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}}
- \!!widtha2em\relax
- \hsize\!!counta\!!widtha
- \dorecurse\!!counta{\colo_groups_compare_step{#1}{#2}\recurselevel}}}
+ \scratchcounter\zerocount
+ \dorecurse{15}{\doifcolor{#2:\recurselevel}{\advance\scratchcounter\plusone}}
+ \scratchwidth2\emwidth\relax
+ \hsize\scratchcounter\scratchwidth
+ \dorecurse\scratchcounter{\colo_groups_compare_step{#1}{#2}\recurselevel}}}
\def\colo_groups_compare_step#1#2#3%
{\hbox to \hsize
- {\setbox0\hbox
- {#1[#2:#3]{\vrule\s!width\hsize\s!height3ex}}%
- \wd0\zeropoint
- \box0
+ {\setbox\scratchbox\hbox
+ {#1[#2:#3]{\vrule\s!width\hsize\s!height3\exheight}}%
+ \wd\scratchbox\zeropoint
+ \box\scratchbox
\hbox to \hsize
- {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\vrule\s!width.5\!!widtha\s!height2.25ex\s!depth-.75ex}\hss}}}
+ {\hss
+ \dorecurse\scratchcounter
+ {#1[#2:\recurselevel]{\vrule\s!width.5\scratchwidth\s!height2.25\exheight\s!depth-.75\exheight}%
+ \hss}}}
\endgraf}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-cs.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-cs.mkiv
index 75e30fe6985..75e30fe6985 100644
--- a/Master/texmf-dist/tex/context/base/cont-cs.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-cs.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-de.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-de.mkiv
index 998f76466da..998f76466da 100644
--- a/Master/texmf-dist/tex/context/base/cont-de.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-de.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-en.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-en.mkiv
index f25ab69cbd1..f25ab69cbd1 100644
--- a/Master/texmf-dist/tex/context/base/cont-en.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-en.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-fil.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-fil.mkiv
index a1159b7f54f..19c1c93ac06 100644
--- a/Master/texmf-dist/tex/context/base/cont-fil.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-fil.mkiv
@@ -118,4 +118,9 @@
\definefilesynonym [fnt-23] [fonts-shapes]
\definefilesynonym [syn-01] [syntax]
+\definefilesynonym [set-11] [setups-basics]
+\definefilesynonym [set-12] [setups-overview]
+%definefilesynonym [set-13] [setups-proofing]
+%definefilesynonym [set-15] [setups-generate]
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-fr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-fr.mkiv
index f45ec88c3f7..f45ec88c3f7 100644
--- a/Master/texmf-dist/tex/context/base/cont-fr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-fr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-gb.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-gb.mkiv
index f6dd4ba9ebc..f6dd4ba9ebc 100644
--- a/Master/texmf-dist/tex/context/base/cont-gb.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-gb.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-it.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-it.mkiv
index 483eb858955..483eb858955 100644
--- a/Master/texmf-dist/tex/context/base/cont-it.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-it.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-log.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-log.mkiv
index 598140d3268..b8eb0679f3b 100644
--- a/Master/texmf-dist/tex/context/base/cont-log.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-log.mkiv
@@ -30,7 +30,17 @@
X%
\endgroup}
-\unexpanded\def\ConTeXt{Con\TeX t}
+\unexpanded\def\ConTeXt
+ {\dontleavehmode
+ \begingroup
+ Con%
+ \setbox\scratchboxone\hbox{T\kern\zeropoint e}%
+ \setbox\scratchboxtwo\hbox{Te}%
+ \discretionary{-}{}{\kern\dimexpr\wd\scratchboxtwo-\wd\scratchboxone\relax}%
+ \TeX
+ t%
+ \endgroup}
+
\unexpanded\def\PPCHTeX{ppch\TeX}
\unexpanded\def\PRAGMA {Pragma ADE}
@@ -59,7 +69,9 @@
\kern-.11\emwidth\TeX}
\def\syst_logos_ams_script#1%
- {$\cal\ifdim\bodyfontsize>1.1\emwidth\scriptstyle\fi#1$}
+ {\normalstartimath
+ \cal\ifdim\bodyfontsize>1.1\emwidth\scriptstyle\fi#1%
+ \normalstopimath}
\unexpanded\def\AmSTeX
{\dontleavehmode
@@ -93,9 +105,24 @@
\unexpanded\def\Context % wrong usage of \getscaledglyph
{\dontleavehmode
\begingroup
- C\kern -.0667\emwidth\getscaledglyph{.8}\empty{O\kern -.0667\emwidth N\kern
- -.0549\emwidth T\doifelseitalic{\kern-.1\emwidth}{\kern-.1667\emwidth}\lower.5\exheight\hbox
- {E}\doifelseitalic\empty{\kern-.11em}X\kern-.055\emwidth T}%
+ C%
+ \kern -.0667\emwidth
+ \getscaledglyph{.8}\empty{%
+ O\kern-.0667\emwidth
+ N%
+ \discretionary{-}{}{\kern-.0549\emwidth}%
+ T%
+ \doifelseitalic
+ {\kern-.1\emwidth}%
+ {\kern-.1667\emwidth}%
+ \lower.5\exheight\hbox{E}%
+ \doifelseitalic
+ \empty
+ {\kern-.11em}%
+ X%
+ \kern-.055\emwidth
+ T%
+ }%
\endgroup}
%D The \METAFONT\ and \METAPOST\ logos adapt themselves to the current fontsize, an
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv
index 3f2e4199c10..caa9c31df7d 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv
@@ -11,11 +11,14 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2015.05.18 12:26}
+\newcontextversion{2016.04.21 19:35}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
+% \usemodule[newotf]
+% \usemodule[oldotf]
+
\unprotect
% \writestatus\m!system{beware: some patches loaded from cont-new.mkiv}
diff --git a/Master/texmf-dist/tex/context/base/cont-nl.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-nl.mkiv
index 890ad8ca594..890ad8ca594 100644
--- a/Master/texmf-dist/tex/context/base/cont-nl.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-nl.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-nop.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-nop.mkiv
index c8188503e85..c8188503e85 100644
--- a/Master/texmf-dist/tex/context/base/cont-nop.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-nop.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-pe.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-pe.mkiv
index 4f7efe959d5..4f7efe959d5 100644
--- a/Master/texmf-dist/tex/context/base/cont-pe.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-pe.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-ro.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-ro.mkiv
index ac6f159f539..ac6f159f539 100644
--- a/Master/texmf-dist/tex/context/base/cont-ro.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-ro.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-run.lua b/Master/texmf-dist/tex/context/base/mkiv/cont-run.lua
index 08bbe5c3c25..0420ed01c7b 100644
--- a/Master/texmf-dist/tex/context/base/cont-run.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-run.lua
@@ -192,7 +192,7 @@ local function processjob()
report("processing as xml: %s",filename)
context.starttext()
- context.xmlprocess("main",filename,"")
+ context.xmlprocess("main",filename,"")
context.stoptext()
elseif suffix == "cld" or arguments.forcecld then
@@ -209,7 +209,7 @@ local function processjob()
report("processing as lua: %s",filename)
context.starttext()
- context.ctxlua(string.format('dofile("%s")',filename))
+ context.ctxlua(string.format('dofile("%s")',filename))
context.stoptext()
elseif suffix == "mp" or arguments.forcemp then
diff --git a/Master/texmf-dist/tex/context/base/cont-run.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-run.mkiv
index fcca7b58133..fcca7b58133 100644
--- a/Master/texmf-dist/tex/context/base/cont-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-run.mkiv
diff --git a/Master/texmf-dist/tex/context/base/cont-yes.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-yes.mkiv
index 0b7f3231baf..0b7f3231baf 100644
--- a/Master/texmf-dist/tex/context/base/cont-yes.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/cont-yes.mkiv
diff --git a/Master/texmf-dist/tex/context/base/context-base.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-base.lmx
index 482d43e8866..482d43e8866 100644
--- a/Master/texmf-dist/tex/context/base/context-base.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-base.lmx
diff --git a/Master/texmf-dist/tex/context/base/context-characters.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-characters.lmx
index f018e412ba9..f018e412ba9 100644
--- a/Master/texmf-dist/tex/context/base/context-characters.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-characters.lmx
diff --git a/Master/texmf-dist/tex/context/base/context-debug.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-debug.lmx
index 51b18c83729..51b18c83729 100644
--- a/Master/texmf-dist/tex/context/base/context-debug.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-debug.lmx
diff --git a/Master/texmf-dist/tex/context/base/context-error.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-error.lmx
index b82b552f88f..b82b552f88f 100644
--- a/Master/texmf-dist/tex/context/base/context-error.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-error.lmx
diff --git a/Master/texmf-dist/tex/context/base/context-fonttest.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-fonttest.lmx
index fddb8196b38..fddb8196b38 100644
--- a/Master/texmf-dist/tex/context/base/context-fonttest.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-fonttest.lmx
diff --git a/Master/texmf-dist/tex/context/base/context-help.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-help.lmx
index cf4f73a6120..7c8f5006d17 100644
--- a/Master/texmf-dist/tex/context/base/context-help.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-help.lmx
@@ -60,28 +60,70 @@
padding: 1em ;
}
</style>
+ <style type="text/css">
+ #main-left {
+ background-color: #C0C0C0 ;
+ color: black;
+ }
+ a.setupmenuurl {
+ color: #FFFFFF ;
+ text-decoration: none ;
+ font-weight: bold ;
+ }
+ a.setupmenucmd {
+ color: #FFFFFF ;
+ text-decoration: underline ;
+ font-weight: bold ;
+ }
+ a.setuplisturl {
+ color: #000000 ;
+ text-decoration: none ;
+ font-weight: bold ;
+ }
+ .setupmenugroup {
+ text-decoration: none ;
+ }
+ .setupinstances {
+ margin-top: 3ex ;
+ }
+ .setupmenucategory {
+ font-weight: bold ;
+ font-size: 2.5ex ;
+ margin-bottom: 1ex ;
+ }
+ <?lua
+ if utilities and utilities.scite and utilities.scite.css then
+p(utilities.scite.css())
+ end
+ ?>
+ </style>
</head>
<body>
<div id="top"><div id="top-one"><div id="top-two">
- <?lua pv('title') ?>
+<?lua pv('title') ?>
</div></div></div>
<div id="left"><div id="left-one"><div id="left-two">
- <!-- empty -->
+<!-- empty -->
</div></div></div>
<div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five">
- <?lua pv('interfaces') ?>
+<?lua pv('interfaces') ?>
</div></div></div></div></div></div></div>
<div id="main"><div id='main-settings'>
<div id="main-left"><div id="main-common-settings">
- <h1><?lua pv('maintitle') ?></h1>
- <?lua pv('maintext') ?>
+<h1><?lua pv('maintitle') ?></h1>
+<?lua pv('maintext') ?>
</div></div>
<div id="main-right"><div id="main-common-settings">
- <?lua pv('names') ?>
+<?lua pv('names') ?>
+<script type='text/javascript'>
+ <!--
+ document.getElementById("#current").scrollIntoView();
+ -->
+</script>
</div></div>
</div></div>
<div id="bottom"><div id="bottom-one"><div id="bottom-two">
- <?lua pv('extra') ?>
+<?lua pv('extra') ?>
</div></div></div>
</body>
</html>
diff --git a/Master/texmf-dist/tex/context/base/mkiv/context-performance.tex b/Master/texmf-dist/tex/context/base/mkiv/context-performance.tex
new file mode 100644
index 00000000000..dd376866496
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-performance.tex
@@ -0,0 +1,66 @@
+% language=uk
+
+\usemodule[art-01,abr-01]
+
+\starttext
+
+\subject {About performance}
+
+If you use \PDFTEX, \XETEX\ and \LUATEX\ you will notice a difference in speed.
+Don't draw conclusions too easily from simple tests like:
+
+\starttyping
+\dorecurse{1000}{test\page}
+\stoptyping
+
+or (also tests the file system):
+
+\starttyping
+\dorecurse{1000}{\input tufte\blank}
+\stoptyping
+
+The wide engines \XETEX\ and \LUATEX\ have more work to do than \PDFTEX, because
+the input is \UTF\ and \UNICODE\ fonts are used. Of course running \PDFTEX\ on
+extensive \UTF\ input will compensate it a bit.
+
+Comparing \XETEX\ and \PDFTEX\ (using \MKII) and \LUATEX\ (using \MKIV) is kind
+of useless anyway because the \LUATEX\ with \MKIV\ combination is not only doing
+more advanced things, which costs time, but at the other hand has more efficient
+alternatives, like for instance using \MPLIB, which gains a lot.
+
+So, it's best to compare speeds with a mixed content document: multiple fonts,
+text and math, images, \METAPOST\ graphics, structural components, tables, etc.
+
+On the average \PDFTEX\ is the fastest, but offering less functionality, while
+\LUATEX\ with \MKIV\ is often faster than \XETEX\ with \MKII. On complex products
+like the \METAFUN\ manual or when processing complex \XML\ files a \LUATEX\ is
+much faster than a \PDFTEX\ run.
+
+There is some startup time involved which is normally not that much, and initial
+font loading is also not really a burden, but of course for a few page document
+it brings down the number of pages processed per second. Normalizing the input
+takes a bit but applying \OPENTYPE\ font features takes much more. If you find
+unacceptable bottlenecks just let me know (but better first check performance in
+the other engines). Of course inefficient coding of styles (massive font switches
+where a simple one could do) are no reason for a complaint. Keep in mind:
+flexibility comes at a price.
+
+A lot of time went into making sure that \CONTEXT\ runs efficiently on \LUATEX\
+and we keep improving the performance. This is not so much an engine issue but
+more one of the macro package. Of course what is true for \CONTEXT\ \MKIV\ can be
+different for other macro packages but comparing with them makes no sense because
+the differences in functionality.
+
+There are many features in \CONTEXT\ \MKIV\ that demand analysis of the text
+stream and when a spot is found where that feature has to be applied some actions
+takes place. Most such features don't have an impact on overall performance (due
+to the analysis) unless they are used. Of course font processing has the largest
+impact, but they are also the most flexible and extensible feature, especially
+when you use dynamic features. And font processing is always enabled. Speed has
+been improved over time and we're currently at a point that further speedup makes
+not much sense and would only make the code more complex. This is not to say that
+we cannot improve performance in the future.
+
+Hans Hagen \crlf Hasselt NL
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/context-timing.lmx b/Master/texmf-dist/tex/context/base/mkiv/context-timing.lmx
index 57b5879bad8..57b5879bad8 100644
--- a/Master/texmf-dist/tex/context/base/context-timing.lmx
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-timing.lmx
diff --git a/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex b/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex
new file mode 100644
index 00000000000..b9591e8e06e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex
@@ -0,0 +1,57 @@
+% language=uk
+
+\usemodule[art-01,abr-01]
+
+\starttext
+
+\subject {On the agenda}
+
+\subsubject{\LUATEX}
+
+\startitemize
+ \startitem
+ head||tail cleanup in disc nodes (get rid of temp i.e.\ delay till linebreak)
+ \stopitem
+ \startitem
+ optimize some callback resolution (more direct)
+ \stopitem
+ \startitem
+ add \type {--output-filename} for \PDF\ filename
+ \stopitem
+\stopitemize
+
+\subsubject{\CONTEXT}
+
+\startitemize
+ \startitem
+ play with par callback and properties
+ \stopitem
+ \startitem
+ play with box attributes
+ \stopitem
+ \startitem
+ redo some of the spacing (adapt to improvements in engine)
+ \stopitem
+ \startitem
+ use \type {\matheqnogapstep}, \type {\Ustack}, \type {\mathscriptsmode}
+ and other new math primitives
+ \stopitem
+\stopitemize
+
+\vfill {\em Feel free to suggest additions.}
+
+\stoptext
+
+% new:
+
+<cd:command name="showgrid" file="page-grd.mkiv">
+ ...
+ <cd:constant type="columns" default="yes"/>
+ ...
+</cd:command>
+
+<cd:command name="itemtag" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+</cd:command>
diff --git a/Master/texmf-dist/tex/context/base/context.css b/Master/texmf-dist/tex/context/base/mkiv/context.css
index be1dad79610..be1dad79610 100644
--- a/Master/texmf-dist/tex/context/base/context.css
+++ b/Master/texmf-dist/tex/context/base/mkiv/context.css
diff --git a/Master/texmf-dist/tex/context/base/context.lus b/Master/texmf-dist/tex/context/base/mkiv/context.lus
index 960e96adf7c..960e96adf7c 100644
--- a/Master/texmf-dist/tex/context/base/context.lus
+++ b/Master/texmf-dist/tex/context/base/mkiv/context.lus
diff --git a/Master/texmf-dist/tex/context/base/context.mkiv b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv
index 9b542115e9f..9f4ef2327a1 100644
--- a/Master/texmf-dist/tex/context/base/context.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv
@@ -39,8 +39,8 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2015.05.18 12:26}
-\edef\contextkind {current}
+\edef\contextversion{2016.04.21 19:35}
+\edef\contextkind {beta}
%D For those who want to use this:
@@ -189,7 +189,13 @@
%loadmarkfile{spac-cha} % obsolete
%loadmarkfile{supp-num} % obsolete
+\loadmarkfile{core-uti}
+\loadmkvifile{file-job}
+
+\loadmarkfile{anch-pos}
+
\loadmarkfile{typo-ini}
+\loadmarkfile{typo-lin}
\loadmarkfile{typo-bld} % par builders
\loadmarkfile{typo-inj}
@@ -206,12 +212,12 @@
\loadmarkfile{hand-ini}
\loadmarkfile{lang-ini}
-\loadmarkfile{lang-hyp}
+\loadmarkfile{lang-hyp} % also loads dis
\loadmarkfile{lang-lab}
\loadmarkfile{unic-ini}
-\loadmarkfile{core-uti}
+% \loadmarkfile{core-uti}
\loadmarkfile{core-two}
\loadmarkfile{core-dat}
@@ -227,7 +233,7 @@
\loadmarkfile{lang-url}
\loadmarkfile{lang-def}
-\loadmkvifile{file-job} % why so late?
+% \loadmkvifile{file-job} % why so late?
\loadmarkfile{symb-ini} % brrr depends on fonts
@@ -244,7 +250,7 @@
\loadmkvifile{typo-prc}
-\loadmarkfile{anch-pos}
+% \loadmarkfile{anch-pos}
\loadmkvifile{strc-ini}
\loadmarkfile{strc-tag}
@@ -262,8 +268,8 @@
%loadmarkfile{strc-reg}
\loadmkvifile{strc-lev} % experiment
-\loadmarkfile{spac-ali}
\loadmarkfile{spac-hor}
+\loadmarkfile{spac-ali}
\loadmarkfile{spac-flr}
\loadmarkfile{spac-ver}
\loadmarkfile{spac-lin}
@@ -271,11 +277,7 @@
\loadmarkfile{spac-par}
%loadmarkfile{spac-adj} % no longer needed
\loadmarkfile{spac-def}
-
-\doiffileelse{spac-prf.mkvi}
- {\loadmkvifile{spac-prf}}
- {\loadmkivfile{spac-prf}}
-
+\loadmkvifile{spac-prf}
\loadmarkfile{spac-grd}
%loadmarkfile{anch-pos}
@@ -368,7 +370,7 @@
\loadmarkfile{char-enc} % will move up
-\loadmkvifile{font-lib} % way too late
+\loadmkvifile{font-lib} % way too late but after language
\loadmkvifile{font-fil}
\loadmkvifile{font-var}
\loadmkvifile{font-fea}
@@ -506,6 +508,7 @@
\loadmarkfile{grph-inc}
\loadmarkfile{grph-fig}
\loadmarkfile{grph-raw}
+\loadmarkfile{grph-rul}
\loadmarkfile{pack-box}
\loadmarkfile{pack-bar}
@@ -547,14 +550,14 @@
% now we hook in backend code (needs checking)
+\loadmarkfile{back-exp}
+
\loadmarkfile{back-pdf} % actually, this one should load the next three using document.arguments.backend
\loadmarkfile{mlib-pdf}
\loadmarkfile{mlib-pps}
\loadmarkfile{meta-pdf}
\loadmarkfile{grph-epd}
-\loadmarkfile{back-exp}
-
\loadmarkfile{cont-run} % the main runner (used in cont-yes.mkiv)
\setupcurrentlanguage[\defaultlanguagetag]
diff --git a/Master/texmf-dist/tex/context/base/core-con.lua b/Master/texmf-dist/tex/context/base/mkiv/core-con.lua
index 37942ae7169..bfe5357a6ec 100644
--- a/Master/texmf-dist/tex/context/base/core-con.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-con.lua
@@ -17,7 +17,7 @@ slower but look nicer this way.</p>
--ldx]]--
local floor, date, time, concat = math.floor, os.date, os.time, table.concat
-local lower, rep, match = string.lower, string.rep, string.match
+local lower, upper, rep, match, gsub = string.lower, string.upper, string.rep, string.match, string.gsub
local utfchar, utfbyte = utf.char, utf.byte
local tonumber, tostring = tonumber, tostring
local P, C, Cs, lpegmatch = lpeg.P, lpeg.C, lpeg.Cs, lpeg.match
@@ -28,8 +28,10 @@ local implement = interfaces.implement
local settings_to_array = utilities.parsers.settings_to_array
local allocate = utilities.storage.allocate
+local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
local variables = interfaces.variables
+local constants = interfaces.constants
converters = converters or { }
local converters = converters
@@ -122,7 +124,7 @@ local counters = allocate {
0x3142, 0x3145, 0x3147, 0x3148, 0x314A,
0x314B, 0x314C, 0x314D, 0x314E
},
- ['korean-parent'] = { -- parenthesed
+ ['korean-parenthesis'] = { --
0x3200, 0x3201, 0x3202, 0x3203, 0x3204,
0x3205, 0x3206, 0x3207, 0x3208, 0x3209,
0x320A, 0x320B, 0x320C, 0x320D
@@ -136,30 +138,43 @@ local counters = allocate {
languages.counters = counters
-counters['ar'] = counters['arabic']
-counters['gr'] = counters['greek']
-counters['g'] = counters['greek']
-counters['sl'] = counters['slovenian']
-counters['es'] = counters['spanish']
-counters['kr'] = counters['korean']
-counters['kr-p'] = counters['korean-parent']
-counters['kr-c'] = counters['korean-circle']
-
-counters['thainumerals'] = counters['thai']
-counters['devanagarinumerals'] = counters['devanagari']
-counters['gurmurkhinumerals'] = counters['gurmurkhi']
-counters['gujaratinumerals'] = counters['gujarati']
-counters['tibetannumerals'] = counters['tibetan']
-counters['greeknumerals'] = counters['greek']
-counters['arabicnumerals'] = counters['arabic']
-counters['persiannumerals'] = counters['persian']
-counters['arabicexnumerals'] = counters['persian']
-counters['koreannumerals'] = counters['korean']
-counters['koreanparentnumerals'] = counters['korean-parent']
-counters['koreancirclenumerals'] = counters['korean-circle']
-
-counters['sloveniannumerals'] = counters['slovenian']
-counters['spanishnumerals'] = counters['spanish']
+counters['ar'] = counters['arabic']
+counters['gr'] = counters['greek']
+counters['g'] = counters['greek']
+counters['sl'] = counters['slovenian']
+counters['es'] = counters['spanish']
+counters['kr'] = counters['korean']
+counters['kr-p'] = counters['korean-parenthesis']
+counters['kr-c'] = counters['korean-circle']
+
+counters['thainumerals'] = counters['thai']
+counters['devanagarinumerals'] = counters['devanagari']
+counters['gurmurkhinumerals'] = counters['gurmurkhi']
+counters['gujaratinumerals'] = counters['gujarati']
+counters['tibetannumerals'] = counters['tibetan']
+counters['greeknumerals'] = counters['greek']
+counters['arabicnumerals'] = counters['arabic']
+counters['persiannumerals'] = counters['persian']
+counters['arabicexnumerals'] = counters['persian']
+counters['koreannumerals'] = counters['korean']
+counters['koreanparenthesisnumerals'] = counters['korean-parenthesis']
+counters['koreancirclenumerals'] = counters['korean-circle']
+
+counters['sloveniannumerals'] = counters['slovenian']
+counters['spanishnumerals'] = counters['spanish']
+
+local decimals = allocate {
+ ['arabic'] = {
+ ["0"] = "٠", ["1"] = "١", ["2"] = "٢", ["3"] = "٣", ["4"] = "٤",
+ ["5"] = "٥", ["6"] = "٦", ["7"] = "٧", ["8"] = "٨", ["9"] = "٩",
+ },
+ ['persian'] = {
+ ["0"] = "۰", ["1"] = "۱", ["2"] = "۲", ["3"] = "۳", ["4"] = "۴",
+ ["5"] = "۵", ["6"] = "۶", ["7"] = "۷", ["8"] = "۸", ["9"] = "۹",
+ }
+}
+
+languages.decimals = decimals
local fallback = utfbyte('0')
@@ -233,6 +248,16 @@ end
converters.alphabetic = alphabetic
converters.Alphabetic = Alphabetic
+-- we could make a replacer
+
+local function todecimals(n,name)
+ local stream = tostring(n)
+ local mapping = decimals[name]
+ return mapping and gsub(stream,".",mapping) or stream
+end
+
+converters.decimals = todecimals
+
local lower_offset = 96
local upper_offset = 64
@@ -241,11 +266,6 @@ function converters.Character (n) return chr (n,upper_offset) end
function converters.characters(n) return chrs(n,lower_offset) end
function converters.Characters(n) return chrs(n,upper_offset) end
-converters['a'] = converters.characters
-converters['A'] = converters.Characters
-converters['AK'] = converters.Characters
-converters['KA'] = converters.Characters
-
implement { name = "alphabetic", actions = { alphabetic, context }, arguments = { "integer", "string" } }
implement { name = "Alphabetic", actions = { Alphabetic, context }, arguments = { "integer", "string" } }
@@ -254,6 +274,8 @@ implement { name = "Character", actions = { chr, context }, arguments = { "int
implement { name = "characters", actions = { chrs, context }, arguments = { "integer", lower_offset } }
implement { name = "Characters", actions = { chrs, context }, arguments = { "integer", upper_offset } }
+implement { name = "decimals", actions = { todecimals, context }, arguments = { "integer", "string" } }
+
local weekday = os.weekday -- moved to l-os
local isleapyear = os.isleapyear -- moved to l-os
local nofdays = os.nofdays -- moved to l-os
@@ -552,16 +574,30 @@ implement {
-- this is a temporary solution: we need a better solution when we have
-- more languages
+converters['a'] = converters.characters
+converters['A'] = converters.Characters
+converters['AK'] = converters.Characters -- obsolete
+converters['KA'] = converters.Characters -- obsolete
+
function converters.spanishnumerals(n) return alphabetic(n,"es") end
function converters.Spanishnumerals(n) return Alphabetic(n,"es") end
function converters.sloviannumerals(n) return alphabetic(n,"sl") end
function converters.Sloviannumerals(n) return Alphabetic(n,"sl") end
-converters['characters:es'] = converters.spanishnumerals
-converters['characters:sl'] = converters.sloveniannumerals
+converters['alphabetic:es'] = converters.spanishnumerals
+converters['alphabetic:sl'] = converters.sloveniannumerals
+
+converters['Alphabetic:es'] = converters.Spanishnumerals
+converters['Alphabetic:sl'] = converters.Sloveniannumerals
+
+-- bonus
-converters['Characters:es'] = converters.Spanishnumerals
-converters['Characters:sl'] = converters.Sloveniannumerals
+converters['a:es'] = converters.spanishnumerals
+converters['a:sl'] = converters.sloveniannumerals
+converters['A:es'] = converters.Spanishnumerals
+converters['A:sl'] = converters.Sloveniannumerals
+
+-- end of bonus
converters.sequences = converters.sequences or { }
local sequences = converters.sequences
@@ -575,12 +611,23 @@ function converters.define(name,set) -- ,language)
sequences[name] = settings_to_array(set)
end
+function converters.max(name)
+ local s = sequences[name]
+ return s and #s or 0
+end
+
implement {
name = "defineconversion",
actions = converters.define,
arguments = { "string", "string" }
}
+implement {
+ name = "nofconversions",
+ actions = { converters.max, context },
+ arguments = "string",
+}
+
local function convert(method,n,language)
local converter = language and converters[method..":"..language] or converters[method]
if converter then
@@ -1098,9 +1145,12 @@ local v_weekday = variables.weekday
local v_referral = variables.referral
local v_space = variables.space
+local v_MONTH = upper(v_month)
+local v_WEEKDAY = upper(v_weekday)
+
local convert = converters.convert
-local days = { -- not variables.sunday
+local days = { -- not variables
"sunday",
"monday",
"tuesday",
@@ -1110,7 +1160,7 @@ local days = { -- not variables.sunday
"saturday",
}
-local months = { -- not variables.january
+local months = { -- not variables
"january",
"february",
"march",
@@ -1125,21 +1175,28 @@ local months = { -- not variables.january
"december",
}
+local monthmnems = { -- not variables
+ -- virtual table
+}
+
+setmetatableindex(months, function(t,k) return "unknown" end)
+setmetatableindex(days, function(t,k) return "unknown" end)
+setmetatableindex(monthmnems, function(t,k) return months[k] .. ":mnem" end)
+
local function dayname(n)
- return days[n] or "unknown"
+ return days[n]
end
local function weekdayname(day,month,year)
- return days[weekday(day,month,year)] or "unknown"
+ return days[weekday(day,month,year)]
end
local function monthname(n)
- return months[n] or "unknown"
+ return months[n]
end
local function monthmnem(n)
- local m = months[n]
- return m and (m ..":mnem") or "unknown"
+ return monthmnems[n]
end
implement {
@@ -1171,42 +1228,63 @@ implement {
-- day:ord month:mmem
-- j and jj obsolete
+local spaced = {
+ [v_year] = true,
+ [v_month] = true,
+ [v_MONTH] = true,
+ [v_day] = true,
+ [v_weekday] = true,
+ [v_WEEKDAY] = true,
+ [v_day] = true,
+}
+
local function currentdate(str,currentlanguage) -- second argument false : no label
- local list = utilities.parsers.settings_to_array(str)
+ local list = utilities.parsers.settings_to_array(str)
local splitlabel = languages.labels.split or string.itself -- we need to get the loading order right
- local year, month, day = tex.year, tex.month, tex.day
- local auto = true
+ local year = tex.year
+ local month = tex.month
+ local day = tex.day
+ local auto = true
if currentlanguage == "" then
currentlanguage = false
end
for i=1,#list do
local entry = list[i]
local tag, plus = splitlabel(entry)
- local ordinal, mnemonic, whatordinal = false, false, nil
+ local ordinal, mnemonic, whatordinal, highordinal = false, false, nil, false
if not tag then
tag = entry
elseif plus == "+" or plus == "ord" then
ordinal = true
+ elseif plus == "++" or plus == "highord" then
+ ordinal = true
+ highordinal = true
elseif plus == "mnem" then
mnemonic = true
end
- if not auto and (tag == v_year or tag == v_month or tag == v_day or tag == v_weekday) then
+ if not auto and spaced[tag] then
context.space()
end
auto = false
- if tag == v_year or tag == "y" then
+ if tag == v_year or tag == "y" or tag == "Y" then
context(year)
- elseif tag == "yy" then
+ elseif tag == "yy" or tag == "YY" then
context("%02i",year % 100)
- elseif tag == "Y" then
- context(year)
elseif tag == v_month or tag == "m" then
if currentlanguage == false then
- context(months[month] or "unknown")
+ context(months[month])
+ elseif mnemonic then
+ context.labeltext(variables[monthmnems[month]])
+ else
+ context.labeltext(variables[months[month]])
+ end
+ elseif tag == v_MONTH then
+ if currentlanguage == false then
+ context.WORD(variables[months[month]])
elseif mnemonic then
- context.labeltext(monthmnem(month))
+ context.LABELTEXT(variables[monthmnems[month]])
else
- context.labeltext(monthname(month))
+ context.LABELTEXT(variables[months[month]])
end
elseif tag == "mm" then
context("%02i",month)
@@ -1214,7 +1292,7 @@ local function currentdate(str,currentlanguage) -- second argument false : no la
context(month)
elseif tag == v_day or tag == "d" then
if currentlanguage == false then
- context(days[day] or "unknown")
+ context(days[day])
else
context.convertnumber(v_day,day) -- why not direct
end
@@ -1228,9 +1306,16 @@ local function currentdate(str,currentlanguage) -- second argument false : no la
elseif tag == v_weekday or tag == "w" then
local wd = weekday(day,month,year)
if currentlanguage == false then
- context(days[wd] or "unknown")
+ context(days[wd])
+ else
+ context.labeltext(variables[days[wd]])
+ end
+ elseif tag == v_WEEKDAY then
+ local wd = weekday(day,month,year)
+ if currentlanguage == false then
+ context.WORD(days[wd])
else
- context.labeltext(days[wd] or "unknown")
+ context.LABELTEXT(variables[days[wd]])
end
elseif tag == "W" then
context(weekday(day,month,year))
@@ -1247,7 +1332,7 @@ local function currentdate(str,currentlanguage) -- second argument false : no la
if currentlanguage == false then
-- ignore
else
- context(converters.ordinal(whatordinal,currentlanguage)) -- no "%s" needed
+ context[highordinal and "highordinalstr" or "ordinalstr"](converters.ordinal(whatordinal,currentlanguage))
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/core-con.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-con.mkiv
index f7d718f4482..1f6dc54d5e6 100644
--- a/Master/texmf-dist/tex/context/base/core-con.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-con.mkiv
@@ -91,15 +91,18 @@
\def\Greeknumerals #1{\clf_Alphabetic\numexpr#1\relax{greek}}
\def\arabicnumerals #1{\clf_alphabetic\numexpr#1\relax{arabic}}
\def\persiannumerals #1{\clf_alphabetic\numexpr#1\relax{persian}}
+\def\arabicdecimals #1{\clf_decimals \numexpr#1\relax{arabic}}
+\def\persiandecimals #1{\clf_decimals \numexpr#1\relax{persian}}
\let\arabicexnumerals \persiannumerals
\def\koreannumerals #1{\clf_alphabetic\numexpr#1\relax{korean}}
-\def\koreannumeralsp #1{\clf_alphabetic\numexpr#1\relax{korean-parent}}
+\def\koreannumeralsp #1{\clf_alphabetic\numexpr#1\relax{korean-parenthesis}}
\def\koreannumeralsc #1{\clf_alphabetic\numexpr#1\relax{korean-circle}}
-\let\koreanparentnumerals\koreannumeralsp
-\let\koreancirclenumerals\koreannumeralsc
+\let\koreanparentnumerals \koreannumeralsp
+\let\koreanparenthesisnumerals\koreannumeralsp
+\let\koreancirclenumerals \koreannumeralsc
\def\chinesenumerals #1{\clf_chinesenumerals\numexpr#1\relax{normal}}
\def\chinesecapnumerals#1{\clf_chinesenumerals\numexpr#1\relax{cap}}
@@ -239,8 +242,8 @@
%D \showsetup{weekday}
%D \showsetup{WEEKDAY}
-\unexpanded\def\weekday#1{\clf_day\numexpr#1\relax}
-\unexpanded\def\WEEKDAY#1{\WORD{\clf_day\numexpr#1\relax}}
+\unexpanded\def\weekday#1{\clf_dayname\numexpr#1\relax}
+\unexpanded\def\WEEKDAY#1{\WORD{\clf_dayname\numexpr#1\relax}}
%D \macros
%D {getdayoftheweek, dayoftheweek}
@@ -293,7 +296,7 @@
%D
%D The number of days is available in the macro \type {\numberofdays}.
-\def\doifelseleapyear#1%
+\def\doifelseleapyear#1% expandable check
{\clf_doifelseleapyear\numexpr#1\relax}
\let\doifleapyearelse\doifelseleapyear
@@ -322,8 +325,8 @@
%D This macro takes care of proper spacing and delivers for instance:
%D
%D \startbuffer
-%D \currentdate[weekday,day,month,year] % still dutch example
-%D \currentdate[WEEKDAY,day,MONTH,year] % still dutch example
+%D \currentdate[weekday,day,month,year]
+%D \currentdate[WEEKDAY,day,MONTH,year]
%D \stopbuffer
%D
%D \startlines
@@ -464,7 +467,6 @@
\unexpanded\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
@@ -569,7 +571,7 @@
% if we have definitions that are not matched at the lua end .. eventually we might do
% that when more shows up
-\def\doifelseconversiondefined#1%
+\def\doifelseconversiondefined#1% expandable
{\ifcsname\??conversion\currentlanguage#1\endcsname
\expandafter\firstoftwoarguments
\else\ifcsname\??conversion#1\endcsname
@@ -578,11 +580,11 @@
\doubleexpandafter\secondoftwoarguments
\fi\fi}
-\def\doifelseconversionnumber#1#2%
- {\ifcsname\??conversion#1#2\endcsname
- \expandafter\firstoftwoarguments
- \else
+\def\doifelseconversionnumber#1#2% expandable
+ {\ifnum#2>\numexpr\clf_nofconversions{#1}\relax
\expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
\fi}
\let\doifconversiondefinedelse\doifelseconversiondefined
@@ -596,21 +598,23 @@
\setvalue{\??conversionwords\v!four }{4}
\setvalue{\??conversionwords\v!five }{5}
-\def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\csname\??conversionwords#1\endcsname\else#2\fi}
+%def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\csname\??conversionwords#1\endcsname\else#2\fi}
+\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 {ordinaldaynumber, highordinalstr, ordinalstr}
+%D {ordinalnumber, highordinalstr, ordinalstr}
%D
%D Efficient general ordinal number converters are sometimes difficult to
%D implement. Fortunately dates never exceed the number~31.
\def\highordinalstr #1{\high{\notsmallcapped{#1}}}
\def\ordinalstr #1{\notsmallcapped{#1}}
-\def\ordinaldaynumber #1{\clf_ordinal\numexpr#1\relax{\currentlanguage}}
+\def\ordinalnumber #1{\clf_ordinal\numexpr#1\relax{\currentlanguage}}
+\def\Ordinalnumber #1{\Words{\clf_ordinal\numexpr#1\relax{\currentlanguage}}}
\def\verbosenumber #1{\clf_verbose\numexpr#1\relax{\currentlanguage}}
\def\VerboseNumber #1{\Words{\clf_verbose\numexpr#1\relax{\currentlanguage}}}
@@ -637,8 +641,8 @@
\defineconversion [\v!characters] [\characters]
\defineconversion [\v!Characters] [\Characters]
-\defineconversion [a] [\characters]
-\defineconversion [A] [\Characters]
+\defineconversion [a] [\alphabeticnumerals]
+\defineconversion [A] [\Alphabeticnumerals]
\defineconversion [AK] [\smallcappedcharacters]
\defineconversion [KA] [\smallcappedcharacters]
@@ -656,6 +660,9 @@
\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]
@@ -684,8 +691,8 @@
%defineconversion [Ñ] [\Spanishnumerals]
\defineconversion [abjadnumerals] [\abjadnumerals]
-\defineconversion [abjadnodotnumerals] [\adjadnodotnumerals]
-\defineconversion [abjadnaivenumerals] [\adjadnaivenumerals]
+\defineconversion [abjadnodotnumerals] [\abjadnodotnumerals]
+\defineconversion [abjadnaivenumerals] [\abjadnaivenumerals]
\defineconversion [thainumerals] [\thainumerals]
\defineconversion [devanagarinumerals] [\devanagarinumerals]
@@ -697,9 +704,13 @@
\defineconversion [arabicnumerals] [\arabicnumerals]
\defineconversion [persiannumerals] [\persiannumerals]
\defineconversion [arabicexnumerals] [\arabicexnumerals]
+\defineconversion [arabicdecimals] [\arabicdecimals]
+\defineconversion [persiandecimals] [\persiandecimals]
\defineconversion [koreannumerals] [\koreannumerals]
-\defineconversion [koreanparentnumerals] [\koreanparentnumerals]
+\defineconversion [koreanparennumerals] [\koreanparenthesisnumerals] % for old times sake (for a while)
+\defineconversion [koreanparenthesisnumerals]
+ [\koreanparenthesisnumerals]
\defineconversion [koreancirclenumerals] [\koreancirclenumerals]
\defineconversion [kr] [\koreannumerals]
@@ -728,20 +739,26 @@
\def\spanishnumerals #1{\clf_alphabetic\numexpr#1\relax{es}}
\def\spanishNumerals #1{\clf_Alphabetic\numexpr#1\relax{es}}
-\defineconversion [\s!sl] [character] [\sloveniannumerals]
-\defineconversion [\s!sl] [Character] [\slovenianNumerals]
-\defineconversion [\s!sl] [characters] [\sloveniannumerals]
-\defineconversion [\s!sl] [Characters] [\slovenianNumerals]
+%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] [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]
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.ctx b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.ctx
index 5126ad2d2bb..5126ad2d2bb 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.ctx
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.ctx
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.lua
index c20691cd7be..c20691cd7be 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.lua
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.mkiv
index e6372d0996a..e6372d0996a 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-ctx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/core-dat.lua b/Master/texmf-dist/tex/context/base/mkiv/core-dat.lua
index ca6ec43730c..c3b00a7c098 100644
--- a/Master/texmf-dist/tex/context/base/core-dat.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-dat.lua
@@ -79,7 +79,7 @@ local function setdata(settings)
data = settings_to_hash(data)
end
if type(data) ~= "table" then
- data = { data = settings.data }
+ data = { data = data }
end
if not tag then
tag = #list + 1
diff --git a/Master/texmf-dist/tex/context/base/core-dat.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-dat.mkiv
index 26b1f14b5c0..26b1f14b5c0 100644
--- a/Master/texmf-dist/tex/context/base/core-dat.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-dat.mkiv
diff --git a/Master/texmf-dist/tex/context/base/core-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-def.mkiv
index acd411faccb..acd411faccb 100644
--- a/Master/texmf-dist/tex/context/base/core-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-def.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/core-env.lua b/Master/texmf-dist/tex/context/base/mkiv/core-env.lua
new file mode 100644
index 00000000000..06c9708d6eb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-env.lua
@@ -0,0 +1,274 @@
+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 P, C, S, Cc, lpegmatch, patterns = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc, lpeg.match, lpeg.patterns
+
+local context = context
+
+local texgetcount = tex.getcount
+local texsetcount = tex.setcount
+
+local allocate = utilities.storage.allocate
+local setmetatableindex = table.setmetatableindex
+local setmetatablecall = table.setmetatablecall
+
+local createtoken = token.create
+
+tex.modes = allocate { }
+tex.systemmodes = allocate { }
+tex.constants = allocate { }
+tex.conditionals = allocate { }
+tex.ifs = allocate { }
+tex.isdefined = allocate { }
+
+local modes = { }
+local systemmodes = { }
+
+-- we could use the built-in tex.is[count|dimen|skip|toks] here but caching
+-- at the lua en dis not that bad (and we need more anyway)
+
+-- undefined: mode == 0 or cmdname = "undefined_cs"
+
+
+local cache = table.setmetatableindex(function(t,k)
+ local v = createtoken(k)
+ t[k] = v
+ return v
+end)
+
+-- we can have a modes cache too
+
+local iftrue = cache["iftrue"].mode
+local undefined = cache["*undefined*crap*"].mode -- is this ok?
+
+setmetatableindex(tex.modes, function(t,k)
+ local m = modes[k]
+ if m then
+ return m()
+ else
+ local n = "mode>" .. k
+ if cache[n].mode == 0 then
+ return false
+ else
+ modes[k] = function() return texgetcount(n) == 1 end
+ return texgetcount(n) == 1 -- 2 is prevented
+ end
+ end
+end)
+
+setmetatableindex(tex.systemmodes, function(t,k)
+ local m = systemmodes[k]
+ if m then
+ return m()
+ else
+ local n = "mode>*" .. k
+ if cache[n].mode == 0 then
+ return false
+ else
+ systemmodes[k] = function() return texgetcount(n) == 1 end
+ return texgetcount(n) == 1 -- 2 is prevented
+ end
+ end
+end)
+
+setmetatableindex(tex.constants, function(t,k)
+ return cache[k].mode ~= 0 and texgetcount(k) or 0
+end)
+
+setmetatableindex(tex.conditionals, function(t,k) -- 0 == true
+ return cache[k].mode ~= 0 and texgetcount(k) == 0
+end)
+
+table.setmetatableindex(tex.ifs, function(t,k)
+ -- local mode = cache[k].mode
+ -- if mode == 0 then
+ -- return nil
+ -- else
+ -- return mode == iftrue
+ -- end
+ return cache[k].mode == iftrue
+end)
+
+setmetatableindex(tex.isdefined, function(t,k)
+ return k and cache[k].mode ~= 0
+end)
+
+setmetatablecall(tex.isdefined, function(t,k)
+ return k and cache[k].mode ~= 0
+end)
+
+local dimencode = cache["scratchdimen"] .command
+local countcode = cache["scratchcounter"] .command
+local tokencode = cache["scratchtoken"] .command
+local skipcode = cache["scratchskip"] .command
+local muskipcode = cache["scratchmuskip"] .command
+---- attributecode = cache["scratchattribute"].command
+
+local types = {
+ [dimencode] = "dimen",
+ [countcode] = "count",
+ [tokencode] = "token",
+ [skipcode] = "skip",
+ [muskipcode] = "muskip",
+ -- [attributecode] = "attribute",
+}
+
+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
+
+-- -- old token code
+--
+-- local csname_id = token.csname_id
+-- local create = token.create
+--
+-- local undefined = csname_id("*undefined*crap*")
+-- local iftrue = create("iftrue")[2] -- inefficient hack
+--
+-- setmetatableindex(tex.modes, function(t,k)
+-- local m = modes[k]
+-- if m then
+-- return m()
+-- else
+-- local n = "mode>" .. k
+-- if csname_id(n) == undefined then
+-- return false
+-- else
+-- modes[k] = function() return texgetcount(n) == 1 end
+-- return texgetcount(n) == 1 -- 2 is prevented
+-- end
+-- end
+-- end)
+--
+-- setmetatableindex(tex.systemmodes, function(t,k)
+-- local m = systemmodes[k]
+-- if m then
+-- return m()
+-- else
+-- local n = "mode>*" .. k
+-- if csname_id(n) == undefined then
+-- return false
+-- else
+-- systemmodes[k] = function() return texgetcount(n) == 1 end
+-- return texgetcount(n) == 1 -- 2 is prevented
+-- end
+-- end
+-- end)
+--
+-- setmetatableindex(tex.constants, function(t,k)
+-- return csname_id(k) ~= undefined and texgetcount(k) or 0
+-- end)
+--
+-- setmetatableindex(tex.conditionals, function(t,k) -- 0 == true
+-- return csname_id(k) ~= undefined and texgetcount(k) == 0
+-- end)
+--
+-- setmetatableindex(tex.ifs, function(t,k)
+-- -- k = "if" .. k -- better not
+-- return csname_id(k) ~= undefined and create(k)[2] == iftrue -- inefficient, this create, we need a helper
+-- end)
+--
+-- setmetatableindex(tex.isdefined, function(t,k)
+-- return k and csname_id(k) ~= undefined
+-- end)
+-- setmetatablecall(tex.isdefined, function(t,k)
+-- return k and csname_id(k) ~= undefined
+-- end)
+--
+-- local lookuptoken = token.lookup
+--
+-- local dimencode = lookuptoken("scratchdimen" )[1]
+-- local countcode = lookuptoken("scratchcounter")[1]
+-- local tokencode = lookuptoken("scratchtoken" )[1]
+-- local skipcode = lookuptoken("scratchskip" )[1]
+--
+-- local types = {
+-- [dimencode] = "dimen",
+-- [countcode] = "count",
+-- [tokencode] = "token",
+-- [skipcode ] = "skip",
+-- }
+--
+-- function tex.isdimen(name)
+-- return lookuptoken(name)[1] == dimencode
+-- end
+--
+-- function tex.iscount(name)
+-- return lookuptoken(name)[1] == countcode
+-- end
+--
+-- function tex.istoken(name)
+-- return lookuptoken(name)[1] == tokencode
+-- end
+--
+-- function tex.isskip(name)
+-- return lookuptoken(name)[1] == skipcode
+-- end
+--
+-- function tex.type(name)
+-- return types[lookuptoken(name)[1]] or "macro"
+-- end
+
+function context.setconditional(name,value)
+ if value then
+ context.settruevalue(name)
+ else
+ context.setfalsevalue(name)
+ end
+end
+
+---- arg = P("{") * C(patterns.nested) * P("}") + Cc("")
+
+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 / context.luasetup
+ + P("xml") * arg / context.setupwithargument -- or xmlw as xmlsetup has swapped arguments
+ + (P("tex") * tag + str) / context.texsetup
+ + sep^1
+)^1
+
+interfaces.implement {
+ name = "autosetups",
+ actions = function(str) lpegmatch(pattern,str) end,
+ arguments = "string"
+}
+
diff --git a/Master/texmf-dist/tex/context/base/core-env.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-env.mkiv
index bebc1bef08c..e876dc80d94 100644
--- a/Master/texmf-dist/tex/context/base/core-env.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-env.mkiv
@@ -62,22 +62,22 @@
\unexpanded\def\setmode#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \csname\??mode#1\endcsname\enabledmode}
+ \lastnamedcs\enabledmode}
\unexpanded\def\resetmode#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \csname\??mode#1\endcsname\disabledmode}
+ \lastnamedcs\disabledmode}
\unexpanded\def\newsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi}
\unexpanded\def\setsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \csname\??mode\systemmodeprefix#1\endcsname\enabledmode}
+ \lastnamedcs\enabledmode}
\unexpanded\def\resetsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \csname\??mode\systemmodeprefix#1\endcsname\disabledmode}
+ \lastnamedcs\disabledmode}
% \def\dosetsystemmode#1%
% {\csname\??mode\systemmodeprefix#1\endcsname\enabledmode}
@@ -117,18 +117,18 @@
\def\syst_modes_prevent_indeed#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \syst_mode_prefix\csname\??mode#1\endcsname\preventedmode}
+ \syst_mode_prefix\lastnamedcs\preventedmode}
\def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
\ifnum\csname\??mode#1\endcsname=\preventedmode \else
- \syst_mode_prefix\csname\??mode#1\endcsname\enabledmode
+ \syst_mode_prefix\lastnamedcs\enabledmode
\fi}
\def\syst_modes_disable_indeed#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
\ifnum\csname\??mode#1\endcsname=\preventedmode \else
- \syst_mode_prefix\csname\??mode#1\endcsname\disabledmode
+ \syst_mode_prefix\lastnamedcs\disabledmode
\fi}
%D If you do a lot of mode testing, it makes sense to define modes (or disable them
@@ -162,7 +162,7 @@
\def\booleanmodevalue#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname
+ \ifcase\lastnamedcs
\s!false
\or
\s!true
@@ -175,36 +175,13 @@
% check macros
-% For some reason the older version had an unprotect for grabbing the
-% mode list (only) which does not really make sense any more so that
-% has been removed. One should (un)protect at the outer level instead.
-
\newconditional\c_checked_mode
% one
-% \def\syst_modes_check_indeed#1%
-% {\ifcsname\??mode#1\endcsname
-% \ifcase\csname\??mode#1\endcsname\else
-% \let\syst_modes_check_step\gobbleoneargument
-% \fi
-% \fi}
-%
-% \def\syst_modes_check#1#2#3%
-% {\let\syst_modes_check_step\syst_modes_check_indeed
-% \rawprocesscommacommand[#3]\syst_modes_check_step
-% \ifx\syst_modes_check_step\gobbleoneargument
-% \expandafter#1%
-% \else
-% \expandafter#2%
-% \fi}
-
-% modes .. twice as fast on defined modes .. we could use definers and make it even faster
-% if needed
-
\def\syst_modes_check_indeed#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname\else
+ \ifcase\lastnamedcs\else
\let\syst_modes_check_step\gobbleoneargument
\fi
\fi}
@@ -219,7 +196,7 @@
\fi}
\def\syst_modes_check_yes#1#2#3%
- {\ifcase\csname\??mode#3\endcsname
+ {\ifcase\lastnamedcs
\expandafter#2%
\or
\expandafter#1%
@@ -227,7 +204,14 @@
\expandafter#2%
\fi}
-\def\syst_modes_check#1#2#3%
+\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
@@ -238,7 +222,7 @@
\def\syst_modes_check_all_indeed#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname
+ \ifcase\lastnamedcs
\let\syst_modes_check_all_step\gobbleoneargument
\or
% enabled
@@ -249,7 +233,7 @@
\let\syst_modes_check_all_step\gobbleoneargument
\fi}
-\def\syst_modes_check_all#1#2#3%
+\def\syst_modes_check_all_lr#1#2#3%
{\let\syst_modes_check_all_step\syst_modes_check_all_indeed
\rawprocesscommacommand[#3]\syst_modes_check_all_step
\ifx\syst_modes_check_all_step\gobbleoneargument
@@ -258,16 +242,25 @@
\expandafter#1%
\fi}
-\unexpanded\def\doifelsemode {\syst_modes_check\firstoftwoarguments\secondoftwoarguments}
-\unexpanded\def\doifmode {\syst_modes_check\firstofoneargument\gobbleoneargument}
-\unexpanded\def\doifnotmode {\syst_modes_check\gobbleoneargument\firstofoneargument}
-\unexpanded\def\startmode [#1]{\syst_modes_check\donothing\syst_modes_stop_yes{#1}}
-\unexpanded\def\startnotmode [#1]{\syst_modes_check\syst_modes_stop_nop\donothing{#1}}
-\unexpanded\def\doifelseallmodes {\syst_modes_check_all\firstoftwoarguments\secondoftwoarguments}
-\unexpanded\def\doifallmodes {\syst_modes_check_all\firstofoneargument\gobbleoneargument}
-\unexpanded\def\doifnotallmodes {\syst_modes_check_all\gobbleoneargument\firstofoneargument}
-\unexpanded\def\startallmodes [#1]{\syst_modes_check_all\donothing\syst_modes_stop_all_yes{#1}}
-\unexpanded\def\startnotallmodes[#1]{\syst_modes_check_all\syst_modes_stop_all_nop\donothing{#1}}
+\def\syst_modes_check_all_ss#1#2[#3]%
+ {\let\syst_modes_check_all_step\syst_modes_check_all_indeed
+ \rawprocesscommacommand[#3]\syst_modes_check_all_step
+ \ifx\syst_modes_check_all_step\gobbleoneargument
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi}
+
+\unexpanded\def\doifelsemode {\syst_modes_check_lr\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifmode {\syst_modes_check_lr\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotmode {\syst_modes_check_lr\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startmode {\syst_modes_check_ss\donothing\syst_modes_stop_yes}
+\unexpanded\def\startnotmode {\syst_modes_check_ss\syst_modes_stop_nop\donothing}
+\unexpanded\def\doifelseallmodes{\syst_modes_check_all_lr\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifallmodes {\syst_modes_check_all_lr\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotallmodes {\syst_modes_check_all_lr\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startallmodes {\syst_modes_check_all_ss\donothing\syst_modes_stop_all_yes}
+\unexpanded\def\startnotallmodes{\syst_modes_check_all_ss\syst_modes_stop_all_nop\donothing}
\let\doifmodeelse \doifelsemode
\let\doifallmodeselse \doifelseallmodes
@@ -284,25 +277,47 @@
%D Pushing/popping:
+% \unexpanded\def\pushmode[#1]%
+% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
+% \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\??mode#1\endcsname}%
+% \expandafter\pushmacro\csname\??modestack#1\endcsname}
+%
+% \unexpanded\def\popmode[#1]%
+% {\ifcsname\??modestack#1\endcsname
+% \expandafter\popmacro\csname\??modestack#1\endcsname
+% \csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax
+% \fi}
+%
+% \def\pushsystemmode#1%
+% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
+% \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\??mode\systemmodeprefix#1\endcsname}%
+% \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname}
+%
+% \def\popsystemmode#1%
+% {\ifcsname\??modestack\systemmodeprefix#1\endcsname
+% \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname
+% \csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
+% \fi}
+
\unexpanded\def\pushmode[#1]%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\??mode#1\endcsname}%
- \expandafter\pushmacro\csname\??modestack#1\endcsname}
+ \expandafter\edef\csname\??modestack#1\expandafter\endcsname\expandafter{\number\lastnamedcs}%
+ \expandafter\pushmacro\lastnamedcs}
\unexpanded\def\popmode[#1]%
{\ifcsname\??modestack#1\endcsname
- \expandafter\popmacro\csname\??modestack#1\endcsname
+ \expandafter\popmacro\lastnamedcs
\csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax
\fi}
\def\pushsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\??mode\systemmodeprefix#1\endcsname}%
- \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname}
+ \expandafter\edef\csname\??modestack\systemmodeprefix#1\expandafter\endcsname\expandafter{\number\lastnamedcs}%
+ \expandafter\pushmacro\lastnamedcs}
\def\popsystemmode#1%
{\ifcsname\??modestack\systemmodeprefix#1\endcsname
- \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname
+ \expandafter\popmacro\lastnamedcs
\csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
\fi}
@@ -367,7 +382,7 @@
\fi}
\def\syst_modes_set_check
- {\syst_modes_check\syst_modes_set_yes\syst_modes_set_nop\m_mode_case}
+ {\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
@@ -408,73 +423,22 @@
\def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups} % [..]
\def\syst_setups_c[#1]{\syst_setups{#1}} % [..]
-\letvalue{\??setup:\letterpercent}\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:\letterpercent\fi\fi
-% \else
-% \ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi
-% \fi
-% \endcsname\empty} % takes one argument
+\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\letterpercent\fi\fi
+ \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\letterpercent\fi
+ :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi
\fi
\endcsname\empty} % takes one argument
-% not faster but less tracing sometimes:
-%
-% \def\syst_setups% the grid option will be extended to other main modes
-% {\csname\??setup\ifgridsnapping\expandafter\syst_setups_grid\else\expandafter\syst_setups_normal\fi}
-%
-% \def\syst_setups_grid#1%
-% {\ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi\fi\endcsname\empty} % takes one argument
-%
-% \def\syst_setups_normal#1%
-% {:\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi\endcsname\empty} % takes one argument
-%
-% only makes sense with many setups
-%
-% \def\syst_setups% the grid option will be extended to other main modes
-% {\ifgridsnapping
-% \expandafter\syst_setups_grid
-% \else
-% \expandafter\syst_setups_normal
-% \fi}
-%
-% \def\syst_setups_normal#1% the grid option will be extended to other main modes
-% {\csname\??setup
-% :\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi
-% \endcsname\empty} % takes one argument
-%
-% \def\syst_setups_grid#1% the grid option will be extended to other main modes
-% {\csname\??setup
-% \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi\fi
-% \endcsname\empty} % takes one argument
-%
-% \let\directsetup\syst_setups
-% \let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup
-
-% We can consider:
-%
-% \setvalue{\??setup->\v!auto}#1{\ctxcommand{autosetup("#1")}}
-%
-% ":\letterpercent" => "->\v!auto" with "\endcsname{#1}"
-%
-% but it won't work out well with multiple setups (intercepted at the
-% lua end) that then get only one argument.
-
% no checking and we assume it being defined:
\def\fastsetup #1{\csname\??setup:#1\endcsname\empty}
-\def\fastsetupwithargument #1#2{\csname\??setup:#2\endcsname{#1}}
-\def\fastsetupwithargumentswapped #1{\csname\??setup:#1\endcsname}
+\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
@@ -509,10 +473,10 @@
{\clf_autosetups{#1}}
\edef\setupwithargument#1% saves a few expansions
- {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname}
+ {\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\letterpercent\noexpand\fi\endcsname{#1}}
+ {\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
@@ -540,6 +504,24 @@
\expandafter\firstofoneargument
\fi}
+% maybe some day:
+%
+% \unexpanded\def\fastsetupfallback#1#2%
+% {\ifcsname\??setup:#1\endcsname
+% \expandafter\lastnamedcs
+% \else
+% \csname\??setup:#2\expandafter\endcsname
+% \fi}
+%
+% or
+%
+% \unexpanded\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
@@ -650,9 +632,9 @@
\unexpanded\def\resetsetups[#1]% see x-fo for usage
{\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname
- \dodoglobal\letbeundefined{\??setup\ifgridsnapping\v!grid\fi:#1}%
+ \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1}%
\else
- \dodoglobal\letbeundefined{\??setup:#1}%
+ \dodoglobal\undefinevalue{\??setup:#1}%
\fi}
\unexpanded\def\showsetupsdefinition[#1]%
@@ -697,13 +679,16 @@
\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}}
\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}}
+% \def\getvariable#1#2%
+% {\csname
+% \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi
+% \endcsname}
+
\def\getvariable#1#2%
- {\csname
- \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi
- \endcsname}
+ {\begincsname\??variables#1:#2\endcsname}
\def\showvariable#1#2%
- {\showvalue{\ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi}}
+ {\showvalue{\begincsname\??variables#1:#2\endcsname}}
\let\currentvariableclass\empty
@@ -722,7 +707,8 @@
\def\syst_variables_check_value#1#2#3%
{\ifcsname\??variables#1:#2\endcsname
- \edef\m_syst_variables_temp{\csname\??variables#1:#2\endcsname}%
+ %\edef\m_syst_variables_temp{\csname\??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
@@ -764,7 +750,8 @@
\letvalue{\??variables:}\empty
\unexpanded\def\doifelseemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\firstoffourarguments
\else
@@ -774,7 +761,8 @@
\let\doifemptyvariableelse\doifelseemptyvariable
\unexpanded\def\doifemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\firstofoneargument
\else
@@ -782,16 +770,21 @@
\fi}
\unexpanded\def\doifnotemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
\fi}
-
-\def\getvariabledefault#1#2% #3% can be command, so no ifcsname here
- {\executeifdefined{\??variables#1:#2}}% {#3}
+\def\getvariabledefault#1#2% #3% can be command
+ %{\executeifdefined{\??variables#1:#2}}% {#3}
+ {\ifcsname\??variables#1:#2\endcsname
+ \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
\unexpanded\def\setupenv
{\dotripleargument\syst_variables_set[\getrawparameters][\s!environment]}
diff --git a/Master/texmf-dist/tex/context/base/core-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-ini.mkiv
index c338f6f814e..0407409a39d 100644
--- a/Master/texmf-dist/tex/context/base/core-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-ini.mkiv
@@ -115,8 +115,8 @@
\newtoks \everyglobalbodyfont
\newtoks \everydefinedfont
-\newevery \everybodyfont \EveryBodyFont
-\newevery \everyfontswitch \EveryFontSwitch
+\newtoks \everybodyfont
+\newtoks \everyfontswitch
\newtoks \everysetupbodyfont
\newtoks \everyswitchtobodyfont
diff --git a/Master/texmf-dist/tex/context/base/core-sys.lua b/Master/texmf-dist/tex/context/base/mkiv/core-sys.lua
index cf74d68f461..3e39fa9da92 100644
--- a/Master/texmf-dist/tex/context/base/core-sys.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-sys.lua
@@ -71,8 +71,11 @@ implement { name = "outputfilename", actions = function() context(environme
statistics.register("result saved in file", function()
-- suffix will be fetched from backend
local outputfilename = environment.outputfilename or environment.jobname or tex.jobname or "<unset>"
- if tex.pdfoutput > 0 then
- return format("%s.%s, compresslevel %s, objectcompresslevel %s",outputfilename,"pdf",tex.pdfcompresslevel, tex.pdfobjcompresslevel)
+ if (tex.pdfoutput or tex.outputmode) > 0 then
+ return format("%s.%s, compresslevel %s, objectcompresslevel %s",outputfilename,"pdf",
+ pdf.getcompresslevel(),
+ pdf.getobjcompresslevel()
+ )
else
return format("%s.%s",outputfilename,"dvi") -- hard to imagine
end
diff --git a/Master/texmf-dist/tex/context/base/core-sys.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-sys.mkiv
index 1358f4cce80..cc9dafdd2f8 100644
--- a/Master/texmf-dist/tex/context/base/core-sys.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-sys.mkiv
@@ -417,7 +417,8 @@
%D This is a checked variant of \type {\getvalue}.
\unexpanded\def\macroname#1% brrr
- {\csname\ifcsname#1\endcsname#1\else\s!empty\fi\endcsname}
+% {\csname\ifcsname#1\endcsname#1\else\s!empty\fi\endcsname}
+ {\begincsname#1\endcsname}
% %D A weird one that I probably needed once, so it might as well become
% %D obsolete.
diff --git a/Master/texmf-dist/tex/context/base/core-two.lua b/Master/texmf-dist/tex/context/base/mkiv/core-two.lua
index bb1afa7db2f..bb1afa7db2f 100644
--- a/Master/texmf-dist/tex/context/base/core-two.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-two.lua
diff --git a/Master/texmf-dist/tex/context/base/core-two.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-two.mkiv
index 5a791dea2f7..5a791dea2f7 100644
--- a/Master/texmf-dist/tex/context/base/core-two.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-two.mkiv
diff --git a/Master/texmf-dist/tex/context/base/core-uti.lua b/Master/texmf-dist/tex/context/base/mkiv/core-uti.lua
index a4b74768053..23057872ffe 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-uti.lua
@@ -17,6 +17,7 @@ utility file under different setups, we now load a table once. This
saves much runtime but at the cost of more memory usage.</p>
--ldx]]--
+local math = math
local format, match = string.format, string.match
local next, type, tostring = next, type, tostring
local concat = table.concat
@@ -82,7 +83,7 @@ function job.initialize(loadname,savename)
if not savename or savename == "" then
savename = tex.jobname .. ".tua"
end
- job.load(loadname) -- has to come after structure is defined !
+ job.load(loadname) -- has to come after structure is defined !
luatex.registerstopactions(function()
if enabled and not status.lasterrorstring or status.lasterrorstring == "" then
-- if kept then
@@ -121,12 +122,14 @@ end
job.register('job.variables.checksums', 'job.variables.checksums', initializer)
local rmethod, rvalue
+local collectedmacros, tobesavedmacros
local ctx_setxvalue = context.setxvalue
local function initializer()
tobesaved = jobvariables.tobesaved
collected = jobvariables.collected
+ --
rvalue = collected.randomseed
if not rvalue then
rvalue = math.random()
@@ -137,19 +140,33 @@ local function initializer()
rmethod = "resumed"
end
tobesaved.randomseed = rvalue
- for cs, value in next, collected do
- ctx_setxvalue(cs,value)
+ --
+ collectedmacros = collected.macros
+ tobesavedmacros = tobesaved.macros
+ if not collectedmacros then
+ collectedmacros = { }
+ collected.macros = collectedmacros
+ end
+ if not tobesavedmacros then
+ tobesavedmacros = { }
+ tobesaved.macros = tobesavedmacros
+ end
+ -- will become collected.macros
+ for cs, value in next, collectedmacros do
+ if type(value) == "string" then -- safeguard
+ ctx_setxvalue(cs,value)
+ end
end
end
job.register('job.variables.collected', tobesaved, initializer)
function jobvariables.save(cs,value)
- tobesaved[cs] = value
+ tobesavedmacros[cs] = value
end
function jobvariables.restore(cs)
- return collected[cs] or tobesaved[cs]
+ return collectedmacros[cs] or tobesavedmacros[cs]
end
-- checksums
@@ -181,7 +198,15 @@ local packlist = {
-- "references", -- we need to rename of them as only one packs (not structures.lists.references)
}
-local jobpacker = packers.new(packlist,job.packversion) -- jump number when changs in hash
+local skiplist = {
+ "datasets",
+ "userdata",
+}
+
+-- not ok as we can have arbitrary keys in userdata and dataset so some day we
+-- might need a bit more granularity, like skippers
+
+local jobpacker = packers.new(packlist,job.packversion,skiplist) -- jump number when changs in hash
job.pack = true
-- job.pack = false
diff --git a/Master/texmf-dist/tex/context/base/core-uti.mkiv b/Master/texmf-dist/tex/context/base/mkiv/core-uti.mkiv
index cdd8958ff62..de9a893ee8e 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/core-uti.mkiv
@@ -18,7 +18,7 @@
\registerctxluafile{core-uti}{1.001}
\def\savecurrentvalue#1#2% immediate, so not \unexpanded
- {\clf_savevariable{\strippedcsname#1}{#2}}
+ {\clf_savevariable{\csstring#1}{#2}}
\appendtoks
\clf_setjobcomment
diff --git a/Master/texmf-dist/tex/context/base/data-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/data-aux.lua
index dae96ce6200..dae96ce6200 100644
--- a/Master/texmf-dist/tex/context/base/data-aux.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-aux.lua
diff --git a/Master/texmf-dist/tex/context/base/data-bin.lua b/Master/texmf-dist/tex/context/base/mkiv/data-bin.lua
index 1d1e8b74959..1d1e8b74959 100644
--- a/Master/texmf-dist/tex/context/base/data-bin.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-bin.lua
diff --git a/Master/texmf-dist/tex/context/base/data-con.lua b/Master/texmf-dist/tex/context/base/mkiv/data-con.lua
index 240538df2db..240538df2db 100644
--- a/Master/texmf-dist/tex/context/base/data-con.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-con.lua
diff --git a/Master/texmf-dist/tex/context/base/data-crl.lua b/Master/texmf-dist/tex/context/base/mkiv/data-crl.lua
index fba5a62305b..fba5a62305b 100644
--- a/Master/texmf-dist/tex/context/base/data-crl.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-crl.lua
diff --git a/Master/texmf-dist/tex/context/base/data-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/data-ctx.lua
index 345e9c7411a..345e9c7411a 100644
--- a/Master/texmf-dist/tex/context/base/data-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-ctx.lua
diff --git a/Master/texmf-dist/tex/context/base/data-env.lua b/Master/texmf-dist/tex/context/base/mkiv/data-env.lua
index 1d7728c22c9..8bb25036de1 100644
--- a/Master/texmf-dist/tex/context/base/data-env.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-env.lua
@@ -139,6 +139,11 @@ local relations = allocate { -- todo: handlers also here
names = { 'fontconfig', 'fontconfig file', 'fontconfig files' },
variable = 'FONTCONFIG_PATH',
},
+ pk = {
+ names = { "pk" },
+ variable = 'PKFONTS',
+ suffixes = { 'pk' },
+ },
},
obsolete = {
enc = {
diff --git a/Master/texmf-dist/tex/context/base/data-exp.lua b/Master/texmf-dist/tex/context/base/mkiv/data-exp.lua
index 0a739617101..19ceb90c342 100644
--- a/Master/texmf-dist/tex/context/base/data-exp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-exp.lua
@@ -8,6 +8,7 @@ if not modules then modules = { } end modules ['data-exp'] = {
local format, find, gmatch, lower, char, sub = string.format, string.find, string.gmatch, string.lower, string.char, string.sub
local concat, sort = table.concat, table.sort
+local sortedkeys = table.sortedkeys
local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
local Ct, Cs, Cc, Carg, P, C, S = lpeg.Ct, lpeg.Cs, lpeg.Cc, lpeg.Carg, lpeg.P, lpeg.C, lpeg.S
local type, next = type, next
@@ -501,17 +502,41 @@ end
local nothing = function() end
+-- function resolvers.filtered_from_content(content,pattern)
+-- if content and type(pattern) == "string" then
+-- local pattern = lower(pattern)
+-- local files = content.files
+-- local remap = content.remap
+-- if files and remap then
+-- local n = next(files)
+-- local function iterator()
+-- while n do
+-- local k = n
+-- n = next(files,k)
+-- if find(k,pattern) then
+-- return files[k], remap and remap[k] or k
+-- end
+-- end
+-- end
+-- return iterator
+-- end
+-- end
+-- return nothing
+-- end
+
function resolvers.filtered_from_content(content,pattern)
if content and type(pattern) == "string" then
local pattern = lower(pattern)
- local files = content.files
+ local files = content.files -- we could store the sorted list
local remap = content.remap
if files and remap then
- local n = next(files)
+ local f = sortedkeys(files)
+ local n = #f
+ local i = 0
local function iterator()
- while n do
- local k = n
- n = next(files,k)
+ while i < n do
+ i = i + 1
+ local k = f[i]
if find(k,pattern) then
return files[k], remap and remap[k] or k
end
@@ -523,6 +548,5 @@ function resolvers.filtered_from_content(content,pattern)
return nothing
end
-
-- inspect(resolvers.simplescanfiles("e:/temporary/mb-mp"))
-- inspect(resolvers.scanfiles("e:/temporary/mb-mp"))
diff --git a/Master/texmf-dist/tex/context/base/data-fil.lua b/Master/texmf-dist/tex/context/base/mkiv/data-fil.lua
index b699fc9e38f..b699fc9e38f 100644
--- a/Master/texmf-dist/tex/context/base/data-fil.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-fil.lua
diff --git a/Master/texmf-dist/tex/context/base/data-gen.lua b/Master/texmf-dist/tex/context/base/mkiv/data-gen.lua
index 5a07558315b..5a07558315b 100644
--- a/Master/texmf-dist/tex/context/base/data-gen.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-gen.lua
diff --git a/Master/texmf-dist/tex/context/base/data-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/data-ini.lua
index c74ff2e04b2..c74ff2e04b2 100644
--- a/Master/texmf-dist/tex/context/base/data-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/data-inp.lua b/Master/texmf-dist/tex/context/base/mkiv/data-inp.lua
index 97fb8904b91..97fb8904b91 100644
--- a/Master/texmf-dist/tex/context/base/data-inp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-inp.lua
diff --git a/Master/texmf-dist/tex/context/base/data-lst.lua b/Master/texmf-dist/tex/context/base/mkiv/data-lst.lua
index e4621a6e16d..e4621a6e16d 100644
--- a/Master/texmf-dist/tex/context/base/data-lst.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-lst.lua
diff --git a/Master/texmf-dist/tex/context/base/data-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/data-lua.lua
index 7c12a5940f5..7c12a5940f5 100644
--- a/Master/texmf-dist/tex/context/base/data-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-lua.lua
diff --git a/Master/texmf-dist/tex/context/base/data-met.lua b/Master/texmf-dist/tex/context/base/mkiv/data-met.lua
index 4e8a48f50e1..4e8a48f50e1 100644
--- a/Master/texmf-dist/tex/context/base/data-met.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-met.lua
diff --git a/Master/texmf-dist/tex/context/base/data-out.lua b/Master/texmf-dist/tex/context/base/mkiv/data-out.lua
index 11304c2ced3..11304c2ced3 100644
--- a/Master/texmf-dist/tex/context/base/data-out.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-out.lua
diff --git a/Master/texmf-dist/tex/context/base/data-pre.lua b/Master/texmf-dist/tex/context/base/mkiv/data-pre.lua
index 1c5016f8644..1c5016f8644 100644
--- a/Master/texmf-dist/tex/context/base/data-pre.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-pre.lua
diff --git a/Master/texmf-dist/tex/context/base/data-res.lua b/Master/texmf-dist/tex/context/base/mkiv/data-res.lua
index cbda21ce212..831ad881c2b 100644
--- a/Master/texmf-dist/tex/context/base/data-res.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-res.lua
@@ -1558,11 +1558,21 @@ local function findfiles(filename,filetype,allresults)
end
function resolvers.findfiles(filename,filetype)
- return findfiles(filename,filetype,true)
+ if not filename or filename == "" then
+ -- weird ... why called then
+ return ""
+ else
+ return findfiles(filename,filetype,true)
+ end
end
function resolvers.findfile(filename,filetype)
- return findfiles(filename,filetype,false)[1] or ""
+ if not filename or filename == "" then
+ -- weird ... why called then
+ return ""
+ else
+ return findfiles(filename,filetype,false)[1] or ""
+ end
end
function resolvers.findpath(filename,filetype)
diff --git a/Master/texmf-dist/tex/context/base/data-sch.lua b/Master/texmf-dist/tex/context/base/mkiv/data-sch.lua
index d79e0c7ef59..d79e0c7ef59 100644
--- a/Master/texmf-dist/tex/context/base/data-sch.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-sch.lua
diff --git a/Master/texmf-dist/tex/context/base/data-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/data-tex.lua
index b6b97a0a989..b6b97a0a989 100644
--- a/Master/texmf-dist/tex/context/base/data-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-tex.lua
diff --git a/Master/texmf-dist/tex/context/base/data-tmf.lua b/Master/texmf-dist/tex/context/base/mkiv/data-tmf.lua
index e0ccac257a1..e0ccac257a1 100644
--- a/Master/texmf-dist/tex/context/base/data-tmf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-tmf.lua
diff --git a/Master/texmf-dist/tex/context/base/data-tmp.lua b/Master/texmf-dist/tex/context/base/mkiv/data-tmp.lua
index 9e1515a2650..9e1515a2650 100644
--- a/Master/texmf-dist/tex/context/base/data-tmp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-tmp.lua
diff --git a/Master/texmf-dist/tex/context/base/data-tre.lua b/Master/texmf-dist/tex/context/base/mkiv/data-tre.lua
index 4388731f98c..4388731f98c 100644
--- a/Master/texmf-dist/tex/context/base/data-tre.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-tre.lua
diff --git a/Master/texmf-dist/tex/context/base/data-use.lua b/Master/texmf-dist/tex/context/base/mkiv/data-use.lua
index 7598506e459..7598506e459 100644
--- a/Master/texmf-dist/tex/context/base/data-use.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-use.lua
diff --git a/Master/texmf-dist/tex/context/base/data-vir.lua b/Master/texmf-dist/tex/context/base/mkiv/data-vir.lua
index 7e25c822d07..7e25c822d07 100644
--- a/Master/texmf-dist/tex/context/base/data-vir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-vir.lua
diff --git a/Master/texmf-dist/tex/context/base/data-zip.lua b/Master/texmf-dist/tex/context/base/mkiv/data-zip.lua
index 2be88e0fc1c..2be88e0fc1c 100644
--- a/Master/texmf-dist/tex/context/base/data-zip.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/data-zip.lua
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/enco-ini.mkiv
index ef0ebef4ebb..835ee61f575 100644
--- a/Master/texmf-dist/tex/context/base/enco-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/enco-ini.mkiv
@@ -111,10 +111,36 @@
% \relax#2%
% \endgroup}
+% \unexpanded\def\buildtextaccent#1#2% we could do all at the lua end
+% {\begingroup % but that's no fun (yet)
+% \setbox\b_enco_accent\hbox{#1}%
+% \clf_buildtextaccent\b_enco_accent#2%
+% \endgroup}
+%
+% This one can handle font collections too. The accent command is a scanner
+% and the same font and otherwise discards the character (imo it could
+% better drop the accent).
+
\unexpanded\def\buildtextaccent#1#2% we could do all at the lua end
- {\begingroup % but that's no fun (yet)
- \setbox\b_enco_accent\hbox{#1}%
- \clf_buildtextaccent\b_enco_accent#2%
+ {\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}
\unexpanded\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
@@ -132,7 +158,7 @@
\hidewidth
\hskip#2\wd0
\hskip-#3\slantperpoint % in plain 1ex * dimenless value
- \vbox to .2\exheight{\box0\vss}\hidewidth
+ \vpack to .2\exheight{\box0\vss}\hidewidth
\crcr}}}
\unexpanded\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}}
@@ -255,6 +281,10 @@
% some more
+\ifdefined\softhyphen \else
+ \let\softhyphen\-
+\fi
+
\def\hyphen {\softhyphen}
\def\compoundwordmark {\hyphen}
\def\cwm {\hyphen}
diff --git a/Master/texmf-dist/tex/context/base/export-example.css b/Master/texmf-dist/tex/context/base/mkiv/export-example.css
index f4475589211..8c7ae3bfc67 100644
--- a/Master/texmf-dist/tex/context/base/export-example.css
+++ b/Master/texmf-dist/tex/context/base/mkiv/export-example.css
@@ -560,9 +560,13 @@ listpage, context|div.listpage {
display : none ;
}
-/* delimitedblock : display */
-/* delimited : inline */
-/* subsentence : inline */
+/* delimitedblock : display */
+/* delimited : inline */
+/* delimitedsymbol : inline */
+/* delimitedcontent : inline */
+/* subsentence : inline */
+/* subsentencesymbol : inline */
+/* subsentencecontent : inline */
/* :lang(en) */
@@ -594,6 +598,14 @@ delimited, context|div.delimited {
display : inline
}
+delimitedcontent, context|div.delimitedcontent {
+ display : inline
+}
+
+delimitedsymbol, context|div.delimitedsymbol {
+ display : inline
+}
+
delimitedblock, context|div.delimitedblock {
display : block
}
@@ -606,6 +618,14 @@ subsentence, context|div.subsentence {
display : inline
}
+subsentencecontent, context|div.subsentencecontent {
+ display : inline
+}
+
+subsentencesymbol, context|div.subsentencesymbol {
+ display : inline
+}
+
/* label : mixed */
/* number : mixed */
diff --git a/Master/texmf-dist/tex/context/base/export-example.rng b/Master/texmf-dist/tex/context/base/mkiv/export-example.rng
index 93b21ba50bb..93b21ba50bb 100644
--- a/Master/texmf-dist/tex/context/base/export-example.rng
+++ b/Master/texmf-dist/tex/context/base/mkiv/export-example.rng
diff --git a/Master/texmf-dist/tex/context/base/export-example.tex b/Master/texmf-dist/tex/context/base/mkiv/export-example.tex
index 32cb79c5ea2..32cb79c5ea2 100644
--- a/Master/texmf-dist/tex/context/base/export-example.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/export-example.tex
diff --git a/Master/texmf-dist/tex/context/base/file-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/file-ini.lua
index 2a0271a9d80..2a0271a9d80 100644
--- a/Master/texmf-dist/tex/context/base/file-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/file-ini.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-ini.mkvi
index cb9f18cf962..9f12e9a3ba2 100644
--- a/Master/texmf-dist/tex/context/base/file-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-ini.mkvi
@@ -234,6 +234,6 @@
\fi}
\unexpanded\def\forgetdoingonce#whatever%
- {\global\letbeundefined{\??fileonce#whatever}}
+ {\global\undefinevalue{\??fileonce#whatever}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/file-job.lua b/Master/texmf-dist/tex/context/base/mkiv/file-job.lua
index 3a034f0a33e..602c41a118c 100644
--- a/Master/texmf-dist/tex/context/base/file-job.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-job.lua
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['file-job'] = {
-- in retrospect dealing it's not that bad to deal with the nesting
-- and push/poppign at the tex end
+local rawget = rawget
local gsub, match, find = string.gsub, string.match, string.find
local insert, remove, concat = table.insert, table.remove, table.concat
local validstring, formatters = string.valid, string.formatters
@@ -25,6 +26,7 @@ local implement = interfaces.implement
local trace_jobfiles = false trackers.register("system.jobfiles", function(v) trace_jobfiles = v end)
local report_jobfiles = logs.reporter("system","jobfiles")
+local report_functions = logs.reporter("system","functions")
local texsetcount = tex.setcount
local elements = interfaces.elements
@@ -64,7 +66,7 @@ local v_project = variables.project
local v_environment = variables.environment
local v_product = variables.product
local v_component = variables.component
-local c_prefix = variables.prefix
+local v_yes = variables.yes
-- main code .. there is some overlap .. here we have loc://
@@ -849,6 +851,13 @@ document = document or {
modes = allocate(),
},
},
+ functions = table.setmetatablenewindex(function(t,k,v)
+ if rawget(t,k) then
+ report_functions("overloading document function %a",k)
+ end
+ rawset(t,k,v)
+ return v
+ end),
}
function document.setargument(key,value)
@@ -955,6 +964,10 @@ function document.setcommandline() -- has to happen at the tex end in order to e
context.usepath { arguments.path }
end
+ if arguments.export then
+ context.setupbackend { export = v_yes }
+ end
+
local inputfile = validstring(arguments.input)
if inputfile and dirname(inputfile) == "." and lfs.isfile(inputfile) then
diff --git a/Master/texmf-dist/tex/context/base/file-job.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-job.mkvi
index 7814aba3f62..7814aba3f62 100644
--- a/Master/texmf-dist/tex/context/base/file-job.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-job.mkvi
diff --git a/Master/texmf-dist/tex/context/base/file-lib.lua b/Master/texmf-dist/tex/context/base/mkiv/file-lib.lua
index 361608ea3cf..361608ea3cf 100644
--- a/Master/texmf-dist/tex/context/base/file-lib.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-lib.lua
diff --git a/Master/texmf-dist/tex/context/base/file-lib.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-lib.mkvi
index 76137ce15b9..76137ce15b9 100644
--- a/Master/texmf-dist/tex/context/base/file-lib.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-lib.mkvi
diff --git a/Master/texmf-dist/tex/context/base/file-mod.lua b/Master/texmf-dist/tex/context/base/mkiv/file-mod.lua
index 7f3763c5ded..7f3763c5ded 100644
--- a/Master/texmf-dist/tex/context/base/file-mod.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-mod.lua
diff --git a/Master/texmf-dist/tex/context/base/file-mod.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-mod.mkvi
index f043a68e875..ebd741d42af 100644
--- a/Master/texmf-dist/tex/context/base/file-mod.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-mod.mkvi
@@ -20,16 +20,14 @@
%D \macros
%D {usemodule}
%D
-%D Most of \CONTEXT is preloaded in the format file. Some very
-%D domain specific typesetting topics are however dealt with in
-%D separate modules, e.g. typesetting of chemical structure
-%D formulas. These modules are loaded by:
+%D Most of \CONTEXT is preloaded in the format file. Some very domain specific
+%D typesetting topics are however dealt with in separate modules, e.g. typesetting
+%D of chemical structure formulas. These modules are loaded by:
%D
%D \showsetup{usemodule}
%D
-%D More information on the specific modules can be found in
-%D their dedicated manuals. We use \type {\next} so that we
-%D can \type {\end} in modules.
+%D More information on the specific modules can be found in their dedicated manuals.
+%D We use \type {\next} so that we can \type {\end} in modules.
\unexpanded\def\usemodules
{\dotripleempty\strc_modules_use}
@@ -64,7 +62,11 @@
\popmacro\currentmodule}
\def\strc_modules_use_indeed#category#name%
- {\clf_usemodules{#category}{#name}}
+ {\ifx\currentmoduleparameters\empty\else
+ \scratchtoks\expandafter{\currentmoduleparameters}%
+ \normalexpanded{\getparameters[\??module#name:][\the\scratchtoks]}%
+ \fi
+ \clf_usemodules{#category}{#name}}
\installcorenamespace{module}
@@ -91,15 +93,34 @@
\unexpanded\def\setupmodule
{\dodoubleempty\syst_modules_setup}
-\def\syst_modules_setup[#name][#parameters]%
+\def\syst_modules_setup
+ {\ifx\currentmoduleparameters\empty
+ \expandafter\syst_modules_setup_nop
+ \else
+ \expandafter\syst_modules_setup_yes
+ \fi}
+
+\def\syst_modules_setup_nop[#name][#parameters]%
+ {\ifsecondargument
+ \getparameters[\??module#name:][#parameters]% internal (defaults)
+ \else\iffirstargument
+ \doifassignmentelse{#name}{\getparameters[\??module\currentmodule:][#name]}\donothing
+ \fi\fi
+ \the\everysetupmodule}
+
+\def\syst_modules_setup_yes[#name][#parameters]%
{\scratchtoks\expandafter{\currentmoduleparameters}%
\ifsecondargument
\getparameters[\??module#name:][#parameters]% internal (defaults)
\normalexpanded{\getparameters[\??module#name:][\the\scratchtoks]}% loadtime (user)
+ \else\iffirstargument
+ \doifassignmentelse{#name}
+ {\getparameters[\??module\currentmodule:][#name]% internal (defaults)
+ \normalexpanded{\getparameters[\??module\currentmodule:][\the\scratchtoks]}}% loadtime (user)
+ {\normalexpanded{\getparameters[\??module#1:][\the\scratchtoks]}}% loadtime (user)
\else
- \getparameters[\??module\currentmodule:][#name]% internal (defaults)
- \normalexpanded{\getparameters[\??module\currentmodule:][\the\scratchtoks]}% loadtime (user)
- \fi
+ \normalexpanded{\getparameters[\??module\currentmodule:][\the\scratchtoks]}%
+ \fi\fi
\let\currentmoduleparameters\empty
\the\everysetupmodule}
@@ -116,9 +137,7 @@
% \let\currentmoduleparameters\empty}
\def\moduleparameter#name#parameter% should have been \namedmoduleparameter
- {\csname\??module
- \ifcsname\??module#name:#parameter\endcsname#name:#parameter\fi
- \endcsname}
+ {\begincsname\??module#name:#parameter\endcsname}
\letvalue\??module\empty % so we default to empty as with all parameters
diff --git a/Master/texmf-dist/tex/context/base/file-res.lua b/Master/texmf-dist/tex/context/base/mkiv/file-res.lua
index 08a3e22af8f..08a3e22af8f 100644
--- a/Master/texmf-dist/tex/context/base/file-res.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-res.lua
diff --git a/Master/texmf-dist/tex/context/base/file-res.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-res.mkvi
index 17f4cf44c5c..17f4cf44c5c 100644
--- a/Master/texmf-dist/tex/context/base/file-res.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-res.mkvi
diff --git a/Master/texmf-dist/tex/context/base/file-syn.lua b/Master/texmf-dist/tex/context/base/mkiv/file-syn.lua
index b6ad27c8325..b6ad27c8325 100644
--- a/Master/texmf-dist/tex/context/base/file-syn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-syn.lua
diff --git a/Master/texmf-dist/tex/context/base/file-syn.mkvi b/Master/texmf-dist/tex/context/base/mkiv/file-syn.mkvi
index 52ecd0d71e3..52ecd0d71e3 100644
--- a/Master/texmf-dist/tex/context/base/file-syn.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/file-syn.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-afk.lua b/Master/texmf-dist/tex/context/base/mkiv/font-afk.lua
index 8b65b063184..8b65b063184 100644
--- a/Master/texmf-dist/tex/context/base/font-afk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-afk.lua
diff --git a/Master/texmf-dist/tex/context/base/font-afm.lua b/Master/texmf-dist/tex/context/base/mkiv/font-afm.lua
index a96c6686e30..3dedf12e1da 100644
--- a/Master/texmf-dist/tex/context/base/font-afm.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-afm.lua
@@ -28,9 +28,11 @@ don't have this issue.</p>
local fonts, logs, trackers, containers, resolvers = fonts, logs, trackers, containers, resolvers
local next, type, tonumber = next, type, tonumber
-local format, match, gmatch, lower, gsub, strip = string.format, string.match, string.gmatch, string.lower, string.gsub, string.strip
-local abs = math.abs
-local P, S, C, R, lpegmatch, patterns = lpeg.P, lpeg.S, lpeg.C, lpeg.R, lpeg.match, lpeg.patterns
+local match, gmatch, lower, gsub, strip, find = string.match, string.gmatch, string.lower, string.gsub, string.strip, string.find
+local char, byte, sub = string.char, string.byte, string.sub
+local abs, mod = math.abs, math.mod
+local bxor, rshift = bit32.bxor, bit32.rshift
+local P, S, R, Cmt, C, Ct, Cs, lpegmatch, patterns = lpeg.P, lpeg.S, lpeg.R, lpeg.Cmt, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.match, lpeg.patterns
local derivetable = table.derive
local trace_features = false trackers.register("afm.features", function(v) trace_features = v end)
@@ -48,11 +50,6 @@ local definers = fonts.definers
local readers = fonts.readers
local constructors = fonts.constructors
-local fontloader = fontloader
-local font_to_table = fontloader.to_table
-local open_font = fontloader.open
-local close_font = fontloader.close
-
local afm = constructors.newhandler("afm")
local pfb = constructors.newhandler("pfb")
@@ -152,14 +149,14 @@ end
local keys = { }
-function keys.FontName (data,line) data.metadata.fontname = strip (line) -- get rid of spaces
- data.metadata.fullname = strip (line) end
-function keys.ItalicAngle (data,line) data.metadata.italicangle = tonumber (line) end
-function keys.IsFixedPitch(data,line) data.metadata.isfixedpitch = toboolean(line,true) end
-function keys.CharWidth (data,line) data.metadata.charwidth = tonumber (line) end
-function keys.XHeight (data,line) data.metadata.xheight = tonumber (line) end
-function keys.Descender (data,line) data.metadata.descender = tonumber (line) end
-function keys.Ascender (data,line) data.metadata.ascender = tonumber (line) end
+function keys.FontName (data,line) data.metadata.fontname = strip (line) -- get rid of spaces
+ data.metadata.fullname = strip (line) end
+function keys.ItalicAngle (data,line) data.metadata.italicangle = tonumber (line) end
+function keys.IsFixedPitch(data,line) data.metadata.monospaced = toboolean(line,true) end
+function keys.CharWidth (data,line) data.metadata.charwidth = tonumber (line) end
+function keys.XHeight (data,line) data.metadata.xheight = tonumber (line) end
+function keys.Descender (data,line) data.metadata.descender = tonumber (line) end
+function keys.Ascender (data,line) data.metadata.ascender = tonumber (line) end
function keys.Comment (data,line)
-- Comment DesignSize 12 (pts)
-- Comment TFM designsize: 12 (in points)
@@ -171,7 +168,7 @@ end
local function get_charmetrics(data,charmetrics,vector)
local characters = data.characters
local chr, ind = { }, 0
- for k,v in gmatch(charmetrics,"([%a]+) +(.-) *;") do
+ for k, v in gmatch(charmetrics,"([%a]+) +(.-) *;") do
if k == 'C' then
v = tonumber(v)
if v < 0 then
@@ -225,41 +222,193 @@ local function get_variables(data,fontmetrics)
end
end
-local function get_indexes(data,pfbname)
- data.resources.filename = resolvers.unresolve(pfbname) -- no shortcut
- local pfbblob = open_font(pfbname)
- if pfbblob then
- local characters = data.characters
- local pfbdata = font_to_table(pfbblob)
- if pfbdata then
- local glyphs = pfbdata.glyphs
- if glyphs then
- if trace_loading then
- report_afm("getting index data from %a",pfbname)
- end
- for index, glyph in next, glyphs do
- -- for index, glyph in table.sortedhash(glyphs) do
- local name = glyph.name
- if name then
- local char = characters[name]
- if char then
- if trace_indexing then
- report_afm("glyph %a has index %a",name,index)
+local get_indexes
+
+do
+
+ -- old font loader
+
+ local fontloader = fontloader
+
+ if fontloader then
+
+ local font_to_table = fontloader.to_table
+ local open_font = fontloader.open
+ local close_font = fontloader.close
+
+ local function get_indexes_old(data,pfbname)
+ local pfbblob = open_font(pfbname)
+ if pfbblob then
+ local characters = data.characters
+ local pfbdata = font_to_table(pfbblob)
+ if pfbdata then
+ local glyphs = pfbdata.glyphs
+ if glyphs then
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index, glyph in next, glyphs do
+ local name = glyph.name
+ if name then
+ local char = characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index = index
+ end
end
- char.index = index
end
+ elseif trace_loading then
+ report_afm("no glyph data in pfb file %a",pfbname)
end
+ elseif trace_loading then
+ report_afm("no data in pfb file %a",pfbname)
end
+ close_font(pfbblob)
elseif trace_loading then
- report_afm("no glyph data in pfb file %a",pfbname)
+ report_afm("invalid pfb file %a",pfbname)
end
- elseif trace_loading then
- report_afm("no data in pfb file %a",pfbname)
end
- close_font(pfbblob)
- elseif trace_loading then
- report_afm("invalid pfb file %a",pfbname)
+
end
+
+ -- new (unfinished) font loader but i see no differences between
+ -- old and new (one bad vector with old)
+
+ local n, m
+
+ local progress = function(str,position,name,size)
+ local forward = position + tonumber(size) + 3 + 2
+ n = n + 1
+ if n >= m then
+ return #str, name
+ elseif forward < #str then
+ return forward, name
+ else
+ return #str, name
+ end
+ end
+
+ local initialize = function(str,position,size)
+ n = 0
+ m = tonumber(size)
+ return position + 1
+ end
+
+ local charstrings = P("/CharStrings")
+ local name = P("/") * C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local size = C(R("09")^1)
+ local spaces = P(" ")^1
+
+ local p_filternames = Ct (
+ (1-charstrings)^0 * charstrings * spaces * Cmt(size,initialize)
+ * (Cmt(name * P(" ")^1 * C(R("09")^1), progress) + P(1))^1
+ )
+
+ -- if one of first 4 not 0-9A-F then binary else hex
+
+ local decrypt
+
+ do
+
+ local r, c1, c2, n = 0, 0, 0, 0
+
+ local function step(c)
+ local cipher = byte(c)
+ local plain = bxor(cipher,rshift(r,8))
+ r = mod((cipher + r) * c1 + c2,65536)
+ return char(plain)
+ end
+
+ decrypt = function(binary)
+ r, c1, c2, n = 55665, 52845, 22719, 4
+ binary = gsub(binary,".",step)
+ return sub(binary,n+1)
+ end
+
+ -- local pattern = Cs((P(1) / step)^1)
+ --
+ -- decrypt = function(binary)
+ -- r, c1, c2, n = 55665, 52845, 22719, 4
+ -- binary = lpegmatch(pattern,binary)
+ -- return sub(binary,n+1)
+ -- end
+
+ end
+
+ local function loadpfbvector(filename)
+ -- for the moment limited to encoding only
+
+ local data = io.loaddata(resolvers.findfile(filename))
+
+ if not find(data,"!PS%-AdobeFont%-") then
+ print("no font",filename)
+ return
+ end
+
+ if not data then
+ print("no data",filename)
+ return
+ end
+
+ local ascii, binary = match(data,"(.*)eexec%s+......(.*)")
+
+ if not binary then
+ print("no binary",filename)
+ return
+ end
+
+ binary = decrypt(binary,4)
+
+ local vector = lpegmatch(p_filternames,binary)
+
+ vector[0] = table.remove(vector,1)
+
+ if not vector then
+ print("no vector",filename)
+ return
+ end
+
+ return vector
+
+ end
+
+ get_indexes = function(data,pfbname)
+ local vector = loadpfbvector(pfbname)
+ if vector then
+ local characters = data.characters
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index=1,#vector do
+ local name = vector[index]
+ local char = characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index = index
+ end
+ end
+ end
+ end
+
+ if fontloader then
+
+ afm.use_new_indexer = true
+ get_indexes_new = get_indexes
+
+ get_indexes = function(data,pfbname)
+ if afm.use_new_indexer then
+ return get_indexes_new(data,pfbname)
+ else
+ return get_indexes_old(data,pfbname)
+ end
+ end
+
+ end
+
end
local function readafm(filename)
@@ -351,8 +500,9 @@ function afm.load(filename)
data = readafm(filename)
if data then
if pfbname ~= "" then
+ data.resources.filename = resolvers.unresolve(pfbname)
get_indexes(data,pfbname)
- elseif trace_loading then
+ elseif trace_loading then
report_afm("no pfb file for %a",filename)
-- data.resources.filename = "unset" -- better than loading the afm file
end
@@ -640,7 +790,7 @@ local function copytotfm(data)
local spacer = "space"
local spaceunits = 500
--
- local monospaced = metadata.isfixedpitch
+ local monospaced = metadata.monospaced
local charwidth = metadata.charwidth
local italicangle = metadata.italicangle
local charxheight = metadata.xheight and metadata.xheight > 0 and metadata.xheight
diff --git a/Master/texmf-dist/tex/context/base/font-age.lua b/Master/texmf-dist/tex/context/base/mkiv/font-age.lua
index bb6883a7470..bb6883a7470 100644
--- a/Master/texmf-dist/tex/context/base/font-age.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-age.lua
diff --git a/Master/texmf-dist/tex/context/base/font-agl.lua b/Master/texmf-dist/tex/context/base/mkiv/font-agl.lua
index 122d1adc2d1..dd349052335 100644
--- a/Master/texmf-dist/tex/context/base/font-agl.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-agl.lua
@@ -6,14 +6,15 @@ if not modules then modules = { } end modules ['font-agl'] = {
original = "Adobe Glyph List, version 2.0, September 20, 2002",
}
-local allocate = utilities.storage.allocate
+local allocate = utilities.storage.allocate
-local names = allocate {
- -- filled from char-def.lua
-}
-local unicodes = allocate {
- -- filled from char-def.lua
-}
+fonts = fonts or { }
+local encodings = fonts.encodings or { }
+fonts.encodings = encodings
+local agl = fonts.encodings.agl or { }
+fonts.encodings.agl = agl
+
+table.setmetatableindex(agl,nil) -- prevent recursive lookups otherwise when autoloaded
local synonyms = {
Acyrillic = 0x0410,
@@ -632,42 +633,60 @@ local extras = allocate { -- private extensions
twodotenleader = 0x2025,
}
-for u, c in next, characters.data do
- local a = c.adobename
- if a then
- unicodes[a] = u
- names [u] = a
+-- We load this table only when needed. We could use a loading mechanism
+-- return the table but there are no more vectors like this so why bother.
+--
+-- Well, we currently have this table preloaded anyway.
+
+local names = agl.names
+local unicodes = agl.unicodes
+local ctxcodes = agl.ctxcodes
+
+if not names then
+
+ names = allocate { } -- filled from char-def.lua
+ unicodes = allocate { }
+ ctxcodes = allocate { }
+
+ for u, c in next, characters.data do
+ local a = c.adobename
+ if a then
+ unicodes[a] = u
+ names [u] = a
+ end
+ local n = c.contextname
+ if n then
+ ctxcodes[n] = u
+ -- names [u] = a
+ end
end
-end
-for a, u in next, extras do
- unicodes[a] = u
- if not names[u] then
- names[u] = a
+ for a, u in next, extras do
+ unicodes[a] = u
+ if not names[u] then
+ names[u] = a
+ end
end
-end
-for s, u in next, synonyms do
- unicodes[s] = u
- if not names[u] then
- names[u] = s
+ for s, u in next, synonyms do
+ unicodes[s] = u
+ if not names[u] then
+ names[u] = s
+ end
end
-end
--- We load this table only when needed. We could use a loading mechanism
--- return the table but there are no more vectors like this so why bother.
---
--- Well, we currently hav ethis table preloaded anyway.
+ if storage then
+ storage.register("encodings/names", names, "fonts.encodings.names")
+ storage.register("encodings/unicodes", unicodes, "fonts.encodings.unicodes")
+ storage.register("encodings/ctxcodes", ctxcodes, "fonts.encodings.ctxcodes")
+ end
-local agl = {
- names = names, -- unicode -> name
- unicodes = unicodes, -- name -> unicode
- synonyms = synonyms, -- merged into the other two
- extras = extras, -- merged into the other two
-}
+end
-fonts = fonts or { }
-fonts.encodings = fonts.encodings or { }
-fonts.encodings.agl = agl
+agl.names = names -- unicode -> name
+agl.unicodes = unicodes -- name -> unicode
+agl.ctxcodes = ctxcodes -- name -> unicode
+agl.synonyms = synonyms -- merged into the other two
+agl.extras = extras -- merged into the other two
return agl
diff --git a/Master/texmf-dist/tex/context/base/font-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/font-aux.lua
index 2a605d224c9..fc6c90bc177 100644
--- a/Master/texmf-dist/tex/context/base/font-aux.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-aux.lua
@@ -11,6 +11,11 @@ local tonumber, type = tonumber, type
local fonts, font = fonts, font
+local fonts = fonts
+local handlers = fonts.handlers
+local otf = handlers.otf -- brrr
+local afm = handlers.afm -- brrr
+
local iterators = { }
fonts.iterators = iterators
@@ -163,3 +168,74 @@ function iterators.glyphs(data)
return dummy
end
end
+
+-- for the moment here, it might move to some other file later
+
+function afm.getkern(tfmdata,left,right)
+ local c = tfmdata.characters[left]
+ if c then
+ local kerns = c.kerns
+ if kerns then
+ return kerns[right] -- already scaled
+ end
+ end
+ return 0
+end
+
+local getters = { -- maybe better getters[format][...]
+ kern = {
+ ["type1"] = afm.getkern,
+ ["opentype"] = otf.getkern,
+ },
+ substitution = {
+ ["opentype"] = otf.getsubstitution,
+ },
+ alternate = {
+ ["opentype"] = otf.getalternate,
+ },
+ multiple = {
+ ["opentype"] = otf.getmultiple,
+ }
+}
+
+fonts.getters = getters
+
+function fonts.getkern(tfmdata,left,right)
+ local format = tfmdata.properties.format
+ local getter = getters.kern[format]
+ if getter then
+ return getter(tfmdata,left,right)
+ else
+ return 0
+ end
+end
+
+function fonts.getsubstitution(tfmdata,k,kind)
+ local format = tfmdata.properties.format
+ local getter = getters.substitution[format]
+ if getter then
+ return getter(tfmdata,k,kind,value)
+ else
+ return 0
+ end
+end
+
+function fonts.getalternate(tfmdata,k,kind,value)
+ local format = tfmdata.properties.format
+ local getter = getters.substitution[format]
+ if getter then
+ return getter(tfmdata,k,kind,value)
+ else
+ return 0
+ end
+end
+
+function fonts.getmultiple(tfmdata,k,kind)
+ local format = tfmdata.properties.format
+ local getter = getters.substitution[format]
+ if getter then
+ return getter(tfmdata,k,kind,value)
+ else
+ return 0
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-aux.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-aux.mkvi
index bd655e41c60..bd655e41c60 100644
--- a/Master/texmf-dist/tex/context/base/font-aux.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-aux.mkvi
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-cff.lua b/Master/texmf-dist/tex/context/base/mkiv/font-cff.lua
new file mode 100644
index 00000000000..8c57b473ef8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-cff.lua
@@ -0,0 +1,1698 @@
+if not modules then modules = { } end modules ['font-cff'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: option.outlines
+-- todo: option.boundingbox
+-- per charstring (less memory)
+
+-- This is a heavy one as it is a rather packed format. We don't need al the information
+-- now but we might need it later (who know what magic we can do with metapost). So at
+-- some point this might become a module. We just follow Adobe Technical Notes #5176 and
+-- #5177. In case of doubt I looked in the fontforge code that comes with LuaTeX.
+
+-- For now we save the segments in a list of segments with the operator last in an entry
+-- because that reflects the original. But it might make more sense to use a single array
+-- per segment. For pdf a simple concat works ok, but for other purposes a operator first
+-- flush is nicer.
+
+local next, type, tonumber = next, type, tonumber
+local byte = string.byte
+local concat, remove = table.concat, table.remove
+local floor, abs, round, ceil = math.floor, math.abs, math.round, math.ceil
+local P, C, R, S, C, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct
+local lpegmatch = lpeg.match
+
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
+
+local readbytes = streamreader.readbytes
+local readstring = streamreader.readstring
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readuint = streamreader.readcardinal3 -- 24-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local setposition = streamreader.setposition
+local getposition = streamreader.getposition
+
+local setmetatableindex = table.setmetatableindex
+
+local trace_charstrings = false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings = v end)
+local report = logs.reporter("otf reader","cff")
+
+local parsedictionaries
+local parsecharstring
+local parsecharstrings
+local resetcharstrings
+local parseprivates
+
+local defaultstrings = { [0] = -- taken from ff
+ ".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent",
+ "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus",
+ "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four",
+ "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less",
+ "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H",
+ "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
+ "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum",
+ "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
+ "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y",
+ "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent",
+ "sterling", "fraction", "yen", "florin", "section", "currency",
+ "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft",
+ "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl",
+ "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase",
+ "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown",
+ "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent",
+ "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash",
+ "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae",
+ "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior",
+ "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn",
+ "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters",
+ "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior",
+ "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring",
+ "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave",
+ "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute",
+ "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute",
+ "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron",
+ "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde",
+ "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute",
+ "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex",
+ "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex",
+ "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall",
+ "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall",
+ "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader",
+ "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle",
+ "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle",
+ "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior",
+ "threequartersemdash", "periodsuperior", "questionsmall", "asuperior",
+ "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior",
+ "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior",
+ "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior",
+ "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall",
+ "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall",
+ "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall",
+ "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall",
+ "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah",
+ "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall",
+ "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall",
+ "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior",
+ "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth",
+ "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds",
+ "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior",
+ "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior",
+ "oneinferior", "twoinferior", "threeinferior", "fourinferior",
+ "fiveinferior", "sixinferior", "seveninferior", "eightinferior",
+ "nineinferior", "centinferior", "dollarinferior", "periodinferior",
+ "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall",
+ "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall",
+ "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall",
+ "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall",
+ "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall",
+ "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall",
+ "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall",
+ "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003",
+ "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold",
+}
+
+local cffreaders = {
+ readbyte,
+ readushort,
+ readuint,
+ readulong,
+}
+
+-- The header contains information about its own size.
+
+local function readheader(f)
+ local offset = getposition(f)
+ local header = {
+ offset = offset,
+ major = readbyte(f),
+ minor = readbyte(f),
+ size = readbyte(f), -- headersize
+ osize = readbyte(f), -- for offsets to start
+ }
+ setposition(f,offset+header.size)
+ return header
+end
+
+-- The indexes all look the same, so we share a loader. We could pass a handler
+-- and run over the array but why bother, we only have a few uses.
+
+local function readlengths(f)
+ local count = readushort(f)
+ if count == 0 then
+ return { }
+ end
+ local osize = readbyte(f)
+ local read = cffreaders[osize]
+ if not read then
+ report("bad offset size: %i",osize)
+ return { }
+ end
+ local lengths = { }
+ local previous = read(f)
+ for i=1,count do
+ local offset = read(f)
+ lengths[i] = offset - previous
+ previous = offset
+ end
+ return lengths
+end
+
+-- There can be subfonts so names is an array. However, in our case it's always
+-- one font. The same is true for the top dictionaries. Watch how we only load
+-- the dictionary string as for interpretation we need to have the strings loaded
+-- as well.
+
+local function readfontnames(f)
+ local names = readlengths(f)
+ for i=1,#names do
+ names[i] = readstring(f,names[i])
+ end
+ return names
+end
+
+local function readtopdictionaries(f)
+ local dictionaries = readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i] = readstring(f,dictionaries[i])
+ end
+ return dictionaries
+end
+
+-- Strings are added to a list of standard strings so we start the font specific
+-- one with an offset. Strings are shared so we have one table.
+
+local function readstrings(f)
+ local lengths = readlengths(f)
+ local strings = setmetatableindex({ }, defaultstrings)
+ local index = #defaultstrings
+ for i=1,#lengths do
+ index = index + 1
+ strings[index] = readstring(f,lengths[i])
+ end
+ return strings
+end
+
+-- Parsing the dictionaries is delayed till we have the strings loaded. The parser
+-- is stack based so the operands come before the operator (like in postscript).
+
+-- local function delta(t)
+-- local n = #t
+-- if n > 1 then
+-- local p = t[1]
+-- for i=2,n do
+-- local c = t[i]
+-- t[i] = c + p
+-- p = c
+-- end
+-- end
+-- end
+
+do
+
+ -- We use a closure so that we don't need to pass too much around.
+
+ local stack = { }
+ local top = 0
+ local result = { }
+ local strings = { }
+
+ local p_single =
+ P("\00") / function()
+ result.version = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\01") / function()
+ result.notice = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\02") / function()
+ result.fullname = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\03") / function()
+ result.familyname = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\04") / function()
+ result.weight = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\05") / function()
+ result.fontbbox = { unpack(stack,1,4) }
+ top = 0
+ end
+ -- + P("\06") / function() end -- bluevalues
+ -- + P("\07") / function() end -- otherblues
+ -- + P("\08") / function() end -- familyblues
+ -- + P("\09") / function() end -- familyotherblues
+ -- + P("\10") / function() end -- strhw
+ -- + P("\11") / function() end -- stdvw
+ + P("\13") / function()
+ result.uniqueid = stack[top]
+ top = 0
+ end
+ + P("\14") / function()
+ result.xuid = concat(stack,"",1,top)
+ top = 0
+ end
+ + P("\15") / function()
+ result.charset = stack[top]
+ top = 0
+ end
+ + P("\16") / function()
+ result.encoding = stack[top]
+ top = 0
+ end
+ + P("\17") / function()
+ result.charstrings = stack[top]
+ top = 0
+ end
+ + P("\18") / function()
+ result.private = {
+ size = stack[top-1],
+ offset = stack[top],
+ }
+ top = 0
+ end
+ + P("\19") / function()
+ result.subroutines = stack[top]
+ end
+ + P("\20") / function()
+ result.defaultwidthx = stack[top]
+ end
+ + P("\21") / function()
+ result.nominalwidthx = stack[top]
+ end
+ -- + P("\22") / function() end -- reserved
+ -- + P("\23") / function() end -- reserved
+ -- + P("\24") / function() end -- reserved
+ -- + P("\25") / function() end -- reserved
+ -- + P("\26") / function() end -- reserved
+ -- + P("\27") / function() end -- reserved
+
+ local p_double = P("\12") * (
+ P("\00") / function()
+ result.copyright = stack[top]
+ top = 0
+ end
+ + P("\01") / function()
+ result.monospaced = stack[top] == 1 and true or false -- isfixedpitch
+ top = 0
+ end
+ + P("\02") / function()
+ result.italicangle = stack[top]
+ top = 0
+ end
+ + P("\03") / function()
+ result.underlineposition = stack[top]
+ top = 0
+ end
+ + P("\04") / function()
+ result.underlinethickness = stack[top]
+ top = 0
+ end
+ + P("\05") / function()
+ result.painttype = stack[top]
+ top = 0
+ end
+ + P("\06") / function()
+ result.charstringtype = stack[top]
+ top = 0
+ end
+ + P("\07") / function()
+ result.fontmatrix = { unpack(stack,1,6) }
+ top = 0
+ end
+ + P("\08") / function()
+ result.strokewidth = stack[top]
+ top = 0
+ end
+ + P("\20") / function()
+ result.syntheticbase = stack[top]
+ top = 0
+ end
+ + P("\21") / function()
+ result.postscript = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\22") / function()
+ result.basefontname = strings[stack[top]] or "unset"
+ top = 0
+ end
+ + P("\21") / function()
+ result.basefontblend = stack[top]
+ top = 0
+ end
+ + P("\30") / function()
+ result.cid.registry = strings[stack[top-2]] or "unset"
+ result.cid.ordering = strings[stack[top-1]] or "unset"
+ result.cid.supplement = stack[top]
+ top = 0
+ end
+ + P("\31") / function()
+ result.cid.fontversion = stack[top]
+ top = 0
+ end
+ + P("\32") / function()
+ result.cid.fontrevision= stack[top]
+ top = 0
+ end
+ + P("\33") / function()
+ result.cid.fonttype = stack[top]
+ top = 0
+ end
+ + P("\34") / function()
+ result.cid.count = stack[top]
+ top = 0
+ end
+ + P("\35") / function()
+ result.cid.uidbase = stack[top]
+ top = 0
+ end
+ + P("\36") / function()
+ result.cid.fdarray = stack[top]
+ top = 0
+ end
+ + P("\37") / function()
+ result.cid.fdselect = stack[top]
+ top = 0
+ end
+ + P("\38") / function()
+ result.cid.fontname = strings[stack[top]] or "unset"
+ top = 0
+ end
+ )
+
+ -- Some lpeg fun ... a first variant split the byte and made a new string but
+ -- the second variant is much faster. Not that it matters much as we don't see
+ -- such numbers often.
+
+ local p_last = P("\x0F") / "0" + P("\x1F") / "1" + P("\x2F") / "2" + P("\x3F") / "3"
+ + P("\x4F") / "4" + P("\x5F") / "5" + P("\x6F") / "6" + P("\x7F") / "7"
+ + P("\x8F") / "8" + P("\x9F") / "9" + P("\xAF") / "" + P("\xBF") / ""
+ + P("\xCF") / "" + P("\xDF") / "" + P("\xEF") / "" + R("\xF0\xFF") / ""
+
+ -- local remap = { [0] =
+ -- "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "0.", "0E", "0E-", "0", "0-", "0",
+ -- "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "0.", "0E", "0E-", "0", "0-", "0",
+ -- ".0", ".1", ".2", ".3", ".4", ".5", ".6", ".7", ".8", ".9", "..", ".E", ".E-", ".", ".-", ".",
+ -- "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "E.", "EE", "EE-", "E", "E-", "E",
+ -- "E-0", "E-1", "E-2", "E-3", "E-4", "E-5", "E-6", "E-7", "E-8", "E-9", "E-.", "E-E", "E-E-", "E-", "E--", "E-",
+ -- "-0", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-.", "-E", "-E-", "-", "--", "-",
+ -- }
+
+ -- local p_nibbles = Cs(((1-p_last)/byte/remap)^0+p_last)
+
+ -- local p = P("\30") * p_nibbles / function(t)
+ -- print(tonumber(t))
+ -- end
+
+ local remap = {
+ ["\x00"] = "00", ["\x01"] = "01", ["\x02"] = "02", ["\x03"] = "03", ["\x04"] = "04", ["\x05"] = "05", ["\x06"] = "06", ["\x07"] = "07", ["\x08"] = "08", ["\x09"] = "09", ["\x0A"] = "0.", ["\x0B"] = "0E", ["\x0C"] = "0E-", ["\x0D"] = "0", ["\x0E"] = "0-", ["\x0F"] = "0",
+ ["\x10"] = "10", ["\x11"] = "11", ["\x12"] = "12", ["\x13"] = "13", ["\x14"] = "14", ["\x15"] = "15", ["\x16"] = "16", ["\x17"] = "17", ["\x18"] = "18", ["\x19"] = "19", ["\x1A"] = "0.", ["\x1B"] = "0E", ["\x1C"] = "0E-", ["\x1D"] = "0", ["\x1E"] = "0-", ["\x1F"] = "0",
+ ["\x20"] = "20", ["\x21"] = "21", ["\x22"] = "22", ["\x23"] = "23", ["\x24"] = "24", ["\x25"] = "25", ["\x26"] = "26", ["\x27"] = "27", ["\x28"] = "28", ["\x29"] = "29", ["\x2A"] = "0.", ["\x2B"] = "0E", ["\x2C"] = "0E-", ["\x2D"] = "0", ["\x2E"] = "0-", ["\x2F"] = "0",
+ ["\x30"] = "30", ["\x31"] = "31", ["\x32"] = "32", ["\x33"] = "33", ["\x34"] = "34", ["\x35"] = "35", ["\x36"] = "36", ["\x37"] = "37", ["\x38"] = "38", ["\x39"] = "39", ["\x3A"] = "0.", ["\x3B"] = "0E", ["\x3C"] = "0E-", ["\x3D"] = "0", ["\x3E"] = "0-", ["\x3F"] = "0",
+ ["\x40"] = "40", ["\x41"] = "41", ["\x42"] = "42", ["\x43"] = "43", ["\x44"] = "44", ["\x45"] = "45", ["\x46"] = "46", ["\x47"] = "47", ["\x48"] = "48", ["\x49"] = "49", ["\x4A"] = "0.", ["\x4B"] = "0E", ["\x4C"] = "0E-", ["\x4D"] = "0", ["\x4E"] = "0-", ["\x4F"] = "0",
+ ["\x50"] = "50", ["\x51"] = "51", ["\x52"] = "52", ["\x53"] = "53", ["\x54"] = "54", ["\x55"] = "55", ["\x56"] = "56", ["\x57"] = "57", ["\x58"] = "58", ["\x59"] = "59", ["\x5A"] = "0.", ["\x5B"] = "0E", ["\x5C"] = "0E-", ["\x5D"] = "0", ["\x5E"] = "0-", ["\x5F"] = "0",
+ ["\x60"] = "60", ["\x61"] = "61", ["\x62"] = "62", ["\x63"] = "63", ["\x64"] = "64", ["\x65"] = "65", ["\x66"] = "66", ["\x67"] = "67", ["\x68"] = "68", ["\x69"] = "69", ["\x6A"] = "0.", ["\x6B"] = "0E", ["\x6C"] = "0E-", ["\x6D"] = "0", ["\x6E"] = "0-", ["\x6F"] = "0",
+ ["\x70"] = "70", ["\x71"] = "71", ["\x72"] = "72", ["\x73"] = "73", ["\x74"] = "74", ["\x75"] = "75", ["\x76"] = "76", ["\x77"] = "77", ["\x78"] = "78", ["\x79"] = "79", ["\x7A"] = "0.", ["\x7B"] = "0E", ["\x7C"] = "0E-", ["\x7D"] = "0", ["\x7E"] = "0-", ["\x7F"] = "0",
+ ["\x80"] = "80", ["\x81"] = "81", ["\x82"] = "82", ["\x83"] = "83", ["\x84"] = "84", ["\x85"] = "85", ["\x86"] = "86", ["\x87"] = "87", ["\x88"] = "88", ["\x89"] = "89", ["\x8A"] = "0.", ["\x8B"] = "0E", ["\x8C"] = "0E-", ["\x8D"] = "0", ["\x8E"] = "0-", ["\x8F"] = "0",
+ ["\x90"] = "90", ["\x91"] = "91", ["\x92"] = "92", ["\x93"] = "93", ["\x94"] = "94", ["\x95"] = "95", ["\x96"] = "96", ["\x97"] = "97", ["\x98"] = "98", ["\x99"] = "99", ["\x9A"] = "0.", ["\x9B"] = "0E", ["\x9C"] = "0E-", ["\x9D"] = "0", ["\x9E"] = "0-", ["\x9F"] = "0",
+ ["\xA0"] = ".0", ["\xA1"] = ".1", ["\xA2"] = ".2", ["\xA3"] = ".3", ["\xA4"] = ".4", ["\xA5"] = ".5", ["\xA6"] = ".6", ["\xA7"] = ".7", ["\xA8"] = ".8", ["\xA9"] = ".9", ["\xAA"] = "..", ["\xAB"] = ".E", ["\xAC"] = ".E-", ["\xAD"] = ".", ["\xAE"] = ".-", ["\xAF"] = ".",
+ ["\xB0"] = "E0", ["\xB1"] = "E1", ["\xB2"] = "E2", ["\xB3"] = "E3", ["\xB4"] = "E4", ["\xB5"] = "E5", ["\xB6"] = "E6", ["\xB7"] = "E7", ["\xB8"] = "E8", ["\xB9"] = "E9", ["\xBA"] = "E.", ["\xBB"] = "EE", ["\xBC"] = "EE-", ["\xBD"] = "E", ["\xBE"] = "E-", ["\xBF"] = "E",
+ ["\xC0"] = "E-0", ["\xC1"] = "E-1", ["\xC2"] = "E-2", ["\xC3"] = "E-3", ["\xC4"] = "E-4", ["\xC5"] = "E-5", ["\xC6"] = "E-6", ["\xC7"] = "E-7", ["\xC8"] = "E-8", ["\xC9"] = "E-9", ["\xCA"] = "E-.", ["\xCB"] = "E-E", ["\xCC"] = "E-E-", ["\xCD"] = "E-", ["\xCE"] = "E--", ["\xCF"] = "E-",
+ ["\xD0"] = "-0", ["\xD1"] = "-1", ["\xD2"] = "-2", ["\xD3"] = "-3", ["\xD4"] = "-4", ["\xD5"] = "-5", ["\xD6"] = "-6", ["\xD7"] = "-7", ["\xD8"] = "-8", ["\xD9"] = "-9", ["\xDA"] = "-.", ["\xDB"] = "-E", ["\xDC"] = "-E-", ["\xDD"] = "-", ["\xDE"] = "--", ["\xDF"] = "-",
+ }
+
+ local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0+p_last) / function(n)
+ -- 0-9=digit a=. b=E c=E- d=reserved e=- f=finish
+ top = top + 1
+ stack[top] = tonumber(n) or 0
+ end
+
+ local p_byte = C(R("\32\246")) / function(b0)
+ -- -107 .. +107
+ top = top + 1
+ stack[top] = byte(b0) - 139
+ end
+
+ local p_positive = C(R("\247\250")) * C(1) / function(b0,b1)
+ -- +108 .. +1131
+ top = top + 1
+ stack[top] = (byte(b0)-247)*256 + byte(b1) + 108
+ end
+
+ local p_negative = C(R("\251\254")) * C(1) / function(b0,b1)
+ -- -1131 .. -108
+ top = top + 1
+ stack[top] = -(byte(b0)-251)*256 - byte(b1) - 108
+ end
+
+ local p_short = P("\28") * C(1) * C(1) / function(b1,b2)
+ -- -32768 .. +32767 : b1<<8 | b2
+ top = top + 1
+ local n = 0x100 * byte(b1) + byte(b2)
+ if n >= 0x8000 then
+ stack[top] = n - 0xFFFF - 1
+ else
+ stack[top] = n
+ end
+ end
+
+ local p_long = P("\29") * C(1) * C(1) * C(1) * C(1) / function(b1,b2,b3,b4)
+ -- -2^31 .. +2^31-1 : b1<<24 | b2<<16 | b3<<8 | b4
+ top = top + 1
+ local n = 0x1000000 * byte(b1) + 0x10000 * byte(b2) + 0x100 * byte(b3) + byte(b4)
+ if n >= 0x8000000 then
+ stack[top] = n - 0xFFFFFFFF - 1
+ else
+ stack[top] = n
+ end
+ end
+
+ local p_unsupported = P(1) / function(detail)
+ top = 0
+ end
+
+ local p_dictionary = (
+ p_byte
+ + p_positive
+ + p_negative
+ + p_short
+ + p_long
+ + p_nibbles
+ + p_single
+ + p_double
+ + p_unsupported
+ )^1
+
+ parsedictionaries = function(data,dictionaries)
+ stack = { }
+ strings = data.strings
+ for i=1,#dictionaries do
+ top = 0
+ result = {
+ monospaced = false,
+ italicangle = 0,
+ underlineposition = -100,
+ underlinethickness = 50,
+ painttype = 0,
+ charstringtype = 2,
+ fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 },
+ fontbbox = { 0, 0, 0, 0 },
+ strokewidth = 0,
+ charset = 0,
+ encoding = 0,
+ cid = {
+ fontversion = 0,
+ fontrevision = 0,
+ fonttype = 0,
+ count = 8720,
+ }
+ }
+ lpegmatch(p_dictionary,dictionaries[i])
+ dictionaries[i] = result
+ end
+ --
+ result = { }
+ top = 0
+ stack = { }
+ end
+
+ parseprivates = function(data,dictionaries)
+ stack = { }
+ strings = data.strings
+ for i=1,#dictionaries do
+ local private = dictionaries[i].private
+ if private and private.data then
+ top = 0
+ result = {
+ forcebold = false,
+ languagegroup = 0,
+ expansionfactor = 0.06,
+ initialrandomseed = 0,
+ subroutines = 0,
+ defaultwidthx = 0,
+ nominalwidthx = 0,
+ cid = {
+ -- actually an error
+ },
+ }
+ lpegmatch(p_dictionary,private.data)
+ private.data = result
+ end
+ end
+ result = { }
+ top = 0
+ stack = { }
+ end
+
+ -- All bezier curves have 6 points with successive pairs relative to
+ -- the previous pair. Some can be left out and are then copied or zero
+ -- (optimization).
+ --
+ -- We are not really interested in all the details of a glyph because we
+ -- only need to calculate the boundingbox. So, todo: a quick no result but
+ -- calculate only variant.
+ --
+ -- The conversion is straightforward and the specification os clear once
+ -- you understand that the x and y needs to be updates each step. It's also
+ -- quite easy to test because in mp a shape will look bad when a few variables
+ -- are swapped. But still there might be bugs down here because not all
+ -- variants are seen in a font so far. We are less compact that the ff code
+ -- because there quite some variants are done in one helper with a lot of
+ -- testing for states.
+
+ local x = 0
+ local y = 0
+ local width = false
+ local r = 0
+ local stems = 0
+ local globalbias = 0
+ local localbias = 0
+ local globals = false
+ local locals = false
+ local depth = 1
+ local xmin = 0
+ local xmax = 0
+ local ymin = 0
+ local ymax = 0
+ local checked = false
+ local keepcurve = false
+
+ local function showstate(where)
+ report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
+ end
+
+ local function showvalue(where,value,showstack)
+ if showstack then
+ report("%w%-10s : %s : [%s] n=%i",depth*2,where,tostring(value),concat(stack," ",1,top),top)
+ else
+ report("%w%-10s : %s",depth*2,where,tostring(value))
+ end
+ end
+
+ -- All these indirect calls make this run slower but it's cleaner this way
+ -- and we cache the result. As we moved the boundingbox code inline we gain
+ -- some back.
+
+ local function moveto(x,y)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "m" }
+ end
+ if checked then
+ if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ else
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ end
+ end
+
+ local function lineto(x,y)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x, y, "l" }
+ end
+ if checked then
+ if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ else
+ xmin = x
+ ymin = y
+ xmax = x
+ ymax = y
+ checked = true
+ end
+ end
+
+ local function curveto(x1,y1,x2,y2,x3,y3)
+ if keepcurve then
+ r = r + 1
+ result[r] = { x1, y1, x2, y2, x3, y3, "c" }
+ end
+ if checked then
+ if x1 < xmin then xmin = x1 elseif x1 > xmax then xmax = x1 end
+ if y1 < ymin then ymin = y1 elseif y1 > ymax then ymax = y1 end
+ else
+ xmin = x1
+ ymin = y1
+ xmax = x1
+ ymax = y1
+ checked = true
+ end
+ if x2 < xmin then xmin = x2 elseif x2 > xmax then xmax = x2 end
+ if y2 < ymin then ymin = y2 elseif y2 > ymax then ymax = y2 end
+ if x3 < xmin then xmin = x3 elseif x3 > xmax then xmax = x3 end
+ if y3 < ymin then ymin = y3 elseif y3 > ymax then ymax = y3 end
+ end
+
+ local function rmoveto()
+ if top > 2 then
+ if not width then
+ width = stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width = true
+ end
+ if trace_charstrings then
+ showstate("rmoveto")
+ end
+ x = x + stack[top-1] -- dx1
+ y = y + stack[top] -- dy1
+ top = 0
+ moveto(x,y)
+ end
+
+ local function hmoveto()
+ if top > 1 then
+ if not width then
+ width = stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width = true
+ end
+ if trace_charstrings then
+ showstate("hmoveto")
+ end
+ x = x + stack[top] -- dx1
+ top = 0
+ moveto(x,y)
+ end
+
+ local function vmoveto()
+ if top > 1 then
+ if not width then
+ width = stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ elseif not width then
+ width = true
+ end
+ if trace_charstrings then
+ showstate("vmoveto")
+ end
+ y = y + stack[top] -- dy1
+ top = 0
+ moveto(x,y)
+ end
+
+ local function rlineto()
+ if trace_charstrings then
+ showstate("rlineto")
+ end
+ for i=1,top,2 do
+ x = x + stack[i] -- dxa
+ y = y + stack[i+1] -- dya
+ lineto(x,y)
+ end
+ top = 0
+ end
+
+ local function xlineto(swap) -- x (y,x)+ | (x,y)+
+ for i=1,top do
+ if swap then
+ x = x + stack[i]
+ swap = false
+ else
+ y = y + stack[i]
+ swap = true
+ end
+ lineto(x,y)
+ end
+ top = 0
+ end
+
+ local function hlineto() -- x (y,x)+ | (x,y)+
+ if trace_charstrings then
+ showstate("hlineto")
+ end
+ xlineto(true)
+ end
+
+ local function vlineto() -- y (x,y)+ | (y,x)+
+ if trace_charstrings then
+ showstate("vlineto")
+ end
+ xlineto(false)
+ end
+
+ local function rrcurveto()
+ if trace_charstrings then
+ showstate("rrcurveto")
+ end
+ for i=1,top,6 do
+ local ax = x + stack[i] -- dxa
+ local ay = y + stack[i+1] -- dya
+ local bx = ax + stack[i+2] -- dxb
+ local by = ay + stack[i+3] -- dyb
+ x = bx + stack[i+4] -- dxc
+ y = by + stack[i+5] -- dyc
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top = 0
+ end
+
+ local function hhcurveto()
+ if trace_charstrings then
+ showstate("hhcurveto")
+ end
+ local s = 1
+ if top % 2 ~= 0 then
+ y = y + stack[1] -- dy1
+ s = 2
+ end
+ for i=s,top,4 do
+ local ax = x + stack[i] -- dxa
+ local ay = y
+ local bx = ax + stack[i+1] -- dxb
+ local by = ay + stack[i+2] -- dyb
+ x = bx + stack[i+3] -- dxc
+ y = by
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top = 0
+ end
+
+ local function vvcurveto()
+ if trace_charstrings then
+ showstate("vvcurveto")
+ end
+ local s = 1
+ local d = 0
+ if top % 2 ~= 0 then
+ d = stack[1] -- dx1
+ s = 2
+ end
+ for i=s,top,4 do
+ local ax = x + d
+ local ay = y + stack[i] -- dya
+ local bx = ax + stack[i+1] -- dxb
+ local by = ay + stack[i+2] -- dyb
+ x = bx
+ y = by + stack[i+3] -- dyc
+ curveto(ax,ay,bx,by,x,y)
+ d = 0
+ end
+ top = 0
+ end
+
+ local function xxcurveto(swap)
+ local last = top % 4 ~= 0 and stack[top]
+ if last then
+ top = top - 1
+ end
+ local sw = swap
+ for i=1,top,4 do
+ local ax, ay, bx, by
+ if swap then
+ ax = x + stack[i]
+ ay = y
+ bx = ax + stack[i+1]
+ by = ay + stack[i+2]
+ y = by + stack[i+3]
+ if last and i+3 == top then
+ x = bx + last
+ else
+ x = bx
+ end
+ swap = false
+ else
+ ax = x
+ ay = y + stack[i]
+ bx = ax + stack[i+1]
+ by = ay + stack[i+2]
+ x = bx + stack[i+3]
+ if last and i+3 == top then
+ y = by + last
+ else
+ y = by
+ end
+ swap = true
+ end
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top = 0
+ end
+
+ local function hvcurveto()
+ if trace_charstrings then
+ showstate("hvcurveto")
+ end
+ xxcurveto(true)
+ end
+
+ local function vhcurveto()
+ if trace_charstrings then
+ showstate("vhcurveto")
+ end
+ xxcurveto(false)
+ end
+
+ local function rcurveline()
+ if trace_charstrings then
+ showstate("rcurveline")
+ end
+ for i=1,top-2,6 do
+ local ax = x + stack[i] -- dxa
+ local ay = y + stack[i+1] -- dya
+ local bx = ax + stack[i+2] -- dxb
+ local by = ay + stack[i+3] -- dyb
+ x = bx + stack[i+4] -- dxc
+ y = by + stack[i+5] -- dyc
+ curveto(ax,ay,bx,by,x,y)
+ end
+ x = x + stack[top-1] -- dxc
+ y = y + stack[top] -- dyc
+ lineto(x,y)
+ top = 0
+ end
+
+ local function rlinecurve()
+ if trace_charstrings then
+ showstate("rlinecurve")
+ end
+ if top > 6 then
+ for i=1,top-6,2 do
+ x = x + stack[i]
+ y = y + stack[i+1]
+ lineto(x,y)
+ end
+ end
+ local ax = x + stack[top-5]
+ local ay = y + stack[top-4]
+ local bx = ax + stack[top-3]
+ local by = ay + stack[top-2]
+ x = bx + stack[top-1]
+ y = by + stack[top]
+ curveto(ax,ay,bx,by,x,y)
+ top = 0
+ end
+
+ -- flex is not yet tested! no loop
+
+ local function flex() -- fd not used
+ if trace_charstrings then
+ showstate("flex")
+ end
+ local ax = x + stack[1] -- dx1
+ local ay = y + stack[2] -- dy1
+ local bx = ax + stack[3] -- dx2
+ local by = ay + stack[4] -- dy2
+ local cx = bx + stack[5] -- dx3
+ local cy = by + stack[6] -- dy3
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[7] -- dx4
+ local dy = cy + stack[8] -- dy4
+ local ex = dx + stack[9] -- dx5
+ local ey = dy + stack[10] -- dy5
+ x = ex + stack[11] -- dx6
+ y = ey + stack[12] -- dy6
+ curveto(dx,dy,ex,ey,x,y)
+ top = 0
+ end
+
+ local function hflex()
+ if trace_charstrings then
+ showstate("hflex")
+ end
+ local ax = x + stack[1] -- dx1
+ local ay = y
+ local bx = ax + stack[2] -- dx2
+ local by = ay + stack[3] -- dy2
+ local cx = bx + stack[4] -- dx3
+ local cy = by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[5] -- dx4
+ local dy = by
+ local ex = dx + stack[6] -- dx5
+ local ey = y
+ x = ex + stack[7] -- dx6
+ curveto(dx,dy,ex,ey,x,y)
+ top = 0
+ end
+
+ local function hflex1()
+ if trace_charstrings then
+ showstate("hflex1")
+ end
+ local ax = x + stack[1] -- dx1
+ local ay = y + stack[2] -- dy1
+ local bx = ax + stack[3] -- dx2
+ local by = ay + stack[4] -- dy2
+ local cx = bx + stack[5] -- dx3
+ local cy = by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[6] -- dx4
+ local dy = by
+ local ex = dx + stack[7] -- dx5
+ local ey = dy + stack[8] -- dy5
+ x = ex + stack[9] -- dx6
+ curveto(dx,dy,ex,ey,x,y)
+ top = 0
+ end
+
+ local function flex1()
+ if trace_charstrings then
+ showstate("flex1")
+ end
+ local ax = x + stack[1] --dx1
+ local ay = y + stack[2] --dy1
+ local bx = ax + stack[3] --dx2
+ local by = ay + stack[4] --dy2
+ local cx = bx + stack[5] --dx3
+ local cy = by + stack[6] --dy3
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx = cx + stack[7] --dx4
+ local dy = cy + stack[8] --dy4
+ local ex = dx + stack[9] --dx5
+ local ey = dy + stack[10] --dy5
+ if abs(ex - x) > abs(ey - y) then -- spec: abs(dx) > abs(dy)
+ x = ex + stack[11]
+ else
+ y = ey + stack[11]
+ end
+ curveto(dx,dy,ex,ey,x,y)
+ top = 0
+ end
+
+ local function getstem()
+ if top == 0 then
+ -- bad
+ elseif top % 2 ~= 0 then
+ if width then
+ remove(stack,1)
+ else
+ width = remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top = top - 1
+ end
+ if trace_charstrings then
+ showstate("stem")
+ end
+ stems = stems + top/2
+ top = 0
+ end
+
+ local function getmask()
+ if top == 0 then
+ -- bad
+ elseif top % 2 ~= 0 then
+ if width then
+ remove(stack,1)
+ else
+ width = remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top = top - 1
+ end
+ if trace_charstrings then
+ showstate(operator == 19 and "hintmark" or "cntrmask")
+ end
+ stems = stems + top/2
+ top = 0
+ if stems == 0 then
+ -- forget about it
+ elseif stems <= 8 then
+ return 1
+ else
+ return floor((stems+7)/8)
+ end
+ end
+
+ local function unsupported()
+ if trace_charstrings then
+ showstate("unsupported")
+ end
+ top = 0
+ end
+
+ -- Bah, we cannot use a fast lpeg because a hint has an unknown size and a
+ -- runtime capture cannot handle that well.
+
+ local actions = { [0] =
+ unsupported, -- 0
+ getstem, -- 1 -- hstem
+ unsupported, -- 2
+ getstem, -- 3 -- vstem
+ vmoveto, -- 4
+ rlineto, -- 5
+ hlineto, -- 6
+ vlineto, -- 7
+ rrcurveto, -- 8
+ unsupported, -- 9 -- closepath
+ unsupported, -- 10 -- calllocal,
+ unsupported, -- 11 -- callreturn,
+ unsupported, -- 12 -- elsewhere
+ unsupported, -- 13 -- hsbw
+ unsupported, -- 14 -- endchar,
+ unsupported, -- 15
+ unsupported, -- 16
+ unsupported, -- 17
+ getstem, -- 18 -- hstemhm
+ getmask, -- 19 -- hintmask
+ getmask, -- 20 -- cntrmask
+ rmoveto, -- 21
+ hmoveto, -- 22
+ getstem, -- 23 -- vstemhm
+ rcurveline, -- 24
+ rlinecurve, -- 25
+ vvcurveto, -- 26
+ hhcurveto, -- 27
+ unsupported, -- 28 -- elsewhere
+ unsupported, -- 29 -- elsewhere
+ vhcurveto, -- 30
+ hvcurveto, -- 31
+ }
+
+ local subactions = {
+ [034] = hflex,
+ [035] = flex,
+ [036] = hflex1,
+ [037] = flex1,
+ }
+
+ local p_bytes = Ct((P(1)/byte)^0)
+
+ local function call(scope,list,bias,process)
+ local index = stack[top] + bias
+ top = top - 1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local str = list[index]
+ if str then
+ if type(str) == "string" then
+ str = lpegmatch(p_bytes,str)
+ list[index] = str
+ end
+ depth = depth + 1
+ process(str)
+ depth = depth - 1
+ else
+ report("unknown %s %i",scope,index)
+ end
+ end
+
+ local function process(tab)
+ local i = 1
+ local n = #tab
+ while i <= n do
+ local t = tab[i]
+ if t >= 32 and t<=246 then
+ -- -107 .. +107
+ top = top + 1
+ stack[top] = t - 139
+ i = i + 1
+ elseif t >= 247 and t <= 250 then
+ -- +108 .. +1131
+ top = top + 1
+ stack[top] = (t-247)*256 + tab[i+1] + 108
+ i = i + 2
+ elseif t >= 251 and t <= 254 then
+ -- -1131 .. -108
+ top = top + 1
+ stack[top] = -(t-251)*256 - tab[i+1] - 108
+ i = i + 2
+ elseif t == 28 then
+ -- -32768 .. +32767 : b1<<8 | b2
+ top = top + 1
+ local n = 0x100 * tab[i+1] + tab[i+2]
+ if n >= 0x8000 then
+ stack[top] = n - 0xFFFF - 1
+ else
+ stack[top] = n
+ end
+ i = i + 3
+ elseif t == 255 then
+ local n = 0x100 * tab[i+1] + tab[i+2]
+ top = top + 1
+ if n >= 0x8000 then
+ stack[top] = n - 0xFFFF - 1 + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
+ else
+ stack[top] = n + (0x100 * tab[i+3] + tab[i+4])/0xFFFF
+ end
+ i = i + 5
+ elseif t == 11 then
+ if trace_charstrings then
+ showstate("return")
+ end
+ return
+ elseif t == 10 then
+ call("local",locals,localbias,process)
+ i = i + 1
+ elseif t == 14 then -- endchar
+ if width then
+ -- okay
+ elseif top > 0 then
+ width = stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ else
+ width = true
+ end
+ if trace_charstrings then
+ showstate("endchar")
+ end
+ return
+ elseif t == 29 then
+ call("global",globals,globalbias,process)
+ i = i + 1
+ elseif t == 12 then
+ i = i + 1
+ local t = tab[i]
+ local a = subactions[t]
+ if a then
+ a()
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top = 0
+ end
+ i = i + 1
+ else
+ local a = actions[t]
+ if a then
+ local s = a()
+ if s then
+ i = i + s
+ end
+ else
+ if trace_charstrings then
+ showvalue("<action>",t)
+ end
+ top = 0
+ end
+ i = i + 1
+ end
+ end
+ end
+
+ -- local function calculatebounds(segments,x,y)
+ -- local nofsegments = #segments
+ -- if nofsegments == 0 then
+ -- return { x, y, x, y }
+ -- else
+ -- local xmin = 10000
+ -- local xmax = -10000
+ -- local ymin = 10000
+ -- local ymax = -10000
+ -- if x < xmin then xmin = x end
+ -- if x > xmax then xmax = x end
+ -- if y < ymin then ymin = y end
+ -- if y > ymax then ymax = y end
+ -- -- we now have a reasonable start so we could
+ -- -- simplyfy the next checks
+ -- for i=1,nofsegments do
+ -- local s = segments[i]
+ -- local x = s[1]
+ -- local y = s[2]
+ -- if x < xmin then xmin = x end
+ -- if x > xmax then xmax = x end
+ -- if y < ymin then ymin = y end
+ -- if y > ymax then ymax = y end
+ -- if s[#s] == "c" then -- "curveto"
+ -- local x = s[3]
+ -- local y = s[4]
+ -- if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ -- if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ -- local x = s[5]
+ -- local y = s[6]
+ -- if x < xmin then xmin = x elseif x > xmax then xmax = x end
+ -- if y < ymin then ymin = y elseif y > ymax then ymax = y end
+ -- end
+ -- end
+ -- return { round(xmin), round(ymin), round(xmax), round(ymax) } -- doesn't make ceil more sense
+ -- end
+ -- end
+
+ parsecharstrings = function(data,glyphs,doshapes)
+ -- for all charstrings
+ local dictionary = data.dictionaries[1]
+ local charstrings = dictionary.charstrings
+ local charset = dictionary.charset
+ keepcurve = doshapes
+ stack = { }
+ glyphs = glyphs or { }
+ strings = data.strings
+ locals = dictionary.subroutines
+ globals = data.routines
+ globalbias = #globals
+ localbias = #locals
+ globalbias = ((globalbias < 1240 and 107) or (globalbias < 33900 and 1131) or 32768) + 1
+ localbias = ((localbias < 1240 and 107) or (localbias < 33900 and 1131) or 32768) + 1
+ local nominalwidth = dictionary.private.data.nominalwidthx or 0
+ local defaultwidth = dictionary.private.data.defaultwidthx or 0
+
+ for i=1,#charstrings do
+ local str = charstrings[i]
+ local tab = lpegmatch(p_bytes,str)
+ local index = i - 1
+ x = 0
+ y = 0
+ width = false
+ r = 0
+ top = 0
+ stems = 0
+ result = { }
+ --
+ xmin = 0
+ xmax = 0
+ ymin = 0
+ ymax = 0
+ checked = false
+ --
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ --
+ process(tab)
+ --
+ local boundingbox = { round(xmin), round(ymin), round(xmax), round(ymax) }
+ --
+ if width == true or width == false then
+ width = defaultwidth
+ else
+ width = nominalwidth + width
+ end
+ --
+ -- trace_charstrings = index == 3078 -- todo: make tracker
+ local glyph = glyphs[index] -- can be autodefined in otr
+ if not glyph then
+ glyphs[index] = {
+ segments = doshapes ~= false and result or nil, -- optional
+ boundingbox = boundingbox,
+ width = width,
+ name = charset[index],
+ -- sidebearing = 0,
+ }
+ else
+ glyph.segments = doshapes ~= false and result or nil
+ glyph.boundingbox = boundingbox
+ if not glyph.width then
+ glyph.width = width
+ end
+ if charset and not glyph.name then
+ glyph.name = charset[index]
+ end
+ -- glyph.sidebearing = 0 -- todo
+ end
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ charstrings[i] = nil -- free memory
+ end
+ return glyphs
+ end
+
+ parsecharstring = function(data,dictionary,charstring,glyphs,index,doshapes)
+ local private = dictionary.private
+ keepcurve = doshapes
+ strings = data.strings -- or in dict?
+ locals = dictionary.subroutines or { }
+ globals = data.routines or { }
+ globalbias = #globals
+ localbias = #locals
+ globalbias = ((globalbias < 1240 and 107) or (globalbias < 33900 and 1131) or 32768) + 1
+ localbias = ((localbias < 1240 and 107) or (localbias < 33900 and 1131) or 32768) + 1
+ local nominalwidth = private and private.data.nominalwidthx or 0
+ local defaultwidth = private and private.data.defaultwidthx or 0
+ --
+ local tab = lpegmatch(p_bytes,charstring)
+ x = 0
+ y = 0
+ width = false
+ r = 0
+ top = 0
+ stems = 0
+ result = { }
+ --
+ xmin = 0
+ xmax = 0
+ ymin = 0
+ ymax = 0
+ checked = false
+ --
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ --
+ process(tab)
+ --
+ local boundingbox = { xmin, ymin, xmax, ymax }
+ --
+ if width == true or width == false then
+ width = defaultwidth
+ else
+ width = nominalwidth + width
+ end
+ --
+index = index - 1
+ local glyph = glyphs[index] -- can be autodefined in otr
+ if not glyph then
+ glyphs[index] = {
+ segments = doshapes ~= false and result or nil, -- optional
+ boundingbox = boundingbox,
+ width = width,
+ name = charset[index],
+ -- sidebearing = 0,
+ }
+ else
+ glyph.segments = doshapes ~= false and result or nil
+ glyph.boundingbox = boundingbox
+ if not glyph.width then
+ glyph.width = width
+ end
+ if charset and not glyph.name then
+ glyph.name = charset[index]
+ end
+ -- glyph.sidebearing = 0 -- todo
+ end
+ --
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ --
+ return charstring
+ end
+
+ resetcharstrings = function()
+ result = { }
+ top = 0
+ stack = { }
+ end
+
+end
+
+local function readglobals(f,data)
+ local routines = readlengths(f)
+ for i=1,#routines do
+ routines[i] = readstring(f,routines[i])
+ end
+ data.routines = routines
+end
+
+local function readencodings(f,data)
+ data.encodings = { }
+end
+
+local function readcharsets(f,data,dictionary)
+ local header = data.header
+ local strings = data.strings
+ local nofglyphs = data.nofglyphs
+ local charsetoffset = dictionary.charset
+
+ if charsetoffset ~= 0 then
+ setposition(f,header.offset+charsetoffset)
+ local format = readbyte(f)
+ local charset = { [0] = ".notdef" }
+ dictionary.charset = charset
+ if format == 0 then
+ for i=1,nofglyphs do
+ charset[i] = strings[readushort(f)]
+ end
+ elseif format == 1 or format == 2 then
+ local readcount = format == 1 and readbyte or readushort
+ local i = 1
+ while i <= nofglyphs do
+ local sid = readushort(f)
+ local n = readcount(f)
+ for s=sid,sid+n do
+ charset[i] = strings[s]
+ i = i + 1
+ if i > nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
+ end
+ end
+end
+
+local function readprivates(f,data)
+ local header = data.header
+ local dictionaries = data.dictionaries
+ local private = dictionaries[1].private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data = readstring(f,private.size)
+ end
+end
+
+local function readlocals(f,data,dictionary)
+ local header = data.header
+ local private = dictionary.private
+ if private then
+ local subroutineoffset = private.data.subroutines
+ if subroutineoffset ~= 0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines = readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i] = readstring(f,subroutines[i])
+ end
+ dictionary.subroutines = subroutines
+ private.data.subroutines = nil
+ else
+ dictionary.subroutines = { }
+ end
+ else
+ dictionary.subroutines = { }
+ end
+end
+
+-- These charstrings are little programs and described in: Technical Note #5177. A truetype
+-- font has only one dictionary.
+
+local function readcharstrings(f,data)
+ local header = data.header
+ local dictionaries = data.dictionaries
+ local dictionary = dictionaries[1]
+ local type = dictionary.charstringtype
+ local offset = dictionary.charstrings
+ if type == 2 then
+ setposition(f,header.offset+offset)
+ -- could be a metatable .. delayed loading
+ local charstrings = readlengths(f)
+ local nofglyphs = #charstrings
+ for i=1,nofglyphs do
+ charstrings[i] = readstring(f,charstrings[i])
+ end
+ data.nofglyphs = nofglyphs
+ dictionary.charstrings = charstrings
+ else
+ report("unsupported charstr type %i",type)
+ data.nofglyphs = 0
+ dictionary.charstrings = { }
+ end
+end
+
+-- cid (maybe do this stepwise so less mem) -- share with above
+
+local function readcidprivates(f,data)
+ local header = data.header
+ local dictionaries = data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary = dictionaries[i]
+ local private = dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data = readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+
+local function readnoselect(f,data,glyphs,doshapes)
+ local dictionaries = data.dictionaries
+ local dictionary = dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ parsecharstrings(data,glyphs,doshapes)
+ resetcharstrings()
+end
+
+local function readfdselect(f,data,glyphs,doshapes)
+ local header = data.header
+ local dictionaries = data.dictionaries
+ local dictionary = dictionaries[1]
+ local cid = dictionary.cid
+ local cidselect = cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ local charstrings = dictionary.charstrings
+ local fdindex = { }
+ local nofglyphs = data.nofglyphs
+ local maxindex = -1
+ setposition(f,header.offset+cidselect)
+ local format = readbyte(f)
+ if format == 1 then
+ for i=0,nofglyphs do -- notdef included (needs checking)
+ local index = readbyte(i)
+ fdindex[i] = index
+ if index > maxindex then
+ maxindex = index
+ end
+ end
+ elseif format == 3 then
+ local nofranges = readushort(f)
+ local first = readushort(f)
+ local index = readbyte(f)
+ while true do
+ local last = readushort(f)
+ if index > maxindex then
+ maxindex = index
+ end
+ for i=first,last do
+ fdindex[i] = index
+ end
+ if last >= nofglyphs then
+ break
+ else
+ first = last + 1
+ index = readbyte(f)
+ end
+ end
+ else
+ -- unsupported format
+ end
+ if maxindex >= 0 then
+ local cidarray = cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries = readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i] = readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries = dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ for i=1,#charstrings do
+ parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes)
+ end
+ resetcharstrings()
+ end
+end
+
+function readers.cff(f,fontdata,specification)
+-- if specification.glyphs then
+ if specification.details then
+ local datatable = fontdata.tables.cff
+ if datatable then
+ local offset = datatable.offset
+ local glyphs = fontdata.glyphs
+ if not f then
+ report("invalid filehandle")
+ return
+ end
+ if offset then
+ setposition(f,offset)
+ end
+ local header = readheader(f)
+ if header.major > 1 then
+ report("version mismatch")
+ return
+ end
+ local names = readfontnames(f)
+ local dictionaries = readtopdictionaries(f)
+ local strings = readstrings(f)
+ local data = {
+ header = header,
+ names = names,
+ dictionaries = dictionaries,
+ strings = strings,
+ nofglyphs = fontdata.nofglyphs,
+ }
+ --
+ parsedictionaries(data,data.dictionaries)
+ --
+ local d = dictionaries[1]
+ local c = d.cid
+ fontdata.cffinfo = {
+ familynamename = d.familyname,
+ fullname = d.fullname,
+ boundingbox = d.boundingbox,
+ weight = d.weight,
+ italicangle = d.italicangle,
+ underlineposition = d.underlineposition,
+ underlinethickness = d.underlinethickness,
+ monospaced = d.monospaced,
+ }
+ fontdata.cidinfo = c and {
+ registry = c.registry,
+ ordering = c.ordering,
+ supplement = c.supplement,
+ }
+ --
+ if not specification.glyphs then
+ -- we only want some metadata
+ else
+ local cid = d.cid
+ if cid and cid.fdselect then
+ readfdselect(f,data,glyphs,specification.shapes or false)
+ else
+ readnoselect(f,data,glyphs,specification.shapes or false)
+ end
+ end
+ --
+ -- cleanup (probably more can go)
+ --
+ -- for i=1,#dictionaries do
+ -- local d = dictionaries[i]
+ -- d.subroutines = nil
+ -- end
+ -- data.strings = nil
+ -- if data then
+ -- data.charstrings = nil
+ -- data.routines = nil
+ -- end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-chk.lua b/Master/texmf-dist/tex/context/base/mkiv/font-chk.lua
index 41205ce5ed7..5b1ad992070 100644
--- a/Master/texmf-dist/tex/context/base/font-chk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-chk.lua
@@ -56,7 +56,9 @@ local tonode = nuts.tonode
local getfont = nuts.getfont
local getchar = nuts.getchar
+
local setfield = nuts.setfield
+local setchar = nuts.setchar
local traverse_id = nuts.traverse_id
local remove_node = nuts.remove
@@ -287,7 +289,7 @@ function checkers.missing(head)
insert_node_after(head,node,tonut(char))
head = remove_node(head,node,true)
elseif kind == "char" then
- setfield(node,"char",char)
+ setchar(node,char)
else
-- error
end
diff --git a/Master/texmf-dist/tex/context/base/font-chk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-chk.mkiv
index 4c8967532e8..4c8967532e8 100644
--- a/Master/texmf-dist/tex/context/base/font-chk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-chk.mkiv
diff --git a/Master/texmf-dist/tex/context/base/font-cid.lua b/Master/texmf-dist/tex/context/base/mkiv/font-cid.lua
index 0eaacdfbd54..0eaacdfbd54 100644
--- a/Master/texmf-dist/tex/context/base/font-cid.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-cid.lua
diff --git a/Master/texmf-dist/tex/context/base/font-col.lua b/Master/texmf-dist/tex/context/base/mkiv/font-col.lua
index cbc1953f45f..cf1b60bb93e 100644
--- a/Master/texmf-dist/tex/context/base/font-col.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-col.lua
@@ -19,14 +19,19 @@ local fastcopy = table.fastcopy
local nuts = nodes.nuts
local tonut = nuts.tonut
+
local getfont = nuts.getfont
local getchar = nuts.getchar
+
local setfield = nuts.setfield
+local setchar = nuts.setchar
+
local traverse_id = nuts.traverse_id
+local traverse_char = nuts.traverse_char
local settings_to_hash = utilities.parsers.settings_to_hash
-local trace_collecting = false trackers.register("fonts.collecting", function(v) trace_collecting = v end)
+local trace_collecting = false trackers.register("fonts.collecting", function(v) trace_collecting = v end)
local report_fonts = logs.reporter("fonts","collections")
@@ -252,24 +257,34 @@ end
function collections.process(head) -- this way we keep feature processing
local done = false
- for n in traverse_id(glyph_code,tonut(head)) do
- local v = vectors[getfont(n)]
- if v then
- local id = v[getchar(n)]
- if id then
- if type(id) == "table" then
- local newid, newchar = id[1], id[2]
- if trace_collecting then
- report_fonts("remapping character %C in font %a to character %C in font %a",getchar(n),getfont(n),newchar,newid)
- end
- setfield(n,"font",newid)
- setfield(n,"char",newchar)
- else
- if trace_collecting then
- report_fonts("remapping font %a to %a for character %C",getfont(n),id,getchar(n))
- end
- setfield(n,"font",id)
+ -- for n in traverse_id(glyph_code,tonut(head)) do
+ for n in traverse_char(tonut(head)) do
+ local font = getfont(n)
+ local vector = vectors[font]
+ if vector then
+ local char = getchar(n)
+ local vect = vector[char]
+ if not vect then
+ -- keep it
+ elseif type(vect) == "table" then
+ local newfont = vect[1]
+ local newchar = vect[2]
+ if trace_collecting then
+ report_fonts("remapping character %C in font %a to character %C in font %a%s",
+ char,font,newchar,newfont,not chardata[newfont][newchar] and " (missing)" or ""
+ )
+ end
+ setfield(n,"font",newfont)
+ setchar(n,newchar)
+ done = true
+ else
+ if trace_collecting then
+ report_fonts("remapping font %a to %a for character %C%s",
+ font,vect,char,not chardata[vect][char] and " (missing)" or ""
+ )
end
+ setfield(n,"font",vect)
+ done = true
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/font-col.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi
index bc8e8151ed1..bc8e8151ed1 100644
--- a/Master/texmf-dist/tex/context/base/font-col.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-con.lua b/Master/texmf-dist/tex/context/base/mkiv/font-con.lua
index 72fbb5c0dcc..b11853533b4 100644
--- a/Master/texmf-dist/tex/context/base/font-con.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-con.lua
@@ -63,8 +63,7 @@ constructors.keys = {
properties = {
encodingbytes = "number",
embedding = "number",
- cidinfo = {
- },
+ cidinfo = { },
format = "string",
fontname = "string",
fullname = "string",
@@ -170,8 +169,8 @@ constructors.setfactor()
function constructors.scaled(scaledpoints, designsize) -- handles designsize in sp as well
if scaledpoints < 0 then
+ local factor = constructors.factor
if designsize then
- local factor = constructors.factor
if designsize > factor then -- or just 1000 / when? mp?
return (- scaledpoints/1000) * designsize -- sp's
else
@@ -191,10 +190,9 @@ in the process; numbers are of course copies. Here 65536 equals 1pt. (Due to
excessive memory usage in CJK fonts, we no longer pass the boundingbox.)</p>
--ldx]]--
--- The scaler is only used for otf and afm and virtual fonts. If
--- a virtual font has italic correction make sure to set the
--- hasitalics flag. Some more flags will be added in
--- the future.
+-- The scaler is only used for otf and afm and virtual fonts. If a virtual font has italic
+-- correction make sure to set the hasitalics flag. Some more flags will be added in the
+-- future.
--[[ldx--
<p>The reason why the scaler was originally split, is that for a while we experimented
@@ -426,6 +424,7 @@ function constructors.scale(tfmdata,specification)
local vdelta = delta
--
target.designsize = parameters.designsize -- not really needed so it might become obsolete
+ target.units = units
target.units_per_em = units -- just a trigger for the backend
--
local direction = properties.direction or tfmdata.direction or 0 -- pointless, as we don't use omf fonts at all
@@ -562,26 +561,27 @@ function constructors.scale(tfmdata,specification)
target.mathparameters = nil -- nop
end
--
- local italickey = "italic"
- local useitalics = true -- something context
- --
- -- some context specific trickery (this will move to a plugin)
+ -- Here we support some context specific trickery (this might move to a plugin). During the
+ -- transition to opentype the engine had troubles with italics so we had some additional code
+ -- for fixing that. In node mode (text) we don't care much if italics gets passed because
+ -- the engine does nothign with them then.
--
if hasmath then
- -- the latest luatex can deal with it itself so we now disable this
- -- mechanism here
- --
- -- if properties.mathitalics then
- -- italickey = "italic_correction"
- -- if trace_defining then
- -- report_defining("math italics disabled for font %a, fullname %a, filename %a",name,fullname,filename)
- -- end
- -- end
- autoitalicamount = false -- new
- elseif properties.textitalics then
- italickey = "italic_correction"
- useitalics = false
- if properties.delaytextitalics then
+ local mathitalics = properties.mathitalics
+ if mathitalics == false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","math",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics = false
+ autoitalicamount = false
+ end
+ else
+ local textitalics = properties.textitalics
+ if textitalics == false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","text",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics = false
autoitalicamount = false
end
end
@@ -590,8 +590,7 @@ function constructors.scale(tfmdata,specification)
--
if trace_defining then
report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a",
- name,fullname,filename,hdelta,vdelta,
- hasmath and "enabled" or "disabled",useitalics and "enabled" or "disabled")
+ name,fullname,filename,hdelta,vdelta,hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
--
constructors.beforecopyingcharacters(target,tfmdata)
@@ -606,15 +605,15 @@ function constructors.scale(tfmdata,specification)
local c = changed[unicode]
if c then
description = descriptions[c] or descriptions[unicode] or character
- character = characters[c] or character
- index = description.index or c
+ character = characters[c] or character
+ index = description.index or c
else
description = descriptions[unicode] or character
- index = description.index or unicode
+ index = description.index or unicode
end
else
description = descriptions[unicode] or character
- index = description.index or unicode
+ index = description.index or unicode
end
local width = description.width
local height = description.height
@@ -682,6 +681,8 @@ function constructors.scale(tfmdata,specification)
if isunicode then
chr.unicode = isunicode
chr.tounicode = tounicode(isunicode)
+ -- in luatex > 0.85 we can do this:
+ -- chr.tounicode = isunicode
end
if hasquality then
-- we could move these calculations elsewhere (saves calculations)
@@ -699,24 +700,8 @@ function constructors.scale(tfmdata,specification)
end
end
--
- if autoitalicamount then
- local vi = description.italic
- if not vi then
- local vi = description.boundingbox[3] - description.width + autoitalicamount
- if vi > 0 then -- < 0 indicates no overshoot or a very small auto italic
- chr[italickey] = vi*hdelta
- end
- elseif vi ~= 0 then
- chr[italickey] = vi*hdelta
- end
- elseif hasitalics then
- local vi = description.italic
- if vi and vi ~= 0 then
- chr[italickey] = vi*hdelta
- end
- end
- -- to be tested
if hasmath then
+ --
-- todo, just operate on descriptions.math
local vn = character.next
if vn then
@@ -753,8 +738,13 @@ function constructors.scale(tfmdata,specification)
chr.horiz_variants = t
end
end
+ -- todo also check mathitalics (or that one can go away)
+ end
+ local vi = character.vert_italic
+ if vi and vi ~= 0 then
+ chr.vert_italic = vi*hdelta
end
- local va = character.top_accent
+ local va = character.accent
if va then
chr.top_accent = vdelta*va
end
@@ -777,6 +767,32 @@ function constructors.scale(tfmdata,specification)
chr.mathkern = kerns -- singular -> should be patched in luatex !
end
end
+ if hasitalics then
+ local vi = character.italic
+ if vi and vi ~= 0 then
+ chr.italic = vi*hdelta
+ end
+ end
+ elseif autoitalicamount then -- itlc feature
+ local vi = description.italic
+ if not vi then
+ local bb = description.boundingbox
+ if bb then
+ local vi = bb[3] - description.width + autoitalicamount
+ if vi > 0 then -- < 0 indicates no overshoot or a very small auto italic
+ chr.italic = vi*hdelta
+ end
+ else
+ -- report_defining("no boundingbox for character %C in font %a, fullname %a, filename %a",unicode,name,fullname,filename)
+ end
+ elseif vi ~= 0 then
+ chr.italic = vi*hdelta
+ end
+ elseif hasitalics then -- unlikely
+ local vi = character.italic
+ if vi and vi ~= 0 then
+ chr.italic = vi*hdelta
+ end
end
if haskerns then
local vk = character.kerns
@@ -843,6 +859,8 @@ function constructors.scale(tfmdata,specification)
targetcharacters[unicode] = chr
end
--
+ properties.setitalics = hasitalics -- for postprocessing
+ --
constructors.aftercopyingcharacters(target,tfmdata)
--
constructors.trytosharefont(target,tfmdata)
@@ -895,12 +913,21 @@ function constructors.finalize(tfmdata)
parameters.slantfactor = tfmdata.slant or 0
end
--
- if not parameters.designsize then
- parameters.designsize = tfmdata.designsize or (factors.pt * 10)
+ local designsize = parameters.designsize
+ if designsize then
+ parameters.minsize = tfmdata.minsize or designsize
+ parameters.maxsize = tfmdata.maxsize or designsize
+ else
+ designsize = factors.pt * 10
+ parameters.designsize = designsize
+ parameters.minsize = designsize
+ parameters.maxsize = designsize
end
+ parameters.minsize = tfmdata.minsize or parameters.designsize
+ parameters.maxsize = tfmdata.maxsize or parameters.designsize
--
if not parameters.units then
- parameters.units = tfmdata.units_per_em or 1000
+ parameters.units = tfmdata.units or tfmdata.units_per_em or 1000
end
--
if not tfmdata.descriptions then
@@ -976,6 +1003,7 @@ function constructors.finalize(tfmdata)
tfmdata.auto_protrude = nil
tfmdata.extend = nil
tfmdata.slant = nil
+ tfmdata.units = nil
tfmdata.units_per_em = nil
--
tfmdata.cache = nil
diff --git a/Master/texmf-dist/tex/context/base/font-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua
index 81db3165254..be233e5702d 100644
--- a/Master/texmf-dist/tex/context/base/font-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua
@@ -50,6 +50,8 @@ local implement = interfaces.implement
local fonts = fonts
local handlers = fonts.handlers
local otf = handlers.otf -- brrr
+local afm = handlers.afm -- brrr
+local tfm = handlers.tfm -- brrr
local names = fonts.names
local definers = fonts.definers
local specifiers = fonts.specifiers
@@ -59,6 +61,7 @@ local fontgoodies = fonts.goodies
local helpers = fonts.helpers
local hashes = fonts.hashes
local currentfont = font.current
+local definefont = font.define
local encodings = fonts.encodings
----- aglunicodes = encodings.agl.unicodes
@@ -74,6 +77,7 @@ local setattr = nuts.setattr
local getprop = nuts.getprop
local setprop = nuts.setprop
local getfont = nuts.getfont
+local setsubtype = nuts.setsubtype
local texgetattribute = tex.getattribute
local texsetattribute = tex.setattribute
@@ -297,17 +301,19 @@ local privatefeatures = {
}
local function checkedscript(tfmdata,resources,features)
- local latn = false
+ local latn = false
local script = false
- for g, list in next, resources.features do
- for f, scripts in next, list do
- if privatefeatures[f] then
- -- skip
- elseif scripts.dflt then
- script = "dflt"
- break
- elseif scripts.latn then
- latn = true
+ if resources.features then
+ for g, list in next, resources.features do
+ for f, scripts in next, list do
+ if privatefeatures[f] then
+ -- skip
+ elseif scripts.dflt then
+ script = "dflt"
+ break
+ elseif scripts.latn then
+ latn = true
+ end
end
end
end
@@ -735,13 +741,14 @@ local function registercontextfeature(mergedname,extraname,how)
for k, v in next, extra do
mergedfeatures[k] = v
end
- local number = #numbers + 1
+ local number = #numbers + 1 -- we somehow end up with steps of 2
mergedfeatures.number = number
numbers[number] = mergedname
merged[number] = how == "=" and 1 or 2 -- 1=replace, 2=combine
setups[mergedname] = mergedfeatures
return number -- contextnumber(mergedname)
else
+ report_features("unknown feature %a cannot be merged into %a using method %a",extraname,mergedname,how)
return 0
end
end
@@ -908,9 +915,9 @@ definers.registersplit('*',starred,"featureset")
-- sort of xetex mode, but without [] and / as we have file: and name: etc
local space = P(" ")
+local spaces = space^0
local separator = S(";,")
local equal = P("=")
-local spaces = space^0
local sometext = C((1-equal-space-separator)^1)
local truevalue = P("+") * spaces * sometext * Cc(true)
local falsevalue = P("-") * spaces * sometext * Cc(false)
@@ -927,8 +934,8 @@ definers.registersplit(":",colonized,"direct")
-- define (two steps)
-local space = P(" ")
-local spaces = space^0
+----- space = P(" ")
+----- spaces = space^0
local leftparent = (P"(")
local rightparent = (P")")
local value = C((leftparent * (1-rightparent)^0 * rightparent + (1-space))^1)
@@ -1189,7 +1196,7 @@ do -- else too many locals
-- characters[0x2008] = { width = characters[0x002E] and characters[0x002E].width or parameters.space } -- period
--
constructors.checkvirtualids(tfmdata) -- experiment, will become obsolete when slots can selfreference
- local id = font.define(tfmdata)
+ local id = definefont(tfmdata)
csnames[id] = specification.cs
tfmdata.properties.id = id
definers.register(tfmdata,id) -- to be sure, normally already done
@@ -1277,7 +1284,7 @@ do -- else too many locals
return tfmdata, fontdata[tfmdata]
else
constructors.checkvirtualids(tfmdata) -- experiment, will become obsolete when slots can selfreference
- local id = font.define(tfmdata)
+ local id = definefont(tfmdata)
tfmdata.properties.id = id
definers.register(tfmdata,id)
if cs then
@@ -1362,13 +1369,14 @@ function constructors.calculatescale(tfmdata,scaledpoints,relativeid,specificati
if special then
-- we also have available specification.textsize
local parameters = tfmdata.parameters
- local designsize = parameters.designsize
+ -- local designsize = parameters.designsize
if special == "ht" then
- local height = parameters.ascender * designsize / parameters.units
- scaledpoints = (scaledpoints/height) * designsize
+ local height = parameters.ascender / parameters.units
+ scaledpoints = scaledpoints / height
elseif special == "cp" then
- local height = (tfmdata.descriptions[utf.byte("X")].height or parameters.ascender) * designsize / parameters.units
- scaledpoints = (scaledpoints/height) * designsize
+ local glyph = tfmdata.descriptions[utfbyte("X")]
+ local height = (glyph and glyph.height or parameters.ascender) / parameters.units
+ scaledpoints = scaledpoints / height
end
end
end
@@ -1732,14 +1740,24 @@ end
luatex.registerstopactions(loggers.reportusedfeatures)
-statistics.register("fonts load time", function()
+-- maybe move this to font-log.lua:
+
+statistics.register("font engine", function()
local elapsed = statistics.elapsedseconds(fonts)
local nofshared = constructors.nofsharedfonts or 0
+ local nofloaded = constructors.noffontsloaded or 0
if nofshared > 0 then
- return format("%sfor %s fonts, %s shared in backend, %s common vectors, %s common hashes",
- elapsed,constructors.noffontsloaded,nofshared,constructors.nofsharedvectors,constructors.nofsharedhashes)
+ return format("otf %0.3f, afm %0.3f, tfm %0.3f, %s instances, %s shared in backend, %s common vectors, %s common hashes, load time %s",
+ otf.version,afm.version,tfm.version,nofloaded,
+ nofshared,constructors.nofsharedvectors,constructors.nofsharedhashes,
+ elapsed)
+ elseif nofloaded > 0 and elapsed then
+ return format("otf %0.3f, afm %0.3f, tfm %0.3f, %s instances, load time %s",
+ otf.version,afm.version,tfm.version,nofloaded,
+ elapsed)
else
- return elapsed
+ return format("otf %0.3f, afm %0.3f, tfm %0.3f",
+ otf.version,afm.version,tfm.version)
end
end)
@@ -1944,9 +1962,11 @@ dimenfactors.pct = nil
to scale virtual characters.</p>
--ldx]]--
+-- in versions > 0.82 0 is supported as equivalent of self
+
function constructors.checkvirtualids(tfmdata)
-- begin of experiment: we can use { "slot", 0, number } in virtual fonts
- local fonts = tfmdata.fonts
+ local fonts = tfmdata.fonts
local selfid = font.nextid()
if fonts and #fonts > 0 then
for i=1,#fonts do
@@ -2024,7 +2044,7 @@ do
implement {
name = "doifelsecurrentfonthasfeature",
- actions = { currentfonthasfeature, commands.doifelse },
+ actions = { constructors.currentfonthasfeature, commands.doifelse },
arguments = "string"
}
@@ -2190,32 +2210,79 @@ end
-- a fontkern plug:
-local copy_node = nuts.copy
-local kern = nuts.pool.register(nuts.pool.kern())
+do
-setattr(kern,attributes.private('fontkern'),1) -- we can have several, attributes are shared
+ local kerncodes = nodes.kerncodes
+ local copy_node = nuts.copy
+ local kern = nuts.pool.register(nuts.pool.kern())
-nodes.injections.installnewkern(function(k)
- local c = copy_node(kern)
- setfield(c,"kern",k)
- return c
-end)
+ setattr(kern,attributes.private('fontkern'),1)
+
+ nodes.injections.installnewkern(function(k)
+ local c = copy_node(kern)
+ setfield(c,"kern",k)
+ return c
+ end)
+
+ directives.register("fonts.injections.fontkern", function(v)
+ setsubtype(kern,v and kerncodes.fontkern or kerncodes.userkern)
+ end)
+
+end
+
+do
-directives.register("nodes.injections.fontkern", function(v) setfield(kern,"subtype",v and 0 or 1) end)
+ local report = logs.reporter("otf","variants")
+
+ local function replace(tfmdata,feature,value)
+ local characters = tfmdata.characters
+ local variants = tfmdata.resources.variants
+ if variants then
+ local t = { }
+ for k, v in sortedhash(variants) do
+ t[#t+1] = formatters["0x%X (%i)"](k,k)
+ end
+ value = tonumber(value) or 0xFE00 -- 917762
+ report("fontname : %s",tfmdata.properties.fontname)
+ report("available: % t",t)
+ local v = variants[value]
+ if v then
+ report("using : %X (%i)",value,value)
+ for k, v in next, v do
+ local c = characters[v]
+ if c then
+ characters[k] = c
+ end
+ end
+ else
+ report("unknown : %X (%i)",value,value)
+ end
+ end
+ end
+
+ registerotffeature {
+ name = 'variant',
+ description = 'unicode variant',
+ manipulators = {
+ base = replace,
+ node = replace,
+ }
+ }
+
+end
-- here (todo: closure)
-local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end)
+-- make a closure (200 limit):
------ otffeatures = constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
+local trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end)
local analyzers = fonts.analyzers
local methods = analyzers.methods
local unsetvalue = attributes.unsetvalue
-local traverse_by_id = nuts.traverse_id
+local traverse_id = nuts.traverse_id
local a_color = attributes.private('color')
local a_colormodel = attributes.private('colormodel')
@@ -2244,7 +2311,7 @@ local function markstates(head)
if head then
head = tonut(head)
local model = getattr(head,a_colormodel) or 1
- for glyph in traverse_by_id(glyph_code,head) do
+ for glyph in traverse_id(glyph_code,head) do
local a = getprop(glyph,a_state)
if a then
local name = colornames[a]
@@ -2294,7 +2361,7 @@ registerotffeature { -- adapts
}
function methods.nocolor(head,font,attr)
- for n in traverse_by_id(glyph_code,head) do
+ for n in traverse_id(glyph_code,head) do
if not font or getfont(n) == font then
setattr(n,a_color,unsetvalue)
end
diff --git a/Master/texmf-dist/tex/context/base/font-def.lua b/Master/texmf-dist/tex/context/base/mkiv/font-def.lua
index fdded3c369c..add42ee3828 100644
--- a/Master/texmf-dist/tex/context/base/font-def.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-def.lua
@@ -183,10 +183,11 @@ end
function resolvers.name(specification)
local resolve = fonts.names.resolve
if resolve then
- local resolved, sub = resolve(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
+ local resolved, sub, subindex = resolve(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
if resolved then
specification.resolved = resolved
specification.sub = sub
+ specification.subindex = subindex
local suffix = lower(suffixonly(resolved))
if fonts.formats[suffix] then
specification.forced = suffix
@@ -204,10 +205,11 @@ end
function resolvers.spec(specification)
local resolvespec = fonts.names.resolvespec
if resolvespec then
- local resolved, sub = resolvespec(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
+ local resolved, sub, subindex = resolvespec(specification.name,specification.sub,specification) -- we pass specification for overloaded versions
if resolved then
specification.resolved = resolved
specification.sub = sub
+ specification.subindex = subindex
specification.forced = lower(suffixonly(resolved))
specification.forcedname = resolved
specification.name = removesuffix(resolved)
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-dsp.lua b/Master/texmf-dist/tex/context/base/mkiv/font-dsp.lua
new file mode 100644
index 00000000000..14e816d5e4d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-dsp.lua
@@ -0,0 +1,2200 @@
+if not modules then modules = { } end modules ['font-dsp'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- many 0,0 entry/exit
+
+-- This loader went through a few iterations. First I made a ff compatible one so
+-- that we could do some basic checking. Also some verbosity was added (named
+-- glyphs). Eventually all that was dropped for a context friendly format, simply
+-- because keeping the different table models in sync too to much time. I have the
+-- old file somewhere. A positive side effect is that we get an (upto) much smaller
+-- smaller tma/tmc file. In the end the loader will be not much slower than the
+-- c based ff one.
+
+-- Being binary encoded, an opentype is rather compact. When expanded into a Lua table
+-- quite some memory can be used. This is very noticeable in the ff loader, which for
+-- a good reason uses a verbose format. However, when we use that data we create a couple
+-- of hashes. In the Lua loader we create these hashes directly, which save quite some
+-- memory.
+--
+-- We convert a font file only once and then cache it. Before creating the cached instance
+-- packing takes place: common tables get shared. After (re)loading and unpacking we then
+-- get a rather efficient internal representation of the font. In the new loader there is a
+-- pitfall. Because we use some common coverage magic we put a bit more information in
+-- the mark and cursive coverage tables than strickly needed: a reference to the coverage
+-- itself. This permits a fast lookup of the second glyph involved. In the marks we
+-- expand the class indicator to a class hash, in the cursive we use a placeholder that gets
+-- a self reference. This means that we cannot pack these subtables unless we add a unique
+-- id per entry (the same one per coverage) and that makes the tables larger. Because only a
+-- few fonts benefit from this, I decided to not do this. Experiments demonstrated that it
+-- only gives a few percent gain (on for instance husayni we can go from 845K to 828K
+-- bytecode). Better stay conceptually clean than messy compact.
+
+-- When we can reduce all basic lookups to one step we might safe a bit in the processing
+-- so then only chains are multiple.
+
+-- I used to flatten kerns here but that has been moved elsewhere because it polutes the code
+-- here and can be done fast afterwards. One can even wonder if it makes sense to do it as we
+-- pack anyway. In a similar fashion the unique placeholders in anchors in marks have been
+-- removed because packing doesn't save much there anyway.
+
+-- Although we have a bit more efficient tables in the cached files, the internals are still
+-- pretty similar. And although we have a slightly more direct coverage access the processing
+-- of node lists is not noticeable faster for latin texts, but for arabic we gain some 10%
+-- (and could probably gain a bit more).
+
+local next, type = next, type
+local bittest = bit32.btest
+local rshift = bit32.rshift
+local concat = table.concat
+local lower = string.lower
+local sub = string.sub
+local strip = string.strip
+local tohash = table.tohash
+local reversed = table.reversed
+
+local setmetatableindex = table.setmetatableindex
+local formatters = string.formatters
+local sortedkeys = table.sortedkeys
+local sortedhash = table.sortedhash
+
+local report = logs.reporter("otf reader")
+
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
+
+local setposition = streamreader.setposition
+local skipbytes = streamreader.skip
+local skipshort = streamreader.skipshort
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local readfword = readshort
+local readstring = streamreader.readstring
+local readtag = streamreader.readtag
+
+local gsubhandlers = { }
+local gposhandlers = { }
+
+local lookupidoffset = -1 -- will become 1 when we migrate (only -1 for comparign with old)
+
+local classes = {
+ "base",
+ "ligature",
+ "mark",
+ "component",
+}
+
+local gsubtypes = {
+ "single",
+ "multiple",
+ "alternate",
+ "ligature",
+ "context",
+ "chainedcontext",
+ "extension",
+ "reversechainedcontextsingle",
+}
+
+local gpostypes = {
+ "single",
+ "pair",
+ "cursive",
+ "marktobase",
+ "marktoligature",
+ "marktomark",
+ "context",
+ "chainedcontext",
+ "extension",
+}
+
+local chaindirections = {
+ context = 0,
+ chainedcontext = 1,
+ reversechainedcontextsingle = -1,
+}
+
+-- Traditionally we use these unique names (so that we can flatten the lookup list
+-- (we create subsets runtime) but I will adapt the old code to newer names.
+
+-- chainsub
+-- reversesub
+
+local lookupnames = {
+ gsub = {
+ single = "gsub_single",
+ multiple = "gsub_multiple",
+ alternate = "gsub_alternate",
+ ligature = "gsub_ligature",
+ context = "gsub_context",
+ chainedcontext = "gsub_contextchain",
+ reversechainedcontextsingle = "gsub_reversecontextchain", -- reversesub
+ },
+ gpos = {
+ single = "gpos_single",
+ pair = "gpos_pair",
+ cursive = "gpos_cursive",
+ marktobase = "gpos_mark2base",
+ marktoligature = "gpos_mark2ligature",
+ marktomark = "gpos_mark2mark",
+ context = "gpos_context",
+ chainedcontext = "gpos_contextchain",
+ }
+}
+
+-- keep this as reference:
+--
+-- local lookupbits = {
+-- [0x0001] = "righttoleft",
+-- [0x0002] = "ignorebaseglyphs",
+-- [0x0004] = "ignoreligatures",
+-- [0x0008] = "ignoremarks",
+-- [0x0010] = "usemarkfilteringset",
+-- [0x00E0] = "reserved",
+-- [0xFF00] = "markattachmenttype",
+-- }
+--
+-- local lookupstate = setmetatableindex(function(t,k)
+-- local v = { }
+-- for kk, vv in next, lookupbits do
+-- if bittest(k,kk) then
+-- v[vv] = true
+-- end
+-- end
+-- t[k] = v
+-- return v
+-- end)
+
+local lookupflags = setmetatableindex(function(t,k)
+ local v = {
+ bittest(k,0x0008) and true or false, -- ignoremarks
+ bittest(k,0x0004) and true or false, -- ignoreligatures
+ bittest(k,0x0002) and true or false, -- ignorebaseglyphs
+ bittest(k,0x0001) and true or false, -- r2l
+ }
+ t[k] = v
+ return v
+end)
+
+-- Beware: only use the simple variant if we don't set keys/values (otherwise too many entries). We
+-- could also have a variant that applies a function but there is no real benefit in this.
+
+local function readcoverage(f,offset,simple)
+ setposition(f,offset)
+ local coverageformat = readushort(f)
+ local coverage = { }
+ if coverageformat == 1 then
+ local nofcoverage = readushort(f)
+ if simple then
+ for i=1,nofcoverage do
+ coverage[i] = readushort(f)
+ end
+ else
+ for i=0,nofcoverage-1 do
+ coverage[readushort(f)] = i -- index in record
+ end
+ end
+ elseif coverageformat == 2 then
+ local nofranges = readushort(f)
+ local n = simple and 1 or 0 -- needs checking
+ for i=1,nofranges do
+ local firstindex = readushort(f)
+ local lastindex = readushort(f)
+ local coverindex = readushort(f)
+ if simple then
+ for i=firstindex,lastindex do
+ coverage[n] = i
+ n = n + 1
+ end
+ else
+ for i=firstindex,lastindex do
+ coverage[i] = n
+ n = n + 1
+ end
+ end
+ end
+ else
+ report("unknown coverage format %a ",coverageformat)
+ end
+ return coverage
+end
+
+local function readclassdef(f,offset)
+ setposition(f,offset)
+ local classdefformat = readushort(f)
+ local classdef = { }
+ if classdefformat == 1 then
+ local index = readushort(f)
+ local nofclassdef = readushort(f)
+ for i=1,nofclassdef do
+ classdef[index] = readushort(f) + 1
+ index = index + 1
+ end
+ elseif classdefformat == 2 then
+ local nofranges = readushort(f)
+ local n = 0
+ for i=1,nofranges do
+ local firstindex = readushort(f)
+ local lastindex = readushort(f)
+ local class = readushort(f) + 1
+ for i=firstindex,lastindex do
+ classdef[i] = class
+ end
+ end
+ else
+ report("unknown classdef format %a ",classdefformat)
+ end
+ return classdef
+end
+
+local function classtocoverage(defs)
+ if defs then
+ local list = { }
+ for index, class in next, defs do
+ local c = list[class]
+ if c then
+ c[#c+1] = index
+ else
+ list[class] = { index }
+ end
+ end
+ return list
+ end
+end
+
+-- extra readers
+
+local function readposition(f,format)
+ if format == 0 then
+ return nil
+ end
+ -- maybe fast test on 0x0001 + 0x0002 + 0x0004 + 0x0008 (profile first)
+ local x = bittest(format,0x0001) and readshort(f) or 0 -- placement
+ local y = bittest(format,0x0002) and readshort(f) or 0 -- placement
+ local h = bittest(format,0x0004) and readshort(f) or 0 -- advance
+ local v = bittest(format,0x0008) and readshort(f) or 0 -- advance
+ if x == 0 and y == 0 and h == 0 and v == 0 then
+ return nil
+ else
+ return { x, y, h, v }
+ end
+end
+
+local function readanchor(f,offset)
+ if not offset or offset == 0 then
+ return nil -- false
+ end
+ setposition(f,offset)
+ local format = readshort(f)
+ if format == 0 then
+ report("invalid anchor format %i @ position %i",format,offset)
+ return false
+ elseif format > 3 then
+ report("unsupported anchor format %i @ position %i",format,offset)
+ return false
+ end
+ return { readshort(f), readshort(f) }
+end
+
+-- common handlers: inlining can be faster but we cache anyway
+-- so we don't bother too much about speed here
+
+local function readfirst(f,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ return { readushort(f) }
+end
+
+local function readarray(f,offset,first)
+ if offset then
+ setposition(f,offset)
+ end
+ local n = readushort(f)
+ if first then
+ local t = { first }
+ for i=2,n do
+ t[i] = readushort(f)
+ end
+ return t, n
+ elseif n > 0 then
+ local t = { }
+ for i=1,n do
+ t[i] = readushort(f)
+ end
+ return t, n
+ end
+end
+
+local function readcoveragearray(f,offset,t,simple)
+ if not t then
+ return nil
+ end
+ local n = #t
+ if n == 0 then
+ return nil
+ end
+ for i=1,n do
+ t[i] = readcoverage(f,offset+t[i],simple)
+ end
+ return t
+end
+
+local function covered(subset,all)
+ local used, u
+ for i=1,#subset do
+ local s = subset[i]
+ if all[s] then
+ if used then
+ u = u + 1
+ used[u] = s
+ else
+ u = 1
+ used = { s }
+ end
+ end
+ end
+ return used
+end
+
+-- We generalize the chained lookups so that we can do with only one handler
+-- when processing them.
+
+local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local subclasssets = readarray(f)
+ local rules = { }
+ if subclasssets then
+ coverage = readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset = subclasssets[i]
+ if offset > 0 then
+ local firstcoverage = coverage[i]
+ local rulesoffset = tableoffset + offset
+ local subclassrules = readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset + subclassrules[rule])
+ local nofcurrent = readushort(f)
+ local noflookups = readushort(f)
+ local current = { { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i] = { readushort(f) }
+ end
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ rules[#rules+1] = {
+ current = current,
+ lookups = lookups
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format = "glyphs",
+ rules = rules,
+ }
+ elseif subtype == 2 then
+ -- We expand the classes as later on we do a pack over the whole table so then we get
+ -- back efficiency. This way we can also apply the coverage to the first current.
+ local coverage = readushort(f)
+ local currentclassdef = readushort(f)
+ local subclasssets = readarray(f)
+ local rules = { }
+ if subclasssets then
+ coverage = readcoverage(f,tableoffset + coverage)
+ currentclassdef = readclassdef(f,tableoffset + currentclassdef)
+ local currentclasses = classtocoverage(currentclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset = subclasssets[class]
+ if offset > 0 then
+ local firstcoverage = currentclasses[class]
+ if firstcoverage then
+ firstcoverage = covered(firstcoverage,coverage) -- bonus
+ if firstcoverage then
+ local rulesoffset = tableoffset + offset
+ local subclassrules = readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset + subclassrules[rule])
+ local nofcurrent = readushort(f)
+ local noflookups = readushort(f)
+ local current = { firstcoverage }
+ for i=2,nofcurrent do
+ current[i] = currentclasses[readushort(f) + 1]
+ end
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ rules[#rules+1] = {
+ current = current,
+ lookups = lookups
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("no coverage class")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format = "class",
+ rules = rules,
+ }
+ elseif subtype == 3 then
+ local current = readarray(f)
+ local noflookups = readushort(f)
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ current = readcoveragearray(f,tableoffset,current,true)
+ return {
+ format = "coverage",
+ rules = {
+ {
+ current = current,
+ lookups = lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"unchainedcontext",what)
+ end
+end
+
+-- todo: optimize for n=1 ?
+
+-- class index needs checking, probably no need for +1
+
+local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local subclasssets = readarray(f)
+ local rules = { }
+ if subclasssets then
+ coverage = readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset = subclasssets[i]
+ if offset > 0 then
+ local firstcoverage = coverage[i]
+ local rulesoffset = tableoffset + offset
+ local subclassrules = readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset + subclassrules[rule])
+ local nofbefore = readushort(f)
+ local before
+ if nofbefore > 0 then
+ before = { }
+ for i=1,nofbefore do
+ before[i] = { readushort(f) }
+ end
+ end
+ local nofcurrent = readushort(f)
+ local current = { { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i] = { readushort(f) }
+ end
+ local nofafter = readushort(f)
+ local after
+ if nofafter > 0 then
+ after = { }
+ for i=1,nofafter do
+ after[i] = { readushort(f) }
+ end
+ end
+ local noflookups = readushort(f)
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ rules[#rules+1] = {
+ before = before,
+ current = current,
+ after = after,
+ lookups = lookups,
+ }
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format = "glyphs",
+ rules = rules,
+ }
+ elseif subtype == 2 then
+ local coverage = readushort(f)
+ local beforeclassdef = readushort(f)
+ local currentclassdef = readushort(f)
+ local afterclassdef = readushort(f)
+ local subclasssets = readarray(f)
+ local rules = { }
+ if subclasssets then
+ local coverage = readcoverage(f,tableoffset + coverage)
+ local beforeclassdef = readclassdef(f,tableoffset + beforeclassdef)
+ local currentclassdef = readclassdef(f,tableoffset + currentclassdef)
+ local afterclassdef = readclassdef(f,tableoffset + afterclassdef)
+ local beforeclasses = classtocoverage(beforeclassdef,fontdata.glyphs)
+ local currentclasses = classtocoverage(currentclassdef,fontdata.glyphs)
+ local afterclasses = classtocoverage(afterclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset = subclasssets[class]
+ if offset > 0 then
+ local firstcoverage = currentclasses[class]
+ if firstcoverage then
+ firstcoverage = covered(firstcoverage,coverage) -- bonus
+ if firstcoverage then
+ local rulesoffset = tableoffset + offset
+ local subclassrules = readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ -- watch out, in context we first get the counts and then the arrays while
+ -- here we get them mixed
+ setposition(f,rulesoffset + subclassrules[rule])
+ local nofbefore = readushort(f)
+ local before
+ if nofbefore > 0 then
+ before = { }
+ for i=1,nofbefore do
+ before[i] = beforeclasses[readushort(f) + 1]
+ end
+ end
+ local nofcurrent = readushort(f)
+ local current = { firstcoverage }
+ for i=2,nofcurrent do
+ current[i] = currentclasses[readushort(f)+ 1]
+ end
+ local nofafter = readushort(f)
+ local after
+ if nofafter > 0 then
+ after = { }
+ for i=1,nofafter do
+ after[i] = afterclasses[readushort(f) + 1]
+ end
+ end
+ -- no sequence index here (so why in context as it saves nothing)
+ local noflookups = readushort(f)
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ rules[#rules+1] = {
+ before = before,
+ current = current,
+ after = after,
+ lookups = lookups,
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("class is not covered")
+ end
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
+ end
+ return {
+ format = "class",
+ rules = rules,
+ }
+ elseif subtype == 3 then
+ local before = readarray(f)
+ local current = readarray(f)
+ local after = readarray(f)
+ local noflookups = readushort(f)
+ local lookups = { }
+ for i=1,noflookups do
+ lookups[readushort(f)+1] = readushort(f) + 1
+ end
+ before = readcoveragearray(f,tableoffset,before,true)
+ current = readcoveragearray(f,tableoffset,current,true)
+ after = readcoveragearray(f,tableoffset,after,true)
+ return {
+ format = "coverage",
+ rules = {
+ {
+ before = before,
+ current = current,
+ after = after,
+ lookups = lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"chainedcontext",what)
+ end
+end
+
+local function extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,types,handlers,what)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local lookuptype = types[readushort(f)]
+ local faroffset = readulong(f)
+ local handler = handlers[lookuptype]
+ if handler then
+ -- maybe we can just pass one offset (or tableoffset first)
+ return handler(f,fontdata,lookupid,tableoffset + faroffset,0,glyphs,nofglyphs), lookuptype
+ else
+ report("no handler for lookuptype %a subtype %a in %s %s",lookuptype,subtype,what,"extension")
+ end
+ else
+ report("unsupported subtype %a in %s %s",subtype,what,"extension")
+ end
+end
+
+-- gsub handlers
+
+function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local delta = readshort(f) -- can be negative
+ local coverage = readcoverage(f,tableoffset+coverage) -- not simple as we need to set key/value anyway
+ for index in next, coverage do
+ local newindex = index + delta
+ if index > nofglyphs or newindex > nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index] = nil
+ else
+ coverage[index] = newindex
+ end
+ end
+ return {
+ coverage = coverage
+ }
+ elseif subtype == 2 then -- in streamreader a seek and fetch is faster than a temp table
+ local coverage = readushort(f)
+ local nofreplacements = readushort(f)
+ local replacements = { }
+ for i=1,nofreplacements do
+ replacements[i] = readushort(f)
+ end
+ local coverage = readcoverage(f,tableoffset + coverage) -- not simple as we need to set key/value anyway
+ for index, newindex in next, coverage do
+ newindex = newindex + 1
+ if index > nofglyphs or newindex > nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index] = nil
+ else
+ coverage[index] = replacements[newindex]
+ end
+ end
+ return {
+ coverage = coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"single")
+ end
+end
+
+local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local nofsequence = readushort(f)
+ local sequences = { }
+ for i=1,nofsequence do
+ sequences[i] = readushort(f)
+ end
+ for i=1,nofsequence do
+ setposition(f,tableoffset + sequences[i])
+ local n = readushort(f)
+ local s = { }
+ for i=1,n do
+ s[i] = readushort(f)
+ end
+ sequences[i] = s
+ end
+ local coverage = readcoverage(f,tableoffset + coverage)
+ for index, newindex in next, coverage do
+ newindex = newindex + 1
+ if index > nofglyphs or newindex > nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)",what,subtype,index,newindex,nofglyphs)
+ coverage[index] = nil
+ else
+ coverage[index] = sequences[newindex]
+ end
+ end
+ return {
+ coverage = coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,what)
+ end
+end
+
+function gsubhandlers.multiple(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"multiple")
+end
+
+function gsubhandlers.alternate(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"alternate")
+end
+
+function gsubhandlers.ligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local nofsets = readushort(f)
+ local ligatures = { }
+ for i=1,nofsets do
+ ligatures[i] = readushort(f)
+ end
+ for i=1,nofsets do
+ local offset = lookupoffset + offset + ligatures[i]
+ setposition(f,offset)
+ local n = readushort(f)
+ local l = { }
+ for i=1,n do
+ l[i] = offset + readushort(f)
+ end
+ ligatures[i] = l
+ end
+ local coverage = readcoverage(f,tableoffset + coverage)
+ for index, newindex in next, coverage do
+ local hash = { }
+ local ligatures = ligatures[newindex+1]
+ for i=1,#ligatures do
+ local offset = ligatures[i]
+ setposition(f,offset)
+ local lig = readushort(f)
+ local cnt = readushort(f)
+ local hsh = hash
+ for i=2,cnt do
+ local c = readushort(f)
+ local h = hsh[c]
+ if not h then
+ h = { }
+ hsh[c] = h
+ end
+ hsh = h
+ end
+ hsh.ligature = lig
+ end
+ coverage[index] = hash
+ end
+ return {
+ coverage = coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"ligature")
+ end
+end
+
+function gsubhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"), "context"
+end
+
+function gsubhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"), "chainedcontext"
+end
+
+function gsubhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gsubtypes,gsubhandlers,"substitution")
+end
+
+function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then -- NEEDS CHECKING
+ local current = readfirst(f)
+ local before = readarray(f)
+ local after = readarray(f)
+ local replacements = readarray(f)
+ current = readcoveragearray(f,tableoffset,current,true)
+ before = readcoveragearray(f,tableoffset,before,true)
+ after = readcoveragearray(f,tableoffset,after,true)
+ return {
+ coverage = {
+ format = "reversecoverage", -- reversesub
+ before = before,
+ current = current,
+ after = after,
+ replacements = replacements,
+ }
+ }, "reversechainedcontextsingle"
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
+ end
+end
+
+-- gpos handlers
+
+local function readpairsets(f,tableoffset,sets,format1,format2)
+ local done = { }
+ for i=1,#sets do
+ local offset = sets[i]
+ local reused = done[offset]
+ if not reused then
+ setposition(f,tableoffset + offset)
+ local n = readushort(f)
+ reused = { }
+ for i=1,n do
+ reused[i] = {
+ readushort(f), -- second glyph id
+ readposition(f,format1),
+ readposition(f,format2)
+ }
+ end
+ done[offset] = reused
+ end
+ sets[i] = reused
+ end
+ return sets
+end
+
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ local classlist1 = { }
+ for i=1,nofclasses1 do
+ local classlist2 = { }
+ classlist1[i] = classlist2
+ for j=1,nofclasses2 do
+ local one = readposition(f,format1)
+ local two = readposition(f,format2)
+ if one or two then
+ classlist2[j] = { one, two }
+ else
+ classlist2[j] = false
+ end
+ end
+ end
+ return classlist1
+end
+
+-- no real gain in kerns as we pack
+
+function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local format = readushort(f)
+ local value = readposition(f,format)
+ local coverage = readcoverage(f,tableoffset+coverage)
+ for index, newindex in next, coverage do
+ coverage[index] = value
+ end
+ return {
+ format = "pair",
+ coverage = coverage
+ }
+ elseif subtype == 2 then
+ local coverage = readushort(f)
+ local format = readushort(f)
+ local values = { }
+ local nofvalues = readushort(f)
+ for i=1,nofvalues do
+ values[i] = readposition(f,format)
+ end
+ local coverage = readcoverage(f,tableoffset+coverage)
+ for index, newindex in next, coverage do
+ coverage[index] = values[newindex+1]
+ end
+ return {
+ format = "pair",
+ coverage = coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"single")
+ end
+end
+
+-- this needs checking! if no second pair then another advance over the list
+
+-- ValueFormat1 applies to the ValueRecord of the first glyph in each pair. ValueRecords for all first glyphs must use ValueFormat1. If ValueFormat1 is set to zero (0), the corresponding glyph has no ValueRecord and, therefore, should not be repositioned.
+-- ValueFormat2 applies to the ValueRecord of the second glyph in each pair. ValueRecords for all second glyphs must use ValueFormat2. If ValueFormat2 is set to null, then the second glyph of the pair is the “next” glyph for which a lookup should be performed.
+
+-- !!!!! this needs checking: when both false, we have no hit so then we might need to fall through
+
+function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = readushort(f)
+ local format1 = readushort(f)
+ local format2 = readushort(f)
+ local sets = readarray(f)
+ sets = readpairsets(f,tableoffset,sets,format1,format2)
+ coverage = readcoverage(f,tableoffset + coverage)
+ for index, newindex in next, coverage do
+ local set = sets[newindex+1]
+ local hash = { }
+ for i=1,#set do
+ local value = set[i]
+ if value then
+ local other = value[1]
+ local first = value[2]
+ local second = value[3]
+ if first or second then
+ hash[other] = { first, second } -- needs checking
+ else
+ hash[other] = nil
+ end
+ end
+ end
+ coverage[index] = hash
+ end
+ return {
+ format = "pair",
+ coverage = coverage
+ }
+ elseif subtype == 2 then
+ local coverage = readushort(f)
+ local format1 = readushort(f)
+ local format2 = readushort(f)
+ local classdef1 = readushort(f)
+ local classdef2 = readushort(f)
+ local nofclasses1 = readushort(f) -- incl class 0
+ local nofclasses2 = readushort(f) -- incl class 0
+ local classlist = readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ coverage = readcoverage(f,tableoffset+coverage)
+ classdef1 = readclassdef(f,tableoffset+classdef1)
+ classdef2 = readclassdef(f,tableoffset+classdef2)
+ local usedcoverage = { }
+ for g1, c1 in next, classdef1 do
+ if coverage[g1] then
+ local l1 = classlist[c1]
+ if l1 then
+ local hash = { }
+ for paired, class in next, classdef2 do
+ local offsets = l1[class]
+ if offsets then
+ local first = offsets[1]
+ local second = offsets[2]
+ if first or second then
+ hash[paired] = { first, second }
+ else
+ -- upto the next lookup for this combination
+ end
+ end
+ end
+ usedcoverage[g1] = hash
+ end
+ end
+ end
+ return {
+ format = "pair",
+ coverage = usedcoverage
+ }
+ elseif subtype == 3 then
+ report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"pair")
+ end
+end
+
+function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ local coverage = tableoffset + readushort(f)
+ local nofrecords = readushort(f)
+ local records = { }
+ for i=1,nofrecords do
+ local entry = readushort(f)
+ local exit = readushort(f)
+ records[i] = {
+ entry = entry ~= 0 and (tableoffset + entry) or false,
+ exit = exit ~= 0 and (tableoffset + exit ) or false,
+ }
+ end
+ coverage = readcoverage(f,coverage)
+ for i=1,nofrecords do
+ local r = records[i]
+ records[i] = {
+ 1, -- will become hash after loading (must be unique per lookup when packed)
+ readanchor(f,r.entry) or nil,
+ readanchor(f,r.exit ) or nil,
+ }
+ end
+ for index, newindex in next, coverage do
+ coverage[index] = records[newindex+1]
+ end
+ return {
+ coverage = coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"cursive")
+ end
+end
+
+local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
+ local tableoffset = lookupoffset + offset
+ setposition(f,tableoffset)
+ local subtype = readushort(f)
+ if subtype == 1 then
+ -- we are one based, not zero
+ local markcoverage = tableoffset + readushort(f)
+ local basecoverage = tableoffset + readushort(f)
+ local nofclasses = readushort(f)
+ local markoffset = tableoffset + readushort(f)
+ local baseoffset = tableoffset + readushort(f)
+ --
+ local markcoverage = readcoverage(f,markcoverage)
+ local basecoverage = readcoverage(f,basecoverage,true) -- TO BE CHECKED: true
+ --
+ setposition(f,markoffset)
+ local markclasses = { }
+ local nofmarkclasses = readushort(f)
+ --
+ local lastanchor = fontdata.lastanchor or 0
+ local usedanchors = { }
+ --
+-- local placeholder = (fontdata.markcount or 0) + 1
+-- fontdata.markcount = placeholder
+-- placeholder = "m" .. placeholder
+ --
+ for i=1,nofmarkclasses do
+ local class = readushort(f) + 1
+ local offset = readushort(f)
+ if offset == 0 then
+ markclasses[i] = false
+ else
+-- markclasses[i] = { placeholder, class, markoffset + offset }
+ markclasses[i] = { class, markoffset + offset }
+ end
+ usedanchors[class] = true
+ end
+ for i=1,nofmarkclasses do
+ local mc = markclasses[i]
+ if mc then
+-- mc[3] = readanchor(f,mc[3])
+ mc[2] = readanchor(f,mc[2])
+ end
+ end
+ --
+ setposition(f,baseoffset)
+ local nofbaserecords = readushort(f)
+ local baserecords = { }
+ --
+ if ligature then
+ -- 3 components
+ -- 1 : class .. nofclasses -- NULL when empty
+ -- 2 : class .. nofclasses -- NULL when empty
+ -- 3 : class .. nofclasses -- NULL when empty
+ for i=1,nofbaserecords do -- here i is the class
+ local offset = readushort(f)
+ if offset == 0 then
+ baserecords[i] = false
+ else
+ baserecords[i] = baseoffset + offset
+ end
+ end
+ for i=1,nofbaserecords do
+ local recordoffset = baserecords[i]
+ if recordoffset then
+ setposition(f,recordoffset)
+ local nofcomponents = readushort(f)
+ local components = { }
+ for i=1,nofcomponents do
+ local classes = { }
+ for i=1,nofclasses do
+ local offset = readushort(f)
+ if offset ~= 0 then
+ classes[i] = recordoffset + offset
+ else
+ classes[i] = false
+ end
+ end
+ components[i] = classes
+ end
+ baserecords[i] = components
+ end
+ end
+ local baseclasses = { } -- setmetatableindex("table")
+ for i=1,nofclasses do
+ baseclasses[i] = { }
+ end
+ for i=1,nofbaserecords do
+ local components = baserecords[i]
+ local b = basecoverage[i]
+ if components then
+ for c=1,#components do
+ local classes = components[c]
+ if classes then
+ for i=1,nofclasses do
+ local anchor = readanchor(f,classes[i])
+ local bclass = baseclasses[i]
+ local bentry = bclass[b]
+ if bentry then
+ bentry[c] = anchor
+ else
+ bclass[b]= { [c] = anchor }
+ end
+ end
+ end
+ components[i] = classes
+ end
+ end
+ end
+ for index, newindex in next, markcoverage do
+ markcoverage[index] = markclasses[newindex+1] or nil
+ end
+ return {
+ format = "ligature",
+ baseclasses = baseclasses,
+ coverage = markcoverage,
+ }
+ else
+ for i=1,nofbaserecords do
+ local r = { }
+ for j=1,nofclasses do
+ local offset = readushort(f)
+ if offset == 0 then
+ r[j] = false
+ else
+ r[j] = baseoffset + offset
+ end
+ end
+ baserecords[i] = r
+ end
+ local baseclasses = { } -- setmetatableindex("table")
+ for i=1,nofclasses do
+ baseclasses[i] = { }
+ end
+ for i=1,nofbaserecords do
+ local r = baserecords[i]
+ local b = basecoverage[i]
+ for j=1,nofclasses do
+ baseclasses[j][b] = readanchor(f,r[j])
+ end
+ end
+ for index, newindex in next, markcoverage do
+ markcoverage[index] = markclasses[newindex+1] or nil
+ end
+ -- we could actually already calculate the displacement if we want
+ return {
+ format = "base",
+ baseclasses = baseclasses,
+ coverage = markcoverage,
+ }
+ end
+ else
+ report("unsupported subtype %a in",subtype)
+ end
+
+end
+
+function gposhandlers.marktobase(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+
+function gposhandlers.marktoligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,true)
+end
+
+function gposhandlers.marktomark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+
+function gposhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"), "context"
+end
+
+function gposhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"), "chainedcontext"
+end
+
+function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gpostypes,gposhandlers,"positioning")
+end
+
+-- main loader
+
+do
+
+ local plugins = { }
+
+ function plugins.size(f,fontdata,tableoffset,parameters)
+ if not fontdata.designsize then
+ setposition(f,tableoffset+parameters)
+ local designsize = readushort(f)
+ if designsize > 0 then
+ fontdata.designsize = designsize
+ skipshort(f,2)
+ fontdata.minsize = readushort(f)
+ fontdata.maxsize = readushort(f)
+ end
+ end
+ end
+
+ -- feature order needs checking ... as we loop over a hash
+
+ local function reorderfeatures(fontdata,scripts,features)
+ local scriptlangs = { }
+ local featurehash = { }
+ local featureorder = { }
+ for script, languages in next, scripts do
+ for language, record in next, languages do
+ local hash = { }
+ local list = record.featureindices
+ for k=1,#list do
+ local index = list[k]
+ local feature = features[index]
+ local lookups = feature.lookups
+ local tag = feature.tag
+ if tag then
+ hash[tag] = true
+ end
+ if lookups then
+ for i=1,#lookups do
+ local lookup = lookups[i]
+ local o = featureorder[lookup]
+ if o then
+ local okay = true
+ for i=1,#o do
+ if o[i] == tag then
+ okay = false
+ break
+ end
+ end
+ if okay then
+ o[#o+1] = tag
+ end
+ else
+ featureorder[lookup] = { tag }
+ end
+ local f = featurehash[lookup]
+ if f then
+ local h = f[tag]
+ if h then
+ local s = h[script]
+ if s then
+ s[language] = true
+ else
+ h[script] = { [language] = true }
+ end
+ else
+ f[tag] = { [script] = { [language] = true } }
+ end
+ else
+ featurehash[lookup] = { [tag] = { [script] = { [language] = true } } }
+ end
+ --
+ local h = scriptlangs[tag]
+ if h then
+ local s = h[script]
+ if s then
+ s[language] = true
+ else
+ h[script] = { [language] = true }
+ end
+ else
+ scriptlangs[tag] = { [script] = { [language] = true } }
+ end
+ end
+ end
+ end
+ end
+ end
+ return scriptlangs, featurehash, featureorder
+ end
+
+ local function readscriplan(f,fontdata,scriptoffset)
+ setposition(f,scriptoffset)
+ local nofscripts = readushort(f)
+ local scripts = { }
+ for i=1,nofscripts do
+ scripts[readtag(f)] = scriptoffset + readushort(f)
+ end
+ -- script list -> language system info
+ local languagesystems = setmetatableindex("table")
+ for script, offset in next, scripts do
+ setposition(f,offset)
+ local defaultoffset = readushort(f)
+ local noflanguages = readushort(f)
+ local languages = { }
+ if defaultoffset > 0 then
+ languages.dflt = languagesystems[offset + defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language = readtag(f)
+ local offset = offset + readushort(f)
+ languages[language] = languagesystems[offset]
+ end
+ scripts[script] = languages
+ end
+ -- script list -> language system info -> feature list
+ for offset, usedfeatures in next, languagesystems do
+ if offset > 0 then
+ setposition(f,offset)
+ local featureindices = { }
+ usedfeatures.featureindices = featureindices
+ usedfeatures.lookuporder = readushort(f) -- reserved, not used (yet)
+ usedfeatures.requiredindex = readushort(f) -- relates to required (can be 0xFFFF)
+ local noffeatures = readushort(f)
+ for i=1,noffeatures do
+ featureindices[i] = readushort(f) + 1
+ end
+ end
+ end
+ return scripts
+ end
+
+ local function readfeatures(f,fontdata,featureoffset)
+ setposition(f,featureoffset)
+ local features = { }
+ local noffeatures = readushort(f)
+ for i=1,noffeatures do
+ -- also shared?
+ features[i] = {
+ tag = readtag(f),
+ offset = readushort(f)
+ }
+ end
+ --
+ for i=1,noffeatures do
+ local feature = features[i]
+ local offset = featureoffset+feature.offset
+ setposition(f,offset)
+ local parameters = readushort(f) -- feature.parameters
+ local noflookups = readushort(f)
+ if noflookups > 0 then
+ local lookups = { }
+ feature.lookups = lookups
+ for j=1,noflookups do
+ lookups[j] = readushort(f) + 1
+ end
+ end
+ if parameters > 0 then
+ feature.parameters = parameters
+ local plugin = plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,offset,parameters)
+ end
+ end
+ end
+ return features
+ end
+
+ local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,lookupoffset)
+ local lookups = { }
+ local noflookups = readushort(f)
+ for i=1,noflookups do
+ lookups[i] = readushort(f)
+ end
+ for lookupid=1,noflookups do
+ local index = lookups[lookupid]
+ setposition(f,lookupoffset+index)
+ local subtables = { }
+ local typebits = readushort(f)
+ local flagbits = readushort(f)
+ local lookuptype = lookuptypes[typebits]
+ local lookupflags = lookupflags[flagbits]
+ local nofsubtables = readushort(f)
+ for j=1,nofsubtables do
+ local offset = readushort(f)
+ subtables[j] = offset + index -- we can probably put lookupoffset here
+ end
+ -- which one wins?
+ local markclass = bittest(flagbits,0x0010) -- usemarkfilteringset
+ if markclass then
+ markclass = readushort(f) -- + 1
+ end
+ local markset = rshift(flagbits,8)
+ if markset > 0 then
+ markclass = markset -- + 1
+ end
+ lookups[lookupid] = {
+ type = lookuptype,
+ -- chain = chaindirections[lookuptype] or nil,
+ flags = lookupflags,
+ name = lookupid,
+ subtables = subtables,
+ markclass = markclass,
+ features = featurehash[lookupid], -- not if extension
+ order = featureorder[lookupid],
+ }
+ end
+ return lookups
+ end
+
+ local function readscriptoffsets(f,fontdata,tableoffset)
+ if not tableoffset then
+ return
+ end
+ setposition(f,tableoffset)
+ local version = readulong(f)
+ if version ~= 0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ --
+ return tableoffset + readushort(f), tableoffset + readushort(f), tableoffset + readushort(f)
+ end
+
+ local f_lookupname = formatters["%s_%s_%s"]
+
+ local function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+
+ local sequences = fontdata.sequences or { }
+ local sublookuplist = fontdata.sublookups or { }
+ fontdata.sequences = sequences
+ fontdata.sublookups = sublookuplist
+ local nofsublookups = #sublookuplist
+ local nofsequences = #sequences -- 0
+ local lastsublookup = nofsublookups
+ local lastsequence = nofsequences
+ local lookupnames = lookupnames[what]
+ local sublookuphash = { }
+ local sublookupcheck = { }
+ local glyphs = fontdata.glyphs
+ local nofglyphs = fontdata.nofglyphs or #glyphs
+ local noflookups = #lookups
+ local lookupprefix = sub(what,2,2) -- g[s|p][ub|os]
+ --
+ for lookupid=1,noflookups do
+ local lookup = lookups[lookupid]
+ local lookuptype = lookup.type
+ local subtables = lookup.subtables
+ local features = lookup.features
+ local handler = lookuphandlers[lookuptype]
+ if handler then
+ local nofsubtables = #subtables
+ local order = lookup.order
+ local flags = lookup.flags
+ -- this is expected in th efont handler (faster checking)
+ if flags[1] then flags[1] = "mark" end
+ if flags[2] then flags[2] = "ligature" end
+ if flags[3] then flags[3] = "base" end
+ --
+ local markclass = lookup.markclass
+ -- local chain = lookup.chain
+ if nofsubtables > 0 then
+ local steps = { }
+ local nofsteps = 0
+ local oldtype = nil
+ for s=1,nofsubtables do
+ local step, lt = handler(f,fontdata,lookupid,lookupoffset,subtables[s],glyphs,nofglyphs)
+ if lt then
+ lookuptype = lt
+ if oldtype and lt ~= oldtype then
+ report("messy %s lookup type %a and %a",what,lookuptype,oldtype)
+ end
+ oldtype = lookuptype
+ end
+ if not step then
+ report("unsupported %s lookup type %a",what,lookuptype)
+ else
+ nofsteps = nofsteps + 1
+ steps[nofsteps] = step
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ local before = rule.before
+ local current = rule.current
+ local after = rule.after
+ if before then
+ for i=1,#before do
+ before[i] = tohash(before[i])
+ end
+ -- as with original ctx ff loader
+ rule.before = reversed(before)
+ end
+ if current then
+ for i=1,#current do
+ current[i] = tohash(current[i])
+ end
+ end
+ if after then
+ for i=1,#after do
+ after[i] = tohash(after[i])
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofsteps ~= nofsubtables then
+ report("bogus subtables removed in %s lookup type %a",what,lookuptype)
+ end
+ lookuptype = lookupnames[lookuptype] or lookuptype
+ if features then
+ nofsequences = nofsequences + 1
+ -- report("registering %i as sequence step %i",lookupid,nofsequences)
+ local l = {
+ index = nofsequences,
+ name = f_lookupname(lookupprefix,"s",lookupid+lookupidoffset),
+ steps = steps,
+ nofsteps = nofsteps,
+ type = lookuptype,
+ markclass = markclass or nil,
+ flags = flags,
+ -- chain = chain,
+ order = order,
+ features = features,
+ }
+ sequences[nofsequences] = l
+ lookup.done = l
+ else
+ nofsublookups = nofsublookups + 1
+ -- report("registering %i as sublookup %i",lookupid,nofsublookups)
+ local l = {
+ index = nofsublookups,
+ name = f_lookupname(lookupprefix,"l",lookupid+lookupidoffset),
+ steps = steps,
+ nofsteps = nofsteps,
+ type = lookuptype,
+ markclass = markclass or nil,
+ flags = flags,
+ -- chain = chain,
+ }
+ sublookuplist[nofsublookups] = l
+ sublookuphash[lookupid] = nofsublookups
+ sublookupcheck[lookupid] = 0
+ lookup.done = l
+ end
+ else
+ report("no subtables for lookup %a",lookupid)
+ end
+ else
+ report("no handler for lookup %a with type %a",lookupid,lookuptype)
+ end
+ end
+
+ -- When we have a context, we have sublookups that resolve into lookups for which we need to
+ -- know the type. We split the main lookuptable in two parts: sequences (the main lookups)
+ -- and subtable lookups (simple specs with no features). We could keep them merged and might do
+ -- that once we only use this loader. Then we can also move the simple specs into the sequence.
+ -- After all, we pack afterwards.
+
+ local reported = { }
+
+ for i=lastsequence+1,nofsequences do
+ local sequence = sequences[i]
+ local steps = sequence.steps
+ for i=1,#steps do
+ local step = steps[i]
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ local rlookups = rule.lookups
+ if not rlookups then
+ local name = sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,"no")
+ reported[name] = true
+ end
+ elseif not next(rlookups) then
+ local name = sequence.name
+ if not reported[name] then
+ -- can be ok as it aborts a chain sequence
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,"empty")
+ reported[name] = true
+ end
+ rule.lookups = nil
+ else
+ for index, lookupid in sortedhash(rlookups) do -- nicer
+ local h = sublookuphash[lookupid]
+ if not h then
+ -- here we have a lookup that is used independent as well
+ -- as in another one
+ nofsublookups = nofsublookups + 1
+ -- report("registering %i as sublookup %i",lookupid,nofsublookups)
+ local d = lookups[lookupid].done
+ h = {
+ index = nofsublookups, -- handy for tracing
+ name = f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived = true, -- handy for tracing
+ steps = d.steps,
+ nofsteps = d.nofsteps,
+ type = d.lookuptype,
+ markclass = d.markclass or nil,
+ flags = d.flags,
+ -- chain = d.chain,
+ }
+ sublookuplist[nofsublookups] = h
+ sublookuphash[lookupid] = nofsublookups
+ sublookupcheck[lookupid] = 1
+ else
+ sublookupcheck[lookupid] = sublookupcheck[lookupid] + 1
+ end
+ rlookups[index] = h
+ end
+ end
+ end
+ end
+ end
+ end
+
+ for i, n in sortedhash(sublookupcheck) do
+ local l = lookups[i]
+ local t = l.type
+ if n == 0 and t ~= "extension" then
+ local d = l.done
+ report("%s lookup %s of type %a is not used",what,d and d.name or l.name,t)
+ -- inspect(l)
+ end
+ end
+
+ end
+
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local datatable = fontdata.tables[what]
+ if not datatable then
+ return
+ end
+ local tableoffset = datatable.offset
+ if not tableoffset then
+ return
+ end
+ local scriptoffset, featureoffset, lookupoffset = readscriptoffsets(f,fontdata,tableoffset)
+ if not scriptoffset then
+ return
+ end
+ --
+ local scripts = readscriplan(f,fontdata,scriptoffset)
+ local features = readfeatures(f,fontdata,featureoffset)
+ --
+ local scriptlangs, featurehash, featureorder = reorderfeatures(fontdata,scripts,features)
+ --
+ if fontdata.features then
+ fontdata.features[what] = scriptlangs
+ else
+ fontdata.features = { [what] = scriptlangs }
+ end
+ --
+ if not lookupstoo then
+ return
+ end
+ --
+ local lookups = readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ --
+ if lookups then
+ resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ end
+ end
+
+ local function checkkerns(f,fontdata,specification)
+ local datatable = fontdata.tables.kern
+ if not datatable then
+ return -- no kerns
+ end
+ local features = fontdata.features
+ local gposfeatures = features and features.gpos
+ local name
+ if not gposfeatures or not gposfeatures.kern then
+ name = "kern"
+ elseif specification.globalkerns then
+ name = "globalkern"
+ else
+ report("ignoring global kern table using gpos kern feature")
+ return
+ end
+ report("adding global kern table as gpos feature %a",name)
+ setposition(f,datatable.offset)
+ local version = readushort(f)
+ local noftables = readushort(f)
+ local kerns = setmetatableindex("table")
+ for i=1,noftables do
+ local version = readushort(f)
+ local length = readushort(f)
+ local coverage = readushort(f)
+ -- bit 8-15 of coverage: format 0 or 2
+ local format = bit32.rshift(coverage,8) -- is this ok?
+ if format == 0 then
+ local nofpairs = readushort(f)
+ local searchrange = readushort(f)
+ local entryselector = readushort(f)
+ local rangeshift = readushort(f)
+ for i=1,nofpairs do
+ kerns[readushort(f)][readushort(f)] = readfword(f)
+ end
+ elseif format == 2 then
+ -- apple specific so let's ignore it
+ else
+ -- not supported by ms
+ end
+ end
+ local feature = { dflt = { dflt = true } }
+ if not features then
+ fontdata.features = { gpos = { [name] = feature } }
+ elseif not gposfeatures then
+ fontdata.features.gpos = { [name] = feature }
+ else
+ gposfeatures[name] = feature
+ end
+ local sequences = fontdata.sequences
+ if not sequences then
+ sequences = { }
+ fontdata.sequences = sequences
+ end
+ local nofsequences = #sequences + 1
+ sequences[nofsequences] = {
+ index = nofsequences,
+ name = name,
+ steps = {
+ {
+ coverage = kerns,
+ format = "kern",
+ },
+ },
+ nofsteps = 1,
+ type = "gpos_pair",
+ -- type = "gpos_single", -- maybe better
+ flags = { false, false, false, false },
+ order = { name },
+ features = { [name] = feature },
+ }
+ end
+
+ function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub",gsubtypes,gsubhandlers,specification.lookups)
+ end
+ end
+
+ function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos",gpostypes,gposhandlers,specification.lookups)
+ if specification.lookups then
+ checkkerns(f,fontdata,specification)
+ end
+ end
+ end
+
+end
+
+function readers.gdef(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable = fontdata.tables.gdef
+ if datatable then
+ local tableoffset = datatable.offset
+ setposition(f,tableoffset)
+ local version = readulong(f)
+ local classoffset = tableoffset + readushort(f)
+ local attachmentoffset = tableoffset + readushort(f) -- used for bitmaps
+ local ligaturecarets = tableoffset + readushort(f) -- used in editors (maybe nice for tracing)
+ local markclassoffset = tableoffset + readushort(f)
+ local marksetsoffset = version == 0x00010002 and (tableoffset + readushort(f))
+ local glyphs = fontdata.glyphs
+ local marks = { }
+ local markclasses = setmetatableindex("table")
+ local marksets = setmetatableindex("table")
+ fontdata.marks = marks
+ fontdata.markclasses = markclasses
+ fontdata.marksets = marksets
+ -- class definitions
+ setposition(f,classoffset)
+ local classformat = readushort(f)
+ if classformat == 1 then
+ local firstindex = readushort(f)
+ local lastindex = firstindex + readushort(f) - 1
+ for index=firstindex,lastindex do
+ local class = classes[readushort(f)]
+ if class == "mark" then
+ marks[index] = true
+ end
+ glyphs[index].class = class
+ end
+ elseif classformat == 2 then
+ local nofranges = readushort(f)
+ for i=1,nofranges do
+ local firstindex = readushort(f)
+ local lastindex = readushort(f)
+ local class = classes[readushort(f)]
+ if class then
+ for index=firstindex,lastindex do
+ glyphs[index].class = class
+ if class == "mark" then
+ marks[index] = true
+ end
+ end
+ end
+ end
+ end
+ -- mark classes
+ setposition(f,markclassoffset)
+ local classformat = readushort(f)
+ if classformat == 1 then
+ local firstindex = readushort(f)
+ local lastindex = firstindex + readushort(f) - 1
+ for index=firstindex,lastindex do
+ markclasses[readushort(f)][index] = true
+ end
+ elseif classformat == 2 then
+ local nofranges = readushort(f)
+ for i=1,nofranges do
+ local firstindex = readushort(f)
+ local lastindex = readushort(f)
+ local class = markclasses[readushort(f)]
+ for index=firstindex,lastindex do
+ class[index] = true
+ end
+ end
+ end
+ -- mark sets : todo: just make the same as class sets above
+ if marksetsoffset then
+ setposition(f,marksetsoffset)
+ local format = readushort(f)
+ if format == 1 then
+ local nofsets = readushort(f)
+ local sets = { }
+ for i=1,nofsets do
+ sets[i] = readulong(f)
+ end
+ -- somehow this fails on e.g. notosansethiopic-bold.ttf
+ for i=1,nofsets do
+ local offset = sets[i]
+ if offset ~= 0 then
+ marksets[i] = readcoverage(f,marksetsoffset+offset)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+-- We keep this code here instead of font-otm.lua because we need coverage
+-- helpers. Okay, these helpers could go to the main reader file some day.
+
+local function readmathvalue(f)
+ local v = readshort(f)
+ skipshort(f,1) -- offset to device table
+ return v
+end
+
+local function readmathconstants(f,fontdata,offset)
+ setposition(f,offset)
+ fontdata.mathconstants = {
+ ScriptPercentScaleDown = readshort(f),
+ ScriptScriptPercentScaleDown = readshort(f),
+ DelimitedSubFormulaMinHeight = readushort(f),
+ DisplayOperatorMinHeight = readushort(f),
+ MathLeading = readmathvalue(f),
+ AxisHeight = readmathvalue(f),
+ AccentBaseHeight = readmathvalue(f),
+ FlattenedAccentBaseHeight = readmathvalue(f),
+ SubscriptShiftDown = readmathvalue(f),
+ SubscriptTopMax = readmathvalue(f),
+ SubscriptBaselineDropMin = readmathvalue(f),
+ SuperscriptShiftUp = readmathvalue(f),
+ SuperscriptShiftUpCramped = readmathvalue(f),
+ SuperscriptBottomMin = readmathvalue(f),
+ SuperscriptBaselineDropMax = readmathvalue(f),
+ SubSuperscriptGapMin = readmathvalue(f),
+ SuperscriptBottomMaxWithSubscript = readmathvalue(f),
+ SpaceAfterScript = readmathvalue(f),
+ UpperLimitGapMin = readmathvalue(f),
+ UpperLimitBaselineRiseMin = readmathvalue(f),
+ LowerLimitGapMin = readmathvalue(f),
+ LowerLimitBaselineDropMin = readmathvalue(f),
+ StackTopShiftUp = readmathvalue(f),
+ StackTopDisplayStyleShiftUp = readmathvalue(f),
+ StackBottomShiftDown = readmathvalue(f),
+ StackBottomDisplayStyleShiftDown = readmathvalue(f),
+ StackGapMin = readmathvalue(f),
+ StackDisplayStyleGapMin = readmathvalue(f),
+ StretchStackTopShiftUp = readmathvalue(f),
+ StretchStackBottomShiftDown = readmathvalue(f),
+ StretchStackGapAboveMin = readmathvalue(f),
+ StretchStackGapBelowMin = readmathvalue(f),
+ FractionNumeratorShiftUp = readmathvalue(f),
+ FractionNumeratorDisplayStyleShiftUp = readmathvalue(f),
+ FractionDenominatorShiftDown = readmathvalue(f),
+ FractionDenominatorDisplayStyleShiftDown = readmathvalue(f),
+ FractionNumeratorGapMin = readmathvalue(f),
+ FractionNumeratorDisplayStyleGapMin = readmathvalue(f),
+ FractionRuleThickness = readmathvalue(f),
+ FractionDenominatorGapMin = readmathvalue(f),
+ FractionDenominatorDisplayStyleGapMin = readmathvalue(f),
+ SkewedFractionHorizontalGap = readmathvalue(f),
+ SkewedFractionVerticalGap = readmathvalue(f),
+ OverbarVerticalGap = readmathvalue(f),
+ OverbarRuleThickness = readmathvalue(f),
+ OverbarExtraAscender = readmathvalue(f),
+ UnderbarVerticalGap = readmathvalue(f),
+ UnderbarRuleThickness = readmathvalue(f),
+ UnderbarExtraDescender = readmathvalue(f),
+ RadicalVerticalGap = readmathvalue(f),
+ RadicalDisplayStyleVerticalGap = readmathvalue(f),
+ RadicalRuleThickness = readmathvalue(f),
+ RadicalExtraAscender = readmathvalue(f),
+ RadicalKernBeforeDegree = readmathvalue(f),
+ RadicalKernAfterDegree = readmathvalue(f),
+ RadicalDegreeBottomRaisePercent = readshort(f),
+ }
+end
+
+local function readmathglyphinfo(f,fontdata,offset)
+ setposition(f,offset)
+ local italics = readushort(f)
+ local accents = readushort(f)
+ local extensions = readushort(f)
+ local kerns = readushort(f)
+ local glyphs = fontdata.glyphs
+ if italics ~= 0 then
+ setposition(f,offset+italics)
+ local coverage = readushort(f)
+ local nofglyphs = readushort(f)
+ coverage = readcoverage(f,offset+italics+coverage,true)
+ setposition(f,offset+italics+4)
+ for i=1,nofglyphs do
+ local italic = readmathvalue(f)
+ if italic ~= 0 then
+ local glyph = glyphs[coverage[i]]
+ local math = glyph.math
+ if not math then
+ glyph.math = { italic = italic }
+ else
+ math.italic = italic
+ end
+ end
+ end
+ fontdata.hasitalics = true
+ end
+ if accents ~= 0 then
+ setposition(f,offset+accents)
+ local coverage = readushort(f)
+ local nofglyphs = readushort(f)
+ coverage = readcoverage(f,offset+accents+coverage,true)
+ setposition(f,offset+accents+4)
+ for i=1,nofglyphs do
+ local accent = readmathvalue(f)
+ if accent ~= 0 then
+ local glyph = glyphs[coverage[i]]
+ local math = glyph.math
+ if not math then
+ glyph.math = { accent = accent }
+ else
+ math.accent = accent
+ end
+ end
+ end
+ end
+ if extensions ~= 0 then
+ setposition(f,offset+extensions)
+ end
+ if kerns ~= 0 then
+ local kernoffset = offset + kerns
+ setposition(f,kernoffset)
+ local coverage = readushort(f)
+ local nofglyphs = readushort(f)
+ if nofglyphs > 0 then
+ local function get(offset)
+ setposition(f,kernoffset+offset)
+ local n = readushort(f)
+ if n > 0 then
+ local l = { }
+ -- for i=1,n do
+ -- l[i] = { readushort(f), 0 } -- height, kern
+ -- skipshort(f)
+ -- end
+ -- for i=1,n do
+ -- l[i][2] = readushort(f)
+ -- skipshort(f)
+ -- end
+ for i=1,n do
+ l[i] = { height = readmathvalue(f) }
+ end
+ for i=1,n do
+ l[i].kern = readmathvalue(f)
+ end
+ l[n+1] = { kern = readmathvalue(f) }
+ return l
+ end
+ end
+ local kernsets = { }
+ for i=1,nofglyphs do
+ local topright = readushort(f)
+ local topleft = readushort(f)
+ local bottomright = readushort(f)
+ local bottomleft = readushort(f)
+ kernsets[i] = {
+ topright = topright ~= 0 and topright or nil,
+ topleft = topleft ~= 0 and topleft or nil,
+ bottomright = bottomright ~= 0 and bottomright or nil,
+ bottomleft = bottomleft ~= 0 and bottomleft or nil,
+ }
+ end
+ coverage = readcoverage(f,kernoffset+coverage,true)
+ for i=1,nofglyphs do
+ local kernset = kernsets[i]
+ if next(kernset) then
+ local k = kernset.topright if k then kernset.topright = get(k) end
+ local k = kernset.topleft if k then kernset.topleft = get(k) end
+ local k = kernset.bottomright if k then kernset.bottomright = get(k) end
+ local k = kernset.bottomleft if k then kernset.bottomleft = get(k) end
+ if next(kernset) then
+ local glyph = glyphs[coverage[i]]
+ local math = glyph.math
+ if not math then
+ glyph.math = { kerns = kernset }
+ else
+ math.kerns = kernset
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+local function readmathvariants(f,fontdata,offset)
+ setposition(f,offset)
+ local glyphs = fontdata.glyphs
+ local minoverlap = readushort(f)
+ local vcoverage = readushort(f)
+ local hcoverage = readushort(f)
+ local vnofglyphs = readushort(f)
+ local hnofglyphs = readushort(f)
+ local vconstruction = { }
+ local hconstruction = { }
+ for i=1,vnofglyphs do
+ vconstruction[i] = readushort(f)
+ end
+ for i=1,hnofglyphs do
+ hconstruction[i] = readushort(f)
+ end
+
+ fontdata.mathconstants.MinConnectorOverlap = minoverlap
+
+ -- variants[i] = {
+ -- glyph = readushort(f),
+ -- advance = readushort(f),
+ -- }
+
+ local function get(offset,coverage,nofglyphs,construction,kvariants,kparts,kitalic)
+ if coverage ~= 0 and nofglyphs > 0 then
+ local coverage = readcoverage(f,offset+coverage,true)
+ for i=1,nofglyphs do
+ local c = construction[i]
+ if c ~= 0 then
+ local index = coverage[i]
+ local glyph = glyphs[index]
+ local math = glyph.math
+ setposition(f,offset+c)
+ local assembly = readushort(f)
+ local nofvariants = readushort(f)
+ if nofvariants > 0 then
+ local variants, v = nil, 0
+ for i=1,nofvariants do
+ local variant = readushort(f)
+ if variant == index then
+ -- ignore
+ elseif variants then
+ v = v + 1
+ variants[v] = variant
+ else
+ v = 1
+ variants = { variant }
+ end
+ skipshort(f)
+ end
+ if not variants then
+ -- only self
+ elseif not math then
+ math = { [kvariants] = variants }
+ glyph.math = math
+ else
+ math[kvariants] = variants
+ end
+ end
+ if assembly ~= 0 then
+ setposition(f,offset + c + assembly)
+ local italic = readmathvalue(f)
+ local nofparts = readushort(f)
+ local parts = { }
+ for i=1,nofparts do
+ local p = {
+ glyph = readushort(f),
+ start = readushort(f),
+ ["end"] = readushort(f),
+ advance = readushort(f),
+ }
+ local flags = readushort(f)
+ if bittest(flags,0x0001) then
+ p.extender = 1 -- true
+ end
+ parts[i] = p
+ end
+ if not math then
+ math = {
+ [kparts] = parts
+ }
+ glyph.math = math
+ else
+ math[kparts] = parts
+ end
+ if italic and italic ~= 0 then
+ math[kitalic] = italic
+ end
+ end
+ end
+ end
+ end
+ end
+
+ get(offset,vcoverage,vnofglyphs,vconstruction,"vvariants","vparts","vitalic")
+ get(offset,hcoverage,hnofglyphs,hconstruction,"hvariants","hparts","hitalic")
+end
+
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable = fontdata.tables.math
+ if datatable then
+ local tableoffset = datatable.offset
+ setposition(f,tableoffset)
+ local version = readulong(f)
+ if version ~= 0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ local constants = readushort(f)
+ local glyphinfo = readushort(f)
+ local variants = readushort(f)
+ if constants == 0 then
+ report("the math table of %a has no constants",fontdata.filename)
+ else
+ readmathconstants(f,fontdata,tableoffset+constants)
+ end
+ if glyphinfo ~= 0 then
+ readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ end
+ if variants ~= 0 then
+ readmathvariants(f,fontdata,tableoffset+variants)
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-emp.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-emp.mkvi
index 34a1ea9cc19..8f87ff7a199 100644
--- a/Master/texmf-dist/tex/context/base/font-emp.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-emp.mkvi
@@ -43,7 +43,7 @@
\let\m_font_emphasized_typeface\empty
\def\font_emphasis_checked_typeface#slanted#italic%
- {\edef\m_font_emphasized_typeface{\bodyfontvariable\s!em}%
+ {\edef\m_font_emphasized_typeface{\font_bodyfontvariable\s!em}%
\ifx\m_font_emphasized_typeface\v!slanted
#slanted%
\else\ifx\m_font_emphasized_typeface\v!italic
diff --git a/Master/texmf-dist/tex/context/base/font-enc.lua b/Master/texmf-dist/tex/context/base/mkiv/font-enc.lua
index 2e8b722de39..2e8b722de39 100644
--- a/Master/texmf-dist/tex/context/base/font-enc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-enc.lua
diff --git a/Master/texmf-dist/tex/context/base/font-enh.lua b/Master/texmf-dist/tex/context/base/mkiv/font-enh.lua
index 3439a434ab4..3439a434ab4 100644
--- a/Master/texmf-dist/tex/context/base/font-enh.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-enh.lua
diff --git a/Master/texmf-dist/tex/context/base/font-ext.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ext.lua
index b7817c140b0..79144aa70e3 100644
--- a/Master/texmf-dist/tex/context/base/font-ext.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ext.lua
@@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['font-ext'] = {
}
local next, type, byte = next, type, string.byte
+local utfbyte = utf.byte
local context = context
local fonts = fonts
@@ -534,8 +535,8 @@ local function initializeitlc(tfmdata,value) -- hm, always value
end
registerotffeature {
- name = "itlc",
- description = "italic correction",
+ name = "itlc",
+ description = "italic correction",
initializers = {
base = initializeitlc,
node = initializeitlc,
@@ -543,8 +544,8 @@ registerotffeature {
}
registerafmfeature {
- name = "itlc",
- description = "italic correction",
+ name = "itlc",
+ description = "italic correction",
initializers = {
base = initializeitlc,
node = initializeitlc,
@@ -552,14 +553,12 @@ registerafmfeature {
}
local function initializetextitalics(tfmdata,value) -- yes no delay
- local delay = value == "delay"
- tfmdata.properties.textitalics = delay and true or value
- tfmdata.properties.delaytextitalics = delay
+ tfmdata.properties.textitalics = toboolean(value)
end
registerotffeature {
- name = "textitalics",
- description = "use alternative text italic correction",
+ name = "textitalics",
+ description = "use alternative text italic correction",
initializers = {
base = initializetextitalics,
node = initializetextitalics,
@@ -567,14 +566,36 @@ registerotffeature {
}
registerafmfeature {
- name = "textitalics",
- description = "use alternative text italic correction",
+ name = "textitalics",
+ description = "use alternative text italic correction",
initializers = {
base = initializetextitalics,
node = initializetextitalics,
}
}
+local function initializemathitalics(tfmdata,value) -- yes no delay
+ tfmdata.properties.mathitalics = toboolean(value)
+end
+
+registerotffeature {
+ name = "mathitalics",
+ description = "use alternative math italic correction",
+ initializers = {
+ base = initializemathitalics,
+ node = initializemathitalics,
+ }
+}
+
+registerafmfeature {
+ name = "mathitalics",
+ description = "use alternative math italic correction",
+ initializers = {
+ base = initializemathitalics,
+ node = initializemathitalics,
+ }
+}
+
-- slanting
local function initializeslant(tfmdata,value)
@@ -835,6 +856,47 @@ registerotffeature {
}
}
+-- -- for notosans but not general
+--
+-- do
+--
+-- local v_local = interfaces and interfaces.variables and interfaces.variables["local"] or "local"
+--
+-- local function initialize(tfmdata,key,value)
+-- local characters = tfmdata.characters
+-- local parameters = tfmdata.parameters
+-- local oldchar = 32
+-- local newchar = 32
+-- if value == "locl" or value == v_local then
+-- newchar = fonts.handlers.otf.getsubstitution(tfmdata,oldchar,"locl",true) or oldchar
+-- elseif value == true then
+-- -- use normal space
+-- elseif value then
+-- newchar = utfbyte(value)
+-- else
+-- return
+-- end
+-- local newchar = newchar and characters[newchar]
+-- local newspace = newchar and newchar.width
+-- if newspace > 0 then
+-- parameters.space = newspace
+-- parameters.space_stretch = newspace/2
+-- parameters.space_shrink = newspace/3
+-- parameters.extra_space = parameters.space_shrink
+-- end
+-- end
+--
+-- registerotffeature {
+-- name = 'space', -- true|false|locl|character
+-- description = 'space settings',
+-- manipulators = {
+-- base = initialize,
+-- node = initialize,
+-- }
+-- }
+--
+-- end
+
-- -- historic stuff, move from font-ota (handled differently, typo-rep)
--
-- local delete_node = nodes.delete
diff --git a/Master/texmf-dist/tex/context/base/font-fbk.lua b/Master/texmf-dist/tex/context/base/mkiv/font-fbk.lua
index 22644f04674..9ef0706d235 100644
--- a/Master/texmf-dist/tex/context/base/font-fbk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-fbk.lua
@@ -46,6 +46,9 @@ local force_composed = false
local cache = { } -- we could make these weak
local fraction = 0.15 -- 30 units for lucida
+-- todo: we also need to update the feature hashes ... i'll do that when i'm in the mood
+-- and/or when i need it
+
local function composecharacters(tfmdata)
-- this assumes that slot 1 is self, there will be a proper self some day
local characters = tfmdata.characters
@@ -89,21 +92,22 @@ local function composecharacters(tfmdata)
end
end
local charsacc = characters[acc]
- --~ local ca = charsacc.category
- --~ if ca == "mn" then
- --~ -- mark nonspacing
- --~ elseif ca == "ms" then
- --~ -- mark spacing combining
- --~ elseif ca == "me" then
- --~ -- mark enclosing
- --~ else
+ -- local ca = charsacc.category
+ -- if ca == "mn" then
+ -- -- mark nonspacing
+ -- elseif ca == "ms" then
+ -- -- mark spacing combining
+ -- elseif ca == "me" then
+ -- -- mark enclosing
+ -- else
if not charsacc then -- fallback accents
acc = unicodefallbacks[acc]
charsacc = acc and characters[acc]
end
local chr_t = cache[chr]
if not chr_t then
- chr_t = {"slot", 1, chr}
+ chr_t = { "slot", 1, chr }
+ -- will be: chr_t = { "slot", 0, chr }
cache[chr] = chr_t
end
if charsacc then
@@ -112,7 +116,8 @@ local function composecharacters(tfmdata)
end
local acc_t = cache[acc]
if not acc_t then
- acc_t = {"slot", 1, acc}
+ acc_t = { "slot", 1, acc }
+ -- will be: acc_t = { "slot", 0, acc }
cache[acc] = acc_t
end
local cb = descriptions[chr].boundingbox
@@ -224,7 +229,7 @@ local function composecharacters(tfmdata)
end
else
if trace_combining_define then
- report_combining("%C becomes simplfied %C",i,chr)
+ report_combining("%C becomes simplified %C",i,chr)
end
t.commands = { chr_t } -- else index mess
end
diff --git a/Master/texmf-dist/tex/context/base/font-fea.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-fea.mkvi
index 5f6f1b5d5ad..dade7049488 100644
--- a/Master/texmf-dist/tex/context/base/font-fea.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-fea.mkvi
@@ -248,8 +248,11 @@
\installcorenamespace{featureyes}
\installcorenamespace{featurenop}
-\unexpanded\def\font_feature_yes[#method]{\csname\??featureyes\ifcsname\??featureyes#1\endcsname#1\else\s!unknown\fi\endcsname}
-\unexpanded\def\font_feature_nop #method{\csname\??featurenop\ifcsname\??featurenop#1\endcsname#1\else\s!unknown\fi\endcsname}
+%\unexpanded\def\font_feature_yes[#method]{\csname\??featureyes\ifcsname\??featureyes#method\endcsname#method\else\s!unknown\fi\endcsname}
+%\unexpanded\def\font_feature_nop #method{\csname\??featurenop\ifcsname\??featurenop#method\endcsname#method\else\s!unknown\fi\endcsname}
+
+\unexpanded\def\font_feature_yes[#method]{\begincsname\??featureyes#method\endcsname}
+\unexpanded\def\font_feature_nop #method{\begincsname\??featurenop#method\endcsname}
\letvalue{\??featureyes +}\addfeature
\letvalue{\??featurenop +}\addfeature
@@ -334,10 +337,20 @@
% also new
-\unexpanded\def\useaddfontfeatureparameter#1% faster local variant
- {\edef\m_font_feature_asked{#1\c!features}%
+\unexpanded\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:
+
+\unexpanded\def\slashedzero
+ {\dontleavehmode
+ \begingroup
+ %\addff{zero}
+ \font_feature_add_nop{zero}%
+ 0%
+ \endgroup}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/font-fil.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-fil.mkvi
index 1a20d1cd84a..0bfc07b6c74 100644
--- a/Master/texmf-dist/tex/context/base/font-fil.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-fil.mkvi
@@ -191,21 +191,27 @@
\def\font_helpers_true_fontname#name*#first#rest*#crap\relax
{\ifcsname\??fontfile\fontclass#name\endcsname
\ifx#first\empty
- \expandafter\truefontname\csname\??fontfile\fontclass#name\endcsname
+ %\expandafter\truefontname\csname\??fontfile\fontclass#name\endcsname
+ \expandafter\truefontname\lastnamedcs
\else
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname*#first#rest%
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname*#first#rest%
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\else\ifcsname\??fontfile\defaultfontclass#name\endcsname
\ifx#first\empty
- \expandafter\truefontname\csname\??fontfile\defaultfontclass#name\endcsname
+ %\expandafter\truefontname\csname\??fontfile\defaultfontclass#name\endcsname
+ \expandafter\truefontname\lastnamedcs
\else
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname*#first#rest%
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname*#first#rest%
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\else\ifcsname\??fontfile#name\endcsname
\ifx#first\empty
- \expandafter\truefontname\csname\??fontfile#name\endcsname
+ %\expandafter\truefontname\csname\??fontfile#name\endcsname
+ \expandafter\truefontname\lastnamedcs
\else
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname*#first#rest%
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname*#first#rest%
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\else
#name\ifx#first\empty\else*#first#rest\fi
@@ -216,20 +222,25 @@
\def\font_helpers_true_fontname_check_indeed#name*#crap\relax
{\ifcsname\??fontfile\fontclass#name\endcsname
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs
\else\ifcsname\??fontfile\defaultfontclass#name\endcsname
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs
\else\ifcsname\??fontfile#name\endcsname
- \expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname
+ %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname
+ \expandafter\font_helpers_true_fontname_check\lastnamedcs
\else
#name%
\fi\fi\fi}
\def\expandfontsynonym#command#name% one level expansion
{\ifcsname\??fontfile\fontclass#name\endcsname
- \expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\fontclass#name\endcsname}%
+ %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\fontclass#name\endcsname}%
+ \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}%
\else\ifcsname\??fontfile\defaultfontclass#2\endcsname
- \expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\defaultfontclass#name\endcsname}%
+ %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\defaultfontclass#name\endcsname}%
+ \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}%
\fi\fi}
\def\doifelsefontsynonym#name%
@@ -250,9 +261,11 @@
\def\tracedfontname#name%
{#name\ifcsname\??fontfile\fontclass#name\endcsname
- \expandafter\tracedfontname\csname\??fontfile\fontclass#name\endcsname
+ %\expandafter\tracedfontname\csname\??fontfile\fontclass#name\endcsname
+ \expandafter\tracedfontname\lastnamedcs
\else\ifcsname\??fontfile#name\endcsname
- \expandafter\tracedfontname\csname\??fontfile#name\endcsname
+ %\expandafter\tracedfontname\csname\??fontfile#name\endcsname
+ \expandafter\tracedfontname\lastnamedcs
\fi\fi}
%D \macros
@@ -266,7 +279,7 @@
\let\fontclass \empty
\let\defaultfontclass\empty
-\def\fontclassname#class#name%
+\def\fontclassname#class#name% tricky ... no lastnamedcs here due to nesting
{\ifcsname\??fontfile#class#name\endcsname
\fontclassname{#class}{\csname\??fontfile#class#name\endcsname}%
\else\ifcsname\??fontfile#name\endcsname
@@ -283,84 +296,132 @@
% without pre-expansion.
\def\font_helpers_update_font_class_parameters
- {\edef\m_font_class_direction {\ifcsname\??fontclass\fontclass\fontstyle\s!direction \endcsname\csname\??fontclass\fontclass\fontstyle\s!direction \endcsname\fi}%
- \edef\m_font_class_features {\ifcsname\??fontclass\fontclass\fontstyle\s!features \endcsname\csname\??fontclass\fontclass\fontstyle\s!features \endcsname\fi}%
- \edef\m_font_class_fallbacks {\ifcsname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname\csname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname\fi}%
- \edef\m_font_class_goodies {\ifcsname\??fontclass\fontclass\fontstyle\s!goodies \endcsname\csname\??fontclass\fontclass\fontstyle\s!goodies \endcsname\fi}%
- \edef\m_font_class_designsize{\ifcsname\??fontclass\fontclass\fontstyle\s!designsize\endcsname\csname\??fontclass\fontclass\fontstyle\s!designsize\endcsname\fi}}
+ {\edef\m_font_class_direction {\begincsname\??fontclass\fontclass\fontstyle\s!direction \endcsname}%
+ \edef\m_font_class_features {\begincsname\??fontclass\fontclass\fontstyle\s!features \endcsname}%
+ \edef\m_font_class_fallbacks {\begincsname\??fontclass\fontclass\fontstyle\s!fallbacks \endcsname}%
+ \edef\m_font_class_goodies {\begincsname\??fontclass\fontclass\fontstyle\s!goodies \endcsname}%
+ \edef\m_font_class_designsize{\begincsname\??fontclass\fontclass\fontstyle\s!designsize\endcsname}}
% resolve
+% \def\font_helpers_set_features_yes#name%
+% {\ifcsname\??fontfile\fontclass#name\s!features \endcsname \edef\m_font_features % class + symbolic_name
+% {\csname\??fontfile\fontclass#name\s!features \endcsname}\else
+% \ifcsname\??fontfile #name\s!features \endcsname \edef\m_font_features % symbolic_name
+% {\csname\??fontfile #name\s!features \endcsname}\else
+% \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_features_yes % class + parent_name
+% \csname\??fontfile\fontclass #name\endcsname \else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes % parent_name
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_features\empty\fi\fi\fi\fi}
+%
+% \def\font_helpers_set_fallbacks_yes#name%
+% {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \edef\m_font_fallbacks
+% {\csname\??fontfile\fontclass#name\s!fallbacks\endcsname}\else
+% \ifcsname\??fontfile #name\s!fallbacks\endcsname \edef\m_font_fallbacks
+% {\csname\??fontfile #name\s!fallbacks\endcsname}\else
+% \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_fallbacks_yes
+% \csname\??fontfile\fontclass #name\endcsname \else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_fallbacks\empty\fi\fi\fi\fi}
+%
+% \def\font_helpers_set_goodies_yes#name%
+% {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \edef\m_font_goodies
+% {\csname\??fontfile\fontclass#name\s!goodies \endcsname}\else
+% \ifcsname\??fontfile #name\s!goodies \endcsname \edef\m_font_goodies
+% {\csname\??fontfile #name\s!goodies \endcsname}\else
+% \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_goodies_yes
+% \csname\??fontfile\fontclass #name\endcsname \else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_goodies\empty\fi\fi\fi\fi}
+%
+% \def\font_helpers_set_designsize_yes#name%
+% {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname \edef\m_font_designsize
+% {\csname\??fontfile\fontclass#name\s!designsize\endcsname}\else
+% \ifcsname\??fontfile #name\s!designsize\endcsname \edef\m_font_designsize
+% {\csname\??fontfile #name\s!designsize\endcsname}\else
+% \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_designsize_yes
+% \csname\??fontfile\fontclass #name\endcsname \else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_designsize\empty\fi\fi\fi\fi}
+%
+% \def\font_helpers_set_features_nop#name%
+% {\ifcsname\??fontfile#name\s!features \endcsname \edef\m_font_features
+% {\csname\??fontfile#name\s!features \endcsname}\else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_nop
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_features\empty\fi\fi}
+%
+% \def\font_helpers_set_fallbacks_nop#name%
+% {\ifcsname\??fontfile#name\s!fallbacks\endcsname \edef\m_font_fallbacks
+% {\csname\??fontfile#name\s!fallbacks\endcsname}\else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_nop
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_fallbacks\empty\fi\fi}
+%
+% \def\font_helpers_set_goodies_nop#name%
+% {\ifcsname\??fontfile#name\s!goodies \endcsname \edef\m_font_goodies
+% {\csname\??fontfile#name\s!goodies \endcsname}\else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_nop
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_goodies\empty\fi\fi}
+%
+% \def\font_helpers_set_designsize_nop#name%
+% {\ifcsname\??fontfile#name\s!designsize\endcsname \edef\m_font_designsize
+% {\csname\??fontfile#name\s!designsize\endcsname}\else
+% \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_nop
+% \csname\??fontfile #name\endcsname \else
+% \let\m_font_designsize\empty\fi\fi}
+
\def\font_helpers_set_features_yes#name%
- {\ifcsname\??fontfile\fontclass#name\s!features \endcsname \edef\m_font_features % class + symbolic_name
- {\csname\??fontfile\fontclass#name\s!features \endcsname}\else
- \ifcsname\??fontfile #name\s!features \endcsname \edef\m_font_features % symbolic_name
- {\csname\??fontfile #name\s!features \endcsname}\else
- \ifcsname\??fontfile\fontclass #name\endcsname\expandafter\font_helpers_set_features_yes % class + parent_name
- \csname\??fontfile\fontclass #name\endcsname \else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes % parent_name
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile\fontclass#name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else % class + symbolic_name
+ \ifcsname\??fontfile #name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else % symbolic_name
+ \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \else % class + parent_name
+ \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_yes\lastnamedcs \else % parent_name
\let\m_font_features\empty\fi\fi\fi\fi}
\def\font_helpers_set_fallbacks_yes#name%
- {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \edef\m_font_fallbacks
- {\csname\??fontfile\fontclass#name\s!fallbacks\endcsname}\else
- \ifcsname\??fontfile #name\s!fallbacks\endcsname \edef\m_font_fallbacks
- {\csname\??fontfile #name\s!fallbacks\endcsname}\else
- \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_fallbacks_yes
- \csname\??fontfile\fontclass #name\endcsname \else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile\fontclass#name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else
+ \ifcsname\??fontfile #name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else
+ \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \else
+ \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_yes\lastnamedcs \else
\let\m_font_fallbacks\empty\fi\fi\fi\fi}
\def\font_helpers_set_goodies_yes#name%
- {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \edef\m_font_goodies
- {\csname\??fontfile\fontclass#name\s!goodies \endcsname}\else
- \ifcsname\??fontfile #name\s!goodies \endcsname \edef\m_font_goodies
- {\csname\??fontfile #name\s!goodies \endcsname}\else
- \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_goodies_yes
- \csname\??fontfile\fontclass #name\endcsname \else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile\fontclass#name\s!goodies \endcsname \edef\m_font_goodies{\lastnamedcs}\else
+ \ifcsname\??fontfile #name\s!goodies \endcsname \edef\m_font_goodies{\lastnamedcs}\else
+ \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \else
+ \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_yes\lastnamedcs \else
\let\m_font_goodies\empty\fi\fi\fi\fi}
\def\font_helpers_set_designsize_yes#name%
- {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname \edef\m_font_designsize
- {\csname\??fontfile\fontclass#name\s!designsize\endcsname}\else
- \ifcsname\??fontfile #name\s!designsize\endcsname \edef\m_font_designsize
- {\csname\??fontfile #name\s!designsize\endcsname}\else
- \ifcsname\??fontfile\fontclass #name\endcsname \expandafter\font_helpers_set_designsize_yes
- \csname\??fontfile\fontclass #name\endcsname \else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile\fontclass#name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else
+ \ifcsname\??fontfile #name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else
+ \ifcsname\??fontfile\fontclass#name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \else
+ \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_yes\lastnamedcs \else
\let\m_font_designsize\empty\fi\fi\fi\fi}
\def\font_helpers_set_features_nop#name%
- {\ifcsname\??fontfile#name\s!features \endcsname \edef\m_font_features
- {\csname\??fontfile#name\s!features \endcsname}\else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_features_nop
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile#name\s!features\endcsname \edef\m_font_features{\lastnamedcs}\else
+ \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_features_nop\lastnamedcs \else
\let\m_font_features\empty\fi\fi}
\def\font_helpers_set_fallbacks_nop#name%
- {\ifcsname\??fontfile#name\s!fallbacks\endcsname \edef\m_font_fallbacks
- {\csname\??fontfile#name\s!fallbacks\endcsname}\else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_fallbacks_nop
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile#name\s!fallbacks\endcsname \edef\m_font_fallbacks{\lastnamedcs}\else
+ \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_fallbacks_nop\lastnamedcs \else
\let\m_font_fallbacks\empty\fi\fi}
\def\font_helpers_set_goodies_nop#name%
- {\ifcsname\??fontfile#name\s!goodies \endcsname \edef\m_font_goodies
- {\csname\??fontfile#name\s!goodies \endcsname}\else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_goodies_nop
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile#name\s!goodies\endcsname \edef\m_font_goodies{\lastnamedcs}\else
+ \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_goodies_nop\lastnamedcs \else
\let\m_font_goodies\empty\fi\fi}
\def\font_helpers_set_designsize_nop#name%
- {\ifcsname\??fontfile#name\s!designsize\endcsname \edef\m_font_designsize
- {\csname\??fontfile#name\s!designsize\endcsname}\else
- \ifcsname\??fontfile #name\endcsname \expandafter\font_helpers_set_designsize_nop
- \csname\??fontfile #name\endcsname \else
+ {\ifcsname\??fontfile#name\s!designsize\endcsname \edef\m_font_designsize{\lastnamedcs}\else
+ \ifcsname\??fontfile#name\endcsname \expandafter\font_helpers_set_designsize_nop\lastnamedcs \else
\let\m_font_designsize\empty\fi\fi}
\def\font_helpers_update_font_parameters_yes
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-gbn.lua b/Master/texmf-dist/tex/context/base/mkiv/font-gbn.lua
new file mode 100644
index 00000000000..daa072b4bc2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-gbn.lua
@@ -0,0 +1,255 @@
+if not modules then modules = { } end modules ['font-gbn'] = {
+ version = 1.001,
+ comment = "companion to luatex-*.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- generic [base|node] mode handler
+
+if context then
+ texio.write_nl("fatal error: this module is not for context")
+ os.exit()
+end
+
+local fonts = fonts
+local nodes = nodes
+
+local nuts = nodes.nuts -- context abstraction of direct nodes
+
+local traverse_id = nuts.traverse_id
+local remove_node = nuts.remove
+local free_node = nuts.free
+
+local glyph_code = nodes.nodecodes.glyph
+local disc_code = nodes.nodecodes.disc
+
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local getfont = nuts.getfont
+local getchar = nuts.getchar
+local getid = nuts.getid
+local getboth = nuts.getboth
+local getprev = nuts.getprev
+local getnext = nuts.getnext
+local getdisc = nuts.getdisc
+local setchar = nuts.setchar
+local setlink = nuts.setlink
+local setprev = nuts.setprev
+
+-- from now on we apply ligaturing and kerning here because it might interfere with complex
+-- opentype discretionary handling where the base ligature pass expect some weird extra
+-- pointers (which then confuse the tail slider that has some checking built in)
+
+local n_ligaturing = node.ligaturing
+local n_kerning = node.kerning
+
+local ligaturing = nuts.ligaturing
+local kerning = nuts.kerning
+
+local basemodepass = true
+
+local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning = nil end
+local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning = nil end
+
+function node.ligaturing(...)
+ if basemodepass and l_warning then
+ l_warning()
+ end
+ return n_ligaturing(...)
+end
+
+function node.kerning(...)
+ if basemodepass and k_warning then
+ k_warning()
+ end
+ return n_kerning(...)
+end
+
+function nodes.handlers.setbasemodepass(v)
+ basemodepass = v
+end
+
+function nodes.handlers.nodepass(head)
+ local fontdata = fonts.hashes.identifiers
+ if fontdata then
+ local nuthead = tonut(head)
+ local usedfonts = { }
+ local basefonts = { }
+ local prevfont = nil
+ local basefont = nil
+ local variants = nil
+ local redundant = nil
+ for n in traverse_id(glyph_code,nuthead) do
+ local font = getfont(n)
+ if font ~= prevfont then
+ if basefont then
+ basefont[2] = getprev(n)
+ end
+ prevfont = font
+ local used = usedfonts[font]
+ if not used then
+ local tfmdata = fontdata[font] --
+ if tfmdata then
+ local shared = tfmdata.shared -- we need to check shared, only when same features
+ if shared then
+ local processors = shared.processes
+ if processors and #processors > 0 then
+ usedfonts[font] = processors
+ elseif basemodepass then
+ basefont = { n, nil }
+ basefonts[#basefonts+1] = basefont
+ end
+ end
+ local resources = tfmdata.resources
+ variants = resources and resources.variants
+ variants = variants and next(variants) and variants or false
+ end
+ else
+ local tfmdata = fontdata[prevfont]
+ if tfmdata then
+ local resources = tfmdata.resources
+ variants = resources and resources.variants
+ variants = variants and next(variants) and variants or false
+ end
+ end
+ end
+ if variants then
+ local char = getchar(n)
+ if char >= 0xFE00 and (char <= 0xFE0F or (char >= 0xE0100 and char <= 0xE01EF)) then
+ local hash = variants[char]
+ if hash then
+ local p = getprev(n)
+ if p and getid(p) == glyph_code then
+ local variant = hash[getchar(p)]
+ if variant then
+ setchar(p,variant)
+ if not redundant then
+ redundant = { n }
+ else
+ redundant[#redundant+1] = n
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if redundant then
+ for i=1,#redundant do
+ local r = redundant[i]
+ local p, n = getboth(r)
+ if r == nuthead then
+ nuthead = n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if b > 0 then
+ for i=1,b do
+ local bi = basefonts[i]
+ if r == bi[1] then
+ bi[1] = n
+ end
+ if r == bi[2] then
+ bi[2] = n
+ end
+ end
+ end
+ free_node(r)
+ end
+ end
+ for d in traverse_id(disc_code,nuthead) do
+ local _, _, r = getdisc(d)
+ if r then
+ for n in traverse_id(glyph_code,r) do
+ local font = getfont(n)
+ if font ~= prevfont then
+ prevfont = font
+ local used = usedfonts[font]
+ if not used then
+ local tfmdata = fontdata[font] --
+ if tfmdata then
+ local shared = tfmdata.shared -- we need to check shared, only when same features
+ if shared then
+ local processors = shared.processes
+ if processors and #processors > 0 then
+ usedfonts[font] = processors
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(usedfonts) then
+ for font, processors in next, usedfonts do
+ for i=1,#processors do
+ head = processors[i](head,font,0) or head
+ end
+ end
+ end
+ if basemodepass and #basefonts > 0 then
+ for i=1,#basefonts do
+ local range = basefonts[i]
+ local start = range[1]
+ local stop = range[2]
+ if start then
+ local front = nuthead == start
+ local prev, next
+ if stop then
+ next = getnext(stop)
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ else
+ prev = getprev(start)
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if prev then
+ setlink(prev,start)
+ end
+ if next then
+ setlink(stop,next)
+ end
+ if front and nuthead ~= start then
+ head = tonode(start)
+ end
+ end
+ end
+ end
+ return head, true
+ else
+ return head, false
+ end
+end
+
+function nodes.handlers.basepass(head)
+ if not basemodepass then
+ head = n_ligaturing(head)
+ head = n_kerning(head)
+ end
+ return head, true
+end
+
+local nodepass = nodes.handlers.nodepass
+local basepass = nodes.handlers.basepass
+local injectpass = nodes.injections.handler
+local protectpass = nodes.handlers.protectglyphs
+
+function nodes.simple_font_handler(head)
+ if head then
+ head = nodepass(head)
+ head = injectpass(head)
+ if not basemodepass then
+ head = basepass(head)
+ end
+ protectpass(head)
+ return head, true
+ else
+ return head, false
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-gds.lua b/Master/texmf-dist/tex/context/base/mkiv/font-gds.lua
index 073d9ed57d1..23bbad42f63 100644
--- a/Master/texmf-dist/tex/context/base/font-gds.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-gds.lua
@@ -91,6 +91,9 @@ local function loadgoodies(filename) -- maybe a merge is better
end
goodies.name = goodies.name or "no name"
for name, fnc in next, list do
+ if trace_goodies then
+ report_goodies("handling goodie %a",name)
+ end
fnc(goodies)
end
goodies.initialized = true
@@ -444,6 +447,24 @@ local function setextrafeatures(tfmdata)
end
end
+local function setextensions(tfmdata)
+ local goodies = tfmdata.goodies
+ if goodies then
+ for i=1,#goodies do
+ local g = goodies[i]
+ local e = g.extensions
+ if e then
+ local goodie = g.name or "unknown"
+ for i=1,#e do
+ local name = "extension-" .. i
+ -- report_goodies("adding extension %s from %s",name,goodie)
+ otf.enhancers.addfeature(tfmdata.shared.rawdata,name,e[i])
+ end
+ end
+ end
+ end
+end
+
-- installation (collected to keep the overview) -- also for type 1
registerotffeature {
@@ -468,6 +489,17 @@ registerotffeature {
}
registerotffeature {
+ name = "extensions",
+ description = "extensions to features",
+ default = true,
+ initializers = {
+ position = 2,
+ base = setextensions,
+ node = setextensions,
+ }
+}
+
+registerotffeature {
name = "featureset",
description = "goodie feature set",
initializers = {
@@ -563,8 +595,8 @@ fontgoodies.register("mathematics", initialize)
-- },
-- }
--- math italics
-
+-- math italics (not rteally needed)
+--
-- it would be nice to have a \noitalics\font option
local function initialize(tfmdata)
@@ -576,56 +608,44 @@ local function initialize(tfmdata)
local mathitalics = mathgoodies and mathgoodies.italics
if mathitalics then
local properties = tfmdata.properties
- mathitalics = mathitalics[file.nameonly(properties.name)] or mathitalics
- if mathitalics then
- if trace_goodies then
- report_goodies("loading mathitalics for font %a",properties.name)
- end
- local corrections = mathitalics.corrections
- local defaultfactor = mathitalics.defaultfactor
- local disableengine = mathitalics.disableengine
- properties.hasitalics = true
- properties.mathitalic_defaultfactor = defaultfactor -- we inherit outer one anyway (name will change)
- if properties.mathitalics == nil then
- properties.mathitalics = disableengine
- end
- if corrections then
- -- As we want to set italic_correction (the context one) we need a
- -- postprocessor instead of messing with the (unscaled) descriptions.
- fontgoodies.registerpostprocessor(tfmdata, function(tfmdata) -- this is another tfmdata (a copy)
- -- better make a helper so that we have less code being defined
- local properties = tfmdata.properties
- local parameters = tfmdata.parameters
- local characters = tfmdata.characters
- properties.hasitalics = true
- properties.mathitalic_defaultfactor = defaultfactor
- properties.mathitalic_defaultvalue = defaultfactor * parameters.quad
- if properties.mathitalics == nil then
- properties.mathitalics = disableengine
- end
- if trace_goodies then
- report_goodies("assigning mathitalics for font %a",properties.name)
- end
- local mathitalics = properties.mathitalics
- local quad = parameters.quad
- local hfactor = parameters.hfactor
- for k, v in next, corrections do
- local c = characters[k]
- if v > -1 and v < 1 then
- v = v * quad
- else
- v = v * hfactor
+ if properties.setitalics then
+ mathitalics = mathitalics[file.nameonly(properties.name)] or mathitalics
+ if mathitalics then
+ if trace_goodies then
+ report_goodies("loading mathitalics for font %a",properties.name)
+ end
+ local corrections = mathitalics.corrections
+ local defaultfactor = mathitalics.defaultfactor
+ -- properties.mathitalic_defaultfactor = defaultfactor -- we inherit outer one anyway (name will change)
+ if corrections then
+ fontgoodies.registerpostprocessor(tfmdata, function(tfmdata) -- this is another tfmdata (a copy)
+ -- better make a helper so that we have less code being defined
+ local properties = tfmdata.properties
+ local parameters = tfmdata.parameters
+ local characters = tfmdata.characters
+ properties.mathitalic_defaultfactor = defaultfactor
+ properties.mathitalic_defaultvalue = defaultfactor * parameters.quad
+ if trace_goodies then
+ report_goodies("assigning mathitalics for font %a",properties.name)
end
- c.italic_correction = v -- for context
- if mathitalics then
- c.italic = v -- for tex
- else
- c.italic = nil
+ local quad = parameters.quad
+ local hfactor = parameters.hfactor
+ for k, v in next, corrections do
+ local c = characters[k]
+ if c then
+ if v > -1 and v < 1 then
+ c.italic = v * quad
+ else
+ c.italic = v * hfactor
+ end
+ else
+ report_goodies("invalid mathitalics entry %U for font %a",k,properties.name)
+ end
end
- end
- end)
+ end)
+ end
+ return -- maybe not as these can accumulate
end
- return -- maybe not as these can accumulate
end
end
end
@@ -793,23 +813,21 @@ function fontgoodies.designsizes.register(name,size,specification)
end
function fontgoodies.designsizes.filename(name,spec,size) -- returns nil of no match
- if spec and spec ~= "" then
- local data = designdata[lower(name)]
- if data then
- if spec == "default" then
- return data.default
- elseif spec == "auto" then
- local ranges = data.ranges
- if ranges then
- for i=1,#ranges do
- local r = ranges[i]
- if r[1] >= size then -- todo: rounding so maybe size - 100
- return r[2]
- end
+ local data = designdata[lower(name)]
+ if data then
+ if not spec or spec == "" or spec == "default" then
+ return data.default
+ elseif spec == "auto" then
+ local ranges = data.ranges
+ if ranges then
+ for i=1,#ranges do
+ local r = ranges[i]
+ if r[1] >= size then -- todo: rounding so maybe size - 100
+ return r[2]
end
end
- return data.default or (ranges and ranges[#ranges][2])
end
+ return data.default or (ranges and ranges[#ranges][2])
end
end
end
@@ -829,13 +847,15 @@ end
implement {
name = "loadfontgoodies",
actions = fontgoodies.load,
- arguments = "string"
+ arguments = "string",
+ overload = true, -- for now, permits new font loader
}
implement {
name = "enablefontcolorschemes",
onlyonce = true,
- actions = colorschemes.enable
+ actions = colorschemes.enable,
+ overload = true, -- for now, permits new font loader
}
-- weird place ... depends on math
diff --git a/Master/texmf-dist/tex/context/base/font-gds.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-gds.mkvi
index e9c34e807af..e9c34e807af 100644
--- a/Master/texmf-dist/tex/context/base/font-gds.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-gds.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-hsh.lua b/Master/texmf-dist/tex/context/base/mkiv/font-hsh.lua
index 07acf2138c7..efd042fe162 100644
--- a/Master/texmf-dist/tex/context/base/font-hsh.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-hsh.lua
@@ -37,6 +37,7 @@ local dynamics = hashes.dynamics or allocate()
local unicodes = hashes.unicodes or allocate()
local originals = hashes.originals or allocate()
local modes = hashes.modes or allocate()
+local variants = hashes.variants or allocate()
hashes.characters = characters
hashes.descriptions = descriptions
@@ -56,6 +57,7 @@ hashes.dynamics = dynamics
hashes.unicodes = unicodes
hashes.originals = originals
hashes.modes = modes
+hashes.variants = variants
local nodepool = nodes.pool
local dummyglyph = nodepool.register(nodepool.glyph())
@@ -94,6 +96,26 @@ setmetatableindex(identifiers, function(t,k)
return k == true and identifiers[currentfont()] or nulldata
end)
+do
+
+ -- to be used
+
+ local define = font.define
+ local setfont = font.setfont
+ local frozen = font.frozen
+
+ function fonts.reserveid(fontdata)
+ return define(fontdata or nulldata)
+ end
+
+ function fonts.enhanceid(id,fontdata)
+ if not frozen(id) then
+ setfont(id,fontdata)
+ end
+ end
+
+end
+
setmetatableindex(characters, function(t,k)
if k == true then
return characters[currentfont()]
@@ -303,6 +325,25 @@ setmetatableindex(modes, function(t,k)
end
end)
+setmetatableindex(variants, function(t,k)
+ if k == true then
+ return variants[currentfont()]
+ else
+ local resources = resources[k]
+ if resources then
+ local variants = resources.variants
+ if variants and next(variants) then
+ t[k] = variants
+ return variants
+ end
+ end
+ t[k] = false
+ return false
+ end
+end)
+
function font.getfont(id)
return identifiers[id]
end
+
+font.setfont = currentfont -- bah, no native 'setfont' as name
diff --git a/Master/texmf-dist/tex/context/base/font-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ini.lua
index c547f89acf9..c547f89acf9 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-ini.mkvi
index c04952a9e89..7e5851b2601 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ini.mkvi
@@ -382,27 +382,18 @@
\unexpanded\def\stopfont {\endgroup}
%D \macros
-%D {everybodyfont,Everybodyfont,everyglobalbodyfont}
+%D {everybodyfont,everyglobalbodyfont}
%D
%D Every change in bodyfont size has conseqences for the baseline
%D distance and skips between paragraphs. These are initialized
%D in other modules. Here we only provide the hooks that
%D garantees their handling.
-
+%D
%D At the system level one can initialize thing like:
%D
%D \starttyping
%D \appendtoks \setupspacing \to \everybodyfont
%D \stoptyping
-%D
-%D While users can add their own non standard commands like:
-%D
-%D \starttyping
-%D \EveryBodyFont{\message{changing to bodyfont \the\bodyfontsize}}
-%D \stoptyping
-%D
-%D Personnaly I never felt the need for such extensions, but
-%D at least its possible.
%D \macros
%D {globalbodyfontsize,localbodyfontsize,bodyfontsize}
@@ -495,7 +486,7 @@
\def\font_basics_set_mapped_fontsize#from%
{\ifcsname\??mappedfontsize\the\dimexpr#from\relax\endcsname
- \csname\??mappedfontsize\the\dimexpr#from\relax\endcsname\else#from%
+ \lastnamedcs\else#from%
\fi}
\installcorenamespace{fontbodyknown}
@@ -519,9 +510,9 @@
\def\font_helpers_check_relative_font_size#style%
{\edef\p_font_rscale
{\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname
- \csname\??fontclass\fontclass#style\s!rscale\endcsname
+ \lastnamedcs
\else\ifcsname\??fontclass\defaultfontclass#style\s!rscale\endcsname % brr
- \csname\??fontclass\defaultfontclass#style\s!rscale\endcsname
+ \lastnamedcs
\else
\v_font_rscale_default
\fi\fi}%
@@ -535,14 +526,14 @@
\def\font_rscale_xx#style%
{\ifcsname\??fontclass\fontclass#style\s!rscale\endcsname
- \csname\??fontclass\fontclass#style\s!rscale\endcsname
+ \lastnamedcs
\else
\v_font_rscale_default
\fi}
\def\font_rscale_mm
{\ifcsname\??fontclass\fontclass\s!mm\s!rscale\endcsname
- \csname\??fontclass\fontclass\s!mm\s!rscale\endcsname
+ \lastnamedcs
\else
\v_font_rscale_default
\fi}
@@ -592,8 +583,8 @@
\def\font_basics_define_fontstyle[#commands][#style]% style: rm ss tt ...
{\ifcsname\??fontstyleknown#style\endcsname \else % can be delayed till used (cg, hw)
\font_helpers_register_style{#style}%
- \t_font_style_commands\expandafter{\the\t_font_style_commands
- \m_font_style_command{#style}}%
+ % todo: apptoks
+ \t_font_style_commands\expandafter{\the\t_font_style_commands\m_font_style_command{#style}}%
\fi
\processcommalist[#commands]{\font_basics_define_fontstyle_indeed{#style}}}
@@ -612,6 +603,7 @@
\unexpanded\def\definefontalternative[#alternative]%
{\ifcsname\??fontalternativeknown#alternative\endcsname \else
\font_helpers_register_alternative{#alternative}%
+ % todo: apptoks
\t_font_alternative_commands\expandafter{\the\t_font_alternative_commands
\m_font_alternative_command{#alternative}}%
\fi
@@ -830,22 +822,46 @@
\fi
\c_font_feature_inheritance_mode\c_font_feature_inheritance_default}
+% \def\font_helpers_check_body_scale#fontsize% gets character (x xx a etc)
+% {\ifcsname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \else
+% \ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments\fontclass\s!default#fontsize\endcsname \else
+% \ifcsname\??fontenvironments \fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments \fontbody #fontsize\endcsname \else
+% \ifcsname\??fontenvironments \s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments \s!default#fontsize\endcsname \else
+% \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments\fontclass\s!default\s!text \endcsname \else
+% \ifcsname\??fontenvironments \s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
+% \csname\??fontenvironments \s!default\s!text \endcsname
+% \else
+% \settrue \c_font_body_scale
+% \let\f_font_body_scale\plusone
+% \fi\fi\fi\fi\fi\fi}
+
\def\font_helpers_check_body_scale#fontsize% gets character (x xx a etc)
- {\ifcsname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments\fontclass\fontbody #fontsize\endcsname \else
- \ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments\fontclass\s!default#fontsize\endcsname \else
- \ifcsname\??fontenvironments \fontbody #fontsize\endcsname \setfalse\c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments \fontbody #fontsize\endcsname \else
- \ifcsname\??fontenvironments \s!default#fontsize\endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments \s!default#fontsize\endcsname \else
- \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments\fontclass\s!default\s!text \endcsname \else
- \ifcsname\??fontenvironments \s!default\s!text \endcsname \settrue \c_font_body_scale \expandafter\let\expandafter\f_font_body_scale
- \csname\??fontenvironments \s!default\s!text \endcsname
+ {\ifcsname\??fontenvironments\fontclass\fontbody#fontsize\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \setfalse\c_font_body_scale % !
+ \else\ifcsname\??fontenvironments\fontclass\s!default#fontsize\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \settrue\c_font_body_scale
+ \else\ifcsname\??fontenvironments\fontbody#fontsize\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \setfalse\c_font_body_scale % !
+ \else\ifcsname\??fontenvironments\s!default#fontsize\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \settrue\c_font_body_scale
+ \else\ifcsname\??fontenvironments\fontclass\s!default\s!text\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \settrue\c_font_body_scale
+ \else\ifcsname\??fontenvironments\s!default\s!text\endcsname
+ \expandafter\let\expandafter\f_font_body_scale\lastnamedcs
+ \settrue\c_font_body_scale
\else
- \settrue \c_font_body_scale
\let\f_font_body_scale\plusone
+ \settrue\c_font_body_scale
\fi\fi\fi\fi\fi\fi}
%D The following macros are used at the \LUA\ end. Watch the \type {\normal}
@@ -1023,11 +1039,20 @@
% \ifcsname\??fontenvironments\s!default\s!text \endcsname \s!text \fi\fi
% \endcsname}
+% \def\currentfontbodysize % gets number (the normal sa 1 etc)
+% {\ifcsname\??fontenvironments\fontclass\s!default\somefontsize\endcsname
+% \csname\??fontenvironments\fontclass\s!default\somefontsize\endcsname
+% \else\ifcsname\??fontenvironments\s!default\somefontsize\endcsname
+% \csname\??fontenvironments\s!default\somefontsize\endcsname
+% \else
+% \somefontsize
+% \fi\fi}
+
\def\currentfontbodysize % gets number (the normal sa 1 etc)
{\ifcsname\??fontenvironments\fontclass\s!default\somefontsize\endcsname
- \csname\??fontenvironments\fontclass\s!default\somefontsize\endcsname
+ \lastnamedcs
\else\ifcsname\??fontenvironments\s!default\somefontsize\endcsname
- \csname\??fontenvironments\s!default\somefontsize\endcsname
+ \lastnamedcs
\else
\somefontsize
\fi\fi}
@@ -1041,6 +1066,13 @@
\s!default \fi\fi\fi\fi
\endcsname}
+\def\font_currentfontbodyscale % gets character (x xx a etc)
+ {\ifcsname\??fontenvironments\fontclass\s!default\fontsize\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments \s!default\fontsize\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments \s!default\s!text \endcsname\lastnamedcs\else
+ \csname\??fontenvironments \s!default \endcsname \fi\fi\fi\fi}
+
\def\currentfontscale % used in default definition
{\csname\??fontenvironments
\ifcsname\??fontenvironments\fontclass\s!default\xfontsize\endcsname\fontclass\s!default\fontsize\else
@@ -1050,6 +1082,13 @@
\s!default \fi\fi\fi\fi
\endcsname}
+\def\font_currentfontscale % used in default definition
+ {\ifcsname\??fontenvironments\fontclass\s!default\xfontsize\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments \s!default\xfontsize\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\fontclass\s!default\s!text \endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments \s!default\s!text \endcsname\lastnamedcs\else
+ \csname\??fontenvironments \s!default \endcsname \fi\fi\fi\fi}
+
\setvalue{\??fontenvironments\s!default}{1}
%D In the following macros we use \type{\currentxfontsize} to
@@ -1159,6 +1198,12 @@
\ifcsname\??fontenvironments\s!default #parameter\endcsname\s!default #parameter\fi\fi\fi\fi
\endcsname}
+\def\font_bodyfontvariable#parameter%
+ {\ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\fontclass #parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\s!default #parameter\endcsname\lastnamedcs\fi\fi\fi\fi}
+
\def\bodyfontsizevariable#size#parameter%
{\csname\??fontenvironments
\ifcsname\??fontenvironments\fontclass#size#parameter\endcsname\fontclass#size#parameter\else
@@ -1167,17 +1212,31 @@
\ifcsname\??fontenvironments\s!default #parameter\endcsname\s!default #parameter\fi\fi\fi\fi
\endcsname}
+\def\font_bodyfontsizevariable#size#parameter%
+ {\ifcsname\??fontenvironments\fontclass#size#parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\fontclass #parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments #size#parameter\endcsname\lastnamedcs\else
+ \ifcsname\??fontenvironments\s!default #parameter\endcsname\lastnamedcs\fi\fi\fi\fi}
+
\def\bodyfontinterlinespace{\bodyfontvariable\c!interlinespace} % used elsewhere
+% \def\bodyfontdimension#class#size#parameter#body%
+% {\the\dimexpr
+% \ifcsname\??fontenvironments #class#size#parameter\endcsname
+% \csname\??fontenvironments #class#size#parameter\endcsname \else
+% \ifcsname\??fontenvironments#class\s!default#parameter\endcsname
+% \csname\??fontenvironments#class\s!default#parameter\endcsname\dimexpr#body\relax\else % factor
+% \ifcsname\??fontenvironments #size#parameter\endcsname
+% \csname\??fontenvironments #size#parameter\endcsname \else
+% \csname\??fontenvironments \s!default#parameter\endcsname\dimexpr#body\relax\fi\fi\fi % factor
+% \relax}
+
\def\bodyfontdimension#class#size#parameter#body%
{\the\dimexpr
- \ifcsname\??fontenvironments #class#size#parameter\endcsname
- \csname\??fontenvironments #class#size#parameter\endcsname \else
- \ifcsname\??fontenvironments#class\s!default#parameter\endcsname
- \csname\??fontenvironments#class\s!default#parameter\endcsname\dimexpr#body\relax\else % factor
- \ifcsname\??fontenvironments #size#parameter\endcsname
- \csname\??fontenvironments #size#parameter\endcsname \else
- \csname\??fontenvironments \s!default#parameter\endcsname\dimexpr#body\relax\fi\fi\fi % factor
+ \ifcsname\??fontenvironments #class#size#parameter\endcsname \lastnamedcs \else
+ \ifcsname\??fontenvironments#class\s!default#parameter\endcsname \lastnamedcs\dimexpr#body\relax\else % factor
+ \ifcsname\??fontenvironments #size#parameter\endcsname \lastnamedcs \else
+ \lastnamedcs\dimexpr#body\relax\fi\fi\fi % factor
\relax}
\unexpanded\def\definebodyfontenvironment
@@ -1187,10 +1246,6 @@
\installcorenamespace{fontenvironmentknown}
-% \let\bodyfontenvironmentlist\empty % used in font-run (might change)
-
-\newtoks\bodyfontenvironmentlist
-
\def\font_helpers_register_environment#class#body%
{\expandafter\let\csname\??fontenvironmentknown#class#body\endcsname\empty}
@@ -1224,7 +1279,6 @@
\else
\normalizebodyfontsize\m_font_body_normalized\m_font_body
\font_basics_define_body_font_environment_size[#class][\m_font_body_normalized][#settings]%
- %\addtocommalist\m_font_body_normalized\bodyfontenvironmentlist
\clf_registerbodyfontsize{\m_font_body_normalized}%
\fi}
@@ -1402,7 +1456,7 @@
{\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[bwhatever][\s!rm][]}
+ {\font_basics_define_body_font_a[#whatever][\s!rm][]}
\unexpanded\def\font_basics_define_body_font_a[#whatever]%
{\doifelsenumber{#whatever}%
@@ -1596,6 +1650,13 @@
\fi
\fi}
+% \def\font_helpers_define_unknown_check_sizes#body#relativesize%
+% {\ifcsname\??fontenvironments\s!default#relativesize\endcsname % fontclass ?
+% % how \lastnamedcs here
+% \expandafter\normalizebodyfontsize\csname\??fontenvironments#body#relativesize\endcsname{\csname\??fontenvironments\s!default#relativesize\endcsname\dimexpr#body\relax}%
+% \settrue\c_font_defining_state
+% \fi}
+
\def\font_helpers_define_unknown_check_sizes#body#relativesize%
{\ifcsname\??fontenvironments\s!default#relativesize\endcsname % fontclass ?
\expandafter\normalizebodyfontsize\csname\??fontenvironments#body#relativesize\endcsname{\csname\??fontenvironments\s!default#relativesize\endcsname\dimexpr#body\relax}%
@@ -1606,10 +1667,17 @@
{\ifcsname\??fontdefinitions\s!default:#style\endcsname
\edef\m_font_asked_body{#body}%
\edef\m_font_asked_style{#style}%
- \csname\??fontdefinitions\s!default:#style\endcsname % {#body}{#style}%
+ \lastnamedcs
\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
@@ -1627,6 +1695,20 @@
%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%
+% {\ifcsname\??fontbodyknown#body\endcsname \else
+% % we need to check the relative sizes for this body
+% \font_helpers_define_unknown_font{#body}%
+% \fi%
+% \ifcsname\??fontbodyknown#body\endcsname % always true now
+% \font_basics_complete_switch{#body}%
+% \localbodyfontsize#body\relax
+% \normalizebodyfontsize\normalizedbodyfontsize\localbodyfontsize
+% \font_helpers_check_bodyfont_environment\normalizedbodyfontsize\normalizedbodyfontsize % !!
+% \else
+% \showmessage\m!fonts4{#body}%
+% \fi}
+
\unexpanded\def\font_basics_switch_points#body%
{\ifcsname\??fontbodyknown#body\endcsname \else
% we need to check the relative sizes for this body
@@ -1643,7 +1725,7 @@
\unexpanded\def\font_basics_switch_style#style%
{\ifcsname\??fontstyle#style\endcsname
- \csname\??fontstyle#style\endcsname
+ \lastnamedcs
\edef\fontstyle{#style}%
\ifmmode\mr\fi % in order to be compatible with \rm in math mode
% \the\everybodyfont % cleaner, in setting size as well as style
@@ -1694,7 +1776,7 @@
\unexpanded\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{\bodyfontvariable\m_font_keyword}%
+ \edef\m_font_step{\font_bodyfontvariable\m_font_keyword}%
\normalexpanded{\font_helpers_set_font_set_font_option_body{#method}{\m_font_step}{#message}}%
\else\ifx\m_font_keyword\v!reset
\let\fontstyle\empty % new 31/7/2006
@@ -1835,7 +1917,7 @@
\def\font_helpers_check_strategy_class_a % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname
\setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_class_b
\fi}
@@ -1843,7 +1925,7 @@
\def\font_helpers_check_strategy_class_b % --- --- --- def % pt tt bf
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_class_c
\fi}
@@ -1851,7 +1933,7 @@
\def\font_helpers_check_strategy_class_c % --- --- def --- % pt tt tf a
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_class_d
\fi}
@@ -1859,7 +1941,7 @@
\def\font_helpers_check_strategy_class_d % --- --- def def % pt tt tf
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_class_e
\fi}
@@ -1867,16 +1949,15 @@
\def\font_helpers_check_strategy_class_e % --- def def def % pt rm tf
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_class_f
- % \expandafter\font_helpers_check_strategy_a
\fi}
\def\font_helpers_check_strategy_class_f % def def def def % rm tf
{\ifcsname\??fontinstanceready\fontclass-\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_a
\fi}
@@ -1886,7 +1967,7 @@
\def\font_helpers_check_strategy_a % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname
\setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\fontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_b
\fi}
@@ -1894,7 +1975,7 @@
\def\font_helpers_check_strategy_b % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontbody-\fontstyle-\fontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_c
\fi}
@@ -1902,7 +1983,7 @@
\def\font_helpers_check_strategy_c % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\fontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_d
\fi}
@@ -1910,7 +1991,7 @@
\def\font_helpers_check_strategy_d % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\fontbody-\fontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_e
\fi}
@@ -1918,7 +1999,7 @@
\def\font_helpers_check_strategy_e % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\else
\expandafter\font_helpers_check_strategy_f
\fi}
@@ -1926,7 +2007,7 @@
\def\font_helpers_check_strategy_f % --- --- --- --- % pt tt bf a
{\ifcsname\??fontinstanceready\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
\settrue\c_font_auto_size
- \csname\??fontinstanceready\defaultfontbody-\defaultfontstyle-\defaultfontalternative-\defaultfontsize-\fontface\endcsname
+ \lastnamedcs
\fi}
\let\applyfontstrategies \font_helpers_check_strategy_a
@@ -2095,17 +2176,32 @@
}%
\global\expandafter\let\csname\??fontbodyfaces\fontbody\endcsname\font_basics_set_faces}
-\def\currentbodyfontdimension#parameter%
+% \def\currentbodyfontdimension#parameter%
+% {\the\dimexpr
+% \ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname
+% \csname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname \else
+% \ifcsname\??fontenvironments\fontclass\s!default #parameter\endcsname
+% \csname\??fontenvironments\fontclass\s!default #parameter\endcsname
+% \dimexpr\normalizedbodyfontsize\relax \else % factor
+% \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname
+% \csname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname \else
+% \csname\??fontenvironments \s!default #parameter\endcsname
+% \dimexpr\normalizedbodyfontsize\relax \fi\fi\fi % factor
+% \relax}
+
+\def\currentbodyfontdimension#parameter% there can be factors here
{\the\dimexpr
\ifcsname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname
- \csname\??fontenvironments\fontclass\normalizedbodyfontsize#parameter\endcsname \else
- \ifcsname\??fontenvironments\fontclass\s!default #parameter\endcsname
- \csname\??fontenvironments\fontclass\s!default #parameter\endcsname
- \dimexpr\normalizedbodyfontsize\relax \else % factor
- \ifcsname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname
- \csname\??fontenvironments \normalizedbodyfontsize#parameter\endcsname \else
- \csname\??fontenvironments \s!default #parameter\endcsname
- \dimexpr\normalizedbodyfontsize\relax \fi\fi\fi % factor
+ \lastnamedcs
+ \else\ifcsname\??fontenvironments\fontclass\s!default#parameter\endcsname
+ \lastnamedcs
+ \dimexpr\normalizedbodyfontsize\relax
+ \else\ifcsname\??fontenvironments\normalizedbodyfontsize#parameter\endcsname
+ \lastnamedcs
+ \else
+ \csname\??fontenvironments\s!default#parameter\endcsname
+ \dimexpr\normalizedbodyfontsize\relax
+ \fi\fi\fi
\relax}
%D \macros
@@ -2161,7 +2257,7 @@
\the\everysetupbodyfont}}
\unexpanded\def\font_basics_switchtobodyfont#specification%
- {\edef\m_font_step{\bodyfontvariable{#specification}}%
+ {\edef\m_font_step{\font_bodyfontvariable{#specification}}%
\ifx\m_font_step\empty
\font_helpers_set_font\zerocount{#specification}%
\else
@@ -2189,7 +2285,8 @@
\unexpanded\def\fastswitchtobodyfont#name%
{\ifcsname\??fontenvironments\normalizedbodyfontsize#name\endcsname
- \edef\futurebodyfontsize{\csname\??fontenvironments\normalizedbodyfontsize#name\endcsname}%
+ %\edef\futurebodyfontsize{\csname\??fontenvironments\normalizedbodyfontsize#name\endcsname}%
+ \edef\futurebodyfontsize{\lastnamedcs}%
\ifcsname\??fontbodyknown\futurebodyfontsize\endcsname
\font_basics_complete_switch\futurebodyfontsize
\localbodyfontsize\futurebodyfontsize\relax
@@ -2312,7 +2409,7 @@
\newmacro\m_font_step
\def\font_helpers_set_bodyfont_step#step%
- {\edef\m_font_step{\bodyfontvariable{#step}}% not always \cs
+ {\edef\m_font_step{\font_bodyfontvariable{#step}}% not always \cs
\font_basics_switch_points\m_font_step
\font_basics_switch_style \fontstyle}
@@ -2405,7 +2502,7 @@
\unexpanded\def\predefinedfont[#1]% global !
{\ifcsname\??predefinedfont#1\endcsname
- \csname\??predefinedfont#1\endcsname
+ \lastnamedcs
\else
\font_basics_predefined{#1}%
\fi}
diff --git a/Master/texmf-dist/tex/context/base/font-inj.lua b/Master/texmf-dist/tex/context/base/mkiv/font-inj.lua
index 332e92033fd..89370210d41 100644
--- a/Master/texmf-dist/tex/context/base/font-inj.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-inj.lua
@@ -8,7 +8,16 @@ if not modules then modules = { } end modules ['font-inj'] = {
-- This property based variant is not faster but looks nicer than the attribute one. We
-- need to use rawget (which is apbout 4 times slower than a direct access but we cannot
--- get/set that one for our purpose!
+-- get/set that one for our purpose! This version does a bit more with discretionaries
+-- (and Kai has tested it with his collection of weird fonts.)
+
+-- There is some duplicate code here (especially in the the pre/post/replace branches) but
+-- we go for speed. We could store a list of glyph and mark nodes when registering but it's
+-- cleaner to have an identification pass here. Also, I need to keep tracing in mind so
+-- being too clever here is dangerous.
+
+-- The subtype test is not needed as there will be no (new) properties set, given that we
+-- reset the properties.
if not nodes.properties then return end
@@ -65,7 +74,6 @@ local nofregisteredkerns = 0
local nofregisteredpairs = 0
local nofregisteredmarks = 0
local nofregisteredcursives = 0
------ markanchors = { } -- one base can have more marks
local keepregisteredcounts = false
function injections.keepcounts()
@@ -80,13 +88,43 @@ function injections.resetcounts()
keepregisteredcounts = false
end
--- We need to make sure that a possible metatable will not kick in
--- unexpectedly.
+-- We need to make sure that a possible metatable will not kick in unexpectedly.
+
+-- function injections.reset(n)
+-- local p = rawget(properties,n)
+-- if p and rawget(p,"injections") then
+-- p.injections = nil
+-- end
+-- end
+
+-- function injections.copy(target,source)
+-- local sp = rawget(properties,source)
+-- if sp then
+-- local tp = rawget(properties,target)
+-- local si = rawget(sp,"injections")
+-- if si then
+-- si = fastcopy(si)
+-- if tp then
+-- tp.injections = si
+-- else
+-- propertydata[target] = {
+-- injections = si,
+-- }
+-- end
+-- else
+-- if tp then
+-- tp.injections = nil
+-- end
+-- end
+-- end
+-- end
function injections.reset(n)
local p = rawget(properties,n)
- if p and rawget(p,"injections") then
- p.injections = nil
+ if p then
+ p.injections = false -- { }
+ else
+ properties[n] = false -- { injections = { } }
end
end
@@ -104,10 +142,17 @@ function injections.copy(target,source)
injections = si,
}
end
+ elseif tp then
+ tp.injections = false -- { }
else
- if tp then
- tp.injections = nil
- end
+ properties[target] = { injections = { } }
+ end
+ else
+ local tp = rawget(properties,target)
+ if tp then
+ tp.injections = false -- { }
+ else
+ properties[target] = false -- { injections = { } }
end
end
end
@@ -146,7 +191,8 @@ end
function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext) -- hm: nuts or nodes
local dx = factor*(exit[1]-entry[1])
local dy = -factor*(exit[2]-entry[2])
- local ws, wn = tfmstart.width, tfmnext.width
+ local ws = tfmstart.width
+ local wn = tfmnext.width
nofregisteredcursives = nofregisteredcursives + 1
if rlmode < 0 then
dx = -(dx + wn)
@@ -195,7 +241,10 @@ function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmne
end
function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2lflag & tfmchr not used
- local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4]
+ local x = factor*spec[1]
+ local y = factor*spec[2]
+ local w = factor*spec[3]
+ local h = factor*spec[4]
if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then -- okay?
local yoffset = y - h
local leftkern = x -- both kerns are set in a pair kern compared
@@ -205,9 +254,12 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
if rlmode and rlmode < 0 then
leftkern, rightkern = rightkern, leftkern
end
+ if not injection then
+ injection = "injections"
+ end
local p = rawget(properties,current)
if p then
- local i = rawget(p,"injections")
+ local i = rawget(p,injection)
if i then
if leftkern ~= 0 then
i.leftkern = (i.leftkern or 0) + leftkern
@@ -219,19 +271,19 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
i.yoffset = (i.yoffset or 0) + yoffset
end
elseif leftkern ~= 0 or rightkern ~= 0 then
- p.injections = {
+ p[injection] = {
leftkern = leftkern,
rightkern = rightkern,
yoffset = yoffset,
}
else
- p.injections = {
+ p[injection] = {
yoffset = yoffset,
}
end
elseif leftkern ~= 0 or rightkern ~= 0 then
properties[current] = {
- injections = {
+ [injection] = {
leftkern = leftkern,
rightkern = rightkern,
yoffset = yoffset,
@@ -239,7 +291,7 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
}
else
properties[current] = {
- injections = {
+ [injection] = {
yoffset = yoffset,
},
}
@@ -250,10 +302,9 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
return x, y, w, h -- no bound
end
--- this needs checking for rl < 0 but it is unlikely that a r2l script
--- uses kernclasses between glyphs so we're probably safe (KE has a
--- problematic font where marks interfere with rl < 0 in the previous
--- case)
+-- This needs checking for rl < 0 but it is unlikely that a r2l script uses kernclasses between
+-- glyphs so we're probably safe (KE has a problematic font where marks interfere with rl < 0 in
+-- the previous case)
function injections.setkern(current,factor,rlmode,x,injection)
local dx = factor * x
@@ -285,7 +336,7 @@ function injections.setkern(current,factor,rlmode,x,injection)
end
end
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=baseanchor, ma=markanchor
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=baseanchor, ma=markanchor
local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
nofregisteredmarks = nofregisteredmarks + 1
-- markanchors[nofregisteredmarks] = base
@@ -293,14 +344,20 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
dx = tfmbase.width - dx -- see later commented ox
end
local p = rawget(properties,start)
+ -- hm, dejavu serif does a sloppy mark2mark before mark2base
if p then
local i = rawget(p,"injections")
if i then
- i.markx = dx
- i.marky = dy
- i.markdir = rlmode or 0
- i.markbase = nofregisteredmarks
- i.markbasenode = base
+ if i.markmark then
+ -- out of order mkmk: yes or no or option
+ else
+ i.markx = dx
+ i.marky = dy
+ i.markdir = rlmode or 0
+ i.markbase = nofregisteredmarks
+ i.markbasenode = base
+ i.markmark = mkmk
+ end
else
p.injections = {
markx = dx,
@@ -308,6 +365,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
markdir = rlmode or 0,
markbase = nofregisteredmarks,
markbasenode = base,
+ markmark = mkmk,
}
end
else
@@ -318,6 +376,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=basean
markdir = rlmode or 0,
markbase = nofregisteredmarks,
markbasenode = base,
+ markmark = mkmk,
},
}
end
@@ -345,10 +404,11 @@ local function show(n,what,nested,symbol)
local markx = i.markx or 0
local marky = i.marky or 0
local markdir = i.markdir or 0
- local markbase = i.markbase or 0 -- will be markbasenode
+ local markbase = i.markbase or 0
local cursivex = i.cursivex or 0
local cursivey = i.cursivey or 0
local ligaindex = i.ligaindex or 0
+ local cursbase = i.cursiveanchor
local margin = nested and 4 or 2
--
if rightkern ~= 0 or yoffset ~= 0 then
@@ -360,7 +420,13 @@ local function show(n,what,nested,symbol)
report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase ~= 0 and "yes" or "no")
end
if cursivex ~= 0 or cursivey ~= 0 then
- report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
end
if ligaindex ~= 0 then
report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
@@ -430,30 +496,36 @@ local function show_result(head)
end
end
--- we could also check for marks here but maybe not all are registered (needs checking)
-
-local function collect_glyphs_1(head)
- local glyphs, nofglyphs = { }, 0
- local marks, nofmarks = { }, 0
+local function collect_glyphs(head,offsets)
+ local glyphs, glyphi, nofglyphs = { }, { }, 0
+ local marks, marki, nofmarks = { }, { }, 0
local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do -- only needed for relevant fonts
- if getsubtype(n) < 256 then
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm and tm[getchar(n)] then
- nofmarks = nofmarks + 1
- marks[nofmarks] = n
- else
- nofglyphs = nofglyphs + 1
- glyphs[nofglyphs] = n
+ local n = head
+
+ local function identify(n,what)
+ local f = getfont(n)
+ if f ~= nf then
+ nf = f
+ -- other hash in ctx:
+ tm = fontdata[nf].resources
+ if tm then
+ tm = tm.marks
end
+ end
+ if tm and tm[getchar(n)] then
+ nofmarks = nofmarks + 1
+ marks[nofmarks] = n
+ marki[nofmarks] = "injections"
+ else
+ nofglyphs = nofglyphs + 1
+ glyphs[nofglyphs] = n
+ glyphi[nofglyphs] = what
+ end
+ if offsets then
-- yoffsets can influence curs steps
local p = rawget(properties,n)
if p then
- local i = rawget(p,"injections")
+ local i = rawget(p,what)
if i then
local yoffset = i.yoffset
if yoffset and yoffset ~= 0 then
@@ -463,38 +535,50 @@ local function collect_glyphs_1(head)
end
end
end
- return glyphs, nofglyphs, marks, nofmarks
-end
-local function collect_glyphs_2(head)
- local glyphs, nofglyphs = { }, 0
- local marks, nofmarks = { }, 0
- local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n) < 256 then
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm and tm[getchar(n)] then
- nofmarks = nofmarks + 1
- marks[nofmarks] = n
- else
- nofglyphs = nofglyphs + 1
- glyphs[nofglyphs] = n
- end
+ while n do -- only needed for relevant fonts
+ local id = getid(n)
+ if id == glyph_code then
+ identify(n,"injections")
+ elseif id == disc_code then
+ local d = getfield(n,"pre")
+ if d then
+ for n in traverse_id(glyph_code,d) do
+ if getsubtype(n) < 256 then
+ identify(n,"preinjections")
+ end
+ end
+ end
+ local d = getfield(n,"post")
+ if d then
+ for n in traverse_id(glyph_code,d) do
+ if getsubtype(n) < 256 then
+ identify(n,"postinjections")
+ end
+ end
+ end
+ local d = getfield(n,"replace")
+ if d then
+ for n in traverse_id(glyph_code,d) do
+ if getsubtype(n) < 256 then
+ identify(n,"replaceinjections")
+ end
+ end
+ end
end
+ n = getnext(n)
end
- return glyphs, nofglyphs, marks, nofmarks
+
+ return glyphs, glyphi, nofglyphs, marks, marki, nofmarks
end
-local function inject_marks(marks,nofmarks)
+local function inject_marks(marks,marki,nofmarks)
for i=1,nofmarks do
- local n = marks[i]
+ local n = marks[i]
local pn = rawget(properties,n)
if pn then
- pn = rawget(pn,"injections")
+ local ni = marki[i]
+ local pn = rawget(pn,ni)
if pn then
local p = pn.markbasenode
if p then
@@ -503,7 +587,7 @@ local function inject_marks(marks,nofmarks)
local rightkern = nil
local pp = rawget(properties,p)
if pp then
- pp = rawget(pp,"injections")
+ pp = rawget(pp,ni)
if pp then
rightkern = pp.rightkern
end
@@ -516,13 +600,22 @@ local function inject_marks(marks,nofmarks)
else
-- kern(x) glyph(p) kern(w-x) mark(n)
-- ox = px - getfield(p,"width") + pn.markx - pp.leftkern
- local leftkern = pp.leftkern
- if leftkern then
- ox = px - pn.markx
+ --
+ -- According to Kai we don't need to handle leftkern here but I'm
+ -- pretty sure I've run into a case where it was needed so maybe
+ -- some day we need something more clever here.
+ --
+ if false then
+ -- a mark with kerning
+ local leftkern = pp.leftkern
+ if leftkern then
+ ox = px - pn.markx - leftkern
+ else
+ ox = px - pn.markx
+ end
else
- ox = px - pn.markx - leftkern
+ ox = px - pn.markx
end
--- report_injections("l2r case 1: %p",ox)
end
else
-- we need to deal with fonts that have marks with width
@@ -548,12 +641,13 @@ local function inject_marks(marks,nofmarks)
setfield(n,"xoffset",ox)
--
local py = getfield(p,"yoffset")
- local oy = 0
- if marks[p] then
- oy = py + pn.marky
- else
- oy = getfield(n,"yoffset") + py + pn.marky
- end
+-- local oy = 0
+-- if marks[p] then
+-- oy = py + pn.marky
+-- else
+-- oy = getfield(n,"yoffset") + py + pn.marky
+-- end
+ local oy = getfield(n,"yoffset") + py + pn.marky
setfield(n,"yoffset",oy)
else
-- normally this can't happen (only when in trace mode which is a special case anyway)
@@ -564,14 +658,14 @@ local function inject_marks(marks,nofmarks)
end
end
-local function inject_cursives(glyphs,nofglyphs)
+local function inject_cursives(glyphs,glyphi,nofglyphs)
local cursiveanchor, lastanchor = nil, nil
local minc, maxc, last = 0, 0, nil
for i=1,nofglyphs do
- local n = glyphs[i]
+ local n = glyphs[i]
local pn = rawget(properties,n)
if pn then
- pn = rawget(pn,"injections")
+ pn = rawget(pn,glyphi[i])
end
if pn then
local cursivex = pn.cursivex
@@ -630,7 +724,7 @@ local function inject_cursives(glyphs,nofglyphs)
-- if maxc > 0 and not cursiveanchor then
-- local ny = getfield(n,"yoffset")
-- for i=maxc,minc,-1 do
- -- local ti = glyphs[i]
+ -- local ti = glyphs[i][1]
-- ny = ny + properties[ti].cursivedy
-- setfield(ti,"yoffset",ny) -- why not add ?
-- end
@@ -647,23 +741,67 @@ local function inject_cursives(glyphs,nofglyphs)
end
end
-local function inject_kerns(head,list,length)
- -- todo: pre/post/replace
+-- G +D-pre G
+-- D-post+
+-- +D-replace+
+--
+-- G +D-pre +D-pre
+-- D-post +D-post
+-- +D-replace +D-replace
+
+local function inject_kerns(head,glist,ilist,length) -- not complete ! compare with inject_kerns_only (but unlikely disc here)
for i=1,length do
- local n = list[i]
+ local n = glist[i]
local pn = rawget(properties,n)
if pn then
- local i = rawget(pn,"injections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- insert_node_before(head,n,newkern(leftkern)) -- type 0/2
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern)) -- type 0/2
- end
- end
+ local dp = nil
+ local dr = nil
+ local ni = ilist[i]
+ local p = nil
+ if ni == "injections" then
+ p = getprev(n)
+ if p then
+ local id = getid(p)
+ if id == disc_code then
+ dp = getfield(p,"post")
+ dr = getfield(p,"replace")
+ end
+ end
+ end
+ if dp then
+ local i = rawget(pn,"postinjections")
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ local t = find_tail(dp)
+ insert_node_after(dp,t,newkern(leftkern))
+ setfield(p,"post",dp) -- currently we need to force a tail refresh
+ end
+ end
+ end
+ if dr then
+ local i = rawget(pn,"replaceinjections")
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ local t = find_tail(dr)
+ insert_node_after(dr,t,newkern(leftkern))
+ setfield(p,"replace",dr) -- currently we need to force a tail refresh
+ end
+ end
+ else
+ local i = rawget(pn,ni)
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_before(head,n,newkern(leftkern)) -- type 0/2
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(head,n,newkern(rightkern)) -- type 0/2
+ end
+ end
+ end
end
end
end
@@ -673,23 +811,18 @@ local function inject_everything(head,where)
if trace_injections then
trace(head,"everything")
end
- local glyphs, nofglyphs, marks, nofmarks
- if nofregisteredpairs > 0 then
- glyphs, nofglyphs, marks, nofmarks = collect_glyphs_1(head)
- else
- glyphs, nofglyphs, marks, nofmarks = collect_glyphs_2(head)
- end
+ local glyphs, glyphi, nofglyphs, marks, marki, nofmarks = collect_glyphs(head,nofregisteredpairs > 0)
if nofglyphs > 0 then
if nofregisteredcursives > 0 then
- inject_cursives(glyphs,nofglyphs)
+ inject_cursives(glyphs,glyphi,nofglyphs)
end
if nofregisteredmarks > 0 then -- and nofmarks > 0
- inject_marks(marks,nofmarks)
+ inject_marks(marks,marki,nofmarks)
end
- inject_kerns(head,glyphs,nofglyphs)
+ inject_kerns(head,glyphs,glyphi,nofglyphs)
end
if nofmarks > 0 then
- inject_kerns(head,marks,nofmarks)
+ inject_kerns(head,marks,marki,nofmarks)
end
if keepregisteredcounts then
keepregisteredcounts = false
@@ -702,13 +835,21 @@ local function inject_everything(head,where)
return tonode(head), true
end
+-- G +D-pre G
+-- D-post+
+-- +D-replace+
+--
+-- G +D-pre +D-pre
+-- D-post +D-post
+-- +D-replace +D-replace
+
local function inject_kerns_only(head,where)
head = tonut(head)
if trace_injections then
trace(head,"kerns")
end
local n = head
- local p = nil
+ local p = nil -- disc node when non-nil
while n do
local id = getid(n)
if id == glyph_code then
@@ -724,6 +865,7 @@ local function inject_kerns_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+ setfield(p,"post",d) -- currently we need to force a tail refresh
end
end
end
@@ -735,6 +877,7 @@ local function inject_kerns_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+ setfield(p,"replace",d) -- currently we need to force a tail refresh
end
end
else
@@ -747,6 +890,7 @@ local function inject_kerns_only(head,where)
end
end
else
+ -- this is the most common case
local i = rawget(pn,"injections")
if i then
local leftkern = i.leftkern
@@ -756,8 +900,6 @@ local function inject_kerns_only(head,where)
end
end
end
- else
- break
end
p = nil
elseif id == disc_code then
@@ -812,7 +954,7 @@ local function inject_kerns_only(head,where)
local h = d
for n in traverse_id(glyph_code,d) do
if getsubtype(n) < 256 then
- local pn = rawget(properties,n) -- why can it be empty { }
+ local pn = rawget(properties,n)
if pn then
local i = rawget(pn,"replaceinjections")
if i then
@@ -850,9 +992,8 @@ local function inject_pairs_only(head,where)
if trace_injections then
trace(head,"pairs")
end
- --
local n = head
- local p = nil
+ local p = nil -- disc node when non-nil
while n do
local id = getid(n)
if id == glyph_code then
@@ -868,6 +1009,7 @@ local function inject_pairs_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+ setfield(p,"post",d) -- currently we need to force a tail refresh
end
-- local rightkern = i.rightkern
-- if rightkern and rightkern ~= 0 then
@@ -884,6 +1026,7 @@ local function inject_pairs_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+ setfield(p,"replace",d) -- currently we need to force a tail refresh
end
-- local rightkern = i.rightkern
-- if rightkern and rightkern ~= 0 then
@@ -909,24 +1052,22 @@ local function inject_pairs_only(head,where)
-- this is the most common case
local i = rawget(pn,"injections")
if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
- insert_node_before(head,n,newkern(leftkern))
+ head = insert_node_before(head,n,newkern(leftkern))
end
local rightkern = i.rightkern
if rightkern and rightkern ~= 0 then
insert_node_after(head,n,newkern(rightkern))
n = getnext(n) -- to be checked
end
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
end
end
end
- else
- break
end
p = nil
elseif id == disc_code then
@@ -935,16 +1076,12 @@ local function inject_pairs_only(head,where)
local h = d
for n in traverse_id(glyph_code,d) do
if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"preinjections")
+ local pn = rawget(properties,n)
+ if pn then
+ local i = rawget(pn,"preinjections")
if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
local leftkern = i.leftkern
- if leftkern ~= 0 then
+ if leftkern and leftkern ~= 0 then
h = insert_node_before(h,n,newkern(leftkern))
end
local rightkern = i.rightkern
@@ -952,6 +1089,10 @@ local function inject_pairs_only(head,where)
insert_node_after(head,n,newkern(rightkern))
n = getnext(n) -- to be checked
end
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
end
end
else
@@ -967,14 +1108,10 @@ local function inject_pairs_only(head,where)
local h = d
for n in traverse_id(glyph_code,d) do
if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"postinjections")
+ local pn = rawget(properties,n)
+ if pn then
+ local i = rawget(pn,"postinjections")
if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
h = insert_node_before(h,n,newkern(leftkern))
@@ -984,6 +1121,10 @@ local function inject_pairs_only(head,where)
insert_node_after(head,n,newkern(rightkern))
n = getnext(n) -- to be checked
end
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
end
end
else
@@ -999,14 +1140,10 @@ local function inject_pairs_only(head,where)
local h = d
for n in traverse_id(glyph_code,d) do
if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"replaceinjections")
+ local pn = rawget(properties,n)
+ if pn then
+ local i = rawget(pn,"replaceinjections")
if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
local leftkern = i.leftkern
if leftkern and leftkern ~= 0 then
h = insert_node_before(h,n,newkern(leftkern))
@@ -1016,6 +1153,10 @@ local function inject_pairs_only(head,where)
insert_node_after(head,n,newkern(rightkern))
n = getnext(n) -- to be checked
end
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
end
end
else
@@ -1042,7 +1183,7 @@ local function inject_pairs_only(head,where)
return tonode(head), true
end
-function injections.handler(head,where) -- optimize for n=1 ?
+function injections.handler(head,where)
if nofregisteredmarks > 0 or nofregisteredcursives > 0 then
return inject_everything(head,where)
elseif nofregisteredpairs > 0 then
diff --git a/Master/texmf-dist/tex/context/base/font-ldr.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ldr.lua
index 175b4d0cc50..175b4d0cc50 100644
--- a/Master/texmf-dist/tex/context/base/font-ldr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ldr.lua
diff --git a/Master/texmf-dist/tex/context/base/font-lib.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-lib.mkvi
index 9cc14e02f23..7bb042a5943 100644
--- a/Master/texmf-dist/tex/context/base/font-lib.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-lib.mkvi
@@ -22,6 +22,16 @@
\registerctxluafile{font-agl}{1.001} % if needed we can comment this and delay loading
\registerctxluafile{font-cid}{1.001} % cid maps
\registerctxluafile{font-map}{1.001}
+
+% the otf font loader:
+
+\registerctxluafile{font-otr}{1.001} % opentype fontloader
+\registerctxluafile{font-cff}{1.001} % quadratic outlines
+\registerctxluafile{font-ttf}{1.001} % cubic outlines
+%registerctxluafile{font-tmp}{1.001} % temporary placeholder
+\registerctxluafile{font-dsp}{1.001} % ... for this one
+\registerctxluafile{font-off}{1.001} % the old loader
+
\registerctxluafile{font-syn}{1.001}
\registerctxluafile{font-tfm}{1.001}
@@ -36,28 +46,26 @@
\registerctxluafile{font-oti}{1.001} % otf initialization
\registerctxluafile{font-ott}{1.001} % otf tables (first)
-\registerctxluafile{font-otf}{1.001} % otf main
-\registerctxluafile{font-otb}{1.001} % otf main base
-% \doiffileelse{font-inj.lua}
-% {\registerctxluafile{font-inj}{1.001}} % new method (for the moment only local)
-% {\registerctxluafile{node-inj}{1.001}} % old method
+\registerctxluafile{font-otl}{1.001}
+\registerctxluafile{font-oto}{1.001}
+\registerctxluafile{font-otj}{1.001}
+\registerctxluafile{font-oup}{1.001}
+\registerctxluafile{font-ota}{1.001}
+\registerctxluafile{font-ots}{1.001}
+\registerctxluafile{font-otd}{1.001}
+\registerctxluafile{font-otc}{1.001}
+\registerctxluafile{font-oth}{1.001}
+\registerctxluafile{font-osd}{1.001}
-\registerctxluafile{font-inj}{1.001} % the old method (lacks some features)
-
-\registerctxluafile{font-ota}{1.001} % otf analyzers
-\registerctxluafile{font-otn}{1.001} % otf main node
-\registerctxluafile{font-otd}{1.001} % otf dynamics (does an overload)
-\registerctxluafile{font-otp}{1.001} % otf pack
-\registerctxluafile{font-otc}{1.001} % otf context
-\registerctxluafile{font-oth}{1.001} % otf helpers
-
-\registerctxluafile{font-odv}{1.001} % otf devanagari (experimental)
+% so far
\registerctxluafile{font-pat}{1.001} % patchers
\registerctxluafile{node-fnt}{1.001} % here
+\registerctxluafile{font-mps}{1.001} % outline fun
+
\registerctxluafile{font-lua}{1.001}
\registerctxluafile{font-vf} {1.001}
diff --git a/Master/texmf-dist/tex/context/base/font-log.lua b/Master/texmf-dist/tex/context/base/mkiv/font-log.lua
index 41da75378f9..092b5a62ea9 100644
--- a/Master/texmf-dist/tex/context/base/font-log.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-log.lua
@@ -64,6 +64,8 @@ function loggers.format(name) -- should be avoided
return usedfonts[name] or "unknown"
end
+-- maybe move this to font-ctx.lua
+
statistics.register("loaded fonts", function()
if next(usedfonts) then
local t, n = { }, 0
diff --git a/Master/texmf-dist/tex/context/base/font-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/font-lua.lua
index 6fbbcf17e4e..6fbbcf17e4e 100644
--- a/Master/texmf-dist/tex/context/base/font-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-lua.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-map.lua b/Master/texmf-dist/tex/context/base/mkiv/font-map.lua
new file mode 100644
index 00000000000..509e7510710
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-map.lua
@@ -0,0 +1,517 @@
+if not modules then modules = { } end modules ['font-map'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local tonumber, next, type = tonumber, next, type
+
+local match, format, find, concat, gsub, lower = string.match, string.format, string.find, table.concat, string.gsub, string.lower
+local P, R, S, C, Ct, Cc, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cc, lpeg.match
+local utfbyte = utf.byte
+local floor = math.floor
+local formatters = string.formatters
+
+local trace_loading = false trackers.register("fonts.loading", function(v) trace_loading = v end)
+local trace_mapping = false trackers.register("fonts.mapping", function(v) trace_unimapping = v end)
+
+local report_fonts = logs.reporter("fonts","loading") -- not otf only
+
+local force_ligatures = false directives.register("fonts.mapping.forceligatures",function(v) force_ligatures = v end)
+
+local fonts = fonts or { }
+local mappings = fonts.mappings or { }
+fonts.mappings = mappings
+
+local allocate = utilities.storage.allocate
+
+--[[ldx--
+<p>Eventually this code will disappear because map files are kind
+of obsolete. Some code may move to runtime or auxiliary modules.</p>
+<p>The name to unciode related code will stay of course.</p>
+--ldx]]--
+
+-- local function loadlumtable(filename) -- will move to font goodies
+-- local lumname = file.replacesuffix(file.basename(filename),"lum")
+-- local lumfile = resolvers.findfile(lumname,"map") or ""
+-- if lumfile ~= "" and lfs.isfile(lumfile) then
+-- if trace_loading or trace_mapping then
+-- report_fonts("loading map table %a",lumfile)
+-- end
+-- lumunic = dofile(lumfile)
+-- return lumunic, lumfile
+-- end
+-- end
+
+local hex = R("AF","09")
+----- hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+----- hexsix = (hex*hex*hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+local hexfour = (hex*hex*hex^-2) / function(s) return tonumber(s,16) end
+local hexsix = (hex*hex*hex^-4) / function(s) return tonumber(s,16) end
+local dec = (R("09")^1) / tonumber
+local period = P(".")
+local unicode = (P("uni") + P("UNI")) * (hexfour * (period + P(-1)) * Cc(false) + Ct(hexfour^1) * Cc(true)) -- base planes
+local ucode = (P("u") + P("U") ) * (hexsix * (period + P(-1)) * Cc(false) + Ct(hexsix ^1) * Cc(true)) -- extended
+local index = P("index") * dec * Cc(false)
+
+local parser = unicode + ucode + index
+
+local parsers = { }
+
+local function makenameparser(str)
+ if not str or str == "" then
+ return parser
+ else
+ local p = parsers[str]
+ if not p then
+ p = P(str) * period * dec * Cc(false)
+ parsers[str] = p
+ end
+ return p
+ end
+end
+
+local f_single = formatters["%04X"]
+local f_double = formatters["%04X%04X"]
+
+-- 0.684 0.661 0,672 0.650 : cache at lua end (more mem)
+-- 0.682 0,672 0.698 0.657 : no cache (moderate mem i.e. lua strings)
+-- 0.644 0.647 0.655 0.645 : convert in c (less mem in theory)
+
+-- local tounicodes = table.setmetatableindex(function(t,unicode)
+-- local s
+-- if unicode < 0xD7FF or (unicode > 0xDFFF and unicode <= 0xFFFF) then
+-- s = f_single(unicode)
+-- else
+-- unicode = unicode - 0x10000
+-- s = f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+-- end
+-- t[unicode] = s
+-- return s
+-- end)
+--
+-- local function tounicode16(unicode,name)
+-- local s = tounicodes[unicode]
+-- if s then
+-- return s
+-- else
+-- report_fonts("can't convert %a in %a into tounicode",unicode,name)
+-- end
+-- end
+--
+-- local function tounicode16sequence(unicodes,name)
+-- local t = { }
+-- for l=1,#unicodes do
+-- local u = unicodes[l]
+-- local s = tounicodes[u]
+-- if s then
+-- t[l] = s
+-- else
+-- report_fonts ("can't convert %a in %a into tounicode",u,name)
+-- return
+-- end
+-- end
+-- return concat(t)
+-- end
+--
+-- local function tounicode(unicode,name)
+-- if type(unicode) == "table" then
+-- local t = { }
+-- for l=1,#unicode do
+-- local u = unicode[l]
+-- local s = tounicodes[u]
+-- if s then
+-- t[l] = s
+-- else
+-- report_fonts ("can't convert %a in %a into tounicode",u,name)
+-- return
+-- end
+-- end
+-- return concat(t)
+-- else
+-- local s = tounicodes[unicode]
+-- if s then
+-- return s
+-- else
+-- report_fonts("can't convert %a in %a into tounicode",unicode,name)
+-- end
+-- end
+-- end
+
+local function tounicode16(unicode,name)
+ if unicode < 0xD7FF or (unicode > 0xDFFF and unicode <= 0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode = unicode - 0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+end
+
+local function tounicode16sequence(unicodes,name)
+ local t = { }
+ for l=1,#unicodes do
+ local u = unicodes[l]
+ if u < 0xD7FF or (u > 0xDFFF and u <= 0xFFFF) then
+ t[l] = f_single(u)
+ else
+ u = u - 0x10000
+ t[l] = f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+end
+
+local function tounicode(unicode,name)
+ if type(unicode) == "table" then
+ local t = { }
+ for l=1,#unicode do
+ local u = unicode[l]
+ if u < 0xD7FF or (u > 0xDFFF and u <= 0xFFFF) then
+ t[l] = f_single(u)
+ else
+ u = u - 0x10000
+ t[l] = f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
+ end
+ end
+ return concat(t)
+ else
+ if unicode < 0xD7FF or (unicode > 0xDFFF and unicode <= 0xFFFF) then
+ return f_single(unicode)
+ else
+ unicode = unicode - 0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
+ end
+ end
+end
+
+local function fromunicode16(str)
+ if #str == 4 then
+ return tonumber(str,16)
+ else
+ local l, r = match(str,"(....)(....)")
+ -- return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
+ return 0x10000 + (tonumber(l,16)-0xD800)*0x400 + tonumber(r,16) - 0xDC00
+ end
+end
+
+-- Slightly slower:
+--
+-- local p = C(4) * (C(4)^-1) / function(l,r)
+-- if r then
+-- return (tonumber(l,16))*0x400 + tonumber(r,16) - 0xDC00
+-- else
+-- return tonumber(l,16)
+-- end
+-- end
+--
+-- local function fromunicode16(str)
+-- return lpegmatch(p,str)
+-- end
+
+mappings.makenameparser = makenameparser
+mappings.tounicode = tounicode
+mappings.tounicode16 = tounicode16
+mappings.tounicode16sequence = tounicode16sequence
+mappings.fromunicode16 = fromunicode16
+
+local ligseparator = P("_")
+local varseparator = P(".")
+local namesplitter = Ct(C((1 - ligseparator - varseparator)^1) * (ligseparator * C((1 - ligseparator - varseparator)^1))^0)
+
+-- maybe: ff fi fl ffi ffl => f_f f_i f_l f_f_i f_f_l
+
+-- local function test(name)
+-- local split = lpegmatch(namesplitter,name)
+-- print(string.formatters["%s: [% t]"](name,split))
+-- end
+
+-- test("i.f_")
+-- test("this")
+-- test("this.that")
+-- test("japan1.123")
+-- test("such_so_more")
+-- test("such_so_more.that")
+
+-- to be completed .. for fonts that use unicodes for ligatures which
+-- is a actually a bad thing and should be avoided in the first place
+
+local overloads = allocate {
+ IJ = { name = "I_J", unicode = { 0x49, 0x4A }, mess = 0x0132 },
+ ij = { name = "i_j", unicode = { 0x69, 0x6A }, mess = 0x0133 },
+ ff = { name = "f_f", unicode = { 0x66, 0x66 }, mess = 0xFB00 },
+ fi = { name = "f_i", unicode = { 0x66, 0x69 }, mess = 0xFB01 },
+ fl = { name = "f_l", unicode = { 0x66, 0x6C }, mess = 0xFB02 },
+ ffi = { name = "f_f_i", unicode = { 0x66, 0x66, 0x69 }, mess = 0xFB03 },
+ ffl = { name = "f_f_l", unicode = { 0x66, 0x66, 0x6C }, mess = 0xFB04 },
+ fj = { name = "f_j", unicode = { 0x66, 0x6A } },
+ fk = { name = "f_k", unicode = { 0x66, 0x6B } },
+}
+
+for k, v in next, overloads do
+ local name = v.name
+ local mess = v.mess
+ if name then
+ overloads[name] = v
+ end
+ if mess then
+ overloads[mess] = v
+ end
+end
+
+mappings.overloads = overloads
+
+function mappings.addtounicode(data,filename,checklookups)
+ local resources = data.resources
+ local unicodes = resources.unicodes
+ if not unicodes then
+ return
+ end
+ local properties = data.properties
+ local descriptions = data.descriptions
+ -- we need to move this code
+ unicodes['space'] = unicodes['space'] or 32
+ unicodes['hyphen'] = unicodes['hyphen'] or 45
+ unicodes['zwj'] = unicodes['zwj'] or 0x200D
+ unicodes['zwnj'] = unicodes['zwnj'] or 0x200C
+ --
+ local private = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+ local unicodevector = fonts.encodings.agl.unicodes or { } -- loaded runtime in context
+ local contextvector = fonts.encodings.agl.ctxcodes or { } -- loaded runtime in context
+ local missing = { }
+ local nofmissing = 0
+ local oparser = nil
+ local cidnames = nil
+ local cidcodes = nil
+ local cidinfo = properties.cidinfo
+ local usedmap = cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser = makenameparser() -- hm, every time?
+ if usedmap then
+ oparser = usedmap and makenameparser(cidinfo.ordering)
+ cidnames = usedmap.names
+ cidcodes = usedmap.unicodes
+ end
+ local ns = 0
+ local nl = 0
+ --
+ for unic, glyph in next, descriptions do
+ local name = glyph.name
+ if name then
+ local index = glyph.index
+ local r = overloads[name]
+ if r then
+ -- get rid of weird ligatures
+ -- glyph.name = r.name
+ glyph.unicode = r.unicode
+ elseif not unic or unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+ local unicode = unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ end
+ -- cidmap heuristics, beware, there is no guarantee for a match unless
+ -- the chain resolves
+ if (not unicode) and usedmap then
+ local foundindex = lpegmatch(oparser,name)
+ if foundindex then
+ unicode = cidcodes[foundindex] -- name to number
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ else
+ local reference = cidnames[foundindex] -- number to name
+ if reference then
+ local foundindex = lpegmatch(oparser,reference)
+ if foundindex then
+ unicode = cidcodes[foundindex]
+ if unicode then
+ glyph.unicode = unicode
+ ns = ns + 1
+ end
+ end
+ if not unicode or unicode == "" then
+ local foundcodes, multiple = lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode = foundcodes
+ if multiple then
+ nl = nl + 1
+ unicode = true
+ else
+ ns = ns + 1
+ unicode = foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ -- a.whatever or a_b_c.whatever or a_b_c (no numbers) a.b_
+ --
+ -- It is not trivial to find a solution that suits all fonts. We tried several alternatives
+ -- and this one seems to work reasonable also with fonts that use less standardized naming
+ -- schemes. The extra private test is tested by KE and seems to work okay with non-typical
+ -- fonts as well.
+ --
+ if not unicode or unicode == "" then
+ local split = lpegmatch(namesplitter,name)
+ local nsplit = split and #split or 0 -- add if
+ if nsplit == 0 then
+ -- skip
+ elseif nsplit == 1 then
+ local base = split[1]
+ local u = unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ -- skip
+ elseif type(u) == "table" then
+ -- unlikely
+ if u[1] < private then
+ unicode = u
+ glyph.unicode = unicode
+ end
+ elseif u < private then
+ unicode = u
+ glyph.unicode = unicode
+ end
+ else
+ local t, n = { }, 0
+ for l=1,nsplit do
+ local base = split[l]
+ local u = unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u) == "table" then
+ if u[1] >= private then
+ break
+ end
+ n = n + 1
+ t[n] = u[1]
+ else
+ if u >= private then
+ break
+ end
+ n = n + 1
+ t[n] = u
+ end
+ end
+ if n > 0 then
+ if n == 1 then
+ unicode = t[1]
+ else
+ unicode = t
+ end
+ glyph.unicode = unicode
+ end
+ end
+ nl = nl + 1
+ end
+ -- last resort (we might need to catch private here as well)
+ if not unicode or unicode == "" then
+ local foundcodes, multiple = lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode = foundcodes
+ if multiple then
+ nl = nl + 1
+ unicode = true
+ else
+ ns = ns + 1
+ unicode = foundcodes
+ end
+ end
+ end
+ -- check using substitutes and alternates
+ local r = overloads[unicode]
+ if r then
+ unicode = r.unicode
+ glyph.unicode = unicode
+ end
+ --
+ if not unicode then
+ missing[unic] = true
+ nofmissing = nofmissing + 1
+ end
+ end
+ else
+ -- no name
+ end
+ end
+ if type(checklookups) == "function" then
+ checklookups(data,missing,nofmissing)
+ end
+
+ -- todo: go lowercase
+
+ local collected = false
+ local unicoded = 0
+ for unicode, glyph in next, descriptions do
+ if glyph.class == "ligature" and (force_ligatures or not glyph.unicode) then
+ if not collected then
+ collected = fonts.handlers.otf.readers.getcomponents(data)
+ if not collected then
+ break
+ end
+ end
+ local u = collected[unicode] -- always tables
+ if u then
+ local n = #u
+ for i=1,n do
+ if u[i] > private then
+ n = 0
+ break
+ end
+ end
+ if n > 0 then
+ if n > 1 then
+ glyph.unicode = u
+ else
+ glyph.unicode = u[1]
+ end
+ unicoded = unicoded + 1
+ end
+ end
+ end
+ end
+ if trace_mapping and unicoded > 0 then
+ report_fonts("%n ligature tounicode mappings deduced from gsub ligature features",unicoded)
+ end
+
+ if trace_mapping then
+ for unic, glyph in table.sortedhash(descriptions) do
+ local name = glyph.name
+ local index = glyph.index
+ local unicode = glyph.unicode
+ if unicode then
+ if type(unicode) == "table" then
+ local unicodes = { }
+ for i=1,#unicode do
+ unicodes[i] = formatters("%U",unicode[i])
+ end
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode % t",index,name,unic,unicodes)
+ else
+ report_fonts("internal slot %U, name %a, unicode %U, tounicode %U",index,name,unic,unicode)
+ end
+ else
+ report_fonts("internal slot %U, name %a, unicode %U",index,name,unic)
+ end
+ end
+ end
+ if trace_loading and (ns > 0 or nl > 0) then
+ report_fonts("%s tounicode entries added, ligatures %s",nl+ns,ns)
+ end
+end
+
+-- local parser = makenameparser("Japan1")
+-- local parser = makenameparser()
+-- local function test(str)
+-- local b, a = lpegmatch(parser,str)
+-- print((a and table.serialize(b)) or b)
+-- end
+-- test("a.sc")
+-- test("a")
+-- test("uni1234")
+-- test("uni1234.xx")
+-- test("uni12349876")
+-- test("u123400987600")
+-- test("index1234")
+-- test("Japan1.123")
diff --git a/Master/texmf-dist/tex/context/base/font-mat.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi
index c8ee2630b5b..2e7c2080d67 100644
--- a/Master/texmf-dist/tex/context/base/font-mat.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi
@@ -79,27 +79,51 @@
% can be some interference here, which is why we use a different method
% for bold.
+% \def\font_helpers_set_math_family_a
+% {\ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
+% \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+% \ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
+% \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \else
+% \font_helpers_set_math_family_b
+% \fi\fi}
+
+% \def\font_helpers_set_math_family_b
+% {\ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
+% \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+% \ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
+% \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \else
+% \font_helpers_set_math_family_c
+% \fi\fi}
+
+% \def\font_helpers_set_math_family_c
+% {\ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
+% \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+% \ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
+% \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \else
+% \settrue \c_font_auto_size
+% \fi\fi}
+
\def\font_helpers_set_math_family_a
{\ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+ \lastnamedcs \else
\ifcsname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
- \csname\??fontinstanceready\fontclass -\fontbody-\s!mm-\fontfamily \endcsname \else
+ \lastnamedcs \else
\font_helpers_set_math_family_b
\fi\fi}
\def\font_helpers_set_math_family_b
{\ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
- \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+ \lastnamedcs \else
\ifcsname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
- \csname\??fontinstanceready\defaultfontclass-\fontbody-\s!mm-\fontfamily \endcsname \else
+ \lastnamedcs \else
\font_helpers_set_math_family_c
\fi\fi}
\def\font_helpers_set_math_family_c
{\ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
- \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily-\fontsize\endcsname \else
+ \lastnamedcs \else
\ifcsname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
- \csname\??fontinstanceready \fontbody-\s!mm-\fontfamily \endcsname \else
+ \lastnamedcs \else
\settrue \c_font_auto_size
\fi\fi}
@@ -114,11 +138,19 @@
\let\fontbody\savedfontbody
\setfalse\c_font_auto_size}
+% \def\font_helpers_set_math_family_bold_a#font#mbfam#mrfam%
+% {\ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
+% \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname #font#mbfam\font \else
+% \ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
+% \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname #font#mbfam\font \else
+% #font#mbfam#font#mrfam%
+% \fi\fi}
+
\def\font_helpers_set_math_family_bold_a#font#mbfam#mrfam%
{\ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname \setfalse\c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily-\fontsize\endcsname #font#mbfam\font \else
+ \lastnamedcs #font#mbfam\font \else
\ifcsname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname \settrue \c_font_auto_size
- \csname\??fontinstanceready\fontclass-\fontbody-\s!mm-\fontfamily \endcsname #font#mbfam\font \else
+ \lastnamedcs #font#mbfam\font \else
#font#mbfam#font#mrfam%
\fi\fi}
@@ -221,7 +253,8 @@
\appendtoks % can be analyzed once
% why here ..
- \edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}%
+ %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}%
+ \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}%
% ...
\ifx\m_font_class_direction\v!both
\settrue\c_font_bidirectional_mathstrategy
@@ -362,8 +395,15 @@
\letvalue{\??fontmathsynchronizer\s!bi }\font_helpers_synchronize_math_family_mb
\letvalue{\??fontmathsynchronizer\empty}\font_helpers_synchronize_math_family_mr
+% \def\font_helpers_synchronize_math_family
+% {\csname\??fontmathsynchronizer\ifcsname\??fontmathsynchronizer\fontalternative\endcsname\fontalternative\fi\endcsname}
+
\def\font_helpers_synchronize_math_family
- {\csname\??fontmathsynchronizer\ifcsname\??fontmathsynchronizer\fontalternative\endcsname\fontalternative\fi\endcsname}
+ {\ifcsname\??fontmathsynchronizer\fontalternative\endcsname
+ \lastnamedcs
+ \else
+ \font_helpers_synchronize_math_family_mr
+ \fi}
\ifdefined \fontid % we need to keep this test for a while
\appendtoks
@@ -385,7 +425,8 @@
\to \t_font_math_strategies
\fi
-\def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname}
+%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname}
+\def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname}
\newconditional\c_font_pseudo_bold_math_state
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-mis.lua b/Master/texmf-dist/tex/context/base/mkiv/font-mis.lua
new file mode 100644
index 00000000000..06bf2204928
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-mis.lua
@@ -0,0 +1,51 @@
+if not modules then modules = { } end modules ['font-mis'] = {
+ version = 1.001,
+ comment = "companion to mtx-fonts",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+fonts = fonts or { }
+
+fonts.helpers = fonts.helpers or { }
+local helpers = fonts.helpers
+
+fonts.handlers = fonts.handlers or { }
+local handlers = fonts.handlers
+
+handlers.otf = handlers.otf or { }
+local otf = handlers.otf
+
+local readers = otf.readers
+
+if readers then
+
+ otf.version = otf.version or 3.018
+ otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true)
+
+ function fonts.helpers.getfeatures(name,save)
+ local filename = resolvers.findfile(name) or ""
+ if filename ~= "" then
+ local name = file.removesuffix(file.basename(filename))
+ local cleanname = containers.cleanname(name)
+ local data = containers.read(otf.cache,cleanname)
+ if data then
+ readers.unpack(data)
+ else
+ data = readers.loadfont(filename)
+ if data and save then
+ containers.write(otf.cache,cleanname,data)
+ end
+ end
+ return data and data.resources and data.resources.features
+ end
+ end
+
+else
+
+ function fonts.helpers.getfeatures(name)
+ -- not supported
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-mps.lua b/Master/texmf-dist/tex/context/base/mkiv/font-mps.lua
new file mode 100644
index 00000000000..7b7c859df77
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-mps.lua
@@ -0,0 +1,450 @@
+if not modules then modules = { } end modules ['font-mps'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local concat = table.concat
+local formatters = string.formatters
+
+-- QP0 [QP1] QP2 => CP0 [CP1 CP2] CP3
+
+-- CP0 = QP0
+-- CP3 = QP2
+--
+-- CP1 = QP0 + 2/3 *(QP1-QP0)
+-- CP2 = QP2 + 2/3 *(QP1-QP2)
+
+fonts = fonts or { }
+local metapost = fonts.metapost or { }
+fonts.metapost = metapost
+
+local trace_skips = false trackers.register("metapost.outlines.skips",function(v) trace_skips = v end)
+
+local f_moveto = formatters["(%.4F,%.4F)"]
+local f_lineto = formatters["--(%.4F,%.4F)"]
+local f_curveto = formatters["..controls(%.4F,%.4F)and(%.4F,%.4F)..(%.4F,%.4F)"]
+local s_cycle = "--cycle"
+
+local f_nofill = formatters["nofill %s;"]
+local f_dofill = formatters["fill %s;"]
+
+local f_draw_trace = formatters["drawpathonly %s;"]
+local f_draw = formatters["draw %s;"]
+
+local f_boundingbox = formatters["((%.4F,%.4F)--(%.4F,%.4F)--(%.4F,%.4F)--(%.4F,%.4F)--cycle)"]
+local f_vertical = formatters["((%.4F,%.4F)--(%.4F,%.4F))"]
+
+function metapost.boundingbox(d,factor)
+ local bounds = d.boundingbox
+ local factor = factor or 1
+ local llx = factor*bounds[1]
+ local lly = factor*bounds[2]
+ local urx = factor*bounds[3]
+ local ury = factor*bounds[4]
+ return f_boundingbox(llx,lly,urx,lly,urx,ury,llx,ury)
+end
+
+function metapost.widthline(d,factor)
+ local bounds = d.boundingbox
+ local factor = factor or 1
+ local lly = factor*bounds[2]
+ local ury = factor*bounds[4]
+ local width = factor*d.width
+ return f_vertical(width,lly,width,ury)
+end
+
+function metapost.zeroline(d,factor)
+ local bounds = d.boundingbox
+ local factor = factor or 1
+ local lly = factor*bounds[2]
+ local ury = factor*bounds[4]
+ return f_vertical(0,lly,0,ury)
+end
+
+function metapost.paths(d,xfactor,yfactor)
+ local sequence = d.sequence
+ local segments = d.segments
+ local list = { }
+ local path = { } -- recycled
+ local size = 0
+ local xfactor = xfactor or 1
+ local yfactor = yfactor or xfactor
+ if sequence then
+ local i = 1
+ local n = #sequence
+ while i < n do
+ local operator = sequence[i]
+ if operator == "m" then -- "moveto"
+ if size > 0 then
+ size = size + 1
+ path[size] = s_cycle
+ list[#list+1] = concat(path,"",1,size)
+ size = 1
+ else
+ size = size + 1
+ end
+ path[size] = f_moveto(xfactor*sequence[i+1],yfactor*sequence[i+2])
+ i = i + 3
+ elseif operator == "l" then -- "lineto"
+ size = size + 1
+ path[size] = f_lineto(xfactor*sequence[i+1],yfactor*sequence[i+2])
+ i = i + 3
+ elseif operator == "c" then -- "curveto"
+ size = size + 1
+ path[size] = f_curveto(xfactor*sequence[i+1],yfactor*sequence[i+2],xfactor*sequence[i+3],yfactor*sequence[i+4],xfactor*sequence[i+5],yfactor*sequence[i+6])
+ i = i + 7
+ elseif operator =="q" then -- "quadraticto"
+ size = size + 1
+ -- first is always a moveto
+ local l_x, l_y = xfactor*sequence[i-2], yfactor*sequence[i-1]
+ local m_x, m_y = xfactor*sequence[i+1], yfactor*sequence[i+2]
+ local r_x, r_y = xfactor*sequence[i+3], yfactor*sequence[i+4]
+ path[size] = f_curveto (
+ l_x + 2/3 * (m_x-l_x),
+ l_y + 2/3 * (m_y-l_y),
+ r_x + 2/3 * (m_x-r_x),
+ r_y + 2/3 * (m_y-r_y),
+ r_x, r_y
+ )
+ i = i + 5
+ else
+ -- weird
+ i = i + 1
+ end
+ end
+ elseif segments then
+ for i=1,#segments do
+ local segment = segments[i]
+ local operator = segment[#segment]
+ if operator == "m" then -- "moveto"
+ if size > 0 then
+ size = size + 1
+ path[size] = s_cycle
+ list[#list+1] = concat(path,"",1,size)
+ size = 1
+ else
+ size = size + 1
+ end
+ path[size] = f_moveto(xfactor*segment[1],yfactor*segment[2])
+ elseif operator == "l" then -- "lineto"
+ size = size + 1
+ path[size] = f_lineto(xfactor*segment[1],yfactor*segment[2])
+ elseif operator == "c" then -- "curveto"
+ size = size + 1
+ path[size] = f_curveto(xfactor*segment[1],yfactor*segment[2],xfactor*segment[3],yfactor*segment[4],xfactor*segment[5],yfactor*segment[6])
+ elseif operator =="q" then -- "quadraticto"
+ size = size + 1
+ -- first is always a moveto
+ local prev = segments[i-1]
+ local l_x, l_y = xfactor*prev[#prev-2], yfactor*prev[#prev-1]
+ local m_x, m_y = xfactor*segment[1], yfactor*segment[2]
+ local r_x, r_y = xfactor*segment[3], yfactor*segment[4]
+ path[size] = f_curveto (
+ l_x + 2/3 * (m_x-l_x),
+ l_y + 2/3 * (m_y-l_y),
+ r_x + 2/3 * (m_x-r_x),
+ r_y + 2/3 * (m_y-r_y),
+ r_x, r_y
+ )
+ else
+ -- weird
+ end
+ end
+ else
+ return
+ end
+ if size > 0 then
+ size = size + 1
+ path[size] = s_cycle
+ list[#list+1] = concat(path,"",1,size)
+ end
+ return list
+end
+
+function metapost.fill(paths)
+ local r = { }
+ local n = #paths
+ for i=1,n do
+ if i < n then
+ r[i] = f_nofill(paths[i])
+ else
+ r[i] = f_dofill(paths[i])
+ end
+ end
+ return concat(r)
+end
+
+function metapost.draw(paths,trace)
+ local r = { }
+ local n = #paths
+ for i=1,n do
+ if trace then
+ r[i] = f_draw_trace(paths[i])
+ else
+ r[i] = f_draw(paths[i])
+ end
+ end
+ return concat(r)
+end
+
+function metapost.maxbounds(data,index,factor)
+ local maxbounds = data.maxbounds
+ local factor = factor or 1
+ local glyphs = data.glyphs
+ local glyph = glyphs[index]
+ local boundingbox = glyph.boundingbox
+ local xmin, ymin, xmax, ymax
+ if not maxbounds then
+ xmin, ymin, xmax, ymax = 0, 0, 0, 0
+ for i=1,#glyphs do
+ local d = glyphs[i]
+ if d then
+ local b = d.boundingbox
+ if b then
+ if b[1] < xmin then xmin = b[1] end
+ if b[2] < ymin then ymin = b[2] end
+ if b[3] > xmax then xmax = b[3] end
+ if b[4] > ymax then ymax = b[4] end
+ end
+ end
+ end
+ maxbounds = { xmin, ymin, xmax, ymax }
+ data.maxbounds = maxbounds
+ else
+ xmin = maxbounds[1]
+ ymin = maxbounds[2]
+ xmax = maxbounds[3]
+ ymax = maxbounds[4]
+ end
+ local llx = boundingbox[1]
+ local lly = boundingbox[2]
+ local urx = boundingbox[3]
+ local ury = boundingbox[4]
+ local width = glyph.width
+ if llx > 0 then
+ llx = 0
+ end
+ if width > urx then
+ urx = width
+ end
+ return f_boundingbox(
+ factor*llx,factor*ymin,
+ factor*urx,factor*ymin,
+ factor*urx,factor*ymax,
+ factor*llx,factor*ymax
+ )
+end
+
+----- formatters = string.formatters
+----- concat = table.concat
+
+local nodecodes = nodes.nodecodes -- no nuts yet
+
+local glyph_code = nodecodes.glyph
+local disc_code = nodecodes.disc
+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 penalty_code = nodecodes.penalty
+
+local find_tail = nodes.tail
+
+----- metapost = fonts.glyphs.metapost
+
+local characters = fonts.hashes.characters
+local quaddata = fonts.hashes.emwidths
+local shapes = fonts.hashes.shapes
+local topaths = metapost.paths
+
+local f_code = formatters["mfun_do_outline_text_flush(%q,%i,%.4F,%.4F)(%,t);"]
+local s_nothing = "(origin scaled 10)"
+local f_trace_rule = formatters["draw rule(%6F,%6F,%6F) shifted (%6F,%6F) withcolor .5white;"]
+local f_strut = formatters["strut(%6F,%6F);"]
+local f_hrule = formatters["draw rule(%6F,%6F,%6F);"]
+local f_vrule = formatters["draw rule(%6F,%6F,%6F) shifted (%6F,%6F);"]
+local f_bounds = formatters["checkbounds(%6F,%6F,%6F,%6F);"]
+
+local sc = 10
+local fc = number.dimenfactors.bp * sc / 10
+
+-- todo: make the next more efficient:
+
+function metapost.output(kind,font,char,advance,shift,ex)
+ local character = characters[font][char]
+ if character then
+ local index = character.index
+ if index then
+ local shapedata = shapes[font]
+ local glyphs = shapedata.glyphs -- todo: subfonts fonts.shapes.indexed(font,sub)
+ if glyphs then
+ local glyf = glyphs[index]
+ if glyf then
+ local units = shapedata.units or 1000
+ local yfactor = sc/units
+ local xfactor = yfactor
+ local shift = shift or 0
+ local advance = advance or 0
+ local exfactor = ex or 0
+ local wfactor = 1
+ if exfactor ~= 0 then
+ wfactor = (1+(ex/units)/1000)
+ xfactor = xfactor * wfactor
+ end
+ local paths = topaths(glyf,xfactor,yfactor)
+ local code = f_code(kind,#paths,advance,shift,paths)
+ return code, character.width * fc * wfactor
+ end
+ end
+ end
+ end
+ return s_nothing, 10 * sc/1000
+end
+
+-- not ok yet: leftoffset in framed not handled well
+
+local signal = -0x3FFFFFFF - 1
+
+function fonts.metapost.boxtomp(n,kind)
+
+ local result = { }
+ local advance = 0 -- in bp
+ local distance = 0
+
+ local llx, lly, urx, ury = 0, 0, 0, 0
+
+ local boxtomp
+
+ local function horizontal(current,shift,glue_sign,glue_set,glue_order,ht,dp)
+ shift = shift or 0
+ while current do
+ local id = current.id
+ if id == glyph_code then
+ local code, width = metapost.output(kind,current.font,current.char,advance,-shift*fc,current.expansion_factor)
+ result[#result+1] = code
+ advance = advance + width
+ elseif id == disc_code then
+ local replace = current.replace
+ if replace then
+ horizontal(replace,shift,glue_sign,glue_set,glue_order,ht,dp)
+ end
+ elseif id == kern_code then
+ local kern = current.kern * fc
+ if trace_skips then
+ result[#result+1] = f_trace_rule(kern,0.8*ht*fc,0.8*dp*fc,advance,-shift*fc)
+ end
+ advance = advance + kern
+ elseif id == glue_code then
+ local width = current.width
+ if glue_sign == 1 then
+ if current.stretch_order == glue_order then
+ width = (width + current.stretch * glue_set) * fc
+ else
+ width = width * fc
+ end
+ elseif glue_sign == 2 then
+ if current.shrink_order == glue_order then
+ width = (width - current.shrink * glue_set) * fc
+ else
+ width = width * fc
+ end
+ else
+ width = width * fc
+ end
+ if trace_skips then
+ result[#result+1] = f_trace_rule(width,0.1*ht*fc,0.1*dp*fc,advance,-shift*fc)
+ end
+ advance = advance + width
+ elseif id == hlist_code then
+ local a = advance
+ boxtomp(current,shift+current.shift,current.glue_sign,current.glue_set,current.glue_order)
+ advance = a + current.width * fc
+ elseif id == vlist_code then
+ boxtomp(current) -- ,distance + shift,current.glue_set*current.glue_sign)
+ advance = advance + current.width * fc
+ elseif id == rule_code then
+ local wd = current.width
+ local ht = current.height
+ local dp = current.depth
+ if not (ht == signal or dp == signal or wd == signal) then
+ ht = ht - shift
+ dp = dp - shift
+ if wd == 0 then
+ result[#result+1] = f_strut(ht*fc,-dp*fc)
+ else
+ result[#result+1] = f_hrule(wd*fc,ht*fc,-dp*fc)
+ end
+ end
+ if wd ~= signal then
+ advance = advance + wd * fc
+ end
+ end
+ current = current.next
+ end
+ end
+
+ local function vertical(current,shift)
+ shift = shift or 0
+ current = find_tail(current) -- otherwise bad bbox
+ while current do
+ local id = current.id
+ if id == hlist_code then
+ distance = distance - current.depth
+ boxtomp(current,distance + shift,current.glue_set*current.glue_sign)
+ distance = distance - current.height
+ elseif id == vlist_code then
+ print("vertical >>>")
+ vertical(current.list,0)
+ elseif id == kern_code then
+ distance = distance - current.kern
+ advance = 0
+ elseif id == glue_code then
+ distance = distance - current.width
+ advance = 0
+ elseif id == rule_code then
+ local wd = current.width
+ local ht = current.height
+ local dp = current.depth
+ if not (ht == signal or dp == signal or wd == signal) then
+ distance = distance - dp
+ if wd == 0 then
+ result[#result+1] = f_strut(ht*fc,-dp*fc)
+ else
+ result[#result+1] = f_vrule(wd*fc,ht*fc,-dp*fc,0,distance+shift)
+ end
+ distance = distance - ht
+ end
+ end
+ current = current.prev
+ end
+ end
+
+ boxtomp = function(list,shift)
+ local current = list.list
+ if current then
+ if list.id == hlist_code then
+ horizontal(current,shift,list.glue_sign,list.glue_set,list.glue_order,list.height,list.depth)
+ else
+ vertical(current,shift)
+ end
+ end
+ end
+
+ local box = tex.box[n]
+
+ boxtomp(box,box.shift,box.glue_sign,box.glue_set,box.glue_order)
+
+ local wd = box.width
+ local ht = box.height
+ local dp = box.depth
+ local sh = box.shift
+
+ result[#result+1] = f_bounds(0,-dp*fc,wd*fc,ht*fc)
+
+ return concat(result)
+
+end
diff --git a/Master/texmf-dist/tex/context/base/font-nod.lua b/Master/texmf-dist/tex/context/base/mkiv/font-nod.lua
index e2000be7ebd..7f30b6d5cbd 100644
--- a/Master/texmf-dist/tex/context/base/font-nod.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-nod.lua
@@ -42,7 +42,6 @@ local step_tracers = tracers.steppers or { }
tracers.steppers = step_tracers
local nodecodes = nodes.nodecodes
-local whatcodes = nodes.whatcodes
local glyph_code = nodecodes.glyph
local hlist_code = nodecodes.hlist
@@ -51,17 +50,14 @@ local disc_code = nodecodes.disc
local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
local rule_code = nodecodes.rule
-local whatsit_code = nodecodes.whatsit
-
-local localpar_code = whatcodes.localpar
-local dir_code = whatcodes.dir
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
local nuts = nodes.nuts
local tonut = nuts.tonut
local tonode = nuts.tonode
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
@@ -69,7 +65,13 @@ local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getlist = nuts.getlist
+local getdisc = nuts.getdisc
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
local setbox = nuts.setbox
+local setchar = nuts.setchar
+local setsubtype = nuts.setsubtype
local copy_node_list = nuts.copy_list
local hpack_node_list = nuts.hpack
@@ -116,14 +118,12 @@ function char_tracers.collect(head,list,tag,n)
n = n or 0
local ok, fn = false, nil
while head do
- local id = getid(head)
- if id == glyph_code then
+ local c, id = isglyph(head)
+ if c then
local f = getfont(head)
if f ~= fn then
ok, fn = false, f
end
- local c = getchar(head)
- -- local i = fontidentifiers[f].indices[c] or 0 -- zero anyway as indices is nilled
if not ok then
ok = true
n = n + 1
@@ -135,19 +135,17 @@ function char_tracers.collect(head,list,tag,n)
l[#l+1] = { c, f }
elseif id == disc_code then
-- skip
--- local replace = getfield(head,"replace")
+-- local pre, post, replace = getdisc(head)
-- if replace then
-- for n in traverse_id(glyph_code,replace) do
-- l[#l+1] = { c, f }
-- end
-- end
--- local pre = getfield(head,"pre")
-- if pre then
-- for n in traverse_id(glyph_code,pre) do
-- l[#l+1] = { c, f }
-- end
-- end
--- local post = getfield(head,"post")
-- if post then
-- for n in traverse_id(glyph_code,post) do
-- l[#l+1] = { c, f }
@@ -184,6 +182,7 @@ function char_tracers.string(t)
end
local f_unicode = formatters["%U"]
+local f_badcode = formatters["{%i}"]
function char_tracers.unicodes(t,decimal)
local tt = { }
@@ -325,10 +324,8 @@ function step_tracers.features()
end
function tracers.fontchar(font,char)
- local n = new_glyph()
- setfield(n,"font",font)
- setfield(n,"char",char)
- setfield(n,"subtype",256)
+ local n = new_glyph(font,char)
+ setsubtype(n,256)
context(tonode(n))
end
@@ -362,13 +359,14 @@ function step_tracers.codes(i,command,space)
local c = collection[i]
local function showchar(c)
+ local f = getfont(c)
+ local c = getchar(c)
if command then
- local f, c = getfont(c), getchar(c)
local d = fontdescriptions[f]
local d = d and d[c]
context[command](f,c,d and d.class or "")
else
- context("[%s:U+%04X]",getfont(c),getchar(c))
+ context("[%s:U+%05X]",f,c)
end
end
@@ -393,12 +391,10 @@ function step_tracers.codes(i,command,space)
local id = getid(c)
if id == glyph_code then
showchar(c)
- elseif id == whatsit_code and (getsubtype(c) == localpar_code or getsubtype(c) == dir_code) then
+ elseif id == dir_code or id == localpar_code then
context("[%s]",getfield(c,"dir"))
elseif id == disc_code then
- local pre = getfield(c,"pre")
- local post = getfield(c,"post")
- local replace = getfield(c,"replace")
+ local pre, post, replace = getdisc(c)
if pre or post or replace then
context("[")
context[space]()
@@ -482,13 +478,12 @@ local threshold = 65536
local function toutf(list,result,nofresult,stopcriterium)
if list then
for n in traverse_nodes(tonut(list)) do
- local id = getid(n)
- if id == glyph_code then
+ local c, id = isglyph(n)
+ if c then
local components = getfield(n,"components")
if components then
result, nofresult = toutf(components,result,nofresult)
- else
- local c = getchar(n)
+ elseif c > 0 then
local fc = fontcharacters[getfont(n)]
if fc then
local fcc = fc[c]
@@ -514,6 +509,9 @@ local function toutf(list,result,nofresult,stopcriterium)
nofresult = nofresult + 1
result[nofresult] = f_unicode(c)
end
+ else
+ nofresult = nofresult + 1
+ result[nofresult] = f_badcode(c)
end
elseif id == disc_code then
result, nofresult = toutf(getfield(n,"replace"),result,nofresult) -- needed?
diff --git a/Master/texmf-dist/tex/context/base/font-odk.lua b/Master/texmf-dist/tex/context/base/mkiv/font-odk.lua
index c34efc1203e..c34efc1203e 100644
--- a/Master/texmf-dist/tex/context/base/font-odk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-odk.lua
diff --git a/Master/texmf-dist/tex/context/base/font-odv.lua b/Master/texmf-dist/tex/context/base/mkiv/font-odv.lua
index 2ef1aabe7ea..6b9a5a9e42a 100644
--- a/Master/texmf-dist/tex/context/base/font-odv.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-odv.lua
@@ -113,13 +113,14 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local getnext = nuts.getnext
+local setnext = nuts.setnext
local getprev = nuts.getprev
+local setprev = nuts.setprev
local getid = nuts.getid
local getchar = nuts.getchar
+local setchar = nuts.setchar
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
-local getfield = nuts.getfield
-local setfield = nuts.setfield
local getprop = nuts.getprop
local setprop = nuts.setprop
@@ -638,8 +639,7 @@ local function deva_initialize(font,attr)
-- deva
vattu = true
-- dev2
- -- local subtables = sequence.subtables -- dataset[5].subtables
- local subtables = dataset[5].subtables
+ local subtables = dataset[3].subtables
for i=1,#subtables do
local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
@@ -717,8 +717,8 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
copyinjection(tempcurrent,next)
local nextcurrent = copy_node(current)
copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
- setfield(tempcurrent,"next",nextcurrent)
- setfield(nextcurrent,"prev",tempcurrent)
+ setnext(tempcurrent,nextcurrent)
+ setprev(nextcurrent,tempcurrent)
setprop(tempcurrent,a_state,s_blwf)
tempcurrent = processcharacters(tempcurrent,font)
setprop(tempcurrent,a_state,unsetvalue)
@@ -726,14 +726,14 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
flush_list(tempcurrent)
local n = copy_node(current)
copyinjection(n,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
- setfield(current,"char",dotted_circle)
+ setchar(current,dotted_circle)
head = insert_node_after(head, current, n)
else
- setfield(current,"char",getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node
+ setchar(current,getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node
local freenode = getnext(current)
- setfield(current,"next",tmp)
+ setnext(current,tmp)
if tmp then
- setfield(tmp,"prev",current)
+ setprev(tmp,current)
end
free_node(freenode)
flush_list(tempcurrent)
@@ -787,14 +787,14 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
-- local np = getprev(n)
local nn = getnext(n)
local ln = getnext(lastcons) -- what if lastcons is nn ?
- setfield(np,"next",nn)
- setfield(nn,"prev",np)
- setfield(lastcons,"next",n)
+ setnext(np,nn)
+ setprev(nn,np)
+ setnext(lastcons,n)
if ln then
- setfield(ln,"prev",n)
+ setprev(ln,n)
end
- setfield(n,"next",ln)
- setfield(n,"prev",lastcons)
+ setnext(n,ln)
+ setprev(n,lastcons)
if lastcons == stop then
stop = n
end
@@ -818,14 +818,14 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
local nn = getnext(n)
local mn = getnext(matra)
if sp then
- setfield(sp,"next",nn)
+ setnext(sp,nn)
end
- setfield(nn,"prev",sp)
- setfield(matra,"next",start)
- setfield(start,"prev",matra)
- setfield(n,"next",mn)
+ setprev(nn,sp)
+ setnext(matra,start)
+ setprev(start,matra)
+ setnext(n,mn)
if mn then
- setfield(mn,"prev",n)
+ setprev(mn,n)
end
if head == start then
head = nn
@@ -900,20 +900,20 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
-- move pre-base matras...
if pre_mark[getchar(cn)] then
if bp then
- setfield(bp,"next",cn)
+ setnext(bp,cn)
end
local next = getnext(cn)
local prev = getprev(cn)
if next then
- setfield(next,"prev",prev)
+ setprev(next,prev)
end
- setfield(prev,"next",next)
+ setnext(prev,next)
if cn == stop then
stop = prev
end
- setfield(cn,"prev",bp)
- setfield(cn,"next",firstcons)
- setfield(firstcons,"prev",cn)
+ setprev(cn,bp)
+ setnext(cn,firstcons)
+ setprev(firstcons,cn)
if firstcons == start then
if head == start then
head = cn
@@ -959,34 +959,34 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces)
end
local prev = getprev(current)
if prev then
- setfield(prev,"next",n)
+ setnext(prev,n)
end
if n then
- setfield(n,"prev",prev)
+ setprev(n,prev)
end
local next = getnext(b)
- setfield(c,"next",next)
+ setnext(c,next)
if next then
- setfield(next,"prev",c)
+ setprev(next,c)
end
- setfield(c,"next",next)
- setfield(b,"next",current)
- setfield(current,"prev",b)
+ setnext(c,next)
+ setnext(b,current)
+ setprev(current,b)
end
elseif cns and getnext(cns) ~= current then -- todo: optimize next
-- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants)
local cp, cnsn = getprev(current), getnext(cns)
if cp then
- setfield(cp,"next",n)
+ setnext(cp,n)
end
if n then
- setfield(n,"prev",cp)
+ setprev(n,cp)
end
- setfield(cns,"next",current)
- setfield(current,"prev",cns)
- setfield(c,"next",cnsn)
+ setnext(cns,current)
+ setprev(current,cns)
+ setnext(c,cnsn)
if cnsn then
- setfield(cnsn,"prev",c)
+ setprev(cnsn,c)
end
if c == stop then
stop = cp
@@ -1048,11 +1048,11 @@ function handlers.devanagari_reorder_matras(head,start,kind,lookupname,replaceme
head = remove_node(head,start)
local next = getnext(current)
if next then
- setfield(next,"prev",start)
+ setprev(next,start)
end
- setfield(start,"next",next)
- setfield(current,"next",start)
- setfield(start,"prev",current)
+ setnext(start,next)
+ setnext(current,start)
+ setprev(start,current)
start = startnext
break
end
@@ -1103,11 +1103,11 @@ function handlers.devanagari_reorder_reph(head,start,kind,lookupname,replacement
head = remove_node(head,start)
local next = getnext(current)
if next then
- setfield(next,"prev",start)
+ setprev(next,start)
end
- setfield(start,"next",next)
- setfield(current,"next",start)
- setfield(start,"prev",current)
+ setnext(start,next)
+ setnext(current,start)
+ setprev(start,current)
start = startnext
startattr = getprop(start,a_syllabe)
break
@@ -1121,10 +1121,10 @@ function handlers.devanagari_reorder_reph(head,start,kind,lookupname,replacement
startnext = getnext(start)
head = remove_node(head,start)
local prev = getprev(current)
- setfield(start,"prev",prev)
- setfield(prev,"next",start)
- setfield(start,"next",current)
- setfield(current,"prev",start)
+ setprev(start,prev)
+ setnext(prev,start)
+ setnext(start,current)
+ setprev(current,start)
start = startnext
startattr = getprop(start,a_syllabe)
break
@@ -1153,10 +1153,10 @@ function handlers.devanagari_reorder_reph(head,start,kind,lookupname,replacement
startnext = getnext(start)
head = remove_node(head,start)
local prev = getprev(c)
- setfield(start,"prev",prev)
- setfield(prev,"next",start)
- setfield(start,"next",c)
- setfield(c,"prev",start)
+ setprev(start,prev)
+ setnext(prev,start)
+ setnext(start,c)
+ setprev(c,start)
-- end
start = startnext
startattr = getprop(start,a_syllabe)
@@ -1175,11 +1175,11 @@ function handlers.devanagari_reorder_reph(head,start,kind,lookupname,replacement
head = remove_node(head,start)
local next = getnext(current)
if next then
- setfield(next,"prev",start)
+ setprev(next,start)
end
- setfield(start,"next",next)
- setfield(current,"next",start)
- setfield(start,"prev",current)
+ setnext(star,next)
+ setnext(current,start)
+ setprev(start,current)
start = startnext
end
end
@@ -1218,11 +1218,11 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start,k
removenode(start,start)
local next = getnext(current)
if next then
- setfield(next,"prev",start)
+ setprev(next,start)
end
- setfield(start,"next",next)
- setfield(current,"next",start)
- setfield(start,"prev",current)
+ setnext(start,next)
+ setnext(current,start)
+ setprev(start,current)
start = startnext
break
end
@@ -1236,10 +1236,10 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start,k
startnext = getnext(start)
removenode(start,start)
local prev = getprev(current)
- setfield(start,"prev",prev)
- setfield(prev,"next",start)
- setfield(start,"next",current)
- setfield(current,"prev",start)
+ setprev(start,prev)
+ setnext(prev,start)
+ setnext(start,current)
+ setprev(current,start)
start = startnext
break
end
@@ -1261,12 +1261,12 @@ function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replaceme
end
end
if stop then
- setfield(getfield(stop,"prev"),"next",nil)
- setfield(stop,"prev",getprev(start))
+ setnext(getprev(stop),nil)
+ setprev(stop,getprev(start))
end
local prev = getprev(start)
if prev then
- setfield(prev,"next",stop)
+ setnext(prev,stop)
end
if head == start then
head = stop
@@ -1317,8 +1317,7 @@ local function dev2_initialize(font,attr)
local kind = dataset[4]
if kind and valid[kind] then
-- could become a function call
- -- local subtables = sequence.subtables
- local subtables = dataset[5].subtables
+ local subtables = dataset[3].subtables
for i=1,#subtables do
local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
@@ -1568,7 +1567,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
next = getnext(current)
local tmp = getnext(next)
local changestop = next == stop
- setfield(next,"next",nil)
+ setnext(next,nil)
setprop(current,a_state,s_pref)
current = processcharacters(current,font)
setprop(current,a_state,s_blwf)
@@ -1577,13 +1576,13 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa
current = processcharacters(current,font)
setprop(current,a_state,unsetvalue)
if halant[getchar(current)] then
- setfield(getnext(current),"next",tmp)
+ setnext(getnext(current),tmp)
local nc = copy_node(current)
copyinjection(nc,current)
- setfield(current,"char",dotted_circle)
+ setchar(current,dotted_circle)
head = insert_node_after(head,current,nc)
else
- setfield(current,"next",tmp) -- assumes that result of pref, blwf, or pstf consists of one node
+ setnext(current,tmp) -- assumes that result of pref, blwf, or pstf consists of one node
if changestop then
stop = current
end
@@ -1649,8 +1648,8 @@ if tpm then
local extra = copy_node(current)
copyinjection(extra,current)
char = tpm[1]
- setfield(current,"char",char)
- setfield(extra,"char",tpm[2])
+ setchar(current,char)
+ setchar(extra,tpm[2])
head = insert_node_after(head,current,extra)
end
--
@@ -1660,10 +1659,10 @@ end
local prev = getprev(current)
local next = getnext(current)
if prev then
- setfield(prev,"next",next)
+ setnext(prev,next)
end
if next then
- setfield(next,"prev",prev)
+ setprev(next,prev)
end
if current == stop then
stop = getprev(current)
@@ -1676,11 +1675,11 @@ end
end
local prev = getprev(halfpos)
if prev then
- setfield(prev,"next",current)
+ setnext(prev,current)
end
- setfield(current,"prev",prev)
- setfield(halfpos,"prev",current)
- setfield(current,"next",halfpos)
+ setprev(current,prev)
+ setprev(halfpos,current)
+ setnext(current,halfpos)
halfpos = current
elseif above_mark[char] then -- After main consonant
target = basepos
@@ -1706,21 +1705,21 @@ end
if prev ~= target then
local next = getnext(current)
if prev then -- not needed, already tested with target
- setfield(prev,"next",next)
+ setnext(prev,next)
end
if next then
- setfield(next,"prev",prev)
+ setprev(next,prev)
end
if current == stop then
stop = prev
end
local next = getnext(target)
if next then
- setfield(next,"prev",current)
+ setprev(next,current)
end
- setfield(current,"next",next)
- setfield(target,"next",current)
- setfield(current,"prev",target)
+ setnext(current,next)
+ setnext(target,current)
+ setprev(current,target)
end
end
end
@@ -1749,17 +1748,17 @@ end
end
local prev = getprev(c)
if prev then
- setfield(prev,"next",next)
+ setnext(prev,next)
end
- setfield(next,"prev",prev)
+ setprev(next,prev)
local nextnext = getnext(next)
- setfield(current,"next",nextnext)
+ setnext(current,nextnext)
local nextnextnext = getnext(nextnext)
if nextnextnext then
- setfield(nextnextnext,"prev",current)
+ setprev(nextnextnext,current)
end
- setfield(c,"prev",nextnext)
- setfield(nextnext,"next",c)
+ setprev(c,nextnext)
+ setnext(nextnext,c)
end
if stop == current then break end
current = getnext(current)
@@ -2084,9 +2083,9 @@ local function inject_syntax_error(head,current,mark)
local signal = copy_node(current)
copyinjection(signal,current)
if mark == pre_mark then
- setfield(signal,"char",dotted_circle)
+ setchar(signal,dotted_circle)
else
- setfield(current,"char",dotted_circle)
+ setchar(current,dotted_circle)
end
return insert_node_after(head,current,signal)
end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-off.lua b/Master/texmf-dist/tex/context/base/mkiv/font-off.lua
new file mode 100644
index 00000000000..82426552ec0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-off.lua
@@ -0,0 +1,229 @@
+if not modules then modules = { } end modules ['font-off'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local lower = string.lower
+local round = math.round
+local setmetatableindex = table.setmetatableindex
+
+local fontloader = fontloader
+local font_to_table = fontloader.to_table
+local open_font = fontloader.open
+local get_font_info = fontloader.info
+local close_font = fontloader.close
+local font_fields = fontloader.fields
+
+-- table={
+-- ["familyname"]="TeXGyrePagella",
+-- ["fontname"]="TeXGyrePagella-Regular",
+-- ["fullname"]="TeXGyrePagella-Regular",
+-- ["italicangle"]=0,
+-- ["names"]={
+-- {
+-- ["lang"]="English (US)",
+-- ["names"]={
+-- ["copyright"]="Copyright 2006, 2009 for TeX Gyre extensions by B. Jackowski and J.M. Nowacki (on behalf of TeX users groups). This work is released under the GUST Font License -- see http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt for details.",
+-- ["family"]="TeXGyrePagella",
+-- ["fullname"]="TeXGyrePagella-Regular",
+-- ["postscriptname"]="TeXGyrePagella-Regular",
+-- ["preffamilyname"]="TeX Gyre Pagella",
+-- ["subfamily"]="Regular",
+-- ["trademark"]="Please refer to the Copyright section for the font trademark attribution notices.",
+-- ["uniqueid"]="2.004;UKWN;TeXGyrePagella-Regular",
+-- ["version"]="Version 2.004;PS 2.004;hotconv 1.0.49;makeotf.lib2.0.14853",
+-- },
+-- },
+-- },
+-- ["pfminfo"]={
+-- ["avgwidth"]=528,
+-- ["codepages"]={ 536871315, 0 },
+-- ["firstchar"]=32,
+-- ["fstype"]=12,
+-- ["hhead_ascent"]=1098,
+-- ["hhead_descent"]=-283,
+-- ["hheadascent_add"]=0,
+-- ["hheaddescent_add"]=0,
+-- ["hheadset"]=1,
+-- ["lastchar"]=64260,
+-- ["linegap"]=0,
+-- ["os2_breakchar"]=32,
+-- ["os2_capheight"]=692,
+-- ["os2_defaultchar"]=0,
+-- ["os2_family_class"]=0,
+-- ["os2_strikeypos"]=269,
+-- ["os2_strikeysize"]=50,
+-- ["os2_subxoff"]=0,
+-- ["os2_subxsize"]=650,
+-- ["os2_subyoff"]=75,
+-- ["os2_subysize"]=600,
+-- ["os2_supxoff"]=0,
+-- ["os2_supxsize"]=650,
+-- ["os2_supyoff"]=350,
+-- ["os2_supysize"]=600,
+-- ["os2_typoascent"]=726,
+-- ["os2_typodescent"]=-274,
+-- ["os2_typolinegap"]=200,
+-- ["os2_vendor"]="UKWN",
+-- ["os2_winascent"]=1098,
+-- ["os2_windescent"]=283,
+-- ["os2_xheight"]=449,
+-- ["panose"]={
+-- ["armstyle"]="Any",
+-- ["contrast"]="Any",
+-- ["familytype"]="Any",
+-- ["letterform"]="Any",
+-- ["midline"]="Any",
+-- ["proportion"]="Any",
+-- ["serifstyle"]="Any",
+-- ["strokevariation"]="Any",
+-- ["weight"]="Book",
+-- ["xheight"]="Any",
+-- },
+-- ["panose_set"]=1,
+-- ["pfmfamily"]=81,
+-- ["pfmset"]=1,
+-- ["subsuper_set"]=1,
+-- ["typoascent_add"]=0,
+-- ["typodescent_add"]=0,
+-- ["unicoderanges"]={ 536871047, 0, 0, 0 },
+-- ["vheadset"]=0,
+-- ["vlinegap"]=0,
+-- ["weight"]=400,
+-- ["width"]=5,
+-- ["winascent_add"]=0,
+-- ["windescent_add"]=0,
+-- },
+-- ["units_per_em"]=1000,
+-- ["version"]="2.004;PS 2.004;hotconv 1.0.49;makeotf.lib2.0.14853",
+-- ["weight"]="Book",
+-- }
+
+-- We had this as temporary solution because we needed a bit more info but in the
+-- meantime it got an interesting side effect: currently luatex delays loading of e.g.
+-- glyphs so here we first load and then discard which is a waste. In the past it did
+-- free memory because a full load was done. One of these things that goes unnoticed.
+--
+-- local function get_full_info(...) -- check with taco what we get / could get
+-- local ff = open_font(...)
+-- if ff then
+-- local d = ff -- and font_to_table(ff)
+-- d.glyphs, d.subfonts, d.gpos, d.gsub, d.lookups = nil, nil, nil, nil, nil
+-- close_font(ff)
+-- return d
+-- else
+-- return nil, "error in loading font"
+-- end
+-- end
+
+-- Phillip suggested this faster variant but it's still a hack as fontloader.info should
+-- return these keys/values (and maybe some more) but at least we close the loader which
+-- might save some memory in the end.
+
+-- local function get_full_info(name)
+-- local ff = open_font(name)
+-- if ff then
+-- local fields = table.tohash(font_fields(ff),true) -- isn't that one stable
+-- local d = {
+-- names = fields.names and ff.names,
+-- familyname = fields.familyname and ff.familyname,
+-- fullname = fields.fullname and ff.fullname,
+-- fontname = fields.fontname and ff.fontname,
+-- weight = fields.weight and ff.weight,
+-- italicangle = fields.italicangle and ff.italicangle,
+-- units = fields.units_per_em and ff.units_per_em,
+-- designsize = fields.design_size and ff.design_size,
+-- minsize = fields.design_range_bottom and ff.design_range_bottom,
+-- maxsize = fields.design_range_top and ff.design_range_top,
+-- italicangle = fields.italicangle and ff.italicangle,
+-- pfmweight = pfminfo and pfminfo.weight or 400,
+-- pfmwidth = pfminfo and pfminfo.width or 5,
+-- }
+-- -- setmetatableindex(d,function(t,k)
+-- -- report_names("warning, trying to access field %a in font table of %a",k,name)
+-- -- end)
+-- close_font(ff)
+-- return d
+-- else
+-- return nil, "error in loading font"
+-- end
+-- end
+
+-- more efficient:
+
+local fields = nil
+
+local function check_names(names)
+ if names then
+ for i=1,#names do
+ local name = names[i]
+ if lower(name.lang) == "english (us)" then -- lower added
+ return name.names
+ end
+ end
+ end
+end
+
+local function get_full_info(name)
+ local ff = open_font(name)
+ if ff then
+ -- unfortunately luatex aborts when a field is not available but we just make
+ -- sure that we only access a few known ones
+ local pfminfo = ff.pfminfo or { }
+ local names = check_names(ff.names) or { }
+ local weight = names.weight or ff.weight
+ local width = names.width -- no: ff.width
+ local d = {
+ fontname = ff.fontname,
+ fullname = names.fullname or ff.fullname,
+ family = names.family,
+ subfamily = names.subfamily,
+ familyname = names.preffamilyname or names.family or ff.familyname,
+ subfamilyname = names.prefmodifiers or names.subfamily,
+ weight = weight and lower(weight),
+ width = width and lower(width),
+ italicangle = round(1000*(tonumber(ff.italicangle) or 0))/1000 or 0,
+ units = ff.units_per_em,
+ designsize = ff.design_size,
+ minsize = ff.design_range_bottom,
+ maxsize = ff.design_range_top,
+ pfmweight = pfminfo.weight or 400,
+ pfmwidth = pfminfo.width or 5,
+ monospaced = pfminfo.panose and pfminfo.panose.proportion == "Monospaced",
+ }
+ close_font(ff)
+ return d
+ else
+ return nil, "error in loading font"
+ end
+end
+
+-- As we have lazy loading anyway, this one still is full and with less code than
+-- the previous one. But this depends on the garbage collector to kick in and in the
+-- current version that somehow happens not that often (on my machine I end up with
+-- some 3 GB extra before that happens).
+
+-- local function get_full_info(...)
+-- local ff = open_font(...)
+-- if ff then
+-- local d = { } -- ff is userdata so [1] or # fails on it
+-- setmetatableindex(d,ff)
+-- return d -- garbage collection will do the close_font(ff)
+-- else
+-- return nil, "error in loading font"
+-- end
+-- end
+
+fonts = fonts or { }
+local handlers = fonts.handlers or { }
+fonts.handlers = handlers
+local otf = handlers.otf or { }
+handlers.otf = otf
+local readers = otf.readers or { }
+otf.readers = readers
+
+fontloader.fullinfo = get_full_info
+readers.getinfo = readers.getinfo or get_full_info
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-osd.lua b/Master/texmf-dist/tex/context/base/mkiv/font-osd.lua
new file mode 100644
index 00000000000..6ff2e38b65d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-osd.lua
@@ -0,0 +1,2414 @@
+if not modules then modules = { } end modules ['font-osd'] = { -- script devanagari
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE",
+ copyright = "TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- I'll optimize this one with ischar (much faster) when I see a reason (read: I need a
+-- proper test case first).
+
+-- This is a version of font-odv.lua adapted to the new font loader and more
+-- direct hashing. The initialization code has been adapted (more efficient). One day
+-- I'll speed this up ... char swapping and properties.
+
+-- A few remarks:
+--
+-- This code is a partial rewrite of the code that deals with devanagari. The data and logic
+-- is by Kai Eigner and based based on Microsoft's OpenType specifications for specific
+-- scripts, but with a few improvements. More information can be found at:
+--
+-- deva: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/introO.mspx
+-- dev2: http://www.microsoft.com/typography/OpenType%20Dev/devanagari/intro.mspx
+--
+-- Rajeesh Nambiar provided patches for the malayalam variant. Thanks to feedback from
+-- the mailing list some aspects could be improved.
+--
+-- As I touched nearly all code, reshuffled it, optimized a lot, etc. etc. (imagine how
+-- much can get messed up in over a week work) it could be that I introduced bugs. There
+-- is more to gain (esp in the functions applied to a range) but I'll do that when
+-- everything works as expected. Kai's original code is kept in font-odk.lua as a reference
+-- so blame me (HH) for bugs.
+--
+-- Interesting is that Kai managed to write this on top of the existing otf handler. Only a
+-- few extensions were needed, like a few more analyzing states and dealing with changed
+-- head nodes in the core scanner as that only happens here. There's a lot going on here
+-- and it's only because I touched nearly all code that I got a bit of a picture of what
+-- happens. For in-depth knowledge one needs to consult Kai.
+--
+-- The rewrite mostly deals with efficiency, both in terms of speed and code. We also made
+-- sure that it suits generic use as well as use in ConTeXt. I removed some buglets but can
+-- as well have messed up the logic by doing this. For this we keep the original around
+-- as that serves as reference. Due to the lots of reshuffling glyphs quite some leaks
+-- occur(red) but once I'm satisfied with the rewrite I'll weed them. I also integrated
+-- initialization etc into the regular mechanisms.
+--
+-- In the meantime, we're down from 25.5-3.5=22 seconds to 17.7-3.5=14.2 seconds for a 100
+-- page sample (mid 2012) with both variants so it's worth the effort. Some more speedup is
+-- to be expected. Due to the method chosen it will never be real fast. If I ever become a
+-- power user I'll have a go at some further speed up. I will rename some functions (and
+-- features) once we don't need to check the original code. We now use a special subset
+-- sequence for use inside the analyzer (after all we could can store this in the dataset
+-- and save redundant analysis).
+--
+-- I might go for an array approach with respect to attributes (and reshuffling). Easier.
+--
+-- Some data will move to char-def.lua (some day).
+--
+-- By now we have yet another incremental improved version. In the end I might rewrite the
+-- code.
+
+-- Hans Hagen, PRAGMA-ADE, Hasselt NL
+--
+-- We could have c_nukta, c_halant, c_ra is we know that they are never used mixed within
+-- one script .. yes or no?
+--
+-- Matras: according to Microsoft typography specifications "up to one of each type:
+-- pre-, above-, below- or post- base", but that does not seem to be right. It could
+-- become an option.
+
+local insert, imerge, copy = table.insert, table.imerge, table.copy
+local next, type = next, type
+
+local report_devanagari = logs.reporter("otf","devanagari")
+
+fonts = fonts or { }
+fonts.analyzers = fonts.analyzers or { }
+fonts.analyzers.methods = fonts.analyzers.methods or { node = { otf = { } } }
+
+local otf = fonts.handlers.otf
+
+local nodecodes = nodes.nodecodes
+local glyph_code = nodecodes.glyph
+
+local handlers = otf.handlers
+local methods = fonts.analyzers.methods
+
+local otffeatures = fonts.constructors.newfeatures("otf")
+local registerotffeature = otffeatures.register
+
+local nuts = nodes.nuts
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local getid = nuts.getid
+local getchar = nuts.getchar
+local getfont = nuts.getfont
+local getsubtype = nuts.getsubtype
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setchar = nuts.setchar
+local getprop = nuts.getprop
+local setprop = nuts.setprop
+
+local ischar = nuts.is_char
+
+local insert_node_after = nuts.insert_after
+local copy_node = nuts.copy
+local free_node = nuts.free
+local remove_node = nuts.remove
+local flush_list = nuts.flush_list
+
+local copyinjection = nodes.injections.copy -- KE: is this necessary? HH: probably not as positioning comes later and we rawget/set
+
+local unsetvalue = attributes.unsetvalue
+
+local fontdata = fonts.hashes.identifiers
+
+local a_state = attributes.private('state')
+local a_syllabe = attributes.private('syllabe')
+
+local dotted_circle = 0x25CC
+
+local states = fonts.analyzers.states -- not features
+
+local s_rphf = states.rphf
+local s_half = states.half
+local s_pref = states.pref
+local s_blwf = states.blwf
+local s_pstf = states.pstf
+
+local replace_all_nbsp = nil
+
+replace_all_nbsp = function(head) -- delayed definition
+ replace_all_nbsp = typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
+ return head
+ end
+ return replace_all_nbsp(head)
+end
+
+local xprocesscharacters = nil
+
+if context then
+ xprocesscharacters = function(head,font)
+ xprocesscharacters = nodes.handlers.characters
+ return xprocesscharacters(head,font)
+ end
+else
+ xprocesscharacters = function(head,font)
+ xprocesscharacters = nodes.handlers.nodepass -- generic
+ return xprocesscharacters(head,font)
+ end
+end
+
+local function processcharacters(head,font)
+ return tonut(xprocesscharacters(tonode(head))) -- can be more efficient in context, just direct call
+end
+
+-- local fontprocesses = fonts.hashes.processes
+--
+-- function processcharacters(head,font)
+-- local processors = fontprocesses[font]
+-- for i=1,#processors do
+-- head = processors[i](head,font,0)
+-- end
+-- return head, true
+-- end
+
+-- In due time there will be entries here for scripts like Bengali, Gujarati,
+-- Gurmukhi, Kannada, Malayalam, Oriya, Tamil, Telugu. Feel free to provide the
+-- code points.
+
+-- We can assume that script are not mixed in the source but if that is the case
+-- we might need to have consonants etc per script and initialize a local table
+-- pointing to the right one.
+
+-- new, to be checked:
+--
+-- U+00978 : DEVANAGARI LETTER MARWARI DDA
+-- U+00980 : BENGALI ANJI
+-- U+00C00 : TELUGU SIGN COMBINING CANDRABINDU ABOVE
+-- U+00C34 : TELUGU LETTER LLLA
+-- U+00C81 : KANNADA SIGN CANDRABINDU
+-- U+00D01 : MALAYALAM SIGN CANDRABINDU
+-- U+00DE6 : SINHALA LITH DIGIT ZERO
+-- U+00DE7 : SINHALA LITH DIGIT ONE
+-- U+00DE8 : SINHALA LITH DIGIT TWO
+-- U+00DE9 : SINHALA LITH DIGIT THREE
+-- U+00DEA : SINHALA LITH DIGIT FOUR
+-- U+00DEB : SINHALA LITH DIGIT FIVE
+-- U+00DEC : SINHALA LITH DIGIT SIX
+-- U+00DED : SINHALA LITH DIGIT SEVEN
+-- U+00DEE : SINHALA LITH DIGIT EIGHT
+-- U+00DEF : SINHALA LITH DIGIT NINE
+
+local consonant = {
+ -- devanagari
+ [0x0915] = true, [0x0916] = true, [0x0917] = true, [0x0918] = true,
+ [0x0919] = true, [0x091A] = true, [0x091B] = true, [0x091C] = true,
+ [0x091D] = true, [0x091E] = true, [0x091F] = true, [0x0920] = true,
+ [0x0921] = true, [0x0922] = true, [0x0923] = true, [0x0924] = true,
+ [0x0925] = true, [0x0926] = true, [0x0927] = true, [0x0928] = true,
+ [0x0929] = true, [0x092A] = true, [0x092B] = true, [0x092C] = true,
+ [0x092D] = true, [0x092E] = true, [0x092F] = true, [0x0930] = true,
+ [0x0931] = true, [0x0932] = true, [0x0933] = true, [0x0934] = true,
+ [0x0935] = true, [0x0936] = true, [0x0937] = true, [0x0938] = true,
+ [0x0939] = true, [0x0958] = true, [0x0959] = true, [0x095A] = true,
+ [0x095B] = true, [0x095C] = true, [0x095D] = true, [0x095E] = true,
+ [0x095F] = true, [0x0979] = true, [0x097A] = true,
+ -- kannada
+ [0x0C95] = true, [0x0C96] = true, [0x0C97] = true, [0x0C98] = true,
+ [0x0C99] = true, [0x0C9A] = true, [0x0C9B] = true, [0x0C9C] = true,
+ [0x0C9D] = true, [0x0C9E] = true, [0x0C9F] = true, [0x0CA0] = true,
+ [0x0CA1] = true, [0x0CA2] = true, [0x0CA3] = true, [0x0CA4] = true,
+ [0x0CA5] = true, [0x0CA6] = true, [0x0CA7] = true, [0x0CA8] = true,
+ [0x0CA9] = true, [0x0CAA] = true, [0x0CAB] = true, [0x0CAC] = true,
+ [0x0CAD] = true, [0x0CAE] = true, [0x0CAF] = true, [0x0CB0] = true,
+ [0x0CB1] = true, [0x0CB2] = true, [0x0CB3] = true, [0x0CB4] = true,
+ [0x0CB5] = true, [0x0CB6] = true, [0x0CB7] = true, [0x0CB8] = true,
+ [0x0CB9] = true,
+ [0x0CDE] = true, -- obsolete
+ -- malayalam
+ [0x0D15] = true, [0x0D16] = true, [0x0D17] = true, [0x0D18] = true,
+ [0x0D19] = true, [0x0D1A] = true, [0x0D1B] = true, [0x0D1C] = true,
+ [0x0D1D] = true, [0x0D1E] = true, [0x0D1F] = true, [0x0D20] = true,
+ [0x0D21] = true, [0x0D22] = true, [0x0D23] = true, [0x0D24] = true,
+ [0x0D25] = true, [0x0D26] = true, [0x0D27] = true, [0x0D28] = true,
+ [0x0D29] = true, [0x0D2A] = true, [0x0D2B] = true, [0x0D2C] = true,
+ [0x0D2D] = true, [0x0D2E] = true, [0x0D2F] = true, [0x0D30] = true,
+ [0x0D31] = true, [0x0D32] = true, [0x0D33] = true, [0x0D34] = true,
+ [0x0D35] = true, [0x0D36] = true, [0x0D37] = true, [0x0D38] = true,
+ [0x0D39] = true, [0x0D3A] = true,
+}
+
+local independent_vowel = {
+ -- devanagari
+ [0x0904] = true, [0x0905] = true, [0x0906] = true, [0x0907] = true,
+ [0x0908] = true, [0x0909] = true, [0x090A] = true, [0x090B] = true,
+ [0x090C] = true, [0x090D] = true, [0x090E] = true, [0x090F] = true,
+ [0x0910] = true, [0x0911] = true, [0x0912] = true, [0x0913] = true,
+ [0x0914] = true, [0x0960] = true, [0x0961] = true, [0x0972] = true,
+ [0x0973] = true, [0x0974] = true, [0x0975] = true, [0x0976] = true,
+ [0x0977] = true,
+ -- kannada
+ [0x0C85] = true, [0x0C86] = true, [0x0C87] = true, [0x0C88] = true,
+ [0x0C89] = true, [0x0C8A] = true, [0x0C8B] = true, [0x0C8C] = true,
+ [0x0C8D] = true, [0x0C8E] = true, [0x0C8F] = true, [0x0C90] = true,
+ [0x0C91] = true, [0x0C92] = true, [0x0C93] = true, [0x0C94] = true,
+ -- malayalam
+ [0x0D05] = true, [0x0D06] = true, [0x0D07] = true, [0x0D08] = true,
+ [0x0D09] = true, [0x0D0A] = true, [0x0D0B] = true, [0x0D0C] = true,
+ [0x0D0E] = true, [0x0D0F] = true, [0x0D10] = true, [0x0D12] = true,
+ [0x0D13] = true, [0x0D14] = true,
+}
+
+local dependent_vowel = { -- matra
+ -- devanagari
+ [0x093A] = true, [0x093B] = true, [0x093E] = true, [0x093F] = true,
+ [0x0940] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true,
+ [0x0944] = true, [0x0945] = true, [0x0946] = true, [0x0947] = true,
+ [0x0948] = true, [0x0949] = true, [0x094A] = true, [0x094B] = true,
+ [0x094C] = true, [0x094E] = true, [0x094F] = true, [0x0955] = true,
+ [0x0956] = true, [0x0957] = true, [0x0962] = true, [0x0963] = true,
+ -- kannada
+ [0x0CBE] = true, [0x0CBF] = true, [0x0CC0] = true, [0x0CC1] = true,
+ [0x0CC2] = true, [0x0CC3] = true, [0x0CC4] = true, [0x0CC5] = true,
+ [0x0CC6] = true, [0x0CC7] = true, [0x0CC8] = true, [0x0CC9] = true,
+ [0x0CCA] = true, [0x0CCB] = true, [0x0CCC] = true,
+ -- malayalam
+ [0x0D3E] = true, [0x0D3F] = true, [0x0D40] = true, [0x0D41] = true,
+ [0x0D42] = true, [0x0D43] = true, [0x0D44] = true, [0x0D46] = true,
+ [0x0D47] = true, [0x0D48] = true, [0x0D4A] = true, [0x0D4B] = true,
+ [0x0D4C] = true, [0x0D57] = true,
+}
+
+local vowel_modifier = {
+ -- devanagari
+ [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x0903] = true,
+ -- A8E0 - A8F1 are cantillation marks for the Samaveda and may not belong here.
+ [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true,
+ [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true,
+ [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true,
+ [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true,
+ [0xA8F0] = true, [0xA8F1] = true,
+ -- malayalam
+ [0x0D02] = true, [0x0D03] = true,
+}
+
+local stress_tone_mark = {
+ [0x0951] = true, [0x0952] = true, [0x0953] = true, [0x0954] = true,
+ -- kannada
+ [0x0CCD] = true,
+ -- malayalam
+ [0x0D4D] = true,
+}
+
+local nukta = {
+ -- devanagari
+ [0x093C] = true,
+ -- kannada:
+ [0x0CBC] = true,
+}
+
+local halant = {
+ -- devanagari
+ [0x094D] = true,
+ -- kannada
+ [0x0CCD] = true,
+ -- malayalam
+ [0x0D4D] = true,
+}
+
+local ra = {
+ -- devanagari
+ [0x0930] = true,
+ -- kannada
+ [0x0CB0] = true,
+ -- malayalam
+ [0x0D30] = true,
+}
+
+local c_anudatta = 0x0952 -- used to be tables
+local c_nbsp = 0x00A0 -- used to be tables
+local c_zwnj = 0x200C -- used to be tables
+local c_zwj = 0x200D -- used to be tables
+
+local zw_char = { -- could also be inlined
+ [0x200C] = true,
+ [0x200D] = true,
+}
+
+-- 0C82 anusvara
+-- 0C83 visarga
+-- 0CBD avagraha
+-- 0CD5 length mark
+-- 0CD6 ai length mark
+-- 0CE0 letter ll
+-- 0CE1 letter rr
+-- 0CE2 vowel sign l
+-- 0CE2 vowel sign ll
+-- 0CF1 sign
+-- 0CF2 sign
+-- OCE6 - OCEF digits
+
+local pre_mark = {
+ [0x093F] = true, [0x094E] = true,
+ -- malayalam
+ [0x0D46] = true, [0x0D47] = true, [0x0D48] = true,
+}
+
+local above_mark = {
+ [0x0900] = true, [0x0901] = true, [0x0902] = true, [0x093A] = true,
+ [0x0945] = true, [0x0946] = true, [0x0947] = true, [0x0948] = true,
+ [0x0951] = true, [0x0953] = true, [0x0954] = true, [0x0955] = true,
+ [0xA8E0] = true, [0xA8E1] = true, [0xA8E2] = true, [0xA8E3] = true,
+ [0xA8E4] = true, [0xA8E5] = true, [0xA8E6] = true, [0xA8E7] = true,
+ [0xA8E8] = true, [0xA8E9] = true, [0xA8EA] = true, [0xA8EB] = true,
+ [0xA8EC] = true, [0xA8ED] = true, [0xA8EE] = true, [0xA8EF] = true,
+ [0xA8F0] = true, [0xA8F1] = true,
+ -- malayalam
+ [0x0D4E] = true,
+}
+
+local below_mark = {
+ [0x093C] = true, [0x0941] = true, [0x0942] = true, [0x0943] = true,
+ [0x0944] = true, [0x094D] = true, [0x0952] = true, [0x0956] = true,
+ [0x0957] = true, [0x0962] = true, [0x0963] = true,
+}
+
+local post_mark = {
+ [0x0903] = true, [0x093B] = true, [0x093E] = true, [0x0940] = true,
+ [0x0949] = true, [0x094A] = true, [0x094B] = true, [0x094C] = true,
+ [0x094F] = true,
+}
+
+local twopart_mark = {
+ -- malayalam
+ [0x0D4A] = { 0x0D46, 0x0D3E, }, -- ൊ
+ [0x0D4B] = { 0x0D47, 0x0D3E, }, -- ോ
+ [0x0D4C] = { 0x0D46, 0x0D57, }, -- ൌ
+}
+
+local mark_four = { } -- As we access these frequently an extra hash is used.
+
+for k, v in next, pre_mark do mark_four[k] = pre_mark end
+for k, v in next, above_mark do mark_four[k] = above_mark end
+for k, v in next, below_mark do mark_four[k] = below_mark end
+for k, v in next, post_mark do mark_four[k] = post_mark end
+
+local mark_above_below_post = { }
+
+for k, v in next, above_mark do mark_above_below_post[k] = above_mark end
+for k, v in next, below_mark do mark_above_below_post[k] = below_mark end
+for k, v in next, post_mark do mark_above_below_post[k] = post_mark end
+
+-- Again, this table can be extended for other scripts than devanagari. Actually,
+-- for ConTeXt this kind of data is kept elsewhere so eventually we might move
+-- tables to someplace else.
+
+local reorder_class = {
+ -- devanagari
+ [0x0930] = "before postscript",
+ [0x093F] = "before half",
+ [0x0940] = "after subscript",
+ [0x0941] = "after subscript",
+ [0x0942] = "after subscript",
+ [0x0943] = "after subscript",
+ [0x0944] = "after subscript",
+ [0x0945] = "after subscript",
+ [0x0946] = "after subscript",
+ [0x0947] = "after subscript",
+ [0x0948] = "after subscript",
+ [0x0949] = "after subscript",
+ [0x094A] = "after subscript",
+ [0x094B] = "after subscript",
+ [0x094C] = "after subscript",
+ [0x0962] = "after subscript",
+ [0x0963] = "after subscript",
+ [0x093E] = "after subscript",
+ -- kannada:
+ [0x0CB0] = "after postscript", -- todo in code below
+ [0x0CBF] = "before subscript", -- todo in code below
+ [0x0CC6] = "before subscript", -- todo in code below
+ [0x0CCC] = "before subscript", -- todo in code below
+ [0x0CBE] = "before subscript", -- todo in code below
+ [0x0CE2] = "before subscript", -- todo in code below
+ [0x0CE3] = "before subscript", -- todo in code below
+ [0x0CC1] = "before subscript", -- todo in code below
+ [0x0CC2] = "before subscript", -- todo in code below
+ [0x0CC3] = "after subscript",
+ [0x0CC4] = "after subscript",
+ [0x0CD5] = "after subscript",
+ [0x0CD6] = "after subscript",
+ -- malayalam
+}
+
+-- We use some pseudo features as we need to manipulate the nodelist based
+-- on information in the font as well as already applied features.
+
+local dflt_true = {
+ dflt = true
+}
+
+local dev2_defaults = {
+ dev2 = dflt_true,
+}
+
+local deva_defaults = {
+ dev2 = dflt_true,
+ deva = dflt_true,
+}
+
+local false_flags = { false, false, false, false }
+
+local both_joiners_true = {
+ [0x200C] = true,
+ [0x200D] = true,
+}
+
+local sequence_reorder_matras = {
+ features = { dv01 = dev2_defaults },
+ flags = false_flags,
+ name = "dv01_reorder_matras",
+ order = { "dv01" },
+ type = "devanagari_reorder_matras",
+ nofsteps = 1,
+ steps = {
+ {
+ osdstep = true,
+ coverage = pre_mark,
+ }
+ }
+}
+
+local sequence_reorder_reph = {
+ features = { dv02 = dev2_defaults },
+ flags = false_flags,
+ name = "dv02_reorder_reph",
+ order = { "dv02" },
+ type = "devanagari_reorder_reph",
+ nofsteps = 1,
+ steps = {
+ {
+ osdstep = true,
+ coverage = { },
+ }
+ }
+}
+
+local sequence_reorder_pre_base_reordering_consonants = {
+ features = { dv03 = dev2_defaults },
+ flags = false_flags,
+ name = "dv03_reorder_pre_base_reordering_consonants",
+ order = { "dv03" },
+ type = "devanagari_reorder_pre_base_reordering_consonants",
+ nofsteps = 1,
+ steps = {
+ {
+ osdstep = true,
+ coverage = { },
+ }
+ }
+}
+
+local sequence_remove_joiners = {
+ features = { dv04 = deva_defaults },
+ flags = false_flags,
+ name = "dv04_remove_joiners",
+ order = { "dv04" },
+ type = "devanagari_remove_joiners",
+ nofsteps = 1,
+ steps = {
+ { osdstep = true,
+ coverage = both_joiners_true,
+ },
+ }
+}
+
+-- Looping over feature twice as efficient as looping over basic forms (some
+-- 350 checks instead of 750 for one font). This is something to keep an eye on
+-- as it might depends on the font. Not that it's a bottleneck.
+
+local basic_shaping_forms = {
+ nukt = true,
+ akhn = true,
+ rphf = true,
+ pref = true,
+ rkrf = true,
+ blwf = true,
+ half = true,
+ pstf = true,
+ vatu = true,
+ cjct = true,
+}
+
+local valid = {
+ akhn = true, -- malayalam
+ rphf = true,
+ pref = true,
+ half = true,
+ blwf = true,
+ pstf = true,
+ pres = true, -- malayalam
+ blws = true, -- malayalam
+ psts = true, -- malayalam
+}
+
+local function initializedevanagi(tfmdata)
+ local script, language = otf.scriptandlanguage(tfmdata,attr) -- todo: take fast variant
+ if script == "deva" or script == "dev2" or script =="mlym" or script == "mlm2" then
+ local resources = tfmdata.resources
+ local devanagari = resources.devanagari
+ if not devanagari then
+ --
+ report_devanagari("adding devanagari features to font")
+ --
+ local gsubfeatures = resources.features.gsub
+ local sequences = resources.sequences
+ local sharedfeatures = tfmdata.shared.features
+ --
+ local lastmatch = 0
+ for s=1,#sequences do -- classify chars
+ local features = sequences[s].features
+ if features then
+ for k, v in next, features do
+ if basic_shaping_forms[k] then
+ lastmatch = s
+ end
+ end
+ end
+ end
+ local insertindex = lastmatch + 1
+ --
+ gsubfeatures["dv01"] = dev2_defaults -- reorder matras
+ gsubfeatures["dv02"] = dev2_defaults -- reorder reph
+ gsubfeatures["dv03"] = dev2_defaults -- reorder pre base reordering consonants
+ gsubfeatures["dv04"] = deva_defaults -- remove joiners
+ --
+ local reorder_pre_base_reordering_consonants = copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph = copy(sequence_reorder_reph)
+ local reorder_matras = copy(sequence_reorder_matras)
+ local remove_joiners = copy(sequence_remove_joiners)
+ --
+ insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
+ insert(sequences,insertindex,reorder_reph)
+ insert(sequences,insertindex,reorder_matras)
+ insert(sequences,insertindex,remove_joiners)
+ --
+ local blwfcache = { }
+ local seqsubset = { }
+ local rephstep = {
+ coverage = { } -- will be adapted each work
+ }
+ local devanagari = {
+ reph = false,
+ vattu = false,
+ blwfcache = blwfcache,
+ seqsubset = seqsubset,
+ reorderreph = rephstep,
+
+ }
+ --
+ reorder_reph.steps = { rephstep }
+ --
+ local pre_base_reordering_consonants = { }
+ reorder_pre_base_reordering_consonants.steps[1].coverage = pre_base_reordering_consonants
+ --
+ resources.devanagari = devanagari
+ --
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local steps = sequence.steps
+ local nofsteps = sequence.nofsteps
+ local features = sequence.features
+ if features["rphf"] then
+ -- deva
+ devanagari.reph = true
+ elseif features["blwf"] then
+ -- deva
+ devanagari.vattu = true
+ -- dev2
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, coverage do
+ if not blwfcache[k] then
+ blwfcache[k] = v
+ end
+ end
+ end
+ end
+ end
+ if valid[kind] then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local reph = false
+ if step.osdstep then
+ -- rphf acts on consonant + halant
+ for k, v in next, ra do
+ local r = coverage[k]
+ if r then
+ local h = false
+ for k, v in next, halant do
+ local h = r[k]
+ if h then
+ reph = h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ else
+ -- rphf might be result of other handler/chainproc
+ end
+ seqsubset[#seqsubset+1] = { kind, coverage, reph }
+ end
+ end
+ end
+ if kind == "pref" then
+ local sequence = dataset[3] -- was [5]
+ local steps = sequence.steps
+ local nofsteps = sequence.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ for k, v in next, halant do
+ local h = coverage[k]
+ if h then
+ local found = false
+ for k, v in next, h do
+ found = v and v.ligature
+ if found then
+ pre_base_reordering_consonants[k] = found
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ --
+ if script == "deva" then
+ sharedfeatures["dv04"] = true -- dv04_remove_joiners
+ elseif script == "dev2" then
+ sharedfeatures["dv01"] = true -- dv01_reorder_matras
+ sharedfeatures["dv02"] = true -- dv02_reorder_reph
+ sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
+ sharedfeatures["dv04"] = true -- dv04_remove_joiners
+ elseif script == "mlym" then
+ sharedfeatures["pstf"] = true
+ elseif script == "mlm2" then
+ sharedfeatures["pstf"] = true
+ sharedfeatures["pref"] = true
+ sharedfeatures["dv03"] = true -- dv03_reorder_pre_base_reordering_consonants
+ gsubfeatures ["dv03"] = dev2_defaults -- reorder pre base reordering consonants
+ insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ end
+ end
+ end
+end
+
+registerotffeature {
+ name = "devanagari",
+ description = "inject additional features",
+ default = true,
+ initializers = {
+ node = initializedevanagi,
+ },
+}
+
+-- hm, this is applied to one character:
+
+local function deva_initialize(font,attr) -- we need a proper hook into the dataset initializer
+
+ local tfmdata = fontdata[font]
+ local datasets = otf.dataset(tfmdata,font,attr) -- don't we know this one?
+ local devanagaridata = datasets.devanagari
+
+ if not devanagaridata then
+
+ devanagaridata = {
+ reph = false,
+ vattu = false,
+ blwfcache = { },
+ }
+ datasets.devanagari = devanagaridata
+ local resources = tfmdata.resources
+ local devanagari = resources.devanagari
+
+ for s=1,#datasets do
+ local dataset = datasets[s]
+ if dataset and dataset[1] then -- value
+ local kind = dataset[4]
+ if kind == "rphf" then
+ -- deva
+ devanagaridata.reph = true
+ elseif kind == "blwf" then
+ -- deva
+ devanagaridata.vattu = true
+ -- dev2
+ devanagaridata.blwfcache = devanagari.blwfcache
+ end
+ end
+ end
+
+ end
+
+ return devanagaridata.reph, devanagaridata.vattu, devanagaridata.blwfcache
+
+end
+
+local function deva_reorder(head,start,stop,font,attr,nbspaces)
+
+ local reph, vattu, blwfcache = deva_initialize(font,attr) -- todo: a hash[font]
+
+ local current = start
+ local n = getnext(start)
+ local base = nil
+ local firstcons = nil
+ local lastcons = nil
+ local basefound = false
+
+ if reph and ra[getchar(start)] and halant[getchar(n)] then
+ -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph
+ -- from candidates for base consonants
+ if n == stop then
+ return head, stop, nbspaces
+ end
+ if getchar(getnext(n)) == c_zwj then
+ current = start
+ else
+ current = getnext(n)
+ setprop(start,a_state,s_rphf)
+ end
+ end
+
+ if getchar(current) == c_nbsp then
+ -- Stand Alone cluster
+ if current == stop then
+ stop = getprev(stop)
+ head = remove_node(head,current)
+ free_node(current)
+ return head, stop, nbspaces
+ else
+ nbspaces = nbspaces + 1
+ base = current
+ firstcons = current
+ lastcons = current
+ current = getnext(current)
+ if current ~= stop then
+ if nukta[getchar(current)] then
+ current = getnext(current)
+ end
+ if getchar(current) == c_zwj then
+ if current ~= stop then
+ local next = getnext(current)
+ if next ~= stop and halant[getchar(next)] then
+ current = next
+ next = getnext(current)
+ local tmp = next and getnext(next) or nil -- needs checking
+ local changestop = next == stop
+ local tempcurrent = copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent = copy_node(current)
+ copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent = processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next) == getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n = copy_node(current)
+ copyinjection(n,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set
+ setchar(current,dotted_circle)
+ head = insert_node_after(head, current, n)
+ else
+ setchar(current,getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node
+ local freenode = getnext(current)
+ setlink(current,tmp)
+ free_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop = current
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ while not basefound do
+ -- find base consonant
+ local char = getchar(current)
+ if consonant[char] then
+ setprop(current,a_state,s_half)
+ if not firstcons then
+ firstcons = current
+ end
+ lastcons = current
+ if not base then
+ base = current
+ elseif blwfcache[char] then
+ -- consonant has below-base (or post-base) form
+ setprop(current,a_state,s_blwf)
+ else
+ base = current
+ end
+ end
+ basefound = current == stop
+ current = getnext(current)
+ end
+
+ if base ~= lastcons then
+ -- if base consonant is not last one then move halant from base consonant to last one
+ local np = base
+ local n = getnext(base)
+ local ch = getchar(n)
+ if nukta[ch] then
+ np = n
+ n = getnext(n)
+ ch = getchar(n)
+ end
+ if halant[ch] then
+ if lastcons ~= stop then
+ local ln = getnext(lastcons)
+ if nukta[getchar(ln)] then
+ lastcons = ln
+ end
+ end
+ -- local np = getprev(n)
+ local nn = getnext(n)
+ local ln = getnext(lastcons) -- what if lastcons is nn ?
+ setlink(np,nn)
+ setnext(lastcons,n)
+ if ln then
+ setprev(ln,n)
+ end
+ setnext(n,ln)
+ setprev(n,lastcons)
+ if lastcons == stop then
+ stop = n
+ end
+ end
+ end
+
+ n = getnext(start)
+ if n ~= stop and ra[getchar(start)] and halant[getchar(n)] and not zw_char[getchar(getnext(n))] then
+ -- if syllable starts with Ra + H then move this combination so that it follows either:
+ -- the post-base 'matra' (if any) or the base consonant
+ local matra = base
+ if base ~= stop then
+ local next = getnext(base)
+ if dependent_vowel[getchar(next)] then
+ matra = next
+ end
+ end
+ -- [sp][start][n][nn] [matra|base][?]
+ -- [matra|base][start] [n][?] [sp][nn]
+ local sp = getprev(start)
+ local nn = getnext(n)
+ local mn = getnext(matra)
+ setlink(sp,nn)
+ setlink(matra,start)
+ setlink(n,mn)
+ if head == start then
+ head = nn
+ end
+ start = nn
+ if matra == stop then
+ stop = n
+ end
+ end
+
+ local current = start
+ while current ~= stop do
+ local next = getnext(current)
+ if next ~= stop and halant[getchar(next)] and getchar(getnext(next)) == c_zwnj then
+ setprop(current,a_state,unsetvalue)
+ end
+ current = next
+ end
+
+ if base ~= stop and getprop(base,a_state) then
+ local next = getnext(base)
+ if halant[getchar(next)] and not (next ~= stop and getchar(getnext(next)) == c_zwj) then
+ setprop(base,a_state,unsetvalue)
+ end
+ end
+
+ -- ToDo: split two- or three-part matras into their parts. Then, move the left 'matra' part to the beginning of the syllable.
+ -- Not necessary for Devanagari. However it is necessay for other scripts, such as Tamil (e.g. TAMIL VOWEL SIGN O - 0BCA)
+
+ -- classify consonants and 'matra' parts as pre-base, above-base (Reph), below-base or post-base, and group elements of the syllable (consonants and 'matras') according to this classification
+
+ local current, allreordered, moved = start, false, { [base] = true }
+ local a, b, p, bn = base, base, base, getnext(base)
+ if base ~= stop and nukta[getchar(bn)] then
+ a, b, p = bn, bn, bn
+ end
+ while not allreordered do
+ -- current is always consonant
+ local c = current
+ local n = getnext(current)
+ local l = nil -- used ?
+ if c ~= stop then
+ local ch = getchar(n)
+ if nukta[ch] then
+ c = n
+ n = getnext(n)
+ ch = getchar(n)
+ end
+ if c ~= stop then
+ if halant[ch] then
+ c = n
+ n = getnext(n)
+ ch = getchar(n)
+ end
+ while c ~= stop and dependent_vowel[ch] do
+ c = n
+ n = getnext(n)
+ ch = getchar(n)
+ end
+ if c ~= stop then
+ if vowel_modifier[ch] then
+ c = n
+ n = getnext(n)
+ ch = getchar(n)
+ end
+ if c ~= stop and stress_tone_mark[ch] then
+ c = n
+ n = getnext(n)
+ end
+ end
+ end
+ end
+ local bp = getprev(firstcons)
+ local cn = getnext(current)
+ local last = getnext(c)
+ while cn ~= last do
+ -- move pre-base matras...
+ if pre_mark[getchar(cn)] then
+ if bp then
+ setnext(bp,cn)
+ end
+ local prev, next = getboth(cn)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ if cn == stop then
+ stop = prev
+ end
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons == start then
+ if head == start then
+ head = cn
+ end
+ start = cn
+ end
+ break
+ end
+ cn = getnext(cn)
+ end
+ allreordered = c == stop
+ current = getnext(c)
+ end
+
+ if reph or vattu then
+ local current, cns = start, nil
+ while current ~= stop do
+ local c = current
+ local n = getnext(current)
+ if ra[getchar(current)] and halant[getchar(n)] then
+ c = n
+ n = getnext(n)
+ local b, bn = base, base
+ while bn ~= stop do
+ local next = getnext(bn)
+ if dependent_vowel[getchar(next)] then
+ b = next
+ end
+ bn = next
+ end
+ if getprop(current,a_state) == s_rphf then
+ -- position Reph (Ra + H) after post-base 'matra' (if any) since these
+ -- become marks on the 'matra', not on the base glyph
+ if b ~= current then
+ if current == start then
+ if head == start then
+ head = n
+ end
+ start = n
+ end
+ if b == stop then
+ stop = c
+ end
+ local prev = getprev(current)
+ setlink(prev,n)
+ local next = getnext(b)
+ setlink(c,next)
+ setlink(b,current)
+ end
+ elseif cns and getnext(cns) ~= current then -- todo: optimize next
+ -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants)
+ local cp = getprev(current)
+ local cnsn = getnext(cns)
+ setlink(cp,n)
+ setlink(cns,current)
+ setlink(c,cnsn)
+ if c == stop then
+ stop = cp
+ break
+ end
+ current = getprev(n)
+ end
+ else
+ local char = getchar(current)
+ if consonant[char] then
+ cns = current
+ local next = getnext(cns)
+ if halant[getchar(next)] then
+ cns = next
+ end
+ elseif char == c_nbsp then
+ nbspaces = nbspaces + 1
+ cns = current
+ local next = getnext(cns)
+ if halant[getchar(next)] then
+ cns = next
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ end
+
+ if getchar(base) == c_nbsp then
+ nbspaces = nbspaces - 1
+ head = remove_node(head,base)
+ free_node(base)
+ end
+
+ return head, stop, nbspaces
+end
+
+-- If a pre-base matra character had been reordered before applying basic features,
+-- the glyph can be moved closer to the main consonant based on whether half-forms had been formed.
+-- Actual position for the matra is defined as “after last standalone halant glyph,
+-- after initial matra position and before the main consonant”.
+-- If ZWJ or ZWNJ follow this halant, position is moved after it.
+
+-- so we break out ... this is only done for the first 'word' (if we feed words we can as
+-- well test for non glyph.
+
+function handlers.devanagari_reorder_matras(head,start) -- no leak
+ local current = start -- we could cache attributes here
+ local startfont = getfont(start)
+ local startattr = getprop(start,a_syllabe)
+ while current do
+ local char = ischar(current,startfont)
+ local next = getnext(current)
+ if char and getprop(current,a_syllabe) == startattr then
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local char = ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe) == startattr then
+ current = next
+ next = getnext(current)
+ end
+ end
+ -- can be optimzied
+ local startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start = startnext
+ break
+ end
+ end
+ current = next
+ end
+ return head, start, true
+end
+
+-- todo: way more caching of attributes and font
+
+-- Reph’s original position is always at the beginning of the syllable, (i.e. it is not reordered at the character reordering stage).
+-- However, it will be reordered according to the basic-forms shaping results.
+-- Possible positions for reph, depending on the script, are; after main, before post-base consonant forms,
+-- and after post-base consonant forms.
+
+-- 1 If reph should be positioned after post-base consonant forms, proceed to step 5.
+-- 2 If the reph repositioning class is not after post-base: target position is after the first explicit halant glyph between
+-- the first post-reph consonant and last main consonant. If ZWJ or ZWNJ are following this halant, position is moved after it.
+-- If such position is found, this is the target position. Otherwise, proceed to the next step.
+-- Note: in old-implementation fonts, where classifications were fixed in shaping engine,
+-- there was no case where reph position will be found on this step.
+-- 3 If reph should be repositioned after the main consonant: from the first consonant not ligated with main,
+-- or find the first consonant that is not a potential pre-base reordering Ra.
+-- 4 If reph should be positioned before post-base consonant, find first post-base classified consonant not ligated with main.
+-- If no consonant is found, the target position should be before the first matra, syllable modifier sign or vedic sign.
+-- 5 If no consonant is found in steps 3 or 4, move reph to a position immediately before the first post-base matra,
+-- syllable modifier sign or vedic sign that has a reordering class after the intended reph position.
+-- For example, if the reordering position for reph is post-main, it will skip above-base matras that also have a post-main position.
+-- 6 Otherwise, reorder reph to the end of the syllable.
+
+-- hm, this only looks at the start of a nodelist ... is this supposed to be line based?
+
+function handlers.devanagari_reorder_reph(head,start)
+ -- since in Devanagari reph has reordering position 'before postscript' dev2 only follows step 2, 4, and 6,
+ -- the other steps are still ToDo (required for scripts other than dev2)
+ local current = getnext(start)
+ local startnext = nil
+ local startprev = nil
+ local startfont = getfont(start)
+ local startattr = getprop(start,a_syllabe)
+ while current do
+ local char = ischar(current,font)
+ if char and getprop(current,a_syllabe) == startattr then -- step 2
+ if halant[char] and not getprop(current,a_state) then
+ local next = getnext(current)
+ if next then
+ local nextchar = ischar(next,font)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe) == startattr then
+ current = next
+ next = getnext(current)
+ end
+ end
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ break
+ end
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ if not startnext then
+ current = getnext(start)
+ while current do
+ local char = ischar(current,font)
+ if char and getprop(current,a_syllabe) == startattr then -- step 4
+ if getprop(current,a_state) == s_pstf then -- post-base
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ local prev = getprev(current)
+ setlink(prev,start)
+ setlink(start,current)
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ break
+ end
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ end
+ -- todo: determine position for reph with reordering position other than 'before postscript'
+ -- (required for scripts other than dev2)
+ -- leaks
+ if not startnext then
+ current = getnext(start)
+ local c = nil
+ while current do
+ local char = ischar(current,font)
+ if char and getprop(current,a_syllabe) == startattr then -- step 5
+ if not c and mark_above_below_post[char] and reorder_class[char] ~= "after subscript" then
+ c = current
+ end
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ -- here we can loose the old start node: maybe best split cases
+ if c then
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ local prev = getprev(c)
+ setlink(prev,start)
+ setlink(start,c)
+ -- end
+ start = startnext
+ startattr = getprop(start,a_syllabe)
+ end
+ end
+ -- leaks
+ if not startnext then
+ current = start
+ local next = getnext(current)
+ while next do
+ local nextchar = ischar(next,font)
+ if nextchar and getprop(next,a_syllabe) == startattr then --step 6
+ current = next
+ next = getnext(current)
+ else
+ break
+ end
+ end
+ if start ~= current then
+ startnext = getnext(start)
+ head = remove_node(head,start)
+ local next = getnext(current)
+ setlink(start,next)
+ setlink(current,"next",start)
+ start = startnext
+ end
+ end
+ --
+ return head, start, true
+end
+
+-- we can cache some checking (v)
+
+-- If a pre-base reordering consonant is found, reorder it according to the following rules:
+--
+-- 1 Only reorder a glyph produced by substitution during application of the feature.
+-- (Note that a font may shape a Ra consonant with the feature generally but block it in certain contexts.)
+-- 2 Try to find a target position the same way as for pre-base matra. If it is found, reorder pre-base consonant glyph.
+-- 3 If position is not found, reorder immediately before main consonant.
+
+-- UNTESTED: NOT CALLED IN EXAMPLE
+
+function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
+ local current = start
+ local startnext = nil
+ local startprev = nil
+ local startfont = getfont(start)
+ local startattr = getprop(start,a_syllabe)
+ -- can be fast for loop + caching state
+ while current do
+ local char = ischar(current,font)
+ if char and getprop(current,a_syllabe) == startattr then
+ local next = getnext(current)
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local nextchar = ischar(next,font)
+ if nextchar and getprop(next,a_syllabe) == startattr then
+ if nextchar == c_zwnj or nextchar == c_zwj then
+ current = next
+ next = getnext(current)
+ end
+ end
+ end
+ startnext = getnext(start)
+ removenode(start,start)
+ setlink(start,next)
+ setlink(current,start)
+ start = startnext
+ break
+ end
+ current = next
+ else
+ break
+ end
+ end
+ if not startnext then
+ current = getnext(start)
+ startattr = getprop(start,a_syllabe)
+ while current do
+ local char = ischar(current,font)
+ if char and getprop(current,a_syllabe) == startattr then
+ if not consonant[char] and getprop(current,a_state) then -- main
+ startnext = getnext(start)
+ removenode(start,start)
+ local prev = getprev(current)
+ setlink(start,prev)
+ setlink(start,current)
+ start = startnext
+ break
+ end
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ end
+ return head, start, true
+end
+
+-- function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+-- local stop = getnext(start)
+-- local font = getfont(start)
+-- while stop do
+-- local char = ischar(stop)
+-- if char and (char == c_zwnj or char == c_zwj) then
+-- stop = getnext(stop)
+-- else
+-- break
+-- end
+-- end
+-- if stop then
+-- setnext(getprev(stop))
+-- setprev(stop,getprev(start))
+-- end
+-- local prev = getprev(start)
+-- if prev then
+-- setnext(prev,stop)
+-- end
+-- if head == start then
+-- head = stop
+-- end
+-- flush_list(start)
+-- return head, stop, true
+-- end
+
+function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+ local stop = getnext(start)
+ local font = getfont(start)
+ local last = start
+ while stop do
+ local char = ischar(stop,font)
+ if char and (char == c_zwnj or char == c_zwj) then
+ last = stop
+ stop = getnext(stop)
+ else
+ break
+ end
+ end
+ local prev = getprev(start)
+ if stop then
+ setnext(last)
+ setlink(prev,stop)
+ elseif prev then
+ setnext(prev)
+ end
+ if head == start then
+ head = stop
+ end
+ flush_list(start)
+ return head, stop, true
+end
+
+local function dev2_initialize(font,attr)
+
+ local devanagari = fontdata[font].resources.devanagari
+
+ if devanagari then
+ return devanagari.seqsubset or { }, devanagari.reorderreph or { }
+ else
+ return { }, { }
+ end
+
+end
+
+-- this one will be merged into the caller: it saves a call, but we will then make function
+-- of the actions
+
+local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pass over (determine stop in sweep)
+
+ local seqsubset, reorderreph = dev2_initialize(font,attr)
+
+ local reph = false -- was nil ... probably went unnoticed because never assigned
+ local halfpos = nil
+ local basepos = nil
+ local subpos = nil
+ local postpos = nil
+ local locl = { }
+
+ for i=1,#seqsubset do
+
+ -- maybe quit if start == stop
+
+ local subset = seqsubset[i]
+ local kind = subset[1]
+ local lookupcache = subset[2]
+ if kind == "rphf" then
+ for k, v in next, ra do
+ local r = lookupcache[k]
+ if r then
+ for k, v in next, halant do
+ local h = r[k]
+ if h then
+ reph = h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ if current ~= stop then
+ local c = locl[current] or getchar(current)
+ local found = lookupcache[c]
+ if found then
+ local next = getnext(current)
+ local n = locl[next] or getchar(next)
+ if found[n] then --above-base: rphf Consonant + Halant
+ local afternext = next ~= stop and getnext(next)
+ if afternext and zw_char[getchar(afternext)] then -- ZWJ and ZWNJ prevent creation of reph
+ current = next
+ current = getnext(current)
+ elseif current == start then
+ setprop(current,a_state,s_rphf)
+ current = next
+ else
+ current = next
+ end
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ elseif kind == "pref" then
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ if current ~= stop then
+ local c = locl[current] or getchar(current)
+ local found = lookupcache[c]
+ if found then
+ local next = getnext(current)
+ local n = locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current = next
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ elseif kind == "half" then -- half forms: half / Consonant + Halant
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ if current ~= stop then
+ local c = locl[current] or getchar(current)
+ local found = lookupcache[c]
+ if found then
+ local next = getnext(current)
+ local n = locl[next] or getchar(next)
+ if found[n] then
+ if next ~= stop and getchar(getnext(next)) == c_zwnj then -- zwnj prevent creation of half
+ current = next
+ else
+ setprop(current,a_state,s_half)
+ if not halfpos then
+ halfpos = current
+ end
+ end
+ current = getnext(current)
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ elseif kind == "blwf" then -- below-base: blwf / Halant + Consonant
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ if current ~= stop then
+ local c = locl[current] or getchar(current)
+ local found = lookupcache[c]
+ if found then
+ local next = getnext(current)
+ local n = locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current = next
+ subpos = current
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ elseif kind == "pstf" then -- post-base: pstf / Halant + Consonant
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ if current ~= stop then
+ local c = locl[current] or getchar(current)
+ local found = lookupcache[c]
+ if found then
+ local next = getnext(current)
+ local n = locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current = next
+ postpos = current
+ end
+ end
+ end
+ current = getnext(current)
+ end
+ end
+ end
+
+ -- this one changes per word ...
+
+ reorderreph.coverage = { [reph] = true } -- neat
+
+ -- end of weird
+
+ local current, base, firstcons = start, nil, nil
+
+ if getprop(start,a_state) == s_rphf then
+ -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants
+ current = getnext(getnext(start))
+ end
+
+ if current ~= getnext(stop) and getchar(current) == c_nbsp then
+ -- Stand Alone cluster
+ if current == stop then
+ stop = getprev(stop)
+ head = remove_node(head,current)
+ free_node(current)
+ return head, stop, nbspaces
+ else
+ nbspaces = nbspaces + 1
+ base = current
+ current = getnext(current)
+ if current ~= stop then
+ local char = getchar(current)
+ if nukta[char] then
+ current = getnext(current)
+ char = getchar(current)
+ end
+ if char == c_zwj then
+ local next = getnext(current)
+ if current ~= stop and next ~= stop and halant[getchar(next)] then
+ current = next
+ next = getnext(current)
+ local tmp = getnext(next)
+ local changestop = next == stop
+ setnext(next,nil)
+ setprop(current,a_state,s_pref)
+ current = processcharacters(current,font)
+ setprop(current,a_state,s_blwf)
+ current = processcharacters(current,font)
+ setprop(current,a_state,s_pstf)
+ current = processcharacters(current,font)
+ setprop(current,a_state,unsetvalue)
+ if halant[getchar(current)] then
+ setnext(getnext(current),tmp)
+ local nc = copy_node(current)
+ copyinjection(nc,current)
+ setchar(current,dotted_circle)
+ head = insert_node_after(head,current,nc)
+ else
+ setnext(current,tmp) -- assumes that result of pref, blwf, or pstf consists of one node
+ if changestop then
+ stop = current
+ end
+ end
+ end
+ end
+ end
+ end
+ else -- not Stand Alone cluster
+ local last = getnext(stop)
+ while current ~= last do -- find base consonant
+ local next = getnext(current)
+ if consonant[getchar(current)] then
+ if not (current ~= stop and next ~= stop and halant[getchar(next)] and getchar(getnext(next)) == c_zwj) then
+ if not firstcons then
+ firstcons = current
+ end
+ -- check whether consonant has below-base or post-base form or is pre-base reordering Ra
+ local a = getprop(current,a_state)
+ if not (a == s_pref or a == s_blwf or a == s_pstf) then
+ base = current
+ end
+ end
+ end
+ current = next
+ end
+ if not base then
+ base = firstcons
+ end
+ end
+
+ if not base then
+ if getprop(start,a_state) == s_rphf then
+ setprop(start,a_state,unsetvalue)
+ end
+ return head, stop, nbspaces
+ else
+ if getprop(base,a_state) then
+ setprop(base,a_state,unsetvalue)
+ end
+ basepos = base
+ end
+ if not halfpos then
+ halfpos = base
+ end
+ if not subpos then
+ subpos = base
+ end
+ if not postpos then
+ postpos = subpos or base
+ end
+
+ -- Matra characters are classified and reordered by which consonant in a conjunct they have affinity for
+
+ local moved = { }
+ local current = start
+ local last = getnext(stop)
+ while current ~= last do
+ local char, target, cn = locl[current] or getchar(current), nil, getnext(current)
+ -- not so efficient (needed for malayalam)
+ local tpm = twopart_mark[char]
+ if tpm then
+ local extra = copy_node(current)
+ copyinjection(extra,current)
+ char = tpm[1]
+ setchar(current,char)
+ setchar(extra,tpm[2])
+ head = insert_node_after(head,current,extra)
+ end
+ --
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then -- Before first half form in the syllable
+ moved[current] = true
+ -- can be helper to remove one node
+ local prev, next = getboth(current)
+ setlink(prev,next)
+ if current == stop then
+ stop = getprev(current)
+ end
+ if halfpos == start then
+ if head == start then
+ head = current
+ end
+ start = current
+ end
+ local prev = getprev(halfpos)
+ setlink(prev,current)
+ setlink(current,halfpos)
+ halfpos = current
+ elseif above_mark[char] then -- After main consonant
+ target = basepos
+ if subpos == basepos then
+ subpos = current
+ end
+ if postpos == basepos then
+ postpos = current
+ end
+ basepos = current
+ elseif below_mark[char] then -- After subjoined consonants
+ target = subpos
+ if postpos == subpos then
+ postpos = current
+ end
+ subpos = current
+ elseif post_mark[char] then -- After post-form consonant
+ target = postpos
+ postpos = current
+ end
+ if mark_above_below_post[char] then
+ local prev = getprev(current)
+ if prev ~= target then
+ local next = getnext(current)
+ setlink(next,prev)
+ if current == stop then
+ stop = prev
+ end
+ local next = getnext(target)
+ setlink(current,next)
+ setlink(target,current)
+ end
+ end
+ end
+ current = cn
+ end
+
+ -- Reorder marks to canonical order: Adjacent nukta and halant or nukta and vedic sign are always repositioned if necessary, so that the nukta is first.
+
+ local current, c = start, nil
+ while current ~= stop do
+ local char = getchar(current)
+ if halant[char] or stress_tone_mark[char] then
+ if not c then
+ c = current
+ end
+ else
+ c = nil
+ end
+ local next = getnext(current)
+ if c and nukta[getchar(next)] then
+ if head == c then
+ head = next
+ end
+ if stop == next then
+ stop = current
+ end
+ local prev = getprev(c)
+ setlink(next,prev)
+ local nextnext = getnext(next)
+ setnext(current,nextnext)
+ local nextnextnext = getnext(nextnext)
+ if nextnextnext then
+ setprev(nextnextnext,current)
+ end
+ setlink(nextnext,c)
+ end
+ if stop == current then break end
+ current = getnext(current)
+ end
+
+ if getchar(base) == c_nbsp then
+ nbspaces = nbspaces - 1
+ head = remove_node(head, base)
+ free_node(base)
+ end
+
+ return head, stop, nbspaces
+end
+
+-- cleaned up and optimized ... needs checking (local, check order, fixes, extra hash, etc)
+
+local separator = { }
+
+imerge(separator,consonant)
+imerge(separator,independent_vowel)
+imerge(separator,dependent_vowel)
+imerge(separator,vowel_modifier)
+imerge(separator,stress_tone_mark)
+
+for k, v in next, nukta do separator[k] = true end
+for k, v in next, halant do separator[k] = true end
+
+local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowel
+ -- why two variants ... the comment suggests that it's the same ruleset
+ local n = getnext(c)
+ if not n then
+ return c
+ end
+ if variant == 1 then
+ local v = ischar(n,font)
+ if v and nukta[v] then
+ n = getnext(n)
+ if n then
+ v = ischar(n,font)
+ end
+ end
+ if n and v then
+ local nn = getnext(n)
+ if nn then
+ local vv = ischar(nn,font)
+ if vv then
+ local nnn = getnext(nn)
+ if nnn then
+ local vvv = ischar(nnn,font)
+ if vvv then
+ if vv == c_zwj and consonant[vvv] then
+ c = nnn
+ elseif (vv == c_zwnj or vv == c_zwj) and halant[vvv] then
+ local nnnn = getnext(nnn)
+ if nnnn then
+ local vvvv = ischar(nnnn)
+ if vvvv and consonant[vvvv] then
+ c = nnnn
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ elseif variant == 2 then
+ local v = ischar(n,font)
+ if v and nukta[v] then
+ c = n
+ end
+ n = getnext(c)
+ if n then
+ v = ischar(n,font)
+ if v then
+ local nn = getnext(n)
+ if nn then
+ local vv = ischar(nn,font)
+ if vv and zw_char[vv] then
+ n = nn
+ v = vv
+ nn = getnext(nn)
+ vv = nn and ischar(nn,font)
+ end
+ if vv and halant[v] and consonant[vv] then
+ c = nn
+ end
+ end
+ end
+ end
+ end
+ -- c = ms_matra(c)
+ local n = getnext(c)
+ if not n then
+ return c
+ end
+ local v = ischar(n,font)
+ if not v then
+ return c
+ end
+ if dependent_vowel[v] then
+ c = getnext(c)
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c = getnext(c)
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c = getnext(c)
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if vowel_modifier[v] then
+ c = getnext(c)
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c = getnext(c)
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+
+local function analyze_next_chars_two(c,font)
+ local n = getnext(c)
+ if not n then
+ return c
+ end
+ local v = ischar(n,font)
+ if v and nukta[v] then
+ c = n
+ end
+ n = c
+ while true do
+ local nn = getnext(n)
+ if nn then
+ local vv = ischar(nn,font)
+ if vv then
+ if halant[vv] then
+ n = nn
+ local nnn = getnext(nn)
+ if nnn then
+ local vvv = ischar(nnn,font)
+ if vvv and zw_char[vvv] then
+ n = nnn
+ end
+ end
+ elseif vv == c_zwnj or vv == c_zwj then
+ -- n = nn -- not here (?)
+ local nnn = getnext(nn)
+ if nnn then
+ local vvv = ischar(nnn,font)
+ if vvv and halant[vvv] then
+ n = nnn
+ end
+ end
+ else
+ break
+ end
+ local nn = getnext(n)
+ if nn then
+ local vv = ischar(nn,font)
+ if vv and consonant[vv] then
+ n = nn
+ local nnn = getnext(nn)
+ if nnn then
+ local vvv = ischar(nnn,font)
+ if vvv and nukta[vvv] then
+ n = nnn
+ end
+ end
+ c = n
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ --
+ if not c then
+ -- This shouldn't happen I guess.
+ return
+ end
+ local n = getnext(c)
+ if not n then
+ return c
+ end
+ local v = ischar(n,font)
+ if not v then
+ return c
+ end
+ if v == c_anudatta then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ if v == c_zwnj or v == c_zwj then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ else
+ -- c = ms_matra(c)
+ -- same as one
+ if dependent_vowel[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ end
+ -- same as one
+ if vowel_modifier[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c = n
+ n = getnext(c)
+ if not n then
+ return c
+ end
+ v = ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+
+local function inject_syntax_error(head,current,mark)
+ local signal = copy_node(current)
+ copyinjection(signal,current)
+ if mark == pre_mark then -- THIS IS WRONG: pre_mark is a table
+ setchar(signal,dotted_circle)
+ else
+ setchar(current,dotted_circle)
+ end
+ return insert_node_after(head,current,signal)
+end
+
+-- It looks like these two analyzers were written independently but they share
+-- a lot. Common code has been synced.
+
+function methods.deva(head,font,attr)
+ head = tonut(head)
+ local current = head
+ local start = true
+ local done = false
+ local nbspaces = 0
+ while current do
+ local char = ischar(current,font)
+ if char then
+ done = true
+ local syllablestart = current
+ local syllableend = nil
+ local c = current
+ local n = getnext(c)
+ local first = char
+ if n and ra[first] then
+ local second = ischar(n,font)
+ if second and halant[second] then
+ local n = getnext(n)
+ if n then
+ local third = ischar(n,font)
+ if third then
+ c = n
+ first = third
+ end
+ end
+ end
+ end
+ local standalone = first == c_nbsp
+ if standalone then
+ local prev = getprev(current)
+ if prev then
+ local prevchar = ischar(prev,font)
+ if not prevchar then
+ -- different font or language so quite certainly a different word
+ elseif not separator[prevchar] then
+ -- something that separates words
+ else
+ standalone = false
+ end
+ else
+ -- begin of paragraph or box
+ end
+ end
+ if standalone then
+ -- stand alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[<ZWJ|ZWNJ>]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+ local syllableend = analyze_next_chars_one(c,font,2)
+ current = getnext(syllableend)
+ if syllablestart ~= syllableend then
+ head, current, nbspaces = deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current = getnext(current)
+ end
+ else
+ -- we can delay the getsubtype(n) and getfont(n) and test for say halant first
+ -- as an table access is faster than two function calls (subtype and font are
+ -- pseudo fields) but the code becomes messy (unless we make it a function)
+ if consonant[char] then
+ -- syllable containing consonant
+ local prevc = true
+ while prevc do
+ prevc = false
+ local n = getnext(current)
+ if not n then
+ break
+ end
+ local v = ischar(n,font)
+ if not v then
+ break
+ end
+ if nukta[v] then
+ n = getnext(n)
+ if not n then
+ break
+ end
+ v = ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if halant[v] then
+ n = getnext(n)
+ if not n then
+ break
+ end
+ v = ischar(n,font)
+ if not v then
+ break
+ end
+ if v == c_zwnj or v == c_zwj then
+ n = getnext(n)
+ if not n then
+ break
+ end
+ v = ischar(n,font)
+ if not v then
+ break
+ end
+ end
+ if consonant[v] then
+ prevc = true
+ current = n
+ end
+ end
+ end
+ local n = getnext(current)
+ if n then
+ local v = ischar(n,font)
+ if v and nukta[v] then
+ -- nukta (not specified in Microsft Devanagari OpenType specification)
+ current = n
+ n = getnext(current)
+ end
+ end
+ syllableend = current
+ current = n
+ if current then
+ local v = ischar(current,font)
+ if not v then
+ -- skip
+ elseif halant[v] then
+ -- syllable containing consonant without vowels: {C + [Nukta] + H} + C + H
+ local n = getnext(current)
+ if n then
+ local v = ischar(n,font)
+ if v and zw_char[v] then
+ -- code collapsed, probably needs checking with intention
+ syllableend = n
+ current = getnext(n)
+ else
+ syllableend = current
+ current = n
+ end
+ else
+ syllableend = current
+ current = n
+ end
+ else
+ -- syllable containing consonant with vowels: {C + [Nukta] + H} + C + [M] + [VM] + [SM]
+ if dependent_vowel[v] then
+ syllableend = current
+ current = getnext(current)
+ v = ischar(current,font)
+ end
+ if v and vowel_modifier[v] then
+ syllableend = current
+ current = getnext(current)
+ v = ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend = current
+ current = getnext(current)
+ end
+ end
+ end
+ if syllablestart ~= syllableend then
+ head, current, nbspaces = deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current = getnext(current)
+ end
+ elseif independent_vowel[char] then
+ -- syllable without consonants: VO + [VM] + [SM]
+ syllableend = current
+ current = getnext(current)
+ if current then
+ local v = ischar(current,font)
+ if v then
+ if vowel_modifier[v] then
+ syllableend = current
+ current = getnext(current)
+ v = ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend = current
+ current = getnext(current)
+ end
+ end
+ end
+ else
+ local mark = mark_four[char]
+ if mark then
+ head, current = inject_syntax_error(head,current,mark)
+ end
+ current = getnext(current)
+ end
+ end
+ else
+ current = getnext(current)
+ end
+ start = false
+ end
+
+ if nbspaces > 0 then
+ head = replace_all_nbsp(head)
+ end
+
+ head = tonode(head)
+
+ return head, done
+end
+
+-- there is a good change that when we run into one with subtype < 256 that the rest is also done
+-- so maybe we can omit this check (it's pretty hard to get glyphs in the stream out of the blue)
+
+function methods.dev2(head,font,attr)
+ head = tonut(head)
+ local current = head
+ local start = true
+ local done = false
+ local syllabe = 0
+ local nbspaces = 0
+ while current do
+ local syllablestart = nil
+ local syllableend = nil
+ local char = ischar(current,font)
+ if char then
+ done = true
+ syllablestart = current
+ local c = current
+ local n = getnext(current)
+ if n and ra[char] then
+ local nextchar = ischar(n,font)
+ if nextchar and halant[nextchar] then
+ local n = getnext(n)
+ if n then
+ local nextnextchar = ischar(n,font)
+ if nextnextchar then
+ c = n
+ char = nextnextchar
+ end
+ end
+ end
+ end
+ if independent_vowel[char] then
+ -- vowel-based syllable: [Ra+H]+V+[N]+[<[<ZWJ|ZWNJ>]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+ current = analyze_next_chars_one(c,font,1)
+ syllableend = current
+ else
+ local standalone = char == c_nbsp
+ if standalone then
+ nbspaces = nbspaces + 1
+ local p = getprev(current)
+ if not p then
+ -- begin of paragraph or box
+ elseif ischar(p,font) then
+ -- different font or language so quite certainly a different word
+ elseif not separator[getchar(p)] then
+ -- something that separates words
+ else
+ standalone = false
+ end
+ end
+ if standalone then
+ -- Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[<ZWJ|ZWNJ>]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+ current = analyze_next_chars_one(c,font,2)
+ syllableend = current
+ elseif consonant[getchar(current)] then
+ -- WHY current INSTEAD OF c ?
+
+ -- Consonant syllable: {C+[N]+<H+[<ZWNJ|ZWJ>]|<ZWNJ|ZWJ>+H>} + C+[N]+[A] + [< H+[<ZWNJ|ZWJ>] | {M}+[N]+[H]>]+[SM]+[(VD)]
+ current = analyze_next_chars_two(current,font) -- not c !
+ syllableend = current
+ end
+ end
+ end
+ if syllableend then
+ syllabe = syllabe + 1
+ local c = syllablestart
+ local n = getnext(syllableend)
+ while c ~= n do
+ setprop(c,a_syllabe,syllabe)
+ c = getnext(c)
+ end
+ end
+ if syllableend and syllablestart ~= syllableend then
+ head, current, nbspaces = dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ end
+ if not syllableend then
+ local char = ischar(current,font)
+ if char and not getprop(current,a_state) then
+ local mark = mark_four[char]
+ if mark then
+ head, current = inject_syntax_error(head,current,mark)
+ end
+ end
+ end
+ start = false
+ current = getnext(current)
+ end
+
+ if nbspaces > 0 then
+ head = replace_all_nbsp(head)
+ end
+
+ head = tonode(head)
+
+ return head, done
+end
+
+methods.mlym = methods.deva
+methods.mlm2 = methods.dev2
diff --git a/Master/texmf-dist/tex/context/base/font-ota.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ota.lua
index 1f1534870a8..6a3804a7425 100644
--- a/Master/texmf-dist/tex/context/base/font-ota.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ota.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['font-otx'] = {
+if not modules then modules = { } end modules ['font-ota'] = {
version = 1.001,
comment = "companion to font-otf.lua (analysing)",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -26,7 +26,6 @@ local methods = allocate()
analyzers.initializers = initializers
analyzers.methods = methods
----------.useunicodemarks = false
local a_state = attributes.private('state')
@@ -36,19 +35,20 @@ local tonut = nuts.tonut
local getfield = nuts.getfield
local getnext = nuts.getnext
local getprev = nuts.getprev
-local getid = nuts.getid
+local getprev = nuts.getprev
local getprop = nuts.getprop
local setprop = nuts.setprop
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
+local ischar = nuts.is_char
local traverse_id = nuts.traverse_id
local traverse_node_list = nuts.traverse
local end_of_math = nuts.end_of_math
local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
+----- glyph_code = nodecodes.glyph
local disc_code = nodecodes.disc
local math_code = nodecodes.math
@@ -76,7 +76,10 @@ local s_rest = 6
local states = {
init = s_init,
medi = s_medi,
+ med2 = s_medi,
fina = s_fina,
+ fin2 = s_fina,
+ fin3 = s_fina,
isol = s_isol,
mark = s_mark,
rest = s_rest,
@@ -90,7 +93,10 @@ local states = {
local features = {
init = s_init,
medi = s_medi,
+ med2 = s_medi,
fina = s_fina,
+ fin2 = s_fina,
+ fin3 = s_fina,
isol = s_isol,
-- mark = s_mark,
-- rest = s_rest,
@@ -108,17 +114,16 @@ analyzers.useunicodemarks = false
-- todo: analyzers per script/lang, cross font, so we need an font id hash -> script
-- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace
-function analyzers.setstate(head,font) -- we can skip math
+function analyzers.setstate(head,font)
local useunicodemarks = analyzers.useunicodemarks
local tfmdata = fontdata[font]
local descriptions = tfmdata.descriptions
local first, last, current, n, done = nil, nil, head, 0, false -- maybe make n boolean
current = tonut(current)
while current do
- local id = getid(current)
- if id == glyph_code and getfont(current) == font then
+ local char, id = ischar(current,font)
+ if char and not getprop(current,a_state) then
done = true
- local char = getchar(current)
local d = descriptions[char]
if d then
if d.class == "mark" then
@@ -142,6 +147,17 @@ function analyzers.setstate(head,font) -- we can skip math
end
first, last, n = nil, nil, 0
end
+ elseif char == false then
+ -- other font
+ if first and first == last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first, last, n = nil, nil, 0
+ if id == math_code then
+ current = end_of_math(current)
+ end
elseif id == disc_code then
-- always in the middle .. it doesn't make much sense to assign a property
-- here ... we might at some point decide to flag the components when present
@@ -241,38 +257,43 @@ local mappers = {
u = s_isol, -- nonjoiner
}
-local classifiers = { } -- we can also use this trick for devanagari
-
-local first_arabic, last_arabic = characters.blockrange("arabic")
-local first_syriac, last_syriac = characters.blockrange("syriac")
-local first_mandiac, last_mandiac = characters.blockrange("mandiac")
-local first_nko, last_nko = characters.blockrange("nko")
-
-table.setmetatableindex(classifiers,function(t,k)
- local c = chardata[k]
- local v = false
- if c then
- local arabic = c.arabic
- if arabic then
- v = mappers[arabic]
- if not v then
- log.report("analyze","error in mapping arabic %C",k)
- -- error
- v = false
- end
- elseif k >= first_arabic and k <= last_arabic or k >= first_syriac and k <= last_syriac or
- k >= first_mandiac and k <= last_mandiac or k >= first_nko and k <= last_nko then
- if categories[k] == "mn" then
- v = s_mark
- else
- v = s_rest
+-- we can also use this trick for devanagari
+
+local classifiers = characters.classifiers
+
+if not classifiers then
+
+ local first_arabic, last_arabic = characters.blockrange("arabic")
+ local first_syriac, last_syriac = characters.blockrange("syriac")
+ local first_mandiac, last_mandiac = characters.blockrange("mandiac")
+ local first_nko, last_nko = characters.blockrange("nko")
+
+ classifiers = table.setmetatableindex(function(t,k)
+ local c = chardata[k]
+ local v = false
+ if c then
+ local arabic = c.arabic
+ if arabic then
+ v = mappers[arabic]
+ if not v then
+ log.report("analyze","error in mapping arabic %C",k)
+ -- error
+ v = false
+ end
+ elseif k >= first_arabic and k <= last_arabic or k >= first_syriac and k <= last_syriac or
+ k >= first_mandiac and k <= last_mandiac or k >= first_nko and k <= last_nko then
+ if categories[k] == "mn" then
+ v = s_mark
+ else
+ v = s_rest
+ end
end
- else
end
- end
- t[k] = v
- return v
-end)
+ t[k] = v
+ return v
+ end)
+
+end
function methods.arab(head,font,attr)
local first, last = nil, nil
@@ -280,10 +301,9 @@ function methods.arab(head,font,attr)
local current, done = head, false
current = tonut(current)
while current do
- local id = getid(current)
- if id == glyph_code and getfont(current) == font and getsubtype(current)<256 and not getprop(current,a_state) then
+ local char, id = ischar(current,font)
+ if char and not getprop(current,a_state) then
done = true
- local char = getchar(current)
local classifier = classifiers[char]
if not classifier then
if last then
diff --git a/Master/texmf-dist/tex/context/base/font-otb.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otb.lua
index 4e955a19774..c9f5d4aca9b 100644
--- a/Master/texmf-dist/tex/context/base/font-otb.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otb.lua
@@ -321,14 +321,14 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
for unicode, character in next, characters do
local description = descriptions[unicode]
- local lookups = description.slookups
+ local lookups = description.slookups
if lookups then
for l=1,#lookuplist do
local lookupname = lookuplist[l]
local lookupdata = lookups[lookupname]
if lookupdata then
local lookuptype = lookuptypes[lookupname]
- local action = actions[lookuptype]
+ local action = actions[lookuptype]
if action then
action(lookupdata,lookuptags,lookupname,description,unicode)
end
@@ -342,7 +342,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
local lookuplist = lookups[lookupname]
if lookuplist then
local lookuptype = lookuptypes[lookupname]
- local action = actions[lookuptype]
+ local action = actions[lookuptype]
if action then
for i=1,#lookuplist do
action(lookuplist[i],lookuptags,lookupname,description,unicode)
@@ -614,8 +614,8 @@ local function featuresinitializer(tfmdata,value)
local collectlookups = otf.collectlookups
local rawdata = tfmdata.shared.rawdata
local properties = tfmdata.properties
- local script = properties.script
- local language = properties.language
+ local script = properties.script -- or "dflt" -- can be nil
+ local language = properties.language -- or "dflt" -- can be nil
local basesubstitutions = rawdata.resources.features.gsub
local basepositionings = rawdata.resources.features.gpos
--
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-otc.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otc.lua
new file mode 100644
index 00000000000..d4c98d6fcc5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otc.lua
@@ -0,0 +1,747 @@
+if not modules then modules = { } end modules ['font-otc'] = {
+ version = 1.001,
+ comment = "companion to font-otf.lua (context)",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, insert, sortedkeys, tohash = string.format, table.insert, table.sortedkeys, table.tohash
+local type, next = type, next
+local lpegmatch = lpeg.match
+local utfbyte = utf.byte
+
+-- we assume that the other otf stuff is loaded already
+
+local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+local report_otf = logs.reporter("fonts","otf loading")
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+local registerotffeature = otf.features.register
+local setmetatableindex = table.setmetatableindex
+
+local normalized = {
+ substitution = "substitution",
+ single = "substitution",
+ ligature = "ligature",
+ alternate = "alternate",
+ multiple = "multiple",
+ kern = "kern",
+ pair = "pair",
+ chainsubstitution = "chainsubstitution",
+ chainposition = "chainposition",
+}
+
+local types = {
+ substitution = "gsub_single",
+ ligature = "gsub_ligature",
+ alternate = "gsub_alternate",
+ multiple = "gsub_multiple",
+ kern = "gpos_pair",
+ pair = "gpos_pair",
+ chainsubstitution = "gsub_contextchain",
+ chainposition = "gpos_contextchain",
+}
+
+setmetatableindex(types, function(t,k) t[k] = k return k end) -- "key"
+
+local everywhere = { ["*"] = { ["*"] = true } } -- or: { ["*"] = { "*" } }
+local noflags = { false, false, false, false }
+
+-- beware: shared, maybe we should copy the sequence
+
+local function addfeature(data,feature,specifications)
+ local descriptions = data.descriptions
+ local resources = data.resources
+ local features = resources.features
+ local sequences = resources.sequences
+ if not features or not sequences then
+ return
+ end
+ -- feature has to be unique but the name entry wins eventually
+
+ -- todo alse gpos
+
+ local fontfeatures = resources.features or everywhere
+ local unicodes = resources.unicodes
+ local splitter = lpeg.splitter(" ",unicodes)
+ local done = 0
+ local skip = 0
+ if not specifications[1] then
+ -- so we accept a one entry specification
+ specifications = { specifications }
+ end
+
+ local function tounicode(code)
+ if not code then
+ return
+ elseif type(code) == "number" then
+ return code
+ else
+ return unicodes[code] or utfbyte(code)
+ end
+ end
+
+ local coverup = otf.coverup
+ local coveractions = coverup.actions
+ local stepkey = coverup.stepkey
+ local register = coverup.register
+
+ local function prepare_substitution(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, replacement in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if description then
+ if type(replacement) == "table" then
+ replacement = replacement[1]
+ end
+ replacement = tounicode(replacement)
+ if replacement and descriptions[replacement] then
+ cover(coverage,unicode,replacement)
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ else
+ skip = skip + 1
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_alternate(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, replacement in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if not description then
+ skip = skip + 1
+ elseif type(replacement) == "table" then
+ local r = { }
+ for i=1,#replacement do
+ local u = tounicode(replacement[i])
+ r[i] = descriptions[u] and u or unicode
+ end
+ cover(coverage,unicode,r)
+ done = done + 1
+ else
+ local u = tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_multiple(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, replacement in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if not description then
+ skip = skip + 1
+ elseif type(replacement) == "table" then
+ local r, n = { }, 0
+ for i=1,#replacement do
+ local u = tounicode(replacement[i])
+ if descriptions[u] then
+ n = n + 1
+ r[n] = u
+ end
+ end
+ if n > 0 then
+ cover(coverage,unicode,r)
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ else
+ local u = tounicode(replacement)
+ if u then
+ cover(coverage,unicode,{ u })
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_ligature(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, ligature in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if description then
+ if type(ligature) == "string" then
+ ligature = { lpegmatch(splitter,ligature) }
+ end
+ local present = true
+ for i=1,#ligature do
+ local l = ligature[i]
+ local u = tounicode(l)
+ if descriptions[u] then
+ ligature[i] = u
+ else
+ present = false
+ break
+ end
+ end
+ if present then
+ cover(coverage,unicode,ligature)
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ else
+ skip = skip + 1
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_kern(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, replacement in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if description and type(replacement) == "table" then
+ local r = { }
+ for k, v in next, replacement do
+ local u = tounicode(k)
+ if u then
+ r[u] = v
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ else
+ skip = skip + 1
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_pair(list,featuretype)
+ local coverage = { }
+ local cover = coveractions[featuretype]
+ for code, replacement in next, list do
+ local unicode = tounicode(code)
+ local description = descriptions[unicode]
+ if description and type(replacement) == "table" then
+ local r = { }
+ for k, v in next, replacement do
+ local u = tounicode(k)
+ if u then
+ r[u] = v
+ end
+ end
+ if next(r) then
+ cover(coverage,unicode,r)
+ done = done + 1
+ else
+ skip = skip + 1
+ end
+ else
+ skip = skip + 1
+ end
+ end
+ return coverage
+ end
+
+ local function prepare_chain(list,featuretype,sublookups)
+ -- todo: coveractions
+ local rules = list.rules
+ local coverage = { }
+ if rules then
+ local rulehash = { }
+ local rulesize = 0
+ local sequence = { }
+ local nofsequences = 0
+ local lookuptype = types[featuretype]
+ for nofrules=1,#rules do
+ local rule = rules[nofrules]
+ local current = rule.current
+ local before = rule.before
+ local after = rule.after
+ local replacements = rule.replacements or false
+ local sequence = { }
+ local nofsequences = 0
+ if before then
+ for n=1,#before do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = before[n]
+ end
+ end
+ local start = nofsequences + 1
+ for n=1,#current do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = current[n]
+ end
+ local stop = nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = after[n]
+ end
+ end
+ local lookups = rule.lookups or false
+ local subtype = nil
+ if lookups and sublookups then
+ for k, v in next, lookups do
+ local lookup = sublookups[v]
+ if lookup then
+ lookups[k] = lookup
+ if not subtype then
+ subtype = lookup.type
+ end
+ else
+ -- already expanded
+ end
+ end
+ end
+ if nofsequences > 0 then -- we merge coverage into one
+ -- we copy as we can have different fonts
+ local hashed = { }
+ for i=1,nofsequences do
+ local t = { }
+ local s = sequence[i]
+ for i=1,#s do
+ local u = tounicode(s[i])
+ if u then
+ t[u] = true
+ end
+ end
+ hashed[i] = t
+ end
+ sequence = hashed
+ -- now we create the rule
+ rulesize = rulesize + 1
+ rulehash[rulesize] = {
+ nofrules, -- 1
+ lookuptype, -- 2
+ sequence, -- 3
+ start, -- 4
+ stop, -- 5
+ lookups, -- 6 (6/7 also signal of what to do)
+ replacements, -- 7
+ subtype, -- 8
+ }
+ for unic in next, sequence[start] do
+ local cu = coverage[unic]
+ if not cu then
+ coverage[unic] = rulehash -- can now be done cleaner i think
+ end
+ end
+ end
+ end
+ end
+ return coverage
+ end
+
+ for s=1,#specifications do
+ local specification = specifications[s]
+ local valid = specification.valid
+ local feature = specification.name or feature
+ if not valid or valid(data,specification,feature) then
+ local initialize = specification.initialize
+ if initialize then
+ -- when false is returned we initialize only once
+ specification.initialize = initialize(specification,data) and initialize or nil
+ end
+ local askedfeatures = specification.features or everywhere
+ local askedsteps = specification.steps or specification.subtables or { specification.data } or { }
+ local featuretype = normalized[specification.type or "substitution"] or "substitution"
+ local featureflags = specification.flags or noflags
+ local featureorder = specification.order or { feature }
+ local featurechain = (featuretype == "chainsubstitution" or featuretype == "chainposition") and 1 or 0
+ local nofsteps = 0
+ local steps = { }
+ local sublookups = specification.lookups
+ local category = nil
+ if sublookups then
+ local s = { }
+ for i=1,#sublookups do
+ local specification = sublookups[i]
+ local askedsteps = specification.steps or specification.subtables or { specification.data } or { }
+ local featuretype = normalized[specification.type or "substitution"] or "substitution"
+ local featureflags = specification.flags or noflags
+ local nofsteps = 0
+ local steps = { }
+ for i=1,#askedsteps do
+ local list = askedsteps[i]
+ local coverage = nil
+ local format = nil
+ if featuretype == "substitution" then
+ coverage = prepare_substitution(list,featuretype)
+ elseif featuretype == "ligature" then
+ coverage = prepare_ligature(list,featuretype)
+ elseif featuretype == "alternate" then
+ coverage = prepare_alternate(list,featuretype)
+ elseif featuretype == "multiple" then
+ coverage = prepare_multiple(list,featuretype)
+ elseif featuretype == "kern" then
+ format = "kern"
+ coverage = prepare_kern(list,featuretype)
+ elseif featuretype == "pair" then
+ format = "pair"
+ coverage = prepare_pair(list,featuretype)
+ end
+ if coverage and next(coverage) then
+ nofsteps = nofsteps + 1
+ steps[nofsteps] = register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ s[i] = {
+ [stepkey] = steps,
+ nofsteps = nofsteps,
+ type = types[featuretype],
+ }
+ end
+ sublookups = s
+ end
+ for i=1,#askedsteps do
+ local list = askedsteps[i]
+ local coverage = nil
+ local format = nil
+ if featuretype == "substitution" then
+ category = "gsub"
+ coverage = prepare_substitution(list,featuretype)
+ elseif featuretype == "ligature" then
+ category = "gsub"
+ coverage = prepare_ligature(list,featuretype)
+ elseif featuretype == "alternate" then
+ category = "gsub"
+ coverage = prepare_alternate(list,featuretype)
+ elseif featuretype == "multiple" then
+ category = "gsub"
+ coverage = prepare_multiple(list,featuretype)
+ elseif featuretype == "kern" then
+ category = "gpos"
+ format = kern
+ coverage = prepare_kern(list,featuretype)
+ elseif featuretype == "pair" then
+ category = "gpos"
+ format = "pair"
+ coverage = prepare_pair(list,featuretype)
+ elseif featuretype == "chainsubstitution" then
+ category = "gsub"
+ coverage = prepare_chain(list,featuretype,sublookups)
+ elseif featuretype == "chainposition" then
+ category = "gpos"
+ coverage = prepare_chain(list,featuretype,sublookups)
+ else
+ report_otf("not registering feature %a, unknown category",feature)
+ return
+ end
+ if coverage and next(coverage) then
+ nofsteps = nofsteps + 1
+ steps[nofsteps] = register(coverage,featuretype,format,feature,nofsteps,descriptions,resources)
+ end
+ end
+ if nofsteps > 0 then
+ -- script = { lang1, lang2, lang3 } or script = { lang1 = true, ... }
+ for k, v in next, askedfeatures do
+ if v[1] then
+ askedfeatures[k] = tohash(v)
+ end
+ end
+ if featureflags[1] then featureflags[1] = "mark" end
+ if featureflags[2] then featureflags[2] = "ligature" end
+ if featureflags[3] then featureflags[3] = "base" end
+ local sequence = {
+ chain = featurechain,
+ features = { [feature] = askedfeatures },
+ flags = featureflags,
+ name = feature, -- redundant
+ order = featureorder,
+ [stepkey] = steps,
+ nofsteps = nofsteps,
+ type = types[featuretype],
+ }
+ -- todo : before|after|index
+ if specification.prepend then
+ insert(sequences,1,sequence)
+ else
+ insert(sequences,sequence)
+ end
+ -- register in metadata (merge as there can be a few)
+ local features = fontfeatures[category]
+ if not features then
+ features = { }
+ fontfeatures[category] = features
+ end
+ local k = features[feature]
+ if not k then
+ k = { }
+ features[feature] = k
+ end
+ --
+ for script, languages in next, askedfeatures do
+ local kk = k[script]
+ if not kk then
+ kk = { }
+ k[script] = kk
+ end
+ for language, value in next, languages do
+ kk[language] = value
+ end
+ end
+ end
+ end
+ end
+ if trace_loading then
+ report_otf("registering feature %a, affected glyphs %a, skipped glyphs %a",feature,done,skip)
+ end
+end
+
+otf.enhancers.addfeature = addfeature
+
+local extrafeatures = { }
+
+function otf.addfeature(name,specification)
+ if type(name) == "table" then
+ specification = name
+ name = specification.name
+ end
+ if type(name) == "string" then
+ extrafeatures[name] = specification
+ end
+end
+
+local function enhance(data,filename,raw)
+ for feature, specification in next, extrafeatures do
+ addfeature(data,feature,specification)
+ end
+end
+
+otf.enhancers.register("check extra features",enhance)
+
+-- tlig --
+
+local tlig = { -- we need numbers for some fonts so ...
+ -- endash = "hyphen hyphen",
+ -- emdash = "hyphen hyphen hyphen",
+ [0x2013] = { 0x002D, 0x002D },
+ [0x2014] = { 0x002D, 0x002D, 0x002D },
+ -- quotedblleft = "quoteleft quoteleft",
+ -- quotedblright = "quoteright quoteright",
+ -- quotedblleft = "grave grave",
+ -- quotedblright = "quotesingle quotesingle",
+ -- quotedblbase = "comma comma",
+}
+
+local tlig_specification = {
+ type = "ligature",
+ features = everywhere,
+ data = tlig,
+ order = { "tlig" },
+ flags = noflags,
+ prepend = true,
+}
+
+otf.addfeature("tlig",tlig_specification)
+
+registerotffeature {
+ name = 'tlig',
+ description = 'tex ligatures',
+}
+
+-- trep
+
+local trep = {
+ -- [0x0022] = 0x201D,
+ [0x0027] = 0x2019,
+ -- [0x0060] = 0x2018,
+}
+
+local trep_specification = {
+ type = "substitution",
+ features = everywhere,
+ data = trep,
+ order = { "trep" },
+ flags = noflags,
+ prepend = true,
+}
+
+otf.addfeature("trep",trep_specification)
+
+registerotffeature {
+ name = 'trep',
+ description = 'tex replacements',
+}
+
+-- tcom
+
+if characters.combined then
+
+ local tcom = { }
+
+ local function initialize()
+ characters.initialize()
+ for first, seconds in next, characters.combined do
+ for second, combination in next, seconds do
+ tcom[combination] = { first, second }
+ end
+ end
+ -- return false
+ end
+
+ local tcom_specification = {
+ type = "ligature",
+ features = everywhere,
+ data = tcom,
+ order = { "tcom" },
+ flags = noflags,
+ initialize = initialize,
+ }
+
+ otf.addfeature("tcom",tcom_specification)
+
+ registerotffeature {
+ name = 'tcom',
+ description = 'tex combinations',
+ }
+
+end
+
+-- anum
+
+local anum_arabic = {
+ [0x0030] = 0x0660,
+ [0x0031] = 0x0661,
+ [0x0032] = 0x0662,
+ [0x0033] = 0x0663,
+ [0x0034] = 0x0664,
+ [0x0035] = 0x0665,
+ [0x0036] = 0x0666,
+ [0x0037] = 0x0667,
+ [0x0038] = 0x0668,
+ [0x0039] = 0x0669,
+}
+
+local anum_persian = {
+ [0x0030] = 0x06F0,
+ [0x0031] = 0x06F1,
+ [0x0032] = 0x06F2,
+ [0x0033] = 0x06F3,
+ [0x0034] = 0x06F4,
+ [0x0035] = 0x06F5,
+ [0x0036] = 0x06F6,
+ [0x0037] = 0x06F7,
+ [0x0038] = 0x06F8,
+ [0x0039] = 0x06F9,
+}
+
+local function valid(data)
+ local features = data.resources.features
+ if features then
+ for k, v in next, features do
+ for k, v in next, v do
+ if v.arab then
+ return true
+ end
+ end
+ end
+ end
+end
+
+local anum_specification = {
+ {
+ type = "substitution",
+ features = { arab = { urd = true, dflt = true } },
+ order = { "anum" },
+ data = anum_arabic,
+ flags = noflags, -- { },
+ valid = valid,
+ },
+ {
+ type = "substitution",
+ features = { arab = { urd = true } },
+ order = { "anum" },
+ data = anum_persian,
+ flags = noflags, -- { },
+ valid = valid,
+ },
+}
+
+otf.addfeature("anum",anum_specification) -- todo: only when there is already an arab script feature
+
+registerotffeature {
+ name = 'anum',
+ description = 'arabic digits',
+}
+
+-- maybe:
+
+-- fonts.handlers.otf.addfeature("hangulfix",{
+-- type = "substitution",
+-- features = { ["hang"] = { ["*"] = true } },
+-- data = {
+-- [0x1160] = 0x119E,
+-- },
+-- order = { "hangulfix" },
+-- flags = { },
+-- prepend = true,
+-- })
+
+-- fonts.handlers.otf.features.register {
+-- name = 'hangulfix',
+-- description = 'fixes for hangul',
+-- }
+
+-- fonts.handlers.otf.addfeature {
+-- name = "stest",
+-- type = "substitution",
+-- data = {
+-- a = "X",
+-- b = "P",
+-- }
+-- }
+-- fonts.handlers.otf.addfeature {
+-- name = "atest",
+-- type = "alternate",
+-- data = {
+-- a = { "X", "Y" },
+-- b = { "P", "Q" },
+-- }
+-- }
+-- fonts.handlers.otf.addfeature {
+-- name = "mtest",
+-- type = "multiple",
+-- data = {
+-- a = { "X", "Y" },
+-- b = { "P", "Q" },
+-- }
+-- }
+-- fonts.handlers.otf.addfeature {
+-- name = "ltest",
+-- type = "ligature",
+-- data = {
+-- X = { "a", "b" },
+-- Y = { "d", "a" },
+-- }
+-- }
+-- fonts.handlers.otf.addfeature {
+-- name = "ktest",
+-- type = "kern",
+-- data = {
+-- a = { b = -500 },
+-- }
+-- }
diff --git a/Master/texmf-dist/tex/context/base/font-otd.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otd.lua
index 2dd23b74148..2257caa8ca5 100644
--- a/Master/texmf-dist/tex/context/base/font-otd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otd.lua
@@ -63,11 +63,13 @@ function otf.setdynamics(font,attribute)
script = definers.checkedscript(fontidentifiers[font],fontresources[font],features)
end
local ds = dynamics[script] -- can be metatable magic (less testing)
+-- or dynamics.dflt
if not ds then
ds = { }
dynamics[script] = ds
end
local dsl = ds[language]
+-- or ds.dflt
if not dsl then
dsl = { }
ds[language] = dsl
@@ -121,19 +123,24 @@ end
-- we reimplement the dataset resolver
-local autofeatures = fonts.analyzers.features -- was: constants
+local autofeatures = fonts.analyzers.features
+local featuretypes = otf.tables.featuretypes
+local defaultscript = otf.features.checkeddefaultscript
+local defaultlanguage = otf.features.checkeddefaultlanguage
-local resolved = { } -- we only resolve a font,script,language,attribute pair once
-local wildcard = "*"
-local default = "dflt"
+local resolved = { } -- we only resolve a font,script,language,attribute pair once
+local wildcard = "*"
-- what about analyze in local and not in font
-local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr,dynamic,ra)
+-- needs checking: some added features can pass twice
+
+local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr,dynamic,ra,autoscript,autolanguage)
local features = sequence.features
if features then
local order = sequence.order
if order then
+ local featuretype = featuretypes[sequence.type or "unknown"]
for i=1,#order do --
local kind = order[i] --
local e_e
@@ -146,49 +153,33 @@ local function initialize(sequence,script,language,s_enabled,a_enabled,font,attr
if e_e then
local scripts = features[kind] --
local languages = scripts[script] or scripts[wildcard]
+ if not languages and autoscript then
+ langages = defaultscript(featuretype,autoscript,scripts)
+ end
if languages then
- -- local valid, what = false
- local valid = false
- -- not languages[language] or languages[default] or languages[wildcard] because we want tracing
+ -- we need detailed control over default becase we want to trace
-- only first attribute match check, so we assume simple fina's
- -- default can become a font feature itself
+ local valid = false
if languages[language] then
- valid = e_e -- was true
- -- what = language
- -- elseif languages[default] then
- -- valid = true
- -- what = default
+ valid = e_e
elseif languages[wildcard] then
- valid = e_e -- was true
- -- what = wildcard
+ valid = e_e
+ elseif autolanguage and defaultlanguage(featuretype,autolanguage,languages) then
+ valid = e_e
end
if valid then
local attribute = autofeatures[kind] or false
- -- if a_e and dynamic < 0 then
- -- valid = false
- -- end
- -- if trace_applied then
- -- local typ, action = match(sequence.type,"(.*)_(.*)") -- brrr
- -- report_process(
- -- "%s font: %03i, dynamic: %03i, kind: %s, script: %-4s, language: %-4s (%-4s), type: %s, action: %s, name: %s",
- -- (valid and "+") or "-",font,attr or 0,kind,script,language,what,typ,action,sequence.name)
- -- end
if trace_applied then
report_process(
"font %s, dynamic %a (%a), feature %a, script %a, language %a, lookup %a, value %a",
font,attr or 0,dynamic,kind,script,language,sequence.name,valid)
end
- ra[#ra+1] = { valid, attribute, sequence.chain or 0, kind, sequence }
+ ra[#ra+1] = { valid, attribute, sequence, kind }
end
end
end
end
- -- { valid, attribute, chain, "generic", sequence } -- false anyway, could be flag instead of table
- else
- -- can't happen
end
- else
- -- { false, false, chain, false, sequence } -- indirect lookup, part of chain (todo: make this a separate table)
end
end
@@ -249,23 +240,13 @@ function otf.dataset(tfmdata,font,attr) -- attr only when explicit (as in specia
}
rl[attr] = ra
local sequences = tfmdata.resources.sequences
- -- setmetatableindex(ra, function(t,k)
- -- if type(k) == "number" then
- -- local v = initialize(sequences[k],script,language,s_enabled,a_enabled,font,attr,dynamic)
- -- t[k] = v or false
- -- return v
- -- end
- -- end)
--- for s=1,#sequences do
--- local v = initialize(sequences[s],script,language,s_enabled,a_enabled,font,attr,dynamic)
--- if v then
--- ra[#ra+1] = v
--- end
--- end
- for s=1,#sequences do
- initialize(sequences[s],script,language,s_enabled,a_enabled,font,attr,dynamic,ra)
+ if sequences then
+ local autoscript = (s_enabled and s_enabled.autoscript ) or (a_enabled and a_enabled.autoscript )
+ local autolanguage = (s_enabled and s_enabled.autolanguage) or (a_enabled and a_enabled.autolanguage)
+ for s=1,#sequences do
+ initialize(sequences[s],script,language,s_enabled,a_enabled,font,attr,dynamic,ra,autoscript,autolanguage)
+ end
end
--- table.save((jit and "tmc-" or "tma-")..font..".log",ra) -- bug in jit
end
return ra
diff --git a/Master/texmf-dist/tex/context/base/font-otf.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otf.lua
index 308ec4568e6..cbdc79678bb 100644
--- a/Master/texmf-dist/tex/context/base/font-otf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otf.lua
@@ -12,17 +12,21 @@ if not modules then modules = { } end modules ['font-otf'] = {
-- to_table -> totable
-- ascent descent
+-- to be checked: combinations like:
+--
+-- current="ABCD" with [A]=nothing, [BC]=ligature, [D]=single (applied to result of BC so funny index)
+--
+-- unlikely but possible
+
-- more checking against low level calls of functions
local utfbyte = utf.byte
-local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
+local gmatch, gsub, find, match, lower, strip = string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
local abs = math.abs
-local insert = table.insert
-local lpegmatch = lpeg.match
-local reversed, concat, remove, sortedkeys = table.reversed, table.concat, table.remove, table.sortedkeys
+local reversed, concat, insert, remove, sortedkeys = table.reversed, table.concat, table.insert, table.remove, table.sortedkeys
local ioflush = io.flush
-local fastcopy, tohash, derivetable = table.fastcopy, table.tohash, table.derive
+local fastcopy, tohash, derivetable, copy = table.fastcopy, table.tohash, table.derive, table.copy
local formatters = string.formatters
local P, R, S, C, Ct, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Ct, lpeg.match
@@ -36,6 +40,7 @@ local elapsedtime = statistics.elapsedtime
local findbinfile = resolvers.findbinfile
local trace_private = false registertracker("otf.private", function(v) trace_private = v end)
+local trace_subfonts = false registertracker("otf.subfonts", function(v) trace_subfonts = v end)
local trace_loading = false registertracker("otf.loading", function(v) trace_loading = v end)
local trace_features = false registertracker("otf.features", function(v) trace_features = v end)
local trace_dynamics = false registertracker("otf.dynamics", function(v) trace_dynamics = v end)
@@ -53,7 +58,7 @@ local otf = fonts.handlers.otf
otf.glists = { "gsub", "gpos" }
-otf.version = 2.803 -- beware: also sync font-mis.lua
+otf.version = 2.824 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otf", otf.version, true)
local hashes = fonts.hashes
@@ -227,6 +232,7 @@ local valid_fields = table.tohash {
-- "lookups",
"macstyle",
-- "modificationtime",
+ "notdef_loc",
"onlybitmaps",
"origname",
"os2_version",
@@ -254,6 +260,7 @@ local valid_fields = table.tohash {
"weight",
"weight_width_slope_only",
-- "xuid",
+ -- "truetype", -- maybe as check
}
local ordered_enhancers = {
@@ -282,13 +289,16 @@ local ordered_enhancers = {
"check glyphs",
"check metadata",
- "check extra features", -- after metadata
"prepare tounicode",
"check encoding", -- moved
"add duplicates",
+ "expand lookups", -- a temp hack awaiting the lua loader
+
+ "check extra features", -- after metadata and duplicates
+
"cleanup tables",
"compact lookups",
@@ -385,6 +395,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
if featurefile then
name = name .. "@" .. file.removesuffix(file.basename(featurefile))
end
+ -- or: sub = tonumber(sub)
if sub == "" then
sub = false
end
@@ -441,6 +452,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
end
end
if reload then
+ starttiming("fontloader")
report_otf("loading %a, hash %a",filename,hash)
local fontdata, messages
if sub then
@@ -475,6 +487,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
data = {
size = size,
time = time,
+ subfont = sub,
format = otf_format(filename),
featuredata = featurefiles,
resources = {
@@ -511,7 +524,6 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
tounicodetable = Ct(splitter),
},
}
- starttiming(data)
report_otf("file size: %s", size)
enhancers.apply(data,filename,fontdata)
local packtime = { }
@@ -528,10 +540,10 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
if cleanup > 1 then
collectgarbage("collect")
end
- stoptiming(data)
+ stoptiming("fontloader")
if elapsedtime then -- not in generic
- report_otf("preprocessing and caching time %s, packtime %s",
- elapsedtime(data),packdata and elapsedtime(packtime) or 0)
+ report_otf("loading, optimizing, packing and caching time %s, pack time %s",
+ elapsedtime("fontloader"),packdata and elapsedtime(packtime) or 0)
end
close_font(fontdata) -- free memory
if cleanup > 3 then
@@ -542,6 +554,7 @@ function otf.load(filename,sub,featurefile) -- second argument (format) is gone
collectgarbage("collect")
end
else
+ stoptiming("fontloader")
data = nil
report_otf("loading failed due to read error")
end
@@ -634,9 +647,6 @@ actions["add dimensions"] = function(data,filename)
report_otf("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
-- d.width = -wd
end
- -- if forcenotdef and not d.name then
- -- d.name = ".notdef"
- -- end
if bb then
local ht = bb[4]
local dp = -bb[2]
@@ -696,7 +706,7 @@ local function somecopy(old) -- fast one
end
end
--- not setting hasitalics and class (when nil) during table cronstruction can save some mem
+-- not setting hasitalics and class (when nil) during table construction can save some mem
actions["prepare glyphs"] = function(data,filename,raw)
local rawglyphs = raw.glyphs
@@ -712,6 +722,7 @@ actions["prepare glyphs"] = function(data,filename,raw)
local indices = resources.indices -- index to unicode
local duplicates = resources.duplicates
local variants = resources.variants
+ local notdefindex = -1
if rawsubfonts then
@@ -721,85 +732,135 @@ actions["prepare glyphs"] = function(data,filename,raw)
if rawcidinfo.registry then
local cidmap = fonts.cid.getmap(rawcidinfo)
if cidmap then
--- local map = raw.map.map -- else created each time
--- local backmap = raw.map.backmap -- else created each time
rawcidinfo.usedname = cidmap.usedname
- local nofnames, nofunicodes = 0, 0
- local cidunicodes, cidnames = cidmap.unicodes, cidmap.names
+ local nofnames = 0
+ local nofunicodes = 0
+ local cidunicodes = cidmap.unicodes
+ local cidnames = cidmap.names
+ local cidtotal = 0
+ local unique = trace_subfonts and { }
for cidindex=1,#rawsubfonts do
local subfont = rawsubfonts[cidindex]
local cidglyphs = subfont.glyphs
if includesubfonts then
metadata.subfonts[cidindex] = somecopy(subfont)
end
- -- we have delayed loading so we cannot use next
- for index=0,subfont.glyphcnt-1 do -- we could take the previous glyphcnt instead of 0
- local glyph = cidglyphs[index]
- if glyph then
- local unicode = glyph.unicode
--- local unicode = backmap[index] or -1
- if unicode >= 0x00E000 and unicode <= 0x00F8FF then
- unicode = -1
- elseif unicode >= 0x0F0000 and unicode <= 0x0FFFFD then
- unicode = -1
- elseif unicode >= 0x100000 and unicode <= 0x10FFFD then
- unicode = -1
- end
- local name = glyph.name or cidnames[index]
--- print(index,unicode,glyph.name,raw.map.map[unicode],raw.map.backmap[index])
- if not unicode or unicode == -1 then -- or unicode >= criterium then
- unicode = cidunicodes[index]
- end
- if unicode and descriptions[unicode] then
- if trace_private then
- report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+ local cidcnt = subfont.glyphcnt
+ local cidmin = subfont.glyphmin
+ local cidmax = subfont.glyphmax
+ local notdef = (tonumber(raw.table_version) or 0) > 0.4 and subfont.notdef_loc or -1
+ if notdeffound == -1 and notdef >= 0 then
+ notdeffound = notdef
+ end
+ if trace_subfonts then
+ local cidtot = cidmax - cidmin + 1
+ cidtotal = cidtotal + cidtot
+ report_otf("subfont: %i, min: %i, max: %i, cnt: %i, n: %i",cidindex,cidmin,cidmax,cidtot,cidcnt)
+ end
+ if cidcnt > 0 then
+ for index=cidmin,cidmax do
+ local glyph = cidglyphs[index]
+ if glyph then
+ if trace_subfonts then
+ unique[index] = true
end
- unicode = -1
- end
- if not unicode or unicode == -1 then -- or unicode >= criterium then
- if not name then
- name = format("u%06X.ctx",private)
+ local unicode = glyph.unicode
+ if unicode >= 0x00E000 and unicode <= 0x00F8FF then
+ unicode = -1
+ elseif unicode >= 0x0F0000 and unicode <= 0x0FFFFD then
+ unicode = -1
+ elseif unicode >= 0x100000 and unicode <= 0x10FFFD then
+ unicode = -1
end
- unicode = private
- unicodes[name] = private
- if trace_private then
- report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
+ local name = glyph.name or cidnames[index]
+ if not unicode or unicode == -1 then -- or unicode >= criterium then
+ unicode = cidunicodes[index]
end
- private = private + 1
- nofnames = nofnames + 1
- else
- -- if unicode > criterium then
- -- local taken = descriptions[unicode]
- -- if taken then
- -- private = private + 1
- -- descriptions[private] = taken
- -- unicodes[taken.name] = private
- -- indices[taken.index] = private
- -- if trace_private then
- -- report_otf("slot %U is moved to %U due to private in font",unicode)
- -- end
- -- end
- -- end
- if not name then
- name = format("u%06X.ctx",unicode)
+ if unicode and descriptions[unicode] then
+ if trace_private then
+ report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+ end
+ unicode = -1
+ end
+ if not unicode or unicode == -1 then -- or unicode >= criterium then
+ if not name then
+ name = formatters["u%06X.ctx"](private)
+ end
+ unicode = private
+ unicodes[name] = private
+ if trace_private then
+ report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
+ end
+ private = private + 1
+ nofnames = nofnames + 1
+ else
+ -- if unicode > criterium then
+ -- local taken = descriptions[unicode]
+ -- if taken then
+ -- private = private + 1
+ -- descriptions[private] = taken
+ -- unicodes[taken.name] = private
+ -- indices[taken.index] = private
+ -- if trace_private then
+ -- report_otf("slot %U is moved to %U due to private in font",unicode)
+ -- end
+ -- end
+ -- end
+ if not name then
+ name = formatters["u%06X.ctx"](unicode)
+ end
+ unicodes[name] = unicode
+ nofunicodes = nofunicodes + 1
+ end
+ indices[index] = unicode -- each index is unique (at least now)
+ local description = {
+ -- width = glyph.width,
+ boundingbox = glyph.boundingbox,
+ -- name = glyph.name or name or "unknown", -- uniXXXX
+ name = name or "unknown", -- uniXXXX
+ -- cidindex = cidindex,
+ index = index,
+ glyph = glyph,
+ }
+ descriptions[unicode] = description
+ local altuni = glyph.altuni
+ if altuni then
+ -- local d
+ for i=1,#altuni do
+ local a = altuni[i]
+ local u = a.unicode
+ if u ~= unicode then
+ local v = a.variant
+ if v then
+ -- tricky: no addition to d? needs checking but in practice such dups are either very simple
+ -- shapes or e.g cjk with not that many features
+ local vv = variants[v]
+ if vv then
+ vv[u] = unicode
+ else -- xits-math has some:
+ vv = { [u] = unicode }
+ variants[v] = vv
+ end
+ -- elseif d then
+ -- d[#d+1] = u
+ -- else
+ -- d = { u }
+ end
+ end
+ end
+ -- if d then
+ -- duplicates[unicode] = d -- is this needed ?
+ -- end
end
- unicodes[name] = unicode
- nofunicodes = nofunicodes + 1
end
- indices[index] = unicode -- each index is unique (at least now)
- local description = {
- -- width = glyph.width,
- boundingbox = glyph.boundingbox,
- -- name = glyph.name or name or "unknown", -- uniXXXX
- name = name or "unknown", -- uniXXXX
- cidindex = cidindex,
- index = index,
- glyph = glyph,
- }
- descriptions[unicode] = description
end
+ else
+ report_otf("potential problem: no glyphs found in subfont %i",cidindex)
end
end
+ if trace_subfonts then
+ report_otf("nofglyphs: %i, unique: %i",cidtotal,table.count(unique))
+ end
if trace_loading then
report_otf("cid font remapped, %s unicode points, %s symbolic names, %s glyphs",nofunicodes, nofnames, nofunicodes+nofnames)
end
@@ -812,91 +873,108 @@ actions["prepare glyphs"] = function(data,filename,raw)
else
- for index=0,raw.glyphcnt-1 do -- not raw.glyphmax-1 (as that will crash)
- local glyph = rawglyphs[index]
- if glyph then
- local unicode = glyph.unicode
- local name = glyph.name
- if not unicode or unicode == -1 then -- or unicode >= criterium then
- unicode = private
- unicodes[name] = private
- if trace_private then
- report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
- end
- private = private + 1
- else
- -- We have a font that uses and exposes the private area. As this is rather unreliable it's
- -- advised no to trust slots here (better use glyphnames). Anyway, we need a double check:
- -- we need to move already moved entries and we also need to bump the next private to after
- -- the (currently) last slot. This could leave us with a hole but we have holes anyway.
- if unicode > criterium then
- -- \definedfont[file:HANBatang-LVT.ttf] \fontchar{uF0135} \char"F0135
- local taken = descriptions[unicode]
- if taken then
- if unicode >= private then
- private = unicode + 1 -- restart private (so we can have mixed now)
+ local cnt = raw.glyphcnt or 0
+ local min = raw.glyphmin or 0
+ local max = raw.glyphmax or (raw.glyphcnt - 1)
+ notdeffound = (tonumber(raw.table_version) or 0) > 0.4 and raw.notdef_loc or -1
+ if cnt > 0 then
+ for index=min,max do
+ local glyph = rawglyphs[index]
+ if glyph then
+ local unicode = glyph.unicode
+ local name = glyph.name
+ if not unicode or unicode == -1 then -- or unicode >= criterium then
+ unicode = private
+ unicodes[name] = private
+ if trace_private then
+ report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
+ end
+ private = private + 1
+ else
+ -- We have a font that uses and exposes the private area. As this is rather unreliable it's
+ -- advised no to trust slots here (better use glyphnames). Anyway, we need a double check:
+ -- we need to move already moved entries and we also need to bump the next private to after
+ -- the (currently) last slot. This could leave us with a hole but we have holes anyway.
+ if unicode > criterium then
+ -- \definedfont[file:HANBatang-LVT.ttf] \fontchar{uF0135} \char"F0135
+ local taken = descriptions[unicode]
+ if taken then
+ if unicode >= private then
+ private = unicode + 1 -- restart private (so we can have mixed now)
+ else
+ private = private + 1 -- move on
+ end
+ descriptions[private] = taken
+ unicodes[taken.name] = private
+ indices[taken.index] = private
+ if trace_private then
+ report_otf("slot %U is moved to %U due to private in font",unicode)
+ end
else
- private = private + 1 -- move on
- end
- descriptions[private] = taken
- unicodes[taken.name] = private
- indices[taken.index] = private
- if trace_private then
- report_otf("slot %U is moved to %U due to private in font",unicode)
- end
- else
- if unicode >= private then
- private = unicode + 1 -- restart (so we can have mixed now)
+ if unicode >= private then
+ private = unicode + 1 -- restart (so we can have mixed now)
+ end
end
end
+ unicodes[name] = unicode
end
- unicodes[name] = unicode
- end
- indices[index] = unicode
- -- if not name then
- -- name = format("u%06X",unicode) -- u%06X.ctx
- -- end
- descriptions[unicode] = {
- -- width = glyph.width,
- boundingbox = glyph.boundingbox,
- name = name,
- index = index,
- glyph = glyph,
- }
- local altuni = glyph.altuni
- if altuni then
- -- local d
- for i=1,#altuni do
- local a = altuni[i]
- local u = a.unicode
- local v = a.variant
- if v then
- -- tricky: no addition to d? needs checking but in practice such dups are either very simple
- -- shapes or e.g cjk with not that many features
- local vv = variants[v]
- if vv then
- vv[u] = unicode
- else -- xits-math has some:
- vv = { [u] = unicode }
- variants[v] = vv
+ indices[index] = unicode
+ -- if not name then
+ -- name = formatters["u%06X"](unicode) -- u%06X.ctx
+ -- end
+ descriptions[unicode] = {
+ -- width = glyph.width,
+ boundingbox = glyph.boundingbox,
+ name = name,
+ index = index,
+ glyph = glyph,
+ }
+ local altuni = glyph.altuni
+ if altuni then
+ -- local d
+ for i=1,#altuni do
+ local a = altuni[i]
+ local u = a.unicode
+ if u ~= unicode then
+ local v = a.variant
+ if v then
+ -- tricky: no addition to d? needs checking but in practice such dups are either very simple
+ -- shapes or e.g cjk with not that many features
+ local vv = variants[v]
+ if vv then
+ vv[u] = unicode
+ else -- xits-math has some:
+ vv = { [u] = unicode }
+ variants[v] = vv
+ end
+ -- elseif d then
+ -- d[#d+1] = u
+ -- else
+ -- d = { u }
+ end
end
- -- elseif d then
- -- d[#d+1] = u
- -- else
- -- d = { u }
end
+ -- if d then
+ -- duplicates[unicode] = d -- is this needed ?
+ -- end
end
- -- if d then
- -- duplicates[unicode] = d -- is this needed ?
- -- end
+ else
+ report_otf("potential problem: glyph %U is used but empty",index)
end
- else
- report_otf("potential problem: glyph %U is used but empty",index)
end
+ else
+ report_otf("potential problem: no glyphs found")
end
end
+ if notdeffound == -1 then
+ report_otf("warning: no .notdef found in %a",filename)
+ elseif notdeffound ~= 0 then
+ report_otf("warning: .notdef found at position %a in %a",notdeffound,filename)
+ end
+ metadata.notdef = notdeffound
+
resources.private = private
end
@@ -994,7 +1072,8 @@ actions["add duplicates"] = function(data,filename,raw)
local unicodes = resources.unicodes -- name to unicode
local indices = resources.indices -- index to unicodes
local duplicates = resources.duplicates
- for unicode, d in next, duplicates do
+ -- for unicode, d in next, duplicates do
+ for unicode, d in table.sortedhash(duplicates) do -- nicer for log
local nofduplicates = #d
if nofduplicates > 4 then
if trace_loading then
@@ -1021,12 +1100,12 @@ actions["add duplicates"] = function(data,filename,raw)
-- todo: lookups etc
end
if u > 0 then -- and
- local duplicate = table.copy(description) -- else packing problem
- duplicate.comment = format("copy of U+%05X", unicode)
+ local duplicate = copy(description) -- else packing problem
+ duplicate.comment = formatters["copy of %U"](unicode)
descriptions[u] = duplicate
-- validduplicates[#validduplicates+1] = u
if trace_loading then
- report_otf("duplicating %U to %U with index %H (%s kerns)",unicode,u,description.index,n)
+ report_otf("duplicating %06U to %06U with index %H (%s kerns)",unicode,u,description.index,n)
end
end
end
@@ -1040,16 +1119,16 @@ end
-- boundingbox: split into ht/dp takes more memory (larger tables and less sharing)
actions["analyze glyphs"] = function(data,filename,raw) -- maybe integrate this in the previous
- local descriptions = data.descriptions
- local resources = data.resources
- local metadata = data.metadata
- local properties = data.properties
- local hasitalics = false
- local widths = { }
- local marks = { } -- always present (saves checking)
+ local descriptions = data.descriptions
+ local resources = data.resources
+ local metadata = data.metadata
+ local properties = data.properties
+ local hasitalics = false
+ local widths = { }
+ local marks = { } -- always present (saves checking)
for unicode, description in next, descriptions do
- local glyph = description.glyph
- local italic = glyph.italic_correction
+ local glyph = description.glyph
+ local italic = glyph.italic_correction -- only in a math font (we also have vert/horiz)
if not italic then
-- skip
elseif italic == 0 then
@@ -1118,7 +1197,8 @@ end
actions["reorganize features"] = function(data,filename,raw) -- combine with other
local features = { }
data.resources.features = features
- for k, what in next, otf.glists do
+ for k=1,#otf.glists do
+ local what = otf.glists[k]
local dw = raw[what]
if dw then
local f = { }
@@ -1187,6 +1267,140 @@ actions["reorganize anchor classes"] = function(data,filename,raw)
end
end
+-- local function checklookups(data,missing,nofmissing)
+-- local resources = data.resources
+-- local unicodes = resources.unicodes
+-- local lookuptypes = resources.lookuptypes
+-- if not unicodes or not lookuptypes then
+-- return
+-- elseif nofmissing <= 0 then
+-- return
+-- end
+-- local descriptions = data.descriptions
+-- local private = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+-- --
+-- local ns, nl = 0, 0
+
+-- local guess = { }
+-- -- helper
+-- local function check(gname,code,unicode)
+-- local description = descriptions[code]
+-- -- no need to add a self reference
+-- local variant = description.name
+-- if variant == gname then
+-- return
+-- end
+-- -- the variant already has a unicode (normally that results in a default tounicode to self)
+-- local unic = unicodes[variant]
+-- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+-- -- no default mapping and therefore maybe no tounicode yet
+-- else
+-- return
+-- end
+-- -- the variant already has a tounicode
+-- if descriptions[code].unicode then
+-- return
+-- end
+-- -- add to the list
+-- local g = guess[variant]
+-- -- local r = overloads[unicode]
+-- -- if r then
+-- -- unicode = r.unicode
+-- -- end
+-- if g then
+-- g[gname] = unicode
+-- else
+-- guess[variant] = { [gname] = unicode }
+-- end
+-- end
+-- --
+-- for unicode, description in next, descriptions do
+-- local slookups = description.slookups
+-- if slookups then
+-- local gname = description.name
+-- for tag, data in next, slookups do
+-- local lookuptype = lookuptypes[tag]
+-- if lookuptype == "alternate" then
+-- for i=1,#data do
+-- check(gname,data[i],unicode)
+-- end
+-- elseif lookuptype == "substitution" then
+-- check(gname,data,unicode)
+-- end
+-- end
+-- end
+-- local mlookups = description.mlookups
+-- if mlookups then
+-- local gname = description.name
+-- for tag, list in next, mlookups do
+-- local lookuptype = lookuptypes[tag]
+-- if lookuptype == "alternate" then
+-- for i=1,#list do
+-- local data = list[i]
+-- for i=1,#data do
+-- check(gname,data[i],unicode)
+-- end
+-- end
+-- elseif lookuptype == "substitution" then
+-- for i=1,#list do
+-- check(gname,list[i],unicode)
+-- end
+-- end
+-- end
+-- end
+-- end
+-- -- resolve references
+-- local done = true
+-- while done do
+-- done = false
+-- for k, v in next, guess do
+-- if type(v) ~= "number" then
+-- for kk, vv in next, v do
+-- if vv == -1 or vv >= private or (vv >= 0xE000 and vv <= 0xF8FF) or vv == 0xFFFE or vv == 0xFFFF then
+-- local uu = guess[kk]
+-- if type(uu) == "number" then
+-- guess[k] = uu
+-- done = true
+-- end
+-- else
+-- guess[k] = vv
+-- done = true
+-- end
+-- end
+-- end
+-- end
+-- end
+-- -- wrap up
+-- local orphans = 0
+-- local guessed = 0
+-- for k, v in next, guess do
+-- if type(v) == "number" then
+-- descriptions[unicodes[k]].unicode = descriptions[v].unicode or v -- can also be a table
+-- guessed = guessed + 1
+-- else
+-- local t = nil
+-- local l = lower(k)
+-- local u = unicodes[l]
+-- if not u then
+-- orphans = orphans + 1
+-- elseif u == -1 or u >= private or (u >= 0xE000 and u <= 0xF8FF) or u == 0xFFFE or u == 0xFFFF then
+-- local unicode = descriptions[u].unicode
+-- if unicode then
+-- descriptions[unicodes[k]].unicode = unicode
+-- guessed = guessed + 1
+-- else
+-- orphans = orphans + 1
+-- end
+-- else
+-- orphans = orphans + 1
+-- end
+-- end
+-- end
+-- if trace_loading and orphans > 0 or guessed > 0 then
+-- report_otf("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
+-- end
+-- end
+
actions["prepare tounicode"] = function(data,filename,raw)
fonts.mappings.addtounicode(data,filename)
end
@@ -1221,8 +1435,9 @@ actions["reorganize subtables"] = function(data,filename,raw)
local lookups = { }
local chainedfeatures = { }
resources.sequences = sequences
- resources.lookups = lookups
- for _, what in next, otf.glists do
+ resources.lookups = lookups -- we also have lookups in data itself
+ for k=1,#otf.glists do
+ local what = otf.glists[k]
local dw = raw[what]
if dw then
for k=1,#dw do
@@ -1308,12 +1523,6 @@ actions["reorganize subtables"] = function(data,filename,raw)
end
end
--- test this:
---
--- for _, what in next, otf.glists do
--- raw[what] = nil
--- end
-
actions["prepare lookups"] = function(data,filename,raw)
local lookups = raw.lookups
if lookups then
@@ -1427,12 +1636,16 @@ end
actions["reorganize lookups"] = function(data,filename,raw) -- we could check for "" and n == 0
-- we prefer the before lookups in a normal order
if data.lookups then
- local splitter = data.helpers.tounicodetable
- local t_u_cache = { }
- local s_u_cache = t_u_cache -- string keys
- local t_h_cache = { }
- local s_h_cache = t_h_cache -- table keys (so we could use one cache)
- local r_u_cache = { } -- maybe shared
+ local helpers = data.helpers
+ local duplicates = data.resources.duplicates
+ local splitter = helpers.tounicodetable
+ local t_u_cache = { }
+ local s_u_cache = t_u_cache -- string keys
+ local t_h_cache = { }
+ local s_h_cache = t_h_cache -- table keys (so we could use one cache)
+ local r_u_cache = { } -- maybe shared
+ helpers.matchcache = t_h_cache -- so that we can add duplicates
+ --
for _, lookup in next, data.lookups do
local rules = lookup.rules
if rules then
@@ -1586,6 +1799,50 @@ actions["reorganize lookups"] = function(data,filename,raw) -- we could check fo
end
end
+actions["expand lookups"] = function(data,filename,raw) -- we could check for "" and n == 0
+ if data.lookups then
+ local cache = data.helpers.matchcache
+ if cache then
+ local duplicates = data.resources.duplicates
+ for key, hash in next, cache do
+ local done = nil
+ for key in next, hash do
+ local unicode = duplicates[key]
+ if not unicode then
+ -- no duplicate
+ elseif type(unicode) == "table" then
+ -- multiple duplicates
+ for i=1,#unicode do
+ local u = unicode[i]
+ if hash[u] then
+ -- already in set
+ elseif done then
+ done[u] = key
+ else
+ done = { [u] = key }
+ end
+ end
+ else
+ -- one duplicate
+ if hash[unicode] then
+ -- already in set
+ elseif done then
+ done[unicode] = key
+ else
+ done = { [unicode] = key }
+ end
+ end
+ end
+ if done then
+ for u in next, done do
+ hash[u] = true
+ end
+ end
+ end
+ end
+ end
+end
+
local function check_variants(unicode,the_variants,splitter,unicodes)
local variants = the_variants.variants
if variants then -- use splitter
@@ -1626,11 +1883,11 @@ local function check_variants(unicode,the_variants,splitter,unicodes)
parts = nil
end
end
- local italic_correction = the_variants.italic_correction
- if italic_correction and italic_correction == 0 then
- italic_correction = nil
+ local italic = the_variants.italic
+ if italic and italic == 0 then
+ italic = nil
end
- return variants, parts, italic_correction
+ return variants, parts, italic
end
actions["analyze math"] = function(data,filename,raw)
@@ -1639,15 +1896,16 @@ actions["analyze math"] = function(data,filename,raw)
local unicodes = data.resources.unicodes
local splitter = data.helpers.tounicodetable
for unicode, description in next, data.descriptions do
- local glyph = description.glyph
- local mathkerns = glyph.mathkern -- singular
- local horiz_variants = glyph.horiz_variants
- local vert_variants = glyph.vert_variants
- local top_accent = glyph.top_accent
- if mathkerns or horiz_variants or vert_variants or top_accent then
+ local glyph = description.glyph
+ local mathkerns = glyph.mathkern -- singular
+ local hvariants = glyph.horiz_variants
+ local vvariants = glyph.vert_variants
+ local accent = glyph.top_accent
+ local italic = glyph.italic_correction
+ if mathkerns or hvariants or vvariants or accent or italic then
local math = { }
- if top_accent then
- math.top_accent = top_accent
+ if accent then
+ math.accent = accent
end
if mathkerns then
for k, v in next, mathkerns do
@@ -1663,15 +1921,14 @@ actions["analyze math"] = function(data,filename,raw)
end
math.kerns = mathkerns
end
- if horiz_variants then
- math.horiz_variants, math.horiz_parts, math.horiz_italic_correction = check_variants(unicode,horiz_variants,splitter,unicodes)
+ if hvariants then
+ math.hvariants, math.hparts, math.hitalic = check_variants(unicode,hvariants,splitter,unicodes)
end
- if vert_variants then
- math.vert_variants, math.vert_parts, math.vert_italic_correction = check_variants(unicode,vert_variants,splitter,unicodes)
+ if vvariants then
+ math.vvariants, math.vparts, math.vitalic = check_variants(unicode,vvariants,splitter,unicodes)
end
- local italic_correction = description.italic
- if italic_correction and italic_correction ~= 0 then
- math.italic_correction = italic_correction
+ if italic and italic ~= 0 then
+ math.italic = italic
end
description.math = math
end
@@ -1742,9 +1999,10 @@ actions["merge kern classes"] = function(data,filename,raw)
local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes
local lookup = subtable.lookup or subtable.name
if kernclass then -- the next one is quite slow
+ -- as fas as i can see the kernclass is a table with one entry and offsets
+ -- have no [1] so we could remov eon elevel (kernclass) and start offsets
+ -- at 1 but we're too far down the road now to fix that
if #kernclass > 0 then
- -- it's a table with one entry .. a future luatex can just
- -- omit that level
kernclass = kernclass[1]
lookup = type(kernclass.lookup) == "string" and kernclass.lookup or lookup
report_otf("fixing kernclass table of lookup %a",lookup)
@@ -1771,15 +2029,17 @@ actions["merge kern classes"] = function(data,filename,raw)
if splt then
local extrakerns = { }
local baseoffset = (fk-1) * maxseconds
- for sk=2,maxseconds do -- will become 1 based in future luatex
- local sv = seconds[sk]
-- for sk, sv in next, seconds do
- local splt = split[sv]
- if splt then -- redundant test
- local offset = offsets[baseoffset + sk]
- if offset then
- for i=1,#splt do
- extrakerns[splt[i]] = offset
+ for sk=2,maxseconds do
+ local sv = seconds[sk]
+ if sv then
+ local splt = split[sv]
+ if splt then -- redundant test
+ local offset = offsets[baseoffset + sk]
+ if offset then
+ for i=1,#splt do
+ extrakerns[splt[i]] = offset
+ end
end
end
end
@@ -1836,7 +2096,7 @@ actions["merge kern classes"] = function(data,filename,raw)
report_otf("%s kern overloads ignored",ignored)
end
if blocked > 0 then
- report_otf("%s succesive kerns blocked",blocked)
+ report_otf("%s successive kerns blocked",blocked)
end
end
end
@@ -1873,18 +2133,22 @@ actions["check metadata"] = function(data,filename,raw)
end
end
--
- if metadata.validation_state and table.contains(metadata.validation_state,"bad_ps_fontname") then
+ local state = metadata.validation_state
+ local names = raw.names
+ --
+ if state and table.contains(state,"bad_ps_fontname") then
-- the ff library does a bit too much (and wrong) checking ... so we need to catch this
-- at least for now
local function valid(what)
- local names = raw.names
- for i=1,#names do
- local list = names[i]
- local names = list.names
- if names then
- local name = names[what]
- if name and valid_ps_name(name) then
- return name
+ if names then
+ for i=1,#names do
+ local list = names[i]
+ local names = list.names
+ if names then
+ local name = names[what]
+ if name and valid_ps_name(name) then
+ return name
+ end
end
end
end
@@ -1908,6 +2172,36 @@ actions["check metadata"] = function(data,filename,raw)
check("fullname")
end
--
+ if names then
+ local psname = metadata.psname
+ if not psname or psname == "" then
+ for i=1,#names do
+ local name = names[i]
+ -- Currently we use the same restricted search as in the new context (specific) font loader
+ -- but we might add more lang checks (it worked ok in the new loaded so now we're in sync)
+ -- This check here is also because there are (esp) cjk fonts out there with psnames different
+ -- from fontnames (gives a bad lookup in backend).
+ if lower(name.lang) == "english (us)" then
+ local specification = name.names
+ if specification then
+ local postscriptname = specification.postscriptname
+ if postscriptname then
+ psname = postscriptname
+ end
+ end
+ end
+ break
+ end
+ end
+ if psname ~= metadata.fontname then
+ report_otf("fontname %a, fullname %a, psname %a",metadata.fontname,metadata.fullname,psname)
+ end
+ metadata.psname = psname
+ end
+ --
+ if state and table.contains(state,"bad_cmap_table") then
+ report_otf("fontfile %a has bad cmap tables",filename)
+ end
end
actions["cleanup tables"] = function(data,filename,raw)
@@ -1933,7 +2227,9 @@ end
-- we can share { } as it is never set
---- ligatures have an extra specification.char entry that we don't use
+-- ligatures have an extra specification.char entry that we don't use
+
+-- mlookups only with pairs and ligatures
actions["reorganize glyph lookups"] = function(data,filename,raw)
local resources = data.resources
@@ -2014,14 +2310,14 @@ actions["reorganize glyph lookups"] = function(data,filename,raw)
if mlookups then
description.mlookups = mlookups
end
+ -- description.lookups = nil
end
end
-
end
local zero = { 0, 0 }
-actions["reorganize glyph anchors"] = function(data,filename,raw) -- when we replace inplace we safe entries
+actions["reorganize glyph anchors"] = function(data,filename,raw)
local descriptions = data.descriptions
for unicode, description in next, descriptions do
local anchors = description.glyph.anchors
@@ -2244,7 +2540,7 @@ end
-- we cannot share descriptions as virtual fonts might extend them (ok,
-- we could use a cache with a hash
--
--- we already assing an empty tabel to characters as we can add for
+-- we already assign an empty tabel to characters as we can add for
-- instance protruding info and loop over characters; one is not supposed
-- to change descriptions and if one does so one should make a copy!
@@ -2267,10 +2563,14 @@ local function copytotfm(data,cache_id)
local spaceunits = 500
local spacer = "space"
local designsize = metadata.designsize or metadata.design_size or 100
+ local minsize = metadata.minsize or metadata.design_range_bottom or designsize
+ local maxsize = metadata.maxsize or metadata.design_range_top or designsize
local mathspecs = metadata.math
--
if designsize == 0 then
designsize = 100
+ minsize = 100
+ maxsize = 100
end
if mathspecs then
for name, value in next, mathspecs do
@@ -2288,8 +2588,12 @@ local function copytotfm(data,cache_id)
local m = d.math
if m then
-- watch out: luatex uses horiz_variants for the parts
- local variants = m.horiz_variants
- local parts = m.horiz_parts
+ --
+ local italic = m.italic
+ local vitalic = m.vitalic
+ --
+ local variants = m.hvariants
+ local parts = m.hparts
-- local done = { [unicode] = true }
if variants then
local c = character
@@ -2306,9 +2610,11 @@ local function copytotfm(data,cache_id)
c.horiz_variants = parts
elseif parts then
character.horiz_variants = parts
+ italic = m.hitalic
end
- local variants = m.vert_variants
- local parts = m.vert_parts
+ --
+ local variants = m.vvariants
+ local parts = m.vparts
-- local done = { [unicode] = true }
if variants then
local c = character
@@ -2326,14 +2632,19 @@ local function copytotfm(data,cache_id)
elseif parts then
character.vert_variants = parts
end
- local italic_correction = m.vert_italic_correction
- if italic_correction then
- character.vert_italic_correction = italic_correction -- was c.
+ --
+ if italic and italic ~= 0 then
+ character.italic = italic -- overload
+ end
+ if vitalic and vitalic ~= 0 then
+ character.vert_italic = vitalic
end
- local top_accent = m.top_accent
- if top_accent then
- character.top_accent = top_accent
+ --
+ local accent = m.accent
+ if accent then
+ character.accent = accent
end
+ --
local kerns = m.kerns
if kerns then
character.mathkerns = kerns
@@ -2346,16 +2657,16 @@ local function copytotfm(data,cache_id)
local filename = constructors.checkedfilename(resources)
local fontname = metadata.fontname
local fullname = metadata.fullname or fontname
- local psname = fontname or fullname
- local units = metadata.units_per_em or 1000
+ local psname = metadata.psname or fontname or fullname
+ local units = metadata.units or metadata.units_per_em or 1000
--
if units == 0 then -- catch bugs in fonts
units = 1000 -- maybe 2000 when ttf
- metadata.units_per_em = 1000
+ metadata.units = 1000
report_otf("changing %a units to %a",0,units)
end
--
- local monospaced = metadata.isfixedpitch or (pfminfo.panose and pfminfo.panose.proportion == "Monospaced")
+ local monospaced = metadata.monospaced or metadata.isfixedpitch or (pfminfo.panose and pfminfo.panose.proportion == "Monospaced")
local charwidth = pfminfo.avgwidth -- or unset
local charxheight = pfminfo.os2_xheight and pfminfo.os2_xheight > 0 and pfminfo.os2_xheight
-- charwidth = charwidth * units/1000
@@ -2425,17 +2736,16 @@ local function copytotfm(data,cache_id)
end
end
--
- parameters.designsize = (designsize/10)*65536
- parameters.ascender = abs(metadata.ascent or 0)
- parameters.descender = abs(metadata.descent or 0)
- parameters.units = units
+ parameters.designsize = (designsize/10)*65536
+ parameters.minsize = (minsize /10)*65536
+ parameters.maxsize = (maxsize /10)*65536
+ parameters.ascender = abs(metadata.ascender or metadata.ascent or 0)
+ parameters.descender = abs(metadata.descender or metadata.descent or 0)
+ parameters.units = units
--
properties.space = spacer
properties.encodingbytes = 2
properties.format = data.format or otf_format(filename) or formats.otf
--- if units ~= 1000 and format ~= "truetype" then
--- properties.format = "truetype"
--- end
properties.noglyphnames = true
properties.filename = filename
properties.fontname = fontname
@@ -2636,3 +2946,112 @@ function otf.scriptandlanguage(tfmdata,attr)
local properties = tfmdata.properties
return properties.script or "dflt", properties.language or "dflt"
end
+
+-- a little bit of abstraction
+
+local function justset(coverage,unicode,replacement)
+ coverage[unicode] = replacement
+end
+
+otf.coverup = {
+ stepkey = "subtables",
+ actions = {
+ substitution = justset,
+ alternate = justset,
+ multiple = justset,
+ ligature = justset,
+ kern = justset,
+ chainsubstitution = justset,
+ chainposition = justset,
+ },
+ register = function(coverage,lookuptype,format,feature,n,descriptions,resources)
+ local name = formatters["ctx_%s_%s_%s"](feature,lookuptype,n) -- we can have a mix of types
+ if lookuptype == "kern" then
+ resources.lookuptypes[name] = "position"
+ else
+ resources.lookuptypes[name] = lookuptype
+ end
+ for u, c in next, coverage do
+ local description = descriptions[u]
+ local slookups = description.slookups
+ if slookups then
+ slookups[name] = c
+ else
+ description.slookups = { [name] = c }
+ end
+ end
+ return name
+ end
+}
+
+-- moved from font-oth.lua
+
+local function getgsub(tfmdata,k,kind)
+ local description = tfmdata.descriptions[k]
+ if description then
+ local slookups = description.slookups -- we assume only slookups (we can always extend)
+ if slookups then
+ local shared = tfmdata.shared
+ local rawdata = shared and shared.rawdata
+ if rawdata then
+ local lookuptypes = rawdata.resources.lookuptypes
+ if lookuptypes then
+ local properties = tfmdata.properties
+ -- we could cache these
+ local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local found = slookups[lookup]
+ if found then
+ return found, lookuptypes[lookup]
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+otf.getgsub = getgsub -- returns value, gsub_kind
+
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found, kind = getgsub(tfmdata,k,kind)
+ if not found then
+ --
+ elseif kind == "substitution" then
+ return found
+ elseif kind == "alternate" then
+ local choice = tonumber(value) or 1 -- no random here (yet)
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+
+otf.getalternate = otf.getsubstitution
+
+function otf.getmultiple(tfmdata,k,kind)
+ local found, kind = getgsub(tfmdata,k,kind)
+ if found and kind == "multiple" then
+ return found
+ end
+ return { k }
+end
+
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns = getgsub(tfmdata,left,kind or "kern",true) -- for now we use getsub
+ if kerns then
+ local found = kerns[right]
+ local kind = type(found)
+ if kind == "table" then
+ found = found[1][3] -- can be more clever
+ elseif kind ~= "number" then
+ found = false
+ end
+ if found then
+ return found * tfmdata.parameters.factor
+ end
+ end
+ return 0
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-oth.lua b/Master/texmf-dist/tex/context/base/mkiv/font-oth.lua
new file mode 100644
index 00000000000..28c543494fc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-oth.lua
@@ -0,0 +1,9 @@
+if not modules then modules = { } end modules ['font-oth'] = {
+ version = 1.001,
+ comment = "companion to font-oth.lua (helpers)",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- otf.getalternate is moved elsewhere (for now) but move back here some day
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-oti.lua b/Master/texmf-dist/tex/context/base/mkiv/font-oti.lua
new file mode 100644
index 00000000000..bacd001a5e8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-oti.lua
@@ -0,0 +1,158 @@
+if not modules then modules = { } end modules ['font-oti'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local lower = string.lower
+
+local fonts = fonts
+local constructors = fonts.constructors
+
+local otf = constructors.newhandler("otf")
+local otffeatures = constructors.newfeatures("otf")
+local registerotffeature = otffeatures.register
+
+local otftables = otf.tables or { }
+otf.tables = otftables
+
+local allocate = utilities.storage.allocate
+
+registerotffeature {
+ name = "features",
+ description = "initialization of feature handler",
+ default = true,
+}
+
+-- these are later hooked into node and base initializaters
+
+local function setmode(tfmdata,value)
+ if value then
+ tfmdata.properties.mode = lower(value)
+ end
+end
+
+local function setlanguage(tfmdata,value)
+ if value then
+ local cleanvalue = lower(value)
+ local languages = otftables and otftables.languages
+ local properties = tfmdata.properties
+ if not languages then
+ properties.language = cleanvalue
+ elseif languages[value] then
+ properties.language = cleanvalue
+ else
+ properties.language = "dflt"
+ end
+ end
+end
+
+local function setscript(tfmdata,value)
+ if value then
+ local cleanvalue = lower(value)
+ local scripts = otftables and otftables.scripts
+ local properties = tfmdata.properties
+ if not scripts then
+ properties.script = cleanvalue
+ elseif scripts[value] then
+ properties.script = cleanvalue
+ else
+ properties.script = "dflt"
+ end
+ end
+end
+
+registerotffeature {
+ name = "mode",
+ description = "mode",
+ initializers = {
+ base = setmode,
+ node = setmode,
+ }
+}
+
+registerotffeature {
+ name = "language",
+ description = "language",
+ initializers = {
+ base = setlanguage,
+ node = setlanguage,
+ }
+}
+
+registerotffeature {
+ name = "script",
+ description = "script",
+ initializers = {
+ base = setscript,
+ node = setscript,
+ }
+}
+
+-- here (as also in generic
+
+otftables.featuretypes = allocate {
+ gpos_single = "position",
+ gpos_pair = "position",
+ gpos_cursive = "position",
+ gpos_mark2base = "position",
+ gpos_mark2ligature = "position",
+ gpos_mark2mark = "position",
+ gpos_context = "position",
+ gpos_contextchain = "position",
+ gsub_single = "substitution",
+ gsub_multiple = "substitution",
+ gsub_alternate = "substitution",
+ gsub_ligature = "substitution",
+ gsub_context = "substitution",
+ gsub_contextchain = "substitution",
+ gsub_reversecontextchain = "substitution",
+ gsub_reversesub = "substitution",
+}
+
+function otffeatures.checkeddefaultscript(featuretype,autoscript,scripts)
+ if featuretype == "position" then
+ local default = scripts.dflt
+ if default then
+ if autoscript == "position" or autoscript == true then
+ return default
+ else
+ report_otf("script feature %s not applied, enable default positioning")
+ end
+ else
+ -- no positioning at all
+ end
+ elseif featuretype == "substitution" then
+ local default = scripts.dflt
+ if default then
+ if autoscript == "substitution" or autoscript == true then
+ return default
+ end
+ end
+ end
+end
+
+function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
+ if featuretype == "position" then
+ local default = languages.dflt
+ if default then
+ if autolanguage == "position" or autolanguage == true then
+ return default
+ else
+ report_otf("language feature %s not applied, enable default positioning")
+ end
+ else
+ -- no positioning at all
+ end
+ elseif featuretype == "substitution" then
+ local default = languages.dflt
+ if default then
+ if autolanguage == "substitution" or autolanguage == true then
+ return default
+ end
+ end
+ end
+end
+
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-otj.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otj.lua
new file mode 100644
index 00000000000..aae70d1f345
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otj.lua
@@ -0,0 +1,1532 @@
+if not modules then modules = { } end modules ['font-otj'] = {
+ version = 1.001,
+ comment = "companion to font-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- This property based variant is not faster but looks nicer than the attribute one. We
+-- need to use rawget (which is apbout 4 times slower than a direct access but we cannot
+-- get/set that one for our purpose! This version does a bit more with discretionaries
+-- (and Kai has tested it with his collection of weird fonts.)
+
+-- There is some duplicate code here (especially in the the pre/post/replace branches) but
+-- we go for speed. We could store a list of glyph and mark nodes when registering but it's
+-- cleaner to have an identification pass here. Also, I need to keep tracing in mind so
+-- being too clever here is dangerous.
+
+-- The subtype test is not needed as there will be no (new) properties set, given that we
+-- reset the properties.
+
+-- As we have a rawget on properties we don't need one on injections.
+
+-- The use_advance code is just a test and is meant for testing and manuals. There is no
+-- performance (or whatever) gain and using kerns is somewhat cleaner (at least for now).
+
+if not nodes.properties then return end
+
+local next, rawget = next, rawget
+local utfchar = utf.char
+local fastcopy = table.fastcopy
+
+local registertracker = trackers.register
+
+local trace_injections = false registertracker("fonts.injections", function(v) trace_injections = v end)
+local trace_marks = false registertracker("fonts.injections.marks", function(v) trace_marks = v end)
+local trace_cursive = false registertracker("fonts.injections.cursive", function(v) trace_cursive = v end)
+local trace_spaces = false registertracker("otf.spaces", function(v) trace_spaces = v end)
+
+-- use_advance is just an experiment: it makes copying glyphs (instead of new_glyph) dangerous
+
+local use_advance = false directives.register("fonts.injections.advance", function(v) use_advance = v end)
+
+local report_injections = logs.reporter("fonts","injections")
+local report_spaces = logs.reporter("fonts","spaces")
+
+local attributes, nodes, node = attributes, nodes, node
+
+fonts = fonts
+local hashes = fonts.hashes
+local fontdata = hashes.identifiers
+local parameters = fonts.hashes.parameters
+local resources = fonts.hashes.resources
+
+nodes.injections = nodes.injections or { }
+local injections = nodes.injections
+
+local tracers = nodes.tracers
+local setcolor = tracers and tracers.colors.set
+local resetcolor = tracers and tracers.colors.reset
+
+local nodecodes = nodes.nodecodes
+local glyph_code = nodecodes.glyph
+local disc_code = nodecodes.disc
+local kern_code = nodecodes.kern
+local glue_code = nodecodes.glue
+
+local nuts = nodes.nuts
+local nodepool = nuts.pool
+
+local newkern = nodepool.kern
+
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getid = nuts.getid
+local getfont = nuts.getfont
+local getsubtype = nuts.getsubtype
+local getchar = nuts.getchar
+local getboth = nuts.getboth
+
+local ischar = nuts.is_char
+
+local getdisc = nuts.getdisc
+local setdisc = nuts.setdisc
+
+local traverse_id = nuts.traverse_id
+local traverse_char = nuts.traverse_char
+local insert_node_before = nuts.insert_before
+local insert_node_after = nuts.insert_after
+local find_tail = nuts.tail
+
+local properties = nodes.properties.data
+
+function injections.installnewkern(nk)
+ newkern = nk or newkern
+end
+
+local nofregisteredkerns = 0
+local nofregisteredpairs = 0
+local nofregisteredmarks = 0
+local nofregisteredcursives = 0
+local keepregisteredcounts = false
+
+function injections.keepcounts()
+ keepregisteredcounts = true
+end
+
+function injections.resetcounts()
+ nofregisteredkerns = 0
+ nofregisteredpairs = 0
+ nofregisteredmarks = 0
+ nofregisteredcursives = 0
+ keepregisteredcounts = false
+end
+
+-- We need to make sure that a possible metatable will not kick in unexpectedly.
+
+-- function injections.reset(n)
+-- local p = rawget(properties,n)
+-- if p and rawget(p,"injections") then
+-- p.injections = nil
+-- end
+-- end
+
+-- function injections.copy(target,source)
+-- local sp = rawget(properties,source)
+-- if sp then
+-- local tp = rawget(properties,target)
+-- local si = rawget(sp,"injections")
+-- if si then
+-- si = fastcopy(si)
+-- if tp then
+-- tp.injections = si
+-- else
+-- propertydata[target] = {
+-- injections = si,
+-- }
+-- end
+-- else
+-- if tp then
+-- tp.injections = nil
+-- end
+-- end
+-- end
+-- end
+
+function injections.reset(n)
+ local p = rawget(properties,n)
+ if p then
+ p.injections = false -- { }
+ else
+ properties[n] = false -- { injections = { } }
+ end
+end
+
+function injections.copy(target,source)
+ local sp = rawget(properties,source)
+ if sp then
+ local tp = rawget(properties,target)
+ -- local si = rawget(sp,"injections")
+ local si = sp.injections
+ if si then
+ si = fastcopy(si)
+ if tp then
+ tp.injections = si
+ else
+ propertydata[target] = {
+ injections = si,
+ }
+ end
+ elseif tp then
+ tp.injections = false -- { }
+ else
+ properties[target] = { injections = { } }
+ end
+ else
+ local tp = rawget(properties,target)
+ if tp then
+ tp.injections = false -- { }
+ else
+ properties[target] = false -- { injections = { } }
+ end
+ end
+end
+
+function injections.setligaindex(n,index)
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ i.ligaindex = index
+ else
+ p.injections = {
+ ligaindex = index
+ }
+ end
+ else
+ properties[n] = {
+ injections = {
+ ligaindex = index
+ }
+ }
+ end
+end
+
+function injections.getligaindex(n,default)
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ return i.ligaindex or default
+ end
+ end
+ return default
+end
+
+function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext) -- hm: nuts or nodes
+ local dx = factor*(exit[1]-entry[1])
+ local dy = -factor*(exit[2]-entry[2])
+ local ws = tfmstart.width
+ local wn = tfmnext.width
+ nofregisteredcursives = nofregisteredcursives + 1
+ if rlmode < 0 then
+ dx = -(dx + wn)
+ else
+ dx = dx - ws
+ end
+ if dx == 0 then
+ -- get rid of funny -0
+ dx = 0
+ end
+ --
+ local p = rawget(properties,start)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ i.cursiveanchor = true
+ else
+ p.injections = {
+ cursiveanchor = true,
+ }
+ end
+ else
+ properties[start] = {
+ injections = {
+ cursiveanchor = true,
+ },
+ }
+ end
+ local p = rawget(properties,nxt)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ i.cursivex = dx
+ i.cursivey = dy
+ else
+ p.injections = {
+ cursivex = dx,
+ cursivey = dy,
+ }
+ end
+ else
+ properties[nxt] = {
+ injections = {
+ cursivex = dx,
+ cursivey = dy,
+ },
+ }
+ end
+ return dx, dy, nofregisteredcursives
+end
+
+function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2lflag & tfmchr not used
+ local x = factor*spec[1]
+ local y = factor*spec[2]
+ local w = factor*spec[3]
+ local h = factor*spec[4]
+ if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then -- okay?
+ local yoffset = y - h
+ local leftkern = x -- both kerns are set in a pair kern compared
+ local rightkern = w - x -- to normal kerns where we set only leftkern
+ if leftkern ~= 0 or rightkern ~= 0 or yoffset ~= 0 then
+ nofregisteredpairs = nofregisteredpairs + 1
+ if rlmode and rlmode < 0 then
+ leftkern, rightkern = rightkern, leftkern
+ end
+ if not injection then
+ injection = "injections"
+ end
+ local p = rawget(properties,current)
+ if p then
+ -- local i = p[injection]
+ local i = rawget(p,injection)
+ if i then
+ if leftkern ~= 0 then
+ i.leftkern = (i.leftkern or 0) + leftkern
+ end
+ if rightkern ~= 0 then
+ i.rightkern = (i.rightkern or 0) + rightkern
+ end
+ if yoffset ~= 0 then
+ i.yoffset = (i.yoffset or 0) + yoffset
+ end
+ elseif leftkern ~= 0 or rightkern ~= 0 then
+ p[injection] = {
+ leftkern = leftkern,
+ rightkern = rightkern,
+ yoffset = yoffset,
+ }
+ else
+ p[injection] = {
+ yoffset = yoffset,
+ }
+ end
+ elseif leftkern ~= 0 or rightkern ~= 0 then
+ properties[current] = {
+ [injection] = {
+ leftkern = leftkern,
+ rightkern = rightkern,
+ yoffset = yoffset,
+ },
+ }
+ else
+ properties[current] = {
+ [injection] = {
+ yoffset = yoffset,
+ },
+ }
+ end
+ return x, y, w, h, nofregisteredpairs
+ end
+ end
+ return x, y, w, h -- no bound
+end
+
+-- This needs checking for rl < 0 but it is unlikely that a r2l script uses kernclasses between
+-- glyphs so we're probably safe (KE has a problematic font where marks interfere with rl < 0 in
+-- the previous case)
+
+function injections.setkern(current,factor,rlmode,x,injection)
+ local dx = factor * x
+ if dx ~= 0 then
+ nofregisteredkerns = nofregisteredkerns + 1
+ local p = rawget(properties,current)
+ if not injection then
+ injection = "injections"
+ end
+ if p then
+ -- local i = rawget(p,injection)
+ local i = rawget(p,injection)
+ if i then
+ i.leftkern = dx + (i.leftkern or 0)
+ else
+ p[injection] = {
+ leftkern = dx,
+ }
+ end
+ else
+ properties[current] = {
+ [injection] = {
+ leftkern = dx,
+ },
+ }
+ end
+ return dx, nofregisteredkerns
+ else
+ return 0, 0
+ end
+end
+
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk) -- ba=baseanchor, ma=markanchor
+ local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
+ nofregisteredmarks = nofregisteredmarks + 1
+ if rlmode >= 0 then
+ dx = tfmbase.width - dx -- see later commented ox
+ end
+ local p = rawget(properties,start)
+ -- hm, dejavu serif does a sloppy mark2mark before mark2base
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ if i.markmark then
+ -- out of order mkmk: yes or no or option
+ else
+ i.markx = dx
+ i.marky = dy
+ i.markdir = rlmode or 0
+ i.markbase = nofregisteredmarks
+ i.markbasenode = base
+ i.markmark = mkmk
+ end
+ else
+ p.injections = {
+ markx = dx,
+ marky = dy,
+ markdir = rlmode or 0,
+ markbase = nofregisteredmarks,
+ markbasenode = base,
+ markmark = mkmk,
+ }
+ end
+ else
+ properties[start] = {
+ injections = {
+ markx = dx,
+ marky = dy,
+ markdir = rlmode or 0,
+ markbase = nofregisteredmarks,
+ markbasenode = base,
+ markmark = mkmk,
+ },
+ }
+ end
+ return dx, dy, nofregisteredmarks
+end
+
+local function dir(n)
+ return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
+end
+
+local function showchar(n,nested)
+ local char = getchar(n)
+ report_injections("%wfont %s, char %U, glyph %c",nested and 2 or 0,getfont(n),char,char)
+end
+
+local function show(n,what,nested,symbol)
+ if n then
+ local p = rawget(properties,n)
+ if p then
+ local i = rawget(p,what)
+ if i then
+ local leftkern = i.leftkern or 0
+ local rightkern = i.rightkern or 0
+ local yoffset = i.yoffset or 0
+ local markx = i.markx or 0
+ local marky = i.marky or 0
+ local markdir = i.markdir or 0
+ local markbase = i.markbase or 0
+ local cursivex = i.cursivex or 0
+ local cursivey = i.cursivey or 0
+ local ligaindex = i.ligaindex or 0
+ local cursbase = i.cursiveanchor
+ local margin = nested and 4 or 2
+ --
+ if rightkern ~= 0 or yoffset ~= 0 then
+ report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
+ elseif leftkern ~= 0 then
+ report_injections("%w%s kern: dx %p",margin,symbol,leftkern)
+ end
+ if markx ~= 0 or marky ~= 0 or markbase ~= 0 then
+ report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase ~= 0 and "yes" or "no")
+ end
+ if cursivex ~= 0 or cursivey ~= 0 then
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
+ end
+ if ligaindex ~= 0 then
+ report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
+ end
+ end
+ end
+ end
+end
+
+local function showsub(n,what,where)
+ report_injections("begin subrun: %s",where)
+ for n in traverse_id(glyph_code,n) do
+ showchar(n,where)
+ show(n,what,where," ")
+ end
+ report_injections("end subrun")
+end
+
+local function trace(head,where)
+ report_injections("begin run %s: %s kerns, %s pairs, %s marks and %s cursives registered",
+ where or "",nofregisteredkerns,nofregisteredpairs,nofregisteredmarks,nofregisteredcursives)
+ local n = head
+ while n do
+ local id = getid(n)
+ if id == glyph_code then
+ showchar(n)
+ show(n,"injections",false," ")
+ show(n,"preinjections",false,"<")
+ show(n,"postinjections",false,">")
+ show(n,"replaceinjections",false,"=")
+ show(n,"emptyinjections",false,"*")
+ elseif id == disc_code then
+ local pre, post, replace = getdisc(n)
+ if pre then
+ showsub(pre,"preinjections","pre")
+ end
+ if post then
+ showsub(post,"postinjections","post")
+ end
+ if replace then
+ showsub(replace,"replaceinjections","replace")
+ end
+ show(n,"emptyinjections",false,"*")
+ end
+ n = getnext(n)
+ end
+ report_injections("end run")
+end
+
+local function show_result(head)
+ local current = head
+ local skipping = false
+ while current do
+ local id = getid(current)
+ if id == glyph_code then
+ report_injections("char: %C, width %p, xoffset %p, yoffset %p",
+ getchar(current),getfield(current,"width"),getfield(current,"xoffset"),getfield(current,"yoffset"))
+ skipping = false
+ elseif id == kern_code then
+ report_injections("kern: %p",getfield(current,"kern"))
+ skipping = false
+ elseif not skipping then
+ report_injections()
+ skipping = true
+ end
+ current = getnext(current)
+ end
+end
+
+-- G +D-pre G
+-- D-post+
+-- +D-replace+
+--
+-- G +D-pre +D-pre
+-- D-post +D-post
+-- +D-replace +D-replace
+
+local function inject_kerns_only(head,where)
+ head = tonut(head)
+ if trace_injections then
+ trace(head,"kerns")
+ end
+ local current = head
+ local prev = nil
+ local next = nil
+ local prevdisc = nil
+ local prevglyph = nil
+ local pre = nil -- saves a lookup
+ local post = nil -- saves a lookup
+ local replace = nil -- saves a lookup
+ local pretail = nil -- saves a lookup
+ local posttail = nil -- saves a lookup
+ local replacetail = nil -- saves a lookup
+ while current do
+ local id = getid(current)
+ local next = getnext(current)
+ if id == glyph_code then
+ if getsubtype(current) < 256 then
+ local p = rawget(properties,current)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ -- left|glyph|right
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(current,"xoffset",leftkern)
+ setfield(current,"xadvance",leftkern)
+ else
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ end
+ end
+ if prevdisc then
+ local done = false
+ if post then
+ -- local i = rawget(p,"postinjections")
+ local i = p.postinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(post,"xadvance",leftkern)
+ else
+ insert_node_after(post,posttail,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ end
+ if replace then
+ -- local i = rawget(p,"replaceinjections")
+ local i = p.replaceinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(replace,"xadvance",leftkern)
+ else
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ else
+ -- local i = rawget(p,"emptyinjections")
+ local i = p.emptyinjections
+ if i then
+ -- glyph|disc|glyph (special case)
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ end
+ prevdisc = nil
+ prevglyph = current
+ elseif id == disc_code then
+ pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
+ local done = false
+ if pre then
+ -- left|pre glyphs|right
+ for n in traverse_char(pre) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"preinjections")
+ local i = p.injections or p.preinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(pre,"xoffset",leftkern)
+ setfield(pre,"xadvance",leftkern)
+ else
+ pre = insert_node_before(pre,n,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ end
+ if post then
+ -- left|post glyphs|right
+ for n in traverse_char(post) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"postinjections")
+ local i = p.injections or p.postinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(post,"xoffset",leftkern)
+ setfield(post,"xadvance",leftkern)
+ else
+ post = insert_node_before(post,n,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ -- left|replace glyphs|right
+ for n in traverse_char(replace) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"replaceinjections")
+ local i = p.injections or p.replaceinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ if use_advance then
+ setfield(replace,"xoffset",leftkern)
+ setfield(replace,"xadvance",leftkern)
+ else
+ replace = insert_node_before(replace,n,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph = nil
+ prevdisc = current
+ else
+ prevglyph = nil
+ prevdisc = nil
+ end
+ prev = current
+ current = next
+ end
+ --
+ if keepregisteredcounts then
+ keepregisteredcounts = false
+ else
+ nofregisteredkerns = 0
+ end
+ return tonode(head), true
+end
+
+local function inject_pairs_only(head,where)
+ head = tonut(head)
+ if trace_injections then
+ trace(head,"pairs")
+ end
+ local current = head
+ local prev = nil
+ local next = nil
+ local prevdisc = nil
+ local prevglyph = nil
+ local pre = nil -- saves a lookup
+ local post = nil -- saves a lookup
+ local replace = nil -- saves a lookup
+ local pretail = nil -- saves a lookup
+ local posttail = nil -- saves a lookup
+ local replacetail = nil -- saves a lookup
+ while current do
+ local id = getid(current)
+ local next = getnext(current)
+ if id == glyph_code then
+ if getsubtype(current) < 256 then
+ local p = rawget(properties,current)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ -- left|glyph|right
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
+ else
+ -- local i = rawget(p,"emptyinjections")
+ local i = p.emptyinjections
+ if i then
+ -- glyph|disc|glyph (special case)
+-- is this okay?
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ if next and getid(next) == disc_code then
+ if replace then
+ -- error, we expect an empty one
+ else
+ setfield(next,"replace",newkern(rightkern)) -- maybe also leftkern
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ local done = false
+ if post then
+ -- local i = rawget(p,"postinjections")
+ local i = p.postinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_after(post,posttail,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ if replace then
+ -- local i = rawget(p,"replaceinjections")
+ local i = p.replaceinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done = true
+ end
+ end
+ else
+ local i = p.emptyinjections
+ if i then
+-- new .. okay?
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ end
+ prevdisc = nil
+ prevglyph = current
+ elseif id == disc_code then
+ pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
+ local done = false
+ if pre then
+ -- left|pre glyphs|right
+ for n in traverse_char(pre) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"preinjections")
+ local i = p.injections or p.preinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ pre = insert_node_before(pre,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(pre,n,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if post then
+ -- left|post glyphs|right
+ for n in traverse_char(post) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"postinjections")
+ local i = p.injections or p.postinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ post = insert_node_before(post,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ -- left|replace glyphs|right
+ for n in traverse_char(replace) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"replaceinjections")
+ local i = p.injections or p.replaceinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ replace = insert_node_before(replace,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p = rawget(properties,prevglyph)
+ if p then
+ -- local i = rawget(p,"preinjections")
+ local i = p.preinjections
+ if i then
+ -- glyph|pre glyphs
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ pre = insert_node_before(pre,pre,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ if replace then
+ local p = rawget(properties,prevglyph)
+ if p then
+ -- local i = rawget(p,"replaceinjections")
+ local i = p.replaceinjections
+ if i then
+ -- glyph|replace glyphs
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ replace = insert_node_before(replace,replace,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph = nil
+ prevdisc = current
+ else
+ prevglyph = nil
+ prevdisc = nil
+ end
+ prev = current
+ current = next
+ end
+ --
+ if keepregisteredcounts then
+ keepregisteredcounts = false
+ else
+ nofregisteredkerns = 0
+ end
+ return tonode(head), true
+end
+
+-- local function showoffset(n,flag)
+-- local ox = getfield(n,"xoffset")
+-- local oy = getfield(n,"yoffset")
+-- if flag then
+-- if ox == 0 then
+-- setcolor(n,oy == 0 and "darkgray" or "darkgreen")
+-- else
+-- setcolor(n,oy == 0 and "darkblue" or "darkred")
+-- end
+-- else
+-- if ox == 0 then
+-- setcolor(n,oy == 0 and "gray" or "green")
+-- else
+-- setcolor(n,oy == 0 and "blue" or "red")
+-- end
+-- end
+-- end
+
+local function showoffset(n,flag)
+ local o = getfield(n,"xoffset")
+ if o == 0 then
+ o = getfield(n,"yoffset")
+ end
+ if o ~= 0 then
+ setcolor(n,flag and "darkred" or "darkgreen")
+ else
+ resetcolor(n)
+ end
+end
+
+local function inject_everything(head,where)
+ head = tonut(head)
+ if trace_injections then
+ trace(head,"everything")
+ end
+ local hascursives = nofregisteredcursives > 0
+ local hasmarks = nofregisteredmarks > 0
+ --
+ local current = head
+ local last = nil
+ local font = font
+ local markdata = nil
+ local prev = nil
+ local next = nil
+ local prevdisc = nil
+ local prevglyph = nil
+ local pre = nil -- saves a lookup
+ local post = nil -- saves a lookup
+ local replace = nil -- saves a lookup
+ local pretail = nil -- saves a lookup
+ local posttail = nil -- saves a lookup
+ local replacetail = nil -- saves a lookup
+ --
+ local cursiveanchor = nil
+ local minc = 0
+ local maxc = 0
+ local glyphs = { }
+ local marks = { }
+ local nofmarks = 0
+ --
+ -- move out
+ --
+ local function processmark(p,n,pn) -- p = basenode
+ local px = getfield(p,"xoffset")
+ local ox = 0
+ local rightkern = nil
+ local pp = rawget(properties,p)
+ if pp then
+ -- pp = rawget(pp,"injections")
+ pp = pp.injections
+ if pp then
+ rightkern = pp.rightkern
+ end
+ end
+ if rightkern then -- x and w ~= 0
+ if pn.markdir < 0 then
+ -- kern(w-x) glyph(p) kern(x) mark(n)
+ ox = px - pn.markx - rightkern
+ -- report_injections("r2l case 1: %p",ox)
+ else
+ -- kern(x) glyph(p) kern(w-x) mark(n)
+ -- ox = px - getfield(p,"width") + pn.markx - pp.leftkern
+ --
+ -- According to Kai we don't need to handle leftkern here but I'm
+ -- pretty sure I've run into a case where it was needed so maybe
+ -- some day we need something more clever here.
+ --
+ if false then
+ -- a mark with kerning
+ local leftkern = pp.leftkern
+ if leftkern then
+ ox = px - pn.markx - leftkern
+ else
+ ox = px - pn.markx
+ end
+ else
+ ox = px - pn.markx
+ end
+ end
+ else
+ -- if pn.markdir < 0 then
+ -- ox = px - pn.markx
+ -- -- report_injections("r2l case 3: %p",ox)
+ -- else
+ -- -- ox = px - getfield(p,"width") + pn.markx
+ ox = px - pn.markx
+ -- report_injections("l2r case 3: %p",ox)
+ -- end
+ local wn = getfield(n,"width") -- in arial marks have widths
+ if wn ~= 0 then
+ -- bad: we should center
+ pn.leftkern = -wn/2
+ pn.rightkern = -wn/2
+ end
+ end
+ local oy = getfield(n,"yoffset") + getfield(p,"yoffset") + pn.marky
+ setfield(n,"xoffset",ox)
+ setfield(n,"yoffset",oy)
+ if trace_marks then
+ showoffset(n,true)
+ end
+ end
+ -- todo: marks in disc
+ while current do
+ local id = getid(current)
+ local next = getnext(current)
+ if id == glyph_code then
+ if getsubtype(current) < 256 then
+ local p = rawget(properties,current)
+ if p then
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ if i then
+ local pm = i.markbasenode
+ if pm then
+ nofmarks = nofmarks + 1
+ marks[nofmarks] = current
+ else
+ if hascursives then
+ local cursivex = i.cursivex
+ if cursivex then
+ if cursiveanchor then
+ if cursivex ~= 0 then
+ i.leftkern = (i.leftkern or 0) + cursivex
+ end
+ if maxc == 0 then
+ minc = 1
+ maxc = 1
+ glyphs[1] = cursiveanchor
+ else
+ maxc = maxc + 1
+ glyphs[maxc] = cursiveanchor
+ end
+ properties[cursiveanchor].cursivedy = i.cursivey -- cursiveprops
+ last = current
+ else
+ maxc = 0
+ end
+ elseif maxc > 0 then
+ local ny = getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ setfield(ti,"yoffset",ny) -- why not add ?
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc = 0
+ cursiveanchor = nil
+ end
+ if i.cursiveanchor then
+ cursiveanchor = current -- no need for both now
+ else
+ if maxc > 0 then
+ local ny = getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ setfield(ti,"yoffset",ny) -- why not add ?
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc = 0
+ end
+ cursiveanchor = nil
+ end
+ end
+ -- left|glyph|right
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
+ end
+ else
+ -- local i = rawget(p,"emptyinjections")
+ local i = p.emptyinjections
+ if i then
+ -- glyph|disc|glyph (special case)
+-- okay?
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ if next and getid(next) == disc_code then
+ if replace then
+ -- error, we expect an empty one
+ else
+ setfield(next,"replace",newkern(rightkern)) -- maybe also leftkern
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ if p then
+ local done = false
+ if post then
+ -- local i = rawget(p,"postinjections")
+ local i = p.postinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_after(post,posttail,newkern(leftkern))
+ done = true
+ end
+ end
+ end
+ if replace then
+ -- local i = rawget(p,"replaceinjections")
+ local i = p.replaceinjections
+ if i then
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done = true
+ end
+ end
+ else
+ -- local i = rawget(p,"emptyinjections")
+ local i = p.emptyinjections
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ setfield(prev,"replace",newkern(leftkern)) -- maybe also leftkern
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ else
+ -- cursive
+ if hascursives and maxc > 0 then
+ local ny = getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ setfield(ti,"yoffset",getfield(ti,"yoffset") + ny) -- can be mark
+ end
+ maxc = 0
+ cursiveanchor = nil
+ end
+ end
+ end
+ prevdisc = nil
+ prevglyph = current
+ elseif id == disc_code then
+ pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
+ local done = false
+ if pre then
+ -- left|pre glyphs|right
+ for n in traverse_char(pre) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"preinjections")
+ local i = p.injections or p.preinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ pre = insert_node_before(pre,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(pre,n,newkern(rightkern))
+ done = true
+ end
+ end
+ if hasmarks then
+ local pm = i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ if post then
+ -- left|post glyphs|right
+ for n in traverse_char(post) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"postinjections")
+ local i = p.injections or p.postinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ post = insert_node_before(post,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done = true
+ end
+ end
+ if hasmarks then
+ local pm = i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ if replace then
+ -- left|replace glyphs|right
+ for n in traverse_char(replace) do
+ local p = rawget(properties,n)
+ if p then
+ -- local i = rawget(p,"injections") or rawget(p,"replaceinjections")
+ local i = p.injections or p.replaceinjections
+ if i then
+ local yoffset = i.yoffset
+ if yoffset and yoffset ~= 0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern = i.leftkern
+ if leftkern and leftkern ~= 0 then
+ replace = insert_node_before(replace,n,newkern(leftkern))
+ done = true
+ end
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done = true
+ end
+ end
+ if hasmarks then
+ local pm = i.markbasenode
+ if pm then
+ processmark(pm,current,i)
+ end
+ end
+ end
+ end
+ end
+ if prevglyph then
+ if pre then
+ local p = rawget(properties,prevglyph)
+ if p then
+ -- local i = rawget(p,"preinjections")
+ local i = p.preinjections
+ if i then
+ -- glyph|pre glyphs
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ pre = insert_node_before(pre,pre,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ if replace then
+ local p = rawget(properties,prevglyph)
+ if p then
+ -- local i = rawget(p,"replaceinjections")
+ local i = p.replaceinjections
+ if i then
+ -- glyph|replace glyphs
+ local rightkern = i.rightkern
+ if rightkern and rightkern ~= 0 then
+ replace = insert_node_before(replace,replace,newkern(rightkern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph = nil
+ prevdisc = current
+ else
+ prevglyph = nil
+ prevdisc = nil
+ end
+ prev = current
+ current = next
+ end
+ -- cursive
+ if hascursives and maxc > 0 then
+ local ny = getfield(last,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti = glyphs[i]
+ ny = ny + properties[ti].cursivedy
+ setfield(ti,"yoffset",ny) -- why not add ?
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ end
+ --
+ if nofmarks > 0 then
+ for i=1,nofmarks do
+ local m = marks[i]
+ local p = rawget(properties,m)
+ -- local i = rawget(p,"injections")
+ local i = p.injections
+ local b = i.markbasenode
+ processmark(b,m,i)
+ end
+ elseif hasmarks then
+ -- sometyhing bad happened
+ end
+ --
+ if keepregisteredcounts then
+ keepregisteredcounts = false
+ else
+ nofregisteredkerns = 0
+ nofregisteredpairs = 0
+ nofregisteredmarks = 0
+ nofregisteredcursives = 0
+ end
+ return tonode(head), true
+end
+
+-- space triggers
+
+local triggers = false
+
+function nodes.injections.setspacekerns(font,sequence)
+ if triggers then
+ triggers[font] = sequence
+ else
+ triggers = { [font] = sequence }
+ end
+end
+
+local function injectspaces(head)
+
+ if not triggers then
+ return head, false
+ end
+
+ local lastfont = nil
+ local spacekerns = nil
+ local leftkerns = nil
+ local rightkerns = nil
+ local factor = 0
+ local threshold = 0
+ local leftkern = false
+ local rightkern = false
+
+ local function updatefont(font,trig)
+ -- local resources = resources[font]
+ -- local spacekerns = resources.spacekerns
+ -- if spacekerns then
+ -- leftkerns = spacekerns.left
+ -- rightkerns = spacekerns.right
+ -- end
+ leftkerns = trig.left
+ rightkerns = trig.right
+ local par = parameters[font]
+ factor = par.factor
+ threshold = par.spacing.width - 1 -- get rid of rounding errors
+ lastfont = font
+ end
+
+ for n in traverse_id(glue_code,tonut(head)) do
+ local prev, next = getboth(n)
+ local prevchar = ischar(prev)
+ local nextchar = ischar(next)
+ if nextchar then
+ local font = getfont(next)
+ local trig = triggers[font]
+ if trig then
+ if lastfont ~= font then
+ updatefont(font,trig)
+ end
+ if rightkerns then
+ rightkern = rightkerns[nextchar]
+ end
+ end
+ end
+ if prevchar then
+ local font = getfont(next)
+ local trig = triggers[font]
+ if trig then
+ if lastfont ~= font then
+ updatefont(font,trig)
+ end
+ if leftkerns then
+ leftkern = leftkerns[prevchar]
+ end
+ end
+ end
+ if leftkern then
+ local old = getfield(n,"width")
+ if old >= threshold then
+ if rightkern then
+ local new = old + (leftkern + rightkern) * factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p] %C",prevchar,old,new,nextchar)
+ end
+ setfield(n,"width",new)
+ leftkern = false
+ else
+ local new = old + leftkern * factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p]",prevchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ end
+ leftkern = false
+ elseif rightkern then
+ local old = getfield(n,"width")
+ if old >= threshold then
+ local new = old + rightkern * factor
+ if trace_spaces then
+ report_spaces("[%p -> %p] %C",nextchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ rightkern = false
+ end
+ end
+
+ triggers = false
+ return head, true
+end
+
+--
+
+function injections.handler(head,where)
+ if triggers then
+ head = injectspaces(head)
+ end
+ if nofregisteredmarks > 0 or nofregisteredcursives > 0 then
+ return inject_everything(head,where)
+ elseif nofregisteredpairs > 0 then
+ return inject_pairs_only(head,where)
+ elseif nofregisteredkerns > 0 then
+ return inject_kerns_only(head,where)
+ else
+ return head, false
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-otl.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otl.lua
new file mode 100644
index 00000000000..bcea2752015
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otl.lua
@@ -0,0 +1,839 @@
+if not modules then modules = { } end modules ['font-otl'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- After some experimenting with an alternative loader (one that is needed for
+-- getting outlines in mp) I decided not to be compatible with the old (built-in)
+-- one. The approach used in font-otn is as follows: we load the font in a compact
+-- format but still very compatible with the ff data structures. From there we
+-- create hashes to access the data efficiently. The implementation of feature
+-- processing is mostly based on looking at the data as organized in the glyphs and
+-- lookups as well as the specification. Keeping the lookup data in the glyphs is
+-- very instructive and handy for tracing. On the other hand hashing is what brings
+-- speed. So, the in the new approach (the old one will stay around too) we no
+-- longer keep data in the glyphs which saves us a (what in retrospect looks a bit
+-- like) a reconstruction step. It also means that the data format of the cached
+-- files changes. What method is used depends on that format. There is no fundamental
+-- change in processing, and not even in data organation. Most has to do with
+-- loading and storage.
+
+-- todo: less tounicodes
+
+local gmatch, find, match, lower, strip = string.gmatch, string.find, string.match, string.lower, string.strip
+local type, next, tonumber, tostring, unpack = type, next, tonumber, tostring, unpack
+local abs = math.abs
+local ioflush = io.flush
+local derivetable = table.derive
+local formatters = string.formatters
+
+local setmetatableindex = table.setmetatableindex
+local allocate = utilities.storage.allocate
+local registertracker = trackers.register
+local registerdirective = directives.register
+local starttiming = statistics.starttiming
+local stoptiming = statistics.stoptiming
+local elapsedtime = statistics.elapsedtime
+local findbinfile = resolvers.findbinfile
+
+----- trace_private = false registertracker("otf.private", function(v) trace_private = v end)
+----- trace_subfonts = false registertracker("otf.subfonts", function(v) trace_subfonts = v end)
+local trace_loading = false registertracker("otf.loading", function(v) trace_loading = v end)
+local trace_features = false registertracker("otf.features", function(v) trace_features = v end)
+----- trace_dynamics = false registertracker("otf.dynamics", function(v) trace_dynamics = v end)
+----- trace_sequences = false registertracker("otf.sequences", function(v) trace_sequences = v end)
+----- trace_markwidth = false registertracker("otf.markwidth", function(v) trace_markwidth = v end)
+local trace_defining = false registertracker("fonts.defining", function(v) trace_defining = v end)
+
+local report_otf = logs.reporter("fonts","otf loading")
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+
+otf.version = 3.018 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.cache = containers.define("fonts", "otl", otf.version, true)
+
+local otfreaders = otf.readers
+
+local hashes = fonts.hashes
+local definers = fonts.definers
+local readers = fonts.readers
+local constructors = fonts.constructors
+
+local otffeatures = constructors.newfeatures("otf")
+local registerotffeature = otffeatures.register
+
+local enhancers = allocate()
+otf.enhancers = enhancers
+local patches = { }
+enhancers.patches = patches
+
+local forceload = false
+local cleanup = 0 -- mk: 0=885M 1=765M 2=735M (regular run 730M)
+local syncspace = true
+local forcenotdef = false
+
+local applyruntimefixes = fonts.treatments and fonts.treatments.applyfixes
+
+local wildcard = "*"
+local default = "dflt"
+
+local formats = fonts.formats
+
+formats.otf = "opentype"
+formats.ttf = "truetype"
+formats.ttc = "truetype"
+
+registerdirective("fonts.otf.loader.cleanup", function(v) cleanup = tonumber(v) or (v and 1) or 0 end)
+registerdirective("fonts.otf.loader.force", function(v) forceload = v end)
+registerdirective("fonts.otf.loader.syncspace", function(v) syncspace = v end)
+registerdirective("fonts.otf.loader.forcenotdef", function(v) forcenotdef = v end)
+
+-- local function load_featurefile(raw,featurefile)
+-- if featurefile and featurefile ~= "" then
+-- if trace_loading then
+-- report_otf("using featurefile %a", featurefile)
+-- end
+-- -- TODO: apply_featurefile(raw, featurefile)
+-- end
+-- end
+
+local ordered_enhancers = {
+ "check extra features",
+}
+
+local actions = allocate()
+local before = allocate()
+local after = allocate()
+
+patches.before = before
+patches.after = after
+
+local function enhance(name,data,filename,raw)
+ local enhancer = actions[name]
+ if enhancer then
+ if trace_loading then
+ report_otf("apply enhancement %a to file %a",name,filename)
+ ioflush()
+ end
+ enhancer(data,filename,raw)
+ else
+ -- no message as we can have private ones
+ end
+end
+
+function enhancers.apply(data,filename,raw)
+ local basename = file.basename(lower(filename))
+ if trace_loading then
+ report_otf("%s enhancing file %a","start",filename)
+ end
+ ioflush() -- we want instant messages
+ for e=1,#ordered_enhancers do
+ local enhancer = ordered_enhancers[e]
+ local b = before[enhancer]
+ if b then
+ for pattern, action in next, b do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ enhance(enhancer,data,filename,raw)
+ local a = after[enhancer]
+ if a then
+ for pattern, action in next, a do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
+ end
+ end
+ ioflush() -- we want instant messages
+ end
+ if trace_loading then
+ report_otf("%s enhancing file %a","stop",filename)
+ end
+ ioflush() -- we want instant messages
+end
+
+-- patches.register("before","migrate metadata","cambria",function() end)
+
+function patches.register(what,where,pattern,action)
+ local pw = patches[what]
+ if pw then
+ local ww = pw[where]
+ if ww then
+ ww[pattern] = action
+ else
+ pw[where] = { [pattern] = action}
+ end
+ end
+end
+
+function patches.report(fmt,...)
+ if trace_loading then
+ report_otf("patching: %s",formatters[fmt](...))
+ end
+end
+
+function enhancers.register(what,action) -- only already registered can be overloaded
+ actions[what] = action
+end
+
+function otf.load(filename,sub,featurefile) -- second argument (format) is gone !
+ --
+ local featurefile = nil -- not supported (yet)
+ --
+ local base = file.basename(file.removesuffix(filename))
+ local name = file.removesuffix(base)
+ local attr = lfs.attributes(filename)
+ local size = attr and attr.size or 0
+ local time = attr and attr.modification or 0
+ if featurefile then
+ name = name .. "@" .. file.removesuffix(file.basename(featurefile))
+ end
+ -- sub can be number of string
+ if sub == "" then
+ sub = false
+ end
+ local hash = name
+ if sub then
+ hash = hash .. "-" .. sub
+ end
+ hash = containers.cleanname(hash)
+ local featurefiles
+ if featurefile then
+ featurefiles = { }
+ for s in gmatch(featurefile,"[^,]+") do
+ local name = resolvers.findfile(file.addsuffix(s,'fea'),'fea') or ""
+ if name == "" then
+ report_otf("loading error, no featurefile %a",s)
+ else
+ local attr = lfs.attributes(name)
+ featurefiles[#featurefiles+1] = {
+ name = name,
+ size = attr and attr.size or 0,
+ time = attr and attr.modification or 0,
+ }
+ end
+ end
+ if #featurefiles == 0 then
+ featurefiles = nil
+ end
+ end
+ local data = containers.read(otf.cache,hash)
+ local reload = not data or data.size ~= size or data.time ~= time or data.tableversion ~= otfreaders.tableversion
+ if forceload then
+ report_otf("forced reload of %a due to hard coded flag",filename)
+ reload = true
+ end
+ -- if not reload then
+ -- local featuredata = data.featuredata
+ -- if featurefiles then
+ -- if not featuredata or #featuredata ~= #featurefiles then
+ -- reload = true
+ -- else
+ -- for i=1,#featurefiles do
+ -- local fi, fd = featurefiles[i], featuredata[i]
+ -- if fi.name ~= fd.name or fi.size ~= fd.size or fi.time ~= fd.time then
+ -- reload = true
+ -- break
+ -- end
+ -- end
+ -- end
+ -- elseif featuredata then
+ -- reload = true
+ -- end
+ -- if reload then
+ -- report_otf("loading: forced reload due to changed featurefile specification %a",featurefile)
+ -- end
+ -- end
+ if reload then
+ report_otf("loading %a, hash %a",filename,hash)
+ --
+ starttiming(otfreaders)
+ data = otfreaders.loadfont(filename,sub or 1) -- we can pass the number instead (if it comes from a name search)
+ --
+ -- if featurefiles then
+ -- for i=1,#featurefiles do
+ -- load_featurefile(data,featurefiles[i].name)
+ -- end
+ -- end
+ --
+ --
+ if data then
+ otfreaders.compact(data)
+ otfreaders.rehash(data,"unicodes")
+ otfreaders.addunicodetable(data)
+ otfreaders.extend(data)
+ otfreaders.pack(data)
+ report_otf("loading done")
+ report_otf("saving %a in cache",filename)
+ data = containers.write(otf.cache, hash, data)
+ if cleanup > 1 then
+ collectgarbage("collect")
+ end
+ stoptiming(otfreaders)
+ if elapsedtime then -- not in generic
+ report_otf("loading, optimizing, packing and caching time %s", elapsedtime(otfreaders))
+ end
+ if cleanup > 3 then
+ collectgarbage("collect")
+ end
+ data = containers.read(otf.cache,hash) -- this frees the old table and load the sparse one
+ if cleanup > 2 then
+ collectgarbage("collect")
+ end
+ else
+ data = nil
+ report_otf("loading failed due to read error")
+ end
+ end
+ if data then
+ if trace_defining then
+ report_otf("loading from cache using hash %a",hash)
+ end
+ --
+ otfreaders.unpack(data)
+ otfreaders.expand(data) -- inline tables
+ otfreaders.addunicodetable(data) -- only when not done yet
+ --
+ enhancers.apply(data,filename,data)
+ --
+ constructors.addcoreunicodes(unicodes)
+ --
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
+ end
+ --
+ data.metadata.math = data.resources.mathconstants
+ end
+
+
+ return data
+end
+
+-- modes: node, base, none
+
+function otf.setfeatures(tfmdata,features)
+ local okay = constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf)
+ if okay then
+ return constructors.collectprocessors("otf",tfmdata,features,trace_features,report_otf)
+ else
+ return { } -- will become false
+ end
+end
+
+-- the first version made a top/mid/not extensible table, now we just
+-- pass on the variants data and deal with it in the tfm scaler (there
+-- is no longer an extensible table anyway)
+--
+-- we cannot share descriptions as virtual fonts might extend them (ok,
+-- we could use a cache with a hash
+--
+-- we already assign an empty table to characters as we can add for
+-- instance protruding info and loop over characters; one is not supposed
+-- to change descriptions and if one does so one should make a copy!
+
+local function copytotfm(data,cache_id)
+ if data then
+ local metadata = data.metadata
+ local resources = data.resources
+ local properties = derivetable(data.properties)
+ local descriptions = derivetable(data.descriptions)
+ local goodies = derivetable(data.goodies)
+ local characters = { }
+ local parameters = { }
+ local mathparameters = { }
+ --
+ local resources = data.resources
+ local unicodes = resources.unicodes
+ local spaceunits = 500
+ local spacer = "space"
+ local designsize = metadata.designsize or 100
+ local minsize = metadata.minsize or designsize
+ local maxsize = metadata.maxsize or designsize
+ local mathspecs = metadata.math
+ --
+ if designsize == 0 then
+ designsize = 100
+ minsize = 100
+ maxsize = 100
+ end
+ if mathspecs then
+ for name, value in next, mathspecs do
+ mathparameters[name] = value
+ end
+ end
+ for unicode in next, data.descriptions do -- use parent table
+ characters[unicode] = { }
+ end
+ if mathspecs then
+ for unicode, character in next, characters do
+ local d = descriptions[unicode]
+ local m = d.math
+ if m then
+ -- watch out: luatex uses horiz_variants for the parts
+ --
+ local italic = m.italic
+ local vitalic = m.vitalic
+ --
+ local variants = m.hvariants
+ local parts = m.hparts
+ if variants then
+ local c = character
+ for i=1,#variants do
+ -- local un = variants[i].glyph
+ local un = variants[i]
+ c.next = un
+ c = characters[un]
+ end -- c is now last in chain
+ c.horiz_variants = parts
+ elseif parts then
+ character.horiz_variants = parts
+ italic = m.hitalic
+ end
+ --
+ local variants = m.vvariants
+ local parts = m.vparts
+ if variants then
+ local c = character
+ for i=1,#variants do
+ -- local un = variants[i].glyph
+ local un = variants[i]
+ c.next = un
+ c = characters[un]
+ end -- c is now last in chain
+ c.vert_variants = parts
+ elseif parts then
+ character.vert_variants = parts
+ end
+ --
+ if italic and italic ~= 0 then
+ character.italic = italic
+ end
+ --
+ if vitalic and vitalic ~= 0 then
+ character.vert_italic = vitalic
+ end
+ --
+ local accent = m.accent -- taccent?
+ if accent then
+ character.accent = accent
+ end
+ --
+ local kerns = m.kerns
+ if kerns then
+ character.mathkerns = kerns
+ end
+ end
+ end
+ end
+ -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't
+ -- we use the basename then?)
+ local filename = constructors.checkedfilename(resources)
+ local fontname = metadata.fontname
+ local fullname = metadata.fullname or fontname
+ local psname = fontname or fullname
+ local units = metadata.units or 1000
+ --
+ if units == 0 then -- catch bugs in fonts
+ units = 1000 -- maybe 2000 when ttf
+ metadata.units = 1000
+ report_otf("changing %a units to %a",0,units)
+ end
+ --
+ local monospaced = metadata.monospaced
+ local charwidth = metadata.averagewidth -- or unset
+ local charxheight = metadata.xheight -- or unset
+ local italicangle = metadata.italicangle
+ local hasitalics = metadata.hasitalics
+ properties.monospaced = monospaced
+ properties.hasitalics = hasitalics
+ parameters.italicangle = italicangle
+ parameters.charwidth = charwidth
+ parameters.charxheight = charxheight
+ --
+ local space = 0x0020
+ local emdash = 0x2014
+ if monospaced then
+ if descriptions[space] then
+ spaceunits, spacer = descriptions[space].width, "space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits, spacer = descriptions[emdash].width, "emdash"
+ end
+ if not spaceunits and charwidth then
+ spaceunits, spacer = charwidth, "charwidth"
+ end
+ else
+ if descriptions[space] then
+ spaceunits, spacer = descriptions[space].width, "space"
+ end
+ if not spaceunits and descriptions[emdash] then
+ spaceunits, spacer = descriptions[emdash].width/2, "emdash/2"
+ end
+ if not spaceunits and charwidth then
+ spaceunits, spacer = charwidth, "charwidth"
+ end
+ end
+ spaceunits = tonumber(spaceunits) or 500 -- brrr
+ --
+ parameters.slant = 0
+ parameters.space = spaceunits -- 3.333 (cmr10)
+ parameters.space_stretch = 1*units/2 -- 500 -- 1.666 (cmr10)
+ parameters.space_shrink = 1*units/3 -- 333 -- 1.111 (cmr10)
+ parameters.x_height = 2*units/5 -- 400
+ parameters.quad = units -- 1000
+ if spaceunits < 2*units/5 then
+ -- todo: warning
+ end
+ if italicangle and italicangle ~= 0 then
+ parameters.italicangle = italicangle
+ parameters.italicfactor = math.cos(math.rad(90+italicangle))
+ parameters.slant = - math.tan(italicangle*math.pi/180)
+ end
+ if monospaced then
+ parameters.space_stretch = 0
+ parameters.space_shrink = 0
+ elseif syncspace then --
+ parameters.space_stretch = spaceunits/2
+ parameters.space_shrink = spaceunits/3
+ end
+ parameters.extra_space = parameters.space_shrink -- 1.111 (cmr10)
+ if charxheight then
+ parameters.x_height = charxheight
+ else
+ local x = 0x0078
+ if x then
+ local x = descriptions[x]
+ if x then
+ parameters.x_height = x.height
+ end
+ end
+ end
+ --
+ parameters.designsize = (designsize/10)*65536
+ parameters.minsize = (minsize /10)*65536
+ parameters.maxsize = (maxsize /10)*65536
+ parameters.ascender = abs(metadata.ascender or 0)
+ parameters.descender = abs(metadata.descender or 0)
+ parameters.units = units
+ --
+ properties.space = spacer
+ properties.encodingbytes = 2
+ properties.format = data.format or formats.otf
+ properties.noglyphnames = true
+ properties.filename = filename
+ properties.fontname = fontname
+ properties.fullname = fullname
+ properties.psname = psname
+ properties.name = filename or fullname
+ --
+ -- properties.name = specification.name
+ -- properties.sub = specification.sub
+ --
+ return {
+ characters = characters,
+ descriptions = descriptions,
+ parameters = parameters,
+ mathparameters = mathparameters,
+ resources = resources,
+ properties = properties,
+ goodies = goodies,
+ }
+ end
+end
+
+local function otftotfm(specification)
+ local cache_id = specification.hash
+ local tfmdata = containers.read(constructors.cache,cache_id)
+ if not tfmdata then
+ local name = specification.name
+ local sub = specification.sub
+ local subindex = specification.subindex
+ local filename = specification.filename
+ local features = specification.features.normal
+ local rawdata = otf.load(filename,sub,features and features.featurefile)
+ if rawdata and next(rawdata) then
+ local descriptions = rawdata.descriptions
+ rawdata.lookuphash = { } -- to be done
+ tfmdata = copytotfm(rawdata,cache_id)
+ if tfmdata and next(tfmdata) then
+ -- at this moment no characters are assigned yet, only empty slots
+ local features = constructors.checkedfeatures("otf",features)
+ local shared = tfmdata.shared
+ if not shared then
+ shared = { }
+ tfmdata.shared = shared
+ end
+ shared.rawdata = rawdata
+ -- shared.features = features -- default
+ shared.dynamics = { }
+ -- shared.processes = { }
+ tfmdata.changed = { }
+ shared.features = features
+ shared.processes = otf.setfeatures(tfmdata,features)
+ end
+ end
+ containers.write(constructors.cache,cache_id,tfmdata)
+ end
+ return tfmdata
+end
+
+local function read_from_otf(specification)
+ local tfmdata = otftotfm(specification)
+ if tfmdata then
+ -- this late ? .. needs checking
+ tfmdata.properties.name = specification.name
+ tfmdata.properties.sub = specification.sub
+ --
+ tfmdata = constructors.scale(tfmdata,specification)
+ local allfeatures = tfmdata.shared.features or specification.features.normal
+ constructors.applymanipulators("otf",tfmdata,allfeatures,trace_features,report_otf)
+ constructors.setname(tfmdata,specification) -- only otf?
+ fonts.loggers.register(tfmdata,file.suffix(specification.filename),specification)
+ end
+ return tfmdata
+end
+
+local function checkmathsize(tfmdata,mathsize)
+ local mathdata = tfmdata.shared.rawdata.metadata.math
+ local mathsize = tonumber(mathsize)
+ if mathdata then -- we cannot use mathparameters as luatex will complain
+ local parameters = tfmdata.parameters
+ parameters.scriptpercentage = mathdata.ScriptPercentScaleDown
+ parameters.scriptscriptpercentage = mathdata.ScriptScriptPercentScaleDown
+ parameters.mathsize = mathsize
+ end
+end
+
+registerotffeature {
+ name = "mathsize",
+ description = "apply mathsize specified in the font",
+ initializers = {
+ base = checkmathsize,
+ node = checkmathsize,
+ }
+}
+
+-- readers
+
+function otf.collectlookups(rawdata,kind,script,language)
+ if not kind then
+ return
+ end
+ if not script then
+ script = default
+ end
+ if not language then
+ language = default
+ end
+ local lookupcache = rawdata.lookupcache
+ if not lookupcache then
+ lookupcache = { }
+ rawdata.lookupcache = lookupcache
+ end
+ local kindlookup = lookupcache[kind]
+ if not kindlookup then
+ kindlookup = { }
+ lookupcache[kind] = kindlookup
+ end
+ local scriptlookup = kindlookup[script]
+ if not scriptlookup then
+ scriptlookup = { }
+ kindlookup[script] = scriptlookup
+ end
+ local languagelookup = scriptlookup[language]
+ if not languagelookup then
+ local sequences = rawdata.resources.sequences
+ local featuremap = { }
+ local featurelist = { }
+ if sequences then
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local features = sequence.features
+ if features then
+ features = features[kind]
+ if features then
+ -- features = features[script] or features[default] or features[wildcard]
+ features = features[script] or features[wildcard]
+ if features then
+ -- features = features[language] or features[default] or features[wildcard]
+ features = features[language] or features[wildcard]
+ if features then
+ if not featuremap[sequence] then
+ featuremap[sequence] = true
+ featurelist[#featurelist+1] = sequence
+ end
+ end
+ end
+ end
+ end
+ end
+ if #featurelist == 0 then
+ featuremap, featurelist = false, false
+ end
+ else
+ featuremap, featurelist = false, false
+ end
+ languagelookup = { featuremap, featurelist }
+ scriptlookup[language] = languagelookup
+ end
+ return unpack(languagelookup)
+end
+
+-- moved from font-oth.lua, todo: also afm
+
+local function getgsub(tfmdata,k,kind,value)
+ local shared = tfmdata.shared
+ local rawdata = shared and shared.rawdata
+ if rawdata then
+ local sequences = rawdata.resources.sequences
+ if sequences then
+ local properties = tfmdata.properties
+ local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ local choice = tonumber(value) or 1 -- no random here (yet)
+ for i=1,#lookuplist do
+ local lookup = lookuplist[i]
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ for i=1,nofsteps do
+ local coverage = steps[i].coverage
+ if coverage then
+ local found = coverage[k]
+ if found then
+ return found, lookup.type
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+otf.getgsub = getgsub -- returns value, gsub_kind
+
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found, kind = getgsub(tfmdata,k,kind)
+ if not found then
+ --
+ elseif kind == "gsub_single" then
+ return found
+ elseif kind == "gsub_alternate" then
+ local choice = tonumber(value) or 1 -- no random here (yet)
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+
+otf.getalternate = otf.getsubstitution
+
+function otf.getmultiple(tfmdata,k,kind)
+ local found, kind = getgsub(tfmdata,k,kind)
+ if found and kind == "gsub_multiple" then
+ return found
+ end
+ return { k }
+end
+
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns = getgsub(tfmdata,left,kind or "kern",true) -- for now we use getsub
+ if kerns then
+ local found = kerns[right]
+ local kind = type(found)
+ if kind == "table" then
+ found = found[1][3] -- can be more clever
+ elseif kind ~= "number" then
+ found = false
+ end
+ if found then
+ return found * tfmdata.parameters.factor
+ end
+ end
+ return 0
+end
+
+local function check_otf(forced,specification,suffix)
+ local name = specification.name
+ if forced then
+ name = specification.forcedname -- messy
+ end
+ local fullname = findbinfile(name,suffix) or ""
+ if fullname == "" then
+ fullname = fonts.names.getfilename(name,suffix) or ""
+ end
+ if fullname ~= "" and not fonts.names.ignoredfile(fullname) then
+ specification.filename = fullname
+ return read_from_otf(specification)
+ end
+end
+
+local function opentypereader(specification,suffix)
+ local forced = specification.forced or ""
+ if formats[forced] then
+ return check_otf(true,specification,forced)
+ else
+ return check_otf(false,specification,suffix)
+ end
+end
+
+readers.opentype = opentypereader -- kind of useless and obsolete
+
+function readers.otf (specification) return opentypereader(specification,"otf") end
+function readers.ttf (specification) return opentypereader(specification,"ttf") end
+function readers.ttc (specification) return opentypereader(specification,"ttf") end
+
+-- this will be overloaded
+
+function otf.scriptandlanguage(tfmdata,attr)
+ local properties = tfmdata.properties
+ return properties.script or "dflt", properties.language or "dflt"
+end
+
+-- a little bit of abstraction
+
+local function justset(coverage,unicode,replacement)
+ coverage[unicode] = replacement
+end
+
+otf.coverup = {
+ stepkey = "steps",
+ actions = {
+ chainsubstitution = justset,
+ chainposition = justset,
+ substitution = justset,
+ alternate = justset,
+ multiple = justset,
+ kern = justset,
+ pair = justset,
+ ligature = function(coverage,unicode,ligature)
+ local first = ligature[1]
+ local tree = coverage[first]
+ if not tree then
+ tree = { }
+ coverage[first] = tree
+ end
+ for i=2,#ligature do
+ local l = ligature[i]
+ local t = tree[l]
+ if not t then
+ t = { }
+ tree[l] = t
+ end
+ tree = t
+ end
+ tree.ligature = unicode
+ end,
+ },
+ register = function(coverage,featuretype,format)
+ return {
+ format = format,
+ coverage = coverage,
+ }
+ end
+}
diff --git a/Master/texmf-dist/tex/context/base/font-otn.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otn.lua
index b1bd4530478..1c17e889de0 100644
--- a/Master/texmf-dist/tex/context/base/font-otn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otn.lua
@@ -6,12 +6,16 @@ if not modules then modules = { } end modules ['font-otn'] = {
license = "see context related readme files",
}
--- todo: looks like we have a leak somewhere (probably in ligatures)
--- todo: copy attributes to disc
-
-- this is a context version which can contain experimental code, but when we
-- have serious patches we also need to change the other two font-otn files
+-- at some point i might decide to convert the whole list into a table and then
+-- run over that instead (but it has some drawbacks as we also need to deal with
+-- attributes and such so we need to keep a lot of track - which is why i rejected
+-- that method - although it has become a bit easier in the meantime so it might
+-- become an alternative (by that time i probably have gone completely lua) .. the
+-- usual chicken-egg issues ... maybe mkix as it's no real tex any more then
+
-- preprocessors = { "nodes" }
-- anchor class : mark, mkmk, curs, mklg (todo)
@@ -76,9 +80,12 @@ is currently acceptable. Not all functions are implemented yet, often because I
lack the fonts for testing. Many scripts are not yet supported either, but I will
look into them as soon as <l n='context'/> users ask for it.</p>
-<p>Because there are different interpretations possible, I will extend the code
-with more (configureable) variants. I can also add hooks for users so that they can
-write their own extensions.</p>
+<p>The specification leaves room for interpretation. In case of doubt the microsoft
+implementation is the reference as it is the most complete one. As they deal with
+lots of scripts and fonts, Kai and Ivo did a lot of testing of the generic code and
+their suggestions help improve the code. I'm aware that not all border cases can be
+taken care of, unless we accept excessive runtime, and even then the interference
+with other mechanisms (like hyphenation) are not trivial.</p>
<p>Glyphs are indexed not by unicode but in their own way. This is because there is no
relationship with unicode at all, apart from the fact that a font might cover certain
@@ -105,12 +112,12 @@ when there's a fix in the <l n='fontforge'/> library or <l n='lua'/> code that
results in different tables.</p>
--ldx]]--
--- action handler chainproc chainmore comment
+-- action handler chainproc
--
--- gsub_single ok ok ok
--- gsub_multiple ok ok not implemented yet
--- gsub_alternate ok ok not implemented yet
--- gsub_ligature ok ok ok
+-- gsub_single ok ok
+-- gsub_multiple ok ok
+-- gsub_alternate ok ok
+-- gsub_ligature ok ok
-- gsub_context ok --
-- gsub_contextchain ok --
-- gsub_reversecontextchain ok --
@@ -125,7 +132,7 @@ results in different tables.</p>
-- gpos_context ok --
-- gpos_contextchain ok --
--
--- todo: contextpos and contextsub and class stuff
+-- todo: contextpos
--
-- actions:
--
@@ -175,13 +182,11 @@ local trace_discruns = false registertracker("otf.discruns", function(v
local trace_compruns = false registertracker("otf.compruns", function(v) trace_compruns = v end)
local quit_on_no_replacement = true -- maybe per font
-local check_discretionaries = true -- "trace"
local zwnjruns = true
registerdirective("otf.zwnjruns", function(v) zwnjruns = v end)
registerdirective("otf.chain.quitonnoreplacement",function(value) quit_on_no_replacement = value end)
-
local report_direct = logs.reporter("fonts","otf direct")
local report_subchain = logs.reporter("fonts","otf subchain")
local report_chain = logs.reporter("fonts","otf chain")
@@ -207,7 +212,9 @@ local tonut = nuts.tonut
local getfield = nuts.getfield
local setfield = nuts.setfield
local getnext = nuts.getnext
+local setnext = nuts.setnext
local getprev = nuts.getprev
+local setprev = nuts.setprev
local getid = nuts.getid
local getattr = nuts.getattr
local setattr = nuts.setattr
@@ -215,7 +222,9 @@ local getprop = nuts.getprop
local setprop = nuts.setprop
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
+local setsubtype = nuts.setsubtype
local getchar = nuts.getchar
+local setchar = nuts.setchar
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
@@ -238,23 +247,17 @@ local wildcard = "*"
local default = "dflt"
local nodecodes = nodes.nodecodes
-local whatcodes = nodes.whatcodes
local glyphcodes = nodes.glyphcodes
local disccodes = nodes.disccodes
local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
local disc_code = nodecodes.disc
-local whatsit_code = nodecodes.whatsit
local math_code = nodecodes.math
-
-local dir_code = whatcodes.dir
-local localpar_code = whatcodes.localpar
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
local discretionary_code = disccodes.discretionary
-local regular_code = disccodes.regular
-local automatic_code = disccodes.automatic
-
local ligature_code = glyphcodes.ligature
local privateattribute = attributes.private
@@ -306,7 +309,14 @@ local handlers = { }
local rlmode = 0
local featurevalue = false
--- head is always a whatsit so we can safely assume that head is not changed
+local sweephead = { }
+local sweepnode = nil
+local sweepprev = nil
+local sweepnext = nil
+
+local notmatchpre = { }
+local notmatchpost = { }
+local notmatchreplace = { }
-- we use this for special testing and documentation
@@ -396,50 +406,64 @@ local function copy_glyph(g) -- next and prev are untouched !
end
end
--- temp here (context)
-
-local function collapse_disc(start,next)
- local replace1 = getfield(start,"replace")
- local replace2 = getfield(next,"replace")
- if replace1 and replace2 then
- local pre2 = getfield(next,"pre")
- local post2 = getfield(next,"post")
- setfield(replace1,"prev",nil)
- if pre2 then
- local pre1 = getfield(start,"pre")
- if pre1 then
- flush_node_list(pre1)
+local function flattendisk(head,disc)
+ local replace = getfield(disc,"replace")
+ setfield(disc,"replace",nil)
+ free_node(disc)
+ if head == disc then
+ local next = getnext(disc)
+ if replace then
+ if next then
+ local tail = find_node_tail(replace)
+ setnext(tail,next)
+ setprev(next,tail)
end
- local pre1 = copy_node_list(replace1)
- local tail1 = find_node_tail(pre1)
- setfield(tail1,"next",pre2)
- setfield(pre2,"prev",tail1)
- setfield(start,"pre",pre1)
- setfield(next,"pre",nil)
+ return replace, replace
+ elseif next then
+ return next, next
else
- setfield(start,"pre",nil)
+ return -- maybe warning
end
- if post2 then
- local post1 = getfield(start,"post")
- if post1 then
- flush_node_list(post1)
+ else
+ local next = getnext(disc)
+ local prev = getprev(disc)
+ if replace then
+ local tail = find_node_tail(replace)
+ if next then
+ setnext(tail,next)
+ setprev(next,tail)
end
- setfield(start,"post",post2)
+ setnext(prev,replace)
+ setprev(replace,prev)
+ return head, replace
else
- setfield(start,"post",nil)
- end
- local tail1 = find_node_tail(replace1)
- setfield(tail1,"next",replace2)
- setfield(replace2,"prev",tail1)
- setfield(start,"replace",replace1)
- setfield(next,"replace",nil)
- --
- local nextnext = getnext(next)
- setfield(nextnext,"prev",start)
- setfield(start,"next",nextnext)
- free_node(next)
+ if next then
+ setprev(next,prev)
+ end
+ setnext(prev,next)
+ return head, next
+ end
+ end
+end
+
+local function appenddisc(disc,list)
+ local post = getfield(disc,"post")
+ local replace = getfield(disc,"replace")
+ local phead = list
+ local rhead = copy_node_list(list)
+ local ptail = find_node_tail(post)
+ local rtail = find_node_tail(replace)
+ if post then
+ setnext(ptail,phead)
+ setprev(phead,ptail)
else
- -- maybe remove it
+ setfield(disc,"post",phead)
+ end
+ if replace then
+ setnext(rtail,rhead)
+ setprev(rhead,rtail)
+ else
+ setfield(disc,"replace",rhead)
end
end
@@ -451,24 +475,24 @@ local function markstoligature(kind,lookupname,head,start,stop,char)
else
local prev = getprev(start)
local next = getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
+ setprev(start,nil)
+ setnext(stop,nil)
local base = copy_glyph(start)
if head == start then
head = base
end
resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
setfield(base,"components",start)
if prev then
- setfield(prev,"next",base)
+ setnext(prev,base)
end
if next then
- setfield(next,"prev",base)
+ setprev(next,base)
end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
+ setnext(base,next)
+ setprev(base,prev)
return head, base
end
end
@@ -480,8 +504,8 @@ end
-- iteration this becomes a KAF-LAM-ALEF with a SHADDA on the second and a FATHA on the
-- third component.
-local function getcomponentindex(start)
- if getid(start) ~= glyph_code then
+local function getcomponentindex(start) -- we could store this offset in the glyph (nofcomponents)
+ if getid(start) ~= glyph_code then -- and then get rid of all components
return 0
elseif getsubtype(start) == ligature_code then
local i = 0
@@ -498,69 +522,7 @@ local function getcomponentindex(start)
end
end
-local a_noligature = attributes.private("noligature")
-local prehyphenchar = languages and languages.prehyphenchar
-local posthyphenchar = languages and languages.posthyphenchar
------ preexhyphenchar = languages and languages.preexhyphenchar
------ postexhyphenchar = languages and languages.postexhyphenchar
-
-if prehyphenchar then
-
- -- okay
-
-elseif context then
-
- report_warning("no language support") os.exit()
-
-else
-
- local newlang = lang.new
- local getpre = lang.prehyphenchar
- local getpost = lang.posthyphenchar
- -- local getpreex = lang.preexhyphenchar
- -- local getpostex = lang.postexhyphenchar
-
- prehyphenchar = function(l) local l = newlang(l) return l and getpre (l) or -1 end
- posthyphenchar = function(l) local l = newlang(l) return l and getpost (l) or -1 end
- -- preexhyphenchar = function(l) local l = newlang(l) return l and getpreex (l) or -1 end
- -- postexhyphenchar = function(l) local l = newlang(l) return l and getpostex(l) or -1 end
-
-end
-
-local function addhyphens(template,pre,post)
- -- inserted by hyphenation algorithm
- local l = getfield(template,"lang")
- local p = prehyphenchar(l)
- if p and p > 0 then
- local c = copy_node(template)
- setfield(c,"char",p)
- if pre then
- local t = find_node_tail(pre)
- setfield(t,"next",c)
- setfield(c,"prev",t)
- else
- pre = c
- end
- end
- local p = posthyphenchar(l)
- if p and p > 0 then
- local c = copy_node(template)
- setfield(c,"char",p)
- if post then
- -- post has a prev nesting node .. alternatively we could
- local prev = getprev(post)
- setfield(c,"next",post)
- setfield(post,"prev",c)
- if prev then
- setfield(prev,"next",c)
- setfield(c,"prev",prev)
- end
- else
- post = c
- end
- end
- return pre, post
-end
+local a_noligature = attributes.private("noligature")
local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound) -- brr head
if getattr(start,a_noligature) == 1 then
@@ -569,36 +531,37 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
end
if start == stop and getchar(start) == char then
resetinjection(start)
- setfield(start,"char",char)
+ setchar(start,char)
return head, start
end
-- needs testing (side effects):
- local components = getfield(base,"components")
+ local components = getfield(start,"components")
if components then
- flush_node_list(components)
+ -- we get a double free .. needs checking
+ -- flush_node_list(components)
end
--
local prev = getprev(start)
local next = getnext(stop)
local comp = start
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
+ setprev(start,nil)
+ setnext(stop,nil)
local base = copy_glyph(start)
if start == head then
head = base
end
resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
- setfield(base,"components",comp) -- start can have components .. do we need to flush?
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",comp) -- start can have components ... do we need to flush?
if prev then
- setfield(prev,"next",base)
+ setnext(prev,base)
end
if next then
- setfield(next,"prev",base)
+ setprev(next,base)
end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
+ setprev(base,prev)
+ setnext(base,next)
if not discfound then
local deletemarks = markflag ~= "mark"
local components = start
@@ -642,79 +605,83 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
end
else
-- discfound ... forget about marks .. probably no scripts that hyphenate and have marks
- local discprev = getfield(discfound,"prev")
- local discnext = getfield(discfound,"next")
+ local discprev = getprev(discfound)
+ local discnext = getnext(discfound)
if discprev and discnext then
- local subtype = getsubtype(discfound)
- if subtype == discretionary_code then
- local pre = getfield(discfound,"pre")
- local post = getfield(discfound,"post")
- local replace = getfield(discfound,"replace")
- if not replace then -- todo: signal simple hyphen
- local prev = getfield(base,"prev")
- local copied = copy_node_list(comp)
- setfield(discnext,"prev",nil) -- also blocks funny assignments
- setfield(discprev,"next",nil) -- also blocks funny assignments
- if pre then
- setfield(comp,"next",pre)
- setfield(pre,"prev",comp)
- end
- pre = comp
- if post then
- local tail = find_node_tail(post)
- setfield(tail,"next",discnext)
- setfield(discnext,"prev",tail)
- setfield(post,"prev",nil)
- else
- post = discnext
- end
- setfield(prev,"next",discfound)
- setfield(next,"prev",discfound)
- setfield(discfound,"next",next)
- setfield(discfound,"prev",prev)
- setfield(base,"next",nil)
- setfield(base,"prev",nil)
- setfield(base,"components",copied)
- setfield(discfound,"pre",pre)
- setfield(discfound,"post",post)
- setfield(discfound,"replace",base)
- setfield(discfound,"subtype",discretionary_code)
- base = prev -- restart
- end
- elseif discretionary_code == regular_code then
- -- local prev = getfield(base,"prev")
- -- local next = getfield(base,"next")
+ -- we assume normalization in context, and don't care about generic ... especially
+ -- \- can give problems as there we can have a negative char but that won't match
+ -- anyway
+ local pre = getfield(discfound,"pre")
+ local post = getfield(discfound,"post")
+ local replace = getfield(discfound,"replace")
+ if not replace then -- todo: signal simple hyphen
+ local prev = getprev(base)
local copied = copy_node_list(comp)
- setfield(discnext,"prev",nil) -- also blocks funny assignments
- setfield(discprev,"next",nil) -- also blocks funny assignments
- local pre, post = addhyphens(comp,comp,discnext,subtype) -- takes from components
- setfield(prev,"next",discfound)
- setfield(next,"prev",discfound)
- setfield(discfound,"next",next)
- setfield(discfound,"prev",prev)
- setfield(base,"next",nil)
- setfield(base,"prev",nil)
+ setprev(discnext,nil) -- also blocks funny assignments
+ setnext(discprev,nil) -- also blocks funny assignments
+ if pre then
+ setnext(discprev,pre)
+ setprev(pre,discprev)
+ end
+ pre = comp
+ if post then
+ local tail = find_node_tail(post)
+ setnext(tail,discnext)
+ setprev(discnext,tail)
+ setprev(post,nil)
+ else
+ post = discnext
+ end
+ setnext(prev,discfound)
+ setprev(discfound,prev)
+ setnext(discfound,next)
+ setprev(next,discfound)
+ setnext(base,nil)
+ setprev(base,nil)
setfield(base,"components",copied)
setfield(discfound,"pre",pre)
setfield(discfound,"post",post)
setfield(discfound,"replace",base)
- setfield(discfound,"subtype",discretionary_code)
- base = next -- or restart
- else
- -- forget about it in generic usage
+ setsubtype(discfound,discretionary_code)
+ base = prev -- restart
end
end
end
return head, base
end
-function handlers.gsub_single(head,start,kind,lookupname,replacement)
- if trace_singles then
- logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(getchar(start)),gref(replacement))
+local function multiple_glyphs(head,start,multiple,ignoremarks)
+ local nofmultiples = #multiple
+ if nofmultiples > 0 then
+ resetinjection(start)
+ setchar(start,multiple[1])
+ if nofmultiples > 1 then
+ local sn = getnext(start)
+ for k=2,nofmultiples do -- todo: use insert_node
+-- untested:
+--
+-- while ignoremarks and marks[getchar(sn)] then
+-- local sn = getnext(sn)
+-- end
+ local n = copy_node(start) -- ignore components
+ resetinjection(n)
+ setchar(n,multiple[k])
+ setprev(n,start)
+ setnext(n,sn)
+ if sn then
+ setprev(sn,n)
+ end
+ setnext(start,n)
+ start = n
+ end
+ end
+ return head, start, true
+ else
+ if trace_multiples then
+ logprocess("no multiple for %s",gref(getchar(start)))
+ end
+ return head, start, false
end
- resetinjection(start)
- setfield(start,"char",replacement)
- return head, start, true
end
local function get_alternative_glyph(start,alternatives,value,trace_alternatives)
@@ -749,38 +716,15 @@ local function get_alternative_glyph(start,alternatives,value,trace_alternatives
end
end
-local function multiple_glyphs(head,start,multiple,ignoremarks)
- local nofmultiples = #multiple
- if nofmultiples > 0 then
- resetinjection(start)
- setfield(start,"char",multiple[1])
- if nofmultiples > 1 then
- local sn = getnext(start)
- for k=2,nofmultiples do -- todo: use insert_node
--- untested:
---
--- while ignoremarks and marks[getchar(sn)] then
--- local sn = getnext(sn)
--- end
- local n = copy_node(start) -- ignore components
- resetinjection(n)
- setfield(n,"char",multiple[k])
- setfield(n,"next",sn)
- setfield(n,"prev",start)
- if sn then
- setfield(sn,"prev",n)
- end
- setfield(start,"next",n)
- start = n
- end
- end
- return head, start, true
- else
- if trace_multiples then
- logprocess("no multiple for %s",gref(getchar(start)))
- end
- return head, start, false
+-- handlers
+
+function handlers.gsub_single(head,start,kind,lookupname,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(getchar(start)),gref(replacement))
end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head, start, true
end
function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence)
@@ -791,7 +735,7 @@ function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence
logprocess("%s: replacing %s by alternative %a to %s, %s",pref(kind,lookupname),gref(getchar(start)),choice,gref(choice),comment)
end
resetinjection(start)
- setfield(start,"char",choice)
+ setchar(start,choice)
else
if trace_alternatives then
logwarning("%s: no variant %a for %s, %s",pref(kind,lookupname),value,gref(getchar(start)),comment)
@@ -889,7 +833,7 @@ function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
else
-- weird but happens (in some arabic font)
resetinjection(start)
- setfield(start,"char",lig)
+ setchar(start,lig)
if trace_ligatures then
logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(kind,lookupname),gref(startchar),gref(lig))
end
@@ -902,19 +846,79 @@ function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
return head, start, false, discfound
end
--- function is_gsub_ligature(start,ligature) -- limited case: in disc nodes, only latin, always glyphs
--- local s = getnext(start)
--- while s do
--- local lg = ligature[getchar(s)]
--- if lg then
--- ligature = lg
--- s = getnext(s)
--- else
--- return
--- end
--- end
--- return ligature and ligature.ligature
--- end
+function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence,lookuphash,i,injection)
+ local startchar = getchar(start)
+ local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,injection) -- ,characters[startchar])
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
+ end
+ return head, start, false
+end
+
+function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence,lookuphash,i,injection)
+ -- todo: kerns in disc nodes: pre, post, replace -> loop over disc too
+ -- todo: kerns in components of ligatures
+ local snext = getnext(start)
+ if not snext then
+ return head, start, false
+ else
+ local prev = start
+ local done = false
+ local factor = tfmdata.parameters.factor
+ local lookuptype = lookuptypes[lookupname]
+ while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
+ local nextchar = getchar(snext)
+ local krn = kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev = snext
+ snext = getnext(snext)
+ else
+ if not krn then
+ -- skip
+ elseif type(krn) == "table" then
+ if lookuptype == "pair" then -- probably not needed
+ local a, b = krn[2], krn[3]
+ if a and #a > 0 then
+ local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,injection) -- characters[startchar])
+ if trace_kerns then
+ local startchar = getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ if b and #b > 0 then
+ local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,injection) -- characters[nextchar])
+ if trace_kerns then
+ local startchar = getchar(start)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ else -- wrong ... position has different entries
+ report_process("%s: check this out (old kern stuff)",pref(kind,lookupname))
+ -- local a, b = krn[2], krn[6]
+ -- if a and a ~= 0 then
+ -- local k = setkern(snext,factor,rlmode,a)
+ -- if trace_kerns then
+ -- logprocess("%s: inserting first kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
+ -- end
+ -- end
+ -- if b and b ~= 0 then
+ -- logwarning("%s: ignoring second kern xoff %s",pref(kind,lookupname),b*factor)
+ -- end
+ end
+ done = true
+ elseif krn ~= 0 then
+ local k = setkern(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar)) -- prev?
+ end
+ done = true
+ end
+ break
+ end
+ end
+ return head, start, done
+ end
+end
--[[ldx--
<p>We get hits on a mark, but we're not sure if the it has to be applied so
@@ -1078,7 +1082,7 @@ function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence
if al[anchor] then
local ma = markanchors[anchor]
if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
+ local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar],true)
if trace_marks then
logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
@@ -1161,85 +1165,11 @@ function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence)
end
end
-function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence,injection)
- local startchar = getchar(start)
- local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,injection) -- ,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
- end
- return head, start, false
-end
-
-function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence,lookuphash,i,injection)
- -- todo: kerns in disc nodes: pre, post, replace -> loop over disc too
- -- todo: kerns in components of ligatures
- local snext = getnext(start)
- if not snext then
- return head, start, false
- else
- local prev, done = start, false
- local factor = tfmdata.parameters.factor
- local lookuptype = lookuptypes[lookupname]
- while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
- local nextchar = getchar(snext)
- local krn = kerns[nextchar]
- if not krn and marks[nextchar] then
- prev = snext
- snext = getnext(snext)
- else
- if not krn then
- -- skip
- elseif type(krn) == "table" then
- if lookuptype == "pair" then -- probably not needed
- local a, b = krn[2], krn[3]
- if a and #a > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,injection) -- characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,injection) -- characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- else -- wrong ... position has different entries
- report_process("%s: check this out (old kern stuff)",pref(kind,lookupname))
- -- local a, b = krn[2], krn[6]
- -- if a and a ~= 0 then
- -- local k = setkern(snext,factor,rlmode,a)
- -- if trace_kerns then
- -- logprocess("%s: inserting first kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
- -- end
- -- end
- -- if b and b ~= 0 then
- -- logwarning("%s: ignoring second kern xoff %s",pref(kind,lookupname),b*factor)
- -- end
- end
- done = true
- elseif krn ~= 0 then
- local k = setkern(snext,factor,rlmode,krn,injection)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- done = true
- end
- break
- end
- end
- return head, start, done
- end
-end
-
--[[ldx--
<p>I will implement multiple chain replacements once I run into a font that uses
it. It's not that complex to handle.</p>
--ldx]]--
-local chainmores = { }
local chainprocs = { }
local function logprocess(...)
@@ -1268,11 +1198,6 @@ function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,looku
return head, start, false
end
-function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n)
- logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
- return head, start, false
-end
-
-- The reversesub is a special case, which is why we need to store the replacements
-- in a bit weird way. There is no lookup and the replacement comes from the lookup
-- itself. It is meant mostly for dealing with Urdu.
@@ -1285,7 +1210,7 @@ function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,loo
logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement))
end
resetinjection(start)
- setfield(start,"char",replacement)
+ setchar(start,replacement)
return head, start, true
else
return head, start, false
@@ -1316,7 +1241,7 @@ as less as needed but that would also make the code even more messy.</p>
-- repeat -- start x x m x x stop => start m
-- local next = getnext(start)
-- if not marks[getchar(next)] then
--- local components = getfield(next,"components")
+-- local components = getnext(next,"components")
-- if components then -- probably not needed
-- flush_node_list(components)
-- end
@@ -1369,83 +1294,7 @@ function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lo
logprocess("%s: replacing single %s by %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar),gref(replacement))
end
resetinjection(current)
- if check_discretionaries then
- -- some fonts use a chain lookup to replace e.g. an f in a fi ligature
- -- and there can be a disc node in between ... the next code tries to catch
- -- this
- local next = getnext(current)
- local prev = getprev(current) -- todo: just remember it above
- local done = false
- if next then
- if getid(next) == disc_code then
- local subtype = getsubtype(next)
- if subtype == discretionary_code then
- setfield(next,"prev",prev)
- setfield(prev,"next",next)
- setfield(current,"prev",nil)
- setfield(current,"next",nil)
- local replace = getfield(next,"replace")
- local pre = getfield(next,"pre")
- local new = copy_node(current)
- setfield(new,"char",replacement)
- if replace then
- setfield(new,"next",replace)
- setfield(replace,"prev",new)
- end
- if pre then
- setfield(current,"next",pre)
- setfield(pre,"prev",current)
- end
- setfield(next,"replace",new) -- also updates tail
- setfield(next,"pre",current) -- also updates tail
- end
- start = next
- done = true
- local next = getnext(start)
- if next and getid(next) == disc_code then
- collapse_disc(start,next)
- end
- end
- end
- if not done and prev then
- if getid(prev) == disc_code then
- local subtype = getsubtype(prev)
- if subtype == discretionary_code then
- setfield(next,"prev",prev)
- setfield(prev,"next",next)
- setfield(current,"prev",nil)
- setfield(current,"next",nil)
- local replace = getfield(prev,"replace")
- local post = getfield(prev,"post")
- local new = copy_node(current)
- setfield(new,"char",replacement)
- if replace then
- local tail = find_node_tail(replace)
- setfield(tail,"next",new)
- setfield(new,"prev",tail)
- else
- replace = new
- end
- if post then
- local tail = find_node_tail(post)
- setfield(tail,"next",current)
- setfield(current,"prev",tail)
- else
- post = current
- end
- setfield(prev,"replace",replace) -- also updates tail
- setfield(prev,"post",post) -- also updates tail
- start = prev
- done = true
- end
- end
- end
- if not done then
- setfield(current,"char",replacement)
- end
- else
- setfield(current,"char",replacement)
- end
+ setchar(current,replacement)
end
end
return head, start, true
@@ -1458,8 +1307,6 @@ function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lo
return head, start, false
end
-chainmores.gsub_single = chainprocs.gsub_single
-
--[[ldx--
<p>Here we replace start by a sequence of new glyphs.</p>
--ldx]]--
@@ -1490,8 +1337,6 @@ function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,
return head, start, false
end
-chainmores.gsub_multiple = chainprocs.gsub_multiple
-
--[[ldx--
<p>Here we replace start by new glyph. First we delete the rest of the match.</p>
--ldx]]--
@@ -1526,7 +1371,7 @@ function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext
logprocess("%s: replacing %s by alternative %a to %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(char),choice,gref(choice),comment)
end
resetinjection(start)
- setfield(start,"char",choice)
+ setchar(start,choice)
else
if trace_alternatives then
logwarning("%s: no variant %a for %s, %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(char),comment)
@@ -1546,8 +1391,6 @@ function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext
return head, start, false
end
-chainmores.gsub_alternate = chainprocs.gsub_alternate
-
--[[ldx--
<p>When we replace ligatures we use a helper that handles the marks. I might change
this function (move code inline and handle the marks by a separate function). We
@@ -1573,7 +1416,7 @@ function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,
local s = getnext(start)
local discfound = false
local last = stop
- local nofreplacements = 0
+ local nofreplacements = 1
local skipmark = currentlookup.flags[1]
while s do
local id = getid(s)
@@ -1589,11 +1432,7 @@ function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,
else
local schar = getchar(s)
if skipmark and marks[schar] then -- marks
--- if s == stop then -- maybe add this
--- break
--- else
s = getnext(s)
--- end
else
local lg = ligatures[schar]
if lg then
@@ -1635,7 +1474,93 @@ function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,
return head, start, false, 0, false
end
-chainmores.gsub_ligature = chainprocs.gsub_ligature
+function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
+ -- untested .. needs checking for the new model
+ local startchar = getchar(start)
+ local subtables = currentlookup.subtables
+ local lookupname = subtables[1]
+ local kerns = lookuphash[lookupname]
+ if kerns then
+ kerns = kerns[startchar] -- needed ?
+ if kerns then
+ local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns) -- ,characters[startchar])
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
+ end
+ end
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
+ local snext = getnext(start)
+ if snext then
+ local startchar = getchar(start)
+ local subtables = currentlookup.subtables
+ local lookupname = subtables[1]
+ local kerns = lookuphash[lookupname]
+ if kerns then
+ kerns = kerns[startchar]
+ if kerns then
+ local lookuptype = lookuptypes[lookupname]
+ local prev, done = start, false
+ local factor = tfmdata.parameters.factor
+ while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
+ local nextchar = getchar(snext)
+ local krn = kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev = snext
+ snext = getnext(snext)
+ else
+ if not krn then
+ -- skip
+ elseif type(krn) == "table" then
+ if lookuptype == "pair" then
+ local a, b = krn[2], krn[3]
+ if a and #a > 0 then
+ local startchar = getchar(start)
+ local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a) -- ,characters[startchar])
+ if trace_kerns then
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ if b and #b > 0 then
+ local startchar = getchar(start)
+ local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b) -- ,characters[nextchar])
+ if trace_kerns then
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
+ end
+ end
+ else
+ report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname))
+ -- local a, b = krn[2], krn[6]
+ -- if a and a ~= 0 then
+ -- local k = setkern(snext,factor,rlmode,a)
+ -- if trace_kerns then
+ -- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
+ -- end
+ -- end
+ -- if b and b ~= 0 then
+ -- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
+ -- end
+ end
+ done = true
+ elseif krn ~= 0 then
+ local k = setkern(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
+ end
+ done = true
+ end
+ break
+ end
+ end
+ return head, start, done
+ end
+ end
+ end
+ return head, start, false
+end
function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
local markchar = getchar(start)
@@ -1804,7 +1729,7 @@ function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext
if al[anchor] then
local ma = markanchors[anchor]
if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
+ local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar],true)
if trace_marks then
logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
@@ -1895,127 +1820,348 @@ function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,l
return head, start, false
end
-function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- -- untested .. needs checking for the new model
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local kerns = lookuphash[lookupname]
- if kerns then
- kerns = kerns[startchar] -- needed ?
- if kerns then
- local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns) -- ,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
+-- what pointer to return, spec says stop
+-- to be discussed ... is bidi changer a space?
+-- elseif char == zwnj and sequence[n][32] then -- brrr
+
+-- somehow l or f is global
+-- we don't need to pass the currentcontext, saves a bit
+-- make a slow variant then can be activated but with more tracing
+
+local function show_skip(kind,chainname,char,ck,class)
+ if ck[9] then
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
+ else
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2])
+ end
+end
+
+-- A previous version had disc collapsing code in the (single sub) handler plus some
+-- checking in the main loop, but that left the pre/post sequences undone. The best
+-- solution is to add some checking there and backtrack when a replace/post matches
+-- but it takes a bit of work to figure out an efficient way (this is what the sweep*
+-- names refer to). I might look into that variant one day again as it can replace
+-- some other code too. In that approach we can have a special version for gub and pos
+-- which gains some speed. This method does the test and passes info to the handlers
+-- (sweepnode, sweepmode, sweepprev, sweepnext, etc). Here collapsing is handled in the
+-- main loop which also makes code elsewhere simpler (i.e. no need for the other special
+-- runners and disc code in ligature building). I also experimented with pushing preceding
+-- glyphs sequences in the replace/pre fields beforehand which saves checking afterwards
+-- but at the cost of duplicate glyphs (memory) but it's too much overhead (runtime).
+--
+-- In the meantime Kai had moved the code from the single chain into a more general handler
+-- and this one (renamed to chaindisk) is used now. I optimized the code a bit and brought
+-- it in sycn with the other code. Hopefully I didn't introduce errors. Note: this somewhat
+-- complex approach is meant for fonts that implement (for instance) ligatures by character
+-- replacement which to some extend is not that suitable for hyphenation. I also use some
+-- helpers. This method passes some states but reparses the list. There is room for a bit of
+-- speed up but that will be done in the context version. (In fact a partial rewrite of all
+-- code can bring some more efficientry.)
+--
+-- I didn't test it with extremes but successive disc nodes still can give issues but in
+-- order to handle that we need more complex code which also slows down even more. The main
+-- loop variant could deal with that: test, collapse, backtrack.
+
+local function chaindisk(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,chainindex,sequence,chainproc)
+
+ if not start then
+ return head, start, false
+ end
+
+ local startishead = start == head
+ local seq = ck[3]
+ local f = ck[4]
+ local l = ck[5]
+ local s = #seq
+ local done = false
+ local sweepnode = sweepnode
+ local sweeptype = sweeptype
+ local sweepoverflow = false
+ local checkdisc = getprev(head) -- hm bad name head
+ local keepdisc = not sweepnode
+ local lookaheaddisc = nil
+ local backtrackdisc = nil
+ local current = start
+ local last = start
+ local prev = getprev(start)
+
+ -- fishy: so we can overflow and then go on in the sweep?
+
+ local i = f
+ while i <= l do
+ local id = getid(current)
+ if id == glyph_code then
+ i = i + 1
+ last = current
+ current = getnext(current)
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpre[current] ~= notmatchreplace[current] then
+ lookaheaddisc = current
+ end
+ local replace = getfield(current,"replace")
+ while replace and i <= l do
+ if getid(replace) == glyph_code then
+ i = i + 1
+ end
+ replace = getnext(replace)
+ end
+ last = current
+ current = getnext(c)
+ else
+ head, current = flattendisk(head,current)
+ end
+ else
+ last = current
+ current = getnext(current)
+ end
+ if current then
+ -- go on
+ elseif sweepoverflow then
+ -- we already are folling up on sweepnode
+ break
+ elseif sweeptype == "post" or sweeptype == "replace" then
+ current = getnext(sweepnode)
+ if current then
+ sweeptype = nil
+ sweepoverflow = true
+ else
+ break
end
+ else
+ break -- added
end
end
- return head, start, false
-end
-chainmores.gpos_single = chainprocs.gpos_single -- okay?
+ if sweepoverflow then
+ local prev = current and getprev(current)
+ if not current or prev ~= sweepnode then
+ local head = getnext(sweepnode)
+ local tail = nil
+ if prev then
+ tail = prev
+ setprev(current,sweepnode)
+ else
+ tail = find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head,nil)
+ setnext(tail,nil)
+ appenddisc(sweepnode,head)
+ end
+ end
--- when machines become faster i will make a shared function
+ if l < s then
+ local i = l
+ local t = sweeptype == "post" or sweeptype == "replace"
+ while current and i < s do
+ local id = getid(current)
+ if id == glyph_code then
+ i = i + 1
+ current = getnext(current)
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpre[current] ~= notmatchreplace[current] then
+ lookaheaddisc = current
+ end
+ local replace = getfield(c,"replace")
+ while replace and i < s do
+ if getid(replace) == glyph_code then
+ i = i + 1
+ end
+ replace = getnext(replace)
+ end
+ current = getnext(current)
+ elseif notmatchpre[current] ~= notmatchreplace[current] then
+ head, current = flattendisk(head,current)
+ else
+ current = getnext(current) -- HH
+ end
+ else
+ current = getnext(current)
+ end
+ if not current and t then
+ current = getnext(sweepnode)
+ if current then
+ sweeptype = nil
+ end
+ end
+ end
+ end
-function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- local snext = getnext(start)
- if snext then
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local kerns = lookuphash[lookupname]
- if kerns then
- kerns = kerns[startchar]
- if kerns then
- local lookuptype = lookuptypes[lookupname]
- local prev, done = start, false
- local factor = tfmdata.parameters.factor
- while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
- local nextchar = getchar(snext)
- local krn = kerns[nextchar]
- if not krn and marks[nextchar] then
- prev = snext
- snext = getnext(snext)
- else
- if not krn then
- -- skip
- elseif type(krn) == "table" then
- if lookuptype == "pair" then
- local a, b = krn[2], krn[3]
- if a and #a > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a) -- ,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b) -- ,characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- else
- report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname))
- local a, b = krn[2], krn[6]
- if a and a ~= 0 then
- local k = setkern(snext,factor,rlmode,a)
- if trace_kerns then
- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- end
- if b and b ~= 0 then
- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
- end
- end
- done = true
- elseif krn ~= 0 then
- local k = setkern(snext,factor,rlmode,krn)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- done = true
+ if f > 1 then
+ local current = prev
+ local i = f
+ local t = sweeptype == "pre" or sweeptype == "replace"
+ if not current and t and current == checkdisk then
+ current = getprev(sweepnode)
+ end
+ while current and i > 1 do -- missing getprev added / moved outside
+ local id = getid(current)
+ if id == glyph_code then
+ i = i - 1
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpost[current] ~= notmatchreplace[current] then
+ backtrackdisc = current
+ end
+ local replace = getfield(current,"replace")
+ while replace and i > 1 do
+ if getid(replace) == glyph_code then
+ i = i - 1
end
- break
+ replace = getnext(replace)
end
+ elseif notmatchpost[current] ~= notmatchreplace[current] then
+ head, current = flattendisk(head,current)
end
- return head, start, done
+ end
+ current = getprev(current)
+ if t and current == checkdisk then
+ current = getprev(sweepnode)
end
end
end
- return head, start, false
-end
-chainmores.gpos_pair = chainprocs.gpos_pair -- okay?
+ local ok = false
+ if lookaheaddisc then
--- what pointer to return, spec says stop
--- to be discussed ... is bidi changer a space?
--- elseif char == zwnj and sequence[n][32] then -- brrr
+ local cf = start
+ local cl = getprev(lookaheaddisc)
+ local cprev = getprev(start)
+ local insertedmarks = 0
--- somehow l or f is global
--- we don't need to pass the currentcontext, saves a bit
--- make a slow variant then can be activated but with more tracing
+ while cprev and getid(cf) == glyph_code and getfont(cf) == currentfont and getsubtype(cf) < 256 and marks[getchar(cf)] do
+ insertedmarks = insertedmarks + 1
+ cf = cprev
+ startishead = cf == head
+ cprev = getprev(cprev)
+ end
+
+ setprev(lookaheaddisc,cprev)
+ if cprev then
+ setnext(cprev,lookaheaddisc)
+ end
+ setprev(cf,nil)
+ setnext(cl,nil)
+ if startishead then
+ head = lookaheaddisc
+ end
+
+ local replace = getfield(lookaheaddisc,"replace")
+ local pre = getfield(lookaheaddisc,"pre")
+ local new = copy_node_list(cf)
+ local cnew = new
+ for i=1,insertedmarks do
+ cnew = getnext(cnew)
+ end
+ local clast = cnew
+ for i=f,l do
+ clast = getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ cf, start, ok = chainproc(cf,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ new, cnew, ok = chainproc(new,cnew,clast,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ end
+ if pre then
+ setnext(cl,pre)
+ setprev(pre,cl)
+ end
+ if replace then
+ local tail = find_node_tail(new)
+ setnext(tail,replace)
+ setprev(replace,tail)
+ end
+ setfield(lookaheaddisc,"pre",cf) -- also updates tail
+ setfield(lookaheaddisc,"replace",new) -- also updates tail
+
+ start = getprev(lookaheaddisc)
+ sweephead[cf] = getnext(clast)
+ sweephead[new] = getnext(last)
+
+ elseif backtrackdisc then
+
+ local cf = getnext(backtrackdisc)
+ local cl = start
+ local cnext = getnext(start)
+ local insertedmarks = 0
+
+ while cnext and getid(cnext) == glyph_code and getfont(cnext) == currentfont and getsubtype(cnext) < 256 and marks[getchar(cnext)] do
+ insertedmarks = insertedmarks + 1
+ cl = cnext
+ cnext = getnext(cnext)
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf,nil)
+ setnext(cl,nil)
+ local replace = getfield(backtrackdisc,"replace")
+ local post = getfield(backtrackdisc,"post")
+ local new = copy_node_list(cf)
+ local cnew = find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew = getprev(cnew)
+ end
+ local clast = cnew
+ for i=f,l do
+ clast = getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ cf, start, ok = chainproc(cf,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ end
+ if not notmatchreplace[backtrackdisc] then
+ new, cnew, ok = chainproc(new,cnew,clast,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ end
+ if post then
+ local tail = find_node_tail(post)
+ setnext(tail,cf)
+ setprev(cf,tail)
+ else
+ post = cf
+ end
+ if replace then
+ local tail = find_node_tail(replace)
+ setnext(tail,new)
+ setprev(new,tail)
+ else
+ replace = new
+ end
+ setfield(backtrackdisc,"post",post) -- also updates tail
+ setfield(backtrackdisc,"replace",replace) -- also updates tail
+ start = getprev(backtrackdisc)
+ sweephead[post] = getnext(clast)
+ sweephead[replace] = getnext(last)
-local function show_skip(kind,chainname,char,ck,class)
- if ck[9] then
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
else
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2])
+
+ head, start, ok = chainproc(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+
end
+
+ return head, start, ok
end
local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash)
- -- local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6]
+ local sweepnode = sweepnode
+ local sweeptype = sweeptype
+ local diskseen = false
+ local checkdisc = getprev(head)
local flags = sequence.flags
local done = false
local skipmark = flags[1]
local skipligature = flags[2]
local skipbase = flags[3]
- local someskip = skipmark or skipligature or skipbase -- could be stored in flags for a fast test (hm, flags could be false !)
- local markclass = sequence.markclass -- todo, first we need a proper test
+ local markclass = sequence.markclass
local skipped = false
- for k=1,#contexts do
+
+ for k=1,#contexts do -- i've only seen ccmp having > 1 (e.g. dejavu)
local match = true
local current = start
local last = start
@@ -2029,7 +2175,8 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
else
-- maybe we need a better space check (maybe check for glue or category or combination)
-- we cannot optimize for n=2 because there can be disc nodes
- local f, l = ck[4], ck[5]
+ local f = ck[4]
+ local l = ck[5]
-- current match
if f == 1 and f == l then -- current only
-- already a hit
@@ -2039,9 +2186,14 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
if f == l then -- new, else last out of sync (f is > 1)
-- match = true
else
+ local discfound = nil
local n = f + 1
last = getnext(last)
while n <= l do
+ if not last and (sweeptype == "post" or sweeptype == "replace") then
+ last = getnext(sweepnode)
+ sweeptype = nil
+ end
if last then
local id = getid(last)
if id == glyph_code then
@@ -2049,7 +2201,7 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
local char = getchar(last)
local ccd = descriptions[char]
if ccd then
- local class = ccd.class
+ local class = ccd.class or "base"
if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
skipped = true
if trace_skips then
@@ -2062,48 +2214,78 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
n = n + 1
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
elseif id == disc_code then
- if check_discretionaries then
- local replace = getfield(last,"replace")
- if replace then
- -- so far we never entered this branch
- while replace do
- if seq[n][getchar(replace)] then
- n = n + 1
- replace = getnext(replace)
- if not replace then
- break
- elseif n > l then
- -- match = false
- break
- end
- else
- match = false
+ diskseen = true
+ discfound = last
+ notmatchpre[last] = nil
+ notmatchpost[last] = true
+ notmatchreplace[last] = nil
+ local pre = getfield(last,"pre")
+ local replace = getfield(last,"replace")
+ if pre then
+ local n = n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n = n + 1
+ pre = getnext(pre)
+ if n > l then
break
end
- end
- if not match then
+ else
+ notmatchpre[last] = true
break
- elseif check_discretionaries == "trace" then
- report_chain("check disc action in current")
end
- else
- last = getnext(last) -- no skipping here
+ end
+ if n <= l then
+ notmatchpre[last] = true
end
else
- last = getnext(last) -- no skipping here
+ notmatchpre[last] = true
end
+ if replace then
+ -- so far we never entered this branch
+ while replace do
+ if seq[n][getchar(replace)] then
+ n = n + 1
+ replace = getnext(replace)
+ if n > l then
+ break
+ end
+ else
+ notmatchreplace[last] = true
+ match = not notmatchpre[last]
+ break
+ end
+ end
+ match = not notmatchpre[last]
+ end
+ last = getnext(last)
else
match = false
break
@@ -2119,82 +2301,137 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
if match and f > 1 then
local prev = getprev(start)
if prev then
- local n = f-1
- while n >= 1 do
- if prev then
- local id = getid(prev)
- if id == glyph_code then
- if getfont(prev) == currentfont and getsubtype(prev)<256 then -- normal char
- local char = getchar(prev)
- local ccd = descriptions[char]
- if ccd then
- local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
- skipped = true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
+ if prev == checkdisc and (sweeptype == "pre" or sweeptype == "replace") then
+ prev = getprev(sweepnode)
+ -- sweeptype = nil
+ end
+ if prev then
+ local discfound = nil
+ local n = f - 1
+ while n >= 1 do
+ if prev then
+ local id = getid(prev)
+ if id == glyph_code then
+ if getfont(prev) == currentfont and getsubtype(prev)<256 then -- normal char
+ local char = getchar(prev)
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
+ elseif seq[n][char] then
+ n = n -1
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
+ break
end
- elseif seq[n][char] then
- n = n -1
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
break
end
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
break
end
- else
- match = false
- break
- end
- elseif id == disc_code then
- -- the special case: f i where i becomes dottless i ..
- if check_discretionaries then
+ elseif id == disc_code then
+ -- the special case: f i where i becomes dottless i ..
+ diskseen = true
+ discfound = prev
+ notmatchpre[prev] = true
+ notmatchpost[prev] = nil
+ notmatchreplace[prev] = nil
+ local pre = getfield(prev,"pre")
+ local post = getfield(prev,"post")
local replace = getfield(prev,"replace")
- if replace then
- -- we seldom enter this branch (e.g. on brill efficient)
- replace = find_node_tail(replace)
- local finish = getprev(replace)
- while replace do
- if seq[n][getchar(replace)] then
- n = n - 1
- replace = getprev(replace)
- if not replace or replace == finish then
+ if pre ~= start and post ~= start and replace ~= start then
+ if post then
+ local n = n
+ local posttail = find_node_tail(post)
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n = n - 1
+ if posttail == post then
+ break
+ else
+ posttail = getprev(posttail)
+ if n < 1 then
+ break
+ end
+ end
+ else
+ notmatchpost[prev] = true
break
- elseif n < 1 then
- -- match = false
+ end
+ end
+ if n >= 1 then
+ notmatchpost[prev] = true
+ end
+ else
+ notmatchpost[prev] = true
+ end
+ if replace then
+ -- we seldom enter this branch (e.g. on brill efficient)
+ local replacetail = find_node_tail(replace)
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n = n - 1
+ if replacetail == replace then
+ break
+ else
+ replacetail = getprev(replacetail)
+ if n < 1 then
+ break
+ end
+ end
+ else
+ notmatchreplace[prev] = true
+ match = not notmatchpost[prev]
break
end
- else
- match = false
+ end
+ if not match then
break
end
- end
- if not match then
- break
- elseif check_discretionaries == "trace" then
- report_chain("check disc action in before")
+ else
+ -- skip 'm
end
else
-- skip 'm
end
+ elseif seq[n][32] then
+ n = n -1
else
- -- skip 'm
+ match = false
+ break
end
- elseif seq[n][32] then
- n = n -1
+ prev = getprev(prev)
+ elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces
+ n = n - 1
else
match = false
break
end
- prev = getprev(prev)
- elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces
- n = n - 1
- else
- match = false
- break
end
+ else
+ match = false
end
else
match = false
@@ -2203,7 +2440,14 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
-- after
if match and s > l then
local current = last and getnext(last)
+ if not current then
+ if sweeptype == "post" or sweeptype == "replace" then
+ current = getnext(sweepnode)
+ -- sweeptype = nil
+ end
+ end
if current then
+ local discfound = nil
-- removed optimization for s-l == 1, we have to deal with marks anyway
local n = l + 1
while n <= s do
@@ -2223,43 +2467,77 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
elseif seq[n][char] then
n = n + 1
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
else
- match = false
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
break
end
elseif id == disc_code then
- if check_discretionaries then
- local replace = getfield(current,"replace")
- if replace then
- -- so far we never entered this branch
- while replace do
- if seq[n][getchar(replace)] then
- n = n + 1
- replace = getnext(replace)
- if not replace then
- break
- elseif n > s then
- break
- end
- else
- match = false
+ diskseen = true
+ discfound = current
+ notmatchpre[current] = nil
+ notmatchpost[current] = true
+ notmatchreplace[current] = nil
+ local pre = getfield(current,"pre")
+ local replace = getfield(current,"replace")
+ if pre then
+ local n = n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n = n + 1
+ pre = getnext(pre)
+ if n > s then
break
end
+ else
+ notmatchpre[current] = true
+ break
end
- if not match then
+ end
+ if n <= s then
+ notmatchpre[current] = true
+ end
+ else
+ notmatchpre[current] = true
+ end
+ if replace then
+ -- so far we never entered this branch
+ while replace do
+ if seq[n][getchar(replace)] then
+ n = n + 1
+ replace = getnext(replace)
+ if n > s then
+ break
+ end
+ else
+ notmatchreplace[current] = true
+ match = notmatchpre[current]
break
- elseif check_discretionaries == "trace" then
- report_chain("check disc action in after")
end
- else
- -- skip 'm
+ end
+ if not match then
+ break
end
else
-- skip 'm
@@ -2284,7 +2562,8 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
end
if match then
- -- ck == currentcontext
+ -- can lookups be of a different type ?
+ local diskchain = diskseen or sweepnode
if trace_contexts then
local rule, lookuptype, f, l = ck[1], ck[2], ck[4], ck[5]
local char = getchar(start)
@@ -2304,10 +2583,14 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
local chainlookupname = chainlookups[1]
local chainlookup = lookuptable[chainlookupname]
if chainlookup then
- local cp = chainprocs[chainlookup.type]
- if cp then
+ local chainproc = chainprocs[chainlookup.type]
+ if chainproc then
local ok
- head, start, ok = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ if diskchain then
+ head, start, ok = chaindisk(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence,chainproc)
+ else
+ head, start, ok = chainproc(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+ end
if ok then
done = true
end
@@ -2319,13 +2602,13 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
else
local i = 1
- while true do
+ while start and true do
if skipped then
- while true do
+ while true do -- todo: use properties
local char = getchar(start)
local ccd = descriptions[char]
if ccd then
- local class = ccd.class
+ local class = ccd.class or "base"
if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
start = getnext(start)
else
@@ -2336,36 +2619,51 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
end
end
+ -- see remark in ms standard under : LookupType 5: Contextual Substitution Subtable
local chainlookupname = chainlookups[i]
local chainlookup = lookuptable[chainlookupname]
if not chainlookup then
- -- okay, n matches, < n replacements
+ -- we just advance
i = i + 1
else
- local cp = chainmores[chainlookup.type]
- if not cp then
+ local chainproc = chainprocs[chainlookup.type]
+ if not chainproc then
-- actually an error
logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
i = i + 1
else
local ok, n
- head, start, ok, n = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
+ if diskchain then
+ head, start, ok = chaindisk(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence,chainproc)
+ else
+ head, start, ok, n = chainproc(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
+ end
-- messy since last can be changed !
if ok then
done = true
- -- skip next one(s) if ligature
- i = i + (n or 1)
- else
- i = i + 1
+ if n and n > 1 then
+ -- we have a ligature (cf the spec we advance one but we really need to test it
+ -- as there are fonts out there that are fuzzy and have too many lookups:
+ --
+ -- U+1105 U+119E U+1105 U+119E : sourcehansansklight: script=hang ccmp=yes
+ --
+ if i + n > nofchainlookups then
+ -- if trace_contexts then
+ -- logprocess("%s: quitting lookups",cref(kind,chainname))
+ -- end
+ break
+ else
+ -- we need to carry one
+ end
+ end
end
+ i = i + 1
end
end
- if i > nofchainlookups then
+ if i > nofchainlookups or not start then
break
elseif start then
start = getnext(start)
- else
- -- weird
end
end
end
@@ -2380,8 +2678,16 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
end
end
+ if done then
+ break -- out of contexts (new, needs checking)
+ end
end
end
+ if diskseen then -- maybe move up so that we can turn checking on/off
+ notmatchpre = { }
+ notmatchpost = { }
+ notmatchreplace = { }
+ end
return head, start, done
end
@@ -2399,26 +2705,49 @@ otf.chainhandlers = {
verbose = verbose_handle_contextchain,
}
+local handle_contextchain = nil
+
+-- normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash)
+
+local function chained_contextchain(head,start,stop,...)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,...)
+end
+
function otf.setcontextchain(method)
if not method or method == "normal" or not otf.chainhandlers[method] then
- if handlers.contextchain then -- no need for a message while making the format
+ if handle_contextchain then -- no need for a message while making the format
logwarning("installing normal contextchain handler")
end
- handlers.contextchain = normal_handle_contextchain
+ handle_contextchain = normal_handle_contextchain
else
logwarning("installing contextchain handler %a",method)
local handler = otf.chainhandlers[method]
- handlers.contextchain = function(...)
+ handle_contextchain = function(...)
return handler(currentfont,...) -- hm, get rid of ...
end
end
- handlers.gsub_context = handlers.contextchain
- handlers.gsub_contextchain = handlers.contextchain
- handlers.gsub_reversecontextchain = handlers.contextchain
- handlers.gpos_contextchain = handlers.contextchain
- handlers.gpos_context = handlers.contextchain
+
+ handlers.gsub_context = handle_contextchain
+ handlers.gsub_contextchain = handle_contextchain
+ handlers.gsub_reversecontextchain = handle_contextchain
+ handlers.gpos_contextchain = handle_contextchain
+ handlers.gpos_context = handle_contextchain
+
+ handlers.contextchain = handle_contextchain
+
end
+chainprocs.gsub_context = chained_contextchain
+chainprocs.gsub_contextchain = chained_contextchain
+chainprocs.gsub_reversecontextchain = chained_contextchain
+chainprocs.gpos_contextchain = chained_contextchain
+chainprocs.gpos_context = chained_contextchain
+
otf.setcontextchain()
local missing = { } -- we only report once
@@ -2458,21 +2787,34 @@ end)
-- fonts.hashes.lookups = lookuphashes
-local autofeatures = fonts.analyzers.features -- was: constants
+local autofeatures = fonts.analyzers.features
+local featuretypes = otf.tables.featuretypes
+local defaultscript = otf.features.checkeddefaultscript
+local defaultlanguage = otf.features.checkeddefaultlanguage
-local function initialize(sequence,script,language,enabled)
+local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
local features = sequence.features
if features then
local order = sequence.order
if order then
- for i=1,#order do --
- local kind = order[i] --
+ local featuretype = featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind = order[i]
local valid = enabled[kind]
if valid then
- local scripts = features[kind] --
- local languages = scripts[script] or scripts[wildcard]
- if languages and (languages[language] or languages[wildcard]) then
- return { valid, autofeatures[kind] or false, sequence.chain or 0, kind, sequence }
+ local scripts = features[kind]
+ local languages = scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled = languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid, autofeatures[kind] or false, sequence, kind }
end
end
end
@@ -2484,11 +2826,13 @@ local function initialize(sequence,script,language,enabled)
end
function otf.dataset(tfmdata,font) -- generic variant, overloaded in context
- local shared = tfmdata.shared
- local properties = tfmdata.properties
- local language = properties.language or "dflt"
- local script = properties.script or "dflt"
- local enabled = shared.features
+ local shared = tfmdata.shared
+ local properties = tfmdata.properties
+ local language = properties.language or "dflt"
+ local script = properties.script or "dflt"
+ local enabled = shared.features
+ local autoscript = enabled and enabled.autoscript
+ local autolanguage = enabled and enabled.autolanguage
local res = resolved[font]
if not res then
res = { }
@@ -2507,7 +2851,7 @@ function otf.dataset(tfmdata,font) -- generic variant, overloaded in context
rs[language] = rl
local sequences = tfmdata.resources.sequences
for s=1,#sequences do
- local v = enabled and initialize(sequences[s],script,language,enabled)
+ local v = enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
if v then
rl[#rl+1] = v
end
@@ -2516,104 +2860,100 @@ function otf.dataset(tfmdata,font) -- generic variant, overloaded in context
return rl
end
--- elseif id == glue_code then
--- if p[5] then -- chain
--- local pc = pp[32]
--- if pc then
--- start, ok = start, false -- p[1](start,kind,p[2],pc,p[3],p[4])
--- if ok then
--- done = true
--- end
--- if start then start = getnext(start) end
--- else
--- start = getnext(start)
--- end
--- else
--- start = getnext(start)
--- end
-
--- there will be a new direction parser (pre-parsed etc)
-
--- less bytecode: 290 -> 254
---
--- attr = attr or false
---
--- local a = getattr(start,0)
--- if (a == attr and (not attribute or getprop(start,a_state) == attribute)) or (not attribute or getprop(start,a_state) == attribute) then
--- -- the action
--- end
-
-- assumptions:
--
-- * languages that use complex disc nodes
--- optimization comes later ...
-
-local function kernrun(disc,run) -- we can assume that prev and next are glyphs
+local function kernrun(disc,run)
+ --
+ -- we catch <font 1><disc font 2>
+ --
if trace_kernruns then
report_run("kern") -- will be more detailed
end
- --
- local prev = getprev(disc) -- todo, keep these in the main loop
- local next = getnext(disc) -- todo, keep these in the main loop
--
- local pre = getfield(disc,"pre")
+ local prev = getprev(disc) -- todo, keep these in the main loop
+ local next = getnext(disc) -- todo, keep these in the main loop
+ --
+ local pre = getfield(disc,"pre")
+ local post = getfield(disc,"post")
+ local replace = getfield(disc,"replace")
+ --
+ local prevmarks = prev
+ --
+ -- can be optional, because why on earth do we get a disc after a mark (okay, maybe when a ccmp
+ -- has happened but then it should be in the disc so basically this test indicates an error)
+ --
+ while prevmarks and getid(prevmarks) == glyph_code and marks[getchar(prevmarks)] and getfont(prevmarks) == currentfont and getsubtype(prevmarks) < 256 do
+ prevmarks = getprev(prevmarks)
+ end
+ --
+ if prev and (pre or replace) and not (getid(prev) == glyph_code and getfont(prev) == currentfont and getsubtype(prev)<256) then
+ prev = false
+ end
+ if next and (post or replace) and not (getid(next) == glyph_code and getfont(next) == currentfont and getsubtype(next)<256) then
+ next = false
+ end
+ --
if not pre then
-- go on
elseif prev then
local nest = getprev(pre)
- setfield(pre,"prev",prev)
- setfield(prev,"next",pre)
- run(prev,"preinjections")
- setfield(pre,"prev",nest)
- setfield(prev,"next",disc)
+ setprev(pre,prev)
+ setnext(prev,pre)
+ run(prevmarks,"preinjections")
+ setprev(pre,nest)
+ setnext(prev,disc)
else
run(pre,"preinjections")
end
--
- local post = getfield(disc,"post")
if not post then
-- go on
elseif next then
local tail = find_node_tail(post)
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
- run(post,"postinjections",tail)
- setfield(tail,"next",nil)
- setfield(next,"prev",disc)
+ setnext(tail,next)
+ setprev(next,tail)
+ run(post,"postinjections",next)
+ setnext(tail,nil)
+ setprev(next,disc)
else
run(post,"postinjections")
end
--
- local replace = getfield(disc,"replace")
- if not replace then
+ if not replace and prev and next then
-- this should be already done by discfound
+ setnext(prev,next)
+ setprev(next,prev)
+ run(prevmarks,"injections",next)
+ setnext(prev,disc)
+ setprev(next,disc)
elseif prev and next then
local tail = find_node_tail(replace)
local nest = getprev(replace)
- setfield(replace,"prev",prev)
- setfield(prev,"next",replace)
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
- run(prev,"replaceinjections",tail)
- setfield(replace,"prev",nest)
- setfield(prev,"next",disc)
- setfield(tail,"next",nil)
- setfield(next,"prev",disc)
+ setprev(replace,prev)
+ setnext(prev,replace)
+ setnext(tail,next)
+ setprev(next,tail)
+ run(prevmarks,"replaceinjections",next)
+ setprev(replace,nest)
+ setnext(prev,disc)
+ setnext(tail,nil)
+ setprev(next,disc)
elseif prev then
local nest = getprev(replace)
- setfield(replace,"prev",prev)
- setfield(prev,"next",replace)
- run(prev,"replaceinjections")
- setfield(replace,"prev",nest)
- setfield(prev,"next",disc)
+ setprev(replace,prev)
+ setnext(prev,replace)
+ run(prevmarks,"replaceinjections")
+ setprev(replace,nest)
+ setnext(prev,disc)
elseif next then
local tail = find_node_tail(replace)
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
- run(replace,"replaceinjections",tail)
- setfield(tail,"next",nil)
- setfield(next,"prev",disc)
+ setnext(tail,next)
+ setprev(next,tail)
+ run(replace,"replaceinjections",next)
+ setnext(tail,nil)
+ setprev(next,disc)
else
run(replace,"replaceinjections")
end
@@ -2629,6 +2969,8 @@ local function comprun(disc,run)
--
local pre = getfield(disc,"pre")
if pre then
+ sweepnode = disc
+ sweeptype = "pre" -- in alternative code preinjections is used (also used then for proeprties, saves a variable)
local new, done = run(pre)
if done then
setfield(disc,"pre",new)
@@ -2637,6 +2979,8 @@ local function comprun(disc,run)
--
local post = getfield(disc,"post")
if post then
+ sweepnode = disc
+ sweeptype = "post"
local new, done = run(post)
if done then
setfield(disc,"post",new)
@@ -2645,14 +2989,18 @@ local function comprun(disc,run)
--
local replace = getfield(disc,"replace")
if replace then
+ sweepnode = disc
+ sweeptype = "replace"
local new, done = run(replace)
if done then
setfield(disc,"replace",new)
end
end
+ sweepnode = nil
+ sweeptype = nil
end
-local function testrun(disc,trun,crun)
+local function testrun(disc,trun,crun) -- use helper
local next = getnext(disc)
if next then
local replace = getfield(disc,"replace")
@@ -2662,21 +3010,21 @@ local function testrun(disc,trun,crun)
-- only look ahead
local tail = find_node_tail(replace)
-- local nest = getprev(replace)
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
+ setnext(tail,next)
+ setprev(next,tail)
if trun(replace,next) then
setfield(disc,"replace",nil) -- beware, side effects of nest so first
- setfield(prev,"next",replace)
- setfield(replace,"prev",prev)
- setfield(next,"prev",tail)
- setfield(tail,"next",next)
- setfield(disc,"prev",nil)
- setfield(disc,"next",nil)
+ setnext(prev,replace)
+ setprev(replace,prev)
+ setprev(next,tail)
+ setnext(tail,next)
+ setprev(disc,nil)
+ setnext(disc,nil)
flush_node_list(disc)
return replace -- restart
else
- setfield(tail,"next",nil)
- setfield(next,"prev",disc)
+ setnext(tail,nil)
+ setprev(next,disc)
end
else
-- weird case
@@ -2698,11 +3046,11 @@ local function discrun(disc,drun,krun)
report_run("disc") -- will be more detailed
end
if next and prev then
- setfield(prev,"next",next)
- -- setfield(next,"prev",prev)
+ setnext(prev,next)
+ -- setprev(next,prev)
drun(prev)
- setfield(prev,"next",disc)
- -- setfield(next,"prev",disc)
+ setnext(prev,disc)
+ -- setprev(next,disc)
end
--
local pre = getfield(disc,"pre")
@@ -2710,11 +3058,11 @@ local function discrun(disc,drun,krun)
-- go on
elseif prev then
local nest = getprev(pre)
- setfield(pre,"prev",prev)
- setfield(prev,"next",pre)
+ setprev(pre,prev)
+ setnext(prev,pre)
krun(prev,"preinjections")
- setfield(pre,"prev",nest)
- setfield(prev,"next",disc)
+ setprev(pre,nest)
+ setnext(prev,disc)
else
krun(pre,"preinjections")
end
@@ -2750,6 +3098,7 @@ local function featuresprocessor(head,font,attr)
currentfont = font
rlmode = 0
+ sweephead = { }
local sequences = resources.sequences
local done = false
@@ -2765,8 +3114,6 @@ local function featuresprocessor(head,font,attr)
-- Keeping track of the headnode is needed for devanagari (I generalized it a bit
-- so that multiple cases are also covered.)
- -- todo: retain prev
-
-- We don't goto the next node of a disc node is created so that we can then treat
-- the pre, post and replace. It's abit of a hack but works out ok for most cases.
@@ -2776,18 +3123,17 @@ local function featuresprocessor(head,font,attr)
local dataset = datasets[s]
featurevalue = dataset[1] -- todo: pass to function instead of using a global
local attribute = dataset[2]
- local chain = dataset[3] -- sequence.chain or 0
+ local sequence = dataset[3] -- sequences[s] -- also dataset[5]
local kind = dataset[4]
- local sequence = dataset[5] -- sequences[s] -- also dataset[5]
+ ----- chain = dataset[5] -- sequence.chain or 0
local rlparmode = 0
local topstack = 0
local success = false
local typ = sequence.type
- local gpossing = typ == "gpos_single" or typ == "gpos_pair"
+ local gpossing = typ == "gpos_single" or typ == "gpos_pair" -- maybe all of them
local subtables = sequence.subtables
local handler = handlers[typ]
-
- if chain < 0 then
+ if typ == "gsub_reversecontextchain" then -- chain < 0
-- this is a limited case, no special treatments like 'init' etc
-- we need to get rid of this slide! probably no longer needed in latest luatex
local start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
@@ -2807,8 +3153,7 @@ local function featuresprocessor(head,font,attr)
local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
- -- local lookupmatch = lookupcache[getchar(start)]
- local lookupmatch = lookupcache[start]
+ local lookupmatch = lookupcache[char]
if lookupmatch then
-- todo: disc?
head, start, success = handler(head,start,kind,lookupname,lookupmatch,sequence,lookuphash,i)
@@ -2836,15 +3181,20 @@ local function featuresprocessor(head,font,attr)
local start = head -- local ?
rlmode = 0 -- to be checked ?
if ns == 1 then -- happens often
- local lookupname = subtables[1]
+ local lookupname = subtables[1]
local lookupcache = lookuphash[lookupname]
if not lookupcache then -- also check for empty cache
report_missing_cache(typ,lookupname)
else
- local function c_run(start) -- no need to check for 256 and attr probably also the same
- local head = start
- local done = false
+ local function c_run(head) -- no need to check for 256 and attr probably also the same
+ local done = false
+ local start = sweephead[head]
+ if start then
+ sweephead[head] = nil
+ else
+ start = head
+ end
while start do
local id = getid(start)
if id ~= glyph_code then
@@ -2931,7 +3281,7 @@ local function featuresprocessor(head,font,attr)
-- sequence kan weg
local h, d, ok = handler(head,prev,kind,lookupname,lookupmatch,sequence,lookuphash,1)
if ok then
- done = true
+ done = true
success = true
end
end
@@ -2957,7 +3307,7 @@ local function featuresprocessor(head,font,attr)
if lookupmatch then
local h, d, ok = handler(sub,n,kind,lookupname,lookupmatch,sequence,lookuphash,1,injection)
if ok then
- done = true
+ done = true
success = true
end
end
@@ -3001,63 +3351,52 @@ local function featuresprocessor(head,font,attr)
start = getnext(start)
end
elseif id == disc_code then
- local discretionary = getsubtype(start) == discretionary_code
- if gpossing then
- if discretionary then
- kernrun(start,k_run)
- else
- discrun(start,d_run,k_run)
- end
- start = getnext(start)
- elseif discretionary then
- if typ == "gsub_ligature" then
- start = testrun(start,t_run,c_run)
- else
- comprun(start,c_run)
- start = getnext(start)
- end
- else
+ if gpossing then
+ kernrun(start,k_run)
+ start = getnext(start)
+ elseif typ == "gsub_ligature" then
+ start = testrun(start,t_run,c_run)
+ else
+ comprun(start,c_run)
start = getnext(start)
- end
- elseif id == whatsit_code then -- will be function
- local subtype = getsubtype(start)
- if subtype == dir_code then
- local dir = getfield(start,"dir")
- if dir == "+TRT" or dir == "+TLT" then
- topstack = topstack + 1
- dirstack[topstack] = dir
- elseif dir == "-TRT" or dir == "-TLT" then
- topstack = topstack - 1
- end
- local newdir = dirstack[topstack]
- if newdir == "+TRT" then
- rlmode = -1
- elseif newdir == "+TLT" then
- rlmode = 1
- else
- rlmode = rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype == localpar_code then
- local dir = getfield(start,"dir")
- if dir == "TRT" then
- rlparmode = -1
- elseif dir == "TLT" then
- rlparmode = 1
- else
- rlparmode = 0
- end
- -- one might wonder if the par dir should be looked at, so we might as well drop the next line
- rlmode = rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
end
- start = getnext(start)
elseif id == math_code then
start = getnext(end_of_math(start))
+ elseif id == dir_code then
+ local dir = getfield(start,"dir")
+ if dir == "+TLT" then
+ topstack = topstack + 1
+ dirstack[topstack] = dir
+ rlmode = 1
+ elseif dir == "+TRT" then
+ topstack = topstack + 1
+ dirstack[topstack] = dir
+ rlmode = -1
+ elseif dir == "-TLT" or dir == "-TRT" then
+ topstack = topstack - 1
+ rlmode = dirstack[topstack] == "+TRT" and -1 or 1
+ else
+ rlmode = rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
+ end
+ start = getnext(start)
+ elseif id == localpar_code then
+ local dir = getfield(start,"dir")
+ if dir == "TRT" then
+ rlparmode = -1
+ elseif dir == "TLT" then
+ rlparmode = 1
+ else
+ rlparmode = 0
+ end
+ -- one might wonder if the par dir should be looked at, so we might as well drop the next line
+ rlmode = rlparmode
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
+ end
+ start = getnext(start)
else
start = getnext(start)
end
@@ -3066,9 +3405,14 @@ local function featuresprocessor(head,font,attr)
else
- local function c_run(start)
- local head = start
- local done = false
+ local function c_run(head)
+ local done = false
+ local start = sweephead[head]
+ if start then
+ sweephead[head] = nil
+ else
+ start = head
+ end
while start do
local id = getid(start)
if id ~= glyph_code then
@@ -3087,7 +3431,6 @@ local function featuresprocessor(head,font,attr)
local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
- -- local lookupmatch = lookupcache[getchar(start)]
local lookupmatch = lookupcache[char]
if lookupmatch then
-- we could move all code inline but that makes things even more unreadable
@@ -3130,7 +3473,7 @@ local function featuresprocessor(head,font,attr)
-- brr prev can be disc
local char = getchar(prev)
for i=1,ns do
- local lookupname = subtables[i]
+ local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
local lookupmatch = lookupcache[char]
@@ -3165,7 +3508,7 @@ local function featuresprocessor(head,font,attr)
if id == glyph_code then
local char = getchar(n)
for i=1,ns do
- local lookupname = subtables[i]
+ local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
local lookupmatch = lookupcache[char]
@@ -3200,7 +3543,7 @@ local function featuresprocessor(head,font,attr)
if a then
local char = getchar(start)
for i=1,ns do
- local lookupname = subtables[i]
+ local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
local lookupmatch = lookupcache[char]
@@ -3245,7 +3588,7 @@ local function featuresprocessor(head,font,attr)
end
if a then
for i=1,ns do
- local lookupname = subtables[i]
+ local lookupname = subtables[i]
local lookupcache = lookuphash[lookupname]
if lookupcache then
local char = getchar(start)
@@ -3278,62 +3621,51 @@ local function featuresprocessor(head,font,attr)
start = getnext(start)
end
elseif id == disc_code then
- local discretionary = getsubtype(start) == discretionary_code
if gpossing then
- if discretionary then
- kernrun(start,k_run)
- else
- discrun(start,d_run,k_run)
- end
+ kernrun(start,k_run)
start = getnext(start)
- elseif discretionary then
- if typ == "gsub_ligature" then
- start = testrun(start,t_run,c_run)
- else
- comprun(start,c_run)
- start = getnext(start)
- end
+ elseif typ == "gsub_ligature" then
+ start = testrun(start,t_run,c_run)
else
+ comprun(start,c_run)
start = getnext(start)
end
- elseif id == whatsit_code then
- local subtype = getsubtype(start)
- if subtype == dir_code then
- local dir = getfield(start,"dir")
- if dir == "+TRT" or dir == "+TLT" then
- topstack = topstack + 1
- dirstack[topstack] = dir
- elseif dir == "-TRT" or dir == "-TLT" then
- topstack = topstack - 1
- end
- local newdir = dirstack[topstack]
- if newdir == "+TRT" then
- rlmode = -1
- elseif newdir == "+TLT" then
- rlmode = 1
- else
- rlmode = rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype == localpar_code then
- local dir = getfield(start,"dir")
- if dir == "TRT" then
- rlparmode = -1
- elseif dir == "TLT" then
- rlparmode = 1
- else
- rlparmode = 0
- end
+ elseif id == math_code then
+ start = getnext(end_of_math(start))
+ elseif id == dir_code then
+ local dir = getfield(start,"dir")
+ if dir == "+TLT" then
+ topstack = topstack + 1
+ dirstack[topstack] = dir
+ rlmode = 1
+ elseif dir == "+TRT" then
+ topstack = topstack + 1
+ dirstack[topstack] = dir
+ rlmode = -1
+ elseif dir == "-TLT" or dir == "-TRT" then
+ topstack = topstack - 1
+ rlmode = dirstack[topstack] == "+TRT" and -1 or 1
+ else
rlmode = rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
+ end
+ start = getnext(start)
+ elseif id == localpar_code then
+ local dir = getfield(start,"dir")
+ if dir == "TRT" then
+ rlparmode = -1
+ elseif dir == "TLT" then
+ rlparmode = 1
+ else
+ rlparmode = 0
+ end
+ rlmode = rlparmode
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
end
start = getnext(start)
- elseif id == math_code then
- start = getnext(end_of_math(start))
else
start = getnext(start)
end
@@ -3354,6 +3686,8 @@ local function featuresprocessor(head,font,attr)
return head, done
end
+-- this might move to the loader
+
local function generic(lookupdata,lookupname,unicode,lookuphash)
local target = lookuphash[lookupname]
if target then
@@ -3363,47 +3697,48 @@ local function generic(lookupdata,lookupname,unicode,lookuphash)
end
end
-local action = {
+local function ligature(lookupdata,lookupname,unicode,lookuphash)
+ local target = lookuphash[lookupname]
+ if not target then
+ target = { }
+ lookuphash[lookupname] = target
+ end
+ for i=1,#lookupdata do
+ local li = lookupdata[i]
+ local tu = target[li]
+ if not tu then
+ tu = { }
+ target[li] = tu
+ end
+ target = tu
+ end
+ target.ligature = unicode
+end
+local function pair(lookupdata,lookupname,unicode,lookuphash)
+ local target = lookuphash[lookupname]
+ if not target then
+ target = { }
+ lookuphash[lookupname] = target
+ end
+ local others = target[unicode]
+ local paired = lookupdata[1]
+ if others then
+ others[paired] = lookupdata
+ else
+ others = { [paired] = lookupdata }
+ target[unicode] = others
+ end
+end
+
+local action = {
substitution = generic,
multiple = generic,
alternate = generic,
position = generic,
-
- ligature = function(lookupdata,lookupname,unicode,lookuphash)
- local target = lookuphash[lookupname]
- if not target then
- target = { }
- lookuphash[lookupname] = target
- end
- for i=1,#lookupdata do
- local li = lookupdata[i]
- local tu = target[li]
- if not tu then
- tu = { }
- target[li] = tu
- end
- target = tu
- end
- target.ligature = unicode
- end,
-
- pair = function(lookupdata,lookupname,unicode,lookuphash)
- local target = lookuphash[lookupname]
- if not target then
- target = { }
- lookuphash[lookupname] = target
- end
- local others = target[unicode]
- local paired = lookupdata[1]
- if others then
- others[paired] = lookupdata
- else
- others = { [paired] = lookupdata }
- target[unicode] = others
- end
- end,
-
+ ligature = ligature,
+ pair = pair,
+ kern = pair,
}
local function prepare_lookups(tfmdata)
@@ -3416,12 +3751,17 @@ local function prepare_lookups(tfmdata)
local lookuptypes = resources.lookuptypes
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
+ local duplicates = resources.duplicates
-- we cannot free the entries in the descriptions as sometimes we access
-- then directly (for instance anchors) ... selectively freeing does save
-- much memory as it's only a reference to a table and the slot in the
-- description hash is not freed anyway
+ -- we can delay this using metatables so that we don't make the hashes for
+ -- features we don't use but then we need to loop over the characters
+ -- many times so we gain nothing
+
for unicode, character in next, characters do -- we cannot loop over descriptions !
local description = descriptions[unicode]
@@ -3431,7 +3771,7 @@ local function prepare_lookups(tfmdata)
local lookups = description.slookups
if lookups then
for lookupname, lookupdata in next, lookups do
- action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash)
+ action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash,duplicates)
end
end
@@ -3441,7 +3781,7 @@ local function prepare_lookups(tfmdata)
local lookuptype = lookuptypes[lookupname]
for l=1,#lookuplist do
local lookupdata = lookuplist[l]
- action[lookuptype](lookupdata,lookupname,unicode,lookuphash)
+ action[lookuptype](lookupdata,lookupname,unicode,lookuphash,duplicates)
end
end
end
@@ -3465,7 +3805,7 @@ local function prepare_lookups(tfmdata)
for name, anchor in next, anchors do
local lookups = anchor_to_lookup[name]
if lookups then
- for lookup, _ in next, lookups do
+ for lookup in next, lookups do
local target = lookuphash[lookup]
if target then
target[unicode] = anchors
@@ -3485,6 +3825,8 @@ local function prepare_lookups(tfmdata)
end
+-- so far
+
local function split(replacement,original)
local result = { }
for i=1,#replacement do
@@ -3493,10 +3835,10 @@ local function split(replacement,original)
return result
end
-local valid = {
- coverage = { chainsub = true, chainpos = true, contextsub = true },
+local valid = { -- does contextpos work?
+ coverage = { chainsub = true, chainpos = true, contextsub = true, contextpos = true },
reversecoverage = { reversesub = true },
- glyphs = { chainsub = true, chainpos = true },
+ glyphs = { chainsub = true, chainpos = true, contextsub = true, contextpos = true },
}
local function prepare_contextchains(tfmdata)
@@ -3560,7 +3902,7 @@ local function prepare_contextchains(tfmdata)
-- use sequence[start] instead but it's somewhat ugly.
nt = nt + 1
t[nt] = { nofrules, lookuptype, sequence, start, stop, rule.lookups, replacements }
- for unic, _ in next, sequence[start] do
+ for unic in next, sequence[start] do
local cu = contexts[unic]
if not cu then
contexts[unic] = t
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-oto.lua b/Master/texmf-dist/tex/context/base/mkiv/font-oto.lua
new file mode 100644
index 00000000000..b7ee717c949
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-oto.lua
@@ -0,0 +1,452 @@
+if not modules then modules = { } end modules ['font-oto'] = { -- original tex
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is a version of font-otb adapted to the new fontloader code. We used to have two
+-- base initialization methods but now we have only one. This means that instead of the
+-- old default (independent) we now use the one more similar to node node (shared).
+
+local concat, unpack = table.concat, table.unpack
+local insert, remove = table.insert, table.remove
+local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
+local type, next, tonumber, tostring, rawget = type, next, tonumber, tostring, rawget
+local lpegmatch = lpeg.match
+local utfchar = utf.char
+
+local trace_baseinit = false trackers.register("otf.baseinit", function(v) trace_baseinit = v end)
+local trace_singles = false trackers.register("otf.singles", function(v) trace_singles = v end)
+local trace_multiples = false trackers.register("otf.multiples", function(v) trace_multiples = v end)
+local trace_alternatives = false trackers.register("otf.alternatives", function(v) trace_alternatives = v end)
+local trace_ligatures = false trackers.register("otf.ligatures", function(v) trace_ligatures = v end)
+----- trace_ligatures_detail = false trackers.register("otf.ligatures.detail", function(v) trace_ligatures_detail = v end)
+local trace_kerns = false trackers.register("otf.kerns", function(v) trace_kerns = v end)
+local trace_preparing = false trackers.register("otf.preparing", function(v) trace_preparing = v end)
+
+local report_prepare = logs.reporter("fonts","otf prepare")
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+
+local otffeatures = otf.features
+local registerotffeature = otffeatures.register
+
+otf.defaultbasealternate = "none" -- first last
+
+local wildcard = "*"
+local default = "dflt"
+
+local formatters = string.formatters
+local f_unicode = formatters["%U"]
+local f_uniname = formatters["%U (%s)"]
+local f_unilist = formatters["% t (% t)"]
+
+local function gref(descriptions,n)
+ if type(n) == "number" then
+ local name = descriptions[n].name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num, nam, j = { }, { }, 0
+ for i=1,#n do
+ local ni = n[i]
+ if tonumber(ni) then -- first is likely a key
+ j = j + 1
+ local di = descriptions[ni]
+ num[j] = f_unicode(ni)
+ nam[j] = di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in base mode tracing>"
+ end
+end
+
+local function cref(feature,sequence)
+ return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
+end
+
+
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
+ report_prepare("%s: base alternate %s => %s (%S => %S)",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ replacement and gref(descriptions,replacement),
+ value,
+ comment)
+end
+
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
+ report_prepare("%s: base substitution %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,substitution))
+end
+
+local function report_ligature(feature,sequence,descriptions,unicode,ligature)
+ report_prepare("%s: base ligature %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,ligature),
+ gref(descriptions,unicode))
+end
+
+local function report_kern(feature,sequence,descriptions,unicode,otherunicode,value)
+ report_prepare("%s: base kern %s + %s => %S",
+ cref(feature,sequence),
+ gref(descriptions,unicode),
+ gref(descriptions,otherunicode),
+ value)
+end
+
+-- We need to make sure that luatex sees the difference between base fonts that have
+-- different glyphs in the same slots in fonts that have the same fullname (or filename).
+-- LuaTeX will merge fonts eventually (and subset later on). If needed we can use a more
+-- verbose name as long as we don't use <()<>[]{}/%> and the length is < 128.
+
+local basehash, basehashes, applied = { }, 1, { }
+
+local function registerbasehash(tfmdata)
+ local properties = tfmdata.properties
+ local hash = concat(applied," ")
+ local base = basehash[hash]
+ if not base then
+ basehashes = basehashes + 1
+ base = basehashes
+ basehash[hash] = base
+ end
+ properties.basehash = base
+ properties.fullname = properties.fullname .. "-" .. base
+ -- report_prepare("fullname base hash '%a, featureset %a",tfmdata.properties.fullname,hash)
+ applied = { }
+end
+
+local function registerbasefeature(feature,value)
+ applied[#applied+1] = feature .. "=" .. tostring(value)
+end
+
+-- The original basemode ligature builder used the names of components and did some expression
+-- juggling to get the chain right. The current variant starts with unicodes but still uses
+-- names to make the chain. This is needed because we have to create intermediates when needed
+-- but use predefined snippets when available. To some extend the current builder is more stupid
+-- but I don't worry that much about it as ligatures are rather predicatable.
+--
+-- Personally I think that an ff + i == ffi rule as used in for instance latin modern is pretty
+-- weird as no sane person will key that in and expect a glyph for that ligature plus the following
+-- character. Anyhow, as we need to deal with this, we do, but no guarantes are given.
+--
+-- latin modern dejavu
+--
+-- f+f 102 102 102 102
+-- f+i 102 105 102 105
+-- f+l 102 108 102 108
+-- f+f+i 102 102 105
+-- f+f+l 102 102 108 102 102 108
+-- ff+i 64256 105 64256 105
+-- ff+l 64256 108
+--
+-- As you can see here, latin modern is less complete than dejavu but
+-- in practice one will not notice it.
+--
+-- The while loop is needed because we need to resolve for instance pseudo names like
+-- hyphen_hyphen to endash so in practice we end up with a bit too many definitions but the
+-- overhead is neglectable. We can have changed[first] or changed[second] but it quickly becomes
+-- messy if we need to take that into account.
+
+local function makefake(tfmdata,name,present)
+ local resources = tfmdata.resources
+ local private = resources.private
+ local character = { intermediate = true, ligatures = { } }
+ resources.unicodes[name] = private
+ tfmdata.characters[private] = character
+ tfmdata.descriptions[private] = { name = name }
+ resources.private = private + 1
+ present[name] = private
+ return character
+end
+
+local function make_1(present,tree,name)
+ for k, v in next, tree do
+ if k == "ligature" then
+ present[name] = v
+ else
+ make_1(present,v,name .. "_" .. k)
+ end
+ end
+end
+
+local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done)
+ for k, v in next, tree do
+ if k == "ligature" then
+ local character = characters[preceding]
+ if not character then
+ if trace_baseinit then
+ report_prepare("weird ligature in lookup %a, current %C, preceding %C",sequence.name,v,preceding)
+ end
+ character = makefake(tfmdata,name,present)
+ end
+ local ligatures = character.ligatures
+ if ligatures then
+ ligatures[unicode] = { char = v }
+ else
+ character.ligatures = { [unicode] = { char = v } }
+ end
+ if done then
+ local d = done[name]
+ if not d then
+ done[name] = { "dummy", v }
+ else
+ d[#d+1] = v
+ end
+ end
+ else
+ local code = present[name] or unicode
+ local name = name .. "_" .. k
+ make_2(present,tfmdata,characters,v,name,code,k,done)
+ end
+ end
+end
+
+local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local resources = tfmdata.resources
+ local changed = tfmdata.changed
+
+ local ligatures = { }
+ local alternate = tonumber(value) or true and 1
+ local defaultalt = otf.defaultbasealternate
+
+ local trace_singles = trace_baseinit and trace_singles
+ local trace_alternatives = trace_baseinit and trace_alternatives
+ local trace_ligatures = trace_baseinit and trace_ligatures
+
+ for i=1,#lookuplist do
+ local sequence = lookuplist[i]
+ local steps = sequence.steps
+ local kind = sequence.type
+ if kind == "gsub_single" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ if not changed[unicode] then
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
+ changed[unicode] = data
+ end
+ end
+ end
+ elseif kind == "gsub_alternate" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ if not changed[unicode] then
+ local replacement = data[alternate]
+ if replacement then
+ changed[unicode] = replacement
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt == "first" then
+ replacement = data[1]
+ changed[unicode] = replacement
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt == "last" then
+ replacement = data[#data]
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
+ end
+ end
+ end
+ elseif kind == "gsub_ligature" then
+ for i=1,#steps do
+ for unicode, data in next, steps[i].coverage do
+ ligatures[#ligatures+1] = { unicode, data, "" } -- lookupname }
+ if trace_ligatures then
+ report_ligature(feature,sequence,descriptions,unicode,data)
+ end
+ end
+ end
+ end
+ end
+
+ local nofligatures = #ligatures
+
+ if nofligatures > 0 then
+
+ local characters = tfmdata.characters
+ local present = { }
+ local done = trace_baseinit and trace_ligatures and { }
+
+ for i=1,nofligatures do
+ local ligature = ligatures[i]
+ local unicode, tree = ligature[1], ligature[2]
+ make_1(present,tree,"ctx_"..unicode)
+ end
+
+ for i=1,nofligatures do
+ local ligature = ligatures[i]
+ local unicode, tree, lookupname = ligature[1], ligature[2], ligature[3]
+ make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,sequence)
+ end
+
+ end
+
+end
+
+local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ local characters = tfmdata.characters
+ local descriptions = tfmdata.descriptions
+ local resources = tfmdata.resources
+ local properties = tfmdata.properties
+ local traceindeed = trace_baseinit and trace_kerns
+ -- check out this sharedkerns trickery
+ for i=1,#lookuplist do
+ local sequence = lookuplist[i]
+ local steps = sequence.steps
+ local kind = sequence.type
+ local format = sequence.format
+ if kind == "gpos_pair" then
+ for i=1,#steps do
+ local step = steps[i]
+ if step.format == "kern" then
+ for unicode, data in next, steps[i].coverage do
+ local character = characters[unicode]
+ local kerns = character.kerns
+ if not kerns then
+ kerns = { }
+ character.kerns = kerns
+ end
+ if traceindeed then
+ for otherunicode, kern in next, data do
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ else
+ for otherunicode, kern in next, data do
+ if not kerns[otherunicode] and kern ~= 0 then
+ kerns[otherunicode] = kern
+ end
+ end
+ end
+ end
+ else
+ for unicode, data in next, steps[i].coverage do
+ local character = characters[unicode]
+ local kerns = character.kerns
+ for otherunicode, kern in next, data do
+ if not kern[2] and not (kerns and kerns[otherunicode]) then
+ local kern = kern[1]
+ if kern[1] ~= 0 or kern[2] ~= 0 or kern[4] ~= 0 then
+ -- a complex pair not suitable for basemode
+ else
+ kern = kern[3]
+ if kern ~= 0 then
+ if kerns then
+ kerns[otherunicode] = kern
+ else
+ kerns = { [otherunicode] = kern }
+ character.kerns = kerns
+ end
+ if traceindeed then
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+end
+
+local function initializehashes(tfmdata)
+ -- already done
+end
+
+local function featuresinitializer(tfmdata,value)
+ if true then -- value then
+ local starttime = trace_preparing and os.clock()
+ local features = tfmdata.shared.features
+ local fullname = tfmdata.properties.fullname or "?"
+ if features then
+ initializehashes(tfmdata)
+ local collectlookups = otf.collectlookups
+ local rawdata = tfmdata.shared.rawdata
+ local properties = tfmdata.properties
+ local script = properties.script
+ local language = properties.language
+ local rawfeatures = rawdata.resources.features
+ local basesubstitutions = rawfeatures and rawfeatures.gsub
+ local basepositionings = rawfeatures and rawfeatures.gpos
+ --
+ if basesubstitutions or basepositionings then
+ local sequences = tfmdata.resources.sequences
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local sfeatures = sequence.features
+ if sfeatures then
+ local order = sequence.order
+ if order then
+ for i=1,#order do --
+ local feature = order[i]
+ local value = features[feature]
+ if value then
+ local validlookups, lookuplist = collectlookups(rawdata,feature,script,language)
+ if not validlookups then
+ -- skip
+ elseif basesubstitutions and basesubstitutions[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %s feature %a for %a with value %a","sub",feature,fullname,value)
+ end
+ preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ elseif basepositionings and basepositionings[feature] then
+ if trace_preparing then
+ report_prepare("filtering base %a feature %a for %a with value %a","pos",feature,fullname,value)
+ end
+ preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
+ registerbasefeature(feature,value)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ --
+ registerbasehash(tfmdata)
+ end
+ if trace_preparing then
+ report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,fullname)
+ end
+ end
+end
+
+registerotffeature {
+ name = "features",
+ description = "features",
+ default = true,
+ initializers = {
+ -- position = 1, -- after setscript (temp hack ... we need to force script / language to 1
+ base = featuresinitializer,
+ }
+}
diff --git a/Master/texmf-dist/tex/context/base/font-otp.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otp.lua
index ebf36ed45d0..91bd05b322f 100644
--- a/Master/texmf-dist/tex/context/base/font-otp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otp.lua
@@ -12,9 +12,8 @@ if not modules then modules = { } end modules ['font-otp'] = {
--
-- unless we sort all hashes we can get a different pack order (no big deal but size can differ)
-local next, type = next, type
+local next, type, tostring = next, type, tostring
local sort, concat = table.sort, table.concat
-local sortedhash = table.sortedhash
local trace_packing = false trackers.register("otf.packing", function(v) trace_packing = v end)
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -148,6 +147,7 @@ end
-- we then need to sort more thanks to random hashing
local function packdata(data)
+
if data then
-- stripdata(data)
local h, t, c = { }, { }, { }
@@ -537,6 +537,7 @@ local unpacked_mt = {
}
local function unpackdata(data)
+
if data then
local tables = data.tables
if tables then
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-otr.lua b/Master/texmf-dist/tex/context/base/mkiv/font-otr.lua
new file mode 100644
index 00000000000..a9ad73906c5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-otr.lua
@@ -0,0 +1,2335 @@
+if not modules then modules = { } end modules ['font-otr'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- When looking into a cid font relates issue in the ff library I wondered if
+-- it made sense to use Lua to filter the information from the otf and ttf
+-- files. Quite some ff code relates to special fonts and in practice we only
+-- use rather normal opentype fonts.
+--
+-- The code here is based on the documentation (and examples) at the microsoft
+-- website. The code will be extended and improved stepwise. After some experiments
+-- I decided to convert to a format more suitable for the context font handler
+-- because it makes no sense to rehash all those lookups again.
+--
+-- Currently we can use this code for getting basic info about the font, loading
+-- shapes and loading the extensive table. I'm not sure if I will provide a ff
+-- compatible output as well (We're not that far from it as currently I can load
+-- all data reasonable fast.)
+
+-- We can omit redundant glyphs names i.e. ones that match the agl or
+-- are just a unicode string but it doesn't save that much. It will be an option
+-- some day.
+
+-- Optimizing the widths wil be done anyway as it save quite some on a cjk font
+-- and the existing (old) code if okay.
+
+-- todo: more messages (only if really needed)
+--
+-- considered, in math:
+--
+-- start -> first (so we can skip the first same-size one)
+-- end -> last
+--
+-- Widths and weights are kind of messy: for instance lmmonolt has a pfmweight of
+-- 400 while it should be 300. So, for now we mostly stick to the old compromis.
+
+-- We don't really need all those language tables so they might be dropped some
+-- day.
+
+-- The new reader is faster on some aspects and slower on other. The memory footprint
+-- is lower. The string reader is a bit faster than the file reader. The new reader
+-- gives more efficient tables and has bit more analysis. In practice these times are
+-- not that relevant because we cache. The otf files take a it more time because we
+-- need to calculate the boundingboxes. In theory the processing of text should be
+-- somewhat faster especially for complex fonts with many lookups.
+--
+-- old new str reader
+-- lmroman12-regular.otf 0.103 0.203 0.195
+-- latinmodern-math.otf 0.454 0.768 0.712
+-- husayni.ttf 1.142 1.526 1.259
+--
+-- If there is demand I will consider making a ff compatible table dumper but it's
+-- probably more fun to provide a way to show features applied.
+
+-- I experimented a bit with f:readbyte(n) and f:readshort() and so and it is indeed
+-- faster but it might not be the real bottleneck as we still need to juggle data. It
+-- is probably more memory efficient as no intermediate strings are involved.
+
+-- if not characters then
+-- require("char-def")
+-- require("char-ini")
+-- end
+
+local next, type, unpack = next, type, unpack
+local byte, lower, char, strip, gsub = string.byte, string.lower, string.char, string.strip, string.gsub
+local bittest = bit32.btest
+local concat, remove, unpack, fastcopy = table.concat, table.remov, table.unpack, table.fastcopy
+local floor, mod, abs, sqrt, round = math.floor, math.mod, math.abs, math.sqrt, math.round
+local P, R, S, C, Cs, Cc, Ct, Carg, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg, lpeg.Cmt
+local lpegmatch = lpeg.match
+
+local setmetatableindex = table.setmetatableindex
+local formatters = string.formatters
+local sortedkeys = table.sortedkeys
+local sortedhash = table.sortedhash
+local stripstring = string.strip
+local utf16_to_utf8_be = utf.utf16_to_utf8_be
+
+local report = logs.reporter("otf reader")
+
+local trace_cmap = false -- only for checking issues
+
+fonts = fonts or { }
+local handlers = fonts.handlers or { }
+fonts.handlers = handlers
+local otf = handlers.otf or { }
+handlers.otf = otf
+local readers = otf.readers or { }
+otf.readers = readers
+
+----- streamreader = utilities.streams -- faster on big files
+local streamreader = utilities.files -- faster on identify
+
+readers.streamreader = streamreader
+
+local openfile = streamreader.open
+local closefile = streamreader.close
+local skipbytes = streamreader.skip
+local setposition = streamreader.setposition
+local skipshort = streamreader.skipshort
+local readbytes = streamreader.readbytes
+local readstring = streamreader.readstring
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readuint = streamreader.readcardinal3 -- 24-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readchar = streamreader.readinteger1 -- 8-bit signed integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local readlong = streamreader.readinteger4 -- 24-bit unsigned integer
+local readfixed = streamreader.readfixed4
+local readfword = readshort -- 16-bit signed integer that describes a quantity in FUnits
+local readufword = readushort -- 16-bit unsigned integer that describes a quantity in FUnits
+local readoffset = readushort
+local read2dot14 = streamreader.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
+
+function streamreader.readtag(f)
+ return lower(strip(readstring(f,4)))
+end
+
+-- date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a
+-- signed 64-bit integer
+
+local function readlongdatetime(f)
+ local a, b, c, d, e, f, g, h = readbytes(f,8)
+ return 0x100000000 * d + 0x1000000 * e + 0x10000 * f + 0x100 * g + h
+end
+
+local tableversion = 0.004
+local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+
+readers.tableversion = tableversion
+
+local reportedskipped = { }
+
+local function reportskippedtable(tag)
+ if not reportedskipped[tag] then
+ report("loading of table %a skipped (reported once only)",tag)
+ reportedskipped[tag] = true
+ end
+end
+
+-- We have quite some data tables. We are somewhat ff compatible with names but as I used
+-- the information from the microsoft site there can be differences. Eventually I might end
+-- up with a different ordering and naming.
+
+local reservednames = { [0] =
+ "copyright",
+ "family",
+ "subfamily",
+ "uniqueid",
+ "fullname",
+ "version",
+ "postscriptname",
+ "trademark",
+ "manufacturer",
+ "designer",
+ "description", -- descriptor in ff
+ "vendorurl",
+ "designerurl",
+ "license",
+ "licenseurl",
+ "reserved",
+ "typographicfamily", -- preffamilyname
+ "typographicsubfamily", -- prefmodifiers
+ "compatiblefullname", -- for mac
+ "sampletext",
+ "cidfindfontname",
+ "wwsfamily",
+ "wwssubfamily",
+ "lightbackgroundpalette",
+ "darkbackgroundpalette",
+}
+
+-- more at: https://www.microsoft.com/typography/otspec/name.htm
+
+-- setmetatableindex(reservednames,function(t,k)
+-- local v = "name_" .. k
+-- t[k] = v
+-- return v
+-- end)
+
+local platforms = { [0] =
+ "unicode",
+ "macintosh",
+ "iso",
+ "windows",
+ "custom",
+}
+
+local encodings = {
+ -- these stay:
+ unicode = { [0] =
+ "unicode 1.0 semantics",
+ "unicode 1.1 semantics",
+ "iso/iec 10646",
+ "unicode 2.0 bmp", -- cmap subtable formats 0, 4, 6
+ "unicode 2.0 full", -- cmap subtable formats 0, 4, 6, 10, 12
+ "unicode variation sequences", -- cmap subtable format 14).
+ "unicode full repertoire", -- cmap subtable formats 0, 4, 6, 10, 12, 13
+ },
+ -- these can go:
+ macintosh = { [0] =
+ "roman", "japanese", "chinese (traditional)", "korean", "arabic", "hebrew", "greek", "russian",
+ "rsymbol", "devanagari", "gurmukhi", "gujarati", "oriya", "bengali", "tamil", "telugu", "kannada",
+ "malayalam", "sinhalese", "burmese", "khmer", "thai", "laotian", "georgian", "armenian",
+ "chinese (simplified)", "tibetan", "mongolian", "geez", "slavic", "vietnamese", "sindhi",
+ "uninterpreted",
+ },
+ -- these stay:
+ iso = { [0] =
+ "7-bit ascii",
+ "iso 10646",
+ "iso 8859-1",
+ },
+ -- these stay:
+ windows = { [0] =
+ "symbol",
+ "unicode bmp", -- this is utf16
+ "shiftjis",
+ "prc",
+ "big5",
+ "wansung",
+ "johab",
+ "reserved 7",
+ "reserved 8",
+ "reserved 9",
+ "unicode ucs-4",
+ },
+ custom = {
+ --custom: 0-255 : otf windows nt compatibility mapping
+ }
+}
+
+local decoders = {
+ unicode = { },
+ macintosh = { },
+ iso = { },
+ windows = {
+ -- maybe always utf16
+ ["unicode semantics"] = utf16_to_utf8_be,
+ ["unicode bmp"] = utf16_to_utf8_be,
+ ["unicode full"] = utf16_to_utf8_be,
+ ["unicode 1.0 semantics"] = utf16_to_utf8_be,
+ ["unicode 1.1 semantics"] = utf16_to_utf8_be,
+ ["unicode 2.0 bmp"] = utf16_to_utf8_be,
+ ["unicode 2.0 full"] = utf16_to_utf8_be,
+ ["unicode variation sequences"] = utf16_to_utf8_be,
+ ["unicode full repertoire"] = utf16_to_utf8_be,
+ },
+ custom = { },
+}
+
+-- This is bit over the top as we can just look for either windows, unicode or macintosh
+-- names (in that order). A font with no english name is probably a weird one anyway.
+
+local languages = {
+ -- these stay:
+ unicode = {
+ [ 0] = "english",
+ },
+ -- english can stay:
+ macintosh = {
+ [ 0] = "english",
+ -- [ 1] = "french",
+ -- [ 2] = "german",
+ -- [ 3] = "italian",
+ -- [ 4] = "dutch",
+ -- [ 5] = "swedish",
+ -- [ 6] = "spanish",
+ -- [ 7] = "danish",
+ -- [ 8] = "portuguese",
+ -- [ 9] = "norwegian",
+ -- [ 10] = "hebrew",
+ -- [ 11] = "japanese",
+ -- [ 12] = "arabic",
+ -- [ 13] = "finnish",
+ -- [ 14] = "greek",
+ -- [ 15] = "icelandic",
+ -- [ 16] = "maltese",
+ -- [ 17] = "turkish",
+ -- [ 18] = "croatian",
+ -- [ 19] = "chinese (traditional)",
+ -- [ 20] = "urdu",
+ -- [ 21] = "hindi",
+ -- [ 22] = "thai",
+ -- [ 23] = "korean",
+ -- [ 24] = "lithuanian",
+ -- [ 25] = "polish",
+ -- [ 26] = "hungarian",
+ -- [ 27] = "estonian",
+ -- [ 28] = "latvian",
+ -- [ 29] = "sami",
+ -- [ 30] = "faroese",
+ -- [ 31] = "farsi/persian",
+ -- [ 32] = "russian",
+ -- [ 33] = "chinese (simplified)",
+ -- [ 34] = "flemish",
+ -- [ 35] = "irish gaelic",
+ -- [ 36] = "albanian",
+ -- [ 37] = "romanian",
+ -- [ 38] = "czech",
+ -- [ 39] = "slovak",
+ -- [ 40] = "slovenian",
+ -- [ 41] = "yiddish",
+ -- [ 42] = "serbian",
+ -- [ 43] = "macedonian",
+ -- [ 44] = "bulgarian",
+ -- [ 45] = "ukrainian",
+ -- [ 46] = "byelorussian",
+ -- [ 47] = "uzbek",
+ -- [ 48] = "kazakh",
+ -- [ 49] = "azerbaijani (cyrillic script)",
+ -- [ 50] = "azerbaijani (arabic script)",
+ -- [ 51] = "armenian",
+ -- [ 52] = "georgian",
+ -- [ 53] = "moldavian",
+ -- [ 54] = "kirghiz",
+ -- [ 55] = "tajiki",
+ -- [ 56] = "turkmen",
+ -- [ 57] = "mongolian (mongolian script)",
+ -- [ 58] = "mongolian (cyrillic script)",
+ -- [ 59] = "pashto",
+ -- [ 60] = "kurdish",
+ -- [ 61] = "kashmiri",
+ -- [ 62] = "sindhi",
+ -- [ 63] = "tibetan",
+ -- [ 64] = "nepali",
+ -- [ 65] = "sanskrit",
+ -- [ 66] = "marathi",
+ -- [ 67] = "bengali",
+ -- [ 68] = "assamese",
+ -- [ 69] = "gujarati",
+ -- [ 70] = "punjabi",
+ -- [ 71] = "oriya",
+ -- [ 72] = "malayalam",
+ -- [ 73] = "kannada",
+ -- [ 74] = "tamil",
+ -- [ 75] = "telugu",
+ -- [ 76] = "sinhalese",
+ -- [ 77] = "burmese",
+ -- [ 78] = "khmer",
+ -- [ 79] = "lao",
+ -- [ 80] = "vietnamese",
+ -- [ 81] = "indonesian",
+ -- [ 82] = "tagalong",
+ -- [ 83] = "malay (roman script)",
+ -- [ 84] = "malay (arabic script)",
+ -- [ 85] = "amharic",
+ -- [ 86] = "tigrinya",
+ -- [ 87] = "galla",
+ -- [ 88] = "somali",
+ -- [ 89] = "swahili",
+ -- [ 90] = "kinyarwanda/ruanda",
+ -- [ 91] = "rundi",
+ -- [ 92] = "nyanja/chewa",
+ -- [ 93] = "malagasy",
+ -- [ 94] = "esperanto",
+ -- [128] = "welsh",
+ -- [129] = "basque",
+ -- [130] = "catalan",
+ -- [131] = "latin",
+ -- [132] = "quenchua",
+ -- [133] = "guarani",
+ -- [134] = "aymara",
+ -- [135] = "tatar",
+ -- [136] = "uighur",
+ -- [137] = "dzongkha",
+ -- [138] = "javanese (roman script)",
+ -- [139] = "sundanese (roman script)",
+ -- [140] = "galician",
+ -- [141] = "afrikaans",
+ -- [142] = "breton",
+ -- [143] = "inuktitut",
+ -- [144] = "scottish gaelic",
+ -- [145] = "manx gaelic",
+ -- [146] = "irish gaelic (with dot above)",
+ -- [147] = "tongan",
+ -- [148] = "greek (polytonic)",
+ -- [149] = "greenlandic",
+ -- [150] = "azerbaijani (roman script)",
+ },
+ -- these can stay:
+ iso = {
+ },
+ -- english can stay:
+ windows = {
+ -- [0x0436] = "afrikaans - south africa",
+ -- [0x041c] = "albanian - albania",
+ -- [0x0484] = "alsatian - france",
+ -- [0x045e] = "amharic - ethiopia",
+ -- [0x1401] = "arabic - algeria",
+ -- [0x3c01] = "arabic - bahrain",
+ -- [0x0c01] = "arabic - egypt",
+ -- [0x0801] = "arabic - iraq",
+ -- [0x2c01] = "arabic - jordan",
+ -- [0x3401] = "arabic - kuwait",
+ -- [0x3001] = "arabic - lebanon",
+ -- [0x1001] = "arabic - libya",
+ -- [0x1801] = "arabic - morocco",
+ -- [0x2001] = "arabic - oman",
+ -- [0x4001] = "arabic - qatar",
+ -- [0x0401] = "arabic - saudi arabia",
+ -- [0x2801] = "arabic - syria",
+ -- [0x1c01] = "arabic - tunisia",
+ -- [0x3801] = "arabic - u.a.e.",
+ -- [0x2401] = "arabic - yemen",
+ -- [0x042b] = "armenian - armenia",
+ -- [0x044d] = "assamese - india",
+ -- [0x082c] = "azeri (cyrillic) - azerbaijan",
+ -- [0x042c] = "azeri (latin) - azerbaijan",
+ -- [0x046d] = "bashkir - russia",
+ -- [0x042d] = "basque - basque",
+ -- [0x0423] = "belarusian - belarus",
+ -- [0x0845] = "bengali - bangladesh",
+ -- [0x0445] = "bengali - india",
+ -- [0x201a] = "bosnian (cyrillic) - bosnia and herzegovina",
+ -- [0x141a] = "bosnian (latin) - bosnia and herzegovina",
+ -- [0x047e] = "breton - france",
+ -- [0x0402] = "bulgarian - bulgaria",
+ -- [0x0403] = "catalan - catalan",
+ -- [0x0c04] = "chinese - hong kong s.a.r.",
+ -- [0x1404] = "chinese - macao s.a.r.",
+ -- [0x0804] = "chinese - people's republic of china",
+ -- [0x1004] = "chinese - singapore",
+ -- [0x0404] = "chinese - taiwan",
+ -- [0x0483] = "corsican - france",
+ -- [0x041a] = "croatian - croatia",
+ -- [0x101a] = "croatian (latin) - bosnia and herzegovina",
+ -- [0x0405] = "czech - czech republic",
+ -- [0x0406] = "danish - denmark",
+ -- [0x048c] = "dari - afghanistan",
+ -- [0x0465] = "divehi - maldives",
+ -- [0x0813] = "dutch - belgium",
+ -- [0x0413] = "dutch - netherlands",
+ -- [0x0c09] = "english - australia",
+ -- [0x2809] = "english - belize",
+ -- [0x1009] = "english - canada",
+ -- [0x2409] = "english - caribbean",
+ -- [0x4009] = "english - india",
+ -- [0x1809] = "english - ireland",
+ -- [0x2009] = "english - jamaica",
+ -- [0x4409] = "english - malaysia",
+ -- [0x1409] = "english - new zealand",
+ -- [0x3409] = "english - republic of the philippines",
+ -- [0x4809] = "english - singapore",
+ -- [0x1c09] = "english - south africa",
+ -- [0x2c09] = "english - trinidad and tobago",
+ -- [0x0809] = "english - united kingdom",
+ [0x0409] = "english - united states",
+ -- [0x3009] = "english - zimbabwe",
+ -- [0x0425] = "estonian - estonia",
+ -- [0x0438] = "faroese - faroe islands",
+ -- [0x0464] = "filipino - philippines",
+ -- [0x040b] = "finnish - finland",
+ -- [0x080c] = "french - belgium",
+ -- [0x0c0c] = "french - canada",
+ -- [0x040c] = "french - france",
+ -- [0x140c] = "french - luxembourg",
+ -- [0x180c] = "french - principality of monoco",
+ -- [0x100c] = "french - switzerland",
+ -- [0x0462] = "frisian - netherlands",
+ -- [0x0456] = "galician - galician",
+ -- [0x0437] = "georgian -georgia",
+ -- [0x0c07] = "german - austria",
+ -- [0x0407] = "german - germany",
+ -- [0x1407] = "german - liechtenstein",
+ -- [0x1007] = "german - luxembourg",
+ -- [0x0807] = "german - switzerland",
+ -- [0x0408] = "greek - greece",
+ -- [0x046f] = "greenlandic - greenland",
+ -- [0x0447] = "gujarati - india",
+ -- [0x0468] = "hausa (latin) - nigeria",
+ -- [0x040d] = "hebrew - israel",
+ -- [0x0439] = "hindi - india",
+ -- [0x040e] = "hungarian - hungary",
+ -- [0x040f] = "icelandic - iceland",
+ -- [0x0470] = "igbo - nigeria",
+ -- [0x0421] = "indonesian - indonesia",
+ -- [0x045d] = "inuktitut - canada",
+ -- [0x085d] = "inuktitut (latin) - canada",
+ -- [0x083c] = "irish - ireland",
+ -- [0x0434] = "isixhosa - south africa",
+ -- [0x0435] = "isizulu - south africa",
+ -- [0x0410] = "italian - italy",
+ -- [0x0810] = "italian - switzerland",
+ -- [0x0411] = "japanese - japan",
+ -- [0x044b] = "kannada - india",
+ -- [0x043f] = "kazakh - kazakhstan",
+ -- [0x0453] = "khmer - cambodia",
+ -- [0x0486] = "k'iche - guatemala",
+ -- [0x0487] = "kinyarwanda - rwanda",
+ -- [0x0441] = "kiswahili - kenya",
+ -- [0x0457] = "konkani - india",
+ -- [0x0412] = "korean - korea",
+ -- [0x0440] = "kyrgyz - kyrgyzstan",
+ -- [0x0454] = "lao - lao p.d.r.",
+ -- [0x0426] = "latvian - latvia",
+ -- [0x0427] = "lithuanian - lithuania",
+ -- [0x082e] = "lower sorbian - germany",
+ -- [0x046e] = "luxembourgish - luxembourg",
+ -- [0x042f] = "macedonian (fyrom) - former yugoslav republic of macedonia",
+ -- [0x083e] = "malay - brunei darussalam",
+ -- [0x043e] = "malay - malaysia",
+ -- [0x044c] = "malayalam - india",
+ -- [0x043a] = "maltese - malta",
+ -- [0x0481] = "maori - new zealand",
+ -- [0x047a] = "mapudungun - chile",
+ -- [0x044e] = "marathi - india",
+ -- [0x047c] = "mohawk - mohawk",
+ -- [0x0450] = "mongolian (cyrillic) - mongolia",
+ -- [0x0850] = "mongolian (traditional) - people's republic of china",
+ -- [0x0461] = "nepali - nepal",
+ -- [0x0414] = "norwegian (bokmal) - norway",
+ -- [0x0814] = "norwegian (nynorsk) - norway",
+ -- [0x0482] = "occitan - france",
+ -- [0x0448] = "odia (formerly oriya) - india",
+ -- [0x0463] = "pashto - afghanistan",
+ -- [0x0415] = "polish - poland",
+ -- [0x0416] = "portuguese - brazil",
+ -- [0x0816] = "portuguese - portugal",
+ -- [0x0446] = "punjabi - india",
+ -- [0x046b] = "quechua - bolivia",
+ -- [0x086b] = "quechua - ecuador",
+ -- [0x0c6b] = "quechua - peru",
+ -- [0x0418] = "romanian - romania",
+ -- [0x0417] = "romansh - switzerland",
+ -- [0x0419] = "russian - russia",
+ -- [0x243b] = "sami (inari) - finland",
+ -- [0x103b] = "sami (lule) - norway",
+ -- [0x143b] = "sami (lule) - sweden",
+ -- [0x0c3b] = "sami (northern) - finland",
+ -- [0x043b] = "sami (northern) - norway",
+ -- [0x083b] = "sami (northern) - sweden",
+ -- [0x203b] = "sami (skolt) - finland",
+ -- [0x183b] = "sami (southern) - norway",
+ -- [0x1c3b] = "sami (southern) - sweden",
+ -- [0x044f] = "sanskrit - india",
+ -- [0x1c1a] = "serbian (cyrillic) - bosnia and herzegovina",
+ -- [0x0c1a] = "serbian (cyrillic) - serbia",
+ -- [0x181a] = "serbian (latin) - bosnia and herzegovina",
+ -- [0x081a] = "serbian (latin) - serbia",
+ -- [0x046c] = "sesotho sa leboa - south africa",
+ -- [0x0432] = "setswana - south africa",
+ -- [0x045b] = "sinhala - sri lanka",
+ -- [0x041b] = "slovak - slovakia",
+ -- [0x0424] = "slovenian - slovenia",
+ -- [0x2c0a] = "spanish - argentina",
+ -- [0x400a] = "spanish - bolivia",
+ -- [0x340a] = "spanish - chile",
+ -- [0x240a] = "spanish - colombia",
+ -- [0x140a] = "spanish - costa rica",
+ -- [0x1c0a] = "spanish - dominican republic",
+ -- [0x300a] = "spanish - ecuador",
+ -- [0x440a] = "spanish - el salvador",
+ -- [0x100a] = "spanish - guatemala",
+ -- [0x480a] = "spanish - honduras",
+ -- [0x080a] = "spanish - mexico",
+ -- [0x4c0a] = "spanish - nicaragua",
+ -- [0x180a] = "spanish - panama",
+ -- [0x3c0a] = "spanish - paraguay",
+ -- [0x280a] = "spanish - peru",
+ -- [0x500a] = "spanish - puerto rico",
+ -- [0x0c0a] = "spanish (modern sort) - spain",
+ -- [0x040a] = "spanish (traditional sort) - spain",
+ -- [0x540a] = "spanish - united states",
+ -- [0x380a] = "spanish - uruguay",
+ -- [0x200a] = "spanish - venezuela",
+ -- [0x081d] = "sweden - finland",
+ -- [0x041d] = "swedish - sweden",
+ -- [0x045a] = "syriac - syria",
+ -- [0x0428] = "tajik (cyrillic) - tajikistan",
+ -- [0x085f] = "tamazight (latin) - algeria",
+ -- [0x0449] = "tamil - india",
+ -- [0x0444] = "tatar - russia",
+ -- [0x044a] = "telugu - india",
+ -- [0x041e] = "thai - thailand",
+ -- [0x0451] = "tibetan - prc",
+ -- [0x041f] = "turkish - turkey",
+ -- [0x0442] = "turkmen - turkmenistan",
+ -- [0x0480] = "uighur - prc",
+ -- [0x0422] = "ukrainian - ukraine",
+ -- [0x042e] = "upper sorbian - germany",
+ -- [0x0420] = "urdu - islamic republic of pakistan",
+ -- [0x0843] = "uzbek (cyrillic) - uzbekistan",
+ -- [0x0443] = "uzbek (latin) - uzbekistan",
+ -- [0x042a] = "vietnamese - vietnam",
+ -- [0x0452] = "welsh - united kingdom",
+ -- [0x0488] = "wolof - senegal",
+ -- [0x0485] = "yakut - russia",
+ -- [0x0478] = "yi - prc",
+ -- [0x046a] = "yoruba - nigeria",
+ },
+ custom = {
+ },
+}
+
+local standardromanencoding = { [0] = -- taken from wikipedia
+ "notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl",
+ "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft",
+ "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
+ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
+ "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at",
+ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
+ "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft",
+ "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b",
+ "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q",
+ "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar",
+ "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute",
+ "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex",
+ "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave",
+ "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis",
+ "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute",
+ "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling",
+ "section", "bullet", "paragraph", "germandbls", "registered", "copyright",
+ "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity",
+ "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff",
+ "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine",
+ "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot",
+ "radical", "florin", "approxequal", "Delta", "guillemotleft",
+ "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde",
+ "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright",
+ "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis",
+ "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl",
+ "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase",
+ "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave",
+ "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
+ "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi",
+ "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla",
+ "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron",
+ "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn",
+ "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior",
+ "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve",
+ "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron",
+ "dcroat",
+}
+
+local weights = {
+ [100] = "thin",
+ [200] = "extralight",
+ [300] = "light",
+ [400] = "normal",
+ [500] = "medium",
+ [600] = "semibold",
+ [700] = "bold",
+ [800] = "extrabold",
+ [900] = "black",
+}
+
+local widths = {
+ [1] = "ultracondensed",
+ [2] = "extracondensed",
+ [3] = "condensed",
+ [4] = "semicondensed",
+ [5] = "normal",
+ [6] = "semiexpanded",
+ [7] = "expanded",
+ [8] = "extraexpanded",
+ [9] = "ultraexpanded",
+}
+
+setmetatableindex(weights, function(t,k)
+ local r = floor((k + 50) / 100) * 100
+ local v = (r > 900 and "black") or rawget(t,r) or "normal"
+-- print("weight:",k,r,v)
+ return v
+end)
+
+setmetatableindex(widths,function(t,k)
+-- print("width:",k)
+ return "normal"
+end)
+
+local panoseweights = {
+ [ 0] = "normal",
+ [ 1] = "normal",
+ [ 2] = "verylight",
+ [ 3] = "light",
+ [ 4] = "thin",
+ [ 5] = "book",
+ [ 6] = "medium",
+ [ 7] = "demi",
+ [ 8] = "bold",
+ [ 9] = "heavy",
+ [10] = "black",
+}
+
+local panosewidths = {
+ [ 0] = "normal",
+ [ 1] = "normal",
+ [ 2] = "normal",
+ [ 3] = "normal",
+ [ 4] = "normal",
+ [ 5] = "expanded",
+ [ 6] = "condensed",
+ [ 7] = "veryexpanded",
+ [ 8] = "verycondensed",
+ [ 9] = "monospaced",
+}
+
+-- We implement a reader per table.
+
+-- The name table is probably the first one to load. After all this one provides
+-- useful information about what we deal with. The complication is that we need
+-- to filter the best one available.
+
+local platformnames = {
+ postscriptname = true,
+ fullname = true,
+ family = true,
+ subfamily = true,
+ typographicfamily = true,
+ typographicsubfamily = true,
+ compatiblefullname = true,
+}
+
+function readers.name(f,fontdata,specification)
+ local datatable = fontdata.tables.name
+ if datatable then
+ setposition(f,datatable.offset)
+ local format = readushort(f)
+ local nofnames = readushort(f)
+ local offset = readushort(f)
+ -- we can also provide a raw list as extra, todo as option
+ local start = datatable.offset + offset
+ local namelists = {
+ unicode = { },
+ windows = { },
+ macintosh = { },
+ -- iso = { },
+ -- windows = { },
+ }
+ for i=1,nofnames do
+ local platform = platforms[readushort(f)]
+ if platform then
+ local namelist = namelists[platform]
+ if namelist then
+ local encoding = readushort(f)
+ local language = readushort(f)
+ local encodings = encodings[platform]
+ local languages = languages[platform]
+ if encodings and languages then
+ local encoding = encodings[encoding]
+ local language = languages[language]
+ if encoding and language then
+ local name = reservednames[readushort(f)]
+ if name then
+ namelist[#namelist+1] = {
+ platform = platform,
+ encoding = encoding,
+ language = language,
+ name = name,
+ length = readushort(f),
+ offset = start + readushort(f),
+ }
+ else
+ skipshort(f,2)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,5)
+ end
+ else
+ skipshort(f,5)
+ end
+ end
+ -- if format == 1 then
+ -- local noftags = readushort(f)
+ -- for i=1,noftags do
+ -- local length = readushort(f)
+ -- local offset = readushort(f)
+ -- end
+ -- end
+ --
+ -- we need to choose one we like, for instance an unicode one
+ --
+ local names = { }
+ local done = { }
+ --
+ -- there is quite some logic in ff ... hard to follow so we start simple
+ -- and extend when we run into it (todo: proper reverse hash) .. we're only
+ -- interested in english anyway
+ --
+ local function filter(platform,e,l)
+ local namelist = namelists[platform]
+ for i=1,#namelist do
+ local name = namelist[i]
+ local nametag = name.name
+ if not done[nametag] then
+ local encoding = name.encoding
+ local language = name.language
+ if (not e or encoding == e) and (not l or language == l) then
+ setposition(f,name.offset)
+ local content = readstring(f,name.length)
+ local decoder = decoders[platform]
+ if decoder then
+ decoder = decoder[encoding]
+ end
+ if decoder then
+ content = decoder(content)
+ end
+ names[nametag] = {
+ content = content,
+ platform = platform,
+ encoding = encoding,
+ language = language,
+ }
+ done[nametag] = true
+ end
+ end
+ end
+ end
+ --
+ filter("windows","unicode bmp","english - united states")
+ -- filter("unicode") -- which one ?
+ filter("macintosh","roman","english")
+ filter("windows")
+ filter("macintosh")
+ filter("unicode")
+ --
+ fontdata.names = names
+ --
+ if specification.platformnames then
+ local collected = { }
+ for platform, namelist in next, namelists do
+ local filtered = false
+ for i=1,#namelist do
+ local entry = namelist[i]
+ local name = entry.name
+ if platformnames[name] then
+ setposition(f,entry.offset)
+ local content = readstring(f,entry.length)
+ local encoding = entry.encoding
+ local decoder = decoders[platform]
+ if decoder then
+ decoder = decoder[encoding]
+ end
+ if decoder then
+ content = decoder(content)
+ end
+ if filtered then
+ filtered[name] = content
+ else
+ filtered = { [name] = content }
+ end
+ end
+ end
+ if filtered then
+ collected[platform] = filtered
+ end
+ end
+ fontdata.platformnames = collected
+ end
+ else
+ fontdata.names = { }
+ end
+end
+
+----- validutf = lpeg.patterns.utf8character^0 * P(-1)
+local validutf = lpeg.patterns.validutf8
+
+local function getname(fontdata,key)
+ local names = fontdata.names
+ if names then
+ local value = names[key]
+ if value then
+ local content = value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+
+-- This table is an original windows (with its precursor os/2) table. In ff this one is
+-- part of the pfminfo table but here we keep it separate (for now). We will create a
+-- properties table afterwards.
+
+readers["os/2"] = function(f,fontdata)
+ local datatable = fontdata.tables["os/2"]
+ if datatable then
+ setposition(f,datatable.offset)
+ local version = readushort(f)
+ local windowsmetrics = {
+ version = version,
+ averagewidth = readshort(f),
+ weightclass = readushort(f),
+ widthclass = readushort(f),
+ fstype = readushort(f),
+ subscriptxsize = readshort(f),
+ subscriptysize = readshort(f),
+ subscriptxoffset = readshort(f),
+ subscriptyoffset = readshort(f),
+ superscriptxsize = readshort(f),
+ superscriptysize = readshort(f),
+ superscriptxoffset = readshort(f),
+ superscriptyoffset = readshort(f),
+ strikeoutsize = readshort(f),
+ strikeoutpos = readshort(f),
+ familyclass = readshort(f),
+ panose = { readbytes(f,10) },
+ unicoderanges = { readulong(f), readulong(f), readulong(f), readulong(f) },
+ vendor = readstring(f,4),
+ fsselection = readushort(f),
+ firstcharindex = readushort(f),
+ lastcharindex = readushort(f),
+ typoascender = readshort(f),
+ typodescender = readshort(f),
+ typolinegap = readshort(f),
+ winascent = readushort(f),
+ windescent = readushort(f),
+ }
+ if version >= 1 then
+ windowsmetrics.codepageranges = { readulong(f), readulong(f) }
+ end
+ if version >= 3 then
+ windowsmetrics.xheight = readshort(f)
+ windowsmetrics.capheight = readshort(f)
+ windowsmetrics.defaultchar = readushort(f)
+ windowsmetrics.breakchar = readushort(f)
+ -- windowsmetrics.maxcontexts = readushort(f)
+ -- windowsmetrics.loweropticalpointsize = readushort(f)
+ -- windowsmetrics.upperopticalpointsize = readushort(f)
+ end
+ --
+ -- todo: unicoderanges
+ --
+ windowsmetrics.weight = windowsmetrics.weightclass and weights[windowsmetrics.weightclass]
+ windowsmetrics.width = windowsmetrics.widthclass and widths [windowsmetrics.widthclass]
+ --
+ windowsmetrics.panoseweight = panoseweights[windowsmetrics.panose[3]]
+ windowsmetrics.panosewidth = panosewidths [windowsmetrics.panose[4]]
+ --
+ fontdata.windowsmetrics = windowsmetrics
+ else
+ fontdata.windowsmetrics = { }
+ end
+end
+
+readers.head = function(f,fontdata)
+ local datatable = fontdata.tables.head
+ if datatable then
+ setposition(f,datatable.offset)
+ local fontheader = {
+ version = readfixed(f),
+ revision = readfixed(f),
+ checksum = readulong(f),
+ magic = readulong(f),
+ flags = readushort(f),
+ units = readushort(f),
+ created = readlongdatetime(f),
+ modified = readlongdatetime(f),
+ xmin = readshort(f),
+ ymin = readshort(f),
+ xmax = readshort(f),
+ ymax = readshort(f),
+ macstyle = readushort(f),
+ smallpixels = readushort(f),
+ directionhint = readshort(f),
+ indextolocformat = readshort(f),
+ glyphformat = readshort(f),
+ }
+ fontdata.fontheader = fontheader
+ else
+ fontdata.fontheader = { }
+ end
+ fontdata.nofglyphs = 0
+end
+
+-- This table is a rather simple one. No treatment of values is needed here. Most
+-- variables are not used but nofhmetrics is quite important.
+
+readers.hhea = function(f,fontdata,specification)
+ if specification.details then
+ local datatable = fontdata.tables.hhea
+ if datatable then
+ setposition(f,datatable.offset)
+ fontdata.horizontalheader = {
+ version = readfixed(f),
+ ascender = readfword(f),
+ descender = readfword(f),
+ linegap = readfword(f),
+ maxadvancewidth = readufword(f),
+ minleftsidebearing = readfword(f),
+ minrightsidebearing = readfword(f),
+ maxextent = readfword(f),
+ caretsloperise = readshort(f),
+ caretsloperun = readshort(f),
+ caretoffset = readshort(f),
+ reserved_1 = readshort(f),
+ reserved_2 = readshort(f),
+ reserved_3 = readshort(f),
+ reserved_4 = readshort(f),
+ metricdataformat = readshort(f),
+ nofhmetrics = readushort(f),
+ }
+ else
+ fontdata.horizontalheader = {
+ nofhmetrics = 0,
+ }
+ end
+ end
+end
+
+-- We probably never need all these variables, but we do need the nofglyphs when loading other
+-- tables. Again we use the microsoft names but see no reason to have "max" in each name.
+
+-- fontdata.maximumprofile can be bad
+
+readers.maxp = function(f,fontdata,specification)
+ if specification.details then
+ local datatable = fontdata.tables.maxp
+ if datatable then
+ setposition(f,datatable.offset)
+ local version = readfixed(f)
+ local nofglyphs = readushort(f)
+ fontdata.nofglyphs = nofglyphs
+ if version == 0.5 then
+ fontdata.maximumprofile = {
+ version = version,
+ nofglyphs = nofglyphs,
+ }
+ return
+ elseif version == 1.0 then
+ fontdata.maximumprofile = {
+ version = version,
+ nofglyphs = nofglyphs,
+ points = readushort(f),
+ contours = readushort(f),
+ compositepoints = readushort(f),
+ compositecontours = readushort(f),
+ zones = readushort(f),
+ twilightpoints = readushort(f),
+ storage = readushort(f),
+ functiondefs = readushort(f),
+ instructiondefs = readushort(f),
+ stackelements = readushort(f),
+ sizeofinstructions = readushort(f),
+ componentelements = readushort(f),
+ componentdepth = readushort(f),
+ }
+ return
+ end
+ end
+ fontdata.maximumprofile = {
+ version = version,
+ nofglyphs = 0,
+ }
+ end
+end
+
+-- Here we filter the (advance) widths (that can be different from the boundingbox width of
+-- course).
+
+readers.hmtx = function(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable = fontdata.tables.hmtx
+ if datatable then
+ setposition(f,datatable.offset)
+ local nofmetrics = fontdata.horizontalheader.nofhmetrics
+ local glyphs = fontdata.glyphs
+ local nofglyphs = fontdata.nofglyphs
+ local width = 0 -- advance
+ local leftsidebearing = 0
+ for i=0,nofmetrics-1 do
+ local glyph = glyphs[i]
+ width = readshort(f)
+ leftsidebearing = readshort(f)
+ if width ~= 0 then
+ glyph.width = width
+ end
+ -- if leftsidebearing ~= 0 then
+ -- glyph.lsb = leftsidebearing
+ -- end
+ end
+ -- The next can happen in for instance a monospace font or in a cjk font
+ -- with fixed widths.
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph = glyphs[i]
+ if width ~= 0 then
+ glyph.width = width
+ end
+ -- if leftsidebearing ~= 0 then
+ -- glyph.lsb = leftsidebearing
+ -- end
+ end
+ end
+ end
+end
+
+-- The post table relates to postscript (printing) but has some relevant properties for other
+-- usage as well. We just use the names from the microsoft specification. The version 2.0
+-- description is somewhat fuzzy but it is a hybrid with overloads.
+
+readers.post = function(f,fontdata,specification)
+ local datatable = fontdata.tables.post
+ if datatable then
+ setposition(f,datatable.offset)
+ local version = readfixed(f)
+ fontdata.postscript = {
+ version = version,
+ italicangle = round(1000*readfixed(f))/1000,
+ underlineposition = readfword(f),
+ underlinethickness = readfword(f),
+ monospaced = readulong(f),
+ minmemtype42 = readulong(f),
+ maxmemtype42 = readulong(f),
+ minmemtype1 = readulong(f),
+ maxmemtype1 = readulong(f),
+ }
+ if not specification.glyphs then
+ -- enough done
+ elseif version == 1.0 then
+ -- mac encoding (258 glyphs)
+ for index=0,#standardromanencoding do
+ glyphs[index].name = standardromanencoding[index]
+ end
+ elseif version == 2.0 then
+ local glyphs = fontdata.glyphs
+ local nofglyphs = readushort(f)
+ local indices = { }
+ local names = { }
+ local maxnames = 0
+ for i=0,nofglyphs-1 do
+ local nameindex = readushort(f)
+ if nameindex >= 258 then
+ maxnames = maxnames + 1
+ nameindex = nameindex - 257
+ indices[nameindex] = i
+ else
+ glyphs[i].name = standardromanencoding[nameindex]
+ end
+ end
+ for i=1,maxnames do
+ local mapping = indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
+ break
+ else
+ local length = readbyte(f)
+ if length > 0 then
+ glyphs[mapping].name = readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
+ end
+ end
+ elseif version == 2.5 then
+ -- depricated, will be done when needed
+ elseif version == 3.0 then
+ -- no ps name information
+ end
+ else
+ fontdata.postscript = { }
+ end
+end
+
+readers.cff = function(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("cff")
+ end
+end
+
+-- Not all cmaps make sense .. e.g. dfont is obsolete and probably more are not relevant. Let's see
+-- what we run into. There is some weird calculation going on here because we offset in a table
+-- being a blob of memory or file. Anyway, I can't stand lunatic formats like this esp when there
+-- is no real gain.
+
+local formatreaders = { }
+local duplicatestoo = true
+
+local sequence = {
+ { 3, 1, 4 },
+ { 3, 10, 12 },
+ { 0, 3, 4 },
+ { 0, 1, 4 },
+ -- { 0, 4, 12 },
+ { 0, 0, 6 },
+ { 3, 0, 6 },
+ -- variants
+ { 0, 5, 14 },
+ -- last resort ranges
+ { 3, 10, 13 },
+}
+
+-- local sequence = {
+-- { 0, 1, 4 },
+-- { 0, 4, 12 },
+-- { 0, 3, 4 },
+-- { 3, 1, 4 },
+-- { 3, 10, 12 },
+-- { 0, 0, 6 },
+-- { 3, 0, 6 },
+-- -- variants
+-- { 0, 5, 14 },
+-- }
+
+local supported = { }
+
+for i=1,#sequence do
+ local sp, se, sf = unpack(sequence[i])
+ local p = supported[sp]
+ if not p then
+ p = { }
+ supported[sp] = p
+ end
+ local e = p[se]
+ if not e then
+ e = { }
+ p[se] = e
+ end
+ e[sf] = true
+end
+
+formatreaders[4] = function(f,fontdata,offset)
+ setposition(f,offset+2) -- skip format
+ --
+ local length = readushort(f) -- in bytes of subtable
+ local language = readushort(f)
+ local nofsegments = readushort(f) / 2
+ --
+ skipshort(f,3) -- searchrange entryselector rangeshift
+ --
+ local endchars = { }
+ local startchars = { }
+ local deltas = { }
+ local offsets = { }
+ local indices = { }
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
+ local duplicates = fontdata.duplicates
+ local nofdone = 0
+ --
+ for i=1,nofsegments do
+ endchars[i] = readushort(f)
+ end
+ local reserved = readushort(f) -- 0
+ for i=1,nofsegments do
+ startchars[i] = readushort(f)
+ end
+ for i=1,nofsegments do
+ deltas[i] = readshort(f)
+ end
+ for i=1,nofsegments do
+ offsets[i] = readushort(f)
+ end
+ -- format length language nofsegments searchrange entryselector rangeshift 4-tables
+ local size = (length - 2 * 2 - 5 * 2 - 4 * nofsegments * 2) / 2
+ for i=1,size-1 do
+ indices[i] = readushort(f)
+ end
+ --
+ for segment=1,nofsegments do
+ local startchar = startchars[segment]
+ local endchar = endchars[segment]
+ local offset = offsets[segment]
+ local delta = deltas[segment]
+ if startchar == 0xFFFF and endchar == 0xFFFF then
+ -- break
+ elseif startchar == 0xFFFF and offset == 0 then
+ -- break
+ elseif offset == 0xFFFF then
+ -- bad encoding
+ elseif offset == 0 then
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,mod(startchar + delta,65536))
+ end
+ for unicode=startchar,endchar do
+ local index = mod(unicode + delta,65536)
+ if index and index > 0 then
+ local glyph = glyphs[index]
+ if glyph then
+ local gu = glyph.unicode
+ if not gu then
+ glyph.unicode = unicode
+ nofdone = nofdone + 1
+ elseif gu ~= unicode then
+ if duplicatestoo then
+ local d = duplicates[gu]
+ if d then
+ d[unicode] = true
+ else
+ duplicates[gu] = { [unicode] = true }
+ end
+ else
+ -- no duplicates ... weird side effects in lm
+ report("duplicate case 1: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index] = unicode
+ end
+ end
+ end
+ end
+ else
+ local shift = (segment-nofsegments+offset/2) - startchar
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,mod(startchar + delta,65536))
+ end
+ for unicode=startchar,endchar do
+ local slot = shift + unicode
+ local index = indices[slot]
+ if index and index > 0 then
+ index = mod(index + delta,65536)
+ local glyph = glyphs[index]
+ if glyph then
+ local gu = glyph.unicode
+ if not gu then
+ glyph.unicode = unicode
+ nofdone = nofdone + 1
+ elseif gu ~= unicode then
+ if duplicatestoo then
+ local d = duplicates[gu]
+ if d then
+ d[unicode] = true
+ else
+ duplicates[gu] = { [unicode] = true }
+ end
+ else
+ -- no duplicates ... weird side effects in lm
+ report("duplicate case 2: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index] = unicode
+ end
+ end
+ end
+ end
+ end
+ end
+ return nofdone
+end
+
+formatreaders[6] = function(f,fontdata,offset)
+ setposition(f,offset) -- + 2 + 2 + 2 -- skip format length language
+ local format = readushort(f)
+ local length = readushort(f)
+ local language = readushort(f)
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
+ local duplicates = fontdata.duplicates
+ local start = readushort(f)
+ local count = readushort(f)
+ local stop = start+count-1
+ local nofdone = 0
+ if trace_cmap then
+ report("format 6 from %C to %C",2,start,stop)
+ end
+ for unicode=start,stop do
+ local index = readushort(f)
+ if index > 0 then
+ local glyph = glyphs[index]
+ if glyph then
+ local gu = glyph.unicode
+ if not gu then
+ glyph.unicode = unicode
+ nofdone = nofdone + 1
+ elseif gu ~= unicode then
+ -- report("format 6 overloading %C to %C",gu,unicode)
+ -- glyph.unicode = unicode
+ -- no duplicates ... weird side effects in lm
+ end
+ if not mapping[index] then
+ mapping[index] = unicode
+ end
+ end
+ end
+ end
+ return nofdone
+end
+
+formatreaders[12] = function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4) -- skip format reserved length language
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
+ local duplicates = fontdata.duplicates
+ local nofgroups = readulong(f)
+ local nofdone = 0
+ for i=1,nofgroups do
+ local first = readulong(f)
+ local last = readulong(f)
+ local index = readulong(f)
+ if trace_cmap then
+ report("format 12 from %C to %C starts at index %i",first,last,index)
+ end
+ for unicode=first,last do
+ local glyph = glyphs[index]
+ if glyph then
+ local gu = glyph.unicode
+ if not gu then
+ glyph.unicode = unicode
+ nofdone = nofdone + 1
+ elseif gu ~= unicode then
+ -- e.g. sourcehan fonts need this
+ local d = duplicates[gu]
+ if d then
+ d[unicode] = true
+ else
+ duplicates[gu] = { [unicode] = true }
+ end
+ end
+ if not mapping[index] then
+ mapping[index] = unicode
+ end
+ end
+ index = index + 1
+ end
+ end
+ return nofdone
+end
+
+formatreaders[13] = function(f,fontdata,offset)
+ --
+ -- this fector is only used for simple fallback fonts
+ --
+ setposition(f,offset+2+2+4+4) -- skip format reserved length language
+ local mapping = fontdata.mapping
+ local glyphs = fontdata.glyphs
+ local duplicates = fontdata.duplicates
+ local nofgroups = readulong(f)
+ local nofdone = 0
+ for i=1,nofgroups do
+ local first = readulong(f)
+ local last = readulong(f)
+ local index = readulong(f)
+ if first < privateoffset then
+ if trace_cmap then
+ report("format 13 from %C to %C get index %i",first,last,index)
+ end
+ local glyph = glyphs[index]
+ local unicode = glyph.unicode
+ if not unicode then
+ unicode = first
+ glyph.unicode = unicode
+ first = first + 1
+ end
+ local list = duplicates[unicode]
+ mapping[index] = unicode
+ if not list then
+ list = { }
+ duplicates[unicode] = list
+ end
+ if last >= privateoffset then
+ local limit = privateoffset - 1
+ report("format 13 from %C to %C pruned to %C",first,last,limit)
+ last = limit
+ end
+ for unicode=first,last do
+ list[unicode] = true
+ end
+ nofdone = nofdone + last - first + 1
+ else
+ report("format 13 from %C to %C ignored",first,last)
+ end
+ end
+ return nofdone
+end
+
+formatreaders[14] = function(f,fontdata,offset)
+ if offset and offset ~= 0 then
+ setposition(f,offset)
+ local format = readushort(f)
+ local length = readulong(f)
+ local nofrecords = readulong(f)
+ local records = { }
+ local variants = { }
+ local nofdone = 0
+ fontdata.variants = variants
+ for i=1,nofrecords do
+ records[i] = {
+ selector = readuint(f),
+ default = readulong(f), -- default offset
+ other = readulong(f), -- non-default offset
+ }
+ end
+ for i=1,nofrecords do
+ local record = records[i]
+ local selector = record.selector
+ local default = record.default
+ local other = record.other
+ --
+ -- there is no need to map the defaults to themselves
+ --
+ -- if default ~= 0 then
+ -- setposition(f,offset+default)
+ -- local nofranges = readulong(f)
+ -- for i=1,nofranges do
+ -- local start = readuint(f)
+ -- local extra = readbyte(f)
+ -- for i=start,start+extra do
+ -- mapping[i] = i
+ -- end
+ -- end
+ -- end
+ local other = record.other
+ if other ~= 0 then
+ setposition(f,offset+other)
+ local mapping = { }
+ local count = readulong(f)
+ for i=1,count do
+ mapping[readuint(f)] = readushort(f)
+ end
+ nofdone = nofdone + count
+ variants[selector] = mapping
+ end
+ end
+ return nofdone
+ else
+ return 0
+ end
+end
+
+local function checkcmap(f,fontdata,records,platform,encoding,format)
+ local data = records[platform]
+ if not data then
+ return 0
+ end
+ data = data[encoding]
+ if not data then
+ return 0
+ end
+ data = data[format]
+ if not data then
+ return 0
+ end
+ local reader = formatreaders[format]
+ if not reader then
+ return 0
+ end
+ local p = platforms[platform]
+ local e = encodings[p]
+ local n = reader(f,fontdata,data) or 0
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ return n
+end
+
+function readers.cmap(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable = fontdata.tables.cmap
+ if datatable then
+ local tableoffset = datatable.offset
+ setposition(f,tableoffset)
+ local version = readushort(f)
+ local noftables = readushort(f)
+ local records = { }
+ local unicodecid = false
+ local variantcid = false
+ local variants = { }
+ local duplicates = fontdata.duplicates or { }
+ fontdata.duplicates = duplicates
+ for i=1,noftables do
+ local platform = readushort(f)
+ local encoding = readushort(f)
+ local offset = readulong(f)
+ local record = records[platform]
+ if not record then
+ records[platform] = {
+ [encoding] = {
+ offsets = { offset },
+ formats = { },
+ }
+ }
+ else
+ local subtables = record[encoding]
+ if not subtables then
+ record[encoding] = {
+ offsets = { offset },
+ formats = { },
+ }
+ else
+ local offsets = subtables.offsets
+ offsets[#offsets+1] = offset
+ end
+ end
+ end
+ report("found cmaps:")
+ for platform, record in sortedhash(records) do
+ local p = platforms[platform]
+ local e = encodings[p]
+ local sp = supported[platform]
+ local ps = p or "?"
+ if sp then
+ report(" platform %i: %s",platform,ps)
+ else
+ report(" platform %i: %s (unsupported)",platform,ps)
+ end
+ for encoding, subtables in sortedhash(record) do
+ local se = sp and sp[encoding]
+ local es = e and e[encoding] or "?"
+ if se then
+ report(" encoding %i: %s",encoding,es)
+ else
+ report(" encoding %i: %s (unsupported)",encoding,es)
+ end
+ local offsets = subtables.offsets
+ local formats = subtables.formats
+ for i=1,#offsets do
+ local offset = tableoffset + offsets[i]
+ setposition(f,offset)
+ formats[readushort(f)] = offset
+ end
+ record[encoding] = formats
+ local list = sortedkeys(formats)
+ for i=1,#list do
+ if not (se and se[list[i]]) then
+ list[i] = list[i] .. " (unsupported)"
+ end
+ end
+ report(" formats: % t",list)
+ end
+ end
+ --
+ local ok = false
+ for i=1,#sequence do
+ local sp, se, sf = unpack(sequence[i])
+ if checkcmap(f,fontdata,records,sp,se,sf) > 0 then
+ ok = true
+ end
+ end
+ if not ok then
+ report("no useable unicode cmap found")
+ end
+ --
+ fontdata.cidmaps = {
+ version = version,
+ noftables = noftables,
+ records = records,
+ }
+ else
+ fontdata.cidmaps = { }
+ end
+ end
+end
+
+-- The glyf table depends on the loca table. We have one entry to much in the locations table (the
+-- last one is a dummy) because we need to calculate the size of a glyph blob from the delta,
+-- although we not need it in our usage (yet). We can remove the locations table when we're done.
+
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("loca")
+ end
+end
+
+function readers.glyf(f,fontdata,specification) -- part goes to cff module
+ if specification.glyphs then
+ reportskippedtable("glyf")
+ end
+end
+
+-- Here we have a table that we really need for later processing although a more advanced gpos table
+-- can also be available. Todo: we need a 'fake' lookup for this (analogue to ff).
+
+function readers.kern(f,fontdata,specification)
+ if specification.kerns then
+ local datatable = fontdata.tables.kern
+ if datatable then
+ setposition(f,datatable.offset)
+ local version = readushort(f)
+ local noftables = readushort(f)
+ for i=1,noftables do
+ local version = readushort(f)
+ local length = readushort(f)
+ local coverage = readushort(f)
+ -- bit 8-15 of coverage: format 0 or 2
+ local format = bit32.rshift(coverage,8) -- is this ok?
+ if format == 0 then
+ local nofpairs = readushort(f)
+ local searchrange = readushort(f)
+ local entryselector = readushort(f)
+ local rangeshift = readushort(f)
+ local kerns = { }
+ local glyphs = fontdata.glyphs
+ for i=1,nofpairs do
+ local left = readushort(f)
+ local right = readushort(f)
+ local kern = readfword(f)
+ local glyph = glyphs[left]
+ local kerns = glyph.kerns
+ if kerns then
+ kerns[right] = kern
+ else
+ glyph.kerns = { [right] = kern }
+ end
+ end
+ elseif format == 2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
+ end
+ end
+ end
+ end
+end
+
+function readers.gdef(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gdef")
+ end
+end
+
+function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gsub")
+ end
+end
+
+function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gpos")
+ end
+end
+
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("math")
+ end
+end
+
+-- Goodie. A sequence instead of segments costs a bit more memory, some 300K on a
+-- dejavu serif and about the same on a pagella regular.
+
+local function packoutlines(data,makesequence)
+ local subfonts = data.subfonts
+ if subfonts then
+ for i=1,#subfonts do
+ packoutlines(subfonts[i],makesequence)
+ end
+ return
+ end
+ local common = data.segments
+ if common then
+ return
+ end
+ local glyphs = data.glyphs
+ if not glyphs then
+ return
+ end
+ if makesequence then
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local segments = glyph.segments
+ if segments then
+ local sequence = { }
+ local nofsequence = 0
+ for i=1,#segments do
+ local segment = segments[i]
+ local nofsegment = #segment
+ nofsequence = nofsequence + 1
+ sequence[nofsequence] = segment[nofsegment]
+ for i=1,nofsegment-1 do
+ nofsequence = nofsequence + 1
+ sequence[nofsequence] = segment[i]
+ end
+ end
+ glyph.sequence = sequence
+ glyph.segments = nil
+ end
+ end
+ else
+ local hash = { }
+ local common = { }
+ local reverse = { }
+ local last = 0
+ for index=1,#glyphs do
+ local segments = glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local h = concat(segments[i]," ")
+ hash[h] = (hash[h] or 0) + 1
+ end
+ end
+ end
+ for index=1,#glyphs do
+ local segments = glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local segment = segments[i]
+ local h = concat(segment," ")
+ if hash[h] > 1 then -- minimal one shared in order to hash
+ local idx = reverse[h]
+ if not idx then
+ last = last + 1
+ reverse[h] = last
+ common[last] = segment
+ idx = last
+ end
+ segments[i] = idx
+ end
+ end
+ end
+ end
+ if last > 0 then
+ data.segments = common
+ end
+ end
+end
+
+local function unpackoutlines(data)
+ local subfonts = data.subfonts
+ if subfonts then
+ for i=1,#subfonts do
+ unpackoutlines(subfonts[i])
+ end
+ return
+ end
+ local common = data.segments
+ if not common then
+ return
+ end
+ local glyphs = data.glyphs
+ if not glyphs then
+ return
+ end
+ for index=1,#glyphs do
+ local segments = glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local c = common[segments[i]]
+ if c then
+ segments[i] = c
+ end
+ end
+ end
+ end
+ data.segments = nil
+end
+
+otf.packoutlines = packoutlines
+otf.unpackoutlines = unpackoutlines
+
+-- Now comes the loader. The order of reading these matters as we need to know
+-- some properties in order to read following tables. When details is true we also
+-- initialize the glyphs data.
+
+local function getinfo(maindata,sub,platformnames,rawfamilynames)
+ local fontdata = sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names = fontdata.names
+ local info = nil
+ if names then
+ local metrics = fontdata.windowsmetrics or { }
+ local postscript = fontdata.postscript or { }
+ local fontheader = fontdata.fontheader or { }
+ local cffinfo = fontdata.cffinfo or { }
+ local filename = fontdata.filename
+ local weight = getname(fontdata,"weight") or cffinfo.weight or metrics.weight
+ local width = getname(fontdata,"width") or cffinfo.width or metrics.width
+ local fontname = getname(fontdata,"postscriptname")
+ local fullname = getname(fontdata,"fullname")
+ local family = getname(fontdata,"family")
+ local subfamily = getname(fontdata,"subfamily")
+ local familyname = getname(fontdata,"typographicfamily")
+ local subfamilyname = getname(fontdata,"typographicsubfamily")
+ local compatiblename = getname(fontdata,"compatiblefullname") -- kind of useless
+ if rawfamilynames then
+ -- for PG (for now, as i need to check / adapt context to catch a no-fallback case)
+ else
+ if not familyname then familyname = family end
+ if not subfamilyname then subfamilyname = subfamily end
+ end
+ info = { -- we inherit some inconsistencies/choices from ff
+ subfontindex = fontdata.subfontindex or sub or 0,
+ -- filename = filename,
+ version = getname(fontdata,"version"),
+ -- format = fontdata.format,
+ fontname = fontname,
+ fullname = fullname,
+ family = family,
+ subfamily = subfamily,
+ familyname = familyname,
+ subfamilyname = subfamilyname,
+ compatiblename = compatiblename,
+ weight = weight and lower(weight),
+ width = width and lower(width),
+ pfmweight = metrics.weightclass or 400, -- will become weightclass
+ pfmwidth = metrics.widthclass or 5, -- will become widthclass
+ panosewidth = metrics.panosewidth,
+ panoseweight = metrics.panoseweight,
+ italicangle = postscript.italicangle or 0,
+ units = fontheader.units or 0,
+ designsize = fontdata.designsize,
+ minsize = fontdata.minsize,
+ maxsize = fontdata.maxsize,
+ monospaced = (tonumber(postscript.monospaced or 0) > 0) or metrics.panosewidth == "monospaced",
+ averagewidth = metrics.averagewidth,
+ xheight = metrics.xheight,
+ capheight = metrics.capheight, -- not always present and probably crap
+ ascender = metrics.typoascender,
+ descender = metrics.typodescender,
+ platformnames = platformnames and fontdata.platformnames or nil,
+ }
+ elseif n then
+ info = {
+ filename = fontdata.filename,
+ comment = "there is no info for subfont " .. n,
+ }
+ else
+ info = {
+ filename = fontdata.filename,
+ comment = "there is no info",
+ }
+ end
+ -- inspect(info)
+ return info
+end
+
+local function loadtables(f,specification,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ local tables = { }
+ local basename = file.basename(specification.filename)
+ local filesize = specification.filesize
+ local filetime = specification.filetime
+ local fontdata = { -- some can/will go
+ filename = basename,
+ filesize = filesize,
+ filetime = filetime,
+ version = readstring(f,4),
+ noftables = readushort(f),
+ searchrange = readushort(f), -- not needed
+ entryselector = readushort(f), -- not needed
+ rangeshift = readushort(f), -- not needed
+ tables = tables,
+ }
+ for i=1,fontdata.noftables do
+ local tag = lower(stripstring(readstring(f,4)))
+ local checksum = readulong(f) -- not used
+ local offset = readulong(f)
+ local length = readulong(f)
+ if offset + length > filesize then
+ report("bad %a table in file %a",tag,basename)
+ end
+ tables[tag] = {
+ checksum = checksum,
+ offset = offset,
+ length = length,
+ }
+ end
+ if tables.cff then
+ fontdata.format = "opentype"
+ else
+ fontdata.format = "truetype"
+ end
+ return fontdata
+end
+
+local function prepareglyps(fontdata)
+ local glyphs = setmetatableindex(function(t,k)
+ local v = {
+ -- maybe more defaults
+ index = k,
+ }
+ t[k] = v
+ return v
+ end)
+ fontdata.glyphs = glyphs
+ fontdata.mapping = { }
+end
+
+local function readdata(f,offset,specification)
+ local fontdata = loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
+ end
+ --
+ readers["name"](f,fontdata,specification)
+ --
+ local askedname = specification.askedname
+ if askedname then
+ local fullname = getname(fontdata,"fullname") or ""
+ local cleanname = gsub(askedname,"[^a-zA-Z0-9]","")
+ local foundname = gsub(fullname,"[^a-zA-Z0-9]","")
+ if lower(cleanname) ~= lower(foundname) then
+ return -- keep searching
+ end
+ end
+ --
+ --
+ readers["os/2"](f,fontdata,specification)
+ readers["head"](f,fontdata,specification)
+ readers["maxp"](f,fontdata,specification)
+ readers["hhea"](f,fontdata,specification)
+ readers["hmtx"](f,fontdata,specification)
+ readers["post"](f,fontdata,specification)
+ readers["cff" ](f,fontdata,specification)
+ readers["cmap"](f,fontdata,specification)
+ readers["loca"](f,fontdata,specification)
+ readers["glyf"](f,fontdata,specification)
+ readers["kern"](f,fontdata,specification)
+ readers["gdef"](f,fontdata,specification)
+ readers["gsub"](f,fontdata,specification)
+ readers["gpos"](f,fontdata,specification)
+ readers["math"](f,fontdata,specification)
+ --
+ fontdata.locations = nil
+ fontdata.tables = nil
+ fontdata.cidmaps = nil
+ fontdata.dictionaries = nil
+ -- fontdata.cff = nil
+ return fontdata
+end
+
+local function loadfontdata(specification)
+ local filename = specification.filename
+ local fileattr = lfs.attributes(filename)
+ local filesize = fileattr and fileattr.size or 0
+ local filetime = fileattr and fileattr.modification or 0
+ local f = openfile(filename,true) -- zero based
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize == 0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize = filesize
+ specification.filetime = filetime
+ local version = readstring(f,4)
+ local fontdata = nil
+ if version == "OTTO" or version == "true" or version == "\0\1\0\0" then
+ fontdata = readdata(f,0,specification)
+ elseif version == "ttcf" then
+ local subfont = tonumber(specification.subfont)
+ local offsets = { }
+ local ttcversion = readulong(f)
+ local nofsubfonts = readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i] = readulong(f)
+ end
+ if subfont then -- a number of not
+ if subfont >= 1 and subfont <= nofsubfonts then
+ fontdata = readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
+ end
+ else
+ subfont = specification.subfont
+ if type(subfont) == "string" and subfont ~= "" then
+ specification.askedname = subfont
+ for i=1,nofsubfonts do
+ fontdata = readdata(f,offsets[i],specification)
+ if fontdata then
+ fontdata.subfontindex = i
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
+ end
+ else
+ local subfonts = { }
+ fontdata = {
+ filename = filename,
+ filesize = filesize,
+ filetime = filetime,
+ version = version,
+ subfonts = subfonts,
+ ttcversion = ttcversion,
+ nofsubfonts = nofsubfonts,
+ }
+ for i=1,nofsubfonts do
+ subfonts[i] = readdata(f,offsets[i],specification)
+ end
+ end
+ end
+ else
+ report("unknown version %a in file %a",version,filename)
+ end
+ closefile(f)
+ return fontdata or { }
+ end
+end
+
+local function loadfont(specification,n)
+ if type(specification) == "string" then
+ specification = {
+ filename = specification,
+ info = true, -- always true (for now)
+ details = true,
+ glyphs = true,
+ shapes = true,
+ kerns = true,
+ globalkerns = true,
+ lookups = true,
+ -- true or number:
+ subfont = n or true,
+ tounicode = false,
+ }
+ end
+ -- if shapes only then
+ if specification.shapes or specification.lookups or specification.kerns then
+ specification.glyphs = true
+ end
+ if specification.glyphs then
+ specification.details = true
+ end
+ if specification.details then
+ specification.info = true -- not really used any more
+ end
+ if specification.platformnames then
+ specification.platformnames = true -- not really used any more
+ end
+ local function message(str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
+ end
+ local ok, result = xpcall(loadfontdata,message,specification)
+ if ok then
+ return result
+ end
+end
+
+-- we need even less, but we can have a 'detail' variant
+
+function readers.loadshapes(filename,n)
+ local fontdata = loadfont {
+ filename = filename,
+ shapes = true,
+ subfont = n,
+ }
+ return fontdata and {
+ -- version = 0.123 -- todo
+ filename = filename,
+ format = fontdata.format,
+ glyphs = fontdata.glyphs,
+ units = fontdata.fontheader.units,
+ } or {
+ filename = filename,
+ format = "unknown",
+ glyphs = { },
+ units = 0,
+ }
+end
+
+function readers.loadfont(filename,n)
+ local fontdata = loadfont {
+ filename = filename,
+ glyphs = true,
+ shapes = false,
+ lookups = true,
+ -- kerns = true,
+ -- globalkerns = true, -- only for testing, e.g. cambria has different gpos and kern
+ subfont = n,
+ }
+ if fontdata then
+ --
+ return {
+ tableversion = tableversion,
+ creator = "context mkiv",
+ size = fontdata.filesize,
+ time = fontdata.filetime,
+ glyphs = fontdata.glyphs,
+ descriptions = fontdata.descriptions,
+ format = fontdata.format,
+ goodies = { },
+ metadata = getinfo(fontdata,n), -- no platformnames here !
+ properties = {
+ hasitalics = fontdata.hasitalics or false,
+ },
+ resources = {
+ -- filename = fontdata.filename,
+ filename = filename,
+ private = privateoffset,
+ duplicates = fontdata.duplicates or { },
+ features = fontdata.features or { }, -- we need to add these in the loader
+ sublookups = fontdata.sublookups or { }, -- we need to add these in the loader
+ marks = fontdata.marks or { }, -- we need to add these in the loader
+ markclasses = fontdata.markclasses or { }, -- we need to add these in the loader
+ marksets = fontdata.marksets or { }, -- we need to add these in the loader
+ sequences = fontdata.sequences or { }, -- we need to add these in the loader
+ variants = fontdata.variants, -- variant -> unicode -> glyph
+ version = getname(fontdata,"version"),
+ cidinfo = fontdata.cidinfo,
+ mathconstants = fontdata.mathconstants,
+ },
+ }
+ end
+end
+
+function readers.getinfo(filename,specification) -- string, nil|number|table
+ -- platformnames is optional and not used by context (a too unpredictable mess
+ -- that only add to the confusion) .. so it's only for checking things
+ local subfont = nil
+ local platformnames = false
+ local rawfamilynames = false
+ if type(specification) == "table" then
+ subfont = tonumber(specification.subfont)
+ platformnames = specification.platformnames
+ rawfamilynames = specification.rawfamilynames
+ else
+ subfont = tonumber(specification)
+ end
+ local fontdata = loadfont {
+ filename = filename,
+ details = true,
+ platformnames = platformnames,
+ -- rawfamilynames = rawfamilynames,
+ }
+ if fontdata then
+ local subfonts = fontdata.subfonts
+ if not subfonts then
+ return getinfo(fontdata,nil,platformnames,rawfamilynames)
+ elseif not subfont then
+ local info = { }
+ for i=1,#subfonts do
+ info[i] = getinfo(fontdata,i,platformnames,rawfamilynames)
+ end
+ return info
+ elseif subfont >= 1 and subfont <= #subfonts then
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames)
+ else
+ return {
+ filename = filename,
+ comment = "there is no subfont " .. subfont .. " in this file"
+ }
+ end
+ else
+ return {
+ filename = filename,
+ comment = "the file cannot be opened for reading",
+ }
+ end
+end
+
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+
+function readers.compact(fontdata)
+ report("the %a helper is not yet implemented","compact")
+end
+
+-- plug in
+
+local extenders = { }
+
+function readers.registerextender(extender)
+ extenders[#extenders+1] = extender
+end
+
+function readers.extend(fontdata)
+ for i=1,#extenders do
+ local extender = extenders[i]
+ local name = extender.name or "unknown"
+ local action = extender.action
+ if action then
+ action(fontdata)
+ end
+ end
+end
+
+-- for now .. this will move to a context specific file
+
+if fonts.hashes then
+
+ local identifiers = fonts.hashes.identifiers
+ local loadshapes = readers.loadshapes
+
+ readers.version = 0.006
+ readers.cache = containers.define("fonts", "shapes", readers.version, true)
+
+ -- todo: loaders per format
+
+ local function load(filename,sub)
+ local base = file.basename(filename)
+ local name = file.removesuffix(base)
+ local kind = file.suffix(filename)
+ local attr = lfs.attributes(filename)
+ local size = attr and attr.size or 0
+ local time = attr and attr.modification or 0
+ local sub = tonumber(sub)
+ if size > 0 and (kind == "otf" or kind == "ttf" or kind == "tcc") then
+ local hash = containers.cleanname(base) -- including suffix
+ if sub then
+ hash = hash .. "-" .. sub
+ end
+ data = containers.read(readers.cache,hash)
+ if not data or data.time ~= time or data.size ~= size then
+ data = loadshapes(filename,sub)
+ if data then
+ data.size = size
+ data.format = data.format or (kind == "otf" and "opentype") or "truetype"
+ data.time = time
+ packoutlines(data)
+ containers.write(readers.cache,hash,data)
+ data = containers.read(readers.cache,hash) -- frees old mem
+ end
+ end
+ unpackoutlines(data)
+ else
+ data = {
+ filename = filename,
+ size = 0,
+ time = time,
+ format = "unknown",
+ units = 1000,
+ glyphs = { }
+ }
+ end
+ return data
+ end
+
+ fonts.hashes.shapes = table.setmetatableindex(function(t,k)
+ local d = identifiers[k]
+ local v = load(d.properties.filename,d.subindex)
+ t[k] = v
+ return v
+ end)
+
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-ots.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ots.lua
new file mode 100644
index 00000000000..69118725842
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ots.lua
@@ -0,0 +1,3765 @@
+if not modules then modules = { } end modules ['font-ots'] = { -- sequences
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- to be checked: discrun doesn't seem to do something useful now (except run the
+-- check again) so if we need it again we'll do a zwnjrun or so
+
+-- beware, on my development machine we test a slightly a more optimized version
+
+-- assumptions:
+--
+-- cursives don't cross discretionaries
+-- marks precede bases
+--
+-- pitfalls:
+--
+-- when we append to a dics field we need to set the field in order to update tail
+--
+-- This is a version of font-otn.lua adapted to the new font loader code. It
+-- is a context version which can contain experimental code, but when we
+-- have serious patches we will backport to the font-otn files. The plain
+-- loader that ships with context also uses this now.
+--
+-- todo: looks like we have a leak somewhere (probably in ligatures)
+-- todo: copy attributes to disc
+-- todo: get rid of components, better use the tounicode entry if needed (at all)
+--
+-- we do some disc juggling where we need to keep in mind that the
+-- pre, post and replace fields can have prev pointers to a nesting
+-- node ... i wonder if that is still needed
+--
+-- not possible:
+--
+-- \discretionary {alpha-} {betagammadelta}
+-- {\discretionary {alphabeta-} {gammadelta}
+-- {\discretionary {alphabetagamma-} {delta}
+-- {alphabetagammadelta}}}
+
+--[[ldx--
+<p>This module is a bit more split up that I'd like but since we also want to test
+with plain <l n='tex'/> it has to be so. This module is part of <l n='context'/>
+and discussion about improvements and functionality mostly happens on the
+<l n='context'/> mailing list.</p>
+
+<p>The specification of OpenType is kind of vague. Apart from a lack of a proper
+free specifications there's also the problem that Microsoft and Adobe
+may have their own interpretation of how and in what order to apply features.
+In general the Microsoft website has more detailed specifications and is a
+better reference. There is also some information in the FontForge help files.</p>
+
+<p>Because there is so much possible, fonts might contain bugs and/or be made to
+work with certain rederers. These may evolve over time which may have the side
+effect that suddenly fonts behave differently.</p>
+
+<p>After a lot of experiments (mostly by Taco, me and Idris) we're now at yet another
+implementation. Of course all errors are mine and of course the code can be
+improved. There are quite some optimizations going on here and processing speed
+is currently acceptable. Not all functions are implemented yet, often because I
+lack the fonts for testing. Many scripts are not yet supported either, but I will
+look into them as soon as <l n='context'/> users ask for it.</p>
+
+<p>The specification leaves room for interpretation. In case of doubt the microsoft
+implementation is the reference as it is the most complete one. As they deal with
+lots of scripts and fonts, Kai and Ivo did a lot of testing of the generic code and
+their suggestions help improve the code. I'm aware that not all border cases can be
+taken care of, unless we accept excessive runtime, and even then the interference
+with other mechanisms (like hyphenation) are not trivial.</p>
+
+<p>Glyphs are indexed not by unicode but in their own way. This is because there is no
+relationship with unicode at all, apart from the fact that a font might cover certain
+ranges of characters. One character can have multiple shapes. However, at the
+<l n='tex'/> end we use unicode so and all extra glyphs are mapped into a private
+space. This is needed because we need to access them and <l n='tex'/> has to include
+then in the output eventually.</p>
+
+<p>The initial data table is rather close to the open type specification and also not
+that different from the one produced by <l n='fontforge'/> but we uses hashes instead.
+In <l n='context'/> that table is packed (similar tables are shared) and cached on disk
+so that successive runs can use the optimized table (after loading the table is
+unpacked). The flattening code used later is a prelude to an even more compact table
+format (and as such it keeps evolving).</p>
+
+<p>This module is sparsely documented because it is a moving target. The table format
+of the reader changes and we experiment a lot with different methods for supporting
+features.</p>
+
+<p>As with the <l n='afm'/> code, we may decide to store more information in the
+<l n='otf'/> table.</p>
+
+<p>Incrementing the version number will force a re-cache. We jump the number by one
+when there's a fix in the <l n='fontforge'/> library or <l n='lua'/> code that
+results in different tables.</p>
+--ldx]]--
+
+local type, next, tonumber = type, next, tonumber
+local random = math.random
+local formatters = string.formatters
+local insert = table.insert
+
+local logs, trackers, nodes, attributes = logs, trackers, nodes, attributes
+
+local registertracker = trackers.register
+local registerdirective = directives.register
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+
+local trace_lookups = false registertracker("otf.lookups", function(v) trace_lookups = v end)
+local trace_singles = false registertracker("otf.singles", function(v) trace_singles = v end)
+local trace_multiples = false registertracker("otf.multiples", function(v) trace_multiples = v end)
+local trace_alternatives = false registertracker("otf.alternatives", function(v) trace_alternatives = v end)
+local trace_ligatures = false registertracker("otf.ligatures", function(v) trace_ligatures = v end)
+local trace_contexts = false registertracker("otf.contexts", function(v) trace_contexts = v end)
+local trace_marks = false registertracker("otf.marks", function(v) trace_marks = v end)
+local trace_kerns = false registertracker("otf.kerns", function(v) trace_kerns = v end)
+local trace_cursive = false registertracker("otf.cursive", function(v) trace_cursive = v end)
+local trace_preparing = false registertracker("otf.preparing", function(v) trace_preparing = v end)
+local trace_bugs = false registertracker("otf.bugs", function(v) trace_bugs = v end)
+local trace_details = false registertracker("otf.details", function(v) trace_details = v end)
+local trace_applied = false registertracker("otf.applied", function(v) trace_applied = v end)
+local trace_steps = false registertracker("otf.steps", function(v) trace_steps = v end)
+local trace_skips = false registertracker("otf.skips", function(v) trace_skips = v end)
+local trace_directions = false registertracker("otf.directions", function(v) trace_directions = v end)
+
+local trace_kernruns = false registertracker("otf.kernruns", function(v) trace_kernruns = v end)
+local trace_discruns = false registertracker("otf.discruns", function(v) trace_discruns = v end)
+local trace_compruns = false registertracker("otf.compruns", function(v) trace_compruns = v end)
+local trace_testruns = false registertracker("otf.testruns", function(v) trace_testruns = v end)
+
+local quit_on_no_replacement = true -- maybe per font
+local zwnjruns = true
+local optimizekerns = true
+
+registerdirective("otf.zwnjruns", function(v) zwnjruns = v end)
+registerdirective("otf.chain.quitonnoreplacement",function(value) quit_on_no_replacement = value end)
+
+local report_direct = logs.reporter("fonts","otf direct")
+local report_subchain = logs.reporter("fonts","otf subchain")
+local report_chain = logs.reporter("fonts","otf chain")
+local report_process = logs.reporter("fonts","otf process")
+----- report_prepare = logs.reporter("fonts","otf prepare")
+local report_warning = logs.reporter("fonts","otf warning")
+local report_run = logs.reporter("fonts","otf run")
+local report_check = logs.reporter("fonts","otf check")
+
+registertracker("otf.replacements", "otf.singles,otf.multiples,otf.alternatives,otf.ligatures")
+registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive")
+registertracker("otf.actions","otf.replacements,otf.positions")
+registertracker("otf.injections","nodes.injections")
+
+registertracker("*otf.sample","otf.steps,otf.actions,otf.analyzing")
+
+local nuts = nodes.nuts
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+local getnext = nuts.getnext
+local setnext = nuts.setnext
+local getprev = nuts.getprev
+local setprev = nuts.setprev
+local getboth = nuts.getboth
+local setboth = nuts.setboth
+local getid = nuts.getid
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+local getprop = nuts.getprop
+local setprop = nuts.setprop
+local getfont = nuts.getfont
+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 setlink = nuts.setlink
+
+local ischar = nuts.is_char
+
+local insert_node_before = nuts.insert_before
+local insert_node_after = nuts.insert_after
+local delete_node = nuts.delete
+local remove_node = nuts.remove
+local copy_node = nuts.copy
+local copy_node_list = nuts.copy_list
+local find_node_tail = nuts.tail
+local flush_node_list = nuts.flush_list
+local free_node = nuts.free
+local end_of_math = nuts.end_of_math
+local traverse_nodes = nuts.traverse
+local traverse_id = nuts.traverse_id
+
+local setmetatableindex = table.setmetatableindex
+
+local zwnj = 0x200C
+local zwj = 0x200D
+local wildcard = "*"
+local default = "dflt"
+
+local nodecodes = nodes.nodecodes
+local glyphcodes = nodes.glyphcodes
+local disccodes = nodes.disccodes
+
+local glyph_code = nodecodes.glyph
+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 discretionary_code = disccodes.discretionary
+local ligature_code = glyphcodes.ligature
+
+local privateattribute = attributes.private
+
+-- Something is messed up: we have two mark / ligature indices, one at the injection
+-- end and one here ... this is based on KE's patches but there is something fishy
+-- there as I'm pretty sure that for husayni we need some connection (as it's much
+-- more complex than an average font) but I need proper examples of all cases, not
+-- of only some.
+
+local a_state = privateattribute('state')
+
+local injections = nodes.injections
+local setmark = injections.setmark
+local setcursive = injections.setcursive
+local setkern = injections.setkern
+local setpair = injections.setpair
+local resetinjection = injections.reset
+local copyinjection = injections.copy
+local setligaindex = injections.setligaindex
+local getligaindex = injections.getligaindex
+
+local cursonce = true
+
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+
+local otffeatures = fonts.constructors.newfeatures("otf")
+local registerotffeature = otffeatures.register
+
+local onetimemessage = fonts.loggers.onetimemessage or function() end
+
+otf.defaultnodealternate = "none" -- first last
+
+-- We use a few global variables. The handler can be called nested but this assumes that the
+-- same font is used. Nested calls are normally not needed (only for devanagari).
+
+local tfmdata = false
+local characters = false
+local descriptions = false
+local marks = false
+local currentfont = false
+local factor = 0
+local threshold = 0
+
+local sweepnode = nil
+local sweepprev = nil
+local sweepnext = nil
+local sweephead = { }
+
+local notmatchpre = { }
+local notmatchpost = { }
+local notmatchreplace = { }
+
+local handlers = { }
+
+-- helper
+
+local function isspace(n)
+ if getid(n) == glue_code then
+ local w = getfield(n,"width")
+ if w >= threshold then
+ return 32
+ end
+ end
+end
+
+-- we use this for special testing and documentation
+
+local checkstep = (nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end
+local registerstep = (nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end
+local registermessage = (nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end
+
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_direct(...)
+end
+
+local function logwarning(...)
+ report_direct(...)
+end
+
+local f_unicode = formatters["%U"]
+local f_uniname = formatters["%U (%s)"]
+local f_unilist = formatters["% t (% t)"]
+
+local function gref(n) -- currently the same as in font-otb
+ if type(n) == "number" then
+ local description = descriptions[n]
+ local name = description and description.name
+ if name then
+ return f_uniname(n,name)
+ else
+ return f_unicode(n)
+ end
+ elseif n then
+ local num, nam = { }, { }
+ for i=1,#n do
+ local ni = n[i]
+ if tonumber(ni) then -- later we will start at 2
+ local di = descriptions[ni]
+ num[i] = f_unicode(ni)
+ nam[i] = di and di.name or "-"
+ end
+ end
+ return f_unilist(num,nam)
+ else
+ return "<error in node mode tracing>"
+ end
+end
+
+local function cref(dataset,sequence,index)
+ if not dataset then
+ return "no valid dataset"
+ elseif index then
+ return formatters["feature %a, type %a, chain lookup %a, index %a"](dataset[4],sequence.type,sequence.name,index)
+ else
+ return formatters["feature %a, type %a, chain lookup %a"](dataset[4],sequence.type,sequence.name)
+ end
+end
+
+local function pref(dataset,sequence)
+ return formatters["feature %a, type %a, lookup %a"](dataset[4],sequence.type,sequence.name)
+end
+
+local function mref(rlmode)
+ if not rlmode or rlmode == 0 then
+ return "---"
+ elseif rlmode == -1 or rlmode == "+TRT" then
+ return "r2l"
+ else
+ return "l2r"
+ end
+end
+
+-- We can assume that languages that use marks are not hyphenated. We can also assume
+-- that at most one discretionary is present.
+
+-- We do need components in funny kerning mode but maybe I can better reconstruct then
+-- as we do have the font components info available; removing components makes the
+-- previous code much simpler. Also, later on copying and freeing becomes easier.
+-- However, for arabic we need to keep them around for the sake of mark placement
+-- and indices.
+
+local function copy_glyph(g) -- next and prev are untouched !
+ local components = getfield(g,"components")
+ if components then
+ setfield(g,"components",nil)
+ local n = copy_node(g)
+ copyinjection(n,g) -- we need to preserve the lig indices
+ setfield(g,"components",components)
+ return n
+ else
+ local n = copy_node(g)
+ copyinjection(n,g) -- we need to preserve the lig indices
+ return n
+ end
+end
+
+local function flattendisk(head,disc)
+ local _, _, replace, _, _, replacetail = getdisc(disc,true)
+ setfield(disc,"replace",nil)
+ free_node(disc)
+ if head == disc then
+ local next = getnext(disc)
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ return replace, replace
+ elseif next then
+ return next, next
+ else
+ return -- maybe warning
+ end
+ else
+ local prev, next = getboth(disc)
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ setlink(prev,replace)
+ return head, replace
+ else
+ setlink(prev,next) -- checks for next anyway
+ return head, next
+ end
+ end
+end
+
+local function appenddisc(disc,list)
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ local posthead = list
+ local replacehead = copy_node_list(list)
+ if post then
+ setlink(posttail,posthead)
+ else
+ post = phead
+ end
+ if replace then
+ setlink(replacetail,replacehead)
+ else
+ replace = rhead
+ end
+ setdisc(disc,pre,post,replace)
+end
+
+-- start is a mark and we need to keep that one
+
+local function markstoligature(head,start,stop,char)
+ if start == stop and getchar(start) == char then
+ return head, start
+ else
+ local prev = getprev(start)
+ local next = getnext(stop)
+ setprev(start,nil)
+ setnext(stop,nil)
+ local base = copy_glyph(start)
+ if head == start then
+ head = base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",start)
+ setlink(prev,base)
+ setlink(base,next)
+ return head, base
+ end
+end
+
+-- The next code is somewhat complicated by the fact that some fonts can have ligatures made
+-- from ligatures that themselves have marks. This was identified by Kai in for instance
+-- arabtype: KAF LAM SHADDA ALEF FATHA (0x0643 0x0644 0x0651 0x0627 0x064E). This becomes
+-- KAF LAM-ALEF with a SHADDA on the first and a FATHA op de second component. In a next
+-- iteration this becomes a KAF-LAM-ALEF with a SHADDA on the second and a FATHA on the
+-- third component.
+
+local function getcomponentindex(start) -- we could store this offset in the glyph (nofcomponents)
+ if getid(start) ~= glyph_code then -- and then get rid of all components
+ return 0
+ elseif getsubtype(start) == ligature_code then
+ local i = 0
+ local components = getfield(start,"components")
+ while components do
+ i = i + getcomponentindex(components)
+ components = getnext(components)
+ end
+ return i
+ elseif not marks[getchar(start)] then
+ return 1
+ else
+ return 0
+ end
+end
+
+local a_noligature = attributes.private("noligature")
+
+local function toligature(head,start,stop,char,dataset,sequence,markflag,discfound) -- 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)
+ return head, start
+ end
+ if start == stop and getchar(start) == char then
+ resetinjection(start)
+ setchar(start,char)
+ return head, start
+ end
+ -- needs testing (side effects):
+ local components = getfield(start,"components")
+ if components then
+ -- we get a double free .. needs checking
+ -- flush_node_list(components)
+ end
+ --
+ local prev = getprev(start)
+ local next = getnext(stop)
+ local comp = start
+ setprev(start,nil)
+ setnext(stop,nil)
+ local base = copy_glyph(start)
+ if start == head then
+ head = base
+ end
+ resetinjection(base)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",comp) -- start can have components ... do we need to flush?
+ if prev then
+ setnext(prev,base)
+ end
+ if next then
+ setprev(next,base)
+ end
+ setboth(base,prev,next)
+ if not discfound then
+ local deletemarks = markflag ~= "mark"
+ local components = start
+ local baseindex = 0
+ local componentindex = 0
+ local head = base
+ local current = base
+ -- first we loop over the glyphs in start .. stop
+ while start do
+ local char = getchar(start)
+ if not marks[char] then
+ baseindex = baseindex + componentindex
+ componentindex = getcomponentindex(start)
+ elseif not deletemarks then -- quite fishy
+ setligaindex(start,baseindex + getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: keep mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ local n = copy_node(start)
+ copyinjection(n,start)
+ head, current = insert_node_after(head,current,n) -- unlikely that mark has components
+ elseif trace_marks then
+ logwarning("%s: delete mark %s",pref(dataset,sequence),gref(char))
+ end
+ start = getnext(start)
+ end
+ -- we can have one accent as part of a lookup and another following
+ -- local start = components -- was wrong (component scanning was introduced when more complex ligs in devanagari was added)
+ local start = getnext(current)
+ while start do
+ local char = ischar(start)
+ if char then
+ if marks[char] then
+ setligaindex(start,baseindex + getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: set mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ start = getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ else
+ -- discfound ... forget about marks .. probably no scripts that hyphenate and have marks
+ local discprev, discnext = getboth(discfound)
+ if discprev and discnext then
+ -- we assume normalization in context, and don't care about generic ... especially
+ -- \- can give problems as there we can have a negative char but that won't match
+ -- anyway
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(discfound,true)
+ if not replace then -- todo: signal simple hyphen
+ local prev = getprev(base)
+ local copied = copy_node_list(comp)
+ setprev(discnext,nil) -- also blocks funny assignments
+ setnext(discprev,nil) -- also blocks funny assignments
+ if pre then
+ setlink(discprev,pre)
+ end
+ pre = comp
+ if post then
+ setlink(posttail,discnext)
+ setprev(post,nil)
+ else
+ post = discnext
+ end
+ setlink(prev,discfound)
+ setlink(discfound,next)
+ setboth(base,nil,nil)
+ setfield(base,"components",copied)
+ setdisc(discfound,pre,post,base,discretionary_code)
+ base = prev -- restart
+ end
+ end
+ end
+ return head, base
+end
+
+local function multiple_glyphs(head,start,multiple,ignoremarks)
+ local nofmultiples = #multiple
+ if nofmultiples > 0 then
+ resetinjection(start)
+ setchar(start,multiple[1])
+ if nofmultiples > 1 then
+ local sn = getnext(start)
+ for k=2,nofmultiples do
+-- untested:
+--
+-- while ignoremarks and marks[getchar(sn)] then
+-- local sn = getnext(sn)
+-- end
+ local n = copy_node(start) -- ignore components
+ resetinjection(n)
+ setchar(n,multiple[k])
+ insert_node_after(head,start,n)
+ start = n
+ end
+ end
+ return head, start, true
+ else
+ if trace_multiples then
+ logprocess("no multiple for %s",gref(getchar(start)))
+ end
+ return head, start, false
+ end
+end
+
+local function get_alternative_glyph(start,alternatives,value)
+ local n = #alternatives
+ if value == "random" then
+ local r = random(1,n)
+ return alternatives[r], trace_alternatives and formatters["value %a, taking %a"](value,r)
+ elseif value == "first" then
+ return alternatives[1], trace_alternatives and formatters["value %a, taking %a"](value,1)
+ elseif value == "last" then
+ return alternatives[n], trace_alternatives and formatters["value %a, taking %a"](value,n)
+ end
+ value = value == true and 1 or tonumber(value)
+ if type(value) ~= "number" then
+ return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ end
+ -- local a = alternatives[value]
+ -- if a then
+ -- -- some kind of hash
+ -- return a, trace_alternatives and formatters["value %a, taking %a"](value,a)
+ -- end
+ if value > n then
+ local defaultalt = otf.defaultnodealternate
+ if defaultalt == "first" then
+ return alternatives[n], trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ elseif defaultalt == "last" then
+ return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
+ else
+ return false, trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ end
+ elseif value == 0 then
+ return getchar(start), trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
+ elseif value < 1 then
+ return alternatives[1], trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
+ else
+ return alternatives[value], trace_alternatives and formatters["value %a, taking %a"](value,value)
+ end
+end
+
+-- handlers
+
+function handlers.gsub_single(head,start,dataset,sequence,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(dataset,sequence),gref(getchar(start)),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head, start, true
+end
+
+function handlers.gsub_alternate(head,start,dataset,sequence,alternative)
+ local kind = dataset[4]
+ local what = dataset[1]
+ local value = what == true and tfmdata.shared.features[kind] or what
+ local choice, comment = get_alternative_glyph(start,alternative,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",pref(dataset,sequence),gref(getchar(start)),gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",pref(dataset,sequence),value,gref(getchar(start)),comment)
+ end
+ end
+ return head, start, true
+end
+
+function handlers.gsub_multiple(head,start,dataset,sequence,multiple)
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple %s",pref(dataset,sequence),gref(getchar(start)),gref(multiple))
+ end
+ return multiple_glyphs(head,start,multiple,sequence.flags[1])
+end
+
+function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
+ local current = getnext(start)
+ if not current then
+ return head, start, false, nil
+ end
+ local stop = nil
+ local startchar = getchar(start)
+ if marks[startchar] then
+ while current do
+ local char = ischar(current,currentfont)
+ if char then
+ local lg = ligature[char]
+ if lg then
+ stop = current
+ ligature = lg
+ current = getnext(current)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if stop then
+ local lig = ligature.ligature
+ if lig then
+ if trace_ligatures then
+ local stopchar = getchar(stop)
+ head, start = markstoligature(head,start,stop,lig)
+ logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(getchar(start)))
+ else
+ head, start = markstoligature(head,start,stop,lig)
+ end
+ return head, start, true, false
+ else
+ -- ok, goto next lookup
+ end
+ end
+ else
+ local skipmark = sequence.flags[1]
+ local discfound = false
+ local lastdisc = nil
+ while current do
+ local char, id = ischar(current,currentfont)
+ if char then
+ if skipmark and marks[char] then
+ current = getnext(current)
+ else -- ligature is a tree
+ local lg = ligature[char] -- can there be multiple in a row? maybe in a bad font
+ if lg then
+ if not discfound and lastdisc then
+ discfound = lastdisc
+ lastdisc = nil
+ end
+ stop = current -- needed for fake so outside then
+ ligature = lg
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ elseif char == false then
+ -- kind of weird
+ break
+ elseif id == disc_code then
+ -- tricky .. we also need to do pre here
+ local replace = getfield(current,"replace")
+ if replace then
+ -- of{f-}{}{f}e o{f-}{}{f}fe o{-}{}{ff}e (oe and ff ligature)
+ -- we can end up here when we have a start run .. testruns start at a disc but
+ -- so here we have the other case: char + disc
+ while replace do
+ local char, id = ischar(replace,currentfont)
+ if char then
+ local lg = ligature[char] -- can there be multiple in a row? maybe in a bad font
+ if lg then
+ ligature = lg
+ replace = getnext(replace)
+ else
+ return head, start, false, false
+ end
+ else
+ return head, start, false, false
+ end
+ end
+ stop = current
+ end
+ lastdisc = current
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ local lig = ligature.ligature
+ if lig then
+ if stop then
+ if trace_ligatures then
+ local stopchar = getchar(stop)
+ head, start = toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(lig))
+ else
+ head, start = toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ end
+ else
+ -- weird but happens (in some arabic font)
+ resetinjection(start)
+ setchar(start,lig)
+ if trace_ligatures then
+ logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(dataset,sequence),gref(startchar),gref(lig))
+ end
+ end
+ return head, start, true, discfound
+ else
+ -- weird but happens, pseudo ligatures ... just the components
+ end
+ end
+ return head, start, false, discfound
+end
+
+function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local startchar = getchar(start)
+ if step.format == "pair" then
+ local dx, dy, w, h = setpair(start,factor,rlmode,sequence.flags[4],kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(dataset,sequence),gref(startchar),dx,dy,w,h)
+ end
+ else
+ -- needs checking .. maybe no kerns format for single
+ local k = setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(startchar),k)
+ end
+ end
+ return head, start, false
+end
+
+function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local snext = getnext(start)
+ if not snext then
+ return head, start, false
+ else
+ local prev = start
+ local done = false
+ while snext do
+ local nextchar = ischar(snext,currentfont)
+ if nextchar then
+ local krn = kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev = snext
+ snext = getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format == "pair" then
+ local a, b = krn[1], krn[2]
+ if optimizekerns then
+ -- this permits a mixed table, but we could also decide to optimize this
+ -- in the loader and use format 'kern'
+ if not b and a[1] == 0 and a[2] == 0 and a[4] == 0 then
+ local k = setkern(snext,factor,rlmode,a[3],injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(nextchar),k)
+ end
+ done = true
+ break
+ end
+ end
+ if a and #a > 0 then
+ local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,injection)
+ if trace_kerns then
+ local startchar = getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ if b and #b > 0 then
+ local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,injection)
+ if trace_kerns then
+ local startchar = getchar(snext)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ done = true
+ break
+ elseif krn ~= 0 then
+ local k = setkern(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting kern %p between %s and %s as %s",pref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar),injection or "injections")
+ end
+ done = true
+ break
+ else -- can't happen
+ break
+ end
+ else
+ break
+ end
+ end
+ return head, start, done
+ end
+end
+
+--[[ldx--
+<p>We get hits on a mark, but we're not sure if the it has to be applied so
+we need to explicitly test for basechar, baselig and basemark entries.</p>
+--ldx]]--
+
+function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local base = getprev(start) -- [glyph] [start=mark]
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base = getprev(base)
+ if base then
+ basechar = ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head, start, false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head, start, false
+ end
+ end
+ end
+ local ba = markanchors[1][basechar]
+ if ba then
+ local ma = markanchors[2]
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head, start, true
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local base = getprev(start) -- [glyph] [optional marks] [start=mark]
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base = getprev(base)
+ if base then
+ basechar = ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head, start, false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head, start, false
+ end
+ end
+ end
+ local ba = markanchors[1][basechar]
+ if ba then
+ local ma = markanchors[2]
+ if ma then
+ local index = getligaindex(start)
+ ba = ba[index]
+ if ba then
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar]) -- index
+ if trace_marks then
+ logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ pref(dataset,sequence),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head, start, true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(dataset,sequence),gref(markchar),gref(basechar),index)
+ end
+ end
+ end
+ elseif trace_bugs then
+ -- logwarning("%s: char %s is missing in font",pref(dataset,sequence),gref(basechar))
+ onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local base = getprev(start) -- [glyph] [basemark] [start=mark]
+ local slc = getligaindex(start)
+ if slc then -- a rather messy loop ... needs checking with husayni
+ while base do
+ local blc = getligaindex(base)
+ if blc and blc ~= slc then
+ base = getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then -- subtype test can go
+ local ba = markanchors[1][basechar] -- slot 1 has been made copy of the class hash
+ if ba then
+ local ma = markanchors[2]
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head, start, true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,step,i) -- to be checked
+ local done = false
+ local startchar = getchar(start)
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt = getnext(start)
+ while not done and nxt do
+ local nextchar = ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ -- should not happen (maybe warning)
+ nxt = getnext(nxt)
+ else
+ local exit = exitanchors[3]
+ if exit then
+ local entry = exitanchors[1][nextchar]
+ if entry then
+ entry = entry[2]
+ if entry then
+ local dx, dy, bound = setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
+ end
+ done = true
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ return head, start, done
+end
+
+--[[ldx--
+<p>I will implement multiple chain replacements once I run into a font that uses
+it. It's not that complex to handle.</p>
+--ldx]]--
+
+local chainprocs = { }
+
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_subchain(...)
+end
+
+local logwarning = report_subchain
+
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_chain(...)
+end
+
+local logwarning = report_chain
+
+-- We could share functions but that would lead to extra function calls with many
+-- arguments, redundant tests and confusing messages.
+
+-- The reversesub is a special case, which is why we need to store the replacements
+-- in a bit weird way. There is no lookup and the replacement comes from the lookup
+-- itself. It is meant mostly for dealing with Urdu.
+
+local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode)
+ local char = getchar(start)
+ local replacement = replacements[char]
+ if replacement then
+ if trace_singles then
+ logprocess("%s: single reverse replacement of %s by %s",cref(dataset,sequence),gref(char),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head, start, true
+ else
+ return head, start, false
+ end
+end
+
+
+chainprocs.reversesub = reversesub
+
+--[[ldx--
+<p>This chain stuff is somewhat tricky since we can have a sequence of actions to be
+applied: single, alternate, multiple or ligature where ligature can be an invalid
+one in the sense that it will replace multiple by one but not neccessary one that
+looks like the combination (i.e. it is the counterpart of multiple then). For
+example, the following is valid:</p>
+
+<typing>
+<line>xxxabcdexxx [single a->A][multiple b->BCD][ligature cde->E] xxxABCDExxx</line>
+</typing>
+
+<p>Therefore we we don't really do the replacement here already unless we have the
+single lookup case. The efficiency of the replacements can be improved by deleting
+as less as needed but that would also make the code even more messy.</p>
+--ldx]]--
+
+--[[ldx--
+<p>Here we replace start by a single variant.</p>
+--ldx]]--
+
+-- To be done (example needed): what if > 1 steps
+
+-- this is messy: do we need this disc checking also in alternaties?
+
+local function reportmoresteps(dataset,sequence)
+ logwarning("%s: more than 1 step",cref(dataset,sequence))
+end
+
+function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local current = start
+ while current do
+ local currentchar = ischar(current)
+ if currentchar then
+ local replacement = steps[1].coverage[currentchar]
+ if not replacement or replacement == "" then
+ if trace_bugs then
+ logwarning("%s: no single for %s",cref(dataset,sequence,chainindex),gref(currentchar))
+ end
+ else
+ if trace_singles then
+ logprocess("%s: replacing single %s by %s",cref(dataset,sequence,chainindex),gref(currentchar),gref(replacement))
+ end
+ resetinjection(current)
+ setchar(current,replacement)
+ end
+ return head, start, true
+ elseif currentchar == false then
+ -- can't happen
+ break
+ elseif current == stop then
+ break
+ else
+ current = getnext(current)
+ end
+ end
+ return head, start, false
+end
+
+--[[ldx--
+<p>Here we replace start by a sequence of new glyphs.</p>
+--ldx]]--
+
+function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar = getchar(start)
+ local replacement = steps[1].coverage[startchar]
+ if not replacement or replacement == "" then
+ if trace_bugs then
+ logwarning("%s: no multiple for %s",cref(dataset,sequence),gref(startchar))
+ end
+ else
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
+ end
+ return multiple_glyphs(head,start,replacement,currentlookup.flags[1]) -- not sequence.flags?
+ end
+ return head, start, false
+end
+
+--[[ldx--
+<p>Here we replace start by new glyph. First we delete the rest of the match.</p>
+--ldx]]--
+
+-- char_1 mark_1 -> char_x mark_1 (ignore marks)
+-- char_1 mark_1 -> char_x
+
+-- to be checked: do we always have just one glyph?
+-- we can also have alternates for marks
+-- marks come last anyway
+-- are there cases where we need to delete the mark
+
+function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlookup)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local kind = dataset[4]
+ local what = dataset[1]
+ local value = what == true and tfmdata.shared.features[kind] or what
+ local current = start
+ while current do
+ local currentchar = ischar(current)
+ if currentchar then
+ local alternatives = steps[1].coverage[currentchar]
+ if alternatives then
+ local choice, comment = get_alternative_glyph(current,alternatives,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",cref(dataset,sequence),gref(char),choice,gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",cref(dataset,sequence),value,gref(char),comment)
+ end
+ end
+ end
+ return head, start, true
+ elseif currentchar == false then
+ -- can't happen
+ break
+ elseif current == stop then
+ break
+ else
+ current = getnext(current)
+ end
+ end
+ return head, start, false
+end
+
+--[[ldx--
+<p>When we replace ligatures we use a helper that handles the marks. I might change
+this function (move code inline and handle the marks by a separate function). We
+assume rather stupid ligatures (no complex disc nodes).</p>
+--ldx]]--
+
+function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar = getchar(start)
+ local ligatures = steps[1].coverage[startchar]
+ if not ligatures then
+ if trace_bugs then
+ logwarning("%s: no ligatures starting with %s",cref(dataset,sequence,chainindex),gref(startchar))
+ end
+ else
+ local current = getnext(start)
+ local discfound = false
+ local last = stop
+ local nofreplacements = 1
+ local skipmark = currentlookup.flags[1] -- sequence.flags?
+ while current do
+ -- todo: ischar ... can there really be disc nodes here?
+ local id = getid(current)
+ if id == disc_code then
+ if not discfound then
+ discfound = current
+ end
+ if current == stop then
+ break -- okay? or before the disc
+ else
+ current = getnext(current)
+ end
+ else
+ local schar = getchar(current)
+ if skipmark and marks[schar] then -- marks
+ -- if current == stop then -- maybe add this
+ -- break
+ -- else
+ current = getnext(current)
+ -- end
+ else
+ local lg = ligatures[schar]
+ if lg then
+ ligatures = lg
+ last = current
+ nofreplacements = nofreplacements + 1
+ if current == stop then
+ break
+ else
+ current = getnext(current)
+ end
+ else
+ break
+ end
+ end
+ end
+ end
+ local ligature = ligatures.ligature
+ if ligature then
+ if chainindex then
+ stop = last
+ end
+ if trace_ligatures then
+ if start == stop then
+ logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
+ else
+ logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
+ end
+ end
+ head, start = toligature(head,start,stop,ligature,dataset,sequence,skipmark,discfound)
+ return head, start, true, nofreplacements, discfound
+ elseif trace_bugs then
+ if start == stop then
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
+ else
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
+ end
+ end
+ end
+ return head, start, false, 0, false
+end
+
+function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar = getchar(start)
+ local step = steps[1]
+ local kerns = step.coverage[startchar]
+ if not kerns then
+ -- skip
+ elseif step.format == "pair" then
+ local dx, dy, w, h = setpair(start,factor,rlmode,sequence.flags[4],kerns) -- currentlookup.flags ?
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),dx,dy,w,h)
+ end
+ else -- needs checking .. maybe no kerns format for single
+ local k = setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ end
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex) -- todo: injections ?
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local snext = getnext(start)
+ if snext then
+ local startchar = getchar(start)
+ local step = steps[1]
+ local kerns = step.coverage[startchar] -- always 1 step
+ if kerns then
+ local prev = start
+ local done = false
+ while snext do
+ local nextchar = ischar(snext,currentfont)
+ if not nextchar then
+ break
+ end
+ local krn = kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev = snext
+ snext = getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format == "pair" then
+ local a, b = krn[1], krn[2]
+ if optimizekerns then
+ -- this permits a mixed table, but we could also decide to optimize this
+ -- in the loader and use format 'kern'
+ if not b and a[1] == 0 and a[2] == 0 and a[4] == 0 then
+ local k = setkern(snext,factor,rlmode,a[3],"injections")
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ end
+ done = true
+ break
+ end
+ end
+ if a and #a > 0 then
+ local startchar = getchar(start)
+ local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,"injections") -- currentlookups flags?
+ if trace_kerns then
+ 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 and #b > 0 then
+ local startchar = getchar(start)
+ local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,"injections")
+ if trace_kerns then
+ 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
+ end
+ done = true
+ break
+ elseif krn ~= 0 then
+ local k = setkern(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting kern %s between %s and %s",cref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar))
+ end
+ done = true
+ break
+ else
+ break
+ end
+ end
+ return head, start, done
+ end
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local markanchors = steps[1].coverage[markchar] -- always 1 step
+ if markanchors then
+ local base = getprev(start) -- [glyph] [start=mark]
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base = getprev(base)
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head, start, false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head, start, false
+ end
+ end
+ end
+ local ba = markanchors[1][basechar]
+ if ba then
+ local ma = markanchors[2]
+ if ma then
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head, start, true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local markanchors = steps[1].coverage[markchar] -- always 1 step
+ if markanchors then
+ local base = getprev(start) -- [glyph] [optional marks] [start=mark]
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base = getprev(base)
+ if base then
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,1)
+ end
+ return head, start, false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
+ end
+ return head, start, false
+ end
+ end
+ end
+ local ba = markanchors[1][basechar]
+ if ba then
+ local ma = markanchors[2]
+ if ma then
+ local index = getligaindex(start)
+ ba = ba[index]
+ if ba then
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ cref(dataset,sequence),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head, start, true
+ end
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s, mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar = getchar(start)
+ if marks[markchar] then
+ local markanchors = steps[1].coverage[markchar] -- always 1 step
+ if markanchors then
+ local base = getprev(start) -- [glyph] [basemark] [start=mark]
+ local slc = getligaindex(start)
+ if slc then -- a rather messy loop ... needs checking with husayni
+ while base do
+ local blc = getligaindex(base)
+ if blc and blc ~= slc then
+ base = getprev(base)
+ else
+ break
+ end
+ end
+ end
+ if base then -- subtype test can go
+ local basechar = ischar(base,currentfont)
+ if basechar then
+ local ba = markanchors[1][basechar]
+ if ba then
+ local ma = markanchors[2]
+ if ma then
+ local dx, dy, bound = setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head, start, true
+ end
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),1)
+ end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
+ end
+ elseif trace_bugs then
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
+ end
+ return head, start, false
+end
+
+function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar = getchar(start)
+ local exitanchors = steps[1].coverage[startchar] -- always 1 step
+ if exitanchors then
+ local done = false
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt = getnext(start)
+ while not done and nxt do
+ local nextchar = ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ -- should not happen (maybe warning)
+ nxt = getnext(nxt)
+ else
+ local exit = exitanchors[3]
+ if exit then
+ local entry = exitanchors[1][nextchar]
+ if entry then
+ entry = entry[2]
+ if entry then
+ local dx, dy, bound = setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
+ end
+ done = true
+ break
+ end
+ end
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
+ end
+ break
+ end
+ end
+ end
+ return head, start, done
+ else
+ if trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ return head, start, false
+ end
+end
+
+-- what pointer to return, spec says stop
+-- to be discussed ... is bidi changer a space?
+-- elseif char == zwnj and sequence[n][32] then -- brrr
+
+local function show_skip(dataset,sequence,char,ck,class)
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(dataset,sequence),gref(char),class,ck[1],ck[8] or ck[2])
+end
+
+-- A previous version had disc collapsing code in the (single sub) handler plus some
+-- checking in the main loop, but that left the pre/post sequences undone. The best
+-- solution is to add some checking there and backtrack when a replace/post matches
+-- but it takes a bit of work to figure out an efficient way (this is what the sweep*
+-- names refer to). I might look into that variant one day again as it can replace
+-- some other code too. In that approach we can have a special version for gub and pos
+-- which gains some speed. This method does the test and passes info to the handlers
+-- (sweepnode, sweepmode, sweepprev, sweepnext, etc). Here collapsing is handled in the
+-- main loop which also makes code elsewhere simpler (i.e. no need for the other special
+-- runners and disc code in ligature building). I also experimented with pushing preceding
+-- glyphs sequences in the replace/pre fields beforehand which saves checking afterwards
+-- but at the cost of duplicate glyphs (memory) but it's too much overhead (runtime).
+--
+-- In the meantime Kai had moved the code from the single chain into a more general handler
+-- and this one (renamed to chaindisk) is used now. I optimized the code a bit and brought
+-- it in sycn with the other code. Hopefully I didn't introduce errors. Note: this somewhat
+-- complex approach is meant for fonts that implement (for instance) ligatures by character
+-- replacement which to some extend is not that suitable for hyphenation. I also use some
+-- helpers. This method passes some states but reparses the list. There is room for a bit of
+-- speed up but that will be done in the context version. (In fact a partial rewrite of all
+-- code can bring some more efficientry.)
+--
+-- I didn't test it with extremes but successive disc nodes still can give issues but in
+-- order to handle that we need more complex code which also slows down even more. The main
+-- loop variant could deal with that: test, collapse, backtrack.
+
+local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,ck,chainproc)
+
+ if not start then
+ return head, start, false
+ end
+
+ local startishead = start == head
+ local seq = ck[3]
+ local f = ck[4]
+ local l = ck[5]
+ local s = #seq
+ local done = false
+ local sweepnode = sweepnode
+ local sweeptype = sweeptype
+ local sweepoverflow = false
+ local checkdisc = getprev(head) -- hm bad name head
+ local keepdisc = not sweepnode
+ local lookaheaddisc = nil
+ local backtrackdisc = nil
+ local current = start
+ local last = start
+ local prev = getprev(start)
+
+ -- fishy: so we can overflow and then go on in the sweep?
+
+ local i = f
+ while i <= l do
+ local id = getid(current)
+ if id == glyph_code then
+ i = i + 1
+ last = current
+ current = getnext(current)
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpre[current] ~= notmatchreplace[current] then
+ lookaheaddisc = current
+ end
+ local replace = getfield(current,"replace")
+ while replace and i <= l do
+ if getid(replace) == glyph_code then
+ i = i + 1
+ end
+ replace = getnext(replace)
+ end
+ last = current
+ current = getnext(c)
+ else
+ head, current = flattendisk(head,current)
+ end
+ else
+ last = current
+ current = getnext(current)
+ end
+ if current then
+ -- go on
+ elseif sweepoverflow then
+ -- we already are folling up on sweepnode
+ break
+ elseif sweeptype == "post" or sweeptype == "replace" then
+ current = getnext(sweepnode)
+ if current then
+ sweeptype = nil
+ sweepoverflow = true
+ else
+ break
+ end
+ else
+ break -- added
+ end
+ end
+
+ if sweepoverflow then
+ local prev = current and getprev(current)
+ if not current or prev ~= sweepnode then
+ local head = getnext(sweepnode)
+ local tail = nil
+ if prev then
+ tail = prev
+ setprev(current,sweepnode)
+ else
+ tail = find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head,nil)
+ setnext(tail,nil)
+ appenddisc(sweepnode,head)
+ end
+ end
+
+ if l < s then
+ local i = l
+ local t = sweeptype == "post" or sweeptype == "replace"
+ while current and i < s do
+ local id = getid(current)
+ if id == glyph_code then
+ i = i + 1
+ current = getnext(current)
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpre[current] ~= notmatchreplace[current] then
+ lookaheaddisc = current
+ end
+ local replace = getfield(c,"replace")
+ while replace and i < s do
+ if getid(replace) == glyph_code then
+ i = i + 1
+ end
+ replace = getnext(replace)
+ end
+ current = getnext(current)
+ elseif notmatchpre[current] ~= notmatchreplace[current] then
+ head, current = flattendisk(head,current)
+ else
+ current = getnext(current) -- HH
+ end
+ else
+ current = getnext(current)
+ end
+ if not current and t then
+ current = getnext(sweepnode)
+ if current then
+ sweeptype = nil
+ end
+ end
+ end
+ end
+
+ if f > 1 then
+ local current = prev
+ local i = f
+ local t = sweeptype == "pre" or sweeptype == "replace"
+ if not current and t and current == checkdisk then
+ current = getprev(sweepnode)
+ end
+ while current and i > 1 do -- missing getprev added / moved outside
+ local id = getid(current)
+ if id == glyph_code then
+ i = i - 1
+ elseif id == disc_code then
+ if keepdisc then
+ keepdisc = false
+ if notmatchpost[current] ~= notmatchreplace[current] then
+ backtrackdisc = current
+ end
+ local replace = getfield(current,"replace")
+ while replace and i > 1 do
+ if getid(replace) == glyph_code then
+ i = i - 1
+ end
+ replace = getnext(replace)
+ end
+ elseif notmatchpost[current] ~= notmatchreplace[current] then
+ head, current = flattendisk(head,current)
+ end
+ end
+ current = getprev(current)
+ if t and current == checkdisk then
+ current = getprev(sweepnode)
+ end
+ end
+ end
+
+ local ok = false
+ if lookaheaddisc then
+
+ local cf = start
+ local cl = getprev(lookaheaddisc)
+ local cprev = getprev(start)
+ local insertedmarks = 0
+
+ while cprev do
+ local char = ischar(cf,currentfont)
+ if char and marks[char] then
+ insertedmarks = insertedmarks + 1
+ cf = cprev
+ startishead = cf == head
+ cprev = getprev(cprev)
+ else
+ break
+ end
+ end
+
+ setprev(lookaheaddisc,cprev)
+ if cprev then
+ setnext(cprev,lookaheaddisc)
+ end
+ setprev(cf,nil)
+ setnext(cl,nil)
+ if startishead then
+ head = lookaheaddisc
+ end
+ local pre, post, replace = getdisc(lookaheaddisc)
+ local new = copy_node_list(cf)
+ local cnew = new
+ for i=1,insertedmarks do
+ cnew = getnext(cnew)
+ end
+ local clast = cnew
+ for i=f,l do
+ clast = getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ cf, start, ok = chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ new, cnew, ok = chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if pre then
+ setlink(cl,pre)
+ end
+ if replace then
+ local tail = find_node_tail(new)
+ setlink(tail,replace)
+ end
+ setdisc(lookaheaddisc,cf,post,new)
+ start = getprev(lookaheaddisc)
+ sweephead[cf] = getnext(clast)
+ sweephead[new] = getnext(last)
+
+ elseif backtrackdisc then
+
+ local cf = getnext(backtrackdisc)
+ local cl = start
+ local cnext = getnext(start)
+ local insertedmarks = 0
+
+ while cnext do
+ local char = ischar(cnext,currentfont)
+ if char and marks[char] then
+ insertedmarks = insertedmarks + 1
+ cl = cnext
+ cnext = getnext(cnext)
+ else
+ break
+ end
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf,nil)
+ setnext(cl,nil)
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(backtrackdisc,true)
+ local new = copy_node_list(cf)
+ local cnew = find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew = getprev(cnew)
+ end
+ local clast = cnew
+ for i=f,l do
+ clast = getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ cf, start, ok = chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[backtrackdisc] then
+ new, cnew, ok = chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if post then
+ setlink(posttail,cf)
+ else
+ post = cf
+ end
+ if replace then
+ setlink(replacetail,new)
+ else
+ replace = new
+ end
+ setdisc(backtrackdisc,pre,post,replace)
+ start = getprev(backtrackdisc)
+ sweephead[post] = getnext(clast)
+ sweephead[replace] = getnext(last)
+
+ else
+
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,k)
+
+ end
+
+ return head, start, ok
+end
+
+-- helpers from elsewhere
+
+-- local function currentmatch(current,n,l)
+-- while current do
+-- if getid(current) ~= glyph_code then
+-- return false
+-- elseif seq[n][getchar(current)] then
+-- n = n + 1
+-- current = getnext(current)
+-- if not current then
+-- return true, n, current
+-- elseif n > l then
+-- -- match = false
+-- return true, n, current
+-- end
+-- else
+-- return false
+-- end
+-- end
+-- end
+--
+-- local function aftermatch(current,n,l)
+-- while current do
+-- if getid(current) ~= glyph_code then
+-- return false
+-- elseif seq[n][getchar(current)] then
+-- n = n + 1
+-- current = getnext(current)
+-- if not current then
+-- return true, n, current
+-- elseif n > l then
+-- -- match = false
+-- return true, n, current
+-- end
+-- else
+-- return false
+-- end
+-- end
+-- end
+--
+-- local function beforematch(current,n)
+-- local finish = getprev(current)
+-- local current = find_node_tail(current)
+-- while current do
+-- if getid(current) ~= glyph_code then
+-- return false
+-- elseif seq[n][getchar(current)] then
+-- n = n - 1
+-- current = getprev(current)
+-- if not current or current == finish then
+-- return true, n, current
+-- elseif n < 1 then
+-- -- match = false
+-- return true, n, current
+-- end
+-- else
+-- return false
+-- end
+-- end
+-- end
+
+local noflags = { false, false, false, false }
+
+local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
+ local sweepnode = sweepnode
+ local sweeptype = sweeptype
+ local currentfont = currentfont
+ local diskseen = false
+ local checkdisc = getprev(head)
+ local flags = sequence.flags or noflags
+ local done = false
+ local skipmark = flags[1]
+ local skipligature = flags[2]
+ local skipbase = flags[3]
+ local markclass = sequence.markclass
+ local skipped = false
+ for k=1,#contexts do -- i've only seen ccmp having > 1 (e.g. dejavu)
+ local match = true
+ local current = start
+ local last = start
+ local ck = contexts[k]
+ local seq = ck[3]
+ local s = #seq
+ -- f..l = mid string
+ if s == 1 then
+ -- never happens
+ local char = ischar(current,currentfont)
+ if char then
+ match = seq[1][char]
+ end
+ else
+ -- maybe we need a better space check (maybe check for glue or category or combination)
+ -- we cannot optimize for n=2 because there can be disc nodes
+ local f = ck[4]
+ local l = ck[5]
+ -- current match
+ if f == 1 and f == l then -- current only
+ -- already a hit
+ -- match = true
+ else -- before/current/after | before/current | current/after
+ -- no need to test first hit (to be optimized)
+ if f == l then -- new, else last out of sync (f is > 1)
+ -- match = true
+ else
+ local discfound = nil
+ local n = f + 1
+ last = getnext(last)
+ while n <= l do
+ if not last and (sweeptype == "post" or sweeptype == "replace") then
+ last = getnext(sweepnode)
+ sweeptype = nil
+ end
+ if last then
+ local char, id = ischar(last,currentfont)
+ if char then
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class or "base"
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ last = getnext(last)
+ elseif seq[n][char] then
+ if n < l then
+ last = getnext(last)
+ end
+ n = n + 1
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ last = getnext(last)
+ elseif char == false then
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ elseif id == disc_code then
+ diskseen = true
+ discfound = last
+ notmatchpre[last] = nil
+ notmatchpost[last] = true
+ notmatchreplace[last] = nil
+ local pre, post, replace = getdisc(last)
+ if pre then
+ local n = n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n = n + 1
+ pre = getnext(pre)
+ if n > l then
+ break
+ end
+ else
+ notmatchpre[last] = true
+ break
+ end
+ end
+ if n <= l then
+ notmatchpre[last] = true
+ end
+ else
+ notmatchpre[last] = true
+ end
+ if replace then
+ -- so far we never entered this branch
+ while replace do
+ if seq[n][getchar(replace)] then
+ n = n + 1
+ replace = getnext(replace)
+ if n > l then
+ break
+ end
+ else
+ notmatchreplace[last] = true
+ match = not notmatchpre[last]
+ break
+ end
+ end
+ match = not notmatchpre[last]
+ end
+ last = getnext(last)
+ else
+ match = false
+ break
+ end
+ else
+ match = false
+ break
+ end
+ end
+ end
+ end
+ -- before
+ if match and f > 1 then
+ local prev = getprev(start)
+ if prev then
+ if prev == checkdisc and (sweeptype == "pre" or sweeptype == "replace") then
+ prev = getprev(sweepnode)
+ -- sweeptype = nil
+ end
+ if prev then
+ local discfound = nil
+ local n = f - 1
+ while n >= 1 do
+ if prev then
+ local char, id = ischar(prev,currentfont)
+ if char then
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ elseif seq[n][char] then
+ n = n -1
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ prev = getprev(prev)
+ elseif char == false then
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpost[discfound]
+ else
+ match = false
+ end
+ break
+ elseif id == disc_code then
+ -- the special case: f i where i becomes dottless i ..
+ diskseen = true
+ discfound = prev
+ notmatchpre[prev] = true
+ notmatchpost[prev] = nil
+ notmatchreplace[prev] = nil
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(prev,true)
+ if pre ~= start and post ~= start and replace ~= start then
+ if post then
+ local n = n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n = n - 1
+ if posttail == post then
+ break
+ else
+ posttail = getprev(posttail)
+ if n < 1 then
+ break
+ end
+ end
+ else
+ notmatchpost[prev] = true
+ break
+ end
+ end
+ if n >= 1 then
+ notmatchpost[prev] = true
+ end
+ else
+ notmatchpost[prev] = true
+ end
+ if replace then
+ -- we seldom enter this branch (e.g. on brill efficient)
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n = n - 1
+ if replacetail == replace then
+ break
+ else
+ replacetail = getprev(replacetail)
+ if n < 1 then
+ break
+ end
+ end
+ else
+ notmatchreplace[prev] = true
+ match = not notmatchpost[prev]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ -- skip 'm
+ end
+ else
+ -- skip 'm
+ end
+ elseif seq[n][32] then
+ n = n - 1
+ else
+ match = false
+ break
+ end
+ prev = getprev(prev)
+ elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces
+ n = n - 1
+ else
+ match = false
+ break
+ end
+ end
+ else
+ match = false
+ end
+ else
+ match = false
+ end
+ end
+ -- after
+ if match and s > l then
+ local current = last and getnext(last)
+ if not current then
+ if sweeptype == "post" or sweeptype == "replace" then
+ current = getnext(sweepnode)
+ -- sweeptype = nil
+ end
+ end
+ if current then
+ local discfound = nil
+ -- removed optimization for s-l == 1, we have to deal with marks anyway
+ local n = l + 1
+ while n <= s do
+ if current then
+ local char, id = ischar(current,currentfont)
+ if char then
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ elseif seq[n][char] then
+ n = n + 1
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ end
+ elseif char == false then
+ if discfound then
+ notmatchreplace[discfound] = true
+ match = not notmatchpre[discfound]
+ else
+ match = false
+ end
+ break
+ elseif id == disc_code then
+ diskseen = true
+ discfound = current
+ notmatchpre[current] = nil
+ notmatchpost[current] = true
+ notmatchreplace[current] = nil
+ local pre, post, replace = getdisc(current)
+ if pre then
+ local n = n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n = n + 1
+ pre = getnext(pre)
+ if n > s then
+ break
+ end
+ else
+ notmatchpre[current] = true
+ break
+ end
+ end
+ if n <= s then
+ notmatchpre[current] = true
+ end
+ else
+ notmatchpre[current] = true
+ end
+ if replace then
+ -- so far we never entered this branch
+ while replace do
+ if seq[n][getchar(replace)] then
+ n = n + 1
+ replace = getnext(replace)
+ if n > s then
+ break
+ end
+ else
+ notmatchreplace[current] = true
+ match = notmatchpre[current]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ -- skip 'm
+ end
+ elseif seq[n][32] then -- brrr
+ n = n + 1
+ else
+ match = false
+ break
+ end
+ current = getnext(current)
+ elseif seq[n][32] then
+ n = n + 1
+current = getnext(current)
+ else
+ match = false
+ break
+ end
+ end
+ else
+ match = false
+ end
+ end
+ end
+ if match then
+ -- can lookups be of a different type ?
+ local diskchain = diskseen or sweepnode
+ if trace_contexts then
+ local rule = ck[1]
+ local lookuptype = ck[8] or ck[2]
+ local first = ck[4]
+ local last = ck[5]
+ local char = getchar(start)
+ logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a",
+ cref(dataset,sequence),rule,gref(char),first-1,last-first+1,s-last,lookuptype)
+ end
+ local chainlookups = ck[6]
+ if chainlookups then
+ local nofchainlookups = #chainlookups
+ -- we can speed this up if needed
+ if nofchainlookups == 1 then
+ local chainlookup = chainlookups[1]
+ local chainkind = chainlookup.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok
+ if diskchain then
+ head, start, ok = chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,1,ck,chainproc)
+ else
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,1)
+ end
+ if ok then
+ done = true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ else
+ local i = 1
+ while start and true do
+ if skipped then
+ while start do -- todo: use properties
+ local char = getchar(start)
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class or "base"
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ start = getnext(start)
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ end
+ -- see remark in ms standard under : LookupType 5: Contextual Substitution Subtable
+ local chainlookup = chainlookups[1] -- should be i when they can be different
+ if not chainlookup then
+ -- we just advance
+ i = i + 1 -- shouldn't that be #current
+ else
+ local chainkind = chainlookup.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok, n
+ if diskchain then
+ head, start, ok = chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,i,ck,chainproc)
+ else
+ head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,i)
+ end
+ -- messy since last can be changed !
+ if ok then
+ done = true
+ if n and n > 1 then
+ -- we have a ligature (cf the spec we advance one but we really need to test it
+ -- as there are fonts out there that are fuzzy and have too many lookups:
+ --
+ -- U+1105 U+119E U+1105 U+119E : sourcehansansklight: script=hang ccmp=yes
+ --
+ if i + n > nofchainlookups then
+ -- if trace_contexts then
+ -- logprocess("%s: quitting lookups",cref(dataset,sequence))
+ -- end
+ break
+ else
+ -- we need to carry one
+ end
+ end
+ end
+ else
+ -- actually an error
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ end
+ i = i + 1
+ end
+ if i > nofchainlookups or not start then
+ break
+ elseif start then
+ start = getnext(start)
+ end
+ end
+ end
+ else
+ local replacements = ck[7]
+ if replacements then
+ head, start, done = reversesub(head,start,last,dataset,sequence,replacements,rlmode)
+ else
+ done = quit_on_no_replacement -- can be meant to be skipped / quite inconsistent in fonts
+ if trace_contexts then
+ logprocess("%s: skipping match",cref(dataset,sequence))
+ end
+ end
+ end
+ if done then
+ break -- out of contexts (new, needs checking)
+ end
+ end
+ end
+ if diskseen then
+ notmatchpre = { }
+ notmatchpost = { }
+ notmatchreplace = { }
+ end
+ return head, start, done
+end
+
+handlers.gsub_context = handle_contextchain
+handlers.gsub_contextchain = handle_contextchain
+handlers.gsub_reversecontextchain = handle_contextchain
+handlers.gpos_contextchain = handle_contextchain
+handlers.gpos_context = handle_contextchain
+
+-- this needs testing
+
+local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps = currentlookup.steps
+ local nofsteps = currentlookup.nofsteps
+ if nofsteps > 1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,dataset,sequence,currentlookup,rlmode)
+end
+
+chainprocs.gsub_context = chained_contextchain
+chainprocs.gsub_contextchain = chained_contextchain
+chainprocs.gsub_reversecontextchain = chained_contextchain
+chainprocs.gpos_contextchain = chained_contextchain
+chainprocs.gpos_context = chained_contextchain
+
+local missing = setmetatableindex("table")
+
+local function logprocess(...)
+ if trace_steps then
+ registermessage(...)
+ end
+ report_process(...)
+end
+
+local logwarning = report_process
+
+local function report_missing_coverage(dataset,sequence)
+ local t = missing[currentfont]
+ if not t[sequence] then
+ t[sequence] = true
+ logwarning("missing coverage for feature %a, lookup %a, type %a, font %a, name %a",
+ dataset[4],sequence.name,sequence.type,currentfont,tfmdata.properties.fullname)
+ end
+end
+
+local resolved = { } -- we only resolve a font,script,language pair once
+
+-- todo: pass all these 'locals' in a table
+
+local sequencelists = setmetatableindex(function(t,font)
+ local sequences = fontdata[font].resources.sequences
+ if not sequences or not next(sequences) then
+ sequences = false
+ end
+ t[font] = sequences
+ return sequences
+end)
+
+-- fonts.hashes.sequences = sequencelists
+
+local autofeatures = fonts.analyzers.features
+local featuretypes = otf.tables.featuretypes
+local defaultscript = otf.features.checkeddefaultscript
+local defaultlanguage = otf.features.checkeddefaultlanguage
+
+local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
+ local features = sequence.features
+ if features then
+ local order = sequence.order
+ if order then
+ local featuretype = featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind = order[i]
+ local valid = enabled[kind]
+ if valid then
+ local scripts = features[kind]
+ local languages = scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled = languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid, autofeatures[kind] or false, sequence, kind }
+ end
+ end
+ end
+ else
+ -- can't happen
+ end
+ end
+ return false
+end
+
+function otf.dataset(tfmdata,font) -- generic variant, overloaded in context
+ local shared = tfmdata.shared
+ local properties = tfmdata.properties
+ local language = properties.language or "dflt"
+ local script = properties.script or "dflt"
+ local enabled = shared.features
+ local autoscript = enabled and enabled.autoscript
+ local autolanguage = enabled and enabled.autolanguage
+ local res = resolved[font]
+ if not res then
+ res = { }
+ resolved[font] = res
+ end
+ local rs = res[script]
+ if not rs then
+ rs = { }
+ res[script] = rs
+ end
+ local rl = rs[language]
+ if not rl then
+ rl = {
+ -- indexed but we can also add specific data by key
+ }
+ rs[language] = rl
+ local sequences = tfmdata.resources.sequences
+ for s=1,#sequences do
+ local v = enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
+ if v then
+ rl[#rl+1] = v
+ end
+ end
+ end
+ return rl
+end
+
+local function report_disc(what,n)
+ report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
+end
+
+local function kernrun(disc,k_run,font,attr,...)
+ --
+ -- we catch <font 1><disc font 2>
+ --
+ if trace_kernruns then
+ report_disc("kern",disc)
+ end
+ --
+ local prev, next = getboth(disc)
+ --
+ local nextstart = next
+ local done = false
+ --
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ --
+ local prevmarks = prev
+ --
+ -- can be optional, because why on earth do we get a disc after a mark (okay, maybe when a ccmp
+ -- has happened but then it should be in the disc so basically this test indicates an error)
+ --
+ while prevmarks do
+ local char = ischar(prevmarks,font)
+ if char and marks[char] then
+ prevmarks = getprev(prevmarks)
+ else
+ break
+ end
+ end
+ --
+ if prev and (pre or replace) and not ischar(prev,font) then
+ prev = false
+ end
+ if next and (post or replace) and not ischar(next,font) then
+ next = false
+ end
+ --
+ -- we need to get rid of this nest mess some day .. has to be done otherwise
+ --
+ if pre then
+ if k_run(pre,"injections",nil,font,attr,...) then
+ done = true
+ end
+ if prev then
+ local nest = getprev(pre)
+ setlink(prev,pre)
+ if k_run(prevmarks,"preinjections",pre,font,attr,...) then -- or prev?
+ done = true
+ end
+ setprev(pre,nest)
+ setnext(prev,disc)
+ end
+ end
+ --
+ if post then
+ if k_run(post,"injections",nil,font,attr,...) then
+ done = true
+ end
+ if next then
+ setlink(posttail,next)
+ if k_run(posttail,"postinjections",next,font,attr,...) then
+ done = true
+ end
+ setnext(posttail,nil)
+ setprev(next,disc)
+ end
+ end
+ --
+ if replace then
+ if k_run(replace,"injections",nil,font,attr,...) then
+ done = true
+ end
+ if prev then
+ local nest = getprev(replace)
+ setlink(prev,replace)
+ if k_run(prevmarks,"replaceinjections",replace,font,attr,...) then -- getnext(replace))
+ done = true
+ end
+ setprev(replace,nest)
+ setnext(prev,disc)
+ end
+ if next then
+ setlink(replacetail,next)
+ if k_run(replacetail,"replaceinjections",next,font,attr,...) then
+ done = true
+ end
+ setnext(replacetail,nil)
+ setprev(next,disc)
+ end
+ elseif prev and next then
+ setlink(prev,next)
+ if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
+ done = true
+ end
+ setlink(prev,disc)
+ setlink(disc,next)
+ end
+ return nextstart, done
+end
+
+local function comprun(disc,c_run,...)
+ if trace_compruns then
+ report_disc("comp",disc)
+ end
+ --
+ local pre, post, replace = getdisc(disc)
+ local renewed = false
+ --
+ if pre then
+ sweepnode = disc
+ sweeptype = "pre" -- in alternative code preinjections is uc_c_sed (also used then for proeprties, saves a variable)
+ local new, done = c_run(pre,...)
+ if done then
+ pre = new
+ renewed = true
+ end
+ end
+ --
+ if post then
+ sweepnode = disc
+ sweeptype = "post"
+ local new, done = c_run(post,...)
+ if done then
+ post = new
+ renewed = true
+ end
+ end
+ --
+ if replace then
+ sweepnode = disc
+ sweeptype = "replace"
+ local new, done = c_run(replace,...)
+ if done then
+ replace = new
+ renewed = true
+ end
+ end
+ --
+ sweepnode = nil
+ sweeptype = nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ end
+ --
+ return getnext(disc), renewed
+end
+
+local function testrun(disc,t_run,c_run,...)
+ if trace_testruns then
+ report_disc("test",disc)
+ end
+ local prev, next = getboth(disc)
+ if not next then
+ -- weird discretionary
+ return
+ end
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ local done = false
+ if replace and prev then
+ -- this is a bit strange as we only do replace here and not post
+ -- anyway, we only look ahead ... the idea is that we discard a
+ -- disc when there is a ligature crossing the replace boundary
+ setlink(replacetail,next)
+ local ok, overflow = t_run(replace,next,...)
+ if ok and overflow then
+ -- so, we can have crossed the boundary
+ setfield(disc,"replace",nil)
+ setlink(prev,replace)
+ -- setlink(replacetail,next)
+ setboth(disc)
+ flush_node_list(disc)
+ return replace, true -- restart .. tricky !
+ else
+ -- we stay inside the disc
+ setnext(replacetail)
+ setprev(next,disc)
+ end
+ -- pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ end
+ --
+ -- like comprun
+ --
+ local renewed = false
+ --
+ if pre then
+ sweepnode = disc
+ sweeptype = "pre"
+ local new, ok = c_run(pre,...)
+ if ok then
+ pre = new
+ renewed = true
+ end
+ end
+ --
+ if post then
+ sweepnode = disc
+ sweeptype = "post"
+ local new, ok = c_run(post,...)
+ if ok then
+ post = new
+ renewed = true
+ end
+ end
+ --
+ if replace then
+ sweepnode = disc
+ sweeptype = "replace"
+ local new, ok = c_run(replace,...)
+ if ok then
+ replace = new
+ renewed = true
+ end
+ end
+ --
+ sweepnode = nil
+ sweeptype = nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ return next, true
+ else
+ return next, done
+ end
+end
+
+-- A discrun happens when we have a zwnj. We're gpossing so it is unlikely that
+-- there has been a match changing the character. Now, as we check again here
+-- the question is: why do we do this ... needs checking as drun seems useless
+-- ... maybe that code can go away
+
+-- local function discrun(disc,drun,krun)
+-- local prev, next = getboth(disc)
+-- if trace_discruns then
+-- report_disc("disc",disc)
+-- end
+-- if next and prev then
+-- setnext(prev,next)
+-- -- setprev(next,prev)
+-- drun(prev)
+-- setnext(prev,disc)
+-- -- setprev(next,disc)
+-- end
+-- --
+-- if krun then -- currently always false
+-- local pre = getfield(disc,"pre")
+-- if not pre then
+-- -- go on
+-- elseif prev then
+-- local nest = getprev(pre)
+-- setlink(prev,pre)
+-- krun(prev,"preinjections")
+-- setprev(pre,nest)
+-- setnext(prev,disc)
+-- else
+-- krun(pre,"preinjections")
+-- end
+-- end
+-- return next
+-- end
+
+-- We can make some assumptions with respect to discretionaries. First of all it is very
+-- unlikely that some of the analysis related attributes applies. Then we can also assume
+-- that the ConTeXt specific dynamic attribute is different, although we do use explicit
+-- discretionaries (maybe we need to tag those some day). So, at least for now, we don't
+-- have the following test in the sub runs:
+--
+-- -- local a = getattr(start,0)
+-- -- if a then
+-- -- a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
+-- -- else
+-- -- a = not attribute or getprop(start,a_state) == attribute
+-- -- end
+-- -- if a then
+--
+-- but use this instead:
+--
+-- -- local a = getattr(start,0)
+-- -- if not a or (a == attr) then
+--
+-- and even that one is probably not needed.
+
+local nesting = 0
+
+local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local done = false
+ local sweep = sweephead[head]
+ if sweep then
+ start = sweep
+ sweephead[head] = nil
+ else
+ start = head
+ end
+ while start do
+ local char = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if not a or (a == attr) then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ local ok
+ head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ done = true
+ end
+ end
+ if start then
+ start = getnext(start)
+ end
+ else
+ start = getnext(start)
+ end
+ elseif char == false then
+ return head, done
+ elseif sweep then
+ -- else we loose the rest
+ return head, done
+ else
+ -- in disc component
+ start = getnext(start)
+ end
+ end
+ return head, done
+end
+
+local function t_run_single(start,stop,font,attr,lookupcache)
+ while start ~= stop do
+ local char = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if not a or (a == attr) then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then -- hm, hyphens can match (tlig) so we need to really check
+ -- if we need more than ligatures we can outline the code and use functions
+ local s = getnext(start)
+ local l = nil
+ local d = 0
+ while s do
+ if s == stop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
+ local lg = lookupmatch[getchar(s)]
+ if lg then
+ l = lg
+ s = getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true, d > 1
+ end
+ end
+ end
+ start = getnext(start)
+ else
+ break
+ end
+ end
+end
+
+-- local function d_run_single(prev,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+-- local a = getattr(prev,0)
+-- if not a or (a == attr) then
+-- local char = ischar(prev) -- can be disc
+-- if char then
+-- local lookupmatch = lookupcache[char]
+-- if lookupmatch then
+-- local h, d, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+-- if ok then
+-- done = true
+-- success = true
+-- end
+-- end
+-- end
+-- end
+-- end
+
+local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local a = getattr(sub,0)
+ if not a or (a == attr) then
+ for n in traverse_nodes(sub) do -- only gpos
+ if n == last then
+ break
+ end
+ local char = ischar(n)
+ if char then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ local h, d, ok = handler(sub,n,dataset,sequence,lookupmatch,rlmode,step,1,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+end
+
+local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local done = false
+ local sweep = sweephead[head]
+ if sweep then
+ start = sweep
+ sweephead[head] = nil
+ else
+ start = head
+ end
+ while start do
+ local char = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if not a or (a == attr) then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local lookupcache = step.coverage
+ if lookupcache then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ -- we could move all code inline but that makes things even more unreadable
+ local ok
+ head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done = true
+ break
+ elseif not start then
+ -- don't ask why ... shouldn't happen
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start = getnext(start)
+ end
+ else
+ start = getnext(start)
+ end
+ elseif char == false then
+ -- whatever glyph
+ return head, done
+ elseif sweep then
+ -- else we loose the rest
+ return head, done
+ else
+ -- in disc component
+ start = getnext(start)
+ end
+ end
+ return head, done
+end
+
+local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ while start ~= stop do
+ local char = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if not a or (a == attr) then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local lookupcache = step.coverage
+ if lookupcache then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ -- if we need more than ligatures we can outline the code and use functions
+ local s = getnext(start)
+ local l = nil
+ local d = 0
+ while s do
+ if s == stop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
+ local lg = lookupmatch[getchar(s)]
+ if lg then
+ l = lg
+ s = getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true, d > 1
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ end
+ start = getnext(start)
+ else
+ break
+ end
+ end
+end
+
+-- local function d_run_multiple(prev,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+-- local a = getattr(prev,0)
+-- if not a or (a == attr) then
+-- local char = ischar(prev) -- can be disc
+-- if char then
+-- for i=1,nofsteps do
+-- local step = steps[i]
+-- local lookupcache = step.coverage
+-- if lookupcache then
+-- local lookupmatch = lookupcache[char]
+-- if lookupmatch then
+-- -- we could move all code inline but that makes things even more unreadable
+-- local h, d, ok = handler(head,prev,dataset,sequence,lookupmatch,rlmode,step,i)
+-- if ok then
+-- done = true
+-- break
+-- end
+-- end
+-- else
+-- report_missing_coverage(dataset,sequence)
+-- end
+-- end
+-- end
+-- end
+-- end
+
+local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local a = getattr(sub,0)
+ if not a or (a == attr) then
+ for n in traverse_nodes(sub) do -- only gpos
+ if n == last then
+ break
+ end
+ local char = ischar(n)
+ if char then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local lookupcache = step.coverage
+ if lookupcache then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ local h, d, ok = handler(head,n,dataset,sequence,lookupmatch,step,rlmode,i,injection)
+ if ok then
+ return true
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ end
+ end
+ end
+end
+
+-- to be checkedL nowadays we probably can assume properly matched directions
+-- so maybe we no longer need a stack
+
+local function txtdirstate(start,stack,top,rlparmode)
+ local dir = getfield(start,"dir")
+ local new = 1
+ if dir == "+TRT" then
+ top = top + 1
+ stack[top] = dir
+ new = -1
+ elseif dir == "+TLT" then
+ top = top + 1
+ stack[top] = dir
+ elseif dir == "-TRT" or dir == "-TLT" then
+ top = top - 1
+ if stack[top] == "+TRT" then
+ new = -1
+ end
+ else
+ new = rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),topstack)
+ end
+ return getnext(start), top, new
+end
+
+local function pardirstate(start)
+ local dir = getfield(start,"dir")
+ local new = 0
+ if dir == "TLT" then
+ new = 1
+ elseif dir == "TRT" then
+ new = -1
+ end
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a",dir,mref(new))
+ end
+ return getnext(start), new, new
+end
+
+local function featuresprocessor(head,font,attr)
+
+ local sequences = sequencelists[font] -- temp hack
+
+ if not sequencelists then
+ return head, false
+ end
+
+ nesting = nesting + 1
+
+ if nesting == 1 then
+
+ currentfont = font
+ tfmdata = fontdata[font]
+ descriptions = tfmdata.descriptions
+ characters = tfmdata.characters
+ marks = tfmdata.resources.marks
+ factor = tfmdata.parameters.factor
+ threshold = tfmdata.parameters.spacing.width or 65536*10
+
+ elseif currentfont ~= font then
+
+ report_warning("nested call with a different font, level %s, quitting",nesting)
+ nesting = nesting - 1
+ return head, false
+
+ end
+
+ head = tonut(head)
+
+ if trace_steps then
+ checkstep(head)
+ end
+
+ local rlmode = 0
+
+ local done = false
+ local datasets = otf.dataset(tfmdata,font,attr)
+
+ local dirstack = { } -- could move outside function btu we can have local runss
+
+ sweephead = { }
+
+ -- We could work on sub start-stop ranges instead but I wonder if there is that
+ -- much speed gain (experiments showed that it made not much sense) and we need
+ -- to keep track of directions anyway. Also at some point I want to play with
+ -- font interactions and then we do need the full sweeps.
+
+ -- Keeping track of the headnode is needed for devanagari (I generalized it a bit
+ -- so that multiple cases are also covered.)
+
+ -- We don't goto the next node of a disc node is created so that we can then treat
+ -- the pre, post and replace. It's a bit of a hack but works out ok for most cases.
+
+ for s=1,#datasets do
+ local dataset = datasets[s]
+ ----- featurevalue = dataset[1] -- todo: pass to function instead of using a global
+ local attribute = dataset[2]
+ local sequence = dataset[3] -- sequences[s] -- also dataset[5]
+ local rlparmode = 0
+ local topstack = 0
+ local success = false
+ local typ = sequence.type
+ local gpossing = typ == "gpos_single" or typ == "gpos_pair" -- store in dataset
+ local handler = handlers[typ]
+ local steps = sequence.steps
+ local nofsteps = sequence.nofsteps
+ if not steps then
+ -- this permits injection, watch the different arguments
+ local h, d, ok = handler(head,start,dataset,sequence,nil,nil,nil,0,font,attr)
+ if ok then
+ success = true
+ if h then
+ head = h
+ end
+ if d then
+ start = d
+ end
+ end
+ elseif typ == "gsub_reversecontextchain" then
+ -- this is a limited case, no special treatments like 'init' etc
+ local start = find_node_tail(head)
+ while start do
+ local char = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if not a or (a == attr) then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local lookupcache = step.coverage
+ if lookupcache then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ -- todo: disc?
+ local ok
+ head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ success = true
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start = getprev(start)
+ end
+ else
+ start = getprev(start)
+ end
+ else
+ start = getprev(start)
+ end
+ end
+ else
+ local start = head -- local ?
+ rlmode = 0 -- to be checked ?
+ if nofsteps == 1 then -- happens often
+
+ local step = steps[1]
+ local lookupcache = step.coverage
+ if not lookupcache then
+ -- can't happen, no check in loop either
+ report_missing_coverage(dataset,sequence)
+ else
+
+ while start do
+ local char, id = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if a then
+ a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
+ else
+ a = not attribute or getprop(start,a_state) == attribute
+ end
+ if a then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ local ok
+ head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ success = true
+ -- elseif gpossing and zwnjruns and char == zwnj then
+ -- discrun(start,d_run,font,attr,lookupcache)
+ end
+ -- elseif gpossing and zwnjruns and char == zwnj then
+ -- discrun(start,d_run,font,attr,lookupcache)
+ end
+ if start then
+ start = getnext(start)
+ end
+ else
+ start = getnext(start)
+ end
+ elseif char == false then
+ -- whatever glyph
+ start = getnext(start)
+ elseif id == disc_code then
+ local ok
+ if gpossing then
+ start, ok = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ elseif typ == "gsub_ligature" then
+ start, ok = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ else
+ start, ok = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ success = true
+ end
+ elseif id == math_code then
+ start = getnext(end_of_math(start))
+ elseif id == dir_code then
+ start, topstack, rlmode = txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id == localpar_code then
+ start, rlparmode, rlmode = pardirstate(start)
+ else
+ start = getnext(start)
+ end
+ end
+ end
+
+ else
+
+ while start do
+ local char, id = ischar(start,font)
+ if char then
+ local a = getattr(start,0)
+ if a then
+ a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
+ else
+ a = not attribute or getprop(start,a_state) == attribute
+ end
+ if a then
+ for i=1,nofsteps do
+ local step = steps[i]
+ local lookupcache = step.coverage
+ if lookupcache then
+ local lookupmatch = lookupcache[char]
+ if lookupmatch then
+ -- we could move all code inline but that makes things even more unreadable
+ local ok
+ head, start, ok = handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ success = true
+ break
+ elseif not start then
+ -- don't ask why ... shouldn't happen
+ break
+ -- elseif gpossing and zwnjruns and char == zwnj then
+ -- discrun(start,d_run,font,attr,steps,nofsteps)
+ end
+ -- elseif gpossing and zwnjruns and char == zwnj then
+ -- discrun(start,d_run,font,attr,steps,nofsteps)
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start = getnext(start)
+ end
+ else
+ start = getnext(start)
+ end
+ elseif char == false then
+ start = getnext(start)
+ elseif id == disc_code then
+ local ok
+ if gpossing then
+ start, ok = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ elseif typ == "gsub_ligature" then
+ start, ok = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ else
+ start, ok = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ end
+ if ok then
+ success = true
+ end
+ elseif id == math_code then
+ start = getnext(end_of_math(start))
+ elseif id == dir_code then
+ start, topstack, rlmode = txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id == localpar_code then
+ start, rlparmode, rlmode = pardirstate(start)
+ else
+ start = getnext(start)
+ end
+ end
+ end
+ end
+
+ if success then
+ done = true
+ end
+ if trace_steps then -- ?
+ registerstep(head)
+ end
+
+ end
+
+ nesting = nesting - 1
+ head = tonode(head)
+
+ return head, done
+end
+
+-- so far
+
+local function featuresinitializer(tfmdata,value)
+ -- nothing done here any more
+end
+
+registerotffeature {
+ name = "features",
+ description = "features",
+ default = true,
+ initializers = {
+ position = 1,
+ node = featuresinitializer,
+ },
+ processors = {
+ node = featuresprocessor,
+ }
+}
+
+-- This can be used for extra handlers, but should be used with care!
+
+otf.handlers = handlers -- used in devanagari
+
+-- We implement one here:
+
+local setspacekerns = nodes.injections.setspacekerns if not setspacekerns then os.exit() end
+
+function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ -- if not setspacekerns then
+ -- setspacekerns = nodes.injections.setspacekerns
+ -- end
+ setspacekerns(font,sequence)
+ return head, start, true
+end
+
+local function hasspacekerns(data)
+ local sequences = data.resources.sequences
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local steps = sequence.steps
+ if steps and sequence.features.kern then
+ for i=1,#steps do
+ local coverage = steps[i].coverage
+ if not coverage then
+ -- maybe an issue
+ elseif coverage[32] then
+ return true
+ else
+ for k, v in next, coverage do
+ if v[32] then
+ return true
+ end
+ end
+ end
+ end
+ end
+ end
+ return false
+end
+
+otf.readers.registerextender {
+ name = "spacekerns",
+ action = function(data)
+ data.properties.hasspacekerns = hasspacekerns(data)
+ end
+}
+
+local function spaceinitializer(tfmdata,value) -- attr
+ local resources = tfmdata.resources
+ local spacekerns = resources and resources.spacekerns
+ if spacekerns == nil then
+ local properties = tfmdata.properties
+ if properties and properties.hasspacekerns then
+ local sequences = resources.sequences
+ local left = { }
+ local right = { }
+ local last = 0
+ local feat = nil
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local steps = sequence.steps
+ if steps then
+ local kern = sequence.features.kern
+ if kern then
+ feat = feat or kern -- or maybe merge
+ for i=1,#steps do
+ local step = steps[i]
+ local coverage = step.coverage
+ if coverage then
+ local kerns = coverage[32]
+ if kerns then
+ for k, v in next, kerns do
+ if type(v) == "table" then
+ right[k] = v[3] -- needs checking
+ else
+ right[k] = v
+ end
+ end
+ end
+ for k, v in next, coverage do
+ local kern = v[32]
+ if kern then
+ if type(kern) == "table" then
+ left[k] = kern[3] -- needs checking
+ else
+ left[k] = kern
+ end
+ end
+ end
+ end
+ end
+ last = i
+ end
+ else
+ -- no steps ... needed for old one ... we could use the basekerns
+ -- instead
+ end
+ end
+ left = next(left) and left or false
+ right = next(right) and right or false
+ if left or right then
+ spacekerns = {
+ left = left,
+ right = right,
+ }
+ if last > 0 then
+ local triggersequence = {
+ features = { kern = feat or { dflt = { dflt = true, } } },
+ flags = noflags,
+ name = "trigger_space_kerns",
+ order = { "kern" },
+ type = "trigger_space_kerns",
+ left = left,
+ right = right,
+ }
+ insert(sequences,last,triggersequence)
+ end
+ else
+ spacekerns = false
+ end
+ else
+ spacekerns = false
+ end
+ resources.spacekerns = spacekerns
+ end
+ return spacekerns
+end
+
+registerotffeature {
+ name = "spacekern",
+ description = "space kern injection",
+ default = true,
+ initializers = {
+ node = spaceinitializer,
+ },
+}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-ott.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ott.lua
new file mode 100644
index 00000000000..f8d74a317d0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ott.lua
@@ -0,0 +1,1130 @@
+if not modules then modules = { } end modules ['font-ott'] = {
+ version = 1.001,
+ comment = "companion to font-otf.lua (tables)",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+ -- dataonly = true,
+}
+
+local type, next, tonumber, tostring, rawget, rawset = type, next, tonumber, tostring, rawget, rawset
+local gsub, lower, format, match = string.gsub, string.lower, string.format, string.match
+local is_boolean = string.is_boolean
+
+local setmetatableindex = table.setmetatableindex
+local setmetatablenewindex = table.setmetatablenewindex
+local allocate = utilities.storage.allocate
+
+local fonts = fonts
+local otf = fonts.handlers.otf
+local otffeatures = otf.features
+local registerotffeature = otffeatures.register
+
+local tables = otf.tables or { }
+otf.tables = tables
+
+local statistics = otf.statistics or { }
+otf.statistics = statistics
+
+local scripts = allocate {
+ ['arab'] = 'arabic',
+ ['armi'] = 'imperial aramaic',
+ ['armn'] = 'armenian',
+ ['avst'] = 'avestan',
+ ['bali'] = 'balinese',
+ ['bamu'] = 'bamum',
+ ['batk'] = 'batak',
+ ['beng'] = 'bengali',
+ ['bng2'] = 'bengali variant 2',
+ ['bopo'] = 'bopomofo',
+ ['brah'] = 'brahmi',
+ ['brai'] = 'braille',
+ ['bugi'] = 'buginese',
+ ['buhd'] = 'buhid',
+ ['byzm'] = 'byzantine music',
+ ['cakm'] = 'chakma',
+ ['cans'] = 'canadian syllabics',
+ ['cari'] = 'carian',
+ ['cham'] = 'cham',
+ ['cher'] = 'cherokee',
+ ['copt'] = 'coptic',
+ ['cprt'] = 'cypriot syllabary',
+ ['cyrl'] = 'cyrillic',
+ ['deva'] = 'devanagari',
+ ['dev2'] = 'devanagari variant 2',
+ ['dsrt'] = 'deseret',
+ ['egyp'] = 'egyptian heiroglyphs',
+ ['ethi'] = 'ethiopic',
+ ['geor'] = 'georgian',
+ ['glag'] = 'glagolitic',
+ ['goth'] = 'gothic',
+ ['grek'] = 'greek',
+ ['gujr'] = 'gujarati',
+ ['gjr2'] = 'gujarati variant 2',
+ ['guru'] = 'gurmukhi',
+ ['gur2'] = 'gurmukhi variant 2',
+ ['hang'] = 'hangul',
+ ['hani'] = 'cjk ideographic',
+ ['hano'] = 'hanunoo',
+ ['hebr'] = 'hebrew',
+ ['ital'] = 'old italic',
+ ['jamo'] = 'hangul jamo',
+ ['java'] = 'javanese',
+ ['kali'] = 'kayah li',
+ ['kana'] = 'hiragana and katakana',
+ ['khar'] = 'kharosthi',
+ ['khmr'] = 'khmer',
+ ['knda'] = 'kannada',
+ ['knd2'] = 'kannada variant 2',
+ ['kthi'] = 'kaithi',
+ ['lana'] = 'tai tham',
+ ['lao' ] = 'lao',
+ ['latn'] = 'latin',
+ ['lepc'] = 'lepcha',
+ ['limb'] = 'limbu',
+ ['linb'] = 'linear b',
+ ['lisu'] = 'lisu',
+ ['lyci'] = 'lycian',
+ ['lydi'] = 'lydian',
+ ['mand'] = 'mandaic and mandaean',
+ ['math'] = 'mathematical alphanumeric symbols',
+ ['merc'] = 'meroitic cursive',
+ ['mero'] = 'meroitic hieroglyphs',
+ ['mlym'] = 'malayalam',
+ ['mlm2'] = 'malayalam variant 2',
+ ['mong'] = 'mongolian',
+ ['mtei'] = 'meitei Mayek',
+ ['musc'] = 'musical symbols',
+ ['mym2'] = 'myanmar variant 2',
+ ['mymr'] = 'myanmar',
+ ['nko' ] = "n'ko",
+ ['ogam'] = 'ogham',
+ ['olck'] = 'ol chiki',
+ ['orkh'] = 'old turkic and orkhon runic',
+ ['orya'] = 'oriya',
+ ['ory2'] = 'odia variant 2',
+ ['osma'] = 'osmanya',
+ ['phag'] = 'phags-pa',
+ ['phli'] = 'inscriptional pahlavi',
+ ['phnx'] = 'phoenician',
+ ['prti'] = 'inscriptional parthian',
+ ['rjng'] = 'rejang',
+ ['runr'] = 'runic',
+ ['samr'] = 'samaritan',
+ ['sarb'] = 'old south arabian',
+ ['saur'] = 'saurashtra',
+ ['shaw'] = 'shavian',
+ ['shrd'] = 'sharada',
+ ['sinh'] = 'sinhala',
+ ['sora'] = 'sora sompeng',
+ ['sund'] = 'sundanese',
+ ['sylo'] = 'syloti nagri',
+ ['syrc'] = 'syriac',
+ ['tagb'] = 'tagbanwa',
+ ['takr'] = 'takri',
+ ['tale'] = 'tai le',
+ ['talu'] = 'tai lu',
+ ['taml'] = 'tamil',
+ ['tavt'] = 'tai viet',
+ ['telu'] = 'telugu',
+ ['tel2'] = 'telugu variant 2',
+ ['tfng'] = 'tifinagh',
+ ['tglg'] = 'tagalog',
+ ['thaa'] = 'thaana',
+ ['thai'] = 'thai',
+ ['tibt'] = 'tibetan',
+ ['tml2'] = 'tamil variant 2',
+ ['ugar'] = 'ugaritic cuneiform',
+ ['vai' ] = 'vai',
+ ['xpeo'] = 'old persian cuneiform',
+ ['xsux'] = 'sumero-akkadian cuneiform',
+ ['yi' ] = 'yi',
+}
+
+local languages = allocate {
+ ["aba" ] = "abaza",
+ ["abk" ] = "abkhazian",
+ ["ach" ] = "acholi",
+ ["acr" ] = "achi",
+ ["ady" ] = "adyghe",
+ ["afk" ] = "afrikaans",
+ ["afr" ] = "afar",
+ ["agw" ] = "agaw",
+ ["aio" ] = "aiton",
+ ["aka" ] = "akan",
+ ["als" ] = "alsatian",
+ ["alt" ] = "altai",
+ ["amh" ] = "amharic",
+ ["ang" ] = "anglo-saxon",
+ ["apph"] = "phonetic transcription—americanist conventions",
+ ["ara" ] = "arabic",
+ ["arg" ] = "aragonese",
+ ["ari" ] = "aari",
+ ["ark" ] = "rakhine",
+ ["asm" ] = "assamese",
+ ["ast" ] = "asturian",
+ ["ath" ] = "athapaskan",
+ ["avr" ] = "avar",
+ ["awa" ] = "awadhi",
+ ["aym" ] = "aymara",
+ ["azb" ] = "torki",
+ ["aze" ] = "azerbaijani",
+ ["bad" ] = "badaga",
+ ["bad0"] = "banda",
+ ["bag" ] = "baghelkhandi",
+ ["bal" ] = "balkar",
+ ["ban" ] = "balinese",
+ ["bar" ] = "bavarian",
+ ["bau" ] = "baulé",
+ ["bbc" ] = "batak toba",
+ ["bbr" ] = "berber",
+ ["bch" ] = "bench",
+ ["bcr" ] = "bible cree",
+ ["bdy" ] = "bandjalang",
+ ["bel" ] = "belarussian",
+ ["bem" ] = "bemba",
+ ["ben" ] = "bengali",
+ ["bgc" ] = "haryanvi",
+ ["bgq" ] = "bagri",
+ ["bgr" ] = "bulgarian",
+ ["bhi" ] = "bhili",
+ ["bho" ] = "bhojpuri",
+ ["bik" ] = "bikol",
+ ["bil" ] = "bilen",
+ ["bis" ] = "bislama",
+ ["bjj" ] = "kanauji",
+ ["bkf" ] = "blackfoot",
+ ["bli" ] = "baluchi",
+ ["blk" ] = "pa'o karen",
+ ["bln" ] = "balante",
+ ["blt" ] = "balti",
+ ["bmb" ] = "bambara (bamanankan)",
+ ["bml" ] = "bamileke",
+ ["bos" ] = "bosnian",
+ ["bpy" ] = "bishnupriya manipuri",
+ ["bre" ] = "breton",
+ ["brh" ] = "brahui",
+ ["bri" ] = "braj bhasha",
+ ["brm" ] = "burmese",
+ ["brx" ] = "bodo",
+ ["bsh" ] = "bashkir",
+ ["bti" ] = "beti",
+ ["bts" ] = "batak simalungun",
+ ["bug" ] = "bugis",
+ ["cak" ] = "kaqchikel",
+ ["cat" ] = "catalan",
+ ["cbk" ] = "zamboanga chavacano",
+ ["ceb" ] = "cebuano",
+ ["cgg" ] = "chiga",
+ ["cha" ] = "chamorro",
+ ["che" ] = "chechen",
+ ["chg" ] = "chaha gurage",
+ ["chh" ] = "chattisgarhi",
+ ["chi" ] = "chichewa (chewa, nyanja)",
+ ["chk" ] = "chukchi",
+ ["chk0"] = "chuukese",
+ ["cho" ] = "choctaw",
+ ["chp" ] = "chipewyan",
+ ["chr" ] = "cherokee",
+ ["chu" ] = "chuvash",
+ ["chy" ] = "cheyenne",
+ ["cmr" ] = "comorian",
+ ["cop" ] = "coptic",
+ ["cor" ] = "cornish",
+ ["cos" ] = "corsican",
+ ["cpp" ] = "creoles",
+ ["cre" ] = "cree",
+ ["crr" ] = "carrier",
+ ["crt" ] = "crimean tatar",
+ ["csb" ] = "kashubian",
+ ["csl" ] = "church slavonic",
+ ["csy" ] = "czech",
+ ["ctg" ] = "chittagonian",
+ ["cuk" ] = "san blas kuna",
+ ["dan" ] = "danish",
+ ["dar" ] = "dargwa",
+ ["dax" ] = "dayi",
+ ["dcr" ] = "woods cree",
+ ["deu" ] = "german",
+ ["dgo" ] = "dogri",
+ ["dgr" ] = "dogri",
+ ["dhg" ] = "dhangu",
+ ["dhv" ] = "divehi (dhivehi, maldivian)",
+ ["diq" ] = "dimli",
+ ["div" ] = "divehi (dhivehi, maldivian)",
+ ["djr" ] = "zarma",
+ ["djr0"] = "djambarrpuyngu",
+ ["dng" ] = "dangme",
+ ["dnj" ] = "dan",
+ ["dnk" ] = "dinka",
+ ["dri" ] = "dari",
+ ["duj" ] = "dhuwal",
+ ["dun" ] = "dungan",
+ ["dzn" ] = "dzongkha",
+ ["ebi" ] = "ebira",
+ ["ecr" ] = "eastern cree",
+ ["edo" ] = "edo",
+ ["efi" ] = "efik",
+ ["ell" ] = "greek",
+ ["emk" ] = "eastern maninkakan",
+ ["eng" ] = "english",
+ ["erz" ] = "erzya",
+ ["esp" ] = "spanish",
+ ["esu" ] = "central yupik",
+ ["eti" ] = "estonian",
+ ["euq" ] = "basque",
+ ["evk" ] = "evenki",
+ ["evn" ] = "even",
+ ["ewe" ] = "ewe",
+ ["fan" ] = "french antillean",
+ ["fan0"] = " fang",
+ ["far" ] = "persian",
+ ["fat" ] = "fanti",
+ ["fin" ] = "finnish",
+ ["fji" ] = "fijian",
+ ["fle" ] = "dutch (flemish)",
+ ["fne" ] = "forest nenets",
+ ["fon" ] = "fon",
+ ["fos" ] = "faroese",
+ ["fra" ] = "french",
+ ["frc" ] = "cajun french",
+ ["fri" ] = "frisian",
+ ["frl" ] = "friulian",
+ ["frp" ] = "arpitan",
+ ["fta" ] = "futa",
+ ["ful" ] = "fulah",
+ ["fuv" ] = "nigerian fulfulde",
+ ["gad" ] = "ga",
+ ["gae" ] = "scottish gaelic (gaelic)",
+ ["gag" ] = "gagauz",
+ ["gal" ] = "galician",
+ ["gar" ] = "garshuni",
+ ["gaw" ] = "garhwali",
+ ["gez" ] = "ge'ez",
+ ["gih" ] = "githabul",
+ ["gil" ] = "gilyak",
+ ["gil0"] = " kiribati (gilbertese)",
+ ["gkp" ] = "kpelle (guinea)",
+ ["glk" ] = "gilaki",
+ ["gmz" ] = "gumuz",
+ ["gnn" ] = "gumatj",
+ ["gog" ] = "gogo",
+ ["gon" ] = "gondi",
+ ["grn" ] = "greenlandic",
+ ["gro" ] = "garo",
+ ["gua" ] = "guarani",
+ ["guc" ] = "wayuu",
+ ["guf" ] = "gupapuyngu",
+ ["guj" ] = "gujarati",
+ ["guz" ] = "gusii",
+ ["hai" ] = "haitian (haitian creole)",
+ ["hal" ] = "halam",
+ ["har" ] = "harauti",
+ ["hau" ] = "hausa",
+ ["haw" ] = "hawaiian",
+ ["hay" ] = "haya",
+ ["haz" ] = "hazaragi",
+ ["hbn" ] = "hammer-banna",
+ ["her" ] = "herero",
+ ["hil" ] = "hiligaynon",
+ ["hin" ] = "hindi",
+ ["hma" ] = "high mari",
+ ["hmn" ] = "hmong",
+ ["hmo" ] = "hiri motu",
+ ["hnd" ] = "hindko",
+ ["ho" ] = "ho",
+ ["hri" ] = "harari",
+ ["hrv" ] = "croatian",
+ ["hun" ] = "hungarian",
+ ["hye" ] = "armenian",
+ ["hye0"] = "armenian east",
+ ["iba" ] = "iban",
+ ["ibb" ] = "ibibio",
+ ["ibo" ] = "igbo",
+ ["ido" ] = "ido",
+ ["ijo" ] = "ijo languages",
+ ["ile" ] = "interlingue",
+ ["ilo" ] = "ilokano",
+ ["ina" ] = "interlingua",
+ ["ind" ] = "indonesian",
+ ["ing" ] = "ingush",
+ ["inu" ] = "inuktitut",
+ ["ipk" ] = "inupiat",
+ ["ipph"] = "phonetic transcription—ipa conventions",
+ ["iri" ] = "irish",
+ ["irt" ] = "irish traditional",
+ ["isl" ] = "icelandic",
+ ["ism" ] = "inari sami",
+ ["ita" ] = "italian",
+ ["iwr" ] = "hebrew",
+ ["jam" ] = "jamaican creole",
+ ["jan" ] = "japanese",
+ ["jav" ] = "javanese",
+ ["jbo" ] = "lojban",
+ ["jii" ] = "yiddish",
+ ["jud" ] = "ladino",
+ ["jul" ] = "jula",
+ ["kab" ] = "kabardian",
+ ["kab0"] = "kabyle",
+ ["kac" ] = "kachchi",
+ ["kal" ] = "kalenjin",
+ ["kan" ] = "kannada",
+ ["kar" ] = "karachay",
+ ["kat" ] = "georgian",
+ ["kaz" ] = "kazakh",
+ ["kde" ] = "makonde",
+ ["kea" ] = "kabuverdianu (crioulo)",
+ ["keb" ] = "kebena",
+ ["kek" ] = "kekchi",
+ ["kge" ] = "khutsuri georgian",
+ ["kha" ] = "khakass",
+ ["khk" ] = "khanty-kazim",
+ ["khm" ] = "khmer",
+ ["khs" ] = "khanty-shurishkar",
+ ["kht" ] = "khamti shan",
+ ["khv" ] = "khanty-vakhi",
+ ["khw" ] = "khowar",
+ ["kik" ] = "kikuyu (gikuyu)",
+ ["kir" ] = "kirghiz (kyrgyz)",
+ ["kis" ] = "kisii",
+ ["kiu" ] = "kirmanjki",
+ ["kjd" ] = "southern kiwai",
+ ["kjp" ] = "eastern pwo karen",
+ ["kkn" ] = "kokni",
+ ["klm" ] = "kalmyk",
+ ["kmb" ] = "kamba",
+ ["kmn" ] = "kumaoni",
+ ["kmo" ] = "komo",
+ ["kms" ] = "komso",
+ ["knr" ] = "kanuri",
+ ["kod" ] = "kodagu",
+ ["koh" ] = "korean old hangul",
+ ["kok" ] = "konkani",
+ ["kom" ] = "komi",
+ ["kon" ] = "kikongo",
+ ["kon0"] = "kongo",
+ ["kop" ] = "komi-permyak",
+ ["kor" ] = "korean",
+ ["kos" ] = "kosraean",
+ ["koz" ] = "komi-zyrian",
+ ["kpl" ] = "kpelle",
+ ["kri" ] = "krio",
+ ["krk" ] = "karakalpak",
+ ["krl" ] = "karelian",
+ ["krm" ] = "karaim",
+ ["krn" ] = "karen",
+ ["krt" ] = "koorete",
+ ["ksh" ] = "kashmiri",
+ ["ksh0"] = "ripuarian",
+ ["ksi" ] = "khasi",
+ ["ksm" ] = "kildin sami",
+ ["ksw" ] = "s’gaw karen",
+ ["kua" ] = "kuanyama",
+ ["kui" ] = "kui",
+ ["kul" ] = "kulvi",
+ ["kum" ] = "kumyk",
+ ["kur" ] = "kurdish",
+ ["kuu" ] = "kurukh",
+ ["kuy" ] = "kuy",
+ ["kyk" ] = "koryak",
+ ["kyu" ] = "western kayah",
+ ["lad" ] = "ladin",
+ ["lah" ] = "lahuli",
+ ["lak" ] = "lak",
+ ["lam" ] = "lambani",
+ ["lao" ] = "lao",
+ ["lat" ] = "latin",
+ ["laz" ] = "laz",
+ ["lcr" ] = "l-cree",
+ ["ldk" ] = "ladakhi",
+ ["lez" ] = "lezgi",
+ ["lij" ] = "ligurian",
+ ["lim" ] = "limburgish",
+ ["lin" ] = "lingala",
+ ["lis" ] = "lisu",
+ ["ljp" ] = "lampung",
+ ["lki" ] = "laki",
+ ["lma" ] = "low mari",
+ ["lmb" ] = "limbu",
+ ["lmo" ] = "lombard",
+ ["lmw" ] = "lomwe",
+ ["lom" ] = "loma",
+ ["lrc" ] = "luri",
+ ["lsb" ] = "lower sorbian",
+ ["lsm" ] = "lule sami",
+ ["lth" ] = "lithuanian",
+ ["ltz" ] = "luxembourgish",
+ ["lua" ] = "luba-lulua",
+ ["lub" ] = "luba-katanga",
+ ["lug" ] = "ganda",
+ ["luh" ] = "luyia",
+ ["luo" ] = "luo",
+ ["lvi" ] = "latvian",
+ ["mad" ] = "madura",
+ ["mag" ] = "magahi",
+ ["mah" ] = "marshallese",
+ ["maj" ] = "majang",
+ ["mak" ] = "makhuwa",
+ ["mal" ] = "malayalam reformed",
+ ["mam" ] = "mam",
+ ["man" ] = "mansi",
+ ["map" ] = "mapudungun",
+ ["mar" ] = "marathi",
+ ["maw" ] = "marwari",
+ ["mbn" ] = "mbundu",
+ ["mch" ] = "manchu",
+ ["mcr" ] = "moose cree",
+ ["mde" ] = "mende",
+ ["mdr" ] = "mandar",
+ ["men" ] = "me'en",
+ ["mer" ] = "meru",
+ ["mfe" ] = "morisyen",
+ ["min" ] = "minangkabau",
+ ["miz" ] = "mizo",
+ ["mkd" ] = "macedonian",
+ ["mkr" ] = "makasar",
+ ["mkw" ] = "kituba",
+ ["mle" ] = "male",
+ ["mlg" ] = "malagasy",
+ ["mln" ] = "malinke",
+ ["mly" ] = "malay",
+ ["mnd" ] = "mandinka",
+ ["mng" ] = "mongolian",
+ ["mni" ] = "manipuri",
+ ["mnk" ] = "maninka",
+ ["mnx" ] = "manx",
+ ["moh" ] = "mohawk",
+ ["mok" ] = "moksha",
+ ["mol" ] = "moldavian",
+ ["mon" ] = "mon",
+ ["mor" ] = "moroccan",
+ ["mos" ] = "mossi",
+ ["mri" ] = "maori",
+ ["mth" ] = "maithili",
+ ["mts" ] = "maltese",
+ ["mun" ] = "mundari",
+ ["mus" ] = "muscogee",
+ ["mwl" ] = "mirandese",
+ ["mww" ] = "hmong daw",
+ ["myn" ] = "mayan",
+ ["mzn" ] = "mazanderani",
+ ["nag" ] = "naga-assamese",
+ ["nah" ] = "nahuatl",
+ ["nan" ] = "nanai",
+ ["nap" ] = "neapolitan",
+ ["nas" ] = "naskapi",
+ ["nau" ] = "nauruan",
+ ["nav" ] = "navajo",
+ ["ncr" ] = "n-cree",
+ ["ndb" ] = "ndebele",
+ ["ndc" ] = "ndau",
+ ["ndg" ] = "ndonga",
+ ["nds" ] = "low saxon",
+ ["nep" ] = "nepali",
+ ["new" ] = "newari",
+ ["nga" ] = "ngbaka",
+ ["ngr" ] = "nagari",
+ ["nhc" ] = "norway house cree",
+ ["nis" ] = "nisi",
+ ["niu" ] = "niuean",
+ ["nkl" ] = "nyankole",
+ ["nko" ] = "n'ko",
+ ["nld" ] = "dutch",
+ ["noe" ] = "nimadi",
+ ["nog" ] = "nogai",
+ ["nor" ] = "norwegian",
+ ["nov" ] = "novial",
+ ["nsm" ] = "northern sami",
+ ["nso" ] = "sotho, northern",
+ ["nta" ] = "northern tai",
+ ["nto" ] = "esperanto",
+ ["nym" ] = "nyamwezi",
+ ["nyn" ] = "norwegian nynorsk",
+ ["oci" ] = "occitan",
+ ["ocr" ] = "oji-cree",
+ ["ojb" ] = "ojibway",
+ ["ori" ] = "odia",
+ ["oro" ] = "oromo",
+ ["oss" ] = "ossetian",
+ ["paa" ] = "palestinian aramaic",
+ ["pag" ] = "pangasinan",
+ ["pal" ] = "pali",
+ ["pam" ] = "pampangan",
+ ["pan" ] = "punjabi",
+ ["pap" ] = "palpa",
+ ["pap0"] = "papiamentu",
+ ["pas" ] = "pashto",
+ ["pau" ] = "palauan",
+ ["pcc" ] = "bouyei",
+ ["pcd" ] = "picard",
+ ["pdc" ] = "pennsylvania german",
+ ["pgr" ] = "polytonic greek",
+ ["phk" ] = "phake",
+ ["pih" ] = "norfolk",
+ ["pil" ] = "filipino",
+ ["plg" ] = "palaung",
+ ["plk" ] = "polish",
+ ["pms" ] = "piemontese",
+ ["pnb" ] = "western panjabi",
+ ["poh" ] = "pocomchi",
+ ["pon" ] = "pohnpeian",
+ ["pro" ] = "provencal",
+ ["ptg" ] = "portuguese",
+ ["pwo" ] = "western pwo karen",
+ ["qin" ] = "chin",
+ ["quc" ] = "k’iche’",
+ ["quh" ] = "quechua (bolivia)",
+ ["quz" ] = "quechua",
+ ["qvi" ] = "quechua (ecuador)",
+ ["qwh" ] = "quechua (peru)",
+ ["raj" ] = "rajasthani",
+ ["rar" ] = "rarotongan",
+ ["rbu" ] = "russian buriat",
+ ["rcr" ] = "r-cree",
+ ["rej" ] = "rejang",
+ ["ria" ] = "riang",
+ ["rif" ] = "tarifit",
+ ["rit" ] = "ritarungo",
+ ["rkw" ] = "arakwal",
+ ["rms" ] = "romansh",
+ ["rmy" ] = "vlax romani",
+ ["rom" ] = "romanian",
+ ["roy" ] = "romany",
+ ["rsy" ] = "rusyn",
+ ["rtm" ] = "rotuman",
+ ["rua" ] = "kinyarwanda",
+ ["run" ] = "rundi",
+ ["rup" ] = "aromanian",
+ ["rus" ] = "russian",
+ ["sad" ] = "sadri",
+ ["san" ] = "sanskrit",
+ ["sas" ] = "sasak",
+ ["sat" ] = "santali",
+ ["say" ] = "sayisi",
+ ["scn" ] = "sicilian",
+ ["sco" ] = "scots",
+ ["sek" ] = "sekota",
+ ["sel" ] = "selkup",
+ ["sga" ] = "old irish",
+ ["sgo" ] = "sango",
+ ["sgs" ] = "samogitian",
+ ["shi" ] = "tachelhit",
+ ["shn" ] = "shan",
+ ["sib" ] = "sibe",
+ ["sid" ] = "sidamo",
+ ["sig" ] = "silte gurage",
+ ["sks" ] = "skolt sami",
+ ["sky" ] = "slovak",
+ ["sla" ] = "slavey",
+ ["slv" ] = "slovenian",
+ ["sml" ] = "somali",
+ ["smo" ] = "samoan",
+ ["sna" ] = "sena",
+ ["sna0"] = "shona",
+ ["snd" ] = "sindhi",
+ ["snh" ] = "sinhala (sinhalese)",
+ ["snk" ] = "soninke",
+ ["sog" ] = "sodo gurage",
+ ["sop" ] = "songe",
+ ["sot" ] = "sotho, southern",
+ ["sqi" ] = "albanian",
+ ["srb" ] = "serbian",
+ ["srd" ] = "sardinian",
+ ["srk" ] = "saraiki",
+ ["srr" ] = "serer",
+ ["ssl" ] = "south slavey",
+ ["ssm" ] = "southern sami",
+ ["stq" ] = "saterland frisian",
+ ["suk" ] = "sukuma",
+ ["sun" ] = "sundanese",
+ ["sur" ] = "suri",
+ ["sva" ] = "svan",
+ ["sve" ] = "swedish",
+ ["swa" ] = "swadaya aramaic",
+ ["swk" ] = "swahili",
+ ["swz" ] = "swati",
+ ["sxt" ] = "sutu",
+ ["sxu" ] = "upper saxon",
+ ["syl" ] = "sylheti",
+ ["syr" ] = "syriac",
+ ["szl" ] = "silesian",
+ ["tab" ] = "tabasaran",
+ ["taj" ] = "tajiki",
+ ["tam" ] = "tamil",
+ ["tat" ] = "tatar",
+ ["tcr" ] = "th-cree",
+ ["tdd" ] = "dehong dai",
+ ["tel" ] = "telugu",
+ ["tet" ] = "tetum",
+ ["tgl" ] = "tagalog",
+ ["tgn" ] = "tongan",
+ ["tgr" ] = "tigre",
+ ["tgy" ] = "tigrinya",
+ ["tha" ] = "thai",
+ ["tht" ] = "tahitian",
+ ["tib" ] = "tibetan",
+ ["tiv" ] = "tiv",
+ ["tkm" ] = "turkmen",
+ ["tmh" ] = "tamashek",
+ ["tmn" ] = "temne",
+ ["tna" ] = "tswana",
+ ["tne" ] = "tundra nenets",
+ ["tng" ] = "tonga",
+ ["tod" ] = "todo",
+ ["tod0"] = "toma",
+ ["tpi" ] = "tok pisin",
+ ["trk" ] = "turkish",
+ ["tsg" ] = "tsonga",
+ ["tua" ] = "turoyo aramaic",
+ ["tul" ] = "tulu",
+ ["tuv" ] = "tuvin",
+ ["tvl" ] = "tuvalu",
+ ["twi" ] = "twi",
+ ["tyz" ] = "tày",
+ ["tzm" ] = "tamazight",
+ ["tzo" ] = "tzotzil",
+ ["udm" ] = "udmurt",
+ ["ukr" ] = "ukrainian",
+ ["umb" ] = "umbundu",
+ ["urd" ] = "urdu",
+ ["usb" ] = "upper sorbian",
+ ["uyg" ] = "uyghur",
+ ["uzb" ] = "uzbek",
+ ["vec" ] = "venetian",
+ ["ven" ] = "venda",
+ ["vit" ] = "vietnamese",
+ ["vol" ] = "volapük",
+ ["vro" ] = "võro",
+ ["wa" ] = "wa",
+ ["wag" ] = "wagdi",
+ ["war" ] = "waray-waray",
+ ["wcr" ] = "west-cree",
+ ["wel" ] = "welsh",
+ ["wlf" ] = "wolof",
+ ["wln" ] = "walloon",
+ ["xbd" ] = "lü",
+ ["xhs" ] = "xhosa",
+ ["xjb" ] = "minjangbal",
+ ["xog" ] = "soga",
+ ["xpe" ] = "kpelle (liberia)",
+ ["yak" ] = "sakha",
+ ["yao" ] = "yao",
+ ["yap" ] = "yapese",
+ ["yba" ] = "yoruba",
+ ["ycr" ] = "y-cree",
+ ["yic" ] = "yi classic",
+ ["yim" ] = "yi modern",
+ ["zea" ] = "zealandic",
+ ["zgh" ] = "standard morrocan tamazigh",
+ ["zha" ] = "zhuang",
+ ["zhh" ] = "chinese, hong kong sar",
+ ["zhp" ] = "chinese phonetic",
+ ["zhs" ] = "chinese simplified",
+ ["zht" ] = "chinese traditional",
+ ["znd" ] = "zande",
+ ["zul" ] = "zulu",
+ ["zza" ] = "zazaki",
+}
+
+local features = allocate {
+ ['aalt'] = 'access all alternates',
+ ['abvf'] = 'above-base forms',
+ ['abvm'] = 'above-base mark positioning',
+ ['abvs'] = 'above-base substitutions',
+ ['afrc'] = 'alternative fractions',
+ ['akhn'] = 'akhands',
+ ['blwf'] = 'below-base forms',
+ ['blwm'] = 'below-base mark positioning',
+ ['blws'] = 'below-base substitutions',
+ ['c2pc'] = 'petite capitals from capitals',
+ ['c2sc'] = 'small capitals from capitals',
+ ['calt'] = 'contextual alternates',
+ ['case'] = 'case-sensitive forms',
+ ['ccmp'] = 'glyph composition/decomposition',
+ ['cfar'] = 'conjunct form after ro',
+ ['cjct'] = 'conjunct forms',
+ ['clig'] = 'contextual ligatures',
+ ['cpct'] = 'centered cjk punctuation',
+ ['cpsp'] = 'capital spacing',
+ ['cswh'] = 'contextual swash',
+ ['curs'] = 'cursive positioning',
+ ['dflt'] = 'default processing',
+ ['dist'] = 'distances',
+ ['dlig'] = 'discretionary ligatures',
+ ['dnom'] = 'denominators',
+ ['dtls'] = 'dotless forms', -- math
+ ['expt'] = 'expert forms',
+ ['falt'] = 'final glyph alternates',
+ ['fin2'] = 'terminal forms #2',
+ ['fin3'] = 'terminal forms #3',
+ ['fina'] = 'terminal forms',
+ ['flac'] = 'flattened accents over capitals', -- math
+ ['frac'] = 'fractions',
+ ['fwid'] = 'full width',
+ ['half'] = 'half forms',
+ ['haln'] = 'halant forms',
+ ['halt'] = 'alternate half width',
+ ['hist'] = 'historical forms',
+ ['hkna'] = 'horizontal kana alternates',
+ ['hlig'] = 'historical ligatures',
+ ['hngl'] = 'hangul',
+ ['hojo'] = 'hojo kanji forms',
+ ['hwid'] = 'half width',
+ ['init'] = 'initial forms',
+ ['isol'] = 'isolated forms',
+ ['ital'] = 'italics',
+ ['jalt'] = 'justification alternatives',
+ ['jp04'] = 'jis2004 forms',
+ ['jp78'] = 'jis78 forms',
+ ['jp83'] = 'jis83 forms',
+ ['jp90'] = 'jis90 forms',
+ ['kern'] = 'kerning',
+ ['lfbd'] = 'left bounds',
+ ['liga'] = 'standard ligatures',
+ ['ljmo'] = 'leading jamo forms',
+ ['lnum'] = 'lining figures',
+ ['locl'] = 'localized forms',
+ ['ltra'] = 'left-to-right alternates',
+ ['ltrm'] = 'left-to-right mirrored forms',
+ ['mark'] = 'mark positioning',
+ ['med2'] = 'medial forms #2',
+ ['medi'] = 'medial forms',
+ ['mgrk'] = 'mathematical greek',
+ ['mkmk'] = 'mark to mark positioning',
+ ['mset'] = 'mark positioning via substitution',
+ ['nalt'] = 'alternate annotation forms',
+ ['nlck'] = 'nlc kanji forms',
+ ['nukt'] = 'nukta forms',
+ ['numr'] = 'numerators',
+ ['onum'] = 'old style figures',
+ ['opbd'] = 'optical bounds',
+ ['ordn'] = 'ordinals',
+ ['ornm'] = 'ornaments',
+ ['palt'] = 'proportional alternate width',
+ ['pcap'] = 'petite capitals',
+ ['pkna'] = 'proportional kana',
+ ['pnum'] = 'proportional figures',
+ ['pref'] = 'pre-base forms',
+ ['pres'] = 'pre-base substitutions',
+ ['pstf'] = 'post-base forms',
+ ['psts'] = 'post-base substitutions',
+ ['pwid'] = 'proportional widths',
+ ['qwid'] = 'quarter widths',
+ ['rand'] = 'randomize',
+ ['rclt'] = 'required contextual alternates',
+ ['rkrf'] = 'rakar forms',
+ ['rlig'] = 'required ligatures',
+ ['rphf'] = 'reph form',
+ ['rtbd'] = 'right bounds',
+ ['rtla'] = 'right-to-left alternates',
+ ['rtlm'] = 'right to left math', -- math
+ ['ruby'] = 'ruby notation forms',
+ ['salt'] = 'stylistic alternates',
+ ['sinf'] = 'scientific inferiors',
+ ['size'] = 'optical size',
+ ['smcp'] = 'small capitals',
+ ['smpl'] = 'simplified forms',
+ -- ['ss01'] = 'stylistic set 1',
+ -- ['ss02'] = 'stylistic set 2',
+ -- ['ss03'] = 'stylistic set 3',
+ -- ['ss04'] = 'stylistic set 4',
+ -- ['ss05'] = 'stylistic set 5',
+ -- ['ss06'] = 'stylistic set 6',
+ -- ['ss07'] = 'stylistic set 7',
+ -- ['ss08'] = 'stylistic set 8',
+ -- ['ss09'] = 'stylistic set 9',
+ -- ['ss10'] = 'stylistic set 10',
+ -- ['ss11'] = 'stylistic set 11',
+ -- ['ss12'] = 'stylistic set 12',
+ -- ['ss13'] = 'stylistic set 13',
+ -- ['ss14'] = 'stylistic set 14',
+ -- ['ss15'] = 'stylistic set 15',
+ -- ['ss16'] = 'stylistic set 16',
+ -- ['ss17'] = 'stylistic set 17',
+ -- ['ss18'] = 'stylistic set 18',
+ -- ['ss19'] = 'stylistic set 19',
+ -- ['ss20'] = 'stylistic set 20',
+ ['ssty'] = 'script style', -- math
+ ['stch'] = 'stretching glyph decomposition',
+ ['subs'] = 'subscript',
+ ['sups'] = 'superscript',
+ ['swsh'] = 'swash',
+ ['titl'] = 'titling',
+ ['tjmo'] = 'trailing jamo forms',
+ ['tnam'] = 'traditional name forms',
+ ['tnum'] = 'tabular figures',
+ ['trad'] = 'traditional forms',
+ ['twid'] = 'third widths',
+ ['unic'] = 'unicase',
+ ['valt'] = 'alternate vertical metrics',
+ ['vatu'] = 'vattu variants',
+ ['vert'] = 'vertical writing',
+ ['vhal'] = 'alternate vertical half metrics',
+ ['vjmo'] = 'vowel jamo forms',
+ ['vkna'] = 'vertical kana alternates',
+ ['vkrn'] = 'vertical kerning',
+ ['vpal'] = 'proportional alternate vertical metrics',
+ ['vrt2'] = 'vertical rotation',
+ ['zero'] = 'slashed zero',
+
+ ['trep'] = 'traditional tex replacements',
+ ['tlig'] = 'traditional tex ligatures',
+
+ ['ss..'] = 'stylistic set ..',
+ ['cv..'] = 'character variant ..',
+ ['js..'] = 'justification ..',
+
+ ["dv.."] = "devanagari ..",
+ ["ml.."] = "malayalam ..",
+}
+
+local baselines = allocate {
+ ['hang'] = 'hanging baseline',
+ ['icfb'] = 'ideographic character face bottom edge baseline',
+ ['icft'] = 'ideographic character face tope edige baseline',
+ ['ideo'] = 'ideographic em-box bottom edge baseline',
+ ['idtp'] = 'ideographic em-box top edge baseline',
+ ['math'] = 'mathematical centered baseline',
+ ['romn'] = 'roman baseline'
+}
+
+tables.scripts = scripts
+tables.languages = languages
+tables.features = features
+tables.baselines = baselines
+
+local acceptscripts = true directives.register("otf.acceptscripts", function(v) acceptscripts = v end)
+local acceptlanguages = true directives.register("otf.acceptlanguages", function(v) acceptlanguages = v end)
+
+local report_checks = logs.reporter("fonts","checks")
+
+-- hm, we overload the metatables
+
+if otffeatures.features then
+ for k, v in next, otffeatures.features do
+ features[k] = v
+ end
+ otffeatures.features = features
+end
+
+local function swapped(h)
+ local r = { }
+ for k, v in next, h do
+ r[gsub(v,"[^a-z0-9]","")] = k -- is already lower
+ end
+ return r
+end
+
+local verbosescripts = allocate(swapped(scripts ))
+local verboselanguages = allocate(swapped(languages))
+local verbosefeatures = allocate(swapped(features ))
+local verbosebaselines = allocate(swapped(baselines))
+
+-- lets forget about trailing spaces
+
+local function resolve(t,k)
+ if k then
+ k = gsub(lower(k),"[^a-z0-9]","")
+ local v = rawget(t,k)
+ if v then
+ return v
+ end
+ end
+end
+
+setmetatableindex(verbosescripts, resolve)
+setmetatableindex(verboselanguages, resolve)
+setmetatableindex(verbosefeatures, resolve)
+setmetatableindex(verbosebaselines, resolve)
+
+-- We could optimize the next lookups by using an extra metatable and storing
+-- already found values but in practice there are not that many lookups so
+-- it's never a bottleneck.
+
+setmetatableindex(scripts, function(t,k)
+ if k then
+ k = lower(k)
+ if k == "dflt" then
+ return k
+ end
+ local v = rawget(t,k)
+ if v then
+ return v
+ end
+ k = gsub(k," ","")
+ v = rawget(t,v)
+ if v then
+ return v
+ elseif acceptscripts then
+ report_checks("registering extra script %a",k)
+ rawset(t,k,k)
+ return k
+ end
+ end
+ return "dflt"
+end)
+
+setmetatableindex(languages, function(t,k)
+ if k then
+ k = lower(k)
+ if k == "dflt" then
+ return k
+ end
+ local v = rawget(t,k)
+ if v then
+ return v
+ end
+ k = gsub(k," ","")
+ v = rawget(t,v)
+ if v then
+ return v
+ elseif acceptlanguages then
+ report_checks("registering extra language %a",k)
+ rawset(t,k,k)
+ return k
+ end
+ end
+ return "dflt"
+end)
+
+setmetatablenewindex(languages, "ignore")
+setmetatablenewindex(baselines, "ignore")
+setmetatablenewindex(baselines, "ignore")
+
+local function resolve(t,k)
+ if k then
+ k = lower(k)
+ local v = rawget(t,k)
+ if v then
+ return v
+ end
+ k = gsub(k," ","")
+ local v = rawget(t,k)
+ if v then
+ return v
+ end
+ local tag, dd = match(k,"(..)(%d+)")
+ if tag and dd then
+ local v = rawget(t,tag)
+ if v then
+ return v -- return format(v,tonumber(dd)) -- old way
+ else
+ local v = rawget(t,tag.."..") -- nicer in overview
+ if v then
+ return (gsub(v,"%.%.",tonumber(dd))) -- new way
+ end
+ end
+ end
+ end
+ return k -- "dflt"
+end
+
+setmetatableindex(features, resolve)
+
+local function assign(t,k,v)
+ if k and v then
+ v = lower(v)
+ rawset(t,k,v) -- rawset ?
+ -- rawset(features,gsub(v,"[^a-z0-9]",""),k) -- why ? old code
+ end
+end
+
+setmetatablenewindex(features, assign)
+
+local checkers = {
+ rand = function(v)
+ return v == true and "random" or v
+ end
+}
+
+-- Keep this:
+--
+-- function otf.features.normalize(features)
+-- if features then
+-- local h = { }
+-- for k, v in next, features do
+-- k = lower(k)
+-- if k == "language" then
+-- v = gsub(lower(v),"[^a-z0-9]","")
+-- h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds
+-- elseif k == "script" then
+-- v = gsub(lower(v),"[^a-z0-9]","")
+-- h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds
+-- else
+-- if type(v) == "string" then
+-- local b = is_boolean(v)
+-- if type(b) == "nil" then
+-- v = tonumber(v) or lower(v)
+-- else
+-- v = b
+-- end
+-- end
+-- if not rawget(features,k) then
+-- k = rawget(verbosefeatures,k) or k
+-- end
+-- local c = checkers[k]
+-- h[k] = c and c(v) or v
+-- end
+-- end
+-- return h
+-- end
+-- end
+
+-- inspect(fonts.handlers.otf.statistics.usedfeatures)
+
+if not storage then
+ return
+end
+
+local usedfeatures = statistics.usedfeatures or { }
+statistics.usedfeatures = usedfeatures
+
+table.setmetatableindex(usedfeatures, function(t,k) if k then local v = { } t[k] = v return v end end) -- table.autotable
+
+storage.register("fonts/otf/usedfeatures", usedfeatures, "fonts.handlers.otf.statistics.usedfeatures" )
+
+function otffeatures.normalize(features)
+ if features then
+ local h = { }
+ for key, value in next, features do
+ local k = lower(key)
+ if k == "language" then
+ local v = gsub(lower(value),"[^a-z0-9]","")
+ h.language = rawget(verboselanguages,v) or (languages[v] and v) or "dflt" -- auto adds
+ elseif k == "script" then
+ local v = gsub(lower(value),"[^a-z0-9]","")
+ h.script = rawget(verbosescripts,v) or (scripts[v] and v) or "dflt" -- auto adds
+ else
+ local uk = usedfeatures[key]
+ local uv = uk[value]
+ if uv then
+ -- report_checks("feature value %a first seen at %a",value,key)
+ else
+ uv = tonumber(value) -- before boolean as there we also handle 0/1
+ if uv then
+ -- we're okay
+ elseif type(value) == "string" then
+ local b = is_boolean(value)
+ if type(b) == "nil" then
+ uv = lower(value)
+ else
+ uv = b
+ end
+ else
+ uv = value
+ end
+ if not rawget(features,k) then
+ k = rawget(verbosefeatures,k) or k
+ end
+ local c = checkers[k]
+ if c then
+ uv = c(uv) or vc
+ end
+ uk[value] = uv
+ end
+ h[k] = uv
+ end
+ end
+ return h
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-oup.lua b/Master/texmf-dist/tex/context/base/mkiv/font-oup.lua
new file mode 100644
index 00000000000..3b6d8ea53c7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-oup.lua
@@ -0,0 +1,2157 @@
+if not modules then modules = { } end modules ['font-oup'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next, type = next, type
+local P, R, S = lpeg.P, lpeg.R, lpeg.S
+local lpegmatch = lpeg.match
+local insert, remove, copy, unpack = table.insert, table.remove, table.copy, table.unpack
+
+local formatters = string.formatters
+local sortedkeys = table.sortedkeys
+local sortedhash = table.sortedhash
+local tohash = table.tohash
+
+local report = logs.reporter("otf reader")
+
+local trace_markwidth = false trackers.register("otf.markwidth",function(v) trace_markwidth = v end)
+
+local readers = fonts.handlers.otf.readers
+local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+
+local f_private = formatters["P%05X"]
+local f_unicode = formatters["U%05X"]
+local f_index = formatters["I%05X"]
+local f_character_y = formatters["%C"]
+local f_character_n = formatters["[ %C ]"]
+
+local doduplicates = true -- can become an option (pseudo feature)
+
+local function replaced(list,index,replacement)
+ if type(list) == "number" then
+ return replacement
+ elseif type(replacement) == "table" then
+ local t = { }
+ local n = index-1
+ for i=1,n do
+ t[i] = list[i]
+ end
+ for i=1,#replacement do
+ n = n + 1
+ t[n] = replacement[i]
+ end
+ for i=index+1,#list do
+ n = n + 1
+ t[n] = list[i]
+ end
+ else
+ list[index] = replacement
+ return list
+ end
+end
+
+local function unifyresources(fontdata,indices)
+ local descriptions = fontdata.descriptions
+ local resources = fontdata.resources
+ if not descriptions or not resources then
+ return
+ end
+ --
+ local variants = fontdata.resources.variants
+ if variants then
+ for selector, unicodes in next, variants do
+ for unicode, index in next, unicodes do
+ unicodes[unicode] = indices[index]
+ end
+ end
+ end
+ --
+ local function remark(marks)
+ if marks then
+ local newmarks = { }
+ for k, v in next, marks do
+ local u = indices[k]
+ if u then
+ newmarks[u] = v
+ else
+ report("discarding mark %i",k)
+ end
+ end
+ return newmarks
+ end
+ end
+ --
+ local marks = resources.marks
+ if marks then
+ resources.marks = remark(marks)
+ end
+ --
+ local markclasses = resources.markclasses
+ if markclasses then
+ for class, marks in next, markclasses do
+ markclasses[class] = remark(marks)
+ end
+ end
+ --
+ local marksets = resources.marksets
+ if marksets then
+ for class, marks in next, marksets do
+ marksets[class] = remark(marks)
+ end
+ end
+ --
+ local done = { } -- we need to deal with shared !
+ --
+ local duplicates = doduplicates and resources.duplicates
+ if duplicates and not next(duplicates) then
+ duplicates = false
+ end
+ --
+ local function recover(cover) -- can be packed
+ for i=1,#cover do
+ local c = cover[i]
+ if not done[c] then
+ local t = { }
+ for k, v in next, c do
+ t[indices[k]] = v
+ end
+ cover[i] = t
+ done[c] = d
+ end
+ end
+ end
+ --
+ local function recursed(c) -- ligs are not packed
+ local t = { }
+ for g, d in next, c do
+ if type(d) == "table" then
+ t[indices[g]] = recursed(d)
+ else
+ t[g] = indices[d] -- ligature
+ end
+ end
+ return t
+ end
+ --
+ -- the duplicates need checking (probably only in cjk fonts): currently we only check
+ -- gsub_single, gsub_alternate, gsub_multiple, gpos_single and gpos_cursive
+ --
+ local function unifythem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ local features = sequence.features
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gsub_single" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ if duplicates then
+ for g1, d1 in next, c do
+ local ug1 = indices[g1]
+ local ud1 = indices[d1]
+ t1[ug1] = ud1
+ --
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = ud1
+ end
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ t1[indices[g1]] = indices[d1]
+ end
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ elseif kind == "gpos_pair" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ for g1, d1 in next, c do
+ local t2 = done[d1]
+ if not t2 then
+ t2 = { }
+ for g2, d2 in next, d1 do
+ t2[indices[g2]] = d2
+ end
+ done[d1] = t2
+ end
+ t1[indices[g1]] = t2
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ elseif kind == "gsub_ligature" then
+ local c = step.coverage
+ if c then
+ step.coverage = recursed(c)
+ end
+ elseif kind == "gsub_alternate" or kind == "gsub_multiple" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ if duplicates then
+ for g1, d1 in next, c do
+ for i=1,#d1 do
+ d1[i] = indices[d1[i]]
+ end
+ local ug1 = indices[g1]
+ t1[ug1] = d1
+ --
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = copy(d1)
+ end
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ for i=1,#d1 do
+ d1[i] = indices[d1[i]]
+ end
+ t1[indices[g1]] = d1
+ end
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" or kind == "gpos_mark2ligature" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ for g1, d1 in next, c do
+ t1[indices[g1]] = d1
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ local c = step.baseclasses
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ for g1, d1 in next, c do
+ local t2 = done[d1]
+ if not t2 then
+ t2 = { }
+ for g2, d2 in next, d1 do
+ t2[indices[g2]] = d2
+ end
+ done[d1] = t2
+ end
+ c[g1] = t2
+ end
+ done[c] = c
+ end
+ end
+ elseif kind == "gpos_single" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ if duplicates then
+ for g1, d1 in next, c do
+ local ug1 = indices[g1]
+ t1[ug1] = d1
+ --
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = d1
+ end
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ t1[indices[g1]] = d1
+ end
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ elseif kind == "gpos_cursive" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ if duplicates then
+ for g1, d1 in next, c do
+ local ug1 = indices[g1]
+ t1[ug1] = d1
+ --
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ -- probably needs a bit more
+ for u in next, dg1 do
+ t1[u] = copy(d1)
+ end
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ t1[indices[g1]] = d1
+ end
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
+ end
+ --
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ --
+ local before = rule.before if before then recover(before) end
+ local after = rule.after if after then recover(after) end
+ local current = rule.current if current then recover(current) end
+ --
+ local replacements = rule.replacements
+ if replacements then
+ if not done[replacements] then
+ local r = { }
+ for k, v in next, replacements do
+ r[indices[k]] = indices[v]
+ end
+ rule.replacements = r
+ done[replacements] = r
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ --
+ unifythem(resources.sequences)
+ unifythem(resources.sublookups)
+end
+
+local function copyduplicates(fontdata)
+ if doduplicates then
+ local descriptions = fontdata.descriptions
+ local resources = fontdata.resources
+ local duplicates = resources.duplicates
+ if duplicates then
+ for u, d in next, duplicates do
+ local du = descriptions[u]
+ if du then
+ local t = { f_character_y(u), "@", f_index(du.index), "->" }
+ local n = 0
+ local m = 25
+ for u in next, d do
+ if descriptions[u] then
+ if n < m then
+ t[n+4] = f_character_n(u)
+ end
+ else
+ local c = copy(du)
+ c.unicode = u -- better this way
+ descriptions[u] = c
+ if n < m then
+ t[n+4] = f_character_y(u)
+ end
+ end
+ n = n + 1
+ end
+ if n <= m then
+ report("duplicates: %i : % t",n,t)
+ else
+ report("duplicates: %i : % t ...",n,t)
+ end
+ else
+ -- what a mess
+ end
+ end
+ end
+ end
+end
+
+local ignore = { -- should we fix them?
+ ["notdef"] = true,
+ [".notdef"] = true,
+ ["null"] = true,
+ [".null"] = true,
+ ["nonmarkingreturn"] = true,
+}
+
+
+local function checklookups(fontdata,missing,nofmissing)
+ local descriptions = fontdata.descriptions
+ local resources = fontdata.resources
+ if missing and nofmissing and nofmissing <= 0 then
+ return
+ end
+ --
+ local singles = { }
+ local alternates = { }
+ local ligatures = { }
+
+ if not missing then
+ missing = { }
+ nofmissing = 0
+ for u, d in next, descriptions do
+ if not d.unicode then
+ nofmissing = nofmissing + 1
+ missing[u] = true
+ end
+ end
+ end
+
+ local function collectthem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gsub_single" then
+ local c = step.coverage
+ if c then
+ singles[#singles+1] = c
+ end
+ elseif kind == "gsub_alternate" then
+ local c = step.coverage
+ if c then
+ alternates[#alternates+1] = c
+ end
+ elseif kind == "gsub_ligature" then
+ local c = step.coverage
+ if c then
+ ligatures[#ligatures+1] = c
+ end
+ end
+ end
+ end
+ end
+ end
+
+ collectthem(resources.sequences)
+ collectthem(resources.sublookups)
+
+ local loops = 0
+ while true do
+ loops = loops + 1
+ local old = nofmissing
+ for i=1,#singles do
+ local c = singles[i]
+ for g1, g2 in next, c do
+ if missing[g1] then
+ local u2 = descriptions[g2].unicode
+ if u2 then
+ missing[g1] = false
+ descriptions[g1].unicode = u2
+ nofmissing = nofmissing - 1
+ end
+ end
+ if missing[g2] then
+ local u1 = descriptions[g1].unicode
+ if u1 then
+ missing[g2] = false
+ descriptions[g2].unicode = u1
+ nofmissing = nofmissing - 1
+ end
+ end
+ end
+ end
+ for i=1,#alternates do
+ local c = alternates[i]
+ -- maybe first a g1 loop and then a g2
+ for g1, d1 in next, c do
+ if missing[g1] then
+ for i=1,#d1 do
+ local g2 = d1[i]
+ local u2 = descriptions[g2].unicode
+ if u2 then
+ missing[g1] = false
+ descriptions[g1].unicode = u2
+ nofmissing = nofmissing - 1
+ end
+ end
+ end
+ if not missing[g1] then
+ for i=1,#d1 do
+ local g2 = d1[i]
+ if missing[g2] then
+ local u1 = descriptions[g1].unicode
+ if u1 then
+ missing[g2] = false
+ descriptions[g2].unicode = u1
+ nofmissing = nofmissing - 1
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofmissing <= 0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old == nofmissing then
+ break
+ end
+ end
+
+ local t, n -- no need to insert/remove and allocate many times
+
+ local function recursed(c)
+ for g, d in next, c do
+ if g ~= "ligature" then
+ local u = descriptions[g].unicode
+ if u then
+ n = n + 1
+ t[n] = u
+ recursed(d)
+ n = n - 1
+ end
+ elseif missing[d] then
+ local l = { }
+ local m = 0
+ for i=1,n do
+ local u = t[i]
+ if type(u) == "table" then
+ for i=1,#u do
+ m = m + 1
+ l[m] = u[i]
+ end
+ else
+ m = m + 1
+ l[m] = u
+ end
+ end
+ missing[d] = false
+ descriptions[d].unicode = l
+ nofmissing = nofmissing - 1
+ end
+ end
+ end
+
+ if nofmissing > 0 then
+ t = { }
+ n = 0
+ local loops = 0
+ while true do
+ loops = loops + 1
+ local old = nofmissing
+ for i=1,#ligatures do
+ recursed(ligatures[i])
+ end
+ if nofmissing <= 0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old == nofmissing then
+ break
+ end
+ end
+ t = nil
+ n = 0
+ end
+
+ if nofmissing > 0 then
+ local done = { }
+ for i, r in next, missing do
+ if r then
+ local name = descriptions[i].name or f_index(i)
+ if not ignore[name] then
+ done[name] = true
+ end
+ end
+ end
+ if next(done) then
+ report("not unicoded: % t",table.sortedkeys(done))
+ end
+ end
+end
+
+local function unifymissing(fontdata)
+ if not fonts.mappings then
+ require("font-map")
+ require("font-agl")
+ end
+ local unicodes = { }
+ local private = fontdata.private
+ local resources = fontdata.resources
+ resources.unicodes = unicodes
+ for unicode, d in next, fontdata.descriptions do
+ if unicode < privateoffset then
+ local name = d.name
+ if name then
+ unicodes[name] = unicode
+ end
+ end
+ end
+ fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
+ resources.unicodes = nil
+end
+
+local function unifyglyphs(fontdata,usenames)
+ local private = fontdata.private or privateoffset
+ local glyphs = fontdata.glyphs
+ local indices = { }
+ local descriptions = { }
+ local names = usenames and { }
+ local resources = fontdata.resources
+ local zero = glyphs[0]
+ local zerocode = zero.unicode
+ if not zerocode then
+ zerocode = private
+ zero.unicode = zerocode
+ private = private + 1
+ end
+ descriptions[zerocode] = zero
+ if names then
+ local name = glyphs[0].name or f_private(zerocode)
+ indices[0] = name
+ names[name] = zerocode
+ else
+ indices[0] = zerocode
+ end
+ --
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local unicode = glyph.unicode -- this is the primary one
+ if not unicode then
+ -- report("assigning private unicode %U to glyph indexed %05X (%s)",private,index,"unset")
+ unicode = private
+ -- glyph.unicode = -1
+ if names then
+ local name = glyph.name or f_private(unicode)
+ indices[index] = name
+ names[name] = unicode
+ else
+ indices[index] = unicode
+ end
+ private = private + 1
+ elseif descriptions[unicode] then
+ -- real weird
+ report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
+ unicode = private
+ -- glyph.unicode = -1
+ if names then
+ local name = glyph.name or f_private(unicode)
+ indices[index] = name
+ names[name] = unicode
+ else
+ indices[index] = unicode
+ end
+ private = private + 1
+ else
+ if names then
+ local name = glyph.name or f_unicode(unicode)
+ indices[index] = name
+ names[name] = unicode
+ else
+ indices[index] = unicode
+ end
+ end
+ descriptions[unicode] = glyph
+ end
+ --
+ for index=1,#glyphs do
+ local math = glyphs[index].math
+ if math then
+ local list = math.vparts
+ if list then
+ for i=1,#list do local l = list[i] l.glyph = indices[l.glyph] end
+ end
+ local list = math.hparts
+ if list then
+ for i=1,#list do local l = list[i] l.glyph = indices[l.glyph] end
+ end
+ local list = math.vvariants
+ if list then
+ -- for i=1,#list do local l = list[i] l.glyph = indices[l.glyph] end
+ for i=1,#list do list[i] = indices[list[i]] end
+ end
+ local list = math.hvariants
+ if list then
+ -- for i=1,#list do local l = list[i] l.glyph = indices[l.glyph] end
+ for i=1,#list do list[i] = indices[list[i]] end
+ end
+ end
+ end
+ --
+ fontdata.private = private
+ fontdata.glyphs = nil
+ fontdata.names = names
+ fontdata.descriptions = descriptions
+ fontdata.hashmethod = hashmethod
+ --
+ return indices, names
+end
+
+local p_bogusname = (
+ (P("uni") + P("UNI") + P("Uni") + P("U") + P("u")) * S("Xx")^0 * R("09","AF")^1
+ + (P("identity") + P("Identity") + P("IDENTITY")) * R("09","AF")^1
+ + (P("index") + P("Index") + P("INDEX")) * R("09")^1
+) * P(-1)
+
+local function stripredundant(fontdata)
+ local descriptions = fontdata.descriptions
+ if descriptions then
+ local n = 0
+ local c = 0
+ for unicode, d in next, descriptions do
+ local name = d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name = nil
+ n = n + 1
+ end
+ if d.class == "base" then
+ d.class = nil
+ c = c + 1
+ end
+ end
+ if n > 0 then
+ report("%s bogus names removed (verbose unicode)",n)
+ end
+ if c > 0 then
+ report("%s base class tags removed (default is base)",c)
+ end
+ end
+end
+
+function readers.getcomponents(fontdata) -- handy for resolving ligatures when names are missing
+ local resources = fontdata.resources
+ if resources then
+ local sequences = resources.sequences
+ if sequences then
+ local collected = { }
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ if sequence.type == "gsub_ligature" then
+ local steps = sequence.steps
+ if steps then
+ local l = { }
+ local function traverse(p,k,v)
+ if k == "ligature" then
+ collected[v] = { unpack(l) }
+ else
+ insert(l,k)
+ for k, vv in next, v do
+ traverse(p,k,vv)
+ end
+ remove(l)
+ end
+ end
+ for i=1,#steps do
+ -- we actually had/have this in base mode
+ local coverage = steps[i].coverage
+ if coverage then
+ for k, v in next, coverage do
+ traverse(k,k,v)
+ end
+ end
+ end
+ end
+ end
+ end
+ if next(collected) then
+ -- remove self referring
+ -- for k, v in next, collected do
+ -- for i=1,#v do
+ -- local vi = v[i]
+ -- if vi == k then
+ -- -- report("removing self referring ligature @ slot %5X from collected (1)",k)
+ -- collected[k] = nil
+ -- end
+ -- end
+ -- end
+ while true do
+ local done = false
+ for k, v in next, collected do
+ for i=1,#v do
+ local vi = v[i]
+ if vi == k then
+ -- report("removing self referring ligature @ slot %5X from collected (2)",k)
+ collected[k] = nil
+ break
+ else
+ local c = collected[vi]
+ if c then
+ done = true
+ local t = { }
+ local n = i - 1
+ for j=1,n do
+ t[j] = v[j]
+ end
+ for j=1,#c do
+ n = n + 1
+ t[n] = c[j]
+ end
+ for j=i+1,#v do
+ n = n + 1
+ t[n] = v[j]
+ end
+ collected[k] = t
+ break
+ end
+ end
+ end
+ end
+ if not done then
+ break
+ end
+ end
+ return collected
+ end
+ end
+ end
+end
+
+function readers.rehash(fontdata,hashmethod) -- TODO: combine loops in one
+ if not (fontdata and fontdata.glyphs) then
+ return
+ end
+ if hashmethod == "indices" then
+ fontdata.hashmethod = "indices"
+ elseif hashmethod == "names" then
+ fontdata.hashmethod = "names"
+ local indices = unifyglyphs(fontdata,true)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ -- stripredundant(fontdata)
+ else
+ fontdata.hashmethod = "unicode"
+ local indices = unifyglyphs(fontdata)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ stripredundant(fontdata)
+ end
+ -- maybe here components
+end
+
+function readers.checkhash(fontdata)
+ local hashmethod = fontdata.hashmethod
+ if hashmethod == "unicodes" then
+ fontdata.names = nil -- just to be sure
+ elseif hashmethod == "names" and fontdata.names then
+ unifyresources(fontdata,fontdata.names)
+ copyduplicates(fontdata)
+ fontdata.hashmethod = "unicode"
+ fontdata.names = nil -- no need for it
+ else
+ readers.rehash(fontdata,"unicode")
+ end
+end
+
+function readers.addunicodetable(fontdata)
+ local resources = fontdata.resources
+ local unicodes = resources.unicodes
+ if not unicodes then
+ local descriptions = fontdata.descriptions
+ if descriptions then
+ unicodes = { }
+ resources.unicodes = unicodes
+ for u, d in next, descriptions do
+ local n = d.name
+ if n then
+ unicodes[n] = u
+ end
+ end
+ end
+ end
+end
+
+-- for the moment here:
+
+local concat, sort = table.concat, table.sort
+local next, type, tostring = next, type, tostring
+
+local criterium = 1
+local threshold = 0
+
+local trace_packing = false trackers.register("otf.packing", function(v) trace_packing = v end)
+local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+
+local report_otf = logs.reporter("fonts","otf loading")
+
+local function tabstr_normal(t)
+ local s = { }
+ local n = 0
+ for k, v in next, t do
+ n = n + 1
+ if type(v) == "table" then
+ s[n] = k .. ">" .. tabstr_normal(v)
+ elseif v == true then
+ s[n] = k .. "+" -- "=true"
+ elseif v then
+ s[n] = k .. "=" .. v
+ else
+ s[n] = k .. "-" -- "=false"
+ end
+ end
+ if n == 0 then
+ return ""
+ elseif n == 1 then
+ return s[1]
+ else
+ sort(s) -- costly but needed (occasional wrong hit otherwise)
+ return concat(s,",")
+ end
+end
+
+local function tabstr_flat(t)
+ local s = { }
+ local n = 0
+ for k, v in next, t do
+ n = n + 1
+ s[n] = k .. "=" .. v
+ end
+ if n == 0 then
+ return ""
+ elseif n == 1 then
+ return s[1]
+ else
+ sort(s) -- costly but needed (occasional wrong hit otherwise)
+ return concat(s,",")
+ end
+end
+
+local function tabstr_mixed(t) -- indexed
+ local s = { }
+ local n = #t
+ if n == 0 then
+ return ""
+ elseif n == 1 then
+ local k = t[1]
+ if k == true then
+ return "++" -- we need to distinguish from "true"
+ elseif k == false then
+ return "--" -- we need to distinguish from "false"
+ else
+ return tostring(k) -- number or string
+ end
+ else
+ for i=1,n do
+ local k = t[i]
+ if k == true then
+ s[i] = "++" -- we need to distinguish from "true"
+ elseif k == false then
+ s[i] = "--" -- we need to distinguish from "false"
+ else
+ s[i] = k -- number or string
+ end
+ end
+ return concat(s,",")
+ end
+end
+
+local function tabstr_boolean(t)
+ local s = { }
+ local n = 0
+ for k, v in next, t do
+ n = n + 1
+ if v then
+ s[n] = k .. "+"
+ else
+ s[n] = k .. "-"
+ end
+ end
+ if n == 0 then
+ return ""
+ elseif n == 1 then
+ return s[1]
+ else
+ sort(s) -- costly but needed (occasional wrong hit otherwise)
+ return concat(s,",")
+ end
+end
+
+-- beware: we cannot unpack and repack the same table because then sharing
+-- interferes (we could catch this if needed) .. so for now: save, reload
+-- and repack in such cases (never needed anyway) .. a tricky aspect is that
+-- we then need to sort more thanks to random hashing
+
+function readers.pack(data)
+
+ if data then
+
+ local h, t, c = { }, { }, { }
+ local hh, tt, cc = { }, { }, { }
+ local nt, ntt = 0, 0
+
+ local function pack_normal(v)
+ local tag = tabstr_normal(v)
+ local ht = h[tag]
+ if ht then
+ c[ht] = c[ht] + 1
+ return ht
+ else
+ nt = nt + 1
+ t[nt] = v
+ h[tag] = nt
+ c[nt] = 1
+ return nt
+ end
+ end
+
+ local function pack_flat(v)
+ local tag = tabstr_flat(v)
+ local ht = h[tag]
+ if ht then
+ c[ht] = c[ht] + 1
+ return ht
+ else
+ nt = nt + 1
+ t[nt] = v
+ h[tag] = nt
+ c[nt] = 1
+ return nt
+ end
+ end
+
+ local function pack_boolean(v)
+ local tag = tabstr_boolean(v)
+ local ht = h[tag]
+ if ht then
+ c[ht] = c[ht] + 1
+ return ht
+ else
+ nt = nt + 1
+ t[nt] = v
+ h[tag] = nt
+ c[nt] = 1
+ return nt
+ end
+ end
+
+ local function pack_indexed(v)
+ local tag = concat(v," ")
+ local ht = h[tag]
+ if ht then
+ c[ht] = c[ht] + 1
+ return ht
+ else
+ nt = nt + 1
+ t[nt] = v
+ h[tag] = nt
+ c[nt] = 1
+ return nt
+ end
+ end
+
+ local function pack_mixed(v)
+ local tag = tabstr_mixed(v)
+ local ht = h[tag]
+ if ht then
+ c[ht] = c[ht] + 1
+ return ht
+ else
+ nt = nt + 1
+ t[nt] = v
+ h[tag] = nt
+ c[nt] = 1
+ return nt
+ end
+ end
+
+ local function pack_final(v)
+ -- v == number
+ if c[v] <= criterium then
+ return t[v]
+ else
+ -- compact hash
+ local hv = hh[v]
+ if hv then
+ return hv
+ else
+ ntt = ntt + 1
+ tt[ntt] = t[v]
+ hh[v] = ntt
+ cc[ntt] = c[v]
+ return ntt
+ end
+ end
+ end
+
+ local function success(stage,pass)
+ if nt == 0 then
+ if trace_loading or trace_packing then
+ report_otf("pack quality: nothing to pack")
+ end
+ return false
+ elseif nt >= threshold then
+ local one, two, rest = 0, 0, 0
+ if pass == 1 then
+ for k,v in next, c do
+ if v == 1 then
+ one = one + 1
+ elseif v == 2 then
+ two = two + 1
+ else
+ rest = rest + 1
+ end
+ end
+ else
+ for k,v in next, cc do
+ if v > 20 then
+ rest = rest + 1
+ elseif v > 10 then
+ two = two + 1
+ else
+ one = one + 1
+ end
+ end
+ data.tables = tt
+ end
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",
+ stage, pass, one+two+rest, one, two, rest, criterium)
+ end
+ return true
+ else
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",
+ stage, pass, nt, threshold)
+ end
+ return false
+ end
+ end
+
+ local function packers(pass)
+ if pass == 1 then
+ return pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed
+ else
+ return pack_final, pack_final, pack_final, pack_final, pack_final
+ end
+ end
+
+ local resources = data.resources
+ local sequences = resources.sequences
+ local sublookups = resources.sublookups
+ local features = resources.features
+
+ local chardata = characters and characters.data
+ local descriptions = data.descriptions or data.glyphs
+
+ if not descriptions then
+ return
+ end
+
+ --
+
+ for pass=1,2 do
+
+ if trace_packing then
+ report_otf("start packing: stage 1, pass %s",pass)
+ end
+
+ local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
+
+ for unicode, description in next, descriptions do
+ local boundingbox = description.boundingbox
+ if boundingbox then
+ description.boundingbox = pack_indexed(boundingbox)
+ end
+ local math = description.math
+ if math then
+ local kerns = math.kerns
+ if kerns then
+ for tag, kern in next, kerns do
+ kerns[tag] = pack_normal(kern)
+ end
+ end
+ end
+ end
+
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ local order = sequence.order
+ local features = sequence.features
+ local flags = sequence.flags
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gpos_pair" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ for g1, d1 in next, c do
+ c[g1] = pack_normal(d1)
+ end
+ else
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ local f = d2[1] if f then d2[1] = pack_indexed(f) end
+ local s = d2[2] if s then d2[2] = pack_indexed(s) end
+ end
+ end
+ end
+ end
+ elseif kind == "gpos_single" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ step.coverage = pack_normal(c)
+ else
+ for g1, d1 in next, c do
+ c[g1] = pack_indexed(d1)
+ end
+ end
+ end
+ elseif kind == "gpos_cursive" then
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ local f = d1[2] if f then d1[2] = pack_indexed(f) end
+ local s = d1[3] if s then d1[3] = pack_indexed(s) end
+ end
+ end
+ elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" then
+ local c = step.baseclasses
+ if c then
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ d1[g2] = pack_indexed(d2)
+ end
+ end
+ end
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ d1[2] = pack_indexed(d1[2])
+ end
+ end
+ elseif kind == "gpos_mark2ligature" then
+ local c = step.baseclasses
+ if c then
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ for g3, d3 in next, d2 do
+ d2[g3] = pack_indexed(d3)
+ end
+ end
+ end
+ end
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ d1[2] = pack_indexed(d1[2])
+ end
+ end
+ end
+ -- if ... chain ...
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ local r = rule.before if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
+ local r = rule.after if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
+ local r = rule.current if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
+ local r = rule.replacements if r then rule.replacements = pack_flat (r) end -- can have holes
+ end
+ end
+ end
+ end
+ if order then
+ sequence.order = pack_indexed(order)
+ end
+ if features then
+ for script, feature in next, features do
+ features[script] = pack_normal(feature)
+ end
+ end
+ if flags then
+ sequence.flags = pack_normal(flags)
+ end
+ end
+ end
+
+ if sequences then
+ packthem(sequences)
+ end
+
+ if sublookups then
+ packthem(sublookups)
+ end
+
+ if features then
+ for k, list in next, features do
+ for feature, spec in next, list do
+ list[feature] = pack_normal(spec)
+ end
+ end
+ end
+
+ if not success(1,pass) then
+ return
+ end
+
+ end
+
+ if nt > 0 then
+
+ for pass=1,2 do
+
+ if trace_packing then
+ report_otf("start packing: stage 2, pass %s",pass)
+ end
+
+ local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
+
+ for unicode, description in next, descriptions do
+ local math = description.math
+ if math then
+ local kerns = math.kerns
+ if kerns then
+ math.kerns = pack_normal(kerns)
+ end
+ end
+ end
+
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ local features = sequence.features
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gpos_pair" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ -- todo !
+ else
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ d1[g2] = pack_normal(d2)
+ end
+ end
+ end
+ end
+-- elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" or kind == "gpos_mark2ligature" then
+-- local c = step.baseclasses
+-- for k, v in next, c do
+-- c[k] = pack_normal(v)
+-- end
+ end
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ local r = rule.before if r then rule.before = pack_normal(r) end
+ local r = rule.after if r then rule.after = pack_normal(r) end
+ local r = rule.current if r then rule.current = pack_normal(r) end
+ end
+ end
+ end
+ end
+ if features then
+ sequence.features = pack_normal(features)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ -- features
+ if not success(2,pass) then
+ -- return
+ end
+ end
+
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 3, pass %s",pass)
+ end
+
+ local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
+
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ local features = sequence.features
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gpos_pair" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ -- todo !
+ else
+ for g1, d1 in next, c do
+ c[g1] = pack_normal(d1)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+
+ end
+
+ end
+
+ end
+end
+
+local unpacked_mt = {
+ __index =
+ function(t,k)
+ t[k] = false
+ return k -- next time true
+ end
+}
+
+function readers.unpack(data)
+
+ if data then
+ local tables = data.tables
+ if tables then
+ local resources = data.resources
+ local descriptions = data.descriptions or data.glyphs
+ local sequences = resources.sequences
+ local sublookups = resources.sublookups
+ local features = resources.features
+ local unpacked = { }
+ setmetatable(unpacked,unpacked_mt)
+ for unicode, description in next, descriptions do
+ local tv = tables[description.boundingbox]
+ if tv then
+ description.boundingbox = tv
+ end
+ local math = description.math
+ if math then
+ local kerns = math.kerns
+ if kerns then
+ local tm = tables[kerns]
+ if tm then
+ math.kerns = tm
+ kerns = unpacked[tm]
+ end
+ if kerns then
+ for k, kern in next, kerns do
+ local tv = tables[kern]
+ if tv then
+ kerns[k] = tv
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local function unpackthem(sequences)
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local kind = sequence.type
+ local steps = sequence.steps
+ local order = sequence.order
+ local features = sequence.features
+ local flags = sequence.flags
+ local markclass = sequence.markclass
+ if steps then
+ for i=1,#steps do
+ local step = steps[i]
+ if kind == "gpos_pair" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ for g1, d1 in next, c do
+ local tv = tables[d1]
+ if tv then
+ c[g1] = tv
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ local tv = tables[d1]
+ if tv then
+ c[g1] = tv
+ d1 = tv
+ end
+ for g2, d2 in next, d1 do
+ local tv = tables[d2]
+ if tv then
+ d1[g2] = tv
+ d2 = tv
+ end
+ local f = tables[d2[1]] if f then d2[1] = f end
+ local s = tables[d2[2]] if s then d2[2] = s end
+ end
+ end
+ end
+ end
+ elseif kind == "gpos_single" then
+ local c = step.coverage
+ if c then
+ if step.format == "kern" then
+ local tv = tables[c]
+ if tv then
+ step.coverage = tv
+ end
+ else
+ for g1, d1 in next, c do
+ local tv = tables[d1]
+ if tv then
+ c[g1] = tv
+ end
+ end
+ end
+ end
+ elseif kind == "gpos_cursive" then
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ local f = tables[d1[2]] if f then d1[2] = f end
+ local s = tables[d1[3]] if s then d1[3] = s end
+ end
+ end
+ elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" then
+ local c = step.baseclasses
+ if c then
+-- for k, v in next, c do
+-- local tv = tables[v]
+-- if tv then
+-- c[k] = tv
+-- end
+-- end
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ local tv = tables[d2]
+ if tv then
+ d1[g2] = tv
+ end
+ end
+ end
+ end
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ local tv = tables[d1[2]]
+ if tv then
+ d1[2] = tv
+ end
+ end
+ end
+ elseif kind == "gpos_mark2ligature" then
+ local c = step.baseclasses
+ if c then
+-- for k, v in next, c do
+-- local tv = tables[v]
+-- if tv then
+-- c[k] = tv
+-- end
+-- end
+ for g1, d1 in next, c do
+ for g2, d2 in next, d1 do
+ for g3, d3 in next, d2 do
+ local tv = tables[d2[g3]]
+ if tv then
+ d2[g3] = tv
+ end
+ end
+ end
+ end
+ end
+ local c = step.coverage
+ if c then
+ for g1, d1 in next, c do
+ local tv = tables[d1[2]]
+ if tv then
+ d1[2] = tv
+ end
+ end
+ end
+ end
+ local rules = step.rules
+ if rules then
+ for i=1,#rules do
+ local rule = rules[i]
+ local before = rule.before
+ if before then
+ local tv = tables[before]
+ if tv then
+ rule.before = tv
+ before = tv
+ end
+ for i=1,#before do
+ local tv = tables[before[i]]
+ if tv then
+ before[i] = tv
+ end
+ end
+ end
+ local after = rule.after
+ if after then
+ local tv = tables[after]
+ if tv then
+ rule.after = tv
+ after = tv
+ end
+ for i=1,#after do
+ local tv = tables[after[i]]
+ if tv then
+ after[i] = tv
+ end
+ end
+ end
+ local current = rule.current
+ if current then
+ local tv = tables[current]
+ if tv then
+ rule.current = tv
+ current = tv
+ end
+ for i=1,#current do
+ local tv = tables[current[i]]
+ if tv then
+ current[i] = tv
+ end
+ end
+ end
+ local replacements = rule.replacements
+ if replacements then
+ local tv = tables[replace]
+ if tv then
+ rule.replacements = tv
+ end
+ end
+ end
+ end
+ end
+ end
+ if features then
+ local tv = tables[features]
+ if tv then
+ sequence.features = tv
+ features = tv
+ end
+ for script, feature in next, features do
+ local tv = tables[feature]
+ if tv then
+ features[script] = tv
+ end
+ end
+ end
+ if order then
+ local tv = tables[order]
+ if tv then
+ sequence.order = tv
+ end
+ end
+ if flags then
+ local tv = tables[flags]
+ if tv then
+ sequence.flags = tv
+ end
+ end
+ end
+ end
+
+ if sequences then
+ unpackthem(sequences)
+ end
+
+ if sublookups then
+ unpackthem(sublookups)
+ end
+
+ if features then
+ for k, list in next, features do
+ for feature, spec in next, list do
+ local tv = tables[spec]
+ if tv then
+ list[feature] = tv
+ end
+ end
+ end
+ end
+
+ data.tables = nil
+ end
+ end
+end
+
+local mt = {
+ __index = function(t,k) -- maybe set it
+ if k == "height" then
+ local ht = t.boundingbox[4]
+ return ht < 0 and 0 or ht
+ elseif k == "depth" then
+ local dp = -t.boundingbox[2]
+ return dp < 0 and 0 or dp
+ elseif k == "width" then
+ return 0
+ elseif k == "name" then -- or maybe uni*
+ return forcenotdef and ".notdef"
+ end
+ end
+}
+
+local function sameformat(sequence,steps,first,nofsteps,kind)
+ return true
+end
+
+local function mergesteps_1(lookup,strict)
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ local first = steps[1]
+ if strict then
+ local f = first.format
+ for i=2,nofsteps do
+ if steps[i].format ~= f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target = first.coverage
+ for i=2,nofsteps do
+ for k, v in next, steps[i].coverage do
+ if not target[k] then
+ target[k] = v
+ end
+ end
+ end
+ lookup.nofsteps = 1
+ lookup.merged = true
+ lookup.steps = { first }
+ return nofsteps - 1
+end
+
+
+local function mergesteps_2(lookup,strict) -- pairs
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ local first = steps[1]
+ if strict then
+ local f = first.format
+ for i=2,nofsteps do
+ if steps[i].format ~= f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target = first.coverage
+ for i=2,nofsteps do
+ for k, v in next, steps[i].coverage do
+ local tk = target[k]
+ if tk then
+ for k, v in next, v do
+ if not tk[k] then
+ tk[k] = v
+ end
+ end
+ else
+ target[k] = v
+ end
+ end
+ end
+ lookup.nofsteps = 1
+ lookup.steps = { first }
+ return nofsteps - 1
+end
+
+
+local function mergesteps_3(lookup,strict) -- marks
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ local first = steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local baseclasses = { }
+ local coverage = { }
+ local used = { }
+ for i=1,nofsteps do
+ local offset = i*10
+ local step = steps[i]
+ for k, v in sortedhash(step.baseclasses) do
+ baseclasses[offset+k] = v
+ end
+ for k, v in next, step.coverage do
+ local tk = coverage[k]
+ if tk then
+ for k, v in next, v do
+ if not tk[k] then
+ tk[k] = v
+ local c = offset + v[1]
+ v[1] = c
+ if not used[c] then
+ used[c] = true
+ end
+ end
+ end
+ else
+ coverage[k] = v
+ local c = offset + v[1]
+ v[1] = c
+ if not used[c] then
+ used[c] = true
+ end
+ end
+ end
+ end
+ for k, v in next, baseclasses do
+ if not used[k] then
+ baseclasses[k] = nil
+ report("discarding not used baseclass %i",k)
+ end
+ end
+ first.baseclasses = baseclasses
+ first.coverage = coverage
+ lookup.nofsteps = 1
+ lookup.steps = { first }
+ return nofsteps - 1
+end
+
+local function nested(old,new)
+ for k, v in next, old do
+ if k == "ligature" then
+ if not new.ligature then
+ new.ligature = v
+ end
+ else
+ local n = new[k]
+ if n then
+ nested(v,n)
+ else
+ new[k] = v
+ end
+ end
+ end
+end
+
+local function mergesteps_4(lookup) -- ligatures
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ local first = steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target = first.coverage
+ for i=2,nofsteps do
+ for k, v in next, steps[i].coverage do
+ local tk = target[k]
+ if tk then
+ nested(v,tk)
+ else
+ target[k] = v
+ end
+ end
+ end
+ lookup.nofsteps = 1
+ lookup.steps = { first }
+ return nofsteps - 1
+end
+
+local function checkkerns(lookup)
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ for i=1,nofsteps do
+ local step = steps[i]
+ if step.format == "pair" then
+ local coverage = step.coverage
+ local kerns = true
+ for g1, d1 in next, coverage do
+ if d1[1] ~= 0 or d1[2] ~= 0 or d1[4] ~= 0 then
+ kerns = false
+ break
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1, d1 in next, coverage do
+ coverage[g1] = d1[3]
+ end
+ step.format = "kern"
+ end
+ end
+ end
+end
+
+local function checkpairs(lookup)
+ local steps = lookup.steps
+ local nofsteps = lookup.nofsteps
+ local kerned = 0
+ for i=1,nofsteps do
+ local step = steps[i]
+ if step.format == "pair" then
+ local coverage = step.coverage
+ local kerns = true
+ for g1, d1 in next, coverage do
+ for g2, d2 in next, d1 do
+ if d2[2] then
+ kerns = false
+ break
+ else
+ local v = d2[1]
+ if v[1] ~= 0 or v[2] ~= 0 or v[4] ~= 0 then
+ kerns = false
+ break
+ end
+ end
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1, d1 in next, coverage do
+ for g2, d2 in next, d1 do
+ d1[g2] = d2[1][3]
+ end
+ end
+ step.format = "kern"
+ kerned = kerned + 1
+ end
+ end
+ end
+ return kerned
+end
+
+function readers.compact(data)
+ if not data or data.compacted then
+ return
+ else
+ data.compacted = true
+ end
+ local resources = data.resources
+ local merged = 0
+ local kerned = 0
+ local allsteps = 0
+ local function compact(what)
+ local lookups = resources[what]
+ if lookups then
+ for i=1,#lookups do
+ local lookup = lookups[i]
+ local nofsteps = lookup.nofsteps
+ allsteps = allsteps + nofsteps
+ if nofsteps > 1 then
+ local kind = lookup.type
+ if kind == "gsub_single" or kind == "gsub_alternate" or kind == "gsub_multiple" then
+ merged = merged + mergesteps_1(lookup)
+ elseif kind == "gsub_ligature" then
+ merged = merged + mergesteps_4(lookup)
+ elseif kind == "gpos_single" then
+ merged = merged + mergesteps_1(lookup,true)
+ checkkerns(lookup)
+ elseif kind == "gpos_pair" then
+ merged = merged + mergesteps_2(lookup,true)
+ kerned = kerned + checkpairs(lookup)
+ elseif kind == "gpos_cursive" then
+ merged = merged + mergesteps_2(lookup)
+ elseif kind == "gpos_mark2mark" or kind == "gpos_mark2base" or kind == "gpos_mark2ligature" then
+ merged = merged + mergesteps_3(lookup)
+ end
+ end
+ end
+ else
+ report("no lookups in %a",what)
+ end
+ end
+ compact("sequences")
+ compact("sublookups")
+ if merged > 0 then
+ report("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned > 0 then
+ report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
+end
+
+function readers.expand(data)
+ if not data or data.expanded then
+ return
+ else
+ data.expanded = true
+ end
+ local resources = data.resources
+ local sublookups = resources.sublookups
+ local sequences = resources.sequences -- were one level up
+ local markclasses = resources.markclasses
+ local descriptions = data.descriptions
+ if descriptions then
+ local defaultwidth = resources.defaultwidth or 0
+ local defaultheight = resources.defaultheight or 0
+ local defaultdepth = resources.defaultdepth or 0
+ local basename = trace_markwidth and file.basename(resources.filename)
+ for u, d in next, descriptions do
+ local bb = d.boundingbox
+ local wd = d.width
+ if not wd then
+ -- or bb?
+ d.width = defaultwidth
+ elseif trace_markwidth and wd ~= 0 and d.class == "mark" then
+ report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ end
+ if bb then
+ local ht = bb[4]
+ local dp = -bb[2]
+ if ht == 0 or ht < 0 then
+ -- not set
+ else
+ d.height = ht
+ end
+ if dp == 0 or dp < 0 then
+ -- not set
+ else
+ d.depth = dp
+ end
+ end
+ end
+ end
+ local function expandlookups(sequences)
+ if sequences then
+ -- we also need to do sublookups
+ for i=1,#sequences do
+ local sequence = sequences[i]
+ local steps = sequence.steps
+ if steps then
+ local kind = sequence.type
+ local markclass = sequence.markclass
+ if markclass then
+ if not markclasses then
+ report_warning("missing markclasses")
+ sequence.markclass = false
+ else
+ sequence.markclass = markclasses[markclass]
+ end
+ end
+ for i=1,sequence.nofsteps do
+ local step = steps[i]
+ local baseclasses = step.baseclasses
+ if baseclasses then
+ local coverage = step.coverage
+ for k, v in next, coverage do
+ v[1] = baseclasses[v[1]] -- slot 1 is a placeholder
+ end
+ elseif kind == "gpos_cursive" then
+ local coverage = step.coverage
+ for k, v in next, coverage do
+ v[1] = coverage -- slot 1 is a placeholder
+ end
+ end
+ local rules = step.rules
+ if rules then
+ local rulehash = { }
+ local rulesize = 0
+ local coverage = { }
+ local lookuptype = sequence.type
+ step.coverage = coverage -- combined hits
+ for nofrules=1,#rules do
+ local rule = rules[nofrules]
+ local current = rule.current
+ local before = rule.before
+ local after = rule.after
+ local replacements = rule.replacements or false
+ local sequence = { }
+ local nofsequences = 0
+ if before then
+ for n=1,#before do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = before[n]
+ end
+ end
+ local start = nofsequences + 1
+ for n=1,#current do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = current[n]
+ end
+ local stop = nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences = nofsequences + 1
+ sequence[nofsequences] = after[n]
+ end
+ end
+ local lookups = rule.lookups or false
+ local subtype = nil
+ if lookups then
+ for k, v in next, lookups do
+ local lookup = sublookups[v]
+ if lookup then
+ lookups[k] = lookup
+ if not subtype then
+ subtype = lookup.type
+ end
+ else
+ -- already expanded
+ end
+ end
+ end
+ if sequence[1] then -- we merge coverage into one
+ rulesize = rulesize + 1
+ rulehash[rulesize] = {
+ nofrules, -- 1
+ lookuptype, -- 2
+ sequence, -- 3
+ start, -- 4
+ stop, -- 5
+ lookups, -- 6 (6/7 also signal of what to do)
+ replacements, -- 7
+ subtype, -- 8
+ }
+ for unic in next, sequence[start] do
+ local cu = coverage[unic]
+ if not cu then
+ coverage[unic] = rulehash -- can now be done cleaner i think
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ expandlookups(sequences)
+ expandlookups(sublookups)
+end
diff --git a/Master/texmf-dist/tex/context/base/font-pat.lua b/Master/texmf-dist/tex/context/base/mkiv/font-pat.lua
index 04985379677..357b12ea0a0 100644
--- a/Master/texmf-dist/tex/context/base/font-pat.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-pat.lua
@@ -11,29 +11,12 @@ if not modules then modules = { } end modules ['font-pat'] = {
local match, lower = string.match, string.lower
--- Older versions of latin modern didn't have the designsize set so for them we
--- get it from the name reporter moved to elsewhere.
-
local fonts = fonts
local otf = fonts.handlers.otf
local patches = otf.enhancers.patches
local register = patches.register
local report = patches.report
--- local function patch(data,filename)
--- if not metadata.design_size or metadata.design_size == 0 then
--- local ds = match(file.basename(lower(filename)),"(%d+)")
--- if ds then
--- report("font %a has design size %a",filename,ds)
--- metadata.design_size = tonumber(ds) * 10
--- end
--- end
--- end
---
--- register("after","migrate metadata","^lmroman", patch)
--- register("after","migrate metadata","^lmsans", patch)
--- register("after","migrate metadata","^lmtypewriter",patch)
-
-- For some reason (either it's a bug in the font, or it's a problem in the
-- library) the palatino arabic fonts don't have the mkmk features properly
-- set up.
diff --git a/Master/texmf-dist/tex/context/base/font-pre.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-pre.mkiv
index 157b4585a3f..3b3a76d9c0e 100644
--- a/Master/texmf-dist/tex/context/base/font-pre.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-pre.mkiv
@@ -25,6 +25,8 @@
[always]
[mode=node, % we had 'auto', but let's try 'node' for a while and see what the impact is
script=auto, % on speed; 'base' just doesn't play well with dynamics; some day we can even
+ autoscript=position,
+ autolanguage=position,
kern=yes, % consider skipping the base passes when no base mode is used
mark=yes,
mkmk=yes,
@@ -54,18 +56,22 @@
\definefontfeature
[inlinenumbers]
- [lnum=yes,
+ [pnum=yes,
tnum=no]
\definefontfeature
[tabularnumbers]
[tnum=yes,
- lnum=no]
+ pnum=no]
\definefontfeature
[oldstylenumbers]
[onum=yes]
+\definefontfeature
+ [zero]
+ [zero=yes]
+
% \definefontfeature
% [newstyle]
% [onum=no]
@@ -102,6 +108,7 @@
\definefontfeature
[semitic-complete]
[mode=node,analyze=yes,language=dflt,ccmp=yes,
+ autoscript=position,autolanguage=position,
init=yes,medi=yes,fina=yes,isol=yes,
mark=yes,mkmk=yes,kern=yes,curs=yes,
liga=yes,dlig=yes,rlig=yes,clig=yes,calt=yes]
@@ -109,6 +116,7 @@
\definefontfeature
[semitic-simple]
[mode=node,analyze=yes,language=dflt,ccmp=yes,
+ autoscript=position,autolanguage=position,
init=yes,medi=yes,fina=yes,isol=yes,
mark=yes,mkmk=yes,kern=yes,curs=yes,
rlig=yes,calt=yes]
@@ -237,9 +245,8 @@
tlig=yes,
trep=yes,
mathalternates=yes,
- mathitalics=yes,
+ mathitalics=yes, % we pass them
% mathgaps=yes,
- % nomathitalics=yes, % don't pass to tex, might become default
language=dflt,
script=math]
@@ -248,11 +255,18 @@
[mathematics]
[]
+% \definefontfeature
+% [mathematics-r2l]
+% [mathematics]
+% [language=ara,
+% rtlm=yes,
+% locl=yes]
+
\definefontfeature
[mathematics-r2l]
[mathematics]
- [language=ara,
- rtlm=yes,
+ [rtlm=yes,
+ %dtls=yes,
locl=yes]
\definefontfeature[virtualmath] [mathematics] % downward compatibility
@@ -378,7 +392,7 @@
\s!b=1.440,
\s!c=1.728,
\s!d=2.074,
- *=\currentfontscale, % wildcard
+ *=\font_currentfontscale, % wildcard
\s!x=0.8,
\s!xx=0.6,
\v!big=1.2,
@@ -527,6 +541,7 @@
\definefontstyle [\v!teletype,\v!type,\v!mono] [\s!tt]
\definefontstyle [\v!handwritten] [\s!hw]
\definefontstyle [\v!calligraphic] [\s!cg]
+\definefontstyle [\v!math,\v!mathematics] [\s!mm]
\definefontalternative[\s!tf]
\definefontalternative[\s!bf]
@@ -544,7 +559,6 @@
\definealternativestyle [\v!bold] [\bf] []
\definealternativestyle [\v!type] [\tt] []
\definealternativestyle [\v!mono] [\tt] []
-\definealternativestyle [\v!monobold] [\tt\bf] []
\definealternativestyle [\v!slanted] [\sl] []
\definealternativestyle [\v!italic] [\it] []
\definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] []
@@ -553,7 +567,7 @@
\definealternativestyle [\v!small,\v!smallnormal] [\setsmallbodyfont\tf] []
\definealternativestyle [\v!smallbold] [\setsmallbodyfont\bf] []
\definealternativestyle [\v!smalltype] [\setsmallbodyfont\tt] []
-\definealternativestyle [\v!smallslanted] [\setsmallbodyfont\sl] []
+\definealternativestyle [\v!smallitalic,\v!smallslanted] [\setsmallbodyfont\sl] []
\definealternativestyle [\v!smallboldslanted,\v!smallslantedbold] [\setsmallbodyfont\bs] []
\definealternativestyle [\v!smallbolditalic,\v!smallitalicbold] [\setsmallbodyfont\bi] []
@@ -572,6 +586,13 @@
\definealternativestyle [\v!mononormal] [\tt\tf] []
\definealternativestyle [\v!monobold] [\tt\bf] []
+% For Alan:
+
+\definealternativestyle
+ [\v!camel]
+ [{\setcharactercasing[\v!camel]}]
+ [{\setcharactercasing[\v!camel]}]
+
% % maybe we need interface neutral as well (for use in cld):
%
% \letcscsname\mediaeval \csname\v!mediaeval \endcsname
@@ -665,9 +686,11 @@
%D don't want huge switches to the main bodyfont and style, so
%D here too we use a direct method.
-\let\infofont\relax % satisfy dep checker
+\let\infofont \relax % satisfy dep checker
+\let\infofontbold\relax % satisfy dep checker
-\definefont[infofont][dejavusansmono at 6pt] % todo \the\everybodyfont
+\definefont[infofont] [dejavusansmono at 6pt] % todo \the\everybodyfont
+\definefont[infofontbold][dejavusansmonobold at 6pt] % todo \the\everybodyfont
%D Optimization (later we overload in math):
diff --git a/Master/texmf-dist/tex/context/base/font-run.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-run.mkiv
index 1b8843b94c5..e9a6f9ddb7b 100644
--- a/Master/texmf-dist/tex/context/base/font-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-run.mkiv
@@ -13,14 +13,14 @@
%C details.
%D [This code is hooked into the core macros and saves some format
-%D space. It needs a cleanup.]
+%D space. It needs a cleanup as it's real old derioved \MKII\ code]
\unprotect
-\gdef\@@onlyenglish#1%
+\gdef\font_show_only_english#1%
{\blank{\tttf \type {#1} is only available in the english interface}\blank}
-\gdef\dosetshowfonttitle#1%
+\gdef\font_show_title#1%
{\tabskip\zeropoint
\parindent\zeropoint
\setlocalhsize
@@ -32,12 +32,12 @@
{\edef\title{[\fontclass]\space\title}}}}
\unexpanded\gdef\showbodyfont
- {\dosingleempty\doshowbodyfont}
+ {\dosingleempty\font_show_bodyfont}
-\gdef\doshowbodyfont[#1]%
+\gdef\font_show_bodyfont[#1]%
{\ifinsidefloat\else\startbaselinecorrection\fi
\vbox
- {\dosetshowfonttitle{#1}%
+ {\font_show_title{#1}%
\def\bigstrut##1##2%
{\hbox{\vrule
\s!height##1\strutht
@@ -61,7 +61,7 @@
\tabskip=\zeropoint\cr
\noalign{\hrule}
&\multispan{29}{\vrule\hfil\tttf\strut\title\hfil
- \llap{\string\mr\hbox to 1em{\hss:\hss}$\mr \languageparameter\c!text$\quad}\vrule}\cr
+ \llap{\string\mr\hpack to \emwidth{\hss:\hss}\normalstartimath\mr\languageparameter\c!text\normalstopimath\quad}\vrule}\cr
\noalign{\hrule}\next{}{\tt\string}{}
\noalign{\hrule}\next{\tt\string\rm}\rm{\languageparameter\c!text}
\noalign{\hrule}\next{\tt\string\ss}\ss{\languageparameter\c!text}
@@ -70,12 +70,12 @@
\ifinsidefloat\else\stopbaselinecorrection\fi}
\unexpanded\gdef\showbodyfontenvironment
- {\dosingleempty\doshowbodyfontenvironment}
+ {\dosingleempty\font_show_bodyfont_environment}
-\gdef\doshowbodyfontenvironment[#1]%
+\gdef\font_show_bodyfont_environment[#1]%
{\ifinsidefloat\else\startbaselinecorrection\fi
\vbox
- {\dosetshowfonttitle{#1}%
+ {\font_show_title{#1}%
\def\next##1%
{&&\bodyfontsizevariable{##1}\s!text
&&\bodyfontsizevariable{##1}\s!script
@@ -105,133 +105,151 @@
\ifinsidefloat\else\stopbaselinecorrection\fi}
\unexpanded\gdef\showfont
- {\dodoubleempty\doshowfont}
+ {\dodoubleempty\font_show_font}
-\gdef\doshowfont[#1][#2]%
+\gdef\font_show_font[#1][#2]% doing this in lua is much faster
{\bgroup
\iffirstargument
\definefont[\s!dummy][#1]\dummy
\fi
\doifelsenothing{#2}
- {\dodoshowfont{#1}{0}}
+ {\font_show_font_indeed{#1}\zerocount}
{\doifelse{#2}\v!all
- {\dostepwiserecurse{0}{255}{1}
- {\donefalse
- \let\charplane\recurselevel
- \dostepwiserecurse{0}{255}{1}
- {\iffontchar\font\numexpr\charplane*256+\recurselevel\relax
- \donetrue
+ {\dostepwiserecurse\zerocount{255}\plusone
+ {\scratchcounterone \recurselevel
+ \scratchcountertwo \numexpr\scratchcounterone*256\relax
+ \scratchcounterthree\numexpr\scratchcountertwo+255\relax
+ \doloop
+ {\iffontchar\font\scratchcountertwo
+ \font_show_font_indeed{#1}\scratchcounterone
\exitloop
- \fi}%
- \ifdone
- \dodoshowfont{#1}\charplane
- \fi}}
- {\processcommalist[#2]{\dodoshowfont{#1}}}}%
+ \else\ifnum\scratchcountertwo=\scratchcounterthree
+ \exitloop
+ \else
+ \advance\scratchcountertwo\plusone
+ \fi\fi}}}
+ {\processcommalist[#2]{\font_show_font_indeed{#1}}}}%
\egroup}
-\gdef\dodoshowfont#1#2%
+\gdef\font_show_font_indeed#1#2% made some 50% faster but still slow
{\bgroup
- \edef\charplane{\number#2}%
\iffirstargument
-% \definefont[\s!dummy][#1]\dummy
- \else\ifdim2.5em>.05\hsize \tx
- \ifdim2.5em>.05\hsize \txx
+ % \definefont[\s!dummy][#1]\dummy
+ \else\ifdim2.5\emwidth>.05\hsize \tx
+ \ifdim2.5\emwidth>.05\hsize \txx
\fi\fi\fi
\ifinsidefloat\else\startbaselinecorrection\fi
\vbox\bgroup
+ \scratchdimenone 2.5\emwidth
+ \scratchdimentwo 2.4\emwidth
+ \scratchdimenthree2.3\emwidth
+ \edef\charplane{\number#2}%
\forgetall
\startoverlay % easier in cld
{\vbox
- {\tf \setstrut \dummy
+ {\tf
+ \setstrut
+ \dummy
\offinterlineskip
- \dostepwiserecurse{0}{15}{1}
- {\let\row\recurselevel
- \hbox
- {\red
- \dostepwiserecurse{0}{15}{1}
- {\let\col\recurselevel
- \@EA\scratchcounter\string"\hexnumber\row\hexnumber\col\relax
- \edef\rowcol{\the\scratchcounter}%
- \iffontchar\font\scratchcounter
- \setbox\scratchbox\ruledhbox{\black\char\numexpr\charplane*256+\scratchcounter\relax}%
- \ifdim\wd\scratchbox>\zeropoint
- \donetrue \else \donefalse
- \fi
+ \unexpanded\def\wrapbox##1%
+ {\vpack to \scratchdimenone
+ {\vss
+ \hpack to \scratchdimenone
+ {\dummy
+ \ifdim\interwordspace=\zeropoint
+ \setbox##1\hpack
+ {\raise.5\dp##1\hpack
+ {\lower.5\ht##1\copy##1}}%
+ \ht##1\zeropoint
+ \dp##1\zeropoint
\else
- \setbox\scratchbox\hbox{\gray\vrule\s!width1ex\s!height.5ex\s!depth.5ex}%
+ \ht##1\strutht
+ \dp##1\strutdp
+ \strut
\fi
- \startoverlay
- {\tf\vbox to 2.5em
- {\vss
- \hbox to 2.5em
- {\dummy\ifdim\interwordspace=\zeropoint
- \setbox\scratchbox\hbox
- {\raise.5\dp\scratchbox\hbox
- {\lower.5\ht\scratchbox\copy\scratchbox}}%
- \ht\scratchbox\zeropoint
- \dp\scratchbox\zeropoint
- \else
- \ht\scratchbox\strutht
- \dp\scratchbox\strutdp
- \strut
- \fi
- \hss\copy\scratchbox\hss}
- \vss}}
- {\tf\vbox to 2.3em
- {\ifdone
- \hsize2.4em
- \blue
- \tinyfont
- \hfill\number\rowcol
- \vfill
- \octnumber\rowcol\hfill\lchexnumbers\rowcol
- \par
- \fi}}
- \stopoverlay}}}
+ \hss\copy##1\hss}
+ \vss}}%
+ \unexpanded\def\textbox##1%
+ {\vpack to \scratchdimentwo
+ {\hsize\scratchdimenthree
+ ##1%
+ \par}}%
+ \unexpanded\def\scratchnum
+ {\blue
+ \tinyfont
+ \hfill
+ \number\scratchcounter
+ \vfill
+ \octnumber\scratchcounter
+ \hfill
+ \lchexnumbers\scratchcounter}%
+ \setbox\scratchboxone\hpack{\tf\textbox{}}%
+ \setbox\scratchboxtwo\hpack{\tf\gray\vrule\s!width\exheight\s!height.5\exheight\s!depth.5\exheight}%
+ \setbox\scratchboxtwo\wrapbox\scratchboxtwo
+ \setbox\scratchboxthree\hpack
+ {\startoverlay
+ {\box\scratchboxtwo}
+ {\box\scratchboxone}
+ \stopoverlay}%
+ \dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcounterone\recurselevel
+ \hpack
+ {\dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcountertwo \recurselevel
+ \scratchcounter \numexpr\scratchcounterone*16+\scratchcountertwo\relax
+ \scratchcounterthree\numexpr\charplane*256+\scratchcounter\relax
+ \iffontchar\font\scratchcounterthree
+ \setbox\scratchbox\ruledhpack{\char\scratchcounterthree}%
+ \tf
+ \startoverlay
+ {\wrapbox\scratchbox}
+ {\textbox\scratchnum}
+ \stopoverlay
+ \else
+ \copy\scratchboxthree
+ \fi}}}%
\par}}
{\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]}
\stopoverlay
\nointerlineskip
- \vskip2pt
+ \vskip2\points
% the \noexpand before \blank is needed for non etex
- \edef\ascii{name: {\noexpand\black\fontname\font}}
- \def\do##1##2{\ifx##1\undefined\else\ifx##1\empty\else##2\fi\fi}%
\edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \charplane\enspace"\hexnumber\charplane}%
\tf % also sets em
- \hbox to 40em{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
+ \hbox to 40\emwidth{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
\egroup
\ifinsidefloat\else\stopbaselinecorrection\fi
\egroup}
% \showfontstyle[modern][rm][tf][all] % #2, #3 and #4 can be 'all'
-\unexpanded\gdef\showfontstyle {\dodoubleempty \dodoshowfontstyle}
-\unexpanded\gdef\redoshowfontstyle {\dotripleempty \dododoshowfontstyle}
-\unexpanded\gdef\redodoshowfontstyle{\doquadrupleempty\dodododoshowfontstyle}
+\unexpanded\gdef\showfontstyle {\dodoubleempty \font_show_style}
+\unexpanded\gdef\font_show_style_a{\dotripleempty \font_show_style_b}
+\unexpanded\gdef\font_show_style_c{\doquadrupleempty\font_show_style_d}
% no lists any more, so no 'all' any longer
-\gdef\dodoshowfontstyle[#1][#2]%
+\gdef\font_show_style[#1][#2]%
{\doifelsenothing{#2}
- {\redoshowfontstyle[#1][\s!rm,\s!ss,\s!tt,\s!mm]}
- {\redoshowfontstyle[#1][#2]}}
+ {\font_show_style_a[#1][\s!rm,\s!ss,\s!tt,\s!mm]}
+ {\font_show_style_a[#1][#2]}}
-\gdef\dododoshowfontstyle[#1][#2][#3]%
+\gdef\font_show_style_b[#1][#2][#3]%
{\doifelsenothing{#3}
- {\redodoshowfontstyle[#1][#2][\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi]}
- {\redodoshowfontstyle[#1][#2][#3]}}
+ {\font_show_style_c[#1][#2][\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi]}
+ {\font_show_style_c[#1][#2][#3]}}
-\gdef\dodododoshowfontstyle[#1][#2][#3][#4]%
- {\doshowfontstyleindeed[#1][#2][#3][#4]}
+\gdef\font_show_style_d[#1][#2][#3][#4]%
+ {\font_show_style_e[#1][#2][#3][#4]}
% so far
-\gdef\doshowfontstyleindeed[#1][#2][#3][#4]%
+\gdef\font_show_style_e[#1][#2][#3][#4]%
{\bgroup
\raggedright
\switchtobodyfont[#1]
\def\dododocommand##1%
- {\dostepwiserecurse{0}{255}{1}
+ {\dostepwiserecurse\zerocount{255}\plusone
{\scratchcounter\numexpr##1*256+\recurselevel\relax
\iffontchar\font\scratchcounter\relax
\char\scratchcounter
@@ -241,9 +259,9 @@
{\starttextrule{\tttf #1 ##1 ##2}
\nobreak\getvalue{##2}%
\doifelsenothing{#4}
- {\dododocommand{0}}
+ {\dododocommand\zerocount}
{\doifelse{#4}\v!all
- {\dostepwiserecurse{0}{255}{1}{\expanded{\dododocommand{\recurselevel}}}}
+ {\dostepwiserecurse\zerocount{255}\plusone{\expanded{\dododocommand{\recurselevel}}}}
{\processcommalist[#4]{\dododocommand}}}%
\par \nobreak
\stoptextrule}
@@ -256,89 +274,105 @@
\unexpanded\gdef\showligature#1%
{\hbox{\type{#1}\enspace\red\ruledhbox{\black#1}}}
-\unexpanded\gdef\showligatures[#1]%
+\unexpanded\gdef\showligatures[#1]% we keep it around for compatibility reasons
{\ifx\starttabulate\undefined
- \@@onlyenglish\showligatures
+ \font_show_only_english\showligatures
\else
\bgroup
- \def\show##1{\hbox{\red\ruledhbox{\black##1}}}%
- \definefont[\s!dummy][#1]\dummy
- \starttabulate[|*{9}{c|}]
- \NC\type{ff}\NC\type{fi}\NC\type{fl}\NC\type{ffi}\NC\type{ffl}\NC
- \type{``}\NC\type{''}\NC\type{--}\NC\type{---}\NC\NR
- \NC\show{ff}\NC\show{fi}\NC\show{fl}\NC\show{ffi}\NC\show{ffl}\NC
- \show{``}\NC\show{''}\NC\show{--}\NC\show{---}\NC\NR
+ \def\font_show_ligature##1{\hbox{\red\ruledhbox{\black##1}}}%
+ \definedfont[#1*default]%
+ %starttabulate[|*{9}{c|}]
+ \starttabulate[|*{7}{c|}]
+ \NC\type{ff}
+ \NC\type{fi}
+ \NC\type{fl}
+ \NC\type{ffi}
+ \NC\type{ffl}
+ %NC\type{``}
+ %NC\type{''}
+ \NC\type{--}
+ \NC\type{---}
+ \NC\NR
+ \NC\font_show_ligature{ff}
+ \NC\font_show_ligature{fi}
+ \NC\font_show_ligature{fl}
+ \NC\font_show_ligature{ffi}
+ \NC\font_show_ligature{ffl}
+ %NC\font_show_ligature{``}
+ %NC\font_show_ligature{''}
+ \NC\font_show_ligature{--}
+ \NC\font_show_ligature{---}
+ \NC\NR
\stoptabulate
\egroup
\fi}
\unexpanded\gdef\showfontstrip
- {\dosingleempty\doshowfontstrip}
+ {\dosingleempty\font_show_strip}
-\gdef\doshowfontstrip[#1]%
+\gdef\font_show_strip[#1]%
{\ifx\starttabulate\undefined
- \@@onlyenglish\showfontstrip
+ \font_show_only_english\showfontstrip
\else
\bgroup
- \def\dofontstripa##1##2%
+ \def\font_show_strip_a##1##2%
{\tttf\string##1}
- \def\dofontstripb##1##2%
+ \def\font_show_strip_b##1##2%
{\ruledhbox{\switchtobodyfont[#1]##1{##2}}}
- \def\dofontstripc##1##2%
+ \def\font_show_strip_c##1##2%
{\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
\tt\tfx\the\ht\scratchbox}%
- \def\dofontstripd##1##2%
+ \def\font_show_strip_d##1##2%
{\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
\tt\tfx\the\wd\scratchbox}%
- \def\fontstrip##1##2##3%
+ \def\font_show_strip_indeed##1##2##3%
{\NC##2\rm{##3}\NC
##2\ss{##3}\NC
##2\tt{##3}\NC
##2\mathematics{##3}\NC
\tttf##1\NR}
\starttabulate[|c|c|c|c|c|]
- \fontstrip\relax\dofontstripa\empty
+ \font_show_strip_indeed\relax\font_show_strip_a\empty
\TB
- \fontstrip\relax\dofontstripb{xxxx}
- \fontstrip\relax\dofontstripb{12345}
- \fontstrip\relax\dofontstripb{(Agw)}
+ \font_show_strip_indeed\relax\font_show_strip_b{xxxx}
+ \font_show_strip_indeed\relax\font_show_strip_b{12345}
+ \font_show_strip_indeed\relax\font_show_strip_b{(Agw)}
\TB
- \fontstrip{(x height)}\dofontstripc{x}
- \fontstrip{(m width)}\dofontstripd{m}
+ \font_show_strip_indeed{(x height)}\font_show_strip_c{x}
+ \font_show_strip_indeed{(m width)}\font_show_strip_d{m}
\stoptabulate
\egroup
\fi}
\ifdefined\databox \else \newbox\databox \fi
-\unexpanded\gdef\testminimalbaseline#1% to be used in a tabulate
+\unexpanded\gdef\testminimalbaseline#1% to be used in a 10 column tabulate
{\setbox\databox\ruledhbox{#1}%
- \scratchdimen\ht\databox
- \advance\scratchdimen\dp\databox
- \scratchtoks{#1}%
- \expanded
- {\NC \ruledhbox{\the\scratchtoks}
- \noexpand \NC ->
- \noexpand \NC \the\scratchdimen
- \noexpand \NC =
- \noexpand \NC \the\ht\databox
- \noexpand \NC +
- \noexpand \NC \the\dp\databox
- \noexpand \NC \ifdim\scratchdimen<\baselineskip <
- \else\ifdim\scratchdimen=\baselineskip =
- \else > \fi\fi
- \noexpand \NC \the\baselineskip
- \noexpand \NC (\ifdim\scratchdimen>\baselineskip not \fi ok)
- \noexpand \NC \noexpand \NR }}
+ \scratchdimen\htdp\databox
+ \normalexpanded {
+ \NC \ruledhbox{#1}%
+ \NC ->
+ \NC \the\htdp\databox
+ \NC =
+ \NC \the\ht\databox
+ \NC +
+ \NC \the\dp\databox
+ \NC \ifdim\scratchdimen<\baselineskip <
+ \else\ifdim\scratchdimen=\baselineskip =
+ \else > \fi\fi
+ \NC \the\baselineskip
+ \NC (\ifdim\scratchdimen>\baselineskip not \fi ok)
+ \NC \NR}
+ }
\unexpanded\gdef\showminimalbaseline
{\ifx\starttabulate\undefined
- \@@onlyenglish\showminimalbaseline
+ \font_show_only_english\showminimalbaseline
\else
- \starttabulate[||T|T|T|T|T|T|T|T|T|]
- \testminimalbaseline{\hbox to 1em{\hss\showstruts\strut\hss}}%
- \testminimalbaseline{(/)}%
- \testminimalbaseline{$\frac{1}{2}x\normalsuperscript2\normalsubscript3$}
+ \starttabulate[|l|T|T|T|T|T|T|T|T|T|]
+ \testminimalbaseline{\hbox to \emwidth{\hss\showstruts\strut\hss}}%
+ \testminimalbaseline{(/)}%
+ \testminimalbaseline{\normalstartimath\frac{1}{2}x\normalsuperscript2\normalsubscript3\normalstopimath}
\stoptabulate
\fi}
diff --git a/Master/texmf-dist/tex/context/base/font-sel.lua b/Master/texmf-dist/tex/context/base/mkiv/font-sel.lua
index c3431a213ca..c3431a213ca 100644
--- a/Master/texmf-dist/tex/context/base/font-sel.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sel.lua
diff --git a/Master/texmf-dist/tex/context/base/font-sel.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-sel.mkvi
index 820d211eb69..eb45ea03386 100644
--- a/Master/texmf-dist/tex/context/base/font-sel.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sel.mkvi
@@ -108,7 +108,7 @@
\def\selectfont_preset_process#name%
{\ifcsname\??selectfontpreset#name\endcsname
- \csname\??selectfontpreset#name\endcsname
+ \lastnamedcs
\else
% unknown preset
\fi}
diff --git a/Master/texmf-dist/tex/context/base/font-set.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-set.mkvi
index b29545ace3f..b29545ace3f 100644
--- a/Master/texmf-dist/tex/context/base/font-set.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-set.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-sol.lua b/Master/texmf-dist/tex/context/base/mkiv/font-sol.lua
index 0761724f1f2..8d45552a5e9 100644
--- a/Master/texmf-dist/tex/context/base/font-sol.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sol.lua
@@ -57,17 +57,20 @@ local tonut = nuts.tonut
local tonode = nuts.tonode
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getattr = nuts.getattr
-local setattr = nuts.setattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
local getlist = nuts.getlist
+local setfield = nuts.setfield
+local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setlist = nuts.setlist
+
local find_node_tail = nuts.tail
local free_node = nuts.free
local free_nodelist = nuts.flush_list
@@ -95,12 +98,13 @@ local glyph_code = nodecodes.glyph
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 whatsit_code = nodecodes.whatsit
local fontkern_code = kerncodes.fontkern
-local localpar_code = whatsitcodes.localpar
-local dir_code = whatsitcodes.dir
local userdefined_code = whatsitcodes.userdefined
local nodepool = nuts.pool
@@ -366,8 +370,7 @@ function splitters.split(head)
end
if rlmode == "TRT" or rlmode == "+TRT" then
local dirnode = new_textdir("+TRT")
- setfield(list,"prev",dirnode)
- setfield(dirnode,"next",list)
+ setlink(dirnode,list)
list = dirnode
end
local c = {
@@ -414,14 +417,11 @@ function splitters.split(head)
else
start, stop = nil, nil
end
- elseif id == whatsit_code then
+ elseif id == dir_code or id == localpar_code then
if start then
flush()
end
- local subtype = getsubtype(current)
- if subtype == dir_code or subtype == localpar_code then
- rlmode = getfield(current,"dir")
- end
+ rlmode = getfield(current,"dir")
else
if start then
flush()
@@ -614,11 +614,9 @@ first = tonut(first)
-- replace [u]h->t by [u]first->last
local prev = getprev(h)
local next = getnext(t)
- setfield(prev,"next",first)
- setfield(first,"prev",prev)
+ setlink(prev,first)
if next then
- setfield(last,"next",next)
- setfield(next,"prev",last)
+ setlink(last,next)
end
-- check new pack
local temp, b = repack_hlist(list,width,'exactly',listdir)
@@ -627,22 +625,20 @@ first = tonut(first)
report_optimizers("line %a, badness before %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"quit")
end
-- remove last insert
- setfield(prev,"next",h)
- setfield(h,"prev",prev)
+ setlink(prev,h)
if next then
- setfield(t,"next",next)
- setfield(next,"prev",t)
+ setlink(t,next)
else
- setfield(t,"next",nil)
+ setnext(t)
end
- setfield(last,"next",nil)
+ setnext(last)
free_nodelist(first)
else
if trace_optimize then
report_optimizers("line %a, badness before: %a, after %a, criterium %a, verdict %a",line,badness,b,criterium,"continue")
end
-- free old h->t
- setfield(t,"next",nil)
+ setnext(t)
free_nodelist(h) -- somhow fails
if not encapsulate then
word[2] = first
@@ -763,7 +759,7 @@ function splitters.optimize(head)
-- nasty .. we always assume a prev being there .. future luatex will always have a leftskip set
-- is this assignment ok ? .. needs checking
list = insert_node_before(list,list,new_leftskip(0)) -- new_glue(0)
- setfield(current,"list",list)
+ setlist(current,list)
end
local temp, badness = repack_hlist(list,width,'exactly',dir) -- it would be nice if the badness was stored in the node
if badness > 0 then
@@ -823,7 +819,7 @@ function splitters.optimize(head)
local words = collect_words(list)
for best=lastbest or 1,max do
local temp, done, changes, b = optimize(words,list,best,width,badness,line,set,dir)
- setfield(current,"list",temp)
+ setlist(current,temp)
if trace_optimize then
report_optimizers("line %a, alternative %a, changes %a, badness %a",line,best,changes,b)
end
@@ -842,7 +838,7 @@ function splitters.optimize(head)
end
-- we pack inside the outer hpack and that way keep the original wd/ht/dp as bonus
local list = hpack_nodes(getlist(current),width,'exactly',listdir)
- setfield(current,"list",list)
+ setlist(current,list)
end
for i=1,nc do
local ci = cache[i]
diff --git a/Master/texmf-dist/tex/context/base/font-sol.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-sol.mkvi
index d065b78ea55..d065b78ea55 100644
--- a/Master/texmf-dist/tex/context/base/font-sol.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sol.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-sty.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-sty.mkvi
index 5924a30338c..6b2c072e5ff 100644
--- a/Master/texmf-dist/tex/context/base/font-sty.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sty.mkvi
@@ -77,7 +77,7 @@
\fi}
\def\applyalternativestyle#name% public
- {\ifcsname\??alternativestyles#name\endcsname\csname\??alternativestyles#name\expandafter\endcsname\fi}
+ {\begincsname\??alternativestyles#name\endcsname}
%D Maybe too geneneric, but probably ok is the following. (Maybe one
%D day we will use a dedicated grouped command for styles.)
@@ -150,9 +150,9 @@
\def\font_helpers_do_convert_font
{\edef\m_current_convert_font_dt{\detokenize\expandafter{\m_current_convert_font}}%
\ifcsname\??alternativestyles\m_current_convert_font_dt\endcsname
- \csname\??alternativestyles\m_current_convert_font_dt\expandafter\endcsname
+ \expandafter\lastnamedcs
\else\ifcsname\m_current_convert_font_dt\endcsname
- \csname\m_current_convert_font_dt\expandafter\endcsname
+ \doubleexpandafter\lastnamedcs
\else
\doubleexpandafter\m_current_convert_font
\fi\fi}
@@ -182,16 +182,16 @@
\unexpanded\def\dousestylehashparameter#hash#parameter%
{\ifcsname#hash#parameter\endcsname
- \expandafter\dousestyleparameter\csname#hash#parameter\endcsname
+ \expandafter\dousestyleparameter\lastnamedcs
\fi}
\unexpanded\def\dousecurrentstyleparameter % empty check outside here
{\edef\detokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}%
\settrue\fontattributeisset % reset is done elsewhere
\ifcsname\??alternativestyles\detokenizedstyleparameter\endcsname
- \csname\??alternativestyles\detokenizedstyleparameter\endcsname
+ \lastnamedcs
\else\ifcsname\detokenizedstyleparameter\endcsname
- \csname\detokenizedstyleparameter\endcsname
+ \lastnamedcs
\else
\currentstyleparameter
\fi\fi}
@@ -337,7 +337,7 @@
{\iffirstargument
\setuvalue{#name}{\styleinstance[#name]}%
\def\font_styles_define_style_collection_a#style%
- {\def\font_styles_define_style_collection_b#alternative{\letbeundefined{\??stylecollection#name:#style:#alternative}}%
+ {\def\font_styles_define_style_collection_b#alternative{\undefinevalue{\??stylecollection#name:#style:#alternative}}%
\font_helpers_process_alternative_list\font_styles_define_style_collection_b
\font_styles_define_style_collection_b\s!default}%
\font_helpers_process_style_list\font_styles_define_style_collection_a
@@ -369,7 +369,7 @@
% {\executeifdefined{\??stylecollection#instance::\fontalternative}
% {\getvalue {\??stylecollection#instance::\s!default}}}}}
-\unexpanded\def\styleinstance[#instance]%
+\unexpanded\def\styleinstance[#instance]% maybe \lastnamedcs here too
{\csname\??stylecollection#instance:%
\ifcsname\??stylecollection#instance:\fontstyle:\fontalternative\endcsname
\fontstyle:\fontalternative
diff --git a/Master/texmf-dist/tex/context/base/font-sym.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-sym.mkvi
index a21bea0ba62..c1ffd6361ae 100644
--- a/Master/texmf-dist/tex/context/base/font-sym.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-sym.mkvi
@@ -135,7 +135,7 @@
\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
- \csname\??symbolfont\askedsymbolfont\endcsname
+ \lastnamedcs
\else
\font_basics_define_symbolic_font
\fi}
@@ -143,7 +143,7 @@
\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
- \csname\??symbolfont\askedsymbolfont\endcsname
+ \lastnamedcs
\else
\font_basics_define_symbolic_font
\fi}
@@ -151,7 +151,7 @@
\def\setstyledsymbolicfont#fontname% quite a slowdown, glyphfontfile
{\edef\askedsymbolfont{\truefontname{\glyphfontfile{#fontname}} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}%
\ifcsname\??symbolfont\askedsymbolfont\endcsname
- \csname\??symbolfont\askedsymbolfont\endcsname
+ \lastnamedcs
\else
\font_basics_define_symbolic_font
\fi}
@@ -159,7 +159,7 @@
\def\setdirectsymbolicfont#fontname%
{\edef\askedsymbolfont{\truefontname{#fontname} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}%
\ifcsname\??symbolfont\askedsymbolfont\endcsname
- \csname\??symbolfont\askedsymbolfont\endcsname
+ \lastnamedcs
\else
\font_basics_define_symbolic_font
\fi}
diff --git a/Master/texmf-dist/tex/context/base/font-syn.lua b/Master/texmf-dist/tex/context/base/mkiv/font-syn.lua
index bf46c85730f..f27995212bb 100644
--- a/Master/texmf-dist/tex/context/base/font-syn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-syn.lua
@@ -7,15 +7,23 @@ if not modules then modules = { } end modules ['font-syn'] = {
}
-- todo: subs in lookups requests
+-- todo: see if the (experimental) lua reader (on my machine) be used (it's a bit slower so maybe wait till lua 5.3)
+
+-- identifying ttf/otf/ttc/afm : 2200 fonts:
+--
+-- old ff loader: 140 sec
+-- new lua loader: 5 sec
local next, tonumber, type, tostring = next, tonumber, type, tostring
-local sub, gsub, lower, match, find, lower, upper = string.sub, string.gsub, string.lower, string.match, string.find, string.lower, string.upper
-local find, gmatch = string.find, string.gmatch
-local concat, sort, format = table.concat, table.sort, string.format
+local sub, gsub, match, find, lower, upper = string.sub, string.gsub, string.match, string.find, string.lower, string.upper
+local concat, sort = table.concat, table.sort
local serialize, sortedhash = table.serialize, table.sortedhash
local lpegmatch = lpeg.match
local unpack = unpack or table.unpack
local formatters, topattern = string.formatters, string.topattern
+local round = math.round
+local P, R, S, C, Cc, Ct, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Ct, lpeg.Cs
+local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
local allocate = utilities.storage.allocate
local sparse = utilities.storage.sparse
@@ -35,18 +43,15 @@ local findfile = resolvers.findfile
local cleanpath = resolvers.cleanpath
local resolveprefix = resolvers.resolve
-local fontloader = fontloader
-local font_to_table = fontloader.to_table
-local open_font = fontloader.open
-local get_font_info = fontloader.info
-local close_font = fontloader.close
-local font_fields = fontloader.fields
+----- fontloader = fontloader -- still needed for pfb (now)
+----- get_font_info = fontloader.info
local settings_to_hash = utilities.parsers.settings_to_hash_tolerant
local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end)
local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end)
local trace_specifications = false trackers.register("fonts.specifications", function(v) trace_specifications = v end)
+local trace_rejections = false trackers.register("fonts.rejections", function(v) trace_rejections = v end)
local report_names = logs.reporter("fonts","names")
@@ -68,7 +73,7 @@ fonts.treatments = treatments
names.data = names.data or allocate { }
-names.version = 1.123
+names.version = 1.131
names.basename = "names"
names.saved = false
names.loaded = false
@@ -86,8 +91,6 @@ directives.register("fonts.usesystemfonts", function(v) usesystemfonts = toboole
<p>A few helpers.</p>
--ldx]]--
-local P, C, Cc, Cs = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Cs
-
-- -- what to do with these -- --
--
-- thin -> thin
@@ -305,119 +308,53 @@ end
but to keep the overview, we define them here.</p>
--ldx]]--
-filters.otf = get_font_info
-filters.ttf = get_font_info
-filters.ttc = get_font_info
-filters.dfont = get_font_info
-
--- We had this as temporary solution because we needed a bit more info but in the
--- meantime it got an interesting side effect: currently luatex delays loading of e.g.
--- glyphs so here we first load and then discard which is a waste. In the past it did
--- free memory because a full load was done. One of these things that goes unnoticed.
---
--- missing: names, units_per_em, design_range_bottom, design_range_top, design_size,
--- pfminfo, top_side_bearing
-
--- local function get_full_info(...) -- check with taco what we get / could get
--- local ff = open_font(...)
--- if ff then
--- local d = ff -- and font_to_table(ff)
--- d.glyphs, d.subfonts, d.gpos, d.gsub, d.lookups = nil, nil, nil, nil, nil
--- close_font(ff)
--- return d
--- else
--- return nil, "error in loading font"
--- end
--- end
-
--- Phillip suggested this faster variant but it's still a hack as fontloader.info should
--- return these keys/values (and maybe some more) but at least we close the loader which
--- might save some memory in the end.
-
--- local function get_full_info(name)
--- local ff = open_font(name)
--- if ff then
--- local fields = table.tohash(font_fields(ff),true) -- isn't that one stable
--- local d = {
--- names = fields.names and ff.names,
--- familyname = fields.familyname and ff.familyname,
--- fullname = fields.fullname and ff.fullname,
--- fontname = fields.fontname and ff.fontname,
--- weight = fields.weight and ff.weight,
--- italicangle = fields.italicangle and ff.italicangle,
--- units_per_em = fields.units_per_em and ff.units_per_em,
--- design_range_bottom = fields.design_range_bottom and ff.design_range_bottom,
--- design_range_top = fields.design_range_top and ff.design_range_top,
--- design_size = fields.design_size and ff.design_size,
--- italicangle = fields.italicangle and ff.italicangle,
--- pfminfo = fields.pfminfo and ff.pfminfo,
--- top_side_bearing = fields.top_side_bearing and ff.top_side_bearing,
--- }
--- setmetatableindex(d,function(t,k)
--- report_names("warning, trying to access field %a in font table of %a",k,name)
--- end)
--- close_font(ff)
--- return d
--- else
--- return nil, "error in loading font"
--- end
--- end
+filters.otf = fonts.handlers.otf.readers.getinfo
+filters.ttf = filters.otf
+filters.ttc = filters.otf
+-------.ttx = filters.otf
--- more efficient:
-
-local fields = nil
-
-local function get_full_info(name)
- local ff = open_font(name)
- if ff then
- if not fields then
- fields = table.tohash(font_fields(ff),true)
- end
- -- unfortunately luatex aborts when a field is not available
- local d = {
- names = fields.names and ff.names,
- familyname = fields.familyname and ff.familyname,
- fullname = fields.fullname and ff.fullname,
- fontname = fields.fontname and ff.fontname,
- weight = fields.weight and ff.weight,
- italicangle = fields.italicangle and ff.italicangle,
- units_per_em = fields.units_per_em and ff.units_per_em,
- design_range_bottom = fields.design_range_bottom and ff.design_range_bottom,
- design_range_top = fields.design_range_top and ff.design_range_top,
- design_size = fields.design_size and ff.design_size,
- italicangle = fields.italicangle and ff.italicangle,
- pfminfo = fields.pfminfo and ff.pfminfo,
- top_side_bearing = fields.top_side_bearing and ff.top_side_bearing, -- not there
- }
- setmetatableindex(d,function(t,k)
- report_names("warning, trying to access field %a in font table of %a",k,name)
- end)
- close_font(ff)
- return d
+local function normalize(t) -- only for afm parsing
+ local boundingbox = t.fontbbox
+ if boundingbox then
+ for i=1,#boundingbox do
+ boundingbox[i] = tonumber(boundingbox[i])
+ end
else
- return nil, "error in loading font"
- end
+ boundingbox = { 0, 0, 0, 0 }
+ end
+ return {
+ copyright = t.copyright,
+ fontname = t.fontname,
+ fullname = t.fullname,
+ familyname = t.familyname,
+ weight = t.weight,
+ widtht = t.width,
+ italicangle = tonumber(t.italicangle) or 0,
+ monospaced = toboolean(t.isfixedpitch) or false,
+ boundingbox = boundingbox,
+ version = t.version, -- not used
+ capheight = tonumber(t.capheight),
+ xheight = tonumber(t.xheight),
+ ascender = tonumber(t.ascender),
+ descender = tonumber(t.descender),
+ }
end
--- As we have lazy loading anyway, this one still is full and with less code than
--- the previous one. But this depends on the garbage collector to kick in and in the
--- current version that somehow happens not that often (on my machine I end up with
--- soem 3 GB extra before that happens).
+local p_spaces = lpegpatterns.whitespace
+local p_number = (R("09")+S(".-+"))^1 / tonumber
+local p_boolean = P("false") * Cc(false)
+ + P("false") * Cc(false)
+local p_string = P("(") * C((lpegpatterns.nestedparents + 1 - P(")"))^1) * P(")")
+local p_array = P("[") * Ct((p_number + p_boolean + p_string + p_spaces^1)^1) * P("]")
+ + P("{") * Ct((p_number + p_boolean + p_string + p_spaces^1)^1) * P("}")
--- local function get_full_info(...)
--- local ff = open_font(...)
--- if ff then
--- local d = { } -- ff is userdata so [1] or # fails on it
--- setmetatableindex(d,ff)
--- return d -- garbage collection will do the close_font(ff)
--- else
--- return nil, "error in loading font"
--- end
--- end
+local p_key = P("/") * C(R("AZ","az")^1)
+local p_value = p_string
+ + p_number
+ + p_boolean
+ + p_array
-fontloader.fullinfo = get_full_info
-filters .otf = get_full_info
-filters .ttf = get_full_info
+local p_entry = p_key * p_spaces^0 * p_value
function filters.afm(name)
-- we could parse the afm file as well, and then report an error but
@@ -430,24 +367,46 @@ function filters.afm(name)
local f = io.open(name)
if f then
local hash = { }
- for line in f:lines() do -- slow
- local key, value = match(line,"^(.+)%s+(.+)%s*$")
- if key and #key > 0 then
- hash[lower(key)] = value
- end
+ local okay = false
+ for line in f:lines() do -- slow but only a few lines at the beginning
if find(line,"StartCharMetrics",1,true) then
break
+ else
+ local key, value = match(line,"^(.+)%s+(.+)%s*$")
+ if key and #key > 0 then
+ hash[lower(key)] = value
+ end
end
end
f:close()
- return hash
+ return normalize(hash)
end
end
return nil, "no matching pfb file"
end
function filters.pfb(name)
- return get_font_info(name)
+ local f = io.open(name)
+ if f then
+ local hash = { }
+ local okay = false
+ for line in f:lines() do -- slow but only a few lines at the beginning
+ if find(line,"dict begin") then
+ okay = true
+ elseif not okay then
+ -- go on
+ elseif find(line,"currentdict end") then
+ break
+ else
+ local key, value = lpegmatch(p_entry,line)
+ if key and value then
+ hash[lower(key)] = value
+ end
+ end
+ end
+ f:close()
+ return normalize(hash)
+ end
end
--[[ldx--
@@ -457,10 +416,11 @@ for combination with the weight of a font.</p>
--ldx]]--
filters.list = {
- "otf", "ttf", "ttc", "dfont", "afm",
- -- "ttc", "otf", "ttf", "dfont", "afm",
+ "otf", "ttf", "ttc", "afm", -- no longer dfont support (for now)
}
+-- to be considered: loop over paths per list entry (so first all otf ttf etc)
+
names.fontconfigfile = "fonts.conf" -- a bit weird format, bonus feature
names.osfontdirvariable = "OSFONTDIR" -- the official way, in minimals etc
@@ -532,6 +492,7 @@ function names.getpaths(trace)
end
end
end
+ sort(result)
function names.getpaths()
return result
end
@@ -554,20 +515,25 @@ local function cleanfilename(fullname,defaultsuffix)
end
end
+local sorter = function(a,b)
+ return a > b -- to be checked
+end
+
names.cleanname = cleanname
names.cleanfilename = cleanfilename
-local function check_names(result)
- local names = result.names
- if names then
- for i=1,#names do
- local name = names[i]
- if name.lang == "English (US)" then
- return name.names
- end
- end
- end
-end
+-- local function check_names(result)
+-- local names = result.names
+-- if names then
+-- for i=1,#names do
+-- local name = names[i]
+-- if name.lang == "English (US)" then
+-- return name.names
+-- end
+-- end
+-- end
+-- return result
+-- end
local function walk_tree(pathlist,suffix,identify)
if pathlist then
@@ -590,35 +556,39 @@ end
local function check_name(data,result,filename,modification,suffix,subfont)
-- shortcuts
local specifications = data.specifications
- -- prepare
- local names = check_names(result)
-- fetch
- local familyname = names and names.preffamilyname or result.familyname
- local fullname = names and names.fullname or result.fullname
- local fontname = result.fontname
- local subfamily = names and names.subfamily
- local modifiers = names and names.prefmodifiers
- local weight = names and names.weight or result.weight
- local italicangle = tonumber(result.italicangle)
- local subfont = subfont or nil
- local rawname = fullname or fontname or familyname
- local filebase = removesuffix(basename(filename))
- local cleanfilename = cleanname(filebase) -- for WS
+ local fullname = result.fullname
+ local fontname = result.fontname
+ local family = result.family
+ local subfamily = result.subfamily
+ local familyname = result.familyname
+ local subfamilyname = result.subfamilyname
+ -- local compatiblename = result.compatiblename
+ local weight = result.weight
+ local italicangle = tonumber(result.italicangle)
+ local subfont = subfont
+ local rawname = fullname or fontname or familyname
+ local filebase = removesuffix(basename(filename))
+ local cleanfilename = cleanname(filebase) -- for WS
-- normalize
- familyname = familyname and cleanname(familyname)
- fullname = fullname and cleanname(fullname)
- fontname = fontname and cleanname(fontname)
- subfamily = subfamily and cleanname(subfamily)
- modifiers = modifiers and cleanname(modifiers)
- weight = weight and cleanname(weight)
- italicangle = italicangle == 0 and nil
+ fullname = fullname and cleanname(fullname)
+ fontname = fontname and cleanname(fontname)
+ family = family and cleanname(family)
+ subfamily = subfamily and cleanname(subfamily)
+ familyname = familyname and cleanname(familyname)
+ subfamilyname = subfamilyname and cleanname(subfamilyname)
+ -- compatiblename = compatiblename and cleanname(compatiblename)
+ weight = weight and cleanname(weight)
+ italicangle = italicangle == 0 and nil
-- analyze
local a_name, a_weight, a_style, a_width, a_variant = analyzespec(fullname or fontname or familyname)
-- check
- local width = a_width
+ local width = a_width
local variant = a_variant
- local style = modifiers and gsub(modifiers,"[^%a]","")
- if not style and italicangle then
+ local style = subfamilyname or subfamily -- can re really trust subfamilyname?
+ if style then
+ style = gsub(style,"[^%a]","")
+ elseif italicangle then
style = "italic"
end
if not variant or variant == "" then
@@ -636,43 +606,42 @@ local function check_name(data,result,filename,modification,suffix,subfont)
fontname = fontname or fullname or familyname or filebase -- maybe cleanfilename
fullname = fullname or fontname
familyname = familyname or fontname
- -- we do these sparse
- local units = result.units_per_em or 1000 -- can be zero too
- local minsize = result.design_range_bottom or 0
- local maxsize = result.design_range_top or 0
- local designsize = result.design_size or 0
+ -- we do these sparse -- todo: check table type or change names in ff loader
+ local units = result.units or 1000 -- can be zero too
+ local designsize = result.designsize or 0
+ local minsize = result.minsize or 0
+ local maxsize = result.maxsize or 0
local angle = result.italicangle or 0
- local pfminfo = result.pfminfo
- local pfmwidth = pfminfo and pfminfo.width or 0
- local pfmweight = pfminfo and pfminfo.weight or 0
+ local pfmwidth = result.pfmwidth or 0
+ local pfmweight = result.pfmweight or 0
--
specifications[#specifications + 1] = {
- filename = filename, -- unresolved
- cleanfilename = cleanfilename,
- format = lower(suffix),
- subfont = subfont,
- rawname = rawname,
- familyname = familyname,
- fullname = fullname,
- fontname = fontname,
- subfamily = subfamily,
- modifiers = modifiers,
- weight = weight,
- style = style,
- width = width,
- variant = variant,
- units = units ~= 1000 and units or nil,
- pfmwidth = pfmwidth ~= 0 and pfmwidth or nil,
- pfmweight = pfmweight ~= 0 and pfmweight or nil,
- angle = angle ~= 0 and angle or nil,
- minsize = minsize ~= 0 and minsize or nil,
- maxsize = maxsize ~= 0 and maxsize or nil,
- designsize = designsize ~= 0 and designsize or nil,
- modification = modification ~= 0 and modification or nil,
+ filename = filename, -- unresolved
+ cleanfilename = cleanfilename,
+ -- subfontindex = subfont,
+ format = lower(suffix),
+ subfont = subfont,
+ rawname = rawname,
+ fullname = fullname,
+ fontname = fontname,
+ family = family,
+ subfamily = subfamily,
+ familyname = familyname,
+ subfamilyname = subfamilyname,
+ -- compatiblename = compatiblename, -- nor used / needed
+ weight = weight,
+ style = style,
+ width = width,
+ variant = variant,
+ units = units ~= 1000 and units or nil,
+ pfmwidth = pfmwidth ~= 0 and pfmwidth or nil,
+ pfmweight = pfmweight ~= 0 and pfmweight or nil,
+ angle = angle ~= 0 and angle or nil,
+ minsize = minsize ~= 0 and minsize or nil,
+ maxsize = maxsize ~= 0 and maxsize or nil,
+ designsize = designsize ~= 0 and designsize or nil,
+ modification = modification ~= 0 and modification or nil,
}
--- inspect(filename)
--- inspect(result)
--- inspect(specifications[#specifications])
end
local function cleanupkeywords()
@@ -708,14 +677,18 @@ local function cleanupkeywords()
end
s.weight, s.style, s.width, s.variant = weight, style, width, variant
end
- local stats = data.statistics
- stats.used_weights, stats.used_styles, stats.used_widths, stats.used_variants = weights, styles, widths, variants
+ local statistics = data.statistics
+ statistics.used_weights = weights
+ statistics.used_styles = styles
+ statistics.used_widths = widths
+ statistics.used_variants = variants
end
end
-local function collectstatistics()
+local function collectstatistics(runtime)
local data = names.data
local specifications = data.specifications
+ local statistics = data.statistics
if specifications then
local f_w = formatters["%i"]
local f_a = formatters["%0.2f"]
@@ -753,20 +726,21 @@ local function collectstatistics()
twidths[pfmwidth] = (twidths [pfmwidth] or 0) + 1
end
--
- local stats = data.statistics
- stats.weights = weights
- stats.styles = styles
- stats.widths = widths
- stats.variants = variants
- stats.angles = angles
- stats.pfmweights = pfmweights
- stats.pfmwidths = pfmwidths
- stats.fonts = #specifications
+ statistics.weights = weights
+ statistics.styles = styles
+ statistics.widths = widths
+ statistics.variants = variants
+ statistics.angles = angles
+ statistics.pfmweights = pfmweights
+ statistics.pfmwidths = pfmwidths
+ statistics.fonts = #specifications
--
setmetatableindex(pfmweights,nil)
setmetatableindex(pfmwidths, nil)
--
report_names("")
+ report_names("statistics: ")
+ report_names("")
report_names("weights")
report_names("")
report_names(formatters[" %T"](weights))
@@ -799,6 +773,13 @@ local function collectstatistics()
report_names(formatters[" %-10s: %T"](k,v))
end
report_names("")
+ report_names("registered fonts : %i", statistics.fonts)
+ report_names("read files : %i", statistics.readfiles)
+ report_names("skipped files : %i", statistics.skippedfiles)
+ report_names("duplicate files : %i", statistics.duplicatefiles)
+ if runtime then
+ report_names("total scan time : %0.3f seconds",runtime)
+ end
end
end
@@ -812,29 +793,50 @@ local function collecthashes()
if specifications then
-- maybe multiple passes
for index=1,#specifications do
- local s = specifications[index]
- local format, fullname, fontname, familyname, weight, subfamily = s.format, s.fullname, s.fontname, s.familyname, s.weight, s.subfamily
- local mf, ff = mappings[format], fallbacks[format]
- if fullname and not mf[fullname] then
- mf[fullname], nofmappings = index, nofmappings + 1
- end
- if fontname and not mf[fontname] then
- mf[fontname], nofmappings = index, nofmappings + 1
- end
- if familyname and weight and weight ~= sub(familyname,#familyname-#weight+1,#familyname) then
- local madename = familyname .. weight
- if not mf[madename] and not ff[madename] then
- ff[madename], noffallbacks = index, noffallbacks + 1
- end
+ local specification = specifications[index]
+ local format = specification.format
+ local fullname = specification.fullname
+ local fontname = specification.fontname
+ local familyname = specification.familyname or specification.family
+ local subfamilyname = specification.subfamilyname
+ local subfamily = specification.subfamily
+ local weight = specification.weight
+ local mapping = mappings[format]
+ local fallback = fallbacks[format]
+ if fullname and not mapping[fullname] then
+ mapping[fullname] = index
+ nofmappings = nofmappings + 1
+ end
+ if fontname and not mapping[fontname] then
+ mapping[fontname] = index
+ nofmappings = nofmappings + 1
end
- if familyname and subfamily and subfamily ~= sub(familyname,#familyname-#subfamily+1,#familyname) then
- local extraname = familyname .. subfamily
- if not mf[extraname] and not ff[extraname] then
- ff[extraname], noffallbacks = index, noffallbacks + 1
+ if familyname then
+ if weight and weight ~= sub(familyname,#familyname-#weight+1,#familyname) then
+ local madename = familyname .. weight
+ if not mapping[madename] and not fallback[madename] then
+ fallback[madename] = index
+ noffallbacks = noffallbacks + 1
+ end
+ end
+ if subfamily and subfamily ~= sub(familyname,#familyname-#subfamily+1,#familyname) then
+ local extraname = familyname .. subfamily
+ if not mapping[extraname] and not fallback[extraname] then
+ fallback[extraname] = index
+ noffallbacks = noffallbacks + 1
+ end
+ end
+ if subfamilyname and subfamilyname ~= sub(familyname,#familyname-#subfamilyname+1,#familyname) then
+ local extraname = familyname .. subfamilyname
+ if not mapping[extraname] and not fallback[extraname] then
+ fallback[extraname] = index
+ noffallbacks = noffallbacks + 1
+ end
+ end
+ if not mapping[familyname] and not fallback[familyname] then
+ fallback[familyname] = index
+ noffallbacks = noffallbacks + 1
end
- end
- if familyname and not mf[familyname] and not ff[familyname] then
- ff[familyname], noffallbacks = index, noffallbacks + 1
end
end
end
@@ -907,10 +909,6 @@ local function checkduplicates()
checkduplicate("fallbacks")
end
-local sorter = function(a,b)
- return a > b -- to be checked
-end
-
local function sorthashes()
local data = names.data
local list = filters.list
@@ -935,23 +933,23 @@ local function unpackreferences()
local data = names.data
local specifications = data.specifications
if specifications then
- for k, v in next, data.families do
+ for k, v in sortedhash(data.families) do
for i=1,#v do
v[i] = specifications[v[i]]
end
end
local mappings = data.mappings
if mappings then
- for _, m in next, mappings do
- for k, v in next, m do
+ for _, m in sortedhash(mappings) do
+ for k, v in sortedhash(m) do
m[k] = specifications[v]
end
end
end
local fallbacks = data.fallbacks
if fallbacks then
- for _, f in next, fallbacks do
- for k, v in next, f do
+ for _, f in sortedhash(fallbacks) do
+ for k, v in sortedhash(f) do
f[k] = specifications[v]
end
end
@@ -978,31 +976,34 @@ local function analyzefiles(olddata)
local oldspecifications = olddata and olddata.specifications or { }
local oldrejected = olddata and olddata.rejected or { }
local treatmentdata = treatments.data or { } -- when used outside context
+
local function identify(completename,name,suffix,storedname)
local pathpart, basepart = splitbase(completename)
nofread = nofread + 1
local treatment = treatmentdata[completename] or treatmentdata[basepart]
if treatment and treatment.ignored then
- if trace_names then
+ if trace_names or trace_rejections then
report_names("%s font %a is ignored, reason %a",suffix,completename,treatment.comment or "unknown")
end
nofskipped = nofskipped + 1
elseif done[name] then
- -- already done (avoid otf afm clash)
- if trace_names then
- report_names("%s font %a already done",suffix,completename)
+ if lower(completename) ~= lower(done[name]) then
+ -- already done (avoid otf afm clash)
+ if trace_names or trace_rejections then
+ report_names("%s font %a already done as %a",suffix,completename,done[name])
+ end
+ nofduplicates = nofduplicates + 1
+ nofskipped = nofskipped + 1
end
- nofduplicates = nofduplicates + 1
- nofskipped = nofskipped + 1
elseif not exists(completename) then
-- weird error
- if trace_names then
+ if trace_names or trace_rejections then
report_names("%s font %a does not really exist",suffix,completename)
end
nofskipped = nofskipped + 1
elseif not is_qualified_path(completename) and findfile(completename,suffix) == "" then
-- not locatable by backend anyway
- if trace_names then
+ if trace_names or trace_rejections then
report_names("%s font %a cannot be found by backend",suffix,completename)
end
nofskipped = nofskipped + 1
@@ -1010,7 +1011,7 @@ local function analyzefiles(olddata)
if #skip_paths > 0 then
for i=1,#skip_paths do
if find(pathpart,skip_paths[i]) then
- if trace_names then
+ if trace_names or trace_rejections then
report_names("rejecting path of %s font %a",suffix,completename)
end
nofskipped = nofskipped + 1
@@ -1022,7 +1023,7 @@ local function analyzefiles(olddata)
for i=1,#skip_paths do
if find(basepart,skip_names[i]) then
done[name] = true
- if trace_names then
+ if trace_names or trace_rejections then
report_names("rejecting name of %s font %a",suffix,completename)
end
nofskipped = nofskipped + 1
@@ -1033,6 +1034,7 @@ local function analyzefiles(olddata)
if trace_names then
report_names("identifying %s font %a",suffix,completename)
end
+ -- needs checking with ttc / ttx : date not updated ?
local result = nil
local modification = lfs.attributes(completename,"modification")
if olddata and modification and modification > 0 then
@@ -1045,8 +1047,10 @@ local function analyzefiles(olddata)
result = oldspecification
specifications[#specifications + 1] = result
else
+ -- ??
end
else
+ -- ??
end
elseif oldrejected[storedname] == modification then
result = false
@@ -1058,7 +1062,7 @@ local function analyzefiles(olddata)
if result then
if #result > 0 then
for r=1,#result do
- local ok = check_name(data,result[r],storedname,modification,suffix,r-1) -- subfonts start at zero
+ local ok = check_name(data,result[r],storedname,modification,suffix,r) -- subfonts start at zero
-- if not ok then
-- nofskipped = nofskipped + 1
-- end
@@ -1077,7 +1081,7 @@ local function analyzefiles(olddata)
report_names("error when identifying %s font %a, %s",suffix,completename,message or "unknown")
end
end
- done[name] = true
+ done[name] = completename
end
logs.flush() -- a bit overkill for each font, maybe not needed here
end
@@ -1214,14 +1218,12 @@ function names.identify(force)
analyzefiles(not force and names.readdata(names.basename))
rejectclashes()
collectfamilies()
- -- collectstatistics()
cleanupkeywords()
collecthashes()
checkduplicates()
addfilenames()
-- sorthashes() -- will be resorted when saved
- collectstatistics()
- report_names("total scan time %0.3f seconds",os.gettimeofday()-starttime)
+ collectstatistics(os.gettimeofday()-starttime)
end
function names.is_permitted(name)
@@ -1420,7 +1422,7 @@ end
function names.resolve(askedname,sub)
local found = names.resolvedspecification(askedname,sub)
if found then
- return found.filename, found.subfont and found.rawname
+ return found.filename, found.subfont and found.rawname, found.subfont
end
end
@@ -1880,7 +1882,7 @@ local lastlookups, lastpattern = { }, ""
-- end
local function look_them_up(lookups,specification)
- for key, value in next, specification do
+ for key, value in sortedhash(specification) do
local t, n = { }, 0
if find(value,"*",1,true) then
value = topattern(value)
@@ -2002,7 +2004,7 @@ function names.register(files)
local list, commonname = files.list, files.name
if list then
local n, m = 0, 0
- for filename, filespec in next, list do
+ for filename, filespec in sortedhash(list) do
local name = lower(filespec.name or commonname)
if name and name ~= "" then
local style = normalized_styles [lower(filespec.style or "normal")]
@@ -2069,48 +2071,20 @@ function names.resolvespec(askedname,sub) -- overloads previous definition
end
end
--- We could generate typescripts with designsize info from the name database but
--- it's not worth the trouble as font names remain a mess: for instance how do we
--- idenfity a font? Names, families, subfamilies or whatever snippet can contain
--- a number related to the design size and so we end up with fuzzy logic again. So,
--- instead it's easier to make a few goody files.
---
--- local hash = { }
---
--- for i=1,#specifications do
--- local s = specifications[i]
--- local min = s.minsize or 0
--- local max = s.maxsize or 0
--- if min ~= 0 or max ~= 0 then
--- -- the usual name mess:
--- -- antykwa has modifiers so we need to take these into account, otherwise we get weird combinations
--- -- ebgaramond has modifiers with the size encoded, so we need to strip this in order to recognized similar styles
--- -- lm has 'slanted appended in some names so how to choose that one
--- --
--- local modifier = string.gsub(s.modifiers or "normal","%d","")
--- -- print funny modifier
--- local instance = string.formatters["%s-%s-%s-%s-%s-%s"](s.familyname,s.width,s.style,s.weight,s.variant,modifier)
--- local h = hash[instance]
--- if not h then
--- h = { }
--- hash[instance] = h
--- end
--- size = string.formatters["%0.1fpt"]((min)/10)
--- h[size] = s.filename
--- end
--- end
+function fonts.names.ignoredfile(filename) -- only supported in mkiv
+ return false -- will be overloaded
+end
+
+-- example made for luatex list (unlikely to be used):
--
--- local newhash = { }
+-- local command = [[reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"]]
+-- local pattern = ".-[\n\r]+%s+(.-)%s%(([^%)]+)%)%s+REG_SZ%s+(%S+)%s+"
--
--- for k, v in next, hash do
--- if next(v,next(v)) then
--- -- local instance = string.match(k,"(.+)%-.+%-.+%-.+$")
--- local instance = string.match(k,"(.+)%-.+%-.+$")
--- local instance = string.gsub(instance,"%-normal$","")
--- if not newhash[instance] then
--- newhash[instance] = v
--- end
+-- local function getnamesfromregistry()
+-- local data = os.resultof(command)
+-- local list = { }
+-- for name, format, filename in string.gmatch(data,pattern) do
+-- list[name] = filename
-- end
+-- return list
-- end
---
--- inspect(newhash)
diff --git a/Master/texmf-dist/tex/context/base/font-tfm.lua b/Master/texmf-dist/tex/context/base/mkiv/font-tfm.lua
index ab03788516a..8e92c4808a6 100644
--- a/Master/texmf-dist/tex/context/base/font-tfm.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-tfm.lua
@@ -24,6 +24,9 @@ local constructors = fonts.constructors
local encodings = fonts.encodings
local tfm = constructors.newhandler("tfm")
+tfm.version = 1.000
+tfm.maxnestingdepth = 5
+tfm.maxnestingsize = 65536*1024
local tfmfeatures = constructors.newfeatures("tfm")
local registertfmfeature = tfmfeatures.register
@@ -31,6 +34,7 @@ local registertfmfeature = tfmfeatures.register
constructors.resolvevirtualtoo = false -- wil be set in font-ctx.lua
fonts.formats.tfm = "type1" -- we need to have at least a value here
+fonts.formats.ofm = "type1" -- we need to have at least a value here
--[[ldx--
<p>The next function encapsulates the standard <l n='tfm'/> loader as
@@ -44,6 +48,18 @@ supplied by <l n='luatex'/>.</p>
-- ofm directive blocks local path search unless set; btw, in context we
-- don't support ofm files anyway as this format is obsolete
+-- we need to deal with nested virtual fonts, but because we load in the
+-- frontend we also need to make sure we don't nest too deep (esp when sizes
+-- get large)
+--
+-- (VTITLE Example of a recursion)
+-- (MAPFONT D 0 (FONTNAME recurse)(FONTAT D 2))
+-- (CHARACTER C A (CHARWD D 1)(CHARHT D 1)(MAP (SETRULE D 1 D 1)))
+-- (CHARACTER C B (CHARWD D 2)(CHARHT D 2)(MAP (SETCHAR C A)))
+-- (CHARACTER C C (CHARWD D 4)(CHARHT D 4)(MAP (SETCHAR C B)))
+--
+-- we added the same checks as below to the luatex engine
+
function tfm.setfeatures(tfmdata,features)
local okay = constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
if okay then
@@ -53,9 +69,12 @@ function tfm.setfeatures(tfmdata,features)
end
end
+local depth = { } -- table.setmetatableindex("number")
+
local function read_from_tfm(specification)
- local filename = specification.filename
- local size = specification.size
+ local filename = specification.filename
+ local size = specification.size
+ depth[filename] = (depth[filename] or 0) + 1
if trace_defining then
report_defining("loading tfm file %a at size %s",filename,size)
end
@@ -103,6 +122,25 @@ local function read_from_tfm(specification)
end
properties.virtualized = true
tfmdata.fonts = vfdata.fonts
+ tfmdata.type = "virtual" -- else nested calls with cummulative scaling
+ local fontlist = vfdata.fonts
+ local name = file.nameonly(filename)
+ for i=1,#fontlist do
+ local n = fontlist[i].name
+ local s = fontlist[i].size
+ local d = depth[filename]
+ s = constructors.scaled(s,vfdata.designsize)
+ if d > tfm.maxnestingdepth then
+ report_defining("too deeply nested virtual font %a with size %a, max nesting depth %s",n,s,tfm.maxnestingdepth)
+ fontlist[i] = { id = 0 }
+ elseif (d > 1) and (s > tfm.maxnestingsize) then
+ report_defining("virtual font %a exceeds size %s",n,s)
+ fontlist[i] = { id = 0 }
+ else
+ local t, id = fonts.constructors.readanddefine(n,s)
+ fontlist[i] = { id = id }
+ end
+ end
end
end
end
@@ -117,11 +155,14 @@ local function read_from_tfm(specification)
end
-- let's play safe:
properties.haskerns = true
- properties.haslogatures = true
+ properties.hasligatures = true
resources.unicodes = { }
resources.lookuptags = { }
--
+ depth[filename] = depth[filename] - 1
return tfmdata
+ else
+ depth[filename] = depth[filename] - 1
end
end
@@ -156,3 +197,5 @@ function readers.tfm(specification)
end
return check_tfm(specification,fullname)
end
+
+readers.ofm = readers.tfm
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-tmp.lua b/Master/texmf-dist/tex/context/base/mkiv/font-tmp.lua
new file mode 100644
index 00000000000..8db5cff1436
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-tmp.lua
@@ -0,0 +1,118 @@
+if not modules then modules = { } end modules ['font-tmp'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- There is a complete feature loader but it needs a bit of testing, first so this
+-- one does design size only (as needed for identifying).
+
+local next, type = next, type
+
+local report = logs.reporter("otf reader")
+
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
+
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local readtag = streamreader.readtag
+local skipshort = streamreader.skipshort
+local setposition = streamreader.setposition
+
+local plugins = { }
+
+function plugins.size(f,fontdata,tableoffset,parameters)
+ if not fontdata.designsize then
+ setposition(f,tableoffset+parameters)
+ local designsize = readushort(f)
+ if designsize > 0 then
+ fontdata.designsize = designsize
+ skipshort(f,2)
+ fontdata.minsize = readushort(f)
+ fontdata.maxsize = readushort(f)
+ end
+ end
+end
+
+local function readscripts(f,fontdata,what)
+ local datatable = fontdata.tables[what]
+ if not datatable then
+ return
+ end
+ local tableoffset = datatable.offset
+ setposition(f,tableoffset)
+ local version = readulong(f)
+ if version ~= 0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ --
+ local scriptoffset = tableoffset + readushort(f)
+ local featureoffset = tableoffset + readushort(f)
+ local lookupoffset = tableoffset + readushort(f)
+ --
+ setposition(f,scriptoffset)
+ local nofscripts = readushort(f)
+ local scripts = { }
+ for i=1,nofscripts do
+ scripts[readtag(f)] = scriptoffset + readushort(f)
+ end
+ local languagesystems = table.setmetatableindex("table") -- we share when possible
+ for script, offset in next, scripts do
+ setposition(f,offset)
+ local defaultoffset = readushort(f)
+ local noflanguages = readushort(f)
+ local languages = { }
+ if defaultoffset > 0 then
+ languages.dflt = languagesystems[offset + defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language = readtag(f)
+ local offset = offset + readushort(f)
+ languages[language] = languagesystems[offset]
+ end
+ scripts[script] = languages
+ end
+ --
+ setposition(f,featureoffset)
+ local features = { }
+ local noffeatures = readushort(f)
+ for i=1,noffeatures do
+ features[i] = {
+ tag = readtag(f),
+ offset = readushort(f)
+ }
+ end
+ --
+ for i=1,noffeatures do
+ local feature = features[i]
+ local offset = featureoffset + feature.offset
+ setposition(f,offset)
+ local parameters = readushort(f) -- feature.parameters
+ local noflookups = readushort(f)
+ skipshort(f,noflookups+1)
+ if parameters > 0 then
+ feature.parameters = parameters
+ local plugin = plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,offset,parameters)
+ end
+ end
+ end
+end
+
+function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub")
+ end
+end
+
+function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-tra.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-tra.mkiv
index 3d6811a6428..f5290d61463 100644
--- a/Master/texmf-dist/tex/context/base/font-tra.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-tra.mkiv
@@ -15,6 +15,8 @@
\writestatus{loading}{ConTeXt Font Macros / Tracing}
+%D just use fontid
+
%D \macros
%D {showbodyfont}
%D
@@ -122,7 +124,7 @@
\unexpanded\def\otfstepcharcommand#1#2#3% font char class
{\otfstepspace
- \doif{#3}{mark}{\underbar}{U+\hexnumber{#2}}:\ruledhbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}%
+ \doif{#3}{mark}{\underbar}{U+\hexnumber{#2}}:\ruledhbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}%
\otfstepspace}
\unexpanded\def\otfstepfontcommand#1#2#3% id font size
diff --git a/Master/texmf-dist/tex/context/base/font-trt.lua b/Master/texmf-dist/tex/context/base/mkiv/font-trt.lua
index abc92ba5265..abc92ba5265 100644
--- a/Master/texmf-dist/tex/context/base/font-trt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-trt.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-ttf.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ttf.lua
new file mode 100644
index 00000000000..6df339214b2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-ttf.lua
@@ -0,0 +1,480 @@
+if not modules then modules = { } end modules ['font-ttf'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next, type, unpack = next, type, unpack
+local bittest = bit32.btest
+local sqrt = math.sqrt
+
+local report = logs.reporter("otf reader","ttf")
+
+local readers = fonts.handlers.otf.readers
+local streamreader = readers.streamreader
+
+local setposition = streamreader.setposition
+local getposition = streamreader.getposition
+local skipbytes = streamreader.skip
+local readbyte = streamreader.readcardinal1 -- 8-bit unsigned integer
+local readushort = streamreader.readcardinal2 -- 16-bit unsigned integer
+local readulong = streamreader.readcardinal4 -- 24-bit unsigned integer
+local readchar = streamreader.readinteger1 -- 8-bit signed integer
+local readshort = streamreader.readinteger2 -- 16-bit signed integer
+local read2dot14 = streamreader.read2dot14 -- 16-bit signed fixed number with the low 14 bits of fraction (2.14) (F2DOT14)
+
+local function mergecomposites(glyphs,shapes)
+
+ local function merge(index,shape,components)
+ local contours = { }
+ local nofcontours = 0
+ for i=1,#components do
+ local component = components[i]
+ local subindex = component.index
+ local subshape = shapes[subindex]
+ local subcontours = subshape.contours
+ if not subcontours then
+ local subcomponents = subshape.components
+ if subcomponents then
+ subcontours = merge(subindex,subshape,subcomponents)
+ end
+ end
+ if subcontours then
+ local matrix = component.matrix
+ local xscale = matrix[1]
+ local xrotate = matrix[2]
+ local yrotate = matrix[3]
+ local yscale = matrix[4]
+ local xoffset = matrix[5]
+ local yoffset = matrix[6]
+ for i=1,#subcontours do
+ local points = subcontours[i]
+ local result = { }
+ for i=1,#points do
+ local p = points[i]
+ local x = p[1]
+ local y = p[2]
+ result[i] = {
+ xscale * x + xrotate * y + xoffset,
+ yscale * y + yrotate * x + yoffset,
+ p[3]
+ }
+ end
+ nofcontours = nofcontours + 1
+ contours[nofcontours] = result
+ end
+ else
+ report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
+ end
+ end
+ shape.contours = contours
+ shape.components = nil
+ return contours
+ end
+
+ for index=1,#glyphs do
+ local shape = shapes[index]
+ local components = shape.components
+ if components then
+ merge(index,shape,components)
+ end
+ end
+
+end
+
+local function readnothing(f,nofcontours)
+ return {
+ type = "nothing",
+ }
+end
+
+-- begin of converter
+
+-- make paths: the ff code is quite complex but it looks like we need to deal
+-- with all kind of on curve border cases
+
+local function curveto(m_x,m_y,l_x,l_y,r_x,r_y) -- todo: inline this
+ return {
+ l_x + 2/3 *(m_x-l_x), l_y + 2/3 *(m_y-l_y),
+ r_x + 2/3 *(m_x-r_x), r_y + 2/3 *(m_y-r_y),
+ r_x, r_y, "c" -- "curveto"
+ }
+end
+
+-- We could omit the operator which saves some 10%:
+--
+-- #2=lineto #4=quadratic #6=cubic #3=moveto (with "m")
+--
+-- For the moment we keep the original outlines but that default might change
+-- in the future. In any case, a backend should support both.
+--
+-- The code is a bit messy. I looked at the ff code but it's messy too. It has
+-- to do with the fact that we need to look at points on the curve and control
+-- points in between. This also means that we start at point 2 and have to look at
+-- point 1 when we're at the end. We still use a ps like storage with the operator
+-- last in an entry. It's typical code that evolves stepwise till a point of no
+-- comprehension.
+
+local function contours2outlines(glyphs,shapes)
+ local quadratic = true
+ -- local quadratic = false
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local shape = shapes[index]
+ local contours = shape.contours
+ if contours then
+ local nofcontours = #contours
+ local segments = { }
+ local nofsegments = 0
+ glyph.segments = segments
+ if nofcontours > 0 then
+ for i=1,nofcontours do
+ local contour = contours[i]
+ local nofcontour = #contour
+ if nofcontour > 0 then
+ local first_pt = contour[1]
+ local first_on = first_pt[3]
+ -- todo no new tables but reuse lineto and quadratic
+ if nofcontour == 1 then
+ -- this can influence the boundingbox
+ first_pt[3] = "m" -- "moveto"
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = first_pt
+ else -- maybe also treat n == 2 special
+ local first_on = first_pt[3]
+ local last_pt = contour[nofcontour]
+ local last_on = last_pt[3]
+ local start = 1
+ local control_pt = false
+ if first_on then
+ start = 2
+ else
+ if last_on then
+ first_pt = last_pt
+ else
+ first_pt = { (first_pt[1]+last_pt[1])/2, (first_pt[2]+last_pt[2])/2, false }
+ end
+ control_pt = first_pt
+ end
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { first_pt[1], first_pt[2], "m" } -- "moveto"
+ local previous_pt = first_pt
+ for i=start,nofcontour do
+ local current_pt = contour[i]
+ local current_on = current_pt[3]
+ local previous_on = previous_pt[3]
+ if previous_on then
+ if current_on then
+ -- both normal points
+ nofsegments = nofsegments + 1
+ segments[nofsegments] = { current_pt[1], current_pt[2], "l" } -- "lineto"
+ else
+ control_pt = current_pt
+ end
+ elseif current_on then
+ local ps = segments[nofsegments]
+ nofsegments = nofsegments + 1
+ if quadratic then
+ segments[nofsegments] = { control_pt[1], control_pt[2], current_pt[1], current_pt[2], "q" } -- "quadraticto"
+ else
+ local p = segments[nofsegments-1] local n = #p
+ segments[nofsegments] = curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],current_pt[1],current_pt[2])
+ end
+ control_pt = false
+ else
+ nofsegments = nofsegments + 1
+ local halfway_x = (previous_pt[1]+current_pt[1])/2
+ local halfway_y = (previous_pt[2]+current_pt[2])/2
+ if quadratic then
+ segments[nofsegments] = { control_pt[1], control_pt[2], halfway_x, halfway_y, "q" } -- "quadraticto"
+ else
+ local p = segments[nofsegments-1] local n = #p
+ segments[nofsegments] = curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],halfway_x,halfway_y)
+ end
+ control_pt = current_pt
+ end
+ previous_pt = current_pt
+ end
+ if first_pt == last_pt then
+ -- we're already done, probably a simple curve
+ else
+ nofsegments = nofsegments + 1
+ if not control_pt then
+ segments[nofsegments] = { first_pt[1], first_pt[2], "l" } -- "lineto"
+ elseif quadratic then
+ segments[nofsegments] = { control_pt[1], control_pt[2], first_pt[1], first_pt[2], "q" } -- "quadraticto"
+ else
+ local p = last_pt local n = #p
+ segments[nofsegments] = curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],first_pt[1],first_pt[2])
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+-- end of converter
+
+local function readglyph(f,nofcontours)
+ local points = { }
+ local endpoints = { }
+ local instructions = { }
+ local flags = { }
+ for i=1,nofcontours do
+ endpoints[i] = readshort(f) + 1
+ end
+ local nofpoints = endpoints[nofcontours]
+ local nofinstructions = readushort(f)
+-- f:seek("set",f:seek()+nofinstructions)
+ skipbytes(f,nofinstructions)
+ -- because flags can repeat we don't know the amount ... in fact this is
+ -- not that efficient (small files but more mem)
+ local i = 1
+ while i <= nofpoints do
+ local flag = readbyte(f)
+ flags[i] = flag
+ if bittest(flag,0x0008) then
+ for j=1,readbyte(f) do
+ i = i + 1
+ flags[i] = flag
+ end
+ end
+ i = i + 1
+ end
+ -- first come the x coordinates, and next the y coordinates and they
+ -- can be repeated
+ local x = 0
+ for i=1,nofpoints do
+ local flag = flags[i]
+ local short = bittest(flag,0x0002)
+ local same = bittest(flag,0x0010)
+ if short then
+ if same then
+ x = x + readbyte(f)
+ else
+ x = x - readbyte(f)
+ end
+ elseif same then
+ -- copy
+ else
+ x = x + readshort(f)
+ end
+ points[i] = { x, y, bittest(flag,0x0001) }
+ end
+ local y = 0
+ for i=1,nofpoints do
+ local flag = flags[i]
+ local short = bittest(flag,0x0004)
+ local same = bittest(flag,0x0020)
+ if short then
+ if same then
+ y = y + readbyte(f)
+ else
+ y = y - readbyte(f)
+ end
+ elseif same then
+ -- copy
+ else
+ y = y + readshort(f)
+ end
+ points[i][2] = y
+ end
+ -- we could integrate this if needed
+ local first = 1
+ for i=1,#endpoints do
+ local last = endpoints[i]
+ endpoints[i] = { unpack(points,first,last) }
+ first = last + 1
+ end
+ return {
+ type = "glyph",
+ -- points = points,
+ contours = endpoints,
+ }
+end
+
+local function readcomposite(f)
+ local components = { }
+ local nofcomponents = 0
+ local instructions = false
+ while true do
+ local flags = readushort(f)
+ local index = readushort(f)
+ ----- f_words = bittest(flags,0x0001)
+ local f_xyarg = bittest(flags,0x0002)
+ ----- f_round = bittest(flags,0x0004+0x0002)
+ ----- f_scale = bittest(flags,0x0008)
+ ----- f_reserved = bittest(flags,0x0010)
+ ----- f_more = bittest(flags,0x0020)
+ ----- f_xyscale = bittest(flags,0x0040)
+ ----- f_matrix = bittest(flags,0x0080)
+ ----- f_instruct = bittest(flags,0x0100)
+ ----- f_usemine = bittest(flags,0x0200)
+ ----- f_overlap = bittest(flags,0x0400)
+ local f_offset = bittest(flags,0x0800)
+ ----- f_uoffset = bittest(flags,0x1000)
+ local xscale = 1
+ local xrotate = 0
+ local yrotate = 0
+ local yscale = 1
+ local xoffset = 0
+ local yoffset = 0
+ local base = false
+ local reference = false
+ if f_xyarg then
+ if bittest(flags,0x0001) then -- f_words
+ xoffset = readshort(f)
+ yoffset = readshort(f)
+ else
+ xoffset = readchar(f) -- signed byte, stupid name
+ yoffset = readchar(f) -- signed byte, stupid name
+ end
+ else
+ if bittest(flags,0x0001) then -- f_words
+ base = readshort(f)
+ reference = readshort(f)
+ else
+ base = readchar(f) -- signed byte, stupid name
+ reference = readchar(f) -- signed byte, stupid name
+ end
+ end
+ if bittest(flags,0x0008) then -- f_scale
+ xscale = read2dot14(f)
+ yscale = xscale
+ if f_xyarg and f_offset then
+ xoffset = xoffset * xscale
+ yoffset = yoffset * yscale
+ end
+ elseif bittest(flags,0x0040) then -- f_xyscale
+ xscale = read2dot14(f)
+ yscale = read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset = xoffset * xscale
+ yoffset = yoffset * yscale
+ end
+ elseif bittest(flags,0x0080) then -- f_matrix
+ xscale = read2dot14(f)
+ xrotate = read2dot14(f)
+ yrotate = read2dot14(f)
+ yscale = read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset = xoffset * sqrt(xscale ^2 + xrotate^2)
+ yoffset = yoffset * sqrt(yrotate^2 + yscale ^2)
+ end
+ end
+ nofcomponents = nofcomponents + 1
+ components[nofcomponents] = {
+ index = index,
+ usemine = bittest(flags,0x0200), -- f_usemine
+ round = bittest(flags,0x0006), -- f_round,
+ base = base,
+ reference = reference,
+ matrix = { xscale, xrotate, yrotate, yscale, xoffset, yoffset },
+ }
+ if bittest(flags,0x0100) then
+ instructions = true
+ end
+ if not bittest(flags,0x0020) then -- f_more
+ break
+ end
+ end
+ return {
+ type = "composite",
+ components = components,
+ }
+end
+
+-- function readers.cff(f,offset,glyphs,doshapes) -- false == no shapes (nil or true otherwise)
+
+-- The glyf table depends on the loca table. We have one entry to much
+-- in the locations table (the last one is a dummy) because we need to
+-- calculate the size of a glyph blob from the delta, although we not
+-- need it in our usage (yet). We can remove the locations table when
+-- we're done (todo: cleanup finalizer).
+
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable = fontdata.tables.loca
+ if datatable then
+ -- locations are relative to the glypdata table (glyf)
+ local offset = fontdata.tables.glyf.offset
+ local format = fontdata.fontheader.indextolocformat
+ local locations = { }
+ setposition(f,datatable.offset)
+ if format == 1 then
+ local nofglyphs = datatable.length/4 - 1
+ -1
+ for i=0,nofglyphs do
+ locations[i] = offset + readulong(f)
+ end
+ fontdata.nofglyphs = nofglyphs
+ else
+ local nofglyphs = datatable.length/2 - 1
+ -1
+ for i=0,nofglyphs do
+ locations[i] = offset + readushort(f) * 2
+ end
+ fontdata.nofglyphs = nofglyphs
+ end
+ fontdata.locations = locations
+ end
+ end
+end
+
+function readers.glyf(f,fontdata,specification) -- part goes to cff module
+ if specification.glyphs then
+ local datatable = fontdata.tables.glyf
+ if datatable then
+ local locations = fontdata.locations
+ if locations then
+ local glyphs = fontdata.glyphs
+ local nofglyphs = fontdata.nofglyphs
+ local filesize = fontdata.filesize
+ local nothing = { 0, 0, 0, 0 }
+ local shapes = { }
+ local loadshapes = specification.shapes
+ for index=0,nofglyphs do
+ local location = locations[index]
+ if location >= filesize then
+ report("discarding %s glyphs due to glyph location bug",nofglyphs-index+1)
+ fontdata.nofglyphs = index - 1
+ fontdata.badfont = true
+ break
+ elseif location > 0 then
+ setposition(f,location)
+ local nofcontours = readshort(f)
+ glyphs[index].boundingbox = {
+ readshort(f), -- xmin
+ readshort(f), -- ymin
+ readshort(f), -- xmax
+ readshort(f), -- ymax
+ }
+ if not loadshapes then
+ -- save space
+ elseif nofcontours == 0 then
+ shapes[index] = readnothing(f,nofcontours)
+ elseif nofcontours > 0 then
+ shapes[index] = readglyph(f,nofcontours)
+ else
+ shapes[index] = readcomposite(f,nofcontours)
+ end
+ else
+ if loadshapes then
+ shapes[index] = { }
+ end
+ glyphs[index].boundingbox = nothing
+ end
+ end
+ if loadshapes then
+ mergecomposites(glyphs,shapes)
+ contours2outlines(glyphs,shapes)
+ end
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-uni.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-uni.mkiv
index 91a488ff205..91a488ff205 100644
--- a/Master/texmf-dist/tex/context/base/font-uni.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-uni.mkiv
diff --git a/Master/texmf-dist/tex/context/base/font-unk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/font-unk.mkiv
index 988e5df3d3c..988e5df3d3c 100644
--- a/Master/texmf-dist/tex/context/base/font-unk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-unk.mkiv
diff --git a/Master/texmf-dist/tex/context/base/font-var.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-var.mkvi
index fb60b711cef..fb60b711cef 100644
--- a/Master/texmf-dist/tex/context/base/font-var.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-var.mkvi
diff --git a/Master/texmf-dist/tex/context/base/font-vf.lua b/Master/texmf-dist/tex/context/base/mkiv/font-vf.lua
index 1fe6dd71c1d..7037c6c8be6 100644
--- a/Master/texmf-dist/tex/context/base/font-vf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-vf.lua
@@ -23,37 +23,38 @@ local fastcopy = table.fastcopy
local fonts = fonts
local constructors = fonts.constructors
local vf = constructors.newhandler("vf")
-
--- general code
-
-function vf.find(name)
- name = file.removesuffix(file.basename(name))
- if constructors.resolvevirtualtoo then
- local format = fonts.loggers.format(name)
- if format == 'tfm' or format == 'ofm' then
- if trace_defining then
- report_defining("locating vf for %a",name)
- end
- return findbinfile(name,"ovf")
- else
- if trace_defining then
- report_defining("vf for %a is already taken care of",name)
- end
- return nil -- ""
- end
- else
- if trace_defining then
- report_defining("locating vf for %a",name)
- end
- return findbinfile(name,"ovf")
- end
-end
+vf.version = 1.000 -- same as tfm
--[[ldx--
<p>We overload the <l n='vf'/> reader.</p>
--ldx]]--
-callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more
+-- general code / already frozen
+--
+-- function vf.find(name)
+-- name = file.removesuffix(file.basename(name))
+-- if constructors.resolvevirtualtoo then
+-- local format = fonts.loggers.format(name)
+-- if format == 'tfm' or format == 'ofm' then
+-- if trace_defining then
+-- report_defining("locating vf for %a",name)
+-- end
+-- return findbinfile(name,"ovf") or ""
+-- else
+-- if trace_defining then
+-- report_defining("vf for %a is already taken care of",name)
+-- end
+-- return ""
+-- end
+-- else
+-- if trace_defining then
+-- report_defining("locating vf for %a",name)
+-- end
+-- return findbinfile(name,"ovf") or ""
+-- end
+-- end
+--
+-- callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more
-- specific code (will move to other module)
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-def.lua b/Master/texmf-dist/tex/context/base/mkiv/font-xtx.lua
index 0c2f0dbd583..494ac00a928 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-def.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/font-xtx.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['luatex-font-def'] = {
+if not modules then modules = { } end modules ['luatex-fonts-def'] = {
version = 1.001,
comment = "companion to luatex-*.tex",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -47,7 +47,7 @@ local filename_1 = P("file:")/isfile * (namespec/thename)
local filename_2 = P("[") * P(true)/isname * (((1-P("]"))^0)/thename) * P("]")
local fontname_1 = P("name:")/isname * (namespec/thename)
local fontname_2 = P(true)/issome * (namespec/thename)
-local sometext = (R("az","AZ","09") + S("+-."))^1
+local sometext = (R("az","AZ","09") + S("+-.{}"))^1
local truevalue = P("+") * spaces * (sometext/istrue)
local falsevalue = P("-") * spaces * (sometext/isfalse)
local keyvalue = (C(sometext) * spaces * P("=") * spaces * C(sometext))/iskey
diff --git a/Master/texmf-dist/tex/context/base/grph-epd.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-epd.lua
index 17f04d593da..17f04d593da 100644
--- a/Master/texmf-dist/tex/context/base/grph-epd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-epd.lua
diff --git a/Master/texmf-dist/tex/context/base/grph-epd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-epd.mkiv
index 2df195589b4..8152772aa48 100644
--- a/Master/texmf-dist/tex/context/base/grph-epd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-epd.mkiv
@@ -33,7 +33,7 @@
\c!background={\v!foreground,system:graphics:epdf}]
\unexpanded\def\grph_epdf_add_overlay
- {\global\setbox\foundexternalfigure\vbox\bgroup
+ {\global\setbox\foundexternalfigure\vbox\bgroup % vpack ?
\system_graphics_epdf{\box\foundexternalfigure}%
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/grph-fig.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-fig.mkiv
index f5152874d0d..80b094d83fa 100644
--- a/Master/texmf-dist/tex/context/base/grph-fig.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-fig.mkiv
@@ -85,7 +85,7 @@
\def\grph_typesetting_process[#1][#2][#3]% <name> filename settings-b | filename options settings
{\ifcsname\??typesettingfile#1\endcsname
- \csname\??typesettingfile#1\endcsname{#2}{#3}%
+ \lastnamedcs{#2}{#3}%
\else\ifthirdargument % filename options settings
\grph_typesetting_process_indeed{#2}{#3}{#1}{}%
\else\ifsecondargument % filename settings
@@ -112,8 +112,8 @@
\let\placestopfigure\relax
\unexpanded\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
- {\hbox
- {\setbox\scratchbox\hbox
+ {\hpack
+ {\setbox\scratchbox\hpack
{\useexternalfigure[\s!dummy][#2][#3,#5]%
\externalfigure[\s!dummy]}%
\grph_steps_calculate
@@ -161,10 +161,10 @@
\unexpanded\def\grph_steps_two_colorbar#1[#2]
{\begingroup
- \global\setbox\b_grph_steps_colorbar\vbox
+ \global\setbox\b_grph_steps_colorbar\vpack % \vbox ?
{\forgetall
\processcommalist[#2]\grph_colorbar_make_step}%
- \global\setbox\b_grph_steps_colorbar\vbox
+ \global\setbox\b_grph_steps_colorbar\vpack
{\hskip2\emwidth\box\b_grph_steps_colorbar}%
\global\wd\b_grph_steps_colorbar\zeropoint
\endgroup}
@@ -193,7 +193,7 @@
\unexpanded\def\teststartfigure[#1][#2][#3]#4\teststopfigure
{\begingroup
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]%
\externalfigure[\s!dummy]}%
\let\referring\grph_steps_three_referring
@@ -201,7 +201,7 @@
\let\remark \grph_steps_three_remark
\let\colorbar \grph_steps_three_colorbar
\c_grph_steps_reference\zerocount
- \setbox0\vbox
+ \setbox0\vpack
{\hsize240\points
\startpositioning
\grph_steps_calculate
@@ -232,7 +232,7 @@
\let\marking \grph_steps_four_marking
\let\remark \grph_steps_four_remark
\let\colorbar \grph_steps_four_colorbar
- \setbox2\vbox
+ \setbox2\vbox % \vpack ?
{{\tfa\doifelsenothing{#1}{#2}{#1}}
\blank
\tfxx#4
@@ -242,10 +242,10 @@
\else
\ht0\ht2
\fi
- \hbox
+ \hpack
{\hskip3\emwidth
- \vtop{\vskip12\points\box0\vskip6\points}%
- \vtop{\vskip12\points\box2\vskip6\points}}%
+ \tpack{\vskip12\points\box0\vskip6\points}%
+ \tpack{\vskip12\points\box2\vskip6\points}}%
\endgroup}
\unexpanded\def\grph_steps_three_referring(#1,#2)#3(#4,#5)#6[#7]%
@@ -263,10 +263,10 @@
\let\grph_steps_three_colorbar\grph_steps_one_colorbar
\unexpanded\def\grph_steps_four_referring
- {\grph_steps_text{$\rightarrow$}}
+ {\grph_steps_text{\normalstartimath\rightarrow\normalstopimath}}
\unexpanded\def\grph_steps_four_marking
- {\grph_steps_text{$\leftarrow$}}
+ {\grph_steps_text{\normalstartimath\leftarrow\normalstopimath}}
\let\grph_steps_four_remark \grph_steps_one_remark
\let\grph_steps_four_colorbar\grph_steps_one_colorbar
@@ -307,11 +307,11 @@
% {\position(0,0){\getvalue{#1}}}
\def\grph_steps_goto(#1,#2)#3[#4]% (h,b)kader[ref]
- {\gotobox{\vbox{\grph_steps_area(#1,#2)#3{}}}[#4]}
+ {\gotobox{\vpack{\grph_steps_area(#1,#2)#3{}}}[#4]}
\def\grph_steps_text#1(#2,#3)#4(#5,#6)#7[#8]%
{\advance\c_grph_steps_reference\plusone
- \hbox
+ \hbox % \hpack ?
{\quad
\thisissomeinternal\s!vwb
{#8}%
diff --git a/Master/texmf-dist/tex/context/base/grph-fil.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-fil.lua
index c1532ce25e3..e774d097e6e 100644
--- a/Master/texmf-dist/tex/context/base/grph-fil.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-fil.lua
@@ -11,6 +11,11 @@ local type = type
local trace_run = false trackers.register("graphic.runfile",function(v) trace_run = v end)
local report_run = logs.reporter("graphics","run")
+local isfile = lfs.isfile
+local replacesuffix = file.replacesuffix
+local addsuffix = file.addsuffix
+local checksum = file.checksum
+
-- Historically running files is part of graphics processing, so this is why it
-- sits here but is part of the job namespace.
@@ -27,6 +32,9 @@ local jobfiles = {
job.files = jobfiles
+local inputsuffix = "tex"
+local resultsuffix = "pdf"
+
local function initializer()
tobesaved = jobfiles.tobesaved
collected = jobfiles.collected
@@ -35,9 +43,11 @@ end
job.register('job.files.collected', tobesaved, initializer)
function jobfiles.run(name,action)
- local oldchecksum = collected[name]
- local newchecksum = file.checksum(name)
- if jobfiles.forcerun or not oldchecksum or oldchecksum ~= newchecksum then
+ local usedname = addsuffix(name,inputsuffix) -- we assume tex if not set
+ local oldchecksum = collected[usedname]
+ local newchecksum = checksum(usedname)
+ local resultfile = replacesuffix(usedname,resultsuffix)
+ if jobfiles.forcerun or not oldchecksum or oldchecksum ~= newchecksum or not isfile(resultfile) then
if trace_run then
report_run("processing file, changes in %a, processing forced",name)
end
@@ -57,6 +67,8 @@ end
--
+local done = { }
+
function jobfiles.context(name,options)
if type(name) == "table" then
local result = { }
@@ -65,8 +77,12 @@ function jobfiles.context(name,options)
end
return result
else
- jobfiles.run(name,"context ".. (options or "") .. " " .. name)
- return file.replacesuffix(name,"pdf")
+ local result = replacesuffix(name,resultsuffix)
+ if not done[result] then
+ jobfiles.run(name,"context ".. (options or "") .. " " .. name)
+ done[result] = true
+ end
+ return result
end
end
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua
index 8a064c8e9c8..cf4a702697f 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua
@@ -132,7 +132,7 @@ function images.check(figure)
report_inclusion("limiting natural dimensions of %a, old %p * %p, new %p * %p",
figure.filename,width,height,figure.width,figure.height)
end
- if width >=maxdimen or height >= maxdimen then
+ if width >= maxdimen or height >= maxdimen then
report_inclusion("image %a is too large (%p,%p), discarding",
figure.filename,width,height)
return false, "dimensions too large"
@@ -408,7 +408,7 @@ function figures.registerresource(t)
return n
end
-local function register(tag,target,what)
+local function register(tag,what,target)
local data = figures_formats[target] -- resolver etc
if not data then
data = { }
@@ -426,8 +426,8 @@ local function register(tag,target,what)
setlookups()
end
-function figures.registersuffix (suffix, target) register('list', target,suffix ) end
-function figures.registerpattern(pattern,target) register('pattern',target,pattern) end
+function figures.registersuffix (suffix, target) register('list',suffix,target) end
+function figures.registerpattern(pattern,target) register('pattern',pattern,target) end
implement { name = "registerfiguresuffix", actions = register, arguments = { "'list'", "string", "string" } }
implement { name = "registerfigurepattern", actions = register, arguments = { "'pattern'", "string", "string" } }
@@ -582,7 +582,23 @@ local function get(category,tag,default)
end
end
+local function setdimensions(box)
+ local status = lastfiguredata and lastfiguredata.status
+ local used = lastfiguredata and lastfiguredata.used
+ if status and used then
+ local b = texgetbox(box)
+ local w = b.width
+ local h = b.height + b.depth
+ status.width = w
+ status.height = h
+ used.width = w
+ used.height = h
+ status.status = 10
+ end
+end
+
figures.get = get
+figures.set = setdimensions
implement { name = "figurestatus", actions = { get, context }, arguments = { "'status'", "string", "string" } }
implement { name = "figurerequest", actions = { get, context }, arguments = { "'request'", "string", "string" } }
@@ -592,6 +608,8 @@ implement { name = "figurefilepath", actions = { get, file.dirname, context },
implement { name = "figurefilename", actions = { get, file.nameonly, context }, arguments = { "'used'", "'fullname'" } }
implement { name = "figurefiletype", actions = { get, file.extname, context }, arguments = { "'used'", "'fullname'" } }
+implement { name = "figuresetdimensions", actions = setdimensions, arguments = { "integer" } }
+
-- todo: local path or cache path
local function forbiddenname(filename)
@@ -1345,13 +1363,13 @@ local function checkers_nongeneric(data,command) -- todo: macros and context.*
local hash = name
if dr.object then
-- hm, bugged ... waiting for an xform interface
- if not job.objects.get("FIG::"..hash) then
+ if not objects.data["FIG"][hash] then
if type(command) == "function" then
command()
end
- context.dosetfigureobject(hash)
+ context.dosetfigureobject("FIG",hash)
end
- context.doboxfigureobject(hash)
+ context.doboxfigureobject("FIG",hash)
elseif type(command) == "function" then
command()
end
@@ -1464,11 +1482,11 @@ includers.buffers = includers.nongeneric
function existers.auto(askedname)
local name = gsub(askedname, ".auto$", "")
local format = figures.guess(name)
- if format then
- report_inclusion("format guess %a for %a",format,name)
- else
- report_inclusion("format guess for %a is not possible",name)
- end
+ -- if format then
+ -- report_inclusion("format guess %a for %a",format,name)
+ -- else
+ -- report_inclusion("format guess for %a is not possible",name)
+ -- end
return format and name, true, format
end
@@ -1602,7 +1620,7 @@ directives.register("graphics.conversion.eps.cleanup.ai",function(v) cleanups.ai
cleaners.ai = function(name)
local tmpname = name .. ".tmp"
- io.savedata(tmpname,lpegmatch(pattern,io.loaddata(name)))
+ io.savedata(tmpname,lpegmatch(pattern,io.loaddata(name) or ""))
return tmpname
end
@@ -1611,6 +1629,9 @@ function epsconverter.pdf(oldname,newname,resolution,colorspace) -- the resoluti
local presets = epstopdf.resolutions[resolution or "high"] or epstopdf.resolutions.high
local level = codeinjections.getformatoption("pdf_level") or "1.3"
local tmpname = oldname
+ if not tmpname or tmpname == "" or not lfs.isfile(tmpname) then
+ return
+ end
if cleanups.ai then
tmpname = cleaners.ai(oldname)
end
@@ -2084,3 +2105,15 @@ implement {
figures.defaultheight = height
end
}
+
+-- require("util-lib-imp-gm")
+--
+-- figures.converters.tif.pdf = function(oldname,newname,resolution)
+-- logs.report("graphics","using gm library to convert %a",oldname)
+-- utilities.graphicmagick.convert {
+-- inputname = oldname,
+-- outputname = newname,
+-- }
+-- end
+--
+-- \externalfigure[t:/sources/hakker1b.tiff]
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv
index 6b7f2bd6359..deba82c583d 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv
@@ -370,7 +370,7 @@
\let\dowithfigure\relax % name might change (into a proper hook)
\unexpanded\def\doscalefigure % used at lua end
- {\global\setbox\foundexternalfigure\vbox{\scale[\v!figure]{\dowithfigure{\box\foundexternalfigure}}}}
+ {\global\setbox\foundexternalfigure\vpack{\scale[\v!figure]{\dowithfigure{\box\foundexternalfigure}}}}
\definescale % some day we will inherit
[\v!figure]
@@ -543,24 +543,24 @@
%D Internal graphics are handled at the \TEX\ end:
\def\grph_include_process_tex#1%
- {\global\setbox\foundexternalfigure\vbox\framed
+ {\framed
[\c!strut=\v!no,\c!align=\v!normal,\c!frame=\v!off,
\c!offset=\v!overlay,\c!width=\v!fit,\c!height=\v!fit]
{\blank[\v!disable]#1\endgraf\removelastskip}} % disable should stay here!
% used al lua end:
-\unexpanded\def\docheckfigurebuffer #1{\grph_include_process_tex{\getbuffer[#1]}}
-\unexpanded\def\docheckfiguretex #1{\grph_include_process_tex{\input{#1}}}
-\unexpanded\def\docheckfigurecld #1{\global\setbox\foundexternalfigure\vbox{\cldprocessfile{#1}}}
-\unexpanded\def\docheckfiguremps #1{\global\setbox\foundexternalfigure\vbox{\convertMPtoPDF{#1}11}}
-\unexpanded\def\docheckfiguremprun #1#2{\global\setbox\foundexternalfigure\vbox{\useMPrun{#1}{#2}}}
+\unexpanded\def\docheckfigurebuffer #1{\global\setbox\foundexternalfigure\vpack{\grph_include_process_tex{\getbuffer[#1]}}}
+\unexpanded\def\docheckfiguretex #1{\global\setbox\foundexternalfigure\vpack{\grph_include_process_tex{\input{#1}}}}
+\unexpanded\def\docheckfigurecld #1{\global\setbox\foundexternalfigure\vbox {\cldprocessfile{#1}}}
+\unexpanded\def\docheckfiguremps #1{\global\setbox\foundexternalfigure\vpack{\convertMPtoPDF{#1}11}}
+\unexpanded\def\docheckfiguremprun #1#2{\global\setbox\foundexternalfigure\vpack{\useMPrun{#1}{#2}}}
\unexpanded\def\relocateexternalfigure % easier here than in lua
- {\global\setbox\foundexternalfigure\vbox to \ht\foundexternalfigure\bgroup
+ {\global\setbox\foundexternalfigure\vpack to \ht\foundexternalfigure\bgroup
\vss
\ht\foundexternalfigure\zeropoint
- \hbox to \wd\foundexternalfigure\bgroup
+ \hpack to \wd\foundexternalfigure\bgroup
\box\foundexternalfigure
\hss
\egroup
@@ -664,13 +664,14 @@
\externalfigure[#1][#2,\c!display=,\c!mask=,\c!object=\v!no]%
\stopnointerference}
-% Helpers (will be replaced when xforms are accessible at the lua end)
+% Helpers will be replaced when xforms are accessible at the lua end but then
+% we need to do the object offset there too.
-\unexpanded\def\dosetfigureobject#1%
- {\setobject{FIG}{#1}\vbox{\box\foundexternalfigure}}
+\unexpanded\def\dosetfigureobject#1#2%
+ {\setobject{#1}{#2}\vpack{\box\foundexternalfigure}}
-\unexpanded\def\doboxfigureobject#1%
- {\global\setbox\foundexternalfigure\vbox{\getobject{FIG}{#1}}} % probably one vbox too many
+\unexpanded\def\doboxfigureobject#1#2%
+ {\global\setbox\foundexternalfigure\vpack{\getobject{#1}{#2}}} % probably one vbox too many
% Figure bases
@@ -781,8 +782,16 @@
% Bonus:
\useexternalfigure
- [buffer]
+ [\v!buffer]
[\jobname.buffer]
[\c!object=\v!no]
+% Another one:
+
+\defineexternalfigure
+ [\v!inline]
+ [\c!height=\lineheight]
+
+\unexpanded\def\inlinefigure[#1]{\dontleavehmode\sbox{\externalfigure[#1][\v!inline]}}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/grph-raw.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-raw.lua
index 62e96fcc9d7..62e96fcc9d7 100644
--- a/Master/texmf-dist/tex/context/base/grph-raw.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-raw.lua
diff --git a/Master/texmf-dist/tex/context/base/grph-raw.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-raw.mkiv
index 8978ba2671b..8978ba2671b 100644
--- a/Master/texmf-dist/tex/context/base/grph-raw.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-raw.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/grph-rul.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-rul.lua
new file mode 100644
index 00000000000..5d3cb8ad5d1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-rul.lua
@@ -0,0 +1,185 @@
+if not modules then modules = { } end modules ['grph-rul'] = {
+ version = 1.001,
+ comment = "companion to grph-rul.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local attributes = attributes
+local nodes = nodes
+local context = context
+
+local ruleactions = nodes.rules.ruleactions
+local userrule = nodes.rules.userrule
+local bpfactor = number.dimenfactors.bp
+local pdfprint = pdf.print
+
+local getattribute = tex.getattribute
+
+local a_color = attributes.private('color')
+local a_transparency = attributes.private('transparency')
+local a_colorspace = attributes.private('colormodel')
+
+local mpcolor = attributes.colors.mpcolor
+
+local floor = math.floor
+local random = math.random
+
+do
+
+ local simplemetapost = metapost.simple
+ local cachesize = 0
+ local maxcachesize = 256*1024
+ local cachethreshold = 1024
+
+ -- local maxcachesize = 8*1024
+ -- local cachethreshold = 1024/2
+
+ local cache = table.setmetatableindex(function(t,k)
+ local v = simplemetapost("rulefun",k) -- w, h, d
+ cachesize = cachesize + #v
+ if cachesize > maxcachesize then
+ -- print("old",cachesize)
+ for k, v in next, t do
+ local n = #v
+ if n > cachethreshold then
+ t[k] = nil
+ cachesize = cachesize - n
+ end
+ end
+ -- print("new",cachesize)
+ end
+ -- print(cachesize,maxcachesize,cachethreshold,#v)
+ t[k] = v
+ return v
+ end)
+
+ local replacer = utilities.templates.replacer
+
+ local predefined = {
+ ["fake:word"] = replacer [[
+FakeWord(%width%,%height%,%depth%,%line%,%color%);
+ ]],
+ ["fake:rule"] = replacer[[
+FakeRule(%width%,%height%,%depth%,%line%,%color%);
+ ]],
+ ["fake:rest"] = replacer [[
+RuleWidth := %width% ;
+RuleHeight := %height% ;
+RuleDepth := %depth% ;
+RuleThickness := %line% ;
+RuleFactor := %factor% ;
+RuleOffset := %offset% ;
+def RuleColor = %color% enddef ;
+%data%;
+ ]]
+ }
+
+ ruleactions.mp = function(p,h,v,i,n)
+ local name = p.name or "fake:rest"
+ local code = (predefined[name] or predefined["fake:rest"]) {
+ data = p.data or "",
+ width = p.width * bpfactor,
+ height = p.height * bpfactor,
+ depth = p.depth * bpfactor,
+ factor = (p.factor or 0) * bpfactor, -- needs checking
+ offset = p.offset or 0,
+ line = (p.line or 65536) * bpfactor,
+ color = mpcolor(p.ma,p.ca,p.ta),
+ }
+ local m = cache[code]
+ if m and m ~= "" then
+ pdfprint("direct",m)
+ end
+ end
+
+end
+
+do
+
+ local f_rectangle = string.formatters["%F w %F %F %F %F re %s"]
+ local f_radtangle = string.formatters[ [[
+ %F w %F %F m
+ %F %F l %F %F %F %F y
+ %F %F l %F %F %F %F y
+ %F %F l %F %F %F %F y
+ %F %F l %F %F %F %F y
+ h %s
+ ]] ]
+
+ ruleactions.fill = function(p,h,v,i,n)
+ local l = (p.line or 65536)*bpfactor
+ local r = p and (p.radius or 0)*bpfactor or 0
+ local w = h * bpfactor
+ local h = v * bpfactor
+ local m = nil
+ local t = i == "fill" and "f" or "s"
+ local o = l / 2
+ if r > 0 then
+ w = w - o
+ h = h - o
+ m = f_radtangle(l, r,o, w-r,o, w,o,w,r, w,h-r, w,h,w-r,h, r,h, o,h,o,h-r, o,r, o,o,r,o, t)
+ else
+ w = w - l
+ h = h - l
+ m = f_rectangle(l,o,o,w,h,t)
+ end
+ pdfprint("direct",m)
+ end
+
+ ruleactions.draw = ruleactions.fill
+ ruleactions.stroke = ruleactions.fill
+
+end
+
+interfaces.implement {
+ name = "frule",
+ arguments = { {
+ { "width", "dimension" },
+ { "height", "dimension" },
+ { "depth", "dimension" },
+ { "radius", "dimension" },
+ { "line", "dimension" },
+ { "type", "string" },
+ { "data", "string" },
+ { "name", "string" },
+ } } ,
+ actions = function(t)
+ if t.type == "mp" then
+ t.ma = getattribute(a_colorspace) or 1
+ t.ca = getattribute(a_color)
+ t.ta = getattribute(a_transparency)
+ end
+ local r = userrule(t)
+ context(r)
+ end
+}
+
+interfaces.implement {
+ name = "fakeword",
+ arguments = { {
+ { "factor", "dimension" },
+ { "name", "string" }, -- can be type
+ { "min", "dimension" },
+ { "max", "dimension" },
+ { "n", "integer" },
+ } } ,
+ actions = function(t)
+ local factor = t.factor or 0
+ local rule = userrule {
+ height = 1.25*factor,
+ depth = 0.25*factor,
+ width = floor(random(t.min,t.max)/10000) * 10000,
+ line = 0.10*factor,
+ ma = getattribute(a_colorspace) or 1,
+ ca = getattribute(a_color),
+ ta = getattribute(a_transparency),
+ type = "mp",
+ name = t.name,
+ }
+ context(rule)
+ end
+}
+
+
diff --git a/Master/texmf-dist/tex/context/base/mkiv/grph-rul.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-rul.mkiv
new file mode 100644
index 00000000000..98aab36506e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-rul.mkiv
@@ -0,0 +1,89 @@
+%D \module
+%D [ file=grph-rul,
+%D version=2016.02.05, % from experiments
+%D title=\CONTEXT\ Graphic Macros,
+%D subtitle=Rule Trickery,
+%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 Graphic Macros / Rule Trickery}
+
+\registerctxluafile{grph-rul}{1.001}
+
+\unprotect
+
+\unexpanded\def\frule{\relax\clf_frule} % kind of low level
+
+% just for fun:
+
+% \defineoverlay[normalframe]
+% [\frule
+% width \overlaywidth
+% height\overlayheight
+% line \overlaylinewidth
+% \relax]
+
+% \defineoverlay[ovalframe]
+% [\frule
+% width \overlaywidth
+% height \overlayheight
+% line \overlaylinewidth
+% radius \overlayradius
+% \relax]
+
+\protect \endinput
+
+% \starttext
+%
+% \testfeatureonce{25}{\dontleavehmode
+% \ruledhbox\bgroup
+% \red \frule width 2cm height 2cm depth 1cm radius 2mm line 2pt type fill\relax
+% \hskip-2cm
+% \green \frule width 2cm height 2cm depth 1cm radius 2mm line 2pt\relax
+% \egroup
+% \space}
+%
+% \blank
+%
+% \startuseMPgraphic{demoshape:back}
+% fill
+% unitcircle xysized (RuleWidth,RuleHeight+RuleDepth)
+% withcolor RuleColor ;
+% \stopuseMPgraphic
+%
+% \startuseMPgraphic{demoshape:fore}
+% draw
+% unitcircle xysized (RuleWidth,RuleHeight+RuleDepth)
+% withcolor RuleColor
+% withpen pencircle scaled RuleThickness ;
+% \stopuseMPgraphic
+%
+% \testfeatureonce{100}{\dontleavehmode
+% \ruledhbox\bgroup
+% \red \frule width 1cm height 3mm depth 1mm type mp line 2pt data {\includeMPgraphic{demoshape:back}}\relax
+% \hskip-1cm
+% \green \frule width 1cm height 3mm depth 1mm type mp line 2pt data {\includeMPgraphic{demoshape:fore}}\relax
+% \egroup
+% \space}
+%
+% \blank
+%
+% \dontleavehmode
+% \testfeatureonce{1}{\setbox\scratchbox\hbox{\framed {test}}}
+% \framed {test}
+% \testfeatureonce{1}{\setbox\scratchbox\hbox{\framed[background=normalframe,frame=off]{test}}}
+% \framed[background=normalframe,frame=off]{test}
+% \testfeatureonce{1}{\setbox\scratchbox\hbox{\framed[corner=round] {test}}}
+% \framed[corner=round] {test}
+% \testfeatureonce{1}{\setbox\scratchbox\hbox{\framed[background=ovalframe,frame=off] {test}}}
+% \framed[background=ovalframe,frame=off] {test}
+% \testfeatureonce{1}{\setbox\scratchbox\hbox{\framed[background=ovalframe,frame=on] {test}}}
+% \framed[background=ovalframe,frame=on] {test}
+%
+% \stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/grph-swf.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-swf.lua
index 8c28b76afae..8c28b76afae 100644
--- a/Master/texmf-dist/tex/context/base/grph-swf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-swf.lua
diff --git a/Master/texmf-dist/tex/context/base/grph-trf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-trf.mkiv
index fca5c7cf6ef..099efa1140f 100644
--- a/Master/texmf-dist/tex/context/base/grph-trf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-trf.mkiv
@@ -140,7 +140,7 @@
%
\d_grph_scale_dp\dp\nextbox
\ifx\p_depth\v!no \ifzeropt\d_grph_scale_dp \else
- \setbox\nextbox\hbox{\raise\d_grph_scale_dp\box\nextbox}% new
+ \setbox\nextbox\hpack{\raise\d_grph_scale_dp\box\nextbox}% new
\d_grph_scale_dp\dp\nextbox
\fi \fi
\d_grph_scale_wd\wd\nextbox
@@ -169,7 +169,7 @@
{\d_grph_scale_wd\finalscaleboxxscale\d_grph_scale_wd
\d_grph_scale_ht\finalscaleboxyscale\d_grph_scale_ht
\d_grph_scale_dp\finalscaleboxyscale\d_grph_scale_dp
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\dostartscaling \finalscaleboxxscale \finalscaleboxyscale
\smashedbox\nextbox
\dostopscaling}%
@@ -300,7 +300,7 @@
{\ifx\p_maxwidth \empty\else \edef\p_maxwidth {\the\dimexpr\p_maxwidth }\fi
\ifx\p_maxheight\empty\else \edef\p_maxheight{\the\dimexpr\p_maxheight }\fi
\ifx\p_lines \empty\else \edef\p_height {\the\dimexpr\p_lines\lineheight}\fi
- \getvalue{\??scalegrid\scaleparameter\c!grid}}
+ \csname\??scalegrid\scaleparameter\c!grid\endcsname}
\def\grph_scale_by_nature % where ! ! ! ! !
{\ifx\p_width \empty\else \global\d_grph_scale_used_x_size\p_width \fi
@@ -676,13 +676,13 @@
{\ifx\p_equalwidth\empty \else
\scratchdimen\p_equalwidth\relax
\ifdim\d_grph_scale_wd<\scratchdimen
- \setbox\nextbox\hbox to \scratchdimen{\hss\box\nextbox\hss}%
+ \setbox\nextbox\hpack to \scratchdimen{\hss\box\nextbox\hss}%
\fi
\fi
\ifx\p_equalheight\empty \else
\scratchdimen\p_equalheight\relax
\ifdim\d_grph_scale_ht<\scratchdimen
- \setbox\nextbox\vbox to \scratchdimen{\vss\box\nextbox\vss}%
+ \setbox\nextbox\vpack to \scratchdimen{\vss\box\nextbox\vss}%
\fi
\fi}
@@ -839,7 +839,7 @@
\scratchheight\clippingparameter\c!sy\scratchheight
\advance\scratchyoffset \ht\nextbox
\fi
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\advance\scratchxoffset -\clippingparameter\c!leftoffset \relax
\advance\scratchyoffset -\clippingparameter\c!bottomoffset\relax
\hskip-\scratchxoffset
@@ -848,13 +848,13 @@
\wd\nextbox\zeropoint
\ht\nextbox\zeropoint
\dp\nextbox\zeropoint
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\advance\scratchwidth \dimexpr\clippingparameter\c!leftoffset +\clippingparameter\c!rightoffset\relax
\advance\scratchheight\dimexpr\clippingparameter\c!bottomoffset+\clippingparameter\c!topoffset \relax
\dostartclipping{\clippingparameter\c!mp}\scratchwidth\scratchheight
\box\nextbox
\dostopclipping}%
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\hskip-\clippingparameter\c!leftoffset
\lower \clippingparameter\c!bottomoffset
\box\nextbox}%
@@ -912,7 +912,7 @@
{\scratchdimen\wd\nextbox
% better use an hbox (if no \forgetall, leftskip etc may creep in)
%\setbox\nextbox\vbox{\forgetall\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
- \setbox\nextbox\hbox{\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
+ \setbox\nextbox\hpack{\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
\wd\nextbox\scratchdimen
\box\nextbox
\egroup}
@@ -1100,19 +1100,19 @@
{\csname\??rotatepreset
\ifcsname\??rotatepreset\p_rotation_rotation\endcsname\p_rotation_rotation\else\v!default\fi
\endcsname
- \setbox\nextbox\vbox{\box\nextbox}% not really needed
+ \setbox\nextbox\vpack{\box\nextbox}% not really needed
\dontcomplain
\ifconditional\c_grph_rotate_center
\d_grph_rotate_saved_width \wd\nextbox
\d_grph_rotate_saved_height\ht\nextbox
\d_grph_rotate_saved_depth \dp\nextbox
- \setbox\nextbox\vbox{\vskip.5\ht\nextbox\hskip-.5\wd\nextbox\box\nextbox}%
+ \setbox\nextbox\vpack{\vskip.5\ht\nextbox\hskip-.5\wd\nextbox\box\nextbox}%
\smashbox\nextbox
\fi
\d_grph_rotate_width \wd\nextbox
\d_grph_rotate_height\ht\nextbox
\d_grph_rotate_depth \dp\nextbox
- \setbox\nextbox\vbox{\hbox{\raise\dp\nextbox\box\nextbox}}%
+ \setbox\nextbox\vpack{\hpack{\raise\dp\nextbox\box\nextbox}}%
\d_grph_rotate_used_height \ht\nextbox
% much of the next happens in lua (all the sin and cos) so we can do that in
% one go if needed
@@ -1143,7 +1143,7 @@
\fi\fi
\fi
\ifconditional\c_grph_rotate_center
- \setbox\nextbox\vbox{\vskip-.5\d_grph_rotate_saved_height\hskip.5\d_grph_rotate_saved_height\box\nextbox}%
+ \setbox\nextbox\vpack{\vskip-.5\d_grph_rotate_saved_height\hskip.5\d_grph_rotate_saved_height\box\nextbox}%
\wd\nextbox\d_grph_rotate_saved_width
\ht\nextbox\d_grph_rotate_saved_height
\dp\nextbox\d_grph_rotate_saved_depth
@@ -1209,9 +1209,9 @@
\fi}
\def\grph_rotate_apply
- {\setbox\nextbox\vbox to \d_grph_rotate_y_size
+ {\setbox\nextbox\vpack to \d_grph_rotate_y_size
{\vfill
- \hbox to \d_grph_rotate_x_size
+ \hpack to \d_grph_rotate_x_size
{\dostartrotation\p_rotation_rotation
\wd\nextbox\zeropoint
\ht\nextbox\zeropoint
@@ -1219,7 +1219,7 @@
\dostoprotation
\hfill}%
\kern\d_grph_rotate_y_position}%
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\kern\dimexpr\d_grph_rotate_x_position+\d_grph_rotate_x_offset\relax
\lower\d_grph_rotate_y_offset\box\nextbox}}
diff --git a/Master/texmf-dist/tex/context/base/grph-u3d.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-u3d.lua
index 6961c55037b..6961c55037b 100644
--- a/Master/texmf-dist/tex/context/base/grph-u3d.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-u3d.lua
diff --git a/Master/texmf-dist/tex/context/base/grph-wnd.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-wnd.lua
index ebb9b11691c..ebb9b11691c 100644
--- a/Master/texmf-dist/tex/context/base/grph-wnd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/grph-wnd.lua
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/hand-ini.mkiv
index fd18e3221d0..d4bffdb14a6 100644
--- a/Master/texmf-dist/tex/context/base/hand-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/hand-ini.mkiv
@@ -48,13 +48,22 @@
% \setupfontprotrusion[quality-upright][vector=quality]
% \setupfontprotrusion[quality-slanted][vector=quality,right=1.5]
-\let\pdfadjustspacing\relax \newcount\pdfadjustspacing % a little bit protection
-\let\pdfprotrudechars\relax \newcount\pdfprotrudechars % a little bit protection
+\let\adjustspacing\relax \newcount\adjustspacing % a little bit protection
+\let\protrudechars\relax \newcount\protrudechars % a little bit protection
-\def\font_expansion_enable {\normalpdfadjustspacing\plustwo } % these will become normal primitives
-\def\font_expansion_disable {\normalpdfadjustspacing\zerocount} % these will become normal primitives
-\def\font_protruding_enable {\normalpdfprotrudechars\plustwo } % these will become normal primitives
-\def\font_protruding_disable{\normalpdfprotrudechars\zerocount} % these will become normal primitives
+% at some point we can introduce extreme expansion, i.e. \normaladjustspacing\plustwo
+
+% 0 = disabled
+% 1 = notused (thesis)
+% 2 = glyph + kern
+% 3 = glyph only
+
+\def\font_expansion_enable {\normaladjustspacing\plusthree}
+\def\font_expansion_enable_k{\normaladjustspacing\plustwo}
+\def\font_expansion_disable {\normaladjustspacing\zerocount}
+
+\def\font_protruding_enable {\normalprotrudechars\plustwo }
+\def\font_protruding_disable{\normalprotrudechars\zerocount}
\appendtoks \font_expansion_disable \to \everyforgetall % Here or not here?
\appendtoks \font_protruding_disable \to \everyforgetall % Here or not here?
diff --git a/Master/texmf-dist/tex/context/base/java-imp-exa.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-imp-exa.mkiv
index 584ee13512d..584ee13512d 100644
--- a/Master/texmf-dist/tex/context/base/java-imp-exa.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-imp-exa.mkiv
diff --git a/Master/texmf-dist/tex/context/base/java-imp-fil.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-imp-fil.mkiv
index 808950f2807..808950f2807 100644
--- a/Master/texmf-dist/tex/context/base/java-imp-fil.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-imp-fil.mkiv
diff --git a/Master/texmf-dist/tex/context/base/java-imp-fld.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-imp-fld.mkiv
index cbd53fffb4a..cbd53fffb4a 100644
--- a/Master/texmf-dist/tex/context/base/java-imp-fld.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-imp-fld.mkiv
diff --git a/Master/texmf-dist/tex/context/base/java-imp-rhh.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-imp-rhh.mkiv
index 5f057f55070..5f057f55070 100644
--- a/Master/texmf-dist/tex/context/base/java-imp-rhh.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-imp-rhh.mkiv
diff --git a/Master/texmf-dist/tex/context/base/java-imp-stp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-imp-stp.mkiv
index 8ac5d58b8b4..8ac5d58b8b4 100644
--- a/Master/texmf-dist/tex/context/base/java-imp-stp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-imp-stp.mkiv
diff --git a/Master/texmf-dist/tex/context/base/java-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/java-ini.lua
index 069eb5ab610..069eb5ab610 100644
--- a/Master/texmf-dist/tex/context/base/java-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/java-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/java-ini.mkiv
index d6fe4dd8a05..d6fe4dd8a05 100644
--- a/Master/texmf-dist/tex/context/base/java-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/java-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/l-boolean.lua b/Master/texmf-dist/tex/context/base/mkiv/l-boolean.lua
index 8f18d4c003d..8f18d4c003d 100644
--- a/Master/texmf-dist/tex/context/base/l-boolean.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-boolean.lua
diff --git a/Master/texmf-dist/tex/context/base/l-dir.lua b/Master/texmf-dist/tex/context/base/mkiv/l-dir.lua
index 81ac65e506d..81ac65e506d 100644
--- a/Master/texmf-dist/tex/context/base/l-dir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-dir.lua
diff --git a/Master/texmf-dist/tex/context/base/l-file.lua b/Master/texmf-dist/tex/context/base/mkiv/l-file.lua
index 7ed6370f260..7ed6370f260 100644
--- a/Master/texmf-dist/tex/context/base/l-file.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-file.lua
diff --git a/Master/texmf-dist/tex/context/base/l-function.lua b/Master/texmf-dist/tex/context/base/mkiv/l-function.lua
index 7ded8ceecd5..7ded8ceecd5 100644
--- a/Master/texmf-dist/tex/context/base/l-function.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-function.lua
diff --git a/Master/texmf-dist/tex/context/base/l-gzip.lua b/Master/texmf-dist/tex/context/base/mkiv/l-gzip.lua
index 5100e47222c..5100e47222c 100644
--- a/Master/texmf-dist/tex/context/base/l-gzip.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-gzip.lua
diff --git a/Master/texmf-dist/tex/context/base/l-io.lua b/Master/texmf-dist/tex/context/base/mkiv/l-io.lua
index a91d44d8776..a91d44d8776 100644
--- a/Master/texmf-dist/tex/context/base/l-io.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-io.lua
diff --git a/Master/texmf-dist/tex/context/base/l-lpeg.lua b/Master/texmf-dist/tex/context/base/mkiv/l-lpeg.lua
index 55a0d892988..959ca553eb8 100644
--- a/Master/texmf-dist/tex/context/base/l-lpeg.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-lpeg.lua
@@ -82,7 +82,7 @@ local lpegtype, lpegmatch, lpegprint = lpeg.type, lpeg.match, lpeg.print
-- let's start with an inspector:
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
-- Beware, we predefine a bunch of patterns here and one reason for doing so
@@ -110,7 +110,7 @@ local underscore = P("_")
local hexdigit = digit + lowercase + uppercase
local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
----- newline = crlf + S("\r\n") -- cr + lf
-local newline = P("\r") * (P("\n") + P(true)) + P("\n")
+local newline = P("\r") * (P("\n") + P(true)) + P("\n") -- P("\r")^-1 * P("\n")^-1
local escaped = P("\\") * anything
local squote = P("'")
local dquote = P('"')
diff --git a/Master/texmf-dist/tex/context/base/l-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/l-lua.lua
index 1a2a9872364..b90f37e3db3 100644
--- a/Master/texmf-dist/tex/context/base/l-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-lua.lua
@@ -19,12 +19,20 @@ if not modules then modules = { } end modules ['l-lua'] = {
-- compatibility hacksand helpers
-local major, minor = string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION, _MINORVERSION = string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION = tonumber(major) or 5
-_MINORVERSION = tonumber(minor) or 1
+_MAJORVERSION = tonumber(_MAJORVERSION) or 5
+_MINORVERSION = tonumber(_MINORVERSION) or 1
_LUAVERSION = _MAJORVERSION + _MINORVERSION/10
+if _LUAVERSION < 5.2 and jit then
+ --
+ -- we want loadstring cum suis to behave like 5.2
+ --
+ _MINORVERSION = 2
+ _LUAVERSION = 5.2
+end
+
-- lpeg
if not lpeg then
@@ -129,22 +137,36 @@ local print, select, tostring = print, select, tostring
local inspectors = { }
-function setinspector(inspector) -- global function
- inspectors[#inspectors+1] = inspector
+function setinspector(kind,inspector) -- global function
+ inspectors[kind] = inspector
end
function inspect(...) -- global function
for s=1,select("#",...) do
local value = select(s,...)
- local done = false
- for i=1,#inspectors do
- done = inspectors[i](value)
- if done then
- break
+ if value == nil then
+ print("nil")
+ else
+ local done = false
+ -- type driven (table)
+ local kind = type(value)
+ local inspector = inspectors[kind]
+ if inspector then
+ done = inspector(value)
+ if done then
+ break
+ end
+ end
+ -- whatever driven (token, node, ...)
+ for kind, inspector in next, inspectors do
+ done = inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/l-math.lua b/Master/texmf-dist/tex/context/base/mkiv/l-math.lua
index ec62919b46a..ec62919b46a 100644
--- a/Master/texmf-dist/tex/context/base/l-math.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-math.lua
diff --git a/Master/texmf-dist/tex/context/base/l-md5.lua b/Master/texmf-dist/tex/context/base/mkiv/l-md5.lua
index 00272c873f1..00272c873f1 100644
--- a/Master/texmf-dist/tex/context/base/l-md5.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-md5.lua
diff --git a/Master/texmf-dist/tex/context/base/l-number.lua b/Master/texmf-dist/tex/context/base/mkiv/l-number.lua
index 001ca31f773..001ca31f773 100644
--- a/Master/texmf-dist/tex/context/base/l-number.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-number.lua
diff --git a/Master/texmf-dist/tex/context/base/l-os.lua b/Master/texmf-dist/tex/context/base/mkiv/l-os.lua
index 0a86ea6d697..0a86ea6d697 100644
--- a/Master/texmf-dist/tex/context/base/l-os.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-os.lua
diff --git a/Master/texmf-dist/tex/context/base/l-package.lua b/Master/texmf-dist/tex/context/base/mkiv/l-package.lua
index 075fcde25ae..075fcde25ae 100644
--- a/Master/texmf-dist/tex/context/base/l-package.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-package.lua
diff --git a/Master/texmf-dist/tex/context/base/l-pdfview.lua b/Master/texmf-dist/tex/context/base/mkiv/l-pdfview.lua
index 6302fd6f6ac..6302fd6f6ac 100644
--- a/Master/texmf-dist/tex/context/base/l-pdfview.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-pdfview.lua
diff --git a/Master/texmf-dist/tex/context/base/l-sandbox.lua b/Master/texmf-dist/tex/context/base/mkiv/l-sandbox.lua
index f7901379cd7..f7901379cd7 100644
--- a/Master/texmf-dist/tex/context/base/l-sandbox.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-sandbox.lua
diff --git a/Master/texmf-dist/tex/context/base/l-set.lua b/Master/texmf-dist/tex/context/base/mkiv/l-set.lua
index 2370f0139ff..2370f0139ff 100644
--- a/Master/texmf-dist/tex/context/base/l-set.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-set.lua
diff --git a/Master/texmf-dist/tex/context/base/l-string.lua b/Master/texmf-dist/tex/context/base/mkiv/l-string.lua
index 70c66f66169..e9dc2bbbcff 100644
--- a/Master/texmf-dist/tex/context/base/l-string.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-string.lua
@@ -192,10 +192,11 @@ string.itself = function(s) return s end
-- also handy (see utf variant)
-local pattern = Ct(C(1)^0) -- string and not utf !
+local pattern_c = Ct( C(1) ^0) -- string and not utf !
+local pattern_b = Ct((C(1)/byte)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
-- handy from within tex:
diff --git a/Master/texmf-dist/tex/context/base/l-table.lua b/Master/texmf-dist/tex/context/base/mkiv/l-table.lua
index b02f210cb94..552097e1c10 100644
--- a/Master/texmf-dist/tex/context/base/l-table.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-table.lua
@@ -1144,7 +1144,7 @@ function table.print(t,...)
end
if setinspector then
- setinspector(function(v) if type(v) == "table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v) == "table" then serialize(print,v,"table") return true end end)
end
-- -- -- obsolete but we keep them for a while and might comment them later -- -- --
diff --git a/Master/texmf-dist/tex/context/base/l-unicode.lua b/Master/texmf-dist/tex/context/base/mkiv/l-unicode.lua
index 70b60324ac2..3dec8001345 100644
--- a/Master/texmf-dist/tex/context/base/l-unicode.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-unicode.lua
@@ -528,9 +528,10 @@ end
-- end, pattern
-- end
-function utf.remapper(mapping,option) -- static also returns a pattern
+function utf.remapper(mapping,option,action) -- static also returns a pattern
local variant = type(mapping)
if variant == "table" then
+ action = action or mapping
if option == "dynamic" then
local pattern = false
table.setmetatablenewindex(mapping,function(t,k,v) rawset(t,k,v) pattern = false end)
@@ -539,16 +540,16 @@ function utf.remapper(mapping,option) -- static also returns a pattern
return ""
else
if not pattern then
- pattern = Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ pattern = Cs((tabletopattern(mapping)/action + p_utf8char)^0)
end
return lpegmatch(pattern,str)
end
end
elseif option == "pattern" then
- return Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ return Cs((tabletopattern(mapping)/action + p_utf8char)^0)
-- elseif option == "static" then
else
- local pattern = Cs((tabletopattern(mapping)/mapping + p_utf8char)^0)
+ local pattern = Cs((tabletopattern(mapping)/action + p_utf8char)^0)
return function(str)
if not str or str == "" then
return ""
diff --git a/Master/texmf-dist/tex/context/base/l-url.lua b/Master/texmf-dist/tex/context/base/mkiv/l-url.lua
index b189ec5bba8..b189ec5bba8 100644
--- a/Master/texmf-dist/tex/context/base/l-url.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-url.lua
diff --git a/Master/texmf-dist/tex/context/base/l-xml.lua b/Master/texmf-dist/tex/context/base/mkiv/l-xml.lua
index 14e97337b25..14e97337b25 100644
--- a/Master/texmf-dist/tex/context/base/l-xml.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/l-xml.lua
diff --git a/Master/texmf-dist/tex/context/base/lang-def.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-def.lua
index c0c3981f7df..c0c3981f7df 100644
--- a/Master/texmf-dist/tex/context/base/lang-def.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-def.lua
diff --git a/Master/texmf-dist/tex/context/base/lang-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-def.mkiv
index c2fb9640cd6..e4906096e0e 100644
--- a/Master/texmf-dist/tex/context/base/lang-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-def.mkiv
@@ -171,7 +171,12 @@
[\c!default=\s!en,
\s!patterns=\s!gb,
\s!lefthyphenmin=3,
- \s!righthyphenmin=3]
+ \s!righthyphenmin=3,
+ % the reverse of american (or maybe the american did it the reverse)
+ \c!leftquote=\upperleftdoublesixquote,
+ \c!rightquote=\upperrightdoubleninequote,
+ \c!leftquotation=\upperleftsinglesixquote,
+ \c!rightquotation=\upperrightsingleninequote]
\installlanguage
[en-us]
@@ -591,6 +596,10 @@
\c!rightquotation=\upperrightdoubleninequote,
\c!date={\v!day,\space,\v!month,\space,\v!year}]
+\installlanguage % ancient latin
+ [\s!ala]
+ [\c!default=\s!la]
+
\installlanguage
[\s!pt]
[\c!spacing=\v!packed,
@@ -631,8 +640,6 @@
\installlanguage [\s!portuguese] [\s!pt]
\installlanguage [\s!romanian] [\s!ro]
-\defineconversion [\s!fr] [\v!day:mnem] [\frordinaldaynumber]
-
% Vietnamese Language
\installlanguage
diff --git a/Master/texmf-dist/tex/context/base/lang-dis.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-dis.lua
index db19a0fc5b8..84d9b2d5ba8 100644
--- a/Master/texmf-dist/tex/context/base/lang-dis.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-dis.lua
@@ -25,7 +25,11 @@ local getid = nuts.getid
local getfont = nuts.getfont
local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
+local setsubtype = nuts.setsubtype
local getchar = nuts.getchar
+local getdisc = nuts.getdisc
+local setdisc = nuts.setdisc
+local isglyph = nuts.isglyph
local copy_node = nuts.copy
local free_node = nuts.free
@@ -45,6 +49,8 @@ local setattribute = tex.setattribute
local getlanguagedata = languages.getdata
+local check_regular = true
+
local expanders = {
[disccodes.discretionary] = function(d,template)
-- \discretionary
@@ -52,15 +58,25 @@ local expanders = {
end,
[disccodes.explicit] = function(d,template)
-- \-
- local pre = getfield(d,"pre")
- if pre and getid(pre) == glyph_code and getchar(pre) <= 0 then
- setfield(d,"pre",nil)
+ local pre, post, replace = getdisc(d)
+ local done = false
+ if pre then
+ local char = isglyph(pre)
+ if char and char <= 0 then
+ done = true
+ pre = nil
+ end
+ end
+ if post then
+ local char = isglyph(post)
+ if char and char <= 0 then
+ done = true
+ post = nil
+ end
end
- local post = getfield(d,"post")
- if post and getid(post) == glyph_code and getchar(post) <= 0 then
- setfield(d,"post",nil)
+ if done then
+ setdisc(d,pre,post,replace,discretionary_code,tex.exhyphenpenalty)
end
--- setfield(d,"subtype",discretionary_code) -- to be checked
return template
end,
[disccodes.automatic] = function(d,template)
@@ -68,7 +84,8 @@ local expanders = {
-- so we have pre=preex and post=postex .. however, the previous
-- hyphen is already injected ... downside: the font handler sees this
-- so this is another argument for doing a hyphenation pass in context
- if getfield(d,"pre") then
+ local pre, post, replace = getdisc(d)
+ if pre then
-- we have a preex characters and want that one to replace the
-- character in front which is the trigger
if not template then
@@ -86,51 +103,63 @@ local expanders = {
if pseudohead then
while template ~= d do
pseudohead, template, removed = remove_node(pseudohead,template)
- setfield(d,"replace",removed)
+ -- free old replace ?
+ replace = removed
-- break ?
end
else
-- can't happen
end
- setfield(d,"subtype",discretionary_code)
+ setdisc(d,pre,post,replace,discretionary_code,tex.hyphenpenalty)
else
-- print("lone regular discretionary ignored")
end
+ else
+ setdisc(d,pre,post,replace,discretionary_code,tex.hyphenpenalty)
end
return template
end,
[disccodes.regular] = function(d,template)
- -- simple
- if not template then
- -- can there be font kerns already?
- template = getprev(d)
- if template and getid(template) ~= glyph_code then
- template = getnext(d)
+ if check_regular then
+ -- simple
+ if not template then
+ -- can there be font kerns already?
+ template = getprev(d)
if template and getid(template) ~= glyph_code then
- template = nil
+ template = getnext(d)
+ if template and getid(template) ~= glyph_code then
+ template = nil
+ end
end
end
- end
- if template then
- local language = template and getfield(template,"lang")
- local data = getlanguagedata(language)
- local prechar = data.prehyphenchar
- local postchar = data.posthyphenchar
- if prechar and prechar > 0 then
- local c = copy_node(template)
- setfield(c,"char",prechar)
- setfield(d,"pre",c)
- end
- if postchar and postchar > 0 then
- local c = copy_node(template)
- setfield(c,"char",postchar)
- setfield(d,"post",c)
+ if template then
+ local language = template and getfield(template,"lang")
+ local data = getlanguagedata(language)
+ local prechar = data.prehyphenchar
+ local postchar = data.posthyphenchar
+ local pre, post, replace = getdisc(d) -- pre can be set
+ local done = false
+ if prechar and prechar > 0 then
+ done = true
+ pre = copy_node(template)
+ setchar(pre,prechar)
+ end
+ if postchar and postchar > 0 then
+ done = true
+ post = copy_node(template)
+ setchar(post,postchar)
+ end
+ if done then
+ setdisc(d,pre,post,replace,discretionary_code,tex.hyphenpenalty)
+ end
+ else
+ -- print("lone regular discretionary ignored")
end
- setfield(d,"subtype",discretionary_code)
+ return template
else
- -- print("lone regular discretionary ignored")
+ -- maybe also set penalty here
+ setsubtype(d,discretionary_code)
end
- return template
end,
[disccodes.first] = function()
-- forget about them
@@ -156,9 +185,7 @@ local setlistcolor = nodes.tracers.colors.setlist
function languages.visualizediscretionaries(head)
for d in traverse_id(disc_code,tonut(head)) do
if getattr(d,a_visualize) then
- local pre = getfield(d,"pre")
- local post = getfield(d,"post")
- local replace = getfield(d,"replace")
+ local pre, post, replace = getdisc(d)
if pre then
setlistcolor(pre,"darkred")
end
@@ -194,10 +221,11 @@ interfaces.implement {
local toutf = nodes.listtoutf
function languages.serializediscretionary(d) -- will move to tracer
+ local pre, post, replace = getdisc(d)
return string.formatters["{%s}{%s}{%s}"](
- toutf(getfield(d,"pre")) or "",
- toutf(getfield(d,"post")) or "",
- toutf(getfield(d,"replace")) or ""
+ pre and toutf(pre) or "",
+ post and toutf(post) or "",
+ replace and toutf(replace) or ""
)
end
diff --git a/Master/texmf-dist/tex/context/base/lang-frd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-frd.mkiv
index 352e5016dec..352e5016dec 100644
--- a/Master/texmf-dist/tex/context/base/lang-frd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-frd.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lang-frq-de.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-de.lua
new file mode 100644
index 00000000000..5f5794258fb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-de.lua
@@ -0,0 +1,12 @@
+return {
+ language = "de",
+ source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm",
+ frequencies = {
+ [0x61] = 6.47, [0x62] = 1.93, [0x63] = 2.68, [0x64] = 4.83, [0x65] = 17.48,
+ [0x66] = 1.65, [0x67] = 3.06, [0x68] = 4.23, [0x69] = 7.73, [0x6A] = 0.27,
+ [0x6B] = 1.46, [0x6C] = 3.49, [0x6D] = 2.58, [0x6E] = 9.84, [0x6F] = 2.98,
+ [0x70] = 0.96, [0x71] = 0.02, [0x72] = 7.54, [0x73] = 6.83, [0x74] = 6.13,
+ [0x75] = 4.17, [0x76] = 0.94, [0x77] = 1.48, [0x78] = 0.04, [0x79] = 0.08,
+ [0x7A] = 1.14,
+ }
+}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lang-frq-en.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-en.lua
new file mode 100644
index 00000000000..5d2cfed4f9d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-en.lua
@@ -0,0 +1,26 @@
+-- return {
+-- language = "en",
+-- source = "http://caislab.icu.ac.kr/course/2001/spring/ice605/down/010306.pdf",
+-- frequencies = {
+-- [0x61] = 8.2, [0x62] = 1.5, [0x63] = 2.8, [0x64] = 4.3, [0x65] = 12.7,
+-- [0x66] = 2.2, [0x67] = 2.0, [0x68] = 6.1, [0x69] = 7.0, [0x6A] = 0.2,
+-- [0x6B] = 0.8, [0x6C] = 4.0, [0x6D] = 2.4, [0x6E] = 6.7, [0x6F] = 7.5,
+-- [0x70] = 1.9, [0x71] = 0.1, [0x72] = 6.0, [0x73] = 6.3, [0x74] = 9.1,
+-- [0x75] = 2.8, [0x76] = 1.0, [0x77] = 2.3, [0x78] = 0.1, [0x79] = 2.0,
+-- [0x7A] = 0.1,
+-- }
+-- }
+
+return {
+ language = "en",
+ source = "http://www.blankenburg.de/gat/pages/fach/info/analyse2.htm",
+ frequencies = {
+ [0x61] = 8.04, [0x62] = 1.54, [0x63] = 3.06, [0x64] = 3.99, [0x65] = 12.51,
+ [0x66] = 2.30, [0x67] = 1.96, [0x68] = 5.49, [0x69] = 7.26, [0x6A] = 0.16,
+ [0x6B] = 0.67, [0x6C] = 4.14, [0x6D] = 2.53, [0x6E] = 7.09, [0x6F] = 7.60,
+ [0x70] = 2.00, [0x71] = 0.11, [0x72] = 6.12, [0x73] = 6.54, [0x74] = 9.25,
+ [0x75] = 2.71, [0x76] = 0.99, [0x77] = 1.92, [0x78] = 0.19, [0x79] = 1.73,
+ [0x7A] = 0.09,
+ }
+}
+
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lang-frq-nl.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-nl.lua
new file mode 100644
index 00000000000..a7ba75376eb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-frq-nl.lua
@@ -0,0 +1,12 @@
+return {
+ language = "nl",
+ source = "http://www.onzetaal.nl/advies/letterfreq.html",
+ frequencies = {
+ [0x61] = 7.47, [0x62] = 1.58, [0x63] = 1.24, [0x64] = 5.93, [0x65] = 18.91,
+ [0x66] = 0.81, [0x67] = 3.40, [0x68] = 2.38, [0x69] = 6.50, [0x6A] = 1.46,
+ [0x6B] = 2.25, [0x6C] = 3.57, [0x6D] = 2.21, [0x6E] = 10.03, [0x6F] = 6.06,
+ [0x70] = 1.57, [0x71] = 0.009, [0x72] = 6.41, [0x73] = 3.73, [0x74] = 6.79,
+ [0x75] = 1.99, [0x76] = 2.85, [0x77] = 1.52, [0x78] = 0.04, [0x79] = 0.035,
+ [0x7A] = 1.39,
+ }
+}
diff --git a/Master/texmf-dist/tex/context/base/lang-frq.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-frq.mkiv
index eaa93281a92..eaa93281a92 100644
--- a/Master/texmf-dist/tex/context/base/lang-frq.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-frq.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lang-hyp.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-hyp.lua
index 496cfd19b43..146aea4a85c 100644
--- a/Master/texmf-dist/tex/context/base/lang-hyp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-hyp.lua
@@ -7,6 +7,9 @@ if not modules then modules = { } end modules ['lang-hyp'] = {
}
-- todo: hyphenate over range if needed
+-- todo: check boundary nodes
+
+-- setattr: helper for full attr
-- to be considered: reset dictionary.hyphenated when a pattern is added
-- or maybe an explicit reset of the cache
@@ -224,7 +227,7 @@ local function show_log()
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])
+ report("%s%w%S %S",s[1],w - #s[1] + 3,s[2],s[3] or "")
end
report()
end
@@ -328,9 +331,11 @@ local function hyphenate(dictionary,word,n) -- odd is okay
end
local l = 1
local w = { "." }
+ -- local d = dictionary.codehash or lcchars[c]
for i=1,n do
local c = word[i]
l = l + 1
+ -- w[l] = d[c] or c -- needs testing
w[l] = lcchars[c] or c
end
l = l + 1
@@ -359,8 +364,8 @@ local function hyphenate(dictionary,word,n) -- odd is okay
show_1(w)
end
--
- local specials = dictionary.specials
- local patterns = dictionary.patterns
+ local specials = dictionary.specials
+ local patterns = dictionary.patterns
--
-- inspect(specials)
local spec
@@ -608,17 +613,22 @@ if context then
local new_disc = nodepool.disc
local new_glyph = nodepool.glyph
+ local new_penalty = nodepool.penalty
- local setfield = nuts.setfield
local getfield = nuts.getfield
local getfont = nuts.getfont
- local getchar = nuts.getchar
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 isglyph = nuts.isglyph
+
+ local setfield = nuts.setfield
+ local setchar = nuts.setchar
+ local setdisc = nuts.setdisc
+
local insert_before = nuts.insert_before
local insert_after = nuts.insert_after
local copy_node = nuts.copy
@@ -632,6 +642,7 @@ if context then
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
@@ -644,10 +655,10 @@ if context then
local preexhyphenchar = lang.preexhyphenchar
local postexhyphenchar = lang.postexhyphenchar
- local lccodes = characters.lccodes
-
local a_hyphenation = attributes.private("hyphenation")
+ local interwordpenalty = 5000
+
function traditional.loadpatterns(language)
return dictionaries[language]
end
@@ -818,15 +829,16 @@ if context then
local joinerchars = featureset.joiners
local alternative = featureset.alternative
local rightwordmin = tonumber(featureset.rightwordmin)
- local charmin = tonumber(featureset.charmin)
+ local charmin = tonumber(featureset.charmin) -- luatex now also has hyphenationmin
local leftcharmin = tonumber(featureset.leftcharmin)
local rightcharmin = tonumber(featureset.rightcharmin)
local rightedge = featureset.rightedge
local leftchar = somehyphenchar(featureset.leftchar)
local rightchar = somehyphenchar(featureset.rightchar)
- --
- joinerchars = joinerchars == v_yes and defaultjoiners or joinerchars
- hyphenchars = hyphenchars == v_yes and defaulthyphens or hyphenchars
+ local rightchars = featureset.rightchars
+ rightchars = rightchars == v_word and true or tonumber(rightchars)
+ joinerchars = joinerchars == v_yes and defaultjoiners or joinerchars
+ hyphenchars = hyphenchars == v_yes and defaulthyphens or hyphenchars
-- 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 "")
@@ -835,6 +847,7 @@ if context then
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'
@@ -879,6 +892,7 @@ if context then
{ "characters" },
{ "hyphens" },
{ "joiners" },
+ { "rightchars" },
{ "rightwordmin", "integer" },
{ "charmin", "integer" },
{ "leftcharmin", "integer" },
@@ -949,39 +963,41 @@ if context then
function traditional.hyphenate(head)
- local first = tonut(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 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 leftchar = nil
- local rightchar = nil
- local attr = nil
- local lastwordlast = nil
- local hyphenated = hyphenate
- local strict = nil
+ local first = tonut(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 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
+ local strict = nil
+ local hyphenpenalty = tex.hyphenpenalty
-- 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
@@ -995,6 +1011,16 @@ if context then
starttiming(traditional)
+ local function insertpenalty()
+ local p = new_penalty(interwordpenalty)
+ setfield(p,"attr",getfield(last,"attr"))
+ 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
@@ -1008,6 +1034,7 @@ if context then
leftchar = f.leftchar
rightchar = f.rightchar
strict = f.strict and strictids
+ rightchars = f.rightchars
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
@@ -1015,16 +1042,25 @@ if context then
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,"darkred")
+ 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
@@ -1122,7 +1158,7 @@ if context then
return
elseif replacement == true then
local glyph = copy_node(stop)
- setfield(glyph,"char",leftchar or rightchar)
+ setchar(glyph,leftchar or rightchar)
return glyph
end
local head = nil
@@ -1130,12 +1166,12 @@ if context then
if leftchar then
head = copy_node(stop)
current = head
- setfield(head,"char",leftchar)
+ setchar(head,leftchar)
end
local rsize = #replacement
if rsize == 1 then
local glyph = copy_node(stop)
- setfield(glyph,"char",characters[replacement])
+ setchar(glyph,characters[replacement])
if head then
insert_after(current,current,glyph)
else
@@ -1146,7 +1182,7 @@ if context 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)
- setfield(glyph,"char",characters[list[i]])
+ setchar(glyph,characters[list[i]])
if head then
insert_after(current,current,glyph)
else
@@ -1158,7 +1194,7 @@ if context then
if rightchar then
local glyph = copy_node(stop)
insert_after(current,current,glyph)
- setfield(glyph,"char",rightchar)
+ setchar(glyph,rightchar)
end
return head
end
@@ -1171,12 +1207,15 @@ if context then
local r = result[i]
if r == true then
local disc = new_disc()
+ local pre = nil
+ local post = nil
if rightchar then
- setfield(disc,"pre",serialize(true,rightchar))
+ pre = serialize(true,rightchar)
end
if leftchar then
- setfield(disc,"post",serialize(true,leftchar))
+ post = serialize(true,leftchar)
end
+ setdisc(disc,pre,post,nil,discretionary_code,hyphenpenalty)
if attributes then
setfield(disc,"attr",attributes)
end
@@ -1189,21 +1228,34 @@ if context then
local replace = r[3]
local right = r[4] ~= false and rightchar
local left = r[5] ~= false and leftchar
- if pre and pre ~= "" then
- setfield(disc,"pre",serialize(pre,false,right))
+ if pre then
+ if pre ~= "" then
+ pre = serialize(pre,false,right)
+ else
+ pre = nil
+ end
end
- if post and post ~= "" then
- setfield(disc,"post",serialize(post,left,false))
+ if post then
+ if post ~= "" then
+ post = serialize(post,left,false)
+ else
+ post = nil
+ end
end
- if replace and replace ~= "" then
- setfield(disc,"replace",serialize(replace))
+ if replace then
+ if replace ~= "" then
+ replace = serialize(replace)
+ else
+ replace = nil
+ end
end
+ setdisc(disc,pre,post,replace,discretionary_code,hyphenpenalty)
if attributes then
setfield(disc,"attr",attributes)
end
insert_before(first,current,disc)
else
- setfield(current,"char",characters[r])
+ setchar(current,characters[r])
if i < rsize then
current = getnext(current)
end
@@ -1228,20 +1280,21 @@ if context then
setcolor(glyph,"darkred") -- these get checked
setcolor(disc,"darkgreen") -- in the colorizer
end
- setfield(disc,"replace",glyph)
+ local pre = mil
+ local post = nil
+ local replace = glyph
if not leftchar then
leftchar = code
end
if rightchar then
- local glyph = copy_node(glyph)
- setfield(glyph,"char",rightchar)
- setfield(disc,"pre",glyph)
+ pre = copy_node(glyph)
+ setchar(pre,rightchar)
end
if leftchar then
- local glyph = copy_node(glyph)
- setfield(glyph,"char",leftchar)
- setfield(disc,"post",glyph)
+ post = copy_node(glyph)
+ setchar(post,leftchar)
end
+ setdisc(disc,pre,post,replace,discretionary_code,hyphenpenalty)
if attributes then
setfield(disc,"attr",attributes)
end
@@ -1261,9 +1314,8 @@ if context then
-- for extensions.
while current and current ~= last do -- and current
- local id = getid(current)
- if id == glyph_code then
- local code = getchar(current)
+ local code, id = isglyph(current)
+ if code then
local lang = getfield(current,"lang")
if lang ~= language then
if dictionary and size > charmin and leftmin + rightmin <= size then
diff --git a/Master/texmf-dist/tex/context/base/lang-hyp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-hyp.mkiv
index 927f5a0576f..ca911338623 100644
--- a/Master/texmf-dist/tex/context/base/lang-hyp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-hyp.mkiv
@@ -107,6 +107,7 @@
\letdummyparameter\s!righthyphenchar\zerocount
\letdummyparameter\c!alternative\empty
\letdummyparameter\c!rightedge\empty
+ \letdummyparameter\c!rightchars\empty
\getdummyparameters[#2]%
\clf_definehyphenationfeatures
{#1}%
@@ -115,6 +116,7 @@
hyphens {\dummyparameter\c!hyphens}%
joiners {\dummyparameter\c!joiners}%
rightwordmin \numexpr\dummyparameter\c!rightwords\relax
+ rightchars {\dummyparameter\c!rightchars}%
charmin \numexpr\dummyparameter\s!hyphenmin\relax
leftcharmin \numexpr\dummyparameter\s!lefthyphenmin\relax
rightcharmin \numexpr\dummyparameter\s!righthyphenmin\relax
@@ -129,6 +131,11 @@
\unexpanded\def\sethyphenationfeatures[#1]%
{\clf_sethyphenationfeatures{#1}}
+\unexpanded\def\resethyphenationfeatures
+ {\hyphenationattribute\attributeunsetvalue}
+
+\resethyphenationfeatures
+
% todo: \start ... \stop too
\unexpanded\def\registerhyphenationpattern
@@ -162,10 +169,10 @@
\unexpanded\def\atleastoneword#1%
{\begingroup
- \starthyphenation[\c!method=traditional]% this might become default or a faster switch
+ \starthyphenation[traditional]% this might become default or a faster switch
\sethyphenationfeatures[words]%
#1\par
- \stopthyphenation
+ \stophyphenation
\endgroup}
%D For me:
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-ini.lua
index d75a665e2be..eb7e32b89f3 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-ini.lua
@@ -16,10 +16,13 @@ if not modules then modules = { } end modules ['lang-ini'] = {
--~ lang:hyphenation(string) string = lang:hyphenation() lang:clear_hyphenation()
+-- todo: no foo:bar but foo(bar,...)
+
local type, tonumber = type, tonumber
local utfbyte = utf.byte
local format, gsub = string.format, string.gsub
local concat, sortedkeys, sortedpairs = table.concat, table.sortedkeys, table.sortedpairs
+local utfbytes, strip = string.utfvalues, string.strip
local context = context
local commands = commands
@@ -31,33 +34,37 @@ local trace_patterns = false trackers.register("languages.patterns", function(v
local report_initialization = logs.reporter("languages","initialization")
+local lang = lang
+
local prehyphenchar = lang.prehyphenchar -- global per language
local posthyphenchar = lang.posthyphenchar -- global per language
local preexhyphenchar = lang.preexhyphenchar -- global per language
local postexhyphenchar = lang.postexhyphenchar -- global per language
local lefthyphenmin = lang.lefthyphenmin
local righthyphenmin = lang.righthyphenmin
+local sethjcode = lang.sethjcode
+
+local uccodes = characters.uccodes
-local lang = lang
-lang.exceptions = lang.hyphenation
-local new_langage = lang.new
+lang.exceptions = lang.hyphenation
+local new_langage = lang.new
-languages = languages or {}
-local languages = languages
+languages = languages or {}
+local languages = languages
-languages.version = 1.010
+languages.version = 1.010
-languages.registered = languages.registered or { }
-local registered = languages.registered
+languages.registered = languages.registered or { }
+local registered = languages.registered
-languages.associated = languages.associated or { }
-local associated = languages.associated
+languages.associated = languages.associated or { }
+local associated = languages.associated
-languages.numbers = languages.numbers or { }
-local numbers = languages.numbers
+languages.numbers = languages.numbers or { }
+local numbers = languages.numbers
-languages.data = languages.data or { }
-local data = languages.data
+languages.data = languages.data or { }
+local data = languages.data
storage.register("languages/registered",registered,"languages.registered")
storage.register("languages/associated",associated,"languages.associated")
@@ -107,7 +114,8 @@ end
-- patterns=en
-- patterns=en,de
-local function validdata(dataset,what,tag)
+local function validdata(loaded,what,tag)
+ local dataset = loaded[what]
if dataset then
local data = dataset.data
if not data or data == "" then
@@ -124,6 +132,31 @@ local function validdata(dataset,what,tag)
end
end
+local function sethjcodes(instance,loaded,what)
+ local l = loaded[what]
+ local c = l and l.characters
+ if c then
+ local h = l.codehash
+ if not h then
+ h = { }
+ l.codehash = h
+ end
+ local s = tex.savinghyphcodes
+ tex.savinghyphcodes = 0
+ for l in utfbytes(c) do
+ local u = uccodes[l]
+ sethjcode(instance,l,l)
+ h[l] = l
+ if type(u) == "number" then
+ -- we don't want ß -> SS
+ sethjcode(instance,u,l)
+ h[u] = l
+ end
+ end
+ tex.savinghyphcodes = s
+ end
+end
+
local function loaddefinitions(tag,specification)
statistics.starttiming(languages)
local data, instance = resolve(tag)
@@ -160,12 +193,11 @@ local function loaddefinitions(tag,specification)
local loaded = table.load(fullname,gzipped and gzip.load)
if loaded then -- todo: version test
ok, nofloaded = true, nofloaded + 1
- -- instance:patterns (loaded.patterns and resources.patterns .data or "")
- -- instance:hyphenation(loaded.exceptions and resources.exceptions.data or "")
- instance:patterns (validdata(loaded.patterns, "patterns", tag) or "")
- instance:hyphenation(validdata(loaded.exceptions,"exceptions",tag) or "")
+ sethjcodes(instance,loaded,"patterns")
+ sethjcodes(instance,loaded,"exceptions")
+ instance:patterns (validdata(loaded,"patterns", tag) or "")
+ instance:hyphenation(validdata(loaded,"exceptions",tag) or "")
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
@@ -333,7 +365,7 @@ end
function languages.setexceptions(tag,str)
local data, instance = resolve(tag)
if data then
- instance:hyphenation(string.strip(str)) -- we need to strip leading spaces
+ instance:hyphenation(strip(str)) -- we need to strip leading spaces
end
end
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-ini.mkiv
index 335d6d1c9d0..8ff41b28792 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-ini.mkiv
@@ -86,51 +86,87 @@
\installcorenamespace{language}
\installcorenamespace{languagelinked}
+\def\currentusedlanguage{\currentlanguage}
+
\def\defaultlanguage#1%
{\ifcsname\??language#1\s!default\endcsname
- \expandafter\defaultlanguage\csname\??language#1\s!default\endcsname
+ \expandafter\defaultlanguage\lastnamedcs
\else
#1%
\fi}
+% \def\languageparameter#1%
+% {\ifcsname\??language\currentlanguage#1\endcsname
+% \csname\??language\currentlanguage#1\endcsname
+% \else\ifcsname\??language\currentlanguage\s!default\endcsname
+% \expandafter\specificlanguageparameter\csname\??language\currentlanguage\s!default\endcsname{#1}%
+% \else\ifcsname\??language\s!default#1\endcsname
+% \csname\??language\s!default#1\endcsname
+% \fi\fi\fi}
+%
+% \def\specificlanguageparameter#1#2%
+% {\ifcsname\??language#1#2\endcsname
+% \csname\??language#1#2\endcsname
+% \else\ifcsname\??language#1\s!default\endcsname
+% \expandafter\specificlanguageparameter\csname\??language#1\s!default\endcsname{#2}%
+% \else\ifcsname\??language\s!default#2\endcsname
+% \csname\??language\s!default#2\endcsname
+% \fi\fi\fi}
+%
+% \def\mainlanguageparameter#1%
+% {\ifcsname\??language\currentmainlanguage#1\endcsname
+% \csname\??language\currentmainlanguage#1\endcsname
+% \else\ifcsname\??language\currentmainlanguage\s!default\endcsname
+% \expandafter\specificlanguageparameter\csname\??language\currentmainlanguage\s!default\endcsname{#1}%
+% \else\ifcsname\??language\s!default#1\endcsname
+% \csname\??language\s!default#1\endcsname
+% \fi\fi\fi}
+
\def\languageparameter#1%
{\ifcsname\??language\currentlanguage#1\endcsname
- \csname\??language\currentlanguage#1\endcsname
+ \lastnamedcs
\else\ifcsname\??language\currentlanguage\s!default\endcsname
- \expandafter\specificlanguageparameter\csname\??language\currentlanguage\s!default\endcsname{#1}%
+ \expandafter\specificlanguageparameter\lastnamedcs{#1}%
\else\ifcsname\??language\s!default#1\endcsname
- \csname\??language\s!default#1\endcsname
+ \lastnamedcs
\fi\fi\fi}
\def\specificlanguageparameter#1#2%
{\ifcsname\??language#1#2\endcsname
- \csname\??language#1#2\endcsname
+ \lastnamedcs
\else\ifcsname\??language#1\s!default\endcsname
- \expandafter\specificlanguageparameter\csname\??language#1\s!default\endcsname{#2}%
+ \expandafter\specificlanguageparameter\lastnamedcs{#2}%
\else\ifcsname\??language\s!default#2\endcsname
- \csname\??language\s!default#2\endcsname
+ \lastnamedcs
\fi\fi\fi}
\def\mainlanguageparameter#1%
{\ifcsname\??language\currentmainlanguage#1\endcsname
- \csname\??language\currentmainlanguage#1\endcsname
+ \lastnamedcs
\else\ifcsname\??language\currentmainlanguage\s!default\endcsname
- \expandafter\specificlanguageparameter\csname\??language\currentmainlanguage\s!default\endcsname{#1}%
+ \expandafter\specificlanguageparameter\lastnamedcs{#1}%
\else\ifcsname\??language\s!default#1\endcsname
- \csname\??language\s!default#1\endcsname
+ \lastnamedcs
\fi\fi\fi}
-\def\currentusedlanguage{\currentlanguage}
-
\let\usedlanguageparameter\languageparameter
+% \def\askedlanguageparameter#1% assumes \currentusedlanguage being set
+% {\ifcsname\??language\currentusedlanguage#1\endcsname
+% \csname\??language\currentusedlanguage#1\endcsname
+% \else\ifcsname\??language\currentusedlanguage\s!default\endcsname
+% \expandafter\specificlanguageparameter\csname\??language\currentusedlanguage\s!default\endcsname{#1}%
+% \else\ifcsname\??language\s!default#1\endcsname
+% \csname\??language\s!default#1\endcsname
+% \fi\fi\fi}
+
\def\askedlanguageparameter#1% assumes \currentusedlanguage being set
{\ifcsname\??language\currentusedlanguage#1\endcsname
- \csname\??language\currentusedlanguage#1\endcsname
+ \lastnamedcs
\else\ifcsname\??language\currentusedlanguage\s!default\endcsname
- \expandafter\specificlanguageparameter\csname\??language\currentusedlanguage\s!default\endcsname{#1}%
+ \expandafter\specificlanguageparameter\lastnamedcs{#1}%
\else\ifcsname\??language\s!default#1\endcsname
- \csname\??language\s!default#1\endcsname
+ \lastnamedcs
\fi\fi\fi}
\unexpanded\def\setlanguageparameter#1%
@@ -223,7 +259,8 @@
\let\doiflanguageelse\doifelselanguage
\def\reallanguagetag#1%
- {\ifcsname\??languagelinked#1\endcsname\csname\??languagelinked#1\endcsname\else#1\fi}
+ %{\ifcsname\??languagelinked#1\endcsname\csname\??languagelinked#1\endcsname\else#1\fi}
+ {\ifcsname\??languagelinked#1\endcsname\lastnamedcs\else#1\fi}
% \language[#1] gave unwanted side effect of loading language specifics
@@ -485,6 +522,7 @@
{% these values are stored along with glyph nodes
\lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax
\righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax
+ \hyphenationmin\numexpr0\languageparameter\s!hyphenmin\relax
% these values are stored with the language (global!)
\prehyphenchar \languageparameter\s!righthyphenchar\relax
\posthyphenchar\languageparameter\s!lefthyphenchar \relax}
@@ -534,7 +572,7 @@
\appendtoks
\edef\p_language_font{\languageparameter\s!font}%
\ifx\p_language_font\v!auto
- \feature\currentlanguage
+ \doaddfeature\currentlanguage
\fi
\to \everylanguage
@@ -545,10 +583,22 @@
%D Fast switcher
+% \def\lang_basics_switch_asked
+% {\ifx\askedlanguage\empty \else
+% \ifcsname\??languagelinked\askedlanguage\endcsname
+% \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+% \ifx\currentlanguage\askedlanguage \else
+% \setcurrentlanguage\currentmainlanguage\askedlanguage
+% \lang_basics_synchronize
+% \fi
+% \fi
+% \fi}
+
\def\lang_basics_switch_asked
{\ifx\askedlanguage\empty \else
\ifcsname\??languagelinked\askedlanguage\endcsname
- \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+ %\edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+ \edef\askedlanguage{\lastnamedcs}%
\ifx\currentlanguage\askedlanguage \else
\setcurrentlanguage\currentmainlanguage\askedlanguage
\lang_basics_synchronize
@@ -573,11 +623,30 @@
\newcount\mainlanguagenumber
+% \unexpanded\def\mainlanguage[#1]%
+% {\edef\askedlanguage{#1}%
+% \ifx\askedlanguage\empty \else
+% \ifcsname\??languagelinked\askedlanguage\endcsname
+% \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+% \ifx\currentlanguage\askedlanguage
+% \ifx\currentmainlanguage\askedlanguage \else
+% \setcurrentlanguage\askedlanguage\askedlanguage
+% \lang_basics_synchronize
+% \fi
+% \else
+% \setcurrentlanguage\askedlanguage\askedlanguage
+% \lang_basics_synchronize
+% \fi
+% \fi
+% \fi
+% \mainlanguagenumber\normallanguage}
+
\unexpanded\def\mainlanguage[#1]%
{\edef\askedlanguage{#1}%
\ifx\askedlanguage\empty \else
\ifcsname\??languagelinked\askedlanguage\endcsname
- \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+ %\edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
+ \edef\askedlanguage{\lastnamedcs}%
\ifx\currentlanguage\askedlanguage
\ifx\currentmainlanguage\askedlanguage \else
\setcurrentlanguage\askedlanguage\askedlanguage
diff --git a/Master/texmf-dist/tex/context/base/lang-lab.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-lab.lua
index e90bee017cf..f5ae6de5ead 100644
--- a/Master/texmf-dist/tex/context/base/lang-lab.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-lab.lua
@@ -164,8 +164,8 @@ implement {
{
{ "text" },
{ "separators" },
- { "first" },
- { "second" },
+ { "separator" },
+ { "last" },
}
}
}
diff --git a/Master/texmf-dist/tex/context/base/lang-lab.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-lab.mkiv
index fbe3346dcff..26c10086f22 100644
--- a/Master/texmf-dist/tex/context/base/lang-lab.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-lab.mkiv
@@ -88,25 +88,26 @@
\setuvalue{start#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dotripleempty\lang_labels_text_prefix_start[#1]}%
\letvalue{stop#1text}\relax
\def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}%
- \ifnum#2=\plustwo
+ \ifnum#2=\plustwo % used for math and tags
\def#3{#5#4}%
\def#5##1##2% ##1=language
{\ifcsname\??label\currentlabelcategory#1:##1:##2\endcsname
- \csname\??label\currentlabelcategory#1:##1:##2\endcsname
+ \lastnamedcs
\else\ifcsname\??label#1:##1:##2\endcsname
- \csname\??label#1:##1:##2\endcsname
-% \else\ifcsname\??language#4\s!default\endcsname
-% \expandafter#5\csname\??language#4\s!default\endcsname{##2}%
+ \lastnamedcs
+ % \else\ifcsname\??language#4\s!default\endcsname
+ % \expandafter#5\csname\??language#4\s!default\endcsname{##2}%
\else\ifcsname\??language##1\s!default\endcsname
- \expandafter#5\csname\??language##1\s!default\endcsname{##2}%
+ %\expandafter#5\csname\??language##1\s!default\endcsname{##2}%
+ \expandafter#5\lastnamedcs{##2}%
\else\ifcsname\??label\currentlabelcategory#1:##2\endcsname
- \csname\??label\currentlabelcategory#1:##2\endcsname
+ \lastnamedcs
\else\ifcsname\??label#1:##2\endcsname
- \csname\??label#1:##2\endcsname
+ \lastnamedcs
\else\ifcsname\??label\currentlabelcategory#1:\s!en:##2\endcsname
- \csname\??label\currentlabelcategory#1:\s!en:##2\endcsname
+ \lastnamedcs
\else\ifcsname\??label#1:\s!en:##2\endcsname
- \csname\??label#1:\s!en:##2\endcsname
+ \lastnamedcs
\else
##2%
\fi\fi\fi\fi\fi\fi\fi}%
@@ -118,13 +119,17 @@
\unexpanded\def#3{#5#4}%
\unexpanded\def#5##1##2%
{\ifcsname\??label#1:##1:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??label#1:##1:##2\endcsname
+ %\expandafter\let\expandafter\thetextprefix\csname\??label#1:##1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\lastnamedcs
\else\ifcsname\??language#4\s!default\endcsname
- \expandafter#5\csname\??language#4\s!default\endcsname{##2}%
+ %\expandafter#5\csname\??language#4\s!default\endcsname{##2}%
+ \expandafter#5\lastnamedcs{##2}%
\else\ifcsname\??label#1:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??label#1:##2\endcsname
+ %\expandafter\let\expandafter\thetextprefix\csname\??label#1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\lastnamedcs
\else\ifcsname\??label#1:\s!en:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??label#1:\s!en:##2\endcsname
+ %\expandafter\let\expandafter\thetextprefix\csname\??label#1:\s!en:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\lastnamedcs
\else
\let\thetextprefix\dummytextprefix
\fi\fi\fi\fi}%
@@ -146,17 +151,13 @@
\def\dummytextprefix {\empty\empty}
%D \macros
-%D {headtext,
-%D labeltext, leftlabeltext, rightlabeltext, labeltexts,
-%D LABELTEXT, LEFTLABELTEXT, RIGHTLABELTEXT, LABELTEXTS}
+%D {headtext, labeltext, leftlabeltext, rightlabeltext, labeltexts}
%D
%D Once defined, head and label texts can be called upon using:
%D
%D \showsetup{headtext}
%D \showsetup{labeltext}
%D
-%D The latter one has an upcased alternative \type{\LABELTEXT}.
-%D
%D \macros
%D {presetheadtext,presetlabeltext}
%D
@@ -218,18 +219,34 @@
\let\m_lang_labels_left \empty
\let\m_lang_labels_right\empty
+% \def\lang_labels_text_prefix_assign_yes#1[#2,#3,#4]%
+% {\def\m_lang_labels_left {#2}% no longer an edef ... else \Word undefined expansion issues
+% \def\m_lang_labels_right{#3}% no longer an edef ... else \Word undefined expansion issues
+% \ifx\m_lang_labels_right\empty
+% \ifx\m_lang_labels_left\empty
+% \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}%
+% \else
+% \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}%
+% \fi
+% \else
+% \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}%
+% \fi}
+%
+% how we love obscure efficicency ...
+
\def\lang_labels_text_prefix_assign_yes#1[#2,#3,#4]%
{\def\m_lang_labels_left {#2}% no longer an edef ... else \Word undefined expansion issues
\def\m_lang_labels_right{#3}% no longer an edef ... else \Word undefined expansion issues
- \ifx\m_lang_labels_right\empty
- \ifx\m_lang_labels_left\empty
- \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}%
+ \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1%
+ \ifx\m_lang_labels_right\empty
+ \ifx\m_lang_labels_left\empty
+ \endcsname{\empty\empty}%
+ \else
+ \endcsname{{#2}\empty}%
+ \fi
\else
- \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}%
- \fi
- \else
- \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}%
- \fi}
+ \endcsname{{#2}{#3}}%
+ \fi}
\def\lang_labels_text_prefix_assign_nop#1[#2]%
{}
@@ -297,9 +314,9 @@
\def\lang_translate[#1]%
{\getparameters[\??translation][#1]%
\ifcsname\??translation\currentlanguage\endcsname
- \csname\??translation\currentlanguage\endcsname
+ \lastnamedcs
\else\ifcsname\??translation\s!en\endcsname
- \csname\??translation\s!en\endcsname
+ \lastnamedcs
\else
[translation #1]%
\fi\fi}
@@ -352,8 +369,8 @@
{\clf_concatcommalist
text {#1}%
separators {#2}%
- first {\detokenize\expandafter{\normalexpanded{\labeltext{and-1}}}}%
- second {\detokenize\expandafter{\normalexpanded{\labeltext{and-2}}}}%
+ separator {\detokenize\expandafter{\normalexpanded{\labeltext{and-1}}}}%
+ last {\detokenize\expandafter{\normalexpanded{\labeltext{and-2}}}}%
\relax}
\setuplabeltext [\s!nl] [and-1={{, }}, and-2={{ en }}] % 1, 2 en 3
@@ -361,4 +378,8 @@
\setuplabeltext [\s!de] [and-1={{, }}, and-2={{ und }}] % 1, 2 und 3
\setuplabeltext [\s!hr] [and-1={{, }}, and-2={{ i }}] % 1, 2 i 3
+%D Goodie (handy at \LUA\ end):
+
+\unexpanded\def\LABELTEXT#1{\WORD{\labeltext{#1}}} % only for simple cases!
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-mis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-mis.mkiv
index 2b886b3cec1..ada8f81ea6c 100644
--- a/Master/texmf-dist/tex/context/base/lang-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-mis.mkiv
@@ -186,6 +186,7 @@
\installcorenamespace{discretionarytext}
\installcorenamespace{discretionarymath}
\installcorenamespace{discretionaryboth}
+\installcorenamespace{discretionarymode}
\unexpanded\def\installdiscretionary#1#2%
{\setevalue{\??discretionarymath\detokenize{#1}}{\detokenize{#1}}% ?
@@ -194,8 +195,8 @@
\scratchcounter\expandafter`\detokenize{#1}%
\expandafter\uedcatcodecommand\expandafter\ctxcatcodes\expandafter\scratchcounter\csname\??discretionaryboth\detokenize{#1}\endcsname}
-\unexpanded\def\handlemathmodediscretionary#1{\executeifdefined{\??discretionarymath\detokenize{#1}}\donothing}
-\unexpanded\def\handletextmodediscretionary#1{\executeifdefined{\??discretionarytext\detokenize{#1}}\donothing}
+\unexpanded\def\handlemathmodediscretionary#1{\ifcsname\??discretionarymath\detokenize{#1}\endcsname\lastnamedcs}
+\unexpanded\def\handletextmodediscretionary#1{\ifcsname\??discretionarytext\detokenize{#1}\endcsname\lastnamedcs}
\unexpanded\def\installdiscretionaries#1#2{\writestatus\m!system{use \string \installdiscretionary}} % obsolete
@@ -206,17 +207,18 @@
\def\lang_discretionaries_command
{% if direct if, we need \relax for lookahead in math mode
- \csname
+ \csname\??discretionarymode
\ifcase\discretionarymode
- \strippedcsname\lang_discretionaries_process_none
+ n% \csstring\lang_discretionaries_process_none
\else\ifmmode
- \strippedcsname\lang_discretionaries_process_math
+ m% \csstring\lang_discretionaries_process_math
\else
- \strippedcsname\lang_discretionaries_process_text
+ t% \csstring\lang_discretionaries_process_text
\fi\fi
\endcsname}
-\def\lang_discretionaries_process_none#1%
+% \def\lang_discretionaries_process_none#1%
+\setvalue{\??discretionarymode n}#1%
{\detokenize{#1}}
%D The macro \type{\lang_discretionaries_check_before} takes care of loners like
@@ -252,9 +254,11 @@
\ifx :\nextnext \settrue \punctafterdiscretionary \else
\ifx ;\nextnext \settrue \punctafterdiscretionary \fi\fi\fi\fi\fi\fi}
-\let\lang_discretionaries_process_math\handlemathmodediscretionary
+%let\lang_discretionaries_process_math\handlemathmodediscretionary
+\letvalue{\??discretionarymode m}\handlemathmodediscretionary
-\def\lang_discretionaries_process_text#1% grouped !
+% \def\lang_discretionaries_process_text#1% grouped !
+\setvalue{\??discretionarymode t}#1%
{\bgroup
\let\nextnextnext\egroup
\def\next##1#1%
@@ -269,7 +273,7 @@
\ifx\discretionarytoken\empty
\ifx#1\nextnext % takes care of ||| and +++ and ......
\ifcsname\??discretionaryaction\string#1\endcsname
- \csname\??discretionaryaction\string#1\endcsname
+ \lastnamedcs
\else\ifconditional\spaceafterdiscretionary
\prewordbreak\hbox{\string#1}\relax
\else\ifconditional\punctafterdiscretionary
@@ -284,7 +288,7 @@
% \prewordbreak\hbox{\textmodediscretionary\nextnext}\allowbreak\postwordbreak
% but an hbox blocks a possible \discretionary
\ifcsname\??discretionaryaction\endcsname
- \csname\??discretionaryaction\endcsname
+ \lastnamedcs
\else\ifconditional\spaceafterdiscretionary
\prewordbreak\textmodediscretionary\relax
\else\ifconditional\punctafterdiscretionary
@@ -295,7 +299,7 @@
% \prewordbreak\textmodediscretionary\nextnext\allowbreak\postwordbreak
\fi
\else\ifcsname\??discretionaryaction\discretionarytoken\endcsname
- \csname\??discretionaryaction\discretionarytoken\endcsname
+ \lastnamedcs
\else
\lang_discretionaries_check_before
\ifconditional\spaceafterdiscretionary
@@ -315,29 +319,36 @@
%D use the more direct approach:
\unexpanded\def\directdiscretionary
- {\csname
+ {\csname\??discretionarymode
\ifcase\discretionarymode
- \strippedcsname\lang_discretionaries_process_none
+ n% \csstring\lang_discretionaries_process_none
\else
- \strippedcsname\lang_discretionaries_process_direct
+ d% \csstring\lang_discretionaries_process_direct
\fi
\endcsname}
\unexpanded\def\indirectdiscretionary
- {\csname
+ {\csname\??discretionarymode
\ifcase\discretionarymode
- \strippedcsname\lang_discretionaries_process_none
+ n% \csstring\lang_discretionaries_process_none
\else
- \strippedcsname\lang_discretionaries_process_indirect
+ i% \csstring\lang_discretionaries_process_indirect
\fi
\endcsname}
-\unexpanded\def\lang_discretionaries_process_direct#1%
+% \unexpanded\def\lang_discretionaries_process_direct#1%
+\setuvalue{\??discretionarymode d}#1%
{\edef\discretionarytoken{\detokenize{#1}}%
\let\textmodediscretionary\compoundhyphen
- \executeifdefined{\??discretionaryaction\discretionarytoken}{\indirectdiscretionary{#1}}}
+ %\executeifdefined{\??discretionaryaction\discretionarytoken}{\indirectdiscretionary{#1}}}
+ \ifcsname\??discretionaryaction\discretionarytoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\indirectdiscretionary
+ \fi{#1}}
-\unexpanded\unexpanded\def\lang_discretionaries_process_indirect#1%
+% \unexpanded\unexpanded\def\lang_discretionaries_process_indirect#1%
+\setuvalue{\??discretionarymode i}#1%
{\prewordbreak\discretionary{\hbox{#1}}{}{\hbox{#1}}\allowbreak\postwordbreak}
\unexpanded\def\definetextmodediscretionary #1
@@ -395,7 +406,7 @@
{\prewordbreak\discretionary{-}{}{'}\postwordbreak}
\definetextmodediscretionary ^
- {\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}%
+ {\prewordbreak\discretionary{\hbox{\normalstartimath|\normalstopimath}}{}{\hbox{\normalstartimath|\normalstopimath}}%
\allowbreak\postwordbreak} % bugged
\definetextmodediscretionary <
@@ -468,161 +479,175 @@
\discretionary{-}{}{}%
\fi\fi\fi}
-%D \macros
-%D {installcompoundcharacter}
-%D
-%D When Tobias Burnus started translating the dutch manual of \PPCHTEX\ into german,
-%D he suggested to let \CONTEXT\ support the \type{german.sty} method of handling
-%D compound characters, especially the umlaut. This package is meant for use with
-%D \PLAIN\ \TEX\ as well as \LATEX.
-%D
-%D I decided to implement compound character support as versatile as possible. As a
-%D result one can define his own compound character support, like:
-%D
-%D \starttyping
-%D \installcompoundcharacter "a {\"a}
-%D \installcompoundcharacter "e {\"e}
-%D \installcompoundcharacter "i {\"i}
-%D \installcompoundcharacter "u {\"u}
-%D \installcompoundcharacter "o {\"o}
-%D \installcompoundcharacter "s {\SS}
-%D \stoptyping
-%D
-%D or even
-%D
-%D \starttyping
-%D \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}}
-%D \installcompoundcharacter "ff {\discretionary{ff-}{f}{ff}}
-%D \stoptyping
-%D
-%D The support is not limited to alphabetic characters, so the next definition is
-%D also valid.
-%D
-%D \starttyping
-%D \installcompoundcharacter ". {.\doifnextcharelse{\spacetoken}{}{\kern.125em}}
-%D \stoptyping
-%D
-%D The implementation looks familiar and uses the same tricks as mentioned earlier
-%D in this module. We take care of two arguments, which complicates things a bit.
-
-\installcorenamespace{compoundnormal}
-\installcorenamespace{compoundsingle}
-\installcorenamespace{compoundmultiple}
-\installcorenamespace{compounddefinition}
-
-%D When I started working on \MKIV\ code, we needed a different approach for
-%D defining the active character itself. In \MKII\ as well as in \MKIV\ we now use
-%D the catcode vectors.
-
-\setnewconstant\compoundcharactermode\plusone
-
-\newcount\c_lang_compounds_character
-
-\def\installcompoundcharacter #1#2#3 #4% {#4} no grouping
- {\ifcase\compoundcharactermode
- % ignore mode
- \else
- \chardef\c_lang_compounds_character`#1%
- \expandafter\chardef\csname\??compoundnormal\string#1\endcsname\c_lang_compounds_character
- \def\!!stringa{#3}%
- \expandafter\def\csname\ifx\!!stringa\empty\??compoundsingle\else\??compoundmultiple\fi\detokenize{#1#2#3}\endcsname{#4}%
- \setevalue{\??compounddefinition\detokenize{#1}}{\noexpand\lang_compounds_handle_character{\detokenize{#1}}}% beter nr's
- \expandafter\letcatcodecommand\expandafter\ctxcatcodes\expandafter\c_lang_compounds_character\csname\??compounddefinition\detokenize{#1}\endcsname
- \fi}
-
-%D We can also ignore definitions (needed in for instance \XML). Beware, this macro
-%D is supposed to be used grouped!
-
-\def\ignorecompoundcharacter
- {\compoundcharactermode\zerocount}
-
-%D In handling the compound characters we have to take care of \type {\bgroup} and
-%D \type {\egroup} tokens, so we end up with a multi||step interpretation macro. We
-%D look ahead for a \type {\bgroup}, \type {\egroup} or \type {\blankspace}. Being
-%D no user of this mechanism, the credits for testing them goes to Tobias Burnus,
-%D the first german user of \CONTEXT.
-%D
-%D We need to look into the future with \type{\futurelet} to prevent spaces from
-%D disappearing.
-
-\def\lang_compounds_handle_character#1%
- {\def\lang_compounds_handle_character_finish{\lang_compounds_handle_character_finish_indeed{#1}}%
- \futurelet\nexttoken\xhandlecompoundcharacter}
-
-\def\lang_compounds_handle_character_finish_indeed
- {\ifx\nexttoken\bgroup
- %\expandafter\lang_compounds_handle_character_pickup % handle "{ee} -> \"ee
- %\expandafter\gobbleoneargument % forget "{ee} -> ee
- \expandafter\lang_compounds_handle_character_one % ignore "{ee} -> "ee
- \else\ifx\nexttoken\egroup
- \doubleexpandafter\lang_compounds_handle_character_normal
- \else\ifx\nexttoken\blankspace
- \tripleexpandafter\lang_compounds_handle_character_normal
- \else
- \tripleexpandafter\lang_compounds_handle_character_pickup
- \fi\fi\fi}
-
-\def\lang_compounds_handle_character_normal#1%
- {\csname\??compoundnormal\string#1\endcsname}
-
-\def\lang_compounds_handle_character_pickup#1#2% preserve space
- {\def\lang_compounds_handle_character_finish{\lang_compounds_handle_character_finish_indeed#1#2}%
- \futurelet\nexttoken\lang_compounds_handle_character_finish}
-
-\def\lang_compounds_handle_character_finish_indeed
- {\ifx\nexttoken\bgroup
- \expandafter\lang_compounds_handle_character_one
- \else\ifx\nexttoken\egroup
- \doubleexpandafter\lang_compounds_handle_character_one
- \else\ifx\nexttoken\blankspace
- \tripleexpandafter\lang_compounds_handle_character_one
- \else
- \tripleexpandafter\lang_compounds_handle_character_two
- \fi\fi\fi}
-
-%D Besides taken care of the grouping and space tokens, we have to deal with three
-%D situations. First we look if the next character equals the first one, if so, then
-%D we just insert the original. Next we look if indeed a compound character is
-%D defined. We either execute the compound character or just insert the first. So we
-%D have
-%D
-%D \starttyping
-%D <key><key> <key><known> <key><unknown>
-%D \stoptyping
-%D
-%D In later modules we will see how these commands are used.
-
-\def\lang_compounds_handle_character_one#1#2%
- {\if\string#1\string#2% was: \ifx#1#2%
- \def\next{\csname\??compoundnormal\string#1\endcsname}%
- \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
- \def\next{\csname\??compoundsingle\string#1\string#2\endcsname}%
- \else
- \def\next{\csname\??compoundnormal\string#1\endcsname#2}%
- \fi\fi
- \next}
-
-\def\lang_compounds_handle_character_two#1#2#3%
- {\if\string#1\string#2%
- \def\next{\csname\??compoundnormal\string#1\endcsname#3}%
- \else\ifcsname\??compoundmultiple\string#1\string#2\string#3\endcsname
- \def\next{\csname\??compoundmultiple\string#1\string#2\string#3\endcsname}%
- \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
- \def\next{\csname\??compoundsingle\string#1\string#2\endcsname#3}%
- \else
- \def\next{\csname\??compoundnormal\string#1\endcsname#2#3}%
- \fi\fi\fi
- \next}
-
-%D For very obscure applications (see for an application \type {lang-sla.tex}) we
-%D provide:
-
-\def\simplifiedcompoundcharacter#1#2%
- {\ifcsname\??compoundsingle\string#1\string#2\endcsname
- \doubleexpandafter\firstofoneargument\csname\??compoundsingle\string#1\string#2\endcsname
- \else
- #2%
- \fi}
+% As this is rather mkii-ish we keep the mkiv definition around for educational
+% purposes but consider this feature obsolete in post mkii versions.
+
+% %D \macros
+% %D {installcompoundcharacter}
+% %D
+% %D When Tobias Burnus started translating the dutch manual of \PPCHTEX\ into german,
+% %D he suggested to let \CONTEXT\ support the \type{german.sty} method of handling
+% %D compound characters, especially the umlaut. This package is meant for use with
+% %D \PLAIN\ \TEX\ as well as \LATEX.
+% %D
+% %D I decided to implement compound character support as versatile as possible. As a
+% %D result one can define his own compound character support, like:
+% %D
+% %D \starttyping
+% %D \installcompoundcharacter "a {\"a}
+% %D \installcompoundcharacter "e {\"e}
+% %D \installcompoundcharacter "i {\"i}
+% %D \installcompoundcharacter "u {\"u}
+% %D \installcompoundcharacter "o {\"o}
+% %D \installcompoundcharacter "s {\SS}
+% %D \stoptyping
+% %D
+% %D or even
+% %D
+% %D \starttyping
+% %D \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}}
+% %D \installcompoundcharacter "ff {\discretionary{ff-}{f}{ff}}
+% %D \stoptyping
+% %D
+% %D The support is not limited to alphabetic characters, so the next definition is
+% %D also valid.
+% %D
+% %D \starttyping
+% %D \installcompoundcharacter ". {.\doifnextcharelse{\spacetoken}{}{\kern.125em}}
+% %D \stoptyping
+% %D
+% %D The implementation looks familiar and uses the same tricks as mentioned earlier
+% %D in this module. We take care of two arguments, which complicates things a bit.
+%
+% \installcorenamespace{compoundnormal}
+% \installcorenamespace{compoundsingle}
+% \installcorenamespace{compoundmultiple}
+% \installcorenamespace{compounddefinition}
+%
+% %D When I started working on \MKIV\ code, we needed a different approach for
+% %D defining the active character itself. In \MKII\ as well as in \MKIV\ we now use
+% %D the catcode vectors.
+%
+% \setnewconstant\compoundcharactermode\plusone
+%
+% \newcount\c_lang_compounds_character
+%
+% \def\installcompoundcharacter #1#2#3 #4% {#4} no grouping
+% {\ifcase\compoundcharactermode
+% % ignore mode
+% \else
+% \chardef\c_lang_compounds_character`#1%
+% \expandafter\chardef\csname\??compoundnormal\string#1\endcsname\c_lang_compounds_character
+% \def\!!stringa{#3}%
+% \expandafter\def\csname\ifx\!!stringa\empty\??compoundsingle\else\??compoundmultiple\fi\detokenize{#1#2#3}\endcsname{#4}%
+% \setevalue{\??compounddefinition\detokenize{#1}}{\noexpand\lang_compounds_handle_character{\detokenize{#1}}}% beter nr's
+% \expandafter\letcatcodecommand\expandafter\ctxcatcodes\expandafter\c_lang_compounds_character\csname\??compounddefinition\detokenize{#1}\endcsname
+% \fi}
+%
+% %D We can also ignore definitions (needed in for instance \XML). Beware, this macro
+% %D is supposed to be used grouped!
+%
+% \def\ignorecompoundcharacter
+% {\compoundcharactermode\zerocount}
+
+\let\ignorecompoundcharacter\relax
+
+% %D In handling the compound characters we have to take care of \type {\bgroup} and
+% %D \type {\egroup} tokens, so we end up with a multi||step interpretation macro. We
+% %D look ahead for a \type {\bgroup}, \type {\egroup} or \type {\blankspace}. Being
+% %D no user of this mechanism, the credits for testing them goes to Tobias Burnus,
+% %D the first german user of \CONTEXT.
+% %D
+% %D We need to look into the future with \type{\futurelet} to prevent spaces from
+% %D disappearing.
+%
+% \def\lang_compounds_handle_character#1%
+% {\def\lang_compounds_handle_character_finish{\lang_compounds_handle_character_finish_indeed{#1}}%
+% \futurelet\nexttoken\xhandlecompoundcharacter}
+%
+% \def\lang_compounds_handle_character_finish_indeed
+% {\ifx\nexttoken\bgroup
+% %\expandafter\lang_compounds_handle_character_pickup % handle "{ee} -> \"ee
+% %\expandafter\gobbleoneargument % forget "{ee} -> ee
+% \expandafter\lang_compounds_handle_character_one % ignore "{ee} -> "ee
+% \else\ifx\nexttoken\egroup
+% \doubleexpandafter\lang_compounds_handle_character_normal
+% \else\ifx\nexttoken\blankspace
+% \tripleexpandafter\lang_compounds_handle_character_normal
+% \else
+% \tripleexpandafter\lang_compounds_handle_character_pickup
+% \fi\fi\fi}
+%
+% \def\lang_compounds_handle_character_normal#1%
+% {\csname\??compoundnormal\string#1\endcsname}
+%
+% \def\lang_compounds_handle_character_pickup#1#2% preserve space
+% {\def\lang_compounds_handle_character_finish{\lang_compounds_handle_character_finish_indeed#1#2}%
+% \futurelet\nexttoken\lang_compounds_handle_character_finish}
+%
+% \def\lang_compounds_handle_character_finish_indeed
+% {\ifx\nexttoken\bgroup
+% \expandafter\lang_compounds_handle_character_one
+% \else\ifx\nexttoken\egroup
+% \doubleexpandafter\lang_compounds_handle_character_one
+% \else\ifx\nexttoken\blankspace
+% \tripleexpandafter\lang_compounds_handle_character_one
+% \else
+% \tripleexpandafter\lang_compounds_handle_character_two
+% \fi\fi\fi}
+%
+% %D Besides taken care of the grouping and space tokens, we have to deal with three
+% %D situations. First we look if the next character equals the first one, if so, then
+% %D we just insert the original. Next we look if indeed a compound character is
+% %D defined. We either execute the compound character or just insert the first. So we
+% %D have
+% %D
+% %D \starttyping
+% %D <key><key> <key><known> <key><unknown>
+% %D \stoptyping
+% %D
+% %D In later modules we will see how these commands are used.
+%
+% \def\lang_compounds_handle_character_one#1#2%
+% {\if\string#1\string#2% was: \ifx#1#2%
+% %\expandafter\let\expandafter\next\csname\??compoundnormal\string#1\endcsname
+% \csname\??compoundnormal\string#1\expandafter\endcsname
+% \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
+% %\expandafter\let\expandafter\next\lastnamedcs
+% \expandafter\lastnamedcs
+% \else
+% %\expandafter\let\expandafter\next\lastnamedcs
+% \expandafter\lastnamedcs
+% \fi\fi}
+%
+% \def\lang_compounds_handle_character_two#1#2#3%
+% {\if\string#1\string#2%
+% \def\next{\csname\??compoundnormal\string#1\endcsname#3}%
+% \else\ifcsname\??compoundmultiple\string#1\string#2\string#3\endcsname
+% \expandafter\let\expandafter\next\lastnamedcs
+% \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
+% \expandafter\let\expandafter\next\lastnamedcs
+% \else
+% \expandafter\let\expandafter\next\lastnamedcs
+% \fi\fi\fi
+% \next}
+%
+% %D For very obscure applications (see for an application \type {lang-sla.tex}) we
+% %D provide:
+%
+% % \def\simplifiedcompoundcharacter#1#2%
+% % {\ifcsname\??compoundsingle\string#1\string#2\endcsname
+% % \doubleexpandafter\firstofoneargument\csname\??compoundsingle\string#1\string#2\endcsname
+% % \else
+% % #2%
+% % \fi}
+%
+% \def\simplifiedcompoundcharacter#1#2%
+% {\ifcsname\??compoundsingle\string#1\string#2\endcsname
+% \doubleexpandafter\firstofoneargument\lastnamedcs
+% \else
+% #2%
+% \fi}
%D \macros
%D {disablediscretionaries,disablecompoundcharacter}
@@ -665,7 +690,7 @@
%D Here we hook some code into the clean up mechanism needed for verbatim data.
\appendtoks
- \disablecompoundcharacters
+ %\disablecompoundcharacters
\disablediscretionaries
\to \everycleanupfeatures
diff --git a/Master/texmf-dist/tex/context/base/lang-rep.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-rep.lua
index 95a5e545aac..28f2e5d50cc 100644
--- a/Master/texmf-dist/tex/context/base/lang-rep.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-rep.lua
@@ -17,11 +17,21 @@ if not modules then modules = { } end modules ['lang-rep'] = {
local type, tonumber = type, tonumber
local utfbyte, utfsplit = utf.byte, utf.split
-local P, C, U, Cc, Ct, lpegmatch = lpeg.P, lpeg.C, lpeg.patterns.utf8character, lpeg.Cc, lpeg.Ct, lpeg.match
+local P, C, U, Cc, Ct, Cs, lpegmatch = lpeg.P, lpeg.C, lpeg.patterns.utf8character, lpeg.Cc, lpeg.Ct, lpeg.Cs, lpeg.match
local find = string.find
+local zwnj = 0x200C
local grouped = P("{") * ( Ct((U/utfbyte-P("}"))^1) + Cc(false) ) * P("}")-- grouped
-local splitter = Ct((Ct(Cc("discretionary") * grouped * grouped * grouped) + U/utfbyte)^1)
+local splitter = Ct((
+ #P("{") * (
+ P("{}") / function() return zwnj end
+ + Ct(Cc("discretionary") * grouped * grouped * grouped)
+ + Ct(Cc("noligature") * grouped)
+ )
+ + U/utfbyte
+ )^1)
+
+local stripper = P("{") * Cs((1-P(-2))^0) * P("}") * P(-1)
local trace_replacements = false trackers.register("languages.replacements", function(v) trace_replacements = v end)
local trace_detail = false trackers.register("languages.replacements.detail", function(v) trace_detail = v end)
@@ -34,12 +44,19 @@ local nuts = nodes.nuts
local tonut = nuts.tonut
local tonode = nuts.tonode
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getattr = nuts.getattr
local getid = nuts.getid
local getchar = nuts.getchar
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
+local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setchar = nuts.setchar
local insert_node_before = nuts.insert_before
local remove_node = nuts.remove
@@ -62,6 +79,7 @@ local replacements = languages.replacements or { }
languages.replacements = replacements
local a_replacements = attributes.private("replacements")
+local a_noligature = attributes.private("noligature")
local lists = { }
local last = 0
@@ -79,9 +97,10 @@ end)
lists[v_reset].attribute = unsetvalue -- so we discard 0
--- todo: glue kern
+-- todo: glue kern attr
local function add(root,word,replacement)
+ local replacement = lpegmatch(stripper,replacement) or replacement
local list = utfsplit(word,true)
local size = #list
for i=1,size do
@@ -128,23 +147,28 @@ local function hit(a,head)
local current = getnext(head)
local lastrun = false
local lastfinal = false
- while current and getid(current) == glyph_code do
- local newroot = root[getchar(current)]
- if not newroot then
- return lastrun, lastfinal
- else
- local final = newroot.final
- if final then
- if trace_detail then
- report_replacement("hitting word %a, replacement %a",final.word,final.replacement)
- end
- lastrun = current
- lastfinal = final
+ while current do
+ local char = isglyph(current)
+ if char then
+ local newroot = root[char]
+ if not newroot then
+ return lastrun, lastfinal
else
- root = newroot
+ local final = newroot.final
+ if final then
+ if trace_detail 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
- current = getnext(current)
end
if lastrun then
return lastrun, lastfinal
@@ -157,7 +181,7 @@ local function tonodes(list,template)
local head, current
for i=1,#list do
local new = copy_node(template)
- setfield(new,"char",list[i])
+ setchar(new,list[i])
if head then
head, current = insert_after(head,current,new)
else
@@ -190,16 +214,14 @@ function replacements.handler(head)
local prev = getprev(current)
local next = getnext(last)
local list = current
- setfield(last,"next",nil)
- setfield(prev,"next",next)
- if next then
- setfield(next,"prev",prev)
- end
+ setnext(last)
+ setlink(prev,next)
current = prev
if not current then
head = nil
end
- for i=1,newlength do
+ local i = 1
+ while i <= newlength do
local codes = newcodes[i]
local new = nil
if type(codes) == "table" then
@@ -216,32 +238,51 @@ function replacements.handler(head)
if replace then
setfield(new,"replace",tonodes(replace,last))
end
+ 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
+ new = copy_node(last)
+ setchar(new,list[i])
+ setattr(new,a_noligature,1)
+ head, current = insert_after(head,current,new)
+ end
+ else
+ new = copy_node(last)
+ setchar(new,zwnj)
+ head, current = insert_after(head,current,new)
+ end
else
-- todo
end
else
new = copy_node(last)
- setfield(new,"char",codes)
- end
- if new then
+ setchar(new,codes)
head, current = insert_after(head,current,new)
end
+ i = i + 1
end
flush_list(list)
elseif oldlength == newlength then -- #old == #new
- for i=1,newlength do
- setfield(current,"char",newcodes[i])
- current = getnext(current)
+ if final.word == final.replacement then
+ -- nothing to do but skip
+ else
+ for i=1,newlength do
+ setchar(current,newcodes[i])
+ current = getnext(current)
+ end
end
elseif oldlength < newlength then -- #old < #new
for i=1,newlength-oldlength do
local n = copy_node(current)
- setfield(n,"char",newcodes[i])
+ setchar(n,newcodes[i])
head, current = insert_node_before(head,current,n)
current = getnext(current)
end
for i=newlength-oldlength+1,newlength do
- setfield(current,"char",newcodes[i])
+ setchar(current,newcodes[i])
current = getnext(current)
end
else -- #old > #new
@@ -249,7 +290,7 @@ function replacements.handler(head)
head, current = remove_node(head,current,true)
end
for i=1,newlength do
- setfield(current,"char",newcodes[i])
+ setchar(current,newcodes[i])
current = getnext(current)
end
end
diff --git a/Master/texmf-dist/tex/context/base/lang-rep.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-rep.mkiv
index a98d51f6c8b..48e1fd44b7b 100644
--- a/Master/texmf-dist/tex/context/base/lang-rep.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-rep.mkiv
@@ -21,7 +21,7 @@
\registerctxluafile{lang-rep}{1.001}
-\definesystemattribute[replacements][public]
+\definesystemattribute[replacements][public,global]
%D \startluacode
%D
diff --git a/Master/texmf-dist/tex/context/base/lang-spa.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-spa.mkiv
index e7cb0025fd6..e7cb0025fd6 100644
--- a/Master/texmf-dist/tex/context/base/lang-spa.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-spa.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lang-txt.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-txt.lua
index 2938550eef3..2938550eef3 100644
--- a/Master/texmf-dist/tex/context/base/lang-txt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-txt.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lang-url.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-url.lua
new file mode 100644
index 00000000000..93c3c02a8db
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-url.lua
@@ -0,0 +1,167 @@
+if not modules then modules = { } end modules ['lang-url'] = {
+ version = 1.001,
+ comment = "companion to lang-url.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local utfcharacters, utfvalues, utfbyte, utfchar = utf.characters, utf.values, utf.byte, utf.char
+local min, max = math.min, math.max
+
+local context = context
+
+local implement = interfaces.implement
+local variables = interfaces.variables
+
+local v_before = variables.before
+local v_after = variables.after
+
+local is_letter = characters.is_letter
+
+--[[
+<p>Hyphenating <l n='url'/>'s is somewhat tricky and a matter of taste. I did
+consider using a dedicated hyphenation pattern or dealing with it by node
+parsing, but the following solution suits as well. After all, we're mostly
+dealing with <l n='ascii'/> characters.</p>
+]]--
+
+local urls = { }
+languages.urls = urls
+
+local characters = utilities.storage.allocate {
+ ["!"] = "before",
+ ['"'] = "before",
+ ["#"] = "before",
+ ["$"] = "before",
+ ["%"] = "before",
+ ["&"] = "before",
+ ["("] = "before",
+ ["*"] = "before",
+ ["+"] = "before",
+ [","] = "before",
+ ["-"] = "before",
+ ["."] = "before",
+ ["/"] = "before",
+ [":"] = "before",
+ [";"] = "before",
+ ["<"] = "before",
+ ["="] = "before",
+ [">"] = "before",
+ ["?"] = "before",
+ ["@"] = "before",
+ ["["] = "before",
+ ["\\"] = "before",
+ ["^"] = "before",
+ ["_"] = "before",
+ ["`"] = "before",
+ ["{"] = "before",
+ ["|"] = "before",
+ ["~"] = "before",
+
+ ["'"] = "after",
+ [")"] = "after",
+ ["]"] = "after",
+ ["}"] = "after",
+}
+
+local mapping = utilities.storage.allocate {
+ -- [utfchar(0xA0)] = "~", -- nbsp (catch)
+}
+
+urls.characters = characters
+urls.mapping = mapping
+urls.lefthyphenmin = 2
+urls.righthyphenmin = 3
+urls.discretionary = nil
+urls.packslashes = false
+
+directives.register("hyphenators.urls.packslashes",function(v)
+ urls.packslashes = v
+end)
+
+local ctx_a = context.a
+local ctx_b = context.b
+local ctx_d = context.d
+local ctx_c = context.c
+local ctx_l = context.l
+local ctx_C = context.C
+local ctx_L = context.L
+
+local function action(hyphenatedurl,str,left,right,disc)
+ --
+ left = max( left or urls.lefthyphenmin, 2)
+ right = min(#str-(right or urls.righthyphenmin)+2,#str)
+ disc = disc or urls.discretionary
+ --
+ local word = nil
+ local prev = nil
+ local pack = urls.packslashes
+ local length = 0
+ --
+ for char in utfcharacters(str) do
+ length = length + 1
+ char = mapping[char] or char
+ if prev == char and prev == "/" then
+ ctx_c(utfbyte(char))
+ elseif char == disc then
+ ctx_d()
+ else
+ if prev == "/" then
+ ctx_d()
+ end
+ local how = characters[char]
+ if how == v_before then
+ word = false
+ ctx_b(utfbyte(char))
+ elseif how == v_after then
+ word = false
+ ctx_a(utfbyte(char))
+ else
+ local letter = is_letter[char]
+ if length <= left or length >= right then
+ if word and letter then
+ ctx_L(utfbyte(char))
+ else
+ ctx_C(utfbyte(char))
+ end
+ elseif word and letter then
+ ctx_l(utfbyte(char))
+ else
+ ctx_c(utfbyte(char))
+ end
+ word = letter
+ end
+ end
+ if pack then
+ prev = char
+ end
+ end
+end
+
+-- urls.action = function(_,...) action(...) end -- sort of obsolete
+
+table.setmetatablecall(hyphenatedurl,action) -- watch out: a caller
+
+-- todo, no interface in mkiv yet
+
+function urls.setcharacters(str,value) -- 1, 2 == before, after
+ for s in utfcharacters(str) do
+ characters[s] = value or v_before
+ end
+end
+
+-- .urls.setcharacters("')]}",2)
+
+implement {
+ name = "sethyphenatedurlcharacters",
+ actions = urls.setcharacters,
+ arguments = { "string", "string" }
+}
+
+implement {
+ name = "hyphenatedurl",
+ scope = "private",
+ actions = function(...) action(hyphenatedurl,...) end,
+ arguments = { "string", "integer", "integer", "string" }
+}
diff --git a/Master/texmf-dist/tex/context/base/lang-url.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-url.mkiv
index e7d62ba016c..833a583f9f0 100644
--- a/Master/texmf-dist/tex/context/base/lang-url.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-url.mkiv
@@ -59,6 +59,7 @@
\let\|\letterbar
\let~=\lettertilde
\let|=\letterbar
+ \let\Ux\eUx
\to \everyhyphenatedurl
\let\hyphenatedurlseparator \empty % \periodcentered
@@ -73,7 +74,7 @@
\def\lang_url_a#1{\lang_url_more\char#1\lang_url_show\discretionary{}{\hyphenatedurlseparator}{}}
\def\lang_url_b#1{\lang_url_more\discretionary{\hyphenatedurlseparator}{}{}\lang_url_show\char#1\relax}
-\def\lang_url_d#1{\lang_url_more\discretionary{\lang_url_show}{\lang_url_show}{\lang_url_show}}
+\def\lang_url_d {\lang_url_more\discretionary{\lang_url_show}{\lang_url_show}{\lang_url_show}}
\def\lang_url_l#1{\lang_url_less\char#1\relax}
\def\lang_url_c#1{\lang_url_more\char#1\relax}
\def\lang_url_L#1{\lang_url_less\char#1\relax}
diff --git a/Master/texmf-dist/tex/context/base/lang-wrd.lua b/Master/texmf-dist/tex/context/base/mkiv/lang-wrd.lua
index b564a02aec9..38e6187af5b 100644
--- a/Master/texmf-dist/tex/context/base/lang-wrd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-wrd.lua
@@ -8,9 +8,9 @@ if not modules then modules = { } end modules ['lang-wrd'] = {
local lower = string.lower
local utfchar = utf.char
-local concat = table.concat
+local concat, setmetatableindex = table.concat, table.setmetatableindex
local lpegmatch = lpeg.match
-local P, S, Cs = lpeg.P, lpeg.S, lpeg.Cs
+local P, S, Cs, Cf, Cg, Cc, C = lpeg.P, lpeg.S, lpeg.Cs, lpeg.Cf, lpeg.Cg, lpeg.Cc, lpeg.C
local report_words = logs.reporter("languages","words")
@@ -38,8 +38,10 @@ local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local setattr = nuts.setattr
+local isglyph = nuts.isglyph
local traverse_nodes = nuts.traverse
+local traverse_ids = nuts.traverse_id
local wordsdata = words.data
local chardata = characters.data
@@ -63,13 +65,41 @@ local colist = attributes.list[a_color]
local is_letter = characters.is_letter -- maybe is_character as variant
local spacing = S(" \n\r\t")
-local markup = S("-=")
-local lbrace = P("{")
-local rbrace = P("}")
-local disc = (lbrace * (1-rbrace)^0 * rbrace)^1 -- or just 3 times, time this
-local word = Cs((markup/"" + disc/"" + (1-spacing))^1)
+local markup = S("-=") / ""
+local lbrace = P("{") / ""
+local rbrace = P("}") / ""
+local snippet = lbrace * (1-rbrace)^0 * rbrace
+local disc = snippet/"" -- pre
+ * snippet/"" -- post
+ * snippet -- replace
+local word = Cs((markup + disc + (1-spacing))^1)
+
+-- lpegmatch((spacing + word/function(s) print(s) end)^0,"foo foo-bar bar{}{}{}foo bar{}{}{foo}")
+
+local loaded = { } -- we share lists
+local loaders = {
+ txt = function(list,fullname)
+ local data = io.loaddata(fullname)
+ if data and data ~= "" then
+ local parser = (spacing + word/function(s) list[s] = true end)^0
+ -- local parser = Cf(Cc(list) * Cg(spacing^0 * word * Cc(true))^1,rawset) -- not better
+ lpegmatch(parser,data)
+ end
+ end,
+ lua = function(list,fullname)
+ local data = dofile(fullname)
+ if data and type(data) == "table" then
+ local words = data.words
+ if words then
+ for k, v in next, words do
+ list[k] = true
+ end
+ end
+ end
+ end,
+}
-local loaded = { } -- we share lists
+loaders.luc = loaders.lua
function words.load(tag,filename)
local fullname = resolvers.findfile(filename,'other text file') or ""
@@ -79,8 +109,9 @@ function words.load(tag,filename)
local list = loaded[fullname]
if not list then
list = wordsdata[tag] or { }
- local parser = (spacing + word/function(s) list[s] = true end)^0
- lpegmatch(parser,io.loaddata(fullname) or "")
+ local suffix = file.suffix(fullname)
+ local loader = loaders[suffix] or loaders.txt
+ loader(list,fullname)
loaded[fullname] = list
end
wordsdata[tag] = list
@@ -125,9 +156,11 @@ local function mark_words(head,whenfound) -- can be optimized and shared
end
n, s = 0, 0
end
+ -- we haven't done the fonts yet so we have characters (otherwise
+ -- we'd have to use the tounicodes)
while current do
- local id = getid(current)
- if id == glyph_code then
+ local code, id = isglyph(current)
+ if code then
local a = getfield(current,"lang")
if a then
if a ~= language then
@@ -140,30 +173,27 @@ local function mark_words(head,whenfound) -- can be optimized and shared
action()
language = a
end
- local components = getfield(current,"components")
- if components then
+ local data = chardata[code]
+ if is_letter[data.category] then
n = n + 1
nds[n] = current
- for g in traverse_nodes(components) do
- s = s + 1
- str[s] = utfchar(getchar(g))
- end
- else
- local code = getchar(current)
- local data = chardata[code]
- if is_letter[data.category] then
- n = n + 1
- nds[n] = current
- s = s + 1
- str[s] = utfchar(code)
- elseif s > 0 then
- action()
- end
+ s = s + 1
+ str[s] = utfchar(code)
+ elseif s > 0 then
+ action()
end
elseif id == disc_code then -- take the replace
if n > 0 then
- n = n + 1
- nds[n] = current
+ local r = getfield(current,"replace")
+ if r then
+ for current in traverse_ids(glyph_code,r) do
+ local code = getchar(current)
+ n = n + 1
+ nds[n] = current
+ s = s + 1
+ str[s] = utfchar(code)
+ end
+ end
end
elseif id == kern_code and getsubtype(current) == kerning_code and s > 0 then
-- ok
@@ -201,7 +231,9 @@ function words.enable(settings)
local method = settings.method
wordmethod = method and tonumber(method) or wordmethod or 1
local e = enablers[wordmethod]
- if e then e(settings) end
+ if e then
+ e(settings)
+ end
tasks.enableaction("processors","languages.words.check")
enabled = true
end
@@ -254,35 +286,29 @@ local dumpthem = false
local listname = "document"
local category = { }
-local categories = { }
-
-setmetatable(categories, {
- __index = function(t,k)
- local languages = { }
- setmetatable(languages, {
- __index = function(t,k)
- local r = registered[k]
- local v = {
- number = language,
- parent = r and r.parent or nil,
- patterns = r and r.patterns or nil,
- tag = r and r.tag or nil,
- list = { },
- total = 0,
- unique = 0,
- }
- t[k] = v
- return v
- end
- } )
+
+local categories = setmetatableindex(function(t,k)
+ local languages = setmetatableindex(function(t,k)
+ local r = registered[k]
local v = {
- languages = languages,
- total = 0,
+ number = language,
+ parent = r and r.parent or nil,
+ patterns = r and r.patterns or nil,
+ tag = r and r.tag or nil,
+ list = { },
+ total = 0,
+ unique = 0,
}
t[k] = v
return v
- end
-} )
+ end)
+ local v = {
+ languages = languages,
+ total = 0,
+ }
+ t[k] = v
+ return v
+end)
local collected = {
total = 0,
@@ -330,7 +356,7 @@ local function dumpusedwords()
end
directives.register("languages.words.dump", function(v)
- dumpname = type(v) == "string" and v ~= "" and v
+ dumpname = (type(v) == "string" and v ~= "" and v) or dumpname
end)
luatex.registerstopactions(dumpusedwords)
diff --git a/Master/texmf-dist/tex/context/base/lang-wrd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lang-wrd.mkiv
index 8c544773b3a..8c544773b3a 100644
--- a/Master/texmf-dist/tex/context/base/lang-wrd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lang-wrd.mkiv
diff --git a/Master/texmf-dist/tex/context/base/layo-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/layo-ini.lua
index d35d7ef6965..d35d7ef6965 100644
--- a/Master/texmf-dist/tex/context/base/layo-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/layo-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/layo-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/layo-ini.mkiv
index 9097265c9c4..9097265c9c4 100644
--- a/Master/texmf-dist/tex/context/base/layo-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/layo-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ano.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ano.lua
index f5e320a0021..72800bc648c 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ano.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ano.lua
@@ -34,6 +34,7 @@ local report_bookmark = logs.reporter("backend","bookmarks")
local variables = interfaces.variables
local v_auto = variables.auto
local v_page = variables.page
+local v_name = variables.name
local factor = number.dimenfactors.bp
@@ -152,10 +153,7 @@ end)
-- the caching is somewhat memory intense on the one hand but
-- it saves many small temporary tables so it might pay off
-local pagedestinations = allocate()
-local pagereferences = allocate() -- annots are cached themselves
-
-setmetatableindex(pagedestinations, function(t,k)
+local pagedestinations = setmetatableindex(function(t,k)
k = tonumber(k)
if not k or k <= 0 then
return pdfnull()
@@ -173,7 +171,7 @@ setmetatableindex(pagedestinations, function(t,k)
return v
end)
-setmetatableindex(pagereferences,function(t,k)
+local pagereferences = setmetatableindex(function(t,k)
k = tonumber(k)
if not k or k <= 0 then
return nil
@@ -190,9 +188,6 @@ setmetatableindex(pagereferences,function(t,k)
return v
end)
-lpdf.pagereferences = pagereferences -- table
-lpdf.pagedestinations = pagedestinations -- table
-
local defaultdestination = pdfarray { 0, pdf_fit }
-- fit is default (see lpdf-nod)
@@ -353,19 +348,41 @@ local v_tight = variables.tight
-- and finger zooming this whole view is rather useless and as with any zooming
-- one looses the overview and keeps zooming.
+-- todo: scaling
+
+-- local destinationactions = {
+-- [v_standard] = function(r,w,h,d) return f_xyz (r,gethpos()*factor,(getvpos()+h)*factor) end, -- local left,top with no zoom
+-- [v_frame] = function(r,w,h,d) return f_fitr (r,pdfrectangle(w,h,d)) end, -- fit rectangle in window
+-- [v_width] = function(r,w,h,d) return f_fith (r,(getvpos()+h)*factor) end, -- top coordinate, fit width of page in window
+-- [v_minwidth] = function(r,w,h,d) return f_fitbh(r,(getvpos()+h)*factor) end, -- top coordinate, fit width of content in window
+-- [v_height] = function(r,w,h,d) return f_fitv (r,gethpos()*factor) end, -- left coordinate, fit height of page in window
+-- [v_minheight] = function(r,w,h,d) return f_fitbv(r,gethpos()*factor) end, -- left coordinate, fit height of content in window [v_fit] = f_fit, -- fit page in window
+-- [v_tight] = f_fitb, -- fit content in window
+-- [v_fit] = f_fit,
+-- }
+
local destinationactions = {
- -- [v_standard] = function(r,w,h,d) return f_xyz (r,pdfrectangle(w,h,d)) end, -- local left,top with zoom (0 in our case)
- [v_standard] = function(r,w,h,d) return f_xyz (r,gethpos()*factor,(getvpos()+h)*factor) end, -- local left,top with no zoom
- [v_frame] = function(r,w,h,d) return f_fitr (r,pdfrectangle(w,h,d)) end, -- fit rectangle in window
- -- [v_width] = function(r,w,h,d) return f_fith (r,gethpos()*factor) end, -- top coordinate, fit width of page in window
- [v_width] = function(r,w,h,d) return f_fith (r,(getvpos()+h)*factor) end, -- top coordinate, fit width of page in window
- -- [v_minwidth] = function(r,w,h,d) return f_fitbh(r,gethpos()*factor) end, -- top coordinate, fit width of content in window
- [v_minwidth] = function(r,w,h,d) return f_fitbh(r,(getvpos()+h)*factor) end, -- top coordinate, fit width of content in window
- -- [v_height] = function(r,w,h,d) return f_fitv (r,(getvpos()+h)*factor) end, -- left coordinate, fit height of page in window
- [v_height] = function(r,w,h,d) return f_fitv (r,gethpos()*factor) end, -- left coordinate, fit height of page in window
- -- [v_minheight] = function(r,w,h,d) return f_fitbv(r,(getvpos()+h)*factor) end, -- left coordinate, fit height of content in window
- [v_minheight] = function(r,w,h,d) return f_fitbv(r,gethpos()*factor) end, -- left coordinate, fit height of content in window [v_fit] = f_fit, -- fit page in window
- [v_tight] = f_fitb, -- fit content in window
+ [v_standard] = function(r,w,h,d,o) -- local left,top with no zoom
+ local tx, ty = getpos()
+ return f_xyz(r,tx*factor,(ty+h+2*o)*factor) -- we can assume margins
+ end,
+ [v_frame] = function(r,w,h,d,o) -- fit rectangle in window
+ return f_fitr(r,pdfrectangle(w,h,d,o))
+ end,
+ [v_width] = function(r,w,h,d,o) -- top coordinate, fit width of page in window
+ return f_fith(r,(getvpos()+h+o)*factor)
+ end,
+ [v_minwidth] = function(r,w,h,d,o) -- top coordinate, fit width of content in window
+ return f_fitbh(r,(getvpos()+h+o)*factor)
+ end,
+ [v_height] = function(r,w,h,d,o) -- left coordinate, fit height of page in window
+ return f_fitv(r,(gethpos())*factor)
+ end,
+ [v_minheight] = function(r,w,h,d,o) -- left coordinate, fit height of content in window
+ return f_fitbv(r,(gethpos())*factor)
+ end,
+ [v_tight] = f_fitb, -- fit content in window
+ [v_fit] = f_fit, -- fit content in window
}
local mapping = {
@@ -381,14 +398,17 @@ local mapping = {
local defaultview = v_fit
local defaultaction = destinationactions[defaultview]
+local offset = 0 -- 65536*5
--- A complication is that we need to use named destinations when we have views so we
--- end up with a mix. A previous versions just output multiple destinations but not
--- that we noved all to here we can be more sparse.
+directives.register("destinations.offset", function(v)
+ offset = string.todimen(v) or 0
+end)
-local pagedestinations = { }
+-- A complication is that we need to use named destinations when we have views so we
+-- end up with a mix. A previous versions just output multiple destinations but now
+-- that we moved all to here we can be more sparse.
-table.setmetatableindex(pagedestinations,function(t,k)
+local pagedestinations = setmetatableindex(function(t,k) -- not the same as the one above!
local v = pdfdelayedobject(f_fit(k))
t[k] = v
return v
@@ -396,11 +416,11 @@ end)
local function flushdestination(width,height,depth,names,view)
local r = pdfpagereference(texgetcount("realpageno"))
- if view == defaultview or not view or view == "" then
+ if (references.innermethod ~= v_name) and (view == defaultview or not view or view == "") then
r = pagedestinations[r]
else
local action = view and destinationactions[view] or defaultaction
- r = pdfdelayedobject(action(r,width,height,depth))
+ r = pdfdelayedobject(action(r,width,height,depth,offset))
end
for n=1,#names do
local name = names[n]
@@ -422,33 +442,64 @@ function nodeinjections.destination(width,height,depth,names,view)
-- we could save some aut's by using a name when given but it doesn't pay off apart
-- from making the code messy and tracing hard .. we only save some destinations
-- which we already share anyway
- for n=1,#names do
- local name = names[n]
- if usedviews[name] then
- -- already done, maybe a warning
- elseif type(name) == "number" then
- if noview then
+ if method == v_page then
+ for n=1,#names do
+ local name = names[n]
+ local used = usedviews[name]
+ if used and used ~= true then
+ -- already done, maybe a warning
+ elseif type(name) == "number" then
+ -- if noview then
+ -- usedviews[name] = view
+ -- names[n] = false
+ -- else
+ usedviews[name] = view
+ names[n] = false
+ -- end
+ else
usedviews[name] = view
- names[n] = false
- elseif method == v_page then
+ end
+ end
+ elseif method == v_name then
+ for n=1,#names do
+ local name = names[n]
+ local used = usedviews[name]
+ if used and used ~= true then
+ -- already done, maybe a warning
+ elseif type(name) == "number" then
+ local used = usedinternals[name]
usedviews[name] = view
- names[n] = false
+ names[n] = autoprefix .. name
+ doview = true
else
- local used = usedinternals[name]
- if used and used ~= defaultview then
+ usedviews[name] = view
+ doview = true
+ end
+ end
+ else
+ for n=1,#names do
+ local name = names[n]
+ if usedviews[name] then
+ -- already done, maybe a warning
+ elseif type(name) == "number" then
+ if noview then
usedviews[name] = view
- names[n] = autoprefix .. name
- doview = true
- else
- -- names[n] = autoprefix .. name
names[n] = false
+ else
+ local used = usedinternals[name]
+ if used and used ~= defaultview then
+ usedviews[name] = view
+ names[n] = autoprefix .. name
+ doview = true
+ else
+ -- names[n] = autoprefix .. name
+ names[n] = false
+ end
end
+ else
+ usedviews[name] = view
+ doview = true
end
- elseif method == v_page then
- usedviews[name] = view
- else
- usedviews[name] = view
- doview = true
end
end
if doview then
@@ -458,43 +509,60 @@ end
-- we could share dictionaries ... todo
-local function somedestination(destination,internal,page) -- no view anyway
- if references.innermethod ~= v_page then
- if type(destination) == "number" then
- if not internal then
- internal = destination
- end
- destination = nil
- end
- if internal then
- flaginternals[internal] = true -- for bookmarks and so
- local used = usedinternals[internal]
- if used == defaultview or used == true then
- return pagereferences[page]
- end
- if type(destination) ~= "string" then
- destination = autoprefix .. internal
+local function pdflinkpage(page)
+ return pagereferences[page]
+end
+
+local function pdflinkinternal(internal,page)
+ local method = references.innermethod
+ if internal then
+ flaginternals[internal] = true -- for bookmarks and so
+ local used = usedinternals[internal]
+ if used == defaultview or used == true then
+ return pagereferences[page]
+ else
+ if type(internal) ~= "string" then
+ internal = autoprefix .. internal
end
return pdfdictionary {
S = pdf_goto,
- D = destination,
+ D = internal,
}
end
- if destination then
- -- hopefully this one is flushed
+ else
+ return pagereferences[page]
+ end
+end
+
+local function pdflinkname(destination,internal,page)
+ local method = references.innermethod
+ if method == v_auto then
+ local used = defaultview
+ if internal then
+ flaginternals[internal] = true -- for bookmarks and so
+ used = usedinternals[internal] or defaultview
+ end
+ if used == defaultview then -- or used == true then
+ return pagereferences[page]
+ else
return pdfdictionary {
S = pdf_goto,
D = destination,
}
end
+ elseif method == v_name then
+ -- flaginternals[internal] = true -- for bookmarks and so
+ return pdfdictionary {
+ S = pdf_goto,
+ D = destination,
+ }
+ else
+ return pagereferences[page]
end
- return pagereferences[page]
end
-- annotations
-local pdflink = somedestination
-
local function pdffilelink(filename,destination,page,actions)
if not filename or filename == "" or file.basename(filename) == tex.jobname then
return false
@@ -625,9 +693,9 @@ local share = true
local f_annot = formatters["<< /Type /Annot %s /Rect [ %0.3F %0.3F %0.3F %0.3F ] >>"]
-directives.register("refences.sharelinks", function(v) share = v end)
+directives.register("references.sharelinks", function(v) share = v end)
-table.setmetatableindex(hashed,function(t,k)
+setmetatableindex(hashed,function(t,k)
local v = pdfdelayedobject(k)
if share then
t[k] = v
@@ -707,36 +775,46 @@ end)
-- runners and specials
+local splitter = lpeg.splitat(",",true)
+
runners["inner"] = function(var,actions)
local internal = false
- local inner = nil
- if references.innermethod == v_auto then
- local vi = var.i
- if vi then
- local vir = vi.references
- if vir then
- -- todo: no need for it when we have a real reference
- local reference = vir.reference
- if reference and reference ~= "" then
- var.inner = reference
- local prefix = var.p
- if prefix and prefix ~= "" then
- var.prefix = prefix
- inner = prefix .. ":" .. reference
- else
- inner = reference
- end
- end
- internal = vir.internal
- if internal then
- flaginternals[internal] = true
+ local name = nil
+ local method = references.innermethod
+ local vi = var.i
+ local page = var.r
+ if vi then
+ local vir = vi.references
+ if vir then
+ -- todo: no need for it when we have a real reference ... although we need
+ -- this mess for prefixes anyway
+ local reference = vir.reference
+ if reference and reference ~= "" then
+ reference = lpegmatch(splitter,reference) or reference
+ var.inner = reference
+ local prefix = var.p
+ if prefix and prefix ~= "" then
+ var.prefix = prefix
+ name = prefix .. ":" .. reference
+ else
+ name = reference
end
end
+ internal = vir.internal
+ if internal then
+ flaginternals[internal] = true
+ end
end
+ end
+ if name then
+ return pdflinkname(name,internal,page)
+ elseif internal then
+ return pdflinkinternal(internal,page)
+ elseif page then
+ return pdflinkpage(page)
else
- var.inner = nil
+ -- real bad
end
- return pdflink(inner,internal,var.r)
end
runners["inner with arguments"] = function(var,actions)
@@ -803,7 +881,7 @@ function specials.internal(var,actions) -- better resolve in strc-ref
report_reference("no internal reference %a",i or "<unset>")
else
flaginternals[i] = true
- return pdflink(nil,i,v.references.realpage)
+ return pdflinkinternal(i,v.references.realpage)
end
end
@@ -827,7 +905,7 @@ function specials.page(var,actions)
p = references.realpageofpage(tonumber(p))
end
end
- return pdflink(nil,nil,p or var.operation)
+ return pdflinkpage(p or var.operation)
end
end
@@ -836,7 +914,7 @@ function specials.realpage(var,actions)
if file then
return pdffilelink(references.checkedfile(file),nil,var.operation,actions)
else
- return pdflink(nil,nil,var.operation)
+ return pdflinkpage(var.operation)
end
end
@@ -855,7 +933,7 @@ function specials.userpage(var,actions)
-- var.r = p
-- end
end
- return pdflink(nil,nil,p or var.operation)
+ return pdflinkpage(p or var.operation)
end
end
@@ -863,7 +941,7 @@ function specials.deltapage(var,actions)
local p = tonumber(var.operation)
if p then
p = references.checkedrealpage(p + texgetcount("realpageno"))
- return pdflink(nil,nil,p)
+ return pdflinkpage(p)
end
end
@@ -1051,9 +1129,10 @@ end
local function build(levels,start,parent,method,nested)
local startlevel = levels[start].level
+ local noflevels = #levels
local i, n = start, 0
local child, entry, m, prev, first, last, f, l
- while i and i <= #levels do
+ while i and i <= noflevels do
local current = levels[i]
if current.usedpage == false then
-- safeguard
@@ -1064,43 +1143,52 @@ local function build(levels,start,parent,method,nested)
local reference = current.reference
local opened = current.opened
local reftype = type(reference)
+ local block = nil
local variant = "unknown"
if reftype == "table" then
-- we're okay
- variant = "list"
+ variant = "list"
+ block = reference.block
elseif reftype == "string" then
local resolved = references.identify("",reference)
local realpage = resolved and structures.references.setreferencerealpage(resolved) or 0
if realpage > 0 then
- variant = "realpage"
- realpage = realpage
+ variant = "realpage"
+ realpage = realpage
+ reference = structures.pages.collected[realpage]
+ block = reference and reference.block
end
elseif reftype == "number" then
if reference > 0 then
- variant = "realpage"
- realpage = reference
+ variant = "realpage"
+ realpage = reference
+ reference = structures.pages.collected[realpage]
+ block = reference and reference.block
end
else
-- error
end
+ current.block = block
if variant == "unknown" then
-- error, ignore
i = i + 1
- elseif level <= startlevel then
- if level < startlevel then
- if nested then -- could be an option but otherwise we quit too soon
- if entry then
- pdfflushobject(child,entry)
- else
- report_bookmark("error 1")
- end
- return i, n, first, last
+ -- elseif (level < startlevel) or (i > 1 and block ~= levels[i-1].reference.block) then
+ elseif (level < startlevel) or (i > 1 and block ~= levels[i-1].block) then
+ if nested then -- could be an option but otherwise we quit too soon
+ if entry then
+ pdfflushobject(child,entry)
else
- report_bookmark("confusing level change at level %a around %a",level,title)
+ report_bookmark("error 1")
end
+ return i, n, first, last
+ else
+ report_bookmark("confusing level change at level %a around %a",level,title)
+ startlevel = level
end
+ end
+ if level == startlevel then
if trace_bookmarks then
- report_bookmark("%3i %w%s %s",reference.realpage,(level-1)*2,(opened and "+") or "-",title)
+ report_bookmark("%3i %w%s %s",realpage,(level-1)*2,(opened and "+") or "-",title)
end
local prev = child
child = pdfreserveobject()
@@ -1110,9 +1198,11 @@ local function build(levels,start,parent,method,nested)
end
local action = nil
if variant == "list" then
- action = somedestination(reference.internal,reference.internal,reference.realpage)
+ action = pdflinkinternal(reference.internal,reference.realpage)
elseif variant == "realpage" then
action = pagereferences[realpage]
+ else
+ -- hm, what to do
end
entry = pdfdictionary {
Title = pdfunicode(title),
@@ -1120,13 +1210,15 @@ local function build(levels,start,parent,method,nested)
Prev = prev and pdfreference(prev),
A = action,
}
- -- entry.Dest = somedestination(reference.internal,reference.internal,reference.realpage)
- if not first then first, last = child, child end
+ -- entry.Dest = pdflinkinternal(reference.internal,reference.realpage)
+ if not first then
+ first, last = child, child
+ end
prev = child
last = prev
n = n + 1
i = i + 1
- elseif i < #levels and level > startlevel then
+ elseif i < noflevels and level > startlevel then
i, m, f, l = build(levels,i,pdfreference(child),method,true)
if entry then
entry.Count = (opened and m) or -m
@@ -1160,6 +1252,7 @@ end
function codeinjections.addbookmarks(levels,method)
if levels and #levels > 0 then
+-- inspect(levels)
local parent = pdfreserveobject()
local _, m, first, last = build(levels,1,pdfreference(parent),method or "internal",false)
local dict = pdfdictionary {
diff --git a/Master/texmf-dist/tex/context/base/lpdf-col.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-col.lua
index 877c01a1c24..877c01a1c24 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-col.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-col.lua
diff --git a/Master/texmf-dist/tex/context/base/lpdf-enc.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-enc.lua
index 090fb15cd5d..090fb15cd5d 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-enc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-enc.lua
diff --git a/Master/texmf-dist/tex/context/base/lpdf-epa.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-epa.lua
index dd5ecc60990..c72e2a424f4 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-epa.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-epa.lua
@@ -12,6 +12,7 @@ if not modules then modules = { } end modules ['lpdf-epa'] = {
local type, tonumber = type, tonumber
local format, gsub, lower = string.format, string.gsub, string.lower
local formatters = string.formatters
+local abs = math.abs
----- lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
@@ -38,6 +39,8 @@ local escapetex = characters.filters.utf.private.escape
local bookmarks = structures.bookmarks
+local maxdimen = 2^30-1
+
local layerspec = { -- predefining saves time
"epdflinks"
}
@@ -152,8 +155,8 @@ function codeinjections.mergereferences(specification)
local size = specification.size or "crop" -- todo
local pagedata = document.pages[pagenumber]
local annotations = pagedata and pagedata.Annots
- local namespace = makenamespace(fullname)
- local reference = namespace .. pagenumber
+ local namespace = makenamespace(fullname)
+ local reference = namespace .. pagenumber
if annotations and annotations.n > 0 then
local mediabox = pagedata.MediaBox
local llx = mediabox[1]
@@ -178,7 +181,11 @@ function codeinjections.mergereferences(specification)
local h = yscale * (a_ury - a_lly)
if subtype == "Link" then
local a = annotation.A
- if a then
+ if not a then
+ report_link("missing link annotation")
+ elseif w > width or h > height or w < 0 or h < 0 or abs(x) > (maxdimen/2) or abs(y) > (maxdimen/2) then
+ report_link("broken link rectangle [%f %f %f %f] (max: %f)",a_llx,a_lly,a_urx,a_ury,maxdimen/2)
+ else
local linktype = a.S
if linktype == "GoTo" then
link_goto(x,y,w,h,document,annotation,pagedata,namespace)
@@ -189,8 +196,6 @@ function codeinjections.mergereferences(specification)
elseif trace_links then
report_link("unsupported link annotation %a",linktype)
end
- else
- report_link("missing link annotation")
end
elseif trace_links then
report_link("unsupported annotation %a",subtype)
diff --git a/Master/texmf-dist/tex/context/base/lpdf-epd.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-epd.lua
index 1dc20bc267d..0f62d6189ae 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-epd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-epd.lua
@@ -17,9 +17,9 @@ if not modules then modules = { } end modules ['lpdf-epd'] = {
-- we will provide .n as #; maybe in Lua 5.3 or later.
--
-- As there can be references to the parent we cannot expand a tree. I played with some
--- expansion variants but it does not pay off; adding extra checks is nto worth the trouble.
+-- expansion variants but it does not pay off; adding extra checks is not worth the trouble.
--
--- The document stays over. In order to free memory one has to explicitly onload the loaded
+-- The document stays open. In order to free memory one has to explicitly unload the loaded
-- document.
--
-- We have much more checking then needed in the prepare functions because occasionally
@@ -538,7 +538,7 @@ function lpdf_epdf.load(filename)
--
local Catalog = some_dictionary(__xref__:getCatalog():getDict(),document)
local Info = some_dictionary(__xref__:getDocInfo():getDict(),document)
- --
+ --
document.Catalog = Catalog
document.Info = Info
-- a few handy helper tables
diff --git a/Master/texmf-dist/tex/context/base/lpdf-fld.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-fld.lua
index f0aad36237c..75d0ba98e03 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-fld.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-fld.lua
@@ -105,6 +105,7 @@ local submitoutputformat = 0 -- 0=unknown 1=HTML 2=FDF 3=XML => not yet
local pdf_widget = pdfconstant("Widget")
local pdf_tx = pdfconstant("Tx")
+local pdf_sig = pdfconstant("Sig")
local pdf_ch = pdfconstant("Ch")
local pdf_btn = pdfconstant("Btn")
----- pdf_yes = pdfconstant("Yes")
@@ -693,6 +694,12 @@ function codeinjections.setfieldcalculationset(tag)
calculationset = tag
end
+interfaces.implement {
+ name = "setfieldcalculationset",
+ actions = codeinjections.setfieldcalculationset,
+ arguments = "string",
+}
+
local function predefinesymbols(specification)
local values = specification.values
if values then
@@ -1036,6 +1043,71 @@ function methods.text(name,specification)
return makelinechild(name,enhance(specification,"MultiLine"))
end
+-- copy of line ... probably also needs a /Lock
+
+local function makesignatureparent(field,specification)
+ local text = pdfunicode(field.default)
+ local length = tonumber(specification.length or 0) or 0
+ local d = pdfdictionary {
+ Subtype = pdf_widget,
+ T = pdfunicode(specification.title),
+ F = fieldplus(specification),
+ Ff = fieldflag(specification),
+ OC = fieldlayer(specification),
+ DA = fieldsurrounding(specification),
+ AA = fieldactions(specification),
+ FT = pdf_sig,
+ Q = fieldalignment(specification),
+ MaxLen = length == 0 and 1000 or length,
+ DV = text,
+ V = text,
+ }
+ save_parent(field,specification,d)
+end
+
+local function makesignaturechild(name,specification)
+ local field, parent = clones[name], nil
+ if field then
+ parent = fields[field.parent]
+ if not parent.pobj then
+ if trace_fields then
+ report_fields("forcing parent signature %a",parent.name)
+ end
+ makesignatureparent(parent,specification)
+ end
+ else
+ parent = fields[name]
+ field = parent
+ if not parent.pobj then
+ if trace_fields then
+ report_fields("using parent text %a",name)
+ end
+ makesignatureparent(parent,specification)
+ end
+ end
+ if trace_fields then
+ report_fields("using child text %a",name)
+ end
+ -- we could save a little by not setting some key/value when it's the
+ -- same as parent but it would cost more memory to keep track of it
+ local d = pdfdictionary {
+ Subtype = pdf_widget,
+ Parent = pdfreference(parent.pobj),
+ F = fieldplus(specification),
+ OC = fieldlayer(specification),
+ DA = fieldsurrounding(specification),
+ AA = fieldactions(specification),
+ MK = fieldrendering(specification),
+ Q = fieldalignment(specification),
+ }
+ return save_kid(parent,specification,d)
+end
+
+function methods.signature(name,specification)
+ return makesignaturechild(name,specification)
+end
+--
+
local function makechoiceparent(field,specification)
local d = pdfdictionary {
Subtype = pdf_widget,
diff --git a/Master/texmf-dist/tex/context/base/lpdf-fmt.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-fmt.lua
index 862c011b8a0..b1d9a4b0ca4 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-fmt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-fmt.lua
@@ -36,8 +36,6 @@ local pdfstring = lpdf.string
local pdfverbose = lpdf.verbose
local pdfflushstreamfileobject = lpdf.flushstreamfileobject
-local texset = tex.set
-
local addtoinfo = lpdf.addtoinfo
local injectxmpinfo = lpdf.injectxmpinfo
local insertxmpinfo = lpdf.insertxmpinfo
@@ -204,7 +202,7 @@ local formats = utilities.storage.allocate {
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-4</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:VersionID>1</xmpMM:VersionID>",false)
- insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:RenditionClass>default</xmpMM:RenditonClass>",false)
+ insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:RenditionClass>default</xmpMM:RenditionClass>",false)
end
},
["pdf/x-4p"] = {
@@ -229,7 +227,7 @@ local formats = utilities.storage.allocate {
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-4p</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:VersionID>1</xmpMM:VersionID>",false)
- insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:RenditionClass>default</xmpMM:RenditonClass>",false)
+ insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:RenditionClass>default</xmpMM:RenditionClass>",false)
end
},
["pdf/x-5g"] = {
@@ -339,6 +337,75 @@ local formats = utilities.storage.allocate {
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>B</pdfaid:conformance></rdf:Description>",false)
end
},
+ ["pdf/a-2a"] = { -- untested; only PDF/A Attachments are allowed
+ pdf_version = 1.7,
+ format_name = "pdf/a-2a",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA2",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = true,
+ internal_icc_profiles = true,
+ transparency = true, -- NEW
+ jbig2_compression = true,
+ jpeg2000_compression = true, -- NEW
+ object_compression = true,
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>2</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ ["pdf/a-3a"] = { -- untested; NEW: any type of attachment is allowed
+ pdf_version = 1.7,
+ format_name = "pdf/a-3a",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA3",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = true,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ ["pdf/ua-1"] = { -- based on PDF/A-3a, but no 'gts_flag'
+ pdf_version = 1.7,
+ format_name = "pdf/ua-1",
+ xmp_file = "lpdf-pua.xml",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = true,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfuaid='http://www.aiim.org/pdfua/ns/id/'><pdfuaid:part>1</pdfuaid:part></rdf:Description>",false)
+ end
+ },
}
lpdf.formats = formats -- it does not hurt to have this one visible
@@ -653,12 +720,12 @@ function codeinjections.setformat(s)
local majorversion = math.div(pdf_version,10)
local minorversion = math.mod(pdf_version,10)
local objectcompression = spec.object_compression and pdf_version >= 15
- local compresslevel = level or tex.pdfcompresslevel -- keep default
- local objectcompresslevel = (objectcompression and (level or tex.pdfobjcompresslevel)) or 0
- texset("global","pdfcompresslevel",compresslevel)
- texset("global","pdfobjcompresslevel",objectcompresslevel)
- texset("global","pdfmajorversion",majorversion)
- texset("global","pdfminorversion",minorversion)
+ local compresslevel = level or pdf.getcompresslevel() -- keep default
+ local objectcompresslevel = (objectcompression and (level or pdf.getobjcompresslevel())) or 0
+ pdf.setcompresslevel (compresslevel)
+ pdf.setobjcompresslevel(objectcompresslevel)
+ pdf.setmajorversion (majorversion)
+ pdf.setminorversion (minorversion)
if objectcompression then
report_backend("forcing pdf version %s.%s, compression level %s, object compression level %s",
majorversion,minorversion,compresslevel,objectcompresslevel)
@@ -718,8 +785,8 @@ function codeinjections.setformat(s)
report_backend("error, format %a is not supported",format)
end
elseif level then
- texset("global","pdfcompresslevel",level)
- texset("global","pdfobjcompresslevel",level)
+ pdf.setcompresslevel(level)
+ pdf.setobjcompresslevel(level)
else
-- we ignore this as we hook it in \everysetupbackend
end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-grp.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-grp.lua
index 36c3507bed2..0eac52dfb3a 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-grp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-grp.lua
@@ -6,6 +6,7 @@ if not modules then modules = { } end modules ['lpdf-grp'] = {
license = "see context related readme files"
}
+local type = type
local formatters, gsub = string.formatters, string.gsub
local concat = table.concat
local round = math.round
@@ -35,7 +36,11 @@ local pdfflushobject = lpdf.flushobject
-- 22 : << /Bounds [ ] /Domain [ 0.0 1.0 ] /Encode [ 0.0 1.0 ] /FunctionType 3 /Functions [ 31 0 R ] >>
-- 31 : << /C0 [ 1.0 0.0 ] /C1 [ 0.0 1.0 ] /Domain [ 0.0 1.0 ] /FunctionType 2 /N 1.0 >>
-local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,separation)
+local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps)
+ if steps then
+ color_a = color_a[1]
+ color_b = color_b[1]
+ end
local f = pdfdictionary {
FunctionType = 2,
Domain = pdfarray(domain), -- domain is actually a string
@@ -55,12 +60,58 @@ local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,
lpdf.adddocumentshade(name,pdfreference(pdfflushobject(s)))
end
-function lpdf.circularshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation)
- shade(3,name,domain,color_a,color_b,n,colorspace,coordinates,separation)
+local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
+ local func = nil
+ if steps then
+ local list = pdfarray()
+ local bounds = pdfarray()
+ local encode = pdfarray()
+ for i=1,steps do
+ bounds[i] = fractions[i] or 1
+ encode[2*i-1] = 0
+ encode[2*i] = 1
+ list [i] = pdfdictionary {
+ FunctionType = 2,
+ Domain = pdfarray(domain), -- domain is actually a string
+ C0 = pdfarray(color_a[i]),
+ C1 = pdfarray(color_b[i]),
+ N = tonumber(n),
+ }
+ end
+ func = pdfdictionary {
+ FunctionType = 3,
+ Bounds = bounds,
+ Encode = encode,
+ Functions = list,
+ Domain = pdfarray(domain), -- domain is actually a string
+ }
+ else
+ func = pdfdictionary {
+ FunctionType = 2,
+ Domain = pdfarray(domain), -- domain is actually a string
+ C0 = pdfarray(color_a),
+ C1 = pdfarray(color_b),
+ N = tonumber(n),
+ }
+ end
+ separation = separation and registrations.getspotcolorreference(separation)
+ local s = pdfdictionary {
+ ShadingType = stype,
+ ColorSpace = separation and pdfreference(separation) or pdfconstant(colorspace),
+ Function = pdfreference(pdfflushobject(func)),
+ Coords = pdfarray(coordinates),
+ Extend = pdfarray { true, true },
+ AntiAlias = pdfboolean(true),
+ }
+ lpdf.adddocumentshade(name,pdfreference(pdfflushobject(s)))
+end
+
+function lpdf.circularshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
+ shade(3,name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
end
-function lpdf.linearshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation)
- shade(2,name,domain,color_a,color_b,n,colorspace,coordinates,separation)
+function lpdf.linearshade(name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
+ shade(2,name,domain,color_a,color_b,n,colorspace,coordinates,separation,steps,fractions)
end
-- inline bitmaps but xform'd
@@ -100,9 +151,9 @@ function nodeinjections.injectbitmap(t)
CS = colorspace,
BPC = 8,
F = pdfconstant("AHx"),
---~ CS = nil,
---~ BPC = 1,
---~ IM = true,
+ -- CS = nil,
+ -- BPC = 1,
+ -- IM = true,
}
-- for some reasons it only works well if we take a 1bp boundingbox
local urx, ury = 1/basepoints, 1/basepoints
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ini.lua
index 834f845c59a..2149f4729a4 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ini.lua
@@ -12,6 +12,7 @@ local setmetatable, getmetatable, type, next, tostring, tonumber, rawset = setme
local char, byte, format, gsub, concat, match, sub, gmatch = string.char, string.byte, string.format, string.gsub, table.concat, string.match, string.sub, string.gmatch
local utfchar, utfbyte, utfvalues = utf.char, utf.byte, utf.values
local sind, cosd, floor, max, min = math.sind, math.cosd, math.floor, math.max, math.min
+local sort = table.sort
local lpegmatch, P, C, R, S, Cc, Cs = lpeg.match, lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc, lpeg.Cs
local formatters = string.formatters
local isboolean = string.is_boolean
@@ -65,32 +66,14 @@ local two_strings = interfaces.strings[2]
local pdf = pdf
local factor = number.dimenfactors.bp
-if pdf.setinfo then
- -- table.setmetatablenewindex(pdf,function(t,k,v)
- -- report_blocked("'pdf.%s' is not supported",k)
- -- end)
- -- the getters are harmless
-end
+do
-if not pdf.setinfo then
- function pdf.setinfo (s) pdf.info = s end
- function pdf.setcatalog(s) pdf.catalog = s end
- function pdf.setnames (s) pdf.names = s end
- function pdf.settrailer(s) pdf.trailer = s end
-end
+ local texget = tex.get
+ local texset = tex.set
-if not pdf.getpos then
- function pdf.getpos () return pdf.h, pdf.v end
- function pdf.gethpos () return pdf.h end
- function pdf.getvpos () return pdf.v end
- function pdf.hasmatrix() return false end
- function pdf.getmatrix() return 1, 0, 0, 1, 0, 0 end
-end
+ function pdf.setmajorversion (n) texset("global","pdfmajorversion", n) end
+ function pdf.getmajorversion ( ) return texget("pdfmajorversion") end
-if not pdf.setpageresources then
- function pdf.setpageresources (s) pdf.pageresources = s end
- function pdf.setpageattributes (s) pdf.pageattributes = s end
- function pdf.setpagesattributes(s) pdf.pagesattributes = s end
end
local pdfsetinfo = pdf.setinfo
@@ -113,15 +96,6 @@ local pdfimmediateobject = pdf.immediateobj
local pdfdeferredobject = pdf.obj
local pdfreferenceobject = pdf.refobj
--- function pdf.setinfo () report_blocked("'pdf.%s' is not supported","setinfo") end -- use lpdf.addtoinfo etc
--- function pdf.setcatalog () report_blocked("'pdf.%s' is not supported","setcatalog") end
--- function pdf.setnames () report_blocked("'pdf.%s' is not supported","setnames") end
--- function pdf.settrailer () report_blocked("'pdf.%s' is not supported","settrailer") end
--- function pdf.setpageresources () report_blocked("'pdf.%s' is not supported","setpageresources") end
--- function pdf.setpageattributes () report_blocked("'pdf.%s' is not supported","setpageattributes") end
--- function pdf.setpagesattributes() report_blocked("'pdf.%s' is not supported","setpagesattributes") end
--- function pdf.registerannot () report_blocked("'pdf.%s' is not supported","registerannot") end
-
local function pdfdisablecommand(command)
pdf[command] = function() report_blocked("'pdf.%s' is not supported",command) end
end
@@ -161,44 +135,57 @@ codeinjections.getvpos = pdfgetvpos lpdf.getvpos = pdfgetvpos
codeinjections.hasmatrix = pdfhasmatrix lpdf.hasmatrix = pdfhasmatrix
codeinjections.getmatrix = pdfgetmatrix lpdf.getmatrix = pdfgetmatrix
-function lpdf.transform(llx,lly,urx,ury)
+-- local function transform(llx,lly,urx,ury,rx,sx,sy,ry)
+-- local x1 = llx * rx + lly * sy
+-- local y1 = llx * sx + lly * ry
+-- local x2 = llx * rx + ury * sy
+-- local y2 = llx * sx + ury * ry
+-- local x3 = urx * rx + lly * sy
+-- local y3 = urx * sx + lly * ry
+-- local x4 = urx * rx + ury * sy
+-- local y4 = urx * sx + ury * ry
+-- llx = min(x1,x2,x3,x4);
+-- lly = min(y1,y2,y3,y4);
+-- urx = max(x1,x2,x3,x4);
+-- ury = max(y1,y2,y3,y4);
+-- return llx, lly, urx, ury
+-- end
+
+function lpdf.transform(llx,lly,urx,ury) -- not yet used so unchecked
if pdfhasmatrix() then
local sx, rx, ry, sy = pdfgetmatrix()
local w, h = urx - llx, ury - lly
return llx, lly, llx + sy*w - ry*h, lly + sx*h - rx*w
+ -- return transform(llx,lly,urx,ury,sx,rx,ry,sy)
else
return llx, lly, urx, ury
end
end
--- function lpdf.rectangle(width,height,depth)
--- local h, v = pdfgetpos()
--- local llx, lly, urx, ury
--- if pdfhasmatrix() then
--- local sx, rx, ry, sy = pdfgetmatrix()
--- llx = 0
--- lly = -depth
--- -- llx = ry * depth
--- -- lly = -sx * depth
--- urx = sy * width - ry * height
--- ury = sx * height - rx * width
--- else
--- llx = 0
--- lly = -depth
--- urx = width
--- ury = height
--- return (h+llx)*factor, (v+lly)*factor, (h+urx)*factor, (v+ury)*factor
--- end
--- end
+-- funny values for tx and ty
-function lpdf.rectangle(width,height,depth)
- local h, v = pdfgetpos()
+function lpdf.rectangle(width,height,depth,offset)
+ local tx, ty = pdfgetpos()
+ if offset then
+ tx = tx - offset
+ ty = ty + offset
+ width = width + 2*offset
+ height = height + offset
+ depth = depth + offset
+ end
if pdfhasmatrix() then
- local sx, rx, ry, sy = pdfgetmatrix()
- -- return (h+ry*depth)*factor, (v-sx*depth)*factor, (h+sy*width-ry*height)*factor, (v+sx*height-rx*width)*factor
- return h *factor, (v- depth)*factor, (h+sy*width-ry*height)*factor, (v+sx*height-rx*width)*factor
+ local rx, sx, sy, ry = pdfgetmatrix()
+ return
+ factor * tx,
+ factor * (ty - ry*depth + sx*width),
+ factor * (tx + rx*width - sy*height),
+ factor * (ty + ry*height - sx*width)
else
- return h *factor, (v- depth)*factor, (h+ width )*factor, (v+ height )*factor
+ return
+ factor * tx,
+ factor * (ty - depth),
+ factor * (tx + width),
+ factor * (ty + height)
end
end
@@ -333,34 +320,85 @@ local f_tonumber = formatters["%F"]
local tostring_a, tostring_d
+-- tostring_d = function(t,contentonly,key)
+-- if next(t) then
+-- local r, rn = { }, 0
+-- for k, v in next, t do
+-- -- for k, v in sortedhash(t) do -- can be an option
+-- rn = rn + 1
+-- local tv = type(v)
+-- if tv == "string" then
+-- r[rn] = f_key_value(k,toeight(v))
+-- elseif tv == "number" then
+-- r[rn] = f_key_number(k,v)
+-- -- elseif tv == "unicode" then -- can't happen
+-- -- r[rn] = f_key_value(k,tosixteen(v))
+-- elseif tv == "table" then
+-- local mv = getmetatable(v)
+-- if mv and mv.__lpdftype then
+-- -- if v == t then
+-- -- report_objects("ignoring circular reference in dirctionary")
+-- -- r[rn] = f_key_null(k)
+-- -- else
+-- r[rn] = f_key_value(k,tostring(v))
+-- -- end
+-- elseif v[1] then
+-- r[rn] = f_key_value(k,tostring_a(v))
+-- else
+-- r[rn] = f_key_value(k,tostring_d(v))
+-- end
+-- else
+-- r[rn] = f_key_value(k,tostring(v))
+-- end
+-- end
+-- if contentonly then
+-- return concat(r," ")
+-- elseif key then
+-- return f_key_dictionary(key,r)
+-- else
+-- return f_dictionary(r)
+-- end
+-- elseif contentonly then
+-- return ""
+-- else
+-- return "<< >>"
+-- end
+-- end
+
tostring_d = function(t,contentonly,key)
if next(t) then
- local r, rn = { }, 0
- for k, v in next, t do
- rn = rn + 1
+ local r, n = { }, 0
+ for k in next, t do
+ n = n + 1
+ r[n] = k
+ end
+ sort(r)
+ for i=1,n do
+ local k = r[i]
+ local v = t[k]
local tv = type(v)
if tv == "string" then
- r[rn] = f_key_value(k,toeight(v))
+ r[i] = f_key_value(k,toeight(v))
elseif tv == "number" then
- r[rn] = f_key_number(k,v)
+ r[i] = f_key_number(k,v)
-- elseif tv == "unicode" then -- can't happen
- -- r[rn] = f_key_value(k,tosixteen(v))
+ -- r[i] = f_key_value(k,tosixteen(v))
elseif tv == "table" then
local mv = getmetatable(v)
if mv and mv.__lpdftype then
-- if v == t then
-- report_objects("ignoring circular reference in dirctionary")
- -- r[rn] = f_key_null(k)
+ -- r[i] = f_key_null(k)
-- else
- r[rn] = f_key_value(k,tostring(v))
+ r[i] = f_key_value(k,tostring(v))
-- end
elseif v[1] then
- r[rn] = f_key_value(k,tostring_a(v))
+ r[i] = f_key_value(k,tostring_a(v))
else
- r[rn] = f_key_value(k,tostring_d(v))
+ r[i] = f_key_value(k,tostring_d(v))
end
else
- r[rn] = f_key_value(k,tostring(v))
+ r[i] = f_key_value(k,tostring(v))
end
end
if contentonly then
@@ -542,47 +580,58 @@ local function pdfconstant(str,default)
return c
end
-local p_null = { } setmetatable(p_null, mt_z)
-local p_true = { } setmetatable(p_true, mt_t)
-local p_false = { } setmetatable(p_false,mt_f)
+local escaped = Cs((S(forbidden)/replacements + P(1))^0)
+----- escaped = Cs((1-forbidden)^0 * S(forbidden)/replacements * ((S(forbidden)/replacements + P(1))^0)
-local function pdfnull()
- return p_null
+function lpdf.escaped(str)
+ return lpegmatch(escaped,str) or str
end
---~ print(pdfboolean(false),pdfboolean(false,false),pdfboolean(false,true))
---~ print(pdfboolean(true),pdfboolean(true,false),pdfboolean(true,true))
---~ print(pdfboolean(nil,true),pdfboolean(nil,false))
+do
-local function pdfboolean(b,default)
- if type(b) == "boolean" then
- return b and p_true or p_false
- else
- return default and p_true or p_false
+ local p_null = { } setmetatable(p_null, mt_z)
+ local p_true = { } setmetatable(p_true, mt_t)
+ local p_false = { } setmetatable(p_false,mt_f)
+
+ pdfnull = function()
+ return p_null
+ end
+
+ pdfboolean = function(b,default)
+ if type(b) == "boolean" then
+ return b and p_true or p_false
+ else
+ return default and p_true or p_false
+ end
end
-end
-local r_zero = setmetatable({ 0 },mt_r)
+ -- print(pdfboolean(false),pdfboolean(false,false),pdfboolean(false,true))
+ -- print(pdfboolean(true),pdfboolean(true,false),pdfboolean(true,true))
+ -- print(pdfboolean(nil,true),pdfboolean(nil,false))
-local function pdfreference(r) -- maybe make a weak table
- if r and r ~= 0 then
- return setmetatable({ r },mt_r)
- else
- return r_zero
+ local r_zero = setmetatable({ 0 },mt_r)
+
+ pdfreference = function(r) -- maybe make a weak table
+ if r and r ~= 0 then
+ return setmetatable({ r },mt_r)
+ else
+ return r_zero
+ end
end
-end
-local v_zero = setmetatable({ 0 },mt_v)
-local v_empty = setmetatable({ "" },mt_v)
+ local v_zero = setmetatable({ 0 },mt_v)
+ local v_empty = setmetatable({ "" },mt_v)
-local function pdfverbose(t) -- maybe check for type
- if t == 0 then
- return v_zero
- elseif t == "" then
- return v_empty
- else
- return setmetatable({ t },mt_v)
+ pdfverbose = function(t) -- maybe check for type
+ if t == 0 then
+ return v_zero
+ elseif t == "" then
+ return v_empty
+ else
+ return setmetatable({ t },mt_v)
+ end
end
+
end
lpdf.stream = pdfstream -- THIS WILL PROBABLY CHANGE
@@ -1093,12 +1142,6 @@ function lpdf.limited(n,min,max,default)
end
end
--- lpdf.addtoinfo("ConTeXt.Version", environment.version)
--- lpdf.addtoinfo("ConTeXt.Time", os.date("%Y.%m.%d %H:%M")) -- :%S
--- lpdf.addtoinfo("ConTeXt.Jobname", environment.jobname)
--- lpdf.addtoinfo("ConTeXt.Url", "www.pragma-ade.com")
--- lpdf.addtoinfo("ConTeXt.Support", "contextgarden.net")
-
-- if not pdfreferenceobject then
--
-- local delayed = { }
@@ -1163,12 +1206,17 @@ end
do
- local f_actual_text_one = formatters["BT /Span << /ActualText <feff%04x> >> BDC [<feff>] TJ %s EMC ET"]
- local f_actual_text_two = formatters["BT /Span << /ActualText <feff%04x%04x> >> BDC [<feff>] TJ %s EMC ET"]
- local f_actual_text = formatters["/Span <</ActualText %s >> BDC"]
+ local f_actual_text_one = formatters["BT /Span << /ActualText <feff%04x> >> BDC [<feff>] TJ %s EMC ET"]
+ local f_actual_text_one_b = formatters["BT /Span << /ActualText <feff%04x> >> BDC [<feff>] TJ "]
+ local f_actual_text_two = formatters["BT /Span << /ActualText <feff%04x%04x> >> BDC [<feff>] TJ %s EMC ET"]
+ local f_actual_text_two_b = formatters["BT /Span << /ActualText <feff%04x%04x> >> BDC [<feff>] TJ "]
+ local s_actual_text_e = " EMC ET"
+ local f_actual_text = formatters["/Span <</ActualText %s >> BDC"]
- local context = context
- local pdfdirect = nodes.pool.pdfdirect
+ local context = context
+ local pdfdirect = nodes.pool.pdfdirect
+
+ -- todo: use tounicode from the font mapper
function codeinjections.unicodetoactualtext(unicode,pdfcode)
if unicode < 0x10000 then
@@ -1178,6 +1226,18 @@ do
end
end
+ function codeinjections.startunicodetoactualtext(unicode)
+ if unicode < 0x10000 then
+ return f_actual_text_one_b(unicode)
+ else
+ return f_actual_text_two_b(unicode/1024+0xD800,unicode%1024+0xDC00)
+ end
+ end
+
+ function codeinjections.stopunicodetoactualtext()
+ return s_actual_text_e
+ end
+
implement {
name = "startactualtext",
arguments = "string",
@@ -1197,17 +1257,15 @@ end
-- interface
-local lpdfverbose = lpdf.verbose
-
implement { name = "lpdf_collectedresources", actions = { lpdf.collectedresources, context } }
implement { name = "lpdf_addtocatalog", arguments = two_strings, actions = lpdf.addtocatalog }
-implement { name = "lpdf_addtoinfo", arguments = two_strings, actions = lpdf.addtoinfo }
+implement { name = "lpdf_addtoinfo", arguments = two_strings, actions = function(a,b,c) lpdf.addtoinfo(a,b,c) end } -- gets adapted
implement { name = "lpdf_addtonames", arguments = two_strings, actions = lpdf.addtonames }
-implement { name = "lpdf_addpageattributes", arguments = two_strings, actions = lpdf.addtopageattributes }
-implement { name = "lpdf_addpagesattributes", arguments = two_strings, actions = lpdf.addtopagesattributes }
-implement { name = "lpdf_addpageresources", arguments = two_strings, actions = lpdf.addtopageresources }
-implement { name = "lpdf_adddocumentextgstate", arguments = two_strings, actions = function(a,b) lpdf.adddocumentextgstate (a,lpdfverbose(b)) end }
-implement { name = "lpdf_adddocumentcolorspace", arguments = two_strings, actions = function(a,b) lpdf.adddocumentcolorspace(a,lpdfverbose(b)) end }
-implement { name = "lpdf_adddocumentpattern", arguments = two_strings, actions = function(a,b) lpdf.adddocumentpattern (a,lpdfverbose(b)) end }
-implement { name = "lpdf_adddocumentshade", arguments = two_strings, actions = function(a,b) lpdf.adddocumentshade (a,lpdfverbose(b)) end }
+implement { name = "lpdf_addtopageattributes", arguments = two_strings, actions = lpdf.addtopageattributes }
+implement { name = "lpdf_addtopagesattributes", arguments = two_strings, actions = lpdf.addtopagesattributes }
+implement { name = "lpdf_addtopageresources", arguments = two_strings, actions = lpdf.addtopageresources }
+implement { name = "lpdf_adddocumentextgstate", arguments = two_strings, actions = function(a,b) lpdf.adddocumentextgstate (a,pdfverbose(b)) end }
+implement { name = "lpdf_adddocumentcolorspace", arguments = two_strings, actions = function(a,b) lpdf.adddocumentcolorspace(a,pdfverbose(b)) end }
+implement { name = "lpdf_adddocumentpattern", arguments = two_strings, actions = function(a,b) lpdf.adddocumentpattern (a,pdfverbose(b)) end }
+implement { name = "lpdf_adddocumentshade", arguments = two_strings, actions = function(a,b) lpdf.adddocumentshade (a,pdfverbose(b)) end }
diff --git a/Master/texmf-dist/tex/context/base/lpdf-mis.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-mis.lua
index a1b12d8c0bb..62713727d8e 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-mis.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-mis.lua
@@ -17,7 +17,7 @@ if not modules then modules = { } end modules ['lpdf-mis'] = {
local next, tostring = next, tostring
local format, gsub, formatters = string.format, string.gsub, string.formatters
-local texset = tex.set
+local texset, texget = tex.set, tex.get
local backends, lpdf, nodes = backends, lpdf, nodes
@@ -206,6 +206,13 @@ local function setupidentity()
end
local id = lpdf.id()
addtoinfo("ID", pdfstring(id), id) -- needed for pdf/x
+ --
+ addtoinfo("ConTeXt.Version", environment.version)
+ addtoinfo("ConTeXt.Time", os.date("%Y-%m-%d %H:%M"))
+ addtoinfo("ConTeXt.Jobname", environment.jobname or tex.jobname)
+ addtoinfo("ConTeXt.Url", "www.pragma-ade.com")
+ addtoinfo("ConTeXt.Support", "contextgarden.net")
+ --
done = true
else
-- no need for a message
@@ -253,31 +260,33 @@ local pagespecs = {
[variables.fixed] = { mode = "UseNone", layout = "auto", fit = false, fixed = true, duplex = false }, -- noscale
[variables.landscape] = { mode = "UseNone", layout = "auto", fit = false, fixed = true, duplex = "DuplexFlipShortEdge" },
[variables.portrait] = { mode = "UseNone", layout = "auto", fit = false, fixed = true, duplex = "DuplexFlipLongEdge" },
-
+ [variables.page] = { mode = "UseNone", layout = "auto", fit = false, fixed = true, duplex = "Simplex" },
}
local pagespec, topoffset, leftoffset, height, width, doublesided = "default", 0, 0, 0, 0, false
-
-local pdfpaperheight = tex.pdfpageheight
-local pdfpaperwidth = tex.pdfpagewidth
+local cropoffset, bleedoffset, trimoffset, artoffset = 0, 0, 0, 0
function codeinjections.setupcanvas(specification)
local paperheight = specification.paperheight
local paperwidth = specification.paperwidth
local paperdouble = specification.doublesided
if paperheight then
- texset('global','pdfpageheight',paperheight)
- pdfpaperheight = paperheight
+ texset('global','pageheight',paperheight)
end
if paperwidth then
- texset('global','pdfpagewidth',paperwidth)
- pdfpaperwidth = paperwidth
+ texset('global','pagewidth',paperwidth)
end
- pagespec = specification.mode or pagespec
- topoffset = specification.topoffset or 0
- leftoffset = specification.leftoffset or 0
- height = specification.height or pdfpaperheight
- width = specification.width or pdfpaperwidth
+ pagespec = specification.mode or pagespec
+ topoffset = specification.topoffset or 0
+ leftoffset = specification.leftoffset or 0
+ height = specification.height or texget("pageheight")
+ width = specification.width or texget("pagewidth")
+ --
+ cropoffset = specification.cropoffset or 0
+ trimoffset = cropoffset - (specification.trimoffset or 0)
+ bleedoffset = trimoffset - (specification.bleedoffset or 0)
+ artoffset = bleedoffset - (specification.artoffset or 0)
+ --
if paperdouble ~= nil then
doublesided = paperdouble
end
@@ -327,29 +336,38 @@ local function documentspecification()
})
end
addtoinfo ("Trapped", pdfconstant("False")) -- '/Trapped' in /Info, 'Trapped' in XMP
- addtocatalog("Version", pdfconstant(format("1.%s",tex.pdfminorversion)))
+ addtocatalog("Version", pdfconstant(format("1.%s",pdf.getminorversion())))
end
-- temp hack: the mediabox is not under our control and has a precision of 4 digits
-local factor = number.dimenfactors.bp
+local factor = number.dimenfactors.bp
+local f_value = formatters["%0.4F"]
local function boxvalue(n) -- we could share them
- return pdfverbose(formatters["%0.4F"](factor * n))
+ return pdfverbose(f_value(factor * n))
end
local function pagespecification()
- local pageheight = pdfpaperheight
- local box = pdfarray { -- can be cached
- boxvalue(leftoffset),
- boxvalue(pageheight+topoffset-height),
- boxvalue(width-leftoffset),
- boxvalue(pageheight-topoffset),
- }
- addtopageattributes("CropBox",box) -- mandate for rendering
- addtopageattributes("TrimBox",box) -- mandate for pdf/x
- -- addtopageattributes("BleedBox",box)
- -- addtopageattributes("ArtBox",box)
+ local llx = leftoffset
+ local lly = texget("pageheight") + topoffset - height
+ local urx = width - leftoffset
+ local ury = texget("pageheight") - topoffset
+ -- boxes can be cached
+ local function extrabox(WhatBox,offset,always)
+ if offset ~= 0 or always then
+ addtopageattributes(WhatBox, pdfarray {
+ boxvalue(llx + offset),
+ boxvalue(lly + offset),
+ boxvalue(urx - offset),
+ boxvalue(ury - offset),
+ })
+ end
+ end
+ extrabox("CropBox",cropoffset,true) -- mandate for rendering
+ extrabox("TrimBox",trimoffset,true) -- mandate for pdf/x
+ extrabox("BleedBox",bleedoffset) -- optional
+ -- extrabox("ArtBox",artoffset) -- optional .. unclear what this is meant to do
end
lpdf.registerpagefinalizer(pagespecification,"page specification")
diff --git a/Master/texmf-dist/tex/context/base/lpdf-mov.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-mov.lua
index 87375e4ce74..87375e4ce74 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-mov.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-mov.lua
diff --git a/Master/texmf-dist/tex/context/base/lpdf-nod.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-nod.lua
index 6295947d008..3dd5a664807 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-nod.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-nod.lua
@@ -28,8 +28,8 @@ local pdfliteral = register(new_node("whatsit", whatsitcodes.pdfliteral))
local pdfsave = register(new_node("whatsit", whatsitcodes.pdfsave))
local pdfrestore = register(new_node("whatsit", whatsitcodes.pdfrestore))
local pdfsetmatrix = register(new_node("whatsit", whatsitcodes.pdfsetmatrix))
-local pdfdest = register(new_node("whatsit", whatsitcodes.pdfdest)) setfield(pdfdest,"named_id",1) -- xyz_zoom untouched
-local pdfannot = register(new_node("whatsit", whatsitcodes.pdfannot))
+----- pdfdest = register(new_node("whatsit", whatsitcodes.pdfdest)) setfield(pdfdest,"named_id",1) -- xyz_zoom untouched
+----- pdfannot = register(new_node("whatsit", whatsitcodes.pdfannot))
local variables = interfaces.variables
@@ -108,23 +108,23 @@ nodeinjections.transform = nodepool.pdfsetmatrix
function nodepool.pdfannotation(w,h,d,data,n)
report("don't use node based annotations!")
os.exit()
--- local t = copy_node(pdfannot)
--- if w and w ~= 0 then
--- setfield(t,"width",w)
--- end
--- if h and h ~= 0 then
--- setfield(t,"height",h)
--- end
--- if d and d ~= 0 then
--- setfield(t,"depth",d)
--- end
--- if n then
--- setfield(t,"objnum",n)
--- end
--- if data and data ~= "" then
--- setfield(t,"data",data)
--- end
--- return t
+ -- local t = copy_node(pdfannot)
+ -- if w and w ~= 0 then
+ -- setfield(t,"width",w)
+ -- end
+ -- if h and h ~= 0 then
+ -- setfield(t,"height",h)
+ -- end
+ -- if d and d ~= 0 then
+ -- setfield(t,"depth",d)
+ -- end
+ -- if n then
+ -- setfield(t,"objnum",n)
+ -- end
+ -- if data and data ~= "" then
+ -- setfield(t,"data",data)
+ -- end
+ -- return t
end
-- (!) The next code in pdfdest.w is wrong:
@@ -143,41 +143,41 @@ end
function nodepool.pdfdestination(w,h,d,name,view,n)
report("don't use node based destinations!")
os.exit()
--- local t = copy_node(pdfdest)
--- local hasdimensions = false
--- if w and w ~= 0 then
--- setfield(t,"width",w)
--- hasdimensions = true
--- end
--- if h and h ~= 0 then
--- setfield(t,"height",h)
--- hasdimensions = true
--- end
--- if d and d ~= 0 then
--- setfield(t,"depth",d)
--- hasdimensions = true
--- end
--- if n then
--- setfield(t,"objnum",n)
--- end
--- view = views[view] or view or 1 -- fit is default
--- setfield(t,"dest_id",name)
--- setfield(t,"dest_type",view)
--- if hasdimensions and view == 0 then -- xyz
--- -- see (!) s -> m -> t -> r
--- -- linked
--- local s = copy_node(pdfsave)
--- local m = copy_node(pdfsetmatrix)
--- local r = copy_node(pdfrestore)
--- setfield(m,"data","1 0 0 1")
--- setfield(s,"next",m)
--- setfield(m,"next",t)
--- setfield(t,"next",r)
--- setfield(m,"prev",s)
--- setfield(t,"prev",m)
--- setfield(r,"prev",t)
--- return s -- a list
--- else
--- return t
--- end
+ -- local t = copy_node(pdfdest)
+ -- local hasdimensions = false
+ -- if w and w ~= 0 then
+ -- setfield(t,"width",w)
+ -- hasdimensions = true
+ -- end
+ -- if h and h ~= 0 then
+ -- setfield(t,"height",h)
+ -- hasdimensions = true
+ -- end
+ -- if d and d ~= 0 then
+ -- setfield(t,"depth",d)
+ -- hasdimensions = true
+ -- end
+ -- if n then
+ -- setfield(t,"objnum",n)
+ -- end
+ -- view = views[view] or view or 1 -- fit is default
+ -- setfield(t,"dest_id",name)
+ -- setfield(t,"dest_type",view)
+ -- if hasdimensions and view == 0 then -- xyz
+ -- -- see (!) s -> m -> t -> r
+ -- -- linked
+ -- local s = copy_node(pdfsave)
+ -- local m = copy_node(pdfsetmatrix)
+ -- local r = copy_node(pdfrestore)
+ -- setfield(m,"data","1 0 0 1")
+ -- setfield(s,"next",m)
+ -- setfield(m,"next",t)
+ -- setfield(t,"next",r)
+ -- setfield(m,"prev",s)
+ -- setfield(t,"prev",m)
+ -- setfield(r,"prev",t)
+ -- return s -- a list
+ -- else
+ -- return t
+ -- end
end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-pda.xml b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pda.xml
index 3f6b969c01d..3f6b969c01d 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-pda.xml
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pda.xml
diff --git a/Master/texmf-dist/tex/context/base/lpdf-pdx.xml b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pdx.xml
index d55e1fdf303..d55e1fdf303 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-pdx.xml
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pdx.xml
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lpdf-pua.xml b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pua.xml
new file mode 100644
index 00000000000..c50e1f05be4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-pua.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0"?>
+
+<!-- lpdf-pua.xml -->
+
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li xml:lang="x-default"/>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:description>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default"/>
+ </rdf:Alt>
+ </dc:description>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default"/>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
+ <pdfx:ConTeXt.Jobname/>
+ <pdfx:ConTeXt.Time/>
+ <pdfx:ConTeXt.Url/>
+ <pdfx:ConTeXt.Version/>
+ <pdfx:ID/>
+ <pdfx:PTEX.Fullbanner/>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
+ <xmp:CreateDate/>
+ <xmp:CreatorTool/>
+ <xmp:ModifyDate/>
+ <xmp:MetadataDate/>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Keywords/>
+ <pdf:Producer/>
+ <pdf:Trapped>False</pdf:Trapped>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xmpMM:DocumentID/>
+ <xmpMM:InstanceID/>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
+ xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"
+ xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">
+ <pdfaExtension:schemas>
+ <rdf:Bag>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>pdf</pdfaSchema:prefix>
+ <pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>A name object indicating whether the document has been modified to include trapping information</pdfaProperty:description>
+ <pdfaProperty:name>Trapped</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://purl.org/dc/elements/1.1/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>pdf</pdfaSchema:prefix>
+ <pdfaSchema:schema>Dubline Core Schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>Subject in Document Properties</pdfaProperty:description>
+ <pdfaProperty:name>description</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://ns.adobe.com/pdfx/1.3/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>pdfx</pdfaSchema:prefix>
+ <pdfaSchema:schema>PDF/X ID Schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>Name of the ConTeXt job</pdfaProperty:description>
+ <pdfaProperty:name>ConTeXt.Jobname</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>Time stamp of ConTeXt version</pdfaProperty:description>
+ <pdfaProperty:name>ConTeXt.Time</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>ConTeXt website</pdfaProperty:description>
+ <pdfaProperty:name>ConTeXt.Url</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>ConTeXt version</pdfaProperty:description>
+ <pdfaProperty:name>ConTeXt.Version</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>Banner of pdftex or one of its successors</pdfaProperty:description>
+ <pdfaProperty:name>PTEX.Fullbanner</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>external</pdfaProperty:category>
+ <pdfaProperty:description>Document identifier</pdfaProperty:description>
+ <pdfaProperty:name>ID</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>xmpMM</pdfaSchema:prefix>
+ <pdfaSchema:schema>XMP Media Management Schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>UUID based identifier for specific incarnation of a document</pdfaProperty:description>
+ <pdfaProperty:name>InstanceID</pdfaProperty:name>
+ <pdfaProperty:valueType>URI</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://www.aiim.org/pdfa/ns/id/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>pdfaid</pdfaSchema:prefix>
+ <pdfaSchema:schema>PDF/A ID Schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>Part of PDF/A standard</pdfaProperty:description>
+ <pdfaProperty:name>part</pdfaProperty:name>
+ <pdfaProperty:valueType>Integer</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>Amendment of PDF/A standard</pdfaProperty:description>
+ <pdfaProperty:name>amd</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>Conformance level of PDF/A standard</pdfaProperty:description>
+ <pdfaProperty:name>conformance</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaSchema:namespaceURI>http://www.aiim.org/pdfua/ns/id/</pdfaSchema:namespaceURI>
+ <pdfaSchema:prefix>pdfuaid</pdfaSchema:prefix>
+ <pdfaSchema:schema>PDF/UA identification schema</pdfaSchema:schema>
+ <pdfaSchema:property>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>PDF/UA version identifier</pdfaProperty:description>
+ <pdfaProperty:name>part</pdfaProperty:name>
+ <pdfaProperty:valueType>Integer</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>PDF/UA amendment identifier</pdfaProperty:description>
+ <pdfaProperty:name>amd</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <pdfaProperty:category>internal</pdfaProperty:category>
+ <pdfaProperty:description>PDF/UA corrigenda identifier</pdfaProperty:description>
+ <pdfaProperty:name>corr</pdfaProperty:name>
+ <pdfaProperty:valueType>Text</pdfaProperty:valueType>
+ </rdf:li>
+ </rdf:Seq>
+ </pdfaSchema:property>
+ </rdf:li>
+ </rdf:Bag>
+ </pdfaExtension:schemas>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ren.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ren.lua
index 61676d5a81a..81b9e9f2024 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ren.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-ren.lua
@@ -46,6 +46,8 @@ local addtopageattributes = lpdf.addtopageattributes
local addtopageresources = lpdf.addtopageresources
local addtocatalog = lpdf.addtocatalog
+local escaped = lpdf.escaped
+
local nodepool = nodes.pool
local register = nodepool.register
local pdfliteral = nodepool.pdfliteral
@@ -87,6 +89,12 @@ local textlayers, hidelayers, videlayers = pdfarray(), pdfarray(), pdfarray()
local pagelayers, pagelayersreference, cache = nil, nil, { }
local alphabetic = { }
+local escapednames = table.setmetatableindex(function(t,k)
+ local v = escaped(k)
+ t[k] = v
+ return v
+end)
+
local specifications = { }
local initialized = { }
@@ -139,7 +147,7 @@ local function useviewerlayer(name) -- move up so that we can use it as local
else
hidelayers[#hidelayers+1] = nr
end
- pagelayers[tag] = dr -- check
+ pagelayers[escapednames[tag]] = dr -- check
else
-- todo: message
end
@@ -183,14 +191,13 @@ local function flushtextlayers()
ON = videlayers,
OFF = hidelayers,
BaseState = pdf_on,
-
-AS = pdfarray {
- pdfdictionary {
- Category = pdfarray { pdfconstant("Print") },
- Event = pdfconstant("Print"),
- OCGs = (viewerlayers.hasorder and sortedlayers) or nil,
- }
-},
+ AS = pdfarray {
+ pdfdictionary {
+ Category = pdfarray { pdfconstant("Print") },
+ Event = pdfconstant("Print"),
+ OCGs = (viewerlayers.hasorder and sortedlayers) or nil,
+ }
+ },
},
}
addtocatalog("OCProperties",d)
@@ -235,7 +242,7 @@ function codeinjections.startlayer(name) -- used in mp
name = "unknown"
end
useviewerlayer(name)
- return format("/OC /%s BDC",name)
+ return format("/OC /%s BDC",escapednames[name])
end
function codeinjections.stoplayer(name) -- used in mp
@@ -248,7 +255,7 @@ function nodeinjections.startlayer(name)
local c = cache[name]
if not c then
useviewerlayer(name)
- c = register(pdfliteral(format("/OC /%s BDC",name)))
+ c = register(pdfliteral(format("/OC /%s BDC",escapednames[name])))
cache[name] = c
end
return copy_node(c)
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lpdf-res.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-res.lua
new file mode 100644
index 00000000000..ca092c772bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-res.lua
@@ -0,0 +1,40 @@
+if not modules then modules = { } end modules ['lpdf-res'] = {
+ version = 1.001,
+ comment = "companion to lpdf-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local codeinjections = backends.codeinjections
+local implement = interfaces.implement
+
+local nuts = nodes.nuts
+local tonut = nodes.tonut
+
+local setfield = nuts.setfield
+local setlist = nuts.setlist
+
+local new_hlist = nuts.pool.hlist
+
+local saveboxresource = tex.saveboxresource
+local useboxresource = tex.useboxresource
+local getboxresource = tex.getboxresourcedimensions
+
+function codeinjections.registerboxresource(n)
+ return saveboxresource(n,nil,lpdf.collectedresources(),true) -- direct, todo: accept functions as attr/resources
+end
+
+function codeinjections.restoreboxresource(index)
+ local hbox = new_hlist()
+ local list, wd, ht, dp = useboxresource(index)
+ setlist(hbox,tonut(list))
+ setfield(hbox,"width", wd)
+ setfield(hbox,"height", ht)
+ setfield(hbox,"depth", dp)
+ return hbox -- so we return a nut !
+end
+
+function codeinjections.boxresourcedimensions(index)
+ return getboxresource(index)
+end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-swf.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-swf.lua
index 88cdcc4ec51..88cdcc4ec51 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-swf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-swf.lua
diff --git a/Master/texmf-dist/tex/context/base/lpdf-tag.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-tag.lua
index 79ccfe07596..79b8ac36877 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-tag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-tag.lua
@@ -63,11 +63,13 @@ local getattr = nuts.getattr
local getprev = nuts.getprev
local getnext = nuts.getnext
local getlist = nuts.getlist
+
local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setlist = nuts.setlist
local traverse_nodes = nuts.traverse
local tosequence = nuts.tosequence
-local copy_node = nuts.copy
local slide_nodelist = nuts.slide
local insert_before = nuts.insert_before
local insert_after = nuts.insert_after
@@ -87,6 +89,7 @@ local specifications = structurestags.specifications
local usedlabels = structurestags.labels
local properties = structurestags.properties
local lasttaginchain = structurestags.lastinchain
+local usewithcare = structurestags.usewithcare
local usedmapping = { }
@@ -273,16 +276,19 @@ end
local f_BDC = formatters["/%s <</MCID %s>> BDC"]
-local function makecontent(parent,id)
+local function makecontent(parent,id,specification)
local tag = parent.tag
local kids = parent.kids
local last = index
if id == "image" then
+ local list = specification.taglist
+ local data = usewithcare.images[list[#list]]
+ local label = data and data.label
local d = pdfdictionary {
Type = pdf_mcr,
Pg = pageref,
MCID = last,
- Alt = "image",
+ Alt = pdfunicode(label ~= "" and label or "image"),
}
kids[#kids+1] = d
elseif pagenum == parent.pnum then
@@ -303,6 +309,10 @@ local function makecontent(parent,id)
return f_BDC(tag,last)
end
+local function makeignore(specification)
+ return "/Artifact BMC"
+end
+
-- no need to adapt head, as we always operate on lists
function nodeinjections.addtags(head)
@@ -388,14 +398,17 @@ function nodeinjections.addtags(head)
end
end
- local prev = common > 0 and elements[taglist[common]] or root
+ local prev = common > 0 and elements[taglist[common]] or root
+ local ignore = false
+ local literal = nil
for j=common+1,noftags do
local tag = taglist[j]
local prv = elements[tag] or makeelement(tag,prev)
if prv == false then
-- ignore this one
- prev = false
+ prev = false
+ ignore = true
break
elseif prv == true then
-- skip this one
@@ -405,27 +418,26 @@ function nodeinjections.addtags(head)
end
if prev then
- -- use insert instead:
- local literal = pdfliteral(makecontent(prev,id))
- local prev = getprev(start)
+ literal = pdfliteral(makecontent(prev,id,specification))
+ elseif ignore then
+ literal = pdfliteral(makeignore(specification))
+ end
+ if literal then
+ local prev = getprev(start)
if prev then
- setfield(prev,"next",literal)
- setfield(literal,"prev",prev)
+ setlink(prev,literal)
end
- setfield(start,"prev",literal)
- setfield(literal,"next",start)
+ setlink(literal,start)
if list and getlist(list) == start then
- setfield(list,"list",literal)
+ setlist(list,literal)
end
-- use insert instead:
local literal = pdfliteral("EMC")
local next = getnext(stop)
if next then
- setfield(next,"prev",literal)
- setfield(literal,"next",next)
+ setlink(literal,next)
end
- setfield(stop,"next",literal)
- setfield(literal,"prev",stop)
+ setlink(stop,literal)
end
top = taglist
noftop = noftags
@@ -556,13 +568,11 @@ end
-- local literal = pdfliteral(result)
-- local prev = getprev(start)
-- if prev then
--- setfield(prev,"next",literal)
--- setfield(literal,"prev",prev)
+-- setlink(prev,literal)
-- end
--- setfield(start,"prev",literal)
--- setfield(literal,"next",start)
+-- setlink(literal,start)
-- if list and getlist(list) == start then
--- setfield(list,"list",literal)
+-- setlist(list,literal)
-- end
-- end
--
@@ -581,11 +591,9 @@ end
-- -- use insert instead:
-- local next = getnext(last)
-- if next then
--- setfield(next,"prev",literal)
--- setfield(literal,"next",next)
+-- setlink(literal,next)
-- end
--- setfield(last,"next",literal)
--- setfield(literal,"prev",last)
+-- setlink(last,literal)
-- end
--
-- finishpage()
diff --git a/Master/texmf-dist/tex/context/base/lpdf-u3d.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-u3d.lua
index c9f4a03691e..c9f4a03691e 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-u3d.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-u3d.lua
diff --git a/Master/texmf-dist/tex/context/base/lpdf-wid.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-wid.lua
index 22971c2b710..73a56caa327 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-wid.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-wid.lua
@@ -177,6 +177,7 @@ local function analyzetransparency(transparencyvalue)
end
-- Attachments
+
local nofattachments = 0
local attachments = { }
local filestreams = { }
diff --git a/Master/texmf-dist/tex/context/base/lpdf-xmp.lua b/Master/texmf-dist/tex/context/base/mkiv/lpdf-xmp.lua
index b1a795c4b77..b8170319c11 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-xmp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lpdf-xmp.lua
@@ -7,7 +7,7 @@ if not modules then modules = { } end modules ['lpdf-xmp'] = {
comment = "with help from Peter Rolf",
}
-local tostring = tostring
+local tostring, type = tostring, type
local format, random, char, gsub, concat = string.format, math.random, string.char, string.gsub, table.concat
local xmlfillin = xml.fillin
@@ -37,47 +37,105 @@ local xpacket = [[
local mapping = {
-- user defined keys (pdfx:)
- ["ConTeXt.Jobname"] = "rdf:Description/pdfx:ConTeXt.Jobname",
- ["ConTeXt.Time"] = "rdf:Description/pdfx:ConTeXt.Time",
- ["ConTeXt.Url"] = "rdf:Description/pdfx:ConTeXt.Url",
- ["ConTeXt.Version"] = "rdf:Description/pdfx:ConTeXt.Version",
- ["ID"] = "rdf:Description/pdfx:ID",
- ["PTEX.Fullbanner"] = "rdf:Description/pdfx:PTEX.Fullbanner",
+ ["ConTeXt.Jobname"] = { "context", "rdf:Description/pdfx:ConTeXt.Jobname" },
+ ["ConTeXt.Time"] = { "date", "rdf:Description/pdfx:ConTeXt.Time" },
+ ["ConTeXt.Url"] = { "context", "rdf:Description/pdfx:ConTeXt.Url" },
+ ["ConTeXt.Version"] = { "context", "rdf:Description/pdfx:ConTeXt.Version" },
+ ["ID"] = { "date", "rdf:Description/pdfx:ID" }, -- has date
+ ["PTEX.Fullbanner"] = { "metadata","rdf:Description/pdfx:PTEX.Fullbanner" },
-- Adobe PDF schema
- ["Keywords"] = "rdf:Description/pdf:Keywords",
- ["Producer"] = "rdf:Description/pdf:Producer",
- -- ["Trapped"] = "rdf:Description/pdf:Trapped", -- '/False' in /Info, but 'False' in XMP
+ ["Keywords"] = { "metadata","rdf:Description/pdf:Keywords" },
+ ["Producer"] = { "metadata","rdf:Description/pdf:Producer" },
+ -- ["Trapped"] = { "pdf", "rdf:Description/pdf:Trapped" }, -- '/False' in /Info, but 'False' in XMP
-- Dublin Core schema
- ["Author"] = "rdf:Description/dc:creator/rdf:Seq/rdf:li",
- ["Format"] = "rdf:Description/dc:format", -- optional, but nice to have
- ["Subject"] = "rdf:Description/dc:description/rdf:Alt/rdf:li",
- ["Title"] = "rdf:Description/dc:title/rdf:Alt/rdf:li",
+ ["Author"] = { "metadata","rdf:Description/dc:creator/rdf:Seq/rdf:li" },
+ ["Format"] = { "metadata","rdf:Description/dc:format" }, -- optional, but nice to have
+ ["Subject"] = { "metadata","rdf:Description/dc:description/rdf:Alt/rdf:li" },
+ ["Title"] = { "metadata","rdf:Description/dc:title/rdf:Alt/rdf:li" },
-- XMP Basic schema
- ["CreateDate"] = "rdf:Description/xmp:CreateDate",
- ["Creator"] = "rdf:Description/xmp:CreatorTool",
- ["MetadataDate"] = "rdf:Description/xmp:MetadataDate",
- ["ModifyDate"] = "rdf:Description/xmp:ModifyDate",
+ ["CreateDate"] = { "date", "rdf:Description/xmp:CreateDate" },
+ ["CreationDate"] = { "date", "rdf:Description/xmp:CreationDate" }, -- dummy
+ ["Creator"] = { "metadata","rdf:Description/xmp:CreatorTool" },
+ ["MetadataDate"] = { "date", "rdf:Description/xmp:MetadataDate" },
+ ["ModDate"] = { "date", "rdf:Description/xmp:ModDate" }, -- dummy
+ ["ModifyDate"] = { "date", "rdf:Description/xmp:ModifyDate" },
-- XMP Media Management schema
- ["DocumentID"] = "rdf:Description/xmpMM:DocumentID",
- ["InstanceID"] = "rdf:Description/xmpMM:InstanceID",
- ["RenditionClass"] = "rdf:Description/xmpMM:RenditionClass", -- PDF/X-4
- ["VersionID"] = "rdf:Description/xmpMM:VersionID", -- PDF/X-4
+ ["DocumentID"] = { "date", "rdf:Description/xmpMM:DocumentID" }, -- uuid
+ ["InstanceID"] = { "date", "rdf:Description/xmpMM:InstanceID" }, -- uuid
+ ["RenditionClass"] = { "pdf", "rdf:Description/xmpMM:RenditionClass" }, -- PDF/X-4
+ ["VersionID"] = { "pdf", "rdf:Description/xmpMM:VersionID" }, -- PDF/X-4
-- additional entries
-- PDF/X
- ["GTS_PDFXVersion"] = "rdf:Description/pdfxid:GTS_PDFXVersion",
+ ["GTS_PDFXVersion"] = { "pdf", "rdf:Description/pdfxid:GTS_PDFXVersion" },
-- optional entries
-- all what is visible in the 'document properties --> additional metadata' window
-- XMP Rights Management schema (optional)
- ["Marked"] = "rdf:Description/xmpRights:Marked",
- -- ["Owner"] = "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li", -- maybe useful (not visible)
- -- ["UsageTerms"] = "rdf:Description/xmpRights:UsageTerms", -- maybe useful (not visible)
- ["WebStatement"] = "rdf:Description/xmpRights:WebStatement",
+ ["Marked"] = { "pdf", "rdf:Description/xmpRights:Marked" },
+ -- ["Owner"] = { "metadata", "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li" }, -- maybe useful (not visible)
+ -- ["UsageTerms"] = { "metadata", "rdf:Description/xmpRights:UsageTerms" }, -- maybe useful (not visible)
+ ["WebStatement"] = { "metadata", "rdf:Description/xmpRights:WebStatement" },
-- Photoshop PDF schema (optional)
- ["AuthorsPosition"] = "rdf:Description/photoshop:AuthorsPosition",
- ["Copyright"] = "rdf:Description/photoshop:Copyright",
- ["CaptionWriter"] = "rdf:Description/photoshop:CaptionWriter",
+ ["AuthorsPosition"] = { "metadata", "rdf:Description/photoshop:AuthorsPosition" },
+ ["Copyright"] = { "metadata", "rdf:Description/photoshop:Copyright" },
+ ["CaptionWriter"] = { "metadata", "rdf:Description/photoshop:CaptionWriter" },
}
+pdf.setsuppressoptionalinfo(
+ 0 --
+ + 1 -- pdfnofullbanner
+ + 2 -- pdfnofilename
+ + 4 -- pdfnopagenumber
+ + 8 -- pdfnoinfodict
+ + 16 -- pdfnocreator
+ + 32 -- pdfnocreationdate
+ + 64 -- pdfnomoddate
+ + 128 -- pdfnoproducer
+ + 256 -- pdfnotrapped
+ -- + 512 -- pdfnoid
+)
+
+local included = table.setmetatableindex( {
+ context = true,
+ id = true,
+ metadata = true,
+ date = true,
+ id = true,
+ pdf = true,
+}, function(t,k)
+ return true
+end)
+
+directives.register("backend.nodates", function(v)
+ included.date = not v
+ if v then
+ report_info("no date/time information will be added to the PDF file")
+ end
+end)
+
+directives.register("backend.trailerid", function(v)
+ if v then
+ if toboolean(v) or v == "" then
+ v = "This file is processed by ConTeXt and LuaTeX."
+ else
+ v = tostring(v)
+ end
+ local h = md5.HEX(v)
+ report_info("using hashed trailer id %a (%a)",v,h)
+ pdf.settrailerid(format("[<%s> <%s>]",h,h))
+ end
+end)
+
+local function permitdetail(what)
+ local m = mapping[what]
+ if m then
+ return included[m[1]] and m[2]
+ else
+ return included[what]
+ end
+end
+
+lpdf.permitdetail = permitdetail
+
-- maybe some day we will load the xmp file at runtime
local xmp, xmpfile, xmpname = nil, nil, "lpdf-pdx.xml"
@@ -117,8 +175,8 @@ local function valid_xmp()
end
function lpdf.addxmpinfo(tag,value,check)
- local pattern = mapping[tag]
- if pattern then
+ local pattern = permitdetail(tag)
+ if type(pattern) == "string" then
xmlfillin(xmp or valid_xmp(),pattern,value,check)
end
end
@@ -129,14 +187,21 @@ local pdfaddtoinfo = lpdf.addtoinfo
local pdfaddxmpinfo = lpdf.addxmpinfo
function lpdf.addtoinfo(tag,pdfvalue,strvalue)
- pdfaddtoinfo(tag,pdfvalue)
- local value = strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1") -- hack
- if trace_info then
- report_info("set %a to %a",tag,value)
+ local pattern = permitdetail(tag)
+ if pattern then
+ pdfaddtoinfo(tag,pdfvalue)
+ end
+ if type(pattern) == "string" then
+ local value = strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1") -- hack
+ if trace_info then
+ report_info("set %a to %a",tag,value)
+ end
+ xmlfillin(xmp or valid_xmp(),pattern,value,check)
end
- pdfaddxmpinfo(tag,value)
end
+local pdfaddtoinfo = lpdf.addtoinfo -- used later
+
-- for the do-it-yourselvers
function lpdf.insertxmpinfo(pattern,whatever,prepend)
@@ -160,7 +225,7 @@ local function flushxmpinfo()
local documentid = format("uuid:%s",os.uuid())
local instanceid = format("uuid:%s",os.uuid())
- local producer = format("LuaTeX-%0.2f.%s",tex.luatexversion/100,tex.luatexrevision)
+ local producer = format("LuaTeX-%0.2f.%s",status.luatex_version/100,status.luatex_revision)
local creator = "LuaTeX + ConTeXt MkIV"
local time = lpdf.timestamp()
local fullbanner = status.banner
@@ -196,7 +261,7 @@ local function flushxmpinfo()
logs.poptarget()
end
blob = format(xpacket,packetid,blob)
- if not verbose and tex.pdfcompresslevel > 0 then
+ if not verbose and pdf.getcompresslevel() > 0 then
blob = gsub(blob,">%s+<","><")
end
local r = pdfflushstreamobject(blob,md,false) -- uncompressed
diff --git a/Master/texmf-dist/tex/context/base/luat-bas.mkiv b/Master/texmf-dist/tex/context/base/mkiv/luat-bas.mkiv
index cb00d8f55e7..cb00d8f55e7 100644
--- a/Master/texmf-dist/tex/context/base/luat-bas.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-bas.mkiv
diff --git a/Master/texmf-dist/tex/context/base/luat-bwc.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-bwc.lua
index 993de7bf3f4..993de7bf3f4 100644
--- a/Master/texmf-dist/tex/context/base/luat-bwc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-bwc.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-cbk.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-cbk.lua
index 8c224ad2cbc..2c3bede72c5 100644
--- a/Master/texmf-dist/tex/context/base/luat-cbk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-cbk.lua
@@ -6,15 +6,11 @@ if not modules then modules = { } end modules ['luat-cbk'] = {
license = "see context related readme files"
}
-local insert, remove, find, format = table.insert, table.remove, string.find, string.format
+local insert, remove, concat = table.insert, table.remove, table.concat
+local find, format = string.find, string.format
local collectgarbage, type, next = collectgarbage, type, next
local round = math.round
-local sortedhash, tohash = table.sortedhash, table.tohash
-
-local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end)
-
-local report_callbacks = logs.reporter("system","callbacks")
-local report_memory = logs.reporter("system","memory")
+local sortedhash, sortedkeys, tohash = table.sortedhash, table.sortedkeys, table.tohash
--[[ldx--
<p>Callbacks are the real asset of <l n='luatex'/>. They permit you to hook
@@ -28,23 +24,61 @@ local callbacks = callbacks
--[[ldx--
<p>When you (temporarily) want to install a callback function, and after a
while wants to revert to the original one, you can use the following two
-functions.</p>
+functions. This only works for non-frozen ones.</p>
--ldx]]--
-local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end)
-local trace_calls = false -- only used when analyzing performance and initializations
+local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end)
+local trace_calls = false -- only used when analyzing performance and initializations
+local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end)
+
+local report_system = logs.reporter("system")
+local report_callbacks = logs.reporter("system","callbacks")
+local report_memory = logs.reporter("system","memory")
local register_callback = callback.register
local find_callback = callback.find
local list_callbacks = callback.list
+local register_usercall = false
+local original_register = register_callback
+
+local frozen = { }
+local stack = { }
+local list = callbacks.list
+local permit_overloads = false
+local block_overloads = false
+
+--[[ldx--
+<p>By now most callbacks are frozen and most provide a way to plug in your own code. For instance
+all node list handlers provide before/after namespaces and the file handling code can be extended
+by adding schemes and if needed I can add more hooks. So there is no real need to overload a core
+callback function. It might be ok for quick and dirty testing but anyway you're on your own if
+you permanently overload callback functions.</p>
+--ldx]]--
+
+-- This might become a configuration file only option when it gets abused too much.
+
+directives.register("system.callbacks.permitoverloads", function(v)
+ if block_overloads or permit_overloads then
+ -- once bad news, always bad news
+ elseif v then
+ permit_overloads = { }
+ report_system()
+ report_system("The callback system has been brought in an unprotected state. As a result of directly")
+ report_system("setting of callbacks subsystems of ConTeXt can stop working. There is no support for")
+ report_system("bugs resulting from this state. It's better to use the official extension mechanisms.")
+ report_system()
+ end
+end)
-local frozen, stack, list = { }, { }, callbacks.list
+sandbox.initializer(function()
+ block_overloads = true
+end)
if not list then -- otherwise counters get reset
list = utilities.storage.allocate(list_callbacks())
- for k, _ in next, list do
+ for k in next, list do
list[k] = 0
end
@@ -56,11 +90,9 @@ local delayed = tohash {
"buildpage_filter",
}
-
if trace_calls then
local functions = { }
- local original = register_callback
register_callback = function(name,func)
if type(func) == "function" then
@@ -73,21 +105,41 @@ if trace_calls then
list[name] = list[name] + 1
return functions[name](...)
end
- return original(name,cnuf)
+ return original_register(name,cnuf)
end
else
- return original(name,func)
+ return original_register(name,func)
end
end
end
-local function frozen_message(what,name)
- report_callbacks("not %s frozen %a to %a",what,name,frozen[name])
+local reported = { }
+
+local function register_usercall(what,name,func)
+ if list[name] then
+ if trace_callbacks or not reported[name] then
+ report_system()
+ report_system("disabling core code by %s user function into callback '%s' (reported only once)",what,name)
+ report_system()
+ reported[name] = true
+ end
+ permit_overloads[name] = true
+ return original_register(name,function(...)
+ if trace_callbacks then
+ report_callbacks("calling user function from '%s'",name)
+ end
+ return func(...)
+ end)
+ else
+ report_callbacks("not %s function into invalid callback '%s'",name)
+ return nil, format("unknown callback '%s'",name)
+ end
end
local function frozen_callback(name)
- return nil, format("callback '%s' is frozen to '%s'",name,frozen[name]) -- no formatter yet
+ report_callbacks("not %s frozen %a","registering",name)
+ return nil, format("callback '%s' is frozen",name) -- no formatter yet
end
local function state(name)
@@ -117,25 +169,28 @@ function callbacks.report()
end
function callbacks.freeze(name,freeze)
- freeze = type(freeze) == "string" and freeze
- if find(name,"*",1,true) then
- local pattern = name
- for name, _ in next, list do
- if find(name,pattern) then
- frozen[name] = freeze or frozen[name] or "frozen"
+ if not permit_overloads then
+ freeze = type(freeze) == "string" and freeze
+ if find(name,"*",1,true) then
+ local pattern = name
+ for name, _ in next, list do
+ if find(name,pattern) then
+ frozen[name] = freeze or frozen[name] or "frozen"
+ end
end
+ else
+ frozen[name] = freeze or frozen[name] or "frozen"
end
- else
- frozen[name] = freeze or frozen[name] or "frozen"
end
end
function callbacks.register(name,func,freeze)
if frozen[name] then
- if trace_callbacks then
- frozen_message("registering",name)
+ if permit_overloads then
+ return register_usercall("registering",name,func)
+ else
+ return frozen_callback(name)
end
- return frozen_callback(name)
elseif freeze then
frozen[name] = type(freeze) == "string" and freeze or "registered"
end
@@ -148,36 +203,41 @@ end
function callback.register(name,func) -- original
if not frozen[name] then
return register_callback(name,func)
- elseif trace_callbacks then
- frozen_message("registering",name)
+ elseif permit_overloads then
+ return register_usercall("registering",name,func)
+ else
+ return frozen_callback(name)
end
- return frozen_callback(name)
end
function callbacks.push(name,func)
- if not frozen[name] then
+ if not frozen[name] or permit_overloads then
local sn = stack[name]
if not sn then
sn = { }
stack[name] = sn
end
insert(sn,find_callback(name))
- register_callback(name, func)
- elseif trace_callbacks then
- frozen_message("pushing",name)
+ if permit_overloads then
+ register_usercall("pushing",name,func)
+ else
+ register_callback(name,func)
+ end
+ else
+ report_callbacks("not %s frozen %a","pushing",name)
end
end
function callbacks.pop(name)
- if not frozen[name] then
+ if not frozen[name] or permit_overloads then
local sn = stack[name]
if not sn or #sn == 0 then
-- some error
- register_callback(name, nil) -- ! really needed
+ register_callback(name,nil) -- ! really needed
else
-- this fails: register_callback(name, remove(stack[name]))
local func = remove(sn)
- register_callback(name, func)
+ register_callback(name,func)
end
end
end
@@ -190,10 +250,16 @@ if trace_calls then
t[#t+1] = format("%s -> %s",name,n)
end
end
- return t
+ return concat(t," ")
end)
end
+statistics.register("callbacks overloaded by user", function()
+ if permit_overloads then
+ return concat(sortedkeys(permit_overloads)," ")
+ end
+end)
+
-- -- somehow crashes later on
--
-- callbacks.freeze("find_.*_file","finding file")
diff --git a/Master/texmf-dist/tex/context/base/luat-cnf.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-cnf.lua
index 0f6b8598f37..83622ef5399 100644
--- a/Master/texmf-dist/tex/context/base/luat-cnf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-cnf.lua
@@ -19,21 +19,17 @@ texconfig.shell_escape = 't'
luatex = luatex or { }
local luatex = luatex
-texconfig.max_print_line = 100000 -- frozen
-texconfig.max_in_open = 127 -- frozen
texconfig.error_line = 79 -- frozen
+texconfig.expand_depth = 10000
texconfig.half_error_line = 50 -- frozen
-
-texconfig.expand_depth = 10000 -- 10000
-texconfig.hash_extra = 100000 -- 0
-texconfig.nest_size = 1000 -- 50
-texconfig.max_in_open = 500 -- 15 -- in fact it's limited to 127
-texconfig.max_print_line = 10000 -- 79
-texconfig.max_strings = 500000 -- 15000
-texconfig.param_size = 25000 -- 60
-texconfig.save_size = 50000 -- 4000
-texconfig.save_size = 100000 -- 4000
-texconfig.stack_size = 10000 -- 300
+texconfig.hash_extra = 100000
+texconfig.max_in_open = 1000 -- frozen
+texconfig.max_print_line = 100000 -- frozen
+texconfig.max_strings = 500000
+texconfig.nest_size = 1000
+texconfig.param_size = 25000
+texconfig.save_size = 100000
+texconfig.stack_size = 10000
local stub = [[
@@ -64,7 +60,7 @@ function texconfig.init()
"string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package", "bit32",
},
basictex = { -- noad
- "callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token", "newtoken"
+ "callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token",
},
extralua = {
"gzip", "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "profiler", "unicode", "utf",
diff --git a/Master/texmf-dist/tex/context/base/luat-cod.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-cod.lua
index c436ee6d7a6..f62396a8e10 100644
--- a/Master/texmf-dist/tex/context/base/luat-cod.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-cod.lua
@@ -16,7 +16,7 @@ local texconfig, lua = texconfig, lua
texconfig.kpse_init = false
texconfig.shell_escape = 't'
texconfig.max_print_line = 100000
-texconfig.max_in_open = 127
+texconfig.max_in_open = 1000
-- registering bytecode chunks
@@ -105,7 +105,7 @@ if not environment.luafilechunk then
filename = sourcepath .. "/" .. filename
end
local data = loadfile(filename)
- texio.write("<",data and "+ " or "- ",filename,">")
+ texio.write("term and log","<",data and "+ " or "- ",filename,">")
if data then
data()
end
diff --git a/Master/texmf-dist/tex/context/base/luat-cod.mkiv b/Master/texmf-dist/tex/context/base/mkiv/luat-cod.mkiv
index 9ce6161c32c..9ce6161c32c 100644
--- a/Master/texmf-dist/tex/context/base/luat-cod.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-cod.mkiv
diff --git a/Master/texmf-dist/tex/context/base/luat-env.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-env.lua
index 5f2a0d281a0..5f2a0d281a0 100644
--- a/Master/texmf-dist/tex/context/base/luat-env.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-env.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-exe.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-exe.lua
index d8d954a307b..d8d954a307b 100644
--- a/Master/texmf-dist/tex/context/base/luat-exe.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-exe.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-fio.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-fio.lua
index dcc183167d8..2b083b58285 100644
--- a/Master/texmf-dist/tex/context/base/luat-fio.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-fio.lua
@@ -12,8 +12,8 @@ local sequenced = table.sequenced
texconfig.kpse_init = false
texconfig.shell_escape = 't'
-texconfig.max_in_open = 127
texconfig.max_print_line = 100000
+texconfig.max_in_open = 1000
if not resolvers.instance then
@@ -33,44 +33,81 @@ if not resolvers.instance then
if callback then
- local register = callbacks.register
+ local register = callbacks.register
+
+ local addsuffix = file.addsuffix
+ local join = file.join
+
+ local function findpk(font,dpi)
+ local dpi = dpi or 600 -- could take from resolution
+ -- <font>.pk
+ local name = addsuffix(font,"pk")
+ -- <dpi>/name.pk
+ local temp = join(dpi,name)
+ local okay = findbinfile(temp,"pk")
+ -- print(temp,okay)
+ if okay and okay ~= "" then
+ return okay
+ end
+ -- <dpi>.dpi/name.pk
+ local temp = join(dpi..".dpi",name)
+ local okay = findbinfile(temp,"pk")
+ -- print(temp,okay)
+ if okay and okay ~= "" then
+ return okay
+ end
+ -- <font>.<dpi>pk
+ local name = addsuffix(font,dpi.."pk")
+ -- name.<dpi>pk
+ local temp = name
+ local okay = findbinfile(temp,"pk")
+ -- print(temp,okay)
+ if okay and okay ~= "" then
+ return okay
+ end
+ -- <dpi>.dpi/name.<dpi>pk
+ local temp = join(dpi..".dpi",name)
+ local okay = findbinfile(temp,"pk")
+ -- print(temp,okay)
+ return okay or ""
+ end
-- register('process_jobname' , function(name) return name end, true)
- register('find_read_file' , function(id,name) return findtexfile(name) end, true)
- register('open_read_file' , function( name) return opentexfile(name) end, true)
+ register('find_read_file' , function(id,name) return findtexfile(name) end, true)
+ register('open_read_file' , function( name) return opentexfile(name) end, true)
register('find_data_file' , function(name) return findbinfile(name,"tex") end, true)
register('find_enc_file' , function(name) return findbinfile(name,"enc") end, true)
register('find_font_file' , function(name) return findbinfile(name,"tfm") end, true)
- register('find_format_file' , function(name) return findbinfile(name,"fmt") end, true)
+ -- register('find_format_file' , function(name) return findbinfile(name,"fmt") end, true)
register('find_image_file' , function(name) return findbinfile(name,"tex") end, true)
register('find_map_file' , function(name) return findbinfile(name,"map") end, true)
register('find_opentype_file' , function(name) return findbinfile(name,"otf") end, true)
register('find_output_file' , function(name) return name end, true)
- register('find_pk_file' , function(name) return findbinfile(name,"pk") end, true)
+ register('find_pk_file' , findpk, true)
register('find_sfd_file' , function(name) return findbinfile(name,"sfd") end, true)
register('find_truetype_file' , function(name) return findbinfile(name,"ttf") end, true)
register('find_type1_file' , function(name) return findbinfile(name,"pfb") end, true)
register('find_vf_file' , function(name) return findbinfile(name,"vf") end, true)
register('find_cidmap_file' , function(name) return findbinfile(name,"cidmap") end, true)
- register('read_data_file' , function(file) return loadbinfile(file,"tex") end, true)
- register('read_enc_file' , function(file) return loadbinfile(file,"enc") end, true)
- register('read_font_file' , function(file) return loadbinfile(file,"tfm") end, true)
+ register('read_data_file' , function(file) return loadbinfile(file,"tex") end, true)
+ register('read_enc_file' , function(file) return loadbinfile(file,"enc") end, true)
+ register('read_font_file' , function(file) return loadbinfile(file,"tfm") end, true)
-- format
-- image
- register('read_map_file' , function(file) return loadbinfile(file,"map") end, true)
+ register('read_map_file' , function(file) return loadbinfile(file,"map") end, true)
-- output
- register('read_pk_file' , function(file) return loadbinfile(file,"pk") end, true) -- 600dpi/manfnt.720pk
- register('read_sfd_file' , function(file) return loadbinfile(file,"sfd") end, true)
- register('read_vf_file' , function(file) return loadbinfile(file,"vf" ) end, true)
+ register('read_pk_file' , function(file) return loadbinfile(file,"pk") end, true) -- 600dpi/manfnt.720pk
+ register('read_sfd_file' , function(file) return loadbinfile(file,"sfd") end, true)
+ register('read_vf_file' , function(file) return loadbinfile(file,"vf" ) end, true)
- register('find_font_file' , function(name) return findbinfile(name,"ofm") end, true)
- register('find_vf_file' , function(name) return findbinfile(name,"ovf") end, true)
+ -- register('find_font_file' , function(name) return findbinfile(name,"ofm") end, true)
+ -- register('find_vf_file' , function(name) return findbinfile(name,"ovf") end, true)
- register('read_font_file' , function(file) return loadbinfile(file,"ofm") end, true)
- register('read_vf_file' , function(file) return loadbinfile(file,"ovf") end, true)
+ -- register('read_font_file' , function(file) return loadbinfile(file,"ofm") end, true)
+ -- register('read_vf_file' , function(file) return loadbinfile(file,"ovf") end, true)
-- register('read_opentype_file' , function(file) return loadbinfile(file,"otf") end, true)
-- register('read_truetype_file' , function(file) return loadbinfile(file,"ttf") end, true)
diff --git a/Master/texmf-dist/tex/context/base/luat-fmt.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-fmt.lua
index 92c1dd6c45d..9a86ef50e87 100644
--- a/Master/texmf-dist/tex/context/base/luat-fmt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-fmt.lua
@@ -29,7 +29,10 @@ local function primaryflags() -- not yet ok
return concat(flags," ")
end
-function environment.make_format(name)
+-- The silent option is Taco. It's a bit of a hack because we cannot yet mess
+-- with directives. In fact, I could probably clean up the maker a bit by now.
+
+function environment.make_format(name,silent)
local engine = environment.ownmain or "luatex"
-- change to format path (early as we need expanded paths)
local olddir = dir.current()
@@ -93,9 +96,23 @@ function environment.make_format(name)
return
end
-- generate format
- local command = format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\")
- report_format("running command: %s\n",command)
- os.execute(command)
+ local dump = os.platform=="unix" and "\\\\dump" or "\\dump"
+ if silent then
+ statistics.starttiming()
+ local command = format("%s --ini --interaction=batchmode %s --lua=%s %s %s > temp.log",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ local result = os.execute(command)
+ local runtime = statistics.stoptiming()
+ if result ~= 0 then
+ print(format("%s silent make > fatal error when making format %q",engine,name)) -- we use a basic print
+ else
+ print(format("%s silent make > format %q made in %.3f seconds",engine,name,runtime)) -- we use a basic print
+ end
+ os.remove("temp.log")
+ else
+ local command = format("%s --ini %s --lua=%s %s %sdump",engine,primaryflags(),quoted(usedluastub),quoted(fulltexsourcename),dump)
+ report_format("running command: %s\n",command)
+ os.execute(command)
+ end
-- remove related mem files
local pattern = file.removesuffix(file.basename(usedluastub)).."-*.mem"
-- report_format("removing related mplib format with pattern %a", pattern)
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-ini.lua
index 34e83e7bb38..cd1f45692a3 100644
--- a/Master/texmf-dist/tex/context/base/luat-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-ini.lua
@@ -24,3 +24,5 @@ table.setmetatableindex(thirddata, table.autokey)
if not global then
global = _G
end
+
+LUATEXVERSION = status.luatex_version/100 + tonumber(status.luatex_revision)/1000
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/luat-ini.mkiv
index b455a415821..e19b72d14ea 100644
--- a/Master/texmf-dist/tex/context/base/luat-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-ini.mkiv
@@ -259,24 +259,24 @@
% This is a forward definition:
-\def\checkedstrippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx}
- {\expandafter\syst_helpers_checked_stripped_csname\string#1}
-
-\def\syst_helpers_checked_stripped_csname#1%
- {\if\noexpand#1\letterbackslash\else#1\fi}
+% \def\checkedstrippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx}
+% {\expandafter\syst_helpers_checked_stripped_csname\string#1}
+%
+% \def\syst_helpers_checked_stripped_csname#1%
+% {\if\noexpand#1\letterbackslash\else#1\fi}
\normalprotected\def\installctxfunction#1#2%
- {\edef\m_syst_name{\checkedstrippedcsname#1}%
+ {\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxfunction("#2",true)}\relax
\expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
\normalprotected\def\installctxscanner#1#2%
- {\edef\m_syst_name{\checkedstrippedcsname#1}%
+ {\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\ctxcommand{ctxscanner("\m_syst_name","#2",true)}\relax
\expandafter\xdef\csname\m_syst_name\endcsname{\noexpand\luafunction\csname\??luafunction\m_syst_name\endcsname}}
\normalprotected\def\resetctxscanner#1%
- {\edef\m_syst_name{\checkedstrippedcsname#1}%
+ {\edef\m_syst_name{\csstring#1}%
\global\expandafter\chardef\csname\??luafunction\m_syst_name\endcsname\zerocount
\global\expandafter\let\csname\m_syst_name\endcsname\relax}
diff --git a/Master/texmf-dist/tex/context/base/luat-iop.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-iop.lua
index e1772af4e90..e1772af4e90 100644
--- a/Master/texmf-dist/tex/context/base/luat-iop.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-iop.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-lib.mkiv b/Master/texmf-dist/tex/context/base/mkiv/luat-lib.mkiv
index 24f9da41513..cbe15c8a1cb 100644
--- a/Master/texmf-dist/tex/context/base/luat-lib.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-lib.mkiv
@@ -15,6 +15,8 @@
\registerctxluafile{util-str}{1.001}
\registerctxluafile{util-tab}{1.001}
+\registerctxluafile{util-fil}{1.001}
+\registerctxluafile{util-sac}{1.001}
\registerctxluafile{util-sto}{1.001} % could also be done in trac-deb.mkiv
\registerctxluafile{util-pck}{1.001}
\registerctxluafile{util-seq}{1.001}
diff --git a/Master/texmf-dist/tex/context/base/luat-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-lua.lua
index 972004e887d..972004e887d 100644
--- a/Master/texmf-dist/tex/context/base/luat-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-lua.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-mac.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-mac.lua
index 6214e591e5b..4274fe9f9e1 100644
--- a/Master/texmf-dist/tex/context/base/luat-mac.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-mac.lua
@@ -41,7 +41,7 @@ local function set(s)
h = rep("#",2^(ns-1))
hashes[ns] = h
end
- m = h .. n
+ local m = h .. n
top[s] = m
return m
end
diff --git a/Master/texmf-dist/tex/context/base/luat-run.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-run.lua
index 65cf0f33866..7e81350f0f2 100644
--- a/Master/texmf-dist/tex/context/base/luat-run.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-run.lua
@@ -25,9 +25,11 @@ local luatex = luatex
local startactions = { }
local stopactions = { }
+local dumpactions = { }
function luatex.registerstartactions(...) insert(startactions, ...) end
function luatex.registerstopactions (...) insert(stopactions, ...) end
+function luatex.registerdumpactions (...) insert(dumpactions, ...) end
local function start_run()
if logs.start_run then
@@ -76,6 +78,9 @@ end
-- end
local function pre_dump_actions()
+ for i=1,#dumpactions do
+ dumpactions[i]()
+ end
lua.finalize(trace_lua_dump and report_lua or nil)
-- statistics.savefmtstatus("\jobname","\contextversion","context.tex")
end
@@ -136,7 +141,7 @@ local synctex = 0
directives.register("system.synctex", function(v)
synctex = tonumber(v) or (toboolean(v,true) and 1) or (v == "zipped" and 1) or (v == "unzipped" and -1) or 0
if synctex ~= 0 then
- report_system("synctex functionality is enabled (%s)!",tostring(synctex))
+ report_system("synctex functionality is enabled (%s), expect runtime overhead!",tostring(synctex))
else
report_system("synctex functionality is disabled!")
end
diff --git a/Master/texmf-dist/tex/context/base/luat-soc.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-soc.lua
index 9342a4b3375..9342a4b3375 100644
--- a/Master/texmf-dist/tex/context/base/luat-soc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-soc.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-sta.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-sta.lua
index 8b58774d357..8b58774d357 100644
--- a/Master/texmf-dist/tex/context/base/luat-sta.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-sta.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-sto.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-sto.lua
index b04d655c29d..b04d655c29d 100644
--- a/Master/texmf-dist/tex/context/base/luat-sto.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-sto.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-usr.lua b/Master/texmf-dist/tex/context/base/mkiv/luat-usr.lua
index 071e3bf5bb9..071e3bf5bb9 100644
--- a/Master/texmf-dist/tex/context/base/luat-usr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-usr.lua
diff --git a/Master/texmf-dist/tex/context/base/luat-usr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/luat-usr.mkiv
index 92d40010c0f..92d40010c0f 100644
--- a/Master/texmf-dist/tex/context/base/luat-usr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/luat-usr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lxml-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-aux.lua
index 8eedade392c..4112db1e5fa 100644
--- a/Master/texmf-dist/tex/context/base/lxml-aux.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-aux.lua
@@ -370,6 +370,8 @@ xml.insertbefore = function(r,p,e) insert_element(r,p,e,true) end
xml.injectafter = inject_element
xml.injectbefore = function(r,p,e) inject_element(r,p,e,true) end
+-- loaddata can restrict loading
+
local function include(xmldata,pattern,attribute,recursive,loaddata,level)
-- attribute = attribute or 'href'
pattern = pattern or 'include'
@@ -383,56 +385,64 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
local ek = collected[c]
local name = nil
local ekdt = ek.dt
- local ekat = ek.at
- local ekrt = ek.__p__
- local epdt = ekrt.dt
- if not attribute or attribute == "" then
- name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- check, probably always tab or str
- end
- if not name then
- for a in gmatch(attribute or "href","([^|]+)") do
- name = ekat[a]
- if name then
- break
+ if ekdt then
+ local ekat = ek.at
+ local ekrt = ek.__p__
+ if ekrt then
+ local epdt = ekrt.dt
+ if not attribute or attribute == "" then
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- check, probably always tab or str
end
- end
- end
- local data = nil
- if name and name ~= "" then
- data = loaddata(name) or ""
- if trace_inclusions then
- report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
- end
- end
- if not data or data == "" then
- epdt[ek.ni] = "" -- xml.empty(d,k)
- elseif ekat["parse"] == "text" then
- -- for the moment hard coded
- epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
- else
- local xi = xmlinheritedconvert(data,xmldata)
- if not xi then
- epdt[ek.ni] = "" -- xml.empty(d,k)
- else
- if recursive then
- include(xi,pattern,attribute,recursive,loaddata,level+1)
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name = ekat[a]
+ if name then
+ break
+ end
+ end
end
- local child = xml.body(xi) -- xml.assign(d,k,xi)
- child.__p__ = ekrt
- child.__f__ = name -- handy for tracing
- epdt[ek.ni] = child
- local inclusions = xmldata.settings.inclusions
- if inclusions then
- inclusions[#inclusions+1] = name
- else
- xmldata.settings.inclusions = { name }
+ local data = nil
+ if name and name ~= "" then
+ data = loaddata(name) or ""
+ if trace_inclusions then
+ report_xml("including %s bytes from %a at level %s by pattern %a and attribute %a (%srecursing)",#data,name,level,pattern,attribute or "",recursive and "" or "not ")
+ end
end
- if child.er then
- local badinclusions = xmldata.settings.badinclusions
- if badinclusions then
- badinclusions[#badinclusions+1] = name
+ if not data or data == "" then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ elseif ekat["parse"] == "text" then
+ -- for the moment hard coded
+ epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
+ else
+ local xi = xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
else
- xmldata.settings.badinclusions = { name }
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata,level+1)
+ end
+ local child = xml.body(xi) -- xml.assign(d,k,xi)
+ child.__p__ = ekrt
+ child.__f__ = name -- handy for tracing
+ epdt[ek.ni] = child
+ local settings = xmldata.settings
+ local inclusions = settings and settings.inclusions
+ if inclusions then
+ inclusions[#inclusions+1] = name
+ elseif settings then
+ settings.inclusions = { name }
+ else
+ settings = { inclusions = { name } }
+ xmldata.settings = settings
+ end
+ if child.er then
+ local badinclusions = settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1] = name
+ else
+ settings.badinclusions = { name }
+ end
+ end
end
end
end
@@ -998,4 +1008,3 @@ function xml.totable(x,strip,flat)
return convert(x,strip,flat)
end
end
-
diff --git a/Master/texmf-dist/tex/context/base/lxml-css.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-css.lua
index fa921b24f48..fa921b24f48 100644
--- a/Master/texmf-dist/tex/context/base/lxml-css.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-css.lua
diff --git a/Master/texmf-dist/tex/context/base/lxml-css.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lxml-css.mkiv
index 79de85c088c..79de85c088c 100644
--- a/Master/texmf-dist/tex/context/base/lxml-css.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-css.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lxml-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.lua
index 1191d6796a9..677fd6a0154 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.lua
@@ -6,9 +6,9 @@ if not modules then modules = { } end modules ['lxml-ctx'] = {
license = "see context related readme files"
}
--- is this still used?
+-- will be cleaned up
-local format, find = string.format, string.find
+local format, find, gsub = string.format, string.find, string.gsub
local xml = xml
xml.ctx = { }
@@ -36,6 +36,11 @@ local nodesettostring = xml.nodesettostring
-- maybe use detokenize instead of \type
+local function cleaned(str)
+ str = gsub(str,"|","\\textbar ")
+ return str
+end
+
function xml.ctx.tshow(specification)
local pattern = specification.pattern
local xmlroot = specification.xmlroot
@@ -48,9 +53,9 @@ function xml.ctx.tshow(specification)
local parsed = xml.lpath(xmlpattern)
local titlecommand = specification.title or "type"
if parsed.state then
- context[titlecommand]("pattern: " .. pattern .. " (".. parsed.state .. ")")
+ context[titlecommand]("pattern: " .. cleaned(pattern) .. " (".. parsed.state .. ")")
else
- context[titlecommand]("pattern: " .. pattern)
+ context[titlecommand]("pattern: " .. cleaned(pattern))
end
context.starttabulate({ "|Tr|Tl|Tp|" } )
if specification.warning then
@@ -75,15 +80,15 @@ function xml.ctx.tshow(specification)
context(kind)
context.NC()
if kind == "axis" then
- context(pp.axis)
+ context(cleaned(pp.axis))
elseif kind == "nodes" then
- context(nodesettostring(pp.nodes,pp.nodetest))
+ context(cleaned(nodesettostring(pp.nodes,pp.nodetest)))
elseif kind == "expression" then
---~ context("%s => %s",pp.expression,pp.converted)
- context(pp.expression)
+-- -- context("%s => %s",pp.expression,pp.converted)
+ context(cleaned(pp.expression))
elseif kind == "finalizer" then
context("%s(%s)",pp.name,pp.arguments)
- elseif kind == "error" and pp.error then
+ elseif kind == "error" and pp.eqrror then
context(pp.error)
end
context.NC()
diff --git a/Master/texmf-dist/tex/context/base/lxml-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.mkiv
index 58807339dd7..6691e36bbe7 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-ctx.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=lxml-ini,
+%D [ file=lxml-ctx,
%D version=2007.08.17,
%D title=\CONTEXT\ \XML\ Support,
%D subtitle=Initialization,
diff --git a/Master/texmf-dist/tex/context/base/lxml-dir.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-dir.lua
index 48c0ac41e73..48c0ac41e73 100644
--- a/Master/texmf-dist/tex/context/base/lxml-dir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-dir.lua
diff --git a/Master/texmf-dist/tex/context/base/lxml-ent.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-ent.lua
index a5c5bc389a6..c392713f0a3 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ent.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-ent.lua
@@ -10,6 +10,7 @@ local type, next, tonumber = type, next, tonumber
local byte, format = string.byte, string.format
local utfchar = utf.char
local lpegmatch = lpeg.match
+local setmetatableindex = table.setmetatableindex
--[[ldx--
<p>We provide (at least here) two entity handlers. The more extensive
@@ -41,17 +42,25 @@ end
if characters and characters.entities then
+ -- the big entity table also has amp, quot, apos, lt, gt in them
+
+ local loaded = false
+
function characters.registerentities(forcecopy)
+ if loaded then
+ return
+ end
if forcecopy then
- table.setmetatableindex(entities,nil)
+ setmetatableindex(entities,nil)
for name, value in next, characters.entities do
if not entities[name] then
entities[name] = value
end
end
else
- table.setmetatableindex(entities,characters.entities)
+ setmetatableindex(entities,characters.entities)
end
+ loaded = true
end
end
diff --git a/Master/texmf-dist/tex/context/base/lxml-inf.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-inf.lua
index 8f1157c7d4c..8f1157c7d4c 100644
--- a/Master/texmf-dist/tex/context/base/lxml-inf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-inf.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/lxml-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-ini.lua
new file mode 100644
index 00000000000..6026b1090bc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-ini.lua
@@ -0,0 +1,143 @@
+ if not modules then modules = { } end modules ['lxml-ini'] = {
+ version = 1.001,
+ comment = "this module is the basis for the lxml-* ones",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local xml = xml
+local lxml = lxml
+
+-- this defines an extra scanner lxmlid:
+
+local scanners = tokens.scanners
+local scanstring = scanners.string
+local getid = lxml.id
+
+scanners.lxmlid = function() return getid(scanstring()) end
+
+local implement = interfaces.implement
+
+-- lxml.id
+
+implement { name = "lxmlid", actions = lxml.getid, arguments = "string" }
+
+implement { name = "xmldoif", actions = lxml.doif, arguments = { "string", "string" } }
+implement { name = "xmldoifnot", actions = lxml.doifnot, arguments = { "string", "string" } }
+implement { name = "xmldoifelse", actions = lxml.doifelse, arguments = { "string", "string" } }
+implement { name = "xmldoiftext", actions = lxml.doiftext, arguments = { "string", "string" } }
+implement { name = "xmldoifnottext", actions = lxml.doifnottext, arguments = { "string", "string" } }
+implement { name = "xmldoifelsetext", actions = lxml.doifelsetext, arguments = { "string", "string" } }
+
+implement { name = "xmldoifempty", actions = lxml.doifempty, arguments = { "string", "string" } }
+implement { name = "xmldoifnotempty", actions = lxml.doifnotempty, arguments = { "string", "string" } }
+implement { name = "xmldoifelseempty", actions = lxml.doifelseempty, arguments = { "string", "string" } }
+implement { name = "xmldoifselfempty", actions = lxml.doifempty, arguments = "string" } -- second arg is not passed (used)
+implement { name = "xmldoifnotselfempty", actions = lxml.doifnotempty, arguments = "string" } -- second arg is not passed (used)
+implement { name = "xmldoifelseselfempty", actions = lxml.doifelseempty, arguments = "string" } -- second arg is not passed (used)
+
+--------- { name = "xmlcontent", actions = lxml.content, arguments = "string" }
+--------- { name = "xmlflushstripped", actions = lxml.strip, arguments = { "string", true } }
+implement { name = "xmlall", actions = lxml.all, arguments = { "string", "string" } }
+implement { name = "xmllastmatch", actions = lxml.lastmatch }
+implement { name = "xmlatt", actions = lxml.att, arguments = { "string", "string" } }
+implement { name = "xmllastatt", actions = lxml.lastatt }
+implement { name = "xmlattdef", actions = lxml.att, arguments = { "string", "string", "string" } }
+implement { name = "xmlattribute", actions = lxml.attribute, arguments = { "string", "string", "string" } }
+implement { name = "xmlattributedef", actions = lxml.attribute, arguments = { "string", "string", "string", "string" } }
+implement { name = "xmlpath", actions = lxml.path, arguments = { "string", "'/'" } }
+implement { name = "xmlchainatt", actions = lxml.chainattribute, arguments = { "string", "'/'", "string" } }
+implement { name = "xmlchainattdef", actions = lxml.chainattribute, arguments = { "string", "'/'", "string", "string" } }
+implement { name = "xmlrefatt", actions = lxml.refatt, arguments = { "string", "string" } }
+implement { name = "xmlchecknamespace", actions = xml.checknamespace, arguments = { "lxmlid", "string", "string" } }
+implement { name = "xmlcommand", actions = lxml.command, arguments = { "string", "string", "string" } }
+implement { name = "xmlconcat", actions = lxml.concat, arguments = { "string", "string", "string" } } -- \detokenize{#3}
+implement { name = "xmlconcatrange", actions = lxml.concatrange, arguments = { "string", "string", "string", "string", "string" } } -- \detokenize{#5}
+implement { name = "xmlcontext", actions = lxml.context, arguments = { "string", "string" } }
+implement { name = "xmlcount", actions = lxml.count, arguments = { "string", "string" } }
+implement { name = "xmldelete", actions = lxml.delete, arguments = { "string", "string" } }
+implement { name = "xmldirect", actions = lxml.direct, arguments = "string" }
+implement { name = "xmldirectives", actions = lxml.directives.setup, arguments = "string" }
+implement { name = "xmldirectivesafter", actions = lxml.directives.after, arguments = "string" }
+implement { name = "xmldirectivesbefore", actions = lxml.directives.before, arguments = "string" }
+implement { name = "xmldisplayverbatim", actions = lxml.displayverbatim, arguments = "string" }
+implement { name = "xmlelement", actions = lxml.element, arguments = { "string", "string" } } -- could be integer but now we can alias
+implement { name = "xmlfilter", actions = lxml.filter, arguments = { "string", "string" } }
+implement { name = "xmlfilterlist", actions = lxml.filterlist, arguments = { "string", "string" } }
+implement { name = "xmlfirst", actions = lxml.first, arguments = { "string", "string" } }
+implement { name = "xmlflush", actions = lxml.flush, arguments = "string" }
+implement { name = "xmlflushcontext", actions = lxml.context, arguments = "string" }
+implement { name = "xmlflushlinewise", actions = lxml.flushlinewise, arguments = "string" }
+implement { name = "xmlflushspacewise", actions = lxml.flushspacewise, arguments = "string" }
+implement { name = "xmlfunction", actions = lxml.applyfunction, arguments = { "string", "string" } }
+implement { name = "xmlinclude", actions = lxml.include, arguments = { "string", "string", "string", true } }
+implement { name = "xmlincludeoptions", actions = lxml.include, arguments = { "string", "string", "string", "string" } }
+implement { name = "xmlinclusion", actions = lxml.inclusion, arguments = "string" }
+implement { name = "xmlinclusions", actions = lxml.inclusions, arguments = "string" }
+implement { name = "xmlbadinclusions", actions = lxml.badinclusions, arguments = "string" }
+implement { name = "xmlindex", actions = lxml.index, arguments = { "string", "string", "string" } } -- can be integer but now we can alias
+implement { name = "xmlinlineverbatim", actions = lxml.inlineverbatim, arguments = "string" }
+implement { name = "xmllast", actions = lxml.last, arguments = { "string", "string" } }
+implement { name = "xmlload", actions = lxml.load, arguments = { "string", "string", "string" } }
+implement { name = "xmlloadbuffer", actions = lxml.loadbuffer, arguments = { "string", "string", "string" } }
+implement { name = "xmlloaddata", actions = lxml.loaddata, arguments = { "string", "string", "string" } }
+implement { name = "xmlloaddirectives", actions = lxml.directives.load, arguments = "string" }
+implement { name = "xmlmain", actions = lxml.main, arguments = "string" }
+implement { name = "xmlmatch", actions = lxml.match, arguments = "string" }
+implement { name = "xmlname", actions = lxml.name, arguments = "string" }
+implement { name = "xmlnamespace", actions = lxml.namespace, arguments = "string" }
+implement { name = "xmlnonspace", actions = lxml.nonspace, arguments = { "string", "string" } }
+implement { name = "xmlpos", actions = lxml.pos, arguments = "string" }
+implement { name = "xmlraw", actions = lxml.raw, arguments = { "string", "string" } }
+implement { name = "xmlrawtex", actions = lxml.rawtex, arguments = { "string", "string" } }
+implement { name = "xmlregisterns", actions = xml.registerns, arguments = { "string", "string" } }
+implement { name = "xmlremapname", actions = xml.remapname, arguments = { "lxmlid", "string","string","string" } }
+implement { name = "xmlremapnamespace", actions = xml.renamespace, arguments = { "lxmlid", "string", "string" } }
+implement { name = "xmlsave", actions = lxml.save, arguments = { "string", "string" } }
+implement { name = "xmlsetsetup", actions = lxml.setsetup, arguments = { "string", "string", "string" } }
+implement { name = "xmlsnippet", actions = lxml.snippet, arguments = { "string", "string" } }
+implement { name = "xmlstrip", actions = lxml.strip, arguments = { "string", "string" } }
+implement { name = "xmlstripanywhere", actions = lxml.strip, arguments = { "string", "string", true, true } }
+implement { name = "xmlstripnolines", actions = lxml.strip, arguments = { "string", "string", true } }
+implement { name = "xmlstripped", actions = lxml.stripped, arguments = { "string", "string" } }
+implement { name = "xmlstrippednolines", actions = lxml.stripped, arguments = { "string", "string", true } }
+implement { name = "xmltag", actions = lxml.tag, arguments = "string" }
+implement { name = "xmltext", actions = lxml.text, arguments = { "string", "string" } }
+implement { name = "xmlpure", actions = lxml.pure, arguments = { "string", "string" } }
+implement { name = "xmlflushtext", actions = lxml.text, arguments = "string" }
+implement { name = "xmlflushpure", actions = lxml.pure, arguments = "string" }
+implement { name = "xmltobuffer", actions = lxml.tobuffer, arguments = { "string", "string", "string" } }
+implement { name = "xmltobufferverbose", actions = lxml.tobuffer, arguments = { "string", "string", "string", true } }
+implement { name = "xmltofile", actions = lxml.tofile, arguments = { "string", "string", "string" } }
+implement { name = "xmltoparameters", actions = lxml.toparameters, arguments = "string" }
+implement { name = "xmlverbatim", actions = lxml.verbatim, arguments = "string" }
+
+implement { name = "xmlstartraw", actions = lxml.startraw }
+implement { name = "xmlstopraw", actions = lxml.stopraw }
+
+implement { name = "xmlprependsetup", actions = lxml.installsetup, arguments = { 1, "string", "string" } } -- 2:*
+implement { name = "xmlappendsetup", actions = lxml.installsetup, arguments = { 2, "string", "string" } } -- 2:*
+implement { name = "xmlbeforesetup", actions = lxml.installsetup, arguments = { 3, "string", "string", "string" } } -- 2:*
+implement { name = "xmlaftersetup", actions = lxml.installsetup, arguments = { 4, "string", "string", "string" } } -- 2:*
+implement { name = "xmlremovesetup", actions = lxml.removesetup, arguments = { "string", "string" } } -- 1:*
+implement { name = "xmlflushsetups", actions = lxml.flushsetups, arguments = { "string", "string", "string" } } -- 2:*
+implement { name = "xmlresetsetups", actions = lxml.resetsetups, arguments = "string" }
+
+implement { name = "xmlgetindex", actions = lxml.getindex, arguments = { "string", "string" } }
+implement { name = "xmlwithindex", actions = lxml.withindex, arguments = { "string", "string", "string" } }
+
+implement { name = "xmlsetentity", actions = xml.registerentity, arguments = { "string", "string" } }
+implement { name = "xmltexentity", actions = lxml.registerentity, arguments = { "string", "string" } }
+
+implement { name = "xmlsetcommandtotext", actions = lxml.setcommandtotext, arguments = "string" }
+implement { name = "xmlsetcommandtonone", actions = lxml.setcommandtonone, arguments = "string" }
+
+implement { name = "xmlstarttiming", actions = function() statistics.starttiming(lxml) end }
+implement { name = "xmlstoptiming", actions = function() statistics.stoptiming (lxml) end }
+
+implement { name = "xmlloadentities", actions = characters.registerentities, onceonly = true }
+
+-- kind of special (3rd argument is a function)
+
+commands.xmlsetfunction = lxml.setaction
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lxml-ini.mkiv
index fab644fdb27..6fa14ddfc8b 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-ini.mkiv
@@ -26,84 +26,24 @@
\registerctxluafile{lxml-dir}{1.001} % ctx hacks
\registerctxluafile{lxml-ini}{1.001} % interface
-\unprotect % todo \!!bs \!!es where handy (slower)
+\unprotect
-% todo: { } mandate
-% avoid #
+% todo: { } mandate so that we can alias
+
+% undocumented:
\def\ctxlxml #1{\ctxlua{lxml.#1}}
-%def\xmlall #1#2{\clf_xmlall {#1}{#2}}
-%def\xmlatt #1#2{\clf_xmlatt {#1}{#2}}
-%def\xmlattdef #1#2#3{\clf_xmlattdef {#1}{#2}{#3}}
-%def\xmlattribute #1#2#3{\clf_xmlattribute {#1}{#2}{#3}}
-%def\xmlattributedef #1#2#3#4{\clf_xmlattributedef {#1}{#2}{#3}{#4}}
-%def\xmlchainatt #1#2{\clf_xmlchainatt {#1}{#2}}
-%def\xmlchainattdef #1#2#3{\clf_xmlchainattdef {#1}{#2}{#3}}
-%def\xmlrefatt #1#2{\clf_xmlrefatt {#1}{#2}}
-%def\xmlchecknamespace #1#2#3{\clf_xmlchecknamespace {#1}{#2}{#3}} % element
-%def\xmlcommand #1#2#3{\clf_xmlcommand {#1}{#2}{#3}}
+% for now indirect
+
\def\xmlconcat #1#2#3{\clf_xmlconcat {#1}{#2}{\detokenize{#3}}}
\def\xmlconcatrange #1#2#3#4#5{\clf_xmlconcatrange {#1}{#2}{#3}{#4}{\detokenize{#5}}}
-%def\xmlcontext #1#2{\clf_xmlcontext {#1}{#2}}
-%def\xmlcount #1#2{\clf_xmlcount {#1}{#2}}
-%def\xmldelete #1#2{\clf_xmldelete {#1}{#2}}
-%def\xmldirect #1{\clf_xmldirect {#1}} % in loops, not dt but root
-%def\xmldirectives #1{\clf_xmldirectives {#1}}
-%def\xmldirectivesafter #1{\clf_xmldirectivesafter {#1}}
-%def\xmldirectivesbefore #1{\clf_xmldirectivesbefore {#1}}
-%def\xmldisplayverbatim #1{\clf_xmldisplayverbatim {#1}}
-%def\xmlelement #1#2{\clf_xmlelement {#1}{#2}}
-%def\xmlfilter #1#2{\clf_xmlfilter {#1}{#2}}
-%def\xmlfilterlist #1#2{\clf_xmlfilterlist {#1}{#2}}
-%def\xmlfirst #1#2{\clf_xmlfirst {#1}{#2}}
-%def\xmlflush #1{\clf_xmlflush {#1}}
-%def\xmlflushcontext #1{\clf_xmlflushcontext {#1}}
-%def\xmlflushlinewise #1{\clf_xmlflushlinewise {#1}}
-%def\xmlflushspacewise #1{\clf_xmlflushspacewise {#1}}
-%def\xmlfunction #1#2{\clf_xmlfunction {#1}{#2}}
-%def\xmlinclude #1#2#3{\clf_xmlinclude {#1}{#2}{#3}}
-%def\xmlincludeoptions#1#2#3#4{\clf_xmlincludeoptions {#1}{#2}{#3}{#4}}
-%def\xmlinclusion #1{\clf_xmlinclusion {#1}}
-%def\xmlinclusions #1{\clf_xmlinclusions {#1}}
-%def\xmlbadinclusions #1{\clf_xmlbadinclusions {#1}}
-%def\xmlindex #1#2#3{\clf_xmlindex {#1}{#2}{#3}}
-%let\xmlposition \xmlindex
-%def\xmlinlineverbatim #1{\clf_xmlinlineverbatim {#1}}
-%def\xmllast #1#2{\clf_xmllast {#1}{#2}}
-\def\xmlload #1#2{\clf_xmlload {#1}{#2}{\directxmlparameter\c!entities}{\directxmlparameter\c!compress}}
-\def\xmlloadbuffer #1#2{\clf_xmlloadbuffer {#1}{#2}{\directxmlparameter\c!entities}{\directxmlparameter\c!compress}}
-\def\xmlloaddata #1#2{\clf_xmlloaddata {#1}{#2}{\directxmlparameter\c!entities}{\directxmlparameter\c!compress}}
-%def\xmlloaddirectives #1{\clf_xmlloaddirectives {#1}}
-\def\xmlloadregistered #1#2{\clf_xmlloadregistered {#1}{\directxmlparameter\c!entities}{\directxmlparameter\c!compress}}
-%def\xmlmain #1{\clf_xmlmain {#1}}
-%def\xmlmatch #1{\clf_xmlmatch {#1}}
-%def\xmlname #1{\clf_xmlname {#1}}
-%def\xmlnamespace #1{\clf_xmlnamespace {#1}}
-%def\xmlnonspace #1#2{\clf_xmlnonspace {#1}{#2}}
-%def\xmlpos #1{\clf_xmlpos {#1}}
-%def\xmlraw #1#2{\clf_xmlraw {#1}{#2}}
-%def\xmlregisterns #1#2{\clf_xmlregisterns {#1}{#2}} % document
-%def\xmlremapname #1#2#3#4{\clf_xmlremapname {#1}{#2}{#3}{#4}} % element
-%def\xmlremapnamespace #1#2#3{\clf_xmlremapnamespace {#1}{#2}{#3}} % document
-%def\xmlsave #1#2{\clf_xmlsave {#1}{#2}}
-%def\xmlsetfunction #1#2#3{\clf_xmlsetfunction {#1}{#2}{#3}}
-%def\xmlsetsetup #1#2#3{\clf_xmlsetsetup {#1}{#2}{#3}}
-%def\xmlsnippet #1#2{\clf_xmlsnippet {#1}{#2}}
-%def\xmlstrip #1#2{\clf_xmlstrip {#1}{#2}}
-%def\xmlstripanywhere #1#2{\clf_xmlstripanywhere {#1}{#2}}
-%def\xmlstripnolines #1#2{\clf_xmlstripnolines {#1}{#2}}
-%def\xmlstripped #1#2{\clf_xmlstripped {#1}{#2}}
-%def\xmlstrippednolines #1#2{\clf_xmlstrippednolines {#1}{#2}}
-%def\xmltag #1{\clf_xmltag {#1}}
-%def\xmltext #1#2{\clf_xmltext {#1}{#2}}
-%def\xmltobuffer #1#2#3{\clf_xmltobuffer {#1}{#2}{#3}} % id pattern name
-%def\xmltobufferverbose #1#2#3{\clf_xmltobufferverbose {#1}{#2}{#3}} % id pattern name
-%def\xmltofile #1#2#3{\clf_xmltofile {#1}{#2}{#3}} % id pattern filename
-%def\xmltoparameters #1{\clf_xmltoparameters {#1}}
-%def\xmlverbatim #1{\clf_xmlverbatim {#1}}
-
-% experiment:
+\def\xmlload #1#2{\clf_xmlload {#1}{#2}{\directxmlparameter\c!compress}}
+\def\xmlloadbuffer #1#2{\clf_xmlloadbuffer {#1}{#2}{\directxmlparameter\c!compress}}
+\def\xmlloaddata #1#2{\clf_xmlloaddata {#1}{#2}{\directxmlparameter\c!compress}}
+
+% aliased
+
\let\xmlall \clf_xmlall
\let\xmlatt \clf_xmlatt
\let\xmlattdef \clf_xmlattdef
@@ -111,11 +51,8 @@
\let\xmlattributedef \clf_xmlattributedef
\let\xmlchainatt \clf_xmlchainatt
\let\xmlchainattdef \clf_xmlchainattdef
-\let\xmlrefatt \clf_xmlrefatt
\let\xmlchecknamespace \clf_xmlchecknamespace
\let\xmlcommand \clf_xmlcommand
-% \xmlconcat
-% \xmlconcatrange
\let\xmlcontext \clf_xmlcontext
\let\xmlcount \clf_xmlcount
\let\xmldelete \clf_xmldelete
@@ -131,7 +68,9 @@
\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
@@ -139,26 +78,26 @@
\let\xmlinclusions \clf_xmlinclusions
\let\xmlbadinclusions \clf_xmlbadinclusions
\let\xmlindex \clf_xmlindex
-\let\xmlposition \clf_xmlindex
\let\xmlinlineverbatim \clf_xmlinlineverbatim
\let\xmllast \clf_xmllast
-% \xmlload
-% \xmlloadbuffer
-% \xmlloaddata
+\let\xmllastatt \clf_xmllastatt
+\let\xmllastmatch \clf_xmllastmatch
\let\xmlloaddirectives \clf_xmlloaddirectives
-% \xmlloadregistered
\let\xmlmain \clf_xmlmain
\let\xmlmatch \clf_xmlmatch
\let\xmlname \clf_xmlname
\let\xmlnamespace \clf_xmlnamespace
\let\xmlnonspace \clf_xmlnonspace
+\let\xmlpath \clf_xmlpath
\let\xmlpos \clf_xmlpos
+\let\xmlposition \clf_xmlindex
+\let\xmlpure \clf_xmlpure
\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\xmlsetfunction \clf_xmlsetfunction
\let\xmlsetsetup \clf_xmlsetsetup
\let\xmlsnippet \clf_xmlsnippet
\let\xmlstrip \clf_xmlstrip
@@ -174,12 +113,17 @@
\let\xmltoparameters \clf_xmltoparameters
\let\xmlverbatim \clf_xmlverbatim
-\def\xmlinfo #1{\hbox{\ttxx[\clf_xmlinfo{#1}]}}
-\def\xmlshow #1{\startpacked\ttx\xmlverbatim{#1}\stoppacked}
+\unexpanded\def\xmlinfo #1{\hbox{\ttxx[\clf_xmlname{#1}]}}
+\unexpanded\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
-\def\xmlsetfunction#1#2#3{\ctxcommand{xmlsetfunction("#1",\!!bs#2\!!es,#3)}}
+\unexpanded\def\xmlsetfunction#1#2#3{\ctxcommand{xmlsetfunction("#1",\!!bs#2\!!es,#3)}}
% goodie:
@@ -193,12 +137,12 @@
% kind of special:
-%def\xmlstartraw{\clf_xmlstartraw}
-%def\xmlstopraw {\clf_xmlstopraw}
-
\let\xmlstartraw\clf_xmlstartraw
\let\xmlstopraw \clf_xmlstopraw
+\let\startxmlraw\clf_xmlstartraw
+\let\stopxmlraw \clf_xmlstopraw
+
% these are expandable! todo: \xmldoifelseattribute
\let\xmldoif \clf_xmldoif
@@ -225,34 +169,30 @@
%
% \xmlprependsetup{xml:include}
-\let\xmlgrab\xmlsetsetup % obsolete
-\let\xmlself\s!unknown % obsolete
+% \let\xmlgrab\xmlsetsetup % obsolete
+% \let\xmlself\s!unknown % obsolete
-%\ef\xmlsetup#1#2{\setupwithargument{#2}{#1}}
\let\xmlsetup\setupwithargumentswapped
-
-\let\xmls\setupwithargumentswapped % hardly any faster
-\let\xmlw\setupwithargument % hardly any faster
-
-\newtoks \registeredxmlsetups
+\let\xmls \setupwithargumentswapped % hardly any faster
+\let\xmlw \setupwithargument % hardly any faster
% todo: 1:xml:whatever always before 3:xml:something
-\unexpanded\def\xmlprependsetup #1{\clf_xmlprependsetup {*}{#1}}
-\unexpanded\def\xmlappendsetup #1{\clf_xmlappendsetup {*}{#1}}
-\unexpanded\def\xmlbeforesetup #1#2{\clf_xmlbeforesetup {*}{#1}{#2}}
-\unexpanded\def\xmlaftersetup #1#2{\clf_xmlaftersetup {*}{#1}{#2}}
-
-\unexpanded\def\xmlprependdocumentsetup #1#2{\clf_xmlprependdocumentsetup{#1}{#2}}
-\unexpanded\def\xmlappenddocumentsetup #1#2{\clf_xmlappenddocumentsetup {#1}{#2}}
-\unexpanded\def\xmlbeforedocumentsetup #1#2#3{\clf_xmlbeforedocumentsetup {#1}{#2}{#3}}
-\unexpanded\def\xmlafterdocumentsetup #1#2#3{\clf_xmlafterdocumentsetup {#1}{#2}{#3}}
+\unexpanded\def\xmlprependsetup #1{\clf_xmlprependsetup{*}{#1}}
+\unexpanded\def\xmlappendsetup #1{\clf_xmlappendsetup {*}{#1}}
+\unexpanded\def\xmlbeforesetup #1#2{\clf_xmlbeforesetup {*}{#1}{#2}}
+\unexpanded\def\xmlaftersetup #1#2{\clf_xmlaftersetup {*}{#1}{#2}}
+\unexpanded\def\xmlremovesetup #1{\clf_xmlremovesetup {*}{#1}}
+\unexpanded\def\xmlresetsetups {\clf_xmlresetsetups {*}}
-\unexpanded\def\xmlremovesetup #1{\clf_xmlremovesetup {*}{#1}}
-\unexpanded\def\xmlremovedocumentsetup #1#2{\clf_xmlremovedocumentsetup {#1}{#2}}
+\unexpanded\def\xmlprependdocumentsetup #1#2{\clf_xmlprependsetup{#1}{#2}}
+\unexpanded\def\xmlappenddocumentsetup #1#2{\clf_xmlappendsetup {#1}{#2}}
+\unexpanded\def\xmlbeforedocumentsetup #1#2#3{\clf_xmlbeforesetup {#1}{#2}{#3}}
+\unexpanded\def\xmlafterdocumentsetup #1#2#3{\clf_xmlaftersetup {#1}{#2}{#3}}
+\unexpanded\def\xmlremovedocumentsetup #1#2{\clf_xmlremovesetup {#1}{#2}}
+\unexpanded\def\xmlresetdocumentsetups #1{\clf_xmlresetsetups {#1}}
-\unexpanded\def\xmlflushdocumentsetups #1#2{\clf_xmlflushdocumentsetups {#1}{*}{#2}} % #1 == id where to apply * and #2
-\unexpanded\def\xmlresetdocumentsetups #1{\clf_xmlresetdocumentsetups {#1}}
+\unexpanded\def\xmlflushdocumentsetups #1#2{\clf_xmlflushsetups {#1}{*}{#2}} % #1 == id where to apply * and #2
\let\xmlregistersetup \xmlappendsetup
\let\xmlregisterdocumentsetup\xmlappenddocumentsetup
@@ -272,8 +212,8 @@
\xmldefaulttotext{#1}% after include
\xmlstoptiming}
-\unexpanded\def\xmlstarttiming{\clf_xmlstarttiming}
-\unexpanded\def\xmlstoptiming {\clf_xmlstoptiming}
+\unexpanded\def\xmlstarttiming{\clf_xmlstarttiming} % undocumented
+\unexpanded\def\xmlstoptiming {\clf_xmlstoptiming} % undocumented
\def\lxml_process#1#2#3#4#5% flag \loader id name what initializersetup
{\begingroup
@@ -290,7 +230,6 @@
\unexpanded\def\xmlprocessfile {\lxml_process\plusone \xmlload}
\unexpanded\def\xmlprocessdata {\lxml_process\zerocount\xmlloaddata}
\unexpanded\def\xmlprocessbuffer {\lxml_process\zerocount\xmlloadbuffer}
-\unexpanded\def\xmlprocessregistered{\lxml_process\zerocount\xmlloadregistered}
\let\xmlprocess \xmlprocessfile
\startxmlsetups xml:flush
@@ -306,24 +245,22 @@
{\xmlload{#1}{#2}%
\xmlregistereddocumentsetups{#1}{#3}}
-% beware: \xmlmain takes the real root, so also processing
-% instructions preceding the root element; well, in some
-% sense that is the root
-
-\unexpanded\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}
+% replaced by concat
+%
+% \unexpanded\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}
\unexpanded\def\xmlcdataobeyedline {\obeyedline}
\unexpanded\def\xmlcdataobeyedspace{\strut\obeyedspace}
-\unexpanded\def\xmlcdatabefore {\bgroup\tt}
-\unexpanded\def\xmlcdataafter {\egroup}
+\unexpanded\def\xmlcdatabefore {\begingroup\tt}
+\unexpanded\def\xmlcdataafter {\endgroup}
% verbatim (dodo:pre/post whitespace, maybe splot verbatim and
% cdata commands), experimental:
@@ -337,41 +274,41 @@
%
% this is experimental!
-\unexpanded\def\startxmldisplayverbatim[#1]%
- {\startpacked % \begingroup
- \edef\currenttyping{xml:#1}%
+\unexpanded\def\startxmldisplayverbatim
+ {\dosingleempty\lxml_start_display_verbatim}
+
+\def\lxml_start_display_verbatim[#1]%
+ {\startpacked
+ \edef\currenttyping{#1}%
+ \ifx\currenttyping\empty
+ \let\currenttyping\v!typing
+ \else % maybe test for existence
+ \edef\currenttyping{xml:\currenttyping}%
+ \fi
\unexpanded\def\stopxmldisplayverbatim
{\endofverbatimlines
- \stoppacked} % \endgroup
+ \stoppacked}
\doinitializeverbatim
\beginofverbatimlines}
-\unexpanded\def\startxmlinlineverbatim[#1]%
+\unexpanded\def\startxmlinlineverbatim
+ {\dosingleempty\lxml_start_inline_verbatim}
+
+\unexpanded\def\lxml_start_inline_verbatim[#1]%
{\begingroup
- \edef\currenttype{xml:#1}%
+ \edef\currenttype{#1}%
+ \ifx\currenttype\empty
+ \let\currenttype\v!type
+ \else % maybe test for existence
+ \edef\currenttype{xml:\currenttype}%
+ \fi
\let\stopxmlinlineverbatim\endgroup
\doinitializeverbatim}
-% will move but is developed for xml
-
-\newtoks \collectingtoks
-
-\unexpanded\def\startcollect#1\stopcollect
- {\collectingtoks\@EA{\the\collectingtoks#1}}
-
-\unexpanded\def\startexpandedcollect#1\stopexpandedcollect
- {\normalexpanded{\collectingtoks{\the\collectingtoks#1}}}
-
-\unexpanded\def\startcollecting{\collectingtoks\emptytoks}
-\unexpanded\def\stopcollecting {\the\collectingtoks}
-
-\def\inlinemessage #1{\dontleavehmode{\tttf#1}}
-\def\displaymessage#1{\blank\inlinemessage{#1}\blank}
-
% processing instructions
\unexpanded\def\xmlinstalldirective#1#2%
- {\clf_xmlinstalldirective{#1}{\checkedstrippedcsname#2}}
+ {\clf_xmlinstalldirective{#1}{\csstring#2}}
% \def\xmlcontextdirective#1% kind class key value
% {\executeifdefined{xml#1directive}\gobblethreearguments}
@@ -399,13 +336,13 @@
\unexpanded\def\xmldefaulttotext
{\ifcase\xmlprocessingmode
- \expandafter\gobbleoneargument % unset
+ \expandafter\gobbleoneargument % 0 (none)
\or
- \expandafter\clf_xmlsetcommandtotext % 1
+ \expandafter\clf_xmlsetcommandtotext % 1 (normal)
\or
- \expandafter\clf_xmlsetcommandtonone % 2
+ \expandafter\clf_xmlsetcommandtonone % 2 (hidden)
\else
- \expandafter\gobbleoneargument % unset
+ \expandafter\gobbleoneargument % (none)
\fi}
\appendtoks
@@ -415,13 +352,29 @@
\setupxml
[\c!default=, % flush all
\c!compress=\v!no, % strip comment
- \c!entities=\v!yes] % replace entities
+ \c!entities=\v!no] % load big entity file
+
+\appendtoks
+ \doif{\directxmlparameter\c!entities}\clf_xmlloadentities
+\to \everysetupxml
\def\xmlmapvalue #1#2#3{\setvalue{\??xmlmapvalue#1:#2}{#3}} % keep #3 to grab spaces
-\def\xmlvalue #1#2#3{\executeifdefined{\??xmlmapvalue#1:#2}{#3}}
-%def\xmlvalue #1#2{\ifcsname\??xmlmapvalue#1:#2\endcsname\csname\??xmlmapvalue#1:#2\expandafter\expandafter\gobbleoneargument\expandafter\endcsname\else\expandafter\firstofoneargument\fi}
\def\xmldoifelsevalue #1#2{\ifcsname\??xmlmapvalue#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+\def\xmlvalue#1#2% #3
+ {\ifcsname\??xmlmapvalue#1:#2\endcsname
+ \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
+\def\xmlmappedvalue#1#2#3%
+ {\ifcsname\??xmlmapvalue#1:#2\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \csname\??xmlmapvalue#1:#3\expandafter\endcsname
+ \fi}
+
\let\xmldoifvalueelse\xmldoifelsevalue
\let\xmlmapval\xmlmapvalue
@@ -433,14 +386,18 @@
\def\xmlwithindex #1#2{\clf_xmlwithindex{\xmldocument}{#1}{#2}}
\def\xmlreference #1#2{\string\xmlwithindex{#1}{#2}}
-%D Entities (might change):
-
-\setnewconstant\xmlautoentities\plusone % 0=off, 1=upper, 2=upper,lower
+%D Entities:
+%D
+%D \starttyping
+%D \xmlsetentity{tex}{\TEX{}} % {} needed
+%D \stoptyping
\unexpanded\def\xmlsetentity#1#2{\clf_xmlsetentity{#1}{\detokenize{#2}}}
\unexpanded\def\xmltexentity#1#2{\clf_xmltexentity{#1}{\detokenize{#2}}}
-% \xmlsetentity{tex}{\TEX{}} % {} needed
+%D The following might change (or even disappear) so we keep it undocumented.
+
+\setnewconstant\xmlautoentities\plusone % 0=off, 1=upper, 2=upper,lower
\unexpanded\def\xmle
{\ifcase\xmlautoentities
@@ -472,7 +429,24 @@
#1%
\fi\fi}
-% handy helpers (analogue to MP and LUA and TEX and also MkII)
+% \def\lxml_e_upper#1#2% can be abbreviation
+% {\ifcsname\detokenize{#2}\endcsname
+% \lastnamedcs
+% \else
+% \detokenize{#1}%
+% \fi}
+
+% \def\lxml_e_upperlower#1#2% can be anything, so unsafe
+% {\ifcsname\detokenize{#2}\endcsname
+% \expandafter\lastnamedcs
+% \else\ifcsname\detokenize{#1}\endcsname
+% \doubleexpandafter\lastnamedcs
+% \else
+% \detokenize{#1}%
+% \fi\fi}
+
+%D We keep these around as there are also MP, LUA and TEX variants but
+%D they are not the same as in \MKII.
\unexpanded\def\processXMLbuffer
{\dosingleempty\lxml_process_buffer}
@@ -496,10 +470,30 @@
\unexpanded\def\xmlresetinjectors
{\clf_xmlresetinjectors{}}
-\def\xmlinjector#1{\executeifdefined{#1}\donothing}
+% \def\xmlinjector#1{\executeifdefined{#1}\donothing}
+
+\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
\let\xmlapplyselectors\clf_xmlapplyselectors
+% \let\xmlcatcodes\notcatcodes
+
\protect \endinput
% \newcount\charactersactiveoffset \charactersactiveoffset="10000
diff --git a/Master/texmf-dist/tex/context/base/lxml-lpt.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-lpt.lua
index decb6567bf5..b722fc318bc 100644
--- a/Master/texmf-dist/tex/context/base/lxml-lpt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-lpt.lua
@@ -43,11 +43,24 @@ a/b/c/text() a/b/c/text(1) a/b/c/text(-1) a/b/c/text(n)
</typing>
--ldx]]--
-local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end
-local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end
-local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end
-
-local report_lpath = logs.reporter("xml","lpath")
+local trace_lpath = false
+local trace_lparse = false
+local trace_lprofile = false
+local report_lpath = logs.reporter("xml","lpath")
+
+if trackers then
+ trackers.register("xml.path", function(v)
+ trace_lpath = v
+ end)
+ trackers.register("xml.parse", function(v)
+ trace_lparse = v
+ end)
+ trackers.register("xml.profile", function(v)
+ trace_lpath = v
+ trace_lparse = v
+ trace_lprofile = v
+ end)
+end
--[[ldx--
<p>We've now arrived at an interesting part: accessing the tree using a subset
@@ -518,27 +531,49 @@ local lp_doequal = P("=") / "=="
local lp_or = P("|") / " or "
local lp_and = P("&") / " and "
-local lp_builtin = P (
- P("text") / "(ll.dt[1] or '')" + -- fragile
- P("content") / "ll.dt" +
- -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" +
- P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
- P("tag") / "ll.tg" +
- P("position") / "l" + -- is element in finalizer
- P("firstindex") / "1" +
- P("lastindex") / "(#ll.__p__.dt or 1)" +
- P("firstelement") / "1" +
- P("lastelement") / "(ll.__p__.en or 1)" +
- P("first") / "1" +
- P("last") / "#list" +
- P("rootposition") / "order" +
- P("order") / "order" +
- P("element") / "(ll.ei or 1)" +
- P("index") / "(ll.ni or 1)" +
- P("match") / "(ll.mi or 1)" +
- -- P("namespace") / "ll.ns" +
- P("ns") / "ll.ns"
- ) * ((spaces * P("(") * spaces * P(")"))/"")
+-- local lp_builtin = (
+-- P("text") / "(ll.dt[1] or '')" + -- fragile
+-- P("content") / "ll.dt" +
+-- P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
+-- P("tag") / "ll.tg" +
+-- P("position") / "l" + -- is element in finalizer
+-- P("firstindex") / "1" +
+-- P("lastindex") / "(#ll.__p__.dt or 1)" +
+-- P("firstelement") / "1" +
+-- P("lastelement") / "(ll.__p__.en or 1)" +
+-- P("first") / "1" +
+-- P("last") / "#list" +
+-- P("rootposition") / "order" +
+-- P("order") / "order" +
+-- P("element") / "(ll.ei or 1)" +
+-- P("index") / "(ll.ni or 1)" +
+-- P("match") / "(ll.mi or 1)" +
+-- P("namespace") / "ll.ns" +
+-- P("ns") / "ll.ns"
+-- ) * ((spaces * P("(") * spaces * P(")"))/"")
+
+local builtin = {
+ text = "(ll.dt[1] or '')", -- fragile
+ content = "ll.dt",
+ name = "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)",
+ tag = "ll.tg",
+ position = "l", -- is element in finalizer
+ firstindex = "1",
+ firstelement = "1",
+ first = "1",
+ lastindex = "(#ll.__p__.dt or 1)",
+ lastelement = "(ll.__p__.en or 1)",
+ last = "#list",
+ rootposition = "order",
+ order = "order",
+ element = "(ll.ei or 1)",
+ index = "(ll.ni or 1)",
+ match = "(ll.mi or 1)",
+ namespace = "ll.ns",
+ ns = "ll.ns",
+}
+
+local lp_builtin = lpeg.utfchartabletopattern(builtin)/builtin * ((spaces * P("(") * spaces * P(")"))/"")
-- for the moment we keep namespaces with attributes
@@ -637,6 +672,7 @@ local template_f_n = [[
--
+local register_last_match = { kind = "axis", axis = "last-match" } -- , apply = apply_axis["self"] }
local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] }
local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] }
local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] }
@@ -737,21 +773,41 @@ local pathparser = Ct { "patterns", -- can be made a bit faster by moving some p
protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"),
-- the / is needed for // as descendant or self is somewhat special
+ --
-- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
- axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") +
- V("descendant_or_self") + V("following_sibling") + V("following") +
- V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") +
- #(1-P(-1)) * Cc(register_auto_child),
-
- special = special_1 + special_2 + special_3,
+ axis = V("last_match")
+ + V("descendant")
+ + V("child")
+ + V("parent")
+ + V("self")
+ + V("root")
+ + V("ancestor")
+ + V("descendant_or_self")
+ + V("following_sibling")
+ + V("following")
+ + V("reverse_sibling")
+ + V("preceding_sibling")
+ + V("preceding")
+ + V("ancestor_or_self")
+ + #(1-P(-1)) * Cc(register_auto_child),
+
+ special = special_1
+ + special_2
+ + special_3,
initial = (P("/") * spaces * Cc(register_initial_child))^-1,
error = (P(1)^1) / register_error,
- shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"),
+ shortcuts_a = V("s_descendant_or_self")
+ + V("s_descendant")
+ + V("s_child")
+ + V("s_parent")
+ + V("s_self")
+ + V("s_root")
+ + V("s_ancestor"),
shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
@@ -763,6 +819,8 @@ local pathparser = Ct { "patterns", -- can be made a bit faster by moving some p
s_root = P("^^") * Cc(register_root ),
s_ancestor = P("^") * Cc(register_ancestor ),
+ -- we can speed this up when needed but we cache anyway so ...
+
descendant = P("descendant::") * Cc(register_descendant ),
child = P("child::") * Cc(register_child ),
parent = P("parent::") * Cc(register_parent ),
@@ -778,6 +836,7 @@ local pathparser = Ct { "patterns", -- can be made a bit faster by moving some p
preceding = P('preceding::') * Cc(register_preceding ),
preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
+ last_match = P('last-match::') * Cc(register_last_match ),
nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
@@ -837,14 +896,12 @@ xml.nodesettostring = nodesettostring
local lpath -- we have a harmless kind of circular reference
-local lshowoptions = { functions = false }
-
local function lshow(parsed)
if type(parsed) == "string" then
parsed = lpath(parsed)
end
report_lpath("%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,
- table.serialize(parsed,false,lshowoptions))
+ table.serialize(parsed,false))
end
xml.lshow = lshow
@@ -933,146 +990,194 @@ xml.lpath = lpath
-- can be cases that a finalizer returns (or does) something in case
-- there is no match; an example of this is count()
-local profiled = { } xml.profiled = profiled
+do
-local function profiled_apply(list,parsed,nofparsed,order)
- local p = profiled[parsed.pattern]
- if p then
- p.tested = p.tested + 1
- else
- p = { tested = 1, matched = 0, finalized = 0 }
- profiled[parsed.pattern] = p
+ local profiled = { }
+ xml.profiled = profiled
+ local lastmatch = nil -- we remember the last one .. drawback: no collection till new collect
+ local keepmatch = nil -- we remember the last one .. drawback: no collection till new collect
+
+ if directives then
+ directives.register("xml.path.keeplastmatch",function(v)
+ keepmatch = v
+ lastmatch = nil
+ end)
end
- local collected = list
- for i=1,nofparsed do
- local pi = parsed[i]
- local kind = pi.kind
- if kind == "axis" then
- collected = apply_axis[pi.axis](collected)
- elseif kind == "nodes" then
- collected = apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind == "expression" then
- collected = apply_expression(collected,pi.evaluator,order)
- elseif kind == "finalizer" then
- collected = pi.finalizer(collected) -- no check on # here
- p.matched = p.matched + 1
- p.finalized = p.finalized + 1
- return collected
+
+ apply_axis["last-match"] = function()
+ return lastmatch or { }
+ end
+
+ local function profiled_apply(list,parsed,nofparsed,order)
+ local p = profiled[parsed.pattern]
+ if p then
+ p.tested = p.tested + 1
+ else
+ p = { tested = 1, matched = 0, finalized = 0 }
+ profiled[parsed.pattern] = p
end
- if not collected or #collected == 0 then
- local pn = i < nofparsed and parsed[nofparsed]
- if pn and pn.kind == "finalizer" then
- collected = pn.finalizer(collected)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected) -- no check on # here
+ p.matched = p.matched + 1
p.finalized = p.finalized + 1
return collected
end
- return nil
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected) -- collected can be nil
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ return nil
+ end
end
+ if collected then
+ p.matched = p.matched + 1
+ end
+ return collected
end
- if collected then
- p.matched = p.matched + 1
- end
- return collected
-end
-local function traced_apply(list,parsed,nofparsed,order)
- if trace_lparse then
- lshow(parsed)
- end
- report_lpath("collecting: %s",parsed.pattern)
- report_lpath("root tags : %s",tagstostring(list))
- report_lpath("order : %s",order or "unset")
- local collected = list
- for i=1,nofparsed do
- local pi = parsed[i]
- local kind = pi.kind
- if kind == "axis" then
- collected = apply_axis[pi.axis](collected)
- report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
- elseif kind == "nodes" then
- collected = apply_nodes(collected,pi.nodetest,pi.nodes)
- report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
- elseif kind == "expression" then
- collected = apply_expression(collected,pi.evaluator,order)
- report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
- elseif kind == "finalizer" then
- collected = pi.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
- return collected
+ local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
end
- if not collected or #collected == 0 then
- local pn = i < nofparsed and parsed[nofparsed]
- if pn and pn.kind == "finalizer" then
- collected = pn.finalizer(collected)
- report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ report_lpath("collecting: %s",parsed.pattern)
+ report_lpath("root tags : %s",tagstostring(list))
+ report_lpath("order : %s",order or "unset")
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ report_lpath("% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ report_lpath("% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ report_lpath("% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
return collected
end
- return nil
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ report_lpath("% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
+ end
end
+ return collected
end
- return collected
-end
-local function normal_apply(list,parsed,nofparsed,order)
- local collected = list
- for i=1,nofparsed do
- local pi = parsed[i]
- local kind = pi.kind
- if kind == "axis" then
- local axis = pi.axis
- if axis ~= "self" then
- collected = apply_axis[axis](collected)
+ local function normal_apply(list,parsed,nofparsed,order)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ local axis = pi.axis
+ if axis ~= "self" then
+ collected = apply_axis[axis](collected)
+ end
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ return pi.finalizer(collected)
end
- elseif kind == "nodes" then
- collected = apply_nodes(collected,pi.nodetest,pi.nodes)
- elseif kind == "expression" then
- collected = apply_expression(collected,pi.evaluator,order)
- elseif kind == "finalizer" then
- return pi.finalizer(collected)
- end
- if not collected or #collected == 0 then
- local pf = i < nofparsed and parsed[nofparsed].finalizer
- if pf then
- return pf(collected) -- can be anything
+ if not collected or #collected == 0 then
+ local pf = i < nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected) -- can be anything
+ end
+ return nil
end
- return nil
end
+ return collected
end
- return collected
-end
-local function applylpath(list,pattern)
- if not list then
- return
- end
- local parsed = cache[pattern]
- if parsed then
- lpathcalls = lpathcalls + 1
- lpathcached = lpathcached + 1
- elseif type(pattern) == "table" then
- lpathcalls = lpathcalls + 1
- parsed = pattern
- else
- parsed = lpath(pattern) or pattern
- end
- if not parsed then
- return
+ local apply = normal_apply
+
+ if trackers then
+ -- local function check()
+ -- if trace_lprofile or then
+ -- apply = profiled_apply
+ -- elseif trace_lpath then
+ -- apply = traced_apply
+ -- else
+ -- apply = normal_apply
+ -- end
+ -- end
+ -- trackers.register("xml.path", check) -- can be "xml.path,xml.parse,xml.profile
+ -- trackers.register("xml.parse", check)
+ -- trackers.register("xml.profile",check)
+
+ trackers.register("xml.path,xml.parse,xml.profile",function()
+ if trace_lprofile then
+ apply = profiled_apply
+ elseif trace_lpath then
+ apply = traced_apply
+ else
+ apply = normal_apply
+ end
+ end)
end
- local nofparsed = #parsed
- if nofparsed == 0 then
- return -- something is wrong
+
+
+ function xml.applylpath(list,pattern)
+ if not list then
+ lastmatch = nil
+ return
+ end
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcalls = lpathcalls + 1
+ lpathcached = lpathcached + 1
+ elseif type(pattern) == "table" then
+ lpathcalls = lpathcalls + 1
+ parsed = pattern
+ else
+ parsed = lpath(pattern) or pattern
+ end
+ if not parsed then
+ lastmatch = nil
+ return
+ end
+ local nofparsed = #parsed
+ if nofparsed == 0 then
+ lastmatch = nil
+ return -- something is wrong
+ end
+ local collected = apply({ list },parsed,nofparsed,list.mi)
+ lastmatch = keepmatch and collected or nil
+ return collected
end
- if not trace_lpath then
- return normal_apply ({ list },parsed,nofparsed,list.mi)
- elseif trace_lprofile then
- return profiled_apply({ list },parsed,nofparsed,list.mi)
- else
- return traced_apply ({ list },parsed,nofparsed,list.mi)
+
+ function xml.lastmatch()
+ return lastmatch
end
-end
-xml.applylpath = applylpath -- takes a table as first argment, which is what xml.filter will do
+end
+local applylpath = xml.applylpath
--[[ldx--
<p>This is the main filter function. It returns whatever is asked for.</p>
--ldx]]--
@@ -1448,3 +1553,34 @@ function xml.finalizers.paragraphs(c)
end
return c
end
+
+-- local lpegmatch = lpeg.match
+-- local w = lpeg.patterns.whitespace
+-- local p = w^0 * lpeg.Cf(lpeg.Ct("") * lpeg.Cg(lpeg.C((1-w)^1) * lpeg.Cc(true) * w^0)^1,rawset)
+
+-- function xml.functions.classes(e) -- cache
+-- local class = e.at.class
+-- if class then
+-- return lpegmatch(p,class)
+-- else
+-- return { }
+-- end
+-- end
+
+-- local gmatch = string.gmatch
+
+-- function xml.functions.hasclass(e,c,class)
+-- class = class and e.at[class] or e.at.class
+-- if class and class ~= "" then
+-- if class == c then
+-- return true
+-- else
+-- for s in gmatch(class,"%S+") do
+-- if s == c then
+-- return true
+-- end
+-- end
+-- end
+-- end
+-- return false
+-- end
diff --git a/Master/texmf-dist/tex/context/base/lxml-mis.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-mis.lua
index 94a26b97414..94a26b97414 100644
--- a/Master/texmf-dist/tex/context/base/lxml-mis.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-mis.lua
diff --git a/Master/texmf-dist/tex/context/base/lxml-sor.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-sor.lua
index aba1c3b8d3f..aba1c3b8d3f 100644
--- a/Master/texmf-dist/tex/context/base/lxml-sor.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-sor.lua
diff --git a/Master/texmf-dist/tex/context/base/lxml-sor.mkiv b/Master/texmf-dist/tex/context/base/mkiv/lxml-sor.mkiv
index 0d8eb6ba174..0d8eb6ba174 100644
--- a/Master/texmf-dist/tex/context/base/lxml-sor.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-sor.mkiv
diff --git a/Master/texmf-dist/tex/context/base/lxml-tab.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-tab.lua
index 510ba1bd44c..60d6262c7dd 100644
--- a/Master/texmf-dist/tex/context/base/lxml-tab.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-tab.lua
@@ -14,7 +14,7 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
-- maybe when letter -> utf, else name .. then we need an option to the serializer .. a bit
-- of work so we delay this till we cleanup
-local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+local trace_entities = false trackers .register("xml.entities", function(v) trace_entities = v end)
local report_xml = logs and logs.reporter("xml","core") or function(...) print(string.format(...)) end
@@ -24,14 +24,6 @@ handles comment and processing instructions, has a different structure, provides
parent access; a first version used different trickery but was less optimized to we
went this route. First we had a find based parser, now we have an <l n='lpeg'/> based one.
The find based parser can be found in l-xml-edu.lua along with other older code.</p>
-
-<p>Beware, the interface may change. For instance at, ns, tg, dt may get more
-verbose names. Once the code is stable we will also remove some tracing and
-optimize the code.</p>
-
-<p>I might even decide to reimplement the parser using the latest <l n='lpeg'/> trickery
-as the current variant was written when <l n='lpeg'/> showed up and it's easier now to
-build tables in one go.</p>
--ldx]]--
if lpeg.setmaxstack then lpeg.setmaxstack(1000) end -- deeply nested xml files
@@ -44,6 +36,7 @@ local xml = xml
local concat, remove, insert = table.concat, table.remove, table.insert
local type, next, setmetatable, getmetatable, tonumber, rawset = type, next, setmetatable, getmetatable, tonumber, rawset
local lower, find, match, gsub = string.lower, string.find, string.match, string.gsub
+local sort = table.sort
local utfchar = utf.char
local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs
@@ -57,10 +50,9 @@ find based solution where we loop over an array of patterns. Less code and
much cleaner.</p>
--ldx]]--
-xml.xmlns = xml.xmlns or { }
+do -- begin of namespace closure (we ran out of locals)
-local check = P(false)
-local parse = check
+xml.xmlns = xml.xmlns or { }
--[[ldx--
<p>The next function associates a namespace prefix with an <l n='url'/>. This
@@ -71,6 +63,9 @@ xml.registerns("mml","mathml")
</typing>
--ldx]]--
+local check = P(false)
+local parse = check
+
function xml.registerns(namespace, pattern) -- pattern can be an lpeg
check = check + C(P(lower(pattern))) / namespace
parse = P { P(check) + 1 * V(1) }
@@ -113,6 +108,8 @@ end
one efficiently by using the <t>xml.xmlns</t> table.</p>
--ldx]]--
+end -- end of namespace closure
+
--[[ldx--
<p>This version uses <l n='lpeg'/>. We follow the same approach as before, stack and top and
such. This version is about twice as fast which is mostly due to the fact that
@@ -158,24 +155,67 @@ element.</p>
local nsremap, resolvens = xml.xmlns, xml.resolvens
-local stack = { }
-local top = { }
-local dt = { }
-local at = { }
-local xmlns = { }
-local errorstr = nil
-local entities = { }
-local strip = false
-local cleanup = false
-local utfize = false
-local resolve_predefined = false
-local unify_predefined = false
-
-local dcache = { }
-local hcache = { }
-local acache = { }
-
-local mt = { }
+local stack, level, top, at, xmlnms, errorstr
+local entities, parameters
+local strip, utfize, resolve, cleanup, resolve_predefined, unify_predefined
+local dcache, hcache, acache
+local mt, dt, nt
+
+local function preparexmlstate(settings)
+ if settings then
+ stack = { }
+ level = 0
+ top = { }
+ at = { }
+ mt = { }
+ dt = { }
+ nt = 0 -- some 5% faster than #dt on cont-en.xml
+ xmlns = { }
+ errorstr = nil
+ strip = settings.strip_cm_and_dt
+ utfize = settings.utfize_entities
+ resolve = settings.resolve_entities -- enable this in order to apply the dtd
+ resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
+ unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
+ cleanup = settings.text_cleanup
+ entities = settings.entities or { }
+ parameters = { }
+ reported_at_errors = { }
+ dcache = { }
+ hcache = { }
+ acache = { }
+ if utfize == nil then
+ settings.utfize_entities = true
+ utfize = true
+ end
+ if resolve_predefined == nil then
+ settings.resolve_predefined_entities = true
+ resolve_predefined = true
+ end
+ else
+ stack = nil
+ level = nil
+ top = nil
+ at = nil
+ mt = nil
+ dt = nil
+ nt = nil
+ xmlns = nil
+ errorstr = nil
+ strip = nil
+ utfize = nil
+ resolve = nil
+ resolve_predefined = nil
+ unify_predefined = nil
+ cleanup = nil
+ entities = nil
+ parameters = nil
+ reported_at_errors = nil
+ dcache = nil
+ hcache = nil
+ acache = nil
+ end
+end
local function initialize_mt(root)
mt = { __index = root } -- will be redefined later
@@ -189,8 +229,10 @@ function xml.checkerror(top,toclose)
return "" -- can be set
end
+local checkns = xml.checkns
+
local function add_attribute(namespace,tag,value)
- if cleanup and #value > 0 then
+ if cleanup and value ~= "" then
value = cleanup(value) -- new
end
if tag == "xmlns" then
@@ -199,7 +241,7 @@ local function add_attribute(namespace,tag,value)
elseif namespace == "" then
at[tag] = value
elseif namespace == "xmlns" then
- xml.checkns(tag,value)
+ checkns(tag,value)
at["xmlns:" .. tag] = value
else
-- for the moment this way:
@@ -208,14 +250,23 @@ local function add_attribute(namespace,tag,value)
end
local function add_empty(spacing, namespace, tag)
- if #spacing > 0 then
- dt[#dt+1] = spacing
+ if spacing ~= "" then
+ nt = nt + 1
+ dt[nt] = spacing
end
local resolved = namespace == "" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top = stack[#stack]
+ top = stack[level]
dt = top.dt
- local t = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = top }
- dt[#dt+1] = t
+ nt = #dt + 1
+ local t = {
+ ns = namespace or "",
+ rn = resolved,
+ tg = tag,
+ at = at,
+ dt = { },
+ __p__ = top
+ }
+ dt[nt] = t
setmetatable(t, mt)
if at.xmlns then
remove(xmlns)
@@ -224,24 +275,36 @@ local function add_empty(spacing, namespace, tag)
end
local function add_begin(spacing, namespace, tag)
- if #spacing > 0 then
- dt[#dt+1] = spacing
+ if spacing ~= "" then
+ nt = nt + 1
+ dt[nt] = spacing
end
local resolved = namespace == "" and xmlns[#xmlns] or nsremap[namespace] or namespace
- top = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = stack[#stack] }
+ top = {
+ ns = namespace or "",
+ rn = resolved,
+ tg = tag,
+ at = at,
+ dt = {},
+ __p__ = stack[level]
+ }
setmetatable(top, mt)
dt = top.dt
- stack[#stack+1] = top
+ nt = #dt
+ level = level + 1
+ stack[level] = top
at = { }
end
local function add_end(spacing, namespace, tag)
- if #spacing > 0 then
- dt[#dt+1] = spacing
+ if spacing ~= "" then
+ nt = nt + 1
+ dt[nt] = spacing
end
- local toclose = remove(stack)
- top = stack[#stack]
- if #stack < 1 then
+ local toclose = stack[level]
+ level = level - 1
+ top = stack[level]
+ if level < 1 then
errorstr = formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
report_xml(errorstr)
elseif toclose.tg ~= tag then -- no namespace check
@@ -249,65 +312,65 @@ local function add_end(spacing, namespace, tag)
report_xml(errorstr)
end
dt = top.dt
- dt[#dt+1] = toclose
+ nt = #dt + 1
+ dt[nt] = toclose
-- dt[0] = top -- nasty circular reference when serializing table
if toclose.at.xmlns then
remove(xmlns)
end
end
--- local function add_text(text)
--- if cleanup and #text > 0 then
--- dt[#dt+1] = cleanup(text)
--- else
--- dt[#dt+1] = text
--- end
--- end
-
-local spaceonly = lpegpatterns.whitespace^0 * P(-1)
-
-local function add_text(text)
- local n = #dt
+-- local spaceonly = lpegpatterns.whitespace^0 * P(-1)
--
-- will be an option: dataonly
--
-- if #text == 0 or lpegmatch(spaceonly,text) then
-- return
-- end
---
- if cleanup and #text > 0 then
- if n > 0 then
- local s = dt[n]
+
+local function add_text(text)
+ if text == "" then
+ return
+ end
+ if cleanup then
+ if nt > 0 then
+ local s = dt[nt]
if type(s) == "string" then
- dt[n] = s .. cleanup(text)
+ dt[nt] = s .. cleanup(text)
else
- dt[n+1] = cleanup(text)
+ nt = nt + 1
+ dt[nt] = cleanup(text)
end
else
+ nt = 1
dt[1] = cleanup(text)
end
else
- if n > 0 then
- local s = dt[n]
+ if nt > 0 then
+ local s = dt[nt]
if type(s) == "string" then
- dt[n] = s .. text
+ dt[nt] = s .. text
else
- dt[n+1] = text
+ nt = nt + 1
+ dt[nt] = text
end
else
+ nt = 1
dt[1] = text
end
end
end
local function add_special(what, spacing, text)
- if #spacing > 0 then
- dt[#dt+1] = spacing
+ if spacing ~= "" then
+ nt = nt + 1
+ dt[nt] = spacing
end
if strip and (what == "@cm@" or what == "@dt@") then
-- forget it
else
- dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } }
+ nt = nt + 1
+ dt[nt] = { special=true, ns="", tg=what, dt={ text } }
end
end
@@ -315,220 +378,219 @@ local function set_message(txt)
errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","")
end
-local reported_attribute_errors = { }
-
local function attribute_value_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute value %a",str)
- reported_attribute_errors[str] = true
+ reported_at_errors[str] = true
at._error_ = str
end
return str
end
local function attribute_specification_error(str)
- if not reported_attribute_errors[str] then
+ if not reported_at_errors[str] then
report_xml("invalid attribute specification %a",str)
- reported_attribute_errors[str] = true
+ reported_at_errors[str] = true
at._error_ = str
end
return str
end
-local badentity = "&error;"
-local badentity = "&"
+-- these will be set later
-xml.placeholders = {
- unknown_dec_entity = function(str) return str == "" and badentity or formatters["&%s;"](str) end,
- unknown_hex_entity = function(str) return formatters["&#x%s;"](str) end,
- unknown_any_entity = function(str) return formatters["&#x%s;"](str) end,
-}
+local grammar_parsed_text_one
+local grammar_parsed_text_two
-local placeholders = xml.placeholders
+local handle_hex_entity
+local handle_dec_entity
+local handle_any_entity_dtd
+local handle_any_entity_text
-local function fromhex(s)
- local n = tonumber(s,16)
- if n then
- return utfchar(n)
- else
- return formatters["h:%s"](s), true
+-- in order to overcome lua limitations we wrap entity stuff in a
+-- closure
+
+do
+
+ local badentity = "&" -- was "&error;"
+
+ xml.placeholders = {
+ unknown_dec_entity = function(str) return str == "" and badentity or formatters["&%s;"](str) end,
+ unknown_hex_entity = function(str) return formatters["&#x%s;"](str) end,
+ unknown_any_entity = function(str) return formatters["&#x%s;"](str) end,
+ }
+
+ local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["h:%s"](s), true
+ end
end
-end
-local function fromdec(s)
- local n = tonumber(s)
- if n then
- return utfchar(n)
- else
- return formatters["d:%s"](s), true
+ local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return utfchar(n)
+ else
+ return formatters["d:%s"](s), true
+ end
end
-end
--- one level expansion (simple case), no checking done
+ local p_rest = (1-P(";"))^0
+ local p_many = P(1)^0
+ local p_char = lpegpatterns.utf8character
-local p_rest = (1-P(";"))^0
-local p_many = P(1)^0
-local p_char = lpegpatterns.utf8character
+ local parsedentity =
+ P("&#") * (P("x")*(p_rest/fromhex) + (p_rest/fromdec)) * P(";") * P(-1) +
+ P ("#") * (P("x")*(p_many/fromhex) + (p_many/fromdec))
-local parsedentity =
- P("&") * (P("#x")*(p_rest/fromhex) + P("#")*(p_rest/fromdec)) * P(";") * P(-1) +
- (P("#x")*(p_many/fromhex) + P("#")*(p_many/fromdec))
+ xml.parsedentitylpeg = parsedentity
--- parsing in the xml file
+ -- parsing in the xml file
-local predefined_unified = {
- [38] = "&amp;",
- [42] = "&quot;",
- [47] = "&apos;",
- [74] = "&lt;",
- [76] = "&gt;",
-}
+ local predefined_unified = {
+ [38] = "&amp;",
+ [42] = "&quot;",
+ [47] = "&apos;",
+ [74] = "&lt;",
+ [76] = "&gt;",
+ }
-local predefined_simplified = {
- [38] = "&", amp = "&",
- [42] = '"', quot = '"',
- [47] = "'", apos = "'",
- [74] = "<", lt = "<",
- [76] = ">", gt = ">",
-}
+ local predefined_simplified = {
+ [38] = "&", amp = "&",
+ [42] = '"', quot = '"',
+ [47] = "'", apos = "'",
+ [74] = "<", lt = "<",
+ [76] = ">", gt = ">",
+ }
-local nofprivates = 0xF0000 -- shared but seldom used
+ local nofprivates = 0xF0000 -- shared but seldom used
-local privates_u = { -- unescaped
- [ [[&]] ] = "&amp;",
- [ [["]] ] = "&quot;",
- [ [[']] ] = "&apos;",
- [ [[<]] ] = "&lt;",
- [ [[>]] ] = "&gt;",
-}
+ local privates_u = { -- unescaped
+ [ [[&]] ] = "&amp;",
+ [ [["]] ] = "&quot;",
+ [ [[']] ] = "&apos;",
+ [ [[<]] ] = "&lt;",
+ [ [[>]] ] = "&gt;",
+ }
-local privates_p = {
-}
+ local privates_p = { -- needed for roundtrip as well as serialize to tex
+ }
-local privates_n = {
- -- keeps track of defined ones
-}
+ local privates_s = { -- for tex
+ [ [["]] ] = "&U+22;",
+ [ [[#]] ] = "&U+23;",
+ [ [[$]] ] = "&U+24;",
+ [ [[%]] ] = "&U+25;",
+ [ [[&]] ] = "&U+26;",
+ [ [[']] ] = "&U+27;",
+ [ [[<]] ] = "&U+3C;",
+ [ [[>]] ] = "&U+3E;",
+ [ [[\]] ] = "&U+5C;",
+ [ [[{]] ] = "&U+7B;",
+ [ [[|]] ] = "&U+7C;",
+ [ [[}]] ] = "&U+7D;",
+ [ [[~]] ] = "&U+7E;",
+ }
--- -- local escaped = utf.remapper(privates_u) -- can't be used as it freezes
--- -- local unprivatized = utf.remapper(privates_p) -- can't be used as it freezes
---
--- local p_privates_u = false
--- local p_privates_p = false
---
--- table.setmetatablenewindex(privates_u,function(t,k,v) rawset(t,k,v) p_privates_u = false end)
--- table.setmetatablenewindex(privates_p,function(t,k,v) rawset(t,k,v) p_privates_p = false end)
---
--- local function escaped(str)
--- if not str or str == "" then
--- return ""
--- else
--- if not p_privates_u then
--- p_privates_u = Cs((lpeg.utfchartabletopattern(privates_u)/privates_u + p_char)^0)
--- end
--- return lpegmatch(p_privates_u,str)
--- end
--- end
---
--- local function unprivatized(str)
--- if not str or str == "" then
--- return ""
--- else
--- if not p_privates_p then
--- p_privates_p = Cs((lpeg.utfchartabletopattern(privates_p)/privates_p + p_char)^0)
--- end
--- return lpegmatch(p_privates_p,str)
--- end
--- end
+ local privates_n = { -- keeps track of defined ones
+ }
-local escaped = utf.remapper(privates_u,"dynamic")
-local unprivatized = utf.remapper(privates_p,"dynamic")
+ local escaped = utf.remapper(privates_u,"dynamic")
+ local unprivatized = utf.remapper(privates_p,"dynamic")
+ local unspecialized = utf.remapper(privates_s,"dynamic")
+
+ xml.unprivatized = unprivatized
+ xml.unspecialized = unspecialized
+ xml.escaped = escaped
+
+ local function unescaped(s)
+ local p = privates_n[s]
+ if not p then
+ nofprivates = nofprivates + 1
+ p = utfchar(nofprivates)
+ privates_n[s] = p
+ s = "&" .. s .. ";" -- todo: use char-ent to map to hex
+ privates_u[p] = s
+ privates_p[p] = s
+ privates_s[p] = s
+ end
+ return p
+ end
-xml.unprivatized = unprivatized
+ xml.privatetoken = unescaped
+ xml.privatecodes = privates_n
+ xml.specialcodes = privates_s
-local function unescaped(s)
- local p = privates_n[s]
- if not p then
- nofprivates = nofprivates + 1
- p = utfchar(nofprivates)
- privates_n[s] = p
- s = "&" .. s .. ";" -- todo: use char-ent to map to hex
- privates_u[p] = s
- privates_p[p] = s
+ function xml.addspecialcode(key,value)
+ privates_s[key] = value or "&" .. s .. ";"
end
- return p
-end
-
-xml.privatetoken = unescaped
-xml.privatecodes = privates_n
-local function handle_hex_entity(str)
- local h = hcache[str]
- if not h then
- local n = tonumber(str,16)
- h = unify_predefined and predefined_unified[n]
- if h then
- if trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- elseif utfize then
- h = (n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring hex entity &#x%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
- end
- else
- if trace_entities then
- report_xml("found entity &#x%s;",str)
+ handle_hex_entity = function(str)
+ local h = hcache[str]
+ if not h then
+ local n = tonumber(str,16)
+ h = unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ elseif utfize then
+ h = (n and utfchar(n)) or xml.unknown_hex_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting hex entity &#x%s; into %a",str,h)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#x%s;",str)
+ end
+ h = "&#x" .. str .. ";"
end
- h = "&#x" .. str .. ";"
+ hcache[str] = h
end
- hcache[str] = h
+ return h
end
- return h
-end
-local function handle_dec_entity(str)
- local d = dcache[str]
- if not d then
- local n = tonumber(str)
- d = unify_predefined and predefined_unified[n]
- if d then
- if trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- elseif utfize then
- d = (n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
- if not n then
- report_xml("utfize, ignoring dec entity &#%s;",str)
- elseif trace_entities then
- report_xml("utfize, converting dec entity &#%s; into %a",str,d)
- end
- else
- if trace_entities then
- report_xml("found entity &#%s;",str)
+ handle_dec_entity = function(str)
+ local d = dcache[str]
+ if not d then
+ local n = tonumber(str)
+ d = unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ elseif utfize then
+ d = (n and utfchar(n)) or placeholders.unknown_dec_entity(str) or ""
+ if not n then
+ report_xml("utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ report_xml("utfize, converting dec entity &#%s; into %a",str,d)
+ end
+ else
+ if trace_entities then
+ report_xml("found entity &#%s;",str)
+ end
+ d = "&#" .. str .. ";"
end
- d = "&#" .. str .. ";"
+ dcache[str] = d
end
- dcache[str] = d
+ return d
end
- return d
-end
-
-xml.parsedentitylpeg = parsedentity
-local function handle_any_entity(str)
- if resolve then
- local a = acache[str] -- per instance ! todo
- if not a then
- a = resolve_predefined and predefined_simplified[str]
+ handle_any_entity_dtd = function(str)
+ if resolve then
+ local a = resolve_predefined and predefined_simplified[str] -- true by default
if a then
if trace_entities then
report_xml("resolving entity &%s; to predefined %a",str,a)
end
else
if type(resolve) == "function" then
- a = resolve(str) or entities[str]
+ a = resolve(str,entities) or entities[str]
else
a = entities[str]
end
@@ -564,46 +626,226 @@ local function handle_any_entity(str)
end
end
end
- acache[str] = a
- elseif trace_entities then
- if not acache[str] then
- report_xml("converting entity &%s; to %a",str,a)
- acache[str] = a
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str == "" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a = badentity
+ acache[str] = a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ -- a = "&" .. str .. ";"
+ a = unescaped(str)
+ acache[str] = a
+ end
end
+ return a
end
- return a
- else
- local a = acache[str]
- if not a then
- a = resolve_predefined and predefined_simplified[str]
+ end
+
+ handle_any_entity_text = function(str)
+ if resolve then
+ local a = resolve_predefined and predefined_simplified[str]
if a then
- -- one of the predefined
- acache[str] = a
- if trace_entities then
- report_xml("entity &%s; becomes %a",str,a)
- end
- elseif str == "" then
if trace_entities then
- report_xml("invalid entity &%s;",str)
+ report_xml("resolving entity &%s; to predefined %a",str,a)
end
- a = badentity
- acache[str] = a
else
- if trace_entities then
- report_xml("entity &%s; is made private",str)
+ if type(resolve) == "function" then
+ a = resolve(str,entities) or entities[str]
+ else
+ a = entities[str]
+ end
+ if a then
+ if type(a) == "function" then
+ if trace_entities then
+ report_xml("expanding entity &%s; to function call",str)
+ end
+ a = a(str) or ""
+ end
+ a = lpegmatch(grammar_parsed_text_two,a) or a
+ if type(a) == "number" then
+ return ""
+ else
+ a = lpegmatch(parsedentity,a) or a -- for nested
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ end
+ if trace_entities then
+ report_xml("resolving entity &%s; to internal %a",str,a)
+ end
+ else
+ local unknown_any_entity = placeholders.unknown_any_entity
+ if unknown_any_entity then
+ a = unknown_any_entity(str) or ""
+ end
+ if a then
+ if trace_entities then
+ report_xml("resolving entity &%s; to external %s",str,a)
+ end
+ else
+ if trace_entities then
+ report_xml("keeping entity &%s;",str)
+ end
+ if str == "" then
+ a = badentity
+ else
+ a = "&" .. str .. ";"
+ end
+ end
end
- -- a = "&" .. str .. ";"
- a = unescaped(str)
- acache[str] = a
end
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ if trace_entities then
+ report_xml("entity &%s; becomes %a",str,a)
+ end
+ elseif str == "" then
+ if trace_entities then
+ report_xml("invalid entity &%s;",str)
+ end
+ a = badentity
+ acache[str] = a
+ else
+ if trace_entities then
+ report_xml("entity &%s; is made private",str)
+ end
+ -- a = "&" .. str .. ";"
+ a = unescaped(str)
+ acache[str] = a
+ end
+ end
+ return a
+ end
+ end
+
+ -- for tex
+
+ local p_rest = (1-P(";"))^1
+
+ local spec = {
+ [0x23] = "\\Ux{23}", -- #
+ [0x24] = "\\Ux{24}", -- $
+ [0x25] = "\\Ux{25}", -- %
+ [0x5C] = "\\Ux{5C}", -- \
+ [0x7B] = "\\Ux{7B}", -- {
+ [0x7C] = "\\Ux{7C}", -- |
+ [0x7D] = "\\Ux{7D}", -- }
+ [0x7E] = "\\Ux{7E}", -- ~
+ }
+
+ local hash = table.setmetatableindex(spec,function(t,k)
+ local v = utfchar(k)
+ t[k] = v
+ return v
+ end)
+
+ local function fromuni(s)
+ local n = tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s), true
+ end
+ end
+
+ local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s), true
+ end
+ end
+
+ local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s), true
+ end
+ end
+
+ local reparsedentity =
+ P("U+") * (p_rest/fromuni)
+ + P("#") * (
+ P("x") * (p_rest/fromhex)
+ + p_rest/fromdec
+ )
+
+ local hash = table.setmetatableindex(function(t,k)
+ local v = utfchar(k)
+ t[k] = v
+ return v
+ end)
+
+ local function fromuni(s)
+ local n = tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["u:%s"](s), true
+ end
+ end
+
+ local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return hash[n]
+ else
+ return formatters["h:%s"](s), true
+ end
+ end
+
+ local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return hash[n]
+ else
+ return formatters["d:%s"](s), true
end
- return a
end
+
+ local unescapedentity =
+ P("U+") * (p_rest/fromuni)
+ + P("#") * (
+ P("x") * (p_rest/fromhex)
+ + p_rest/fromdec
+ )
+
+ xml.reparsedentitylpeg = reparsedentity -- with \Ux{...} for special tex entities
+ xml.unescapedentitylpeg = unescapedentity -- normal characters
+
end
--- local function handle_end_entity(chr)
--- report_xml("error in entity, %a found instead of %a",chr,";")
--- end
+-- we use these later on
+
+local escaped = xml.escaped
+local unescaped = xml.unescaped
+local placeholders = xml.placeholders
+
+--
local function handle_end_entity(str)
report_xml("error in entity, %a found without ending %a",str,";")
@@ -635,18 +877,24 @@ local spacing = C(space^0)
----- entitycontent = (1-open-semicolon)^0
local anyentitycontent = (1-open-semicolon-space-close-ampersand)^0
-local hexentitycontent = R("AF","af","09")^0
-local decentitycontent = R("09")^0
+local hexentitycontent = R("AF","af","09")^1
+local decentitycontent = R("09")^1
local parsedentity = P("#")/"" * (
P("x")/"" * (hexentitycontent/handle_hex_entity) +
(decentitycontent/handle_dec_entity)
- ) + (anyentitycontent/handle_any_entity)
+ ) + (anyentitycontent/handle_any_entity_dtd) -- can be Cc(true)
+local parsedentity_text= P("#")/"" * (
+ P("x")/"" * (hexentitycontent/handle_hex_entity) +
+ (decentitycontent/handle_dec_entity)
+ ) + (anyentitycontent/handle_any_entity_text) -- can be Cc(false)
----- entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity))
-local entity = (ampersand/"") * parsedentity * (semicolon/"")
+local entity = (ampersand/"") * parsedentity * (semicolon/"")
+ + ampersand * (anyentitycontent / handle_end_entity)
+local entity_text = (ampersand/"") * parsedentity_text * (semicolon/"")
+ ampersand * (anyentitycontent / handle_end_entity)
local text_unparsed = C((1-open)^1)
-local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
+local text_parsed = (Cs((1-open-ampersand)^1)/add_text + Cs(entity_text)/add_text)^1
local somespace = space^1
local optionalspace = space^0
@@ -668,7 +916,7 @@ local attribute = (somespace * name * optionalspace * equal * optionalspa
local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
-local parsedtext = text_parsed / add_text
+local parsedtext = text_parsed -- / add_text
local unparsedtext = text_unparsed / add_text
local balanced = P { "[" * ((1 - S"[]") + V(1))^0 * "]" } -- taken from lpeg manual, () example
@@ -689,9 +937,30 @@ local someinstruction = C((1 - endinstruction)^0)
local somecomment = C((1 - endcomment )^0)
local somecdata = C((1 - endcdata )^0)
-local function normalentity(k,v ) entities[k] = v end
-local function systementity(k,v,n) entities[k] = v end
-local function publicentity(k,v,n) entities[k] = v end
+local function weirdentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","weird",k,v)
+ end
+ parameters[k] = v
+end
+local function normalentity(k,v)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","normal",k,v)
+ end
+ entities[k] = v
+end
+local function systementity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","system",k,v)
+ end
+ entities[k] = v
+end
+local function publicentity(k,v,n)
+ if trace_entities then
+ report_xml("registering %s entity %a as %a","public",k,v)
+ end
+ entities[k] = v
+end
-- todo: separate dtd parser
@@ -699,19 +968,34 @@ local begindoctype = open * P("!DOCTYPE")
local enddoctype = close
local beginset = P("[")
local endset = P("]")
+local wrdtypename = C((1-somespace-P(";"))^1)
local doctypename = C((1-somespace-close)^0)
local elementdoctype = optionalspace * P("<!ELEMENT") * (1-close)^0 * close
local basiccomment = begincomment * ((1 - endcomment)^0) * endcomment
-local normalentitytype = (doctypename * somespace * value)/normalentity
+local weirdentitytype = P("%") * (somespace * doctypename * somespace * value) / weirdentity
+local normalentitytype = (doctypename * somespace * value) / normalentity
local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
-local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype) * optionalspace * close
+local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype + weirdentitytype) * optionalspace * close
+
+local function weirdresolve(s)
+ lpegmatch(entitydoctype,parameters[s])
+end
+
+local function normalresolve(s)
+ lpegmatch(entitydoctype,entities[s])
+end
+
+local entityresolve = P("%") * (wrdtypename/weirdresolve ) * P(";")
+ + P("&") * (wrdtypename/normalresolve) * P(";")
+
+entitydoctype = entitydoctype + entityresolve
-- we accept comments in doctypes
-local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + basiccomment + space)^0 * optionalspace * endset
+local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + entityresolve + basiccomment + space)^0 * optionalspace * endset
local definitiondoctype= doctypename * somespace * doctypeset
local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
@@ -723,13 +1007,11 @@ local comment = (spacing * begincomment * somecomment * endcomm
local cdata = (spacing * begincdata * somecdata * endcdata ) / function(...) add_special("@cd@",...) end
local doctype = (spacing * begindoctype * somedoctype * enddoctype ) / function(...) add_special("@dt@",...) end
--- local text_unparsed = C((1-open)^1)
--- local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
-
local crap_parsed = 1 - beginelement - endelement - emptyelement - begininstruction - begincomment - begincdata - ampersand
local crap_unparsed = 1 - beginelement - endelement - emptyelement - begininstruction - begincomment - begincdata
-local parsedcrap = Cs((crap_parsed^1 + entity)^1) / handle_crap_error
-local unparsedcrap = Cs((crap_unparsed )^1) / handle_crap_error
+local parsedcrap = Cs((crap_parsed^1 + entity_text)^1) / handle_crap_error
+local parsedcrap = Cs((crap_parsed^1 + entity_text)^1) / handle_crap_error
+local unparsedcrap = Cs((crap_unparsed )^1) / handle_crap_error
-- nicer but slower:
--
@@ -744,8 +1026,18 @@ local trailer = space^0 * (text_unparsed/set_message)^0
-- text + comment + emptyelement + cdata + instruction + V("parent"), -- 5.8
-- text + V("parent") + emptyelement + comment + cdata + instruction, -- 5.5
-local grammar_parsed_text = P { "preamble",
- preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+-- local grammar_parsed_text = P { "preamble",
+-- preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+-- parent = beginelement * V("children")^0 * endelement,
+-- children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction + parsedcrap,
+-- }
+
+grammar_parsed_text_one = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0,
+}
+
+grammar_parsed_text_two = P { "followup",
+ followup = V("parent") * trailer,
parent = beginelement * V("children")^0 * endelement,
children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction + parsedcrap,
}
@@ -759,40 +1051,27 @@ local grammar_unparsed_text = P { "preamble",
-- maybe we will add settings to result as well
local function _xmlconvert_(data, settings)
- settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
- --
- strip = settings.strip_cm_and_dt
- utfize = settings.utfize_entities
- resolve = settings.resolve_entities
- resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
- unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
- cleanup = settings.text_cleanup
- entities = settings.entities or { }
- --
- if utfize == nil then
- settings.utfize_entities = true
- utfize = true
- end
- if resolve_predefined == nil then
- settings.resolve_predefined_entities = true
- resolve_predefined = true
- end
- --
- stack, top, at, xmlns, errorstr = { }, { }, { }, { }, nil
- acache, hcache, dcache = { }, { }, { } -- not stored
- reported_attribute_errors = { }
+ settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
+ preparexmlstate(settings)
if settings.parent_root then
mt = getmetatable(settings.parent_root)
else
initialize_mt(top)
end
- stack[#stack+1] = top
+ level = level + 1
+ stack[level] = top
top.dt = { }
dt = top.dt
+ nt = 0
if not data or data == "" then
errorstr = "empty xml file"
elseif utfize or resolve then
- if lpegmatch(grammar_parsed_text,data) then
+ local m = lpegmatch(grammar_parsed_text_one,data)
+ if m then
+ m = lpegmatch(grammar_parsed_text_two,data,m)
+ end
+ -- local m = lpegmatch(grammar_parsed_text,data)
+ if m then
-- errorstr = "" can be set!
else
errorstr = "invalid xml file - parsed text"
@@ -809,8 +1088,8 @@ local function _xmlconvert_(data, settings)
local result
if errorstr and errorstr ~= "" then
result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } }
-setmetatable(result, mt)
-setmetatable(result.dt[1], mt)
+ setmetatable(result, mt)
+ setmetatable(result.dt[1], mt)
setmetatable(stack, mt)
local errorhandler = settings.error_handler
if errorhandler == false then
@@ -850,16 +1129,13 @@ setmetatable(result.dt[1], mt)
result.statistics = {
errormessage = errorstr,
entities = {
- decimals = dcache,
- hexadecimals = hcache,
- names = acache,
+ decimals = dcache,
+ hexadecimals = hcache,
+ names = acache,
+ intermediates = parameters,
}
}
- strip, utfize, resolve, resolve_predefined = nil, nil, nil, nil
- unify_predefined, cleanup, entities = nil, nil, nil
- stack, top, at, xmlns, errorstr = nil, nil, nil, nil, nil
- acache, hcache, dcache = nil, nil, nil
- reported_attribute_errors, mt, errorhandler = nil, nil, nil
+ preparexmlstate() -- resets
return result
end
@@ -964,15 +1240,37 @@ generic table copier. Since we know what we're dealing with we
can speed up things a bit. The second argument is not to be used!</p>
--ldx]]--
-local function copy(old,tables)
+-- local function copy(old,tables)
+-- if old then
+-- if not tables then
+-- tables = { }
+-- end
+-- local new = { }
+-- if not tables[old] then
+-- tables[old] = new
+-- end
+-- for k,v in next, old do
+-- new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
+-- end
+-- local mt = getmetatable(old)
+-- if mt then
+-- setmetatable(new,mt)
+-- end
+-- return new
+-- else
+-- return { }
+-- end
+-- end
+
+local function copy(old)
if old then
- tables = tables or { }
local new = { }
- if not tables[old] then
- tables[old] = new
- end
for k,v in next, old do
- new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
+ if type(v) == "table" then
+ new[k] = table.copy(v)
+ else
+ new[k] = v
+ end
end
local mt = getmetatable(old)
if mt then
@@ -1019,29 +1317,44 @@ and then handle the lot.</p>
local f_attribute = formatters['%s=%q']
+-- we could reuse ats
+
local function verbose_element(e,handlers,escape) -- options
local handle = handlers.handle
local serialize = handlers.serialize
local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn
local ats = eat and next(eat) and { }
if ats then
+ -- we now sort attributes
local n = 0
- for k,v in next, eat do
+ for k in next, eat do
n = n + 1
- ats[n] = f_attribute(k,escaped(v))
+ ats[n] = k
+ end
+ if n == 1 then
+ local k = ats[1]
+ ats = f_attribute(k,escaped(eat[k]))
+ else
+ sort(ats)
+ for i=1,n do
+ local k = ats[i]
+ ats[i] = f_attribute(k,escaped(eat[k]))
+ end
+ ats = concat(ats," ")
end
end
if ern and trace_entities and ern ~= ens then
ens = ern
end
+ local n = edt and #edt
if ens ~= "" then
- if edt and #edt > 0 then
+ if n and n > 0 then
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),">")
+ handle("<",ens,":",etg," ",ats,">")
else
handle("<",ens,":",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e = edt[i]
if type(e) == "string" then
handle(escaped(e))
@@ -1052,19 +1365,19 @@ local function verbose_element(e,handlers,escape) -- options
handle("</",ens,":",etg,">")
else
if ats then
- handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ handle("<",ens,":",etg," ",ats,"/>")
else
handle("<",ens,":",etg,"/>")
end
end
else
- if edt and #edt > 0 then
+ if n and n > 0 then
if ats then
- handle("<",etg," ",concat(ats," "),">")
+ handle("<",etg," ",ats,">")
else
handle("<",etg,">")
end
- for i=1,#edt do
+ for i=1,n do
local e = edt[i]
if type(e) == "string" then
handle(escaped(e)) -- option: hexify escaped entities
@@ -1075,7 +1388,7 @@ local function verbose_element(e,handlers,escape) -- options
handle("</",etg,">")
else
if ats then
- handle("<",etg," ",concat(ats," "),"/>")
+ handle("<",etg," ",ats,"/>")
else
handle("<",etg,"/>")
end
@@ -1096,7 +1409,7 @@ local function verbose_cdata(e,handlers)
end
local function verbose_doctype(e,handlers)
- handlers.handle("<!DOCTYPE ",e.dt[1],">")
+ handlers.handle("<!DOCTYPE",e.dt[1],">") -- has space at end of string
end
local function verbose_root(e,handlers)
@@ -1146,14 +1459,16 @@ local function serialize(e,handlers,...)
end
local function xserialize(e,handlers)
- local functions = handlers.functions
- local etg = e.tg
- if etg then
- (functions[etg] or functions["@el@"])(e,handlers)
- -- elseif type(e) == "string" then
- -- functions["@tx@"](e,handlers)
- else
- functions["@dc@"](e,handlers)
+ if e then
+ local functions = handlers.functions
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
end
end
diff --git a/Master/texmf-dist/tex/context/base/lxml-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-tex.lua
index 550a06a1855..3a49ea3d2e9 100644
--- a/Master/texmf-dist/tex/context/base/lxml-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-tex.lua
@@ -11,11 +11,13 @@ if not modules then modules = { } end modules ['lxml-tex'] = {
-- be an cldf-xml helper library.
local utfchar = utf.char
-local concat, insert, remove, sortedkeys = table.concat, table.insert, table.remove, table.sortedkeys
+local concat, insert, remove, sortedkeys, reversed = table.concat, table.insert, table.remove, table.sortedkeys, table.reverse
local format, sub, gsub, find, gmatch, match = string.format, string.sub, string.gsub, string.find, string.gmatch, string.match
local type, next, tonumber, tostring, select = type, next, tonumber, tostring, select
local lpegmatch = lpeg.match
-local P, S, C, Cc = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc
+local P, S, C, Cc, Cs = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs
+local patterns = lpeg.patterns
+local setmetatableindex = table.setmetatableindex
local tex, xml = tex, xml
local lowerchars, upperchars, lettered = characters.lower, characters.upper, characters.lettered
@@ -43,14 +45,16 @@ local xmlcollect = xml.collect
local xmltext = xml.text
local xmltostring = xml.tostring
local xmlapplylpath = xml.applylpath
-local xmlunprivatized = xml.unprivatized
+local xmlunspecialized = xml.unspecialized
local xmlprivatetoken = xml.privatetoken
-local xmlprivatecodes = xml.privatecodes
local xmlstripelement = xml.stripelement
local xmlinclusion = xml.inclusion
local xmlinclusions = xml.inclusions
local xmlbadinclusions = xml.badinclusions
local xmlcontent = xml.content
+local xmllastmatch = xml.lastmatch
+
+directives.enable("xml.path.keeplastmatch")
local variables = interfaces and interfaces.variables or { }
@@ -78,21 +82,33 @@ local report_lxml = logs.reporter("lxml","tex")
local report_xml = logs.reporter("xml","tex")
local forceraw = false
-local forceraw = nil
+
+local p_texescape = patterns.texescape
-- tex entities
---
--- todo: unprivatize attributes
lxml.entities = lxml.entities or { }
storage.register("lxml/entities",lxml.entities,"lxml.entities")
--- xml.placeholders.unknown_any_entity = nil -- has to be per xml
+local xmlentities = xml.entities -- these are more or less standard entities
+local texentities = lxml.entities -- these are specific for a tex run
+local reparsedentity = xml.reparsedentitylpeg -- \Ux{...}
+local unescapedentity = xml.unescapedentitylpeg
+local parsedentity = reparsedentity
+local useelement = false -- probably no longer needed / used
+
+function lxml.startunescaped()
+ parsedentity = unescapedentity
+end
+
+function lxml.stopunescaped()
+ parsedentity = reparsedentity
+end
-local xmlentities = xml.entities
-local texentities = lxml.entities
-local parsedentity = xml.parsedentitylpeg
+directives.register("lxml.entities.useelement",function(v)
+ useelement = v
+end)
function lxml.registerentity(key,value)
texentities[key] = value
@@ -103,6 +119,7 @@ end
function lxml.resolvedentity(str)
if forceraw then
+ -- should not happen as we then can as well bypass this function
if trace_entities then
report_xml("passing entity %a as &%s;",str,str)
end
@@ -142,21 +159,35 @@ function lxml.resolvedentity(str)
-- normally this is already solved while loading the file
local chr, err = lpegmatch(parsedentity,str)
if chr then
- if trace_entities then
- report_xml("passing entity %a as %a using %a",str,chr,"ctxcatcodes")
+ if parsedentity == reparsedentity then
+ if trace_entities then
+ report_xml("passing entity %a as %a using %a",str,chr,"ctxcatcodes")
+ end
+ context(chr)
+ else
+ contextsprint(notcatcodes,chr)
+ if trace_entities then
+ report_xml("passing entity %a as %a using %a",str,chr,"notcatcodes")
+ end
end
- context(chr)
elseif err then
if trace_entities then
report_xml("passing faulty entity %a as %a",str,err)
end
context(err)
- else
+ elseif useelement then
local tag = upperchars(str)
if trace_entities then
report_xml("passing entity %a to \\xmle using tag %a",str,tag)
end
- context.xmle(str,tag) -- we need to use our own upper
+ contextsprint(texcatcodes,"\\xmle{")
+ contextsprint(notcatcodes,e)
+ contextsprint(texcatcodes,"}")
+ else
+ if trace_entities then
+ report_xml("passing entity %a as %a using %a",str,str,"notcatcodes")
+ end
+ contextsprint(notcatcodes,str)
end
end
end
@@ -181,37 +212,76 @@ local texfinalizers = finalizers.tex
-- serialization with entity handling
-local ampersand = P("&")
-local semicolon = P(";")
-local entity = ampersand * C((1-semicolon)^1) * semicolon / lxml.resolvedentity -- context.bold
+local ampersand = P("&")
+local semicolon = P(";")
+
+local entity = (ampersand * C((1-semicolon)^1) * semicolon) / lxml.resolvedentity -- context.bold
-local _, xmltextcapture = context.newtexthandler {
+local _, xmltextcapture_yes = context.newtexthandler {
+ catcodes = notcatcodes,
exception = entity,
+}
+local _, xmltextcapture_nop = context.newtexthandler {
catcodes = notcatcodes,
}
-local _, xmlspacecapture = context.newtexthandler {
+local _, xmlspacecapture_yes = context.newtexthandler {
endofline = context.xmlcdataobeyedline,
emptyline = context.xmlcdataobeyedline,
simpleline = context.xmlcdataobeyedline,
space = context.xmlcdataobeyedspace,
+ catcodes = notcatcodes,
exception = entity,
+}
+local _, xmlspacecapture_nop = context.newtexthandler {
+ endofline = context.xmlcdataobeyedline,
+ emptyline = context.xmlcdataobeyedline,
+ simpleline = context.xmlcdataobeyedline,
+ space = context.xmlcdataobeyedspace,
catcodes = notcatcodes,
}
-local _, xmllinecapture = context.newtexthandler {
+local _, xmllinecapture_yes = context.newtexthandler {
endofline = context.xmlcdataobeyedline,
emptyline = context.xmlcdataobeyedline,
simpleline = context.xmlcdataobeyedline,
+ catcodes = notcatcodes,
exception = entity,
+}
+local _, xmllinecapture_nop = context.newtexthandler {
+ endofline = context.xmlcdataobeyedline,
+ emptyline = context.xmlcdataobeyedline,
+ simpleline = context.xmlcdataobeyedline,
catcodes = notcatcodes,
}
-local _, ctxtextcapture = context.newtexthandler {
+local _, ctxtextcapture_yes = context.newtexthandler {
+ catcodes = ctxcatcodes,
exception = entity,
+}
+local _, ctxtextcapture_nop = context.newtexthandler {
catcodes = ctxcatcodes,
}
+local xmltextcapture = xmltextcapture_yes
+local xmlspacecapture = xmlspacecapture_yes
+local xmllinecapture = xmllinecapture_yes
+local ctxtextcapture = ctxtextcapture_yes
+
+directives.register("lxml.entities.escaped",function(v)
+ if v then
+ xmltextcapture = xmltextcapture_yes
+ xmlspacecapture = xmlspacecapture_yes
+ xmllinecapture = xmllinecapture_yes
+ ctxtextcapture = ctxtextcapture_yes
+ else
+ xmltextcapture = xmltextcapture_nop
+ xmlspacecapture = xmlspacecapture_nop
+ xmllinecapture = xmllinecapture_nop
+ ctxtextcapture = ctxtextcapture_nop
+ end
+end)
+
-- cdata
local toverbatim = context.newverbosehandler {
@@ -239,6 +309,14 @@ function lxml.stopraw()
forceraw = false
end
+function lxml.startraw()
+ forceraw = true
+end
+
+function lxml.stopraw()
+ forceraw = false
+end
+
function lxml.rawroot()
return rawroot
end
@@ -354,6 +432,12 @@ end
lxml.addindex = addindex
+implement {
+ name = "xmladdindex",
+ arguments = { "string" },
+ actions = addindex,
+}
+
-- another cache
local function lxmlapplylpath(id,pattern) -- better inline, saves call
@@ -417,38 +501,54 @@ function xml.load(filename,settings)
return xmltable
end
-local function entityconverter(id,str)
- return xmlentities[str] or xmlprivatetoken(str) or "" -- roundtrip handler
+local function entityconverter(id,str,ent) -- todo: disable tex entities when raw
+ -- tex driven entity
+ local t = texentities[str]
+ if t then
+ local p = xmlprivatetoken(str)
+-- only once
+-- context.xmlprivate(p,t)
+ return p
+ end
+ -- dtd determined entity
+ local e = ent and ent[str]
+ if e then
+ return e
+ end
+ -- predefined entity (mathml and so)
+ local x = xmlentities[str]
+ if x then
+ return x
+ end
+ -- keep original somehow
+ return xmlprivatetoken(str)
end
-function lxml.convert(id,data,entities,compress,currentresource)
+local function lxmlconvert(id,data,compress,currentresource)
local settings = { -- we're now roundtrip anyway
- unify_predefined_entities = true,
- utfize_entities = true,
- resolve_predefined_entities = true,
- resolve_entities = function(str) return entityconverter(id,str) end, -- needed for mathml
+ unify_predefined_entities = false, -- is also default
+ utfize_entities = true, -- is also default
+ resolve_predefined_entities = true, -- is also default
+ resolve_entities = function(str,ent) return entityconverter(id,str,ent) end,
currentresource = tostring(currentresource or id),
}
if compress and compress == variables.yes then
settings.strip_cm_and_dt = true
end
- -- if entities and entities == variables.yes then
- -- settings.utfize_entities = true
- -- -- settings.resolve_entities = function (str) return entityconverter(id,str) end
- -- end
return xml.convert(data,settings)
end
-function lxml.load(id,filename,compress,entities)
+lxml.convert = lxmlconvert
+
+function lxml.load(id,filename,compress)
filename = ctxrunner.preparedfile(filename)
if trace_loading then
report_lxml("loading file %a as %a",filename,id)
end
noffiles, nofconverted = noffiles + 1, nofconverted + 1
- -- local xmltable = xml.load(filename)
starttiming(xml)
local ok, data = resolvers.loadbinfile(filename)
- local xmltable = lxml.convert(id,(ok and data) or "",compress,entities,format("id: %s, file: %s",id,filename))
+ local xmltable = lxmlconvert(id,(ok and data) or "",compress,format("id: %s, file: %s",id,filename))
stoptiming(xml)
lxml.store(id,xmltable,filename)
return xmltable, filename
@@ -535,38 +635,34 @@ function lxml.save(id,name)
xml.save(getid(id),name)
end
-function xml.getbuffer(name,compress,entities) -- we need to make sure that commands are processed
+function xml.getbuffer(name,compress) -- we need to make sure that commands are processed
if not name or name == "" then
name = tex.jobname
end
nofconverted = nofconverted + 1
local data = buffers.getcontent(name)
- xmltostring(lxml.convert(name,data,compress,entities,format("buffer: %s",tostring(name or "?")))) -- one buffer
+ xmltostring(lxmlconvert(name,data,compress,format("buffer: %s",tostring(name or "?")))) -- one buffer
end
-function lxml.loadbuffer(id,name,compress,entities)
+function lxml.loadbuffer(id,name,compress)
starttiming(xml)
nofconverted = nofconverted + 1
local data = buffers.collectcontent(name or id) -- name can be list
- local xmltable = lxml.convert(id,data,compress,entities,format("buffer: %s",tostring(name or id or "?")))
+ local xmltable = lxmlconvert(id,data,compress,format("buffer: %s",tostring(name or id or "?")))
lxml.store(id,xmltable)
stoptiming(xml)
return xmltable, name or id
end
-function lxml.loaddata(id,str,compress,entities)
+function lxml.loaddata(id,str,compress)
starttiming(xml)
nofconverted = nofconverted + 1
- local xmltable = lxml.convert(id,str or "",compress,entities,format("id: %s",id))
+ local xmltable = lxmlconvert(id,str or "",compress,format("id: %s",id))
lxml.store(id,xmltable)
stoptiming(xml)
return xmltable, id
end
-function lxml.loadregistered(id)
- return loaded[id], id
-end
-
-- e.command:
--
-- string : setup
@@ -586,6 +682,21 @@ end
local default_element_handler = xml.gethandlers("verbose").functions["@el@"]
+-- local xmlw = setmetatableindex(function(t,k)
+-- local v = setmetatableindex(function(t,kk)
+-- local v
+-- if kk == false then
+-- v = "\\xmlw{" .. k .. "}{"
+-- else
+-- v = "\\xmlw{" .. k .. "}{" .. kk .. "::"
+-- end
+-- t[kk] = v
+-- return v
+-- end)
+-- t[k]= v
+-- return v
+-- end)
+
local function tex_element(e,handlers)
local command = e.command
if command == nil then
@@ -606,9 +717,11 @@ local function tex_element(e,handlers)
end
-- faster than context.xmlw
contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",rootname,"::",ix,"}")
+ -- contextsprint(ctxcatcodes,xmlw[command][rootname],ix,"}")
else
report_lxml("fatal error: no index for %a",command)
contextsprint(ctxcatcodes,"\\xmlw{",command,"}{",ix or 0,"}")
+ -- contextsprint(ctxcatcodes,xmlw[command][false],ix or 0,"}")
end
elseif tc == "function" then
command(e)
@@ -678,11 +791,16 @@ local function tex_cdata(e,handlers)
end
end
+-- we could try to merge the conversion and flusher but we don't gain much and it makes tracing
+-- harder: xunspecialized = utf.remapper(xml.specialcodes,"dynamic",lxml.resolvedentity)
+
local function tex_text(e)
- e = xmlunprivatized(e)
+ e = xmlunspecialized(e)
lpegmatch(xmltextcapture,e)
end
+--
+
local function ctx_text(e) -- can be just context(e) as we split there
lpegmatch(ctxtextcapture,e)
end
@@ -711,7 +829,7 @@ lxml.xmltexhandler = xmltexhandler
-- begin of test
local function tex_space(e)
- e = xmlunprivatized(e)
+ e = xmlunspecialized(e)
lpegmatch(xmlspacecapture,e)
end
@@ -729,7 +847,7 @@ local xmltexspacehandler = xml.newhandlers {
}
local function tex_line(e)
- e = xmlunprivatized(e)
+ e = xmlunspecialized(e)
lpegmatch(xmllinecapture,e)
end
@@ -785,13 +903,13 @@ local function sprint(root) -- check rawroot usage
local tr = type(root)
if tr == "string" then -- can also be result of lpath
-- rawroot = false -- ?
- root = xmlunprivatized(root)
+ root = xmlunspecialized(root)
lpegmatch(xmltextcapture,root)
elseif tr == "table" then
if forceraw then
rawroot = root
-- contextsprint(ctxcatcodes,xmltostring(root)) -- goes wrong with % etc
- root = xmlunprivatized(xmltostring(root))
+ root = xmlunspecialized(xmltostring(root))
lpegmatch(xmltextcapture,root) -- goes to toc
else
xmlserialize(root,xmltexhandler)
@@ -812,7 +930,7 @@ local function tprint(root) -- we can move sprint inline
end
end
elseif tr == "string" then
- root = xmlunprivatized(root)
+ root = xmlunspecialized(root)
lpegmatch(xmltextcapture,root)
end
end
@@ -823,14 +941,14 @@ local function cprint(root) -- content
-- quit
elseif type(root) == 'string' then
-- rawroot = false
- root = xmlunprivatized(root)
+ root = xmlunspecialized(root)
lpegmatch(xmltextcapture,root)
else
local rootdt = root.dt
if forceraw then
rawroot = root
-- contextsprint(ctxcatcodes,xmltostring(rootdt or root))
- root = xmlunprivatized(xmltostring(root))
+ root = xmlunspecialized(xmltostring(root))
lpegmatch(xmltextcapture,root) -- goes to toc
else
xmlserialize(rootdt or root,xmltexhandler)
@@ -1205,6 +1323,9 @@ local function index(collected,n)
contextsprint(ctxcatcodes,0) -- why ctxcatcodes
end
+-- the number of commands is often relative small but there can be many calls
+-- to this finalizer
+
local function command(collected,cmd,otherwise)
local n = collected and #collected
if n and n > 0 then
@@ -1214,7 +1335,7 @@ local function command(collected,cmd,otherwise)
local ix = e.ix
local name = e.name
if name and not ix then
- lxml.addindex(name,false,true)
+ addindex(name,false,true)
ix = e.ix
end
if not ix or not name then
@@ -1230,6 +1351,45 @@ local function command(collected,cmd,otherwise)
end
end
+-- local wildcards = setmetatableindex(function(t,k)
+-- local v = false
+-- if find(k,"%*") then
+-- v = setmetatableindex(function(t,kk)
+-- local v = gsub(k,"%*",kk)
+-- t[k] = v
+-- -- report_lxml("wildcard %a key %a value %a",kk,k,v)
+-- return v
+-- end)
+-- end
+-- t[k] = v
+-- return v
+-- end)
+--
+-- local function command(collected,cmd,otherwise)
+-- local n = collected and #collected
+-- if n and n > 0 then
+-- local wildcard = wildcards[cmd]
+-- for c=1,n do -- maybe optimize for n=1
+-- local e = collected[c]
+-- local ix = e.ix
+-- local name = e.name
+-- if name and not ix then
+-- addindex(name,false,true)
+-- ix = e.ix
+-- end
+-- if not ix or not name then
+-- report_lxml("no valid node index for element %a using command %s",name or "?",cmd)
+-- elseif wildcard then
+-- contextsprint(ctxcatcodes,"\\xmlw{",wildcard[e.tg],"}{",name,"::",ix,"}")
+-- else
+-- contextsprint(ctxcatcodes,"\\xmlw{",cmd,"}{",name,"::",ix,"}")
+-- end
+-- end
+-- elseif otherwise then
+-- contextsprint(ctxcatcodes,"\\xmlw{",otherwise,"}{#1}")
+-- end
+-- end
+
local function attribute(collected,a,default)
if collected and #collected > 0 then
local at = collected[1].at
@@ -1260,6 +1420,35 @@ local function chainattribute(collected,arguments) -- todo: optional levels
end
end
+local function chainpath(collected,nonamespace)
+ if collected and #collected > 0 then
+ local e = collected[1]
+ local t = { }
+ while e do
+ local tg = e.tg
+ local rt = e.__p__
+ local ns = e.ns
+ if tg == "@rt@" then
+ break
+ elseif rt.tg == "@rt@" then
+ if nonamespace or not ns or ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
+ else
+ if nonamespace or not ns or ns == "" then
+ t[#t+1] = tg .. "[" .. e.ei .. "]"
+ else
+ t[#t+1] = ns .. ":" .. tg .. "[" .. e.ei .. "]"
+ end
+ end
+ e = rt
+ end
+ contextsprint(notcatcodes,concat(reversed(t),"/"))
+ end
+end
+
local function text(collected)
if collected then
local nc = #collected
@@ -1377,6 +1566,7 @@ texfinalizers.index = index
texfinalizers.concat = concat
texfinalizers.concatrange = concatrange
texfinalizers.chainattribute = chainattribute
+texfinalizers.chainpath = chainpath
texfinalizers.default = all -- !!
local concat = table.concat
@@ -1501,21 +1691,36 @@ end
function lxml.raw(id,pattern) -- the content, untouched by commands
local collected = (pattern and xmlapplylpath(getid(id),pattern)) or getid(id)
if collected and #collected > 0 then
- contextsprint(notcatcodes,xmltostring(collected[1].dt))
+ local s = xmltostring(collected[1].dt)
+ if s ~= "" then
+ contextsprint(notcatcodes,s)
+ end
+ end
+end
+
+-- templates
+
+function lxml.rawtex(id,pattern) -- the content, untouched by commands
+ local collected = (pattern and xmlapplylpath(getid(id),pattern)) or getid(id)
+ if collected and #collected > 0 then
+ local s = xmltostring(collected[1].dt)
+ if s ~= "" then
+ contextsprint(notcatcodes,lpegmatch(p_texescape,s) or s)
+ end
end
end
function lxml.context(id,pattern) -- the content, untouched by commands
if pattern then
- local collected = xmlapplylpath(getid(id),pattern) or getid(id)
+ local collected = xmlapplylpath(getid(id),pattern)
if collected and #collected > 0 then
- contextsprint(ctxcatcodes,collected[1].dt)
+ ctx_text(collected[1].dt[1])
end
else
local collected = getid(id)
if collected then
local dt = collected.dt
- if #dt > 0 then
+ if dt and #dt > 0 then
ctx_text(dt[1])
end
end
@@ -1523,9 +1728,34 @@ function lxml.context(id,pattern) -- the content, untouched by commands
end
function lxml.text(id,pattern)
- local collected = (pattern and xmlapplylpath(getid(id),pattern)) or getid(id)
- if collected and #collected > 0 then
- text(collected)
+ if pattern then
+ local collected = xmlapplylpath(getid(id),pattern)
+ if collected and #collected > 0 then
+ text(collected)
+ end
+ else
+ local e = getid(id)
+ if e then
+ text(e.dt)
+ end
+ end
+end
+
+function lxml.pure(id,pattern)
+ if pattern then
+ local collected = xmlapplylpath(getid(id),pattern)
+ if collected and #collected > 0 then
+ parsedentity = unescapedentity
+ text(collected)
+ parsedentity = reparsedentity
+ end
+ else
+ parsedentity = unescapedentity
+ local e = getid(id)
+ if e then
+ text(e.dt)
+ end
+ parsedentity = reparsedentity
end
end
@@ -1539,6 +1769,10 @@ function lxml.chainattribute(id,pattern,a,default)
chainattribute(xmlapplylpath(getid(id),pattern),a,default)
end
+function lxml.path(id,pattern,nonamespace)
+ chainpath(xmlapplylpath(getid(id),pattern),nonamespace)
+end
+
function lxml.concatrange(id,pattern,start,stop,separator,lastseparator,textonly) -- test this on mml
concatrange(xmlapplylpath(getid(id),pattern),start,stop,separator,lastseparator,textonly)
end
@@ -1573,47 +1807,88 @@ end
--
-- no need for an assignment so:
-function lxml.att(id,a,default)
- local e = getid(id)
- if e then
- local at = e.at
- if at then
- -- normally always true
- local str = at[a]
- if not str then
- if default and default ~= "" then
- contextsprint(notcatcodes,default)
+-- function lxml.att(id,a,default)
+-- local e = getid(id)
+-- if e then
+-- local at = e.at
+-- if at then
+-- -- normally always true
+-- local str = at[a]
+-- if not str then
+-- if default and default ~= "" then
+-- contextsprint(notcatcodes,default)
+-- end
+-- elseif str ~= "" then
+-- contextsprint(notcatcodes,str)
+-- else
+-- -- explicit empty is valid
+-- end
+-- elseif default and default ~= "" then
+-- contextsprint(notcatcodes,default)
+-- end
+-- elseif default and default ~= "" then
+-- contextsprint(notcatcodes,default)
+-- end
+-- end
+
+do
+
+ local att
+
+ function lxml.att(id,a,default)
+ local e = getid(id)
+ if e then
+ local at = e.at
+ if at then
+ -- normally always true
+ att = at[a]
+ if not att then
+ if default and default ~= "" then
+ att = default
+ contextsprint(notcatcodes,default)
+ end
+ elseif att ~= "" then
+ contextsprint(notcatcodes,att)
+ else
+ -- explicit empty is valid
end
- elseif str ~= "" then
- contextsprint(notcatcodes,str)
- else
- -- explicit empty is valid
+ elseif default and default ~= "" then
+ att = default
+ contextsprint(notcatcodes,default)
end
elseif default and default ~= "" then
+ att = default
contextsprint(notcatcodes,default)
+ else
+ att = ""
end
- elseif default and default ~= "" then
- contextsprint(notcatcodes,default)
end
-end
-function lxml.refatt(id,a)
- local e = getid(id)
- if e then
- local at = e.at
- if at then
- local str = at[a]
- if str and str ~= "" then
- str = gsub(str,"^#+","")
- if str ~= "" then
- contextsprint(notcatcodes,str)
+ function lxml.refatt(id,a)
+ local e = getid(id)
+ if e then
+ local at = e.at
+ if at then
+ att = at[a]
+ if att and att ~= "" then
+ att = gsub(att,"^#+","")
+ if att ~= "" then
+ contextsprint(notcatcodes,att)
+ return
+ end
end
end
end
+ att = ""
+ end
+
+ function lxml.lastatt()
+ contextsprint(notcatcodes,att)
end
+
end
-function lxml.name(id) -- or remapped name? -> lxml.info, combine
+function lxml.name(id)
local e = getid(id)
if e then
local ns = e.rn or e.ns
@@ -1625,7 +1900,7 @@ function lxml.name(id) -- or remapped name? -> lxml.info, combine
end
end
-function lxml.match(id) -- or remapped name? -> lxml.info, combine
+function lxml.match(id)
local e = getid(id)
contextsprint(ctxcatcodes,e and e.mi or 0)
end
@@ -1640,7 +1915,7 @@ function lxml.tag(id) -- tag vs name -> also in l-xml tag->name
end
end
-function lxml.namespace(id) -- or remapped name?
+function lxml.namespace(id)
local e = getid(id)
if e then
local ns = e.rn or e.ns
@@ -1660,6 +1935,13 @@ function lxml.flush(id)
end
end
+function lxml.lastmatch()
+ local collected = xmllastmatch()
+ if collected then
+ all(collected)
+ end
+end
+
function lxml.snippet(id,i)
local e = getid(id)
if e then
@@ -1710,10 +1992,6 @@ function lxml.elements(id,pattern,reverse)
return xmlelements(getid(id),pattern,reverse)
end
--- obscure ones
-
-lxml.info = lxml.name
-
-- testers
local found, empty = xml.found, xml.empty
@@ -1736,7 +2014,7 @@ local function checkedempty(id,pattern)
local nt = #dt
return (nt == 0) or (nt == 1 and dt[1] == "")
else
- return isempty(getid(id),pattern)
+ return empty(getid(id),pattern)
end
end
@@ -1921,7 +2199,7 @@ xml.pihandlers["injector"] = function(category,rest,e)
end
end
-local pattern = P("context-") * C((1-lpeg.patterns.whitespace)^1) * C(P(1)^1)
+local pattern = P("context-") * C((1-patterns.whitespace)^1) * C(P(1)^1)
function lxml.applyselectors(id)
local root = getid(id)
@@ -1940,19 +2218,23 @@ function lxml.applyselectors(id)
local categories = options_to_hash(rest)
if categories["begin"] then
local okay = false
- for k, v in next, permitted do
- if categories[k] then
- okay = k
- break
+ if permitted then
+ for k, v in next, permitted do
+ if categories[k] then
+ okay = k
+ break
+ end
end
end
- if not trace_selectors then
- -- skip
- elseif okay then
- report_lxml("accepting selector: %s",okay)
+ if okay then
+ if trace_selectors then
+ report_lxml("accepting selector: %s",okay)
+ end
else
categories.begin = false
- report_lxml("rejecting selector: % t",sortedkeys(categories))
+ if trace_selectors then
+ report_lxml("rejecting selector: % t",sortedkeys(categories))
+ end
end
for j=i,ndt do
local dtj = dt[j]
@@ -1982,19 +2264,23 @@ function lxml.applyselectors(id)
local categories = options_to_hash(rest)
if categories["begin"] then
local okay = false
- for k, v in next, permitted do
- if categories[k] then
- okay = k
- break
+ if permitted then
+ for k, v in next, permitted do
+ if categories[k] then
+ okay = k
+ break
+ end
end
end
- if not trace_selectors then
- -- skip
- elseif okay then
- report_lxml("accepting include: %s",okay)
+ if okay then
+ if trace_selectors then
+ report_lxml("accepting include: %s",okay)
+ end
else
categories.begin = false
- report_lxml("rejecting include: % t",sortedkeys(categories))
+ if trace_selectors then
+ report_lxml("rejecting include: % t",sortedkeys(categories))
+ end
end
if okay then
for j=i,ndt do
diff --git a/Master/texmf-dist/tex/context/base/lxml-xml.lua b/Master/texmf-dist/tex/context/base/mkiv/lxml-xml.lua
index d0e25607820..d0e25607820 100644
--- a/Master/texmf-dist/tex/context/base/lxml-xml.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/lxml-xml.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/m-newcolumnsets.mkiv b/Master/texmf-dist/tex/context/base/mkiv/m-newcolumnsets.mkiv
new file mode 100644
index 00000000000..e0fe60f3f4d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/m-newcolumnsets.mkiv
@@ -0,0 +1,38 @@
+%D \module
+%D [ file=m-newcolumnsets,
+%D version=2016.02.29,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=New Columnsets,
+%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 will eventually be replaced by \type {m-oldcolumnsets}.
+
+\ifdefined \definepagegrid
+ \expandafter \endinput
+\else
+ \loadmarkfile{page-cst}
+\fi
+
+% \let\definecolumnset \definepagegrid
+% \let\setupcolumnset \setuppagegrid
+% \let\setupcolumnsetlines \setuppagegridlines
+% \let\setupcolumnsetstart \setuppagegridstart
+% \let\startcolumnset \startpagegrid
+% \let\stopcolumnset \stoppagegrid
+% \let\definecolumnsetspan \definepagegridspan
+% \let\setupcolumnsetspan \setuppagegridspan
+% \let\startcolumnsetspan \startpagegridspan
+% \let\stopcolumnsetspan \stoppagegridspan
+% \let\columnsetspanwidth \pagegridspanwidth
+% \let\definecolumnsetarea \definepagegridarea
+% \let\setupcolumnsetarea \setuppagegridarea
+% \let\setupcolumnsetareatext\setuppagegridareatext
+
+\endinput
+
diff --git a/Master/texmf-dist/tex/context/base/m-oldbibtex.mkiv b/Master/texmf-dist/tex/context/base/mkiv/m-oldbibtex.mkiv
index 08c23e7cc87..08c23e7cc87 100644
--- a/Master/texmf-dist/tex/context/base/m-oldbibtex.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/m-oldbibtex.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/m-oldotf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/m-oldotf.mkiv
new file mode 100644
index 00000000000..c7c468d93ec
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/m-oldotf.mkiv
@@ -0,0 +1,77 @@
+%D \module
+%D [ file=m-oldotf,
+%D version=2015.07.08,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Traditional OTF Loader,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\startluacode
+ local files = {
+ "font-otf",
+ "font-otb",
+ "font-inj",
+-- "font-ota",
+ "font-otn",
+ "font-otd",
+ "font-otp",
+ "font-otc",
+ "font-oth",
+ "font-odv",
+ "font-map",
+ "font-fbk",
+ "font-gds",
+ }
+ local report = logs.reporter("oldotf")
+ local findfile = resolvers.findfile
+ local addsuffix = file.addsuffix
+ report()
+ report("using traditional font loader code")
+ report()
+ for i=1,#files do
+ local foundfile = findfile(addsuffix(files[i],"lua"))
+ if foundfile and foundfile ~= "" then
+ report("loading %a",foundfile)
+ dofile(foundfile)
+ end
+ end
+ report()
+
+ -- needed for testing:
+
+ local nuts = nodes.nuts
+ local copy_node = nuts.copy
+ local kern = nuts.pool.register(nuts.pool.kern())
+ local setfield = nuts.setfield
+
+ nuts.setattr(kern,attributes.private('fontkern'),1) -- we can have several, attributes are shared
+
+ nodes.injections.installnewkern(function(k)
+ local c = copy_node(kern)
+ setfield(c,"kern",k)
+ return c
+ end)
+
+ directives.register("fonts.injections.fontkern", function(v) setfield(kern,"subtype",v and 0 or 1) end)
+
+ local fonts = fonts
+ local handlers = fonts.handlers
+ local otf = handlers.otf -- brrr
+ local afm = handlers.afm -- brrr
+ local getters = fonts.getters
+
+ getters.kern .opentype = otf.getkern
+ getters.substitution.opentype = otf.getsubstitution
+ getters.alternate .opentype = otf.getalternate
+ getters.multiple .opentype = otf.getmultiple
+
+\stopluacode
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-acc.mkvi b/Master/texmf-dist/tex/context/base/mkiv/math-acc.mkvi
index 415f2b91f2d..415f2b91f2d 100644
--- a/Master/texmf-dist/tex/context/base/math-acc.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-acc.mkvi
diff --git a/Master/texmf-dist/tex/context/base/math-act.lua b/Master/texmf-dist/tex/context/base/mkiv/math-act.lua
index d0ea789909c..d0ea789909c 100644
--- a/Master/texmf-dist/tex/context/base/math-act.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-act.lua
diff --git a/Master/texmf-dist/tex/context/base/math-ali.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-ali.mkiv
index bba55ba72c4..ebb20e33e31 100644
--- a/Master/texmf-dist/tex/context/base/math-ali.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ali.mkiv
@@ -83,6 +83,8 @@
% use zeroskipplusfill
+% i really need to redo this eqno mess ... in lua
+
\def\math_prepare_r_eqalign_no
{\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{\alignmark\alignmark}\math_right_of_eqalign\tabskip\zeropoint}%
\c_math_align_b{\aligntab\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{\alignmark\alignmark}\math_right_of_eqalign\tabskip\zeropoint}%
@@ -98,7 +100,7 @@
\the\mathdisplayaligntweaks
\tabskip\centering}
-\def\math_prepare_l_eqalign_no
+\def\math_prepare_l_eqalign_no % \checkeddisplaymath
{\c_math_align_a{\strut\math_first_in_eqalign\hfil\math_left_of_equalign\span\math_math_in_eqalign{\alignmark\alignmark}\math_right_of_eqalign\tabskip\zeropoint}%
\c_math_align_b{\aligntab\math_next_in_eqalign\math_left_of_equalign\span\math_math_in_eqalign{\alignmark\alignmark}\math_right_of_eqalign\tabskip\zeropoint}%
% problem: number is handled after rest and so ends up in the margin
@@ -123,7 +125,7 @@
\let\math_finish_eqalign_no\relax
\fi
#1%
- \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter {\the\scratchtoks\crcr#2\crcr}%
+ \halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi \expandafter {\the\scratchtoks\crcr#2\crcr}%
\math_finish_eqalign_no}
\def\math_both_eqalign_no_aligned#1%
@@ -139,7 +141,7 @@
\fi
\fi
#1%
- \halign \ifcase\eqalignmode \or to \displaywidth \fi \expandafter \bgroup\the\scratchtoks\crcr}
+ \halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi \expandafter \bgroup\the\scratchtoks\crcr}
\def\math_rlap#1%
{\setbox\scratchbox\hbox{#1}%
@@ -195,14 +197,32 @@
\let\NR\math_alignment_NR
\to \everymathalignment
+\let\math_alignment_snap_start\relax
+\let\math_alignment_snap_stop \relax
+
+% experimental
+
+\def\math_alignment_snap_start
+ {\ifgridsnapping
+ \snaptogrid[\v!both]\vbox\bgroup
+ \fi}
+
+\def\math_alignment_snap_stop
+ {\ifgridsnapping
+ \egroup
+ \fi}
+
+% end of experimental
+
\unexpanded\def\math_alignment_start#1%
{\edef\currentmathalignment{#1}%
\dosingleempty\math_alignment_start_indeed}
\def\math_alignment_start_indeed[#1]%
{% \begingroup not permitted ($$...assignments...\halign... )
+ \math_alignment_snap_start
\iffirstargument
- \setupmathalignment[\currentmathalignment][#1]%
+ \setupmathalignment[\currentmathalignment][#1]% bad! ungrouped
\fi
\the\everymathalignment
\c_math_eqalign_column\zerocount
@@ -217,7 +237,8 @@
\def\math_alignment_stop
{\math_finish_eqalign_no
\dostoptagged
- \dostoptagged}
+ \dostoptagged
+ \math_alignment_snap_stop}
\installcorenamespace{mathalignment}
\installcorenamespace{mathalignmentvariant}
@@ -694,10 +715,13 @@
\def\math_matrix_process#1#2%
{\dowithnextbox
{\scratchdimen\dimexpr(\nextboxdp-\nextboxht)/2 \ifcase#2\or+\mathaxisheight\textfont2\fi\relax
- \ifcase#1\relax\or\lower\scratchdimen\or\or\raise\scratchdimen\fi
- \hbox{$\mathmatrixparameter\c!left
- \vcenter{\unvbox\nextbox}%
- \mathmatrixparameter\c!right$}}%
+ \ifcase#1\relax\or\lower\scratchdimen\or\or\raise\scratchdimen\fi\hbox\bgroup
+ \normalstartimath
+ \mathmatrixparameter\c!left
+ \vcenter{\unvbox\nextbox}%
+ \mathmatrixparameter\c!right
+ \normalstopimath
+ \egroup}%
\vbox}
\unexpanded\def\installmathmatrixalignmethod#1#2%
@@ -915,7 +939,7 @@
\crcr}%
\mathsurround\zeropoint
\everycr\emptytoks
- \halign\bgroup\hfil$\scriptstyle\alignmark\alignmark$\hfil\crcr}
+ \halign\bgroup\hfil\normalstartimath\scriptstyle\alignmark\alignmark\normalstopimath\hfil\crcr}
\def\stopsubstack
{\crcr
@@ -977,9 +1001,9 @@
{\thinmuskip 0mu
\medmuskip -1mu
\thickmuskip -1mu
- \setbox\scratchbox\hbox{$#1\mathsurround\zeropoint$}%
+ \setbox\scratchbox\hbox{\normalstartimath#1\mathsurround\zeropoint\normalstopimath}%
\kern-\wd\scratchbox
- ${}#1{}\mathsurround\zeropoint$}%
+ \normalstartimath{}#1{}\mathsurround\zeropoint\normalstopimath}%
\ifdim\wd\scratchbox<\zeropoint
\endgroup
\expandafter\mathbin
@@ -1034,7 +1058,7 @@
\let\math_the_l_eq_no\empty
\unexpanded\def\startmathbox#1%
- {\hsize\displaywidth
+ {\hsize\displaywidth % \checkeddisplaymath
\global\mathnumberstatus\plusone
\mathraggedstatus#1\relax
\let\mathnumbercorrection\!!zeropoint
@@ -1049,7 +1073,7 @@
\let\normaleqno \eqno
% added
\strc_formulas_place_number
- \setbox\scratchbox\math_hbox to \displaywidth\bgroup
+ \setbox\scratchbox\math_hbox to \displaywidth\bgroup % \checkeddisplaymath
\mathinnerstrut
\startforceddisplaymath
\ifcase\mathraggedstatus\or\hfill\or\hfill\fi}
@@ -1078,7 +1102,8 @@
\egroup
\setbox0\hbox{\unhcopy\scratchbox}%
\scratchdimen\wd0
- \ifdim\scratchdimen>\displaywidth
+ % to be tested: \scratchdimen\naturalwd\scratchbox
+ \ifdim\scratchdimen>\displaywidth % \checkeddisplaymath
\donetrue
\else
\donefalse
@@ -1092,14 +1117,14 @@
\box\scratchbox
\else
\ifdone
- \vbox{\box\scratchbox\hbox to \displaywidth{\hss\math_box_llapped_math_no}}%
+ \vpack{\box\scratchbox\hpack to \displaywidth{\hss\math_box_llapped_math_no}}% \checkeddisplaymath
\else
\hss\box\scratchbox\math_box_llapped_math_no % hss makes room for number
\fi
\fi
\else
\ifdone
- \vbox{\hbox to \displaywidth{\math_box_rlapped_math_no\hss}\box\scratchbox}%
+ \vpack{\hpack to \displaywidth{\math_box_rlapped_math_no\hss}\box\scratchbox}% \checkeddisplaymath
\else
\math_box_rlapped_math_no\box\scratchbox\hss % hss makes room for number
\fi
diff --git a/Master/texmf-dist/tex/context/base/math-arr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-arr.mkiv
index 0e3a53f3219..28aad8adadf 100644
--- a/Master/texmf-dist/tex/context/base/math-arr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-arr.mkiv
@@ -76,16 +76,18 @@
\mathsurround\zeropoint
\muskip0=\muexpr\m_math_arrows_factor\muexpr\thirdoffourarguments #2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\firstoffourarguments #2\onemuskip\relax
\muskip2=\muexpr\m_math_arrows_factor\muexpr\fourthoffourarguments#2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\secondoffourarguments#2\onemuskip\relax
- \setbox0\hbox{$\scriptstyle
- \mkern\muskip0\relax
- #5\relax
- \mkern\muskip2\relax
- $}%
- \setbox2\hbox{$\scriptstyle
- \mkern\muskip0\relax
- #4\relax
- \mkern\muskip2\relax
- $}%
+ \setbox0\hbox{\normalstartimath
+ \scriptstyle
+ \mkern\muskip0\relax
+ #5\relax
+ \mkern\muskip2\relax
+ \normalstopimath}%
+ \setbox2\hbox{\normalstartimath
+ \scriptstyle
+ \mkern\muskip0\relax
+ #4\relax
+ \mkern\muskip2\relax
+ \normalstopimath}%
\setbox4\hbox{#3\displaystyle}%
\dimen0\wd0\relax
\ifdim\wd2>\dimen0
@@ -118,11 +120,11 @@
\def\math_arrows_construct_double#1#2#3#4#5#6#7% opt l r sp rs top bot
{\mathrel
{\scratchdimen.32\exheight\relax % was .22, todo: make configurable
- \setbox0\hbox{$\math_arrows_construct{#1}{#2}{#4}{\phantom{#6}}{#7}$}%
- \setbox2\hbox{$\math_arrows_construct{#1}{#3}{#5}{#6}{\phantom{#7}}$}%
- \raise\scratchdimen\box0
- \kern-\wd2
- \lower\scratchdimen\box2}}
+ \setbox\scratchboxone\hbox{\normalstartimath\math_arrows_construct{#1}{#2}{#4}{\phantom{#6}}{#7}\normalstopimath}%
+ \setbox\scratchboxtwo\hbox{\normalstartimath\math_arrows_construct{#1}{#3}{#5}{#6}{\phantom{#7}}\normalstopimath}%
+ \raise\scratchdimen\box\scratchboxone
+ \kern-\wd\scratchboxtwo
+ \lower\scratchdimen\box\scratchboxtwo}}
%D \macros{definematharrow}
%D
@@ -211,7 +213,7 @@
{\ifcsname#1\endcsname
\pushmacro\math_arrows_do
\def\math_arrows_do[##1][##2]{\setuvalue{#1}{\math_arrows_do[#2][##2]}}%
- \getvalue{#1}%
+ \csname#1\endcsname
\popmacro\math_arrows_do
\fi}
@@ -254,12 +256,14 @@
%D different set of values need to be determined.
\def\mtharrowfill#1#2#3#4#5#6#7#8%
- {$\mathsurround\zeropoint
- \thickmuskip\zeromuskip\medmuskip\thickmuskip\thinmuskip\thickmuskip
- \relax#8#5%
- \mkern-#1\onemuskip
- \cleaders\hbox{$#8\mkern-#2\onemuskip#6\mkern-#3\onemuskip$}\hfill
- \mkern-#4\onemuskip#7$}
+ {\normalstartimath
+ \mathsurround\zeropoint
+ \thickmuskip\zeromuskip\medmuskip\thickmuskip\thinmuskip\thickmuskip
+ \relax#8#5%
+ \mkern-#1\onemuskip
+ \cleaders\hbox{\normalstartimath#8\mkern-#2\onemuskip#6\mkern-#3\onemuskip\normalstopimath}\hfill
+ \mkern-#4\onemuskip#7%
+ \normalstopimath}
\def\defaultmtharrowfill{\mtharrowfill 7227}
@@ -383,10 +387,17 @@
%D for harpoons.
\def\math_arrows_over_handle_indeed#1#2#3#4%
- {\vbox{\ialign{##\crcr
- #2#3\crcr
- \noalign{\kern#1\nointerlineskip}%
- $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr}}}
+ {\vbox{\ialign{%
+ \alignmark\alignmark
+ \crcr
+ #2#3%
+ \crcr
+ \noalign{\kern#1\nointerlineskip}%
+ \normalstartimath
+ \mathsurround\zeropoint\hfil#3#4\hfil
+ \normalstopimath
+ \crcr
+ }}}
%D Now the under arrows
@@ -406,10 +417,15 @@
{\mathpalette{\math_arrows_under_handle_indeed{#1}{#2}}}
\def\math_arrows_under_handle_indeed#1#2#3#4%
- {\vtop{\ialign{##\crcr
- $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr
- \noalign{\nointerlineskip\kern#1}%
- #2#3\crcr}}}
+ {\vtop{\ialign{%
+ \alignmark\alignmark
+ \crcr
+ \normalstartimath\mathsurround\zeropoint\hfil#3#4\hfil\normalstopimath
+ \crcr
+ \noalign{\nointerlineskip\kern#1}%
+ #2#3%
+ \crcr
+ }}}
%D Now we define the arrows
diff --git a/Master/texmf-dist/tex/context/base/math-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-def.mkiv
index 8247ac00849..a8af5af5cec 100644
--- a/Master/texmf-dist/tex/context/base/math-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-def.mkiv
@@ -75,7 +75,7 @@
\unexpanded\def\setoperatorlimits#1#2% operator limits
{\savenormalmeaning{#1}%
- \expandafter\def\expandafter#1\expandafter{\csname normal\strippedcsname#1\endcsname#2}}
+ \expandafter\def\expandafter#1\expandafter{\csname normal\csstring#1\endcsname#2}}
\setoperatorlimits \int \intlimits
\setoperatorlimits \iint \intlimits
@@ -148,7 +148,7 @@
\definemathcommand [equalscoloncolon] [rel] {=\coloncolon\colonsep}
\definemathcommand [coloncolonapprox] [rel] {\coloncolon\colonsep\approx}
\definemathcommand [approxcoloncolon] [rel] {\approx\coloncolon\colonsep}
-\definemathcommand [colonsim] [rel] {\coloncolon\colonsep\sim}
+\definemathcommand [coloncolonsim] [rel] {\coloncolon\colonsep\sim}
\definemathcommand [simcoloncolon] [rel] {\sim\coloncolon\colonsep}
% \appendtoks
diff --git a/Master/texmf-dist/tex/context/base/math-del.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-del.mkiv
index 1245d31de3e..be78b581f4f 100644
--- a/Master/texmf-dist/tex/context/base/math-del.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-del.mkiv
@@ -41,7 +41,7 @@
\setbox\scratchbox\hbox\bgroup
\let\left \leftfakedelimiter
\let\right\rightfakedelimiter
- $#1\expandafter$\expandafter
+ \normalstartimath#1\expandafter\normalstopimath\expandafter
\egroup
\expandafter\c_math_delimiter_nesting\the\c_math_delimiter_nesting\relax}
@@ -67,4 +67,55 @@
\def\mathopnolimits#1{\mathop{\mathrm#1}\nolimits} % was \rm, which follows text fonts (used in mml parser, check!)
\def\mathopdolimits#1{\mathop{\mathrm#1}} % was \rm, which follows text fonts (used in mml parser, check!)
+% A new experiment:
+
+\installcorenamespace {mathextensible}
+
+\installcommandhandler \??mathextensible {mathextensible} \??mathextensible
+
+\let\setupmathextensibles\setupmathextensible
+
+\setupmathextensibles
+ [\c!symbol=0,
+ \c!command=\v!yes,
+ \c!factor=1.5,
+ \c!height=\exheight,
+ \c!depth=\exheight]
+
+\appendtoks
+ \edef\p_command{\mathextensibleparameter\c!command}%
+ \ifx\p_command\v!yes
+ \setuevalue\currentmathextensible{\math_fenced_extensible[\currentmathextensible]}%
+ \fi
+\to \everydefinemathextensible
+
+\unexpanded\def\math_fenced_extensible
+ {\dodoubleempty\math_fenced_extensible_indeed}
+
+\unexpanded\def\math_fenced_extensible_indeed[#1][#2]%
+ {\mathop{%
+ \edef\currentmathextensible{#1}%
+ \edef\p_factor{\mathextensibleparameter\c!factor}%
+ \ifsecondargument
+ \doifassignmentelse{#2}
+ {\setupcurrentmathextensible[#2]}%
+ {\edef\p_factor{#2}}%
+ \fi
+ \Uvextensible
+ axis % can be an option
+ height \p_factor\dimexpr\mathextensibleparameter\c!height\relax
+ depth \p_factor\dimexpr\mathextensibleparameter\c!depth\relax
+ \Udelimiter\zerocount\zerocount\mathextensibleparameter\c!symbol
+ \relax}%
+ }
+
+\let\mathextensible\math_fenced_extensible
+
+% \startformula
+% \integral[factor=3] \frac{1}{2}
+% \integral[5] \frac{1}{2}
+% \stopformula
+
+\definemathextensible[integral][\c!symbol="222B]
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-dim.lua b/Master/texmf-dist/tex/context/base/mkiv/math-dim.lua
index f4fc7905e3e..b5241cb5a66 100644
--- a/Master/texmf-dist/tex/context/base/math-dim.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-dim.lua
@@ -39,6 +39,12 @@ local defaults = {
fraction_num_vgap = { default = { "FractionNumeratorGapMin", "default_rule_thickness" },
cramped_display_style = { "FractionNumeratorDisplayStyleGapMin", "3*default_rule_thickness" },
display_style = { "FractionNumeratorDisplayStyleGapMin", "3*default_rule_thickness" }, },
+ skewed_fraction_hgap = { default = { "SkewedFractionHorizontalGap", "math_quad/2" },
+ cramped_display_style = { "SkewedFractionHorizontalGap", "math_quad/2" },
+ display_style = { "SkewedFractionHorizontalGap", "math_quad/2" }, },
+ skewed_fraction_vgap = { default = { "SkewedFractionVerticalGap", "x_height" },
+ cramped_display_style = { "SkewedFractionVerticalGap", "x_height" },
+ display_style = { "SkewedFractionVerticalGap", "x_height" }, },
fraction_rule = { default = { "FractionRuleThickness", "default_rule_thickness" }, },
limit_above_bgap = { default = { "UpperLimitBaselineRiseMin", "big_op_spacing3" }, },
limit_above_vgap = { default = { "UpperLimitGapMin", "big_op_spacing1" }, },
diff --git a/Master/texmf-dist/tex/context/base/math-dir.lua b/Master/texmf-dist/tex/context/base/mkiv/math-dir.lua
index 0f871beede2..c9c2a38dddc 100644
--- a/Master/texmf-dist/tex/context/base/math-dir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-dir.lua
@@ -31,9 +31,12 @@ local getnext = nuts.getnext
local getchar = nuts.getchar
local getid = nuts.getid
local getlist = nuts.getlist
-local setfield = nuts.setfield
local getattr = nuts.getattr
+local setfield = nuts.setfield
+local setchar = nuts.setchar
+local setlist = nuts.setlist
+
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
@@ -94,7 +97,7 @@ local function processmath(head)
if mirror then
local class = charclasses[char]
if class == "open" or class == "close" then
- setfield(current,"char",mirror)
+ setchar(current,mirror)
if trace_directions then
report_directions("mirrored: %C to %C",char,mirror)
end
@@ -107,7 +110,7 @@ local function processmath(head)
-- nothing
if id == hlist_code or id == vlist_code then
local list, d = processmath(getlist(current))
- setfield(current,"list",list)
+ setlist(current,list)
if d then
done = true
end
@@ -120,7 +123,7 @@ end
-- too often: needs checking
if id == hlist_code or id == vlist_code then
local list, d = processmath(getlist(current))
- setfield(current,"list",list)
+ setlist(current,list)
if d then
done = true
end
diff --git a/Master/texmf-dist/tex/context/base/math-dis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-dis.mkiv
index 5b70970f3cc..5b70970f3cc 100644
--- a/Master/texmf-dist/tex/context/base/math-dis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-dis.mkiv
diff --git a/Master/texmf-dist/tex/context/base/math-ext.lua b/Master/texmf-dist/tex/context/base/mkiv/math-ext.lua
index b00d6cde273..b00d6cde273 100644
--- a/Master/texmf-dist/tex/context/base/math-ext.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ext.lua
diff --git a/Master/texmf-dist/tex/context/base/math-fbk.lua b/Master/texmf-dist/tex/context/base/mkiv/math-fbk.lua
index 76dd1ad9b1a..564ece8d7ca 100644
--- a/Master/texmf-dist/tex/context/base/math-fbk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-fbk.lua
@@ -12,6 +12,7 @@ local report_fallbacks = logs.reporter("math","fallbacks")
local formatters = string.formatters
local fastcopy = table.fastcopy
+local byte = string.byte
local fallbacks = { }
mathematics.fallbacks = fallbacks
@@ -337,7 +338,7 @@ local function accent_to_extensible(target,newchr,original,oldchr,height,depth,s
local addprivate = fonts.helpers.addprivate
if swap then
swap = characters[swap]
- height = swap.depth
+ height = swap.depth or 0
depth = 0
else
height = height or 0
@@ -421,6 +422,53 @@ end
virtualcharacters[0xFE33E] = virtualcharacters[0x203E] -- convenient
virtualcharacters[0xFE33F] = virtualcharacters[0x203E] -- convenient
+-- spacing
+
+local c_zero = byte('0')
+local c_period = byte('.')
+
+local function spacefraction(data,fraction)
+ local width = fraction * data.target.parameters.space
+ return {
+ width = width,
+ commands = { right = width }
+ }
+end
+
+local function charfraction(data,char)
+ local width = data.target.characters[char].width
+ return {
+ width = width,
+ commands = { right = width }
+ }
+end
+
+local function quadfraction(data,fraction)
+ local width = fraction * data.target.parameters.quad
+ return {
+ width = width,
+ commands = { right = width }
+ }
+end
+
+virtualcharacters[0x00A0] = function(data) return spacefraction(data,1) end -- nbsp
+virtualcharacters[0x2000] = function(data) return quadfraction (data,1/2) end -- enquad
+virtualcharacters[0x2001] = function(data) return quadfraction (data,1) end -- emquad
+virtualcharacters[0x2002] = function(data) return quadfraction (data,1/2) end -- enspace
+virtualcharacters[0x2003] = function(data) return quadfraction (data,1) end -- emspace
+virtualcharacters[0x2004] = function(data) return quadfraction (data,1/3) end -- threeperemspace
+virtualcharacters[0x2005] = function(data) return quadfraction (data,1/4) end -- fourperemspace
+virtualcharacters[0x2006] = function(data) return quadfraction (data,1/6) end -- sixperemspace
+virtualcharacters[0x2007] = function(data) return charfraction (data,c_zero) end -- figurespace
+virtualcharacters[0x2008] = function(data) return charfraction (data,c_period) end -- punctuationspace
+virtualcharacters[0x2009] = function(data) return quadfraction (data,1/8) end -- breakablethinspace
+virtualcharacters[0x200A] = function(data) return quadfraction (data,1/8) end -- hairspace
+virtualcharacters[0x200B] = function(data) return quadfraction (data,0) end -- zerowidthspace
+virtualcharacters[0x202F] = function(data) return quadfraction (data,1/8) end -- narrownobreakspace
+virtualcharacters[0x205F] = function(data) return spacefraction(data,1/2) end -- math thinspace
+
+--
+
local function smashed(data,unicode,swap,private)
local target = data.target
local original = data.original
diff --git a/Master/texmf-dist/tex/context/base/math-fen.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv
index 9570eac83b7..81e39723d3c 100644
--- a/Master/texmf-dist/tex/context/base/math-fen.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv
@@ -108,7 +108,8 @@
#2%
\math_fenced_right
\stopusemathstyleparameter
- \endgroup}
+ \endgroup
+ \advance\c_math_fenced_nesting\minusone}
\appendtoks
\let\fenced\math_fenced_fenced
@@ -131,7 +132,7 @@
\definemathfence [angle] [\c!left="27E8,\c!right="27E9]
\definemathfence [doubleangle] [\c!left="27EA,\c!right="27EB]
\definemathfence [solidus] [\c!left="2044,\c!right="2044]
-\definemathfence [ceil] [\c!left="2308,\c!right="2309]
+\definemathfence [ceiling] [\c!left="2308,\c!right="2309]
\definemathfence [floor] [\c!left="230A,\c!right="230B]
\definemathfence [moustache] [\c!left="23B0,\c!right="23B1]
\definemathfence [uppercorner] [\c!left="231C,\c!right="231D]
@@ -152,7 +153,7 @@
\definemathfence [mirroredangle] [mirrored] [\c!right="27E8,\c!left="27E9]
\definemathfence [mirroreddoubleangle] [mirrored] [\c!right="27EA,\c!left="27EB]
\definemathfence [mirroredsolidus] [mirrored] [\c!right="2044,\c!left="2044]
-\definemathfence [mirroredceil] [mirrored] [\c!right="2308,\c!left="2309]
+\definemathfence [mirroredceiling] [mirrored] [\c!right="2308,\c!left="2309]
\definemathfence [mirroredfloor] [mirrored] [\c!right="230A,\c!left="230B]
\definemathfence [mirroredmoustache] [mirrored] [\c!right="23B0,\c!left="23B1]
\definemathfence [mirroreduppercorner] [mirrored] [\c!right="231C,\c!left="231D]
@@ -164,7 +165,7 @@
%D A bonus:
-\unexpanded\def\Lparent {\math_fenced_fenced_start{parenthesis}} \unexpanded\def\Rparent {\math_fenced_fenced_stop {parenthesis}}
+\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}}
\unexpanded\def\Langle {\math_fenced_fenced_start{angle}} \unexpanded\def\Rangle {\math_fenced_fenced_stop {angle}}
@@ -174,7 +175,7 @@
\unexpanded\def\Ltriplebar {\math_fenced_fenced_start{triplebar}} \unexpanded\def\Rtriplebar {\math_fenced_fenced_stop {triplebar}}
\unexpanded\def\Lsolidus {\math_fenced_fenced_start{solidus}} \unexpanded\def\Rsolidus {\math_fenced_fenced_stop {solidus}}
\unexpanded\def\Lfloor {\math_fenced_fenced_start{floor}} \unexpanded\def\Rfloor {\math_fenced_fenced_stop {floor}}
-\unexpanded\def\Lceil {\math_fenced_fenced_start{ceil}} \unexpanded\def\Rceil {\math_fenced_fenced_stop {ceil}}
+\unexpanded\def\Lceiling {\math_fenced_fenced_start{ceiling}} \unexpanded\def\Rceiling {\math_fenced_fenced_stop {ceiling}}
\unexpanded\def\Lmoustache {\math_fenced_fenced_start{moustache}} \unexpanded\def\Rmoustache {\math_fenced_fenced_stop {moustache}}
\unexpanded\def\Luppercorner {\math_fenced_fenced_start{uppercorner}} \unexpanded\def\Ruppercorner {\math_fenced_fenced_stop {uppercorner}}
\unexpanded\def\Llowercorner {\math_fenced_fenced_start{lowercorner}} \unexpanded\def\Rlowercorner {\math_fenced_fenced_stop {lowercorner}}
@@ -182,7 +183,7 @@
\unexpanded\def\Lopenbracket {\math_fenced_fenced_start{openbracket}} \unexpanded\def\Ropenbracket {\math_fenced_fenced_stop {openbracket}}
\unexpanded\def\Lnothing {\math_fenced_fenced_start{nothing}} \unexpanded\def\Rnothing {\math_fenced_fenced_stop {nothing}}
-\unexpanded\def\Lparentmirrored {\math_fenced_fenced_stop {mirroredparenthesis}} \unexpanded\def\Rparentmirrored {\math_fenced_fenced_start{mirroredparenthesis}}
+\unexpanded\def\Lparenthesismirrored {\math_fenced_fenced_stop {mirroredparenthesis}} \unexpanded\def\Rparenthesismirrored {\math_fenced_fenced_start{mirroredparenthesis}}
\unexpanded\def\Lbracketmirrored {\math_fenced_fenced_stop {mirroredbracket}} \unexpanded\def\Rbracketmirrored {\math_fenced_fenced_start{mirroredbracket}}
\unexpanded\def\Lbracemirrored {\math_fenced_fenced_stop {mirroredbrace}} \unexpanded\def\Rbracemirrored {\math_fenced_fenced_start{mirroredbrace}}
\unexpanded\def\Langlemirrored {\math_fenced_fenced_stop {mirroredangle}} \unexpanded\def\Ranglemirrored {\math_fenced_fenced_start{mirroredangle}}
@@ -192,7 +193,7 @@
\unexpanded\def\Ltriplebarmirrored {\math_fenced_fenced_stop {mirroredtriplebar}} \unexpanded\def\Rtriplebarmirrored {\math_fenced_fenced_start{mirroredtriplebar}}
\unexpanded\def\Lsolidusmirrored {\math_fenced_fenced_stop {mirroredsolidus}} \unexpanded\def\Rsolidusmirrored {\math_fenced_fenced_start{mirroredsolidus}}
\unexpanded\def\Lfloormirrored {\math_fenced_fenced_stop {mirroredfloor}} \unexpanded\def\Rfloormirrored {\math_fenced_fenced_start{mirroredfloor}}
-\unexpanded\def\Lceilmirrored {\math_fenced_fenced_stop {mirroredceil}} \unexpanded\def\Rceilmirrored {\math_fenced_fenced_start{mirroredceil}}
+\unexpanded\def\Lceilingmirrored {\math_fenced_fenced_stop {mirroredceiling}} \unexpanded\def\Rceilingmirrored {\math_fenced_fenced_start{mirroredceiling}}
\unexpanded\def\Lmoustachemirrored {\math_fenced_fenced_stop {mirroredmoustache}} \unexpanded\def\Rmoustachemirrored {\math_fenced_fenced_start{mirroredmoustache}}
\unexpanded\def\Luppercornermirrored {\math_fenced_fenced_stop {mirroreduppercorner}} \unexpanded\def\Ruppercornermirrored {\math_fenced_fenced_start{mirroreduppercorner}}
\unexpanded\def\Llowercornermirrored {\math_fenced_fenced_stop {mirroredlowercorner}} \unexpanded\def\Rlowercornermirrored {\math_fenced_fenced_start{mirroredlowercorner}}
@@ -216,48 +217,112 @@
\unexpanded\def\right {\afterassignment\math_right \let\nexttoken}
\unexpanded\def\middle{\afterassignment\math_middle\let\nexttoken}
+\let\leftorright\relax
+
\newconditional\c_math_fenced_done
\newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown
-% maybe use \detokenize ...
+% maybe use \detokenize ... todo \lastnamedcs
+
+% \setvalue{\??mathleft \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi}
+% \setvalue{\??mathright \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi}
+% \setvalue{\??mathmiddle\s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi}
+%
+% \def\math_left
+% {\settrue\c_math_fenced_done
+% \edef\m_math_left{\meaning\nexttoken}%
+% \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname}
+%
+% \def\math_right
+% {\settrue\c_math_fenced_done
+% \edef\m_math_right{\meaning\nexttoken}%
+% \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname}
+%
+% \def\math_middle
+% {\settrue\c_math_fenced_done
+% \edef\m_math_middle{\meaning\nexttoken}%
+% \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname}
+%
+% \unexpanded\def\lfence#1%
+% {\settrue\c_math_fenced_done
+% \let\nexttoken#1%
+% \edef\m_math_left{\meaning#1}%
+% \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname}
+%
+% \unexpanded\def\rfence#1%
+% {\settrue\c_math_fenced_done
+% \let\nexttoken#1%
+% \edef\m_math_right{\meaning#1}%
+% \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname}
+%
+% \unexpanded\def\mfence#1%
+% {\settrue\c_math_fenced_done
+% \let\nexttoken#1%
+% \edef\m_math_middle{\meaning#1}%
+% \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname}
+
+\unexpanded\def\installmathfencepair#1#2#3#4%
+ {\expandafter\let\csname\??mathleft \meaning#1\endcsname#2%
+ \expandafter\let\csname\??mathright\meaning#3\endcsname#4}
+
+\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi}
+\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi}
+\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi}
+
+\letvalue{\??mathleft \s!unknown}\math_unknown_left
+\letvalue{\??mathright \s!unknown}\math_unknown_right
+\letvalue{\??mathmiddle\s!unknown}\math_unknown_middle
\def\math_left
{\settrue\c_math_fenced_done
- \edef\m_math_left{\meaning\nexttoken}%
- \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname}
+ \ifcsname\??mathleft\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_left
+ \fi}
\def\math_right
{\settrue\c_math_fenced_done
- \edef\m_math_right{\meaning\nexttoken}%
- \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname}
+ \ifcsname\??mathright\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_right
+ \fi}
\def\math_middle
{\settrue\c_math_fenced_done
- \edef\m_math_middle{\meaning\nexttoken}%
- \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname}
+ \ifcsname\??mathmiddle\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_middle
+ \fi}
\unexpanded\def\lfence#1%
{\settrue\c_math_fenced_done
- \edef\m_math_left{\meaning#1}%
- \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname}
+ \let\nexttoken#1%
+ \ifcsname\??mathleft\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_left
+ \fi}
\unexpanded\def\rfence#1%
{\settrue\c_math_fenced_done
- \edef\m_math_right{\meaning#1}%
- \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname}
+ \let\nexttoken#1%
+ \ifcsname\??mathright\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_right
+ \fi}
\unexpanded\def\mfence#1%
{\settrue\c_math_fenced_done
- \edef\m_math_middle{\meaning#1}%
- \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname}
-
-\setvalue{\??mathleft \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi}
-\setvalue{\??mathright \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi}
-\setvalue{\??mathmiddle\s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi}
-
-\unexpanded\def\installmathfencepair#1#2#3#4%
- {\expandafter\let\csname\??mathleft \meaning#1\endcsname#2%
- \expandafter\let\csname\??mathright\meaning#3\endcsname#4}
+ \let\nexttoken#1%
+ \ifcsname\??mathmiddle\meaning\nexttoken\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\math_unknown_middle
+ \fi}
\normalexpanded{\installmathfencepair {|\detokenize {|}} \Ldoublebar {|\detokenize {|}} \Rdoublebar}
\normalexpanded{\installmathfencepair {|\detokenize{||}} \Ltriplebar {|\detokenize{||}} \Rtriplebar}
@@ -265,13 +330,15 @@
\installmathfencepair \bgroup \Lbrace \egroup \Rbrace
\installmathfencepair \egroup \Rbracemirrored \bgroup \Lbracemirrored
+\installmathfencepair \letteropenbrace \Lbrace \letterclosebrace \Rbrace % as we escape in mp textexts
+
\installmathfencepair . \Lnothing . \Rnothing
\installmathfencepair . \Rnothingmirrored . \Lnothingmirrored
\installmathfencepair [ \Lbracket ] \Rbracket
\installmathfencepair ] \Rbracketmirrored [ \Lbracketmirrored
-\installmathfencepair ( \Lparent ) \Rparent
+\installmathfencepair ( \Lparenthesis ) \Rparenthesis
\installmathfencepair ) \Rparentmirrored ( \Lparentmirrored
\installmathfencepair < \Langle > \Rangle
@@ -285,8 +352,8 @@
\installmathfencepair ⌊ \Lfloor ⌋ \Rfloor
\installmathfencepair ⌋ \Rfloormirrored ⌊ \Lfloormirrored
-\installmathfencepair ⌈ \Lceil ⌉ \Rceil
-\installmathfencepair ⌉ \Rceilmirrored ⌈ \Lceilmirrored
+\installmathfencepair ⌈ \Lceiling ⌉ \Rceiling
+\installmathfencepair ⌉ \Rceilingmirrored ⌈ \Lceilingmirrored
\installmathfencepair ⟨ \Langle ⟩ \Rangle
\installmathfencepair ⟩ \Ranglemirrored ⟨ \Langlemirrored
@@ -307,46 +374,72 @@
\ignorediscretionaries % so $\mtext{a|b}$ works, this is ok because it's an \hbox
\to \everymathematics
-% todo paren parent
-
-\let\lbrack\lbracket
-\let\rbrack\rbracket
-
-\installmathfencepair \lbrace \Lbrace \rbrace \Rbrace
-\installmathfencepair \lbracket \Lbracket \rbracket \Rbracket
-\installmathfencepair \lparen \Lparen \rparen \Rparen
-\installmathfencepair \lparent \Lparent \rparent \Rparent
-\installmathfencepair \langle \Langle \rangle \Rangle
-\installmathfencepair \lrangle \Ldoubleangle \rrangle \Rdoubleangle
-\installmathfencepair \lbar \Lbar \rbar \Rbar
-\installmathfencepair \lVert \Ldoublebar \rVert \Rdoublebar
-\installmathfencepair \vert \Lbar \vert \Rbar
-\installmathfencepair \solidus \Lsolidus \solidus \Rsolidus
-\installmathfencepair \lfloor \Lfloor \rfloor \Rfloor
-\installmathfencepair \lceil \Lceil \rceil \Rceil
-
-\installmathfencepair \ulcorner \Luppercorner \ulcorner \Ruppercorner
-\installmathfencepair \llcorner \Llowercorner \llcorner \Rlowercorner
-\installmathfencepair \lmoustache \Lmoustache \lmoustache \Rmoustache
-\installmathfencepair \llbracket \Lopenbracket \llbracket \Ropenbracket
-\installmathfencepair \lgroup \Lgroup \lgroup \Rgroup
+% We unofficial support some synonyms as we need them for some fuzzy web related math.
+
+% The names in char-def.lua (historic mess):
+
+\let\lbrack \lbracket
+\let\rbrack \rbracket
+\let\lceiling \lceil
+\let\rceiling \rceil
+\let\lparenthesis\lparent
+\let\rparenthesis\rparent
+\let\lparen \lparent
+\let\rparen \rparent
+
+% Just defined:
+
+\let\Lceil \Lceiling
+\let\Rceil \Rceiling
+\let\Lparent\Lparenthesis
+\let\Rparent\Rparenthesis
+\let\Lparen \Lparenthesis
+\let\Rparen \Rparenthesis
+
+\installmathfencepair \lbrace \Lbrace \rbrace \Rbrace
+\installmathfencepair \lbracket \Lbracket \rbracket \Rbracket
+\installmathfencepair \lbrack \Lbracket \rbracket \Rbracket
+\installmathfencepair \lparenthesis \Lparenthesis \rparenthesis \Rparenthesis
+\installmathfencepair \lparent \Lparenthesis \rparent \Rparenthesis
+\installmathfencepair \lparen \Lparenthesis \rparen \Rparenthesis
+\installmathfencepair \langle \Langle \rangle \Rangle
+\installmathfencepair \llangle \Ldoubleangle \rrangle \Rdoubleangle
+%installmathfencepair \lbar \Lbar \rbar \Rbar
+\installmathfencepair \lVert \Ldoublebar \rVert \Rdoublebar
+\installmathfencepair \vert \Lbar \vert \Rbar
+\installmathfencepair \solidus \Lsolidus \solidus \Rsolidus
+\installmathfencepair \lfloor \Lfloor \rfloor \Rfloor
+\installmathfencepair \lceiling \Lceiling \rceiling \Rceiling
+\installmathfencepair \lceil \Lceiling \rceil \Rceiling
+
+\installmathfencepair \ulcorner \Luppercorner \urcorner \Ruppercorner
+\installmathfencepair \llcorner \Llowercorner \lrcorner \Rlowercorner
+\installmathfencepair \lmoustache \Lmoustache \rmoustache \Rmoustache
+\installmathfencepair \llbracket \Lopenbracket \rrbracket \Ropenbracket
+\installmathfencepair \lgroup \Lgroup \rgroup \Rgroup
+
+\let\textlbar\lbar \let\mathlbar\Lbar
+\let\textrbar\lbar \let\mathrbar\Rbar
+
+\unexpanded\def\lbar{\mathortext\mathlbar\textlbar}
+\unexpanded\def\rbar{\mathortext\mathrbar\textrbar}
% \setupmathfences[color=darkgreen]
-\unexpanded\def\{{\mathortext\lbrace \letterleftbrace } % or maybe a chardef
-\unexpanded\def\}{\mathortext\rbrace \letterrightbrace } % or maybe a chardef
-\unexpanded\def\[{\mathortext\lbracket\letterleftbracket } % or maybe a chardef
-\unexpanded\def\]{\mathortext\rbracket\letterrightbracket} % or maybe a chardef
-\unexpanded\def\({\mathortext\lparent \letterleftparent } % or maybe a chardef
-\unexpanded\def\){\mathortext\rparent \letterrightparent } % or maybe a chardef
-\unexpanded\def\|{\mathortext\vert \letterbar } % or maybe a chardef
-%unexpanded\def\/{\mathortext\solidus \letterslash } % or maybe a chardef
-
-\installmathfencepair \{ \Lbrace \} \Rbrace
-\installmathfencepair \[ \Lbracket \] \Rbracket
-\installmathfencepair \( \Lparent \) \Rparent
-\installmathfencepair \< \Langle \> \Rangle
-\installmathfencepair \| \Lbar \| \Rbar
+\unexpanded\def\{{\mathortext\lbrace \letterleftbrace } % or maybe a chardef
+\unexpanded\def\}{\mathortext\rbrace \letterrightbrace } % or maybe a chardef
+\unexpanded\def\[{\mathortext\lbracket \letterleftbracket } % or maybe a chardef
+\unexpanded\def\]{\mathortext\rbracket \letterrightbracket } % or maybe a chardef
+\unexpanded\def\({\mathortext\lparenthesis\letterleftparenthesis } % or maybe a chardef
+\unexpanded\def\){\mathortext\rparenthesis\letterrightparenthesis} % or maybe a chardef
+\unexpanded\def\|{\mathortext\vert \letterbar } % or maybe a chardef
+%unexpanded\def\/{\mathortext\solidus \letterslash } % or maybe a chardef
+
+\installmathfencepair \{ \Lbrace \} \Rbrace
+\installmathfencepair \[ \Lbracket \] \Rbracket
+\installmathfencepair \( \Lparenthesis \) \Rparenthesis
+\installmathfencepair \< \Langle \> \Rangle
+\installmathfencepair \| \Lbar \| \Rbar
%D As we have overloaded \type {\left} and \type {\right} we also need a more
%D clever version of the following:
@@ -385,7 +478,7 @@
\attribute\mathsizeattribute\numexpr\bigmathdelimitervariant*\plushundred+#1\relax
\math_fenced_step#2\relax
\else
- \math_fenced_step#2{\vbox to\getvalue{\??mathbig\number#1}\bodyfontsize{}}%
+ \math_fenced_step#2{\vpack to\csname\??mathbig\number#1\endcsname\bodyfontsize{}}%
\fi
\nulldelimiterspace\zeropoint\relax
\mathsurround\zeropoint
@@ -439,6 +532,17 @@
\definemathcommand [Biggm] [rel] [one] {\Bigg}
\definemathcommand [Biggr] [close] [one] {\Bigg}
+% \definemathfence [integral] [\c!left="222B]
+%
+% \unexpanded\def\Lintegral {\math_fenced_fenced_start{integral}}
+% \unexpanded\def\Rintegral {\math_fenced_fenced_stop {integral}}
+%
+% \installmathfencepair \lintegral \Lintegral \rintegral \Rintegral
+%
+% \left\lintegral
+% \vrule height 3cm depth 3cm
+% \right\rintegral
+
%definemathfence [fancybracket] [bracket] [command=yes,color=red]
% experimental accents:
@@ -448,74 +552,165 @@
%D This is needed for mathml (used in mrow, so it gets reset):
-\let\math_fences_saved_left \left
-\let\math_fences_saved_middle\middle
-\let\math_fences_saved_right \right
+% old code:
+
+% \let\math_fences_saved_left \left
+% \let\math_fences_saved_middle\middle
+% \let\math_fences_saved_right \right
+%
+% % \def\math_fences_traced#1{\ruledhbox{\ttx#1\low{\the\c_math_fenced_nesting}}}
+%
+% \unexpanded\def\math_fences_checked_left
+% {%\math_fences_traced L%
+% \math_fences_saved_left}
+%
+% \unexpanded\def\math_fences_checked_middle
+% {%\math_fences_traced M%
+% \ifcase\c_math_fenced_nesting
+% \expandafter\math_fences_saved_middle
+% \else
+% \expandafter\firstofoneargument
+% \fi}
+%
+% \unexpanded\def\math_fences_checked_right
+% {%\math_fences_traced R%
+% \ifcase\c_math_fenced_nesting
+% \expandafter\firstofoneargument
+% \else
+% \expandafter\math_fences_saved_right
+% \fi}
+%
+% \newconditional\c_math_checked_done % only bars
+%
+% \unexpanded\def\math_fences_checked_left_or_right
+% {%\math_fences_traced B%
+% \ifcase\c_math_fenced_nesting
+% \settrue\c_math_checked_done
+% \expandafter\math_fences_saved_left
+% \else\ifconditional\c_math_checked_done
+% \setfalse\c_math_checked_done
+% \doubleexpandafter\math_fences_saved_right
+% \else
+% \doubleexpandafter\math_fences_saved_middle
+% \fi\fi}
+%
+% \unexpanded\def\math_fences_checked_start
+% {\c_math_fenced_nesting\zerocount}
+%
+% \unexpanded\def\math_fences_checked_stop
+% {\ifcase\c_math_fenced_nesting\else
+% \right.\relax % error, todo: nil spacing
+% \expandafter\math_fences_checked_stop
+% \fi}
+%
+% \unexpanded\def\startcheckedfences
+% {\begingroup
+% \let\left \math_fences_checked_left
+% \let\middle\math_fences_checked_middle
+% \let\right \math_fences_checked_right
+% \math_fences_checked_start}
+%
+% \unexpanded\def\stopcheckedfences
+% {\math_fences_checked_stop
+% \endgroup}
+%
+% \let\leftorright\math_fences_checked_left_or_right % for bars
+
+\definesystemattribute[mathautofence][public]
+
+\let\math_fences_normal_left \left
+\let\math_fences_normal_right \right
+\let\math_fences_normal_middle\middle
+\let\math_fences_normal_both \leftorright
+
+\unexpanded\def\math_fences_auto_left #1{\attribute\mathautofenceattribute\plusone #1\attribute\mathautofenceattribute\attributeunsetvalue}
+\unexpanded\def\math_fences_auto_right #1{\attribute\mathautofenceattribute\plustwo #1\attribute\mathautofenceattribute\attributeunsetvalue}
+\unexpanded\def\math_fences_auto_middle#1{\attribute\mathautofenceattribute\plusthree#1\attribute\mathautofenceattribute\attributeunsetvalue}
+\unexpanded\def\math_fences_auto_both #1{\attribute\mathautofenceattribute\plusfour #1\attribute\mathautofenceattribute\attributeunsetvalue}
-% \def\math_fences_traced#1{\ruledhbox{\ttx#1\low{\the\c_math_fenced_nesting}}}
+\let\autofenceopen \math_fences_auto_left % for testing
+\let\autofenceclose \math_fences_auto_right % for testing
+\let\autofenceleft \math_fences_auto_left % for testing
+\let\autofenceright \math_fences_auto_right % for testing
+\let\autofencemiddle\math_fences_auto_middle % for testing
+\let\autofenceboth \math_fences_auto_both % for testing
-\unexpanded\def\math_fences_checked_left
- {%\math_fences_traced L%
- \math_fences_saved_left}
+% fences are used not that often (i.e. no performance issue) so we can use a state
+% instead of \let ... also some state variable can come in handy in the future
-\unexpanded\def\math_fences_checked_middle
- {%\math_fences_traced M%
- \ifcase\c_math_fenced_nesting
- \expandafter\math_fences_saved_middle
+\newconditional\c_math_fences_auto
+
+\unexpanded\def\enableautofences
+ {\clf_enableautofences
+ \glet\clf_enableautofences\relax % onlyonce anyway
+ \unexpanded\gdef\enableautofences{\settrue\c_math_fences_auto}%
+ \enableautofences}
+
+\unexpanded\def\disableautofences
+ {\setfalse\c_math_fences_auto}
+
+\unexpanded\def\math_fences_used_left
+ {\ifconditional\c_math_fences_auto
+ \expandafter\math_fences_auto_left
\else
- \expandafter\firstofoneargument
+ \expandafter\math_fences_normal_left
\fi}
-
-\unexpanded\def\math_fences_checked_right
- {%\math_fences_traced R%
- \ifcase\c_math_fenced_nesting
- \expandafter\firstofoneargument
+\unexpanded\def\math_fences_used_right
+ {\ifconditional\c_math_fences_auto
+ \expandafter\math_fences_auto_right
\else
- \expandafter\math_fences_saved_right
+ \expandafter\math_fences_normal_right
\fi}
-
-\newconditional\c_math_checked_done % only bars
-
-\unexpanded\def\math_fences_checked_left_or_right
- {%\math_fences_traced B%
- \ifcase\c_math_fenced_nesting
- \settrue\c_math_checked_done
- \expandafter\math_fences_saved_left
- \else\ifconditional\c_math_checked_done
- \setfalse\c_math_checked_done
- \doubleexpandafter\math_fences_saved_right
+\unexpanded\def\math_fences_used_middle
+ {\ifconditional\c_math_fences_auto
+ \expandafter\math_fences_auto_middle
+ \else
+ \expandafter\math_fences_normal_middle
+ \fi}
+\unexpanded\def\math_fences_used_both
+ {\ifconditional\c_math_fences_auto
+ \expandafter\math_fences_auto_both
\else
- \doubleexpandafter\math_fences_saved_middle
- \fi\fi}
+ \expandafter\math_fences_normal_both
+ \fi}
-\unexpanded\def\math_fences_checked_start
- {\c_math_fenced_nesting\zerocount}
+\let\left \math_fences_used_left
+\let\right \math_fences_used_right
+\let\middle \math_fences_used_middle
+\let\leftorright\math_fences_used_both
-\unexpanded\def\math_fences_checked_stop
- {\ifcase\c_math_fenced_nesting\else
- \right.\relax % error, todo: nil spacing
- \expandafter\math_fences_checked_stop
- \fi}
+% wrappers
\unexpanded\def\startcheckedfences
{\begingroup
- \let\left \math_fences_checked_left
- \let\middle\math_fences_checked_middle
- \let\right \math_fences_checked_right
- \math_fences_checked_start}
+ \enableautofences}
\unexpanded\def\stopcheckedfences
- {\math_fences_checked_stop
- \endgroup}
+ {\endgroup}
+
+\appendtoks
+ % maybe: safeguard against overloading
+ %
+ % \let\left \math_fences_used_left
+ % \let\right \math_fences_used_right
+ % \let\middle \math_fences_used_middle
+ % \let\leftorright\math_fences_used_both
+\to \everymathematics
+
+\appendtoks
+ \ifx\currentmathfence\empty
+ \doifelse{\mathfenceparameter\c!state}\v!auto\enableautofences\disableautofences
+ \fi
+\to \everysetupmathfence
-\let\leftorright\math_fences_checked_left_or_right % for bars
+% some day default: \setupmathfences[\c!state=\v!auto]
%D The next characters were used for constructing nicer extensibles but
%D nowadays we have real characters.
-\Umathchardef\braceld=0 \defaultmathfamily "FF07A
-\Umathchardef\bracerd=0 \defaultmathfamily "FF07B
-\Umathchardef\bracelu=0 \defaultmathfamily "FF07C
-\Umathchardef\braceru=0 \defaultmathfamily "FF07D
+\Umathchardef\braceld\zerocount \defaultmathfamily "FF07A
+\Umathchardef\bracerd\zerocount \defaultmathfamily "FF07B
+\Umathchardef\bracelu\zerocount \defaultmathfamily "FF07C
+\Umathchardef\braceru\zerocount \defaultmathfamily "FF07D
\protect
diff --git a/Master/texmf-dist/tex/context/base/math-for.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-for.mkiv
index 0c8bd05aeac..0c8bd05aeac 100644
--- a/Master/texmf-dist/tex/context/base/math-for.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-for.mkiv
diff --git a/Master/texmf-dist/tex/context/base/math-frc.lua b/Master/texmf-dist/tex/context/base/mkiv/math-frc.lua
index 639edc94ba3..639edc94ba3 100644
--- a/Master/texmf-dist/tex/context/base/math-frc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-frc.lua
diff --git a/Master/texmf-dist/tex/context/base/math-frc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-frc.mkiv
index cbe342b6608..16ea6e9e131 100644
--- a/Master/texmf-dist/tex/context/base/math-frc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-frc.mkiv
@@ -169,6 +169,10 @@
\installcorenamespace{mathfractionstrut}
+\def\math_frac_no_strut
+ {\let\m_fractions_strut_top\relax
+ \let\m_fractions_strut_bot\relax}
+
\setvalue{\??mathfractionstrut\v!yes}%
{\let\m_fractions_strut_top\mathstrut
\let\m_fractions_strut_bot\mathstrut}
@@ -177,16 +181,13 @@
{\let\m_fractions_strut_top\mathstrut
\let\m_fractions_strut_bot\mathstrut}
-\setvalue{\??mathfractionstrut\v!no}%
- {\let\m_fractions_strut_top\relax
- \let\m_fractions_strut_bot\relax}
+\letvalue{\??mathfractionstrut\v!no}\math_frac_no_strut
\setvalue{\??mathfractionstrut\v!tight}%
{\let\m_fractions_strut_top\mathbotstrut % indeed swapped name
\let\m_fractions_strut_bot\mathtopstrut} % indeed swapped name
-\let\m_fractions_strut_top\relax
-\let\m_fractions_strut_bot\relax
+\math_frac_no_strut
\newdimen\d_math_fraction_margin
@@ -199,10 +200,11 @@
\edef\p_math_fractions_color{\mathfractionparameter\c!color}%
%
\edef\p_math_fractions_strut{\mathfractionparameter\c!strut}%
- \csname
- \??mathfractionstrut
- \ifcsname\??mathfractionstrut\p_math_fractions_strut\endcsname\p_math_fractions_strut\else\v!no\fi
- \endcsname
+ \ifcsname\??mathfractionstrut\p_math_fractions_strut\endcsname
+ \lastnamedcs
+ \else
+ \math_frac_no_strut
+ \fi
%
\ifx\p_math_fractions_color\empty
\expandafter\math_frac_normal
@@ -326,14 +328,13 @@
}%
}\endgroup}
-\unexpanded\def\xfrac {\begingroup\let\xfrac\xxfrac\math_frac_alternative\scriptstyle}
-\unexpanded\def\xxfrac{\begingroup \math_frac_alternative\scriptscriptstyle}
-%D The \type {xx} variant looks still ugly, so maybe it's best to say:
+\definemathfraction[xfrac] [\c!alternative=\v!inner,\c!mathstyle=\s!script]
+\definemathfraction[xxfrac][\c!alternative=\v!inner,\c!mathstyle=\s!scriptscript]
-\unexpanded\def\xxfrac#1#2%
- {\begingroup
- \math_frac_alternative\scriptscriptstyle{#1}{\raise.25\exheight\hbox{$\scriptscriptstyle#2$}}}
+\let\normalxfrac\xfrac
+
+\unexpanded\def\xfrac#1#2{\normalxfrac{\let\xfrac\xxfrac#1}{\let\xfrac\xxfrac#2}}
%D Spacing:
@@ -364,7 +365,7 @@
\edef\p_distance{\rootmathfractionparameter\c!distance}%
\ifx\p_distance\empty\else
\ifcsname\??mathfractiondistance\p_distance\endcsname
- \csname\??mathfractiondistance\p_distance\endcsname
+ \lastnamedcs
\fi
\fi
\to \everymathematics
@@ -392,9 +393,6 @@
% $$ {{a}\abovewithdelims()#1pt{b}} $$
% }
-% \unexpanded\def\dfrac #1#2{{\displaystyle {{#1}\normalover {#2}}}}
-% \unexpanded\def\tfrac #1#2{{\textstyle {{#1}\normalover {#2}}}}
-
\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]
@@ -426,6 +424,25 @@
\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]
@@ -562,3 +579,40 @@
% \unexpanded\def\mthfrac#1#2#3{[mthfrac: #1 #2 #3]}
% \unexpanded\def\mthsqrt#1#2#3{[mthsqrt: #1 #2 #3]}
+
+% used for prototypine \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/Master/texmf-dist/tex/context/base/math-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/math-ini.lua
index e6a35c39ee7..e6a35c39ee7 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-ini.mkiv
index 9627b153fb2..8627436b7bb 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ini.mkiv
@@ -13,6 +13,12 @@
\writestatus{loading}{ConTeXt Math Macros / Initializations}
+% todo: hpack as we skip math anyway
+%
+% todo: 0x2061 : function application
+% todo: 0x2062 : invisible times
+% todo: 0x2063 : invisible comma
+
% Todo in luatex maincontrol.w: also accept a number here:
%
% case set_math_param_cmd:
@@ -72,6 +78,12 @@
\def\Umathbotaccent{\Umathaccent \s!bottom }
\def\Umathaccents {\Umathaccent \s!both }
+\ifdefined\Umathcharclass \else
+ \def\Umathcharclass{\cldcontext{tex.getmathcode(token.scan_int())[1]}}
+ \def\Umathcharfam {\cldcontext{tex.getmathcode(token.scan_int())[2]}}
+ \def\Umathcharslot {\cldcontext{tex.getmathcode(token.scan_int())[3]}}
+\fi
+
%D The attributes that we will use:
\definesystemattribute[mathalphabet] [public]
@@ -84,6 +96,7 @@
\definesystemattribute[mathmode] [public]
\definesystemattribute[mathitalics] [public]
\definesystemattribute[mathbidi] [public]
+\definesystemattribute[mathdomain] [public]
\definesystemattribute[displaymath] [public]
@@ -245,7 +258,8 @@
\normalstopimath
\fi}
-\let\m\mathematics
+\let\m \mathematics
+\let\math\mathematics
% e.g.: \definemathematics[i:mp][setups=i:tight,openup=yes]
@@ -260,7 +274,6 @@
\newcount \defaultrelpenalty \defaultrelpenalty 500
\newcount \defaultbinoppenalty \defaultbinoppenalty 700
-
\startsetups math:spacing:default
\thickmuskip \defaultthickmuskip
\medmuskip \defaultmedmuskip
@@ -328,9 +341,11 @@
\unexpanded\def\math_set_font_style_alternate#1%
{\ifcsname\??mathstylealternate\fontclass:#1\endcsname
- \expandafter\math_set_font_alternate\csname\??mathstylealternate\fontclass:#1\endcsname
+ %\expandafter\math_set_font_alternate\csname\??mathstylealternate\fontclass:#1\endcsname
+ \expandafter\math_set_font_alternate\lastnamedcs
\else\ifcsname\??mathstylealternate#1\endcsname
- \expandafter\math_set_font_alternate\csname\??mathstylealternate#1\endcsname
+ %\expandafter\math_set_font_alternate\csname\??mathstylealternate#1\endcsname
+ \expandafter\math_set_font_alternate\lastnamedcs
\fi\fi}
\unexpanded\def\setupmathrendering % the name might change
@@ -343,7 +358,24 @@
\getparameters[\??mathstylealternate][#1]%
\fi}
-\unexpanded\def\mathaltcal{\math_set_font_alternate{cal}\cal} % ss01 in xits
+% if there were many features we could have a feature pass over math nodes but it makes no
+% sense now so we have commands to deal with it
+
+\unexpanded\def\mathaltcal {\math_set_font_alternate{cal}\cal} % set via goody file
+%unexpanded\def\mathslashedzero {\math_set_font_alternate{zero}0} % set via goody file or automatic
+\unexpanded\def\mathdotless {\math_set_font_alternate{dotless}} % set via goody file or automatic
+\unexpanded\def\mathdotlessi {{\mathdotless i}}
+\unexpanded\def\mathdotlessj {{\mathdotless j}}
+
+%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}
+
+\appendtoks
+ %let\slashedzero\autoslashedzero
+ \let\dotlessi \autodotlessi
+ \let\dotlessj \autodotlessj
+\to \everymathematics
\let\setmathattribute \math_set_attribute
\let\setmathalphabet \math_set_alphabet
@@ -351,7 +383,7 @@
\let\setmathfontalternate \math_set_font_alternate
\let\setmathfontstylealternate\math_set_font_style_alternate
-\let\mathalternate \math_set_font_alternate % obsolete
+\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\mathdefault {\math_set_attribute\s!regular\s!it\math_set_font_style_alternate\s!it}
@@ -596,15 +628,20 @@
%D Todo:
\unexpanded\def\mf
- {\csname\fontalternative\endcsname}
+ {\begincsname\fontalternative\endcsname}
-\let\normalmathop\mathop
+% \let\normalmathop\mathop % already defined
+
+% no longer needed as we no longer switch fonts
+%
+% \unexpanded\def\mathop
+% {\normalmathop
+% \bgroup
+% % no: \let\rm\mf
+% \afterassignment\math_op\let\nexttoken=}
+%
+% \def\math_op{\ifx\nexttoken\bgroup\else\nexttoken\egroup\fi}
-\unexpanded\def\mathop
- {\normalmathop
- \bgroup
- % no: \let\rm\mf
- \let\nexttoken=}
% this one too: \letvalue{\??mathcodecommand op}\mathop ?
@@ -652,12 +689,14 @@
\let\math_tags_mo\firstofoneunexpanded
\let\math_tags_mi\firstofoneunexpanded
-\unexpanded\def\math_tags_mn#1{\begingroup\mathupright#1\endgroup}
-\unexpanded\def\math_tags_ms#1{\begingroup\mathupright#1\endgroup}
+\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}
% Once this is stable we can store the number at the tex end which is
% faster. Functions getnumbers >= 1000.
+% \setupmathematics[functionstyle=normal] % will give ligatures and kerning
+
\setupmathematics
[\c!textstyle=, % rm ss etc i.e. known alternatives, otherwise math
\c!textcolor=,
@@ -714,10 +753,10 @@
\let\math_tags_mfunctiontxt\gobbletwoarguments
\let\math_tags_mfunctionlab\gobbletwoarguments
-\unexpanded\def\math_tags_mo_indeed#1{\begingroup \attribute\mathcategoryattribute\plusone #1\endgroup}
-\unexpanded\def\math_tags_mi_indeed#1{\begingroup \attribute\mathcategoryattribute\plustwo #1\endgroup}
-\unexpanded\def\math_tags_mn_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusthree#1\endgroup}
-\unexpanded\def\math_tags_ms_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusfour #1\endgroup} % todo: mathoptext
+\unexpanded\def\math_tags_mo_indeed#1{\begingroup \attribute\mathcategoryattribute\plusone #1\endgroup}
+\unexpanded\def\math_tags_mi_indeed#1{\begingroup \attribute\mathcategoryattribute\plustwo #1\endgroup}
+\unexpanded\def\math_tags_mn_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusthree\math_set_o_both#1\endgroup}
+\unexpanded\def\math_tags_ms_indeed#1{\begingroup\mathupright\attribute\mathcategoryattribute\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext
\newconditional\c_apply_function
@@ -767,6 +806,8 @@
% \let\mfunction \math_function_style_mfunction
% \let\mfunctionlabeltext\math_function_style_mfunctionlabeltext}}
+\def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option
+
\unexpanded\def\mscaledtext#1%
{\mathchoice
{\hbox{\csname\currentmscaledstyle\endcsname\tf #1}}
@@ -777,21 +818,6 @@
\unexpanded\def\setmathfunctionstyle#1%
{\setupmathematics[\c!functionstyle=#1]} % for old times sake
-%D We can force the way functions are typeset by manipulating the text option:
-%D
-%D \starttyping
-%D \definetypeface[iwona][ss][sans][iwona][default][encoding=texnansi]
-%D \definetypeface[iwona][mm][math][iwona][default][encoding=texnansi,text=ss]
-%D \stoptyping
-%D
-%D This hooks into the math handler with:
-
-% no longer supported this way, has to be done with \setupmathematics
-%
-% \appendtoks
-% \setmathfunctionstyle\currentmathtextstyle
-% \to \everybodyfont
-
%D Usage:
%D
%D \starttyping
@@ -1136,19 +1162,26 @@
\newcount\c_math_bidi
-\setvalue{\??mathbidi\v!no }{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue}
-\setvalue{\??mathbidi\v!yes}{\clf_setmathdirection\plusone \relax\c_math_bidi\plusone}
+\def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone}
+\def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue}
+
+\letvalue{\??mathbidi\v!yes}\math_bidi_enable
+\letvalue{\??mathbidi\v!no }\math_bidi_disable
+
+% \appendtoks
+% \edef\p_bidi{\mathematicsparameter\c!bidi}%
+% \csname\??mathbidi\ifcsname\??mathbidi\p_bidi\endcsname\p_bidi\else\v!no\fi\endcsname
+% \to \everysetupmathematics
\appendtoks
- \edef\p_bidi{\mathematicsparameter\c!bidi}%
- \csname\??mathbidi\ifcsname\??mathbidi\p_bidi\endcsname\p_bidi\else\v!no\fi\endcsname
+ \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ?
+ \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi
\to \everysetupmathematics
\appendtoks
\attribute\mathbidiattribute\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi
\to \everyswitchmathematics
-
%D Delayed: greek.
%D
%D \starttyping
@@ -1171,14 +1204,28 @@
\setvalue{\??mathgreek\v!normal}{2}
\setvalue{\??mathgreek\v!italic}{3}
+% \appendtoks
+% \edef\p_sygreek{\mathematicsparameter\s!sygreek}%
+% \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}%
+% \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}%
+% \c_math_greek_attribute"% hex digits
+% \csname\??mathgreek\ifcsname\??mathgreek\p_sygreek\endcsname\p_sygreek\else\v!none\fi\endcsname
+% \csname\??mathgreek\ifcsname\??mathgreek\p_lcgreek\endcsname\p_lcgreek\else\v!none\fi\endcsname
+% \csname\??mathgreek\ifcsname\??mathgreek\p_ucgreek\endcsname\p_ucgreek\else\v!none\fi\endcsname
+% \relax
+% \ifcase\c_math_greek_attribute
+% \c_math_greek_attribute\attributeunsetvalue
+% \fi
+% \to \everyswitchmathematics
+
\appendtoks
- \edef\p_sygreek{\mathematicsparameter\s!sygreek}%
- \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}%
- \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}%
+ \edef\p_sygreek{\mathematicsparameter\s!sygreek}% still needed ?
+ \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}% still needed ?
+ \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}% still needed ?
\c_math_greek_attribute"% hex digits
- \csname\??mathgreek\ifcsname\??mathgreek\p_sygreek\endcsname\p_sygreek\else\v!none\fi\endcsname
- \csname\??mathgreek\ifcsname\??mathgreek\p_lcgreek\endcsname\p_lcgreek\else\v!none\fi\endcsname
- \csname\??mathgreek\ifcsname\??mathgreek\p_ucgreek\endcsname\p_ucgreek\else\v!none\fi\endcsname
+ \ifcsname\??mathgreek\p_sygreek\endcsname\lastnamedcs\else1\fi
+ \ifcsname\??mathgreek\p_lcgreek\endcsname\lastnamedcs\else1\fi
+ \ifcsname\??mathgreek\p_ucgreek\endcsname\lastnamedcs\else1\fi
\relax
\ifcase\c_math_greek_attribute
\c_math_greek_attribute\attributeunsetvalue
@@ -1205,29 +1252,39 @@
%D Math italics (experiment)
-% we need keys
+%D We need keys but what names to use and because we have hardcoded solution
+%D we can stick to numbers.
\installcorenamespace{mathitalics}
\setnewconstant\c_math_italics_attribute\attributeunsetvalue
-\letvalue{\??mathitalics 1}\plusone % fontitalics
-\letvalue{\??mathitalics 2}\plustwo % fontdata
-\letvalue{\??mathitalics 3}\plusthree % quad based
-\letvalue{\??mathitalics 4}\plusfour % combination of 1 and 3
-\letvalue{\??mathitalics\v!none}\attributeunsetvalue
+\letvalue{\??mathitalics 1}\plusone % fontitalics
+\letvalue{\??mathitalics 2}\plustwo % fontdata
+\letvalue{\??mathitalics 3}\plusthree % quad based
+\letvalue{\??mathitalics 4}\plusfour % combination of 1 and 3
+\letvalue{\??mathitalics\v!none }\attributeunsetvalue
+\letvalue{\??mathitalics\v!reset}\attributeunsetvalue
\def\math_italics_initialize
{\ifnum\c_math_italics_attribute=\attributeunsetvalue \else
- \clf_setmathitalics % one time
+ \clf_initializemathitalics % one time
\global\let\math_italics_initialize\relax
\fi}
+% \appendtoks
+% \edef\p_italics{\mathematicsparameter\s!italics}%
+% \c_math_italics_attribute\csname\??mathitalics
+% \ifcsname\??mathitalics\p_italics\endcsname\p_italics\else\v!none\fi
+% \endcsname\relax
+% % \math_italics_initialize
+% \to \everyswitchmathematics % only in mathematics
+
\appendtoks
\edef\p_italics{\mathematicsparameter\s!italics}%
- \c_math_italics_attribute\csname\??mathitalics
- \ifcsname\??mathitalics\p_italics\endcsname\p_italics\else\v!none\fi
- \endcsname\relax
+ \c_math_italics_attribute
+ \ifcsname\??mathitalics\p_italics\endcsname\lastnamedcs\else\attributeunsetvalue\fi
+ \relax
% \math_italics_initialize
\to \everyswitchmathematics % only in mathematics
@@ -1237,7 +1294,7 @@
\to \everymathematics
\setupmathematics
- [\s!italics=3] % for the moment only this one makes sense .. still experimental
+ [\s!italics=3] % 4 is probably better
% looks nicer but can generate bogus csnames
%
@@ -1274,7 +1331,7 @@
% \setupmathematics
% [\v!autopunctuation=\v!no]
%
-% \def\math_punctuation_next{\ifx\nexttoken\blankspace\char\zerocount\fi}
+% \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}
@@ -1316,17 +1373,44 @@
% to delegate to \LUA\ when we have more variants and need analysis (experimental
% trickery removed for a while).
-\def\math_punctuation_comma_next {\ifx\nexttoken\blankspace \mathpunct{\textcomma }\else\mathord{\textcomma }\fi}
-\def\math_punctuation_period_next{\ifx\nexttoken\blankspace \mathpunct{\textperiod}\else\mathord{\textperiod}\fi}
+% \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}}
+%
+% \unexpanded\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next}
+% \unexpanded\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
+%
+% The next one is more efficient as it produces more flat noad lists for numbers.
-\unexpanded\def\math_punctuation_nop_comma {\mathpunct{\textcomma}}
-\unexpanded\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next}
- \let\math_punctuation_yes_comma \math_punctuation_all_comma
+\setnewconstant\c_math_comma "002C
+\setnewconstant\c_math_period "002E
+\setnewconstant\c_math_special"8000
+
+\def\math_set_o_period{\Umathcode\c_math_period\mathordcode \zerocount\c_math_period}
+\def\math_set_p_period{\Umathcode\c_math_period\mathpunctcode\zerocount\c_math_period}
+\def\math_set_o_comma {\Umathcode\c_math_comma \mathordcode \zerocount\c_math_comma }
+\def\math_set_p_comma {\Umathcode\c_math_comma \mathpunctcode\zerocount\c_math_comma }
-\unexpanded\def\math_punctuation_nop_period{\mathord{\textperiod}}
+\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_all_comma {\futurelet\nexttoken\math_punctuation_comma_next}
\unexpanded\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
+\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}
+
\setnewconstant\c_math_comma "002C
\setnewconstant\c_math_period "002E
\setnewconstant\c_math_special"8000
@@ -1342,6 +1426,12 @@
{\let,\math_punctuation_nop_comma
\let.\math_punctuation_nop_period}
+ % more efficient list:
+ %
+ % \setgvalue{\??mathautopunctuation\v!no}%
+ % {\Umathcode\c_math_period\mathordcode \zerocount\c_math_period
+ % \Umathcode\c_math_comma \mathpunctcode\zerocount\c_math_comma }
+
\setgvalue{\??mathautopunctuation\v!yes}%
{\let,\math_punctuation_yes_comma
\let.\math_punctuation_yes_period}
@@ -1430,13 +1520,13 @@
\def\triggermathstyle#1% #1 is number
{\ifcase\numexpr#1\relax
- \displaystyle \or
- \crampeddisplaystyle \or
- \textstyle \or
- \crampedtextstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptscriptstyle \or
+ \displaystyle \or % 0
+ \crampeddisplaystyle \or % 1
+ \textstyle \or % 2
+ \crampedtextstyle \or % 3
+ \scriptstyle \or % 4
+ \crampedscriptstyle \or % 5
+ \scriptscriptstyle \or % 6
\crampedscriptscriptstyle \else
% error
\fi}
@@ -1890,48 +1980,46 @@
\expandafter\let\csname\??mathstyle#1\normalexpanded{\endcsname\math_style_add_to_cache_choice}}
% \def\math_style_set_indeed
-% {\ifcsname\??mathstyle\m_math_style_asked\endcsname
-% \csname\??mathstyle\m_math_style_asked\endcsname
-% \else
-% \math_style_set_indeed_cached
-% \fi}
+% {\csname\??mathstyle
+% \ifcsname\??mathstyle\m_math_style_asked\endcsname
+% \m_math_style_asked
+% \else
+% \??mathstyle
+% \fi
+% \endcsname}
%
-% \def\math_style_set_indeed_cached
-% {\ifcsname\??mathstylecache\m_math_style_asked\endcsname
-% % already in cache
-% \else
-% \math_style_add_to_cache
-% \fi
-% \csname\??mathstylecache\m_math_style_asked\endcsname}
+% \setvalue{\??mathstyle\??mathstyle}%
+% {\csname\??mathstylecache
+% \ifcsname\??mathstylecache\m_math_style_asked\endcsname
+% \m_math_style_asked
+% \else
+% \??mathstylecache
+% \fi
+% \endcsname}
%
-% \def\math_style_add_to_cache
+% \setvalue{\??mathstylecache\??mathstylecache}%
% {\c_math_styles_state_style \zerocount
% \c_math_styles_state_cramped\zerocount
% \c_math_styles_state_size \zerocount
% \rawprocesscommacommand[\m_math_style_asked]\math_style_collect
-% \global\expandafter\let\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}}
-%
-% ugly but more efficient (as called often)
+% \global\expandafter\let\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}%
+% \csname\??mathstylecache\m_math_style_asked\endcsname}
\def\math_style_set_indeed
- {\csname\??mathstyle
- \ifcsname\??mathstyle\m_math_style_asked\endcsname
- \m_math_style_asked
- \else
- \??mathstyle
- \fi
- \endcsname}
+ {\ifcsname\??mathstyle\m_math_style_asked\endcsname
+ \lastnamedcs
+ \else
+ \math_style_set_mathstyle_mathstyle
+ \fi}
-\setvalue{\??mathstyle\??mathstyle}%
- {\csname\??mathstylecache
- \ifcsname\??mathstylecache\m_math_style_asked\endcsname
- \m_math_style_asked
- \else
- \??mathstylecache
- \fi
- \endcsname}
+\def\math_style_set_mathstyle_mathstyle
+ {\ifcsname\??mathstylecache\m_math_style_asked\endcsname
+ \lastnamedcs
+ \else
+ \math_style_set_mathstyle_mathstylecache
+ \fi}
-\setvalue{\??mathstylecache\??mathstylecache}%
+\def\math_style_set_mathstyle_mathstylecache
{\c_math_styles_state_style \zerocount
\c_math_styles_state_cramped\zerocount
\c_math_styles_state_size \zerocount
@@ -1939,6 +2027,9 @@
\global\expandafter\let\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}%
\csname\??mathstylecache\m_math_style_asked\endcsname}
+\letvalue{\??mathstyle \??mathstyle }\math_style_set_mathstyle_mathstyle % still needed?
+\letvalue{\??mathstylecache\??mathstylecache}\math_style_set_mathstyle_mathstylecache % still needed?
+
%D \startbuffer
%D $x\begingroup\setupmathstyle[script]x\endgroup x$
%D $x{\setupmathstyle[script]x}x$
@@ -1975,40 +2066,44 @@
%D version is a variation on the one in the math module (see \type{m-math} and|/|or
%D \type {m-newmat}).
-\unexpanded\def\mathtext
- {\mathortext\math_text_choice\hbox}
+\let\m_math_text_choice_face\relax
-% \def\math_text_choice#1%
-% {\mathchoice
-% {\math_text_choice_indeed\displaystyle\textface {#1}}%
-% {\math_text_choice_indeed\textstyle \textface {#1}}%
-% {\math_text_choice_indeed\textstyle \scriptface {#1}}%
-% {\math_text_choice_indeed\textstyle \scriptscriptface{#1}}}
-%
-% \def\math_text_choice_indeed#1#2#3% no \everymath !
-% {\hbox{\everymath{#1}\switchtobodyfont[#2]#3}} % 15 sec
+% if needed we can get rid of the normalize (predo in font code)
-% \let\m_math_text_choice_style\relax
-%
-% \def\math_text_choice#1%
-% {\edef\m_math_text_choice_style{\normalmathstyle}%
-% \hbox\bgroup
-% % \everymath{\triggermathstyle\m_math_text_choice_style}%
-% \normalizebodyfontsize\m_math_text_choice_style{\mathstylefont\m_math_text_choice_style}%
-% \font_basics_switchtobodyfont\m_math_text_choice_style
-% #1%
-% \egroup}
+\def\math_text_choice_font#1%
+ {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
+ \hbox\bgroup
+ \font_basics_switchtobodyfont\m_math_text_choice_face
+ #1%
+ \let\next}
-\let\m_math_text_choice_face \relax
+\def\math_text_choice_word#1%
+ {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
+ \hbox\bgroup
+ \font_basics_switchtobodyfont\m_math_text_choice_face
+ #1%
+ \nospacing % \normalnospaces\plusone
+ \let\next}
-% \def\math_text_choice#1% if needed we can get rid of the normalize (predo in font code)
-% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
-% \hbox{\font_basics_switchtobodyfont\m_math_text_choice_face#1}}
+% \ruledhbox{$\mathtext{abc ffi}$}
+% \ruledhbox{$\mathword{abc ffi}$}
-\def\math_text_choice% if needed we can get rid of the normalize (predo in font code)
- {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- %\showmathstyle
- \hbox\bgroup\font_basics_switchtobodyfont\m_math_text_choice_face\let\next}
+\unexpanded\def\mathtext {\mathortext{\math_text_choice_font\relax}\hbox}
+\unexpanded\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}
+
+\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}
%D Safeguard against redefinitions:
@@ -2111,7 +2206,9 @@
% new:
\unexpanded\def\smallmathsymbol#1%
- {\mathematics{\mathbin{\normalexpanded{\raise.15\exheight\hbox{$\triggermathstyle{\the\numexpr\normalmathstyle+2\relax}#1$}}}}}
+ {\mathematics{\mathbin{\normalexpanded{\raise.15\exheight\hbox{\normalstartimath
+ \triggermathstyle{\the\numexpr\normalmathstyle+2\relax}#1%
+ \normalstopimath}}}}}
% this should be a primitive:
@@ -2257,6 +2354,56 @@
\unexpanded\def\mathplus {+}
\unexpanded\def\mathminus{\ifmmode –\else\iffontchar\font`−−\else –\fi\fi}
+%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
+ {\dimexpr
+ \ifdim\displaywidth=\zeropoint
+ \hsize
+ \else
+ \displaywidth
+ \fi
+ \relax}
+
+\def\maximizeddisplaywidth % larger than zero but within hsize
+ {\dimexpr
+ \ifdim\displaywidth=\zeropoint
+ \hsize
+ \else\ifdim\displaywidth>\hsize
+ \hsize
+ \else
+ \displaywidth
+ \fi\fi
+ \relax}
+
+%D Experiment: (todo: same switch as italic, using \type {\everyswitchmathematics}).
+
+\newcount\c_math_domain_attribute
+
+\def\math_domain_initialize
+ {\ifnum\c_math_domain_attribute=\attributeunsetvalue \else
+ \clf_initializemathdomain % one time
+ \global\let\math_domain_initialize\relax
+ \fi}
+
+\appendtoks
+ \edef\p_domain{\mathematicsparameter\c!domain}%
+ \ifx\p_domain\empty
+ \c_math_domain_attribute\attributeunsetvalue
+ \else
+ \c_math_domain_attribute\clf_getmathdomain\p_domain\relax
+ \math_domain_initialize
+ \fi
+\to \everyswitchmathematics % only in mathematics
+
+\appendtoks
+ \attribute\mathdomainattribute\c_math_domain_attribute
+\to \everymathematics
+
+\setupmathematics
+ [\s!italics=3] % for the moment only this one makes sense .. still experimental
+
\protect \endinput
% % not used (yet)
diff --git a/Master/texmf-dist/tex/context/base/math-inl.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-inl.mkiv
index 2c7284458a5..2c7284458a5 100644
--- a/Master/texmf-dist/tex/context/base/math-inl.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-inl.mkiv
diff --git a/Master/texmf-dist/tex/context/base/math-int.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-int.mkiv
index 6b65738ff2e..5876eb7bb25 100644
--- a/Master/texmf-dist/tex/context/base/math-int.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-int.mkiv
@@ -48,13 +48,11 @@
\or
\limits
\or
- % auto
- \ifcase\normalmathstyle\displaylimits\or\displaylimits\else\limits\fi
- % \ifnum\attribute\mathmodeattribute=\plusone % we need a proper flag
- % \displaylimits
- % \else
- % \limits
- % \fi
+ \ifnum\attribute\mathmodeattribute=\plusone
+ \limits
+ \else
+ \nolimits
+ \fi
\else
% none
\fi}
diff --git a/Master/texmf-dist/tex/context/base/math-map.lua b/Master/texmf-dist/tex/context/base/mkiv/math-map.lua
index add6afa4c1c..94dde41103c 100644
--- a/Master/texmf-dist/tex/context/base/math-map.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-map.lua
@@ -200,6 +200,15 @@ local regular_it = {
[0x00070]=0x1D45D, [0x00071]=0x1D45E, [0x00072]=0x1D45F, [0x00073]=0x1D460, [0x00074]=0x1D461,
[0x00075]=0x1D462, [0x00076]=0x1D463, [0x00077]=0x1D464, [0x00078]=0x1D465, [0x00079]=0x1D466,
[0x0007A]=0x1D467,
+ -- arabic
+ [0x00627] = 0x1EE00, [0x00628] = 0x1EE21, [0x0062A] = 0x1EE15, [0x0062B] = 0x1EE16,
+ [0x0062C] = 0x1EE22, [0x0062D] = 0x1EE07, [0x0062E] = 0x1EE17, [0x0062F] = 0x1EE03,
+ [0x00630] = 0x1EE18, [0x00631] = 0x1EE13, [0x00632] = 0x1EE06, [0x00633] = 0x1EE0E,
+ [0x00634] = 0x1EE14, [0x00635] = 0x1EE11, [0x00636] = 0x1EE19, [0x00637] = 0x1EE08,
+ [0x00638] = 0x1EE1A, [0x00639] = 0x1EE0F, [0x0063A] = 0x1EE1B, [0x00641] = 0x1EE10,
+ [0x00642] = 0x1EE12, [0x00643] = 0x1EE0A, [0x00644] = 0x1EE0B, [0x00645] = 0x1EE0C,
+ [0x00646] = 0x1EE0D, [0x00647] = 0x1EE24, [0x00648] = 0x1EE05, [0x0064A] = 0x1EE09,
+ [0x0066E] = 0x1EE1C, [0x0066F] = 0x1EE1F, [0x006A1] = 0x1EE1E, [0x006BA] = 0x1EE1D,
},
ucgreek = {
[0x0391]=0x1D6E2, [0x0392]=0x1D6E3, [0x0393]=0x1D6E4, [0x0394]=0x1D6E5, [0x0395]=0x1D6E6,
@@ -389,7 +398,24 @@ local blackboard_tf = {
[0x00055]=0x1D54C, [0x00056]=0x1D54D, [0x00057]=0x1D54E, [0x00058]=0x1D54F, [0x00059]=0x1D550,
[0x0005A]=0x02124,
},
- lcletters = tolower(0x1D552),
+ lcletters = {
+ -- tolower(0x1D552) :
+ [0x00061] = 0x1D552, [0x00062] = 0x1D553, [0x00063] = 0x1D554, [0x00064] = 0x1D555,
+ [0x00065] = 0x1D556, [0x00066] = 0x1D557, [0x00067] = 0x1D558, [0x00068] = 0x1D559,
+ [0x00069] = 0x1D55A, [0x0006A] = 0x1D55B, [0x0006B] = 0x1D55C, [0x0006C] = 0x1D55D,
+ [0x0006D] = 0x1D55E, [0x0006E] = 0x1D55F, [0x0006F] = 0x1D560, [0x00070] = 0x1D561,
+ [0x00071] = 0x1D562, [0x00072] = 0x1D563, [0x00073] = 0x1D564, [0x00074] = 0x1D565,
+ [0x00075] = 0x1D566, [0x00076] = 0x1D567, [0x00077] = 0x1D568, [0x00078] = 0x1D569,
+ [0x00079] = 0x1D56A, [0x0007A] = 0x1D56B,
+ -- arabic
+ [0x00628] = 0x1EEA1, [0x0062A] = 0x1EEB5, [0x0062B] = 0x1EEB6, [0x0062C] = 0x1EEA2,
+ [0x0062D] = 0x1EEA7, [0x0062E] = 0x1EEB7, [0x0062F] = 0x1EEA3, [0x00630] = 0x1EEB8,
+ [0x00631] = 0x1EEB3, [0x00632] = 0x1EEA6, [0x00633] = 0x1EEAE, [0x00634] = 0x1EEB4,
+ [0x00635] = 0x1EEB1, [0x00636] = 0x1EEB9, [0x00637] = 0x1EEA8, [0x00638] = 0x1EEBA,
+ [0x00639] = 0x1EEAF, [0x0063A] = 0x1EEBB, [0x00641] = 0x1EEB0, [0x00642] = 0x1EEB2,
+ [0x00644] = 0x1EEAB, [0x00645] = 0x1EEAC, [0x00646] = 0x1EEAD, [0x00648] = 0x1EEA5,
+ [0x0064A] = 0x1EEA9,
+ },
lcgreek = { -- gamma pi
[0x03B3]=0x0213C, [0x03C0]=0x0213D,
},
diff --git a/Master/texmf-dist/tex/context/base/math-mis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-mis.mkiv
index 6346da9a02d..6346da9a02d 100644
--- a/Master/texmf-dist/tex/context/base/math-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-mis.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua b/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua
new file mode 100644
index 00000000000..d3409e01b25
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua
@@ -0,0 +1,1763 @@
+if not modules then modules = { } end modules ['math-noa'] = {
+ 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"
+}
+
+-- 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 math_char so we can have simple dedicated loops
+
+-- nota bene: uunderdelimiter uoverdelimiter etc are radicals (we have 5 types)
+
+local utfchar, utfbyte = utf.char, utf.byte
+local formatters = string.formatters
+local sortedhash = table.sortedhash
+local insert, remove = table.insert, table.remove
+local div = math.div
+
+local fonts = fonts
+local nodes = nodes
+local node = node
+local mathematics = mathematics
+local context = context
+
+local otf = fonts.handlers.otf
+local otffeatures = fonts.constructors.newfeatures("otf")
+local registerotffeature = otffeatures.register
+
+local privateattribute = attributes.private
+local registertracker = trackers.register
+local registerdirective = directives.register
+local logreporter = logs.reporter
+
+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_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_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 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_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_domains = logreporter("mathematics","domains")
+local report_families = logreporter("mathematics","families")
+local report_fences = logreporter("mathematics","fences")
+
+local a_mathrendering = privateattribute("mathrendering")
+local a_exportstatus = privateattribute("exportstatus")
+
+local nuts = nodes.nuts
+local nodepool = nuts.pool
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+local nutstring = nuts.tostring
+
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setchar = nuts.setchar
+local setsubtype = nuts.setsubtype
+local setattr = nuts.setattr
+
+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 getattr = nuts.getattr
+
+local free_node = nuts.free
+local new_node = nuts.new -- todo: pool: math_noad math_sub
+local copy_node = nuts.copy
+local slide_nodes = nuts.slide
+local set_visual = nuts.setvisual
+
+local mlist_to_hlist = nodes.mlist_to_hlist
+
+local font_of_family = node.family_font
+
+local new_kern = nodepool.kern
+local new_rule = nodepool.rule
+
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local fontcharacters = fonthashes.characters
+local fontproperties = fonthashes.properties
+local fontitalics = fonthashes.italics
+local fontemwidths = fonthashes.emwidths
+local fontexheights = fonthashes.exheights
+
+local variables = interfaces.variables
+local texsetattribute = tex.setattribute
+local texgetattribute = tex.getattribute
+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 nodecodes = nodes.nodecodes
+local noadcodes = nodes.noadcodes
+local fencecodes = nodes.fencecodes
+
+local noad_ord = noadcodes.ord
+local noad_rel = noadcodes.rel
+local noad_bin = noadcodes.bin
+local noad_open = noadcodes.open
+local noad_close = noadcodes.close
+local noad_punct = noadcodes.punct
+local noad_opdisplaylimits = noadcodes.opdisplaylimits
+local noad_oplimits = noadcodes.oplimits
+local noad_opnolimits = noadcodes.opnolimits
+local noad_inner = noadcodes.inner
+
+local math_noad = nodecodes.noad -- attr nucleus sub sup
+local math_accent = nodecodes.accent -- attr nucleus sub sup accent
+local math_radical = nodecodes.radical -- attr nucleus sub sup left degree
+local math_fraction = nodecodes.fraction -- attr nucleus sub sup left right
+local math_box = nodecodes.subbox -- attr list
+local math_sub = nodecodes.submlist -- attr list
+local math_char = nodecodes.mathchar -- attr fam char
+local math_textchar = nodecodes.mathtextchar -- attr fam char
+local math_delim = nodecodes.delim -- attr small_fam small_char large_fam large_char
+local math_style = nodecodes.style -- attr style
+local math_choice = nodecodes.choice -- attr display text script scriptscript
+local math_fence = nodecodes.fence -- attr subtype
+
+local left_fence_code = fencecodes.left
+local middle_fence_code = fencecodes.middle
+local right_fence_code = fencecodes.right
+
+-- 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 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 == math_noad then
+ report_processing("%w%S, class %a",n*2,nutstring(start),noadcodes[getsubtype(start)])
+ elseif id == math_char then
+ local char = getchar(start)
+ local font = getfont(start)
+ local fam = getfield(start,"fam")
+ 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 == math_noad then
+ -- single characters are like this
+ local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sub") if noad then process(noad,what,n,start) end -- list
+ elseif id == math_char or id == math_textchar or id == math_delim then
+ break
+ elseif id == math_box or id == math_sub then
+ local noad = getfield(start,"list") if noad then process(noad,what,n,start) end -- list (not getlist !)
+ elseif id == math_fraction 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 == math_fence then
+ local noad = getfield(start,"delim") if noad then process(noad,what,n,start) end -- delimiter
+ elseif id == math_radical then
+ local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sub") 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,"degree") if noad then process(noad,what,n,start) end -- list
+ elseif id == math_accent then
+ local noad = getfield(start,"nucleus") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sup") if noad then process(noad,what,n,start) end -- list
+ noad = getfield(start,"sub") if noad then process(noad,what,n,start) end -- list
+ 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 == math_style then
+ -- -- has a next
+ -- else
+ -- -- glue, penalty, etc
+ end
+ start = getnext(start)
+ end
+ if not parent then
+ return initial, true -- only first level -- for now
+ end
+end
+
+local function processnested(current,what,n)
+ local noad = nil
+ local id = getid(current)
+ if id == math_noad then
+ noad = getfield(current,"nucleus") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sub") if noad then process(noad,what,n,current) end -- list
+ elseif id == math_box or id == math_sub then
+ noad = getfield(current,"list") if noad then process(noad,what,n,current) end -- list (not getlist !)
+ elseif id == math_fraction 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 == math_fence then
+ noad = getfield(current,"delim") if noad then process(noad,what,n,current) end -- delimiter
+ elseif id == math_radical then
+ noad = getfield(current,"nucleus") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sub") 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,"degree") if noad then process(noad,what,n,current) end -- list
+ elseif id == math_accent then
+ noad = getfield(current,"nucleus") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,what,n,current) end -- list
+ noad = getfield(current,"sub") if noad then process(noad,what,n,current) end -- list
+ 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 == math_noad then
+ noad = getfield(current,"nucleus") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sub") if noad then process(noad,n,current) end -- list
+ elseif id == math_box or id == math_sub then
+ noad = getfield(current,"list") if noad then process(noad,n,current) end -- list (not getlist !)
+ elseif id == math_fraction 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 == math_fence then
+ noad = getfield(current,"delim") if noad then process(noad,n,current) end -- delimiter
+ elseif id == math_radical then
+ noad = getfield(current,"nucleus") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sub") 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,"degree") if noad then process(noad,n,current) end -- list
+ elseif id == math_accent then
+ noad = getfield(current,"nucleus") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sup") if noad then process(noad,n,current) end -- list
+ noad = getfield(current,"sub") if noad then process(noad,n,current) end -- list
+ 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)
+ local h, d
+ if trace_processing then
+ report_processing("start %a",banner)
+ h, d = process(tonut(head),actions)
+ report_processing("stop %a",banner)
+ else
+ h, d = process(tonut(head),actions)
+ end
+ return h and tonode(h) or head, d == nil and true or d
+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 = table.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[math_char] = function(pointer)
+ if getfield(pointer,"fam") == 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
+ setfield(pointer,"fam",newa)
+ elseif not fontcharacters[font_of_family(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
+ setfield(pointer,"fam",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
+ setfield(pointer,"fam",newa)
+ end
+ else
+ local char = getchar(pointer)
+ if not fontcharacters[font_of_family(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
+ setfield(pointer,"fam",a)
+ end
+ end
+ end
+ end
+ end
+
+ families[math_delim] = 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[font_of_family(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[font_of_family(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
+
+ families[math_textchar] = families[math_char]
+
+ function handlers.families(head,style,penalties)
+ processnoads(head,families,"families")
+ return true
+ end
+
+end
+
+-- character remapping
+
+do
+
+ local a_mathalphabet = privateattribute("mathalphabet")
+ local a_mathgreek = privateattribute("mathgreek")
+
+ processors.relocate = { }
+
+ local function report_remap(tag,id,old,new,extra)
+ report_remapping("remapping %s in font %s from %C to %C%s",tag,id,old,new,extra)
+ end
+
+ local remapalphabets = mathematics.remapalphabets
+ local fallbackstyleattr = mathematics.fallbackstyleattr
+ local setnodecolor = nodes.tracers.colors.set
+
+ 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
+
+ processors.relocate[math_char] = function(pointer)
+ local g = getattr(pointer,a_mathgreek) or 0
+ local a = getattr(pointer,a_mathalphabet) or 0
+ local char = getchar(pointer)
+ local font = getfont(pointer)
+ local characters = fontcharacters[font]
+ if a > 0 or g > 0 then
+ if a > 0 then
+ setattr(pointer,a_mathgreek,0)
+ end
+ if g > 0 then
+ setattr(pointer,a_mathalphabet,0)
+ end
+ local newchar = remapalphabets(char,a,g)
+ if newchar then
+ if characters[newchar] then
+ if trace_remapping then
+ report_remap("char",font,char,newchar)
+ 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
+ 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
+
+ processors.relocate[math_textchar] = function(pointer)
+ if trace_analyzing then
+ setnodecolor(pointer,"font:init")
+ end
+ end
+
+ processors.relocate[math_delim] = function(pointer)
+ if trace_analyzing then
+ setnodecolor(pointer,"font:fina")
+ end
+ end
+
+ function handlers.relocate(head,style,penalties)
+ processnoads(head,processors.relocate,"relocate")
+ return true
+ end
+
+end
+
+-- rendering (beware, not exported)
+
+processors.render = { }
+
+local rendersets = mathematics.renderings.numbers or { } -- store
+
+processors.render[math_char] = 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,processors.render,"render")
+ return true
+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
+
+local a_mathsize = privateattribute("mathsize") -- this might move into other fence code
+local resize = { }
+processors.resize = resize
+
+resize[math_fence] = function(pointer)
+ local subtype = getsubtype(pointer)
+ if subtype == left_fence_code or subtype == right_fence_code then
+ local a = getattr(pointer,a_mathsize)
+ if a and a > 0 then
+ local method, size = div(a,100), a % 100
+ setattr(pointer,a_mathsize,0)
+ local delimiter = getfield(pointer,"delim")
+ local chr = getfield(delimiter,"small_char")
+ if chr > 0 then
+ local fam = getfield(delimiter,"small_fam")
+ local id = font_of_family(fam)
+ if id > 0 then
+ setfield(delimiter,"small_char",mathematics.big(fontdata[id],chr,size,method))
+ end
+ end
+ end
+ end
+end
+
+function handlers.resize(head,style,penalties)
+ processnoads(head,resize,"resize")
+ return true
+end
+
+local a_autofence = privateattribute("mathautofence")
+local autofences = { }
+processors.autofences = autofences
+local dummyfencechar = 0x2E
+
+local function makefence(what,char)
+ local d = new_node(math_delim)
+ local f = new_node(math_fence)
+ if char then
+ local sym = getfield(char,"nucleus")
+ local chr = getfield(sym,"char")
+ local fam = getfield(sym,"fam")
+ if chr == dummyfencechar then
+ chr = 0
+ end
+ setfield(d,"small_char",chr)
+ setfield(d,"small_fam", fam)
+ free_node(sym)
+ end
+ setsubtype(f,what)
+ setfield(f,"delim",d)
+ return f
+end
+
+local function makelist(noad,f_o,o_next,c_prev,f_c,middle)
+ local list = new_node(math_sub)
+ setfield(list,"head",f_o)
+ setsubtype(noad,noad_inner)
+ setfield(noad,"nucleus",list)
+ setlink(f_o,o_next)
+ setlink(c_prev,f_c)
+ if middle and next(middle) then
+ local prev = f_o
+ local current = o_next
+ while current ~= f_c do
+ local m = middle[current]
+ if m then
+ local next = getnext(current)
+ local fence = makefence(middle_fence_code,current)
+ setfield(current,"nucleus",nil)
+ free_node(current)
+ middle[current] = nil
+ -- replace_node
+ setlink(prev,fence)
+ setlink(fence,next)
+ prev = fence
+ current = next
+ else
+ prev = current
+ current = getnext(current)
+ end
+ end
+ end
+end
+
+local function convert_both(open,close,middle)
+ local o_prev, o_next = getboth(open)
+ local c_prev, c_next = getboth(close)
+ if o_next == close then
+ return close
+ else
+ local f_o = makefence(left_fence_code,open)
+ local f_c = makefence(right_fence_code,close)
+ makelist(open,f_o,o_next,c_prev,f_c,middle)
+ setfield(close,"nucleus",nil)
+ free_node(close)
+ if c_next then
+ setprev(c_next,open)
+ end
+ setnext(open,c_next)
+ return open
+ end
+end
+
+local function convert_open(open,last,middle)
+ local f_o = makefence(left_fence_code,open)
+ local f_c = makefence(right_fence_code)
+ local o_prev, o_next = getboth(open)
+ local l_prev, l_next = getboth(last)
+ makelist(open,f_o,o_next,last,f_c,middle)
+ if l_next then
+ setprev(l_next,open)
+ end
+ setnext(open,l_next)
+ return open
+end
+
+local function convert_close(close,first,middle)
+ local f_o = makefence(left_fence_code)
+ local f_c = makefence(right_fence_code,close)
+ local c_prev = getprev(close)
+ makelist(close,f_o,first,c_prev,f_c,middle)
+ return close
+end
+
+local stacks = table.setmetatableindex("table")
+
+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
+ local id = getid(current)
+ if id == math_noad then
+ local a = getattr(current,a_autofence)
+ if a and a > 0 then
+ local stack = stacks[n]
+ setattr(current,a_autofence,0)
+ if a == 1 or (a == 4 and (not stack or #stack == 0)) then
+ if trace_fences then
+ report_fences("%2i: pushing open on stack",n)
+ end
+ insert(stack,current)
+ elseif a == 2 or a == 4 then
+ local open = remove(stack)
+ if open then
+ if trace_fences then
+ report_fences("%2i: handling %s, stack depth %i",n,"both",#stack)
+ end
+ current = convert_both(open,current,middle)
+ elseif current == start then
+ -- skip
+ else
+ if trace_fences then
+ report_fences("%2i: handling %s, stack depth %i",n,"close",#stack)
+ end
+ current = convert_close(current,initial,middle)
+ if not parent then
+ initial = current
+ end
+ end
+ elseif a == 3 then
+ if trace_fences then
+ report_fences("%2i: registering middle",n)
+ end
+ if middle then
+ middle[current] = last
+ else
+ middle = { [current] = last }
+ end
+ end
+ done = true
+ else
+ processstep(current,processfences,n+1,id)
+ end
+ else
+ -- next at current level
+ processstep(current,processfences,n,id)
+ end
+ last = current
+ current = getnext(current)
+ end
+ if done then
+ local stack = stacks[n]
+ local s = #stack
+ if s > 0 then
+ if trace_fences then
+ report_fences("%2i: handling %s stack levels",n,s)
+ end
+ for i=1,s do
+ local open = remove(stack)
+ if trace_fences then
+ report_fences("%2i: handling %s, stack depth %i",n,"open",#stack)
+ end
+ last = convert_open(open,last,middle)
+ end
+ 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()
+ tasks.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(tonut(head),1)
+ -- inspect(nodes.totree(head))
+ end
+end
+
+-- normalize scripts
+
+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) == math_noad do
+ local nextnucleus = getfield(next,"nucleus")
+ if nextnucleus and getid(nextnucleus) == math_char and not getfield(next,"sub") and not getfield(next,"sup") 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
+ setfield(pointer,"sup",getfield(start_super,"nucleus"))
+ else
+ local list = new_node(math_sub) -- todo attr
+ setfield(list,"list",start_super)
+ setfield(pointer,"sup",list)
+ end
+ if mode == "super" then
+ setnext(pointer,getnext(stop_super))
+ end
+ setnext(stop_super)
+ end
+ if start_sub then
+ if start_sub == stop_sub then
+ setfield(pointer,"sub",getfield(start_sub,"nucleus"))
+ else
+ local list = new_node(math_sub) -- todo attr
+ setfield(list,"list",start_sub)
+ setfield(pointer,"sub",list)
+ end
+ if mode == "sub" then
+ setnext(pointer,getnext(stop_sub))
+ end
+ setnext(stop_sub)
+ end
+ -- we could return stop
+end
+
+unscript[math_char] = replace -- not noads as we need to recurse
+
+function handlers.unscript(head,style,penalties)
+ processnoads(head,unscript,"unscript")
+-- processnoads(head,checkers,"checkers")
+ return true
+end
+
+local function collected(list)
+ if list and next(list) then
+ local n, t = 0, { }
+ for k, v in sortedhash(list) do
+ n = n + v
+ t[#t+1] = 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)
+
+-- math alternates: (in xits lgf: $ABC$ $\cal ABC$ $\mathalternate{cal}\cal ABC$)
+-- math alternates: (in lucidanova lgf: $ABC \mathalternate{italic} ABC$)
+
+-- todo: set alternate for specific symbols
+-- todo: no need to do this when already loaded
+
+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 = table.copy(defaults)
+
+ local function setthem(alternates)
+ local resources = tfmdata.resources -- was tfmdata.shared
+ local lastattribute = 0
+ local attributes = { }
+ for k, v in sortedhash(alternates) do
+ lastattribute = lastattribute + 1
+ v.attribute = lastattribute
+ attributes[lastattribute] = v
+ end
+ resources.mathalternates = alternates -- to be checked if shared is ok here
+ resources.mathalternatesattributes = attributes -- to be checked if shared is ok here
+ 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
+
+function mathematics.setalternate(fam,tag)
+ local id = font_of_family(fam)
+ local tfmdata = fontdata[id]
+ local resources = tfmdata.resources -- was tfmdata.shared
+ if resources then
+ local mathalternates = resources.mathalternates
+ if mathalternates then
+ local m = mathalternates[tag]
+ texsetattribute(a_mathalternate,m and m.attribute or unsetvalue)
+ end
+ end
+end
+
+implement {
+ name = "setmathalternate",
+ actions = mathematics.setalternate,
+ arguments = { "integer", "string" }
+}
+
+alternate[math_char] = function(pointer)
+ local a = getattr(pointer,a_mathalternate)
+ if a and a > 0 then
+ setattr(pointer,a_mathalternate,0)
+ local tfmdata = fontdata[getfont(pointer)]
+ local resources = tfmdata.resources -- was tfmdata.shared
+ if resources then
+ local mathalternatesattributes = resources.mathalternatesattributes
+ if mathalternatesattributes then
+ local what = mathalternatesattributes[a]
+ local char = getchar(pointer)
+ local alt = otf.getalternate(tfmdata,char,what.feature,what.value)
+ if alt ~= char then
+ if trace_alternates then
+ 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)
+ end
+ end
+ end
+ end
+end
+
+function handlers.alternates(head,style,penalties)
+ processnoads(head,alternate,"alternate")
+ return true
+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
+
+local a_mathitalics = privateattribute("mathitalics")
+
+local italics = { }
+local default_factor = 1/20
+
+local setcolor = nodes.tracers.colors.set
+local resetcolor = nodes.tracers.colors.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_node(math_sub) -- todo: pool
+ local noad = new_node(math_noad) -- todo: pool
+ setfield(sub,"list",kern)
+ setnext(kern,noad)
+ setfield(noad,"nucleus",current)
+ return sub
+end
+
+registertracker("math.italics.visualize", function(v)
+ if v then
+ italic_kern = function(k)
+ local n = new_kern(k)
+ 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[math_char] = 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 between %C and end math",method,correction,char)
+ end
+ setattr(pointer,a_mathitalics,101)
+ setattr(parent,a_mathitalics,101)
+ end
+ end
+ end
+ end
+end
+
+function handlers.italics(head,style,penalties)
+ processnoads(head,italics,"italics")
+ return true
+end
+
+local enable
+
+enable = function()
+ tasks.enableaction("math", "noads.handlers.italics")
+ if trace_italics then
+ report_italics("enabling math italics")
+ end
+ 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
+}
+
+-- primes and such
+
+local collapse = { } processors.collapse = collapse
+
+local mathpairs = characters.mathpairs -- next will move to char-def
+
+mathpairs[0x2032] = { [0x2032] = 0x2033, [0x2033] = 0x2034, [0x2034] = 0x2057 } -- (prime,prime) (prime,doubleprime) (prime,tripleprime)
+mathpairs[0x2033] = { [0x2032] = 0x2034, [0x2033] = 0x2057 } -- (doubleprime,prime) (doubleprime,doubleprime)
+mathpairs[0x2034] = { [0x2032] = 0x2057 } -- (tripleprime,prime)
+
+mathpairs[0x2035] = { [0x2035] = 0x2036, [0x2036] = 0x2037 } -- (reversedprime,reversedprime) (reversedprime,doublereversedprime)
+mathpairs[0x2036] = { [0x2035] = 0x2037 } -- (doublereversedprime,reversedprime)
+
+mathpairs[0x222B] = { [0x222B] = 0x222C, [0x222C] = 0x222D }
+mathpairs[0x222C] = { [0x222B] = 0x222D }
+
+mathpairs[0x007C] = { [0x007C] = 0x2016, [0x2016] = 0x2980 } -- bar+bar=double bar+double=triple
+mathpairs[0x2016] = { [0x007C] = 0x2980 } -- double+bar=triple
+
+local movesub = {
+ -- primes
+ [0x2032] = 0xFE932,
+ [0x2033] = 0xFE933,
+ [0x2034] = 0xFE934,
+ [0x2057] = 0xFE957,
+ -- reverse primes
+ [0x2035] = 0xFE935,
+ [0x2036] = 0xFE936,
+ [0x2037] = 0xFE937,
+}
+
+local validpair = {
+ [noad_rel] = true,
+ [noad_ord] = true,
+ [noad_bin] = true, -- new
+ [noad_punct] = true, -- new
+ [noad_opdisplaylimits] = true,
+ [noad_oplimits] = true,
+ [noad_opnolimits] = true,
+}
+
+local function movesubscript(parent,current_nucleus,current_char)
+ local prev = getprev(parent)
+ if prev and getid(prev) == math_noad then
+ if not getfield(prev,"sup") and not getfield(prev,"sub") then
+ -- {f} {'}_n => f_n^'
+ setchar(current_nucleus,movesub[current_char or getchar(current_nucleus)])
+ local nucleus = getfield(parent,"nucleus")
+ local sub = getfield(parent,"sub")
+ local sup = getfield(parent,"sup")
+ setfield(prev,"sup",nucleus)
+ setfield(prev,"sub",sub)
+ local dummy = copy_node(nucleus)
+ setchar(dummy,0)
+ setfield(parent,"nucleus",dummy)
+ setfield(parent,"sub",nil)
+ if trace_collapsing then
+ report_collapsing("fixing subscript")
+ end
+ elseif not getfield(prev,"sup") then
+ -- {f} {'}_n => f_n^'
+ setchar(current_nucleus,movesub[current_char or getchar(current_nucleus)])
+ local nucleus = getfield(parent,"nucleus")
+ local sup = getfield(parent,"sup")
+ setfield(prev,"sup",nucleus)
+ local dummy = copy_node(nucleus)
+ setchar(dummy,0)
+ setfield(parent,"nucleus",dummy)
+ if trace_collapsing then
+ report_collapsing("fixing subscript")
+ end
+ end
+ end
+end
+
+local function collapsepair(pointer,what,n,parent,nested) -- todo: switch to turn in on and off
+ if parent then
+ if validpair[getsubtype(parent)] then
+ local current_nucleus = getfield(parent,"nucleus")
+ if getid(current_nucleus) == math_char then
+ local current_char = getchar(current_nucleus)
+ if not getfield(parent,"sub") and not getfield(parent,"sup") then
+ local mathpair = mathpairs[current_char]
+ if mathpair then
+ local next_noad = getnext(parent)
+ if next_noad and getid(next_noad) == math_noad then
+ if validpair[getsubtype(next_noad)] then
+ local next_nucleus = getfield(next_noad,"nucleus")
+ local next_char = getchar(next_nucleus)
+ if getid(next_nucleus) == math_char then
+ local newchar = mathpair[next_char]
+ if newchar then
+ local id = getfont(current_nucleus)
+ local characters = fontcharacters[id]
+ if characters and characters[newchar] then
+ if trace_collapsing then
+ report_collapsing("%U + %U => %U",current_char,next_char,newchar)
+ end
+ setchar(current_nucleus,newchar)
+ local next_next_noad = getnext(next_noad)
+ if next_next_noad then
+ setlink(parent,next_next_noad)
+ else
+ setnext(parent)
+ end
+ setfield(parent,"sup",getfield(next_noad,"sup"))
+ setfield(parent,"sub",getfield(next_noad,"sub"))
+ setfield(next_noad,"sup",nil)
+ setfield(next_noad,"sub",nil)
+ free_node(next_noad)
+ collapsepair(pointer,what,n,parent,true)
+ -- if not nested and movesub[current_char] then
+ -- movesubscript(parent,current_nucleus,current_char)
+ -- end
+ end
+ elseif not nested and movesub[current_char] then
+ movesubscript(parent,current_nucleus,current_char)
+ end
+ end
+ end
+ elseif not nested and movesub[current_char] then
+ movesubscript(parent,current_nucleus,current_char)
+ end
+ elseif not nested and movesub[current_char] then
+ movesubscript(parent,current_nucleus,current_char)
+ end
+ elseif not nested and movesub[current_char] then
+ movesubscript(parent,current_nucleus,current_char)
+ end
+ end
+ end
+ end
+end
+
+collapse[math_char] = collapsepair
+
+function noads.handlers.collapse(head,style,penalties)
+ processnoads(head,collapse,"collapse")
+ return true
+end
+
+-- variants
+
+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[math_char] = 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) == math_noad then
+ local nucleus = getfield(next,"nucleus")
+ if nucleus and getid(nucleus) == math_char 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))
+ free_node(next)
+ end
+ end
+ end
+end
+
+function handlers.variants(head,style,penalties)
+ processnoads(head,variants,"unicode variant")
+ return true
+end
+
+-- for manuals
+
+local classes = { }
+
+local colors = {
+ [noad_rel] = "trace:dr",
+ [noad_ord] = "trace:db",
+ [noad_bin] = "trace:dg",
+ [noad_open] = "trace:dm",
+ [noad_close] = "trace:dm",
+ [noad_punct] = "trace:dc",
+ -- [noad_opdisplaylimits] = "",
+ -- [noad_oplimits] = "",
+ -- [noad_opnolimits] = "",
+ -- [noad_inner = "",
+ -- [noad_under = "",
+ -- [noad_over = "",
+ -- [noad_vcenter = "",
+}
+
+classes[math_char] = 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
+end
+
+registertracker("math.classes",function(v) tasks.setaction("math","noads.handlers.classes",v) end)
+
+-- experimental
+
+do
+
+ -- mathematics.registerdomain {
+ -- name = "foo",
+ -- parents = { "bar" },
+ -- characters = {
+ -- [0x123] = { char = 0x234, class = binary },
+ -- },
+ -- }
+
+ local domains = { }
+ local categories = { }
+ local numbers = { }
+ local mclasses = mathematics.classes
+ local a_mathdomain = privateattribute("mathdomain")
+
+ mathematics.domains = categories
+
+ local permitted = {
+ ordinary = noad_ord,
+ binary = noad_bin,
+ relation = noad_rel,
+ punctuation = noad_punct,
+ inner = noad_inner,
+ }
+
+ 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()
+ tasks.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[math_char] = 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
+ end
+
+end
+
+
+-- just for me
+
+function handlers.showtree(head,style,penalties)
+ inspect(nodes.totree(head))
+end
+
+registertracker("math.showtree",function(v) tasks.setaction("math","noads.handlers.showtree",v) end)
+
+-- the normal builder
+
+function builders.kernel.mlist_to_hlist(head,style,penalties)
+ return mlist_to_hlist(head,style,penalties), true
+end
+
+-- function builders.kernel.mlist_to_hlist(head,style,penalties)
+-- print("!!!!!!! BEFORE",penalties)
+-- for n in node.traverse(head) do print(n) end
+-- print("!!!!!!!")
+-- head = mlist_to_hlist(head,style,penalties)
+-- print("!!!!!!! AFTER")
+-- for n in node.traverse(head) do print(n) end
+-- print("!!!!!!!")
+-- return head, true
+-- end
+
+tasks.new {
+ name = "math",
+ arguments = 2,
+ processor = utilities.sequencers.nodeprocessor,
+ sequence = {
+ "before",
+ "normalizers",
+ "builders",
+ "after",
+ },
+}
+
+tasks.freezegroup("math", "normalizers") -- experimental
+tasks.freezegroup("math", "builders") -- experimental
+
+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)
+ local head, done = actions(head,style,penalties)
+ stoptiming(noads)
+ return head, done
+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/Master/texmf-dist/tex/context/base/math-pln.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-pln.mkiv
index 5e4c43c81a2..a5ecdd11dda 100644
--- a/Master/texmf-dist/tex/context/base/math-pln.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-pln.mkiv
@@ -24,7 +24,7 @@
% might change
\unexpanded\def\hrulefill{\leaders\hrule\hfill}
-\unexpanded\def\dotfill {\cleaders\hbox{$\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu$}\hfill}
+\unexpanded\def\dotfill {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill}
% will move
@@ -33,7 +33,7 @@
\vtop
{\baselineskip\zeroskip
\lineskip.25\exheight
- \ialign{##\crcr#1\crcr}}}
+ \ialign{\alignmark\alignmark\crcr#1\crcr}}}
\def\ooalign % chars over each other
{\lineskiplimit-\maxdimen
@@ -71,17 +71,34 @@
\vcenter
{\normalbaselines
\mathsurround\zeropoint
- \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}%
+ \ialign{%
+ \normalstartimath\alignmark\alignmark\hfil\normalstopimath
+ \aligntab
+ \quad\alignmark\alignmark\hfil
+ \crcr
+ #1%
+ \crcr}}%
\right.}
\unexpanded\def\matrix#1%
{\emptyhbox
\mskip\thinmuskip
\vcenter
- {\normalbaselines\mathsurround\zeropoint
- \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
- \mathstrut\crcr\noalign{\kern-\baselineskip}
- #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}%
+ {\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}
\unexpanded\def\pmatrix#1%
@@ -117,7 +134,8 @@
{\the\mathdisplayaligntweaks
\tabskip\zeroskip
\halign
- {\hbox to \displaywidth{$\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle##\hfil$}\crcr
- #1\crcr}}
+ {\hbox to \displaywidth{%
+ \normalstartimath\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle\alignmark\alignmark\hfil\normalstopimath}\crcr
+ #1\crcr}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-rad.mkvi b/Master/texmf-dist/tex/context/base/mkiv/math-rad.mkvi
index 23e056c1fd2..113d4af500c 100644
--- a/Master/texmf-dist/tex/context/base/math-rad.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-rad.mkvi
@@ -182,7 +182,7 @@
%
\edef\p_mp{\mathradicalparameter\c!mp}%
%
- \setbox\scratchbox\hbox\bgroup % todo: tag this box as sqrt
+ \setbox\scratchbox\hpack\bgroup % todo: tag this box as sqrt
\uniqueMPgraphic
{\p_mp}%
%{...}%
@@ -190,7 +190,7 @@
\scratchdimen \wd\scratchbox
\scratchtopoffset \dimexpr\scratchoffset+\dp\nextbox\relax
\scratchbottomoffset\dimexpr\scratchoffset+\ht\nextbox/2\relax
- \hbox to \scratchdimen{\hss\box\nextbox\hskip\scratchoffset}%
+ \hpack to \scratchdimen{\hss\box\nextbox\hskip\scratchoffset}%
\hskip-\scratchdimen
\lower\dimexpr\scratchtopoffset\box\scratchbox%
\ifx\currentmathradicaldegree\empty \else
@@ -241,11 +241,11 @@
\edef\overlaylinecolor{\mathornamentparameter\c!color}%
\edef\p_mp{\mathornamentparameter\c!mp}%
% thw width of the graphic determines the width of the final result
- \setbox\scratchbox\hbox{\uniqueMPgraphic{\p_mp}}% todo: add code key + tag
+ \setbox\scratchbox\hpack{\uniqueMPgraphic{\p_mp}}% todo: add code key + tag
\scratchdimen \wd\scratchbox
% \scratchtopoffset \dimexpr\scratchoffset+\dp\nextbox\relax
% \scratchbottomoffset\dimexpr\scratchoffset+\ht\nextbox/2\relax
- \hbox to \scratchdimen{\hss\box\nextbox\hss}%
+ \hpack to \scratchdimen{\hss\box\nextbox\hss}%
\hskip-\scratchdimen
\box\scratchbox
\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/math-ren.lua b/Master/texmf-dist/tex/context/base/mkiv/math-ren.lua
index 4628ffe5587..4628ffe5587 100644
--- a/Master/texmf-dist/tex/context/base/math-ren.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ren.lua
diff --git a/Master/texmf-dist/tex/context/base/math-scr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-scr.mkiv
index 2decaa81fc5..2decaa81fc5 100644
--- a/Master/texmf-dist/tex/context/base/math-scr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-scr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/math-stc.mkvi b/Master/texmf-dist/tex/context/base/mkiv/math-stc.mkvi
index a879d157f27..96e1738db07 100644
--- a/Master/texmf-dist/tex/context/base/math-stc.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-stc.mkvi
@@ -642,13 +642,17 @@
\unexpanded\def\mathdouble{\begingroup\dodoubleempty\math_stackers_handle_double}
\def\math_stackers_handle_over[#category]%
- {\math_stackers_direct_double\plusone\zerocount{\iffirstargument#category\else\v!top \fi}} % will be defined later on
+ {\math_stackers_direct_double\plusone\zerocount
+ {\iffirstargument#category\else\v!top \fi}} % will be defined later on
\def\math_stackers_handle_under[#category]%
- {\math_stackers_direct_double\zerocount\plusone{\iffirstargument#category\else\v!bottom\fi}} % will be defined later on
+ {\math_stackers_direct_double\zerocount\plusone
+ {\iffirstargument#category\else\v!bottom\fi}} % will be defined later on
-\def\math_stackers_handle_double[#category]%
- {\math_stackers_direct_double\plusone\plusone {\iffirstargument#category\else\v!bottom\fi}} % will be defined later on
+\def\math_stackers_handle_double[#topcategory][#bottomcategory]%
+ {\math_stackers_direct_double\plusone\plusone
+ {\iffirstargument #topcategory\else\v!top \fi}%
+ {\ifsecondargument#bottomcategory\else\v!bottom\fi}}
\def\math_stackers_direct_double#top#bottom#category#codepoint#text%
{\math_stackers_make_double#top#bottom{#category}{#codepoint}{0}{#text}%
@@ -970,9 +974,6 @@
\let\normalunderrightarrow\underrightarrow
\let\normaloverrightarrow \overrightarrow
-\let\lceil \lceiling
-\let\rceil \rceiling
-
%D Here come the new ones:
\definemathstackers [\v!none] [\v!mathematics] [\c!hoffset=\zeropoint]
@@ -1236,9 +1237,9 @@
%D Extra:
-\unexpanded\edef\singlebond{\mathematics{\mathsurround\zeropoint\char\number"002D}}
-\unexpanded\edef\doublebond{\mathematics{\mathsurround\zeropoint\char\number"003D}}
-\unexpanded\edef\triplebond{\mathematics{\mathsurround\zeropoint\char\number"2261}}
+\unexpanded\edef\singlebond{\mathematics{\mathsurround\zeropoint\char\number"002D\relax}}
+\unexpanded\edef\doublebond{\mathematics{\mathsurround\zeropoint\char\number"003D\relax}}
+\unexpanded\edef\triplebond{\mathematics{\mathsurround\zeropoint\char\number"2261\relax}}
% \mathchardef\singlebond"002D
% \mathchardef\doublebond"003D
@@ -1261,13 +1262,13 @@
\edef\currentmathstackers{#category}%
\edef\p_moffset{\mathstackersparameter\c!moffset}%
\ifx\p_moffset\empty \else
- \mskip\scratchmuskip
+ \mskip\p_moffset\relax
\fi
\ifmmode\math_class_by_parameter\mathstackersparameter\else\dontleavehmode\fi
{\usemathstackerscolorparameter\c!color
\Umathchar\zerocount\defaultmathfamily#codepoint}%
\ifx\p_moffset\empty \else
- \mskip\scratchmuskip
+ \mskip\p_moffset\relax
\fi
\endgroup}
@@ -1284,8 +1285,8 @@
% \limits\normalsuperscript{\box0}\normalsubscript{\box2}}%
% $\Uoverdelimiter \defaultmathfamily "2194 {xxxx}$
-% $\Udelimiterover \defaultmathfamily "2194 {xxxx}$
% $\Uunderdelimiter\defaultmathfamily "2194 {xxxx}$
+% $\Udelimiterover \defaultmathfamily "2194 {xxxx}$
% $\Udelimiterunder\defaultmathfamily "2194 {xxxx}$
% $\Udelimiterover \defaultmathfamily "219A {\Udelimiterunder \defaultmathfamily "219B {xxxx}}$
diff --git a/Master/texmf-dist/tex/context/base/math-tag.lua b/Master/texmf-dist/tex/context/base/mkiv/math-tag.lua
index 0d900b3a1a3..e83b401fb2d 100644
--- a/Master/texmf-dist/tex/context/base/math-tag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-tag.lua
@@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['math-tag'] = {
}
-- todo: have a local list with local tags that then get appended
+-- todo: use tex.getmathcodes (no table)
-- use lpeg matchers
@@ -22,8 +23,10 @@ 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 setattr = nuts.setattr
@@ -88,7 +91,6 @@ local ordinary_code = mathcodes.ordinary
local variable_code = mathcodes.variable
local fromunicode16 = fonts.mappings.fromunicode16
-local font_of_family = node.family_font
local fontcharacters = fonts.hashes.characters
local report_tags = logs.reporter("structure","tags")
@@ -150,7 +152,8 @@ local fencesstack = { }
local function getunicode(n) -- instead of getchar
local char = getchar(n)
- local font = font_of_family(getfield(n,"fam")) -- font_of_family
+ -- local font = font_of_family(getfield(n,"fam")) -- font_of_family
+ local font = getfont(n)
local data = fontcharacters[font][char]
return data.unicode or char
end
@@ -316,9 +319,10 @@ process = function(start) -- we cannot use the processor as we have no finalizer
elseif id == glyph_code then
runner(getfield(n,"components"),depth+1) -- this should not be needed
elseif id == disc_code then
- runner(getfield(n,"pre"),depth+1) -- idem
- runner(getfield(n,"post"),depth+1) -- idem
- runner(getfield(n,"replace"),depth+1) -- idem
+ local pre, post, replace = getdisc(n)
+ runner(pre,depth+1) -- idem
+ runner(post,depth+1) -- idem
+ runner(replace,depth+1) -- idem
end
if mth == 1 then
stop_tagged()
@@ -524,8 +528,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer
processsubsup(start)
end
elseif id == glue_code then
- -- local spec = getfield(start,"spec")
- -- setattr(start,a_tagged,start_tagged("mspace",{ width = getfield(spec,"width") }))
+ -- setattr(start,a_tagged,start_tagged("mspace",{ width = getfield(start,"width") }))
setattr(start,a_tagged,start_tagged("mspace"))
stop_tagged()
else
diff --git a/Master/texmf-dist/tex/context/base/math-ttv.lua b/Master/texmf-dist/tex/context/base/mkiv/math-ttv.lua
index 1f644e78834..1f644e78834 100644
--- a/Master/texmf-dist/tex/context/base/math-ttv.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-ttv.lua
diff --git a/Master/texmf-dist/tex/context/base/math-vfu.lua b/Master/texmf-dist/tex/context/base/mkiv/math-vfu.lua
index a683e02cfdc..a683e02cfdc 100644
--- a/Master/texmf-dist/tex/context/base/math-vfu.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/math-vfu.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-fig.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-fig.mkiv
index bf37aa7bfa7..bf37aa7bfa7 100644
--- a/Master/texmf-dist/tex/context/base/meta-fig.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-fig.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-fnt.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-fnt.lua
index 95bdfa6d966..95bdfa6d966 100644
--- a/Master/texmf-dist/tex/context/base/meta-fnt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-fnt.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-fnt.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-fnt.mkiv
index e54c0be0a4f..e54c0be0a4f 100644
--- a/Master/texmf-dist/tex/context/base/meta-fnt.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-fnt.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-fun.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-fun.lua
index 7aaaf2818ec..7aaaf2818ec 100644
--- a/Master/texmf-dist/tex/context/base/meta-fun.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-fun.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-fun.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-fun.mkiv
index c3a4ce8d417..c3a4ce8d417 100644
--- a/Master/texmf-dist/tex/context/base/meta-fun.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-fun.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-grd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-grd.mkiv
index da410ba689d..da410ba689d 100644
--- a/Master/texmf-dist/tex/context/base/meta-grd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-grd.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-clp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-clp.mkiv
index 5c9206deee9..89886b38969 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-clp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-clp.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=meta-clp,
+%D [ file=meta-imp-clp,
%D version=2000.07.06,
%D title=\METAPOST\ Graphics,
%D subtitle=Clipping,
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-dum.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-dum.mkiv
index e6ccc234c6d..e6ccc234c6d 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-dum.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-dum.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-fen.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-fen.mkiv
index 307a59b4db6..307a59b4db6 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-fen.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-fen.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/meta-imp-grid.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-grid.mkiv
new file mode 100644
index 00000000000..9208a3dae14
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-grid.mkiv
@@ -0,0 +1,63 @@
+%D \module
+%D [ file=meta-imp-grid,
+%D version=2016.01.08,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Grid Tracing,
+%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.
+
+\startMPextensions
+ color mfun_grid_lgc[] ;
+ numeric mfun_grid_lgi ;
+ mfun_grid_lgc[1] := red ;
+ mfun_grid_lgc[2] := green ;
+ mfun_grid_lgc[3] := blue ;
+ mfun_grid_lgi := 1 ;
+\stopMPextensions
+
+\startuseMPgraphic{linegrid}
+ % if unknown mfun_grid_lgi :
+ % color mfun_grid_lgc[] ;
+ % numeric mfun_grid_lgi ;
+ % mfun_grid_lgc[1] := red ;
+ % mfun_grid_lgc[2] := green ;
+ % mfun_grid_lgc[3] := blue ;
+ % mfun_grid_lgi := 1 ;
+ % elseif mfun_grid_lgi = 3 :
+ if mfun_grid_lgi = 3 :
+ mfun_grid_lgi := 1 ;
+ else :
+ mfun_grid_lgi := mfun_grid_lgi + 1 ;
+ fi ;
+ draw image (
+ save f, t ;
+ pair f, t ;
+ f := (0,-2*LineHeight) ;
+ t := (0, 2*LineHeight) ;
+ for i=ypart f - eps step LineHeight/5 until ypart t + eps:
+ draw (-EmWidth,i) -- (0,i) ;
+ endfor ;
+ draw f -- t ;
+ draw (-EmWidth,0) -- (EmWidth,0) ;
+ % ) shifted (-mfun_grid_lgi*EmWidth/3,0) withcolor mfun_grid_lgc[mfun_grid_lgi] ;
+ ) shifted (-EmWidth/2,0) withcolor mfun_grid_lgc[mfun_grid_lgi] ;
+ setbounds currentpicture to origin -- cycle ;
+\stopuseMPgraphic
+
+\unexpanded\def\showlinegrid{\dontleavehmode\smash{\useMPgraphic{linegrid}}}
+
+\continueifinputfile{meta-imp-grid.mkiv}
+
+\starttext
+
+\showlinegrid \input tufte \par
+\showlinegrid \input tufte \par
+\showlinegrid \input ward \par
+\showlinegrid \input ward \par
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-mis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-mis.mkiv
index e8282c381b8..e8282c381b8 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-mis.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-nav.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-nav.mkiv
index 45a31ba5ecf..45a31ba5ecf 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-nav.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-nav.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/meta-imp-outlines.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-outlines.mkiv
new file mode 100644
index 00000000000..7d74950371f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-outlines.mkiv
@@ -0,0 +1,176 @@
+%D \module
+%D [ file=meta-imp-outlines,
+%D version=2015.06.02,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Outlines,
+%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.
+
+\startluacode
+
+local concat = table.concat
+local formatters = string.formatters
+local validstring = string.valid
+
+local f_setbounds = formatters["setbounds currentpicture to (%s) enlarged %.4G;"]
+local f_index = formatters['draw anchored.bot(textext("\\tttf\\setstrut\\strut index %i") ysized 2bp ,.5[llcorner currentpicture,lrcorner currentpicture] shifted (0,%.4G));']
+local f_unicode = formatters['draw anchored.bot(textext("\\tttf\\setstrut\\strut unicode %05X") ysized 2bp ,.5[llcorner currentpicture,lrcorner currentpicture] shifted (0,%.4G));']
+
+local f_in_red = formatters["draw %s withpen pencircle scaled .15 withcolor .5red;"]
+local f_in_green = formatters["draw %s withpen pencircle scaled .15 withcolor .5green;"]
+local f_in_blue = formatters["draw %s withpen pencircle scaled .15 withcolor .5blue;"]
+local f_in_gray = formatters["draw image(%s) withcolor .75yellow;"]
+
+local f_glyph = formatters [ [[
+pickup pencircle scaled .15;
+pointlabelfont := "Mono sa .125";
+pointlabelscale := 1bp ;
+drawoptionsfactor := .2bp ;
+originlength := 2bp ;
+%s;
+]] ]
+
+local metapost = fonts.metapost
+
+local variables = interfaces.variables
+
+local v_all = variables.all
+local v_page = variables.page
+local v_text = variables.text
+local v_command = variables.command
+
+function metapost.showglyph(specification)
+ local fontid = font.current()
+ local shapedata = fonts.hashes.shapes[fontid] -- by index
+ local chardata = fonts.hashes.characters[fontid] -- by unicode
+ local shapeglyphs = shapedata.glyphs
+ local character = validstring(specification.character)
+ local index = validstring(specification.index)
+ local alternative = validstring(specification.alternative)
+ local command = validstring(specification.command)
+
+ local function shape(index,what,f_comment)
+ if not index then
+ return
+ end
+ local glyph = shapeglyphs[index]
+ if glyph and (glyph.segments or glyph.sequence) then
+ local units = data.fontheader and data.fontheader.emsize or 1000
+ local factor = 100/units
+ local paths = metapost.paths(glyph,factor)
+ if #paths > 0 then
+ local graphic = f_glyph(concat{
+ f_in_gray(metapost.fill(paths)),
+ metapost.draw(paths,true), -- true triggers trace
+ f_in_red(metapost.boundingbox(glyph,factor)),
+ f_in_green(metapost.widthline(glyph,factor)),
+ f_in_blue(metapost.zeroline(glyph,factor)),
+ f_setbounds(metapost.maxbounds(data,index,factor),offset or 1),
+ f_comment(what,1)
+ })
+ if alternative == v_page then
+ context.startMPpage()
+ context(graphic)
+ context.stopMPpage()
+ elseif alternative == v_command then
+ context[command](graphic)
+ else -- v_text
+ context.startMPcode()
+ context(graphic)
+ context.stopMPcode()
+ end
+ end
+ end
+ end
+
+ if character == v_all then
+ for u, c in table.sortedhash(chardata) do
+ shape(c.index,u,f_unicode)
+ end
+ return
+ end
+ if type(character) == "string" then
+ character = utf.byte(character)
+ end
+ if type(character) == "number" then
+ local c = chardata[character]
+ if c then
+ shape(c.index,c.index,f_index)
+ end
+ return
+ end
+ if type(index) == "number" then
+ shape(index,index,f_index)
+ return
+ end
+ local first, last
+ if type(index) == "string" then
+ first, last = string.match(index,"^(.-):(.*)$")
+ if first and last then
+ first = tonumber(first)
+ last = tonumber(last)
+ else
+ first = tonumber(index)
+ last = first
+ end
+ if not first then
+ first = 1
+ last = #shapeglyphs
+ elseif not last then
+ last = first
+ end
+ else
+ first = 1
+ last = #shapeglyphs
+ end
+ for index=first,last do
+ shape(index,index,f_index)
+ end
+end
+
+\stopluacode
+
+\unprotect
+
+\unexpanded\def\showshape
+ {\dosingleargument\meta_shapes_show}
+
+\def\meta_shapes_show[#1]%
+ {\begingroup
+ \getdummyparameters[\c!alternative=\v!text,#1]%
+ \ctxlua{fonts.metapost.showglyph{
+ character = "\dummyparameter\c!character",
+ index = "\dummyparameter\c!index",
+ alternative = "\dummyparameter\c!alternative",
+ command = "\dummyparameter\c!command",
+ }}%
+ \endgroup}
+
+\protect
+
+\continueifinputfile{meta-imp-outlines.mkiv}
+
+\starttext
+
+% \setupbodyfont[pagella]
+
+% \definedfont[latinmodern-math]\showshape[index=3078,alternative=page]
+
+% \setupbodyfont[pagella]
+% \showshape[character=all,alternative=page]
+
+\setupbodyfont[dejavu]
+\showshape[character=P,alternative=text]
+
+% \definedfont[almfixed]
+% \showshape[character=all,alternative=page]
+
+% \definedfont[file:sourcehansans-bold.otf]
+% \showshape[index=40000:41000,alternative=page]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-pre.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-pre.mkiv
index 098be030b19..098be030b19 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-pre.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-pre.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-tab.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-tab.mkiv
index a4affbea458..a4affbea458 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-tab.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-tab.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-imp-txt.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-txt.mkiv
index 7069d21a4ea..7069d21a4ea 100644
--- a/Master/texmf-dist/tex/context/base/meta-imp-txt.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-imp-txt.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-ini.lua
index 8f713126323..8f713126323 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-ini.mkiv
index 299f37cef04..9f53aea69f6 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-ini.mkiv
@@ -284,7 +284,7 @@
\endgroup}
\def\meta_process_graphic_start
- {\setbox\b_meta_graphic\hbox\bgroup}
+ {\setbox\b_meta_graphic\hpack\bgroup}
\def\meta_process_graphic_stop
{\egroup
@@ -369,7 +369,8 @@
\def\includeMPgraphic#1% gets expanded !
{\ifcsname\??mpgraphic#1\endcsname
- \doubleexpandafter\fourthoffourarguments\csname\??mpgraphic#1\endcsname ; % ; is safeguard
+ %\doubleexpandafter\fourthoffourarguments\csname\??mpgraphic#1\endcsname ; % ; is safeguard
+ \doubleexpandafter\fourthoffourarguments\lastnamedcs ; % ; is safeguard
\fi}
\let\meta_enable_include\relax
@@ -540,10 +541,12 @@
\fi}
\def\MPrawvar#1#2% no checking
- {\csname\??graphicvariable#1:#2\endcsname}
+ %{\csname\??graphicvariable#1:#2\endcsname}
+ {\begincsname\??graphicvariable#1:#2\endcsname}
\def\MPvariable#1% todo: could be a framed chain
- {\csname\??graphicvariable\currentmpvariableclass:#1\endcsname}
+ %{\csname\??graphicvariable\currentmpvariableclass:#1\endcsname}
+ {\begincsname\??graphicvariable\currentmpvariableclass:#1\endcsname}
\unexpanded\def\useMPvariables
{\dodoubleargument\meta_use_variables}
@@ -607,7 +610,7 @@
\doifelsecolor \ascii % with 2\bodyfontsize
{\meta_prepare_variable_color}
{\begingroup
- \setbox\b_meta_variable_box\hbox{\scratchdimen\m_meta_current_variable sp}%
+ \setbox\b_meta_variable_box\hpack{\scratchdimen\m_meta_current_variable sp}%
\ifzeropt\wd\b_meta_variable_box
\endgroup\meta_prepare_variable_number
\else
@@ -665,7 +668,7 @@
% hm, isn't this already done elsewhere?
\unexpanded\def\meta_obey_box_depth
- {\setbox\b_meta_graphic\hbox\bgroup
+ {\setbox\b_meta_graphic\hpack\bgroup
\raise\MPlly\box\b_meta_graphic
\egroup}
@@ -677,7 +680,7 @@
\dp\b_meta_graphic\the\dp\b_meta_graphic}}
\unexpanded\def\meta_obey_box_origin
- {\setbox\b_meta_graphic\hbox\bgroup
+ {\setbox\b_meta_graphic\hpack\bgroup
\kern\MPllx\raise\MPlly\box\b_meta_graphic
\egroup}
@@ -694,7 +697,13 @@
\unexpanded\def\meta_reuse_box#1#2#3#4#5% space delimiting would save some tokens
{\MPllx#2\MPlly#3\MPurx#4\MPury#5%
- \hbox{\forcecolorhack\getobject{MP}{#1}}} % else no proper color intent
+ \hpack{\forcecolorhack\getobject{MP}{#1}}} % else no proper color intent
+
+% \unexpanded\def\meta_use_box
+% {\setobject{MP}}
+
+\unexpanded\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,
{\begingroup % when there are that many they're probably not that unique anyway
@@ -703,10 +712,10 @@
\ifcsname\??mpgraphic\overlaystamp:#1\endcsname\else
\meta_enable_include % redundant
\global\advance\c_meta_object_counter\plusone
- \setobject{MP}{\number\c_meta_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
+ \meta_use_box{\number\c_meta_object_counter}\hpack{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
\setxvalue{\??mpgraphic\overlaystamp:#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
\fi
- \getvalue{\??mpgraphic\overlaystamp:#1}%
+ \csname\??mpgraphic\overlaystamp:#1\endcsname\empty
\endgroup}
\unexpanded\def\startuniqueMPgraphic
@@ -730,7 +739,7 @@
{\meta_begin_graphic_group{#1}%
% \setupMPvariables[\currentMPgraphicname][#2]%
\setupMPvariables[#1][#2]%
- \getvalue{\??mpgraphic#1}\empty
+ \csname\??mpgraphic#1\endcsname\empty
\meta_end_graphic_group}
\def\meta_handle_use_graphic#1#2#3%
@@ -790,9 +799,9 @@
\fi
\meta_enable_include % redundant
\global\advance\c_meta_object_counter\plusone
- \setobject{MP}{\number\c_meta_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
+ \meta_use_box{\number\c_meta_object_counter}\hpack{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
\setxvalue{\??mpgraphic#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
- \getvalue{\??mpgraphic#1}%
+ \csname\??mpgraphic#1\endcsname\empty
\endgroup}
\unexpanded\def\startreusableMPgraphic
@@ -816,7 +825,7 @@
{\meta_begin_graphic_group{#1}%
% \doifsomething{#2}{\setupMPvariables[\currentMPgraphicname][#2]}%
\doifsomething{#2}{\setupMPvariables[#1][#2]}%
- \getvalue{\??mpgraphic#1}\empty
+ \csname\??mpgraphic#1\endcsname\empty
\meta_end_graphic_group}
\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed
@@ -866,7 +875,7 @@
\let\overlaystamp\overlaypagestamp
% \setupMPvariables[\m_meta_page_prefix:\currentMPgraphicname][#2]% prefix is new here
\setupMPvariables[\m_meta_page_prefix:#1][#2]% prefix is new here
- \getvalue{\??mpgraphic\m_meta_page_prefix:#1}{}%
+ \csname\??mpgraphic\m_meta_page_prefix:#1\endcsname\empty
\meta_end_graphic_group}
%D One way of defining a stamp is:
@@ -990,7 +999,7 @@
{\clf_mptexreset}
\unexpanded\def\useMPenvironmentbuffer[#1]%
- {\clf_mpsetfrombuffer{#1}}
+ {\clf_mptexsetfrombuffer{#1}}
%D This command takes \type {[reset]} as optional
%D argument.
@@ -1133,9 +1142,9 @@
{\defconvertedargument\ascii{#2}%
\dodoglobal\letvalue{\??mptext#1}\ascii}
-\def\MPtext #1{\executeifdefined{\??mptext#1}\empty}
-\def\MPstring#1{"\executeifdefined{\??mptext#1}\empty"}
-\def\MPbetex #1{btex \executeifdefined{\??mptext#1}\empty\space etex}
+\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}
%D In order to communicate conveniently with the \TEX\
%D engine, we introduce some typesetting variables.
@@ -1200,7 +1209,7 @@
\appendtoks
\disablediscretionaries
- \disablecompoundcharacters
+ %\disablecompoundcharacters
\to \everyMPgraphic
% \appendtoks % before color, inefficient, replace by low level copy
@@ -1486,7 +1495,7 @@
\unexpanded\def\startMPcalculation
{\begingroup
- \setbox\nextbox\hbox\bgroup
+ \setbox\nextbox\hpack\bgroup
\dosinglegroupempty\meta_start_calculation}
\def\meta_start_calculation
diff --git a/Master/texmf-dist/tex/context/base/meta-pag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-pag.mkiv
index 6b6abd21135..6b6abd21135 100644
--- a/Master/texmf-dist/tex/context/base/meta-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-pag.mkiv
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-pdf.lua
index 3cbff63b168..3cbff63b168 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-pdf.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-pdf.mkiv
index 50eb1dd720a..14c97042e3f 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-pdf.mkiv
@@ -39,13 +39,13 @@
\unexpanded\def\convertMPtoPDF#1#2#3% scaling no longer supported at this level (so #2 & #3 are ignored)
{\dostarttagged\t!mpgraphic\empty
- \naturalvbox attr \imageattribute 1 \bgroup
+ \naturalvpack attr \imageattribute 1 \bgroup
\message{[MP to PDF]}%
\xdef\MPfilename{#1}%
\resetMPboundingbox
\forgetall
\offinterlineskip
- \setbox\MPbox\vbox\bgroup
+ \setbox\MPbox\vpack\bgroup
\clf_convertmpstopdf{\MPfilename}%
\removeunwantedspaces % not that needed
\egroup
diff --git a/Master/texmf-dist/tex/context/base/meta-pdh.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-pdh.lua
index 5040715c4f9..5040715c4f9 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdh.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-pdh.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-pdh.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-pdh.mkiv
index f3db5b38866..3787a56389b 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdh.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-pdh.mkiv
@@ -106,10 +106,10 @@
\def\convertMPtoPDF#1#2#3% watch the transparency reset
{\resetMPvariables{#1}{#2}{#3}%
- \vbox\bgroup
+ \vpack\bgroup
\forgetall
\offinterlineskip
- \setbox\scratchbox\vbox\bgroup
+ \setbox\scratchbox\vpack\bgroup
\setnormalcatcodes % we can be in verbatim or so
\message{[MP to PDF]}%
\startMPresources
@@ -120,12 +120,12 @@
\pdfliteral{\letterpercent\space mps end}%
\stopMPresources
\egroup
- \setbox\scratchbox\hbox\bgroup
+ \setbox\scratchbox\hpack\bgroup
\hskip-\MPllx\onebasepoint
\raise-\MPlly\onebasepoint
\box\scratchbox
\egroup
- \setbox\scratchbox\vbox to \MPheight\bgroup
+ \setbox\scratchbox\vpack to \MPheight\bgroup
\vfill
\hsize\MPwidth
\smashbox\scratchbox
@@ -154,13 +154,13 @@
\or
\scratchdimen\PDFMPformoffset\relax
\ifdim\scratchdimen>\zeropoint % compensate for error
- \setbox#1\vbox spread 2\scratchdimen
- {\forgetall\vss\hbox spread 2\scratchdimen{\hss\box#1\hss}\vss}%
+ \setbox#1\vpack spread 2\scratchdimen
+ {\forgetall\vss\hpack spread 2\scratchdimen{\hss\box#1\hss}\vss}%
\fi
\setMPPDFobject{\currentPDFresources}{#1}%
\ifdim\scratchdimen>\zeropoint % compensate for error
- \vbox to \MPheight
- {\forgetall\vss\hbox to \MPwidth{\hss\getMPPDFobject\hss}\vss}%
+ \vpack to \MPheight
+ {\forgetall\vss\hpack to \MPwidth{\hss\getMPPDFobject\hss}\vss}%
\else
\getMPPDFobject
\fi
@@ -171,8 +171,8 @@
\def\setMPPDFobject#1#2% resources boxnumber
{\ifx\everyPDFxform\undefined\else\the\everyPDFxform\fi
- \immediate\pdfxform resources{#1}#2%
- \edef\getMPPDFobject{\noexpand\pdfrefxform\the\pdflastxform}}
+ \immediate\saveboxresource resources{#1}#2%
+ \edef\getMPPDFobject{\noexpand\useboxresource\the\lastsavedboxresourceindex}}
\let\getMPPDFobject\relax
@@ -669,12 +669,12 @@
\defconvertedcommand\MPtextdata\MPtextdata % no edef
\splitstring\MPtextdata\at::::\to\MPtexttag\and\MPtextnumber
\executeifdefined{handleMPtext\MPtexttag}
- {\setbox\scratchbox\hbox
+ {\setbox\scratchbox\hbox % text
{\font\temp=#1\space at #2\onebasepoint
\let\c\char
\temp
\MPfshowcommand{#3}}%
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\hskip#4\onebasepoint
\raise#5\onebasepoint
\box\scratchbox}%
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/meta-tex.lua
index 1008e45c05e..1008e45c05e 100644
--- a/Master/texmf-dist/tex/context/base/meta-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-tex.lua
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-tex.mkiv
index 0f5a27ff862..35b5c133b95 100644
--- a/Master/texmf-dist/tex/context/base/meta-tex.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-tex.mkiv
@@ -44,7 +44,7 @@
\def\getTeXtext#1%
{\getvalue{\??graphictextext#1}}
-\setvalue{\??graphictexdepth d}{\setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}} % unchecked
+\setvalue{\??graphictexdepth d}{\setbox\nextbox\hpack{\lower\dp\nextbox\box\nextbox}} % unchecked
\letvalue{\??graphictexdepth n}\donothing % unchecked
\setvalue{\??graphictexdepth\s!depth }{\getvalue{\??graphictexdepth d}}
@@ -142,4 +142,12 @@
\unexpanded\def\MPformatted #1#2{\clf_metapostformatted{#1}{#2}}
\unexpanded\def\MPgraphformat#1#2{\clf_metapostgraphformat{#1}{#2}}
+%D Some new fun (but exprimental for a while):
+
+\unexpanded\def\MPLIBoutlinetext#1#2#3% index kind text
+ {\begingroup
+ \setbox\scratchbox\hbox{#3}%
+ \clf_MPLIBconvertoutlinetext\numexpr#1\relax{#2}\scratchbox
+ \endgroup}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/meta-xml.mkiv
index bd93bda8c5b..bd93bda8c5b 100644
--- a/Master/texmf-dist/tex/context/base/meta-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/meta-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/metatex.lus b/Master/texmf-dist/tex/context/base/mkiv/metatex.lus
index df7bc191425..df7bc191425 100644
--- a/Master/texmf-dist/tex/context/base/metatex.lus
+++ b/Master/texmf-dist/tex/context/base/mkiv/metatex.lus
diff --git a/Master/texmf-dist/tex/context/base/metatex.tex b/Master/texmf-dist/tex/context/base/mkiv/metatex.tex
index b5f54c4eef1..b5f54c4eef1 100644
--- a/Master/texmf-dist/tex/context/base/metatex.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/metatex.tex
diff --git a/Master/texmf-dist/tex/context/base/mlib-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.lua
index b437e1212c7..3fe7118b787 100644
--- a/Master/texmf-dist/tex/context/base/mlib-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.lua
@@ -341,7 +341,7 @@ function mptex.set(str)
end
function mptex.setfrombuffer(name)
- environments[#environments+1] = buffers.content(name)
+ environments[#environments+1] = buffers.getcontent(name)
end
function mptex.get()
diff --git a/Master/texmf-dist/tex/context/base/mlib-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.mkiv
index a7bb612c854..a7bb612c854 100644
--- a/Master/texmf-dist/tex/context/base/mlib-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-ctx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mlib-int.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-int.lua
index 6d219fe0490..6d219fe0490 100644
--- a/Master/texmf-dist/tex/context/base/mlib-int.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-int.lua
diff --git a/Master/texmf-dist/tex/context/base/mlib-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-lua.lua
index 7e05684630d..baf9346c472 100644
--- a/Master/texmf-dist/tex/context/base/mlib-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-lua.lua
@@ -19,12 +19,13 @@ local lpegmatch = lpeg.match
local P, S, Ct = lpeg.P, lpeg.S, lpeg.Ct
-local report_luarun = logs.reporter("metapost","lua")
+local report_luarun = logs.reporter("metapost","lua")
+local report_message = logs.reporter("metapost")
-local trace_luarun = false trackers.register("metapost.lua",function(v) trace_luarun = v end)
-local trace_enabled = true
+local trace_luarun = false trackers.register("metapost.lua",function(v) trace_luarun = v end)
+local trace_enabled = true
-local be_tolerant = true directives.register("metapost.lua.tolerant",function(v) be_tolerant = v end)
+local be_tolerant = true directives.register("metapost.lua.tolerant",function(v) be_tolerant = v end)
mp = mp or { } -- system namespace
MP = MP or { } -- user namespace
@@ -187,8 +188,10 @@ function mp.quoted(fmt,s,...)
fmt = lpegmatch(replacer,fmt)
end
buffer[n] = '"' .. formatters[fmt](s,...) .. '"'
- else
+ elseif fmt then
buffer[n] = '"' .. fmt .. '"'
+ else
+ -- something is wrong
end
end
@@ -293,16 +296,14 @@ function metapost.runscript(code)
if result then
local t = type(result)
if t == "number" then
- t = f_numeric(result)
- elseif t == "string" then
- t = result
- else
- t = tostring(result)
+ result = f_numeric(result)
+ elseif t ~= "string" then
+ result = tostring(result)
end
if trace then
- report_luarun("result: %s",code)
+ report_luarun("result: %s",result)
end
- return t
+ return result
elseif trace then
report_luarun("no result")
end
@@ -381,3 +382,11 @@ function mp.tt_dimensions(n)
mptriplet(0,0,0)
end
end
+
+function mp.report(a,b)
+ if b then
+ report_message("%s : %s",a,b)
+ elseif a then
+ report_message("%s : %s","message",a)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mlib-pdf.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.lua
index 8de09f42a60..a2d4638a904 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.lua
@@ -428,11 +428,19 @@ function metapost.flush(result,flusher,askedfig)
result[#result+1] = "q"
if objects then
resetplugins(result) -- we should move the colorinitializer here
+ local savedpath = nil
+ local savedhtap = nil
for o=1,#objects do
local object = objects[o]
local objecttype = object.type
- if objecttype == "start_bounds" or objecttype == "stop_bounds" then
- -- skip
+ if objecttype == "text" then
+ result[#result+1] = "q"
+ local ot = object.transform -- 3,4,5,6,1,2
+ result[#result+1] = f_cm(ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) -- TH: formatters["%F %F m %F %F %F %F 0 0 cm"](unpack(ot))
+ flushfigure(result) -- flush accumulated literals
+ result = { }
+ textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth)
+ result[#result+1] = "Q"
elseif objecttype == "special" then
if processspecial then
processspecial(object.prescript)
@@ -445,14 +453,8 @@ function metapost.flush(result,flusher,askedfig)
elseif objecttype == "stop_clip" then
result[#result+1] = "Q"
miterlimit, linecap, linejoin, dashed = -1, -1, -1, "" -- was false
- elseif objecttype == "text" then
- result[#result+1] = "q"
- local ot = object.transform -- 3,4,5,6,1,2
- result[#result+1] = f_cm(ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) -- TH: formatters["%F %F m %F %F %F %F 0 0 cm"](unpack(ot))
- flushfigure(result) -- flush accumulated literals
- result = { }
- textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth)
- result[#result+1] = "Q"
+ elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then
+ -- skip
else
-- we use an indirect table as we want to overload
-- entries but this is not possible in userdata
@@ -466,95 +468,153 @@ function metapost.flush(result,flusher,askedfig)
})
-- first we analyze
local before, after = processplugins(object)
- local objecttype = object.type -- can have changed
- if before then
- result = pluginactions(before,result,flushfigure)
- end
- local ml = object.miterlimit
- if ml and ml ~= miterlimit then
- miterlimit = ml
- result[#result+1] = f_M(ml)
- end
- local lj = object.linejoin
- if lj and lj ~= linejoin then
- linejoin = lj
- result[#result+1] = f_j(lj)
- end
- local lc = object.linecap
- if lc and lc ~= linecap then
- linecap = lc
- result[#result+1] = f_J(lc)
- end
- local dl = object.dash
- if dl then
- local d = f_d(concat(dl.dashes or {}," "),dl.offset)
- if d ~= dashed then
- dashed = d
- result[#result+1] = d
+ local evenodd, collect, both = false, false, false
+ local postscript = object.postscript
+ if not object.istext then
+ if postscript == "evenodd" then
+ evenodd = true
+ elseif postscript == "collect" then
+ collect = true
+ elseif postscript == "both" then
+ both = true
+ elseif postscript == "eoboth" then
+ evenodd = true
+ both = true
end
- elseif dashed ~= false then -- was just dashed test
- result[#result+1] = "[] 0 d"
- dashed = false
end
- local path = object.path -- newpath
- local transformed, penwidth = false, 1
- local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point"
- local pen = object.pen
- if pen then
- if pen.type == 'elliptical' then
- transformed, penwidth = pen_characteristics(original) -- boolean, value
- result[#result+1] = f_w(penwidth) -- todo: only if changed
- if objecttype == 'fill' then
- objecttype = 'both'
+ --
+ if collect then
+ if not savedpath then
+ savedpath = { object.path or false }
+ savedhtap = { object.htap or false }
+ else
+ savedpath[#savedpath+1] = object.path or false
+ savedhtap[#savedhtap+1] = object.htap or false
+ end
+ else
+ local objecttype = object.type -- can have changed
+ if before then
+ result = pluginactions(before,result,flushfigure)
+ end
+ local ml = object.miterlimit
+ if ml and ml ~= miterlimit then
+ miterlimit = ml
+ result[#result+1] = f_M(ml)
+ end
+ local lj = object.linejoin
+ if lj and lj ~= linejoin then
+ linejoin = lj
+ result[#result+1] = f_j(lj)
+ end
+ local lc = object.linecap
+ if lc and lc ~= linecap then
+ linecap = lc
+ result[#result+1] = f_J(lc)
+ end
+ if both then
+ if dashed ~= false then -- was just dashed test
+ result[#result+1] = "[] 0 d"
+ dashed = false
end
- else -- calculated by mplib itself
- objecttype = 'fill'
- end
- end
- if transformed then
- result[#result+1] = "q"
- end
- local evenodd = not object.istext and object.postscript == "evenodd"
- if path then
- if transformed then
- flushconcatpath(path,result,open)
else
- flushnormalpath(path,result,open)
+ local dl = object.dash
+ if dl then
+ local d = f_d(concat(dl.dashes or {}," "),dl.offset)
+ if d ~= dashed then
+ dashed = d
+ result[#result+1] = d
+ end
+ elseif dashed ~= false then -- was just dashed test
+ result[#result+1] = "[] 0 d"
+ dashed = false
+ end
end
- if objecttype == "fill" then
- result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo
- elseif objecttype == "outline" then
- result[#result+1] = open and "S" or "h S"
- elseif objecttype == "both" then
- result[#result+1] = evenodd and "h B*" or "h B"-- B* = eo -- b includes closepath
+ local path = object.path -- newpath
+ local transformed, penwidth = false, 1
+ local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point"
+ local pen = object.pen
+ if pen then
+ if pen.type == 'elliptical' then
+ transformed, penwidth = pen_characteristics(original) -- boolean, value
+ result[#result+1] = f_w(penwidth) -- todo: only if changed
+ if objecttype == 'fill' then
+ objecttype = 'both'
+ end
+ else -- calculated by mplib itself
+ objecttype = 'fill'
+ end
end
- end
- if transformed then
- result[#result+1] = "Q"
- end
- local path = object.htap
- if path then
if transformed then
result[#result+1] = "q"
end
- if transformed then
- flushconcatpath(path,result,open)
- else
- flushnormalpath(path,result,open)
- end
- if objecttype == "fill" then
- result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo
- elseif objecttype == "outline" then
- result[#result+1] = open and "S" or "h S"
- elseif objecttype == "both" then
- result[#result+1] = evenodd and "h B*" or "h B"-- B* = eo -- b includes closepath
+ if path then
+ if savedpath then
+ for i=1,#savedpath do
+ local path = savedpath[i]
+ if transformed then
+ flushconcatpath(path,result,open)
+ else
+ flushnormalpath(path,result,open)
+ end
+ end
+ savedpath = nil
+ end
+ if transformed then
+ flushconcatpath(path,result,open)
+ else
+ flushnormalpath(path,result,open)
+ end
+ if objecttype == "fill" then
+ result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo
+ elseif objecttype == "outline" then
+ if both then
+ result[#result+1] = evenodd and "h B*" or "h B" -- f* = eo
+ else
+ result[#result+1] = open and "S" or "h S"
+ end
+ elseif objecttype == "both" then
+ result[#result+1] = evenodd and "h B*" or "h B"-- B* = eo -- b includes closepath
+ end
end
if transformed then
result[#result+1] = "Q"
end
- end
- if after then
- result = pluginactions(after,result,flushfigure)
+ local path = object.htap
+ if path then
+ if transformed then
+ result[#result+1] = "q"
+ end
+ if savedhtap then
+ for i=1,#savedhtap do
+ local path = savedhtap[i]
+ if transformed then
+ flushconcatpath(path,result,open)
+ else
+ flushnormalpath(path,result,open)
+ end
+ end
+ savedhtap = nil
+ evenodd = true
+ end
+ if transformed then
+ flushconcatpath(path,result,open)
+ else
+ flushnormalpath(path,result,open)
+ end
+ if objecttype == "fill" then
+ result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo
+ elseif objecttype == "outline" then
+ result[#result+1] = open and "S" or "h S"
+ elseif objecttype == "both" then
+ result[#result+1] = evenodd and "h B*" or "h B"-- B* = eo -- b includes closepath
+ end
+ if transformed then
+ result[#result+1] = "Q"
+ end
+ end
+ if after then
+ result = pluginactions(after,result,flushfigure)
+ end
end
if object.grouped then
-- can be qQ'd so changes can end up in groups
diff --git a/Master/texmf-dist/tex/context/base/mlib-pdf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.mkiv
index 92bf86ea9f1..78dab716df6 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pdf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-pdf.mkiv
@@ -48,7 +48,7 @@
\global\MPury \zeropoint}
\def\repositionMPboxindeed
- {\setbox\MPbox\hbox\bgroup
+ {\setbox\MPbox\hpack\bgroup
\kern-\MPllx
\raise-\MPlly
\box\MPbox
@@ -67,7 +67,7 @@
\def\finalizeMPbox
{\repositionMPbox
- \setbox\MPbox\vbox to \MPheight\bgroup
+ \setbox\MPbox\vpack to \MPheight\bgroup
\vfill
\hsize\MPwidth
\smashbox\MPbox
@@ -78,7 +78,7 @@
\def\MPtextext#1#2#3#4#5% beware: we use a different method now (see mlib-pps)
{\begingroup
- \setbox\MPbox\hbox{\font\temp=#1\space at #2\onebasepoint \let\c\char \temp #3}%
+ \setbox\MPbox\hbox{\font\temp=#1\space at #2\onebasepoint \let\c\char \temp #3}% text
\MPllx-#4\onebasepoint
\MPlly-#5\onebasepoint
\repositionMPbox
@@ -96,7 +96,7 @@
\naturalhbox attr \imageattribute 1 \bgroup
\dousecolorparameter\s!black\forcecolorhack
\setMPboundingbox{#1}{#2}{#3}{#4}%
- \setbox\MPbox\vbox\bgroup
+ \setbox\MPbox\vpack\bgroup
% \forgetall % already done elsewhere
\noindent} % forces the proper cm in the backend
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-pps.lua
index ab56699b9f9..c016e0f3615 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pps.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-pps.lua
@@ -170,7 +170,7 @@ local function checkandconvertspot(n_a,f_a,c_a,v_a,n_b,f_b,c_b,v_b)
end
end
-local function checkandconvert(ca,cb)
+local function checkandconvert(ca,cb,model)
local name = f_shade(nofshades)
if not ca or not cb or type(ca) == "string" then
return { 0 }, { 1 }, "DeviceGray", name
@@ -180,7 +180,9 @@ local function checkandconvert(ca,cb)
elseif #ca < #cb then
normalize(cb,ca)
end
- local model = colors.model
+ if not model then
+ model = colors.model
+ end
if model == "all" then
model= (#ca == 4 and "cmyk") or (#ca == 3 and "rgb") or "gray"
end
@@ -193,7 +195,7 @@ local function checkandconvert(ca,cb)
ca = { a, a, a }
cb = { b, b, b }
end
- return ca, cb, "DeviceRGB", name
+ return ca, cb, "DeviceRGB", name, model
elseif model == "cmyk" then
if #ca == 3 then
ca = { rgbtocmyk(ca[1],ca[2],ca[3]) }
@@ -202,7 +204,7 @@ local function checkandconvert(ca,cb)
ca = { 0, 0, 0, ca[1] }
cb = { 0, 0, 0, ca[1] }
end
- return ca, cb, "DeviceCMYK", name
+ return ca, cb, "DeviceCMYK", name, model
else
if #ca == 4 then
ca = { cmyktogray(ca[1],ca[2],ca[3],ca[4]) }
@@ -212,7 +214,7 @@ local function checkandconvert(ca,cb)
cb = { rgbtogray(cb[1],cb[2],cb[3]) }
end
-- backend specific (will be renamed)
- return ca, cb, "DeviceGray", name
+ return ca, cb, "DeviceGray", name, model
end
end
end
@@ -278,6 +280,9 @@ end
local function settext(box,slot)
if top then
+ -- if trace_textexts then
+ -- report_textexts("getting text %s from box %s",slot,box)
+ -- end
top.textexts[slot] = copy_list(texgetbox(box))
texsetbox(box,nil)
-- this can become
@@ -290,9 +295,9 @@ end
local function gettext(box,slot)
if top then
texsetbox(box,copy_list(top.textexts[slot]))
- if trace_textexts then
- report_textexts("putting text %s in box %s",slot,box)
- end
+ -- if trace_textexts then
+ -- report_textexts("putting text %s in box %s",slot,box)
+ -- end
-- top.textexts[slot] = nil -- no, pictures can be placed several times
else
-- weird error
@@ -736,9 +741,9 @@ function metapost.graphic_base_pass(specification) -- name will change (see mlib
context(stopjob)
end
-function metapost.process(...)
- startjob(false)
- processmetapost(...)
+function metapost.process(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig, plugmode) -- overloads
+ startjob(plugmode)
+ processmetapost(mpx, data, trialrun, flusher, multipass, isextrapass, askedfig)
stopjob()
end
@@ -882,7 +887,7 @@ function metapost.analyzeplugins(object) -- each object (first pass)
if top.plugmode then
local prescript = object.prescript -- specifications
if prescript and #prescript > 0 then
- analyzer(object,splitprescript(prescript))
+ analyzer(object,splitprescript(prescript) or {})
return top.multipass
end
end
@@ -895,7 +900,7 @@ function metapost.processplugins(object) -- each object (second pass)
if prescript and #prescript > 0 then
local before = { }
local after = { }
- processor(object,splitprescript(prescript),before,after)
+ processor(object,splitprescript(prescript) or {},before,after)
return #before > 0 and before, #after > 0 and after
else
local c = object.color
@@ -955,7 +960,11 @@ local ctx_MPLIBsetNtext = context.MPLIBsetNtext
local ctx_MPLIBsetCtext = context.MPLIBsetCtext
local ctx_MPLIBsettext = context.MPLIBsettext
-local function tx_analyze(object,prescript) -- todo: hash content and reuse them
+-- we reuse content when possible
+-- we always create at least one instance (for dimensions)
+-- we make sure we don't do that when we use one (else counter issues with e.g. \definelabel)
+
+local function tx_analyze(object,prescript)
local data = top.texdata[metapost.properties.number]
local tx_stage = prescript.tx_stage
if tx_stage == "trial" then
@@ -974,7 +983,17 @@ local function tx_analyze(object,prescript) -- todo: hash content and reuse them
local t = tonumber(prescript.tr_transparency)
local h = fmt(tx_number,a or "-",t or "-",c or "-")
local n = data.texhash[h] -- todo: hashed variant with s (nicer for similar labels)
- if not n then
+ if n then
+ data.texslots[tx_trial] = n
+ if trace_textexts then
+ report_textexts("stage %a, usage %a, number %a, %s %a, hash %a, text %a",tx_stage,tx_trial,tx_number,"old",n,h,s)
+ end
+ elseif prescript.tx_global == "yes" and data.texorder[tx_number] then
+ -- we already have one flush and don't want it redone .. this needs checking
+ if trace_textexts then
+ report_textexts("stage %a, usage %a, number %a, %s %a, hash %a, text %a",tx_stage,tx_trial,tx_number,"ignored",tx_last,h,s)
+ end
+ else
local tx_last = top.texlast + 1
top.texlast = tx_last
-- report_textexts("tex string: %s",s)
@@ -1003,15 +1022,11 @@ local function tx_analyze(object,prescript) -- todo: hash content and reuse them
end
top.multipass = true
data.texhash [h] = tx_last
+ -- data.texhash [tx_number] = tx_last
data.texslots[tx_trial] = tx_last
data.texorder[tx_number] = tx_last
if trace_textexts then
- report_textexts("stage %a, usage %a, number %a, new %a, hash %a, text %a",tx_stage,tx_trial,tx_number,tx_last,h,s)
- end
- else
- data.texslots[tx_trial] = n
- if trace_textexts then
- report_textexts("stage %a, usage %a, number %a, old %a, hash %a, text %a",tx_stage,tx_trial,tx_number,n,h,s)
+ report_textexts("stage %a, usage %a, number %a, %s %a, hash %a, text %a",tx_stage,tx_trial,tx_number,"new",tx_last,h,s)
end
end
elseif tx_stage == "extra" then
@@ -1107,13 +1122,13 @@ local function sh_process(object,prescript,before,after)
local sh_type = prescript.sh_type
if sh_type then
nofshades = nofshades + 1
- local domain = lpegmatch(domainsplitter,prescript.sh_domain or "0 1")
- local centera = lpegmatch(centersplitter,prescript.sh_center_a or "0 0")
- local centerb = lpegmatch(centersplitter,prescript.sh_center_b or "0 0")
- --
- local sh_color_a = prescript.sh_color_a or "1"
- local sh_color_b = prescript.sh_color_b or "1"
- local ca, cb, colorspace, name, separation
+ local domain = lpegmatch(domainsplitter,prescript.sh_domain or "0 1")
+ local centera = lpegmatch(centersplitter,prescript.sh_center_a or "0 0")
+ local centerb = lpegmatch(centersplitter,prescript.sh_center_b or "0 0")
+ local steps = tonumber(prescript.sh_step) or 1
+ local sh_color_a = prescript.sh_color_a_1 or prescript.sh_color_a or "1"
+ local sh_color_b = prescript.sh_color_b_1 or prescript.sh_color_b or "1" -- sh_color_b_<sh_steps>
+ local ca, cb, colorspace, name, model, separation, fractions
if prescript.sh_color == "into" and prescript.sp_name then
-- some spotcolor
local value_a, components_a, fractions_a, name_a
@@ -1149,27 +1164,41 @@ local function sh_process(object,prescript,before,after)
else
local colora = lpegmatch(colorsplitter,sh_color_a)
local colorb = lpegmatch(colorsplitter,sh_color_b)
- ca, cb, colorspace, name = checkandconvert(colora,colorb)
+ ca, cb, colorspace, name, model = checkandconvert(colora,colorb)
+ -- test:
+ if steps > 1 then
+ ca = { ca }
+ cb = { cb }
+ fractions = { tonumber(prescript[formatters["sh_fraction_%i"](1)]) or 0 }
+ for i=2,steps do
+ local colora = lpegmatch(colorsplitter,prescript[formatters["sh_color_a_%i"](i)])
+ local colorb = lpegmatch(colorsplitter,prescript[formatters["sh_color_b_%i"](i)])
+ ca[i], cb[i] = checkandconvert(colora,colorb,model)
+ fractions[i] = tonumber(prescript[formatters["sh_fraction_%i"](i)]) or (i/steps)
+ end
+ end
end
if not ca or not cb then
ca, cb, colorspace, name = checkandconvert()
+ steps = 1
end
if sh_type == "linear" then
local coordinates = { centera[1], centera[2], centerb[1], centerb[2] }
- lpdf.linearshade(name,domain,ca,cb,1,colorspace,coordinates,separation) -- backend specific (will be renamed)
+ lpdf.linearshade(name,domain,ca,cb,1,colorspace,coordinates,separation,steps>1 and steps,fractions) -- backend specific (will be renamed)
elseif sh_type == "circular" then
local factor = tonumber(prescript.sh_factor) or 1
local radiusa = factor * tonumber(prescript.sh_radius_a)
local radiusb = factor * tonumber(prescript.sh_radius_b)
local coordinates = { centera[1], centera[2], radiusa, centerb[1], centerb[2], radiusb }
- lpdf.circularshade(name,domain,ca,cb,1,colorspace,coordinates,separation) -- backend specific (will be renamed)
+ lpdf.circularshade(name,domain,ca,cb,1,colorspace,coordinates,separation,steps>1 and steps,fractions) -- backend specific (will be renamed)
else
-- fatal error
end
- before[#before+1], after[#after+1] = "q /Pattern cs", formatters["W n /%s sh Q"](name)
+ before[#before+1] = "q /Pattern cs"
+ after [#after+1] = formatters["W n /%s sh Q"](name)
-- false, not nil, else mt triggered
object.colored = false -- hm, not object.color ?
- object.type = false
+ object.type = false
object.grouped = true
end
end
@@ -1386,13 +1415,56 @@ local function gr_process(object,prescript,before,after)
end
end
+-- outlines
+
+local outlinetexts = { }
+
+local function ot_reset()
+ outlinetexts = { }
+end
+
+local function ot_analyze(object,prescript)
+ local ot_stage = prescript.ot_stage
+ local ot_index = tonumber(prescript.ot_index)
+ if ot_index and ot_stage == "trial" and not outlinetexts[ot_index] then
+ local ot_kind = prescript.ot_kind or ""
+ top.intermediate = true
+ top.multipass = true
+ context.MPLIBoutlinetext(ot_index,ot_kind,object.postscript)
+ end
+end
+
+local function ot_process(object,prescript,before,after)
+end
+
+implement {
+ name = "MPLIBconvertoutlinetext",
+ arguments = { "integer", "string", "integer" },
+ actions = function(index,kind,box)
+ local boxtomp = fonts.metapost.boxtomp
+ if boxtomp then
+ outlinetexts[index] = boxtomp(box,kind)
+ else
+ outlinetexts[index] = ""
+ end
+ end
+}
+
+function mp.get_outline_text(index) -- maybe we need a more private namespace
+ mp.print(outlinetexts[index] or "draw origin;")
+end
+
+
-- definitions
+appendaction(resetteractions, "system",ot_reset)
appendaction(resetteractions, "system",cl_reset)
appendaction(resetteractions, "system",tx_reset)
+appendaction(processoractions,"system",ot_process)
appendaction(processoractions,"system",gr_process)
+appendaction(analyzeractions, "system",ot_analyze)
appendaction(analyzeractions, "system",tx_analyze)
appendaction(analyzeractions, "system",gt_analyze)
@@ -1406,6 +1478,18 @@ appendaction(processoractions,"system",tr_process) -- last, as color can be rese
appendaction(processoractions,"system",la_process)
+-- function metapost.installplugin(reset,analyze,process)
+-- if reset then
+-- appendaction(resetteractions,"system",reset)
+-- end
+-- if analyze then
+-- appendaction(analyzeractions,"system",analyze)
+-- end
+-- if process then
+-- appendaction(processoractions,"system",process)
+-- end
+-- end
+
-- we're nice and set them already
resetter = resetteractions .runner
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mlib-pps.mkiv
index 07ac84b8d32..cdccfc379a9 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pps.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-pps.mkiv
@@ -42,14 +42,14 @@
\unexpanded\def\MPLIBsetNtext#1% #2% box text
{\MPLIBflushenvironment
- \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup
+ \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup % text
\meta_set_current_color
\let\MPLIBflushenvironment\doMPLIBflushenvironment
\let\next} % gobble open brace
\unexpanded\def\MPLIBsetCtext#1#2% #3% box colorspec text
{\MPLIBflushenvironment
- \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup
+ \dowithnextbox{\clf_mpsettext\nextbox #1}\hbox\bgroup % text
\directcolored[#2]%
\meta_set_current_color % so, textcolor wins !
\let\MPLIBflushenvironment\doMPLIBflushenvironment
@@ -59,22 +59,22 @@
\unexpanded\def\MPLIBgettextscaled#1#2#3% why a copy .. can be used more often
{\clf_mpgettext\MPtextbox #1%
- \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[\c!sx=#2,\c!sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\forcecolorhack\hss}}}
+ \vpack to \zeropoint{\vss\hpack to \zeropoint{\scale[\c!sx=#2,\c!sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\forcecolorhack\hss}}}
\unexpanded\def\MPLIBfigure#1#2%
- {\setbox\scratchbox\hbox{\externalfigure[#1][\c!mask=#2]}%
+ {\setbox\scratchbox\hpack{\externalfigure[#1][\c!mask=#2]}%
\clf_mpsetsxsy\wd\scratchbox\ht\scratchbox\zeropoint
- \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[\c!sx=\sx,\c!sy=\sy]{\box\scratchbox}\hss}}}
+ \vpack to \zeropoint{\vss\hpack to \zeropoint{\scale[\c!sx=\sx,\c!sy=\sy]{\box\scratchbox}\hss}}}
% horrible (we could inline scale and matrix code):
\unexpanded\def\MPLIBgettextscaledcm#1#2#3#4#5#6#7#8#9% 2-7: sx,rx,ry,sy,tx,ty
{\clf_mpgettext\MPtextbox #1%
- \setbox\MPbox\hbox\bgroup
+ \setbox\MPbox\hpack\bgroup
\dotransformnextbox{#2}{#3}{#4}{#5}{#6}{#7}% does push pop ... will be changed to proper lua call (avoid small numbers)
- \vbox to \zeropoint\bgroup
+ \vpack to \zeropoint\bgroup
\vss
- \hbox to \zeropoint \bgroup
+ \hpack to \zeropoint \bgroup
% \scale[\c!sx=#8,\c!sy=#9]{\raise\dp\MPtextbox\box\MPtextbox}%
% \scale[\c!sx=#8,\c!sy=#9,\c!depth=\v!no]{\box\MPtextbox}%
\fastsxsy{#8}{#9}{\raise\dp\MPtextbox\box\MPtextbox}%
@@ -130,16 +130,16 @@
\def\doMPLIBstopgroup#1#2#3#4#5#6% some day this might happen elsewhere
{\egroup
- \setbox\scratchbox\hbox{\kern\onebasepoint\box\scratchbox}% weird correction
+ \setbox\scratchbox\hpack{\kern\onebasepoint\box\scratchbox}% weird correction
\wd\scratchbox \dimexpr#5\onebasepoint-#3\onebasepoint+2\onebasepoint\relax
\ht\scratchbox #6\onebasepoint
\dp\scratchbox-#4\onebasepoint
- \pdfxform
+ \saveboxresource
attr {/Group << /S /Transparency /I \ifnum#1=1 true \else false \fi /K \ifnum#1=1 true \else false \fi >>}
resources {\pdfbackendcurrentresources}
\scratchbox
- \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\pdfrefxform\pdflastxform\egroup
- \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\pdfrefxform\pdflastxform\egroup
+ % \setbox\scratchbox\hbox\bgroup\kern-\onebasepoint\useboxresource\lastsavedboxresourceindex\egroup % why twice?
+ \setbox\scratchbox\hpack\bgroup\kern-\onebasepoint\useboxresource\lastsavedboxresourceindex\egroup
\wd\scratchbox\zeropoint
\ht\scratchbox\zeropoint
\dp\scratchbox\zeropoint
@@ -148,7 +148,7 @@
\unexpanded\def\MPLIBstartgroup#1#2#3#4#5#6% isolated 0/1, knockout 0/1 llx lly urx ury
{\begingroup
- \setbox\scratchbox\hbox\bgroup
+ \setbox\scratchbox\hpack\bgroup
\unexpanded\def\MPLIBstopgroup{\doMPLIBstopgroup{#1}{#2}{#3}{#4}{#5}{#6}}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mlib-run.lua b/Master/texmf-dist/tex/context/base/mkiv/mlib-run.lua
index 121c32ae95a..8109cff2d21 100644
--- a/Master/texmf-dist/tex/context/base/mlib-run.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mlib-run.lua
@@ -128,7 +128,9 @@ do
local function i_finder(name,mode,ftype) -- fake message for mpost.map and metafun.mpvi
local specification = url.hashed(name)
local finder = finders[specification.scheme] or finders.file
- return finder(specification,name,mode,validftype(ftype))
+ local found = finder(specification,name,mode,validftype(ftype))
+ -- print(found)
+ return found
end
local function o_finder(name,mode,ftype)
@@ -523,7 +525,7 @@ end
-- goodie
-function metapost.quickanddirty(mpxformat,data)
+function metapost.quickanddirty(mpxformat,data,plugmode)
if not data then
mpxformat = "metafun"
data = mpxformat
@@ -543,7 +545,7 @@ function metapost.quickanddirty(mpxformat,data)
end
}
local data = formatters["; beginfig(1) ;\n %s\n ; endfig ;"](data)
- metapost.process(mpxformat, { data }, false, flusher, false, false, "all")
+ metapost.process(mpxformat, { data }, false, flusher, false, false, "all", plugmode)
if code then
return {
bbox = bbox or { 0, 0, 0, 0 },
@@ -571,3 +573,45 @@ function metapost.getstatistics(memonly)
return t
end
end
+
+do
+
+ local result = { }
+ local width = 0
+ local height = 0
+ local depth = 0
+ local mpx = false
+
+ local flusher = {
+ startfigure = function(n,llx,lly,urx,ury)
+ result = { }
+ width = urx - llx
+ height = ury
+ depth = -lly
+ end,
+ flushfigure = function(t)
+ for i=1,#t do
+ result[#result+1] = t[i]
+ end
+ end,
+ stopfigure = function()
+ end
+ }
+
+ function metapost.simple(format,code) -- even less than metapost.quickcanddirty
+ local mpx = metapost.format(format or "metafun","metafun")
+ -- metapost.setoutercolor(2)
+ metapost.process(mpx,
+ { "beginfig(1);", code, "endfig;" },
+ false, flusher, false, false, 1, true -- last true is plugmode !
+ )
+ if result then
+ local stream = concat(result," ")
+ result = nil -- cleanup
+ return stream, width, height, depth
+ else
+ return "", 0, 0, 0
+ end
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-arrange.tex
index fb53406d800..a3e6e9db3d1 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-arrange.tex
@@ -31,7 +31,6 @@
%
% end help
-
\input mtx-context-common.tex
\doifdocumentargument {paperoffset} {
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-combine.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-combine.tex
index 05e31d80087..05e31d80087 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-combine.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-combine.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-common.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-common.tex
index 2db0a5be2ae..2db0a5be2ae 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-common.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-common.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-copy.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-copy.tex
index b798b3f8d16..b798b3f8d16 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-copy.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-copy.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-ideas.tex
index d10eefc7684..d10eefc7684 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-ideas.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-listing.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-listing.tex
index 583aa2b8f95..2deffd7958e 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-listing.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-listing.tex
@@ -24,7 +24,8 @@
% --scite : pretty print comform suffix using scite lexer
% --bodyfont=list : additional bodyfont settings
% --paperformat=spec : paper*print or paperxprint
-% --compact : small margins, small font
+% --compact : small margins, 8pt font
+% --verycompact : small margins, 7pt font
%
% end help
@@ -36,6 +37,12 @@
\setdocumentargument{bodyfont} {8pt}
}
+\doifdocumentargument {verycompact} {
+ \setdocumentargument{topspace} {5mm}
+ \setdocumentargument{backspace}{5mm}
+ \setdocumentargument{bodyfont} {7pt}
+}
+
\setupbodyfont
[dejavu,11pt,tt,\getdocumentargument{bodyfont}] % dejavu is more complete
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-markdown.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-markdown.tex
index 1bd57945f21..1bd57945f21 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-markdown.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-markdown.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-precache.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-precache.tex
index 9cbb46cf2c5..9cbb46cf2c5 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-precache.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-precache.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-select.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-select.tex
index 2f63f595513..2f63f595513 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-select.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-select.tex
diff --git a/Master/texmf-dist/tex/context/base/mkiv/mtx-context-setups.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-setups.tex
new file mode 100644
index 00000000000..be99211ba1b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-setups.tex
@@ -0,0 +1,78 @@
+%D \module
+%D [ file=mtx-context-setups,
+%D version=2016.04.05,
+%D title=\CONTEXT\ Command Overvews,
+%D subtitle=Combine Files,
+%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.
+
+% begin help
+%
+% usage: context --extra=setups [options] [categories]
+%
+% --interface : user interface (en, nl, etc)
+% --overview [--save] : use collection of files
+% --list : show know collections
+%
+% end help
+
+\input mtx-context-common.tex
+
+\starttext
+
+\startluacode
+ local report_setups = logs.reporter("setups")
+
+ context.starttext()
+
+ if document.arguments.list then
+ local okay = resolvers.findfile("context.mkiv") or "" -- will become an i file
+ if okay ~= "" then
+ okay = file.collapsepath(okay,true)
+ okay = string.gsub(okay,"/base/","/interface/")
+ okay = string.gsub(okay,"/sources/","/interface/")
+ local path = file.pathpart(okay)
+ local pattern = file.join(path,"i-*.xml")
+ local files = dir.glob(pattern)
+ local valid = { }
+ table.sort(files)
+ for i=1,#files do
+ local name = file.nameonly(files[i])
+ local base = string.match(name,"^i%-([a-z]+)$")
+ if base then
+ valid[#valid+1] = base
+ end
+ end
+ if #valid > 0 then
+ report_setups("% t",valid)
+ end
+ context.bold("available setup groups: ")
+ context("%, t.",valid)
+ end
+ elseif document.arguments.overview then
+ if document.arguments.save then
+ context.enablemode { "setups:save" }
+ end
+ context.input("x-setups-overview.mkiv")
+ elseif #document.files > 0 then
+ context.usemodule { "x-setups-basics" }
+ for i=1,#document.files do
+ local filename = "i-" .. document.files[i]
+ report_setups("processing %a",filename)
+ context.loadsetups { filename }
+ end
+ context.input("x-setups-proofing.mkiv")
+ else
+ context("no setups")
+ end
+
+ context.stoptext()
+\stopluacode
+
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-sql.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-sql.tex
index 16613c2453a..16613c2453a 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-sql.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-sql.tex
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-timing.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-timing.tex
index c545c768f97..c545c768f97 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-timing.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-timing.tex
diff --git a/Master/texmf-dist/tex/context/base/mkiv/mtx-context-trim.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-trim.tex
new file mode 100644
index 00000000000..46d0c31886b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-trim.tex
@@ -0,0 +1,72 @@
+%D \module
+%D [ file=mtx-context-trim,
+%D version=2016.03.04,
+%D title=\CONTEXT\ Extra Trickry,
+%D subtitle=Trimming Files,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a very old module based feature that has been moved to \MKIV.
+
+% begin help
+%
+% usage: context --extra=trim [options] filename
+%
+% --paperwidth : target paperwidth
+% --paperheight : target paperheight
+% --file : processed file
+% --x : page x offset
+% --y : page y offset
+% --hoffset : horizontal clip offset
+% --voffset : vertical clip offset
+% --width : clip width
+% --height : clip height
+%
+% example: context --extra=trim --file=trimtest --hoffset=3.50cm --voffset=3.50cm --width=15cm --height=21cm
+%
+% end help
+
+\input mtx-context-common.tex
+
+\setdocumentargumentdefault {paperwidth} {21cm}
+\setdocumentargumentdefault {paperheight} {29.7cm}
+\setdocumentargumentdefault {file} {\getdocumentfilename{1}}
+\setdocumentargumentdefault {hoffset} {0cm}
+\setdocumentargumentdefault {voffset} {0cm}
+\setdocumentargumentdefault {width} {17cm}
+\setdocumentargumentdefault {height} {24cm}
+\setdocumentargumentdefault {x} {0cm}
+\setdocumentargumentdefault {y} {0cm}
+
+\doifnothing{\getdocumentargument{file}} {\starttext missing filename \stoptext}
+\doif {\getdocumentargument{file}}{\inputfilename.tex}{\starttext missing filename \stoptext}
+
+\definepapersize
+ [fuzzy]
+ [width=\getdocumentargument{paperwidth},
+ height=\getdocumentargument{paperheight}]
+
+\setuppapersize
+ [fuzzy]
+ [fuzzy]
+
+\setuplayout
+ [page]
+
+\starttext
+
+ \trimpages
+ [file=\getdocumentargument{file},
+ hoffset=\getdocumentargument{hoffset},
+ voffset=\getdocumentargument{voffset},
+ width=\getdocumentargument{width},
+ height=\getdocumentargument{height},
+ x=\getdocumentargument{x},
+ y=\getdocumentargument{y}]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-xml.tex b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-xml.tex
index eeaca321340..eeaca321340 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-xml.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/mtx-context-xml.tex
diff --git a/Master/texmf-dist/tex/context/base/mult-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua
index 353b5e69c3a..353b5e69c3a 100644
--- a/Master/texmf-dist/tex/context/base/mult-aux.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua
diff --git a/Master/texmf-dist/tex/context/base/mult-aux.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.mkiv
index b69d7f37068..d44c0242ee4 100644
--- a/Master/texmf-dist/tex/context/base/mult-aux.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.mkiv
@@ -29,6 +29,8 @@
\unprotect
+\edef\??empty{\Uchar25} \letvalue{\Uchar25}\empty % cancel: dec:24 hex:18
+
%D \starttyping
%D \unprotect
%D \def\????aa{@@@@aa}
@@ -215,13 +217,15 @@
%\def#3##1{\csname#4{#1#2}{##1}\endcsname}%
\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\s!empty\else#4{##1}{##2}\fi}% is {} needed around ##1 ?
+ %\def#5##1##2{\ifx##1\relax\s!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#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#7##1{\mult_interfaces_detokenize{\csname#4{#1#2}{##1}\endcsname}}% compact version
% \def#7##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#8##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\s!empty\fi\endcsname}%
- \def#9##1{\csname#1#2:##1\endcsname}}
+%% \def#8##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\s!empty\fi\endcsname}%
+ \def#8##1{\begincsname#1#2:##1\endcsname}%
+ \def#9##1{\csname#1#2:##1\endcsname}} % can go when we use \begincsname
% pre-expansion can be a bit faster but handly any effect on a normal run so let's go for
% saving some memory
@@ -254,7 +258,9 @@
\unexpanded\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{\csname\ifcsname#1:##1\endcsname#1:##1\else\s!empty\fi\endcsname}}
+ %\def#3##1{\csname\ifcsname#1:##1\endcsname#1:##1\else\s!empty\fi\endcsname}}
+ %\def#3##1{\csname\ifcsname#1:##1\endcsname#1:##1\else\??empty\fi\endcsname}}
+ \def#3##1{\begincsname#1:##1\endcsname}}
\unexpanded\def\installrootparameterhandler#1#2%
{\normalexpanded
@@ -355,10 +361,13 @@
\expandafter\edef\csname#1#4:\s!parent\endcsname{#2}%
\fi \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{\csname#1#2:\s!chain\endcsname} % for the moment test:
-\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\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}
\unexpanded\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
@@ -610,7 +619,8 @@
%D We don't need colons for such simple cases.
\unexpanded\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{\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{\csname#1##1\endcsname}}
@@ -703,6 +713,9 @@
\unexpanded\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance}
{\expandafter\edef\csname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}}
+\unexpanded\def\relateparameterhandlersbyns#1#2#3#4% {from} {instance} {to} {instance}
+ {\expandafter\edef\csname#1#2:\s!parent\endcsname{#3#4}}
+
%D Here is another experiment:
\unexpanded\def\installactionhandler#1%
@@ -802,7 +815,8 @@
\letvalue\??dummy\empty
- \def\dummyparameter #1{\csname\??dummy\ifcsname\??dummy#1\endcsname#1\fi\endcsname}
+%% \def\dummyparameter #1{\csname\??dummy\ifcsname\??dummy#1\endcsname#1\fi\endcsname}
+ \def\dummyparameter #1{\begincsname\??dummy#1\endcsname}
\def\directdummyparameter#1{\csname\??dummy#1\endcsname}
\unexpanded\def\setdummyparameter #1{\expandafter\def\csname\??dummy#1\endcsname}
\unexpanded\def\letdummyparameter #1{\expandafter\let\csname\??dummy#1\endcsname}
@@ -883,10 +897,17 @@
\unexpanded\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\csname#1:\s!parent\endcsname
+ \expandafter\mult_interfaces_show_parent_chain\lastnamedcs
\fi}
%D Another helper (needs to be applied):
@@ -991,7 +1012,7 @@
\unexpanded\def#5{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it
\newtoks#4%
\newtoks#7%
- \edef\m_mult_interface_setup{\strippedcsname#2_}%
+ \edef\m_mult_interface_setup{\csstring#2_}%
\unexpanded\edef#2{\syst_helpers_double_empty
\csname\m_mult_interface_setup\s!simple\endcsname
\csname\m_mult_interface_setup\s!single\endcsname
@@ -1081,7 +1102,7 @@
{\ifx#3\relax\let#3\empty\fi
\unexpanded\def#5{\mult_interfaces_get_parameters{#1#3:}}%
\newtoks#4%
- \edef\m_mult_interface_setup{\strippedcsname#2_}%
+ \edef\m_mult_interface_setup{\csstring#2_}%
\unexpanded\edef#2{\syst_helpers_triple_empty
\csname\m_mult_interface_setup\s!simple\endcsname
\csname\m_mult_interface_setup\s!single\endcsname
diff --git a/Master/texmf-dist/tex/context/base/mult-chk.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-chk.lua
index 44a9f739f9e..44a9f739f9e 100644
--- a/Master/texmf-dist/tex/context/base/mult-chk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-chk.lua
diff --git a/Master/texmf-dist/tex/context/base/mult-chk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-chk.mkiv
index 9208a73e1e5..9208a73e1e5 100644
--- a/Master/texmf-dist/tex/context/base/mult-chk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-chk.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mult-def.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua
index c0831de2d95..0d0c30c3054 100644
--- a/Master/texmf-dist/tex/context/base/mult-def.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua
@@ -7,6 +7,8 @@ if not modules then modules = { } end modules ['mult-def'] = {
dataonly = true,
}
+-- we can remove some commands, like inleftmargin and so (see typo-mar.mkiv)
+
return {
["commands"]={
["CAPPED"]={
@@ -39,16 +41,6 @@ return {
["pe"]="Characters",
["ro"]="Litere",
},
---~ ["LABELTEXT"]={
---~ ["cs"]="TEXTPOPISKU",
---~ ["de"]="LABELTEXT",
---~ ["en"]="LABELTEXT",
---~ ["fr"]="LABELTEXTE",
---~ ["it"]="TESTOETICHETTA",
---~ ["nl"]="LABELTEKST",
---~ ["pe"]="LABELTEXT",
---~ ["ro"]="TEXTETICHETA",
---~ },
["MONTH"]={
["cs"]="MESIC",
["de"]="MONAT",
@@ -169,8 +161,7 @@ return {
["pe"]="تنظیم‌طرح‌بندی",
["ro"]="adapteazaaspect",
},
- ["adding"]={
- },
+ ["adding"]={},
["arg"]={
["cs"]="arg",
["de"]="arg",
@@ -1275,10 +1266,6 @@ return {
["pe"]="تعریف‌مترادفها",
["ro"]="definestesinonim",
},
- ["placelistofsynonyms"]={
- ["en"]="placelistofsynonyms",
- ["nl"]="plaatslijstmetsynoniemen",
- },
["definetabletemplate"]={
["cs"]="definujsablonutabulky",
["de"]="definieretabellenvorlage",
@@ -1309,6 +1296,10 @@ return {
["pe"]="تعریف‌متن",
["ro"]="definestetext",
},
+ ["definetextbackground"]={
+ ["en"]="definetextbackground",
+ ["nl"]="definieertekstachtergrond",
+ },
["definetextposition"]={
["cs"]="definetextposition",
["de"]="definetextposition",
@@ -2909,16 +2900,6 @@ return {
["pe"]="نقطه‌ها",
["ro"]="puncte",
},
- ["placerawlist"]={
- ["cs"]="placerawlist",
- ["de"]="placerawlist",
- ["en"]="placerawlist",
- ["fr"]="placerawlist",
- ["it"]="placerawlist",
- ["nl"]="plaatsruwelijst",
- ["pe"]="درج‌لیست‌خام",
- ["ro"]="placerawlist",
- },
["placebookmarks"]={
["cs"]="umistizalozky",
["de"]="platzierebookmarks",
@@ -3009,6 +2990,10 @@ return {
["pe"]="درج‌لیست",
["ro"]="punelista",
},
+ ["placelistofsynonyms"]={
+ ["en"]="placelistofsynonyms",
+ ["nl"]="plaatslijstmetsynoniemen",
+ },
["placelocalfootnotes"]={
["cs"]="umistilokalnipoznamkypodcarou",
["de"]="platzierelokalefussnoten",
@@ -3059,7 +3044,17 @@ return {
["pe"]="درج‌شماره‌صفحه",
["ro"]="punenumarpagina",
},
- ["placereferencelist"]={ -- not in mkiv
+ ["placerawlist"]={
+ ["cs"]="placerawlist",
+ ["de"]="placerawlist",
+ ["en"]="placerawlist",
+ ["fr"]="placerawlist",
+ ["it"]="placerawlist",
+ ["nl"]="plaatsruwelijst",
+ ["pe"]="درج‌لیست‌خام",
+ ["ro"]="placerawlist",
+ },
+ ["placereferencelist"]={
["cs"]="placereferencelist",
["de"]="placereferencelist",
["en"]="placereferencelist",
@@ -4683,6 +4678,10 @@ return {
["pe"]="بارگذاری‌متن",
["ro"]="seteazatext",
},
+ ["setuptextbackground"]={
+ ["en"]="setuptextbackground",
+ ["nl"]="steltekstachtergrondin",
+ },
["setuptextposition"]={
["cs"]="setuptextposition",
["de"]="setuptextposition",
@@ -5033,30 +5032,6 @@ return {
["pe"]="شروع‌تنظیم",
["ro"]="startaliniere",
},
- ["starttextbackground"]={
- ["en"]="starttextbackground",
- ["nl"]="starttekstachtergrond",
- },
- ["stoptextbackground"]={
- ["en"]="stoptextbackground",
- ["nl"]="stoptekstachtergrond",
- },
- ["setuptextbackground"]={
- ["en"]="setuptextbackground",
- ["nl"]="steltekstachtergrondin",
- },
- ["definetextbackground"]={
- ["en"]="definetextbackground",
- ["nl"]="definieertekstachtergrond",
- },
- ["startframed"]={
- ["en"]="startframed",
- ["nl"]="startomlijnd",
- },
- ["stopframed"]={
- ["en"]="stopframed",
- ["nl"]="stopomlijnd",
- },
["startbackground"]={
["cs"]="startpozadi",
["de"]="starthintergrund",
@@ -5167,6 +5142,10 @@ return {
["pe"]="شروع‌شکل",
["ro"]="startfigura",
},
+ ["startframed"]={
+ ["en"]="startframed",
+ ["nl"]="startomlijnd",
+ },
["startglobal"]={
["cs"]="startglobalni",
["de"]="startglobal",
@@ -5427,6 +5406,10 @@ return {
["pe"]="شروع‌متن",
["ro"]="starttext",
},
+ ["starttextbackground"]={
+ ["en"]="starttextbackground",
+ ["nl"]="starttekstachtergrond",
+ },
["starttextrule"]={
["cs"]="starttextovalinka",
["de"]="starttextlinie",
@@ -5567,6 +5550,10 @@ return {
["pe"]="پایان‌محیط",
["ro"]="stopmediu",
},
+ ["stopframed"]={
+ ["en"]="stopframed",
+ ["nl"]="stopomlijnd",
+ },
["stopglobal"]={
["cs"]="stopglobalni",
["de"]="stopglobal",
@@ -5817,6 +5804,10 @@ return {
["pe"]="پایان‌متن",
["ro"]="stoptext",
},
+ ["stoptextbackground"]={
+ ["en"]="stoptextbackground",
+ ["nl"]="stoptekstachtergrond",
+ },
["stoptextrule"]={
["cs"]="stoptextovalinka",
["de"]="stoptextlinie",
@@ -5907,10 +5898,6 @@ return {
["pe"]="نم",
["ro"]="sim",
},
- ["symoffset"]={
- ["en"]="symoffset",
- ["nl"]="symoffset",
- },
["symbol"]={
["cs"]="symbol",
["de"]="symbol",
@@ -5921,6 +5908,10 @@ return {
["pe"]="نماد",
["ro"]="simbol",
},
+ ["symoffset"]={
+ ["en"]="symoffset",
+ ["nl"]="symoffset",
+ },
["synchronizationbar"]={
["cs"]="synchronizacnilista",
["de"]="synchronisationsbalken",
@@ -6472,241 +6463,9 @@ return {
},
},
["constants"]={
- ["setups"]={
- ["comment"]="no translations",
- ["en"]="setups",
- },
- -- select/simplefonts
- ["regularfont"] ={ ["en"]="regularfont" },
- ["boldfont"] ={ ["en"]="boldfont" },
- ["italicfont"] ={ ["en"]="italicfont" },
- ["slantedfont"] ={ ["en"]="slantedfont" },
- ["bolditalicfont"] ={ ["en"]="bolditalicfont" },
- ["boldslantedfont"] ={ ["en"]="boldslantedfont" },
- ["smallcapsfont"] ={ ["en"]="smallcapsfont" },
- ["features"] ={ ["en"]="features" },
- ["regularfeatures"] ={ ["en"]="regularfeatures" },
- ["boldfeatures"] ={ ["en"]="boldfeatures" },
- ["italicfeatures"] ={ ["en"]="italicfeatures" },
- ["slantedfeatures"] ={ ["en"]="slantedfeatures" },
- ["bolditalicfeatures"] ={ ["en"]="bolditalicfeatures" },
- ["boldslantedfeatures"]={ ["en"]="boldslantedfeatures" },
- ["smallcapsfeatures"] ={ ["en"]="smallcapsfeatures" },
- ["opticalsize"] ={ ["en"]="opticalsize" },
- ["goodies"] ={ ["en"]="goodies" },
- ["check"] ={ ["en"]="check" },
- --
- ["separatorcolor"]={
- ["en"]="separatorcolor",
- ["nl"]="scheiderkleur",
- },
- ["separatorstyle"]={
- ["en"]="separatorstyle",
- ["nl"]="scheiderletter",
- },
- ["less"]={
- ["en"]="less",
- ["nl"]="minder",
- },
- ["more"]={
- ["en"]="more",
- ["nl"]="meer",
- },
- ["solution"]={
- ["en"]="solution",
- ["nl"]="oplossing",
- },
- ["anchor"]={
- ["en"]="anchor",
- ["nl"]="anker",
- },
- ["buffer"]={
- ["en"]="buffer",
- },
- ["dash"]={
- ["en"]="dash",
- ["nl"]="streep",
- },
- ["export"] = {
- ["en"]="export",
- },
- ["cssfile"] = {
- ["en"]="cssfile",
- },
- ["xhtml"] = {
- ["en"]="xhtml",
- },
- ["entities"]={
- ["en"]="entities",
- ["nl"]="entities",
- },
- ["labeloffset"]={
- ["en"]="labeloffset",
- },
- ["exitoffset"]={
- ["en"]="exitoffset",
- },
- ["commentoffset"]={
- ["en"]="commentoffset",
- },
- ["hcompact"]={
- ["en"]="hcompact",
- ["nl"]="hcomprimeer",
- },
- ["vcompact"]={
- ["en"]="vcompact",
- ["nl"]="vcomprimeer",
- },
- ["keys"]={
- ["en"]="keys",
- ["nl"]="sleutels", -- brrr
- },
- ["entries"]={
- ["en"]="entries",
- ["nl"]="ingangen",
- },
- ["strip"]={
- ["en"]="strip",
- },
- ["order"]={
- ["en"]="order",
- ["nl"]="volgorde",
- },
- ["compact"]={
- ["en"]="compact",
- ["nl"]="compact",
- },
- ["headalign"]={
- ["en"]="headalign",
- ["nl"]="kopuitlijnen",
- },
- ["numberalign"]={
- ["en"]="numberalign",
- ["nl"]="nummeruitlijnen",
- },
- ["alignsymbol"]={
- ["en"]="alignsymbol",
- },
- ["export"]={
- ["en"]="export",
- ["nl"]="exporteer",
- },
- ["database"]={
- ["en"]="database",
- },
- ["artauthor"]={
- ["en"]="artauthor",
- },
- ["editor"]={
- ["en"]="editor",
- },
- ["authoretallimit"]={
- ["en"]="authoretallimit",
- },
- ["artauthoretallimit"]={
- ["en"]="artauthoretallimit",
- },
- ["editoretallimit"]={
- ["en"]="editoretallimit",
- },
- ["authoretaldisplay"]={
- ["en"]="authoretaldisplay",
- },
- ["artauthoretaldisplay"]={
- ["en"]="artauthoretaldisplay",
- },
- ["editoretaldisplay"]={
- ["en"]="editoretaldisplay",
- },
- ["authoretaltext"]={
- ["en"]="authoretaltext",
- },
- ["artauthoretaltext"]={
- ["en"]="artauthoretaltext",
- },
- ["editoretaltext"]={
- ["en"]="editoretaltext",
- },
- ["otherstext"]={
- ["en"]="otherstext",
- },
- ["andtext"]={
- ["en"]="andtext",
- },
- ["totalnumber"]={
- ["en"]="totalnumber",
- },
- ["firstnamesep"]={
- ["en"]="firstnamesep",
- },
- ["surnamefirstnamesep"]={
- ["en"]="surnamefirstnamesep",
- },
- ["vonsep"]={
- ["en"]="vonsep",
- },
- ["juniorsep"]={
- ["en"]="juniorsep",
- },
- ["surnamesep"]={
- ["en"]="surnamesep",
- },
- ["initialsep"]={
- ["en"]="initialsep",
- },
- ["surnameinitialsep"]={
- ["en"]="surnameinitialsep",
- },
- ["lastnamesep"]={
- ["en"]="lastnamesep",
- },
- ["finalnamesep"]={
- ["en"]="finalnamesep",
- },
- ["namesep"]={
- ["en"]="namesep",
- },
- ["pubsep"]={
- ["en"]="pubsep",
- },
- ["lastpubsep"]={
- ["en"]="lastpubsep",
- },
- ["finalpubsep"]={
- ["en"]="finalpubsep",
- },
- ["refcommand"]={
- ["en"]="refcommand",
- },
- ["samplesize"]={
- ["en"]="samplesize",
- },
- ["maybeyear"]={
- ["en"]="maybeyear",
- },
---["group"]={
--- ["en"]="group",
--- ["nl"]="groep",
---},
- ["values"]={
- ["en"]="values",
- ["nl"]="waarden",
- },
- ["layout"]={
- ["en"]="layout",
- ["nl"]="layout",
- },
- ["topcommand"]={
- ["en"]="topcommand",
- ["nl"]="bovencommando",
- },
- ["middlecommand"]={
- ["en"]="middlecommand",
- ["nl"]="middencommando",
- },
- ["bottomcommand"]={
- ["en"]="bottomcommand",
- ["nl"]="ondercommando",
+ ["fractions"]={
+ ["en"]="fractions",
+ ["nl"]="breuken",
},
["action"]={
["cs"]="akce",
@@ -6748,10 +6507,6 @@ return {
["pe"]="بعدازسر",
["ro"]="dupatitlu",
},
- ["aftersection"]={
- ["en"]="aftersection",
- ["nl"]="nasectie",
- },
["afterkey"]={
["cs"]="klavesapo",
["de"]="nachtaste",
@@ -6762,6 +6517,10 @@ return {
["pe"]="بعدازکلید",
["ro"]="dupatasta",
},
+ ["aftersection"]={
+ ["en"]="aftersection",
+ ["nl"]="nasectie",
+ },
["align"]={
["cs"]="zarovnani",
["de"]="ausrichtung",
@@ -6792,6 +6551,9 @@ return {
["pe"]="حرف‌تنظیم‌کردن",
["ro"]="alierecaracter",
},
+ ["alignsymbol"]={
+ ["en"]="alignsymbol",
+ },
["aligntitle"]={
["cs"]="zarovnejtitul",
["de"]="titelausrichten",
@@ -6812,6 +6574,13 @@ return {
["pe"]="جایگزین",
["ro"]="alternativ",
},
+ ["anchor"]={
+ ["en"]="anchor",
+ ["nl"]="anker",
+ },
+ ["andtext"]={
+ ["en"]="andtext",
+ },
["apa"]={
["cs"]="apa",
["de"]="apa",
@@ -6832,6 +6601,21 @@ return {
["pe"]="پیکان",
["ro"]="sageata",
},
+ ["artauthor"]={
+ ["en"]="artauthor",
+ },
+ ["artauthoretaldisplay"]={
+ ["en"]="artauthoretaldisplay",
+ },
+ ["artauthoretallimit"]={
+ ["en"]="artauthoretallimit",
+ },
+ ["artauthoretaltext"]={
+ ["en"]="artauthoretaltext",
+ },
+ ["artoffset"]={
+ ["en"]="artoffset",
+ },
["at"]={
["cs"]="u",
["de"]="bei",
@@ -6852,6 +6636,18 @@ return {
["pe"]="نویسنده",
["ro"]="autor",
},
+ ["authorconversion"]={
+ ["en"]="authorconversion",
+ },
+ ["authoretaldisplay"]={
+ ["en"]="authoretaldisplay",
+ },
+ ["authoretallimit"]={
+ ["en"]="authoretallimit",
+ },
+ ["authoretaltext"]={
+ ["en"]="authoretaltext",
+ },
["auto"]={
["cs"]="auto",
["de"]="auto",
@@ -6916,6 +6712,14 @@ return {
["pe"]="عرض‌خودکار",
["ro"]="autolatime",
},
+ ["availableheight"]={
+ ["en"]="availableheight",
+ ["nl"]="beschikbarehoogte",
+ },
+ ["availablewidth"]={
+ ["en"]="availablewidth",
+ ["nl"]="beschikbarebreedte",
+ },
["axis"]={
["cs"]="osa",
["de"]="achsen",
@@ -6996,6 +6800,10 @@ return {
["pe"]="پرده‌پس‌زمینه",
["ro"]="ecranfundal",
},
+ ["backreference"]={
+ ["en"]="backreference",
+ ["nl"]="terugreferentie",
+ },
["backspace"]={
["cs"]="zpetnamezera",
["de"]="rumpfspatium",
@@ -7006,10 +6814,6 @@ return {
["pe"]="فضای‌پس",
["ro"]="spatiuspate",
},
- ["backreference"]={
- ["en"]="backreference",
- ["nl"]="terugreferentie",
- },
["balance"]={
["cs"]="rovnovaha",
["de"]="ausgleichen",
@@ -7030,14 +6834,6 @@ return {
["pe"]="قبل‌از",
["ro"]="inainte",
},
- ["beforesection"]={
- ["en"]="beforesection",
- ["nl"]="voorsectie",
- },
- ["insidesection"]={
- ["en"]="insidesection",
- ["nl"]="binnensectie",
- },
["beforehead"]={
["cs"]="predhlavickou",
["de"]="vorkopf",
@@ -7048,9 +6844,9 @@ return {
["pe"]="قبل‌ازسر",
["ro"]="inaintetitlu",
},
- ["concerns"]={
- ["en"]="concerns",
- ["nl"]="betreft",
+ ["beforesection"]={
+ ["en"]="beforesection",
+ ["nl"]="voorsectie",
},
["bet"]={
["cs"]="bet",
@@ -7085,6 +6881,9 @@ return {
["pe"]="خالی",
["ro"]="blanc",
},
+ ["bleedoffset"]={
+ ["en"]="bleedoffset",
+ },
["blockway"]={
["cs"]="dobloku",
["de"]="blockauf",
@@ -7105,6 +6904,27 @@ return {
["pe"]="قلم‌بدنه",
["ro"]="fonttext",
},
+ ["boffset"]={
+ ["en"]="boffset",
+ },
+ ["boldfeatures"]={
+ ["en"]="boldfeatures",
+ },
+ ["boldfont"]={
+ ["en"]="boldfont",
+ },
+ ["bolditalicfeatures"]={
+ ["en"]="bolditalicfeatures",
+ },
+ ["bolditalicfont"]={
+ ["en"]="bolditalicfont",
+ },
+ ["boldslantedfeatures"]={
+ ["en"]="boldslantedfeatures",
+ },
+ ["boldslantedfont"]={
+ ["en"]="boldslantedfont",
+ },
["bookmark"]={
["cs"]="zalozka",
["de"]="bookmark",
@@ -7131,6 +6951,10 @@ return {
["bottombefore"]={
["en"]="bottombefore",
},
+ ["bottomcommand"]={
+ ["en"]="bottomcommand",
+ ["nl"]="ondercommando",
+ },
["bottomdistance"]={
["cs"]="vzdalenostspodku",
["de"]="abstandunten",
@@ -7219,6 +7043,15 @@ return {
["pe"]="فرمان",
["ro"]="comandac",
},
+ ["character"]={
+ ["en"]="character",
+ },
+ ["characters"]={
+ ["en"]="characters",
+ },
+ ["check"]={
+ ["en"]="check",
+ },
["click"]={
["cs"]="klik",
["de"]="klick",
@@ -7279,6 +7112,10 @@ return {
["pe"]="بستن‌فرمان",
["ro"]="closecommand",
},
+ ["closepage"]={
+ ["en"]="closepage",
+ ["nl"]="sluitpagina",
+ },
["closepageaction"]={
["cs"]="akcezavrenistranky",
["de"]="closepageaction",
@@ -7289,10 +7126,6 @@ return {
["pe"]="بستن‌عمل‌صفحه",
["ro"]="actiuneinchiderepagina",
},
- ["closepage"]={
- ["en"]="closepage",
- ["nl"]="sluitpagina",
- },
["closesymbol"]={
["cs"]="closesymbol",
["de"]="closesymbol",
@@ -7313,9 +7146,6 @@ return {
["pe"]="رنگ",
["ro"]="culoare",
},
- ["intent"]={
- ["en"]="intent",
- },
["column"]={
["cs"]="sloupec",
["de"]="spalte",
@@ -7346,6 +7176,9 @@ return {
["pe"]="ستونها",
["ro"]="coloane",
},
+ ["comma"]={
+ ["en"]="comma",
+ },
["command"]={
["cs"]="prikaz",
["de"]="befehl",
@@ -7386,6 +7219,19 @@ return {
["pe"]="فرمانها",
["ro"]="comenzi",
},
+ ["comment"]={
+ ["en"]="comment",
+ },
+ ["commentchar"]={
+ ["en"]="commentchar",
+ },
+ ["commentoffset"]={
+ ["en"]="commentoffset",
+ },
+ ["compact"]={
+ ["en"]="compact",
+ ["nl"]="compact",
+ },
["component"]={
["cs"]="component",
["de"]="component",
@@ -7416,6 +7262,13 @@ return {
["pe"]="فشردن",
["ro"]="compress",
},
+ ["compressseparator"]={
+ ["en"]="compressseparator",
+ },
+ ["concerns"]={
+ ["en"]="concerns",
+ ["nl"]="betreft",
+ },
["connector"]={
["en"]="connector",
},
@@ -7509,6 +7362,12 @@ return {
["pe"]="criterium",
["ro"]="criteriu",
},
+ ["cropoffset"]={
+ ["en"]="cropoffset",
+ },
+ ["cssfile"]={
+ ["en"]="cssfile",
+ },
["current"]={
["cs"]="aktualni",
["de"]="aktuell",
@@ -7549,6 +7408,12 @@ return {
["pe"]="dat",
["ro"]="dat",
},
+ ["database"]={
+ ["en"]="database",
+ },
+ ["dataset"]={
+ ["en"]="dataset",
+ },
["date"]={
["cs"]="datum",
["de"]="datum",
@@ -7649,10 +7514,6 @@ return {
["pe"]="نمایش",
["ro"]="display",
},
- ["mask"]={
- ["en"]="mask",
- ["nl"]="masker",
- },
["distance"]={
["cs"]="vzdalenost",
["de"]="abstand",
@@ -7663,6 +7524,9 @@ return {
["pe"]="فاصله",
["ro"]="distanta",
},
+ ["domain"]={
+ ["en"]="domain",
+ },
["dot"]={
["cs"]="tecka",
["de"]="punkt",
@@ -7683,6 +7547,9 @@ return {
["pe"]="دورو",
["ro"]="douafete",
},
+ ["down"]={
+ ["en"]="down",
+ },
["dummy"]={
["cs"]="dummy",
["de"]="dummy",
@@ -7733,6 +7600,18 @@ return {
["pe"]="فاصله‌لبه",
["ro"]="distantabordura",
},
+ ["editor"]={
+ ["en"]="editor",
+ },
+ ["editoretaldisplay"]={
+ ["en"]="editoretaldisplay",
+ },
+ ["editoretallimit"]={
+ ["en"]="editoretallimit",
+ },
+ ["editoretaltext"]={
+ ["en"]="editoretaltext",
+ },
["empty"]={
["cs"]="prazdne",
["de"]="leer",
@@ -7743,6 +7622,14 @@ return {
["pe"]="تهی",
["ro"]="gol",
},
+ ["entities"]={
+ ["en"]="entities",
+ ["nl"]="entities",
+ },
+ ["entries"]={
+ ["en"]="entries",
+ ["nl"]="ingangen",
+ },
["equalheight"]={
["cs"]="equalheight",
["de"]="equalheight",
@@ -7773,6 +7660,18 @@ return {
["pe"]="فرار",
["ro"]="escape",
},
+ ["etaldisplay"]={
+ ["en"]="etaldisplay",
+ },
+ ["etallimit"]={
+ ["en"]="etallimit",
+ },
+ ["etaloption"]={
+ ["en"]="etaloption",
+ },
+ ["etaltext"]={
+ ["en"]="etaltext",
+ },
["evenmargin"]={
["cs"]="sudamarginalie",
["de"]="geraderand",
@@ -7783,6 +7682,9 @@ return {
["pe"]="حاشیه‌زوج",
["ro"]="marginepara",
},
+ ["exitoffset"]={
+ ["en"]="exitoffset",
+ },
["expansion"]={
["cs"]="expanzen",
["de"]="expansion",
@@ -7793,6 +7695,10 @@ return {
["pe"]="گسترش",
["ro"]="expansiune",
},
+ ["export"]={
+ ["en"]="export",
+ ["nl"]="exporteer",
+ },
["extras"]={
["cs"]="extras",
["de"]="extras",
@@ -7833,6 +7739,15 @@ return {
["pe"]="خانواده",
["ro"]="familie",
},
+ ["features"]={
+ ["en"]="features",
+ },
+ ["fences"]={
+ ["en"]="fences",
+ },
+ ["field"]={
+ ["en"]="field",
+ },
["fieldbackgroundcolor"]={
["cs"]="barvapozadipole",
["de"]="feldhintergrundfarbe",
@@ -7883,26 +7798,26 @@ return {
["pe"]="پرونده",
["ro"]="fisier",
},
+ ["filler"]={
+ ["en"]="filler",
+ },
["filtercommand"]={
["en"]="filtercommand",
},
- ["availablewidth"]={
- ["en"]="availablewidth",
- ["nl"]="beschikbarebreedte",
+ ["finalnamesep"]={
+ ["en"]="finalnamesep",
},
- ["availableheight"]={
- ["en"]="availableheight",
- ["nl"]="beschikbarehoogte",
+ ["finalpagesep"]={
+ ["en"]="finalpagesep",
},
- ["focus"]={
- ["cs"]="zaostreni",
- ["de"]="focus",
- ["en"]="focus",
- ["fr"]="focus",
- ["it"]="focus",
- ["nl"]="focus",
- ["pe"]="تمرکز",
- ["ro"]="focus",
+ ["finalpubsep"]={
+ ["en"]="finalpubsep",
+ },
+ ["first"]={
+ ["en"]="first",
+ },
+ ["firstnamesep"]={
+ ["en"]="firstnamesep",
},
["firstpage"]={
["cs"]="prvnistranka",
@@ -7914,6 +7829,16 @@ return {
["pe"]="صفحه‌اول",
["ro"]="primapagina",
},
+ ["focus"]={
+ ["cs"]="zaostreni",
+ ["de"]="focus",
+ ["en"]="focus",
+ ["fr"]="focus",
+ ["it"]="focus",
+ ["nl"]="focus",
+ ["pe"]="تمرکز",
+ ["ro"]="focus",
+ },
["focusin"]={
["cs"]="focusin",
["de"]="focusin",
@@ -7934,6 +7859,10 @@ return {
["pe"]="تمرکزبیرون",
["ro"]="focusout",
},
+ ["focusoffset"]={
+ ["en"]="focusoffset",
+ ["nl"]="focusoffset",
+ },
["footer"]={
["cs"]="upati",
["de"]="fusszeile",
@@ -7964,16 +7893,6 @@ return {
["pe"]="وضعیت‌ته‌برگ",
["ro"]="staresubsol",
},
- ["foregroundcolor"]={
- ["cs"]="foregroundcolor",
- ["de"]="foregroundcolor",
- ["en"]="foregroundcolor",
- ["fr"]="couleurpremierplan",
- ["it"]="coloreprimopiano",
- ["nl"]="voorgrondkleur",
- ["pe"]="رنگ‌پیش‌زمینه",
- ["ro"]="foregroundcolor",
- },
["force"]={
["cs"]="sila",
["de"]="zwinge",
@@ -7984,6 +7903,16 @@ return {
["pe"]="اجبار",
["ro"]="fortat",
},
+ ["foregroundcolor"]={
+ ["cs"]="foregroundcolor",
+ ["de"]="foregroundcolor",
+ ["en"]="foregroundcolor",
+ ["fr"]="couleurpremierplan",
+ ["it"]="coloreprimopiano",
+ ["nl"]="voorgrondkleur",
+ ["pe"]="رنگ‌پیش‌زمینه",
+ ["ro"]="foregroundcolor",
+ },
["foregroundstyle"]={
["cs"]="foregroundstyle",
["de"]="foregroundstyle",
@@ -8084,6 +8013,12 @@ return {
["pe"]="از",
["ro"]="dela",
},
+ ["functioncolor"]={
+ ["en"]="functioncolor",
+ },
+ ["functionstyle"]={
+ ["en"]="functionstyle",
+ },
["get"]={
["cs"]="ziskat",
["de"]="hole",
@@ -8104,6 +8039,9 @@ return {
["pe"]="سراسری",
["ro"]="global",
},
+ ["goodies"]={
+ ["en"]="goodies",
+ },
["grid"]={
["cs"]="mrizka",
["de"]="gritter",
@@ -8114,6 +8052,12 @@ return {
["pe"]="توری",
["ro"]="grid",
},
+ ["group"]={
+ ["en"]="group",
+ },
+ ["groupsuffix"]={
+ ["en"]="groupsuffix",
+ },
["hang"]={
["cs"]="zaveseni",
["de"]="haengend",
@@ -8124,6 +8068,14 @@ return {
["pe"]="بیاویز",
["ro"]="suspenda",
},
+ ["hcompact"]={
+ ["en"]="hcompact",
+ ["nl"]="hcomprimeer",
+ },
+ ["headalign"]={
+ ["en"]="headalign",
+ ["nl"]="kopuitlijnen",
+ },
["headcolor"]={
["cs"]="barvahlavicky",
["de"]="kopffarbe",
@@ -8277,6 +8229,9 @@ return {
["pe"]="شکستن",
["ro"]="hyphen",
},
+ ["hyphens"]={
+ ["en"]="hyphens",
+ },
["icommand"]={
["cs"]="iprikaz",
["de"]="ibefehl",
@@ -8287,6 +8242,9 @@ return {
["pe"]="icommand",
["ro"]="comandai",
},
+ ["ignore"]={
+ ["en"]="ignore",
+ },
["in"]={
["cs"]="v",
["de"]="in",
@@ -8347,6 +8305,9 @@ return {
["pe"]="متن‌تورفته",
["ro"]="aliniaturmator",
},
+ ["index"]={
+ ["en"]="index",
+ },
["indicator"]={
["cs"]="indikator",
["de"]="indikator",
@@ -8357,6 +8318,9 @@ return {
["pe"]="اندیکاتور",
["ro"]="indicator",
},
+ ["initialsep"]={
+ ["en"]="initialsep",
+ },
["inner"]={
["cs"]="vnitrni",
["de"]="innen",
@@ -8387,6 +8351,16 @@ return {
["pe"]="پرونده‌ورودی",
["ro"]="inputfile",
},
+ ["insidesection"]={
+ ["en"]="insidesection",
+ ["nl"]="binnensectie",
+ },
+ ["instance"]={
+ ["en"]="instance",
+ },
+ ["intent"]={
+ ["en"]="intent",
+ },
["interaction"]={
["cs"]="interakce",
["de"]="interaktion",
@@ -8408,8 +8382,14 @@ return {
["ro"]="spatiereinterliniara",
},
["internalgrid"]={
- ["nl"]="interngrid",
["en"]="internalgrid",
+ ["nl"]="interngrid",
+ },
+ ["italicfeatures"]={
+ ["en"]="italicfeatures",
+ },
+ ["italicfont"]={
+ ["en"]="italicfont",
},
["itemalign"]={
["cs"]="itemalign",
@@ -8431,9 +8411,17 @@ return {
["pe"]="آیتمها",
["ro"]="elemente",
},
- ["mark"]={
- ["en"]="mark",
- ["nl"]="kernmerk",
+ ["joiners"]={
+ ["en"]="joiners",
+ },
+ ["journalconversion"]={
+ ["en"]="journalconversion",
+ },
+ ["juniorsep"]={
+ ["en"]="juniorsep",
+ },
+ ["keeptogether"]={
+ ["en"]="keeptogether",
},
["ken"]={
["cs"]="ken",
@@ -8455,6 +8443,10 @@ return {
["pe"]="گسترش‌کلید",
["ro"]="keyexpansion",
},
+ ["keys"]={
+ ["en"]="keys",
+ ["nl"]="sleutels",
+ },
["keyword"]={
["cs"]="keyword",
["de"]="keyword",
@@ -8475,6 +8467,18 @@ return {
["pe"]="برچسب",
["ro"]="eticheta",
},
+ ["labeloffset"]={
+ ["en"]="labeloffset",
+ },
+ ["language"]={
+ ["en"]="language",
+ },
+ ["last"]={
+ ["en"]="last",
+ },
+ ["lastnamesep"]={
+ ["en"]="lastnamesep",
+ },
["lastpage"]={
["cs"]="poslednistrana",
["de"]="letzteseite",
@@ -8485,6 +8489,16 @@ return {
["pe"]="صفحه‌آخر",
["ro"]="ultimapagina",
},
+ ["lastpagesep"]={
+ ["en"]="lastpagesep",
+ },
+ ["lastpubsep"]={
+ ["en"]="lastpubsep",
+ },
+ ["layout"]={
+ ["en"]="layout",
+ ["nl"]="layout",
+ },
["left"]={
["cs"]="vlevo",
["de"]="links",
@@ -8665,6 +8679,13 @@ return {
["pe"]="عرض‌خط",
["ro"]="latimestanga",
},
+ ["leftwords"]={
+ ["en"]="leftwords",
+ },
+ ["less"]={
+ ["en"]="less",
+ ["nl"]="minder",
+ },
["level"]={
["cs"]="uroven",
["de"]="niveau",
@@ -8765,6 +8786,9 @@ return {
["pe"]="مکان",
["ro"]="locatie",
},
+ ["loffset"]={
+ ["en"]="loffset",
+ },
["logo"]={
["cs"]="logo",
["de"]="logo",
@@ -8845,6 +8869,10 @@ return {
["pe"]="متن‌حاشیه",
["ro"]="textmargine",
},
+ ["mark"]={
+ ["en"]="mark",
+ ["nl"]="kernmerk",
+ },
["marking"]={
["cs"]="znaceni",
["de"]="beschriftung",
@@ -8865,6 +8893,19 @@ return {
["pe"]="سبک‌حاش",
["ro"]="stilmarcaj",
},
+ ["mask"]={
+ ["en"]="mask",
+ ["nl"]="masker",
+ },
+ ["mathclass"]={
+ ["en"]="mathclass",
+ },
+ ["mathlimits"]={
+ ["en"]="mathlimits",
+ },
+ ["mathstyle"]={
+ ["en"]="mathstyle",
+ },
["max"]={
["cs"]="max",
["de"]="max",
@@ -8875,6 +8916,9 @@ return {
["pe"]="بیشترین",
["ro"]="max",
},
+ ["maxdepth"]={
+ ["en"]="maxdepth",
+ },
["maxheight"]={
["cs"]="maxvyska",
["de"]="maxhoehe",
@@ -8885,9 +8929,6 @@ return {
["pe"]="بیشترین‌ارتفاع",
["ro"]="inaltimemaxima",
},
- ["maxdepth"]={
- ["en"]="maxdepth",
- },
["maxwidth"]={
["cs"]="maxsirka",
["de"]="maxbreite",
@@ -8898,6 +8939,9 @@ return {
["pe"]="بیشترین‌عرض",
["ro"]="latimemaxima",
},
+ ["maybeyear"]={
+ ["en"]="maybeyear",
+ },
["menu"]={
["cs"]="menu",
["de"]="menue",
@@ -8928,6 +8972,10 @@ return {
["pe"]="میان",
["ro"]="mijloc",
},
+ ["middlecommand"]={
+ ["en"]="middlecommand",
+ ["nl"]="middencommando",
+ },
["middlespeech"]={
["cs"]="middlespeech",
["de"]="middlespeech",
@@ -9008,25 +9056,29 @@ return {
["pe"]="moffset",
["ro"]="moffset",
},
- ["mpwidth"]={
- ["en"]="mpwidth",
- ["nl"]="mpbreedte",
+ ["monthconversion"]={
+ ["en"]="monthconversion",
+ ["nl"]="maandconversie",
},
- ["mpheight"]={
- ["en"]="mpheight",
- ["nl"]="mphoogte",
+ ["more"]={
+ ["en"]="more",
+ ["nl"]="meer",
},
["mpdepth"]={
["en"]="mpdepth",
["nl"]="mpdiepte",
},
+ ["mpheight"]={
+ ["en"]="mpheight",
+ ["nl"]="mphoogte",
+ },
["mpoffset"]={
["en"]="mpoffset",
["nl"]="mpoffset",
},
- ["monthconversion"]={
- ["en"]="monthconversion",
- ["nl"]="maandconversie",
+ ["mpwidth"]={
+ ["en"]="mpwidth",
+ ["nl"]="mpbreedte",
},
["n"]={
["cs"]="n",
@@ -9048,6 +9100,9 @@ return {
["pe"]="نام",
["ro"]="nume",
},
+ ["namesep"]={
+ ["en"]="namesep",
+ },
["nbottom"]={
["cs"]="nspodek",
["de"]="nunten",
@@ -9078,6 +9133,18 @@ return {
["pe"]="بعدی",
["ro"]="urmatorul",
},
+ ["nextleft"]={
+ ["en"]="nextleft",
+ },
+ ["nextleftquotation"]={
+ ["en"]="nextleftquotation",
+ },
+ ["nextright"]={
+ ["en"]="nextright",
+ },
+ ["nextrightquotation"]={
+ ["en"]="nextrightquotation",
+ },
["nl"]={
["cs"]="nl",
["de"]="nl",
@@ -9118,6 +9185,9 @@ return {
["pe"]="norm",
["ro"]="norm",
},
+ ["note"]={
+ ["en"]="note",
+ },
["nr"]={
["cs"]="nr",
["de"]="nr",
@@ -9158,6 +9228,10 @@ return {
["pe"]="شماره",
["ro"]="numar",
},
+ ["numberalign"]={
+ ["en"]="numberalign",
+ ["nl"]="nummeruitlijnen",
+ },
["numbercolor"]={
["cs"]="barvacisla",
["de"]="nummernfarbe",
@@ -9229,12 +9303,12 @@ return {
["numberset"]={
["en"]="numberset",
},
- ["numberstopper"]={
- ["en"]="numberstopper",
- },
["numberstarter"]={
["en"]="numberstarter",
},
+ ["numberstopper"]={
+ ["en"]="numberstopper",
+ },
["numberstyle"]={
["cs"]="stylcisla",
["de"]="nummernstil",
@@ -9315,18 +9389,6 @@ return {
["pe"]="آفست",
["ro"]="offset",
},
- ["loffset"]={
- ["en"]="loffset",
- },
- ["roffset"]={
- ["en"]="roffset",
- },
- ["toffset"]={
- ["en"]="toffset",
- },
- ["boffset"]={
- ["en"]="boffset",
- },
["openaction"]={
["cs"]="otevriakci",
["de"]="oeffenaktion",
@@ -9337,6 +9399,10 @@ return {
["pe"]="عمل‌باز",
["ro"]="actiunedeschidere",
},
+ ["openpage"]={
+ ["en"]="openpage",
+ ["nl"]="openpagina",
+ },
["openpageaction"]={
["cs"]="akceotevrenistranky",
["de"]="openpageaction",
@@ -9347,9 +9413,11 @@ return {
["pe"]="عمل‌صفحه‌باز",
["ro"]="actiunedeschiderepagina",
},
- ["openpage"]={
- ["en"]="openpage",
- ["nl"]="openpagina",
+ ["openup"]={
+ ["en"]="openup",
+ },
+ ["opticalsize"]={
+ ["en"]="opticalsize",
},
["option"]={
["cs"]="volba",
@@ -9361,6 +9429,10 @@ return {
["pe"]="گزینه",
["ro"]="optiune",
},
+ ["order"]={
+ ["en"]="order",
+ ["nl"]="volgorde",
+ },
["orientation"]={
["cs"]="orientation",
["de"]="orientation",
@@ -9371,6 +9443,9 @@ return {
["pe"]="جهت‌دهی",
["ro"]="orientation",
},
+ ["otherstext"]={
+ ["en"]="otherstext",
+ },
["outermargin"]={
["cs"]="outermargin",
["de"]="outermargin",
@@ -9445,12 +9520,18 @@ return {
["pe"]="فرمان‌صفحه",
["ro"]="comandapagina",
},
+ ["pageconnector"]={
+ ["en"]="pageconnector",
+ },
["pageconversion"]={
["en"]="pageconversion",
},
["pageconversionset"]={
["en"]="pageconversionset",
},
+ ["pageleft"]={
+ ["en"]="pageleft",
+ },
["pagenumber"]={
["cs"]="cislostranky",
["de"]="seitennummer",
@@ -9482,21 +9563,30 @@ return {
["pageprefixset"]={
["en"]="pageprefixset",
},
+ ["pageprefixstarter"]={
+ ["en"]="pageprefixstarter",
+ },
["pageprefixstopper"]={
["en"]="pageprefixstopper",
},
- ["pageprefixstarter"]={
- ["en"]="pageprefixstarter",
+ ["pageright"]={
+ ["en"]="pageright",
},
["pagesegments"]={
["en"]="pagesegments",
},
+ ["pagesep"]={
+ ["en"]="pagesep",
+ },
["pageseparatorset"]={
["en"]="pageseparatorset",
},
["pageset"]={
["en"]="pageset",
},
+ ["pagestarter"]={
+ ["en"]="pagestarter",
+ },
["pagestate"]={
["cs"]="pagestate",
["de"]="pagestate",
@@ -9510,9 +9600,6 @@ return {
["pagestopper"]={
["en"]="pagestopper",
},
- ["pagestarter"]={
- ["en"]="pagestarter",
- },
["pagestyle"]={
["cs"]="stylstranky",
["de"]="seitenstil",
@@ -9553,6 +9640,9 @@ return {
["pe"]="پاراگراف",
["ro"]="paragraf",
},
+ ["period"]={
+ ["en"]="period",
+ },
["place"]={
["cs"]="umistit",
["de"]="platziere",
@@ -9621,12 +9711,12 @@ return {
["prefixset"]={
["en"]="prefixset",
},
- ["prefixstopper"]={
- ["en"]="prefixstopper",
- },
["prefixstarter"]={
["en"]="prefixstarter",
},
+ ["prefixstopper"]={
+ ["en"]="prefixstopper",
+ },
["preset"]={
["cs"]="prednastaveni",
["de"]="voreinstellung",
@@ -9673,7 +9763,7 @@ return {
["en"]="printable",
["fr"]="editable",
["it"]="stampabile",
- ["nl"]="printbaar", -- afdrukbaar
+ ["nl"]="printbaar",
["pe"]="قابل‌چاپ",
["ro"]="tiparibil",
},
@@ -9690,6 +9780,15 @@ return {
["profile"]={
["en"]="profile",
},
+ ["properties"]={
+ ["en"]="properties",
+ },
+ ["pubsep"]={
+ ["en"]="pubsep",
+ },
+ ["quotechar"]={
+ ["en"]="quotechar",
+ },
["radius"]={
["cs"]="polomer",
["de"]="radius",
@@ -9734,6 +9833,9 @@ return {
["pe"]="رج",
["ro"]="ref",
},
+ ["refcommand"]={
+ ["en"]="refcommand",
+ },
["reference"]={
["cs"]="odkaz",
["de"]="referenz",
@@ -9744,6 +9846,9 @@ return {
["pe"]="مرجع",
["ro"]="referinta",
},
+ ["referencemethod"]={
+ ["en"]="referencemethod",
+ },
["referenceprefix"]={
["en"]="referenceprefix",
},
@@ -9781,6 +9886,18 @@ return {
["pe"]="ناحیه‌بیرون",
["ro"]="regiuneiesire",
},
+ ["register"]={
+ ["en"]="register",
+ },
+ ["regularfeatures"]={
+ ["en"]="regularfeatures",
+ },
+ ["regularfont"]={
+ ["en"]="regularfont",
+ },
+ ["renderingsetup"]={
+ ["en"]="renderingsetup",
+ },
["repeat"]={
["cs"]="opakovat",
["de"]="wiederholen",
@@ -9821,6 +9938,19 @@ return {
["pe"]="کیفیت",
["ro"]="rezolutie",
},
+ ["resources"]={
+ ["en"]="resources",
+ },
+ ["reverse"]={
+ ["cs"]="reverse",
+ ["de"]="reverse",
+ ["en"]="reverse",
+ ["fr"]="inverse",
+ ["it"]="invertito",
+ ["nl"]="omgekeerd",
+ ["pe"]="برعکس",
+ ["ro"]="reverse",
+ },
["right"]={
["cs"]="vpravo",
["de"]="rechts",
@@ -10001,6 +10131,15 @@ return {
["pe"]="عرض‌راست",
["ro"]="marginedreapta",
},
+ ["rightwords"]={
+ ["en"]="rightwords",
+ },
+ ["rightchars"]={
+ ["en"]="rightchars",
+ },
+ ["roffset"]={
+ ["en"]="roffset",
+ },
["rotation"]={
["cs"]="rotace",
["de"]="rotation",
@@ -10021,10 +10160,6 @@ return {
["pe"]="خط",
["ro"]="rigla",
},
- ["rulecommand"]={
- ["en"]="rulecommand",
- ["nl"]="lijncommando",
- },
["rulecolor"]={
["cs"]="barvalinky",
["de"]="linienfarbe",
@@ -10035,6 +10170,10 @@ return {
["pe"]="رنگ‌خط",
["ro"]="culoarerigla",
},
+ ["rulecommand"]={
+ ["en"]="rulecommand",
+ ["nl"]="lijncommando",
+ },
["rulethickness"]={
["cs"]="tloustkalinky",
["de"]="liniendicke",
@@ -10065,6 +10204,9 @@ return {
["pe"]="نمونه",
["ro"]="exemplu",
},
+ ["samplesize"]={
+ ["en"]="samplesize",
+ },
["saveinlist"]={
["en"]="saveinlist",
},
@@ -10108,6 +10250,9 @@ return {
["pe"]="بخش",
["ro"]="sectiune",
},
+ ["sectionblock"]={
+ ["en"]="sectionblock",
+ },
["sectionconversion"]={
["en"]="sectionconversion",
},
@@ -10136,12 +10281,12 @@ return {
["sectionset"]={
["en"]="sectionset",
},
- ["sectionstopper"]={
- ["en"]="sectionstopper",
- },
["sectionstarter"]={
["en"]="sectionstarter",
},
+ ["sectionstopper"]={
+ ["en"]="sectionstopper",
+ },
["separator"]={
["cs"]="oddelovac",
["de"]="seperator",
@@ -10152,6 +10297,14 @@ return {
["pe"]="جداکننده",
["ro"]="separator",
},
+ ["separatorcolor"]={
+ ["en"]="separatorcolor",
+ ["nl"]="scheiderkleur",
+ },
+ ["separatorstyle"]={
+ ["en"]="separatorstyle",
+ ["nl"]="scheiderletter",
+ },
["set"]={
["cs"]="set",
["de"]="set",
@@ -10162,6 +10315,10 @@ return {
["pe"]="قراربده",
["ro"]="set",
},
+ ["setups"]={
+ ["comment"]="no translations",
+ ["en"]="setups",
+ },
["shrink"]={
["en"]="shrink",
["nl"]="krimp",
@@ -10236,6 +10393,12 @@ return {
["pe"]="اندازه",
["ro"]="dimensiune",
},
+ ["slantedfeatures"]={
+ ["en"]="slantedfeatures",
+ },
+ ["slantedfont"]={
+ ["en"]="slantedfont",
+ },
["small"]={
["cs"]="male",
["de"]="klein",
@@ -10246,6 +10409,16 @@ return {
["pe"]="کوچک",
["ro"]="mic",
},
+ ["smallcapsfeatures"]={
+ ["en"]="smallcapsfeatures",
+ },
+ ["smallcapsfont"]={
+ ["en"]="smallcapsfont",
+ },
+ ["solution"]={
+ ["en"]="solution",
+ ["nl"]="oplossing",
+ },
["sort"]={
["en"]="sort",
},
@@ -10319,6 +10492,9 @@ return {
["pe"]="فضاگذاری",
["ro"]="spatiere",
},
+ ["specification"]={
+ ["en"]="specification",
+ },
["split"]={
["cs"]="split",
["de"]="split",
@@ -10389,6 +10565,10 @@ return {
["pe"]="شروع",
["ro"]="start",
},
+ ["starter"]={
+ ["en"]="starter",
+ ["nl"]="opener",
+ },
["state"]={
["cs"]="status",
["de"]="status",
@@ -10429,10 +10609,6 @@ return {
["pe"]="ایست",
["ro"]="stopper",
},
- ["starter"]={
- ["en"]="starter",
- ["nl"]="opener",
- },
["stretch"]={
["cs"]="natahnout",
["de"]="strecken",
@@ -10443,6 +10619,9 @@ return {
["pe"]="کشیدن",
["ro"]="dilatat",
},
+ ["strip"]={
+ ["en"]="strip",
+ },
["strut"]={
["cs"]="strut",
["de"]="strut",
@@ -10453,15 +10632,6 @@ return {
["pe"]="بست",
["ro"]="strut",
},
- ["mathclass"]={
- ["en"]="mathclass",
- },
- ["mathstyle"]={
- ["en"]="mathstyle",
- },
- ["mathlimits"]={
- ["en"]="mathlimits",
- },
["style"]={
["cs"]="pismeno",
["de"]="stil",
@@ -10510,6 +10680,18 @@ return {
["en"]="suffixstopper",
["nl"]="suffixafsluiter",
},
+ ["surnamefirstnamesep"]={
+ ["en"]="surnamefirstnamesep",
+ },
+ ["surnameinitialsep"]={
+ ["en"]="surnameinitialsep",
+ },
+ ["surnamesep"]={
+ ["en"]="surnamesep",
+ },
+ ["svgstyle"]={
+ ["en"]="svgstyle",
+ },
["sx"]={
["cs"]="sx",
["de"]="sx",
@@ -10550,6 +10732,9 @@ return {
["pe"]="نماد",
["ro"]="simbol",
},
+ ["symbolcommand"]={
+ ["en"]="symbolcommand",
+ },
["symbolset"]={
["cs"]="sadasymbolu",
["de"]="symbolset",
@@ -10640,6 +10825,9 @@ return {
["pe"]="متن",
["ro"]="text",
},
+ ["textalign"]={
+ ["en"]="textalign",
+ },
["textcolor"]={
["cs"]="barvatextu",
["de"]="textfarbe",
@@ -10670,6 +10858,16 @@ return {
["pe"]="فاصله‌متن",
["ro"]="textdistance",
},
+ ["textheight"]={
+ ["cs"]="vyskatextu",
+ ["de"]="texthoehe",
+ ["en"]="textheight",
+ ["fr"]="hauteurtexte",
+ ["it"]="altezzatesto",
+ ["nl"]="teksthoogte",
+ ["pe"]="ارتفاع‌متن",
+ ["ro"]="inaltimetext",
+ },
["textlayer"]={
["cs"]="textlayer",
["de"]="textlayer",
@@ -10740,16 +10938,6 @@ return {
["pe"]="سبک‌متن",
["ro"]="stiltext",
},
- ["textheight"]={
- ["cs"]="vyskatextu",
- ["de"]="texthoehe",
- ["en"]="textheight",
- ["fr"]="hauteurtexte",
- ["it"]="altezzatesto",
- ["nl"]="teksthoogte",
- ["pe"]="ارتفاع‌متن",
- ["ro"]="inaltimetext",
- },
["textwidth"]={
["cs"]="sirkatextu",
["de"]="textbreite",
@@ -10761,7 +10949,7 @@ return {
["ro"]="latimetext",
},
["threshold"]={
- ["en"]="threshold", -- rather international term
+ ["en"]="threshold",
},
["title"]={
["cs"]="titul",
@@ -10843,6 +11031,9 @@ return {
["pe"]="به",
["ro"]="catre",
},
+ ["toffset"]={
+ ["en"]="toffset",
+ },
["tolerance"]={
["cs"]="tolerance",
["de"]="toleranz",
@@ -10863,6 +11054,10 @@ return {
["pe"]="بالا",
["ro"]="sus",
},
+ ["topcommand"]={
+ ["en"]="topcommand",
+ ["nl"]="bovencommando",
+ },
["topdistance"]={
["cs"]="vzdalenostvrsku",
["de"]="obenabstand",
@@ -10913,6 +11108,15 @@ return {
["pe"]="وضعیت‌بالا",
["ro"]="staresus",
},
+ ["totalnumber"]={
+ ["en"]="totalnumber",
+ },
+ ["translate"]={
+ ["en"]="translate",
+ },
+ ["trimoffset"]={
+ ["en"]="trimoffset",
+ },
["type"]={
["cs"]="typ",
["de"]="typ",
@@ -10943,6 +11147,9 @@ return {
["pe"]="مرجع‌ناشناس",
["ro"]="referintanecunoscuta",
},
+ ["up"]={
+ ["en"]="up",
+ },
["urlalternative"]={
["cs"]="urlalternativa",
["de"]="urlalternative",
@@ -10973,6 +11180,10 @@ return {
["pe"]="تاییداعتبار",
["ro"]="verifica",
},
+ ["values"]={
+ ["en"]="values",
+ ["nl"]="waarden",
+ },
["vcommand"]={
["cs"]="vprikaz",
["de"]="vbefehl",
@@ -10983,6 +11194,10 @@ return {
["pe"]="vcommand",
["ro"]="comandav",
},
+ ["vcompact"]={
+ ["en"]="vcompact",
+ ["nl"]="vcomprimeer",
+ },
["vector"]={
["en"]="vector",
["nl"]="vector",
@@ -11007,6 +11222,9 @@ return {
["pe"]="vfil",
["ro"]="vfil",
},
+ ["viewerprefix"]={
+ ["en"]="viewerprefix",
+ },
["voffset"]={
["cs"]="voffset",
["de"]="voffset",
@@ -11017,6 +11235,9 @@ return {
["pe"]="آفست‌ع",
["ro"]="voffset",
},
+ ["vonsep"]={
+ ["en"]="vonsep",
+ },
["way"]={
["cs"]="zpusob",
["de"]="art",
@@ -11057,6 +11278,9 @@ return {
["pe"]="عرض",
["ro"]="latime",
},
+ ["words"]={
+ ["en"]="words",
+ },
["xfactor"]={
["cs"]="xfaktor",
["de"]="xfaktor",
@@ -11067,6 +11291,9 @@ return {
["pe"]="فاکتورایکس",
["ro"]="xfactor",
},
+ ["xhtml"]={
+ ["en"]="xhtml",
+ },
["xmax"]={
["cs"]="xmax",
["de"]="xmax",
@@ -11077,6 +11304,9 @@ return {
["pe"]="xmax",
["ro"]="xmax",
},
+ ["xmlsetup"]={
+ ["en"]="xmlsetup",
+ },
["xoffset"]={
["cs"]="xoffset",
["de"]="xoffset",
@@ -11421,182 +11651,14 @@ return {
},
},
["variables"]={
- ["setups"]={
- ["comment"]="no translations",
- ["en"]="setups",
- },
- ["followingpage"]={
- ["en"]="followingpage",
- ["nl"]="opvolgendepagina",
- },
- ["precedingpage"]={
- ["en"]="followingpage",
- ["nl"]="voorafgaandepagina",
- },
- ["math"]={
- ["en"]="math",
- },
- ["selectfont"]={
- ["en"]="selectfont",
- },
- ["simplefonts"]={
- ["en"]="simplefonts",
- },
- ["more"]={
- ["en"]="more",
- ["nl"]="meer",
- },
- ["less"]={
- ["en"]="less",
- ["nl"]="minder",
- },
- ["embed"]={
- ["en"]="embed",
- ["nl"]="sluitin",
- },
- ["end"]={
- ["en"]="end",
- ["nl"]="eind",
- },
- ["export"] = {
- ["en"]="export",
- },
- ["begin"]={
- ["en"]="begin",
- ["nl"]="begin",
- },
- ["down"]={
- ["en"]="down",
- ["nl"]="omlaag",
- },
- ["up"]={
- ["en"]="up",
- ["nl"]="omhoog",
- },
- ["smaller"]={
- ["en"]="smaller",
- ["nl"]="kleiner",
- },
- ["bigger"]={
- ["en"]="bigger",
- ["nl"]="groter",
- },
- ["underbar"]={
- ["cs"]="podtrzeno",
- ["de"]="unterstrichen",
- ["en"]="underbar",
- ["fr"]="souslignetout",
- ["it"]="sottolinea",
- ["nl"]="onderstreep",
- ["pe"]="میله‌زیر",
- ["ro"]="sublinie",
- },
- ["underbars"]={
- ["cs"]="podtrzeni",
- ["de"]="unterstreichen",
- ["en"]="underbars",
- ["fr"]="sousligne",
- ["it"]="sottolinee",
- ["nl"]="onderstrepen",
- ["pe"]="میله‌‌های‌زیر",
- ["ro"]="sublinii",
- },
- ["overbar"]={
- ["cs"]="nadtrzeno",
- ["de"]="ueberstrichen",
- ["en"]="overbar",
- ["fr"]="overbar",
- ["it"]="sopralinea",
- ["nl"]="overstreep",
- ["pe"]="میله‌رو",
- ["ro"]="barasus",
+ ["aside"]={
+ ["en"]="aside",
},
- ["overbars"]={
- ["cs"]="nadtrzeni",
- ["de"]="ueberstreichen",
- ["en"]="overbars",
- ["fr"]="overbars",
- ["it"]="sopralinee",
- ["nl"]="overstrepen",
- ["pe"]="میله‌ها‌رو",
- ["ro"]="supralinie",
- },
- ["understrike"]={
- ["en"]="understrike",
+ ["ordinal"]={
+ ["en"]="ordinal",
},
- ["understrikes"]={
- ["en"]="understrikes",
- },
- ["overstrike"]={
- ["cs"]="preskrtnuto",
- ["de"]="durchgestrichen",
- ["en"]="overstrike",
- ["fr"]="surlignetout",
- ["it"]="sbarrato",
- ["nl"]="doorstreep",
- ["pe"]="خط‌زدن",
- ["ro"]="liniepeste",
- },
- ["overstrikes"]={
- ["cs"]="preskrtnuti",
- ["de"]="durchstreichen",
- ["en"]="overstrikes",
- ["fr"]="surligne",
- ["it"]="sbarrati",
- ["nl"]="doorstrepen",
- ["pe"]="خط‌زدنها",
- ["ro"]="liniipeste",
- },
- ["maxheight"]={
- ["en"]="maxheight",
- ["nl"]="maxhoogte",
- },
- ["maxdepth"]={
- ["en"]="maxdepth",
- ["nl"]="maxdiepte",
- },
- ["maxwidth"]={
- ["en"]="maxwidth",
- ["nl"]="maxbreedte",
- },
- ["minheight"]={
- ["en"]="minheight",
- ["nl"]="minhoogte",
- },
- ["mindepth"]={
- ["en"]="mindepth",
- ["nl"]="mindiepte",
- },
- ["minwidth"]={
- ["en"]="minwidth",
- ["nl"]="minbreedte",
- },
- ["short"]={
- ["nl"]="kort",
- ["en"]="short",
- ["de"]="kurz",
- ["cs"]="short",
- ["it"]="short",
- ["ro"]="short",
- ["fr"]="short",
- },
- ["cite"]={
- ["en"]="cite",
- },
- ["bbl"]={
- ["en"]="bbl",
- },
- ["bib"]={
- ["en"]="bib",
- },
- ["author"]={
- ["nl"]="auteur",
- ["en"]="author",
- ["de"]="autor",
- ["cs"]="autor",
- ["it"]="autore",
- ["ro"]="autor",
- ["fr"]="auteur",
+ ["Ordinal"]={
+ ["en"]="Ordinal",
},
["Addition"]={
["cs"]="Pridavek",
@@ -11608,6 +11670,9 @@ return {
["pe"]="جمع",
["ro"]="Adaugare",
},
+ ["Alphabetic"]={
+ ["en"]="Alphabetic",
+ },
["Balloon"]={
["cs"]="Bublinka",
["de"]="Ballon",
@@ -11618,6 +11683,26 @@ return {
["pe"]="بادکنک",
["ro"]="Balon",
},
+ ["Cap"]={
+ ["cs"]="Kap",
+ ["de"]="Kap",
+ ["en"]="Cap",
+ ["fr"]="Cap",
+ ["it"]="Cap",
+ ["nl"]="Kap",
+ ["pe"]="Cap",
+ ["ro"]="Cap",
+ },
+ ["Capital"]={
+ ["cs"]="Kapitalky",
+ ["de"]="Versalien",
+ ["en"]="Capital",
+ ["fr"]="Capitale",
+ ["it"]="Maiuscolo",
+ ["nl"]="Kapitaal",
+ ["pe"]="Capital",
+ ["ro"]="Majuscula",
+ },
["Character"]={
["cs"]="Pismeno",
["de"]="Buchstabe",
@@ -12198,16 +12283,6 @@ return {
["pe"]="WORDS",
["ro"]="CUVINTE",
},
- ["word"]={
- ["cs"]="slovo",
- ["de"]="wort",
- ["en"]="word",
- ["fr"]="mot",
- ["it"]="parola",
- ["nl"]="woord",
- ["pe"]="word",
- ["ro"]="cuvant",
- },
["Word"]={
["cs"]="Slovo",
["de"]="Wort",
@@ -12288,6 +12363,9 @@ return {
["pe"]="همه",
["ro"]="tot",
},
+ ["alphabetic"]={
+ ["en"]="alphabetic",
+ },
["always"]={
["cs"]="vzdy",
["de"]="immer",
@@ -12299,14 +12377,9 @@ return {
["ro"]="totdeauna",
},
["and"]={
- --["cs"]="",
["de"]="und",
["en"]="and",
- --["fr"]="",
- --["it"]="",
["nl"]="en",
- --["pe"]="",
- --["ro"]="",
},
["answerarea"]={
["cs"]="answerarea",
@@ -12348,9 +12421,15 @@ return {
["pe"]="آوریل",
["ro"]="aprilie",
},
- ["attachment"]={
- ["en"]="attachment",
- ["nl"]="aanhangsel",
+ ["atleftmargin"]={
+ ["cs"]="atleftmargin",
+ ["de"]="atleftmargin",
+ ["en"]="atleftmargin",
+ ["fr"]="atleftmargin",
+ ["it"]="atleftmargin",
+ ["nl"]="oplinkermarge",
+ ["pe"]="درحاشیه‌چپ",
+ ["ro"]="atleftmargin",
},
["atmargin"]={
["cs"]="naokraji",
@@ -12372,6 +12451,20 @@ return {
["pe"]="درصفحه",
["ro"]="lapagina",
},
+ ["atrightmargin"]={
+ ["cs"]="atrightmargin",
+ ["de"]="atrightmargin",
+ ["en"]="atrightmargin",
+ ["fr"]="atrightmargin",
+ ["it"]="atrightmargin",
+ ["nl"]="oprechtermarge",
+ ["pe"]="درحاشیه‌راست",
+ ["ro"]="atrightmargin",
+ },
+ ["attachment"]={
+ ["en"]="attachment",
+ ["nl"]="aanhangsel",
+ },
["august"]={
["cs"]="srpen",
["de"]="august",
@@ -12382,6 +12475,15 @@ return {
["pe"]="آگوست",
["ro"]="august",
},
+ ["author"]={
+ ["cs"]="autor",
+ ["de"]="autor",
+ ["en"]="author",
+ ["fr"]="auteur",
+ ["it"]="autore",
+ ["nl"]="auteur",
+ ["ro"]="autor",
+ },
["auto"]={
["cs"]="auto",
["de"]="auto",
@@ -12402,6 +12504,9 @@ return {
["pe"]="پیشگفتارخودکار",
["ro"]="autointro",
},
+ ["autopunctuation"]={
+ ["en"]="autopunctuation",
+ },
["back"]={
["cs"]="zpet",
["de"]="zurueck",
@@ -12462,6 +12567,9 @@ return {
["pe"]="عقب‌گرد",
["ro"]="inapoi",
},
+ ["bbl"]={
+ ["en"]="bbl",
+ },
["before"]={
["cs"]="pred",
["de"]="vor",
@@ -12472,6 +12580,13 @@ return {
["pe"]="قبل‌از",
["ro"]="inainte",
},
+ ["begin"]={
+ ["en"]="begin",
+ ["nl"]="begin",
+ },
+ ["bib"]={
+ ["en"]="bib",
+ },
["big"]={
["cs"]="velke",
["de"]="gross",
@@ -12492,6 +12607,10 @@ return {
["pe"]="قلم‌بدنه‌بزرگ",
["ro"]="bigbodyfont",
},
+ ["bigger"]={
+ ["en"]="bigger",
+ ["nl"]="groter",
+ },
["bigpreference"]={
["cs"]="vysokapriorita",
["de"]="grosszuegig",
@@ -12512,6 +12631,9 @@ return {
["pe"]="خالی",
["ro"]="blank",
},
+ ["block"]={
+ ["en"]="block",
+ },
["blockquote"]={
["cs"]="blockquote",
["de"]="blockquote",
@@ -12592,6 +12714,9 @@ return {
["pe"]="هردو",
["ro"]="ambele",
},
+ ["bothtext"]={
+ ["en"]="bothtext",
+ },
["bottom"]={
["cs"]="spodek",
["de"]="unten",
@@ -12602,6 +12727,9 @@ return {
["pe"]="پایین",
["ro"]="subsol",
},
+ ["box"]={
+ ["en"]="box",
+ },
["brief"]={
["cs"]="brief",
["de"]="brief",
@@ -12652,6 +12780,9 @@ return {
["pe"]="خوشنویسی",
["ro"]="caligrafic",
},
+ ["camel"]={
+ ["en"]="camel",
+ },
["cap"]={
["cs"]="kap",
["de"]="kap",
@@ -12662,16 +12793,6 @@ return {
["pe"]="cap",
["ro"]="cap",
},
- ["Cap"]={
- ["cs"]="Kap",
- ["de"]="Kap",
- ["en"]="Cap",
- ["fr"]="Cap",
- ["it"]="Cap",
- ["nl"]="Kap",
- ["pe"]="Cap",
- ["ro"]="Cap",
- },
["capital"]={
["cs"]="kapitalky",
["de"]="versalien",
@@ -12682,16 +12803,6 @@ return {
["pe"]="capital",
["ro"]="majuscula",
},
- ["Capital"]={
- ["cs"]="Kapitalky",
- ["de"]="Versalien",
- ["en"]="Capital",
- ["fr"]="Capitale",
- ["it"]="Maiuscolo",
- ["nl"]="Kapitaal",
- ["pe"]="Capital",
- ["ro"]="Majuscula",
- },
["center"]={
["cs"]="center",
["de"]="center",
@@ -12702,6 +12813,9 @@ return {
["pe"]="مرکز",
["ro"]="center",
},
+ ["centerlast"]={
+ ["en"]="centerlast",
+ },
["chapter"]={
["cs"]="kapitola",
["de"]="kapitel",
@@ -12732,10 +12846,19 @@ return {
["pe"]="حرفها",
["ro"]="caractere",
},
+ ["chemical"]={
+ ["en"]="chemical",
+ },
+ ["chemicals"]={
+ ["en"]="chemicals",
+ },
["chemistry"]={
["en"]="chemistry",
["nl"]="chemie",
},
+ ["cite"]={
+ ["en"]="cite",
+ },
["color"]={
["cs"]="barevne",
["de"]="farbe",
@@ -12766,6 +12889,9 @@ return {
["pe"]="ستونها",
["ro"]="coloane",
},
+ ["combination"]={
+ ["en"]="combination",
+ },
["command"]={
["cs"]="prikaz",
["de"]="befehl",
@@ -12806,6 +12932,9 @@ return {
["pe"]="مولفه",
["ro"]="componenta",
},
+ ["compressseparator"]={
+ ["en"]="compressseparator",
+ },
["concept"]={
["cs"]="koncept",
["de"]="konzept",
@@ -12816,6 +12945,9 @@ return {
["pe"]="مفهوم",
["ro"]="concept",
},
+ ["construction"]={
+ ["en"]="construction",
+ },
["content"]={
["cs"]="obsah",
["de"]="inhalt",
@@ -12890,6 +13022,9 @@ return {
["pe"]="فضای‌برش",
["ro"]="cutspace",
},
+ ["dataset"]={
+ ["en"]="dataset",
+ },
["date"]={
["cs"]="datum",
["de"]="datum",
@@ -12990,6 +13125,10 @@ return {
["pe"]="دورو",
["ro"]="douafete",
},
+ ["down"]={
+ ["en"]="down",
+ ["nl"]="omlaag",
+ },
["each"]={
["cs"]="kazdy",
["de"]="jede",
@@ -13010,6 +13149,10 @@ return {
["pe"]="لبه",
["ro"]="bordura",
},
+ ["embed"]={
+ ["en"]="embed",
+ ["nl"]="sluitin",
+ },
["empty"]={
["cs"]="prazdne",
["de"]="leer",
@@ -13020,6 +13163,10 @@ return {
["pe"]="تهی",
["ro"]="gol",
},
+ ["end"]={
+ ["en"]="end",
+ ["nl"]="eind",
+ },
["endnote"]={
["cs"]="endnote",
["de"]="endnote",
@@ -13060,6 +13207,9 @@ return {
["pe"]="زوج",
["ro"]="par",
},
+ ["export"]={
+ ["en"]="export",
+ },
["external"]={
["cs"]="externi",
["de"]="extern",
@@ -13070,6 +13220,9 @@ return {
["pe"]="خارجی",
["ro"]="extern",
},
+ ["extremestretch"]={
+ ["en"]="extremestretch",
+ },
["fact"]={
["cs"]="fakt",
["de"]="gegeben",
@@ -13190,6 +13343,46 @@ return {
["pe"]="پنج",
["ro"]="cinci",
},
+ ["six"]={
+ ["cs"]="six",
+ ["de"]="sechs",
+ ["en"]="six",
+ ["fr"]="six",
+ ["it"]="six",
+ ["nl"]="zes",
+ ["pe"]="six",
+ ["ro"]="six",
+ },
+ ["seven"]={
+ ["cs"]="seven",
+ ["de"]="sieben",
+ ["en"]="seven",
+ ["fr"]="seven",
+ ["it"]="seven",
+ ["nl"]="zeven",
+ ["pe"]="seven",
+ ["ro"]="seven",
+ },
+ ["eight"]={
+ ["cs"]="eight",
+ ["de"]="acht",
+ ["en"]="eight",
+ ["fr"]="eight",
+ ["it"]="eight",
+ ["nl"]="acht",
+ ["pe"]="eight",
+ ["ro"]="eight",
+ },
+ ["nine"]={
+ ["cs"]="nine",
+ ["de"]="neun",
+ ["en"]="nine",
+ ["fr"]="nine",
+ ["it"]="nine",
+ ["nl"]="negen",
+ ["pe"]="nine",
+ ["ro"]="nine",
+ },
["fix"]={
["cs"]="fixuj",
["de"]="stellewiederher",
@@ -13270,6 +13463,10 @@ return {
["pe"]="پمپ‌راست",
["ro"]="flushright",
},
+ ["followingpage"]={
+ ["en"]="followingpage",
+ ["nl"]="opvolgendepagina",
+ },
["footer"]={
["cs"]="upati",
["de"]="fusszeile",
@@ -13410,6 +13607,16 @@ return {
["pe"]="پیش‌قسمت",
["ro"]="prolog",
},
+ ["fullhz"]={
+ ["cs"]="fullhz",
+ ["de"]="fullhz",
+ ["en"]="fullhz",
+ ["fr"]="fullhz",
+ ["it"]="fullhz",
+ ["nl"]="fullenhz",
+ ["pe"]="fullhz",
+ ["ro"]="fullhz",
+ },
["global"]={
["cs"]="globalne",
["de"]="global",
@@ -13480,10 +13687,6 @@ return {
["pe"]="نیم‌خط",
["ro"]="jumatatelinie",
},
- ["quarterline"]={
- ["en"]="quarterline",
- ["nl"]="kwartregel",
- },
["handwritten"]={
["cs"]="rukopisne",
["de"]="handschrift",
@@ -13694,8 +13897,24 @@ return {
["pe"]="ارث‌بردن",
["ro"]="inherit",
},
+ ["ininner"]={
+ ["cs"]="ininner",
+ ["de"]="ininner",
+ ["en"]="ininner",
+ ["fr"]="ininner",
+ ["it"]="ininner",
+ ["nl"]="inbinnen",
+ ["pe"]="درداخلی",
+ ["ro"]="ininner",
+ },
+ ["ininneredge"]={
+ ["en"]="ininneredge",
+ },
+ ["ininnermargin"]={
+ ["en"]="ininnermargin",
+ },
["inleft"]={
- ["cs"]="vlevo",
+ ["cs"]="ivlevo",
["de"]="imlinken",
["en"]="inleft",
["fr"]="dansgauche",
@@ -13704,6 +13923,29 @@ return {
["pe"]="درون‌چپ",
["ro"]="instanga",
},
+ ["inleftedge"]={
+ ["cs"]="nalevo",
+ ["de"]="imlinkenrand",
+ ["en"]="inleftedge",
+ ["fr"]="dansbordgauche",
+ ["it"]="inlatosinistro",
+ ["nl"]="inlinkerrand",
+ ["pe"]="درلبه‌چپ",
+ ["ro"]="inparteastanga",
+ },
+ ["inleftmargin"]={
+ ["cs"]="nalevyokraj",
+ ["de"]="inlinkermarginale",
+ ["en"]="inleftmargin",
+ ["fr"]="dansmargegauche",
+ ["it"]="inmarginesinistro",
+ ["nl"]="inlinkermarge",
+ ["pe"]="درحاشیه‌چپ",
+ ["ro"]="inmargineastanga",
+ },
+ ["inline"]={
+ ["en"]="inline",
+ },
["inmargin"]={
["cs"]="naokraji",
["de"]="imrand",
@@ -13744,8 +13986,34 @@ return {
["pe"]="حاشیه‌داخلی",
["ro"]="innermargin",
},
+ ["inother"]={
+ ["cs"]="inother",
+ ["de"]="inother",
+ ["en"]="inother",
+ ["fr"]="inother",
+ ["it"]="inother",
+ ["nl"]="inandere",
+ ["pe"]="inother",
+ ["ro"]="inother",
+ },
+ ["inouter"]={
+ ["cs"]="inouter",
+ ["de"]="inouter",
+ ["en"]="inouter",
+ ["fr"]="inouter",
+ ["it"]="inouter",
+ ["nl"]="inbuiten",
+ ["pe"]="درخارجی",
+ ["ro"]="inouter",
+ },
+ ["inouteredge"]={
+ ["en"]="inouteredge",
+ },
+ ["inoutermargin"]={
+ ["en"]="inoutermargin",
+ },
["inright"]={
- ["cs"]="vpravo",
+ ["cs"]="ivpravo",
["de"]="imrechten",
["en"]="inright",
["fr"]="dansdroit",
@@ -13754,6 +14022,29 @@ return {
["pe"]="درون‌راست",
["ro"]="indreapta",
},
+ ["inrightedge"]={
+ ["cs"]="napravo",
+ ["de"]="imrechtenrand",
+ ["en"]="inrightedge",
+ ["fr"]="dansborddroit",
+ ["it"]="inlatodestro",
+ ["nl"]="inrechterrand",
+ ["pe"]="درلبه‌راست",
+ ["ro"]="inparteadreapta",
+ },
+ ["inrightmargin"]={
+ ["cs"]="napravyokraj",
+ ["de"]="inrechtermarginale",
+ ["en"]="inrightmargin",
+ ["fr"]="dansmargedroite",
+ ["it"]="inmarginedestro",
+ ["nl"]="inrechtermarge",
+ ["pe"]="درحاشیه‌راست",
+ ["ro"]="inmargineadreapta",
+ },
+ ["integral"]={
+ ["en"]="integral",
+ },
["interaction"]={
["cs"]="interakce",
["de"]="interaktion",
@@ -13774,6 +14065,9 @@ return {
["pe"]="منوی‌پانل",
["ro"]="meniuinteractiune",
},
+ ["interactive"]={
+ ["en"]="interactive",
+ },
["intermezzi"]={
["cs"]="intermezzi",
["de"]="intermezzi",
@@ -13914,6 +14208,9 @@ return {
["pe"]="نگهدار",
["ro"]="mentine",
},
+ ["kerncharacters"]={
+ ["en"]="kerncharacters",
+ },
["knockout"]={
["cs"]="knockout",
["de"]="knockout",
@@ -14074,6 +14371,10 @@ return {
["pe"]="راهنما",
["ro"]="legenda",
},
+ ["less"]={
+ ["en"]="less",
+ ["nl"]="minder",
+ },
["lesshyphenation"]={
["cs"]="lesshyphenation",
["de"]="lesshyphenation",
@@ -14084,6 +14385,9 @@ return {
["pe"]="شکست‌کلمات‌کمتر",
["ro"]="lesshyphenation",
},
+ ["letterspacing"]={
+ ["en"]="letterspacing",
+ },
["line"]={
["cs"]="radek",
["de"]="zeile",
@@ -14174,6 +14478,9 @@ return {
["pe"]="پابا",
["ro"]="lohi",
},
+ ["long"]={
+ ["en"]="long",
+ },
["loose"]={
["cs"]="uvolnene",
["de"]="lose",
@@ -14254,6 +14561,16 @@ return {
["pe"]="لبه‌حاشیه",
["ro"]="marginebordura",
},
+ ["margintext"]={
+ ["cs"]="marginalnitext",
+ ["de"]="marginaltext",
+ ["en"]="margintext",
+ ["fr"]="textemarge",
+ ["it"]="testoinmargine",
+ ["nl"]="margetekst",
+ ["pe"]="متن‌حاشیه",
+ ["ro"]="textmarginal",
+ },
["margintitle"]={
["cs"]="titulmarginalie",
["de"]="marginaltitel",
@@ -14274,15 +14591,8 @@ return {
["pe"]="نشانه‌گذاری",
["ro"]="marcaje",
},
- ["mathematics"]={
- ["cs"]="mathematika",
- ["de"]="mathematik",
- ["en"]="mathematics",
- ["fr"]="mathematique",
- ["it"]="matematica",
- ["nl"]="wiskunde",
- ["pe"]="ریاضی",
- ["ro"]="matematica",
+ ["math"]={
+ ["en"]="math",
},
["mathalignment"]={
["cs"]="mathalignment",
@@ -14304,6 +14614,16 @@ return {
["pe"]="حالتهای‌ریاضی",
["ro"]="mathcases",
},
+ ["mathematics"]={
+ ["cs"]="mathematika",
+ ["de"]="mathematik",
+ ["en"]="mathematics",
+ ["fr"]="mathematique",
+ ["it"]="matematica",
+ ["nl"]="wiskunde",
+ ["pe"]="ریاضی",
+ ["ro"]="matematica",
+ },
["mathmatrix"]={
["cs"]="mathmatrix",
["de"]="mathmatrix",
@@ -14324,6 +14644,18 @@ return {
["pe"]="بیشترین",
["ro"]="max",
},
+ ["maxdepth"]={
+ ["en"]="maxdepth",
+ ["nl"]="maxdiepte",
+ },
+ ["maxheight"]={
+ ["en"]="maxheight",
+ ["nl"]="maxhoogte",
+ },
+ ["maxwidth"]={
+ ["en"]="maxwidth",
+ ["nl"]="maxbreedte",
+ },
["may"]={
["cs"]="kveten",
["de"]="mai",
@@ -14374,6 +14706,10 @@ return {
["pe"]="کمترین",
["ro"]="min",
},
+ ["mindepth"]={
+ ["en"]="mindepth",
+ ["nl"]="mindiepte",
+ },
["minheight"]={
["cs"]="minvyska",
["de"]="minhoehe",
@@ -14404,6 +14740,9 @@ return {
["pe"]="منعکس",
["ro"]="oglindit",
},
+ ["mixed"]={
+ ["en"]="mixed",
+ },
["monday"]={
["cs"]="pondeli",
["de"]="montag",
@@ -14434,6 +14773,9 @@ return {
["pe"]="monobold",
["ro"]="monoaldin",
},
+ ["mononormal"]={
+ ["en"]="mononormal",
+ },
["month"]={
["cs"]="mesic",
["de"]="monat",
@@ -14444,6 +14786,10 @@ return {
["pe"]="ماه",
["ro"]="luna",
},
+ ["more"]={
+ ["en"]="more",
+ ["nl"]="meer",
+ },
["morehyphenation"]={
["cs"]="morehyphenation",
["de"]="morehyphenation",
@@ -14574,6 +14920,9 @@ return {
["pe"]="بدون‌بررسی",
["ro"]="nocheck",
},
+ ["nodepth"]={
+ ["en"]="nodepth",
+ },
["nofit"]={
["cs"]="nofit",
["de"]="nofit",
@@ -14594,6 +14943,9 @@ return {
["pe"]="بدون‌توری",
["ro"]="nogrid",
},
+ ["noheight"]={
+ ["en"]="noheight",
+ },
["nohz"]={
["cs"]="nohz",
["de"]="nohz",
@@ -14604,6 +14956,9 @@ return {
["pe"]="nohz",
["ro"]="nohz",
},
+ ["noline"]={
+ ["en"]="noline",
+ },
["nomarking"]={
["cs"]="zadneznaceni",
["de"]="keinebeschriftung",
@@ -14634,6 +14989,9 @@ return {
["pe"]="بدون‌شماره",
["ro"]="nonumber",
},
+ ["norepeat"]={
+ ["en"]="norepeat",
+ },
["normal"]={
["cs"]="normalni",
["de"]="normal",
@@ -14664,6 +15022,9 @@ return {
["pe"]="بدون",
["ro"]="nu",
},
+ ["notation"]={
+ ["en"]="notation",
+ },
["note"]={
["en"]="note",
},
@@ -14787,6 +15148,9 @@ return {
["pe"]="قدیمی",
["ro"]="old",
},
+ ["oldstyle"]={
+ ["en"]="oldstyle",
+ },
["on"]={
["cs"]="zap",
["de"]="an",
@@ -14847,6 +15211,26 @@ return {
["pe"]="حاشیه‌خارجی",
["ro"]="outermargin",
},
+ ["overbar"]={
+ ["cs"]="nadtrzeno",
+ ["de"]="ueberstrichen",
+ ["en"]="overbar",
+ ["fr"]="overbar",
+ ["it"]="sopralinea",
+ ["nl"]="overstreep",
+ ["pe"]="میله‌رو",
+ ["ro"]="barasus",
+ },
+ ["overbars"]={
+ ["cs"]="nadtrzeni",
+ ["de"]="ueberstreichen",
+ ["en"]="overbars",
+ ["fr"]="overbars",
+ ["it"]="sopralinee",
+ ["nl"]="overstrepen",
+ ["pe"]="میله‌ها‌رو",
+ ["ro"]="supralinie",
+ },
["overlay"]={
["cs"]="prekryv",
["de"]="overlay",
@@ -14867,6 +15251,26 @@ return {
["pe"]="overprint",
["ro"]="overprint",
},
+ ["overstrike"]={
+ ["cs"]="preskrtnuto",
+ ["de"]="durchgestrichen",
+ ["en"]="overstrike",
+ ["fr"]="surlignetout",
+ ["it"]="sbarrato",
+ ["nl"]="doorstreep",
+ ["pe"]="خط‌زدن",
+ ["ro"]="liniepeste",
+ },
+ ["overstrikes"]={
+ ["cs"]="preskrtnuti",
+ ["de"]="durchstreichen",
+ ["en"]="overstrikes",
+ ["fr"]="surligne",
+ ["it"]="sbarrati",
+ ["nl"]="doorstrepen",
+ ["pe"]="خط‌زدنها",
+ ["ro"]="liniipeste",
+ },
["packed"]={
["cs"]="zhustene",
["de"]="gepackt",
@@ -14967,6 +15371,10 @@ return {
["pe"]="پست‌اسکریپت",
["ro"]="postscript",
},
+ ["precedingpage"]={
+ ["en"]="followingpage",
+ ["nl"]="voorafgaandepagina",
+ },
["preference"]={
["cs"]="nastaveni",
["de"]="einstellung",
@@ -15039,7 +15447,7 @@ return {
},
["print"]={
["en"]="print",
- ["nl"]="print", -- afdruk
+ ["nl"]="print",
},
["printable"]={
["cs"]="tisknutelne",
@@ -15047,7 +15455,7 @@ return {
["en"]="printable",
["fr"]="editable",
["it"]="stampabile",
- ["nl"]="printbaar", -- afdrukbaar
+ ["nl"]="printbaar",
["pe"]="قابل‌چاپ",
["ro"]="tiparibil",
},
@@ -15111,6 +15519,10 @@ return {
["pe"]="quadruple",
["ro"]="cvadrupul",
},
+ ["quarterline"]={
+ ["en"]="quarterline",
+ ["nl"]="kwartregel",
+ },
["quotation"]={
["cs"]="citace",
["de"]="zitat",
@@ -15171,16 +15583,6 @@ return {
["pe"]="چهارگوشه",
["ro"]="rectangular",
},
- ["referral"]={
- ["cs"]="znacka",
- ["de"]="merkmal",
- ["en"]="referral",
- ["fr"]="referral",
- ["it"]="referral",
- ["nl"]="kenmerk",
- ["pe"]="مراجعه",
- ["ro"]="referinta",
- },
["reference"]={
["cs"]="odkaz",
["de"]="referenz",
@@ -15191,6 +15593,16 @@ return {
["pe"]="مرجع",
["ro"]="referinta",
},
+ ["referral"]={
+ ["cs"]="znacka",
+ ["de"]="merkmal",
+ ["en"]="referral",
+ ["fr"]="referral",
+ ["it"]="referral",
+ ["nl"]="kenmerk",
+ ["pe"]="مراجعه",
+ ["ro"]="referinta",
+ },
["register"]={
["cs"]="rejstrik",
["de"]="register",
@@ -15431,6 +15843,9 @@ return {
["pe"]="مشکی‌سانز",
["ro"]="sansaldin",
},
+ ["sansnormal"]={
+ ["en"]="sansnormal",
+ },
["sansserif"]={
["cs"]="bezserifu",
["de"]="grotesk",
@@ -15501,6 +15916,9 @@ return {
["pe"]="ببینید",
["ro"]="vezi",
},
+ ["selectfont"]={
+ ["en"]="selectfont",
+ },
["september"]={
["cs"]="zari",
["de"]="september",
@@ -15521,6 +15939,12 @@ return {
["pe"]="سریف",
["ro"]="serif",
},
+ ["serifbold"]={
+ ["en"]="serifbold",
+ },
+ ["serifnormal"]={
+ ["en"]="serifnormal",
+ },
["serried"]={
["cs"]="semknuto",
["de"]="kleinerabstand",
@@ -15531,6 +15955,10 @@ return {
["pe"]="تنگ‌هم",
["ro"]="serried",
},
+ ["setups"]={
+ ["comment"]="no translations",
+ ["en"]="setups",
+ },
["sheet"]={
["cs"]="sheet",
["de"]="sheet",
@@ -15541,6 +15969,27 @@ return {
["pe"]="ورقه",
["ro"]="sheet",
},
+ ["shiftdown"]={
+ ["en"]="shiftdown",
+ },
+ ["shiftup"]={
+ ["en"]="shiftup",
+ },
+ ["short"]={
+ ["cs"]="short",
+ ["de"]="kurz",
+ ["en"]="short",
+ ["fr"]="short",
+ ["it"]="short",
+ ["nl"]="kort",
+ ["ro"]="short",
+ },
+ ["simplefonts"]={
+ ["en"]="simplefonts",
+ },
+ ["simplelist"]={
+ ["en"]="simplelist",
+ },
["singlesided"]={
["cs"]="jednostranne",
["de"]="einzelseitig",
@@ -15631,6 +16080,10 @@ return {
["pe"]="smallcaps",
["ro"]="majusculemici",
},
+ ["smaller"]={
+ ["en"]="smaller",
+ ["nl"]="kleiner",
+ },
["smallitalic"]={
["cs"]="malekurzivni",
["de"]="kleinitalic",
@@ -15711,6 +16164,9 @@ return {
["pe"]="مرتب",
["ro"]="sortat",
},
+ ["sorting"]={
+ ["en"]="sorting",
+ },
["space"]={
["cs"]="mezera",
["de"]="spatium",
@@ -15781,6 +16237,10 @@ return {
["pe"]="شروع",
["ro"]="start",
},
+ ["starter"]={
+ ["en"]="starter",
+ ["nl"]="opener",
+ },
["sticker"]={
["cs"]="sticker",
["de"]="sticker",
@@ -15811,10 +16271,6 @@ return {
["pe"]="ایست",
["ro"]="stopper",
},
- ["starter"]={
- ["en"]="starter",
- ["nl"]="opener",
- },
["stretch"]={
["cs"]="natahnout",
["de"]="strecken",
@@ -15825,6 +16281,9 @@ return {
["pe"]="بکش",
["ro"]="dilatat",
},
+ ["stretched"]={
+ ["en"]="stretched",
+ },
["strict"]={
["cs"]="striktni",
["de"]="streng",
@@ -16148,6 +16607,9 @@ return {
["pe"]="تطابق",
["ro"]="synchronize",
},
+ ["synonym"]={
+ ["en"]="synonym",
+ },
["system"]={
["cs"]="system",
["de"]="systeme",
@@ -16402,6 +16864,35 @@ return {
["pe"]="غیرموجود",
["ro"]="nedisponibil",
},
+ ["underbar"]={
+ ["cs"]="podtrzeno",
+ ["de"]="unterstrichen",
+ ["en"]="underbar",
+ ["fr"]="souslignetout",
+ ["it"]="sottolinea",
+ ["nl"]="onderstreep",
+ ["pe"]="میله‌زیر",
+ ["ro"]="sublinie",
+ },
+ ["underbars"]={
+ ["cs"]="podtrzeni",
+ ["de"]="unterstreichen",
+ ["en"]="underbars",
+ ["fr"]="sousligne",
+ ["it"]="sottolinee",
+ ["nl"]="onderstrepen",
+ ["pe"]="میله‌‌های‌زیر",
+ ["ro"]="sublinii",
+ },
+ ["understrike"]={
+ ["en"]="understrike",
+ },
+ ["understrikes"]={
+ ["en"]="understrikes",
+ },
+ ["unframed"]={
+ ["en"]="unframed",
+ },
["unit"]={
["cs"]="jednotka",
["de"]="einheit",
@@ -16442,6 +16933,10 @@ return {
["pe"]="غیرفشرده",
["ro"]="despachetat",
},
+ ["up"]={
+ ["en"]="up",
+ ["nl"]="omhoog",
+ },
["url"]={
["cs"]="url",
["de"]="url",
@@ -16512,6 +17007,12 @@ return {
["pe"]="خیلی‌بردبار",
["ro"]="foartetolerant",
},
+ ["vfenced"]={
+ ["en"]="vfenced",
+ },
+ ["vulgarfraction"]={
+ ["en"]="vulgarfraction",
+ },
["weak"]={
["cs"]="weak",
["de"]="weak",
@@ -16582,6 +17083,19 @@ return {
["pe"]="عرض",
["ro"]="latime",
},
+ ["word"]={
+ ["cs"]="slovo",
+ ["de"]="wort",
+ ["en"]="word",
+ ["fr"]="mot",
+ ["it"]="parola",
+ ["nl"]="woord",
+ ["pe"]="word",
+ ["ro"]="cuvant",
+ },
+ ["words"]={
+ ["en"]="words",
+ },
["xml"]={
["cs"]="xml",
["de"]="xml",
@@ -16613,4 +17127,599 @@ return {
["ro"]="da",
},
},
+ ["setupstrings"]={
+ ["cd:buffer"]={
+ ["cs"]="buffer",
+ ["de"]="buffer",
+ ["en"]="buffer",
+ ["fr"]="buffer",
+ ["it"]="buffer",
+ ["nl"]="buffer",
+ ["ro"]="buffer",
+ },
+ ["cd:category"]={
+ ["cs"]="category",
+ ["de"]="category",
+ ["en"]="category",
+ ["fr"]="category",
+ ["it"]="category",
+ ["nl"]="category",
+ ["ro"]="category",
+ },
+ ["cd:character"]={
+ ["cs"]="character",
+ ["de"]="character",
+ ["en"]="character",
+ ["fr"]="character",
+ ["it"]="character",
+ ["nl"]="karakter",
+ ["ro"]="character",
+ },
+ ["cd:color"]={
+ ["cs"]="color",
+ ["de"]="color",
+ ["en"]="color",
+ ["fr"]="color",
+ ["it"]="color",
+ ["nl"]="kleur",
+ ["ro"]="color",
+ },
+ ["cd:column"]={
+ ["cs"]="column",
+ ["de"]="column",
+ ["en"]="column",
+ ["fr"]="column",
+ ["it"]="column",
+ ["nl"]="kolom",
+ ["ro"]="column",
+ },
+ ["cd:command"]={
+ ["cs"]="Befehl",
+ ["de"]="Befehl",
+ ["en"]="command",
+ ["fr"]="Befehl",
+ ["it"]="Befehl",
+ ["nl"]="commando",
+ ["ro"]="Befehl",
+ },
+ ["cd:content"]={
+ ["cs"]="content",
+ ["de"]="content",
+ ["en"]="content",
+ ["fr"]="content",
+ ["it"]="content",
+ ["nl"]="inhoud",
+ ["ro"]="content",
+ },
+ ["cd:csname"]={
+ ["cs"]="csname",
+ ["de"]="csname",
+ ["en"]="csname",
+ ["fr"]="csname",
+ ["it"]="csname",
+ ["nl"]="naam",
+ ["ro"]="csname",
+ },
+ ["cd:delimiter"]={
+ ["cs"]="delimiter",
+ ["de"]="delimiter",
+ ["en"]="delimiter",
+ ["fr"]="delimiter",
+ ["it"]="delimiter",
+ ["nl"]="delimiter",
+ ["ro"]="delimiter",
+ },
+ ["cd:destination"]={
+ ["cs"]="destination",
+ ["de"]="destination",
+ ["en"]="destination",
+ ["fr"]="destination",
+ ["it"]="destination",
+ ["nl"]="bestemming",
+ ["ro"]="destination",
+ },
+ ["cd:dimension"]={
+ ["cs"]="Dimension",
+ ["de"]="Dimension",
+ ["en"]="dimension",
+ ["fr"]="Dimension",
+ ["it"]="Dimension",
+ ["nl"]="maat",
+ ["ro"]="Dimension",
+ },
+ ["cd:displaymath"]={
+ ["cs"]="formula",
+ ["de"]="formula",
+ ["en"]="formula",
+ ["fr"]="formula",
+ ["it"]="formula",
+ ["nl"]="formule",
+ ["ro"]="formula",
+ },
+ ["cd:false"]={
+ ["cs"]="false",
+ ["de"]="false",
+ ["en"]="false",
+ ["fr"]="false",
+ ["it"]="false",
+ ["nl"]="false",
+ ["ro"]="false",
+ },
+ ["cd:file"]={
+ ["cs"]="file",
+ ["de"]="file",
+ ["en"]="file",
+ ["fr"]="file",
+ ["it"]="file",
+ ["nl"]="file",
+ ["ro"]="file",
+ },
+ ["cd:path"]={
+ ["cs"]="path",
+ ["de"]="path",
+ ["en"]="path",
+ ["fr"]="path",
+ ["it"]="path",
+ ["nl"]="path",
+ ["ro"]="path",
+ },
+ ["cd:first"]={
+ ["cs"]="first",
+ ["de"]="first",
+ ["en"]="first",
+ ["fr"]="first",
+ ["it"]="first",
+ ["nl"]="eerste",
+ ["ro"]="first",
+ },
+ ["cd:font"]={
+ ["cs"]="font",
+ ["de"]="font",
+ ["en"]="font",
+ ["fr"]="font",
+ ["it"]="font",
+ ["nl"]="font",
+ ["ro"]="font",
+ },
+ ["cd:formula"]={
+ ["cs"]="Formel",
+ ["de"]="Formel",
+ ["en"]="formula",
+ ["fr"]="Formel",
+ ["it"]="Formel",
+ ["nl"]="formule",
+ ["ro"]="Formel",
+ },
+ ["cd:identifier"]={
+ ["cs"]="Name",
+ ["de"]="Name",
+ ["en"]="identifier",
+ ["fr"]="Name",
+ ["it"]="Name",
+ ["nl"]="naam",
+ ["ro"]="Name",
+ },
+ ["cd:index"]={
+ ["cs"]="entry",
+ ["de"]="entry",
+ ["en"]="entry",
+ ["fr"]="entry",
+ ["it"]="entry",
+ ["nl"]="ingang",
+ ["ro"]="entry",
+ },
+ ["cd:inherits"]={
+ ["cs"]="inherits",
+ ["de"]="inherits",
+ ["en"]="inherits",
+ ["fr"]="inherits",
+ ["it"]="inherits",
+ ["nl"]="erft",
+ ["ro"]="inherits",
+ },
+ ["cd:key"]={
+ ["cs"]="key",
+ ["de"]="key",
+ ["en"]="key",
+ ["fr"]="key",
+ ["it"]="key",
+ ["nl"]="parameter",
+ ["ro"]="key",
+ },
+ ["cd:language"]={
+ ["cs"]="sprache",
+ ["de"]="sprache",
+ ["en"]="language",
+ ["fr"]="sprache",
+ ["it"]="sprache",
+ ["nl"]="taal",
+ ["ro"]="sprache",
+ },
+ ["cd:last"]={
+ ["cs"]="last",
+ ["de"]="last",
+ ["en"]="last",
+ ["fr"]="last",
+ ["it"]="last",
+ ["nl"]="laatste",
+ ["ro"]="last",
+ },
+ ["cd:list"]={
+ ["cs"]="Liste",
+ ["de"]="Liste",
+ ["en"]="list",
+ ["fr"]="Liste",
+ ["it"]="Liste",
+ ["nl"]="lijst",
+ ["ro"]="Liste",
+ },
+ ["cd:lpath"]={
+ ["cs"]="lpath",
+ ["de"]="lpath",
+ ["en"]="lpath",
+ ["fr"]="lpath",
+ ["it"]="lpath",
+ ["nl"]="lpath",
+ ["ro"]="lpath",
+ },
+ ["cd:luafunction"]={
+ ["cs"]="luafunction",
+ ["de"]="luafunction",
+ ["en"]="luafunction",
+ ["fr"]="luafunction",
+ ["it"]="luafunction",
+ ["nl"]="luafunction",
+ ["ro"]="luafunction",
+ },
+ ["cd:mark"]={
+ ["cs"]="Beschriftung",
+ ["de"]="Beschriftung",
+ ["en"]="mark",
+ ["fr"]="Beschriftung",
+ ["it"]="Beschriftung",
+ ["nl"]="markering",
+ ["ro"]="Beschriftung",
+ },
+ ["cd:marking"]={
+ ["cs"]="marking",
+ ["de"]="marking",
+ ["en"]="marking",
+ ["fr"]="marking",
+ ["it"]="marking",
+ ["nl"]="markering",
+ ["ro"]="marking",
+ },
+ ["cd:math"]={
+ ["cs"]="formula",
+ ["de"]="formula",
+ ["en"]="formula",
+ ["fr"]="formula",
+ ["it"]="formula",
+ ["nl"]="formule",
+ ["ro"]="formula",
+ },
+ ["cd:matrix"]={
+ ["cs"]="n*m",
+ ["de"]="n*m",
+ ["en"]="n*m",
+ ["fr"]="n*m",
+ ["it"]="n*m",
+ ["nl"]="n*m",
+ ["ro"]="n*m",
+ },
+ ["cd:name"]={
+ ["cs"]="Name",
+ ["de"]="Name",
+ ["en"]="name",
+ ["fr"]="Name",
+ ["it"]="Name",
+ ["nl"]="naam",
+ ["ro"]="Name",
+ },
+ ["cd:node"]={
+ ["cs"]="node",
+ ["de"]="node",
+ ["en"]="node",
+ ["fr"]="node",
+ ["it"]="node",
+ ["nl"]="node",
+ ["ro"]="node",
+ },
+ ["cd:nothing"]={
+ ["cs"]="empty",
+ ["de"]="empty",
+ ["en"]="empty",
+ ["fr"]="empty",
+ ["it"]="empty",
+ ["nl"]="leeg",
+ ["ro"]="empty",
+ },
+ ["cd:number"]={
+ ["cs"]="Nummer",
+ ["de"]="Nummer",
+ ["en"]="number",
+ ["fr"]="Nummer",
+ ["it"]="Nummer",
+ ["nl"]="getal",
+ ["ro"]="Nummer",
+ },
+ ["cd:optional"]={
+ ["cs"]="opt",
+ ["de"]="opt",
+ ["en"]="opt",
+ ["fr"]="opt",
+ ["it"]="opt",
+ ["nl"]="opt",
+ ["ro"]="opt",
+ },
+ ["cd:plural"]={
+ ["cs"]="plural",
+ ["de"]="plural",
+ ["en"]="plural",
+ ["fr"]="plural",
+ ["it"]="plural",
+ ["nl"]="naam",
+ ["ro"]="plural",
+ },
+ ["cd:position"]={
+ ["cs"]="position",
+ ["de"]="position",
+ ["en"]="position",
+ ["fr"]="position",
+ ["it"]="position",
+ ["nl"]="positie",
+ ["ro"]="position",
+ },
+ ["cd:processor"]={
+ ["cs"]="processor",
+ ["de"]="processor",
+ ["en"]="processor",
+ ["fr"]="processor",
+ ["it"]="processor",
+ ["nl"]="verwerker",
+ ["ro"]="processor",
+ },
+ ["cd:reference"]={
+ ["cs"]="reference",
+ ["de"]="reference",
+ ["en"]="reference",
+ ["fr"]="reference",
+ ["it"]="reference",
+ ["nl"]="verwijzing",
+ ["ro"]="reference",
+ },
+ ["cd:row"]={
+ ["cs"]="row",
+ ["de"]="row",
+ ["en"]="row",
+ ["fr"]="row",
+ ["it"]="row",
+ ["nl"]="rij",
+ ["ro"]="row",
+ },
+ ["cd:section"]={
+ ["cs"]="Abschnitt",
+ ["de"]="Abschnitt",
+ ["en"]="section",
+ ["fr"]="Abschnitt",
+ ["it"]="Abschnitt",
+ ["nl"]="sectie",
+ ["ro"]="Abschnitt",
+ },
+ ["cd:sectionblock"]={
+ ["cs"]="sectionblock",
+ ["de"]="sectionblock",
+ ["en"]="sectionblock",
+ ["fr"]="sectionblock",
+ ["it"]="sectionblock",
+ ["nl"]="sectieblok",
+ ["ro"]="sectionblock",
+ },
+ ["cd:see"]={
+ ["cs"]="siehe",
+ ["de"]="siehe",
+ ["en"]="see",
+ ["fr"]="siehe",
+ ["it"]="siehe",
+ ["nl"]="zie",
+ ["ro"]="siehe",
+ },
+ ["cd:setup"]={
+ ["cs"]="setup",
+ ["de"]="setup",
+ ["en"]="setup",
+ ["fr"]="setup",
+ ["it"]="setup",
+ ["nl"]="setup",
+ ["ro"]="setup",
+ },
+ ["cd:singular"]={
+ ["cs"]="singular",
+ ["de"]="singular",
+ ["en"]="singular",
+ ["fr"]="singular",
+ ["it"]="singular",
+ ["nl"]="naam",
+ ["ro"]="singular",
+ },
+ ["cd:style"]={
+ ["cs"]="style",
+ ["de"]="style",
+ ["en"]="style",
+ ["fr"]="style",
+ ["it"]="style",
+ ["nl"]="letter",
+ ["ro"]="style",
+ },
+ ["cd:template"]={
+ ["cs"]="template",
+ ["de"]="template",
+ ["en"]="template",
+ ["fr"]="template",
+ ["it"]="template",
+ ["nl"]="sjabloon",
+ ["ro"]="template",
+ },
+ ["cd:text"]={
+ ["cs"]="Text",
+ ["de"]="Text",
+ ["en"]="text",
+ ["fr"]="Text",
+ ["it"]="Text",
+ ["nl"]="tekst",
+ ["ro"]="Text",
+ },
+ ["cd:title"]={
+ ["cs"]="Setup",
+ ["de"]="Setup",
+ ["en"]="setup",
+ ["fr"]="Setup",
+ ["it"]="Setup",
+ ["nl"]="setup",
+ ["ro"]="Setup",
+ },
+ ["cd:triplet"]={
+ ["cs"]="triplet",
+ ["de"]="triplet",
+ ["en"]="triplet",
+ ["fr"]="triplet",
+ ["it"]="triplet",
+ ["nl"]="triplet",
+ ["ro"]="triplet",
+ },
+ ["cd:true"]={
+ ["cs"]="true",
+ ["de"]="true",
+ ["en"]="true",
+ ["fr"]="true",
+ ["it"]="true",
+ ["nl"]="true",
+ ["ro"]="true",
+ },
+ ["cd:url"]={
+ ["cs"]="url",
+ ["de"]="url",
+ ["en"]="url",
+ ["fr"]="url",
+ ["it"]="url",
+ ["nl"]="url",
+ ["ro"]="url",
+ },
+ ["cd:userdata"]={
+ ["cs"]="userdata",
+ ["de"]="userdata",
+ ["en"]="userdata",
+ ["fr"]="userdata",
+ ["it"]="userdata",
+ ["nl"]="gebruikersdata",
+ ["ro"]="userdata",
+ },
+ ["cd:value"]={
+ ["cs"]="value",
+ ["de"]="value",
+ ["en"]="value",
+ ["fr"]="value",
+ ["it"]="value",
+ ["nl"]="waarde",
+ ["ro"]="value",
+ },
+ ["cd:word"]={
+ ["cs"]="word",
+ ["de"]="word",
+ ["en"]="word",
+ ["fr"]="word",
+ ["it"]="word",
+ ["nl"]="woord",
+ ["ro"]="word",
+ },
+ ["cd:xmlsetup"]={
+ ["cs"]="xmlsetup",
+ ["de"]="xmlsetup",
+ ["en"]="xmlsetup",
+ ["fr"]="xmlsetup",
+ ["it"]="xmlsetup",
+ ["nl"]="xmlsetup",
+ ["ro"]="xmlsetup",
+ },
+ ["cd:sign-s"] = { en = "[-+]" },
+ ["cd:sign-l"] = { en = "[-+]" },
+ ["cd:csname-s"] = { en = "\\..." },
+ ["cd:csname-l"] = { en = "\\..." },
+ ["cd:noargument-s"] = { en = "\\..." },
+ ["cd:noargument-l"] = { en = "\\..." },
+ ["cd:oneargument-s"] = { en = "\\...#1" },
+ ["cd:oneargument-l"] = { en = "\\...#1" },
+ ["cd:twoarguments-s"] = { en = "\\...#1#2" },
+ ["cd:twoarguments-l"] = { en = "\\...#1#2" },
+ ["cd:threearguments-s"] = { en = "\\...#1#2#3" },
+ ["cd:threearguments-l"] = { en = "\\...#1#2#3" },
+ ["cd:braces-s"] = { en = "{...}", lua = '"..."' },
+ ["cd:braces-l"] = { en = "{...,...}", lua = '".. ... .."' },
+ ["cd:brackets-s"] = { en = "[...]", lua = "{ ... }" },
+ ["cd:brackets-l"] = { en = "[...,...]", lua = "{..., ...}" },
+ ["cd:index-s"] = { en = "[...]" },
+ ["cd:index-l"] = { en = "[..+...+..]" },
+ ["cd:math-s"] = { en = "$...$" },
+ ["cd:math-l"] = { en = "$...$" },
+ ["cd:inlinemath-s"] = { en = "$...$" },
+ ["cd:inlinemath-l"] = { en = "$...$" },
+ ["cd:displaymath-s"] = { en = "$$...$$" },
+ ["cd:displaymath-l"] = { en = "$$...$$" },
+ ["cd:template-s"] = { en = "[|...|]" },
+ ["cd:template-l"] = { en = "[|...|...|]" },
+ ["cd:twowords-s"] = { en = "[..+..]" },
+ ["cd:twowords-l"] = { en = "[..+..]" },
+ ["cd:threewords-s"] = { en = "[..+..+..]" },
+ ["cd:threewords-l"] = { en = "[..+..+..]" },
+ ["cd:angle-s"] = { en = "<<...>>" },
+ ["cd:angle-l"] = { en = "<<...>>" },
+ ["cd:reference-s"] = { en = "[...]", lua = "{ ... }" },
+ ["cd:reference-l"] = { en = "[...,...]", lua = "{..., ...}" },
+ ["cd:position-s"] = { en = "(...)" },
+ ["cd:position-l"] = { en = "(...,...)" },
+ ["cd:triplet-s"] = { en = "[x:y:z]" },
+ ["cd:triplet-l"] = { en = "[x:y:z,..]" },
+ ["cd:word-s"] = { en = "{...}", lua = '"..."' },
+ ["cd:word-l"] = { en = "{.. ... ..}", lua = '".. ... .."' },
+ ["cd:content-s"] = { en = "{...}", lua = '"..."' },
+ ["cd:content-l"] = { en = "{.. ... ..}", lua = '".. ... .."' },
+ ["cd:textual-s"] = { en = "..." },
+ ["cd:textual-l"] = { en = ".. ... .." },
+ ["cd:none-s"] = { en = "..." },
+ ["cd:none-l"] = { en = ".. ... .." },
+ ["cd:macro-s"] = { en = "\\... " },
+ ["cd:macro-l"] = { en = "\\... " },
+ ["cd:to-s"] = { en = "\\to " },
+ ["cd:to-l"] = { en = "\\to " },
+ ["cd:destination-s"] = { en = "[{..[ref]}]" },
+ ["cd:destination-l"] = { en = "[..,{..[ref,..]},..]" },
+ ["cd:nothing-s"] = { en = "..." },
+ ["cd:nothing-l"] = { en = "..." },
+ ["cd:file-s"] = { en = " ... " },
+ ["cd:file-l"] = { en = " ... " },
+ ["cd:assignment-s"] = { en = "[..=..]", lua = "{ ..=.. } " },
+ ["cd:assignment-l"] = { en = "[..,..=..,..]", lua = "{ ..,..=..,.. } " },
+ ["cd:assignmentbraces-s"] = { en = "{..=..}" },
+ ["cd:assignmentbraces-l"] = { en = "{..,..=..,..}" },
+ ["cd:assignmentbrackets-s"] = { en = "[..=..]", lua = "{ ..=.. } " },
+ ["cd:assignmentbrackets-l"] = { en = "[..,..=..,..]", lua = "{ ..,..=..,.. } " },
+ ["cd:assignmentparentheses-s"] = { en = "(..=..)" },
+ ["cd:assignmentparentheses-l"] = { en = "(..,..=..,..)" },
+ ["cd:apply-s"] = { en = "[..=>..]" },
+ ["cd:apply-l"] = { en = "[..,..=>..,..]" },
+ ["cd:if-s"] = { en = "\\if... " },
+ ["cd:if-l"] = { en = "\\if... " },
+ ["cd:case-s"] = { en = "\\case " },
+ ["cd:case-l"] = { en = "\\case " },
+ ["cd:else-s"] = { en = "\\else " },
+ ["cd:else-l"] = { en = "\\else " },
+ ["cd:or-s"] = { en = "\\or " },
+ ["cd:or-l"] = { en = "\\or " },
+ ["cd:fi-s"] = { en = "\\fi " },
+ ["cd:fi-l"] = { en = "\\fi " },
+ ["cd:par-s"] = { en = "\\par " },
+ ["cd:par-l"] = { en = "\\par " },
+ ["cd:sep-s"] = { en = "\\" },
+ ["cd:sep-l"] = { en = "\\" },
+ }
}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/mult-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-def.mkiv
new file mode 100644
index 00000000000..d9404bc1625
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-def.mkiv
@@ -0,0 +1,46 @@
+%D \module
+%D [ file=mult-def,
+%D version=2008.10.22,
+%D title=\CONTEXT\ Multilingual Macros,
+%D subtitle=Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\installcorenamespace{multilingual}
+
+\setvalue{\??multilingual czech}{cs}
+\setvalue{\??multilingual german}{de}
+\setvalue{\??multilingual english}{en}
+\setvalue{\??multilingual french}{fr}
+\setvalue{\??multilingual italian}{it}
+\setvalue{\??multilingual dutch}{nl}
+\setvalue{\??multilingual persian}{pe}
+\setvalue{\??multilingual romanian}{ro}
+
+% \def\userinterfacetag{\ifcsname\??multilingual\currentinterface\endcsname\csname\??multilingual\currentinterface\endcsname\else en\fi}
+% \def\userresponsestag{\ifcsname\??multilingual\currentresponses\endcsname\csname\??multilingual\currentresponses\endcsname\else en\fi}
+
+\def\userinterfacetag{\ifcsname\??multilingual\currentinterface\endcsname\lastnamedcs\else en\fi}
+\def\userresponsestag{\ifcsname\??multilingual\currentresponses\endcsname\lastnamedcs\else en\fi}
+
+% \input mult-\userinterfacetag \relax
+% \input mult-m\userresponsestag \relax
+
+\clf_setuserinterface{\userinterfacetag}{\userresponsestag}
+
+% some left-overs
+
+\def\c!HL {HL}
+\def\c!VL {VL}
+\def\c!NL {NL}
+
+% stop todo
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mult-dim.mkvi b/Master/texmf-dist/tex/context/base/mkiv/mult-dim.mkvi
index ffc04b523f8..0224e3dbb16 100644
--- a/Master/texmf-dist/tex/context/base/mult-dim.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-dim.mkvi
@@ -13,6 +13,8 @@
\writestatus{loading}{ConTeXt Core Macros / General}
+% we could write a proper parser now in lua
+
\unprotect
%D \macros
@@ -34,6 +36,8 @@
\installcorenamespace{dimensionnormal}
+\def\assign_dimension_direct#value#dimension#small#medium#big{#dimension=#value\relax}
+
\setvalue{\??dimensionnormal \v!none }#value#dimension#small#medium#big{#dimension\zeropoint}
\setvalue{\??dimensionnormal \empty }#value#dimension#small#medium#big{#dimension\zeropoint}
\setvalue{\??dimensionnormal \v!small }#value#dimension#small#medium#big{#dimension=#small\relax}
@@ -42,10 +46,17 @@
\setvalue{\??dimensionnormal-\v!small }#value#dimension#small#medium#big{#dimension=-#small\relax}
\setvalue{\??dimensionnormal-\v!medium}#value#dimension#small#medium#big{#dimension=-#medium\relax}
\setvalue{\??dimensionnormal-\v!big }#value#dimension#small#medium#big{#dimension=-#big\relax}
-\setvalue{\??dimensionnormal\s!unknown}#value#dimension#small#medium#big{#dimension=#value\relax}
+\letvalue{\??dimensionnormal\s!unknown}\assign_dimension_direct
+
+% \unexpanded\def\assigndimension#value%
+% {\csname\??dimensionnormal\ifcsname\??dimensionnormal#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
\unexpanded\def\assigndimension#value%
- {\csname\??dimensionnormal\ifcsname\??dimensionnormal#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+ {\ifcsname\??dimensionnormal#value\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\assign_dimension_direct
+ \fi{#value}}
%D The next variant assigns to a macro instead of a dimension.
%D
@@ -62,14 +73,24 @@
\installcorenamespace{dimensionalfa}
+\def\assign_alpha_dimension_direct#value#macro#small#medium#big{\edef#macro{#value}}
+
\setvalue{\??dimensionalfa\v!none }#value#macro#small#medium#big{\let #macro\!!zerocount}
\setvalue{\??dimensionalfa\v!small }#value#macro#small#medium#big{\edef#macro{#small}}
\setvalue{\??dimensionalfa\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
\setvalue{\??dimensionalfa\v!big }#value#macro#small#medium#big{\edef#macro{#big}}
-\setvalue{\??dimensionalfa\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}}
+\letvalue{\??dimensionalfa\s!unknown}\assign_alpha_dimension_direct
+
+% \unexpanded\def\assignalfadimension#value%
+% {\csname\??dimensionalfa\ifcsname\??dimensionalfa#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
\unexpanded\def\assignalfadimension#value%
- {\csname\??dimensionalfa\ifcsname\??dimensionalfa#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+ {\ifcsname\??dimensionalfa#value\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\assign_alpha_dimension_direct
+ \fi
+ {#value}}
%D \macros
%D {assignvalue}
@@ -87,13 +108,22 @@
\installcorenamespace{dimensionvalue}
+\def\assign_value_direct#value#macro#small#medium#big{\edef#macro{#value}}
+
\setvalue{\??dimensionvalue\v!small }#value#macro#small#medium#big{\edef#macro{#small}}
\setvalue{\??dimensionvalue\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
\setvalue{\??dimensionvalue\v!big }#value#macro#small#medium#big{\edef#macro{#big}}
-\setvalue{\??dimensionvalue\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}}
+\letvalue{\??dimensionvalue\s!unknown}\assign_value_direct
+
+% \unexpanded\def\assignvalue#value%
+% {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
\unexpanded\def\assignvalue#value%
- {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+ {\ifcsname\??dimensionvalue#value\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\assign_value_direct
+ \fi{#value}}
%D \macros
%D {assignwidth}
@@ -113,15 +143,28 @@
\newbox\b_assign_width
+\def\assign_width_direct#value#dimension#content#extra{#dimension=#value\relax}
+
+% line is like fit but can be used later as signal for ...
+
\setvalue{\??dimensionwidth }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
\setbox\b_assign_width\emptybox}
\setvalue{\??dimensionwidth\v!fit }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
\setbox\b_assign_width\emptybox}
\setvalue{\??dimensionwidth\v!broad }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\dimexpr\wd\b_assign_width+#extra\relax
\setbox\b_assign_width\emptybox}
-\setvalue{\??dimensionwidth\s!unknown}#value#dimension#content#extra{#dimension=#value\relax}
+\setvalue{\??dimensionwidth\v!line }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width
+ \setbox\b_assign_width\emptybox}
+\letvalue{\??dimensionwidth\s!unknown}\assign_width_direct
+
+% \unexpanded\def\assignwidth#value%
+% {\csname\??dimensionwidth\ifcsname\??dimensionwidth#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
\unexpanded\def\assignwidth#value%
- {\csname\??dimensionwidth\ifcsname\??dimensionwidth#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+ {\ifcsname\??dimensionwidth#value\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\assign_width_direct
+ \fi{#value}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mult-fun.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-fun.lua
index 27aa3205510..76a2ab915ad 100644
--- a/Master/texmf-dist/tex/context/base/mult-fun.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-fun.lua
@@ -11,8 +11,10 @@ return {
-- "originlength", "tickstep ", "ticklength",
-- "autoarrows", "ahfactor",
-- "angleoffset", anglelength", anglemethod",
+ "ahvariant", "ahdimple", "ahfactor",
"metapostversion",
"maxdimensions",
+ "drawoptionsfactor",
},
commands = {
"transparency",
@@ -43,13 +45,15 @@ return {
"withshade", "withcircularshade", "withlinearshade", -- old but kept
"defineshade", "shaded",
-- "withshading", "withlinearshading", "withcircularshading", "withfromshadecolor", "withtoshadecolor",
- "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter",
+ "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector",
+ "withshadecenter", "withshadedirection", "withshadestep", "withshadefraction",
"cmyk", "spotcolor", "multitonecolor", "namedcolor",
"drawfill", "undrawfill",
"inverted", "uncolored", "softened", "grayed", "greyed",
"onlayer",
"along",
- "graphictext", "loadfigure", "externalfigure", "figure", "register",
+ "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", -- "lua",
+ "checkedbounds", "checkbounds", "strut", "rule",
"withmask", "bitmapimage",
"colordecimals", "ddecimal", "dddecimal", "ddddecimal",
"textext", "thetextext", "rawtextext", "textextoffset",
@@ -105,9 +109,9 @@ return {
"colortype", "whitecolor", "blackcolor", "basiccolors",
--
-- "swappointlabels",
- "normalfill", "normaldraw", "visualizepaths", "naturalizepaths",
- "drawboundary", "drawwholepath",
- "visualizeddraw", "visualizedfill",
+ "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths",
+ "drawboundary", "drawwholepath", "drawpathonly",
+ "visualizeddraw", "visualizedfill", "detaileddraw",
"draworigin", "drawboundingbox",
"drawpath",
"drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines",
@@ -122,7 +126,11 @@ return {
"passvariable", "passarrayvariable", "tostring", "format", "formatted",
"startpassingvariable", "stoppassingvariable",
--
- "eofill", "eoclip",
+ "eofill", "eoclip", "nofill", "fillup", "eofillup",
"area",
+ --
+ "addbackground",
+ --
+ "shadedup", "shadeddown", "shadedleft", "shadedright",
},
}
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-ini.lua
index bd3b1d38b37..409c735b7a6 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-ini.lua
@@ -6,9 +6,10 @@ if not modules then modules = { } end modules ['mult-ini'] = {
license = "see context related readme files"
}
-local format, gmatch, match = string.format, string.gmatch, string.match
+local format, gmatch, match, find, sub = string.format, string.gmatch, string.match, string.find, string.sub
local lpegmatch = lpeg.match
-local serialize = table.serialize
+local serialize, concat = table.serialize, table.concat
+local rawget, type = rawget, type
local context = context
local commands = commands
@@ -17,6 +18,7 @@ local implement = interfaces.implement
local allocate = utilities.storage.allocate
local mark = utilities.storage.mark
local prtcatcodes = catcodes.numbers.prtcatcodes
+local vrbcatcodes = catcodes.numbers.vrbcatcodes
local contextsprint = context.sprint
local setmetatableindex = table.setmetatableindex
local formatters = string.formatters
@@ -29,6 +31,7 @@ interfaces.variables = mark(interfaces.variables or { })
interfaces.elements = mark(interfaces.elements or { })
interfaces.formats = mark(interfaces.formats or { })
interfaces.translations = mark(interfaces.translations or { })
+interfaces.setupstrings = mark(interfaces.setupstrings or { })
interfaces.corenamespaces = mark(interfaces.corenamespaces or { })
local registerstorage = storage.register
@@ -39,6 +42,7 @@ local variables = interfaces.variables
local elements = interfaces.elements
local formats = interfaces.formats
local translations = interfaces.translations
+local setupstrings = interfaces.setupstrings
local corenamespaces = interfaces.corenamespaces
local reporters = { } -- just an optimization
@@ -47,6 +51,7 @@ registerstorage("interfaces/variables", variables, "interfaces.variabl
registerstorage("interfaces/elements", elements, "interfaces.elements")
registerstorage("interfaces/formats", formats, "interfaces.formats")
registerstorage("interfaces/translations", translations, "interfaces.translations")
+registerstorage("interfaces/setupstrings", setupstrings, "interfaces.setupstrings")
registerstorage("interfaces/corenamespaces", corenamespaces, "interfaces.corenamespaces")
interfaces.interfaces = {
@@ -59,6 +64,9 @@ sharedstorage.currentresponse = sharedstorage.currentresponse or "en"
local currentinterface = sharedstorage.currentinterface
local currentresponse = sharedstorage.currentresponse
+interfaces.currentinterface = currentinterface
+interfaces.currentresponse = currentresponse
+
local complete = allocate()
interfaces.complete = complete
@@ -83,6 +91,7 @@ setmetatableindex(constants, valueiskey)
setmetatableindex(elements, valueiskey)
setmetatableindex(formats, valueiskey)
setmetatableindex(translations, valueiskey)
+setmetatableindex(setupstrings, valueiskey)
function interfaces.registernamespace(n,namespace)
corenamespaces[n] = namespace
@@ -129,6 +138,12 @@ function interfaces.setformat(tag,values)
add(formats,tag,values)
end
+local function getsetupstring(tag)
+ return setupstrings[tag] or tag
+end
+
+interfaces.getsetupstring = getsetupstring
+
-- the old method:
local replacer = lpeg.replacer { { "--", "%%a" } }
@@ -156,7 +171,7 @@ function interfaces.getmessage(category,tag,default)
end
function interfaces.doifelsemessage(category,tag)
- return formats[fulltag(category,tag)]
+ return rawget(formats,fulltag(category,tag))
end
local splitter = lpeg.splitat(",")
@@ -194,56 +209,130 @@ end
logs.setmessenger(context.verbatim.ctxreport)
--- initialization
+-- todo: use setmacro
function interfaces.setuserinterface(interface,response)
sharedstorage.currentinterface, currentinterface = interface, interface
- sharedstorage.currentresponse, currentresponse = response, response
+ sharedstorage.currentresponse, currentresponse = response, response
if environment.initex then
- local nofconstants = 0
- for given, constant in next, complete.constants do
- constant = constant[interface] or constant.en or given
- constants[constant] = given -- breedte -> width
- contextsprint(prtcatcodes,"\\ui_c{",given,"}{",constant,"}") -- user interface constant
- nofconstants = nofconstants + 1
+ local setmacro = false
+ -- local setmacro = interfaces.setmacro -- cleaner (but we need to test first)
+ local nofconstants = 0
+ local nofvariables = 0
+ local nofelements = 0
+ local nofcommands = 0
+ local nofformats = 0
+ local noftranslations = 0
+ local nofsetupstrings = 0
+ --
+ if setmacro then
+ for given, constant in next, complete.constants do
+ constant = constant[interface] or constant.en or given
+ constants[constant] = given -- breedte -> width
+ nofconstants = nofconstants + 1
+ setmacro("c!"..given,given)
+ if currentinterface ~= "en" then
+ setmacro("k!"..constant,given)
+ end
+ end
+ else
+ 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))
end
- local nofvariables = 0
- for given, variable in next, complete.variables do
- variable = variable[interface] or variable.en or given
- variables[given] = variable -- ja -> yes
- contextsprint(prtcatcodes,"\\ui_v{",given,"}{",variable,"}") -- user interface variable
- nofvariables = nofvariables + 1
+ --
+ if setmacro then
+ for given, variable in next, complete.variables do
+ variable = variable[interface] or variable.en or given
+ variables[given] = variable -- ja -> yes
+ nofvariables = nofvariables + 1
+ setmacro("v!"..given,variable)
+ end
+ else
+ 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))
end
- local nofelements = 0
- for given, element in next, complete.elements do
- element = element[interface] or element.en or given
- elements[element] = given
- contextsprint(prtcatcodes,"\\ui_e{",given,"}{",element,"}") -- user interface element
- nofelements = nofelements + 1
+ --
+ if setmacro then
+ for given, element in next, complete.elements do
+ element = element[interface] or element.en or given
+ elements[element] = given
+ nofelements = nofelements + 1
+ setmacro("e!"..given,element)
+ end
+ else
+ 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))
end
- local nofcommands = 0
- for given, command in next, complete.commands do
- command = command[interface] or command.en or given
- if command ~= given then
- contextsprint(prtcatcodes,"\\ui_m{",given,"}{",command,"}") -- user interface macro
+ --
+ if setmacro then
+ -- this can only work ok when we already have defined the command
+ luatex.registerdumpactions(function()
+ for given, command in next, complete.commands do
+ command = command[interface] or command.en or given
+ if command ~= given then
+ setmacro(prtcatcodes,given,"\\"..command)
+ end
+ nofcommands = nofcommands + 1
+ end
+ end)
+ else
+ local t, n, f = { }, 0, formatters["\\ui_m{%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
- nofcommands = nofcommands + 1
+ contextsprint(prtcatcodes,concat(t))
end
- local nofformats = 0
+ --
for given, format in next, complete.messages.formats do
formats[given] = format[interface] or format.en or given
nofformats = nofformats + 1
end
- local noftranslations = 0
+ --
for given, translation in next, complete.messages.translations do
translations[given] = translation[interface] or translation.en or given
noftranslations = noftranslations + 1
end
- report_interface("definitions: %a constants, %a variables, %a elements, %a commands, %a formats, %a translations",
- nofconstants,nofvariables,nofelements,nofcommands,nofformats,noftranslations)
+ --
+ 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 {
@@ -274,16 +363,6 @@ function interfaces.cachesetup(t)
end
end
--- if token.lookup then
--- interfaces.is_command = token.lookup
--- else
-
- function interfaces.is_command(str)
- return (str and str ~= "" and token.csname_name(token.create(str)) ~= "") or false -- there will be a proper function for this
- end
-
--- end
-
function interfaces.interfacedcommand(name)
local command = complete.commands[name]
return command and command[currentinterface] or name
@@ -295,6 +374,10 @@ function interfaces.writestatus(category,message)
reporters[category](message) -- could also be a setmetatablecall
end
+function interfaces.message(str)
+ texio.write(str) -- overloaded
+end
+
implement { name = "registernamespace", actions = interfaces.registernamespace, arguments = { "integer", "string" } }
implement { name = "setinterfaceconstant", actions = interfaces.setconstant, arguments = { "string", "string" } }
implement { name = "setinterfacevariable", actions = interfaces.setvariable, arguments = { "string", "string" } }
@@ -322,6 +405,21 @@ implement {
arguments = { "string", "string" },
}
+implement {
+ name = "message",
+ overload = true,
+ actions = interfaces.message,
+ arguments = "string",
+}
+
+implement {
+ name = "getsetupstring",
+ actions = function(s)
+ contextsprint(vrbcatcodes,getsetupstring(s))
+ end,
+ arguments = "string",
+}
+
local function showassignerror(namespace,key,line)
local ns, instance = match(namespace,"^(%d+)[^%a]+(%a*)")
if ns then
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-ini.mkiv
index 1dd5a696a94..8ed147c63e4 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-ini.mkiv
@@ -385,9 +385,15 @@
\unexpanded\def\doifelsemessage #1#2{\clf_doifelsemessage{#1}{#2}}
\unexpanded\def\showmessage #1#2#3{\clf_showmessage{#1}{#2}{#3}}
\unexpanded\def\writestatus #1#2{\clf_writestatus{#1}{#2}}
+\unexpanded\def\message {\clf_message}
\let\doifmessageelse\doifelsemessage
+\unexpanded\def\inlinemessage #1{\dontleavehmode{\tttf#1}}
+\unexpanded\def\displaymessage#1{\blank\inlinemessage{#1}\blank}
+
+\let\getsetupstring\clf_getsetupstring
+
%D \macros
%D {ifshowwarnings, ifshowmessages}
%D
@@ -798,7 +804,9 @@
% \stopinterface
\def\ui_c#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}%
- \expandafter\gdef\csname\k!prefix!#2\endcsname{#1}} % backmapping from non english
+ \expandafter\gdef\csname\k!prefix!#2\endcsname{#1}} % backmapping from non english
+\def\ui_s #1{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}%
+ \expandafter\gdef\csname\k!prefix!#1\endcsname{#1}} % backmapping from non english
\def\ui_v#1#2{\expandafter\gdef\csname\v!prefix!#1\endcsname{#2}}
\def\ui_e#1#2{\expandafter\gdef\csname\e!prefix!#1\endcsname{#2}}
\def\ui_m#1#2{\expandafter\gdef\csname#2\expandafter\endcsname\expandafter{\csname#1\endcsname}}
@@ -806,6 +814,7 @@
\startinterface english
\def\ui_c#1#2{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}}
+ \def\ui_s #1{\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}}
\stopinterface
@@ -836,7 +845,7 @@
\def\contextversionnumber{0}
\else
%\def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi#2\ifnum#3<10 0\fi#3 #4:#5}
- \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi\purenumber{#2}\ifnum#3<10 0\fi\purenumber{#3} #4:#5}
+ \def\contextversionnumber#1.#2.#3 #4:#5\relax{#1\ifnum#2<10 0\fi\purenumber{#2}\ifnum#3<10 0\fi\purenumber{#3} #4:#5}
\edef\contextversionnumber{\expandafter\contextversionnumber\contextversion\relax\space\contextmark}
\fi
diff --git a/Master/texmf-dist/tex/context/base/mult-low.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-low.lua
index 5396ec723ea..c9a13c1e8b7 100644
--- a/Master/texmf-dist/tex/context/base/mult-low.lua
+++ b/Master/texmf-dist/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", "plushundred",
+ "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plustwohundred",
"plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone",
"zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint",
"points", "halfpoint",
@@ -131,6 +131,8 @@ return {
"figurespace", "punctuationspace", "hairspace",
"zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj",
"optionalspace", "asciispacechar",
+ --
+ "Ux", "eUx", "Umathaccents",
},
["helpers"] = {
--
@@ -172,10 +174,12 @@ return {
--
"donothing", "dontcomplain", "forgetall",
--
- "donetrue", "donefalse",
+ "donetrue", "donefalse", "foundtrue", "foundfalse",
--
"inlineordisplaymath","indisplaymath","forcedisplaymath","startforceddisplaymath","stopforceddisplaymath","reqno",
--
+ "mathortext",
+ --
"htdp",
"unvoidbox",
"hfilll", "vfilll",
@@ -192,6 +196,7 @@ return {
"ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg",
"ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg",
"ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox",
+ "ruledhpack", "ruledvpack", "ruledtpack",
"ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern",
"ruledhglue", "ruledvglue", "normalhglue", "normalvglue",
"ruledpenalty",
@@ -209,7 +214,7 @@ return {
--
"availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction",
--
- "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs",
+ "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox",
--
"scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance",
"scratchhsize", "scratchvsize",
@@ -217,14 +222,15 @@ return {
"scratchxposition", "scratchyposition",
"scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset",
--
- "scratchcounterone", "scratchcountertwo", "scratchcounterthree",
- "scratchdimenone", "scratchdimentwo", "scratchdimenthree",
- "scratchskipone", "scratchskiptwo", "scratchskipthree",
- "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree",
- "scratchtoksone", "scratchtokstwo", "scratchtoksthree",
- "scratchboxone", "scratchboxtwo", "scratchboxthree",
+ "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchcounterfour", "scratchcounterfive", "scratchcountersix",
+ "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchdimenfour", "scratchdimenfive", "scratchdimensix",
+ "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchskipfour", "scratchskipfive", "scratchskipsix",
+ "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchmuskipfour", "scratchmuskipfive", "scratchmuskipsix",
+ "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchtoksfour", "scratchtoksfive", "scratchtokssix",
+ "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchboxfour", "scratchboxfive", "scratchboxsix",
"scratchnx", "scratchny", "scratchmx", "scratchmy",
"scratchunicode",
+ "scratchmin", "scratchmax",
--
"scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip",
--
@@ -332,6 +338,7 @@ return {
"offinterlineskip", "oninterlineskip", "nointerlineskip",
--
"strut", "halfstrut", "quarterstrut", "depthstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight",
+ "leftboundary", "rightboundary", "signalcharacter",
--
"ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing",
"ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing",
@@ -361,6 +368,7 @@ return {
--
"startimath", "stopimath", "normalstartimath", "normalstopimath",
"startdmath", "stopdmath", "normalstartdmath", "normalstopdmath",
+ "normalsuperscript", "normalsubscript",
--
"uncramped", "cramped", "triggermathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette",
"mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox",
@@ -388,6 +396,7 @@ return {
"startluacode", "stopluacode", "startlua", "stoplua",
"startctxfunction","stopctxfunction","ctxfunction",
"startctxfunctiondefinition","stopctxfunctiondefinition", "installctxfunction",
+ "cldprocessfile", "cldloadfile", "cldcontext", "cldcommand",
--
"carryoverpar",
--
@@ -398,12 +407,19 @@ return {
"righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop",
"rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop",
"autodirhbox", "autodirvbox", "autodirvtop",
+ "leftorrighthbox", "leftorrightvbox", "leftorrightvtop",
"lefttoright", "righttoleft","synchronizelayoutdirection","synchronizedisplaydirection","synchronizeinlinedirection",
--
"lesshyphens", "morehyphens", "nohyphens", "dohyphens",
--
"Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath",
--
- "nobreak", "allowbreak", "goodbreak",
+ "break", "nobreak", "allowbreak", "goodbreak",
+ --
+ "nospace", "nospacing", "dospacing",
+ --
+ "naturalhbox", "naturalvbox", "naturalhpack", "naturalvpack",
+ --
+ "frule",
}
}
diff --git a/Master/texmf-dist/tex/context/base/mult-mes.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-mes.lua
index 64184f8b0f0..979831726eb 100644
--- a/Master/texmf-dist/tex/context/base/mult-mes.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-mes.lua
@@ -490,6 +490,9 @@ return {
no = "there is nothing to split",
ro = "there is nothing to split",
},
+ ["floatblocks:1"] = {
+ en = "%a is empty",
+ },
["floatblocks:2"] = {
cs = "%a ulozeno",
de = "%a gespeichert",
diff --git a/Master/texmf-dist/tex/context/base/mult-mps.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-mps.lua
index a6bebc26613..a6bebc26613 100644
--- a/Master/texmf-dist/tex/context/base/mult-mps.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-mps.lua
diff --git a/Master/texmf-dist/tex/context/base/mult-prm.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-prm.lua
index 9d6fc7810e8..d9c432f7c66 100644
--- a/Master/texmf-dist/tex/context/base/mult-prm.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-prm.lua
@@ -84,6 +84,8 @@ return {
"Udelimiter",
"Udelimiterover",
"Udelimiterunder",
+ "Uhextensible",
+ "Uleft",
"Umathaccent",
--"Umathaccents",
"Umathaxis",
@@ -97,8 +99,12 @@ return {
"Umathbinrelspacing",
--"Umathbotaccent",
"Umathchar",
+ "Umathcharclass",
"Umathchardef",
+ "Umathcharfam",
"Umathcharnum",
+ "Umathcharnumdef",
+ "Umathcharslot",
"Umathclosebinspacing",
"Umathcloseclosespacing",
"Umathcloseinnerspacing",
@@ -109,6 +115,7 @@ return {
"Umathcloserelspacing",
"Umathcode",
"Umathcodenum",
+ "Umathcodenumdef",
"Umathconnectoroverlapmin",
"Umathfractiondelsize",
"Umathfractiondenomdown",
@@ -183,6 +190,8 @@ return {
"Umathrelordspacing",
"Umathrelpunctspacing",
"Umathrelrelspacing",
+ "Umathskewedfractionhgap",
+ "Umathskewedfractionvgap",
"Umathspaceafterscript",
"Umathstackdenomdown",
"Umathstacknumup",
@@ -201,9 +210,13 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
+ "Umiddle",
"Uoverdelimiter",
"Uradical",
+ "Uright",
"Uroot",
+ "Uskewed",
+ "Uskewedwithdelims",
"Ustack",
"Ustartdisplaymath",
"Ustartmath",
@@ -212,50 +225,129 @@ return {
"Usubscript",
"Usuperscript",
"Uunderdelimiter",
+ "Uvextensible",
+ "adjustspacing",
"alignmark",
"aligntab",
"attribute",
"attributedef",
+ "bodydir",
+ "boundary",
+ "boxdir",
"catcodetable",
"clearmarks",
+ "copyfont",
"crampeddisplaystyle",
"crampedscriptscriptstyle",
"crampedscriptstyle",
"crampedtextstyle",
+ "draftmode",
+ "dviextension",
+ "dvifeedback",
+ "dvivariable",
+ "efcode",
+ "hjcode",
+ "firstvalidlanguage",
"fontid",
"formatname",
"gleaders",
+ "hyphenationmin",
"ifabsdim",
"ifabsnum",
"ifprimitive",
+ "ignoreligaturesinfont",
"initcatcodetable",
+ "insertht",
+ "lastsavedboxresourceindex",
+ "lastsavedimageresourceindex",
+ "lastsavedimageresourcepages",
+ "lastxpos",
+ "lastypos",
"latelua",
+ "leftghost",
+ "leftmarginkern",
+ "letcharcode",
+ "letterspacefont",
+ "localbrokenpenalty",
+ "localinterlinepenalty",
+ "localleftbox",
+ "localrightbox",
+ "lpcode",
"luaescapestring",
- "luastartup",
"luatexbanner",
"luatexrevision",
"luatexversion",
"luafunction",
+ "mathdir",
+ "mathdisplayskipmode",
+ "matheqnogapstep",
+ "mathoption",
+ "mathscriptsmode",
"mathstyle",
+ "mathsurroundskip",
+ "noboundary",
"nokerns",
+ "nohrule",
"noligs",
+ "nospaces",
+ "novrule",
+ "normaldeviate",
"outputbox",
+ "outputmode",
+ "pagedir",
+ "pageheight",
+ "pagebottomoffset",
"pageleftoffset",
+ "pagerightoffset",
"pagetopoffset",
+ "pagewidth",
+ "pardir",
+ "pdfextension",
+ "pdffeedback",
+ "pdfvariable",
"postexhyphenchar",
"posthyphenchar",
"preexhyphenchar",
"prehyphenchar",
"primitive",
+ "protrudechars",
+ "protrusionboundary",
+ "pxdimen",
+ "randomseed",
+ "rightghost",
+ "rightmarginkern",
+ "rpcode",
+ "saveboxresource",
"savecatcodetable",
+ "saveimageresource",
+ "savepos",
"scantextokens",
+ "setfontid",
+ "setrandomseed",
"suppressfontnotfounderror",
"suppressifcsnameerror",
"suppresslongerror",
"suppressoutererror",
"suppressmathparerror",
- "matheqnogapstep",
"synctex",
+ "tagcode",
+ "textdir",
+ "tracingfonts",
+ "uniformdeviate",
+ "useboxresource",
+ "useimageresource",
+ "wordboundary",
+ --
+ "vpack",
+ "hpack",
+ "tpack",
+ "csstring",
+ "begincsname",
+ "lastnamedcs",
+ "toksapp",
+ "tokspre",
+ "etoksapp",
+ "etokspre",
},
["omega"]={
"OmegaVersion",
@@ -306,8 +398,8 @@ return {
"pdfdest",
"pdfdestmargin",
"pdfdraftmode",
- "pdfeachlinedepth",
"pdfeachlineheight",
+ "pdfeachlinedepth",
"pdfendlink",
"pdfendthread",
"pdffirstlineheight",
@@ -316,6 +408,7 @@ return {
"pdffontname",
"pdffontobjnum",
"pdffontsize",
+ "pdfxformmargin",
"pdfgamma",
"pdfgentounicode",
"pdfglyphtounicode",
@@ -327,8 +420,12 @@ return {
"pdfimageresolution",
"pdfincludechars",
"pdfinclusioncopyfonts",
+ "pdfignoreunknownimages",
"pdfinclusionerrorlevel",
+ "pdfignoreunknownimages",
"pdfinfo",
+ "pdfinfoomitdate",
+ "pdftrailerid",
"pdfinsertht",
"pdflastannot",
"pdflastlinedepth",
@@ -336,7 +433,6 @@ return {
"pdflastobj",
"pdflastxform",
"pdflastximage",
- "pdflastximagecolordepth",
"pdflastximagepages",
"pdflastxpos",
"pdflastypos",
@@ -350,7 +446,6 @@ return {
"pdfnormaldeviate",
"pdfobj",
"pdfobjcompresslevel",
- "pdfoptionpdfminorversion",
"pdfoutline",
"pdfoutput",
"pdfpageattr",
@@ -362,6 +457,7 @@ return {
"pdfpagewidth",
"pdfpkmode",
"pdfpkresolution",
+ "pdfpkfixeddpi",
"pdfprimitive",
"pdfprotrudechars",
"pdfpxdimen",
@@ -381,6 +477,8 @@ return {
"pdftexbanner",
"pdftexrevision",
"pdftexversion",
+ "pdfsuppressptexinfo",
+ "pdfsuppressoptionalinfo",
"pdfthread",
"pdfthreadmargin",
"pdftracingfonts",
@@ -393,7 +491,6 @@ return {
"pdfxformname",
"pdfxformresources",
"pdfximage",
- "pdfximagebbox",
"quitvmode",
"rightmarginkern",
"rpcode",
@@ -415,6 +512,8 @@ return {
"Udelimiter",
"Udelimiterover",
"Udelimiterunder",
+ "Uhextensible",
+ "Uleft",
"Umathaccent",
--"Umathaccents",
"Umathaxis",
@@ -428,8 +527,12 @@ return {
"Umathbinrelspacing",
--"Umathbotaccent",
"Umathchar",
+ "Umathcharclass",
"Umathchardef",
+ "Umathcharfam",
"Umathcharnum",
+ "Umathcharnumdef",
+ "Umathcharslot",
"Umathclosebinspacing",
"Umathcloseclosespacing",
"Umathcloseinnerspacing",
@@ -440,6 +543,7 @@ return {
"Umathcloserelspacing",
"Umathcode",
"Umathcodenum",
+ "Umathcodenumdef",
"Umathconnectoroverlapmin",
"Umathfractiondelsize",
"Umathfractiondenomdown",
@@ -514,6 +618,8 @@ return {
"Umathrelordspacing",
"Umathrelpunctspacing",
"Umathrelrelspacing",
+ "Umathskewedfractionhgap",
+ "Umathskewedfractionvgap",
"Umathspaceafterscript",
"Umathstackdenomdown",
"Umathstacknumup",
@@ -532,9 +638,13 @@ return {
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
"Umathunderdelimitervgap",
+ "Umiddle",
"Uoverdelimiter",
"Uradical",
+ "Uright",
"Uroot",
+ "Uskewed",
+ "Uskewedwithdelims",
"Ustack",
"Ustartdisplaymath",
"Ustartmath",
@@ -543,6 +653,7 @@ return {
"Usubscript",
"Usuperscript",
"Uunderdelimiter",
+ "Uvextensible",
"above",
"abovedisplayshortskip",
"abovedisplayskip",
@@ -568,6 +679,7 @@ return {
"bodydir",
"botmark",
"botmarks",
+ "boundary",
"box",
"boxdir",
"boxmaxdepth",
@@ -587,6 +699,7 @@ return {
"clubpenalties",
"clubpenalty",
"copy",
+ "copyfont",
"count",
"countdef",
"cr",
@@ -626,12 +739,16 @@ return {
"doublehyphendemerits",
"dp",
"dump",
+ "dviextension",
+ "dvifeedback",
+ "dvivariable",
"eTeXVersion",
"eTeXminorversion",
"eTeXrevision",
"eTeXversion",
"edef",
"efcode",
+ "hjcode",
"else",
"emergencystretch",
"end",
@@ -657,6 +774,7 @@ return {
"exhyphenpenalty",
"expandafter",
"expanded",
+ "expandglyphsinfont",
"fam",
"fi",
"finalhyphendemerits",
@@ -669,6 +787,7 @@ return {
"fontcharic",
"fontcharwd",
"fontdimen",
+ "firstvalidlanguage",
"fontid",
"fontname",
"formatname",
@@ -729,6 +848,7 @@ return {
"ifvmode",
"ifvoid",
"ifx",
+ "ignoreligaturesinfont",
"ignorespaces",
"immediate",
"indent",
@@ -748,7 +868,12 @@ return {
"lastlinefit",
"lastnodetype",
"lastpenalty",
+ "lastsavedboxresourceindex",
+ "lastsavedimageresourceindex",
+ "lastsavedimageresourcepages",
"lastskip",
+ "lastxpos",
+ "lastypos",
"latelua",
"lccode",
"leaders",
@@ -759,6 +884,7 @@ return {
"leftskip",
"leqno",
"let",
+ "letcharcode",
"letterspacefont",
"limits",
"linepenalty",
@@ -774,7 +900,6 @@ return {
"lowercase",
"lpcode",
"luaescapestring",
- "luastartup",
"luatexbanner",
"luatexrevision",
"luatexversion",
@@ -789,13 +914,18 @@ return {
"mathclose",
"mathcode",
"mathdir",
+ "mathdisplayskipmode",
+ "matheqnogapstep",
"mathinner",
"mathop",
"mathopen",
+ "mathoption",
"mathord",
"mathpunct",
"mathrel",
+ "mathscriptsmode",
"mathstyle",
+ "mathsurroundskip",
"mathsurround",
"maxdeadcycles",
"maxdepth",
@@ -819,12 +949,16 @@ return {
"noexpand",
"noindent",
"nokerns",
+ "nohrule",
"noligs",
+ "nospaces",
+ "novrule",
"nolimits",
"nolocaldirs",
"nolocalwhatsits",
"nonscript",
"nonstopmode",
+ "normaldeviate",
"nulldelimiterspace",
"nullfont",
"number",
@@ -887,21 +1021,25 @@ return {
"pdfdest",
"pdfdestmargin",
"pdfdraftmode",
- "pdfeachlinedepth",
"pdfeachlineheight",
+ "pdfeachlinedepth",
"pdfendlink",
"pdfendthread",
+ "pdfextension",
+ "pdfvariable",
"pdffirstlineheight",
"pdffontattr",
"pdffontexpand",
"pdffontname",
"pdffontobjnum",
"pdffontsize",
+ "pdfxformmargin",
"pdfgamma",
"pdfgentounicode",
"pdfglyphtounicode",
"pdfhorigin",
"pdfignoreddimen",
+ "pdfimageaddfilename",
"pdfimageapplygamma",
"pdfimagegamma",
"pdfimagehicolor",
@@ -909,7 +1047,10 @@ return {
"pdfincludechars",
"pdfinclusioncopyfonts",
"pdfinclusionerrorlevel",
+ "pdfignoreunknownimages",
"pdfinfo",
+ "pdfinfoomitdate",
+ "pdftrailerid",
"pdfinsertht",
"pdflastannot",
"pdflastlinedepth",
@@ -917,7 +1058,6 @@ return {
"pdflastobj",
"pdflastxform",
"pdflastximage",
- "pdflastximagecolordepth",
"pdflastximagepages",
"pdflastxpos",
"pdflastypos",
@@ -931,7 +1071,6 @@ return {
"pdfnormaldeviate",
"pdfobj",
"pdfobjcompresslevel",
- "pdfoptionpdfminorversion",
"pdfoutline",
"pdfoutput",
"pdfpageattr",
@@ -943,6 +1082,7 @@ return {
"pdfpagewidth",
"pdfpkmode",
"pdfpkresolution",
+ "pdfpkfixeddpi",
"pdfprimitive",
"pdfprotrudechars",
"pdfpxdimen",
@@ -962,6 +1102,8 @@ return {
"pdftexbanner",
"pdftexrevision",
"pdftexversion",
+ "pdfsuppressptexinfo",
+ "pdfsuppressoptionalinfo",
"pdfthread",
"pdfthreadmargin",
"pdftracingfonts",
@@ -974,7 +1116,6 @@ return {
"pdfxformname",
"pdfxformresources",
"pdfximage",
- "pdfximagebbox",
"penalty",
"postdisplaypenalty",
"postexhyphenchar",
@@ -989,9 +1130,13 @@ return {
"prevgraf",
"primitive",
"protected",
+ "protrudechars",
+ "protrusionboundary",
+ "pxdimen",
"quitvmode",
"radical",
"raise",
+ "randomseed",
"read",
"readline",
"relax",
@@ -1003,6 +1148,9 @@ return {
"rightskip",
"romannumeral",
"rpcode",
+ "saveboxresource",
+ "saveimageresource",
+ "savepos",
"savecatcodetable",
"savinghyphcodes",
"savingvdiscards",
@@ -1015,7 +1163,9 @@ return {
"scriptstyle",
"scrollmode",
"setbox",
+ "setfontid",
"setlanguage",
+ "setrandomseed",
"sfcode",
"shipout",
"show",
@@ -1065,6 +1215,7 @@ return {
"topskip",
"tracingassigns",
"tracingcommands",
+ "tracingfonts",
"tracinggroups",
"tracingifs",
"tracinglostchars",
@@ -1083,6 +1234,7 @@ return {
"unexpanded",
"unhbox",
"unhcopy",
+ "uniformdeviate",
"unkern",
"unless",
"unpenalty",
@@ -1090,6 +1242,8 @@ return {
"unvbox",
"unvcopy",
"uppercase",
+ "useboxresource",
+ "useimageresource",
"vadjust",
"valign",
"vbadness",
@@ -1109,11 +1263,23 @@ return {
"wd",
"widowpenalties",
"widowpenalty",
+ "wordboundary",
"write",
"xdef",
"xleaders",
"xspaceskip",
"year",
+ --
+ "vpack",
+ "hpack",
+ "tpack",
+ "csstring",
+ "begincsname",
+ "lastnamedcs",
+ "toksapp",
+ "tokspre",
+ "etoksapp",
+ "etokspre",
},
["xetex"]={
"XeTeXversion",
diff --git a/Master/texmf-dist/tex/context/base/mult-prm.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-prm.mkiv
index e385341c2c6..e385341c2c6 100644
--- a/Master/texmf-dist/tex/context/base/mult-prm.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-prm.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mult-sys.mkiv b/Master/texmf-dist/tex/context/base/mkiv/mult-sys.mkiv
index b1475f2dcfc..01a1674dced 100644
--- a/Master/texmf-dist/tex/context/base/mult-sys.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/mult-sys.mkiv
@@ -38,51 +38,52 @@
%D First we define some system constants used for both the multi||lingual
%D interface and multi||linguag typesetting.
-\definesystemconstant {afrikaans} \definesystemconstant {af}
-\definesystemconstant {arabic} \definesystemconstant {ar}
-\definesystemconstant {catalan} \definesystemconstant {ca}
-\definesystemconstant {chinese} \definesystemconstant {cn}
-\definesystemconstant {croatian} \definesystemconstant {hr}
-\definesystemconstant {czech} \definesystemconstant {cs}
- \definesystemconstant {cz}
-\definesystemconstant {danish} \definesystemconstant {da}
-\definesystemconstant {dutch} \definesystemconstant {nl}
-\definesystemconstant {english} \definesystemconstant {en}
-\definesystemconstant {finish} \definesystemconstant {fi}
-\definesystemconstant {french} \definesystemconstant {fr}
-\definesystemconstant {german} \definesystemconstant {de}
-\definesystemconstant {hungarian} \definesystemconstant {hu}
-\definesystemconstant {italian} \definesystemconstant {it}
-\definesystemconstant {latin} \definesystemconstant {la}
-\definesystemconstant {lithuanian} \definesystemconstant {lt}
-\definesystemconstant {bokmal} \definesystemconstant {nb}
-\definesystemconstant {malayalam} \definesystemconstant {ml}
-\definesystemconstant {norwegian} \definesystemconstant {no}
-\definesystemconstant {nynorsk} \definesystemconstant {nn}
-\definesystemconstant {polish} \definesystemconstant {pl}
-\definesystemconstant {persian} \definesystemconstant {pe}
-\definesystemconstant {portuguese} \definesystemconstant {pt}
-\definesystemconstant {romanian} \definesystemconstant {ro}
-\definesystemconstant {russian} \definesystemconstant {ru}
-\definesystemconstant {slovak} \definesystemconstant {sk}
-\definesystemconstant {slovenian} \definesystemconstant {sl}
-\definesystemconstant {slovene} % obsolete
-\definesystemconstant {spanish} \definesystemconstant {es}
-\definesystemconstant {swedish} \definesystemconstant {sv}
-\definesystemconstant {turkish} \definesystemconstant {tr}
-\definesystemconstant {turkmen} \definesystemconstant {tk}
-\definesystemconstant {gbenglish} \definesystemconstant {gb}
-\definesystemconstant {ukenglish} \definesystemconstant {uk}
-\definesystemconstant {usenglish} \definesystemconstant {us}
-\definesystemconstant {ukrainian} \definesystemconstant {ua}
-\definesystemconstant {greek} \definesystemconstant {gr}
-\definesystemconstant {ancientgreek} \definesystemconstant {agr}
-\definesystemconstant {vietnamese} \definesystemconstant {vi}
- \definesystemconstant {vn}
-\definesystemconstant {chinese} \definesystemconstant {cn}
-\definesystemconstant {japanese} \definesystemconstant {ja}
-\definesystemconstant {korean} \definesystemconstant {kr}
-\definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info
+\definesystemconstant {afrikaans} \definesystemconstant {af}
+\definesystemconstant {arabic} \definesystemconstant {ar}
+\definesystemconstant {catalan} \definesystemconstant {ca}
+\definesystemconstant {chinese} \definesystemconstant {cn}
+\definesystemconstant {croatian} \definesystemconstant {hr}
+\definesystemconstant {czech} \definesystemconstant {cs}
+ \definesystemconstant {cz}
+\definesystemconstant {danish} \definesystemconstant {da}
+\definesystemconstant {dutch} \definesystemconstant {nl}
+\definesystemconstant {english} \definesystemconstant {en}
+\definesystemconstant {finish} \definesystemconstant {fi}
+\definesystemconstant {french} \definesystemconstant {fr}
+\definesystemconstant {german} \definesystemconstant {de}
+\definesystemconstant {hungarian} \definesystemconstant {hu}
+\definesystemconstant {italian} \definesystemconstant {it}
+\definesystemconstant {latin} \definesystemconstant {la}
+\definesystemconstant {ancientlatin} \definesystemconstant {ala}
+\definesystemconstant {lithuanian} \definesystemconstant {lt}
+\definesystemconstant {bokmal} \definesystemconstant {nb}
+\definesystemconstant {malayalam} \definesystemconstant {ml}
+\definesystemconstant {norwegian} \definesystemconstant {no}
+\definesystemconstant {nynorsk} \definesystemconstant {nn}
+\definesystemconstant {polish} \definesystemconstant {pl}
+\definesystemconstant {persian} \definesystemconstant {pe}
+\definesystemconstant {portuguese} \definesystemconstant {pt}
+\definesystemconstant {romanian} \definesystemconstant {ro}
+\definesystemconstant {russian} \definesystemconstant {ru}
+\definesystemconstant {slovak} \definesystemconstant {sk}
+\definesystemconstant {slovenian} \definesystemconstant {sl}
+\definesystemconstant {slovene} % obsolete
+\definesystemconstant {spanish} \definesystemconstant {es}
+\definesystemconstant {swedish} \definesystemconstant {sv}
+\definesystemconstant {turkish} \definesystemconstant {tr}
+\definesystemconstant {turkmen} \definesystemconstant {tk}
+\definesystemconstant {gbenglish} \definesystemconstant {gb}
+\definesystemconstant {ukenglish} \definesystemconstant {uk}
+\definesystemconstant {usenglish} \definesystemconstant {us}
+\definesystemconstant {ukrainian} \definesystemconstant {ua}
+\definesystemconstant {greek} \definesystemconstant {gr}
+\definesystemconstant {ancientgreek} \definesystemconstant {agr}
+\definesystemconstant {vietnamese} \definesystemconstant {vi}
+ \definesystemconstant {vn}
+\definesystemconstant {chinese} \definesystemconstant {cn}
+\definesystemconstant {japanese} \definesystemconstant {ja}
+\definesystemconstant {korean} \definesystemconstant {kr}
+\definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info
%D For proper \UNICODE\ support we need a few font related constants.
@@ -440,6 +441,11 @@
\definesystemconstant {nd}
\definesystemconstant {nc}
+\definesystemconstant {traditional}
+\definesystemconstant {left}
+\definesystemconstant {middle}
+\definesystemconstant {right}
+
%D As the name of their define command states, the next set of constants is used in
%D the message macro's.
diff --git a/Master/texmf-dist/tex/context/base/node-acc.lua b/Master/texmf-dist/tex/context/base/mkiv/node-acc.lua
index e684aeb7b88..ed34dbec939 100644
--- a/Master/texmf-dist/tex/context/base/node-acc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-acc.lua
@@ -24,6 +24,9 @@ local getnext = nuts.getnext
local setfield = nuts.setfield
local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setchar = nuts.setchar
+local setsubtype = nuts.setsubtype
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
@@ -31,8 +34,6 @@ local copy_node = nuts.copy
local free_nodelist = nuts.flush_list
local insert_after = nuts.insert_after
-local new_gluespec = nuts.pool.gluespec -- temp hack
-
local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
local glyph_code = nodecodes.glyph
@@ -55,34 +56,25 @@ local function injectspaces(head)
while n do
local id = getid(n)
if id == glue_code then -- todo: check for subtype related to spacing (13/14 but most seems to be 0)
- -- if getfield(getfield(n,"spec"),"width") > 0 then -- threshold
--- if p and p_id == glyph_code then
+ -- if getfield(n,."width") > 0 then -- threshold
+ -- if p and p_id == glyph_code then
if p and getid(p) == glyph_code then
local g = copy_node(p)
local c = getfield(g,"components")
if c then -- it happens that we copied a ligature
free_nodelist(c)
setfield(g,"components",nil)
- setfield(g,"subtype",256)
+ setsubtype(g,256)
end
local a = getattr(n,a_characters)
- -- local s = copy_node(getfield(n,"spec"))
- -- this will be fixed in luatex but for now a temp hack (zero test)
- local s = getfield(n,"spec")
- s = s == 0 and new_gluespec(0) or copy_node(s)
- --
- setfield(g,"char",32)
- setfield(n,"spec",s)
- -- insert_after(p,p,g)
- setfield(p,"next",g)
- setfield(g,"prev",p)
- setfield(g,"next",n)
- setfield(n,"prev",g)
- setfield(s,"width",getfield(s,"width") - getfield(g,"width"))
+ setchar(g,32)
+ setlink(p,g)
+ setlink(g,n)
+-- we could cache as we now create many nodes
+ setfield(n,"width",getfield(n,"width") - getfield(g,"width"))
if a then
setattr(g,a_characters,a)
end
- setattr(s,a_characters,0)
setattr(n,a_characters,0)
nofreplaced = nofreplaced + 1
end
diff --git a/Master/texmf-dist/tex/context/base/node-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/node-aux.lua
index 12da8ea8ab3..ebe113fc67a 100644
--- a/Master/texmf-dist/tex/context/base/node-aux.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-aux.lua
@@ -35,8 +35,14 @@ local getlist = nuts.getlist
local getfont = nuts.getfont
local getchar = nuts.getchar
local getattr = nuts.getattr
+local getfield = nuts.getfield
+
local setfield = nuts.setfield
local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setnext = nuts.setnext
+local setprev = nuts.setprev
local traverse_nodes = nuts.traverse
local traverse_id = nuts.traverse_id
@@ -89,8 +95,10 @@ local function takebox(id)
if box then
local copy = copy_node(box)
local list = getlist(box)
- setfield(copy,"list",list)
- setfield(box,"list",nil)
+ if list then
+ setlist(copy,list)
+ setlist(box,nil)
+ end
texsetbox(id,nil)
return copy
end
@@ -103,6 +111,24 @@ function nodes.takebox(id)
end
end
+local splitbox = tex.splitbox
+nodes.splitbox = splitbox
+
+function nuts.splitbox(id,height)
+ return tonut(splitbox(id,height))
+end
+
+-- function nodes.takelist(n)
+-- -- when we need it
+-- end
+
+function nuts.takelist(n)
+ local l = getlist(n)
+ setlist(n)
+ free_node(n)
+ return l
+end
+
nuts.takebox = takebox
tex.takebox = nodes.takebox -- sometimes more clear
@@ -111,7 +137,7 @@ tex.takebox = nodes.takebox -- sometimes more clear
local function repackhlist(list,...)
local temp, b = hpack_nodes(list,...)
list = getlist(temp)
- setfield(temp,"list",nil)
+ setlist(temp)
free_node(temp)
return list, b
end
@@ -169,22 +195,6 @@ nuts.unsetattributes = unset_attributes nodes.unsetattribut
-- history:
--
--- function nodes.is_skipable(a,id) -- skipable nodes at the margins during character protrusion
--- return (
--- id ~= glyph_node
--- or id == ins_node
--- or id == mark_node
--- or id == adjust_node
--- or id == penalty_node
--- or (id == glue_node and a.spec.writable)
--- or (id == disc_node and getfield(a,"pre") == nil and getfield(a,"post") == nil and getfield(a,"replace") == nil)
--- or (id == math_node and getfield(a,"surround") == 0)
--- or (id == kern_node and (getfield(a,"kern") == 0 or getsubtype(subtype) == NORMAL))
--- or (id == hlist_node and getfield(a,"width") == 0 and getfield(a,"height") == 0 and getfield(a,"depth") == 0 and getlist(a) == nil)
--- or (id == whatsit_node and getsubtype(a) ~= pdf_refximage_node and getsubtype(a) ~= pdf_refxform_node)
--- )
--- end
---
-- local function glyph_width(a)
-- local ch = chardata[getfont(a)][getchar(a)]
-- return (ch and ch.width) or 0
@@ -311,7 +321,7 @@ local function firstcharinbox(n)
end
nuts .firstcharinbox = firstcharinbox
-nodes.firstcharinbox = firstcharinbox
+nodes.firstcharinbox = firstcharinbox -- hm, ok ?
nodes.firstcharacter = vianuts(firstcharacter)
interfaces.implement {
@@ -465,8 +475,8 @@ local function link(list,currentfont,currentattr,head,tail) -- an oldie, might b
elseif not head then
head, tail = h, t
else
- setfield(tail,"next",h)
- setfield(h,"prev",t)
+ setnext(tail,h)
+ setprev(h,t)
tail = t
end
end
@@ -489,8 +499,7 @@ local function link(list,currentfont,currentattr,head,tail) -- an oldie, might b
end
os.exit()
else
- setfield(tail,"next",n)
- setfield(n,"prev",tail)
+ setlink(tail,n)
if getnext(n) then
tail = find_tail(n)
else
@@ -529,7 +538,7 @@ end
nuts.locate = locate
-nodes.locate = function(start,wantedid,wantedsubtype)
+function nodes.locate(start,wantedid,wantedsubtype)
local found = locate(tonut(start),wantedid,wantedsubtype)
return found and tonode(found)
end
@@ -552,5 +561,3 @@ end
-- return 0
-- end
-- end
-
-
diff --git a/Master/texmf-dist/tex/context/base/node-bck.lua b/Master/texmf-dist/tex/context/base/mkiv/node-bck.lua
index 99992de0903..a095ac4c4d5 100644
--- a/Master/texmf-dist/tex/context/base/node-bck.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-bck.lua
@@ -28,19 +28,21 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getlist = nuts.getlist
local getattr = nuts.getattr
-local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
+local setfield = nuts.setfield
+local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+
local traverse = nuts.traverse
local traverse_id = nuts.traverse_id
-
local new_rule = nodepool.rule
local new_glue = nodepool.glue
@@ -59,7 +61,7 @@ local function add_backgrounds(head) -- rather old code .. to be redone
if list then
local head = add_backgrounds(list)
if head then
- setfield(current,"list",head)
+ setlist(current,head)
list = head
end
end
@@ -85,13 +87,11 @@ local function add_backgrounds(head) -- rather old code .. to be redone
if transparency then
setattr(rule,a_transparency,transparency)
end
- setfield(rule,"next",glue)
- setfield(glue,"prev",rule)
+ setlink(rule,glue)
if list then
- setfield(glue,"next",list)
- setfield(list,"prev",glue)
+ setlink(glue,list)
end
- setfield(current,"list",rule)
+ setlist(current,rule)
end
end
end
@@ -146,13 +146,11 @@ local function add_alignbackgrounds(head)
if transparency then
setattr(rule,a_transparency,transparency)
end
- setfield(rule,"next",glue)
- setfield(glue,"prev",rule)
+ setlink(rule,glue)
if list then
- setfield(glue,"next",list)
- setfield(list,"prev",glue)
+ setlink(glue,list)
end
- setfield(current,"list",rule)
+ setlist(current,rule)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/node-bck.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-bck.mkiv
index ff0de6a5d0c..58edab6685c 100644
--- a/Master/texmf-dist/tex/context/base/node-bck.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-bck.mkiv
@@ -16,6 +16,8 @@
%D This is first attempt to replacing backgrounds in a few tables
%D mechanisms. When used more frequently, we can store the color
%D spec in the attribute.
+%D
+%D Maybe move some to the bar handler.
\unprotect
@@ -28,11 +30,16 @@
\def\colorattr#1%
{\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
- \thecolorattr{\currentcolorprefix#1}%
+ \node_backgrounds_thecolorattr{\currentcolorprefix#1}%
\else\ifcsname\??colorattribute#1\endcsname
- \thecolorattr{#1}%
+ \node_backgrounds_thecolorattr{#1}%
\fi\fi}
+\def\node_backgrounds_thecolorattr#1%
+ {attr \colormodelattribute \attribute\colormodelattribute
+ attr \colorattribute \lastnamedcs
+ attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized
+
\def\thecolorattr#1%
{attr \colormodelattribute \attribute\colormodelattribute
attr \colorattribute \csname\??colorattribute#1\endcsname
@@ -40,9 +47,9 @@
\def\backgroundcolorattr#1%
{\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
- \thebackgroundcolorattr{\currentcolorprefix#1}%
+ \node_backgrounds_thebackgroundcolorattr{\currentcolorprefix#1}%
\else\ifcsname\??colorattribute#1\endcsname
- \thebackgroundcolorattr{#1}%
+ \node_backgrounds_thebackgroundcolorattr{#1}%
\fi\fi}
\def\thebackgroundcolorattr#1%
@@ -51,6 +58,12 @@
attr \colorattribute \csname\??colorattribute#1\endcsname
attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized
+\def\node_backgrounds_thebackgroundcolorattr#1%
+ {attr \backgroundattribute \plusone
+ attr \colormodelattribute \attribute\colormodelattribute
+ attr \colorattribute \lastnamedcs
+ attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized
+
\def\thealignbackgroundcolorattr#1%
{attr \alignbackgroundattribute \plusone
attr \colormodelattribute \attribute\colormodelattribute
diff --git a/Master/texmf-dist/tex/context/base/node-dir.lua b/Master/texmf-dist/tex/context/base/mkiv/node-dir.lua
index 6ee5cd4b860..6ee5cd4b860 100644
--- a/Master/texmf-dist/tex/context/base/node-dir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-dir.lua
diff --git a/Master/texmf-dist/tex/context/base/node-ext.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ext.lua
index 82ec04ee592..82ec04ee592 100644
--- a/Master/texmf-dist/tex/context/base/node-ext.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ext.lua
diff --git a/Master/texmf-dist/tex/context/base/node-fin.lua b/Master/texmf-dist/tex/context/base/mkiv/node-fin.lua
index 84c5b9a2f93..a2d63d38d45 100644
--- a/Master/texmf-dist/tex/context/base/node-fin.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-fin.lua
@@ -20,7 +20,6 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
@@ -28,12 +27,16 @@ local getlist = nuts.getlist
local getleader = nuts.getleader
local getattr = nuts.getattr
+local setlist = nuts.setlist
+local setleader = nuts.setleader
+
local copy_node = nuts.copy
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
local nodecodes = nodes.nodecodes
local whatcodes = nodes.whatcodes
+local rulecodes = nodes.rulecodes
local glyph_code = nodecodes.glyph
local disc_code = nodecodes.disc
@@ -43,7 +46,7 @@ local whatsit_code = nodecodes.whatsit
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
-local pdfliteral_code = whatcodes.pdfliteral
+local normal_rule = rulecodes.normal
local states = attributes.states
local numbers = attributes.numbers
@@ -160,10 +163,12 @@ function states.finalize(namespace,attribute,head) -- is this one ok?
head = tonut(head)
local id = getid(head)
if id == hlist_code or id == vlist_code then
- local list = getlist(head)
- if list then
- list = insert_node_before(list,list,copied(nsnone)) -- two return values
- setfield(head,"list",list)
+ local content = getlist(head)
+ if content then
+ local list = insert_node_before(content,content,copied(nsnone)) -- two return values
+ if list ~= content then
+ setlist(head,list)
+ end
end
else
head = insert_node_before(head,head,copied(nsnone))
@@ -185,8 +190,8 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
local id = getid(stack)
if id == glyph_code then
check = true
- -- elseif id == disc_code then
- -- check = true -- no longer needed as we flatten replace
+ elseif id == disc_code then
+ check = true -- no longer needed as we flatten replace
elseif id == glue_code then
leader = getleader(stack)
if leader then
@@ -200,22 +205,30 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
local outer = getattr(stack,attribute)
if outer ~= inheritance then
local list, ok = process(namespace,attribute,content,inheritance,outer)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
else
local list, ok = process(namespace,attribute,content,inheritance,default)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
end
else
local list, ok = process(namespace,attribute,content,inheritance,default)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
end
-- end nested --
end
elseif id == rule_code then
+-- if subtype(stack) == normal_rule then
check = getfield(stack,"width") ~= 0
+-- end
end
-- much faster this way than using a check() and nested() function
if check then
@@ -246,16 +259,22 @@ local function process(namespace,attribute,head,inheritance,default) -- one attr
local outer = getattr(stack,attribute)
if outer ~= inheritance then
local list, ok = process(namespace,attribute,leader,inheritance,outer)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
else
local list, ok = process(namespace,attribute,leader,inheritance,default)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
end
else
local list, ok = process(namespace,attribute,leader,inheritance,default)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
end
-- end nested --
@@ -300,8 +319,8 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
local id = getid(stack)
if id == glyph_code then
check = true
- -- elseif id == disc_code then
- -- check = true -- no longer needed as we flatten replace
+ elseif id == disc_code then
+ check = true -- notneeded when we flatten replace
elseif id == glue_code then
leader = getleader(stack)
if leader then
@@ -315,22 +334,30 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
local outer = getattr(stack,attribute)
if outer ~= inheritance then
local list, ok = selective(namespace,attribute,content,inheritance,outer)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
else
local list, ok = selective(namespace,attribute,content,inheritance,default)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
end
else
local list, ok = selective(namespace,attribute,content,inheritance,default)
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = done or ok
end
-- end nested
end
elseif id == rule_code then
+-- if subtype(stack) == normal_rule then
check = getfield(stack,"width") ~= 0
+-- end
end
if check then
@@ -359,16 +386,22 @@ local function selective(namespace,attribute,head,inheritance,default) -- two at
local outer = getatribute(stack,attribute)
if outer ~= inheritance then
local list, ok = selective(namespace,attribute,leader,inheritance,outer)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
else
local list, ok = selective(namespace,attribute,leader,inheritance,default)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
end
else
local list, ok = selective(namespace,attribute,leader,inheritance,default)
- setfield(stack,"leader",list)
+ if leader ~= list then
+ setleader(stack,list)
+ end
done = done or ok
end
-- end nested
@@ -433,23 +466,31 @@ local function stacked(namespace,attribute,head,default) -- no triggering, no in
current = a
head = insert_node_before(head,stack,copied(nsdata[a]))
local list = stacked(namespace,attribute,content,current) -- two return values
- setfield(stack,"list",list)
+ if content ~= list then
+ setlist(stack,list)
+ end
done = true
head, stack = insert_node_after(head,stack,copied(nsnone))
current = p
else
local list, ok = stacked(namespace,attribute,content,current)
- setfield(stack,"list",list) -- only if ok
+ if content ~= list then
+ setlist(stack,list) -- only if ok
+ end
done = done or ok
end
else
local list, ok = stacked(namespace,attribute,content,current)
- setfield(stack,"list",list) -- only if ok
+ if content ~= list then
+ setlist(stack,list) -- only if ok
+ end
done = done or ok
end
end
elseif id == rule_code then
+-- if subtype(stack) == normal_rule then
check = getfield(stack,"width") ~= 0
+-- end
end
if check then
@@ -462,7 +503,9 @@ local function stacked(namespace,attribute,head,default) -- no triggering, no in
end
if leader then
local list, ok = stacked(namespace,attribute,content,current)
- setfield(stack,"leader",list) -- only if ok
+ if leader ~= list then
+ setleader(stack,list) -- only if ok
+ end
done = done or ok
leader = false
end
@@ -521,21 +564,29 @@ local function stacker(namespace,attribute,head,default) -- no triggering, no in
if a and attrib ~= a and nslistwise[a] then -- viewerlayer
head = insert_node_before(head,current,copied(nsdata[a]))
local list = stacker(namespace,attribute,content,a)
- setfield(current,"list",list)
+ if list ~= content then
+ setlist(current,list)
+ end
done = true
head, current = insert_node_after(head,current,copied(nsnone))
else
local list, ok = stacker(namespace,attribute,content,attrib)
- setfield(current,"list",list)
+ if content ~= list then
+ setlist(current,list)
+ end
done = done or ok
end
else
local list, ok = stacker(namespace,attribute,content,default)
- setfield(current,"list",list)
+ if list ~= content then
+ setlist(current,list)
+ end
done = done or ok
end
elseif id == rule_code then
+-- if subtype(stack) == normal_rule then
check = getfield(current,"width") ~= 0
+-- end
end
if check then
diff --git a/Master/texmf-dist/tex/context/base/node-fin.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-fin.mkiv
index 7c95699dd12..413a00722d3 100644
--- a/Master/texmf-dist/tex/context/base/node-fin.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-fin.mkiv
@@ -45,18 +45,18 @@
\def\dodoattributedcopy
{\startinheritattributes
\ifvbox\attributeboxcount
- \vbox{\unvcopy\attributeboxcount}%
+ \vpack{\unvcopy\attributeboxcount}%
\else
- \hbox{\unhcopy\attributeboxcount}%
+ \hpack{\unhcopy\attributeboxcount}%
\fi
\stopinheritattributes}
\def\dodoattributedbox
{\startinheritattributes
\ifvbox\attributeboxcount
- \vbox{\unvbox\attributeboxcount}%
+ \vpack{\unvbox\attributeboxcount}%
\else
- \hbox{\unhbox\attributeboxcount}%
+ \hpack{\unhbox\attributeboxcount}%
\fi
\stopinheritattributes}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/node-fnt.lua b/Master/texmf-dist/tex/context/base/mkiv/node-fnt.lua
new file mode 100644
index 00000000000..7f0d239979a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-fnt.lua
@@ -0,0 +1,514 @@
+if not modules then modules = { } end modules ['node-fnt'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+if not context then os.exit() end -- generic function in node-dum
+
+local next, type = next, type
+local concat, keys = table.concat, table.keys
+
+local nodes, node, fonts = nodes, node, fonts
+
+local trace_characters = false trackers.register("nodes.characters", function(v) trace_characters = v end)
+local trace_fontrun = false trackers.register("nodes.fontrun", function(v) trace_fontrun = v end)
+local trace_variants = false trackers.register("nodes.variants", function(v) trace_variants = v end)
+
+local force_discrun = true directives.register("nodes.discrun", function(v) force_discrun = v end)
+local force_boundaryrun = true directives.register("nodes.boundaryrun", function(v) force_boundaryrun = v end)
+local force_basepass = true directives.register("nodes.basepass", function(v) force_basepass = v end)
+
+local report_fonts = logs.reporter("fonts","processing")
+
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local fontvariants = fonthashes.variants
+local fontmodes = fonthashes.modes
+
+local otf = fonts.handlers.otf
+
+local starttiming = statistics.starttiming
+local stoptiming = statistics.stoptiming
+
+local nodecodes = nodes.nodecodes
+local handlers = nodes.handlers
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+
+local getattr = nuts.getattr
+local getid = nuts.getid
+local getfont = nuts.getfont
+local getsubtype = nuts.getsubtype
+local getchar = nuts.getchar
+local getdisc = nuts.getdisc
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local getfield = nuts.getfield
+----- getdisc = nuts.getdisc
+local setchar = nuts.setchar
+local setlink = nuts.setlink
+local setfield = nuts.setfield
+local setprev = nuts.setprev
+
+local isglyph = nuts.isglyph -- unchecked
+local ischar = nuts.ischar -- checked
+
+local traverse_id = nuts.traverse_id
+local traverse_char = nuts.traverse_char
+local remove_node = nuts.remove
+local protect_glyph = nuts.protect_glyph
+local free_node = nuts.free
+
+local glyph_code = nodecodes.glyph
+local disc_code = nodecodes.disc
+local boundary_code = nodecodes.boundary
+local word_boundary = nodes.boundarycodes.word
+
+local setmetatableindex = table.setmetatableindex
+
+-- some tests with using an array of dynamics[id] and processes[id] demonstrated
+-- that there was nothing to gain (unless we also optimize other parts)
+--
+-- maybe getting rid of the intermediate shared can save some time
+
+-- potential speedup: check for subtype < 256 so that we can remove that test
+-- elsewhere, danger: injected nodes will not be dealt with but that does not
+-- happen often; we could consider processing sublists but that might need more
+-- checking later on; the current approach also permits variants
+
+local run = 0
+
+local setfontdynamics = { }
+local fontprocesses = { }
+
+-- setmetatableindex(setfontdynamics, function(t,font)
+-- local tfmdata = fontdata[font]
+-- local shared = tfmdata.shared
+-- local v = shared and shared.dynamics and otf.setdynamics or false
+-- t[font] = v
+-- return v
+-- end)
+
+setmetatableindex(setfontdynamics, function(t,font)
+ local tfmdata = fontdata[font]
+ local shared = tfmdata.shared
+ local f = shared and shared.dynamics and otf.setdynamics or false
+ if f then
+ local v = { }
+ t[font] = v
+ setmetatableindex(v,function(t,k)
+ local v = f(font,k)
+ t[k] = v
+ return v
+ end)
+ return v
+ else
+ t[font] = false
+ return false
+ end
+end)
+
+setmetatableindex(fontprocesses, function(t,font)
+ local tfmdata = fontdata[font]
+ local shared = tfmdata.shared -- we need to check shared, only when same features
+ local processes = shared and shared.processes
+ if processes and #processes > 0 then
+ t[font] = processes
+ return processes
+ else
+ t[font] = false
+ return false
+ end
+end)
+
+fonts.hashes.setdynamics = setfontdynamics
+fonts.hashes.processes = fontprocesses
+
+-- if we forget about basemode we don't need to test too much here and we can consider running
+-- over sub-ranges .. this involves a bit more initializations but who cares .. in that case we
+-- also need to use the stop criterium (we already use head too) ... we cannot use traverse
+-- then, so i'll test it on some local clone first ... the only pitfall is changed directions
+-- inside a run which means that we need to keep track of this which in turn complicates matters
+-- in a way i don't like
+
+-- we need to deal with the basemode fonts here and can only run over ranges as we
+-- otherwise get luatex craches due to all kind of asserts in the disc/lig builder
+
+local ligaturing = nuts.ligaturing
+local kerning = nuts.kerning
+
+local expanders
+
+function fonts.setdiscexpansion(v)
+ if v == nil or v == true then
+ expanders = languages and languages.expanders
+ elseif type(v) == "table" then
+ expanders = v
+ else
+ expanders = false
+ end
+end
+
+function fonts.getdiscexpansion()
+ return expanders and true or false
+end
+
+fonts.setdiscexpansion(true)
+
+function handlers.characters(head)
+ -- either next or not, but definitely no already processed list
+ starttiming(nodes)
+
+ local usedfonts = { }
+ local attrfonts = { }
+ local basefonts = { }
+ local a, u, b = 0, 0, 0
+ local basefont = nil
+ local prevfont = nil
+ local prevattr = 0
+ local mode = nil
+ local done = false
+ local variants = nil
+ local redundant = nil
+
+ if trace_fontrun then
+ run = run + 1
+ report_fonts()
+ report_fonts("checking node list, run %s",run)
+ report_fonts()
+ local n = tonut(head)
+ while n do
+ local char, id = isglyph(n)
+ if char then
+ local font = getfont(n)
+ local attr = getattr(n,0) or 0
+ report_fonts("font %03i, dynamic %03i, glyph %C",font,attr,char)
+ elseif id == disc_code then
+ report_fonts("[disc] %s",nodes.listtoutf(n,true,false,n))
+ elseif id == boundary_code then
+ report_fonts("[boundary] %i:%i",getsubtype(n),getfield(n,"value"))
+ else
+ report_fonts("[%s]",nodecodes[id])
+ end
+ n = getnext(n)
+ end
+ end
+
+ local nuthead = tonut(head)
+
+ for n in traverse_char(nuthead) do
+ local font = getfont(n)
+ local attr = getattr(n,0) or 0 -- zero attribute is reserved for fonts in context
+ if font ~= prevfont or attr ~= prevattr then
+ prevfont = font
+ prevattr = attr
+ mode = fontmodes[font] -- we can also avoid the attr check
+ variants = fontvariants[font]
+ if mode == "none" then
+ -- skip
+ protect_glyph(n)
+ else
+ if basefont then
+ basefont[2] = getprev(n)
+ end
+ if attr > 0 then
+ local used = attrfonts[font]
+ if not used then
+ used = { }
+ attrfonts[font] = used
+ end
+ if not used[attr] then
+ local fd = setfontdynamics[font]
+ if fd then
+ used[attr] = fd[attr]
+ a = a + 1
+ elseif force_basepass then
+ b = b + 1
+ basefont = { n, nil }
+ basefonts[b] = basefont
+ end
+ end
+ else
+ local used = usedfonts[font]
+ if not used then
+ local fp = fontprocesses[font]
+ if fp then
+ usedfonts[font] = fp
+ u = u + 1
+ elseif force_basepass then
+ b = b + 1
+ basefont = { n, nil }
+ basefonts[b] = basefont
+ end
+ end
+ end
+ end
+ end
+ if variants then
+ local char = getchar(n)
+ if char >= 0xFE00 and (char <= 0xFE0F or (char >= 0xE0100 and char <= 0xE01EF)) then
+ local hash = variants[char]
+ if hash then
+ local p = getprev(n)
+ if p then
+ local char = ischar(p) -- checked
+ local variant = hash[char]
+ if variant then
+ if trace_variants then
+ report_fonts("replacing %C by %C",char,variant)
+ end
+ setchar(p,variant)
+ if not redundant then
+ redundant = { n }
+ else
+ redundant[#redundant+1] = n
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ if force_boundaryrun then
+
+ -- we can inject wordboundaries and then let the hyphenator do its work
+ -- but we need to get rid of those nodes in order to build ligatures
+ -- and kern (a rather context thing)
+
+ for b in traverse_id(boundary_code,nuthead) do
+ if getsubtype(b) == word_boundary then
+ if redundant then
+ redundant[#redundant+1] = b
+ else
+ redundant = { b }
+ end
+ end
+ end
+
+ end
+
+ if redundant then
+ for i=1,#redundant do
+ local r = redundant[i]
+ local p, n = getboth(r)
+ if r == nuthead then
+ nuthead = n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if b > 0 then
+ for i=1,b do
+ local bi = basefonts[i]
+ if r == bi[1] then
+ bi[1] = n
+ end
+ if r == bi[2] then
+ bi[2] = n
+ end
+ end
+ end
+ free_node(r)
+ end
+ end
+
+ local e = 0
+
+ if force_discrun then
+
+ -- basefont is not supported in disc only runs ... it would mean a lot of
+ -- ranges .. we could try to run basemode as a separate processor run but
+ -- not for now (we can consider it when the new node code is tested
+
+ -- local prevfont = nil
+ -- local prevattr = 0
+
+ for d in traverse_id(disc_code,nuthead) do
+ -- we could use first_glyph, only doing replace is good enough
+ local _, _, r = getdisc(d)
+ if r then
+ for n in traverse_char(r) do
+ local font = getfont(n)
+ local attr = getattr(n,0) or 0 -- zero attribute is reserved for fonts in context
+ if font ~= prevfont or attr ~= prevattr then
+ if attr > 0 then
+ local used = attrfonts[font]
+ if not used then
+ used = { }
+ attrfonts[font] = used
+ end
+ if not used[attr] then
+ local fd = setfontdynamics[font]
+ if fd then
+ used[attr] = fd[attr]
+ a = a + 1
+ end
+ end
+ else
+ local used = usedfonts[font]
+ if not used then
+ local fp = fontprocesses[font]
+ if fp then
+ usedfonts[font] = fp
+ u = u + 1
+ end
+ end
+ end
+ prevfont = font
+ prevattr = attr
+ end
+ end
+ break
+ elseif expanders then
+ local subtype = getsubtype(d)
+ if subtype == discretionary_code then
+ -- already done when replace
+ else
+ expanders[subtype](d)
+ e = e + 1
+ end
+ end
+ end
+
+ end
+
+ if trace_fontrun then
+ report_fonts()
+ report_fonts("statics : %s",u > 0 and concat(keys(usedfonts)," ") or "none")
+ report_fonts("dynamics: %s",a > 0 and concat(keys(attrfonts)," ") or "none")
+ report_fonts("built-in: %s",b > 0 and b or "none")
+ report_fonts("removed : %s",redundant and #redundant > 0 and #redundant or "none")
+ if expanders then
+ report_fonts("expanded: %s",e > 0 and e or "none")
+ end
+ report_fonts()
+ end
+ -- in context we always have at least 2 processors
+ if u == 0 then
+ -- skip
+ elseif u == 1 then
+ local font, processors = next(usedfonts)
+ for i=1,#processors do
+ local h, d = processors[i](head,font,0)
+ if d then
+ head = h or head
+ done = true
+ end
+ end
+ else
+ for font, processors in next, usedfonts do
+ for i=1,#processors do
+ local h, d = processors[i](head,font,0)
+ if d then
+ head = h or head
+ done = true
+ end
+ end
+ end
+ end
+ if a == 0 then
+ -- skip
+ elseif a == 1 then
+ local font, dynamics = next(attrfonts)
+ for attribute, processors in next, dynamics do -- attr can switch in between
+ for i=1,#processors do
+ local h, d = processors[i](head,font,attribute)
+ if d then
+ head = h or head
+ done = true
+ end
+ end
+ end
+ else
+ for font, dynamics in next, attrfonts do
+ for attribute, processors in next, dynamics do -- attr can switch in between
+ for i=1,#processors do
+ local h, d = processors[i](head,font,attribute)
+ if d then
+ head = h or head
+ done = true
+ end
+ end
+ end
+ end
+ end
+ if b == 0 then
+ -- skip
+ elseif b == 1 then
+ -- only one font
+ local range = basefonts[1]
+ local start = range[1]
+ local stop = range[2]
+ if (start or stop) and (start ~= stop) then
+ local front = nuthead == start
+ if stop then
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ elseif start then -- safeguard
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if front then
+ head = tonode(start)
+ end
+ end
+ else
+ -- multiple fonts
+ for i=1,b do
+ local range = basefonts[i]
+ local start = range[1]
+ local stop = range[2]
+ if start then
+ local front = nuthead == start
+ local prev, next
+ if stop then
+ next = getnext(stop)
+ start, stop = ligaturing(start,stop)
+ start, stop = kerning(start,stop)
+ else
+ prev = getprev(start)
+ start = ligaturing(start)
+ start = kerning(start)
+ end
+ if prev then
+ setlink(prev,start)
+ end
+ if next then
+ setlink(stop,next)
+ end
+ if front and nuthead ~= start then
+ head = tonode(nuthead)
+ end
+ end
+ end
+ end
+ stoptiming(nodes)
+ if trace_characters then
+ nodes.report(head,done)
+ end
+ return head, true
+end
+
+local d_protect_glyphs = nuts.protect_glyphs
+local d_unprotect_glyphs = nuts.unprotect_glyphs
+
+handlers.protectglyphs = function(n) return d_protect_glyphs (tonut(n)) end
+handlers.unprotectglyphs = function(n) return d_unprotect_glyphs(tonut(n)) end
+
+-- function handlers.protectglyphs(h)
+-- local h = tonut(h)
+-- for n in traverse_id(disc_code,h) do
+-- local pre, post, replace = getdisc(n)
+-- if pre then d_protect_glyphs(pre) end
+-- if post then d_protect_glyphs(post) end
+-- if replace then d_protect_glyphs(replace) end
+-- end
+-- return d_protect_glyphs(h)
+-- end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/node-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ini.lua
new file mode 100644
index 00000000000..bb8a7d33121
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ini.lua
@@ -0,0 +1,356 @@
+if not modules then modules = { } end modules ['node-ini'] = {
+ 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"
+}
+
+--[[ldx--
+<p>Most of the code that had accumulated here is now separated in
+modules.</p>
+--ldx]]--
+
+-- this module is being reconstructed
+
+-- todo: query names with new node.subtypes
+
+local next, type, tostring = next, type, tostring
+local gsub = string.gsub
+local concat, remove = table.concat, table.remove
+local sortedhash, sortedkeys, swapped = table.sortedhash, table.sortedkeys, table.swapped
+
+--[[ldx--
+<p>Access to nodes is what gives <l n='luatex'/> its power. Here we
+implement a few helper functions. These functions are rather optimized.</p>
+--ldx]]--
+
+--[[ldx--
+<p>When manipulating node lists in <l n='context'/>, we will remove
+nodes and insert new ones. While node access was implemented, we did
+quite some experiments in order to find out if manipulating nodes
+in <l n='lua'/> was feasible from the perspective of performance.</p>
+
+<p>First of all, we noticed that the bottleneck is more with excessive
+callbacks (some gets called very often) and the conversion from and to
+<l n='tex'/>'s datastructures. However, at the <l n='lua'/> end, we
+found that inserting and deleting nodes in a table could become a
+bottleneck.</p>
+
+<p>This resulted in two special situations in passing nodes back to
+<l n='tex'/>: a table entry with value <type>false</type> is ignored,
+and when instead of a table <type>true</type> is returned, the
+original table is used.</p>
+
+<p>Insertion is handled (at least in <l n='context'/> as follows. When
+we need to insert a node at a certain position, we change the node at
+that position by a dummy node, tagged <type>inline</type> which itself
+has_attribute the original node and one or more new nodes. Before we pass
+back the list we collapse the list. Of course collapsing could be built
+into the <l n='tex'/> engine, but this is a not so natural extension.</p>
+
+<p>When we collapse (something that we only do when really needed), we
+also ignore the empty nodes. [This is obsolete!]</p>
+--ldx]]--
+
+-- local gf = node.direct.getfield
+-- local n = table.setmetatableindex("number")
+-- function node.direct.getfield(a,b) n[b] = n[b] + 1 print(b,n[b]) return gf(a,b) end
+
+nodes = nodes or { }
+local nodes = nodes
+nodes.handlers = nodes.handlers or { }
+
+local mark = utilities.storage.mark
+local allocate = utilities.storage.allocate
+local formatcolumns = utilities.formatters.formatcolumns
+
+local getsubtypes = node.subtypes
+
+-- local listcodes = allocate {
+-- [0] = "unknown",
+-- [1] = "line",
+-- [2] = "box",
+-- [3] = "indent",
+-- [4] = "alignment", -- row or column
+-- [5] = "cell",
+-- [6] = "equation",
+-- [7] = "equationnumber",
+-- }
+
+local listcodes = mark(getsubtypes("list"))
+
+-- local rulecodes = allocate {
+-- [0] = "normal",
+-- [1] = "box",
+-- [2] = "image",
+-- [3] = "empty",
+-- [4] = "user",
+-- }
+
+local rulecodes = mark(getsubtypes("rule"))
+
+-- local glyphcodes = allocate {
+-- [0] = "character",
+-- [1] = "glyph",
+-- [2] = "ligature",
+-- [3] = "ghost",
+-- [4] = "left",
+-- [5] = "right",
+-- }
+
+local glyphcodes = mark(getsubtypes("glyph"))
+
+-- local disccodes = allocate {
+-- [0] = "discretionary", -- \discretionary
+-- [1] = "explicit", -- \-
+-- [2] = "automatic", -- following a -
+-- [3] = "regular", -- by hyphenator: simple
+-- [4] = "first", -- by hyphenator: hard first item
+-- [5] = "second", -- by hyphenator: hard second item
+-- }
+
+local disccodes = mark(getsubtypes("disc"))
+
+-- local skipcodes = allocate {
+-- [ 0] = "userskip",
+-- [ 1] = "lineskip",
+-- [ 2] = "baselineskip",
+-- [ 3] = "parskip",
+-- [ 4] = "abovedisplayskip",
+-- [ 5] = "belowdisplayskip",
+-- [ 6] = "abovedisplayshortskip",
+-- [ 7] = "belowdisplayshortskip",
+-- [ 8] = "leftskip",
+-- [ 9] = "rightskip",
+-- [ 10] = "topskip",
+-- [ 11] = "splittopskip",
+-- [ 12] = "tabskip",
+-- [ 13] = "spaceskip",
+-- [ 14] = "xspaceskip",
+-- [ 15] = "parfillskip",
+-- [ 16] = "mathskip", -- experiment
+-- [ 17] = "thinmuskip",
+-- [ 18] = "medmuskip",
+-- [ 19] = "thickmuskip",
+-- [ 98] = "conditionalmathglue",
+-- [ 99] = "muskip",
+-- [100] = "leaders",
+-- [101] = "cleaders",
+-- [102] = "xleaders",
+-- [103] = "gleaders",
+-- }
+
+local skipcodes = mark(getsubtypes("glue"))
+
+-- local leadercodes = allocate {
+-- [100] = "leaders",
+-- [101] = "cleaders",
+-- [102] = "xleaders",
+-- [103] = "gleaders",
+-- }
+
+local leadercodes = mark(getsubtypes("leader"))
+
+-- local fillcodes = allocate {
+-- [0] = "stretch",
+-- [1] = "fi",
+-- [2] = "fil",
+-- [3] = "fill",
+-- [4] = "filll",
+-- }
+
+local fillcodes = mark(getsubtypes("fill"))
+
+-- for now:
+
+local boundarycodes = allocate {
+ [0] = "cancel",
+ [1] = "user",
+ [2] = "protrusion",
+ [3] = "word",
+}
+
+-- local boundarycodes = mark(getsubtypes("boundary"))
+
+-- local penaltycodes = allocate { -- unfortunately not used (yet)
+-- [ 0] = "userpenalty",
+-- }
+
+local penaltycodes = mark(getsubtypes("penalty"))
+
+table.setmetatableindex(penaltycodes,function(t,k) return "userpenalty" end) -- not used anyway
+
+-- local kerncodes = allocate {
+-- [0] = "fontkern",
+-- [1] = "userkern",
+-- [2] = "accentkern",
+-- [3] = "italiccorrection",
+-- }
+
+local kerncodes = mark(getsubtypes("kern"))
+
+-- local margincodes = allocate {
+-- [0] = "left",
+-- [1] = "right",
+-- }
+
+local margincodes = mark(getsubtypes("marginkern"))
+
+-- local mathcodes = allocate {
+-- [0] = "beginmath",
+-- [1] = "endmath",
+-- }
+
+local mathcodes = mark(getsubtypes("math"))
+
+-- local noadcodes = allocate { -- simple nodes
+-- [ 0] = "ord",
+-- [ 1] = "opdisplaylimits",
+-- [ 2] = "oplimits",
+-- [ 3] = "opnolimits",
+-- [ 4] = "bin",
+-- [ 5] = "rel",
+-- [ 6] = "open",
+-- [ 7] = "close",
+-- [ 8] = "punct",
+-- [ 9] = "inner",
+-- [10] = "under",
+-- [11] = "over",
+-- [12] = "vcenter",
+-- }
+
+local noadcodes = mark(getsubtypes("noad"))
+
+-- local radicalcodes = allocate {
+-- [0] = "radical",
+-- [1] = "uradical",
+-- [2] = "uroot",
+-- [3] = "uunderdelimiter",
+-- [4] = "uoverdelimiter",
+-- [5] = "udelimiterunder",
+-- [6] = "udelimiterover",
+-- }
+
+local radicalcodes = mark(getsubtypes("radical"))
+
+-- local accentcodes = allocate {
+-- [0] = "bothflexible",
+-- [1] = "fixedtop",
+-- [2] = "fixedbottom",
+-- [3] = "fixedboth",
+-- }
+
+local accentcodes = mark(getsubtypes("accent"))
+
+-- local fencecodes = allocate {
+-- [0] = "unset",
+-- [1] = "left",
+-- [2] = "middle",
+-- [3] = "right",
+-- }
+
+local fencecodes = mark(getsubtypes("fence"))
+
+-- maybe we also need fractioncodes
+
+local function simplified(t)
+ local r = { }
+ for k, v in next, t do
+ r[k] = gsub(v,"_","")
+ end
+ return r
+end
+
+local nodecodes = simplified(node.types())
+local whatcodes = simplified(node.whatsits())
+
+skipcodes = allocate(swapped(skipcodes,skipcodes))
+boundarycodes = allocate(swapped(boundarycodes,boundarycodes))
+noadcodes = allocate(swapped(noadcodes,noadcodes))
+radicalcodes = allocate(swapped(radicalcodes,radicalcodes))
+nodecodes = allocate(swapped(nodecodes,nodecodes))
+whatcodes = allocate(swapped(whatcodes,whatcodes))
+listcodes = allocate(swapped(listcodes,listcodes))
+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))
+margincodes = allocate(swapped(margincodes,margincodes))
+disccodes = allocate(swapped(disccodes,disccodes))
+accentcodes = allocate(swapped(accentcodes,accentcodes))
+fencecodes = allocate(swapped(fencecodes,fencecodes))
+rulecodes = allocate(swapped(rulecodes,rulecodes))
+leadercodes = allocate(swapped(leadercodes,leadercodes))
+
+nodes.skipcodes = skipcodes nodes.gluecodes = skipcodes -- more official
+nodes.boundarycodes = boundarycodes
+nodes.noadcodes = noadcodes
+nodes.nodecodes = nodecodes
+nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes -- more official
+nodes.listcodes = listcodes
+nodes.glyphcodes = glyphcodes
+nodes.kerncodes = kerncodes
+nodes.penaltycodes = penaltycodes
+nodes.mathcodes = mathcodes
+nodes.fillcodes = fillcodes
+nodes.margincodes = margincodes nodes.marginkerncodes = margincodes
+nodes.disccodes = disccodes nodes.discretionarycodes = disccodes
+nodes.accentcodes = accentcodes
+nodes.radicalcodes = radicalcodes
+nodes.fencecodes = fencecodes
+nodes.rulecodes = rulecodes
+nodes.leadercodes = leadercodes
+
+listcodes.row = listcodes.alignment
+listcodes.column = listcodes.alignment
+
+kerncodes.kerning = kerncodes.fontkern
+
+kerncodes.italiccorrection = kerncodes.italiccorrection or 1 -- new
+
+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,
+ margin = margincodes,
+ disc = disccodes,
+ whatsit = whatcodes,
+ accent = accentcodes,
+ fence = fencecodes,
+}
+
+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)
+
+if not nodecodes.dir then
+ report_codes("use a newer version of luatex")
+ os.exit()
+end
diff --git a/Master/texmf-dist/tex/context/base/node-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-ini.mkiv
index d04e647de42..d04e647de42 100644
--- a/Master/texmf-dist/tex/context/base/node-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/node-ltp.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ltp.lua
index e4956f7df8e..ae17ab9ef00 100644
--- a/Master/texmf-dist/tex/context/base/node-ltp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ltp.lua
@@ -20,6 +20,9 @@ if not modules then modules = { } end modules ['node-par'] = {
-- todo: fix line numbers (cur_list.pg_field needed)
-- todo: check and improve protrusion
-- todo: arabic etc (we could use pretty large scales there) .. marks and cursive
+-- todo: see: we need to check this with the latest patches to the tex kernel
+
+-- todo: optimize a bit more (less par.*)
--[[
@@ -192,15 +195,28 @@ local tonut = nuts.tonut
local tonode = nuts.tonode
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getnext = nuts.getnext
local getprev = nuts.getprev
+local getboth = nuts.getboth
local getlist = nuts.getlist
local getfont = nuts.getfont
local getchar = nuts.getchar
+local getdisc = nuts.getdisc
local getattr = nuts.getattr
+local getdisc = nuts.getdisc
+
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setboth = nuts.setboth
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setdisc = nuts.setdisc
+local setsubtype = nuts.setsubtype
local slide_nodelist = nuts.slide -- get rid of this, probably ok > 78.2
local find_tail = nuts.tail
@@ -221,7 +237,6 @@ local setnodecolor = nodes.tracers.colors.set
local nodepool = nuts.pool
local nodecodes = nodes.nodecodes
-local whatcodes = nodes.whatcodes
local kerncodes = nodes.kerncodes
local glyphcodes = nodes.glyphcodes
local gluecodes = nodes.gluecodes
@@ -229,6 +244,7 @@ local margincodes = nodes.margincodes
local disccodes = nodes.disccodes
local mathcodes = nodes.mathcodes
local fillcodes = nodes.fillcodes
+local boundarycodes = nodes.boundarycodes
local temp_code = nodecodes.temp
local glyph_code = nodecodes.glyph
@@ -236,7 +252,6 @@ local ins_code = nodecodes.ins
local mark_code = nodecodes.mark
local adjust_code = nodecodes.adjust
local penalty_code = nodecodes.penalty
-local whatsit_code = nodecodes.whatsit
local disc_code = nodecodes.disc
local math_code = nodecodes.math
local kern_code = nodecodes.kern
@@ -245,16 +260,18 @@ local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local unset_code = nodecodes.unset
local marginkern_code = nodecodes.marginkern
+local dir_code = nodecodes.dir
+local boundary_code = nodecodes.boundary
+
+local protrusion_code = boundarycodes.protrusion
local leaders_code = gluecodes.leaders
-local localpar_code = whatcodes.localpar
-local dir_code = whatcodes.dir
-local pdfrefximage_code = whatcodes.pdfrefximage
-local pdfrefxform_code = whatcodes.pdfrefxform
+local localpar_code = nodecodes.localpar
local kerning_code = kerncodes.kerning -- font kern
local userkern_code = kerncodes.userkern
+local italickern_code = kerncodes.italiccorrection
local ligature_code = glyphcodes.ligature
@@ -284,6 +301,7 @@ local infinite_penalty = 10000
local eject_penalty = -10000
local infinite_badness = 10000
local awful_badness = 0x3FFFFFFF
+local ignore_depth = -65536000
local fit_very_loose_class = 0 -- fitness for lines stretching more than their stretchability
local fit_loose_class = 1 -- fitness for lines stretching 0.5 to 1.0 of their stretchability
@@ -352,7 +370,8 @@ local function inject_dirs_at_end_of_line(stack,current,start,stop)
local n = stack.n
local h = nil
while start and start ~= stop do
- if getid(start) == whatsit_code and getsubtype(start) == dir_code then
+ local id = getid(start)
+ if id == dir_code then
if not dir_pops[getfield(start,"dir")] then -- weird, what is this #
n = n + 1
stack[n] = start
@@ -404,11 +423,6 @@ local function register_statistics(par)
nofadjustedlines = nofadjustedlines + statistics.nofadjustedlines
end
--- resolvers --
-
-local get_whatsit_width = nodes.whatsitters.getters.width
-local get_whatsit_dimensions = nodes.whatsitters.getters.dimensions
-
-- expansion etc --
local function calculate_fraction(x,n,d,max_answer)
@@ -479,37 +493,40 @@ end)
local function kern_stretch_shrink(p,d)
local left = getprev(p)
- if left and getid(left) == glyph_code then -- how about disc nodes?
- local data = expansions[getfont(left)][getchar(left)]
- if data then
- local stretch = data.stretch
- local shrink = data.shrink
- if stretch ~= 0 then
- -- stretch = data.factor * (d * stretch - d)
- stretch = data.factor * d * (stretch - 1)
+ if left then
+ local char = isglyph(left)
+ if char then
+ local data = expansions[getfont(left)][char]
+ if data then
+ local stretch = data.stretch
+ local shrink = data.shrink
+ if stretch ~= 0 then
+ -- stretch = data.factor * (d * stretch - d)
+ stretch = data.factor * d * (stretch - 1)
+ end
+ if shrink ~= 0 then
+ -- shrink = data.factor * (d * shrink - d)
+ shrink = data.factor * d * (shrink - 1)
+ end
+ return stretch, shrink
end
- if shrink ~= 0 then
- -- shrink = data.factor * (d * shrink - d)
- shrink = data.factor * d * (shrink - 1)
- end
- return stretch, shrink
end
end
return 0, 0
end
-local expand_kerns = false
------ expand_kerns = "both"
+local expand_kerns_mode = false
+local expand_kerns = false
directives.register("builders.paragraphs.adjusting.kerns",function(v)
if not v then
- expand_kerns = false
+ expand_kerns_mode = false
elseif v == "stretch" or v == "shrink" then
- expand_kerns = v
+ expand_kerns_mode = v
elseif v == "both" then
- expand_kerns = true
+ expand_kerns_mode = true
else
- expand_kerns = toboolean(v,true) or false
+ expand_kerns_mode = toboolean(v,true) or false
end
end)
@@ -599,6 +616,16 @@ local function find(head) -- do we really want to recurse into an hlist?
else
head = getnext(head)
end
+ elseif id == protrusion_code then
+ local v = getfield(head,"value")
+ if v == 1 or v == 3 then
+ head = getnext(head)
+ if head then
+ head = getnext(head)
+ end
+ else
+ return head
+ end
elseif is_skipable(head) then
head = getnext(head)
else
@@ -639,6 +666,16 @@ local function find(head,tail)
else
tail = getprev(tail)
end
+ elseif id == protrusion_code then
+ local v = getfield(tail,"value")
+ if v == 2 or v == 3 then
+ tail = getprev(tail)
+ if tail then
+ tail = getprev(tail)
+ end
+ else
+ return tail
+ end
elseif is_skipable(tail) then
tail = getprev(tail)
else
@@ -687,8 +724,8 @@ local function add_to_width(line_break_dir,checked_expansion,s) -- split into tw
local adjust_stretch = 0
local adjust_shrink = 0
while s do
- local id = getid(s)
- if id == glyph_code then
+ local char, id = isglyph(s)
+ if char then
if is_rotated[line_break_dir] then -- can be shared
size = size + getfield(s,"height") + getfield(s,"depth")
else
@@ -697,7 +734,7 @@ local function add_to_width(line_break_dir,checked_expansion,s) -- split into tw
if checked_expansion then
local data = checked_expansion[getfont(s)]
if data then
- data = data[getchar(s)]
+ data = data[char]
if data then
adjust_stretch = adjust_stretch + data.glyphstretch
adjust_shrink = adjust_shrink + data.glyphshrink
@@ -745,14 +782,13 @@ local function compute_break_width(par,break_type,p) -- split in two
local break_size = break_width.size + disc_width.size
local break_adjust_stretch = break_width.adjust_stretch + disc_width.adjust_stretch
local break_adjust_shrink = break_width.adjust_shrink + disc_width.adjust_shrink
- local replace = getfield(p,"replace")
+ local pre, post, replace = getdisc(p)
if replace then
local size, adjust_stretch, adjust_shrink = add_to_width(line_break_dir,checked_expansion,replace)
break_size = break_size - size
break_adjust_stretch = break_adjust_stretch - adjust_stretch
break_adjust_shrink = break_adjust_shrink - adjust_shrink
end
- local post = getfield(p,"post")
if post then
local size, adjust_stretch, adjust_shrink = add_to_width(line_break_dir,checked_expansion,post)
break_size = break_size + size
@@ -773,15 +809,15 @@ local function compute_break_width(par,break_type,p) -- split in two
if id == glyph_code then
return -- happens often
elseif id == glue_code then
- local spec = getfield(p,"spec")
- local order = stretch_orders[getfield(spec,"stretch_order")]
- break_width.size = break_width.size - getfield(spec,"width")
- break_width[order] = break_width[order] - getfield(spec,"stretch")
- break_width.shrink = break_width.shrink - getfield(spec,"shrink")
+ local order = stretch_orders[getfield(p,"stretch_order")]
+ break_width.size = break_width.size - getfield(p,"width")
+ break_width[order] = break_width[order] - getfield(p,"stretch")
+ break_width.shrink = break_width.shrink - getfield(p,"shrink")
elseif id == penalty_code then
-- do nothing
elseif id == kern_code then
- if getsubtype(p) == userkern_code then
+ local s = getsubtype(p)
+ if s == userkern_code or s == italickern_code then
break_width.size = break_width.size - getfield(p,"kern")
else
return
@@ -797,22 +833,15 @@ end
local function append_to_vlist(par, b)
local prev_depth = par.prev_depth
- if prev_depth > par.ignored_dimen then
+ -- if prev_depth > par.ignored_dimen then
+ if prev_depth > ignore_depth then
if getid(b) == hlist_code then
local d = getfield(par.baseline_skip,"width") - prev_depth - getfield(b,"height") -- deficiency of space between baselines
local s = d < par.line_skip_limit and new_lineskip(par.lineskip) or new_baselineskip(d)
- -- local s = d < par.line_skip_limit
- -- if s then
- -- s = new_lineskip()
- -- setfield(s,"spec",tex.lineskip)
- -- else
- -- s = new_baselineskip(d)
- -- end
local head_field = par.head_field
if head_field then
local n = slide_nodelist(head_field) -- todo: find_tail
- setfield(n,"next",s)
- setfield(s,"prev",n)
+ setlink(n,s)
else
par.head_field = s
end
@@ -821,8 +850,7 @@ local function append_to_vlist(par, b)
local head_field = par.head_field
if head_field then
local n = slide_nodelist(head_field) -- todo: find_tail
- setfield(n,"next",b)
- setfield(b,"prev",n)
+ setlink(n,b)
else
par.head_field = b
end
@@ -837,8 +865,7 @@ local function append_list(par, b)
local head_field = par.head_field
if head_field then
local n = slide_nodelist(head_field) -- todo: find_tail
- setfield(n,"next",b)
- setfield(b,"prev",n)
+ setlink(n,b)
else
par.head_field = b
end
@@ -864,12 +891,12 @@ local function initialize_line_break(head,display)
local right_skip = tonut(tex.rightskip) -- nodes
local pretolerance = tex.pretolerance
local tolerance = tex.tolerance
- local adjust_spacing = tex.pdfadjustspacing
- local protrude_chars = tex.pdfprotrudechars
+ local adjust_spacing = tex.adjustspacing
+ local protrude_chars = tex.protrudechars
local last_line_fit = tex.lastlinefit
local newhead = new_temp()
- setfield(newhead,"next",head)
+ setnext(newhead,head)
local adjust_spacing_status = adjust_spacing > 1 and -1 or 0
@@ -930,11 +957,12 @@ local function initialize_line_break(head,display)
first_line = 0, -- tex.nest[tex.nest.ptr].modeline, -- 0, -- cur_list.pg_field
- each_line_height = tex.pdfeachlineheight or 0, -- this will go away
- each_line_depth = tex.pdfeachlinedepth or 0, -- this will go away
- first_line_height = tex.pdffirstlineheight or 0, -- this will go away
- last_line_depth = tex.pdflastlinedepth or 0, -- this will go away
- ignored_dimen = tex.pdfignoreddimen or 0, -- this will go away
+ -- each_line_height = tex.pdfeachlineheight or 0, -- this will go away
+ -- each_line_depth = tex.pdfeachlinedepth or 0, -- this will go away
+ -- first_line_height = tex.pdffirstlineheight or 0, -- this will go away
+ -- last_line_depth = tex.pdflastlinedepth or 0, -- this will go away
+
+ -- ignored_dimen = tex.pdfignoreddimen or 0,
baseline_skip = tonut(tex.baselineskip),
lineskip = tonut(tex.lineskip),
@@ -1031,6 +1059,8 @@ local function initialize_line_break(head,display)
par.tolerance = hztolerance
end
+ expand_kerns = expand_kerns_mode or (adjust_spacing == 2)
+
end
-- we need par for the error message
@@ -1142,7 +1172,7 @@ local function post_line_break(par)
local leftskip = par.used_left_skip -- used or normal ?
local rightskip = par.right_skip
local parshape = par.par_shape_ptr
- local ignored_dimen = par.ignored_dimen
+ ----- ignored_dimen = par.ignored_dimen
local adapt_width = par.adapt_width
@@ -1192,72 +1222,54 @@ local function post_line_break(par)
local prevlast = getprev(lastnode)
local nextlast = getnext(lastnode)
local subtype = getsubtype(lastnode)
- local pre = getfield(lastnode,"pre")
- local post = getfield(lastnode,"post")
- local replace = getfield(lastnode,"replace")
+ local pre, post, replace, pretail, posttail, replacetail = getdisc(lastnode,true)
if subtype == second_disc_code then
if not (getid(prevlast) == disc_code and getsubtype(prevlast) == first_disc_code) then
report_parbuilders('unsupported disc at location %a',3)
end
if pre then
flush_nodelist(pre)
- setfield(lastnode,"pre",nil)
pre = nil -- signal
end
if replace then
- local n = find_tail(replace)
- setfield(prevlast,"next",replace)
- setfield(replace,"prev",prevlast)
- setfield(n,"next",lastnode)
- setfield(lastnode,"prev",n)
- setfield(lastnode,"replace",nil)
+ setlink(prevlast,replace)
+ setlink(replacetail,lastnode)
replace = nil -- signal
end
- local pre = getfield(prevlast,"pre")
- local post = getfield(prevlast,"post")
- local replace = getfield(prevlast,"replace")
+ setdisc(lastnode,pre,post,replace)
+ local pre, post, replace = getdisc(prevlast)
if pre then
flush_nodelist(pre)
- setfield(prevlast,"pre",nil)
end
if replace then
flush_nodelist(replace)
- setfield(prevlast,"replace",nil)
end
if post then
flush_nodelist(post)
- setfield(prevlast,"post",nil)
end
+ setdisc(prevlast) -- nil,nil,nil
elseif subtype == first_disc_code then
-- what is v ... next probably
if not (getid(v) == disc_code and getsubtype(v) == second_disc_code) then
report_parbuilders('unsupported disc at location %a',4)
end
- setfield(nextlast,"subtype",regular_disc_code)
+ setsubtype(nextlast,regular_disc_code)
setfield(nextlast,"replace",post)
- setfield(lastnode,"post",nil)
+ setfield(lastnode,"post") -- nil
end
if replace then
- setfield(lastnode,"replace",nil) -- free
flush_nodelist(replace)
end
if pre then
- local n = find_tail(pre)
- setfield(prevlast,"next",pre)
- setfield(pre,"prev",prevlast)
- setfield(n,"next",lastnode)
- setfield(lastnode,"prev",n)
- setfield(lastnode,"pre",nil)
+ setlink(prevlast,pre)
+ setlink(pretail,lastnode)
end
if post then
- local n = find_tail(post)
- setfield(lastnode,"next",post)
- setfield(post,"prev",lastnode)
- setfield(n,"next",nextlast)
- setfield(nextlast,"prev",n)
- setfield(lastnode,"post",nil)
+ setlink(lastnode,post)
+ setlink(posttail,nextlast)
post_disc_break = true
end
+ setdisc(lastnode) -- nil, nil, nil
disc_break = true
elseif id == kern_code then
setfield(lastnode,"kern",0)
@@ -1287,7 +1299,7 @@ local function post_line_break(par)
end
-- we finish the line
local r = getnext(lineend)
- setfield(lineend,"next",nil)
+ setnext(lineend)
if not glue_break then
if rightskip then
insert_node_after(lineend,lineend,new_rightskip(right_skip)) -- lineend moves on as pseudo head
@@ -1295,10 +1307,7 @@ local function post_line_break(par)
end
-- each time ?
local q = getnext(head)
- setfield(head,"next",r)
- if r then
- setfield(r,"prev",head)
- end
+ setlink(head,r)
-- insert leftbox (if needed after parindent)
local leftbox = current_break.passive_left_box
if leftbox then
@@ -1357,20 +1366,22 @@ local function post_line_break(par)
local pre_adjust_head = texlists.pre_adjust_head
--
setfield(finished_line,"shift",cur_indent)
- -- this will probably go away:
- if par.each_line_height ~= ignored_dimen then
- setfield(finished_line,"height",par.each_line_height)
- end
- if par.each_line_depth ~= ignored_dimen then
- setfield(finished_line,"depth",par.each_line_depth)
- end
- if par.first_line_height ~= ignored_dimen and (current_line == par.first_line + 1) then
- setfield(finished_line,"height",par.first_line_height)
- end
- if par.last_line_depth ~= ignored_dimen and current_line + 1 == par.best_line then
- setfield(finished_line,"depth",par.last_line_depth)
- end
- --
+ --
+ -- -- this is gone:
+ --
+ -- if par.each_line_height ~= ignored_dimen then
+ -- setfield(finished_line,"height",par.each_line_height)
+ -- end
+ -- if par.each_line_depth ~= ignored_dimen then
+ -- setfield(finished_line,"depth",par.each_line_depth)
+ -- end
+ -- if par.first_line_height ~= ignored_dimen and (current_line == par.first_line + 1) then
+ -- setfield(finished_line,"height",par.first_line_height)
+ -- end
+ -- if par.last_line_depth ~= ignored_dimen and current_line + 1 == par.best_line then
+ -- setfield(finished_line,"depth",par.last_line_depth)
+ -- end
+ --
if texlists.pre_adjust_head ~= pre_adjust_head then
append_list(par, texlists.pre_adjust_head)
texlists.pre_adjust_head = pre_adjust_head
@@ -1421,28 +1432,25 @@ local function post_line_break(par)
end
local id = getid(next)
local subtype = getsubtype(next)
- if id == whatsit_code and subtype == localpar_code then
+ if id == localpar_code then
-- nothing
elseif id < math_code then
-- messy criterium
break
-elseif id == math_code then
- -- keep the math node
- setfield(next,"surround",0)
- break
- elseif id == kern_code and (subtype ~= userkern_code and not getattr(next,a_fontkern)) then
+ elseif id == math_code then
+ -- keep the math node
+ setfield(next,"surround",0)
+ break
+ elseif id == kern_code and (subtype ~= userkern_code and subtype ~= italickern_code and not getattr(next,a_fontkern)) then
-- fontkerns and accent kerns as well as otf injections
break
end
current = next
end
if current ~= head then
- setfield(current,"next",nil)
+ setnext(current)
flush_nodelist(getnext(head))
- setfield(head,"next",next)
- if next then
- setfield(next,"prev",head)
- end
+ setlink(head,next)
end
end
end
@@ -1472,11 +1480,8 @@ local function wrap_up(par)
par.do_last_line_fit = false
else
local glue = par.final_par_glue
- local spec = copy_node(getfield(glue,"spec"))
- setfield(spec,"width",getfield(spec,"width") + active_short - active_glue)
- setfield(spec,"stretch",0)
- -- flush_node(getfield(glue,"spec")) -- brrr, when we do this we can get an "invalid id stretch message", maybe dec refcount
- setfield(glue,"spec",spec)
+ setfield(glue,"width",getfield(glue,"width") + active_short - active_glue)
+ setfield(glue,"stretch",0)
if trace_lastlinefit then
report_parbuilders("applying last line fit, short %a, glue %p",active_short,active_glue)
end
@@ -1893,8 +1898,13 @@ local function try_break(pi, break_type, par, first_p, current, checked_expansio
local b = r.break_node
local l = b and b.cur_break or first_p
local o = current and getprev(current)
- if current and getid(current) == disc_code and getfield(current,"pre") then
- o = find_tail(getfield(current,"pre"))
+ if current and getid(current) == disc_code then
+ local pre, _, _, pretail = getdisc(current,true)
+ if pre then
+ o = pretail
+ else
+ o = find_protchar_right(l,o)
+ end
else
o = find_protchar_right(l,o)
end
@@ -2144,7 +2154,7 @@ function constructors.methods.basic(head,d)
par.pass_number = 0
-- par.auto_breaking = true
- setfield(temp_head,"next",head)
+ setnext(temp_head,head)
local current = head
local first_p = current
@@ -2153,15 +2163,18 @@ function constructors.methods.basic(head,d)
par.font_in_short_display = 0
- if current and getid(current) == whatsit_code and getsubtype(current) == localpar_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")
- par.internal_pen_broken = getfield(current,"pen_broken")
- par.internal_left_box = par.init_internal_left_box
- par.internal_left_box_width = par.init_internal_left_box_width
- par.internal_right_box = getfield(current,"box_right")
- par.internal_right_box_width = getfield(current,"box_right_width")
+ if current then
+ local id = getid(current)
+ if id == localpar_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")
+ par.internal_pen_broken = getfield(current,"pen_broken")
+ par.internal_left_box = par.init_internal_left_box
+ par.internal_left_box_width = par.init_internal_left_box_width
+ par.internal_right_box = getfield(current,"box_right")
+ par.internal_right_box_width = getfield(current,"box_right_width")
+ end
end
-- all passes are combined in this loop so maybe we should split this into
@@ -2184,8 +2197,8 @@ function constructors.methods.basic(head,d)
trialcount = 0
while current and p_active ~= n_active do
- local id = getid(current)
- if id == glyph_code then
+ local char, id = isglyph(current)
+ if char then
if is_rotated[par.line_break_dir] then
active_width.size = active_width.size + getfield(current,"height") + getfield(current,"depth")
else
@@ -2193,14 +2206,14 @@ function constructors.methods.basic(head,d)
end
if checked_expansion then
local currentfont = getfont(current)
- local data= checked_expansion[currentfont]
+ local data = checked_expansion[currentfont]
if data then
if currentfont ~= lastfont then
fontexps = checked_expansion[currentfont] -- a bit redundant for the par line packer
lastfont = currentfont
end
if fontexps then
- local expansion = fontexps[getchar(current)]
+ local expansion = fontexps[char]
if expansion then
active_width.adjust_stretch = active_width.adjust_stretch + expansion.glyphstretch
active_width.adjust_shrink = active_width.adjust_shrink + expansion.glyphshrink
@@ -2220,26 +2233,32 @@ function constructors.methods.basic(head,d)
local prev_p = getprev(current)
if prev_p and prev_p ~= temp_head then
local id = getid(prev_p)
- if id == glyph_code or
- (id < math_code and (id ~= whatsit_code or getsubtype(prev_p) ~= dir_code)) or -- was: precedes_break(prev_p)
- (id == kern_code and getsubtype(prev_p) ~= userkern_code) then
+ -- we need to check this with the latest patches to the tex kernel
+ if (id == glyph_code) or (id < math_code) then
p_active, n_active = try_break(0, unhyphenated_code, par, first_p, current, checked_expansion)
+ elseif id == kern_code then
+ local s = getsubtype(prev_p)
+ if s ~= userkern_code and s ~= italickern_code then
+ p_active, n_active = try_break(0, unhyphenated_code, par, first_p, current, checked_expansion)
+ end
end
end
end
- local spec = check_shrinkage(par,getfield(current,"spec"))
- local order = stretch_orders[getfield(spec,"stretch_order")]
- setfield(current,"spec",spec)
- active_width.size = active_width.size + getfield(spec,"width")
- active_width[order] = active_width[order] + getfield(spec,"stretch")
- active_width.shrink = active_width.shrink + getfield(spec,"shrink")
+ check_shrinkage(par,current)
+ local order = stretch_orders[getfield(current,"stretch_order")]
+ active_width.size = active_width.size + getfield(current,"width")
+ active_width[order] = active_width[order] + getfield(current,"stretch")
+ active_width.shrink = active_width.shrink + getfield(current,"shrink")
elseif id == disc_code then
local subtype = getsubtype(current)
if subtype ~= second_disc_code then
local line_break_dir = par.line_break_dir
if second_pass or subtype <= automatic_disc_code then
local actual_pen = subtype == automatic_disc_code and par.ex_hyphen_penalty or par.hyphen_penalty
- local pre = getfield(current,"pre")
+ -- 0.81 :
+ -- local actual_pen = getfield(current,"penalty")
+ --
+ local pre, post, replace = getdisc(current)
if not pre then -- trivial pre-break
disc_width.size = 0
if checked_expansion then
@@ -2282,7 +2301,7 @@ function constructors.methods.basic(head,d)
-- do_one_seven_eight(sub_disc_width_from_active_width);
-- do_one_seven_eight(reset_disc_width);
-- s = vlink_no_break(vlink(current));
- -- add_to_widths(s, line_break_dir, pdf_adjust_spacing,disc_width);
+ -- add_to_widths(s, line_break_dir, adjust_spacing,disc_width);
-- ext_try_break(...,first_p,vlink(current));
--
else
@@ -2298,7 +2317,6 @@ function constructors.methods.basic(head,d)
end
end
end
- local replace = getfield(current,"replace")
if replace then
local size, adjust_stretch, adjust_shrink = add_to_width(line_break_dir,checked_expansion,replace)
active_width.size = active_width.size + size
@@ -2309,9 +2327,10 @@ function constructors.methods.basic(head,d)
end
end
elseif id == kern_code then
- if getsubtype(current) == userkern_code then
+ local s = getsubtype(current)
+ if s == userkern_code or s == italickern_code then
local v = getnext(current)
--- if par.auto_breaking and getid(v) == glue_code then
+ -- if par.auto_breaking and getid(v) == glue_code then
if auto_breaking and getid(v) == glue_code then
p_active, n_active = try_break(0, unhyphenated_code, par, first_p, current, checked_expansion)
end
@@ -2348,23 +2367,15 @@ function constructors.methods.basic(head,d)
active_width.size = active_width.size + getfield(current,"width")
elseif id == penalty_code then
p_active, n_active = try_break(getfield(current,"penalty"), unhyphenated_code, par, first_p, current, checked_expansion)
- elseif id == whatsit_code then
- local subtype = getsubtype(current)
- if subtype == localpar_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")
- par.internal_left_box_width = getfield(current,"box_left_width")
- par.internal_right_box = getfield(current,"box_right")
- par.internal_right_box_width = getfield(current,"box_right_width")
- elseif subtype == dir_code then
- par.line_break_dir = checked_line_dir(dirstack) or par.line_break_dir
- else
- local get_width = get_whatsit_width[subtype]
- if get_width then
- active_width.size = active_width.size + get_width(current,par.line_break_dir)
- end
- end
+ elseif id == dir_code then
+ par.line_break_dir = checked_line_dir(dirstack) or par.line_break_dir
+ elseif id == localpar_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")
+ par.internal_left_box_width = getfield(current,"box_left_width")
+ par.internal_right_box = getfield(current,"box_right")
+ par.internal_right_box_width = getfield(current,"box_right_width")
elseif trace_unsupported then
if id == mark_code or id == ins_code or id == adjust_code then
-- skip
@@ -2461,8 +2472,8 @@ local verbose = false -- true
local function short_display(target,a,font_in_short_display)
while a do
- local id = getid(a)
- if id == glyph_code then
+ local char, id = isglyph(a)
+ if char then
local font = getfont(a)
if font ~= font_in_short_display then
write(target,tex.fontidentifier(font) .. ' ')
@@ -2471,24 +2482,28 @@ local function short_display(target,a,font_in_short_display)
if getsubtype(a) == ligature_code then
font_in_short_display = short_display(target,getfield(a,"components"),font_in_short_display)
else
- write(target,utfchar(getchar(a)))
+ write(target,utfchar(char))
end
elseif id == disc_code then
- font_in_short_display = short_display(target,getfield(a,"pre"),font_in_short_display)
- font_in_short_display = short_display(target,getfield(a,"post"),font_in_short_display)
+ local pre, post, replace = getdisc(a)
+ font_in_short_display = short_display(target,pre,font_in_short_display)
+ font_in_short_display = short_display(target,post,font_in_short_display)
elseif verbose then
write(target,format("[%s]",nodecodes[id]))
elseif id == rule_code then
write(target,"|")
elseif id == glue_code then
- if getfield(getfield(a,"spec"),"writable") then
- write(target," ")
- end
- elseif id == kern_code and (getsubtype(a) == userkern_code or getattr(a,a_fontkern)) then
- if verbose then
- write(target,"[|]")
+ write(target," ")
+ elseif id == kern_code then
+ local s = getsubtype(a)
+ if s == userkern_code or s == italickern_code or getattr(a,a_fontkern) then
+ if verbose then
+ write(target,"[|]")
+ -- else
+ -- write(target,"")
+ end
else
- write(target,"")
+ write(target,"[]")
end
elseif id == math_code then
write(target,"$")
@@ -2534,10 +2549,10 @@ function diagnostics.feasible_break(par, current, r, b, pi, d, artificial_demeri
par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
else
local save_link = getnext(current)
- setfield(current,"next",nil)
+ setnext(current)
write_nl("log","")
par.font_in_short_display = short_display("log",getnext(printed_node),par.font_in_short_display)
- setfield(current,"next",save_link)
+ setnext(current,save_link)
end
par.printed_node = current
end
@@ -2659,7 +2674,7 @@ end
--
-- local hlist = new_node("hlist")
--
--- setfield(hlist,"list",head)
+-- setlist(hlist,head)
-- setfield(hlist,"dir",direction or tex.textdir)
-- setfield(hlist,"width",width)
-- setfield(hlist,"height",height)
@@ -2781,7 +2796,7 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
setfield(hlist,"width",width)
return hlist, 0
else
- setfield(hlist,"list",head)
+ setlist(hlist,head)
end
local cal_expand_ratio = method == "cal_expand_ratio" or method == "subst_ex_font"
@@ -2825,8 +2840,8 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
local function process(current) -- called nested in disc replace
while current do
- local id = getid(current)
- if id == glyph_code then
+ local char, id = isglyph(current)
+ if char then
if cal_expand_ratio then
local currentfont = getfont(current)
if currentfont ~= lastfont then
@@ -2834,7 +2849,7 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
lastfont = currentfont
end
if fontexps then
- local expansion = fontexps[getchar(current)]
+ local expansion = fontexps[char]
if expansion then
font_stretch = font_stretch + expansion.glyphstretch
font_shrink = font_shrink + expansion.glyphshrink
@@ -2878,12 +2893,11 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
end
end
elseif id == glue_code then
- local spec = getfield(current,"spec")
- natural = natural + getfield(spec,"width")
- local op = getfield(spec,"stretch_order")
- local om = getfield(spec,"shrink_order")
- total_stretch[op] = total_stretch[op] + getfield(spec,"stretch")
- total_shrink [om] = total_shrink [om] + getfield(spec,"shrink")
+ natural = natural + getfield(current,"width")
+ local op = getfield(current,"stretch_order")
+ local om = getfield(current,"shrink_order")
+ total_stretch[op] = total_stretch[op] + getfield(current,"stretch")
+ total_shrink [om] = total_shrink [om] + getfield(current,"shrink")
if getsubtype(current) >= leaders_code then
local leader = getleader(current)
local ht = getfield(leader,"height")
@@ -2934,50 +2948,27 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
depth = ds
end
elseif id == ins_code or id == mark_code then
- local prev = getprev(current)
- local next = getnext(current)
+ local prev, next = getboth(current)
if adjust_tail then -- todo
- if next then
- setfield(next,"prev",prev)
- end
- if prev then
- setfield(prev,"next",next)
- end
- setfield(current,"prev",adjust_tail)
- setfield(current,"next",nil)
- adjust_setfield(tail,"next",current)
+ setlink(prev,next)
+ setlink(adjust_tail,current)
+ setnext(current)
adjust_tail = current
else
adjust_head = current
adjust_tail = current
- setfield(current,"prev",nil)
- setfield(current,"next",nil)
+ setboth(current)
end
elseif id == adjust_code then
local list = getlist(current)
if adjust_tail then
- adjust_setfield(tail,"next",list)
+ setnext(adjust_tail,list)
else
adjust_head = list
end
adjust_tail = slide_nodelist(list) -- find_tail(list)
- elseif id == whatsit_code then
- local subtype = getsubtype(current)
- if subtype == dir_code then
- hpack_dir = checked_line_dir(stack,current) or hpack_dir
- else
- local get_dimensions = get_whatsit_dimensions[subtype]
- if get_dimensions then
- local wd, ht, dp = get_dimensions(current,hpack_dir)
- natural = natural + wd
- if ht > height then
- height = ht
- end
- if dp > depth then
- depth = dp
- end
- end
- end
+ elseif id == dir_code then
+ hpack_dir = checked_line_dir(stack,current) or hpack_dir
elseif id == marginkern_code then
local width = getfield(current,"width")
if cal_expand_ratio then
@@ -3030,15 +3021,16 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
local fontexps, lastfont
for i=1,expansion_index do
- local g = expansion_stack[i]
- local e
- if getid(g) == glyph_code then
+ local g = expansion_stack[i]
+ local e = 0
+ local char = isglyph(g)
+ if char then
local currentfont = getfont(g)
if currentfont ~= lastfont then
fontexps = expansions[currentfont]
lastfont = currentfont
end
- local data = fontexps[getchar(g)]
+ local data = fontexps[char]
if trace_expansion then
setnodecolor(g,"hz:positive")
end
@@ -3086,15 +3078,16 @@ local function hpack(head,width,method,direction,firstline,line) -- fast version
local fontexps, lastfont
for i=1,expansion_index do
- local g = expansion_stack[i]
- local e
- if getid(g) == glyph_code then
+ local g = expansion_stack[i]
+ local e = 0
+ local char = isglyph(g)
+ if char then
local currentfont = getfont(g)
if currentfont ~= lastfont then
fontexps = expansions[currentfont]
lastfont = currentfont
end
- local data = fontexps[getchar(g)]
+ local data = fontexps[char]
if trace_expansion then
setnodecolor(g,"hz:negative")
end
diff --git a/Master/texmf-dist/tex/context/base/node-met.lua b/Master/texmf-dist/tex/context/base/mkiv/node-met.lua
index 335ce2a9837..272b1d1769a 100644
--- a/Master/texmf-dist/tex/context/base/node-met.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-met.lua
@@ -60,13 +60,11 @@ end
-- We start with some helpers and provide all relevant basic functions in the
-- node namespace as well.
-local gonuts = type(node.direct) == "table"
--- local gonuts = false
-
nodes = nodes or { }
local nodes = nodes
-nodes.gonuts = gonuts
+----- gonuts = type(node.direct) == "table"
+-----.gonuts = gonuts
local nodecodes = nodes.nodecodes
local hlist_code = nodecodes.hlist
@@ -88,13 +86,13 @@ nodes.new = node.new
nodes.tail = node.tail
nodes.traverse = node.traverse
nodes.traverse_id = node.traverse_id
+nodes.traverse_char = node.traverse_char
nodes.slide = node.slide
nodes.vpack = node.vpack
nodes.fields = node.fields
nodes.is_node = node.is_node
nodes.first_glyph = node.first_glyph
-nodes.first_character = node.first_character
nodes.has_glyph = node.has_glyph or node.first_glyph
nodes.current_attr = node.current_attr
@@ -110,50 +108,93 @@ nodes.set_attribute = node.set_attribute
nodes.unset_attribute = node.unset_attribute
nodes.protect_glyphs = node.protect_glyphs
+nodes.protect_glyph = node.protect_glyph
nodes.unprotect_glyphs = node.unprotect_glyphs
nodes.kerning = node.kerning
nodes.ligaturing = node.ligaturing
nodes.mlist_to_hlist = node.mlist_to_hlist
-if not gonuts or not node.getfield then
- node.getfield = metatable.__index
- node.setfield = metatable.__newindex
-end
+nodes.effective_glue = node.effective_glue
--- if gonuts then
- nodes.tonode = function(n) return n end
- nodes.tonut = function(n) return n end
+nodes.is_zero_glue = node.is_zero_glue
+nodes.getglue = node.getglue
+nodes.getglue = node.getglue
+
+-- if not gonuts or not node.getfield then
+-- node.getfield = metatable.__index
+-- node.setfield = metatable.__newindex
-- end
+nodes.tonode = function(n) return n end
+nodes.tonut = function(n) return n end
+
local getfield = node.getfield
local setfield = node.setfield
-local getattr = getfield
+local getattr = node.get_attribute
local setattr = setfield
-local getnext = node.getnext or function(n) return getfield(n,"next") end
-local getprev = node.getprev or function(n) return getfield(n,"prev") end
-local getid = node.getid or function(n) return getfield(n,"id") end
-local getchar = node.getchar or function(n) return getfield(n,"char") end
-local getfont = node.getfont or function(n) return getfield(n,"font") end
-local getsubtype = node.getsubtype or function(n) return getfield(n,"subtype") end
-local getlist = node.getlist or function(n) return getfield(n,"list") end
-local getleader = node.getleader or function(n) return getfield(n,"leader") end
-
-nodes.getfield = getfield
-nodes.getattr = getattr
-
-nodes.setfield = setfield
-nodes.setattr = setattr
-
-nodes.getnext = getnext
-nodes.getprev = getprev
-nodes.getid = getid
-nodes.getchar = getchar
-nodes.getfont = getfont
-nodes.getsubtype = getsubtype
-nodes.getlist = getlist
-nodes.getleader = getleader
+local n_getid = node.getid
+local n_getlist = node.getlist
+local n_getnext = node.getnext
+local n_getprev = node.getprev
+local n_getchar = node.getchar
+local n_getfont = node.getfont
+local n_getsubtype = node.getsubtype
+local n_setfield = node.setfield
+local n_getfield = node.getfield
+local n_setattr = node.setattr
+local n_getattr = node.getattr
+local n_getdisc = node.getdisc
+local n_getleader = node.getleader
+
+local n_setnext = node.setnext or
+ function(c,next)
+ setfield(c,"next",n)
+ end
+local n_setprev = node.setprev or
+ function(c,prev)
+ setfield(c,"prev",p)
+ end
+local n_setlink = node.setlink or
+ function(c1,c2)
+ if c1 then setfield(c1,"next",c2) end
+ if c2 then setfield(c2,"prev",c1) end
+ end
+local n_setboth = node.setboth or
+ function(c,p,n)
+ setfield(c,"prev",p)
+ setfield(c,"next",n)
+ end
+
+node.setnext = n_setnext
+node.setprev = n_setprev
+node.setlink = n_setlink
+node.setboth = n_setboth
+
+nodes.getfield = n_getfield
+nodes.setfield = n_setfield
+nodes.getattr = n_getattr
+nodes.setattr = n_setattr
+
+nodes.getnext = n_getnext
+nodes.getprev = n_getprev
+nodes.getid = n_getid
+nodes.getchar = n_getchar
+nodes.getfont = n_getfont
+nodes.getsubtype = n_getsubtype
+nodes.getlist = n_getlist
+nodes.getleader = n_getleader
+nodes.getdisc = n_getdisc
+-----.getpre = node.getpre or function(n) local h, _, _, t = n_getdisc(n,true) return h, t end
+-----.getpost = node.getpost or function(n) local _, h, _, _, t = n_getdisc(n,true) return h, t end
+-----.getreplace = node.getreplace or function(n) local _, _, h, _, _, t = n_getdisc(n,true) return h, t end
+
+nodes.is_char = node.is_char
+nodes.ischar = node.is_char
+
+nodes.is_glyph = node.is_glyph
+nodes.isglyph = node.is_glyph
nodes.getbox = node.getbox or tex.getbox
nodes.setbox = node.setbox or tex.setbox
@@ -161,12 +202,6 @@ nodes.getskip = node.getskip or tex.get
local n_new_node = nodes.new
local n_free_node = nodes.free
-local n_setfield = nodes.setfield
-local n_getfield = nodes.getfield
-local n_getnext = nodes.getnext
-local n_getprev = nodes.getprev
-local n_getid = nodes.getid
-local n_getlist = nodes.getlist
local n_copy_node = nodes.copy
local n_copy_list = nodes.copy_list
local n_find_tail = nodes.tail
@@ -176,14 +211,6 @@ local n_slide = nodes.slide
local n_remove_node = node.remove -- not yet nodes.remove
--- if t.id == glue_code then
--- local s = t.spec
--- if s and s.writable then
--- free_node(s)
--- end
--- t.spec = nil
--- end
-
local function remove(head,current,free_too)
local t = current
head, current = n_remove_node(head,current)
@@ -193,8 +220,7 @@ local function remove(head,current,free_too)
n_free_node(t)
t = nil
else
- n_setfield(t,"next",nil)
- n_setfield(t,"prev",nil)
+ n_setboth(t)
end
return head, current, t
end
@@ -219,12 +245,10 @@ function nodes.replace(head,current,new) -- no head returned if false
local prev = n_getprev(current)
local next = n_getnext(current)
if next then
- n_setfield(new,"next",next)
- n_setfield(next,"prev",new)
+ n_setlink(new,next)
end
if prev then
- n_setfield(new,"prev",prev)
- n_setfield(prev,"next",new)
+ n_setlink(prev,new)
end
if head then
if head == current then
@@ -279,8 +303,7 @@ function nodes.linked(...)
local next = select(i,...)
if next then
if head then
- n_setfield(last,"next",next)
- n_setfield(next,"prev",last)
+ n_setlink(last,next)
else
head = next
end
@@ -296,8 +319,7 @@ function nodes.concat(list) -- consider tail instead of slide
local li = list[i]
if li then
if head then
- n_setfield(tail,"next",li)
- n_setfield(li,"prev",tail)
+ n_setlink(tail,li)
else
head = li
end
@@ -320,56 +342,8 @@ and hide it for the user. And yes, LuaTeX now gives a warning as
well.</p>
]]--
-function nodes.writable_spec(n) -- not pool
- local spec = n_getfield(n,"spec")
- if not spec then
- spec = n_copy_node(glue_spec)
- n_setfield(n,"spec",spec)
- elseif not n_getfield(spec,"writable") then
- spec = n_copy_node(spec)
- n_setfield(n,"spec",spec)
- end
- return spec
-end
-
-function nodes.copy_spec(old,free) -- also frees
- if not old then
- return n_new_node("glue_spec")
- else
- local new = n_copy_node(old)
- if free and old.writable then
- free_node(old)
- end
- return new
- end
-end
-
-function nodes.free_spec(old)
- if not old then
- -- skip
- elseif old.writable then
- free_node(old)
- else
- -- skip
- end
-end
-
-if gonuts then
-
- function nodes.reference(n)
- return n and tonut(n) or "<none>"
- end
-
-else
-
- local left, space = lpeg.P("<"), lpeg.P(" ")
-
- local reference = left * (1-left)^0 * left * space^0 * lpeg.C((1-space)^0)
-
- function nodes.reference(n)
- return n and lpegmatch(reference,tostring(n)) or "<none>"
- end
-
+function nodes.reference(n)
+ return n and tonut(n) or "<none>"
end
-- Here starts an experiment with metatables. Of course this only works with nodes
@@ -438,8 +412,7 @@ metatable.__concat = function(n1,n2) -- todo: accept nut on one end
return n2 -- or n2 * 2
else
local tail = n_find_tail(n1)
- n_setfield(tail,"next",n2)
- n_setfield(n2,"prev",tail)
+ n_setlink(tail,n2)
return n1
end
end
@@ -456,26 +429,22 @@ metatable.__mul = function(n,multiplier)
local h = n_copy_list(n)
if head then
local t = n_find_tail(h)
- n_setfield(t,"next",head)
- n_setfield(head,"prev",t)
+ n_setlink(t,head)
end
head = h
end
local t = n_find_tail(n)
- n_setfield(t,"next",head)
- n_setfield(head,"prev",t)
+ n_setlink(t,head)
else
local head
for i=2,multiplier do
local c = n_copy_node(n)
if head then
- n_setfield(c,"next",head)
- n_setfield(head,"prev",c)
+ n_setlink(c,head)
end
head = c
end
- n_setfield(n,"next",head)
- n_setfield(head,"prev",n)
+ n_setlink(n,head)
end
return n
end
@@ -484,7 +453,7 @@ metatable.__sub = function(first,second)
if type(second) == "number" then
local tail = n_find_tail(first)
for i=1,second do
- local prev = n_getfield(tail,"prev")
+ local prev = n_getprev(tail)
n_free_node(tail) -- can become flushlist/flushnode
if prev then
tail = prev
@@ -493,7 +462,7 @@ metatable.__sub = function(first,second)
end
end
if tail then
- n_setfield(tail,"next",nil)
+ n_setnext(tail)
return first
else
return nil
@@ -504,15 +473,12 @@ metatable.__sub = function(first,second)
local prev = n_getprev(firsttail)
if prev then
local secondtail = n_find_tail(second)
- n_setfield(secondtail,"next",firsttail)
- n_setfield(firsttail,"prev",ltail)
- n_setfield(prev,"next",second)
- n_setfield(second,"prev",prev)
+ n_setlink(secondtail,firsttail)
+ n_setlink(prev,second)
return first
else
local secondtail = n_find_tail(second)
- n_setfield(secondtail,"next",first)
- n_setfield(first,"prev",ltail)
+ n_setlink(secondtail,first)
return second
end
end
@@ -531,7 +497,7 @@ metatable.__add = function(first,second)
end
end
if head then
- n_setfield(head,"prev",nil)
+ n_setprev(head)
return head
else
return nil
@@ -541,13 +507,10 @@ metatable.__add = function(first,second)
local next = n_getnext(first)
if next then
local secondtail = n_find_tail(second)
- n_setfield(first,"next",second)
- n_setfield(second,"prev",first)
- n_setfield(secondtail,"next",next)
- n_setfield(next,"prev",secondtail)
+ n_setlink(first,second)
+ n_setlink(secondtail,next)
else
- n_setfield(first,"next",second)
- n_setfield(second,"prev",first)
+ n_setlink(first,second)
end
return first
end
@@ -569,7 +532,7 @@ end
metatable.__pow = function(n,multiplier)
local tail = n
local head = nil
- if getnext(n) then
+ if n_getnext(n) then
if multiplier == 1 then
head = n_copy_list(n)
else
@@ -577,8 +540,7 @@ metatable.__pow = function(n,multiplier)
local h = n_copy_list(n)
if head then
local t = n_find_tail(h)
- n_setfield(t,"next",head)
- n_setfield(head,"prev",t)
+ n_setlink(t,head)
end
head = h
end
@@ -590,8 +552,7 @@ metatable.__pow = function(n,multiplier)
for i=2,multiplier do
local c = n_copy_node(n)
if head then
- n_setfield(head,"next",c)
- n_setfield(c,"prev",head)
+ n_setlink(head,c)
end
head = c
end
@@ -607,35 +568,34 @@ metatable.__unm = function(head)
local current = n_getnext(head)
while current do
local next = n_getnext(current)
- n_setfield(first,"prev",current)
- n_setfield(current,"next",first)
+ n_setlink(current,first)
first = current
current = next
end
- n_setfield(first,"prev",nil)
- n_setfield(last,"next",nil)
+ n_setprev(first)
+ n_setnext(last)
return first
end
-- see node-nut.lua for more info on going nuts
-if not gonuts then
-
- local nuts = { }
- nodes.nuts = nuts
-
- local function dummy(f) return f end
-
- nodes.vianuts = dummy
- nodes.vianodes = dummy
-
- for k, v in next, nodes do
- if type(v) == "function" then
- nuts[k] = v
- end
- end
-
-end
+-- if not gonuts then
+--
+-- local nuts = { }
+-- nodes.nuts = nuts
+--
+-- local function dummy(f) return f end
+--
+-- nodes.vianuts = dummy
+-- nodes.vianodes = dummy
+--
+-- for k, v in next, nodes do
+-- if type(v) == "function" then
+-- nuts[k] = v
+-- end
+-- end
+--
+-- end
-- also handy
@@ -690,34 +650,3 @@ end
nodes.keys = keys -- [id][subtype]
nodes.fields = nodefields -- (n)
-
--- one issue solved in flush_node:
---
--- case glue_spec_node:
--- if (glue_ref_count(p)!=null) {
--- decr(glue_ref_count(p));
--- return ;
--- /*
--- } else if (! valid_node(p)) {
--- return ;
--- */
--- /*
--- } else {
--- free_node(p, get_node_size(type(p), subtype(p)));
--- return ;
--- */
--- }
--- break ;
---
--- or:
---
--- case glue_spec_node:
--- if (glue_ref_count(p)!=null) {
--- decr(glue_ref_count(p));
--- return ;
--- } else if (valid_node(p)) {
--- free_node(p, get_node_size(type(p), subtype(p)));
--- return ;
--- } else {
--- break ;
--- }
diff --git a/Master/texmf-dist/tex/context/base/node-mig.lua b/Master/texmf-dist/tex/context/base/mkiv/node-mig.lua
index 41f95be4590..24bebb0ccb2 100644
--- a/Master/texmf-dist/tex/context/base/node-mig.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-mig.lua
@@ -28,6 +28,10 @@ local getattr = nuts.getattr
local setfield = nuts.setfield
local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setprev = nuts.setprev
+local setnext = nuts.setnext
local remove_node = nuts.remove
@@ -51,18 +55,17 @@ local function locate(head,first,last,ni,nm)
local list = getlist(current)
if list then
list, first, last, ni, nm = locate(list,first,last,ni,nm)
- setfield(current,"list",list)
+ setlist(current,list)
end
current = getnext(current)
elseif migrate_inserts and id == insert_code then
local insert
head, current, insert = remove_node(head,current)
- setfield(insert,"next",nil)
+ setnext(insert)
if first then
- setfield(insert,"prev",last)
- setfield(last,"next",insert)
+ setlink(last,insert)
else
- setfield(insert,"prev",nil)
+ setprev(insert)
first = insert
end
last = insert
@@ -70,12 +73,11 @@ local function locate(head,first,last,ni,nm)
elseif migrate_marks and id == mark_code then
local mark
head, current, mark = remove_node(head,current)
- setfield(mark,"next",nil)
+ setnext(mark)
if first then
- setfield(mark,"prev",last)
- setfield(last,"next",mark)
+ setlink(last,mark)
else
- setfield(mark,"prev",nil)
+ setprev(mark)
first = mark
end
last = mark
@@ -120,11 +122,9 @@ function nodes.handlers.migrate(head,where)
-- inserts after head, use insert_after
local n = getnext(current)
if n then
- setfield(last,"next",n)
- setfield(n,"prev",last)
+ setlink(last,n)
end
- setfield(current,"next",first)
- setfield(first,"prev",current)
+ setlink(current,first)
done = true
current = last
end
diff --git a/Master/texmf-dist/tex/context/base/node-mig.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-mig.mkiv
index 143fd4466e5..143fd4466e5 100644
--- a/Master/texmf-dist/tex/context/base/node-mig.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-mig.mkiv
diff --git a/Master/texmf-dist/tex/context/base/node-nut.lua b/Master/texmf-dist/tex/context/base/mkiv/node-nut.lua
index b133c4e7484..1465a668019 100644
--- a/Master/texmf-dist/tex/context/base/node-nut.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-nut.lua
@@ -89,20 +89,10 @@ if not modules then modules = { } end modules ['node-met'] = {
local type, rawget = type, rawget
local nodes = nodes
-local gonuts = nodes.gonuts
local direct = node.direct
local fastcopy = table.fastcopy
-if type(direct) ~= "table" then
- return
-elseif gonuts then
- statistics.register("running in nuts mode", function() return "yes" end)
-else
- statistics.register("running in nuts mode", function() return "no" end)
- return
-end
-
local texget = tex.get
local nodecodes = nodes.nodecodes
@@ -133,7 +123,7 @@ nuts.getfield = direct.getfield
nuts.getnext = direct.getnext
nuts.getprev = direct.getprev
nuts.getid = direct.getid
-nuts.getattr = direct.has_attribute or direct.getfield
+nuts.getattr = direct.get_attribute or direct.has_attribute or direct.getfield
nuts.getchar = direct.getchar
nuts.getfont = direct.getfont
nuts.getsubtype = direct.getsubtype
@@ -152,9 +142,7 @@ nuts.getleader = direct.getleader
-- end
-- end
--- track("getsubtype")
-
--- local dgf = direct.getfield function nuts.getlist(n) return dgf(n,"list") end
+-- track("getfield")
-- setters
@@ -183,6 +171,7 @@ nuts.new = direct.new
nuts.tail = direct.tail
nuts.traverse = direct.traverse
nuts.traverse_id = direct.traverse_id
+nuts.traverse_char = direct.traverse_char
nuts.slide = direct.slide
nuts.writable_spec = direct.writable_spec
nuts.vpack = direct.vpack
@@ -190,7 +179,6 @@ nuts.is_node = direct.is_node
nuts.is_direct = direct.is_direct
nuts.is_nut = direct.is_direct
nuts.first_glyph = direct.first_glyph
-nuts.first_character = direct.first_character
nuts.has_glyph = direct.has_glyph or direct.first_glyph
nuts.current_attr = direct.current_attr
@@ -206,41 +194,83 @@ nuts.set_attribute = direct.set_attribute
nuts.unset_attribute = direct.unset_attribute
nuts.protect_glyphs = direct.protect_glyphs
+nuts.protect_glyph = direct.protect_glyph
nuts.unprotect_glyphs = direct.unprotect_glyphs
+nuts.ligaturing = direct.ligaturing
+nuts.kerning = direct.kerning
+nuts.effective_glue = direct.effective_glue
--- placeholders
+if not direct.mlist_to_hlist then -- needed
-if not direct.kerning then
-
- local n_kerning = node.kerning
+ local n_mlist_to_hlist = node.mlist_to_hlist
- function nuts.kerning(head)
- return tonode(n_kerning(tonut(head)))
+ function nuts.mlist_to_hlist(head)
+ return tonode(n_mlist_to_hlist(tonut(head)))
end
end
-if not direct.ligaturing then
-
- local n_ligaturing = node.ligaturing
-
- function nuts.ligaturing(head)
- return tonode(n_ligaturing(tonut(head)))
+local is_zero_glue = direct.is_zero_glue
+local setglue = direct.setglue
+local getglue = direct.getglue
+
+if not is_zero_glue then
+ is_zero_glue = function(n)
+ return not n or (
+ getfield(n,"width") == 0 and
+ getfield(n,"stretch") == 0 and
+ getfield(n,"shrink") == 0
+ )
+ end
+ setglue = function(n,width,stretch,shrink,stretch_order,shrink_order)
+ setfield(n,"width", width or 0)
+ setfield(n,"stretch", stretch or 0)
+ setfield(n,"shrink", shrink or 0)
+ setfield(n,"stretch_order",stretch_order or 0)
+ setfield(n,"shrink_order", shrink_order or 0)
+ end
+ getglue = function(n)
+ return
+ getfield(n,"width"), getfield(n,"stretch"), getfield(n,"shrink"),
+ getfield(n,"stretch_order"), getfield(n,"shrink_order")
end
-
end
-if not direct.mlist_to_hlist then
-
- local n_mlist_to_hlist = node.mlist_to_hlist
-
- function nuts.mlist_to_hlist(head)
- return tonode(n_mlist_to_hlist(tonut(head)))
- end
+nuts.is_zero_glue = is_zero_glue
+nuts.setglue = setglue
+nuts.getglue = getglue
-end
+-- if not direct.getpre then
+--
+-- local getfield = nuts.getfield
+--
+-- function direct.getpre (n) local h, _, _, t = getdisc(n,true) return h, t end
+-- function direct.getpost (n) local _, h, _, _, t = getdisc(n,true) return h, t end
+-- function direct.getreplace(n) local _, _, h, _, _, t = getdisc(n,true) return h, t end
--
+-- end
+
+----.getpre = direct.getpre
+----.getpost = direct.getpost
+----.getreplace = direct.getreplace
+
+nuts.getdisc = direct.getdisc
+nuts.setdisc = direct.setdisc
+nuts.setchar = direct.setchar
+nuts.setnext = direct.setnext
+nuts.setprev = direct.setprev
+nuts.setboth = direct.setboth
+nuts.getboth = direct.getboth
+nuts.setlink = direct.setlink
+nuts.setlist = direct.setlist
+nuts.setleader = direct.setleader
+nuts.setsubtype = direct.setsubtype
+
+nuts.is_char = direct.is_char
+nuts.ischar = direct.is_char
+nuts.is_glyph = direct.is_glyph
+nuts.isglyph = direct.is_glyph
local d_remove_node = direct.remove
local d_free_node = direct.free
@@ -254,8 +284,10 @@ local d_find_tail = direct.tail
local d_insert_after = direct.insert_after
local d_insert_before = direct.insert_before
local d_slide = direct.slide
-local d_copy_node = direct.copy
+----- d_copy_node = direct.copy
local d_traverse = direct.traverse
+local d_setlink = direct.setlink
+local d_setboth = direct.setboth
local function remove(head,current,free_too)
local t = current
@@ -266,41 +298,13 @@ local function remove(head,current,free_too)
d_free_node(t)
t = nil
else
- d_setfield(t,"next",nil) -- not that much needed (slows down unless we check the source on this)
- d_setfield(t,"prev",nil) -- not that much needed (slows down unless we check the source on this)
+ d_setboth(t) -- (t,nil,nil)
end
return head, current, t
end
-- bad: we can have prev's being glue_spec
--- local function remove(head,current,free_too) -- d_remove_node does a slide which can fail
--- local prev = d_getprev(current) -- weird
--- local next = d_getnext(current)
--- if next then
--- -- print("!!!!!!!! prev is gluespec",
--- -- nodes.nodecodes[d_getid(current)],
--- -- nodes.nodecodes[d_getid(next)],
--- -- nodes.nodecodes[d_getid(prev)])
--- d_setfield(prev,"next",next)
--- d_setfield(next,"prev",prev)
--- else
--- d_setfield(prev,"next",nil)
--- end
--- if free_too then
--- d_free_node(current)
--- current = nil
--- else
--- d_setfield(current,"next",nil) -- use this fact !
--- d_setfield(current,"prev",nil) -- use this fact !
--- end
--- if head == current then
--- return next, next, current
--- else
--- return head, next, current
--- end
--- end
-
nuts.remove = remove
function nuts.delete(head,current)
@@ -311,15 +315,12 @@ function nuts.replace(head,current,new) -- no head returned if false
if not new then
head, current, new = false, head, current
end
- local prev = d_getprev(current)
- local next = d_getnext(current)
+ local prev, next = d_getboth(current)
if next then
- d_setfield(new,"next",next)
- d_setfield(next,"prev",new)
+ d_setlink(new,next)
end
if prev then
- d_setfield(new,"prev",prev)
- d_setfield(prev,"next",new)
+ d_setlink(new,prev)
end
if head then
if head == current then
@@ -374,8 +375,7 @@ function nuts.linked(...)
local next = select(i,...)
if next then
if head then
- d_setfield(last,"next",next)
- d_setfield(next,"prev",last)
+ d_setlink(last,next)
else
head = next
end
@@ -391,8 +391,7 @@ function nuts.concat(list) -- consider tail instead of slide
local li = list[i]
if li then
if head then
- d_setfield(tail,"next",li)
- d_setfield(li,"prev",tail)
+ d_setlink(tail,li)
else
head = li
end
@@ -402,18 +401,6 @@ function nuts.concat(list) -- consider tail instead of slide
return head, tail
end
-function nuts.writable_spec(n) -- not pool
- local spec = d_getfield(n,"spec")
- if not spec then
- spec = d_copy_node(glue_spec)
- d_setfield(n,"spec",spec)
- elseif not d_getfield(spec,"writable") then
- spec = d_copy_node(spec)
- d_setfield(n,"spec",spec)
- end
- return spec
-end
-
function nuts.reference(n)
return n or "<none>"
end
@@ -432,24 +419,6 @@ function nodes.vianodes(f) return function(n,...) return tonut (f(tonode(n),...)
nuts.vianuts = nodes.vianuts
nuts.vianodes = nodes.vianodes
--- for k, v in next, nuts do
--- if type(v) == "function" then
--- if not string.find(k,"^[sg]et") and not string.find(k,"^to") then
--- local f = v
--- nuts[k] = function(...) print("d",k,...) return f(...) end
--- end
--- end
--- end
-
--- for k, v in next, nodes do
--- if type(v) == "function" then
--- if not string.find(k,"^[sg]et") and not string.find(k,"^to") then
--- local f = v
--- nodes[k] = function(...) print("n",k,...) return f(...) end
--- end
--- end
--- end
-
-- function nodes.insert_before(h,c,n)
-- if c then
-- if c == h then
@@ -491,6 +460,7 @@ function nodes.insert_list_after(h,c,n)
if c then
local cn = n_getnext(c)
if cn then
+ -- no setboth here yet
n_setfield(t,"next",cn)
n_setfield(cn,"prev",t)
else
@@ -506,17 +476,17 @@ end
-- function nuts.insert_before(h,c,n)
-- if c then
-- if c == h then
--- d_setfield(n,"next",h)
--- d_setfield(n,"prev",nil)
--- d_setfield(h,"prev",n)
+-- d_setnext(n,h)
+-- d_setprev(n)
+-- d_setprev(h,n)
-- else
-- local cp = d_getprev(c)
--- d_setfield(n,"next",c)
--- d_setfield(n,"prev",cp)
+-- d_setnext(n,c)
+-- d_setprev(n,cp)
-- if cp then
--- d_setfield(cp,"next",n)
+-- d_setnext(cp,n)
-- end
--- d_setfield(c,"prev",n)
+-- d_setprev(c,n)
-- return h, n
-- end
-- end
@@ -527,13 +497,11 @@ end
-- if c then
-- local cn = d_getnext(c)
-- if cn then
--- d_setfield(n,"next",cn)
--- d_setfield(cn,"prev",n)
+-- d_setlink(n,cn)
-- else
--- d_setfield(n,"next",nil)
+-- d_setnext(n,nil)
-- end
--- d_setfield(c,"next",n)
--- d_setfield(n,"prev",c)
+-- d_setlink(c,n)
-- return h, n
-- end
-- return n, n
@@ -544,13 +512,11 @@ function nuts.insert_list_after(h,c,n)
if c then
local cn = d_getnext(c)
if cn then
- d_setfield(t,"next",cn)
- d_setfield(cn,"prev",t)
+ d_setlink(t,cn)
else
- d_setfield(t,"next",nil)
+ d_setnext(t)
end
- d_setfield(c,"next",n)
- d_setfield(n,"prev",c)
+ d_setlink(c,n)
return h, n
end
return n, t
@@ -674,57 +640,57 @@ local propertydata = direct.get_properties_table and direct.get_properties_table
local getattr = nuts.getattr
local setattr = nuts.setattr
-if propertydata then
-
- nodes.properties = {
- data = propertydata,
- }
+nodes.properties = {
+ data = propertydata,
+}
- -- direct.set_properties_mode(true,false) -- shallow copy ... problem: in fonts we then affect the originals too
- direct.set_properties_mode(true,true) -- create metatable, slower but needed for font-inj.lua (unless we use an intermediate table)
+------.set_properties_mode(true,false) -- shallow copy ... problem: in fonts we then affect the originals too
+direct.set_properties_mode(true,true) -- create metatable, slower but needed for font-inj.lua (unless we use an intermediate table)
- -- todo:
- --
- -- function direct.set_properties_mode()
- -- -- we really need the set modes
- -- end
+-- todo:
+--
+-- function direct.set_properties_mode()
+-- -- we really need the set modes
+-- end
- -- experimental code with respect to copying attributes has been removed
- -- as it doesn't pay of (most attributes are only accessed once anyway)
+-- experimental code with respect to copying attributes has been removed
+-- as it doesn't pay of (most attributes are only accessed once anyway)
- nuts.getprop = function(n,k)
- local p = propertydata[n]
- if p then
- return p[k]
- end
+nuts.getprop = function(n,k)
+ local p = propertydata[n]
+ if p then
+ return p[k]
end
+end
- nuts.setprop = function(n,k,v)
- if v then
- local p = propertydata[n]
- if p then
- p[k] = v
- else
- propertydata[n] = { [k] = v }
- end
- end
+nuts.rawprop = function(n,k)
+ local p = rawget(propertydata,n)
+ if p then
+ return p[k]
end
+end
- nodes.setprop = nodes.setproperty
- nodes.getprop = nodes.getproperty
-
-else
-
- -- for testing and simple cases
-
- nuts.getprop = getattr
- nuts.setprop = setattr
-
- nodes.setprop = getattr
- nodes.getprop = setattr
+nuts.setprop = function(n,k,v)
+ local p = propertydata[n]
+ if p then
+ p[k] = v
+ else
+ propertydata[n] = { [k] = v }
+ end
+end
+nuts.theprop = function(n)
+ local p = propertydata[n]
+ if not p then
+ p = { }
+ propertydata[n] = p
+ end
+ return p
end
+nodes.setprop = nodes.setproperty
+nodes.getprop = nodes.getproperty
+
function nuts.copy_properties(source,target,what)
local newprops = propertydata[source]
if not newprops then
@@ -765,26 +731,29 @@ nodes.whatsitters = {
setters = { width = setwidth, dimensions = setdimensions },
}
--- this might move (in fact forms and images will become nodes)
-
-local function get_width(n,dir)
- n = tonut(n)
- return getfield(n,"width")
-end
-
-local function get_dimensions(n,dir)
- n = tonut(n)
- return getfield(n,"width"), getfield(n,"height"), getfield(n,"depth")
-end
-
-local whatcodes = nodes.whatcodes
-local pdfrefximage_code = whatcodes.pdfrefximage
-local pdfrefxform_code = whatcodes.pdfrefxform
-
-getwidth [pdfrefximage_code] = get_width
-getwidth [pdfrefxform_code ] = get_width
-
-getdimensions[pdfrefximage_code] = get_dimensions
-getdimensions[pdfrefxform_code ] = get_dimensions
+-- obsolete
+-- local function get_width(n,dir)
+-- n = tonut(n)
+-- return getfield(n,"width")
+-- end
+--
+-- local function get_dimensions(n,dir)
+-- n = tonut(n)
+-- return getfield(n,"width"), getfield(n,"height"), getfield(n,"depth")
+-- end
+--
+-- local whatcodes = nodes.whatcodes
+-- local pdfrefximage_code = whatcodes.pdfrefximage
+-- local pdfrefxform_code = whatcodes.pdfrefxform
+--
+-- if pdfrefxform_code then
+-- getwidth [pdfrefxform_code ] = get_width
+-- getdimensions[pdfrefxform_code ] = get_dimensions
+-- end
+--
+-- if pdfrefximage_code then
+-- getwidth [pdfrefximage_code] = get_width
+-- getdimensions[pdfrefximage_code] = get_dimensions
+-- end
diff --git a/Master/texmf-dist/tex/context/base/node-pag.lua b/Master/texmf-dist/tex/context/base/mkiv/node-pag.lua
index 9b8202042c5..9b8202042c5 100644
--- a/Master/texmf-dist/tex/context/base/node-pag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-pag.lua
diff --git a/Master/texmf-dist/tex/context/base/node-pag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-pag.mkiv
index b8ed197fe64..b8ed197fe64 100644
--- a/Master/texmf-dist/tex/context/base/node-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-pag.mkiv
diff --git a/Master/texmf-dist/tex/context/base/node-ppt.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ppt.lua
index 5e7abeaae79..2573e5f5cea 100644
--- a/Master/texmf-dist/tex/context/base/node-ppt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ppt.lua
@@ -29,6 +29,7 @@ local getsubtype = nuts.getsubtype
local getfield = nuts.getfield
local setfield = nuts.setfield
local getlist = nuts.getlist
+local setlist = nuts.setlist
local flushnode = nuts.flush
local removenode = nuts.remove
local traverse = nuts.traverse
@@ -41,7 +42,6 @@ local whatsit_code = nodecodes.whatsit
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local userdefined_code = whatsitcodes.userdefined
-local localpar_code = whatsitcodes.localpar
local nodepool = nodes.pool
local new_usernumber = nodepool.usernumber
@@ -254,7 +254,7 @@ local function delayed(head,parent) -- direct based
if list then
local done = delayed(list,parent)
if done then
- setfield(target,"list",done)
+ setlist(target,done)
end
if nofdelayed == 0 then
return head
@@ -302,8 +302,6 @@ local anchored = {
local subtype = getsubtype(n)
if (subtype == userdefined_code and getfield(n,"user_id") == property_id) then
-- continue
- elseif subtype == localpar_code then
- -- continue .. can't happen anyway as we cannot write
else
return n
end
diff --git a/Master/texmf-dist/tex/context/base/node-pro.lua b/Master/texmf-dist/tex/context/base/mkiv/node-pro.lua
index 27e349893b6..36670eed2f9 100644
--- a/Master/texmf-dist/tex/context/base/node-pro.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-pro.lua
@@ -9,7 +9,8 @@ if not modules then modules = { } end modules ['node-pro'] = {
local utfchar = utf.char
local format, concat = string.format, table.concat
-local trace_callbacks = false trackers.register("nodes.callbacks", function(v) trace_callbacks = v end)
+local trace_callbacks = false trackers .register("nodes.callbacks", function(v) trace_callbacks = v end)
+local force_processors = false directives.register("nodes.processors.force", function(v) force_processors = v end)
local report_nodes = logs.reporter("nodes","processors")
@@ -34,8 +35,7 @@ local actions = tasks.actions("processors")
do
local tonut = nuts.tonut
- local getid = nuts.getid
- local getchar = nuts.getchar
+ local isglyph = nuts.isglyph
local getnext = nuts.getnext
local n = 0
@@ -44,9 +44,9 @@ do
local t, n, h = { }, 0, tonut(head)
while h do
n = n + 1
- local id = getid(h)
- if id == glyph_code then -- todo: disc etc
- t[n] = utfchar(getchar(h))
+ local char, id = isglyph(h)
+ if char then -- todo: disc etc
+ t[n] = utfchar(char)
else
t[n] = "[]"
end
@@ -77,7 +77,7 @@ processors.enabled = true -- this will become a proper state (like trackers)
function processors.pre_linebreak_filter(head,groupcode) -- ,size,packtype,direction
-- local first, found = first_glyph(head) -- they really need to be glyphs
- local found = has_glyph(head)
+ local found = force_processors or has_glyph(head)
if found then
if trace_callbacks then
local before = nodes.count(head,true)
@@ -100,46 +100,46 @@ function processors.pre_linebreak_filter(head,groupcode) -- ,size,packtype,direc
return true
end
-local enabled = true
-
-function processors.hpack_filter(head,groupcode,size,packtype,direction)
- if enabled then
- -- local first, found = first_glyph(head) -- they really need to be glyphs
- local found = has_glyph(head)
- if found then
- if trace_callbacks then
- local before = nodes.count(head,true)
- local head, done = actions(head,groupcode,size,packtype,direction)
- local after = nodes.count(head,true)
- if done then
- tracer("hpack","changed",head,groupcode,before,after,true)
- else
- tracer("hpack","unchanged",head,groupcode,before,after,true)
- end
- return done and head or true
+local function hpack_filter(head,groupcode,size,packtype,direction,attributes)
+ -- local first, found = first_glyph(head) -- they really need to be glyphs
+ local found = force_processors or has_glyph(head)
+ if found then
+ if trace_callbacks then
+ local before = nodes.count(head,true)
+ local head, done = actions(head,groupcode,size,packtype,direction,attributes)
+ local after = nodes.count(head,true)
+ if done then
+ tracer("hpack","changed",head,groupcode,before,after,true)
else
- local head, done = actions(head,groupcode,size,packtype,direction)
- return done and head or true
+ tracer("hpack","unchanged",head,groupcode,before,after,true)
end
- elseif trace_callbacks then
- local n = nodes.count(head,false)
- tracer("hpack","no chars",head,groupcode,n,n)
+ return done and head or true
+ else
+ local head, done = actions(head,groupcode,size,packtype,direction,attributes)
+ return done and head or true
end
+ elseif trace_callbacks then
+ local n = nodes.count(head,false)
+ tracer("hpack","no chars",head,groupcode,n,n)
end
return true
end
+processors.hpack_filter = hpack_filter
+
do
local setfield = nodes.setfield
local hpack = nodes.hpack
- function nodes.fasthpack(...) -- todo: pass explicit arguments
- enabled = false
- local hp, b = hpack(...)
+ function nodes.fullhpack(head,...)
+ local ok = hpack_filter(head)
+ if not done or done == true then
+ ok = head
+ end
+ local hp, b = hpack(ok,...)
setfield(hp,"prev",nil)
setfield(hp,"next",nil)
- enabled = true
return hp, b
end
@@ -147,15 +147,18 @@ end
do
- local setfield = nuts.setfield
- local hpack = nuts.hpack
+ local setboth = nuts.setboth
+ local hpack = nuts.hpack
- function nuts.fasthpack(...) -- todo: pass explicit arguments
- enabled = false
+ function nuts.fullhpack(head,...)
+ local ok = hpack_filter(tonode(head))
+ if not done or done == true then
+ ok = head
+ else
+ ok = tonut(ok)
+ end
local hp, b = hpack(...)
- setfield(hp,"prev",nil)
- setfield(hp,"next",nil)
- enabled = true
+ setboth(hp)
return hp, b
end
diff --git a/Master/texmf-dist/tex/context/base/node-ref.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ref.lua
index 97c37c74e40..9f2d0918c0f 100644
--- a/Master/texmf-dist/tex/context/base/node-ref.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ref.lua
@@ -52,10 +52,14 @@ local tonut = nuts.tonut
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setprev = nuts.setprev
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getlist = nuts.getlist
+local setlist = nuts.setlist
local getattr = nuts.getattr
local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
@@ -68,7 +72,6 @@ local find_node_tail = nuts.tail
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
-local whatcodes = nodes.whatcodes
local listcodes = nodes.listcodes
local hlist_code = nodecodes.hlist
@@ -76,15 +79,13 @@ local vlist_code = nodecodes.vlist
local glue_code = nodecodes.glue
local glyph_code = nodecodes.glyph
local rule_code = nodecodes.rule
-local whatsit_code = nodecodes.whatsit
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
local leftskip_code = skipcodes.leftskip
local rightskip_code = skipcodes.rightskip
local parfillskip_code = skipcodes.parfillskip
-local localpar_code = whatcodes.localpar
-local dir_code = whatcodes.dir
-
local line_code = listcodes.line
local new_rule = nodepool.rule
@@ -97,44 +98,52 @@ local tosequence = nodes.tosequence
local implement = interfaces.implement
-- Normally a (destination) area is a box or a simple stretch if nodes but when it is
--- a paragraph we hav ea problem: we cannot calculate the height well. This happens
+-- a paragraph we have a problem: we cannot calculate the height well. This happens
-- with footnotes or content broken across a page.
-local function vlist_dimensions(start,stop)
+local function hlist_dimensions(start,stop,parent)
+ local last = stop and getnext(stop)
+ if parent then
+ return list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),start,last)
+ else
+ return list_dimensions(start,last)
+ end
+end
+
+local function vlist_dimensions(start,stop) -- also needs the stretch and so
local temp
if stop then
temp = getnext(stop)
- setfield(stop,"next",nil)
+ setnext(stop,nil)
end
local v = vpack_list(start)
local w = getfield(v,"width")
local h = getfield(v,"height")
local d = getfield(v,"depth")
- setfield(v,"list",nil)
+ setlist(v) -- not needed
free_node(v)
if temp then
- setfield(stop,"next",temp)
+ setnext(stop,temp)
end
return w, h, d
end
-local function hlist_dimensions(start,stop,parent)
- local last = stop and getnext(stop)
- if parent then
- return list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),start,last)
- else
- return list_dimensions(start,last)
- end
-end
-
local function dimensions(parent,start,stop) -- in principle we could move some to the caller
local id = getid(start)
if start == stop then
- if id == hlist_code or id == vlist_code or id == glyph_code or id == rule_code then -- or image
+ if id == hlist_code or id == vlist_code or id == glyph_code or id == rule_code then
if trace_areas then
report_area("dimensions taken of %a",nodecodes[id])
end
- return getfield(start,"width"), getfield(parent,"height"), getfield(parent,"depth")
+ -- hm, parent can be zero
+ local width = getfield(start,"width")
+ local height = getfield(parent,"height")
+ local depth = getfield(parent,"depth")
+ if height == 0 and depth == 0 then
+ height = getfield(start,"height")
+ depth = getfield(start,"depth")
+ end
+ return width, height, depth
else
if trace_areas then
report_area("dimensions calculated of %a",nodecodes[id])
@@ -147,29 +156,77 @@ local function dimensions(parent,start,stop) -- in principle we could move some
-- todo: if no prev and no next and parent
-- todo: we need a a list_dimensions for a vlist
if getid(parent) == vlist_code then
- local l = getlist(parent)
- local c = l
- local ok = false
- while c do
- if c == start then
- ok = true
+ if false then
+ local l = getlist(parent)
+ local c = l
+ local ok = false
+ while c do
+ if c == start then
+ ok = true
+ end
+ if ok and getid(c) == hlist_code then
+ break
+ else
+ c = getnext(c)
+ end
end
- if ok and getid(c) == hlist_code then
- break
+ if ok and c then
+ if trace_areas then
+ report_area("dimensions taken of first line in vlist")
+ end
+ return getfield(c,"width"), getfield(c,"height"), getfield(c,"depth"), c
else
- c = getnext(c)
- end
- end
- if ok and c then
- if trace_areas then
- report_area("dimensions taken of first line in vlist")
+ if trace_areas then
+ report_area("dimensions taken of vlist (probably wrong)")
+ end
+ return hlist_dimensions(start,stop,parent)
end
- return getfield(c,"width"), getfield(c,"height"), getfield(c,"depth"), c
else
- if trace_areas then
- report_area("dimensions taken of vlist (probably wrong)")
+ --
+ -- we can as well calculate here because we only have kerns and glue
+ --
+ local first = nil
+ local last = nil
+ local current = start
+ local noflines = 0
+ while current do
+ local id = getid(current)
+ if id == hlist_code or id == vlist_code or id == rule_code then
+ if noflines == 0 then
+ first = current
+ noflines = 1
+ else
+ noflines = noflines + 1
+ end
+ last = current
+ end
+ if current == stop then
+ break
+ else
+ current = getnext(current)
+ end
+ end
+ if noflines > 1 then
+ if trace_areas then
+ report_area("dimensions taken of vlist")
+ end
+ local w, h, d = vlist_dimensions(first,last,parent)
+ local ht = getfield(first,"height")
+ return w, ht, d + h - ht, first
+ else
+ -- return hlist_dimensions(start,stop,parent)
+ if first then
+ if trace_areas then
+ report_area("dimensions taken of first line in vlist")
+ end
+ return getfield(first,"width"), getfield(first,"height"), getfield(first,"depth"), first
+ else
+ if trace_areas then
+ report_area("dimensions taken of vlist (probably wrong)")
+ end
+ return hlist_dimensions(start,stop,parent)
+ end
end
- return hlist_dimensions(start,stop,parent)
end
else
if trace_areas then
@@ -198,37 +255,33 @@ local function inject_range(head,first,last,reference,make,stack,parent,pardir,t
-- special case, we only treat the first line in a vlist
local l = getlist(line)
if trace_areas then
- report_area("%s: %04i %s %s %s => w=%p, h=%p, d=%p, c=%S","line",
- reference,pardir or "---",txtdir or "---",tosequence(l,nil,true),width,height,depth,resolved)
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p, c=%S","line",
+ reference,pardir or "---",txtdir or "---",
+ tosequence(l,nil,true),width,height,depth,resolved)
end
- setfield(line,"list",result)
- setfield(result,"next",l)
- setfield(l,"prev",result)
+ setlist(line,result)
+ setlink(result,l)
return head, last
else
if head == first then
if trace_areas then
- report_area("%s: %04i %s %s %s => w=%p, h=%p, d=%p, c=%S","head",
- reference,pardir or "---",txtdir or "---",tosequence(first,last,true),width,height,depth,resolved)
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p, c=%S","head",
+ reference,pardir or "---",txtdir or "---",
+ tosequence(first,last,true),width,height,depth,resolved)
end
- setfield(result,"next",first)
- setfield(first,"prev",result)
+ setlink(result,first)
return result, last
else
if trace_areas then
- report_area("%s: %04i %s %s %s => w=%p, h=%p, d=%p, c=%S","middle",
- reference,pardir or "---",txtdir or "---",tosequence(first,last,true),width,height,depth,resolved)
+ report_area("%s: %i : %s %s %s => w=%p, h=%p, d=%p, c=%S","middle",
+ reference,pardir or "---",txtdir or "---",
+ tosequence(first,last,true),width,height,depth,resolved)
end
local prev = getprev(first)
if prev then
- setfield(prev,"next",result)
- setfield(result,"prev",prev)
+ setlink(prev,result)
end
- setfield(result,"next",first)
- setfield(first,"prev",result)
- -- if first == getnext(head) then
- -- setfield(head,"next",result) -- hm, weird
- -- end
+ setlink(result,first)
return head, last
end
end
@@ -257,12 +310,10 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
if prev and getid(prev) == glue_code and getsubtype(prev) == parfillskip_code then
width = dimensions(current,first,getprev(prev)) -- maybe not current as we already take care of it
else
- if moveright and getfield(first,"writable") then
- width = width - getfield(getfield(first,"spec"),"stretch") * getfield(current,"glue_set") * getfield(current,"glue_sign")
- end
- if getfield(last,"writable") then
- width = width - getfield(getfield(last,"spec"),"stretch") * getfield(current,"glue_set") * getfield(current,"glue_sign")
+ if moveright then
+ width = width - getfield(first,"stretch") * getfield(current,"glue_set") * getfield(current,"glue_sign")
end
+ width = width - getfield(last,"stretch") * getfield(current,"glue_set") * getfield(current,"glue_sign")
end
end
else
@@ -287,27 +338,31 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
reference,pardir or "---",txtdir or "----","[]",width,height,depth,resolved)
end
if not first then
- setfield(current,"list",result)
+ setlist(current,result)
elseif moveright then -- brr no prevs done
-- result after first
local n = getnext(first)
- setfield(result,"next",n)
- setfield(first,"next",result)
- setfield(result,"prev",first)
+ setnext(result,n)
+ setlink(first,first)
if n then
- setfield(n,"prev",result)
+ setprev(n,result)
end
else
-- first after result
- setfield(result,"next",first)
- setfield(first,"prev",result)
- setfield(current,"list",result)
+ setlink(result,first)
+ setlist(current,result)
end
end
end
-- skip is somewhat messy
+-- todo: when line we can look at the next line
+
+-- see dimensions: this is tricky with split off boxes like inserts
+-- where we can end up with a first and last spanning lines so maybe
+-- we need to do vlists differently
+
local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,txtdir) -- main
if head then
local current, first, last, firstdir, reference = head, nil, nil, nil, nil
@@ -316,10 +371,6 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx
while current do
local id = getid(current)
if id == hlist_code or id == vlist_code then
-
- -- see dimensions: this is tricky with split off boxes like inserts
- -- where we can end up with a first and last spanning lines
-
local r = getattr(current,attribute)
-- test \goto{test}[page(2)] test \gotobox{test}[page(2)]
-- test \goto{\TeX}[page(2)] test \gotobox{\hbox {x} \hbox {x}}[page(2)]
@@ -346,18 +397,17 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx
if list then
local h, ok
h, ok , pardir, txtdir = inject_areas(list,attribute,make,stack,done,r or skip or 0,current,pardir,txtdir)
- setfield(current,"list",h)
+ if h ~= current then
+ setlist(current,h)
+ end
end
if r then
done[r] = done[r] - 1
end
- elseif id == whatsit_code then
- local subtype = getsubtype(current)
- if subtype == localpar_code then
- pardir = getfield(current,"dir")
- elseif subtype == dir_code then
- txtdir = getfield(current,"dir")
- end
+ elseif id == dir_code then
+ txtdir = getfield(current,"dir")
+ elseif id == localpar_code then
+ pardir = getfield(current,"dir")
elseif id == glue_code and getsubtype(current) == leftskip_code then -- any glue at the left?
--
else
@@ -401,15 +451,15 @@ local function inject_area(head,attribute,make,stack,done,parent,pardir,txtdir)
end
local list = getlist(current)
if list then
- setfield(current,"list",(inject_area(list,attribute,make,stack,done,current,pardir,txtdir)))
- end
- elseif id == whatsit_code then
- local subtype = getsubtype(current)
- if subtype == localpar_code then
- pardir = getfield(current,"dir")
- elseif subtype == dir_code then
- txtdir = getfield(current,"dir")
+ local h = inject_area(list,attribute,make,stack,done,current,pardir,txtdir)
+ if h ~= current then
+ setlist(current,h)
+ end
end
+ elseif id == dir_code then
+ txtdir = getfield(current,"dir")
+ elseif id == localpar_code then
+ pardir = getfield(current,"dir")
else
local r = getattr(current,attribute)
if r and not done[r] then
@@ -449,12 +499,10 @@ local function addstring(what,str,shift) --todo make a pluggable helper (in font
str = str .. " "
shift = (shift or 2) * exheight
end
- local text = typesetters.fast_hpack(str,infofont)
+ local text = typesetters.tohpack(str,infofont)
local rule = new_rule(emwidth/5,4*exheight,3*exheight)
setfield(text,"shift",shift)
- return nuts.fasthpack(nuts.linked(text,rule))
- -- local text = typesetters.fast_hpack(str,fonts.infofont())
- -- return text
+ return hpack_list(nuts.linked(text,rule))
end
end
end
@@ -493,8 +541,8 @@ local function colorize(width,height,depth,n,reference,what,sr,offset)
if width < 0 then
local kern = new_kern(width)
setfield(rule,"width",-width)
- setfield(kern,"next",rule)
- setfield(rule,"prev",kern)
+ setnext(kern,rule)
+ setprev(rule,kern)
return kern
else
@@ -502,10 +550,8 @@ if sr and sr ~= "" then
local text = addstring(what,sr,shift)
if text then
local kern = new_kern(-getfield(text,"width"))
- setfield(kern,"next",text)
- setfield(text,"prev",kern)
- setfield(text,"next",rule)
- setfield(rule,"prev",text)
+ setlink(kern,text)
+ setlink(text,rule)
return kern
end
end
@@ -519,10 +565,8 @@ local function justadd(what,sr,shift)
local text = addstring(what,sr,shift)
if text then
local kern = new_kern(-getfield(text,"width"))
- setfield(kern,"next",text)
- setfield(text,"prev",kern)
- setfield(text,"next",rule)
- setfield(rule,"prev",text)
+ setlink(kern,text)
+ setlink(text,rule)
return kern
end
end
@@ -609,8 +653,7 @@ local function makereference(width,height,depth,reference) -- height and depth a
end
end
if current then
- setfield(current,"next",annot)
- setfield(annot,"prev",current)
+ setlink(current,annot)
else
result = annot
end
@@ -720,8 +763,7 @@ local function makedestination(width,height,depth,reference)
if not result then
result, current = rule, rule
else
- setfield(current,"next",rule)
- setfield(rule,"prev",current)
+ setlink(current,rule)
current = rule
end
width, height = width - step, height - step
@@ -740,8 +782,7 @@ local function makedestination(width,height,depth,reference)
if annot then
annot = tonut(annot) -- obsolete soon
if result then
- setfield(current,"next",annot)
- setfield(annot,"prev",current)
+ setlink(current,annot)
else
result = annot
end
@@ -787,12 +828,10 @@ function references.mark(reference,h,d,view)
end
function references.inject(prefix,reference,specification) -- todo: use currentreference is possible
--- print(prefix,reference,h,d,highlight,newwindow,layer)
local set, bug = references.identify(prefix,reference)
if bug or #set == 0 then
-- unknown ref, just don't set it and issue an error
else
- -- check
set.highlight = specification.highlight
set.newwindow = specification.newwindow
set.layer = specification.layer
@@ -800,6 +839,20 @@ function references.inject(prefix,reference,specification) -- todo: use currentr
end
end
+-- function references.injectinternal(internal,specification)
+-- references.inject("","internal("..internal..")",specification)
+-- if bug or #set == 0 then
+-- -- unknown ref, just don't set it and issue an error
+-- else
+-- -- nil prefix when ""
+-- -- check
+-- set.highlight = specification.highlight
+-- set.newwindow = specification.newwindow
+-- set.layer = specification.layer
+-- setreference(specification.height,specification.depth,set) -- sets attribute / todo: for set[*].error
+-- end
+-- end
+
function references.injectcurrentset(h,d) -- used inside doifelse
local currentset = references.currentset
if currentset then
@@ -819,10 +872,27 @@ implement {
{ "layer" },
{ "height", "dimen" },
{ "depth", "dimen" },
+ { "view" },
}
}
}
+-- implement {
+-- name = "injectinternalreference",
+-- actions = references.injectinternal,
+-- arguments = {
+-- "integer",
+-- {
+-- { "highlight", "boolean" },
+-- { "newwindow", "boolean" },
+-- { "layer" },
+-- { "height", "dimen" },
+-- { "depth", "dimen" },
+-- { "view" },
+-- }
+-- }
+-- }
+
implement {
name = "injectcurrentreference",
actions = references.injectcurrentset,
diff --git a/Master/texmf-dist/tex/context/base/node-res.lua b/Master/texmf-dist/tex/context/base/mkiv/node-res.lua
index 43dd3895ed6..4d25314ad85 100644
--- a/Master/texmf-dist/tex/context/base/node-res.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-res.lua
@@ -18,19 +18,21 @@ local report_nodes = logs.reporter("nodes","housekeeping")
local nodes, node = nodes, node
-nodes.pool = nodes.pool or { }
-local nodepool = nodes.pool
+nodes.pool = nodes.pool or { }
+local nodepool = nodes.pool
-local whatsitcodes = nodes.whatsitcodes
-local skipcodes = nodes.skipcodes
-local kerncodes = nodes.kerncodes
-local nodecodes = nodes.nodecodes
+local whatsitcodes = nodes.whatsitcodes
+local skipcodes = nodes.skipcodes
+local kerncodes = nodes.kerncodes
+local rulecodes = nodes.rulecodes
+local nodecodes = nodes.nodecodes
+local boundarycodes = nodes.boundarycodes
-local glyph_code = nodecodes.glyph
+local glyph_code = nodecodes.glyph
-local allocate = utilities.storage.allocate
+local allocate = utilities.storage.allocate
-local texgetcount = tex.getcount
+local texgetcount = tex.getcount
local reserved, nofreserved = { }, 0
@@ -58,25 +60,28 @@ setmetatable(userids, {
-- nuts overload
-local nuts = nodes.nuts
-local nutpool = { }
-nuts.pool = nutpool
+local nuts = nodes.nuts
+local nutpool = { }
+nuts.pool = nutpool
-local tonut = nuts.tonut
-local tonode = nuts.tonode
+local tonut = nuts.tonut
+local tonode = nuts.tonode
-local getbox = nuts.getbox
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getid = nuts.getid
-local getlist = nuts.getlist
+local getbox = nuts.getbox
+local getfield = nuts.getfield
+local getid = nuts.getid
+local getlist = nuts.getlist
-local copy_nut = nuts.copy
-local new_nut = nuts.new
-local free_nut = nuts.free
+local setfield = nuts.setfield
+local setchar = nuts.setchar
+local setlist = nuts.setlist
-local copy_node = nodes.copy
-local new_node = nodes.new
+local copy_nut = nuts.copy
+local new_nut = nuts.new
+local free_nut = nuts.free
+
+local copy_node = nodes.copy
+local new_node = nodes.new
-- at some point we could have a dual set (the overhead of tonut is not much larger than
-- metatable associations at the lua/c end esp if we also take assignments into account
@@ -135,11 +140,14 @@ nutpool.register = register_node -- could be register_nut
local disc = register_nut(new_nut("disc"))
local kern = register_nut(new_nut("kern",kerncodes.userkern))
local fontkern = register_nut(new_nut("kern",kerncodes.fontkern))
+local italickern = register_nut(new_nut("kern",kerncodes.italiccorrection))
local penalty = register_nut(new_nut("penalty"))
local glue = register_nut(new_nut("glue")) -- glue.spec = nil
local glue_spec = register_nut(new_nut("glue_spec"))
local glyph = register_nut(new_nut("glyph",0))
-local textdir = register_nut(new_nut("whatsit",whatsitcodes.dir))
+
+local textdir = register_nut(new_nut("dir"))
+
local latelua = register_nut(new_nut("whatsit",whatsitcodes.latelua))
local special = register_nut(new_nut("whatsit",whatsitcodes.special))
local user_n = register_nut(new_nut("whatsit",whatsitcodes.userdefined)) setfield(user_n,"type",100) -- 44
@@ -147,47 +155,79 @@ local user_l = register_nut(new_nut("whatsit",whatsitcodes.userdefine
local user_s = register_nut(new_nut("whatsit",whatsitcodes.userdefined)) setfield(user_s,"type",115) -- 44
local user_t = register_nut(new_nut("whatsit",whatsitcodes.userdefined)) setfield(user_t,"type",116) -- 44
----- user_c = register_nut(new_nut("whatsit",whatsitcodes.userdefined)) setfield(user_c,"type",108) -- 44
+
local left_margin_kern = register_nut(new_nut("margin_kern",0))
local right_margin_kern = register_nut(new_nut("margin_kern",1))
+
local lineskip = register_nut(new_nut("glue",skipcodes.lineskip))
local baselineskip = register_nut(new_nut("glue",skipcodes.baselineskip))
local leftskip = register_nut(new_nut("glue",skipcodes.leftskip))
local rightskip = register_nut(new_nut("glue",skipcodes.rightskip))
+
local temp = register_nut(new_nut("temp",0))
+
local noad = register_nut(new_nut("noad"))
+local boundary = register_nut(new_nut("boundary",boundarycodes.user))
+local wordboundary = register_nut(new_nut("boundary",boundarycodes.word))
+
-- the dir field needs to be set otherwise crash:
-local rule = register_nut(new_nut("rule")) setfield(rule, "dir","TLT")
-local hlist = register_nut(new_nut("hlist")) setfield(hlist,"dir","TLT")
-local vlist = register_nut(new_nut("vlist")) setfield(vlist,"dir","TLT")
+local rule = register_nut(new_nut("rule")) setfield(rule, "dir","TLT")
+local emptyrule = register_nut(new_nut("rule",rulecodes.empty)) setfield(rule, "dir","TLT")
+local userrule = register_nut(new_nut("rule",rulecodes.user)) setfield(rule, "dir","TLT")
+local hlist = register_nut(new_nut("hlist")) setfield(hlist,"dir","TLT")
+local vlist = register_nut(new_nut("vlist")) setfield(vlist,"dir","TLT")
function nutpool.zeroglue(n)
- local s = getfield(n,"spec")
- return
- getfield(s,"width") == 0 and
- getfield(s,"stretch") == 0 and
- getfield(s,"shrink") == 0 and
- getfield(s,"stretch_order") == 0 and
- getfield(s,"shrink_order") == 0
+ if n then
+ return
+ getfield(n,"width") == 0 and
+ getfield(n,"stretch") == 0 and
+ getfield(n,"shrink") == 0 and
+ getfield(n,"stretch_order") == 0 and
+ getfield(n,"shrink_order") == 0
+ else
+ return false
+ end
end
function nutpool.glyph(fnt,chr)
local n = copy_nut(glyph)
if fnt then setfield(n,"font",fnt) end
- if chr then setfield(n,"char",chr) end
+ if chr then setchar(n,chr) end
return n
end
function nutpool.penalty(p)
local n = copy_nut(penalty)
- setfield(n,"penalty",p)
+ if p and p ~= 0 then
+ setfield(n,"penalty",p)
+ end
return n
end
function nutpool.kern(k)
local n = copy_nut(kern)
- setfield(n,"kern",k)
+ if k and k ~= 0 then
+ setfield(n,"kern",k)
+ end
+ return n
+end
+
+function nutpool.boundary(v)
+ local n = copy_nut(boundary)
+ if v and v ~= 0 then
+ setfield(n,"value",v)
+ end
+ return n
+end
+
+function nutpool.wordboundary(v)
+ local n = copy_nut(wordboundary)
+ if v and v ~= 0 then
+ setfield(n,"value",v)
+ end
return n
end
@@ -197,60 +237,75 @@ function nutpool.fontkern(k)
return n
end
+function nutpool.italickern(k)
+ local n = copy_nut(italickern)
+ if k and k ~= 0 then
+ setfield(n,"kern",k)
+ end
+ return n
+end
+
function nutpool.gluespec(width,stretch,shrink,stretch_order,shrink_order)
local s = copy_nut(glue_spec)
- if width then setfield(s,"width",width) end
- if stretch then setfield(s,"stretch",stretch) end
- if shrink then setfield(s,"shrink",shrink) end
- if stretch_order then setfield(s,"stretch_order",stretch_order) end
- if shrink_order then setfield(s,"shrink_order",shrink_order) end
+ if width and width ~= 0 then
+ setfield(s,"width",width)
+ end
+ if stretch and stretch ~= 0 then
+ setfield(s,"stretch",stretch)
+ end
+ if shrink and shrink ~= 0 then
+ setfield(s,"shrink",shrink)
+ end
+ if stretch_order and stretch_order ~= 0 then
+ setfield(s,"stretch_order",stretch_order)
+ end
+ if shrink_order and shrink_order ~= 0 then
+ setfield(s,"shrink_order",shrink_order)
+ end
return s
end
local function someskip(skip,width,stretch,shrink,stretch_order,shrink_order)
local n = copy_nut(skip)
- if not width then
- -- no spec
- elseif width == false or tonumber(width) then
- local s = copy_nut(glue_spec)
- if width then setfield(s,"width",width) end
- if stretch then setfield(s,"stretch",stretch) end
- if shrink then setfield(s,"shrink",shrink) end
- if stretch_order then setfield(s,"stretch_order",stretch_order) end
- if shrink_order then setfield(s,"shrink_order",shrink_order) end
- setfield(n,"spec",s)
- else
- -- shared
- setfield(n,"spec",copy_nut(width))
+ if width and width ~= 0 then
+ setfield(n,"width",width)
+ end
+ if stretch and stretch ~= 0 then
+ setfield(n,"stretch",stretch)
+ end
+ if shrink and shrink ~= 0 then
+ setfield(n,"shrink",shrink)
+ end
+ if stretch_order and stretch_order ~= 0 then
+ setfield(n,"stretch_order",stretch_order)
+ end
+ if shrink_order and shrink_order ~= 0 then
+ setfield(n,"shrink_order",shrink_order)
end
return n
end
function nutpool.stretch(a,b)
local n = copy_nut(glue)
- local s = copy_nut(glue_spec)
if b then
- setfield(s,"stretch",a)
- setfield(s,"stretch_order",b)
+ setfield(n,"stretch",a)
+ setfield(n,"stretch_order",b)
else
- setfield(s,"stretch",1)
- setfield(s,"stretch_order",a or 1)
+ setfield(n,"stretch",1)
+ setfield(n,"stretch_order",a or 1)
end
- setfield(n,"spec",s)
return n
end
function nutpool.shrink(a,b)
local n = copy_nut(glue)
- local s = copy_nut(glue_spec)
if b then
- setfield(s,"shrink",a)
- setfield(s,"shrink_order",b)
+ setfield(n,"shrink",a)
+ setfield(n,"shrink_order",b)
else
- setfield(s,"shrink",1)
- setfield(s,"shrink_order",a or 1)
+ setfield(n,"shrink",1)
+ setfield(n,"shrink_order",a or 1)
end
- setfield(n,"spec",s)
return n
end
@@ -260,14 +315,18 @@ end
function nutpool.negatedglue(glue)
local n = copy_nut(glue)
- local s = copy_nut(getfield(n,"spec"))
- local width = getfield(s,"width")
- local stretch = getfield(s,"stretch")
- local shrink = getfield(s,"shrink")
- if width then setfield(s,"width", -width) end
- if stretch then setfield(s,"stretch",-stretch) end
- if shrink then setfield(s,"shrink", -shrink) end
- setfield(n,"spec",s)
+ local width = getfield(n,"width")
+ local stretch = getfield(n,"stretch")
+ local shrink = getfield(n,"shrink")
+ if width and width ~= 0 then
+ setfield(n,"width", -width)
+ end
+ if stretch and stretch ~= 0 then
+ setfield(n,"stretch",-stretch)
+ end
+ if shrink and shrink ~= 0 then
+ setfield(n,"shrink", -shrink)
+ end
return n
end
@@ -299,10 +358,52 @@ end
function nutpool.rule(width,height,depth,dir) -- w/h/d == nil will let them adapt
local n = copy_nut(rule)
- if width then setfield(n,"width",width) end
- if height then setfield(n,"height",height) end
- if depth then setfield(n,"depth",depth) end
- if dir then setfield(n,"dir",dir) end
+ if width then -- also 0 else adapt
+ setfield(n,"width",width)
+ end
+ if height then -- also 0 else adapt
+ setfield(n,"height",height)
+ end
+ if depth then -- also 0 else adapt
+ setfield(n,"depth",depth)
+ end
+ if dir then
+ setfield(n,"dir",dir)
+ end
+ return n
+end
+
+function nutpool.emptyrule(width,height,depth,dir) -- w/h/d == nil will let them adapt
+ local n = copy_nut(emptyrule)
+ if width then -- also 0 else adapt
+ setfield(n,"width",width)
+ end
+ if height then -- also 0 else adapt
+ setfield(n,"height",height)
+ end
+ if depth then -- also 0 else adapt
+ setfield(n,"depth",depth)
+ end
+ if dir then
+ setfield(n,"dir",dir)
+ end
+ return n
+end
+
+function nutpool.userrule(width,height,depth,dir) -- w/h/d == nil will let them adapt
+ local n = copy_nut(userrule)
+ if width then -- also 0 else adapt
+ setfield(n,"width",width)
+ end
+ if height then -- also 0 else adapt
+ setfield(n,"height",height)
+ end
+ if depth then -- also 0 else adapt
+ setfield(n,"depth",depth)
+ end
+ if dir then
+ setfield(n,"dir",dir)
+ end
return n
end
@@ -327,36 +428,38 @@ if context and _cldo_ then
local setfield_node = nodes.setfield
local setfield_nut = nuts .setfield
- function nodepool.lateluafunction(f)
- local n = copy_node(latelua_node)
- setfield_node(n,"string",f_cldo(register(f)))
- return n
- end
- function nutpool.lateluafunction(f)
- local n = copy_nut(latelua_nut)
- setfield_nut(n,"string",f_cldo(register(f)))
- return n
- end
-
- -- when function in latelua:
-
-- function nodepool.lateluafunction(f)
-- local n = copy_node(latelua_node)
- -- setfield_node(n,"string",f)
+ -- setfield_node(n,"string",f_cldo(register(f)))
-- return n
-- end
+
-- function nutpool.lateluafunction(f)
-- local n = copy_nut(latelua_nut)
- -- setfield_nut(n,"string",f)
+ -- setfield_nut(n,"string",f_cldo(register(f)))
-- return n
-- end
+ -- when function in latelua:
+
+ function nodepool.lateluafunction(f)
+ local n = copy_node(latelua_node)
+ setfield_node(n,"string",f)
+ return n
+ end
+
+ function nutpool.lateluafunction(f)
+ local n = copy_nut(latelua_nut)
+ setfield_nut(n,"string",f)
+ return n
+ end
+
local latefunction = nodepool.lateluafunction
local flushnode = context.flushnode
- function context.lateluafunction(f)
- flushnode(latefunction(f)) -- hm, quite some indirect calls
- end
+ -- function context.lateluafunction(f)
+ -- flushnode(latefunction(f)) -- hm, quite some indirect calls
+ -- end
-- when function in latelua:
@@ -378,11 +481,11 @@ if context and _cldo_ then
-- when function in latelua:
- -- function context.lateluafunction(f)
- -- local n = copy_node(latelua_node)
- -- setfield_node(n,"string",f)
- -- contextsprint(ctxcatcodes,"\\cldl",storenode(n)," ")
- -- end
+ function context.lateluafunction(f)
+ local n = copy_node(latelua_node)
+ setfield_node(n,"string",f)
+ contextsprint(ctxcatcodes,"\\cldl",storenode(n)," ")
+ end
end
@@ -395,7 +498,7 @@ function nutpool.leftmarginkern(glyph,width)
else
setfield(n,"glyph",glyph)
end
- if width then
+ if width and width ~= 0 then
setfield(n,"width",width)
end
return n
@@ -410,7 +513,7 @@ function nutpool.rightmarginkern(glyph,width)
else
setfield(n,"glyph",glyph)
end
- if width then
+ if width and width ~= 0 then
setfield(n,"width",width)
end
return n
@@ -424,37 +527,43 @@ function nutpool.noad()
return copy_nut(noad)
end
-function nutpool.hlist(list,width,height,depth)
+function nutpool.hlist(list,width,height,depth,shift)
local n = copy_nut(hlist)
if list then
- setfield(n,"list",list)
+ setlist(n,list)
end
- if width then
+ if width and width ~= 0 then
setfield(n,"width",width)
end
- if height then
+ if height and height ~= 0 then
setfield(n,"height",height)
end
- if depth then
+ if depth and depth ~= 0 then
setfield(n,"depth",depth)
end
+ if shift and shift ~= 0 then
+ setfield(n,"shift",shift)
+ end
return n
end
-function nutpool.vlist(list,width,height,depth)
+function nutpool.vlist(list,width,height,depth,shift)
local n = copy_nut(vlist)
if list then
- setfield(n,"list",list)
+ setlist(n,list)
end
- if width then
+ if width and width ~= 0 then
setfield(n,"width",width)
end
- if height then
+ if height and height ~= 0 then
setfield(n,"height",height)
end
- if depth then
+ if depth and depth ~= 0 then
setfield(n,"depth",depth)
end
+ if shift and shift ~= 0 then
+ setfield(n,"shift",shift)
+ end
return n
end
@@ -572,7 +681,10 @@ statistics.register("cleaned up reserved nodes", function()
end) -- \topofboxstack
statistics.register("node memory usage", function() -- comes after cleanup !
- return status.node_mem_usage
+ local usage = status.node_mem_usage
+ if usage ~= "" then
+ return usage
+ end
end)
lua.registerfinalizer(cleanup, "cleanup reserved nodes")
diff --git a/Master/texmf-dist/tex/context/base/node-rul.lua b/Master/texmf-dist/tex/context/base/mkiv/node-rul.lua
index 36d56a16c1a..e0649e99b3e 100644
--- a/Master/texmf-dist/tex/context/base/node-rul.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-rul.lua
@@ -11,6 +11,7 @@ if not modules then modules = { } end modules ['node-rul'] = {
--
-- todo: make robust for layers ... order matters
+
local attributes, nodes, node = attributes, nodes, node
local nuts = nodes.nuts
@@ -19,6 +20,9 @@ local tonut = nuts.tonut
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setlink = nuts.setlink
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
@@ -26,12 +30,15 @@ local getattr = nuts.getattr
local setattr = nuts.setattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
local getlist = nuts.getlist
+local setlist = nuts.setlist
local nodecodes = nodes.nodecodes
local tasks = nodes.tasks
+local properties = nodes.properties
+local attribs = node.current_attr
+
local glyph_code = nodecodes.glyph
local disc_code = nodecodes.disc
local rule_code = nodecodes.rule
@@ -102,11 +109,11 @@ local dimenfactor = fonts.helpers.dimenfactor
local splitdimen = number.splitdimen
local v_yes = variables.yes
+local v_all = variables.all
local v_foreground = variables.foreground
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
-local whatcodes = nodes.whatcodes
local kerncodes = nodes.kerncodes
local glyph_code = nodecodes.glyph
@@ -117,19 +124,19 @@ local kern_code = nodecodes.kern
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local rule_code = nodecodes.rule
-local whatsit_code = nodecodes.whatsit
+local dir_code = nodecodes.dir
local userskip_code = skipcodes.userskip
local spaceskip_code = skipcodes.spaceskip
local xspaceskip_code = skipcodes.xspaceskip
-
-local dir_code = whatcodes.dir
+local leader_code = skipcodes.leaders
local kerning_code = kerncodes.kern
local nodepool = nuts.pool
local new_rule = nodepool.rule
+local new_userrule = nodepool.userrule
local new_kern = nodepool.kern
local new_glue = nodepool.glue
@@ -151,11 +158,13 @@ local checkdir = true
-- todo: switching inside math
+-- handlers
+
local function processwords(attribute,data,flush,head,parent) -- we have hlistdir and local dir
local n = head
if n then
local f, l, a, d, i, class
- local continue, done, strip, level = false, false, true, -1
+ local continue, leaders, done, strip, level = false, false, false, true, -1
while n do
local id = getid(n)
if id == glyph_code or id == rule_code then
@@ -180,7 +189,9 @@ local function processwords(attribute,data,flush,head,parent) -- we have hlistdi
f, l, a = n, n, aa
level, class = newlevel, newclass
d = data[class]
- continue = d.continue == v_yes
+ local c = d.continue
+ leaders = c == v_all
+ continue = leaders or c == v_yes
end
else
if f then
@@ -188,8 +199,6 @@ local function processwords(attribute,data,flush,head,parent) -- we have hlistdi
end
f, l, a = nil, nil, nil
end
--- elseif f and (id == disc_code or (id == kern_code and getsubtype(n) == kerning_code)) then
--- l = n
elseif id == disc_code then
if f then
l = n
@@ -205,9 +214,9 @@ local function processwords(attribute,data,flush,head,parent) -- we have hlistdi
end
local list = getlist(n)
if list then
- setfield(n,"list",(processwords(attribute,data,flush,list,n))) -- watch ()
+ setlist(n,(processwords(attribute,data,flush,list,n))) -- watch ()
end
- elseif checkdir and id == whatsit_code and getsubtype(n) == dir_code then -- only changes in dir, we assume proper boundaries
+ elseif checkdir and id == dir_code then -- only changes in dir, we assume proper boundaries
if f and a then
l = n
end
@@ -220,7 +229,7 @@ local function processwords(attribute,data,flush,head,parent) -- we have hlistdi
elseif id == glue_code then
-- catch \underbar{a} \underbar{a} (subtype test is needed)
local subtype = getsubtype(n)
- if getattr(n,attribute) and (subtype == userskip_code or subtype == spaceskip_code or subtype == xspaceskip_code) then
+ if getattr(n,attribute) and (subtype == userskip_code or subtype == spaceskip_code or subtype == xspaceskip_code or (leaders and subtype >= leader_code)) then
l = n
else
head, done = flush(head,f,l,d,level,parent,strip), true
@@ -256,14 +265,40 @@ end
--
-nodes.rules = nodes.rules or { }
-nodes.rules.data = nodes.rules.data or { }
+local rules = nodes.rules or { }
+nodes.rules = rules
+rules.data = rules.data or { }
+
+storage.register("nodes/rules/data", rules.data, "nodes.rules.data")
+
+local data = rules.data
-storage.register("nodes/rules/data", nodes.rules.data, "nodes.rules.data")
+-- we implement user rules here as it takes less code this way
-local data = nodes.rules.data
+local function userrule(t)
+ local r = new_userrule(t.width or 0,t.height or 0,t.depth or 0)
+ setfield(r,"attr",attribs())
+ properties[r] = t
+ return tonode(r)
+end
+
+rules.userrule = userrule
+local ruleactions = { }
+rules.ruleactions = ruleactions
+
+callback.register("process_rule",function(n,h,v)
+ local n = tonut(n)
+ local p = properties[n]
+ local i = p.type or "draw"
+ local a = ruleactions[i]
+ if a then
+ a(p,h,v,i,n)
+ end
+end)
+
+--
-function nodes.rules.define(settings)
+function rules.define(settings)
data[#data+1] = settings
context(#data)
end
@@ -289,18 +324,26 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
if not f then
return head
end
- local w = list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),f,getnext(l))
- local method, offset, continue, dy, order, max = d.method, d.offset, d.continue, d.dy, d.order, d.max
- local rulethickness, unit = d.rulethickness, d.unit
- local ma, ca, ta = d.ma, d.ca, d.ta
- local colorspace = ma > 0 and ma or getattr(f,a_colorspace) or 1
- local color = ca > 0 and ca or getattr(f,a_color)
- local transparency = ta > 0 and ta or getattr(f,a_transparency)
- local foreground = order == v_foreground
-
- local e = dimenfactor(unit,getfont(f)) -- what if no glyph node
-
- local rt = tonumber(rulethickness)
+ local w, ht, dp = list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),f,getnext(l))
+ local method = d.method
+ local offset = d.offset
+ local continue = d.continue
+ local dy = d.dy
+ local order = d.order
+ local max = d.max
+ local mp = d.mp
+ local rulethickness = d.rulethickness
+ local unit = d.unit
+ local ma = d.ma
+ local ca = d.ca
+ local ta = d.ta
+ local colorspace = ma > 0 and ma or getattr(f,a_colorspace) or 1
+ local color = ca > 0 and ca or getattr(f,a_color)
+ local transparency = ta > 0 and ta or getattr(f,a_transparency)
+ local foreground = order == v_foreground
+ local layer = getattr(f,a_viewerlayer)
+ local e = dimenfactor(unit,getfont(f)) -- what if no glyph node
+ local rt = tonumber(rulethickness)
if rt then
rulethickness = e * rulethickness / 2
else
@@ -311,7 +354,7 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
rulethickness = 1/5
end
end
-
+ --
if level > max then
level = max
end
@@ -321,22 +364,10 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
else
m = 0
end
- for i=1,level do
- local ht = (offset+(i-1)*dy)*e + rulethickness - m
- local dp = -(offset+(i-1)*dy)*e + rulethickness + m
- local r = new_rule(w,ht,dp)
- local v = getattr(f,a_viewerlayer)
- -- quick hack
- if v then
- setattr(r,a_viewerlayer,v)
- end
- --
- if color then
- setattr(r,a_colorspace,colorspace)
- setattr(r,a_color,color)
- end
- if transparency then
- setattr(r,a_transparency,transparency)
+
+ local function inject(r,w,ht,dp)
+ if layer then
+ setattr(r,a_viewerlayer,layer)
end
local k = new_kern(-w)
if foreground then
@@ -352,14 +383,45 @@ local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but a
level,w,ht,dp,n_tostring(f,l),n_tosequence(f,l,true))
end
end
+
+ if mp and mp ~= "" then
+ local r = userrule {
+ width = w,
+ height = ht,
+ depth = dp,
+ type = "mp",
+ factor = e,
+ offset = offset,
+ line = rulethickness,
+ data = mp,
+ ma = colorspace,
+ ca = color,
+ ta = transparency,
+ }
+ inject(tonut(r),w,ht,dp)
+ else
+ for i=1,level do
+ local ht = (offset+(i-1)*dy)*e + rulethickness - m
+ local dp = -(offset+(i-1)*dy)*e + rulethickness + m
+ local r = new_rule(w,ht,dp)
+ if color then
+ setattr(r,a_colorspace,colorspace)
+ setattr(r,a_color,color)
+ end
+ if transparency then
+ setattr(r,a_transparency,transparency)
+ end
+ inject(r,w,ht,dp)
+ end
+ end
return head
end
local process = nodes.processwords
-nodes.rules.handler = function(head) return process(a_ruled,data,flush_ruled,head) end
+rules.handler = function(head) return process(a_ruled,data,flush_ruled,head) end
-function nodes.rules.enable()
+function rules.enable()
tasks.enableaction("shipouts","nodes.rules.handler")
end
@@ -392,20 +454,18 @@ local function flush_shifted(head,first,last,data,level,parent,strip) -- not tha
end
local prev = getprev(first)
local next = getnext(last)
- setfield(first,"prev",nil)
- setfield(last,"next",nil)
+ setprev(first)
+ setnext(last)
local width, height, depth = list_dimensions(getfield(parent,"glue_set"),getfield(parent,"glue_sign"),getfield(parent,"glue_order"),first,next)
local list = hpack_nodes(first,width,"exactly")
if first == head then
head = list
end
if prev then
- setfield(prev,"next",list)
- setfield(list,"prev",prev)
+ setlink(prev,list)
end
if next then
- setfield(next,"prev",list)
- setfield(list,"next",next)
+ setlink(next,list)
end
local raise = data.dy * dimenfactor(data.unit,fontdata[getfont(first)])
setfield(list,"shift",raise)
@@ -431,7 +491,7 @@ local implement = interfaces.implement
implement {
name = "definerule",
- actions = { nodes.rules.define, context },
+ actions = { rules.define, context },
arguments = {
{
{ "continue" },
@@ -445,6 +505,7 @@ implement {
{ "ma", "integer" },
{ "ca", "integer" },
{ "ta", "integer" },
+ { "mp", "string" },
}
}
}
@@ -452,7 +513,7 @@ implement {
implement {
name = "enablerules",
onlyonce = true,
- actions = nodes.rules.enable
+ actions = rules.enable
}
implement {
diff --git a/Master/texmf-dist/tex/context/base/node-rul.mkiv b/Master/texmf-dist/tex/context/base/mkiv/node-rul.mkiv
index 7fa0473a5ff..8706b8ecf39 100644
--- a/Master/texmf-dist/tex/context/base/node-rul.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-rul.mkiv
@@ -101,7 +101,7 @@
\appendtoks
\ifcsname\??barindex\currentbar\endcsname
- \csname\??barindex\currentbar\endcsname\zerocount
+ \lastnamedcs
\else
\expandafter\newcount\csname\??barindex\currentbar\endcsname
\fi
@@ -119,12 +119,13 @@
order {\barparameter\c!order}%
rulethickness {\barparameter\c!rulethickness}%
method \barparameter\c!method
+ max \barparameter\c!max\space % number
+ mp {\includeMPgraphic{\barparameter\c!mp}}
ma \thecolormodelattribute
ca \thecolorattribute\p_node_rules_color
ta \thetransparencyattribute\p_node_rules_color
offset \barparameter\c!offset\space % number
dy \barparameter\c!dy\space % number
- max \barparameter\c!max
\relax}}
\unexpanded\def\node_rules_redefine#1%
@@ -141,13 +142,15 @@
%\unexpanded\def\node_rules_set_indeed#1% maybe reverse the 1000 (also maybe use more attributes instead of settings)
\unexpanded\def\node_rules_set#1% maybe reverse the 1000 (also maybe use more attributes instead of settings)
- {\clf_enablerules % will be relaxed
- \edef\currentbar{#1}%
+ {\edef\currentbar{#1}%
+ \usebarstyleandcolor\c!foregroundstyle\c!foregroundcolor
+ % todo: move this to lua .. we callout anyway
\expandafter\let\expandafter\c_node_rules_index\csname\??barindex#1\endcsname
\advance\c_node_rules_index\plusone
- \usebarstyleandcolor\c!foregroundstyle\c!foregroundcolor
+ \clf_enablerules % will be relaxed
\attribute\ruledattribute\numexpr
\plusthousand*\c_node_rules_index
+ % optimizing this one needs testing
+\csname\??barattribute#1\ifcsname\??bar#1:\number\c_node_rules_index\s!parent\endcsname:\number\c_node_rules_index\fi\endcsname
\relax}
@@ -214,6 +217,8 @@
\definebar[\v!overstrikes] [\v!overstrike] [\c!continue=\v!no]
\definebar[\v!understrikes][\v!understrike][\c!continue=\v!no]
+% \setupbar[\v!overstrike][continue=all]
+
% we want these always so ...
\ifdefined\normalmathunderbar
@@ -251,6 +256,60 @@
\unexpanded\def\setupunderbar[#1]% too incompatible for the moment
{}
+%D An experimental new feature:
+%D
+%D \startbuffer
+%D test {\red\underrandoms{test me}} and \underrandom{test} or \underrandom{grep} \blank
+%D test {\red\underdashes {test me}} and \underdash {test} or \underdash {grep} \blank
+%D test {\red\underdots {test me}} and \underdot {test} or \underdot {grep} \blank
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\startuseMPgraphic{rules:under:random}
+ draw
+ ((0,RuleDepth) ... (RuleWidth,RuleDepth)) randomized (4*RuleThickness)
+ shifted (0,RuleFactor*RuleOffset)
+ withpen pencircle scaled RuleThickness
+ withcolor RuleColor ;
+ setbounds currentpicture to unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{rules:under:dash}
+ draw
+ ((0,RuleDepth) ... (RuleWidth,RuleDepth))
+ shifted (0,RuleFactor*RuleOffset)
+ dashed dashpattern(on RuleFactor/2 off RuleFactor/2)
+ withpen pencircle scaled RuleThickness
+ withcolor RuleColor ;
+ setbounds currentpicture to unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{rules:under:dots}
+ draw
+ ((0,RuleDepth) ... (RuleWidth,RuleDepth))
+ shifted (0,RuleFactor*RuleOffset)
+ dashed dashpattern(off 3/RuleFactor on 0 off 3/RuleFactor)
+ withpen pencircle scaled 2RuleThickness
+ withcolor RuleColor ;
+ setbounds currentpicture to unitsquare xysized(RuleWidth,RuleHeight) ;
+\stopuseMPgraphic
+
+\definebar
+ [undergraphic]
+ [\c!mp=rules:under:dash,
+ \c!offset=-.2,
+ \c!order=\v!background]
+
+\definebar[underrandom] [undergraphic][\c!mp=rules:under:random]
+\definebar[underrandoms][underrandom] [\c!continue=\v!yes]
+
+\definebar[underdash] [undergraphic][\c!mp=rules:under:dash]
+\definebar[underdashes] [underdash] [\c!continue=\v!yes]
+
+\definebar[underdot] [undergraphic][\c!mp=rules:under:dots]
+\definebar[underdots] [underdot] [\c!continue=\v!yes]
+
%D This will move: (a bit duplicated)
\installcorenamespace{shift}
@@ -275,7 +334,7 @@
\appendtoks
\ifcsname\??shiftindex\currentshift\endcsname
- \csname\??shiftindex\currentshift\endcsname\zerocount
+ \lastnamedcs\zerocount
\else
\expandafter\newcount\csname\??shiftindex\currentshift\endcsname
\fi
@@ -303,9 +362,8 @@
%
% \def\node_shifts_set_indeed#1% todo: check parent !
-\unexpanded\def\node_shifts_set#1% todo: check parent !
- {\clf_enableshifts
- \def\currentshift{#1}%
+\unexpanded\def\node_shifts_set#1% todo: check parent ! todo: move attr etc to lua
+ {\def\currentshift{#1}%
\expandafter\let\expandafter\c_node_shifts_index\csname\??shiftindex#1\endcsname
\advance\c_node_shifts_index\plusone
\attribute\shiftedattribute\numexpr
diff --git a/Master/texmf-dist/tex/context/base/node-ser.lua b/Master/texmf-dist/tex/context/base/mkiv/node-ser.lua
index d7593cec748..2ad1242c533 100644
--- a/Master/texmf-dist/tex/context/base/node-ser.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-ser.lua
@@ -43,7 +43,6 @@ local expand = allocate ( tohash {
"list", -- list_ptr & ins_ptr & adjust_ptr
"pre", --
"post", --
- "spec", -- glue_ptr
"top_skip", --
"attr", --
"replace", -- nobreak
@@ -128,7 +127,7 @@ end
nodes.astable = astable
-setinspector(function(v) if is_node(v) then printtable(astable(v),tostring(v)) return true end end)
+setinspector("node",function(v) if is_node(v) then printtable(astable(v),tostring(v)) return true end end)
-- under construction:
diff --git a/Master/texmf-dist/tex/context/base/node-shp.lua b/Master/texmf-dist/tex/context/base/mkiv/node-shp.lua
index 42cc83b8f34..2f2af490566 100644
--- a/Master/texmf-dist/tex/context/base/node-shp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-shp.lua
@@ -40,23 +40,28 @@ local tonode = nuts.tonode
local free_node = nuts.free
local remove_node = nuts.remove
local traverse_nodes = nuts.traverse
-local find_tail = nuts.tail
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setsetlink = nuts.setlink
+local setsetprev = nuts.setprev
+local setsetnext = nuts.setnext
local getid = nuts.getid
+local getdisc = nuts.getdisc
+local getboth = nuts.getboth
local getnext = nuts.getnext
-local getprev = nuts.getprev
local getlist = nuts.getlist
local getsubtype = nuts.getsubtype
+local setlist = nuts.setlist
+
local removables = {
- [whatsitcodes.open] = true,
- [whatsitcodes.close] = true,
- [whatsitcodes.write] = true,
- [whatsitcodes.pdfdest] = true,
- [whatsitcodes.pdfsavepos] = true,
- [whatsitcodes.latelua] = true,
+ [whatsitcodes.open] = true,
+ [whatsitcodes.close] = true,
+ [whatsitcodes.write] = true,
+ [whatsitcodes.savepos] = true,
+ [whatsitcodes.latelua] = true,
+ [whatsitcodes.pdfdest] = true,
}
-- About 10% of the nodes make no sense for the backend. By (at least)
@@ -73,11 +78,9 @@ local function cleanup_redundant(head) -- better name is: flatten_page
local id = getid(start)
if id == disc_code then
if getsubtype(start) == fulldisc_code then
- local replace = getfield(start,"replace")
+ local _, _, replace, _, _ tail = getdisc(start,true)
if replace then
- local prev = getprev(start)
- local next = getnext(start)
- local tail = find_tail(replace)
+ local prev, next = getboth(start)
setfield(start,"replace",nil)
if start == head then
remove_node(head,start,true)
@@ -86,14 +89,12 @@ local function cleanup_redundant(head) -- better name is: flatten_page
remove_node(head,start,true)
end
if next then
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
+ setlink(tail,next)
end
if prev then
- setfield(prev,"next",replace)
- setfield(replace,"prev",prev)
+ setlink(prev,replace)
else
- setfield(replace,"prev",nil) -- to be sure
+ setprev(replace) -- to be sure
end
start = next
elseif wipedisc then
@@ -110,7 +111,7 @@ local function cleanup_redundant(head) -- better name is: flatten_page
if sl then
local rl = cleanup_redundant(sl)
if rl ~= sl then
- setfield(start,"list",rl)
+ setlist(start,rl)
end
end
start = getnext(start)
@@ -136,7 +137,7 @@ local function cleanup_flushed(head) -- rough
if sl then
local rl = cleanup_flushed(sl)
if rl ~= sl then
- setfield(start,"list",rl)
+ setlist(start,rl)
end
end
start = getnext(start)
@@ -201,7 +202,7 @@ local function count(head,data,subcategory)
local dn = data[nodecodes[id]] -- we could use id and then later convert to nodecodes
dn[subcategory] = dn[subcategory] + 1
if id == hlist_code or id == vlist_code then
- count(getfield(n,"list"),data,subcategory)
+ count(getlist(n),data,subcategory)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/node-snp.lua b/Master/texmf-dist/tex/context/base/mkiv/node-snp.lua
index 31c7771ac92..31c7771ac92 100644
--- a/Master/texmf-dist/tex/context/base/node-snp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-snp.lua
diff --git a/Master/texmf-dist/tex/context/base/node-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/node-tex.lua
index c9d3091df23..c9d3091df23 100644
--- a/Master/texmf-dist/tex/context/base/node-tex.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-tex.lua
diff --git a/Master/texmf-dist/tex/context/base/node-tra.lua b/Master/texmf-dist/tex/context/base/mkiv/node-tra.lua
index a7ab7f77f72..d184620ef2e 100644
--- a/Master/texmf-dist/tex/context/base/node-tra.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-tra.lua
@@ -45,8 +45,9 @@ local getid = nuts.getid
local getchar = nuts.getchar
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
-
+local getdisc = nuts.getdisc
local setattr = nuts.setattr
+local isglyph = nuts.isglyph
local flush_list = nuts.flush_list
local count_nodes = nuts.count
@@ -71,12 +72,11 @@ local disc_code = nodecodes.disc
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 whatsit_code = nodecodes.whatsit
local gluespec_code = nodecodes.gluespec
-local localpar_code = whatcodes.localpar
-local dir_code = whatcodes.dir
-
local dimenfactors = number.dimenfactors
local fillorders = nodes.fillcodes
local formatters = string.formatters
@@ -129,9 +129,8 @@ local function tosequence(start,stop,compact)
stop = stop and tonut(stop)
local t = { }
while start do
- local id = getid(start)
- if id == glyph_code then
- local c = getchar(start)
+ local c, id = isglyph(start)
+ if c then
if compact then
local components = getfield(start,"components")
if components then
@@ -148,7 +147,7 @@ local function tosequence(start,stop,compact)
else
t[#t+1] = nodecodes[id]
end
- elseif id == whatsit_code and getsubtype(start) == localpar_code or getsubtype(start) == dir_code then
+ elseif id == dir_code or id == localpar_code then
t[#t+1] = "[" .. getfield(start,"dir") .. "]"
elseif compact then
t[#t+1] = "[]"
@@ -175,7 +174,7 @@ nodes.tosequence = tosequence
nuts .tosequence = tosequence
function nodes.report(t,done)
- report_nodes("output %a, %changed %a, %s nodes",status.output_active,done,count_nodes(tonut(t)))
+ report_nodes("output %a, changed %a, %s nodes",status.output_active,done,count_nodes(tonut(t)))
end
function nodes.packlist(head)
@@ -189,20 +188,29 @@ end
function nodes.idstostring(head,tail)
head = tonut(head)
tail = tail and tonut(tail)
- local t, last_id, last_n = { }, nil, 0
+ local t = { }
+ local last_id = nil
+ local last_n = 0
for n in traverse_nodes(head,tail) do -- hm, does not stop at tail
local id = getid(n)
+ if id == whatsit_code then
+ id = whatcodes[getsubtype(n)]
+ else
+ id = nodecodes[id]
+ end
if not last_id then
- last_id, last_n = id, 1
+ last_id = id
+ last_n = 1
elseif last_id == id then
last_n = last_n + 1
else
if last_n > 1 then
- t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?")
+ t[#t+1] = formatters["[%s*%s]"](last_n,last_id)
else
- t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?")
+ t[#t+1] = formatters["[%s]"](last_id)
end
- last_id, last_n = id, 1
+ last_id = id
+ last_n = 1
end
if n == tail then
break
@@ -210,10 +218,12 @@ function nodes.idstostring(head,tail)
end
if not last_id then
t[#t+1] = "no nodes"
- elseif last_n > 1 then
- t[#t+1] = formatters["[%s*%s]"](last_n,nodecodes[last_id] or "?")
else
- t[#t+1] = formatters["[%s]"](nodecodes[last_id] or "?")
+ if last_n > 1 then
+ t[#t+1] = formatters["[%s*%s]"](last_n,last_id)
+ else
+ t[#t+1] = formatters["[%s]"](last_id)
+ end
end
return concat(t," ")
end
@@ -279,29 +289,29 @@ end
nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end
-local function listtoutf(h,joiner,textonly,last)
+local function listtoutf(h,joiner,textonly,last,nodisc)
local w = { }
while h do
- local id = getid(h)
- if id == glyph_code then -- always true
- local c = getchar(h)
+ local c, id = isglyph(h)
+ if c then
w[#w+1] = c >= 0 and utfchar(c) or formatters["<%i>"](c)
if joiner then
w[#w+1] = joiner
end
elseif id == disc_code then
- local pre = getfield(h,"pre")
- local pos = getfield(h,"post")
- local rep = getfield(h,"replace")
- w[#w+1] = formatters["[%s|%s|%s]"] (
- pre and listtoutf(pre,joiner,textonly) or "",
- pos and listtoutf(pos,joiner,textonly) or "",
- rep and listtoutf(rep,joiner,textonly) or ""
- )
+ local pre, pos, rep = getdisc(h)
+ if not nodisc then
+ w[#w+1] = formatters["[%s|%s|%s]"] (
+ pre and listtoutf(pre,joiner,textonly) or "",
+ pos and listtoutf(pos,joiner,textonly) or "",
+ rep and listtoutf(rep,joiner,textonly) or ""
+ )
+ elseif rep then
+ w[#w+1] = listtoutf(rep,joiner,textonly) or ""
+ end
elseif textonly then
if id == glue_code then
- local spec = getfield(h,"spec")
- if spec and getfield(spec,"width") > 0 then
+ if getfield(h,"width") > 0 then
w[#w+1] = " "
end
elseif id == hlist_code or id == vlist_code then
@@ -319,10 +329,10 @@ local function listtoutf(h,joiner,textonly,last)
return concat(w)
end
-function nodes.listtoutf(h,joiner,textonly,last)
+function nodes.listtoutf(h,joiner,textonly,last,nodisc)
if h then
local joiner = joiner == true and utfchar(0x200C) or joiner -- zwnj
- return listtoutf(tonut(h),joiner,textonly,last and tonut(last))
+ return listtoutf(tonut(h),joiner,textonly,last and tonut(last),nodisc)
else
return ""
end
@@ -349,93 +359,6 @@ local ptfactor = dimenfactors.pt
local bpfactor = dimenfactors.bp
local stripper = lpeg.patterns.stripzeros
--- start redefinition
---
--- -- if fmt then
--- -- return formatters[fmt](n*dimenfactors[unit],unit)
--- -- else
--- -- return match(formatters["%.20f"](n*dimenfactors[unit]),"(.-0?)0*$") .. unit
--- -- end
---
--- redefined:
-
--- local function nodetodimen(d,unit,fmt,strip)
--- d = tonut(d) -- tricky: direct nuts are an issue
--- if unit == true then
--- unit = "pt"
--- fmt = "%0.5f%s"
--- else
--- unit = unit or 'pt'
--- if not fmt then
--- fmt = "%s%s"
--- elseif fmt == true then
--- fmt = "%0.5f%s"
--- end
--- end
--- local id = getid(d)
--- if id == kern_code then
--- local str = formatters[fmt](getfield(d,"width")*dimenfactors[unit],unit)
--- return strip and lpegmatch(stripper,str) or str
--- end
--- if id == glue_code then
--- d = getfield(d,"spec")
--- end
--- if not d or not getid(d) == gluespec_code then
--- local str = formatters[fmt](0,unit)
--- return strip and lpegmatch(stripper,str) or str
--- end
--- local width = getfield(d,"width")
--- local plus = getfield(d,"stretch_order")
--- local minus = getfield(d,"shrink_order")
--- local stretch = getfield(d,"stretch")
--- local shrink = getfield(d,"shrink")
--- if plus ~= 0 then
--- plus = " plus " .. stretch/65536 .. fillcodes[plus]
--- elseif stretch ~= 0 then
--- plus = formatters[fmt](stretch*dimenfactors[unit],unit)
--- plus = " plus " .. (strip and lpegmatch(stripper,plus) or plus)
--- else
--- plus = ""
--- end
--- if minus ~= 0 then
--- minus = " minus " .. shrink/65536 .. fillcodes[minus]
--- elseif shrink ~= 0 then
--- minus = formatters[fmt](shrink*dimenfactors[unit],unit)
--- minus = " minus " .. (strip and lpegmatch(stripper,minus) or minus)
--- else
--- minus = ""
--- end
--- local str = formatters[fmt](getfield(d,"width")*dimenfactors[unit],unit)
--- return (strip and lpegmatch(stripper,str) or str) .. plus .. minus
--- end
---
--- local function numbertodimen(d,unit,fmt,strip)
--- if not d then
--- local str = formatters[fmt](0,unit)
--- return strip and lpegmatch(stripper,str) or str
--- end
--- local t = type(d)
--- if t == 'string' then
--- return d
--- elseif t == "number" then
--- if unit == true then
--- unit = "pt"
--- fmt = "%0.5f%s"
--- else
--- unit = unit or 'pt'
--- if not fmt then
--- fmt = "%s%s"
--- elseif fmt == true then
--- fmt = "%0.5f%s"
--- end
--- end
--- local str = formatters[fmt](d*dimenfactors[unit],unit)
--- return strip and lpegmatch(stripper,str) or str
--- else
--- return nodetodimen(d,unit,fmt,strip) -- real node
--- end
--- end
-
local f_f_f = formatters["%0.5Fpt plus %0.5F%s minus %0.5F%s"]
local f_f_m = formatters["%0.5Fpt plus %0.5F%s minus %0.5Fpt"]
local f_p_f = formatters["%0.5Fpt plus %0.5Fpt minus %0.5F%s"]
@@ -459,11 +382,7 @@ local function nodetodimen(n)
else
return f_z_z(width)
end
- end
- if id == glue_code then
- n = getfield(n,"spec")
- end
- if not n or not getid(n) == gluespec_code then
+ elseif id ~= glue_code then
return "0pt"
end
local stretch_order = getfield(n,"stretch_order")
diff --git a/Master/texmf-dist/tex/context/base/node-tsk.lua b/Master/texmf-dist/tex/context/base/mkiv/node-tsk.lua
index 56a4b18ef24..56a4b18ef24 100644
--- a/Master/texmf-dist/tex/context/base/node-tsk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-tsk.lua
diff --git a/Master/texmf-dist/tex/context/base/node-tst.lua b/Master/texmf-dist/tex/context/base/mkiv/node-tst.lua
index 7f5102d5fcd..4832c048c89 100644
--- a/Master/texmf-dist/tex/context/base/node-tst.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-tst.lua
@@ -39,7 +39,7 @@ function nuts.leftmarginwidth(n) -- todo: three values
while n do
local id = getid(n)
if id == glue_code then
- return getsubtype(n) == leftskip_code and getfield(getfield(n,"spec"),"width") or 0
+ return getsubtype(n) == leftskip_code and getfield(n,"width") or 0
elseif id == whatsit_code then
n = getnext(n)
elseif id == hlist_code then
@@ -57,7 +57,7 @@ function nuts.rightmarginwidth(n)
while n do
local id = getid(n)
if id == glue_code then
- return getsubtype(n) == rightskip_code and getfield(getfield(n,"spec"),"width") or 0
+ return getsubtype(n) == rightskip_code and getfield(n,"width") or 0
elseif id == whatsit_code then
n = getprev(n)
else
@@ -72,7 +72,8 @@ function nuts.somespace(n,all)
if n then
local id = getid(n)
if id == glue_code then
- return (all or (getfield(getfield(n,"spec"),"width") ~= 0)) and glue_code
+ return (all or ((getfield(n,"width") or 0) ~= 0)) and glue_code -- temp: or 0
+ -- return (all or (getfield(n,"width") ~= 0)) and glue_code
elseif id == kern_code then
return (all or (getfield(n,"kern") ~= 0)) and kern
elseif id == glyph_code then
diff --git a/Master/texmf-dist/tex/context/base/node-typ.lua b/Master/texmf-dist/tex/context/base/mkiv/node-typ.lua
index f1aacf25a86..2d84e07a3fc 100644
--- a/Master/texmf-dist/tex/context/base/node-typ.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/node-typ.lua
@@ -16,11 +16,15 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setchar = nuts.setchar
+
+local getfield = nuts.getfield
local getfont = nuts.getfont
local hpack_node_list = nuts.hpack
local vpack_node_list = nuts.vpack
-local fast_hpack_list = nuts.fasthpack
+local full_hpack_list = nuts.fullhpack
local copy_node = nuts.copy
local nodepool = nuts.pool
@@ -30,15 +34,19 @@ local new_glue = nodepool.glue
local utfvalues = utf.values
local currentfont = font.current
+local currentattr = node.current_attr
local fontparameters = fonts.hashes.parameters
local function tonodes(str,fontid,spacing,templateglyph) -- quick and dirty
local head, prev = nil, nil
+-- local attrid = nil
if not fontid then
if templateglyph then
fontid = getfont(templateglyph)
+-- attrid = getfield(templateglyph,"attr")
else
fontid = currentfont()
+-- attrid = currentattr()
end
end
local fp = fontparameters[fontid]
@@ -58,7 +66,7 @@ local function tonodes(str,fontid,spacing,templateglyph) -- quick and dirty
end
elseif templateglyph then
next = copy_glyph(templateglyph)
- setfield(next,"char",c)
+ setchar(next,c)
spacedone = false
else
next = new_glyph(fontid or 1,c)
@@ -67,10 +75,11 @@ local function tonodes(str,fontid,spacing,templateglyph) -- quick and dirty
if not next then
-- nothing
elseif not head then
+-- setfield(next,"attr",attrid)
head = next
else
- setfield(prev,"next",next)
- setfield(next,"prev",prev)
+-- setfield(next,"attr",attrid)
+ setlink(prev,next)
end
prev = next
end
@@ -81,42 +90,40 @@ local function tohpack(str,fontid,spacing)
return hpack_node_list(tonodes(str,fontid,spacing),"exactly")
end
-local function tohpackfast(str,fontid,spacing)
- return fast_hpack_list(tonodes(str,fontid,spacing),"exactly")
+local function tohbox(str,fontid,spacing)
+ return full_hpack_list(tonodes(str,fontid,spacing),"exactly")
end
local function tovpack(str,fontid,spacing)
- -- vpack is just a hack, and a proper implentation is on the agenda
+ -- vpack is just a hack, and a proper implemtation is on the agenda
-- as it needs more info etc than currently available
return vpack_node_list(tonodes(str,fontid,spacing))
end
-local tovpackfast = tovpack
+local tovbox = tovpack -- for now no vpack filter
local tnuts = { }
nuts.typesetters = tnuts
tnuts.tonodes = tonodes
tnuts.tohpack = tohpack
-tnuts.tohpackfast = tohpackfast
+tnuts.tohbox = tohbox
tnuts.tovpack = tovpack
-tnuts.tovpackfast = tovpackfast
-
-tnuts.hpack = tohpack -- obsolete
-tnuts.fast_hpack = tohpackfast -- obsolete
-tnuts.vpack = tovpack -- obsolete
-
-typesetters.tonodes = function(...) local h, b = tonodes (...) return tonode(h), b end
-typesetters.tohpack = function(...) local h, b = tohpack (...) return tonode(h), b end
-typesetters.tohpackfast = function(...) local h, b = tohpackfast(...) return tonode(h), b end
-typesetters.tovpack = function(...) local h, b = tovpack (...) return tonode(h), b end
-typesetters.tovpackfast = function(...) local h, b = tovpackfast(...) return tonode(h), b end
-
-typesetters.hpack = typesetters.tohpack -- obsolete
-typesetters.fast_hpack = typesetters.tofasthpack -- obsolete
-typesetters.vpack = typesetters.tovpack -- obsolete
-
--- node.write(nodes.typestters.hpack("Hello World!"))
--- node.write(nodes.typestters.hpack("Hello World!",1,100*1024*10))
+tnuts.tovbox = tovbox
+
+typesetters.tonodes = function(...) local h, b = tonodes(...) return tonode(h), b end
+typesetters.tohpack = function(...) local h, b = tohpack(...) return tonode(h), b end
+typesetters.tohbox = function(...) local h, b = tohbox (...) return tonode(h), b end
+typesetters.tovpack = function(...) local h, b = tovpack(...) return tonode(h), b end
+typesetters.tovbox = function(...) local h, b = tovbox (...) return tonode(h), b end
+
+typesetters.hpack = typesetters.tohpack -- obsolete
+typesetters.hbox = typesetters.tohbox -- obsolete
+typesetters.vpack = typesetters.tovpack -- obsolete
+
+-- node.write(nodes.typesetters.tohpack("Hello World!"))
+-- node.write(nodes.typesetters.tohbox ("Hello World!"))
+-- node.write(nodes.typesetters.tohpack("Hello World!",1,100*1024*10))
+-- node.write(nodes.typesetters.tohbox ("Hello World!",1,100*1024*10))
string.tonodes = function(...) return tonode(tonodes(...)) end -- quite convenient
diff --git a/Master/texmf-dist/tex/context/base/norm-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/norm-ctx.mkiv
index 6fc012c452e..6fc012c452e 100644
--- a/Master/texmf-dist/tex/context/base/norm-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/norm-ctx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/pack-bar.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-bar.mkiv
index 06eeebd1411..06eeebd1411 100644
--- a/Master/texmf-dist/tex/context/base/pack-bar.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-bar.mkiv
diff --git a/Master/texmf-dist/tex/context/base/pack-bck.mkvi b/Master/texmf-dist/tex/context/base/mkiv/pack-bck.mkvi
index bb4b72252a2..346e7df575e 100644
--- a/Master/texmf-dist/tex/context/base/pack-bck.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-bck.mkvi
@@ -16,7 +16,7 @@
%D The code here is already pretty old and is used for simple
%D backgrounds. As it is still used WS adapted the code to the
%D new command handler methods so that it gets a second life. So
-%D it made sense to mkvi ir as well. Some more code is moved here
+%D it made sense to mkvi as well. Some more code is moved here
%D too.
%D \macros
@@ -87,7 +87,9 @@
{\setupcurrentbackground[#settings,\c!state=\v!start,\c!offset=\v!overlay]%
\let\pack_backgrounds_stop\pack_backgrounds_stop_indeed
\setbox0\vbox\bgroup
- \vbox to \lineheight{}\vskip\zeropoint
+ \strut
+ \vskip-2\lineheight
+ \strut
\blank[\v!disable]
\leftskip \backgroundparameter\c!leftoffset
\rightskip\backgroundparameter\c!rightoffset}
@@ -100,6 +102,9 @@
\unexpanded\def\pack_backgrounds_stop_indeed % we shoul duse the fast background variant of framed
{\endgraf
\removelastskip
+ \strut
+ \vskip-2\lineheight
+ \strut
\egroup
\dimen2\leftskip % new **
\forgetall
@@ -114,7 +119,6 @@
\else
\splitmaxdepth\boxmaxdepth
\splittopskip\topskip
- \setbox2\vsplit0 to \lineheight % get rid of fake line
\doloop
{\ifdim\pagetotal=\zeropoint % empty page
\scratchdimen\textheight
@@ -124,7 +128,13 @@
\scratchdimen\dimexpr\pagegoal-\ht2-\pagetotal\relax
\backgroundsplitmode\plustwo % split to partial height
\fi
- \advance\scratchdimen\dimexpr-\backgroundparameter\c!topoffset-\backgroundparameter\c!bottomoffset\relax
+ \ifdim\scratchdimen<\zeropoint
+ \scratchdimen\pagegoal
+ \fi
+ \advance\scratchdimen\dimexpr
+ -\backgroundparameter\c!topoffset
+ -\backgroundparameter\c!bottomoffset
+ \relax
\ifdim\scratchdimen>2\lineheight\relax % reasonable, will be configurable
\ifdim\ht0>\scratchdimen % larger than page
\setbox2\vsplit0 to \scratchdimen
@@ -191,9 +201,9 @@
\definebackground[\v!background]
\ifdefined\startbackground \else
- \expandafter\let\startbackground\csname\e!start\v!background\endcsname
- \expandafter\let\stopbackground \csname\e!stop \v!background\endcsname
- \expandafter\let\background \csname \v!background\endcsname
+ \expandafter\let\expandafter\startbackground\csname\e!start\v!background\endcsname
+ \expandafter\let\expandafter\stopbackground \csname\e!stop \v!background\endcsname
+ \expandafter\let\expandafter\background \csname \v!background\endcsname
\fi
\setupbackground
@@ -234,8 +244,6 @@
%D \macros
%D {backgroundline}
-%D
-%D For the moment an undocumented feature, but a candidate for going public.
\unexpanded\def\backgroundline[#color]%
{\dontleavehmode
diff --git a/Master/texmf-dist/tex/context/base/pack-box.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-box.mkiv
index 6e3bab6f498..fad7d6e18a3 100644
--- a/Master/texmf-dist/tex/context/base/pack-box.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-box.mkiv
@@ -147,7 +147,8 @@
\unexpanded\def\resetcollector[#1]%
{\ifcsname\??collectorbox#1\endcsname
- \global\setbox\csname\??collectorbox#1\endcsname\emptybox
+ %\global\setbox\csname\??collectorbox#1\endcsname\emptybox
+ \global\setbox\lastnamedcs\emptybox
\fi}
\newconditional\c_pack_boxes_collector_valid_box
@@ -158,7 +159,8 @@
{\edef\currentcollector{#1}%
\ifcsname\??collectorbox\currentcollector\endcsname
\settrue\c_pack_boxes_collector_valid_box
- \expandafter\let\expandafter\b_pack_boxes_collector\csname\??collectorbox\currentcollector\endcsname
+ %\expandafter\let\expandafter\b_pack_boxes_collector\csname\??collectorbox\currentcollector\endcsname
+ \expandafter\let\expandafter\b_pack_boxes_collector\lastnamedcs
\else
\setfalse\c_pack_boxes_collector_valid_box
\writestatus{collector}{unknown collector \currentcollector}%
@@ -209,14 +211,14 @@
\def\pack_boxes_collector_check_corner#1%
{\ifcsname\??collectorcorners#1\endcsname
- \csname\??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\hbox
+ \setbox\nextbox\hpack
{\rotate
[\c!location=\v!high,
\c!rotation=\p_collector_rotation]
@@ -227,24 +229,24 @@
\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\hbox
- {\alignedbox[\collectorparameter\c!location]\vbox{\box\nextbox}}%
+ \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\hbox
+ \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\hbox
+ \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\hbox
+ \global\setbox\b_pack_boxes_collector\hpack
{\box\b_pack_boxes_collector
\kern\dimexpr
-\d_pack_layers_x_size
@@ -253,13 +255,13 @@
-\boxhdisplacement
\fi
\relax
- \lower\d_pack_layers_y_position\hbox
+ \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\hbox
+ \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
@@ -273,7 +275,7 @@
\ifconditional\c_pack_boxes_collector_valid_box
\edef\p_collector_state{\collectorparameter\c!state}%
\ifx\p_collector_state\v!stop \else
- \vbox{\hbox{\raise
+ \vpack{\hpack{\raise
\dp\b_pack_boxes_collector
\ifx\p_collector_state\v!repeat\copy\else\box\fi\b_pack_boxes_collector}}%
\fi
@@ -391,6 +393,7 @@
\unexpanded\def\placelayeredtext[#1]%
{\bgroup
\edef\currentlayeredtext{#1}%
+ \checklayeredtextparent % bonus
\dodoubleempty\pack_layeredtexts_place}
\def\pack_layeredtexts_place[#1][#2]#3% layersettings content(framed)settings content
@@ -587,13 +590,13 @@
\def\pack_boxes_bleed_finish
{\doif{\bleedingparameter\c!page}\v!yes
{\setbox\nextbox\topskippedbox{\box\nextbox}}%
- \setbox\nextbox\hbox to \scratchwidth
+ \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\hbox
- {\lower\bleedheight\hbox{\raise\scratchheight\box\nextbox}}%
+ \setbox\nextbox\hpack
+ {\lower\bleedheight\hpack{\raise\scratchheight\box\nextbox}}%
\fi
\wd\nextbox\scratchwidth
\ht\nextbox\scratchheight
@@ -657,11 +660,11 @@
\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]} % diffrent kind of location
+ \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]} % diffrent kind of location
+ \normalframedwithsettings[\c!location=\v!normal,#2]} % different kind of location
\def\pack_layers_set_framed_t[#1][#2][#3]%
{\setlayer[#1][#2]%
@@ -762,10 +765,18 @@
\def\pack_boxes_aligned_box[#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish}
\def\pack_boxes_aligned [#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish\hbox}
+% \def\pack_boxes_aligned_finish
+% {\csname\??alignedboxes
+% \ifcsname\??alignedboxes\serializedcommalist\endcsname\serializedcommalist\else\v!middle\fi
+% \endcsname{\flushnextbox}%
+% \egroup}
+
\def\pack_boxes_aligned_finish
- {\csname\??alignedboxes
- \ifcsname\??alignedboxes\serializedcommalist\endcsname\serializedcommalist\else\v!middle\fi
- \endcsname{\flushnextbox}%
+ {\ifcsname\??alignedboxes\serializedcommalist\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\middlebox
+ \fi{\flushnextbox}%
\egroup}
\letvalue{\??alignedboxes }\middlebox
@@ -887,11 +898,11 @@
\fi
\fi
\ifdone
- \setbox\nextbox\vbox
+ \setbox\nextbox\vpack
{\forgetall % already done
\offinterlineskip
\kern\scratchtopoffset
- \hbox
+ \hpack
{\kern\scratchleftoffset
\box\nextbox
\kern\scratchrightoffset}%
@@ -903,13 +914,13 @@
\scratchheight\offsetboxparameter\c!height
\scratchdepth \offsetboxparameter\c!depth
\edef\p_location{\offsetboxparameter\c!location}%
- \setbox\nextbox\hbox
+ \setbox\nextbox\hpack
{\kern\scratchxposition
- \lower\scratchyposition\hbox
+ \lower\scratchyposition\hpack
{\ifx\p_location\empty
\box\nextbox
\else
- \alignedbox[\p_location]\hbox{\box\nextbox}%
+ \alignedbox[\p_location]\hpack{\box\nextbox}%
\fi}}%
\wd\nextbox\scratchwidth
\ht\nextbox\scratchheight
@@ -954,8 +965,8 @@
\def\pack_boxes_tabbed#1#2#3#4%
{\dontleavehmode
\begingroup
- \setbox\scratchbox\hbox{#3}%
- \hbox to \wd\scratchbox{#1#4#2}%
+ \setbox\scratchbox\hpack{#3}%
+ \hpack to \wd\scratchbox{#1#4#2}%
\endgroup}
\unexpanded\def\ltabbed{\pack_boxes_tabbed\relax\hss}
@@ -967,7 +978,7 @@
% to be documented
\unexpanded\def\phantombox[#1]% == \framed[\c!empty=\v!yes,\c!offset=\v!overlay,#1]{}
- {\hbox\bgroup
+ {\hpack\bgroup
\letdummyparameter\c!width \zeropoint
\letdummyparameter\c!height\zeropoint
\letdummyparameter\c!depth \zeropoint
@@ -1017,21 +1028,21 @@
% to be considered: methods
\ifcase\scratchcounter
\or % x and y
- \setbox\nextbox\hbox{\dorecurse\scratchnx{\copy\nextbox}}%
- \setbox\nextbox\vbox{\dorecurse\scratchny{\copy\nextbox\endgraf}}%
+ \setbox\nextbox\hpack{\dorecurse\scratchnx{\copy\nextbox}}%
+ \setbox\nextbox\vpack{\dorecurse\scratchny{\copy\nextbox\endgraf}}%
\or % x
- \setbox\nextbox\hbox{\dorecurse\scratchnx{\copy\nextbox}}%
+ \setbox\nextbox\hpack{\dorecurse\scratchnx{\copy\nextbox}}%
\or % y
- \setbox\nextbox\vbox{\dorecurse\scratchny{\copy\nextbox\endgraf}}%
+ \setbox\nextbox\vpack{\dorecurse\scratchny{\copy\nextbox\endgraf}}%
\fi
\fi
\ifdim\wd\nextbox>\scratchwidth
- \setbox\nextbox\hbox to \scratchwidth{\hss\box\nextbox\hss}%
- \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\scratchwidth,\c!height=\the\ht\nextbox]{\box\nextbox}}}%
+ \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\vbox to \scratchheight{\vss\box\nextbox\vss}%
- \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=\the\scratchheight]{\box\nextbox}}}%
+ \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}
@@ -1046,7 +1057,7 @@
\def\pack_boxes_background_image_fill
{\offinterlineskip
- \setbox\nextbox\hbox\bgroup
+ \setbox\nextbox\hpack\bgroup
\ifdim\scratchwidth>\scratchheight
\scale[\c!width=\the\scratchwidth]{\box\nextbox}%
\else
@@ -1054,7 +1065,7 @@
\fi
\egroup
\ifdim\wd\nextbox>\scratchwidth
- \setbox\nextbox\hbox to \scratchwidth
+ \setbox\nextbox\hpack to \scratchwidth
{\ifcase\scratchcounter
\hss\box\nextbox\hss
\or
@@ -1064,10 +1075,11 @@
\else
\hss\box\nextbox\hss
\fi}%
- \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\scratchwidth,\c!height=\the\ht\nextbox]{\box\nextbox}}}%
+ \setbox\nextbox\hpack
+ {\normalexpanded{\clip[\c!width=\the\scratchwidth,\c!height=\the\ht\nextbox]{\box\nextbox}}}%
\fi
\ifdim\ht\nextbox>\scratchheight
- \setbox\nextbox\vbox to \scratchheight
+ \setbox\nextbox\vpack to \scratchheight
{\ifcase\scratchcounter
\vss\box\nextbox\vss
\or
@@ -1077,7 +1089,8 @@
\else
\vss\box\nextbox\vss
\fi}%
- \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=\the\scratchheight]{\box\nextbox}}}%
+ \setbox\nextbox\hpack
+ {\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=\the\scratchheight]{\box\nextbox}}}%
\fi
\box\nextbox
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/pack-com.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-com.mkiv
index b734d602858..c9c3bab4b9e 100644
--- a/Master/texmf-dist/tex/context/base/pack-com.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-com.mkiv
@@ -76,20 +76,60 @@
\global\resetsystemmode{combination}%
\to \everyinsidefloat
-\newcount\c_pack_combinations_x
-\newcount\c_pack_combinations_n
-\newcount\c_pack_combinations_max
-\newbox \b_pack_combinations_captions
-\newbox \b_pack_combinations_content
-\newbox \b_pack_combinations_caption
-\newbox \b_pack_combinations_temp % global
+\newcount\c_pack_combinations_nesting % local
+\newcount\c_pack_combinations_x % global
+\newcount\c_pack_combinations_n % global
+\newcount\c_pack_combinations_max % global
+\newbox \b_pack_combinations_captions % global
+\newbox \b_pack_combinations_temp % global
+\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_n_saved
+\newcount\c_pack_combinations_max_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_n_saved \c_pack_combinations_n
+ \c_pack_combinations_max_saved\c_pack_combinations_max
+ \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
+ \global\setsystemmode{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_n \c_pack_combinations_n_saved
+ \global\c_pack_combinations_max\c_pack_combinations_max_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
+ \global\resetsystemmode{combination}% why global
+ \fi
+ \advance\c_pack_combinations_nesting\minusone}
+
\definelabel
[\v!combination] % handy for configuring
[\c!numberconversion=\v!character,
@@ -143,6 +183,7 @@
\unexpanded\def\startcombination
{\bgroup % so we can grab a group
+ \pack_combinations_push
\dodoubleempty\pack_combinations_start}
% formally ok:
@@ -181,14 +222,13 @@
{\bgroup\normalexpanded{\egroup{}\ntimes{{}{}}\c_pack_combinations_n}% brr
\dostoptagged
\egroup
+ \pack_combinations_pop
\egroup}
\newtoks\everycombination
\def\pack_combinations_start[#1][#2]% needs a cleanup, also nx ny (pretty old, this one)
- {\global\setsystemmode{combination}%
- %
- \edef\currentcombination{#1}%
+ {\edef\currentcombination{#1}%
\edef\currentcombinationspec{#2}%
\ifx\currentcombinationspec\empty
\doifelseassignment{#1}%
@@ -339,7 +379,7 @@
\def\pack_combinations_pickup_package_pair % we need to store the caption row
{\vbox
{\forgetall
- \m_pack_combinations_valigner{\copy\b_pack_combinations_content}%
+ \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_n>\plusone
@@ -382,8 +422,8 @@
\egroup}
\def\pack_combinations_save_caption
- {\global\setbox\b_pack_combinations_captions\hbox
- {\hbox{\box\b_pack_combinations_caption}%
+ {\global\setbox\b_pack_combinations_captions\hpack
+ {\hpack{\box\b_pack_combinations_caption}%
\unhbox\b_pack_combinations_captions}}
\def\pack_combinations_flush_captions
@@ -401,7 +441,7 @@
\crcr}
\def\pack_combinations_flush_captions_yes
- {\global\setbox\b_pack_combinations_captions\hbox
+ {\global\setbox\b_pack_combinations_captions\hpack
{\unhbox\b_pack_combinations_captions
\global\setbox\b_pack_combinations_temp\lastbox}%
\box\b_pack_combinations_temp
@@ -763,8 +803,8 @@
\setvalue{\??pairedboxalign\v!bottom}{\getvalue{\??pairedboxalign\v!low }}
\setvalue{\??pairedboxalign \v!top}{\getvalue{\??pairedboxalign\v!high}}
-\def\pack_pairedbox_valign#1{\setbox#1\vbox to \s_pack_pairedboxes_size{\pack_pairedboxes_align_t\box#1\pack_pairedboxes_align_b}}
-\def\pack_pairedbox_halign#1{\setbox#1\hbox to \s_pack_pairedboxes_size{\pack_pairedboxes_align_l\box#1\pack_pairedboxes_align_r}}
+\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
@@ -822,7 +862,7 @@
\fi}
\def\pack_pairedboxes_after
- {\setbox\b_pack_pairedboxes_second\vbox
+ {\setbox\b_pack_pairedboxes_second\vpack
{\ifnum\p_n>\plusone
\rigidcolumnbalance\nextbox
\else
@@ -856,7 +896,7 @@
\egroup}
\def\pack_pairedboxes_pack_vertical
- {\dontleavehmode\vbox\bgroup
+ {\dontleavehmode\vpack\bgroup
\forgetall
\s_pack_pairedboxes_size\wd
\ifdim\wd\b_pack_pairedboxes_first>\wd\b_pack_pairedboxes_second
@@ -875,7 +915,7 @@
\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\vbox to \s_pack_pairedboxes_size
+ \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
@@ -896,10 +936,14 @@
\unexpanded\def\placeontopofeachother{\bgroup\dowithnextboxcs\pack_topofeachother_one\hbox}
\unexpanded\def\placesidebyside {\bgroup\dowithnextboxcs\pack_sidebyside_one \hbox}
-\def\pack_topofeachother_one{\bgroup\setbox0\box\nextbox\dowithnextboxcs\pack_topofeachother_two\hbox}
-\def\pack_sidebyside_one {\bgroup\setbox0\box\nextbox\dowithnextboxcs\pack_sidebyside_two \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{\setbox2\box\nextbox\halign{\hss##\hss\cr\box0\cr\box2\cr}\egroup\egroup}
-\def\pack_sidebyside_two {\setbox2\box\nextbox\valign{\vss##\vss\cr\box0\cr\box2\cr}\egroup\egroup}
+\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/Master/texmf-dist/tex/context/base/pack-cut.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-cut.mkiv
index 63f4524a8dd..ffd0251d5ae 100644
--- a/Master/texmf-dist/tex/context/base/pack-cut.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-cut.mkiv
@@ -93,7 +93,7 @@
{\scratchdimen\dimexpr\cutmarklength/2\relax
\scratchskip \ifx\cutmarkhoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkhoffset\fi
\normalvss
- \hbox to \d_pack_cutmarks_width
+ \hpack to \d_pack_cutmarks_width
{\llap{\copy\scratchbox\normalhskip\scratchskip}%
\normalhskip\scratchdimen\hss\infofont#1\hss\normalhskip\scratchdimen
\rlap{\normalhskip\scratchskip\copy\scratchbox}}%
@@ -116,7 +116,7 @@
{\setbox\scratchbox\normalhbox{\horizontalcuts}%
\scratchskip\ifx\cutmarkvoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkvoffset\fi
\tlap{\copy\scratchbox\normalvskip\scratchskip}%
- \hbox to \d_pack_cutmarks_width
+ \hpack to \d_pack_cutmarks_width
{\scratchskip\ifx\cutmarkhoffset\empty\cutmarkoffset\scratchdimen\else\cutmarkhoffset\fi
\setbox\scratchbox\normalhbox{\verticalcuts}%
\llap{\copy\scratchbox\normalhskip\scratchskip}%
diff --git a/Master/texmf-dist/tex/context/base/pack-fen.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-fen.mkiv
index 04a36fa462c..7bc8211440c 100644
--- a/Master/texmf-dist/tex/context/base/pack-fen.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-fen.mkiv
@@ -63,24 +63,24 @@
\def\whateverleftframe#1%
{\setinstalledframedimensions
- \setbox\b_framed_rendered\vbox to \d_overlay_height{\vss#1\vss}%
- \setbox\b_framed_rendered\hbox to \zeropoint{\box\b_framed_rendered\hss}%
+ \setbox\b_framed_rendered\vpack to \d_overlay_height{\vss#1\vss}%
+ \setbox\b_framed_rendered\hpack to \zeropoint{\box\b_framed_rendered\hss}%
\ht\b_framed_rendered\zeropoint
\dp\b_framed_rendered\zeropoint
\box\b_framed_rendered}
\def\whateverrightframe#1%
{\setinstalledframedimensions
- \setbox\b_framed_rendered\vbox to \d_overlay_height{\vss#1\vss}%
- \setbox\b_framed_rendered\hbox to \zeropoint{\hss\box\b_framed_rendered}%
+ \setbox\b_framed_rendered\vpack to \d_overlay_height{\vss#1\vss}%
+ \setbox\b_framed_rendered\hpack to \zeropoint{\hss\box\b_framed_rendered}%
\ht\b_framed_rendered\zeropoint
\dp\b_framed_rendered\zeropoint
\box\b_framed_rendered}
\def\whatevertopframe#1%
{\setinstalledframedimensions
- \setbox\b_framed_rendered\hbox to \d_overlay_width{\hss#1\hss}%
- \setbox\b_framed_rendered\vbox to \zeropoint{\box\b_framed_rendered\vss}%
+ \setbox\b_framed_rendered\hpack to \d_overlay_width{\hss#1\hss}%
+ \setbox\b_framed_rendered\vpack to \zeropoint{\box\b_framed_rendered\vss}%
\ht\b_framed_rendered\zeropoint
\dp\b_framed_rendered\zeropoint
\box\b_framed_rendered
@@ -88,8 +88,8 @@
\def\whateverbottomframe#1%
{\setinstalledframedimensions
- \setbox\b_framed_rendered\hbox to \d_overlay_width{\hss#1\hss}%
- \setbox\b_framed_rendered\vbox to \zeropoint{\vss\box\b_framed_rendered}%
+ \setbox\b_framed_rendered\hpack to \d_overlay_width{\hss#1\hss}%
+ \setbox\b_framed_rendered\vpack to \zeropoint{\vss\box\b_framed_rendered}%
\ht\b_framed_rendered\zeropoint
\dp\b_framed_rendered\zeropoint
\box\b_framed_rendered}
diff --git a/Master/texmf-dist/tex/context/base/pack-lyr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-lyr.mkiv
index a847dec67be..61ed1e64b75 100644
--- a/Master/texmf-dist/tex/context/base/pack-lyr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-lyr.mkiv
@@ -180,7 +180,8 @@
\def\pack_layers_reset_box#1%
{\ifcsname\??layerbox#1\endcsname
- \global\setbox\csname\??layerbox#1\endcsname\emptybox
+ %\global\setbox\csname\??layerbox#1\endcsname\emptybox
+ \global\setbox\lastnamedcs\emptybox
\fi}
\def\resetlayer[#1]%
@@ -208,11 +209,8 @@
{\edef\currentlayerwidth {\thelayerwidth {#2#1}}%
\edef\currentlayerheight{\thelayerheight{#2#1}}}
-% \def\thelayerwidth #1{\the\wd\executeifdefined{\??layerbox#1}\emptybox}
-% \def\thelayerheight#1{\the\ht\executeifdefined{\??layerbox#1}\emptybox}
-
-\def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\csname\??layerbox#1\endcsname\else\zeropoint\fi}
-\def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\csname\??layerbox#1\endcsname\else\zeropoint\fi}
+\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}
\unexpanded\def\setlayer
{\dotripleempty\pack_layers_set}
@@ -222,7 +220,7 @@
\edef\currentlayer{#1}%
\edef\p_pack_layers_state{\layerparameter\c!state}%
\ifx\p_pack_layers_state\v!stop
- \dowithnextboxcs\egroup\hbox
+ \dowithnextboxcs\egroup\hbox % no pack ?
\else\ifthirdargument
\pack_layers_set_indeed[#1][#2][#3]%
\else
@@ -272,19 +270,6 @@
% todo: get position data in one go
-% \def\pack_layers_set_last_position_yes
-% {\edef\m_pack_layers_page{\MPp{\??layerposition\the\c_pack_layers_current_data}}%
-% \xdef\lastlayerxpos{\the\dimexpr-\MPx{\??layerposition\m_pack_layers_target\currentlayer:\m_pack_layers_page}+\MPx{\??layerposition\the\c_pack_layers_current_data}\relax}%
-% \xdef\lastlayerypos{\the\dimexpr \MPy{\??layerposition\m_pack_layers_target\currentlayer:\m_pack_layers_page}-\MPy{\??layerposition\the\c_pack_layers_current_data}\relax}%}
-% \d_pack_layers_x_position\lastlayerxpos
-% \d_pack_layers_y_position\lastlayerypos
-% \begingroup
-% \edef\currentlayer{\currentlayer\m_pack_layers_page}%
-% \global\letlayerparameter\c!position\v!yes
-% \endgroup
-% \global\letlayerparameter\c!state\v!start % needed ?
-% \setbox\b_layers\vbox to \d_pack_layers_y_size{\hbox to \d_pack_layers_x_size{\xypos{\??layerposition\the\c_pack_layers_current_data}\hss}\vss}}
-
\def\pack_layers_set_last_position_yes % target: left|right
{% this will become one call
\edef\m_pack_layers_anchor{\??layerposition\the\c_pack_layers_current_data}%
@@ -302,8 +287,8 @@
% \global\letlayerparameter\c!position\v!yes
% \endgroup
\global\letlayerparameter\c!state\v!start % needed ?
- \setbox\b_layers\vbox to \d_pack_layers_y_size
- {\hbox to \d_pack_layers_x_size
+ \setbox\b_layers\vpack to \d_pack_layers_y_size
+ {\hpack to \d_pack_layers_x_size
{\xypos\m_pack_layers_anchor\hss}%
\vss}}
@@ -335,7 +320,7 @@
\edef\p_pack_layers_preset {\layerparameter\c!preset }%
%
\ifcsname\??layerpreset\p_pack_layers_preset\endcsname
- \csname\??layerpreset\p_pack_layers_preset\endcsname
+ \lastnamedcs
\setupcurrentlayer[#1]% postroll
\fi
%
@@ -365,7 +350,8 @@
\fi
\ifx\p_pack_layers_rotation\empty \else
% use direct call
- \setbox\nextbox\hbox{\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\box\nextbox}}%
+ \setbox\nextbox\hpack
+ {\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\box\nextbox}}%
\fi
\d_pack_layers_x_offset\p_pack_layers_sx\dimexpr
\ifx\p_pack_layers_hoffset\v!max\d_pack_layers_x_size\else\p_pack_layers_hoffset\fi+\p_pack_layers_offset+\p_pack_layers_dx
@@ -392,7 +378,7 @@
\gsetboxllx\layerpagebox\zeropoint
\gsetboxlly\layerpagebox\zeropoint
\fi
- \global\setbox\layerpagebox\vbox %to \layerparameter\c!height % new, otherwise no negative y possible
+ \global\setbox\layerpagebox\vpack %to \layerparameter\c!height % new, otherwise no negative y possible
{\offinterlineskip
\ifvoid\layerpagebox
\let\lastlayerwidth \zeropoint
@@ -416,7 +402,8 @@
\ht\nextbox\strutheight
\dp\nextbox\strutdepth
\else
- \setbox\nextbox\hbox{\alignedbox[\p_pack_layers_location]\vbox{\box\nextbox}}%
+ \setbox\nextbox\hpack
+ {\alignedbox[\p_pack_layers_location]\vpack{\box\nextbox}}%
\fi
\ifnum\p_pack_layers_line=\zerocount\else % no \ifcase, can be negative
\advance\d_pack_layers_y_position\dimexpr\p_pack_layers_line\lineheight+\topskip-\lineheight-\ht\nextbox\relax
@@ -425,7 +412,8 @@
\advance\d_pack_layers_x_position\layoutcolumnoffset\p_pack_layers_column\relax
\fi
\ifx\p_pack_layers_location\v!grid
- \setbox\nextbox\hbox{\alignedbox[rb]\vbox{\box\nextbox}}%
+ \setbox\nextbox\hpack
+ {\alignedbox[rb]\vpack{\box\nextbox}}%
\fi
% ll registration
\scratchdimen\dimexpr\d_pack_layers_x_position+\d_pack_layers_x_offset\relax
@@ -444,7 +432,7 @@
\dp\nextbox\zeropoint
% placement
\hsize\p_pack_layers_width
- \vbox to \p_pack_layers_height \bgroup
+ \vpack to \p_pack_layers_height \bgroup
\smashbox\nextbox
\vskip\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax
\hskip\dimexpr\d_pack_layers_x_position+\d_pack_layers_x_offset\relax
@@ -498,7 +486,8 @@
\def\doifelselayerdata#1%
{\ifcsname\??layerbox#1\endcsname
- \ifvoid\csname\??layerbox#1\endcsname
+ %\ifvoid\csname\??layerbox#1\endcsname
+ \ifvoid\lastnamedcs
\doubleexpandafter\secondoftwoarguments
\else
\doubleexpandafter\firstoftwoarguments
@@ -550,6 +539,8 @@
% \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi
+% todo: pass the layer with \lastnamedcs
+
\def\pack_layers_flush_single
{\startoverlay
{\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}%
@@ -564,66 +555,6 @@
{\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\fi}%
\stopoverlay}
-% \def\pack_layers_flush_indeed#1#2% quite core, so optimized
-% {\begingroup % already grouped
-% \offinterlineskip
-% \edef\p_pack_layers_preset{\layerparameter\c!preset}%
-% \ifcsname\??layerpreset\p_pack_layers_preset\endcsname
-% \csname\??layerpreset\p_pack_layers_preset\endcsname
-% \fi
-% \edef\p_pack_layers_method{\layerparameter\c!method}%
-% \edef\p_pack_layers_option{\layerparameter\c!option}%
-% \ifx\p_pack_layers_option\v!test
-% \settrue\c_pack_layers_trace
-% \traceboxplacementtrue
-% \fi
-% \ifcase#1\relax
-% \setfalse\c_pack_layers_repeated
-% \else
-% \edef\p_pack_layers_position{\layerparameter\c!position}%
-% \ifx\p_pack_layers_position\v!yes
-% \setfalse\c_pack_layers_repeated
-% \else
-% \edef\p_pack_layers_repeat{\layerparameter\c!repeat}%
-% \ifx\p_pack_layers_repeat\v!yes
-% \settrue\c_pack_layers_repeated
-% \else\ifx\p_pack_layers_state\v!repeat
-% \settrue\c_pack_layers_repeated
-% \else
-% \setfalse\c_pack_layers_repeated
-% \fi\fi
-% \fi
-% \fi
-% \chardef\b_layers\csname\??layerbox#2\endcsname % trick
-% % we need to copy in order to retain the negative offsets for a next
-% % stage of additions, i.e. llx/lly accumulate in repeat mode and the
-% % compensation may differ each flush depending on added content
-% \setbox\nextbox
-% \ifx\p_pack_layers_method\v!fit
-% \pack_layers_positioned_box_yes
-% \else
-% \pack_layers_positioned_box_nop
-% \fi
-% % todo: method=offset => overlayoffset right/down (handy for backgrounds with offset)
-% \doifoverlayelse{#2}%
-% {\setlayoutcomponentattribute{\v!layer:#2}}%
-% \resetlayoutcomponentattribute
-% \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \overlayheight \fi \layoutcomponentboxattribute
-% {\hbox \ifx\p_pack_layers_method\v!overlay to \d_overlay_width \fi
-% {\edef\currentlayer{#2\the\realpageno}% local
-% \edef\p_pack_layers_position{\layerparameter\c!position}% local
-% \ifx\p_pack_layers_position\v!yes
-% \xypos{\??layerposition#2:\the\realpageno}%
-% \fi
-% \box\nextbox
-% \hss}%
-% \vss}%
-% \ifconditional\c_pack_layers_repeated\else
-% \gsetboxllx\b_layers\zeropoint
-% \gsetboxlly\b_layers\zeropoint
-% \fi
-% \endgroup}
-
\let\pack_layers_top_fill \relax
\let\pack_layers_bottom_fill\vss
@@ -632,7 +563,7 @@
\offinterlineskip
\edef\p_pack_layers_preset{\layerparameter\c!preset}%
\ifcsname\??layerpreset\p_pack_layers_preset\endcsname
- \csname\??layerpreset\p_pack_layers_preset\endcsname
+ \lastnamedcs
\fi
\edef\p_pack_layers_method{\layerparameter\c!method}%
\edef\p_pack_layers_option{\layerparameter\c!option}%
@@ -674,9 +605,9 @@
% we have conflicting demands: some mechanisms want ll anchoring .. I need to figure this out
% an dmaybe we will have 'origin=bottom' or so
\setbox\nextbox
- \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \d_overlay_height \fi \layoutcomponentboxattribute
+ \ifx\p_pack_layers_option\v!test \ruledvbox \else \vpack \fi \ifx\p_pack_layers_method\v!overlay to \d_overlay_height \fi \layoutcomponentboxattribute
{\pack_layers_top_fill
- \hbox \ifx\p_pack_layers_method\v!overlay to \d_overlay_width \fi
+ \hpack \ifx\p_pack_layers_method\v!overlay to \d_overlay_width \fi
{\box\nextbox
\hss}%
\pack_layers_bottom_fill}%
@@ -698,7 +629,7 @@
\endgroup}
\def\pack_layers_positioned_box_yes
- {\vbox
+ {\vpack
{\vskip-\getboxlly\b_layers
\hskip-\getboxllx\b_layers
\hsize-\dimexpr\getboxllx\b_layers-\wd\b_layers\relax
@@ -732,7 +663,7 @@
% \composedlayer{#1}}}
\unexpanded\def\tightlayer[#1]%
- {\hbox
+ {\hpack
{\def\currentlayer{#1}% todo: left/right
\setbox\nextbox\emptybox
\d_overlay_width \layerparameter\c!width
@@ -807,7 +738,7 @@
\unexpanded\def\settextpagecontent#1#2#3% #2 and #3 will disappear
{\doifelselayerdata{OTRTEXT}
- {\setbox#1\hbox to \makeupwidth
+ {\setbox#1\hpack to \makeupwidth
{\startoverlay
{\tightlayer[OTRTEXT]} % first, otherwise problems with toc
{\normalsettextpagecontent{#1}{#2}{#3}\box#1}
diff --git a/Master/texmf-dist/tex/context/base/pack-mis.mkvi b/Master/texmf-dist/tex/context/base/mkiv/pack-mis.mkvi
index 420f9440a2f..420f9440a2f 100644
--- a/Master/texmf-dist/tex/context/base/pack-mis.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-mis.mkvi
diff --git a/Master/texmf-dist/tex/context/base/pack-mrl.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv
index a97c9e6f8c8..649b29fa6e6 100644
--- a/Master/texmf-dist/tex/context/base/pack-mrl.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-mrl.mkiv
@@ -57,9 +57,9 @@
\fi\fi
\useblackrulesstyleandcolor\c!style\c!color
\vrule
- \s!width \ifx\p_width \v!max\emwidth\else\p_width \fi
- \s!height\ifx\p_height\v!max\strutht\else\p_height\fi
- \s!depth \ifx\p_depth \v!max\strutdp\else\p_depth \fi
+ \ifx\p_width \v!max\s!width \emwidth\else\ifx\p_width \empty\else\s!width \p_width \fi\fi
+ \ifx\p_height\v!max\s!height\strutht\else\ifx\p_height\empty\else\s!height\p_height\fi\fi
+ \ifx\p_depth \v!max\s!depth \strutdp\else\ifx\p_depth \empty\else\s!depth \p_depth \fi\fi
\egroup}
\setupblackrules
@@ -346,26 +346,35 @@
\def\pack_thinrules[#1]%
{\bgroup
\setupcurrentthinrules[#1]%
- \assignvalue{\directthinrulesparameter\c!interlinespace}\m_pack_thinrules_interlinespace{1.0}{1.5}{2.0}%
- \spacing\m_pack_thinrules_interlinespace
- \edef\p_after {\directthinrulesparameter\c!after}%
- \edef\p_inbetween{\directthinrulesparameter\c!inbetween}%
- \directthinrulesparameter\c!before
\scratchcounter\directthinrulesparameter\c!n\relax
- \dorecurse\scratchcounter
- {\ifnum\recurselevel=\scratchcounter \penalty500 \else
- \ifnum\recurselevel=\plustwo \penalty500 \fi\fi
- \thinrule
- \ifnum\recurselevel<\scratchcounter\relax
- % test needed, else messed up whitespace
- \ifx\p_inbetween\empty
- \softbreak % \ifhmode \hskip \parfillskip \break \fi
- \else
- \endgraf
- \nowhitespace
- \p_inbetween
- \fi
- \fi}%
+ \ifcase\scratchcounter
+ % nothing, not even before/after
+ \let\p_after\relax
+ \else
+ \assignvalue{\directthinrulesparameter\c!interlinespace}\m_pack_thinrules_interlinespace{1.0}{1.5}{2.0}%
+ \spacing\m_pack_thinrules_interlinespace
+ \edef\p_after {\directthinrulesparameter\c!after}%
+ \edef\p_inbetween{\directthinrulesparameter\c!inbetween}%
+ \directthinrulesparameter\c!before
+ \ifcase\scratchcounter\or
+ \thinrule
+ \else
+ \dorecurse\scratchcounter
+ {\ifnum\recurselevel=\scratchcounter \directvspacing\v!samepage \else % \penalty500
+ \ifnum\recurselevel=\plustwo \directvspacing\v!samepage \fi\fi % \penalty500
+ \thinrule
+ \ifnum\recurselevel<\scratchcounter\relax
+ % test needed, else messed up whitespace
+ \ifx\p_inbetween\empty
+ \softbreak % \ifhmode \hskip \parfillskip \break \fi
+ \else
+ \endgraf
+ \nowhitespace
+ \p_inbetween
+ \fi
+ \fi}%
+ \fi
+ \fi
\ifx\p_after\empty
\carryoverpar\egroup
\else
diff --git a/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua
new file mode 100644
index 00000000000..8a1af2b7049
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.lua
@@ -0,0 +1,262 @@
+if not modules then modules = { } end modules ['pack-obj'] = {
+ version = 1.001,
+ comment = "companion to pack-obj.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>We save object references in the main utility table. jobobjects are
+reusable components.</p>
+--ldx]]--
+
+local context = context
+local codeinjections = backends.codeinjections
+
+local ctx_doifelse = commands.doifelse
+
+local nuts = nodes.nuts
+
+local setlink = nuts.setlink
+local getlist = nuts.getlist
+local setbox = nuts.setbox
+
+local new_latelua = nuts.pool.latelua
+
+local settexdimen = tokens.setters.dimen
+local settexcount = tokens.setters.count
+
+local gettexbox = tokens.getters.box
+local gettexdimen = tokens.getters.dimen
+local gettexcount = tokens.getters.count
+
+local implement = interfaces.implement
+local setmacro = interfaces.setmacro
+
+local allocate = utilities.storage.allocate
+
+local collected = allocate()
+local tobesaved = allocate()
+
+local jobobjects = {
+ collected = collected,
+ tobesaved = tobesaved,
+}
+
+job.objects = jobobjects
+
+local function initializer()
+ collected = jobobjects.collected
+ tobesaved = jobobjects.tobesaved
+end
+
+job.register('job.objects.collected', tobesaved, initializer, nil)
+
+local function saveobject(tag,number,page)
+ local t = { number, page }
+ tobesaved[tag], collected[tag] = t, t
+end
+
+local function setobject(tag,number,page)
+ collected[tag] = { number, page }
+end
+
+local function getobject(tag)
+ return collected[tag] or tobesaved[tag]
+end
+
+local function getobjectnumber(tag,default)
+ local o = collected[tag] or tobesaved[tag]
+ return o and o[1] or default
+end
+
+local function getobjectpage(tag,default)
+ local o = collected[tag] or tobesaved[tag]
+ return o and o[2] or default
+end
+
+jobobjects.save = saveobject
+jobobjects.set = setobject
+jobobjects.get = getobject
+jobobjects.number = getobjectnumber
+jobobjects.page = getobjectpage
+
+-- implement {
+-- name = "saveobject",
+-- actions = saveobject
+-- }
+--
+-- implement {
+-- name = "setobject",
+-- actions = setobject,
+-- arguments = { "string", "integer", "integer" }
+-- }
+--
+-- implement {
+-- name = "objectnumber",
+-- actions = { getobjectnumber, context },
+-- arguments = { "string", "string" },
+-- }
+--
+-- implement {
+-- name = "objectpage",
+-- actions = { getobjectpage, context },
+-- arguments = { "string", "string" },
+-- }
+--
+-- implement {
+-- name = "doifelseobjectreferencefound",
+-- actions = { getobject, commands.doifelse },
+-- arguments = "string"
+-- }
+
+-- if false then
+-- -- we can flush the inline ref ourselves now if we want
+-- local flush = new_latelua("pdf.flushxform("..index..")")
+-- flush.next = list
+-- next.prev = flush
+-- end
+
+local data = table.setmetatableindex("table")
+
+objects = {
+ data = data,
+ n = 0,
+}
+
+function objects.register(ns,id,b,referenced)
+ objects.n = objects.n + 1
+ nodes.handlers.finalize(gettexbox(b))
+ data[ns][id] = {
+ codeinjections.registerboxresource(b), -- a box number
+ gettexdimen("objectoff"),
+ referenced
+ }
+end
+
+function objects.restore(ns,id)
+ local d = data[ns][id]
+ if d then
+ local index = d[1]
+ local offset = d[2]
+ local status = d[3]
+ local hbox = codeinjections.restoreboxresource(index) -- a nut !
+ if status then
+ local list = getlist(hbox)
+ local page = new_latelua(function()
+ saveobject(ns .. "::" .. id,index,gettexcount("realpageno"))
+ end)
+ setlink(list,page)
+ end
+ setbox("objectbox",hbox)
+ settexdimen("objectoff",offset)
+ else
+ setbox("objectbox",nil)
+ settexdimen("objectoff",0)
+ end
+end
+
+function objects.dimensions(index)
+ local d = data[ns][id]
+ if d then
+ return codeinjections.boxresourcedimensions(d[1])
+ else
+ return 0, 0, 0
+ end
+end
+
+function objects.reference(ns,id)
+ local d = data[ns][id]
+ if d then
+ return d[1]
+ else
+ return getobjectnumber(ns .."::" .. id,0)
+ end
+end
+
+function objects.page(ns,id)
+ return getobjectpage(ns .."::" .. id,gettexcount("realpageno"))
+end
+
+function objects.found(ns,id)
+ return data[ns][id]
+end
+
+implement {
+ name = "registerreferencedobject",
+ arguments = { "string", "string", "integer", true },
+ actions = objects.register,
+}
+
+implement {
+ name = "registerobject",
+ arguments = { "string", "string", "integer" },
+ actions = objects.register,
+}
+
+implement {
+ name = "restoreobject",
+ arguments = { "string", "string" },
+ actions = objects.restore,
+}
+
+implement {
+ name = "doifelseobject",
+ arguments = { "string", "string" },
+ actions = function(ns,id)
+ ctx_doifelse(data[ns][id])
+ -- ctx_doifelse(objects.reference(ns,id))
+ end,
+}
+
+implement {
+ name = "doifelseobjectreference",
+ arguments = { "string", "string" },
+ actions = function(ns,id)
+ -- ctx_doifelse(data[ns][id])
+ ctx_doifelse(objects.reference(ns,id))
+ end,
+}
+
+implement {
+ name = "getobjectreference",
+ arguments = { "string", "string", "csname" },
+ actions = function(ns,id,target)
+ setmacro(target,objects.reference(ns,id),"global")
+ end
+}
+
+implement {
+ name = "getobjectreferencepage",
+ arguments = { "string", "string", "csname" },
+ actions = function(ns,id,target)
+ setmacro(target,objects.page(ns,id),"global")
+ end
+}
+
+implement {
+ name = "getobjectdimensions",
+ arguments = { "string", "string" },
+ actions = function(ns,id)
+ local o = data[ns][id]
+ local w, h, d = 0, 0, 0
+ if d then
+ w, h, d = codeinjections.boxresourcedimensions(o[1])
+ end
+ settexdimen("objectwd",w or 0)
+ settexdimen("objectht",h or 0)
+ settexdimen("objectdp",d or 0)
+ settexdimen("objectoff",o[2])
+ end
+}
+
+-- for the moment here:
+
+implement {
+ name = "registerbackendsymbol",
+ arguments = { "string", "integer" },
+ actions = function(...)
+ codeinjections.registersymbol(...)
+ end
+}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/pack-obj.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.mkiv
new file mode 100644
index 00000000000..23608846d2d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-obj.mkiv
@@ -0,0 +1,162 @@
+%D \module
+%D [ file=pack-obj,
+%D version=1998.01.15,
+%D title=\CONTEXT\ Packaging Macros,
+%D subtitle=Objects,
+%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 / Objects}
+
+\unprotect
+
+\registerctxluafile{pack-obj}{1.001}
+
+%D \macros
+%D {setobject,getobject,ifinobject}
+%D
+%D Boxes can be considered reuable objects. Traditionally once passed
+%D to the \DVI\ file, such objects cannot be reused. In \PDF\ however,
+%D reusing is possible and sometimes even a necessity. Therefore,
+%D \CONTEXT\ supports reusable objects and \LUATEX\ has native support
+%D for so called box resources.
+%D
+%D The first application of objects in \CONTEXT\ concerned \METAPOST\
+%D graphics and fill||in form fields. Reusing resources can save lots
+%D of bytes and sometimes also runtime.
+%D
+%D \starttyping
+%D \setobject{class}{name}\somebox{}
+%D \getobject{class}{name}
+%D \stoptyping
+%D
+%D Here \type {\somebox} can be whatever box specification suits \TEX.
+%D Although the implementation in \MKIV\ is somewhat different the
+%D principles have not changed.
+
+\installcorenamespace {objects}
+
+\newif \ifinobject
+\newbox \objectbox
+
+\def\objectoffset{1cm}
+
+\newdimen\objectoff \def\objectmargin{\the\objectoff}
+\newdimen\objectwd \def\objectwidth {\the\objectwd}
+\newdimen\objectht \def\objectheight{\the\objectht}
+\newdimen\objectdp \def\objectdepth {\the\objectdp}
+
+% If I have time I will use the unreferenced variant for e.g. mp reuse.
+
+% todo formmargin per obj
+
+\unexpanded\def\setreferencedobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
+\unexpanded\def\settightreferencedobject #1#2{\begingroup\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_yes{#1}{#2}}}
+\unexpanded\def\setunreferencedobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
+\unexpanded\def\settightunreferencedobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\dowithnextbox{\pack_objects_set_nop{#1}{#2}}}
+
+\let\setobject \setreferencedobject
+\let\settightobject\settightreferencedobject
+
+\unexpanded\def\pack_objects_set_yes#1#2%
+ {\ifdim\objectoff>\zeropoint\relax
+ \pack_objects_package
+ \else
+ \setbox\objectbox\box\nextbox
+ \fi
+ \clf_registerreferencedobject{#1}{#2}\objectbox
+ \endgroup}
+
+\unexpanded\def\pack_objects_set_nop#1#2%
+ {\ifdim\objectoff>\zeropoint\relax
+ \pack_objects_package
+ \else
+ \setbox\objectbox\box\nextbox
+ \fi
+ \clf_registerobject{#1}{#2}\objectbox
+ \endgroup}
+
+\def\pack_objects_package
+ {\objectwd\dimexpr\wd\nextbox+2\objectoff\relax
+ \objectht\dimexpr\ht\nextbox+ \objectoff\relax
+ \objectdp\dimexpr\dp\nextbox+ \objectoff\relax
+ \setbox\objectbox\hpack
+ {\hskip\objectoff
+ \box\nextbox}%
+ \wd\objectbox\objectwd
+ \ht\objectbox\objectht
+ \dp\objectbox\objectdp}
+
+\def\pack_objects_repackage
+ {\objectwd\dimexpr\wd\objectbox-2\objectoff\relax
+ \objectht\dimexpr\ht\objectbox- \objectoff\relax
+ \objectdp\dimexpr\dp\objectbox- \objectoff\relax
+ \setbox\objectbox\hpack
+ {\hskip-\objectoff
+ \box\objectbox}%
+ \wd\objectbox\objectwd
+ \ht\objectbox\objectht
+ \dp\objectbox\objectdp}
+
+\unexpanded\def\getobject#1#2%
+ {\begingroup
+ \clf_restoreobject{#1}{#2}%
+ \ifdim\objectoff>\zeropoint
+ \pack_objects_repackage
+ \fi
+ \box\objectbox
+ \endgroup}
+
+%D If needed one can ask for the dimensions of an object with:
+%D
+%D \starttyping
+%D \getobjectdimensions{class}{name}
+%D \stoptyping
+%D
+%D The results are reported in \type {\objectwidth}, \type
+%D {\objectheight} and \type {\objectdepth}.
+
+\unexpanded\def\getobjectdimensions#1#2%
+ {\clf_getobjectdimensions{#1}{#2}}
+
+%D \macros
+%D {doifobjectfoundelse,doifobjectreferencefoundelse}
+%D
+%D To prevent redundant definition of objects, one can use
+%D the next tests:
+%D
+%D \starttyping
+%D \doifobjectfoundelse{class}{object}{do then}{do else}
+%D \doifobjectreferencefoundelse{class}{object}{do then}{do else}
+%D \stoptyping
+
+\def\defaultobjectreference{0}
+\def\defaultobjectpage {\realfolio}
+
+\unexpanded\def\dogetobjectreference {\clf_getobjectreference}
+\unexpanded\def\dogetobjectreferencepage {\clf_getobjectreferencepage}
+
+\unexpanded\def\doifelseobjectfound {\clf_doifelseobject}
+\unexpanded\def\doifelseobjectreferencefound{\clf_doifelseobjectreference}
+
+\let\doifobjectfoundelse \doifelseobjectfound
+\let\doifobjectreferencefoundelse\doifelseobjectreferencefound
+
+%D For the moment here:
+
+\let\lastpredefinedsymbol\empty % some day we can do more at the lua end
+
+\unexpanded\def\predefinesymbol[#1]%
+ {\begingroup
+ \xdef\lastpredefinedsymbol{#1}%
+ \settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
+ \dogetobjectreference{SYM}{#1}\m_back_object_reference
+ \clf_registerbackendsymbol{#1}\m_back_object_reference\relax
+ \endgroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/pack-pos.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-pos.mkiv
index c52c01ca4b9..c52c01ca4b9 100644
--- a/Master/texmf-dist/tex/context/base/pack-pos.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-pos.mkiv
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.lua b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.lua
index 151642c3a1b..427a2d11da0 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.lua
@@ -39,6 +39,7 @@ local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getlist = nuts.getlist
+local setlist = nuts.setlist
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
@@ -46,6 +47,7 @@ local getbox = nuts.getbox
local hpack = nuts.hpack
local traverse_id = nuts.traverse_id
local node_dimensions = nuts.dimensions
+local free_node = nuts.free
local function doreshapeframedbox(n)
local box = getbox(n)
@@ -72,7 +74,8 @@ local function doreshapeframedbox(n)
if repack then
local subtype = getsubtype(n)
if subtype == box_code or subtype == line_code then
- lastlinelength = node_dimensions(l,getfield(n,"dir")) -- used to be: hpack(copy(l)).width
+ -- used to be: hpack(copy(l)).width
+ lastlinelength = node_dimensions(l,getfield(n,"dir"))
else
lastlinelength = getfield(n,"width")
end
@@ -107,9 +110,18 @@ local function doreshapeframedbox(n)
if l then
local subtype = getsubtype(h)
if subtype == box_code or subtype == line_code then
- l = hpack(l,maxwidth,'exactly',getfield(h,"dir")) -- multiple return values
- setfield(h,"list",l)
- setfield(h,"shift",0) -- needed for display math, so no width check possible
+ local p = hpack(l,maxwidth,'exactly',getfield(h,"dir")) -- multiple return value
+ if false then
+ setlist(h,p)
+ setfield(h,"shift",0) -- needed for display math, so no width check possible
+ -- setfield(p,"attr",getfield(h,"attr"))
+ else
+ setfield(h,"glue_set",getfield(p,"glue_set"))
+ setfield(h,"glue_order",getfield(p,"glue_order"))
+ setfield(h,"glue_sign",getfield(p,"glue_sign"))
+ setlist(p)
+ free_node(p)
+ end
end
setfield(h,"width",maxwidth)
end
@@ -169,7 +181,7 @@ end
implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments = "integer" }
implement { name = "doanalyzeframedbox", actions = doanalyzeframedbox, arguments = "integer" }
-function nodes.maxboxwidth(box)
+local function maxboxwidth(box)
local boxwidth = getfield(box,"width")
if boxwidth == 0 then
return 0
@@ -207,4 +219,13 @@ function nodes.maxboxwidth(box)
for v in traverse_id(vlist_code,list) do -- no dir etc needed
check(v,false)
end
+ return maxwidth
end
+
+nodes.maxboxwidth = maxboxwidth
+
+implement {
+ name = "themaxboxwidth",
+ actions = function(n) context("%isp",maxboxwidth(getbox(n))) end,
+ arguments = "integer"
+}
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv
index 5f72a1113fa..c8288586f4b 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv
@@ -22,7 +22,7 @@
\unprotect
-\definesystemvariable {ol} % OmLijnd -> check scrn-fld too
+% \definesystemvariable {ol} % OmLijnd -> check scrn-fld too
%D \macros
%D {linewidth, setuplinewidth}
@@ -104,7 +104,8 @@
\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\s!empty\fi}% root
+ \def#6##1{\ifcsname\??framed:##1\endcsname\??framed:##1\else\??empty\fi}% root
\unexpanded\def#8%
{\bgroup
\bgroup
@@ -368,7 +369,7 @@
\fi}
\def\pack_framed_background_box_color_indeed
- {\hbox{\dousecolorparameter\p_framed_backgroundcolor\pack_framed_filled_box}}
+ {\hpack{\dousecolorparameter\p_framed_backgroundcolor\pack_framed_filled_box}}
%D \macros
%D {defineoverlay, doifoverlayelse, overlayoffset,
@@ -434,6 +435,8 @@
\let\overlaycolor \empty
\let\overlaylinecolor \empty
+\def\overlayradius{\framedparameter\c!frameradius}
+
\newdimen\d_overlay_width
\newdimen\d_overlay_height
\newdimen\d_overlay_depth
@@ -493,7 +496,7 @@
\fi
\egroup
\setlayoutcomponentattribute{\v!overlay:#1}%
- \setbox\scratchbox\hbox \layoutcomponentboxattribute
+ \setbox\scratchbox\hpack \layoutcomponentboxattribute
{\kern -.5\dimexpr\wd\scratchbox-\d_framed_target_wd\relax % was \d_overlay_width
\raise-.5\dimexpr\ht\scratchbox-\d_framed_target_ht\relax % not \d_overlay_height !
\box\scratchbox}%
@@ -506,12 +509,19 @@
%D \macros
%D {overlayfakebox}
+% \unexpanded\def\overlayfakebox
+% {\hpack
+% {\setbox\scratchbox\emptyhbox
+% \wd\scratchbox\d_overlay_width
+% \ht\scratchbox\d_overlay_height
+% \box\scratchbox}}
+
\unexpanded\def\overlayfakebox
- {\hbox
- {\setbox\scratchbox\emptyhbox
- \wd\scratchbox\d_overlay_width
- \ht\scratchbox\d_overlay_height
- \box\scratchbox}}
+ {\hpack % redundant but needs testing
+ {\novrule
+ \s!width \d_overlay_width
+ \s!height\d_overlay_height
+ \s!depth \zeropoint}}
%D For testing we provide:
@@ -536,19 +546,21 @@
\def\pack_framed_process_background
{\ifcsname\??overlaybuiltin\m_framed_background\endcsname
- \pack_framed_process_background_indeed_internal
+ \expandafter\pack_framed_process_background_indeed_internal\lastnamedcs
\else\ifcsname\??overlay\m_framed_background\endcsname
- \pack_framed_process_background_indeed_external
+ \expandafter\pack_framed_process_background_indeed_external\lastnamedcs
\fi\fi}
-\def\pack_framed_process_background_indeed_internal % : in name
+\def\pack_framed_process_background_indeed_internal#1% % : in name
{\bgroup
\setbox\b_framed_extra\hbox{%\bgroup
\ifzeropt\framedbackgroundoffset
- \csname\??overlaybuiltin\m_framed_background\endcsname
+ %\csname\??overlaybuiltin\m_framed_background\endcsname
+ #1
\else
\kern-\framedbackgroundoffset
- \hbox{\csname\??overlaybuiltin\m_framed_background\endcsname}%
+ %\hbox{\csname\??overlaybuiltin\m_framed_background\endcsname}%
+ \hbox{#1}%
\fi
}%\egroup
\wd\b_framed_extra\zeropoint
@@ -557,15 +569,17 @@
\box\b_framed_extra
\egroup}
-\def\pack_framed_process_background_indeed_external
+\def\pack_framed_process_background_indeed_external#1%
{\pack_framed_overlay_initialize
\bgroup
\setbox\b_framed_extra\hbox{%\bgroup
\ifzeropt\framedbackgroundoffset
- \csname\??overlay\m_framed_background\endcsname
+ %\csname\??overlay\m_framed_background\endcsname
+ #1%
\else
\kern-\framedbackgroundoffset
- \hbox{\csname\??overlay\m_framed_background\endcsname}%
+ %\hbox{\csname\??overlay\m_framed_background\endcsname}%
+ \hbox{#1}%
\fi
}%\egroup
\wd\b_framed_extra\zeropoint
@@ -590,7 +604,7 @@
\newdimen\framedbackgroundoffset
\def\pack_framed_background_box_content% fuzzy but needed hack, this \vss, otherwise
- {\vbox to \framedbackgroundheight{\vss\box\b_framed_normal\vss}} % vertical shift \backgroundheight
+ {\vpack to \framedbackgroundheight{\vss\box\b_framed_normal\vss}} % vertical shift \backgroundheight
\def\pack_framed_add_region % experiment
{\anch_mark_region_box\b_framed_normal}
@@ -649,7 +663,7 @@
%D
%D We predefine two already familiar backgrounds:
-\letvalue{\??overlaybuiltin\v!screen }\pack_framed_background_box_gray
+%letvalue{\??overlaybuiltin\v!screen }\pack_framed_background_box_gray
\letvalue{\??overlaybuiltin\v!color }\pack_framed_background_box_color
\letvalue{\??overlaybuiltin\v!foreground}\pack_framed_background_box_content % replaces: \defineoverlay[\v!foreground][\foregroundbox]
@@ -662,7 +676,7 @@
%D also support a negative offset.
\def\pack_framed_add_outline
- {\setbox\b_framed_normal\hbox % rules on top of box
+ {\setbox\b_framed_normal\hpack % rules on top of box
{\d_framed_target_wd\dimexpr\wd\b_framed_normal+2\d_framed_frameoffset\relax
\d_framed_target_ht\dimexpr\ht\b_framed_normal+ \d_framed_frameoffset\relax
\d_framed_target_dp\dimexpr\dp\b_framed_normal+ \d_framed_frameoffset+\framedparameter\c!framedepth\relax
@@ -685,17 +699,37 @@
\box\b_framed_normal
\box\b_framed_extra}}
+% \def\pack_framed_stroked_box_normal
+% {\setbox\scratchbox\emptyhbox
+% \wd\scratchbox\d_framed_target_wd
+% \ht\scratchbox\d_framed_target_ht
+% \dp\scratchbox\d_framed_target_dp
+% \setbox\scratchbox\vpack \bgroup
+% \csname \??framedtop\p_framed_frame\framedparameter\c!topframe \endcsname
+% \nointerlineskip % new (needed for fences)
+% \hbox \bgroup
+% \csname \??framedleft\p_framed_frame\framedparameter\c!leftframe \endcsname
+% \box\scratchbox
+% \csname \??framedright\p_framed_frame\framedparameter\c!rightframe \endcsname
+% \egroup
+% \nointerlineskip % new (needed for fences)
+% \csname \??framedbottom\p_framed_frame\framedparameter\c!bottomframe\endcsname
+% \egroup
+% \wd\scratchbox\d_framed_target_wd
+% \ht\scratchbox\d_framed_target_ht
+% \dp\scratchbox\d_framed_target_dp
+% \box\scratchbox}
+
\def\pack_framed_stroked_box_normal
- {\setbox\scratchbox\emptyhbox
- \wd\scratchbox\d_framed_target_wd
- \ht\scratchbox\d_framed_target_ht
- \dp\scratchbox\d_framed_target_dp
- \setbox\scratchbox\vbox \bgroup
+ {\setbox\scratchbox\vpack \bgroup
\csname \??framedtop\p_framed_frame\framedparameter\c!topframe \endcsname
\nointerlineskip % new (needed for fences)
\hbox \bgroup
\csname \??framedleft\p_framed_frame\framedparameter\c!leftframe \endcsname
- \box\scratchbox
+ \novrule
+ \s!width \d_framed_target_wd
+ \s!height\d_framed_target_ht
+ \s!depth \d_framed_target_dp
\csname \??framedright\p_framed_frame\framedparameter\c!rightframe \endcsname
\egroup
\nointerlineskip % new (needed for fences)
@@ -729,8 +763,8 @@
% no overlapping rules
-\def\pack_framed_t_rules{\hbox{\kern\d_framed_linewidth\vrule\s!width\dimexpr\d_framed_target_wd-2\d_framed_linewidth\relax\s!height\d_framed_linewidth}\nointerlineskip\kern-\d_framed_linewidth}
-\def\pack_framed_b_rules{\kern-\d_framed_linewidth\nointerlineskip\hbox{\kern\d_framed_linewidth\vrule\s!width\dimexpr\d_framed_target_wd-2\d_framed_linewidth\relax\s!height\d_framed_linewidth}}
+\def\pack_framed_t_rules{\hpack{\kern\d_framed_linewidth\vrule\s!width\dimexpr\d_framed_target_wd-2\d_framed_linewidth\relax\s!height\d_framed_linewidth}\nointerlineskip\kern-\d_framed_linewidth}
+\def\pack_framed_b_rules{\kern-\d_framed_linewidth\nointerlineskip\hpack{\kern\d_framed_linewidth\vrule\s!width\dimexpr\d_framed_target_wd-2\d_framed_linewidth\relax\s!height\d_framed_linewidth}}
\def\pack_framed_r_rules{\kern-\d_framed_linewidth\vrule\s!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\s!depth-\d_framed_linewidth\s!width\d_framed_linewidth}
\def\pack_framed_l_rules{\vrule\s!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\s!depth-\d_framed_linewidth\s!width\d_framed_linewidth\kern-\d_framed_linewidth}
@@ -962,7 +996,7 @@
\ifx\p_framed_region\v!yes % maybe later named
\pack_framed_add_region
\fi
- \getparameters[\currentframed][#3]% no \expanded !
+ \setupcurrentframed[#3]%
\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}%
@@ -1082,6 +1116,10 @@
\def\c!fr!analyze{fr:analyze} % private option
+\let\delayedbegstrut\relax
+\let\delayedendstrut\relax
+\let\delayedstrut \relax
+
\unexpanded\def\pack_framed_process_indeed
{\d_framed_frameoffset\framedparameter\c!frameoffset
\edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}%
@@ -1144,27 +1182,21 @@
\dosetraggedcommand\localformat % not that fast
\fi
%
- \csname\??framedoffsetalternative
- \ifcsname\??framedoffsetalternative\localoffset\endcsname
- \localoffset
- \else
- \s!unknown
- \fi
- \endcsname
- \csname\??framedwidthalternative
- \ifcsname\??framedwidthalternative\localwidth\endcsname
- \localwidth
- \else
- \s!unknown
- \fi
- \endcsname
- \csname\??framedheightalternative
- \ifcsname\??framedheightalternative\localheight\endcsname
- \localheight
- \else
- \s!unknown
- \fi
- \endcsname
+ \ifcsname\??framedoffsetalternative\localoffset\endcsname
+ \lastnamedcs
+ \else
+ \framed_offset_alternative_unknown
+ \fi
+ \ifcsname\??framedwidthalternative\localwidth\endcsname
+ \lastnamedcs
+ \else
+ \framed_width_alternative_unknown
+ \fi
+ \ifcsname\??framedheightalternative\localheight\endcsname
+ \lastnamedcs
+ \else
+ \framed_height_alternative_unknown
+ \fi
% the next check could move to heightalternative
\ifconditional\c_framed_has_height
% obey user set height, also downward compatible
@@ -1188,13 +1220,11 @@
% i.e. disable (colsetbackgroundproblemintechniek)
\advance\d_framed_width -2\d_framed_local_offset
\advance\d_framed_height -2\d_framed_local_offset
- \csname\??framedstrutalternative
- \ifcsname\??framedstrutalternative\localstrut\endcsname
- \localstrut
- \else
- \s!unknown
- \fi
- \endcsname
+ \ifcsname\??framedstrutalternative\localstrut\endcsname
+ \lastnamedcs
+ \else
+ \framed_offset_alternative_unknown
+ \fi
% the next check could move to strutalternative
\ifconditional\c_framed_has_strut
\let\localbegstrut\begstrut
@@ -1327,6 +1357,10 @@
{\settrue\c_framed_has_width
\d_framed_width\localwidth}
+\def\framed_width_alternative_unknown
+ {\settrue\c_framed_has_width
+ \d_framed_width\localwidth}
+
% heights
\setvalue{\??framedheightalternative\empty}%
@@ -1349,7 +1383,11 @@
{\settrue\c_framed_has_height
\d_framed_height\localheight}
-% struts
+\def\framed_height_alternative_unknown
+ {\settrue\c_framed_has_height
+ \d_framed_height\localheight}
+
+% struts (use let instead?)
\setvalue{\??framedstrutalternative\v!no}%
{\setfalse\c_framed_has_strut}
@@ -1366,6 +1404,9 @@
\setvalue{\??framedstrutalternative\s!unknown}%
{\setstrut}
+\def\framed_strut_alternative_unknown
+ {\setstrut}
+
% offsets
\setvalue{\??framedoffsetalternative\v!none}%
@@ -1402,6 +1443,13 @@
\let\defaultframeoffset\localoffset
\d_framed_local_offset\dimexpr\localoffset+\d_framed_linewidth\relax}
+\def\framed_offset_alternative_unknown
+ {\settrue \c_framed_has_offset
+ \settrue \c_framed_has_strut
+ \setfalse\c_framed_is_overlaid
+ \let\defaultframeoffset\localoffset
+ \d_framed_local_offset\dimexpr\localoffset+\d_framed_linewidth\relax}
+
% so far for alternatives
\let\pack_framed_stop_orientation\relax
@@ -1500,18 +1548,18 @@
\def\pack_framed_profile_box
{\profilegivenbox\p_profile\b_framed_normal
- \setbox\b_framed_normal\vbox{\unvbox\b_framed_normal}}
+ \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}}
\unexpanded\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
- \ifconditional\c_framed_has_height \else
- \edef\p_profile{\framedparameter\c!profile}%
- \ifx\p_profile\empty\else
- \pack_framed_profile_box
- \fi
- \fi
+ %\ifconditional\c_framed_has_height \else
+ % \edef\p_profile{\framedparameter\c!profile}%
+ % \ifx\p_profile\empty\else
+ % \pack_framed_profile_box
+ % \fi
+ %\fi
\ifx\p_framed_autowidth\v!force
\pack_framed_finish_a
\else\ifx\localwidth\v!fit
@@ -1525,7 +1573,14 @@
\else
\pack_framed_finish_c
\fi\fi\fi
+ \ifconditional\c_framed_has_height \else
+ \edef\p_profile{\framedparameter\c!profile}%
+ \ifx\p_profile\empty\else
+ \pack_framed_profile_box
+ \fi
+ \fi
\ifconditional\page_postprocessors_needed_box
+ % quite late
\page_postprocessors_linenumbers_box\b_framed_normal
\fi
\else
@@ -1666,14 +1721,14 @@
\installframedlocator \v!hanging % best with strut=no *1* / see mail to list by SB
{}
{\scratchdimen\ht\b_framed_normal
- \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}%
\dp\b_framed_normal\scratchdimen
\ht\b_framed_normal\zeropoint
\box\b_framed_normal}
\installframedlocator \v!depth % *1*
{}
- {\setbox\b_framed_normal\hbox{\lower\strutdp\box\b_framed_normal}%
+ {\setbox\b_framed_normal\hpack{\lower\strutdp\box\b_framed_normal}%
\ht\b_framed_normal\dimexpr\ht\b_framed_normal-\strutdp\relax
\dp\b_framed_normal\strutdp
\box\b_framed_normal}
@@ -1681,7 +1736,7 @@
\installframedlocator \v!height % *1*
{}
{\scratchdimen\dimexpr \ht\b_framed_normal - \strutht \relax
- \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}%
\dp\b_framed_normal\dimexpr\ht\b_framed_normal-\strutht\relax
\ht\b_framed_normal\strutht
\box\b_framed_normal}
@@ -1689,22 +1744,22 @@
\installframedlocator \v!high
{}
{\pack_framed_locater_set\strutht
- \setbox\b_framed_normal\hbox{\lower\d_framed_locator_dp\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}%
\ht\b_framed_normal\strutht
\dp\b_framed_normal\strutdp
- \hbox{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}}
\installframedlocator \v!line
{}
- {\setbox\b_framed_normal\hbox{\lower.5\ht\b_framed_normal\box\b_framed_normal}%
+ {\setbox\b_framed_normal\hpack{\lower.5\ht\b_framed_normal\box\b_framed_normal}%
\ht\b_framed_normal.5\lineheight
\dp\b_framed_normal.5\lineheight
- \hbox{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}}
\installframedlocator \v!low
{}
{\pack_framed_locater_set\strutdp
- \setbox\b_framed_normal\hbox{\lower\d_framed_locator_ht\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\d_framed_locator_ht\box\b_framed_normal}%
\ht\b_framed_normal\strutht
\dp\b_framed_normal\strutdp
\box\b_framed_normal}
@@ -1712,18 +1767,18 @@
\installframedlocator \v!top
{}
{\pack_framed_locater_set\strutht
- \setbox\b_framed_normal\hbox{\lower\d_framed_locator_dp\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}%
\ht\b_framed_normal\d_framed_locator_ht
\dp\b_framed_normal\d_framed_locator_dp
- \hbox{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}}
\installframedlocator \v!middle
{}
{\scratchdimen.5\ht\b_framed_normal
- \setbox\b_framed_normal\hbox{\lower\scratchdimen\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}%
\ht\b_framed_normal\scratchdimen
\dp\b_framed_normal\scratchdimen
- \hbox{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}}
\installframedlocator \v!lohi
{\pack_framed_locator_before\v!middle}
@@ -1732,10 +1787,10 @@
\installframedlocator \v!bottom
{}
{\pack_framed_locater_set\strutdp
- \setbox\b_framed_normal\hbox{\lower\d_framed_locator_ht\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\d_framed_locator_ht\box\b_framed_normal}%
\ht\b_framed_normal\d_framed_locator_dp
\dp\b_framed_normal\d_framed_locator_ht
- \hbox{\box\b_framed_normal}}
+ \hpack{\box\b_framed_normal}}
\installframedlocator \v!keep % retains height/depth
{\pack_framed_remove_depth}
@@ -1752,7 +1807,7 @@
\d_framed_original_ht\ht\b_framed_normal
\d_framed_original_dp\dp\b_framed_normal
\ifzeropt\d_framed_original_dp\else
- \setbox\b_framed_normal\hbox{\raise\d_framed_original_dp\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\raise\d_framed_original_dp\box\b_framed_normal}%
\fi
\wd\b_framed_normal\d_framed_original_wd
\ht\b_framed_normal\dimexpr\d_framed_original_ht+\d_framed_original_dp\relax
@@ -1760,7 +1815,7 @@
\def\pack_framed_restore_depth
{\ifzeropt\d_framed_original_dp \else
- \setbox\b_framed_normal\hbox{\lower\d_framed_original_dp\box\b_framed_normal}%
+ \setbox\b_framed_normal\hpack{\lower\d_framed_original_dp\box\b_framed_normal}%
\fi
\wd\b_framed_normal\d_framed_original_wd
\ht\b_framed_normal\d_framed_original_ht
@@ -1806,7 +1861,7 @@
\fi}
\def\pack_framed_stop_orientation_indeed
- {\setbox\b_framed_normal\hbox{\dorotatebox\p_framed_orientation\hbox{\box\b_framed_normal}}%
+ {\setbox\b_framed_normal\hpack{\dorotatebox\p_framed_orientation\hpack{\box\b_framed_normal}}%
\d_framed_height\ht\b_framed_normal
\d_framed_width \wd\b_framed_normal}
@@ -1922,7 +1977,7 @@
\installframedlocator \v!mathematics
{}
{\lower\dimexpr\MPy\pack_framed_mc_two-\MPy\pack_framed_mc_one\relax
- \hbox{\xypos\pack_framed_mc_one\box\b_framed_normal}}
+ \hpack{\xypos\pack_framed_mc_one\box\b_framed_normal}}
\definemathframed[mframed]
\definemathframed[inmframed][\c!location=\v!low]
@@ -1985,13 +2040,13 @@
\ifzeropt\d_framed_boffset\else \advance\d_framed_height-\d_framed_boffset \settrue\c_framed_has_extra_offset \fi}
\def\pack_framed_apply_extra_offsets
- {\setbox\b_framed_normal\vbox\bgroup
+ {\setbox\b_framed_normal\vpack\bgroup
\advance\d_framed_toffset\d_framed_applied_offset
\advance\d_framed_boffset\d_framed_applied_offset
\advance\d_framed_loffset\d_framed_applied_offset
\advance\d_framed_roffset\d_framed_applied_offset
\kern\d_framed_toffset
- \hbox\bgroup
+ \hpack\bgroup
\kern\d_framed_loffset
\box\b_framed_normal
\kern\d_framed_roffset
@@ -2000,9 +2055,9 @@
\egroup}
\def\pack_framed_widen_box
- {\setbox\b_framed_normal\vbox
+ {\setbox\b_framed_normal\vpack
{\kern\d_framed_applied_offset
- \hbox{\kern\d_framed_applied_offset\box\b_framed_normal\kern\d_framed_applied_offset}%
+ \hpack{\kern\d_framed_applied_offset\box\b_framed_normal\kern\d_framed_applied_offset}%
\kern\d_framed_applied_offset}}
%D Let's hope that the next few examples show us enough of what needs to be
@@ -2087,14 +2142,14 @@
\def\dodoformatonelinerbox
{\afterassignment\redoformatonelinerbox
- \setbox\nextbox\hbox}
+ \setbox\nextbox\hbox} % maybe \hpack
\def\redoformatonelinerbox
{\aftergroup\dododoformatonelinerbox
\ignorespaces}
\def\dododoformatonelinerbox
- {\hbox to \hsize
+ {\hbox to \hsize % maybe \hpack
{\ifcase\raggedstatus\or\hss\or\hss \fi
\unhbox\nextbox \removeunwantedspaces
\ifcase\raggedstatus\or \or\hss\or\hss\fi}%
@@ -2440,9 +2495,9 @@
\par
\kern-\d_framed_linewidth
\dontleavehmode
- \hbox to \zeropoint{\normalhss\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth}%
+ \hpack to \zeropoint{\normalhss\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth}%
\hfill
- \hbox to \zeropoint{\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth\normalhss}%
+ \hpack to \zeropoint{\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth\normalhss}%
\par
\nointerlineskip
\kern\scratchoffset
@@ -2463,7 +2518,7 @@
\dimen\scratchdepth \dimexpr\strutdp+\scratchoffset\relax
\fi
\unskip
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\kern\scratchoffset
\vrule\s!height\dimen\scratchheight\s!depth\dimen\scratchdepth\s!width\d_framed_linewidth
\kern\scratchoffset}%
@@ -2835,9 +2890,9 @@
\appendtoks
\ifcsname\??regularframedlevel\currentframed\endcsname
- % already defined, keeps settings
+ % already defined, keeps settings
\else
- \expandafter\newcount\csname\??regularframedlevel\currentframed\endcsname
+ \expandafter\newcount\csname\??regularframedlevel\currentframed\endcsname
\fi
\to \everypresetframed
@@ -2850,7 +2905,8 @@
\unexpanded\def\pack_framed_defined_process[#1]% official (not much checking, todo: parent)
{\bgroup
\ifcsname\??regularframedlevel#1\endcsname
- \expandafter\let\expandafter\c_pack_framed_temp\csname\??regularframedlevel#1\endcsname
+ %\expandafter\let\expandafter\c_pack_framed_temp\csname\??regularframedlevel#1\endcsname
+ \expandafter\let\expandafter\c_pack_framed_temp\lastnamedcs
\else
\let\c_pack_framed_temp\c_temp_framed_crap
\fi
@@ -2944,7 +3000,7 @@
\fi}
\def\pack_framed_start_content_indeed
- {\setbox\b_framed_normal\hbox\bgroup
+ {\setbox\b_framed_normal\hbox\bgroup % maybe \hpack
\setlocalhsize
\hsize\localhsize
\scratchleftoffset \framedcontentparameter\c!leftoffset \relax
@@ -2998,4 +3054,13 @@
\c!foregroundstyle=\framedparameter\c!style,
\c!foregroundcolor=\framedparameter\c!color]
+%D Bonus (as defined in \type {pack-rul.lua}):
+%D
+%D \starttyping
+%D \setbox\scratchbox\vbox{a\par aa\par aaa\par}
+%D \the\dimexpr\themaxboxwidth\scratchbox\relax
+%D \stoptyping
+
+\let\themaxboxwidth\clf_themaxboxwidth
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-app.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-app.mkiv
index 2e81f75371f..cdb964ab06e 100644
--- a/Master/texmf-dist/tex/context/base/page-app.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-app.mkiv
@@ -86,7 +86,7 @@
\egroup
% finalize
\doif{\fittingpageparameter\c!margin}\v!page
- {\setbox\b_page_fitting\hbox\bgroup
+ {\setbox\b_page_fitting\hpack\bgroup
\offsetbox
[\c!leftoffset=\backspace,
\c!rightoffset=\cutspace,
@@ -95,7 +95,7 @@
{\box\b_page_fitting}%
\egroup}%
\doifsomething{\fittingpageparameter\c!scale}
- {\setbox\b_page_fitting\hbox\bgroup
+ {\setbox\b_page_fitting\hpack\bgroup
\scale[\c!scale=\fittingpageparameter\c!scale]{\box\b_page_fitting}%
\egroup}%
\ifdim\ht\b_page_fitting=\zeropoint
diff --git a/Master/texmf-dist/tex/context/base/page-bck.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-bck.mkiv
index 01de48e8cda..b44910bbe6c 100644
--- a/Master/texmf-dist/tex/context/base/page-bck.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-bck.mkiv
@@ -57,7 +57,8 @@
\unexpanded\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{\csname\??framed\currentotrbackground:\c!background\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\empty
\expandafter\expandafter\expandafter\page_backgrounds_check_frame
\else
@@ -69,7 +70,8 @@
\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{\csname\??framed\currentotrbackground:\c!frame\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\v!on
\page_backgrounds_set_yes
\else
@@ -81,7 +83,8 @@
\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{\csname\??framed\currentotrbackground:\c!leftframe\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\v!on
\page_backgrounds_set_yes
\else
@@ -93,7 +96,8 @@
\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{\csname\??framed\currentotrbackground:\c!rightframe\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\v!on
\page_backgrounds_set_yes
\else
@@ -105,7 +109,8 @@
\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{\csname\??framed\currentotrbackground:\c!topframe\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\v!on
\page_backgrounds_set_yes
\else
@@ -117,7 +122,8 @@
\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{\csname\??framed\currentotrbackground:\c!bottomframe\endcsname}%
+ \edef\page_background_temp{\lastnamedcs}%
\ifx\page_background_temp\v!on
\page_backgrounds_set_yes
\else
@@ -176,7 +182,7 @@
\doprocesslocalsetups\p_page_backgrounds_setups % should not produce funny spaces !
\fi
% #2 has the right dimensions already
- \setbox#2\hbox{\localbackgroundframed{\??layoutbackgrounds#1}#1#2}}% a real framed (including foreground)
+ \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
@@ -277,7 +283,7 @@
\def\page_backgrounds_add_to_main#1% todo: dimension spec
{\ifconditional\c_page_backgrounds_some
\page_backgrounds_set_boxes
- \setbox#1\vbox
+ \setbox#1\vpack
{\offinterlineskip
\doifelsemarginswap{\copy\leftbackground}{\copy\rightbackground}%
\box#1}%
@@ -341,7 +347,7 @@
\newconditional\swapbackgroundmargins \settrue\swapbackgroundmargins
\def\page_backgrounds_set_box#1% #2%
- {\global\setbox#1\vbox
+ {\global\setbox#1\vpack
{\dontcomplain
\swapmargins
\ifconditional\swapbackgroundmargins
@@ -378,8 +384,8 @@
\smashbox#1}
\def\page_backgrounds_set_box_row#1#2% maybe helper
- {\setbox\scratchbox\vbox to #2
- \bgroup\hbox\bgroup
+ {\setbox\scratchbox\vpack to #2
+ \bgroup\hpack\bgroup
\goleftonpage
\ifdim\leftedgewidth>\zeropoint
\ifcsname\??layoutbackgrounds#1\v!leftedge\endcsname
@@ -446,7 +452,7 @@
\ht\scratchbox#2}
\def\page_backgrounds_set_box_cell_yes#1#2%
- {\setbox\scratchbox\vbox to #2{\vss\hbox to#1{\hss\p_page_backgrounds_command\hss}\vss}%
+ {\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
diff --git a/Master/texmf-dist/tex/context/base/page-box.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-box.mkvi
index 8f5647a14bc..fa85aef6898 100644
--- a/Master/texmf-dist/tex/context/base/page-box.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-box.mkvi
@@ -46,10 +46,10 @@
\v_page_target_left}
\def\page_boxes_apply_center_indeed#box% we could test for a difference (saves packing)
- {\setbox#box\vbox to \printpaperheight
+ {\setbox#box\vpack to \printpaperheight
{\v_page_target_top
\v_page_target_top_fill
- \hbox to \printpaperwidth
+ \hpack to \printpaperwidth
{\ifconditional\c_page_target_print_doublesided
\doifbothsides
{\page_boxes_apply_center_indeed_l_r#box}%
@@ -77,7 +77,7 @@
{\scratchwidth \wd#box%
\scratchheight\ht#box%
\scratchdepth \dp#box%
- \setbox#box\vbox
+ \setbox#box\vpack
{\offinterlineskip
\vskip\topoffset
\hskip\doifbothsides\backoffset\backoffset{-\backoffset}%
@@ -96,10 +96,10 @@
\fi\fi}
\def\page_boxes_apply_replicate_indeed#box%
- {\setbox#box\vbox
+ {\setbox#box\vpack
{\offinterlineskip
\dorecurse{\layoutparameter\c!ny}
- {\hbox{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}%
+ {\hpack{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}%
\vskip\layoutparameter\c!dy}
\unskip}}
@@ -114,12 +114,12 @@
\fi}
\def\page_boxes_apply_orientate_indeed#odd#even#box%
- {\setbox#box\vbox
+ {\setbox#box\vpack
{\edef\somerotation{\number\ifdoublesided\ifodd\realpageno#odd\else#even\fi\else#odd\fi}%
- \dorotatebox\somerotation\hbox{\box#box}}}
+ \dorotatebox\somerotation\hpack{\box#box}}}
\def\page_boxes_apply_mirror#box%
- {\setbox#box\vbox{\mirror{\box#box}}}
+ {\setbox#box\vpack{\mirror{\box#box}}}
\def\page_boxes_apply_mirror_paper#box{\ifconditional\c_page_target_paper_mirror\page_boxes_apply_mirror{#box}\fi}
\def\page_boxes_apply_mirror_print#box{\ifconditional\c_page_target_print_mirror\page_boxes_apply_mirror{#box}\fi}
@@ -152,7 +152,7 @@
\fi}
\def\page_boxes_apply_scale_indeed#sx#sy#box%
- {\setbox#box\vbox{\scale[\c!sx=#sx,\c!sy=#sy]{\box#box}}% can be a fast one
+ {\setbox#box\vpack{\scale[\c!sx=#sx,\c!sy=#sy]{\box#box}}% can be a fast one
\paperwidth #sx\paperwidth
\paperheight#sy\paperheight}
@@ -189,7 +189,7 @@
\scratchwidth \wd#box%
\scratchheight\ht#box%
\scratchdepth \dp#box%
- \setbox#box\hbox
+ \setbox#box\hpack
{\advance\scratchheight\dimexpr\scratchdepth+2\scratchoffset\relax
\advance\scratchwidth \scratchoffset
\ifconditional#right\relax
@@ -198,7 +198,7 @@
\else
\scratchdimen\zeropoint
\fi
- \lower\scratchoffset\hbox
+ \lower\scratchoffset\hpack
{\clip
[\c!hoffset=\scratchdimen,
\c!voffset=-\scratchoffset,
@@ -221,7 +221,7 @@
{\scratchwidth \wd#box%
\scratchheight\ht#box%
\scratchdepth \dp#box%
- \setbox#box\hbox
+ \setbox#box\hpack
{\advance\scratchheight\dimexpr\scratchdepth+2\scratchoffset\relax
\advance\scratchwidth \scratchoffset
\doifbothsides
@@ -231,7 +231,7 @@
{\scratchdimen\zeropoint}
{\scratchdimen-\scratchoffset
\kern\scratchdimen}%
- \lower\scratchoffset\hbox
+ \lower\scratchoffset\hpack
{\clip
[\c!hoffset=\scratchdimen,
\c!voffset=-\scratchoffset,
@@ -245,7 +245,7 @@
% nearly always some displacement so no speedup test needed
\def\page_boxes_apply_offsets#1%
- {\setbox#1\vbox to \paperheight
+ {\setbox#1\vpack to \paperheight
{\hsize\paperwidth
\vskip\topspace
\doifbothsides
@@ -282,9 +282,9 @@
\def\page_areas_register_boxed#1%
{\begingroup
- \setbox\scratchbox\vbox{#1}%
+ \setbox\scratchbox\vpack{#1}%
\wd\scratchbox\makeupwidth % somehow a space creeps in
- \vbox{\page_areas_registered_box00\scratchbox}% 0 0 will go
+ \vpack{\page_areas_registered_box00\scratchbox}% 0 0 will go
\endgroup}
% \def\page_areas_register_direct#1%
diff --git a/Master/texmf-dist/tex/context/base/page-brk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-brk.mkiv
index f9c93305293..eabcb74f877 100644
--- a/Master/texmf-dist/tex/context/base/page-brk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-brk.mkiv
@@ -58,15 +58,16 @@
\def\page_breaks_handle_step#1%
{\edef\page_breaks_current_option{#1}% can be used in handler
\ifcsname\??pagebreakmethod\page_breaks_current_option\endcsname
- \csname\??pagebreakmethod\page_breaks_current_option\endcsname
+ \lastnamedcs
\else\ifcsname\??pagebreaks\page_breaks_current_option\endcsname
- \expandafter\page_breaks_handle\csname\??pagebreaks\page_breaks_current_option\endcsname
+ \expandafter\page_breaks_handle\lastnamedcs
\else
- \csname\??pagebreakmethod\s!unknown\endcsname
+ \page_breaks_unknown
\fi\fi}
\def\page_breaks_handle_direct#1%
- {\csname\??pagebreakmethod#1\endcsname}
+ %{\csname\??pagebreakmethod#1\endcsname}
+ {\begincsname\??pagebreakmethod#1\endcsname}
\unexpanded\def\installpagebreakmethod#1#2% low level definer
{\setvalue{\??pagebreakmethod#1}{#2}}
@@ -112,6 +113,20 @@
\endgroup
\fi}
+\unexpanded\def\usepageparameter#1%
+ {\edef\m_page_breaks_asked{#1\c!page}%
+ \ifx\m_page_breaks_asked\empty\else
+ \firstargumenttrue
+ \page_breaks_process[\m_page_breaks_asked]%
+ \fi}
+
+\unexpanded\def\dousepageparameter#1%
+ {\edef\m_page_breaks_asked{#1}%
+ \ifx\m_spac_align_asked\empty\else
+ \firstargumenttrue
+ \page_breaks_process[\m_page_breaks_asked]%
+ \fi}
+
\unexpanded\def\resetpagebreak % used elsewhere too
{\global\settrue\c_page_breaks_enabled}
@@ -133,7 +148,7 @@
\page[\v!empty]
\endgroup}
-\installpagebreakmethod \s!unknown
+\unexpanded\def\page_breaks_unknown % how often called ?
{\doifelseinstring{+}\page_breaks_current_option
{\page_otr_flush_all_floats
\page_otr_command_next_page
@@ -149,6 +164,9 @@
\fi}}
{}}}
+\installpagebreakmethod \s!unknown
+ {\page_breaks_unknown}
+
\installpagebreakmethod \s!default
{} % do nothing if empty
@@ -266,6 +284,7 @@
\newtoks\everybeforecolumnbreak
\newtoks\everyaftercolumnbreak
+\newtoks\everysynchronizecolumn
\let\page_breaks_columns_current_option \empty
\let\page_breaks_columns_current_options\empty
@@ -277,15 +296,17 @@
\def\page_breaks_columns_handle_step#1%
{\edef\page_breaks_columns_current_option{#1}%
\ifcsname\??columnbreakmethod\currentoutputroutine:\page_breaks_columns_current_option\endcsname
- \csname\??columnbreakmethod\currentoutputroutine:\page_breaks_columns_current_option\endcsname
+ \lastnamedcs
\else\ifcsname\??columnbreaks\page_breaks_columns_current_option\endcsname
- \expandafter\csname\page_breaks_columns_handle\??columnbreaks\page_breaks_columns_current_option\endcsname
- \else
- \csname\??columnbreakmethod\currentoutputroutine:\s!unknown\endcsname
- \fi\fi}
+ %\expandafter\csname\page_breaks_columns_handle\??columnbreaks\page_breaks_columns_current_option\endcsname
+ \lastnamedcs
+ \else\ifcsname\??columnbreakmethod\currentoutputroutine:\s!unknown\endcsname
+ \lastnamedcs
+ \fi\fi\fi}
\def\page_breaks_columns_handle_direct#1%
- {\csname\??columnbreakmethod\currentoutputroutine:#1\endcsname}
+ %{\csname\??columnbreakmethod\currentoutputroutine:#1\endcsname}
+ {\begincsname\??columnbreakmethod\currentoutputroutine:#1\endcsname}
\unexpanded\def\installcolumnbreakmethod#1#2#3% #1=otr-id #2=tag #3=action
{\setvalue{\??columnbreakmethod#1:#2}{#3}}
@@ -314,7 +335,13 @@
\fi
\relax
\the\everyaftercolumnbreak
- \endgroup}
+ \endgroup
+ % outside group e.g. setting hsize
+ \the\everysynchronizecolumn}
+
+\appendtoks
+ \page_otr_command_set_hsize
+\to \everysynchronizecolumn
%D Test page breaks.
@@ -414,6 +441,8 @@
\def\page_check[#1][#2]%
{\relax % needed before \if
\endgraf
+ \triggerpagebuilder
+ \relax
\ifconditional\c_page_breaks_enabled
\begingroup
\edef\currentpagechecker{#1}%
diff --git a/Master/texmf-dist/tex/context/base/page-col.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-col.mkiv
index 14b5124210f..14b5124210f 100644
--- a/Master/texmf-dist/tex/context/base/page-col.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-col.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-com.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-com.mkiv
index 0ff8e3b54e4..dfec3e25d30 100644
--- a/Master/texmf-dist/tex/context/base/page-com.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-com.mkiv
@@ -54,7 +54,7 @@
\expandnamespacemacro\??pagecommentstates\p_page_commands_state\v!none
\to \everysetuppagecomment
-\ifdefined\scrn_canvas_synchronize_simple
+% \ifdefined\scrn_canvas_synchronize_simple
\appendtoks
\ifx\p_page_commands_state\v!start
@@ -64,7 +64,7 @@
\fi
\to \everyshipout
-\fi
+% \fi
\setvalue{\??pagecommentstates\v!start}%
{\d_page_comments_offset \directpagecommentparameter\c!offset \relax
@@ -114,7 +114,7 @@
{}% \setuppapersize[\c!bottom=,\c!top=,\c!left=,\c!right=]}
\unexpanded\def\page_comments_top_bottom
- {\vbox to \printpaperheight
+ {\vpack to \printpaperheight
{%\forgetall
\hsize\printpaperwidth\relax
\ifx\p_page_commands_location\v!bottom
@@ -140,7 +140,7 @@
\fi}}
\unexpanded\def\page_comments_left_right
- {\hbox to \printpaperwidth
+ {\hpack to \printpaperwidth
{\ifx\p_page_commands_location\v!right
\hskip\dimexpr\paperwidth+\d_page_comments_distance+\d_page_comments_offset\relax
\else
diff --git a/Master/texmf-dist/tex/context/base/mkiv/page-cst.lua b/Master/texmf-dist/tex/context/base/mkiv/page-cst.lua
new file mode 100644
index 00000000000..782bbebfce8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-cst.lua
@@ -0,0 +1,1454 @@
+if not modules then modules = { } end modules ["page-cst"] = {
+ version = 1.001,
+ comment = "companion to page-cst.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: check what is used
+
+local next, type = next, type
+local ceil, floor, odd, round = math.ceil, math.floor, math.odd, math.round
+local lower = string.lower
+local copy = table.copy
+
+local trace_state = false trackers.register("columnsets.trace", function(v) trace_state = v end)
+local trace_detail = false trackers.register("columnsets.detail", function(v) trace_detail = v end)
+local trace_cells = false trackers.register("columnsets.cells", function(v) trace_cells = v end)
+
+local report = logs.reporter("column sets")
+
+local setmetatableindex = table.setmetatableindex
+
+local properties = nodes.properties
+
+local nodecodes = nodes.nodecodes
+local gluecodes = nodes.gluecodes
+local rulecodes = nodes.rulecodes
+
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local kern_code = nodecodes.kern
+local glue_code = nodecodes.glue
+local penalty_code = nodecodes.penalty
+local insert_code = nodecodes.ins
+local mark_code = nodecodes.mark
+local rule_code = nodecodes.rule
+
+local topskip_code = gluecodes.topskip
+local lineskip_code = gluecodes.lineskip
+local baselineskip_code = gluecodes.baselineskip
+local userskip_code = gluecodes.userskip
+
+local nuts = nodes.nuts
+local tonode = nuts.tonode
+local tonut = nuts.tonut
+
+local hpack = nuts.hpack
+local vpack = nuts.vpack
+local freenode = nuts.free
+local flushlist = nuts.flush_list
+local removenode = nuts.remove
+
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setsubtype = nuts.setsubtype
+local setbox = nuts.setbox
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getid = nuts.getid
+local getlist = nuts.getlist
+local getsubtype = nuts.getsubtype
+local takebox = nuts.takebox
+local takelist = nuts.takelist
+local splitbox = nuts.splitbox
+local getskip = nuts.getskip
+local getattribute = nuts.getattribute
+local copylist = nuts.copy_list
+
+local getbox = nuts.getbox
+local getcount = tex.getcount
+local getdimen = tex.getdimen
+
+local texsetbox = tex.setbox
+local texsetcount = tex.setcount
+local texsetdimen = tex.setdimen
+
+local theprop = nuts.theprop
+
+local nodepool = nuts.pool
+
+local new_hlist = nodepool.hlist
+local new_vlist = nodepool.vlist
+local new_kern = nodepool.kern
+local new_trace_rule = nodepool.rule
+local new_empty_rule = nodepool.emptyrule
+
+local context = context
+local implement = interfaces.implement
+
+local variables = interfaces.variables
+local v_here = variables.here
+local v_fixed = variables.fixed
+local v_top = variables.top
+local v_bottom = variables.bottom
+local v_repeat = variables["repeat"]
+local v_left = variables.left
+local v_right = variables.right
+local v_yes = variables.yes
+local v_page = variables.page
+local v_first = variables.first
+local v_last = variables.last
+local v_wide = variables.wide
+
+pagebuilders = pagebuilders or { } -- todo: pages.builders
+pagebuilders.columnsets = pagebuilders.columnsets or { }
+local columnsets = pagebuilders.columnsets
+
+local data = { [""] = { } }
+
+-- todo: use state
+
+local function setstate(t,start)
+ if start or not t.firstcolumn then
+ t.firstcolumn = odd(getcount("realpageno")) and 1 or 2
+ end
+ if t.firstcolumn > 1 then
+ t.firstcolumn = 1
+ t.lastcolumn = t.nofleft
+ t.state = "left"
+ else
+ t.firstcolumn = t.nofleft + 1
+ t.lastcolumn = t.firstcolumn + t.nofright - 1
+ t.state = "right"
+ end
+ t.currentcolumn = t.firstcolumn
+ t.currentrow = 1
+end
+
+function columnsets.define(t)
+ local name = t.name
+ local nofleft = t.nofleft or 1
+ local nofright = t.nofright or 1
+ local nofcolumns = nofleft + nofright
+ local dataset = data[name] or { }
+ data[name] = dataset
+ dataset.nofleft = nofleft
+ dataset.nofright = nofright
+ dataset.nofcolumns = nofcolumns
+ dataset.nofrows = t.nofrows or 1
+ dataset.distance = t.distance or getdimen("bodyfontsize")
+ dataset.maxwidth = t.maxwidth or getdimen("makeupwidth")
+ dataset.lineheight = t.lineheight or getdimen("globalbodyfontstrutheight")
+ dataset.linedepth = t.linedepth or getdimen("globalbodyfontstrutdepth")
+ --
+ dataset.cells = { }
+ dataset.currentcolumn = 1
+ dataset.currentrow = 1
+ --
+ dataset.lines = dataset.lines or setmetatableindex("table")
+ dataset.start = dataset.start or setmetatableindex("table")
+ --
+ dataset.page = 1
+ --
+ local distances = dataset.distances or setmetatableindex(function(t,k)
+ return dataset.distance
+ end)
+ dataset.distances = distances
+ --
+ local widths = dataset.widths or setmetatableindex(function(t,k)
+ return dataset.width
+ end)
+ dataset.widths = widths
+ --
+ local width = t.width
+ if not width or width == 0 then
+ local dl = 0
+ local dr = 0
+ for i=1,nofleft-1 do
+ dl = dl + distances[i]
+ end
+ for i=1,nofright-1 do
+ dr = dr + distances[nofleft+i]
+ end
+ local nl = nofleft
+ local nr = nofright
+ local wl = dataset.maxwidth
+ local wr = wl
+ for i=1,nofleft do
+ local w = rawget(widths,i)
+ if w then
+ nl = nl - 1
+ wl = wl - w
+ end
+ end
+ for i=1,nofright do
+ local w = rawget(widths,nofleft+i)
+ if w then
+ nr = nr - 1
+ wr = wr - w
+ end
+ end
+ dl = (wl - dl) / nl
+ dr = (wr - dr) / nr
+ if dl > dr then
+ report("using %s page column width %p in columnset %a","right",dr,name)
+ width = dr
+ elseif dl < dr then
+ report("using %s page column width %p in columnset %a","left",dl,name)
+ width = dl
+ else
+ width = dl
+ end
+ end
+ -- report("width %p, nleft %i, nright %i",width,nofleft,nofright)
+ width = round(width)
+ dataset.width = width
+ local spans = { }
+ dataset.spans = spans
+ for i=1,nofleft do
+ local s = { }
+ local d = 0
+ for j=1,nofleft-i+1 do
+ d = d + width
+ s[j] = round(d)
+ d = d + distances[j]
+ end
+ spans[i] = s
+ end
+ for i=1,nofright do
+ local s = { }
+ local d = 0
+ for j=1,nofright-i+1 do
+ d = d + width
+ s[j] = round(d)
+ d = d + distances[j]
+ end
+ spans[nofleft+i] = s
+ end
+ --
+ local spreads = copy(spans)
+ dataset.spreads = spreads
+ local gap = 2 * getdimen("backspace")
+ for l=1,nofleft do
+ local s = spreads[l]
+ local n = #s
+ local o = s[n] + gap
+ for r=1,nofright do
+ n = n + 1
+ s[n] = s[r] + o
+ end
+ end
+ --
+ texsetdimen("d_page_grid_column_width",dataset.width)
+ --
+ setstate(dataset,true)
+ --
+ return dataset
+end
+
+local function check(dataset)
+ local cells = dataset.cells
+ local page = dataset.page
+ local offset = odd(page) and dataset.nofleft or 0
+ local start = dataset.start
+ local list = rawget(start,page)
+ if list then
+ for c, n in next, list do
+ local column = cells[offset + c]
+ if column then
+ for r=1,n do
+ column[r] = true
+ end
+ end
+ end
+ start[page] = nil
+ end
+ local lines = dataset.lines
+ local list = rawget(lines,page)
+ local rows = dataset.nofrows
+ if list then
+ for c, n in next, list do
+ local column = cells[offset + c]
+ if column then
+ if n > 0 then
+ for r=n+1,rows do
+ column[r] = true
+ end
+ elseif n < 0 then
+ for r=rows,rows+n+1,-1 do
+ column[r] = true
+ end
+ end
+ end
+ end
+ lines[page] = nil
+ end
+end
+
+local function erase(dataset,all)
+ local cells = dataset.cells
+ local nofrows = dataset.nofrows
+ local first = 1
+ local last = dataset.nofcolumns
+ --
+ if not all then
+ first = dataset.firstcolumn or first
+ last = dataset.lastcolumn or last
+ end
+ for c=first,last do
+ local column = { }
+ for r=1,nofrows do
+ if column[r] then
+ report("slot (%i,%i) is not empty",c,r)
+ end
+ column[r] = false -- not used
+ end
+ cells[c] = column
+ end
+end
+
+function columnsets.reset(t)
+ local dataset = columnsets.define(t)
+ erase(dataset,true)
+ check(dataset)
+end
+
+function columnsets.prepareflush(name)
+ local dataset = data[name]
+ local cells = dataset.cells
+ local firstcolumn = dataset.firstcolumn
+ local lastcolumn = dataset.lastcolumn
+ local nofrows = dataset.nofrows
+ local lineheight = dataset.lineheight
+ local linedepth = dataset.linedepth
+ local widths = dataset.widths
+ local height = (lineheight+linedepth)*nofrows -- - linedepth
+ --
+ local columns = { }
+ dataset.columns = columns
+ --
+ for c=firstcolumn,lastcolumn do
+ local column = cells[c]
+ for r=1,nofrows do
+ local cell = column[r]
+ if (cell == false) or (cell == true) then
+ if trace_cells then
+ column[r] = new_trace_rule(65536*2,lineheight,linedepth)
+ else
+ column[r] = new_empty_rule(0,lineheight,linedepth)
+ end
+ end
+ end
+ for r=1,nofrows-1 do
+ setlink(column[r],column[r+1])
+ end
+ local v = new_vlist(column[1])
+ setfield(v,"height",height)
+-- setfield(v,"depth",linedepth)
+ setfield(v,"width",widths[c])
+ columns[c] = v
+ end
+ --
+ texsetcount("c_page_grid_first_column",firstcolumn)
+ texsetcount("c_page_grid_last_column",lastcolumn)
+end
+
+function columnsets.flushcolumn(name,column)
+ local dataset = data[name]
+ local columns = dataset.columns
+ local packed = columns[column]
+ setbox("b_page_grid_column",packed)
+ columns[column] = nil
+end
+
+function columnsets.finishflush(name)
+ local dataset = data[name]
+ local cells = dataset.cells
+ local firstcolumn = dataset.firstcolumn
+ local lastcolumn = dataset.lastcolumn
+ local nofrows = dataset.nofrows
+ for c=firstcolumn,lastcolumn do
+ local column = { }
+ for r=1,nofrows do
+ column[r] = false -- not used
+ end
+ cells[c] = column
+ end
+ dataset.page = dataset.page + 1
+ check(dataset)
+ setstate(dataset)
+end
+
+function columnsets.block(t)
+ local dataset = data[t.name]
+ local cells = dataset.cells
+ local nofcolumns = dataset.nofcolumns
+ local nofrows = dataset.nofrows
+ --
+ local c = t.c or 0
+ local r = t.r or 0
+ if c == 0 or r == 0 or c > nofcolumns or r > nofrows then
+ return
+ end
+ local nc = t.nc or 0
+ local nr = t.nr or 0
+ if nc == 0 then
+ return
+ end
+ if nr == 0 then
+ return
+ end
+ local rr = r + nr - 1
+ local cc = c + nc - 1
+ if rr > nofrows then
+ rr = nofrows
+ end
+ if cc > nofcolumns then
+ cc = nofcolumns
+ end
+ for i=c,cc do
+ local column = cells[i]
+ for j=r,rr do
+ column[j] = true
+ end
+ end
+end
+
+local function here(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ local rr = r + nr - 1
+ if rr > nofrows then
+ return false
+ end
+ local cc = 0
+ local wd = spans[c]
+ local wc = 0
+ local nc = 0
+ for i=c,nofcolumns do
+ nc = nc + 1
+ wc = wd[nc]
+ if not wc then
+ break
+ elseif wc >= width then
+ cc = i
+ break
+ end
+ end
+ if cc == 0 or cc > nofcolumns then
+ -- report("needed %p, no slot free at (%i,%i)",width,c,r)
+ return false
+ end
+ for i=c,cc do
+ local column = cells[i]
+ for j=r,rr do
+ if column[j] then
+ -- report("width %p, needed %p, checking (%i,%i) x (%i,%i), %s",width,wc,c,r,nc,nr,"quit")
+ return false
+ end
+ end
+ end
+ -- report("width %p, needed %p, checking (%i,%i) x (%i,%i), %s",width,wc,c,r,nc,nr,"match")
+ return c, r, nc
+end
+
+local methods = {
+ [v_here] = here,
+ [v_fixed] = here,
+ tblr = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for j=1,nofrows-nr+1 do
+ for i=c,nofcolumns do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ lrtb = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=1,nofrows-nr+1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ tbrl = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for j=1,nofrows-nr+1 do
+ for i=nofcolumns,c,-1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ rltb = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=nofcolumns,c,-1 do
+ for j=1,nofrows-nr+1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ btlr = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for j=nofrows-nr+1,1,-1 do
+ for i=c,nofcolumns do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ lrbt = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=nofrows-nr+1,1,-1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ btrl = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for j=nofrows-nr+1,1,-1 do
+ for i=nofcolumns,c,-1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ rlbt = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=nofcolumns,c,-1 do
+ for j=nofrows-nr+1,1,-1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ fxtb = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=r,nofrows-nr+1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ r = 1
+ end
+ end
+ end,
+ fxbt = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=nofrows-nr+1,r,-1 do
+ if not cells[i][j] then
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ r = 1
+ end
+ end,
+ [v_top] = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=1,nofrows-nr+1 do
+ if cells[i][j] then
+ break
+ else
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+ [v_bottom] = function(c,r,nr,nofcolumns,nofrows,cells,width,spans)
+ for i=c,nofcolumns do
+ for j=1,nofrows-nr+1 do
+ if cells[i][j] then
+ break
+ else
+ local c, r, cc = here(i,j,nr,nofcolumns,nofrows,cells,width,spans)
+ if c then
+ return c, r, cc
+ end
+ end
+ end
+ end
+ end,
+}
+
+local threshold = 50
+
+function columnsets.check(t)
+ local dataset = data[t.name]
+ local cells = dataset.cells
+ local nofcolumns = dataset.nofcolumns
+ local nofrows = dataset.nofrows
+ local widths = dataset.widths
+ local lineheight = dataset.lineheight
+ local linedepth = dataset.linedepth
+ local distances = dataset.distances
+ local spans = dataset.spans
+ --
+ local method = lower(t.method or "tblr")
+ local boxwidth = t.width or 0
+ local boxheight = t.height or 0
+ local boxnumber = t.box
+ local box = boxnumber and getbox(boxnumber)
+ --
+ if boxwidth > 0 and boxheight > 0 then
+ -- we're ok
+ elseif box then
+ boxwidth = getfield(box,"width")
+ boxheight = getfield(box,"height") + getfield(box,"depth")
+ else
+ report("empty box")
+ return
+ end
+ --
+ local c = t.c or 0
+ local r = t.r or 0
+ if c == 0 then
+ c = dataset.currentcolumn
+ end
+ if r == 0 then
+ r = dataset.currentrow
+ end
+ if c == 0 or r == 0 or c > nofcolumns or r > nofrows then
+ texsetcount("c_page_grid_reserved_state",5)
+ return
+ end
+-- report("checking width %p, height %p, depth %p, slot (%i,%i)",boxwidth,boxheight,boxdepth,c,r)
+ local nr = ceil(boxheight/(lineheight+linedepth))
+ --
+ local action = methods[method]
+ local cfound = false
+ local rfound = false
+ local lastcolumn = dataset.lastcolumn
+ -- if t.option == v_wide then
+ -- lastcolumn = nofcolumns
+ -- spans = dataset.spreads
+ -- end
+ if action then
+ cfound, rfound, nc = action(c,r,nr,lastcolumn,nofrows,cells,boxwidth-threshold,spans)
+ end
+ if not cfound and method ~= v_here then
+ cfound, rfound, nc = here(c,r,nr,lastcolumn,nofrows,cells,boxwidth-threshold,spans)
+ end
+ if cfound then
+ local ht = nr*(lineheight+linedepth)
+ local wd = spans[cfound][nc]
+ dataset.reserved_ht = ht
+ dataset.reserved_wd = wd
+ dataset.reserved_c = cfound
+ dataset.reserved_r = rfound
+ dataset.reserved_nc = nc
+ dataset.reserved_nr = nr
+ texsetcount("c_page_grid_reserved_state",0)
+ texsetdimen("d_page_grid_reserved_height",ht)
+ texsetdimen("d_page_grid_reserved_width",wd)
+ -- report("using (%i,%i) x (%i,%i) @ (%p,%p)",cfound,rfound,nc,nr,wd,ht)
+ else
+ dataset.reserved_ht = false
+ dataset.reserved_wd = false
+ dataset.reserved_c = false
+ dataset.reserved_r = false
+ dataset.reserved_nc = false
+ dataset.reserved_nr = false
+ texsetcount("c_page_grid_reserved_state",4)
+ -- texsetdimen("d_page_grid_reserved_height",0)
+ -- texsetdimen("d_page_grid_reserved_width",0)
+ -- report("no slot found")
+ end
+end
+
+function columnsets.put(t)
+ local dataset = data[t.name]
+ local cells = dataset.cells
+ local widths = dataset.widths
+ local lineheight = dataset.lineheight
+ local linedepth = dataset.linedepth
+ local boxnumber = t.box
+ local box = boxnumber and takebox(boxnumber)
+ --
+ local c = t.c or dataset.reserved_c
+ local r = t.r or dataset.reserved_r
+ if not c or not r then
+ -- report("no reserved slot (%i,%i)",c,r)
+ return
+ end
+ local lastc = c + dataset.reserved_nc - 1
+ local lastr = r + dataset.reserved_nr - 1
+ --
+ for i=c,lastc do
+ local column = cells[i]
+ for j=r,lastr do
+ column[j] = true
+ end
+ end
+ cells[c][r] = box
+ setfield(box,"height",lineheight)
+ setfield(box,"depth",linedepth)
+ setfield(box,"width",widths[c])
+ dataset.reserved_c = false
+ dataset.reserved_r = false
+ dataset.reserved_nc = false
+ dataset.reserved_nr = false
+ --
+end
+
+local function findgap(dataset)
+ local cells = dataset.cells
+ local nofcolumns = dataset.nofcolumns
+ local nofrows = dataset.nofrows
+ local currentrow = dataset.currentrow
+ local currentcolumn = dataset.currentcolumn
+ --
+ local foundc = 0
+ local foundr = 0
+ local foundn = 0
+ for c=currentcolumn,dataset.lastcolumn do
+ local column = cells[c]
+foundn = 0
+ for r=currentrow,nofrows do
+ if not column[r] then
+ if foundc == 0 then
+ foundc = c
+ foundr = r
+ end
+ foundn = foundn + 1
+ elseif foundn > 0 then
+ return foundc, foundr, foundn
+ end
+ end
+ if foundn > 0 then
+ return foundc, foundr, foundn
+ end
+ currentrow = 1
+ end
+end
+
+-- we can enforce grid snapping
+
+-- local function checkroom(head,available,row)
+-- if row == 1 then
+-- while head do
+-- local id = getid(head)
+-- if id == glue_code then
+-- head = getnext(head)
+-- else
+-- break
+-- end
+-- end
+-- end
+-- local used = 0
+-- local line = false
+-- while head do
+-- local id = getid(head)
+-- if id == hlist_code or id == vlist_code or id == rule_code then -- <= rule_code
+-- used = used + getfield(head,"height") + getfield(head,"depth")
+-- line = true
+-- elseif id == glue_code then
+-- if line then
+-- break
+-- end
+-- used = used + getfield(head,"width")
+-- elseif id == kern_code then
+-- used = used + getfield(head,"kern")
+-- elseif id == penalty_code then
+-- end
+-- if used > available then
+-- break
+-- end
+-- head = getnext(head)
+-- end
+-- return line, used
+-- end
+
+local function checkroom(head,available,row)
+ if row == 1 then
+ while head do
+ local id = getid(head)
+ if id == glue_code then
+ head = getnext(head)
+ else
+ break
+ end
+ end
+ end
+ local used = 0
+ local line = false
+ while head do
+ local id = getid(head)
+ if id == hlist_code or id == vlist_code or id == rule_code then -- <= rule_code
+ used = used + getfield(head,"height") + getfield(head,"depth")
+ line = true
+ if used > available then
+ break
+ end
+ elseif id == glue_code then
+ if line then
+ break
+ end
+ used = used + getfield(head,"width")
+ if used > available then
+ break
+ end
+ elseif id == kern_code then
+ used = used + getfield(head,"kern")
+ if used > available then
+ break
+ end
+ elseif id == penalty_code then
+ -- not good enough ... we need to look bakck too
+ if getfield(head,"penalty") >= 10000 then
+ line = false
+ else
+ break
+ end
+ end
+ head = getnext(head)
+ end
+ return line, used
+end
+
+-- we could preroll on a cheap copy .. in fact, a split loop normally works on
+-- a copy ... then we could also stepsise make the height smaller .. slow but nice
+
+-- local function findslice(dataset,head,available,column,row)
+-- local used = 0
+-- local first = nil
+-- local last = nil
+-- local line = false
+-- local lineheight = dataset.lineheight
+-- local linedepth = dataset.linedepth
+-- if row == 1 then
+-- while head do
+-- local id = getid(head)
+-- if id == glue_code then
+-- head = removenode(head,head,true)
+-- else
+-- break
+-- end
+-- end
+-- end
+-- while head do
+-- -- no direction yet, if so use backend code
+-- local id = getid(head)
+-- local hd = 0
+-- if id == hlist_code or id == vlist_code or id == rule_code then -- <= rule_code
+-- hd = getfield(head,"height") + getfield(head,"depth")
+-- elseif id == glue_code then
+-- hd = getfield(head,"width")
+-- elseif id == kern_code then
+-- hd = getfield(head,"kern")
+-- elseif id == penalty_code then
+-- end
+-- if used + hd > available then
+-- if first then
+-- setnext(last)
+-- setprev(head)
+-- return used, first, head
+-- else
+-- return 0
+-- end
+-- else
+-- if not first then
+-- first = head
+-- end
+-- used = used + hd
+-- last = head
+-- head = getnext(head)
+-- end
+-- end
+-- return used, first
+-- end
+
+-- todo
+--
+-- first = takelist(done)
+-- head = takelist(rest)
+-- local tail = nuts.tail(first)
+-- if false then
+-- local disc = tex.lists.split_discards_head
+-- if disc then
+-- disc = tonut(disc)
+-- setlink(tail,disc)
+-- tail = nuts.tail(disc)
+-- tex.lists.split_discards_head = nil
+-- end
+-- end
+-- setlink(tail,head)
+
+-- We work on a copy because we need to keep properties. We can make faster copies
+-- by only doing a one-level deep copy.
+
+local function findslice(dataset,head,available,column,row)
+ local first = nil
+ local lineheight = dataset.lineheight
+ local linedepth = dataset.linedepth
+ local linetotal = lineheight + linedepth
+ local slack = 65536 -- 1pt
+ local copy = copylist(head)
+ local attempts = 0
+ local usedsize = available
+ while true do
+ attempts = attempts + 1
+ texsetbox("scratchbox",tonode(new_vlist(copy)))
+ local done = splitbox("scratchbox",usedsize,"additional")
+ local used = getfield(done,"height")
+ local rest = takebox("scratchbox")
+ if used > (usedsize+slack) then
+ if trace_detail then
+ report("at (%i,%i) available %p, used %p, overflow %p",column,row,usedsize,used,used-usedsize)
+ end
+ -- flush copy
+ flushlist(takelist(done))
+ flushlist(takelist(rest))
+ -- check it we can try again
+ usedsize = usedsize - linetotal
+ if usedsize > linetotal then
+ copy = copylist(head)
+ else
+ return 0, nil, head
+ end
+ else
+ -- flush copied box
+ flushlist(takelist(done))
+ flushlist(takelist(rest))
+ -- deal with real data
+ texsetbox("scratchbox",tonode(new_vlist(head)))
+ done = splitbox("scratchbox",usedsize,"additional")
+ rest = takebox("scratchbox")
+ used = getfield(done,"height")
+ if attempts > 1 then
+ used = available
+ end
+ first = takelist(done)
+ head = takelist(rest)
+ -- return result
+ return used, first, head
+ end
+ end
+end
+
+local nofcolumngaps = 0
+
+function columnsets.add(name,box)
+ local dataset = data[name]
+ local cells = dataset.cells
+ local nofcolumns = dataset.nofcolumns
+ local nofrows = dataset.nofrows
+ local currentrow = dataset.currentrow
+ local currentcolumn = dataset.currentcolumn
+ local lineheight = dataset.lineheight
+ local linedepth = dataset.linedepth
+ local widths = dataset.widths
+ --
+ local b = getbox(box)
+ local l = getlist(b)
+-- dataset.rest = l
+ if l then
+ setlist(b,nil)
+ local hd = lineheight + linedepth
+ while l do
+ local foundc, foundr, foundn = findgap(dataset)
+ if foundc then
+ local available = foundn * hd
+ local used, first, last = findslice(dataset,l,available,foundc,foundr)
+ if first then
+ local v
+ if used == available or (foundr+foundn > nofrows) then
+ v = vpack(first,available,"exactly")
+ else
+ v = new_vlist(first)
+ end
+ nofcolumngaps = nofcolumngaps + 1
+ -- getmetatable(v).columngap = nofcolumngaps
+ properties[v] = { columngap = nofcolumngaps }
+ -- report("setting gap %a at (%i,%i)",nofcolumngaps,foundc,foundr)
+ setfield(v,"height",lineheight)
+ setfield(v,"depth",linedepth)
+ setfield(v,"width",widths[currentcolumn])
+ local column = cells[foundc]
+ --
+ column[foundr] = v
+ used = used - hd
+ if used > 0 then
+ for r=foundr+1,foundr+foundn-1 do
+ used = used - hd
+ foundr = foundr + 1
+ column[r] = true
+ if used <= 0 then
+ break
+ end
+ end
+ end
+ currentcolumn = foundc
+ currentrow = foundr
+ dataset.currentcolumn = currentcolumn
+ dataset.currentrow = currentrow
+ l = last
+ dataset.rest = l
+ else
+ local column = cells[foundc]
+ for i=foundr,foundr+foundn-1 do
+ column[i] = true
+ end
+ l = last
+ end
+ else
+ dataset.rest = l
+ return -- save and flush
+ end
+ end
+ end
+end
+
+do
+
+ -- A split approach is more efficient than a context(followup) inside
+ -- followup itself as we need less (internal) housekeeping.
+
+ local followup = nil
+ local splitter = lpeg.splitter("*",tonumber)
+
+ columnsets["noto"] = function(t)
+ return followup()
+ end
+
+ columnsets["goto"] = function(name,target)
+ local dataset = data[name]
+ local nofcolumns = dataset.nofcolumns
+ if target == v_yes or target == "" then
+ local currentcolumn = dataset.currentcolumn
+ followup = function()
+ context(dataset.currentcolumn == currentcolumn and 1 or 0)
+ end
+ return followup()
+ end
+ if target == v_first then
+ if dataset.currentcolumn > 1 then
+ target = v_page
+ else
+ return context(0)
+ end
+ end
+ if target == v_page then
+ if dataset.currentcolumn == 1 and dataset.currentrow == 1 then
+ return context(0)
+ else
+ local currentpage = dataset.page
+ followup = function()
+ context(dataset.page == currentpage and 1 or 0)
+ end
+ return followup()
+ end
+ end
+ if target == v_last then
+ target = dataset.nofcolumns
+ if dataset.currentcolumn ~= target then
+ followup = function()
+ context(dataset.currentcolumn ~= target and 1 or 0)
+ end
+ return followup()
+ end
+ return
+ end
+ local targetpage = tonumber(target)
+ if targetpage then
+ followup = function()
+ context(dataset.currentcolumn ~= targetpage and 1 or 0)
+ end
+ return followup()
+ end
+ local targetcolumn, targetrow = lpeg.match(splitter,target)
+ if targetcolumn and targetrow then
+ if dataset.currentcolumn ~= targetcolumn and dataset.currentrow ~= targetrow then
+ followup = function()
+ if dataset.currentcolumn ~= targetcolumn then
+ context(1)
+ return
+ end
+ if dataset.currentcolumn == targetcolumn then
+ context(dataset.currentrow ~= targetrow and 1 or 0)
+ else
+ context(0)
+ end
+ end
+ return followup()
+ end
+ end
+ end
+
+end
+
+function columnsets.currentcolumn(name)
+ local dataset = data[name]
+ context(dataset.currentcolumn)
+end
+
+function columnsets.flushrest(name,box)
+ local dataset = data[name]
+ local rest = dataset.rest
+ if rest then
+ dataset.rest = nil
+ setbox("global",box,new_vlist(rest))
+ end
+end
+
+function columnsets.setvsize(name)
+ local dataset = data[name]
+ local c, r, n = findgap(dataset)
+ if n then
+ dataset.currentcolumn = c
+ dataset.currentrow = r
+ else
+ dataset.currentcolumn = 1
+ dataset.currentrow = 1
+ n = 0
+ end
+ local gap = n*(dataset.lineheight+dataset.linedepth)
+ texsetdimen("d_page_grid_gap_height",gap)
+ -- can be integrated
+ -- report("state %a, n %a, column %a, row %a",dataset.state,n,dataset.currentcolumn,dataset.currentrow)
+end
+
+function columnsets.sethsize(name)
+ local dataset = data[name]
+ texsetdimen("d_page_grid_column_width",dataset.widths[dataset.currentcolumn])
+end
+
+function columnsets.sethspan(name,span)
+ -- no checking if there is really space, so we assume it can be
+ -- placed which makes spans a very explicit feature
+ local dataset = data[name]
+ local column = dataset.currentcolumn
+ local available = dataset.lastcolumn - column + 1
+ if span > available then
+ span = available
+ end
+ local width = dataset.spans[column][span]
+ texsetdimen("d_page_grid_span_width",width)
+end
+
+function columnsets.setlines(t)
+ local dataset = data[t.name]
+ dataset.lines[t.page][t.column] = t.value
+end
+
+function columnsets.setstart(t)
+ local dataset = data[t.name]
+ dataset.start[t.page][t.column] = t.value
+end
+
+function columnsets.setproperties(t)
+ local dataset = data[t.name]
+ local column = t.column
+ dataset.distances[column] = t.distance
+ dataset.widths[column] = t.width
+end
+
+local areas = { }
+
+function columnsets.registerarea(t)
+ -- maybe metatable with values
+ areas[#areas+1] = t
+end
+
+-- state : repeat | start
+
+local ctx_page_grid_set_area = context.protected.page_grid_set_area
+
+function columnsets.flushareas(name)
+ local nofareas = #areas
+ if nofareas == 0 then
+ return
+ end
+ local dataset = data[name]
+ local page = dataset.page
+ if odd(page) then
+ -- report("checking %i areas",#areas)
+ local kept = { }
+ for i=1,nofareas do
+ local area = areas[i]
+ -- local page = area.page -- maybe use page counter in columnset
+ -- local type = area.type
+ local okay = false
+ --
+ local nofcolumns = area.nc
+ local nofrows = area.nr
+ local column = area.c
+ local row = area.r
+ columnsets.block {
+ name = name,
+ c = column,
+ r = row,
+ nc = nofcolumns,
+ nr = nofrows,
+ }
+ local left = 0
+ local start = dataset.nofleft + 1
+ local overflow = (column + nofcolumns - 1) - dataset.nofleft
+ local height = nofrows * (dataset.lineheight + dataset.linedepth)
+ local width = dataset.spreads[column][nofcolumns]
+ -- report("span, width %p, overflow %i",width,overflow)
+ if overflow > 0 then
+ local used = nofcolumns - overflow
+ left = dataset.spreads[column][used] + getdimen("backspace")
+ end
+ ctx_page_grid_set_area(name,area.name,column,row,width,height,start,left) -- or via counters / dimens
+ if area.state ~= v_repeat then
+ area = nil
+ end
+ if area then
+ kept[#kept+1] = area
+ end
+ end
+ areas = kept
+ end
+end
+
+function columnsets.setarea(t)
+ local dataset = data[t.name]
+ local cells = dataset.cells
+ local box = takebox(t.box)
+ local column = t.c
+ local row = t.r
+ if column and row then
+ setfield(box,"height",dataset.lineheight)
+ setfield(box,"depth",dataset.linedepth)
+ setfield(box,"width",dataset.widths[column])
+ cells[column][row] = box
+ end
+end
+
+-- The interface.
+
+interfaces.implement {
+ name = "definecolumnset",
+ actions = columnsets.define,
+ arguments = { {
+ { "name", "string" },
+ } }
+}
+
+interfaces.implement {
+ name = "resetcolumnset",
+ actions = columnsets.reset,
+ arguments = { {
+ { "name", "string" },
+ { "nofleft", "integer" },
+ { "nofright", "integer" },
+ { "nofrows", "integer" },
+ { "lineheight", "dimension" },
+ { "linedepth", "dimension" },
+ { "width", "dimension" },
+ { "distance", "dimension" },
+ { "maxwidth", "dimension" },
+ } }
+}
+
+interfaces.implement {
+ name = "preparecolumnsetflush",
+ actions = columnsets.prepareflush,
+ arguments = { "string" },
+}
+
+interfaces.implement {
+ name = "finishcolumnsetflush",
+ actions = columnsets.finishflush,
+ arguments = { "string" },
+}
+
+interfaces.implement {
+ name = "flushcolumnsetcolumn",
+ actions = columnsets.flushcolumn,
+ arguments = { "string" ,"integer" },
+}
+
+interfaces.implement {
+ name = "setvsizecolumnset",
+ actions = columnsets.setvsize,
+ arguments = { "string" },
+}
+
+interfaces.implement {
+ name = "sethsizecolumnset",
+ actions = columnsets.sethsize,
+ arguments = { "string" },
+}
+
+interfaces.implement {
+ name = "sethsizecolumnspan",
+ actions = columnsets.sethspan,
+ arguments = { "string" ,"integer" },
+}
+
+interfaces.implement {
+ name = "flushcolumnsetrest",
+ actions = columnsets.flushrest,
+ arguments = { "string", "integer" },
+}
+
+interfaces.implement {
+ name = "blockcolumnset",
+ actions = columnsets.block,
+ arguments = { {
+ { "name", "string" },
+ { "c", "integer" },
+ { "r", "integer" },
+ { "nc", "integer" },
+ { "nr", "integer" },
+ { "box", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "checkcolumnset",
+ actions = columnsets.check,
+ arguments = { {
+ { "name", "string" },
+ { "method", "string" },
+ { "c", "integer" },
+ { "r", "integer" },
+ { "box", "integer" },
+ { "width", "dimension" },
+ { "height", "dimension" },
+ { "option", "string" },
+ } }
+}
+
+interfaces.implement {
+ name = "putincolumnset",
+ actions = columnsets.put,
+ arguments = { {
+ { "name", "string" },
+ { "c", "integer" },
+ { "r", "integer" },
+ { "box", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "addtocolumnset",
+ actions = columnsets.add,
+ arguments = { "string", "integer" },
+}
+
+interfaces.implement {
+ name = "setcolumnsetlines",
+ actions = columnsets.setlines,
+ arguments = { {
+ { "name", "string" },
+ { "page", "integer" },
+ { "column", "integer" },
+ { "value", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "setcolumnsetstart",
+ actions = columnsets.setstart,
+ arguments = { {
+ { "name", "string" },
+ { "page", "integer" },
+ { "column", "integer" },
+ { "value", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "setcolumnsetproperties",
+ actions = columnsets.setproperties,
+ arguments = { {
+ { "name", "string" },
+ { "column", "integer" },
+ { "distance", "dimension" },
+ { "width", "dimension" },
+ } }
+}
+
+interfaces.implement {
+ name = "registercolumnsetarea",
+ actions = columnsets.registerarea,
+ arguments = { {
+ { "name", "string" },
+ { "type", "string" },
+ { "page", "integer" },
+ { "state", "string" },
+ { "c", "integer" },
+ { "r", "integer" },
+ { "nc", "integer" },
+ { "nr", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "flushcolumnsetareas",
+ actions = columnsets.flushareas,
+ arguments = "string",
+}
+
+interfaces.implement {
+ name = "setcolumnsetarea",
+ actions = columnsets.setarea,
+ arguments = { {
+ { "name", "string" },
+ { "c", "integer" },
+ { "r", "integer" },
+ { "box", "integer" },
+ } }
+}
+
+interfaces.implement {
+ name = "columnsetgoto",
+ actions = columnsets["goto"],
+ arguments = { "string" , "string" },
+}
+
+interfaces.implement {
+ name = "columnsetnoto",
+ actions = columnsets["noto"],
+}
+
+interfaces.implement {
+ name = "columnsetcurrentcolumn",
+ actions = columnsets.currentcolumn,
+ arguments = "string",
+}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/page-cst.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-cst.mkiv
new file mode 100644
index 00000000000..4559ec33fdf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-cst.mkiv
@@ -0,0 +1,778 @@
+%D \module
+%D [ file=page-cst,
+%D version=2016.12.15,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Page Grids (aka Column Sets),
+%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.
+
+% todo : markings per column
+
+%D This module is work in progress and in due time it will replace
+%D columnsets.
+
+\writestatus{loading}{ConTeXt Page Macros / Page Grids}
+
+\registerctxluafile{page-cst}{1.001}
+
+\unprotect
+
+% maybe some protected def ([esc])
+
+%D Columnsets are kind of special. They are mostly meant for special products with
+%D magazine like properties. They are normally not mixed with single column layouts
+%D and not all features of \CONTEXT\ might cooperate well with a mechanism like
+%D this. We use the name page grid because (as with other reimplementations of
+%D \MKII\ features in \MKIV, we need another namespace in order to migrate stepwise.
+%D
+%D This implementation is not neccessarily better than the previous one but it might
+%D be easier to extend it. It should be a bit more efficient.
+%D
+%D When writing this code I occasionally needed a motivational musical time||out and
+%D watching the latest Snarky Puppy DVD brought me the musically and visually videos
+%D of Jacob Collier (Piano, voice, anything) on YouTube (and yes, music keeps amazing
+%D me). It's definitely more fun to watch that than to write code like this.
+
+\definesystemconstant{pagegrid}
+
+\installcorenamespace{pagegrid}
+
+\installframedcommandhandler \??pagegrid {pagegrid} \??pagegrid
+
+\setuppagegrid
+ [\c!distance=1.5\bodyfontsize,
+ \c!n=\plustwo,
+ \c!nleft=\pagegridparameter\c!n,
+ \c!nright=\pagegridparameter\c!n,
+ %\c!align=, % inherit
+ %\c!separator=\v!none,
+ %\c!setups=,
+ \c!lines=\layoutparameter\c!lines,
+ \c!frame=\v!off,
+ \c!strut=\v!no,
+ \c!offset=\v!overlay,
+ \c!alternative=\v!local,
+ \c!width=\v!auto,
+ \c!page=,
+ \c!direction=\v!normal, % todo
+ \c!maxheight=\textheight,
+ \c!maxwidth=\makeupwidth]
+
+\appendtoks % could become an option
+ \setuevalue{\e!start\currentpagegrid}{\startpagegrid[\currentpagegrid]}%
+ \setuevalue{\e!stop \currentpagegrid}{\stoppagegrid}%
+ \clf_definecolumnset {
+ name {\currentpagegrid}%
+ }%
+\to \everydefinepagegrid
+
+\newdimen \d_page_grid_column_width
+\newdimen \d_page_grid_max_height
+\newdimen \d_page_grid_max_width
+\newdimen \d_page_grid_distance
+
+\newdimen \d_page_grid_reserved_height
+\newdimen \d_page_grid_reserved_width
+\newcount \c_page_grid_reserved_state
+
+\newdimen \d_page_grid_gap_height
+
+\newcount \c_page_grid_n_of_left
+\newcount \c_page_grid_n_of_right
+\newcount \c_page_grid_n_of_rows
+\newcount \c_page_grid_first_column
+\newcount \c_page_grid_last_column
+
+\newbox \b_page_grid_collected
+\newbox \b_page_grid_column_rest
+\newbox \b_page_grid_column
+
+\unexpanded\def\setuppagegridlines{\doquadrupleempty\page_grid_setup_lines}
+\unexpanded\def\setuppagegridstart{\doquadrupleempty\page_grid_setup_start}
+
+\def\page_grid_setup_lines[#1][#2][#3][#4]% id page col value
+ {\clf_setcolumnsetlines{name {#1} page #2 column #3 value #4}}
+
+\def\page_grid_setup_start[#1][#2][#3][#4]% id page col value
+ {\clf_setcolumnsetstart{name {#1} page #2 column #3 value #4}}
+
+\unexpanded\def\page_grid_check
+ {\dorecurse{\numexpr\pagegridparameter\c!nleft+\pagegridparameter\c!nright}
+ {\page_grid_check_column{##1}}}
+
+\unexpanded\def\page_grid_check_column#1%
+ {\chaintocurrentpagegrid{\currentpagegrid:#1}%
+ \edef\p_distance{\namedpagegridparameter{\currentpagegrid:#1}\c!distance}%
+ \edef\p_width {\namedpagegridparameter{\currentpagegrid:#1}\c!width}%
+ \clf_setcolumnsetproperties {%
+ name {\currentpagegrid}
+ column \numexpr#1\relax
+ \ifx\p_distance\empty\else
+ distance \p_distance
+ \fi
+ \ifx\p_width\empty\else\ifx\p_width\v!auto\else
+ width \p_width
+ \fi\fi
+ }}
+
+\appendtoks
+ \dorecurse{\numexpr\pagegridparameter\c!nleft+\pagegridparameter\c!nright}
+ {\chaintocurrentpagegrid{\currentpagegrid:#1}}%
+\to \everydefinepagegrid
+
+\unexpanded\def\startpagegrid
+ {\bgroup
+ \dodoubleempty\page_grid_start}
+
+\def\page_grid_start_dummy[#1][#2]%
+ {\let\page_grid_stop\egroup}
+
+\def\page_grid_start[#1][#2]%
+ {\let\page_grid_start\page_grid_start_dummy
+ \ifsecondargument
+ \edef\currentpagegrid{#1}%
+ \setupcurrentpagegrid[#2]%
+ \else\iffirstargument
+ \doifassignmentelse{#1}
+ {\let\currentpagegrid\empty
+ \setupcurrentpagegrid[#1]}%
+ {\def\currentpagegrid{#1}}%
+ \else
+ \let\currentpagegrid\empty
+ \fi\fi
+ \usepageparameter\pagegridparameter
+ \c_page_grid_n_of_left \pagegridparameter\c!nleft\relax
+ \c_page_grid_n_of_right\pagegridparameter\c!nright\relax
+ \c_page_grid_n_of_rows \pagegridparameter\c!lines\relax
+ \d_page_grid_max_width \pagegridparameter\c!maxwidth\relax
+ \d_page_grid_max_height\pagegridparameter\c!maxheight\relax
+ \d_page_grid_distance \pagegridparameter\c!distance\relax
+ %
+ \ifcase\c_page_grid_n_of_rows
+ \getrawnoflines{\dimexpr\d_page_grid_max_height-\strutheight+\topskip\relax}%
+ \c_page_grid_n_of_rows\noflines
+ \fi
+ \edef\p_width{\pagegridparameter\c!width}%
+ \insidecolumnstrue % will be different flag in addition
+ \clf_resetcolumnset {
+ name {\currentpagegrid}
+ nofrows \c_page_grid_n_of_rows
+ nofleft \c_page_grid_n_of_left
+ nofright \c_page_grid_n_of_right
+ lineheight \strutht
+ linedepth \strutdp
+ \ifx\p_width\v!auto
+ % sets \d_page_grid_column_width
+ \else
+ width \p_width
+ \fi
+ distance \d_page_grid_distance
+ maxwidth \d_page_grid_max_width
+ }%
+ %
+ \page_grid_check
+ %
+ \clf_flushcolumnsetareas{\currentpagegrid}\relax
+ \setupoutputroutine[\s!pagegrid]%
+ \page_grid_command_set_hsize
+ \page_grid_command_set_vsize
+ }%\begingroup}
+
+\unexpanded\def\stoppagegrid
+ {\page_grid_stop}
+
+\def\page_grid_stop
+ {\endgraf % needed, else wrong vsize in one par case
+ \vfill % otherwise weird \placenotes[endnotes]
+ \page_otr_command_set_vsize % needed
+ \penalty\c_page_otr_eject_penalty
+ \page_grid_command_flush_page
+ \page_otr_fill_and_eject_page
+ \page_otr_command_set_vsize % needed
+ \egroup
+ \page_otr_command_set_vsize
+ \page_otr_command_set_hsize}
+
+\unexpanded\def\reservepagegrid[#1]%
+ {\begingroup
+ \letdummyparameter\c!c\plusone
+ \letdummyparameter\c!r\plusone
+ \letdummyparameter\c!nc\plusone
+ \letdummyparameter\c!nr\plusone
+ \getdummyparameters[#1]%
+ \clf_blockcolumnset {
+ name {\currentpagegrid}
+ c \dummyparameter\c!c
+ r \dummyparameter\c!r
+ nc \dummyparameter\c!nc
+ nr \dummyparameter\c!nr
+ }%
+ \endgroup}
+
+\unexpanded\def\setpagegrid
+ {\dosingleempty\page_grid_set}
+
+\unexpanded\def\page_grid_set[#1]%
+ {\begingroup
+ \letdummyparameter\c!c\zerocount
+ \letdummyparameter\c!r\zerocount
+ \letdummyparameter\c!option\v!none
+ \getdummyparameters[#1]%
+ \dowithnextboxcs\page_grid_set_indeed\hbox}
+
+\def\page_grid_set_indeed
+ {\clf_checkcolumnset {
+ name {\currentpagegrid}
+ c \dummyparameter\c!c
+ r \dummyparameter\c!r
+ box \nextbox
+ option {\dummyparameter\c!option}
+ }%
+ \ifcase\c_page_grid_reserved_state
+ \setbox\nextbox\vpack to \d_page_grid_reserved_height \bgroup
+ \vss
+ \hpack to \d_page_grid_reserved_width \bgroup
+ \box\nextbox
+ \hss
+ \egroup
+ \vss
+ \egroup
+ \wd\nextbox\d_page_grid_reserved_width
+ \clf_putincolumnset {
+ name {\currentpagegrid}
+ box \nextbox
+ }%
+ \fi
+ \endgroup}
+
+\unexpanded\def\page_grid_command_set_vsize
+ {\clf_setvsizecolumnset{\currentpagegrid}%
+ \ifdim\d_page_grid_gap_height<\lineheight
+ \page_grid_command_flush_page
+ \page_otr_fill_and_eject_page
+ \fi
+ \global\vsize\d_page_grid_gap_height
+ \pagegoal\vsize}
+
+\unexpanded\def\page_grid_command_set_hsize
+ {\clf_sethsizecolumnset{\currentpagegrid}%
+ \hsize\d_page_grid_column_width
+ \textwidth\d_page_grid_column_width}
+
+\unexpanded\def\page_grid_command_routine
+ {\ifvoid\normalpagebox \else
+ \clf_addtocolumnset{\currentpagegrid}\normalpagebox
+ \fi
+ \page_grid_command_set_vsize
+ \page_grid_command_flush_saved_floats
+ \page_grid_command_set_vsize
+ \ifdim\d_page_grid_gap_height<\lineheight
+ \page_grid_command_flush_page
+ \fi
+ \page_grid_command_set_vsize
+ \clf_flushcolumnsetrest {\currentpagegrid}\normalpagebox
+ \ifvoid\normalpagebox \else
+ \unvbox\normalpagebox
+ \fi}
+
+\installoutputroutine\synchronizepagegrid
+ {\ifvoid\normalpagebox\else
+ \clf_addtocolumnset{\currentpagegrid}\normalpagebox
+ \page_grid_command_set_vsize
+ \clf_flushcolumnsetrest{\currentpagegrid}\normalpagebox
+ \ifvoid\normalpagebox \else
+ \unvbox\normalpagebox
+ \fi
+ \fi}
+
+% todo line numbers and marks
+
+\unexpanded\def\page_grid_command_flush_page_column#1%
+ {\scratchcounter#1\relax
+ \clf_flushcolumnsetcolumn{\currentpagegrid}\scratchcounter
+ \anch_mark_column_box\b_page_grid_column
+ \page_marks_synchronize_column\c_page_grid_first_column\c_page_grid_last_column\scratchcounter\b_page_grid_column
+ \ifnum\scratchcounter>\c_page_grid_n_of_left
+ \advance\scratchcounter-\c_page_grid_n_of_left
+ \page_lines_add_numbers_to_box\b_page_grid_column\scratchcounter\c_page_grid_n_of_right\plustwo
+ \else
+ \page_lines_add_numbers_to_box\b_page_grid_column\scratchcounter\c_page_grid_n_of_left\plustwo
+ \fi
+ \begingroup
+ \edef\currentpagegrid{\currentpagegrid:#1}%
+ \inheritedpagegridframedbox\box\b_page_grid_column
+ \endgroup}
+
+\unexpanded\def\page_grid_command_flush_page
+ {\deactivatecolor % puzzling, try ungrouped color \red or so
+ \setbox\b_page_grid_collected\hpack\bgroup
+ \clf_preparecolumnsetflush{\currentpagegrid}%
+ \letpagegridparameter\c!region\currentpagegrid
+ \doifelse{\pagegridparameter\c!direction}\v!reverse
+ {\dostepwiserecurse\c_page_grid_last_column\c_page_grid_first_column\minusone
+ {\page_grid_command_flush_page_column{##1}%
+ \ifnum##1>\plusone
+ \kern\namedpagegridparameter{\currentpagegrid:##1}\c!distance\relax
+ \fi}}%
+ {\dostepwiserecurse\c_page_grid_first_column\c_page_grid_last_column\plusone
+ {\page_grid_command_flush_page_column{##1}%
+ \ifnum##1<\c_page_grid_last_column
+ \kern\namedpagegridparameter{\currentpagegrid:##1}\c!distance\relax
+ \fi}}%
+ \clf_finishcolumnsetflush{\currentpagegrid}%
+ \egroup
+ \page_otr_construct_and_shipout\box\b_page_grid_collected
+ \clf_flushcolumnsetareas{\currentpagegrid}\relax
+ \page_grid_command_flush_saved_floats}
+
+% slow but robust
+
+\unexpanded\def\page_grid_command_next_progress
+ {\strut
+ \page_otr_flush_all_floats
+ \page_otr_eject_page
+ \ifcase\clf_columnsetnoto\else
+ \expandafter\page_grid_command_next_progress
+ \fi}
+
+\unexpanded\def\page_grid_command_handle_column
+ {\ifcase\clf_columnsetgoto{\currentpagegrid}{\page_breaks_columns_current_option}\relax\else
+ \expandafter\page_grid_command_next_progress
+ \fi}
+
+\installcolumnbreakmethod\s!pagegrid\s!unknown {\page_grid_command_handle_column}
+\installcolumnbreakmethod\s!pagegrid\v!yes {\page_grid_command_handle_column}
+
+\unexpanded\def\page_grid_command_next_page
+ {\ifcase\clf_columnsetgoto{\currentpagegrid}{\v!page}\relax\else
+ \page_grid_command_flush_page
+ \fi}
+
+\unexpanded\def\page_grid_command_next_page_and_inserts
+% {\page_otr_eject_page_and_flush_inserts}
+ {\page_otr_flush_all_floats
+ \page_grid_command_next_page}
+
+\let\page_grid_command_package_contents\page_one_command_package_contents
+
+\unexpanded\def\page_grid_command_flush_saved_floats
+ {\ifconditional\c_page_floats_flushing \else
+ \ifconditional\c_page_floats_some_waiting
+ \page_grid_command_flush_saved_floats_indeed
+ \fi
+ \fi}
+
+\unexpanded\def\page_grid_command_flush_saved_floats_indeed
+ {\page_floats_flush\s!text\plusone
+ \clf_checkcolumnset {
+ name {\currentpagegrid}
+ method {\floatmethod}
+ width \wd\floatbox
+ height \ht\floatbox
+ }%
+ \ifcase\c_page_grid_reserved_state
+ \page_grid_place_float_here_indeed
+ \page_grid_command_set_vsize % needed
+ \ifconditional\c_page_floats_some_waiting
+ \doubleexpandafter\page_grid_command_flush_saved_floats_indeed
+ \fi
+ \else
+ \page_floats_resave\s!text
+ \fi}
+
+% needs checking
+
+\unexpanded\def\page_grid_command_flush_floats
+ {\wait\global\settrue\c_page_floats_flushing
+ \ifconditional\c_page_floats_some_waiting
+ \par
+ \page_grid_command_flush_floats_indeed
+ \fi
+ \global\savednoffloats\zerocount
+ \global\setfalse\c_page_floats_some_waiting
+ \global\setfalse\c_page_floats_flushing}
+
+\def\page_grid_command_flush_floats_indeed % much in common with OTRSET
+ {\wait\ifconditional\c_page_floats_some_waiting
+ \ifconditional\c_page_floats_pack_flushed
+ \setfalse\c_page_floats_center_box % not needed as we do call directly
+ \page_floats_collect\s!text\hsize\emwidth
+ \global\setbox\floatbox\hbox to \hsize
+ {\hfil
+ \dorecurse\nofcollectedfloats
+ {\ifcase\columndirection % nog document wide
+ \page_floats_flush\s!text\plusone
+ \else
+ \page_floats_flush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}%
+ \fi
+ \ifdim\wd\floatbox>\makeupwidth % \hsize
+ \hbox to \makeupwidth{\hss\box\floatbox\hss}%
+ \else
+ \box\floatbox
+ \fi
+ \ifnum\recurselevel<\nofcollectedfloats
+ \hfil
+ \fi}%
+ \hfil}%
+ \else
+ \page_floats_get
+ \fi
+ \doplacefloatbox
+ \expandafter\page_grid_command_flush_floats_indeed
+ \fi}
+
+% so far
+
+\unexpanded\def\page_grid_command_check_if_float_fits
+ {\clf_checkcolumnset {
+ name {\currentpagegrid}
+ method {\floatmethod}
+ % c \zerocount
+ % r \zerocount
+ box \floatbox
+ }%
+ \ifcase\c_page_grid_reserved_state
+ \global\settrue\c_page_floats_room
+ \else
+ \global\setfalse\c_page_floats_room
+ \fi}
+
+\unexpanded\def\page_grid_place_float_here_indeed
+ {\setbox\floatbox\vpack to \d_page_grid_reserved_height \bgroup
+ \vss
+ \hpack to \d_page_grid_reserved_width \bgroup
+ % \hss % no
+ \box\floatbox
+ \hss
+ \egroup
+ \vss
+ \egroup
+ \clf_putincolumnset {
+ name {\currentpagegrid}
+ box \floatbox
+ }}
+
+\def\page_grid_place_float_slot
+ {% safeguard
+ \ifx\floatmethod\empty
+ \let\floatmethod\v!here
+ \fi
+ % synchronize
+ \penalty\c_page_otr_eject_penalty
+ % push
+ \setbox\savedfloatbox\box\floatbox
+ \page_grid_command_flush_saved_floats
+ \setbox\floatbox\box\savedfloatbox
+ % pop
+ \ifconditional\c_page_floats_some_waiting
+ \page_floats_save\s!text
+ \nonoindentation
+ \else
+ \clf_checkcolumnset {
+ name {\currentpagegrid}
+ method {\floatmethod}
+ \ifx\floatcolumn\empty \else
+ c \floatcolumn
+ \fi
+ \ifx\floatrow\empty \else
+ r \floatrow
+ \fi
+ box \floatbox
+ }%
+ \ifcase\c_page_grid_reserved_state
+ \page_grid_place_float_here_indeed
+ \else
+ \page_floats_save\s!text
+ \nonoindentation
+ \fi
+ \fi}
+
+\def\page_grid_place_float_fixed % todo: fallback on here
+ {\ifx\floatcolumn\empty
+ \let\floatmethod\v!here
+ \else\ifx\floatrow\empty
+ \let\floatmethod\v!here
+ \else
+ \let\floatmethod\v!fixed
+ \fi\fi
+ \page_grid_place_float_slot}
+
+\def\page_grid_place_float_force
+ {% synchronize
+ \penalty\c_page_otr_eject_penalty
+ \clf_checkcolumnset {
+ name {\currentpagegrid}
+ method {\floatmethod}
+ box \floatbox
+ }%
+ \ifcase\c_page_grid_reserved_state
+ \page_grid_place_float_here_indeed
+ \else
+ \page_floats_save\s!text
+ \nonoindentation
+ \fi}
+
+\def\page_grid_place_float_page {\page_grid_place_float_slot} % todo: fallback on here
+
+\def\page_grid_place_float_here {\let\floatmethod\v!here\page_grid_place_float_slot}
+\def\page_grid_place_float_top {\page_grid_place_float_slot}
+\def\page_grid_place_float_bottom{\page_grid_place_float_slot}
+
+\installfloatmethod \s!pagegrid \v!here \page_grid_place_float_here
+\installfloatmethod \s!pagegrid \v!force \page_grid_place_float_force % todo
+%installfloatmethod \s!pagegrid \v!left
+%installfloatmethod \s!pagegrid \v!right
+%installfloatmethod \s!pagegrid \v!text
+\installfloatmethod \s!pagegrid \v!top \page_grid_place_float_top
+\installfloatmethod \s!pagegrid \v!bottom \page_grid_place_float_bottom
+%installfloatmethod \s!pagegrid \v!auto
+%installfloatmethod \s!pagegrid \v!margin
+%installfloatmethod \s!pagegrid \v!opposite
+\installfloatmethod \s!pagegrid \v!page \page_grid_place_float_page
+%installfloatmethod \s!pagegrid \v!leftpage
+%installfloatmethod \s!pagegrid \v!rightpage
+%installfloatmethod \s!pagegrid \v!inmargin
+%installfloatmethod \s!pagegrid \v!inleft
+%installfloatmethod \s!pagegrid \v!inright
+%installfloatmethod \s!pagegrid \v!leftmargin
+%installfloatmethod \s!pagegrid \v!rightmargin
+%installfloatmethod \s!pagegrid \v!leftedge
+%installfloatmethod \s!pagegrid \v!rightedge
+%installfloatmethod \s!pagegrid \v!somewhere
+%installfloatmethod \s!pagegrid \v!backspace
+%installfloatmethod \s!pagegrid \v!cutspace
+\installfloatmethod \s!pagegrid \s!tblr \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!lrtb \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!tbrl \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!rltb \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!fxtb \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!btlr \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!lrbt \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!btrl \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!rlbt \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!fxbt \page_grid_place_float_slot
+\installfloatmethod \s!pagegrid \s!fixd \page_grid_place_float_fixed
+
+%
+
+\unexpanded\def\page_grid_command_side_float_output
+ {} % nothing, reset anyway
+
+\unexpanded\def\page_grid_command_flush_side_floats
+ {\page_sides_forget_floats}
+
+\unexpanded\def\page_grid_command_synchronize_side_floats
+ {\page_sides_forget_floats}
+
+\unexpanded\def\page_grid_command_synchronize_hsize
+ {\page_grid_command_set_hsize}
+
+\defineoutputroutine
+ [\s!pagegrid]
+ [\s!page_otr_command_routine =\page_grid_command_routine,
+ \s!page_otr_command_package_contents =\page_grid_command_package_contents,
+ \s!page_otr_command_set_vsize =\page_grid_command_set_vsize,
+ \s!page_otr_command_set_hsize =\page_grid_command_set_hsize, % tricky, goes wrong
+ \s!page_otr_command_next_page =\page_grid_command_next_page,
+ \s!page_otr_command_next_page_and_inserts =\page_grid_command_next_page_and_inserts,
+ \s!page_otr_command_synchronize_hsize =\page_grid_command_synchronize_hsize,
+ % \s!page_otr_command_set_top_insertions =\page_grid_command_set_top_insertions,
+ % \s!page_otr_command_set_bottom_insertions =\page_grid_command_set_bottom_insertions,
+ % \s!page_otr_command_flush_top_insertions =\page_grid_command_flush_top_insertions,
+ % \s!page_otr_command_flush_bottom_insertions =\page_grid_command_flush_bottom_insertions,
+ % \s!page_otr_command_set_float_hsize =\page_grid_command_set_float_hsize,
+ \s!page_otr_command_check_if_float_fits =\page_grid_command_check_if_float_fits,
+ % \s!page_otr_command_flush_float_box =\page_grid_command_flush_float_box,
+ \s!page_otr_command_synchronize_side_floats =\page_grid_command_synchronize_side_floats,
+ \s!page_otr_command_side_float_output =\page_grid_command_side_float_output,
+ \s!page_otr_command_flush_floats =\page_grid_command_flush_floats,
+ \s!page_otr_command_flush_side_floats =\page_grid_command_flush_side_floats,
+ \s!page_otr_command_flush_saved_floats =\page_grid_command_flush_saved_floats
+ % \s!page_otr_command_flush_margin_blocks =\page_grid_command_flush_margin_blocks, % not used
+ ]
+
+% spans
+
+\installcorenamespace{pagegridspan}
+
+\installframedcommandhandler \??pagegridspan {pagegridspan} \??pagegridspan
+
+\setuppagegridspan
+ [\c!frame=\v!off,
+ \c!before=,
+ \c!after=,
+ \c!offset=\v!overlay,
+ \c!location=\v!left,
+ \c!linecorrection=\v!off,
+ \c!depthcorrection=\v!off,
+ \c!n=\plustwo,
+ \c!nlines=\zerocount,
+ \c!align=\v!normal,
+ \c!width=\d_page_grid_span_width,
+ \c!indenting=,
+ \c!indentnext=\v!yes,
+ \c!default=\v!here,
+ \c!alternative=\v!a]
+
+\newdimen\d_page_grid_span_width
+
+\unexpanded\def\startpagegridspan
+ {\dotripleempty\page_grid_span_start}
+
+\def\page_grid_span_start[#1][#2][#3]% [#3] gobbles space
+ {\endgraf % else rubish output if forgotten
+ \synchronizepagegrid
+ \bgroup
+ \forgetall
+ \edef\currentpagegridspan{#1}%
+ \clf_sethsizecolumnspan{\currentpagegrid}\pagegridspanparameter\c!n\relax
+ \setbox\scratchbox\hbox\bgroup\inheritedpagegridspanframed\bgroup
+ \usepagegridspanstyleandcolor\c!style\c!color
+ \pagegridspanparameter\c!before
+ \ignorespaces}
+
+\unexpanded\def\stoppagegridspan
+ {\removeunwantedspaces
+ \par
+ \verticalstrut
+ \kern-2\struttotal
+ \verticalstrut
+ \endgraf
+ \pagegridspanparameter\c!after
+ \egroup\egroup
+ \setpagegrid{\box\scratchbox}%
+ % todo: push into slot
+ \egroup
+ \endgraf}
+
+\def\pagegridspanwidth#1% assumes equal distances
+ {\the\dimexpr
+ #1\d_page_grid_column_width
+ +#1\d_page_grid_distance
+ - \d_page_grid_distance
+ \relax}
+
+% areas
+
+\installcorenamespace{pagegridarea}
+
+\installframedcommandhandler \??pagegridarea {pagegridarea} \??pagegridarea
+
+\setuppagegridarea
+ [\c!x=\plusone,
+ \c!y=\plusone,
+ \c!nx=\plusone,
+ \c!ny=\plusone,
+ \c!clipoffset=2\lineheight,
+ \c!leftoffset=\zeropoint,
+ \c!rightoffset=\zeropoint,
+ \c!offset=\v!overlay,
+ \c!strut=\v!no,
+ \c!frame=\v!off,
+ %\c!type=\v!next,
+ \c!align=\v!normal,
+ \c!page=\plusone,
+ \c!state=\v!stop]
+
+% type: both fixed left right next (not now), then better
+% lefttext and righttext or so
+
+\appendtoks
+ % \edef\p_type{}%
+ % \ifx\p_type\v!next
+ % \doifelseoddpage
+ % {\letpagegridareaparameter\c!type\v!right}%
+ % {\letpagegridareaparameter\c!type\v!left}%
+ % \fi
+ \clf_registercolumnsetarea {
+ name {\currentpagegridarea}
+ % type {\p_type}
+ % page \pagegridareaparameter\c!page
+ state {\pagegridareaparameter\c!state}
+ c \pagegridareaparameter\c!x
+ r \pagegridareaparameter\c!y
+ nc \pagegridareaparameter\c!nx
+ nr \pagegridareaparameter\c!ny
+ }%
+\to \everydefinepagegridarea
+
+\unexpanded\def\setuppagegridareatext
+ {\dodoubleargument\page_grid_set_area_text}
+
+\def\page_grid_set_area_text[#1][#2]%
+ {\edef\currentpagegridarea{#1}%
+ \setpagegridareaparameter\c!text{#2}}
+
+% maybe move the left/right correction to the tex end or the offset to lua
+
+\unexpanded\def\page_grid_set_area#1#2#3#4#5#6#7#8% can be optimized
+ {\begingroup
+ \edef\currentpagegridarea{#2}%
+ \setpagegridareaparameter\c!width {#5\scaledpoint}%
+ \setpagegridareaparameter\c!height{#6\scaledpoint}%
+ \setbox\nextbox\hpack\bgroup\inheritedpagegridareaframed\bgroup
+ \usepagegridareastyleandcolor\c!style\c!color
+ \ignorespaces
+ \pagegridareaparameter\c!text
+ \egroup\egroup
+ %
+ \scratchdimen#8\scaledpoint
+ \ifdim\scratchdimen>\zeropoint
+ \setbox\scratchbox\vbox\bgroup
+ \clip
+ [ \c!offset=\pagegridareaparameter\c!clipoffset,%
+ \c!rightoffset=\pagegridareaparameter\c!rightoffset,%
+ \c!width=\scratchdimen,%
+ % \c!height=
+ ]%
+ {\copy\nextbox}%
+ \egroup
+ \clf_setcolumnsetarea{name {#1} box \scratchbox c #3 r #4}%
+ \setbox\scratchbox\vbox\bgroup
+ \hskip-\layoutparameter\c!backspace % todo: #9
+ \clip
+ [ \c!offset=\pagegridareaparameter\c!clipoffset,%
+ \c!leftoffset=\pagegridareaparameter\c!rightoffset,%
+ \c!hoffset=\scratchdimen,%
+ \c!width=\dimexpr\wd\nextbox-\scratchdimen\relax,%
+ % \c!height=
+ ]%
+ {\box\nextbox}%
+ \egroup
+ \clf_setcolumnsetarea{name {#1} box \scratchbox c #7 r #4}%
+ \else
+ \setbox\scratchbox\vbox\bgroup
+ \box\nextbox % wrapping needed
+ \egroup
+ \clf_setcolumnsetarea{name {#1} box \scratchbox c #3 r #4}%
+ \fi
+ \endgroup}
+
+\let\setpagegridarea\page_grid_set_area
+
+% state start | repeat
+
+% for now (transition)
+
+\let\definecolumnset \definepagegrid
+\let\setupcolumnset \setuppagegrid
+\let\setupcolumnsetlines \setuppagegridlines
+\let\setupcolumnsetstart \setuppagegridstart
+\let\startcolumnset \startpagegrid
+\let\stopcolumnset \stoppagegrid
+\let\definecolumnsetspan \definepagegridspan
+\let\setupcolumnsetspan \setuppagegridspan
+\let\startcolumnsetspan \startpagegridspan
+\let\stopcolumnsetspan \stoppagegridspan
+\let\columnsetspanwidth \pagegridspanwidth
+\let\definecolumnsetarea \definepagegridarea
+\let\setupcolumnsetarea \setuppagegridarea
+\let\setupcolumnsetareatext\setuppagegridareatext
+
+\protect
+
diff --git a/Master/texmf-dist/tex/context/base/page-fac.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-fac.mkiv
index 88789abe9fb..88789abe9fb 100644
--- a/Master/texmf-dist/tex/context/base/page-fac.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-fac.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-flt.lua b/Master/texmf-dist/tex/context/base/mkiv/page-flt.lua
index e91285d0a64..caa8d490d19 100644
--- a/Master/texmf-dist/tex/context/base/page-flt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-flt.lua
@@ -21,9 +21,7 @@ local C, S, P, lpegmatch = lpeg.C, lpeg.S, lpeg.P, lpeg.match
-- we use floatbox, floatwidth, floatheight
-- text page leftpage rightpage (todo: top, bottom, margin, order)
-local copy_node_list = node.copy_list
local flush_node_list = node.flush_list
-local copy_node = node.copy
local setdimen = tex.setdimen
local setcount = tex.setcount
@@ -34,6 +32,13 @@ local textakebox = nodes.takebox
floats = floats or { }
local floats = floats
+local context = context
+local commands = commands
+local interfaces = interfaces
+local showmessage = interfaces.showmessage
+local implement = interfaces.implement
+local setmacro = interfaces.setmacro
+
local noffloats = 0
local last = nil
local default = "text"
@@ -118,12 +123,13 @@ function floats.save(which,data)
box = b,
}
insert(stack,t)
+-- inspect(stacks)
setcount("global","savednoffloats",#stacks[default])
if trace_floats then
report_floats("%s, category %a, number %a, slot %a, width %p, height %p, depth %p","saving",
which,noffloats,#stack,b.width,b.height,b.depth)
else
- interfaces.showmessage("floatblocks",2,noffloats)
+ showmessage("floatblocks",2,noffloats)
end
else
report_floats("ignoring empty, category %a, number %a",which,noffloats)
@@ -137,12 +143,13 @@ function floats.resave(which)
local b = textakebox("floatbox")
last.box = b
insert(stack,1,last)
+-- inspect(stacks)
setcount("global","savednoffloats",#stacks[default])
if trace_floats then
report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","resaving",
which,noffloats,#stack,b.width,b.height,b.depth)
else
- interfaces.showmessage("floatblocks",2,noffloats)
+ showmessage("floatblocks",2,noffloats)
end
else
report_floats("unable to resave float")
@@ -151,15 +158,19 @@ end
function floats.flush(which,n,bylabel)
which = which or default
+-- inspect(stacks)
local stack = stacks[which]
local t, b, n = get(stack,n or 1,bylabel)
if t then
+ if not b then
+ showmessage("floatblocks",1,t.n)
+ end
if trace_floats then
local w, h, d = setdimensions(b) -- ?
report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","flushing",
which,t.n,n,w,h,d)
else
- interfaces.showmessage("floatblocks",3,t.n)
+ showmessage("floatblocks",3,t.n)
end
texsetbox("floatbox",b)
last = remove(stack,n)
@@ -175,8 +186,8 @@ function floats.consult(which,n)
local stack = stacks[which]
local t, b, n = get(stack,n)
if t then
+ local w, h, d = setdimensions(b)
if trace_floats then
- local w, h, d = setdimensions(b)
report_floats("%s, category %a, number %a, slot %a width %p, height %p, depth %p","consulting",
which,t.n,n,w,h,d)
end
@@ -277,11 +288,6 @@ end
-- interface
-local context = context
-local commands = commands
-local implement = interfaces.implement
-local setmacro = interfaces.setmacro
-
implement {
name = "flushfloat",
actions = floats.flush,
@@ -367,7 +373,7 @@ implement {
implement {
name = "analysefloatmethod",
actions = function(str)
- local method, label, row, column = floats.analysemethod(str)
+ local method, label, column, row = floats.analysemethod(str)
setmacro("floatmethod",method or "")
setmacro("floatlabel", label or "")
setmacro("floatrow", row or "")
diff --git a/Master/texmf-dist/tex/context/base/page-flt.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-flt.mkiv
index 16c42713970..c514496dfd4 100644
--- a/Master/texmf-dist/tex/context/base/page-flt.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-flt.mkiv
@@ -194,7 +194,7 @@
\page_floats_flush\s!text\plusone
\ifconditional\c_page_floats_center_box
\ifdim\wd\globalscratchbox<\hsize
- \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
+ \global\setbox\floatbox\hpack to \hsize{\hss\box\floatbox\hss}%
\else
% retain special alignments
\ifinsidecolumns
@@ -258,7 +258,7 @@
{\page_floats_flush{#1}\plusone
\edef\floatspecification{\clf_getfloatvariable{specification}}% Is this okay?
\the\everybeforeflushedpagefloat
- \vbox to \textheight
+ \vpack to \textheight
{\doifnotinset\v!high\floatspecification\vfill
\box\floatbox
\doifnotinset\v!low\floatspecification\vfill}%
diff --git a/Master/texmf-dist/tex/context/base/page-flw.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-flw.mkiv
index 56fe32e5b9e..56fe32e5b9e 100644
--- a/Master/texmf-dist/tex/context/base/page-flw.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-flw.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-grd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-grd.mkiv
index e70414b666c..4125eb46aea 100644
--- a/Master/texmf-dist/tex/context/base/page-grd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-grd.mkiv
@@ -30,17 +30,19 @@
\c_page_grids_columns_mode\plusone
\processallactionsinset
[#1]%
- [ \v!reset=>\c_page_grids_location \zerocount,
- \v!bottom=>\c_page_grids_location \plusone,
- \v!top=>\c_page_grids_location \plustwo,
- \v!none=>\c_page_grids_line_mode \zerocount,
- \v!all=>\c_page_grids_line_mode \plusone,
- \v!lines=>\c_page_grids_line_mode \plustwo,
- \v!frame=>\c_page_grids_line_mode \plusthree,
- \v!nonumber=>\c_page_grids_lineno_mode\zerocount,
- \v!right=>\c_page_grids_lineno_mode\plusone,
- \v!left=>\c_page_grids_lineno_mode\plustwo,
- \v!outer=>\c_page_grids_lineno_mode\plusthree]%
+ [ \v!reset=>\c_page_grids_location \zerocount
+ \c_page_grids_columns_mode\zerocount,
+ \v!bottom=>\c_page_grids_location \plusone,
+ \v!top=>\c_page_grids_location \plustwo,
+ \v!none=>\c_page_grids_line_mode \zerocount,
+ \v!all=>\c_page_grids_line_mode \plusone,
+ \v!lines=>\c_page_grids_line_mode \plustwo,
+ \v!frame=>\c_page_grids_line_mode \plusthree,
+ \v!nonumber=>\c_page_grids_lineno_mode \zerocount,
+ \v!right=>\c_page_grids_lineno_mode \plusone,
+ \v!left=>\c_page_grids_lineno_mode \plustwo,
+ \v!outer=>\c_page_grids_lineno_mode \plusthree,
+ \v!columns=>\c_page_grids_columns_mode\plusone]% new option
\ifcase\c_page_grids_location
\let\page_grids_add_to_box\gobbleoneargument
\else % 1=bottom 2=top
@@ -92,13 +94,13 @@
\def\page_grids_add_to_one_indeed#1%
{\begingroup
\resetvisualizers
- \global\setbox#1\vbox{\backgroundline[layout:one]{\box#1}}%
+ \global\setbox#1\vpack{\backgroundline[layout:one]{\box#1}}%
\endgroup}
\def\page_grids_add_to_mix_indeed#1%
{\begingroup
\resetvisualizers
- \global\setbox#1\vbox{\backgroundline[layout:mix]{\box#1}}%
+ \global\setbox#1\vpack{\backgroundline[layout:mix]{\box#1}}%
\endgroup}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-imp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-imp.mkiv
index 198a982298c..c08f9856fa7 100644
--- a/Master/texmf-dist/tex/context/base/page-imp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-imp.mkiv
@@ -73,12 +73,19 @@
\unexpanded\def\invokepagehandler#1%
{\expandnamespacevalue\??shipoutmethod{#1}\v!normal}
+% \def\page_shipouts_handle
+% {\csname\??shipoutmethod\ifcsname\??shipoutmethod\v_page_target_method\endcsname
+% \v_page_target_method
+% \else
+% \v!none
+% \fi\endcsname}
+
\def\page_shipouts_handle
- {\csname\??shipoutmethod\ifcsname\??shipoutmethod\v_page_target_method\endcsname
- \v_page_target_method
+ {\ifcsname\??shipoutmethod\v_page_target_method\endcsname
+ \expandafter\lastnamedcs
\else
- \v!none
- \fi\endcsname}
+ \expandafter\page_shipouts_ignore
+ \fi}
\installshipoutmethod \v!normal
{\ifarrangingpages
@@ -108,7 +115,7 @@
\ifcase\shipoutfinalizemethod
\page_shipouts_handle{#1}%
\else
- \setbox\shipoutscratchbox\hbox{#1}% just in case there are objects there, hook for testing (will go away)
+ \setbox\shipoutscratchbox\hpack{#1}% just in case there are objects there, hook for testing (will go away)
\finalizeshipoutbox\shipoutscratchbox
\page_shipouts_handle{\box\shipoutscratchbox}%
\fi
@@ -124,13 +131,13 @@
{[\ifarrangingpages arranged \fi page
\ifarrangingpages\the\arrangeno\else\the\realpageno\fi\normalspace
not flushed]}%
- \setbox\scratchbox\hbox{#1}%
+ \setbox\scratchbox\hpack{#1}%
\deadcycles\zerocount
\endgroup}
\def\page_otr_flush_every_stuff
{\begingroup
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{% before the main one !
\ifcase\realfolio \or
\the\everyfirstshipout
@@ -166,15 +173,15 @@
\normalexpanded{\doifelseinset{\the\shippedoutpages}{\pagestoshipout}}\donetrue\donefalse
\fi
\ifdone
- \setbox\shipoutscratchbox\hbox{#1}%
+ \setbox\shipoutscratchbox\hpack{#1}%
\ifcase\shipoutfinalizemethod
\finalizeshipoutbox\shipoutscratchbox
\fi
- \normalshipout\vbox
+ \normalshipout\vpack
{\offinterlineskip
\vskip\d_page_shipouts_offset
\hskip\d_page_shipouts_offset
- \hbox
+ \hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}}%
@@ -185,7 +192,7 @@
\def\page_shipouts_arrange#1%
{% \global\advance\shippedoutpages\plusone
\begingroup
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
\box\shipoutscratchbox}%
@@ -297,7 +304,7 @@
{\setgvalue{\??layoutarranger#1}}
\def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb
- {\executeifdefined{\??layoutarranger#1}\donothing}
+ {\begincsname\??layoutarranger#1\endcsname}
\let\poparrangedpages\relax
\let\pusharrangedpage\relax
@@ -375,12 +382,12 @@
\fi}
\def\handlearrangedpageXandY#1#2#3#4#5%
- {\global\setbox#5\hbox to \arrangedpageX\paperwidth
- {\setbox\scratchbox\vbox to \arrangedpageY\paperheight
+ {\global\setbox#5\hpack to \arrangedpageX\paperwidth
+ {\setbox\scratchbox\vpack to \arrangedpageY\paperheight
{\offinterlineskip
\vskip#4\paperheight
\hskip#3\paperwidth
- \dorotatebox{\ifcase#2 0\else180\fi}\hbox{\box#1}%
+ \dorotatebox{\ifcase#2 0\else180\fi}\hpack{\box#1}%
\vfill}%
\wd\scratchbox\zeropoint
\box\scratchbox\box#5\hss}}
@@ -394,15 +401,15 @@
\forgetall % somehow we're back and need to redo this
\gotonextarrangepage
\ifnum\arrangedrotationO\arrangedrotationE>\zerocount
- \setbox#1\vbox
+ \setbox#1\vpack
{\ifconditional\arrangeddoublestate
\ifodd\arrangeno
- \dorotatebox\arrangedrotationO\hbox{\box#1}%
+ \dorotatebox\arrangedrotationO\hpack{\box#1}%
\else
- \dorotatebox\arrangedrotationE\hbox{\box#1}%
+ \dorotatebox\arrangedrotationE\hpack{\box#1}%
\fi
\else
- \dorotatebox\arrangedrotationO\hbox{\box#1}%
+ \dorotatebox\arrangedrotationO\hpack{\box#1}%
\fi}%
\fi
\ifconditional\arrangedmirrorstate
@@ -550,14 +557,14 @@
\def\handlearrangedpageSIDE
{\wd\arrangedpageA\paperwidth
\wd\arrangedpageB\paperwidth
- \global\setbox\arrangedpageA\hbox
+ \global\setbox\arrangedpageA\hpack
{\box\arrangedpageA\box\arrangedpageB}%
\ht\arrangedpageA\paperheight}
\def\handlearrangedpageTOP
{\ht\arrangedpageA\paperheight
\ht\arrangedpageB\paperheight
- \global\setbox\arrangedpageA\vbox
+ \global\setbox\arrangedpageA\vpack
{\offinterlineskip\vskip\paperheight
\box\arrangedpageA\box\arrangedpageB}%
\global\setbox\arrangedpageB\box\scratchbox} % ?
@@ -577,14 +584,14 @@
\ht\arrangedpageA\paperheight
\ht\arrangedpageB\paperheight
\ifconditional\arrangedswapstate
- \global\setbox\arrangedpageA\hbox
+ \global\setbox\arrangedpageA\hpack
{\page_boxes_apply_clip_print_left \arrangedpageA
\box\arrangedpageA
\page_boxes_apply_clip_print_right\arrangedpageB
\box\arrangedpageB}%
\setfalse\arrangedswapstate
\else
- \global\setbox\arrangedpageA\hbox
+ \global\setbox\arrangedpageA\hpack
{\page_boxes_apply_clip_print_left \arrangedpageB
\box\arrangedpageB
\page_boxes_apply_clip_print_right\arrangedpageA
@@ -598,14 +605,14 @@
\ht\arrangedpageA\paperheight
\ht\arrangedpageB\paperheight
\ifconditional\arrangedswapstate
- \global\setbox\arrangedpageA\vbox
+ \global\setbox\arrangedpageA\vpack
{\offinterlineskip
\vskip\paperheight
\box\arrangedpageA
\box\arrangedpageB}%
\setfalse\arrangedswapstate
\else
- \global\setbox\arrangedpageA\vbox
+ \global\setbox\arrangedpageA\vpack
{\offinterlineskip
\vskip\paperheight
\box\arrangedpageB
@@ -635,14 +642,14 @@
\def\pusharrangedpageTWO#1%
{\advancearrangedpageN
\reportarrangedpage\arrangedpageN
- \global\setbox\arrangedpageB\vbox
+ \global\setbox\arrangedpageB\vpack
{\offinterlineskip
\unvbox\arrangedpageB
\allowbreak
- \setbox#1\vbox{\box#1}% really needed in order to keep real dimensions
+ \setbox#1\vpack{\box#1}% really needed in order to keep real dimensions
\ht#1\onepoint
\dp#1\zeropoint
- \vbox{\box#1}}}
+ \vpack{\box#1}}}
\def\poparrangedpagesTWOTOPSIDE
{\ifnum\arrangedpageN>\zerocount
@@ -757,7 +764,6 @@
{\dosetuparrangement{2}{4}{8}{3}{5}% X,Y,Total,hcutmarks,vcutmarks
\pusharrangedpageSIXTEENZ\poparrangedpagesAB\relax}
-
\def\pusharrangedpageSIXTEENZ#1%
{\advancearrangedpageN
\reportarrangedpage\arrangedpageN
@@ -1014,9 +1020,9 @@
\installpagearrangement 1*2-Conference
{\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks
- \pusharrangedpageCONFERENCE2\poparrangedpagesAB\relax}
+ \pusharrangedpageCONFERENCETWO\poparrangedpagesAB\relax}
-\def\pusharrangedpageCONFERENCE2#1%
+\def\pusharrangedpageCONFERENCETWO#1%
{\advancearrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
@@ -1030,9 +1036,9 @@
\installpagearrangement 1*4-Conference
{\dosetuparrangement{1}{2}{4}{3}{2}% X,Y,Total,hcutmarks,vcutmarks
- \pusharrangedpageCONFERENCE4\poparrangedpagesAB\relax}
+ \pusharrangedpageCONFERENCEFOUR\poparrangedpagesAB\relax}
-\def\pusharrangedpageCONFERENCE4#1%
+\def\pusharrangedpageCONFERENCEFOUR#1%
{\advancearrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
@@ -1185,11 +1191,11 @@
%
% \starttext \dorecurse{30}{test \recurselevel \page} \stoptext
-\def\pusharrangedpageXY#1%
+\unexpanded\def\pusharrangedpageXY#1%
{\advancearrangedpageN
\global\advance\arrangedpageM\plusone
\reportarrangedpage\arrangedpageN
- \global\setbox\arrangedpageB\hbox \ifdim\v_page_target_width>\zeropoint to \v_page_target_width \fi
+ \global\setbox\arrangedpageB\hpack \ifdim\v_page_target_width>\zeropoint to \v_page_target_width \fi
{\ifvoid\arrangedpageB\else
\unhbox\arrangedpageB
\ifdim\v_page_target_dx>\zeropoint
@@ -1202,7 +1208,7 @@
\fi
\box#1}%
\ifnum\arrangedpageM<\arrangedpageX\else
- \global\setbox\arrangedpageA\vbox \ifdim\v_page_target_height>\zeropoint to \v_page_target_height \fi
+ \global\setbox\arrangedpageA\vpack \ifdim\v_page_target_height>\zeropoint to \v_page_target_height \fi
{\offinterlineskip
\ifvoid\arrangedpageA\else
\unvbox\arrangedpageA
@@ -1221,7 +1227,7 @@
\poparrangedpages
\fi}
-\def\poparrangedpagesXY
+\unexpanded\def\poparrangedpagesXY
{\ifnum\arrangedpageN>\zerocount
\paperwidth \arrangedpageX\paperwidth
\paperheight\arrangedpageY\paperheight
@@ -1267,7 +1273,7 @@
\setuppaper
[\c!width =\dimexpr\printpaperwidth -2\v_page_target_backspace\relax,
\c!height=\dimexpr\printpaperheight-2\v_page_target_topspace \relax]
-
+
% \definepageshift[test][horizontal][10pt,20pt,30pt,40pt,50pt]
% \definepageshift[test][vertical] [10pt,20pt,30pt,40pt,50pt]
%
@@ -1334,7 +1340,7 @@
\def\page_boxes_apply_shift_indeed#1%
{\edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}%
- \setbox#1\vbox
+ \setbox#1\vpack
{\offinterlineskip
\vskip\d_page_boxes_v_shifts
\hskip\d_page_boxes_h_shifts
@@ -1346,8 +1352,10 @@
\def\page_boxes_setup_shift[#1][#2][#3]% page|paper horizontal vertical
{\ifthirdargument % paper=arrange
- \edef\page_boxes_h_shifts{\ifcsname\??pageshift\v!horizontal:#2\endcsname\csname\??pageshift\v!horizontal:#2\endcsname\fi}%
- \edef\page_boxes_v_shifts{\ifcsname\??pageshift\v!vertical :#3\endcsname\csname\??pageshift\v!vertical :#3\endcsname\fi}%
+ %edef\page_boxes_h_shifts{\ifcsname\??pageshift\v!horizontal:#2\endcsname\csname\??pageshift\v!horizontal:#2\endcsname\fi}%
+ %edef\page_boxes_v_shifts{\ifcsname\??pageshift\v!vertical :#3\endcsname\csname\??pageshift\v!vertical :#3\endcsname\fi}%
+ \edef\page_boxes_h_shifts{\begincsname\??pageshift\v!horizontal:#2\endcsname}%
+ \edef\page_boxes_v_shifts{\begincsname\??pageshift\v!vertical :#3\endcsname}%
\doifelse{#1}\v!page {\let\page_boxes_apply_shift_print\page_boxes_apply_shift}{\let\page_boxes_apply_shift_print\gobbleoneargument}%
\doifelse{#1}\v!paper{\let\page_boxes_apply_shift_paper\page_boxes_apply_shift}{\let\page_boxes_apply_shift_paper\gobbleoneargument}%
\else\ifsecondargument
diff --git a/Master/texmf-dist/tex/context/base/page-inf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-inf.mkiv
index acfbf26f6ab..f60977e0c97 100644
--- a/Master/texmf-dist/tex/context/base/page-inf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-inf.mkiv
@@ -89,7 +89,7 @@
\def\page_info_add_to_box_indeed#1%
{\scratchdimen\wd#1%
- \setbox\b_page_versions\vbox to \ht#1%
+ \setbox\b_page_versions\vpack to \ht#1%
{\vfill
\settexthoffset
\hsize\dimexpr\scratchdimen-2\texthoffset\relax
@@ -98,7 +98,7 @@
\vskip\bodyfontsize}%
\dp\b_page_versions\zeropoint
\wd\b_page_versions\scratchdimen
- \setbox#1\hbox{\box#1\hskip-\scratchdimen\box\b_page_versions}}
+ \setbox#1\hpack{\box#1\hskip-\scratchdimen\box\b_page_versions}}
\setupversion % resets
[\v!final]
diff --git a/Master/texmf-dist/tex/context/base/page-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-ini.mkiv
index 15783a99bc3..6f6cb7180ff 100644
--- a/Master/texmf-dist/tex/context/base/page-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-ini.mkiv
@@ -178,7 +178,7 @@
\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 \vbox \bgroup
+ {\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)
@@ -220,13 +220,14 @@
\to \everybeforepagebody
\def\page_boxes_constructed_page#1#2%
- {\vbox\bgroup % intercept spurious spaces
+ {\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
diff --git a/Master/texmf-dist/tex/context/base/page-inj.lua b/Master/texmf-dist/tex/context/base/mkiv/page-inj.lua
index fd66ead08d1..fd66ead08d1 100644
--- a/Master/texmf-dist/tex/context/base/page-inj.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-inj.lua
diff --git a/Master/texmf-dist/tex/context/base/page-inj.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-inj.mkvi
index 03472fe5593..03472fe5593 100644
--- a/Master/texmf-dist/tex/context/base/page-inj.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-inj.mkvi
diff --git a/Master/texmf-dist/tex/context/base/page-ins.lua b/Master/texmf-dist/tex/context/base/mkiv/page-ins.lua
index 235f586c689..235f586c689 100644
--- a/Master/texmf-dist/tex/context/base/page-ins.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-ins.lua
diff --git a/Master/texmf-dist/tex/context/base/page-ins.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv
index c91073a143d..c91073a143d 100644
--- a/Master/texmf-dist/tex/context/base/page-ins.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-ins.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-lay.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-lay.mkiv
index d1328bb6ba0..1fde9e9c9c5 100644
--- a/Master/texmf-dist/tex/context/base/page-lay.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-lay.mkiv
@@ -379,8 +379,11 @@
\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\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
@@ -497,8 +500,11 @@
\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{\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}
\unexpanded\def\page_paper_identify_target#1%
{\ifcsname\??layoutcurrent#1\endcsname
@@ -578,7 +584,13 @@
\endgroup
\fi
%\writestatus{layout target}{(\the\paperwidth,\the\paperheight) -> (\the\printpaperwidth,\the\printpaperheight)}%
- \page_layouts_synchronize}
+ \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
@@ -730,7 +742,7 @@
\letvalue{\??layoutcolumn0}\zeropoint
-\def\layoutcolumnoffset#1%
+\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
@@ -821,12 +833,19 @@
\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
- {\csname\??layoutmethod\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname
- \layoutparameter\c!method
+ {\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname
+ \lastnamedcs
\else
- \v!normal
- \fi\endcsname}
+ \page_layouts_check_default
+ \fi}
\let\checkcurrentlayout\page_layouts_check_next % public and used in naw, so this synonym will stay
@@ -868,39 +887,48 @@
\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}
+ % {\ifcsname\??layoutlocation#1\endcsname\csname\??layoutlocation#1\endcsname\fi}
+ {\begincsname\??layoutlocation#1\endcsname}
\unexpanded\def\page_target_check_centering
{\setfalse\c_page_target_print_doublesided
@@ -925,12 +953,19 @@
\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
- {\csname\??layoutalternative\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname
- \layoutparameter\c!alternative
+ {\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname
+ \expandafter\lastnamedcs
\else
- \v!normal
- \fi\endcsname}
+ \expandafter\page_boxes_construct_content_default
+ \fi}
%D \macros
%D {adaptlayout}
@@ -990,12 +1025,20 @@
\global\let\page_adepts_push\relax
\global\let\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
- {\csname\??pageadaptations\the\ifcsname\??pageadaptations\the\realpageno\endcsname\realpageno\else\zerocount\fi\endcsname}
+ {\begincsname\??pageadaptations\the\realpageno\endcsname}
\def\page_adapts_reset
{\ifcsname\??pageadaptations\the\realpageno\endcsname
- \global\undefinevalue{\??pageadaptations\the\realpageno}%
+ \expandafter\glet\csname\??pageadaptations\the\realpageno\endcsname\relax
\fi}
\def\page_adepts_push_indeed
@@ -1262,7 +1305,7 @@
\def\outercombitotal {\dimexpr\outermargintotal+\outeredgetotal\relax}
\def\innersidetotal {\dimexpr\innermarginwidth+\inneredgetotal\relax}
\def\outersidetotal {\dimexpr\outermarginwidth+\outeredgetotal\relax}
-
+
%D \macros
%D {startlocallayout}
%D
diff --git a/Master/texmf-dist/tex/context/base/page-lin.lua b/Master/texmf-dist/tex/context/base/mkiv/page-lin.lua
index 5a447c45840..5b18d982373 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-lin.lua
@@ -40,17 +40,20 @@ local v_next = variables.next
local v_page = variables.page
local v_no = variables.no
+local properties = nodes.properties
+
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
local whatcodes = nodes.whatcodes
+local listcodes = nodes.listcodes
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local whatsit_code = nodecodes.whatsit
local glue_code = nodecodes.glue
local glyph_code = nodecodes.glyph
+local line_code = listcodes.line
local leftskip_code = skipcodes.leftskip
-local textdir_code = whatcodes.dir
local a_displaymath = attributes.private('displaymath')
local a_linenumber = attributes.private('linenumber')
@@ -67,27 +70,39 @@ local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getnext = nuts.getnext
local getattr = nuts.getattr
+local setattr = nuts.setattr
local getlist = nuts.getlist
local getbox = nuts.getbox
local getfield = nuts.getfield
+local setprop = nuts.setprop
+local getprop = nuts.getprop
+
local setfield = nuts.setfield
local traverse_id = nuts.traverse_id
local traverse = nuts.traverse
local copy_node = nuts.copy
-local hpack_node = nuts.hpack
+local hpack_nodes = nuts.hpack
+local linked_nodes = nuts.linked
local insert_node_after = nuts.insert_after
local insert_node_before = nuts.insert_before
local is_display_math = nuts.is_display_math
local leftmarginwidth = nuts.leftmarginwidth
-local negated_glue = nuts.pool.negatedglue
-local new_hlist = nuts.pool.hlist
+local nodepool = nuts.pool
+local negated_glue = nodepool.negatedglue
+local new_hlist = nodepool.hlist
+local new_kern = nodepool.kern
local ctx_convertnumber = context.convertnumber
local ctx_makelinenumber = context.makelinenumber
+local paragraphs = typesetters.paragraphs
+local addtoline = paragraphs.addtoline
+local checkline = paragraphs.checkline
+local moveinline = paragraphs.moveinline
+
-- cross referencing
function lines.number(n)
@@ -233,164 +248,231 @@ local function check_number(n,a,skip,sameline)
report_lines("skipping line number %s for setup %a: %s (%s)",#current_list,a,s,d.continue or v_no)
end
end
- ctx_makelinenumber(tag,skipflag,s,getfield(n,"shift"),getfield(n,"width"),leftmarginwidth(getlist(n)),getfield(n,"dir"))
+ local p = checkline(n)
+ if p then
+ ctx_makelinenumber(tag,skipflag,s,p.hsize,p.reverse and "TRT" or "TLT")
+ else
+ report_lines("needs checking")
+ end
end
end
--- xlist
--- xlist
--- hlist
+-- print(nodes.idstostring(list))
-local function identify(list)
- if list then
- for n in traverse_id(hlist_code,list) do
+-- hlists of type line will only have an attribute when the line number attribute
+-- still set at par building time which is not always the case unless we explicitly
+-- do a par before we end the line
+
+-- todo: check for a: when <= 0 then false
+
+local function lineisnumbered(n)
+ local n = getlist(n)
+ while n do
+ local id = getid(n)
+ if id == hlist_code or id == vlist_code then
+ -- this can hit fast as we inherit anchor attributes from parent
local a = getattr(n,a_linenumber)
- if a then
- return list, a
+ if a and a > 0 then
+ return a
+ end
+ elseif id == glyph_code then
+ local a = getattr(n,a_linenumber)
+ if a and a > 0 then
+ return a
+ else
+ return false
end
end
- local n = list
- while n do
- local id = getid(n)
- if id == hlist_code or id == vlist_code then
- local ok, a = identify(getlist(n))
- if ok then
- return ok, a
+ n = getnext(n)
+ end
+end
+
+local function listisnumbered(list)
+ if list then
+ for n in traverse_id(hlist_code,list) do
+ if getsubtype(n) == line_code then
+ local a = getattr(n,a_linenumber)
+ if a then
+ -- a quick test for lines (only valid when \par before \stoplinenumbering)
+ return a > 0 and list or false
+ else
+ -- a bit slower one, assuming that we have normalized and anchored
+ if lineisnumbered(n) then
+ return list
+ end
end
end
- n = getnext(n)
end
end
end
-function boxed.stage_zero(n)
- return identify(getlist(getbox(n)))
+local function findnumberedlist(list)
+ -- we assume wrapped boxes, only one with numbers
+ local n = list
+ while n do
+ local id = getid(n)
+ if id == hlist_code then
+ if getsubtype(n) == line_code then
+ local a = getattr(n,a_linenumber)
+ if a then
+ return a > 0 and list
+ end
+ return
+ else
+ local list = getlist(n)
+ if lineisnumbered(list) then
+ return n
+ end
+ local okay = findnumberedlist(list)
+ if okay then
+ return okay
+ end
+ end
+ elseif id == vlist_code then
+ local list = getlist(n)
+ if listisnumbered(list) then
+ return list
+ end
+ local okay = findnumberedlist(list)
+ if okay then
+ return okay
+ end
+ elseif id == glyph_code then
+ return
+ end
+ n = getnext(n)
+ end
end
-- reset ranges per page
-- store first and last per page
-- maybe just set marks directly
+local function findcolumngap(list)
+ -- we assume wrapped boxes, only one with numbers
+ local n = list
+ while n do
+ local id = getid(n)
+ if id == hlist_code or id == vlist_code then
+ local p = properties[n]
+ if p and p.columngap then
+ if trace_numbers then
+ report_lines("first column gap %a",p.columngap)
+ end
+ return n
+ else
+ local list = getlist(n)
+ if list then
+ local okay = findcolumngap(list)
+ if okay then
+ return okay
+ end
+ end
+ end
+ end
+ n = getnext(n)
+ end
+end
+
function boxed.stage_one(n,nested)
current_list = { }
local box = getbox(n)
- if box then
- local found = nil
- local list = getlist(box)
- if list and nested then
- list, found = identify(list)
- end
- if list then
- local last_a, last_v, skip = nil, -1, false
- for n in traverse_id(hlist_code,list) do -- attr test here and quit as soon as zero found
- if getfield(n,"height") == 0 and getfield(n,"depth") == 0 then
- -- skip funny hlists -- todo: check line subtype
- else
- local list = getlist(n)
- local a = getattr(list,a_linenumber)
- if not a or a == 0 then
- local n = getnext(list)
- while n do
- local id = getid(n)
- if id == whatsit_code and getsubtype(n) == textdir_code then
- n = getnext(n)
- elseif id == glue_code and getsubtype(n) == leftskip_code then
- n = getnext(n)
- else
-if id == glyph_code then
- break
-else
- -- can be hlist or skip (e.g. footnote line)
- n = getnext(n)
-end
- end
+ if not box then
+ return
+ end
+ local list = getlist(box)
+ if not list then
+ return
+ end
+ local last_a = nil
+ local last_v = -1
+ local skip = false
+
+ local function check()
+ for n in traverse_id(hlist_code,list) do -- attr test here and quit as soon as zero found
+ local subtype = getsubtype(n)
+ if subtype ~= line_code then
+ -- go on
+ elseif getfield(n,"height") == 0 and getfield(n,"depth") == 0 then
+ -- skip funny hlists -- todo: check line subtype
+ else
+ local a = lineisnumbered(n)
+ if a then
+ if last_a ~= a then
+ local da = data[a]
+ local ma = da.method
+ if ma == v_next then
+ skip = true
+ elseif ma == v_page then
+ da.start = 1 -- eventually we will have a normal counter
+ end
+ last_a = a
+ if trace_numbers then
+ report_lines("starting line number range %s: start %s, continue %s",a,da.start,da.continue or v_no)
end
- a = n and getattr(n,a_linenumber)
end
- if a and a > 0 then
- if last_a ~= a then
- local da = data[a]
- local ma = da.method
- if ma == v_next then
- skip = true
- elseif ma == v_page then
- da.start = 1 -- eventually we will have a normal counter
- end
- last_a = a
- if trace_numbers then
- report_lines("starting line number range %s: start %s, continue %s",a,da.start,da.continue or v_no)
- end
+ if getattr(n,a_displaymath) then
+ if is_display_math(n) then
+ check_number(n,a,skip)
end
- if getattr(n,a_displaymath) then
- if is_display_math(n) then
- check_number(n,a,skip)
- end
+ else
+ local v = getattr(list,a_verbatimline)
+ if not v or v ~= last_v then
+ last_v = v
+ check_number(n,a,skip)
else
- local v = getattr(list,a_verbatimline)
- if not v or v ~= last_v then
- last_v = v
- check_number(n,a,skip)
- else
- check_number(n,a,skip,true)
- end
+ check_number(n,a,skip,true)
end
- skip = false
end
+ skip = false
end
end
end
end
-end
--- [dir][leftskip][content]
-
-function boxed.stage_two(n,m)
- if #current_list > 0 then
- m = m or lines.scratchbox
- local t, tn = { }, 0
- for l in traverse_id(hlist_code,getlist(getbox(m))) do
- tn = tn + 1
- t[tn] = copy_node(l) -- use take_box instead
+ if nested == 0 then
+ if list then
+ check()
end
- for i=1,#current_list do
- local li = current_list[i]
- local n, m, ti = li[1], li[2], t[i]
- if ti then
- local l = getlist(n)
- -- we want to keep leftskip at the start
--- local id = getid(l)
--- if id == whatsit_code and getsubtype(l) == textdir_code then
--- l = getnext(l)
--- id = getid(l)
--- end
--- if getid(l) == glue_code and getsubtype(l) == leftskip_code then
--- -- [leftskip] [number] [rest]
--- local forward = copy_node(l)
--- local backward = negated_glue(l)
--- local next = getnext(l)
--- setfield(l,"next",backward)
--- setfield(backward,"prev",l)
--- setfield(backward,"next",ti)
--- setfield(ti,"prev",backward)
--- setfield(ti,"next",forward)
--- setfield(forward,"prev",ti)
--- setfield(forward,"next",next)
--- setfield(next,"prev",forward)
--- else
- -- [number] [rest]
- setfield(ti,"next",l)
- setfield(l,"prev",ti)
- setfield(n,"list",ti)
--- end
- resolve(n,m)
+ elseif nested == 1 then
+ local id = getid(box)
+ if id == vlist_code then
+ if listisnumbered(list) then
+ -- ok
else
- report_lines("error in linenumbering (1)")
- return
+ list = findnumberedlist(list)
end
- end
+ else -- hlist
+ list = findnumberedlist(list)
+ end
+ if list then
+ check()
+ end
+ elseif nested == 2 then
+ list = findcolumngap(list)
+ -- we assume we have a vlist
+ if not list then
+ return
+ end
+ for n in traverse_id(vlist_code,list) do
+ local p = properties[n]
+ if p and p.columngap then
+ if trace_numbers then
+ report_lines("found column gap %a",p.columngap)
+ end
+ list = getlist(n)
+ if list then
+ check()
+ end
+ end
+ end
+ else
+ -- bad call
end
end
+-- column attribute
+
function boxed.stage_two(n,m)
if #current_list > 0 then
m = m or lines.scratchbox
@@ -403,13 +485,16 @@ function boxed.stage_two(n,m)
local li = current_list[i]
local n, m, ti = li[1], li[2], t[i]
if ti then
- local l = getlist(n)
- setfield(ti,"next",l)
- setfield(l,"prev",ti)
- local h = copy_node(n)
- setfield(h,"dir","TLT")
- setfield(h,"list",ti)
- setfield(n,"list",h)
+ -- local d = getfield(n,"dir")
+ -- local l = getlist(n)
+ -- if d == "TRT" then
+ -- local w = getfield(n,"width")
+ -- ti = hpack_nodes(linked_nodes(new_kern(-w),ti,new_kern(w)))
+ -- end
+ -- setnext(ti,l)
+ -- setprev(l,ti)
+ -- setlist(n,ti)
+ addtoline(n,ti)
resolve(n,m)
else
report_lines("error in linenumbering (1)")
@@ -419,10 +504,14 @@ function boxed.stage_two(n,m)
end
end
+-- function boxed.stage_zero(n) -- not used
+-- return identify(getlist(getbox(n)))
+-- end
+
implement {
name = "linenumbersstageone",
actions = boxed.stage_one,
- arguments = { "integer", "boolean" }
+ arguments = { "integer", "integer" }
}
implement {
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-lin.mkvi
index dd13a98c38e..5756d870b66 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-lin.mkvi
@@ -64,7 +64,7 @@
% tag skipflag s getfield(n,"shift") getfield(n,"width") leftmarginwidth(getlist(n)) getfield(n,"dir"))
-\let\makelinenumber\gobblesevenarguments % used at lua end
+\let\makelinenumber\gobblefivearguments % used at lua end
\newconditional\page_postprocessors_needed_box
@@ -94,7 +94,7 @@
\def\page_lines_setup
{\ifcsname \??linenumberinginstance\currentlinenumbering\endcsname
\clf_setuplinenumbering
- \csname\??linenumberinginstance\currentlinenumbering\endcsname
+ \lastnamedcs
{%
continue {\ifnum\c_page_lines_mode=\zerocount\v!yes\else\v!no\fi}%
start \linenumberingparameter\c!start
@@ -188,7 +188,7 @@
\def\page_lines_start_zero[#1][#2]%
{\edef\m_argument{\linenumberingparameter\c!continue}%
- \ifx\m_argument\v!continue
+ \ifx\m_argument\v!yes
\c_page_lines_mode\zerocount
\else
\c_page_lines_mode\plusone
@@ -300,27 +300,6 @@
\ifx\p_align\v!left \let\p_align\v!right \else
\ifx\p_align\v!right \let\p_align\v!left \fi\fi\fi\fi\fi\fi}
-\def\page_lines_add_numbers_to_box#box#column#max#nesting%
- {\bgroup
- \b_page_lines_number #box\relax
- \c_page_lines_column #column\relax
- \c_page_lines_last_column#max\relax
- \c_page_lines_nesting #nesting\relax
- \fullrestoreglobalbodyfont
- \let\makelinenumber\page_lines_make_number % used at lua end
- \setbox\b_page_lines_scratch\vbox
- {\forgetall
- \offinterlineskip
- \clf_linenumbersstageone
- \b_page_lines_number
- \ifcase\c_page_lines_nesting false\else true\fi
- \relax}%
- \clf_linenumbersstagetwo
- \b_page_lines_number
- \b_page_lines_scratch
- \fi
- \egroup}
-
\let\page_lines_make_number_indeed\relax
% \def\page_lines_rlap{\ifconditional\c_page_lines_dir_left_to_right\expandafter\rlap\else\expandafter\llap\fi}
@@ -331,7 +310,6 @@
\b_page_lines_number #box\relax
\c_page_lines_column #column\relax
\c_page_lines_last_column#max\relax
- \c_page_lines_nesting #nesting\relax
\fullrestoreglobalbodyfont
\let\makelinenumber\page_lines_make_number % used at lua end
\setbox\b_page_lines_scratch\vbox
@@ -339,7 +317,7 @@
\offinterlineskip
\clf_linenumbersstageone
\b_page_lines_number
- \ifcase\c_page_lines_nesting false\else true\fi
+ #nesting%
\relax}%
\clf_linenumbersstagetwo
\b_page_lines_number
@@ -347,7 +325,7 @@
\relax
\egroup}
-\def\page_lines_make_number#tag#mode#linenumber#shift#width#leftskip#dir% beware, one needs so compensate for this in the \hsize
+\def\page_lines_make_number#tag#mode#linenumber#width#dir% with hang and parindent and skips we have to compensate for \hsize
{\naturalhbox to \zeropoint \bgroup
\ifcase#mode\relax
% \settrue \c_page_lines_fake_number
@@ -399,7 +377,7 @@
\fi
\fi
%
- \executeifdefined{\??linenumberinghandler\p_location}\relax
+ \begincsname\??linenumberinghandler\p_location\endcsname
\fi
\egroup}
@@ -442,15 +420,22 @@
\def\page_line_handle_left#align#width#distance%
{\llap
{\page_lines_number_inject#align#width%
- \kern\dimexpr#distance+\d_page_lines_distance\relax
+ \kern\dimexpr
+ #distance+\d_page_lines_distance
+ \ifconditional\c_page_lines_dir_left_to_right\else+\d_page_lines_line_width\fi
+ \relax
\the\everylinenumber
\hss}}
\def\page_line_handle_right#align#width#distance%
{\rlap
- {\kern\dimexpr#distance+\d_page_lines_distance+\d_page_lines_line_width\relax
+ {\kern\dimexpr
+ #distance+\d_page_lines_distance
+ \ifconditional\c_page_lines_dir_left_to_right+\d_page_lines_line_width\fi
+ \relax
\page_lines_number_inject#align#width%
- \the\everylinenumber}}
+ \the\everylinenumber
+ \hss}}
\setuvalue{\??linenumberinghandler\v!left}%
{\page_line_handle_left\p_align\leftmarginwidth\leftmargindistance}
@@ -514,15 +499,16 @@
\setuvalue{\??linenumberinghandler\v!end }{\page_line_handle_end \p_align}
\setuvalue{\??linenumberinghandler\v!text }{\page_line_handle_begin\p_align}
-\setuevalue{\??linenumberinghandler\v!inleft }{\getvalue{\??linenumberinghandler\v!left }}
-\setuevalue{\??linenumberinghandler\v!inmargin}{\getvalue{\??linenumberinghandler\v!left }}
-\setuevalue{\??linenumberinghandler\v!margin }{\getvalue{\??linenumberinghandler\v!left }}
-\setuevalue{\??linenumberinghandler\v!inright }{\getvalue{\??linenumberinghandler\v!right}}
+\expandafter\let\csname\??linenumberinghandler\v!inleft \expandafter\endcsname\csname\??linenumberinghandler\v!left \endcsname
+\expandafter\let\csname\??linenumberinghandler\v!inmargin\expandafter\endcsname\csname\??linenumberinghandler\v!left \endcsname
+\expandafter\let\csname\??linenumberinghandler\v!margin \expandafter\endcsname\csname\??linenumberinghandler\v!left \endcsname
+\expandafter\let\csname\??linenumberinghandler\v!inright \expandafter\endcsname\csname\??linenumberinghandler\v!right\endcsname
% referencing: \permithyphenation, also removes leading spaces (new per 29-11-2013)
\unexpanded\def\someline [#1]{\page_lines_reference_start{#1}\page_lines_reference_stop{#1}} % was just a def
-\unexpanded\def\startline[#1]{\page_lines_reference_start{#1}\ignorespaces}
+%unexpanded\def\startline[#1]{\page_lines_reference_start{#1}\ignorespaces}
+\unexpanded\def\startline[#1]{\page_lines_reference_start{#1}\permithyphenation\ignorespaces} %okay?
\unexpanded\def\stopline [#1]{\removeunwantedspaces\permithyphenation\page_lines_reference_stop{#1}}
\def\page_lines_reference_show_start
@@ -540,14 +526,14 @@
\fi}
\def\page_lines_reference_show_start_indeed#1%
- {\setbox\scratchbox\hbox{\llap
- {\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}%
+ {\setbox\scratchbox\hpack{\llap
+ {\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht\raise.85\strutht\hpack{\llap{\tt\txx#1}}}}%
\smashbox\scratchbox
\box\scratchbox}
\def\page_lines_reference_show_stop_indeed#1%
- {\setbox\scratchbox\hbox{\rlap
- {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht}}%
+ {\setbox\scratchbox\hpack{\rlap
+ {\raise.85\strutht\hpack{\rlap{\tt\txx#1}}\vrule\s!width\onepoint\s!depth\strutdp\s!height.8\strutht}}%
\smashbox\scratchbox
\box\scratchbox}
diff --git a/Master/texmf-dist/tex/context/base/page-mak.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-mak.mkvi
index ee144f20a34..bbb7cc1488a 100644
--- a/Master/texmf-dist/tex/context/base/page-mak.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mak.mkvi
@@ -35,7 +35,7 @@
%D \showsetup{startmakeup}
%D New is that we have a layout with the same name so one can set
-%D up a special layout tthat then gets used.
+%D up a special layout that then gets used.
\installcorenamespace{makeup}
\installcorenamespace{makeupdoublesided}
@@ -179,7 +179,7 @@
\endgroup
\makeupparameter\c!after\relax
\ifdoublesided \ifodd\realpageno \else
- \getvalue{\??makeupdoublesided\makeupparameter\c!doublesided}%
+ \csname\??makeupdoublesided\makeupparameter\c!doublesided\endcsname
\fi \fi
\strc_pagenumbers_page_state_pop % new
\egroup
@@ -258,7 +258,6 @@
\definemakeup
[\v!page]
- []
\definemakeup
[\v!middle]
diff --git a/Master/texmf-dist/tex/context/base/page-mbk.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-mbk.mkvi
index 8038771d9c7..8038771d9c7 100644
--- a/Master/texmf-dist/tex/context/base/page-mbk.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mbk.mkvi
diff --git a/Master/texmf-dist/tex/context/base/page-mix.lua b/Master/texmf-dist/tex/context/base/mkiv/page-mix.lua
index 61a4f944d9e..c844bd32d00 100644
--- a/Master/texmf-dist/tex/context/base/page-mix.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mix.lua
@@ -49,20 +49,26 @@ local vpack = nuts.vpack
local freenode = nuts.free
local concatnodes = nuts.concat
local slidenodes = nuts.slide -- ok here as we mess with prev links intermediately
-local traversenodes = nuts.traverse
local getfield = nuts.getfield
local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setbox = nuts.setbox
+
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getlist = nuts.getlist
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
-local setbox = nuts.setbox
local getskip = nuts.getskip
local getattribute = nuts.getattribute
+local theprop = nuts.theprop
+
local nodepool = nuts.pool
local new_hlist = nodepool.hlist
@@ -163,7 +169,7 @@ local function discardtopglue(current,discarded)
while current do
local id = getid(current)
if id == glue_code then
- size = size + getfield(getfield(current,"spec"),"width")
+ size = size + getfield(current,"width")
discarded[#discarded+1] = current
current = getnext(current)
elseif id == penalty_code then
@@ -171,7 +177,7 @@ local function discardtopglue(current,discarded)
discarded[#discarded+1] = current
current = getnext(current)
while current and getid(current) == glue_code do
- size = size + getfield(getfield(current,"spec"),"width")
+ size = size + getfield(current,"width")
discarded[#discarded+1] = current
current = getnext(current)
end
@@ -184,7 +190,7 @@ local function discardtopglue(current,discarded)
end
end
if current then
- setfield(current,"prev",nil) -- prevent look back
+ setprev(current) -- prevent look back
end
return current, size
end
@@ -210,7 +216,7 @@ local function stripbottomglue(results,discarded)
end
elseif id == glue_code then
discarded[#discarded+1] = t
- local width = getfield(getfield(t,"spec"),"width")
+ local width = getfield(t,"width")
if trace_state then
report_state("columns %s, discarded bottom glue %p",i,width)
end
@@ -272,6 +278,7 @@ local function preparesplit(specification) -- a rather large function
if specification.balance ~= v_yes then
optimal = maxheight
end
+ local topback = 0
local target = optimal + extra
local overflow = target > maxheight - preheight
local threshold = specification.threshold or 0
@@ -291,6 +298,7 @@ local function preparesplit(specification) -- a rather large function
depth = 0,
inserts = { },
delta = 0,
+ back = 0,
}
end
@@ -470,7 +478,7 @@ local function preparesplit(specification) -- a rather large function
head = current
local function process_skip(current,nxt)
- local advance = getfield(getfield(current,"spec"),"width")
+ local advance = getfield(current,"width")
if advance ~= 0 then
local state, skipped = checked(advance,"glue")
if trace_state then
@@ -611,7 +619,6 @@ end
line = line + 1
local inserts, currentskips, nextskips, inserttotal = nil, 0, 0, 0
local advance = getfield(current,"height")
--- + getfield(current,"depth") -- when > strutdp
if trace_state then
report_state("%-7s > column %s, content: %s","line",column,listtoutf(getlist(current),true,true))
end
@@ -628,6 +635,23 @@ end
if state == "quit" then
return true
end
+-- if state == "next" then -- only when profile
+-- local unprofiled = theprop(current).unprofiled
+-- if unprofiled then
+-- local h = unprofiled.height
+-- local s = unprofiled.strutht
+-- local t = s/2
+-- print("profiled",h,s)
+-- local snapped = theprop(current).snapped
+-- if snapped then
+-- inspect(snapped)
+-- end
+-- if h < s + t then
+-- result.back = - (h - s)
+-- advance = s
+-- end
+-- end
+-- end
height = height + depth + skip + advance + inserttotal
if state == "next" then
height = height + nextskips
@@ -727,7 +751,7 @@ local kept = head
specification.overflow = overflow
specification.discarded = discarded
- setfield(getbox(specification.box),"list",nil)
+ setlist(getbox(specification.box),nil)
return specification
end
@@ -741,12 +765,18 @@ local function finalize(result)
local r = results[i]
local h = r.head
if h then
- setfield(h,"prev",nil)
+ setprev(h)
+if r.back then
+ local k = new_glue(r.back)
+ setlink(k,h)
+ h = k
+ r.head = h
+end
local t = r.tail
if t then
- setfield(t,"next",nil)
+ setnext(t,nil)
else
- setfield(h,"next",nil)
+ setnext(h,nil)
r.tail = h
end
for c, list in next, r.inserts do
@@ -755,13 +785,13 @@ local function finalize(result)
local l = list[i]
local h = new_hlist()
t[i] = h
- setfield(h,"list",getfield(l,"head"))
+ setlist(h,getfield(l,"head"))
setfield(h,"height",getfield(l,"height"))
setfield(h,"depth",getfield(l,"depth"))
setfield(l,"head",nil)
end
- setfield(t[1],"prev",nil) -- needs checking
- setfield(t[#t],"next",nil) -- needs checking
+ setprev(t[1]) -- needs checking
+ setnext(t[#t]) -- needs checking
r.inserts[c] = t
end
end
@@ -843,14 +873,14 @@ local function getsplit(result,n)
return new_glue(result.originalwidth)
end
- setfield(h,"prev",nil) -- move up
+ setprev(h) -- move up
local strutht = result.strutht
local strutdp = result.strutdp
local lineheight = strutht + strutdp
local isglobal = result.alternative == v_global
local v = new_vlist()
- setfield(v,"list",h)
+ setlist(v,h)
-- local v = vpack(h,"exactly",height)
diff --git a/Master/texmf-dist/tex/context/base/page-mix.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-mix.mkiv
index 6d7f144a662..0e329ce098b 100644
--- a/Master/texmf-dist/tex/context/base/page-mix.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mix.mkiv
@@ -72,6 +72,7 @@
\c!internalgrid=\v!line,
\c!step=.25\lineheight, % needs some experimenting
%\c!splitmethod=\v!fixed, % will be default
+ \c!direction=\v!normal, % new (also todo in the new columnsets)
\c!method=\ifinner\s!box\else\s!otr\fi] % automatic as suggested by WS
\let\startmixedcolumns\relax % defined later
@@ -166,6 +167,7 @@
\definemixedcolumns
[\s!itemgroupcolumns]
[\c!n=\itemgroupparameter\c!n,
+ \c!direction=\itemgroupparameter\c!direction,
\c!separator=\v!none,
\c!splitmethod=\v!none,
\c!grid=\v!tolerant,
@@ -213,7 +215,7 @@
% preceding is overwritten ... needs to be figured out some day
\page_one_command_routine
\fi
- \global\setbox\b_page_mix_preceding\vbox
+ \global\setbox\b_page_mix_preceding\vbox % pack ?
{\page_otr_command_flush_top_insertions
\ifdim\htdp\b_page_mix_preceding=\zeropoint \else
\writestatus\m!columns{preceding error}%
@@ -311,7 +313,7 @@
\hss
\starttextproperties
\usemixedcolumnscolorparameter\c!rulecolor
- \csname\??mixedcolumnsseparator\p_separator\endcsname % was \c!rule
+ \begincsname\??mixedcolumnsseparator\p_separator\endcsname % was \c!rule
\stoptextproperties
\hss
\egroup
@@ -361,11 +363,11 @@
{\edef\currentmixedcolumns{#1}%
\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
\mixedcolumnsparameter\c!before\relax
- \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
+ \begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\setupcurrentmixedcolumns[#2]%
\page_mix_initialize_columns
- \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
\def\page_mix_start_columns_b[#1][#2]%
{\doifelseassignment{#1}%
@@ -375,13 +377,13 @@
\firstargumentfalse}%
\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
\mixedcolumnsparameter\c!before\relax % so, it doesn't listen to local settings !
- \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
+ \begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\iffirstargument
\setupcurrentmixedcolumns[#1]%
\fi
\page_mix_initialize_columns
- \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
\def\page_mix_error_b
{\writestatus\m!columns{best use an instance of mixed columns}}
@@ -390,10 +392,10 @@
{\let\currentmixedcolumns\empty
\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
\mixedcolumnsparameter\c!before\relax
- \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
+ \begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\page_mix_initialize_columns
- \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname}
\unexpanded\def\page_mix_fast_columns_start#1%
{\pushmacro\currentmixedcolumns
@@ -401,27 +403,27 @@
\edef\currentmixedcolumns{#1}%
\edef\currentmixedcolumnsmethod{\mixedcolumnsparameter\c!method}%
\mixedcolumnsparameter\c!before\relax % so, it doesn't list to local settings !
- \csname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
+ \begincsname\??mixedcolumnsbefore\currentmixedcolumnsmethod\endcsname\relax
\begingroup
\page_mix_initialize_columns
- \csname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
+ \begincsname\??mixedcolumnsstart\currentmixedcolumnsmethod\endcsname} % no \relax
%D When we stop, we switch over to the balancing routine. After we're done we
%D make sure to set the sizes are set, a somewhat redundant action when we
%D already have flushed but better be safe.
\unexpanded\def\stopmixedcolumns
- {\csname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
+ {\begincsname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
\endgroup
- \csname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
+ \begincsname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
\mixedcolumnsparameter\c!after\relax
\popmacro\currentmixedcolumnsmethod
\popmacro\currentmixedcolumns}
% \unexpanded\def\stopmixedcolumns
-% {\csname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
+% {\begincsname\??mixedcolumnsstop \currentmixedcolumnsmethod\endcsname % no \relax
% \endgroup
-% \csname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
+% \begincsname\??mixedcolumnsafter\currentmixedcolumnsmethod\endcsname\relax
% \mixedcolumnsparameter\c!after\relax
% \ifx\currentmixedcolumnsmethod\s!otr
% \popmacro\currentmixedcolumnsmethod
@@ -522,7 +524,7 @@
% moved here, before the packaging
\page_postprocessors_linenumbers_deepbox\b_page_mix_preceding
% we need to avoid unvboxing with successive balanced on one page
- \global\setbox\b_page_mix_preceding\vbox{\box\b_page_mix_preceding}%
+ \global\setbox\b_page_mix_preceding\vpack{\box\b_page_mix_preceding}%
\wd\b_page_mix_preceding\scratchwidth % \makeupwidth
\page_grids_add_to_one\b_page_mix_preceding
\fi
@@ -595,6 +597,7 @@
\def\page_mix_routine_package_step
{% needs packaging anyway
\setbox\scratchbox\page_mix_command_package_column
+ \page_lines_add_numbers_to_box\scratchbox\recurselevel\c_page_mix_n_of_columns\plusone % new
\page_marks_synchronize_column\plusone\c_page_mix_n_of_columns\recurselevel\scratchbox
% backgrounds
\anch_mark_column_box\scratchbox
@@ -603,22 +606,21 @@
% the framed needs a reset of strut, align, setups etc
\mixedcolumnseparatorheight\ht\scratchbox
\mixedcolumnseparatordepth \dp\scratchbox
- \inheritedmixedcolumnsframedbox\currentmixedcolumns\scratchbox
- % optional
- \ifnum\recurselevel<\c_page_mix_n_of_columns
- \ifcsname\??mixedcolumnsseparator\p_separator\endcsname
- \page_mix_command_inject_separator
- \else
- \hss
- \fi
+ \inheritedmixedcolumnsframedbox\currentmixedcolumns\scratchbox}
+
+\def\page_mix_routine_package_separate
+ {\ifcsname\??mixedcolumnsseparator\p_separator\endcsname
+ \page_mix_command_inject_separator
+ \else
+ \hss
\fi}
\unexpanded\def\page_mix_routine_package
{\clf_mixfinalize
\setbox\b_page_mix_collected\vbox \bgroup
\ifvoid\b_page_mix_preceding \else
- \page_postprocessors_linenumbers_deepbox\b_page_mix_preceding
- \vbox\bgroup
+ % \page_postprocessors_linenumbers_deepbox\b_page_mix_preceding % already done
+ \vpack\bgroup
\box\b_page_mix_preceding
\egroup
\global\d_page_mix_preceding_height\zeropoint
@@ -630,7 +632,20 @@
\page_mix_hbox to \d_page_mix_max_width \bgroup
\edef\p_separator{\mixedcolumnsparameter\c!separator}%
\mixedcolumnseparatorwidth\d_page_mix_distance % \mixedcolumnsparameter\c!rulethickness\relax
- \dorecurse\c_page_mix_n_of_columns\page_mix_routine_package_step
+ \edef\p_direction{\mixedcolumnsparameter\c!direction}%
+ \ifx\p_direction\v!reverse
+ \dostepwiserecurse\c_page_mix_n_of_columns\plusone\minusone
+ {\page_mix_routine_package_step
+ \ifnum\recurselevel>\plusone
+ \page_mix_routine_package_separate
+ \fi}%
+ \else
+ \dorecurse\c_page_mix_n_of_columns
+ {\page_mix_routine_package_step
+ \ifnum\recurselevel<\c_page_mix_n_of_columns
+ \page_mix_routine_package_separate
+ \fi}%
+ \fi
\egroup
\egroup}
@@ -649,7 +664,7 @@
{\bgroup
\forgetall
\dontcomplain
- \setbox\b_page_mix_collected\vbox{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua)
+ \setbox\b_page_mix_collected\vpack{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua)
\page_mix_routine_construct\v!no
\page_mix_routine_package
\page_otr_construct_and_shipout\box\b_page_mix_collected
@@ -661,13 +676,13 @@
{\bgroup
\forgetall
\dontcomplain
- \setbox\b_page_mix_collected\vbox{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua)
+ \setbox\b_page_mix_collected\vpack{\unvbox\normalpagebox}% brrr we need to make a tight box (combine this in lua)
\doloop
{%writestatus\m!columns{construct continue (\the\htdp\b_page_mix_collected)}%
\page_mix_routine_construct\v!no
\ifcase\clf_mixstate\relax
% 0 = okay, we can balance
- \setbox\b_page_mix_collected\vbox{\clf_mixflushlist}% we could avoid this
+ \setbox\b_page_mix_collected\vpack{\clf_mixflushlist}% we could avoid this
%writestatus\m!columns{construct balance}%
\page_mix_routine_construct\v!yes
\page_mix_routine_package
@@ -691,7 +706,7 @@
%writestatus\m!columns{flush continue}%
\page_mix_routine_package
\page_otr_construct_and_shipout\box\b_page_mix_collected
- \setbox\b_page_mix_collected\vbox{\clf_mixflushrest}% we could avoid this
+ \setbox\b_page_mix_collected\vpack{\clf_mixflushrest}% we could avoid this
\clf_mixcleanup
\ifdim\ht\b_page_mix_collected=\zeropoint
\exitloop
@@ -804,7 +819,7 @@
% and glue in between and when we're too large we run into issues
% so mayb best limit correction to one line
\profilegivenbox\p_profile\b_page_mix_collected
- \setbox\b_page_mix_collected\vbox{\unvbox\b_page_mix_collected}%
+ \setbox\b_page_mix_collected\vpack{\unvbox\b_page_mix_collected}%
% tracing
% \addprofiletobox\b_page_mix_collected
\fi
diff --git a/Master/texmf-dist/tex/context/base/page-mrk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-mrk.mkiv
index 0823464fe36..0cd615f8acc 100644
--- a/Master/texmf-dist/tex/context/base/page-mrk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mrk.mkiv
@@ -56,7 +56,7 @@
\def\page_marks_add_color
{\setlayoutcomponentattribute{\v!print:\v!color}%
- \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup
+ \setbox\scratchbox\hpack \layoutcomponentboxattribute\bgroup
\uniqueMPgraphic
{print:color}%
{w=\the\scratchwidth,h=\the\scratchheight,%
@@ -67,7 +67,7 @@
\def\page_marks_add_marking
{\setlayoutcomponentattribute{\v!print:\v!marking}%
- \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup
+ \setbox\scratchbox\hpack \layoutcomponentboxattribute\bgroup
\uniqueMPgraphic
{print:marking}%
{w=\the\scratchwidth,h=\the\scratchheight,%
@@ -78,7 +78,7 @@
\def\page_marks_add_lines
{\setlayoutcomponentattribute{\v!print:\v!lines}%
- \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup
+ \setbox\scratchbox\hpack \layoutcomponentboxattribute\bgroup
\uniqueMPgraphic
{print:lines}%
{w=\the\scratchwidth,h=\the\scratchheight,%
@@ -90,7 +90,7 @@
\def\page_marks_add_number
{\setlayoutcomponentattribute{\v!print:\v!number}%
- \setbox\scratchbox\hbox \layoutcomponentboxattribute\bgroup
+ \setbox\scratchbox\hpack \layoutcomponentboxattribute\bgroup
\useMPgraphic
{print:number}%
{w=\the\scratchwidth ,h=\the\scratchheight,%
@@ -101,7 +101,7 @@
\hskip-\scratchwidth\box\scratchbox}
\def\page_marks_add_page_indeed#1%
- {\setbox#1\hbox\bgroup
+ {\setbox#1\hpack\bgroup
\resetvisualizers
\let\objectoffset\pagecutmarkmargin
%\infofont
@@ -142,7 +142,7 @@
\installcorenamespace{layoutmarking}
-\def\installpagecutmark#1#2%
+\unexpanded\def\installpagecutmark#1#2%
{\setvalue{\??layoutmarking#1}{#2}}
% \installpagecutmark\v!off
@@ -180,12 +180,13 @@
\setfalse\c_page_marks_add_more_marking
\setfalse\c_page_marks_add_more_lines
\setfalse\c_page_marks_add_more_number
- \csname\??layoutmarking\layoutparameter\c!marking\endcsname
+ \begincsname\??layoutmarking\layoutparameter\c!marking\endcsname
\ifconditional\c_page_marks_add_page_lines
\let\page_marks_add_page\page_marks_add_page_indeed
\else
\let\page_marks_add_page\gobbleoneargument
\fi
+ % we can get a double set of (overlayed) lines .. needs to be redone (too many objects anyway)
\ifconditional\c_page_marks_add_more_lines
\let\page_marks_add_more\page_marks_add_more_indeed
\else\ifconditional\c_page_marks_add_more_color
diff --git a/Master/texmf-dist/tex/context/base/page-mul.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-mul.mkiv
index 8db5a47732b..6312323685a 100644
--- a/Master/texmf-dist/tex/context/base/page-mul.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-mul.mkiv
@@ -452,6 +452,9 @@
\box\columnpagebox
\egroup}
+\def\page_mul_synchronize_marks
+ {\dohandleallcolumns{\page_marks_synchronize_column\plusone\nofcolumns\mofcolumns\currentcolumnbox}}
+
\def\page_mul_flush_packaged_columns_indeed
{\ifvoid\b_page_mul_preceding
\setfalse\c_page_mul_preceding_present % will be set elsewhere
@@ -463,10 +466,7 @@
\page_mul_initialize_variables
\page_mul_calculate_column_result_dimensions
\page_mul_postprocess_linenumbers
- \dohandleallcolumns
- {\page_postprocessors_column\currentcolumnbox}%
- \dohandleallcolumns
- {\page_marks_synchronize_column\plusone\nofcolumns\mofcolumns\currentcolumnbox}%
+ \page_mul_synchronize_marks
\page_mul_postprocess_lines
\page_mul_postprocess_columns
\dohandleallcolumns
diff --git a/Master/texmf-dist/tex/context/base/page-not.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-not.mkiv
index d7602bd2658..d7602bd2658 100644
--- a/Master/texmf-dist/tex/context/base/page-not.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-not.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-one.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-one.mkiv
index 4cf59da2dec..a4178713394 100644
--- a/Master/texmf-dist/tex/context/base/page-one.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-one.mkiv
@@ -137,7 +137,7 @@
%
% \setbox\b_page_one_contents\vbox \ifconditional\c_notes_bottom_present to \textheight \fi
%
- \setbox\b_page_one_contents\vbox to \textheight
+ \setbox\b_page_one_contents\vbox to \textheight % probably no pack
{\page_otr_command_flush_top_insertions
% this is messy ... we will provide a more tight area (no big deal as we can
% do that at the lua end)
@@ -175,13 +175,13 @@
\else
\scratchoffset\ht\b_page_one_contents
\fi
- \setbox\b_page_one_bottom_notes\hbox
+ \setbox\b_page_one_bottom_notes\hpack
{\checksinglecolumnfootnotes % why this check? ***
- \lower\scratchoffset\vbox{\placebottomnotes\par\kern\zeropoint}}% kerns makes notes sit on bottom
+ \lower\scratchoffset\vbox{\placebottomnotes\par\kern\zeropoint}}% kerns makes notes sit on bottom % pack ?
\smashbox\b_page_one_bottom_notes
\ht\b_page_one_contents\zeropoint
\page_one_registered_text_area_b
- {\vbox to \textheight
+ {\vpack to \textheight
{\box\b_page_one_contents
\box\b_page_one_bottom_notes}}%
\else
@@ -356,9 +356,9 @@
\unexpanded\def\page_one_command_flush_float_box
{\ifconditional\c_page_floats_center_box \ifdim\wd\floatbox<\hsize
- \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
+ \global\setbox\floatbox\hpack to \hsize{\hss\box\floatbox\hss}%
\fi \fi
- \snaptogrid\hbox{\box\floatbox}} % was copy
+ \snaptogrid\hpack{\box\floatbox}} % was copy
\def\page_one_command_flush_floats_indeed % much in common with OTRSET
{\ifconditional\c_page_floats_some_waiting
@@ -417,7 +417,7 @@
\begingroup
\scratchdimen\dimexpr\pagetotal+\lineheight\relax
\ifdim\scratchdimen>\pagegoal
- \goodbreak % hack ? needed in icare-az
+ \goodbreak % hack ?
\fi
% should be an option
\endgroup
@@ -470,7 +470,7 @@
\page_one_place_float_here_indeed}
\def\page_one_place_float_side_indeed#1%
- {\setbox\floatbox\vbox{\box\floatbox}% ? can go
+ {\setbox\floatbox\vpack{\box\floatbox}% ? can go
\wd\floatbox\floatwidth
#1{\box\floatbox}%
\doifinset\v!tall\floatlocationmethod\page_sides_flush_floats_after_par}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/page-otr.lua b/Master/texmf-dist/tex/context/base/mkiv/page-otr.lua
new file mode 100644
index 00000000000..30715868426
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-otr.lua
@@ -0,0 +1,12 @@
+if not modules then modules = { } end modules ['page-otr'] = {
+ version = 1.001,
+ comment = "companion to page-otr.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+interfaces.implement {
+ name = "triggerpagebuilder",
+ actions = tex.triggerbuildpage,
+}
diff --git a/Master/texmf-dist/tex/context/base/page-otr.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-otr.mkvi
index e146d99b7ba..ec38a06c1d9 100644
--- a/Master/texmf-dist/tex/context/base/page-otr.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-otr.mkvi
@@ -19,8 +19,12 @@
% When issuing two \par\penalty-\plustenthousand's, only the first
% triggers the otr. Is this an obscure feature or an optimization?
+\registerctxluafile{page-otr}{1.001}
+
\unprotect
+\let\triggerpagebuilder\clf_triggerpagebuilder
+
\def\m!otr{otr} % todo
\installcorenamespace{outputroutine}
@@ -47,32 +51,32 @@
\let\page_otr_commands_process\gobbleoneargument
\to \everyswitchoutputroutine
-\unexpanded\def\page_otr_specifics_preset#1%
- {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands
+\unexpanded\def\page_otr_specifics_preset#name%
+ {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#name}}% no inheritance of commands
\ifx\page_otr_specifics_command\empty
- \writestatus{\currentoutputroutine}{- \expandafter\strippedcsname\csname#1\endcsname}%
- \expandafter\let\csname#1\endcsname\relax
+ \writestatus{\currentoutputroutine}{- \expandafter\strippedcsname\csname#name\endcsname}%
+ \expandafter\let\csname#name\endcsname\relax
\else
- \writestatus{\currentoutputroutine}{+ \expandafter\strippedcsname\csname#1\endcsname}%
- \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command
+ \writestatus{\currentoutputroutine}{+ \expandafter\strippedcsname\csname#name\endcsname}%
+ \expandafter\let\csname#name\expandafter\endcsname\page_otr_specifics_command
\fi}
-\unexpanded\def\page_otr_specifics_preset_normal#1%
- {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands
+\unexpanded\def\page_otr_specifics_preset_normal#name%
+ {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#name}}% no inheritance of commands
\ifx\page_otr_specifics_command\empty
- \expandafter\let\csname#1\endcsname\relax
+ \expandafter\let\csname#name\endcsname\relax
\else
- \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command
+ \expandafter\let\csname#name\expandafter\endcsname\page_otr_specifics_command
\fi}
-\unexpanded\def\page_otr_specifics_preset_traced#1%
- {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#1}}% no inheritance of commands
+\unexpanded\def\page_otr_specifics_preset_traced#name%
+ {\edef\page_otr_specifics_command{\strictoutputroutineparameter{#name}}% no inheritance of commands
\ifx\page_otr_specifics_command\empty
- \writestatus{\currentoutputroutine}{preset: - \expandafter\strippedcsname\csname#1\endcsname}%
- \expandafter\let\csname#1\endcsname\relax
+ \writestatus{\currentoutputroutine}{preset: - \expandafter\strippedcsname\csname#name\endcsname}%
+ \expandafter\let\csname#name\endcsname\relax
\else
- \writestatus{\currentoutputroutine}{preset: + \expandafter\strippedcsname\csname#1\endcsname}%
- \expandafter\let\csname#1\expandafter\endcsname\page_otr_specifics_command
+ \writestatus{\currentoutputroutine}{preset: + \expandafter\strippedcsname\csname#name\endcsname}%
+ \expandafter\let\csname#name\expandafter\endcsname\page_otr_specifics_command
\fi}
\let\page_otr_specifics_preset\page_otr_specifics_preset_normal
@@ -100,11 +104,11 @@
\unexpanded\def\page_otr_message_b{\page_otr_message_s+}
\unexpanded\def\page_otr_message_e{\page_otr_message_s-}
-\unexpanded\def\page_otr_message_s#1#2%
+\unexpanded\def\page_otr_message_s#sign#what%
{\writestatus
\currentoutputroutine
- {#1\space \space
- #2\space \space
+ {#sign\space \space
+ #what\space \space
p:\the\outputpenalty,\space
r:\the\realpageno ,\space
c:\number\mofcolumns,\space
@@ -115,21 +119,21 @@
d:\the\dimexpr\pagetotal-\pagegoal\relax
\fi}}
-\unexpanded\def\page_otr_trigger#1%
+\unexpanded\def\page_otr_trigger#penalty%
{\begingroup
\par
- \penalty#1%
+ \penalty#penalty%
\endgroup}
-\unexpanded\def\installoutputroutine#1#2% \invoke \action
+\unexpanded\def\installoutputroutine#invoke#action% \invoke \action
{\global\advance\c_page_otf_trigger_penalty\minusone
- \edef#1{\page_otr_trigger{\number\c_page_otf_trigger_penalty}}%
- \setvalue{\??otrtriggers\number\c_page_otf_trigger_penalty}{#2}}
+ \edef#invoke{\page_otr_trigger{\number\c_page_otf_trigger_penalty}}%
+ \setvalue{\??otrtriggers\number\c_page_otf_trigger_penalty}{#action}}
\unexpanded\def\page_otr_triggered_output_routine_traced
{\ifcsname\??otrtriggers\the\outputpenalty\endcsname
\page_otr_message_b{special}%
- \csname\??otrtriggers\the\outputpenalty\endcsname
+ \csname\??otrtriggers\the\outputpenalty\endcsname % \lastnamedcs can be gone
\page_otr_message_e{special}%
\else
\page_otr_message_b{normal}%
@@ -139,7 +143,7 @@
\unexpanded\def\page_otr_triggered_output_routine_normal
{\ifcsname\??otrtriggers\the\outputpenalty\endcsname
- \csname\??otrtriggers\the\outputpenalty\endcsname
+ \lastnamedcs
\else
\page_otr_command_routine
\fi}
@@ -155,11 +159,11 @@
\ifdefined\everybeforeoutput \else \newtoks\everybeforeoutput \fi
\ifdefined\everyafteroutput \else \newtoks\everyafteroutput \fi
-\def\page_otf_set_engine_output_routine#1%
+\def\page_otf_set_engine_output_routine#content%
{\global\output
{\inotrtrue
\the\everybeforeoutput
- #1\relax
+ #content\relax
\the\everyafteroutput}}
\page_otf_set_engine_output_routine\page_otr_triggered_output_routine
@@ -220,7 +224,7 @@
\def\page_otr_force_another_page
{% we should actually remove the dummy line in the otr
- \hbox to \hsize{}%
+ \hpack to \hsize{}%
\kern-\topskip
\nobreak
\vfill
diff --git a/Master/texmf-dist/tex/context/base/page-par.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-par.mkiv
index 588065d6563..588065d6563 100644
--- a/Master/texmf-dist/tex/context/base/page-par.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-par.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-plg.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-plg.mkiv
index b59a05a9454..b59a05a9454 100644
--- a/Master/texmf-dist/tex/context/base/page-plg.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-plg.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-pst.lua b/Master/texmf-dist/tex/context/base/mkiv/page-pst.lua
index 472bdbabed5..472bdbabed5 100644
--- a/Master/texmf-dist/tex/context/base/page-pst.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-pst.lua
diff --git a/Master/texmf-dist/tex/context/base/page-pst.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-pst.mkiv
index f12663f6665..f12663f6665 100644
--- a/Master/texmf-dist/tex/context/base/page-pst.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-pst.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-run.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-run.mkiv
index 9adcb23c7b3..9adcb23c7b3 100644
--- a/Master/texmf-dist/tex/context/base/page-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-run.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-sel.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-sel.mkvi
index ee25a37db4a..eb83890328e 100644
--- a/Master/texmf-dist/tex/context/base/page-sel.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-sel.mkvi
@@ -272,8 +272,8 @@
\exitloop
\fi}}
-\setvalue{\??combinepagesalternative\v!horizontal}{\getvalue{\??combinepagesalternative\v!a}}
-\setvalue{\??combinepagesalternative\v!vertical }{\getvalue{\??combinepagesalternative\v!c}}
+\expandafter\let\csname\??combinepagesalternative\v!horizontal\expandafter\endcsname\csname\??combinepagesalternative\v!a\endcsname
+\expandafter\let\csname\??combinepagesalternative\v!vertical \expandafter\endcsname\csname\??combinepagesalternative\v!c\endcsname
\setvalue{\??combinepagesalternative\v!b}%
{\global\combinedpagescounter\directwithpagesparameter\c!start\relax
@@ -366,4 +366,40 @@
% \starttext \slicepages[slice1.pdf][n=3] \stoptext
+\unexpanded\def\trimpages[#1]% was for a over decade in p-pdf-51.tex
+ {\begingroup
+ \getdummyparameters
+ [\c!file=dummy,
+ \c!hoffset=\zeropoint,
+ \c!voffset=\zeropoint,
+ \c!width=17cm,
+ \c!height=24cm,
+ \c!x=\zeropoint,
+ \c!y=\zeropoint,
+ #1]
+ \getfiguredimensions
+ [\dummyparameter\c!file]
+ [\c!object=\v!no]
+ \dorecurse\noffigurepages
+ {\scale
+ [\c!width=\paperwidth,
+ \c!height=\paperheight]
+ {\offset
+ [\c!x=\dummyparameter\c!x,
+ \c!y=\dummyparameter\c!y]
+ {\clip
+ [\c!hoffset=\dummyparameter\c!hoffset,
+ \c!voffset=\dummyparameter\c!voffset,
+ \c!width=\dummyparameter\c!width,
+ \c!height=\dummyparameter\c!height]
+ {% we correct by default, if not needed, introduce option
+ \setbox\nextbox\hbox
+ {\externalfigure[\dummyparameter\c!file][\c!page=##1]}%
+ \ifdim\wd\nextbox>\ht\nextbox
+ \rotate[\c!rotation=90]{\box\nextbox}%
+ \else
+ \box\nextbox
+ \fi}}}}%
+ \endgroup}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-set.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-set.mkiv
index a5afb92e951..6e6759208ce 100644
--- a/Master/texmf-dist/tex/context/base/page-set.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-set.mkiv
@@ -694,7 +694,7 @@
\installcolumnbreakmethod \s!columnset \v!page
{\page_otr_fill_and_eject_page}
-
+
\newtoks\OTRSETeverystartofcolumn
\newbox\OTRSETsavedfootnotes
@@ -857,7 +857,7 @@
\fi}
\let\OTRSETcheckfreelines\donothing
-
+
\def\OTRSETfillgapsbetweencells#1#2% col
{\ifnum\columngaplimit>\zerocount
\donefalse
@@ -885,7 +885,7 @@
\appendtoks
\OTRSETfillgapsbetweencells\mofcolumns\plusone
\to \OTRSETeverystartofcolumn
-
+
\newif\ifspancolumnslots \spancolumnslotstrue
\newif\ifcheckcolumnspan \checkcolumnspantrue
@@ -963,7 +963,7 @@
\columnlastcell\savedcolumnlastcell
\OTRSETsavebox{#1}%
\fi}
-
+
\newdimen\totalcolumnspace
\def\columnspacetopoffset{0}
@@ -1038,15 +1038,6 @@
\fi}%
\fi}
-\let\preferedcolumn\empty
-\let\preferedrow \empty
-
-\def\OTRSETsetpreferedcolumnslot#1#2%
- {\doifsomething{#1}{\edef\preferedcolumn{#1}}%
- \doifsomething{#2}{\edef\preferedrow {#2}}}
-
-\OTRSETsetpreferedcolumnslot{\nofcolumns}{1} % default ?
-
\let\pofcolumns\mofcolumns
\let\qofcolumns\mofcolumns
@@ -1118,8 +1109,8 @@
{\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot1}{#1}% % 1/2 dependent of place, todo
\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- \pofcolumns \pofcolumns +\currenthcell
- \preferedrow\columnmaxcells+\currentvcell{#1}}
+ \pofcolumns \pofcolumns +\currenthcell
+ \floatrow\columnmaxcells+\currentvcell{#1}}
\def\OTRSETstoreincolumnslotFXBT#1% fixed column
{\OTRSETcheckprefered
@@ -1127,8 +1118,8 @@
{\OTRSETprepareforcolumnslot2}{\OTRSETprepareforcolumnslot3}{#1}% % 3/2 dependent of place, todo
\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- \pofcolumns \pofcolumns +\currenthcell
- \columnmaxcells\preferedrow-\currentvcell{#1}}
+ \pofcolumns \pofcolumns+\currenthcell
+ \columnmaxcells\floatrow -\currentvcell{#1}}
\newconstant\OTRSETforcefixedfloats
@@ -1179,10 +1170,15 @@
\page_set_command_set_vsize}
\def\OTRSETcheckprefered
- {\ifnum\preferedcolumn<\mofcolumns
+ {\ifx\floatcolumn\empty
+ \let\pofcolumns\nofcolumns
+ \else\ifnum\floatcolumn<\mofcolumns
\let\pofcolumns\mofcolumns
\else
- \let\pofcolumns\preferedcolumn
+ \let\pofcolumns\floatcolumn
+ \fi\fi
+ \ifx\floatrow\empty
+ \let\pofcolumns\plusone
\fi
\ifquitincurrentcolumn
\ifnum\mofcolumns=\nofcolumns
@@ -1200,12 +1196,12 @@
{\OTRSETcheckprefered
\enoughcolumncellsfalse
\donefalse
- \dostepwiserecurse{#1}{#2}{#31}
+ \dostepwiserecurse{#1}{#2}{#3#4}
{\ifdone
\exitloop
\else
#4=\recurselevel
- \dostepwiserecurse{#5}{#6}{#71}
+ \dostepwiserecurse{#5}{#6}{#7#8}
{\ifdone
\exitloop
\else
@@ -1271,10 +1267,10 @@
% {\vss\box#2\vss}%
% \fi
% and don't change this any more
-% \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1}
-% {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}}
+% \doifdefinedelse{\csstring\OTRSETstoreincolumnslot#1}
+% {\getvalue{\csstring\OTRSETstoreincolumnslot#1}{#2}}
% {\OTRSETstoreincolumnslotUNKNOWN{#2}}}
- \executeifdefined{\strippedcsname\OTRSETstoreincolumnslot#1}
+ \executeifdefined{\csstring\OTRSETstoreincolumnslot#1}
\OTRSETstoreincolumnslotUNKNOWN} % {#2}}
\def\OTRSETstoreincolumnslotUNKNOWN#1%
@@ -1298,7 +1294,7 @@
\ifnum#1<3\vss\fi
\egroup
\fi}
-
+
\unexpanded\def\page_set_command_check_if_float_fits
{\global\ifconditional\c_page_floats_not_permitted\setfalse\c_page_floats_room\else\settrue\c_page_floats_room\fi}
@@ -1334,6 +1330,13 @@
\ifdim\floatwidth>\zeropoint
\!!doneatrue
\page_floats_flush\s!text\plusone
+%
+% a quick hack ... will be redone
+%
+\ifdim\wd\floatbox<\floatwidth \ifhbox\floatbox
+ \global\setbox\floatbox\hbox{\unhbox\floatbox}%
+\fi \fi
+%
\dp\floatbox\zeropoint
\OTRSETstoreincolumnslot{TBLR}\floatbox
\if!!donea
@@ -1349,9 +1352,8 @@
\exitloop
\fi}
\egroup}
-
-\newif\ifcentergridcells \centergridcellstrue
+\newif\ifcentergridcells \centergridcellstrue
\newif\ifcentergridcellonly \centergridcellonlyfalse
\newif\ifautocentergridcellonly \autocentergridcellonlytrue
@@ -1420,7 +1422,7 @@
\fi
\fi}}%
\fi}
-
+
\def\OTRSETinitializecolumns% once per page
{\columnspreadtrue % todo
\ifcolumnspread
@@ -1442,7 +1444,7 @@
\OTRSETassignwidths
\global\mofcolumns\plusone
\page_set_cell_erase_grid}
-
+
% this is a first step in upgrading
\installcorenamespace{columnset}
@@ -1462,8 +1464,7 @@
\c!frame=\v!off,
\c!offset=\v!overlay,
\c!frame=\v!off,
- \c!align=,
- \c!lines=0]
+ \c!align=]
\let\page_set_setup_saved\setupcolumnset
@@ -1489,7 +1490,7 @@
\unexpanded\def\page_set_setup_step##1%
{\doifelse{##1}\v!each
{\dorecurse{\namedcolumnsetparameter{#1}\c!n}{\page_set_setup_step\recurselevel}}
- {\normalexpanded{\page_set_setup_saved[#1:\recurselevel]}[#3]}}%
+ {\normalexpanded{\page_set_setup_saved[#1:##1]}[#3]}}%
\processcommalist[#2]\page_set_setup_step
\else
\page_set_setup_saved[#1][#2]%
@@ -1558,7 +1559,7 @@
\v!last=>\expanded{\doOTRSETgotoCOLUMN{\the\nofcolumns}},
\s!default=>\OTRSETdummycolumn,
\s!unknown=>\expanded{\doOTRSETgotoCOLROW{\commalistelement}}]}
-
+
% to be documented and tested, not yet that robust
% \def\OTRSETgotocell#1#2%
@@ -1600,7 +1601,7 @@
{\endgraf
\doOTRSETgotoCOLUMN{#1}%
\doOTRSETgotoROW {#2}}
-
+
\def\OTRSETdummycolumn
{\verticalstrut
\vskip-\struttotal
@@ -2032,7 +2033,7 @@
\@EA\uppercasestring\floatmethod\to\floatmethod
\OTRSETstoreincolumnslot\floatmethod\floatbox
\page_floats_report_total}
-
+
% kind of new, looks much like OTRONE, but not entirely
\newconditional\c_page_set_top_of_insert
@@ -2046,10 +2047,8 @@
\ifnum\rootfloatparameter\c!nbottom=\zerocount
\ifnum\rootfloatparameter\c!nlines>\zerocount
\ifdim\totaltopinserted>\zeropoint\relax
- \dimen0\lineheight
- \dimen0=\rootfloatparameter\c!nlines\dimen0
- \advance\dimen0 \totaltopinserted\relax
- \ifdim\dimen0>\textheight % \vsize %%%%%%%%% \textheight
+ \scratchdimen\dimexpr\rootfloatparameter\c!nlines\lineheight+\totaltopinserted\relax
+ \ifdim\scratchdimen>\textheight % \vsize %%%%%%%%% \textheight
\showmessage\m!floatblocks8{\rootfloatparameter\c!nlines}%
\page_otr_fill_and_eject_page % was triple: vfilll
\fi
@@ -2080,7 +2079,7 @@
\blank[\rootfloatparameter\c!spaceafter]}%
\global\advance\d_page_floats_inserted_top \ht\scratchbox\relax
\ifdim\d_page_floats_inserted_top>\vsize % was \textheight\relax
- \OTRSETresavebox\floatbox
+ \OTRSETresavebox\scratchbox
\noffloatinserts\c_page_floats_n_of_top\relax
\global\advance\d_page_floats_inserted_top -\ht\scratchbox
\let\OTRSETdodosettopinserts\relax % to be tested
@@ -2167,7 +2166,7 @@
% \box\columnbotbox\mofcolumns}
\fi
\global\d_page_floats_inserted_bottom\zeropoint\relax} % goes away
-
+
% set ipv text
% left right 1 2 3 +1 +2 +3
@@ -2177,7 +2176,7 @@
% links rechts => odd, even, n, named
-\definesystemvariable {mt} % MulTicolumn
+\installcorenamespace{columnsetarea}
\unexpanded\def\definecolumntextarea
{\dotripleempty\dodefinecolumntextarea}
@@ -2192,11 +2191,11 @@
{\definecolumntextarea[#1][\v!right][\c!type=#2,#3]}
{\definecolumntextarea[#1][\v!left ][\c!type=#2,#3]}}
{\presetlocalframed
- [\??mt#1#2]%
+ [\??columnsetarea#1#2]%
\processaction[#2] % \doglobal voorkomt stack build up
[ \v!left=>\doglobal\addtocommalist{#1}\columnleftareas,
\v!right=>\doglobal\addtocommalist{#1}\columnrightareas]%
- \getparameters[\??mt#1#2]
+ \getparameters[\??columnsetarea#1#2]
[\c!x=1,\c!y=1,\c!nx=1,\c!ny=1,\c!clipoffset=2\lineheight,
\c!leftoffset=\zeropoint,\c!rightoffset=\zeropoint,
\c!offset=\v!overlay,\c!strut=\v!no,\c!frame=\v!off,
@@ -2217,18 +2216,18 @@
{\doifelseoddpage
{\setupcolumntextarea[#1][\v!right][#3]}
{\setupcolumntextarea[#1][\v!left][#3]}}
- {\getparameters[\??mt#1#2][#3]}}%
+ {\getparameters[\??columnsetarea#1#2][#3]}}%
\else
\setupcolumntextarea[#1][\v!next][#2]%
\fi}
\def\docheckcolumnsetareapage#1#2%
- {\ifnum\getvalue{\??mt#1\c!page}>\plusone
- \doifelsevalue{\??mt#1\c!type}\v!fixed
- {\ifnum\columnsetpage=\getvalue{\??mt#1\c!page}\relax
+ {\ifnum\getvalue{\??columnsetarea#1\c!page}>\plusone
+ \doifelsevalue{\??columnsetarea#1\c!type}\v!fixed
+ {\ifnum\columnsetpage=\getvalue{\??columnsetarea#1\c!page}\relax
\donetrue\else\donefalse
\fi}
- {\ifnum\columnsetpage<\getvalue{\??mt#1\c!page}\relax
+ {\ifnum\columnsetpage<\getvalue{\??columnsetarea#1\c!page}\relax
\donefalse\else\donetrue
\fi}%
\else
@@ -2248,7 +2247,7 @@
\ifdone
\donefalse
\processaction
- [\getvalue{\??mt##1#2\c!state}]
+ [\getvalue{\??columnsetarea##1#2\c!state}]
[ \v!start=>\donetrue,
\v!repeat=>\donetrue,
\s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]%
@@ -2259,8 +2258,8 @@
\def\dodoinitializecolumntextareas#1#2%
{\doOTRSETsetgridcells
{\copy\placeholderboxd}
- {\getvalue{\??mt#1#2\c!x }}{\getvalue{\??mt#1#2\c!y }}
- {\getvalue{\??mt#1#2\c!nx}}{\getvalue{\??mt#1#2\c!ny}}
+ {\getvalue{\??columnsetarea#1#2\c!x }}{\getvalue{\??columnsetarea#1#2\c!y }}
+ {\getvalue{\??columnsetarea#1#2\c!nx}}{\getvalue{\??columnsetarea#1#2\c!ny}}
{\copy\placeholderboxd}}
\unexpanded\def\placecolumntextareas
@@ -2278,7 +2277,7 @@
\ifdone
\donefalse
\processaction
- [\getvalue{\??mt##1#2\c!state}]
+ [\getvalue{\??columnsetarea##1#2\c!state}]
[ \v!start=>\donetrue\doglobal\removefromcommalist{##1}#1,
\v!repeat=>\donetrue,
\s!unknown=>\doperformtest\commalistelement\donetrue\donefalse]%
@@ -2305,7 +2304,7 @@
% beware, we have clipping offsets of 2\lineheight by default
\def\columntextareaparameter#1%
- {\csname\??mt\currentcolumntestarea#1\endcsname}
+ {\csname\??columnsetarea\currentcolumntestarea#1\endcsname}
\def\dodoplacecolumntextareas#1#2%
{\def\currentcolumntestarea{#1#2}%
@@ -2326,7 +2325,7 @@
%
\setbox\scratchbox\vbox
{\donetrue\localframed
- [\??mt\currentcolumntestarea]
+ [\??columnsetarea\currentcolumntestarea]
[\c!location=,% new (*)
\c!width=\!!widtha,\c!height=\!!heighta,\c!lines=]
{\columntextareaparameter\empty{}}}% messy
@@ -2349,7 +2348,6 @@
%\c!bottomoffset=\columntextareaparameter\c!clipoffset,%
%\c!leftoffset=\columntextareaparameter\c!clipoffset,%
\c!offset=\columntextareaparameter\c!clipoffset,%
- \c!offset=\columntextareaparameter\c!clipoffset,%
\c!rightoffset=\columntextareaparameter\c!rightoffset,%
\c!width=\!!widthb,%
\c!height=\!!heighta]%
@@ -2382,13 +2380,13 @@
\def\dosetupcolumntextareatext[#1][#2][#3]%
{\ifthirdargument
\doifelse{#2}\v!both
- {\setvalue{\??mt#1\v!left }{#3}%
- \setvalue{\??mt#1\v!right}{#3}}
+ {\setvalue{\??columnsetarea#1\v!left }{#3}%
+ \setvalue{\??columnsetarea#1\v!right}{#3}}
{\doifelse{#2}\v!next
{\doifelseoddpage
- {\setvalue{\??mt#1\v!right}{#3}}%
- {\setvalue{\??mt#1\v!left }{#3}}}%
- {\setvalue{\??mt#1#2}{#3}}}%
+ {\setvalue{\??columnsetarea#1\v!right}{#3}}%
+ {\setvalue{\??columnsetarea#1\v!left }{#3}}}%
+ {\setvalue{\??columnsetarea#1#2}{#3}}}%
\else
\setupcolumntextareatext[#1][\v!next][{#2}]%
\fi}
@@ -2441,14 +2439,16 @@
\else
\d_strc_float_temp_width
\fi}
-
+
+\installcorenamespace{columnsetspan}
+
\unexpanded\def\definecolumnsetspan
{\dodoubleempty\dodefinecolumnsetspan}
\def\dodefinecolumnsetspan[#1][#2]%
{%\ifsecondargument
\defineframedtext % we can have a parent
- [cs:#1]
+ [\??columnsetspan#1]
[\c!frame=\v!off,
\c!before=,
\c!after=,
@@ -2474,7 +2474,7 @@
\def\dosetupcolumnsetspan[#1][#2]%
{\ifsecondargument
- \setupframedtexts[cs:#1][#2]%
+ \setupframedtexts[\??columnsetspan#1][#2]%
\else
\setupcolumnsetspan[\s!default][#1]%
\fi}
@@ -2495,13 +2495,13 @@
\nofcolumns\plusone
\mofcolumns\plusone
\fi
- \setupframedtexts[cs:#1]
+ \setupframedtexts[\??columnsetspan#1]
[\c!width=\columnsetspanhsize,
\c!linecorrection=\v!off,
\c!depthcorrection=\v!off,
#2]%
% determine widths
- \!!countc\namedframedtextparameter{cs:#1}\c!n
+ \!!countc\namedframedtextparameter{\??columnsetspan#1}\c!n
% \!!countd\numexpr(\nofcolumns-\mofcolumns+\plusone)%
\!!countd\nofcolumns
% n <= n of columns
@@ -2509,16 +2509,16 @@
\advance\!!countd -\mofcolumns
\advance\!!countd \plusone
% n <= n of available columns (alternative a)
- \doif{\namedframedtextparameter{cs:#1}\c!alternative}\v!a
+ \doif{\namedframedtextparameter{\??columnsetspan#1}\c!alternative}\v!a
{\ifnum\!!countc>\!!countd \!!countc\!!countd \fi}%
% here it all starts
\setcolumnsetspanhsize\mofcolumns\!!countc % a/b used
\hsize\columnsetspanhsize
\setbox\scratchbox\vbox\bgroup
- \pack_framed_text_start{cs:#1}[\v!none]% geen nils placement
+ \pack_framed_text_start{\??columnsetspan#1}[\v!none]% geen nils placement
% spoils spacing : \vskip-\struttotal\par\verticalstrut\par
\ifnum\columnsetlevel>\zerocount
- \namedframedtextparameter{cs:#1}\c!before
+ \namedframedtextparameter{\??columnsetspan#1}\c!before
\fi
\unexpanded\def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}}
@@ -2528,8 +2528,8 @@
\kern-2\struttotal
\verticalstrut
\ifnum\columnsetlevel>\zerocount
- \doifsomething{\namedframedtextparameter{cs:#1}\c!after}
- {\namedframedtextparameter{cs:#1}\c!after
+ \doifsomething{\namedframedtextparameter{\??columnsetspan#1}\c!after}
+ {\namedframedtextparameter{\??columnsetspan#1}\c!after
\kern\zeropoint}% otherwise blanks disappear, better be a switch
\else
\endgraf
@@ -2538,7 +2538,7 @@
\egroup
\setbox\scratchbox\frozenhbox to \hsize
{\dontcomplain
- \alignedline{\namedframedtextparameter{cs:#1}\c!location}\v!middle{\lower\strutdepth\box\scratchbox}}%
+ \alignedline{\namedframedtextparameter{\??columnsetspan#1}\c!location}\v!middle{\lower\strutdepth\box\scratchbox}}%
\dp\scratchbox\zeropoint % else wrong snap insidefloat
%
% to be tested first (strange in grid mode)
@@ -2546,7 +2546,7 @@
% \setbox\scratchbox\frozenhbox to \hsize
% {\dontcomplain
% \alignstrutmode\zerocount
-% \alignedline{\namedframedtextparameter{cs:#1}\c!plaats}\v!midden
+% \alignedline{\namedframedtextparameter{\??columnsetspan#1}\c!plaats}\v!midden
% {\box\scratchbox}}%
%
\ifinsidefloat
@@ -2554,23 +2554,23 @@
\else\ifnum\columnsetlevel>\zerocount
% we only set \columnsetspacing when asked for, else bottom problems
% don't change this any more (test naw)
- \columnslotspacing\namedframedtextparameter{cs:#1}\c!nlines\relax
+ \columnslotspacing\namedframedtextparameter{\??columnsetspan#1}\c!nlines\relax
% todo: nboven/onder
%\OTRSETstoreincolumnslotHERE\scratchbox
- \edef\floatmethod{\namedframedtextparameter{cs:#1}\c!default}%
+ \edef\floatmethod{\namedframedtextparameter{\??columnsetspan#1}\c!default}%
\@EA\uppercasestring\floatmethod\to\floatmethod
% todo : \v!here -> here enzovoorts
\OTRSETstoreincolumnslot\floatmethod\scratchbox
- \checknextindentation[\namedframedtextparameter{cs:#1}\c!indentnext]%
+ \checknextindentation[\namedframedtextparameter{\??columnsetspan#1}\c!indentnext]%
\else
% of course we needed a one-column fall back for tm; brrr, the box has now too
% much height (try \ruledvbox); don't change this without testing techniek
\scratchdimen\ht\scratchbox
\advance\scratchdimen-\strutdp
\ht\scratchbox\scratchdimen
- \namedframedtextparameter{cs:#1}\c!before
+ \namedframedtextparameter{\??columnsetspan#1}\c!before
\snaptogrid\vbox{\box\scratchbox}%
- \namedframedtextparameter{cs:#1}\c!after
+ \namedframedtextparameter{\??columnsetspan#1}\c!after
\fi\fi
\egroup
\endgraf}
diff --git a/Master/texmf-dist/tex/context/base/page-sid.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-sid.mkiv
index cbee4da20f7..2c1c624df38 100644
--- a/Master/texmf-dist/tex/context/base/page-sid.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-sid.mkiv
@@ -258,7 +258,7 @@
\doloop
{\iftracesidefloats
\dontleavehmode
- \ruledhbox{\m_pages_strut\kern\d_page_sides_width}%
+ \ruledhpack{\m_pages_strut\kern\d_page_sides_width}%
\else
\m_pages_strut
\fi
@@ -456,7 +456,7 @@
% The compact way:
\def\page_sides_relocate_float#1%
- {\global\setbox\floatbox\hbox
+ {\global\setbox\floatbox\hpack
{\ifnum\c_page_sides_float_type=\plusfour
\kern\d_page_sided_leftshift
\else\ifnum\c_page_sides_float_type=\plusone
@@ -487,7 +487,7 @@
\advance\scratchdimen\noflines\lineheight
% todo: maybe rounding problem here
% \global\setbox\floatbox\hbox{\lower\lineheight\box\floatbox}%
- \global\setbox\floatbox\hbox{\lower\strutdepth\box\floatbox}%
+ \global\setbox\floatbox\hpack{\lower\strutdepth\box\floatbox}%
\ht\floatbox\scratchdimen
\dp\floatbox\zeropoint
\fi
@@ -522,7 +522,7 @@
\ifnum\c_page_sides_n_of_lines>\zerocount
\advance\scratchdimen\c_page_sides_n_of_lines\lineheight
\fi
- \global\setbox\floatbox\hbox % why extra box
+ \global\setbox\floatbox\hpack % why extra box
{\vbox
{\vskip\scratchdimen
\nointerlineskip
@@ -690,7 +690,7 @@
{\par
\begingroup
\reseteverypar
- \dontleavehmode\hbox to \zeropoint{\page_sides_anchor\hss\strut}%
+ \dontleavehmode\hpack to \zeropoint{\page_sides_anchor\hss\strut}%
\vskip-\parskip
\vskip-\struttotal
\inhibitblank
@@ -801,7 +801,7 @@
\divide\scratchcounter \baselineskip
\advance\scratchcounter \plusone
\parskip\zeropoint
- \dorecurse\scratchcounter{\hbox to \hsize{}}%
+ \dorecurse\scratchcounter{\hpack to \hsize{}}%
\kern-\scratchcounter\baselineskip
\penalty\zerocount
\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/page-spr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-spr.mkiv
index dc1e013d50d..dc1e013d50d 100644
--- a/Master/texmf-dist/tex/context/base/page-spr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-spr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-str.lua b/Master/texmf-dist/tex/context/base/mkiv/page-str.lua
index 56c6167aa56..56c6167aa56 100644
--- a/Master/texmf-dist/tex/context/base/page-str.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-str.lua
diff --git a/Master/texmf-dist/tex/context/base/page-str.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-str.mkiv
index e4b2fa22980..e4b2fa22980 100644
--- a/Master/texmf-dist/tex/context/base/page-str.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-str.mkiv
diff --git a/Master/texmf-dist/tex/context/base/page-txt.mkvi b/Master/texmf-dist/tex/context/base/mkiv/page-txt.mkvi
index 76143a01859..515d16e135b 100644
--- a/Master/texmf-dist/tex/context/base/page-txt.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-txt.mkvi
@@ -177,77 +177,160 @@
% An alternative approach is to have more variables but that does not
% make the code less complex (probably more).
-\def\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]%
- {\ifsixthargument
- \edef\currentlayoutelement{#vertical:#horizontal}%
- \setlayoutelementparameter\c!lefttext
- {\page_layouts_process_element_double
- \c!leftstyle \c!leftcolor \c!leftwidth {#a}%
- \c!rightstyle\c!rightcolor\c!rightwidth{#d}}%
- \setlayoutelementparameter\c!righttext
- {\page_layouts_process_element_double
- \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
- \c!leftstyle \c!leftcolor \c!leftwidth {#c}}%
- \else\iffifthargument
- \edef\currentlayoutelement{#vertical:\v!text}%
- \setlayoutelementparameter\c!lefttext
- {\page_layouts_process_element_double
- \c!leftstyle \c!leftcolor \c!leftwidth {#horizontal}%
- \c!rightstyle\c!rightcolor\c!rightwidth{#c}}%
- \setlayoutelementparameter\c!righttext
- {\page_layouts_process_element_double
- \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
- \c!leftstyle \c!leftcolor \c!leftwidth {#b}}%
- \else\iffourthargument
- \edef\currentlayoutelement{#vertical:#horizontal}%
- \doifelsenothing{\detokenize{#a}}
- {\resetlayoutelementparameter\c!lefttext}
- {\setlayoutelementparameter\c!lefttext
- {\page_layouts_process_element_double
- \c!leftstyle\c!leftcolor\c!leftwidth{#a}%
- \c!leftstyle\c!leftcolor\c!leftwidth{#a}}}%
- \doifelsenothing{\detokenize{#b}}
- {\resetlayoutelementparameter\c!righttext}
- {\setlayoutelementparameter\c!righttext
- {\page_layouts_process_element_double
- \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
- \c!rightstyle\c!rightcolor\c!rightwidth{#b}}}%
- \else\ifthirdargument
- \edef\currentlayoutelement{#vertical:\v!text}%
- \doifelsenothing{\detokenize{#horizontal}}
- {\resetlayoutelementparameter\c!lefttext}
- {\setlayoutelementparameter\c!lefttext
- {\page_layouts_process_element_double
- \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}%
- \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}}}%
- \doifelsenothing{\detokenize{#a}}
- {\resetlayoutelementparameter\c!righttext}
- {\setlayoutelementparameter\c!righttext
- {\page_layouts_process_element_double
- \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
- \c!rightstyle\c!rightcolor\c!rightwidth{#a}}}%
- \else\ifsecondargument
- \edef\currentlayoutelement{#vertical:\v!text}%
- \resetlayoutelementparameter\c!lefttext
- \resetlayoutelementparameter\c!righttext
- \doifelsenothing{\detokenize{#horizontal}}
- {\resetlayoutelementparameter\c!middletext}
- {\setlayoutelementparameter\c!middletext
- {\page_layouts_process_element_single\c!style\c!color\c!width{#horizontal}}}%
- \else
- \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
- \fi\fi\fi\fi\fi}
+% \unexpanded\def\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]%
+% {\ifsixthargument
+% \edef\currentlayoutelement{#vertical:#horizontal}%
+% \setlayoutelementparameter\c!lefttext
+% {\page_layouts_process_element_double
+% \c!leftstyle \c!leftcolor \c!leftwidth {#a}%
+% \c!rightstyle\c!rightcolor\c!rightwidth{#d}}%
+% \setlayoutelementparameter\c!righttext
+% {\page_layouts_process_element_double
+% \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
+% \c!leftstyle \c!leftcolor \c!leftwidth {#c}}%
+% \else\iffifthargument
+% \edef\currentlayoutelement{#vertical:\v!text}%
+% \setlayoutelementparameter\c!lefttext
+% {\page_layouts_process_element_double
+% \c!leftstyle \c!leftcolor \c!leftwidth {#horizontal}%
+% \c!rightstyle\c!rightcolor\c!rightwidth{#c}}%
+% \setlayoutelementparameter\c!righttext
+% {\page_layouts_process_element_double
+% \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
+% \c!leftstyle \c!leftcolor \c!leftwidth {#b}}%
+% \else\iffourthargument
+% \edef\currentlayoutelement{#vertical:#horizontal}%
+% \doifelsenothing{\detokenize{#a}}
+% {\resetlayoutelementparameter\c!lefttext}
+% {\setlayoutelementparameter\c!lefttext
+% {\page_layouts_process_element_double
+% \c!leftstyle\c!leftcolor\c!leftwidth{#a}%
+% \c!leftstyle\c!leftcolor\c!leftwidth{#a}}}%
+% \doifelsenothing{\detokenize{#b}}
+% {\resetlayoutelementparameter\c!righttext}
+% {\setlayoutelementparameter\c!righttext
+% {\page_layouts_process_element_double
+% \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
+% \c!rightstyle\c!rightcolor\c!rightwidth{#b}}}%
+% \else\ifthirdargument
+% \edef\currentlayoutelement{#vertical:\v!text}%
+% \doifelsenothing{\detokenize{#horizontal}}
+% {\resetlayoutelementparameter\c!lefttext}
+% {\setlayoutelementparameter\c!lefttext
+% {\page_layouts_process_element_double
+% \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}%
+% \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}}}%
+% \doifelsenothing{\detokenize{#a}}
+% {\resetlayoutelementparameter\c!righttext}
+% {\setlayoutelementparameter\c!righttext
+% {\page_layouts_process_element_double
+% \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
+% \c!rightstyle\c!rightcolor\c!rightwidth{#a}}}%
+% \else\ifsecondargument
+% \edef\currentlayoutelement{#vertical:\v!text}%
+% \resetlayoutelementparameter\c!lefttext
+% \resetlayoutelementparameter\c!righttext
+% \doifelsenothing{\detokenize{#horizontal}}
+% {\resetlayoutelementparameter\c!middletext}
+% {\setlayoutelementparameter\c!middletext
+% {\page_layouts_process_element_single\c!style\c!color\c!width{#horizontal}}}%
+% \else
+% \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
+% \fi\fi\fi\fi\fi}
+
+\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
+ \c!leftstyle \c!leftcolor \c!leftwidth {#a}%
+ \c!rightstyle\c!rightcolor\c!rightwidth{#d}}%
+ \setlayoutelementparameter\c!righttext
+ {\page_layouts_process_element_double
+ \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
+ \c!leftstyle \c!leftcolor \c!leftwidth {#c}}}
+
+\unexpanded\def\page_layouts_setup_text_five#vertical#horizontal#a#b#c%
+ {\edef\currentlayoutelement{#vertical:\v!text}%
+ \setlayoutelementparameter\c!lefttext
+ {\page_layouts_process_element_double
+ \c!leftstyle \c!leftcolor \c!leftwidth {#horizontal}%
+ \c!rightstyle\c!rightcolor\c!rightwidth{#c}}%
+ \setlayoutelementparameter\c!righttext
+ {\page_layouts_process_element_double
+ \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
+ \c!leftstyle \c!leftcolor \c!leftwidth {#b}}}
+
+\unexpanded\def\page_layouts_setup_text_four#vertical#horizontal#a#b%
+ {\edef\currentlayoutelement{#vertical:#horizontal}%
+ \doifelsenothing{\detokenize{#a}}
+ {\resetlayoutelementparameter\c!lefttext}
+ {\setlayoutelementparameter\c!lefttext
+ {\page_layouts_process_element_double
+ \c!leftstyle\c!leftcolor\c!leftwidth{#a}%
+ \c!leftstyle\c!leftcolor\c!leftwidth{#a}}}%
+ \doifelsenothing{\detokenize{#b}}
+ {\resetlayoutelementparameter\c!righttext}
+ {\setlayoutelementparameter\c!righttext
+ {\page_layouts_process_element_double
+ \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
+ \c!rightstyle\c!rightcolor\c!rightwidth{#b}}}}
+
+\unexpanded\def\page_layouts_setup_text_three#vertical#horizontal#a%
+ {\edef\currentlayoutelement{#vertical:\v!text}%
+ \doifelsenothing{\detokenize{#horizontal}}
+ {\resetlayoutelementparameter\c!lefttext}
+ {\setlayoutelementparameter\c!lefttext
+ {\page_layouts_process_element_double
+ \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}%
+ \c!leftstyle\c!leftcolor\c!leftwidth{#horizontal}}}%
+ \doifelsenothing{\detokenize{#a}}
+ {\resetlayoutelementparameter\c!righttext}
+ {\setlayoutelementparameter\c!righttext
+ {\page_layouts_process_element_double
+ \c!rightstyle\c!rightcolor\c!rightwidth{#a}%
+ \c!rightstyle\c!rightcolor\c!rightwidth{#a}}}}
+
+\unexpanded\def\page_layouts_setup_text_two#vertical#horizontal%
+ {\edef\currentlayoutelement{#vertical:\v!text}%
+ \resetlayoutelementparameter\c!lefttext
+ \resetlayoutelementparameter\c!righttext
+ \doifelsenothing{\detokenize{#horizontal}}
+ {\resetlayoutelementparameter\c!middletext}
+ {\setlayoutelementparameter\c!middletext
+ {\page_layouts_process_element_single\c!style\c!color\c!width{#horizontal}}}}
+
+\unexpanded\def\page_layouts_setup_text_one#vertical%
+ {\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[#vertical][#horizontal][#a][#b][#c][#d]%
+ {\ifsixthargument \page_layouts_setup_text_six {#vertical}{#horizontal}{#a}{#b}{#c}{#d}\else
+ \iffifthargument \page_layouts_setup_text_five {#vertical}{#horizontal}{#a}{#b}{#c}\else
+ \iffourthargument\page_layouts_setup_text_four {#vertical}{#horizontal}{#a}{#b}\else
+ \ifthirdargument \page_layouts_setup_text_three{#vertical}{#horizontal}{#a}\else
+ \ifsecondargument\page_layouts_setup_text_two {#vertical}{#horizontal}\else
+ \page_layouts_setup_text_one {#vertical}\fi\fi\fi\fi\fi}
%D Left and right texts are swapped on odd and even pages, but
%D only when double sided typesetting is enabled.
@@ -283,7 +366,7 @@
\uselayoutelementstyleandcolor#style#color%
\csname\??layouttextstrut\layoutelementparameter\c!strut\endcsname
\ifcsname\??layouttextspecial\m_page_layouts_element_content\endcsname
- \csname\??layouttextspecial\m_page_layouts_element_content\endcsname
+ \lastnamedcs
\else
\edef\currentlayoutelementwidth{\layoutelementparameter#width}%
\ifx\currentlayoutelementwidth\empty
@@ -355,8 +438,12 @@
\to \everybeforeflushedpagefloat
\unexpanded\def\page_layouts_place_text_line#vertical%
- {\page_layouts_set_element_status#vertical%
- \csname\??layouttextsline\ifcsname\??layouttextsline\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#vertical}
+ {\page_layouts_set_element_status#vertical\relax
+ \ifcsname\??layouttextsline\textlinestatus\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\page_layouts_place_text_line_unknown
+ \fi#vertical}
\unexpanded\def\doifelselayouttextline#vertical% shown or not
{\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}%
@@ -407,7 +494,7 @@
\page_layouts_place_text_line_indeed#vertical#height%
\egroup}
-\setvalue{\??layouttextsline\s!unknown}#vertical#height%
+\def\page_layouts_place_text_line_unknown#vertical#height%
{\global\settrue\resyncaftertextline
\begingroup % new
\page_layouts_reset_element_status#vertical%
@@ -418,6 +505,8 @@
\page_layouts_place_text_line_indeed#vertical#height%
\endgroup}
+\letvalue{\??layouttextsline\s!unknown}\page_layouts_place_text_line_unknown
+
%D The following macro has to be called after a page
%D is flushed.
@@ -472,9 +561,9 @@
\resetlayoutelementparameter\c!righttext
\fi\fi}
-\letvalue{\??layouttextcontent\c!middle:\v!text}\c!middletext
-\letvalue{\??layouttextcontent\c!left :\v!text}\c!lefttext
-\letvalue{\??layouttextcontent\c!right :\v!text}\c!righttext
+\letvalue{\??layouttextcontent\v!text:\c!middle}\c!middletext
+\letvalue{\??layouttextcontent\v!text:\c!left }\c!lefttext
+\letvalue{\??layouttextcontent\v!text:\c!right }\c!righttext
%D The placement of a whole line is handled by the next two
%D macros. These are hooked into the general purpose token
@@ -513,7 +602,7 @@
\let\page_layouts_place_extra_text_right\relax % historic
\def\page_layouts_place_text_line_right
- {\hbox
+ {\hpack
{\ifdim\leftedgewidth>\zeropoint
\page_layouts_left_edge_element\c!lefttext
\fi
@@ -534,7 +623,7 @@
\fi}}
\def\page_layouts_place_text_line_left
- {\hbox
+ {\hpack
{\ifdim\leftedgewidth>\zeropoint
\page_layouts_left_edge_element\c!righttext
\fi
@@ -649,22 +738,35 @@
\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}%
+% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]}%
+% \else\ifsixthargument
+% \setvalue{\namedlayoutelementhash{#vertical}#tag}%
+% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c]}%
+% \else\iffifthargument
+% \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}%
+% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b]}%
+% \else\iffourthargument
+% \setvalue{\namedlayoutelementhash{#vertical}#tag}%
+% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a]}%
+% \else
+% \setvalue{\namedlayoutelementhash{#vertical}#tag}%
+% {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal]}%
+% \fi\fi\fi\fi}
+
\def\page_layouts_define_text[#tag][#vertical][#horizontal][#a][#b][#c][#d]%
{\ifseventhargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}%
- {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c][#d]}%
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_six {#vertical}{#horizontal}{#a}{#b}{#c}{#d}}%
\else\ifsixthargument
- \setvalue{\namedlayoutelementhash{#vertical}#tag}%
- {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b][#c]}%
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_five {#vertical}{#horizontal}{#a}{#b}{#c}}%
\else\iffifthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}%
- {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a][#b]}%
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_four {#vertical}{#horizontal}{#a}{#b}}%
\else\iffourthargument
- \setvalue{\namedlayoutelementhash{#vertical}#tag}%
- {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal][#a]}%
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_three{#vertical}{#horizontal}{#a}}%
\else
- \setvalue{\namedlayoutelementhash{#vertical}#tag}%
- {\dosixtupleempty\page_layouts_setup_texts[#vertical][#horizontal]}%
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_two {#vertical}{#horizontal}}%
\fi\fi\fi\fi}
%D A few more page breakers:
@@ -807,7 +909,7 @@
\fi}
\def\page_layouts_place_elements_indeed
- {\setbox\b_page_layouts_element\vbox
+ {\setbox\b_page_layouts_element\vpack
{\dontcomplain
\calculatereducedvsizes
\swapmargins
@@ -832,7 +934,7 @@
\box\b_page_layouts_element}
\def\page_insert_body#1#2%
- {\setbox\b_page_layouts_element\vbox
+ {\setbox\b_page_layouts_element\vpack
{\offinterlineskip
\calculatereducedvsizes
\calculatehsizes
@@ -880,8 +982,8 @@
% page-spr we overload the the stored version .. evenatually i will
% clear up the experimental mess
-\def\settextpagecontent#1#2#3% #2 and #3 will disappear
- {\setbox#1\hbox to \makeupwidth
+\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded
+ {\setbox#1\hbox to \makeupwidth % maybe \hpack
{\hss % so don't change this
\setlayoutcomponentattribute{\v!page:\v!text}%
\vbox \layoutcomponentboxattribute to \textheight
@@ -890,7 +992,7 @@
\hsize\textwidth % local variant of \sethsize <<< in columns?
\boxmaxdepth\maxdepth
\noindent % content can be < \hsize
- \dopagecontents#2#3}%
+ \page_otr_command_package_contents#2#3}%
\hss}%
\dp#1\zeropoint}
diff --git a/Master/texmf-dist/tex/context/base/page-var.mkiv b/Master/texmf-dist/tex/context/base/mkiv/page-var.mkiv
index 1c7fd5b252d..1c7fd5b252d 100644
--- a/Master/texmf-dist/tex/context/base/page-var.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/page-var.mkiv
diff --git a/Master/texmf-dist/tex/context/base/phys-dim.lua b/Master/texmf-dist/tex/context/base/mkiv/phys-dim.lua
index 71c9b0bd40e..71c9b0bd40e 100644
--- a/Master/texmf-dist/tex/context/base/phys-dim.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/phys-dim.lua
diff --git a/Master/texmf-dist/tex/context/base/phys-dim.mkiv b/Master/texmf-dist/tex/context/base/mkiv/phys-dim.mkiv
index b1bcb40c947..3ea042b0570 100644
--- a/Master/texmf-dist/tex/context/base/phys-dim.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/phys-dim.mkiv
@@ -145,8 +145,8 @@
\fi\fi}
\def\phys_digits_normalized_math#1#2%
- {\setbox\scratchbox\hbox{$\Ustack{#1}$}%
- \hbox to \wd\scratchbox{\hss{$\Ustack{#2}$}\hss}}
+ {\setbox\scratchbox\hbox{\normalstartimath\Ustack{#1}\normalstopimath}%
+ \hbox to \wd\scratchbox{\hss{\normalstartimath\Ustack{#2}\normalstopimath}\hss}}
\def\phys_digits_normalized_text#1#2%
{\setbox\scratchbox\hbox{#1}%
@@ -168,6 +168,7 @@
% \definesymbol[units][times][\times]
% \definesymbol[units][times][\cdots]
+% \definesymbol[units][times][\invisibletimes]
% \definesymbol[units][times][\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\emwidth\fi]
\unexpanded\def\digitstextbinop#1% assumes preceding
@@ -399,11 +400,15 @@
\unexpanded\def\installunitsseparator#1#2%
{\setvalue{\??unitseparator#1}{#2}}
+% \unexpanded\def\phys_units_separator
+% {\edef\currentunitsseparator{\unitparameter\c!separator}%
+% \csname\??unitseparator
+% \ifcsname\??unitseparator\currentunitsseparator\endcsname\currentunitsseparator\else\v!normal\fi
+% \endcsname}
+
\unexpanded\def\phys_units_separator
- {\edef\currentunitsseparator{\unitparameter\c!separator}%
- \csname\??unitseparator
- \ifcsname\??unitseparator\currentunitsseparator\endcsname\currentunitsseparator\else\v!normal\fi
- \endcsname}
+ {\edef\currentunitsseparator{\unitparameter\c!separator}% no longer needed
+ \ifcsname\??unitseparator\currentunitsseparator\endcsname\lastnamedcs\else\cdot\fi}
\installunitsseparator\v!normal {\cdot}
\installunitsseparator\v!big {\unitsbigspace}
@@ -414,12 +419,17 @@
\unexpanded\def\installunitsspace#1#2%
{\setvalue{\??unitspace#1}{#2}}
+% \unexpanded\def\phys_units_space
+% {\unskip % weird, why is unskip needed
+% \edef\currentunitsspace{\unitparameter\c!space}%
+% \csname\??unitspace
+% \ifcsname\??unitspace\currentunitsspace\endcsname\currentunitsspace\else\v!normal\fi
+% \endcsname}
+
\unexpanded\def\phys_units_space
{\unskip % weird, why is unskip needed
\edef\currentunitsspace{\unitparameter\c!space}%
- \csname\??unitspace
- \ifcsname\??unitspace\currentunitsspace\endcsname\currentunitsspace\else\v!normal\fi
- \endcsname}
+ \ifcsname\??unitspace\currentunitsspace\endcsname\lastnamedcs\else\unitsmediumspace\fi}
\installunitsspace\v!normal {\unitsmediumspace}
\installunitsspace\v!big {\unitsbigspace}
diff --git a/Master/texmf-dist/tex/context/base/prop-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/prop-ini.mkiv
index 3b1c59b245c..3b1c59b245c 100644
--- a/Master/texmf-dist/tex/context/base/prop-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/prop-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/publ-aut.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-aut.lua
index 5a9d485516c..5ed25f288c3 100644
--- a/Master/texmf-dist/tex/context/base/publ-aut.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-aut.lua
@@ -734,7 +734,7 @@ authorhashers.short = function(authors)
else
local s = surnames[1]
local c = lpegmatch(p_clean,s)
- if s ~= c then
+ if trace_hashing and s ~= c then
report_cite("name %a cleaned to %a for short construction",s,c)
end
return utfsub(c,1,3)
diff --git a/Master/texmf-dist/tex/context/base/publ-dat.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-dat.lua
index 36ba150009b..b9c43ac4486 100644
--- a/Master/texmf-dist/tex/context/base/publ-dat.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-dat.lua
@@ -53,7 +53,7 @@ local report_duplicates = logs.reporter("publications","duplicates")
local allocate = utilities.storage.allocate
local commands = commands
-local implement = interfaces.implement
+local implement = interfaces and interfaces.implement
publications = publications or { }
local publications = publications
@@ -383,6 +383,7 @@ function publications.new(name)
userdata = { },
used = { },
commands = { }, -- for statistical purposes
+ citestate = { },
status = {
resources = false,
userdata = false,
@@ -430,8 +431,7 @@ do
local space = S(" \t\n\r\f") -- / " "
local collapsed = space^1/" "
- ----- csletter = R("az","AZ")
- local csletter = lpegpatterns.csletter
+ local csletter = lpegpatterns.csletter or R("az","AZ")
----- command = P("\\") * Cc("btxcmd{") * (R("az","AZ")^1) * Cc("}")
----- command = P("\\") * (Carg(1) * C(R("az","AZ")^1) / function(list,c) list[c] = (list[c] or 0) + 1 return "btxcmd{" .. c .. "}" end)
@@ -907,12 +907,16 @@ do
return v
end)
+ local done = setmetatableindex("table")
+
function publications.load(specification)
- local current = datasets[specification.dataset or v_default]
+ local name = specification.dataset or v_default
+ local current = datasets[name]
local files = settings_to_array(specification.filename)
local kind = specification.kind
local dataspec = specification.specification
statistics.starttiming(publications)
+ local somedone = false
for i=1,#files do
local filetype, filename = string.splitup(files[i],"::")
if not filename then
@@ -926,7 +930,13 @@ do
if file.suffix(filename) == "" then
file.addsuffix(filename,filetype)
end
- loaders[filetype](current,filename)
+ if done[current][filename] then
+ report("file %a is already loaded in dataset %a",filename,name)
+ else
+ loaders[filetype](current,filename)
+ done[current][filename] = true
+ somedone = true
+ end
if kind then
current.loaded[current.fullname or filename] = kind
end
@@ -935,9 +945,11 @@ do
end
end
end
- local runner = enhancer.runner
- if runner then
- runner(current)
+ if somedone then
+ local runner = enhancer.runner
+ if runner then
+ runner(current)
+ end
end
statistics.stoptiming(publications)
return current
@@ -1128,18 +1140,22 @@ do
return dataset
end
- implement {
- name = "btxsavedataset",
- actions = publications.save,
- arguments = {
- {
- { "dataset" },
- { "filename" },
- { "filetype" },
- { "criterium" },
+ if implement then
+
+ implement {
+ name = "btxsavedataset",
+ actions = publications.save,
+ arguments = {
+ {
+ { "dataset" },
+ { "filename" },
+ { "filetype" },
+ { "criterium" },
+ }
}
}
- }
+
+ end
end
diff --git a/Master/texmf-dist/tex/context/base/publ-fnd.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-fnd.lua
index 32d0c11beed..32d0c11beed 100644
--- a/Master/texmf-dist/tex/context/base/publ-fnd.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-fnd.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-apa.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.lua
index 1d894f261e1..f2e7f11e107 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-apa.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.lua
@@ -31,7 +31,9 @@ local specification = {
-- Vons, Last, Jrs, First
--
author = "author", -- interpreted as name(s)
+ withauthor = "author",
editor = "author",
+ translator = "author",
artist = "author",
composer = "author",
producer = "author",
@@ -89,6 +91,7 @@ categories.article = {
"author"
},
optional = {
+ "withauthor", "translator",
"year",
"subtitle", "type", "file",
"journal", "volume", "number", "pages",
@@ -106,6 +109,7 @@ categories.magazine = {
"journal",
},
optional = {
+ "withauthor", "translator",
"subtitle", "type", "file",
"number",
"month", "day",
@@ -127,7 +131,7 @@ categories.periodical = {
"year",
},
optional = {
- "author",
+ "author", "withauthor", "translator",
"subtitle", "file",
"series", "volume", "number", "month",
"organization",
@@ -149,6 +153,7 @@ categories.standard = {
"doi", "note",
},
optional = {
+ "withauthor", "translator",
},
}
@@ -162,6 +167,7 @@ categories.book = {
},
required = { "author" },
optional = {
+ "withauthor", "translator",
"year", "month", "day",
"subtitle", "type", "file",
"editionset", "series",
@@ -183,6 +189,7 @@ categories.inbook = {
"year" ,
},
optional = {
+ "withauthor", "translator",
"subtitle", "type", "file",
"booktitle",
-- APA ignores this: "chapter",
@@ -208,6 +215,7 @@ categories.incollection = {
"year",
},
optional = {
+ "withauthor", "translator",
"subtitle", "type", "file",
"editionset", "series",
-- APA ignores this: "chapter",
@@ -229,6 +237,7 @@ categories.booklet = {
"author"
},
optional = {
+ "withauthor", "translator",
"publisher",
"year", "month",
"subtitle", "type", "file",
@@ -251,6 +260,7 @@ categories.proceedings = {
"year"
},
optional = {
+ "withauthor", "translator",
"publisher",
"subtitle", "file",
"editionset", "series",
@@ -266,6 +276,7 @@ categories.inproceedings = {
sets = categories.incollection.sets,
required = categories.incollection.required,
optional = {
+ "withauthor", "translator",
"subtitle", "type", "file",
"month",
"edition", "series",
@@ -290,6 +301,7 @@ categories.thesis = {
"type"
},
optional = {
+ "withauthor", "translator",
"subtitle", "file",
"month",
"address",
@@ -306,6 +318,7 @@ categories.mastersthesis = {
"year"
},
optional = {
+ "withauthor", "translator",
"type",
"subtitle", "file",
"month",
@@ -331,6 +344,7 @@ categories.techreport = {
"year"
},
optional = {
+ "withauthor", "translator",
"publisher",
"address",
"subtitle", "file",
@@ -354,6 +368,7 @@ categories.manual = {
},
optional = {
"author", "publisher",
+ "withauthor", "translator",
"address",
"subtitle", "file",
"editionset", "month", "year",
@@ -382,6 +397,7 @@ categories.patent = {
"type",
--check this: "language",
"author", "publisher",
+ "withauthor", "translator",
"title", "subtitle", "file",
"address",
"day", "month",
@@ -401,6 +417,7 @@ categories.unpublished = {
"note"
},
optional = {
+ "withauthor", "translator",
"subtitle", "file",
"year", "month",
"doi"
@@ -419,7 +436,7 @@ categories.electronic = {
optional = {
"subtitle", "type", "file",
"year", "month",
- "author",
+ "author", "withauthor", "translator",
"address",
"organization",
"howpublished",
@@ -441,6 +458,7 @@ categories.film = {
"address", "publisher", -- aka studio
},
optional = {
+ "withauthor", "translator",
"type",
"note",
"doi",
@@ -460,6 +478,7 @@ categories.music = {
"address", "publisher", -- aka label
},
optional = {
+ "withauthor", "translator",
"type",
"note",
"doi",
@@ -476,7 +495,7 @@ categories.misc = {
-- nothing is really important here
},
optional = {
- "author",
+ "author", "withauthor", "translator",
"title", "subtitle", "file",
"year", "month",
"howpublished",
@@ -496,6 +515,7 @@ categories.other = {
"year"
},
optional = {
+ "withauthor", "translator",
"subtitle", "file",
"doi", "note",
},
@@ -513,6 +533,7 @@ categories.literal = {
"text"
},
optional = {
+ "withauthor", "translator",
"doi", "note"
},
virtual = false,
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-apa.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.mkvi
index 85e0ebd5f39..5600b572238 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-apa.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-apa.mkvi
@@ -73,10 +73,19 @@
[apa:\s!list]
\definebtx
+ [apa:\s!list:withauthor]
+ [apa:\s!list:author]
+
+\definebtx
[apa:\s!list:editor]
[apa:\s!list:author]
\definebtx
+ [apa:\s!list:translator]
+ [apa:\s!list:author]
+ [\c!authorconversion=normalshort]
+
+\definebtx
[apa:\s!list:suffix]
[apa:\s!list]
@@ -462,6 +471,7 @@
apa:Volume={Vol.},
apa:Volumes={Vols.},
apa:others={et al.},
+ apa:with=with,
apa:page={p.},
apa:pages={pp.},
apa:nd={n.d.}, % no date
@@ -477,7 +487,7 @@
apa:Directors=Directors,
apa:Recordedby={Recorded by},
apa:Author=Author,
- apa:Translator={Trans.}, % Translator(s) (not used?)
+ apa:Translator={Trans.}, % Translator(s)
apa:Advanced={Advanced online publication},
apa:Retrieved={Available from}, % {Retrieved from},
apa:In=In]
@@ -492,6 +502,7 @@
apa:Volume={Vol.},
apa:Volumes={Vols.},
apa:others={et al.},
+ apa:with=met,
apa:page={p.},
apa:pages={pp.},
apa:nd={g.d.} % geen datum
@@ -522,6 +533,7 @@
apa:Volume=Volume,
apa:Volumes=Volumes,
apa:others={et al.},
+ apa:with=avec,
apa:page={p.},
apa:pages={pp.},
apa:nd={s.d.} % sans date
@@ -552,6 +564,7 @@
apa:Volume=Band, % Bd.
apa:Volumes={Bände},
apa:others={et al.},
+ apa:with=mit,
apa:page={S.},
apa:pages={S.},
apa:nd={o.D.}, % ohne Datum (mostly: o.J. / ohne Jahr)
@@ -584,6 +597,7 @@
apa:Volume={Vol.}, % Volume
apa:Volumes={Vol.}, % Volumi
apa:others={et al.},
+ apa:with=con,
apa:page={p.},
apa:pages={pp.},
apa:nd={s.d.}, % senza data
@@ -614,6 +628,7 @@
apa:Volume={Vol.}, % Volumen
apa:Volumes={Vols.}, % Volúmenes
apa:others={et al.},
+ apa:with=con,
apa:page={p.},
apa:pages={pp.},
apa:nd={s.f.}, % sin fecha
@@ -657,7 +672,7 @@
\texdefinition {\s!btx:\s!cite:inject} {
\currentbtxsecond
}
- \fi
+ \fi
\btxflushsuffix
\fi
%\btxparameter\c!right
@@ -731,7 +746,7 @@
% #title can be title or booktitle
-\starttexdefinition btx:apa:translated-title #title
+\starttexdefinition unexpanded btx:apa:translated-title #title
\ifx\currentbtxlanguage\empty
% no need for an extra
\else\ifx\mainbtxlanguage\currentbtxlanguage
@@ -750,8 +765,8 @@
\fi\fi
\stoptexdefinition
-\starttexdefinition btx:apa:composed-title #title
- \btxstartstyleandcolor [apa:\s!list:title:\currentbtxcategory]
+\starttexdefinition unexpanded btx:apa:composed-title #title
+ \btxstartstyleandcolor[apa:\s!list:title:\currentbtxcategory]
\begingroup
\language[\currentbtxlanguage]
\btxusecommand [apa:\s!list:title:\currentbtxcategory] {
@@ -769,7 +784,7 @@
\btxstopstyleandcolor
\stoptexdefinition
-\starttexdefinition btx:apa:title
+\starttexdefinition unexpanded btx:apa:title
\setmode{btx:apa:title-placed}
% we make the title active, opening "file"
\btxdoifelse {file} {
@@ -782,12 +797,19 @@
\texdefinition{btx:apa:composed-title}{title}
}
\btxdoif {title} {
+ \btxdoif {translator} {
+ \btxleftparenthesis
+ \btxflush{translator}
+ \btxcomma
+ \btxlabeltext{apa:Translator}
+ \btxrightparenthesis
+ }
\btxperiod
% TODO: this period may NOT be wanted, as in: Title (2nd ed.).
}
\stoptexdefinition
-\starttexdefinition btx:apa:title-if-not-placed
+\starttexdefinition unexpanded btx:apa:title-if-not-placed
\doifelsemode {btx:apa:title-placed} {
\resetmode{btx:apa:title-placed}
} {
@@ -798,7 +820,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:suffixedyear
+\starttexdefinition unexpanded btx:apa:suffixedyear
\btxdoifelse {year} {
\btxflush{year}
\btxflushsuffix
@@ -815,7 +837,7 @@
% #author may be author(set) or editor
-\starttexdefinition btx:apa:author-or-editor #author
+\starttexdefinition unexpanded btx:apa:author-or-editor #author
\btxdoif {#author} {
\btxflush{#author}
\doifelse {\btxfoundname{#author}} {editor} {
@@ -825,7 +847,7 @@
} {
\btxlabeltext{apa:Editors}
}
- \btxrightparenthesisperiod
+ \btxrightparenthesis
} {
\doifelse {\btxfoundname{#author}} {producer} {
\btxleftparenthesis
@@ -835,7 +857,7 @@
\btxlabeltext{apa:Producers}
}
\btxrightparenthesis
- \btxdoifelse {director} {
+ \btxdoif {director} {
\removeunwantedspaces
\btxparameter{\c!separator:names:3}
\btxflush{director}
@@ -845,9 +867,7 @@
} {
\btxlabeltext{apa:Directors}
}
- \btxrightparenthesisperiod
- } {
- \btxperiod
+ \btxrightparenthesis
}
} {
\doif {\btxfoundname{#author}} {director} {
@@ -857,14 +877,21 @@
} {
\btxlabeltext{apa:Directors}
}
- \btxrightparenthesisperiod
+ \btxrightparenthesis
}
}
}
+ \btxdoif {withauthor} {
+ \btxleftparenthesis
+ \btxlabeltext{apa:with}
+ \btxspace
+ \btxflush{withauthor}
+ \btxrightparenthesis
+ }
}
\stoptexdefinition
-\starttexdefinition btx:apa:authoryear
+\starttexdefinition unexpanded btx:apa:authoryear
% we make the authoryear active, pointing to the citation
\texdefinition{btx:format:inject}
{internal(\currentbtxinternal)}
@@ -889,7 +916,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:editor-in
+\starttexdefinition unexpanded btx:apa:editor-in
\btxdoif {booktitle} {
\btxlabeltext{apa:In}
\doifnot {\btxfoundname{author}} {editor} {
@@ -897,7 +924,7 @@
\texdefinition{btx:apa:author-or-editor} {editor}
}
\btxspace
- \texdefinition{btx:apa:composed-title} {booktitle}
+ \texdefinition{btx:apa:composed-title}{booktitle}
\btxperiod
}
\stoptexdefinition
@@ -905,7 +932,7 @@
% TODO: The title is terminated with period. However,
% we probably don't want this before the parenthesis.
-\starttexdefinition btx:apa:leftparenthesis-or-comma
+\starttexdefinition unexpanded btx:apa:leftparenthesis-or-comma
\doifelsemode {btx:apa:editionset-is-empty} {
\btxleftparenthesis
\resetmode{btx:apa:editionset-is-empty}
@@ -914,7 +941,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:editionset
+\starttexdefinition unexpanded btx:apa:editionset
\setmode{btx:apa:editionset-is-empty}
\doif {\currentbtxcategory} {techreport} {
\texdefinition{btx:apa:leftparenthesis-or-comma}
@@ -963,7 +990,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:journal
+\starttexdefinition unexpanded btx:apa:journal
\btxstartstyleandcolor[apa:\s!list:journal]
\btxusecommand [apa:\s!list:journal] {
\btxflush{journal}
@@ -971,7 +998,7 @@
\btxstopstyleandcolor
\stoptexdefinition
-\starttexdefinition btx:apa:volume
+\starttexdefinition unexpanded btx:apa:volume
\btxstartstyleandcolor[apa:\s!list:volume]
\btxflush{volume}
\btxstopstyleandcolor
@@ -979,7 +1006,7 @@
% this could be simplified!
-\starttexdefinition btx:apa:journal-volume-number-pages
+\starttexdefinition unexpanded btx:apa:journal-volume-number-pages
\btxdoif {journal} {
\btxspace
\texdefinition{btx:apa:journal}
@@ -1028,7 +1055,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:wherefrom-publisher
+\starttexdefinition unexpanded btx:apa:wherefrom-publisher
\btxdoifelse {address} {
\btxflush{address}
\btxdoif {country} {
@@ -1062,7 +1089,7 @@
% use \btxentry here?
-\starttexdefinition btx:apa:url
+\starttexdefinition unexpanded btx:apa:url
\btxspace
\btxlabeltext{apa:Retrieved}
\btxspace
@@ -1082,7 +1109,7 @@
% use \btxentry here?
-\starttexdefinition btx:apa:doi
+\starttexdefinition unexpanded btx:apa:doi
\btxspace
\begingroup
\setbreakpoints[doi]
@@ -1098,7 +1125,7 @@
\endgroup
\stoptexdefinition
-\starttexdefinition btx:apa:note
+\starttexdefinition unexpanded btx:apa:note
\btxdoif {note} {
\btxleftparenthesis
\btxflush{note}
@@ -1106,7 +1133,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:apa:url-doi-note
+\starttexdefinition unexpanded btx:apa:url-doi-note
\doif {\btxfoundname{doi}} {url} {
\texdefinition{btx:apa:url}
}
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-aps.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.lua
index c15ffe918e9..c15ffe918e9 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-aps.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-aps.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.mkvi
index 71b0dc1855c..6742457146b 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-aps.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-aps.mkvi
@@ -631,7 +631,7 @@
%D returned. In lua syntax, it can be understood as
%D author or editor or publisher or title or ""
-\starttexdefinition btx:aps:composed-title #title
+\starttexdefinition unexpanded btx:aps:composed-title #title
\btxstartstyleandcolor [aps:\s!list:title:\currentbtxcategory]
\begingroup
\language[\currentbtxlanguage]
@@ -646,7 +646,7 @@
\btxstopstyleandcolor
\stoptexdefinition
-\starttexdefinition btx:aps:title
+\starttexdefinition unexpanded btx:aps:title
\btxdoif {title} {
% we make the title active, opening file
\btxdoifelse {file} {
@@ -662,13 +662,13 @@
}
\stoptexdefinition
-\starttexdefinition btx:aps:optional-title
+\starttexdefinition unexpanded btx:aps:optional-title
\doif{\btxparameter{\c!title}}\v!yes {
\texdefinition {btx:aps:title}
}
\stoptexdefinition
-\starttexdefinition btx:aps:year
+\starttexdefinition unexpanded btx:aps:year
\btxdoifelse {year} {
\btxflush{year}
} {
@@ -678,7 +678,7 @@
% #author may be author(set) or editor
-\starttexdefinition btx:aps:author-or-editor #author
+\starttexdefinition unexpanded btx:aps:author-or-editor #author
\btxdoif {#author} {
\btxflush{#author}
\doifelse {\btxfoundname{#author}} {editor} {
@@ -699,12 +699,12 @@
}
\stoptexdefinition
-\starttexdefinition btx:aps:author
+\starttexdefinition unexpanded btx:aps:author
\btxflush{author}
\btxcomma
\stoptexdefinition
-\starttexdefinition btx:aps:editor-in
+\starttexdefinition unexpanded btx:aps:editor-in
\btxdoif {booktitle} {
\btxlabeltext{aps:In}
\doifnot {\btxfoundname{author}} {editor} {
@@ -712,12 +712,12 @@
\texdefinition{btx:aps:author-or-editor} {editor}
}
\btxspace
- \texdefinition{btx:aps:composed-title} {booktitle}
+ \texdefinition{btx:aps:composed-title}{booktitle}
\btxcomma
}
\stoptexdefinition
-\starttexdefinition btx:aps:editionset
+\starttexdefinition unexpanded btx:aps:editionset
\doif {\currentbtxcategory} {techreport} {
\btxdoifelse {type} {
\btxusecommand [\currentbtx:type] {
@@ -762,7 +762,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:aps:journal-volume-year
+\starttexdefinition unexpanded btx:aps:journal-volume-year
\btxdoif {journal} {
\btxstartstyleandcolor [aps:\s!list:journal]
% expandedjournal abbreviatedjournal
@@ -795,7 +795,7 @@
\btxrightparenthesis
\stoptexdefinition
-\starttexdefinition btx:aps:publisher-wherefrom-year
+\starttexdefinition unexpanded btx:aps:publisher-wherefrom-year
\removeunwantedspaces
\removepunctuation
\btxleftparenthesis
@@ -819,7 +819,7 @@
\btxrightparenthesis
\stoptexdefinition
-\starttexdefinition btx:aps:note
+\starttexdefinition unexpanded btx:aps:note
\btxperiod
\btxdoif {note} {
\btxleftparenthesis
@@ -828,7 +828,7 @@
}
\stoptexdefinition
-\starttexdefinition btx:aps:doi-url #text
+\starttexdefinition unexpanded btx:aps:doi-url #text
\ifconditional\btxinteractive
\btxdoifelse {doi} {
\goto {#text} [url(http://dx.doi.org/\btxflush{doi})]
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-author.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-author.mkvi
index 7529c7aa970..b524331867c 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-author.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-author.mkvi
@@ -23,7 +23,7 @@
% \currentbtxsurnames : \btxauthorfield{surnames}
% \currentbtxjuniors : \btxauthorfield{juniors}
-\starttexdefinition \s!btx:\s!cite:\s!author:\s!de
+\starttexdefinition unexpanded \s!btx:\s!cite:\s!author:\s!de
\ifx\currentbtxlanguage\s!de
\setmode{\s!btx:\s!de}
\fi
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-cite.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-cite.mkvi
index 7ce9ea0da6e..cb1c46fe480 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-cite.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-cite.mkvi
@@ -13,7 +13,7 @@
\unprotect
-\starttexdefinition btx:cite:inject #content
+\starttexdefinition unexpanded btx:cite:inject #content
\ifconditional\btxinteractive
\ifx\currentbtxinternal\empty
#content
@@ -29,7 +29,7 @@
\fi
\stoptexdefinition
-\starttexdefinition btx:cite:checkconcat
+\starttexdefinition unexpanded btx:cite:checkconcat
\ifnum\currentbtxcount>\zerocount
\let\currentbtxinternal\empty
\let\currentbtxbacklink\empty
@@ -66,7 +66,7 @@
{\tt <\currentbtxreference>}
\stopsetups
-\starttexdefinition btx:cite:concat
+\starttexdefinition unexpanded btx:cite:concat
\btxparameter{\c!separator:\number\currentbtxconcat}
\stoptexdefinition
@@ -143,7 +143,6 @@
\currentbtxrighttext
\stopsetups
-
\startsetups btx:cite:range
\texdefinition{\s!btx:\s!cite:concat}
\currentbtxlefttext
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-commands.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-commands.mkvi
index 14e2dbae12d..14e2dbae12d 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-commands.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-commands.mkvi
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-default.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.lua
index 61b08f30cef..61b08f30cef 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-default.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-default.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.mkvi
index 6a15712ade4..f5c99ac1817 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-default.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-default.mkvi
@@ -141,7 +141,7 @@
[\s!default:\s!list:title:article]
[\s!default:\s!list:title]
[\c!style=, % journal is set in italics
- \c!command={\quotation\Word}]
+ \c!command=\quotation] % alan, you can't do \quotation\Word
\definebtx
[\s!default:\s!list:title:book]
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-definitions.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-definitions.mkvi
index 8dfa931b37a..295586f60fb 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-definitions.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-definitions.mkvi
@@ -27,7 +27,7 @@
\btxfield{short}
\stopxmlsetups
-\starttexdefinition btx:format:inject #link #content
+\starttexdefinition unexpanded btx:format:inject #link #content
\ifx\currentbtxinternal\empty
#content
\else\ifconditional\btxinteractive
@@ -86,7 +86,7 @@
% macros:
-\starttexdefinition btx:style:italic #content
+\starttexdefinition unexpanded btx:style:italic #content
\dontleavehmode
\begingroup
\it
@@ -95,7 +95,7 @@
\endgroup
\stoptexdefinition
-\starttexdefinition btx:style:bold #content
+\starttexdefinition unexpanded btx:style:bold #content
\dontleavehmode
\begingroup
\bf
@@ -103,14 +103,14 @@
\endgroup
\stoptexdefinition
-\starttexdefinition btx:style:quote #content
+\starttexdefinition unexpanded btx:style:quote #content
\dontleavehmode
\startquote
#content
\stopquote
\stoptexdefinition
-\starttexdefinition btx:style #style #content
+\starttexdefinition unexpanded btx:style #style #content
\doifelsedefined {btx:style:#style} {
\texdefinition{btx:style:#style} {
#content
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-list.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-list.mkvi
index 23256de333c..68ccaef01f1 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-list.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-list.mkvi
@@ -13,7 +13,7 @@
\unprotect
-\starttexdefinition btx:list:inject #content
+\starttexdefinition unexpanded btx:list:inject #content
\ifconditional\btxinteractive
\ifx\currentbtxinternal\empty
#content
@@ -29,7 +29,7 @@
\fi
\stoptexdefinition
-\starttexdefinition btx:list:helpers:concat
+\starttexdefinition unexpanded btx:list:helpers:concat
\space
\stoptexdefinition
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-page.mkvi b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-page.mkvi
index 2d9040b105a..2d9040b105a 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-page.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-page.mkvi
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-replacements.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-replacements.lua
index e0ac249fc0d..e0ac249fc0d 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-replacements.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-replacements.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-imp-test.bib b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-test.bib
index 0d81b49ff08..0d81b49ff08 100644
--- a/Master/texmf-dist/tex/context/base/publ-imp-test.bib
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-imp-test.bib
diff --git a/Master/texmf-dist/tex/context/base/publ-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-ini.lua
index 34eeaec1882..c30f780f188 100644
--- a/Master/texmf-dist/tex/context/base/publ-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-ini.lua
@@ -72,6 +72,9 @@ local v_yes = variables.yes
local v_no = variables.no
local v_all = variables.all
local v_always = variables.always
+local v_hidden = variables.hidden
+local v_list = variables.list
+local v_text = variables.text
local v_doublesided = variables.doublesided
local v_default = variables.default
local v_dataset = variables.dataset
@@ -163,6 +166,8 @@ local ctx_btxsetnoflistentries = context.btxsetnoflistentries
local ctx_btxsetcurrentlistentry = context.btxsetcurrentlistentry
local ctx_btxsetcurrentlistindex = context.btxsetcurrentlistindex
+local trialtypesetting = context.trialtypesetting
+
languages.data = languages.data or { }
local data = languages.data
@@ -479,7 +484,7 @@ local findallused do
local reported = { }
local finder = publications.finder
- findallused = function(dataset,reference,internal)
+ findallused = function(dataset,reference,internal,forcethem)
local current = datasets[dataset]
local finder = publications.finder -- for the moment, not yet in all betas
local find = finder and finder(current,reference)
@@ -490,10 +495,20 @@ local findallused do
local luadata = current.luadata
local details = current.details
local ordered = current.ordered
- if set then
+ if allused then
local registered = { }
local function register(tag)
- local entry = allused[tag]
+ local entry = forcethem and luadata[tag]
+ if entry then
+ if registered[tag] then
+ return
+ end
+ okay[#okay+1] = entry
+ -- todo[tag] = true
+ registered[tag] = true
+ return tag
+ end
+ entry = allused[tag]
if not entry then
local parent = details[tag].parent
if parent then
@@ -632,7 +647,15 @@ end
local concatstate = publications.concatstate
-local tobemarked = nil
+-- hidden : mark for list, don't show in text
+-- list : mark for list, show in text only when in list
+-- text : not to list, show in text
+-- always : mark for list, show in text
+
+local marked_todo = false -- keeps track or not yet flushed
+local marked_dataset = false
+local marked_list = false -- the sequential list (we flush in order, not by unordered hash)
+local marked_method = false
local function marknocite(dataset,tag,nofcitations,setup)
ctx_btxstartcite()
@@ -647,10 +670,10 @@ local function marknocite(dataset,tag,nofcitations,setup)
end
local function markcite(dataset,tag,flush)
- if not tobemarked then
+ if not marked_todo then
return 0
end
- local citation = tobemarked[tag]
+ local citation = marked_todo[tag]
if not citation then
return 0
end
@@ -662,39 +685,35 @@ local function markcite(dataset,tag,flush)
if flush then
marknocite(dataset,tag,nofcitations,"nocite")
end
- tobemarked[tag] = nofcitations
+ marked_todo[tag] = nofcitations -- signal that it's marked
return nofcitations
else
return citation
end
end
-local marked_dataset = nil
-local marked_list = nil
-
-local function flushmarked(dataset,list,todo)
- marked_dataset = dataset
- marked_list = list
-end
-
local function btxflushmarked()
- if marked_list and tobemarked then
+ if marked_list and marked_todo then
for i=1,#marked_list do
-- keep order
local tag = marked_list[i]
- local tbm = tobemarked[tag]
+ local tbm = marked_todo[tag]
if tbm == true or not tbm then
nofcitations = nofcitations + 1
- marknocite(marked_dataset,tag,nofcitations,tbm and "nocite" or "invalid")
+ local setup = (tbm or marked_method == v_always) and "nocite" or "invalid"
+ marknocite(marked_dataset,tag,nofcitations,setup)
if trace_cite then
- report_cite("mark, dataset: %s, tag: %s, number: %s, state: %s",marked_dataset,tag,nofcitations,tbm and "unset" or "invalid")
+ report_cite("mark, dataset: %s, tag: %s, number: %s, setup: %s",marked_dataset,tag,nofcitations,setup)
end
+ else
+ -- a number signaling being marked
end
end
end
- tobemarked = nil
- marked_dataset = nil
- marked_list = nil
+ marked_todo = false
+ marked_dataset = false
+ marked_list = false
+ marked_method = false
end
implement { name = "btxflushmarked", actions = btxflushmarked }
@@ -1062,7 +1081,7 @@ do
end
-- we have two suffixes: author (dependent of type) and short
local kind = dataset.authorconversion or "name"
- local field = "author" -- currently only author
+ local fields = { "author", "editor" } -- will be entry in data definition
local shorts = { }
local authors = { }
local hasher = publications.authorhashers[kind]
@@ -1082,36 +1101,42 @@ do
if btxspc then
-- we could act on the 3rd arg returned by getcasted but in general any string will do
-- so we deal with it in the author hashers ... maybe some day ...
- local author = getcasted(dataset,tag,field,specifications[btxspc])
- local kind = type(author)
- if kind == "table" or kind == "string" then
- if u then
- u = listentry.entries.text -- hm
- else
- u = "0"
- end
- local year = tonumber(entry.year) or 9999
- local data = { tag, year, u, i }
- -- authors
- local hash = hasher(author)
- local found = authors[hash]
- if not found then
- authors[hash] = { data }
- else
- found[#found+1] = data
- end
- -- shorts
- local hash = shorter(author)
- local short = f_short(hash,mod(year,100))
- local found = shorts[short]
- if not found then
- shorts[short] = { data }
- else
- found[#found+1] = data
+ local done = false
+ for i=1,#fields do
+ local field = fields[i]
+ local author = getcasted(dataset,tag,field,specifications[btxspc])
+ local kind = type(author)
+ if kind == "table" or kind == "string" then
+ if u then
+ u = listentry.entries.text -- hm
+ else
+ u = "0"
+ end
+ local year = tonumber(entry.year) or 9999
+ local data = { tag, year, u, i }
+ -- authors
+ local hash = hasher(author)
+ local found = authors[hash]
+ if not found then
+ authors[hash] = { data }
+ else
+ found[#found+1] = data
+ end
+ -- shorts
+ local hash = shorter(author)
+ local short = f_short(hash,mod(year,100))
+ local found = shorts[short]
+ if not found then
+ shorts[short] = { data }
+ else
+ found[#found+1] = data
+ end
+ done = true
+ break
end
- --
- else
- report("author typecast expected for field %a",field)
+ end
+ if not done then
+ report("unable to create short for %a, needs one of [%,t]",tag,fields)
end
else
--- no spec so let's forget about it
@@ -1144,7 +1169,7 @@ do
local entry = luadata[tag]
local year = entry.year
detail[key] = hash
- if year ~= lastyear then
+ if not year or year ~= lastyear then
lastyear = year
suffix = 1
else
@@ -2286,14 +2311,17 @@ do
end
local function btxhandlenocite(specification)
+ if trialtypesetting() then
+ return
+ end
local dataset = specification.dataset or v_default
local reference = specification.reference
if not reference or reference == "" then
return
end
--
- local markentry = specification.markentry ~= false
- local internal = specification.internal or ""
+ local method = specification.method
+ local internal = specification.internal or ""
--
local prefix, rest = lpegmatch(prefixsplitter,reference)
if rest then
@@ -2309,10 +2337,14 @@ do
--
local found, todo, list = findallused(dataset,reference,internal)
--
- tobemarked = markentry and todo
- if found and tobemarked then
- flushmarked(dataset,list)
+ if todo then
+ marked_todo = todo
+ marked_dataset = dataset
+ marked_list = list
+ marked_method = method
btxflushmarked() -- here (could also be done in caller)
+ else
+ marked_todo = false
end
end
@@ -2323,7 +2355,7 @@ do
{
{ "dataset" },
{ "reference" },
- { "markentry", "boolean" },
+ { "method" },
{ "variant" },
{ "sorttype" },
{ "compress" },
@@ -2342,9 +2374,9 @@ do
actions = btxhandlenocite,
arguments = {
{
- { "dataset" },
- { "reference" },
- { "markentry", "boolean" },
+ { "dataset" },
+ { "reference" },
+ { "method" },
}
}
}
@@ -2470,12 +2502,15 @@ do
local getter = specification.getter
local setter = specification.setter
local compressor = specification.compressor
+ local method = specification.method
--
local reference = publications.parenttag(dataset,reference)
--
- local found, todo, list = findallused(dataset,reference,internal)
- tobemarked = specification.markentry and todo
+ local found, todo, list = findallused(dataset,reference,internal,method == v_text or method == v_always) -- also when not in list
--
+-- inspect(found)
+-- inspect(todo)
+-- inspect(list)
if not found or #found == 0 then
report("no entry %a found in dataset %a",reference,dataset)
elseif not setup then
@@ -2487,23 +2522,26 @@ do
local source = { }
local luadata = datasets[dataset].luadata
for i=1,#found do
- local entry = found[i]
--- inspect(entry)
- local tag = entry.userdata.btxref
- local ldata = luadata[tag]
- local data = {
- internal = entry.references.internal,
- language = ldata.language,
- dataset = dataset,
- tag = tag,
- -- combis = entry.userdata.btxcom,
- -- luadata = ldata,
- }
- setter(data,dataset,tag,entry)
- if type(data) == "table" then
- source[#source+1] = data
- else
- report("error in cite rendering %a",setup or "?")
+ local entry = found[i]
+ local userdata = entry.userdata
+ local references = entry.references
+ local tag = userdata and userdata.btxref or entry.tag -- no need for userdata
+ if tag then
+ local ldata = luadata[tag]
+ local data = {
+ internal = references and references.internal,
+ language = ldata.language,
+ dataset = dataset,
+ tag = tag,
+ -- combis = entry.userdata.btxcom,
+ -- luadata = ldata,
+ }
+ setter(data,dataset,tag,entry)
+ if type(data) == "table" then
+ source[#source+1] = data
+ else
+ report("error in cite rendering %a",setup or "?")
+ end
end
end
@@ -2530,14 +2568,16 @@ do
if before then local text = before [i] ; if text and text ~= "" then ctx_btxsetbefore (text) end end
if after then local text = after [i] ; if text and text ~= "" then ctx_btxsetafter (text) end end
--
- ctx_btxsetbacklink(currentcitation)
- local bl = listtocite[currentcitation]
- if bl then
- -- we refer to a coming list entry
- ctx_btxsetinternal(bl.references.internal or "")
- else
- -- we refer to a previous list entry
- ctx_btxsetinternal(entry.internal or "")
+ if method ~= v_text then
+ ctx_btxsetbacklink(currentcitation)
+ local bl = listtocite[currentcitation]
+ if bl then
+ -- we refer to a coming list entry
+ ctx_btxsetinternal(bl.references.internal or "")
+ else
+ -- we refer to a previous list entry
+ ctx_btxsetinternal(entry.internal or "")
+ end
end
local language = entry.language
if language then
@@ -2591,9 +2631,16 @@ do
end
end
end
- if tobemarked then
- flushmarked(dataset,list)
+ if trialtypesetting() then
+ marked_todo = false
+ elseif method ~= v_text then
+ marked_todo = todo
+ marked_dataset = dataset
+ marked_list = list
+ marked_method = method
btxflushmarked() -- here (could also be done in caller)
+ else
+ marked_todo = false
end
end
diff --git a/Master/texmf-dist/tex/context/base/publ-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/publ-ini.mkiv
index 41fbfa5a1a4..cf51b831a81 100644
--- a/Master/texmf-dist/tex/context/base/publ-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-ini.mkiv
@@ -165,7 +165,7 @@
\unexpanded\def\btxcheckdefine#1{\doifelsecommandhandler\??btx{#1}\gobbleoneargument{\btx_check_chain{define}{#1}}} % {#2}
\unexpanded\def\btxchecksetup #1{\doifelsecommandhandler\??btx{#1}\gobbleoneargument{\btx_check_chain {setup}{#1}}} % {#2}
-% fpr the moment experimental:
+% for the moment experimental:
\unexpanded\def\btxenableautodefine
{\prependtoks
@@ -350,7 +350,7 @@
\publ_command_yes{#1}}
\unexpanded\def\definebtxcommand#1% {body} #1..#n{body}
- {\setuvalue{\??btxcommand\strippedcsname#1}}%
+ {\setuvalue{\??btxcommand\csstring#1}}%
% tracing
@@ -475,10 +475,10 @@
\let\currentbtxbacklink \empty
\let\currentbtxbacktrace\empty
\let\currentbtxlanguage \empty
- \let\currentbtxtag \empty
\let\currentbtxsuffix \empty
- \let\currentbtxnumber \empty
- \let\currentbtxdataset \empty}
+ %\let\currentbtxdataset \empty % will always be set
+ %\let\currentbtxtag \empty % will always be set
+ \let\currentbtxnumber \empty}
\unexpanded\def\btx_reset_cite % check for less .. not all resets needed when we're grouped (only subcites)
{\let \currentbtxfirst \empty
@@ -492,8 +492,8 @@
\let \currentbtxbacklink \empty
\let \currentbtxbacktrace \empty % not used here
\let \currentbtxlanguage \empty
- \let \currentbtxdataset \empty
- \let \currentbtxtag \empty
+ %\let \currentbtxdataset \empty % will always be set, beware of local reset ~
+ %\let \currentbtxtag \empty % will always be set, beware of local reset ~
\let \currentbtxnumber \empty
\setconstant\currentbtxoverflow \zerocount
\setconstant\currentbtxconcat \zerocount
@@ -1203,6 +1203,13 @@
% these need to be sort of protected:
+% methods:
+%
+% hidden : mark for list, don't show in text
+% list : mark for list, show in text only when in list
+% text : not to list, show in text
+% always : mark for list, show in text
+
\let\p_publ_cite_before \empty
\let\p_publ_cite_after \empty
\let\p_publ_cite_lefttext \empty
@@ -1279,6 +1286,7 @@
\newconditional\btxcitecompress
\let\currentbtxreference\empty
+\let\currentbtxcitemethod\v!hidden
\def\publ_cite_variant
{\begingroup
@@ -1295,7 +1303,7 @@
{\clf_btxhandlecite
dataset {\currentbtxdataset}%
reference {\currentbtxreference}%
- markentry \iftrialtypesetting\s!false\else\s!true\fi\space
+ method {\currentbtxcitemethod}%
variant {\currentbtxcitealternative}%
sorttype {\btxparameter\c!sorttype}%
compress {\btxparameter\c!compress}%
@@ -1306,7 +1314,9 @@
before {\p_publ_cite_before}%
after {\p_publ_cite_after}%
\relax
- \clf_btxflushmarked} % maybe: \iftrialtypesetting\else ... \fi
+ \iftrialtypesetting\else
+ %\clf_btxflushmarked
+ \fi}
\let\dobtxcitevariantblob\publ_cite_handle_variant_blob % command can use it via lua
@@ -1320,9 +1330,23 @@
\btxparameter\c!right
\endgroup}
-\unexpanded\def\btxcitation
+\unexpanded\def\btxlistcitation
+ {\dontleavehmode
+ \begingroup
+ \let\currentbtxcitemethod\v!list
+ \dodoubleempty\publ_citation}
+
+\unexpanded\def\btxtextcitation
+ {\dontleavehmode
+ \begingroup
+ \let\btxcitereference\relax % a bit of a hack but ok
+ \let\currentbtxcitemethod\v!text
+ \dodoubleempty\publ_citation}
+
+\unexpanded\def\btxalwayscitation
{\dontleavehmode
\begingroup
+ \let\currentbtxcitemethod\v!always
\dodoubleempty\publ_citation}
\def\publ_citation[#1][#2]% could be made more efficient but not now
@@ -1332,19 +1356,20 @@
\publ_cite_tags_indeed{#1}%
\fi}
-\unexpanded\def\btxnocitation
- {\dosingleempty\publ_cite_no}
+\unexpanded\def\btxhiddencitation
+ {\dosingleempty\publ_cite_hidden}
-\unexpanded\def\publ_cite_no[#1]%
+\unexpanded\def\publ_cite_hidden[#1]%
{\iftrialtypesetting \else
\begingroup
+ \let\currentbtxcitemethod\v!hidden
\edef\currentbtxreference{#1}%
\clf_btxhandlenocite
+ method {\currentbtxcitemethod}%
dataset {\currentbtxdataset}%
reference {\currentbtxreference}%
- markentry true%
\relax
- % \clf_btxflushmarked
+ %\clf_btxflushmarked
\endgroup
\fi}
@@ -1353,16 +1378,27 @@
%D Compatibility:
-\let\cite \btxcitation
-\let\citation \btxcitation
-\let\nocite \btxnocitation
-\let\nocitation\btxnocitation
+\let\hiddencitation\btxhiddencitation \let\hiddencite\hiddencitation
+\let\listcitation \btxlistcitation \let\listcite \listcitation
+\let\textcitation \btxtextcitation \let\textcite \textcitation
+\let\alwayscitation\btxalwayscitation \let\alwayscite\alwayscitation
+
+\unexpanded\def\citation {\doifelsenextoptionalcs\btxlistcitation \btxdirectlistcite}
+\unexpanded\def\nocitation{\doifelsenextoptionalcs\btxhiddencitation\btxdirecthiddencite}
-\unexpanded\def\cite {\doifelsenextoptionalcs\btxcitation \btxdirectcite}
-\unexpanded\def\nocite{\doifelsenextoptionalcs\btxnocitation\btxdirectnocite}
+\let\cite \citation
+\let\nocite\nocitation
-\unexpanded\def\btxdirectcite #1{\btxcitation [#1]\relax} % no optional arguments
-\unexpanded\def\btxdirectnocite#1{\btxnocitation[#1]\relax} % no optional arguments
+\unexpanded\def\publ_entry_citation {\doifelsenextoptionalcs\btxlistcitation \btxdirectlistcite}
+\unexpanded\def\publ_entry_nocitation{\doifelsenextoptionalcs\btxhiddencitation\btxdirecthiddencite}
+
+\appendtoks
+ \let\cite \publ_entry_citation
+ \let\nocite\publ_entry_nocitation
+\to \everybtxlistrendering
+
+\unexpanded\def\btxdirectlistcite #1{\btxlistcitation [#1]\relax} % no optional arguments
+\unexpanded\def\btxdirecthiddencite#1{\btxhiddencitation[#1]\relax} % no optional arguments
%D Setup helpers, beware, we need to wrap this .. now we need to know
%D how setups are implemented.
@@ -1412,42 +1448,47 @@
\unexpanded\def\publ_fast_btx_setup_chain_inbetween
{\allowbreak->\allowbreak}
+\unexpanded\def\publ_fast_btx_setup_colon_inbetween
+ {\allowbreak:\allowbreak}
+
\unexpanded\def\publ_fast_btx_setup_chain_yes#1#2%
{\dontleavehmode\begingroup
+ \let\:\publ_fast_btx_setup_colon_inbetween
\infofont
\ifcase\btxsetuptype\darkred\or\darkblue\or\darkgreen\or\darkcyan\or\darkmagenta\else\darkred\fi
- [%
- \currentbtxspecification :#1:#2\ifcsname\??setup:\s!btx:\currentbtxspecification :#1:#2\endcsname\else
+ [\prewordbreak
+ \currentbtxspecification \:#1\:#2\ifcsname\??setup:\s!btx:\currentbtxspecification:#1:#2\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- \currentbtxspecificationfallback:#1:#2\ifcsname\??setup:\s!btx:\currentbtxspecificationfallback :#1:#2\endcsname\else
+ \currentbtxspecificationfallback\:#1\:#2\ifcsname\??setup:\s!btx:\currentbtxspecificationfallback:#1:#2\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- #1:#2\ifcsname\??setup:\s!btx :#1:#2\endcsname\else
+ #1\:#2\ifcsname\??setup:\s!btx:#1:#2\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- \currentbtxspecification :#1:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecification :#1:\s!unknown\endcsname\else
+ \currentbtxspecification \:#1\:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecification:#1:\s!unknown\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- \currentbtxspecificationfallback:#1:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecificationfallback:#1:\s!unknown\endcsname\else
+ \currentbtxspecificationfallback\:#1\:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecificationfallback:#1:\s!unknown\endcsname\else
\publ_fast_btx_setup_chain_inbetween
unset\fi\fi\fi\fi\fi
\space @\space
\currentbtx
- ]%
+ \prewordbreak]%
\endgroup}
\unexpanded\def\publ_fast_btx_setup_chain_nop#1#2%
{\dontleavehmode\begingroup
+ \let\:\publ_fast_btx_setup_colon_inbetween
\infofont
\darkred
- [%
- \currentbtxspecification :#1:#2\ifcsname\??setup:\s!btx:\currentbtxspecification :#1:#2\endcsname\else
+ [\prewordbreak
+ \currentbtxspecification\:#1\:#2\ifcsname\??setup:\s!btx:\currentbtxspecification:#1:#2\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- #1:#2\ifcsname\??setup:\s!btx :#1:#2\endcsname\else
+ #1\:#2\ifcsname\??setup:\s!btx:#1:#2\endcsname\else
\publ_fast_btx_setup_chain_inbetween
- \currentbtxspecification :#1:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecification :#1:\s!unknown\endcsname\else
+ \currentbtxspecification\:#1\:\s!unknown\ifcsname\??setup:\s!btx:\currentbtxspecification:#1:\s!unknown\endcsname\else
\publ_fast_btx_setup_chain_inbetween
unset\fi\fi\fi
\space @\space
\currentbtx
- ]%
+ \prewordbreak]%
\endgroup}
\unexpanded\def\publ_fast_btx_setup_normal#1%
@@ -1527,11 +1568,12 @@
\btxparameter\c!right
\endgroup}
-\let\btxstartcite \begingroup
-\let\btxstopcite \endgroup
\let\btxstartciteauthor\begingroup
\let\btxstopciteauthor \endgroup
+\unexpanded\def\btxstartcite{\begingroup\btx_reset_cite}
+ \let\btxstopcite \endgroup
+
%D Whatever helpers:
\unexpanded\def\btxsingularplural#1{\clf_btxsingularorplural{\currentbtxdataset}{\currentbtxtag}{#1}}
diff --git a/Master/texmf-dist/tex/context/base/publ-jrn.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-jrn.lua
index 0cc41862f53..0cc41862f53 100644
--- a/Master/texmf-dist/tex/context/base/publ-jrn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-jrn.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-old.mkiv b/Master/texmf-dist/tex/context/base/mkiv/publ-old.mkiv
index f616428e6df..f616428e6df 100644
--- a/Master/texmf-dist/tex/context/base/publ-old.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-old.mkiv
diff --git a/Master/texmf-dist/tex/context/base/publ-oth.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-oth.lua
index 55c62c31eba..55c62c31eba 100644
--- a/Master/texmf-dist/tex/context/base/publ-oth.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-oth.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-reg.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-reg.lua
index 3f276b49abc..3f276b49abc 100644
--- a/Master/texmf-dist/tex/context/base/publ-reg.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-reg.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-sor.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-sor.lua
index b617af760e3..218d1109356 100644
--- a/Master/texmf-dist/tex/context/base/publ-sor.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-sor.lua
@@ -9,31 +9,31 @@ if not modules then modules = { } end modules ['publ-sor'] = {
-- if needed we can optimize this one: chekc if it's detail or something else
-- and use direct access, but in practice it's fast enough
-local type = type
-local concat = table.concat
-local formatters = string.formatters
-local compare = sorters.comparers.basic -- (a,b)
-local sort = table.sort
-
-local toarray = utilities.parsers.settings_to_array
-local utfchar = utf.char
-
-local publications = publications
-local writers = publications.writers
-
-local variables = interfaces.variables
-local v_short = variables.short
-local v_default = variables.default
-local v_reference = variables.reference
-local v_dataset = variables.dataset
-local v_list = variables.list
-local v_index = variables.index
-local v_cite = variables.cite
-local v_used = variables.used
-
-local report = logs.reporter("publications","sorters")
-
-local trace_sorters trackers.register("publications.sorters",function(v) trace_sorters = v end)
+local type = type
+local concat = table.concat
+local formatters = string.formatters
+local compare = sorters.comparers.basic -- (a,b)
+local sort = table.sort
+
+local toarray = utilities.parsers.settings_to_array
+local utfchar = utf.char
+
+local publications = publications
+local writers = publications.writers
+
+local variables = interfaces.variables
+local v_short = variables.short
+local v_default = variables.default
+local v_reference = variables.reference
+local v_dataset = variables.dataset
+local v_list = variables.list
+local v_index = variables.index
+local v_cite = variables.cite
+local v_used = variables.used
+
+local report = logs.reporter("publications","sorters")
+
+local trace_sorters = false trackers.register("publications.sorters",function(v) trace_sorters = v end)
-- authors(s) | year | journal | title | pages
diff --git a/Master/texmf-dist/tex/context/base/publ-tra.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-tra.lua
index 4b03307acc2..4b03307acc2 100644
--- a/Master/texmf-dist/tex/context/base/publ-tra.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-tra.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-tra.mkiv b/Master/texmf-dist/tex/context/base/mkiv/publ-tra.mkiv
index 6ef86ca5944..6ef86ca5944 100644
--- a/Master/texmf-dist/tex/context/base/publ-tra.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-tra.mkiv
diff --git a/Master/texmf-dist/tex/context/base/publ-usr.lua b/Master/texmf-dist/tex/context/base/mkiv/publ-usr.lua
index 901f116296c..901f116296c 100644
--- a/Master/texmf-dist/tex/context/base/publ-usr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-usr.lua
diff --git a/Master/texmf-dist/tex/context/base/publ-usr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/publ-usr.mkiv
index cb078f424d5..cb078f424d5 100644
--- a/Master/texmf-dist/tex/context/base/publ-usr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-usr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/publ-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/publ-xml.mkiv
index 96375b9cc61..96375b9cc61 100644
--- a/Master/texmf-dist/tex/context/base/publ-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/publ-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-1.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-1.lua
index ff2182afa2c..ff2182afa2c 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-1.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-1.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-10.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-10.lua
index f23744b4a24..f23744b4a24 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-10.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-10.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-11.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-11.lua
index 54e5626c28f..54e5626c28f 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-11.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-11.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-13.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-13.lua
index 1646133b5ae..1646133b5ae 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-13.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-13.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-14.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-14.lua
index 2b0c6881445..2b0c6881445 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-14.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-14.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-15.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-15.lua
index 48861f39690..48861f39690 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-15.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-15.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-16.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-16.lua
index e122a2042a4..e122a2042a4 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-16.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-16.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-2.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-2.lua
index affd6c3ca20..affd6c3ca20 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-2.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-2.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-3.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-3.lua
index 4b5c54b4fbb..4b5c54b4fbb 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-3.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-3.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-4.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-4.lua
index 774ec2e1056..774ec2e1056 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-4.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-4.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-5.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-5.lua
index 1137f37bb2e..1137f37bb2e 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-5.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-5.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-6.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-6.lua
index 651ae79ffe6..651ae79ffe6 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-6.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-6.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-7.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-7.lua
index 08cbbab6edf..08cbbab6edf 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-7.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-7.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-8.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-8.lua
index b6960999174..b6960999174 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-8.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-8.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-9.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-9.lua
index 773307fff09..773307fff09 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-9.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-8859-9.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1250.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1250.lua
index 00d55d1b83f..00d55d1b83f 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1250.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1250.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1251.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1251.lua
index 7bb72e0ccab..7bb72e0ccab 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1251.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1251.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1252.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1252.lua
index 86954c9af36..86954c9af36 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1252.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1252.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1253.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1253.lua
index 31a411efeec..31a411efeec 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1253.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1253.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1254.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1254.lua
index 73b9927c6ca..73b9927c6ca 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1254.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1254.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1255.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1255.lua
index 2abb16b54e7..2abb16b54e7 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1255.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1255.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1256.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1256.lua
index a0697c321c4..a0697c321c4 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1256.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1256.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1257.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1257.lua
index 6e39c10d4bb..6e39c10d4bb 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1257.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1257.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1258.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1258.lua
index cf64d2ab629..cf64d2ab629 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1258.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-cp1258.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-demo.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-demo.lua
index 689f44e32c5..689f44e32c5 100644
--- a/Master/texmf-dist/tex/context/base/regi-demo.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-demo.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-ini.lua
index 37a88fd5f96..37a88fd5f96 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/regi-ini.mkiv
index 6190393d804..6190393d804 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/regi-pdfdoc.lua b/Master/texmf-dist/tex/context/base/mkiv/regi-pdfdoc.lua
index 363d3ae0da3..363d3ae0da3 100644
--- a/Master/texmf-dist/tex/context/base/regi-pdfdoc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/regi-pdfdoc.lua
diff --git a/Master/texmf-dist/tex/context/base/scrn-bar.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-bar.mkvi
index 8a2f9441c80..2f21b00040e 100644
--- a/Master/texmf-dist/tex/context/base/scrn-bar.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-bar.mkvi
@@ -132,29 +132,29 @@
\d_scrn_bar_width1.5\emwidth
\fi
\doifnothing{\interactionbarparameter\c!height}{\letinteractionbarparameter\c!height\v!broad}%
- \doifnothing{\interactionbarparameter\c!depth }{\letinteractionbarparameter\c!depth\!!zeropoint}%%%
+ \doifnothing{\interactionbarparameter\c!depth }{\letinteractionbarparameter\c!depth\zeropoint}%%%
\letinteractionbarparameter\c!background\empty
\setbox2\hbox{\inheritedinteractionbarframed{\symbol[\interactionparameter\c!symbolset][\v!previouspage]}}%
- \!!heighta\ht2 % needed because we default to nothing
+ \scratchheight\ht2 % needed because we default to nothing
\letinteractionbarparameter\c!strut\v!no
\letinteractionparameter\c!width\zeropoint
- \!!counta\zerocount % new, was 1
+ \scratchcounterone\zerocount % new, was 1
\processallactionsinset
[#list]
- [ \v!page=>\advance\!!counta\plusfour,
- \v!subpage=>\advance\!!counta\plusfour,
- \s!unknown=>\advance\!!counta\plusone]%
+ [ \v!page=>\advance\scratchcounterone\plusfour,
+ \v!subpage=>\advance\scratchcounterone\plusfour,
+ \s!unknown=>\advance\scratchcounterone\plusone]%
\ifdim\d_scrn_bar_width=\zeropoint
- \!!widtha\dimexpr2\emwidth+\d_scrn_bar_distance\relax
- \!!widthb\dimexpr\!!counta\!!widtha-\d_scrn_bar_distance\relax
+ \scratchdimenone\dimexpr2\emwidth+\d_scrn_bar_distance\relax
+ \scratchdimentwo\dimexpr\scratchcounterone\scratchdimenone-\d_scrn_bar_distance\relax
\else
- \!!widtha\d_scrn_bar_width
- \!!widthb\dimexpr\!!counta\d_scrn_bar_distance-\d_scrn_bar_distance\relax
- \advance\!!widtha -\!!widthb
- \divide\!!widtha \!!counta
- \!!widthb\d_scrn_bar_width
+ \scratchdimenone\d_scrn_bar_width
+ \scratchdimentwo\dimexpr\scratchcounterone\d_scrn_bar_distance-\d_scrn_bar_distance\relax
+ \advance\scratchdimenone -\scratchdimentwo
+ \divide\scratchdimenone \scratchcounterone
+ \scratchdimentwo\d_scrn_bar_width
\fi
- \hbox to \!!widthb
+ \hbox to \scratchdimentwo
{\setnostrut
\startsymbolset[\interactionparameter\c!symbolset]%
\processallactionsinset
@@ -174,12 +174,12 @@
\def\scrn_bar_goto#action%
{\button
- [\c!height=\the\!!heighta,\c!width=\the\!!widtha]%
+ [\c!height=\the\scratchheight,\c!width=\the\scratchdimenone]%
{\symbol[#action]}% we could expand this one once only
[#action]%
\hss}
-% todo: this will be \letblackruleparameter\c!width\!!widtha (faster)
+% todo: this will be \letblackruleparameter\c!width\scratchdimenone (faster)
\def\scrn_bar_alternative_a
{\d_scrn_bar_width \interactionbarparameter\c!width
@@ -189,15 +189,15 @@
\noindent\hbox to \d_scrn_bar_width \bgroup
\dontcomplain
\setupblackrules[\c!height=\v!max,\c!depth=\v!max]%
- \!!widthb\dimexpr\d_scrn_bar_width-4\emwidth\relax
+ \scratchdimentwo\dimexpr\d_scrn_bar_width-4\emwidth\relax
\processaction
[\interactionbarparameter\c!step]
[ \v!small=>\scratchcounter 20,
\v!medium=>\scratchcounter 10,
\v!big=>\scratchcounter 5,
\s!unknown=>\scratchcounter 10]%
- \!!widtha\dimexpr\!!widthb/\scratchcounter\relax
- \setupblackrules[\c!width=\!!widtha]%
+ \scratchdimenone\dimexpr\scratchdimentwo/\scratchcounter\relax
+ \setupblackrules[\c!width=\scratchdimenone]%
\setbox\scratchbox\hbox to \d_scrn_bar_width
{\hskip2\emwidth
\setbox\scratchbox\hbox{\blackrule[\c!color=\interactionbarparameter\c!backgroundcolor]}%
@@ -211,13 +211,13 @@
\normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!firstpage]}%
\hskip\emwidth
\ifnum\realpageno>\plusone
- \hskip\zeropoint\!!plus\numexpr\realpageno-\plustwo\relax \s!sp\relax % cm gives overflow
+ \hskip\zeropoint\s!plus\numexpr\realpageno-\plustwo\relax \s!sp\relax % cm gives overflow
\normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!previouspage)]}%
\fi
\normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[page(\number\realpageno)]}% todo: \v!currentpage
\ifnum\realpageno<\lastpage\relax
\normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!nextpage]}%
- \hskip\zeropoint\!!plus\numexpr\lastpage-\realpageno-\plusone\relax \s!sp\relax % cm gives overflow
+ \hskip\zeropoint\s!plus\numexpr\lastpage-\realpageno-\plusone\relax \s!sp\relax % cm gives overflow
\fi
\hskip\emwidth
\normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\blackrule}[\v!lastpage]}%
@@ -234,13 +234,13 @@
\hbox to \d_scrn_bar_width
{\setupblackrules[\c!height=\interactionbarparameter\c!height,\c!depth=\interactionbarparameter\c!depth,\c!width=\emwidth]%
\scratchdimen\dimexpr(\d_scrn_bar_width-4\emwidth)/\numexpr\lastpage+\minusone\relax\relax
- \!!widtha\numexpr\realpageno+\minusone\relax\scratchdimen
- \!!widthb\numexpr\lastpage-\realpageno\relax\scratchdimen
+ \scratchdimenone\numexpr\realpageno+\minusone\relax\scratchdimen
+ \scratchdimentwo\numexpr\lastpage-\realpageno\relax\scratchdimen
\directgotospecbox\interactionbarparameter{\blackrule}[\v!firstpage]%
\hss
- \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\!!widtha]}[\v!previouspage]%
+ \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\scratchdimenone]}[\v!previouspage]%
\blackrule[\c!color=\interactionbarparameter\c!contrastcolor]%
- \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\!!widthb]}[\v!nextpage]%
+ \directgotospecbox\interactionbarparameter{\blackrule[\c!width=\scratchdimentwo]}[\v!nextpage]%
\hss
\directgotospecbox\interactionbarparameter{\blackrule}[\v!lastpage]}%
\fi}
@@ -249,18 +249,18 @@
{\symbol[\ifcase#whereto\v!previous\or\v!somewhere\or\v!next\fi]}
\unexpanded\def\scrn_bar_goto_b#whereto%
- {\vrule\!!height\d_scrn_bar_height\!!depth\d_scrn_bar_depth\!!width\!!widtha\relax}
+ {\vrule\s!height\d_scrn_bar_height\s!depth\d_scrn_bar_depth\s!width\scratchdimenone\relax}
\unexpanded\def\scrn_bar_goto_c#whereto%
{\symbol[\ifcase#whereto\v!previous\or\v!somewhere\or\v!somewhere\or\v!somewhere\or\v!next\fi}
\unexpanded\def\scrn_bar_goto_d#whereto%
- {\vrule \!!width\!!widtha \ifcase#whereto%
- \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \or
- \!!height.5\d_scrn_bar_height \!!depth.5\d_scrn_bar_depth \or
- \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \or
- \!!height.5\d_scrn_bar_height \!!depth.5\d_scrn_bar_depth \else
- \!!height \d_scrn_bar_height \!!depth \d_scrn_bar_depth \fi}
+ {\vrule \s!width\scratchdimenone \ifcase#whereto%
+ \s!height \d_scrn_bar_height \s!depth \d_scrn_bar_depth \or
+ \s!height.5\d_scrn_bar_height \s!depth.5\d_scrn_bar_depth \or
+ \s!height \d_scrn_bar_height \s!depth \d_scrn_bar_depth \or
+ \s!height.5\d_scrn_bar_height \s!depth.5\d_scrn_bar_depth \else
+ \s!height \d_scrn_bar_height \s!depth \d_scrn_bar_depth \fi}
\newconstant\c_scrn_bar_mode
@@ -270,7 +270,8 @@
\let\scrn_bar_goto_indeed\scrn_bar_goto_a}
{\let\scrn_bar_goto_indeed\scrn_bar_goto_b}%
\dorecurse\nofsubpages
- {\scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax
+ %{\scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax
+ {\scratchcounter\therealsubpageno\recurselevel
\c_scrn_bar_mode
\ifnum\scratchcounter<\realpageno \zerocount \else
\ifnum\scratchcounter=\realpageno \plusone \else
@@ -285,7 +286,7 @@
\d_scrn_bar_distance\interactionbarparameter\c!distance
\d_scrn_bar_height \interactionbarparameter\c!height
\d_scrn_bar_depth \interactionbarparameter\c!depth
- \!!widtha\d_scrn_bar_width
+ \scratchdimenone\d_scrn_bar_width
\noindent\hbox{\scrn_bar_goto_x{\hskip\d_scrn_bar_distance}}%
}\fi}
@@ -295,9 +296,9 @@
\d_scrn_bar_distance\interactionbarparameter\c!distance
\d_scrn_bar_height \interactionbarparameter\c!height
\d_scrn_bar_depth \interactionbarparameter\c!depth
- \!!widthb\dimexpr\nofsubpages\d_scrn_bar_distance-\d_scrn_bar_distance\relax % (n-1)
- \!!widtha\dimexpr(\d_scrn_bar_width-\!!widthb)/\nofsubpages\relax
- \ifdim\!!widtha<\d_scrn_bar_distance
+ \scratchdimentwo\dimexpr\nofsubpages\d_scrn_bar_distance-\d_scrn_bar_distance\relax % (n-1)
+ \scratchdimenone\dimexpr(\d_scrn_bar_width-\scratchdimentwo)/\nofsubpages\relax
+ \ifdim\scratchdimenone<\d_scrn_bar_distance
\scrn_bar_alternative_f
\else
\noindent\hbox to \d_scrn_bar_width{\scrn_bar_goto_x{\hss}\unskip}%
@@ -312,37 +313,37 @@
\d_scrn_bar_depth \interactionbarparameter\c!depth
\noindent \hbox to \d_scrn_bar_width \bgroup
\doloop
- {\!!countc\numexpr(\nofsubpages/\recurselevel)+\plusone\relax % rounding
- \!!widthb\d_scrn_bar_distance
- \multiply\!!widthb \!!countc
- \advance\!!widthb -\d_scrn_bar_distance
- \!!widtha\d_scrn_bar_width
- \advance\!!widtha -\!!widthb
- \divide\!!widtha \!!countc
- \ifdim\!!widtha<\d_scrn_bar_distance\else
- \!!countb\recurselevel
+ {\scratchcounterthree\numexpr(\nofsubpages/\recurselevel)+\plusone\relax % rounding
+ \scratchdimentwo\d_scrn_bar_distance
+ \multiply\scratchdimentwo \scratchcounterthree
+ \advance\scratchdimentwo -\d_scrn_bar_distance
+ \scratchdimenone\d_scrn_bar_width
+ \advance\scratchdimenone -\scratchdimentwo
+ \divide\scratchdimenone \scratchcounterthree
+ \ifdim\scratchdimenone<\d_scrn_bar_distance\else
+ \scratchcountertwo\recurselevel
\exitloop
\fi}%
- \ifnum\!!countc>\plusone
+ \ifnum\scratchcounterthree>\plusone
% this is not that well tested
- \advance\!!countc \minustwo
- \!!widtha-\d_scrn_bar_distance
- \!!widtha\!!countc\!!widtha
- \advance\!!widtha \d_scrn_bar_width
- \advance\!!countc \plusone
- \divide\!!widtha \!!countc
+ \advance\scratchcounterthree \minustwo
+ \scratchdimenone-\d_scrn_bar_distance
+ \scratchdimenone\scratchcounterthree\scratchdimenone
+ \advance\scratchdimenone \d_scrn_bar_width
+ \advance\scratchcounterthree \plusone
+ \divide\scratchdimenone \scratchcounterthree
\fi
\doifelse{\interactionbarparameter\c!symbol}\v!yes
{\setupsymbolset[\interactionparameter\c!symbolset]%
\let\scrn_bar_goto_indeed\scrn_bar_goto_c}%
{\let\scrn_bar_goto_indeed\scrn_bar_goto_d}%
- \!!countc\numexpr\realpageno-\plustwo\relax
- \!!countd\numexpr\realpageno+\plustwo\relax
- \ifnum\!!countc<\plusone \!!countc\plusone \fi
- \!!countf\zerocount
+ \scratchcounterthree\numexpr\realpageno-\plustwo\relax
+ \scratchcounterfour\numexpr\realpageno+\plustwo\relax
+ \ifnum\scratchcounterthree<\plusone \scratchcounterthree\plusone \fi
+ \scratchcounterfive\zerocount
\dostepwiserecurse\firstsubpage\lastsubpage\plusone
{\!!doneafalse
- \advance\!!countf \plusone
+ \advance\scratchcounterfive \plusone
\ifnum\recurselevel=\firstsubpage\relax \!!doneatrue \fi
\ifnum\recurselevel=\lastsubpage \relax \!!doneatrue \fi
\c_scrn_bar_mode
@@ -355,7 +356,7 @@
\plusfour
\fi\fi
\else
- \ifnum\!!countf=\!!countb
+ \ifnum\scratchcounterfive=\scratchcountertwo
\ifnum\recurselevel<\realpageno
\plusone
\else\ifnum\recurselevel>\realpageno
@@ -367,9 +368,9 @@
\plusthree
\fi
\fi
- \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[page(\recurselevel)]}%
+ \normalexpanded{\directgotospecbox\noexpand\interactionbarparameter{\scrn_bar_goto_indeed\c_scrn_bar_mode}[page(\therealsubpageno\recurselevel)]}%
\hss
- \!!countf\zerocount}%
+ \scratchcounterfive\zerocount}%
\unskip
\egroup
}\fi}
diff --git a/Master/texmf-dist/tex/context/base/scrn-but.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-but.lua
index 7d883c910b7..85cbf0b3973 100644
--- a/Master/texmf-dist/tex/context/base/scrn-but.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-but.lua
@@ -11,7 +11,7 @@ local f_two_colon = string.formatters["%s:%s"]
local function registerbuttons(tag,register,language)
local data = sorters.definitions[language]
- local orders = daya and data.orders or sorters.definitions.default.orders
+ local orders = data and data.orders or sorters.definitions.default.orders
local tag = tag == "" and { "" } or { tag }
for i=1,#orders do
local order = orders[i]
diff --git a/Master/texmf-dist/tex/context/base/scrn-but.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-but.mkvi
index 3fdaf2c5d75..1d5ffe6f3d6 100644
--- a/Master/texmf-dist/tex/context/base/scrn-but.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-but.mkvi
@@ -724,7 +724,7 @@
{\scrn_menu_action_start
\letinteractionmenuparameter\c!frame\v!off
\letinteractionmenuparameter\c!background\empty
- \letinteractionmenuparameter\v!yes
+ \letinteractionmenuparameter\c!empty\v!yes
\inheritedinteractionmenuframed{\ignorespaces#text\removeunwantedspaces}%
\scrn_menu_action_stop}
diff --git a/Master/texmf-dist/tex/context/base/scrn-fld.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-fld.lua
index 1563b9005d7..f68cc039dce 100644
--- a/Master/texmf-dist/tex/context/base/scrn-fld.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-fld.lua
@@ -10,11 +10,13 @@ if not modules then modules = { } end modules ['scrn-fld'] = {
local context = context
local ctx_doifelse = commands.doifelse
-local implement = interfaces.implement
+local implement = interfaces.implement
local variables = interfaces.variables
local v_yes = variables.yes
+local report = logs.reporter("widgets")
+
local texsetbox = tex.setbox
local fields = { }
@@ -85,7 +87,12 @@ implement {
implement {
name = "insertfield",
actions = function(name,specification)
- texsetbox("b_scrn_field_body",insert(name,specification))
+ local b = insert(name,specification)
+ if b then
+ texsetbox("b_scrn_field_body",b)
+ else
+ report("unknown field %a",name)
+ end
end,
arguments = {
"string",
diff --git a/Master/texmf-dist/tex/context/base/scrn-fld.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-fld.mkvi
index 4b4c9d0eeca..a92abebc51e 100644
--- a/Master/texmf-dist/tex/context/base/scrn-fld.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-fld.mkvi
@@ -141,9 +141,6 @@
{\definesymbol[defaultyes][\mathematics{\times}]%
\definesymbol[defaultno] [\mathematics{\cdot }]}
-% \def\resetfieldsymbol[#tag]% for experimental usage only
-% {\resetobject{SYM}{#tag}}
-
%D Now comes the real code:
\installcorenamespace{fieldcategory}
@@ -749,12 +746,16 @@
% todo: expand #symbols
+\installcorenamespace {fieldstack}
+
\unexpanded\def\definefieldstack
{\dotripleargument\scrn_fieldstack_define}
\def\scrn_fieldstack_define[#tag][#symbols][#settings]%
- {\ifcsname scrn_fieldstack:#tag\endcsname \else
- \setgvalue{scrn_fieldstack:#tag}{\scrn_fieldstack_construct[#tag][#symbols][#settings]}%
+ {\ifcsname\??fieldstack#tag\endcsname
+ % already done
+ \else
+ \setgvalue{\??fieldstack#tag}{\scrn_fieldstack_construct[#tag][#symbols][#settings]}%
\fi}
\unexpanded\def\fieldstack
@@ -764,7 +765,7 @@
{\ifsecondargument
\scrn_fieldstack_define[#tag][#symbols][#settings]%
\fi
- \getvalue{scrn_fieldstack:#tag}}
+ \csname\??fieldstack#tag\endcsname}
\newbox\b_scrn_fieldstack_box
@@ -885,15 +886,15 @@
{\bgroup
\global\advance\c_scrn_pushbutton_n\plusone
\setupfield
- [pushbutton]
- [\c!frame=\v!overlay,
- \c!offset=\v!overlay,
- \c!clickout={#reference},
+ [pushbutton]%
+ [\c!frame=\v!overlay,%
+ \c!offset=\v!overlay,%
+ \c!clickout={#reference},%
#settings]%
\definefield
[pushbutton:\number\c_scrn_pushbutton_n]%
- [push]
- [pushbutton]
+ [push]%
+ [pushbutton]%
[pushsymbol:#tag:n,pushsymbol:#tag:r,pushsymbol:#tag:d]%
\fitfield
[pushbutton:\number\c_scrn_pushbutton_n]%
diff --git a/Master/texmf-dist/tex/context/base/scrn-hlp.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.lua
index 99c0565a8b7..99c0565a8b7 100644
--- a/Master/texmf-dist/tex/context/base/scrn-hlp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.lua
diff --git a/Master/texmf-dist/tex/context/base/scrn-hlp.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.mkvi
index eca79c90a5b..7466e5687b7 100644
--- a/Master/texmf-dist/tex/context/base/scrn-hlp.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-hlp.mkvi
@@ -89,7 +89,7 @@
\dontleavehmode \hbox \bgroup
\dontcomplain
\setbox\b_scrn_help_box\hbox{\strut#text}%
- \doregisterhelp{#target}%
+ \scrn_help_register{#target}%
\egroup % can be usernode instead
\goto
{\helpsignal{\number\c_scrn_help_n}#target}%
diff --git a/Master/texmf-dist/tex/context/base/scrn-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-ini.lua
index ce9f9f71b06..ce9f9f71b06 100644
--- a/Master/texmf-dist/tex/context/base/scrn-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/scrn-ini.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-ini.mkvi
index 2ed822c6e96..0e00fb456b4 100644
--- a/Master/texmf-dist/tex/context/base/scrn-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-ini.mkvi
@@ -182,7 +182,7 @@
title {\interactionparameter\c!title}%
subtitle {\interactionparameter\c!subtitle}%
author {\interactionparameter\c!author}%
- creator { ConTeXt - \contextversion}%
+ creator {ConTeXt - \contextversion}%
date {\interactionparameter\c!date}%
keywords {\interactionparameter\c!keyword}%
\relax}
diff --git a/Master/texmf-dist/tex/context/base/scrn-pag.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-pag.lua
index 4d7b388ee0c..dba5b4786c4 100644
--- a/Master/texmf-dist/tex/context/base/scrn-pag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-pag.lua
@@ -36,6 +36,10 @@ implement {
{ "height", "dimen" },
{ "paperwidth", "dimen" },
{ "paperheight", "dimen" },
+ { "cropoffset", "dimen" },
+ { "bleedoffset", "dimen" },
+ { "artoffset", "dimen" },
+ { "trimoffset", "dimen" },
}
}
}
diff --git a/Master/texmf-dist/tex/context/base/scrn-pag.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-pag.mkvi
index 3dfcd65c5ff..7a7effdc40a 100644
--- a/Master/texmf-dist/tex/context/base/scrn-pag.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-pag.mkvi
@@ -30,6 +30,10 @@
\newdimen\canvastopoffset
\newdimen\canvasmaxwidth
\newdimen\canvasmaxheight
+\newdimen\canvascropoffset
+\newdimen\canvastrimoffset
+\newdimen\canvasbleedoffset
+\newdimen\canvasartoffset
\newconditional\c_scrn_canvas_tight_page
@@ -39,9 +43,11 @@
\edef\currentinteractionscreenheight{\interactionscreenparameter\c!height}%
\canvasbackoffset\backspace
\canvastopoffset\topspace
+ \donetrue
\ifx\currentinteractionscreenwidth\v!max
\global\canvaswidth\printpaperwidth
\else\ifx\currentinteractionscreenwidth\v!fit
+ \donefalse
\global\canvaswidth\dimexpr
\leftcombitotal
+ \makeupwidth
@@ -52,6 +58,7 @@
\relax
\relax
\else\ifx\currentinteractionscreenwidth\v!tight
+ \donefalse
\ifdim\backspace>\canvaswidth
\ifdim\backspace>\zeropoint\relax
\global\advance\canvasbackoffset -\canvaswidth
@@ -66,11 +73,13 @@
\relax
\relax
\else
+ \donefalse
\global\canvaswidth\currentinteractionscreenwidth
\fi\fi\fi
\ifx\currentinteractionscreenheight\v!max
\global\canvasheight\printpaperheight
\else\ifx\currentinteractionscreenheight\v!fit
+ \donefalse
\global\canvasheight\dimexpr
\topheight
+ \topdistance
@@ -83,6 +92,7 @@
\relax
\relax
\else\ifx\currentinteractionscreenheight\v!tight
+ \donefalse
\global\canvasheight\dimexpr\topheight+\topdistance\relax
\ifdim\topspace>\canvasheight
\ifdim\topspace>\zeropoint\relax
@@ -99,6 +109,7 @@
\relax
\relax
\else
+ \donefalse
\global\canvasheight\currentinteractionscreenheight
\fi\fi\fi
\ifconditional\c_page_layouts_location_is_set
@@ -111,8 +122,57 @@
\global\canvasmaxwidth \printpaperwidth
\global\canvasmaxheight\printpaperheight
\fi
+ % new:
+ \ifdone
+ \global\canvascropoffset \layoutcropoffset
+ \global\canvastrimoffset \layouttrimoffset
+ \global\canvasbleedoffset\layoutbleedoffset
+ \global\canvasartoffset \layoutartoffset
+ \else
+ \global\canvascropoffset \zeropoint
+ \global\canvastrimoffset \zeropoint
+ \global\canvasbleedoffset\zeropoint
+ \global\canvasartoffset \zeropoint
+ \fi
\endgroup}
+\newdimen\layoutcropoffset
+\newdimen\layouttrimoffset
+\newdimen\layoutbleedoffset
+\newdimen\layoutartoffset
+
+\appendtoks
+ \edef\p_cropoffset{\layoutparameter\c!cropoffset}%
+ \ifx\p_cropoffset\v!auto
+ \ifconditional\c_page_layouts_location_is_middle
+ \scratchheight\dimexpr(\printpaperheight-\paperheight)/2\relax
+ \scratchwidth \dimexpr(\printpaperwidth -\paperwidth )/2\relax
+ \layoutcropoffset\ifdim\scratchheight>\scratchwidth\scratchheight\else\scratchwidth\fi
+ \layouttrimoffset \layoutparameter\c!trimoffset
+ \layoutbleedoffset\layoutparameter\c!bleedoffset
+ \layoutartoffset \layoutparameter\c!artoffset
+ \else
+ \writestatus\m!system{auto crop etc only supported when location=middle}%
+ \layoutcropoffset \zeropoint
+ \layouttrimoffset \zeropoint
+ \layoutbleedoffset\zeropoint
+ \layoutartoffset \zeropoint
+ \fi
+ \else
+ \layoutcropoffset \layoutparameter\c!cropoffset
+ \layouttrimoffset \layoutparameter\c!trimoffset
+ \layoutbleedoffset\layoutparameter\c!bleedoffset
+ \layoutartoffset \layoutparameter\c!artoffset
+ \fi
+ \relax
+\to \everysetuplayout
+
+\setuplayout
+ [\c!cropoffset=\zeropoint,
+ \c!trimoffset=\zeropoint,
+ \c!bleedoffset=\zeropoint,
+ \c!artoffset=\zeropoint]
+
% test the next when something is changed here:
%
% \setuppapersize[A5][A3] \showframe
@@ -132,6 +192,17 @@
\global\let\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
\to \everysetuplayout
+\appendtoks
+ \global\let\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple_indeed
+ \global\let\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
+\to \everysetuplayouttarget
+
+\def\scrn_canvas_synchronize_only
+ {\clf_setupcanvas
+ paperwidth \printpaperwidth
+ paperheight \printpaperheight
+ \relax}
+
\def\scrn_canvas_synchronize_simple_indeed
{\clf_setupcanvas
paperwidth \printpaperwidth
@@ -152,6 +223,10 @@
height \canvasheight
paperwidth \canvasmaxwidth
paperheight \canvasmaxheight
+ cropoffset \canvascropoffset
+ trimoffset \canvastrimoffset
+ bleedoffset \canvasbleedoffset
+ artoffset \canvasartoffset
\relax
%\global\let\scrn_canvas_synchronize_simple \relax
\global\let\scrn_canvas_synchronize_complex\relax}
@@ -179,8 +254,8 @@
\c!option=\v!auto]
\appendtoks
- \global\let\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple
- \global\let\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex
+ \global\let\scrn_canvas_synchronize_simple \scrn_canvas_synchronize_simple_indeed
+ \global\let\scrn_canvas_synchronize_complex\scrn_canvas_synchronize_complex_indeed
\to \everysetupinteractionscreen
%D Conditional page breaks:
diff --git a/Master/texmf-dist/tex/context/base/scrn-ref.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-ref.lua
index c1fc9487138..c1fc9487138 100644
--- a/Master/texmf-dist/tex/context/base/scrn-ref.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-ref.lua
diff --git a/Master/texmf-dist/tex/context/base/scrn-ref.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-ref.mkvi
index 2b15b46778e..c165e9131c2 100644
--- a/Master/texmf-dist/tex/context/base/scrn-ref.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-ref.mkvi
@@ -18,10 +18,14 @@
\unprotect
\appendtoks
- \doifsomething{\interactionparameter\c!calculate}{\doregistercalculationset{\interactionparameter\c!calculate}}%
- \doifelse{\interactionparameter\c!click }\v!yes \settrue \setfalse \highlighthyperlinks
- \doifelse{\interactionparameter\c!display}\v!new \settrue \setfalse \gotonewwindow
- \doifnot {\interactionparameter\c!page }\v!no \scrn_reference_enable_page_destinations
+ \doifsomething{\interactionparameter\c!calculate}%
+ {\clf_setfieldcalculationset{\interactionparameter\c!calculate}}%
+ \doifelse{\interactionparameter\c!click }\v!yes
+ \settrue\setfalse\highlighthyperlinks
+ \doifelse{\interactionparameter\c!display}\v!new
+ \settrue\setfalse\gotonewwindow
+ \doifnot {\interactionparameter\c!page}\v!no
+ \scrn_reference_enable_page_destinations
\to \everysetupinteraction
\def\scrn_reference_enable_page_destinations % no reset
@@ -32,6 +36,8 @@
\c!click=\v!yes,
\c!display=\v!normal,
\c!focus=\v!fit,
+ %\c!focusoffset=\zeropoint, % when tested with al views it will become 5\points
+ \c!focusoffset=5\points,
\c!calculate=,
% rendering:
\c!width=\emwidth,
@@ -39,6 +45,12 @@
\c!depth=\zeropoint,
\c!symbolset=]
+% for now here, might become per link
+
+\appendtoks
+ \enabledirectives[destinations.offset=\the\dimexpr\interactionparameter\c!focusoffset\relax]%
+\to \everysetupinteraction
+
%D We have to make sure of some settings:
\def\scrn_reference_set_text_actions
diff --git a/Master/texmf-dist/tex/context/base/scrn-wid.lua b/Master/texmf-dist/tex/context/base/mkiv/scrn-wid.lua
index 72c9bc733aa..b9855546e1a 100644
--- a/Master/texmf-dist/tex/context/base/scrn-wid.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-wid.lua
@@ -47,8 +47,8 @@ implement {
name = "presetsymbollist",
arguments = "string",
actions = function(list)
- codeinjections.presetsymbollist(list)
- end
+ codeinjections.presetsymbollist(list)
+ end
}
-- Attachments
diff --git a/Master/texmf-dist/tex/context/base/scrn-wid.mkvi b/Master/texmf-dist/tex/context/base/mkiv/scrn-wid.mkvi
index 57a4be27639..f4679684c21 100644
--- a/Master/texmf-dist/tex/context/base/scrn-wid.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrn-wid.mkvi
@@ -272,7 +272,7 @@
\else\ifsecondargument
\registerattachment[#tag][title=#title,name=#title,file=#title]%
\else
- \registerattachment[#tag][title=#title,name=#tag,file=#tag]%
+ \registerattachment[#tag][title=#tag,name=#tag,file=#tag]%
\fi\fi\fi}
%D Comments:
diff --git a/Master/texmf-dist/tex/context/base/scrp-cjk.lua b/Master/texmf-dist/tex/context/base/mkiv/scrp-cjk.lua
index 9050da6be20..77c58b18a95 100644
--- a/Master/texmf-dist/tex/context/base/scrp-cjk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrp-cjk.lua
@@ -34,7 +34,8 @@ local getid = nuts.getid
local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
local getfield = nuts.getfield
-local setfield = nuts.setfield
+
+local setchar = nuts.setchar
local nodepool = nuts.pool
local new_glue = nodepool.glue
@@ -46,6 +47,8 @@ local skipcodes = nodes.skipcodes
local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
local userskip_code = skipcodes.userskip
+local spaceskip_code = skipcodes.spaceskip
+local xspaceskip_code = skipcodes.xspaceskip
local a_scriptstatus = attributes.private('scriptstatus')
local a_scriptinjection = attributes.private('scriptinjection')
@@ -514,13 +517,13 @@ function scripts.decomposehangul(head)
for current in traverse_id(glyph_code,head) do
local lead_consonant, medial_vowel, tail_consonant = decomposed(getchar(current))
if lead_consonant then
- setfield(current,"char",lead_consonant)
+ setchar(current,lead_consonant)
local m = copy_node(current)
- setfield(m,"char",medial_vowel)
+ setchar(m,medial_vowel)
head, current = insert_node_after(head,current,m)
if tail_consonant then
local t = copy_node(current)
- setfield(t,"char",tail_consonant)
+ setchar(t,tail_consonant)
head, current = insert_node_after(head,current,t)
end
done = true
@@ -953,15 +956,19 @@ local function process(head,first,last)
or pcjk == "half_width_close" or ncjk == "half_width_open" then -- extra compared to korean
previous = "start"
else -- if head ~= first then
- if id == glue_code and getsubtype(first) == userskip_code then -- also scriptstatus check?
- -- for the moment no distinction possible between space and userskip
- local w = getfield(getfield(first,"spec"),"width")
- local s = spacedata[getfont(p)]
- if w == s then -- could be option
- if trace_details then
- trace_detail_between(p,n,"space removed")
+ if id == glue_code then
+ -- also scriptstatus check?
+ local subtype = getsubtype(first)
+ if subtype == userskip_code or subtype == spaceskip_code or subtype == xspaceskip_code then
+ -- for the moment no distinction possible between space and userskip
+ local w = getfield(first,"width")
+ local s = spacedata[getfont(p)]
+ if w == s then -- could be option
+ if trace_details then
+ trace_detail_between(p,n,"space removed")
+ end
+ remove_node(head,first,true)
end
- remove_node(head,first,true)
end
end
previous = pcjk
diff --git a/Master/texmf-dist/tex/context/base/scrp-eth.lua b/Master/texmf-dist/tex/context/base/mkiv/scrp-eth.lua
index 8ecbce52295..43cb2ff6a4e 100644
--- a/Master/texmf-dist/tex/context/base/scrp-eth.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrp-eth.lua
@@ -13,7 +13,6 @@ local nuts = nodes.nuts
local getnext = nuts.getnext
local getfont = nuts.getfont
-local getchar = nuts.getchar
local getid = nuts.getid
local getattr = nuts.getattr
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/scrp-ini.lua
index 3c3517542d3..02b2891378e 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrp-ini.lua
@@ -57,17 +57,18 @@ local getfont = nuts.getfont
local getid = nuts.getid
local getattr = nuts.getattr
local setattr = nuts.setattr
+local isglyph = nuts.isglyph
local insert_node_after = nuts.insert_after
local first_glyph = nuts.first_glyph
local traverse_id = nuts.traverse_id
+local traverse_char = nuts.traverse_char
local nodepool = nuts.pool
local new_glue = nodepool.glue
local new_rule = nodepool.rule
local new_penalty = nodepool.penalty
------ new_gluespec = nodepool.gluespec
scripts = scripts or { }
local scripts = scripts
@@ -453,8 +454,8 @@ function scripts.injectors.handler(head)
local last_a, normal_process, lastfont, originals = nil, nil, nil, nil
local done, first, last, ok = false, nil, nil, false
while start do
- local id = getid(start)
- if id == glyph_code then
+ local char, id = isglyph(start)
+ if char then
local a = getattr(start,a_scriptinjection)
if a then
if a ~= last_a then
@@ -478,21 +479,20 @@ function scripts.injectors.handler(head)
end
if normal_process then
-- wrong: originals are indices !
- local f = getfont(start)
- if f ~= lastfont then
- originals = fontdata[f].resources
+ local font = getfont(start)
+ if font ~= lastfont then
+ originals = fontdata[font].resources
if resources then
originals = resources.originals
else
originals = nil -- can't happen
end
- lastfont = f
+ lastfont = font
end
- local c = getchar(start)
if originals and type(originals) == "number" then
- c = originals[c] or c
+ char = originals[char] or char
end
- local h = hash[c]
+ local h = hash[char]
if h then
setattr(start,a_scriptstatus,categorytonumber[h])
if not first then
@@ -697,26 +697,55 @@ end)
local categories = characters.categories or { }
+-- local function hit(root,head)
+-- local current = getnext(head)
+-- local lastrun = false
+-- local lastfinal = false
+-- while current and getid(current) == glyph_code do
+-- local char = getchar(current)
+-- local newroot = root[char]
+-- if newroot then
+-- local final = newroot.final
+-- if final then
+-- lastrun = current
+-- lastfinal = final
+-- end
+-- root = newroot
+-- elseif categories[char] == "mn" then
+-- -- continue
+-- else
+-- return lastrun, lastfinal
+-- end
+-- current = getnext(current)
+-- end
+-- if lastrun then
+-- return lastrun, lastfinal
+-- end
+-- end
+
local function hit(root,head)
local current = getnext(head)
local lastrun = false
local lastfinal = false
- while current and getid(current) == glyph_code do
- local char = getchar(current)
- local newroot = root[char]
- if newroot then
- local final = newroot.final
- if final then
- lastrun = current
- lastfinal = final
+ while current do
+ local char = isglyph(current)
+ if char then
+ local newroot = root[char]
+ if newroot then
+ local final = newroot.final
+ if final then
+ lastrun = current
+ lastfinal = final
+ end
+ root = newroot
+ elseif categories[char] == "mn" then
+ -- continue
+ else
+ return lastrun, lastfinal
end
- root = newroot
- elseif categories[char] == "mn" then
- -- continue
else
- return lastrun, lastfinal
+ break
end
- current = getnext(current)
end
if lastrun then
return lastrun, lastfinal
@@ -746,9 +775,11 @@ function splitters.handler(head) -- todo: also first_glyph test
local last, final = hit(root,current)
if last then
local next = getnext(last)
- if next and getid(next) == glyph_code then
- local nextchar = getchar(next)
- if tree[nextchar] then
+ if next then
+ local nextchar = isglyph(next)
+ if not nextchar then
+ -- we're done
+ elseif tree[nextchar] then
if trace_splitdetail then
if type(final) == "string" then
report_splitting("advance %s processing between <%s> and <%c>","with",final,nextchar)
@@ -791,20 +822,6 @@ local function marker(head,current,font,color) -- could become: nodes.tracers.ma
return head, current
end
--- local function process(handler,head,first,last)
--- dataset = numbertodataset[first[a_scriptsplitting]]
--- stretch = emwidths[first.font]*dataset.inter_word_stretch_factor
--- return insert_node_after(head,last,new_glue(0,stretch))
--- end
---
--- local cache = { } table.setmetatableindex(cache,function(t,k)
--- local v = new_gluespec(0,k)
--- nodepool.register(v)
--- t[k] = v
--- return v
--- end)
--- return insert_node_after(head,last,new_glue(cache[last_s]))
-
local last_a, last_f, last_s, last_q
function splitters.insertafter(handler,head,first,last,detail)
@@ -886,11 +903,11 @@ setmetatableindex(cache_nop,function(t,k) local v = { } t[k] = v return v end)
-- playing nice
function autofontfeature.handler(head)
- for n in traverse_id(glyph_code,tonut(head)) do
+ for n in traverse_char(tonut(head)) do
-- if getattr(n,a_scriptinjection) then
-- -- already tagged by script feature, maybe some day adapt
-- else
- local char = getchar(n)
+ local char = getchar(n)
local script = otfscripts[char]
if script then
local dynamic = getattr(n,0) or 0
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/scrp-ini.mkiv
index cd060c02bbd..cd060c02bbd 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrp-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/scrp-tha.lua b/Master/texmf-dist/tex/context/base/mkiv/scrp-tha.lua
index ec5df07c075..ec5df07c075 100644
--- a/Master/texmf-dist/tex/context/base/scrp-tha.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/scrp-tha.lua
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/sort-ini.lua
index 9c4d5acee78..3266425cbf4 100644
--- a/Master/texmf-dist/tex/context/base/sort-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/sort-ini.lua
@@ -312,7 +312,7 @@ local function update() -- prepare parent chains, needed when new languages are
end
end
-local function setlanguage(l,m,d,u) -- this will become a specification table
+local function setlanguage(l,m,d,u) -- this will become a specification table (also keep this one as it's used in manuals)
language = (l ~= "" and l) or constants.defaultlanguage
data = definitions[language or constants.defaultlanguage] or definitions[constants.defaultlanguage]
method = (m ~= "" and m) or (data.method ~= "" and data.method) or constants.defaultmethod
@@ -509,10 +509,11 @@ end
local pattern = nil
-local function prepare()
+local function prepare() -- todo: test \Ux{hex}
pattern = Cs( (
characters.tex.toutfpattern()
+ lpeg.patterns.whitespace / "\000"
+ + (P("\\Ux{") / "" * ((1-P("}"))^1/function(s) return utfchar(tonumber(s,16)) end) * (P("}")/""))
+ (P("\\") / "") * R("AZ")^0 * (P(-1) + #(1-R("AZ")))
+ (P("\\") * P(1) * R("az","AZ")^0) / ""
+ S("[](){}$\"'") / ""
@@ -696,54 +697,68 @@ end
local function packch(entry)
local split = entry.split
- if #split > 0 then -- useless test
+ if split and #split > 0 then -- useless test
local t = { }
for i=1,#split do
- local tt, li = { }, split[i].ch
- for j=1,#li do
- local lij = li[j]
- local byt = utfbyte(lij)
+ local tt = { }
+ local ch = split[i].ch
+ for j=1,#ch do
+ local chr = ch[j]
+ local byt = utfbyte(chr)
if byt > ignoredoffset then
tt[j] = "[]"
elseif byt == 0 then
tt[j] = " "
else
- tt[j] = lij
+ tt[j] = chr
end
end
t[i] = concat(tt)
end
return concat(t," + ")
else
- local t, li = { }, split.ch
- for j=1,#li do
- local lij = li[j]
- local byt = utfbyte(lij)
- if byt > ignoredoffset then
- t[j] = "[]"
- elseif byt == 0 then
- t[j] = " "
- else
- t[j] = lij
+ local t = { }
+ local ch = (split and split.ch) or entry.ch or entry
+ if ch then
+ for i=1,#ch do
+ local chr = ch[i]
+ local byt = utfbyte(chr)
+ if byt > ignoredoffset then
+ t[i] = "[]"
+ elseif byt == 0 then
+ t[i] = " "
+ else
+ t[i] = chr
+ end
end
+ return concat(t)
+ else
+ return ""
end
- return concat(t)
end
end
local function packuc(entry)
local split = entry.split
- if #split > 0 then -- useless test
+ if split and #split > 0 then -- useless test
local t = { }
for i=1,#split do
t[i] = concat(split[i].uc, " ") -- sq
end
return concat(t," + ")
else
- return concat(split.uc," ") -- sq
+ local uc = (split and split.uc) or entry.uc or entry
+ if uc then
+ return concat(uc," ") -- sq
+ else
+ return ""
+ end
end
end
+sorters.packch = packch
+sorters.packuc = packuc
+
function sorters.sort(entries,cmp)
if trace_methods then
local nofentries = #entries
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/sort-ini.mkiv
index b7b49025561..b7b49025561 100644
--- a/Master/texmf-dist/tex/context/base/sort-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/sort-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.lua b/Master/texmf-dist/tex/context/base/mkiv/sort-lan.lua
index 6b0cc50072e..e84692afc52 100644
--- a/Master/texmf-dist/tex/context/base/sort-lan.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/sort-lan.lua
@@ -103,10 +103,10 @@ definitions['de'] = {
},
}
-definitions['deo'] = { parent = 'de' } -- old german
+definitions['deo'] = { parent = 'de' } -- old german
-definitions['de-DE'] = { parent = 'de' } -- german - Germany
-definitions['de-CH'] = { parent = 'de' } -- german - Swiss
+definitions['de-DE'] = { parent = 'de' } -- german - Germany
+definitions['de-CH'] = { parent = 'de' } -- german - Swiss
-- german - Austria
diff --git a/Master/texmf-dist/tex/context/base/spac-adj.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-adj.lua
index cdf9b505119..cdf9b505119 100644
--- a/Master/texmf-dist/tex/context/base/spac-adj.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-adj.lua
diff --git a/Master/texmf-dist/tex/context/base/spac-adj.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-adj.mkiv
index b8534303df9..ad0f92a1f2e 100644
--- a/Master/texmf-dist/tex/context/base/spac-adj.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-adj.mkiv
@@ -45,7 +45,7 @@
{\dowithnextboxcs\spac_vadjust_faked_finish\vtop}
\def\spac_vadjust_faked_finish
- {\setbox\nextbox\hbox{\llap{\lower\strutdepth\box\nextbox}}%
+ {\setbox\nextbox\hpack{\llap{\lower\strutdepth\box\nextbox}}%
\smashedbox\nextbox}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-ali.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-ali.lua
index 880da6213d5..a67a3013333 100644
--- a/Master/texmf-dist/tex/context/base/spac-ali.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-ali.lua
@@ -24,11 +24,12 @@ local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getlist = nuts.getlist
+local setlist = nuts.setlist
local getattr = nuts.getattr
local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
-local hpack_nodes = nuts.hpack -- nodes.fasthpack not really faster here
+local hpack_nodes = nuts.hpack
local linked_nodes = nuts.linked
local unsetvalue = attributes.unsetvalue
@@ -86,12 +87,12 @@ local function handler(head,leftpage,realpageno)
action = leftpage and 2 or 1
end
if action == 1 then
- setfield(current,"list",hpack_nodes(linked_nodes(getlist(current),new_stretch(3)),getfield(current,"width"),"exactly"))
+ setlist(current,hpack_nodes(linked_nodes(getlist(current),new_stretch(3)),getfield(current,"width"),"exactly"))
if trace_realign then
report_realign("flushing left, align %a, page %a, realpage %a",align,pageno,realpageno)
end
elseif action == 2 then
- setfield(current,"list",hpack_nodes(linked_nodes(new_stretch(3),getlist(current)),getfield(current,"width"),"exactly"))
+ setlist(current,hpack_nodes(linked_nodes(new_stretch(3),getlist(current)),getfield(current,"width"),"exactly"))
if trace_realign then
report_realign("flushing right. align %a, page %a, realpage %a",align,pageno,realpageno)
end
diff --git a/Master/texmf-dist/tex/context/base/spac-ali.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-ali.mkiv
index 07d588ba7d5..21714f07c36 100644
--- a/Master/texmf-dist/tex/context/base/spac-ali.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-ali.mkiv
@@ -113,13 +113,13 @@
{\textdir TRT\relax
\setfalse\inlinelefttoright}
-\def\currentdirectionparameters
- {\ifconditional\inlinelefttoright \else
- idir="r2l",
- \fi
- \ifconditional\displaylefttoright \else
- ddir="r2l",
- \fi}
+% \def\currentdirectionparameters
+% {\ifconditional\inlinelefttoright \else
+% idir {r2l}%
+% \fi
+% \ifconditional\displaylefttoright \else
+% ddir {r2l}%
+% \fi}
\unexpanded\def\synchronizelayoutdirection
{\ifconditional\layoutlefttoright
@@ -148,6 +148,35 @@
\unexpanded\def\synchronizeinlinedirection
{\textdir T\ifconditional\inlinelefttoright L\else R\fi T\relax}
+% maybe some day:
+%
+% \newcount\postdirpenalty % \zerocount
+% \newcount\predirpenalty % \zerocount
+%
+% \def\spac_directions_post_break
+% {\ifhmode
+% \removeunwantedspaces
+% \penalty\postdirpenalty
+% \fi}
+%
+% \def\spac_directions_pre_break
+% {\ifhmode
+% \penalty\predirpenalty
+% \ignorespaces
+% \fi}
+%
+% \unexpanded\def\spac_directions_lefttoright_hmode
+% {\settrue\inlinelefttoright
+% \textdir TLT\relax
+% \aftergroup\spac_directions_post_break
+% \spac_directions_pre_break}
+%
+% \unexpanded\def\spac_directions_righttoleft_hmode
+% {\textdir TRT\relax
+% \setfalse\inlinelefttoright
+% \aftergroup\spac_directions_post_break
+% \spac_directions_pre_break}
+
\unexpanded\def\showdirections
{\dontleavehmode
\begingroup\infofont\textdir TLT[\space
@@ -167,6 +196,10 @@
\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
+\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}
+
% Tolerance and hyphenation
\ifdefined\lesshyphens \else \let\lesshyphens\relax \fi
@@ -255,6 +288,7 @@
\newconstant\c_spac_align_state_horizontal
\newconstant\c_spac_align_state_broad
+\newconstant\c_spac_align_state_par_fill
\def\v_spac_align_fill_amount {\plusone fil}
\def\v_spac_align_fill_amount_negative {\minusone fil}
@@ -439,7 +473,8 @@
\spac_align_set_horizontal_centered_last_line
\or
\parfillskip\zeropoint
- \fi}
+ \fi
+ \relax}
% Page spacing:
@@ -509,8 +544,9 @@
\c_spac_align_state_vertical \zerocount
\c_spac_align_state_direction \zerocount % what is default ?
\c_spac_align_state_page \zerocount
+ \c_spac_align_state_par_fill \zerocount
\ifcsname\??aligncommand\m_spac_align_asked\endcsname
- \csname\??aligncommand\m_spac_align_asked\endcsname % not much gain in new method
+ \lastnamedcs
\else
\rawprocesscommacommand[\m_spac_align_asked]\spac_align_collect
\fi
@@ -522,6 +558,7 @@
\spac_align_flush_vertical
\spac_align_flush_direction
\spac_align_flush_page
+ \spac_align_flush_parfill
}}% kept, nice for tracing
\edef\raggedcommand {\the\t_spac_align_collected }%
\edef\updateraggedskips{\spac_align_flush_horizontal}%
@@ -598,7 +635,7 @@
\unexpanded\def\installalign#1#2% beware: commands must be unexpandable!
{\ifcsname\??aligncommand#1\endcsname \else
- \setvalue{\??aligncommand#1}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected#2}}%
+ \setvalue{\??aligncommand#1}{\toksapp\t_spac_align_collected{#2}}%
\fi}
% beware, toks stuff and states are set at a differt time, so installalign is
@@ -606,7 +643,7 @@
%
% \setvalue{\??aligncommand whatever}%
% {\c_spac_align_state_horizontal\plushundred
-% \t_spac_align_collected\expandafter{\the\t_spac_align_collected .....}}
+% \toksapp\t_spac_align_collected{.....}}
%
% this one could deal with both
%
@@ -615,7 +652,7 @@
% \setvalue{\??aligncommand#1}%
% {\spac_align_set_horizontal_none
% \c_spac_align_state_horizontal\plushundred % don't set
-% \t_spac_align_collected\expandafter{\the\t_spac_align_collected#2}}%
+% \toksapp\t_spac_align_collected{#2}}%
% \fi}
%
% \installalignoption
@@ -632,7 +669,7 @@
\setvalue{\??aligncommand\v!height }{\c_spac_align_state_page \plustwo }
\setvalue{\??aligncommand\v!line }{\c_spac_align_state_page \plusthree
% this will become another keyword (undocumented anyway)
- \t_spac_align_collected\expandafter{\the\t_spac_align_collected\settrue\raggedonelinerstate}}
+ \toksapp\t_spac_align_collected{\settrue\raggedonelinerstate}}
\setvalue{\??aligncommand\v!high }{\c_spac_align_state_vertical \plusthree}
\setvalue{\??aligncommand\v!low }{\c_spac_align_state_vertical \plustwo }
@@ -669,22 +706,42 @@
\c_spac_align_state_broad \plusone
\c_spac_align_state_horizontal\plustwo }
-\setvalue{\??aligncommand\v!lesshyphenation}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\lesshyphens}}
-\setvalue{\??aligncommand\v!morehyphenation}{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\morehyphens}}
-
-\setvalue{\??aligncommand\v!hanging }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_protruding_enable }}
-\setvalue{\??aligncommand\v!nothanging }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_protruding_disable}}
-\setvalue{\??aligncommand\v!hz }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_expansion_enable }}
-\setvalue{\??aligncommand\v!nohz }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\font_expansion_disable }}
-%setvalue{\??aligncommand\v!spacing }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\enablespacehandling \enablekernhandling }} % not in mkiv
-%setvalue{\??aligncommand\v!nospacing }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\disablespacehandling\disablekernhandling}} % not in mkiv
-\setvalue{\??aligncommand\v!hyphenated }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\dohyphens}}
-\setvalue{\??aligncommand\v!nothyphenated }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\nohyphens}}
+\setvalue{\??aligncommand\v!lesshyphenation}{\toksapp\t_spac_align_collected{\lesshyphens}}
+\setvalue{\??aligncommand\v!morehyphenation}{\toksapp\t_spac_align_collected{\morehyphens}}
+
+\setvalue{\??aligncommand\v!hanging }{\toksapp\t_spac_align_collected{\font_protruding_enable }}
+\setvalue{\??aligncommand\v!nothanging }{\toksapp\t_spac_align_collected{\font_protruding_disable}}
+\setvalue{\??aligncommand\v!hz }{\toksapp\t_spac_align_collected{\font_expansion_enable }}
+\setvalue{\??aligncommand\v!fullhz }{\toksapp\t_spac_align_collected{\font_expansion_enable_k}}
+\setvalue{\??aligncommand\v!nohz }{\toksapp\t_spac_align_collected{\font_expansion_disable }}
+%setvalue{\??aligncommand\v!spacing }{\toksapp\t_spac_align_collected{\normalspacing\zerocount}} % not yet
+%setvalue{\??aligncommand\v!nospacing }{\toksapp\t_spac_align_collected{\normalspacing\plusone}} % not yet
+\setvalue{\??aligncommand\v!hyphenated }{\toksapp\t_spac_align_collected{\dohyphens}}
+\setvalue{\??aligncommand\v!nothyphenated }{\toksapp\t_spac_align_collected{\nohyphens}}
+
+\setvalue{\??aligncommand\v!tolerant }{\toksapp\t_spac_align_collected{\spac_align_set_tolerant}}
+\setvalue{\??aligncommand\v!verytolerant }{\toksapp\t_spac_align_collected{\spac_align_set_very_tolerant}}
+\setvalue{\??aligncommand\v!stretch }{\toksapp\t_spac_align_collected{\spac_align_set_stretch}}
+\setvalue{\??aligncommand\v!extremestretch }{\toksapp\t_spac_align_collected{\spac_align_set_extreme_stretch}}
+
+\setvalue{\??aligncommand \v!final}{\c_spac_align_state_par_fill\plusone}
+\setvalue{\??aligncommand2*\v!final}{\c_spac_align_state_par_fill\plustwo} % hardcoded multiplier
+\setvalue{\??aligncommand3*\v!final}{\c_spac_align_state_par_fill\plusthree}
+\setvalue{\??aligncommand4*\v!final}{\c_spac_align_state_par_fill\plusfour}
+
+\definehspace [\v!final] [\emspaceamount]
+
+\def\spac_align_flush_parfill
+ {\ifcase\c_spac_align_state_par_fill\else
+ \spac_align_flush_parfill_indeed{\number\c_spac_align_state_par_fill}%
+ \fi}
-\setvalue{\??aligncommand\v!tolerant }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_tolerant}}
-\setvalue{\??aligncommand\v!verytolerant }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_very_tolerant}}
-\setvalue{\??aligncommand\v!stretch }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_stretch}}
-\setvalue{\??aligncommand\v!extremestretch }{\t_spac_align_collected\expandafter{\the\t_spac_align_collected\spac_align_set_extreme_stretch}}
+\unexpanded\def\spac_align_flush_parfill_indeed#1%
+ {\parfillskip
+ #1\directhspaceamount\v!final
+ % plus \dimexpr\availablehsize-#1\directhspaceamount\v!final\relax
+ plus 1fill
+ \relax}
%D For Wolfgang:
@@ -720,7 +777,7 @@
% Box commands.
-\unexpanded\def\ibox#1#2#3%
+\unexpanded\def\ibox
{\vbox\bgroup
\forgetall
\let\\=\endgraf
@@ -728,7 +785,7 @@
\doifelserightpage\spac_align_set_horizontal_right\spac_align_set_horizontal_left
\let\next}
-\unexpanded\def\obox#1#2#3%
+\unexpanded\def\obox
{\vbox\bgroup
\forgetall
\let\\=\endgraf
@@ -748,13 +805,13 @@
\def\spac_align_set_ragged_vbox#1%
{\ifcsname\??alignvertical#1\endcsname
- \csname\??alignvertical#1\endcsname
+ \lastnamedcs
\quitcommalist
\fi}
\def\spac_align_set_ragged_hbox#1%
{\ifcsname\??alignhorizontal#1\endcsname
- \csname\??alignhorizontal#1\endcsname
+ \lastnamedcs
\quitcommalist
\fi}
@@ -854,7 +911,8 @@
% Structure:
\unexpanded\def\startalignment
- {\begingroup
+ {\par
+ \begingroup
\setupalign}
\unexpanded\def\stopalignment
@@ -906,8 +964,11 @@
\setuvalue{\??alignwrapper\v!right }{\doalignline\hss \relax}
\setuvalue{\??alignwrapper\v!max }{\doalignline\relax \relax}
+\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}
+ %{\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]%
{\spac_align_wrapper_handle{#1}%
@@ -991,7 +1052,12 @@
{\csname\??alignline#1\endcsname} % no \resetrealignsignal here ?
\def\alignedline#1#2% setting default
- {\csname\??alignline\ifcsname\??alignline#1\endcsname#1\else#2\fi\endcsname}
+ % {\csname\??alignline\ifcsname\??alignline#1\endcsname#1\else#2\fi\endcsname}
+ {\ifcsname\??alignline#1\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \csname\??alignline#2\expandafter\endcsname
+ \fi}
% beware: \wordright{whatever\kern-\rightskip} should work!
% so, no funny boxing here
@@ -1069,26 +1135,81 @@
\letvalue{\??alignsimplereverse\v!flushright}\spac_align_simple_left
\letvalue{\??alignsimplereverse\v!middle }\spac_align_simple_middle
+% \unexpanded\def\simplealignedbox#1#2%
+% {\hbox \ifdim#1>\zeropoint to #1
+% \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+% \fi}
+
+% \unexpanded\def\simplealignedboxplus#1#2#3%
+% {\hbox #3 \ifdim#1>\zeropoint to #1
+% \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+% \fi}
+
+% \unexpanded\def\simplealignedbox#1#2%
+% {\hbox \ifdim#1>\zeropoint to #1
+% \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+% \fi}
+%
+% \unexpanded\def\simplealignedboxplus#1#2#3%
+% {\hbox #3 \ifdim#1>\zeropoint to #1
+% \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+% \fi}
+
\unexpanded\def\simplealignedbox#1#2%
{\hbox \ifdim#1>\zeropoint to #1
- \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+ \ifcsname\??alignsimple#2\endcsname
+ \doubleexpandafter\lastnamedcs
+ \else
+ \doubleexpandafter\spac_align_simple_left
+ \fi
+ \fi}
+
+\unexpanded\def\simplealignedspreadbox#1#2%
+ {\hbox \ifdim#1>\zeropoint spread #1
+ \ifcsname\??alignsimple#2\endcsname
+ \doubleexpandafter\lastnamedcs
+ \else
+ \doubleexpandafter\spac_align_simple_left
+ \fi
\fi}
\unexpanded\def\simplealignedboxplus#1#2#3%
{\hbox #3 \ifdim#1>\zeropoint to #1
- \csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\expandafter\endcsname
+ \ifcsname\??alignsimple#2\endcsname
+ \doubleexpandafter\lastnamedcs
+ \else
+ \doubleexpandafter\spac_align_simple_left
+ \fi
\fi}
\newconditional\alignsimplelefttoright \settrue\alignsimplelefttoright
+% \unexpanded\def\simplereversealignedbox#1#2%
+% {\hbox \ifdim#1>\zeropoint to #1
+% \csname\??alignsimplereverse\ifcsname\??alignsimplereverse#2\endcsname#2\else\v!left\fi\expandafter\endcsname
+% \fi}
+%
+% \unexpanded\def\simplereversealignedboxplus#1#2#3%
+% {\hbox #3 \ifdim#1>\zeropoint to #1
+% \csname\??alignsimplereverse\ifcsname\??alignsimplereverse#2\endcsname#2\else\v!left\fi\expandafter\endcsname
+% \fi}
+
\unexpanded\def\simplereversealignedbox#1#2%
{\hbox \ifdim#1>\zeropoint to #1
- \csname\??alignsimplereverse\ifcsname\??alignsimplereverse#2\endcsname#2\else\v!left\fi\expandafter\endcsname
+ \ifcsname\??alignsimplereverse#2\endcsname
+ \doubleexpandafter\lastnamedcs
+ \else
+ \doubleexpandafter\spac_align_simple_left
+ \fi
\fi}
\unexpanded\def\simplereversealignedboxplus#1#2#3%
{\hbox #3 \ifdim#1>\zeropoint to #1
- \csname\??alignsimplereverse\ifcsname\??alignsimplereverse#2\endcsname#2\else\v!left\fi\expandafter\endcsname
+ \ifcsname\??alignsimplereverse#2\endcsname
+ \doubleexpandafter\lastnamedcs
+ \else
+ \doubleexpandafter\spac_align_simple_left
+ \fi
\fi}
% \installnamespace{alignsets}
diff --git a/Master/texmf-dist/tex/context/base/spac-chr.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-chr.lua
index e3fa6d09983..97b32c36613 100644
--- a/Master/texmf-dist/tex/context/base/spac-chr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-chr.lua
@@ -34,11 +34,12 @@ local getfield = nuts.getfield
local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
-local getid = nuts.getid
local getattr = nuts.getattr
local setattr = nuts.setattr
local getfont = nuts.getfont
local getchar = nuts.getchar
+local setsubtype = nuts.setsubtype
+local isglyph = nuts.isglyph
local setcolor = nodes.tracers.colors.set
@@ -136,7 +137,7 @@ local function nbsp(head,current)
local para = fontparameters[getfont(current)]
if getattr(current,a_alignstate) == 1 then -- flushright
head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0)
- setfield(current,"subtype",space_skip_code)
+ setsubtype(current,space_skip_code)
else
head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink)
end
@@ -180,32 +181,42 @@ local methods = {
[0x001F] = function(head,current)
local next = getnext(current)
- if next and getid(next) == glyph_code then
- local char = getchar(next)
- head, current = remove_node(head,current,true)
- if not is_punctuation[char] then
- local p = fontparameters[getfont(next)]
- head, current = insert_node_before(head,current,new_glue(p.space,p.space_stretch,p.space_shrink))
+ if next then
+ local char = isglyph(next)
+ if char then
+ head, current = remove_node(head,current,true)
+ if not is_punctuation[char] then
+ local p = fontparameters[getfont(next)]
+ head, current = insert_node_before(head,current,new_glue(p.space,p.space_stretch,p.space_shrink))
+ end
end
end
end,
[0x00A0] = function(head,current) -- nbsp
local next = getnext(current)
- if next and getid(next) == glyph_code then
- local char = getchar(next)
- if char == 0x200C or char == 0x200D then -- nzwj zwj
+ if next then
+ local char = isglyph(current)
+ if not char then
+ -- move on
+ elseif char == 0x200C or char == 0x200D then -- nzwj zwj
next = getnext(next)
- if next and nbsphash[getchar(next)] then
- return false
+ if next then
+ char = isglyph(next)
+ if char and nbsphash[char] then
+ return false
+ end
end
elseif nbsphash[char] then
return false
end
end
local prev = getprev(current)
- if prev and getid(prev) == glyph_code and nbsphash[getchar(prev)] then
- return false
+ if prev then
+ local char = isglyph(prev)
+ if char and nbsphash[char] then
+ return false
+ end
end
return nbsp(head,current)
end,
@@ -272,15 +283,16 @@ local methods = {
}
+characters.methods = methods
+
function characters.handler(head) -- todo: use traverse_id
head = tonut(head)
local current = head
local done = false
while current do
- local id = getid(current)
- if id == glyph_code then
- local next = getnext(current)
- local char = getchar(current)
+ local char, id = isglyph(current)
+ if char then
+ local next = getnext(current)
local method = methods[char]
if method then
if trace_characters then
diff --git a/Master/texmf-dist/tex/context/base/spac-chr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-chr.mkiv
index 562fb940ce1..562fb940ce1 100644
--- a/Master/texmf-dist/tex/context/base/spac-chr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-chr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/spac-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-def.mkiv
index 7ead3c63e21..7ead3c63e21 100644
--- a/Master/texmf-dist/tex/context/base/spac-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-def.mkiv
diff --git a/Master/texmf-dist/tex/context/base/spac-flr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-flr.mkiv
index d09a9cf79f3..29351a3dd46 100644
--- a/Master/texmf-dist/tex/context/base/spac-flr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-flr.mkiv
@@ -45,6 +45,7 @@
{\removeunwantedspaces
\begingroup
\edef\currentfiller{#1}%
+ \usefillerstyleandcolor\c!style\c!color
\scratchdimen\fillerparameter\c!leftmargin\relax
\ifdim\scratchdimen=\zeropoint\else
\hskip\scratchdimen
@@ -64,16 +65,26 @@
\setvalue{\??filleralternative\v!symbol}%
{\expandnamespaceparameter\??fillerleadermethod\fillerparameter\c!method\v!local
- \simplealignedbox
- {\fillerparameter\c!width}%
- {\fillerparameter\c!align}%
- {\fillerparameter\c!symbol}%
+ \ifdim\fillerparameter\c!offset>\zeropoint
+ \simplealignedspreadbox
+ {2\dimexpr\fillerparameter\c!offset\relax}%
+ {\fillerparameter\c!align}%
+ {\fillerparameter\c!symbol}%
+ \else
+ \simplealignedbox
+ {\fillerparameter\c!width}%
+ {\fillerparameter\c!align}%
+ {\fillerparameter\c!symbol}%
+ \fi
\hfill}
-\setvalue{\??filleralternative\c!stretch}%
+\setvalue{\??filleralternative\v!stretch}%
{\hfill}
-\setvalue{\??filleralternative\c!rule}%
+\setvalue{\??filleralternative\v!space}%
+ {\hskip\fillerparameter\c!distance\relax}
+
+\setvalue{\??filleralternative\v!rule}%
{\expandnamespaceparameter\??fillerleadermethod\fillerparameter\c!method\v!local
\hrule
\!!height\fillerparameter\c!height
@@ -88,6 +99,8 @@
\setupfillers
[\c!width=\emwidth,
\c!symbol=.,
+ \c!distance=\emwidth,
+ \c!offset=\zeropoint,
\c!align=\v!middle,
\c!height=.1\exheight,
\c!depth=\zeropoint,
@@ -96,6 +109,35 @@
\c!alternative=\v!symbol,
\c!method=\s!local]
+\definefiller
+ [\v!sym]
+ [\c!method=\v!global,
+ \c!width=.5\emwidth,
+ \c!leftmargin=.5\emwidth,
+ \c!rightmargin=.5\emwidth]
+
+\definefiller
+ [\v!symbol]
+ [\c!method=\v!global,
+ \c!offset=.125\emwidth,
+ \c!leftmargin=.5\emwidth,
+ \c!rightmargin=.5\emwidth]
+
+\definefiller
+ [\v!rule]
+ [\c!alternative=\v!rule,
+ \c!leftmargin=.5\emwidth,
+ \c!rightmargin=.5\emwidth]
+
+\definefiller
+ [\v!width]
+ [\c!alternative=\v!stretch]
+
+\definefiller
+ [\v!space]
+ [\c!alternative=\v!space,
+ \c!distance=3\emwidth]
+
% maybe box -> symbol
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-grd.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-grd.mkiv
index 7b3ee6d6ce2..7b3ee6d6ce2 100644
--- a/Master/texmf-dist/tex/context/base/spac-grd.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-grd.mkiv
diff --git a/Master/texmf-dist/tex/context/base/spac-hor.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-hor.lua
index 5d5a43e311c..5d5a43e311c 100644
--- a/Master/texmf-dist/tex/context/base/spac-hor.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-hor.lua
diff --git a/Master/texmf-dist/tex/context/base/spac-hor.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-hor.mkiv
index 54156c3b428..7c5358c5135 100644
--- a/Master/texmf-dist/tex/context/base/spac-hor.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-hor.mkiv
@@ -101,15 +101,41 @@
\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_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}%
+% \else\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\fi}
+%
+% \def\spac_indentation_apply_step_two#1%
+% {\ifcsname\??indentingpreset#1\endcsname
+% \spac_indentation_apply_step_two_nested{#1}%
+% \else\ifcsname\??indentingmethod#1\endcsname
+% \lastnamedcs
+% \else
+% % case one
+% \fi\fi}
+
+\def\spac_indentation_apply_step_one_nested
+ {\expandafter\processcommacommand\expandafter[\lastnamedcs]\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_two_nested
+ {\expandafter\processcommacommand\expandafter[\lastnamedcs]\spac_indentation_apply_step_two}
\def\spac_indentation_apply_step_one#1%
{\ifcsname\??indentingpreset#1\endcsname
- \spac_indentation_apply_step_one_nested{#1}%
+ \spac_indentation_apply_step_one_nested
\else\ifcsname\??indentingmethod#1\endcsname
% case two
\else
@@ -120,9 +146,9 @@
\def\spac_indentation_apply_step_two#1%
{\ifcsname\??indentingpreset#1\endcsname
- \spac_indentation_apply_step_two_nested{#1}%
+ \spac_indentation_apply_step_two_nested
\else\ifcsname\??indentingmethod#1\endcsname
- \csname\??indentingmethod#1\endcsname
+ \lastnamedcs
\else
% case one
\fi\fi}
@@ -154,7 +180,7 @@
\installindentingmethod \v!normal{\ifx\normalindentation\empty\else
\let\v_spac_indentation_current\normalindentation
- \simplesetupindenting
+ \spac_indentation_setup_size
\fi}
\installindentingmethod \v!reset {\settrue\c_spac_indentation_indent_first
@@ -275,12 +301,12 @@
\installcorenamespace{indentnext}
\unexpanded\def\checknextindentation[#1]%
- {\csname\??indentnext\ifcsname\??indentnext#1\endcsname#1\fi\endcsname}
+ {\begincsname\??indentnext#1\endcsname}
\unexpanded\def\useindentnextparameter#1% new, the more efficient variant
{\edef\p_indentnext{#1\c!indentnext}%
\ifx\p_indentnext\empty\else
- \csname\??indentnext\ifcsname\??indentnext\p_indentnext\endcsname\p_indentnext\fi\endcsname
+ \begincsname\??indentnext\p_indentnext\endcsname
\fi}
\letvalue{\??indentnext }\donothing
@@ -389,7 +415,7 @@
{\doifelsenextoptionalcs\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop}
\def\spac_spacecodes_setup_yes[#1]%
- {\csname\??spacecodemethod#1\endcsname
+ {\begincsname\??spacecodemethod#1\endcsname
\updateraggedskips}
\def\spac_spacecodes_setup_nop
@@ -426,16 +452,33 @@
\let\normalspaceprimitive=\ % space-comment is really needed
-% hm ...
+%D As the \type{\ } is convenient in:
+%D
+%D \starttyping
+%D \TEX\space x\crlf
+%D \TEX\ x\crlf
+%D \TEX{} x\crlf
+%D \stoptyping
+%D
+%D from now on we treat it as a normal space and not as a space with \type
+%D {sfcode} 1000.
+
+\unexpanded\def\specialspaceprimitive
+ {\begingroup
+ % so, no fancy extra spacing after: foo i.e.\ bar
+ \nonfrenchspacing\normalspaceprimitive
+ \endgroup}
+
+\unexpanded\def\normalnotobeyedspace
+ {\mathortext\normalspaceprimitive\specialspaceprimitive} % no \dontleavehmode\space (else no frenchspacing)
-% \unexpanded\def\normalnotobeyedspace{\mathortext\normalspaceprimitive\space} % no \dontleavehmode\space (else no frenchspacing)
-% \let\ =\normalnotobeyedspace
+\let\ =\normalnotobeyedspace
% Because I strip spaces at the end of lines (in the editor) we need a bit of
% a trick to define slash+newline, so \space and \<newline> are the same
% We need to be careful with \ and \space and the definition of ~ which uses \ as
-% we need to associate unicode spacing with it. There is some messy thing that that
+% we need to associate unicode spacing with it. There is some messy aspect that
% I forgot to note down so I will revision the \ once I ran into it again.
% \ruledhbox spread 10pt {\frenchspacing xx xx\ X}
@@ -460,7 +503,17 @@
\unexpanded\def\removelastspace{\ifhmode\unskip\fi}
\unexpanded\def\nospace {\removelastspace\ignorespaces}
-\ifdefined\softhyphen \else \let\softhyphen\- \fi
+\ifdefined\nospaces
+ \unexpanded\def\nospacing{\normalnospaces\plusone}
+ \unexpanded\def\dospacing{\normalnospaces\zerocount}
+\else
+ \unexpanded\def\nospacing{\spaceskip\scaledpoint \xspaceskip\zeropoint}
+ \unexpanded\def\dospacing{\spaceskip\currentspaceskip\xspaceskip\zeropoint} % what
+\fi
+
+\ifdefined\softhyphen \else
+ \let\softhyphen\-
+\fi
\cldcontext{"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}"}
%cldcontext{"\string\\let\string\\\string\n=\string\\space"}
@@ -598,7 +651,7 @@
\unexpanded\def\spac_narrower_method_analyze#1%
{\ifcsname\??narrowermethod#1\endcsname
- \csname\??narrowermethod#1\endcsname
+ \lastnamedcs
\else
\global\advance\s_spac_narrower_mid#1\relax
\fi}
@@ -736,8 +789,11 @@
\letvalue{\??skipadaptionright\v!no }\zeropoint
\letvalue{\??skipadaptionright\empty }\zeropoint
-\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}
+% \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}
+
+\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}
\unexpanded\def\doadaptleftskip #1{\normalexpanded{\dosetleftskipadaption {#1}}\advance\leftskip \leftskipadaption }
\unexpanded\def\doadaptrightskip#1{\normalexpanded{\dosetrightskipadaption{#1}}\advance\rightskip\rightskipadaption}
@@ -774,11 +830,16 @@
\installtolerancemethod \v!horizontal \v!stretch {\emergencystretch\bodyfontsize}
\installtolerancemethod \v!horizontal \v!space {\spaceskip.5em\s!plus.25em\s!minus.25em\relax}
-\installtolerancemethod \v!horizontal \v!verystrict {\tolerance 200 }
+\installtolerancemethod \v!horizontal \v!verystrict {\tolerance\plustwohundred}
\installtolerancemethod \v!horizontal \v!strict {\tolerance1500 }
\installtolerancemethod \v!horizontal \v!tolerant {\tolerance3000 }
\installtolerancemethod \v!horizontal \v!verytolerant {\tolerance4500 }
+\appendetoks
+ \pretolerance\plushundred
+ \tolerance \plustwohundred
+\to\everyforgetall
+
\def\spac_tolerances_step_vertical #1{\csname\??tolerancemethods\v!vertical :#1\endcsname}
\def\spac_tolerances_step_horizontal#1{\csname\??tolerancemethods\v!horizontal:#1\endcsname}
@@ -919,9 +980,10 @@
\fi}
\def\hspaceamount#1#2%
- {\csname\??hspace
- \ifcsname\??hspace#1:#2\endcsname#1:#2\else:\v!none\fi
- \endcsname}
+ {\dimexpr\ifcsname\??hspace#1:#2\endcsname\lastnamedcs\else\zeropoint\fi\relax}
+
+\def\directhspaceamount#1%
+ {\dimexpr\ifcsname\??hspace :#1\endcsname\lastnamedcs\else\zeropoint\fi\relax}
% no installhspace here (this is already an old command)
diff --git a/Master/texmf-dist/tex/context/base/spac-lin.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv
index 20fec5d4537..c4c6eb6d9eb 100644
--- a/Master/texmf-dist/tex/context/base/spac-lin.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv
@@ -137,8 +137,19 @@
\unexpanded\def\emptylines
{\dosingleempty\spac_lines_empty}
+% \def\spac_lines_empty[#1]%
+% {\endgraf
+% \dorecurse{\iffirstargument#1\else3\fi}\crlf}
+
\def\spac_lines_empty[#1]%
- {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf}
+ {\endgraf
+ \begingroup
+ %\forgetall % debatable
+ \ifhmode
+ \crlf % finish the current line
+ \fi
+ \dorecurse{\iffirstargument#1\else3\fi}{\strut\crlf}%
+ \endgroup}
\ifdefined\startlines \else
\expandafter\let\expandafter\startlines\csname\e!start\v!lines\endcsname
diff --git a/Master/texmf-dist/tex/context/base/spac-pag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-pag.mkiv
index 1ecc31d8cd5..c7d22f0e0c5 100644
--- a/Master/texmf-dist/tex/context/base/spac-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-pag.mkiv
@@ -163,7 +163,7 @@
\doforcedtrackpagestate{#2}{#3}%
\edef\m_spac_pagestates_realpage{\pagestaterealpage{#2}{\number#3}}%
\ifx\m_spac_pagestates_realpage\empty \else
- \ifnum\m_spac_pagestates_realpage>0\getvalue{\??pagechanges#2:#1}\relax
+ \ifnum\m_spac_pagestates_realpage>0\csname\??pagechanges#2:#1\endcsname\relax
\pagechangedtrue
\fi
\fi
diff --git a/Master/texmf-dist/tex/context/base/spac-par.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-par.mkiv
index 4dd3db24338..4dd3db24338 100644
--- a/Master/texmf-dist/tex/context/base/spac-par.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-par.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/spac-prf.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-prf.lua
new file mode 100644
index 00000000000..39d90794cce
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-prf.lua
@@ -0,0 +1,943 @@
+ if not modules then modules = { } end modules ['spac-prf'] = {
+ version = 1.001,
+ comment = "companion to spac-prf.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is a playground, a byproduct of some experiments in a project where
+-- we needed something like this where it works ok, but nevertheless it's
+-- still experimental code. It is very likely to change (or extended).
+
+local unpack, rawget = unpack, rawget
+
+local formatters = string.formatters
+
+local nodecodes = nodes.nodecodes
+local gluecodes = nodes.gluecodes
+local listcodes = nodes.listcodes
+
+local glyph_code = nodecodes.glyph
+local disc_code = nodecodes.disc
+local kern_code = nodecodes.kern
+local penalty_code = nodecodes.penalty
+local glue_code = nodecodes.glue
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local unset_code = nodecodes.unset
+local math_code = nodecodes.math
+local rule_code = nodecodes.rule
+local marginkern_code = nodecodes.marginkern
+
+local leaders_code = gluecodes.leaders
+local lineskip_code = gluecodes.lineskip
+local baselineskip_code = gluecodes.baselineskip
+local line_code = listcodes.line
+local parskip_code = listcodes.parskip
+
+local texlists = tex.lists
+local gettexdimen = tex.getdimen
+local settexattribute = tex.setattribute
+local settexbox = tex.setbox
+local taketexbox = tex.takebox
+
+local nuts = nodes.nuts
+local tonut = nodes.tonut
+local tonode = nuts.tonode
+
+local getfield = nuts.getfield
+local getattr = nuts.getattr
+local getid = nuts.getid
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getsubtype = nuts.getsubtype
+local getlist = nuts.getlist
+local gettexbox = nuts.getbox
+
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setlist = nuts.setlist
+local setattr = nuts.setattr
+
+local theprop = nuts.theprop
+
+local floor = math.floor
+local ceiling = math.ceil
+
+local new_rule = nuts.pool.rule
+local new_glue = nuts.pool.glue
+local new_kern = nuts.pool.kern
+local hpack_nodes = nuts.hpack
+local link_nodes = nuts.link
+local find_node_tail = nuts.tail
+local setglue = nuts.setglue
+
+local properties = nodes.properties.data
+
+local a_visual = attributes.private("visual")
+local a_snapmethod = attributes.private("snapmethod")
+local a_profilemethod = attributes.private("profilemethod")
+local a_specialcontent = attributes.private("specialcontent")
+
+local variables = interfaces.variables
+local v_none = variables.none
+local v_fixed = variables.fixed
+local v_strict = variables.strict
+
+local setcolor = nodes.tracers.colors.set
+local settransparency = nodes.tracers.transparencies.set
+
+local profiling = { }
+builders.profiling = profiling
+
+local report = logs.reporter("profiling")
+
+local show_profile = false trackers.register("profiling.show", function(v) show_profile = v end)
+local trace_profile = false trackers.register("profiling.trace",function(v) trace_profile = v end)
+
+local function getprofile(line,step)
+
+ -- only l2r
+ -- no hz yet
+
+ local line = tonut(line)
+ local current = getlist(line)
+
+ if not current then
+ return
+ end
+
+ local glue_sign = getfield(line,"glue_sign")
+ local glue_order = getfield(line,"glue_order")
+ local glue_set = getfield(line,"glue_set")
+
+ local heights = { }
+ local depths = { }
+ local width = 0
+ local position = 0
+ local step = step or 65536 -- * 2 -- 2pt
+ local margin = step / 4
+ local min = 0
+ local max = ceiling(getfield(line,"width")/step) + 1
+
+ for i=min,max do
+ heights[i] = 0
+ depths [i] = 0
+ end
+
+ -- remember p
+
+ local wd, ht, dp = 0, 0, 0
+
+ local function progress()
+ position = width
+ width = position + wd
+ p = floor((position - margin)/step + 0.5)
+ w = floor((width + margin)/step - 0.5)
+ if p < 0 then
+ p = 0
+ end
+ if w < 0 then
+ w = 0
+ end
+ if p > w then
+ w, p = p, w
+ end
+ if w > max then
+ for i=max+1,w+1 do
+ heights[i] = 0
+ depths [i] = 0
+ end
+ max = w
+ end
+ for i=p,w do
+ if ht > heights[i] then
+ heights[i] = ht
+ end
+ if dp > depths[i] then
+ depths[i] = dp
+ end
+ end
+ end
+
+ local function process(current) -- called nested in disc replace
+ while current do
+ local id = getid(current)
+ if id == glyph_code then
+ wd = getfield(current,"width")
+ ht = getfield(current,"height")
+ dp = getfield(current,"depth")
+ progress()
+ elseif id == kern_code then
+ wd = getfield(current,"kern")
+ ht = 0
+ dp = 0
+ progress()
+ elseif id == disc_code then
+ local replace = getfield(current,"replace")
+ if replace then
+ process(replace)
+ end
+ elseif id == glue_code then
+ wd = getfield(current,"width")
+ if glue_sign == 1 then
+ if getfield(current,"stretch_order") == glue_order then
+ wd = wd + getfield(current,"stretch") * glue_set
+ end
+ elseif glue_sign == 2 then
+ if getfield(current,"shrink_order") == glue_order then
+ wd = wd - getfield(current,"shrink") * glue_set
+ end
+ end
+ if getsubtype(current) >= leaders_code then
+ local leader = getleader(current)
+ ht = getfield(leader,"height")
+ dp = getfield(leader,"depth")
+ else
+ ht = 0
+ dp = 0
+ end
+ progress()
+ elseif id == hlist_code then
+ -- we could do a nested check .. but then we need to push / pop glue
+ local shift = getfield(current,"shift")
+ wd = getfield(current,"width")
+ if getattr(current,a_specialcontent) then
+ -- like a margin note, maybe check for wd
+ ht = 0
+ dp = 0
+ else
+ ht = getfield(current,"height") - shift
+ dp = getfield(current,"depth") + shift
+ end
+ progress()
+ elseif id == vlist_code or id == unset_code then
+ local shift = getfield(current,"shift") -- todo
+ wd = getfield(current,"width")
+ ht = getfield(current,"height") -- - shift
+ dp = getfield(current,"depth") -- + shift
+ progress()
+ elseif id == rule_code then
+ wd = getfield(current,"width")
+ ht = getfield(current,"height")
+ dp = getfield(current,"depth")
+ progress()
+ elseif id == math_code then
+ wd = getfield(current,"surround")
+ ht = 0
+ dp = 0
+ progress()
+ elseif id == marginkern_code then
+ wd = getfield(current,"width")
+ ht = 0
+ dp = 0
+ progress()
+ else
+-- print(nodecodes[id])
+ end
+ current = getnext(current)
+ end
+ end
+
+ process(current)
+
+ return {
+ heights = heights,
+ depths = depths,
+ min = min, -- not needed
+ max = max,
+ step = step,
+ }
+
+end
+
+profiling.get = getprofile
+
+local function getpagelist()
+ local pagehead = texlists.page_head
+ if pagehead then
+ pagehead = tonut(texlists.page_head)
+ pagetail = find_node_tail(pagehead)
+ else
+ pagetail = nil
+ end
+ return pagehead, pagetail
+end
+
+local function setprofile(n,step)
+ local p = rawget(properties,n)
+ if p then
+ local pp = p.profile
+ if not pp then
+ pp = getprofile(n,step)
+ p.profile = pp
+ end
+ return pp
+ else
+ local pp = getprofile(n,step)
+ properties[n] = { profile = pp }
+ return pp
+ end
+end
+
+local function hasprofile(n)
+ local p = rawget(properties,n)
+ if p then
+ return p.profile
+ end
+end
+
+local function addstring(height,depth)
+ local typesetters = nuts.typesetters
+ local hashes = fonts.hashes
+ local infofont = fonts.infofont()
+ local emwidth = hashes.emwidths [infofont]
+ local exheight = hashes.exheights[infofont]
+ local httext = height
+ local dptext = depth
+ local httext = typesetters.tohpack(height,infofont)
+ local dptext = typesetters.tohpack(depth,infofont)
+ setfield(httext,"shift",- 1.2 * exheight)
+ setfield(dptext,"shift", 0.6 * exheight)
+ local text = nuts.hpack(
+ nuts.linked(
+ new_kern(-getfield(httext,"width")-emwidth),
+ httext,
+ new_kern(-getfield(dptext,"width")),
+ dptext
+ )
+ )
+ setfield(text,"height",0)
+ setfield(text,"depth",0)
+ setfield(text,"width",0)
+ return text
+end
+
+local function addprofile(node,profile,step)
+
+ local line = tonut(node)
+
+ if not profile then
+ profile = setprofile(line,step)
+ end
+
+ if not profile then
+ report("some error")
+ return node
+ end
+
+ if profile.shown then
+ return node
+ end
+
+ local list = getlist(line)
+ profile.shown = true
+
+ local heights = profile.heights
+ local depths = profile.depths
+ local step = profile.step
+
+ local head = nil
+ local tail = nil
+
+ local lastht = 0
+ local lastdp = 0
+ local lastwd = 0
+
+ local visual = "f:s:t" -- this can change !
+
+ local function progress()
+ if lastwd == 0 then
+ return
+ end
+ local what = nil
+ if lastht == 0 and lastdp == 0 then
+ what = new_kern(lastwd)
+ else
+ what = new_rule(lastwd,lastht,lastdp)
+ setcolor(what,visual)
+ settransparency(what,visual)
+ end
+ if tail then
+ setlink(tail,what)
+ else
+ head = what
+ end
+ tail = what
+ end
+
+-- inspect(profile)
+
+ for i=profile.min,profile.max do
+ local ht = heights[i]
+ local dp = depths[i]
+ if ht ~= lastht or dp ~= lastdp and lastwd > 0 then
+ progress()
+ lastht = ht
+ lastdp = dp
+ lastwd = step
+ else
+ lastwd = lastwd + step
+ end
+ end
+ if lastwd > 0 then
+ progress()
+ end
+
+ local rule = hpack_nodes(head)
+
+ setfield(rule,"width", 0)
+ setfield(rule,"height",0)
+ setfield(rule,"depth", 0)
+
+ -- if texttoo then
+ --
+ -- local text = addstring(
+ -- formatters["%0.4f"](getfield(rule,"height")/65536),
+ -- formatters["%0.4f"](getfield(rule,"depth") /65536)
+ -- )
+ --
+ -- setlink(text,rule)
+ --
+ -- rule = text
+ --
+ -- end
+
+ setlink(rule,list)
+ setlist(line,rule)
+
+end
+
+profiling.add = addprofile
+
+local methods = { }
+
+local function getdelta(t_profile,b_profile)
+ local t_heights = t_profile.heights
+ local t_depths = t_profile.depths
+ local t_max = t_profile.max
+ local b_heights = b_profile.heights
+ local b_depths = b_profile.depths
+ local b_max = b_profile.max
+
+ local max = t_max
+ local delta = 0
+
+ if t_max > b_max then
+ for i=b_max+1,t_max do
+ b_depths [i] = 0
+ b_heights[i] = 0
+ end
+ max = t_max
+ elseif b_max > t_max then
+ for i=t_max+1,b_max do
+ t_depths [i] = 0
+ t_heights[i] = 0
+ end
+ max = b_max
+ end
+
+ for i=0,max do
+ local ht = b_heights[i]
+ local dp = t_depths[i]
+ local hd = ht + dp
+ if hd > delta then
+ delta = hd
+ end
+ end
+
+ return delta
+end
+
+-- local properties = theprop(bot)
+-- local unprofiled = properties.unprofiled
+-- if not unprofiled then -- experiment
+-- properties.unprofiled = {
+-- height = height,
+-- strutht = strutht,
+-- }
+-- end
+
+-- lineskip | lineskiplimit
+
+local function inject(top,bot,amount) -- todo: look at penalties
+ local glue = new_glue(amount)
+ --
+ setattr(glue,a_profilemethod,0)
+ setattr(glue,a_visual,getattr(top,a_visual))
+ --
+ setlink(glue,bot)
+ setlink(top,glue)
+end
+
+methods[v_none] = function()
+ return false
+end
+
+methods[v_strict] = function(top,bot,t_profile,b_profile,specification)
+
+ local top = tonut(top)
+ local bot = tonut(bot)
+
+ local strutht = specification.height or texdimen.strutht
+ local strutdp = specification.depth or texdimen.strutdp
+ local lineheight = strutht + strutdp
+
+ local depth = getfield(top,"depth")
+ local height = getfield(bot,"height")
+ local total = depth + height
+ local distance = specification.distance or 0
+ local delta = lineheight - total
+
+ -- there is enough room between the lines so we don't need
+ -- to add extra distance
+
+ if delta >= distance then
+ inject(top,bot,delta)
+ return true
+ end
+
+ local delta = getdelta(t_profile,b_profile)
+ local skip = delta - total + distance
+
+ -- we don't want to be too tight so we limit the skip and
+ -- make sure we have at least lineheight
+
+ inject(top,bot,skip)
+ return true
+
+end
+
+-- todo: also set ht/dp of first / last (but what is that)
+
+methods[v_fixed] = function(top,bot,t_profile,b_profile,specification)
+
+ local top = tonut(top)
+ local bot = tonut(bot)
+
+ local strutht = specification.height or texdimen.strutht
+ local strutdp = specification.depth or texdimen.strutdp
+ local lineheight = strutht + strutdp
+
+ local depth = getfield(top,"depth")
+ local height = getfield(bot,"height")
+ local total = depth + height
+ local distance = specification.distance or 0
+ local delta = lineheight - total
+
+ local snapmethod = getattr(top,a_snapmethod)
+
+ if snapmethod then
+
+ -- no distance (yet)
+
+ if delta < lineheight then
+ setfield(top,"depth",strutdp)
+ setfield(bot,"height",strutht)
+ return true
+ end
+
+ local delta = getdelta(t_profile,b_profile)
+
+ local dp = strutdp
+ while depth > lineheight - strutdp do
+ depth = depth - lineheight
+ dp = dp + lineheight
+ end
+ setfield(top,"depth",dp)
+ local ht = strutht
+ while height > lineheight - strutht do
+ height = height - lineheight
+ ht = ht + lineheight
+ end
+ setfield(bot,"height",ht)
+ local lines = floor(delta/lineheight)
+ if lines > 0 then
+ inject(top,bot,-lines * lineheight)
+ end
+
+ return true
+
+ end
+
+ if total < lineheight then
+ setfield(top,"depth",strutdp)
+ setfield(bot,"height",strutht)
+ return true
+ end
+
+ if depth < strutdp then
+ setfield(top,"depth",strutdp)
+ total = total - depth + strutdp
+ end
+ if height < strutht then
+ setfield(bot,"height",strutht)
+ total = total - height + strutht
+ end
+
+ local delta = getdelta(t_profile,b_profile)
+
+ local target = total - delta
+ local factor = specification.factor or 1
+ local step = lineheight / factor
+ local correction = 0
+ local nofsteps = 0
+ while correction < target - step - distance do -- a loop is more accurate, for now
+ correction = correction + step
+ nofsteps = nofsteps + 1
+ end
+
+ if trace_profile then
+ report("top line : %s %05i > %s",t_profile.shown and "+" or "-",top,nodes.toutf(getlist(top)))
+ report("bottom line : %s %05i > %s",b_profile.shown and "+" or "-",bot,nodes.toutf(getlist(bot)))
+ report(" depth : %p",depth)
+ report(" height : %p",height)
+ report(" total : %p",total)
+ report(" lineheight : %p",lineheight)
+ report(" delta : %p",delta)
+ report(" target : %p",target)
+ report(" factor : %i",factor)
+ report(" distance : %p",distance)
+ report(" step : %p",step)
+ report(" nofsteps : %i",nofsteps)
+ -- report(" max lines : %s",lines == 0 and "unset" or lines)
+ report(" correction : %p",correction)
+ end
+
+ inject(top,bot,-correction) -- we could mess with the present glue (if present)
+
+ return true -- remove interlineglue
+
+end
+
+function profiling.distance(top,bot,specification)
+ local step = specification.step
+ local method = specification.method
+ local ptop = getprofile(top,step)
+ local pbot = getprofile(bot,step)
+ local action = methods[method or v_strict] or methods[v_strict]
+ return action(top,bot,ptop,pbot,specification)
+end
+
+local specifications = { } -- todo: save these !
+
+function profiling.fixedprofile(current)
+ local a = getattr(current,a_profilemethod)
+ if a then
+ local s = specifications[a]
+ if s then
+ return s.method == v_fixed
+ end
+ end
+ return false
+end
+
+local function profilelist(line,mvl)
+
+ local current = tonut(line)
+
+ local top = nil
+ local bot = nil
+
+ local t_profile = nil
+ local b_profile = nil
+
+ local specification = nil
+ local lastattr = nil
+ local method = nil
+ local action = nil
+
+ local distance = 0
+ local lastglue = nil
+
+ local pagehead = nil
+ local pagetail = nil
+
+ if mvl then
+
+ pagehead, pagetail = getpagelist()
+
+ if pagetail then
+ local current = pagetail
+ while current do
+ local id = getid(current)
+ if id == hlist_code then
+ local subtype = getsubtype(current)
+ if subtype == line_code then
+ t_profile = hasprofile(current)
+ if t_profile then
+ top = current
+ end
+ end
+ break
+ elseif id == glue_code then
+ local wd = getfield(current,"width")
+ if not wd or wd == 0 then
+ -- go on
+ else
+ break
+ end
+ elseif id == penalty_code then
+ -- ok
+ else
+ break
+ end
+ current = getnext(current)
+ end
+ end
+
+ end
+
+ while current do
+
+ local attr = getattr(current,a_profilemethod)
+
+ if attr then
+
+ if attr ~= lastattr then
+ specification = specifications[attr]
+ method = specification and specification.method
+ action = method and methods[method] or methods[v_strict]
+ lastattr = attr
+ end
+
+ local id = getid(current)
+
+ if id == hlist_code then -- check subtype
+ local subtype = getsubtype(current)
+ if subtype == line_code then
+ if top == current then
+ -- skip
+ bot = nil -- to be sure
+ elseif top then
+ bot = current
+ b_profile = setprofile(bot)
+ if show_profile then
+ addprofile(bot,b_profile)
+ end
+ if not t_profile.done then
+ if action then
+ local ok = action(top,bot,t_profile,b_profile,specification)
+ if ok and lastglue and distance ~= 0 then
+ setglue(lastglue)
+ end
+ end
+ t_profile.done = true
+ end
+ top = bot
+ bot = nil
+ t_profile = b_profile
+ b_profile = nil
+ distance = 0
+ else
+ top = current
+ t_profile = setprofile(top)
+ bot = nil
+ if show_profile then
+ addprofile(top,t_profile)
+ end
+ end
+ else
+ top = nil
+ bot = nil
+ end
+ elseif id == glue_code then
+ if top then
+ local subtype = getsubtype(current)
+ -- if subtype == lineskip_code or subtype == baselineskip_code then
+ local wd = getfield(current,"width")
+ if wd > 0 then
+ distance = wd
+ lastglue = current
+ elseif wd < 0 then
+ top = nil
+ bot = nil
+ else
+ -- ok
+ end
+ -- else
+ -- top = nil
+ -- bot = nil
+ -- end
+ else
+ top = nil
+ bot = nil
+ end
+ elseif id == penalty_code then
+ -- okay
+ else
+ top = nil
+ bot = nil
+ end
+ else
+ top = nil
+ bot = nil
+ end
+ current = getnext(current)
+ end
+ if top then
+ t_profile = setprofile(top)
+ if show_profile then
+ addprofile(top,t_profile)
+ end
+ end
+end
+
+profiling.list = profilelist
+
+local enabled = false
+
+function profiling.set(specification)
+ if not enabled then
+ nodes.tasks.enableaction("mvlbuilders", "builders.profiling.pagehandler")
+ -- too expensive so we expect that this happens explicitly, we keep for reference:
+ -- nodes.tasks.enableaction("vboxbuilders","builders.profiling.vboxhandler")
+ enabled = true
+ end
+ local n = #specifications + 1
+ specifications[n] = specification
+ settexattribute(a_profilemethod,n)
+end
+
+function profiling.profilebox(specification)
+ local boxnumber = specification.box
+ local current = getlist(gettexbox(boxnumber))
+ local top = nil
+ local bot = nil
+ local t_profile = nil
+ local b_profile = nil
+ local method = specification and specification.method
+ local action = method and methods[method] or methods[v_strict]
+ local lastglue = nil
+ local distance = 0
+ while current do
+ local id = getid(current)
+ if id == hlist_code then
+ local subtype = getsubtype(current)
+ if subtype == line_code then
+ if top then
+ bot = current
+ b_profile = setprofile(bot)
+ if show_profile then
+ addprofile(bot,b_profile)
+ end
+ if not t_profile.done then
+ if action then
+ local ok = action(top,bot,t_profile,b_profile,specification)
+ if ok and lastglue and distance ~= 0 then
+ setglue(lastglue)
+ end
+ end
+ t_profile.done = true
+ end
+ top = bot
+ t_profile = b_profile
+ b_profile = nil
+ distance = 0
+ else
+ top = current
+ t_profile = setprofile(top)
+ if show_profile then
+ addprofile(top,t_profile)
+ end
+ bot = nil
+ end
+ else
+ top = nil
+ bot = nil
+ end
+ elseif id == glue_code then
+ local subtype = getsubtype(current)
+ if subtype == lineskip_code or subtype == baselineskip_code then
+ if top then
+ local wd = getfield(current,"width")
+ if wd > 0 then
+ distance = wd
+ lastglue = current
+ elseif wd < 0 then
+ top = nil
+ bot = nil
+ else
+ -- ok
+ end
+ else
+ top = nil
+ bot = nil
+ end
+ else
+ top = nil
+ bot = nil
+ end
+ elseif id == penalty_code then
+ -- okay
+ else
+ top = nil
+ bot = nil
+ end
+ current = getnext(current)
+ end
+
+ if top then
+ t_profile = setprofile(top) -- not needed
+ if show_profile then
+ addprofile(top,t_profile)
+ end
+ end
+
+end
+
+local ignore = table.tohash {
+ "split_keep",
+ "split_off",
+ -- "vbox",
+}
+
+-- function profiling.vboxhandler(head,where)
+-- if head and not ignore[where] then
+-- local h = tonut(head)
+-- if getnext(h) then
+-- profilelist(h)
+-- end
+-- end
+-- return head
+-- end
+
+function profiling.pagehandler(head)
+ if head then
+ profilelist(head,true)
+ end
+ return head, true
+end
+
+interfaces.implement {
+ name = "setprofile",
+ actions = profiling.set,
+ arguments = {
+ {
+ { "name" },
+ { "height", "dimen" },
+ { "depth", "dimen" },
+ { "distance", "dimen" },
+ { "factor", "integer" },
+ { "lines", "integer" },
+ { "method" }
+ }
+ }
+}
+
+interfaces.implement {
+ name = "profilebox",
+ actions = profiling.profilebox,
+ arguments = {
+ {
+ { "box", "integer" },
+ { "height", "dimen" },
+ { "depth", "dimen" },
+ { "distance", "dimen" },
+ { "factor", "integer" },
+ { "lines", "integer" },
+ { "method" }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/spac-prf.mkvi b/Master/texmf-dist/tex/context/base/mkiv/spac-prf.mkvi
new file mode 100644
index 00000000000..8d150f58d4d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-prf.mkvi
@@ -0,0 +1,117 @@
+%D \module
+%D [ file=spac-prf,
+%D version=2015.11.16, % moved from test module mathplus
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Profiling,
+%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 Spacing Macros / Profiling}
+
+%D This is experimental code that we need for a project. The interface and
+%D details can change. I moved it into the core because that way we can use
+%D it on servers.
+
+% framed: first reflow then profile
+
+\unprotect
+
+\registerctxluafile{spac-prf}{1.001}
+
+\definesystemattribute[profilemethod][public]
+
+\installcorenamespace {profile} % beware, profiles are not like in mkii at all
+\installcorenamespace {profiles}
+
+\installcommandhandler \??profile {profile} \??profile
+
+\setupprofile
+ [\c!height=\strutht,
+ \c!depth=\strutdp,
+ \c!distance=\normallineskip,
+ \c!lines=\zerocount,
+ \c!factor=\plusone]
+
+\defineprofile
+ [\v!strict]
+ [\c!method=\v!strict]
+
+\defineprofile
+ [\v!fixed]
+ [\c!method=\v!fixed]
+
+\defineprofile
+ [\v!none]
+ [\c!method=\v!none,
+ \c!height=\zeropoint,
+ \c!depth=\zeropoint,
+ \c!distance=\zeropoint,
+ \c!factor=\plusone]
+
+\defineprofile[halffixed] [\v!fixed][\c!factor=\plustwo]
+\defineprofile[quarterfixed][\v!fixed][\c!factor=\plusfour]
+\defineprofile[eightsfixed] [\v!fixed][\c!factor=\pluseight]
+
+\unexpanded\def\setprofile[#profile]%
+ {\edef\currentprofile{#profile}%
+ \clf_setprofile
+ name {\currentprofile}%
+ height \dimexpr\profileparameter\c!height\relax
+ depth \dimexpr\profileparameter\c!depth\relax
+ distance \dimexpr\profileparameter\c!distance\relax
+ factor \numexpr\profileparameter\c!factor\relax
+ lines \numexpr\profileparameter\c!lines\relax
+ method {\profileparameter\c!method}%
+ \relax}
+
+\unexpanded\def\resetprofile
+ {\attribute\profilemethodattribute\attributeunsetvalue}
+
+\unexpanded\def\useprofileparameter#getparameter%
+ {\edef\m_spac_profile_asked{#getparameter\c!profile}%
+ \ifx\m_spac_profile_asked\empty
+ \resetprofile
+ \else
+ \setprofile[\m_spac_profile_asked]%
+ \fi}
+
+\unexpanded\def\profiledbox
+ {\vbox\bgroup
+ \dodoubleempty\spac_profiling_box}
+
+\def\spac_profiling_box[#profile][#settings]%
+ {\ifsecondargument
+ \edef\currentprofile{#profile}%
+ \setupcurrentprofile[#settings]%
+ \else
+ \doifassignmentelse{#profile}
+ {\let\currentprofile\v!none
+ \setupcurrentprofile[#profile]}%
+ {\edef\currentprofile{#profile}}%
+ \fi
+ \dowithnextbox
+ {\profilegivenbox\currentprofile\nextbox
+ \unvbox\nextbox
+ \egroup}%
+ \vbox}
+
+\unexpanded\def\profilegivenbox#profile#box%
+ {\begingroup
+ \edef\currentprofile{#profile}%
+ \clf_profilebox
+ box \numexpr#box\relax
+ height \dimexpr\profileparameter\c!height\relax
+ depth \dimexpr\profileparameter\c!depth\relax
+ distance \dimexpr\profileparameter\c!distance\relax
+ factor \numexpr\profileparameter\c!factor\relax
+ lines \numexpr\profileparameter\c!lines\relax
+ method {\profileparameter\c!method}%
+ \relax
+ \endgroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-ver.lua b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.lua
index d1cf09e17a9..e81e8b81d16 100644
--- a/Master/texmf-dist/tex/context/base/spac-ver.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.lua
@@ -15,6 +15,9 @@ if not modules then modules = { } end modules ['spac-ver'] = {
-- 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
@@ -36,22 +39,22 @@ local allocate = utilities.storage.allocate
local todimen = string.todimen
local formatters = string.formatters
-local P, C, R, S, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc
+local P, C, R, S, Cc, Carg = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc, lpeg.Carg
-local nodes = nodes
-local node = node
-local trackers = trackers
-local attributes = attributes
-local context = context
-local tex = tex
+local nodes = nodes
+local node = node
+local trackers = trackers
+local attributes = attributes
+local context = context
+local tex = tex
-local texlists = tex.lists
-local texgetdimen = tex.getdimen
-local texsetdimen = tex.setdimen
-local texnest = tex.nest
+local texlists = tex.lists
+local texgetdimen = tex.getdimen
+local texsetdimen = tex.setdimen
+local texnest = tex.nest
-local variables = interfaces.variables
-local implement = interfaces.implement
+local variables = interfaces.variables
+local implement = interfaces.implement
-- vertical space handler
@@ -75,6 +78,7 @@ local a_skiporder = attributes.private('skiporder')
----- snap_category = attributes.private('snapcategory')
local a_snapmethod = attributes.private('snapmethod')
local a_snapvbox = attributes.private('snapvbox')
+local a_profilemethod = attributes.private("profilemethod")
local nuts = nodes.nuts
local tonode = nuts.tonode
@@ -84,9 +88,11 @@ local ntostring = nuts.tostring
local getfield = nuts.getfield
local setfield = nuts.setfield
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 setattr = nuts.setattr
local getsubtype = nuts.getsubtype
@@ -95,7 +101,6 @@ local getbox = nuts.getbox
local find_node_tail = nuts.tail
local free_node = nuts.free
local free_node_list = nuts.flush_list
-local copy_node = nuts.copy
local traverse_nodes = nuts.traverse
local traverse_nodes_id = nuts.traverse_id
local insert_node_before = nuts.insert_before
@@ -104,9 +109,11 @@ local remove_node = nuts.remove
local count_nodes = nuts.count
local hpack_node = nuts.hpack
local vpack_node = nuts.vpack
-local writable_spec = nuts.writable_spec
+----- writable_spec = nuts.writable_spec
local nodereference = nuts.reference
+local theprop = nuts.theprop
+
local listtoutf = nodes.listtoutf
local nodeidstostring = nodes.idstostring
@@ -115,19 +122,27 @@ local nodepool = nuts.pool
local new_penalty = nodepool.penalty
local new_kern = nodepool.kern
local new_rule = nodepool.rule
-local new_glue = nodepool.glue
-local new_gluespec = nodepool.gluespec
local nodecodes = nodes.nodecodes
local skipcodes = nodes.skipcodes
-local whatsitcodes = nodes.whatsitcodes
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 whatsit_code = nodecodes.whatsit
+local localpar_code = nodecodes.localpar
+
+local userskip_code = skipcodes.userskip
+local lineskip_code = skipcodes.lineskip
+local baselineskip_code = skipcodes.baselineskip
+local parskip_code = skipcodes.parskip
+local abovedisplayskip_code = skipcodes.abovedisplayskip
+local belowdisplayskip_code = skipcodes.belowdisplayskip
+local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip
+local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip
+local topskip_code = skipcodes.topskip
+local splittopskip_code = skipcodes.splittopskip
local vspacing = builders.vspacing or { }
builders.vspacing = vspacing
@@ -224,7 +239,7 @@ end
local function validvbox(parentid,list)
if parentid == hlist_code then
local id = getid(list)
- if id == whatsit_code then -- check for initial par subtype
+ if id == localpar_code then -- check for initial par subtype
list = getnext(list)
if not next then
return nil
@@ -259,7 +274,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 == whatsit_code then -- check for initial par subtype
+ if id == localpar_code then -- check for initial par subtype
list = getnext(list)
if not next then
return false
@@ -276,7 +291,7 @@ local function already_done(parentid,list,a_snapmethod) -- todo: done when only
elseif a == 0 then
return true -- already snapped
end
- elseif id == glue_code or id == penalty_code then -- whatsit is weak spot
+ elseif id == glue_code or id == penalty_code then
-- go on
else
return false -- whatever
@@ -307,7 +322,15 @@ 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.strut is default
+ if fixedprofile(current) then
+ return
+ end
local list = getlist(current)
local t = trace_vsnapping and { }
if t then
@@ -359,6 +382,17 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
local plusdp = snapdp
local snaphtdp = snapht + snapdp
+-- local properties = theprop(current)
+-- local unsnapped = properties.unsnapped
+-- if not unsnapped then -- experiment
+-- properties.unsnapped = {
+-- height = h,
+-- depth = d,
+-- snapht = snapht,
+-- snapdp = snapdp,
+-- }
+-- end
+
if method.box then
local br = 1 - br
if br < 0 then
@@ -428,7 +462,7 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
h, d = ch, cd
local shifted = hpack_node(getlist(current))
setfield(shifted,"shift",delta)
- setfield(current,"list",shifted)
+ setlist(current,shifted)
done = true
if t then
t[#t+1] = formatters["first: height %p depth %p shift %p"](ch,cd,delta)
@@ -465,7 +499,7 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
h, d = ch, cd
local shifted = hpack_node(getlist(current))
setfield(shifted,"shift",delta)
- setfield(current,"list",shifted)
+ setlist(current,shifted)
done = true
if t then
t[#t+1] = formatters["last: height %p depth %p shift %p"](ch,cd,delta)
@@ -526,13 +560,13 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
if offset then
-- we need to set the attr
if t then
- t[#t+1] = formatters["before offset: %p (width %p height %p depth %p)"](offset,getfield(current,"width"),getfield(current,"height"),getfield(current,"depth"))
+ t[#t+1] = formatters["before offset: %p (width %p height %p depth %p)"](offset,getfield(current,"width") or 0,getfield(current,"height"),getfield(current,"depth"))
end
local shifted = hpack_node(getlist(current))
setfield(shifted,"shift",offset)
- setfield(current,"list",shifted)
+ setlist(current,shifted)
if t then
- t[#t+1] = formatters["after offset: %p (width %p height %p depth %p)"](offset,getfield(current,"width"),getfield(current,"height"),getfield(current,"depth"))
+ t[#t+1] = formatters["after offset: %p (width %p height %p depth %p)"](offset,getfield(current,"width") or 0,getfield(current,"height"),getfield(current,"depth"))
end
setattr(shifted,a_snapmethod,0)
setattr(current,a_snapmethod,0)
@@ -570,14 +604,9 @@ local function snap_hlist(where,current,method,height,depth) -- method.strut is
end
local function snap_topskip(current,method)
- local spec = getfield(current,"spec")
- local w = getfield(spec,"width")
- local wd = w
- if getfield(spec,"writable") then
- setfield(spec,"width",0)
- wd = 0
- end
- return w, wd
+ local w = getfield(current,"width") or 0
+ setfield(current,"width",0)
+ return w, 0
end
local categories = allocate {
@@ -591,6 +620,7 @@ local categories = allocate {
[7] = 'goback',
[8] = 'together', -- not used (?)
[9] = 'overlay',
+ [10] = 'notopskip',
}
vspacing.categories = categories
@@ -624,20 +654,27 @@ storage.register("builders/vspacing/data/skip", vspacingdata.skip, "builders.vsp
do -- todo: interface.variables
- vspacing.fixed = false
+ vspacing.fixed = false
- local map = vspacingdata.map
- local skip = vspacingdata.skip
+ local map = vspacingdata.map
+ local skip = vspacingdata.skip
local multiplier = C(S("+-")^0 * R("09")^1) * P("*")
- local category = P(":") * C(P(1)^1)
- local keyword = C((1-category)^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, k_flexible, k_category, k_penalty, k_order = variables.fixed, variables.flexible, "category", "penalty", "order"
+ local k_fixed = variables.fixed
+ local k_flexible = variables.flexible
+ local k_category = "category"
+ local k_penalty = "penalty"
+ local k_order = "order"
-- This will change: just node.write and we can store the values in skips which
- -- then obeys grouping
+ -- then obeys grouping .. but .. we miss the amounts then as they live at the tex
+ -- end so we then also need to change that bit ... it would be interesting if we
+ -- could store in properties
local ctx_fixedblankskip = context.fixedblankskip
local ctx_flexibleblankskip = context.flexibleblankskip
@@ -649,67 +686,171 @@ do -- todo: interface.variables
local ctx_addpredefinedblankskip = context.addpredefinedblankskip
local ctx_addaskedblankskip = context.addaskedblankskip
- local function analyze(str,oldcategory) -- we could use shorter names
- for s in gmatch(str,"([^ ,]+)") do
- local amount, keyword, detail = lpegmatch(splitter,s) -- the comma splitter can be merged
- if not keyword then
- report_vspacing("unknown directive %a",s)
+ local ctx_pushlogger = context.pushlogger
+ local ctx_startblankhandling = context.startblankhandling
+ local ctx_stopblankhandling = context.stopblankhandling
+ local ctx_poplogger = context.poplogger
+
+ --
+
+ -- local function analyze(str,oldcategory) -- we could use shorter names
+ -- for s in gmatch(str,"([^ ,]+)") do
+ -- local amount, keyword, detail = lpegmatch(splitter,s) -- the comma splitter can be merged
+ -- if not keyword then
+ -- report_vspacing("unknown directive %a",s)
+ -- else
+ -- local mk = map[keyword]
+ -- if mk then
+ -- category = analyze(mk,category) -- category not used .. and we pass crap anyway
+ -- 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 then
+ -- ctx_setblankcategory(category)
+ -- if category ~= oldcategory then
+ -- ctx_flushblankhandling()
+ -- oldcategory = category
+ -- end
+ -- 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
+ -- return category
+ -- end
+
+ -- local function analyze(str) -- we could use shorter names
+ -- for s in gmatch(str,"([^ ,]+)") do
+ -- local amount, keyword, detail = lpegmatch(splitter,s) -- the comma splitter can be merged
+ -- if not keyword then
+ -- report_vspacing("unknown directive %a",s)
+ -- else
+ -- local mk = map[keyword]
+ -- if mk then
+ -- analyze(mk) -- category not used .. and we pass crap anyway
+ -- 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 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
+ -- end
+
+ -- function vspacing.analyze(str)
+ -- if trace_vspacing then
+ -- ctx_pushlogger(report_vspacing)
+ -- ctx_startblankhandling()
+ -- analyze(str,1)
+ -- ctx_stopblankhandling()
+ -- ctx_poplogger()
+ -- else
+ -- ctx_startblankhandling()
+ -- analyze(str,1)
+ -- ctx_stopblankhandling()
+ -- end
+ -- end
+
+ -- alternative
+
+ local pattern = nil
+
+ 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 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
- local mk = map[keyword]
- if mk then
- category = analyze(mk,category)
- 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 then
- ctx_setblankcategory(category)
- if category ~= oldcategory then
- ctx_flushblankhandling()
- oldcategory = category
- end
- 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
+ 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
- return category
end
- local ctx_pushlogger = context.pushlogger
- local ctx_startblankhandling = context.startblankhandling
- local ctx_stopblankhandling = context.stopblankhandling
- local ctx_poplogger = context.poplogger
+ local splitter = ((multiplier + Cc(1)) * keyword * (category + Cc(false))) / handler
+ pattern = (splitter + separator^1)^0
function vspacing.analyze(str)
if trace_vspacing then
ctx_pushlogger(report_vspacing)
ctx_startblankhandling()
- analyze(str,1)
+ lpegmatch(pattern,str)
ctx_stopblankhandling()
ctx_poplogger()
else
ctx_startblankhandling()
- analyze(str,1)
+ lpegmatch(pattern,str)
ctx_stopblankhandling()
end
end
@@ -740,8 +881,8 @@ local function nodes_to_string(head)
local ty = nodecodes[id]
if id == penalty_code then
t[#t+1] = formatters["%s:%s"](ty,getfield(current,"penalty"))
- elseif id == glue_code then -- or id == kern_code then -- to be tested
- t[#t+1] = formatters["%s:%p"](ty,current)
+ elseif id == glue_code then
+ t[#t+1] = formatters["%s:%s:%p"](ty,skipcodes[getsubtype(current)],getfield(current,"width"))
elseif id == kern_code then
t[#t+1] = formatters["%s:%p"](ty,getfield(current,"kern"))
else
@@ -757,12 +898,12 @@ local function reset_tracing(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, data, sc or "-", so or "-", sp or "-") }
+ trace_list[#trace_list+1] = { "skip", formatters["%s | %p | category %s | order %s | penalty %s"](str, getfield(data,"width"), 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, data) }
+ trace_list[#trace_list+1] = { "skip", formatters["%s | %p"](str, getfield(data,"width")) }
tracing_info = true
end
@@ -784,7 +925,7 @@ local function trace_done(str,data)
if getid(data) == penalty_code then
trace_list[#trace_list+1] = { "penalty", formatters["%s | %s"](str,getfield(data,"penalty")) }
else
- trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,data) }
+ trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,getfield(data,"width")) }
end
tracing_info = true
end
@@ -807,31 +948,6 @@ end
-- alignment box begin_of_par vmode_par hmode_par insert penalty before_display after_display
-local skipcodes = nodes.skipcodes
-
-local userskip_code = skipcodes.userskip
-local lineskip_code = skipcodes.lineskip
-local baselineskip_code = skipcodes.baselineskip
-local parskip_code = skipcodes.parskip
-local abovedisplayskip_code = skipcodes.abovedisplayskip
-local belowdisplayskip_code = skipcodes.belowdisplayskip
-local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip
-local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip
-local topskip_code = skipcodes.topskip
-local splittopskip_code = skipcodes.splittopskip
-
--- local function free_glue_node(n)
--- free_node(n)
--- local s = getfield(n,"spec")
--- if s then
--- free_node(s)
--- end
--- end
-
-local free_glue_node = free_node
-local free_glue_spec = function() end
------ free_glue_spec = free_node -- can be enabled in in 0.73 (so for the moment we leak due to old luatex engine issues)
-
function vspacing.snapbox(n,how)
local sv = snapmethods[how]
if sv then
@@ -885,7 +1001,7 @@ local w, h, d = 0, 0, 0
local function forced_skip(head,current,width,where,trace)
if head == current then
if getsubtype(head) == baselineskip_code then
- width = width - getfield(getfield(head,"spec"),"width")
+ width = width - (getfield(head,"width") or 0)
end
end
if width == 0 then
@@ -1018,9 +1134,6 @@ local function check_experimental_overlay(head,current)
local p = nil
local c = current
local n = nil
-
- -- setfield(head,"prev",nil) -- till we have 0.79 **
-
local function overlay(p,n,mvl)
local p_ht = getfield(p,"height")
local p_dp = getfield(p,"depth")
@@ -1034,7 +1147,7 @@ local function check_experimental_overlay(head,current)
while c and c ~= n do
local id = getid(c)
if id == glue_code then
- skips = skips + getfield(getfield(c,"glue_spec"),"width")
+ skips = skips + (getfield(c,"width") or 0)
elseif id == kern_code then
skips = skips + getfield(c,"kern")
end
@@ -1116,6 +1229,19 @@ end
-- we now look back a lot, way too often
+-- userskip
+-- lineskip
+-- baselineskip
+-- parskip
+-- abovedisplayskip
+-- belowdisplayskip
+-- abovedisplayshortskip
+-- belowdisplayshortskip
+-- topskip
+-- splittopskip
+
+local experiment = false directives.register("vspacing.experiment",function(v) experiment = v end)
+
local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also pass tail
if trace then
reset_tracing(head)
@@ -1143,7 +1269,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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 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
@@ -1155,31 +1283,46 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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
+ -- 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
- local spec = getfield(glue_data,"spec")
if force_glue then
- if trace then trace_done("flushed due to " .. why,glue_data) end
- head = forced_skip(head,current,getfield(spec,"width"),"before",trace)
- free_glue_node(glue_data)
- elseif getfield(spec,"writable") then
- if trace then trace_done("flushed due to " .. why,glue_data) end
- head = insert_node_before(head,current,glue_data)
+ if trace then
+ trace_done("flushed due to forced " .. why,glue_data)
+ end
+ head = forced_skip(head,current,getfield(glue_data,"width") or 0,"before",trace)
+ free_node(glue_data)
else
- free_glue_node(glue_data)
+ local w = getfield(glue_data,"width")
+ if w ~= 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 getfield(glue_data,"stretch") ~= 0 or getfield(glue_data,"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",skipcodes[getsubtype(glue_data)],w)
+ free_node(glue_data)
+ end
end
end
- if trace then trace_node(current) 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
@@ -1210,7 +1353,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
texgetdimen("bodyfontstrutheight"), texgetdimen("bodyfontstrutdepth")
)
end
- if trace then trace_info("start analyzing",where,what) end
+ if trace then
+ trace_info("start analyzing",where,what)
+ end
-- local headprev = getprev(head)
@@ -1263,7 +1408,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
current = getnext(current)
elseif id == penalty_code then
-- natural_penalty = getfield(current,"penalty")
- -- if trace then trace_done("removed penalty",current) end
+ -- if trace then
+ -- trace_done("removed penalty",current)
+ -- end
-- head, current = remove_node(head, current, true)
-- if nobreakfound == nil then
@@ -1294,9 +1441,11 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
getpagelist()
local p = specialmethods[specialmethod](pagehead,pagetail,current,sp)
if p then
- if trace then
- trace_skip("previous special penalty %a is changed to %a using method %a",sp,p,specialmethod)
- end
+ -- 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
@@ -1314,7 +1463,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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
+ if trace then
+ trace_skip("penalty in skip",sc,so,sp,current)
+ end
-- if nobreakfound then
-- penalty_data = 10000
@@ -1326,119 +1477,163 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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
+ 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
+ if trace then
+ trace_natural("natural",current)
+ end
current = getnext(current)
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 ps = getfield(previous,"spec")
- if getfield(ps,"writable") then
- local cs = getfield(current,"spec")
- if getfield(cs,"writable") and getfield(ps,"stretch_order") == 0 and getfield(ps,"shrink_order") == 0 and getfield(cs,"stretch_order") == 0 and getfield(cs,"shrink_order") == 0 then
- local pw, pp, pm = getfield(ps,"width"), getfield(ps,"stretch"), getfield(ps,"shrink")
- local cw, cp, cm = getfield(cs,"width"), getfield(cs,"stretch"), getfield(cs,"shrink")
- -- ps = writable_spec(previous) -- no writable needed here
- -- ps.width, ps.stretch, ps.shrink = pw + cw, pp + cp, pm + cm
- free_glue_spec(ps)
- setfield(previous,"spec",new_gluespec(pw + cw, pp + cp, pm + cm)) -- else topskip can disappear
- if trace then trace_natural("removed",current) end
- head, current = remove_node(head, current, true)
- -- current = previous
- if trace then trace_natural("collapsed",previous) end
- -- current = getnext(current)
- else
- if trace then trace_natural("filler",current) end
- current = getnext(current)
+ if getfield(previous,"stretch_order") == 0 and getfield(previous,"shrink_order") == 0 and
+ getfield(current, "stretch_order") == 0 and getfield(current, "shrink_order") == 0 then
+ setfield(previous,"width", (getfield(previous,"width") or 0) + (getfield(current,"width") or 0))
+ setfield(previous,"stretch",(getfield(previous,"stretch") or 0) + (getfield(current,"stretch") or 0))
+ setfield(previous,"shrink", (getfield(previous,"shrink") or 0) + (getfield(current,"shrink") or 0))
+ 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("natural (no prev spec)",current) end
+ if trace then
+ trace_natural("filler",current)
+ end
current = getnext(current)
end
else
- if trace then trace_natural("natural (no prev)",current) end
+ if trace then
+ trace_natural("natural (no prev)",current)
+ end
current = getnext(current)
end
end
glue_order, glue_data = 0, nil
elseif sc == disable then
+local next = getnext(current)
+if not experiment or next then
ignore_following = true
- if trace then trace_skip("disable",sc,so,sp,current) end
+ if trace then
+ trace_skip("disable",sc,so,sp,current)
+ end
head, current = remove_node(head, current, true)
+else
+ current = next
+end
elseif sc == together then
+local next = getnext(current)
+if not experiment or next then
keep_together = true
- if trace then trace_skip("together",sc,so,sp,current) end
+ if trace then
+ trace_skip("together",sc,so,sp,current)
+ end
head, current = remove_node(head, current, true)
+else
+ current = next
+end
elseif sc == nowhite then
+local next = getnext(current)
+if not experiment or 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
+ 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
+ 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
+ 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
+ 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
+ if trace then
+ trace_skip("force",sc,so,sp,current)
+ end
glue_order = so
- free_glue_node(glue_data)
+ free_node(glue_data)
head, current, glue_data = remove_node(head, current)
elseif glue_order == so then
-- is now exclusive, maybe support goback as combi, else why a set
if sc == largest then
- local cs, gs = getfield(current,"spec"), getfield(glue_data,"spec")
- local cw, gw = getfield(cs,"width"), getfield(gs,"width")
+ local cw = getfield(current,"width") or 0
+ local gw = getfield(glue_data,"width") or 0
if cw > gw then
- if trace then trace_skip("largest",sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
+ if trace then
+ trace_skip("largest",sc,so,sp,current)
+ end
+ free_node(glue_data)
head, current, glue_data = remove_node(head,current)
else
- if trace then trace_skip("remove smallest",sc,so,sp,current) end
+ if trace then
+ trace_skip("remove smallest",sc,so,sp,current)
+ end
head, current = remove_node(head, current, true)
end
elseif sc == goback then
- if trace then trace_skip("goback",sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
+ if trace then
+ trace_skip("goback",sc,so,sp,current)
+ end
+ free_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
- free_glue_node(glue_data) -- also free spec
+ if trace then
+ trace_skip("force",sc,so,sp,current)
+ end
+ free_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
- free_glue_node(glue_data) -- also free spec
+ if trace then
+ trace_skip("penalty",sc,so,sp,current)
+ end
+ free_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 old, new = glue_data.spec, getfield(current,"spec")
- local old, new = writable_spec(glue_data), getfield(current,"spec")
- setfield(old,"width",getfield(old,"width") + getfield(new,"width"))
- setfield(old,"stretch",getfield(old,"stretch") + getfield(new,"stretch"))
- setfield(old,"shrink",getfield(old,"shrink") + getfield(new,"shrink"))
+ if trace then
+ trace_skip("add",sc,so,sp,current)
+ end
+ setfield(old,"width", (getfield(glue_data,"width") or 0) + (getfield(current,"width") or 0))
+ setfield(old,"stretch",(getfield(glue_data,"stretch") or 0) + (getfield(current,"stretch") or 0))
+ setfield(old,"shrink", (getfield(glue_data,"shrink") or 0) + (getfield(current,"shrink") or 0))
-- toto: order
head, current = remove_node(head, current, true)
else
- if trace then trace_skip("unknown",sc,so,sp,current) end
+ 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
+ if trace then
+ trace_skip("unknown",sc,so,sp,current)
+ end
head, current = remove_node(head, current, true)
end
if sc == force then
@@ -1449,20 +1644,20 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
local s = getattr(current,a_snapmethod)
if s and s ~= 0 then
setattr(current,a_snapmethod,0)
- local spec = getfield(current,"spec")
- if getfield(spec,"writable") then
- local spec = writable_spec(current)
- setfield(spec,"width",0)
- if trace_vsnapping then
- report_snapper("lineskip set to zero")
- end
+ setfield(current,"width",0)
+ if trace_vsnapping then
+ report_snapper("lineskip set to zero")
end
else
- if trace then trace_skip("lineskip",sc,so,sp,current) end
+ 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
+ if trace then
+ trace_skip("lineskip",sc,so,sp,current)
+ end
flush("lineskip")
end
current = getnext(current)
@@ -1471,43 +1666,55 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
local s = getattr(current,a_snapmethod)
if s and s ~= 0 then
setattr(current,a_snapmethod,0)
- local spec = getfield(current,"spec")
- if getfield(spec,"writable") then
- local spec = writable_spec(current)
- setfield(spec,"width",0)
- if trace_vsnapping then
- report_snapper("baselineskip set to zero")
- end
+ setfield(current,"width",0)
+ if trace_vsnapping then
+ report_snapper("baselineskip set to zero")
end
else
- if trace then trace_skip("baselineskip",sc,so,sp,current) end
+ 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
+ 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
+ if trace then
+ trace_natural("ignored parskip",current)
+ end
head, current = remove_node(head, current, true)
elseif glue_data then
- local ps = getfield(current,"spec")
- local gs = getfield(glue_data,"spec")
- if getfield(ps,"writable") and getfield(gs,"writable") and getfield(ps,"width") > getfield(gs,"width") then
- setfield(glue_data,"spec",copy_node(ps))
- if trace then trace_natural("taking parskip",current) end
+ local wp = getfield(current,"width") or 0
+ if ((w ~= 0) and (w > (getfield(glue_data,"width") or 0))) then
+ glue_data = current
+ head, current = remove_node(head, current)
+ if trace then
+ trace_natural("taking parskip",current)
+ end
else
- if trace then trace_natural("removed parskip",current) end
+ head, current = remove_node(head, current, true)
+ if trace then
+ trace_natural("removed parskip",current)
+ end
end
- head, current = remove_node(head, current, true)
else
- if trace then trace_natural("honored parskip",current) end
+ 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) == 10 then -- no top skip
+ nuts.setglue(current) -- zero
+ end
if snap then
local s = getattr(current,a_snapmethod)
if s and s ~= 0 then
@@ -1518,47 +1725,60 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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
+ 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
+ if trace then
+ trace_skip("topskip",sc,so,sp,current)
+ end
flush("topskip")
end
current = getnext(current)
elseif subtype == abovedisplayskip_code then
--
- if trace then trace_skip("above display skip (normal)",sc,so,sp,current) end
+ 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 then
--
- if trace then trace_skip("below display skip (normal)",sc,so,sp,current) end
+ 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 then
--
- if trace then trace_skip("above display skip (short)",sc,so,sp,current) end
+ 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 then
--
- if trace then trace_skip("below display skip (short)",sc,so,sp,current) end
+ 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 spec = getfield(current,"spec")
- if getfield(spec,"writable") and getfield(spec,"width") ~= 0 then
- report_snapper("glue %p of type %a kept",getfield(spec,"width"),skipcodes[subtype])
- -- setfield(spec,"width",0)
+ local w = getfield(current,"width") or 0
+ if w ~= 0 then
+ report_snapper("glue %p of type %a kept",w,skipcodes[subtype])
end
end
- if trace then trace_skip(formatters["glue of type %a"](subtype),sc,so,sp,current) end
+ if trace then
+ trace_skip(formatters["glue of type %a"](subtype),sc,so,sp,current)
+ end
flush("some glue")
current = getnext(current)
end
@@ -1567,7 +1787,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
current = getnext(current)
end
end
- if trace then trace_info("stop analyzing",where,what) 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
@@ -1578,7 +1800,9 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
if penalty_data then
tail = find_node_tail(head)
local p = new_penalty(penalty_data)
- if trace then trace_done("result",p) end
+ if trace then
+ trace_done("result",p)
+ end
head, tail = insert_node_after(head,tail,p)
-- if penalty_data > special_penalty_min and penalty_data < special_penalty_max then
local props = properties[p]
@@ -1593,11 +1817,13 @@ local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also
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 trace then
+ trace_done("result",glue_data)
+ end
if force_glue then
- local spec = getfield(glue_data,"spec")
- head, tail = forced_skip(head,tail,getfield(spec,"width"),"after",trace)
- free_glue_node(glue_data)
+ head, tail = forced_skip(head,tail,getfield(glue_data,"width") or 0,"after",trace)
+ free_node(glue_data)
+ glue_data = nil
else
head, tail = insert_node_after(head,tail,glue_data)
end
@@ -1634,8 +1860,12 @@ end
local stackhead, stacktail, stackhack = nil, nil, false
-local function report(message,lst)
- report_vspacing(message,count_nodes(lst,true),nodeidstostring(lst))
+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
@@ -1665,29 +1895,27 @@ function vspacing.pagehandler(newhead,where)
end
if flush then
if stackhead then
- if trace_collect_vspacing then report("appending %s nodes to stack (final): %s",newhead) end
- setfield(stacktail,"next",newhead)
- setfield(newhead,"prev",stacktail)
+ if trace_collect_vspacing then report("%s > appending %s nodes to stack (final): %s",where,newhead) end
+ setlink(stacktail,newhead)
newhead = stackhead
stackhead, stacktail = nil, nil
end
if stackhack then
stackhack = false
- if trace_collect_vspacing then report("processing %s nodes: %s",newhead) end
+ 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("flushing %s nodes: %s",newhead) end
+ if trace_collect_vspacing then report("%s > flushing %s nodes: %s",where,newhead) end
-- texlists.contrib_head = newhead
end
return tonode(newhead)
else
if stackhead then
- if trace_collect_vspacing then report("appending %s nodes to stack (intermediate): %s",newhead) end
- setfield(stacktail,"next",newhead)
- setfield(newhead,"prev",stacktail)
+ 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("storing %s nodes in stack (initial): %s",newhead) end
+ if trace_collect_vspacing then report("%s > storing %s nodes in stack (initial): %s",where,newhead) end
stackhead = newhead
end
stacktail = newtail
@@ -1722,9 +1950,9 @@ function vspacing.collapsevbox(n,aslist) -- for boxes but using global a_snapmet
if list then
list = collapser(list,"snapper","vbox",trace_vbox_vspacing,true,a_snapmethod)
if aslist then
- setfield(box,"list",list) -- beware, dimensions of box are wrong now
+ setlist(box,list) -- beware, dimensions of box are wrong now
else
- setfield(box,"list",vpack_node(list))
+ setlist(box,vpack_node(list))
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/spac-ver.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv
index 86a731d3c78..bbe53fb2aa3 100644
--- a/Master/texmf-dist/tex/context/base/spac-ver.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv
@@ -132,7 +132,7 @@
\def\spac_linespacing_setup_relative_interlinespace#1%
{\ifcsname\??interlinespacerelative#1\endcsname
- \csname\??interlinespacerelative#1\endcsname
+ \lastnamedcs
\else
\spac_linespacing_set_specified_relative_interlinespace{#1}%
\fi}
@@ -370,7 +370,7 @@
\def\spac_whitespace_setup % quick test for no list
{\ifcsname\??whitespacemethod\v_spac_whitespace_current\endcsname
- \csname\??whitespacemethod\v_spac_whitespace_current\endcsname
+ \lastnamedcs
\else
\expandafter\processcommalist\expandafter[\v_spac_whitespace_current]\spac_whitespace_setup_method % can be raw
\fi\relax
@@ -418,11 +418,11 @@
\installwhitespacemethod \v!medium {\s_spac_whitespace_parskip \medskipamount}
\installwhitespacemethod \v!small {\s_spac_whitespace_parskip \smallskipamount}
-\installwhitespacemethod \s!default {\spac_whitespace_setup_nop}
+\installwhitespacemethod \s!default {\spac_whitespace_setup_nop} % also covers none
\def\spac_whitespace_setup_method#1%
{\ifcsname\??whitespacemethod#1\endcsname
- \csname\??whitespacemethod#1\endcsname
+ \lastnamedcs
\else
\s_spac_whitespace_parskip#1\fi
\relax}
@@ -441,8 +441,8 @@
% \def\spac_whitespace_setup_method#1%
% {\csname\??whitespacemethod\ifcsname\??whitespacemethod#1\endcsname#1\else\s!unknown\endcsname\relax}
-\unexpanded\def\nowhitespace{\vspacing[\v!nowhite]}
-\unexpanded\def\whitespace {\vspacing[\v!white]}
+\unexpanded\def\nowhitespace{\directcheckedvspacing\v!nowhite} % {\vspacing[\v!nowhite]}
+\unexpanded\def\whitespace {\directcheckedvspacing\v!white} % {\vspacing[\v!white]}
\setupwhitespace
[\v!none]
@@ -463,9 +463,9 @@
\ifnum\c_spac_packed_level=\plusone \ifvmode
\begingroup
\whitespace % not combined
- \blank[\v!disable]%
+ \directcheckedvspacing\v!disable % \blank[\v!disable]% or \inhibitblank
\doifelse{#1}\v!blank\settrue\setfalse\c_spac_packed_blank
- \setupwhitespace[\v!none]%
+ \setupwhitespace[\v!none]% or \forgetparskip
\fi \fi}
\unexpanded\def\stoppacked
@@ -476,48 +476,37 @@
\global\advance\c_spac_packed_level\minusone}
\unexpanded\def\startunpacked
- {\blank
+ {\directdefaultvspacing % \blank
\begingroup}
\unexpanded\def\stopunpacked
{\endgroup
- \blank}
+ \directdefaultvspacing}% \blank}
% \prevdepth crosses pageboundaries!
%
% todo: a version that works ok inside a box
+% global : outer hsize + keep skips
+% local : inner hsize + reset skips
+
\installcorenamespace{linesaround}
+\let\spac_lines_vbox\vbox
+
+\installtextracker
+ {linecorrection.boxes}
+ {\let\spac_lines_vbox\ruledvbox}
+ {\let\spac_lines_vbox\vbox}
+
\let\v_spac_lines_around_action_set\relax
\let\m_spac_lines_around \empty
-% \setvalue{\??linesaround\v!blank }{\blank}
-% \letvalue{\??linesaround\empty }\relax
-% \setvalue{\??linesaround\s!unknown}{\blank[\m_spac_lines_around]}
-%
-% \unexpanded\def\startlinecorrection
-% {\bgroup
-% \dodoubleempty\spac_lines_start_correction}
-%
-% \def\spac_lines_start_correction[#1][#2]% #2 gobbles spaces
-% {\edef\m_spac_lines_around{#1}%
-% \expandafter\let\expandafter\spac_lines_action_around\csname\??linesaround
-% \ifcsname\??linesaround\m_spac_lines_around\endcsname\m_spac_lines_around\else\s!unknown\fi
-% \endcsname
-% \spac_lines_action_around
-% \startbaselinecorrection
-% \offbaselinecorrection
-% \ignorespaces}
-%
-% \unexpanded\def\stoplinecorrection
-% {\stopbaselinecorrection
-% \spac_lines_action_around
-% \egroup}
+\newconstant\c_spac_lines_correction_mode
\setvalue{\??linesaround\v!blank }{\blank}
\letvalue{\??linesaround\empty }\relax
-\setvalue{\??linesaround\s!unknown}{\blank[\m_spac_lines_around]}
+\setvalue{\??linesaround\s!unknown}{\directcheckedvspacing\m_spac_lines_around} % \blank[\m_spac_lines_around]}
\def\spac_lines_action_around % we used to let this one but it's cleaner this way
{\csname\??linesaround % i.e. do it twice
@@ -526,62 +515,61 @@
\unexpanded\def\startlinecorrection
{\endgraf
- \bgroup
+ \begingroup
+ \setconstant\c_spac_lines_correction_mode\plusone
\dosingleempty\spac_lines_start_correction}
\unexpanded\def\startlocallinecorrection
{\endgraf
- \bgroup
- \setlocalhsize
- \hsize\localhsize
+ \begingroup
+ \setconstant\c_spac_lines_correction_mode\plustwo
\dosingleempty\spac_lines_start_correction}
-\def\spac_lines_start_correction
- {\ifvmode
- \expandafter\spac_lines_start_correction_yes
- \else
- \expandafter\spac_lines_start_correction_nop
- \fi}
-
-\def\spac_lines_start_correction_nop[#1]%
- {\vbox\bgroup
- \ignorespaces
- \let\spac_lines_stop_correction\spac_lines_stop_correction_nop}
-
-\def\spac_lines_stop_correction_nop
- {\removeunwantedspaces
- \egroup}
-
-\def\spac_lines_start_correction_yes[#1]%
+\unexpanded\def\spac_lines_start_correction[#1]%
{\edef\m_spac_lines_around{#1}%
\spac_lines_action_around
\d_spac_prevdepth\prevdepth
\spac_lines_initialize_corrections
\offbaselinecorrection % ???
- \setbox\scratchbox\vbox\bgroup
- \ignorespaces
- \let\spac_lines_stop_correction\spac_lines_stop_correction_yes}
-
-% still not ok ... will move to the lua end ... needs a final solution
+ \setbox\scratchbox\spac_lines_vbox\bgroup
+ \ifcase\c_spac_lines_correction_mode
+ % nothing
+ \or
+ % global
+ \or
+ % local
+ \setlocalhsize
+ \hsize\localhsize
+ \forgetbothskips
+ \fi
+ \ignorespaces}
-\unexpanded\def\spac_lines_stop_correction_yes
+\unexpanded\def\spac_lines_stop_correction
{\removeunwantedspaces
\egroup
\ifgridsnapping
- \blank[\v!white]%
- \snaptogrid\hbox{\box\scratchbox}%
+ \spac_lines_stop_correction_ongrid
+ \else
+ \spac_lines_stop_correction_normal
+ \fi
+ \endgroup}
+
+\unexpanded\def\spac_lines_stop_correction_ongrid
+ {\directcheckedvspacing\v!white % \blank[\v!white]%
+ \snaptogrid\hpack{\box\scratchbox}}
+
+\unexpanded\def\spac_lines_stop_correction_normal
+ {\directcheckedvspacing\v!nowhite % \blank[\v!nowhite]%
+ \ifdim\parskip>\zeropoint
+ % too fuzzy otherwise
\else
-\blank[\v!nowhite]%
-\ifdim\parskip>\zeropoint
- % too fuzzy otherwise
-\else
- % doesn't like whitespace
+ % doesn't like whitespace
\ifdim\d_spac_prevdepth<\maxdimen
\unless\ifdim\d_spac_prevdepth<\zeropoint
\ifdim\d_spac_prevdepth<\strutdp \relax
\pushlastnode
\ifdim\d_spac_prevdepth>\zeropoint
- \kern-\d_spac_prevdepth
+ \kern-\d_spac_prevdepth
\fi
\kern\strutdp
\prevdepth\strutdp
@@ -589,24 +577,35 @@
\fi
\fi
\fi
-\fi
- \ifdim\pagegoal<\maxdimen
- \blank[\v!white,\the\d_spac_lines_correction_before]% \blank[\v!white]\dotopbaselinecorrection
- \fi
- \nointerlineskip % new
- \noindent % not just \dontleavehmode (MKII compatible)
- \box\scratchbox
- \endgraf
- \blank[\the\d_spac_lines_correction_after]% \dobotbaselinecorrection
- % \allowbreak % new, otherwise problems when many in a row
- \prevdepth\strutdp
\fi
- \spac_lines_action_around
- \egroup}
-
-\unexpanded\def\stoplinecorrection{\spac_lines_stop_correction}
-
-\let\stoplocallinecorrection\stoplinecorrection
+ \ifdim\pagegoal<\maxdimen
+ % \blank[\v!white,\the\d_spac_lines_correction_before]% \blank[\v!white]\dotopbaselinecorrection
+ \directcheckedvspacing{\v!white,\the\d_spac_lines_correction_before}% \blank[\v!white]\dotopbaselinecorrection
+ \fi
+ \nointerlineskip % new
+ \noindent % not \dontleavehmode !
+ \ifcase\c_spac_lines_correction_mode
+ % nothing
+ \or
+ % global
+ \hskip-\leftskip % more tricky would be hangindent so we ignore that one
+ \or
+ % local
+ \fi
+ \box\scratchbox
+ \endgraf
+ %
+ % eventually i'll get it right ... (i also need to check all whitespace code elsewhere)
+ %
+ % \blank[\the\d_spac_lines_correction_after]% \dobotbaselinecorrection
+ % \directcheckedvspacing{\the\d_spac_lines_correction_after}% \dobotbaselinecorrection
+ \directcheckedvspacing{\v!white,\the\d_spac_lines_correction_after}% \dobotbaselinecorrection
+ % \allowbreak % new, otherwise problems when many in a row
+ \prevdepth\strutdp
+ \spac_lines_action_around}
+
+\let\stoplinecorrection \spac_lines_stop_correction
+\let\stoplocallinecorrection\spac_lines_stop_correction
% todo:
@@ -618,8 +617,8 @@
\flushnextbox
\stopbaselinecorrection}
-\unexpanded\def\verticalstrut {\vbox{\hsize\zeropoint\forgetall\strut}}
-\unexpanded\def\horizontalstrut{\hbox {\strut}}
+\unexpanded\def\verticalstrut {\vpack{\hsize\zeropoint\forgetall\strut}}
+\unexpanded\def\horizontalstrut{\hpack {\strut}}
% Hieronder volgen enkele instellingen en macro's ten behoeve
% van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en
@@ -839,10 +838,14 @@
\newbox\strutbox
-\setbox\strutbox\hbox{\vrule\s!height8.5pt\s!depth3.5pt\s!width\zeropoint} % just a start
+\setbox\strutbox\hpack{\vrule\s!height8.5pt\s!depth3.5pt\s!width\zeropoint} % just a start
\def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
+% \unexpanded\def\strut
+% {\relax
+% \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox}
+
\let\normalstrut\strut
% The double \hbox construction enables us to \backtrack
@@ -889,7 +892,7 @@
\dosetstrut}
\unexpanded\def\setcharstrut#1%
- {\setbox\strutbox\hbox{#1}%
+ {\setbox\strutbox\hbox{#1}% hm, maybe hpack i.e. why apply fonts .. conceptual choice
\strutht\ht\strutbox
\strutdp\dp\strutbox
\dosetstrut}
@@ -940,7 +943,7 @@
\fi}
\def\spac_struts_set_hide
- {\setbox\strutbox\hbox
+ {\setbox\strutbox\hpack
{\vrule
\s!width \zeropoint
\s!height\strutht
@@ -949,7 +952,7 @@
\newconstant\c_strut_visual_mode
\def\spac_struts_set_vide
- {\setbox\strutbox\hbox % at some time this extra wrapping was needed
+ {\setbox\strutbox\hpack % at some time this extra wrapping was needed
{\spac_struts_vide_hbox to \zeropoint
{\ifcase\c_strut_visual_mode
\spac_struts_black
@@ -1008,6 +1011,10 @@
\dontleavehmode
\copy\strutbox}
+% \unexpanded\def\strut % slightly faster
+% {\relax
+% \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox}
+
\let\normalstrut\strut
\unexpanded\def\halfstrut
@@ -1059,7 +1066,7 @@
\def\spac_struts_setup[#1]%
{\edef\m_strut{#1}%
\ifcsname\??struts\m_strut\endcsname
- \csname\??struts\m_strut\endcsname % these are defined later
+ \lastnamedcs
\else
\setcharstrut\m_strut
\fi}
@@ -1067,16 +1074,16 @@
\unexpanded\def\synchronizestrut#1% no [] parsing, faster for internal
{\edef\m_strut{#1}%
\ifcsname\??struts\m_strut\endcsname
- \csname\??struts\m_strut\endcsname
+ \lastnamedcs
\else
\setcharstrut\m_strut
\fi}
\unexpanded\def\dosynchronizestrut#1% no [] parsing, faster for internal
{\ifcsname\??struts#1\endcsname
- \csname\??struts#1\endcsname
+ \lastnamedcs
\else
- \setcharstrut\m_strut
+ \setcharstrut{#1}%
\fi}
\unexpanded\def\showstruts % adapts .. is wrong
@@ -1132,6 +1139,12 @@
% when enabled, sigstruts will remove themselves if nothing
% goes inbetween
+%D For poractical 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
+
\newsignal\strutsignal \setfalse\sigstruts
\unexpanded\def\begstrut
@@ -1155,9 +1168,17 @@
\hskip-\strutsignal
\hskip\strutsignal}
+% \def\spac_struts_beg_normal
+% {\strut
+% \penalty\plustenthousand
+% \hskip\zeropoint}
+
\def\spac_struts_beg_normal
- {\strut
+ {\boundary\plusone
+ \strut
+ %\boundary\plusone
\penalty\plustenthousand
+ %\boundary\plusone
\hskip\zeropoint}
\unexpanded\def\endstrut
@@ -1188,11 +1209,20 @@
\strut
\fi}
+% \def\spac_struts_end_normal
+% {\removeunwantedspaces
+% \penalty\plustenthousand
+% \hskip\zeropoint
+% \strut}
+
\def\spac_struts_end_normal
{\removeunwantedspaces
\penalty\plustenthousand
+ %\boundary\plustwo
\hskip\zeropoint
- \strut}
+ %\boundary\plustwo
+ \strut
+ \boundary\plustwo}
% unsave:
%
@@ -1457,11 +1487,11 @@
\def\spac_grids_snap_value_set#1%
{%\gridsnappingtrue
- \ifcsname\??gridsnappers#1\endcsname\csname\??gridsnappers#1\endcsname\fi}
+ \begincsname\??gridsnappers#1\endcsname}
\def\spac_grids_snap_value_auto#1%
{\ifcsname\??gridsnappers#1\endcsname
- \csname\??gridsnappers#1\endcsname
+ \lastnamedcs
\else
\installsnapvalues\s!dummy{#1}%
\csname\??gridsnappers\s!dummy\endcsname
@@ -1602,7 +1632,7 @@
\fi
\doifelsenothing{#1}{\spac_grids_snap_value_set\v!normal}{\spac_grids_snap_value_set{#1}}%
\clf_vspacingsnap\nextbox\attribute\snapmethodattribute\relax
- \ifvbox\nextbox\vbox\else\hbox\fi attr \snapmethodattribute \zerocount {\box\nextbox}%
+ \ifvbox\nextbox\vbox\else\hbox\fi attr \snapmethodattribute \zerocount {\box\nextbox}% pack ?
\egroup}
\def\spac_grids_check_nop
@@ -1666,6 +1696,7 @@
\unexpanded\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level
{\setbox#1\gridboxvbox to #3 % given size
{\forgetall
+ \resetvisualizers
\resetteststrut
\offinterlineskip
\hsize#2%
@@ -1725,14 +1756,16 @@
% experimental code, not yet interfaced:
% category:
-% 0 == discard discard
-% 1 == only if larger largest
-% 2 == force even if smaller force
-% 3 == only take penalty component penalty
-% 4 == add to existing skip add
-% 5 == disable (ignore following) disable
-% 6 == kill whitespace nowhite
-% 7 == discard previous back
+%
+% 0 == discard discard
+% 1 == only if larger largest
+% 2 == force even if smaller force
+% 3 == only take penalty component penalty
+% 4 == add to existing skip add
+% 5 == disable (ignore following) disable
+% 6 == kill whitespace nowhite
+% 7 == discard previous back
+% 10 == no topskip
%
% penalty: larger wins
% order: larger wins
@@ -1750,9 +1783,18 @@
{\dotripleempty\spac_vspacing_define_amount}
\def\spac_vspacing_define_amount[#1][#2][#3]% can be combined
- {\setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}%
+ {\ifthirdargument
+ \setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}%
+ \else\ifsecondargument
+ \setvalue{\??vspacingamount#1}{\ifgridsnapping\lineheight\else#2\fi}%
+ \else
+ \setvalue{\??vspacingamount#1}{\lineheight}%
+ \fi\fi
\clf_vspacingsetamount{#1}}
+\def\spac_vspacing_no_topskip % use grouped
+ {\attribute\skipcategoryattribute\plusten}
+
% \installcorenamespace{vspacingamountnormal}
% \installcorenamespace{vspacingamountgrid}
@@ -1905,6 +1947,22 @@
\def\directvspacing#1%
{\par\clf_vspacing{#1}}
+\def\directcheckedvspacing
+ {\ifinpagebody % somewhat weird
+ \expandafter\directvspacing
+ \else\ifconditional\c_spac_packed_blank
+ \doubleexpandafter\directvspacing
+ \else
+ \doubleexpandafter\gobbleoneargument
+ \fi\fi}
+
+\def\directdefaultvspacing
+ {\ifinpagebody % somewhat weird
+ \clf_vspacing{\currentvspacing}%
+ \else\ifconditional\c_spac_packed_blank
+ \clf_vspacing{\currentvspacing}%
+ \fi\fi}
+
% handy (and faster):
\unexpanded\def\directvpenalty#1%
@@ -1984,7 +2042,7 @@
\newdimen\d_spac_overlay
\def\spac_overlay_lines
- {\blank[\v!back,\v!overlay]%
+ {\directcheckedvspacing{\v!back,\v!overlay}% \blank[\v!back,\v!overlay]%
\nointerlineskip}
% \startitemize[n]
@@ -2085,34 +2143,66 @@
\unexpanded\def\vspace
{\dodoubleempty\spac_vspace_inject}
-\def\spac_vspace_inject[#1][#2]%
+% \def\spac_vspace_inject[#1][#2]% use \lastnamedcs
+% {\par
+% \ifvmode
+% \removelastskip
+% \vskip
+% \csname\??vspace
+% \ifsecondargument
+% \ifcsname\??vspace#1:#2\endcsname
+% #1:#2%
+% \else\ifcsname\??vspace:#2\endcsname
+% :#2%
+% \else
+% :\s!unknown
+% \fi\fi
+% \else\iffirstargument
+% \ifcsname\??vspace:#1\endcsname
+% :#1%
+% \else
+% :\s!unknown
+% \fi
+% \else
+% \ifcsname\??vspace:\s!default\endcsname
+% :\s!default
+% \else
+% :\s!unknown
+% \fi
+% \fi\fi
+% \endcsname
+% \relax
+% \fi}
+
+\def\spac_vspace_unknown
+ {\csname\??vspace:\s!unknown\endcsname}
+
+\def\spac_vspace_inject[#1][#2]% use \lastnamedcs
{\par
\ifvmode
\removelastskip
\vskip
- \csname\??vspace
- \ifsecondargument
- \ifcsname\??vspace#1:#2\endcsname
- #1:#2%
- \else\ifcsname\??vspace:#2\endcsname
- :#2%
- \else
- :\s!unknown
- \fi\fi
- \else\iffirstargument
- \ifcsname\??vspace:#1\endcsname
- :#1%
- \else
- :\s!unknown
- \fi
+ \ifsecondargument
+ \ifcsname\??vspace#1:#2\endcsname
+ \lastnamedcs
+ \else\ifcsname\??vspace:#2\endcsname
+ \lastnamedcs
\else
- \ifcsname\??vspace:\s!default\endcsname
- :\s!default
- \else
- :\s!unknown
- \fi
+ \spac_vspace_unknown
\fi\fi
- \endcsname
+ \else\iffirstargument
+ \ifcsname\??vspace:#1\endcsname
+ \lastnamedcs
+ \else
+ \spac_vspace_unknown
+ \fi
+ \else
+ \ifcsname\??vspace:\s!default\endcsname
+ \lastnamedcs
+ \else
+ \spac_vspace_unknown
+ \fi
+ \fi\fi
\relax
\fi}
@@ -2165,10 +2255,10 @@
\dp\nextbox\strutdp
\scratchwidth\dimexpr\wd\nextbox+\scratchdistance\relax
\ifx\m_spac_hanging_location\v!right
- \hangindent-\scratchwidth
+ \hangindent\ifconditional\displaylefttoright-\fi\scratchwidth
\rlap{\hskip\dimexpr\hsize-\wd\nextbox\relax\box\nextbox}%
\else
- \hangindent\scratchwidth
+ \hangindent\ifconditional\displaylefttoright\else-\fi\scratchwidth
\llap{\box\nextbox\hskip\scratchdistance}%
\fi
\ignorespaces}
diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf
new file mode 100644
index 00000000000..f5692f2c4f1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf
new file mode 100644
index 00000000000..65ec9e7c7ed
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/status-mkiv.lua b/Master/texmf-dist/tex/context/base/mkiv/status-mkiv.lua
index 45c2822565b..3fe9e0d8e30 100644
--- a/Master/texmf-dist/tex/context/base/status-mkiv.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/status-mkiv.lua
@@ -2615,12 +2615,6 @@ return {
lua = {
{
category = "lua",
- filename = "anch-pgr",
- loading = "anch-pgr",
- status = "okay",
- },
- {
- category = "lua",
filename = "anch-pos",
loading = "anch-pos",
status = "okay",
@@ -3574,6 +3568,11 @@ return {
},
{
category = "lua",
+ filename = "lpdf-res",
+ status = "todo",
+ },
+ {
+ category = "lua",
filename = "lpdf-col",
status = "todo",
},
@@ -4214,6 +4213,12 @@ return {
},
{
category = "lua",
+ filename = "page-otr",
+ loading = "page-otr",
+ status = "okay",
+ },
+ {
+ category = "lua",
filename = "page-flt",
status = "todo",
},
diff --git a/Master/texmf-dist/tex/context/base/status-mkiv.tex b/Master/texmf-dist/tex/context/base/mkiv/status-mkiv.tex
index 8685c97ad3f..8685c97ad3f 100644
--- a/Master/texmf-dist/tex/context/base/status-mkiv.tex
+++ b/Master/texmf-dist/tex/context/base/mkiv/status-mkiv.tex
diff --git a/Master/texmf-dist/tex/context/base/strc-bkm.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-bkm.lua
index 96b68b23697..a055a97a1c4 100644
--- a/Master/texmf-dist/tex/context/base/strc-bkm.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-bkm.lua
@@ -214,6 +214,7 @@ function bookmarks.place()
end
end
end
+-- inspect(levels)
bookmarks.finalize(levels)
function bookmarks.place() end -- prevent second run
end
diff --git a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-bkm.mkiv
index 9688a1f93b1..5a8dba562f5 100644
--- a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-bkm.mkiv
@@ -15,6 +15,8 @@
\registerctxluafile{strc-bkm}{1.001}
+% \enabledirectives[references.bookmarks.preroll]
+
\unprotect
%D Bookmarks are a very viewer dependent feature. They are mostly used
diff --git a/Master/texmf-dist/tex/context/base/strc-blk.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-blk.lua
index 0ababcfc09c..0ababcfc09c 100644
--- a/Master/texmf-dist/tex/context/base/strc-blk.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-blk.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-blk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-blk.mkiv
index fe259d223ce..fe259d223ce 100644
--- a/Master/texmf-dist/tex/context/base/strc-blk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-blk.mkiv
diff --git a/Master/texmf-dist/tex/context/base/strc-con.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-con.lua
index 29a1c0cb36d..29a1c0cb36d 100644
--- a/Master/texmf-dist/tex/context/base/strc-con.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-con.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-con.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-con.mkvi
index 11f6f758e0e..25e26bf7369 100644
--- a/Master/texmf-dist/tex/context/base/strc-con.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-con.mkvi
@@ -135,7 +135,7 @@
\dodoubleempty\strc_constructions_start_regular}
\unexpanded\def\strc_constructions_start_regular[#1][#2]%
- {\strc_constructions_register[\c!label={\constructionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1][#2]%
+ {\strc_constructions_register[#2][\c!label={\constructionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_constructions_stop
@@ -184,7 +184,7 @@
%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
+% \ifdefined\dotagsetconstruction \else \let\dotagsetconstruction\relax \fi
\newtoks\everyconstruction
@@ -271,7 +271,7 @@
\unexpanded\setvalue{\??constructionstarthandler\v!construction}% this will be redone (reorganized) .. too much boxing
{\dostarttaggedchained\t!construction\currentconstruction\currentconstructionhash
- \dotagsetconstruction
+% \dotagsetconstruction
\constructionparameter\c!before
\begingroup
\edef\currentconstructionalternative{\constructionparameter\c!alternative}%
@@ -301,7 +301,9 @@
\ifdim\constructionsheaddistance=\zeropoint
\ifx\p_strc_constructions_width\v!broad
\constructionsheaddistance\emwidth
- \fi
+ \else\ifx\p_strc_constructions_width\v!line
+ \constructionsheaddistance\emwidth
+ \fi\fi
\fi
\fi
% inefficient and not always needed, for instance not with margins so we will make checkers
@@ -492,8 +494,8 @@
\ifconditional\c_strc_constructions_distance_none \else
\advance\ifx#1\v!flushleft\rightskip\else\leftskip\fi\constructionsheaddistance % only difference and wrong anyway
\fi
- \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
- \setbox\constructionheadbox\hbox{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex
+ \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}
@@ -507,8 +509,8 @@
\else
\setupalign[\p_strc_constructions_headalign]% use fast one
\fi
- \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
- \setbox\constructionheadbox\hbox{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex
+ \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}
@@ -529,6 +531,12 @@
\relax
\hangindent\ifx#1\v!right-\fi\constructionsheadwidth}
+% \unexpanded\def\flushconstructionheadbox
+% {\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}
+
+\unexpanded\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.
@@ -562,9 +570,10 @@
\leftskip\dimexpr\leftconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax
\rightskip\rightconstructionskip\relax
\llap {
- \hbox to \leftskip {
+ \hpack to \leftskip {
\hskip\leftconstructionskip
- \copy\constructionheadbox\hss
+ \box\constructionheadbox % was copy
+ \hss
}
}
\nobreak
@@ -611,8 +620,8 @@
\noindent
\strc_constructions_set_pure_box\v!flushleft
\llap {
- \hbox to \constructionsheadwidth {
- \copy\constructionheadbox
+ \hpack to \constructionsheadwidth {
+ \box\constructionheadbox % was copy
\hss
}
\hskip\constructionsheaddistance
@@ -627,8 +636,9 @@
\strc_constructions_set_pure_box\v!flushright
\rlap {
\hskip\constructionsheaddistance
- \hbox to \constructionsheadwidth {
- \copy\constructionheadbox\hss
+ \hpack to \constructionsheadwidth {
+ \box\constructionheadbox % was copy
+ \hss
}
}
\useconstructionstyleandcolor\c!style\c!color
@@ -643,7 +653,7 @@
\strc_constructions_set_hang\v!left
\noindent
\llap {
- \vtop to \zeropoint {
+ \tpack to \zeropoint {
\box\constructionheadbox
}
}
@@ -660,9 +670,9 @@
\strc_constructions_set_hang\v!right
\noindent
\rlap {
- \hbox to \dimexpr\hsize-\leftskip-\rightskip\relax {
+ \hpack to \dimexpr\hsize-\leftskip-\rightskip\relax {
\hss
- \vtop to \zeropoint {
+ \tpack to \zeropoint {
\box\constructionheadbox
}
}
@@ -694,7 +704,7 @@
\startsetups[\??constructionrenderings:\v!margin]
\let\\=\crlf
\noindent
- \inmargin[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
+ \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}%
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -702,7 +712,7 @@
\startsetups[\??constructionrenderings:\v!leftmargin]
\let\\=\crlf
\noindent
- \inleft[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
+ \inleft[\c!scope=\v!local]{\flushconstructionheadbox}%
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -710,7 +720,7 @@
\startsetups[\??constructionrenderings:\v!rightmargin]
\let\\=\crlf
\noindent
- \inright[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
+ \inright[\c!scope=\v!local]{\flushconstructionheadbox}%
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -718,7 +728,7 @@
\startsetups[\??constructionrenderings:\v!innermargin]
\let\\=\crlf
\noindent
- \ininner[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
+ \ininner[\c!scope=\v!local]{\flushconstructionheadbox}%
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -726,7 +736,7 @@
\startsetups[\??constructionrenderings:\v!outermargin]
\let\\=\crlf
\noindent
- \inouter[\c!scope=\v!local]{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}%
+ \inouter[\c!scope=\v!local]{\flushconstructionheadbox}%
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -744,6 +754,7 @@
\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}
@@ -755,7 +766,7 @@
\startsetups[\??constructionrenderings:\v!serried:\v!fit]
\let\\=\crlf
\noindent
- \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox % why copy? leftover?
+ \flushconstructionheadbox
\nobreak
\hskip\constructionsheaddistance\relax
\useconstructionstyleandcolor\c!style\c!color
@@ -765,10 +776,10 @@
\startsetups[\??constructionrenderings:\v!serried:\v!broad]
\let\\=\crlf
\noindent
- \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox % why copy? leftover?
+ \flushconstructionheadbox
\ifconditional\c_strc_constructions_distance_none \else
\nobreak
- \hskip\constructionsheaddistance \!!plus .5\constructionsheaddistance \!!minus .25\constructionsheaddistance\relax
+ \hskip\constructionsheaddistance \s!plus .5\constructionsheaddistance \s!minus .25\constructionsheaddistance\relax
\fi
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
@@ -782,7 +793,7 @@
\let\\=\crlf
\noindent
\hbox to \constructionsheadwidth {
- \ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox
+ \flushconstructionheadbox
\hss
}
\nobreak
@@ -816,7 +827,13 @@
\s!plus .25\scratchdistance
\s!minus.25\scratchdistance
\fi
- \allowbreak % new
+ \ifhmode
+ \ifx\p_strc_constructions_width\v!line
+ \hfill\break
+ \else
+ \allowbreak
+ \fi
+ \fi
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -827,7 +844,7 @@
\startsetups[\??constructionrenderings:\v!command]
\noindent
- \constructionparameter\c!headcommand{\ifhbox\constructionheadbox\unhcopy\else\copy\fi\constructionheadbox}
+ \constructionparameter\c!headcommand{\flushconstructionheadbox}
\useconstructionstyleandcolor\c!style\c!color
\ignorespaces
\stopsetups
@@ -860,14 +877,14 @@
\let\currentconstructionlistentry\!!zerocount
-\def\strc_constructions_register
+\unexpanded\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=interfaced-settings, #2=optional user data
+\def\strc_constructions_register_nop[#1][#2]% #1=optional user data #2=interfaced-settings
%{\writestatus{constructions}{reusing \currentconstruction: \number\currentconstructionlistentry}}
{}
@@ -881,9 +898,9 @@
\let\currentconstructionsynchronize\relax
\let\currentconstructionattribute \attributeunsetvalue
-\def\strc_constructions_register_yes[#1][#2]% #1=interfaced-settings, #2=optional user data
+\def\strc_constructions_register_yes[#1][#2]% #1=optional user data #2=interfaced-settings
{\begingroup % similar to structure so we might generalize this
- \setupcurrentconstruction[#1]% % xdef's will become edef's
+ \setupcurrentconstruction[#2]% % xdef's will become edef's
\xdef\currentconstructionexpansion {\constructionparameter\c!expansion}%
\xdef\currentconstructionxmlsetup {\constructionparameter\c!xmlsetup}%
\xdef\currentconstructioncatcodes {\constructionparameter\s!catcodes}%
@@ -950,7 +967,6 @@
name {\currentconstructionmain}
% level structures.sections.currentlevel()
catcodes \catcodetable
- % \currentdirectionparameters
}
references {
internal \nextinternalreference
@@ -992,7 +1008,7 @@
\or
% symbol
\fi
- userdata {\detokenize{#2}}
+ userdata {\detokenize{#1}}
\relax
% \writestatus{constructions}{registering \currentconstruction: \number\scratchcounter}%
\clf_setinternalreference
@@ -1017,6 +1033,10 @@
{\edef\currentconstructionattribute {\clf_getinternallistreference#1}%
\edef\currentconstructionsynchronize{\ctxlatecommand{enhancelist(#1)}}}
+\def\reinstatecachedconstructionnumberentry#1% was xdef | #1 = cached index can be different from real
+ {\edef\currentconstructionattribute {\clf_getinternalcachedlistreference#1}% destination
+ \edef\currentconstructionsynchronize{\ctxlatecommand{enhancelist(#1)}}}
+
\installstructurelistprocessor{construction}{\usestructurelistprocessor{number+title}}
% Helpers:
diff --git a/Master/texmf-dist/tex/context/base/strc-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-def.mkiv
index b4d2a5feadf..962c46b485b 100644
--- a/Master/texmf-dist/tex/context/base/strc-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-def.mkiv
@@ -65,8 +65,16 @@
\setsectionblock [\v!bodypart] % default
+% \appendtoks
+% \setsectionblock[\v!bodypart]% default
+% \to \everyjob
+%
+% \appendtoks
+% \clf_setinitialsectionblock{\v!bodypart}%
+% \to \everystarttext
+
\appendtoks
- \setsectionblock [\v!bodypart]% default
+ \clf_setinitialsectionblock{\v!bodypart}%
\to \everyjob
% \definesection (could become \definehead with one parameter)
diff --git a/Master/texmf-dist/tex/context/base/strc-des.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-des.mkvi
index 3557000f91d..4376d9cdcd5 100644
--- a/Master/texmf-dist/tex/context/base/strc-des.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-des.mkvi
@@ -92,8 +92,6 @@
% start-stop one. Also, passing the title as argument has some
% history so we need to keep that as well.
-\ifdefined\dotagsetdescription \else \let\dotagsetdescription\relax \fi
-
% \startdescription [reference] text \stopdescription
% \startdescription [reference]{title} text \stopdescription
% \startdescription [title=,title=,reference=] text \stopdescription
@@ -109,7 +107,7 @@
{\doifelseassignment{#1}\strc_descriptions_start_yes_assignment\strc_descriptions_start_yes_reference[#1]}
\unexpanded\def\strc_descriptions_start_yes_assignment[#1]% todo userdata
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_start_yes_reference
@@ -126,11 +124,11 @@
\strc_descriptions_start_yes_normal[#1]}}
\unexpanded\def\strc_descriptions_start_yes_titled_indeed[#1]#2% todo userdata
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_start_yes_normal[#1]% todo userdata
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_start_nop
@@ -147,11 +145,11 @@
\strc_descriptions_start_nop_normal}}%
\unexpanded\def\strc_descriptions_start_nop_titled_indeed#1%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_start_nop_normal
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=]%
\csname\??constructionstarthandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_stop
@@ -173,7 +171,7 @@
\fi}
\unexpanded\def\strc_descriptions_yes_titled[#1]#2%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]%
\csname\??constructioncommandhandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_yes_titled[#1]%
@@ -183,11 +181,11 @@
\strc_descriptions_yes_normal[#1]}}
\unexpanded\def\strc_descriptions_yes_titled_indeed[#1]#2%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]%
\csname\??constructioncommandhandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_yes_normal[#1]%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=]%
\csname\??constructioncommandhandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_nop
@@ -204,11 +202,11 @@
\strc_descriptions_nop_normal}}
\unexpanded\def\strc_descriptions_nop_titled_indeed#1%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#1},\c!bookmark=,\c!list=]%
\csname\??constructioncommandhandler\currentconstructionhandler\endcsname}
\unexpanded\def\strc_descriptions_nop_normal
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=]%
\csname\??constructioncommandhandler\currentconstructionhandler\endcsname}
%D Handlers:
diff --git a/Master/texmf-dist/tex/context/base/strc-doc.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-doc.lua
index 029d68a9dc2..885e2de0ba3 100644
--- a/Master/texmf-dist/tex/context/base/strc-doc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-doc.lua
@@ -115,6 +115,10 @@ end
-- -- -- sections -- -- --
+-- This is just a quick way to have access to prefixes and the numbers (section entry in a ref)
+-- is not the list entry. An alternative is to use the list index of the last numbered section. In
+-- that case we should check a buse of the current structure.
+
local collected = allocate()
local tobesaved = allocate()
@@ -236,6 +240,24 @@ function sections.setblock(name,settings)
return block
end
+local jobvariables = job.variables
+local pushed_order = { }
+local pushed_done = { }
+
+jobvariables.tobesaved.sectionblockorder = pushed_order
+
+-- function sections.order()
+-- return jobvariables.collected.sectionblockorder or pushed_order -- so we have a first pass list too
+-- end
+
+function sections.setinitialblock(default)
+ local order = jobvariables.collected.sectionblockorder or pushed_order
+ local name = #order > 0 and order[1] or default or "bodypart"
+ context.setsectionblock { name }
+ -- interfaces.setmacro("currentsectionblock",name)
+ -- sections.setblock(name,{})
+end
+
function sections.pushblock(name,settings)
counters.check(0) -- we assume sane usage of \page between blocks
local block = name or data.block
@@ -243,6 +265,11 @@ function sections.pushblock(name,settings)
data.block = block
sectionblockdata[block] = settings
documents.reset()
+ if not pushed_done[name] then
+ pushed_done[name] = true
+ local nofpushed = #pushed_order + 1
+ pushed_order[nofpushed] = name
+ end
return block
end
@@ -1090,6 +1117,13 @@ implement {
}
implement {
+ name = "setinitialsectionblock",
+ actions = sections.setinitialblock,
+ arguments = "string",
+ -- onlyonce = true,
+}
+
+implement {
name = "pushsectionblock",
actions = sections.pushblock,
arguments = { "string", { { "bookmark" } } }
diff --git a/Master/texmf-dist/tex/context/base/strc-doc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-doc.mkiv
index c453f199ef8..c453f199ef8 100644
--- a/Master/texmf-dist/tex/context/base/strc-doc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-doc.mkiv
diff --git a/Master/texmf-dist/tex/context/base/strc-enu.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-enu.mkvi
index b76bc0067e1..832bdaf82af 100644
--- a/Master/texmf-dist/tex/context/base/strc-enu.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-enu.mkvi
@@ -285,8 +285,8 @@
\unexpanded\def\strc_enumerations_inject_extra_text
{\ifconditional\c_strc_constructions_title_state
\clf_doifelselisthastitle{\currentconstructionmain}\numexpr\currentconstructionlistentry\relax
- \donothing
\strc_enumerations_inject_extra_text_indeed
+ \donothing
\fi}
\unexpanded\def\strc_enumerations_inject_text
diff --git a/Master/texmf-dist/tex/context/base/strc-flt.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-flt.lua
index 466fd515e04..466fd515e04 100644
--- a/Master/texmf-dist/tex/context/base/strc-flt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-flt.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-flt.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-flt.mkvi
index be2958fbfc3..e83e036fa75 100644
--- a/Master/texmf-dist/tex/context/base/strc-flt.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-flt.mkvi
@@ -157,6 +157,8 @@
\c!ntop=2,
\c!nbottom=0,
\c!nlines=4, % used?
+ \c!topoffset=\zeropoint,
+ \c!bottomoffset=\zeropoint,
%\c!local=,
%\c!bottombefore=, % e.g. \vfill
%\c!bottomafter=,
@@ -184,16 +186,36 @@
\unexpanded\def\definefloat
{\dotripleempty\strc_floats_define}
-\def\strc_floats_define[#1][#2][#3]% #1=naam #2=meervoud #3=parent
+\def\strc_floats_define[#1][#2][#3]% name+plural+parent | name+parent+settings
{\ifthirdargument
- \strc_floats_define_cloned[#1][#2][#3]%
+ \doifassignmentelse{#3}
+ {\strc_floats_define_b[#1][#2][#3]}%
+ {\strc_floats_define_a[#1][#2][#3]}%
\else\ifsecondargument
- \strc_floats_define_normal[#1][#2]%
+ \doifelsecommandhandler\??float{#2}%
+ {\strc_floats_define_a[#1][#1][#2]}%
+ {\strc_floats_define_c[#1][#2]}%
\else
- \strc_floats_define_normal[#1][#1]%
+ \strc_floats_define_c[#1][#1]%
\fi\fi}
-\def\strc_floats_define_normal[#1][#2]%
+\def\strc_floats_define_a[#1][#2][#3]% name names parent
+ {\definefloatcaption[#1][#3]%
+ \definecounter[#1][#3]%
+ \definelist[#1][#3]%
+ \copylabeltext[#1=#3]%
+ \strc_floats_define_saved[#1][#3]%
+ \strc_floats_define_commands{#1}{#2}}
+
+\def\strc_floats_define_b[#1][#2][#3]% name parent settings
+ {\definefloatcaption[#1][#2]%
+ \definecounter[#1][#2]%
+ \definelist[#1][#2]%
+ \copylabeltext[#1=#2]%
+ \strc_floats_define_saved[#1][#2][#3]%
+ \strc_floats_define_commands{#1}{#1}}
+
+\def\strc_floats_define_c[#1][#2]% name names
{\registerfloatcaptioncounter{#1}%
\definefloatcaption[#1]%
\definecounter[#1]%
@@ -203,15 +225,6 @@
\strc_floats_define_saved[#1]%
\strc_floats_define_commands{#1}{#2}}
-\def\strc_floats_define_cloned[#1][#2][#3]%
- {\definefloatcaption[#1][#3]%
- \definecounter[#1][#3]%
- \definelist[#1][#3]%
- \copylabeltext[#1=#3]%
- %\presetheadtext[#2=\Word{#2}]%
- \strc_floats_define_saved[#1][#3]%
- \strc_floats_define_commands{#1}{#2}}
-
\def\strc_floats_define_commands#1#2%
{\setuvalue {\e!place\e!listof#2}{\dodoubleempty\strc_lists_place[#1]}% call will change
\setuvalue {\e!complete\e!listof#2}{\dotripleempty\strc_lists_complete_indeed[#1][#2]}% call will change
@@ -256,21 +269,25 @@
\namedtaggedlabeltexts
\t!floatlabel \currentfloat
\t!floatnumber\currentfloat
- {\floatcaptionparameter\c!numbercommand
+ {\begstrut
+ \floatcaptionparameter\c!numbercommand
{\clf_savedlistprefixednumber{\currentfloat}\currentfloatnumber\relax
- \thecurrentfloatnumbersuffix}}%
+ \thecurrentfloatnumbersuffix}%
+ \endstrut}%
\fi
\fi \fi}
\unexpanded\def\thecurrentfloatcaption
- {\ifnofloatcaption \else
+ {\ifnofloatcaption \else \ifemptyfloatcaption \else
\ifx\currentfloatnumber\relax\else
\dostarttagged\t!floattext\empty
+ \begstrut
\floatcaptionparameter\c!textcommand
- {\clf_savedlisttitle{\currentfloat}\currentfloatnumber\relax}%
+ {\clf_savedlisttitle{\currentfloat}\numexpr\currentfloatnumber\relax}%
+ \endstrut
\dostoptagged
\fi
- \fi}
+ \fi \fi}
%D Captions.
@@ -314,9 +331,12 @@
\gdef\lastcaptiontag{\strut\thecurrentfloatnumber}% was xdef ... needs checking
\begingroup
\usefloatcaptionstyleandcolor\c!style\c!color
+ \clf_doifelselisthastitle{\currentfloat}\numexpr\currentfloatnumber\relax
+ \donothing
+ \emptyfloatcaptiontrue
\ifnofloatnumber
\else
- \hbox{\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor\strut\thecurrentfloatnumber}%
+ \hbox{\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor\thecurrentfloatnumber}%
\ifnofloatcaption \else \ifemptyfloatcaption \else
\doifelsenothing{\floatcaptionparameter\c!spaceinbetween}
{\scratchskip\floatcaptionparameter\c!distance\relax
@@ -331,7 +351,7 @@
\usefloatcaptionstyleandcolor\c!textstyle\c!textcolor
\global\d_strc_floats_caption_height\strutheight
\global\d_strc_floats_caption_depth \strutdepth
- \begstrut\thecurrentfloatcaption\endstrut\endgraf
+ \thecurrentfloatcaption\endgraf
\fi
\endgroup
\doifsomething{\floatcaptionparameter\c!spaceafter}{\blank[\floatcaptionparameter\c!spaceafter]}}
@@ -383,7 +403,7 @@
\fi
\else
\global\emptyfloatcaptionfalse
- \setbox\b_strc_floats_caption\hbox{\hskip\leftskip\box\b_strc_floats_caption}%
+ \setbox\b_strc_floats_caption\hpack{\hskip\leftskip\box\b_strc_floats_caption}%
\fi
\fi}
@@ -509,12 +529,22 @@
\strc_floats_set_current_tag{#tag}%
\dodoubleempty\strc_floats_place_indeed}
+\newtoks\c_floats_every_table_float
+
+\appendtoks
+ \edef\floatlocation{\v!force,\v!always,\floatlocation}%
+ \setupfloat[\c!spacebefore=\v!none,\c!spaceafter=\v!none]%
+\to \c_floats_every_table_float
+
\def\strc_floats_place_indeed[#location][#reference]#caption%
{\strc_floats_reset_variables
\edef\floatlocation{#location}%
\ifx\floatlocation\empty
\edef\floatlocation{\floatparameter\c!default}% beware of a clash between alignment locations
\fi
+ \ifintable
+ \the\c_floats_every_table_float
+ \fi
\strc_floats_analyze_location
% todo: use \lets
\setupcurrentfloatcaption[\c!reference={#reference},\c!title={#caption},\c!marking=,\c!list=,\c!bookmark=]%
@@ -552,10 +582,14 @@
\def\strc_floats_start_place_indeed[#settings][#userdata]%
{\strc_floats_reset_variables
\edef\savedfloatlocation{\floatcaptionparameter\c!location}%
+ \setexpandedfloatcaptionparameter\c!topoffset {\floatparameter\c!topoffset}%
+ \setexpandedfloatcaptionparameter\c!bottomoffset{\floatparameter\c!bottomoffset}%
\setupcurrentfloatcaption[\c!location=,\c!reference=,\c!title=,\c!marking=,\c!list=,\c!bookmark=,#settings]%
+ \setexpandedfloatparameter\c!topoffset {\floatcaptionparameter\c!topoffset}%
+ \setexpandedfloatparameter\c!bottomoffset{\floatcaptionparameter\c!bottomoffset}%
\def\m_strc_floats_saved_userdata{#2}%
\edef\floatlocation{\floatcaptionparameter\c!location}%
- \setupcurrentfloatcaption[\c!location=\savedfloatlocation]%
+ \setfloatcaptionparameter\c!location{\savedfloatlocation}% not expanded
\ifx\floatlocation\empty
\edef\floatlocation{\floatparameter\c!default}%
\fi
@@ -741,6 +775,8 @@
{\global\d_page_sides_topskip \zeropoint
\global\d_page_sides_bottomskip\zeropoint
\global\d_strc_floats_margin \zeropoint}%
+ \global\advance\d_page_sides_topskip \floatparameter\c!topoffset
+ \global\advance\d_page_sides_bottomskip\floatparameter\c!bottomoffset
\else
\processallactionsinset
[\floatlocation]
@@ -848,9 +884,11 @@
\ifnofloatnumber \else \ifnofloatcaption \else
\ifx\currentfloatgroup\empty
% independent
+ \iftrialtypesetting\strc_counters_save\currentfloatcounter\fi
\strc_counters_increment\currentfloatcounter
\else\ifcase\strc_floats_group_index
% first in group
+ \iftrialtypesetting\strc_counters_save\currentfloatcounter\fi
\strc_counters_increment\currentfloatcounter
\else
% next in group
@@ -880,22 +918,23 @@
\global\setfalse\usesamefloatnumber % one shot
% check float box
\strc_floats_set_natural_dimensions\nextbox
- \global\setbox\floatbox\vbox{\floatparameter\c!command{\box\nextbox}}%
+ \global\setbox\floatbox\vbox{\floatparameter\c!command{\box\nextbox}}% can be anything so no pack
\strc_floats_set_natural_dimensions\floatbox
\ifdim\htdp\floatbox=\zeropoint
\showmessage\m!floatblocks{11}\empty
- \global\setbox\floatbox\vbox
+ \global\setbox\floatbox\vpack
{\dostarttagged\t!floatcontent\empty
\strc_floats_place_empty_box
\dostoptagged}%
\fi
% deal with lack of caption
- \global\setbox\floatbox\vbox \floatcaptionattribute
+ \global\setbox\floatbox\vpack \floatcaptionattribute
{\doifelsemainfloatbody\currentfloatsynchronize\donothing
\unvbox\floatbox
\ifnofloatcaption
\vss
\fi}% gets rid of the depth (unless tabulate)
+ \iftrialtypesetting\strc_counters_restore\currentfloatcounter\fi
\egroup
% place the float
\strc_floats_set_box
@@ -931,13 +970,13 @@
\ifsinglesided
\doubleexpandafter\firstoftwoarguments
\else
- \doubleexpandafter\doifelseoddfloatpage
+ \doubleexpandafter\doifelseoddpagefloat
\fi
\else
\expandafter\firstoftwoarguments
\fi}
-\def\doifelseoddfloatpage
+\def\doifelseoddpagefloat
{\ifodd\purenumber\strc_float_realpage\space
\expandafter\firstoftwoarguments
\else
@@ -1062,7 +1101,7 @@
{\global\d_page_sides_shift \zeropoint % duplicate
\global\d_page_sides_maximum\zeropoint\relax % duplicate
\ifdim\d_page_sides_downshift=\zeropoint\else
- \global\setbox\floatbox\vbox
+ \global\setbox\floatbox\vpack
{\vskip\d_page_sides_downshift
\nointerlineskip
\box\floatbox}%
@@ -1098,13 +1137,13 @@
\fi}
\def\strc_floats_realign_floatbox_horizontal_one
- {\global\setbox\floatbox\hbox to \scratchwidth
+ {\global\setbox\floatbox\hpack to \scratchwidth
{\doifnotinset\v!right\floatlocation\hss
\box\floatbox
\doifnotinset\v!left \floatlocation\hss}}
\def\strc_floats_realign_floatbox_horizontal_two
- {\global\setbox\floatbox\hbox to \scratchwidth
+ {\global\setbox\floatbox\hpack to \scratchwidth
{\doifnot{\floatparameter\c!location}\v!left \hss
\box\floatbox
\doifnot{\floatparameter\c!location}\v!right\hss}}
@@ -1143,23 +1182,44 @@
\unexpanded\def\betweenfloatblanko % assumes that spaceafter is present
{\blank[\rootfloatparameter\c!spacebefore]} % or v!back,....
+% keep as old 1
+%
% \unexpanded\def\doplacefloatbox % used elsewhere
% {%\forgetall % NO
% \whitespace
% \blank[\rootfloatparameter\c!spacebefore]
% \page_otr_command_flush_float_box
% \blank[\rootfloatparameter\c!spaceafter]}
+%
+% keep as old 2
+%
+% \unexpanded\def\doplacefloatbox % used elsewhere
+% {%\forgetall % NO
+% \whitespace
+% \blank[\rootfloatparameter\c!spacebefore]
+% \nointerlineskip
+% \flushnotes % new per 2014-05-29 : todo: move them up in the mvl
+% \nointerlineskip
+% \page_otr_command_flush_float_box
+% \nointerlineskip
+% \blank[\rootfloatparameter\c!spaceafter]}
+
+\def\strc_floats_apply_skip#1%
+ {\edef\m_space{\rootfloatparameter#1}%
+ \ifx\m_space\empty \else\ifx\m_space\v!none \else
+ \directvspacing\m_space
+ \fi\fi}
\unexpanded\def\doplacefloatbox % used elsewhere
{%\forgetall % NO
\whitespace
- \blank[\rootfloatparameter\c!spacebefore]
+ \strc_floats_apply_skip\c!spacebefore
\nointerlineskip
\flushnotes % new per 2014-05-29 : todo: move them up in the mvl
\nointerlineskip
\page_otr_command_flush_float_box
- \nointerlineskip
- \blank[\rootfloatparameter\c!spaceafter]}
+ % \nointerlineskip % interferes with depth of caption
+ \strc_floats_apply_skip\c!spaceafter}
% test case:
%
@@ -1199,7 +1259,7 @@
{\egroup
\doifnotinset\v!tall\floatlocation
{\floattextheight\ifdim\ht\floattext<\floatheight\floatheight\else\ht\floattext\fi}%
- \setbox\floatbox\vbox to \floattextheight
+ \setbox\floatbox\vpack to \floattextheight
{\hsize\floatwidth
\doifelseinset\v!both\floatlocation
{\doifelseinset\v!low\floatlocation
@@ -1208,7 +1268,7 @@
{\vfill\box\floatbox\vfill}
{\box\floatbox\vfill}}}
{\box\floatbox\vfill}}%
- \setbox\floattext\vbox to \floattextheight
+ \setbox\floattext\vpack to \floattextheight
{\hsize\floattextwidth
\doifelseinset\v!low\floatlocation
{\vfill
@@ -1222,11 +1282,11 @@
\box\floattext
\vfill}}}%
\doifelseinset\v!right\floatlocation
- {\setbox\floatbox\hbox to \hsize
+ {\setbox\floatbox\hpack to \hsize
{\box\floattext
\hfill
\box\floatbox}}
- {\setbox\floatbox\hbox to \hsize
+ {\setbox\floatbox\hpack to \hsize
{\box\floatbox
\hfill
\box\floattext}}%
@@ -1280,7 +1340,7 @@
\forgetall
\postponenotes
\dontcomplain
- \setbox\b_strc_floats_content\vbox{\borderedfloatbox}%
+ \setbox\b_strc_floats_content\vpack{\borderedfloatbox}%
\let\strc_floats_align_content\strc_floats_align_content_indeed
\let\strc_floats_align_caption\strc_floats_align_caption_indeed
\strc_floats_check_caption_content
@@ -1296,7 +1356,7 @@
% todo: installable maken, variant/method=auto vs macro
\strc_floats_prepare_page_caption
%\page_backgrounds_add_local_to_box\b_strc_floats_content
- \setbox\b_strc_floats_caption\hbox
+ \setbox\b_strc_floats_caption\hbox % text
{\floatcaptionparameter\c!command{\box\b_strc_floats_caption}}%
\moveboxontogrid\b_strc_floats_caption{\floatcaptionparameter\c!grid}\d_strc_floats_caption_height
%\page_backgrounds_add_local_to_box\b_strc_floats_caption
@@ -1311,13 +1371,13 @@
\doifnotinset\v!margin\floatlocation % brr, really needed! see wm
{\postcenterfloatbox\d_strc_floats_content}%
\else
- \global\setbox\floatbox\vbox
+ \global\setbox\floatbox\vpack
{\rotate[\c!rotation=\number\c_strc_floats_rotation]{\box\floatbox}}%
\fi
\egroup}
\def\strc_floats_prepare_no_caption
- {\global\setbox\floatbox\vbox % pas op als wd groter dan hsize
+ {\global\setbox\floatbox\vpack % pas op als wd groter dan hsize
{\ifinsidecolumns\ifdim\wd\b_strc_floats_content>\hsize
\let\strc_floats_align_content\relax
\fi\fi
@@ -1416,70 +1476,6 @@
\fi
\strc_floats_make_complete_caption}}
-% \def\strc_floats_prepare_stack_caption_auto
-% {\ifx\p_strc_floats_caption_align\empty \else
-% \doifnotinset\v!middle\p_strc_floats_caption_align{\let\captionovershoot\!!zeropoint}%
-% \fi
-% \edef\captionhsize{\the\wd\b_strc_floats_content}%
-% \ifdim\captionhsize>\hsize
-% % float is wider than \hsize
-% \setbox\b_strc_floats_caption\vbox
-% {\settrialtypesetting
-% \strc_floats_caption_set_align
-% \hsize\captionhsize
-% \notesenabledfalse
-% \strc_floats_make_complete_caption}%
-% \ifdim\ht\scratchbox>\lineheight % more lines
-% \setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\dimexpr\captionhsize-\captionovershoot\relax
-% \ifdim\hsize<\captionminwidth\relax
-% \hsize\captionhsize
-% \fi
-% \strc_floats_make_complete_caption}%
-% \else
-% \setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\captionhsize
-% \strc_floats_make_complete_caption}%
-% \fi
-% \else
-% % float is smaller of equal to \hsize
-% \ifdim\captionhsize<\captionminwidth\relax
-% \scratchdimen\captionminwidth % float smaller than min width
-% \edef\captionhsize{\the\scratchdimen}%
-% \fi
-% \setbox\scratchbox\vbox % test with overshoot
-% {\settrialtypesetting
-% \scratchdimen\dimexpr\captionhsize+\captionovershoot+3\emwidth\relax % 3em is an average word length
-% \ifdim\scratchdimen<\hsize
-% \hsize\scratchdimen
-% \fi
-% \notesenabledfalse
-% \strc_floats_make_complete_caption}%
-% \ifdim\ht\scratchbox>\lineheight
-% % at least an average word longer than a line
-% \setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \scratchdimen\dimexpr\captionhsize+\captionovershoot\relax
-% \ifdim\scratchdimen<\hsize
-% \hsize\scratchdimen
-% \fi
-% \strc_floats_make_complete_caption}%
-% \else\ifx\p_strc_floats_caption_align\empty
-% \setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\captionhsize
-% \raggedcenter % overloads
-% \strc_floats_make_complete_caption}%
-% \else
-% \setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\captionhsize
-% \strc_floats_make_complete_caption}%
-% \fi\fi
-% \fi}
-
\def\strc_floats_prepare_stack_caption_auto
{\ifx\p_strc_floats_caption_align\empty \else
\doifnotinset\v!middle\p_strc_floats_caption_align{\let\captionovershoot\!!zeropoint}%
@@ -1555,7 +1551,7 @@
{\strc_floats_align_content{\box\b_strc_floats_content}}
\def\strc_floats_build_box_next_right#1%
- {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi
+ {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi % skip, no pack
{\d_strc_float_temp_height\ht\b_strc_floats_content
\box\b_strc_floats_content
\doifnotinset\v!hang{\floatcaptionparameter\c!location}
@@ -1563,7 +1559,7 @@
\vbox to\d_strc_float_temp_height{#1}}}
\def\strc_floats_build_box_next_left#1%
- {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi
+ {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi % skip, no pack
{\d_strc_float_temp_height\ht\b_strc_floats_content
\vbox to\d_strc_float_temp_height{#1}%
\doifnotinset\v!hang{\floatcaptionparameter\c!location}
@@ -1577,23 +1573,23 @@
{\doifelserightpagefloat\strc_floats_build_box_next_left\strc_floats_build_box_next_right}
\def\strc_floats_build_box_next_right_hang#1%
- {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi
+ {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi
{\d_strc_float_temp_height\ht\b_strc_floats_content
\box\b_strc_floats_content
\vbox to\d_strc_float_temp_height{#1}}}
\def\strc_floats_build_box_next_left_hang#1%
- {\ifconditional\c_strc_floats_par_float \hbox \else \expandafter \strc_floats_align_content \fi
+ {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi
{\d_strc_float_temp_height\ht\b_strc_floats_content
\vbox to\d_strc_float_temp_height{#1}%
\box\b_strc_floats_content}}
\def\strc_floats_build_box_next_right_margin_indeed#1#2%
{\ifconditional\c_strc_floats_par_float
- \hbox\bgroup
- \d_strc_float_temp_height\ht\b_strc_floats_content
- \box\b_strc_floats_content
- \hsmash{\hskip#1\vbox to\d_strc_float_temp_height{#2}}%
+ \hpack\bgroup
+ \d_strc_float_temp_height\ht\b_strc_floats_content
+ \box\b_strc_floats_content
+ \hsmash{\hskip#1\vbox to\d_strc_float_temp_height{#2}}%
\egroup
\else
\begingroup
@@ -1605,10 +1601,10 @@
\def\strc_floats_build_box_next_left_margin_indeed#1#2%
{\ifconditional\c_strc_floats_par_float
- \hbox\bgroup
- \d_strc_float_temp_height\ht\b_strc_floats_content
- \hsmash{\hskip-\dimexpr#1+\wd\b_strc_floats_caption\relax\vbox to\d_strc_float_temp_height{#2}}%
- \box\b_strc_floats_content
+ \hpack\bgroup
+ \d_strc_float_temp_height\ht\b_strc_floats_content
+ \hsmash{\hskip-\dimexpr#1+\wd\b_strc_floats_caption\relax\vbox to\d_strc_float_temp_height{#2}}%
+ \box\b_strc_floats_content
\egroup
\else
\begingroup
@@ -1712,14 +1708,14 @@
\def\strc_floats_build_box_top_stack_normal_content
{\d_strc_float_temp_width\wd\b_strc_floats_content
\ifconditional\c_strc_floats_par_float
- \hbox{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}%
+ \hpack{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}%
\strc_floats_between_stack
- \hbox{\hbox{\box\b_strc_floats_content}}%
+ \hpack{\hbox{\box\b_strc_floats_content}}%
\else
\page_otr_command_set_float_hsize
- \hbox{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}
+ \hpack{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}
\strc_floats_between_stack
- \hbox{\strc_floats_align_content{\box\b_strc_floats_content}}%
+ \hpack{\strc_floats_align_content{\box\b_strc_floats_content}}%
\fi}
\def\strc_floats_build_box_bottom_stack_normal_overlay
@@ -1728,14 +1724,14 @@
\def\strc_floats_build_box_bottom_stack_normal_content
{\d_strc_float_temp_width\wd\b_strc_floats_content
\ifconditional\c_strc_floats_par_float
- \hbox{\hbox{\box\b_strc_floats_content}}%
+ \hpack{\hpack{\box\b_strc_floats_content}}%
\strc_floats_between_stack
- \hbox{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}%
+ \hpack{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}%
\else
\page_otr_command_set_float_hsize
- \hbox{\strc_floats_align_content{\box\b_strc_floats_content}}%
+ \hpack{\strc_floats_align_content{\box\b_strc_floats_content}}%
\strc_floats_between_stack
- \hbox{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}%
+ \hpack{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}%
\fi}
\def\strc_floats_build_box_top_stack_normal
@@ -1755,7 +1751,7 @@
\ifconditional\c_strc_floats_par_float
\strc_floats_locate_side_float{\box\b_strc_floats_caption}%
\vss\strc_floats_between_stack
- \hbox{\box\b_strc_floats_content}%
+ \hpack{\box\b_strc_floats_content}%
\else
\page_otr_command_set_float_hsize
\strc_floats_locate_text_float{\box\b_strc_floats_caption}%
@@ -1770,7 +1766,7 @@
\setbox\scratchbox\vbox
{\d_strc_float_temp_width\wd\b_strc_floats_content
\ifconditional\c_strc_floats_par_float
- \hbox{\box\b_strc_floats_content}%
+ \hpack{\box\b_strc_floats_content}%
\vss\strc_floats_between_stack
\strc_floats_locate_side_float{\box\b_strc_floats_caption}%
\else
@@ -1784,16 +1780,16 @@
\def\strc_floats_build_box_top_stack_stretch
{\dp\b_strc_floats_caption\strutdepth
- \setbox\scratchbox\vbox
+ \setbox\scratchbox\vpack
{\strc_floats_align_caption{\copy\b_strc_floats_caption}%
\strc_floats_align_content{\copy\b_strc_floats_content}}%
\getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
- \vbox to \noflines\lineheight
+ \vbox to \noflines\lineheight % pack ?
{\d_strc_float_temp_width\wd\b_strc_floats_content
\ifconditional\c_strc_floats_par_float
\strc_floats_locate_side_float{\box\b_strc_floats_caption}%
\vss\strc_floats_between_stack\vss
- \hbox{\box\b_strc_floats_content}%
+ \hpack{\box\b_strc_floats_content}%
\else
\page_otr_command_set_float_hsize
\strc_floats_locate_text_float{\box\b_strc_floats_caption}%
@@ -1803,14 +1799,14 @@
\def\strc_floats_build_box_bottom_stack_stretch
{\dp\b_strc_floats_caption\strutdepth
- \setbox\scratchbox\vbox
+ \setbox\scratchbox\vbox % pack ?
{\strc_floats_align_content{\copy\b_strc_floats_content }%
\strc_floats_align_caption{\copy\b_strc_floats_caption}}%
\getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
\vbox to \noflines\lineheight
{\d_strc_float_temp_width\wd\b_strc_floats_content
\ifconditional\c_strc_floats_par_float
- \hbox{\box\b_strc_floats_content}%
+ \hpack{\box\b_strc_floats_content}%
\vss\strc_floats_between_stack\vss
\strc_floats_locate_side_float{\box\b_strc_floats_caption}
\else
@@ -1840,15 +1836,25 @@
\unexpanded\def\installfloatboxbuilder#1#2{\setvalue{\??floatbuilder#1}{#2}}
\def\strc_floats_build_box
- {\global\setbox\floatbox\vbox
+ {\global\setbox\floatbox\vbox % pack ? probably not
{\strc_floats_set_local_hsize
\forgetall
\let\floatcaptionarrangement\s!default
\processcommacommand[\floatcaptionparameter\c!location]\strc_floats_build_box_step
- \executeifdefined{\??floatbuilder\floatcaptionarrangement}{\getvalue{\??floatbuilder\s!default}}}}
+ \ifcsname\??floatbuilder\floatcaptionarrangement\endcsname
+ \lastnamedcs
+ \else
+ \strc_floats_build_box_default
+ \fi}}
+
+% \def\strc_floats_build_box_step#1%
+% {\doifdefined{\??floatbuilder#1}{\def\floatcaptionarrangement{#1}\quitcommalist}}
\def\strc_floats_build_box_step#1%
- {\doifdefined{\??floatbuilder#1}{\def\floatcaptionarrangement{#1}\quitcommalist}}
+ {\ifcsname\??floatbuilder#1\endcsname
+ \def\floatcaptionarrangement{#1}% \let\floatcaptionarrangement\commalistelement
+ \quitcommalist
+ \fi}
\def\strc_floats_locate_text_float
{\let\next\strc_floats_align_caption
@@ -1922,7 +1928,7 @@
\setbox\b_strc_floats_content\vbox{\borderedfloatbox}%
%\page_backgrounds_add_local_to_box\b_strc_floats_content
\ifnofloatcaption
- \global\setbox\floatbox\vbox{\box\b_strc_floats_content}%
+ \global\setbox\floatbox\vpack{\box\b_strc_floats_content}%
\else
\strc_floats_check_caption_content
\strc_floats_prepare_side_caption
@@ -1933,30 +1939,6 @@
\fi
\egroup}
-% \def\strc_floats_prepare_side_caption
-% {\dostarttagged\t!floatcaption\empty
-% \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}%
-% \doifelse{\floatcaptionparameter\c!width}\v!max
-% {\setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\wd\b_strc_floats_content
-% \strc_floats_make_complete_caption}}%
-% {\doifelse{\floatcaptionparameter\c!width}\v!fit
-% {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax
-% \setbox\b_strc_floats_caption\vbox
-% {\forgetall % needed?
-% \hsize\wd\b_strc_floats_content
-% \strc_floats_make_complete_caption}%
-% \else
-% \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content
-% {\hss\hbox{\strc_floats_make_complete_caption}\hss}%
-% \fi}
-% {\setbox\b_strc_floats_caption\vbox
-% {\strc_floats_caption_set_align
-% \hsize\floatcaptionparameter\c!width % \wd\b_strc_floats_content
-% \strc_floats_make_complete_caption}}}%
-% \dostoptagged}
-
\def\strc_floats_prepare_side_caption
{\dostarttagged\t!floatcaption\empty
\edef\p_strc_floats_caption_width{\floatcaptionparameter\c!width}%
@@ -1972,20 +1954,26 @@
% these could be \??floatpreparesidecaption
+% \setupfloat[figure][location=left]
+% \setupcaption[figure][width=max]
+%
+% \placefigure{my figure caption my figure caption}{\framed[width=4cm,height=1cm]{}} \input tufte
+% \placefigure{my figure caption} {\framed[width=4cm,height=1cm]{}} \input tufte
+
\def\strc_floats_prepare_side_caption_max
{\setbox\b_strc_floats_caption\vbox
{\strc_floats_caption_set_align
\hsize\wd\b_strc_floats_content
\strc_floats_make_complete_caption}}
-\def\strc_floats_prepare_side_caption_fit
+\def\strc_floats_prepare_side_caption_fit % or center when smaller
{\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax
\setbox\b_strc_floats_caption\vbox
{\forgetall % needed?
\hsize\wd\b_strc_floats_content
\strc_floats_make_complete_caption}%
\else
- \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content
+ \setbox\b_strc_floats_caption\hpack to \wd\b_strc_floats_content
{\hss\hbox{\strc_floats_make_complete_caption}\hss}%
\fi}
@@ -2052,11 +2040,11 @@
\fi
\strc_floats_set_local_dimensions
\global\advance\totalnoffloats\plusone
- \setbox\floatbox\hbox{\strc_float_save_data\box\floatbox}% still needed? we will do renumbering differently
+ \setbox\floatbox\hpack{\strc_float_save_data\box\floatbox}% still needed? we will do renumbering differently
\global\floatheight\htdp\floatbox
\global\floatwidth\wd\floatbox
\doifnotinset\v!margin\floatlocation % gaat namelijk nog fout
- {\setbox\floatbox\vbox
+ {\setbox\floatbox\vpack
{\parindent\zeropoint
\box\floatbox}}%
\wd\floatbox\floatwidth
@@ -2113,9 +2101,9 @@
% \let\floatrow \empty
% \setfloatmethodvariables\floatlocation
% todo: nog algemeen otr
- \ifdefined\OTRSETsetpreferedcolumnslot
- \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
- \fi
+% \ifdefined\OTRSETsetpreferedcolumnslot
+% \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
+% \fi
\ifcsname\??floatmethods\currentoutputroutine:\floatmethod\endcsname \else
\let\floatmethod\v!here
\fi
@@ -2296,7 +2284,7 @@
\else
\directlocalfloatsparameter\c!inbetween
\fi
- \dontleavehmode\hbox{\foundbox\??localfloatstack\recurselevel}% \restorebox...
+ \dontleavehmode\hpack{\foundbox\??localfloatstack\recurselevel}% \restorebox...
\ifnum\recurselevel=\c_strc_localfloats_n\relax
\directlocalfloatsparameter\c!after
\fi}}
diff --git a/Master/texmf-dist/tex/context/base/strc-ind.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-ind.mkiv
index 0098bff7da6..2748fd684ac 100644
--- a/Master/texmf-dist/tex/context/base/strc-ind.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ind.mkiv
@@ -104,6 +104,12 @@
\par
\endgroup}
+\unexpanded\def\startindentedtext
+ {\dosingleempty\strc_indentedtexts_start_direct}
+
+\def\strc_indentedtexts_start_direct[#1]%
+ {\strc_indentedtexts_start{#1}\c_strc_indentedtexts_nesting}
+
\let\stopindentedtext\strc_indentedtexts_stop
\unexpanded\def\strc_indentedtexts_direct#1#2#3\par % no longer clever grabpar trickery
diff --git a/Master/texmf-dist/tex/context/base/strc-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-ini.lua
index f736427bb44..dffbe3fcd8f 100644
--- a/Master/texmf-dist/tex/context/base/strc-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ini.lua
@@ -233,6 +233,13 @@ local tags = {
--
-- local command = formatters["\\xmlprocessbuffer{%s}{%s}{}"](metadata.xmlroot or "main",tag)
+local overload_catcodes = true
+
+directives.register("typesetters.processors.overloadcatcodes",function(v)
+ -- number | true | false | string
+ overload_catcodes = v
+end)
+
local experiment = true
function helpers.title(title,metadata) -- coding is xml is rather old and not that much needed now
@@ -265,12 +272,7 @@ function helpers.title(title,metadata) -- coding is xml is rather old and not th
ctx_xmlsetup(title,metadata.xmlsetup)
else
local catcodes = metadata.catcodes
- if catcodes == notcatcodes or catcodes == xmlcatcodes then
- if trace_processors then
- report_processors("catcodetable %a, overloads %a, text %a",ctxcatcodes,catcodes,title)
- end
- context(title) -- nasty
- else
+ if overload_catcodes == false then
if trace_processors then
report_processors("catcodetable %a, text %a",catcodes,title)
end
@@ -283,10 +285,30 @@ function helpers.title(title,metadata) -- coding is xml is rather old and not th
ctx_pushcatcodes(catcodes)
context(title)
ctx_popcatcodes()
+ elseif overload_catcodes == true then
+ if catcodes == notcatcodes or catcodes == xmlcatcodes then
+ -- when was this needed
+ if trace_processors then
+ report_processors("catcodetable %a, overloads %a, text %a",ctxcatcodes,catcodes,title)
+ end
+ context(title)
+ else
+ ctx_pushcatcodes(catcodes)
+ context(title)
+ ctx_popcatcodes()
+ end
+ else
+ if trace_processors then
+ report_processors("catcodetable %a, overloads %a, text %a",catcodes,overload_catcodes,title)
+ end
+ ctx_pushcatcodes(overload_catcodes)
+ context(title)
+ ctx_popcatcodes()
end
end
else
- context(title) -- no catcode switch, was: texsprint(title)
+ -- no catcode switch, was: texsprint(title)
+ context(title)
end
end
end
@@ -370,7 +392,6 @@ function sets.get(namespace,block,name,level,default) -- check if name is passed
if not dn then
return default
end
--- inspect(dn)
local dl = dn[1][level]
return dl or dn[2] or default
end
diff --git a/Master/texmf-dist/tex/context/base/strc-ini.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-ini.mkvi
index ad83cbc58c2..ad83cbc58c2 100644
--- a/Master/texmf-dist/tex/context/base/strc-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ini.mkvi
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-itm.lua
index adec591c1c1..adec591c1c1 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-itm.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-itm.mkvi
index 86fc9d9fd28..48c8e1a302e 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-itm.mkvi
@@ -167,6 +167,8 @@
\newconditional\c_strc_itemgroups_head
\newconditional\c_strc_itemgroups_intro
\newconditional\c_strc_itemgroups_randomize
+\newconditional\c_strc_itemgroups_horizontal
+\newconditional\c_strc_itemgroups_collecting
\newconditional\c_strc_itemgroups_auto_intro
\newconditional\c_strc_itemgroups_pack
\newconditional\c_strc_itemgroups_paragraph
@@ -253,7 +255,7 @@
% no need to collect nodes in \b_strc_destination_nodes here ... maybe at some point
\strc_references_start_destination_nodes
% this is somewhat over the top ... we should use the counter's reference
- \clf_setreferenceattribute
+ \clf_setdestinationattribute
{%
metadata {%
kind {item}% was item, why?
@@ -337,12 +339,12 @@
\setgvalue{\??itemgroupsetting\currentitemgroup}{\setupcurrentitemgroup[#settings]}}
\def\strc_itemgroups_fetch_continue_state
- {\getvalue{\??itemgroupoption \currentitemgroup}%
- \getvalue{\??itemgroupsetting\currentitemgroup}}
+ {\csname\??itemgroupoption \currentitemgroup\endcsname
+ \csname\??itemgroupsetting\currentitemgroup\endcsname}
\def\strc_itemgroups_reset_continue_state
- {\letgvalue{\??itemgroupoption \currentitemgroup}\relax
- \letgvalue{\??itemgroupsetting\currentitemgroup}\relax}
+ {\global\expandafter\let\csname\??itemgroupoption \currentitemgroup\endcsname\relax
+ \global\expandafter\let\csname\??itemgroupsetting\currentitemgroup\endcsname\relax}
% These will become keywords. We will also add a feature to keep the while set
% together.
@@ -388,7 +390,7 @@
\let\itemgroupfirst\!!plusone
\fi
\ifcsname\??itemgroupkeyword\itemgroupsecond\endcsname
- \csname\??itemgroupkeyword\itemgroupsecond\endcsname
+ \lastnamedcs
\else
\strc_itemgroups_set_symbol\itemgroupconstantvalue
\fi
@@ -440,10 +442,30 @@
\setvalue{\??itemgroupkeyword\v!three }{\letitemgroupparameter\c!n\plusthree}
\setvalue{\??itemgroupkeyword\v!four }{\letitemgroupparameter\c!n\plusfour}
\setvalue{\??itemgroupkeyword\v!five }{\letitemgroupparameter\c!n\plusfive}
-\setvalue{\??itemgroupkeyword\v!standard }{\setupcurrentitemgroup
- [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,\c!factor=0,%
- \c!beforehead=,\c!afterhead=\blank,%
- \c!before=\blank,\c!inbetween=\blank,\c!after=\blank]}
+\setvalue{\??itemgroupkeyword\v!six }{\letitemgroupparameter\c!n\plussix}
+\setvalue{\??itemgroupkeyword\v!seven }{\letitemgroupparameter\c!n\plusseven}
+\setvalue{\??itemgroupkeyword\v!eight }{\letitemgroupparameter\c!n\pluseight}
+\setvalue{\??itemgroupkeyword\v!nine }{\letitemgroupparameter\c!n\plusnine}
+%setvalue{\??itemgroupkeyword\v!standard }{\setupcurrentitemgroup
+% [\c!width =1.5\emwidth,%
+% \c!distance =.5\emwidth,%
+% \c!factor =0,%
+% \c!inner =,%
+% \c!beforehead=,%
+% \c!afterhead =\blank,%
+% \c!before =\blank,%
+% \c!inbetween =\blank,%
+% \c!after =\blank]}
+\setvalue{\??itemgroupkeyword\v!standard }{\setitemgroupparameter\c!width {1.5\emwidth}%
+ \setitemgroupparameter\c!distance {.5\emwidth}%
+ \letitemgroupparameter\c!factor \!!zerocount
+ \letitemgroupparameter\c!inner \empty
+ \letitemgroupparameter\c!beforehead\empty
+ \letitemgroupparameter\c!afterhead \blank
+ \letitemgroupparameter\c!before \blank
+ \letitemgroupparameter\c!inbetween \blank
+ \letitemgroupparameter\c!after \blank}
+
\def\strc_itemgroups_initialize_local
{\setfalse\c_strc_itemgroups_inline
@@ -457,6 +479,8 @@
\setfalse\c_strc_itemgroups_after
\setfalse\c_strc_itemgroups_nowhite
\setfalse\c_strc_itemgroups_randomize
+ \setfalse\c_strc_itemgroups_horizontal
+ \setfalse\c_strc_itemgroups_collecting
\setfalse\c_strc_itemgroups_intro
\setfalse\c_strc_itemgroups_continue
% this will be a constant
@@ -473,16 +497,22 @@
\global\letitemgroupparameter\c!maxwidth\!!zeropoint
}
-\setvalue{\??itemgroupfirst\v!intro }{\settrue\c_strc_itemgroups_intro }
-\setvalue{\??itemgroupfirst\v!random }{\settrue\c_strc_itemgroups_randomize}
-\setvalue{\??itemgroupfirst\v!continue}{\settrue\c_strc_itemgroups_continue }
+\setvalue{\??itemgroupfirst\v!intro }{\settrue\c_strc_itemgroups_intro}
+\setvalue{\??itemgroupfirst\v!continue }{\settrue\c_strc_itemgroups_continue}
+\setvalue{\??itemgroupfirst\v!random }{\settrue\c_strc_itemgroups_randomize
+ \settrue\c_strc_itemgroups_collecting}
+\setvalue{\??itemgroupkeyword\v!horizontal}{\settrue\c_strc_itemgroups_horizontal
+ \settrue\c_strc_itemgroups_collecting
+ \settrue\c_strc_itemgroups_inline
+ \settrue\c_strc_itemgroups_joined
+ \strc_itemgroups_process_set_option_pack}
\def\strc_itemgroups_preset_stage_one#options%
{\processcommacommand[#options]\strc_itemgroups_preset_stage_one_indeed}
\def\strc_itemgroups_preset_stage_one_indeed#option%
{\ifcsname\??itemgroupfirst#option\endcsname
- \csname\??itemgroupfirst#option\endcsname
+ \lastnamedcs
\fi}
\ifdefined\dotagsetitemgroup \else \let\dotagsetitemgroup\relax \fi
@@ -640,6 +670,36 @@
\strc_itemgroups_insert_reference
\endgroup}
+% needs testing (maybe it need to happen later)
+%
+% \appendtoks
+% \setupcounter
+% [\v_strc_itemgroups_counter]%
+% [\c!prefix=\itemgroupparameter\c!prefix,
+% \c!prefixstopper=\itemgroupparameter\c!prefixstopper,
+% \c!prefixseparatorset=\itemgroupparameter\c!prefixseparatorset,
+% \c!prefixconversion=\itemgroupparameter\c!prefixconversion,
+% \c!prefixconversionset=\itemgroupparameter\c!prefixseparatorset,
+% \c!prefixset=\itemgroupparameter\c!prefixset,
+% \c!prefixsegments=\itemgroupparameter\c!prefixsegments,
+% \c!prefixconnector=\itemgroupparameter\c!prefixconnector,
+% \c!criterium=\itemgroupparameter\c!criterium,
+% \c!numberorder=\ifconditional\c_strc_itemgroups_reverse\v!reverse\else\v!normal\fi,
+% \c!numberstopper=\expdoif{\itemgroupparameter\c!placestopper}\v!yes{\itemgroupparameter\c!stopper},
+% \c!numberconversionset=\v_strc_itemgroups_counter,
+% \c!numbersegments=\currentitemgroupsegments]%
+% \to\itemgroupcommands
+%
+% \def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup .. but it
+% {\begingroup % can be optimized ... best move some to strc-num
+% % there will be a fixedconversion key
+% %\normalexpanded{\defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
+% \normalexpanded{\strc_sets_define_conversion_set[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
+% %
+% \convertedcounter[\v_strc_itemgroups_counter]% [\number\currentitemlevel]%
+% \strc_itemgroups_insert_reference
+% \endgroup}
+
\def\strc_itemgroups_set_symbol#symbol%
{\edef\strc_itemgroups_tmp_symbol{#symbol}%
\ifx\strc_itemgroups_tmp_symbol\empty \else
@@ -814,7 +874,7 @@
\ifinsidecolumns\else\ifcase\c_strc_itemgroups_column_depth
\global\c_strc_itemgroups_column_depth\c_strc_itemgroups_nesting % global ?
\strc_itemgroups_before_command
- %\strc_itemgroups_tag_start_group
+ \strc_itemgroups_tag_start_group
\strc_itemgroups_start_columns
\fi\fi
\fi
@@ -861,10 +921,10 @@
{\letgvalue{\??itemgrouplocal\currentitemlevel}#symbol}
\def\strc_itemgroups_fetch_global_symbol
- {\getvalue{\??itemgroupglobal\currentitemlevel}}
+ {\csname\??itemgroupglobal\currentitemlevel\endcsname}
\def\strc_itemgroups_fetch_local_symbol
- {\getvalue{\??itemgrouplocal\currentitemlevel}}
+ {\csname\??itemgrouplocal\currentitemlevel\endcsname}
\def\strc_itemgroups_setup_symbol_default
{\edef\strc_itemgroups_asked_symbol{\itemgroupparameter\c!symbol}%
@@ -1183,8 +1243,15 @@
{\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]%
- {\csname\??itemgroupstart\ifcsname\??itemgroupstart#name\endcsname#name\else\v!item\fi\endcsname}
+ {\ifcsname\??itemgroupstart#name\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\strc_itemgroups_start_do_item
+ \fi}
\unexpanded\def\stopspecialitemgroupitem
{\stopitemgroupitem}
@@ -1422,7 +1489,7 @@
\ifx\m_strc_itemgroups_text_distance\empty
%
\else\ifcsname\??itemgroupdistance\m_strc_itemgroups_text_distance\endcsname
- \csname\??itemgroupdistance\m_strc_itemgroups_text_distance\endcsname
+ \lastnamedcs
\else
\strc_itemgroups_set_text_item_distance_indeed
\fi\fi}
@@ -1435,9 +1502,12 @@
{\interwordspace \!!plus \emwidth}%
{\emwidth \!!plus \interwordstretch\!!minus\interwordshrink}}
+% \unexpanded\def\strc_itemgroups_default_command
+% {\EveryPar{\ignorespaces}% needed ?
+% \ignorespaces}
+
\unexpanded\def\strc_itemgroups_default_command
- {\EveryPar{\ignorespaces}% needed ?
- \ignorespaces}
+ {\ignorespaces}
%D Special case:
@@ -1522,10 +1592,43 @@
\newcount\c_strc_itemgroups_collected_done
\newcount\c_strc_itemgroups_collected_current
-\@EA\def\@EA\strc_itemgroups_collected_store\@EA#\@EA1\csname\e!stop\v!item\endcsname % use grabuntil
+% \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}%
{\advance\c_strc_itemgroups_collected_stored\plusone
\setvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}}
+\def\strc_itemgroups_collected_flush_randomize
+ {\collecteditemgroupitem}
+
+\def\strc_itemgroups_collected_flush_horizontal
+ {\begingroup
+ \scratchcounter\itemgroupparameter\c!n\relax
+ \ifnum\c_strc_itemgroups_collected_done>\plusone
+ \ifcase\modulonumber\scratchcounter\c_strc_itemgroups_collected_done\relax
+ % compensate for rounding errors
+ \hfill % \hskip\zeropoint plus \scaledpoint minus \scaledpoint
+ \allowbreak
+ \fi
+ \fi
+ \noindent % no \dontleavehmode
+ \hbox to \dimexpr\availablehsize/\scratchcounter\relax{\collecteditemgroupitem\hss}%
+ \endgroup}
+
+% \def\strc_itemgroups_collected_flush_indeed
+% {\collecteditemgroupitem
+% \iftrialtypesetting
+% \undefinevalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}%
+% \fi}
+
+\def\strc_itemgroups_collected_flush_indeed
+ {\collecteditemgroupitem
+ \undefinevalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}}
+
\def\strc_itemgroups_collected_flush
{\ifconditional\c_strc_itemgroups_randomize
\getrandomcount\c_strc_itemgroups_collected_current\plusone\c_strc_itemgroups_collected_stored
@@ -1533,8 +1636,12 @@
\advance\c_strc_itemgroups_collected_current\plusone
\fi
\ifcsname\??itemgroupstack\number\c_strc_itemgroups_collected_current\endcsname
- \getvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}%
- \letbeundefined{\??itemgroupstack\number\c_strc_itemgroups_collected_current}%
+ \edef\collecteditemgroupitem{\lastnamedcs}%
+ \ifconditional\c_strc_itemgroups_horizontal
+ \strc_itemgroups_collected_flush_horizontal
+ \else
+ \strc_itemgroups_collected_flush_indeed
+ \fi
\advance\c_strc_itemgroups_collected_done\plusone
\fi
\ifnum\c_strc_itemgroups_collected_done<\c_strc_itemgroups_collected_stored
@@ -1542,7 +1649,7 @@
\fi}
\unexpanded\def\stopcollectitems
- {\ifconditional\c_strc_itemgroups_randomize
+ {\ifconditional\c_strc_itemgroups_collecting
\c_strc_itemgroups_collected_done \zerocount
\c_strc_itemgroups_collected_current\zerocount
\ifnum\c_strc_itemgroups_collected_stored>\zerocount
@@ -1551,7 +1658,7 @@
\fi}
\unexpanded\def\startcollectitems
- {\ifconditional\c_strc_itemgroups_randomize
+ {\ifconditional\c_strc_itemgroups_collecting
\c_strc_itemgroups_collected_stored\zerocount
\letvalue{\e!start\v!item}\strc_itemgroups_collected_store
\fi}
@@ -1589,15 +1696,45 @@
%D End of plugin.
+%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}%
+ \iftrialtypesetting
+ \strc_counters_save\v_strc_itemgroups_counter
+ \strc_itemgroups_increment_item_counter
+ \strc_itemgroups_insert_item_tag_indeed
+ \strc_counters_restore\v_strc_itemgroups_counter
+ \else
+ \strc_itemgroups_increment_item_counter
+ \strc_itemgroups_insert_item_tag_indeed
+ \fi}
+
+\def\strc_itemgroups_insert_item_tag_indeed
+ {\letitemgroupparameter\c!distance\zeropoint
+ %letitemgroupparameter\c!width\zeropoint
+ \strc_itemgroups_make_symbol_box
+ \strc_itemgroups_make_destination_box
+ \let\m_strc_itemgroups_destination\empty
+ \ht\b_strc_itemgroups\strutheight
+ \dp\b_strc_itemgroups\strutdepth
+ \box\b_strc_itemgroups
+ \ignorespaces}
+
+%D Done again.
+
\setupitemgroup
[\c!margin=\zeropoint,
\c!leftmargin=\zeropoint,
\c!rightmargin=\zeropoint,
\c!indentnext=\v!yes,
- \c!width=1.5em,
+ \c!width=1.5\emwidth,
\c!factor=0,
%\c!distance=.5em, % is now:
- \c!step=.5em, % deals with broad
+ \c!step=.5\emwidth, % deals with broad
\c!distance=\zeropoint,
%\c!align=\v!normal, % definitely not \v!normal !
%\c!symalign=,
diff --git a/Master/texmf-dist/tex/context/base/strc-lab.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-lab.mkiv
index ac49941aaee..ac49941aaee 100644
--- a/Master/texmf-dist/tex/context/base/strc-lab.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lab.mkiv
diff --git a/Master/texmf-dist/tex/context/base/strc-lev.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua
index d7ffd6af434..d7ffd6af434 100644
--- a/Master/texmf-dist/tex/context/base/strc-lev.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-lev.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-lev.mkvi
index dae3f28e30e..dae3f28e30e 100644
--- a/Master/texmf-dist/tex/context/base/strc-lev.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lev.mkvi
diff --git a/Master/texmf-dist/tex/context/base/strc-lnt.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-lnt.mkvi
index ee7d5dd8854..cd10c9def20 100644
--- a/Master/texmf-dist/tex/context/base/strc-lnt.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lnt.mkvi
@@ -142,13 +142,13 @@
% we keep things local so we can use it as regular note too
\edef\currentnotation{#1}%
\edef\currentlinenotereference{#2}%
- \xdef\m_page_lines_previous_from{\csname\??linenotespreviousfrom\ifcsname\??linenotespreviousfrom\currentnotation\endcsname\currentnotation\fi\endcsname}%
- \xdef\m_page_lines_previous_to {\csname\??linenotespreviousto \ifcsname\??linenotespreviousto \currentnotation\endcsname\currentnotation\fi\endcsname}%
+ \xdef\m_page_lines_previous_from{\begincsname\??linenotespreviousfrom\currentnotation\endcsname}%
+ \xdef\m_page_lines_previous_to {\begincsname\??linenotespreviousto \currentnotation\endcsname}%
\strc_linenotes_check_compression
\let\currentnote\currentnotation
\letnotationparameter\c!numbercommand\linenotelinenumber% todo: deep hook
\letnoteparameter \c!textcommand \gobbleoneargument % todo: deep hook
- \getvalue{\??linenote\currentnotation}{#3}%
+ \csname\??linenote\currentnotation\endcsname{#3}%
\expandafter\glet\csname\??linenotespreviousfrom\currentnotation\endcsname\m_page_lines_current_from
\expandafter\glet\csname\??linenotespreviousto \currentnotation\endcsname\m_page_lines_current_to
\endgroup}
@@ -256,15 +256,15 @@
\unexpanded\def\tracelinenotes
{\let\strc_linenotes_traced\strc_linenotes_traced_indeed}
+% We predefine one, namely \type {\linenote} cum suis.
+
+\definelinenote[\v!linenote]
+
%D Use these when not properly nested:
\let\fromlinenote\startlinenote
\let\tolinenote \stoplinenote
-% We predefine one, namely \type {\linenote} cum suis.
-
-\definelinenote[\v!linenote]
-
% beware: line numbers are added later on so grouping setups is a bad idea
%
% \startbuffer[test]
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-lst.lua
index fd79bbd7a9c..0f5d8e0d7b8 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lst.lua
@@ -33,6 +33,7 @@ local report_lists = logs.reporter("structure","lists")
local context = context
local commands = commands
local implement = interfaces.implement
+local conditionals = tex.conditionals
local structures = structures
local lists = structures.lists
@@ -122,6 +123,7 @@ local function initializer()
local ordered = lists.ordered
local usedinternals = references.usedinternals
local blockdone = { }
+ local lastblock = nil
for i=1,#collected do
local c = collected[i]
local m = c.metadata
@@ -135,9 +137,22 @@ local function initializer()
usedinternals[internal] = r.used
end
local block = r.block
- if block and not blockdone[block] then
+ if not block then
+ -- shouldn't happen
+ elseif lastblock == block then
+ -- we're okay
+ elseif lastblock then
+ if blockdone[block] then
+ report_lists("out of order sectionsblocks, maybe use \\setsectionblock")
+ else
+ blockdone[block] = true
+ sectionblocks[#sectionblocks+1] = block
+ end
+ lastblock = block
+ elseif not blockdone[block] then
blockdone[block] = true
sectionblocks[#sectionblocks+1] = block
+ lastblock = block
end
end
-- access by order in list
@@ -205,6 +220,14 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
if not metadata.level then
metadata.level = structures.sections.currentlevel() -- this is not used so it will go away
end
+ --
+ -- if not conditionals.inlinelefttoright then
+ -- metadata.idir = "r2l"
+ -- end
+ -- if not conditionals.displaylefttoright then
+ -- metadata.ddir = "r2l"
+ -- end
+ --
if numberdata then
local numbers = numberdata.numbers
if type(numbers) == "string" then
@@ -213,6 +236,7 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
end
local group = numberdata and numberdata.group
local name = metadata.name
+ local kind = metadata.kind
if not group then
-- forget about it
elseif group == "" then
@@ -232,12 +256,20 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
r.section = structures.sections.currentid()
end
local i = r and r.internal or 0 -- brrr
+ if r and kind and name then
+ local tag = tags.getid(kind,name)
+ if tag and tag ~= "?" then
+ r.tag = tag -- todo: use internal ... is unique enough
+ end
+ end
local p = pushed[i]
if not p then
p = #cached + 1
cached[p] = helpers.simplify(t)
pushed[i] = p
- r.listindex = p
+ if r then
+ r.listindex = p
+ end
end
if group then
groupindices[name][group] = p
@@ -254,7 +286,7 @@ function lists.discard(n)
-- maybe an error message
elseif n == #cached then
cached[n] = nil
- n = n -1
+ n = n - 1
while n > 0 and cached[n] == false do
cached[n] = nil -- collect garbage
n = n - 1
@@ -298,15 +330,15 @@ function lists.enhance(n)
local kind = metadata.kind
local name = metadata.name
if trace_lists then
- report_lists("enhancing %a, name %a",n,name)
- end
- if references then
- -- is this used ?
- local tag = tags.getid(kind,name)
- if tag and tag ~= "?" then
- references.tag = tag
- end
+ report_lists("enhancing %a, name %a, page %a",n,name,references.realpage or 0)
end
+-- if references then
+-- -- is this used ?
+-- local tag = tags.getid(kind,name)
+-- if tag and tag ~= "?" then
+-- references.tag = tag
+-- end
+-- end
-- specific enhancer (kind of obsolete)
local enhancer = kind and lists.enhancers[kind]
if enhancer then
@@ -871,7 +903,7 @@ function lists.hastitledata(name,n,tag)
if data then
local titledata = data.titledata
if titledata then
- return (titledata[tag] or titledata.title or "") == ""
+ return (titledata[tag] or titledata.title or "") ~= ""
end
end
return false
@@ -892,7 +924,7 @@ function lists.hasnumberdata(name,n)
local data = lists.result[n]
if data then
local numberdata = data.numberdata
- if numberdata and not numberdata.hidenumber then -- th ehide number is true
+ if numberdata and not numberdata.hidenumber then -- the hide number is true
return true
end
end
@@ -989,6 +1021,7 @@ implement {
{ "location" },
{ "prefix" },
{ "reference" },
+ { "view" },
{ "order", "integer" },
}
},
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-lst.mkvi
index 71fc0982964..e7ed0f1f2ff 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-lst.mkvi
@@ -116,6 +116,22 @@
% userdata : location=none
% simple : location=here
+\installcorenamespace {listlocations}
+
+\unexpanded\def\doifelseinlistentry#1%
+ {\ifcsname\??listlocations#1\endcsname
+ \ifnum\lastnamedcs=\structurelistlocation\relax
+ \doubleexpandafter\firstoftwoarguments
+ \else
+ \doubleexpandafter\secondoftwoarguments
+ \fi
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+\unexpanded\def\doifelseincurrentlistentry
+ {\doifelseinlistentry\currentlist}
+
\unexpanded\def\structurelistinject
{\dotripleempty\strc_lists_inject}
@@ -150,10 +166,14 @@
userdata {\detokenize\expandafter{\normalexpanded{#userdata}}}
\relax
\edef\currentlistnumber{\the\scratchcounter}%
+\setxvalue{\??listlocations\currentlist}{\nextinternalreference}%
\ifx\p_location\v!here
% this branch injects nodes !
\strc_lists_inject_enhance{\currentlistnumber}{\nextinternalreference}%
- \clf_setinternalreference internal \nextinternalreference\relax % this will change
+ \clf_setinternalreference
+ internal \nextinternalreference
+ view {\interactionparameter\c!focus}%
+ \relax % this will change
\xdef\currentstructurelistattribute{\the\lastdestinationattribute}%
\dontleavehmode\hbox attr \destinationattribute \lastdestinationattribute{}% todo
\else
@@ -277,8 +297,8 @@
%D a document source but nowadays that is less an issue in the
%D sense that the extra few lines are neglectable to the rest.
-\unexpanded\def\systemsuppliedchapter {\getvalue{\v!chapter}} % obsolete
-\unexpanded\def\systemsuppliedtitle {\getvalue{\v!title}} % obsolete
+\unexpanded\def\systemsuppliedchapter {\csname\v!chapter\endcsname} % obsolete
+\unexpanded\def\systemsuppliedtitle {\csname\v!title \endcsname} % obsolete
\unexpanded\def\completelist
{\dodoubleempty\strc_lists_complete}
@@ -352,7 +372,7 @@
\unexpanded\def\structurelistpagenumber
{\dostarttagged\t!listpage\empty
\clf_listprefixedpage
- {\currentlist}
+ {\currentlist}%
\currentlistindex
{
separatorset {\listparameter\c!pageprefixseparatorset}
@@ -360,13 +380,13 @@
set {\listparameter\c!pageprefixset}
segments {\listparameter\c!pageprefixsegments}
connector {\listparameter\c!pageprefixconnector}
- }
+ }%
{
prefix {\listparameter\c!pageprefix}
conversionset {\listparameter\c!pageconversionset}
starter {\listparameter\c!pagestarter}
stopper {\listparameter\c!pagestopper}
- }
+ }%
\relax
\dostoptagged}
@@ -378,8 +398,8 @@
\def\rawstructurelistuservariable#name%
{\clf_listuserdata{\currentlist}\currentlistindex{#name}}
-\unexpanded\def\structurelistfirst {\structurelistuservariable\s!first } % s!
-\unexpanded\def\structurelistsecond{\structurelistuservariable\s!second} % s!
+\unexpanded\def\structurelistfirst {\structurelistuservariable\s!first } % s!
+\unexpanded\def\structurelistsecond {\structurelistuservariable\s!second} % s!
\def\rawstructurelistfirst {\rawstructurelistuservariable\s!first } % s! % was \unexpanded
\def\rawstructurelistsecond{\rawstructurelistuservariable\s!second} % s! % was \unexpanded
@@ -477,16 +497,30 @@
\let\dotaglistlocation\relax
+\def\strc_lists_entry_process_default
+ {no list method}
+
+% \def\strc_lists_entry_process % assume things to be set up
+% {\listextraparameter\c!before
+% \dostarttagged\t!listitem\currentlist
+% \dotaglistlocation
+% \csname\??structurelistprocessor
+% \ifcsname\??structurelistprocessor\currentlist:\currentlistmethod\endcsname\currentlist:\currentlistmethod\else
+% \ifcsname\??structurelistprocessor\currentlistmethod \endcsname\currentlistmethod \else
+% \ifcsname\??structurelistprocessor\currentlist \endcsname\currentlist \else
+% \s!default \fi\fi\fi
+% \endcsname
+% \dostoptagged
+% \listextraparameter\c!after}
+
\def\strc_lists_entry_process % assume things to be set up
{\listextraparameter\c!before
\dostarttagged\t!listitem\currentlist
\dotaglistlocation
- \csname\??structurelistprocessor
- \ifcsname\??structurelistprocessor\currentlist:\currentlistmethod\endcsname\currentlist:\currentlistmethod\else
- \ifcsname\??structurelistprocessor\currentlistmethod \endcsname\currentlistmethod \else
- \ifcsname\??structurelistprocessor\currentlist \endcsname\currentlist \else
- \s!default \fi\fi\fi
- \endcsname
+ \ifcsname\??structurelistprocessor\currentlist:\currentlistmethod\endcsname\lastnamedcs\else
+ \ifcsname\??structurelistprocessor\currentlistmethod \endcsname\lastnamedcs\else
+ \ifcsname\??structurelistprocessor\currentlist \endcsname\lastnamedcs\else
+ \strc_lists_entry_process_default\fi\fi\fi
\dostoptagged
\listextraparameter\c!after}
@@ -502,7 +536,7 @@
% lists that have a number/title are kind of generic and can share code
\installstructurelistprocessor\s!default
- {no list method}
+ {\strc_lists_entry_process_default}
\installstructurelistprocessor\s!simple
{\let\currentlistentrynumber \structurelistfirst
@@ -567,7 +601,7 @@
\unexpanded\def\strc_lists_symbol_none
{\strc_lists_assign_dimen\scratchwidth\c!width{1.5\emwidth}%
- \hbox to \scratchwidth{}}
+ \hpack to \scratchwidth{}}
\unexpanded\def\strc_lists_symbol_one
{\strut\symbol[bullet]}
@@ -588,22 +622,29 @@
\installcorenamespace{listsymbollabels}
+\def\strc_lists_symbol_label_unknown
+ {\leftlabeltext\currentlistlabel
+ \listparameter\c!starter
+ \currentlistentrynumber
+ \listparameter\c!stopper
+ \rightlabeltext\currentlistlabel}
+
\unexpanded\def\strc_lists_symbol_default
{\dontleavehmode
\strut
\begingroup
\edef\currentlistlabel{\listparameter\c!label}% can be used in label
- \csname\??listsymbollabels
- \ifcsname\??listsymbollabels\currentlistlabel\endcsname\currentlistlabel\else\s!unknown\fi
- \endcsname
+% \csname\??listsymbollabels
+% \ifcsname\??listsymbollabels\currentlistlabel\endcsname\currentlistlabel\else\s!unknown\fi
+% \endcsname
+ \ifcsname\??listsymbollabels\currentlistlabel\endcsname
+ \lastnamedcs
+ \else
+ \strc_lists_symbol_label_unknown
+ \fi
\endgroup}
-\setvalue{\??listsymbollabels\s!unknown}% use whatever is set
- {\leftlabeltext\currentlistlabel
- \listparameter\c!starter
- \currentlistentrynumber
- \listparameter\c!stopper
- \rightlabeltext\currentlistlabel}
+\letvalue{\??listsymbollabels\s!unknown}\strc_lists_symbol_default
\setvalue{\??listsymbollabels}% default (empty)
{\listparameter\c!starter
@@ -643,8 +684,64 @@
% quite special and don't apply to multiple. So, being strict saves
% us resets.
+% \installcorenamespace{listfiller}
+%
+% \unexpanded\def\installlistfiller#1#2%
+% {\setuvalue{\??listfiller#1}{#2}}
+%
+% \unexpanded\def\listfiller#1%
+% {\begincsname\??listfiller#1\endcsname}
+%
+% \unexpanded\def\currentlistfiller
+% {\begingroup
+% \edef\p_filler{\listalternativeparameter\c!filler}%
+% \ifcsname\??listfiller\p_filler\endcsname
+% \lastnamedcs
+% \else
+% \p_filler
+% \fi
+% \endgroup}
+%
+% \installlistfiller\v!sym % original one
+% {\begingroup
+% \scratchdimen.5\emwidth
+% \hskip\scratchdimen
+% \gleaders
+% \hbox to \scratchdimen
+% {\hss
+% \uselistalternativestyleandcolor\c!symstyle\c!symcolor
+% \listalternativeparameter\c!symbol
+% \hss}%
+% \hfill
+% \hskip\scratchdimen
+% \endgroup}
+%
+% \installlistfiller\v!symbol % new one (make that default?)
+% {\begingroup
+% \scratchdimen.5\emwidth
+% \hskip\scratchdimen
+% \gleaders
+% \hbox spread .5\scratchdimen
+% {\hss
+% \uselistalternativestyleandcolor\c!symstyle\c!symcolor
+% \listalternativeparameter\c!symbol
+% \hss}%
+% \hfill
+% \hskip\scratchdimen
+% \endgroup}
+%
+% \installlistfiller\v!width
+% {\hfill}
+%
+% \installlistfiller\v!space
+% {\hskip.25\emwidth\relax}
+
\setuplistalternative
- [\c!command=\strictlistparameter\c!command]
+ [\c!command=\strictlistparameter\c!command,
+ \c!symbol=.]
+
+\unexpanded\def\currentlistfiller
+ {\checkedfiller{\listalternativeparameter\c!filler}}
\definelistalternative
[a]
@@ -838,12 +935,16 @@
\unexpanded\def\strc_lists_apply_renderingsetup
{\the\t_lists_every_renderingsetup
+ % now we group
+ \begingroup
\ifx\m_strc_list_alternative\empty
\edef\currentlistalternative{\listparameter\c!alternative}%
\else
\let\currentlistalternative\m_strc_list_alternative
\fi
\directsetup{\listalternativeparameter\c!renderingsetup}\relax
+ \endgroup
+ % till here, where we reset locals
\the\t_lists_every_renderingcleanup}
% todo: provide packager via attributes
@@ -856,6 +957,12 @@
% nothing, nb we use the [] syntax here because we end with a \cs
\stopsetups
+\unexpanded\def\currentlistentrytitlesynchronize
+ {\the\t_lists_every_renderingsynchronize}
+
+\unexpanded\def\currentlistentrytitlerendered
+ {\currentlistentrytitlesynchronize\currentlistentrytitle}
+
\startsetups[\??listrenderings:command]
\edef\p_command{\listalternativeparameter\c!command}%
\ifx\p_command\empty
@@ -863,7 +970,7 @@
\else
\p_command
\currentlistentrynumber
- {\the\t_lists_every_renderingsynchronize\currentlistentrytitle}%
+ \currentlistentrytitlerendered % {\currentlistentrytitlesynchronize\currentlistentrytitle}
\currentlistentrypagenumber
\fi
\stopsetups
@@ -914,7 +1021,7 @@
\listalternativeparameter\c!after
\else
\noindent % otherwise annotations are mirrored up
-\typo_injectors_mark_list
+ \typo_injectors_mark_list
\hbox \strc_lists_get_reference_attribute\v!all \strc_lists_get_destination_attribute {
\p_command\currentlistentrynumber\currentlistentrytitle\currentlistentrypagenumber
}
@@ -1034,7 +1141,7 @@
\endgroup
\ifdim\wd\b_strc_lists_page=\zeropoint\else
\nobreak
- \listalternativeparameter\c!filler
+ \currentlistfiller
\box\b_strc_lists_page
\fi
}
@@ -1239,7 +1346,7 @@
\definelistalternative
[\v!paragraph]
- [\c!filler=\hskip.25\emwidth,
+ [\c!filler=\v!space,
\c!renderingsetup=\??listrenderings:\v!paragraph]
\startsetups[\??listrenderings:\v!paragraph]
@@ -1301,7 +1408,7 @@
\ifconditional\c_lists_has_page
\ifconditional\c_lists_show_page
\nobreak
- \listalternativeparameter\c!filler\relax
+ \currentlistfiller
\begingroup
\useliststyleandcolor\c!pagestyle\c!pagecolor
\currentlistentrypagenumber
@@ -1342,11 +1449,45 @@
\strc_lists_interaction_check_nop
\fi}
+% \def\strc_lists_interaction_check_yes
+% {\edef\p_interaction_forward{\listparameter\c!interaction}%
+% \ifcsname\??listinteractions\p_interaction_forward\endcsname
+% \expandafter\let\expandafter\p_interaction_forward\csname\??listinteractions\p_interaction_forward\endcsname
+% \strc_references_get_simple_reference{internal(\currentlistentrylocation)}%
+% \a_strc_lists_reference\currentreferenceattribute
+% \else
+% \a_strc_lists_reference\attributeunsetvalue
+% \fi
+% \ifnum\a_strc_lists_reference=\attributeunsetvalue
+% \let\strc_lists_get_reference_attribute\gobbleoneargument
+% \let\strc_lists_set_reference_attribute\gobbleoneargument
+% \let\strc_lists_set_style_color \strc_lists_set_style_color_normal
+% \else
+% \let\strc_lists_get_reference_attribute\strc_lists_get_reference_attribute_indeed
+% \let\strc_lists_set_reference_attribute\strc_lists_set_reference_attribute_indeed
+% \let\strc_lists_set_style_color \strc_lists_set_style_color_special
+% \fi
+% \edef\p_interaction_backward{\namedheadparameter\currentlist\c!interaction}% \namedheadparameter !
+% \ifx\p_interaction_backward\v!list
+% \strc_references_set_simple_reference{*\currentlistentrylocation}%
+% \a_strc_lists_destination\currentdestinationattribute
+% \else
+% \a_strc_lists_destination\attributeunsetvalue
+% \fi
+% \ifnum\a_strc_lists_destination=\attributeunsetvalue
+% \let\strc_lists_get_destination_attribute\empty
+% \let\strc_lists_set_destination_attribute\empty
+% \else
+% \let\strc_lists_get_destination_attribute\strc_lists_get_destination_attribute_indeed
+% \let\strc_lists_set_destination_attribute\strc_lists_set_destination_attribute_indeed
+% \fi}
+
\def\strc_lists_interaction_check_yes
{\edef\p_interaction_forward{\listparameter\c!interaction}%
\ifcsname\??listinteractions\p_interaction_forward\endcsname
- \expandafter\let\expandafter\p_interaction_forward\csname\??listinteractions\p_interaction_forward\endcsname
- \strc_references_get_simple_page_reference{internal(\currentlistentrylocation)}%
+ %\expandafter\let\expandafter\p_interaction_forward\csname\??listinteractions\p_interaction_forward\endcsname
+ \expandafter\let\expandafter\p_interaction_forward\lastnamedcs
+ \strc_references_get_simple_reference{internal(\currentlistentrylocation)}%
\a_strc_lists_reference\currentreferenceattribute
\else
\a_strc_lists_reference\attributeunsetvalue
@@ -1362,7 +1503,7 @@
\fi
\edef\p_interaction_backward{\namedheadparameter\currentlist\c!interaction}% \namedheadparameter !
\ifx\p_interaction_backward\v!list
- \strc_references_set_simple_page_reference{bck:\currentlistentrylocation}%
+ \strc_references_set_simple_reference{*\currentlistentrylocation}%
\a_strc_lists_destination\currentdestinationattribute
\else
\a_strc_lists_destination\attributeunsetvalue
diff --git a/Master/texmf-dist/tex/context/base/strc-mar.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-mar.lua
index 3af9113bf85..8b30e85143e 100644
--- a/Master/texmf-dist/tex/context/base/strc-mar.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-mar.lua
@@ -26,14 +26,12 @@ local tonut = nuts.tonut
local getfield = nuts.getfield
local setfield = nuts.setfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
local getid = nuts.getid
local getlist = nuts.getlist
local getattr = nuts.getattr
local getbox = nuts.getbox
-local traversenodes = nuts.traverse
+local traverse_nodes = nuts.traverse
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
@@ -119,7 +117,7 @@ end
-- identify range
local function sweep(head,first,last)
- for n in traversenodes(head) do
+ for n in traverse_nodes(head) do
local id = getid(n)
if id == glyph_code then
local a = getattr(n,a_marks)
diff --git a/Master/texmf-dist/tex/context/base/strc-mar.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-mar.mkiv
index 8bd8c094e44..4e8df5f5dbe 100644
--- a/Master/texmf-dist/tex/context/base/strc-mar.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-mar.mkiv
@@ -120,7 +120,7 @@
% the fetchers are fully expandable: [name][method]
-\def\fetchonemark[#1]#2[#3]{\ifconditional\inhibitgetmarking\else\clf_fetchonemark {#1}{\v!page}{#2}\fi}
+\def\fetchonemark[#1]#2[#3]{\ifconditional\inhibitgetmarking\else\clf_fetchonemark {#1}{\v!page}{#3}\fi}
\def\fetchtwomarks [#1]{\ifconditional\inhibitgetmarking\else\clf_fetchtwomarks{#1}{\v!page}\fi}
\def\fetchallmarks [#1]{\ifconditional\inhibitgetmarking\else\clf_fetchallmarks{#1}{\v!page}\fi}
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-mat.lua
index 87f35ed1d3a..87f35ed1d3a 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-mat.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-mat.mkiv
index 225531fa894..85870d54769 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-mat.mkiv
@@ -56,6 +56,56 @@
\setupformulas[\c!distance=\emwidth]
\fi
+% \ifdefined\mathdisplayskipmode
+% \mathdisplayskipmode\plustwo % only when not zero / needs adapted space handler
+% \fi
+
+% \mathdisplayskipmode\plusthree
+%
+% \hbox\bgroup
+% \setbox0\vbox\bgroup
+% xxxxxxxxx\par
+% \vskip-\baselineskip
+% $$a^2_2$$\par
+% xxxxxxxxx\par
+% \egroup
+% \box0
+% \vbox\bgroup
+% xxxxxxxxx\par
+% \vskip-\baselineskip
+% $$a^2$$\par
+% xxxxxxxxx\par
+% \egroup
+% \vbox\bgroup
+% xxxxxxxxx
+% \vskip-\baselineskip
+% $$a_2$$
+% xxxxxxxxx
+% \egroup
+% \egroup
+%
+% \hbox\bgroup
+% \setbox0\vbox\bgroup
+% xxxxxxxxx\par
+% \ctxlua{tex.prevdepth=-1000 *65536}
+% $$a^2_2$$\par
+% xxxxxxxxx\par
+% \egroup
+% \box0
+% \vbox\bgroup
+% xxxxxxxxx\par
+% \ctxlua{tex.prevdepth=-1000 *65536}
+% $$a^2$$\par
+% xxxxxxxxx\par
+% \egroup
+% \vbox\bgroup
+% xxxxxxxxx
+% \ctxlua{tex.prevdepth=-1000 *65536}
+% $$a_2$$
+% xxxxxxxxx
+% \egroup
+% \egroup
+
\setupsubformulas % subformulas could be last in chain
[\c!indentnext=\formulaparameter\c!indentnext]
@@ -197,7 +247,7 @@
\glet\strc_formulas_place_number_nested\strc_formulas_place_number_nested_indeed}
\def\strc_formulas_handle_number % formulas
- {\strc_formulas_check_reference\c_strc_formulas_number_mode\currentformulareference}
+ {\strc_formulas_check_reference\c_strc_formulas_number_mode\currentformulasreference}
\def\strc_formulas_handle_sub_number_indeed % sub formulas
{\strc_formulas_check_reference\c_strc_formulas_sub_number_mode\currentsubformulasreference
@@ -420,7 +470,7 @@
% subcounter
\ifconditional\c_strc_formulas_inside_formulas_sub
\ifcase\c_strc_formulas_sub_number_mode
- % nothing
+ \strc_formulas_handle_sub_numbering % was nothing
\or
\strc_formulas_handle_sub_numbering
\or
@@ -579,7 +629,7 @@
\let\strc_formulas_start_formula\strc_formulas_start_formula_nested
%\freezedimenmacro\predisplaysizethreshhold
\strc_formulas_forget_display_skips
- \getvalue{\e!start\formulaparameter\c!alternative\v!formula}}
+ \csname\e!start\formulaparameter\c!alternative\v!formula\endcsname}
\unexpanded\def\strc_formulas_start_formula_nested#1%
{\bgroup
@@ -597,7 +647,7 @@
\strc_formulas_place_number
\dostoptagged
\dostarttagged\t!formulacontent\empty
- \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}%
+ \csname\e!stop\formulaparameter\c!alternative\v!formula\endcsname
\dostoptagged
\dostoptagged
\nonoindentation
@@ -835,12 +885,12 @@
\unexpanded\def\formulanumber
{\strc_formulas_number} % for the moment
-\def\strc_formulas_number
+\unexpanded\def\strc_formulas_number
{\dosingleempty\strc_formulas_number_again}
-\def\strc_formulas_number_again[#1]%
+\unexpanded\def\strc_formulas_number_again[#1]%
{\def\currentformulareference{#1}%
- \dosinglegroupempty\strc_formulas_number_indeed}
+ \strc_formulas_number_indeed}
\unexpanded\def\placeformula
{\global\settrue\c_strc_formulas_inside_place
@@ -852,27 +902,80 @@
\setfalse\c_strc_formulas_increment
\dosingleempty\strc_formulas_place}
-\def\strc_formulas_place[#1]%
+\unexpanded\def\strc_formulas_place[#1]%
{\def\currentplaceformulareference{#1}%
\let\currentplaceformulasuffix\empty
- \doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop\strc_formulas_place_nop} % [ref]{}
+ \doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop} % [ref]{}
-\def\strc_formulas_place_yes#1%
+\unexpanded\def\strc_formulas_place_yes#1%
{\def\currentplaceformulasuffix{#1}%
\strc_formulas_place_nop}
-\def\strc_formulas_place_nop
+\unexpanded\def\strc_formulas_place_nop
{\doifelsenextchar$\strc_formulas_place_pickup\strc_formulas_place_indeed} % [ref]$$ [ref]\start
-\def\strc_formulas_place_indeed
+\unexpanded\def\strc_formulas_place_indeed
{\strc_formulas_place_numbering}
-\def\strc_formulas_place_pickup$$#1$$%
+\unexpanded\def\strc_formulas_place_pickup$$#1$$%
{\strc_formulas_place_numbering
\strc_formulas_start_formula{}#1\strc_formulas_stop_formula}
-\let\startplaceformula\placeformula
-\let\stopplaceformula \relax
+% \let\startplaceformula\placeformula
+% \let\stopplaceformula \relax
+
+% \startplaceformula \startformula e=mc^2 \stopformula \stopplaceformula
+% \startplaceformula[-] \startformula e=mc^2 \stopformula \stopplaceformula
+% \startplaceformula[x] \startformula e=mc^2 \stopformula \stopplaceformula
+% \startplaceformula[reference=foo] \startformula e=mc^2 \stopformula \stopplaceformula
+% \startplaceformula[title=whatever] \startformula e=mc^2 \stopformula \stopplaceformula
+% \startplaceformula[suffix=x] \startformula e=mc^2 \stopformula \stopplaceformula
+
+\unexpanded\def\startplaceformula{\dosingleempty\strc_formulas_start_place}
+\unexpanded\def\stopplaceformula {\strc_formulas_stop_place}
+
+\let\currentplaceformulareference\empty
+\let\currentplaceformulasuffix \empty
+
+\def\strc_formulas_start_place
+ {\begingroup
+ \global\settrue\c_strc_formulas_inside_place
+ \iffirstargument
+ \expandafter\strc_formulas_start_place_yes
+ \else
+ \expandafter\strc_formulas_start_place_nop
+ \fi}
+
+\def\strc_formulas_start_place_yes[#1]%
+ {\doifassignmentelse{#1}\strc_formulas_start_place_parameters\strc_formulas_start_place_reference[#1]}
+
+\def\strc_formulas_start_place_nop[#1]%
+ {\let\currentplaceformulareference\empty
+ \let\currentplaceformulasuffix \empty
+ \strc_formulas_place_nop}
+
+\def\strc_formulas_start_place_reference[#1]%
+ {\edef\currentplaceformulareference{#1}%
+ \let\currentplaceformulasuffix\empty
+ %\doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop} % [ref]{}
+ \strc_formulas_place_nop}
+
+\def\strc_formulas_start_place_parameters[#1]%
+ {\letdummyparameter\c!title \empty
+ \letdummyparameter\c!reference\empty
+ \letdummyparameter\c!suffix \empty
+ \getdummyparameters[#1]%
+ \edef\currentplaceformulatitle {\dummyparameter\c!title}%
+ \edef\currentplaceformulareference{\dummyparameter\c!reference}%
+ \edef\currentplaceformulasuffix {\dummyparameter\c!suffix}%
+ \ifx\currentplaceformulatitle\empty\else
+ \normalexpanded{\setformulalistentry{\currentplaceformulatitle}}%
+ \fi
+ \doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop} % [ref]{}
+
+\def\strc_formulas_stop_place
+ {\relax
+ \endgroup}
% to be checked
@@ -905,7 +1008,7 @@
\unexpanded\def\placenamedformula
{\dosingleempty\strc_formulase_place_named}
-\def\strc_formulase_place_named
+\unexpanded\def\strc_formulase_place_named
{\iffirstargument
\expandafter\strc_formulase_place_named_yes
\else
diff --git a/Master/texmf-dist/tex/context/base/strc-not.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-not.lua
index 71eccf1cec2..ddbd2ae06eb 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-not.lua
@@ -32,7 +32,7 @@ lists.enhancers = lists.enhancers or { }
storage.register("structures/notes/states", notes.states, "structures.notes.states")
local notestates = notes.states
-local notedata = { }
+local notedata = table.setmetatableindex("table")
local variables = interfaces.variables
local context = context
@@ -51,10 +51,6 @@ local function store(tag,n)
end
--
local nd = notedata[tag]
- if not nd then
- nd = { }
- notedata[tag] = nd
- end
local nnd = #nd + 1
nd[nnd] = n
local state = notestates[tag]
@@ -66,7 +62,7 @@ local function store(tag,n)
end
state.start = state.start or nnd
end
- return #nd
+ return nnd
end
notes.store = store
@@ -79,25 +75,22 @@ implement {
local function get(tag,n) -- tricky ... only works when defined
local nd = notedata[tag]
+ if not n then
+ n = #nd
+ end
+ nd = nd[n]
if nd then
- n = n or #nd
- nd = nd[n]
- if nd then
- if trace_notes then
- report_notes("getting note %a of %a with listindex %a",n,tag,nd)
- end
- -- is this right?
--- local newdata = lists.collected[nd]
- local newdata = lists.cached[nd]
--- local newdata = lists.tobesaved[nd]
- return newdata
+ if trace_notes then
+ report_notes("getting note %a of %a with listindex %a",n,tag,nd)
end
+ -- is this right?
+ local newdata = lists.cached[nd]
+ return newdata
end
end
local function getn(tag)
- local nd = notedata[tag]
- return nd and #nd or 0
+ return #notedata[tag]
end
notes.get = get
@@ -302,85 +295,51 @@ implement {
actions = notes.postpone
}
-function notes.setsymbolpage(tag,n,l)
- local l = l or listindex(tag,n)
- if l then
- local p = texgetcount("realpageno")
- if trace_notes or trace_references then
- report_notes("note %a of %a with list index %a gets symbol page %a",n,tag,l,p)
- end
- local entry = lists.cached[l]
- if entry then
- entry.references.symbolpage = p
- else
- report_notes("internal error: note %a of %a is not flushed",n,tag)
- end
- else
- report_notes("internal error: note %a of %a is not initialized",n,tag)
- end
-end
-
-implement {
- name = "setnotesymbolpage",
- actions = notes.setsymbolpage,
- arguments = { "string", "integer" }
-}
-
-local function getsymbolpage(tag,n)
- local li = internal(tag,n)
- li = li and li.references
- li = li and (li.symbolpage or li.realpage) or 0
- if trace_notes or trace_references then
- report_notes("page number of note symbol %a of %a is %a",n,tag,li)
- end
- return li
-end
-
-local function getnumberpage(tag,n)
+local function getinternal(tag,n)
local li = internal(tag,n)
- li = li and li.references
- li = li and li.realpage or 0
- if trace_notes or trace_references then
- report_notes("page number of note number %s of %a is %a",n,tag,li)
+ if li then
+ local references = li.references
+ if references then
+ return references.internal or 0
+ end
end
- return li
+ return 0
end
local function getdeltapage(tag,n)
-- 0:unknown 1:textbefore, 2:textafter, 3:samepage
- local what = 0
- -- references.internals[lists.tobesaved[nd].internal]
local li = internal(tag,n)
if li then
local references = li.references
if references then
- local symbolpage = references.symbolpage or 0
- local notepage = references.realpage or 0
+ -- local symb = structures.references.collected[""]["symb:"..tag..":"..n]
+ local rymb = structures.references.collected[""]
+ local symb = rymb and rymb["*"..(references.internal or 0)]
+ local notepage = references.realpage or 0
+ local symbolpage = symb and symb.references.realpage or -1
if trace_references then
report_notes("note number %a of %a points from page %a to page %a",n,tag,symbolpage,notepage)
end
if notepage < symbolpage then
- what = 3 -- after
+ return 3 -- after
elseif notepage > symbolpage then
- what = 2 -- before
+ return 2 -- before
elseif notepage > 0 then
- what = 1 -- same
+ return 1 -- same
end
else
-- might be a note that is not flushed due to to deep
-- nesting in a vbox
end
end
- return what
+ return 0
end
-notes.getsymbolpage = getsymbolpage
-notes.getnumberpage = getnumberpage
-notes.getdeltapage = getdeltapage
+notes.getinternal = getinternal
+notes.getdeltapage = getdeltapage
-implement { name = "notesymbolpage", actions = { getsymbolpage, context }, arguments = { "string", "integer" } }
-implement { name = "notenumberpage", actions = { getnumberpage, context }, arguments = { "string", "integer" } }
-implement { name = "notedeltapage", actions = { getdeltapage, context }, arguments = { "string", "integer" } }
+implement { name = "noteinternal", actions = { getinternal, context }, arguments = { "string", "integer" } }
+implement { name = "notedeltapage", actions = { getdeltapage, context }, arguments = { "string", "integer" } }
local function flushnotes(tag,whatkind,how) -- store and postpone
local state = notestates[tag]
diff --git a/Master/texmf-dist/tex/context/base/strc-not.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-not.mkvi
index 25a1072a3e7..edbbf92b3fc 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-not.mkvi
@@ -22,6 +22,7 @@
% 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
\unexpanded\def\unvboxed {\ifvmode\unvbox \else\box \fi} % will change or used more often
\unexpanded\def\unvcopied{\ifvmode\unvcopy\else\copy\fi} % will change or used more often
@@ -224,49 +225,57 @@
\unexpanded\def\strc_notations_reset{\strc_constructions_reset_indeed\namednotationparameter} % #1#2
%unexpanded\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}
+
\unexpanded\def\strc_notations_command#tag%
{\begingroup
\edef\currentnote{#tag}%
\strc_constructions_initialize{#tag}%
\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
\doifelsenextoptionalcs\strc_notations_command_yes\strc_notations_command_nop}
\unexpanded\def\strc_notations_command_nop#title%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=]%
\csname\??constructionnotehandler\currentconstructionhandler\endcsname
\strc_constructions_finalize
- \normalexpanded{\endgroup\noteparameter\c!next}}
+ \strc_notations_finalize}
\unexpanded\def\strc_notations_command_yes[#optional]%
{\doifelseassignment{#optional}\strc_notations_command_assignment\strc_notations_command_argument[#optional]}
\unexpanded\def\strc_notations_command_assignment[#settings]%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#settings][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#settings]%
\csname\??constructionnotehandler\currentconstructionhandler\endcsname
\strc_constructions_finalize
- \normalexpanded{\endgroup\noteparameter\c!next}}
+ \strc_notations_finalize}
\unexpanded\def\strc_notations_command_argument[#reference]#title%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=]%
\csname\??constructionnotehandler\currentconstructionhandler\endcsname
\strc_constructions_finalize
- \normalexpanded{\endgroup\noteparameter\c!next}}
-
-% \unexpanded\def\strc_notations_start#tag#stoptag%
-% {\begingroup
-% \edef\currentnote{#tag}%
-% \strc_constructions_initialize{#tag}%
-% \strc_notes_synchronize
-% \ifnotesenabled
-% \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel
-% \fi
-% \normalexpanded % not that efficient but also not that frequently used (\normaldef for parser)
-% {\normaldef\noexpand\strc_pickup_yes[##1]##2\csname\e!stop#stoptag\endcsname{\strc_notations_command_yes[##1]{##2}}%
-% \normaldef\noexpand\strc_pickup_nop ##1\csname\e!stop#stoptag\endcsname{\strc_notations_command_nop {##1}}}%
-% \doifnextoptionalcselse\strc_pickup_yes\strc_pickup_nop}
+ \strc_notations_finalize}
\unexpanded\def\strc_notations_start#tag#stoptag%
{\begingroup
@@ -282,16 +291,16 @@
\doifelsenextoptionalcs\strc_pickup_yes\strc_pickup_nop}
\unexpanded\def\strc_notations_start_yes[#reference]#title%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#reference},\c!title={#title},\c!bookmark=,\c!list=]%
\csname\??constructionnotehandler\currentconstructionhandler\endcsname
\strc_constructions_finalize
- \normalexpanded{\endgroup\noteparameter\c!next}}
+ \strc_notations_finalize}
\unexpanded\def\strc_notations_start_nop#title%
- {\strc_constructions_register[\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=][]%
+ {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#title},\c!bookmark=,\c!list=]%
\csname\??constructionnotehandler\currentconstructionhandler\endcsname
\strc_constructions_finalize
- \normalexpanded{\endgroup\noteparameter\c!next}}
+ \strc_notations_finalize}
\unexpanded\def\strc_notations_stop
{}
@@ -315,6 +324,7 @@
\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
@@ -337,6 +347,7 @@
\c!rule=\v!on,
\c!before=\blank,
\c!bodyfont=\v!small,
+ \c!anchor=, % can also be v!next
%\c!style=,
%\c!color=,
%\c!after=,
@@ -442,9 +453,6 @@
\settrue\processingnote
\ifconditional\c_strc_notes_skip
\globallet\lastnotesymbol\strc_notes_inject_symbol_nop
- \ifconditional\c_strc_notes_delayed
- \strc_notes_inject_symbol_snc
- \fi
\else
\iftypesettinglines % otherwise problems with \type <crlf> {xxx}
\ignorelines % makes footnotes work in \startlines ... \stoplines
@@ -460,13 +468,11 @@
\global\settrue\postponednote
\else\ifconditional\inlocalnotes % todo: per note class
\global\settrue\postponednote
+ \else\ifconditional\c_strc_notes_delayed
+ % probably end notes
\else
-\ifconditional\c_strc_notes_delayed
- % probably end notes
-\else
\handlenoteinsert\currentnote\currentnotenumber % either an insert or just delayed
-\fi
- \fi\fi
+ \fi\fi\fi
\endgroup
\fi
\fi
@@ -507,6 +513,9 @@
\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
@@ -519,58 +528,111 @@
\ifcsname\??noteinteractiondisplay\p_interaction\endcsname\p_interaction\else\v!no\fi
\endcsname}
-\setvalue{\??noteinteractioninline\v!yes}%
- {\strc_references_get_simple_page_reference{page(\clf_notenumberpage{\currentnote}\currentnotenumber)}%
- \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\currentnotenumber{0}
-\setvalue{\??noteinteractioninline\v!all}%
- {%\strc_references_get_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}%
- \strc_references_get_simple_page_reference{note:\currentnote:\currentnotenumber}%
- \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}%
- \let \strc_notes_set_style_color_inline \strc_notes_set_style_color_inline_yes}
+\let\strc_notes_get_reference_attribute_symbol \empty
+\let\strc_notes_get_destination_attribute_symbol\empty
-\setvalue{\??noteinteractioninline\v!no}%
- {\let\strc_notes_get_reference_attribute_symbol\empty
- \let\strc_notes_set_style_color_inline \strc_notes_set_style_color_inline_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
+
+% inline
-\expandafter\let\csname\??noteinteractioninline\v!number\expandafter\endcsname\csname\??noteinteractioninline\v!yes\endcsname
-\expandafter\let\csname\??noteinteractioninline\v!text \expandafter\endcsname\csname\??noteinteractioninline\v!yes\endcsname
+\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}
-% page(...) : we could have a dedicated one
+\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
-\setvalue{\??noteinteractiondisplay\v!yes}%
- {\strc_references_get_simple_page_reference{page(\clf_notesymbolpage{\currentnote}\currentnotenumber)}%
- \edef\strc_notes_set_reference_attribute_number{\attribute\referenceattribute\currentreferenceattribute}%
- \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_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)
-\setvalue{\??noteinteractiondisplay\v!no}%
+\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_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}
-
-\setvalue{\??noteinteractiondisplay\v!all}%
- {\strc_references_get_simple_page_reference{page(\clf_notesymbolpage{\currentnote}\currentnotenumber)}%
- \edef\strc_notes_set_reference_attribute_text {\attribute\referenceattribute\currentreferenceattribute}%
- %\strc_references_set_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}%
- \strc_references_set_simple_page_reference{note:\currentnote:\currentnotenumber}%
- \edef\strc_notes_set_destination_attribute_text{\attribute\destinationattribute\currentdestinationattribute}%
- \let \strc_notes_set_reference_attribute_number\strc_notes_set_reference_attribute_text
- \let \strc_notes_set_style_color_display \strc_notes_set_style_color_display_yes}
-
-\setvalue{\??noteinteractiondisplay\v!text}%
- {\strc_references_get_simple_page_reference{page(\clf_notesymbolpage{\currentnote}\currentnotenumber)}%
- \edef\strc_notes_set_reference_attribute_text {\attribute\referenceattribute\currentreferenceattribute}%
- %\strc_references_set_simple_page_reference{note:\cldcontext{structures.notes.internalid("\currentnote",\currentnotenumber)}}%
- \strc_references_set_simple_page_reference{note:\currentnote:\currentnotenumber}%
- \edef\strc_notes_set_destination_attribute_text{\attribute\destinationattribute\currentdestinationattribute}%
- \let \strc_notes_set_reference_attribute_number\donothing
- \let \strc_notes_set_style_color_display \strc_notes_set_style_color_display_yes}
-
-\expandafter\let\csname\??noteinteractiondisplay\v!number\expandafter\endcsname\csname\??noteinteractiondisplay\v!yes\endcsname
+ \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_nop}
+
+% \def\strc_references_prepare_display_references_yes_number
+% {\let\strc_notes_set_reference_attribute_text\donothing
+% \strc_references_get_simple_reference{symb:\currentnote:\currentnotenumber}% reference
+% \edef\strc_notes_set_reference_attribute_number{\attribute\referenceattribute\currentreferenceattribute}%
+% \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes}
+
+% \def\strc_references_prepare_display_references_yes_text
+% {\strc_references_get_simple_reference{symb:\currentnote:\currentnotenumber}% reference
+% \edef\strc_notes_set_reference_attribute_text{\attribute\referenceattribute\currentreferenceattribute}%
+% \let\strc_notes_set_reference_attribute_number\donothing
+% \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes}
+
+% \def\strc_references_prepare_display_references_yes_all
+% {\strc_references_get_simple_reference{symb:\currentnote:\currentnotenumber}% reference
+% \edef\strc_notes_set_reference_attribute_text{\attribute\referenceattribute\currentreferenceattribute}%
+% \strc_references_get_simple_reference{symb:\currentnote:\currentnotenumber}% reference
+% \edef\strc_notes_set_reference_attribute_number{\attribute\referenceattribute\currentreferenceattribute}%
+% \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes}
+
+\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{\attribute\referenceattribute\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{\attribute\referenceattribute\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{\attribute\referenceattribute\currentreferenceattribute}%
+ \strc_references_get_simple_reference{*\currentnoteinternal}% reference
+ \edef\strc_notes_set_reference_attribute_number{\attribute\referenceattribute\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
@@ -599,6 +661,7 @@
% 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}
@@ -616,52 +679,57 @@
\noteparameter\c!symbolcommand{\symbol[\v!note:\v!previouspage]}%
\fi}
-\unexpanded\def\strc_notes_register_note_page % called more often than needed
- {\iftrialtypesetting \else
- \normalexpanded{\noexpand\ctxlatecommand{setnotesymbolpage("\currentnote",\currentnotenumber)}}%
- \fi}
-
\unexpanded\def\strc_notes_inject_symbol_yes
{\strc_notes_inject_symbol_indeed\conditionaltrue}
\unexpanded\def\strc_notes_inject_symbol_nop
{\strc_notes_inject_symbol_indeed\conditionalfalse}
-% % this flushes the data to the list
-%
-% \unexpanded\def\strc_notes_inject_symbol_snc
-% {\currentconstructionsynchronize}
+\definemargindata
+ [strc_notes_destination_margin]
+ [\v!left]
+ [\c!margin=\zeropoint,
+ \c!width=\zeropoint,
+ \c!style=,
+ \c!color=]
+
+% \unexpanded\def\strc_notes_destination_hack
+% {\ifx\strc_notes_get_destination_attribute_symbol\empty\else
+% \strc_notes_destination_hack_indeed
+% \fi}
%
-% but instead we need to do this with the content
-
-\unexpanded\def\strc_notes_inject_symbol_snc % so this will go away probably
- {}
+% \unexpanded\def\strc_notes_destination_hack_indeed % can be a helper
+% {\strc_notes_destination_margin
+% {\setbox\scratchbox\hpack \strc_notes_get_destination_attribute_symbol{}%
+% \wd\scratchbox\makeupwidth
+% \ht\scratchbox\strutht
+% \dp\scratchbox\strutdp
+% \hpack to \zeropoint{\box\scratchbox\hss}}}
\unexpanded\def\strc_notes_inject_symbol_indeed#synchronize%
- {\removeunwantedspaces
- \doifelseitalic\/\donothing % Charles IV \footnote{the fourth}
+ {\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
- \ifconditional#synchronize\relax
- \strc_notes_inject_symbol_snc % this flushes the data to the list
- \fi
- \strc_notes_register_note_page % this registers the symbol page number (late)
\strc_notes_interaction_check_inline
\strc_notes_set_style_color_inline\c!textstyle\c!textcolor
- \hbox \strc_notes_get_reference_attribute_symbol \bgroup
- \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
+ \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
-% \dostoptagged % check
\globallet\lastnotesymbol\relax}
\unexpanded\def\strc_notes_inject_dummy % temp hack
@@ -672,7 +740,7 @@
\strc_notes_inject_separator
\fi
\nobreak
- \hbox to .5\emwidth{}%
+ \hpack to .5\emwidth{}%
\globallet\lastnotesymbol\relax}
\unexpanded\def\strc_notes_inject_separator % patch by WS due to request on list
@@ -814,8 +882,8 @@
\installcorenamespace{notepenalty}
\installcorenamespace{noterule}
-\def\currentnoterulecommand{\csname\??notecommand\currentnote\endcsname}
-\def\currentnoterulealign {\csname\??notealign \currentnote\endcsname}
+\def\currentnoterulecommand{\begincsname\??notecommand\currentnote\endcsname}
+\def\currentnoterulealign {\begincsname\??notealign \currentnote\endcsname}
\def\currentnoterulecommandcommand{\noteparameter\c!rulecommand}
\def\currentnoterulecommandnormal {\normalnoterule} % no let as it can be changed afterwards
@@ -831,18 +899,25 @@
\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%
- {\csname\??noterule\ifcsname\??noterule#alternative\endcsname#alternative\else\s!unknown\fi\endcsname}
-
-\setvalue{\??noterule\v!command}{\letcurrentnoterulecommand\currentnoterulecommandcommand}
-\setvalue{\??noterule \v!on}{\letcurrentnoterulecommand\currentnoterulecommandnormal}
-\setvalue{\??noterule \v!normal}{\letcurrentnoterulecommand\currentnoterulecommandnormal}
-\setvalue{\??noterule \v!left}{\letcurrentnoterulealign \lefttoright}
-\setvalue{\??noterule \v!right}{\letcurrentnoterulealign \righttoleft}
-\setvalue{\??noterule \v!off}{\letcurrentnoterulecommand\relax}
-%setvalue{\??noterule\s!unknown}{\letcurrentnoterulecommand\currentnoterulecommandunknown} % obsolete
+ {\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
@@ -850,7 +925,7 @@
\def\currentnotepenalty
{\ifcsname\??notepenalty\noteparameter\c!split\endcsname
- \csname\??notepenalty\noteparameter\c!split\endcsname
+ \lastnamedcs
\else
\numexpr\noteparameter\c!split\relax
\fi}
@@ -967,7 +1042,8 @@
{\normalexpanded{\rawprocesscommalist[\noteparameter\c!location]\strc_notes_set_location_step}}
\unexpanded\def\strc_notes_set_location_step#alternative% the insert related one
- {\ifcsname\??notelocation#alternative\endcsname\csname\??notelocation#alternative\endcsname\fi}
+ %{\ifcsname\??notelocation#alternative\endcsname\csname\??notelocation#alternative\endcsname\fi}
+ {\begincsname\??notelocation#alternative\endcsname}
\appendtoks
\strc_notes_set_variants
@@ -1170,8 +1246,8 @@
\newconditional\c_strc_notes_symbol \settrue\c_strc_notes_symbol % not used
\newconditional\c_strc_notes_skip
-\unexpanded\def\setnote [#tag]{\getvalue{#tag}}
-\unexpanded\def\setnotetext[#tag]{\global\settrue\c_strc_notes_skip\getvalue{#tag}}
+\unexpanded\def\setnote [#tag]{\csname#tag\endcsname}
+\unexpanded\def\setnotetext[#tag]{\global\settrue\c_strc_notes_skip\csname#tag\endcsname}
\unexpanded\def\handlenoteinsert#tag#id%
{\begingroup
@@ -1209,10 +1285,10 @@
% as we can have collected notes (e.g. in tables) we need to recover
% \currentdescriptionattribute and \currentdescriptionsynchronize
%
- \reinstateconstructionnumberentry\currentconstructionlistentry % we could store the number in the entry (e.g. needed when local notes in table)
+ \reinstatecachedconstructionnumberentry\currentconstructionlistentry % we could store the number in the entry (e.g. needed when local notes in table)
%
\dontcomplain
-% \begingroup
+ %begingroup
\strc_notes_interaction_check_display
\strc_notes_set_reference_attribute_text
\strc_constructions_stored_start
@@ -1222,7 +1298,7 @@
\strc_notes_inject_text\relax
\ifvmode\obeydepth\else\endstrut\fi % \obeydepth is new per 2015-01-10
\strc_constructions_stored_stop
-% \endgroup
+ %endgroup
}
\unexpanded\def\strc_notes_inject_text % hm main?
@@ -1298,11 +1374,7 @@
\whitespace
\noteparameter\c!before
\fi
- % \bgroup
- % \usealignparameter\noteparameter
- \placenoterule % alleen in ..mode
- % \par
- % \egroup
+ \placenoterule
\bgroup
\strc_notes_set_bodyfont
\setbox\scratchbox\hbox
@@ -1316,12 +1388,12 @@
\c!strut=\v!no,
\c!offset=\v!overlay]%
\inheritednoteframed
- {\ifdim\dp\scratchbox=\zeropoint % this hack is needed because \vadjust
- \hbox{\lower\strutdp\box\scratchbox}% % in margin number placement
- \else % hides the (always) present depth
+ {\ifdim\dp\scratchbox=\zeropoint % 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\hbox{\lower\strutdepth\box\scratchbox}%
+ \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
@@ -1358,9 +1430,10 @@
{\begingroup
\useinterlinespaceparameter\noteparameter
\doifelse{\noteparameter\c!paragraph}\v!yes
- {\vbox\starthboxestohbox
- \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteinsertionnumber
- \stophboxestohbox}
+ {\leftorrightvbox % cf mail from ws to list
+ {\starthboxestohbox
+ \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteinsertionnumber
+ \stophboxestohbox}}
{\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteinsertionnumber}%
\endgroup}
@@ -1567,8 +1640,6 @@
\noteparameter\c!after
\fi}}
-\setvalue{\??notealternative}{\getvalue{\??notealternative\v!none}}
-
%D A stupid alternative is also provided:
%D
%D \starttyping
@@ -1582,6 +1653,9 @@
\installnotealternative \v!none
{\flushlocalnotes\currentnote}
+\installnotealternative \empty
+ {\flushlocalnotes\currentnote}
+
\installnotealternative \v!grid % test if n > 0
{\begingroup
\setupcurrentnote[\c!location=]%
@@ -1769,7 +1843,7 @@
%D }
%D \stoptyping
-\def\doifelsenoteonsamepage[#tag]{\clf_doifnoteonsamepageasprevious{#tag}}
+\def\doifelsenoteonsamepage#tag{\clf_doifnoteonsamepageasprevious{#tag}}
\let\doifnoteonsamepageelse\doifelsenoteonsamepage
diff --git a/Master/texmf-dist/tex/context/base/strc-num.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-num.lua
index 0203334fff6..0203334fff6 100644
--- a/Master/texmf-dist/tex/context/base/strc-num.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-num.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-num.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-num.mkiv
index 58095b8e7d9..2418130f952 100644
--- a/Master/texmf-dist/tex/context/base/strc-num.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-num.mkiv
@@ -118,8 +118,8 @@
\unexpanded\def\prevcounter {\dodoubleargument\strc_counters_prev_interfaced}
\unexpanded\def\countersubs {\dodoubleargument\strc_counters_subs_interfaced}
-\unexpanded\def\savecounter {\dodoubleempty \strc_counters_save_interfaced}
-\unexpanded\def\restorecounter {\dodoubleempty \strc_counters_restore_interfaced}
+\unexpanded\def\savecounter {\dosingleempty \strc_counters_save_interfaced}
+\unexpanded\def\restorecounter {\dosingleempty \strc_counters_restore_interfaced}
\def\strc_counters_set_interfaced
{\ifthirdargument
@@ -247,7 +247,7 @@
\def\strc_counters_setown_two [#1][#2][#3]{\clf_setownsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax{#3}}
\def\strc_counters_restart_two [#1][#2][#3]{\clf_restartsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax\numexpr#3\relax}
\def\strc_counters_reset_two [#1][#2]{\clf_resetsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
-\def\strc_counters_increment_two [#1][#2]{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+%def\strc_counters_increment_two [#1][#2]{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_decrement_two [#1][#2]{\clf_decrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_raw_two [#1][#2]{\clf_subcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
@@ -261,7 +261,7 @@
\def\strc_counters_setown_one [#1][#2][#3]{\clf_setowncounter {\namedcounterparameter{#1}\s!name}{#2}}
\def\strc_counters_restart_one [#1][#2][#3]{\clf_restartcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_reset_one [#1][#2]{\clf_resetcounter {\namedcounterparameter{#1}\s!name}}
-\def\strc_counters_increment_one [#1][#2]{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
+%def\strc_counters_increment_one [#1][#2]{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_decrement_one [#1][#2]{\clf_decrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_raw_one [#1][#2]{\clf_countervalue {\namedcounterparameter{#1}\s!name}}
@@ -278,7 +278,7 @@
\unexpanded\def\strc_counters_setown #1#2{\clf_setowncounter {\namedcounterparameter{#1}\s!name}{#2}}
\unexpanded\def\strc_counters_restart #1#2{\clf_restartcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\unexpanded\def\strc_counters_reset #1{\clf_resetcounter {\namedcounterparameter{#1}\s!name}}
-\unexpanded\def\strc_counters_increment #1{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
+%unexpanded\def\strc_counters_increment #1{\clf_incrementcounter {\namedcounterparameter{#1}\s!name}}
\unexpanded\def\strc_counters_decrement #1{\clf_decrementcounter {\namedcounterparameter{#1}\s!name}}
\def\strc_counters_raw #1{\clf_countervalue {\namedcounterparameter{#1}\s!name}}
@@ -292,7 +292,7 @@
\unexpanded\def\strc_counters_setown_sub #1#2#3{\clf_setownsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax{#3}}
\unexpanded\def\strc_counters_restart_sub #1#2#3{\clf_restartsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax\numexpr#3\relax}
\unexpanded\def\strc_counters_reset_sub #1#2{\clf_resetsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
-\unexpanded\def\strc_counters_increment_sub #1#2{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+%unexpanded\def\strc_counters_increment_sub #1#2{\clf_incrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\unexpanded\def\strc_counters_decrement_sub #1#2{\clf_decrementsubcounter {\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
\def\strc_counters_raw_sub #1#2{\clf_subcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#2\relax} % maybe raw
@@ -322,11 +322,11 @@
\def\nextcountervalue [#1]{\clf_nextcountervalue {\namedcounterparameter{#1}\s!name}}
\def\prevcountervalue [#1]{\clf_previouscountervalue{\namedcounterparameter{#1}\s!name}}
-\let\rawsubcountervalue \strc_counters_raw_two
-\let\lastsubcountervalue \strc_counters_last_two
-\let\firstsubcountervalue \strc_counters_first_two
-\let\nextsubcountervalue \strc_counters_next_two
-\let\prevsubcountervalue \strc_counters_prev_two
+\def\rawsubcountervalue [#1]#2[#3]{\clf_subcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#3\relax}
+\def\lastsubcountervalue [#1]#2[#3]{\clf_lastsubcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#3\relax}
+\def\firstsubcountervalue[#1]#2[#3]{\clf_firstsubcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#3\relax}
+\def\nextsubcountervalue [#1]#2[#3]{\clf_nextsubcountervalue {\namedcounterparameter{#1}\s!name}\numexpr#3\relax}
+\def\prevsubcountervalue [#1]#2[#3]{\clf_previoussubcountervalue{\namedcounterparameter{#1}\s!name}\numexpr#3\relax}
% The bypage check needs a multipass reference and therefore we only check for it when we increment
% and know that some content will be placed. We could also check for spreads.
@@ -342,6 +342,14 @@
\fi
\clf_incrementsubcounter{\namedcounterparameter{#1}\s!name}\numexpr#2\relax}
+% We also need to redefine these because of the page check:
+
+ \def\strc_counters_increment_two [#1][#2]{\strc_counters_increment_sub{#1}{#2}}
+ \def\strc_counters_increment_one [#1][#2]{\strc_counters_increment_sub{#1}\plusone}
+\unexpanded\def\strc_counters_increment #1{\strc_counters_increment_sub{#1}\plusone}
+
+% so far for the hack
+
\unexpanded\def\convertedcounter
{\dodoubleempty\strc_counters_converted}
@@ -534,7 +542,7 @@
\xdef\currentstructurecomponentreferenceprefix{#1\c!referenceprefix}%
\strc_counters_register_component_check_prefix
\setnextinternalreference
- \clf_setreferenceattribute
+ \clf_setdestinationattribute
{%
references {%
internal \nextinternalreference
@@ -618,6 +626,7 @@
reference {\currentstructurecomponentreference}
prefix {\currentstructurecomponentreferenceprefix}
% section structures.sections.currentid()
+ view {\interactionparameter\c!focus}%
}
titledata {
label {\detokenize\expandafter{\currentstructurecomponentlabel}}
@@ -660,7 +669,9 @@
%}
\relax
\xdef\m_strc_counters_last_registered_index{\the\scratchcounter}%
- \clf_setinternalreference internal \nextinternalreference\relax
+ \clf_setinternalreference
+ internal \nextinternalreference
+ \relax
\xdef\m_strc_counters_last_registered_attribute {\the\lastdestinationattribute}%
\xdef\m_strc_counters_last_registered_synchronize{\strc_lists_inject_enhance{\m_strc_counters_last_registered_index}{\nextinternalreference}}}
diff --git a/Master/texmf-dist/tex/context/base/strc-pag.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-pag.lua
index 96d26e6f666..96d26e6f666 100644
--- a/Master/texmf-dist/tex/context/base/strc-pag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-pag.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-pag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-pag.mkiv
index 72f0cf32aa8..0a55fb45f33 100644
--- a/Master/texmf-dist/tex/context/base/strc-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-pag.mkiv
@@ -237,6 +237,19 @@
\strc_pagenumbers_decrement_counters
\to \everygoodbye
+\newcount\c_strc_subpage_first_real \c_strc_subpage_first_real\plusone
+
+\appendtoks
+ \ifcase\subpageno\relax
+ \global\c_strc_subpage_first_real\realpageno
+ \or
+ \global\c_strc_subpage_first_real\realpageno
+ \fi
+\to \everybeforepagebody
+
+\def\therealsubpageno#1% new helper
+ {\the\numexpr\c_strc_subpage_first_real+#1+\minusone\relax}
+
% Equivalents (compatibility):
%
% todo: maybe leave lastpage etc lua calls
@@ -329,7 +342,7 @@
{\edef\p_strc_pagenumbers_page{\directpagenumberingparameter\c!page}%
\ifx\p_strc_pagenumbers_page\empty \else
\ifx\p_strc_pagenumbers_page\v!no \else
- \page[\p_strc_pagenumbers_page]
+ \page[\p_strc_pagenumbers_page]%
\fi
\fi}
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-ref.lua
index 2a1d0dd59e0..c3b852e8917 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ref.lua
@@ -50,6 +50,8 @@ local v_file = variables.file
local v_unknown = variables.unknown
local v_page = variables.page
local v_auto = variables.auto
+local v_yes = variables.yes
+local v_name = variables.name
local context = context
local commands = commands
@@ -197,7 +199,7 @@ local function initializer() -- can we use a tobesaved as metatable for collecte
nofreferred = #referred
end
--- no longer fone this way
+-- no longer done this way
-- references.resolvers = references.resolvers or { }
-- local resolvers = references.resolvers
@@ -505,7 +507,6 @@ local function register_from_lists(collected,derived,pages,sections)
end
end
end
- -- inspect(derived)
end
references.registerinitializer(function() register_from_lists(lists.collected,derived) end)
@@ -983,6 +984,9 @@ local function loadexternalreferences(name,utilitydata)
local pages = struc.pages.collected -- pagenumber data
-- a bit weird one, as we don't have the externals in the collected
for prefix, set in next, external do
+if prefix == "" then
+ prefix = name -- this can clash!
+end
for reference, data in next, set do
if trace_importing then
report_importing("registering %a reference, kind %a, name %a, prefix %a, reference %a",
@@ -1010,6 +1014,9 @@ local function loadexternalreferences(name,utilitydata)
if kind and realpage then
references.pagedata = pages[realpage]
local prefix = references.prefix or ""
+if prefix == "" then
+ prefix = name -- this can clash!
+end
local target = external[prefix]
if not target then
target = { }
@@ -1245,7 +1252,6 @@ function references.loadpresets(product,component) -- we can consider a special
loadproductvariables (product,component,utilitydata)
loadproductreferences(product,component,utilitydata)
loadproductcomponents(product,component,utilitydata)
- -- inspect(productdata)
end
end
end
@@ -1607,7 +1613,8 @@ local function identify_inner_or_outer(set,var,i)
-- nest we look at each component (but we can omit the already consulted one
- local components = job.structure.components
+ local jobstructure = job.structure
+ local components = jobstructure and jobstructure.components
if components then
for c=1,#components do
local component = components[c]
@@ -1870,8 +1877,10 @@ local defaultinnermethod = defaultinnermethod
references.innermethod = innermethod -- don't mess with this one directly
function references.setinnermethod(m)
- if toboolean(m) or m == v_page then
+ if toboolean(m) or m == v_page or m == v_yes then
innermethod = v_page
+ elseif m == v_name then
+ innermethod = v_name
else
innermethod = v_auto
end
@@ -1885,7 +1894,7 @@ implement {
name = "setinnerreferencemethod",
actions = references.setinnermethod,
arguments = "string",
- onlyonce = true
+ -- onlyonce = true
}
function references.getinnermethod()
@@ -1896,16 +1905,18 @@ directives.register("references.linkmethod", function(v) -- page auto
references.setinnermethod(v)
end)
--- this is inconsistent
+-- we can call setinternalreference with an already known internal or with
+-- a reference/prefix specification
local destinationattributes = { }
local function setinternalreference(specification)
local internal = specification.internal
local destination = unsetvalue
- if innermethod == v_auto then
+ if innermethod == v_auto or innermethod == v_name then
local t, tn = { }, 0 -- maybe add to current (now only used for tracing)
local reference = specification.reference
+ local view = specification.view
if reference then
local prefix = specification.prefix
if prefix and prefix ~= "" then
@@ -1926,10 +1937,19 @@ local function setinternalreference(specification)
-- ugly .. later we decide to ignore it when we have a real one
-- but for testing we might want to see them all
if internal then
- tn = tn + 1
- t[tn] = internal -- when number it's internal
+ if innermethod ~= v_name then -- so page and auto
+ -- we don't want too many #1 #2 #3 etc
+ tn = tn + 1
+ t[tn] = internal -- when number it's internal
+ end
+ if not view then
+ local i = references.internals[internal]
+ if i then
+ view = i.references.view
+ end
+ end
end
- destination = references.mark(t,nil,nil,specification.view) -- returns an attribute
+ destination = references.mark(t,nil,nil,view) -- returns an attribute
end
if internal then -- new
destinationattributes[internal] = destination
@@ -1995,7 +2015,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically
if done then
attr = setinternalreference {
prefix = prefix,
- reference = tag,
+ reference = rdat.reference,
internal = rdat.internal,
view = rdat.view
} or unsetvalue
@@ -2006,7 +2026,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically
end
implement {
- name = "setreferenceattribute",
+ name = "setdestinationattribute",
actions = references.setandgetattribute,
arguments = {
{
@@ -2048,12 +2068,25 @@ function references.getinternallistreference(n) -- n points into list (todo: reg
return i and destinationattributes[i] or 0
end
+function references.getinternalcachedlistreference(n) -- n points into list (todo: registers)
+ local l = lists.cached[n]
+ local i = l and l.references.internal
+ return i and destinationattributes[i] or 0
+end
+
implement {
name = "getinternallistreference",
actions = { references.getinternallistreference, context },
arguments = "integer"
}
+implement {
+ name = "getinternalcachedlistreference",
+ actions = { references.getinternalcachedlistreference, context },
+ arguments = "integer"
+}
+
+
--
function references.getcurrentmetadata(tag)
@@ -2078,9 +2111,9 @@ local function getcurrentprefixspec(default)
local data = currentreference and currentreference.i
local metadata = data and data.metadata
return
- metatadata and metadata.kind or "?",
- metatadata and metadata.name or "?",
- default or "?"
+ metadata and metadata.kind or "?",
+ metadata and metadata.name or "?",
+ default or "?"
end
references.getcurrentprefixspec = getcurrentprefixspec
@@ -2557,14 +2590,16 @@ end
runners["special operation"] = runners["special"]
runners["special operation with arguments"] = runners["special"]
--- These are the testspecials not the real ones. They are used to
--- check the validity.
-
function specials.internal(var,actions)
local v = internals[tonumber(var.operation)]
- local r = v and v.references.realpage
+ local r = v and v.references
if r then
- actions.realpage = r
+ local p = r.realpage
+ if p then
+-- setmetatableindex(actions,r)
+ actions.realpage = p
+ actions.view = r.view
+ end
end
end
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.mkvi b/Master/texmf-dist/tex/context/base/mkiv/strc-ref.mkvi
index f5d0d1d7863..177abd835b7 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ref.mkvi
@@ -216,13 +216,15 @@
% beware, the structures.references.set writes a
\setnextinternalreference
\strc_references_start_destination_nodes
- \clf_setreferenceattribute
+ \clf_setdestinationattribute
{%
references {%
internal \nextinternalreference
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
+ \ifx\referenceprefix\empty\else
prefix {\referenceprefix}%
+ \fi
reference {\currentreferencelabels}%
}%
metadata {%
@@ -259,7 +261,13 @@
\strc_references_flush_destination_nodes
\egroup
\strc_references_inject_after % new
- \fi}
+ \else\ifvoid\b_strc_destination_nodes\else
+ \strc_references_inject_before % new
+ \dontleavehmode\hbox \bgroup
+ \strc_references_flush_destination_nodes
+ \egroup
+ \strc_references_inject_after % new
+ \fi\fi}
\def\strc_references_set_page_only_destination_attribute#labels% could in fact be fully expandable
{\ifreferencing
@@ -270,13 +278,15 @@
\else
\strc_references_start_destination_nodes
\setnextinternalreference
- \clf_setreferenceattribute
+ \clf_setdestinationattribute
{%
references {%
internal \nextinternalreference
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
+ \ifx\referenceprefix\empty\else
prefix {\referenceprefix}%
+ \fi
reference {\currentreferencelabels}%
}%
metadata {%
@@ -297,13 +307,15 @@
\setnextinternalreference
\edef\m_strc_references_user{#user}%
\edef\m_strc_references_text{#text}%
- \clf_setreferenceattribute
+ \clf_setdestinationattribute
{%
references {%
internal \nextinternalreference
% block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
+ \ifx\referenceprefix\empty\else
prefix {\referenceprefix}%
+ \fi
reference {#labels}%
}%
metadata {%
@@ -333,7 +345,13 @@
\strc_references_flush_destination_nodes
\egroup
\strc_references_inject_after % new
- \fi}
+ \else\ifvoid\b_strc_destination_nodes\else
+ \strc_references_inject_before % new
+ \dontleavehmode\hbox \bgroup
+ \strc_references_flush_destination_nodes
+ \egroup
+ \strc_references_inject_after % new
+ \fi\fi}
\unexpanded\def\strc_references_direct_full
{\strc_references_direct_full_user\empty}
@@ -371,16 +389,19 @@
%D For internal usage:
-\def\strc_references_set_simple_page_reference#label%
+\def\strc_references_set_simple_reference#label%
{\iflocation
\strc_references_start_destination_nodes
- \clf_setreferenceattribute
+ \setnextinternalreference
+ \clf_setdestinationattribute
{%
references {%
- % block {\currentsectionblock}%
view {\interactionparameter\c!focus}%
+ \ifx\referenceprefix\empty\else
prefix {\referenceprefix}%
+ \fi
reference {#label}%
+ internal \nextinternalreference
}%
metadata {%
kind {\s!page}%
@@ -394,7 +415,30 @@
\xdef\currentdestinationattribute{\number\attributeunsetvalue}%
\fi}
-\def\strc_references_get_simple_page_reference#label%
+\def\strc_references_set_simple_internal_reference#label% no prefix
+ {\iflocation
+ \strc_references_start_destination_nodes
+ \setnextinternalreference
+ \clf_setdestinationattribute
+ {%
+ references {%
+ view {\interactionparameter\c!focus}%
+ reference {#label}%
+ internal \nextinternalreference
+ }%
+ metadata {%
+ kind {\s!page}%
+ }%
+ }%
+ \relax
+ \strc_references_stop_destination_nodes
+ \xdef\currentdestinationattribute{\number\lastdestinationattribute}%
+ \else
+ \setbox\b_strc_destination_nodes\emptyhbox
+ \xdef\currentdestinationattribute{\number\attributeunsetvalue}%
+ \fi}
+
+\def\strc_references_get_simple_reference#label%
{\iflocation
\clf_injectreference
{\referenceprefix}%
@@ -438,7 +482,7 @@
{\ifsecondargument
\expandafter\strc_references_content_pickup_yes
\else
- \expandafter\strc_references_content_pickup_yes
+ \expandafter\strc_references_content_pickup_nop
\fi}
\def\strc_references_content_pickup_yes[#1][#2]%
@@ -453,7 +497,7 @@
\scratchdepth \dp\nextbox
\setbox\nextbox\hbox
{\framed[\c!frame=\v!off,#2]{\box\nextbox}}%
- \strc_references_set_simple_page_reference{#1}%
+ \strc_references_set_simple_reference{#1}%
\setbox\nextbox\hbox attr \destinationattribute \currentdestinationattribute
{\strc_references_flush_destination_nodes
\box\nextbox}%
@@ -465,7 +509,7 @@
\egroup}
\def\strc_references_content_nop_finish#1#2%
- {\strc_references_set_simple_page_reference{#1}%
+ {\strc_references_set_simple_reference{#1}%
\hbox attr \destinationattribute \currentdestinationattribute
{\strc_references_flush_destination_nodes
\box\nextbox}%
@@ -790,9 +834,11 @@
\def\getinternalorderreference#kind#name%
{\clf_currentreferenceorder{#kind}{#name}}
-\def\thisissomeinternal#kind#name% only for old time sake
+\def\thisissomeinternal#kind#name% only for old time sake, will go away
{\begingroup
- \clf_setinternalreference reference {#kind:#name}\relax
+ \clf_setinternalreference
+ reference {#kind:#name}% no view
+ \relax
\hbox attr \destinationattribute\lastdestinationattribute{}%
\endgroup}
@@ -1187,7 +1233,7 @@
\installcorenamespace{referencinginteraction}
-\setvalue{\??referencinginteraction\v!all}%
+\def\strc_references_interaction_all
{\the\leftreferencetoks
\doifelsesometoks\leftreferencetoks \leftofreferencecontent \donothing
\leftofreference
@@ -1196,6 +1242,8 @@
\doifelsesometoks\rightreferencetoks\rightofreferencecontent\donothing
\the\rightreferencetoks}
+\letvalue{\??referencinginteraction\v!all}\strc_references_interaction_all
+
\setvalue{\??referencinginteraction\v!label}%
{\leftofreference
\the\leftreferencetoks
@@ -1210,14 +1258,21 @@
\setvalue{\??referencinginteraction\v!symbol}%
{\referencesymbol}
+% \def\referencesequence
+% {\csname\??referencinginteraction
+% \ifcsname\??referencinginteraction\referencingparameter\c!interaction\endcsname
+% \referencingparameter\c!interaction
+% \else
+% \v!all
+% \fi
+% \endcsname}
+
\def\referencesequence
- {\csname\??referencinginteraction
- \ifcsname\??referencinginteraction\referencingparameter\c!interaction\endcsname
- \referencingparameter\c!interaction
- \else
- \v!all
- \fi
- \endcsname}
+ {\ifcsname\??referencinginteraction\referencingparameter\c!interaction\endcsname
+ \expandafter\lastnamedcs
+ \else
+ \expandafter\strc_references_interaction_all
+ \fi}
\newtoks\everyresetinatreference
@@ -1429,16 +1484,16 @@
\unexpanded\def\directgoto
{\ifconditional\uselocationstrut
- \expandafter\dodirectgoto
+ \expandafter\strc_references_direct_goto
\else
- \expandafter\dodirectgotohtdp
+ \expandafter\strc_references_direct_goto_htdp
\fi}
\unexpanded\def\goto
{\ifconditional\uselocationstrut
- \expandafter\dogoto
+ \expandafter\strc_references_goto
\else
- \expandafter\dogotohtdp
+ \expandafter\strc_references_goto_htdp
\fi}
% The unbox trick is needed in order to permit \par inside a reference. Otherwise
@@ -1451,7 +1506,7 @@
\def\revivesavedreferenceattribute % sometimes handy as no test etc needed
{\attribute\referenceattribute\lastsavedreferenceattribute}
-\def\dodirectgoto#content[#label]% no test for valid references
+\def\strc_references_direct_goto#content[#label]% no test for valid references
{\dontleavehmode
\begingroup
\attribute\referenceattribute\attributeunsetvalue
@@ -1478,7 +1533,7 @@
\fi
\endgroup}
-\def\dodirectgotohtdp#content[#label]% no test for valid references
+\def\strc_references_direct_goto_htdp#content[#label]% no test for valid references
{\dontleavehmode
\begingroup
\global\lastsavedreferenceattribute\attributeunsetvalue
@@ -1504,7 +1559,7 @@
\fi
\endgroup}
-\def\dogoto#content#dummy[#label]% #dummy gobbles spaces
+\def\strc_references_goto#content#dummy[#label]% #dummy gobbles spaces
{\dontleavehmode
\begingroup
%\setbox\referencebox\hbox\bgroup % experiment, might change again to non \par support
@@ -1531,24 +1586,43 @@
%\egroup\unhbox\referencebox}
\endgroup}
+\def\strc_references_goto_internal#content#dummy[#internal]% #dummy gobbles spaces
+ {\dontleavehmode
+ \begingroup
+ \global\lastsavedreferenceattribute\attributeunsetvalue
+ \attribute\referenceattribute\attributeunsetvalue
+ \iflocation
+ \setstrut % can be option
+ \strc_references_get_simple_reference{internal(#internal)}%
+ \global\lastsavedreferenceattribute\currentreferenceattribute
+ \attribute\referenceattribute\currentreferenceattribute
+ \setlocationattributes
+ \dostarttagged\t!link\empty
+ #content%
+ \dostoptagged
+ \else
+ #content%
+ \fi
+ \endgroup}
+
\unexpanded\def\startgoto[#label]%
{\dontleavehmode
\begingroup
\iflocation
\clf_doifelsereference{\referenceprefix}{#label}{\extrareferencearguments}%
- {\expandafter\startgoto_yes}%
- {\expandafter\startgoto_nop}%
+ {\expandafter\strc_references_start_goto_yes}%
+ {\expandafter\strc_references_start_goto_nop}%
\else
- \expandafter\startgoto_nop
+ \expandafter\strc_references_start_goto_nop
\fi}
-\unexpanded\def\startgoto_nop
- {\let\stopgoto\stopgoto_nop}
+\unexpanded\def\strc_references_start_goto_nop
+ {\let\stopgoto\strc_references_stop_goto_nop}
-\unexpanded\def\stopgoto_nop
+\unexpanded\def\strc_references_stop_goto_nop
{\endgroup}
-\unexpanded\def\startgoto_yes
+\unexpanded\def\strc_references_start_goto_yes
{\expandtexincurrentreference
\clf_injectcurrentreferencehtdp
\ht\strutbox
@@ -1559,13 +1633,13 @@
\global\lastsavedreferenceattribute\lastreferenceattribute
\attribute\referenceattribute\lastreferenceattribute
\dostarttagged\t!link\empty
- \let\stopgoto\stopgoto_yes}
+ \let\stopgoto\strc_references_stop_goto_yes}
-\unexpanded\def\stopgoto_yes
+\unexpanded\def\strc_references_stop_goto_yes
{\dostoptagged
\endgroup}
-\def\dogotohtdp#content#dummy[#label]% dummy gobbles spaces
+\def\strc_references_goto_htdp#content#dummy[#label]% dummy gobbles spaces
{\dontleavehmode
\begingroup
\global\lastsavedreferenceattribute\attributeunsetvalue
@@ -2121,11 +2195,11 @@
\def\referencestructureprefixparameter#kind#name#category#parameter%
{\ifcsname\??referencingprefix#name:#category#parameter\endcsname
- \csname\??referencingprefix#name:#category#parameter\endcsname
+ \lastnamedcs
\else\ifcsname\??referencingprefix#kind:#category#parameter\endcsname
- \csname \??referencingprefix#kind:#category#parameter\endcsname
+ \lastnamedcs
\else\ifcsname\??referencingprefix:#category#parameter\endcsname
- \csname \??referencingprefix:#category#parameter\endcsname
+ \lastnamedcs
\fi\fi\fi}
\def\currentreferencedefault % for some reason we need to explicitly expand
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-reg.lua
index ed329219595..4efbe038b3d 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-reg.lua
@@ -391,13 +391,18 @@ end
local function finalizer()
local flaginternals = references.flaginternals
+ local usedviews = references.usedviews
for k, v in next, tobesaved do
local entries = v.entries
if entries then
for i=1,#entries do
local r = entries[i].references
- if r and flaginternals[r.internal] then
- r.used = true
+ if r then
+ local i = r.internal
+ local f = flaginternals[i]
+ if f then
+ r.used = usedviews[i] or true
+ end
end
end
end
@@ -539,7 +544,7 @@ local function storeregister(rawdata) -- metadata, references, entries
end
--
if notsaved then
- usedinternals[internal] = true -- todo view (we assume that forward references index entries are used)
+ usedinternals[internal] = references.used -- todo view (we assume that forward references index entries are used)
end
--
if not references.realpage then
@@ -641,11 +646,12 @@ implement {
implement {
name = "storeregister",
- actions = function(rawdata)
- local nofentries = storeregister(rawdata)
- setinternalreference { internal = rawdata.references.internal }
- context(nofentries)
- end,
+ -- actions = function(rawdata)
+ -- local nofentries = storeregister(rawdata)
+ -- setinternalreference { internal = rawdata.references.internal }
+ -- context(nofentries)
+ -- end,
+ actions = { storeregister, context },
arguments = {
{
{ "metadata", {
@@ -669,6 +675,7 @@ implement {
{ "references", {
{ "internal", "integer" },
{ "section", "integer" },
+ { "view" },
{ "label" }
}
},
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-reg.mkiv
index 138a1486f3e..1d28db8dfed 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-reg.mkiv
@@ -108,7 +108,6 @@
\c!entries=,
\c!alternative=]
-
\definemixedcolumns
[\v!register]
[\c!n=\registerparameter\c!n,
@@ -269,6 +268,7 @@
\ifx\currentregisterlabel\empty \else
label {\currentregisterlabel}%
\fi
+% view {\interactionparameter\c!focus}%
}%
entries {%
% we need a special one for xml, this is just a single one
@@ -293,7 +293,10 @@
}%
userdata {\detokenize\expandafter{\normalexpanded{#3}}}
}%
- % \clf_setinternalreference internal \nextinternalreference\relax % in previous
+ \clf_setinternalreference
+ internal \nextinternalreference
+ view {\interactionparameter\c!focus}%
+ \relax % this will change
\ifx\currentregisterownnumber\v!yes
\glet\currentregistersynchronize\relax
\else
@@ -328,6 +331,10 @@
}%
}%
% overlap with the above
+ % \clf_setinternalreference
+ % internal \nextinternalreference
+ % view {\interactionparameter\c!focus}%
+ \relax % this will change
\xdef\currentregistersynchronize{\ctxlatecommand{enhanceregister("\currentregister",\currentregisternumber)}}%
\currentregistersynchronize % here?
\dostarttagged\t!registerlocation\currentregister
@@ -465,7 +472,7 @@
{\doflushatpar{\strc_registers_register_page_entry{#1}{\c!label=#2,#3}{#4}}}
\def\strc_registers_stop[#1][#2]%
- {\normalexpanded{\ctxlatelua{structures.registers.extend("#1","#2")}}}
+ {\normalexpanded{\ctxlatecommand{structures.registers.extend("#1","#2")}}}
% So far.
@@ -494,14 +501,13 @@
\fi
\setnextinternalreference
% we could consider storing register entries in list
- \edef\temp{\clf_storeregister{
+ \edef\temp{\clf_storeregister{% \temp grabs the nofentries
metadata {%
kind {see}%
name {\currentregister}%
}%
references {%
- % internal = \nextinternalreference,
- % section = structures.sections.currentid(),
+% view {\interactionparameter\c!focus}%
}%
entries {%
% we need a special one for xml, this is just a single one
@@ -512,6 +518,10 @@
text {\currentregisterseeword}%
}%
}}%
+ \clf_setinternalreference
+ internal \nextinternalreference
+ view {\interactionparameter\c!focus}%
+ \relax % this will change
\dostarttagged\t!registerlocation\currentregister
\attribute\destinationattribute\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup
\dotagregisterlocation
@@ -574,8 +584,12 @@
\endgroup
\fi}
+\newconditional\c_strc_registers_text_interaction
+
\def\strc_registers_place_indeed
- {\clf_processregister
+ {\doifelse{\registerparameter\c!interaction}\v!text
+ \settrue\setfalse\c_strc_registers_text_interaction
+ \clf_processregister
{\currentregister}%
{%
language {\registerparameter\s!language}%
@@ -838,10 +852,18 @@
\unexpanded\def\registeronepagerangeseparator
{|\endash|} % todo use \prewordbreak
-\def\withregisterpagecommand#1#2#3#4%
+% \unexpanded\def\withregisterpagecommand#1#2#3#4%
+% {\def\currentregisterpageindex{#2}%
+% \iflocation
+% \goto{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]%
+% \else
+% \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}%
+% \fi}
+
+\unexpanded\def\withregisterpagecommand#1#2#3#4%
{\def\currentregisterpageindex{#2}%
\iflocation
- \goto{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]%
+ \strc_references_goto_internal{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[#2]%
\else
\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}%
\fi}
@@ -866,13 +888,27 @@
\dostoptagged
\dostoptagged}
+% \unexpanded\def\defaultregisterentry#1#2#3#4% #1:processor #2:internal #3:seeindex #4:word
+% {\def\currentregisterpageindex{#2}%
+% \iflocation
+% \def\currentregisterseeindex{#3}%
+% \doifelse{\registerparameter\c!interaction}\v!text
+% {\directgoto{\setlocationcolor\doapplyregisterentrycommand{#1}{#4}}[internal(#2)]}
+% {\doapplyregisterentrycommand{#1}{#4}}%
+% \else
+% \let\currentregisterseeindex\empty
+% \doapplyregisterentrycommand{#1}{#4}%
+% \fi}
+
\unexpanded\def\defaultregisterentry#1#2#3#4% #1:processor #2:internal #3:seeindex #4:word
{\def\currentregisterpageindex{#2}%
\iflocation
\def\currentregisterseeindex{#3}%
- \doifelse{\registerparameter\c!interaction}\v!text
- {\directgoto{\setlocationcolor\doapplyregisterentrycommand{#1}{#4}}[internal(#2)]}
- {\doapplyregisterentrycommand{#1}{#4}}%
+ \ifconditional\c_strc_registers_text_interaction
+ \strc_references_goto_internal{\setlocationcolor\doapplyregisterentrycommand{#1}{#4}}[internal(#2)]%
+ \else
+ \doapplyregisterentrycommand{#1}{#4}%
+ \fi
\else
\let\currentregisterseeindex\empty
\doapplyregisterentrycommand{#1}{#4}%
@@ -887,13 +923,22 @@
\applyprocessor{#1}{\registerparameter\c!textcommand{\limitedregisterentry{\registerparameter\c!deeptextcommand{#2}}}}%
\dostoptagged}
+% \unexpanded\def\doapplyregisterseecommand#1#2%
+% {\ifx\currentregisterseeindex\empty
+% % \dontleavehmode
+% \applyprocessor{#1}{#2}%
+% \else
+% \goto{\applyprocessor{#1}{#2}}[seeindex:\currentregisterseeindex]%
+% \fi}
+
\unexpanded\def\doapplyregisterseecommand#1#2%
{\ifx\currentregisterseeindex\empty
- % \dontleavehmode
\applyprocessor{#1}{#2}%
+ \else\iflocation
+ \strc_references_goto_internal{\applyprocessor{#1}{#2}}[seeindex:\currentregisterseeindex]%
\else
- \goto{\applyprocessor{#1}{#2}}[seeindex:\currentregisterseeindex]%
- \fi}
+ \applyprocessor{#1}{#2}%
+ \fi\fi}
\unexpanded\def\defaultregisterseeword#1#2#3#4#5#6% i n #3:processor #4:internal #5:seeindex #6:word
{\registerpageseparator
diff --git a/Master/texmf-dist/tex/context/base/strc-ren.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-ren.mkiv
index 34903dfa02a..6bdd05de96f 100644
--- a/Master/texmf-dist/tex/context/base/strc-ren.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-ren.mkiv
@@ -99,13 +99,13 @@
{\edef\currentheadinteraction{\headparameter\c!interaction}%
\ifx\currentheadinteraction\v!list
% setuphead[<section>][interaction=list,...]
- \strc_references_get_simple_page_reference{bck:\nextinternalreference}%
+ \strc_references_get_simple_reference{*\nextinternalreference}%
\let\currentstructurereferenceattribute\currentreferenceattribute
\else\ifx\currentheadinteraction\v!reference
% setuphead[<section>][interaction=reference,...] start<section>[backreference=abc,...]
\edef\currentheadbackreference{\structurevariable\c!backreference}% weird, was references.backreference
\ifx\currentheadbackreference\empty \else
- \strc_references_get_simple_page_reference\currentheadbackreference
+ \strc_references_get_simple_reference\currentheadbackreference
\let\currentstructurereferenceattribute\currentreferenceattribute
\fi
\else
@@ -118,14 +118,14 @@
\unexpanded\def\strc_rendering_place_head_text
{\strc_rendering_start_placement
\setheadmarking
- \doresettructureheadnumbercontent
+ \doresetstructureheadnumbercontent
\ifconditional\c_strc_sectioning_empty
\setbox\b_strc_rendering_head\hbox \headreferenceattributes to \zeropoint{\strut}%
\else
\docheckheadreference
\setbox\b_strc_rendering_head\hbox \headreferenceattributes
{\spac_grids_set_local_snapping{\headparameter\c!internalgrid}%
- \doresettructureheadnumbercontent
+ \doresetstructureheadnumbercontent
\useheadstyleparameter\c!style
\setinlineheadreferenceattributes
\strc_rendering_inject_text}%
@@ -136,8 +136,8 @@
{\strc_rendering_start_placement
\setheadmarking
\doifelsetext\getheadnumber
- \dosettructureheadnumbercontent
- \doresettructureheadnumbercontent
+ \dosetstructureheadnumbercontent
+ \doresetstructureheadnumbercontent
\ifconditional\c_strc_sectioning_empty
\setbox\b_strc_rendering_head\hbox \headreferenceattributes to \zeropoint{\strut}%
\else % = needed
@@ -486,7 +486,8 @@
\strc_rendering_initialize_style_and_color\c!textstyle\c!textcolor
\headparameter\c!commandbefore\relax
\ifcsname\currentheadhash\c!deeptextcommand\endcsname
- \expandafter\let\expandafter\deepstructuretitlecommand\csname\currentheadhash\c!deeptextcommand\endcsname
+ %\expandafter\let\expandafter\deepstructuretitlecommand\csname\currentheadhash\c!deeptextcommand\endcsname
+ \expandafter\let\expandafter\deepstructuretitlecommand\lastnamedcs
\fi
\ifconditional\headisdisplay
% struts can be nilled with \setnostrut
@@ -506,7 +507,8 @@
{\begingroup
\strc_rendering_initialize_style_and_color\c!numberstyle\c!numbercolor
\ifcsname\currentheadhash\c!deepnumbercommand\endcsname
- \expandafter\let\expandafter\deepstructurenumbercommand\csname\currentheadhash\c!deepnumbercommand\endcsname
+ %\expandafter\let\expandafter\deepstructurenumbercommand\csname\currentheadhash\c!deepnumbercommand\endcsname
+ \expandafter\let\expandafter\deepstructurenumbercommand\lastnamedcs
\fi
\ifconditional\headisdisplay
% can be nilled with \setnostrut
@@ -698,7 +700,7 @@
\headnumbercontent
\par
\else
- \fakeheadnumbercontent % will also be done in the other ones (force consistency with numbered)
+ \fakeheadnumbercontent
\fi
\begstrut
\headtextcontent
diff --git a/Master/texmf-dist/tex/context/base/strc-rsc.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-rsc.lua
index 627e443b2ce..627e443b2ce 100644
--- a/Master/texmf-dist/tex/context/base/strc-rsc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-rsc.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-sbe.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-sbe.mkiv
index 9f1d214cfda..9f1d214cfda 100644
--- a/Master/texmf-dist/tex/context/base/strc-sbe.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-sbe.mkiv
diff --git a/Master/texmf-dist/tex/context/base/strc-sec.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-sec.mkiv
index b5a1a5ba011..c78cffbffaf 100644
--- a/Master/texmf-dist/tex/context/base/strc-sec.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-sec.mkiv
@@ -299,7 +299,7 @@
% lua interface / names and interface might change
-\newconditional\c_strc_rendering_continuous % not used (mkii ?)
+% \newconditional\c_strc_rendering_continuous % not used (mkii ?)
\def\setstructurelevel #1#2{\clf_setstructurelevel {#1}{#2}} % name, level|parent
\def\getstructurelevel #1{\clf_getstructurelevel {#1}} % name
@@ -453,6 +453,10 @@
\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
\doifelse{\headparameter\c!ownnumber}\v!yes
{\setuevalue\currenthead{\strc_sectioning_handle_own[\currenthead]}}
@@ -667,7 +671,7 @@
\unexpanded\def\strc_sectioning_initialize_increment
{\edef\currentheadincrement{\headparameter\c!incrementnumber}%
\ifcsname\??headincrement\currentheadincrement\endcsname
- \csname\??headincrement\currentheadincrement\endcsname
+ \lastnamedcs
\else
\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list
% \filterheadnumber
@@ -706,11 +710,11 @@
\newmode\v!sectionnumber
-\def\dosettructureheadnumbercontent
+\def\dosetstructureheadnumbercontent
{\setsystemmode\v!sectionnumber
\settrue\headshownumber} % why ?
-\def\doresettructureheadnumbercontent
+\def\doresetstructureheadnumbercontent
{\resetsystemmode\v!sectionnumber
\setfalse\headshownumber} % why ?
@@ -893,7 +897,7 @@
\fi\fi
\fi
\flushingcolumnfloatstrue
- \setfalse\c_strc_sectioniong_ignore_page
+ \setfalse\c_strc_sectioning_ignore_page
% ignorespaces prevents spaces creeping in when after=\dontleavehmode
\dostarttagged\t!sectioncontent\empty
\ifconditional\headisdisplay
@@ -988,14 +992,14 @@
\doifelselayouttextline\v!footer{\normalexpanded{\setuplayouttext[\v!footer][\c!state=\p_footer]}}\donothing
\fi}
-\newcount \c_strc_sectioniong_preceding_level \c_strc_sectioniong_preceding_level\plusone
+\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_sectioniong_ignore_page
-\newsignal \s_strc_sectioniong_continuous_signal
+\newconditional\c_strc_sectioning_ignore_page
+\newsignal \s_strc_sectioning_continuous_signal
\unexpanded\def\strc_sectioning_inject_continuous_signal
{\ifhmode
- \hskip\s_strc_sectioniong_continuous_signal\relax
+ \hskip\s_strc_sectioning_continuous_signal\relax
\fi}
% \let\dotagsectionlevel\relax
@@ -1038,63 +1042,84 @@
{\ifhmode
\scratchcounter\lastpenalty
\unpenalty % no beauty in this
- \ifdim\lastskip=\s_strc_sectioniong_continuous_signal
+ \ifdim\lastskip=\s_strc_sectioning_continuous_signal
% no page break
- \ifconditional\c_strc_sectioniong_ignore_page
- \setfalse\c_strc_sectioniong_ignore_page
+ \ifconditional\c_strc_sectioning_ignore_page
+ \setfalse\c_strc_sectioning_ignore_page
\else
- \global\c_strc_sectioniong_preceding_level\currentheadlevel
+ \global\c_strc_sectioning_preceding_level\currentheadlevel
\nobreak
\fi
- \global\settrue\c_strc_rendering_continuous
+ % \global\settrue\c_strc_rendering_continuous
\else
\penalty\scratchcounter
- \global\setfalse\c_strc_rendering_continuous
+ % \global\setfalse\c_strc_rendering_continuous
#1%
\fi
\else
- \global\setfalse\c_strc_rendering_continue
+ % \global\setfalse\c_strc_rendering_continuous
#1%
\fi}
\def\currentsectioncountervalue {\clf_depthnumber\numexpr\thenamedheadlevel\currenthead\relax}
\def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead+\minusone\relax}
+% \def\strc_sectioning_handle_page_nop
+% {\edef\p_continue{\headparameter\c!continue}%
+% \ifx\p_continue\v!yes
+% \ifnum\previoussectioncountervalue=\zerocount
+% \strc_sectioning_check_layout
+% \else\ifnum\currentsectioncountervalue>\zerocount
+% \strc_sectioning_check_layout
+% \fi\fi
+% \else
+% \strc_sectioning_check_layout
+% \fi}
+
+\def\currentsectioncountervalue {\clf_depthnumber\numexpr\thenamedheadlevel\currenthead\relax}
+%def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead+\minusone\relax}
+\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
- \ifnum\previoussectioncountervalue=\zerocount
- \strc_sectioning_check_layout
+ \ifx\currenthead\previoushead % not really needed
+ \strc_sectioning_check_layout
+ \else\ifnum\previoussectioncountervalue=\zerocount
+ \strc_sectioning_check_layout
\else\ifnum\currentsectioncountervalue>\zerocount
- \strc_sectioning_check_layout
- \fi\fi
+ \strc_sectioning_check_layout
+ \fi\fi\fi
\else
\strc_sectioning_check_layout
- \fi}
+ \fi
+ \globallet\previoushead\currenthead}
\def\strc_sectioning_handle_page_yes
- {%[[\currenthead @\thenamedheadlevel\currenthead/prev:\previoussectioncountervalue/curr:\currentsectioncountervalue]]
- \ifconditional\c_strc_sectioniong_ignore_page
- \setfalse\c_strc_sectioniong_ignore_page
+ {\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
- \vspacing[\v!samepage-\currentheadlevel]%
-\fi
+ \ifconditional\c_strc_sectioning_auto_break
+ \vspacing[\v!samepage-\currentheadlevel]%
+ \fi
\headparameter\c!before\relax
\indent
\else
\page_otr_command_flush_side_floats
-\ifconditional\c_strc_sectioning_auto_break
- \vspacing[\v!samepage-\currentheadlevel]%
-\fi
+ \ifconditional\c_strc_sectioning_auto_break
+ \vspacing[\v!samepage-\currentheadlevel]%
+ \fi
\headparameter\c!before\relax
\fi
- \global\c_strc_sectioniong_preceding_level\currentheadlevel
- \fi}
+ \global\c_strc_sectioning_preceding_level\currentheadlevel
+ \fi
+ \globallet\previoushead\currenthead}
\unexpanded\def\strc_sectioning_prevent_page_break#1% see strc-con
{\ifconditional\c_strc_sectioning_auto_break
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-syn.lua
index 5f3557a6958..5f3557a6958 100644
--- a/Master/texmf-dist/tex/context/base/strc-syn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-syn.lua
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-syn.mkiv
index b206f8069ba..72c94d069df 100644
--- a/Master/texmf-dist/tex/context/base/strc-syn.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-syn.mkiv
@@ -274,16 +274,18 @@
{\begingroup
\edef\currentsynonym{#2}%
\edef\currentsynonymtag{#3}%
- \let\currentsimplelist\currentsimplelist
+ \let\currentsimplelist\currentsynonym
\ifx\currentsynonymtag\empty
\edef\currentsynonymtag{#4}%
\fi
\ifx\currentsynonymtag\empty
% todo: error message
\else
+ % this is not that efficient, esp when we load a big list
\edef\currentsynonymexpansion{\simplelistparameter\c!expansion}%
\preprocessexpansion\currentsynonymexpansion\m_synonyms_text \currentsynonymcoding{#4}%
\preprocessexpansion\currentsynonymexpansion\m_synonyms_meaning\currentsynonymcoding{#5}%
+ %
\clf_registersynonym
{\currentsynonym}%
{synonym}%
@@ -320,6 +322,9 @@
\unexpanded\def\resetusedsynonyms [#1]{\clf_resetusedsynonyms {#1}}
\unexpanded\def\resetshownsynonyms [#1]{\clf_resetshownsynonyms {#1}}
+\let\rawsynonymname \clf_synonymname
+\let\rawsynonymmeaning\clf_synonymmeaning
+
\installcorenamespace{simplelistalternative} % specific ways of rendering a list
\installcorenamespace{simplelistrenderings} % a namespace for setups (rather local)
@@ -342,6 +347,8 @@
\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}}
@@ -548,9 +555,17 @@
\def \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
diff --git a/Master/texmf-dist/tex/context/base/strc-tag.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-tag.lua
index 637d74e8c08..8f2e1897810 100644
--- a/Master/texmf-dist/tex/context/base/strc-tag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-tag.lua
@@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['strc-tag'] = {
-- end of the chain tag) or by so called fullname which is a tagname combined with a number.
local type, next = type, next
-local insert, remove, unpack, concat = table.insert, table.remove, table.unpack, table.concat
+local insert, remove, unpack, concat, merge = table.insert, table.remove, table.unpack, table.concat, table.merge
local find, topattern, format = string.find, string.topattern, string.format
local lpegmatch, P, S, C, Cc = lpeg.match, lpeg.P, lpeg.S, lpeg.C, lpeg.Cc
local texattribute = tex.attribute
@@ -45,6 +45,7 @@ local tagpatterns = { }
local lasttags = { }
local stacksize = 0
local metadata = nil -- applied to the next element
+local documentdata = { }
local tags = structures.tags
tags.taglist = taglist -- can best be hidden
@@ -127,7 +128,11 @@ local properties = allocate {
delimitedblock = { pdf = "BlockQuote", nature = "display" },
delimited = { pdf = "Quote", nature = "inline" },
+ delimitedcontent = { pdf = "Span", nature = "inline" },
+ delimitedsymbol = { pdf = "Span", nature = "inline" },
subsentence = { pdf = "Span", nature = "inline" },
+ subsentencecontent = { pdf = "Span", nature = "inline" },
+ subsentencesymbol = { pdf = "Span", nature = "inline" },
label = { pdf = "Span", nature = "mixed" },
number = { pdf = "Span", nature = "mixed" },
@@ -266,10 +271,14 @@ end
function tags.registermetadata(data)
local d = settings_to_hash(data)
- if metadata then
- table.merge(metadata,d)
+ if #chain > 1 then
+ if metadata then
+ merge(metadata,d)
+ else
+ metadata = d
+ end
else
- metadata = d
+ merge(documentdata,d)
end
end
@@ -331,6 +340,10 @@ function tags.start(tag,specification)
taglist[attribute] = specification
specifications[completetag] = specification
--
+ if completetag == "document>1" then
+ specification.metadata = documentdata
+ end
+ --
texattribute[a_tagged] = attribute
return attribute
end
@@ -498,6 +511,6 @@ implement {
implement {
name = "settaggedmetadata",
- actions = structures.tags.registermetadata,
+ actions = tags.registermetadata,
arguments = "string"
}
diff --git a/Master/texmf-dist/tex/context/base/strc-tag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-tag.mkiv
index f2b59c29c2d..c9132bf0493 100644
--- a/Master/texmf-dist/tex/context/base/strc-tag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-tag.mkiv
@@ -109,7 +109,11 @@
\def\t!delimitedblock {delimited} % BlockQuote
\def\t!delimited {delimited} % Quote
+\def\t!delimitedsymbol {delimitedsymbol} % Span
+\def\t!delimitedcontent {delimitedcontent} % Span
\def\t!subsentence {subsentence} % Span
+\def\t!subsentencecontent {subsentencecontent} % Span
+\def\t!subsentencesymbol {subsentencesymbol} % Span
\def\t!float {float} % Div
\def\t!floatcaption {floatcaption} % Caption
@@ -262,6 +266,11 @@
\let\strc_tags_start_nop_chained \gobblethreearguments
\let\strc_tags_stop_nop \donothing
+\def\strc_tags_start_yes_ignore{\clf_starttag{\t!ignore}}
+\let\strc_tags_stop_yes_ignore \strc_tags_stop_yes
+\let\strc_tags_start_nop_ignore\donothing
+\let\strc_tags_stop_nop_ignore \donothing
+
% more efficient:
% \dostarttagged % {tag} {detail}
@@ -276,13 +285,17 @@
{\let\dostarttagged \strc_tags_enabled_start_detail
\let\dostarttaggednodetail\strc_tags_enabled_start_no_detail
\let\dostarttaggedchained \strc_tags_enabled_start_chained
- \let\dostoptagged \strc_tags_enabled_stop}
+ \let\dostoptagged \strc_tags_enabled_stop
+ \let\dostartignoretagging \strc_tags_start_yes_ignore
+ \let\dostopignoretagging \strc_tags_stop_yes_ignore}
\unexpanded\def\strc_tags_disable
{\let\dostarttagged \strc_tags_start_nop_detail
\let\dostarttaggednodetail\strc_tags_start_nop_no_detail
\let\dostarttaggedchained \strc_tags_start_nop_chained
- \let\dostoptagged \strc_tags_stop_nop}
+ \let\dostoptagged \strc_tags_stop_nop
+ \let\dostartignoretagging \strc_tags_start_nop_ignore
+ \let\dostopignoretagging \strc_tags_stop_nop_ignore}
% for luigi (beware: fully expandable):
@@ -434,6 +447,16 @@
\strc_tags_disable
\to \everybeforepagebody
+%D This will only work well with sane use.
+
+\appendtoks
+ \dostartignoretagging
+\to \everybeforepagebody
+
+\appendtoks
+ \dostopignoretagging
+\to \everyafterpagebody
+
% \doifelseinelement{structure:section} {yes} {no}
% \doifelseinelement{structure:chapter} {yes} {no}
% \doifelseinelement{division:*-structure:chapter} {yes} {no}
diff --git a/Master/texmf-dist/tex/context/base/strc-xml.mkiv b/Master/texmf-dist/tex/context/base/mkiv/strc-xml.mkiv
index 3f9b4ef811d..3f9b4ef811d 100644
--- a/Master/texmf-dist/tex/context/base/strc-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/strc-xml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/supp-box.lua b/Master/texmf-dist/tex/context/base/mkiv/supp-box.lua
index 7cc71a891dd..d3a4f57e54b 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-box.lua
@@ -12,59 +12,66 @@ local lpegmatch = lpeg.match
local report_hyphenation = logs.reporter("languages","hyphenation")
-local tex = tex
-local context = context
-local nodes = nodes
-
-local implement = interfaces.implement
-
-local splitstring = string.split
-
-local nodecodes = nodes.nodecodes
-
-local disc_code = nodecodes.disc
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-local glue_code = nodecodes.glue
-local kern_code = nodecodes.kern
-local glyph_code = nodecodes.glyph
-
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-local tonode = nuts.tonode
-
-local getfield = nuts.getfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getlist = nuts.getlist
-local getattribute = nuts.getattribute
-local getbox = nuts.getbox
-
-local setfield = nuts.setfield
-local setbox = nuts.setbox
-
-local free_node = nuts.free
-local flush_list = nuts.flush_list
-local copy_node = nuts.copy
-local copy_list = nuts.copy_list
-local find_tail = nuts.tail
-local traverse_id = nuts.traverse_id
-local link_nodes = nuts.linked
-
-local listtoutf = nodes.listtoutf
-
-local nodepool = nuts.pool
-local new_penalty = nodepool.penalty
-local new_hlist = nodepool.hlist
-local new_glue = nodepool.glue
-local new_rule = nodepool.rule
-local new_kern = nodepool.kern
-
-local setlistcolor = nodes.tracers.colors.setlist
-
-local texget = tex.get
-local texgetbox = tex.getbox
+local tex = tex
+local context = context
+local nodes = nodes
+
+local implement = interfaces.implement
+
+local splitstring = string.split
+
+local nodecodes = nodes.nodecodes
+
+local disc_code = nodecodes.disc
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local glue_code = nodecodes.glue
+local kern_code = nodecodes.kern
+local glyph_code = nodecodes.glyph
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+
+local getfield = nuts.getfield
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getdisc = nuts.getdisc
+local getid = nuts.getid
+local getlist = nuts.getlist
+local getattribute = nuts.getattribute
+local getbox = nuts.getbox
+
+local setfield = nuts.setfield
+local setlink = nuts.setlink
+local setboth = nuts.setboth
+local setnext = nuts.setnext
+local setbox = nuts.setbox
+local setlist = nuts.setlist
+
+local free_node = nuts.free
+local flush_list = nuts.flush_list
+local copy_node = nuts.copy
+local copy_list = nuts.copy_list
+local find_tail = nuts.tail
+local traverse_id = nuts.traverse_id
+local link_nodes = nuts.linked
+local dimensions = nuts.dimensions
+
+local listtoutf = nodes.listtoutf
+
+local nodepool = nuts.pool
+local new_penalty = nodepool.penalty
+local new_hlist = nodepool.hlist
+local new_glue = nodepool.glue
+local new_rule = nodepool.rule
+local new_kern = nodepool.kern
+
+local setlistcolor = nodes.tracers.colors.setlist
+
+local texget = tex.get
+local texgetbox = tex.getbox
+local texsetdimen = tex.setdimen
local function hyphenatedlist(head,usecolor)
local current = head and tonut(head)
@@ -73,9 +80,7 @@ local function hyphenatedlist(head,usecolor)
local next = getnext(current)
local prev = getprev(current)
if id == disc_code then
- local pre = getfield(current,"pre")
- local post = getfield(current,"post")
- local replace = getfield(current,"replace")
+ local pre, post, replace = getdisc(current)
if pre then
setfield(current,"pre",nil)
end
@@ -97,8 +102,7 @@ local function hyphenatedlist(head,usecolor)
setfield(current,"replace",nil)
end
-- setfield(current,"replace",new_rule(65536)) -- new_kern(65536*2))
- setfield(current,"next",nil)
- setfield(current,"prev",nil)
+ setboth(current)
local list = link_nodes (
pre and new_penalty(10000),
pre,
@@ -108,12 +112,10 @@ local function hyphenatedlist(head,usecolor)
)
local tail = find_tail(list)
if prev then
- setfield(prev,"next",list)
- setfield(list,"prev",prev)
+ setlink(prev,list)
end
if next then
- setfield(tail,"next",next)
- setfield(next,"prev",tail)
+ setlink(tail,next)
end
-- free_node(current)
elseif id == vlist_code or id == hlist_code then
@@ -313,12 +315,10 @@ implement {
if head then
if inbetween > 0 then
local n = new_glue(0,0,inbetween)
- setfield(tail,"next",n)
- setfield(n,"prev",tail)
+ setlink(tail,n)
tail = n
end
- setfield(tail,"next",list)
- setfield(list,"prev",tail)
+ setlink(tail,list)
else
head = list
end
@@ -329,9 +329,8 @@ implement {
local prev = getprev(tail)
if next then
local list = getlist(tail)
- setfield(prev,"next",list)
- setfield(list,"prev",prev)
- setfield(tail,"list",nil)
+ setlink(prev,list)
+ setlist(tail)
tail = find_tail(list)
else
tail = prev
@@ -339,13 +338,13 @@ implement {
free_node(temp)
end
-- done
- setfield(tail,"next",nil)
- setfield(current,"list",nil)
+ setnext(tail)
+ setlist(current)
end
current = next
end
local result = new_hlist()
- setfield(result,"list",head)
+ setlist(result,head)
setbox(target,result)
end
}
@@ -368,3 +367,54 @@ implement {
context.puretext(nodes.toutf(texgetbox(n).list)) -- helper is defined later
end
}
+
+local function getnaturaldimensions(n)
+ local w, h, d = 0, 0, 0
+ local l = getlist(getbox(n))
+ if l then
+ w, h, d = dimensions(l)
+ end
+ texsetdimen("lastnaturalboxwd",w)
+ texsetdimen("lastnaturalboxht",h)
+ texsetdimen("lastnaturalboxdp",d)
+ return w, h, d
+end
+
+interfaces.implement {
+ name = "getnaturaldimensions",
+ arguments = "integer",
+ actions = getnaturaldimensions
+}
+
+interfaces.implement {
+ name = "naturalwd",
+ arguments = "integer",
+ actions = function(n)
+ getnaturaldimensions(n)
+ context.lastnaturalboxwd(false)
+ end
+}
+
+local function firstdirinbox(n)
+ local b = getbox(n)
+ if b then
+ local l = getlist(b)
+ if l then
+ for h in traverse_id(hlist_code,l) do
+ return getfield(h,"dir")
+ end
+ end
+ end
+end
+
+nodes.firstdirinbox = firstdirinbox
+
+local doifelse = commands.doifelse
+
+interfaces.implement {
+ name = "doifelserighttoleftinbox",
+ arguments = "integer",
+ actions = function(n)
+ doifelse(firstdirinbox(n) == "TRT")
+ end
+}
diff --git a/Master/texmf-dist/tex/context/base/supp-box.mkiv b/Master/texmf-dist/tex/context/base/mkiv/supp-box.mkiv
index 54b0e2860a3..a302076f204 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-box.mkiv
@@ -217,7 +217,7 @@
\unexpanded\def\syst_boxes_math_set_nextbox#1%
{\c_boxes_math_style\mathstyle
- \setbox\nextbox\hbox{$\mathsurround\zeropoint\triggermathstyle\c_boxes_math_style{#1}$}}
+ \setbox\nextbox\hbox{\normalstartimath\mathsurround\zeropoint\triggermathstyle\c_boxes_math_style{#1}\normalstopimath}}
%D \macros
%D {smash}
@@ -281,7 +281,7 @@
\def\syst_boxes_smash_process_option#1%
{\ifx#1\relax\else
- \ifcsname\??smashoptions#1\endcsname\csname\??smashoptions#1\endcsname\fi
+ \begincsname\??smashoptions#1\endcsname
\expandafter\syst_boxes_smash_process_option
\fi}
@@ -726,24 +726,24 @@
%D Some well known friends, but we implement them our own
%D way. We want the macros to work in both math and text mode.
-\def\dodorlap{\hbox to \zeropoint{\box\nextbox\normalhss}\endgroup}
-\def\dodollap{\hbox to \zeropoint{\normalhss\box\nextbox}\endgroup}
-\def\dodoclap{\hbox to \zeropoint{\normalhss\box\nextbox\normalhss}\endgroup}
+\def\dodorlap{\hpack to \zeropoint{\box\nextbox\normalhss}\endgroup}
+\def\dodollap{\hpack to \zeropoint{\normalhss\box\nextbox}\endgroup}
+\def\dodoclap{\hpack to \zeropoint{\normalhss\box\nextbox\normalhss}\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{$\mathsurround\zeropoint#1#2$}}
-\def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{$\mathsurround\zeropoint#1#2$}}
-\def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{$\mathsurround\zeropoint#1#2$}}
+\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}}
\unexpanded\def\rlap{\mathortext\domathrlap\dorlap}
\unexpanded\def\llap{\mathortext\domathllap\dollap}
\unexpanded\def\clap{\mathortext\domathclap\doclap}
-\def\dodotlap{\vbox to \zeropoint{\normalvss\box\nextbox}\endgroup}
-\def\dodoblap{\vbox to \zeropoint{\box\nextbox\normalvss}\endgroup}
+\def\dodotlap{\vpack to \zeropoint{\normalvss\box\nextbox}\endgroup}
+\def\dodoblap{\vpack to \zeropoint{\box\nextbox\normalvss}\endgroup}
\unexpanded\def\tlap{\begingroup\dowithnextboxcs\dodotlap\vbox}
\unexpanded\def\blap{\begingroup\dowithnextboxcs\dodoblap\vbox}
@@ -915,7 +915,7 @@
% We will turn this into a \MKIV\ variant.
\unexpanded\def\insertshapesignal
- {\hbox to \shapesignal{\strut\hss}% plus \strut
+ {\hpack to \shapesignal{\strut\hss}% plus \strut
\prevdepth\strutdp} % never \nointerlineskip
\unexpanded\def\restoreshapebox % compensates for the signal
@@ -1263,7 +1263,7 @@
\fi
\unvbox\nextbox
\setbox\nextbox\lastbox
- \global\setbox1\hbox
+ \global\setbox1\hpack
{\ifdone
\unhbox\nextbox\unskip\kern\zeropoint\box\scratchbox
\else
@@ -1341,7 +1341,7 @@
{\ifx\clip\undefined
\box\plusone
\else\ifdim\wd\plusone>\hsize
- \lower\strutdepth\hbox{\clip[\c!width=\hsize,\c!height=\lineheight]{\hbox{\raise\strutdepth\box\plusone}}}%
+ \lower\strutdepth\hpack{\clip[\c!width=\hsize,\c!height=\lineheight]{\hpack{\raise\strutdepth\box\plusone}}}%
\else
\box\plusone
\fi\fi
@@ -1375,7 +1375,7 @@
\clf_applytobox
method {char}%
box \scratchbox
- command {\checkedstrippedcsname#2}%
+ command {\csstring#2}%
nested true%
\relax
\endgroup}
@@ -1388,7 +1388,7 @@
\clf_applytobox
method {word}%
box \scratchbox
- command {\checkedstrippedcsname#2}%
+ command {\csstring#2}%
nested true%
\relax
\endgroup}
@@ -1400,7 +1400,7 @@
\dowithnextbox{\clf_applytobox
method {char}%
box \nextbox
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
nested true%
\relax}%
\hbox}
@@ -1410,7 +1410,7 @@
\dowithnextbox{\clf_applytobox
method {word}%
box \nextbox
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
nested true%
\relax}%
\hbox}
@@ -1425,28 +1425,28 @@
\unexpanded\def\applytosplitstringchar#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {char}%
\relax}
\unexpanded\def\applytosplitstringword#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {word}%
\relax}
\unexpanded\def\applytosplitstringline#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {line}%
\relax}
\unexpanded\def\applytosplitstringcharspaced#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {char}%
spaced true%
\relax}
@@ -1454,7 +1454,7 @@
\unexpanded\def\applytosplitstringwordspaced#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {word}%
spaced true%
\relax}
@@ -1462,7 +1462,7 @@
\unexpanded\def\applytosplitstringlinespaced#1#2%
{\dontleavehmode\clf_processsplit
data {#2}%
- command {\checkedstrippedcsname#1}%
+ command {\csstring#1}%
method {line}%
spaced true%
\relax}
@@ -1499,7 +1499,7 @@
\dowithnextboxcs\syst_boxes_sbox_finish\vbox}
\unexpanded\def\syst_boxes_sbox_finish
- {\setbox\nextbox\hbox
+ {\setbox\nextbox\hpack
{\strut
\dp\nextbox\zeropoint
\lower\strutdp\box\nextbox}%
@@ -1513,7 +1513,7 @@
\unexpanded\def\inlinedbox
{\bgroup
\dowithnextbox
- {\setbox\nextbox\hbox
+ {\setbox\nextbox\hpack
{\lower
\dimexpr(\htdp\nextbox-\lineheight)/\plustwo+\strutdp\relax
\box\nextbox}%
@@ -1551,7 +1551,7 @@
\def\syst_boxes_topskippedbox_finish
{\edef\m_boxes_tmp{\ifdim\strutdepth=\dp\nextbox\dp\nextbox\the\dp\nextbox\fi}%
- \lower\topskip\hbox{\raise\strutheight\box\nextbox}%
+ \lower\topskip\hpack{\raise\strutheight\box\nextbox}%
\m_boxes_tmp
\egroup}
@@ -1603,7 +1603,7 @@
\unexpanded\def\centeredbox#1#% height +/-dimen width +/-dimen
{\bgroup
- \setbox0\vbox to \vsize
+ \setbox0\vpack to \vsize
\bgroup
\dontcomplain
\forgetall
@@ -1611,11 +1611,11 @@
\setbox2\vbox{\hrule\s!height\zeropoint#1}%
\advance\vsize \ht2
\advance\hsize \wd0
- \vbox to \vsize
+ \vpack to \vsize
\bgroup
\vskip-\ht2
\vss
- \hbox to \hsize
+ \hpack to \hsize
\bgroup
\dowithnextbox
{\hskip-\wd0
@@ -1671,7 +1671,7 @@
\ifzeropt\wd\scratchbox\else\hsize\wd\scratchbox\fi
\setbox\scratchbox\vbox{\hrule\s!height\zeropoint#1}%
\ifzeropt\ht\scratchbox\else\vsize\ht\scratchbox\fi
- \vbox to \vsize{\vss\hbox to \hsize{\hss\box\nextbox\hss}\vss}%
+ \vpack to \vsize{\vss\hpack to \hsize{\hss\box\nextbox\hss}\vss}%
\egroup}%
\hbox}
@@ -1757,7 +1757,7 @@
\setbox0=\box\rigidcolumnbox
\doloop
{\setbox\rigidcolumnbox=\copy0
- \setbox\scratchbox\hbox to \savedrigidhsize
+ \setbox\scratchbox\hpack to \savedrigidhsize
{\dorecurse\rigidcolumns
{\setbox\scratchbox\vsplit\rigidcolumnbox to \scratchdimen
\dp\scratchbox\openstrutdepth
@@ -1772,10 +1772,10 @@
\hfillneg}%
\ifvoid\rigidcolumnbox\exitloop\else\advance\scratchdimen\lineheight\fi}%
\iftightrigidcolumns
- \setbox\scratchbox\hbox{\raise\dp\scratchbox\box\scratchbox}%
+ \setbox\scratchbox\hpack{\raise\dp\scratchbox\box\scratchbox}%
\else
\advance\scratchdimen -\openstrutdepth
- \setbox\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}%
+ \setbox\scratchbox\hpack{\raise\scratchdimen\box\scratchbox}%
\dp\scratchbox\openstrutdepth
\ht\scratchbox\scratchdimen
\fi
@@ -1949,7 +1949,7 @@
\ht\hhbox\strutht
\dp\hhbox\strutdp
\ifzeropt\hhboxindent\else % \ifdim\hhboxindent=\zeropoint\else
- \setbox\hhbox\hbox{\kern-\hhboxindent\box\hhbox}%
+ \setbox\hhbox\hpack{\kern-\hhboxindent\box\hhbox}%
\hhboxindent\zeropoint
\fi
\global\lasthhboxwidth\wd\hhbox
@@ -1962,7 +1962,7 @@
\egroup}
\def\dohboxofvbox
- {\setbox0\vbox{\unvbox\scratchcounter\global\setbox1\lastbox}%
+ {\setbox0\vpack{\unvbox\scratchcounter\global\setbox1\lastbox}%
\unhbox1
\egroup}
@@ -2130,17 +2130,17 @@
{%\removeunwantedspaces % already done
\scratchdepth\dp\ifdim\dp\nextbox>\dp\processbox\nextbox\else\processbox\fi
\ifdim\ht\nextbox>\ht\processbox
- \setbox\processbox\vbox to \ht\nextbox {\dp\processbox\zeropoint\vss\box\processbox\vss}%
+ \setbox\processbox\vpack to \ht\nextbox {\dp\processbox\zeropoint\vss\box\processbox\vss}%
\else
- \setbox\nextbox \vbox to \ht\processbox{\dp\nextbox \zeropoint\vss\box\nextbox \vss}%
+ \setbox\nextbox \vpack to \ht\processbox{\dp\nextbox \zeropoint\vss\box\nextbox \vss}%
\fi
\dp\nextbox \scratchdepth
\dp\processbox\scratchdepth
\scratchwidth\wd\ifdim\wd\nextbox>\wd\processbox\nextbox\else\processbox\fi
- \setbox\processbox\hbox to \scratchwidth
- {\hbox to \scratchwidth{\hss\box\processbox\hss}%
+ \setbox\processbox\hpack to \scratchwidth
+ {\hpack to \scratchwidth{\hss\box\processbox\hss}%
\kern-\scratchwidth
- \hbox to \scratchwidth{\hss\box\nextbox \hss}}}
+ \hpack to \scratchwidth{\hss\box\nextbox \hss}}}
\unexpanded\def\startoverlay
{\bgroup
@@ -2226,7 +2226,7 @@
{\scratchdepth\dimexpr\ht\nextbox+\dp\nextbox-\ht\strutbox\relax
\ht\nextbox\ht\strutbox
\dp\nextbox\scratchdepth
- \setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}%
+ \setbox\nextbox\hpack{\lower\dp\nextbox\box\nextbox}%
\ht\nextbox\ht\strutbox
\dp\nextbox\scratchdepth
\box\nextbox
@@ -2236,7 +2236,7 @@
{\scratchheight\dimexpr\ht\nextbox+\dp\nextbox-\dp\strutbox\relax
\dp\nextbox\dp\strutbox
\ht\nextbox\scratchheight
- \setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}%
+ \setbox\nextbox\hpack{\lower\dp\nextbox\box\nextbox}%
\dp\nextbox\dp\strutbox
\ht\nextbox\scratchheight
\box\nextbox
@@ -2247,9 +2247,9 @@
%D
%D A few more boxes.
-\def\dodolhbox{\hbox to \hsize{\box\nextbox\hss }}
-\def\dodomhbox{\hbox to \hsize{\hss\box\nextbox\hss}}
-\def\dodorhbox{\hbox to \hsize{\hss\box\nextbox }}
+\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 }}
\unexpanded\def\lhbox{\dowithnextboxcs\dodolhbox\hbox}
\unexpanded\def\mhbox{\dowithnextboxcs\dodomhbox\hbox}
@@ -2315,7 +2315,7 @@
\dimen0\ht\nextbox
\ht\nextbox\strutht
\dp\nextbox\strutdp
- \hbox{\box\nextbox}
+ \hpack{\box\nextbox}
\prevdepth\strutdp
\doloop
{\advance\dimen0 -\lineheight
@@ -2323,7 +2323,7 @@
\exitloop
\else
\nobreak
- \hbox{\strut}
+ \hpack{\strut}
\fi}
\egroup}
\vbox}
@@ -2341,7 +2341,7 @@
{\iftraceboxplacement
\bgroup
\scratchdimen2\onepoint
- \setbox\scratchbox\hbox to \zeropoint
+ \setbox\scratchbox\hpack to \zeropoint
{\hss
\vrule
\s!width \scratchdimen
@@ -2361,14 +2361,14 @@
\newdimen\boxhdisplacement
\newdimen\boxvdisplacement
-\unexpanded\def\rightbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_rightbox_finish \placedbox}
-\unexpanded\def\leftbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_leftbox_finish \placedbox}
-\unexpanded\def\topbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_topbox_finish \placedbox}
-\unexpanded\def\bottombox {\hbox\bgroup\dowithnextboxcs\syst_boxes_bottombox_finish \placedbox}
-\unexpanded\def\lefttopbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_lefttopbox_finish \placedbox}
-\unexpanded\def\righttopbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_righttopbox_finish \placedbox}
-\unexpanded\def\leftbottombox {\hbox\bgroup\dowithnextboxcs\syst_boxes_leftbottombox_finish \placedbox}
-\unexpanded\def\rightbottombox{\hbox\bgroup\dowithnextboxcs\syst_boxes_rightbottombox_finish\placedbox}
+\unexpanded\def\rightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbox_finish \placedbox}
+\unexpanded\def\leftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbox_finish \placedbox}
+\unexpanded\def\topbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_topbox_finish \placedbox}
+\unexpanded\def\bottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_bottombox_finish \placedbox}
+\unexpanded\def\lefttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_lefttopbox_finish \placedbox}
+\unexpanded\def\righttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_righttopbox_finish \placedbox}
+\unexpanded\def\leftbottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbottombox_finish \placedbox}
+\unexpanded\def\rightbottombox{\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbottombox_finish\placedbox}
\let\topleftbox \lefttopbox
\let\toprightbox \righttopbox
@@ -2434,10 +2434,10 @@
\boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
\egroup}
-\unexpanded\def\middlebox {\hbox\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish \placedbox}
-\unexpanded\def\baselinemiddlebox{\hbox\bgroup\dowithnextboxcs\syst_boxes_baselinemiddlebox_finish\placedbox}
-\unexpanded\def\baselineleftbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_baselineleftbox_finish \placedbox}
-\unexpanded\def\baselinerightbox {\hbox\bgroup\dowithnextboxcs\syst_boxes_baselinerightbox_finish \placedbox}
+\unexpanded\def\middlebox {\hpack\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish \placedbox}
+\unexpanded\def\baselinemiddlebox{\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinemiddlebox_finish\placedbox}
+\unexpanded\def\baselineleftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselineleftbox_finish \placedbox}
+\unexpanded\def\baselinerightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinerightbox_finish \placedbox}
\def\syst_boxes_middlebox_finish
{\global\boxhdisplacement-.5\wd\nextbox
@@ -2476,7 +2476,7 @@
\dowithnextboxcontent
{\advance\hsize-#1\advance\hsize-#2\relax
\advance\vsize-#3\advance\vsize-#4\relax}
- {\forgetall\vbox to \vsize{\vskip#3\hbox to \hsize{\hskip#1\box\nextbox\hss}\vss}\egroup}
+ {\forgetall\vpack to \vsize{\vskip#3\hpack to \hsize{\hskip#1\box\nextbox\hss}\vss}\egroup}
\vbox}
%D \macros
@@ -2518,6 +2518,8 @@
%D \hbox{y:\foundbox{two}{a}} \par
%D \stoptyping
+%D Kind of obsolete:
+
\installcorenamespace {stackbox}
\installcorenamespace {stacklst}
@@ -2530,7 +2532,7 @@
\unexpanded\def\initializeboxstack#1%
{\def\docommand##1{\setstackbox{#1}{##1}{}}%
\ifcsname\??stacklst#1\endcsname
- \processcommacommand[\getvalue{\??stacklst#1}]\docommand
+ \expandafter\processcommacommand\expandafter[\lastnamedcs]\docommand
\fi
\letgvalueempty{\??stacklst#1}}
@@ -2538,28 +2540,32 @@
{% beware, \setxvalue defines the cs beforehand so we cannot use the
% test inside the { }
\ifcsname\??stacklst#1\endcsname
- \setxvalue{\??stacklst#1}{\csname\??stacklst#1\endcsname,#2}%
+ %\setxvalue{\??stacklst#1}{\csname\??stacklst#1\endcsname,#2}%
+ \expandafter\xdef\csname\??stacklst#1\expandafter\endcsname\expandafter{\lastnamedcs,#2}%
\else
- \setxvalue{\??stacklst#1}{#2}%
+ \expandafter\xdef\csname\??stacklst#1\endcsname{#2}%
\fi
\setstackbox{#1}{#2}}
\unexpanded\def\restorebox#1#2% unwrapped
{\ifcsname\??stackbox#1:#2\endcsname
- \copy\csname\??stackbox#1:#2\endcsname
+ %\copy\csname\??stackbox#1:#2\endcsname
+ \copy\lastnamedcs
\else
\emptybox
\fi}
\unexpanded\def\foundbox#1#2% wrapped
- {\vbox
+ {\vpack
{\ifcsname\??stackbox#1:#2\endcsname
- \copy\csname\??stackbox#1:#2\endcsname
+ %\copy\csname\??stackbox#1:#2\endcsname
+ \copy\lastnamedcs
\fi}}
\unexpanded\def\doifelsebox#1#2#3#4%
{\ifcsname\??stackbox#1:#2\endcsname
- \ifvoid\csname\??stackbox#1:#2\endcsname#4\else#3\fi
+ %\ifvoid\csname\??stackbox#1:#2\endcsname#4\else#3\fi
+ \ifvoid\lastnamedcs#4\else#3\fi
\else
#4%
\fi}
@@ -2665,14 +2671,14 @@
\def\syst_boxes_lower_indeed{\dowithnextboxcs\syst_boxes_lower_finish}
\def\syst_boxes_raise_finish
- {\setbox\nextbox\hbox{\raise\scratchdimen\box\nextbox}%
+ {\setbox\nextbox\hpack{\raise\scratchdimen\box\nextbox}%
\ht\nextbox\strutht
\dp\nextbox\strutdp
\box\nextbox
\egroup}
\def\syst_boxes_lower_finish
- {\setbox\nextbox\hbox{\lower\scratchdimen\box\nextbox}%
+ {\setbox\nextbox\hpack{\lower\scratchdimen\box\nextbox}%
\ht\nextbox\strutht
\dp\nextbox\strutdp
\box\nextbox
@@ -2712,9 +2718,10 @@
\ifdefined\textdir
- \unexpanded\def\naturalhbox{\hbox dir TLT}
- \unexpanded\def\naturalvbox{\vbox dir TLT}
- %\unexpanded\def\naturalvtop{\normalvtop dir TLT}
+ \unexpanded\def\naturalhbox {\hbox dir TLT}
+ \unexpanded\def\naturalvbox {\vbox dir TLT}
+ \unexpanded\def\naturalhpack{\hpack dir TLT}
+ \unexpanded\def\naturalvpack{\vpack dir TLT}
\fi
@@ -2728,7 +2735,7 @@
\dowithnextboxcs\syst_boxes_vcenter_finish\vbox}
\def\syst_boxes_vcenter_finish
- {\hbox{$\normalvcenter{\box\nextbox}$}%
+ {\hpack{\normalstartimath\normalvcenter{\box\nextbox}\normalstopimath}%
\egroup}
% could be \everymathematics
@@ -2748,7 +2755,7 @@
\dowithnextboxcs\syst_boxes_frozenhbox_finish\hbox}
\def\syst_boxes_frozenhbox_finish
- {\hbox{\hbox{\box\nextbox}}%
+ {\hpack{\hpack{\box\nextbox}}%
\egroup}
%D \macros
@@ -2765,8 +2772,10 @@
\unexpanded\def\gsetboxllx#1#2{\expandafter\xdef\csname\??box_x\number#1\endcsname{\the\dimexpr#2\relax}}
\unexpanded\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\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}
\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
@@ -2831,7 +2840,7 @@
\unexpanded\def\minimalhbox#1#%
{\dowithnextbox
{\bgroup
- \setbox\scratchbox\hbox#1{\hss}%
+ \setbox\scratchbox\hpack#1{\hss}%
\ifdim\wd\nextbox<\wd\scratchbox\wd\nextbox\wd\scratchbox\fi
\box\nextbox
\egroup}
@@ -2854,6 +2863,29 @@
\let\hyphenatedhbox\hbox
+%D We can do this:
+%D
+%D \starttyping
+%D \setbox0\hbox to 10cm{foo} \setbox2\hbox{\unhbox0} \the\wd2
+%D \stoptyping
+%D
+%D But this saves a copy (and hpack pass):
+%D
+%D \starttyping
+%D \setbox0\hbox to 10cm{foo} \the\naturalwd0
+%D \stoptyping
+
+\newdimen\lastnaturalboxwd
+\newdimen\lastnaturalboxht
+\newdimen\lastnaturalboxdp
+
+\let\getnaturaldimensions\clf_getnaturaldimensions % sets three dimensions
+\let\naturalwd \clf_naturalwd % calculates and returns wd
+
+\unexpanded\def\doifelserighttoleftinbox{\clf_doifelserighttoleftinbox}
+
+\let\doifrighttoleftinboxelse\doifelserighttoleftinbox
+
\protect \endinput
% a bit of test code:
diff --git a/Master/texmf-dist/tex/context/base/supp-dir.mkiv b/Master/texmf-dist/tex/context/base/mkiv/supp-dir.mkiv
index 6251012b6a1..6251012b6a1 100644
--- a/Master/texmf-dist/tex/context/base/supp-dir.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-dir.mkiv
diff --git a/Master/texmf-dist/tex/context/base/supp-mat.mkiv b/Master/texmf-dist/tex/context/base/mkiv/supp-mat.mkiv
index 925f25cc4c3..b265a7c5a1d 100644
--- a/Master/texmf-dist/tex/context/base/supp-mat.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-mat.mkiv
@@ -44,14 +44,14 @@
%D \def\MyPlus{\mathematics{\,+\,}}
%D \stoptyping
%D
-%D Which is implemented as:
-
-\let\normalsuperscript \Usuperscript
-\let\normalsubscript \Usubscript
-\let\normalstartimath \Ustartmath
-\let\normalstopimath \Ustopmath
-\let\normalstartdmath \Ustartdisplaymath
-\let\normalstopdmath \Ustopdisplaymath
+%D Which is implemented (in \type{syst-ini.mkiv}) as:
+
+% \let\normalsuperscript\Usuperscript
+% \let\normalsubscript \Usubscript
+% \let\normalstartimath \Ustartmath
+% \let\normalstopimath \Ustopmath
+% \let\normalstartdmath \Ustartdisplaymath
+% \let\normalstopdmath \Ustopdisplaymath
% \unexpanded\def\Ustartdisplaymath
% {\ifinner
diff --git a/Master/texmf-dist/tex/context/base/supp-ran.lua b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua
index 4968e8cfc1d..4968e8cfc1d 100644
--- a/Master/texmf-dist/tex/context/base/supp-ran.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua
diff --git a/Master/texmf-dist/tex/context/base/supp-ran.mkiv b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.mkiv
index f7cfd6e7334..f7cfd6e7334 100644
--- a/Master/texmf-dist/tex/context/base/supp-ran.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.mkiv
diff --git a/Master/texmf-dist/tex/context/base/supp-vis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/supp-vis.mkiv
index de7c4288d49..8b94201620a 100644
--- a/Master/texmf-dist/tex/context/base/supp-vis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/supp-vis.mkiv
@@ -1415,7 +1415,9 @@
{\dontinterfere
\dontcomplain
\setbox\boxrulescratchbox\normalhbox
- {$\normalmkern\ifnegative-\fi\scratchskip$}%
+ {\normalstartimath
+ \normalmkern\ifnegative-\fi\scratchskip
+ \normalstopimath}%
\setbox\boxrulescratchbox\normalhbox to \wd\boxrulescratchbox
{\visualvrule
\s!height16\testrulewidth
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-cc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-cc.mkiv
index e753d695f8c..e753d695f8c 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-cc.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-cc.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-cow.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-cow.mkiv
index 59eabae28ca..59eabae28ca 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-cow.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-cow.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-eur.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-eur.mkiv
index 19a88c8fa86..19a88c8fa86 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-eur.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-eur.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-jmn.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-jmn.mkiv
index d66e0a33257..d66e0a33257 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-jmn.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-jmn.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-mis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-mis.mkiv
index d2657512f3f..d2657512f3f 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-mis.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-mvs.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-mvs.mkiv
index 9902fc9e8a3..9902fc9e8a3 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-mvs.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-mvs.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-imp-nav.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-nav.mkiv
index 6e2f2c1f034..6e2f2c1f034 100644
--- a/Master/texmf-dist/tex/context/base/symb-imp-nav.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-imp-nav.mkiv
diff --git a/Master/texmf-dist/tex/context/base/symb-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/symb-ini.lua
index 6a4a1882529..6a4a1882529 100644
--- a/Master/texmf-dist/tex/context/base/symb-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/symb-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-ini.mkiv
index 40a0af6d690..23879b43a28 100644
--- a/Master/texmf-dist/tex/context/base/symb-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-ini.mkiv
@@ -72,8 +72,6 @@
\addvalue{\??symbolset\m_symb_current_set}{#1}%
\fi}
-\letvalue{\??symbolset}\empty
-
\unexpanded\def\doifelseinsymbolset#1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
\unexpanded\def\doifinsymbolset #1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
\unexpanded\def\doifelsesymbolset #1{\ifcsname\??symbolset#1\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
@@ -81,7 +79,11 @@
\let\doifinsymbolsetelse\doifelseinsymbolset
\let\doifsymbolsetelse \doifelsesymbolset
-\def\symbolset#1{\csname\??symbolset\ifcsname\??symbolset#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc
+\letvalue{\??symbolset}\empty
+
+%def\symbolset#1{\csname\??symbolset\ifcsname\??symbolset#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc
+
+\def\symbolset#1{\begincsname\??symbolset#1\endcsname} % no [#1], to be used in commalists etc
%D Since symbols are used frequently in interactive
%D documents, we speed up this one. Well, that was history,
@@ -148,7 +150,8 @@
\letvalue{\??symbol}\firstofoneargument
\def\directsymbol#1#2% no \relax, there can be an argument, see lists
- {\csname\??symbol\ifcsname\??symbol#1:#2\endcsname#1:#2\fi\endcsname}
+ %{\csname\??symbol\ifcsname\??symbol#1:#2\endcsname#1:#2\fi\endcsname}
+ {\begincsname\??symbol#1:#2\endcsname}
\unexpanded\def\symb_fetch
{\ifconditional\c_symb_found
diff --git a/Master/texmf-dist/tex/context/base/symb-run.mkiv b/Master/texmf-dist/tex/context/base/mkiv/symb-run.mkiv
index 3d92c44166f..ed4d90861ec 100644
--- a/Master/texmf-dist/tex/context/base/symb-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/symb-run.mkiv
@@ -19,6 +19,7 @@
context.start()
context.forcesymbolset { collection }
context.starttabulate { "|lT|l|l|" }
+ local options = { framecolor = "orange", rulethickness = ".8pt", offset = interfaces.variables.overlay }
for i=1,#symbols do
local symbol = symbols[i]
context.NC()
@@ -26,15 +27,8 @@
context.NC()
context.symbol(symbol)
context.NC()
- context.color (
- { "red" },
- context.nested.ruledhbox(
- context.nested.color (
- { "black" },
- context.nested.symbol(symbol)
- )
- )
- )
+ context.framed(options,context.nested.symbol(symbol))
+ context.NC()
context.NR()
end
context.stoptabulate()
@@ -50,4 +44,16 @@
\gdef\symb_show_set[#1]%
{\ctxcommand{showsymbolset("#1","\symbolset{#1}")}}
-\protect \endinput
+\protect
+
+\continueifinputfile{symb-run.mkiv}
+
+\usesymbols[cc]
+
+\starttext
+
+ \showsymbolset[cc]
+
+ \symbol[cc][cc-by-sa-nc]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/mkiv/syst-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/syst-aux.lua
new file mode 100644
index 00000000000..98b92cef3b3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-aux.lua
@@ -0,0 +1,514 @@
+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 = tonumber
+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 next = next
+local find = string.find
+
+local context = context
+local implement = interfaces.implement
+local formatters = string.formatters
+local setcatcode = tex.setcatcode
+local utf8character = lpeg.patterns.utf8character
+local settings_to_array = utilities.parsers.settings_to_array
+local settings_to_set = utilities.parsers.settings_to_set
+local setmacro = interfaces.setmacro
+
+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 = { "string", "string" },
+ actions = function(str,chr)
+ ctx_doifelse(lpegmatch(pattern,str) == chr)
+ end
+}
+
+implement {
+ name = "getsubstring",
+ arguments = { "string", "string", "string" },
+ 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 spaces = P(" ")^0 / ""
+local nohash = 1 - P("#")
+local digit = R("09")
+local double = P("##") / "#"
+local single = P("#")
+local sentinel = spaces * (nohash^1 / "\\%0")
+local sargument = (single * digit)^1
+local dargument = (double * digit)^1
+
+local usespaces = nil
+local texpreamble = nil
+
+local pattern = Cs( -- ^-1
+ ( P("spaces") / function() usespaces = true return "" end )^0
+ * spaces
+ * ( P("nospaces") / function() usespaces = false return "" end )^0
+ * spaces
+ * ( P("global") / "\\global" )^0
+ * spaces
+ * ( P("unexpanded") / "\\unexpanded" )^0
+ * spaces
+ * Cc("\\expandafter\\")
+ * spaces
+ * ( P("expanded") / "e" )^0
+ * spaces
+ * ( P((1-S(" #"))^1) / "def\\csname %0\\endcsname" )
+ * spaces
+ * (
+ -- (double * digit)^1 * sentinel^-1 * double^-1
+ -- + (single * digit)^1 * sentinel^-1 * single^-1
+ ( 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)
+ usespaces = nil
+ texpreamble = lpegmatch(pattern,str)
+ if usespaces == true then
+ setcatcode(32,10) -- space
+ setcatcode(13, 5) -- endofline
+ elseif usespaces == false then
+ setcatcode(32, 9) -- ignore
+ setcatcode(13, 9) -- ignore
+ else
+ -- this is default
+ -- setcatcode(32,10) -- space
+ -- setcatcode(13, 9) -- ignore
+ end
+ ctx_dostarttexdefinition()
+end
+
+local function texdefinition_two()
+ context(texpreamble)
+end
+
+implement { name = "texdefinition_one", actions = texdefinition_one, scope = "private", arguments = "string" }
+implement { name = "texdefinition_two", actions = texdefinition_two, scope = "private" }
+
+implement { name = "upper", arguments = "string", actions = { utf.upper, context } }
+implement { name = "lower", arguments = "string", actions = { utf.lower, context } }
+implement { name = "strip", arguments = "string", actions = { string.strip, context } } -- or utf.strip
+
+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 = "elapsedtime",
+ actions = function()
+ statistics.stoptiming("whatever")
+ context(statistics.elapsedtime("whatever"))
+ 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 firstoftwoarguments = context.firstoftwoarguments
+local secondoftwoarguments = context.secondoftwoarguments
+local firstofoneargument = context.firstofoneargument
+local gobbleoneargument = context.gobbleoneargument
+
+local hash = utilities.parsers.hashes.settings_to_set
+
+local function doifelsecommon(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ secondoftwoarguments()
+ else
+ firstoftwoarguments()
+ end
+ return
+ end
+ local ba = find(a,",")
+ local bb = find(b,",")
+ 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)
+ firstoftwoarguments()
+ return
+ end
+ end
+ elseif ba then
+ if hash[a][b] then
+ -- if settings_to_set(a)[b] then
+ setmacro("commalistelement",b)
+ firstoftwoarguments()
+ return
+ end
+ elseif bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ firstoftwoarguments()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ secondoftwoarguments()
+end
+
+local function doifcommon(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ gobbleoneargument()
+ else
+ firstofoneargument()
+ end
+ return
+ end
+ local ba = find(a,",")
+ local bb = find(b,",")
+ 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)
+ firstofoneargument()
+ return
+ end
+ end
+ elseif ba then
+ if hash[a][b] then
+ -- if settings_to_set(a)[b] then
+ setmacro("commalistelement",b)
+ firstofoneargument()
+ return
+ end
+ elseif bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ firstofoneargument()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ gobbleoneargument()
+end
+
+local function doifnotcommon(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ firstofoneargument()
+ else
+ gobbleoneargument()
+ end
+ return
+ end
+ local ba = find(a,",")
+ local bb = find(b,",")
+ 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)
+ gobbleoneargument()
+ return
+ end
+ end
+ elseif ba then
+ if hash[a][b] then
+ -- if settings_to_set(a)[b] then
+ setmacro("commalistelement",b)
+ gobbleoneargument()
+ return
+ end
+ elseif bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ gobbleoneargument()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ firstofoneargument()
+end
+
+local function doifelseinset(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ secondoftwoarguments()
+ else
+ firstoftwoarguments()
+ end
+ return
+ end
+ local bb = find(b,",")
+ if bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ firstoftwoarguments()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ secondoftwoarguments()
+end
+
+local function doifinset(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ gobbleoneargument()
+ else
+ firstofoneargument()
+ end
+ return
+ end
+ local bb = find(b,",")
+ if bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ firstofoneargument()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ gobbleoneargument()
+end
+
+local function doifnotinset(a,b)
+ if a == b then
+ setmacro("commalistelement",a)
+ if a == "" then
+ firstofoneargument()
+ else
+ gobbleoneargument()
+ end
+ return
+ end
+ local bb = find(b,",")
+ if bb then
+ if hash[b][a] then
+ -- if settings_to_set(b)[a] then
+ setmacro("commalistelement",a)
+ gobbleoneargument()
+ return
+ end
+ end
+ setmacro("commalistelement","")
+ firstofoneargument()
+end
+
+implement {
+ name = "doifelsecommon",
+ actions = doifelsecommon,
+ arguments = { "string", "string" },
+}
+
+implement {
+ name = "doifcommon",
+ actions = doifcommon,
+ arguments = { "string", "string" },
+}
+
+implement {
+ name = "doifnotcommon",
+ actions = doifnotcommon,
+ arguments = { "string", "string" },
+}
+
+implement {
+ name = "doifelseinset",
+ actions = doifelseinset,
+ arguments = { "string", "string" },
+}
+
+implement {
+ name = "doifinset",
+ actions = doifinset,
+ arguments = { "string", "string" },
+}
+
+implement {
+ name = "doifnotinset",
+ actions = doifnotinset,
+ arguments = { "string", "string" },
+}
+
+-- implement {
+-- name = "stringcompare",
+-- arguments = { "string", "string" },
+-- actions = function(a,b)
+-- context((a == b and 0) or (a > b and 1) or -1)
+-- end
+-- }
+--
+-- implement {
+-- name = "doifelsestringafter",
+-- arguments = { "string", "string" },
+-- actions = function(a,b)
+-- ctx_doifelse((a == b and 0) or (a > b and 1) or -1)
+-- end
+-- }
+--
+-- implement {
+-- name = "doifelsestringbefore",
+-- arguments = { "string", "string" },
+-- 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 = { "string", "string" },
+-- 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
+-- }
diff --git a/Master/texmf-dist/tex/context/base/syst-aux.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-aux.mkiv
index bd9b1630e70..825d1863641 100644
--- a/Master/texmf-dist/tex/context/base/syst-aux.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-aux.mkiv
@@ -48,15 +48,15 @@
%D \macros
%D {unexpanded}
%D
-%D Because we use this module only in \MKIV, we have removed the
-%D old protection code.
+%D Because we use this module only in \MKIV, we have removed the old protection
+%D code.
%D
%D \starttyping
%D \unexpanded\def\somecommand{... ... ...}
%D \stoptyping
%D
-%D This overloads the \ETEX\ primitive but as we already had an \MKII\
-%D solution we keep the same name for a similar mechanism.
+%D This overloads the \ETEX\ primitive but as we already had an \MKII\ solution we
+%D keep the same name for a similar mechanism.
\let\unexpanded\normalprotected
@@ -100,8 +100,7 @@
%D \macros
%D {normalspace}
%D
-%D There is already \type{\space} but just to be sure we also
-%D provide:
+%D There is already \type{\space} but just to be sure we also provide:
\def\normalspace{ }
@@ -109,9 +108,8 @@
%D {!!count, !!toks, !!dimen, !!box,
%D !!width, !!height, !!depth, !!string, !!done}
%D
-%D We define some more \COUNTERS\ and \DIMENSIONS. We also
-%D define some shortcuts to the local scatchregisters~0, 2, 4,
-%D 6 and~8.
+%D We define some more \COUNTERS\ and \DIMENSIONS. We also define some shortcuts to
+%D the local scatchregisters~0, 2, 4, 6 and~8.
\newcount\!!counta \newtoks\!!toksa \newdimen\!!dimena \newbox\!!boxa
\newcount\!!countb \newtoks\!!toksb \newdimen\!!dimenb \newbox\!!boxb
@@ -158,9 +156,8 @@
%D \macros
%D {s!,c!,e!,p!,v!,@@,??}
%D
-%D To save memory, we use constants (sometimes called
-%D variables). Redefining these constants can have disastrous
-%D results.
+%D To save memory, we use constants (sometimes called variables). Redefining these
+%D constants can have disastrous results.
\def\v!prefix! {v!}
\def\c!prefix! {c!}
@@ -181,8 +178,9 @@
\def\s!empty {empty}
-%D These are not needed any more now that we have wide screens (and
-%D bytes come cheap).
+%D These are not needed any more now that we have wide screens (and bytes come
+%D cheap).
+
\let\@EA \singleexpandafter
\let\@EAEAEA \doubleexpandafter
@@ -265,19 +263,16 @@
%D \macros
%D {doifnextcharelse}
%D
-%D When we started using \TEX\ in the late eighties, our
-%D first experiences with programming concerned a simple shell
-%D around \LATEX. The commands probably use most at \PRAGMA,
-%D are the itemizing ones. One of those few shell commands took
-%D care of an optional argument, that enabled us to specify
-%D what kind of item symbol we wanted. Without understanding
-%D anything we were able to locate a \LATEX\ macro that could
-%D be used to inspect the next character.
+%D When we started using \TEX\ in the late eighties, our first experiences with
+%D programming concerned a simple shell around \LATEX. The commands probably use
+%D most at \PRAGMA, are the itemizing ones. One of those few shell commands took
+%D care of an optional argument, that enabled us to specify what kind of item symbol
+%D we wanted. Without understanding anything we were able to locate a \LATEX\ macro
+%D that could be used to inspect the next character.
%D
-%D It's this macro that the ancester of the next one presented
-%D here. It executes one of two actions, dependant of the next
-%D character. Disturbing spaces and line endings, which are
-%D normally interpreted as spaces too, are skipped.
+%D It's this macro that the ancester of the next one presented here. It executes one
+%D of two actions, dependant of the next character. Disturbing spaces and line
+%D endings, which are normally interpreted as spaces too, are skipped.
%D
%D \starttyping
%D \doifnextcharelse {karakter} {then ...} {else ...}
@@ -309,16 +304,14 @@
\expandafter\m_syst_action_nop
\fi}
-%D Because we will mostly use this macro for testing if the next
-%D character is \type {[}, we also make a slightly faster variant
-%D as it is not uncommon to have tens of thousands of calls to this
-%D test in a run. Of course it also is more convenient to read a
-%D trace then.
+%D Because we will mostly use this macro for testing if the next character is \type
+%D {[}, we also make a slightly faster variant as it is not uncommon to have tens of
+%D thousands of calls to this test in a run. Of course it also is more convenient to
+%D read a trace then.
-% We could make variants without the \if_next_blank_space_token but
-% the overhead is only .1 sec on 3.5 for 10^6 tests and often that
-% branch is not entered anyway. The fast variants with less checking
-% do make a difference however:
+% We could make variants without the \if_next_blank_space_token but the overhead is
+% only .1 sec on 3.5 for 10^6 tests and often that branch is not entered anyway. The
+% fast variants with less checking do make a difference however:
% \testfeature{1000000}{\doifnextoptionalelse \gobbleoneargument\gobbleoneargument[} % 2.902s
% \testfeature{1000000}{\doifnextoptionalcselse \gobbleoneargument\gobbleoneargument[} % 2.590s
@@ -594,7 +587,7 @@
%D \ifundefined\NameB ... \else ... \fi
%D \stoptyping
-\suppressifcsnameerror\plusone
+% \suppressifcsnameerror\plusone % already set
\def\doifelseundefined#1%
{\ifcsname#1\endcsname
@@ -628,7 +621,7 @@
%D existance is not the same as the one described here. Therefore we introduce:
\def\letbeundefined#1% potential stack buildup when used \global
- {\expandafter\let\csname#1\endcsname\undefined}
+ {\expandafter\let\csname#1\endcsname\undefined} % or use \undefinevalue to match \setvalue
\def\localundefine#1% conditional
{\ifcsname#1\endcsname\expandafter\let\csname#1\endcsname\undefined\fi}
@@ -782,132 +775,138 @@
% !5yes=\doifnotinset{}{}{yes}
% !6yes=\doifnotinset{aaa}{}{yes}
-\def\v_syst_helpers_right_optional_bracket{]}
-
-\def\syst_helpers_do_quit_if_item_in_set_else#1],\relax{\firstoftwoarguments}
-\def\syst_helpers_do_quit_if_item_in_set #1],\relax{\firstofoneargument}
-\def\syst_helpers_do_quit_if_item_not_in_set #1],\relax{\gobbleoneargument}
-
-\def\syst_helpers_re_do_if_in_set_else{\expandafter\syst_helpers_do_check_if_item_in_set_else\m_syst_string_two,],\relax}
-\def\syst_helpers_re_do_if_in_set {\expandafter\syst_helpers_do_check_if_item_in_set \m_syst_string_two,],\relax}
-\def\syst_helpers_re_do_if_not_in_set {\expandafter\syst_helpers_do_check_if_item_not_in_set \m_syst_string_two,],\relax}
+% \def\v_syst_helpers_right_optional_bracket{]}
+%
+% \def\syst_helpers_do_quit_if_item_in_set_else#1],\relax{\firstoftwoarguments}
+% \def\syst_helpers_do_quit_if_item_in_set #1],\relax{\firstofoneargument}
+% \def\syst_helpers_do_quit_if_item_not_in_set #1],\relax{\gobbleoneargument}
+%
+% \def\syst_helpers_re_do_if_in_set_else{\expandafter\syst_helpers_do_check_if_item_in_set_else\m_syst_string_two,],\relax}
+% \def\syst_helpers_re_do_if_in_set {\expandafter\syst_helpers_do_check_if_item_in_set \m_syst_string_two,],\relax}
+% \def\syst_helpers_re_do_if_not_in_set {\expandafter\syst_helpers_do_check_if_item_not_in_set \m_syst_string_two,],\relax}
+%
+% \unexpanded\def\doifelseinset#1% make this two step too
+% {\edef\m_syst_string_one{#1}%
+% \ifx\m_syst_string_one\empty
+% \expandafter\thirdofthreearguments
+% \else
+% \expandafter\syst_helpers_do_if_in_set_else
+% \fi}
+%
+% \let\doifinsetelse\doifelseinset
+%
+% \def\syst_helpers_do_if_in_set_else#1%
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\secondoftwoarguments
+% \else
+% \expandafter\syst_helpers_re_do_if_in_set_else
+% \fi}
+%
+% \unexpanded\def\doifinset#1%
+% {\edef\m_syst_string_one{#1}%
+% \ifx\m_syst_string_one\empty
+% \expandafter\gobbletwoarguments
+% \else
+% \expandafter\syst_helpers_do_if_in_set
+% \fi}
+%
+% \def\syst_helpers_do_if_in_set#1%
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\gobbleoneargument
+% \else
+% \expandafter\syst_helpers_re_do_if_in_set
+% \fi}
+%
+% \unexpanded\def\doifnotinset#1%
+% {\edef\m_syst_string_one{#1}%
+% \ifx\m_syst_string_one\empty
+% \expandafter\secondoftwoarguments
+% \else
+% \expandafter\syst_helpers_do_if_not_in_set
+% \fi}
+%
+% \def\syst_helpers_do_if_not_in_set#1%
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\firstofoneargument
+% \else
+% \expandafter\syst_helpers_re_do_if_not_in_set % ...]{true}
+% \fi}
+%
+% \def\syst_helpers_do_check_if_item_in_set_else#1,#2% #2 eats up preceding space
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\syst_helpers_do_check_if_item_in_set_else
+% \else
+% \expandafter\syst_helpers_do_do_check_if_item_in_set_else
+% \fi#2}
+%
+% \def\syst_helpers_do_do_check_if_item_in_set_else
+% {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
+% \expandafter\thirdofthreearguments
+% \else
+% \expandafter\syst_helpers_do_do_do_check_if_item_in_set_else
+% \fi}
+%
+% \def\syst_helpers_do_do_do_check_if_item_in_set_else
+% {\ifx\m_syst_string_one\m_syst_string_two
+% \expandafter\syst_helpers_do_quit_if_item_in_set_else
+% \else
+% \expandafter\syst_helpers_do_check_if_item_in_set_else
+% \fi}
+%
+% \def\syst_helpers_do_check_if_item_in_set#1,#2% #2 eats up preceding space
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\syst_helpers_do_check_if_item_in_set
+% \else
+% \expandafter\syst_helpers_do_do_check_if_item_in_set
+% \fi#2}
+%
+% \def\syst_helpers_do_do_check_if_item_in_set
+% {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
+% \expandafter\gobbletwoarguments
+% \else
+% \expandafter\syst_helpers_do_do_do_check_if_item_in_set
+% \fi}
+%
+% \def\syst_helpers_do_do_do_check_if_item_in_set
+% {\ifx\m_syst_string_one\m_syst_string_two
+% \expandafter\syst_helpers_do_quit_if_item_in_set
+% \else
+% \expandafter\syst_helpers_do_check_if_item_in_set
+% \fi}
+%
+% \def\syst_helpers_do_check_if_item_not_in_set#1,#2% #2 eats up preceding space
+% {\edef\m_syst_string_two{#1}%
+% \ifx\m_syst_string_two\empty
+% \expandafter\syst_helpers_do_check_if_item_not_in_set
+% \else
+% \expandafter\syst_helpers_do_do_check_if_item_not_in_set
+% \fi#2}
+%
+% \def\syst_helpers_do_do_check_if_item_not_in_set
+% {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
+% \expandafter\secondoftwoarguments
+% \else
+% \expandafter\syst_helpers_do_do_do_check_if_item_not_in_set
+% \fi}
+%
+% \def\syst_helpers_do_do_do_check_if_item_not_in_set
+% {\ifx\m_syst_string_one\m_syst_string_two
+% \expandafter\syst_helpers_do_quit_if_item_not_in_set
+% \else
+% \expandafter\syst_helpers_do_check_if_item_not_in_set
+% \fi}
-\unexpanded\def\doifelseinset#1% make this two step too
- {\edef\m_syst_string_one{#1}%
- \ifx\m_syst_string_one\empty
- \expandafter\thirdofthreearguments
- \else
- \expandafter\syst_helpers_do_if_in_set_else
- \fi}
+\unexpanded\def\doifelseinset#1#2{\clf_doifelseinset{#1}{#2}}
+\unexpanded\def\doifinset #1#2{\clf_doifinset {#1}{#2}}
+\unexpanded\def\doifnotinset #1#2{\clf_doifnotinset {#1}{#2}}
\let\doifinsetelse\doifelseinset
-\def\syst_helpers_do_if_in_set_else#1%
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\secondoftwoarguments
- \else
- \expandafter\syst_helpers_re_do_if_in_set_else
- \fi}
-
-\unexpanded\def\doifinset#1%
- {\edef\m_syst_string_one{#1}%
- \ifx\m_syst_string_one\empty
- \expandafter\gobbletwoarguments
- \else
- \expandafter\syst_helpers_do_if_in_set
- \fi}
-
-\def\syst_helpers_do_if_in_set#1%
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\gobbleoneargument
- \else
- \expandafter\syst_helpers_re_do_if_in_set
- \fi}
-
-\unexpanded\def\doifnotinset#1%
- {\edef\m_syst_string_one{#1}%
- \ifx\m_syst_string_one\empty
- \expandafter\secondoftwoarguments
- \else
- \expandafter\syst_helpers_do_if_not_in_set
- \fi}
-
-\def\syst_helpers_do_if_not_in_set#1%
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\firstofoneargument
- \else
- \expandafter\syst_helpers_re_do_if_not_in_set % ...]{true}
- \fi}
-
-\def\syst_helpers_do_check_if_item_in_set_else#1,#2% #2 eats up preceding space
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\syst_helpers_do_check_if_item_in_set_else
- \else
- \expandafter\syst_helpers_do_do_check_if_item_in_set_else
- \fi#2}
-
-\def\syst_helpers_do_do_check_if_item_in_set_else
- {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
- \expandafter\thirdofthreearguments
- \else
- \expandafter\syst_helpers_do_do_do_check_if_item_in_set_else
- \fi}
-
-\def\syst_helpers_do_do_do_check_if_item_in_set_else
- {\ifx\m_syst_string_one\m_syst_string_two
- \expandafter\syst_helpers_do_quit_if_item_in_set_else
- \else
- \expandafter\syst_helpers_do_check_if_item_in_set_else
- \fi}
-
-\def\syst_helpers_do_check_if_item_in_set#1,#2% #2 eats up preceding space
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\syst_helpers_do_check_if_item_in_set
- \else
- \expandafter\syst_helpers_do_do_check_if_item_in_set
- \fi#2}
-
-\def\syst_helpers_do_do_check_if_item_in_set
- {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
- \expandafter\gobbletwoarguments
- \else
- \expandafter\syst_helpers_do_do_do_check_if_item_in_set
- \fi}
-
-\def\syst_helpers_do_do_do_check_if_item_in_set
- {\ifx\m_syst_string_one\m_syst_string_two
- \expandafter\syst_helpers_do_quit_if_item_in_set
- \else
- \expandafter\syst_helpers_do_check_if_item_in_set
- \fi}
-
-\def\syst_helpers_do_check_if_item_not_in_set#1,#2% #2 eats up preceding space
- {\edef\m_syst_string_two{#1}%
- \ifx\m_syst_string_two\empty
- \expandafter\syst_helpers_do_check_if_item_not_in_set
- \else
- \expandafter\syst_helpers_do_do_check_if_item_not_in_set
- \fi#2}
-
-\def\syst_helpers_do_do_check_if_item_not_in_set
- {\ifx\m_syst_string_two\v_syst_helpers_right_optional_bracket
- \expandafter\secondoftwoarguments
- \else
- \expandafter\syst_helpers_do_do_do_check_if_item_not_in_set
- \fi}
-
-\def\syst_helpers_do_do_do_check_if_item_not_in_set
- {\ifx\m_syst_string_one\m_syst_string_two
- \expandafter\syst_helpers_do_quit_if_item_not_in_set
- \else
- \expandafter\syst_helpers_do_check_if_item_not_in_set
- \fi}
-
%D \macros
%D {doifcommon,doifnotcommon,doifcommonelse}
%D
@@ -936,65 +935,71 @@
% !9yes=\doifcommonelse{,a,}{,,,a,}{yes}{nop}
% !9yes=\doifcommonelse{,,a,}{,,,a,}{yes}{nop}
-\let\m_syst_common_a\empty
-\let\m_syst_common_b\empty
-\let\m_syst_common_c\empty
-
-\def\syst_helpers_do_quit_if_common_else#1],\relax#2],\relax{\firstoftwoarguments}
-
-\def\syst_helpers_do_check_if_common_else_one#1,#2%
- {\edef\m_syst_common_c{#1}%
- \ifx\m_syst_common_c\v_syst_helpers_right_optional_bracket
- \expandafter\thirdofthreearguments
- \else
- \expandafter\syst_helpers_do_common_check
- \fi#2}
-
-\def\syst_helpers_do_check_if_common_else_two#1,#2% we can do an empty #1 check too
- {\edef\commalistelement{#1}%
- \ifx\commalistelement\v_syst_helpers_right_optional_bracket
- \expandafter\syst_helpers_re_do_check_if_common_else_one
- \else
- \expandafter\syst_helpers_do_do_check_if_common_else_two
- \fi#2}
-
-\def\syst_helpers_do_do_check_if_common_else_two
- {\ifx\commalistelement\empty
- \expandafter\syst_helpers_do_check_if_common_else_two
- \else
- \expandafter\syst_helpers_do_do_do_check_if_common_else_two
- \fi}
-
-\def\syst_helpers_do_do_do_check_if_common_else_two
- {\ifx\m_syst_common_c\commalistelement
- \expandafter\syst_helpers_do_quit_if_common_else
- \else
- \expandafter\syst_helpers_do_check_if_common_else_two
- \fi}
-
-\def\syst_helpers_re_do_check_if_common_else_one#1{\syst_helpers_do_check_if_common_else_one}
-
-\def\syst_helpers_do_common_check
- {\expandafter\syst_helpers_do_check_if_common_else_two\m_syst_common_b,],\relax}%
-
-\def\syst_helpers_do_do_do_if_common_else
- {\expandafter\syst_helpers_do_check_if_common_else_one\m_syst_common_a,],\relax}
+% \let\m_syst_common_a\empty
+% \let\m_syst_common_b\empty
+% \let\m_syst_common_c\empty
+%
+% \def\syst_helpers_do_quit_if_common_else#1],\relax#2],\relax{\firstoftwoarguments}
+%
+% \def\syst_helpers_do_check_if_common_else_one#1,#2% hm, why #2 here and passed at end
+% {\edef\m_syst_common_c{#1}%
+% \ifx\m_syst_common_c\v_syst_helpers_right_optional_bracket
+% \expandafter\thirdofthreearguments
+% \else
+% \expandafter\syst_helpers_do_common_check
+% \fi#2}
+%
+% \def\syst_helpers_do_check_if_common_else_two#1,#2% we can do an empty #1 check too
+% {\edef\commalistelement{#1}%
+% \ifx\commalistelement\v_syst_helpers_right_optional_bracket
+% \expandafter\syst_helpers_re_do_check_if_common_else_one
+% \else
+% \expandafter\syst_helpers_do_do_check_if_common_else_two
+% \fi#2}
+%
+% \def\syst_helpers_do_do_check_if_common_else_two
+% {\ifx\commalistelement\empty
+% \expandafter\syst_helpers_do_check_if_common_else_two
+% \else
+% \expandafter\syst_helpers_do_do_do_check_if_common_else_two
+% \fi}
+%
+% \def\syst_helpers_do_do_do_check_if_common_else_two
+% {\ifx\m_syst_common_c\commalistelement
+% \expandafter\syst_helpers_do_quit_if_common_else
+% \else
+% \expandafter\syst_helpers_do_check_if_common_else_two
+% \fi}
+%
+% \def\syst_helpers_re_do_check_if_common_else_one#1{\syst_helpers_do_check_if_common_else_one}
+%
+% \def\syst_helpers_do_common_check
+% {\expandafter\syst_helpers_do_check_if_common_else_two\m_syst_common_b,],\relax}%
+%
+% \def\syst_helpers_do_do_do_if_common_else
+% {\expandafter\syst_helpers_do_check_if_common_else_one\m_syst_common_a,],\relax}
+%
+% \def\syst_helpers_do_do_if_common_else#1#2#3#4%
+% {\edef\m_syst_common_a{#3}%
+% \edef\m_syst_common_b{#4}%
+% \ifx\m_syst_common_a\empty
+% \expandafter\secondoftwoarguments
+% \else\ifx\m_syst_common_b\empty
+% \expandafter\expandafter\expandafter\secondoftwoarguments
+% \else
+% \expandafter\expandafter\expandafter\syst_helpers_do_do_do_if_common_else
+% \fi\fi
+% #1#2}
-\def\syst_helpers_do_do_if_common_else#1#2#3#4%
- {\edef\m_syst_common_a{#3}%
- \edef\m_syst_common_b{#4}%
- \ifx\m_syst_common_a\empty
- \expandafter\secondoftwoarguments
- \else\ifx\m_syst_common_b\empty
- \expandafter\expandafter\expandafter\secondoftwoarguments
- \else
- \expandafter\expandafter\expandafter\syst_helpers_do_do_do_if_common_else
- \fi\fi
- #1#2}
+% \unexpanded\def\doifelsecommon{\syst_helpers_do_do_if_common_else\firstoftwoarguments\secondoftwoarguments}
+% \unexpanded\def\doifcommon {\syst_helpers_do_do_if_common_else\firstofoneargument \gobbleoneargument }
+% \unexpanded\def\doifnotcommon {\syst_helpers_do_do_if_common_else\gobbleoneargument \firstofoneargument }
+%
+% \let\doifcommonelse\doifelsecommon
-\unexpanded\def\doifelsecommon{\syst_helpers_do_do_if_common_else\firstoftwoarguments\secondoftwoarguments}
-\unexpanded\def\doifcommon {\syst_helpers_do_do_if_common_else\firstofoneargument \gobbleoneargument }
-\unexpanded\def\doifnotcommon {\syst_helpers_do_do_if_common_else\gobbleoneargument \firstofoneargument }
+\unexpanded\def\doifelsecommon#1#2{\clf_doifelsecommon{#1}{#2}}
+\unexpanded\def\doifcommon #1#2{\clf_doifcommon {#1}{#2}}
+\unexpanded\def\doifnotcommon #1#2{\clf_doifnotcommon {#1}{#2}}
\let\doifcommonelse\doifelsecommon
@@ -2723,8 +2728,10 @@
%D
%D This expands to \type{\ifsomething}.
-\def\strippedcsname
- {\expandafter\gobbleoneargument\string}
+% \def\strippedcsname
+% {\expandafter\gobbleoneargument\string}
+
+\let\strippedcsname\csstring
%D \macros
%D {complexorsimple,complexorsimpleempty}
@@ -2770,14 +2777,14 @@
\unexpanded\def\complexorsimple#1%
{% \relax % prevents lookahead, brrr
\doifelsenextoptional
- {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname}
- {\firstargumentfalse\csname\s!simple \strippedcsname#1\endcsname}}
+ {\firstargumenttrue \csname\s!complex\csstring#1\endcsname}
+ {\firstargumentfalse\csname\s!simple \csstring#1\endcsname}}
\unexpanded\def\complexorsimpleempty#1%
{% \relax % prevents lookahead, brrr
\doifelsenextoptional
- {\firstargumenttrue \csname\s!complex\strippedcsname#1\endcsname}
- {\firstargumentfalse\csname\s!complex\strippedcsname#1\endcsname[]}}
+ {\firstargumenttrue \csname\s!complex\csstring#1\endcsname}
+ {\firstargumentfalse\csname\s!complex\csstring#1\endcsname[]}}
%D \macros
%D {definecomplexorsimple,definecomplexorsimpleempty}
@@ -2794,12 +2801,12 @@
\unexpanded\def\definecomplexorsimple#1%
{\unexpanded\edef#1{\syst_helpers_complex_or_simple
- \expandafter\noexpand\csname\s!complex\strippedcsname#1\endcsname
- \expandafter\noexpand\csname\s!simple \strippedcsname#1\endcsname}}
+ \expandafter\noexpand\csname\s!complex\csstring#1\endcsname
+ \expandafter\noexpand\csname\s!simple \csstring#1\endcsname}}
\unexpanded\def\definecomplexorsimpleempty#1%
{\unexpanded\edef#1{\syst_helpers_complex_or_simple_empty
- \expandafter\noexpand\csname\s!complex\strippedcsname#1\endcsname}}
+ \expandafter\noexpand\csname\s!complex\csstring#1\endcsname}}
%D These commands are called as:
%D
@@ -3051,8 +3058,8 @@
%D of the identification string with the macro \type
%D {\statuswidth}.
-\setnewconstant\statuswidth 15
-\setnewconstant\statuswrite 16
+\setnewconstant\statuswidth 15
+\setnewconstant\statuswrite 128 % \pluscxxviii
\ifdefined\writestring \else
@@ -3337,7 +3344,9 @@
\egroup
-\unexpanded\def\texdefinition#1{\csname\ifcsname#1\endcsname#1\else donothing\fi\endcsname} % todo: a nop cs: char 0 or some corenamespace
+% \unexpanded\def\texdefinition#1{\csname\ifcsname#1\endcsname#1\else donothing\fi\endcsname} % todo: a nop cs: char 0 or some corenamespace
+
+\unexpanded\def\texdefinition#1{\begincsname#1\endcsname}
% This is a first variant, more might be added:
@@ -3461,12 +3470,14 @@
%D \csname if\strippedcsname\something\endcsname
%D \stoptyping
-\def\checkedstrippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx}
- {\expandafter\syst_helpers_checked_stripped_csname\string#1}
+% \def\checkedstrippedcsname#1% this permits \strippedcsname{\xxx} and \strippedcsname{xxx}
+% {\expandafter\syst_helpers_checked_stripped_csname\string#1}
+%
+% \def\syst_helpers_checked_stripped_csname#1%
+% %{\ifx#1\letterbackslash\else#1\fi}
+% {\if\noexpand#1\letterbackslash\else#1\fi}
-\def\syst_helpers_checked_stripped_csname#1%
- %{\ifx#1\letterbackslash\else#1\fi}
- {\if\noexpand#1\letterbackslash\else#1\fi}
+\let\checkedstrippedcsname\csstring
%D \macros
%D {savenormalmeaning}
@@ -3474,8 +3485,8 @@
%D We will use this one in:
\unexpanded\def\savenormalmeaning#1%
- {\ifcsname normal\strippedcsname#1\endcsname \else
- \expandafter\let\csname normal\strippedcsname#1\endcsname#1%
+ {\ifcsname normal\csstring#1\endcsname \else
+ \expandafter\let\csname normal\csstring#1\endcsname#1%
\fi}
%D \macros
@@ -3939,18 +3950,15 @@
%D \macros
%D {newevery,everyline,EveryLine,EveryPar}
%D
-%D Lets skip to something quite different. It's common use
-%D to use \type {\everypar} for special purposes. In \CONTEXT\
-%D we use this primitive for locating sidefloats. This means
-%D that when user assignments to \type {\everypar} can interfere
-%D with those of the package. We therefore introduce
-%D \type {\EveryPar}.
+%D Lets skip to something quite different. It's common use to use \type {\everypar}
+%D for special purposes. In \CONTEXT\ we use this primitive for locating sidefloats.
+%D This means that when user assignments to \type {\everypar} can interfere with
+%D those of the package. We therefore introduce \type {\EveryPar}.
%D
-%D The same goes for \type {\EveryLine}. Because \TEX\ offers
-%D no \type {\everyline} primitive, we have to call for
-%D \type {\everyline} when we are working on a line by line
-%D basis. Just by calling \type {\EveryPar{}} and
-%D \type {\EveryLine{}} we restore the old situation.
+%D The same goes for \type {\EveryLine}. Because \TEX\ offers no \type {\everyline}
+%D primitive, we have to call for \type {\everyline} when we are working on a line
+%D by line basis. Just by calling \type {\EveryPar{}} and \type {\EveryLine{}} we
+%D restore the old situation.
% \dorecurse{2}{
% \expanded{\everypar{before \recurselevel\space}}
@@ -3963,21 +3971,33 @@
\installsystemnamespace{extraevery}
+% \unexpanded\def\newevery#1#2%
+% {\ifx#1\everypar\else\newtoks#1\fi% we test for redefinition elsewhere
+% \ifx#2\relax\else\ifdefined#2\else
+% \expandafter\newtoks\csname\??extraevery\csstring#1\endcsname
+% \def#2{\syst_helpers_every#1}%
+% \fi\fi}
+%
+% \unexpanded\def\syst_helpers_every#1%
+% {\expandafter\removetoks\expandafter\the\csname\??extraevery\csstring#1\endcsname\from#1%
+% \expandafter\appendtoks\expandafter\the\csname\??extraevery\csstring#1\endcsname\to #1%
+% \csname\??extraevery\csstring#1\endcsname}
+
\unexpanded\def\newevery#1#2%
{\ifx#1\everypar\else\newtoks#1\fi% we test for redefinition elsewhere
\ifx#2\relax\else\ifdefined#2\else
- \expandafter\newtoks\csname\??extraevery\strippedcsname#1\endcsname
- \def#2{\syst_helpers_every#1}%
+ \expandafter\newtoks\csname\??extraevery\csstring#1\endcsname
+ \edef#2{\syst_helpers_every#1\csname\??extraevery\csstring#1\endcsname}%
\fi\fi}
-\unexpanded\def\syst_helpers_every#1%
- {\expandafter\removetoks\expandafter\the\csname\??extraevery\strippedcsname#1\endcsname\from#1%
- \expandafter\appendtoks\expandafter\the\csname\??extraevery\strippedcsname#1\endcsname\to #1%
- \csname\??extraevery\strippedcsname#1\endcsname}
+\unexpanded\def\syst_helpers_every#1#2%
+ {\removetoks\the#2\from#1%
+ \appendtoks\the#2\to #1%
+ #2}
%D This one permits definitions like:
-\newevery \everypar \EveryPar % we get a warning which is ok
+\newevery \everypar \EveryPar % we get a warning which is ok
\newevery \everyline \EveryLine
%D and how about:
@@ -4882,36 +4902,80 @@
\newtoks\t_syst_helpers_scratch
\let \m_syst_helpers_scratch\empty
-% no longer \def but \let to target toks
+% no longer \def but \let to target toks .. the space gobbling \relax will go
+
+% \unexpanded\def\appendtoks {\syst_helpers_append_toks \relax}
+% \unexpanded\def\prependtoks {\syst_helpers_prepend_toks \relax}
+% \unexpanded\def\appendtoksonce {\syst_helpers_append_toks_once \relax}
+% \unexpanded\def\prependtoksonce{\syst_helpers_prepend_toks_once\relax}
+%
+% \def\syst_helpers_append_toks_indeed
+% {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\m_syst_helpers_scratch\the\t_syst_helpers_scratch}}
+%
+% \def\syst_helpers_prepend_toks_indeed
+% {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\t_syst_helpers_scratch\the\m_syst_helpers_scratch}}
+%
+% \def\syst_helpers_append_toks#1\to#2%
+% {\let\m_syst_helpers_scratch#2%
+% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
+% \syst_helpers_append_toks_indeed}
+%
+% \def\syst_helpers_prepend_toks#1\to#2%
+% {\let\m_syst_helpers_scratch#2%
+% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
+% \syst_helpers_prepend_toks_indeed}
+%
+% \def\syst_helpers_append_toks_once#1\to#2%
+% {\let\m_syst_helpers_scratch#2%
+% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
+% \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch
+% \donothing
+% \syst_helpers_append_toks_indeed}
+%
+% \def\syst_helpers_prepend_toks_once#1\to#2%
+% {\let\m_syst_helpers_scratch#2%
+% \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
+% \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch
+% \donothing
+% \syst_helpers_prepend_toks_indeed}
+
+\unexpanded\def\appendtoks#1\to#2%
+ {\toksapp#2{#1}%
+ \ifx\dodoglobal\relax\else
+ \global#2#2%
+ \fi}
-\unexpanded\def\appendtoks {\syst_helpers_append_toks \relax}
-\unexpanded\def\prependtoks {\syst_helpers_prepend_toks \relax}
-\unexpanded\def\appendtoksonce {\syst_helpers_append_toks_once \relax}
-\unexpanded\def\prependtoksonce{\syst_helpers_prepend_toks_once\relax}
+\unexpanded\def\prependtoks#1\to#2%
+ {\tokspre#2{#1}%
+ \ifx\dodoglobal\relax\else
+ \global#2#2%
+ \fi}
\def\syst_helpers_append_toks_indeed
- {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\m_syst_helpers_scratch\the\t_syst_helpers_scratch}}
+ {\toksapp\m_syst_helpers_scratch\t_syst_helpers_scratch
+ \ifx\dodoglobal\relax\else
+ \global\m_syst_helpers_scratch\m_syst_helpers_scratch
+ \fi}
\def\syst_helpers_prepend_toks_indeed
- {\dodoglobal\m_syst_helpers_scratch\doubleexpandafter{\expandafter\the\expandafter\t_syst_helpers_scratch\the\m_syst_helpers_scratch}}
-
-\def\syst_helpers_append_toks#1\to#2%
- {\let\m_syst_helpers_scratch#2%
- \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}\syst_helpers_append_toks_indeed}
-
-\def\syst_helpers_prepend_toks#1\to#2%
- {\let\m_syst_helpers_scratch#2%
- \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}\syst_helpers_prepend_toks_indeed}
+ {\tokspre\m_syst_helpers_scratch\t_syst_helpers_scratch
+ \ifx\dodoglobal\relax\else
+ \global\m_syst_helpers_scratch\m_syst_helpers_scratch
+ \fi}
-\def\syst_helpers_append_toks_once#1\to#2%
+\unexpanded\def\appendtoksonce#1\to#2%
{\let\m_syst_helpers_scratch#2%
- \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
- \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch\donothing\syst_helpers_append_toks_indeed}
+ \t_syst_helpers_scratch{#1}%
+ \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch
+ \donothing
+ \syst_helpers_append_toks_indeed}
-\def\syst_helpers_prepend_toks_once#1\to#2%
+\unexpanded\def\prependtoksonce#1\to#2%
{\let\m_syst_helpers_scratch#2%
- \t_syst_helpers_scratch\expandafter{\gobbleoneargument#1}%
- \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch\donothing\syst_helpers_prepend_toks_indeed}
+ \t_syst_helpers_scratch{#1}%
+ \doifelseintoks\t_syst_helpers_scratch\m_syst_helpers_scratch
+ \donothing
+ \syst_helpers_prepend_toks_indeed}
%D The test macro:
@@ -4922,6 +4986,36 @@
\let\doifintokselse\doifelseintoks
+%D Moved from \type{lxml-ini.tex} to here. This one is for generators that
+%D collect stuff piecewise, which is sometimes hard on mechanisms that
+%D grab content using delimiters:
+%D
+%D \starttyping
+%D \startcollecting
+%D \startcollect \bTABLE \stopcollect
+%D \startcollect \bTR \stopcollect
+%D \startcollect \bTD \stopcollect
+%D \startcollect foo\stopcollect
+%D \startcollect \eTD \stopcollect
+%D \startcollect \bTD \stopcollect
+%D \startcollect bar\stopcollect
+%D \startcollect \eTD \stopcollect
+%D \startcollect \eTR \stopcollect
+%D \startcollect \eTABLE \stopcollect
+%D \stopcollecting
+%D \stoptyping
+
+\newtoks \collectingtoks
+
+\unexpanded\def\startcollect #1\stopcollect {\toksapp \collectingtoks{#1}}
+\unexpanded\def\startexpandedcollect#1\stopexpandedcollect{\etoksapp\collectingtoks{#1}}
+
+\unexpanded\def\startcollecting{\collectingtoks\emptytoks}
+\unexpanded\def\stopcollecting {\the\collectingtoks}
+
+\unexpanded\def\collect {\toksapp \collectingtoks}
+\unexpanded\def\collectexpanded{\etoksapp\collectingtoks}
+
%D A nice one too:
% {\scratchtoks{abc} \removetoks b\from\scratchtoks [\the\scratchtoks]}
@@ -4938,12 +5032,24 @@
%D Also:
-\unexpanded\def\appendetoks #1\to{\normalexpanded{\appendtoks #1}\to}
-\unexpanded\def\prependetoks#1\to{\normalexpanded{\prependtoks#1}\to}
+% \unexpanded\def\appendetoks #1\to{\normalexpanded{\appendtoks #1}\to}
+% \unexpanded\def\prependetoks#1\to{\normalexpanded{\prependtoks#1}\to}
+
+\unexpanded\def\appendetoks#1\to#2%
+ {\etoksapp#2{#1}%
+ \ifx\dodoglobal\relax\else
+ \global#2#2%
+ \fi}
+
+\unexpanded\def\prependetoks#1\to#2%
+ {\etokspre#2{#1}%
+ \ifx\dodoglobal\relax\else
+ \global#2#2%
+ \fi}
%D Hm.
-\unexpanded\def\flushtoks#1% nb: can reassing to #1 again, hence the indirectness
+\unexpanded\def\flushtoks#1% nb: can reassign to #1 again, hence the indirectness
{\t_syst_helpers_scratch#1\relax
\dodoglobal#1\emptytoks
\the\t_syst_helpers_scratch\relax}
@@ -5353,33 +5459,80 @@
\installsystemnamespace{localpushedmacro}
\installsystemnamespace{globalpushedmacro}
+% \let\m_syst_helpers_push_macro\empty
+%
+% \unexpanded\def\globalpushmacro#1%
+% {\xdef\m_syst_helpers_push_macro{\string#1}%
+% \ifcsname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \else
+% \expandafter\newcount\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname
+% \fi
+% \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \plusone
+% \global\expandafter\let\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1}
+%
+% \unexpanded\def\globalpopmacro#1%
+% {\xdef\m_syst_helpers_push_macro{\string#1}%
+% \global\expandafter\let\expandafter#1\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname
+% \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \minusone}
+%
+% \unexpanded\def\localpushmacro#1% this one can be used to push a value over an \egroup
+% {\xdef\m_syst_helpers_push_macro{\string#1}%
+% \ifcsname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \else
+% \expandafter\newcount\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname
+% \fi
+% \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \plusone
+% \global\expandafter\let\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1}
+%
+% \unexpanded\def\localpopmacro#1%
+% {\xdef\m_syst_helpers_push_macro{\string#1}%
+% \expandafter\let\expandafter#1\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname
+% \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \minusone }
+%
+% \let\pushmacro\localpushmacro
+% \let\popmacro \localpopmacro
+%
+% slightly faster but more important: less tracing
+
\let\m_syst_helpers_push_macro\empty
+\newcount\c_syst_helpers_pop_count
+
+\def\syst_helpers_push_macro_new_global
+ {\expandafter\newcount\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\plusone}
+
+\def\syst_helpers_push_macro_new_local
+ {\expandafter\newcount\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\plusone}
+
\unexpanded\def\globalpushmacro#1%
- {\xdef\m_syst_helpers_push_macro{\string#1}%
- \ifcsname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \else
- \expandafter\newcount\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname
+ {\xdef\m_syst_helpers_push_macro{\csstring#1}%
+ \ifcsname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\lastnamedcs\plusone
+ \else
+ \syst_helpers_push_macro_new_global
\fi
- \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \plusone
- \global\expandafter\let\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1}
-
-\unexpanded\def\globalpopmacro#1%
- {\xdef\m_syst_helpers_push_macro{\string#1}%
- \global\expandafter\let\expandafter#1\csname\the\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname
- \global\advance\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname \minusone}
+ \global\expandafter\let\csname\the\lastnamedcs\m_syst_helpers_push_macro\endcsname#1}
\unexpanded\def\localpushmacro#1% this one can be used to push a value over an \egroup
- {\xdef\m_syst_helpers_push_macro{\string#1}%
- \ifcsname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \else
- \expandafter\newcount\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname
+ {\xdef\m_syst_helpers_push_macro{\csstring#1}%
+ \ifcsname\??localpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\lastnamedcs\plusone
+ \else
+ \syst_helpers_push_macro_new_local
\fi
- \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \plusone
- \global\expandafter\let\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname#1}
+ \global\expandafter\let\csname\the\lastnamedcs\m_syst_helpers_push_macro\endcsname#1}
+
+\unexpanded\def\globalpopmacro#1%
+ {\xdef\m_syst_helpers_push_macro{\csstring#1}%
+ \c_syst_helpers_pop_count\csname\??globalpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\lastnamedcs \minusone
+ \expandafter\let\expandafter#1\csname\the\c_syst_helpers_pop_count\m_syst_helpers_push_macro\endcsname}
\unexpanded\def\localpopmacro#1%
- {\xdef\m_syst_helpers_push_macro{\string#1}%
- \expandafter\let\expandafter#1\csname\the\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname\m_syst_helpers_push_macro\endcsname
- \global\advance\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname \minusone }
+ {\xdef\m_syst_helpers_push_macro{\csstring#1}%
+ \c_syst_helpers_pop_count\csname\??localpushedmacro\m_syst_helpers_push_macro\endcsname
+ \global\advance\lastnamedcs \minusone
+ \expandafter\let\expandafter#1\csname\the\c_syst_helpers_pop_count\m_syst_helpers_push_macro\endcsname}
\let\pushmacro\localpushmacro
\let\popmacro \localpopmacro
@@ -5754,7 +5907,8 @@
\def\executeifdefined#1% #2 / never change this one again
{\ifcsname#1\endcsname
- \csname#1\expandafter\expandafter\expandafter\endcsname\expandafter\gobbleoneargument
+ % \csname#1\expandafter\expandafter\expandafter\endcsname\expandafter\gobbleoneargument
+ \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
\fi}
@@ -6461,7 +6615,7 @@
%D macros mood}.
\def\dofilterfromstr#1#2% max n % no need to be fast
- {\expandafter \expandafter \expandafter \strippedcsname
+ {\expandafter \expandafter \expandafter \csstring
\ifcase#1\or \ifcase#2\or
\firstofoneargument \else
\gobbleoneargument \fi
@@ -6492,7 +6646,7 @@
\def\filterfromvalue#1#2#3% value max n
{\expandafter\doubleexpandafter\csname % we use the fact that an
\expandafter\ifx\csname#1\endcsname\relax % undefined cs has become \relax
- \strippedcsname\gobbleoneargument % which we then gobble here
+ \csstring\gobbleoneargument % which we then gobble here
\else
\dofilterfromstr{#2}{#3}%
\fi
@@ -6533,7 +6687,8 @@
{\the\measured}
\def\measured#1%
- {\dimexpr\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi\relax}
+ %{\dimexpr\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi\relax}
+ {\dimexpr\ifcsname\??measure#1\endcsname\lastnamedcs\else\zeropoint\fi\relax}
% #2 could be omitted, but we want to support spaces
%
@@ -6696,7 +6851,7 @@
\unexpanded\def\addvalue#1#2% cs item
{\ifcsname#1\endcsname\else\expandafter\let\csname#1\endcsname\empty\fi
\normalexpanded{\noexpand\addtocommalist{#2}\expandafter\noexpand\csname#1\endcsname}}
-
+
\def\unspaced#1%
{\syst_helpers_unspaced#1\end}
@@ -6799,7 +6954,7 @@
\unexpanded\def\getrawxparameters {\dogetparameters\dosetrawxvalue}
\unexpanded\def\globalgetrawparameters{\dogetparameters\dosetrawgvalue} % obsolete
-
+
%D Sort of obsolete:
\newcount\c_syst_helpers_mod
@@ -6813,14 +6968,14 @@
\unexpanded\def\DoMod#1by#2to#3{\dosetmodulo {#1}{#2}{#3}}
\unexpanded\def\DoDiv#1by#2to#3{\dosetdivision{#1}{#2}{#3}}
-
+
\def\syst_helpers_unprotected#1\par
{#1\protect}
\unexpanded\def\unprotected
{\unprotect
\syst_helpers_unprotected}
-
+
% awaiting the definitive implementation
% \ifdefined\resettimer \else
@@ -6834,11 +6989,17 @@
\let\elapsedseconds \elapsedtime
\newcount\c_syst_helpers_test_feature_n
+\chardef \c_syst_helpers_test_feature_m\zerocount
+
+\def\currentfeaturetest{\number\c_syst_helpers_test_feature_n}
\unexpanded\def\testfeature#1#2%
- {\def\syst_helpers_test_feature_step
+ {\chardef\c_syst_helpers_test_feature_m#1\relax
+ \def\syst_helpers_test_feature_step
{\advance\c_syst_helpers_test_feature_n\plusone
- \ifnum\c_syst_helpers_test_feature_n>#1\else#2\expandafter\syst_helpers_test_feature_step\fi}%
+ \ifnum\c_syst_helpers_test_feature_n>\c_syst_helpers_test_feature_m\else
+ #2\expandafter\syst_helpers_test_feature_step
+ \fi}%
\retestfeature}
\unexpanded\def\retestfeature % timer support is new per 10/5/2005
@@ -6848,7 +7009,7 @@
\resettimer
\c_syst_helpers_test_feature_n\zerocount
\syst_helpers_test_feature_step
- \writestatus\m!system{feature test done (\elapsedseconds s)}%
+ \writestatus\m!system{\number\c_syst_helpers_test_feature_m\space feature tests done (\elapsedseconds s)}%
\wait
\egroup}
@@ -6860,7 +7021,7 @@
\let\wait\relax
\testfeature{#1}{#2}%
\endgroup}
-
+
%D \macros
%D {freezedimenmacro}
%D
@@ -6872,7 +7033,7 @@
\unexpanded\def\freezedimenmacro#1%
{\edef#1{\the\dimexpr#1}}
-
+
%D The next macro negates a macro (dimension or number, or actually, whatever.
%D It's a typical example of \type {\if} usage:
%D
@@ -6882,12 +7043,12 @@
%D \stoptyping
\def\negated#1{\if-#1\else-#1\fi} % does only work in macros or text
-
+
\def\gobbleassigndimen#1\\{}
\def\assigndimen#1#2%
{\afterassignment\gobbleassigndimen#1=#2\zeropoint\\}
-
+
\unexpanded\def\appended#1#2#3{\expandafter#1\expandafter#2\expandafter{#2#3}}
\unexpanded\def\appendvalue #1{\expandafter\appended\expandafter \def\csname#1\endcsname}
\unexpanded\def\appendgvalue#1{\expandafter\appended\expandafter\gdef\csname#1\endcsname}
@@ -6899,7 +7060,7 @@
\unexpanded\def\prependvalue #1{\expandafter\prepended\expandafter \def\csname#1\endcsname}
\unexpanded\def\prependgvalue#1{\expandafter\prepended\expandafter\gdef\csname#1\endcsname}
-
+
%D \macros
%D {dowithrange}
%D
@@ -6958,7 +7119,7 @@
{\syst_helpers_process_word#1 \_e_o_w_}% no \unskip
\let\processword\relax
-
+
%D \macros
%D {startnointerference}
%D
@@ -6987,7 +7148,7 @@
{\csname#1\ifcsname#1#2\endcsname#2\else#3\fi\endcsname}
%D Signal. Some fonts have a char0 rendering so we need to make sure that it
-%D is not set in the font!
+%D is not set in the font! (THis will be overloaded)
\unexpanded\def\signalcharacter{\char\zerocount} % \zwj
@@ -7196,6 +7357,15 @@
%def\ntimes#1#2{\ifnum#2>\zerocount#1\ntimes{#1}{\numexpr#2-\plusone\relax}\fi} % 1.72
\def\ntimes#1#2{\clf_ntimes{#1}\numexpr#2\relax} % 0.33
+%D Not that useful:
+
+% \unexpanded\def\doifelsestringbefore{\clf_doifelsestringbefore}
+% \unexpanded\def\doifelsestringafter {\clf_doifelsestringafter}
+
+% Could have been useful but not faster that addtocommalist and also expansion mess:
+%
+% \def\additemtolist#1#2{\normalexpanded{\noexpand\clf_additemtolist{#1}{#2}}}
+
\protect \endinput
% \edef\choicetokenyes{+}
diff --git a/Master/texmf-dist/tex/context/base/syst-con.lua b/Master/texmf-dist/tex/context/base/mkiv/syst-con.lua
index 0fa685b2dab..0fa685b2dab 100644
--- a/Master/texmf-dist/tex/context/base/syst-con.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-con.lua
diff --git a/Master/texmf-dist/tex/context/base/syst-con.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-con.mkiv
index 17c40781977..17c40781977 100644
--- a/Master/texmf-dist/tex/context/base/syst-con.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-con.mkiv
diff --git a/Master/texmf-dist/tex/context/base/syst-fnt.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-fnt.mkiv
index 625b952b7e4..cacc5f51740 100644
--- a/Master/texmf-dist/tex/context/base/syst-fnt.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-fnt.mkiv
@@ -40,6 +40,12 @@
\def\currentspaceskip {\interwordspace\s!plus\interwordstretch\s!minus\interwordshrink\relax}
+\def\currentspacevalue {\the\interwordspace
+ \ifzeropt\interwordstretch\else{ plus }\the\interwordstretch\fi
+ \ifzeropt\interwordshrink \else{ minus }\the\interwordshrink \fi}
+
+\def\usedspacevalue {\ifzeropt\spaceskip\the\spaceskip\else\currentspacevalue\fi}
+
\def\mathstacktotal {\dimexpr\Umathstacknumup\scriptstyle+\Umathstackdenomdown\scriptstyle\relax}
\def\mathstackvgap {\Umathstackvgap\scriptstyle}
diff --git a/Master/texmf-dist/tex/context/base/syst-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-ini.mkiv
index dc5fddb63e1..dc8300e7f07 100644
--- a/Master/texmf-dist/tex/context/base/syst-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-ini.mkiv
@@ -63,6 +63,8 @@
\chardef\xetexengine = 2
\chardef\luatexengine = 3
+\chardef\statuswrite = 128
+
\ifx\directlua\undefined
\ifx\XeTeXversion\undefined
\ifx\pdftexversion\undefined
@@ -80,9 +82,9 @@
\ifnum\texengine=\luatexengine
% for historic reasons we keep some mkii code around
\else
- \immediate\write16{>>>}
- \immediate\write16{>>> only luatex is supported}
- \immediate\write16{>>>}
+ \immediate\write\statuswrite{>>>}
+ \immediate\write\statuswrite{>>> only luatex is supported}
+ \immediate\write\statuswrite{>>>}
\let\dump\relax
\expandafter\end
\fi
@@ -91,27 +93,19 @@
\directlua 0 { % this info is stored in the format
lua.name[0] = "main ctx instance"
- local extraprimitives = tex.extraprimitives
- local enableprimitives = tex.enableprimitives
- local core = extraprimitives("core")
- local btex = extraprimitives("tex")
- local etex = extraprimitives("etex")
- local pdftex = extraprimitives("pdftex")
- local luatex = extraprimitives("luatex")
- local omega = {
- "textdir", "pagedir", "mathdir", "pardir", "bodydir",
- "leftghost", "rightghost", "localleftbox", "localrightbox",
- "localinterlinepenalty", "localbrokenpenalty",
- }
- local aleph = {
- "boxdir", "pagebottomoffset", "pagerightoffset",
- }
- for _, subset in next, { etex, pdftex, luatex, omega, aleph } do
- enableprimitives("",subset)
- end
- for _, subset in next, { core, btex, etex, pdftex, luatex, omega, aleph } do
- enableprimitives("normal",subset)
- end
+
+ local coreprimitives = tex.extraprimitives("core")
+ local texprimitives = tex.extraprimitives("tex")
+ local etexprimitives = tex.extraprimitives("etex")
+ local luatexprimitives = tex.extraprimitives("luatex")
+
+ tex.enableprimitives("",etexprimitives)
+ tex.enableprimitives("",luatexprimitives)
+
+ tex.enableprimitives("normal",coreprimitives)
+ tex.enableprimitives("normal",texprimitives)
+ tex.enableprimitives("normal",etexprimitives)
+ tex.enableprimitives("normal",luatexprimitives)
}
%D \ETEX\ has a not so handy way of telling you the version number, i.e. the revision
@@ -171,8 +165,8 @@
\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 = 32767
-\countdef \c_syst_min_allocated_iochannel = 54 \c_syst_min_allocated_iochannel = -1
-\countdef \c_syst_max_allocated_iochannel = 55 \c_syst_max_allocated_iochannel = 16
+\countdef \c_syst_min_allocated_read = 54 \c_syst_min_allocated_read = -1
+\countdef \c_syst_max_allocated_read = 55 \c_syst_max_allocated_read = 16
\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 = 255
\countdef \c_syst_max_allocated_insert = 58 \c_syst_max_allocated_insert = 254
@@ -180,6 +174,8 @@
\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 % 127-1023 : private
+\countdef \c_syst_min_allocated_write = 63 \c_syst_min_allocated_write = 0 % luatex >= 0.82
+\countdef \c_syst_max_allocated_write = 64 \c_syst_max_allocated_write = 127 % luatex >= 0.82
\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
@@ -187,8 +183,8 @@
\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_iochannel
-\countdef \c_syst_last_allocated_write = 39 \c_syst_last_allocated_write = \c_syst_min_allocated_iochannel
+\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
@@ -226,8 +222,8 @@
\normalprotected\def\newmuskip {\syst_basics_allocate\c_syst_last_allocated_muskip \muskip \muskipdef \c_syst_max_allocated_register}
\normalprotected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \mathchardef\c_syst_max_allocated_register}
\normalprotected\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register}
-\normalprotected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \chardef \c_syst_max_allocated_iochannel}
-\normalprotected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \chardef \c_syst_max_allocated_iochannel}
+\normalprotected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \chardef \c_syst_max_allocated_read}
+\normalprotected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \chardef \c_syst_max_allocated_write}
\normalprotected\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \mathchardef\c_syst_max_allocated_register}
\normalprotected\def\newinsert {\syst_basics_allocate\c_syst_last_allocated_insertion\insert \chardef \c_syst_max_allocated_insert}
@@ -238,6 +234,8 @@
\let\newfam\newfamily
+\firstvalidlanguage\plusone
+
% 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.
@@ -260,7 +258,7 @@
%D as all engines now provide many registers we removed all traces.
\ifdefined\writestatus \else
- \normalprotected\def\writestatus#1#2{\immediate\write16{#1: #2}}
+ \normalprotected\def\writestatus#1#2{\immediate\write\statuswrite{#1: #2}}
\fi
\def\syst_basics_allocate_yes#1#2#3#4#5% last class method max name
@@ -302,7 +300,8 @@
%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.
-\normalprotected\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+%normalprotected\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+\normalprotected\def\newhelp#1#2{\newtoks#1#1\expandafter{\detokenize{#2}}}
%D \macros
%D {scratchcounter,
@@ -327,6 +326,13 @@
\newtoks \scratchtoksone \newtoks \scratchtokstwo \newtoks \scratchtoksthree
\newbox \scratchboxone \newbox \scratchboxtwo \newbox \scratchboxthree
+\newcount\scratchcounterfour \newcount\scratchcounterfive \newcount\scratchcountersix
+\newdimen \scratchdimenfour \newdimen \scratchdimenfive \newdimen \scratchdimensix
+\newskip \scratchskipfour \newskip \scratchskipfive \newskip \scratchskipsix
+\newmuskip\scratchmuskipfour \newmuskip\scratchmuskipfive \newmuskip\scratchmuskipsix
+\newtoks \scratchtoksfour \newtoks \scratchtoksfive \newtoks \scratchtokssix
+\newbox \scratchboxfour \newbox \scratchboxfive \newbox \scratchboxsix
+
%D \macros
%D {scratchwidth, scratchheight, scratchdepth, scratchoffset, scratchdistance}
%D
@@ -361,6 +367,9 @@
\newcount\scratchmx
\newcount\scratchmy
+\newcount\scratchmin
+\newcount\scratchmax
+
\newcount\scratchunicode
\newdimen\scratchleftskip
@@ -405,6 +414,7 @@
\chardef \plusten = 10
\chardef \plussixteen = 16
\chardef \plushundred = 100
+\chardef \plustwohundred = 200
\chardef \pluscxxvii = 127
\chardef \pluscxxviii = 128
\chardef \pluscclv = 255
@@ -454,17 +464,17 @@
%D Some expected plain variants follow. We don't reuse registers because we
%D don't want clashes.
-\newdimen\p@ \p@ \onepoint
-\newcount\m@ne \m@ne \minusone
-\newdimen\z@ \z@ \zeropoint
+\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
-\newbox \voidb@x
-\newtoks \toks@
+\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:
@@ -499,6 +509,7 @@
%D Let's test this one:
\newif\ifdone
+\newif\iffound
%D Potential primitive in \LUATEX:
@@ -819,7 +830,9 @@
%D
%D Handy for \ETEX-only usage (avoids making \type {\relax}'s:
-\def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi}
+% \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi}
+
+\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.
@@ -844,7 +857,8 @@
\def\space{ }
\def\empty{}
-\def\null {\hbox{}}
+
+\normalprotected\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.
@@ -943,90 +957,109 @@
\spanomit \advance\mscount\minusone
\repeat}
-%D The next section deals with selective definitions in later modules. One can of
-%D course use the \type {\texengine} number that we defined earlier instead.
-
-\bgroup \obeylines
- \gdef\pickupSOMETEX#1%
- {\expandafter\gdef\csname begin#1\endcsname{\bgroup\obeylines\dopickupSOMETEX{#1}}}
- \gdef\dopickupSOMETEX#1#2
- % {\egroup\immediate\write16{special code for #1 -> [line \the\inputlineno] \detokenize{#2}}}
- {\egroup}
-\egroup
-
-\let\endTEX \relax \def\beginTEX #1\endTEX {}
-\let\endETEX \relax \def\beginETEX #1\endETEX {}
-\let\endXETEX \relax \def\beginXETEX #1\endXETEX {}
-\let\endLUATEX\relax \def\beginLUATEX#1\endLUATEX{}
-\let\endOLDTEX\relax \def\beginOLDTEX#1\endOLDTEX{}
-\let\endNEWTEX\relax \def\beginNEWTEX#1\endNEWTEX{}
-
-\pickupSOMETEX{ETEX}
-
-\ifnum\texengine=\xetexengine
- \pickupSOMETEX{XETEX}
-\fi
-\ifnum\texengine=\luatexengine
- \pickupSOMETEX{LUATEX}
-\fi
-\ifnum\texengine<\xetexengine
- \pickupSOMETEX{OLDTEX}
-\else
- \pickupSOMETEX{NEWTEX}
-\fi
-
-%D \macros
-%D {bindprimitive}
-%D
-%D We can remap primitives (which is needed because of changes in for instance
-%D \PDFTEX).
-
-\def\bindprimitive#1 #2 % new old
- {\ifcsname#1\endcsname \else \ifcsname#2\endcsname
- \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname
- \fi \fi}
-
-%D Because \XETEX\ also implements some \PDFTEX\ functionality, we take care of this
-%D here instead of a dedicated module. Later modules need to handle the undefined
-%D cases.
-
-%D These messy checks will disappear.
-
-% new after 1.10, watch the change in prefix
-
-% \bindprimitive quitvmode ptexquitvmode
-% \bindprimitive noligatures ptexnoligatures
-% \bindprimitive setrandomseed ptexsetrandomseed
-% \bindprimitive uniformdeviate ptexuniformdeviate
-
-% \bindprimitive quitvmode pdfquitvmode
-% \bindprimitive noligatures pdfnoligatures
-% \bindprimitive setrandomseed pdfsetrandomseed
-% \bindprimitive uniformdeviate pdfuniformdeviate
-
-% \bindprimitive resettimer pdfresettimer
-% \bindprimitive elapsedtime pdfelapsedtime
-
-% new per 1.40
-
-% \bindprimitive ifprimitive ifpdfprimitive
-% \bindprimitive primitive pdfprimitive
-% \bindprimitive ifabsdim ifpdfabsdim
-% \bindprimitive ifabsnum ifpdfabsnum
-
-%D We need to make sure that we start up in \DVI\ mode, so, after testing for running
-%D \PDFTEX, we default to \DVI. Why?
-
-\pdfoutput \zerocount
-\pdfminorversion \plusseven
-\pdfgentounicode \plusone
-\pdfinclusioncopyfonts \plusone
-\pdfinclusionerrorlevel \zerocount
-\pdfdecimaldigits \plusten
-\pdfhorigin 1 true in
-\pdfvorigin \pdfhorigin
-\pdfimageresolution 300
-\pdfpkresolution 600
+%D Backend:
+
+% For the moment we define some \pdf... helpers but this will move to the backend
+% module after which the official interfaces have to be used. This is needed for
+% modules not made by ctx developers.
+
+\normalprotected\def\pdfliteral {\pdfextension literal }
+\normalprotected\def\pdfcolorstack {\pdfextension colorstack }
+\normalprotected\def\pdfsetmatrix {\pdfextension setmatrix }
+\normalprotected\def\pdfsave {\pdfextension save\relax}
+\normalprotected\def\pdfrestore {\pdfextension restore\relax}
+\normalprotected\def\pdfobj {\pdfextension obj }
+\normalprotected\def\pdfrefobj {\pdfextension refobj }
+\normalprotected\def\pdfannot {\pdfextension annot }
+\normalprotected\def\pdfstartlink {\pdfextension startlink }
+\normalprotected\def\pdfendlink {\pdfextension endlink\relax}
+\normalprotected\def\pdfoutline {\pdfextension outline }
+\normalprotected\def\pdfdest {\pdfextension dest }
+\normalprotected\def\pdfthread {\pdfextension thread }
+\normalprotected\def\pdfstartthread {\pdfextension startthread }
+\normalprotected\def\pdfendthread {\pdfextension endthread\relax}
+\normalprotected\def\pdfinfo {\pdfextension info }
+\normalprotected\def\pdfcatalog {\pdfextension catalog }
+\normalprotected\def\pdfnames {\pdfextension names }
+\normalprotected\def\pdfincludechars {\pdfextension includechars }
+\normalprotected\def\pdffontattr {\pdfextension fontattr }
+\normalprotected\def\pdfmapfile {\pdfextension mapfile }
+\normalprotected\def\pdfmapline {\pdfextension mapline }
+\normalprotected\def\pdftrailer {\pdfextension trailer }
+\normalprotected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
+
+% \chardef\pdfnofullbanner = 1
+% \chardef\pdfnofilename = 2
+% \chardef\pdfnopagenumber = 4
+% \chardef\pdfnoinfodict = 8
+% \chardef\pdfnocreator = 16
+% \chardef\pdfnocreationdate = 32
+% \chardef\pdfnomoddate = 64
+% \chardef\pdfnoproducer = 128
+% \chardef\pdfnotrapped = 256
+% \chardef\pdfnoid = 512
+
+\def\pdftexversion {\numexpr\pdffeedback version}
+\def\pdftexrevision {\pdffeedback revision}
+\def\pdflastlink {\numexpr\pdffeedback lastlink}
+\def\pdfretval {\numexpr\pdffeedback retval}
+\def\pdflastobj {\numexpr\pdffeedback lastobj}
+\def\pdflastannot {\numexpr\pdffeedback lastannot}
+\def\pdfxformname {\numexpr\pdffeedback xformname}
+\def\pdfcreationdate {\pdffeedback creationdate}
+\def\pdffontname {\numexpr\pdffeedback fontname}
+\def\pdffontobjnum {\numexpr\pdffeedback fontobjnum}
+\def\pdffontsize {\dimexpr\pdffeedback fontsize}
+\def\pdfpageref {\numexpr\pdffeedback pageref}
+\def\pdfcolorstackinit {\pdffeedback colorstackinit}
+
+\let\pdfxform \saveboxresource
+\let\pdflastxform \lastsavedboxresourceindex
+\let\pdfrefxform \useboxresource
+\let\pdfximage \saveimageresource
+\let\pdflastximage \lastsavedimageresourceindex
+\let\pdflastximagepages \lastsavedimageresourcepages
+\let\pdfrefximage \useimageresource
+\let\pdfsavepos \savepos
+\let\pdflastxpos \lastxpos
+\let\pdflastypos \lastypos
+
+\edef\pdfcompresslevel {\pdfvariable compresslevel} \pdfcompresslevel \plusnine
+\edef\pdfobjcompresslevel {\pdfvariable objcompresslevel} \pdfobjcompresslevel \plusone
+\edef\pdfdecimaldigits {\pdfvariable decimaldigits} \pdfdecimaldigits \plusfive
+\edef\pdfgamma {\pdfvariable gamma} \pdfgamma \plusthousand
+\edef\pdfimageresolution {\pdfvariable imageresolution} \pdfimageresolution 300
+\edef\pdfimageapplygamma {\pdfvariable imageapplygamma} \pdfimageapplygamma \zerocount
+\edef\pdfimagegamma {\pdfvariable imagegamma} \pdfimagegamma 2200
+\edef\pdfimagehicolor {\pdfvariable imagehicolor} \pdfimagehicolor \plusone
+\edef\pdfimageaddfilename {\pdfvariable imageaddfilename} \pdfimageaddfilename \plusone
+\edef\pdfpkresolution {\pdfvariable pkresolution} \pdfpkresolution 1200
+\edef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts} \pdfinclusioncopyfonts \plusone
+\edef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel} \pdfinclusionerrorlevel \zerocount
+\edef\pdfgentounicode {\pdfvariable gentounicode} \pdfgentounicode \plusone
+\edef\pdfpagebox {\pdfvariable pagebox} \pdfpagebox \zerocount
+\edef\pdfminorversion {\pdfvariable minorversion} \pdfminorversion \plusseven
+\edef\pdfuniqueresname {\pdfvariable uniqueresname} \pdfuniqueresname \zerocount
+\edef\pdfhorigin {\pdfvariable horigin} \pdfhorigin 1in
+\edef\pdfvorigin {\pdfvariable vorigin} \pdfvorigin \pdfhorigin
+\edef\pdflinkmargin {\pdfvariable linkmargin} \pdflinkmargin \zeropoint
+\edef\pdfdestmargin {\pdfvariable destmargin} \pdfdestmargin \zeropoint
+\edef\pdfthreadmargin {\pdfvariable threadmargin} \pdfthreadmargin \zeropoint
+\edef\pdfxformmargin {\pdfvariable xformmargin} \pdfxformmargin \zeropoint
+\edef\pdfpkfixeddpi {\pdfvariable pkfixeddpi} \pdfpkfixeddpi \plusone
+\edef\pdfignoreunknownimages {\pdfvariable ignoreunknownimages} \pdfignoreunknownimages \zerocount
+
+\edef\pdfpagesattr {\pdfvariable pagesattr}
+\edef\pdfpageattr {\pdfvariable pageattr}
+\edef\pdfpageresources {\pdfvariable pageresources}
+\edef\pdfxformattr {\pdfvariable xformattr}
+\edef\pdfxformresources {\pdfvariable xformresources}
+\edef\pdfpkmode {\pdfvariable pkmode}
+
+\edef\pdfsuppressoptionalinfo{\pdfvariable suppressoptionalinfo }
+\let \pdfsuppressptexinfo \pdfsuppressoptionalinfo
+\edef\pdftrailerid {\pdfvariable trailerid }
+\edef\pdfinfoomitdate {\pdfvariable suppressoptionalinfo \numexpr32+64\relax}
\normalprotected\def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount}
\normalprotected\def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine }
@@ -1034,8 +1067,7 @@
\normalpdfcompression
-\let\normalsetrandomseed \setrandomseed
-\let\normaluniformdeviate\uniformdeviate
+\outputmode \zerocount % we generate the format in this mode
%D Basic status stuff.
@@ -1051,28 +1083,6 @@
\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}
-% \ifnum\texengine=\xetexengine
-% \edef\xetexversion {\numexpr\XeTeXversion*100+(\expandafter\gobbleoneargument\XeTeXrevision-5)/10\relax}
-% \edef\xetexrevision {\the\numexpr(\expandafter\gobbleoneargument\XeTeXrevision-50)/100\relax}
-% \fi
-%
-% \ifcase\texengine
-% \def \texenginename {impossible}
-% \edef\texengineversion{0}
-% \or
-% \def \texenginename {pdfTeX}
-% \edef\texengineversion{\dividenumber{100}\pdftexversion.\modulonumber{100}\pdftexversion.\pdftexrevision}
-% \or
-% \def \texenginename {XeTeX}
-% \edef\texengineversion{\dividenumber{100}\xetexversion .\modulonumber{100}\xetexversion .\xetexrevision}
-% \or
-% \def \texenginename {LuaTeX}
-% \edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision}
-% \else
-% \def \texenginename {impossible}
-% \edef\texengineversion{0}
-% \fi
-
\def \texenginename {LuaTeX}
\edef\texengineversion{\dividenumber{100}\luatexversion.\modulonumber{100}\luatexversion.\luatexrevision}
@@ -1091,13 +1101,12 @@
%D Handy.
-\suppresslongerror \plusone
-\suppressoutererror \plusone
-\suppressmathparerror \plusone
+\suppresslongerror \plusone % \let\suppresslongerror \relax
+\suppressoutererror \plusone % \let\suppressoutererror \relax
+\suppressmathparerror \plusone % \let\suppressmathparerror \relax
+\suppressifcsnameerror\plusone % \let\suppressifcsnameerror\relax
-\ifdefined\matheqnogapstep % for now
- \matheqnogapstep \zerocount
-\fi
+\matheqnogapstep \zerocount % fr now
%D While cleaning this code up a bit I was listening to Heather Nova's \CD\ Redbird.
%D The first song on that \CD\ ends with a few lines suitable for ending this
@@ -1126,11 +1135,25 @@
\normalprotected\def\installsystemnamespace#1%
{\ifcsname ??#1\endcsname
- \immediate\write16{fatal error: duplicate system namespace '#1'}%
+ \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}%
\fi}
+%D It makes more sense to have these here:
+
+\let\normalsuperscript\Usuperscript
+\let\normalsubscript \Usubscript
+\let\normalstartimath \Ustartmath
+\let\normalstopimath \Ustopmath
+\let\normalstartdmath \Ustartdisplaymath
+\let\normalstopdmath \Ustopdisplaymath
+
+%D For now:
+
+\ifdefined\protrusionboundary \else \let\protrusionboundary\boundary \fi
+\ifdefined\wordboundary \else \let\wordboundary \noboundary \fi
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/syst-lua.lua
index a6665f4104a..422f57a0092 100644
--- a/Master/texmf-dist/tex/context/base/syst-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-lua.lua
@@ -113,57 +113,6 @@ function commands.doifelsespaces(str)
end
end
-local s = lpegtsplitat(",")
-local h = { }
-
-local function doifelsecommon(a,b) -- often the same test
- local ha = h[a]
- local hb = h[b]
- if not ha then
- ha = lpegmatch(s,a)
- h[a] = ha
- end
- if not hb then
- hb = lpegmatch(s,b)
- h[b] = hb
- end
- local na = #ha
- local nb = #hb
- for i=1,na do
- for j=1,nb do
- if ha[i] == hb[j] then
- ctx_firstoftwoarguments()
- return
- end
- end
- end
- ctx_secondoftwoarguments()
-end
-
-local function doifelseinset(a,b)
- local hb = h[b]
- if not hb then hb = lpegmatch(s,b) h[b] = hb end
- for i=1,#hb do
- if a == hb[i] then
- ctx_firstoftwoarguments()
- return
- end
- end
- ctx_secondoftwoarguments()
-end
-
-implement {
- name = "doifelsecommon",
- arguments = two_strings,
- actions = doifelsecommon
-}
-
-implement {
- name = "doifelseinset",
- arguments = two_strings,
- actions = doifelseinset
-}
-
local pattern = lpeg.patterns.validdimen
function commands.doifelsedimenstring(str)
@@ -194,18 +143,6 @@ implement {
actions = os.execute -- wrapped in sandbox
}
--- function commands.write(n,str)
--- if n == 18 then
--- os.execute(str)
--- elseif n == 16 then
--- -- immediate
--- logs.report(str)
--- else
--- -- at the tex end we can still drop the write / also delayed vs immediate
--- context.writeviatex(n,str)
--- end
--- end
-
implement {
name = "doifelsesame",
arguments = two_strings,
diff --git a/Master/texmf-dist/tex/context/base/syst-lua.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-lua.mkiv
index 5e82a9ea9e7..b5001ab6253 100644
--- a/Master/texmf-dist/tex/context/base/syst-lua.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-lua.mkiv
@@ -53,49 +53,11 @@
\def\ui_ft#1#2{#1}
\def\ui_st#1#2{#2}
-%D Let's bring this under \LUA\ (and therefore \MKIV\ sandbox) control:
-
-% \setnewconstant\c_syst_write 18
-%
-% \unexpanded\def\write#1#% so we can handle \immediate
-% {\ifnum#1=\c_syst_write
-% \expandafter\syst_execute
-% \else
-% \normalwrite#1%
-% \fi}
-%
-% \unexpanded\def\syst_execute#1%
-% {\ctxlua{os.execute(\!!bs#1\!!es)}}
%D But as we only use write 16 we could as well do all in \LUA\
%D and ignore the rest. Okay, we still can do writes here but only
%D when not blocked.
-% Nicer would be if we could just disable write 18 and keep os.execute
-% which in fact we can do by defining write18 as macro instead of
-% primitive ... todo.
-
-% \unexpanded\def\write#1#%
-% {\syst_write{#1}}
-%
-% \def\syst_write#1#2%
-% {\ctxcommand{write(\number#1,\!!bs\normalunexpanded{#2}\!!es)}}
-%
-% \unexpanded\def\writeviatex#1#2%
-% {\ifx\normalwrite\relax\else
-% \normalwrite#1{#2}%
-% \fi}
-
-% we have no way yet to pickup \immediate unless we redefine it
-% we assume immediate execution
-
\let\syst_write_execute\clf_execute % always {...}
-\unexpanded\def\write#1#%
- {\ifnum#1=18
- \expandafter\syst_write_execute
- \else
- \normalwrite#1%
- \fi}
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-mes.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-mes.mkiv
index 4cd36e24bdf..4cd36e24bdf 100644
--- a/Master/texmf-dist/tex/context/base/syst-mes.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-mes.mkiv
diff --git a/Master/texmf-dist/tex/context/base/syst-pln.mkiv b/Master/texmf-dist/tex/context/base/mkiv/syst-pln.mkiv
index 2481131209f..2481131209f 100644
--- a/Master/texmf-dist/tex/context/base/syst-pln.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/syst-pln.mkiv
diff --git a/Master/texmf-dist/tex/context/base/tabl-com.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-com.mkiv
index e9008636886..e9008636886 100644
--- a/Master/texmf-dist/tex/context/base/tabl-com.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-com.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/tabl-ltb.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-ltb.mkiv
new file mode 100644
index 00000000000..b0e3f52e439
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-ltb.mkiv
@@ -0,0 +1,780 @@
+%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
+
+\unexpanded\def\setuplinetable
+ {\dotripleempty\tabl_lines_setup}
+
+\def\tabl_lines_setup[#1][#2][#3]%
+ {\ifthirdargument
+ \getparameters[\??linetable#1:#2][#3]%
+ \else\ifsecondargument
+ \getparameters[\??linetable#1:][#2]%
+ \else
+ \getparameters[\??linetable][#1]%
+ \fi\fi}
+
+\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=]
+
+\def\linetableparameter#1%
+ {\begincsname\??linetable#1\endcsname}
+
+\unexpanded\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}
+
+\let\doiflinetablecparameterelse\doifelselinetablecparameter
+
+\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}
+
+\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}
+
+\unexpanded\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}
+
+\unexpanded\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}
+
+\unexpanded\def\startlinetablecell
+ {\dosingleempty\tabl_lines_start_cell}
+
+\def\tabl_lines_step_cell
+ {\advance\scratchdimen\linetablecparameter\c!width
+ \global\advance \c_tabl_lines_column\plusone
+ \advance\scratchskip \linetablecparameter\c!distance}
+
+\def\tabl_lines_start_cell[#1]%
+ {\global\setbox\b_tabl_lines_cell\hbox\bgroup
+ \iffirstargument
+ \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}
+
+\unexpanded\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}
+
+\def\tabl_lines_wrap_up_auto
+ {\edef\p_height{\linetablerparameter{x\c!height}}%
+ \edef\p_depth {\linetablerparameter{x\c!depth }}%
+ \hbox
+ {\blackrule
+ [ \c!color=\linetablecparameter\c!backgroundcolor,
+ \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_line
+ {\backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}}
+
+\def\tabl_lines_save_part
+ {\global\setbox\tablebox\c_tabl_lines_part
+ \ifnum\c_tabl_lines_part=\zerocount
+ \box\scratchbox % just storing
+ \else
+ \vbox
+ {\ifvoid\tablebox\c_tabl_lines_part\else\unvbox\tablebox\c_tabl_lines_part\fi
+ \doif{\linetablerparameter\c!background}\v!color
+ {\backgroundline[\linetablerparameter\c!backgroundcolor]}%
+ {\box\scratchbox}% is also arg to \backgroundline
+ \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
+ \hbox 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
+ \else\ifdim\d_tabl_lines_width>\hsize
+ \donetrue
+ \else
+ \global\advance\d_tabl_lines_width\scratchskip
+ \ifdim\d_tabl_lines_width>\hsize % ?
+ \donetrue
+ \fi
+ \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}%
+ \hskip\scratchskip
+ \fi
+ \fi}
+
+\unexpanded\def\startlinetablerun % to do: quit when nested
+ {\bgroup
+ \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
+ \let\BR\tabl_lines_BR
+ \let\ER\tabl_lines_ER
+ \let\BH\tabl_lines_BR
+ \let\EH\tabl_lines_ER
+ \let\BC\tabl_lines_BC
+ \let\EC\tabl_lines_EC
+ \let\NC\tabl_lines_NC
+ \let\NR\tabl_lines_NR
+ \tabl_lines_flush_head}
+
+\unexpanded\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}
+
+\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
+ \else\ifdim\csname#1\number#3\endcsname<#2\b_tabl_lines_cell
+ \the#2\b_tabl_lines_cell
+ \else
+ \csname#1\number#3\endcsname
+ \fi\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}
+
+\unexpanded\def\tabl_lines_BR
+ {\dosingleempty\tabl_lines_BR_indeed}
+
+\def\tabl_lines_BR_indeed[#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
+ \else\ifx\p_height\v!fit
+ \c_tabl_lines_hmode \plusone
+ \else\ifx\p_height\v!line
+ \c_tabl_lines_hmode \plustwo
+ \else
+ \d_tabl_lines_height\dimexpr\p_height-\strutdepth\relax
+ \fi\fi\fi
+ \tabl_lines_start_part}
+
+\unexpanded\def\tabl_lines_BC
+ {\startlinetablecell}
+
+\unexpanded\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}
+
+\unexpanded\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}
+
+\unexpanded\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
+
+\unexpanded\def\tabl_lines_NR
+ {\stoplinetablecell % dummy
+ \tabl_lines_ER}
+
+\unexpanded\def\startlinetable
+ {\startlinetablerun}
+
+\unexpanded\def\stoplinetable
+ {\stoplinetablerun}
+
+\unexpanded\def\startlinetableanalysis
+ {\bgroup
+ \settrue\c_tabl_lines_preroll
+ \settrialtypesetting
+ \startlinetablerun}
+
+% \unexpanded\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
+
+\unexpanded\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
+
+\let\stoplinetablehead\relax
+
+\unexpanded\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}
+
+\unexpanded\def\tabl_lines_BH
+ {\ifx\EC\relax
+ % signal, grabbing lines
+ \else
+ \t_tabl_lines_head\emptytoks
+ \fi
+ \pushmacro\BC
+ \pushmacro\EC
+ \def\BC##1\EC{\appendtoks##1\to\t_tabl_lines_head}%
+ \let\EC\relax} % signal
+
+\unexpanded\def\tabl_lines_EH
+ {\popmacro\EC
+ \popmacro\BC
+ \expandafter\startlinetablehead\the\t_tabl_lines_head\stoplinetablehead}
+
+\let\startlinetablebody\relax
+\let\stoplinetablebody \relax
+
+\unexpanded\def\processlinetablebuffer
+ {\dosingleempty\tabl_lines_process_buffer}
+
+\def\tabl_lines_process_buffer[#1]%
+ {\bgroup
+ \let\startlinetable\relax
+ \let\stoplinetable \relax
+ \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis
+ \startlinetablerun \getbuffer[#1]\stoplinetablerun
+ \egroup}
+
+\unexpanded\def\processlinetablefile
+ {\dosingleempty\tabl_lines_process_file}
+
+\def\tabl_lines_process_file#1% maybe accept #1 as well as [#1]
+ {\bgroup
+ \let\startlinetable\relax
+ \let\stoplinetable \relax
+ \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis
+ \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun
+ \egroup}
+
+\protect
+
+\continueifinputfile{tabl-ltb.mkiv}
+
+\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
+
+\setupcolors[state=start]
+
+\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/Master/texmf-dist/tex/context/base/tabl-mis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-mis.mkiv
index 9a0f13853ac..8db31b31d7a 100644
--- a/Master/texmf-dist/tex/context/base/tabl-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-mis.mkiv
@@ -134,7 +134,8 @@
\def\typo_paragraphs_setup[#1][#2][#3]% we are downward compatible with [each] and [1,3]
{\ifthirdargument
\doifelse{#2}\v!each
- {\typo_paragraphs_setup_saved[#1][#3]}
+ {\dorecurse{\namedparagraphsparameter{#1}\c!n}%
+ {\normalexpanded{\typo_paragraphs_setup_saved[#1:\recurselevel]}[#3]}}%
{\def\typo_paragraphs_setup_step##1{\typo_paragraphs_setup_saved[#1:##1][#3]}%
\processcommalist[#2]\typo_paragraphs_setup_step}%
\else\ifsecondargument
@@ -273,7 +274,7 @@
\fi
\paragraphsparameter\c!bottom
\egroup % (2)
- \dontleavehmode\hbox{\raise\strutheight\box\scratchbox}%
+ \dontleavehmode\hpack{\raise\strutheight\box\scratchbox}%
\endgroup}
\def\typo_paragraphs_separator
diff --git a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-ntb.mkiv
index fcf8ac31231..78e867546b4 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-ntb.mkiv
@@ -290,9 +290,9 @@
\def\tabl_ntb_let_dis#1{\global\expandafter\let\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
\def\tabl_ntb_let_aut#1{\global\expandafter\let\csname\??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_get_wid#1{\ifcsname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
-\def\tabl_ntb_get_hei#1{\ifcsname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
-\def\tabl_ntb_get_dis#1{\ifcsname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
+\def\tabl_ntb_get_wid#1{\ifcsname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\lastnamedcs\else\zeropoint\fi}
+\def\tabl_ntb_get_hei#1{\ifcsname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\lastnamedcs\else\zeropoint\fi}
+\def\tabl_ntb_get_dis#1{\ifcsname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\lastnamedcs\else\zeropoint\fi}
\def\tabl_ntb_get_aut#1{\csname \??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname}
\def\tabl_ntb_tag_pattern#1#2{\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2}
@@ -320,7 +320,8 @@
\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}
+%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}
+\def\tabl_ntb_get_ref #1#2{\begincsname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname}
\def\tabl_ntb_set_spn #1{\expandafter\let\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname \!!plusone}
\def\tabl_ntb_spn_doifelse#1{\ifcase0\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname\relax % could be inlined
@@ -404,8 +405,11 @@
\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]{\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]}
\setvalue{\??naturaltablesetupthree \v!row}[#1]{\tabl_ntb_setup_xy [\c!y]}
\setvalue{\??naturaltablesetupthree \v!column}[#1]{\tabl_ntb_setup_xy [\c!x]}
@@ -435,7 +439,7 @@
\ifcsname\??naturaltableset\m_tabl_tbl_level:#1\endcsname
\def\tabl_ntb_parameters_get[##1]%
{\setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[##1,#2]}}%
- \getvalue{\??naturaltableset\m_tabl_tbl_level:#1}%
+ \csname\??naturaltableset\m_tabl_tbl_level:#1\endcsname
\let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal
\else
\setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}%
@@ -515,78 +519,78 @@
% saves tokens (no speed gain)
\edef\m_tabl_ntb_prefix{\??naturaltableset\m_tabl_tbl_level:}%
% each each
- \csname\m_tabl_ntb_prefix\c!x\v!each\c!y\v!each\endcsname
- \csname\m_tabl_ntb_prefix\c!y\v!each\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!each\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!each\c!y\v!each\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!y\v!each\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!each\endcsname
% odd even
- \csname\m_tabl_ntb_prefix\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
% row/col number combinations
- \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname
\naturaltablelocalparameter\c!extras
\letnaturaltablelocalparameter\c!extras\relax % new, see x-fo
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname
\naturaltablelocalparameter\c!extras
\letnaturaltablelocalparameter\c!extras\relax % new, see x-fo
% first/last combinations
\ifnum\m_tabl_ntb_positive_row=\plusone
- \csname\m_tabl_ntb_prefix\c!y\v!first\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!y\v!first\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname
\fi
\ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!x\v!first\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname
\fi
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax
- \csname\m_tabl_ntb_prefix\c!y\v!last\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!y\v!last\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname
\fi
\ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!x\v!last\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname
\fi
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!last\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!last\endcsname
\fi\fi
\ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!first\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!first\endcsname
\fi\fi
\ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!first\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!first\endcsname
\fi\fi
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!last\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!last\endcsname
\fi\fi
% special case: two rows and last row : two&first and two&last (round corners)
\ifnum\c_tabl_ntb_maximum_row=\plustwo\relax
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!two\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!two\endcsname
\fi\fi
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!two\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!two\endcsname
\fi\fi
\fi
\ifnum\tabl_ntb_get_col\m_tabl_ntb_positive_row\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax % top span over whole width
\ifnum\m_tabl_ntb_positive_row=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!first\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!first\endcsname
\fi
\ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax
- \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!last\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!last\endcsname
\fi
\fi
% header things
\ifnum#1>\c_tabl_ntb_n_of_hdnx_lines\else
- \ifcsname\m_tabl_ntb_prefix\v!header\v!each \endcsname\csname\m_tabl_ntb_prefix\v!header\v!each \endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\v!header\v!each\endcsname
+ \begincsname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname
\fi
% explicit cells
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname
+ \begincsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname
% local
- \ifcsname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\fi
+ \begincsname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname
% done
\relax}
@@ -873,15 +877,9 @@
\let\tabl_ntb_setup_section\relax}
\def\tabl_ntb_preset_parameters% each odd|even level / can be sped up but only once per table
- {\ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname
- \fi
- \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname % hm
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname
- \fi
- \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname % hm
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname
- \fi}
+ {\begincsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname
+ \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}
@@ -1812,10 +1810,23 @@
%
% nilling the background makes a run upto 25% faster
+% \def\tabl_ntb_cell_process_a_check_span_one
+% {\ifautosqueezeTBLspan
+% \edef\p_width{\naturaltablelocalparameter\c!width}%
+% \csname\??naturaltablesqueeze\ifcsname\??naturaltablesqueeze\p_width\endcsname\p_width\fi\endcsname
+% \else
+% \donetrue
+% \fi
+% \ifdone % brr, 0
+% \ifnum\scratchcounter>\plusone
+% \tabl_ntb_set_spn\c_tabl_ntb_col
+% \fi
+% \fi}
+
\def\tabl_ntb_cell_process_a_check_span_one
{\ifautosqueezeTBLspan
\edef\p_width{\naturaltablelocalparameter\c!width}%
- \csname\??naturaltablesqueeze\ifcsname\??naturaltablesqueeze\p_width\endcsname\p_width\fi\endcsname
+ \ifcsname\??naturaltablesqueeze\p_width\endcsname\lastnamedcs\else\donefalse\fi
\else
\donetrue
\fi
@@ -2090,11 +2101,17 @@
\let\eTDs\relax
\let\eTRs\relax
+% \unexpanded\def\bTDs[#1]#2\eTDs
+% {\normalexpanded{\bTD[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTD}
+%
+% \unexpanded\def\bTRs[#1]#2\eTRs
+% {\normalexpanded{\bTR[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTR}
+
\unexpanded\def\bTDs[#1]#2\eTDs
- {\normalexpanded{\bTD[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTD}
+ {\normalexpanded{\bTD[\begincsname\??naturaltablesetup#1\endcsname]}#2\eTD}
\unexpanded\def\bTRs[#1]#2\eTRs
- {\normalexpanded{\bTR[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTR}
+ {\normalexpanded{\bTR[\begincsname\??naturaltablesetup#1\endcsname]}#2\eTR}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/tabl-nte.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-nte.mkiv
index af74a2abe9b..af74a2abe9b 100644
--- a/Master/texmf-dist/tex/context/base/tabl-nte.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-nte.mkiv
diff --git a/Master/texmf-dist/tex/context/base/tabl-pln.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-pln.mkiv
index 3638006c79a..3638006c79a 100644
--- a/Master/texmf-dist/tex/context/base/tabl-pln.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-pln.mkiv
diff --git a/Master/texmf-dist/tex/context/base/tabl-tab.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-tab.mkiv
index 5add1c684a0..e238447b952 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tab.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-tab.mkiv
@@ -12,30 +12,31 @@
\writestatus{loading}{ConTeXt Table Macros / TaBlE Embedding}
-% Todo: consistent namespace and get rid of not used code
-
-% 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.
+% 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}.
+% 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.
+% 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\tablehasleftspacing
-\newconditional\tablehasrightspacing
+\newconditional\c_tabl_table_spacing_left
+\newconditional\c_tabl_table_spacing_right
-\newdimen\tablelinethicknessunit
-\newdimen\tablestrutunit
-\newskip \tableintercolumnspaceunit
-\newdimen\tablecolumnwidthunit
-\newdimen\tablekernunit
+\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}
@@ -48,17 +49,17 @@
\newtoks\everytable
\newtoks\everytableparbox
-\unexpanded\def\dotablebeginparbox#1%
+\unexpanded\def\tabl_table_begin_par_box#1%
{\setbox\scratchbox\vtop\bgroup % \setbox added
\hsize#1\relax
\dontcomplain
- \dorestoretablelineskips
+ \tabl_table_restore_lineskips
\normalbaselines
\let~\fixedspace
- \blank[\v!disable]% % added
+ \inhibitblank % \blank[\v!disable]% % added
\the\everytableparbox}
-\unexpanded\def\dotableendparbox
+\unexpanded\def\tabl_table_end_par_box
{\removelastskip % itemize or so
\endgraf
\ifnum\prevgraf>\zerocount % we want at least
@@ -106,8 +107,8 @@
\newif \if!taOnceOnlyTabskip
\def\!thToksEdef#1#2%
- {\edef\!ttemp{#2}%
- #1\expandafter{\!ttemp}%
+ {\edef\tempstring{#2}%
+ #1\expandafter{\tempstring}%
\ignorespaces}
\def\!thLoop#1\repeat
@@ -115,10 +116,10 @@
\!thIterate
\let\!thIterate\relax}
-\def\dobegintableformat
+\def\tabl_table_begin_format
{\!taPreamble\emptytoks
\!taColumnNumber\zerocount
- \scratchskip\tableintercolumnspaceunit
+ \scratchskip\s_tabl_table_inter_column_space_unit
\multiply\scratchskip\tableintercolumnspacefactor
\divide\scratchskip\plustwo
\!taRuleColumnTemplate\expandafter{\expandafter\tabskip\the\scratchskip}%
@@ -131,26 +132,29 @@
\def\!tfSetWidth
{\ifx\!tfRowOfWidths\empty % true if no prior "w" keys
\ifnum\!taColumnNumber>\zerocount % true if "w" key is to right of first "|"
- \begingroup % RowOfWidths={&\omit || n copies of &\omit&\omit}, where n = number of column to the left of this one
- \scratchcounter\plusone
- \aftergroup \edef \aftergroup \!tfRowOfWidths \aftergroup {%
- \aftergroup &\aftergroup \omit
+ \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
+ \advance\scratchcounter\plusone
+ \aftergroup\!tfAOAO
\repeat
\aftergroup}%
\endgroup
\fi
\fi
- \ifx[\!ttemp % \!tgGetValue sets \!ttemp = token after w
+ \ifx[\tempstring % \!tgGetValue sets \tempstring = token after w
\expandafter\!tfSetWidthText
\else
\expandafter\!tfSetWidthValue
\fi}
-\def\!tfAOAO{&\omit&\omit}
+\def\!tfAOAO{\aligntab\omit\aligntab\omit}
\def\!tfSetWidthText[#1]%
{\def\!tfWidthText{#1}%
@@ -159,7 +163,7 @@
\def\!tfSetWidthValue
{\!taMinimumColumnWidth=
\ifnum\!tgCode=\plusone
- \ifx\!tgValue\empty \tablecolumnwidthfactor \else \!tgValue \fi \tablecolumnwidthunit
+ \ifx\!tgValue\empty \tablecolumnwidthfactor \else \!tgValue \fi \d_tabl_table_column_width_unit
\else
\!tgValue
\fi
@@ -168,7 +172,7 @@
\def\!tfSetTabskip
{\ifnum\!tgCode=\plusone
- \scratchskip\tableintercolumnspaceunit
+ \scratchskip\s_tabl_table_inter_column_space_unit
\multiply\scratchskip \ifx\!tgValue\empty\tableintercolumnspacefactor\else\!tgValue\fi
\else
\scratchskip\!tgValue
@@ -190,18 +194,18 @@
{\!thToksEdef\!taRuleColumnTemplate
{\hfil
\vrule
- \noexpand\!!width
+ \noexpand\s!width
\ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
- \tablevrulethicknessfactor
+ \c_tabl_table_vrule_thickness_factor
\else
\!tgValue
\fi
- \tablelinethicknessunit
+ \d_tabl_table_line_thickness_unit
\else
\!tgValue
\fi
- ####%
+ \alignmark\alignmark\alignmark\alignmark
\hfil
\the\!taRuleColumnTemplate}%
\!tfAdjoinPriorColumn}
@@ -223,13 +227,13 @@
\!tfUpdateRowOfWidths
\fi
\!thToksEdef\!taDataColumnTemplate{\the\!taLeftGlue\the\!taDataColumnTemplate\the\!taRightGlue}%
- \!thToksEdef\!taPreamble{\the\!taPreamble&\the\!taDataColumnTemplate&\the\!taRuleColumnTemplate}%
+ \!thToksEdef\!taPreamble{\the\!taPreamble\aligntab\the\!taDataColumnTemplate\aligntab\the\!taRuleColumnTemplate}%
\fi
\advance \!taColumnNumber \plusone
\if!taOnceOnlyTabskip
- \!thToksEdef\!taDataColumnTemplate{####\tabskip \the\!taLastRegularTabskip}%
+ \!thToksEdef\!taDataColumnTemplate{\alignmark\alignmark\alignmark\alignmark\tabskip\the\!taLastRegularTabskip}%
\else
- \!taDataColumnTemplate{##}%
+ \!taDataColumnTemplate{\alignmark\alignmark}%
\fi
\!taRuleColumnTemplate\emptytoks
\!taLeftGlue{\hfil}%
@@ -245,12 +249,12 @@
\fi
\edef\!tfRowOfWidths
{\!tfRowOfWidths
- &%
+ \aligntab
\omit
\ifdim \!taMinimumColumnWidth>\zeropoint
\hskip \the\!taMinimumColumnWidth
\fi
- &
+ \aligntab
\omit}}
\def\!tfComputeMinColWidth
@@ -261,27 +265,32 @@
\!taMinimumColumnWidth=\wd0 }
\def\!tfFinishFormat
- {\!thToksEdef\!taPreamble{####\tabskip\tablelefttabskip&\the\!taPreamble \tabskip\tablerighttabskip&####\tabskip\zeropoint\cr}
+ {\!thToksEdef\!taPreamble{%
+ \alignmark\alignmark\alignmark\alignmark\tabskip\tablelefttabskip
+ \aligntab
+ \the\!taPreamble\tabskip\tablerighttabskip
+ \aligntab
+ \alignmark\alignmark\alignmark\alignmark\tabskip\zeropoint\cr}
\!taBeginFormatfalse
\!ttDoHalign}
-\def\dotablereformat[#1]% will become local
+\def\tabl_table_reformat[#1]% will become local
{\omit
- \!taDataColumnTemplate{##}%
+ \!taDataColumnTemplate{\alignmark\alignmark}%
\!taLeftGlue\emptytoks
\!taRightGlue\emptytoks
\begingroup
- \@@useotherbar
- \expanded{\endgroup\noexpand\doreadtableformatkeys#1]}}% appear in a \dotablereformat cmd; this is here as a safeguard.
+ \tabl_table_use_bar
+ \expanded{\endgroup\noexpand\doreadtableformatkeys#1]}}% appear in a \tabl_table_reformat cmd; this is here as a safeguard.
\appendtoks
- \let\ReFormat\dotablereformat
+ \let\ReFormat\tabl_table_reformat
\to \everytable
\def\!tfEndReFormat
{\!tfReFormat}
-\appendtoks \dotableparalignment \to \everytableparbox
+\appendtoks \tabl_table_paralignment \to \everytableparbox
\def\!tfReFormat#1%
{\the \!taLeftGlue
@@ -291,10 +300,10 @@
\def\!tgGetValue#1%
{\def\!tgReturn{#1}%
- \futurelet\!ttemp\!tgCheckForParen}
+ \futurelet\tempstring\!tgCheckForParen}
\def\!tgCheckForParen%
- {\ifx\!ttemp (%
+ {\ifx\tempstring (%
\expandafter \!tgDoParen
\else
\expandafter \!tgCheckForSpace
@@ -308,7 +317,7 @@
\def\!tgCheckForSpace
{\def\!tgCode{1}%
\let\!tgValue\empty
- \ifx\!ttemp\!thSpaceToken
+ \ifx\tempstring\!thSpaceToken
\expandafter \!tgReturn
\else
\expandafter \!tgCheckForDigit
@@ -316,16 +325,16 @@
% \def\!tgCheckForDigit
% {\donefalse
-% \ifx 0\!ttemp \donetrue
-% \else\ifx 1\!ttemp \donetrue
-% \else\ifx 2\!ttemp \donetrue
-% \else\ifx 3\!ttemp \donetrue
-% \else\ifx 4\!ttemp \donetrue
-% \else\ifx 5\!ttemp \donetrue
-% \else\ifx 6\!ttemp \donetrue
-% \else\ifx 7\!ttemp \donetrue
-% \else\ifx 8\!ttemp \donetrue
-% \else\ifx 9\!ttemp \donetrue
+% \ifx 0\tempstring \donetrue
+% \else\ifx 1\tempstring \donetrue
+% \else\ifx 2\tempstring \donetrue
+% \else\ifx 3\tempstring \donetrue
+% \else\ifx 4\tempstring \donetrue
+% \else\ifx 5\tempstring \donetrue
+% \else\ifx 6\tempstring \donetrue
+% \else\ifx 7\tempstring \donetrue
+% \else\ifx 8\tempstring \donetrue
+% \else\ifx 9\tempstring \donetrue
% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
% \ifdone
% \expandafter \!tgGetNumber
@@ -333,13 +342,13 @@
% \expandafter \!tgReturn
% \fi}
-\def\!tgCheckForDigit % less tokens:
+\def\!tgCheckForDigit % less tokens: (could be an ifcsname)
{\donetrue
- \ifx 0\!ttemp \else \ifx 1\!ttemp \else
- \ifx 2\!ttemp \else \ifx 3\!ttemp \else
- \ifx 4\!ttemp \else \ifx 5\!ttemp \else
- \ifx 6\!ttemp \else \ifx 7\!ttemp \else
- \ifx 8\!ttemp \else \ifx 9\!ttemp \else
+ \ifx 0\tempstring \else \ifx 1\tempstring \else
+ \ifx 2\tempstring \else \ifx 3\tempstring \else
+ \ifx 4\tempstring \else \ifx 5\tempstring \else
+ \ifx 6\tempstring \else \ifx 7\tempstring \else
+ \ifx 8\tempstring \else \ifx 9\tempstring \else
\donefalse
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\ifdone
@@ -349,7 +358,7 @@
\fi}
% \def\!tgCheckForDigit % does not work
-% {\relax\doifnumberelse\!ttemp\!tgGetNumber\!tgReturn}
+% {\relax\doifnumberelse\tempstring\!tgGetNumber\!tgReturn}
\def\!tgGetNumber {\afterassignment\!tgGetNumberA\scratchcounter=}
\def\!tgGetNumberA{\edef\!tgValue{\the\scratchcounter}\!tgReturn}
@@ -357,21 +366,21 @@
\def\!tgSetUpParBox
{\normalexpanded
{\noexpand \doreadtableformatkeys
- b{\dotablebeginparbox
+ b{\tabl_table_begin_par_box
{\ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
\tablecolumnwidthfactor
\else
\!tgValue
\fi
- \tablecolumnwidthunit
+ \d_tabl_table_column_width_unit
\else
\!tgValue
\fi}}%
- a{\dotableendparbox}}}
+ a{\tabl_table_end_par_box}}}
\def\!tgInsertKern
- {\edef\!ttemp
+ {\edef\tempstring
{\kern
\ifnum \!tgCode=\plusone
\ifx \!tgValue\empty
@@ -379,21 +388,21 @@
\else
\!tgValue
\fi
- \tablekernunit
+ \d_tabl_table_kern_unit
\else
\!tgValue
\fi}%
- \edef\!ttemp
+ \edef\tempstring
{\noexpand\doreadtableformatkeys
- \ifconditional\tablehasleftspacing
- b{\!ttemp}
+ \ifconditional\c_tabl_table_spacing_left
+ b{\tempstring}
\fi
- \ifconditional\tablehasrightspacing
- a{\!ttemp}
+ \ifconditional\c_tabl_table_spacing_right
+ a{\tempstring}
\fi}%
- \!ttemp}
+ \tempstring}
-\def\newtableformatkey #1{\setvalue{!tk<\string#1>}}
+\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
@@ -458,29 +467,28 @@
{\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.
+% 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\tablehasleftspacing
- \settrue\tablehasrightspacing
+ {\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\tablehasleftspacing
- \setfalse\tablehasrightspacing
+ {\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\tablehasleftspacing
- \settrue\tablehasrightspacing
+ {\setfalse\c_tabl_table_spacing_left
+ \settrue\c_tabl_table_spacing_right
\!tgGetValue{\!tgInsertKern}}
% Key "n": numeric item , non-math mode.
@@ -498,14 +506,15 @@
% Key "m": Math mode.
\newtableformatkey m%
- {\doreadtableformatkeys b$ a$}
+ {\doreadtableformatkeys b{\normalstartimath} a{\normalstopimath}}
% Key "M": Displaymath mode.
\newtableformatkey M%
- {\doreadtableformatkeys \{ b{$\displaystyle} a$}
+ {\doreadtableformatkeys \{ b{\normalstartimath\displaystyle} a{\normalstopimath}}
% Key "\m": Template ${}#\hfil$
+
\newtableformatkey \m%
{\doreadtableformatkeys l b{{}} m}
@@ -536,17 +545,16 @@
\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.
+% 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.
+% 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
@@ -562,7 +570,7 @@
\newtableformatkey \|%
{\!tkTestForBeginFormat \|{\!tfSetAlternateVrule}}
-% Key ".": PERIOD -- end of \dobegintableformat section.
+% Key ".": PERIOD -- end of \tabl_table_begin_format section.
\newtableformatkey .%
{\!tkTestForBeginFormat.{\!tfFinishFormat}}
@@ -572,41 +580,40 @@
\newtableformatkey \doendtableformat
{\!tkTestForBeginFormat\doendtableformat{\!tfFinishFormat}}
-% Key "]": End of \dotablereformat section
+% Key "]": End of \tabl_table_reformat section
\newtableformatkey ]%
{\!tkTestForReFormat ] \!tfEndReFormat}
-% TEST FOR BEGIN FORMAT{<Key>}{Intended Action}: This test is run
-% on keys that can only be used by \dobegintableformat --- "s", "o",
-% "|", "\|", "w", ".", and "\doendtableformat".
+% TEST FOR BEGIN FORMAT{<Key>}{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\!ttemp{#2}%
- \expandafter\!ttemp
+ \def\tempstring{#2}%
+ \expandafter\tempstring
\else
\toks0={#1}%
- \toks2=\expandafter{\string\dotablereformat}%
+ \toks2=\expandafter{\string\tabl_table_reformat}%
\expandafter\!tkImproperUse
\fi}
-% TEST FOR RE FORMAT{<Key>}{Intended Action}: This test is run
-% on the key "]", which can only be used by \dotablereformat.
+% TEST FOR RE FORMAT{<Key>}{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\dobegintableformat}%
+ \toks2=\expandafter{\string\tabl_table_begin_format}%
\expandafter\!tkImproperUse
\else
- \def\!ttemp{#2}%
- \expandafter\!ttemp
+ \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.
+% 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
@@ -620,12 +627,11 @@
\def\!tnGetCode#1 %
{\!tnConvertCode #1..!}
-% CONVERT CODE: E.g. converts above to [0000], [0000.], [.0000],
-% [0000000000.00]
+% CONVERT CODE: E.g. converts above to [0000], [0000.], [.0000], [0000000000.00]
\def\!tnConvertCode #1.#2.#3!%
{\begingroup
- \aftergroup\edef \aftergroup\!ttemp \aftergroup{%
+ \aftergroup\edef \aftergroup\tempstring \aftergroup{%
\aftergroup[%
\scratchcounter#1\relax
\!thLoop
@@ -633,8 +639,8 @@
\advance\scratchcounter\minusone
\aftergroup0
\repeat
- \def\!ttemp{#3}%
- \ifx\!ttemp \empty
+ \def\tempstring{#3}%
+ \ifx\tempstring \empty
\else
\aftergroup.
\scratchcounter#2\relax
@@ -646,7 +652,7 @@
\fi
\aftergroup]\aftergroup}%
\endgroup\relax
- \expandafter\!tnGetArgument\!ttemp}
+ \expandafter\!tnGetArgument\tempstring}
% GET ARGUMENT: [<sample left field> <optional .<sample right field>>
@@ -656,8 +662,8 @@
% MAKE NUMERIC TEMPLATE
\def\!tnMakeNumericTemplate#1#2.#3.#4!% #1=<empty> or $
- {\def\!ttemp{#4}%
- \ifx\!ttemp\empty
+ {\def\tempstring{#4}%
+ \ifx\tempstring\empty
\!taDimenC\zeropoint
\else
\setbox\scratchbox=\hbox{\mathsurround\zeropoint #1.#3#1}%
@@ -675,9 +681,9 @@
{\!tnSetNumericItemA {#1}{#2}{#3}#4..!}
\def\!tnSetNumericItemA #1#2#3#4.#5.#6!%
- {\def\!ttemp{#6}%
+ {\def\tempstring{#6}%
\hbox to #1{\hss \mathsurround\zeropoint #3#4#3}%
- \hbox to #2{\ifx\!ttemp\empty\else\mathsurround\zeropoint #3.#5#3\fi\hss}}
+ \hbox to #2{\ifx\tempstring\empty\else\mathsurround\zeropoint #3.#5#3\fi\hss}}
% extensions
@@ -702,7 +708,7 @@
\def\!tqConvertCode #1,#2,#3!%
{\begingroup
\aftergroup\edef
- \aftergroup\!ttemp
+ \aftergroup\tempstring
\aftergroup{%
\aftergroup[%
\scratchcounter#1\relax
@@ -711,8 +717,8 @@
\advance\scratchcounter\minusone
\aftergroup0
\repeat
- \def\!ttemp{#3}%
- \ifx\!ttemp\empty
+ \def\tempstring{#3}%
+ \ifx\tempstring\empty
\else
\aftergroup,
\scratchcounter#2\relax
@@ -724,14 +730,14 @@
\fi
\aftergroup]\aftergroup}%
\endgroup\relax
- \!thx\!tqGetArgument\!ttemp}
+ \!thx\!tqGetArgument\tempstring}
\def\!tqGetArgument[#1]%
{\!tqMakeQuantityTemplate\!tqStyle#1,,!}
\def\!tqMakeQuantityTemplate#1#2,#3,#4!% #1=<empty> or $
- {\def\!ttemp{#4}%
- \ifx\!ttemp\empty
+ {\def\tempstring{#4}%
+ \ifx\tempstring\empty
\!taDimenC\zeropoint
\else
\setbox\scratchbox\hbox{\mathsurround\zeropoint #1,#3#1}%
@@ -747,14 +753,14 @@
{\!tqSetQuantityItemA{#1}{#2}{#3}#4,,!}
\def\!tqSetQuantityItemA #1#2#3#4,#5,#6!%
- {\def\!ttemp{#6}%
+ {\def\tempstring{#6}%
\hbox to #1{\hss\mathsurround\zeropoint#3#4#3}%
- \hbox to #2{\ifx\!ttemp\empty\else\mathsurround\zeropoint#3,#5#3\fi\hss}}
+ \hbox to #2{\ifx\tempstring\empty\else\mathsurround\zeropoint#3,#5#3\fi\hss}}
% \Enlarge<extra height><extra depth><original>
% \enlarge<multiple for extra height><multiple for extra depth><original>
-\def\dotableEnlarge#1#2%
+\def\tabl_table_Enlarge#1#2%
{% 3rd argument is picked up later
% #1=extra height
% #2=extra depth
@@ -777,7 +783,7 @@
\!TsFinishEnlarge}
\def\!TsEnlargeMath#1#2%
- {\setbox\scratchbox\hbox{$\mathsurround\zeropoint#1{#2}$}%
+ {\setbox\scratchbox\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}%
\!TsFinishEnlarge}
\def\!TsFinishEnlarge
@@ -786,37 +792,40 @@
\box\scratchbox
\!TsSpaceFactor\relax}
-\def\dotableenlarge#1#2% 3rd argument is picked up later
- {\dotableEnlarge{#1\tablestrutunit}{#2\tablestrutunit}}
+\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
- \let\enlarge\dotableenlarge
- \let\Enlarge\dotableEnlarge
+ \let\enlarge\tabl_table_enlarge
+ \let\Enlarge\tabl_table_Enlarge
\to \everytable
% BEGIN TABLE
-\let\dotablestandardend\relax
+\let\tabl_table_standard_end\relax
-\def\dotablestandardbegin[#1]% \!ttBeginTable (always argument)
+\def\tabl_table_standard_begin[#1]% \!ttBeginTable (always argument)
{\if#1u% unboxed table
\ifmmode
- \let\dotablestandardend\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
+ \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\dotablestandardend\egroup
+ \let\tabl_table_standard_end\egroup
\fi
\else
\hbox\bgroup
- \def\dotablestandardend{\egroup\egroup}%
+ \def\tabl_table_standard_end{\egroup\egroup}%
\if#1t%
\vtop
\else\if#1b%
\vbox
\else
- \def\dotablestandardend{\egroup$\egroup}%
- %$\vcenter
- \scratchtoks\everymath\everymath\emptytoks$\everymath\scratchtoks\vcenter
+ \def\tabl_table_standard_end{\egroup\normalstopimath\egroup}%
+ \scratchtoks\everymath
+ \everymath\emptytoks
+ \normalstartimath
+ \everymath\scratchtoks
+ \vcenter
\fi\fi
\bgroup % for the \vtop, \vbox, or \vcenter
\fi
@@ -841,8 +850,10 @@
% DO HALIGN: Invoked by END FORMAT (or the key ".")
+\let\tabl_table_restore_lineskips\relax
+
\def\!ttDoHalign
- {\edef\dorestoretablelineskips
+ {\edef\tabl_table_restore_lineskips
{\baselineskip \the\baselineskip
\lineskiplimit\the\lineskiplimit
\lineskip \the\lineskip
@@ -864,80 +875,78 @@
% END TABLE
-\def\dotablenormalend
- {\egroup % finishes the \halign
- \dotablestandardend} % closes off the table envirnoment set up by \tablestandardbegin
+\def\tabl_table_normal_end
+ {\egroup % finishes the \halign
+ \tabl_table_standard_end} % closes off the table envirnoment set up by \tablestandardbegin
-\def\donormaltablelineending
+\def\tabl_table_normal_line_ending
{\cr}
-\def\donormaltablelineformat#1#2%
+\def\tabl_table_normal_line_format#1#2%
{\vrule
\s!width \zeropoint
- \s!height\dimexpr\tablestrutheightfactor\tablestrutunit+#1\tablestrutunit\relax
- \s!depth \dimexpr\tablestrutdepthfactor \tablestrutunit+#2\tablestrutunit\relax
+ \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\noftablevrules \noftablevrules\plusone
+\newcount\c_tabl_table_n_of_vrules \c_tabl_table_n_of_vrules\plusone
-\let\tablecurrentvrulecolor\empty
-\let\tablecurrenthrulecolor\empty
-
-\def\@VLd{.125em}
+\let\m_tabl_table_vrule_color\empty
+\let\m_tabl_table_hrule_color\empty
\def\do!ttInsertVrule
- {\vrule\!!width
+ {\vrule\s!width
\ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
- \tablevrulethicknessfactor
+ \c_tabl_table_vrule_thickness_factor
\else
\!tgValue
\fi
- \tablelinethicknessunit
+ \d_tabl_table_line_thickness_unit
\else
\!tgValue
\fi
- \hskip\@VLd}
+ \hskip.125\emwidth\relax}
-\def\donormaltablesimplebar
- {\unskip\!ttRightGlue&&}
+\def\tabl_table_normal_line_simple_bar
+ {\unskip\!ttRightGlue\aligntab\aligntab}
-\def\donormaltablecomplexbar
- {\unskip\!ttRightGlue&\omit
+\def\tabl_table_normal_line_complex_bar
+ {\unskip\!ttRightGlue\aligntab\omit
\hfil
- \ifx\tablecurrentvrulecolor\empty\else
- \switchtocolor[\tablecurrentvrulecolor]%
+ \ifx\m_tabl_table_vrule_color\empty\else
+ \switchtocolor[\m_tabl_table_vrule_color]%
\fi
- \ifcase\noftablevrules\or
+ \ifcase\c_tabl_table_n_of_vrules\or
\do!ttInsertVrule
\unskip
\else
- \dorecurse\noftablevrules\do!ttInsertVrule
- \global\noftablevrules\plusone
+ \dorecurse\c_tabl_table_n_of_vrules\do!ttInsertVrule
+ \global\c_tabl_table_n_of_vrules\plusone
\unskip
\fi
- \global\let\tablecurrentvrulecolor\empty
+ \global\let\m_tabl_table_vrule_color\empty
\hfil
- &}
+ \aligntab}
-\def\donormaltablenobar
- {\unskip\!ttRightGlue&\omit&}
+\def\tabl_table_normal_no_bar
+ {\unskip\!ttRightGlue\aligntab\omit\aligntab}
-\def\donormaltablesinglerule
- {&\donormaltablelongrule&}
+\def\tabl_table_normal_single_rule
+ {\aligntab\tabl_table_normal_long_rule\aligntab}
-\def\donormaltablemultirule
- {&\!ttuse\tabledrulespan\donormaltablelongrule&}
+\def\tabl_table_normal_multi_rule
+ {\aligntab\tabl_table_use\c_tabl_table_drule_span\tabl_table_normal_long_rule\aligntab}
% USE
-\def\!ttuse#1%
+\def\tabl_table_use#1%
{\ifnum#1>\plusone
\omit
- \global\setfalse\istabledivision % added
+ \global\setfalse\c_tabl_table_is_division % added
\scratchcounter\currenttablecolumn % added
\advance\scratchcounter #1% % added
\advance\scratchcounter \minusone % added
@@ -958,47 +967,47 @@
\fi
\next} % added
-\def\!ttUse#1[%
- {\!ttuse{#1}%
- \dotablereformat[}
+\def\tabl_table_Use#1[%
+ {\tabl_table_use{#1}%
+ \tabl_table_reformat[}
\appendtoks
- \let\use\!ttuse
- \let\Use\!ttUse
+ \let\use\tabl_table_use
+ \let\Use\tabl_table_Use
\to \everytable
% rules
-\def\donormaltablefullrule
+\def\tabl_table_normal_full_rule
{\starttablenoalign
\!ttGetHalfRuleThickness
\hrule\s!height\scratchdimen\s!depth\scratchdimen
\stoptablenoalign}
-\def\donormaltableshortrule % was: \!ttShortHrule
+\def\tabl_table_normal_short_rule % was: \!ttShortHrule
{\omit
\!ttGetHalfRuleThickness
- \ifx\tablecurrenthrulecolor\empty\else
- \switchtocolor[\tablecurrenthrulecolor]% see *DL*
+ \ifx\m_tabl_table_hrule_color\empty\else
+ \switchtocolor[\m_tabl_table_hrule_color]% see *DL*
\fi
\leaders\hrule\s!height\scratchdimen\s!depth\scratchdimen\hfill
\emptyhbox
\ignorespaces}
-\def\donormaltablelongrule % was: \!ttLongHrule
+\def\tabl_table_normal_long_rule % was: \!ttLongHrule
{\omit\span
\omit\span
- \donormaltableshortrule}
+ \tabl_table_normal_short_rule}
\def\!ttGetHalfRuleThickness
{\scratchdimen\dimexpr
\ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
- \tablehrulethicknessfactor
+ \c_tabl_table_hrule_thickness_factor
\else
\!tgValue % user-specified integer
\fi
- \tablelinethicknessunit
+ \d_tabl_table_line_thickness_unit
\else
\!tgValue % user-specified dimension
\fi
@@ -1006,11 +1015,11 @@
% \emptyhbox prevents \unskip
-\def\dotableLeft #1{#1\hfill\emptyhbox}
-\def\dotableCenter#1{\hfill#1\hfill\emptyhbox}
-\def\dotableRight #1{\hfill#1}
+\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\dotableOpenUp#1#2%
+\def\tabl_table_OpenUp#1#2%
{\edef\tablestrutheightfactor{\withoutpt\the\dimexpr\tablestrutheightfactor\points+#1\points}%
\edef\tablestrutdepthfactor {\withoutpt\the\dimexpr\tablestrutdepthfactor \points+#2\points}}
@@ -1021,11 +1030,11 @@
% \tablerighttabskip\tablelefttabskip
% LongLines -> [spread \hsize]
-\def\dotableJustLeft {\omit\let\!ttRightGlue\hfill}
-\def\dotableJustCenter{\omit\hfill\emptyhbox\let\!ttRightGlue\hfill}
-\def\dotableJustRight {\omit\hfill\emptyhbox}
+\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\dotableSmash
+\def\tabl_table_Smash
{\relax
\ifmmode
\expandafter\mathpalette
@@ -1039,28 +1048,28 @@
\!thFinishVCS}
\def\!thDoMathVCS#1#2%
- {\setbox\zerocount\hbox{$\mathsurround\zeropoint#1{#2}$}%
+ {\setbox\zerocount\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}%
\!thFinishVCS}
\def\!thFinishVCS
- {\vbox to\zeropoint{\vss\box\zerocount\vss}}
+ {\vpack to\zeropoint{\vss\box\zerocount\vss}}
-\def\dotableRaise
+\def\tabl_table_Raise
{\def\!thSign{+}%
\!tgGetValue\!thSetDimen}
-\def\dotableLower
+\def\tabl_table_Lower
{\def\!thSign{-}%
\!tgGetValue\!thSetDimen}
\def\!thSetDimen
{\ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
- \!taDimenA\tablestrutheightfactor\tablestrutunit
- \advance\!taDimenA\tablestrutdepthfactor\tablestrutunit
+ \!taDimenA\tablestrutheightfactor\d_tabl_table_strut_unit
+ \advance\!taDimenA\tablestrutdepthfactor\d_tabl_table_strut_unit
\divide\!taDimenA\plustwo
\else
- \!taDimenA\!tgValue\tablestrutunit
+ \!taDimenA\!tgValue\d_tabl_table_strut_unit
\fi
\else
\!taDimenA\!tgValue
@@ -1078,7 +1087,7 @@
\!thFinishRaise} % From Plain TeX: \ht0=0pt \dp0=0pt \box0
\def\!thDoMathRaise#1#2%
- {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{$\mathsurround\zeropoint#1{#2}$}}%
+ {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}}%
\!thFinishRaise}
\def\!thFinishRaise
@@ -1086,7 +1095,7 @@
\dp\zerocount\zeropoint
\box\zerocount}
-\def\dotableBackSpace
+\def\tabl_table_BackSpace
{\!tgGetValue\!thKernBack}
\def\!thKernBack
@@ -1097,13 +1106,13 @@
\else
\!tgValue % user-specified integer
\fi
- \tablekernunit
+ \d_tabl_table_kern_unit
\else
\!tgValue % user-specified dimension
\fi
\ignorespaces}
-\def\dotableVspace
+\def\tabl_table_Vspace
{\noalign
\bgroup
\!tgGetValue\!thVspace}
@@ -1116,40 +1125,39 @@
\else
\!tgValue % user-specified integer
\fi
- \tablestrutunit
+ \d_tabl_table_strut_unit
\else
\!tgValue % user-specified skip
\fi
\egroup} % Ends the \noalign
\appendtoks
- \let\JustLeft \dotableJustLeft
- \let\JustCenter \dotableJustCenter
- \let\JustRight \dotableJustRight
- \let\Smash \dotableSmash
- \let\Raise \dotableRaise
- \let\Lower \dotableLower
- \let\BackSpace \dotableBackSpace
- \let\Vspace \dotableVspace
- \let\OpenUp \dotableOpenUp
- \let\TableLeft \dotableLeft
- \let\TableCenter \dotableCenter
- \let\TableRight \dotableRight
+ \let\JustLeft \tabl_table_JustLeft
+ \let\JustCenter \tabl_table_JustCenter
+ \let\JustRight \tabl_table_JustRight
+ \let\Smash \tabl_table_Smash
+ \let\Raise \tabl_table_Raise
+ \let\Lower \tabl_table_Lower
+ \let\BackSpace \tabl_table_BackSpace
+ \let\Vspace \tabl_table_Vspace
+ \let\OpenUp \tabl_table_OpenUp
+ \let\TableLeft \tabl_table_Left
+ \let\TableCenter \tabl_table_Center
+ \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
-%D are dealing with. First we introdoce some booleans that
-%D enable us, inside as well as outside this module, to
-%D determine in what mode we are.
+%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
-%D the basic table typesetting commands.
+%D We show this feature in an example that also shows some of the basic table
+%D typesetting commands.
%D
%D \startbuffer
%D \starttable[|||]
@@ -1171,10 +1179,9 @@
%D
%D \typebuffer
%D
-%D This examples shows about the minimum of commands needed to
-%D typeset such a table. In this table, the \type {\AR} is
-%D automatically translated into the more primitive (but more
-%D verbose) commands \type {\SR}, \type {\FR}, \type {\MR} and
+%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
@@ -1211,10 +1218,9 @@
\def\m!TABLE{TABLE}
-%D We already saw that the table macros report errors and
-%D provide automatic spacing. These features can only be
-%D implemented by keeping track of the state, often the last
-%D command on a row.
+%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
@@ -1239,28 +1245,25 @@
\newconstant\tablerowzero
\newconstant\TABLEn
-%D We store these states using \type {constants}'s and
-%D like most variables, these are global ones. When needed,
-%D especially when we flush the backgrounds, we can temporary
-%D disable the assignment.
+%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\dosettableaction#1{\ifconditional\tableactionstatepermitted\global\tableactionstate#1\fi}
-\def\dosettableforce #1{\ifconditional\tableactionstatepermitted\global\tableforcestate #1\fi}
+\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
-%D of \TABLE\ looks like, we first implement an alternative for
-%D the numeric keys. The quantity keys (\type{q} and \type{Q})
-%D support the more european way of writing numbers:
+%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
-%D instead of brackets because we need brackets to specify the
-%D format.
+%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]|}
@@ -1271,22 +1274,18 @@
%D \stoptable
%D \stoptyping
%D
-%D Although a more efficient implementation is possible |<|we
-%D can for instance share common macros|>| we just adapt a copy
-%D of the numeric ones. To permit double loading of this
-%D module, we check for the existence of one of the macros.
-
-%D To be compatible with the tabulate environment, we also
-%D support the \type {l}, \type {c} and \type {r} keys for
-%D paragraph entries.
-
-%D All commands that are executed between rows are to be put in
-%D \type {\noalign}. We can however not verify if we (that is
-%D \TABLE) does or did not enter this mode. A moderate dirty
-%D but useful trick is using our own alternative:\footnote{Once
-%D one has entered the stage of redefining \TEX\ primitives,
-%D such hacks become a second nature. However, redefining \type
-%D {\omit} and \type{\span} is not that easy.}
+%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.}
\def\tablenoalign
{\noalign
@@ -1303,8 +1302,8 @@
%D \macros
%D {starttable}
%D
-%D The rest of this module is not easy to comprehend, mainly
-%D because we have to take care of:
+%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]}
@@ -1322,18 +1321,18 @@
%D
%D \showsetup{starttable}
-\newconditional\tablerepeathead
-\newconditional\tablerepeattail
+\newconditional\c_tabl_table_repeat_head
+\newconditional\c_tabl_table_repeat_tail
\unexpanded\def\starttable
{\bgroup
- \dodoubleempty\dostarttable}
+ \dodoubleempty\table_table_start}
-\unexpanded\def\dostarttable[#1][#2]% preamble optional-settings
+\unexpanded\def\table_table_start[#1][#2]% preamble optional-settings
{\ifsecondargument
\setupcurrenttables[#2]%
\fi
- \let\stoptable\dostoptable
+ \let\stoptable\table_table_stop
\edef\p_tabl_table_split{\directtablesparameter\c!split}%
\edef\p_tabl_table_frame{\directtablesparameter\c!frame}%
\ifx\p_tabl_table_split\v!auto
@@ -1343,10 +1342,10 @@
\fi
\fi
\ifx\p_tabl_table_split\v!yes
- \def\stoptable{\dostoptables\egroup}% not \unexpanded as we look ahead
+ \def\stoptable{\table_table_stop_s\egroup}% not \unexpanded as we look ahead
\expandafter\starttables
\else\ifx\p_tabl_table_split\v!repeat
- \def\stoptable{\dostoptables\egroup}% not \unexpanded as we look ahead
+ \def\stoptable{\table_table_stop_s\egroup}% not \unexpanded as we look ahead
\doubleexpandafter\starttables
\else
\ifx\p_tabl_table_frame\empty
@@ -1355,23 +1354,23 @@
\startframedcontent[\p_tabl_table_frame]%
\fi
\postponenotes
- \doubleexpandafter\firststagestarttable
+ \doubleexpandafter\tabl_table_first_stage
\fi\fi
[#1]}
-% We cannot define \unexpanded\def\dostoptable a ssomehow lookahead
-% in alignments fail then, so we relax it and define it locally.
+% We cannot define the stopper as \type {\unexpanded} because lookahead in
+% alignments fail then, so we relax it and define it locally.
\let\stoptable\relax
-\def\dostoptable
- {\dochucktableautorow % before the tail, else noalign problem
- \doinserttabletail
+\def\table_table_stop
+ {\tabl_tables_chuck_auto_row % before the tail, else noalign problem
+ \tabl_table_insert_tail
\starttablenoalign
- \global\let\dotablehead\empty
- \global\let\dotabletail\empty
+ \global\let\tabl_table_head\empty
+ \global\let\tabl_table_tail\empty
\stoptablenoalign
- \dofinishtable
+ \tabl_table_finish
\ifx\p_tabl_table_frame\empty
\ifinsidefloat\else
\stopbaselinecorrection
@@ -1382,19 +1381,19 @@
\fi
\egroup}
-%D Before we can grab the argument, we have to make sure that
-%D the \CATCODES\ are set. The first stage takes care of that.
+%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\firststagestarttable
+\def\tabl_table_first_stage
{\bgroup
\global\intabletrue
- \secondstagestarttable}
+ \tabl_table_second_stage}
%D \macros
%D {definetabletemplate}
%D
-%D The complex (and main) start macro first takes care of the
-%D predefined case. Such a predefined setup looks like:
+%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][|||]
@@ -1406,8 +1405,7 @@
%D \stoptable
%D \stoptyping
%D
-%D The implementation of the definition macro is not that
-%D complicated:
+%D The implementation of the definition macro is not that complicated:
\installcorenamespace{tablehead}
\installcorenamespace{tabletail}
@@ -1415,28 +1413,26 @@
\unexpanded\def\definetabletemplate % to be redone
{\bgroup
\catcode\barasciicode\othercatcode
- \doquadrupleempty\dodefinetabletemplate}
+ \doquadrupleempty\tabl_table_define_template}
-\def\dodefinetabletemplate[#1][#2][#3][#4]%
+\def\tabl_table_define_template[#1][#2][#3][#4]%
{\ifsecondargument
- \setgvalue{\??tabletemplate#1}{\dousetabletemplate{#2}{#3}{#4}}%
+ \setgvalue{\??tabletemplate#1}{\tabl_table_use_template{#2}{#3}{#4}}%
\fi
\egroup}
-\def\dousetabletemplate#1#2#3%
- {\gdef\dotablehead{\executeifdefined{\??tablehead#2}\empty}%
- \gdef\dotabletail{\executeifdefined{\??tabletail#3}\empty}%
- \secondstagestarttable[#1]}
+\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
-%D head and tail to use.
+%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
-%D by name!
+%D This also means that one can define table heads and tails by name!
%D
%D \starttyping
%D \starttablehead[before]
@@ -1444,50 +1440,50 @@
%D \stoptablehead
%D \stoptyping
%D
-%D Templates defined this way get protected names, that cannot
-%D conflict with existing commands.
+%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\doinserttablehead
+\def\tabl_table_insert_head
{\starttablenoalign
\global\settrue\preventtablebreak
\global\setfalse\hassometablehead
\stoptablenoalign
- \dotablehead
+ \tabl_table_head
\starttablenoalign
\global\setfalse\preventtablebreak
\stoptablenoalign}
-\def\doinserttabletail
+\def\tabl_table_insert_tail
{\starttablenoalign
\global\settrue\preventtablebreak
\global\setfalse\hassometabletail
\stoptablenoalign
- \dotabletail
+ \tabl_table_tail
\starttablenoalign
\global\setfalse\preventtablebreak
\stoptablenoalign}
% \def\doverysimpletableHL % todo
% {\starttablenoalign
-% \normalexpanded{\noexpand\donormaltablefullrule\m_tabl_table_HLheight}%
+% \normalexpanded{\noexpand\tabl_table_normal_full_rule\m_tabl_table_HLheight}%
% \stoptablenoalign}
-\def\dorestarttable#1%
- {\gdef\restarttable{#1}%
- \restarttable
+\def\tabl_table_restart_indeed#1%
+ {\gdef\tabl_table_restart{#1}%
+ \tabl_table_restart
% \starttablenoalign
% \globalpushmacro\simpletableHL
% \global\let\simpletableHL\doverysimpletableHL
% \stoptablenoalign
- \doinserttablehead
- \ifsplittables \ifconditional \tablerepeattail
+ \tabl_table_insert_head
+ \ifsplittables \ifconditional \c_tabl_table_repeat_tail
\tablenoalign{\goodbreak}%
- \doinserttabletail
+ \tabl_table_insert_tail
\tablenoalign{\goodbreak}%
\fi \fi
% \starttablenoalign
@@ -1497,24 +1493,23 @@
\bgroup \catcode\barasciicode\othercatcode
-\gdef\secondstagestarttable[#1]% brr nested mess
+\gdef\tabl_table_second_stage[#1]% brr nested mess
{\bgroup
- \@@useotherbar
+ \tabl_table_use_bar
\global\setfalse\tableactionstatepermitted
\global\setfalse\hassometablehead
\global\setfalse\hassometabletail
\expanded{\doifelseinstring{|}{#1}}
- {\xdef\restarttable{\noexpand\dorestarttable{\noexpand\thirdstagestarttable{#1}}}}
+ {\xdef\tabl_table_restart{\noexpand\tabl_table_restart_indeed{\noexpand\tabl_table_third_stage{#1}}}}
{\doifelsedefined{\??tabletemplate#1}
- {\gdef\restarttable{\getvalue{\??tabletemplate#1}}}
- {\gdef\restarttable{\dorestarttable{\getvalue{#1}}}}}%
+ {\gdef\tabl_table_restart{\getvalue{\??tabletemplate#1}}}
+ {\gdef\tabl_table_restart{\tabl_table_restart_indeed{\getvalue{#1}}}}}%
\egroup
- \restarttable}
+ \tabl_table_restart}
\egroup
-%D The third stage involves a lot of (re)sets, which we will
-%D explain later.
+%D The third stage involves a lot of (re)sets, which we will explain later.
\appendtoks
\fixedspaces
@@ -1523,35 +1518,34 @@
%D Now we can start the table.
-\newtoks \localtabledefinitions
+\newtoks\localtabledefinitions
-\def\thirdstagestarttable#1%
+\def\tabl_table_third_stage#1%
{\global\settrue\tableactionstatepermitted
- \dosettableaction\tableunknownstate
- \dosettableforce\tableunknownstate
- \dotableresetVLvalues
- \appendtoks\dolocaltablesetup\to\everytable
- \dotablestandardbegin[\ifsplittables u\else b\fi]%
+ \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\dobegintableformat\currenttableformat\doendtableformat}}
+ \expandafter\tabl_table_begin_format\currenttableformat\doendtableformat}}
-\def\dofinishtable
- {\dochucktableautorow
+\def\tabl_table_finish
+ {\tabl_tables_chuck_auto_row
\unskip\crcr
- \dotablenormalend
+ \tabl_table_normal_end
\global\intablefalse
\egroup}
%D \macros
%D {starttables}
%D
-%D Split tables are specified using the plural form of the
-%D start and stop commands.
+%D Split tables are specified using the plural form of the start and stop commands.
%D
%D \showsetup{starttables}
%D
@@ -1572,45 +1566,45 @@
\unexpanded\def\starttables
{\bgroup
- \let\stoptables\dostoptables
+ \let\stoptables\table_table_stop_s
\splittablestrue
\edef\p_tabl_table_split{\directtablesparameter\c!split}%
\ifx\p_tabl_table_split\v!repeat
- \settrue\tablerepeathead
- \settrue\tablerepeattail
+ \settrue\c_tabl_table_repeat_head
+ \settrue\c_tabl_table_repeat_tail
\else
- \setfalse\tablerepeathead
- \setfalse\tablerepeattail
+ \setfalse\c_tabl_table_repeat_head
+ \setfalse\c_tabl_table_repeat_tail
\fi
\flushnotes
\setbox\tablecontentbox\vbox\bgroup
\forgetall
- \firststagestarttable}
+ \tabl_table_first_stage}
\let\stoptables\relax % needed for \noalign
-\def\dostoptables % not \unexpanded as we need the lookahead (brrr)
- {\dochucktableautorow % AM: before the tail, else noalign problem
- \ifconditional\tablerepeattail\else\doinserttabletail\fi
- \dofinishtable
+\def\table_table_stop_s % not \unexpanded 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
- \dosplittablebox\tablecontentbox
- \global\let\dotablehead\empty % new here
- \global\let\dotabletail\empty % new here
+ \tabl_table_split_box\tablecontentbox
+ \global\let\tabl_table_head\empty % new here
+ \global\let\tabl_table_tail\empty % new here
\flushnotes
\egroup}
-\def\dosplittablebox#1%
+\def\tabl_table_split_box#1%
{\resettsplit
\def\tsplitminimumfreelines{2}%
\def\tsplitminimumfreespace{\zeropoint}%
\setbox\tsplitcontent\box#1%
- \ifconditional\tablerepeathead \ifconditional\hassometablehead
+ \ifconditional\c_tabl_table_repeat_head \ifconditional\hassometablehead
\setbox\tsplithead\vsplit\tsplitcontent to \lineheight
\setbox\tsplithead\vbox{\unvbox\tsplithead}%
\fi \fi
- \ifconditional\tablerepeattail \ifconditional\hassometabletail
+ \ifconditional\c_tabl_table_repeat_tail \ifconditional\hassometabletail
\setbox\tsplittail\vsplit\tsplitcontent to \lineheight
\setbox\tsplittail\vbox{\unvbox\tsplittail}%
\fi \fi
@@ -1620,9 +1614,8 @@
\fi
\handletsplit}
-%D When the table in the previous example is split across
-%D pages, only the first gets a head. We could have said
-%D something like:
+%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
@@ -1641,71 +1634,67 @@
%D \stoptables
%D \stoptyping
%D
-%D This time each split table gets a head line and ends with
-%D a rule. Keep in mind that such heads also apply to the
-%D unbroken ones and should be defined local (grouped) if
-%D needed. The rather complicated definition below is due to
-%D the fact that the stopcondition is interface language
-%D dependant.
+%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\dotablehead\empty % needs checking
-\let\dotabletail\empty % needs checking
+\let\tabl_table_head\empty % needs checking
+\let\tabl_table_tail\empty % needs checking
\letvalue{\e!start\v!tablehead}\relax
\letvalue{\e!stop \v!tablehead}\relax
\letvalue{\e!start\v!tabletail}\relax
\letvalue{\e!stop \v!tabletail}\relax
-%D The second argument is a dummy one, by scanning for it, we
-%D get rid of interfering spaces.
+%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
-\unexpanded\def\settablehead{\dodoubleempty\dosettablehead}
-\unexpanded\def\settabletail{\dodoubleempty\dosettabletail}
+\unexpanded\def\settablehead{\dodoubleempty\tabl_table_set_head}
+\unexpanded\def\settabletail{\dodoubleempty\tabl_table_set_tail}
-% \def\dosettablehead[#1][#2]#3\end{\setvalue{\??tablehead#1}{\tablenoalign{\global\settrue\hassometablehead}#3}}
-% \def\dosettabletail[#1][#2]#3\end{\setvalue{\??tabletail#1}{\tablenoalign{\global\settrue\hassometabletail}#3}}
+% \def\tabl_table_set_head[#1][#2]#3\end{\setvalue{\??tablehead#1}{\tablenoalign{\global\settrue\hassometablehead}#3}}
+% \def\tabl_table_set_tail[#1][#2]#3\end{\setvalue{\??tabletail#1}{\tablenoalign{\global\settrue\hassometabletail}#3}}
-\def\dosettablehead[#1][#2]#3\end
- {\gdef\dotablehead{\executeifdefined{\??tablehead#1}\empty}% new
+\def\tabl_table_set_head[#1][#2]#3\end
+ {\gdef\tabl_table_head{\begincsname\??tablehead#1\endcsname}% new
\setvalue{\??tablehead#1}{\tablenoalign{\global\settrue\hassometablehead}#3}}
-\def\dosettabletail[#1][#2]#3\end
- {\gdef\dotabletail{\executeifdefined{\??tabletail#1}\empty}% new
+\def\tabl_table_set_tail[#1][#2]#3\end
+ {\gdef\tabl_table_tail{\begincsname\??tabletail#1\endcsname}% new
\setvalue{\??tabletail#1}{\tablenoalign{\global\settrue\hassometabletail}#3}}
\normalexpanded
{\def\csname\e!start\v!tablehead\endcsname#1\csname\e!stop\v!tablehead\endcsname%
- {\settablehead#1\noexpand\end}}
+ {\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
-%D mid||lines can be used without problems.
-
-%D The order of the next macros is more or less random. First
-%D we implement error recovery. Errors are reported to the
-%D screen and log file as well as visualized in the table in
-%D teletype.
+%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\dofinishtablerow
+\def\tabl_table_finish_row
{\crcr
\starttablenoalign
\nobreak
- \dosettableaction\tableunknownstate
- \globalletempty\dochecktableautorow
- \globalletempty\dochucktableautorow
+ \tabl_table_set_action\tableunknownstate
+ \globalletempty\tabl_tables_check_auto_row
+ \globalletempty\tabl_tables_chuck_auto_row
\global\currenttablecolumn\zerocount
\stoptablenoalign}
-%D Next we enter the more complicated area of column and row
-%D switching. I won't go into much detail from now on, but just
-%D mention the general principles.
+%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)
@@ -1720,9 +1709,8 @@
%D \sym{\type{\AR}} end a row with automatic spacing
%D \stopitemize
%D
-%D As far as possible, we report confusing situations. In
-%D most cases one can use \type{\AR}, which transfigurates
-%D itself into one of the other types.
+%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[||]
@@ -1736,27 +1724,24 @@
%D \stoptable
%D \stoptyping
%D
-%D In this example we could have used \type{\AR} without
-%D problems.
+%D In this example we could have used \type{\AR} without problems.
%D
-%D Color or gray scale backgrounds precede the content. They
-%D are passed over horizontal (division) lines when needed.
-%D Errors in the color template are traced elsewhere. Here we
-%D only check for inconsistent spacing. Due to the way \TEX\
-%D handles alignments, we cannot automate spacing for colored
-%D rows and columns.
+%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.
\setnewconstant\tablerowzero\zerocount
\appendtoks
- \let\SR\dotableSR
- \let\FR\dotableFR
- \let\MR\dotableMR
- \let\LR\dotableLR
- \let\AR\dotableAR
+ \let\SR\tabl_table_SR
+ \let\FR\tabl_table_FR
+ \let\MR\tabl_table_MR
+ \let\LR\tabl_table_LR
+ \let\AR\tabl_table_AR
\to \localtabledefinitions
-\unexpanded\def\dotableSR
+\unexpanded\def\tabl_table_SR
{\ifnum\tableactionstate=\tablefirstrowstate
\writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}%
\else\ifnum\tableactionstate=\tablemidrowstate
@@ -1764,60 +1749,57 @@
\else\ifnum\tableactionstate=\tablemidrowstate
\writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}%
\fi\fi\fi
- \doendtablerow\tableseparaterowstate\tablerowfactor\tablerowfactor}
+ \tabl_table_end_row_indeed\tableseparaterowstate\tablerowfactor\tablerowfactor}
-\unexpanded\def\dotableFR
+\unexpanded\def\tabl_table_FR
{\ifnum\tableactionstate=\tablemidrowstate
\writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}%
\else\ifnum\tableactionstate=\tablelastrowstate
\writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}%
\fi\fi
- \doendtablerow\tablefirstrowstate\tablerowfactor\tablerowzero}
+ \tabl_table_end_row_indeed\tablefirstrowstate\tablerowfactor\tablerowzero}
-\unexpanded\def\dotableMR
+\unexpanded\def\tabl_table_MR
{\ifnum\tableactionstate=\tablerulestate
\writestatus\m!TABLE{change \string\MR\space into \string\FR/\string\SR}%
\else\ifnum\tableactionstate=\tablelastrowstate
\writestatus\m!TABLE{change \string\MR\space into \string\FR}%
\fi\fi
- \doendtablerow\tablemidrowstate00}
+ \tabl_table_end_row_indeed\tablemidrowstate00}
-\unexpanded\def\dotableLR
+\unexpanded\def\tabl_table_LR
{\ifnum\tableactionstate=\tablerulestate
\writestatus\m!TABLE{change \string\LR\space into \string\FR/\string\SR}%
\fi
- \doendtablerow\tablelastrowstate\tablerowzero\tablerowfactor}
+ \tabl_table_end_row_indeed\tablelastrowstate\tablerowzero\tablerowfactor}
%D \macros
%D {ifcheckTABLEcolums}
%D
-%D
-%D The next macros handle the actual row ending. This macro
-%D also take care of space corrections due to table splitting
-%D when \type{\MR} and collegues are used. When tracing is
-%D enabled, the corrections as well as the values used to
-%D determine the available space are shown (in color). By default
-%D checking is off.
-
-\def\doendtablerow#1#2#3%
- {\dosettableaction#1%
+%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
- \doendoftableline\SR\SR\tablerowfactor\tablerowfactor
+ \tabl_tables_end_line\SR\SR\tablerowfactor\tablerowfactor
\or
- \doendoftableline\FR\FR\tablerowfactor\tablerowzero
+ \tabl_tables_end_line\FR\FR\tablerowfactor\tablerowzero
\or\ifnum\tableforcestate=\tableforcelastrowstate
- \doendoftableline\MR\LR\tablerowzero\tablerowfactor
+ \tabl_tables_end_line\MR\LR\tablerowzero\tablerowfactor
\else\ifnum\tableforcestate=\tableforcefirstrowstate
- \doendoftableline\MR\FR\tablerowfactor\tablerowzero
+ \tabl_tables_end_line\MR\FR\tablerowfactor\tablerowzero
\else
- \doendoftableline\MR\MR\tablerowzero\tablerowzero
+ \tabl_tables_end_line\MR\MR\tablerowzero\tablerowzero
\fi\fi\or
- \doendoftableline\LR\LR\tablerowzero\tablerowfactor
+ \tabl_tables_end_line\LR\LR\tablerowzero\tablerowfactor
\fi
\starttablenoalign
- \dosettableforce\tableunknownstate
+ \tabl_table_set_force\tableunknownstate
\global\currenttablecolumn\zerocount
\ifconditional\preventtablebreak
\nobreak
@@ -1826,61 +1808,57 @@
\fi
\stoptablenoalign}
-%D Handling \type{\AR} is postponed till the next row. The
-%D check takes care of the first and mid rows, the chuck macro
-%D |<|how about that name|>| handles the last row.
+%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.
-\unexpanded\def\dotableAR
- {\globallet\dochecktableautorow\dodochecktableautorow
- \globallet\dochucktableautorow\dodochucktableautorow}
+\unexpanded\def\tabl_table_AR
+ {\globallet\tabl_tables_check_auto_row\tabl_tables_check_auto_row_indeed
+ \globallet\tabl_tables_chuck_auto_row\tabl_tables_chuck_auto_row_indeed}
-\let\dochecktableautorow\empty
-\let\dochucktableautorow\empty
+\let\tabl_tables_check_auto_row\empty
+\let\tabl_tables_chuck_auto_row\empty
-\def\dodochecktableautorow
- {\globallet\dochecktableautorow\empty
+\def\tabl_tables_check_auto_row_indeed
+ {\globallet\tabl_tables_check_auto_row\empty
\ifnum\tableactionstate=\tablerulestate \FR\else
\ifnum\tableactionstate=\tableunknownstate\FR\else
\MR\fi\fi}
-\def\dodochucktableautorow
- {\globalletempty\dochecktableautorow
- \globalletempty\dochucktableautorow
+\def\tabl_tables_chuck_auto_row_indeed
+ {\globalletempty\tabl_tables_check_auto_row
+ \globalletempty\tabl_tables_chuck_auto_row
\ifnum\tableactionstate=\tablerulestate \SR\else
\ifnum\tableactionstate=\tableunknownstate\SR\else
\LR\fi\fi}
-%D When a table is split, we also add a tail and when present
-%D we repeat the table head.
-
-%D When tables are split, the spacing before and after a
-%D horizontal rule is corrected according to what we expect.
+%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\doendoftableline#1#2#3#4%
+\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\donormaltablelineformat#3#4\crcr % \crcr nodig ?
+ \expandafter\tabl_table_normal_line_format#3#4\crcr % \crcr nodig ?
\tablenoalign{\nobreak\global\settrue\tableactionstatepermitted}}
-%D In order to prevent (as good as possible) alignment overflow
-%D and therefore \TEX\ error messages, we check the maximum
-%D number of columns. We keep track of the current column and
-%D 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
-%D one more than the number of columns.
+%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
-%D While defining this macro we change the \CATCODE\ of
-%D \type{|}. When counting the bars, we use a non active
-%D representation of the bar, simply because we cannot be sure
-%D if the bar is active or not.\footnote{Normally it is, but
-%D \TABLE\ changes the catcode when needed.}
+% 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 \gdef\@@otherbar {|}
- \catcode\barasciicode\activecatcode \gdef\@@useotherbar {\let|\@@otherbar}
+ \catcode\barasciicode\othercatcode \gdef\tabl_table_bar {|}
+ \catcode\barasciicode\activecatcode \gdef\tabl_table_use_bar{\let|\tabl_table_bar}
\egroup
\bgroup \catcode\barasciicode\othercatcode
@@ -1888,7 +1866,7 @@
\gdef\dogettablenofcolumns#1% todo: also divert this to lua as with tabulate
{\bgroup
\cleanupfeatures % needed !
- \@@useotherbar
+ \tabl_table_use_bar
\egroup}
\egroup
@@ -1900,46 +1878,47 @@
%D \sym{\type{\HC}} a horizontal colored line
%D \stopitemize
-\newcount\tablevrulethicknessfactor
-\newcount\tablehrulethicknessfactor
-\newcount\tabledrulespan
-\let \tablecurrentvrulecolor \empty
-\let \tablecurrenthrulecolor \empty
+\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
- \let\VL\dotableVL
- \let\VC\dotableVC
- \let\HL\dotableHL
- \let\HC\dotableHC
- \let\VS\dotableVS
- \let\VD\dotableVD
- \let\VT\dotableVT
- \let\VN\dotableVN
+ \let\VL\tabl_table_VL
+ \let\VC\tabl_table_VC
+ \let\HL\tabl_table_HL
+ \let\HC\tabl_table_HC
+ \let\VS\tabl_table_VS
+ \let\VD\tabl_table_VD
+ \let\VT\tabl_table_VT
+ \let\VN\tabl_table_VN
\to \localtabledefinitions
-\def\dotableresetVLvalues
+\def\tabl_table_resetVLvalues
{\global\currenttablecolumn\zerocount}
-\def\dotablevrulecommand#1% global assignments
+\def\tabl_table_vrulecommand#1% global assignments
{\doifelsenumber{#1}
- {\global\tablevrulethicknessfactor#1\relax
- \global\multiply\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax}
- {\xdef\tablecurrentvrulecolor{#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}}}
-\unexpanded\def\dotableVL
- {\dochecktableautorow
+\unexpanded\def\tabl_table_VL
+ {\tabl_tables_check_auto_row
\global\advance\currenttablecolumn\plusone
- \dosingleempty\dodotableVL}
+ \dosingleempty\table_tabl_VL_indeed}
-\def\dodotableVL[#1]%
- {\global\let\tablecurrentvrulecolor\empty
- \global\tablevrulethicknessfactor\m_tabl_table_VLwidth\relax
+\def\table_tabl_VL_indeed[#1]%
+ {\global\let\m_tabl_table_vrule_color\empty
+ \global\c_tabl_table_vrule_thickness_factor\m_tabl_table_VLwidth\relax
\iffirstargument
- \rawprocesscommalist[#1]\dotablevrulecommand
+ \rawprocesscommalist[#1]\tabl_table_vrulecommand
\fi
- \donormaltablecomplexbar}% \relax breaks \use
+ \tabl_table_normal_line_complex_bar}% \relax breaks \use
-\let\dotableVC\dotableVL % for mojca
+\let\tabl_table_VC\tabl_table_VL % for mojca
% \starttable[|||]
% \HL
@@ -1949,24 +1928,24 @@
% \HL
% \stoptable
-\unexpanded\def\dotableVS {\VN1}
-\unexpanded\def\dotableVD {\VN2}
-\unexpanded\def\dotableVT {\VN3}
-\unexpanded\def\dotableVN#1{\global\noftablevrules#1\relax\VL}
+\unexpanded\def\tabl_table_VS {\VN1}
+\unexpanded\def\tabl_table_VD {\VN2}
+\unexpanded\def\tabl_table_VT {\VN3}
+\unexpanded\def\tabl_table_VN#1{\global\c_tabl_table_n_of_vrules#1\relax\VL}
-\def\dotablehrulecommand#1% global assignments
+\def\tabl_table_hrulecommand#1% global assignments
{\doifelsenumber{#1}
- {\global\tablehrulethicknessfactor#1\relax
- \global\multiply\tablehrulethicknessfactor\m_tabl_table_HLheight\relax}
- {\xdef\tablecurrenthrulecolor{#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}}}
-\unexpanded\def\dotableHL
- {\dochucktableautorow
- \dofinishtablerow
+\unexpanded\def\tabl_table_HL
+ {\tabl_tables_chuck_auto_row
+ \tabl_table_finish_row
\starttablenoalign
- \dosingleempty\dodotableHL}
+ \dosingleempty\table_tabl_HL_indeed}
-\def\dodotableHL[#1]%
+\def\table_tabl_HL_indeed[#1]%
{\nobreak
\ifnum\tableactionstate=\tablerulestate
\writestatus\m!TABLE{skipping \string\HL}% \statusmessage
@@ -1977,23 +1956,23 @@
\writestatus\m!TABLE{change \string\MR\space into \string\SR}%
\fi\fi
\bgroup
- \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax
+ \global\c_tabl_table_hrule_thickness_factor\m_tabl_table_HLheight\relax
\iffirstargument
- \global\let\tablecurrenthrulecolor\empty
- \rawprocesscommalist[#1]\dotablehrulecommand
- \ifx\tablecurrenthrulecolor\empty\else
- \switchtocolor[\tablecurrenthrulecolor]%
+ \global\let\m_tabl_table_hrule_color\empty
+ \rawprocesscommalist[#1]\tabl_table_hrulecommand
+ \ifx\m_tabl_table_hrule_color\empty\else
+ \switchtocolor[\m_tabl_table_hrule_color]%
\fi
\fi
- \donormaltablefullrule
+ \tabl_table_normal_full_rule
\egroup
- \doaccounttablelinewidth
+ \tabl_table_account_width
\fi
- \dosettableaction\tablerulestate
+ \tabl_table_set_action\tablerulestate
\nobreak
\stoptablenoalign}
-\let\dotableHC\dotableHL % for mojca
+\let\tabl_table_HC\tabl_table_HL % for mojca
%D \startitemize[3*ruim]
%D \sym{\type{\NL}} a vertical skip
@@ -2015,41 +1994,41 @@
% n+1 uitleggen
\appendtoks
- \let\TB\dotableTB
- \let\NL\dotableNL % old
- \let\NR\dotableNR
- \let\NC\dotableNC
- \let\FC\dotableNC
- \let\MC\dotableNC
- \let\LC\dotableNC
+ \let\TB\tabl_table_TB
+ \let\NL\tabl_table_NL % old
+ \let\NR\tabl_table_NR
+ \let\NC\tabl_table_NC
+ \let\FC\tabl_table_NC
+ \let\MC\tabl_table_NC
+ \let\LC\tabl_table_NC
\to \localtabledefinitions
-\unexpanded\def\dotableTB
- {\dochucktableautorow
- \dofinishtablerow
+\unexpanded\def\tabl_table_TB
+ {\tabl_tables_chuck_auto_row
+ \tabl_table_finish_row
\starttablenoalign
- \dosingleempty\dodotableTB}
+ \dosingleempty\table_tabl_TB_indeed}
-\def\dodotableTB[#1]%
+\def\table_tabl_TB_indeed[#1]%
{\blank[\iffirstargument#1\else\directtablesparameter\c!NL\fi]%
\nobreak
\stoptablenoalign}
-\let\dotableNL\dotableTB
+\let\tabl_table_NL\tabl_table_TB
-\unexpanded\def\dotableNR
+\unexpanded\def\tabl_table_NR
{\global\currenttablecolumn\zerocount
- \donormaltablelineending
+ \tabl_table_normal_line_ending
\starttablenoalign
\nobreak
- \dosettableaction\tableunknownstate
+ \tabl_table_set_action\tableunknownstate
\stoptablenoalign}
-\unexpanded\def\dotableNC
- {\dochecktableautorow
+\unexpanded\def\tabl_table_NC
+ {\tabl_tables_check_auto_row
\global\advance\currenttablecolumn \plusone
- \donormaltablenobar}
-
+ \tabl_table_normal_no_bar}
+
%D \startitemize[3*broad]
%D \sym{\type{\DL}}
%D \sym{\type{\DV}} (\type{\VD})
@@ -2057,38 +2036,38 @@
%D \sym{\type{\DR}}
%D \stopitemize
-\newconditional\istabledivision
+\newconditional\c_tabl_table_is_division
\appendtoks
- \global\setfalse\istabledivision
- \let\DL\dotableDL
- \let\DC\dotableDC
- \let\DV\dotableDV
- \let\DR\dotableDR
+ \global\setfalse\c_tabl_table_is_division
+ \let\DL\tabl_table_DL
+ \let\DC\tabl_table_DC
+ \let\DV\tabl_table_DV
+ \let\DR\tabl_table_DR
\to \localtabledefinitions
-\def\dochecktabledivision
- {\ifconditional\istabledivision\else
- \dochucktableautorow
+\def\tabl_table_check_division
+ {\ifconditional\c_tabl_table_is_division\else
+ \tabl_tables_chuck_auto_row
\global\currenttablecolumn\zerocount
- \global\settrue\istabledivision
+ \global\settrue\c_tabl_table_is_division
\fi}
-\def\dotabledrulecommand#1% global assignments
+\def\tabl_table_drulecommand#1% global assignments
{\doifelsenumber{#1}
- {\ifcase\tabledrulespan
- \global\tabledrulespan#1\relax
+ {\ifcase\c_tabl_table_drule_span
+ \global\c_tabl_table_drule_span#1\relax
\else
- \global\tablehrulethicknessfactor#1\relax
- \global\multiply\tablehrulethicknessfactor\m_tabl_table_VLwidth\relax
+ \global\c_tabl_table_hrule_thickness_factor#1\relax
+ \global\multiply\c_tabl_table_hrule_thickness_factor\m_tabl_table_VLwidth\relax
\fi}
- {\xdef\tablecurrenthrulecolor{#1}}}
+ {\xdef\m_tabl_table_hrule_color{#1}}}
-\unexpanded\def\dotableDL
- {\dochecktabledivision
- \dosingleempty\dodotableDL}
+\unexpanded\def\tabl_table_DL
+ {\tabl_table_check_division
+ \dosingleempty\table_tabl_DL_indeed}
-\def\dodotableDL[#1]%
+\def\table_tabl_DL_indeed[#1]%
{\ifnum\tableactionstate=\tablerulestate
\writestatus\m!TABLE{skipping \string\DL}%
\else
@@ -2097,67 +2076,67 @@
\else\ifnum\tableactionstate=\tablefirstrowstate
\writestatus\m!TABLE{change \string\MR\space into \string\SR}%
\fi\fi
- \dosettableaction\tableunknownstate
- \global\tablehrulethicknessfactor\m_tabl_table_HLheight\relax
- \global\tabledrulespan\zerocount
+ \tabl_table_set_action\tableunknownstate
+ \global\c_tabl_table_hrule_thickness_factor\m_tabl_table_HLheight\relax
+ \global\c_tabl_table_drule_span\zerocount
\iffirstargument
- \global\let\tablecurrenthrulecolor\empty
- \rawprocesscommalist[#1]\dotabledrulecommand
- % \ifx\tablecurrenthrulecolor\empty\else
- % \switchtocolor[\tablecurrenthrulecolor]% see *DL*
+ \global\let\m_tabl_table_hrule_color\empty
+ \rawprocesscommalist[#1]\tabl_table_drulecommand
+ % \ifx\m_tabl_table_hrule_color\empty\else
+ % \switchtocolor[\m_tabl_table_hrule_color]% see *DL*
% \fi
\fi
- \ifcase\tabledrulespan
+ \ifcase\c_tabl_table_drule_span
\global\advance\currenttablecolumn \plusone
- \donormaltablesinglerule
+ \tabl_table_normal_single_rule
\or
\global\advance\currenttablecolumn \plustwo
- \donormaltablesinglerule
+ \tabl_table_normal_single_rule
\else
\global\advance\currenttablecolumn \plusone
- \donormaltablemultirule
+ \tabl_table_normal_multi_rule
\fi
\fi}
-\unexpanded\def\dotableDV
- {\dotableDCV\donormaltablesimplebar}
+\unexpanded\def\tabl_table_DV
+ {\tabl_table_DCV\tabl_table_normal_line_simple_bar}
-\unexpanded\def\dotableDC
- {\dotableDCV\donormaltablenobar}
+\unexpanded\def\tabl_table_DC
+ {\tabl_table_DCV\tabl_table_normal_no_bar}
-\unexpanded\def\dotableDCV#1%
- {\dochecktabledivision
- \dochecktableautorow
+\unexpanded\def\tabl_table_DCV#1%
+ {\tabl_table_check_division
+ \tabl_tables_check_auto_row
\global\advance\currenttablecolumn \plusone
#1}
-\unexpanded\def\dotableDR
+\unexpanded\def\tabl_table_DR
{\global\currenttablecolumn\zerocount % nog check
- \donormaltablelineending
+ \tabl_table_normal_line_ending
\starttablenoalign
\nobreak
- \global\setfalse\istabledivision
- \doaccounttablelinewidth % temporary solution
- \dosettableaction\tablerulestate
+ \global\setfalse\c_tabl_table_is_division
+ \tabl_table_account_width % temporary solution
+ \tabl_table_set_action\tablerulestate
\stoptablenoalign}
-\def\doaccounttablelinewidth
- {\scratchdimen\tablelinethicknessunit}
-
-\def\dotableTWO {\use\plustwo}
-\def\dotableTHREE {\use\plusthree}
-\def\dotableFOUR {\use\plusfour}
-\def\dotableFIVE {\use\plusfive}
-\def\dotableSIX {\use\plussix}
+\def\tabl_table_account_width
+ {\scratchdimen\d_tabl_table_line_thickness_unit}
+
+\def\tabl_table_TWO {\use\plustwo}
+\def\tabl_table_THREE {\use\plusthree}
+\def\tabl_table_FOUR {\use\plusfour}
+\def\tabl_table_FIVE {\use\plusfive}
+\def\tabl_table_SIX {\use\plussix}
\appendtoks
- \let\TWO \dotableTWO
- \let\THREE\dotableTHREE
- \let\FOUR \dotableFOUR
- \let\FIVE \dotableFIVE
- \let\SIX \dotableSIX
+ \let\TWO \tabl_table_TWO
+ \let\THREE\tabl_table_THREE
+ \let\FOUR \tabl_table_FOUR
+ \let\FIVE \tabl_table_FIVE
+ \let\SIX \tabl_table_SIX
\let\SPAN \use
- \let\REF \dotablereformat
+ \let\REF \tabl_table_reformat
\to \localtabledefinitions
\installcorenamespace{tables}
@@ -2166,19 +2145,19 @@
\installsetuponlycommandhandler \??tables {tables} % some day we can have named tables
-\setvalue{\??tabledistance\v!none }{\dotableOpenUp00\def\LOW{\Lower6 }}
-\setvalue{\??tabledistance\v!small }{\dotableOpenUp00\def\LOW{\Lower6 }} % == baseline
-\setvalue{\??tabledistance\v!medium}{\dotableOpenUp11\def\LOW{\Lower7 }}
-\setvalue{\??tabledistance\v!big }{\dotableOpenUp22\def\LOW{\Lower8 }}
+\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\dotableparalignment{\raggedright}}
-\setvalue{\??tablealign\v!left }{\def\dotableparalignment{\raggedleft}}
-\setvalue{\??tablealign\v!middle }{\def\dotableparalignment{\raggedcenter}}
-\setvalue{\??tablealign\s!unknown}{\def\dotableparalignment{\notragged}}
+\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
@@ -2188,11 +2167,11 @@
\def\dohandlebar % here ?
{\ifmmode
- \@EA\domathmodebar
+ \expandafter\domathmodebar
\else\ifintable
- \@EAEAEA\domathmodebar
+ \doubleexpandafter\domathmodebar
\else
- \@EAEAEA\dotextmodebar
+ \doubleexpandafter\dotextmodebar
\fi\fi}
\appendtoks
@@ -2201,10 +2180,10 @@
\assignalfadimension{\directtablesparameter\c!HL}\m_tabl_table_HLheight246%
\to \everysetuptables
-\def\dolocaltablesetup
+\def\tabl_table_local_setups
{\directtablesparameter\c!commands\relax
\usebodyfontparameter\directtablesparameter
- \tablelinethicknessunit\dimexpr\directtablesparameter\c!rulethickness/\tablelinethicknessfactor\relax
+ \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
@@ -2219,13 +2198,13 @@
\fi
\edef\tablestrutheightfactor{\withoutpt\the\dimexpr10\dimexpr\tablestrutheightfactor\points}%
\edef\tablestrutdepthfactor {\withoutpt\the\dimexpr10\dimexpr\tablestrutdepthfactor \points}%
- \tablestrutunit\dimexpr\normalbaselineskip/12\relax % 12 is default bodyfont
- \tableintercolumnspaceunit.5em plus 1fil minus .25em\relax
- \tablecolumnwidthunit .5em\relax
- \tablekernunit .5em\relax}
+ \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
-%D control over spacing.
+%D As one can see, we didn't only add color, but also more control over spacing.
%D
%D \startbuffer[a]
%D \starttable[|c|]
@@ -2257,11 +2236,10 @@
%D
%D \typebuffer[b]
%D
-%D The first table is typeset using the default height and
-%D depth factors .8 and .4. The second table has both factors
-%D set to \type {strut}, and the third table shows what
-%D happens when we set the values to zero. The rightmost table
-%D is typeset using the tabulate environment.
+%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]}$}
diff --git a/Master/texmf-dist/tex/context/base/tabl-tbl.lua b/Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.lua
index 13d899de647..13d899de647 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tbl.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.lua
diff --git a/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.mkiv
index ae4f03825a7..c8d7d5aae6d 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-tbl.mkiv
@@ -262,14 +262,21 @@
\expandafter\tabl_tabulate_initialize_boxes_step
\fi}
+% \def\tabl_tabulate_initialize_box#1% also used elsewhere
+% {\ifcsname\??tabulatebox\number#1\endcsname
+% \tabl_tabulate_initialize_box_yes#1%
+% \else
+% \tabl_tabulate_initialize_box_nop#1%
+% \fi}
\def\tabl_tabulate_initialize_box#1% also used elsewhere
{\ifcsname\??tabulatebox\number#1\endcsname
- \tabl_tabulate_initialize_box_yes#1%
+ \tabl_tabulate_initialize_box_yes
\else
\tabl_tabulate_initialize_box_nop#1%
\fi}
-\def\tabl_tabulate_initialize_box_yes#1{\global \setbox\csname\??tabulatebox\number#1\endcsname\emptybox}
+%def\tabl_tabulate_initialize_box_yes#1{\global \setbox\csname\??tabulatebox\number#1\endcsname\emptybox}
+\def\tabl_tabulate_initialize_box_yes {\global \setbox\lastnamedcs\emptybox}
\def\tabl_tabulate_initialize_box_nop#1{\expandafter\newbox\csname\??tabulatebox\number#1\endcsname}
\tabl_tabulate_initialize_boxes{16} % not really needed
@@ -322,7 +329,7 @@
\fi}
\unexpanded\def\tabl_tabulate_setups_check
- {\csname\??tabulatesetup\the\c_tabl_tabulate_column\endcsname}
+ {\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}
@@ -372,7 +379,7 @@
\unexpanded\def\tabl_tabulate_check_local_vrule_color_second#1%
{\relax
\ifx\m_tabl_tabulate_vrule_color_local\empty
- \gdef\m_tabl_tabulate_vrule_color{#1}%
+ \xdef\m_tabl_tabulate_vrule_color{#1}%
\else
\global\let\m_tabl_tabulate_vrule_color\m_tabl_tabulate_vrule_color_local
\global\let\m_tabl_tabulate_vrule_color_local\empty
@@ -421,7 +428,7 @@
\let\tabl_tabulate_hook_g\donothing
\def\tabl_tabulate_set_preamble_step#1#2% only makes sense for many tabulates
- {\normalexpanded{\t_tabl_tabulate_preamble{\the\t_tabl_tabulate_preamble
+ {\etoksapp\t_tabl_tabulate_preamble{%
\tabl_tabulate_check_local_vrule_thickness\constantdimenargument\d_tabl_tabulate_vrulethickness
\tabl_tabulate_check_local_vrule_color\constantemptyargument\m_tabl_tabulate_vrule_color
\tabl_tabulate_check_local_color\constantemptyargument\m_tabl_tabulate_color\constantnumberargument\c_tabl_tabulate_colorspan
@@ -429,7 +436,6 @@
\aligntab
\tabl_tabulate_column_vrule_inject
\tabl_tabulate_color_side_left
-% \tabl_tabulate_inject_pre_skip{\the\s_tabl_tabulate_pre}%
\tabl_tabulate_inject_pre_skip{\the\dimexpr\s_tabl_tabulate_pre}% get rid of plus
\alignmark\alignmark
\aligntab
@@ -499,8 +505,8 @@
\noexpand\dostoptagged
\tabl_tabulate_inject_post_skip{\the\dimexpr\s_tabl_tabulate_post}% get rid of plus
\alignmark\alignmark
- }}%
- \t_tabl_tabulate_dummy\expandafter{\the\t_tabl_tabulate_dummy\NC}%
+ }%
+ \toksapp\t_tabl_tabulate_dummy{\NC}%
\s_tabl_tabulate_pre.5\d_tabl_tabulate_unit\relax
\ifnum\c_tabl_tabulate_columns<\numexpr\c_tabl_tabulate_nofcolumns-\plusone\relax
\s_tabl_tabulate_post\s_tabl_tabulate_pre
@@ -535,10 +541,11 @@
\tabl_tabulate_set_preamble}
\installtabulatepreambleoption{R}{\t_tabl_tabulate_font{\rm}%
\tabl_tabulate_set_preamble}
-\installtabulatepreambleoption{m}{\t_tabl_tabulate_bmath{$}%
- \t_tabl_tabulate_emath{$}%
+\installtabulatepreambleoption{m}{\t_tabl_tabulate_bmath{\normalstartimath}%
+ \t_tabl_tabulate_emath{\normalstopimath}%
\tabl_tabulate_set_preamble}
-\installtabulatepreambleoption{M}{\t_tabl_tabulate_bmath{$\displaystyle}\t_tabl_tabulate_emath{$}%
+\installtabulatepreambleoption{M}{\t_tabl_tabulate_bmath{\normalstartimath\displaystyle}%
+ \t_tabl_tabulate_emath{\normalstopimath}%
\tabl_tabulate_set_preamble}
\installtabulatepreambleoption{h}{\tabl_tabulate_set_hook}
\installtabulatepreambleoption{b}{\tabl_tabulate_set_before}
@@ -586,7 +593,8 @@
\def\tabl_tabulate_set_preamble#1%
{\ifcsname\??tabulatepreamble\string#1\endcsname
- \expandafter\tabl_tabulate_set_preamble_yes
+ %\expandafter\tabl_tabulate_set_preamble_yes
+ \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
\else
\expandafter\tabl_tabulate_set_preamble_nop
\fi{#1}}
@@ -791,19 +799,19 @@
\fi}
\def\tabl_tabulate_set_last_entry#1% rulespec
- {\global\let\m_tabl_tabulate_vrule_color\empty
- \rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command
+ {\global\let\m_tabl_tabulate_color\empty
+ \global\let\m_tabl_tabulate_vrule_color\empty
+ \edef\currenttabulationtrulespec{#1}%
\ifx\currenttabulationtrulespec\empty
\global\d_tabl_tabulate_vrulethickness\zeropoint
\else
\global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_default
\rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command
\fi
- \normalexpanded{\t_tabl_tabulate_preamble{\the\t_tabl_tabulate_preamble
+ \etoksapp\t_tabl_tabulate_preamble{%
\tabl_tabulate_check_local_vrule_thickness\constantdimenargument\d_tabl_tabulate_vrulethickness
\tabl_tabulate_check_local_vrule_color\constantemptyargument\m_tabl_tabulate_vrule_color
- \tabl_tabulate_column_vrule_inject}}%
- }
+ \tabl_tabulate_column_vrule_inject}}
\let\settabulateentry \tabl_tabulate_set_entry % used at the lua end
\let\settabulatelastentry\tabl_tabulate_set_last_entry % used at the lua end
@@ -830,7 +838,7 @@
\fi}
\def\tabl_tabulate_check_whitespace
- {\setbox\scratchbox\vbox
+ {\setbox\scratchbox\vpack
{\splitdiscards
\unskip
\ifdim\lastskip>\d_tabl_tabulate_splitoff_betweenskip
@@ -853,7 +861,7 @@
\tabl_tabulate_check_whitespace
\fi
\tabl_tabulate_color_repeat % needs to end up in a cell
- \setbox\b_tabl_tabulate\hbox to \wd\b_tabl_tabulate
+ \setbox\b_tabl_tabulate\hpack to \wd\b_tabl_tabulate
{\hss\tabl_tabulate_hook_yes{\box\b_tabl_tabulate}\hss}%
\tabl_tabulate_normalize_splitline
\tabl_tabulate_check_linenumbers
@@ -1054,7 +1062,8 @@
\def\tabl_tabulate_check_full_content % - needed, else confusion with \c!header
{\ifcsname\??tabulatehead\currenttabulation\endcsname
- \expandafter\ifx\csname\??tabulatehead\currenttabulation\endcsname\empty
+ %\expandafter\ifx\csname\??tabulatehead\currenttabulation\endcsname\empty
+ \expandafter\ifx\lastnamedcs\empty
\let\tabl_tabulate_insert_head\empty
\else
\let\tabl_tabulate_insert_head\tabl_tabulate_insert_head_content
@@ -1064,6 +1073,7 @@
\fi
\ifcsname\??tabulatefoot\currenttabulation\endcsname
\expandafter\ifx\csname\??tabulatefoot\currenttabulation\endcsname\empty
+ %\expandafter\ifx\lastnamedcs\empty
\let\tabl_tabulate_insert_foot\empty
\else
\let\tabl_tabulate_insert_foot\tabl_tabulate_insert_head_content
@@ -1210,6 +1220,9 @@
\fi
\bgroup % settings
%
+ \t_tabl_tabulate_preamble\emptytoks
+ \t_tabl_tabulate_dummy \emptytoks
+ %
\resetcharacteralign
%
\edef\p_distance {\tabulationparameter\c!distance}%
@@ -1426,7 +1439,7 @@
\def\tabl_tabulate_column_rule_separator_step#1%
{\ifcsname\??tabulateseparator#1\endcsname
- \csname\??tabulateseparator#1\endcsname
+ \lastnamedcs
\else
\s_tabl_tabulate_separator#1\relax
\fi}
@@ -1533,18 +1546,15 @@
\global\c_tabl_tabulate_max_colorcolumn\c_tabl_tabulate_column
\fi
\setxvalue{\??tabulatecolor\the\c_tabl_tabulate_column}{#1}%
- %\attribute\alignbackgroundattribute\plusone
- %\dousecolorparameter{#1}\char\zerocount\strut % hack
- \hbox \thealignbackgroundcolorattr{#1}{}%
+ \hbox \thealignbackgroundcolorattr{#1}{}% pack ?
\endgroup}
\def\tabl_tabulate_color_repeat_second % for split off lines
{\begingroup
\scratchcounter\numexpr\c_tabl_tabulate_column-\plusone\relax % ugly !
\ifcsname\??tabulatecolor\the\scratchcounter\endcsname
- %\expandafter\dousecolorparameter\csname\??tabulatecolor\the\scratchcounter\endcsname
- %\strut\char\zerocount % hack
- \hbox \thealignbackgroundcolorattr{\csname\??tabulatecolor\the\scratchcounter\endcsname}{}%
+ %\hbox \thealignbackgroundcolorattr{\csname\??tabulatecolor\the\scratchcounter\endcsname}{}% pack ?
+ \hbox \thealignbackgroundcolorattr{\lastnamedcs}{}% pack ?
\fi
\endgroup}
@@ -1617,7 +1627,7 @@
\def\tabl_tabulate_flush_indent
{\ifnum\c_tabl_tabulate_column=\zerocount
- \hbox to \d_tabl_tabulate_indent
+ \hbox to \d_tabl_tabulate_indent % pack ?
{% we now have a local hsize, and since we want to
% register positional info (i.e. real hsizes) we
% need to reconstitute the original hsize
@@ -1907,11 +1917,28 @@
\tabl_tabulate_nobreak_inject
\stoptabulatenoalign}
+% \unexpanded\def\tabl_tabulate_ML_second_indeed
+% {\tabl_tabulate_column_rule_separator_inject
+% \tabl_tabulate_hrule_inject
+% \vskip-\p_rulethickness\relax
+% \tabl_tabulate_hrule_inject
+% \tabl_tabulate_break_no
+% \tabl_tabulate_column_rule_separator_inject
+% \stoptabulatenoalign}
+
+\def\spac_vspacing_no_topskip % use grouped
+ {\attribute\skipcategoryattribute\plusten}
+
\unexpanded\def\tabl_tabulate_ML_second_indeed
- {\tabl_tabulate_column_rule_separator_inject
+ {\tabl_tabulate_break_no
+ \tabl_tabulate_column_rule_separator_inject
+ \tabl_tabulate_break_no
\tabl_tabulate_hrule_inject
\vskip-\p_rulethickness\relax
+ \begingroup
+ \spac_vspacing_no_topskip
\tabl_tabulate_hrule_inject
+ \endgroup
\tabl_tabulate_break_no
\tabl_tabulate_column_rule_separator_inject
\stoptabulatenoalign}
@@ -2106,11 +2133,11 @@
% \edef\totaltabulatecolumns{\the\numexpr3*\c_tabl_tabulate_columns+\plusfour}%
\d_tabl_tabulate_width\zeropoint
\tabl_tabulate_initialize_boxes\c_tabl_tabulate_columns
- \t_tabl_tabulate_preamble\expandafter{\the\t_tabl_tabulate_preamble
+ \toksapp\t_tabl_tabulate_preamble{%
\aligntab\alignmark\alignmark
\global\advance\c_tabl_tabulate_column\plusone % maybe just set it already
}%
- \t_tabl_tabulate_dummy\expandafter{\the\t_tabl_tabulate_dummy
+ \toksapp\t_tabl_tabulate_dummy{%
\NC\unskip\unskip\crcr\tabl_tabulate_flush_collected % no count
}%
\global\c_tabl_tabulate_column\zerocount
@@ -2171,6 +2198,7 @@
\dostarttagged\t!tabulaterow\empty
\setfalse\inhibitmargindata % new per 2012.06.13 ... really needed
\everycr\expandafter{\the\everycr\dostoptagged\dostarttagged\t!tabulaterow\empty}%
+ % \toksapp\everycr{\dostoptagged\dostarttagged\t!tabulaterow\empty}%
\expandafter\halign\expandafter{\the\t_tabl_tabulate_preamble\crcr\tabl_tabulate_insert_content\crcr}%
\dostoptagged
\dostoptagged
diff --git a/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/tabl-tsp.mkiv
index 64ab94a67da..e0c3b9b746b 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-tsp.mkiv
@@ -257,6 +257,8 @@
\global\setfalse\usesamefloatnumber % new, prevent next increment
\global\setfalse\splitfloatfirstdone} % we can use this one for tests
+\newconditional\tabl_split_forced_page
+
\def\tabl_split_loop_body
{\ifinsidecolumns
% brrr, assumes empty columns
@@ -303,8 +305,22 @@
\splittopskip\zeropoint
\doloop % inner loop
{\setbox\scratchbox\vsplit\tsplitcontent to \onepoint % \lineheight
- \setbox\scratchbox\vbox{\unvbox\scratchbox}%
- \ifdim\dimexpr\d_tabl_split_available-\htdp\scratchbox-\htdp\tsplitresult\relax>\zeropoint
+ \setbox\scratchbox\vbox % \vpack
+ {\unvbox\scratchbox
+ \setbox\scratchbox\vbox
+ {\splitdiscards
+ \ifnum\lastpenalty>-\plustenthousand\else
+ % so that \bTR[before=\page] works
+ \global\settrue\tabl_split_forced_page
+ \fi}}%
+ \ifconditional\tabl_split_forced_page
+ \global\setfalse\tabl_split_forced_page
+ \setbox\tsplitresult\vbox
+ {\unvbox\tsplitresult
+ \tsplitinbetween
+ \unvbox\scratchbox}%
+ \exitloop
+ \else\ifdim\dimexpr\d_tabl_split_available-\htdp\scratchbox-\htdp\tsplitresult\relax>\zeropoint
\setbox\tsplitresult\vbox
{\unvbox\tsplitresult
\tsplitinbetween
@@ -328,7 +344,7 @@
\tsplitinbetween
\ifvoid\tsplitcontent\else\unvbox\tsplitcontent\fi}%
\exitloop
- \fi\fi\fi
+ \fi\fi\fi\fi
\setfalse\c_tabl_split_head
\setfalse\c_tabl_split_full}%
\postprocesstsplit
diff --git a/Master/texmf-dist/tex/context/base/tabl-xnt.mkvi b/Master/texmf-dist/tex/context/base/mkiv/tabl-xnt.mkvi
index fd2de5a13cd..fd2de5a13cd 100644
--- a/Master/texmf-dist/tex/context/base/tabl-xnt.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-xnt.mkvi
diff --git a/Master/texmf-dist/tex/context/base/tabl-xtb.lua b/Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.lua
index 4bf8e3107ec..87d5fa12150 100644
--- a/Master/texmf-dist/tex/context/base/tabl-xtb.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.lua
@@ -68,6 +68,7 @@ local getfield = nuts.getfield
local getbox = nuts.getbox
local setfield = nuts.setfield
+local setlink = nuts.setlink
local copy_node_list = nuts.copy_list
local hpack_node_list = nuts.hpack
@@ -573,11 +574,13 @@ function xtables.reflow_width()
widths[c] = fixedwidth
width = width + fixedwidth
else
- width = width + widths[c]
- if width > maxwidth then
+ local wc = widths[c]
+ width = width + wc
+ -- if width > maxwidth then
+ if wc > maxwidth then -- per 2015-08-09
autowidths[c] = true
nofwide = nofwide + 1
- widetotal = widetotal + widths[c]
+ widetotal = widetotal + wc
end
end
if c < nofcolumns then
@@ -822,13 +825,11 @@ function xtables.construct()
-- setfield(list,"height",0)
-- setfield(list,"depth",0)
-- faster:
- local h = new_hlist()
- setfield(h,"list",list)
+ local h = new_hlist(list)
list = h
--
if start then
- setfield(stop,"next",list)
- setfield(list,"prev",stop)
+ setlink(stop,list)
else
start = list
end
@@ -840,8 +841,7 @@ function xtables.construct()
end
local kern = new_kern(step)
if stop then
- setfield(stop,"next",kern)
- setfield(kern,"prev",stop)
+ setlink(stop,kern)
else -- can be first spanning next row (ny=...)
start = kern
end
@@ -850,8 +850,7 @@ function xtables.construct()
if start then
if rightmargindistance > 0 then
local kern = new_kern(rightmargindistance)
- setfield(stop,"next",kern)
- setfield(kern,"prev",stop)
+ setlink(stop,kern)
-- stop = kern
end
return start, heights[r] + depths[r], hasspan
@@ -1248,3 +1247,27 @@ implement { name = "x_table_set_reflow_height", actions = xtables.set_re
implement { name = "x_table_set_construct", actions = xtables.set_construct }
implement { name = "x_table_r", actions = function() context(data.currentrow or 0) end }
implement { name = "x_table_c", actions = function() context(data.currentcolumn or 0) end }
+
+-- experiment:
+
+do
+
+ local context = context
+
+ local startxtable = context.startxtable
+ local stopxtable = context.stopxtable
+
+ local startcollecting = context.startcollecting
+ local stopcollecting = context.stopcollecting
+
+ function context.startxtable(...)
+ startcollecting()
+ startxtable(...)
+ end
+
+ function context.stopxtable()
+ stopxtable()
+ stopcollecting()
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi b/Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.mkvi
index 73ba9104551..851b6e80f84 100644
--- a/Master/texmf-dist/tex/context/base/tabl-xtb.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/tabl-xtb.mkvi
@@ -86,7 +86,7 @@
\numexpr\tablecellcolumns\relax
\numexpr\raggedstatus\relax}%
\def\dotagxtablesignal
- {\char\zerocount}% not used
+ {\signalcharacter}% not used
\to \everyenableelements
\newdimen\d_tabl_x_width
@@ -718,6 +718,19 @@
\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
\unexpanded\def\startxgroup
@@ -728,8 +741,7 @@
{\endgroup}
\unexpanded\def\tabl_x_start_group_delayed_one[#tag]%
-% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??xtablecheck#tag\endcsname
+ {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
\expandafter\tabl_x_start_group_delayed_two
\else
\expandafter\setupcurrentxtable
@@ -754,8 +766,7 @@
\doifelsenextoptionalcs\tabl_x_start_cell_delayed_one\tabl_x_start_cell_nop}
\unexpanded\def\tabl_x_start_cell_delayed_one[#tag]%
-% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??xtablecheck#tag\endcsname
+ {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
\expandafter\tabl_x_start_cell_delayed_two
\else
\expandafter\tabl_x_start_cell_yes
@@ -779,8 +790,7 @@
\doifelsenextoptionalcs\tabl_x_start_row_delayed_one\tabl_x_start_row_nop}
\unexpanded\def\tabl_x_start_row_delayed_one[#tag]%
-% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??xtablecheck#tag\endcsname
+ {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
\expandafter\tabl_x_start_row_delayed_two
\else
\expandafter\tabl_x_start_row_yes
diff --git a/Master/texmf-dist/tex/context/base/task-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/task-ini.lua
index 062f0208f18..eaf342234de 100644
--- a/Master/texmf-dist/tex/context/base/task-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/task-ini.lua
@@ -65,7 +65,8 @@ appendaction("processors", "lists", "languages.visualizediscretionaries"
-- appendaction("processors", "lists", "typesetters.initials.handler") -- disabled
-appendaction("shipouts", "normalizers", "nodes.handlers.cleanuppage") -- disabled
+appendaction("shipouts", "normalizers", "typesetters.margins.finalhandler") -- disabled
+------------("shipouts", "normalizers", "nodes.handlers.cleanuppage") -- disabled
appendaction("shipouts", "normalizers", "builders.paragraphs.expansion.trace") -- disabled
appendaction("shipouts", "normalizers", "typesetters.alignments.handler")
appendaction("shipouts", "normalizers", "nodes.references.handler") -- disabled
@@ -88,26 +89,30 @@ appendaction("shipouts", "finishers", "attributes.viewerlayers.handler")
--maybe integrate relocate and families
-appendaction("math", "normalizers", "noads.handlers.showtree", nil, "nohead")
+appendaction("math", "normalizers", "noads.handlers.showtree", nil, "nohead")
-appendaction("math", "normalizers", "noads.handlers.unscript", nil, "nohead") -- always on (maybe disabled)
-appendaction("math", "normalizers", "noads.handlers.variants", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.relocate", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.families", nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.unscript", nil, "nohead") -- always on (maybe disabled)
+appendaction("math", "normalizers", "noads.handlers.variants", nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.relocate", nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.families", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.render", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.collapse", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.resize", nil, "nohead") -- always on
-------------("math", "normalizers", "noads.handlers.respace", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.check", nil, "nohead") -- always on
-appendaction("math", "normalizers", "noads.handlers.tags", nil, "nohead") -- disabled
-appendaction("math", "normalizers", "noads.handlers.italics", nil, "nohead") -- disabled
-appendaction("math", "normalizers", "noads.handlers.classes", nil, "nohead") -- disabled
+appendaction("math", "normalizers", "noads.handlers.render", nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.collapse", nil, "nohead") -- * first-- always on
+appendaction("math", "normalizers", "noads.handlers.domains", nil, "nohead") -- * last -- disabled
+appendaction("math", "normalizers", "noads.handlers.autofences",nil, "nohead") -- disabled
+appendaction("math", "normalizers", "noads.handlers.resize", nil, "nohead") -- always on
+------------("math", "normalizers", "noads.handlers.respace", nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.alternates",nil, "nohead") -- always on
+appendaction("math", "normalizers", "noads.handlers.tags", nil, "nohead") -- disabled
+appendaction("math", "normalizers", "noads.handlers.italics", nil, "nohead") -- disabled
+appendaction("math", "normalizers", "noads.handlers.classes", nil, "nohead") -- disabled
appendaction("math", "builders", "builders.kernel.mlist_to_hlist") -- always on
------------("math", "builders", "noads.handlers.italics", nil, "nohead") -- disabled
appendaction("math", "builders", "typesetters.directions.processmath") -- disabled (has to happen pretty late)
+appendaction("finalizers", "lists", "typesetters.paragraphs.normalize") -- moved here
+appendaction("finalizers", "lists", "typesetters.margins.localhandler") -- disabled
appendaction("finalizers", "lists", "builders.paragraphs.keeptogether")
------------("finalizers", "lists", "nodes.handlers.graphicvadjust") -- todo
appendaction("finalizers", "fonts", "builders.paragraphs.solutions.splitters.optimize") -- experimental
@@ -115,13 +120,15 @@ appendaction("finalizers", "lists", "builders.paragraphs.tag")
-- still experimental
+appendaction("mvlbuilders", "normalizers", "typesetters.margins.globalhandler") -- disabled
appendaction("mvlbuilders", "normalizers", "nodes.handlers.migrate")
appendaction("mvlbuilders", "normalizers", "builders.vspacing.pagehandler") -- last !
-appendaction("mvlbuilders", "normalizers", "builders.profiling.pagehandler") -- here !
+appendaction("mvlbuilders", "normalizers", "builders.profiling.pagehandler") -- here !
+------------("vboxbuilders", "normalizers", "typesetters.margins.localhandler")
appendaction("vboxbuilders", "normalizers", "builders.vspacing.vboxhandler")
-appendaction("vboxbuilders", "normalizers", "builders.profiling.vboxhandler") -- here !
+appendaction("vboxbuilders", "normalizers", "builders.profiling.vboxhandler") -- here !
-- experimental too
@@ -157,7 +164,9 @@ disableaction("processors", "typesetters.kerns.handler")
disableaction("processors", "typesetters.italics.handler")
disableaction("processors", "languages.visualizediscretionaries")
disableaction("processors", "nodes.handlers.stripping")
+disableaction("processors", "builders.paragraphs.solutions.splitters.split")
+disableaction("shipouts", "typesetters.margins.finalhandler")
disableaction("shipouts", "builders.paragraphs.expansion.trace")
disableaction("shipouts", "typesetters.alignments.handler")
disableaction("shipouts", "nodes.rules.handler")
@@ -173,16 +182,11 @@ disableaction("shipouts", "nodes.visualizers.handler")
disableaction("shipouts", "nodes.handlers.accessibility")
disableaction("shipouts", "nodes.handlers.backgrounds")
disableaction("shipouts", "nodes.handlers.alignbackgrounds")
-
disableaction("shipouts", "nodes.references.handler")
disableaction("shipouts", "nodes.destinations.handler")
+-------------("shipouts", "nodes.handlers.export")
---~ disableaction("shipouts", "nodes.handlers.export")
-
-disableaction("mvlbuilders", "nodes.handlers.migrate")
-
-disableaction("processors", "builders.paragraphs.solutions.splitters.split")
-
+disableaction("finalizers", "typesetters.margins.localhandler")
disableaction("finalizers", "builders.paragraphs.keeptogether")
disableaction("finalizers", "builders.paragraphs.solutions.splitters.optimize")
-------------("finalizers", "nodes.handlers.graphicvadjust") -- sort of obsolete
@@ -191,12 +195,17 @@ disableaction("finalizers", "builders.paragraphs.tag")
disableaction("math", "noads.handlers.showtree")
disableaction("math", "noads.handlers.tags")
disableaction("math", "noads.handlers.italics")
+disableaction("math", "noads.handlers.domains")
disableaction("math", "noads.handlers.classes")
+disableaction("math", "noads.handlers.autofences")
disableaction("math", "typesetters.directions.processmath")
+disableaction("mvlbuilders", "typesetters.margins.globalhandler")
+disableaction("mvlbuilders", "nodes.handlers.migrate")
disableaction("mvlbuilders", "typesetters.checkers.handler")
disableaction("mvlbuilders", "builders.profiling.pagehandler")
+-------------("vboxbuilders","typesetters.margins.localhandler")
disableaction("vboxbuilders","typesetters.checkers.handler")
disableaction("vboxbuilders","builders.profiling.vboxhandler")
@@ -235,10 +244,10 @@ disableaction("processors", "builders.kernel.kerning")
directives.register("nodes.basepass", function(v)
if v then
- disableaction("processors", "builders.kernel.ligaturing")
- disableaction("processors", "builders.kernel.kerning")
- else
enableaction("processors", "builders.kernel.ligaturing")
enableaction("processors", "builders.kernel.kerning")
+ else
+ disableaction("processors", "builders.kernel.ligaturing")
+ disableaction("processors", "builders.kernel.kerning")
end
end)
diff --git a/Master/texmf-dist/tex/context/base/task-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/task-ini.mkiv
index 6cdbe739f15..6cdbe739f15 100644
--- a/Master/texmf-dist/tex/context/base/task-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/task-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/toks-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/toks-ini.lua
new file mode 100644
index 00000000000..132605d385a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-ini.lua
@@ -0,0 +1,281 @@
+if not modules then modules = { } end modules ['toks-ini'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+tokens = tokens or { }
+
+local tokens = tokens
+local token = token -- the built in one
+local tonumber = tonumber
+local tostring = tostring
+local utfchar = utf.char
+local char = string.char
+local printtable = table.print
+local concat = table.concat
+
+if setinspector then
+
+ local istoken = token.is_token
+ local simple = { letter = "letter", other_char = "other" }
+
+ local function astable(t)
+ if t and istoken(t) then
+ local cmdname = t.cmdname
+ local simple = simple[cmdname]
+ if simple then
+ return {
+ category = simple,
+ character = utfchar(t.mode) or nil,
+ }
+ else
+ return {
+ command = t.command,
+ id = t.id,
+ tok = t.tok,
+ csname = t.csname,
+ active = t.active,
+ expandable = t.expandable,
+ protected = t.protected,
+ mode = t.mode,
+ index = t.index,
+ cmdname = cmdname,
+ }
+ end
+ end
+ end
+
+ tokens.istoken = istoken
+ tokens.astable = astable
+
+ setinspector("token",function(v) if istoken(v) then printtable(astable(v),tostring(v)) return true end end)
+
+end
+
+local scan_toks = token.scan_toks
+local scan_string = token.scan_string
+local scan_int = token.scan_int
+local scan_code = token.scan_code
+local scan_dimen = token.scan_dimen
+local scan_glue = token.scan_glue
+local scan_keyword = token.scan_keyword
+local scan_token = token.scan_token
+local scan_word = token.scan_word
+local scan_number = token.scan_number
+local scan_csname = token.scan_csname
+
+local get_next = token.get_next
+
+local set_macro = token.set_macro
+local get_cmdname = token.get_cmdname
+local create_token = token.create
+
+function tokens.defined(name)
+ return get_cmdname(create_token(name)) ~= "undefined_cs"
+end
+
+-- set_macro = function(k,v,g)
+-- if g == "global" then
+-- context.setgvalue(k,v or '')
+-- else
+-- context.setvalue(k,v or '')
+-- end
+-- end
+
+local bits = {
+ escape = 2^ 0,
+ begingroup = 2^ 1,
+ endgroup = 2^ 2,
+ mathshift = 2^ 3,
+ alignment = 2^ 4,
+ endofline = 2^ 5,
+ parameter = 2^ 6,
+ superscript = 2^ 7,
+ subscript = 2^ 8,
+ ignore = 2^ 9,
+ space = 2^10, -- 1024
+ letter = 2^11,
+ other = 2^12,
+ active = 2^13,
+ comment = 2^14,
+ invalid = 2^15,
+ --
+ character = 2^11 + 2^12,
+ whitespace = 2^13 + 2^10, -- / needs more checking
+ --
+ open = 2^10 + 2^1, -- space + begingroup
+ close = 2^10 + 2^2, -- space + endgroup
+}
+
+-- for k, v in next, bits do bits[v] = k end
+
+tokens.bits = bits
+
+local space_bits = bits.space
+
+-- words are space or \relax terminated and the trailing space is gobbled; a word
+-- can contain any non-space letter/other
+
+local t = { } -- small optimization, a shared variable that is not reset
+
+if scan_word then
+
+ scan_number = function(base)
+ local s = scan_word()
+ if not s then
+ return nil
+ elseif base then
+ return tonumber(s,base)
+ else
+ return tonumber(s)
+ end
+ end
+
+else
+
+ scan_word = function()
+ local n = 0
+ while true do
+ local c = scan_code()
+ if c then
+ n = n + 1
+ t[n] = utfchar(c)
+ elseif scan_code(space_bits) then
+ if n > 0 then
+ break
+ end
+ elseif n > 0 then
+ break
+ else
+ return
+ end
+ end
+ return concat(t,"",1,n)
+ end
+
+ -- so we gobble the space (like scan_int) (number has to be space or non-char terminated
+ -- as we accept 0xabcd and such so there is no clear separator for a keyword
+
+ scan_number = function(base)
+ local n = 0
+ while true do
+ local c = scan_code()
+ if c then
+ n = n + 1
+ t[n] = char(c)
+ elseif scan_code(space_bits) then
+ if n > 0 then
+ break
+ end
+ elseif n > 0 then
+ break
+ else
+ return
+ end
+ end
+ local s = concat(t,"",1,n)
+ if base then
+ return tonumber(s,base)
+ else
+ return tonumber(s)
+ end
+ end
+
+end
+
+-- -- the next one cannot handle \iftrue true\else false\fi
+--
+-- local function scan_boolean()
+-- if scan_keyword("true") then
+-- return true
+-- elseif scan_keyword("false") then
+-- return false
+-- else
+-- return nil
+-- end
+-- end
+
+local function scan_boolean()
+ local kw = scan_word()
+ if kw == "true" then
+ return true
+ elseif kw == "false" then
+ return false
+ else
+ return nil
+ end
+end
+
+if not scan_csname then
+
+ scan_csname = function()
+ local t = get_next()
+ local n = t.csname
+ return n ~= "" and n or nil
+ end
+
+end
+
+tokens.scanners = { -- these expand
+ token = scan_token,
+ toks = scan_toks,
+ tokens = scan_toks,
+ dimen = scan_dimen,
+ dimension = scan_dimen,
+ glue = scan_glue,
+ skip = scan_glue,
+ integer = scan_int,
+ count = scan_int,
+ string = scan_string,
+ code = scan_code,
+ word = scan_word,
+ number = scan_number,
+ boolean = scan_boolean,
+ keyword = scan_keyword,
+ csname = scan_csname,
+}
+
+tokens.getters = { -- these don't expand
+ token = get_next,
+ count = tex.getcount,
+ dimen = tex.getdimen,
+ skip = tex.getglue,
+ glue = tex.getglue,
+ skip = tex.getmuglue,
+ glue = tex.getmuglue,
+ box = tex.getbox,
+}
+
+tokens.setters = {
+ macro = set_macro,
+ count = tex.setcount,
+ dimen = tex.setdimen,
+ skip = tex.setglue,
+ glue = tex.setglue,
+ skip = tex.setmuglue,
+ glue = tex.setmuglue,
+ box = tex.setbox,
+}
+
+-- static int run_scan_token(lua_State * L)
+-- {
+-- saved_tex_scanner texstate;
+-- save_tex_scanner(texstate);
+-- get_x_token();
+-- make_new_token(L, cur_cmd, cur_chr, cur_cs);
+-- unsave_tex_scanner(texstate);
+-- return 1;
+-- }
+--
+-- static int run_get_future(lua_State * L)
+-- {
+-- /* saved_tex_scanner texstate; */
+-- /* save_tex_scanner(texstate); */
+-- get_token();
+-- make_new_token(L, cur_cmd, cur_chr, cur_cs);
+-- back_input();
+-- /* unsave_tex_scanner(texstate); */
+-- return 1;
+-- }
diff --git a/Master/texmf-dist/tex/context/base/toks-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/toks-ini.mkiv
index 49625a93990..03ec997421a 100644
--- a/Master/texmf-dist/tex/context/base/toks-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-ini.mkiv
@@ -16,6 +16,7 @@
\registerctxluafile{toks-ini}{1.001}
\registerctxluafile{toks-scn}{1.001}
\registerctxluafile{cldf-scn}{1.001}
+\registerctxluafile{cldf-stp}{1.001}
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/toks-map.lua b/Master/texmf-dist/tex/context/base/mkiv/toks-map.lua
index 9120c2084e6..9120c2084e6 100644
--- a/Master/texmf-dist/tex/context/base/toks-map.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-map.lua
diff --git a/Master/texmf-dist/tex/context/base/toks-map.mkiv b/Master/texmf-dist/tex/context/base/mkiv/toks-map.mkiv
index f1b63a68b0a..f1b63a68b0a 100644
--- a/Master/texmf-dist/tex/context/base/toks-map.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-map.mkiv
diff --git a/Master/texmf-dist/tex/context/base/toks-scn.lua b/Master/texmf-dist/tex/context/base/mkiv/toks-scn.lua
index 84924c69419..5c8dee8f3d2 100644
--- a/Master/texmf-dist/tex/context/base/toks-scn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-scn.lua
@@ -28,6 +28,7 @@ local scanword = scanners.word
local scancode = scanners.code
local scanboolean = scanners.boolean
local scandimen = scanners.dimen
+local scancsname = scanners.csname
local todimen = number.todimen
local toboolean = toboolean
@@ -125,6 +126,7 @@ local shortcuts = {
scanopen = scanopen,
scanclose = scanclose,
scanlist = scanlist,
+ scancsname = scancsname,
todimen = todimen,
tonumber = tonumber,
tostring = tostring,
@@ -435,3 +437,11 @@ function tokens.scantable(t,data)
end
return data
end
+
+function tokens.constant(s)
+ if type(s) == "string" then
+ return "'" .. s .. "'"
+ else
+ return s
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/toks-tra.lua b/Master/texmf-dist/tex/context/base/mkiv/toks-tra.lua
new file mode 100644
index 00000000000..a1408b0b85a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-tra.lua
@@ -0,0 +1,292 @@
+if not modules then modules = { } end modules ['toks-ini'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+
+local utfbyte, utfchar, utfvalues = utf.byte, utf.char, utf.values
+local format, gsub = string.format, string.gsub
+local tostring = tostring
+
+local tokens = tokens
+local token = token -- the built in one
+local tex = tex
+local context = context
+local commands = commands
+
+tokens.collectors = tokens.collectors or { }
+local collectors = tokens.collectors
+
+collectors.data = collectors.data or { }
+local collectordata = collectors.data
+
+collectors.registered = collectors.registered or { }
+local registered = collectors.registered
+
+local report = logs.reporter("tokens","collectors")
+
+-- todo:
+--
+-- register : macros that will be expanded (only for demo-ing)
+-- flush : print back to tex
+-- test : fancy stuff
+
+local get_next = token.get_next
+local create_token = token.create
+
+function collectors.install(tag,end_cs)
+ local data, d = { }, 0
+ collectordata[tag] = data
+ end_cs = gsub(end_cs,"^\\","")
+ while true do
+ local t = get_next()
+ if t.csname == end_cs then
+ context[end_cs]()
+ return
+ else
+ d = d + 1
+ data[d] = t
+ end
+ end
+end
+
+local simple = { letter = "letter", other_char = "other" }
+
+function collectors.show(data)
+ -- We no longer have methods as we only used (in demos) method a
+ -- so there is no need to burden the core with this. We have a
+ -- different table anyway.
+ if type(data) == "string" then
+ data = collectordata[data]
+ end
+ if not data then
+ return
+ end
+ local ctx_NC = context.NC
+ local ctx_NR = context.NR
+ local ctx_bold = context.bold
+ local ctx_verbatim = context.verbatim
+ context.starttabulate { "|Tl|Tc|Tl|" }
+ ctx_NC() ctx_bold("cmd")
+ ctx_NC() ctx_bold("meaning")
+ ctx_NC() ctx_bold("properties")
+ ctx_NC() ctx_NR()
+ context.HL()
+ for i=1,#data do
+ local token = data[i]
+ local cmdname = token.cmdname
+ local simple = simple[cmdname]
+ ctx_NC()
+ ctx_verbatim(simple or cmdname)
+ ctx_NC()
+ ctx_verbatim(simple and utfchar(token.mode) or token.csname)
+ ctx_NC()
+ if token.active then context("active ") end
+ if token.expandable then context("expandable ") end
+ if token.protected then context("protected ") end
+ ctx_NC()
+ ctx_NR()
+ end
+ context.stoptabulate()
+end
+
+local function printlist(data)
+ if data and #data > 0 then
+ report("not supported (yet): printing back to tex")
+ end
+end
+
+tokens.printlist = printlist -- will change to another namespace
+
+function collectors.flush(tag)
+ printlist(collectordata[tag])
+end
+
+function collectors.test(tag,handle)
+ report("not supported (yet): testing")
+end
+
+function collectors.register(name)
+ report("not supported (yet): registering")
+end
+
+-- -- old token code
+--
+-- -- 1 = command, 2 = modifier (char), 3 = controlsequence id
+--
+-- local create = token.create
+-- local csname_id = token.csname_id
+-- local command_id = token.command_id
+-- local command_name = token.command_name
+-- local get_next = token.get_next
+-- local expand = token.expand
+-- local csname_name = token.csname_name
+--
+-- local function printlist(data)
+-- if data and #data > 0 then
+-- callbacks.push('token_filter', function ()
+-- callbacks.pop('token_filter') -- tricky but the nil assignment helps
+-- return data
+-- end)
+-- end
+-- end
+--
+-- tokens.printlist = printlist -- will change to another namespace
+--
+-- function collectors.flush(tag)
+-- printlist(collectordata[tag])
+-- end
+--
+-- function collectors.register(name)
+-- registered[csname_id(name)] = name
+-- end
+--
+-- local call = command_id("call")
+-- local letter = command_id("letter")
+-- local other = command_id("other_char")
+--
+-- function collectors.install(tag,end_cs)
+-- local data, d = { }, 0
+-- collectordata[tag] = data
+-- end_cs = gsub(end_cs,"^\\","")
+-- local endcs = csname_id(end_cs)
+-- while true do
+-- local t = get_next()
+-- local a, b = t[1], t[3]
+-- if b == endcs then
+-- context[end_cs]()
+-- return
+-- elseif a == call and registered[b] then
+-- expand()
+-- else
+-- d = d + 1
+-- data[d] = t
+-- end
+-- end
+-- end
+--
+-- function collectors.show(data)
+-- -- We no longer have methods as we only used (in demos) method a
+-- -- so there is no need to burden the core with this.
+-- if type(data) == "string" then
+-- data = collectordata[data]
+-- end
+-- if not data then
+-- return
+-- end
+-- local ctx_NC = context.NC
+-- local ctx_NR = context.NR
+-- local ctx_bold = context.bold
+-- local ctx_verbatim = context.verbatim
+-- context.starttabulate { "|T|Tr|cT|Tr|T|" }
+-- ctx_NC() ctx_bold("cmd")
+-- ctx_NC() ctx_bold("chr")
+-- ctx_NC()
+-- ctx_NC() ctx_bold("id")
+-- ctx_NC() ctx_bold("name")
+-- ctx_NC() ctx_NR()
+-- context.HL()
+-- for i=1,#data do
+-- local token = data[i]
+-- local cmd = token[1]
+-- local chr = token[2]
+-- local id = token[3]
+-- local name = command_name(token)
+-- ctx_NC()
+-- ctx_verbatim(name)
+-- ctx_NC()
+-- if tonumber(chr) >= 0 then
+-- ctx_verbatim(chr)
+-- end
+-- ctx_NC()
+-- if cmd == letter or cmd == other then
+-- ctx_verbatim(utfchar(chr))
+-- end
+-- ctx_NC()
+-- if id > 0 then
+-- ctx_verbatim(id)
+-- end
+-- ctx_NC()
+-- if id > 0 then
+-- ctx_verbatim(csname_name(token) or "")
+-- end
+-- ctx_NC() ctx_NR()
+-- end
+-- context.stoptabulate()
+-- end
+--
+-- function collectors.test(tag,handle)
+-- local t, w, tn, wn = { }, { }, 0, 0
+-- handle = handle or collectors.defaultwords
+-- local tagdata = collectordata[tag]
+-- for k=1,#tagdata do
+-- local v = tagdata[k]
+-- if v[1] == letter then
+-- wn = wn + 1
+-- w[wn] = v[2]
+-- else
+-- if wn > 0 then
+-- handle(t,w)
+-- wn = 0
+-- end
+-- tn = tn + 1
+-- t[tn] = v
+-- end
+-- end
+-- if wn > 0 then
+-- handle(t,w)
+-- end
+-- collectordata[tag] = t
+-- end
+
+-- Interfacing:
+
+commands.collecttokens = collectors.install
+commands.showtokens = collectors.show
+commands.flushtokens = collectors.flush
+commands.testtokens = collectors.test
+commands.registertoken = collectors.register
+
+-- Redundant:
+
+-- function collectors.test(tag)
+-- printlist(collectordata[tag])
+-- end
+
+-- For old times sake:
+
+collectors.dowithwords = collectors.test
+
+-- This is only used in old articles ... will move to a module:
+
+tokens.vbox = create_token("vbox")
+tokens.hbox = create_token("hbox")
+tokens.vtop = create_token("vtop")
+tokens.bgroup = create_token(utfbyte("{"),1)
+tokens.egroup = create_token(utfbyte("}"),2)
+
+tokens.letter = function(chr) return create_token(utfbyte(chr),11) end
+tokens.other = function(chr) return create_token(utfbyte(chr),12) end
+
+tokens.letters = function(str)
+ local t, n = { }, 0
+ for chr in utfvalues(str) do
+ n = n + 1
+ t[n] = create_token(chr, 11)
+ end
+ return t
+end
+
+function collectors.defaultwords(t,str)
+ if t then
+ local n = #t
+ n = n + 1 ; t[n] = tokens.bgroup
+ n = n + 1 ; t[n] = create_token("red")
+ for i=1,#str do
+ n = n + 1 ; t[n] = tokens.other('*')
+ end
+ n = n + 1 ; t[n] = tokens.egroup
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/toks-tra.mkiv b/Master/texmf-dist/tex/context/base/mkiv/toks-tra.mkiv
index a3e27eaf89f..a3e27eaf89f 100644
--- a/Master/texmf-dist/tex/context/base/toks-tra.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/toks-tra.mkiv
diff --git a/Master/texmf-dist/tex/context/base/trac-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-ctx.lua
index 493ce793686..493ce793686 100644
--- a/Master/texmf-dist/tex/context/base/trac-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-ctx.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-ctx.mkiv b/Master/texmf-dist/tex/context/base/mkiv/trac-ctx.mkiv
index 4240281a6fb..4240281a6fb 100644
--- a/Master/texmf-dist/tex/context/base/trac-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-ctx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/trac-deb.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-deb.lua
index d998295c13c..792ad9b567d 100644
--- a/Master/texmf-dist/tex/context/base/trac-deb.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-deb.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['trac-deb'] = {
local lpeg, status = lpeg, status
local lpegmatch = lpeg.match
-local format, concat, match, find = string.format, table.concat, string.match, string.find
+local format, concat, match, find, gsub = string.format, table.concat, string.match, string.find, string.gsub
local tonumber, tostring = tonumber, tostring
-- maybe tracers -> tracers.tex (and tracers.lua for current debugger)
@@ -104,13 +104,10 @@ end
local savedluaerror = nil
local function errorreporter(luaerror)
- if luaerror then
- logs.enable("lua error") --
- return logs.reporter("lua error")
- else
- logs.enable("tex error")
- return logs.reporter("tex error")
- end
+ local category = luaerror and "lua error" or "tex error"
+ local report = logs.reporter(category)
+ logs.enable(category)
+ return report
end
function tracers.showlines(filename,linenumber,offset,luaerrorline)
@@ -171,28 +168,33 @@ end
-- todo: \starttext bla \blank[foo] bla \stoptext
+local nop = function() end
+local resetmessages = status.resetmessages() or nop
+
local function processerror(offset)
+ -- print("[[ last tex error: " .. tostring(status.lasterrorstring or "<unset>") .. " ]]")
+ -- print("[[ last lua error: " .. tostring(status.lastluaerrorstring or "<unset>") .. " ]]")
+ -- print("[[ last warning : " .. tostring(status.lastwarningstring or "<unset>") .. " ]]")
+ -- print("[[ last location : " .. tostring(status.lastwarninglocation or "<unset>") .. " ]]")
+ -- print("[[ last context : " .. tostring(status.lasterrorcontext or "<unset>") .. " ]]")
+
local inputstack = resolvers.inputstack
local filename = inputstack[#inputstack] or status.filename
local linenumber = tonumber(status.linenumber) or 0
- --
- -- print("[[ last tex error: " .. tostring(status.lasterrorstring) .. " ]]")
- -- print("[[ last lua error: " .. tostring(status.lastluaerrorstring) .. " ]]")
- -- print("[[ start errorcontext ]]")
- -- tex.show_context()
- -- print("\n[[ stop errorcontext ]]")
- --
+ local lastcontext = status.lasterrorcontext
local lasttexerror = status.lasterrorstring or "?"
local lastluaerror = status.lastluaerrorstring or lasttexerror
local luaerrorline = match(lastluaerror,[[lua%]?:.-(%d+)]]) or (lastluaerror and find(lastluaerror,"?:0:",1,true) and 0)
- local report = errorreporter(luaerrorline)
+ resetmessages()
+ lastluaerror = gsub(lastluaerror,"%[\\directlua%]","[ctxlua]")
tracers.printerror {
filename = filename,
linenumber = linenumber,
+ offset = tonumber(offset) or 10,
lasttexerror = lasttexerror,
lastluaerror = lastluaerror,
luaerrorline = luaerrorline,
- offset = tonumber(offset) or 10,
+ lastcontext = lastcontext,
}
end
@@ -203,6 +205,7 @@ function tracers.printerror(specification)
local linenumber = specification.linenumber
local lasttexerror = specification.lasttexerror
local lastluaerror = specification.lastluaerror
+ local lastcontext = specification.lasterrorcontext
local luaerrorline = specification.luaerrorline
local offset = specification.offset
local report = errorreporter(luaerrorline)
@@ -213,11 +216,15 @@ function tracers.printerror(specification)
else
report_nl()
if luaerrorline then
- report("error on line %s in file %s:\n\n%s",linenumber,filename,lastluaerror)
+ report("lua error on line %s in file %s:\n\n%s",linenumber,filename,lastluaerror)
-- report("error on line %s in file %s:\n\n%s",linenumber,filename,lasttexerror)
else
- report("error on line %s in file %s: %s",linenumber,filename,lasttexerror)
- if tex.show_context then
+ report("tex error on line %s in file %s: %s",linenumber,filename,lasttexerror)
+ if lastcontext then
+ report_nl()
+ report_str(lastcontext)
+ report_nl()
+ elseif tex.show_context then
report_nl()
tex.show_context()
end
@@ -228,17 +235,37 @@ function tracers.printerror(specification)
end
end
-local nop = function() end
+local function processwarning(offset)
+ -- local inputstack = resolvers.inputstack
+ -- local filename = inputstack[#inputstack] or status.filename
+ -- local linenumber = tonumber(status.linenumber) or 0
+ local lastwarning = status.lastwarningstring or "?"
+ local lastlocation = status.lastwarningtag or "?"
+ resetmessages()
+ tracers.printwarning {
+ -- filename = filename,
+ -- linenumber = linenumber,
+ -- offset = tonumber(offset) or 10,
+ lastwarning = lastwarning ,
+ lastlocation = lastlocation,
+ }
+end
+
+function tracers.printwarning(specification)
+ logs.report("luatex warning","%s: %s",specification.lastlocation,specification.lastwarning)
+end
directives.register("system.errorcontext", function(v)
local register = callback.register
if v then
register('show_error_message', nop)
+ register('show_warning_message',function() processwarning(v) end)
register('show_error_hook', function() processerror(v) end)
register('show_lua_error_hook', nop)
else
register('show_error_message', nil)
register('show_error_hook', nil)
+ register('show_warning_message',nil)
register('show_lua_error_hook', nil)
end
end)
diff --git a/Master/texmf-dist/tex/context/base/trac-deb.mkiv b/Master/texmf-dist/tex/context/base/mkiv/trac-deb.mkiv
index 1e61a351261..1e61a351261 100644
--- a/Master/texmf-dist/tex/context/base/trac-deb.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-deb.mkiv
diff --git a/Master/texmf-dist/tex/context/base/trac-exp.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-exp.lua
index 5879f1b7bad..5879f1b7bad 100644
--- a/Master/texmf-dist/tex/context/base/trac-exp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-exp.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-fil.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-fil.lua
index 8cc903e2a62..8cc903e2a62 100644
--- a/Master/texmf-dist/tex/context/base/trac-fil.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-fil.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-inf.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-inf.lua
index 5497e54eb70..401fd01e7d9 100644
--- a/Master/texmf-dist/tex/context/base/trac-inf.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-inf.lua
@@ -14,7 +14,7 @@ if not modules then modules = { } end modules ['trac-inf'] = {
local type, tonumber, select = type, tonumber, select
local format, lower, find = string.format, string.lower, string.find
local concat = table.concat
-local clock = os.gettimeofday or os.clock -- should go in environment
+local clock = os.gettimeofday or os.clock -- should go in environment
local setmetatableindex = table.setmetatableindex
local serialize = table.serialize
@@ -145,13 +145,13 @@ function statistics.show()
-- so far
-- collectgarbage("collect")
register("lua properties",function()
- local list = status.list()
- local hashchar = tonumber(list.luatex_hashchars)
+ local hashchar = tonumber(status.luatex_hashchars)
+ local hashtype = status.luatex_hashtype
local mask = lua.mask or "ascii"
return format("engine: %s, used memory: %s, hash type: %s, hash chars: min(%s,40), symbol mask: %s (%s)",
jit and "luajit" or "lua",
statistics.memused(),
- list.luatex_hashtype or "default",
+ hashtype or "default",
hashchar and 2^hashchar or "unknown",
mask,
mask == "utf" and "τεχ" or "tex")
diff --git a/Master/texmf-dist/tex/context/base/trac-jus.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-jus.lua
index 0c92848dcec..ad1a098e27f 100644
--- a/Master/texmf-dist/tex/context/base/trac-jus.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-jus.lua
@@ -89,22 +89,22 @@ function checkers.handler(head)
-- special box
elseif delta >= max_threshold then
local rule = tracedrule(delta,naturalheight,naturaldepth,getfield(list,"glue_set") == 1 and "trace:dr" or "trace:db")
- setfield(current,"list",linked_nodes(list,new_hlist(rule)))
+ setlist(current,linked_nodes(list,new_hlist(rule)))
elseif delta <= min_threshold then
local alignstate = getattr(list,a_alignstate)
if alignstate == 1 then
local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dc")
- setfield(current,"list",linked_nodes(new_hlist(rule),list))
+ setlist(current,linked_nodes(new_hlist(rule),list))
elseif alignstate == 2 then
local lrule = tracedrule(-delta/2,naturalheight,naturaldepth,"trace:dy")
local rrule = copy_node(lrule)
- setfield(current,"list",linked_nodes(new_hlist(lrule),list,new_kern(delta/2),new_hlist(rrule)))
+ setlist(current,linked_nodes(new_hlist(lrule),list,new_kern(delta/2),new_hlist(rrule)))
elseif alignstate == 3 then
local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dm")
- setfield(current,"list",linked_nodes(list,new_kern(delta),new_hlist(rule)))
+ setlist(current,linked_nodes(list,new_kern(delta),new_hlist(rule)))
else
local rule = tracedrule(-delta,naturalheight,naturaldepth,"trace:dg")
- setfield(current,"list",linked_nodes(list,new_kern(delta),new_hlist(rule)))
+ setlist(current,linked_nodes(list,new_kern(delta),new_hlist(rule)))
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/trac-jus.mkiv b/Master/texmf-dist/tex/context/base/mkiv/trac-jus.mkiv
index d0823d31196..71d88b00e42 100644
--- a/Master/texmf-dist/tex/context/base/trac-jus.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-jus.mkiv
@@ -1,6 +1,6 @@
%D \module
%D [ file=trac-jus,
-%D version=2112.11.27,
+%D version=2012.11.27,
%D title=\CONTEXT\ Tracing Macros,
%D subtitle=Justification,
%D author=Hans Hagen,
diff --git a/Master/texmf-dist/tex/context/base/trac-lmx.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-lmx.lua
index 4f4ea62c489..4f4ea62c489 100644
--- a/Master/texmf-dist/tex/context/base/trac-lmx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-lmx.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-log.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-log.lua
index ce620e6cf0c..86557ef0927 100644
--- a/Master/texmf-dist/tex/context/base/trac-log.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-log.lua
@@ -110,6 +110,10 @@ local direct, subdirect, writer, pushtarget, poptarget, setlogfile, settimedlog,
if tex and (tex.jobname or tex.formatname) then
+ if texio.setescape then
+ texio.setescape(0) -- or (false)
+ end
+
local function useluawrites()
-- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2)
@@ -132,6 +136,8 @@ if tex and (tex.jobname or tex.formatname) then
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","")
@@ -150,6 +156,8 @@ if tex and (tex.jobname or tex.formatname) 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,...)
@@ -233,7 +241,7 @@ if tex and (tex.jobname or tex.formatname) then
end
report = function(a,b,c,...)
- if c then
+ 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]))
@@ -245,7 +253,7 @@ if tex and (tex.jobname or tex.formatname) then
end
direct = function(a,b,c,...)
- if c then
+ if c ~= nil then
return direct_yes(translations[a],formatters[formats[b]](c,...))
elseif b then
return direct_yes(translations[a],formats[b])
@@ -257,7 +265,7 @@ if tex and (tex.jobname or tex.formatname) then
end
subreport = function(a,s,b,c,...)
- if c then
+ 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]))
@@ -269,7 +277,7 @@ if tex and (tex.jobname or tex.formatname) then
end
subdirect = function(a,s,b,c,...)
- if c then
+ 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])
@@ -281,7 +289,7 @@ if tex and (tex.jobname or tex.formatname) then
end
status = function(a,b,c,...)
- if c then
+ 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]))
@@ -626,7 +634,7 @@ end
-- so far
-local function setblocked(category,value)
+local function setblocked(category,value) -- v.state == value == true : disable
if category == true then
-- lock all
category, value = "*", true
@@ -644,7 +652,7 @@ local function setblocked(category,value)
end
else
states = utilities.parsers.settings_to_hash(category,type(states)=="table" and states or nil)
- for c, _ in next, states do
+ for c in next, states do
local v = data[c]
if v then
v.state = value
diff --git a/Master/texmf-dist/tex/context/base/trac-par.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-par.lua
index aab57ce5c14..fc3be5b6c55 100644
--- a/Master/texmf-dist/tex/context/base/trac-par.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-par.lua
@@ -7,6 +7,8 @@ if not modules then modules = { } end modules ['trac-par'] = {
comment = "a translation of the built in parbuilder, initial convertsin by Taco Hoekwater",
}
+-- todo: kern
+
local utfchar = utf.char
local concat = table.concat
diff --git a/Master/texmf-dist/tex/context/base/trac-pro.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-pro.lua
index 897b6a15c11..897b6a15c11 100644
--- a/Master/texmf-dist/tex/context/base/trac-pro.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-pro.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-set.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-set.lua
index 9e2bf87589a..9e2bf87589a 100644
--- a/Master/texmf-dist/tex/context/base/trac-set.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-set.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/trac-tex.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-tex.lua
new file mode 100644
index 00000000000..86f3b539f30
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-tex.lua
@@ -0,0 +1,118 @@
+if not modules then modules = { } end modules ['trac-tex'] = {
+ version = 1.001,
+ comment = "companion to trac-deb.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- moved from trac-deb.lua
+
+local next = next
+
+local texhashtokens = tex.hashtokens
+
+local trackers = trackers
+local token = token
+local saved = { }
+
+function trackers.savehash()
+ saved = texhashtokens()
+end
+
+function trackers.dumphashtofile(filename,delta)
+ local list = { }
+ local hash = tex.hashtokens()
+ local create = token.create
+ for name, token in next, hash do
+ if not delta or not saved[name] then
+ if token[2] ~= 0 then -- still old interface
+ local token = create(name)
+ -- inspect(token)
+ local category = token.cmdname
+ local dk = list[category]
+ if not dk then
+ dk = {
+ names = { },
+ found = 0,
+ -- code = token[1],
+ }
+ list[category] = dk
+ end
+ if token.protected then
+ if token.expandable then
+ dk.names[name] = "ep"
+ else
+ dk.names[name] = "-p"
+ end
+ else
+ if token.expandable then
+ dk.names[name] = "ep"
+ else
+ dk.names[name] = "--"
+ end
+ end
+ dk.found = dk.found + 1
+ end
+ end
+ end
+ table.save(filename or tex.jobname .. "-hash.log",list)
+end
+
+-- -- old token code
+--
+-- function trackers.dumphashtofile(filename,delta)
+-- local list = { }
+-- local hash = texhashtokens()
+-- local getname = token.command_name
+-- for name, token in next, hash do
+-- if not delta or not saved[name] then
+-- -- token: cmd, chr, csid -- combination cmd,chr determines name
+-- local category = getname(token)
+-- local dk = list[category]
+-- if not dk then
+-- -- a bit funny names but this sorts better (easier to study)
+-- dk = { names = { }, found = 0, code = token[1] }
+-- list[category] = dk
+-- end
+-- dk.names[name] = { token[2], token[3] }
+-- dk.found = dk.found + 1
+-- end
+-- end
+-- table.save(filename or tex.jobname .. "-hash.log",list)
+-- end
+
+local delta = nil
+
+local function dump_hash(wanteddelta)
+ if delta == nil then
+ saved = saved or texhashtokens() -- no need for trackers.dump_hash
+ luatex.registerstopactions(1,function() dump_hash(nil,wanteddelta) end) -- at front
+ end
+ delta = wanteddelta
+end
+
+directives.register("system.dumphash", function() dump_hash(false) end)
+directives.register("system.dumpdelta", function() dump_hash(true ) end)
+
+local report_dump = logs.reporter("resolvers","dump")
+
+local function saveusedfilesintrees(format)
+ local data = {
+ jobname = environment.jobname or "?",
+ version = environment.version or "?",
+ kind = environment.kind or "?",
+ files = resolvers.instance.foundintrees
+ }
+ local filename = file.replacesuffix(environment.jobname or "context-job",'jlg')
+ if format == "lua" then
+ io.savedata(filename,table.serialize(data,true))
+ else
+ io.savedata(filename,table.toxml(data,"job"))
+ end
+end
+
+directives.register("system.dumpfiles", function(v)
+ luatex.registerstopactions(function() saveusedfilesintrees(v) end)
+end)
+
diff --git a/Master/texmf-dist/tex/context/base/trac-tex.mkiv b/Master/texmf-dist/tex/context/base/mkiv/trac-tex.mkiv
index 53c95ab01d7..53c95ab01d7 100644
--- a/Master/texmf-dist/tex/context/base/trac-tex.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-tex.mkiv
diff --git a/Master/texmf-dist/tex/context/base/trac-tim.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-tim.lua
index b4744291ce0..b4744291ce0 100644
--- a/Master/texmf-dist/tex/context/base/trac-tim.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-tim.lua
diff --git a/Master/texmf-dist/tex/context/base/trac-vis.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-vis.lua
index b541827988b..061cef8ba5c 100644
--- a/Master/texmf-dist/tex/context/base/trac-vis.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-vis.lua
@@ -34,6 +34,8 @@ local formatters = string.formatters
-- todo: inline concat (more efficient)
-- todo: tags can also be numbers (just add to hash)
+-- todo: dir and localpar nodes
+
local nodecodes = nodes.nodecodes
local disc_code = nodecodes.disc
local kern_code = nodecodes.kern
@@ -66,19 +68,28 @@ local nuts = nodes.nuts
local tonut = nuts.tonut
local tonode = nuts.tonode
-local getfield = nuts.getfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
local setfield = nuts.setfield
-local getattr = nuts.getattr
+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 getfield = nuts.getfield
+local getid = nuts.getid
local getfont = nuts.getfont
+local getattr = nuts.getattr
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getbox = nuts.getbox
local getlist = nuts.getlist
local getleader = nuts.getleader
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local getdisc = nuts.getdisc
local hpack_nodes = nuts.hpack
local vpack_nodes = nuts.vpack
@@ -91,8 +102,9 @@ local insert_node_after = nuts.insert_after
local traverse_nodes = nuts.traverse
local linked_nodes = nuts.linked
-local fast_hpack = nuts.fasthpack
-local fast_hpack_string = nuts.typesetters.fast_hpack
+local effectiveglue = nuts.effective_glue
+
+local hpack_string = nuts.typesetters.tohpack
local texgetattribute = tex.getattribute
local texsetattribute = tex.setattribute
@@ -112,6 +124,8 @@ local new_rule = nodepool.rule
local new_kern = nodepool.kern
local new_glue = nodepool.glue
local new_penalty = nodepool.penalty
+local new_hlist = nodepool.hlist
+local new_vlist = nodepool.vlist
local tracers = nodes.tracers
local visualizers = nodes.visualizers
@@ -144,41 +158,42 @@ local trace_strut
local trace_whatsit
local trace_user
local trace_math
+local trace_italic
local report_visualize = logs.reporter("visualize")
local modes = {
- hbox = 1,
- vbox = 2,
- vtop = 4,
- kern = 8,
- glue = 16,
- penalty = 32,
- fontkern = 64,
- strut = 128,
- whatsit = 256,
- glyph = 512,
- simple = 1024,
- simplehbox = 1024 + 1,
- simplevbox = 1024 + 2,
- simplevtop = 1024 + 4,
- user = 2048,
- math = 4096,
+ hbox = 1,
+ vbox = 2,
+ vtop = 4,
+ kern = 8,
+ glue = 16,
+ penalty = 32,
+ fontkern = 64,
+ strut = 128,
+ whatsit = 256,
+ glyph = 512,
+ simple = 1024,
+ simplehbox = 1024 + 1,
+ simplevbox = 1024 + 2,
+ simplevtop = 1024 + 4,
+ user = 2048,
+ math = 4096,
+ italic = 8192,
+ origin = 16384,
}
-local modes_makeup = { "hbox", "vbox", "kern", "glue", "penalty" }
-local modes_boxes = { "hbox", "vbox" }
-local modes_all = { "hbox", "vbox", "kern", "glue", "penalty", "fontkern", "whatsit", "glyph", "user", "math" }
-
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
+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_italic, l_origin
local enabled = false
local layers = { }
-local preset_boxes = modes.hbox + modes.vbox
-local preset_makeup = preset_boxes + modes.kern + modes.glue + modes.penalty
-local preset_all = preset_makeup + modes.fontkern + modes.whatsit + modes.glyph + modes.user + modes.math
+local preset_boxes = modes.hbox + modes.vbox + modes.origin
+local preset_makeup = preset_boxes
+ + modes.kern + modes.glue + modes.penalty
+local preset_all = preset_makeup
+ + modes.fontkern + modes.whatsit + modes.glyph + modes.user + modes.math
function visualizers.setfont(id)
usedfont = id or current_font()
@@ -216,6 +231,8 @@ local function enable()
l_glyph = layers.glyph
l_user = layers.user
l_math = layers.math
+ l_italic = layers.italic
+ l_origin = layers.origin
nodes.tasks.enableaction("shipouts","nodes.visualizers.handler")
report_visualize("enabled")
enabled = true
@@ -272,6 +289,14 @@ local function setvisual(n,a,what) -- this will become more efficient when we ha
return a
end
+function nuts.setvisual(n,mode)
+ setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true))
+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
@@ -288,13 +313,17 @@ for mode, value in next, modes do
trackers.register(formatters["visualizers.%s"](mode), function(v) set(mode,v) end)
end
+local raisepenalties = false
+
+directives.register("visualizers.raisepenalties",function(v) raisepenalties = v 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 = tonumber(v) or fraction 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"
@@ -307,6 +336,7 @@ local c_glyph = "trace:o"
local c_ligature = "trace:s"
local c_white = "trace:w"
local c_math = "trace:r"
+local c_origin = "trace:o"
local c_positive_d = "trace:db"
local c_negative_d = "trace:dr"
@@ -319,9 +349,10 @@ 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 function sometext(str,layer,color,textcolor,lap) -- we can just paste verbatim together .. no typesteting needed
- local text = fast_hpack_string(str,usedfont)
+ local text = hpack_string(str,usedfont)
local size = getfield(text,"width")
local rule = new_rule(size,2*exheight,exheight/2)
local kern = new_kern(-size)
@@ -333,29 +364,26 @@ local function sometext(str,layer,color,textcolor,lap) -- we can just paste verb
end
local info = linked_nodes(rule,kern,text)
setlisttransparency(info,c_zero)
- info = fast_hpack(info)
+ info = new_hlist(info)
local width = getfield(info,"width")
if lap then
- info = fast_hpack(linked_nodes(new_kern(-width),info))
+ info = new_hlist(linked_nodes(new_kern(-width),info))
end
if layer then
setattr(info,a_layer,layer)
end
- setfield(info,"width",0)
- setfield(info,"height",0)
- setfield(info,"depth",0)
return info, width
end
local f_cache = { }
local function fontkern(head,current)
- local kern = getfield(current,"kern")
+ local kern = getfield(current,"kern") + getfield(current,"expansion_factor")
local info = f_cache[kern]
if info then
-- print("hit fontkern")
else
- local text = fast_hpack_string(formatters[" %0.3f"](kern*pt_factor),usedfont)
+ 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
@@ -368,11 +396,8 @@ local function fontkern(head,current)
setlisttransparency(list,c_text_d)
settransparency(rule,c_text_d)
setfield(text,"shift",-5 * exheight)
- info = fast_hpack(linked_nodes(rule,text))
+ info = new_hlist(linked_nodes(rule,text))
setattr(info,a_layer,l_fontkern)
- setfield(info,"width",0)
- setfield(info,"height",0)
- setfield(info,"depth",0)
f_cache[kern] = info
end
head = insert_node_before(head,current,copy_list(info))
@@ -381,34 +406,29 @@ end
local w_cache = { }
local tags = {
- open = "FIC",
- write = "FIW",
- close = "FIC",
- special = "SPE",
- localpar = "PAR",
- dir = "DIR",
- pdfliteral = "PDF",
- pdfrefobj = "PDF",
- pdfrefxform = "PDF",
- pdfrefximage = "PDF",
- pdfannot = "PDF",
- pdfstartlink = "PDF",
- pdfendlink = "PDF",
- pdfdest = "PDF",
- pdfthread = "PDF",
- pdfstartthread = "PDF",
- pdfendthread = "PDF",
- pdfsavepos = "PDF",
- pdfthreaddata = "PDF",
- pdflinkdata = "PDF",
- pdfcolorstack = "PDF",
- pdfsetmatrix = "PDF",
- pdfsave = "PDF",
- pdfrestore = "PDF",
- latelua = "LUA",
- closelua = "LUA",
- cancelboundary = "CBD",
- userdefined = "USR",
+ open = "FIC",
+ write = "FIW",
+ close = "FIC",
+ special = "SPE",
+ latelua = "LUA",
+ savepos = "POS",
+ userdefined = "USR",
+ -- backend stuff
+ pdfliteral = "PDF",
+ pdfrefobj = "PDF",
+ pdfannot = "PDF",
+ pdfstartlink = "PDF",
+ pdfendlink = "PDF",
+ pdfdest = "PDF",
+ pdfthread = "PDF",
+ pdfstartthread = "PDF",
+ pdfendthread = "PDF",
+ pdfthreaddata = "PDF",
+ pdflinkdata = "PDF",
+ pdfcolorstack = "PDF",
+ pdfsetmatrix = "PDF",
+ pdfsave = "PDF",
+ pdfrestore = "PDF",
}
local function whatsit(head,current)
@@ -466,7 +486,17 @@ end
local b_cache = { }
-local function ruledbox(head,current,vertical,layer,what,simple,previous)
+local o_cache = table.setmetatableindex(function(t,size)
+ local rule = new_rule(2*size,size,size)
+ 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)
+
+local function ruledbox(head,current,vertical,layer,what,simple,previous,trace_origin,parent)
local wd = getfield(current,"width")
if wd ~= 0 then
local ht = getfield(current,"height")
@@ -475,9 +505,9 @@ local function ruledbox(head,current,vertical,layer,what,simple,previous)
local next = getnext(current)
local prev = previous
-- local prev = getprev(current) -- prev can be wrong in math mode < 0.78.3
- setfield(current,"next",nil)
- setfield(current,"prev",nil)
+ setboth(current)
local linewidth = emwidth/fraction
+ local size = 2*linewidth
local baseline, baseskip
if dp ~= 0 and ht ~= 0 then
if wd > 20*linewidth then
@@ -485,43 +515,37 @@ local function ruledbox(head,current,vertical,layer,what,simple,previous)
if not baseline then
-- due to an optimized leader color/transparency we need to set the glue node in order
-- to trigger this mechanism
- local leader = linked_nodes(new_glue(2*linewidth),new_rule(6*linewidth,linewidth,0),new_glue(2*linewidth))
- -- setlisttransparency(leader,c_text)
- leader = fast_hpack(leader)
- -- setlisttransparency(leader,c_text)
+ local leader = linked_nodes(new_glue(size),new_rule(3*size,linewidth,0),new_glue(size))
+ leader = hpack_nodes(leader)
baseline = new_glue(0)
- setfield(baseline,"leader",leader)
- setfield(baseline,"subtype",cleaders_code)
- local spec = getfield(baseline,"spec")
- setfield(spec,"stretch",65536)
- setfield(spec,"stretch_order",2)
+ setleader(baseline,leader)
+ setsubtype(baseline,cleaders_code)
+ setfield(baseline,"stretch",65536)
+ setfield(baseline,"stretch_order",2)
setlisttransparency(baseline,c_text)
b_cache.baseline = baseline
end
baseline = copy_list(baseline)
- baseline = fast_hpack(baseline,wd-2*linewidth)
- -- or new hpack node, set head and also:
+ baseline = hpack_nodes(baseline,wd-size)
+ -- or new_hlist, set head and also:
-- baseline.width = wd
-- baseline.glue_set = wd/65536
-- baseline.glue_order = 2
-- baseline.glue_sign = 1
baseskip = new_kern(-wd+linewidth)
else
- baseline = new_rule(wd-2*linewidth,linewidth,0)
- baseskip = new_kern(-wd+2*linewidth)
+ baseline = new_rule(wd-size,linewidth,0)
+ baseskip = new_kern(-wd+size)
end
end
local this
if not simple then
this = b_cache[what]
if not this then
- local text = fast_hpack_string(what,usedfont)
+ local text = hpack_string(what,usedfont)
this = linked_nodes(new_kern(-getfield(text,"width")),text)
setlisttransparency(this,c_text)
- this = fast_hpack(this)
- setfield(this,"width",0)
- setfield(this,"height",0)
- setfield(this,"depth",0)
+ this = new_hlist(this)
b_cache[what] = this
end
end
@@ -529,58 +553,77 @@ local function ruledbox(head,current,vertical,layer,what,simple,previous)
local info = linked_nodes(
this and copy_list(this) or nil,
new_rule(linewidth,ht,dp),
- new_rule(wd-2*linewidth,-dp+linewidth,dp),
+ new_rule(wd-size,-dp+linewidth,dp),
new_rule(linewidth,ht,dp),
new_kern(-wd+linewidth),
- new_rule(wd-2*linewidth,ht,-ht+linewidth)
+ new_rule(wd-size,ht,-ht+linewidth)
)
if baseskip then
info = linked_nodes(info,baseskip,baseline) -- could be in previous linked
end
- local shft
- if shift == 0 then
- shift = nil
- else
- local sh = shift > 0 and shift or 0
- local sd = shift < 0 and - shift or 0
- shft = fast_hpack(new_rule(2*emwidth/fraction,sh,sd))
- setfield(shft,"width",0)
- if sh > 0 then
- setfield(shft,"height",0)
- end
- if sd > 0 then
- setfield(shft,"depth",0)
- end
- end
setlisttransparency(info,c_text)
- info = fast_hpack(info)
- setfield(info,"width",0)
- setfield(info,"height",0)
- setfield(info,"depth",0)
+ info = new_hlist(info)
+ --
setattr(info,a_layer,layer)
- local info = linked_nodes(shft,current,new_kern(-wd),info)
- info = fast_hpack(info,wd)
if vertical then
- info = vpack_nodes(info)
- end
- if shift then
- setfield(current,"shift",0)
- setfield(info,"width",wd)
- setfield(info,"height",ht)
- setfield(info,"depth",dp)
- setfield(info,"shift",shift)
+ if shift == 0 then
+ info = linked_nodes(current,info)
+ elseif trace_origin then
+ local size = 2*size
+ local origin = o_cache[size]
+ origin = copy_list(origin)
+ if getid(parent) == vlist_code then
+ setfield(origin,"shift",-shift)
+ info = linked_nodes(current,new_kern(-size),origin,new_kern(-size),info)
+ else
+ -- todo .. i need an example
+ info = linked_nodes(current,info)
+ end
+ setfield(current,"shift",0)
+ else
+ info = linked_nodes(current,info)
+ setfield(current,"shift",0)
+ end
+ info = new_vlist(info,wd,ht,dp,shift)
+ else
+ if shift == 0 then
+ info = linked_nodes(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 = linked_nodes(current,new_kern(-wd-size-shift),origin,new_kern(-size+shift),info)
+ else
+ setfield(origin,"shift",-shift)
+ info = linked_nodes(current,new_kern(-wd-size),origin,new_kern(-size),info)
+ end
+ setfield(current,"shift",0)
+ else
+ info = linked_nodes(current,new_kern(-wd),info)
+ setfield(current,"shift",0)
+ end
+ info = new_hlist(info,wd,ht,dp,shift)
end
+
+-- how about dir, so maybe just copy the node
+--
+-- local l = getlist(current)
+-- setlist(current,nil)
+-- local c = copy_node(current)
+-- setlist(current,l)
+-- setlist(c,info)
+-- info = c
+
if next then
- setfield(info,"next",next)
- setfield(next,"prev",info)
+ setlink(info,next)
end
if prev then
if getid(prev) == gluespec_code then
report_visualize("ignoring invalid prev")
-- weird, how can this happen, an inline glue-spec, probably math
else
- setfield(info,"prev",prev)
- setfield(prev,"next",info)
+ setlink(prev,info)
end
end
if head == current then
@@ -593,16 +636,22 @@ local function ruledbox(head,current,vertical,layer,what,simple,previous)
end
end
+local bpfactor = number.dimenfactors.bp
+
+-- callback.register("process_rule",function(n,h,v)
+-- local p = string.formatters["0 0 %0.6F %0.6F re f"](h*bpfactor,v*bpfactor)
+-- pdf.print("direct",p)
+-- end)
+
local function ruledglyph(head,current,previous)
local wd = getfield(current,"width")
- -- local wd = chardata[getfield(current,"font")][getfield(current,"char")].width
+ -- local wd = chardata[getfont(current)][getchar(current)].width
if wd ~= 0 then
local ht = getfield(current,"height")
local dp = getfield(current,"depth")
local next = getnext(current)
local prev = previous
- setfield(current,"next",nil)
- setfield(current,"prev",nil)
+ setboth(current)
local linewidth = emwidth/(2*fraction)
local baseline
-- if dp ~= 0 and ht ~= 0 then
@@ -610,7 +659,7 @@ local function ruledglyph(head,current,previous)
baseline = new_rule(wd-2*linewidth,linewidth,0)
end
local doublelinewidth = 2*linewidth
- -- could be a pdf rule
+ -- could be a pdf rule (or a user rule now)
local info = linked_nodes(
new_rule(linewidth,ht,dp),
new_rule(wd-doublelinewidth,-dp+linewidth,dp),
@@ -620,29 +669,24 @@ local function ruledglyph(head,current,previous)
new_kern(-wd+doublelinewidth),
baseline
)
-local char = chardata[getfield(current,"font")][getfield(current,"char")]
-if char and char.tounicode and #char.tounicode > 4 then -- hack test
- setlistcolor(info,c_ligature)
- setlisttransparency(info,c_ligature_d)
-else
- setlistcolor(info,c_glyph)
- setlisttransparency(info,c_glyph_d)
-end
- info = fast_hpack(info)
- setfield(info,"width",0)
- setfield(info,"height",0)
- setfield(info,"depth",0)
+ local char = chardata[getfont(current)][getchar(current)]
+ 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 = linked_nodes(current,new_kern(-wd),info)
- info = fast_hpack(info)
+ info = hpack_nodes(info)
setfield(info,"width",wd)
if next then
- setfield(info,"next",next)
- setfield(next,"prev",info)
+ setlink(info,next)
end
if prev then
- setfield(info,"prev",prev)
- setfield(prev,"next",info)
+ setlink(prev,info)
end
if head == current then
return info, info
@@ -654,7 +698,8 @@ end
end
end
-local g_cache = { }
+local g_cache_v = { }
+local g_cache_h = { }
local tags = {
-- userskip = "US",
@@ -686,12 +731,11 @@ local tags = {
-- we sometimes pass previous as we can have issues in math (not watertight for all)
-local function ruledglue(head,current,vertical)
- local spec = getfield(current,"spec")
- local width = getfield(spec,"width")
+local function ruledglue(head,current,vertical,parent)
local subtype = getsubtype(current)
- local amount = formatters["%s:%0.3f"](tags[subtype] or (vertical and "VS") or "HS",width*pt_factor)
- local info = g_cache[amount]
+ 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
@@ -710,7 +754,7 @@ local function ruledglue(head,current,vertical)
else
info = sometext(amount,l_glue,c_skip_b)
end
- g_cache[amount] = info
+ (vertical and g_cache_v or g_cache_h)[amount] = info
end
info = copy_list(info)
if vertical then
@@ -720,11 +764,12 @@ local function ruledglue(head,current,vertical)
return head, getnext(current)
end
-local k_cache = { }
+local k_cache_v = { }
+local k_cache_h = { }
local function ruledkern(head,current,vertical)
local kern = getfield(current,"kern")
- local info = k_cache[kern]
+ local info = (vertical and k_cache_v or k_cache_h)[kern]
if info then
-- print("kern hit")
else
@@ -736,7 +781,7 @@ local function ruledkern(head,current,vertical)
else
info = sometext(amount,l_kern,c_zero)
end
- k_cache[kern] = info
+ (vertical and k_cache_v or k_cache_h)[kern] = info
end
info = copy_list(info)
if vertical then
@@ -746,11 +791,35 @@ local function ruledkern(head,current,vertical)
return head, getnext(current)
end
-local p_cache = { }
+local i_cache = { }
+
+local function ruleditalic(head,current)
+ local kern = getfield(current,"kern")
+ local info = i_cache[kern]
+ if info then
+ -- print("kern hit")
+ else
+ 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
+
+local p_cache_v = { }
+local p_cache_h = { }
local function ruledpenalty(head,current,vertical)
local penalty = getfield(current,"penalty")
- local info = p_cache[penalty]
+ local info = (vertical and p_cache_v or p_cache_h)[penalty]
if info then
-- print("penalty hit")
else
@@ -762,17 +831,19 @@ local function ruledpenalty(head,current,vertical)
else
info = sometext(amount,l_penalty,c_zero)
end
- p_cache[penalty] = info
+ (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
+ setfield(info,"shift",-65536*4)
end
head, current = insert_node_before(head,current,info)
return head, getnext(current)
end
-local function visualize(head,vertical,forced)
+local function visualize(head,vertical,forced,parent)
local trace_hbox = false
local trace_vbox = false
local trace_vtop = false
@@ -786,6 +857,8 @@ local function visualize(head,vertical,forced)
local trace_simple = false
local trace_user = false
local trace_math = false
+ local trace_italic = false
+ local trace_origin = false
local current = head
local previous = nil
local attr = unsetvalue
@@ -809,20 +882,24 @@ local function visualize(head,vertical,forced)
trace_simple = false
trace_user = false
trace_math = false
+ trace_italic = false
+ trace_origin = false
else -- dead slow:
- trace_hbox = hasbit(a, 1)
- trace_vbox = hasbit(a, 2)
- trace_vtop = hasbit(a, 4)
- trace_kern = hasbit(a, 8)
- trace_glue = hasbit(a, 16)
- trace_penalty = hasbit(a, 32)
- trace_fontkern = hasbit(a, 64)
- trace_strut = hasbit(a, 128)
- trace_whatsit = hasbit(a, 256)
- trace_glyph = hasbit(a, 512)
- trace_simple = hasbit(a,1024)
- trace_user = hasbit(a,2048)
- trace_math = hasbit(a,4096)
+ trace_hbox = hasbit(a, 1)
+ trace_vbox = hasbit(a, 2)
+ trace_vtop = hasbit(a, 4)
+ trace_kern = hasbit(a, 8)
+ trace_glue = hasbit(a, 16)
+ trace_penalty = hasbit(a, 32)
+ trace_fontkern = hasbit(a, 64)
+ trace_strut = hasbit(a, 128)
+ trace_whatsit = hasbit(a, 256)
+ trace_glyph = hasbit(a, 512)
+ trace_simple = hasbit(a, 1024)
+ trace_user = hasbit(a, 2048)
+ trace_math = hasbit(a, 4096)
+ trace_italic = hasbit(a, 8192)
+ trace_origin = hasbit(a,16384)
end
attr = a
end
@@ -833,18 +910,17 @@ local function visualize(head,vertical,forced)
head, current = ruledglyph(head,current,previous)
end
elseif id == disc_code then
- local pre = getfield(current,"pre")
+ local pre, post, replace = getdisc(current)
if pre then
- setfield(current,"pre",visualize(pre,false,a))
+ pre = visualize(pre,false,a,parent)
end
- local post = getfield(current,"post")
if post then
- setfield(current,"post",visualize(post,false,a))
+ post = visualize(post,false,a,parent)
end
- local replace = getfield(current,"replace")
if replace then
- setfield(current,"replace",visualize(replace,false,a))
+ replace = visualize(replace,false,a,parent)
end
+ setdisc(current,pre,post,replace)
elseif id == kern_code then
local subtype = getsubtype(current)
-- tricky ... we don't copy the trace attribute in node-inj (yet)
@@ -853,16 +929,18 @@ local function visualize(head,vertical,forced)
head, current = fontkern(head,current)
end
else -- if subtype == user_kern_code then
- if trace_kern then
+ if trace_italic then
+ head, current = ruleditalic(head,current)
+ elseif trace_kern then
head, current = ruledkern(head,current,vertical)
end
end
elseif id == glue_code then
local content = getleader(current)
if content then
- setfield(current,"leader",visualize(content,false))
+ setleader(current,visualize(content,false,nil,parent))
elseif trace_glue then
- head, current = ruledglue(head,current,vertical)
+ head, current = ruledglue(head,current,vertical,parent)
end
elseif id == penalty_code then
if trace_penalty then
@@ -871,20 +949,20 @@ local function visualize(head,vertical,forced)
elseif id == hlist_code then
local content = getlist(current)
if content then
- setfield(current,"list",visualize(content,false))
+ setlist(current,visualize(content,false,nil,current))
end
if trace_hbox then
- head, current = ruledbox(head,current,false,l_hbox,"H__",trace_simple,previous)
+ 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)
if content then
- setfield(current,"list",visualize(content,true))
+ setlist(current,visualize(content,true,nil,current))
end
if trace_vtop then
- head, current = ruledbox(head,current,true,l_vtop,"_T_",trace_simple,previous)
+ head, current = ruledbox(head,current,true,l_vtop,"_T_",trace_simple,previous,trace_origin,parent)
elseif trace_vbox then
- head, current = ruledbox(head,current,true,l_vbox,"__V",trace_simple,previous)
+ head, current = ruledbox(head,current,true,l_vbox,"__V",trace_simple,previous,trace_origin,parent)
end
elseif id == whatsit_code then
if trace_whatsit then
@@ -905,55 +983,68 @@ local function visualize(head,vertical,forced)
return head
end
-local function freed(cache)
- local n = 0
- for k, v in next, cache do
- free_node_list(v)
- n = n + 1
- end
- if n == 0 then
- return 0, cache
- else
- return n, { }
+do
+
+ local function freed(cache)
+ local n = 0
+ for k, v in next, cache do
+ free_node_list(v)
+ n = n + 1
+ end
+ if n == 0 then
+ return 0, cache
+ else
+ return n, { }
+ end
end
-end
-local function cleanup()
- local hf, ng, np, nk, nw
- nf, f_cache = freed(f_cache)
- ng, g_cache = freed(g_cache)
- np, p_cache = freed(p_cache)
- nk, k_cache = freed(k_cache)
- nw, w_cache = freed(w_cache)
- nb, b_cache = freed(b_cache)
- -- report_visualize("cache cleanup: %s fontkerns, %s skips, %s penalties, %s kerns, %s whatsits, %s boxes",nf,ng,np,nk,nw,nb)
-end
+ local function cleanup()
+ local hf, nw, nb, ng_v, ng_h, np_v, np_h, nk_v, nk_h
+ nf, f_cache = freed(f_cache)
+ nw, w_cache = freed(w_cache)
+ nb, b_cache = freed(b_cache)
+ no, o_cache = freed(o_cache)
+ ng_v, g_cache_v = freed(g_cache_v)
+ ng_h, g_cache_h = freed(g_cache_h)
+ np_v, p_cache_v = freed(p_cache_v)
+ np_h, p_cache_h = freed(p_cache_h)
+ nk_v, k_cache_v = freed(k_cache_v)
+ nk_h, k_cache_h = freed(k_cache_h)
+ -- report_visualize("cache cleanup: %s fontkerns, %s skips, %s penalties, %s kerns, %s whatsits, %s boxes, %s origins",
+ -- nf,ng_v+ng_h,np_v+np_h,nk_v+nk_h,nw,nb,no)
+ end
-local function handler(head)
- if usedfont then
- starttiming(visualizers)
- -- local l = texgetattribute(a_layer)
- -- local v = texgetattribute(a_visual)
- -- texsetattribute(a_layer,unsetvalue)
- -- texsetattribute(a_visual,unsetvalue)
- head = visualize(tonut(head))
- -- texsetattribute(a_layer,l)
- -- texsetattribute(a_visual,v)
- -- -- cleanup()
- stoptiming(visualizers)
- return tonode(head), true
- else
- return head, false
+ local function handler(head)
+ if usedfont then
+ starttiming(visualizers)
+ -- local l = texgetattribute(a_layer)
+ -- local v = texgetattribute(a_visual)
+ -- texsetattribute(a_layer,unsetvalue)
+ -- texsetattribute(a_visual,unsetvalue)
+ head = visualize(tonut(head),true)
+ -- texsetattribute(a_layer,l)
+ -- texsetattribute(a_visual,v)
+ -- -- cleanup()
+ stoptiming(visualizers)
+ return tonode(head), true
+ else
+ return head, false
+ end
end
-end
-visualizers.handler = handler
+ visualizers.handler = handler
+
+ luatex.registerstopactions(cleanup)
+
+end
function visualizers.box(n)
if usedfont then
starttiming(visualizers)
local box = getbox(n)
- setfield(box,"list",visualize(getlist(box)))
+ if box then
+ setlist(box,visualize(getlist(box),getid(box) == vlist_code))
+ end
stoptiming(visualizers)
return head, true
else
@@ -961,39 +1052,41 @@ function visualizers.box(n)
end
end
-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 in traverse_nodes(list) do
- local id = getid(n)
- 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
+do
+
+ 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 in traverse_nodes(list) do
+ local id = getid(n)
+ 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
- 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
+ function visualizers.markfonts(list)
+ last, used = 0, { }
+ markfonts(type(n) == "number" and getlist(getbox(n)) or n)
+ end
-luatex.registerstopactions(cleanup)
+end
statistics.register("visualization time",function()
if enabled then
diff --git a/Master/texmf-dist/tex/context/base/trac-vis.mkiv b/Master/texmf-dist/tex/context/base/mkiv/trac-vis.mkiv
index 74a2c1ba223..a503981f5d9 100644
--- a/Master/texmf-dist/tex/context/base/trac-vis.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-vis.mkiv
@@ -54,11 +54,19 @@
\let\syst_visualizers_vbox\vbox
\let\syst_visualizers_vtop\vtop
+\let\syst_visualizers_hpack\hpack
+\let\syst_visualizers_vpack\vpack
+\let\syst_visualizers_tpack\tpack
+
\unexpanded\def\ruledhbox{\syst_visualizers_hbox attr \visualattribute \clf_getvisual{simplehbox} }
\unexpanded\def\ruledvbox{\syst_visualizers_vbox attr \visualattribute \clf_getvisual{simplevbox} }
\unexpanded\def\ruledvtop{\syst_visualizers_vtop attr \visualattribute \clf_getvisual{simplevtop} } % special case
\unexpanded\def\ruledtopv{\syst_visualizers_vtop attr \visualattribute \clf_getvisual{vtop} }
+\unexpanded\def\ruledhpack{\syst_visualizers_hpack attr \visualattribute \clf_getvisual{simplehbox} }
+\unexpanded\def\ruledvpack{\syst_visualizers_vpack attr \visualattribute \clf_getvisual{simplevbox} }
+\unexpanded\def\ruledtpack{\syst_visualizers_tpack attr \visualattribute \clf_getvisual{simplevtop} } % special case
+
\unexpanded\def\ruledmbox#1{\ruledhbox{\startimath#1\stopimath}}
\appendtoks
@@ -133,20 +141,13 @@
% \definecolor[f:y:t][a=1,t=.25,y=1]
% \definecolor[f:k:t][a=1,t=.25,s=0]
-% \def\node_backgrounds_boxes_add#1[#2]%
-% {\node_backgrounds_boxes_initialize
-% #1\backgroundcolorattr{#2}}
-
-\def\syst_visualizers_filled_hbox#1%
- {\node_backgrounds_boxes_initialize\hbox\backgroundcolorattr{#1}}
-
-\unexpanded\def\filledhboxr{\syst_visualizers_filled_hbox{f:r:t}}
-\unexpanded\def\filledhboxg{\syst_visualizers_filled_hbox{f:g:t}}
-\unexpanded\def\filledhboxb{\syst_visualizers_filled_hbox{f:b:t}}
-\unexpanded\def\filledhboxc{\syst_visualizers_filled_hbox{f:c:t}}
-\unexpanded\def\filledhboxm{\syst_visualizers_filled_hbox{f:m:t}}
-\unexpanded\def\filledhboxy{\syst_visualizers_filled_hbox{f:y:t}}
-\unexpanded\def\filledhboxk{\syst_visualizers_filled_hbox{f:k:t}}
+\unexpanded\def\filledhboxr{\node_backgrounds_boxes_add\hbox[f:r:t]}
+\unexpanded\def\filledhboxg{\node_backgrounds_boxes_add\hbox[f:g:t]}
+\unexpanded\def\filledhboxb{\node_backgrounds_boxes_add\hbox[f:b:t]}
+\unexpanded\def\filledhboxc{\node_backgrounds_boxes_add\hbox[f:c:t]}
+\unexpanded\def\filledhboxm{\node_backgrounds_boxes_add\hbox[f:m:t]}
+\unexpanded\def\filledhboxy{\node_backgrounds_boxes_add\hbox[f:y:t]}
+\unexpanded\def\filledhboxk{\node_backgrounds_boxes_add\hbox[f:k:t]}
%D Overload:
@@ -174,6 +175,32 @@
\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:
\unexpanded\def\dontinterfere
diff --git a/Master/texmf-dist/tex/context/base/trac-xml.lua b/Master/texmf-dist/tex/context/base/mkiv/trac-xml.lua
index cd8b8c0a5f5..cd8b8c0a5f5 100644
--- a/Master/texmf-dist/tex/context/base/trac-xml.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/trac-xml.lua
diff --git a/Master/texmf-dist/tex/context/base/type-def.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-def.mkiv
index a80b4f7bdf3..a80b4f7bdf3 100644
--- a/Master/texmf-dist/tex/context/base/type-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-def.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-fbk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-fbk.mkiv
index 4ac38178754..4ac38178754 100644
--- a/Master/texmf-dist/tex/context/base/type-fbk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-fbk.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/type-ini.lua
index cd5b32d3e6c..cd5b32d3e6c 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/type-ini.mkvi b/Master/texmf-dist/tex/context/base/mkiv/type-ini.mkvi
index f56c5573d5d..3969a5b95e6 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-ini.mkvi
@@ -258,9 +258,12 @@
\def\font_typescripts_synonym_define[#name][#synonym]%
{\ifsecondargument\setevalue{\??typescriptsynonyms#name}{#synonym}\fi}
-\def\truetypescript#name%
+\def\truetypescript#name% recursove so no \lastnamedcs
{\ifcsname\??typescriptsynonyms#name\endcsname
- \expandafter\truetypescript\csname\??typescriptsynonyms#name\endcsname\else#name%
+ %\expandafter\truetypescript\csname\??typescriptsynonyms#name\endcsname
+ \expandafter\truetypescript\lastnamedcs
+ \else
+ #name%
\fi}
% script [serif] [default] [size]
@@ -417,7 +420,8 @@
% with testing:
\def\typescriptprefix#name%
- {\ifcsname\??typescriptprefix#name\endcsname\csname\??typescriptprefix#name\endcsname\else#name\fi}
+ %{\ifcsname\??typescriptprefix#name\endcsname\csname\??typescriptprefix#name\endcsname\else#name\fi}
+ {\ifcsname\??typescriptprefix#name\endcsname\lastnamedcs\else#name\fi}
% defining typefaces:
%
@@ -550,12 +554,13 @@
\def\font_typefaces_setup[#class][#settings]%
{\setcurrentfontclass{#class}%
\let\globalfontclass\fontclass
- \iffourthargument
+ \ifsecondargument
\setupbodyfont[#settings]%
\else\ifx\fontclass\empty
\setupbodyfont[\s!rm]%
\else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
- \setupbodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]%
+ %\setupbodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]%
+ \expandafter\setupbodyfont\expandafter[\lastnamedcs]%
\else
\setupbodyfont[\s!rm]%
\fi \fi \fi
@@ -564,12 +569,13 @@
\def\font_typefaces_switch[#class][#settings]%
{\setcurrentfontclass{#class}%
\let\globalfontclass\globalfontclass
- \iffourthargument
+ \ifsecondargument
\switchtobodyfont[#settings]%
\else\ifx\fontclass\empty
\switchtobodyfont[\s!rm]%
\else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
- \switchtobodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]%
+ %\switchtobodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]%
+ \expandafter\switchtobodyfont\expandafter[\lastnamedcs]%
\else
\switchtobodyfont[\s!rm]%
\fi \fi \fi
@@ -601,7 +607,8 @@
\def\font_typescripts_inherit_check_indeed#name% called often
{\ifcsname\??typescriptinheritances\fontclass:#name\endcsname
- \expandafter\let\expandafter\fontclass\csname\??typescriptinheritances\fontclass:#name\endcsname
+ %\expandafter\let\expandafter\fontclass\csname\??typescriptinheritances\fontclass:#name\endcsname
+ \expandafter\let\expandafter\fontclass\lastnamedcs
\fi}
\let\font_typescripts_inherit_check\gobbleoneargument
@@ -626,13 +633,10 @@
{\ifx\fontclass\empty
\let\fontstyle\s!rm
\else\ifcsname\??typescriptdefaultstyles\fontclass\endcsname
- \edef\fontstyle{\csname\??typescriptdefaultstyles\fontclass\endcsname}%
+ %\edef\fontstyle{\csname\??typescriptdefaultstyles\fontclass\endcsname}%
+ \edef\fontstyle{\lastnamedcs}%
\else
\let\fontstyle\s!rm
\fi\fi}
-%D This might become a module:
-
-\fetchruntimecommand \typetypescript {\f!typeprefix\s!run}
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-lua.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-lua.mkiv
index fac6c3867a8..fac6c3867a8 100644
--- a/Master/texmf-dist/tex/context/base/type-lua.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-lua.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-one.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-one.mkiv
index 12b9e14add2..12b9e14add2 100644
--- a/Master/texmf-dist/tex/context/base/type-one.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-one.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-otf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-otf.mkiv
index 1f1564ef571..1f1564ef571 100644
--- a/Master/texmf-dist/tex/context/base/type-otf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-otf.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-set.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-set.mkiv
index b07944afe06..e2d7071d461 100644
--- a/Master/texmf-dist/tex/context/base/type-set.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-set.mkiv
@@ -58,8 +58,10 @@
\fi
\definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv]
-\definefilesynonym [type-imp-lucidanova.mkiv] [type-imp-lucida-opentype.mkiv]
\definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv]
+\definefilesynonym [type-imp-lucidadk.mkiv] [type-imp-lucida-opentype.mkiv]
+
+\definefilesynonym [type-imp-dejavu-condensed.mkiv] [type-imp-dejavu.mkiv]
\definefilesynonym [type-imp-palatino.mkiv] [type-imp-texgyre.mkiv]
\definefilesynonym [type-imp-courier.mkiv] [type-imp-texgyre.mkiv]
diff --git a/Master/texmf-dist/tex/context/base/type-siz.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-siz.mkiv
index d4c90b18229..d4c90b18229 100644
--- a/Master/texmf-dist/tex/context/base/type-siz.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-siz.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.mkiv b/Master/texmf-dist/tex/context/base/mkiv/type-tmf.mkiv
index 829b6baec99..829b6baec99 100644
--- a/Master/texmf-dist/tex/context/base/type-tmf.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/type-tmf.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-bld.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-bld.lua
index 4d0f28d9ab1..ce6a65baf37 100644
--- a/Master/texmf-dist/tex/context/base/typo-bld.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-bld.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['typo-bld'] = { -- was node-par
+if modules then modules = { } end modules ['typo-bld'] = { -- was node-par
version = 1.001,
comment = "companion to typo-bld.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -49,7 +49,11 @@ local stoptiming = statistics.stoptiming
storage.register("builders/paragraphs/constructors/names", names, "builders.paragraphs.constructors.names")
storage.register("builders/paragraphs/constructors/numbers", numbers, "builders.paragraphs.constructors.numbers")
-local report_parbuilders = logs.reporter("parbuilders")
+local trace_page_builder = false trackers.register("builders.page", function(v) trace_page_builder = v end)
+local trace_post_builder = false trackers.register("builders.post", function(v) trace_post_builder = v end)
+
+local report_par_builder = logs.reporter("builders","par")
+local report_page_builder = logs.reporter("builders","page")
local mainconstructor = nil -- not stored in format
local nofconstructors = 0
@@ -81,7 +85,7 @@ function constructors.start(name)
if mainconstructor ~= unsetvalue then
constructors.enable()
end
- -- report_parbuilders("start %a",name)
+ -- report_par_builder("start %a",name)
end
function constructors.stop()
@@ -91,7 +95,7 @@ function constructors.stop()
if mainconstructor == unsetvalue then
constructors.disable()
end
- -- report_parbuilders("stop")
+ -- report_par_builder("stop")
end
-- return values:
@@ -112,7 +116,7 @@ function constructors.handler(head,followed_by_display)
if handler then
return handler(head,followed_by_display)
else
- report_parbuilders("contructor method %a is not defined",tostring(method))
+ report_par_builder("contructor method %a is not defined",tostring(method))
return true -- let tex break
end
end
@@ -179,7 +183,9 @@ end)
nodes.builders = nodes.builder or { }
local builders = nodes.builders
-local actions = nodes.tasks.actions("vboxbuilders")
+local normalize = typesetters.paragraphs.normalize
+
+local vboxactions = nodes.tasks.actions("vboxbuilders")
function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
local done = false
@@ -187,7 +193,7 @@ function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
starttiming(builders)
if trace_vpacking then
local before = nodes.count(head)
- head, done = actions(head,groupcode,size,packtype,maxdepth,direction)
+ head, done = vboxactions(head,groupcode,size,packtype,maxdepth,direction)
local after = nodes.count(head)
if done then
nodes.processors.tracer("vpack","changed",head,groupcode,before,after,true)
@@ -195,7 +201,7 @@ function builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
nodes.processors.tracer("vpack","unchanged",head,groupcode,before,after,true)
end
else
- head, done = actions(head,groupcode)
+ head, done = vboxactions(head,groupcode)
end
stoptiming(builders)
end
@@ -205,7 +211,8 @@ end
-- This one is special in the sense that it has no head and we operate on the mlv. Also,
-- we need to do the vspacing last as it removes items from the mvl.
-local actions = nodes.tasks.actions("mvlbuilders")
+local pageactions = nodes.tasks.actions("mvlbuilders")
+----- lineactions = nodes.tasks.actions("linebuilders")
local function report(groupcode,head)
report_page_builder("trigger: %s",groupcode)
@@ -217,38 +224,42 @@ end
-- use tex.[sg]etlist
+-- check why box is called before after_linebreak .. maybe make categories and
+-- call 'm less
+
+
+-- this will be split into contribute_filter for these 4 so at some point
+-- thecheck can go away
+
function builders.buildpage_filter(groupcode)
- -- -- this needs checking .. gets called too often
- -- if group_code ~= "after_output" then
- -- if trace_page_builder then
- -- report(groupcode)
- -- end
- -- return nil, false
- -- end
- local head, done = texlists.contrib_head, false
+ -- 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)
end
- head, done = actions(head,groupcode)
+ head, done = pageactions(head,groupcode)
stoptiming(builders)
-- -- doesn't work here (not passed on?)
-- tex.pagegoal = tex.vsize - tex.dimen.d_page_floats_inserted_top - tex.dimen.d_page_floats_inserted_bottom
texlists.contrib_head = head or nil -- needs checking
--- tex.setlist("contrib_head",head,head and nodes.tail(head))
+ -- 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
end
-
end
-callbacks.register('vpack_filter', builders.vpack_filter, "vertical spacing etc")
-callbacks.register('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)")
+callbacks.register('vpack_filter', builders.vpack_filter, "vertical spacing etc")
+callbacks.register('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)")
+---------.register('contribute_filter', builders.contribute_filter, "adding content to lists")
statistics.register("v-node processing time", function()
return statistics.elapsedseconds(builders)
@@ -262,3 +273,113 @@ implement { name = "startparbuilder", actions = constructors.start, arguments
implement { name = "stopparbuilder", actions = constructors.stop }
implement { name = "enableparbuilder", actions = constructors.enable }
implement { name = "disableparbuilder", actions = constructors.disable }
+
+-- Here are some tracers:
+
+local new_kern = nodes.pool.kern
+local new_rule = nodes.pool.rule
+local hpack = nodes.hpack
+local setcolor = nodes.tracers.colors.set
+local listtoutf = nodes.listtoutf
+
+local report_hpack = logs.reporter("hpack routine")
+local report_vpack = logs.reporter("vpack routine")
+
+-- overflow|badness w h d dir
+
+local function vpack_quality(how,n,detail,first,last)
+ if last <= 0 then
+ report_vpack("%s vbox",how)
+ elseif first > 0 and first < last then
+ report_vpack("%s vbox at line %i - %i",how,first,last)
+ else
+ report_vpack("%s vbox at line %i",how,last)
+ end
+end
+
+trackers.register("builders.vpack.quality",function(v)
+ callback.register("vpack_quality",v and report_vpack_quality or nil)
+end)
+
+local report, show = false, false
+
+local function hpack_quality(how,detail,n,first,last)
+ if report then
+ local str = listtoutf(n.head,"",true,nil,true)
+ if last <= 0 then
+ report_hpack("%s hbox: %s",how,str)
+ elseif first > 0 and first < last then
+ report_hpack("%s hbox at line %i - %i: %s",how,first,last,str)
+ else
+ report_hpack("%s hbox at line %i: %s",how,last,str)
+ end
+ end
+ if show then
+ local width = 2*65536
+ local height = n.height
+ local depth = n.depth
+ local dir = n.dir
+ if height < 4*65526 then
+ height = 4*65526
+ end
+ if depth < 2*65526 then
+ depth = 2*65526
+ end
+ local rule = new_rule(width,height,depth)
+ rule.dir = dir
+ if how == "overfull" then
+ setcolor(rule,"red")
+ local kern = new_kern(-detail)
+ kern.next = rule
+ rule.prev = kern
+ rule = kern
+ elseif how == "underfull" then
+ setcolor(rule,"blue")
+ elseif how == "loose" then
+ setcolor(rule,"magenta")
+ elseif how == "tight" then
+ setcolor(rule,"cyan")
+ end
+ rule = hpack(rule)
+ rule.width = 0
+ rule.dir = dir
+ return rule
+ end
+end
+
+trackers.register("builders.hpack.quality",function(v)
+ report = v
+ callback.register("hpack_quality",(report or show) and hpack_quality or nil)
+end)
+
+trackers.register("builders.hpack.overflow",function(v)
+ show = v
+ callback.register("hpack_quality",(report or show) and hpack_quality or nil)
+end)
+
+-- local ignoredepth = - 65536000
+--
+-- callback.register("append_to_vlist_filter", function(box,location,prevdepth,mirrored)
+-- if prevdepth > ignoredepth then
+-- local b = tex.baselineskip
+-- local d = b.width - prevdepth
+-- local g = nil
+-- if mirrored then
+-- d = d - box.depth
+-- else
+-- d = d - box.height
+-- end
+-- if d < tex.lineskiplimit then
+-- g = nodes.pool.glue()
+-- g.spec = tex.lineskip
+-- else
+-- g = nodes.pool.baselineskip(d)
+-- end
+-- g.next = box
+-- box.prev = g
+-- return g, mirrored and box.height or box.depth
+-- else
+-- return box, mirrored and box.height or box.depth
+-- end
+-- end)
+--
diff --git a/Master/texmf-dist/tex/context/base/typo-bld.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-bld.mkiv
index 69047c98b15..621d81c524f 100644
--- a/Master/texmf-dist/tex/context/base/typo-bld.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-bld.mkiv
@@ -17,6 +17,10 @@
%D the underlying interfaces. But at least it's cleaned as part of the status-mkiv
%D cleanup.
+% \enabletrackers[builders.hpack.overflow]
+% \enabletrackers[builders.hpack.quality]
+% \enabletrackers[builders.vpack.quality]
+
% \startparbuilder[default]
% \input tufte \par
% \startparbuilder[oneline]
diff --git a/Master/texmf-dist/tex/context/base/mkiv/typo-brk.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-brk.lua
new file mode 100644
index 00000000000..106bb49546b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-brk.lua
@@ -0,0 +1,500 @@
+if not modules then modules = { } end modules ['typo-brk'] = {
+ version = 1.001,
+ comment = "companion to typo-brk.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- this code dates from the beginning and is kind of experimental; it
+-- will be optimized and improved soon
+
+local next, type, tonumber = next, type, tonumber
+local utfbyte, utfchar = utf.byte, utf.char
+local format = string.format
+
+local trace_breakpoints = false trackers.register("typesetters.breakpoints", function(v) trace_breakpoints = v end)
+
+local report_breakpoints = logs.reporter("typesetting","breakpoints")
+
+local nodes, node = nodes, node
+
+local settings_to_array = utilities.parsers.settings_to_array
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local getsubtype = nuts.getsubtype
+local getfont = nuts.getfont
+local getid = nuts.getid
+local getfield = nuts.getfield
+local getattr = nuts.getattr
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
+local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setchar = nuts.setchar
+local setdisc = nuts.setdisc
+local setnext = nuts.setnext
+local setprev = nuts.setprev
+local setboth = nuts.setboth
+local setsubtype = nuts.setsubtype
+
+local copy_node = nuts.copy
+local copy_nodelist = nuts.copy_list
+local free_node = nuts.free
+local insert_node_before = nuts.insert_before
+local insert_node_after = nuts.insert_after
+local remove_node = nuts.remove
+local end_of_math = nuts.end_of_math
+
+local tonodes = nuts.tonodes
+
+local texsetattribute = tex.setattribute
+local unsetvalue = attributes.unsetvalue
+
+local nodepool = nuts.pool
+local tasks = nodes.tasks
+
+local v_reset = interfaces.variables.reset
+local v_yes = interfaces.variables.yes
+
+local implement = interfaces.implement
+
+local new_penalty = nodepool.penalty
+local new_glue = nodepool.glue
+local new_disc = nodepool.disc
+local new_wordboundary = nodepool.wordboundary
+
+local nodecodes = nodes.nodecodes
+local kerncodes = nodes.kerncodes
+
+local glyph_code = nodecodes.glyph
+local kern_code = nodecodes.kern
+local math_code = nodecodes.math
+
+local fontkern_code = kerncodes.fontkern
+local userkern_code = kerncodes.userkern
+local italickern_code = kerncodes.italiccorrection
+
+local typesetters = typesetters
+
+typesetters.breakpoints = typesetters.breakpoints or {}
+local breakpoints = typesetters.breakpoints
+
+breakpoints.mapping = breakpoints.mapping or { }
+breakpoints.numbers = breakpoints.numbers or { }
+
+breakpoints.methods = breakpoints.methods or { }
+local methods = breakpoints.methods
+
+local a_breakpoints = attributes.private("breakpoint")
+
+storage.register("typesetters/breakpoints/mapping", breakpoints.mapping, "typesetters.breakpoints.mapping")
+
+local mapping = breakpoints.mapping
+local numbers = breakpoints.mapping
+
+for i=1,#mapping do
+ local m = mapping[i]
+ numbers[m.name] = m
+end
+
+-- this needs a cleanup ... maybe make all of them disc nodes
+
+-- todo: use boundaries
+
+local function withattribute(n,a)
+ setfield(n,"attr",a)
+ return n
+end
+
+local function insert_break(head,start,stop,before,after,kern)
+ local a = getfield(start,"attr")
+ if not kern then
+ insert_node_before(head,start,withattribute(new_penalty(before),a))
+ insert_node_before(head,start,withattribute(new_glue(0),a))
+ end
+ insert_node_after(head,stop,withattribute(new_glue(0),a))
+ insert_node_after(head,stop,withattribute(new_penalty(after),a))
+end
+
+methods[1] = function(head,start,stop,settings,kern)
+ local p, n = getboth(stop)
+ if p and n then
+ insert_break(head,start,stop,10000,0,kern)
+ end
+ return head, stop
+end
+
+methods[6] = function(head,start,stop,settings,kern)
+ local p = getprev(start)
+ local n = getnext(stop)
+ if p and n then
+ if kern then
+ insert_break(head,start,stop,10000,0,kern)
+ else
+ local l = new_wordboundary()
+ local d = new_disc()
+ local r = new_wordboundary()
+ local a = getfield(start,"attr")
+ -- setfield(l,"attr",a)
+ setfield(d,"attr",a) -- otherwise basemode is forces and we crash
+ -- setfield(r,"attr",a)
+ setlink(p,l)
+ setlink(l,d)
+ setlink(d,r)
+ setlink(r,n)
+ if start == stop then
+ setboth(start)
+ setdisc(d,start,nil,copy_node(start))
+ else
+ setprev(start)
+ setnext(stop)
+ setdisc(d,start,nil,copy_nodelist(start))
+ end
+ stop = r
+ end
+ end
+ return head, stop
+end
+
+methods[2] = function(head,start) -- ( => (-
+ local p, n = getboth(start)
+ if p and n then
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,new_disc())
+ -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
+ setfield(start,"attr",getfield(tmp,"attr"))
+ setfield(start,"replace",tmp)
+ local tmp = copy_node(tmp)
+ local hyphen = copy_node(tmp)
+ setchar(hyphen,languages.prehyphenchar(getfield(tmp,"lang")))
+ setlink(tmp,hyphen)
+ setfield(start,"post",tmp)
+ insert_break(head,start,start,10000,10000)
+ end
+ return head, start
+end
+
+methods[3] = function(head,start) -- ) => -)
+ local p, n = getboth(start)
+ if p and n then
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,new_disc())
+ -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
+ setfield(start,"attr",getfield(tmp,"attr"))
+ setfield(start,"replace",tmp)
+ local tmp = copy_node(tmp)
+ local hyphen = copy_node(tmp)
+ setchar(hyphen,languages.prehyphenchar(getfield(tmp,"lang")))
+ setlink(hyphen,tmp)
+ setfield(start,"pre",hyphen)
+ insert_break(head,start,start,10000,10000)
+ end
+ return head, start
+end
+
+methods[4] = function(head,start) -- - => - - -
+ local p, n = getboth(start)
+ if p and n then
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,new_disc())
+ -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
+ setfield(start,"attr",getfield(tmp,"attr"))
+ setdisc(start,copy_node(tmp),copy_node(tmp),tmp)
+ insert_break(head,start,start,10000,10000)
+ end
+ return head, start
+end
+
+methods[5] = function(head,start,stop,settings) -- x => p q r
+ local p, n = getboth(start)
+ if p and n then
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,new_disc())
+ local attr = getfield(tmp,"attr")
+ local font = getfont(tmp)
+ local left = settings.left
+ local right = settings.right
+ local middle = settings.middle
+ if left then
+ left = tonodes(tostring(left),font,attr)
+ end
+ if right then
+ right = tonodes(tostring(right),font,attr)
+ end
+ if middle then
+ middle = tonodes(tostring(middle),font,attr)
+ end
+ setdisc(start,left,right,middle)
+ -- setfield(start,"attr",copy_nodelist(attr)) -- todo: critical only -- just a copy will do
+ setfield(start,"attr",attr) -- todo: critical only -- just a copy will do
+ free_node(tmp)
+ insert_break(head,start,start,10000,10000)
+ end
+ return head, start
+end
+
+-- we know we have a limited set
+-- what if characters are replaced by the font handler
+-- do we need to go into disc nodes (or do it as first step but then we need a pre/post font handler)
+
+function breakpoints.handler(head)
+ local done = false
+ local nead = tonut(head)
+ local attr = nil
+ local map = nil
+ local current = nead
+ while current do
+ local char, id = isglyph(current)
+ if char then
+ local a = getattr(current,a_breakpoints)
+ if a and a > 0 then
+ if a ~= attr then
+ local data = mapping[a]
+ if data then
+ map = data.characters
+ else
+ map = nil
+ end
+ attr = a
+ end
+ if map then
+ local cmap = map[char]
+ if cmap then
+ -- for now we collect but when found ok we can move the handler here
+ -- although it saves nothing in terms of performance
+ local lang = getfield(current,"lang")
+ local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""])
+ if smap then
+ local skip = smap.skip
+ local start = current
+ local stop = current
+ current = getnext(current)
+ if skip then
+ while current do
+ local c = isglyph(current)
+ if c == char then
+ stop = current
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ end
+ local d = { start, stop, cmap, smap, char }
+ if done then
+ done[#done+1] = d
+ else
+ done = { d }
+ end
+ else
+ current = getnext(current)
+ end
+ setattr(start,a_breakpoints,unsetvalue) -- should not be needed
+ else
+ current = getnext(current)
+ end
+ else
+ current = getnext(current)
+ end
+ else
+ current = getnext(current)
+ end
+ elseif id == math_code then
+ attr = nil
+ current = end_of_math(current)
+ if current then
+ current = getnext(current)
+ end
+ else
+ current = getnext(current)
+ end
+ end
+ if not done then
+ return head, false
+ end
+ -- we have hits
+ local numbers = languages.numbers
+ for i=1,#done do
+ local data = done[i]
+ local start = data[1]
+ local stop = data[2]
+ local cmap = data[3]
+ local smap = data[4]
+-- local lang = getfield(start,"lang")
+-- -- we do a sanity check for language
+-- local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""])
+-- if smap then
+ local nleft = smap.nleft
+ local cleft = 0
+ local prev = getprev(start)
+ local kern = nil
+ while prev and nleft ~= cleft do
+ local id = getid(prev)
+ if id == glyph_code then
+ cleft = cleft + 1
+ prev = getprev(prev)
+ elseif id == kern_code then
+ local s = getsubtype(prev)
+ if s == fontkern_code or s == italickern_code then
+ if cleft == 0 then
+ kern = prev
+ prev = getprev(prev)
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if nleft == cleft then
+ local nright = smap.nright
+ local cright = 0
+ local next = getnext(stop) -- getnext(start)
+ while next and nright ~= cright do
+ local char, id = isglyph(next)
+ if char then
+ if cright == 1 and cmap[char] then
+ -- let's not make it too messy
+ break
+ end
+ cright = cright + 1
+ next = getnext(next)
+ elseif id == kern_code then
+ local s = getsubtype(next)
+ if s == fontkern_code or s == italickern_code then
+ if cleft == 0 then
+ next = getnext(next)
+ else
+ break
+ end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if nright == cright then
+ local method = methods[smap.type]
+ if method then
+ nead, start = method(nead,start,stop,smap,kern)
+ end
+ end
+-- end
+ end
+ end
+ return tonode(nead), true
+end
+
+local enabled = false
+
+function breakpoints.define(name)
+ local data = numbers[name]
+ if data then
+ -- error
+ else
+ local number = #mapping + 1
+ local data = {
+ name = name,
+ number = number,
+ characters = { },
+ }
+ mapping[number] = data
+ numbers[name] = data
+ end
+end
+
+function breakpoints.setreplacement(name,char,language,settings)
+ char = utfbyte(char)
+ local data = numbers[name]
+ if data then
+ local characters = data.characters
+ local cmap = characters[char]
+ if not cmap then
+ cmap = { }
+ characters[char] = cmap
+ end
+ local left, right, middle = settings.left, settings.right, settings.middle
+ cmap[language or ""] = {
+ type = tonumber(settings.type) or 1,
+ nleft = tonumber(settings.nleft) or 1,
+ nright = tonumber(settings.nright) or 1,
+ left = left ~= "" and left or nil,
+ right = right ~= "" and right or nil,
+ middle = middle ~= "" and middle or nil,
+ skip = settings.range == v_yes,
+ } -- was { type or 1, before or 1, after or 1 }
+ end
+end
+
+function breakpoints.set(n)
+ if n == v_reset then
+ n = unsetvalue
+ else
+ n = mapping[n]
+ if not n then
+ n = unsetvalue
+ else
+ if not enabled then
+ if trace_breakpoints then
+ report_breakpoints("enabling breakpoints handler")
+ end
+ tasks.enableaction("processors","typesetters.breakpoints.handler")
+ end
+ n = n.number
+ end
+ end
+ texsetattribute(a_breakpoints,n)
+end
+
+-- function breakpoints.enable()
+-- tasks.enableaction("processors","typesetters.breakpoints.handler")
+-- end
+
+-- interface
+
+implement {
+ name = "definebreakpoints",
+ actions = breakpoints.define,
+ arguments = "string"
+}
+
+implement {
+ name = "definebreakpoint",
+ actions = breakpoints.setreplacement,
+ arguments = {
+ "string",
+ "string",
+ "string",
+ {
+ { "type", "integer" },
+ { "nleft", "integer" },
+ { "nright", "integer" },
+ { "right" },
+ { "left" },
+ { "middle" },
+ { "range" },
+ }
+ }
+}
+
+implement {
+ name = "setbreakpoints",
+ actions = breakpoints.set,
+ arguments = "string"
+}
diff --git a/Master/texmf-dist/tex/context/base/typo-brk.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-brk.mkiv
index 3b463c06f92..3f9ce6f3a49 100644
--- a/Master/texmf-dist/tex/context/base/typo-brk.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-brk.mkiv
@@ -38,18 +38,22 @@
\def\typo_breakpoints_define_character[#1][#2][#3]% name char settings
{\begingroup
- \getdummyparameters[\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,\c!left=,\c!right=,\c!middle=,#3]%
+ \getdummyparameters
+ [\c!type=\plusone,\c!nleft=\plusthree,\c!nright=\plusthree,%
+ \s!language=,\c!left=,\c!right=,\c!middle=,\c!range=\v!no,%
+ #3]%
\clf_definebreakpoint
{#1}%
{#2}%
{\reallanguagetag{\directdummyparameter\s!language}}%
{% maybe deal with #3 at the lua end
type \directdummyparameter\c!type
- nleft {\directdummyparameter\c!nleft}%
- nright {\directdummyparameter\c!nright}%
+ nleft \directdummyparameter\c!nleft
+ nright \directdummyparameter\c!nright
right {\directdummyparameter\c!right}%
left {\directdummyparameter\c!left}%
middle {\directdummyparameter\c!middle}%
+ range {\directdummyparameter\c!range}%
}%
\relax
\endgroup}
@@ -63,11 +67,15 @@
\definebreakpoints[compound]
-\definebreakpoint [compound] [+] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
-\definebreakpoint [compound] [-] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
-\definebreakpoint [compound] [/] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
-\definebreakpoint [compound] [(] [\c!nleft=3,\c!nright=3,\c!type=2] % type=5,middle=(,left=(-,right=
-\definebreakpoint [compound] [)] [\c!nleft=3,\c!nright=3,\c!type=3] % type=5,middle=),left=,right=-)
+% 1: simple break
+% 6: simple break but skip same
+
+\definebreakpoint [compound] [+] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
+%definebreakpoint [compound] [-] [\c!nleft=3,\c!nright=3,\c!type=1,\c!range=\v!yes] % middle=+,left=,right=
+\definebreakpoint [compound] [-] [\c!nleft=3,\c!nright=3,\c!type=6,\c!range=\v!yes] % middle=+,left=,right=
+\definebreakpoint [compound] [/] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
+\definebreakpoint [compound] [(] [\c!nleft=3,\c!nright=3,\c!type=2] % type=5,middle=(,left=(-,right=
+\definebreakpoint [compound] [)] [\c!nleft=3,\c!nright=3,\c!type=3] % type=5,middle=),left=,right=-)
\let\installbreakpoint\definebreakpoint % for a while
diff --git a/Master/texmf-dist/tex/context/base/typo-cap.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-cap.lua
index 80a74bac916..62b90b8ab36 100644
--- a/Master/texmf-dist/tex/context/base/typo-cap.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-cap.lua
@@ -10,7 +10,8 @@ local next, type = next, type
local format, insert = string.format, table.insert
local div, randomnumber = math.div, math.random
-local trace_casing = false trackers.register("typesetters.casing", function(v) trace_casing = v end)
+local trace_casing = false trackers .register("typesetters.casing", function(v) trace_casing = v end)
+local check_kerns = true directives.register("typesetters.casing.checkkerns", function(v) check_kerns = v end)
local report_casing = logs.reporter("typesetting","casing")
@@ -21,15 +22,18 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
local getid = nuts.getid
local getattr = nuts.getattr
-local setattr = nuts.setattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
+local getdisc = nuts.getdisc
+
+local setfield = nuts.setfield
+local setattr = nuts.setattr
+local setchar = nuts.setchar
local copy_node = nuts.copy
local end_of_math = nuts.end_of_math
@@ -47,10 +51,11 @@ local disc_code = nodecodes.disc
local math_code = nodecodes.math
local kerning_code = kerncodes.kerning
-local userskip_code = skipcodes.userskip
local tasks = nodes.tasks
+local newkern = nuts.pool.kern
+
local fonthashes = fonts.hashes
local fontdata = fonthashes.identifiers
local fontchar = fonthashes.characters
@@ -83,7 +88,9 @@ local function set(tag,font)
else
run = run + 1
end
- return font * 0x10000 + tag * 0x100 + run
+ local a = font * 0x10000 + tag * 0x100 + run
+ blocked[a] = false
+ return a
end
local function get(a)
@@ -93,6 +100,7 @@ local function get(a)
return tag, font, run
end
+
-- print(get(set( 1, 0)))
-- print(get(set( 1, 99)))
-- print(get(set( 2, 96)))
@@ -130,16 +138,16 @@ local function replacer(start,codes)
for i=#dc,1,-1 do
local chr = dc[i]
if i == 1 then
- setfield(start,"char",chr)
+ setchar(start,chr)
else
local g = copy_node(start)
- setfield(g,"char",chr)
+ setchar(g,chr)
insert_after(start,start,g)
end
end
return start, true
elseif ifc[dc] then
- setfield(start,"char",dc)
+ setchar(start,dc)
return start, true
end
end
@@ -196,25 +204,67 @@ local function camel(start,attr,lastfont,n,count,where,first)
return start, done_1 or done_2, true
end
+-- local function mixed(start,attr,lastfont,n,count,where,first)
+-- if where == "post" then
+-- return
+-- end
+-- local used = first or start
+-- local char = getchar(first)
+-- local dc = uccodes[char]
+-- if not dc then
+-- return start, false, true
+-- elseif dc == char then
+-- local lfa = lastfont[n]
+-- if lfa then
+-- setfield(first,"font",lfa)
+-- return start, true, true
+-- else
+-- return start, false, true
+-- end
+-- else
+-- replacer(first or start,uccodes)
+-- return start, true, true
+-- end
+-- end
+
local function mixed(start,attr,lastfont,n,count,where,first)
if where == "post" then
return
end
local used = first or start
- local char = getchar(first)
+ local char = getchar(used)
local dc = uccodes[char]
if not dc then
return start, false, true
elseif dc == char then
local lfa = lastfont[n]
if lfa then
- setfield(first,"font",lfa)
+ setfield(used,"font",lfa)
return start, true, true
else
return start, false, true
end
else
- replacer(first or start,uccodes)
+ if check_kerns then
+ local p = getprev(used)
+ if p and getid(p) == glyph_code then
+ local c = lccodes[char]
+ local c = type(c) == "table" and c[1] or c
+ replacer(used,uccodes)
+ local fp = getfont(p)
+ local fc = getfont(used)
+ if fp ~= fc then
+ local k = fonts.getkern(fontdata[fp],getchar(p),c)
+ if k ~= 0 then
+ insert_after(p,p,newkern(k))
+ end
+ end
+ else
+ replacer(used,uccodes)
+ end
+ else
+ replacer(used,uccodes)
+ end
return start, true, true
end
end
@@ -256,7 +306,7 @@ local function random(start,attr,lastfont,n,count,where,first)
while true do
local n = randomnumber(0x41,0x5A)
if tfm[n] then -- this also intercepts tables
- setfield(used,"char",n)
+ setchar(used,n)
return start, true
end
end
@@ -264,7 +314,7 @@ local function random(start,attr,lastfont,n,count,where,first)
while true do
local n = randomnumber(0x61,0x7A)
if tfm[n] then -- this also intercepts tables
- setfield(used,"char",n)
+ setchar(used,n)
return start, true
end
end
@@ -337,7 +387,7 @@ function cases.handler(head) -- not real fast but also not used on much data
end
local action = actions[n] -- map back to low number
if action then
- local replace = getfield(start,"replace")
+ local pre, post, replace = getdisc(start)
if replace then
local cnt = count
for g in traverse_id(glyph_code,replace) do
@@ -347,7 +397,6 @@ function cases.handler(head) -- not real fast but also not used on much data
if quit then break end
end
end
- local pre = getfield(start,"pre")
if pre then
local cnt = count
for g in traverse_id(glyph_code,pre) do
@@ -357,7 +406,6 @@ function cases.handler(head) -- not real fast but also not used on much data
if quit then break end
end
end
- local post = getfield(start,"post")
if post then
local cnt = count
for g in traverse_id(glyph_code,post) do
diff --git a/Master/texmf-dist/tex/context/base/typo-cap.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-cap.mkiv
index 2859ba104e1..114532e4e47 100644
--- a/Master/texmf-dist/tex/context/base/typo-cap.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-cap.mkiv
@@ -266,14 +266,14 @@
% [MixedCaps]
% [MixedCaps*default cp \the\exheight]
-\definefontfeature
- [mixeddefault]
- [default]
- [extend=1.2]
+% \definefontfeature
+% [mixeddefault]
+% [default]
+% [extend=1.2]
\definefont
[MixedCaps]
- [CurrentFont*default,mixeddefault cp \the\exheight]
+ [CurrentFont*default cp 1.2\exheight]
\setupcapitals
[\v!mixed]
diff --git a/Master/texmf-dist/tex/context/base/typo-chr.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-chr.lua
index db8579c8448..041a73e1b23 100644
--- a/Master/texmf-dist/tex/context/base/typo-chr.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-chr.lua
@@ -89,10 +89,9 @@ if not modules then modules = { } end modules ['typo-chr'] = {
local insert, remove = table.insert, table.remove
local nodecodes = nodes.nodecodes
-local whatsitcodes = nodes.whatsitcodes
local glyph_code = nodecodes.glyph
local whatsit_code = nodecodes.whatsit
-local localpar_code = whatsitcodes.localpar
+local localpar_code = nodecodes.localpar
local texnest = tex.nest
local free_node = node.free
@@ -171,7 +170,8 @@ local function pickup(head,tail,str)
while true do
local prev = first.prev
if prev and prev[a_marked] == attr then
- if prev.id == whatsit_code and prev.subtype == localpar_code then
+ local id = prev.id
+ if id == localpar_code then
break
else
first = prev
diff --git a/Master/texmf-dist/tex/context/base/typo-chr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-chr.mkiv
index dc0c6866408..dc0c6866408 100644
--- a/Master/texmf-dist/tex/context/base/typo-chr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-chr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-cln.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-cln.lua
index 7228e02c543..bc11f944c94 100644
--- a/Master/texmf-dist/tex/context/base/typo-cln.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-cln.lua
@@ -31,11 +31,13 @@ local texsetattribute = tex.setattribute
local nuts = nodes.nuts
local tonut = nuts.tonut
-local setfield = nuts.setfield
local getchar = nuts.getchar
local getattr = nuts.getattr
local setattr = nuts.setattr
+local setfield = nuts.setfield
+local setchar = nuts.setchar
+
local traverse_id = nuts.traverse_id
local unsetvalue = attributes.unsetvalue
@@ -67,7 +69,7 @@ function cleaners.handler(head)
if type(upper) == "table" then
-- some day, not much change that \SS ends up here
else
- setfield(n,"char",upper)
+ setchar(n,upper)
done = true
if trace_autocase then
report_autocase("")
@@ -95,7 +97,7 @@ function cleaners.set(n)
end
enabled = true
end
- texsetattribute(a_cleaner,n)
+ texsetattribute(a_cleaner,tonumber(n))
end
end
diff --git a/Master/texmf-dist/tex/context/base/typo-cln.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-cln.mkiv
index 193198dc556..193198dc556 100644
--- a/Master/texmf-dist/tex/context/base/typo-cln.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-cln.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-del.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-del.mkiv
index 4c3c5ab3da0..eb51a06e107 100644
--- a/Master/texmf-dist/tex/context/base/typo-del.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-del.mkiv
@@ -11,10 +11,15 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% todo: textstyle|color for inline \quotation etc
+
\writestatus{loading}{ConTeXt Typesetting Macros / Delimited Content}
\unprotect
+\ifdefined\dotagsetdelimitedsymbol \else \let\dotagsetdelimitedsymbol \gobbleoneargument \fi
+\ifdefined\dotagsetsubsentencesymbol \else \let\dotagsetsubsentencesymbol\gobbleoneargument \fi
+
% THIS IS OBSOLETE:
\installcorenamespace{hyphenmarksign} % let's not waste a setuphandler (yet)
@@ -136,7 +141,10 @@
% \def\aftersubsentence {\ignorespaces}
\unexpanded\def\midsentence
- {\symbol[\c!midsentence]}
+ {\dostarttagged\t!subsentencesymbol\empty
+ \dotagsetsubsentencesymbol\s!middle
+ \symbol[\c!midsentence]%
+ \dostoptagged}
\unexpanded\def\beginofsubsentence
{\beforesubsentence
@@ -149,11 +157,19 @@
\dontleavehmode % was \leaveoutervmode
\fi
\dostarttagged\t!subsentence\empty % no chain
+ \dostarttagged\t!subsentencesymbol\empty
+ \dotagsetsubsentencesymbol\s!left
\symbol[\ifodd\c_typo_subsentence_nesting\c!leftsentence\else\c!leftsubsentence\fi]%
+ \dostoptagged
+ \dostarttagged\t!subsentencecontent\empty
}% \ignorespaces}
\unexpanded\def\endofsubsentence % relax prevents space gobbling
- {\symbol[\ifodd\c_typo_subsentence_nesting\c!rightsentence\else\c!rightsubsentence\fi]%
+ {\dostoptagged
+ \dostarttagged\t!subsentencesymbol\empty
+ \dotagsetsubsentencesymbol\s!right
+ \symbol[\ifodd\c_typo_subsentence_nesting\c!rightsentence\else\c!rightsubsentence\fi]%
+ \dostoptagged
\dostoptagged
\global\advance\c_typo_subsentence_nesting\minusone
\unskip
@@ -237,13 +253,11 @@
\def\quote #1{'#1'}%
\to \everysimplifycommands
-%D The next features was so desperately needed by Giuseppe
-%D Bilotta that he made a module for it. Since this is a
-%D typical example of core functionality, I decided to extend
-%D the low level quotation macros in such a way that a speech
-%D feature could be build on top of it. The speech opening and
-%D closing symbols are defined per language. Italian is an
-%D example of a language that has them set.
+%D The next features was so desperately needed by Giuseppe Bilotta that he made a
+%D module for it. Since this is a typical example of core functionality, I decided
+%D to extend the low level quotation macros in such a way that a speech feature
+%D could be build on top of it. The speech opening and closing symbols are defined
+%D per language. Italian is an example of a language that has them set.
\newsignal\d_typo_delimited_signal
@@ -283,7 +297,7 @@
[\c!location=\v!margin, % \v!text \v!paragraph
\c!spacebefore=,
\c!spaceafter=\delimitedtextparameter\c!spacebefore,
- \c!style=\v!normal,
+ \c!style=,
\c!color=,
\c!leftmargin=\zeropoint,
\c!rightmargin=\delimitedtextparameter\c!leftmargin,
@@ -318,13 +332,16 @@
\def\typo_delimited_start_font
{\let\typo_delimited_stop\typo_delimitedtexts_finish_font
+ \dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!left
\delimitedtextparameter\c!left
+ \dostoptagged
\ignorespaces}
\def\typo_delimited_start_other
{\edef\p_delimited_repeat{\delimitedtextparameter\c!repeat}%
\ifx\p_delimited_repeat\v!yes
- \let\typo_delimited_repeat\typo_delimited_repeat_ideed
+ \let\typo_delimited_repeat\typo_delimited_repeat_indeed
\else
\let\typo_delimited_repeat\relax
\fi
@@ -338,7 +355,11 @@
\fi\fi}
\def\typo_delimitedtexts_finish_font
- {\removeunwantedspaces\delimitedtextparameter\c!right}
+ {\removeunwantedspaces
+ \dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!right
+ \delimitedtextparameter\c!right
+ \dostoptagged}
\def\typo_delimited_start_par
{\dosingleempty\typo_delimited_start_par_indeed}
@@ -379,11 +400,13 @@
\setnextleftdelimitedtextmark
\setnextrightdelimitedtextmark
%
- \ignorespaces}
+ \ignorespaces
+ \dostarttagged\t!delimitedcontent\empty}
\def\typo_delimited_stop_par
{\removeunwantedspaces
\removelastskip
+ \dostoptagged
\rightdelimitedtextmark
\carryoverpar\endgroup % new per 2013-01-21 ... please left floats
\popmacro\checkindentation
@@ -401,10 +424,12 @@
\begingroup
\usedelimitedtextstyleandcolor\c!style\c!color
\typo_delimited_handle_left\c!left
- \ignorespaces}
+ \ignorespaces
+ \dostarttagged\t!delimitedcontent\empty}
\def\typo_delimited_stop_txt
{\removeunwantedspaces
+ \dostoptagged
\typo_delimited_handle_right\c!right
\endgroup}
@@ -499,16 +524,22 @@
\fi}
\def\typo_delimited_left_symbol#1%
- {\setbox\scratchbox\hbox{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}%
+ {\dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!left
+ \setbox\scratchbox\hbox{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}%
\dontleavehmode
\edef\p_delimited_margin{\delimitedtextparameter\c!location}%
\ifx\p_delimited_margin\v!margin
\hskip-\wd\scratchbox
\fi
- \box\scratchbox}
+ \box\scratchbox
+ \dostoptagged}
\def\typo_delimited_right_symbol#1%
- {\hsmash{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}}
+ {\dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!right
+ \hsmash{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}%
+ \dostoptagged}
\def\typo_delimited_nextleft_symbol#1%
{\localleftbox\bgroup
@@ -538,7 +569,8 @@
% \stoptext
\def\typo_delimited_handle_middle#1%
- {\begingroup
+ {\dostoptagged
+ \begingroup
\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor
\setbox\scratchbox\hbox{\delimitedtextparameter#1}%
\ifdim\wd\scratchbox>\zeropoint
@@ -551,11 +583,15 @@
\hskip\zeropoint % == \prewordbreak
\fi
\strut % new, needed below
+ \dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!middle
\delimitedtextparameter#1% unhbox\scratchbox
+ \dostoptagged
% \penalty\plustenthousand % else overfull boxes, but that's better than dangling periods
\kern\d_typo_delimited_signal % +- \prewordbreak
\fi
- \endgroup}
+ \endgroup
+ \dostarttagged\t!delimitedcontent\empty}
\def\typo_delimited_handle_left#1%
{\begingroup
@@ -575,7 +611,10 @@
\hskip\zeropoint % == \prewordbreak
\fi
\strut % new, needed below
+ \dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!left
\delimitedtextparameter#1% unhbox\scratchbox
+ \dostoptagged
\penalty\plustenthousand % new per 2013-03-09 WS mailing list
\hskip\d_typo_delimited_signal % +- \prewordbreak
\fi
@@ -600,7 +639,10 @@
\hskip\zeropoint % == \prewordbreak
\fi
\strut % new, needed below
+ \dostarttagged\t!delimitedsymbol\empty
+ \dotagsetdelimitedsymbol\s!right
\delimitedtextparameter#1% unhbox\scratchbox
+ \dostoptagged
\kern\d_typo_delimited_signal % +- \prewordbreak
\fi
\endgroup}
@@ -608,44 +650,15 @@
\unexpanded\def\typo_delimited_par
{\groupedcommand
{\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext % block?
- \typo_delimited_handle_left\c!left}
- {\typo_delimited_handle_right\c!right
+ \usedelimitedtextstyleandcolor\c!style\c!color
+ \typo_delimited_handle_left\c!left
+ \dostarttagged\t!delimitedcontent\empty}
+ {\dostoptagged
+ \typo_delimited_handle_right\c!right
\removelastskip
\dostoptagged
\typo_delimited_pop}}
-% \unexpanded\def\typo_delimited_txt
-% {\doifelse{\delimitedtextparameter\c!style}\v!normal
-% \typo_delimited_quoted
-% \typo_delimited_attributed}
-%
-% \def\typo_delimited_quoted_b
-% {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
-% \typo_delimited_handle_left\c!left}
-%
-% \def\typo_delimited_quoted_e
-% {\typo_delimited_handle_right\c!right
-% \removelastskip
-% \dostoptagged
-% \typo_delimited_pop}
-%
-% \def\typo_delimited_attributed_b
-% {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
-% \usedelimitedtextstyleandcolor\c!style\c!color}
-%
-% \def\typo_delimited_attributed_e
-% {\dostoptagged
-% \typo_delimited_pop}
-%
-% \def\typo_delimited_fontdriven_b
-% {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
-% \languageparameter{\c!left\currentparentdelimitedtext}}% was: \currentdelimitedtext
-%
-% \def\typo_delimited_fontdriven_e
-% {\languageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext
-% \dostoptagged
-% \typo_delimited_pop}
-
\unexpanded\def\typo_delimited_txt
{\edef\p_left_right{\delimitedtextparameter\c!left\delimitedtextparameter\c!right}%
\ifx\p_left_right\empty
@@ -657,29 +670,36 @@
\def\typo_delimited_quoted_b
{\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
\typo_delimited_handle_left\c!left
- \usedelimitedtextstyleandcolor\c!style\c!color}
+ \usedelimitedtextstyleandcolor\c!style\c!color
+ \dostarttagged\t!delimitedcontent\empty}
\def\typo_delimited_quoted_e
- {\typo_delimited_handle_right\c!right
- \removelastskip
+ {\dostoptagged
+ \typo_delimited_handle_right\c!right
+ \removelastskip % ?
\dostoptagged
\typo_delimited_pop}
\def\typo_delimited_attributed_b
{\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
- \usedelimitedtextstyleandcolor\c!style\c!color}
+ \usedelimitedtextstyleandcolor\c!style\c!color
+ \dostarttagged\t!delimitedcontent\empty
+ \ignorespaces}
\def\typo_delimited_attributed_e
{\dostoptagged
+ \dostoptagged
\typo_delimited_pop}
\def\typo_delimited_fontdriven_b
{\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext
\usedlanguageparameter{\c!left\currentparentdelimitedtext}% was: \currentdelimitedtext
- \usedelimitedtextstyleandcolor\c!style\c!color}
+ \usedelimitedtextstyleandcolor\c!style\c!color
+ \dostarttagged\t!delimitedcontent\empty}
\def\typo_delimited_fontdriven_e
- {\usedlanguageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext
+ {\dostoptagged
+ \usedlanguageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext
\dostoptagged
\typo_delimited_pop}
@@ -737,6 +757,11 @@
\c!middle={\symbol[\c!middlespeech]},
\c!right={\symbol[\c!rightspeech]}]
+\definedelimitedtext
+ [\v!aside]
+ [\c!left={\symbol[\c!leftsentence]},
+ \c!right={\symbol[\c!rightsentence]}]
+
% how do we call an tight quote
%
% \definedelimitedtext
diff --git a/Master/texmf-dist/tex/context/base/mkiv/typo-dha.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-dha.lua
new file mode 100644
index 00000000000..25e92bd2841
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dha.lua
@@ -0,0 +1,458 @@
+if not modules then modules = { } end modules ['typo-dha'] = {
+ version = 1.001,
+ comment = "companion to typo-dir.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- Some analysis by Idris:
+--
+-- 1. Assuming the reading- vs word-order distinction (bidi-char types) is governing;
+-- 2. Assuming that 'ARAB' represents an actual arabic string in raw input order, not word-order;
+-- 3. Assuming that 'BARA' represent the correct RL word order;
+--
+-- Then we have, with input: LATIN ARAB
+--
+-- \textdir TLT LATIN ARAB => LATIN BARA
+-- \textdir TRT LATIN ARAB => LATIN BARA
+-- \textdir TRT LRO LATIN ARAB => LATIN ARAB
+-- \textdir TLT LRO LATIN ARAB => LATIN ARAB
+-- \textdir TLT RLO LATIN ARAB => NITAL ARAB
+-- \textdir TRT RLO LATIN ARAB => NITAL ARAB
+
+-- elseif d == "es" then -- European Number Separator
+-- elseif d == "et" then -- European Number Terminator
+-- elseif d == "cs" then -- Common Number Separator
+-- elseif d == "nsm" then -- Non-Spacing Mark
+-- elseif d == "bn" then -- Boundary Neutral
+-- elseif d == "b" then -- Paragraph Separator
+-- elseif d == "s" then -- Segment Separator
+-- elseif d == "ws" then -- Whitespace
+-- elseif d == "on" then -- Other Neutrals
+
+-- todo : use new dir functions
+-- todo : make faster
+-- todo : move dir info into nodes
+-- todo : swappable tables and floats i.e. start-end overloads (probably loop in builders)
+
+-- I removed the original tracing code and now use the colorful one. If I ever want to change
+-- something I will just inject prints for tracing.
+
+local nodes, node = nodes, node
+
+local trace_directions = false trackers.register("typesetters.directions.default", function(v) trace_directions = v end)
+
+local report_directions = logs.reporter("typesetting","text directions")
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+local nutstring = nuts.tostring
+
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getchar = nuts.getchar
+local getid = nuts.getid
+local getsubtype = nuts.getsubtype
+local getlist = nuts.getlist
+local getfield = nuts.getfield
+local getattr = nuts.getattr
+local getprop = nuts.getprop
+local isglyph = nuts.isglyph -- or ischar
+
+local setfield = nuts.setfield
+local setprop = nuts.setprop
+local setchar = nuts.setchar
+
+local insert_node_before = nuts.insert_before
+local insert_node_after = nuts.insert_after
+local remove_node = nuts.remove
+local end_of_math = nuts.end_of_math
+
+local nodepool = nuts.pool
+
+local nodecodes = nodes.nodecodes
+local skipcodes = nodes.skipcodes
+
+local glyph_code = nodecodes.glyph
+local math_code = nodecodes.math
+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 dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
+
+local parfillskip_code = skipcodes.parfillskip
+
+local new_textdir = nodepool.textdir
+
+local hasbit = number.hasbit
+local formatters = string.formatters
+local insert = table.insert
+
+local fonthashes = fonts.hashes
+local fontdata = fonthashes.identifiers
+local fontchar = fonthashes.characters
+
+local chardirections = characters.directions
+local charmirrors = characters.mirrors
+local charclasses = characters.textclasses
+
+local directions = typesetters.directions
+local setcolor = directions.setcolor
+local getglobal = directions.getglobal
+
+local a_state = attributes.private('state')
+local a_directions = attributes.private('directions')
+
+local strip = false
+
+local s_isol = fonts.analyzers.states.isol
+
+local function stopdir(finish)
+ local n = new_textdir(finish == "TRT" and "-TRT" or "-TLT")
+ setprop(n,"direction",true)
+ return n
+end
+
+local function startdir(finish)
+ local n = new_textdir(finish == "TRT" and "+TRT" or "+TLT")
+ setprop(n,"direction",true)
+ return n
+end
+
+local function nextisright(current)
+ current = getnext(current)
+ local character, id = isglyph(current)
+ if character then
+ local direction = chardirections[character]
+ return direction == "r" or direction == "al" or direction == "an"
+ end
+end
+
+local function previsright(current)
+ current = getprev(current)
+ local character, id = isglyph(current)
+ if character then
+ local direction = chardirections[character]
+ return direction == "r" or direction == "al" or direction == "an"
+ end
+end
+
+local function process(start)
+
+ local head = tonut(start) -- we have a global head
+ local current = head
+ local autodir = 0
+ local embedded = 0
+ local override = 0
+ local pardir = 0
+ local textdir = 0
+ local done = false
+ local stack = { }
+ local top = 0
+ local obsolete = { }
+ local rlo = false
+ local lro = false
+ local prevattr = false
+ local fences = { }
+
+ while current do
+ -- no isglyph here as we test for skips first
+ local id = getid(current)
+ local next = getnext(current)
+ if id == math_code then
+ current = getnext(end_of_math(next))
+ elseif getprop(current,"direction") then
+ -- this handles unhbox etc
+ current = next
+ else
+ local attr = getattr(current,a_directions)
+ if attr and attr > 0 then
+ if attr ~= prevattr then
+ if not getglobal(a) then
+ lro = false
+ rlo = false
+ end
+ prevattr = attr
+ end
+ end
+ if id == glyph_code then
+ if attr and attr > 0 then
+ local character, font = isglyph(current)
+ if character == 0 then
+ -- skip signals
+ setprop(current,"direction",true)
+ else
+ local direction = chardirections[character]
+ local reversed = false
+ if rlo or override > 0 then
+ if direction == "l" then
+ direction = "r"
+ reversed = true
+ end
+ elseif lro or override < 0 then
+ if direction == "r" or direction == "al" then
+ setprop(current,a_state,s_isol) -- hm
+ direction = "l"
+ reversed = true
+ end
+ end
+ if direction == "on" then
+ local mirror = charmirrors[character]
+ if mirror and fontchar[font][mirror] then
+ local class = charclasses[character]
+ if class == "open" then
+ if nextisright(current) then
+ setchar(current,mirror)
+ setprop(current,"direction","r")
+ elseif autodir < 0 then
+ setchar(current,mirror)
+ setprop(current,"direction","r")
+ else
+ mirror = false
+ setprop(current,"direction","l")
+ end
+ local fencedir = autodir == 0 and textdir or autodir
+ fences[#fences+1] = fencedir
+ elseif class == "close" and #fences > 0 then
+ local fencedir = fences[#fences]
+ fences[#fences] = nil
+ if fencedir < 0 then
+ setchar(current,mirror)
+ setprop(current,"direction","r")
+ else
+ setprop(current,"direction","l")
+ mirror = false
+ end
+ elseif autodir < 0 then
+ setchar(current,mirror)
+ setprop(current,"direction","r")
+ else
+ setprop(current,"direction","l")
+ mirror = false
+ end
+ else
+ setprop(current,"direction",true)
+ end
+ if trace_directions then
+ setcolor(current,direction,false,mirror)
+ end
+ elseif direction == "l" then
+ if trace_directions then
+ setcolor(current,"l",reversed)
+ end
+ setprop(current,"direction","l")
+ elseif direction == "r" then
+ if trace_directions then
+ setcolor(current,"r",reversed)
+ end
+ setprop(current,"direction","r")
+ elseif direction == "en" then -- european number
+ if trace_directions then
+ setcolor(current,"l")
+ end
+ setprop(current,"direction","l")
+ elseif direction == "al" then -- arabic letter
+ if trace_directions then
+ setcolor(current,"r")
+ end
+ setprop(current,"direction","r")
+ elseif direction == "an" then -- arabic number
+ -- needs a better scanner as it can be a float
+ if trace_directions then
+ setcolor(current,"l") -- was r
+ end
+ setprop(current,"direction","n") -- was r
+ elseif direction == "lro" then -- Left-to-Right Override -> right becomes left
+ top = top + 1
+ stack[top] = { override, embedded }
+ override = -1
+ obsolete[#obsolete+1] = current
+ elseif direction == "rlo" then -- Right-to-Left Override -> left becomes right
+ top = top + 1
+ stack[top] = { override, embedded }
+ override = 1
+ obsolete[#obsolete+1] = current
+ elseif direction == "lre" then -- Left-to-Right Embedding -> TLT
+ top = top + 1
+ stack[top] = { override, embedded }
+ embedded = 1
+ obsolete[#obsolete+1] = current
+ elseif direction == "rle" then -- Right-to-Left Embedding -> TRT
+ top = top + 1
+ stack[top] = { override, embedded }
+ embedded = -1
+ obsolete[#obsolete+1] = current
+ elseif direction == "pdf" then -- Pop Directional Format
+ if top > 0 then
+ local s = stack[top]
+ override = s[1]
+ embedded = s[2]
+ top = top - 1
+ else
+ override = 0
+ embedded = 0
+ end
+ obsolete[#obsolete+1] = current
+ elseif trace_directions then
+ setcolor(current)
+ setprop(current,"direction",true)
+ else
+ setprop(current,"direction",true)
+ end
+ end
+ else
+ setprop(current,"direction",true)
+ end
+ elseif id == glue_code then
+ if getsubtype(current) == parfillskip_code then
+ setprop(current,"direction",'!')
+ else
+ setprop(current,"direction",'g')
+ end
+ elseif id == kern_code then
+ setprop(current,"direction",'k')
+ elseif id == dir_code then
+ local dir = getfield(current,"dir")
+ if dir == "+TRT" then
+ autodir = -1
+ elseif dir == "+TLT" then
+ autodir = 1
+ elseif dir == "-TRT" or dir == "-TLT" then
+ if embedded and embedded~= 0 then
+ autodir = embedded
+ else
+ autodir = 0
+ end
+ else
+ -- message
+ end
+ textdir = autodir
+ setprop(current,"direction",true)
+ elseif id == localpar_code then
+ local dir = getfield(current,"dir")
+ if dir == 'TRT' then
+ autodir = -1
+ elseif dir == 'TLT' then
+ autodir = 1
+ end
+ pardir = autodir
+ textdir = pardir
+ setprop(current,"direction",true)
+ else
+ setprop(current,"direction",true)
+ end
+ current = next
+ end
+ end
+
+ -- todo: track if really needed
+ -- todo: maybe we need to set the property (as it can be a copied list)
+
+ if done and strip then
+ local n = #obsolete
+ if n > 0 then
+ for i=1,n do
+ remove_node(head,obsolete[i],true)
+ end
+ if trace_directions then
+ report_directions("%s character nodes removed",n)
+ end
+ end
+ end
+
+ local state = false
+ local last = false
+ local collapse = true
+ current = head
+
+ -- todo: textdir
+ -- todo: inject before parfillskip
+
+ while current do
+ local id = getid(current)
+ if id == math_code then
+ -- todo: this might be tricky nesting
+ current = getnext(end_of_math(getnext(current)))
+ else
+ local cp = getprop(current,"direction")
+ if cp == "n" then
+ local swap = state == "r"
+ if swap then
+ head = insert_node_before(head,current,startdir("TLT"))
+ end
+ setprop(current,"direction",true)
+ while true do
+ local n = getnext(current)
+ if n and getprop(n,"direction") == "n" then
+ current = n
+ setprop(current,"direction",true)
+ else
+ break
+ end
+ end
+ if swap then
+ head, current = insert_node_after(head,current,stopdir("TLT"))
+ end
+ elseif cp == "l" then
+ if state ~= "l" then
+ if state == "r" then
+ head = insert_node_before(head,last or current,stopdir("TRT"))
+ end
+ head = insert_node_before(head,current,startdir("TLT"))
+ state = "l"
+ done = true
+ end
+ last = false
+ elseif cp == "r" then
+ if state ~= "r" then
+ if state == "l" then
+ head = insert_node_before(head,last or current,stopdir("TLT"))
+ end
+ head = insert_node_before(head,current,startdir("TRT"))
+ state = "r"
+ done = true
+ end
+ last = false
+ elseif collapse then
+ if cp == "k" or cp == "g" then
+ last = last or current
+ else
+ last = false
+ end
+ else
+ if state == "r" then
+ head = insert_node_before(head,current,stopdir("TRT"))
+ elseif state == "l" then
+ head = insert_node_before(head,current,stopdir("TLT"))
+ end
+ state = false
+ last = false
+ end
+ setprop(current,"direction",true)
+ end
+ local next = getnext(current)
+ if next then
+ current = next
+ else
+ local sd = (state == "r" and stopdir("TRT")) or (state == "l" and stopdir("TLT"))
+ if sd then
+ if id == glue_code and getsubtype(current) == parfillskip_code then
+ head = insert_node_before(head,current,sd)
+ else
+ head = insert_node_after(head,current,sd)
+ end
+ end
+ break
+ end
+ end
+
+ return tonode(head), done
+
+end
+
+directions.installhandler(interfaces.variables.default,process)
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-dig.lua
index c753a03520a..09c2f64eeb7 100644
--- a/Master/texmf-dist/tex/context/base/typo-dig.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dig.lua
@@ -29,8 +29,11 @@ local getfont = nuts.getfont
local getchar = nuts.getchar
local getid = nuts.getid
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getattr = nuts.getattr
+
+local setlink = nuts.setlink
+local setnext = nuts.setnext
+local setprev = nuts.setprev
local setattr = nuts.setattr
local hpack_node = nuts.hpack
@@ -82,16 +85,14 @@ function nodes.aligned(head,start,stop,width,how)
end
local prv = getprev(start)
local nxt = getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
+ setprev(start)
+ setnext(stop)
local packed = hpack_node(start,width,"exactly") -- no directional mess here, just lr
if prv then
- setfield(prv,"next",packed)
- setfield(packed,"prev",prv)
+ setlink(prv,packed)
end
if nxt then
- setfield(nxt,"prev",packed)
- setfield(packed,"next",nxt)
+ setlink(packed,nxt)
end
if getprev(packed) then
return head, packed
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-dig.mkiv
index aa610b3c943..aa610b3c943 100644
--- a/Master/texmf-dist/tex/context/base/typo-dig.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dig.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-dir.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-dir.lua
index 482b7114d63..482b7114d63 100644
--- a/Master/texmf-dist/tex/context/base/typo-dir.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dir.lua
diff --git a/Master/texmf-dist/tex/context/base/typo-dir.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-dir.mkiv
index f9b4ecb976c..c5fd6fa4184 100644
--- a/Master/texmf-dist/tex/context/base/typo-dir.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dir.mkiv
@@ -22,6 +22,7 @@
\registerctxluafile{typo-dha}{1.001}
\registerctxluafile{typo-dua}{1.001}
\registerctxluafile{typo-dub}{1.001}
+\registerctxluafile{typo-duc}{1.001}
\definesystemattribute[directions][public]
@@ -53,7 +54,7 @@
% \setupdirections[bidi=global,method=two]
% \setupdirections[bidi=global,method=two,fences=no]
-% maybee use chardefs
+% maybe use chardefs
\def\typo_dir_get_mode
{\def\currentbidimode{\clf_getbidimode
diff --git a/Master/texmf-dist/tex/context/base/typo-drp.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-drp.lua
index 4bbf0b8e989..bddcc008e01 100644
--- a/Master/texmf-dist/tex/context/base/typo-drp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-drp.lua
@@ -9,6 +9,8 @@ if not modules then modules = { } end modules ['typo-drp'] = {
-- This ons is sensitive for order (e.g. when combined with first line
-- processing.
+-- todo: use isglyph
+
local tonumber, type, next = tonumber, type, next
local ceil = math.ceil
local settings_to_hash = utilities.parsers.settings_to_hash
@@ -32,14 +34,18 @@ local getchar = nuts.getchar
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getattr = nuts.getattr
+
+local setfield = nuts.setfield
local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setprev = nuts.setprev
+local setnext = nuts.setnext
+local setchar = nuts.setchar
local hpack_nodes = nuts.hpack
local nodecodes = nodes.nodecodes
-local whatsitcodes = nodes.whatsitcodes
local nodepool = nuts.pool
local new_kern = nodepool.kern
@@ -66,8 +72,7 @@ local glyph_code = nodecodes.glyph
local hlist_code = nodecodes.hlist
local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
-local whatsit_code = nodecodes.whatsit
-local localpar_code = whatsitcodes.localpar
+local localpar_code = nodecodes.localpar
local actions = { }
initials.actions = actions
@@ -127,102 +132,10 @@ interfaces.implement {
-- todo: prevent linebreak .. but normally a initial ends up at the top of
-- a page so this has a low priority
--- actions[v_default] = function(head,setting)
--- local done = false
--- if getid(head) == whatsit_code and getsubtype(head) == localpar_code then
--- -- begin of par
--- local first = getnext(head)
--- -- parbox .. needs to be set at 0
--- if first and getid(first) == hlist_code then
--- first = getnext(first)
--- end
--- -- we need to skip over kerns and glues (signals)
--- while first and getid(first) ~= glyph_code do
--- first = getnext(first)
--- end
--- if first and getid(first) == glyph_code then
--- local char = getchar(first)
--- local prev = getprev(first)
--- local next = getnext(first)
--- -- if getid(prev) == hlist_code then
--- -- -- set the width to 0
--- -- end
--- if next and getid(next) == kern_code then
--- setfield(next,"kern",0)
--- end
--- if setting.font then
--- setfield(first,"font",setting.font)
--- end
--- if setting.dynamic > 0 then
--- setattr(first,0,setting.dynamic)
--- end
--- -- can be a helper
--- local ma = setting.ma or 0
--- local ca = setting.ca
--- local ta = setting.ta
--- if ca and ca > 0 then
--- setattr(first,a_colorspace,ma == 0 and 1 or ma)
--- setattr(first,a_color,ca)
--- end
--- if ta and ta > 0 then
--- setattr(first,a_transparency,ta)
--- end
--- --
--- local width = getfield(first,"width")
--- local height = getfield(first,"height")
--- local depth = getfield(first,"depth")
--- local distance = setting.distance or 0
--- local voffset = setting.voffset or 0
--- local hoffset = setting.hoffset or 0
--- local parindent = tex.parindent
--- local baseline = texget("baselineskip").width
--- local lines = tonumber(setting.n) or 0
--- --
--- setfield(first,"xoffset",- width - hoffset - distance - parindent)
--- setfield(first,"yoffset",- voffset) -- no longer - height here
--- -- 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).
--- setfield(first,"prev",nil)
--- setfield(first,"next",nil)
--- local h = hpack_nodes(first)
--- setfield(h,"width",0)
--- setfield(h,"height",0)
--- setfield(h,"depth",0)
--- setfield(prev,"next",h)
--- setfield(next,"prev",h)
--- setfield(h,"next",next)
--- setfield(h,"prev",prev)
--- first = h
--- -- end of packaging
--- if setting.location == v_margin then
--- -- okay
--- else
--- if lines == 0 then -- safeguard, not too precise
--- lines = ceil((height+voffset) / baseline)
--- end
--- -- We cannot set parshape yet ... when we can I'll add a slope
--- -- option (positive and negative, in emwidth).
--- local hangafter = - lines
--- local hangindent = width + distance + parindent
--- if trace_initials then
--- report_initials("setting hangafter to %i and hangindent to %p",hangafter,hangindent)
--- end
--- tex.hangafter = hangafter
--- tex.hangindent = hangindent
--- if parindent ~= 0 then
--- insert_after(first,first,new_kern(-parindent))
--- end
--- end
--- done = true
--- end
--- end
--- return head, done
--- end
-
actions[v_default] = function(head,setting)
local done = false
- if getid(head) == whatsit_code and getsubtype(head) == localpar_code then
+ local id = getid(head)
+ if id == localpar_code then
-- begin of par
local first = getnext(head)
local indent = false
@@ -350,7 +263,7 @@ actions[v_default] = function(head,setting)
-- g.subtype = 0
-- nodes.handlers.characters(g)
-- nodes.handlers.protectglyphs(g)
--- setfield(current,"char",g.char)
+-- setchar(current,g.char)
-- nodes.free(g)
-- can be a helper
@@ -375,8 +288,8 @@ actions[v_default] = function(head,setting)
local prev = getprev(first)
local next = getnext(last)
--
- setfield(first,"prev",nil)
- setfield(last,"next",nil)
+ setprev(first)
+ setnext(last)
local dropper = hpack_nodes(first)
local width = getfield(dropper,"width")
local height = getfield(dropper,"height")
@@ -385,12 +298,8 @@ actions[v_default] = function(head,setting)
setfield(dropper,"height",0)
setfield(dropper,"depth",0)
--
- setfield(prev,"next",dropper)
- if next then
- setfield(next,"prev",dropper)
- end
- setfield(dropper,"next",next)
- setfield(dropper,"prev",prev)
+ setlink(prev,dropper)
+ setlink(dropper,next)
--
if next then
local current = next
diff --git a/Master/texmf-dist/tex/context/base/typo-drp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-drp.mkiv
index 2520c3bfdef..2520c3bfdef 100644
--- a/Master/texmf-dist/tex/context/base/typo-drp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-drp.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-dua.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-dua.lua
index 1e9b325a623..f697ac5620a 100644
--- a/Master/texmf-dist/tex/context/base/typo-dua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dua.lua
@@ -72,15 +72,18 @@ local tonode = nuts.tonode
local nutstring = nuts.tostring
local getnext = nuts.getnext
-local getchar = nuts.getchar
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
+local getchar = nuts.getchar
local getfield = nuts.getfield
+local getprop = nuts.getprop
+
local setfield = nuts.setfield
+local setprop = nuts.setprop
+local setchar = nuts.setchar
local remove_node = nuts.remove
-local copy_node = nuts.copy
local insert_node_after = nuts.insert_after
local insert_node_before = nuts.insert_before
@@ -88,7 +91,6 @@ local nodepool = nuts.pool
local new_textdir = nodepool.textdir
local nodecodes = nodes.nodecodes
-local whatsitcodes = nodes.whatsitcodes
local skipcodes = nodes.skipcodes
local glyph_code = nodecodes.glyph
@@ -96,10 +98,9 @@ local glue_code = nodecodes.glue
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local math_code = nodecodes.math
-local whatsit_code = nodecodes.whatsit
-local dir_code = whatsitcodes.dir
-local localpar_code = whatsitcodes.localpar
-local parfillskip_code = skipcodes.skipcodes
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
+local parfillskip_code = skipcodes.parfillskip
----- object_replacement = 0xFFFC -- object replacement character
local maximum_stack = 60 -- probably spec but not needed
@@ -204,15 +205,34 @@ local function build_list(head) -- todo: store node pointer ... saves loop
while current do
size = size + 1
local id = getid(current)
- if id == glyph_code then
+ if getprop(current,"directions") then
+ local skip = 0
+ local last = id
+ current = getnext(current)
+ while current do
+ local id = getid(current)
+ if getprop(current,"directions") then
+ skip = skip + 1
+ last = id
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ if id == last then -- the start id
+ list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id }
+ else
+ list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id, last = last }
+ end
+ elseif id == glyph_code then
local chr = getchar(current)
local dir = directiondata[chr]
list[size] = { char = chr, direction = dir, original = dir, level = 0 }
current = getnext(current)
- elseif id == glue_code then
+ elseif id == glue_code then -- and how about kern
list[size] = { char = 0x0020, direction = "ws", original = "ws", level = 0 }
current = getnext(current)
- elseif id == whatsit_code and getsubtype(current) == dir_code then
+ elseif id == dir_code then
local dir = getfield(current,"dir")
if dir == "+TLT" then
list[size] = { char = 0x202A, direction = "lre", original = "lre", level = 0 }
@@ -240,7 +260,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
current = getnext(current)
while n do
local id = getid(current)
- if id ~= glyph_code and id ~= glue_code and not (id == whatsit_code and getsubtype(current) == dir_code) then
+ if id ~= glyph_code and id ~= glue_code and id ~= dir_code then
skip = skip + 1
last = id
current = getnext(current)
@@ -248,7 +268,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
break
end
end
- if id == last then
+ if id == last then -- the start id
list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id }
else
list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id, last = last }
@@ -302,8 +322,9 @@ local function find_run_limit_b_s_ws_on(list,start,limit)
return start
end
-local function get_baselevel(head,list,size) -- todo: skip if first is object (or pass head and test for local_par)
- if getid(head) == whatsit_code and getsubtype(head) == localpar_code then
+local function get_baselevel(head,list,size) -- todo: skip if first is object (or pass head and test for localpar)
+ local id = getid(head)
+ if id == localpar_code then
if getfield(head,"dir") == "TRT" then
return 1, "TRT", true
else
@@ -549,26 +570,47 @@ local function resolve_neutral(list,size,start,limit,sor,eor)
end
end
+-- local function resolve_implicit(list,size,start,limit,sor,eor)
+-- -- I1
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 ~= 1 then -- not odd(level)
+-- local direction = entry.direction
+-- if direction == "r" then
+-- entry.level = level + 1
+-- elseif direction == "an" or direction == "en" then
+-- entry.level = level + 2
+-- end
+-- end
+-- end
+-- -- I2
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 == 1 then -- odd(level)
+-- local direction = entry.direction
+-- if direction == "l" or direction == "en" or direction == "an" then
+-- entry.level = level + 1
+-- end
+-- end
+-- end
+-- end
+
local function resolve_implicit(list,size,start,limit,sor,eor)
- -- I1
for i=start,limit do
- local entry = list[i]
- local level = entry.level
- if level % 2 ~= 1 then -- not odd(level)
- local direction = entry.direction
+ local entry = list[i]
+ local level = entry.level
+ local direction = entry.direction
+ if level % 2 ~= 1 then -- even
+ -- I1
if direction == "r" then
entry.level = level + 1
elseif direction == "an" or direction == "en" then
entry.level = level + 2
end
- end
- end
- -- I2
- for i=start,limit do
- local entry = list[i]
- local level = entry.level
- if level % 2 == 1 then -- odd(level)
- local direction = entry.direction
+ else
+ -- I2
if direction == "l" or direction == "en" or direction == "an" then
entry.level = level + 1
end
@@ -695,14 +737,15 @@ local function apply_to_list(list,size,head,pardir)
local entry = list[index]
local begindir = entry.begindir
local enddir = entry.enddir
+ setprop(current,"directions",true)
if id == glyph_code then
local mirror = entry.mirror
if mirror then
- setfield(current,"char",mirror)
+ setchar(current,mirror)
end
if trace_directions then
local direction = entry.direction
- setcolor(current,direction,direction ~= entry.original,mirror)
+ setcolor(current,direction,false,mirror)
end
elseif id == hlist_code or id == vlist_code then
setfield(current,"dir",pardir) -- is this really needed?
@@ -710,15 +753,17 @@ local function apply_to_list(list,size,head,pardir)
if enddir and getsubtype(current) == parfillskip_code then
-- insert the last enddir before \parfillskip glue
local d = new_textdir(enddir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head = insert_node_before(head,current,d)
enddir = false
done = true
end
- elseif id == whatsit_code then
- if begindir and getsubtype(current) == localpar_code then
- -- local_par should always be the 1st node
+ elseif begindir then
+ if id == localpar_code then
+ -- localpar should always be the 1st node
local d = new_textdir(begindir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head, current = insert_node_after(head,current,d)
begindir = nil
@@ -727,6 +772,7 @@ local function apply_to_list(list,size,head,pardir)
end
if begindir then
local d = new_textdir(begindir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head = insert_node_before(head,current,d)
done = true
@@ -735,10 +781,12 @@ local function apply_to_list(list,size,head,pardir)
if skip and skip > 0 then
for i=1,skip do
current = getnext(current)
+ setprop(current,"directions",true)
end
end
if enddir then
local d = new_textdir(enddir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head, current = insert_node_after(head,current,d)
done = true
diff --git a/Master/texmf-dist/tex/context/base/typo-dub.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-dub.lua
index a1c9de75245..7ac33979935 100644
--- a/Master/texmf-dist/tex/context/base/typo-dub.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-dub.lua
@@ -60,16 +60,19 @@ local tonode = nuts.tonode
local nutstring = nuts.tostring
local getnext = nuts.getnext
-local getchar = nuts.getchar
local getid = nuts.getid
local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
+local getchar = nuts.getchar
local getattr = nuts.getattr
local getfield = nuts.getfield
+local getprop = nuts.getprop
+
local setfield = nuts.setfield
+local setprop = nuts.setprop
+local setchar = nuts.setchar
local remove_node = nuts.remove
-local copy_node = nuts.copy
local insert_node_after = nuts.insert_after
local insert_node_before = nuts.insert_before
@@ -77,7 +80,6 @@ local nodepool = nuts.pool
local new_textdir = nodepool.textdir
local nodecodes = nodes.nodecodes
-local whatsitcodes = nodes.whatsitcodes
local skipcodes = nodes.skipcodes
local glyph_code = nodecodes.glyph
@@ -85,10 +87,9 @@ local glue_code = nodecodes.glue
local hlist_code = nodecodes.hlist
local vlist_code = nodecodes.vlist
local math_code = nodecodes.math
-local whatsit_code = nodecodes.whatsit
-local dir_code = whatsitcodes.dir
-local localpar_code = whatsitcodes.localpar
-local parfillskip_code = skipcodes.skipcodes
+local dir_code = nodecodes.dir
+local localpar_code = nodecodes.localpar
+local parfillskip_code = skipcodes.parfillskip
local maximum_stack = 0xFF -- unicode: 60, will be jumped to 125, we don't care too much
@@ -109,6 +110,7 @@ local remove_controls = true directives.register("typesetters.directions.re
local trace_directions = false trackers .register("typesetters.directions.two", function(v) trace_directions = v end)
local trace_details = false trackers .register("typesetters.directions.two.details", function(v) trace_details = v end)
+local trace_list = false trackers .register("typesetters.directions.two.list", function(v) trace_list = v end)
local report_directions = logs.reporter("typesetting","directions two")
@@ -197,7 +199,7 @@ local function show_list(list,size,what)
result[i] = formatters["%-3s:%s %s (%i)"](direction,joiner,nodecodes[first],skip or 0)
end
elseif character >= 0x202A and character <= 0x202C then
- result[i] = formatters["%-3s:%s %U"](direction,joiner,character)
+ result[i] = formatters["%-3s:%s %U"](direction,joiner,character)
else
result[i] = formatters["%-3s:%s %c %U"](direction,joiner,character,character)
end
@@ -258,15 +260,34 @@ local function build_list(head) -- todo: store node pointer ... saves loop
while current do
size = size + 1
local id = getid(current)
- if id == glyph_code then
+ if getprop(current,"directions") then
+ local skip = 0
+ local last = id
+ current = getnext(current)
+ while current do
+ local id = getid(current)
+ if getprop(current,"directions") then
+ skip = skip + 1
+ last = id
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ if id == last then -- the start id
+ list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id }
+ else
+ list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id, last = last }
+ end
+ elseif id == glyph_code then
local chr = getchar(current)
local dir = directiondata[chr]
list[size] = { char = chr, direction = dir, original = dir, level = 0 }
current = getnext(current)
- elseif id == glue_code then
+ elseif id == glue_code then -- and how about kern
list[size] = { char = 0x0020, direction = "ws", original = "ws", level = 0 }
current = getnext(current)
- elseif id == whatsit_code and getsubtype(current) == dir_code then
+ elseif id == dir_code then
local dir = getfield(current,"dir")
if dir == "+TLT" then
list[size] = { char = 0x202A, direction = "lre", original = "lre", level = 0 }
@@ -294,7 +315,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
current = getnext(current)
while n do
local id = getid(current)
- if id ~= glyph_code and id ~= glue_code and not (id == whatsit_code and getsubtype(current) == dir_code) then
+ if id ~= glyph_code and id ~= glue_code and id ~= dir_code then
skip = skip + 1
last = id
current = getnext(current)
@@ -302,7 +323,7 @@ local function build_list(head) -- todo: store node pointer ... saves loop
break
end
end
- if id == last then
+ if id == last then -- the start id
list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id }
else
list[size] = { char = 0xFFFC, direction = "on", original = "on", level = 0, skip = skip, id = id, last = last }
@@ -327,7 +348,7 @@ end
-- ש ( ל [ א ] כ ) 2-8,4-6
local function resolve_fences(list,size,start,limit)
- -- N0: funny effects, not always better, so it's an options
+ -- N0: funny effects, not always better, so it's an option
local stack = { }
local top = 0
for i=start,limit do
@@ -379,8 +400,9 @@ end
-- the action
-local function get_baselevel(head,list,size) -- todo: skip if first is object (or pass head and test for local_par)
- if getid(head) == whatsit_code and getsubtype(head) == localpar_code then
+local function get_baselevel(head,list,size) -- todo: skip if first is object (or pass head and test for localpar)
+ local id = getid(head)
+ if id == localpar_code then
if getfield(head,"dir") == "TRT" then
return 1, "TRT", true
else
@@ -391,7 +413,7 @@ local function get_baselevel(head,list,size) -- todo: skip if first is object (o
for i=1,size do
local entry = list[i]
local direction = entry.direction
- if direction == "r" or direction == "al" then
+ if direction == "r" or direction == "al" then -- and an ?
return 1, "TRT", true
elseif direction == "l" then
return 0, "TLT", true
@@ -522,23 +544,50 @@ local function resolve_weak(list,size,start,limit,orderbefore,orderafter)
end
end
-- W4: make separators number
- for i=start+1,limit-1 do
- local entry = list[i]
- local direction = entry.direction
- if direction == "es" then
- if list[i-1].direction == "en" and list[i+1].direction == "en" then
- entry.direction = "en"
- end
- elseif direction == "cs" then
- local prevdirection = list[i-1].direction
- if prevdirection == "en" then
- if list[i+1].direction == "en" then
+ if true then
+ for i=start+1,limit-1 do
+ local entry = list[i]
+ local direction = entry.direction
+ if direction == "es" then
+ if list[i-1].direction == "en" and list[i+1].direction == "en" then
entry.direction = "en"
end
- elseif prevdirection == "an" and list[i+1].direction == "an" then
- entry.direction = "an"
+ elseif direction == "cs" then
+ local prevdirection = list[i-1].direction
+ if prevdirection == "en" then
+ if list[i+1].direction == "en" then
+ entry.direction = "en"
+ end
+ elseif prevdirection == "an" and list[i+1].direction == "an" then
+ entry.direction = "an"
+ end
end
end
+ else -- probably more efficient
+ local runner = start + 2
+ local before = list[start]
+ local entry = list[start + 1]
+ local after = list[runner]
+ while after do
+ local direction = entry.direction
+ if direction == "es" then
+ if before.direction == "en" and after.direction == "en" then
+ entry.direction = "en"
+ end
+ elseif direction == "cs" then
+ local prevdirection = before.direction
+ if prevdirection == "en" then
+ if after.direction == "en" then
+ entry.direction = "en"
+ end
+ elseif prevdirection == "an" and after.direction == "an" then
+ entry.direction = "an"
+ end
+ end
+ before = current
+ current = after
+ after = list[runner]
+ end
end
-- W5
local i = start
@@ -598,18 +647,21 @@ local function resolve_neutral(list,size,start,limit,orderbefore,orderafter)
for i=start,limit do
local entry = list[i]
if b_s_ws_on[entry.direction] then
+ -- this needs checking
local leading_direction, trailing_direction, resolved_direction
local runstart = i
local runlimit = runstart
- for i=runstart,limit do
- if b_s_ws_on[list[i].direction] then
- runstart = i
+-- for j=runstart,limit do
+ for j=runstart+1,limit do
+ if b_s_ws_on[list[j].direction] then
+-- runstart = j
+ runlimit = j
else
break
end
end
if runstart == start then
- leading_direction = sor
+ leading_direction = orderbefore
else
leading_direction = list[runstart-1].direction
if leading_direction == "en" or leading_direction == "an" then
@@ -629,7 +681,7 @@ local function resolve_neutral(list,size,start,limit,orderbefore,orderafter)
resolved_direction = leading_direction
else
-- N2 / does the weird period
- resolved_direction = entry.level % 2 == 1 and "r" or "l" -- direction_of_level(entry.level)
+ resolved_direction = entry.level % 2 == 1 and "r" or "l"
end
for j=runstart,runlimit do
list[j].direction = resolved_direction
@@ -640,26 +692,47 @@ local function resolve_neutral(list,size,start,limit,orderbefore,orderafter)
end
end
-local function resolve_implicit(list,size,start,limit,orderbefore,orderafter)
- -- I1
+-- local function resolve_implicit(list,size,start,limit,orderbefore,orderafter)
+-- -- I1
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 ~= 1 then -- not odd(level)
+-- local direction = entry.direction
+-- if direction == "r" then
+-- entry.level = level + 1
+-- elseif direction == "an" or direction == "en" then
+-- entry.level = level + 2
+-- end
+-- end
+-- end
+-- -- I2
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 == 1 then -- odd(level)
+-- local direction = entry.direction
+-- if direction == "l" or direction == "en" or direction == "an" then
+-- entry.level = level + 1
+-- end
+-- end
+-- end
+-- end
+
+local function resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel)
for i=start,limit do
- local entry = list[i]
- local level = entry.level
- if level % 2 ~= 1 then -- not odd(level)
- local direction = entry.direction
+ local entry = list[i]
+ local level = entry.level
+ local direction = entry.direction
+ if level % 2 ~= 1 then -- even
+ -- I1
if direction == "r" then
entry.level = level + 1
elseif direction == "an" or direction == "en" then
entry.level = level + 2
end
- end
- end
- -- I2
- for i=start,limit do
- local entry = list[i]
- local level = entry.level
- if level % 2 == 1 then -- odd(level)
- local direction = entry.direction
+ else
+ -- I2
if direction == "l" or direction == "en" or direction == "an" then
entry.level = level + 1
end
@@ -678,8 +751,8 @@ local function resolve_levels(list,size,baselevel,analyze_fences)
end
local prev_level = start == 1 and baselevel or list[start-1].level
local next_level = limit == size and baselevel or list[limit+1].level
- local orderbefore = (level > prev_level and level or prev_level) % 2 == 1 and "r" or "l" -- direction_of_level(max(level,prev_level))
- local orderafter = (level > next_level and level or next_level) % 2 == 1 and "r" or "l" -- direction_of_level(max(level,next_level))
+ local orderbefore = (level > prev_level and level or prev_level) % 2 == 1 and "r" or "l"
+ local orderafter = (level > next_level and level or next_level) % 2 == 1 and "r" or "l"
-- W1 .. W7
resolve_weak(list,size,start,limit,orderbefore,orderafter)
-- N0
@@ -689,7 +762,7 @@ local function resolve_levels(list,size,baselevel,analyze_fences)
-- N1 .. N2
resolve_neutral(list,size,start,limit,orderbefore,orderafter)
-- I1 .. I2
- resolve_implicit(list,size,start,limit,orderbefore,orderafter)
+ resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel)
start = limit
end
-- L1
@@ -795,6 +868,9 @@ local function apply_to_list(list,size,head,pardir)
local index = 1
local current = head
local done = false
+ if trace_list then
+ report_directions("start run")
+ end
while current do
if index > size then
report_directions("fatal error, size mismatch")
@@ -804,14 +880,25 @@ local function apply_to_list(list,size,head,pardir)
local entry = list[index]
local begindir = entry.begindir
local enddir = entry.enddir
+ setprop(current,"directions",true)
if id == glyph_code then
local mirror = entry.mirror
if mirror then
- setfield(current,"char",mirror)
+ setchar(current,mirror)
end
if trace_directions then
local direction = entry.direction
- setcolor(current,direction,direction ~= entry.original,mirror)
+ if trace_list then
+ local original = entry.original
+ local char = entry.char
+ local level = entry.level
+ if direction == original then
+ report_directions("%2i : %C : %s",level,char,direction)
+ else
+ report_directions("%2i : %C : %s -> %s",level,char,original,direction)
+ end
+ end
+ setcolor(current,direction,false,mirror)
end
elseif id == hlist_code or id == vlist_code then
setfield(current,"dir",pardir) -- is this really needed?
@@ -819,23 +906,27 @@ local function apply_to_list(list,size,head,pardir)
if enddir and getsubtype(current) == parfillskip_code then
-- insert the last enddir before \parfillskip glue
local d = new_textdir(enddir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head = insert_node_before(head,current,d)
enddir = false
done = true
end
- elseif id == whatsit_code then
- if begindir and getsubtype(current) == localpar_code then
- -- local_par should always be the 1st node
+ elseif begindir then
+ if id == localpar_code then
+ -- localpar should always be the 1st node
local d = new_textdir(begindir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head, current = insert_node_after(head,current,d)
begindir = nil
done = true
end
+ else
end
if begindir then
local d = new_textdir(begindir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head = insert_node_before(head,current,d)
done = true
@@ -844,10 +935,12 @@ local function apply_to_list(list,size,head,pardir)
if skip and skip > 0 then
for i=1,skip do
current = getnext(current)
+ setprop(current,"directions",true)
end
end
if enddir then
local d = new_textdir(enddir)
+ setprop(d,"directions",true)
-- setfield(d,"attr",getfield(current,"attr"))
head, current = insert_node_after(head,current,d)
done = true
@@ -863,6 +956,9 @@ local function apply_to_list(list,size,head,pardir)
end
index = index + 1
end
+ if trace_list then
+ report_directions("stop run")
+ end
return head, done
end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/typo-duc.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-duc.lua
new file mode 100644
index 00000000000..fce40932fcb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-duc.lua
@@ -0,0 +1,1025 @@
+if not modules then modules = { } end modules ['typo-duc'] = {
+ version = 1.001,
+ comment = "companion to typo-dir.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+ comment = "Unicode bidi (sort of) variant b",
+}
+
+-- This is a follow up on typo-uba which itself is a follow up on t-bidi by Khaled Hosny which
+-- in turn is based on minibidi.c from Arabeyes. This is a further optimizations, as well as
+-- an update on some recent unicode bidi developments. There is (and will) also be more control
+-- added. As a consequence this module is somewhat slower than its precursor which itself is
+-- slower than the one-pass bidi handler. This is also a playground and I might add some plugin
+-- support. However, in the meantime performance got a bit better and this third variant is again
+-- some 10% faster than the two variant.
+
+-- todo (cf html):
+--
+-- normal The element does not offer a additional level of embedding with respect to the bidirectional algorithm. For inline elements implicit reordering works across element boundaries.
+-- embed If the element is inline, this value opens an additional level of embedding with respect to the bidirectional algorithm. The direction of this embedding level is given by the direction property.
+-- bidi-override For inline elements this creates an override. For block container elements this creates an override for inline-level descendants not within another block container element. This means that inside the element, reordering is strictly in sequence according to the direction property; the implicit part of the bidirectional algorithm is ignored.
+-- isolate This keyword indicates that the element's container directionality should be calculated without considering the content of this element. The element is therefore isolated from its siblings. When applying its bidirectional-resolution algorithm, its container element treats it as one or several U+FFFC Object Replacement Character, i.e. like an image.
+-- isolate-override This keyword applies the isolation behavior of the isolate keyword to the surrounding content and the override behavior o f the bidi-override keyword to the inner content.
+-- plaintext This keyword makes the elements directionality calculated without considering its parent bidirectional state or the value of the direction property. The directionality is calculated using the P2 and P3 rules of the Unicode Bidirectional Algorithm.
+-- This value allows to display data which has already formatted using a tool following the Unicode Bidirectional Algorithm.
+--
+-- todo: check for introduced errors
+-- todo: reuse list, we have size, so we can just change values (and auto allocate when not there)
+-- todo: reuse the stack
+-- todo: no need for a max check
+-- todo: collapse bound similar ranges (not ok yet)
+-- todo: combine some sweeps
+-- todo: removing is not needed when we inject at the same spot (only chnage the dir property)
+-- todo: isolated runs (isolating runs are similar to bidi=local in the basic analyzer)
+
+-- todo: check unicode addenda (from the draft):
+--
+-- Added support for canonical equivalents in BD16.
+-- Changed logic in N0 to not check forwards for context in the case of enclosed text opposite the embedding direction.
+-- Major extension of the algorithm to allow for the implementation of directional isolates and the introduction of new isolate-related values to the Bidi_Class property.
+-- Adds BD8, BD9, BD10, BD11, BD12, BD13, BD14, BD15, and BD16, Sections 2.4 and 2.5, and Rules X5a, X5b, X5c and X6a.
+-- Extensively revises Section 3.3.2, Explicit Levels and Directions and its existing X rules to formalize the algorithm for matching a PDF with the embedding or override initiator whose scope it terminates.
+-- Moves Rules X9 and X10 into a separate new Section 3.3.3, Preparations for Implicit Processing.
+-- Modifies Rule X10 to make the isolating run sequence the unit to which subsequent rules are applied.
+-- Modifies Rule W1 to change an NSM preceded by an isolate initiator or PDI into ON.
+-- Adds Rule N0 and makes other changes to Section 3.3.5, Resolving Neutral and Isolate Formatting Types to resolve bracket pairs to the same level.
+
+local insert, remove, unpack, concat = table.insert, table.remove, table.unpack, table.concat
+local utfchar = utf.char
+local setmetatable = setmetatable
+local formatters = string.formatters
+
+local directiondata = characters.directions
+local mirrordata = characters.mirrors
+local textclassdata = characters.textclasses
+
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+local tonode = nuts.tonode
+local nutstring = nuts.tostring
+
+local getnext = nuts.getnext
+local getid = nuts.getid
+local getsubtype = nuts.getsubtype
+local getchar = nuts.getchar
+local getlist = nuts.getlist
+local getattr = nuts.getattr
+local getfield = nuts.getfield
+local getprop = nuts.getprop
+
+local setfield = nuts.setfield
+local setprop = nuts.setprop
+local setchar = nuts.setchar
+
+local properties = nodes.properties
+
+local remove_node = nuts.remove
+local insert_node_after = nuts.insert_after
+local insert_node_before = nuts.insert_before
+
+local nodepool = nuts.pool
+local new_textdir = nodepool.textdir
+
+local nodecodes = nodes.nodecodes
+local skipcodes = nodes.skipcodes
+
+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 parfillskip_code = skipcodes.parfillskip
+
+local maximum_stack = 0xFF -- unicode: 60, will be jumped to 125, we don't care too much
+
+local directions = typesetters.directions
+local setcolor = directions.setcolor
+local getfences = directions.getfences
+
+local a_directions = attributes.private('directions')
+local a_textbidi = attributes.private('textbidi')
+----- a_state = attributes.private('state')
+
+----- s_isol = fonts.analyzers.states.isol
+
+----- current[a_state] = s_isol -- maybe better have a special bidi attr value -> override (9) -> todo
+
+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 trace_directions = false trackers .register("typesetters.directions.two", function(v) trace_directions = v end)
+local trace_details = false trackers .register("typesetters.directions.two.details", function(v) trace_details = v end)
+local trace_list = false trackers .register("typesetters.directions.two.list", function(v) trace_list = v end)
+
+local report_directions = logs.reporter("typesetting","directions two")
+
+-- strong (old):
+--
+-- l : left to right
+-- r : right to left
+-- lro : left to right override
+-- rlo : left to left override
+-- lre : left to right embedding
+-- rle : left to left embedding
+-- al : right to legt arabic (esp punctuation issues)
+
+-- weak:
+--
+-- en : english number
+-- es : english number separator
+-- et : english number terminator
+-- an : arabic number
+-- cs : common number separator
+-- nsm : nonspacing mark
+-- bn : boundary neutral
+
+-- neutral:
+--
+-- b : paragraph separator
+-- s : segment separator
+-- ws : whitespace
+-- on : other neutrals
+
+-- interesting: this is indeed better (and more what we expect i.e. we already use this split
+-- in the old original (also these isolates)
+
+-- strong (new):
+--
+-- l : left to right
+-- r : right to left
+-- al : right to left arabic (esp punctuation issues)
+
+-- explicit: (new)
+--
+-- lro : left to right override
+-- rlo : left to left override
+-- lre : left to right embedding
+-- rle : left to left embedding
+-- pdf : pop dir format
+-- lri : left to right isolate
+-- rli : left to left isolate
+-- fsi : first string isolate
+-- pdi : pop directional isolate
+
+local whitespace = {
+ lre = true,
+ rle = true,
+ lro = true,
+ rlo = true,
+ pdf = true,
+ bn = true,
+ ws = true,
+}
+
+local b_s_ws_on = {
+ b = true,
+ s = true,
+ ws = true,
+ on = true
+}
+
+-- tracing
+
+local function show_list(list,size,what)
+ local what = what or "direction"
+ local joiner = utfchar(0x200C)
+ local result = { }
+ for i=1,size do
+ local entry = list[i]
+ local character = entry.char
+ local direction = entry[what]
+ if character == 0xFFFC then
+ local first = entry.id
+ local last = entry.last
+ local skip = entry.skip
+ if last then
+ result[i] = formatters["%-3s:%s %s..%s (%i)"](direction,joiner,nodecodes[first],nodecodes[last],skip or 0)
+ else
+ result[i] = formatters["%-3s:%s %s (%i)"](direction,joiner,nodecodes[first],skip or 0)
+ end
+ elseif character >= 0x202A and character <= 0x202C then
+ result[i] = formatters["%-3s:%s %U"](direction,joiner,character)
+ else
+ result[i] = formatters["%-3s:%s %c %U"](direction,joiner,character,character)
+ end
+ end
+ return concat(result,joiner .. " | " .. joiner)
+end
+
+-- preparation
+
+local function show_done(list,size)
+ local joiner = utfchar(0x200C)
+ local result = { }
+ for i=1,size do
+ local entry = list[i]
+ local character = entry.char
+ local begindir = entry.begindir
+ local enddir = entry.enddir
+ if begindir then
+ result[#result+1] = formatters["<%s>"](begindir)
+ end
+ if entry.remove then
+ -- continue
+ elseif character == 0xFFFC then
+ result[#result+1] = formatters["<%s>"]("?")
+ elseif character == 0x0020 then
+ result[#result+1] = formatters["<%s>"](" ")
+ elseif character >= 0x202A and character <= 0x202C then
+ result[#result+1] = formatters["<%s>"](entry.original)
+ else
+ result[#result+1] = utfchar(character)
+ end
+ if enddir then
+ result[#result+1] = formatters["<%s>"](enddir)
+ end
+ end
+ return concat(result,joiner)
+end
+
+-- keeping the list and overwriting doesn't save much runtime, only a few percent
+-- char is only used for mirror, so in fact we can as well only store it for
+-- glyphs only
+
+-- tracking what direction is used and skipping tests is not faster (extra kind of
+-- compensates gain)
+
+local mt_space = { __index = { char = 0x0020, direction = "ws", original = "ws", level = 0 } }
+local mt_lre = { __index = { char = 0x202A, direction = "lre", original = "lre", level = 0 } }
+local mt_lre = { __index = { char = 0x202B, direction = "rle", original = "rle", level = 0 } }
+local mt_pdf = { __index = { char = 0x202C, direction = "pdf", original = "pdf", level = 0 } }
+local mt_object = { __index = { char = 0xFFFC, direction = "on", original = "on", level = 0 } }
+
+local function build_list(head) -- todo: store node pointer ... saves loop
+ -- P1
+ local current = head
+ local list = { }
+ local size = 0
+ while current do
+ size = size + 1
+ local id = getid(current)
+ local p = properties[current]
+ local t
+ if p and p.directions then
+ local skip = 0
+ local last = id
+ current = getnext(current)
+ while current do
+ local id = getid(current)
+ if p and p.directions then
+ skip = skip + 1
+ last = id
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ if id == last then -- the start id
+ t = { skip = skip, id = id }
+ else
+ t = { skip = skip, id = id, last = last }
+ end
+ setmetatable(t,mt_object)
+ elseif id == glyph_code then
+ local chr = getchar(current)
+ local dir = directiondata[chr]
+ t = { char = chr, direction = dir, original = dir, level = 0 }
+ current = getnext(current)
+ -- if not list[dir] then list[dir] = true end -- not faster when we check for usage
+ elseif id == glue_code then -- and how about kern
+ t = { }
+ setmetatable(t,mt_space)
+ current = getnext(current)
+ elseif id == dir_code then
+ local dir = getfield(current,"dir")
+ if dir == "+TLT" then
+ t = { }
+ setmetatable(t,mt_lre)
+ elseif dir == "+TRT" then
+ t = { }
+ setmetatable(t,mt_rle)
+ elseif dir == "-TLT" or dir == "-TRT" then
+ t = { }
+ setmetatable(t,mt_pdf)
+ else
+ t = { id = id }
+ setmetatable(t,mt_object)
+ end
+ current = getnext(current)
+ elseif id == math_code then
+ local skip = 0
+ current = getnext(current)
+ while getid(current) ~= math_code do
+ skip = skip + 1
+ current = getnext(current)
+ end
+ skip = skip + 1
+ current = getnext(current)
+ t = { id = id, skip = skip }
+ setmetatable(t,mt_object)
+ else
+ local skip = 0
+ local last = id
+ current = getnext(current)
+ while n do
+ local id = getid(current)
+ if id ~= glyph_code and id ~= glue_code and id ~= dir_code then
+ skip = skip + 1
+ last = id
+ current = getnext(current)
+ else
+ break
+ end
+ end
+ if skip == 0 then
+ t = { id = id }
+ elseif id == last then -- the start id
+ t = { id = id, skip = skip }
+ else
+ t = { id = id, skip = skip, last = last }
+ end
+ setmetatable(t,mt_object)
+ end
+ list[size] = t
+ end
+ return list, size
+end
+
+-- new
+
+-- we could support ( ] and [ ) and such ...
+
+-- ש ) ל ( א 0-0
+-- ש ( ל ] א 0-0
+-- ש ( ל ) א 2-4
+-- ש ( ל [ א ) כ ] 2-6
+-- ש ( ל ] א ) כ 2-6
+-- ש ( ל ) א ) כ 2-4
+-- ש ( ל ( א ) כ 4-6
+-- ש ( ל ( א ) כ ) 2-8,4-6
+-- ש ( ל [ א ] כ ) 2-8,4-6
+
+local function resolve_fences(list,size,start,limit)
+ -- N0: funny effects, not always better, so it's an option
+ local stack = { }
+ local top = 0
+ for i=start,limit do
+ local entry = list[i]
+ if entry.direction == "on" then
+ local char = entry.char
+ local mirror = mirrordata[char]
+ if mirror then
+ local class = textclassdata[char]
+ entry.mirror = mirror
+ entry.class = class
+ if class == "open" then
+ top = top + 1
+ stack[top] = { mirror, i, false }
+ elseif top == 0 then
+ -- skip
+ elseif class == "close" then
+ while top > 0 do
+ local s = stack[top]
+ if s[1] == char then
+ local open = s[2]
+ local close = i
+ list[open ].paired = close
+ list[close].paired = open
+ break
+ else
+ -- do we mirror or not
+ end
+ top = top - 1
+ end
+ end
+ end
+ end
+ end
+end
+
+-- local function test_fences(str)
+-- local list = { }
+-- for s in string.gmatch(str,".") do
+-- local b = utf.byte(s)
+-- list[#list+1] = { c = s, char = b, direction = directiondata[b] }
+-- end
+-- resolve_fences(list,#list,1,#size)
+-- inspect(list)
+-- end
+--
+-- test_fences("a(b)c(d)e(f(g)h)i")
+-- test_fences("a(b[c)d]")
+
+-- the action
+
+local function get_baselevel(head,list,size) -- todo: skip if first is object (or pass head and test for localpar)
+ local id = getid(head)
+ if id == localpar_code then
+ if getfield(head,"dir") == "TRT" then
+ return 1, "TRT", true
+ else
+ return 0, "TLT", true
+ end
+ else
+ -- P2, P3
+ for i=1,size do
+ local entry = list[i]
+ local direction = entry.direction
+ if direction == "r" or direction == "al" then -- and an ?
+ return 1, "TRT", true
+ elseif direction == "l" then
+ return 0, "TLT", true
+ end
+ end
+ return 0, "TLT", false
+ end
+end
+
+local function resolve_explicit(list,size,baselevel)
+-- if list.rle or list.lre or list.rlo or list.lro then
+ -- X1
+ local level = baselevel
+ local override = "on"
+ local stack = { }
+ local nofstack = 0
+ for i=1,size do
+ local entry = list[i]
+ local direction = entry.direction
+ -- X2
+ if direction == "rle" then
+ if nofstack < maximum_stack then
+ nofstack = nofstack + 1
+ stack[nofstack] = { level, override }
+ level = level + (level % 2 == 1 and 2 or 1) -- least_greater_odd(level)
+ override = "on"
+ entry.level = level
+ entry.direction = "bn"
+ entry.remove = true
+ elseif trace_directions then
+ report_directions("stack overflow at position %a with direction %a",i,direction)
+ end
+ -- X3
+ elseif direction == "lre" then
+ if nofstack < maximum_stack then
+ nofstack = nofstack + 1
+ stack[nofstack] = { level, override }
+ level = level + (level % 2 == 1 and 1 or 2) -- least_greater_even(level)
+ override = "on"
+ entry.level = level
+ entry.direction = "bn"
+ entry.remove = true
+ elseif trace_directions then
+ report_directions("stack overflow at position %a with direction %a",i,direction)
+ end
+ -- X4
+ elseif direction == "rlo" then
+ if nofstack < maximum_stack then
+ nofstack = nofstack + 1
+ stack[nofstack] = { level, override }
+ level = level + (level % 2 == 1 and 2 or 1) -- least_greater_odd(level)
+ override = "r"
+ entry.level = level
+ entry.direction = "bn"
+ entry.remove = true
+ elseif trace_directions then
+ report_directions("stack overflow at position %a with direction %a",i,direction)
+ end
+ -- X5
+ elseif direction == "lro" then
+ if nofstack < maximum_stack then
+ nofstack = nofstack + 1
+ stack[nofstack] = { level, override }
+ level = level + (level % 2 == 1 and 1 or 2) -- least_greater_even(level)
+ override = "l"
+ entry.level = level
+ entry.direction = "bn"
+ entry.remove = true
+ elseif trace_directions then
+ report_directions("stack overflow at position %a with direction %a",i,direction)
+ end
+ -- X7
+ elseif direction == "pdf" then
+ if nofstack < maximum_stack then
+ local stacktop = stack[nofstack]
+ nofstack = nofstack - 1
+ level = stacktop[1]
+ override = stacktop[2]
+ entry.level = level
+ entry.direction = "bn"
+ entry.remove = true
+ elseif trace_directions then
+ report_directions("stack overflow at position %a with direction %a",i,direction)
+ end
+ -- X6
+ else
+ entry.level = level
+ if override ~= "on" then
+ entry.direction = override
+ end
+ end
+ end
+-- else
+-- for i=1,size do
+-- list[i].level = baselevel
+-- end
+-- end
+ -- X8 (reset states and overrides after paragraph)
+end
+
+local function resolve_weak(list,size,start,limit,orderbefore,orderafter)
+ -- W1: non spacing marks get the direction of the previous character
+-- if list.nsm then
+ for i=start,limit do
+ local entry = list[i]
+ if entry.direction == "nsm" then
+ if i == start then
+ entry.direction = orderbefore
+ else
+ entry.direction = list[i-1].direction
+ end
+ end
+ end
+-- end
+ -- W2: mess with numbers and arabic
+-- if list.en then
+ for i=start,limit do
+ local entry = list[i]
+ if entry.direction == "en" then
+ for j=i-1,start,-1 do
+ local prev = list[j]
+ local direction = prev.direction
+ if direction == "al" then
+ entry.direction = "an"
+ break
+ elseif direction == "r" or direction == "l" then
+ break
+ end
+ end
+ end
+ end
+-- end
+ -- W3
+-- if list.al then
+ for i=start,limit do
+ local entry = list[i]
+ if entry.direction == "al" then
+ entry.direction = "r"
+ end
+ end
+-- end
+ -- W4: make separators number
+-- if list.es or list.cs then
+ -- skip
+ if false then
+ for i=start+1,limit-1 do
+ local entry = list[i]
+ local direction = entry.direction
+ if direction == "es" then
+ if list[i-1].direction == "en" and list[i+1].direction == "en" then
+ entry.direction = "en"
+ end
+ elseif direction == "cs" then
+ local prevdirection = list[i-1].direction
+ if prevdirection == "en" then
+ if list[i+1].direction == "en" then
+ entry.direction = "en"
+ end
+ elseif prevdirection == "an" and list[i+1].direction == "an" then
+ entry.direction = "an"
+ end
+ end
+ end
+ else -- only more efficient when we have es/cs
+ local runner = start + 2
+ local before = list[start]
+ local entry = list[start + 1]
+ local after = list[runner]
+ while after do
+ local direction = entry.direction
+ if direction == "es" then
+ if before.direction == "en" and after.direction == "en" then
+ entry.direction = "en"
+ end
+ elseif direction == "cs" then
+ local prevdirection = before.direction
+ if prevdirection == "en" then
+ if after.direction == "en" then
+ entry.direction = "en"
+ end
+ elseif prevdirection == "an" and after.direction == "an" then
+ entry.direction = "an"
+ end
+ end
+ before = current
+ current = after
+ after = list[runner]
+ runner = runner + 1
+ end
+ end
+-- end
+ -- W5
+-- if list.et then
+ local i = start
+ while i <= limit do
+ if list[i].direction == "et" then
+ local runstart = i
+ local runlimit = runstart
+ for i=runstart,limit do
+ if list[i].direction == "et" then
+ runlimit = i
+ else
+ break
+ end
+ end
+ local rundirection = runstart == start and sor or list[runstart-1].direction
+ if rundirection ~= "en" then
+ rundirection = runlimit == limit and orderafter or list[runlimit+1].direction
+ end
+ if rundirection == "en" then
+ for j=runstart,runlimit do
+ list[j].direction = "en"
+ end
+ end
+ i = runlimit
+ end
+ i = i + 1
+ end
+-- end
+ -- W6
+-- if list.es or list.cs or list.et then
+ for i=start,limit do
+ local entry = list[i]
+ local direction = entry.direction
+ if direction == "es" or direction == "et" or direction == "cs" then
+ entry.direction = "on"
+ end
+ end
+-- end
+ -- W7
+ for i=start,limit do
+ local entry = list[i]
+ if entry.direction == "en" then
+ local prev_strong = orderbefore
+ for j=i-1,start,-1 do
+ local direction = list[j].direction
+ if direction == "l" or direction == "r" then
+ prev_strong = direction
+ break
+ end
+ end
+ if prev_strong == "l" then
+ entry.direction = "l"
+ end
+ end
+ end
+end
+
+local function resolve_neutral(list,size,start,limit,orderbefore,orderafter)
+ -- N1, N2
+ for i=start,limit do
+ local entry = list[i]
+ if b_s_ws_on[entry.direction] then
+ -- this needs checking
+ local leading_direction, trailing_direction, resolved_direction
+ local runstart = i
+ local runlimit = runstart
+-- for j=runstart,limit do
+ for j=runstart+1,limit do
+ if b_s_ws_on[list[j].direction] then
+-- runstart = j
+ runlimit = j
+ else
+ break
+ end
+ end
+ if runstart == start then
+ leading_direction = orderbefore
+ else
+ leading_direction = list[runstart-1].direction
+ if leading_direction == "en" or leading_direction == "an" then
+ leading_direction = "r"
+ end
+ end
+ if runlimit == limit then
+ trailing_direction = orderafter
+ else
+ trailing_direction = list[runlimit+1].direction
+ if trailing_direction == "en" or trailing_direction == "an" then
+ trailing_direction = "r"
+ end
+ end
+ if leading_direction == trailing_direction then
+ -- N1
+ resolved_direction = leading_direction
+ else
+ -- N2 / does the weird period
+ resolved_direction = entry.level % 2 == 1 and "r" or "l"
+ end
+ for j=runstart,runlimit do
+ list[j].direction = resolved_direction
+ end
+ i = runlimit
+ end
+ i = i + 1
+ end
+end
+
+-- local function resolve_implicit(list,size,start,limit,orderbefore,orderafter)
+-- -- I1
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 ~= 1 then -- not odd(level)
+-- local direction = entry.direction
+-- if direction == "r" then
+-- entry.level = level + 1
+-- elseif direction == "an" or direction == "en" then
+-- entry.level = level + 2
+-- end
+-- end
+-- end
+-- -- I2
+-- for i=start,limit do
+-- local entry = list[i]
+-- local level = entry.level
+-- if level % 2 == 1 then -- odd(level)
+-- local direction = entry.direction
+-- if direction == "l" or direction == "en" or direction == "an" then
+-- entry.level = level + 1
+-- end
+-- end
+-- end
+-- end
+
+local function resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel)
+ for i=start,limit do
+ local entry = list[i]
+ local level = entry.level
+ local direction = entry.direction
+ if level % 2 ~= 1 then -- even
+ -- I1
+ if direction == "r" then
+ entry.level = level + 1
+ elseif direction == "an" or direction == "en" then
+ entry.level = level + 2
+ end
+ else
+ -- I2
+ if direction == "l" or direction == "en" or direction == "an" then
+ entry.level = level + 1
+ end
+ end
+ end
+end
+
+local function resolve_levels(list,size,baselevel,analyze_fences)
+ -- X10
+ local start = 1
+ while start < size do
+ local level = list[start].level
+ local limit = start + 1
+ while limit < size and list[limit].level == level do
+ limit = limit + 1
+ end
+ local prev_level = start == 1 and baselevel or list[start-1].level
+ local next_level = limit == size and baselevel or list[limit+1].level
+ local orderbefore = (level > prev_level and level or prev_level) % 2 == 1 and "r" or "l"
+ local orderafter = (level > next_level and level or next_level) % 2 == 1 and "r" or "l"
+ -- W1 .. W7
+ resolve_weak(list,size,start,limit,orderbefore,orderafter)
+ -- N0
+ if analyze_fences then
+ resolve_fences(list,size,start,limit)
+ end
+ -- N1 .. N2
+ resolve_neutral(list,size,start,limit,orderbefore,orderafter)
+ -- I1 .. I2
+ resolve_implicit(list,size,start,limit,orderbefore,orderafter,baselevel)
+ start = limit
+ end
+ -- L1
+ for i=1,size do
+ local entry = list[i]
+ local direction = entry.original
+ -- (1)
+ if direction == "s" or direction == "b" then
+ entry.level = baselevel
+ -- (2)
+ for j=i-1,1,-1 do
+ local entry = list[j]
+ if whitespace[entry.original] then
+ entry.level = baselevel
+ else
+ break
+ end
+ end
+ end
+ end
+ -- (3)
+ for i=size,1,-1 do
+ local entry = list[i]
+ if whitespace[entry.original] then
+ entry.level = baselevel
+ else
+ break
+ end
+ end
+ -- L4
+ if analyze_fences then
+ for i=1,size do
+ local entry = list[i]
+ if entry.level % 2 == 1 then -- odd(entry.level)
+ if entry.mirror and not entry.paired then
+ entry.mirror = false
+ end
+ -- okay
+ elseif entry.mirror then
+ entry.mirror = false
+ end
+ end
+ else
+ for i=1,size do
+ local entry = list[i]
+ if entry.level % 2 == 1 then -- odd(entry.level)
+ local mirror = mirrordata[entry.char]
+ if mirror then
+ entry.mirror = mirror
+ end
+ end
+ end
+ end
+end
+
+local function insert_dir_points(list,size)
+ -- L2, but no actual reversion is done, we simply annotate where
+ -- begindir/endddir node will be inserted.
+ local maxlevel = 0
+ local finaldir = false
+ for i=1,size do
+ local level = list[i].level
+ if level > maxlevel then
+ maxlevel = level
+ end
+ end
+ for level=0,maxlevel do
+ local started = false
+ local begindir = nil
+ local enddir = nil
+ if level % 2 == 1 then
+ begindir = "+TRT"
+ enddir = "-TRT"
+ else
+ begindir = "+TLT"
+ enddir = "-TLT"
+ end
+ for i=1,size do
+ local entry = list[i]
+ if entry.level >= level then
+ if not started then
+ entry.begindir = begindir
+ started = true
+ end
+ else
+ if started then
+ list[i-1].enddir = enddir
+ started = false
+ end
+ end
+ end
+ -- make sure to close the run at end of line
+ if started then
+ finaldir = enddir
+ end
+ end
+ if finaldir then
+ list[size].enddir = finaldir
+ end
+end
+
+local function apply_to_list(list,size,head,pardir)
+ local index = 1
+ local current = head
+ local done = false
+ if trace_list then
+ report_directions("start run")
+ end
+ while current do
+ if index > size then
+ report_directions("fatal error, size mismatch")
+ break
+ end
+ local id = getid(current)
+ local entry = list[index]
+ local begindir = entry.begindir
+ local enddir = entry.enddir
+ local p = properties[current] if p then p.directions = true else properties[current] = { directions = true } end
+ if id == glyph_code then
+ local mirror = entry.mirror
+ if mirror then
+ setchar(current,mirror)
+ end
+ if trace_directions then
+ local direction = entry.direction
+ if trace_list then
+ local original = entry.original
+ local char = entry.char
+ local level = entry.level
+ if direction == original then
+ report_directions("%2i : %C : %s",level,char,direction)
+ else
+ report_directions("%2i : %C : %s -> %s",level,char,original,direction)
+ end
+ end
+ setcolor(current,direction,false,mirror)
+ end
+ elseif id == hlist_code or id == vlist_code then
+ setfield(current,"dir",pardir) -- is this really needed?
+ elseif id == glue_code then
+ if enddir and getsubtype(current) == parfillskip_code then
+ -- insert the last enddir before \parfillskip glue
+ local d = new_textdir(enddir)
+ local p = properties[d] if p then p.directions = true else properties[d] = { directions = true } end
+ -- setfield(d,"attr",getfield(current,"attr"))
+ head = insert_node_before(head,current,d)
+ enddir = false
+ done = true
+ end
+ elseif begindir then
+ if id == localpar_code then
+ -- localpar should always be the 1st node
+ local d = new_textdir(begindir)
+ local p = properties[d] if p then p.directions = true else properties[d] = { directions = true } end
+ -- setfield(d,"attr",getfield(current,"attr"))
+ head, current = insert_node_after(head,current,d)
+ begindir = nil
+ done = true
+ end
+ end
+ if begindir then
+ local d = new_textdir(begindir)
+ local p = properties[d] if p then p.directions = true else properties[d] = { directions = true } end
+ -- setfield(d,"attr",getfield(current,"attr"))
+ head = insert_node_before(head,current,d)
+ done = true
+ end
+ local skip = entry.skip
+ if skip and skip > 0 then
+ for i=1,skip do
+ current = getnext(current)
+ local p = properties[current] if p then p.directions = true else properties[current] = { directions = true } end
+ end
+ end
+ if enddir then
+ local d = new_textdir(enddir)
+ local p = properties[d] if p then p.directions = true else properties[d] = { directions = true } end
+ -- setfield(d,"attr",getfield(current,"attr"))
+ head, current = insert_node_after(head,current,d)
+ done = true
+ end
+ if not entry.remove then
+ current = getnext(current)
+ elseif remove_controls then
+ -- X9
+ head, current = remove_node(head,current,true)
+ done = true
+ else
+ current = getnext(current)
+ end
+ index = index + 1
+ end
+ if trace_list then
+ report_directions("stop run")
+ end
+ return head, done
+end
+
+local function process(head)
+ head = tonut(head)
+ -- for the moment a whole paragraph property
+ local attr = getattr(head,a_directions)
+ local analyze_fences = getfences(attr)
+ --
+ local list, size = build_list(head)
+ local baselevel, pardir, dirfound = get_baselevel(head,list,size) -- we always have an inline dir node in context
+ if not dirfound and trace_details then
+ report_directions("no initial direction found, gambling")
+ end
+ if trace_details then
+ report_directions("before : %s",show_list(list,size,"original"))
+ end
+ resolve_explicit(list,size,baselevel)
+ resolve_levels(list,size,baselevel,analyze_fences)
+ insert_dir_points(list,size)
+ if trace_details then
+ report_directions("after : %s",show_list(list,size,"direction"))
+ report_directions("result : %s",show_done(list,size))
+ end
+ head, done = apply_to_list(list,size,head,pardir)
+ return tonode(head), done
+end
+
+directions.installhandler(interfaces.variables.three,process)
diff --git a/Master/texmf-dist/tex/context/base/typo-fln.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-fln.lua
index 2076a7464ff..1e1a2c44a69 100644
--- a/Master/texmf-dist/tex/context/base/typo-fln.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-fln.lua
@@ -35,6 +35,7 @@ local getid = nuts.getid
local getfield = nuts.getfield
local setfield = nuts.setfield
local getlist = nuts.getlist
+local setlist = nuts.setlist
local getattr = nuts.getattr
local setattr = nuts.setattr
local getbox = nuts.getbox
@@ -289,7 +290,7 @@ local function applytofirstcharacter(box,what)
break
end
if done then
- setfield(tbox,"list",list)
+ setlist(tbox,list)
local kind = type(what)
if kind == "string" then
context[what](tonode(done))
diff --git a/Master/texmf-dist/tex/context/base/typo-fln.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-fln.mkiv
index 38a53bfa973..e883c57d2a3 100644
--- a/Master/texmf-dist/tex/context/base/typo-fln.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-fln.mkiv
@@ -104,7 +104,7 @@
\unexpanded\def\applytofirstcharacter#1%
{\begingroup
\dowithnextbox
- {\clf_applytofirstcharacter\nextbox{\strippedcsname#1}%
+ {\clf_applytofirstcharacter\nextbox{\csstring#1}%
\unhbox\nextbox
\endgroup}%
\hbox}
diff --git a/Master/texmf-dist/tex/context/base/typo-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-ini.lua
index c45d2966436..c45d2966436 100644
--- a/Master/texmf-dist/tex/context/base/typo-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/typo-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-ini.mkiv
index 1c2d6617a53..1c2d6617a53 100644
--- a/Master/texmf-dist/tex/context/base/typo-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-inj.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-inj.lua
index b5d9e1c513a..786c3c2875a 100644
--- a/Master/texmf-dist/tex/context/base/typo-inj.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-inj.lua
@@ -8,16 +8,20 @@ if not modules then modules = { } end modules ['typo-inj'] = { -- was node-par
local tonumber = tonumber
-local context = context
-local implement = interfaces.implement
+local context = context
+local implement = interfaces.implement
-local injectors = { }
-typesetters.injectors = injectors
-local list = { }
-injectors.list = list
-local showall = false
+local injectors = { }
+typesetters.injectors = injectors
+local list = { }
+injectors.list = list
+local showall = false
-local settings_to_array = utilities.parsers.settings_to_array
+local settings_to_array = utilities.parsers.settings_to_array
+
+local variables = interfaces.variables
+local v_next = variables.next
+local v_previous = variables.previous
local ctx_domarkinjector = context.domarkinjector
local ctx_doactivateinjector = context.doactivateinjector
@@ -72,10 +76,10 @@ end
function injectors.check(name,n) -- we could also accent n = number : +/- 2
local injector = list[name]
- if n == false then
+ if not n or n == "" or n == v_next then
+ n = injector.counter + 1
+ elseif n == v_previous then
n = injector.counter
- elseif n == nil then
- n = injector.counter + 1 -- next (upcoming)
else
n = tonumber(n) or 0
end
@@ -89,6 +93,6 @@ implement { name = "resetinjector", actions = injectors.reset, arguments
implement { name = "showinjector", actions = injectors.show, arguments = "string" }
implement { name = "setinjector", actions = injectors.set, arguments = { "string", "string", "string" } }
implement { name = "markinjector", actions = injectors.mark, arguments = "string" }
-implement { name = "checkinjector", actions = injectors.check, arguments = "string" }
-implement { name = "checkpreviousinjector", actions = injectors.check, arguments = { "string", true } }
-implement { name = "checknextinjector", actions = injectors.check }
+implement { name = "checkinjector", actions = injectors.check, arguments = { "string", "string" } }
+--------- { name = "checkpreviousinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_previous) } }
+--------- { name = "checknextinjector", actions = injectors.check, arguments = { "string", tokens.constant(v_next) } }
diff --git a/Master/texmf-dist/tex/context/base/typo-inj.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-inj.mkiv
index 46cd9fe4599..59f35378fca 100644
--- a/Master/texmf-dist/tex/context/base/typo-inj.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-inj.mkiv
@@ -44,16 +44,19 @@
%D \startsection[title=Delta] fourth \index{fourth} \stopsection
%D \stoptext
-\unexpanded\def\resetinjector [#1]{\clf_resetinjector{#1}}
-\unexpanded\def\markinjector [#1]{\dontleavehmode\clf_markinjector{#1}}
-\unexpanded\def\checkinjector [#1]{\clf_checkinjector{#1}}
-\unexpanded\def\checknextinjector {\clf_checknextinjector}
-\unexpanded\def\checkpreviousinjector {\clf_checkpreviousinjector}
-\unexpanded\def\dosetinjector [#1][#2][#3]{\clf_setinjector{#1}{#2}{#3}}
-\unexpanded\def\doshowinjector [#1]{\clf_showinjector{#1}}
+\unexpanded\def\resetinjector [#1]{\clf_resetinjector{#1}}
+\unexpanded\def\markinjector [#1]{\dontleavehmode\clf_markinjector{#1}}
+\unexpanded\def\docheckinjector [#1][#2]{\clf_checkinjector{#1}{#2}}
+\unexpanded\def\checknextinjector [#1]{\clf_checkinjector{#1}{\v!next}}
+\unexpanded\def\checkpreviousinjector [#1]{\clf_checkinjector{#1}{\v!previous}}
+%unexpanded\def\checknextinjector [#1]{\clf_checknextinjector{#1}}
+%unexpanded\def\checkpreviousinjector [#1]{\clf_checkpreviousinjector{#1}}
+\unexpanded\def\dosetinjector [#1][#2][#3]{\clf_setinjector{#1}{#2}{#3}}
+\unexpanded\def\doshowinjector [#1]{\clf_showinjector{#1}}
-\unexpanded\def\setinjector {\dotripleargument\dosetinjector}
-\unexpanded\def\showinjector{\dosingleempty\doshowinjector}
+\unexpanded\def\checkinjector{\dodoubleempty \docheckinjector}
+\unexpanded\def\setinjector {\dotripleargument\dosetinjector}
+\unexpanded\def\showinjector {\dosingleempty \doshowinjector}
\unexpanded\def\domarkinjector#1#2% called at the lua end
{\dontleavehmode\llap{\infofont\ifcase#1\else\red\fi<#2>\quad}}
diff --git a/Master/texmf-dist/tex/context/base/typo-itc.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-itc.lua
index d3a31fad1bf..cf54187d737 100644
--- a/Master/texmf-dist/tex/context/base/typo-itc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-itc.lua
@@ -37,9 +37,12 @@ local getnext = nuts.getnext
local getid = nuts.getid
local getfont = nuts.getfont
local getchar = nuts.getchar
+local getdisc = nuts.getdisc
local getattr = nuts.getattr
local setattr = nuts.setattr
local setfield = nuts.setfield
+local setdisc = nuts.setdisc
+local isglyph = nuts.isglyph
local insert_node_after = nuts.insert_after
local delete_node = nuts.delete
@@ -49,9 +52,11 @@ local find_tail = nuts.tail
local texgetattribute = tex.getattribute
local texsetattribute = tex.setattribute
local a_italics = attributes.private("italics")
+local a_mathitalics = attributes.private("mathitalics")
+
local unsetvalue = attributes.unsetvalue
-local new_correction_kern = nodepool.fontkern
+local new_correction_kern = nodepool.italickern
local new_correction_glue = nodepool.glue
local fonthashes = fonts.hashes
@@ -59,6 +64,8 @@ local fontdata = fonthashes.identifiers
local italicsdata = fonthashes.italics
local exheights = fonthashes.exheights
+local is_punctuation = characters.is_punctuation
+
local implement = interfaces.implement
local forcedvariant = false
@@ -67,11 +74,14 @@ function typesetters.italics.forcevariant(variant)
forcedvariant = variant
end
+-- We use the same key as the tex font handler. So, if a valua has already be set, we
+-- use that one.
+
local function setitalicinfont(font,char)
local tfmdata = fontdata[font]
local character = tfmdata.characters[char]
if character then
- local italic = character.italic_correction
+ local italic = character.italic
if not italic then
local autoitalicamount = tfmdata.properties.autoitalicamount or 0
if autoitalicamount ~= 0 then
@@ -93,7 +103,10 @@ local function setitalicinfont(font,char)
if trace_italics then
report_italics("setting italic correction of %C of font %a to %p",char,font,italic)
end
- character.italic_correction = italic or 0
+ if not italic then
+ italic = 0
+ end
+ character.italic = italic
end
return italic
else
@@ -163,28 +176,32 @@ function italics.handler(head)
local previtalic = 0
local previnserted = nil
- local replace = nil
- local replacechar = nil
- local replacehead = nil
- local replaceitalic = 0
- local replaceinserted = nil
+ local pre = nil
+ local pretail = nil
local post = nil
+ local posttail = nil
local postchar = nil
local posthead = nil
local postitalic = 0
local postinserted = nil
+ local replace = nil
+ local replacetail = nil
+ local replacechar = nil
+ local replacehead = nil
+ local replaceitalic = 0
+ local replaceinserted = nil
+
local current = prevhead
local done = false
local lastfont = nil
local lastattr = nil
while current do
- local id = getid(current)
- if id == glyph_code then
+ local char, id = isglyph(current)
+ if char then
local font = getfont(current)
- local char = getchar(current)
local data = italicsdata[font]
if font ~= lastfont then
if previtalic ~= 0 then
@@ -236,7 +253,7 @@ function italics.handler(head)
-- this really can happen
previtalic = 0
else
- previtalic = cd.italic or cd.italic_correction
+ previtalic = cd.italic
if not previtalic then
previtalic = setitalicinfont(font,char) -- calculated once
-- previtalic = 0
@@ -265,95 +282,84 @@ function italics.handler(head)
replaceitalic = 0
postinserted = nil
postitalic = 0
- replace = getfield(current,"replace")
+ updated = false
+ pre, post, replace, pretail, posttail, replacetail = getdisc(current,true)
if replace then
- local current = find_tail(replace)
- if getid(current) ~= glyph_code then
- current = getprev(current)
- end
- if current and getid(current) == glyph_code then
- local font = getfont(current)
- local char = getchar(current)
- local data = italicsdata[font]
- if data then
- local attr = forcedvariant or getattr(current,a_italics)
- if attr and attr > 0 then
- local cd = data[char]
- if not cd then
- -- this really can happen
- replaceitalic = 0
- else
- replaceitalic = cd.italic or cd.italic_correction
- if not replaceitalic then
- replaceitalic = setitalicinfont(font,char) -- calculated once
- -- replaceitalic = 0
- end
- if replaceitalic ~= 0 then
- lastfont = font
- lastattr = attr
- replacechar = char
- replacehead = replace
- replace = current
+ local current = replacetail
+ while current do
+ local char, id = isglyph(current)
+ if char then
+ local font = getfont(current)
+ local data = italicsdata[font]
+ if data then
+ local attr = forcedvariant or getattr(current,a_italics)
+ if attr and attr > 0 then
+ local cd = data[char]
+ if not cd then
+ -- this really can happen
+ replaceitalic = 0
+ else
+ replaceitalic = cd.italic
+ if not replaceitalic then
+ replaceitalic = setitalicinfont(font,char) -- calculated once
+ -- replaceitalic = 0
+ end
+ if replaceitalic ~= 0 then
+ lastfont = font
+ lastattr = attr
+ replacechar = char
+ replacehead = replace
+ replace = current
+ updated = true
+ end
end
end
--- else
--- replaceitalic = 0
end
--- else
--- replaceitalic = 0
+ break
+ else
+ current = getprev(current)
end
--- else
--- replaceitalic = 0
end
--- replaceinserted = nil
--- else
--- replaceitalic = 0
--- replaceinserted = nil
end
- post = getfield(current,"post")
if post then
- local current = find_tail(post)
- if getid(current) ~= glyph_code then
- current = getprev(current)
- end
- if current and getid(current) == glyph_code then
- local font = getfont(current)
- local char = getchar(current)
- local data = italicsdata[font]
- if data then
- local attr = forcedvariant or getattr(current,a_italics)
- if attr and attr > 0 then
- local cd = data[char]
- if not cd then
- -- this really can happen
--- postitalic = 0
- else
- postitalic = cd.italic or cd.italic_correction
- if not postitalic then
- postitalic = setitalicinfont(font,char) -- calculated once
- -- postitalic = 0
- end
- if postitalic ~= 0 then
- lastfont = font
- lastattr = attr
- postchar = char
- posthead = post
- post = current
+ local current = posttail
+ while current do
+ local char, id = isglyph(current)
+ if char then
+ local font = getfont(current)
+ local data = italicsdata[font]
+ if data then
+ local attr = forcedvariant or getattr(current,a_italics)
+ if attr and attr > 0 then
+ local cd = data[char]
+ if not cd then
+ -- this really can happen
+ -- postitalic = 0
+ else
+ postitalic = cd.italic
+ if not postitalic then
+ postitalic = setitalicinfont(font,char) -- calculated once
+ -- postitalic = 0
+ end
+ if postitalic ~= 0 then
+ lastfont = font
+ lastattr = attr
+ postchar = char
+ posthead = post
+ post = current
+ updated = true
+ end
end
end
--- else
--- postitalic = 0
end
--- else
--- postitalic = 0
+ break
+ else
+ current = getprev(current)
end
--- else
--- postitalic = 0
end
--- postinserted = nil
--- else
--- postitalic = 0
--- postinserted = nil
+ end
+ if updated then
+ setdisc(current,pre,post,replace)
end
elseif id == kern_code then -- how about fontkern ?
previnserted = nil
@@ -399,6 +405,30 @@ function italics.handler(head)
replaceitalic = 0
postinserted = nil
postitalic = 0
+ local next = getnext(current)
+ if next then
+ local char, id = isglyph(next)
+ if char and is_punctuation[char] then
+ local kern = getprev(current)
+ if kern and getid(kern) == kern_code then
+ local glyph = getprev(kern)
+ if glyph and getid(glyph) == glyph_code then
+ local a = getattr(glyph,a_mathitalics)
+ if a == 101 then
+ local font = getfont(next)
+ local ex = exheights[font]
+ -- we need an extrat punctuation checker: . ; etc
+ if getfield(next,"height") < 1.25*ex then
+ if trace_italics then
+ report_italics("removing italic between math %C and punctuation %C",getchar(glyph),char)
+ end
+ setfield(kern,"kern",0) -- or maybe a small value or half the ic
+ end
+ end
+ end
+ end
+ end
+ end
else
if previtalic ~= 0 then
if trace_italics then
@@ -529,7 +559,7 @@ local function setupitaliccorrection(option) -- no grouping !
texsetattribute(a_italics,variant)
end
if trace_italics then
- report_italics("forcing %a, variant %a",forcedvariant,variant ~= unsetvalue and variant)
+ report_italics("forcing %a, variant %a",forcedvariant or "-",variant ~= unsetvalue and variant)
end
end
diff --git a/Master/texmf-dist/tex/context/base/typo-itc.mkvi b/Master/texmf-dist/tex/context/base/mkiv/typo-itc.mkvi
index c0aa8e2f6dd..b0d2673cd48 100644
--- a/Master/texmf-dist/tex/context/base/typo-itc.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-itc.mkvi
@@ -24,7 +24,8 @@
\registerctxluafile{typo-itc}{1.001}
-\definesystemattribute[italics][public]
+\definesystemattribute[italics] [public]
+\definesystemattribute[mathitalics][public]
% \let\/=/
% \let\emphasiscorrection\donothing
diff --git a/Master/texmf-dist/tex/context/base/typo-itm.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-itm.mkiv
index 0bb8170c721..0bb8170c721 100644
--- a/Master/texmf-dist/tex/context/base/typo-itm.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-itm.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-krn.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-krn.lua
index 46a977cfd49..7607fc5f509 100644
--- a/Master/texmf-dist/tex/context/base/typo-krn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-krn.lua
@@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['typo-krn'] = {
}
-- glue is still somewhat suboptimal
+-- components: better split on tounicode
local next, type, tonumber = next, type, tonumber
local utfchar = utf.char
@@ -30,20 +31,27 @@ local insert_node_after = nuts.insert_after
local end_of_math = nuts.end_of_math
local getfield = nuts.getfield
-local setfield = nuts.setfield
local getnext = nuts.getnext
local getprev = nuts.getprev
+local getboth = nuts.getboth
local getid = nuts.getid
-local getattr = nuts.getattr
-local setattr = nuts.setattr
local getfont = nuts.getfont
local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
+local getdisc = nuts.getdisc
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
+local getattr = nuts.getattr
+local setattr = nuts.setattr
+local setlink = nuts.setlink
+local setsubtype = nuts.setsubtype
local texsetattribute = tex.setattribute
local unsetvalue = attributes.unsetvalue
-local new_gluespec = nodepool.gluespec
+local setglue = nuts.setglue -- todo
+
local new_kern = nodepool.kern
local new_glue = nodepool.glue
@@ -98,6 +106,10 @@ local kerns = typesetters.kerns
local report = logs.reporter("kerns")
local trace_ligatures = false trackers.register("typesetters.kerns.ligatures",function(v) trace_ligatures = v end)
+-- use_advance is just an experiment: it makes copying glyphs (instead of new_glyph) dangerous
+
+local use_advance = false directives.register("typesetters.kerns.advance", function(v) use_advance = v end)
+
kerns.mapping = kerns.mapping or { }
kerns.factors = kerns.factors or { }
local a_kerns = attributes.private("kern")
@@ -190,31 +202,20 @@ end
local function kern_injector(fillup,kern)
if fillup then
local g = new_glue(kern)
- local s = getfield(g,"spec")
- setfield(s,"stretch",kern)
- setfield(s,"stretch_order",1)
+ setfield(g,"stretch",kern)
+ setfield(g,"stretch_order",1)
return g
else
return new_kern(kern)
end
end
-local function spec_injector(fillup,width,stretch,shrink)
- if fillup then
- local s = new_gluespec(width,2*stretch,2*shrink)
- setfield(s,"stretch_order",1)
- return s
- else
- return new_gluespec(width,stretch,shrink)
- end
-end
-
-- a simple list injector, no components and such .. just disable ligatures in
-- kern mode .. maybe not even hyphenate ... anyway, the next one is for simple
-- sublists .. beware: we can have char -1
local function inject_begin(boundary,prev,keeptogether,krn,ok) -- prev is a glyph
- local id = getid(boundary)
+ local char, id = isglyph(boundary)
if id == kern_code then
if getsubtype(boundary) == kerning_code or getattr(boundary,a_fontkern) then
local inject = true
@@ -226,23 +227,22 @@ local function inject_begin(boundary,prev,keeptogether,krn,ok) -- prev is a glyp
end
if inject then
-- not yet ok, as injected kerns can be overlays (from node-inj.lua)
- setfield(boundary,"subtype",userkern_code)
+ setsubtype(boundary,userkern_code)
setfield(boundary,"kern",getfield(boundary,"kern") + quaddata[getfont(prev)]*krn)
return boundary, true
end
end
- elseif id == glyph_code then
+ elseif char then
if keeptogether and keeptogether(boundary,prev) then
-- keep 'm
else
- local charone = getchar(prev)
- if charone > 0 then
- local font = getfont(boundary)
- local chartwo = getchar(boundary)
- local kerns = chardata[font][charone].kerns
- local kern = new_kern((kerns and kerns[chartwo] or 0) + quaddata[font]*krn)
- setfield(boundary,"prev",kern)
- setfield(kern,"next",boundary)
+ local prevchar = isglyph(prev)
+ if prevchar and prevchar > 0 then
+ local font = getfont(boundary)
+ local data = chardata[font][prevchar]
+ local kerns = data and data.kerns
+ local kern = new_kern((kerns and kerns[char] or 0) + quaddata[font]*krn)
+ setlink(kern,boundary)
return kern, true
end
end
@@ -252,7 +252,7 @@ end
local function inject_end(boundary,next,keeptogether,krn,ok)
local tail = find_node_tail(boundary)
- local id = getid(tail)
+ local char, id = getid(tail)
if id == kern_code then
if getsubtype(tail) == kerning_code or getattr(tail,a_fontkern) then
local inject = true
@@ -264,21 +264,21 @@ local function inject_end(boundary,next,keeptogether,krn,ok)
end
if inject then
-- not yet ok, as injected kerns can be overlays (from node-inj.lua)
- setfield(tail,"subtype",userkern_code)
+ setsubtype(tail,userkern_code)
setfield(tail,"kern",getfield(tail,"kern") + quaddata[getfont(next)]*krn)
return boundary, true
end
end
- elseif id == glyph_code then
+ elseif char then
if keeptogether and keeptogether(tail,two) then
-- keep 'm
else
- local charone = getchar(tail)
- if charone > 0 then
- local font = getfont(tail)
- local chartwo = getchar(next)
- local kerns = chardata[font][charone].kerns
- local kern = (kerns and kerns[chartwo] or 0) + quaddata[font]*krn
+ local nextchar = isglyph(tail)
+ if nextchar and nextchar > 0 then
+ local font = getfont(tail)
+ local data = chardata[font][nextchar]
+ local kerns = data and data.kerns
+ local kern = (kerns and kerns[char] or 0) + quaddata[font]*krn
insert_node_after(boundary,tail,new_kern(kern))
return boundary, true
end
@@ -294,15 +294,14 @@ local function process_list(head,keeptogether,krn,font,okay)
local kern = 0
local mark = font and markdata[font]
while start do
- local id = getid(start)
- if id == glyph_code then
+ local char, id = isglyph(start)
+ if char then
if not font then
font = getfont(start)
mark = markdata[font]
kern = quaddata[font]*krn
end
if prev then
- local char = getchar(start)
if mark[char] then
-- skip
elseif pid == kern_code then
@@ -316,7 +315,7 @@ local function process_list(head,keeptogether,krn,font,okay)
end
if inject then
-- not yet ok, as injected kerns can be overlays (from node-inj.lua)
- setfield(prev,"subtype",userkern_code)
+ setsubtype(prev,userkern_code)
setfield(prev,"kern",getfield(prev,"kern") + kern)
okay = true
end
@@ -326,7 +325,8 @@ local function process_list(head,keeptogether,krn,font,okay)
-- keep 'm
else
local prevchar = getchar(prev)
- local kerns = chardata[font][prevchar].kerns
+ local data = chardata[font][prevchar]
+ local kerns = data and data.kerns
-- if kerns then
-- print("it happens indeed, basemode kerns not yet injected")
-- end
@@ -401,17 +401,14 @@ function kerns.handler(head)
while c do
local s = start
local t = find_node_tail(c)
- local p = getprev(s)
- local n = getnext(s)
+ local p, n = getboth(s)
if p then
- setfield(p,"next",c)
- setfield(c,"prev",p)
+ setlink(p,c)
else
head = c
end
if n then
- setfield(n,"prev",t)
- setfield(t,"next",n)
+ setlink(t,n)
end
start = c
setfield(s,"components",nil)
@@ -436,7 +433,7 @@ function kerns.handler(head)
end
if inject then
-- not yet ok, as injected kerns can be overlays (from node-inj.lua)
- setfield(prev,"subtype",userkern_code)
+ setsubtype(prev,userkern_code)
setfield(prev,"kern",getfield(prev,"kern") + quaddata[font]*krn)
done = true
end
@@ -446,9 +443,14 @@ function kerns.handler(head)
if keeptogether and keeptogether(prev,start) then
-- keep 'm
else
- local kerns = chardata[font][prevchar].kerns
+ local data = chardata[font][prevchar]
+ local kerns = data and data.kerns
local kern = (kerns and kerns[char] or 0) + quaddata[font]*krn
- insert_node_before(head,start,kern_injector(fillup,kern))
+ if not fillup and use_advance then
+ setfield(prev,"xadvance",getfield(prev,"xadvance") + kern)
+ else
+ insert_node_before(head,start,kern_injector(fillup,kern))
+ end
done = true
end
else
@@ -477,9 +479,7 @@ function kerns.handler(head)
pglyph = prev and getid(prev) == glyph_code
languages.expand(start,pglyph and prev)
end
- local pre = getfield(start,"pre")
- local post = getfield(start,"post")
- local replace = getfield(start,"replace")
+ local pre, post, replace = getdisc(start)
-- we really need to reasign the fields as luatex keeps track of
-- the tail in a temp preceding head .. kind of messy so we might
-- want to come up with a better solution some day like a real
@@ -549,13 +549,21 @@ function kerns.handler(head)
elseif id == glue_code then
local subtype = getsubtype(start)
if subtype == userskip_code or subtype == xspaceskip_code or subtype == spaceskip_code then
- local s = getfield(start,"spec")
- local w = getfield(s,"width")
+ local w = getfield(start,"width")
if w > 0 then
- local width = w+gluefactor*w*krn
- local stretch = getfield(s,"stretch")
- local shrink = getfield(s,"shrink")
- setfield(start,"spec",spec_injector(fillup,width,stretch*width/w,shrink*width/w))
+ local width = w + gluefactor * w * krn
+ local stretch = getfield(start,"stretch") * width / w
+ local shrink = getfield(start,"shrink") * width / w
+ if fillup then
+ stretch = 2 * stretch
+ shrink = 2 * shrink
+ setfield(start,"stretch_order",1)
+ -- shrink_order ?
+ end
+ setfield(start,"width",width)
+ setfield(start,"stretch",stretch)
+ setfield(start,"shrink", shrink)
+ --
done = true
end
end
diff --git a/Master/texmf-dist/tex/context/base/typo-krn.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-krn.mkiv
index 6d6126542bf..6d6126542bf 100644
--- a/Master/texmf-dist/tex/context/base/typo-krn.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-krn.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-lan.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-lan.lua
index c42d2119eb6..c42d2119eb6 100644
--- a/Master/texmf-dist/tex/context/base/typo-lan.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-lan.lua
diff --git a/Master/texmf-dist/tex/context/base/typo-lan.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-lan.mkiv
index 8b633957bca..6bc052b9989 100644
--- a/Master/texmf-dist/tex/context/base/typo-lan.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-lan.mkiv
@@ -30,7 +30,8 @@
\def\charwidthlanguage{\currentmainlanguage}
-\def\averagecharwidth{\dimexpr\clf_averagecharwidth{\charwidthlanguage}\scaledpoint\relax}
+\def\averagecharwidth {\dimexpr\clf_averagecharwidth{\charwidthlanguage}\scaledpoint\relax}
+\def\languagecharwidth#1{\dimexpr\clf_averagecharwidth{#1}\scaledpoint\relax}
\protect
diff --git a/Master/texmf-dist/tex/context/base/typo-lig.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-lig.mkiv
index 6171441d6d3..6171441d6d3 100644
--- a/Master/texmf-dist/tex/context/base/typo-lig.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-lig.mkiv
diff --git a/Master/texmf-dist/tex/context/base/mkiv/typo-lin.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-lin.lua
new file mode 100644
index 00000000000..40a27dd3949
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-lin.lua
@@ -0,0 +1,471 @@
+if not modules then modules = { } end modules ['typo-lin'] = {
+ version = 1.001,
+ comment = "companion to typo-lin.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is experimental code. The idea is to create an anchor point in a line but there are
+-- some considerations:
+--
+-- * if we normalize in order to have more easy access later on, we need to normalize all
+-- lines and we cannot catch all without losing efficiency
+--
+-- * if we normalize too soon, we might have issues with changed properties later on
+--
+-- * if we normalize too late, we have no knowledge of the current hsize
+--
+-- * if we always create an anchor we also create unwanted overhead if it is not used later
+-- on (more nodes)
+--
+-- The question is: do we mind of at the first access an anchor is created? As we cannot know
+-- that now, I choose some middle ground but this might change. if we don't assume direct
+-- access but only helpers, we can decide later.
+--
+-- Because of right2left mess it makes sense to use helpers so that we only need to deal with
+-- this mess once, in helpers. The more abstraction there the better. And so, after a week of
+-- experimenting, yet another abstraction was introduced.
+--
+-- The danger of adding the anchor later is that we adapt the head and so the caller needs to
+-- check that ... real messy. On the other hand, we soldom traverse the line. And other
+-- mechanisms can push stuff in front too. Actually that alone can mess up analysis when we
+-- delay too much. So in the end we need to accept the slow down.
+--
+-- We only need to normalize the left side because when we mess around we keep the page stream
+-- order (and adding content to the right of the line is a no-go for tagged etc. For the same
+-- reason we don't use two left anchors (each side fo leftskip) because there can be stretch.
+-- 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
+-- 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.
+--
+-- This looks a bit messy but we want to keep the box as it is so \showboxes still visualizes as
+-- expected. Normally left and rightskips end up in the line while hangindents become shifts and
+-- hsize corrections. We could normalize this to a line with
+
+-- indent : hlist type 3
+-- hangindent : shift and width
+
+local type = type
+
+local trace_anchors = false trackers.register("paragraphs.anchors", function(v) trace_anchors = v end)
+
+local report = logs.reporter("anchors")
+
+local nuts = nodes.nuts
+local nodecodes = nodes.nodecodes
+local gluecodes = nodes.gluecodes
+local listcodes = nodes.listcodes
+
+local hlist_code = nodecodes.hlist
+local glue_code = nodecodes.glue
+local kern_code = nodecodes.kern
+local line_code = listcodes.line
+local localpar_code = nodecodes.localpar
+local leftskip_code = gluecodes.leftskip
+local rightskip_code = gluecodes.rightskip
+local parfillskip_code = gluecodes.parfillskip
+
+local tonut = nodes.tonut
+local tonode = nodes.tonode
+
+local traverse_id = nuts.traverse_id
+local insert_before = nuts.insert_before
+local insert_after = nuts.insert_after
+local find_tail = nuts.tail
+----- remove_node = nuts.remove
+
+local getsubtype = nuts.getsubtype
+local getlist = nuts.getlist
+local setlist = nuts.setlist
+local getid = nuts.getid
+local getnext = nuts.getnext
+local getprev = nuts.getprev
+local getboth = nuts.getboth
+local getfield = nuts.getfield
+local setfield = nuts.setfield
+
+local setprop = nuts.setprop
+local getprop = nuts.rawprop -- getprop
+
+local effectiveglue = nuts.effective_glue
+
+local nodepool = nuts.pool
+local new_glue = nodepool.glue
+local new_kern = nodepool.kern
+local new_leftskip = nodepool.leftskip
+local new_rightskip = nodepool.rightskip
+local new_hlist = nodepool.hlist
+local new_vlist = nodepool.vlist
+local new_rule = nodepool.rule
+local new_latelua = nodepool.latelua
+
+local texgetcount = tex.getcount
+local setmetatableindex = table.setmetatableindex
+local formatters = string.formatters
+
+local jobpositions = job.positions
+local getposition = jobpositions.get
+local getreserved = jobpositions.getreserved
+
+local paragraphs = { }
+typesetters.paragraphs = paragraphs
+
+local addskips = false
+local noflines = 0
+
+-- This is the third version, a mix between immediate (prestice lines) and delayed
+-- as we don't want anchors that are not used.
+
+-- if reverse then delta = - delta end
+-- head = insert_before(head,head,nodepool.textdir("-TLT"))
+-- ....
+-- head = insert_before(head,head,nodepool.textdir("TLT"))
+
+-- todo: figure out metatable mess ... when we copy we also need to copy
+-- anchors ... use rawgets
+
+-- problem: what if a box is copied ... we could check an attribute
+
+local function finalize(prop,key) -- delayed calculations
+ local line = prop.line
+ local hsize = prop.hsize
+ local width = prop.width
+ local shift = getfield(line,"shift") -- dangerous as it can be vertical as well
+ local reverse = getfield(line,"dir") == "TRT" or false
+ local pack = new_hlist()
+ local head = getlist(line)
+ local delta = 0
+ if reverse then
+ delta = - shift + (hsize - width)
+ else
+ delta = shift
+ end
+ local kern1 = new_kern(delta)
+ local kern2 = new_kern(-delta)
+ head = insert_before(head,head,kern1)
+ head = insert_before(head,head,pack)
+ head = insert_before(head,head,kern2)
+ setlist(line,head)
+ local where = {
+ pack = pack,
+ head = nil,
+ tail = nil,
+ }
+ prop.where = where
+ prop.reverse = reverse
+ prop.shift = shift
+ setmetatableindex(prop,nil)
+ return prop[key]
+end
+
+local function normalize(line,islocal) -- assumes prestine lines, nothing pre/appended
+ local oldhead = getlist(line)
+ local head = oldhead
+ local leftskip = nil
+ local rightskip = nil
+ local width = getfield(line,"width")
+ local hsize = islocal and width or tex.hsize
+ local lskip = 0
+ local rskip = 0
+ local pskip = 0
+ local current = head
+ local id = getid(current)
+ if id == glue_code then
+ local subtype = getsubtype(head)
+ if subtype == leftskip_code then
+ leftskip = head
+ lskip = getfield(head,"width") or 0
+ end
+ current = getnext(head)
+ id = getid(current)
+ end
+ -- no:
+ -- if id == localpar_code then
+ -- head = remove_node(head,head,true)
+ -- end
+ local tail = find_tail(head)
+ local current = tail
+ local id = getid(current)
+ if id == glue_code then
+ if getsubtype(current) == rightskip_code then
+ rightskip = tail
+ rskip = getfield(current,"width") or 0
+ current = getprev(tail)
+ id = getid(current)
+ end
+ if id == glue_code then
+ if getsubtype(current) == parfillskip_code then
+ pskip = effectiveglue(current,line)
+ end
+ end
+ end
+ if addskips then
+ if rightskip and not leftskip then
+ leftskip = new_leftskip(lskip)
+ head = insert_before(head,head,leftskip)
+ end
+ if leftskip and not rightskip then
+ rightskip = new_rightskip(0)
+ head, tail = insert_after(head,tail,rightskip)
+ end
+ end
+ if head ~= oldhead then
+ setlist(line,head)
+ end
+ noflines = noflines + 1
+ local prop = {
+ width = width,
+ hsize = hsize,
+ leftskip = lskip,
+ rightskip = rskip,
+ parfillskip = pskip,
+ line = line,
+ number = noflines,
+ }
+ setprop(line,"line",prop)
+ setmetatableindex(prop,finalize)
+ return prop
+end
+
+function paragraphs.checkline(n)
+ return getprop(n,"line") or normalize(n,true)
+end
+
+function paragraphs.normalize(head,islocal)
+ if texgetcount("pagebodymode") > 0 then
+ -- can be an option, maybe we need a proper state in lua itself ... is this check still needed?
+ return head, false
+ end
+ for line in traverse_id(hlist_code,tonut(head)) do
+ if getsubtype(line) == line_code and not getprop(line,"line") then
+ normalize(line)
+ end
+ end
+ return head, true
+end
+
+-- print(nodes.idstostring(head))
+
+-- We do only basic positioning and leave compensation for directions and distances
+-- to the caller as that one knows the circumstances better.
+
+-- todo: only in mvl or explicitly, e.g. framed or so, not in all lines
+
+local function addtoline(n,list,option)
+ local line = getprop(n,"line")
+ if not line then
+ line = normalize(n,true)
+ end
+ if line then
+ if trace_anchors and not line.traced then
+ line.traced = true
+ local rule = new_rule(2*65536,2*65536,1*65536)
+ local list = insert_before(rule,rule,new_kern(-1*65536))
+ addtoline(n,list)
+ local rule = new_rule(2*65536,6*65536,-3*65536)
+ local list = insert_before(rule,rule,new_kern(-1*65536))
+ addtoline(n,list,"internal")
+ else
+ line.traced = true
+ end
+ local list = tonut(list)
+ local where = line.where
+ local head = where.head
+ local tail = where.tail
+ local blob = new_hlist(list)
+ local delta = 0
+ if option == "internal" then
+ if line.reverse then
+ delta = line.shift - line.leftskip - (line.hsize - line.width)
+ else
+ delta = line.shift + line.leftskip
+ end
+ end
+ -- always kerns, also when 0 so that we can adapt but we can optimize if needed
+ -- by keeping a hash as long as we use the shiftinline helper .. no need to
+ -- optimize now .. we can also decide to put each blob in a hlist
+ local kern = new_kern(delta)
+ if tail then
+ head, tail = insert_after(head,tail,kern)
+ else
+ head, tail = kern, kern
+ setlist(where.pack,head)
+ end
+ head, tail = insert_after(head,tail,blob)
+ local kern = new_kern(-delta)
+ head, tail = insert_after(head,tail,kern)
+ --
+ where.head = head
+ where.tail = tail
+ return line, blob
+ else
+ -- report("unknown anchor")
+ end
+end
+
+local function addanchortoline(n,anchor)
+ local line = type(n) ~= "table" and getprop(n,"line") or n
+ if not line then
+ line = normalize(n,true)
+ end
+ if line then
+ local anchor = tonut(anchor)
+ local where = line.where
+ if trace_anchors then
+ local rule1 = new_rule(65536/2,4*65536,4*65536)
+ local rule2 = new_rule(8*65536,65536/4,65536/4)
+ local kern1 = new_kern(-65536/4)
+ local kern2 = new_kern(-65536/4-4*65536)
+ anchor = new_hlist(nuts.link { anchor, kern1, rule1, kern2, rule2 })
+ setfield(anchor,"width",0)
+ end
+ if where.tail then
+ local head = where.head
+ insert_before(head,head,anchor)
+ else
+ where.tail = anchor
+ end
+ setlist(where.pack,anchor)
+ where.head = anchor
+ return line
+ end
+end
+
+paragraphs.addtoline = addtoline
+paragraphs.addanchortoline = addanchortoline
+
+function paragraphs.moveinline(n,blob,dx,dy)
+ if not blob then
+ return
+ end
+ if not dx then
+ dx = 0
+ end
+ if not dy then
+ dy = 0
+ end
+ if dx ~= 0 or dy ~= 0 then
+ local line = type(n) ~= "table" and getprop(n,"line") or n
+ if line then
+ if dx ~= 0 then
+ local prev, next = getboth(blob)
+ if prev and getid(prev) == kern_code then
+ setfield(prev,"kern",getfield(prev,"kern") + dx)
+ end
+ if next and getid(next) == kern_code then
+ setfield(next,"kern",getfield(next,"kern") - dx)
+ end
+ end
+ if dy ~= 0 then
+ if getid(blob) == hlist_code then
+ setfield(blob,"shift",getfield(blob,"shift") + dy)
+ end
+ end
+ else
+-- report("no line")
+ end
+ end
+end
+
+local f_anchor = formatters["_plib_.set('md:h',%i,{x=true,c=true})"]
+local s_anchor = 'md:h'
+
+local function setanchor(h_anchor)
+ return new_latelua(f_anchor(h_anchor))
+end
+
+-- local t_anchor = { x = true, c = true }
+--
+-- local function setanchor(h_anchor)
+-- return lateluafunction(function() setposition("md:h",h_anchor,t_anchor) end)
+-- end
+
+function paragraphs.calculatedelta(n,width,delta,atleft,islocal,followshape,area)
+ local line = type(n) ~= "table" and getprop(n,"line") or n
+ if not line then
+ line = normalize(n,true)
+ end
+ local hmove = 0
+ if line then
+ local reverse = line.reverse
+ -- basic hsize based anchoring
+ if atleft then
+ if reverse then
+ -- delta = delta
+ else
+ delta = - delta - width
+ end
+ else
+ if reverse then
+ delta = - delta - width - line.hsize
+ else
+ delta = delta + line.hsize
+ end
+ end
+ if islocal then
+ -- relative to hsize with leftskip / rightskip compensation
+ if atleft then
+ if reverse then
+ delta = delta - line.leftskip
+ else
+ delta = delta + line.leftskip
+ end
+ else
+ if reverse then
+ delta = delta + line.rightskip
+ else
+ delta = delta - line.rightskip
+ end
+ end
+ if followshape then
+ -- shape compensation
+ if atleft then
+ if reverse then
+ delta = delta + line.shift - line.hsize + line.width
+ else
+ delta = delta + line.shift
+ end
+ else
+ if reverse then
+ delta = delta + line.shift + line.parfillskip
+ else
+ delta = delta + line.shift - line.hsize + line.width - line.parfillskip
+ end
+ end
+ end
+ end
+ if area then
+ local number = line.number
+ if not line.hanchor then
+ addanchortoline(line,setanchor(number))
+ line.hanchor = true
+ end
+ local blob = getposition(s_anchor,number)
+ if blob then
+ local reference = getreserved(area,blob.c)
+ if reference then
+ hmove = (reference.x or 0) - (blob.x or 0)
+ if atleft then
+ if reverse then
+ hmove = hmove + (reference.w or 0)
+ else
+ -- hmove = hmove
+ end
+ else
+ if reverse then
+ hmove = hmove + line.hsize
+ else
+ hmove = hmove + (reference.w or 0) - line.hsize
+ end
+ end
+ end
+ end
+ end
+ end
+ return delta, hmove
+end
diff --git a/Master/texmf-dist/tex/context/base/mkiv/typo-lin.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-lin.mkiv
new file mode 100644
index 00000000000..eba08b4c8ba
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-lin.mkiv
@@ -0,0 +1,25 @@
+%D \module
+%D [ file=typo-lin,
+%D version=2015.08.01,
+%D title=\CONTEXT\ Typographic Macros,
+%D subtitle=Line Normalization,
+%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 Typographic Macros / Normalization}
+
+%D Beware: the mvl callback is also called when a line is added to a vbox.
+
+\registerctxluafile{typo-lin}{1.001}
+
+\unprotect
+
+% nothing yet / experimental
+
+\protect \endinput
+
diff --git a/Master/texmf-dist/tex/context/base/typo-man.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-man.lua
index 6c6d7926f37..6c6d7926f37 100644
--- a/Master/texmf-dist/tex/context/base/typo-man.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-man.lua
diff --git a/Master/texmf-dist/tex/context/base/typo-mar.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-mar.lua
index fed9e0745d6..cdb4d544cee 100644
--- a/Master/texmf-dist/tex/context/base/typo-mar.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-mar.lua
@@ -78,6 +78,7 @@ local insert, remove = table.insert, table.remove
local setmetatable, next = setmetatable, next
local formatters = string.formatters
local toboolean = toboolean
+local settings_to_hash = utilities.parsers.settings_to_hash
local attributes, nodes, node, variables = attributes, nodes, node, variables
@@ -115,8 +116,10 @@ local v_yes = variables.yes
local v_continue = variables.continue
local v_first = variables.first
local v_text = variables.text
+local v_paragraph = variables.paragraph
local v_column = variables.column
local v_line = variables.line
+local v_hanging = variables.hanging
local nuts = nodes.nuts
local nodepool = nuts.pool
@@ -125,7 +128,7 @@ local tonode = nuts.tonode
local tonut = nuts.tonut
local copy_node_list = nuts.copy_list
-local hpack_nodes = nuts.hpack -- nodes.fasthpack not really faster here
+local hpack_nodes = nuts.hpack
local traverse_id = nuts.traverse_id
local free_node_list = nuts.flush_list
local insert_node_after = nuts.insert_after
@@ -142,6 +145,7 @@ local setattr = nuts.setattr
local getsubtype = nuts.getsubtype
local getbox = nuts.getbox
local getlist = nuts.getlist
+local setlist = nuts.setlist
local nodecodes = nodes.nodecodes
local listcodes = nodes.listcodes
@@ -157,13 +161,8 @@ local whatsit_code = nodecodes.whatsit
local line_code = listcodes.line
local cell_code = listcodes.cell
local alignment_code = listcodes.alignment
-local leftskip_code = gluecodes.leftskip
-local rightskip_code = gluecodes.rightskip
local userdefined_code = whatsitcodes.userdefined
-local dir_code = whatsitcodes.dir
-local localpar_code = whatsitcodes.localpar
-
local nodepool = nuts.pool
local new_kern = nodepool.kern
@@ -179,7 +178,14 @@ local texget = tex.get
local isleftpage = layouts.status.isleftpage
local registertogether = builders.paragraphs.registertogether -- tonode
+local paragraphs = typesetters.paragraphs
+local addtoline = paragraphs.addtoline
+local moveinline = paragraphs.moveinline
+local calculatedelta = paragraphs.calculatedelta
+
local a_margindata = attributes.private("margindata")
+local a_specialcontent = attributes.private("specialcontent")
+local a_linenumber = attributes.private('linenumber')
local inline_mark = nodepool.userids["margins.inline"]
@@ -242,6 +248,7 @@ local defaults = {
inline = false,
leftskip = 0,
rightskip = 0,
+ option = { }
}
}
@@ -261,10 +268,17 @@ end
function margins.save(t)
setmetatable(t,defaults)
local content = getbox(t.number)
+setattr(content,a_specialcontent,1) -- todo: a property
local location = t.location
local category = t.category
local inline = t.inline
- local scope = t.scope or v_global
+ local scope = t.scope
+ local name = t.name
+ local option = t.option
+ if option then
+ option = settings_to_hash(option)
+ t.option = option
+ end
if not content then
report_margindata("ignoring empty margin data %a",location or "unknown")
return
@@ -292,9 +306,8 @@ function margins.save(t)
elseif enableglobal and scope == v_global then
enableglobal()
end
- nofsaved = nofsaved + 1
+ nofsaved = nofsaved + 1
nofstored = nofstored + 1
- local name = t.name
if trace_marginstack then
showstore(store,"before",location)
end
@@ -321,18 +334,20 @@ function margins.save(t)
end
end
if t.number then
+ local leftmargindistance = texgetdimen("naturalleftmargindistance")
+ local rightmargindistance = texgetdimen("naturalrightmargindistance")
+ local strutbox = getbox("strutbox")
-- better make a new table and make t entry in t
t.box = copy_node_list(content)
t.n = nofsaved
-- used later (we will clean up this natural mess later)
-- nice is to make a special status table mechanism
- local leftmargindistance = texgetdimen("naturalleftmargindistance")
- local rightmargindistance = texgetdimen("naturalrightmargindistance")
- local strutbox = getbox("strutbox")
t.strutdepth = getfield(strutbox,"depth")
t.strutheight = getfield(strutbox,"height")
+ -- beware: can be different from the applied one
t.leftskip = getfield(texget("leftskip"),"width") -- we're not in forgetall
t.rightskip = getfield(texget("rightskip"),"width") -- we're not in forgetall
+ --
t.leftmargindistance = leftmargindistance -- todo:layoutstatus table
t.rightmargindistance = rightmargindistance
t.leftedgedistance = texgetdimen("naturalleftedgedistance")
@@ -370,11 +385,12 @@ end
local status, nofstatus = { }, 0
-local f_anchor = formatters["_plib_.set('md:h',%i,{x=true,c=true})"]
-
-local function setanchor(h_anchor)
- return new_latelua(f_anchor(h_anchor))
-end
+-- local f_anchor = formatters["_plib_.set('md:h',%i,{x=true,c=true})"]
+-- local s_anchor = 'md:h'
+--
+-- local function setanchor(h_anchor)
+-- return new_latelua(f_anchor(h_anchor))
+-- end
-- local t_anchor = { x = true, c = true }
--
@@ -390,13 +406,25 @@ local function realign(current,candidate)
local hsize = candidate.hsize
local width = candidate.width
local align = candidate.align
+ local inline = candidate.inline
+ local anchor = candidate.anchor
+ local hook = candidate.hook
+ local scope = candidate.scope
+ local option = candidate.option
+ local reverse = hook.reverse
+ local atleft = true
+ local hmove = 0
+ local delta = 0
-- local realpageno = candidate.realpageno
local leftpage = isleftpage(false,true)
- local delta = 0
local leftdelta = 0
local rightdelta = 0
local leftdistance = distance
local rightdistance = distance
+ --
+ if not anchor or anchor == "" then
+ anchor = v_text -- this has to become more clever: region:0|column:n|column
+ end
if margin == v_normal then
--
elseif margin == v_local then
@@ -412,73 +440,48 @@ local function realign(current,candidate)
if leftpage then
leftdistance, rightdistance = rightdistance, leftdistance
end
-
- if location == v_left then
- delta = hoffset + width + leftdistance + leftdelta
- elseif location == v_right then
- delta = -hoffset - hsize - rightdistance + rightdelta
+ if location == v_right then
+ atleft = false
elseif location == v_inner then
if leftpage then
- delta = -hoffset - hsize - rightdistance + rightdelta
- else
- delta = hoffset + width + leftdistance + leftdelta
+ atleft = false
end
elseif location == v_outer then
- if leftpage then
- delta = hoffset + width + leftdistance + leftdelta
- else
- delta = -hoffset - hsize - rightdistance + rightdelta
+ if not leftpage then
+ atleft = false
end
end
- -- we assume that list is a hbox, otherwise we had to take the whole current
- -- in order to get it right
-
- setfield(current,"width",0)
- local anchornode, move_x
-
- -- this mess is needed for alignments (combinations) so we use that
- -- oportunity to add arbitrary anchoring
+ local islocal = scope == v_local
+ local area = (not islocal or option[v_text]) and anchor or nil
- -- always increment anchor is nicer for multipass when we add new ..
-
- local inline = candidate.inline
- local anchor = candidate.anchor
- if not anchor or anchor == "" then
- anchor = v_text
- end
- if inline or anchor ~= v_text or candidate.psubtype == alignment_code then
- -- the alignment_code check catches margintexts before a tabulate
- h_anchors = h_anchors + 1
- anchornode = setanchor(h_anchors)
- local blob = getposition('md:h',h_anchors)
- if blob then
- local reference = getreserved(anchor,blob.c)
- if reference then
- if location == v_left then
- move_x = (reference.x or 0) - (blob.x or 0)
- elseif location == v_right then
- move_x = (reference.x or 0) - (blob.x or 0) + (reference.w or 0) - hsize
- else
- -- not yet done
- end
- end
- end
+ if atleft then
+ delta = hoffset + leftdelta + leftdistance
+ else
+ delta = hoffset + rightdelta + rightdistance
end
- if move_x then
- delta = delta - move_x
+ local delta, hmove = calculatedelta (
+ hook, -- the line
+ width, -- width of object
+ delta, -- offset
+ atleft,
+ islocal, -- islocal
+ option[v_paragraph], -- followshape
+ area -- relative to area
+ )
+
+ if hmove ~= 0 then
+ delta = delta + hmove
if trace_margindata then
- report_margindata("realigned %a, location %a, margin %a, move %p",candidate.n,location,margin,move_x)
+ report_margindata("realigned %a, location %a, margin %a, move %p",candidate.n,location,margin,hmove)
end
else
if trace_margindata then
report_margindata("realigned %a, location %a, margin %a",candidate.n,location,margin)
end
end
- local list = hpack_nodes(linked_nodes(anchornode,new_kern(-delta),getlist(current),new_kern(delta)))
- setfield(current,"list",list)
- setfield(current,"width",0)
+ moveinline(hook,candidate.node,delta)
end
local function realigned(current,a)
@@ -519,6 +522,7 @@ end
margins.ha = ha
local f_anchor = formatters["typesetters.margins.ha(%s)"]
+
local function setanchor(v_anchor)
return new_latelua(f_anchor(v_anchor))
end
@@ -531,8 +535,11 @@ local function markovershoot(current) -- todo: alleen als offset > line
v_anchors = v_anchors + 1
cache[v_anchors] = stacked
local anchor = setanchor(v_anchors)
- local list = hpack_nodes(linked_nodes(anchor,getlist(current)))
- setfield(current,"list",list)
+ -- local list = hpack_nodes(linked_nodes(anchor,getlist(current))) -- not ok, we need to retain width
+ local list = hpack_nodes(linked_nodes(anchor,getlist(current)),getfield(current,"width"),"exactly")--
+ -- why not:
+ -- local list = linked_nodes(anchor,getlist(current))
+ setlist(current,list)
end
local function getovershoot(location)
@@ -583,11 +590,6 @@ local function inject(parent,head,candidate)
--
if baseline == true then
baseline = false
- -- hbox vtop
---~ for h in traverse_id(hlist_code,box.list.list) do
---~ baseline = h.height
---~ break
---~ end
else
baseline = tonumber(baseline)
if not baseline or baseline <= 0 then
@@ -604,7 +606,7 @@ local function inject(parent,head,candidate)
if firstonstack then
offset = 0
else
--- offset = offset + height
+ -- offset = offset + height
end
if stack == v_yes then
offset = offset + candidate.dy -- always
@@ -678,20 +680,9 @@ local function inject(parent,head,candidate)
end
setfield(box,"shift",shift)
setfield(box,"width",0)
- if not head then
- head = box
- elseif getid(head) == whatsit_code and getsubtype(head) == localpar_code then
- -- experimental
- if getfield(head,"dir") == "TRT" then
- local list = hpack_nodes(linked_nodes(new_kern(candidate.hsize),getlist(box),new_kern(-candidate.hsize)))
- setfield(box,"list",list)
- end
- insert_node_after(head,head,box)
- else
- setfield(head,"prev",box)
- setfield(box,"next",head)
- head = box
- end
+ --
+ candidate.hook, candidate.node = addtoline(parent,box)
+ --
setattr(box,a_margindata,nofstatus)
if trace_margindata then
report_margindata("injected, location %a, shift %p",location,shift)
@@ -710,7 +701,7 @@ local function inject(parent,head,candidate)
if trace_margindata then
report_margindata("status, offset %s",offset)
end
- return head, room, stack == v_continue
+ return getlist(parent), room, stack == v_continue
end
local function flushinline(parent,head)
@@ -736,7 +727,7 @@ local function flushinline(parent,head)
elseif id == hlist_code or id == vlist_code then
-- optional (but sometimes needed)
list, don, con = flushinline(current,getlist(current))
- setfield(current,"list",list)
+ setlist(current,list)
continue = continue or con
done = done or don
end
@@ -745,8 +736,6 @@ local function flushinline(parent,head)
return head, done, continue
end
-local a_linenumber = attributes.private('linenumber')
-
local function flushed(scope,parent) -- current is hlist
local head = getlist(parent)
local done = false
@@ -779,7 +768,7 @@ local function flushed(scope,parent) -- current is hlist
end
if nofinlined > 0 then
if done then
- setfield(parent,"list",head)
+ setlist(parent,head)
end
head, don, con = flushinline(parent,head)
continue = continue or con
@@ -787,10 +776,18 @@ local function flushed(scope,parent) -- current is hlist
end
if done then
local a = getattr(head,a_linenumber) -- hack .. we need a more decent critical attribute inheritance mechanism
- local l = hpack_nodes(head,getfield(parent,"width"),"exactly")
- setfield(parent,"list",l)
- if a then
- setattr(l,a_linenumber,a)
+ if false then
+ local l = hpack_nodes(head,getfield(parent,"width"),"exactly")
+ setlist(parent,l)
+ if a then
+ setattr(l,a_linenumber,a)
+ end
+ else
+ -- because packing messes up profiling
+ setlist(parent,head)
+ if a then
+ setattr(parent,a_linenumber,a)
+ end
end
-- resetstacked()
end
@@ -813,6 +810,7 @@ local function handler(scope,head,group)
if (id == vlist_code or id == hlist_code) and not getattr(current,a_margindata) then
local don, continue = flushed(scope,current)
if don then
+ done = true
setattr(current,a_margindata,0) -- signal to prevent duplicate processing
if continue then
markovershoot(current)
@@ -820,11 +818,17 @@ local function handler(scope,head,group)
if nofstored <= 0 then
break
end
- done = true
end
end
current = getnext(current)
end
+ if trace_margindata then
+ if done then
+ report_margindata("flushing stage one, done, %s left",nofstored)
+ else
+ report_margindata("flushing stage one, nothing done, %s left",nofstored)
+ end
+ end
-- if done then
resetstacked() -- why doesn't done work ok here?
-- end
@@ -834,7 +838,14 @@ local function handler(scope,head,group)
end
end
+local trialtypesetting = context.trialtypesetting
+
function margins.localhandler(head,group) -- sometimes group is "" which is weird
+
+if trialtypesetting() then
+ return head, false
+end
+
local inhibit = conditionals.inhibitmargindata
if inhibit then
if trace_margingroup then
@@ -852,6 +863,11 @@ function margins.localhandler(head,group) -- sometimes group is "" which is weir
end
function margins.globalhandler(head,group) -- check group
+
+if trialtypesetting() then
+ return head, false
+end
+
local inhibit = conditionals.inhibitmargindata
if inhibit or nofstored == 0 then
if trace_margingroup then
@@ -880,9 +896,9 @@ local function finalhandler(head)
if nofdelayed > 0 then
local current = head
local done = false
- while current do
+ while current and nofdelayed > 0 do
local id = getid(current)
- if id == hlist_code then
+ if id == hlist_code then -- only lines?
local a = getattr(current,a_margindata)
if not a or a == 0 then
finalhandler(getlist(current))
@@ -975,6 +991,7 @@ interfaces.implement {
-- { "leftskip", "dimen" },
-- { "rightskip", "dimen" },
{ "align" },
+ { "option" },
{ "line", "integer" },
{ "stack" },
}
diff --git a/Master/texmf-dist/tex/context/base/typo-mar.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-mar.mkiv
index d5869b45998..90ccd46e2f0 100644
--- a/Master/texmf-dist/tex/context/base/typo-mar.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-mar.mkiv
@@ -13,6 +13,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% maybe dontleavehmode when scope is local
+
% todo: tags
% todo: force inline with option (saves pos)
% todo: margintitle (also less position then)
@@ -120,6 +122,7 @@
\c!scope=\v!global,
\c!width=,
% \c!stack=,
+ % \c!option=, % \v!paragraph (follow shape)
\c!line=0,
\c!anchor=\v!text,
\c!bottomspace=\strutdepth, % slack used for keeptogether
@@ -190,6 +193,10 @@
\unexpanded\def\typo_margins_data_nop_indeed[#dataparameters][#textparameters]#content%
{}
+% todo: naturalhbox
+
+\let\margindatahbox\naturalhbox % \hbox
+
\unexpanded\def\typo_margins_data_yes_indeed[#dataparameters][#textparameters]#content%
{\iffirstargument
\setupcurrentmargindata[#dataparameters]%
@@ -203,7 +210,7 @@
\edef\currentmargindatastrut{\margindataparameter\c!strut}%
\dostarttaggedchained\t!margintext\currentmargindata\??margindata
\ifcsname\currentmarginframedhash\s!parent\endcsname
- \setbox\nextbox\hbox \currentmarginreference \bgroup
+ \setbox\nextbox\margindatahbox \currentmarginreference \bgroup
\the\everymargindatacontent
\usemargindatastyleandcolor\c!style\c!color
\setupcurrentmarginframed[\c!location=\v!normal,#textparameters]%
@@ -222,7 +229,7 @@
\else
\edef\currentmargindatawidth{\margindataparameter\c!width}%
\ifx\currentmargindatawidth\empty
- \setbox\nextbox\hbox \currentmarginreference \bgroup
+ \setbox\nextbox\margindatahbox \currentmarginreference \bgroup
\typo_margins_data_synchronize
\the\everymargindatacontent
\usemargindatastyleandcolor\c!style\c!color
@@ -236,7 +243,7 @@
\egroup
\let\currentmarginfirstheight\empty
\else
- \setbox\nextbox\hbox \currentmarginreference \bgroup
+ \setbox\nextbox\margindatahbox \currentmarginreference \bgroup
\typo_margins_data_synchronize
\dosetraggedcommand{\margindataparameter\c!align}%
\vtop \bgroup
@@ -259,6 +266,7 @@
\dostoptagged
\fi
\ifdone
+ \edef\p_anchor{\margindataparameter\c!anchor}%
\anch_positions_initialize % we use positions at the lua end
\clf_savemargindata
location {\margindataparameter\c!location}%
@@ -266,6 +274,7 @@
category {\margindataparameter\c!category}%
name {\margindataparameter\c!name}%
scope {\margindataparameter\c!scope}%
+ option {\margindataparameter\c!option}%
number \nextbox
margin {\margindataparameter\c!margin}% local normal margin edge
distance \dimexpr\margindataparameter\c!distance\relax
@@ -280,7 +289,7 @@
\ifhmode
inline true %
\fi
- anchor {\margindataparameter\c!anchor}%
+ anchor {\p_anchor\ifx\p_anchor\v!region:0\fi}% kind of a hack to force column anchoring (for now)
%
% we're not in forgetall
%
@@ -339,44 +348,44 @@
% lines
-\definemargindata [inleftmargin] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!style=,\c!color=]
-\definemargindata [inrightmargin] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!style=,\c!color=]
-\definemargindata [inoutermargin] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!style=,\c!color=]
-\definemargindata [ininnermargin] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!style=,\c!color=]
+\definemargindata [\v!inleftmargin] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!style=,\c!color=]
+\definemargindata [\v!inrightmargin] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!style=,\c!color=]
+\definemargindata [\v!inoutermargin] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!style=,\c!color=]
+\definemargindata [\v!ininnermargin] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!style=,\c!color=]
-\definemargindata [inleftedge] [\v!left ] [\c!margin=\v!edge ,\c!width=\leftedgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
-\definemargindata [inrightedge] [\v!right] [\c!margin=\v!edge ,\c!width=\rightedgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
-\definemargindata [inouteredge] [\v!outer] [\c!margin=\v!edge ,\c!width=\outeredgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
-\definemargindata [ininneredge] [\v!inner] [\c!margin=\v!edge ,\c!width=\inneredgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
+\definemargindata [\v!inleftedge] [\v!left ] [\c!margin=\v!edge ,\c!width=\leftedgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
+\definemargindata [\v!inrightedge] [\v!right] [\c!margin=\v!edge ,\c!width=\rightedgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
+\definemargindata [\v!inouteredge] [\v!outer] [\c!margin=\v!edge ,\c!width=\outeredgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
+\definemargindata [\v!ininneredge] [\v!inner] [\c!margin=\v!edge ,\c!width=\inneredgewidth ,\c!style=,\c!color=,\c!category=\v!edge]
-\definemargindata [atleftmargin] [\v!left ] [\c!margin=\v!normal,\c!width=\leftmarginwidth ,\c!style=,\c!color=]
-\definemargindata [atrightmargin] [\v!right] [\c!margin=\v!normal,\c!width=\rightmarginwidth,\c!style=,\c!color=]
+\definemargindata [\v!atleftmargin] [\v!left ] [\c!margin=\v!normal,\c!width=\leftmarginwidth ,\c!style=,\c!color=]
+\definemargindata [\v!atrightmargin] [\v!right] [\c!margin=\v!normal,\c!width=\rightmarginwidth,\c!style=,\c!color=]
-% text
+% text: \v!added
-\definemargindata [inleft] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!align=\v!flushright]
-\definemargindata [inright] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft]
-\definemargindata [inouter] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!align=\v!inner]
-\definemargindata [ininner] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!align=\v!outer]
+\definemargindata [\v!inleft] [\v!left ] [\c!margin=\v!margin,\c!width=\leftmarginwidth ,\c!align=\v!flushright]
+\definemargindata [\v!inright] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft]
+\definemargindata [\v!inouter] [\v!outer] [\c!margin=\v!margin,\c!width=\outermarginwidth,\c!align=\v!inner]
+\definemargindata [\v!ininner] [\v!inner] [\c!margin=\v!margin,\c!width=\innermarginwidth,\c!align=\v!outer]
% no longer auto auto-other
-\definemargindata [inmargin] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright]
-\definemargindata [inother] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft]
+\definemargindata [\v!inmargin] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright]
+\definemargindata [\v!inother] [\v!right] [\c!margin=\v!margin,\c!width=\rightmarginwidth,\c!align=\v!flushleft]
-\definemargindata [margintext] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright,\c!stack=\v!yes]
+\definemargindata [\v!margintext] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright,\c!stack=\v!yes]
\setupmarginframed [\v!left ] [\c!method=\v!first,\c!align=\v!flushright,\s!parent=\??marginframed] % we could autoparent when no define yet
\setupmarginframed [\v!right] [\c!method=\v!first,\c!align=\v!flushleft, \s!parent=\??marginframed]
\setupmarginframed [\v!outer] [\c!method=\v!first,\c!align=\v!inner, \s!parent=\??marginframed]
\setupmarginframed [\v!inner] [\c!method=\v!first,\c!align=\v!outer, \s!parent=\??marginframed]
-\definemarginframed [inleft] [\v!left ]
-\definemarginframed [inright] [\v!right]
-\definemarginframed [inouter] [\v!outer]
-\definemarginframed [ininner] [\v!inner]
-\definemarginframed [inmargin] [\v!inleft]
-\definemarginframed [inother] [\v!inright]
+\definemarginframed [\v!inleft] [\v!left ]
+\definemarginframed [\v!inright] [\v!right]
+\definemarginframed [\v!inouter] [\v!outer]
+\definemarginframed [\v!ininner] [\v!inner]
+\definemarginframed [\v!inmargin] [\v!inleft]
+\definemarginframed [\v!inother] [\v!inright]
\let\marginword \margintext
\let\margintitle \margintext
diff --git a/Master/texmf-dist/tex/context/base/typo-pag.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-pag.lua
index 53f79fcfc69..355becff667 100644
--- a/Master/texmf-dist/tex/context/base/typo-pag.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-pag.lua
@@ -49,7 +49,7 @@ local enabled = false
trackers.register("parbuilders.keeptogether", function(v) trace_keeptogether = v end)
-- todo: also support lines = 3 etc (e.g. dropped caps) but how to set that
--- when no hlists are there ? ... maybe the local_par
+-- when no hlists are there ?
function parbuilders.registertogether(line,specification) -- might change
if not specification then
@@ -133,7 +133,7 @@ local function keeptogether(start,a)
end
elseif id == glue_code then
-- hm, breakpoint, maybe turn this into kern
- total = total + getfield(getfield(current,"spec"),"width")
+ total = total + getfield(current,"width")
if trace_keeptogether then
report_keeptogether("%s, index %s, total %p, threshold %p","glue",a,total,threshold)
end
diff --git a/Master/texmf-dist/tex/context/base/typo-pag.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-pag.mkiv
index 30d2b51b73d..30d2b51b73d 100644
--- a/Master/texmf-dist/tex/context/base/typo-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-pag.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-par.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-par.mkiv
index 8572f31b83b..8572f31b83b 100644
--- a/Master/texmf-dist/tex/context/base/typo-par.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-par.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-prc.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-prc.lua
index cde66df0087..cde66df0087 100644
--- a/Master/texmf-dist/tex/context/base/typo-prc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-prc.lua
diff --git a/Master/texmf-dist/tex/context/base/typo-prc.mkvi b/Master/texmf-dist/tex/context/base/mkiv/typo-prc.mkvi
index 49a16569647..49a16569647 100644
--- a/Master/texmf-dist/tex/context/base/typo-prc.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-prc.mkvi
diff --git a/Master/texmf-dist/tex/context/base/typo-rep.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-rep.lua
index d95eff68e0f..a8925a2ceab 100644
--- a/Master/texmf-dist/tex/context/base/typo-rep.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-rep.lua
@@ -26,7 +26,7 @@ local tonode = nuts.tonode
local getnext = nuts.getnext
local getchar = nuts.getchar
-local getid = nuts.getid
+local isglyph = nuts.isglyph
local getattr = nuts.getattr
@@ -89,11 +89,11 @@ function nodes.handlers.stripping(head)
head = tonut(head)
local current, done = head, false
while current do
- if getid(current) == glyph_code then
+ local char, id = isglyph(current)
+ if char then
-- it's more efficient to keep track of what needs to be kept
local todo = getattr(current,a_stripping)
if todo == 1 then
- local char = getchar(current)
local what = glyphs[char]
if what then
head, current = process(what,head,current,char)
diff --git a/Master/texmf-dist/tex/context/base/typo-rep.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-rep.mkiv
index c1146997e33..c1146997e33 100644
--- a/Master/texmf-dist/tex/context/base/typo-rep.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-rep.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-scr.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-scr.mkiv
index 6249c390a93..6249c390a93 100644
--- a/Master/texmf-dist/tex/context/base/typo-scr.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-scr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-spa.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-spa.lua
index 519ba3f34fb..f00e3ae6b39 100644
--- a/Master/texmf-dist/tex/context/base/typo-spa.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-spa.lua
@@ -32,11 +32,10 @@ local tonode = nuts.tonode
local getnext = nuts.getnext
local getprev = nuts.getprev
-local getchar = nuts.getchar
-local getid = nuts.getid
local getfont = nuts.getfont
local getattr = nuts.getattr
local setattr = nuts.setattr
+local isglyph = nuts.isglyph
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
@@ -84,13 +83,12 @@ function spacings.handler(head)
-- head is always begin of par (whatsit), so we have at least two prev nodes
-- penalty followed by glue
while start do
- local id = getid(start)
- if id == glyph_code then
+ local char, id = isglyph(start)
+ if char then
local attr = getattr(start,a_spacings)
if attr and attr > 0 then
local data = mapping[attr]
if data then
- local char = getchar(start)
local map = data.characters[char]
setattr(start,a_spacings,unsetvalue) -- needed?
if map then
diff --git a/Master/texmf-dist/tex/context/base/typo-spa.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-spa.mkiv
index 2e3e71bf3b3..2e3e71bf3b3 100644
--- a/Master/texmf-dist/tex/context/base/typo-spa.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-spa.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-sus.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-sus.lua
index 0fe8e143adc..ce193333050 100644
--- a/Master/texmf-dist/tex/context/base/typo-sus.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-sus.lua
@@ -42,16 +42,17 @@ local tonut = nodes.tonut
local tonode = nodes.tonode
local getid = nuts.getid
-local getchar = nuts.getchar
local getprev = nuts.getprev
local getnext = nuts.getnext
local getfield = nuts.getfield
local getattr = nuts.getattr
local getfont = nuts.getfont
local getlist = nuts.getlist
+local isglyph = nuts.isglyph
local setfield = nuts.setfield
local setattr = nuts.setattr
+local setlist = nuts.setlist
local setcolor = nodes.tracers.colors.set
local insert_before = nuts.insert_before
@@ -82,7 +83,7 @@ local function special(n)
elseif id == penalty_code then
return true
elseif id == glue_code then
- local width = getfield(getfield(n,"spec"),"width")
+ local width = getfield(n,"width")
return width < threshold
elseif id == hlist_code then
local width = getfield(n,"width")
@@ -117,7 +118,7 @@ local function mark(head,current,id,color)
if id == glue_code then
-- the glue can have stretch and/or shrink so the rule can overlap with the
-- following glyph .. no big deal as that one then sits on top of the rule
- local width = getfield(getfield(current,"spec"),"width")
+ local width = getfield(current,"width")
local rule = new_rule(width)
local kern = new_kern(-width)
head = insert_before(head,current,rule)
@@ -165,9 +166,8 @@ function typesetters.marksuspects(head)
local lastdone = nil
while current do
if getattr(current,a_suspecting) then
- local id = getid(current)
- if id == glyph_code then
- local char = getchar(current)
+ local char, id = isglyph(current)
+ if char then
local code = categories[char]
local done = false
if punctuation[code] then
@@ -275,7 +275,7 @@ local function showsuspects(head)
if list then
local l = showsuspects(list)
if l ~= list then
- setfield(current,"list",l)
+ setlist(current,l)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/typo-sus.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-sus.mkiv
index fe44e63277b..fe44e63277b 100644
--- a/Master/texmf-dist/tex/context/base/typo-sus.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-sus.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-tal.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-tal.lua
index 5663c3bd995..a67cd0a4b47 100644
--- a/Master/texmf-dist/tex/context/base/typo-tal.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-tal.lua
@@ -42,10 +42,12 @@ local getid = nuts.getid
local getfont = nuts.getfont
local getchar = nuts.getchar
local getfield = nuts.getfield
-local setfield = nuts.setfield
-
local getattr = nuts.getattr
+local isglyph = nuts.isglyph
+
+local setfield = nuts.setfield
local setattr = nuts.setattr
+local setchar = nuts.setchar
local insert_node_before = nuts.insert_before
local insert_node_after = nuts.insert_after
@@ -53,9 +55,10 @@ local traverse_list_by_id = nuts.traverse_id
local dimensions_of_list = nuts.dimensions
local first_glyph = nuts.first_glyph
+local setglue = nuts.setglue
+
local nodepool = nuts.pool
local new_kern = nodepool.kern
-local new_gluespec = nodepool.gluespec
local tracers = nodes.tracers
local setcolor = tracers.colors.set
@@ -195,9 +198,8 @@ function characteralign.handler(originalhead,where)
-- we can think of constraints
if method == v_number then
while current do
- local id = getid(current)
- if id == glyph_code then
- local char = getchar(current)
+ local char, id = isglyph(current)
+ if char then
local font = getfont(current)
-- local unicode = unicodes[font][char]
local unicode = fontcharacters[font][char].unicode or char -- ignore tables
@@ -228,7 +230,7 @@ function characteralign.handler(originalhead,where)
setcolor(sign,"darkyellow")
end
else
- setfield(sign,"char",new)
+ setchar(sign,new)
if trace_split then
setcolor(sign,"darkmagenta")
end
@@ -259,9 +261,7 @@ function characteralign.handler(originalhead,where)
local prev = getprev(current)
if next and prev and getid(next) == glyph_code and getid(prev) == glyph_code then -- too much checking
local width = fontcharacters[getfont(b_start)][separator or period].width
- -- local spec = getfield(current,"spec")
- -- free_spec(spec)
- setfield(current,"spec",new_gluespec(width))
+ setglue(current,width)
setattr(current,a_character,punctuationspace)
if a_start then
a_stop = current
@@ -274,9 +274,8 @@ function characteralign.handler(originalhead,where)
end
else
while current do
- local id = getid(current)
- if id == glyph_code then
- local char = getchar(current)
+ local char, id = isglyph(current)
+ if char then
local font = getfont(current)
-- local unicode = unicodes[font][char]
local unicode = fontcharacters[font][char].unicode or char -- ignore tables
diff --git a/Master/texmf-dist/tex/context/base/typo-tal.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-tal.mkiv
index 570f1a1f56e..570f1a1f56e 100644
--- a/Master/texmf-dist/tex/context/base/typo-tal.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-tal.mkiv
diff --git a/Master/texmf-dist/tex/context/base/typo-txt.mkvi b/Master/texmf-dist/tex/context/base/mkiv/typo-txt.mkvi
index 7562fe70cd0..7562fe70cd0 100644
--- a/Master/texmf-dist/tex/context/base/typo-txt.mkvi
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-txt.mkvi
diff --git a/Master/texmf-dist/tex/context/base/typo-wrp.lua b/Master/texmf-dist/tex/context/base/mkiv/typo-wrp.lua
index 07639392ff7..394e15090db 100644
--- a/Master/texmf-dist/tex/context/base/typo-wrp.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-wrp.lua
@@ -19,7 +19,7 @@ local nuts = nodes.nuts
local tonut = nodes.tonut
local tonode = nodes.tonode
-local findtail = nuts.tail
+local find_node_tail = nuts.tail
local getprev = nuts.getprev
local getid = nuts.getid
local getsubtype = nuts.getsubtype
@@ -60,7 +60,7 @@ end
function wrappers.handler(head)
local head = tonut(head)
if head then
- local tail = findtail(head)
+ local tail = find_node_tail(head)
local done = false
head, tail, done = remove_dangling_crlf(head,tail) -- will be action chain
end
diff --git a/Master/texmf-dist/tex/context/base/typo-wrp.mkiv b/Master/texmf-dist/tex/context/base/mkiv/typo-wrp.mkiv
index 0538a966273..4b18785bd33 100644
--- a/Master/texmf-dist/tex/context/base/typo-wrp.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/typo-wrp.mkiv
@@ -62,4 +62,8 @@
\let\spac_crlf_placeholder\empty
\to \everysetnostrut
+\appendtoks
+ \let\spac_crlf\space
+\to \everysimplifycommands
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/unic-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/unic-ini.lua
index 132c92efaab..132c92efaab 100644
--- a/Master/texmf-dist/tex/context/base/unic-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/unic-ini.lua
diff --git a/Master/texmf-dist/tex/context/base/unic-ini.mkiv b/Master/texmf-dist/tex/context/base/mkiv/unic-ini.mkiv
index 13ad4bdb98f..13ad4bdb98f 100644
--- a/Master/texmf-dist/tex/context/base/unic-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mkiv/unic-ini.mkiv
diff --git a/Master/texmf-dist/tex/context/base/util-deb.lua b/Master/texmf-dist/tex/context/base/mkiv/util-deb.lua
index ee732b3b54c..ee732b3b54c 100644
--- a/Master/texmf-dist/tex/context/base/util-deb.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-deb.lua
diff --git a/Master/texmf-dist/tex/context/base/util-dim.lua b/Master/texmf-dist/tex/context/base/mkiv/util-dim.lua
index 2bdb870e7a4..2bdb870e7a4 100644
--- a/Master/texmf-dist/tex/context/base/util-dim.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-dim.lua
diff --git a/Master/texmf-dist/tex/context/base/util-env.lua b/Master/texmf-dist/tex/context/base/mkiv/util-env.lua
index b72226900a9..b72226900a9 100644
--- a/Master/texmf-dist/tex/context/base/util-env.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-env.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/util-fil.lua b/Master/texmf-dist/tex/context/base/mkiv/util-fil.lua
new file mode 100644
index 00000000000..28c92c7c3c3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-fil.lua
@@ -0,0 +1,167 @@
+if not modules then modules = { } end modules ['util-fil'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local byte = string.byte
+local extract = bit32.extract
+
+-- Here are a few helpers (the starting point were old ones I used for parsing
+-- flac files). In Lua 5.3 we can probably do this better. Some code will move
+-- here.
+
+utilities = utilities or { }
+local files = { }
+utilities.files = files
+
+local zerobased = { }
+
+function files.open(filename,zb)
+ local f = io.open(filename,"rb")
+ if f then
+ zerobased[f] = zb or false
+ end
+ return f
+end
+
+function files.close(f)
+ zerobased[f] = nil
+ f:close()
+end
+
+function files.size(f)
+ return f:seek("end")
+end
+
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n - 1)
+ end
+end
+
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek() + 1
+ end
+end
+
+function files.look(f,n,chars)
+ local p = f:seek()
+ local s = f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+
+function files.skip(f,n)
+ if n == 1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+
+function files.readchar(f)
+ return f:read(1)
+end
+
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+
+function files.readinteger1(f) -- one byte
+ local n = byte(f:read(1))
+ if n >= 0x80 then
+ return n - 0xFF - 1
+ else
+ return n
+ end
+end
+
+files.readcardinal1 = files.readbyte -- one byte
+files.readcardinal = files.readcardinal1
+files.readinteger = files.readinteger1
+
+function files.readcardinal2(f)
+ local a, b = byte(f:read(2),1,2)
+ return 0x100 * a + b
+end
+
+function files.readinteger2(f)
+ local a, b = byte(f:read(2),1,2)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1
+ else
+ return n
+ end
+end
+
+function files.readcardinal3(f)
+ local a, b, c = byte(f:read(3),1,3)
+ return 0x10000 * a + 0x100 * b + c
+end
+
+function files.readcardinal4(f)
+ local a, b, c, d = byte(f:read(4),1,4)
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+end
+
+function files.readinteger4(f)
+ local a, b, c, d = byte(f:read(4),1,4)
+ local n = 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+ if n >= 0x8000000 then
+ return n - 0xFFFFFFFF - 1
+ else
+ return n
+ end
+end
+
+function files.readfixed4(f)
+ local a, b, c, d = byte(f:read(4),1,4)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1 + (0x100 * c + d)/0xFFFF
+ else
+ return n + (0x100 * c + d)/0xFFFF
+ end
+end
+
+function files.read2dot14(f)
+ local a, b = byte(f:read(2),1,2)
+ local n = 0x100 * a + b
+ local m = extract(n,0,30)
+ if n > 0x7FFF then
+ n = extract(n,30,2)
+ return m/0x4000 - 4
+ else
+ n = extract(n,30,2)
+ return n + m/0x4000
+ end
+end
+
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
diff --git a/Master/texmf-dist/tex/context/base/util-fmt.lua b/Master/texmf-dist/tex/context/base/mkiv/util-fmt.lua
index 371a5dfcece..371a5dfcece 100644
--- a/Master/texmf-dist/tex/context/base/util-fmt.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-fmt.lua
diff --git a/Master/texmf-dist/tex/context/base/util-jsn.lua b/Master/texmf-dist/tex/context/base/mkiv/util-jsn.lua
index bbe25d89df8..bbe25d89df8 100644
--- a/Master/texmf-dist/tex/context/base/util-jsn.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-jsn.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gm.lua b/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gm.lua
new file mode 100644
index 00000000000..4c5254721df
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gm.lua
@@ -0,0 +1,69 @@
+if not modules then modules = { } end modules ['util-lib-imp-gm'] = {
+ version = 1.001,
+ comment = "a mkiv swiglib module",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local graphicmagick = utilities.graphicmagick or { }
+utilities.graphicmagick = graphicmagick
+
+local report_gm = logs.reporter("swiglib gm")
+
+local gm = swiglib("gmwand.core")
+
+if gm then
+ report_gm("library loaded")
+ -- inspect(table.sortedkeys(gm))
+else
+ return
+end
+
+local nofruns = 0
+
+function graphicmagick.convert(specification)
+ --
+ nofruns = nofruns + 1
+ statistics.starttiming(graphicmagick)
+ --
+ local inputname = specification.inputname
+ if not inputname or inputname == "" then
+ report_gm("invalid run %s, no inputname specified",nofruns)
+ statistics.stoptiming(graphicmagick)
+ return false
+ end
+ local outputname = specification.outputname
+ if not outputname or outputname == "" then
+ outputname = file.replacesuffix(inputname,"pdf")
+ end
+ --
+ if not lfs.isfile(inputname) then
+ report_gm("invalid run %s, input file %a is not found",nofruns,inputname)
+ statistics.stoptiming(graphicmagick)
+ return false
+ end
+ --
+ report_gm("run %s, input file %a, outputfile %a",nofruns,inputname,outputname)
+ local magick_wand = gm.NewMagickWand()
+ gm.MagickReadImage(magick_wand,inputname)
+ gm.MagickWriteImage(magick_wand,outputname)
+ gm.DestroyMagickWand(magick_wand)
+ --
+ statistics.stoptiming(graphicmagick)
+end
+
+function graphicmagick.statistics(report)
+ local runtime = statistics.elapsedtime(graphicmagick)
+ if report then
+ report_gm("nofruns %s, runtime %s",nofruns,runtime)
+ else
+ return {
+ runtime = runtime,
+ nofruns = nofruns,
+ }
+ end
+end
+
+-- graphicmagick.convert { inputname = "t:/sources/hacker.jpg", outputname = "e:/tmp/hacker.png" }
+-- graphicmagick.statistics(true)
diff --git a/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gs.lua b/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gs.lua
new file mode 100644
index 00000000000..8fd2dd45826
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-lib-imp-gs.lua
@@ -0,0 +1,212 @@
+if not modules then modules = { } end modules ['util-lib-imp-gs'] = {
+ version = 1.001,
+ comment = "a mkiv swiglib module",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local insert = table.insert
+local formatters = string.formatters
+
+local ghostscript = utilities.ghostscript or { }
+utilities.ghostscript = ghostscript
+
+local report_gs = logs.reporter("swiglib gs")
+
+local gs = swiglib("gs.core")
+local helpers = swiglib("helpers.core")
+
+if gs then
+ report_gs("library loaded")
+ -- inspect(table.sortedkeys(gs))
+else
+ return
+end
+
+-- these could be generic helpers
+
+local function luatable_to_c_array(t)
+ local gsargv = helpers.new_char_p_array(#t)
+ for i=1,#t do
+ helpers.char_p_array_setitem(gsargv,i-1,t[i])
+ end
+ return gsargv
+end
+
+-- the more abstract interface
+
+local interface = { }
+ghostscript.interface = interface
+
+function interface.new()
+
+ local instance = helpers.new_void_p_p()
+ local result = gs.gsapi_new_instance(instance,nil)
+ local buffer = nil
+ local object = { }
+
+ local function reader(instance,str,len)
+ return 0
+ end
+
+ local function writer(instance,str,len)
+ if buffer then
+ str = buffer .. str
+ buffer = nil
+ end
+ if not string.find(str,"[\n\r]$") then
+ str, buffer = string.match(str,"(.-)([^\n\r]+)$")
+ end
+ local log = object.log
+ for s in string.gmatch(str,"[^\n\r]+") do
+ insert(log,s)
+ report_gs(s)
+ end
+ return len
+ end
+
+ if result < 0 then
+ return nil
+ else
+ local job = helpers.void_p_p_value(instance)
+ gs.gsapi_set_stdio_callback(job,reader,writer,writer) -- could be option
+ object.instance = instance
+ object.job = job
+ object.result = 0
+ object.log = { }
+ return object
+ end
+end
+
+function interface.dispose(run)
+ if run.job then
+ gs.gsapi_delete_instance(run.job)
+ run.job = nil
+ end
+ if run.instance then
+ helpers.delete_void_p_p(run.instance)
+ run.instance = nil
+ end
+end
+
+function interface.init(run,options)
+ if run.job then
+ if not options then
+ options = { "ps2pdf" }
+ else
+ insert(options,1,"ps2pdf") -- a dummy
+ end
+ run.log = { }
+ local ct = luatable_to_c_array(options)
+ local result = gs.gsapi_init_with_args(run.job,#options,ct)
+ helpers.delete_char_p_array(ct)
+ run.initresult = result
+ return result >= 0
+ end
+end
+
+function interface.exit(run)
+ if run.job then
+ local result = gs.gsapi_exit(run.job)
+ if run.initresult == 0 or run.initresult == gs.e_Quit then
+ run.result = result
+ end
+ run.exitresult = result
+ return run.result >= 0
+ end
+end
+
+function interface.process(run,options)
+ interface.init(run,options)
+ return interface.exit(run)
+end
+
+-- end of more abstract interface
+
+local nofruns = 0
+
+function ghostscript.convert(specification)
+ --
+ nofruns = nofruns + 1
+ statistics.starttiming(ghostscript)
+ --
+ local inputname = specification.inputname
+ if not inputname or inputname == "" then
+ report_gs("invalid run %s, no inputname specified",nofruns)
+ statistics.stoptiming(ghostscript)
+ return false
+ end
+ local outputname = specification.outputname
+ if not outputname or outputname == "" then
+ outputname = file.replacesuffix(inputname,"pdf")
+ end
+ --
+ if not lfs.isfile(inputname) then
+ report_gs("invalid run %s, input file %a is not found",nofruns,inputname)
+ statistics.stoptiming(ghostscript)
+ return false
+ end
+ --
+ local device = specification.device
+ if not device or device == "" then
+ device = "pdfwrite"
+ end
+ --
+ local code = specification.code
+ if not code or code == "" then
+ code = ".setpdfwrite"
+ end
+ --
+ local run = interface.new()
+ if gsinstance then
+ report_gs("invalid run %s, initialization error",nofruns)
+ statistics.stoptiming(ghostscript)
+ return false
+ end
+ --
+ local options = specification.options or { }
+ --
+ insert(options,"-dNOPAUSE")
+ insert(options,"-dBATCH")
+ insert(options,"-dSAFER")
+ insert(options,formatters["-sDEVICE=%s"](device))
+ insert(options,formatters["-sOutputFile=%s"](outputname))
+ insert(options,"-c")
+ insert(options,code)
+ insert(options,"-f")
+ insert(options,inputname)
+ --
+ report_gs("run %s, input file %a, outputfile %a",nofruns,inputname,outputname)
+ report_gs("")
+ local okay = interface.process(run,options)
+ report_gs("")
+ --
+ interface.dispose(run)
+ --
+ statistics.stoptiming(ghostscript)
+ if okay then
+ return outputname
+ else
+ report_gs("run %s quit with errors",nofruns)
+ return false
+ end
+end
+
+function ghostscript.statistics(report)
+ local runtime = statistics.elapsedtime(ghostscript)
+ if report then
+ report_gs("nofruns %s, runtime %s",nofruns,runtime)
+ else
+ return {
+ runtime = runtime,
+ nofruns = nofruns,
+ }
+ end
+end
+
+-- for i=1,100 do
+-- ghostscript.convert { inputname = "temp.eps" }
+-- ghostscript.convert { inputname = "t:/escrito/tiger.eps" }
+-- end
+-- ghostscript.statistics(true)
diff --git a/Master/texmf-dist/tex/context/base/util-lib.lua b/Master/texmf-dist/tex/context/base/mkiv/util-lib.lua
index 2601b2e5781..2601b2e5781 100644
--- a/Master/texmf-dist/tex/context/base/util-lib.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-lib.lua
diff --git a/Master/texmf-dist/tex/context/base/util-lua.lua b/Master/texmf-dist/tex/context/base/mkiv/util-lua.lua
index e1dcdc94d57..e1dcdc94d57 100644
--- a/Master/texmf-dist/tex/context/base/util-lua.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-lua.lua
diff --git a/Master/texmf-dist/tex/context/base/util-mrg.lua b/Master/texmf-dist/tex/context/base/mkiv/util-mrg.lua
index 690188ef879..690188ef879 100644
--- a/Master/texmf-dist/tex/context/base/util-mrg.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-mrg.lua
diff --git a/Master/texmf-dist/tex/context/base/util-pck.lua b/Master/texmf-dist/tex/context/base/mkiv/util-pck.lua
index 7be5e8f4244..83b85cd9486 100644
--- a/Master/texmf-dist/tex/context/base/util-pck.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-pck.lua
@@ -10,12 +10,12 @@ if not modules then modules = { } end modules ['util-pck'] = {
local next, tostring, type = next, tostring, type
local sort, concat = table.sort, table.concat
-local sortedhashkeys, sortedkeys = table.sortedhashkeys, table.sortedkeys
+local sortedhashkeys, sortedkeys, tohash = table.sortedhashkeys, table.sortedkeys, table.tohash
utilities = utilities or { }
utilities.packers = utilities.packers or { }
local packers = utilities.packers
-packers.version = 1.00
+packers.version = 1.01
local function hashed(t)
local s, ns = { }, 0
@@ -48,33 +48,33 @@ packers.simplehashed = simplehashed
-- but in the latest greatest versions (lua 5.2) we really need to sort the keys in order
-- not to get endless runs due to a difference in tuc files.
-local function pack(t,keys,hash,index)
+local function pack(t,keys,skip,hash,index)
if t then
- -- for k, v in next, t do
- -- local sk = sortedkeys(t)
- local sk = sortedhashkeys(t)
+ local sk = #t > 0 and sortedkeys(t) or sortedhashkeys(t)
for i=1,#sk do
local k = sk[i]
- local v = t[k]
- --
- if type(v) == "table" then
- pack(v,keys,hash,index)
- if keys[k] then
- local h = hashed(v)
- local i = hash[h]
- if not i then
- i = #index + 1
- index[i] = v
- hash[h] = i
+ if not skip or not skip[k] then
+ local v = t[k]
+ --
+ if type(v) == "table" then
+ pack(v,keys,skip,hash,index)
+ if keys[k] then
+ local h = hashed(v)
+ local i = hash[h]
+ if not i then
+ i = #index + 1
+ index[i] = v
+ hash[h] = i
+ end
+ t[k] = i
end
- t[k] = i
end
end
end
end
end
-local function unpack(t,keys,index)
+local function unpack(t,keys,skip,index)
if t then
for k, v in next, t do
if keys[k] and type(v) == "number" then
@@ -84,17 +84,18 @@ local function unpack(t,keys,index)
t[k] = v
end
end
- if type(v) == "table" then
- unpack(v,keys,index)
+ if type(v) == "table" and (not skip or not skip[k]) then
+ unpack(v,keys,skip,index)
end
end
end
end
-function packers.new(keys,version)
+function packers.new(keys,version,skip)
return {
version = version or packers.version,
- keys = table.tohash(keys),
+ keys = tohash(keys),
+ skip = tohash(skip),
hash = { },
index = { },
}
@@ -102,13 +103,14 @@ end
function packers.pack(t,p,shared)
if shared then
- pack(t,p.keys,p.hash,p.index)
+ pack(t,p.keys,p.skip,p.hash,p.index)
elseif not t.packer then
- pack(t,p.keys,p.hash,p.index)
+ pack(t,p.keys,p.skip,p.hash,p.index)
if #p.index > 0 then
t.packer = {
version = p.version or packers.version,
keys = p.keys,
+ skip = p.skip,
index = p.index,
}
end
@@ -120,13 +122,13 @@ end
function packers.unpack(t,p,shared)
if shared then
if p then
- unpack(t,p.keys,p.index)
+ unpack(t,p.keys,p.skip,p.index)
end
else
local tp = t.packer
if tp then
if tp.version == (p and p.version or packers.version) then
- unpack(t,tp.keys,tp.index)
+ unpack(t,tp.keys,tp.skip,tp.index)
else
return false
end
diff --git a/Master/texmf-dist/tex/context/base/util-prs.lua b/Master/texmf-dist/tex/context/base/mkiv/util-prs.lua
index a3c1c6f8f23..01138f1bbb3 100644
--- a/Master/texmf-dist/tex/context/base/util-prs.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-prs.lua
@@ -24,6 +24,8 @@ local sortedhash = table.sortedhash
local sortedkeys = table.sortedkeys
local tohash = table.tohash
+local hashes = { }
+utilities.parsers.hashes = hashes
-- we share some patterns
local digit = R("09")
@@ -315,10 +317,17 @@ end
local pattern = Cf(Ct("") * Cg(C((1-S(", "))^1) * S(", ")^0 * Cc(true))^1,rawset)
-function utilities.parsers.settings_to_set(str,t)
+function utilities.parsers.settings_to_set(str)
return str and lpegmatch(pattern,str) or { }
end
+hashes.settings_to_set = table.setmetatableindex(function(t,k) -- experiment, not public
+ local v = k and lpegmatch(pattern,k) or { }
+ t[k] = v
+ return v
+end)
+
+getmetatable(hashes.settings_to_set).__mode = "kv" -- could be an option (maybe sharing makes sense)
function parsers.simple_hash_to_string(h, separator)
local t, tn = { }, 0
diff --git a/Master/texmf-dist/tex/context/base/util-ran.lua b/Master/texmf-dist/tex/context/base/mkiv/util-ran.lua
index 50d0a7082ac..50d0a7082ac 100644
--- a/Master/texmf-dist/tex/context/base/util-ran.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-ran.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/util-sac.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sac.lua
new file mode 100644
index 00000000000..8a12e7cf06e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sac.lua
@@ -0,0 +1,202 @@
+if not modules then modules = { } end modules ['util-sac'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- experimental string access (some 3 times faster than file access when messing
+-- with bytes)
+
+local byte, sub = string.byte, string.sub
+local extract = bit32.extract
+
+utilities = utilities or { }
+local streams = { }
+utilities.streams = streams
+
+function streams.open(filename,zerobased)
+ local f = io.loaddata(filename)
+ return { f, 1, #f, zerobased or false }
+end
+
+function streams.close()
+ -- dummy
+end
+
+function streams.size(f)
+ return f and f[3] or 0
+end
+
+function streams.setposition(f,i)
+ if f[4] then
+ -- zerobased
+ if i <= 0 then
+ f[2] = 1
+ else
+ f[2] = i + 1
+ end
+ else
+ if i <= 1 then
+ f[2] = 1
+ else
+ f[2] = i
+ end
+ end
+end
+
+function streams.getposition(f)
+ if f[4] then
+ -- zerobased
+ return f[2] - 1
+ else
+ return f[2]
+ end
+end
+
+function streams.look(f,n,chars)
+ local b = f[2]
+ local e = b + n - 1
+ if chars then
+ return sub(f[1],b,e)
+ else
+ return byte(f[1],b,e)
+ end
+end
+
+function streams.skip(f,n)
+ f[2] = f[2] + n
+end
+
+function streams.readbyte(f)
+ local i = f[2]
+ f[2] = i + 1
+ return byte(f[1],i)
+end
+
+function streams.readbytes(f,n)
+ local i = f[2]
+ local j = i + n
+ f[2] = j
+ return byte(f[1],i,j-1)
+end
+
+function streams.skipbytes(f,n)
+ f[2] = f[2] + n
+end
+
+function streams.readchar(f)
+ local i = f[2]
+ f[2] = i + 1
+ return sub(f[1],i,i)
+end
+
+function streams.readstring(f,n)
+ local i = f[2]
+ local j = i + n
+ f[2] = j
+ return sub(f[1],i,j-1)
+end
+
+function streams.readinteger1(f) -- one byte
+ local i = f[2]
+ f[2] = i + 1
+ local n = byte(f[1],i)
+ if n >= 0x80 then
+ return n - 0xFF - 1
+ else
+ return n
+ end
+end
+
+streams.readcardinal1 = streams.readbyte -- one byte
+streams.readcardinal = streams.readcardinal1
+streams.readinteger = streams.readinteger1
+
+function streams.readcardinal2(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ return 0x100 * a + b
+end
+
+function streams.readinteger2(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1
+ else
+ return n
+ end
+end
+
+function streams.readcardinal3(f)
+ local i = f[2]
+ local j = i + 2
+ f[2] = j + 1
+ local a, b, c = byte(f[1],i,j)
+ return 0x10000 * a + 0x100 * b + c
+end
+
+function streams.readcardinal4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ return 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+end
+
+function streams.readinteger4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ local n = 0x1000000 * a + 0x10000 * b + 0x100 * c + d
+ if n >= 0x8000000 then
+ return n - 0xFFFFFFFF - 1
+ else
+ return n
+ end
+end
+
+function streams.readfixed4(f)
+ local i = f[2]
+ local j = i + 3
+ f[2] = j + 1
+ local a, b, c, d = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ if n >= 0x8000 then
+ return n - 0xFFFF - 1 + (0x100 * c + d)/0xFFFF
+ else
+ return n + (0x100 * c + d)/0xFFFF
+ end
+end
+
+function streams.read2dot14(f)
+ local i = f[2]
+ local j = i + 1
+ f[2] = j + 1
+ local a, b = byte(f[1],i,j)
+ local n = 0x100 * a + b
+ local m = extract(n,0,30)
+ if n > 0x7FFF then
+ n = extract(n,30,2)
+ return m/0x4000 - 4
+ else
+ n = extract(n,30,2)
+ return n + m/0x4000
+ end
+end
+
+function streams.skipshort(f,n)
+ f[2] = f[2] + 2*(n or 1)
+end
+
+function streams.skiplong(f,n)
+ f[2] = f[2] + 4*(n or 1)
+end
diff --git a/Master/texmf-dist/tex/context/base/util-sbx.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sbx.lua
index 260e8b3b5a7..260e8b3b5a7 100644
--- a/Master/texmf-dist/tex/context/base/util-sbx.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sbx.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sci.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sci.lua
index c3e24cd9d81..43d873b6377 100644
--- a/Master/texmf-dist/tex/context/base/util-sci.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sci.lua
@@ -1,3 +1,11 @@
+if not modules then modules = { } end modules ['util-sci'] = {
+ version = 1.001,
+ comment = "companion to m-scite.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
local gsub, sub, find = string.gsub, string.sub, string.find
local concat = table.concat
local formatters = string.formatters
diff --git a/Master/texmf-dist/tex/context/base/util-seq.lua b/Master/texmf-dist/tex/context/base/mkiv/util-seq.lua
index 08fc4e95cb8..32fe5909624 100644
--- a/Master/texmf-dist/tex/context/base/util-seq.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-seq.lua
@@ -347,5 +347,6 @@ function sequencers.nodeprocessor(t,nofarguments) -- todo: handle 'kind' in plug
end
end
local processor = #calls > 0 and formatters[template_yes](concat(vars,"\n"),args,concat(calls,"\n")) or template_nop
+-- print(processor)
return processor
end
diff --git a/Master/texmf-dist/tex/context/base/util-soc.lua b/Master/texmf-dist/tex/context/base/mkiv/util-soc.lua
index 3a52ee86de3..3a52ee86de3 100644
--- a/Master/texmf-dist/tex/context/base/util-soc.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-soc.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql-imp-client.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-client.lua
index e09dfde945a..9a0fbc29983 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-imp-client.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-client.lua
@@ -24,6 +24,7 @@ local splitdata = helpers.splitdata
local replacetemplate = utilities.templates.replace
local serialize = sql.serialize
local deserialize = sql.deserialize
+local getserver = sql.getserver
-- Experiments with an p/action demonstrated that there is not much gain. We could do a runtime
-- capture but creating all the small tables is not faster and it doesn't work well anyway.
@@ -43,6 +44,7 @@ local entry = Cs((unescaped + (1-separator-newline))^0) -- C 10% faster t
local getfirst = Ct( entry * (separator * (entry+empty))^0) + newline
local skipfirst = (1-newline)^1 * newline
+local skipdashes = (P("-")+separator)^1 * newline
local getfirstline = C((1-newline)^0)
local cache = { }
@@ -105,7 +107,11 @@ local function splitdata(data) -- todo: hash on first line ... maybe move to cli
end
end
p = Cf(Ct("") * p,rawset) * newline^1
+if getserver() == "mssql" then
+ p = skipfirst * skipdashes * Ct(p^0)
+else
p = skipfirst * Ct(p^0)
+end
cache[first] = { parser = p, keys = keys }
local entries = lpegmatch(p,data)
return entries or { }, keys
@@ -121,9 +127,31 @@ end
helpers.splitdata = splitdata
helpers.getdata = getdata
-local function dataprepared(specification)
+local t_runner = {
+ mysql = [[mysql --batch --user="%username%" --password="%password%" --host="%host%" --port=%port% --database="%database%" --default-character-set=utf8 < "%queryfile%" > "%resultfile%"]],
+ mssql = [[sqlcmd -S %host% %?U: -U "%username%" ?% %?P: -P "%password%" ?% -I -W -w 65535 -s"]] .. "\t" .. [[" -m 1 -i "%queryfile%" -o "%resultfile%"]],
+}
+
+local t_preamble = {
+ mysql = [[
+SET GLOBAL SQL_MODE=ANSI_QUOTES;
+ ]],
+ mssql = [[
+:setvar SQLCMDERRORLEVEL 1
+SET QUOTED_IDENTIFIER ON;
+SET NOCOUNT ON;
+%?database: USE %database%; ?%
+ ]],
+}
+
+local function dataprepared(specification,client)
local query = preparetemplate(specification)
if query then
+ local preamble = t_preamble[getserver()] or t_preamble.mysql
+ if preamble then
+ preamble = replacetemplate(preamble,specification.variables,'sql')
+ query = preamble .. "\n" .. query
+ end
io.savedata(specification.queryfile,query)
os.remove(specification.resultfile)
if trace_queries then
@@ -137,7 +165,8 @@ local function dataprepared(specification)
end
end
-local function datafetched(specification,runner)
+local function datafetched(specification,client)
+ local runner = t_runner[getserver()] or t_runner.mysql
local command = replacetemplate(runner,specification)
if trace_sql then
local t = osclock()
@@ -191,11 +220,11 @@ local function execute(specification)
report_state("error in specification")
return
end
- if not dataprepared(specification) then
+ if not dataprepared(specification,methods.client) then
report_state("error in preparation")
return
end
- if not datafetched(specification,methods.client.runner) then
+ if not datafetched(specification,methods.client) then
report_state("error in fetching, query: %s",string.collapsespaces(io.loaddata(specification.queryfile)))
return
end
@@ -248,7 +277,6 @@ end
local celltemplate = "cells[%s]"
methods.client = {
- runner = [[mysql --batch --user="%username%" --password="%password%" --host="%host%" --port=%port% --database="%database%" --default-character-set=utf8 < "%queryfile%" > "%resultfile%"]],
execute = execute,
usesfiles = true,
wraptemplate = wraptemplate,
diff --git a/Master/texmf-dist/tex/context/base/util-sql-imp-library.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-library.lua
index 15754e26ab1..15754e26ab1 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-imp-library.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-library.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-swiglib.lua
index af7012392b6..af7012392b6 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-imp-swiglib.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-imp-swiglib.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql-loggers.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-loggers.lua
index ceb1ff75cfa..ceb1ff75cfa 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-loggers.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-loggers.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql-sessions.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-sessions.lua
index 76bb91962fa..76bb91962fa 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-sessions.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-sessions.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql-tickets.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-tickets.lua
index 5e958299deb..5e958299deb 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-tickets.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-tickets.lua
diff --git a/Master/texmf-dist/tex/context/base/mkiv/util-sql-tracers.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-tracers.lua
new file mode 100644
index 00000000000..44e32d256c6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-tracers.lua
@@ -0,0 +1,71 @@
+if not modules then modules = { } end modules ['util-sql-tracers'] = {
+ version = 1.001,
+ comment = "companion to m-sql.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local sql = utilities.sql
+local tracers = { }
+sql.tracers = tracers
+
+sql.setmethod("swiglib")
+
+local gsub, lower = string.gsub, string.lower
+
+local t_names = {
+ mysql = [[SHOW TABLES FROM `%database%`]],
+ mssql = [[SELECT table_name FROM %database%.information_schema.tables;]],
+ mssql = [[SELECT "name" FROM "%database%"."sys"."databases" ORDER BY "name";]],
+ mssql = [[SELECT name FROM "%database%"."sys"."objects" WHERE "type" IN ('P', 'U', 'V', 'TR', 'FN', 'TF');]],
+}
+
+local t_fields = {
+ mysql = [[SHOW FIELDS FROM `%database%`.`%table%` ]],
+ mssql = [[SELECT column_name "field", data_type "type", column_default "default", is_nullable "null" FROM %database%.information_schema.columns WHERE table_name='%table%']],
+}
+
+function sql.tracers.gettables(presets)
+ local servertype = sql.getserver()
+
+ local results, keys = sql.execute {
+ presets = presets,
+ template = t_names[servertype],
+ variables = {
+ database = presets.database,
+ },
+ }
+
+ local key = keys and keys[1]
+ local tables = { }
+
+ if keys then
+ for i=1,#results do
+ local name = results[i][key]
+ local results, keys = sql.execute {
+ presets = presets,
+ template = t_fields[servertype],
+ variables = {
+ database = presets.database,
+ table = name
+ },
+ }
+ if #results > 0 then
+ for i=1,#results do
+ local result = table.loweredkeys(results[i])
+ -- ms cleanup
+ result.default = gsub(result.default,"^[%(']+(.-)[%)']+$","%1")
+ result.null = lower(result.null)
+ --
+ results[i] = result
+ end
+ tables[name] = results
+ else
+ -- a view
+ end
+ end
+ end
+
+ return tables
+end
diff --git a/Master/texmf-dist/tex/context/base/util-sql-users.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql-users.lua
index a1f4339461c..a1f4339461c 100644
--- a/Master/texmf-dist/tex/context/base/util-sql-users.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql-users.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sql.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sql.lua
index 1c1766edf93..84cbb1692bb 100644
--- a/Master/texmf-dist/tex/context/base/util-sql.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sql.lua
@@ -283,6 +283,7 @@ helpers.preparetemplate = preparetemplate
-- -- -- we delay setting this -- -- --
local currentmethod
+local currentserver
local function firstexecute(...)
local execute = methods[currentmethod].execute
@@ -295,7 +296,20 @@ function sql.setmethod(method)
sql.execute = firstexecute
end
+function sql.setserver(server)
+ currentserver = server
+end
+
+function sql.getmethod()
+ return currentmethod
+end
+
+function sql.getserver()
+ return currentserver
+end
+
sql.setmethod("library")
+sql.setserver("mysql")
-- helper:
diff --git a/Master/texmf-dist/tex/context/base/util-sta.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sta.lua
index 27ab5a624b6..27ab5a624b6 100644
--- a/Master/texmf-dist/tex/context/base/util-sta.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sta.lua
diff --git a/Master/texmf-dist/tex/context/base/util-sto.lua b/Master/texmf-dist/tex/context/base/mkiv/util-sto.lua
index 8aafca425b8..d21267d7a8c 100644
--- a/Master/texmf-dist/tex/context/base/util-sto.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-sto.lua
@@ -113,22 +113,16 @@ local f_index = {
["number"] = f_number,
}
-local t_index = {
- ["empty"] = { __index = f_empty },
- ["self"] = { __index = f_self },
- ["table"] = { __index = f_table },
- ["number"] = { __index = f_number },
-}
-
function table.setmetatableindex(t,f)
if type(t) ~= "table" then
f, t = t, { }
end
local m = getmetatable(t)
+ local i = f_index[f] or f
if m then
- m.__index = f_index[f] or f
+ m.__index = i
else
- setmetatable(t,t_index[f] or { __index = f })
+ setmetatable(t,{ __index = i })
end
return t
end
@@ -137,19 +131,16 @@ local f_index = {
["ignore"] = f_ignore,
}
-local t_index = {
- ["ignore"] = { __newindex = f_ignore },
-}
-
function table.setmetatablenewindex(t,f)
if type(t) ~= "table" then
f, t = t, { }
end
local m = getmetatable(t)
+ local i = f_index[f] or f
if m then
- m.__newindex = f_index[f] or f
+ m.__newindex = i
else
- setmetatable(t,t_index[f] or { __newindex = f })
+ setmetatable(t,{ __newindex = i })
end
return t
end
diff --git a/Master/texmf-dist/tex/context/base/util-str.lua b/Master/texmf-dist/tex/context/base/mkiv/util-str.lua
index c2139b155c2..28b75dbc599 100644
--- a/Master/texmf-dist/tex/context/base/util-str.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-str.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['util-str'] = {
license = "see context related readme files"
}
-utilities = utilities or {}
+utilities = utilities or { }
utilities.strings = utilities.strings or { }
local strings = utilities.strings
@@ -354,7 +354,16 @@ function string.autosingle(s,sep)
return ("'" .. tostring(s) .. "'")
end
-local tracedchars = { }
+local tracedchars = { [0] =
+ -- the regular bunch
+ "[null]", "[soh]", "[stx]", "[etx]", "[eot]", "[enq]", "[ack]", "[bel]",
+ "[bs]", "[ht]", "[lf]", "[vt]", "[ff]", "[cr]", "[so]", "[si]",
+ "[dle]", "[dc1]", "[dc2]", "[dc3]", "[dc4]", "[nak]", "[syn]", "[etb]",
+ "[can]", "[em]", "[sub]", "[esc]", "[fs]", "[gs]", "[rs]", "[us]",
+ -- plus space
+ "[space]", -- 0x20
+}
+
string.tracedchars = tracedchars
strings.tracers = tracedchars
@@ -813,6 +822,8 @@ end
-- aA b cC d eE f gG hH iI jJ lL mM N o p qQ r sS tT uU wW xX z
+-- extensions : %!tag!
+
local builder = Cs { "start",
start = (
(
diff --git a/Master/texmf-dist/tex/context/base/util-tab.lua b/Master/texmf-dist/tex/context/base/mkiv/util-tab.lua
index 618f34ceef8..a6239adf409 100644
--- a/Master/texmf-dist/tex/context/base/util-tab.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-tab.lua
@@ -545,6 +545,7 @@ local f_val_str = formatters["%w%q,"]
local f_val_boo = formatters["%w%l,"]
local f_val_not = formatters["%w{},"]
local f_val_seq = formatters["%w{ %, t },"]
+local f_fin_seq = formatters[" %, t }"]
local f_table_return = formatters["return {"]
local f_table_name = formatters["%s={"]
@@ -556,20 +557,21 @@ local f_table_finish = formatters["}"]
local spaces = utilities.strings.newrepeater(" ")
-local serialize = table.serialize -- the extensive one, the one we started with
+local original_serialize = table.serialize -- the extensive one, the one we started with
-- there is still room for optimization: index run, key run, but i need to check with the
-- latest lua for the value of #n (with holes) .. anyway for tracing purposes we want
-- indices / keys being sorted, so it will never be real fast
-function table.serialize(root,name,specification)
+local function serialize(root,name,specification)
if type(specification) == "table" then
- return serialize(root,name,specification) -- the original one
+ return original_serialize(root,name,specification) -- the original one
end
- local t -- = { }
- local n = 1
+ local t -- = { }
+ local n = 1
+ local unknown = false
-- local function simple_table(t)
-- local ts = #t
@@ -614,6 +616,7 @@ function table.serialize(root,name,specification)
return nil
end
end
+ local haszero = t[0]
if n == nt then
local tt = { }
for i=1,nt do
@@ -630,6 +633,23 @@ function table.serialize(root,name,specification)
end
end
return tt
+ elseif haszero and (n == nt + 1) then
+ local tt = { }
+ for i=0,nt do
+ local v = t[i]
+ local tv = type(v)
+ if tv == "number" then
+ tt[i+1] = v -- not needed tostring(v)
+ elseif tv == "string" then
+ tt[i+1] = format("%q",v) -- f_string(v)
+ elseif tv == "boolean" then
+ tt[i+1] = v and "true" or "false"
+ else
+ return nil
+ end
+ end
+ tt[1] = "[0] = " .. tt[1]
+ return tt
end
end
return nil
@@ -680,7 +700,7 @@ function table.serialize(root,name,specification)
elseif tv == "string" then
n = n + 1 t[n] = f_val_str(depth,v)
elseif tv == "table" then
- if next(v) == nil then
+ if next(v) == nil then -- tricky as next is unpredictable in a hash
n = n + 1 t[n] = f_val_not(depth)
else
local st = simple_table(v)
@@ -692,6 +712,8 @@ function table.serialize(root,name,specification)
end
elseif tv == "boolean" then
n = n + 1 t[n] = f_val_boo(depth,v)
+ elseif unknown then
+ n = n + 1 t[n] = f_val_str(depth,tostring(v))
end
elseif tv == "number" then
if tk == "number" then
@@ -700,6 +722,8 @@ function table.serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_num(depth,k,v)
elseif tk == "boolean" then
n = n + 1 t[n] = f_key_boo_value_num(depth,k,v)
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_num(depth,tostring(k),v)
end
elseif tv == "string" then
if tk == "number" then
@@ -708,6 +732,8 @@ function table.serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_str(depth,k,v)
elseif tk == "boolean" then
n = n + 1 t[n] = f_key_boo_value_str(depth,k,v)
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_str(depth,tostring(k),v)
end
elseif tv == "table" then
if next(v) == nil then
@@ -717,6 +743,8 @@ function table.serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_not(depth,k)
elseif tk == "boolean" then
n = n + 1 t[n] = f_key_boo_value_not(depth,k)
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_not(depth,tostring(k))
end
else
local st = simple_table(v)
@@ -728,6 +756,8 @@ function table.serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_seq(depth,k,st)
elseif tk == "boolean" then
n = n + 1 t[n] = f_key_boo_value_seq(depth,k,st)
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_seq(depth,tostring(k),st)
end
end
elseif tv == "boolean" then
@@ -737,6 +767,18 @@ function table.serialize(root,name,specification)
n = n + 1 t[n] = f_key_str_value_boo(depth,k,v)
elseif tk == "boolean" then
n = n + 1 t[n] = f_key_boo_value_boo(depth,k,v)
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_boo(depth,tostring(k),v)
+ end
+ else
+ if tk == "number" then
+ n = n + 1 t[n] = f_key_num_value_str(depth,k,tostring(v))
+ elseif tk == "string" then
+ n = n + 1 t[n] = f_key_str_value_str(depth,k,tostring(v))
+ elseif tk == "boolean" then
+ n = n + 1 t[n] = f_key_boo_value_str(depth,k,tostring(v))
+ elseif unknown then
+ n = n + 1 t[n] = f_key_str_value_str(depth,tostring(k),tostring(v))
end
end
end
@@ -775,10 +817,21 @@ function table.serialize(root,name,specification)
end
-- Let's forget about empty tables.
if next(root) ~= nil then
- do_serialize(root,name,1,0)
+ local st = simple_table(root)
+ if st then
+ return t[1] .. f_fin_seq(st) -- todo: move up and in one go
+ else
+ do_serialize(root,name,1,0)
+ end
end
end
n = n + 1
t[n] = f_table_finish()
return concat(t,"\n")
end
+
+table.serialize = serialize
+
+if setinspector then
+ setinspector("table",function(v) if type(v) == "table" then print(serialize(v,"table",{})) return true end end)
+end
diff --git a/Master/texmf-dist/tex/context/base/util-tpl.lua b/Master/texmf-dist/tex/context/base/mkiv/util-tpl.lua
index 468dd429c98..468dd429c98 100644
--- a/Master/texmf-dist/tex/context/base/util-tpl.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-tpl.lua
diff --git a/Master/texmf-dist/tex/context/base/util-you.lua b/Master/texmf-dist/tex/context/base/mkiv/util-you.lua
index 79a0e83e781..79a0e83e781 100644
--- a/Master/texmf-dist/tex/context/base/util-you.lua
+++ b/Master/texmf-dist/tex/context/base/mkiv/util-you.lua
diff --git a/Master/texmf-dist/tex/context/base/mult-def.mkiv b/Master/texmf-dist/tex/context/base/mult-def.mkiv
deleted file mode 100644
index d547a7b8170..00000000000
--- a/Master/texmf-dist/tex/context/base/mult-def.mkiv
+++ /dev/null
@@ -1,177 +0,0 @@
-%D \module
-%D [ file=mult-def,
-%D version=2008.10.22,
-%D title=\CONTEXT\ Multilingual Macros,
-%D subtitle=Definitions,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-\unprotect
-
-\installcorenamespace{multilingual}
-
-\setvalue{\??multilingual czech}{cs}
-\setvalue{\??multilingual german}{de}
-\setvalue{\??multilingual english}{en}
-\setvalue{\??multilingual french}{fr}
-\setvalue{\??multilingual italian}{it}
-\setvalue{\??multilingual dutch}{nl}
-\setvalue{\??multilingual persian}{pe}
-\setvalue{\??multilingual romanian}{ro}
-
-\def\userinterfacetag{\ifcsname\??multilingual\currentinterface\endcsname\csname\??multilingual\currentinterface\endcsname\else en\fi}
-\def\userresponsestag{\ifcsname\??multilingual\currentresponses\endcsname\csname\??multilingual\currentresponses\endcsname\else en\fi}
-
-% \input mult-\userinterfacetag \relax
-% \input mult-m\userresponsestag \relax
-
-\clf_setuserinterface{\userinterfacetag}{\userresponsestag}
-
-% start todo in mult-def.lua:
-
-\def\c!openup {openup}
-
-\def\v!serifnormal {serifnormal}
-\def\v!serifbold {serifbold}
-\def\v!sansnormal {sansnormal}
-%def\v!sansbold {sansbold}
-\def\v!mononormal {mononormal}
-\def\v!monobold {monobold}
-
-\def\c!functionstyle {functionstyle}
-\def\c!functioncolor {functioncolor}
-
-\def\v!extremestretch {extremestretch}
-
-\def\v!alphabetic {alphabetic}
-\def\v!Alphabetic {Alphabetic}
-
-\def\c!svgstyle {svgstyle}
-
-\def\c!translate {translate}
-
-\def\c!nextleft {nextleft}
-\def\c!nextright {nextright}
-\def\c!nextleftquotation {nextleftquotation}
-\def\c!nextrightquotation{nextrightquotation}
-
-\def\c!profile {profile}
-
-\def\c!fences {fences}
-\def\c!words {words}
-\def\c!characters {characters}
-\def\c!hyphens {hyphens}
-\def\c!joiners {joiners}
-\def\c!leftwords {leftwords}
-\def\c!rightwords {rightwords}
-\def\c!keeptogether {keeptogether}
-\def\c!viewerprefix {viewerprefix}
-
-\def\v!display {display}
-\def\v!inline {inline}
-
-\def\v!camel {camel}
-
-\def\c!dataset {dataset}
-\def\c!sectionblock {sectionblock}
-\def\c!language {language}
-\def\c!compressseparator {compressseparator}
-\def\c!renderingsetup {renderingsetup}
-\def\c!filler {filler}
-\def\c!resources {resources}
-\def\c!first {first}
-\def\c!last {last}
-\def\c!quotechar {quotechar}
-\def\c!commentchar {commentchar}
-\def\c!symbolcommand {symbolcommand}
-\def\c!xmlsetup {xmlsetup}
-\def\c!comma {comma}
-\def\c!period {period}
-\def\c!monthconversion {monthconversion}
-\def\c!authorconversion {authorconversion}
-\def\c!comment {comment}
-\def\c!textalign {textalign}
-\def\c!up {up}
-\def\c!down {down}
-\def\c!instance {instance}
-\def\c!database {database}
-\def\c!group {group}
-\def\c!groupsuffix {groupsuffix}
-\def\c!properties {properties}
-\def\c!journalconversion {journalconversion}
-\def\c!register {register}
-\def\c!note {note}
-\def\c!field {field}
-\def\c!ignore {ignore}
-\def\c!specification {specification}
-
-\def\c!pageleft {pageleft}
-\def\c!pageright {pageright}
-\def\c!pagesep {pagesep}
-\def\c!lastpagesep {lastpagesep}
-\def\c!finalpagesep {finalpagesep}
-\def\c!pageconnector {pageconnector}
-
-\def\c!referencemethod {referencemethod} % forward both
-
-\def\v!dataset {dataset}
-\def\v!compressseparator {compressseparator}
-\def\v!notation {notation}
-\def\v!endnote {endnote}
-\def\v!interactive {interactive}
-\def\v!autopunctuation {autopunctuation}
-\def\v!integral {integral}
-\def\v!shiftup {shiftup}
-\def\v!shiftdown {shiftdown}
-\def\v!construction {construction}
-\def\v!unframed {unframed}
-\def\v!chemical {chemical}
-\def\v!chemicals {chemicals}
-\def\v!words {words}
-\def\v!combination {combination}
-\def\v!norepeat {norepeat}
-\def\v!mixed {mixed}
-\def\v!centerlast {centerlast}
-\def\v!long {long}
-\def\v!box {box}
-
-\def\v!noline {noline}
-\def\v!noheight {noheight}
-\def\v!nodepth {nodepth}
-
-\def\v!bookmark {bookmark}
-
-\def\v!vfenced {vfenced}
-\def\v!bothtext {bothtext}
-
-\def\s!traditional {traditional}
-
-\def\c!HL {HL}
-\def\c!VL {VL}
-\def\c!NL {NL}
-
-\ifdefined\v!kerncharacters\else \def\v!kerncharacters{kerncharacters} \fi % no time now for translations should be a e! actually
-\ifdefined\v!letterspacing \else \def\v!letterspacing {letterspacing} \fi % no time now for translations should be a e! actually
-\ifdefined\v!stretched \else \def\v!stretched {stretched} \fi
-\ifdefined\v!vulgarfraction\else \def\v!vulgarfraction{vulgarfraction} \fi
-\ifdefined\v!block \else \def\v!block {block} \fi
-\ifdefined\v!rule \else \def\v!rule {rule} \fi
-\ifdefined\v!oldstyle \else \def\v!oldstyle {oldstyle} \fi
-
-\def\c!etallimit {etallimit}
-\def\c!etaldisplay{etaldisplay}
-\def\c!etaltext {etaltext}
-\def\c!etaloption {etaloption}
-
-\ifdefined\v!simplelist\else \def\v!simplelist{simplelist} \fi
-\ifdefined\v!sorting \else \def\v!sorting {sorting} \fi
-\ifdefined\v!synonym \else \def\v!synonym {synonym} \fi
-
-% stop todo
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/node-fnt.lua b/Master/texmf-dist/tex/context/base/node-fnt.lua
deleted file mode 100644
index 774a687186a..00000000000
--- a/Master/texmf-dist/tex/context/base/node-fnt.lua
+++ /dev/null
@@ -1,556 +0,0 @@
-if not modules then modules = { } end modules ['node-fnt'] = {
- version = 1.001,
- comment = "companion to font-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
-}
-
-if not context then os.exit() end -- generic function in node-dum
-
-local next, type = next, type
-local concat, keys = table.concat, table.keys
-
-local nodes, node, fonts = nodes, node, fonts
-
-local trace_characters = false trackers .register("nodes.characters", function(v) trace_characters = v end)
-local trace_fontrun = false trackers .register("nodes.fontrun", function(v) trace_fontrun = v end)
-
-local force_discrun = true directives.register("nodes.discrun", function(v) force_discrun = v end)
-local force_basepass = true directives.register("nodes.basepass", function(v) force_basepass = v end)
-
-local report_fonts = logs.reporter("fonts","processing")
-
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
-
-local otf = fonts.handlers.otf
-
-local starttiming = statistics.starttiming
-local stoptiming = statistics.stoptiming
-
-local nodecodes = nodes.nodecodes
-local handlers = nodes.handlers
-
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-local tonode = nuts.tonode
-
-local getattr = nuts.getattr
-local getid = nuts.getid
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getfield = nuts.getfield
-
-local traverse_id = nuts.traverse_id
-
-local glyph_code = nodecodes.glyph
-local disc_code = nodecodes.disc
-
-local setmetatableindex = table.setmetatableindex
-
--- some tests with using an array of dynamics[id] and processes[id] demonstrated
--- that there was nothing to gain (unless we also optimize other parts)
---
--- maybe getting rid of the intermediate shared can save some time
-
--- potential speedup: check for subtype < 256 so that we can remove that test
--- elsewhere, danger: injected nodes will not be dealt with but that does not
--- happen often; we could consider processing sublists but that might need more
--- checking later on; the current approach also permits variants
-
-local run = 0
-
-local setfontdynamics = { }
-local fontprocesses = { }
-
--- setmetatableindex(setfontdynamics, function(t,font)
--- local tfmdata = fontdata[font]
--- local shared = tfmdata.shared
--- local v = shared and shared.dynamics and otf.setdynamics or false
--- t[font] = v
--- return v
--- end)
-
-setmetatableindex(setfontdynamics, function(t,font)
- local tfmdata = fontdata[font]
- local shared = tfmdata.shared
- local f = shared and shared.dynamics and otf.setdynamics or false
- if f then
- local v = { }
- t[font] = v
- setmetatableindex(v,function(t,k)
- local v = f(font,k)
- t[k] = v
- return v
- end)
- return v
- else
- t[font] = false
- return false
- end
-end)
-
-setmetatableindex(fontprocesses, function(t,font)
- local tfmdata = fontdata[font]
- local shared = tfmdata.shared -- we need to check shared, only when same features
- local processes = shared and shared.processes
- if processes and #processes > 0 then
- t[font] = processes
- return processes
- else
- t[font] = false
- return false
- end
-end)
-
-fonts.hashes.setdynamics = setfontdynamics
-fonts.hashes.processes = fontprocesses
-
--- if we forget about basemode we don't need to test too much here and we can consider running
--- over sub-ranges .. this involves a bit more initializations but who cares .. in that case we
--- also need to use the stop criterium (we already use head too) ... we cannot use traverse
--- then, so i'll test it on some local clone first ... the only pitfall is changed directions
--- inside a run which means that we need to keep track of this which in turn complicates matters
--- in a way i don't like
-
--- we need to deal with the basemode fonts here and can only run over ranges as we
--- otherwise get luatex craches due to all kind of asserts in the disc/lig builder
-
-local ligaturing = node.ligaturing
-local kerning = node.kerning
-
-function handlers.characters(head)
- -- either next or not, but definitely no already processed list
- starttiming(nodes)
-
- local usedfonts = { }
- local attrfonts = { }
- local basefonts = { }
- local a, u, b = 0, 0, 0
- local basefont = nil
- local prevfont = nil
- local prevattr = 0
- local done = false
-
- if trace_fontrun then
- run = run + 1
- report_fonts()
- report_fonts("checking node list, run %s",run)
- report_fonts()
- local n = tonut(head)
- while n do
- local id = getid(n)
- if id == glyph_code then
- local font = getfont(n)
- local attr = getattr(n,0) or 0
- report_fonts("font %03i, dynamic %03i, glyph %C",font,attr,getchar(n))
- elseif id == disc_code then
- report_fonts("[disc] %s",nodes.listtoutf(n,true,false,n))
- else
- report_fonts("[%s]",nodecodes[id])
- end
- n = getnext(n)
- end
- end
-
- local nuthead = tonut(head)
-
- for n in traverse_id(glyph_code,nuthead) do
- if getsubtype(n) < 256 then -- all are 1
- local font = getfont(n)
- local attr = getattr(n,0) or 0 -- zero attribute is reserved for fonts in context
- if font ~= prevfont or attr ~= prevattr then
- if basefont then
- basefont[2] = tonode(getprev(n)) -- todo, save p
- end
- if attr > 0 then
- local used = attrfonts[font]
- if not used then
- used = { }
- attrfonts[font] = used
- end
- if not used[attr] then
- local fd = setfontdynamics[font]
- if fd then
- used[attr] = fd[attr]
- a = a + 1
- elseif force_basepass then
- b = b + 1
- basefont = { tonode(n), nil }
- basefonts[b] = basefont
- end
- end
- else
- local used = usedfonts[font]
- if not used then
- local fp = fontprocesses[font]
- if fp then
- usedfonts[font] = fp
- u = u + 1
- elseif force_basepass then
- b = b + 1
- basefont = { tonode(n), nil }
- basefonts[b] = basefont
- end
- end
- end
- prevfont = font
- prevattr = attr
- end
- end
- end
-
- -- could be an optional pass : seldom needed, only for documentation as a discretionary
- -- with pre/post/replace will normally not occur on it's own
-
- if force_discrun then
-
- -- basefont is not supported in disc only runs ... it would mean a lot of
- -- ranges .. we could try to run basemode as a separate processor run but
- -- not for now (we can consider it when the new node code is tested
-
- -- local prevfont = nil
- -- local prevattr = 0
-
- for d in traverse_id(disc_code,nuthead) do
- -- we could use first_glyph
- local r = getfield(n,"replace") -- good enough
- if r then
- for n in traverse_id(glyph_code,r) do
- if getsubtype(n) < 256 then -- all are 1
- local font = getfont(n)
- local attr = getattr(n,0) or 0 -- zero attribute is reserved for fonts in context
- if font ~= prevfont or attr ~= prevattr then
- if attr > 0 then
- local used = attrfonts[font]
- if not used then
- used = { }
- attrfonts[font] = used
- end
- if not used[attr] then
- local fd = setfontdynamics[font]
- if fd then
- used[attr] = fd[attr]
- a = a + 1
- end
- end
- else
- local used = usedfonts[font]
- if not used then
- local fp = fontprocesses[font]
- if fp then
- usedfonts[font] = fp
- u = u + 1
- end
- end
- end
- prevfont = font
- prevattr = attr
- end
- end
- break
- end
- end
- end
-
- end
-
- if trace_fontrun then
- report_fonts()
- report_fonts("statics : %s",u > 0 and concat(keys(usedfonts)," ") or "none")
- report_fonts("dynamics: %s",a > 0 and concat(keys(attrfonts)," ") or "none")
- report_fonts("built-in: %s",b > 0 and b or "none")
- report_fonts()
- end
- -- in context we always have at least 2 processors
- if u == 0 then
- -- skip
- elseif u == 1 then
- local font, processors = next(usedfonts)
- for i=1,#processors do
- local h, d = processors[i](head,font,0)
- if d then
- head = h or head
- done = true
- end
- end
- else
- for font, processors in next, usedfonts do
- for i=1,#processors do
- local h, d = processors[i](head,font,0)
- if d then
- head = h or head
- done = true
- end
- end
- end
- end
- if a == 0 then
- -- skip
- elseif a == 1 then
- local font, dynamics = next(attrfonts)
- for attribute, processors in next, dynamics do -- attr can switch in between
- for i=1,#processors do
- local h, d = processors[i](head,font,attribute)
- if d then
- head = h or head
- done = true
- end
- end
- end
- else
- for font, dynamics in next, attrfonts do
- for attribute, processors in next, dynamics do -- attr can switch in between
- for i=1,#processors do
- local h, d = processors[i](head,font,attribute)
- if d then
- head = h or head
- done = true
- end
- end
- end
- end
- end
- if b == 0 then
- -- skip
- elseif b == 1 then
- -- only one font
- local front = head == start
- local range = basefonts[1]
- local start = range[1]
- local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then -- safeguard
- start = ligaturing(start)
- start = kerning(start)
- else
- -- something bad happened
- end
- if front then
- -- shouldn't happen
- head = start
- end
- else
- -- multiple fonts
- local front = head == start
- for i=1,b do
- local range = basefonts[i]
- local start = range[1]
- local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then -- safeguard
- start = ligaturing(start)
- start = kerning(start)
- else
- -- something bad happened
- end
- end
- if front then
- -- shouldn't happen
- head = start
- end
- end
- stoptiming(nodes)
- if trace_characters then
- nodes.report(head,done)
- end
- return head, true
-end
-
--- local formatters = string.formatters
-
--- local function make(processors,font,attribute)
--- _G.__temp = processors
--- local t = { }
--- for i=1,#processors do
--- if processors[i] then
--- t[#t+1] = formatters["local p_%s = _G.__temp[%s]"](i,i)
--- end
--- end
--- t[#t+1] = "return function(head,done)"
--- if #processors == 1 then
--- t[#t+1] = formatters["return p_%s(head,%s,%s)"](1,font,attribute or 0)
--- else
--- for i=1,#processors do
--- if processors[i] then
--- t[#t+1] = formatters["local h,d=p_%s(head,%s,%s) if d then head=h or head done=true end"](i,font,attribute or 0)
--- end
--- end
--- t[#t+1] = "return head, done"
--- end
--- t[#t+1] = "end"
--- t = concat(t,"\n")
--- t = load(t)(processors)
--- _G.__temp = nil
--- return t
--- end
-
--- setmetatableindex(fontprocesses, function(t,font)
--- local tfmdata = fontdata[font]
--- local shared = tfmdata.shared -- we need to check shared, only when same features
--- local processes = shared and shared.processes
--- if processes and #processes > 0 then
--- processes = make(processes,font,0)
--- t[font] = processes
--- return processes
--- else
--- t[font] = false
--- return false
--- end
--- end)
-
--- setmetatableindex(setfontdynamics, function(t,font)
--- local tfmdata = fontdata[font]
--- local shared = tfmdata.shared
--- local f = shared and shared.dynamics and otf.setdynamics or false
--- if f then
--- local v = { }
--- t[font] = v
--- setmetatableindex(v,function(t,k)
--- local v = f(font,k)
--- v = make(v,font,k)
--- t[k] = v
--- return v
--- end)
--- return v
--- else
--- t[font] = false
--- return false
--- end
--- end)
---
--- -- TODO: basepasses!
---
--- function handlers.characters(head)
--- -- either next or not, but definitely no already processed list
--- starttiming(nodes)
--- local usedfonts, attrfonts
--- local a, u, prevfont, prevattr, done = 0, 0, nil, 0, false
--- if trace_fontrun then
--- run = run + 1
--- report_fonts()
--- report_fonts("checking node list, run %s",run)
--- report_fonts()
--- local n = head
--- while n do
--- local id = n.id
--- if id == glyph_code then
--- local font = n.font
--- local attr = n[0] or 0
--- report_fonts("font %03i, dynamic %03i, glyph %s",font,attr,utf.char(n.char))
--- else
--- report_fonts("[%s]",nodecodes[n.id])
--- end
--- n = n.next
--- end
--- end
--- for n in traverse_id(glyph_code,head) do
--- -- if n.subtype<256 then -- all are 1
--- local font = n.font
--- local attr = n[0] or 0 -- zero attribute is reserved for fonts in context
--- if font ~= prevfont or attr ~= prevattr then
--- if attr > 0 then
--- if not attrfonts then
--- attrfonts = {
--- [font] = {
--- [attr] = setfontdynamics[font][attr]
--- }
--- }
--- a = 1
--- else
--- local used = attrfonts[font]
--- if not used then
--- attrfonts[font] = {
--- [attr] = setfontdynamics[font][attr]
--- }
--- a = a + 1
--- elseif not used[attr] then
--- used[attr] = setfontdynamics[font][attr]
--- a = a + 1
--- end
--- end
--- else
--- if not usedfonts then
--- local fp = fontprocesses[font]
--- if fp then
--- usedfonts = {
--- [font] = fp
--- }
--- u = 1
--- end
--- else
--- local used = usedfonts[font]
--- if not used then
--- local fp = fontprocesses[font]
--- if fp then
--- usedfonts[font] = fp
--- u = u + 1
--- end
--- end
--- end
--- end
--- prevfont = font
--- prevattr = attr
--- end
--- -- end
--- end
--- if trace_fontrun then
--- report_fonts()
--- report_fonts("statics : %s",(u > 0 and concat(keys(usedfonts)," ")) or "none")
--- report_fonts("dynamics: %s",(a > 0 and concat(keys(attrfonts)," ")) or "none")
--- report_fonts()
--- end
--- if not usedfonts then
--- -- skip
--- elseif u == 1 then
--- local font, processors = next(usedfonts)
--- head, done = processors(head,done)
--- else
--- for font, processors in next, usedfonts do
--- head, done = processors(head,done)
--- end
--- end
--- if not attrfonts then
--- -- skip
--- elseif a == 1 then
--- local font, dynamics = next(attrfonts)
--- for attribute, processors in next, dynamics do
--- head, done = processors(head,done)
--- end
--- else
--- for font, dynamics in next, attrfonts do
--- for attribute, processors in next, dynamics do
--- head, done = processors(head,done)
--- end
--- end
--- end
--- stoptiming(nodes)
--- if trace_characters then
--- nodes.report(head,done)
--- end
--- return head, true
--- end
-
-local d_protect_glyphs = nuts.protect_glyphs
-local d_unprotect_glyphs = nuts.unprotect_glyphs
-
-handlers.protectglyphs = function(n) return d_protect_glyphs (tonut(n)) end
-handlers.unprotectglyphs = function(n) return d_unprotect_glyphs(tonut(n)) end
-
--- function handlers.protectglyphs(h)
--- local h = tonut(h)
--- for n in traverse_id(disc_code,h) do
--- local d = getfield(n,"pre") if d then d_protect_glyphs(d) end
--- local d = getfield(n,"post") if d then d_protect_glyphs(d) end
--- local d = getfield(n,"replace") if d then d_protect_glyphs(d) end
--- end
--- return d_protect_glyphs(h)
--- end
diff --git a/Master/texmf-dist/tex/context/base/node-ini.lua b/Master/texmf-dist/tex/context/base/node-ini.lua
deleted file mode 100644
index 02d4c7a3fb8..00000000000
--- a/Master/texmf-dist/tex/context/base/node-ini.lua
+++ /dev/null
@@ -1,262 +0,0 @@
-if not modules then modules = { } end modules ['node-ini'] = {
- 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"
-}
-
---[[ldx--
-<p>Most of the code that had accumulated here is now separated in
-modules.</p>
---ldx]]--
-
--- this module is being reconstructed
-
-local next, type, tostring = next, type, tostring
-local gsub = string.gsub
-local concat, remove = table.concat, table.remove
-local sortedhash, sortedkeys, swapped = table.sortedhash, table.sortedkeys, table.swapped
-
---[[ldx--
-<p>Access to nodes is what gives <l n='luatex'/> its power. Here we
-implement a few helper functions. These functions are rather optimized.</p>
---ldx]]--
-
---[[ldx--
-<p>When manipulating node lists in <l n='context'/>, we will remove
-nodes and insert new ones. While node access was implemented, we did
-quite some experiments in order to find out if manipulating nodes
-in <l n='lua'/> was feasible from the perspective of performance.</p>
-
-<p>First of all, we noticed that the bottleneck is more with excessive
-callbacks (some gets called very often) and the conversion from and to
-<l n='tex'/>'s datastructures. However, at the <l n='lua'/> end, we
-found that inserting and deleting nodes in a table could become a
-bottleneck.</p>
-
-<p>This resulted in two special situations in passing nodes back to
-<l n='tex'/>: a table entry with value <type>false</type> is ignored,
-and when instead of a table <type>true</type> is returned, the
-original table is used.</p>
-
-<p>Insertion is handled (at least in <l n='context'/> as follows. When
-we need to insert a node at a certain position, we change the node at
-that position by a dummy node, tagged <type>inline</type> which itself
-has_attribute the original node and one or more new nodes. Before we pass
-back the list we collapse the list. Of course collapsing could be built
-into the <l n='tex'/> engine, but this is a not so natural extension.</p>
-
-<p>When we collapse (something that we only do when really needed), we
-also ignore the empty nodes. [This is obsolete!]</p>
---ldx]]--
-
-nodes = nodes or { }
-local nodes = nodes
-nodes.handlers = nodes.handlers or { }
-
-local allocate = utilities.storage.allocate
-local formatcolumns = utilities.formatters.formatcolumns
-
--- there will be more of this:
-
-local skipcodes = allocate {
- [ 0] = "userskip",
- [ 1] = "lineskip",
- [ 2] = "baselineskip",
- [ 3] = "parskip",
- [ 4] = "abovedisplayskip",
- [ 5] = "belowdisplayskip",
- [ 6] = "abovedisplayshortskip",
- [ 7] = "belowdisplayshortskip",
- [ 8] = "leftskip",
- [ 9] = "rightskip",
- [ 10] = "topskip",
- [ 11] = "splittopskip",
- [ 12] = "tabskip",
- [ 13] = "spaceskip",
- [ 14] = "xspaceskip",
- [ 15] = "parfillskip",
- [ 16] = "thinmuskip",
- [ 17] = "medmuskip",
- [ 18] = "thickmuskip",
- [100] = "leaders",
- [101] = "cleaders",
- [102] = "xleaders",
- [103] = "gleaders",
-}
-
-local penaltycodes = allocate { -- unfortunately not used
- [ 0] = "userpenalty",
-}
-
-table.setmetatableindex(penaltycodes,function(t,k) return "userpenalty" end) -- not used anyway
-
-local noadcodes = allocate { -- simple nodes
- [ 0] = "ord",
- [ 1] = "opdisplaylimits",
- [ 2] = "oplimits",
- [ 3] = "opnolimits",
- [ 4] = "bin",
- [ 5] = "rel",
- [ 6] = "open",
- [ 7] = "close",
- [ 8] = "punct",
- [ 9] = "inner",
- [10] = "under",
- [11] = "over",
- [12] = "vcenter",
-}
-
-local listcodes = allocate {
- [ 0] = "unknown",
- [ 1] = "line",
- [ 2] = "box",
- [ 3] = "indent",
- [ 4] = "alignment", -- row or column
- [ 5] = "cell",
-}
-
-local glyphcodes = allocate {
- [0] = "character",
- [1] = "glyph",
- [2] = "ligature",
- [3] = "ghost",
- [4] = "left",
- [5] = "right",
-}
-
-local kerncodes = allocate {
- [0] = "fontkern",
- [1] = "userkern",
- [2] = "accentkern",
-}
-
-local mathcodes = allocate {
- [0] = "beginmath",
- [1] = "endmath",
-}
-
-local fillcodes = allocate {
- [0] = "stretch",
- [1] = "fi",
- [2] = "fil",
- [3] = "fill",
- [4] = "filll",
-}
-
-local margincodes = allocate {
- [0] = "left",
- [1] = "right",
-}
-
-local disccodes = allocate {
- [0] = "discretionary", -- \discretionary
- [1] = "explicit", -- \-
- [2] = "automatic", -- following a -
- [3] = "regular", -- by hyphenator: simple
- [4] = "first", -- by hyphenator: hard first item
- [5] = "second", -- by hyphenator: hard second item
-}
-
-local accentcodes = allocate {
- [0] = "bothflexible",
- [1] = "fixedtop",
- [2] = "fixedbottom",
- [3] = "fixedboth",
-}
-
-local fencecodes = allocate {
- [0] = "unset",
- [1] = "left",
- [2] = "middle",
- [3] = "right",
-}
-
-local function simplified(t)
- local r = { }
- for k, v in next, t do
- r[k] = gsub(v,"_","")
- end
- return r
-end
-
-local nodecodes = simplified(node.types())
-local whatcodes = simplified(node.whatsits())
-
-skipcodes = allocate(swapped(skipcodes,skipcodes))
-noadcodes = allocate(swapped(noadcodes,noadcodes))
-nodecodes = allocate(swapped(nodecodes,nodecodes))
-whatcodes = allocate(swapped(whatcodes,whatcodes))
-listcodes = allocate(swapped(listcodes,listcodes))
-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))
-margincodes = allocate(swapped(margincodes,margincodes))
-disccodes = allocate(swapped(disccodes,disccodes))
-accentcodes = allocate(swapped(accentcodes,accentcodes))
-fencecodes = allocate(swapped(fencecodes,fencecodes))
-
-nodes.skipcodes = skipcodes nodes.gluecodes = skipcodes -- more official
-nodes.noadcodes = noadcodes
-nodes.nodecodes = nodecodes
-nodes.whatcodes = whatcodes nodes.whatsitcodes = whatcodes -- more official
-nodes.listcodes = listcodes
-nodes.glyphcodes = glyphcodes
-nodes.kerncodes = kerncodes
-nodes.penaltycodes = penaltycodes
-nodes.mathcodes = mathcodes
-nodes.fillcodes = fillcodes
-nodes.margincodes = margincodes
-nodes.disccodes = disccodes nodes.discretionarycodes = disccodes
-nodes.accentcodes = accentcodes
-nodes.fencecodes = fencecodes
-
-listcodes.row = listcodes.alignment
-listcodes.column = listcodes.alignment
-
-kerncodes.italiccorrection = kerncodes.userkern
-kerncodes.kerning = kerncodes.fontkern
-
-whatcodes.textdir = whatcodes.dir
-
-nodes.codes = allocate { -- mostly for listing
- glue = skipcodes,
- noad = noadcodes,
- node = nodecodes,
- hlist = listcodes,
- vlist = listcodes,
- glyph = glyphcodes,
- kern = kerncodes,
- penalty = penaltycodes,
- math = mathnodes,
- fill = fillcodes,
- margin = margincodes,
- disc = disccodes,
- whatsit = whatcodes,
- accent = accentcodes,
- fence = fencecodes,
-}
-
-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)
diff --git a/Master/texmf-dist/tex/context/base/node-inj.lua b/Master/texmf-dist/tex/context/base/node-inj.lua
deleted file mode 100644
index 402403529c6..00000000000
--- a/Master/texmf-dist/tex/context/base/node-inj.lua
+++ /dev/null
@@ -1,603 +0,0 @@
-if not modules then modules = { } end modules ['node-inj'] = {
- version = 1.001,
- comment = "companion to node-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
-}
-
--- This is very experimental (this will change when we have luatex > .50 and
--- a few pending thingies are available. Also, Idris needs to make a few more
--- test fonts. Some optimizations can go away when we have faster machines.
-
--- todo: ignore kerns between disc and glyph
-
-local next = next
-local utfchar = utf.char
-
-local trace_injections = false trackers.register("nodes.injections", function(v) trace_injections = v end)
-
-local report_injections = logs.reporter("nodes","injections")
-
-local attributes, nodes, node = attributes, nodes, node
-
-fonts = fonts
-local fontdata = fonts.hashes.identifiers
-
-nodes.injections = nodes.injections or { }
-local injections = nodes.injections
-
-local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
-local kern_code = nodecodes.kern
-
-local nuts = nodes.nuts
-local nodepool = nuts.pool
-
-local newkern = nodepool.kern
-
-local tonode = nuts.tonode
-local tonut = nuts.tonut
-
-local getfield = nuts.getfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getattr = nuts.getattr
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-
-local setfield = nuts.setfield
-local setattr = nuts.setattr
-
-local traverse_id = nuts.traverse_id
-local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
-
-local a_kernpair = attributes.private('kernpair')
-local a_ligacomp = attributes.private('ligacomp')
-local a_markbase = attributes.private('markbase')
-local a_markmark = attributes.private('markmark')
-local a_markdone = attributes.private('markdone')
-local a_cursbase = attributes.private('cursbase')
-local a_curscurs = attributes.private('curscurs')
-local a_cursdone = attributes.private('cursdone')
-
-local unsetvalue = attributes.unsetvalue
-
--- This injector has been tested by Idris Samawi Hamid (several arabic fonts as well as
--- the rather demanding Husayni font), Khaled Hosny (latin and arabic) and Kaj Eigner
--- (arabic, hebrew and thai) and myself (whatever font I come across). I'm pretty sure
--- that this code is not 100% okay but examples are needed to figure things out.
-
-function injections.installnewkern(nk)
- newkern = nk or newkern
-end
-
-local cursives = { }
-local marks = { }
-local kerns = { }
-
--- Currently we do gpos/kern in a bit inofficial way but when we have the extra fields in
--- glyphnodes to manipulate ht/dp/wd explicitly I will provide an alternative; also, we
--- can share tables.
-
--- For the moment we pass the r2l key ... volt/arabtype tests .. idris: this needs
--- checking with husayni (volt and fontforge).
-
-function injections.reset(n)
--- if getattr(n,a_kernpair) then
--- setattr(n,a_kernpair,unsetvalue)
--- end
--- if getattr(n,a_markdone) then
--- setattr(n,a_markbase,unsetvalue)
--- setattr(n,a_markmark,unsetvalue)
--- setattr(n,a_markdone,unsetvalue)
--- end
--- if getattr(n,a_cursdone) then
--- setattr(n,a_cursbase,unsetvalue)
--- setattr(n,a_curscurs,unsetvalue)
--- setattr(n,a_cursdone,unsetvalue)
--- end
--- if getattr(n,a_ligacomp) then
--- setattr(n,a_ligacomp,unsetvalue)
--- end
-end
-
-function injections.setligaindex(n,index)
- setattr(n,a_ligacomp,index)
-end
-
-function injections.getligaindex(n,default)
- return getattr(n,a_ligacomp) or default
-end
-
-function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
- local dx, dy = factor*(exit[1]-entry[1]), factor*(exit[2]-entry[2])
- local ws, wn = tfmstart.width, tfmnext.width
- local bound = #cursives + 1
- setattr(start,a_cursbase,bound)
- setattr(nxt,a_curscurs,bound)
- cursives[bound] = { rlmode, dx, dy, ws, wn }
- return dx, dy, bound
-end
-
-function injections.setpair(current,factor,rlmode,r2lflag,spec,tfmchr)
- local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4]
- -- dy = y - h
- if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then
- local bound = getattr(current,a_kernpair)
- if bound then
- local kb = kerns[bound]
- -- inefficient but singles have less, but weird anyway, needs checking
- kb[2], kb[3], kb[4], kb[5] = (kb[2] or 0) + x, (kb[3] or 0) + y, (kb[4] or 0)+ w, (kb[5] or 0) + h
- else
- bound = #kerns + 1
- setattr(current,a_kernpair,bound)
- kerns[bound] = { rlmode, x, y, w, h, r2lflag, tfmchr.width }
- end
- return x, y, w, h, bound
- end
- return x, y, w, h -- no bound
-end
-
-function injections.setkern(current,factor,rlmode,x,tfmchr)
- local dx = factor*x
- if dx ~= 0 then
- local bound = #kerns + 1
- setattr(current,a_kernpair,bound)
- kerns[bound] = { rlmode, dx }
- return dx, bound
- else
- return 0, 0
- end
-end
-
-function injections.setmark(start,base,factor,rlmode,ba,ma) -- ba=baseanchor, ma=markanchor
- local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
- local bound = getattr(base,a_markbase)
- local index = 1
- if bound then
- local mb = marks[bound]
- if mb then
- -- if not index then index = #mb + 1 end
- index = #mb + 1
- mb[index] = { dx, dy, rlmode }
- setattr(start,a_markmark,bound)
- setattr(start,a_markdone,index)
- return dx, dy, bound
- else
- report_injections("possible problem, %U is base mark without data (id %a)",getchar(base),bound)
- end
- end
- index = index or 1
- bound = #marks + 1
- setattr(base,a_markbase,bound)
- setattr(start,a_markmark,bound)
- setattr(start,a_markdone,index)
- marks[bound] = { [index] = { dx, dy, rlmode } }
- return dx, dy, bound
-end
-
-local function dir(n)
- return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
-end
-
-local function trace(head)
- report_injections("begin run")
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n) < 256 then
- local kp = getattr(n,a_kernpair)
- local mb = getattr(n,a_markbase)
- local mm = getattr(n,a_markmark)
- local md = getattr(n,a_markdone)
- local cb = getattr(n,a_cursbase)
- local cc = getattr(n,a_curscurs)
- local char = getchar(n)
- report_injections("font %s, char %U, glyph %c",getfont(n),char,char)
- if kp then
- local k = kerns[kp]
- if k[3] then
- report_injections(" pairkern: dir %a, x %p, y %p, w %p, h %p",dir(k[1]),k[2],k[3],k[4],k[5])
- else
- report_injections(" kern: dir %a, dx %p",dir(k[1]),k[2])
- end
- end
- if mb then
- report_injections(" markbase: bound %a",mb)
- end
- if mm then
- local m = marks[mm]
- if mb then
- local m = m[mb]
- if m then
- report_injections(" markmark: bound %a, index %a, dx %p, dy %p",mm,md,m[1],m[2])
- else
- report_injections(" markmark: bound %a, missing index",mm)
- end
- else
- m = m[1]
- report_injections(" markmark: bound %a, dx %p, dy %p",mm,m and m[1],m and m[2])
- end
- end
- if cb then
- report_injections(" cursbase: bound %a",cb)
- end
- if cc then
- local c = cursives[cc]
- report_injections(" curscurs: bound %a, dir %a, dx %p, dy %p",cc,dir(c[1]),c[2],c[3])
- end
- end
- end
- report_injections("end run")
-end
-
--- todo: reuse tables (i.e. no collection), but will be extra fields anyway
--- todo: check for attribute
-
--- We can have a fast test on a font being processed, so we can check faster for marks etc
--- but I'll make a context variant anyway.
-
-local function show_result(head)
- local current = head
- local skipping = false
- while current do
- local id = getid(current)
- if id == glyph_code then
- report_injections("char: %C, width %p, xoffset %p, yoffset %p",
- getchar(current),getfield(current,"width"),getfield(current,"xoffset"),getfield(current,"yoffset"))
- skipping = false
- elseif id == kern_code then
- report_injections("kern: %p",getfield(current,"kern"))
- skipping = false
- elseif not skipping then
- report_injections()
- skipping = true
- end
- current = getnext(current)
- end
-end
-
-function injections.handler(head,where,keep)
- head = tonut(head)
- local has_marks, has_cursives, has_kerns = next(marks), next(cursives), next(kerns)
- if has_marks or has_cursives then
- if trace_injections then
- trace(head)
- end
- -- in the future variant we will not copy items but refs to tables
- local done, ky, rl, valid, cx, wx, mk, nofvalid = false, { }, { }, { }, { }, { }, { }, 0
- if has_kerns then -- move outside loop
- local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do -- only needed for relevant fonts
- if getsubtype(n) < 256 then
- nofvalid = nofvalid + 1
- valid[nofvalid] = n
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm then
- mk[n] = tm[getchar(n)]
- end
- local k = getattr(n,a_kernpair)
- if k then
- local kk = kerns[k]
- if kk then
- local x, y, w, h = kk[2] or 0, kk[3] or 0, kk[4] or 0, kk[5] or 0
- local dy = y - h
- if dy ~= 0 then
- ky[n] = dy
- end
- if w ~= 0 or x ~= 0 then
- wx[n] = kk
- end
- rl[n] = kk[1] -- could move in test
- end
- end
- end
- end
- else
- local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n) < 256 then
- nofvalid = nofvalid + 1
- valid[nofvalid] = n
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm then
- mk[n] = tm[getchar(n)]
- end
- end
- end
- end
- if nofvalid > 0 then
- -- we can assume done == true because we have cursives and marks
- local cx = { }
- if has_kerns and next(ky) then
- for n, k in next, ky do
- setfield(n,"yoffset",k)
- end
- end
- -- todo: reuse t and use maxt
- if has_cursives then
- local p_cursbase, p = nil, nil
- -- since we need valid[n+1] we can also use a "while true do"
- local t, d, maxt = { }, { }, 0
- for i=1,nofvalid do -- valid == glyphs
- local n = valid[i]
- if not mk[n] then
- local n_cursbase = getattr(n,a_cursbase)
- if p_cursbase then
- local n_curscurs = getattr(n,a_curscurs)
- if p_cursbase == n_curscurs then
- local c = cursives[n_curscurs]
- if c then
- local rlmode, dx, dy, ws, wn = c[1], c[2], c[3], c[4], c[5]
- if rlmode >= 0 then
- dx = dx - ws
- else
- dx = dx + wn
- end
- if dx ~= 0 then
- cx[n] = dx
- rl[n] = rlmode
- end
- -- if rlmode and rlmode < 0 then
- dy = -dy
- -- end
- maxt = maxt + 1
- t[maxt] = p
- d[maxt] = dy
- else
- maxt = 0
- end
- end
- elseif maxt > 0 then
- local ny = getfield(n,"yoffset")
- for i=maxt,1,-1 do
- ny = ny + d[i]
- local ti = t[i]
- setfield(ti,"yoffset",getfield(ti,"yoffset") + ny)
- end
- maxt = 0
- end
- if not n_cursbase and maxt > 0 then
- local ny = getfield(n,"yoffset")
- for i=maxt,1,-1 do
- ny = ny + d[i]
- local ti = t[i]
- setfield(ti,"yoffset",ny) -- maybe add to current yoffset
- end
- maxt = 0
- end
- p_cursbase, p = n_cursbase, n
- end
- end
- if maxt > 0 then
- local ny = getfield(n,"yoffset") -- hm, n unset ?
- for i=maxt,1,-1 do
- ny = ny + d[i]
- local ti = t[i]
- setfield(ti,"yoffset",ny)
- end
- maxt = 0
- end
- if not keep then
- cursives = { }
- end
- end
- if has_marks then
- for i=1,nofvalid do
- local p = valid[i]
- local p_markbase = getattr(p,a_markbase)
- if p_markbase then
- local mrks = marks[p_markbase]
- local nofmarks = #mrks
- for n in traverse_id(glyph_code,getnext(p)) do
- local n_markmark = getattr(n,a_markmark)
- if p_markbase == n_markmark then
- local index = getattr(n,a_markdone) or 1
- local d = mrks[index]
- if d then
- local rlmode = d[3]
- --
- local k = wx[p]
- local px = getfield(p,"xoffset")
- local ox = 0
- if k then
- local x = k[2]
- local w = k[4]
- if w then
- if rlmode and rlmode >= 0 then
- -- kern(x) glyph(p) kern(w-x) mark(n)
- ox = px - getfield(p,"width") + d[1] - (w-x)
- -- report_injections("l2r case 1: %p",ox)
- else
- -- kern(w-x) glyph(p) kern(x) mark(n)
- ox = px - d[1] - x
- -- report_injections("r2l case 1: %p",ox)
- end
- else
- if rlmode and rlmode >= 0 then
- -- okay for husayni
- ox = px - getfield(p,"width") + d[1]
- -- report_injections("r2l case 2: %p",ox)
- else
- -- needs checking: is x ok here?
- ox = px - d[1] - x
- -- report_injections("r2l case 2: %p",ox)
- end
- end
- else
- -- if rlmode and rlmode >= 0 then
- -- ox = px - getfield(p,"width") + d[1]
- -- -- report_injections("l2r case 3: %p",ox)
- -- else
- -- ox = px - d[1]
- -- -- report_injections("r2l case 3: %p",ox)
- -- end
- --
- -- we need to deal with fonts that have marks with width
- --
- local wp = getfield(p,"width")
- local wn = getfield(n,"width") -- in arial marks have widths
- if rlmode and rlmode >= 0 then
- ox = px - wp + d[1]
- -- report_injections("l2r case 3: %p",ox)
- else
- ox = px - d[1]
- -- report_injections("r2l case 3: %p",ox)
- end
- if wn ~= 0 then
- -- bad: we should center
- insert_node_before(head,n,newkern(-wn/2))
- insert_node_after(head,n,newkern(-wn/2))
- -- wx[n] = { 0, -wn/2, 0, -wn }
- end
- -- so far
- end
- setfield(n,"xoffset",ox)
- --
- local py = getfield(p,"yoffset")
- local oy = 0
- if mk[p] then
- oy = py + d[2]
- else
- oy = getfield(n,"yoffset") + py + d[2]
- end
- setfield(n,"yoffset",oy)
- --
- if nofmarks == 1 then
- break
- else
- nofmarks = nofmarks - 1
- end
- end
- elseif not n_markmark then
- break -- HH: added 2013-09-12: no need to deal with non marks
- else
- -- KE: there can be <mark> <mkmk> <mark> sequences in ligatures
- end
- end
- end
- end
- if not keep then
- marks = { }
- end
- end
- -- todo : combine
- if next(wx) then
- for n, k in next, wx do
- -- only w can be nil (kernclasses), can be sped up when w == nil
- local x = k[2]
- local w = k[4]
- if w then
- local rl = k[1] -- r2l = k[6]
- local wx = w - x
- if rl < 0 then -- KE: don't use r2l here
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx)) -- type 0/2
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x)) -- type 0/2
- end
- else
- if x ~= 0 then
- insert_node_before(head,n,newkern(x)) -- type 0/2
- end
- if wx ~= 0 then
- insert_node_after (head,n,newkern(wx)) -- type 0/2
- end
- end
- elseif x ~= 0 then
- -- this needs checking for rl < 0 but it is unlikely that a r2l script
- -- uses kernclasses between glyphs so we're probably safe (KE has a
- -- problematic font where marks interfere with rl < 0 in the previous
- -- case)
- insert_node_before(head,n,newkern(x)) -- a real font kern, type 0
- end
- end
- end
- if next(cx) then
- for n, k in next, cx do
- if k ~= 0 then
- local rln = rl[n]
- if rln and rln < 0 then
- insert_node_before(head,n,newkern(-k)) -- type 0/2
- else
- insert_node_before(head,n,newkern(k)) -- type 0/2
- end
- end
- end
- end
- if not keep then
- kerns = { }
- end
- -- if trace_injections then
- -- show_result(head)
- -- end
- return tonode(head), true
- elseif not keep then
- kerns, cursives, marks = { }, { }, { }
- end
- elseif has_kerns then
- if trace_injections then
- trace(head)
- end
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n) < 256 then
- local k = getattr(n,a_kernpair)
- if k then
- local kk = kerns[k]
- if kk then
- local rl, x, y, w = kk[1], kk[2] or 0, kk[3], kk[4]
- if y and y ~= 0 then
- setfield(n,"yoffset",y) -- todo: h ?
- end
- if w then
- -- copied from above
- -- local r2l = kk[6]
- local wx = w - x
- if rl < 0 then -- KE: don't use r2l here
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x))
- end
- else
- if x ~= 0 then
- insert_node_before(head,n,newkern(x))
- end
- if wx ~= 0 then
- insert_node_after(head,n,newkern(wx))
- end
- end
- else
- -- simple (e.g. kernclass kerns)
- if x ~= 0 then
- insert_node_before(head,n,newkern(x))
- end
- end
- end
- end
- end
- end
- if not keep then
- kerns = { }
- end
- -- if trace_injections then
- -- show_result(head)
- -- end
- return tonode(head), true
- else
- -- no tracing needed
- end
- return tonode(head), false
-end
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.lua b/Master/texmf-dist/tex/context/base/pack-obj.lua
deleted file mode 100644
index d1cc5bafc67..00000000000
--- a/Master/texmf-dist/tex/context/base/pack-obj.lua
+++ /dev/null
@@ -1,93 +0,0 @@
-if not modules then modules = { } end modules ['pack-obj'] = {
- version = 1.001,
- comment = "companion to pack-obj.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
---[[ldx--
-<p>We save object references in the main utility table. jobobjects are
-reusable components.</p>
---ldx]]--
-
-local context = context
-
-local implement = interfaces.implement
-
-local allocate = utilities.storage.allocate
-
-local collected = allocate()
-local tobesaved = allocate()
-
-local jobobjects = {
- collected = collected,
- tobesaved = tobesaved,
-}
-
-job.objects = jobobjects
-
-local function initializer()
- collected = jobobjects.collected
- tobesaved = jobobjects.tobesaved
-end
-
-job.register('job.objects.collected', tobesaved, initializer, nil)
-
-local function saveobject(tag,number,page)
- local t = { number, page }
- tobesaved[tag], collected[tag] = t, t
-end
-
-local function setobject(tag,number,page)
- collected[tag] = { number, page }
-end
-
-local function getobject(tag)
- return collected[tag] or tobesaved[tag]
-end
-
-local function getobjectnumber(tag,default)
- local o = collected[tag] or tobesaved[tag]
- return o and o[1] or default
-end
-
-local function getobjectpage(tag,default)
- local o = collected[tag] or tobesaved[tag]
- return o and o[2] or default
-end
-
-jobobjects.save = saveobject
-jobobjects.set = setobject
-jobobjects.get = getobject
-jobobjects.number = getobjectnumber
-jobobjects.page = getobjectpage
-
-implement {
- name = "saveobject",
- actions = saveobject
-}
-
-implement {
- name = "setobject",
- actions = setobject,
- arguments = { "string", "integer", "integer" }
-}
-
-implement {
- name = "objectnumber",
- actions = { getobjectnumber, context },
- arguments = { "string", "string" },
-}
-
-implement {
- name = "objectpage",
- actions = { getobjectpage, context },
- arguments = { "string", "string" },
-}
-
-implement {
- name = "doifelseobjectreferencefound",
- actions = { jobobjects.get, commands.doifelse },
- arguments = "string"
-}
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.mkiv b/Master/texmf-dist/tex/context/base/pack-obj.mkiv
deleted file mode 100644
index 605dd3b9e5a..00000000000
--- a/Master/texmf-dist/tex/context/base/pack-obj.mkiv
+++ /dev/null
@@ -1,415 +0,0 @@
-%D \module
-%D [ file=pack-obj,
-%D version=1998.01.15,
-%D title=\CONTEXT\ Packaging Macros,
-%D subtitle=Objects,
-%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 / Objects}
-
-\unprotect
-
-\let\objectreference\gobblefourarguments % catch mkii tuo stuff
-
-\registerctxluafile{pack-obj}{1.001}
-
-% \startluacode
-% local texbox, texdimen, texcount, texwrite = tex.box, tex.dimen, tex.count, tex.write
-% local pdfxform, pdfrefxform = pdf.xform, pdf.refxform
-%
-% function pdf.xform (l) texbox["objectbox"] = nil return l end
-% function pdf.refxform(l) return node.copy_list(l) end
-%
-% backends.codeinjections.register = pdf.xform
-% backends.codeinjections.restore = pdf.refxform
-%
-% local codeinjections = backends.codeinjections
-%
-% objects = objects or { }
-%
-% local data = { }
-%
-% objects.data = data
-% objects.n = 0
-%
-% function objects.register(name)
-% objects.n = objects.n + 1
-% local list = texbox.objectbox
-% nodes.handlers.finalize(list)
-% data[name] = {
-% codeinjections.restore(list),
-% texdimen.objectwd,
-% texdimen.objectht,
-% texdimen.objectdp,
-% texdimen.objectoff,
-% }
-% end
-%
-% function objects.restore(name)
-% local d = data[name]
-% if d then
-% texbox .objectbox = codeinjections.restore(d[1])
-% texdimen.objectwd = d[2]
-% texdimen.objectht = d[3]
-% texdimen.objectdp = d[4]
-% texdimen.objectoff = d[5]
-% else
-% texbox .objectbox = nil
-% texdimen.objectwd = 0
-% texdimen.objectht = 0
-% texdimen.objectdp = 0
-% texdimen.objectoff = 0
-% end
-% end
-%
-% function objects.reference(name)
-% local d = data[name]
-% texwrite((d and d[1]) or 0)
-% end
-%
-% function objects.enhance(name)
-% local d = data[name]
-% if d then
-% d[6] = texcount.realpageno
-% end
-% end
-%
-% function objects.page(name)
-% local d = data[name]
-% texwrite((d and d[6]) or texcount.realpageno)
-% end
-%
-% function objects.doifelse(name)
-% commands.testcase(data[name])
-% end
-% \stopluacode
-%
-% \unprotect
-%
-% \newbox \objectbox
-% \newtoks \everyobject
-% \newif \ifinobject
-%
-% \newdimen\objectoff \def\objectmargin{\the\objectoff}
-% \newdimen\objectwd \def\objectwidth {\the\objectwd }
-% \newdimen\objectht \def\objectheight{\the\objectht }
-% \newdimen\objectdp \def\objectdepth {\the\objectdp }
-%
-% \def\objectoffset{1cm}
-%
-% \everyobject{\the\pdfbackendeveryxform}
-%
-% \unexpanded\def\setobject #1#2{\begingroup\objectoff\objectoffset\inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}}
-% \unexpanded\def\settightobject#1#2{\begingroup\objectoff\zeropoint \inobjecttrue\the\everyobject\dowithnextbox{\pack_objects_set{#1}{#2}}}
-%
-% \let\objectsetvbox\vbox %\def\objectsetvbox{\ruledvbox}
-% \let\objectgetvbox\vbox %\def\objectgetvbox{\ruledvbox}
-% \let\objectsethbox\hbox %\def\objectsethbox{\ruledhbox}
-% \let\objectgethbox\hbox %\def\objectgethbox{\ruledhbox}
-%
-% \unexpanded\def\pack_objects_set#1#2%
-% {\objectwd\wd\nextbox
-% \objectht\ht\nextbox
-% \objectdp\dp\nextbox
-% \ifdim\objectoff=\zeropoint\relax
-% \setbox\objectbox\box\nextbox
-% \else
-% \setbox\objectbox\objectsetvbox spread 2\objectoff{\vss\objectsethbox spread 2\objectoff{\hss\box\nextbox\hss}\vss}%
-% \fi
-% \ctxlua{objects.register("#1::#2")}%
-% \endgroup}
-%
-% \unexpanded\def\getobject#1#2%
-% {\begingroup
-% \ctxlua{objects.restore("#1::#2")}%
-% \ifdim\objectoff=\zeropoint\relax \else
-% \setbox\objectbox\objectgetvbox to \dimexpr\objectht+\objectdp\relax
-% {\vss\objectgethbox to \objectwd{\hss\box\objectbox\hss}\vss}%
-% \wd\objectbox\objectwd
-% \ht\objectbox\objectht
-% \dp\objectbox\objectdp
-% \fi
-% \box\objectbox
-% \endgroup}
-%
-% \unexpanded\def\getpageobject#1#2%
-% {\begingroup
-% \ctxlua{objects.restore("#1::#2")}%
-% \ifdim\objectoff=\zeropoint\relax
-% \setbox\objectbox\objectgethbox{\ctxlatelua{objects.enhance("#1::#2")}\box\objectbox}
-% \else
-% \setbox\objectbox\objectgetvbox to \dimexpr\objectht+\objectdp\relax
-% {\vss\objectgethbox to \objectwd{\ctxlatelua{objects.enhance("#1::#2")}\hss\box\objectbox\hss}\vss}%
-% \wd\objectbox\objectwd
-% \ht\objectbox\objectht
-% \dp\objectbox\objectdp
-% \fi
-% \box\objectbox
-% \endgroup}
-%
-% \unexpanded\def\setobjectdirectly #1#2{\ctxlua{objects.register("#1::#2")}}
-% \unexpanded\def\getobjectdirectly #1#2{\ctxlua{objects.restore ("#1::#2")}}
-% \unexpanded\def\getobjectdimensions #1#2{\ctxlua{objects.restore ("#1::#2")}}
-% \unexpanded\def\doifobjectfoundelse #1#2{\ctxlua{objects.doifelse("#1::#2")}}
-% \unexpanded\def\doifobjectreferencefoundelse#1#2{\ctxlua{objects.doifelse("#1::#2")}}
-%
-% \let\objectreferenced\relax
-% \let\driverreferenced\relax
-%
-% \unexpanded\def\pack_objects_register_reference{\writestatus{objects}{obsolete: register object reference}\gobblethreearguments}
-% \unexpanded\def\pack_objects_overload_reference{\writestatus{objects}{obsolete: overload object reference}\gobblethreearguments}
-% \unexpanded\def\dosetobjectreference {\writestatus{objects}{obsolete: set object reference}\gobblethreearguments}
-% \unexpanded\def\dosetdriverreference {\writestatus{objects}{obsolete: set driver reference}\gobblethreearguments}
-%
-% \def\defaultobjectreference{0}
-% \def\defaultobjectpage {\realfolio}
-%
-% \unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\ctxlua{objects.reference("#1::#2)}}}
-% \unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\ctxlua{objects.page("#1::#2))}}}
-%
-% \protect
-%
-% \starttext
-% test \setobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test
-% \vskip3cm
-% test \settightobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test
-% test \settightobject{a}{c}\ruledhbox{xxx}\getobject{a}{c} test
-% \dorecurse{5000}{test \setobject{a}{b}\ruledhbox{xxx}\getobject{a}{b} test }
-% \stoptext
-
-%D \macros
-%D {setobject,getobject,ifinobject}
-%D
-%D Boxes can be considered reuable objects. Unfortunaltely once
-%D passed to the \DVI\ file, such objects cannot be reused. In
-%D \PDF\ however, reusing is possible and sometimes even a
-%D necessity. Therefore, \CONTEXT\ supports reusable objects.
-%D
-%D During the \TEX\ processing run, boxes can serve the purpose
-%D of objects, and the \DVI\ driver module implements objects
-%D using packed boxes.
-%D
-%D The \PDF\ and \PDFTEX\ driver modules implement objects
-%D using \PDF\ forms. There is no (real) restriction on the
-%D number of objects there.
-%D
-%D The first application of objects in \CONTEXT\ concerned
-%D \METAPOST\ graphics and fill||in form fields. The first
-%D application can save lots of bytes, while the latter use is
-%D more a necessity than byte saving.
-%D
-%D \starttyping
-%D \setobject{class}{name}\somebox{}
-%D \getobject{class}{name}
-%D \stoptyping
-%D
-%D Here \type{\somebox} can be whatever box specification suits
-%D \TEX. We save the dimensions of an object, although some
-%D drivers will do so themselves. This means that when for
-%D instance using \PDFTEX\ we could save a hash entry plus some
-%D 20+ memory locations per object by delegating this
-%D housekeeping to the driver. The current approach permits
-%D us to keep the box characteristic too.
-
-\installcorenamespace {objects}
-
-\newif\ifinobject % public (might become a conditional)
-
-\def\objectplaceholder{NOT YET FLUSHED}
-
-\unexpanded\def\presetobject#1#2% \global added
- {\ifcsname\??objects#1::#2\endcsname\else
- \global\expandafter\let\csname\??objects#1::#2\endcsname\objectplaceholder
- \fi}
-
-\unexpanded\def\pack_objects_set#1#2#3%
- {\ifcsname\??objects#2::#3\endcsname
- \expandafter\gobblefivearguments
- \else % tzt, overload internal referenced objects to save entries
- \expandafter\pack_objects_set_indeed
- \fi
- {#1}{#2}{#3}}
-
-\unexpanded\def\resetobject#1#2%
- {\letbeundefined{\??objects#1::#2}}
-
-%D \macros
-%D {finalizeobjectbox}
-%D
-%D This one provides a hook for last minute object box processing
-%D we need this in \MKIV.
-
-\ifdefined\finalizeobjectbox \else
- \let\finalizeobjectbox\gobbleoneargument
-\fi
-
-%D Somehow there is a rounding error problem in either \PDFTEX\
-%D or in viewers, or maybe it is conforming the specs. The next
-%D variable compensate for it by removing the rather tight
-%D clip.
-
-\def\objectoffset{1cm}
-
-\unexpanded\def\pack_objects_set_indeed#1#2#3%
- {\bgroup
- \globalpushmacro\crossreferenceobject
- \objectreferenced
- \inobjecttrue
- \dowithnextbox
- {\globalpopmacro\crossreferenceobject
- \pack_objects_set_indeed_indeed{#1}{#2}{#3}%
- \egroup}}
-
-% in luatex version < 66 we had a 1bp compensation (hardcoded in luatex)
-
-\let\pack_objects_handle\relax
-
-\unexpanded\def\pack_objects_set_indeed_indeed#1#2#3%
- {\begingroup
- \scratchdimen\objectoffset
- \expandafter\xdef\csname\??objects#2::#3\endcsname
- {\pack_objects_handle
- {#2}%
- {#3}%
- {\ifhbox\nextbox\hbox\else\vbox\fi}%
- {\number\wd\nextbox}%
- {\number\ht\nextbox}%
- {\number\dp\nextbox}%
- {\number\scratchdimen}}%
- \expanded % freeze the dimensions since \dostartobject may use \nextbox
- {\dostartobject{#2}{#3}{\the\wd\nextbox}{\the\ht\nextbox}{\the\dp\nextbox}}%
- \ifcase#1\relax\else \ifdim\objectoffset>\zeropoint
- \setbox\nextbox\vbox \s!spread 2\scratchdimen
- {\forgetall \offinterlineskip
- \vss\hbox \s!spread 2\scratchdimen{\hss\box\nextbox\hss}\vss}%
- \fi \fi
- \box\nextbox
- \dostopobject
- \endgroup}
-
-\unexpanded\def\getobject#1#2%
- {\ifcsname\??objects#1::#2\endcsname
- \begingroup
- \let\pack_objects_handle\pack_objects_get
- \csname\??objects#1::#2\expandafter\endcsname
- \else
- {\infofont[object #1::#2]}%
- \fi}
-
-\unexpanded\def\pack_objects_get#1#2#3#4#5#6#7% don't change this, should work for dvi & pdf
- {\forgetall
- % todo: if no attr then faster
- \setbox\scratchbox\vbox attr \viewerlayerattribute \attribute\viewerlayerattribute
- {\doinsertobject{#1}{#2}}%
- \setbox\scratchbox#3%
- {\vbox to #5\scaledpoint
- {\ifdim\ht\scratchbox>#5\scaledpoint
- \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss
- \else\ifdim\wd\scratchbox>#4\scaledpoint
- \vss\hbox to #4\scaledpoint{\hss\box\scratchbox\hss}\vss
- \else
- %\vss\box\scratchbox
- \vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% fix Chof
- \fi\fi}}%
- \box\scratchbox
- \endgroup}
-
-%D If needed one can ask for the dimensions of an object with:
-%D
-%D \starttyping
-%D \getobjectdimensions{class}{name}
-%D \stoptyping
-%D
-%D The results are reported in \type {\objectwidth}, \type
-%D {\objectheight} and \type {\objectdepth}.
-
-\unexpanded\def\pack_objects_get_dimensions#1#2#3#4#5#6#7%
- {\def\objectwidth {#4\s!sp}%
- \def\objectheight{#5\s!sp}%
- \def\objectdepth {#6\s!sp}%
- \def\objectmargin{#7\s!sp}}
-
-\unexpanded\def\getobjectdimensions#1#2%
- {\let\pack_objects_handle\pack_objects_get_dimensions
- \let\objectwidth \!!zeropoint
- \let\objectheight\!!zeropoint
- \let\objectdepth \!!zeropoint
- \csname\??objects#1::#2\endcsname}
-
-%D Apart from this kind of objects, that have typeset content,
-%D we can have low level driver specific objects. Both types
-%D can have references to internal representations, hidden for
-%D the user. We keep track of such references by means of a
-%D dedicated cross reference mechanism. Normally, objects are
-%D defined before they are used, but forward referencing
-%D sometimes occurs.
-%D
-%D \starttyping
-%D \dosetobjectreference {class} {identifier} {reference value} {page}
-%D \dogetobjectreference {class} {identifier} \csname
-%D \stoptyping
-%D
-%D These commands are to be called by the \type{\startobject},
-%D \type{\stopobject} and \type{\insertobject} specials.
-
-\unexpanded\def\objectreferenced{\global\chardef\crossreferenceobject\plusone}
-\unexpanded\def\driverreferenced{\global\chardef\crossreferenceobject\zerocount}
-
-\objectreferenced
-
-% no undefined test ! ! ! ! (pdftex fails on undefined objects)
-
-\unexpanded\def\pack_objects_register_reference#1#2#3{\normalexpanded{\noexpand\ctxlatecommand{saveobject("#1::#2",#3,\noexpand\the\realpageno)}}}
-\unexpanded\def\pack_objects_overload_reference#1#2#3{\clf_setobject{#1::#2}#3 \realpageno\relax}
-
-\unexpanded\def\dosetobjectreference
- {\ifcase\crossreferenceobject
- \objectreferenced
- \expandafter\pack_objects_overload_reference
- \else
- \expandafter\pack_objects_register_reference
- \fi}
-
-\unexpanded\def\dosetdriverreference
- {\driverreferenced\dosetobjectreference}
-
-\def\defaultobjectreference#1#2{0} % driver dependent
-\def\defaultobjectpage #1#2{\realfolio}
-
-\unexpanded\def\dogetobjectreference #1#2#3{\xdef#3{\clf_objectnumber{#1::#2}{\defaultobjectreference{#1}{#2}}}}
-\unexpanded\def\dogetobjectreferencepage#1#2#3{\xdef#3{\clf_objectpage {#1::#2}{\defaultobjectpage {#1}{#2}}}}
-
-\unexpanded\def\setobject {\driverreferenced\pack_objects_set1}
-\unexpanded\def\settightobject{\driverreferenced\pack_objects_set0}
-
-%D \macros
-%D {doifobjectfoundelse,doifobjectreferencefoundelse}
-%D
-%D To prevent redundant definition of objects, one can use
-%D the next tests:
-%D
-%D \starttyping
-%D \doifobjectfoundelse{class}{object}{do then}{do else}
-%D \doifobjectreferencefoundelse{class}{object}{do then}{do else}
-%D \stoptyping
-
-\unexpanded\def\doifelseobjectfound#1#2%
- {\ifcsname\??objects#1::#2\endcsname
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\unexpanded\def\doifelseobjectreferencefound#1#2%
- {\clf_doifelseobjectreferencefound{#1::#2}}
-
-\let\doifobjectfoundelse \doifelseobjectfound
-\let\doifobjectreferencefoundelse\doifelseobjectreferencefound
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-prf.mkiv b/Master/texmf-dist/tex/context/base/spac-prf.mkiv
deleted file mode 100644
index 5f1553ede11..00000000000
--- a/Master/texmf-dist/tex/context/base/spac-prf.mkiv
+++ /dev/null
@@ -1,31 +0,0 @@
-%D \module
-%D [ file=spac-prf,
-%D version=2015.11.16, % moved from test module mathplus
-%D title=\CONTEXT\ Spacing Macros,
-%D subtitle=Profiling,
-%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 Spacing Macros / Profiling}
-
-%D This is a placeholder for something to come. But as I don't want to
-%D be harrassed by 'why does it work different than a week before' this
-%D cool new feature will only end up here when stable enough. Alas.
-
-\unprotect
-
-\definesystemattribute[profilemethod][public]
-
-\unexpanded\def\setprofile [#1]{}
-\unexpanded\def\resetprofile {}
-\unexpanded\def\useprofileparameter#1{}
-\unexpanded\def\addprofiletobox #1{}
-\unexpanded\def\profilegivenbox #1#2{}
-\unexpanded\def\profiledbox {\vbox}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/status-files.pdf b/Master/texmf-dist/tex/context/base/status-files.pdf
deleted file mode 100644
index 619f763672f..00000000000
--- a/Master/texmf-dist/tex/context/base/status-files.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/status-lua.pdf b/Master/texmf-dist/tex/context/base/status-lua.pdf
deleted file mode 100644
index 63c3286e8a7..00000000000
--- a/Master/texmf-dist/tex/context/base/status-lua.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/tex/context/base/syst-aux.lua b/Master/texmf-dist/tex/context/base/syst-aux.lua
deleted file mode 100644
index fff9bbb4c16..00000000000
--- a/Master/texmf-dist/tex/context/base/syst-aux.lua
+++ /dev/null
@@ -1,229 +0,0 @@
-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 = tonumber
-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 context = context
-local implement = interfaces.implement
-local formatters = string.formatters
-local setcatcode = tex.setcatcode
-local utf8character = lpeg.patterns.utf8character
-local settings_to_array = utilities.parsers.settings_to_array
-local setmacro = interfaces.setmacro
-
-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 = { "string", "string" },
- actions = function(str,chr)
- ctx_doifelse(lpegmatch(pattern,str) == chr)
- end
-}
-
-implement {
- name = "getsubstring",
- arguments = { "string", "string", "string" },
- 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 spaces = P(" ")^0 / ""
-local nohash = 1 - P("#")
-local digit = R("09")
-local double = P("##") / "#"
-local single = P("#")
-local sentinel = spaces * (nohash^1 / "\\%0")
-local sargument = (single * digit)^1
-local dargument = (double * digit)^1
-
-local usespaces = nil
-local texpreamble = nil
-
-local pattern = Cs( -- ^-1
- ( P("spaces") / function() usespaces = true return "" end )^0
- * spaces
- * ( P("nospaces") / function() usespaces = false return "" end )^0
- * spaces
- * ( P("global") / "\\global" )^0
- * spaces
- * ( P("unexpanded") / "\\unexpanded" )^0
- * spaces
- * Cc("\\expandafter\\")
- * spaces
- * ( P("expanded") / "e" )^0
- * spaces
- * ( P((1-S(" #"))^1) / "def\\csname %0\\endcsname" )
- * spaces
- * (
- -- (double * digit)^1 * sentinel^-1 * double^-1
- -- + (single * digit)^1 * sentinel^-1 * single^-1
- ( 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)
- usespaces = nil
- texpreamble = lpegmatch(pattern,str)
- if usespaces == true then
- setcatcode(32,10) -- space
- setcatcode(13, 5) -- endofline
- elseif usespaces == false then
- setcatcode(32, 9) -- ignore
- setcatcode(13, 9) -- ignore
- else
- -- this is default
- -- setcatcode(32,10) -- space
- -- setcatcode(13, 9) -- ignore
- end
- ctx_dostarttexdefinition()
-end
-
-local function texdefinition_two()
- context(texpreamble)
-end
-
-implement { name = "texdefinition_one", actions = texdefinition_one, scope = "private", arguments = "string" }
-implement { name = "texdefinition_two", actions = texdefinition_two, scope = "private" }
-
-implement { name = "upper", arguments = "string", actions = { utf.upper, context } }
-implement { name = "lower", arguments = "string", actions = { utf.lower, context } }
-implement { name = "strip", arguments = "string", actions = { string.strip, context } } -- or utf.strip
-
-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 = "elapsedtime",
- actions = function()
- statistics.stoptiming("whatever")
- context(statistics.elapsedtime("whatever"))
- 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
-}
diff --git a/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv b/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv
deleted file mode 100644
index 4c892138e82..00000000000
--- a/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv
+++ /dev/null
@@ -1,766 +0,0 @@
-%D \module
-%D [ file=tabl-ltb,
-%D version=2002.10.31,
-%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.
-
-% testfile: tfmetrics.tex
-
-% todo: als nx>1, dan in geval van rek tussenruimte berekenen en optellen
-% bij breedte, dus: nx nog niet gebruiken in combinatie met rek ! ! ! ! !
-
-% This module is experimental, undocumented, and currently only set up
-% eTeX. It provides a mechanism for typesetting very large tables,
-% spanning many pages horizontally and vertically, with repeated
-% header lines and (entry) columns, tab tracking, color, etc. In does
-% two passes over a table, which is why the table goes into a
-% buffer or file. As said, tables can be real huge.
-
-% \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
-
-\newconstant\linetablesplitstate
-\newconstant\linetableheadstate
-\newconstant\linetablemode
-
-\definesystemvariable {le} % LinetablE
-
-\edef\??ler{\??le:r:}
-\edef\??lec{\??le:c:}
-\edef\??lew{\??le:w:}
-\edef\??leh{\??le:h:}
-\edef\??led{\??le:d:}
-
-\newif\iflinetablepreroll
-\newif\ifinlinetable
-
-\newcount\linetablecolumn
-\newcount\linetablesubcol
-\newdimen\linetablewidth
-\newdimen\linetableheight
-\newbox \linetablecell
-
-\let\noflinetablecolumns\!!zerocount
-\let\noflinetablerows \!!zerocount
-\let\noflinetablelines \!!zerocount
-\let\noflinetableparts \!!zerocount
-\let\linetablepart \!!plusone
-\let\linetablestep \!!plusone
-\let\linetableline \!!zerocount
-\let\linetablerow \!!zerocount
-\let\linetablerows \!!zerocount
-
-\initializetablebox \zerocount % holds repeater
-
-\newconstant\linetablehmode
-\newconstant\linetablepage
-\newconstant\linetablerepeat
-
-\unexpanded\def\setuplinetable
- {\dotripleempty\dosetuplinetable}
-
-\def\dosetuplinetable[#1][#2][#3]%
- {\ifthirdargument
- \getparameters[\??le:#1:#2][#3]%
- \else\ifsecondargument
- \getparameters[\??lec#1][#2]%
- \else
- \getparameters[\??le][#1]%
- \fi\fi}
-
-\setuplinetable
- [\c!n=\!!maxcard,
- \c!lines=\!!maxcard,
- \c!nx=\plusone,
- \c!nleft=0,
- \c!repeat=\v!yes, % when \c!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=.25ex,
- \c!rightoffset=\linetableparameter\c!leftoffset,
- \c!maxwidth=\zeropoint,
- \c!width=5em,
- \c!height=\v!fit, % \v!line = faster
- \c!background=,
- \c!backgroundcolor=]
-
-\def\linetableparameter#1%
- {\csname\??le#1\endcsname}
-
-\def\doifelselinetablecparameter#1%
- {\ifcsname\??lec\number\linetablecolumn#1\endcsname
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\let\doiflinetablecparameterelse\doifelselinetablecparameter
-
-\def\linetablecparameter#1%
- {\csname
- \ifcsname\??lec\number\linetablecolumn#1\endcsname
- \??lec\number\linetablecolumn
- \else
- \??le
- \fi
- #1\endcsname}
-
-\def\linetablerparameter#1% faster, leaner and meaner
- {\csname
- \ifnum\linetablerow=\zerocount % geen ifcase
- \ifcsname\??ler\v!header#1\endcsname
- \??ler\v!header#1%
- \else\ifcsname\??ler0#1\endcsname
- \??ler0#1%
- \else
- \s!empty
- \fi\fi
- \else
- \ifcsname\??ler\number\linetablerow#1\endcsname
- \??ler\number\linetablerow#1%
- \else\ifcsname\??ler\v!oddeven\linetablerow#1\endcsname
- \??ler\v!oddeven\linetablerow#1%
- \else
- \s!empty
- \fi\fi
- \fi
- \endcsname}
-
-\def\setnoftableslines
- {\doifelse{\linetableparameter\c!lines}\v!fit
- {% whitespace already added by vertical strut
- \ifdim\pagegoal<\maxdimen
- \scratchdimen\pagegoal
- \advance\scratchdimen -\pagetotal
- \else
- \scratchdimen\textheight
- \fi
- \getrawnoflines\scratchdimen
- \xdef\noflinetablelines{\the\noflines}
-\iflinetablepreroll \else \ifnum\noflinetablelines<\plustwo
- \page \setnoftableslines
-\fi \fi
-}
- {\xdef\noflinetablelines{\linetableparameter\c!lines}}}
-
-\unexpanded\def\startlinetablecell
- {\dosingleempty\dostartlinetablecell}
-
-\def\dostartlinetablecell[#1]%
- {\global\setbox\linetablecell\hbox\bgroup
- \iffirstargument
- \getparameters[\??lec\number\linetablecolumn][#1]%
- \fi
- \xdef\linetablestep{\linetablecparameter\c!nx}%
- \ifcase\linetablestep\or
- \scratchdimen\linetablecparameter\c!width
- \scratchskip \linetablecparameter\c!distance
- \else
- \scratchdimen \zeropoint
- \scratchskip \zeropoint
- \scratchcounter\linetablecolumn
- \dorecurse\linetablestep
- {\advance\scratchdimen\linetablecparameter\c!width
- %\advance\scratchskip \linetablecparameter\c!distance
- \global\advance \linetablecolumn\plusone
- \advance\scratchskip \linetablecparameter\c!distance
- }%
- \global\linetablecolumn\scratchcounter
- \fi
- \linetablemode
- \iflinetablepreroll
- \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi
- \else
- \zerocount
- \fi
- \ifcase\linetablemode
- \ifcase\linetablehmode
- % nothing
- \or
- % fit, keep it simple
- \or
- \linetablemode\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\linetablemode<\plustwo
- \advance\scratchdimen-\linetablecparameter\c!leftoffset
- \advance\scratchdimen-\linetablecparameter\c!rightoffset
- \fi
- \ifcase\linetablemode
- \dosetraggedcommand{\linetablecparameter\c!align}%
- \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup
- \hsize\scratchdimen
- \raggedcommand
- \else
- \setalignmentswitch{\linetablecparameter\c!align}%
- \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup
- \ifcase\alignmentswitch\hss\or\hss\fi
- \fi
- \dousestylehashparameter{\??lec\number\linetablecolumn}\c!style
- \dousecolorhashparameter{\??lec\number\linetablecolumn}\c!color
- \begstrut \ignorespaces}
-
-\newconditional\linetableautoheight \settrue\linetableautoheight
-
-\unexpanded\def\stoplinetablecell
- {\unskip \endstrut
- \ifcase\linetablemode
- \endgraf
- \else
- \ifcase\alignmentswitch\else\hss\fi
- \fi
- \egroup
- \hskip\linetablecparameter\c!rightoffset
- \egroup
- \iflinetablepreroll
- \box\scratchbox
- \else
- \doifelse{\linetablecparameter\c!background}\v!color
- {\ifconditional\linetableautoheight
- \hbox{\blackrule
- [ \c!color=\linetablecparameter\c!backgroundcolor,
- \c!height=\linetablerparameter{x\c!height},
- \c!depth=\linetablerparameter{x\c!depth},
- \c!width=\wd\scratchbox]%
- \hskip-\wd\scratchbox\box\scratchbox}%
- \else
- \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}%
- \fi}%
- {\box\scratchbox}%
- \fi
- \egroup}
-
-\def\savelinetablepart
- {\global\setbox\tablebox\linetablepart
- \ifnum\linetablepart=\zerocount
- \box\scratchbox % just storing
- \else
- \vbox
- {\ifvoid\tablebox\linetablepart\else\unvbox\tablebox\linetablepart\fi
- \doif{\linetablerparameter\c!background}\v!color
- {\backgroundline[\linetablerparameter\c!backgroundcolor]}%
- {\box\scratchbox}% is also arg to \backgroundline
- \endgraf
- \linetablerparameter\c!after}%
- \fi}
-
-\def\flushlinetableparts
- {\doglobal\increment\linetableline
- \ifnum\linetableline<\noflinetablelines
- % keep collecting
- \else
- \iflinetablepreroll
- % forget about them
- \else
- \dorecurse\noflinetableparts
- {\let\linetablepart\recurselevel
- \dp\tablebox\linetablepart\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\hbox to \hsize{\box\tablebox\linetablepart\hss}\endgraf
- \ifnum\linetablepart<\noflinetableparts\relax
- \linetableparameter\c!inbetween
- \fi}%
- \ifnum\linetablerows<\noflinetablerows\relax
- \linetableparameter\c!inbetween
- \else
- % after, later
- \fi
- \linetableheadstate\plusthree
- \global\setbox\tablebox\zerocount\emptybox % here
- \fi
- % reset \linetablerow will be an option, currently
- % starts at zero after split
- \globallet\linetablerow\!!zerocount
- \globallet\linetableline\!!zerocount
- \global\linetablepage\zerocount
- \global\linetablewidth\zeropoint
- \setnoftableslines
- \fi}
-
-\unexpanded\def\startlinetablepart
- {\global\linetablesubcol\zerocount
- \setbox\scratchbox\hbox\bgroup
- \dousestyleparameter{\linetablerparameter\c!style}%
- \dousecolorparameter{\linetablerparameter\c!color}%
- \ignorespaces}
-
-\unexpanded\def\stoplinetablepart
- {\ifnum\linetablepart>\zerocount
- \unskip \unskip % remove last intercolumn skip (distance+fill)
- \fi
- \egroup
- \iflinetablepreroll \else
- \ifcase\linetablepart
- % we're collecting the repeater
- \else
- \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax
- \ifdim\scratchdimen>\linetableparameter\c!stretch\else
- \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}%
- \fi
- \fi
- \fi}
-
-\def\checklinetablepart
- {\global\advance\linetablewidth\wd\linetablecell
- \global\advance\linetablecolumn\linetablestep
- \global\advance\linetablesubcol\linetablestep
- \relax
- %\message{\the\linetablecolumn,\the\linetablesubcol}\wait
- % from now on the column counter is already incremented
- \ifcase\linetablesplitstate
- \iflinetablepreroll \else
- \box\linetablecell
- % the columncounter is one ahead !
-% \hskip\linetablecparameter\c!afstand
- \hskip\scratchskip
- \fi
- %%%
- \donefalse
- \ifcase\linetablerepeat\else
- % van te voren berekenen
- \scratchcounter\linetablecolumn\advance\scratchcounter-\plustwo
- \ifnum\linetablerepeat=\scratchcounter
- \donetrue % collecting repeater
- \fi
- \fi
- %%%%
- \ifdone
- % collecting repeater
- \else
- \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax
- \donetrue
- \fi
- \fi
- \ifdone
- \stoplinetablepart
- \iflinetablepreroll \else
- \savelinetablepart
- \fi
- \ifcase\linetablepage \or
- \global\linetablepage \plustwo
- \else
- \global\linetablepage \plusone
- \fi
- \doglobal\increment\linetablepart
- \global\linetablewidth\wd\tablebox\zerocount
- \startlinetablepart
- \fi
- \else
- \donefalse
- \!!doneafalse
- \ifcase\linetablerepeat\else
- % van te voren berekenen
- \scratchcounter\linetablecolumn \advance\scratchcounter-\plustwo
- \ifnum\linetablerepeat=\scratchcounter
- \donetrue % collecting repeater
- \fi
- \fi
- \ifdone
- \!!doneatrue
- % collecting repeater
- \else\ifdim\linetablewidth>\hsize
- \donetrue
- \else
-% \global\advance\linetablewidth\linetablecparameter\c!afstand\relax
- \global\advance\linetablewidth\scratchskip
- \ifdim\linetablewidth>\hsize % ?
- \donetrue
- \fi
- \fi\fi
- \ifdone
- \stoplinetablepart
- \savelinetablepart
- \ifcase\linetablepage \or
- \global\linetablepage \plustwo
- \else
- \global\linetablepage \plusone
- \fi
- \doglobal\increment\linetablepart
- \ifnum\linetablepart>\noflinetableparts
- \globallet\noflinetableparts\linetablepart
- \initializetablebox\linetablepart
- \fi
- \global\linetablewidth\wd\linetablecell
- \startlinetablepart
- \if!!doneb \else \ifcase\linetablerepeat \else
- % check for left/right page
- \ifcase\linetablepage\donetrue\or\donetrue\or\donefalse\fi\ifdone
- % insert repeater
- \global\advance\linetablewidth\wd\tablebox\zerocount
- \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount
- \fi
- \fi \fi
- \fi
- \iflinetablepreroll \else
- \box\linetablecell
- % the columncounter is one ahead !
-% \hskip\linetablecparameter\c!afstand
-% \hskip\scratchskip
-\dorecurse\linetablestep{\strut\hfil}%
- \hskip\scratchskip
- \fi
- \fi}
-
-% \linetableparameter\c!var -> \@@levar (when no classes)
-
-\unexpanded\def\startlinetablerun % to do: quit when nested
- {\bgroup
- \inlinetabletrue
- % 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
- \linetablerepeat\linetableparameter\c!nleft
- \linetablesplitstate % =
- \ifdim\linetableparameter\c!maxwidth>\zeropoint
- \zerocount \else \plusone
- \fi
- % optional prevdepth correction
- \iflinetablepreroll
- \globallet\noflinetablerows\!!zerocount
- \else
- \linetableparameter\c!before
- \fi
- \globallet\linetablerows\!!zerocount
- \globallet\noflinetablecolumns\!!zerocount
- \globallet\noflinetableparts\!!zerocount
- \!!counta\zerocount
- \def\docommand##1%
- {\doglobal\increment\noflinetableparts
- \advance\!!counta##1%
- \setxvalue{\??le::\noflinetableparts}{\the\!!counta}}%
- \processcommacommand[\linetableparameter\c!n]\docommand
- \initializetableboxes\noflinetableparts
- \ifcase\linetablerepeat
- \globallet\linetablepart\!!plusone
- \else
- \globallet\linetablepart\!!zerocount % repeater
- \fi
- \globallet\linetablestep\!!plusone
- \globallet\linetableline\!!zerocount
- \globallet\linetablerow \!!zerocount
- \global\linetablecolumn \zerocount
- \global\linetablesubcol \zerocount
- \global\linetablewidth \zeropoint
-\iflinetablepreroll \else \ifdim\pagetotal>\zeropoint
- \verticalstrut\kern-\struttotal
-\fi \fi
- \setnoftableslines
- \checklinetablepage
- \let\BR\linetableBR
- \let\ER\linetableER
- \let\BH\linetableBR
- \let\EH\linetableER
- \let\BC\linetableBC
- \let\EC\linetableEC
- \let\NC\linetableNC
- \let\NR\linetableNR
- \flushlinetablehead}
-
-\unexpanded\def\stoplinetablerun
- {\globallet\linetableline\!!maxcard
- \linetableheadstate\zerocount % blocked
- \flushlinetableparts
- \iflinetablepreroll \else
- \linetableparameter\c!after
- \fi
- \globallet\linetablepart \!!zerocount
- \globallet\noflinetableparts\!!zerocount
- \egroup}
-
-\def\checklinecolumndimension#1#2#3%
- {\expandafter\xdef\csname#1\number#3\endcsname
- {\expandafter\ifx\csname#1\number#3\endcsname\relax
- \the#2\linetablecell
- \else\ifdim\csname#1\number#3\endcsname<#2\linetablecell
- \the#2\linetablecell
- \else
- \csname#1\number#3\endcsname
- \fi\fi}}
-
-\def\checklinecolumnwidth {\checklinecolumndimension\??lew\wd\linetablecolumn}
-\def\checklinecolumnheight{\checklinecolumndimension\??leh\ht\linetablerow}
-\def\checklinecolumndepth {\checklinecolumndimension\??led\dp\linetablerow}
-
-\def\linetableBR
- {\dosingleempty\dolinetableBR}
-
-\def\dolinetableBR[#1]% #1 not yet implemented
- {\ifnum\linetableheadstate=1\else
- \doglobal\increment\linetablerow
- \doglobal\increment\linetablerows
- \fi
- \global\linetablecolumn\plusone
- \global\linetablesubcol\plusone
-% \linetableheight\linetablerparameter\c!height
-%
-% \ifx\linetableheight\empty
-% % nothing
-% \else\ifx\linetableheight\v!fit
-% % keep it simple
-% \else\ifx\linetableheight\v!line
-% \linetablemode\plusone
-% \else
-% \!!heighta\linetableheight
-% \advance\!!heighta-\strutdepth
-% \fi\fi\fi
-%
- \linetableheight\zeropoint
- \edef\!!stringa{\linetablerparameter\c!height}%
- \ifx\!!stringa\empty
- \linetablehmode\zerocount
- \else\ifx\!!stringa\v!fit
- \linetablehmode\plusone
- \else\ifx\!!stringa\v!line
- \linetablehmode\plustwo
- \else
- \linetableheight\!!stringa
- \advance\linetableheight-\strutdepth
- \fi\fi\fi
-%
- \startlinetablepart}
-
-\def\linetableBC
- {\startlinetablecell}
-
-\def\linetableEC
- {\stoplinetablecell
- \iflinetablepreroll
- \checklinecolumnwidth
- \checklinecolumnheight
- \checklinecolumndepth
- \fi
- \checklinetablepart}
-
-\def\linetableER
- {% \stoplinetablecell
- % no \box\linetablecell, i.e. dummy columnn, last \NC \NR
- \stoplinetablepart
- \savelinetablepart
- \advance\linetablecolumn \minusone
- \ifnum\linetablecolumn>\noflinetablecolumns
- \xdef\noflinetablecolumns{\number\linetablecolumn}%
- \fi
- \flushlinetableparts
- \global\linetablecolumn\zerocount
- \global\linetablewidth \zeropoint
- \ifcase\linetablerepeat
- \globallet\linetablepart\!!plusone
- \else
- \globallet\linetablepart\!!zerocount % repeater
- \fi
- \checklinetablepage
- \flushlinetablehead}
-
-\def\checklinetablepage
- {\global\linetablepage\zerocount
- \ifcase\linetablerepeat \else \ifcase\linetablepage
- \doif{\linetableparameter\c!repeat}\v!no
- {\global\linetablepage\doifelseoddpage\plusone\plustwo}%
- \fi \fi}
-
-\def\flushlinetablehead
- {\ifcase\linetableheadstate
- % 0 blocked
- \or
- % 1 doing head
- \or
- % 2 head done
- \or
- % 3 trigger flush
- \linetableheadstate\plusone
- \the\@@linetablehead\relax
- \linetableheadstate\plustwo
- \fi}
-
-\def\linetableNC % first time special treatment
- {\relax
- \ifcase\linetablecolumn
- \linetableBR
- \else
- \linetableEC
- \fi
- \linetableBC} % beware, this will result in BR BC EC BC NR
-
-\def\linetableNR
- {\stoplinetablecell % dummy
- \linetableER}
-
-\unexpanded\def\startlinetable
- {\startlinetablerun}
-
-\unexpanded\def\stoplinetable
- {\stoplinetablerun}
-
-\unexpanded\def\startlinetableanalysis
- {\bgroup
- \linetableprerolltrue
- \settrialtypesetting
- \startlinetablerun}
-
-\unexpanded\def\stoplinetableanalysis
- {\stoplinetablerun
- \egroup
- \globallet\noflinetablerows\linetablerows
- \dorecurse\noflinetablerows % global, from last run {\linetableparameter\c!n}
- {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}%
- \setevalue{\??ler\recurselevel x\c!height}{\getvalue{\??leh\recurselevel}}%
- \setevalue{\??ler\recurselevel x\c!depth }{\getvalue{\??led\recurselevel}}%
- \letgvalue{\??leh\recurselevel}\!!zeropoint
- \letgvalue{\??led\recurselevel}\!!zeropoint}
- \dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n}
- {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}%
- \setevalue{\??lec\recurselevel\c!width}{\getvalue{\??lew\recurselevel}}%
- \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table
-
-% todo: store in box instead of macro
-
-\newtoks \@@linetablehead
-
-\unexpanded\def\startlinetablehead#1\stoplinetablehead
- {\ifinlinetable
- \@@linetablehead\emptytoks
- \fi
- \linetableheadstate\plusthree % full
- \@@linetablehead{#1}%
- \ifinlinetable
- \flushlinetablehead
- \fi}
-
-\def\linetableBH
- {\ifx\EC\relax
- % signal, grabbing lines
- \else
- \@@linetablehead\emptytoks
- \fi
- \pushmacro\BC
- \pushmacro\EC
- \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}%
- \let\EC\relax} % signal
-
-\def\linetableEH
- {\popmacro\EC
- \popmacro\BC
- \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead}
-
-\let\startlinetablebody\donothing
-\let\stoplinetablebody \donothing
-
-\def\processlinetablebuffer
- {\dosingleempty\doprocesslinetablebuffer}
-
-\def\doprocesslinetablebuffer[#1]%
- {\bgroup
- \let\startlinetable\donothing
- \let\stoplinetable \donothing
- \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis
- \startlinetablerun \getbuffer[#1]\stoplinetablerun
- \egroup}
-
-\def\processlinetablefile#1%
- {\bgroup
- \let\startlinetable\donothing
- \let\stoplinetable \donothing
- \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis
- \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun
- \egroup}
-
-\protect
-
-\continueifinputfile{tabl-ltb.mkiv}
-
-\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
-
-\setupcolors[state=start]
-
-\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/Master/texmf-dist/tex/context/base/toks-ini.lua b/Master/texmf-dist/tex/context/base/toks-ini.lua
deleted file mode 100644
index f8b94589040..00000000000
--- a/Master/texmf-dist/tex/context/base/toks-ini.lua
+++ /dev/null
@@ -1,256 +0,0 @@
-if not modules then modules = { } end modules ['toks-ini'] = {
- version = 1.001,
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-tokens = tokens or { }
-
-local tokens = tokens
-local tostring = tostring
-local utfchar = utf.char
-local char = string.char
-local printtable = table.print
-local concat = table.concat
-
-if newtoken then
-
- if setinspector then
-
- local istoken = newtoken.is_token
- local simple = { letter = "letter", other_char = "other" }
-
- local function astable(t)
- if t and istoken(t) then
- local cmdname = t.cmdname
- local simple = simple[cmdname]
- if simple then
- return {
- category = simple,
- character = utfchar(t.mode) or nil,
- }
- else
- return {
- command = t.command,
- id = t.id,
- tok = t.tok,
- csname = t.csname,
- active = t.active,
- expandable = t.expandable,
- protected = t.protected,
- mode = t.mode,
- cmdname = cmdname,
- }
- end
- end
- end
-
- tokens.istoken = istoken
- tokens.astable = astable
-
- setinspector(function(v) if istoken(v) then printtable(astable(v),tostring(v)) return true end end)
-
- end
-
- local scan_toks = newtoken.scan_toks
- local scan_string = newtoken.scan_string
- local scan_int = newtoken.scan_int
- local scan_code = newtoken.scan_code
- local scan_dimen = newtoken.scan_dimen
- local scan_glue = newtoken.scan_glue
- local scan_keyword = newtoken.scan_keyword
- local scan_token = newtoken.scan_token
- local scan_word = newtoken.scan_word
- local scan_number = newtoken.scan_number
-
- local get_next = newtoken.get_next
-
- local set_macro = newtoken.set_macro
-
- set_macro = function(k,v,g)
- if g == "global" then
- context.setgvalue(k,v or '')
- else
- context.setvalue(k,v or '')
- end
- end
-
- local bits = {
- escape = 2^ 0,
- begingroup = 2^ 1,
- endgroup = 2^ 2,
- mathshift = 2^ 3,
- alignment = 2^ 4,
- endofline = 2^ 5,
- parameter = 2^ 6,
- superscript = 2^ 7,
- subscript = 2^ 8,
- ignore = 2^ 9,
- space = 2^10, -- 1024
- letter = 2^11,
- other = 2^12,
- active = 2^13,
- comment = 2^14,
- invalid = 2^15,
- --
- character = 2^11 + 2^12,
- whitespace = 2^13 + 2^10, -- / needs more checking
- --
- open = 2^10 + 2^1, -- space + begingroup
- close = 2^10 + 2^2, -- space + endgroup
- }
-
- -- for k, v in next, bits do bits[v] = k end
-
- tokens.bits = bits
-
- local space_bits = bits.space
-
- -- words are space or \relax terminated and the trailing space is gobbled; a word
- -- can contain any non-space letter/other
-
- local t = { } -- small optimization, a shared variable that is not reset
-
- if scan_word then
-
- scan_number = function(base)
- local s = scan_word()
- if not s then
- return nil
- elseif base then
- return tonumber(s,base)
- else
- return tonumber(s)
- end
- end
-
- else
-
- scan_word = function()
- local n = 0
- while true do
- local c = scan_code()
- if c then
- n = n + 1
- t[n] = utfchar(c)
- elseif scan_code(space_bits) then
- if n > 0 then
- break
- end
- elseif n > 0 then
- break
- else
- return
- end
- end
- return concat(t,"",1,n)
- end
-
- -- so we gobble the space (like scan_int) (number has to be space or non-char terminated
- -- as we accept 0xabcd and such so there is no clear separator for a keyword
-
- scan_number = function(base)
- local n = 0
- while true do
- local c = scan_code()
- if c then
- n = n + 1
- t[n] = char(c)
- elseif scan_code(space_bits) then
- if n > 0 then
- break
- end
- elseif n > 0 then
- break
- else
- return
- end
- end
- local s = concat(t,"",1,n)
- if base then
- return tonumber(s,base)
- else
- return tonumber(s)
- end
- end
-
- end
-
- -- -- the next one cannot handle \iftrue true\else false\fi
- --
- -- local function scan_boolean()
- -- if scan_keyword("true") then
- -- return true
- -- elseif scan_keyword("false") then
- -- return false
- -- else
- -- return nil
- -- end
- -- end
-
- local function scan_boolean()
- local kw = scan_word()
- if kw == "true" then
- return true
- elseif kw == "false" then
- return false
- else
- return nil
- end
- end
-
- tokens.scanners = { -- these expand
- token = scan_token or get_next,
- toks = scan_toks,
- tokens = scan_toks,
- dimen = scan_dimen,
- dimension = scan_dimen,
- glue = scan_glue,
- skip = scan_glue,
- integer = scan_int,
- count = scan_int,
- string = scan_string,
- code = scan_code,
- word = scan_word,
- number = scan_number,
- boolean = scan_boolean,
- keyword = scan_keyword,
- }
-
- tokens.getters = { -- these don't expand
- token = get_next,
- count = tex.getcount,
- dimen = tex.getdimen,
- box = tex.getbox,
- }
-
- tokens.setters = {
- macro = set_macro,
- count = tex.setcount,
- dimen = tex.setdimen,
- box = tex.setbox,
- }
-
-end
-
--- static int run_scan_token(lua_State * L)
--- {
--- saved_tex_scanner texstate;
--- save_tex_scanner(texstate);
--- get_x_token();
--- make_new_token(L, cur_cmd, cur_chr, cur_cs);
--- unsave_tex_scanner(texstate);
--- return 1;
--- }
---
--- static int run_get_future(lua_State * L)
--- {
--- /* saved_tex_scanner texstate; */
--- /* save_tex_scanner(texstate); */
--- get_token();
--- make_new_token(L, cur_cmd, cur_chr, cur_cs);
--- back_input();
--- /* unsave_tex_scanner(texstate); */
--- return 1;
--- }
diff --git a/Master/texmf-dist/tex/context/base/toks-tra.lua b/Master/texmf-dist/tex/context/base/toks-tra.lua
deleted file mode 100644
index bf2b91d38a3..00000000000
--- a/Master/texmf-dist/tex/context/base/toks-tra.lua
+++ /dev/null
@@ -1,298 +0,0 @@
-if not modules then modules = { } end modules ['toks-ini'] = {
- version = 1.001,
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-
-local utfbyte, utfchar, utfvalues = utf.byte, utf.char, utf.values
-local format, gsub = string.format, string.gsub
-local tostring = tostring
-
-local tokens = tokens
-local newtoken = newtoken
-local tex = tex
-local context = context
-local commands = commands
-
-tokens.collectors = tokens.collectors or { }
-local collectors = tokens.collectors
-
-collectors.data = collectors.data or { }
-local collectordata = collectors.data
-
-collectors.registered = collectors.registered or { }
-local registered = collectors.registered
-
-local report = logs.reporter("tokens","collectors")
-
-if newtoken then
-
- -- todo:
- --
- -- register : macros that will be expanded (only for demo-ing)
- -- flush : print back to tex
- -- test : fancy stuff
-
- local get_next = newtoken.get_next
- local create = newtoken.create
-
- function collectors.install(tag,end_cs)
- local data, d = { }, 0
- collectordata[tag] = data
- end_cs = gsub(end_cs,"^\\","")
- while true do
- local t = get_next()
- if t.csname == end_cs then
- context[end_cs]()
- return
- else
- d = d + 1
- data[d] = t
- end
- end
- end
-
- local simple = { letter = "letter", other_char = "other" }
-
- function collectors.show(data)
- -- We no longer have methods as we only used (in demos) method a
- -- so there is no need to burden the core with this. We have a
- -- different table anyway.
- if type(data) == "string" then
- data = collectordata[data]
- end
- if not data then
- return
- end
- local ctx_NC = context.NC
- local ctx_NR = context.NR
- local ctx_bold = context.bold
- local ctx_verbatim = context.verbatim
- context.starttabulate { "|Tl|Tc|Tl|" }
- ctx_NC() ctx_bold("cmd")
- ctx_NC() ctx_bold("meaning")
- ctx_NC() ctx_bold("properties")
- ctx_NC() ctx_NR()
- context.HL()
- for i=1,#data do
- local token = data[i]
- local cmdname = token.cmdname
- local simple = simple[cmdname]
- ctx_NC()
- ctx_verbatim(simple or cmdname)
- ctx_NC()
- ctx_verbatim(simple and utfchar(token.mode) or token.csname)
- ctx_NC()
- if token.active then context("active ") end
- if token.expandable then context("expandable ") end
- if token.protected then context("protected ") end
- ctx_NC()
- ctx_NR()
- end
- context.stoptabulate()
- end
-
- local function printlist(data)
- if data and #data > 0 then
- report("not supported (yet): printing back to tex")
- end
- end
-
- tokens.printlist = printlist -- will change to another namespace
-
- function collectors.flush(tag)
- printlist(collectordata[tag])
- end
-
- function collectors.test(tag,handle)
- report("not supported (yet): testing")
- end
-
- function collectors.register(name)
- report("not supported (yet): registering")
- end
-
-else
-
- -- 1 = command, 2 = modifier (char), 3 = controlsequence id
-
- local create = token.create
- local csname_id = token.csname_id
- local command_id = token.command_id
- local command_name = token.command_name
- local get_next = token.get_next
- local expand = token.expand
- local csname_name = token.csname_name
-
- local function printlist(data)
- if data and #data > 0 then
- callbacks.push('token_filter', function ()
- callbacks.pop('token_filter') -- tricky but the nil assignment helps
- return data
- end)
- end
- end
-
- tokens.printlist = printlist -- will change to another namespace
-
- function collectors.flush(tag)
- printlist(collectordata[tag])
- end
-
- function collectors.register(name)
- registered[csname_id(name)] = name
- end
-
- local call = command_id("call")
- local letter = command_id("letter")
- local other = command_id("other_char")
-
- function collectors.install(tag,end_cs)
- local data, d = { }, 0
- collectordata[tag] = data
- end_cs = gsub(end_cs,"^\\","")
- local endcs = csname_id(end_cs)
- while true do
- local t = get_next()
- local a, b = t[1], t[3]
- if b == endcs then
- context[end_cs]()
- return
- elseif a == call and registered[b] then
- expand()
- else
- d = d + 1
- data[d] = t
- end
- end
- end
-
- function collectors.show(data)
- -- We no longer have methods as we only used (in demos) method a
- -- so there is no need to burden the core with this.
- if type(data) == "string" then
- data = collectordata[data]
- end
- if not data then
- return
- end
- local ctx_NC = context.NC
- local ctx_NR = context.NR
- local ctx_bold = context.bold
- local ctx_verbatim = context.verbatim
- context.starttabulate { "|T|Tr|cT|Tr|T|" }
- ctx_NC() ctx_bold("cmd")
- ctx_NC() ctx_bold("chr")
- ctx_NC()
- ctx_NC() ctx_bold("id")
- ctx_NC() ctx_bold("name")
- ctx_NC() ctx_NR()
- context.HL()
- for i=1,#data do
- local token = data[i]
- local cmd = token[1]
- local chr = token[2]
- local id = token[3]
- local name = command_name(token)
- ctx_NC()
- ctx_verbatim(name)
- ctx_NC()
- if tonumber(chr) >= 0 then
- ctx_verbatim(chr)
- end
- ctx_NC()
- if cmd == letter or cmd == other then
- ctx_verbatim(utfchar(chr))
- end
- ctx_NC()
- if id > 0 then
- ctx_verbatim(id)
- end
- ctx_NC()
- if id > 0 then
- ctx_verbatim(csname_name(token) or "")
- end
- ctx_NC() ctx_NR()
- end
- context.stoptabulate()
- end
-
- function collectors.test(tag,handle)
- local t, w, tn, wn = { }, { }, 0, 0
- handle = handle or collectors.defaultwords
- local tagdata = collectordata[tag]
- for k=1,#tagdata do
- local v = tagdata[k]
- if v[1] == letter then
- wn = wn + 1
- w[wn] = v[2]
- else
- if wn > 0 then
- handle(t,w)
- wn = 0
- end
- tn = tn + 1
- t[tn] = v
- end
- end
- if wn > 0 then
- handle(t,w)
- end
- collectordata[tag] = t
- end
-
-end
-
--- Interfacing:
-
-commands.collecttokens = collectors.install
-commands.showtokens = collectors.show
-commands.flushtokens = collectors.flush
-commands.testtokens = collectors.test
-commands.registertoken = collectors.register
-
--- Redundant:
-
--- function collectors.test(tag)
--- printlist(collectordata[tag])
--- end
-
--- For old times sake:
-
-collectors.dowithwords = collectors.test
-
--- This is only used in old articles ... will move to a module:
-
-local create = newtoken and newtoken.create or token.create
-
-tokens.vbox = create("vbox")
-tokens.hbox = create("hbox")
-tokens.vtop = create("vtop")
-tokens.bgroup = create(utfbyte("{"),1)
-tokens.egroup = create(utfbyte("}"),2)
-
-tokens.letter = function(chr) return create(utfbyte(chr),11) end
-tokens.other = function(chr) return create(utfbyte(chr),12) end
-
-tokens.letters = function(str)
- local t, n = { }, 0
- for chr in utfvalues(str) do
- n = n + 1
- t[n] = create(chr, 11)
- end
- return t
-end
-
-function collectors.defaultwords(t,str)
- if t then
- local n = #t
- n = n + 1 ; t[n] = tokens.bgroup
- n = n + 1 ; t[n] = create("red")
- for i=1,#str do
- n = n + 1 ; t[n] = tokens.other('*')
- end
- n = n + 1 ; t[n] = tokens.egroup
- end
-end
diff --git a/Master/texmf-dist/tex/context/base/trac-tex.lua b/Master/texmf-dist/tex/context/base/trac-tex.lua
deleted file mode 100644
index 5fe4754cbde..00000000000
--- a/Master/texmf-dist/tex/context/base/trac-tex.lua
+++ /dev/null
@@ -1,122 +0,0 @@
-if not modules then modules = { } end modules ['trac-tex'] = {
- version = 1.001,
- comment = "companion to trac-deb.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- moved from trac-deb.lua
-
-local next = next
-
-local texhashtokens = tex.hashtokens
-
-local trackers = trackers
-
-local saved = { }
-
-function trackers.savehash()
- saved = texhashtokens()
-end
-
-if newtoken then
-
- function trackers.dumphashtofile(filename,delta)
- local list = { }
- local hash = tex.hashtokens()
- local create = newtoken.create
- for name, token in next, hash do
- if not delta or not saved[name] then
- if token[2] ~= 0 then -- still old interface
- local token = create(name)
- -- inspect(token)
- local category = token.cmdname
- local dk = list[category]
- if not dk then
- dk = {
- names = { },
- found = 0,
- -- code = token[1],
- }
- list[category] = dk
- end
- if token.protected then
- if token.expandable then
- dk.names[name] = "ep"
- else
- dk.names[name] = "-p"
- end
- else
- if token.expandable then
- dk.names[name] = "ep"
- else
- dk.names[name] = "--"
- end
- end
- dk.found = dk.found + 1
- end
- end
- end
- table.save(filename or tex.jobname .. "-hash.log",list)
- end
-
-else
-
- function trackers.dumphashtofile(filename,delta)
- local list = { }
- local hash = texhashtokens()
- local getname = token.command_name
- for name, token in next, hash do
- if not delta or not saved[name] then
- -- token: cmd, chr, csid -- combination cmd,chr determines name
- local category = getname(token)
- local dk = list[category]
- if not dk then
- -- a bit funny names but this sorts better (easier to study)
- dk = { names = { }, found = 0, code = token[1] }
- list[category] = dk
- end
- dk.names[name] = { token[2], token[3] }
- dk.found = dk.found + 1
- end
- end
- table.save(filename or tex.jobname .. "-hash.log",list)
- end
-
-end
-
-local delta = nil
-
-local function dump_hash(wanteddelta)
- if delta == nil then
- saved = saved or texhashtokens() -- no need for trackers.dump_hash
- luatex.registerstopactions(1,function() dump_hash(nil,wanteddelta) end) -- at front
- end
- delta = wanteddelta
-end
-
-directives.register("system.dumphash", function() dump_hash(false) end)
-directives.register("system.dumpdelta", function() dump_hash(true ) end)
-
-local report_dump = logs.reporter("resolvers","dump")
-
-local function saveusedfilesintrees(format)
- local data = {
- jobname = environment.jobname or "?",
- version = environment.version or "?",
- kind = environment.kind or "?",
- files = resolvers.instance.foundintrees
- }
- local filename = file.replacesuffix(environment.jobname or "context-job",'jlg')
- if format == "lua" then
- io.savedata(filename,table.serialize(data,true))
- else
- io.savedata(filename,table.toxml(data,"job"))
- end
-end
-
-directives.register("system.dumpfiles", function(v)
- luatex.registerstopactions(function() saveusedfilesintrees(v) end)
-end)
-
diff --git a/Master/texmf-dist/tex/context/base/type-run.mkiv b/Master/texmf-dist/tex/context/base/type-run.mkiv
deleted file mode 100644
index 0455d896636..00000000000
--- a/Master/texmf-dist/tex/context/base/type-run.mkiv
+++ /dev/null
@@ -1,51 +0,0 @@
-%D \module
-%D [ file=type-run,
-%D version=2001.04.20,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Runtime Macros,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-\unprotect
-
-\gdef\typetypescript
- {\dotripleempty\dotypetypescript}
-
-\gdef\dotypetypescript[#1][#2][#3]%
- {\bgroup
- \def\dochecktypescript##1##2% script use
- {\doifelsenothing{##1##2}
- {\donetrue}
- {\doifelsecommon{##1}{##2}\donetrue\donefalse}}
- \edef\typescriptone {\truetypescript{#1}}%
- \edef\typescripttwo {\truetypescript{#2}}%
- \edef\typescriptthree{\truetypescript{#3}}%
- \unexpanded\def\starttypescript
- {\bgroup
- \obeylines % else we loose the first line due to lookahead
- \dotripleempty\dostarttypescript}
- \def\dostarttypescript[##1][##2][##3]%
- {\def\next####1\stoptypescript{\egroup}
- \dochecktypescript{##1}\typescriptone \ifdone
- \dochecktypescript{##2}\typescripttwo \ifdone
- \dochecktypescript{##3}\typescriptthree\ifdone
- \def\next%
- {\unexpanded\def\stoptypescript{\egroup\type{\stoptypescript}}
- % what follows now is quite ugly
- \skipfirstverbatimlinefalse
- \type{\starttypescript}
- \doifsomething{##1}{\type{[##1]}}
- \doifsomething{##2}{\type{[##2]}}
- \doifsomething{##3}{\type{[##3]}}
- \processdisplayverbatim{\stoptypescript}}%
- \fi\fi\fi
- \next}
- \processcommacommand[\typescriptfiles]\ReadFile % \dodousetypescript
- \egroup}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/typo-brk.lua b/Master/texmf-dist/tex/context/base/typo-brk.lua
deleted file mode 100644
index a9d775856b4..00000000000
--- a/Master/texmf-dist/tex/context/base/typo-brk.lua
+++ /dev/null
@@ -1,352 +0,0 @@
-if not modules then modules = { } end modules ['typo-brk'] = {
- version = 1.001,
- comment = "companion to typo-brk.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- this code dates from the beginning and is kind of experimental; it
--- will be optimized and improved soon
-
-local next, type, tonumber = next, type, tonumber
-local utfbyte, utfchar = utf.byte, utf.char
-local format = string.format
-
-local trace_breakpoints = false trackers.register("typesetters.breakpoints", function(v) trace_breakpoints = v end)
-
-local report_breakpoints = logs.reporter("typesetting","breakpoints")
-
-local nodes, node = nodes, node
-
-local settings_to_array = utilities.parsers.settings_to_array
-
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-local tonode = nuts.tonode
-
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-local getfont = nuts.getfont
-local getid = nuts.getid
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getattr = nuts.getattr
-local setattr = nuts.setattr
-
-local copy_node = nuts.copy
-local copy_nodelist = nuts.copy_list
-local free_node = nuts.free
-local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
-local remove_node = nuts.remove
-
-local tonodes = nuts.tonodes
-
-local texsetattribute = tex.setattribute
-local unsetvalue = attributes.unsetvalue
-
-local nodepool = nuts.pool
-local tasks = nodes.tasks
-
-local v_reset = interfaces.variables.reset
-
-local implement = interfaces.implement
-
-local new_penalty = nodepool.penalty
-local new_glue = nodepool.glue
-local new_disc = nodepool.disc
-
-local nodecodes = nodes.nodecodes
-local kerncodes = nodes.kerncodes
-
-local glyph_code = nodecodes.glyph
-local kern_code = nodecodes.kern
-
-local kerning_code = kerncodes.kerning
-
-local typesetters = typesetters
-
-typesetters.breakpoints = typesetters.breakpoints or {}
-local breakpoints = typesetters.breakpoints
-
-breakpoints.mapping = breakpoints.mapping or { }
-breakpoints.numbers = breakpoints.numbers or { }
-
-breakpoints.methods = breakpoints.methods or { }
-local methods = breakpoints.methods
-
-local a_breakpoints = attributes.private("breakpoint")
-
-storage.register("typesetters/breakpoints/mapping", breakpoints.mapping, "typesetters.breakpoints.mapping")
-
-local mapping = breakpoints.mapping
-local numbers = breakpoints.mapping
-
-for i=1,#mapping do
- local m = mapping[i]
- numbers[m.name] = m
-end
-
-local function insert_break(head,start,before,after)
- insert_node_before(head,start,new_penalty(before))
- insert_node_before(head,start,new_glue(0))
- insert_node_after(head,start,new_glue(0))
- insert_node_after(head,start,new_penalty(after))
-end
-
-methods[1] = function(head,start)
- if getprev(start) and getnext(start) then
- insert_break(head,start,10000,0)
- end
- return head, start
-end
-
-methods[2] = function(head,start) -- ( => (-
- if getprev(start) and getnext(start) then
- local tmp
- head, start, tmp = remove_node(head,start)
- head, start = insert_node_before(head,start,new_disc())
- -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
- setfield(start,"attr",getfield(tmp,"attr"))
- setfield(start,"replace",tmp)
- local tmp = copy_node(tmp)
- local hyphen = copy_node(tmp)
- setfield(hyphen,"char",languages.prehyphenchar(getfield(tmp,"lang")))
- setfield(tmp,"next",hyphen)
- setfield(hyphen,"prev",tmp)
- setfield(start,"post",tmp)
- insert_break(head,start,10000,10000)
- end
- return head, start
-end
-
-methods[3] = function(head,start) -- ) => -)
- if getprev(start) and getnext(start) then
- local tmp
- head, start, tmp = remove_node(head,start)
- head, start = insert_node_before(head,start,new_disc())
- -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
- setfield(start,"attr",getfield(tmp,"attr"))
- setfield(start,"replace",tmp)
- local tmp = copy_node(tmp)
- local hyphen = copy_node(tmp)
- setfield(hyphen,"char",languages.prehyphenchar(getfield(tmp,"lang")))
- setfield(tmp,"prev",hyphen)
- setfield(hyphen,"next",tmp)
- setfield(start,"pre",hyphen)
- insert_break(head,start,10000,10000)
- end
- return head, start
-end
-
-methods[4] = function(head,start) -- - => - - -
- if getprev(start) and getnext(start) then
- local tmp
- head, start, tmp = remove_node(head,start)
- head, start = insert_node_before(head,start,new_disc())
- -- setfield(start,"attr",copy_nodelist(getfield(tmp,"attr"))) -- just a copy will do
- setfield(start,"attr",getfield(tmp,"attr"))
- setfield(start,"pre",copy_node(tmp))
- setfield(start,"post",copy_node(tmp))
- setfield(start,"replace",tmp)
- insert_break(head,start,10000,10000)
- end
- return head, start
-end
-
-methods[5] = function(head,start,settings) -- x => p q r
- if getprev(start) and getnext(start) then
- local tmp
- head, start, tmp = remove_node(head,start)
- head, start = insert_node_before(head,start,new_disc())
- local attr = getfield(tmp,"attr")
- local font = getfont(tmp)
- local left = settings.left
- local right = settings.right
- local middle = settings.middle
- if left then
- setfield(start,"pre",(tonodes(tostring(left),font,attr))) -- was right
- end
- if right then
- setfield(start,"post",(tonodes(tostring(right),font,attr))) -- was left
- end
- if middle then
- setfield(start,"replace",(tonodes(tostring(middle),font,attr)))
- end
- -- setfield(start,"attr",copy_nodelist(attr)) -- todo: critical only -- just a copy will do
- setfield(start,"attr",attr) -- todo: critical only -- just a copy will do
- free_node(tmp)
- insert_break(head,start,10000,10000)
- end
- return head, start
-end
-
-function breakpoints.handler(head)
- head = tonut(head)
- local done, numbers = false, languages.numbers
- local start, n = head, 0
- while start do
- local id = getid(start)
- if id == glyph_code then
- local attr = getattr(start,a_breakpoints)
- if attr and attr > 0 then
- setattr(start,a_breakpoints,unsetvalue) -- maybe test for subtype > 256 (faster)
- -- look ahead and back n chars
- local data = mapping[attr]
- if data then
- local map = data.characters
- local cmap = map[getchar(start)]
- if cmap then
- local lang = getfield(start,"lang")
- -- we do a sanity check for language
- local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""])
- if smap then
- if n >= smap.nleft then
- local m = smap.nright
- local next = getnext(start)
- while next do -- gamble on same attribute (not that important actually)
- local id = getid(next)
- if id == glyph_code then -- gamble on same attribute (not that important actually)
- if map[getchar(next)] then
- break
- elseif m == 1 then
- local method = methods[smap.type]
- if method then
- head, start = method(head,start,smap)
- done = true
- end
- break
- else
- m = m - 1
- next = getnext(next)
- end
- elseif id == kern_code and getsubtype(next) == kerning_code then
- next = getnext(next)
- -- ignore intercharacter kerning, will go way
- else
- -- we can do clever and set n and jump ahead but ... not now
- break
- end
- end
- end
- n = 0
- else
- n = n + 1
- end
- else
- n = n + 1
- end
- else
- n = 0
- end
- else
- -- n = n + 1 -- if we want single char handling (|-|) then we will use grouping and then we need this
- end
- elseif id == kern_code and getsubtype(start) == kerning_code then
- -- ignore intercharacter kerning, will go way
- else
- n = 0
- end
- start = getnext(start)
- end
- return tonode(head), done
-end
-
-local enabled = false
-
-function breakpoints.define(name)
- local data = numbers[name]
- if data then
- -- error
- else
- local number = #mapping + 1
- local data = {
- name = name,
- number = number,
- characters = { },
- }
- mapping[number] = data
- numbers[name] = data
- end
-end
-
-function breakpoints.setreplacement(name,char,language,settings)
- char = utfbyte(char)
- local data = numbers[name]
- if data then
- local characters = data.characters
- local cmap = characters[char]
- if not cmap then
- cmap = { }
- characters[char] = cmap
- end
- local left, right, middle = settings.left, settings.right, settings.middle
- cmap[language or ""] = {
- type = tonumber(settings.type) or 1,
- nleft = tonumber(settings.nleft) or 1,
- nright = tonumber(settings.nright) or 1,
- left = left ~= "" and left or nil,
- right = right ~= "" and right or nil,
- middle = middle ~= "" and middle or nil,
- } -- was { type or 1, before or 1, after or 1 }
- end
-end
-
-function breakpoints.set(n)
- if n == v_reset then
- n = unsetvalue
- else
- n = mapping[n]
- if not n then
- n = unsetvalue
- else
- if not enabled then
- if trace_breakpoints then
- report_breakpoints("enabling breakpoints handler")
- end
- tasks.enableaction("processors","typesetters.breakpoints.handler")
- end
- n = n.number
- end
- end
- texsetattribute(a_breakpoints,n)
-end
-
--- function breakpoints.enable()
--- tasks.enableaction("processors","typesetters.breakpoints.handler")
--- end
-
--- interface
-
-implement {
- name = "definebreakpoints",
- actions = breakpoints.define,
- arguments = "string"
-}
-
-implement {
- name = "definebreakpoint",
- actions = breakpoints.setreplacement,
- arguments = {
- "string",
- "string",
- "string",
- {
- { "type", "integer" },
- { "nleft" },
- { "nright" },
- { "right" },
- { "left" },
- { "middle" },
- }
- }
-}
-
-implement {
- name = "setbreakpoints",
- actions = breakpoints.set,
- arguments = "string"
-}
diff --git a/Master/texmf-dist/tex/context/base/typo-dha.lua b/Master/texmf-dist/tex/context/base/typo-dha.lua
deleted file mode 100644
index 904b774ec30..00000000000
--- a/Master/texmf-dist/tex/context/base/typo-dha.lua
+++ /dev/null
@@ -1,415 +0,0 @@
-if not modules then modules = { } end modules ['typo-dha'] = {
- version = 1.001,
- comment = "companion to typo-dir.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- Some analysis by Idris:
---
--- 1. Assuming the reading- vs word-order distinction (bidi-char types) is governing;
--- 2. Assuming that 'ARAB' represents an actual arabic string in raw input order, not word-order;
--- 3. Assuming that 'BARA' represent the correct RL word order;
---
--- Then we have, with input: LATIN ARAB
---
--- \textdir TLT LATIN ARAB => LATIN BARA
--- \textdir TRT LATIN ARAB => LATIN BARA
--- \textdir TRT LRO LATIN ARAB => LATIN ARAB
--- \textdir TLT LRO LATIN ARAB => LATIN ARAB
--- \textdir TLT RLO LATIN ARAB => NITAL ARAB
--- \textdir TRT RLO LATIN ARAB => NITAL ARAB
-
--- elseif d == "es" then -- European Number Separator
--- elseif d == "et" then -- European Number Terminator
--- elseif d == "cs" then -- Common Number Separator
--- elseif d == "nsm" then -- Non-Spacing Mark
--- elseif d == "bn" then -- Boundary Neutral
--- elseif d == "b" then -- Paragraph Separator
--- elseif d == "s" then -- Segment Separator
--- elseif d == "ws" then -- Whitespace
--- elseif d == "on" then -- Other Neutrals
-
--- todo : delayed inserts here
--- todo : get rid of local functions here
--- beware: math adds whatsits afterwards so that will mess things up
--- todo : use new dir functions
--- todo : make faster
--- todo : move dir info into nodes
--- todo : swappable tables and floats i.e. start-end overloads (probably loop in builders)
--- todo : check if we still have crashes in luatex when non-matched (used to be the case)
-
--- I removed the original tracing code and now use the colorful one. If I ever want to change
--- something I will just inject prints for tracing.
-
-local nodes, node = nodes, node
-
-local trace_directions = false trackers.register("typesetters.directions.default", function(v) trace_directions = v end)
-
-local report_directions = logs.reporter("typesetting","text directions")
-
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-local tonode = nuts.tonode
-local nutstring = nuts.tostring
-
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getfont = nuts.getfont
-local getchar = nuts.getchar
-local getid = nuts.getid
-local getsubtype = nuts.getsubtype
-local getlist = nuts.getlist
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getattr = nuts.getattr
-local getprop = nuts.getprop
-local setprop = nuts.setprop
-
-local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
-local remove_node = nuts.remove
-local end_of_math = nuts.end_of_math
-
-local nodepool = nuts.pool
-
-local nodecodes = nodes.nodecodes
-local whatcodes = nodes.whatcodes
-local mathcodes = nodes.mathcodes
-
-local glyph_code = nodecodes.glyph
-local whatsit_code = nodecodes.whatsit
-local math_code = nodecodes.math
-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 localpar_code = whatcodes.localpar
-local dir_code = whatcodes.dir
-
-local new_textdir = nodepool.textdir
-
-local hasbit = number.hasbit
-local formatters = string.formatters
-local insert = table.insert
-
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
-local fontchar = fonthashes.characters
-
-local chardirections = characters.directions
-local charmirrors = characters.mirrors
-local charclasses = characters.textclasses
-
-local directions = typesetters.directions
-local setcolor = directions.setcolor
-local getglobal = directions.getglobal
-
-local a_state = attributes.private('state')
-local a_directions = attributes.private('directions')
-
-local strip = false
-
-local s_isol = fonts.analyzers.states.isol
-
-local function stopdir(finish)
- return new_textdir(finish == "TRT" and "-TRT" or "-TLT")
-end
-
-local function startdir(finish)
- return new_textdir(finish == "TRT" and "+TRT" or "+TLT")
-end
-
-local function process(start)
-
- local head = tonut(start) -- we have a global head
-
- local current = head
- local inserted = nil
- local finish = nil
- local autodir = 0
- local embedded = 0
- local override = 0
- local pardir = 0
- local textdir = 0
- local done = false
- local finished = nil
- local finidir = nil
- local stack = { }
- local top = 0
- local obsolete = { }
- local lro = false
- local lro = false
- local prevattr = false
- local fences = { }
-
- local function finish_auto_before()
- head, inserted = insert_node_before(head,current,stopdir(finish))
- finished, finidir, autodir = inserted, finish, 0
- finish, done = nil, true
- end
-
- local function finish_auto_after()
- head, current = insert_node_after(head,current,stopdir(finish))
- finished, finidir, autodir = current, finish, 0
- finish, done = nil, true
- end
-
- local function force_auto_left_before(direction)
- if finish then
- head, inserted = insert_node_before(head,current,stopdir(finish))
- finished = inserted
- finidir = finish
- end
- if embedded >= 0 then
- finish, autodir = "TLT", 1
- else
- finish, autodir = "TRT", -1
- end
- done = true
- if finidir == finish then
- head = remove_node(head,finished,true)
- else
- head, inserted = insert_node_before(head,current,startdir(finish))
- end
- end
-
- local function force_auto_right_before(direction)
- if finish then
- head, inserted = insert_node_before(head,current,stopdir(finish))
- finished = inserted
- finidir = finish
- end
- if embedded <= 0 then
- finish, autodir = "TRT", -1
- else
- finish, autodir = "TLT", 1
- end
- done = true
- if finidir == finish then
- head = remove_node(head,finished,true)
- else
- head, inserted = insert_node_before(head,current,startdir(finish))
- end
- end
-
- local function nextisright(current)
- current = getnext(current)
- local id = getid(current)
- if id == glyph_code then
- local character = getchar(current)
- local direction = chardirections[character]
- return direction == "r" or direction == "al" or direction == "an"
- end
- end
-
- local function previsright(current)
- current = getprev(current)
- local id = getid(current)
- if id == glyph_code then
- local character = getchar(current)
- local direction = chardirections[character]
- return direction == "r" or direction == "al" or direction == "an"
- end
- end
-
- while current do
- local id = getid(current)
- if id == math_code then
- current = getnext(end_of_math(getnext(current)))
- else
- local attr = getattr(current,a_directions)
- if attr and attr > 0 and attr ~= prevattr then
- if not getglobal(a) then
- lro, rlo = false, false
- end
- prevattr = attr
- end
- if id == glyph_code then
- if attr and attr > 0 then
- local character = getchar(current)
- local direction = chardirections[character]
- local reversed = false
- if rlo or override > 0 then
- if direction == "l" then
- direction = "r"
- reversed = true
- end
- elseif lro or override < 0 then
- if direction == "r" or direction == "al" then
- setprop(current,a_state,s_isol)
- direction = "l"
- reversed = true
- end
- end
- if direction == "on" then
- local mirror = charmirrors[character]
- if mirror and fontchar[getfont(current)][mirror] then
- local class = charclasses[character]
- if class == "open" then
- if nextisright(current) then
- if autodir >= 0 then
- force_auto_right_before(direction)
- end
- setfield(current,"char",mirror)
- done = true
- elseif autodir < 0 then
- setfield(current,"char",mirror)
- done = true
- else
- mirror = false
- end
- local fencedir = autodir == 0 and textdir or autodir
- fences[#fences+1] = fencedir
- elseif class == "close" and #fences > 0 then
- local fencedir = fences[#fences]
- fences[#fences] = nil
- if fencedir < 0 then
- setfield(current,"char",mirror)
- done = true
- force_auto_right_before(direction)
- else
- mirror = false
- end
- elseif autodir < 0 then
- setfield(current,"char",mirror)
- done = true
- else
- mirror = false
- end
- end
- if trace_directions then
- setcolor(current,direction,false,mirror)
- end
- elseif direction == "l" then
- if trace_directions then
- setcolor(current,"l",reversed)
- end
- if autodir <= 0 then -- could be option
- force_auto_left_before(direction)
- end
- elseif direction == "r" then
- if trace_directions then
- setcolor(current,"r",reversed)
- end
- if autodir >= 0 then
- force_auto_right_before(direction)
- end
- elseif direction == "en" then -- european number
- if trace_directions then
- setcolor(current,"l")
- end
- if autodir <= 0 then -- could be option
- force_auto_left_before(direction)
- end
- elseif direction == "al" then -- arabic number
- if trace_directions then
- setcolor(current,"r")
- end
- if autodir >= 0 then
- force_auto_right_before(direction)
- end
- elseif direction == "an" then -- arabic number
- if trace_directions then
- setcolor(current,"r")
- end
- if autodir >= 0 then
- force_auto_right_before(direction)
- end
- elseif direction == "lro" then -- Left-to-Right Override -> right becomes left
- top = top + 1
- stack[top] = { override, embedded }
- override = -1
- obsolete[#obsolete+1] = current
- elseif direction == "rlo" then -- Right-to-Left Override -> left becomes right
- top = top + 1
- stack[top] = { override, embedded }
- override = 1
- obsolete[#obsolete+1] = current
- elseif direction == "lre" then -- Left-to-Right Embedding -> TLT
- top = top + 1
- stack[top] = { override, embedded }
- embedded = 1
- obsolete[#obsolete+1] = current
- elseif direction == "rle" then -- Right-to-Left Embedding -> TRT
- top = top + 1
- stack[top] = { override, embedded }
- embedded = -1
- obsolete[#obsolete+1] = current
- elseif direction == "pdf" then -- Pop Directional Format
- if top > 0 then
- local s = stack[top]
- override, embedded = s[1], s[2]
- top = top - 1
- end
- obsolete[#obsolete+1] = current
- elseif trace_directions then
- setcolor(current)
- end
- else
- -- we do nothing
- end
- elseif id == whatsit_code then
- local subtype = getsubtype(current)
- if subtype == localpar_code then
- local dir = getfield(current,"dir")
- if dir == 'TRT' then
- autodir = -1
- elseif dir == 'TLT' then
- autodir = 1
- end
- pardir = autodir
- textdir = pardir
- elseif subtype == dir_code then
- -- todo: also treat as lro|rlo and stack
- if finish then
- finish_auto_before()
- end
- local dir = getfield(current,"dir")
- if dir == "+TRT" then
- finish, autodir = "TRT", -1
- elseif dir == "-TRT" then
- finish, autodir = nil, 0
- elseif dir == "+TLT" then
- finish, autodir = "TLT", 1
- elseif dir == "-TLT" then
- finish, autodir = nil, 0
- end
- textdir = autodir
- else
- if finish then
- finish_auto_before()
- end
- end
- elseif finish then
- finish_auto_before()
- end
- local cn = getnext(current)
- if cn then
- -- we're okay
- elseif finish then
- finish_auto_after()
- end
- current = cn
- end
- end
-
- if done and strip then
- local n = #obsolete
- if n > 0 then
- for i=1,n do
- remove_node(head,obsolete[i],true)
- end
- report_directions("%s character nodes removed",n)
- end
- end
-
- return tonode(head), done
-
-end
-
-directions.installhandler(interfaces.variables.default,process)
-
diff --git a/Master/texmf-dist/tex/context/base/util-sql-tracers.lua b/Master/texmf-dist/tex/context/base/util-sql-tracers.lua
deleted file mode 100644
index 1bd133acba2..00000000000
--- a/Master/texmf-dist/tex/context/base/util-sql-tracers.lua
+++ /dev/null
@@ -1,48 +0,0 @@
-if not modules then modules = { } end modules ['util-sql-tracers'] = {
- version = 1.001,
- comment = "companion to m-sql.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local sql = utilities.sql
-local tracers = { }
-sql.tracers = tracers
-
-sql.setmethod("swiglib")
-
-function sql.tracers.gettables(presets)
- local results, keys = sql.execute {
- presets = presets,
- template = "SHOW TABLES FROM `%database%`",
- variables = {
- database = presets.database,
- },
- }
-
- local key = keys[1]
- local tables = { }
-
- for i=1,#results do
- local name = results[i][key]
- local results, keys = sql.execute {
- presets = presets,
- template = "SHOW FIELDS FROM `%database%`.`%table%` ",
- variables = {
- database = presets.database,
- table = name
- },
- }
- if #results > 0 then
- for i=1,#results do
- results[i] = table.loweredkeys(results[i])
- end
- tables[name] = results
- else
- -- a view
- end
- end
-
- return tables
-end
diff --git a/Master/texmf-dist/tex/context/base/x-dir-05.mkiv b/Master/texmf-dist/tex/context/base/x-dir-05.mkiv
deleted file mode 100644
index 379b3220a0b..00000000000
--- a/Master/texmf-dist/tex/context/base/x-dir-05.mkiv
+++ /dev/null
@@ -1,74 +0,0 @@
-%D \module
-%D [ file=x-dir-05,
-%D version=2003.05.10, % around that time -)
-%D title=\CONTEXT\ Directory Handling,
-%D subtitle=Access,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA 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.
-
-\setvariables
- [filestate]
- [name=,
- base=,
- type=,
- size=,
- permissions=,
- date=]
-
-% \savefilestate[zip-latest][context/latest/cont-#2.zip]%
-
-% TODO: move to module namespace
-
-\startluacode
- local filestates = { }
- function commands.savefilestate(tag,name)
- if not filestates[tag] then
- local attr = lfs.attributes(name)
- if attr then attr.name = name end
- filestates[tag] = attr
- end
- end
- function commands.getfilestatevariable(tag,name)
- local fs = filestates[tag]
- if fs then
- local value
- if name == "base" then
- value = file.basename(fs.name)
- elseif name == "type" then
- value = file.extname(fs.name)
- elseif name == "date" then
- value = os.date("%Y-%m-%d %H:%M",fs.modification)
- else
- value = fs[name] or ""
- end
- context.sprint(tex.vrbcatcodes,value)
- end
- end
-\stopluacode
-
-\def\getfilestatevariable#1#2%
- {\ctxcommand{getfilestatevariable("#1","#2")}}
-
-\def\savefilestate
- {\dodoubleargument\dosavefilestate}
-
-\def\dosavefilestate[#1][#2]%
- {\ctxcommand{savefilestate("#1","#2")}%
- \setxvariables
- [#1]
- [name={#2},
- base=\getfilestatevariable{#1}{base},
- type=\getfilestatevariable{#1}{type},
- size=\getfilestatevariable{#1}{size},
- date=\getfilestatevariable{#1}{date},
- permissions=\getfilestatevariable{#1}{permissions}]}
-
-\def\getfilestate#1% old one
- {\savefilestate[filestate][#1]}
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkiv b/Master/texmf-dist/tex/context/base/x-set-11.mkiv
deleted file mode 100644
index 73e68e0738c..00000000000
--- a/Master/texmf-dist/tex/context/base/x-set-11.mkiv
+++ /dev/null
@@ -1,855 +0,0 @@
-%D \module
-%D [ file=x-set-11,
-%D version=2004.10.31,
-%D remark=setupx.tex: 1998.07.20 and later,
-%D title=\CONTEXT\ Setup Definitions,
-%D subtitle=Macro Definitions,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-% we can make this module a bit cleaner using more recent features
-% like sorting the xml directly
-
-% \startluacode
-% collectgarbage("stop")
-% function collectgarbage() return 0 end
-% \stopluacode
-
-% todo: for fun: pure lua interface, but as this style evolved over 15 years
-% it's a waste of time
-%
-% todo:
-%
-% \setup{setupinterlinespace}
-% \setup{setupinterlinespace:1}
-% \setup{setupinterlinespace:2}
-%
-% cd:include -> filename
-% cd:choice
-%
-% register, interaction
-
-\startmessages dutch library: setup
- title: setup
- formula: formule
- number: getal
- list: lijst
- dimension: maat
- mark: markering
- reference: verwijzing
- command: commando
- file: file
- name: naam
- identifier: naam
- text: tekst
- section: sectie
- singular: naam enkelvoud
- plural: naam meervoud
- matrix: n*m
- see: zie
- inherits: erft van
- 1: de karakters < en > zijn globaal actief!
- 2: -- wordt verwerkt
- 3: -- is niet gedefinieerd
- 4: -- wordt nogmaals verwerkt
- optional: opt
- displaymath: formule
- index: ingang
- math: formule
- nothing: leeg
- file: file
- position: positie
- reference: verwijzing
- csname: naam
- destination: bestemming
- triplet: triplet
- word: woord
- content: tekst
-\stopmessages
-
-\startmessages english library: setup
- title: setup
- formula: formula
- number: number
- list: list
- dimension: dimension
- mark: mark
- reference: reference
- command: command
- file: file
- name: name
- identifier: identifier
- text: text
- section: section
- singular: singular name
- plural: plural name
- matrix: n*m
- see: see
- inherits: inherits from
- 1: the characters < and > are globally active!
- 2: -- is processed
- 3: -- is undefined
- 4: -- is processed again
- optional: opt
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages german library: setup
- title: Setup
- formula: Formel
- number: Nummer
- list: Liste
- dimension: Dimension
- mark: Beschriftung
- reference: Referenz
- command: Befehl
- file: Datei
- name: Name
- identifier: Name
- text: Text
- section: Abschnitt
- singular: singular
- plural: plural
- matrix: n*m
- see: siehe
- inherits: inherits from
- 1: Die Zeichen < und > gelten global!
- 2: -- wird verarbeitet
- 3: -- ist undefiniert
- 4: -- ist mehrmals verarbeitet
- optional: opt
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages czech library: setup
- title: setup
- formula: rovnice
- number: cislo
- list: seznam
- dimension: dimenze
- mark: znacka
- reference: reference
- command: prikaz
- file: soubor
- name: jmeno
- identifier: jmeno
- text: text
- section: sekce
- singular: jmeno v singularu
- plural: jmeno v pluralu
- matrix: n*m
- see: viz
- inherits: inherits from
- 1: znaky < a > jsou globalne aktivni!
- 2: -- je zpracovano
- 3: -- je nedefinovano
- 4: -- je zpracovano znovu
- optional: opt
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages italian library: setup
- title: setup
- formula: formula
- number: number
- list: list
- dimension: dimension
- mark: mark
- reference: reference
- command: command
- file: file
- name: name
- identifier: name
- text: text
- section: section
- singular: singular name
- plural: plural name
- matrix: n*m
- see: see
- inherits: inherits from
- 1: the characters < and > are globally active!
- 2: -- is processed
- 3: -- is undefined
- 4: -- is processed again
- optional: opt
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages romanian library: setup
- title: setari
- formula: formula
- number: numar
- list: lista
- dimension: dimensiune
- mark: marcaj
- reference: referinta
- command: comanda
- file: fisier
- name: nume
- identifier: nume
- text: text
- section: sectiune
- singular: nume singular
- plural: nume pluram
- matrix: n*m
- see: vezi
- inherits: inherits from
- 1: caracterele < si > sunt active global!
- 2: este procesat --
- 3: -- este nedefinit
- 4: -- este procesat din nou
- optional: opt
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages french library: setup
- title: réglage
- formula: formule
- number: numéro
- list: liste
- dimension: dimension
- mark: marquage
- reference: reference
- command: commande
- file: fichier
- name: nom
- identifier: identificateur
- text: texte
- section: section
- singular: nom singulier
- plural: nom pluriel
- matrix: n*m
- see: vois
- inherits: herite de
- 1: les caractères < et > sont globalement actifs !
- 2: -- est traité
- 3: -- n'est pas défini
- 4: -- est traité de nouveau
- optional: opt
- displaymath: formule
- index: entrée
- math: formule
- nothing: vide
- file: fichier
- position: position
- reference: réference
- csname: nom
- destination: destination
- triplet: triplet
- word: mot
- content: texte
-\stopmessages
-
-\unprotect
-
-% general
-
-\unexpanded\def\setupnumfont {}
-\unexpanded\def\setuptxtfont {}
-\unexpanded\def\setupintfont {\WORD}
-\unexpanded\def\setupvarfont {\sl}
-\unexpanded\def\setupoptfont {\sl}
-\unexpanded\def\setupalwcolor{}
-\unexpanded\def\setupoptcolor{darkgray}
-
-\def\c!setup!definereserved#1#2%
- {\setvalue{c!setup!:r:#1}{#2}}
-
-\def\c!setup!reserved!#1%
- {\executeifdefined{c!setup!:r:#1}{#1}}
-
-\def\c!setup!internal!#1%
- {\dontleavehmode
- \begingroup
- \setupintfont{#1}%
- \endgroup}
-
-\def\c!setup!text!#1%
- {\dontleavehmode
- \begingroup
- \setupvarfont{#1}%
- \endgroup}
-
-\def\c!setup!command!#1%
- {{\setupvarfont{\texescape...#1}}}
-
-\def\??stp{@@stp}
-
-\defineregister
- [texmacro]
-% [texmacros]
-
-\definesorting
- [texcommand]
-% [texcommands]
-
-\setupsorting
- [texcommand]
- [\c!command=\showsetupinlist,
- \c!criterium=\@@stpcriterium]
-
-\pushmacro\setuptext
-
-\defineframedtext
- [setuptext]
- [\c!width=\hsize,
- \c!height=\v!fit,
- \c!align=\v!right,
- \c!offset=0.75em]
-
-\popmacro\setuptext
-
-%D Loading:
-
-\let\currentSETUPfullname\s!unknown
-
-\startxmlsetups xml:setups:assemblename
- \doifelse {\xmlatt{#1}{type}} {environment} {
- \let\currentSETUPprefix\e!start
- } {
- \let\currentSETUPprefix\empty
- }
- % \edef\currentSETUPname{\xmlatt{#1}{name}}
- \edef\currentSETUPname{\xmlattribute{#1}{/sequence/string[1]}{value}}%
- \doifelse {\xmlatt{#1}{generated}} {yes} {
- \def\currentSETUPgenerated{*}
- } {
- \let\currentSETUPgenerated\empty
- }
- \doifelsenothing {\xmlatt{#1}{variant}} {
- \let\currentSETUPvariant\empty
- } {
- \def\currentSETUPvariant{:\xmlatt{#1}{variant}}
- }
- \edef\currentSETUPfullname {
- \currentSETUPprefix
- \currentSETUPname
- \currentSETUPvariant
- \currentSETUPgenerated
- }
-\stopxmlsetups
-
-\startxmlsetups xml:setups:register
- \xmlsetup{#1}{xml:setups:assemblename}
- % not really needed if we just use setups
- \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}}
-\stopxmlsetups
-
-\startxmlsetups xml:setups:basics
- \xmlinclude{#1}{include}{filename}%
- \xmlsetsetup {#1} {
- sequence|string|variable|assignments|keywords|content|displaymath|index|math|
- nothing|file|position|reference|csname|destination|triplet|word|
- resolve|parameter|constant|inherit|parameter|define
- } {xml:setups:*}
-\stopxmlsetups
-
-\xmlregisterdocumentsetup{setups}{xml:setups:basics}
-
-\unexpanded\def\loadsetups{\complexorsimple\loadsetups}
-
-\let\loadedsetups\empty % we load more setups, setups:<name>
-
-\def\simpleloadsetups
- {\doifnotmode{no-setup-main}{\complexloadsetups[cont-en.xml]}}
-
-\def\complexloadsetups[#1]%
- {\doifsomething{#1}
- {\doonlyonce{setups:#1}
- {\doglobal\prependtocommalist{setups:#1}\loadedsetups % last overloads first
- \xmlloadonly{setups:#1}{#1}{setups}%
- \xmlfilter{setups:#1}{/interface/command/command(xml:setups:register)}}}} % qualified path saves > 50% runtime
-
-\newif\ifshortsetup
-
-\unexpanded\def\setup {\shortsetupfalse\doshowsetup}
-\unexpanded\def\showsetup {\shortsetupfalse\doshowsetup}
-\unexpanded\def\shortsetup{\shortsetuptrue \doshowsetup}
-\unexpanded\def\setupsetup{\dodoubleargument\getparameters[\??stp]}
-
-%unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\showsetupindeed{#3}\par}
-\unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\xmlsetup{#3}{xml:setups:typeset}\par}
-
-% todo: only references in lists
-
-\def\doshowsetup
- {\dosingleempty\dodoshowsetup}
-
-\def\dodoshowsetup[#1]%
- {\iffirstargument
- \dododoshowsetup{#1}%
- \else
- \expandafter\dododoshowsetup
- \fi}
-
-\def\dododoshowsetup#1% this will trigger 'used'
- {\registersort[texcommand][stp:x:#1]%
- \showsetupindeed{#1}}
-
-% \def\showsetupindeed#1%
-% {\xmlfilterlist{\loadedsetups}{interface/command[@name='#1']/command(xml:setups:typeset)}}
-
-% \def\showsetupindeed#1%
-% {\xmlfilterlist{\loadedsetups}{/interface/command['#1' == (@type=='environment' and 'start' or '') .. @name]/command(xml:setups:typeset)}}
-
-% \setelementnature[setup][display]
-% \setelementnature[setup][mixed]
-
-\def\showsetupindeed#1%
- {\startelement[setup][name=#1]%
- \startelement[noexport][comment={setup definition #1}]
- \xmlfilterlist{\loadedsetups}{/interface/command['#1' == (@type=='environment' and '\e!start' or '') .. @name]/command(xml:setups:typeset)}%
- \stopelement
- \stopelement}
-
-\unexpanded\def\placesetup {\placelistofsorts[texcommand][\c!criterium=\v!used]}
-\unexpanded\def\placeallsetups{\placelistofsorts[texcommand][\c!criterium=\v!all ]}
-
-\let\placeeverysetup\placeallsetups
-
-%D Typesetting:
-
-\setupxml
- [%\c!method=mkiv, % mixed mode
- \c!default=\v!hidden, % ignore elements that are not defined
- \c!compress=\v!yes, % strip comment
- \c!entities=\v!yes] % replace entities
-
-\newcounter\currentSETUPargument
-\newcounter\maximumSETUPargument
-
-\def\currentSETUPwidth{0pt}
-
-\startxmlsetups xml:setups:typeset
- \getvalue{\e!start setuptext}
- \tttf
- \nohyphens
- \veryraggedright
- \doglobal\newcounter\currentSETUPargument
- \xdef\maximumSETUPargument{\xmlcount{#1}{/arguments/*}}
- \edef\currentSETUPhash{\xmlatt{#1}{hash}}
- \bgroup
- \enablemode[setups-pass-one]%
- \doif {\xmlatt{#1}{generated}} {yes} {
- \ttsl
- }
- \letterbackslash
- \doif {\xmlatt{#1}{type}} {environment} {
- \e!start
- }
- \xmlfilter{#1}{/sequence/first()}
- \ignorespaces
- \egroup
- \ifshortsetup
- % nothing
- \else
- \xmldoif{#1}{/arguments} {
- \bgroup
- \enablemode[setups-pass-one]
- \doglobal\newcounter\currentSETUPargument
- \ignorespaces
- \xmlfilter{#1}{/arguments/text()}
- \egroup
- }
- \doif {\xmlatt{#1}{type}} {environment} {
- \bgroup
- \enablemode[setups-pass-one]%
- \hskip.5em\unknown\hskip.5em
- \doif {\xmlatt{#1}{generated}} {yes} {
- \ttsl
- }
- \tex{\e!stop}
- \xmlfilter{#1}{/sequence/first()}
- \ignorespaces
- \egroup
- }
- \endgraf
- \xmldoif{#1}{/arguments} {
- \bgroup
- \enablemode[setups-pass-two]
- \doglobal\newcounter\currentSETUPargument
- %\blank[\v!line] % packed mode (we could do \startunpacked ...)
- \godown[.75\lineheight]
- \switchtobodyfont[\v!small]
- \ignorespaces\xmlfilter{#1}{/arguments/text()}\endgraf
- \egroup
- }
- \fi
- \getvalue{\e!stop setuptext}
-\stopxmlsetups
-
-\setupsetup
- [\c!before=,
- \c!after=,
- \c!command=\setup,
- \c!criterium=\v!used]
-
-\startxmlsetups xml:setups:resolve
- \ignorespaces
- \xmlfilterlist{\loadedsetups}{/interface/define[@name='\xmlatt{#1}{name}']/first()}
-\stopxmlsetups
-
-%D This is the first pass; here we generate the top line.
-
-\startxmlsetups xml:setups:define
- \ignorespaces\xmlflush{#1}
-\stopxmlsetups
-
-\startxmlsetups xml:setups:sequence
- \ignorespaces\xmlflush{#1}
-\stopxmlsetups
-
-\startxmlsetups xml:setups:string
- \xmlatt{#1}{value}\ignorespaces
-\stopxmlsetups
-
-\startxmlsetups xml:setups:content \showSETUPcomponent{#1}{content} {content} \stopxmlsetups
-\startxmlsetups xml:setups:displaymath \showSETUPcomponent{#1}{displaymath}{display math}\stopxmlsetups
-\startxmlsetups xml:setups:index \showSETUPcomponent{#1}{index} {index} \stopxmlsetups
-\startxmlsetups xml:setups:math \showSETUPcomponent{#1}{math} {math} \stopxmlsetups
-\startxmlsetups xml:setups:nothing \showSETUPcomponent{#1}{nothing} {nothing} \stopxmlsetups
-\startxmlsetups xml:setups:file \showSETUPcomponent{#1}{file} {file name} \stopxmlsetups
-\startxmlsetups xml:setups:position \showSETUPcomponent{#1}{position} {position} \stopxmlsetups
-\startxmlsetups xml:setups:reference \showSETUPcomponent{#1}{reference} {reference} \stopxmlsetups
-\startxmlsetups xml:setups:csname \showSETUPcomponent{#1}{csname} {csname} \stopxmlsetups
-\startxmlsetups xml:setups:destination \showSETUPcomponent{#1}{destination}{destination} \stopxmlsetups
-\startxmlsetups xml:setups:triplet \showSETUPcomponent{#1}{triplet} {triplet} \stopxmlsetups
-\startxmlsetups xml:setups:word \showSETUPcomponent{#1}{word} {word} \stopxmlsetups
-
-\def\showSETUPcomponent#1#2#3%
- {\doifelsemode{setups-pass-one}
- {\getvalue{showSETUP#2}{#1}}
- {\simpleSETUPargument{#3}}}
-
-%D This is the second pass; here we generate the table.
-
-\unexpanded\def\startfirstSETUPcolumn#1%
- {\bgroup
- \advance\leftskip 2em
- \noindent\llap{\hbox to 2em{#1\hss}}}
-
-\unexpanded\def\stopfirstSETUPcolumn
- {\endgraf
- \egroup}
-
-\unexpanded\def\startsecondSETUPcolumn#1#2%
- {\bgroup
- \advance\hangindent\dimexpr\currentSETUPwidth+2.5em\relax
- \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}}
-
-\unexpanded\def\stopsecondSETUPcolumn
- {\endgraf
- \egroup}
-
-\def\secondSETUPcolumn#1#2%
- {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
-
-\def\previousSETUPargument{\currentSETUPargument}
-
-\startxmlsetups xml:setups:parameter:measure
- \setbox0=\hbox{\c!setup!reserved!{\xmlatt{#1}{name}}}
- \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi
-\stopxmlsetups
-
-\startxmlsetups xml:setups:assignments
- \doifelsemode{setups-pass-one} {
- \showSETUPassignment{#1}
- } {
- \xdef\currentSETUPwidth{0pt}%
- \bgroup
- \xmlfilter{#1}{/parameter/command(xml:setups:parameter:measure)}
- \egroup
- \startfirstSETUPcolumn{\showSETUPnumber}%
- \ignorespaces
- \xmldoifelse{#1}{/(parameter|inherit)}{
- \xmlflush{#1}
- } {
- ...
- }
- \let\previousSETUPargument\currentSETUPargument
- \stopfirstSETUPcolumn
- \blank[\v!halfline]
- \ignorespaces
- }
-\stopxmlsetups
-
-\startxmlsetups xml:setups:keywords
- \doifelsemode{setups-pass-one} {
- \showSETUPkeyword{#1}
- } {
- \startfirstSETUPcolumn{\showSETUPnumber}%
- \ignorespaces
- \xmlflush{#1}
- \let\previousSETUPargument\currentSETUPargument
- \stopfirstSETUPcolumn
- \blank[\v!halfline]
- \ignorespaces
- }
-\stopxmlsetups
-
-\startxmlsetups xml:setups:parameter
- \startsecondSETUPcolumn{\c!setup!reserved!{\xmlatt{#1}{name}}}{=}
- \ignorespaces
- \xmlflush{#1}
- \doifmode{interface:setup:defaults} {
- \ifx\currentSETUPhash\empty \else
- \begingroup
- % todo, make a one level expansion of parameter
- \let\emwidth \relax
- \let\exheight\relax
- \edef\currentSETUPvalue{\csname named\currentSETUPhash parameter\endcsname\empty{\xmlatt{#1}{name}}}
- \ifx\currentSETUPvalue\empty \else
- =\space
- \detokenize\expandafter{\currentSETUPvalue}
- \fi
- \endgroup
- \fi
- }
- \stopsecondSETUPcolumn
- \ignorespaces
-\stopxmlsetups
-
-\startxmlsetups xml:setups:constant
- \doifelsemode {setups-pass-one} {
- } {
- \doif {\xmlatt{#1}{default}} {yes} {
- \underbar % next needs to be {braced}
- }
- {\c!setup!reserved!{\xmlatt{#1}{type}}}
- \space
- \ignorespaces
- }
-\stopxmlsetups
-
-\startxmlsetups xml:setups:variable
- \doifelsemode {setups-pass-one} {
- \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces
- } {
- \c!setup!reserved!{\xmlatt{#1}{value}}
- \space
- \ignorespaces
- }
-\stopxmlsetups
-
-\startxmlsetups xml:setups:inherit
- \secondSETUPcolumn {
- \c!setup!text!{\getmessage{setup}{inherits}}
- \enspace
- \letterbackslash
- \xmlatt{#1}{name}
- } {}
- \ignorespaces
-\stopxmlsetups
-
-\def\simpleSETUPargument#1%
- {\startfirstSETUPcolumn{\showSETUPnumber}%
- \c!setup!internal!{#1}%
- \stopfirstSETUPcolumn
- \blank[\v!halfline]
- \ignorespaces}
-
-\c!setup!definereserved {cd:command} {\c!setup!internal!{\getmessage{setup}{command}}}
-\c!setup!definereserved {cd:dimension} {\c!setup!internal!{\getmessage{setup}{dimension}}}
-\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}}
-\c!setup!definereserved {cd:name} {\c!setup!internal!{\getmessage{setup}{identifier}}}
-\c!setup!definereserved {cd:character} {\c!setup!internal!{\getmessage{setup}{character}}}
-\c!setup!definereserved {cd:mark} {\c!setup!internal!{\getmessage{setup}{mark}}}
-\c!setup!definereserved {cd:number} {\c!setup!internal!{\getmessage{setup}{number}}}
-\c!setup!definereserved {cd:reference} {\c!setup!internal!{\getmessage{setup}{reference}}}
-\c!setup!definereserved {cd:plural} {\c!setup!internal!{\getmessage{setup}{plural}}}
-\c!setup!definereserved {cd:singular} {\c!setup!internal!{\getmessage{setup}{singular}}}
-\c!setup!definereserved {cd:text} {\c!setup!internal!{\getmessage{setup}{text}}}
-\c!setup!definereserved {cd:formula} {\c!setup!internal!{\getmessage{setup}{formula}}}
-\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}}
-\c!setup!definereserved {cd:matrix} {\c!setup!internal!{\getmessage{setup}{matrix}}}
-\c!setup!definereserved {cd:list} {\c!setup!internal!{\getmessage{setup}{list}}}
-\c!setup!definereserved {cd:section} {\c!setup!internal!{\getmessage{setup}{section}}}
-
-\c!setup!definereserved {cd:noargument} {\c!setup!command! {}}
-\c!setup!definereserved {cd:oneargument} {\c!setup!command! {\#1}}
-\c!setup!definereserved {cd:twoarguments} {\c!setup!command! {\#1\#2}}
-\c!setup!definereserved {cd:threearguments} {\c!setup!command! {\#1\#2\#3}}
-
-%D Auxiliary.
-
-\unexpanded\def\showSETUP#1#2#3%
- {\bgroup
- \doglobal\increment\currentSETUPargument
- \setbox0=\hbox
- {\doifelse{\xmlatt{#1}{list}}{yes}{#3}{#2}}%
- \setbox2=\hbox to \wd0
- {\hss
- \raise1ex\hbox
- {\tx\ifcase\maximumSETUPargument\relax
- \or*\else\currentSETUPargument
- \fi}%
- \hss}%
- \setbox4=\hbox to \wd0
- {\hss
- \lower2ex\hbox
- \bgroup
- \txx\doif{\xmlatt{#1}{optional}}{yes}{\c!setup!internal!{\getmessage{setup}{optional}}}%
- \egroup
- \hss}%
- \ht2\ht\strutbox
- \dp4\dp\strutbox
- \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2%
- \egroup
- \ignorespaces}
-
-\def\showSETUPnumber
- {\doglobal\increment\currentSETUPargument
- \hbox to 2em
- {\ifcase\maximumSETUPargument\relax
- \or*\else\currentSETUPargument
- \fi
- \hss}}
-
-\def\showSETUPassignment #1{\showSETUP{#1}{[.\lower.5ex\hbox{=}.]} {[..,.\lower.5ex\hbox{=}.,..]}}
-\def\showSETUPkeyword #1{\showSETUP{#1}{[...]} {[...,...]}}
-\def\showSETUPargument #1{\showSETUP{#1}{\leftargument..\rightargument} {\leftargument..,...,..\rightargument}}
-\def\showSETUPdisplaymath#1{\showSETUP{#1}{\$\$...\$\$} {\$\$...\$\$}}
-\def\showSETUPindex #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument..+...+..\rightargument}}
-\def\showSETUPmath #1{\showSETUP{#1}{\$...\$} {\$...\$}}
-\def\showSETUPnothing #1{\showSETUP{#1}{...} {}}
-\def\showSETUPfile #1{\showSETUP{#1}{~...~} {}}
-\def\showSETUPposition #1{\showSETUP{#1}{(...)} {(...,...)}}
-\def\showSETUPreference #1{\showSETUP{#1}{[...]} {[...,...]}}
-\def\showSETUPcsname #1{\showSETUP{#1}{{\c!setup!command!{}}} {}}
-\def\showSETUPdestination#1{\showSETUP{#1}{[\leftargument..[ref]\rightargument]}{[..,\leftargument..[ref,..]\rightargument,..]}}
-\def\showSETUPtriplet #1{\showSETUP{#1}{[x:y:z=]} {[x:y:z=,..]}}
-\def\showSETUPword #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}}
-\def\showSETUPcontent #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}}
-
-% A prelude to a rewrite and some more:
-
-\definetype[parametercommand][type]
-\definetype[parameterkey] [type]
-\definetype[parametervalue] [type][space=on]
-
-\setuptype[parametercommand] [color=darkmagenta]
-\setuptype[parametervalue] [color=darkyellow]
-
-\startxmlsetups xml:setups:parameters:value
- \edef\currentsetupparameterkey {\xmlatt{#1}{name}}
- \edef\currentsetupparametervalue{\csname named\currentsetupparametercategory parameter\endcsname\currentsetupparameterinstance\currentsetupparameterkey}
- \ifx\currentsetupparameterinstance\empty
- \expanded {
- \NC \parameterkey {\currentsetupparameterkey}
- \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
- \NC \NR
- }
- \else\ifx\currentsetupparametervalue\empty
- \else
- \edef\currentsetupparameterdefault{\csname named\currentsetupparametercategory parameter\endcsname\empty\currentsetupparameterkey}
- \ifx\currentsetupparametervalue\currentsetupparameterdefault
- % skip
- \else
- \expanded {
- \NC \parameterkey {\currentsetupparameterkey}
- \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
- \NC \NR
- }
- \fi
- \fi\fi
-\stopxmlsetups
-
-\startxmlsetups xml:setups:parameters:values
- \blank[big]
- \expanded {
- \parametercommand {
- \currentsetupparametercommand
- \space:\space
- \ifx\currentsetupparameterinstance\empty
- defaults
- \else
- \currentsetupparameterinstance
- \fi
- }
- }
- \blank[big,samepage]
- \starttabulate[|l|p|]
- \xmlall
- {#1}
- {/interface/command[@name=='\currentsetupparametercommand']/arguments/assignments/parameter/command(xml:setups:parameters:value)}
- \ifnum\noftabulaterows = \zerocount
- \NC \parameterkey{no specific settings} \NC \NC \NR
- \fi
- \stoptabulate
-\stopxmlsetups
-
-\starttexdefinition showrootvalues [#1]
- \edef\currentsetupparametercategory{#1}
- \edef\currentsetupparametercommand{setup#1}
- \let\currentsetupparameterinstance\empty
- \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
-\stoptexdefinition
-
-\starttexdefinition showinstancevalues [#1]#2[#3]
- \edef\currentsetupparametercategory{#1}
- \edef\currentsetupparametercommand{setup#1}
- \edef\currentsetupparameterinstance{#3}
- \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
-\stoptexdefinition
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/x-xtag.mkiv b/Master/texmf-dist/tex/context/base/x-xtag.mkiv
deleted file mode 100644
index ab95c567eec..00000000000
--- a/Master/texmf-dist/tex/context/base/x-xtag.mkiv
+++ /dev/null
@@ -1,90 +0,0 @@
-%D \module
-%D [ file=x-xtag,
-%D version=2009.09.23,
-%D title=\CONTEXT\ Modules,
-%D subtitle=\XML\ stream handler,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA 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 load the \MKII\ (mostly) streaming \XML\ parser. We
-%D define a couple of catcode regimes first.
-
-\endinput
-
-\writestatus{xtag}{this module is obsolete, use the mkiv-xml features or use mkii instead}
-
-%D Well, at this time (2011.12.28) I'm not sure if this code still works in
-%D \MKIV. But in any case we move snippets here that are only needed for old
-%D \MKII\ code.
-
-\unprotect
-
-\newif\ifforcefileexpansion % handy for document level overload
-
-\def\installexpander#1#2#3% changed, no longer \convert..\to...
- {\setvalue{\s!do\c!expansion#1l}{#2}%
- \setvalue{\s!do\c!expansion#1g}{#3}}%
-
-\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data}
- {\csname % that we assign all exp a value
- \s!do\c!expansion
- \ifforcefileexpansion
- \v!yes
- \else\ifcsname\s!do\c!expansion#3#1\endcsname
- #3%
- \else
- \s!default
- \fi\fi
- #1%
- \endcsname#2}% #3
-
-\def\defconvertexpanded {\doconvertexpanded l}
-\def\gdefconvertexpanded{\doconvertexpanded g}
-
-\installexpander\v!command \defconvertedcommand \gdefconvertedcommand
-\installexpander\s!default \defconvertedargument \gdefconvertedargument
-\installexpander\empty \defconvertedargument \gdefconvertedargument
-\installexpander\v!no \defconvertedargument \gdefconvertedargument
-\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
-\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
-\installexpander\v!strict \defreducedargument \gdefreducedargument
-\installexpander {utf} \defreducedtoutf \gdefreducedtoutf
-
-\def\dodefconvertedmeaning#1#2#3% watch the double expansion !
- {\bgroup
- \xdef\@@globalexpanded{#3}%
- \xdef\@@globalexpanded{\@@globalexpanded}%
- \egroup
- #1#2\@@globalexpanded}
-
-\def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand}
-\def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand}
-
-\def\dodefreducedargument#1#2#3%
- {\begingroup
- \reducetocoding[raw]%
- \edef\ascii{#3}%
- \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
-
-\def\defreducedargument {\dodefreducedargument\edef}
-\def\gdefreducedargument{\dodefreducedargument\xdef}
-
-\protect
-
-%D The \XML\ modules.
-
-\loadmarkfile{catc-xml}
-
-\loadcorefile{xtag-ini.mkii}
-\loadcorefile{xtag-ext.mkii}
-\loadcorefile{xtag-exp.mkii}
-\loadcorefile{xtag-pre.mkii} % has old encoding code
-\loadcorefile{xtag-xsd.mkii} % will go away (stub anyway)
-\loadcorefile{xtag-rng.mkii} % will go away (stub anyway)
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/bib/sample.bib b/Master/texmf-dist/tex/context/bib/common/sample.bib
index 4bb71d3a72a..4bb71d3a72a 100644
--- a/Master/texmf-dist/tex/context/bib/sample.bib
+++ b/Master/texmf-dist/tex/context/bib/common/sample.bib
diff --git a/Master/texmf-dist/tex/context/bib/bibl-ams.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-ams.tex
index 37bcf253fa1..37bcf253fa1 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-ams.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-ams.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-de.tex
index afeebd260b3..afeebd260b3 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-de.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-apa-fr.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-fr.tex
index 654a3644190..654a3644190 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-apa-fr.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-fr.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-apa-it.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-it.tex
index ebf03313a34..ebf03313a34 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-apa-it.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-it.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-apa.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa.tex
index b0403e54227..b0403e54227 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-apa.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-apa.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-aps.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-aps.tex
index 39d3bd7d44d..39d3bd7d44d 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-aps.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-aps.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-num-fr.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-num-fr.tex
index c4271fb7f65..c4271fb7f65 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-num-fr.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-num-fr.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-num.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-num.tex
index 3c72d975acd..3c72d975acd 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-num.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-num.tex
diff --git a/Master/texmf-dist/tex/context/bib/bibl-ssa.tex b/Master/texmf-dist/tex/context/bib/mkii/bibl-ssa.tex
index b93bd1b68ae..b93bd1b68ae 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-ssa.tex
+++ b/Master/texmf-dist/tex/context/bib/mkii/bibl-ssa.tex
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2.icc
new file mode 100644
index 00000000000..8fd642f8568
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2_iccv4.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2_iccv4.icc
new file mode 100644
index 00000000000..efceaef631b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/ecirgb_v2_iccv4.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_300_eci.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_300_eci.icc
new file mode 100644
index 00000000000..0c46e9eb8bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_300_eci.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_eci.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_eci.icc
new file mode 100644
index 00000000000..dceb393f600
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/isocoated_v2_eci.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/srgb.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/srgb.icc
new file mode 100644
index 00000000000..7f9d18d097d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/srgb.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/colors/icc/profiles/srgb_v4_icc_preference.icc b/Master/texmf-dist/tex/context/colors/icc/profiles/srgb_v4_icc_preference.icc
new file mode 100644
index 00000000000..cfbd03e1f78
--- /dev/null
+++ b/Master/texmf-dist/tex/context/colors/icc/profiles/srgb_v4_icc_preference.icc
Binary files differ
diff --git a/Master/texmf-dist/tex/context/extra/mag-0000.tex b/Master/texmf-dist/tex/context/extra/mag-0000.tex
deleted file mode 100644
index baad957b8a1..00000000000
--- a/Master/texmf-dist/tex/context/extra/mag-0000.tex
+++ /dev/null
@@ -1,44 +0,0 @@
-% content=tex
-%
-% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa
-
-\usemodule[mag-01]
-
-\setvariables
- [magazine]
- [title={Introduction},
- author=Hans Hagen,
- affiliation=PRAGMA ADE,
- date=Januari 2003,
- number=0]
-
-\startbuffer[abstract]
- This is the zero issue of a semi periodical. The
- associated style can be used by \CONTEXT\ users to
- typeset and publish their own issues.
-\stopbuffer
-
-\starttext \setups [titlepage] \setups [title]
-
-\setupheadertexts[welcome]
-
-This is the zero issue of a range of \CONTEXT\ related
-publications, in most cases short introductions to new
-functionality. The style may be used by users for providing
-similar documents, but preferably not for other purposes,
-since it may confuse readers in their expectations.
-
-We've chosen a layout which is more functional than
-beautiful. This layout provides several text areas: headers
-and footers, margins and edges as well as a main text area.
-The surrounding (gray) makes the main page (which is
-slightly smaller than A4) stand out and is suitable for
-viewing in spread mode.
-
-The documents produced at \PRAGMA\ are called {\bf This
-Way}, user documents gets the title {\bf My Way}. The
-\PRAGMA\ issues are numbered. We strongly advise you not to
-use the \type {mag-} prefix for your issues, since this may
-lead to clashes with files distributed by \PRAGMA.
-
-\setups [listing] \setups [lastpage] \stoptext
diff --git a/Master/texmf-dist/tex/context/extra/setup-qr.tex b/Master/texmf-dist/tex/context/extra/setup-qr.tex
deleted file mode 100644
index 466f5e68a30..00000000000
--- a/Master/texmf-dist/tex/context/extra/setup-qr.tex
+++ /dev/null
@@ -1,77 +0,0 @@
-% output=pdftex interface=en
-
-%D \module
-%D [ file=setup-qr,
-%D version=1997.07.22,
-%D title=\CONTEXT\ Style File,
-%D subtitle=Quick Reference Document / Efficient,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-%D This is a stripped down version of the good old quick
-%D reference document. This version is more compact and
-%D therefore better suited for local processing and printing.
-%D The slightly more fancy version can be fetched from the
-%D \CONTEXT\ web site.
-
-\dontcomplain \silentmode
-
-\unprotect
-
-\setupbodyfont
- [9pt]
-
-\setuplayout
- [\c!rugwit=1cm,
- \c!kopwit=1cm,
- \c!hoofd=0cm,
- \c!voet=0cm,
- \c!breedte=\v!midden,
- \c!hoogte=\v!midden]
-
-\readfile{setupa} {} {}
-
-\stelsetupin
- [\c!criterium=\v!alles,
- \c!verwijzing=0]
-
-\setupframedtexts
- [setuptext]
- [\c!kader=\v!aan]
-
-\readfile{setupb} {} {}
-
-\starttekst
-
-\startmakeup[\v!standaard]
- \setupalign[\v!midden]
- \definedfont[RegularBold at 60pt]\setstrut
- \strut Con\TeX t \par
- \vskip24pt
- \definedfont[RegularBold at 45pt]\setstrut
- \startinterface dutch \strut commando's \par \stopinterface
- \startinterface english \strut commands \par \stopinterface
- \startinterface german \strut befehle \par \stopinterface
- \startinterface czech \strut prikaz\'y \par \stopinterface
- \startinterface italian \strut comandi \par \stopinterface
- \startinterface romanian \strut comenzile \par \stopinterface
- \vfill
- \strut \currentdate \par
- \startinterface dutch \strut nederlands \par \stopinterface
- \startinterface english \strut english \par \stopinterface
- \startinterface german \strut deutsch \par \stopinterface
- \startinterface czech \strut \^cesk\'y \par \stopinterface
- \startinterface italian \strut italiano \par \stopinterface
- \startinterface romanian \strut rom\^{a}n\u{a} \par \stopinterface
-\stopmakeup
-
-\protect
-
-\placesetup
-
-\stoptekst \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/type-buy.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-buy.mkii
index b8518acb0ea..b8518acb0ea 100644
--- a/Master/texmf-dist/tex/context/base/type-buy.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-buy.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-cbg.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-cbg.mkii
index a45a71d4ed4..a45a71d4ed4 100644
--- a/Master/texmf-dist/tex/context/base/type-cbg.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-cbg.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-cow.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-cow.mkii
index f46ac968bb6..f46ac968bb6 100644
--- a/Master/texmf-dist/tex/context/base/type-cow.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-cow.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-exp.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-exp.mkii
index c7c6e4b45d3..c7c6e4b45d3 100644
--- a/Master/texmf-dist/tex/context/base/type-exp.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-exp.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-fsf.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-fsf.mkii
index 6782d3dcf76..6782d3dcf76 100644
--- a/Master/texmf-dist/tex/context/base/type-fsf.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-fsf.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-ghz.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-ghz.mkii
index 3778cd96485..3778cd96485 100644
--- a/Master/texmf-dist/tex/context/base/type-ghz.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-ghz.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-hgz.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-hgz.mkii
index 4d3e495b065..4d3e495b065 100644
--- a/Master/texmf-dist/tex/context/base/type-hgz.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-hgz.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-mac.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-mac.mkii
index e8abf09b99e..e8abf09b99e 100644
--- a/Master/texmf-dist/tex/context/base/type-mac.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-mac.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-msw.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-msw.mkii
index 26ec190cbee..26ec190cbee 100644
--- a/Master/texmf-dist/tex/context/base/type-msw.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-msw.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-pre.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-pre.mkii
index 99db52c2fad..99db52c2fad 100644
--- a/Master/texmf-dist/tex/context/base/type-pre.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-pre.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-win.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-win.mkii
index ae690982093..ae690982093 100644
--- a/Master/texmf-dist/tex/context/base/type-win.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-win.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-xtx.mkii b/Master/texmf-dist/tex/context/fonts/mkii/type-xtx.mkii
index d8b5f9c2a85..3c5b06d9e45 100644
--- a/Master/texmf-dist/tex/context/base/type-xtx.mkii
+++ b/Master/texmf-dist/tex/context/fonts/mkii/type-xtx.mkii
@@ -3,14 +3,17 @@
%D version=2004.11.15, % prereleased earlier
%D title=\CONTEXT\ Typescript Macros,
%D subtitle=\XETEX's font treasures,
-%D author=Adam T. Lindsay,
+%D author=Adam T. Lindsay etc,
%D date=\currentdate,
-%D copyright={Adam Lindsay \& Hans Hagen}]
+%D copyright={Adam Lindsay \& Hans Hagen \& ...}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D Note HH: this file probably needs to be adapted to the current names and
+%D so but as I don't use \XETEX\ myself others have to provide information.
+
%D Here are some fonts definitions that can get you started with
%D \XETEX\ (for more details see Adam's MyWay documents).
%D
@@ -363,7 +366,7 @@
\starttypescript[serif,handwriting][zapfino][uc]
-\definefontsynonym[ZapfinoOne] [name:Zapfino\xetexcolon mapping=tex-text] [encoding=uc]
+\definefontsynonym[ZapfinoOne] [name:Zapfino\xetexcolon mapping=tex-text] [encoding=uc]
\definefontsynonym[ZapfinoTwo] [name:Zapfino\xetexcolon mapping=tex-text;%
Stylistic Variants=First variant glyph set] [encoding=uc]
\definefontsynonym[ZapfinoThree][name:Zapfino\xetexcolon mapping=tex-text;%
@@ -430,8 +433,7 @@
\stoptypescript
-% MS Office 2004 for Mac has impressive Unicode coverage in
-% many of its fonts.
+% MS Office 2004 for Mac has impressive Unicode coverage in many of its fonts.
\starttypescript[serif][timesnewroman][uc]
@@ -475,9 +477,8 @@
\stoptypescript
-%D MS Office comes with an installation of the Lucida family in
-%D TrueType form. It's nice, except\dots\ no math, no slanted, no caps
-%D and some other auxiliary fonts.
+%D MS Office comes with an installation of the Lucida family in TrueType form. It's nice,
+%D except\dots\ no math, no slanted, no caps and some other auxiliary fonts.
\starttypescript [serif] [lucida] [uc]
@@ -535,27 +536,33 @@
\stoptypescript
-%D Gentium is from SIL, the fine makers of \XETEX, and it's not only
-%D very complete with Roman and Italic Unicode support, but very
-%D attractive.
-
-\starttypescript[serif][gentium][uc]
-
-\definefontsynonym[Gentium] [name:Gentium] [features=default]
-\definefontsynonym[GentiumItalic][name:Gentium Italic][features=default]
+%D Gentium is from SIL, the fine makers of \XETEX, and it's not only very complete with
+%D Roman and Italic Unicode support, but very attractive.
+\starttypescript [serif] [gentium]
+ \definefontsynonym [Gentium-Roman] [file:GentiumPlus-R] [features=default]
+ \definefontsynonym [Gentium-Italic] [file:GentiumPlus-I] [features=default]
+ \definefontsynonym [Gentium-Bold] [file:GenBasB] [features=default]
+ \definefontsynonym [Gentium-BoldItalic] [file:GenBasBI] [features=default]
+ \definefontsynonym [Gentium-Slanted] [Gentium-Italic]
+ \definefontsynonym [Gentium-BoldSlanted] [Gentium-BoldItalic]
+ \definefontsynonym [Gentium-RomanCaps] [file:GentiumPlus-R] [features=smallcaps]
\stoptypescript
-\starttypescript[serif][gentium][name]
-
-\definefontsynonym[Serif] [Gentium]
-\definefontsynonym[SerifBold] [Gentium]
-\definefontsynonym[SerifItalic] [GentiumItalic]
-\definefontsynonym[SerifBoldItalic] [GentiumItalic]
-\definefontsynonym[SerifSlanted] [GentiumItalic]
-\definefontsynonym[SerifBoldSlanted][GentiumItalic]
-\definefontsynonym[SerifCaps] [Gentium]
+\starttypescript [serif] [gentium] [name]
+ \definefontsynonym [Serif] [Gentium-Roman]
+ \definefontsynonym [SerifItalic] [Gentium-Italic]
+ \definefontsynonym [SerifBold] [Gentium-Bold]
+ \definefontsynonym [SerifBoldItalic] [Gentium-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Gentium-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [Gentium-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Serif]
+ \definefontsynonym [OldStyle] [Serif]
+ \definefontsynonym [SerifCaps] [Gentium-RomanCaps]
+\stoptypescript
+\starttypescript [gentium]
+ \definetypeface [gentium] [rm] [serif] [gentium] [default] [features=default]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/fonts/antykwa-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/antykwa-math.lfg
index 112a3f9a7a9..112a3f9a7a9 100644
--- a/Master/texmf-dist/tex/context/fonts/antykwa-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/antykwa-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/antykwapoltawskiego.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/antykwapoltawskiego.lfg
index 794b9f4079c..794b9f4079c 100644
--- a/Master/texmf-dist/tex/context/fonts/antykwapoltawskiego.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/antykwapoltawskiego.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/asana-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/asana-math.lfg
index 5b47b3ff8cc..5b47b3ff8cc 100644
--- a/Master/texmf-dist/tex/context/fonts/asana-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/asana-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/cambria-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/cambria-math.lfg
index 6415069e66e..6415069e66e 100644
--- a/Master/texmf-dist/tex/context/fonts/cambria-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/cambria-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mkiv/cambria.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/cambria.lfg
new file mode 100644
index 00000000000..04211009bf4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/cambria.lfg
@@ -0,0 +1,16 @@
+return {
+ name = "cambria",
+ version = "1.00",
+ comment = "Goodies that complement cambria.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ extensions = {
+ {
+ name = "kern", -- adds to kerns
+ type = "pair",
+ data = {
+ [0x0153] = { [0x0301] = { false, { -500, 0, 0, 0 } } },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/cc-icons.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/cc-icons.lfg
index fd0759b78d0..fd0759b78d0 100644
--- a/Master/texmf-dist/tex/context/fonts/cc-icons.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/cc-icons.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/ccicons.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/ccicons.lfg
index b79b3fb93a8..b79b3fb93a8 100644
--- a/Master/texmf-dist/tex/context/fonts/ccicons.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/ccicons.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/demo.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/demo.lfg
index 06c59e64427..06c59e64427 100644
--- a/Master/texmf-dist/tex/context/fonts/demo.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/demo.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/dingbats.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/dingbats.lfg
index b6bf3880faf..b6bf3880faf 100644
--- a/Master/texmf-dist/tex/context/fonts/dingbats.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/dingbats.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/ebgaramond.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/ebgaramond.lfg
index 43cc13c51c6..43cc13c51c6 100644
--- a/Master/texmf-dist/tex/context/fonts/ebgaramond.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/ebgaramond.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/euler-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/euler-math.lfg
index da7647c5339..da7647c5339 100644
--- a/Master/texmf-dist/tex/context/fonts/euler-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/euler-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/hanbatanglvt.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/hanbatanglvt.lfg
index 33374334857..33374334857 100644
--- a/Master/texmf-dist/tex/context/fonts/hanbatanglvt.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/hanbatanglvt.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/husayni.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/husayni.lfg
index 2f45add21ef..2f45add21ef 100644
--- a/Master/texmf-dist/tex/context/fonts/husayni.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/husayni.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/hvmath-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/hvmath-math.lfg
index 0eba3db23f6..0eba3db23f6 100644
--- a/Master/texmf-dist/tex/context/fonts/hvmath-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/hvmath-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/informal-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/informal-math.lfg
index a1f461740e1..a1f461740e1 100644
--- a/Master/texmf-dist/tex/context/fonts/informal-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/informal-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/iwona-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/iwona-math.lfg
index f2fb6934154..f2fb6934154 100644
--- a/Master/texmf-dist/tex/context/fonts/iwona-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/iwona-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/lm-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/lm-math.lfg
index b8c99697955..b8c99697955 100644
--- a/Master/texmf-dist/tex/context/fonts/lm-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/lm-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/lm.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/lm.lfg
index 546d18defae..546d18defae 100644
--- a/Master/texmf-dist/tex/context/fonts/lm.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/lm.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/lucida-opentype-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/lucida-opentype-math.lfg
index 946458deaa7..946458deaa7 100644
--- a/Master/texmf-dist/tex/context/fonts/lucida-opentype-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/lucida-opentype-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/lucida-typeone-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/lucida-typeone-math.lfg
index 82ba589cd48..82ba589cd48 100644
--- a/Master/texmf-dist/tex/context/fonts/lucida-typeone-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/lucida-typeone-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mathtimes-math.lfg
index 951cb683814..951cb683814 100644
--- a/Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mathtimes-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdbch-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdbch-math.lfg
index c66a3575a22..c66a3575a22 100644
--- a/Master/texmf-dist/tex/context/fonts/mdbch-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdbch-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdici-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdici-math.lfg
index 84833c40796..84833c40796 100644
--- a/Master/texmf-dist/tex/context/fonts/mdici-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdici-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdpgd-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdpgd-math.lfg
index b7863b46e4a..b7863b46e4a 100644
--- a/Master/texmf-dist/tex/context/fonts/mdpgd-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdpgd-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdpus-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdpus-math.lfg
index 95d51de1467..95d51de1467 100644
--- a/Master/texmf-dist/tex/context/fonts/mdpus-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdpus-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdput-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdput-math.lfg
index 7779ec1526b..7779ec1526b 100644
--- a/Master/texmf-dist/tex/context/fonts/mdput-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdput-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/mdugm-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/mdugm-math.lfg
index 293c99371b8..293c99371b8 100644
--- a/Master/texmf-dist/tex/context/fonts/mdugm-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/mdugm-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/px-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/px-math.lfg
index 14f71dad379..14f71dad379 100644
--- a/Master/texmf-dist/tex/context/fonts/px-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/px-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/symbol-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/symbol-math.lfg
index d37a3b1ee1e..d37a3b1ee1e 100644
--- a/Master/texmf-dist/tex/context/fonts/symbol-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/symbol-math.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/texgyre.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/texgyre.lfg
index 7859820376b..bcbc2ad86b6 100644
--- a/Master/texmf-dist/tex/context/fonts/texgyre.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/texgyre.lfg
@@ -33,4 +33,9 @@ return {
"tgschola-math.otf",
},
},
+ mathematics = {
+ alternates = {
+ dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" },
+ },
+ },
}
diff --git a/Master/texmf-dist/tex/context/fonts/treatments.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/treatments.lfg
index 40bac427c31..40bac427c31 100644
--- a/Master/texmf-dist/tex/context/fonts/treatments.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/treatments.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/tx-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/tx-math.lfg
index 2ad17348659..2ad17348659 100644
--- a/Master/texmf-dist/tex/context/fonts/tx-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/tx-math.lfg
diff --git a/Master/texmf-dist/tex/context/base/type-imp-antykwa.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwa.mkiv
index ba5895c8e4b..ba5895c8e4b 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-antykwa.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwa.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-antykwapoltawskiego.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwapoltawskiego.mkiv
index 5a4c1c4621c..5a4c1c4621c 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-antykwapoltawskiego.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-antykwapoltawskiego.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-asana.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-asana.mkiv
index b87c969e2cf..b87c969e2cf 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-asana.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-asana.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-averia.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-averia.mkiv
index fd0ee7100ad..fd0ee7100ad 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-averia.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-averia.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-buy.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-buy.mkiv
index dbfffe57ca1..dbfffe57ca1 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-buy.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-buy.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-cambria.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cambria.mkiv
index 9bfa2ee5c49..8154817bd0b 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-cambria.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cambria.mkiv
@@ -55,10 +55,10 @@
\starttypescript [\s!serif] [cambria,cambria-m,cambria-a] [\s!name]
\setups[\s!font:\s!fallback:\s!serif]
- \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default]
- \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default]
+ \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default,\s!goodies=cambria]
+ \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default,\s!goodies=cambria]
+ \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default,\s!goodies=cambria]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default,\s!goodies=cambria]
\stoptypescript
\starttypescript [cambria,cambria-m,cambria-a]
diff --git a/Master/texmf-dist/tex/context/base/type-imp-charter.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-charter.mkiv
index b788a974e56..b788a974e56 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-charter.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-charter.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-cleartype.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cleartype.mkiv
index b2f1b21a5b6..b2f1b21a5b6 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-cleartype.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cleartype.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-computer-modern-unicode.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-computer-modern-unicode.mkiv
index 0789b922e63..0789b922e63 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-computer-modern-unicode.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-computer-modern-unicode.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cow.mkiv
index f93e36428c0..f93e36428c0 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-cow.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-cow.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-dejavu.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
index 41cf1f701e3..41cf1f701e3 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-dejavu.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-dejavu.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-ebgaramond.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv
index 838654d49cd..838654d49cd 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-ebgaramond.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-euler.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-euler.mkiv
index d3b552b5672..d3b552b5672 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-euler.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-euler.mkiv
diff --git a/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-gentium.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-gentium.mkiv
new file mode 100644
index 00000000000..b2ad35a96c2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-gentium.mkiv
@@ -0,0 +1,34 @@
+%D \module
+%D [ file=type-gentium,
+%D version=2013.05.02,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Typescript file for Gentium,
+%D author={Thomas A. Schmitz and Mojca Miklavec},
+%D date=\currentdate,
+%D copyright={Mojca and Thomas}]
+
+\starttypescript [serif] [gentium]
+ \definefontsynonym [Gentium-Roman] [file:GentiumPlus-R] [features=default]
+ \definefontsynonym [Gentium-Italic] [file:GentiumPlus-I] [features=default]
+ \definefontsynonym [Gentium-Bold] [file:GenBasB] [features=default]
+ \definefontsynonym [Gentium-BoldItalic] [file:GenBasBI] [features=default]
+ \definefontsynonym [Gentium-Slanted] [Gentium-Italic]
+ \definefontsynonym [Gentium-BoldSlanted] [Gentium-BoldItalic]
+ \definefontsynonym [Gentium-RomanCaps] [file:GentiumPlus-R] [features=smallcaps]
+\stoptypescript
+
+\starttypescript [serif] [gentium] [name]
+ \definefontsynonym [Serif] [Gentium-Roman]
+ \definefontsynonym [SerifItalic] [Gentium-Italic]
+ \definefontsynonym [SerifBold] [Gentium-Bold]
+ \definefontsynonym [SerifBoldItalic] [Gentium-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Gentium-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [Gentium-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Serif]
+ \definefontsynonym [OldStyle] [Serif]
+ \definefontsynonym [SerifCaps] [Gentium-RomanCaps]
+\stoptypescript
+
+\starttypescript [gentium]
+ \definetypeface [gentium] [rm] [serif] [gentium] [default] [features=default]
+\stoptypescript
diff --git a/Master/texmf-dist/tex/context/base/type-imp-ghz.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ghz.mkiv
index 868d7302115..868d7302115 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-ghz.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ghz.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-hgz.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hgz.mkiv
index 091adeb2d82..091adeb2d82 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-hgz.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hgz.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-husayni.mkiv
index 76cbf77db65..76cbf77db65 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-husayni.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-husayni.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-hvmath.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hvmath.mkiv
index 01595710e54..01595710e54 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-hvmath.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-hvmath.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-inconsolata.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-inconsolata.mkiv
index 159759e9b5d..159759e9b5d 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-inconsolata.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-inconsolata.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-informal.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-informal.mkiv
index 575a836e58a..575a836e58a 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-informal.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-informal.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-ipaex.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ipaex.mkiv
index b11f9687857..b11f9687857 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-ipaex.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-ipaex.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-iwona.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-iwona.mkiv
index 88cb7e719c3..88cb7e719c3 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-iwona.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-iwona.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-kurier.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-kurier.mkiv
index d83510b95b5..d83510b95b5 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-kurier.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-kurier.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
index fe4b669bd70..fe4b669bd70 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-latinmodern.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-lato.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lato.mkiv
index 8fb8647fceb..11a386b3f7d 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-lato.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lato.mkiv
@@ -26,7 +26,7 @@
\setups[\s!font:\s!fallback:\s!sans]
\definefontsynonym [\s!Sans] [\s!file:lato-reg] [\s!features=\s!default]
\definefontsynonym [\s!SansBold] [\s!file:lato-bol] [\s!features=\s!default]
- \definefontsynonym [\s!SansItalic] [\s!file:lato-reglta] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:lato-regita] [\s!features=\s!default]
\definefontsynonym [\s!SansBoldItalic] [\s!file:lato-bollta] [\s!features=\s!default]
\stoptypescript
@@ -35,7 +35,7 @@
\definefontsynonym [\s!Sans] [\s!file:lato-lig] [\s!features=\s!default]
\definefontsynonym [\s!SansBold] [\s!file:lato-reg] [\s!features=\s!default]
\definefontsynonym [\s!SansItalic] [\s!file:lato-liglta] [\s!features=\s!default]
- \definefontsynonym [\s!SansBoldItalic] [\s!file:lato-reglta] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:lato-regita] [\s!features=\s!default]
\stoptypescript
\starttypescript [\s!sans] [lato-dark] [\s!name]
diff --git a/Master/texmf-dist/tex/context/base/type-imp-liberation.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-liberation.mkiv
index cc2c01b7bd3..cc2c01b7bd3 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-liberation.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-liberation.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-libertine.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-libertine.mkiv
index be92c27c730..4620995b93b 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-libertine.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-libertine.mkiv
@@ -11,15 +11,17 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% Linux Libertine O Italic
+
\starttypescriptcollection[libertine]
\starttypescript [\s!serif] [libertine]
\definefontsynonym [Libertine-Regular] [\s!file:linlibertiner]
- \definefontsynonym [Libertine-Italic] [\s!file:linlibertineri]
- \definefontsynonym [Libertine-Slanted] [\s!file:linlibertinearl]
+ \definefontsynonym [Libertine-Italic] [\s!file:linlibertineri] % z
+ \definefontsynonym [Libertine-Slanted] [\s!file:linlibertineri]
\definefontsynonym [Libertine-Bold] [\s!file:linlibertinerb]
- \definefontsynonym [Libertine-BoldItalic] [\s!file:linlibertinerbi]
- \definefontsynonym [Libertine-BoldSlanted] [\s!file:linlibertineabl]
+ \definefontsynonym [Libertine-BoldItalic] [\s!file:linlibertinerbi] % zi
+ \definefontsynonym [Libertine-BoldSlanted] [\s!file:linlibertinerbi]
\stoptypescript
\starttypescript [\s!serif] [libertine] [\s!name]
@@ -36,10 +38,11 @@
\starttypescript [\s!sans] [biolinum]
\setups[\s!font:\s!fallback:\s!sans]
\definefontsynonym [Biolinum-Regular] [\s!file:linbiolinumr]
- \definefontsynonym [Biolinum-Bold] [\s!file:linbiolinumrb]
\definefontsynonym [Biolinum-Italic] [\s!file:linbiolinumri]
- \definefontsynonym [Biolinum-Slanted] [\s!file:linbiolinumarl]
- \definefontsynonym [Biolinum-BoldSlanted] [\s!file:linbiolinumabl]
+ \definefontsynonym [Biolinum-Slanted] [\s!file:linbiolinumri]
+ \definefontsynonym [Biolinum-Bold] [\s!file:linbiolinumrb]
+ \definefontsynonym [Biolinum-BoldItalic] [\s!file:linbiolinumrbo]
+ \definefontsynonym [Biolinum-BoldSlanted] [\s!file:linbiolinumrbo]
\stoptypescript
\starttypescript [\s!sans] [biolinum] [\s!name]
diff --git a/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lmnames.mkiv
index 11ba93c348b..11ba93c348b 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-lmnames.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lmnames.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-lucida-opentype.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv
index 63a331cad6b..f39ed6e1f53 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-lucida-opentype.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-opentype.mkiv
@@ -11,11 +11,11 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% NOTA BENE: class feattures and goodies get expanded!
+% NOTA BENE: class features and goodies get expanded!
\starttypescriptcollection[lucida-opentype]
- \starttypescript [lucidanova,lucidaot,otlucida]
+ \starttypescript [lucidaot,lucidadk]
\loadfontgoodies[lucida-opentype-math]
\definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!features=\s!default]
\definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!features=\s!default]
@@ -28,7 +28,7 @@
\quittypescriptscanning
\stoptypescript
- \starttypescript [\s!serif] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!serif] [lucidaot,lucidadk]
\definefontsynonym [\s!Serif] [\s!file:LucidaBrightOT.otf]
\definefontsynonym [\s!SerifBold] [\s!file:LucidaBrightOT-Demi.otf]
\definefontsynonym [\s!SerifItalic] [\s!file:LucidaBrightOT-Italic.otf]
@@ -37,7 +37,7 @@
\definefontsynonym [\s!SerifBoldSlanted] [\s!SerifBoldItalic]
\stoptypescript
- \starttypescript [\s!sans] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!sans] [lucidaot,lucidadk]
\definefontsynonym [\s!Sans] [\s!file:LucidaSansOT.otf]
\definefontsynonym [\s!SansBold] [\s!file:LucidaSansOT-Demi.otf]
\definefontsynonym [\s!SansItalic] [\s!file:LucidaSansOT-Italic.otf]
@@ -46,7 +46,7 @@
\definefontsynonym [\s!SansBoldSlanted] [\s!SansBoldItalic]
\stoptypescript
- \starttypescript [\s!mono] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!mono] [lucidaot]
\definefontsynonym [\s!Mono] [\s!file:LucidaSansTypewriterOT.otf]
\definefontsynonym [\s!MonoBold] [\s!file:LucidaSansTypewriterOT-Bold.otf]
\definefontsynonym [\s!MonoItalic] [\s!file:LucidaSansTypewriterOT-Oblique.otf]
@@ -55,38 +55,28 @@
\definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic]
\stoptypescript
- \starttypescript [\s!math] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!mono] [lucidadk]
+ \definefontsynonym [\s!Mono] [\s!file:LucidaGrandeMonoDK.otf]
+ \definefontsynonym [\s!MonoBold] [\s!file:LucidaGrandeMonoDK-Bold.otf]
+ \definefontsynonym [\s!MonoItalic] [\s!file:LucidaGrandeMonoDK-Oblique.otf]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:LucidaGrandeMonoDK-BoldOblique.otf]
+ \definefontsynonym [\s!MonoSlanted] [\s!MonoItalic]
+ \definefontsynonym [\s!MonoBoldSlanted] [\s!MonoBoldItalic]
+ \stoptypescript
+
+ \starttypescript [\s!math] [lucidaot,lucidadk]
\definefontsynonym [\s!MathRoman] [\s!file:LucidaBrightMathOT.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucida-opentype-math]
\definefontsynonym [\s!MathRomanBold] [\s!file:LucidaBrightMathOT-Demi.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=lucida-opentype-math]
\stoptypescript
- \starttypescript [\s!handwriting] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!handwriting] [lucidaot,lucidadk]
\definefontsynonym [\s!Handwriting] [\s!file:LucidaHandwritingOT.otf]
\stoptypescript
- \starttypescript [\s!calligraphy] [lucidanova,lucidaot,otlucida]
+ \starttypescript [\s!calligraphy] [lucidaot,lucidadk]
\definefontsynonym [\s!Calligraphy] [\s!file:LucidaCalligraphyOT.otf]
\stoptypescript
\stoptypescriptcollection
\endinput
-
-\starttext
-
- \setupbodyfont[lucidanova]
-
-% \showfont[Serif][all]
-% \showfont[MathRoman][all]
-
- \usemodule[fnt-31]
-
- \startluacode
- fonts.tracers.coverage {
- "LucidaMathOT.otf",
- "LucidaBrightOT.otf",
- "LucidaSansOT-Typewriter.otf",
- }
- \stopluacode
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/base/type-imp-lucida-typeone.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-typeone.mkiv
index 5f28b9eedcb..5f28b9eedcb 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-lucida-typeone.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-lucida-typeone.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-mathdesign.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdesign.mkiv
index 00e753e75a8..00e753e75a8 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-mathdesign.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdesign.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-mathdigits.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdigits.mkiv
index 7a7e6b764bb..7a7e6b764bb 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-mathdigits.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathdigits.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-mathtimes.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathtimes.mkiv
index 21288277289..21288277289 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-mathtimes.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mathtimes.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-mscore.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mscore.mkiv
index 19276c01722..971a03de767 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-mscore.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-mscore.mkiv
@@ -31,6 +31,14 @@
\definefontsynonym [\s!SansBoldItalic] [\s!file:arialbi.ttf] [\s!features=\s!default]
\stoptypescript
+ \starttypescript [\s!sans] [mscorearialnarrow] [\s!name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:arialn.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:arialnb.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:arialni.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:arialnbi.ttf] [\s!features=\s!default]
+ \stoptypescript
+
\starttypescript [\s!mono] [mscorecourier] [\s!name]
\setups[\s!font:\s!fallback:\s!mono]
\definefontsynonym [\s!Mono] [\s!file:cour.ttf] [\s!features=\s!none]
@@ -54,6 +62,13 @@
\definetypeface [mscore] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.020]
\stoptypescript
+ \starttypescript[mscorenarrow]
+ \definetypeface [mscorenarrow] [\s!rm] [\s!serif] [mscoretimes] [\s!default]
+ \definetypeface [mscorenarrow] [\s!ss] [\s!sans] [mscorearialnarrow] [\s!default] [\s!rscale=0.860]
+ \definetypeface [mscorenarrow] [\s!tt] [\s!mono] [mscorecourier] [\s!default] [\s!rscale=1.065]
+ \definetypeface [mscorenarrow] [\s!mm] [\s!math] [times] [\s!default] [\s!rscale=1.020]
+ \stoptypescript
+
% \starttypescript[mscoress]
% \definetypeface [mscoress] [\s!ss] [\s!sans] [mscorearial] [\s!default]
% \definetypeface [mscoress] [\s!rm] [\s!serif] [mscoretimes] [\s!default] [rscale=1.160]
diff --git a/Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-opendyslexic.mkiv
index 770d43c6ce4..770d43c6ce4 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-opendyslexic.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-opendyslexic.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-osx.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-osx.mkiv
index 16b8e054582..16b8e054582 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-osx.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-osx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-postscript.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-postscript.mkiv
index c53b8951996..c53b8951996 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-postscript.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-postscript.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-punknova.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-punknova.mkiv
index 8d95bf88568..8d95bf88568 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-punknova.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-punknova.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
index 247b4ef2101..86db8c603d3 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-texgyre.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
@@ -52,7 +52,7 @@
\definetypescriptprefix [n:courier] [TeXGyreCursor]
\definetypescriptprefix [n:chancery] [TeXGyreChorus]
- \starttypescript [\s!serif,\s!sans] [adventor,bonum,bookman,heros,helvetica,pagella,palatino,bonum,bookman,schola,schoolbook,termes,times]
+ \starttypescript [\s!serif,\s!sans] [adventor,bonum,bookman,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!default]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!default]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!default]
@@ -235,7 +235,7 @@
\starttypescript [\s!math][times,termes][\s!all]
\loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features=\s!math\mathsizesuffix]
+ \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
\stoptypescript
\stoptypescriptcollection
@@ -262,7 +262,7 @@
\starttypescript [\s!math][palatino,pagella][\s!all]
\loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features=\s!math\mathsizesuffix]
+ \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
\stoptypescript
\stoptypescriptcollection
@@ -273,7 +273,7 @@
\starttypescript [\s!math][bookman,bonum][\s!all]
\loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features=\s!math\mathsizesuffix]
+ \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
\stoptypescript
\stoptypescriptcollection
@@ -282,7 +282,7 @@
\starttypescript [\s!math][schoolbook,schola][\s!all]
\loadfontgoodies[texgyre]
- \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features=\s!math\mathsizesuffix]
+ \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features=\s!math\mathsizesuffix,\s!goodies=texgyre]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-imp-unfonts.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-unfonts.mkiv
index 91ae3b2300f..91ae3b2300f 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-unfonts.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-unfonts.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-xits.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xits.mkiv
index f83050e14ac..f83050e14ac 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-xits.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xits.mkiv
diff --git a/Master/texmf-dist/tex/context/base/type-imp-xitsbidi.mkiv b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xitsbidi.mkiv
index 33c4340ed0e..33c4340ed0e 100644
--- a/Master/texmf-dist/tex/context/base/type-imp-xitsbidi.mkiv
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/type-imp-xitsbidi.mkiv
diff --git a/Master/texmf-dist/tex/context/fonts/unifraktur.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/unifraktur.lfg
index 32ffed928f5..32ffed928f5 100644
--- a/Master/texmf-dist/tex/context/fonts/unifraktur.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/unifraktur.lfg
diff --git a/Master/texmf-dist/tex/context/fonts/xits-math.lfg b/Master/texmf-dist/tex/context/fonts/mkiv/xits-math.lfg
index 24ed2b0aaff..8e127436574 100644
--- a/Master/texmf-dist/tex/context/fonts/xits-math.lfg
+++ b/Master/texmf-dist/tex/context/fonts/mkiv/xits-math.lfg
@@ -24,9 +24,9 @@ return {
author = "Hans Hagen",
copyright = "ConTeXt development team",
mathematics = {
- italics = {
- ["xits-math"] = italics,
- },
+ -- italics = {
+ -- ["xits-math"] = italics,
+ -- },
alternates = {
cal = { feature = 'ss01', value = 1, comment = "Mathematical Calligraphic Alphabet" },
greekssup = { feature = 'ss02', value = 1, comment = "Mathematical Greek Sans Serif Alphabet" },
diff --git a/Master/texmf-dist/tex/context/interface/cont-cs.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-cs.xml
index c798ea4a91a..8da15965921 100644
--- a/Master/texmf-dist/tex/context/interface/cont-cs.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-cs.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="cs" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="uzijkodovani"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="ukazzakladnifont"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="mezera">
- <cd:constant type="zap"/>
- <cd:constant type="vyp"/>
- </cd:parameter>
- <cd:parameter name="stranka">
- <cd:constant type="ano"/>
- <cd:constant type="ne"/>
- </cd:parameter>
<cd:parameter name="volba">
<cd:constant type="sklonene"/>
<cd:constant type="normalni"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -3152,8 +3140,8 @@
<cd:constant type="vrsek"/>
<cd:constant type="semknuto"/>
<cd:constant type="naokraji"/>
- <cd:constant type="vlevo"/>
- <cd:constant type="vpravo"/>
+ <cd:constant type="ivlevo"/>
+ <cd:constant type="ivpravo"/>
<cd:constant type="visici"/>
</cd:parameter>
<cd:parameter name="stylhlavicky">
@@ -4186,8 +4174,8 @@
<cd:constant type="nastred"/>
<cd:constant type="marginalie"/>
<cd:constant type="textovahrana"/>
- <cd:constant type="vlevo"/>
- <cd:constant type="vpravo"/>
+ <cd:constant type="ivlevo"/>
+ <cd:constant type="ivpravo"/>
</cd:parameter>
<cd:parameter name="konverze">
<cd:constant type="cisla"/>
@@ -5489,9 +5477,9 @@
<cd:constant type="vlevo"/>
<cd:constant type="marginalie"/>
<cd:constant type="naokraji"/>
- <cd:constant type="vlevo"/>
- <cd:constant type="vpravo"/>
+ <cd:constant type="ivlevo"/>
<cd:constant type="vpravo"/>
+ <cd:constant type="ivpravo"/>
<cd:constant type="uvnitr"/>
<cd:constant type="vnejsi"/>
<cd:constant type="text"/>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="cs"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="polozka"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="polozka"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="spodek"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definujrejstrik"/>
@@ -6708,8 +6731,8 @@
<cd:constant type="vrsek"/>
<cd:constant type="semknuto"/>
<cd:constant type="naokraji"/>
- <cd:constant type="vlevo"/>
- <cd:constant type="vpravo"/>
+ <cd:constant type="ivlevo"/>
+ <cd:constant type="ivpravo"/>
</cd:parameter>
<cd:parameter name="sirka">
<cd:constant type="cd:dimension"/>
@@ -7629,8 +7652,8 @@
<cd:constant type="zde" default="yes"/>
<cd:constant type="vrsek"/>
<cd:constant type="spodek"/>
- <cd:constant type="vlevo"/>
- <cd:constant type="vpravo"/>
+ <cd:constant type="ivlevo"/>
+ <cd:constant type="ivpravo"/>
<cd:constant type="naokraji"/>
<cd:constant type="marginalie"/>
<cd:constant type="levyokraj"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-de.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-de.xml
index f40927b45d1..b3f9289f828 100644
--- a/Master/texmf-dist/tex/context/interface/cont-de.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-de.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="de" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="benutzekodierung"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="zeigefliesstext"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="spatium">
- <cd:constant type="an"/>
- <cd:constant type="aus"/>
- </cd:parameter>
- <cd:parameter name="seite">
- <cd:constant type="ja"/>
- <cd:constant type="nein"/>
- </cd:parameter>
<cd:parameter name="option">
<cd:constant type="geneigt"/>
<cd:constant type="normal"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="de"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="pos"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="pos"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="but"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definiereregister"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-en.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-en.xml
index 651292e7f0a..59a6bf6bb78 100644
--- a/Master/texmf-dist/tex/context/interface/cont-en.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-en.xml
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="useencoding"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="showbodyfont"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="space">
- <cd:constant type="on"/>
- <cd:constant type="off"/>
- </cd:parameter>
- <cd:parameter name="page">
- <cd:constant type="yes"/>
- <cd:constant type="no"/>
- </cd:parameter>
<cd:parameter name="option">
<cd:constant type="slanted"/>
<cd:constant type="normal"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="en"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="item"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="item"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="but"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="defineregister"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-fr.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-fr.xml
index 30a89c059ad..e8873393e76 100644
--- a/Master/texmf-dist/tex/context/interface/cont-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-fr.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="fr" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="utiliseencodage"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="montrepolicecorps"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="espace">
- <cd:constant type="actif"/>
- <cd:constant type="desactive"/>
- </cd:parameter>
- <cd:parameter name="page">
- <cd:constant type="oui"/>
- <cd:constant type="non"/>
- </cd:parameter>
<cd:parameter name="option">
<cd:constant type="incline"/>
<cd:constant type="normal"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="texte">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="fr"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="element"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="element"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="but"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definitregistre"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-it.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-it.xml
index 32d19e87f5e..9d69dc7b57f 100644
--- a/Master/texmf-dist/tex/context/interface/cont-it.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-it.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="it" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="usacodifica"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="mostrafontdeltesto"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="spazio">
- <cd:constant type="attivo"/>
- <cd:constant type="disattivo"/>
- </cd:parameter>
- <cd:parameter name="pagina">
- <cd:constant type="si"/>
- <cd:constant type="no"/>
- </cd:parameter>
<cd:parameter name="opzione">
<cd:constant type="inclinato"/>
<cd:constant type="normale"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="testo">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="it"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="elemento"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="elemento"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="fondo"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definisciregistro"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-nl.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-nl.xml
index 6c49baccda6..ac955ae54a5 100644
--- a/Master/texmf-dist/tex/context/interface/cont-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-nl.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="nl" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="usecodering"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="toonkorps"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="spatie">
- <cd:constant type="aan"/>
- <cd:constant type="uit"/>
- </cd:parameter>
- <cd:parameter name="pagina">
- <cd:constant type="ja"/>
- <cd:constant type="nee"/>
- </cd:parameter>
<cd:parameter name="optie">
<cd:constant type="schuin"/>
<cd:constant type="normaal"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="tekst">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="sluitsymbool">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="sluitcommando">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="nl"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="definieeritemgroep"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="stelitemgroepin"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="som"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="som"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="but"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definieerregister"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-pe.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-pe.xml
index bf7d65fd045..d538f4cfbb5 100644
--- a/Master/texmf-dist/tex/context/interface/cont-pe.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-pe.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="pe" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="استفاده‌رمزینه"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="نمایش‌قلم‌بدنه"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="فضا">
- <cd:constant type="روی"/>
- <cd:constant type="خاموش"/>
- </cd:parameter>
- <cd:parameter name="صفحه">
- <cd:constant type="بله"/>
- <cd:constant type="نه"/>
- </cd:parameter>
<cd:parameter name="گزینه">
<cd:constant type="خوابیده"/>
<cd:constant type="نرمال"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="متن">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="بستن‌نماد">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="بستن‌فرمان">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="pe"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="تعریف‌گروه‌آیتم"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="بارگذاری‌گروه‌آیتم"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="آیتم"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="آیتم"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="اما"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="تعریف‌ثبت"/>
diff --git a/Master/texmf-dist/tex/context/interface/cont-ro.xml b/Master/texmf-dist/tex/context/interface/mkii/cont-ro.xml
index b81c3bc7e58..21ffea2451e 100644
--- a/Master/texmf-dist/tex/context/interface/cont-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/cont-ro.xml
@@ -11,7 +11,7 @@
-->
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="ro" version="2006.08.02">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context test" language="en" version="2006.08.02">
<!-- there are some more -->
@@ -244,7 +244,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="useencoding" file="enco-ini.tex" category="encoding"> <!-- engine="pdftex" -->
+ <cd:command name="useencoding" file="enco-ini.tex" category="encoding" obsolete="yes"> <!-- engine="pdftex" -->
<cd:sequence>
<cd:string value="folosestecodificarea"/>
</cd:sequence>
@@ -478,7 +478,6 @@
</cd:arguments>
</cd:command>
-
<cd:command name="showbodyfont" file="font-run.tex" category="fonts"> <!-- visual debugging -->
<cd:sequence>
<cd:string value="afiseazafonttext"/>
@@ -952,14 +951,6 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments n="2" list="yes">
- <cd:parameter name="spatiu">
- <cd:constant type="on"/>
- <cd:constant type="dezactivat"/>
- </cd:parameter>
- <cd:parameter name="pagina">
- <cd:constant type="da"/>
- <cd:constant type="nu"/>
- </cd:parameter>
<cd:parameter name="optiune">
<cd:constant type="inclinat"/>
<cd:constant type="normal"/>
@@ -3113,9 +3104,6 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
- <cd:parameter name="closesymbol">
- <cd:constant type="cd:text"/>
- </cd:parameter>
<cd:parameter name="closecommand">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
@@ -6180,7 +6168,29 @@
</cd:arguments>
</cd:command>
- <cd:command name="setupitemgroup" file="core-itm.tex">
+ <!--
+
+ <cd:feature name="itemgroups" file="strc-itm">
+
+ <cd:description language="ro"> </cd:description>
+
+ -->
+
+ <cd:command name="defineitemgroup" file="strc-itm">
+ <cd:sequence>
+ <cd:string value="defineitemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords n="1">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords n="2" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" file="strc-itm">
<!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
@@ -6308,7 +6318,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="itemgroup" type="environment" generated="yes" file="core-itm.tex">
+ <cd:command name="itemgroup" type="environment" generated="yes" file="strc-itm">
<cd:sequence>
<cd:variable value="itemgroup"/>
</cd:sequence>
@@ -6348,7 +6358,7 @@
</cd:arguments>
</cd:command>
- <cd:command name="item" file="core-itm.tex">
+ <cd:command name="item" environment="yes" shortcut="yes" file="strc-itm">
<cd:sequence>
<cd:string value="element"/>
</cd:sequence>
@@ -6357,6 +6367,17 @@
</cd:arguments>
</cd:command>
+ <!--
+ <cd:command name="item" file="core-itm.tex">
+ <cd:sequence>
+ <cd:string value="element"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference n="1" optional="yes" list="yes"/>
+ </cd:arguments>
+ </cd:command>
+ -->
+
<cd:command name="but">
<cd:sequence>
<cd:string value="but"/>
@@ -6427,6 +6448,8 @@
</cd:sequence>
</cd:command>
+ <!-- </cd:feature> -->
+
<cd:command name="defineregister" file="core-reg.tex">
<cd:sequence>
<cd:string value="definesteregistru"/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-cs.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml
index c8e7e7517c1..01504609a2b 100644
--- a/Master/texmf-dist/tex/context/interface/keys-cs.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Pridavek'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Bublinka'/>
<cd:variable name='Cap' value='Kap'/>
<cd:variable name='Capital' value='Kapitalky'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='DalsiStrana'/>
<cd:variable name='Numbers' value='Cisla'/>
<cd:variable name='OpenNamedDocument' value='OpenNamedDocument'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Odstavec'/>
<cd:variable name='PauseMovie' value='PozastavitFilm'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='akce'/>
<cd:variable name='after' value='po'/>
<cd:variable name='all' value='vse'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='vzdy'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='dodatky'/>
<cd:variable name='appendix' value='dodatek'/>
<cd:variable name='april' value='duben'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='naokraji'/>
<cd:variable name='atpage' value='nastrance'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='srpen'/>
<cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autouvod'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='zpet'/>
<cd:variable name='background' value='pozadi'/>
<cd:variable name='backmatter' value='epilogy'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='vysokapriorita'/>
<cd:variable name='blank' value='prazdny'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='hlavnicasti'/>
<cd:variable name='bodypart' value='hlavnicast'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='tucnesklonene'/>
<cd:variable name='bookmark' value='zalozka'/>
<cd:variable name='both' value='obe'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='spodek'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='siroky'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='skrz'/>
<cd:variable name='calligraphic' value='kaligraficke'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='kap'/>
<cd:variable name='capital' value='kapitalky'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='kapitola'/>
<cd:variable name='character' value='pismeno'/>
<cd:variable name='characters' value='pismena'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='barevne'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='sloupce'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='prikaz'/>
<cd:variable name='commands' value='prikazy'/>
<cd:variable name='comment' value='komentar'/>
<cd:variable name='component' value='komponenta'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='koncept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='obsah'/>
<cd:variable name='contents' value='obsah'/>
<cd:variable name='continue' value='pokracovat'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='konverze'/>
<cd:variable name='current' value='aktualni'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='datum'/>
<cd:variable name='day' value='den'/>
<cd:variable name='december' value='prosinec'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='kazdy'/>
<cd:variable name='edge' value='hrana'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='prazdne'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='sude'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='externi'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fakt'/>
<cd:variable name='february' value='unor'/>
<cd:variable name='figure' value='obrazek'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='patek'/>
<cd:variable name='frontmatter' value='prednicasti'/>
<cd:variable name='frontpart' value='prednicast'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='globalne'/>
<cd:variable name='graphic' value='graf'/>
<cd:variable name='graphics' value='grafy'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='rejstriky'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='inherit'/>
- <cd:variable name='inleft' value='vlevo'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
+ <cd:variable name='inleft' value='ivlevo'/>
+ <cd:variable name='inleftedge' value='nalevo'/>
+ <cd:variable name='inleftmargin' value='nalevyokraj'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='naokraji'/>
<cd:variable name='inner' value='uvnitr'/>
<cd:variable name='inneredge' value='inneredge'/>
<cd:variable name='innermargin' value='innermargin'/>
- <cd:variable name='inright' value='vpravo'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
+ <cd:variable name='inright' value='ivpravo'/>
+ <cd:variable name='inrightedge' value='napravo'/>
+ <cd:variable name='inrightmargin' value='napravyokraj'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interakce'/>
<cd:variable name='interactionmenu' value='interaktivnimenu'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='dotextu'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='cervenec'/>
<cd:variable name='june' value='cerven'/>
<cd:variable name='keep' value='drzet'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='popisek'/>
<cd:variable name='landscape' value='nasirku'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legenda'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='radek'/>
<cd:variable name='linenote' value='linenote'/>
<cd:variable name='lines' value='radky'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='loga'/>
<cd:variable name='lohi' value='nivy'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='uvolnene'/>
<cd:variable name='low' value='nizko'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='brezen'/>
<cd:variable name='margin' value='marginalie'/>
<cd:variable name='marginedge' value='textovahrana'/>
+ <cd:variable name='margintext' value='marginalnitext'/>
<cd:variable name='margintitle' value='titulmarginalie'/>
<cd:variable name='marking' value='znaceni'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='minvyska'/>
<cd:variable name='minwidth' value='minsirka'/>
<cd:variable name='mirrored' value='zrcadleno'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='pondeli'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monotucne'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='mesic'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='dalsilichastranka'/>
<cd:variable name='nextpage' value='dalsistranka'/>
<cd:variable name='nextsubpage' value='dalsipodstranka'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='ne'/>
<cd:variable name='nocheck' value='nocheck'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='zadneznaceni'/>
<cd:variable name='none' value='zadny'/>
<cd:variable name='nonumber' value='nonumber'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normalni'/>
<cd:variable name='nospacing' value='nospacing'/>
<cd:variable name='not' value='ne'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='vyp'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='zap'/>
<cd:variable name='one' value='jedna'/>
<cd:variable name='opposite' value='naproti'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='vnejsi'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='stejnastranka'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sanstucne'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='bezserifu'/>
<cd:variable name='saturday' value='sobota'/>
<cd:variable name='screen' value='rastr'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='zari'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='semknuto'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='jednostranne'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='sklonene'/>
<cd:variable name='slantedbold' value='sklonenetucne'/>
<cd:variable name='small' value='male'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='maletype'/>
<cd:variable name='somewhere' value='nekde'/>
<cd:variable name='sorted' value='tridene'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='mezera'/>
<cd:variable name='spacing' value='mezerovani'/>
<cd:variable name='speech' value='speech'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='predel'/>
<cd:variable name='stretch' value='natahnout'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='striktni'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='symbol'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='system'/>
<cd:variable name='table' value='tabulka'/>
<cd:variable name='tablehead' value='zahlavitabulky'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='podtrzeni'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='jednotka'/>
<cd:variable name='units' value='jednotky'/>
<cd:variable name='unknown' value='neznamy'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='velmi'/>
<cd:variable name='verystrict' value='velmistriktni'/>
<cd:variable name='verytolerant' value='velmitolerantni'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='streda'/>
<cd:variable name='week' value='tyden'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='siroce'/>
<cd:variable name='width' value='sirka'/>
<cd:variable name='word' value='slovo'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='rok'/>
<cd:variable name='yes' value='ano'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language cs -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='u'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='velky'/>
<cd:constant name='blank' value='prazdny'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='dobloku'/>
<cd:constant name='bodyfont' value='zakladnifont'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='pocitat'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='cprikaz'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='klik'/>
<cd:constant name='clickin' value='klikuvnitr'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='sloupec'/>
<cd:constant name='columndistance' value='vzdalenostsloupcu'/>
<cd:constant name='columns' value='sloupce'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='prikaz'/>
<cd:constant name='commandafter' value='prikazpo'/>
<cd:constant name='commandbefore' value='predchoziprikaz'/>
<cd:constant name='commands' value='prikazy'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='pokracovat'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='propojeni'/>
<cd:constant name='couplingway' value='zpusobpropojeni'/>
<cd:constant name='criterium' value='kriterium'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='aktualni'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pomlcka'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='adresar'/>
<cd:constant name='display' value='obrazovka'/>
<cd:constant name='distance' value='vzdalenost'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='tecka'/>
<cd:constant name='doublesided' value='oboustranne'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='sudamarginalie'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expanzen'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='rodina'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='barvapozadipole'/>
<cd:constant name='fieldframecolor' value='barvarameckupole'/>
<cd:constant name='fieldlayer' value='fieldlayer'/>
<cd:constant name='fieldoffset' value='offsetpole'/>
<cd:constant name='file' value='soubor'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='prvnistranka'/>
<cd:constant name='focus' value='zaostreni'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='upati'/>
<cd:constant name='footerdistance' value='vzdalenostupati'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='foregroundcolor'/>
<cd:constant name='foregroundstyle' value='foregroundstyle'/>
<cd:constant name='format' value='formatovat'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='ramecek'/>
<cd:constant name='framecolor' value='barvaramecku'/>
<cd:constant name='framecorner' value='rohramecku'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='polomerramecku'/>
<cd:constant name='frames' value='ramecky'/>
<cd:constant name='from' value='z'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='ziskat'/>
<cd:constant name='global' value='globalne'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='mrizka'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='zaveseni'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='horoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='iprikaz'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='v'/>
<cd:constant name='inbetween' value='mezi'/>
<cd:constant name='increment' value='zvysit'/>
<cd:constant name='incrementnumber' value='zvysujicicislo'/>
<cd:constant name='indenting' value='odsazovani'/>
<cd:constant name='indentnext' value='odsadpristi'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indikator'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='vnitrni'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interakce'/>
<cd:constant name='interlinespace' value='meziradkovamezera'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='polozky'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='popisek'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='poslednistrana'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='vlevo'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='podvetavlevo'/>
<cd:constant name='lefttext' value='textvlevo'/>
<cd:constant name='leftwidth' value='sirkavlevo'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='uroven'/>
<cd:constant name='levels' value='urovne'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nspodek'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='dalsi'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nvlevo'/>
<cd:constant name='nlines' value='nradky'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='nvpravo'/>
<cd:constant name='ntop' value='nvrsek'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='otevriakci'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='akceotevrenistranky'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='volba'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='barvastranky'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='strankovyprikaz'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='cislostranky'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='paleta'/>
<cd:constant name='paper' value='papir'/>
<cd:constant name='paragraph' value='odstavec'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='umistit'/>
<cd:constant name='placehead' value='umistihlavicku'/>
<cd:constant name='placestopper' value='predelmista'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='tisknutelne'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='polomer'/>
<cd:constant name='random' value='nahodne'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='odkaz'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='odkazujici'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='oblastuvnitr'/>
<cd:constant name='regionout' value='oblastvne'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='opakovat'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnumber'/>
<cd:constant name='resolution' value='rozliseni'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='reverse'/>
<cd:constant name='right' value='vpravo'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='barvavpravo'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='pravahrana'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='podvetavpravo'/>
<cd:constant name='righttext' value='textvpravo'/>
<cd:constant name='rightwidth' value='sirkavpravo'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotace'/>
<cd:constant name='rule' value='linka'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='rozsah'/>
<cd:constant name='screen' value='rastr'/>
<cd:constant name='section' value='oddil'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='cislooddilu'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='mezerapred'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='mezerovani'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='split'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symzarovnani'/>
<cd:constant name='symbol' value='symbol'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='sadasymbolu'/>
<cd:constant name='symcolor' value='barvasymbolu'/>
<cd:constant name='symstyle' value='stylsymboly'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='stylsynonyma'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='text'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='barvatextu'/>
<cd:constant name='textcommand' value='textovyprikaz'/>
<cd:constant name='textdistance' value='textdistance'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='svrchnimezera'/>
<cd:constant name='topstate' value='statusvrsku'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='typ'/>
<cd:constant name='unit' value='jednotka'/>
<cd:constant name='unknownreference' value='neznamyodkaz'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlalternativa'/>
<cd:constant name='urlspace' value='prostorurl'/>
<cd:constant name='validate' value='validovat'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='offsethlavicky'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='zpusob'/>
<cd:constant name='wfactor' value='sfaktor'/>
<cd:constant name='white' value='bily'/>
<cd:constant name='width' value='sirka'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfaktor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xmeritko'/>
<cd:constant name='xstep' value='xkrok'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='ymeritko'/>
<cd:constant name='ystep' value='ykrok'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language cs -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stop'/>
<cd:element name='text' value='text'/>
<cd:element name='type' value='opis'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language cs -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='zapisdoseznamu'/>
<cd:command name='writetoreferencelist' value='zapisdoseznamuodkazu'/>
<cd:command name='writetoregister' value='zapisdorejstriku'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-cz.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-cz.xml
index ef47e5f3f22..ef47e5f3f22 100644
--- a/Master/texmf-dist/tex/context/interface/keys-cz.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-cz.xml
diff --git a/Master/texmf-dist/tex/context/interface/keys-de.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml
index a100a938fa3..97a8ef09bbb 100644
--- a/Master/texmf-dist/tex/context/interface/keys-de.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Zusatz'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Ballon'/>
<cd:variable name='Cap' value='Kap'/>
<cd:variable name='Capital' value='Versalien'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='FolgendeSeite'/>
<cd:variable name='Numbers' value='Ziffern'/>
<cd:variable name='OpenNamedDocument' value='OpenNamedDocument'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Absatz'/>
<cd:variable name='PauseMovie' value='PauseFilm'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='aktion'/>
<cd:variable name='after' value='nach'/>
<cd:variable name='all' value='alles'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='immer'/>
<cd:variable name='and' value='und'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='anhaenge'/>
<cd:variable name='appendix' value='anhang'/>
<cd:variable name='april' value='april'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='amrand'/>
<cd:variable name='atpage' value='aufseite'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='august'/>
<cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='zurueck'/>
<cd:variable name='background' value='hintergrund'/>
<cd:variable name='backmatter' value='epiloge'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='grosszuegig'/>
<cd:variable name='blank' value='blanko'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='haupttexte'/>
<cd:variable name='bodypart' value='haupttext'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='fettgeneigt'/>
<cd:variable name='bookmark' value='bookmark'/>
<cd:variable name='both' value='beide'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='unten'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='breit'/>
<cd:variable name='buffer' value='puffer'/>
<cd:variable name='by' value='pro'/>
<cd:variable name='calligraphic' value='kalligraphie'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='kap'/>
<cd:variable name='capital' value='versalien'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='kapitel'/>
<cd:variable name='character' value='buchstabe'/>
<cd:variable name='characters' value='buchstaben'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='farbe'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='spalten'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='befehl'/>
<cd:variable name='commands' value='befehle'/>
<cd:variable name='comment' value='kommentar'/>
<cd:variable name='component' value='komponente'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='konzept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='inhalt'/>
<cd:variable name='contents' value='inhalte'/>
<cd:variable name='continue' value='fortsetzten'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='konversion'/>
<cd:variable name='current' value='aktuell'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='datum'/>
<cd:variable name='day' value='tag'/>
<cd:variable name='december' value='dezember'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='jede'/>
<cd:variable name='edge' value='kante'/>
+ <cd:variable name='eight' value='acht'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='leer'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='gerade'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='extern'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='gegeben'/>
<cd:variable name='february' value='februar'/>
<cd:variable name='figure' value='abbildung'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='freitag'/>
<cd:variable name='frontmatter' value='einleitungen'/>
<cd:variable name='frontpart' value='einleitung'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='global'/>
<cd:variable name='graphic' value='grafik'/>
<cd:variable name='graphics' value='grafiken'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indizies'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='inherit'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='imlinken'/>
+ <cd:variable name='inleftedge' value='imlinkenrand'/>
+ <cd:variable name='inleftmargin' value='inlinkermarginale'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='imrand'/>
<cd:variable name='inner' value='innen'/>
<cd:variable name='inneredge' value='inneredge'/>
<cd:variable name='innermargin' value='innermargin'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='imrechten'/>
+ <cd:variable name='inrightedge' value='imrechtenrand'/>
+ <cd:variable name='inrightmargin' value='inrechtermarginale'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interaktion'/>
<cd:variable name='interactionmenu' value='interaktionsmenue'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='imtext'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='juli'/>
<cd:variable name='june' value='juni'/>
<cd:variable name='keep' value='behalte'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='label'/>
<cd:variable name='landscape' value='querformat'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legende'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='zeile'/>
<cd:variable name='linenote' value='linenote'/>
<cd:variable name='lines' value='zeilen'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='logos'/>
<cd:variable name='lohi' value='hoti'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='lose'/>
<cd:variable name='low' value='tief'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='maerz'/>
<cd:variable name='margin' value='marginalie'/>
<cd:variable name='marginedge' value='marginalkante'/>
+ <cd:variable name='margintext' value='marginaltext'/>
<cd:variable name='margintitle' value='marginaltitel'/>
<cd:variable name='marking' value='beschriftung'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='minhoehe'/>
<cd:variable name='minwidth' value='minbreite'/>
<cd:variable name='mirrored' value='gespiegelt'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='montag'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monofett'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='monat'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='naechsteungeradeseite'/>
<cd:variable name='nextpage' value='folgendeseite'/>
<cd:variable name='nextsubpage' value='folgendeunterseite'/>
+ <cd:variable name='nine' value='neun'/>
<cd:variable name='no' value='nein'/>
<cd:variable name='nocheck' value='nocheck'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='keinebeschriftung'/>
<cd:variable name='none' value='kein'/>
<cd:variable name='nonumber' value='nonumber'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normal'/>
<cd:variable name='nospacing' value='nospacing'/>
<cd:variable name='not' value='nicht'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='aus'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='an'/>
<cd:variable name='one' value='eins'/>
<cd:variable name='opposite' value='gegenueber'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='aussen'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='selbeseite'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansfett'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='grotesk'/>
<cd:variable name='saturday' value='samstag'/>
<cd:variable name='screen' value='raster'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='september'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='kleinerabstand'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='sieben'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='kurz'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='einzelseitig'/>
+ <cd:variable name='six' value='sechs'/>
<cd:variable name='slanted' value='geneigt'/>
<cd:variable name='slantedbold' value='geneigtfett'/>
<cd:variable name='small' value='klein'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='kleintippen'/>
<cd:variable name='somewhere' value='irgendwo'/>
<cd:variable name='sorted' value='sortiert'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='spatium'/>
<cd:variable name='spacing' value='spatiumausgleich'/>
<cd:variable name='speech' value='speech'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='trenner'/>
<cd:variable name='stretch' value='strecken'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='streng'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='symbol'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='systeme'/>
<cd:variable name='table' value='tabelle'/>
<cd:variable name='tablehead' value='tabellenueberschrift'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='unterstreichen'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='einheit'/>
<cd:variable name='units' value='einheiten'/>
<cd:variable name='unknown' value='unbekannt'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='sehr'/>
<cd:variable name='verystrict' value='sehrstreng'/>
<cd:variable name='verytolerant' value='sehrtolerant'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='mittwoch'/>
<cd:variable name='week' value='woche'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='breit'/>
<cd:variable name='width' value='breite'/>
<cd:variable name='word' value='wort'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='jahr'/>
<cd:variable name='yes' value='ja'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language de -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='bei'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='gross'/>
<cd:constant name='blank' value='blanko'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blockauf'/>
<cd:constant name='bodyfont' value='fliesstext'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='berechnen'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='cbefehl'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='klick'/>
<cd:constant name='clickin' value='klickin'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='spalte'/>
<cd:constant name='columndistance' value='spaltenabstand'/>
<cd:constant name='columns' value='spalten'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='befehl'/>
<cd:constant name='commandafter' value='zumbefehl'/>
<cd:constant name='commandbefore' value='vorbefehl'/>
<cd:constant name='commands' value='befehle'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='fortsetzen'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='verknuepfung'/>
<cd:constant name='couplingway' value='verkopplungsart'/>
<cd:constant name='criterium' value='kriterium'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='aktuell'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='strich'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='verzeichnis'/>
<cd:constant name='display' value='bildschirm'/>
<cd:constant name='distance' value='abstand'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='punkt'/>
<cd:constant name='doublesided' value='doppelseitig'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='geraderand'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='familie'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='feldhintergrundfarbe'/>
<cd:constant name='fieldframecolor' value='feldrahmenfarbe'/>
<cd:constant name='fieldlayer' value='fieldlayer'/>
<cd:constant name='fieldoffset' value='feldoffset'/>
<cd:constant name='file' value='datei'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='ersteseite'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='fusszeile'/>
<cd:constant name='footerdistance' value='fusszeilenabstand'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='foregroundcolor'/>
<cd:constant name='foregroundstyle' value='foregroundstyle'/>
<cd:constant name='format' value='formatieren'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='rahmen'/>
<cd:constant name='framecolor' value='rahmenfarbe'/>
<cd:constant name='framecorner' value='rahmenwinkel'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='rahmenradius'/>
<cd:constant name='frames' value='umrahmen'/>
<cd:constant name='from' value='von'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='hole'/>
<cd:constant name='global' value='global'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='gritter'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='haengend'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='rumpfabstand'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='ibefehl'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='zwischen'/>
<cd:constant name='increment' value='erhoehen'/>
<cd:constant name='incrementnumber' value='nummererhoehen'/>
<cd:constant name='indenting' value='einziehen'/>
<cd:constant name='indentnext' value='ziehefolgendeein'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indikator'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='innen'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaktion'/>
<cd:constant name='interlinespace' value='zeilenabstande'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='posten'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='label'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='letzteseite'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='links'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='linkersubsatz'/>
<cd:constant name='lefttext' value='linkertext'/>
<cd:constant name='leftwidth' value='linkerbreite'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='niveau'/>
<cd:constant name='levels' value='niveaus'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nunten'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='folgende'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nlinks'/>
<cd:constant name='nlines' value='zzeile'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='nrechts'/>
<cd:constant name='ntop' value='noben'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='oeffenaktion'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='openpageaction'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='option'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='seitenfarbe'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='seitenbefehl'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='seitennummer'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='palette'/>
<cd:constant name='paper' value='papier'/>
<cd:constant name='paragraph' value='absatz'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='platziere'/>
<cd:constant name='placehead' value='setzekopf'/>
<cd:constant name='placestopper' value='setzetrenner'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='druckbar'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='radius'/>
<cd:constant name='random' value='zufaellig'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='referenz'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referieren'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='regionin'/>
<cd:constant name='regionout' value='regionaus'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='wiederholen'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnumber'/>
<cd:constant name='resolution' value='aufloesung'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='reverse'/>
<cd:constant name='right' value='rechts'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='rechterfarbe'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='rechtekante'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='rechtersubsatz'/>
<cd:constant name='righttext' value='rechtertext'/>
<cd:constant name='rightwidth' value='rechterbreite'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotation'/>
<cd:constant name='rule' value='linie'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='bereich'/>
<cd:constant name='screen' value='raster'/>
<cd:constant name='section' value='abschnitt'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='abschnittsnummer'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='vorspatium'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='spatiumausgleich'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='split'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symausrichtung'/>
<cd:constant name='symbol' value='symbol'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='symbolset'/>
<cd:constant name='symcolor' value='symfarbe'/>
<cd:constant name='symstyle' value='symstil'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='synonymstil'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='text'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='textfarbe'/>
<cd:constant name='textcommand' value='textbefehl'/>
<cd:constant name='textdistance' value='textdistance'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='kopfspatium'/>
<cd:constant name='topstate' value='statusoben'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='typ'/>
<cd:constant name='unit' value='einheit'/>
<cd:constant name='unknownreference' value='unbekantereferenz'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlalternative'/>
<cd:constant name='urlspace' value='urlspatium'/>
<cd:constant name='validate' value='validieren'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='kopfoffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='art'/>
<cd:constant name='wfactor' value='bfaktor'/>
<cd:constant name='white' value='weiss'/>
<cd:constant name='width' value='breite'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfaktor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xformat'/>
<cd:constant name='xstep' value='xschritt'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yformat'/>
<cd:constant name='ystep' value='yschritt'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language de -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stop'/>
<cd:element name='text' value='text'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language de -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='schreibezurliste'/>
<cd:command name='writetoreferencelist' value='schreibezurreferenzliste'/>
<cd:command name='writetoregister' value='schreibezumregister'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-en.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml
index 0e51dfc7c97..c22ee282067 100644
--- a/Master/texmf-dist/tex/context/interface/keys-en.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Addition'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Balloon'/>
<cd:variable name='Cap' value='Cap'/>
<cd:variable name='Capital' value='Capital'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='NextPage'/>
<cd:variable name='Numbers' value='Numbers'/>
<cd:variable name='OpenNamedDocument' value='OpenNamedDocument'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Paragraph'/>
<cd:variable name='PauseMovie' value='PauseMovie'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='action'/>
<cd:variable name='after' value='after'/>
<cd:variable name='all' value='all'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='always'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='appendices'/>
<cd:variable name='appendix' value='appendix'/>
<cd:variable name='april' value='april'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='atmargin'/>
<cd:variable name='atpage' value='atpage'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='august'/>
<cd:variable name='author' value='author'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='back'/>
<cd:variable name='background' value='background'/>
<cd:variable name='backmatter' value='backmatter'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='bigpreference'/>
<cd:variable name='blank' value='blank'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='bodymatter'/>
<cd:variable name='bodypart' value='bodypart'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='boldslanted'/>
<cd:variable name='bookmark' value='bookmark'/>
<cd:variable name='both' value='both'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='bottom'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='broad'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='by'/>
<cd:variable name='calligraphic' value='calligraphic'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='cap'/>
<cd:variable name='capital' value='capital'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='chapter'/>
<cd:variable name='character' value='character'/>
<cd:variable name='characters' value='characters'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='color'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='columns'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='command'/>
<cd:variable name='commands' value='commands'/>
<cd:variable name='comment' value='comment'/>
<cd:variable name='component' value='component'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='concept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='content'/>
<cd:variable name='contents' value='contents'/>
<cd:variable name='continue' value='continue'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='conversion'/>
<cd:variable name='current' value='current'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='date'/>
<cd:variable name='day' value='day'/>
<cd:variable name='december' value='december'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='each'/>
<cd:variable name='edge' value='edge'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='empty'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='even'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='external'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fact'/>
<cd:variable name='february' value='february'/>
<cd:variable name='figure' value='figure'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='friday'/>
<cd:variable name='frontmatter' value='frontmatter'/>
<cd:variable name='frontpart' value='frontpart'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='global'/>
<cd:variable name='graphic' value='graphic'/>
<cd:variable name='graphics' value='graphics'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indices'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='inherit'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='inleft'/>
+ <cd:variable name='inleftedge' value='inleftedge'/>
+ <cd:variable name='inleftmargin' value='inleftmargin'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='inmargin'/>
<cd:variable name='inner' value='inner'/>
<cd:variable name='inneredge' value='inneredge'/>
<cd:variable name='innermargin' value='innermargin'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='inright'/>
+ <cd:variable name='inrightedge' value='inrightedge'/>
+ <cd:variable name='inrightmargin' value='inrightmargin'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interaction'/>
<cd:variable name='interactionmenu' value='interactionmenu'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='intext'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='july'/>
<cd:variable name='june' value='june'/>
<cd:variable name='keep' value='keep'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='label'/>
<cd:variable name='landscape' value='landscape'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legend'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='line'/>
<cd:variable name='linenote' value='linenote'/>
<cd:variable name='lines' value='lines'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='logos'/>
<cd:variable name='lohi' value='lohi'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='loose'/>
<cd:variable name='low' value='low'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='march'/>
<cd:variable name='margin' value='margin'/>
<cd:variable name='marginedge' value='marginedge'/>
+ <cd:variable name='margintext' value='margintext'/>
<cd:variable name='margintitle' value='margintitle'/>
<cd:variable name='marking' value='marking'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='minheight'/>
<cd:variable name='minwidth' value='minwidth'/>
<cd:variable name='mirrored' value='mirrored'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='monday'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monobold'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='month'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='nextoddpage'/>
<cd:variable name='nextpage' value='nextpage'/>
<cd:variable name='nextsubpage' value='nextsubpage'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='no'/>
<cd:variable name='nocheck' value='nocheck'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='nomarking'/>
<cd:variable name='none' value='none'/>
<cd:variable name='nonumber' value='nonumber'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normal'/>
<cd:variable name='nospacing' value='nospacing'/>
<cd:variable name='not' value='not'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='off'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='on'/>
<cd:variable name='one' value='one'/>
<cd:variable name='opposite' value='opposite'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='outer'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='samepage'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansbold'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='sansserif'/>
<cd:variable name='saturday' value='saturday'/>
<cd:variable name='screen' value='screen'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='september'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='singlesided'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='slanted'/>
<cd:variable name='slantedbold' value='slantedbold'/>
<cd:variable name='small' value='small'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='smalltype'/>
<cd:variable name='somewhere' value='somewhere'/>
<cd:variable name='sorted' value='sorted'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='space'/>
<cd:variable name='spacing' value='spacing'/>
<cd:variable name='speech' value='speech'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='stopper'/>
<cd:variable name='stretch' value='stretch'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='strict'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='symbol'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='system'/>
<cd:variable name='table' value='table'/>
<cd:variable name='tablehead' value='tablehead'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='underbars'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='unit'/>
<cd:variable name='units' value='units'/>
<cd:variable name='unknown' value='unknown'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='very'/>
<cd:variable name='verystrict' value='verystrict'/>
<cd:variable name='verytolerant' value='verytolerant'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='wednesday'/>
<cd:variable name='week' value='week'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='wide'/>
<cd:variable name='width' value='width'/>
<cd:variable name='word' value='word'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='year'/>
<cd:variable name='yes' value='yes'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language en -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='at'/>
<cd:constant name='author' value='author'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='big'/>
<cd:constant name='blank' value='blank'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blockway'/>
<cd:constant name='bodyfont' value='bodyfont'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='calculate'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='ccommand'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='click'/>
<cd:constant name='clickin' value='clickin'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='column'/>
<cd:constant name='columndistance' value='columndistance'/>
<cd:constant name='columns' value='columns'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='command'/>
<cd:constant name='commandafter' value='commandafter'/>
<cd:constant name='commandbefore' value='commandbefore'/>
<cd:constant name='commands' value='commands'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='continue'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='coupling'/>
<cd:constant name='couplingway' value='couplingway'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='current'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='date'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='directory'/>
<cd:constant name='display' value='display'/>
<cd:constant name='distance' value='distance'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='dot'/>
<cd:constant name='doublesided' value='doublesided'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='evenmargin'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='family'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='fieldbackgroundcolor'/>
<cd:constant name='fieldframecolor' value='fieldframecolor'/>
<cd:constant name='fieldlayer' value='fieldlayer'/>
<cd:constant name='fieldoffset' value='fieldoffset'/>
<cd:constant name='file' value='file'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='firstpage'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='footer'/>
<cd:constant name='footerdistance' value='footerdistance'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='foregroundcolor'/>
<cd:constant name='foregroundstyle' value='foregroundstyle'/>
<cd:constant name='format' value='format'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='frame'/>
<cd:constant name='framecolor' value='framecolor'/>
<cd:constant name='framecorner' value='framecorner'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='frameradius'/>
<cd:constant name='frames' value='frames'/>
<cd:constant name='from' value='from'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='get'/>
<cd:constant name='global' value='global'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='grid'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='hang'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='horoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='icommand'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='inbetween'/>
<cd:constant name='increment' value='increment'/>
<cd:constant name='incrementnumber' value='incrementnumber'/>
<cd:constant name='indenting' value='indenting'/>
<cd:constant name='indentnext' value='indentnext'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indicator'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='inner'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaction'/>
<cd:constant name='interlinespace' value='interlinespace'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='items'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='label'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='lastpage'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='left'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='leftsubsentence'/>
<cd:constant name='lefttext' value='lefttext'/>
<cd:constant name='leftwidth' value='leftwidth'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='level'/>
<cd:constant name='levels' value='levels'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nbottom'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='next'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nleft'/>
<cd:constant name='nlines' value='nlines'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='nright'/>
<cd:constant name='ntop' value='ntop'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='openaction'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='openpageaction'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='option'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='pagecolor'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='pagecommand'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='pagenumber'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='palet'/>
<cd:constant name='paper' value='paper'/>
<cd:constant name='paragraph' value='paragraph'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='place'/>
<cd:constant name='placehead' value='placehead'/>
<cd:constant name='placestopper' value='placestopper'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='printable'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='radius'/>
<cd:constant name='random' value='random'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='reference'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='regionin'/>
<cd:constant name='regionout' value='regionout'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='repeat'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnumber'/>
<cd:constant name='resolution' value='resolution'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='reverse'/>
<cd:constant name='right' value='right'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='rightcolor'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='rightedge'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='rightsubsentence'/>
<cd:constant name='righttext' value='righttext'/>
<cd:constant name='rightwidth' value='rightwidth'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotation'/>
<cd:constant name='rule' value='rule'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='scope'/>
<cd:constant name='screen' value='screen'/>
<cd:constant name='section' value='section'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='sectionnumber'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='spacebefore'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='spacing'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='split'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symalign'/>
<cd:constant name='symbol' value='symbol'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='symbolset'/>
<cd:constant name='symcolor' value='symcolor'/>
<cd:constant name='symstyle' value='symstyle'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='synonymstyle'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='text'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='textcolor'/>
<cd:constant name='textcommand' value='textcommand'/>
<cd:constant name='textdistance' value='textdistance'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='topspace'/>
<cd:constant name='topstate' value='topstate'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unit'/>
<cd:constant name='unknownreference' value='unknownreference'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlalternative'/>
<cd:constant name='urlspace' value='urlspace'/>
<cd:constant name='validate' value='validate'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='way'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='white'/>
<cd:constant name='width' value='width'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
<cd:constant name='xstep' value='xstep'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yscale'/>
<cd:constant name='ystep' value='ystep'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language en -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stop'/>
<cd:element name='text' value='text'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language en -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='writetolist'/>
<cd:command name='writetoreferencelist' value='writetoreferencelist'/>
<cd:command name='writetoregister' value='writetoregister'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-fr.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml
index cd35ad7e19d..b03d55d6d2a 100644
--- a/Master/texmf-dist/tex/context/interface/keys-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Ajout'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Ballon'/>
<cd:variable name='Cap' value='Cap'/>
<cd:variable name='Capital' value='Capitale'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='PageSuivante'/>
<cd:variable name='Numbers' value='Numeros'/>
<cd:variable name='OpenNamedDocument' value='OuvreDocumentNomme'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Paragraphe'/>
<cd:variable name='PauseMovie' value='PauseFilm'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='action'/>
<cd:variable name='after' value='apres'/>
<cd:variable name='all' value='tout'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='toujours'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='annexes'/>
<cd:variable name='appendix' value='annexe'/>
<cd:variable name='april' value='avril'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='alamarge'/>
<cd:variable name='atpage' value='alapage'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='août'/>
<cd:variable name='author' value='auteur'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='retour'/>
<cd:variable name='background' value='arriereplan'/>
<cd:variable name='backmatter' value='epilogue'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='grandepreference'/>
<cd:variable name='blank' value='vide'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='texteprincipal'/>
<cd:variable name='bodypart' value='corpsdetexte'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='inclinegras'/>
<cd:variable name='bookmark' value='marquepage'/>
<cd:variable name='both' value='lesdeux'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='inf'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='large'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='par'/>
<cd:variable name='calligraphic' value='calligraphique'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='cap'/>
<cd:variable name='capital' value='capitale'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='chapitre'/>
<cd:variable name='character' value='caractere'/>
<cd:variable name='characters' value='caracteres'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='couleur'/>
<cd:variable name='column' value='colonne'/>
<cd:variable name='columns' value='colonnes'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='commande'/>
<cd:variable name='commands' value='commandes'/>
<cd:variable name='comment' value='commentaire'/>
<cd:variable name='component' value='composant'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='concept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='contenu'/>
<cd:variable name='contents' value='contenus'/>
<cd:variable name='continue' value='continue'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='conversion'/>
<cd:variable name='current' value='courant'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='date'/>
<cd:variable name='day' value='jour'/>
<cd:variable name='december' value='decembre'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='chaque'/>
<cd:variable name='edge' value='bord'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='vide'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='paire'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='external'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fait'/>
<cd:variable name='february' value='fevrier'/>
<cd:variable name='figure' value='figure'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='vendredi'/>
<cd:variable name='frontmatter' value='preambule'/>
<cd:variable name='frontpart' value='preface'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='global'/>
<cd:variable name='graphic' value='graphique'/>
<cd:variable name='graphics' value='graphiques'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indices'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='herite'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='dansgauche'/>
+ <cd:variable name='inleftedge' value='dansbordgauche'/>
+ <cd:variable name='inleftmargin' value='dansmargegauche'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='dansmarge'/>
<cd:variable name='inner' value='interieur'/>
<cd:variable name='inneredge' value='bordinterieur'/>
<cd:variable name='innermargin' value='margeinterieure'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='dansdroit'/>
+ <cd:variable name='inrightedge' value='dansborddroit'/>
+ <cd:variable name='inrightmargin' value='dansmargedroite'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interaction'/>
<cd:variable name='interactionmenu' value='menuinteraction'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='danstexte'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='juillet'/>
<cd:variable name='june' value='juin'/>
<cd:variable name='keep' value='maintient'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='etiquette'/>
<cd:variable name='landscape' value='paysage'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legende'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='ligne'/>
<cd:variable name='linenote' value='noteligne'/>
<cd:variable name='lines' value='lignes'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='logos'/>
<cd:variable name='lohi' value='baha'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='perte'/>
<cd:variable name='low' value='bas'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='mars'/>
<cd:variable name='margin' value='marge'/>
<cd:variable name='marginedge' value='bordmarge'/>
+ <cd:variable name='margintext' value='textemarge'/>
<cd:variable name='margintitle' value='titremarge'/>
<cd:variable name='marking' value='marquage'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='hauteurmin'/>
<cd:variable name='minwidth' value='largeurmin'/>
<cd:variable name='mirrored' value='reflete'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='lundi'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monogras'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='mois'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='pageimpairesuivante'/>
<cd:variable name='nextpage' value='pagesuivante'/>
<cd:variable name='nextsubpage' value='souspagesuivante'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='non'/>
<cd:variable name='nocheck' value='nonverifie'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='sansmarquage'/>
<cd:variable name='none' value='rien'/>
<cd:variable name='nonumber' value='sansnumero'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normal'/>
<cd:variable name='nospacing' value='sansespacement'/>
<cd:variable name='not' value='pas'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nonsuspendu'/>
<cd:variable name='nothyphenated' value='nothyphenated'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='desactive'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='actif'/>
<cd:variable name='one' value='un'/>
<cd:variable name='opposite' value='opposition'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='exterieur'/>
<cd:variable name='outeredge' value='bordexterieur'/>
<cd:variable name='outermargin' value='margeexterieure'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='memepage'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansgras'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='sansserif'/>
<cd:variable name='saturday' value='samedi'/>
<cd:variable name='screen' value='ecran'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='septembre'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='recto'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='incline'/>
<cd:variable name='slantedbold' value='grasincline'/>
<cd:variable name='small' value='petit'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='petittype'/>
<cd:variable name='somewhere' value='qqpart'/>
<cd:variable name='sorted' value='trie'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='espace'/>
<cd:variable name='spacing' value='espacement'/>
<cd:variable name='speech' value='discours'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stoppe'/>
<cd:variable name='stopper' value='stopper'/>
<cd:variable name='stretch' value='etire'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='strict'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='symbole'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='systeme'/>
<cd:variable name='table' value='tableau'/>
<cd:variable name='tablehead' value='tetetableau'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='sousligne'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='unite'/>
<cd:variable name='units' value='unites'/>
<cd:variable name='unknown' value='inconnu'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='tres'/>
<cd:variable name='verystrict' value='tresstrict'/>
<cd:variable name='verytolerant' value='trestolerant'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='mercredi'/>
<cd:variable name='week' value='semaine'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='ample'/>
<cd:variable name='width' value='largeur'/>
<cd:variable name='word' value='mot'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='annee'/>
<cd:variable name='yes' value='oui'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language fr -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='a'/>
<cd:constant name='author' value='auteur'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='grand'/>
<cd:constant name='blank' value='vide'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blockway'/>
<cd:constant name='bodyfont' value='policecorps'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='calculer'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='ccommande'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='clic'/>
<cd:constant name='clickin' value='clicinterieur'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='colonne'/>
<cd:constant name='columndistance' value='distancecolonne'/>
<cd:constant name='columns' value='colonnes'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='commande'/>
<cd:constant name='commandafter' value='commandeapres'/>
<cd:constant name='commandbefore' value='commandeavant'/>
<cd:constant name='commands' value='commandes'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='composant'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='continue'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='couplage'/>
<cd:constant name='couplingway' value='modecouplage'/>
<cd:constant name='criterium' value='critere'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='courant'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pointille'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='date'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='repertoire'/>
<cd:constant name='display' value='affichage'/>
<cd:constant name='distance' value='distance'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='point'/>
<cd:constant name='doublesided' value='rectoverso'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='margepaire'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansion'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='famille'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='couleurarrierreplanchamp'/>
<cd:constant name='fieldframecolor' value='couleurcadrechamp'/>
<cd:constant name='fieldlayer' value='calquechamp'/>
<cd:constant name='fieldoffset' value='offsetchamp'/>
<cd:constant name='file' value='fichier'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='premierepage'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='pdp'/>
<cd:constant name='footerdistance' value='dsitancepdp'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='couleurpremierplan'/>
<cd:constant name='foregroundstyle' value='stylepremierplan'/>
<cd:constant name='format' value='formatter'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='cadre'/>
<cd:constant name='framecolor' value='couleurcadre'/>
<cd:constant name='framecorner' value='coincadre'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='rayoncadre'/>
<cd:constant name='frames' value='cadres'/>
<cd:constant name='from' value='de'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='obtient'/>
<cd:constant name='global' value='global'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='grille'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='suspend'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='decalagehauteur'/>
<cd:constant name='horoffset' value='horoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='icommande'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='entre'/>
<cd:constant name='increment' value='incremente'/>
<cd:constant name='incrementnumber' value='incrementenumero'/>
<cd:constant name='indenting' value='composeenalinea'/>
<cd:constant name='indentnext' value='indentesuivant'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indicateur'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='interieur'/>
<cd:constant name='innermargin' value='margeinterieure'/>
<cd:constant name='inputfile' value='fichierentree'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaction'/>
<cd:constant name='interlinespace' value='espaceinterligne'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elements'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='motcle'/>
<cd:constant name='label' value='etiquette'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='dernierepage'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='gauche'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='sousphrasegauche'/>
<cd:constant name='lefttext' value='textegauche'/>
<cd:constant name='leftwidth' value='largeurgauche'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='niveau'/>
<cd:constant name='levels' value='niveaux'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='ninf'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='suivant'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='ngauche'/>
<cd:constant name='nlines' value='nlignes'/>
<cd:constant name='norm' value='norme'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='ndroite'/>
<cd:constant name='ntop' value='nsup'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='actionouverture'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='actionouverturepage'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='option'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='couleurpage'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='commandepage'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='numeropage'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='palette'/>
<cd:constant name='paper' value='papier'/>
<cd:constant name='paragraph' value='paragraphe'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='place'/>
<cd:constant name='placehead' value='placetete'/>
<cd:constant name='placestopper' value='emplacementstopper'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='editable'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='rayon'/>
<cd:constant name='random' value='aleatoire'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='reference'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='entreregion'/>
<cd:constant name='regionout' value='regionexterieure'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='repete'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='raznumero'/>
<cd:constant name='resolution' value='resolution'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='inverse'/>
<cd:constant name='right' value='droite'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='couleurdroite'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='borddroit'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='sousphrasedroite'/>
<cd:constant name='righttext' value='textedroit'/>
<cd:constant name='rightwidth' value='largeurdroite'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotation'/>
<cd:constant name='rule' value='ligne'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='scope'/>
<cd:constant name='screen' value='ecran'/>
<cd:constant name='section' value='section'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='numerosection'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='espaceavant'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='espacement'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='split'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symalignement'/>
<cd:constant name='symbol' value='symbole'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='jeusymbole'/>
<cd:constant name='symcolor' value='couleursym'/>
<cd:constant name='symstyle' value='stylesym'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='stylesynonyme'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='texte'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='couleurtexte'/>
<cd:constant name='textcommand' value='commandetexte'/>
<cd:constant name='textdistance' value='distancetexte'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='espacesup'/>
<cd:constant name='topstate' value='etatsup'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unite'/>
<cd:constant name='unknownreference' value='referenceinconnue'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='alternativeurl'/>
<cd:constant name='urlspace' value='espaceurl'/>
<cd:constant name='validate' value='valider'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='mode'/>
<cd:constant name='wfactor' value='facteurlargeur'/>
<cd:constant name='white' value='blanc'/>
<cd:constant name='width' value='largeur'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
<cd:constant name='xstep' value='xstep'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yscale'/>
<cd:constant name='ystep' value='ystep'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language fr -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stoppe'/>
<cd:element name='text' value='texte'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language fr -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='ecritdansliste'/>
<cd:command name='writetoreferencelist' value='ecritdanslistereference'/>
<cd:command name='writetoregister' value='ecritregistre'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-it.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml
index f07dbb5e6f1..622e73f4ad9 100644
--- a/Master/texmf-dist/tex/context/interface/keys-it.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Aggiunta'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Pallone'/>
<cd:variable name='Cap' value='Cap'/>
<cd:variable name='Capital' value='Maiuscolo'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='PaginaSuccessiva'/>
<cd:variable name='Numbers' value='Numeri'/>
<cd:variable name='OpenNamedDocument' value='OpenNamedDocument'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Capoverso'/>
<cd:variable name='PauseMovie' value='PausaFilm'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='azione'/>
<cd:variable name='after' value='dopo'/>
<cd:variable name='all' value='tutti'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='sempre'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='appendici'/>
<cd:variable name='appendix' value='appendice'/>
<cd:variable name='april' value='aprile'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='almargine'/>
<cd:variable name='atpage' value='apagina'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='agosto'/>
<cd:variable name='author' value='autore'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='dietro'/>
<cd:variable name='background' value='sfondo'/>
<cd:variable name='backmatter' value='postambolo'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='grandepreferenza'/>
<cd:variable name='blank' value='rigovuoto'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='testiprincipali'/>
<cd:variable name='bodypart' value='testoprincipale'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='grassettoinclinato'/>
<cd:variable name='bookmark' value='segnalibro'/>
<cd:variable name='both' value='entrambi'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='fondo'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='ampio'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='da'/>
<cd:variable name='calligraphic' value='calligrafico'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='cap'/>
<cd:variable name='capital' value='maiuscolo'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='capitolo'/>
<cd:variable name='character' value='lettera'/>
<cd:variable name='characters' value='lettere'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='colore'/>
<cd:variable name='column' value='colonna'/>
<cd:variable name='columns' value='colonne'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='comando'/>
<cd:variable name='commands' value='comandi'/>
<cd:variable name='comment' value='commento'/>
<cd:variable name='component' value='componente'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='concetto'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='indice'/>
<cd:variable name='contents' value='indici'/>
<cd:variable name='continue' value='continua'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='coversione'/>
<cd:variable name='current' value='corrente'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='data'/>
<cd:variable name='day' value='giorno'/>
<cd:variable name='december' value='dicembre'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='ogni'/>
<cd:variable name='edge' value='bordo'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='vuoto'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='pari'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='esterno'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fatto'/>
<cd:variable name='february' value='febbraio'/>
<cd:variable name='figure' value='figura'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='venerdi'/>
<cd:variable name='frontmatter' value='preambolo'/>
<cd:variable name='frontpart' value='prefazione'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='globale'/>
<cd:variable name='graphic' value='grafico'/>
<cd:variable name='graphics' value='grafici'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indicianalitici'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='inherit'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='insinistra'/>
+ <cd:variable name='inleftedge' value='inlatosinistro'/>
+ <cd:variable name='inleftmargin' value='inmarginesinistro'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='inmargine'/>
<cd:variable name='inner' value='interno'/>
<cd:variable name='inneredge' value='bordointerno'/>
<cd:variable name='innermargin' value='margineinterno'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='indestra'/>
+ <cd:variable name='inrightedge' value='inlatodestro'/>
+ <cd:variable name='inrightmargin' value='inmarginedestro'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interazione'/>
<cd:variable name='interactionmenu' value='menuinterattivo'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='intesto'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='luglio'/>
<cd:variable name='june' value='giugno'/>
<cd:variable name='keep' value='mantieni'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='etichetta'/>
<cd:variable name='landscape' value='orizzontale'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legenda'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='riga'/>
<cd:variable name='linenote' value='linenote'/>
<cd:variable name='lines' value='righe'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='loghi'/>
<cd:variable name='lohi' value='pedap'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='lento'/>
<cd:variable name='low' value='basso'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='marzo'/>
<cd:variable name='margin' value='margine'/>
<cd:variable name='marginedge' value='bordomargine'/>
+ <cd:variable name='margintext' value='testoinmargine'/>
<cd:variable name='margintitle' value='titoloinmargine'/>
<cd:variable name='marking' value='marcatura'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='altezzamin'/>
<cd:variable name='minwidth' value='ampiezzamin'/>
<cd:variable name='mirrored' value='riflesso'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='lunedi'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monograssetto'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='mese'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='paginadisparisuccessiva'/>
<cd:variable name='nextpage' value='paginasuccessiva'/>
<cd:variable name='nextsubpage' value='sottopaginasuccessiva'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='no'/>
<cd:variable name='nocheck' value='nocheck'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='nomarcature'/>
<cd:variable name='none' value='nessuno'/>
<cd:variable name='nonumber' value='nonumber'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normale'/>
<cd:variable name='nospacing' value='nospacing'/>
<cd:variable name='not' value='non'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nonsospeso'/>
<cd:variable name='nothyphenated' value='nonsillabato'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='disattivo'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='attivo'/>
<cd:variable name='one' value='uno'/>
<cd:variable name='opposite' value='opposto'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='esterno'/>
<cd:variable name='outeredge' value='bordoesterno'/>
<cd:variable name='outermargin' value='margineesterno'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='stessapagina'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansgrassetto'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='sansserif'/>
<cd:variable name='saturday' value='sabato'/>
<cd:variable name='screen' value='schermo'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='settembre'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='vicino'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='facciasingola'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='inclinato'/>
<cd:variable name='slantedbold' value='inclinatograssetto'/>
<cd:variable name='small' value='piccolo'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='piccolotype'/>
<cd:variable name='somewhere' value='daqualcheparte'/>
<cd:variable name='sorted' value='ordinato'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='spazio'/>
<cd:variable name='spacing' value='spaziatura'/>
<cd:variable name='speech' value='speech'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='termina'/>
<cd:variable name='stopper' value='stopper'/>
<cd:variable name='stretch' value='dilata'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='rigido'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sim'/>
<cd:variable name='symbol' value='simbolo'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='sistema'/>
<cd:variable name='table' value='tabella'/>
<cd:variable name='tablehead' value='testatabella'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='sottolinee'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='unita'/>
<cd:variable name='units' value='unita'/>
<cd:variable name='unknown' value='ignoto'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='molto'/>
<cd:variable name='verystrict' value='moltorigido'/>
<cd:variable name='verytolerant' value='moltotollerante'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='mercoledi'/>
<cd:variable name='week' value='settimana'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='ampio'/>
<cd:variable name='width' value='ampiezza'/>
<cd:variable name='word' value='parola'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='anno'/>
<cd:variable name='yes' value='si'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language it -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='ad'/>
<cd:constant name='author' value='autore'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='grande'/>
<cd:constant name='blank' value='rigovuoto'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blockway'/>
<cd:constant name='bodyfont' value='fonttesto'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='calcola'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='ccomando'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='click'/>
<cd:constant name='clickin' value='clickdentro'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='colonna'/>
<cd:constant name='columndistance' value='distanzacolonne'/>
<cd:constant name='columns' value='colonne'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='comando'/>
<cd:constant name='commandafter' value='comdandodopo'/>
<cd:constant name='commandbefore' value='comandoprima'/>
<cd:constant name='commands' value='comandi'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='continua'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='accoppiamento'/>
<cd:constant name='couplingway' value='modoaccoppiamento'/>
<cd:constant name='criterium' value='criterio'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='corrente'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='data'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='directory'/>
<cd:constant name='display' value='display'/>
<cd:constant name='distance' value='distanza'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='punto'/>
<cd:constant name='doublesided' value='doppiafaccia'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='marginepari'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='espansione'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='famiglia'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='coloresfondocampo'/>
<cd:constant name='fieldframecolor' value='colorecornicecampo'/>
<cd:constant name='fieldlayer' value='fieldlayer'/>
<cd:constant name='fieldoffset' value='offsetcampo'/>
<cd:constant name='file' value='file'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='primapagina'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='piedipagina'/>
<cd:constant name='footerdistance' value='distanzapdp'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='coloreprimopiano'/>
<cd:constant name='foregroundstyle' value='foregroundstyle'/>
<cd:constant name='format' value='format'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='cornice'/>
<cd:constant name='framecolor' value='colorecornice'/>
<cd:constant name='framecorner' value='angolocornice'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='raggiocornice'/>
<cd:constant name='frames' value='cornici'/>
<cd:constant name='from' value='da'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='prendi'/>
<cd:constant name='global' value='globale'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='griglia'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='sospendi'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='horoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='icomando'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='tra'/>
<cd:constant name='increment' value='incremento'/>
<cd:constant name='incrementnumber' value='incrementanumero'/>
<cd:constant name='indenting' value='rientro'/>
<cd:constant name='indentnext' value='rientrasuccessivo'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indicatore'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='interno'/>
<cd:constant name='innermargin' value='margineinterno'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interazione'/>
<cd:constant name='interlinespace' value='interlinea'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elementi'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='parolachiave'/>
<cd:constant name='label' value='etichetta'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='ultimapagina'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='sinistra'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='sottofrasesinistra'/>
<cd:constant name='lefttext' value='testosinistro'/>
<cd:constant name='leftwidth' value='ampiezzasinistra'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='livello'/>
<cd:constant name='levels' value='livelli'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nfondo'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='successivo'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nsinistra'/>
<cd:constant name='nlines' value='nrighe'/>
<cd:constant name='norm' value='norma'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='ndestra'/>
<cd:constant name='ntop' value='ncima'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='azioneapri'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='azioneapripagina'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='opzione'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='colorepagina'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='comandopagina'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='numeropagina'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='tavolozza'/>
<cd:constant name='paper' value='carta'/>
<cd:constant name='paragraph' value='capoverso'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='metti'/>
<cd:constant name='placehead' value='mettitesta'/>
<cd:constant name='placestopper' value='mettistopper'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='stampabile'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='raggio'/>
<cd:constant name='random' value='casuale'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='riferimento'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='entraregione'/>
<cd:constant name='regionout' value='esciregione'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='ripeti'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnumber'/>
<cd:constant name='resolution' value='risoluzione'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='invertito'/>
<cd:constant name='right' value='destra'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='coloredestra'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='bordodestro'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='sottofrasedestra'/>
<cd:constant name='righttext' value='testodestro'/>
<cd:constant name='rightwidth' value='ampiezzadestra'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotazione'/>
<cd:constant name='rule' value='linea'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='scope'/>
<cd:constant name='screen' value='schermo'/>
<cd:constant name='section' value='sezione'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='numerosezione'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='spazioprima'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='spaziatura'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='separa'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symallinea'/>
<cd:constant name='symbol' value='simbolo'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='setsimboli'/>
<cd:constant name='symcolor' value='coloresimbolo'/>
<cd:constant name='symstyle' value='stilesimbolo'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='stilesinonimi'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='testo'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='coloretesto'/>
<cd:constant name='textcommand' value='comandotesto'/>
<cd:constant name='textdistance' value='distanzatesto'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='spaziocima'/>
<cd:constant name='topstate' value='statocima'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unita'/>
<cd:constant name='unknownreference' value='riferimentoingoto'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='alternativaurl'/>
<cd:constant name='urlspace' value='spaziourl'/>
<cd:constant name='validate' value='verifica'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='modo'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='bianco'/>
<cd:constant name='width' value='ampiezza'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
<cd:constant name='xstep' value='xstep'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yscale'/>
<cd:constant name='ystep' value='ystep'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language it -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='termina'/>
<cd:element name='text' value='testo'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language it -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='scriviinelenco'/>
<cd:command name='writetoreferencelist' value='scriviinlistariferimenti'/>
<cd:command name='writetoregister' value='scriviinregistro'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-nl.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml
index f32d79275c2..21040d080e5 100644
--- a/Master/texmf-dist/tex/context/interface/keys-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Toevoeging'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Ballon'/>
<cd:variable name='Cap' value='Kap'/>
<cd:variable name='Capital' value='Kapitaal'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='VolgendePagina'/>
<cd:variable name='Numbers' value='Cijfers'/>
<cd:variable name='OpenNamedDocument' value='OpenDocumentOpNaam'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Paragraaf'/>
<cd:variable name='PauseMovie' value='PauzeerFilm'/>
<cd:variable name='PauseRendering' value='PauzeerRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='actie'/>
<cd:variable name='after' value='na'/>
<cd:variable name='all' value='alles'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='altijd'/>
<cd:variable name='and' value='en'/>
<cd:variable name='answerarea' value='antwoordgebied'/>
<cd:variable name='appendices' value='bijlagen'/>
<cd:variable name='appendix' value='bijlage'/>
<cd:variable name='april' value='april'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='oplinkermarge'/>
<cd:variable name='atmargin' value='opmarge'/>
<cd:variable name='atpage' value='oppagina'/>
+ <cd:variable name='atrightmargin' value='oprechtermarge'/>
<cd:variable name='attachment' value='aanhangsel'/>
<cd:variable name='august' value='augustus'/>
<cd:variable name='author' value='auteur'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='terug'/>
<cd:variable name='background' value='achtergrond'/>
<cd:variable name='backmatter' value='uitleidingen'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='groter'/>
<cd:variable name='bigpreference' value='grotevoorkeur'/>
<cd:variable name='blank' value='blanko'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blokcitaat'/>
<cd:variable name='bodymatter' value='hoofdteksten'/>
<cd:variable name='bodypart' value='hoofdtekst'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='vetschuin'/>
<cd:variable name='bookmark' value='bookmark'/>
<cd:variable name='both' value='beide'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='onder'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='ruim'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='per'/>
<cd:variable name='calligraphic' value='calligrafie'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='kap'/>
<cd:variable name='capital' value='kapitaal'/>
<cd:variable name='center' value='centreer'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='hoofdstuk'/>
<cd:variable name='character' value='letter'/>
<cd:variable name='characters' value='letters'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemie'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='kleur'/>
<cd:variable name='column' value='kolom'/>
<cd:variable name='columns' value='kolommen'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='commando'/>
<cd:variable name='commands' value='commandos'/>
<cd:variable name='comment' value='commentaar'/>
<cd:variable name='component' value='onderdeel'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='concept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='inhoud'/>
<cd:variable name='contents' value='inhouden'/>
<cd:variable name='continue' value='verder'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='conversie'/>
<cd:variable name='current' value='huidige'/>
<cd:variable name='cutspace' value='snijwit'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='datum'/>
<cd:variable name='day' value='dag'/>
<cd:variable name='december' value='december'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='omlaag'/>
<cd:variable name='each' value='elk'/>
<cd:variable name='edge' value='rand'/>
+ <cd:variable name='eight' value='acht'/>
<cd:variable name='embed' value='sluitin'/>
<cd:variable name='empty' value='leeg'/>
<cd:variable name='end' value='eind'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='even'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='extern'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='gegeven'/>
<cd:variable name='february' value='februari'/>
<cd:variable name='figure' value='figuur'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='vrijdag'/>
<cd:variable name='frontmatter' value='inleidingen'/>
<cd:variable name='frontpart' value='inleiding'/>
+ <cd:variable name='fullhz' value='fullenhz'/>
<cd:variable name='global' value='globaal'/>
<cd:variable name='graphic' value='grafiek'/>
<cd:variable name='graphics' value='grafieken'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indices'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='erf'/>
+ <cd:variable name='ininner' value='inbinnen'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='inlinker'/>
+ <cd:variable name='inleftedge' value='inlinkerrand'/>
+ <cd:variable name='inleftmargin' value='inlinkermarge'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='inmarge'/>
<cd:variable name='inner' value='binnen'/>
<cd:variable name='inneredge' value='binnenrand'/>
<cd:variable name='innermargin' value='binnenmarge'/>
+ <cd:variable name='inother' value='inandere'/>
+ <cd:variable name='inouter' value='inbuiten'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='inrechter'/>
+ <cd:variable name='inrightedge' value='inrechterrand'/>
+ <cd:variable name='inrightmargin' value='inrechtermarge'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interactie'/>
<cd:variable name='interactionmenu' value='interactiemenu'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzos'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='intekst'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='juli'/>
<cd:variable name='june' value='juni'/>
<cd:variable name='keep' value='handhaaf'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='label'/>
<cd:variable name='landscape' value='liggend'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legenda'/>
<cd:variable name='less' value='minder'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='regel'/>
<cd:variable name='linenote' value='regelnoot'/>
<cd:variable name='lines' value='regels'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='logos'/>
<cd:variable name='lohi' value='laho'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='los'/>
<cd:variable name='low' value='laag'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='maart'/>
<cd:variable name='margin' value='marge'/>
<cd:variable name='marginedge' value='kantlijn'/>
+ <cd:variable name='margintext' value='margetekst'/>
<cd:variable name='margintitle' value='margetitel'/>
<cd:variable name='marking' value='markering'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='minhoogte'/>
<cd:variable name='minwidth' value='minbreedte'/>
<cd:variable name='mirrored' value='gespiegeld'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='maandag'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monovet'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='maand'/>
<cd:variable name='more' value='meer'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='volgendeonevenpagina'/>
<cd:variable name='nextpage' value='volgendepagina'/>
<cd:variable name='nextsubpage' value='volgendesubpagina'/>
+ <cd:variable name='nine' value='negen'/>
<cd:variable name='no' value='nee'/>
<cd:variable name='nocheck' value='geencontrole'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nietpassend'/>
<cd:variable name='nogrid' value='geengrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='geenhz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='geenmarkering'/>
<cd:variable name='none' value='geen'/>
<cd:variable name='nonumber' value='geennummer'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normaal'/>
<cd:variable name='nospacing' value='geenspatiering'/>
<cd:variable name='not' value='niet'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='niethangend'/>
<cd:variable name='nothyphenated' value='nietafgebroken'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='uit'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='oud'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='aan'/>
<cd:variable name='one' value='een'/>
<cd:variable name='opposite' value='naast'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='buiten'/>
<cd:variable name='outeredge' value='buitenrand'/>
<cd:variable name='outermargin' value='buitenmarge'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='zelfdepagina'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansvet'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='schreefloos'/>
<cd:variable name='saturday' value='zaterdag'/>
<cd:variable name='screen' value='raster'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='september'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='aanelkaar'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='zeven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='kort'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='enkelzijdig'/>
+ <cd:variable name='six' value='zes'/>
<cd:variable name='slanted' value='schuin'/>
<cd:variable name='slantedbold' value='schuinvet'/>
<cd:variable name='small' value='klein'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='kleintype'/>
<cd:variable name='somewhere' value='ergens'/>
<cd:variable name='sorted' value='gesorteerd'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='spatie'/>
<cd:variable name='spacing' value='spatiering'/>
<cd:variable name='speech' value='spraak'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='afsluiter'/>
<cd:variable name='stretch' value='rek'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='streng'/>
<cd:variable name='strong' value='sterk'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='symbool'/>
<cd:variable name='synchronize' value='synchroniseer'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='systeem'/>
<cd:variable name='table' value='tabel'/>
<cd:variable name='tablehead' value='tabelkop'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='onderstrepen'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='eenheid'/>
<cd:variable name='units' value='eenheden'/>
<cd:variable name='unknown' value='onbekend'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='zeer'/>
<cd:variable name='verystrict' value='zeerstreng'/>
<cd:variable name='verytolerant' value='zeersoepel'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='zwak'/>
<cd:variable name='wednesday' value='woensdag'/>
<cd:variable name='week' value='week'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='breed'/>
<cd:variable name='width' value='breedte'/>
<cd:variable name='word' value='woord'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='jaar'/>
<cd:variable name='yes' value='ja'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language nl -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='op'/>
<cd:constant name='author' value='auteur'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='groot'/>
<cd:constant name='blank' value='blanko'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blokwijze'/>
<cd:constant name='bodyfont' value='korps'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='bereken'/>
<cd:constant name='category' value='categorie'/>
<cd:constant name='ccommand' value='ccommando'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='klik'/>
<cd:constant name='clickin' value='klikin'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='kolom'/>
<cd:constant name='columndistance' value='kolomafstand'/>
<cd:constant name='columns' value='kolommen'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='commando'/>
<cd:constant name='commandafter' value='nacommando'/>
<cd:constant name='commandbefore' value='voorcommando'/>
<cd:constant name='commands' value='commandos'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='koppelteken'/>
<cd:constant name='compress' value='comprimeren'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='betreft'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='doorgaan'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='koppeling'/>
<cd:constant name='couplingway' value='koppelwijze'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='huidige'/>
<cd:constant name='cutspace' value='snijwit'/>
<cd:constant name='dash' value='streep'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='diepnummercommando'/>
<cd:constant name='deeptextcommand' value='dieptekstcommando'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='directory'/>
<cd:constant name='display' value='scherm'/>
<cd:constant name='distance' value='afstand'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='punt'/>
<cd:constant name='doublesided' value='dubbelzijdig'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='evenmarge'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansie'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='terugval'/>
<cd:constant name='family' value='soort'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='veldachtergrondkleur'/>
<cd:constant name='fieldframecolor' value='veldkaderkleur'/>
<cd:constant name='fieldlayer' value='veldlaag'/>
<cd:constant name='fieldoffset' value='veldoffset'/>
<cd:constant name='file' value='file'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='eerstepagina'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusuit'/>
<cd:constant name='footer' value='voet'/>
<cd:constant name='footerdistance' value='voetafstand'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='voorgrondkleur'/>
<cd:constant name='foregroundstyle' value='voorgrondletter'/>
<cd:constant name='format' value='formatteer'/>
+ <cd:constant name='fractions' value='breuken'/>
<cd:constant name='frame' value='kader'/>
<cd:constant name='framecolor' value='kaderkleur'/>
<cd:constant name='framecorner' value='kaderhoek'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='kaderstraal'/>
<cd:constant name='frames' value='hokjes'/>
<cd:constant name='from' value='van'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='haal'/>
<cd:constant name='global' value='globaal'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='grid'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='hang'/>
<cd:constant name='hcompact' value='hcomprimeer'/>
<cd:constant name='headalign' value='kopuitlijnen'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='rugoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='icommando'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='tussen'/>
<cd:constant name='increment' value='verhoog'/>
<cd:constant name='incrementnumber' value='verhoognummer'/>
<cd:constant name='indenting' value='inspringen'/>
<cd:constant name='indentnext' value='springvolgendein'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='aanduiding'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='binnen'/>
<cd:constant name='innermargin' value='binnenmarge'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='binnensectie'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interactie'/>
<cd:constant name='interlinespace' value='interlinie'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemuitlijnen'/>
<cd:constant name='items' value='items'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='sleutelexpansie'/>
<cd:constant name='keys' value='sleutels'/>
<cd:constant name='keyword' value='trefwoord'/>
<cd:constant name='label' value='label'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='laatstepagina'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='links'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='linkersubzin'/>
<cd:constant name='lefttext' value='linkertekst'/>
<cd:constant name='leftwidth' value='linkerbreedte'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='minder'/>
<cd:constant name='level' value='niveau'/>
<cd:constant name='levels' value='niveaus'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nonder'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='volgende'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nlinks'/>
<cd:constant name='nlines' value='nregels'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='nrechts'/>
<cd:constant name='ntop' value='nboven'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='openactie'/>
<cd:constant name='openpage' value='openpagina'/>
<cd:constant name='openpageaction' value='openpaginaactie'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='optie'/>
<cd:constant name='order' value='volgorde'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='paginakleur'/>
<cd:constant name='pagecolormodel' value='paginakleurmodel'/>
<cd:constant name='pagecommand' value='paginacommando'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='paginanummer'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='palet'/>
<cd:constant name='paper' value='papier'/>
<cd:constant name='paragraph' value='alinea'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='plaatsen'/>
<cd:constant name='placehead' value='plaatskop'/>
<cd:constant name='placestopper' value='plaatsafsluiter'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='printbaar'/>
<cd:constant name='process' value='proces'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='straal'/>
<cd:constant name='random' value='willekeur'/>
<cd:constant name='range' value='bereik'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='referentie'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='refereren'/>
<cd:constant name='region' value='gebied'/>
<cd:constant name='regionin' value='gebiedin'/>
<cd:constant name='regionout' value='gebieduit'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='herhaal'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnummer'/>
<cd:constant name='resolution' value='resolutie'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='omgekeerd'/>
<cd:constant name='right' value='rechts'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='rechterkleur'/>
<cd:constant name='rightcompoundhyphen' value='rechterkoppelteken'/>
<cd:constant name='rightedge' value='rechterrand'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='rechtersubzin'/>
<cd:constant name='righttext' value='rechtertekst'/>
<cd:constant name='rightwidth' value='rechterbreedte'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotatie'/>
<cd:constant name='rule' value='lijn'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='scope'/>
<cd:constant name='screen' value='raster'/>
<cd:constant name='section' value='sectie'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='sectienummer'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='voorwit'/>
<cd:constant name='spaceinbetween' value='tussenwit'/>
<cd:constant name='spacing' value='spatiering'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='splitsen'/>
<cd:constant name='splitcolor' value='splitskleur'/>
<cd:constant name='splitmethod' value='splitsmethode'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symuitlijnen'/>
<cd:constant name='symbol' value='symbool'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='symboolset'/>
<cd:constant name='symcolor' value='symkleur'/>
<cd:constant name='symstyle' value='symletter'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='synoniemletter'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='tekst'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='tekstkleur'/>
<cd:constant name='textcommand' value='tekstcommando'/>
<cd:constant name='textdistance' value='tekstafstand'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='kopwit'/>
<cd:constant name='topstate' value='bovenstatus'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='eenheid'/>
<cd:constant name='unknownreference' value='onbekendereferentie'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlvariant'/>
<cd:constant name='urlspace' value='urlspatie'/>
<cd:constant name='validate' value='valideer'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='kopoffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='wijze'/>
<cd:constant name='wfactor' value='bfactor'/>
<cd:constant name='white' value='wit'/>
<cd:constant name='width' value='breedte'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xschaal'/>
<cd:constant name='xstep' value='xstap'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yschaal'/>
<cd:constant name='ystep' value='ystap'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language nl -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stop'/>
<cd:element name='text' value='tekst'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language nl -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='schrijfnaarlijst'/>
<cd:command name='writetoreferencelist' value='schrijfnaarreferentielijst'/>
<cd:command name='writetoregister' value='schrijfnaarregister'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-pe.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml
index a55ad78ce1f..adf7c3e239b 100644
--- a/Master/texmf-dist/tex/context/interface/keys-pe.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='جمع'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='بادکنک'/>
<cd:variable name='Cap' value='Cap'/>
<cd:variable name='Capital' value='Capital'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='صفحه‌بعدی'/>
<cd:variable name='Numbers' value='شماره‌ها'/>
<cd:variable name='OpenNamedDocument' value='بازکردن‌نوشتار‌ذخیره‌شده'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='پاراگراف'/>
<cd:variable name='PauseMovie' value='ایست‌فیلم'/>
<cd:variable name='PauseRendering' value='توقف‌تعبیر'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='کنش'/>
<cd:variable name='after' value='بعداز'/>
<cd:variable name='all' value='همه'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='همواره'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='پیوستها'/>
<cd:variable name='appendix' value='پیوست'/>
<cd:variable name='april' value='آوریل'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='درحاشیه‌چپ'/>
<cd:variable name='atmargin' value='درحاشیه'/>
<cd:variable name='atpage' value='درصفحه'/>
+ <cd:variable name='atrightmargin' value='درحاشیه‌راست'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='آگوست'/>
<cd:variable name='author' value='author'/>
<cd:variable name='auto' value='خودکار'/>
<cd:variable name='autointro' value='پیشگفتارخودکار'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='پشت'/>
<cd:variable name='background' value='پس‌زمینه'/>
<cd:variable name='backmatter' value='پس‌مطلب'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='اولویت‌بزرگ'/>
<cd:variable name='blank' value='خالی'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='نقل‌بلوک'/>
<cd:variable name='bodymatter' value='مطلب‌بدنه'/>
<cd:variable name='bodypart' value='قسمت‌بدنه'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='خوابیده‌مشکی'/>
<cd:variable name='bookmark' value='چوبخط'/>
<cd:variable name='both' value='هردو'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='پایین'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='مختصر'/>
<cd:variable name='broad' value='گسترده'/>
<cd:variable name='buffer' value='بافر'/>
<cd:variable name='by' value='بوسیله'/>
<cd:variable name='calligraphic' value='خوشنویسی'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='cap'/>
<cd:variable name='capital' value='capital'/>
<cd:variable name='center' value='مرکز'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='فصل'/>
<cd:variable name='character' value='حرف'/>
<cd:variable name='characters' value='حرفها'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='رنگ'/>
<cd:variable name='column' value='ستون'/>
<cd:variable name='columns' value='ستونها'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='فرمان'/>
<cd:variable name='commands' value='فرمانها'/>
<cd:variable name='comment' value='توضیح'/>
<cd:variable name='component' value='مولفه'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='مفهوم'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='محتوا'/>
<cd:variable name='contents' value='محتویات'/>
<cd:variable name='continue' value='ادامه'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='تبدیل'/>
<cd:variable name='current' value='جاری'/>
<cd:variable name='cutspace' value='فضای‌برش'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='تاریخ'/>
<cd:variable name='day' value='روز'/>
<cd:variable name='december' value='دسامبر'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='هر'/>
<cd:variable name='edge' value='لبه'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='تهی'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='زوج'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='خارجی'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fact'/>
<cd:variable name='february' value='فوریه'/>
<cd:variable name='figure' value='شکل'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='جمعه'/>
<cd:variable name='frontmatter' value='پیش‌مطلب'/>
<cd:variable name='frontpart' value='پیش‌قسمت'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='سراسری'/>
<cd:variable name='graphic' value='گرافیک'/>
<cd:variable name='graphics' value='گرافیکها'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='نمایه‌ها'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='ارث‌بردن'/>
+ <cd:variable name='ininner' value='درداخلی'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='درون‌چپ'/>
+ <cd:variable name='inleftedge' value='درلبه‌چپ'/>
+ <cd:variable name='inleftmargin' value='درحاشیه‌چپ'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='درون‌حاشیه'/>
<cd:variable name='inner' value='داخلی'/>
<cd:variable name='inneredge' value='لبه‌داخلی'/>
<cd:variable name='innermargin' value='حاشیه‌داخلی'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='درخارجی'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='درون‌راست'/>
+ <cd:variable name='inrightedge' value='درلبه‌راست'/>
+ <cd:variable name='inrightmargin' value='درحاشیه‌راست'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='پانل'/>
<cd:variable name='interactionmenu' value='منوی‌پانل'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='میان‌پرده‌ها'/>
<cd:variable name='intermezzo' value='میان‌پرده'/>
<cd:variable name='intext' value='درون‌متن'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='ژولای'/>
<cd:variable name='june' value='ژوئن'/>
<cd:variable name='keep' value='نگهدار'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='برچسب'/>
<cd:variable name='landscape' value='صفحه‌گسترده'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='راهنما'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='شکست‌کلمات‌کمتر'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='خط'/>
<cd:variable name='linenote' value='خط‌نوشت'/>
<cd:variable name='lines' value='خطها'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='آرم'/>
<cd:variable name='logos' value='آرمها'/>
<cd:variable name='lohi' value='پابا'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='شل'/>
<cd:variable name='low' value='پایین'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='مارس'/>
<cd:variable name='margin' value='حاشیه'/>
<cd:variable name='marginedge' value='لبه‌حاشیه'/>
+ <cd:variable name='margintext' value='متن‌حاشیه'/>
<cd:variable name='margintitle' value='عنوان‌حاشیه'/>
<cd:variable name='marking' value='نشانه‌گذاری'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='کمترین‌ارتفاع'/>
<cd:variable name='minwidth' value='کمترین‌عرض'/>
<cd:variable name='mirrored' value='منعکس'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='دوشنبه'/>
<cd:variable name='mono' value='مونو'/>
<cd:variable name='monobold' value='monobold'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='ماه'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='شکست‌کلمات‌بیشتر'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='صفحه‌فردبعدی'/>
<cd:variable name='nextpage' value='صفحه‌بعدی'/>
<cd:variable name='nextsubpage' value='زیرصفحه‌بعدی'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='نه'/>
<cd:variable name='nocheck' value='بدون‌بررسی'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='بدون‌پرکردن'/>
<cd:variable name='nogrid' value='بدون‌توری'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='بدون‌نشانه‌گذاری'/>
<cd:variable name='none' value='هیچکدام'/>
<cd:variable name='nonumber' value='بدون‌شماره'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='نرمال'/>
<cd:variable name='nospacing' value='بدون‌فضاگذاری'/>
<cd:variable name='not' value='بدون'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='بدون‌آویزان‌کردن'/>
<cd:variable name='nothyphenated' value='بدون‌شکست'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='خاموش'/>
<cd:variable name='offset' value='آفست'/>
<cd:variable name='old' value='قدیمی'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='روی'/>
<cd:variable name='one' value='یک'/>
<cd:variable name='opposite' value='مخالف'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='خارجی'/>
<cd:variable name='outeredge' value='لبه‌خارجی'/>
<cd:variable name='outermargin' value='حاشیه‌خارجی'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='همان‌صفحه'/>
<cd:variable name='sans' value='سانز'/>
<cd:variable name='sansbold' value='مشکی‌سانز'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='سانزسریف'/>
<cd:variable name='saturday' value='شنبه'/>
<cd:variable name='screen' value='پرده'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='سپتامبر'/>
<cd:variable name='serif' value='سریف'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='تنگ‌هم'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='ورقه'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='یک‌رو'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='خوابیده'/>
<cd:variable name='slantedbold' value='مشکی‌خوابیده'/>
<cd:variable name='small' value='کوچک'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='تایپ‌کوچک'/>
<cd:variable name='somewhere' value='جایی'/>
<cd:variable name='sorted' value='مرتب'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='فضا'/>
<cd:variable name='spacing' value='فضاگذاری'/>
<cd:variable name='speech' value='سخنرانی'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='پایان'/>
<cd:variable name='stopper' value='ایست'/>
<cd:variable name='stretch' value='بکش'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='اکید'/>
<cd:variable name='strong' value='محکم'/>
<cd:variable name='strut' value='بست'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='نم'/>
<cd:variable name='symbol' value='نماد'/>
<cd:variable name='synchronize' value='تطابق'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='سیستم'/>
<cd:variable name='table' value='جدول'/>
<cd:variable name='tablehead' value='سرجدول'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='میله‌‌های‌زیر'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='واحد'/>
<cd:variable name='units' value='واحدها'/>
<cd:variable name='unknown' value='ناشناس'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='خیلی'/>
<cd:variable name='verystrict' value='خیلی‌سختگیر'/>
<cd:variable name='verytolerant' value='خیلی‌بردبار'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='هفته'/>
<cd:variable name='wednesday' value='چهارشنبه'/>
<cd:variable name='week' value='هفته'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='گسترده'/>
<cd:variable name='width' value='عرض'/>
<cd:variable name='word' value='word'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='سال'/>
<cd:variable name='yes' value='بله'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language pe -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='در'/>
<cd:constant name='author' value='نویسنده'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='بزرگ'/>
<cd:constant name='blank' value='خالی'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='راه‌بلوک'/>
<cd:constant name='bodyfont' value='قلم‌بدنه'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='محاسبه'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='فرمان'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='فشردن'/>
<cd:constant name='clickin' value='فشردن‌داخل'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='ستون'/>
<cd:constant name='columndistance' value='فاصله‌ستون'/>
<cd:constant name='columns' value='ستونها'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='فرمان'/>
<cd:constant name='commandafter' value='فرمان‌بعداز'/>
<cd:constant name='commandbefore' value='فرمان‌قبل‌از'/>
<cd:constant name='commands' value='فرمانها'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='مولفه'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='فشردن'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='ادامه'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='تزویج'/>
<cd:constant name='couplingway' value='روش‌تزویج'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='جاری'/>
<cd:constant name='cutspace' value='فضای‌برش'/>
<cd:constant name='dash' value='دش'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='تاریخ'/>
<cd:constant name='deepnumbercommand' value='فرمان‌شماره‌عمیق'/>
<cd:constant name='deeptextcommand' value='فرمان‌متن‌عمیق'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='پوشه'/>
<cd:constant name='display' value='نمایش'/>
<cd:constant name='distance' value='فاصله'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='نقطه'/>
<cd:constant name='doublesided' value='دورو'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='مصنوعی'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='ارتفاع‌یکسان'/>
<cd:constant name='equalwidth' value='عرض‌یکسان'/>
<cd:constant name='escape' value='فرار'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='حاشیه‌زوج'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='گسترش'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='عقب‌ریختن'/>
<cd:constant name='family' value='خانواده'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='رنگ‌پس‌زمینه‌میدان'/>
<cd:constant name='fieldframecolor' value='رنگ‌قالب‌میدان'/>
<cd:constant name='fieldlayer' value='لایه‌میدان'/>
<cd:constant name='fieldoffset' value='آفست‌میدان'/>
<cd:constant name='file' value='پرونده'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='صفحه‌اول'/>
<cd:constant name='focus' value='تمرکز'/>
<cd:constant name='focusin' value='تمرکزدرون'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='تمرکزبیرون'/>
<cd:constant name='footer' value='ته‌برگ'/>
<cd:constant name='footerdistance' value='فاصله‌ته‌برگ'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='رنگ‌پیش‌زمینه'/>
<cd:constant name='foregroundstyle' value='سبک‌پیش‌زمینه'/>
<cd:constant name='format' value='شمایل'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='قالب'/>
<cd:constant name='framecolor' value='رنگ‌قالب'/>
<cd:constant name='framecorner' value='گوشه‌قالب'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='شعاع‌قالب'/>
<cd:constant name='frames' value='قالبها'/>
<cd:constant name='from' value='از'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='بگیر'/>
<cd:constant name='global' value='سراسری'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='توری'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='بیاویز'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='آفست‌ا'/>
<cd:constant name='horoffset' value='آفست‌افق'/>
<cd:constant name='hyphen' value='شکستن'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='icommand'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='درون'/>
<cd:constant name='inbetween' value='دربین'/>
<cd:constant name='increment' value='افزایش'/>
<cd:constant name='incrementnumber' value='شماره‌افزایش'/>
<cd:constant name='indenting' value='تورفتگی'/>
<cd:constant name='indentnext' value='متن‌تورفته'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='اندیکاتور'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='داخلی'/>
<cd:constant name='innermargin' value='حاشیه‌داخلی'/>
<cd:constant name='inputfile' value='پرونده‌ورودی'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='پانل'/>
<cd:constant name='interlinespace' value='فضای‌بین‌خط'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='تنظیم‌آیتم'/>
<cd:constant name='items' value='آیتمها'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='گسترش‌کلید'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='کلید‌واژه'/>
<cd:constant name='label' value='برچسب'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='صفحه‌آخر'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='چپ'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='زیرجمله‌چپ'/>
<cd:constant name='lefttext' value='متن‌چپ'/>
<cd:constant name='leftwidth' value='عرض‌خط'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='مرحله'/>
<cd:constant name='levels' value='مرحله‌ها'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='nbottom'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='بعدی'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nleft'/>
<cd:constant name='nlines' value='nlines'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='nright'/>
<cd:constant name='ntop' value='ntop'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='عمل‌باز'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='عمل‌صفحه‌باز'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='گزینه'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='رنگ‌صفحه'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='فرمان‌صفحه'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='شماره‌صفحه'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='لوح'/>
<cd:constant name='paper' value='برگ'/>
<cd:constant name='paragraph' value='پاراگراف'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='بگذار'/>
<cd:constant name='placehead' value='بگذارسر'/>
<cd:constant name='placestopper' value='بگذارایست'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='قابل‌چاپ'/>
<cd:constant name='process' value='پردازش'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='شعاع'/>
<cd:constant name='random' value='تصادفی'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='رج'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='مرجع'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='مراجعه'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='ناحیه‌درون'/>
<cd:constant name='regionout' value='ناحیه‌بیرون'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='تکرار'/>
<cd:constant name='reset' value='بازنشانی'/>
<cd:constant name='resetnumber' value='بازنشانی‌شماره'/>
<cd:constant name='resolution' value='کیفیت'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='برعکس'/>
<cd:constant name='right' value='راست'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='رنگ‌راست'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='لبه‌راست'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='زیرجمله‌راست'/>
<cd:constant name='righttext' value='متن‌راست'/>
<cd:constant name='rightwidth' value='عرض‌راست'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='دوران'/>
<cd:constant name='rule' value='خط'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='طرح'/>
<cd:constant name='screen' value='پرده'/>
<cd:constant name='section' value='بخش'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='شماره‌بخش'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='فضا‌قبل‌از'/>
<cd:constant name='spaceinbetween' value='فضا‌دربین'/>
<cd:constant name='spacing' value='فضاگذاری'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='شکافتن'/>
<cd:constant name='splitcolor' value='شکافتن‌رنگ'/>
<cd:constant name='splitmethod' value='روش‌شکافتن'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='تنظیم‌نماد'/>
<cd:constant name='symbol' value='نماد'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='مجموعه‌نماد'/>
<cd:constant name='symcolor' value='رنگ‌نماد'/>
<cd:constant name='symstyle' value='سبک‌نماد'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='سبک‌مترادف'/>
<cd:constant name='tab' value='تب'/>
<cd:constant name='text' value='متن'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='رنگ‌متن'/>
<cd:constant name='textcommand' value='فرمان‌متن'/>
<cd:constant name='textdistance' value='فاصله‌متن'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='فضای‌بالا'/>
<cd:constant name='topstate' value='وضعیت‌بالا'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='تایپ'/>
<cd:constant name='unit' value='واحد'/>
<cd:constant name='unknownreference' value='مرجع‌ناشناس'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlalternative'/>
<cd:constant name='urlspace' value='urlspace'/>
<cd:constant name='validate' value='تاییداعتبار'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='آفست‌عم'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='آفست‌ع'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='راه'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='سفید'/>
<cd:constant name='width' value='عرض'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='فاکتورایکس'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='آفست‌ایکس'/>
<cd:constant name='xscale' value='مقیاس‌ایکس'/>
<cd:constant name='xstep' value='گام‌ایکس'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='آفست‌وای'/>
<cd:constant name='yscale' value='مقیاس‌وای'/>
<cd:constant name='ystep' value='گام‌وای'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language pe -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='پایان'/>
<cd:element name='text' value='متن'/>
<cd:element name='type' value='تایپ'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language pe -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='بنویس‌در‌لیست'/>
<cd:command name='writetoreferencelist' value='بنویس‌درلیست‌مرجع'/>
<cd:command name='writetoregister' value='بنویس‌درثبت'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/keys-ro.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml
index 951a5e8c9c2..474a2ade5d6 100644
--- a/Master/texmf-dist/tex/context/interface/keys-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml
@@ -6,6 +6,7 @@
<cd:variables>
<cd:variable name='Addition' value='Adaugare'/>
+ <cd:variable name='Alphabetic' value='Alphabetic'/>
<cd:variable name='Balloon' value='Balon'/>
<cd:variable name='Cap' value='Cap'/>
<cd:variable name='Capital' value='Majuscula'/>
@@ -30,6 +31,7 @@
<cd:variable name='NextPage' value='PaginaUrmatoare'/>
<cd:variable name='Numbers' value='Numere'/>
<cd:variable name='OpenNamedDocument' value='OpenNamedDocument'/>
+ <cd:variable name='Ordinal' value='Ordinal'/>
<cd:variable name='Paragraph' value='Paragraf'/>
<cd:variable name='PauseMovie' value='PauzaFilm'/>
<cd:variable name='PauseRendering' value='PauseRendering'/>
@@ -75,19 +77,24 @@
<cd:variable name='action' value='actiune'/>
<cd:variable name='after' value='dupa'/>
<cd:variable name='all' value='tot'/>
+ <cd:variable name='alphabetic' value='alphabetic'/>
<cd:variable name='always' value='totdeauna'/>
<cd:variable name='and' value='and'/>
<cd:variable name='answerarea' value='answerarea'/>
<cd:variable name='appendices' value='apendixuri'/>
<cd:variable name='appendix' value='apendix'/>
<cd:variable name='april' value='aprilie'/>
+ <cd:variable name='aside' value='aside'/>
+ <cd:variable name='atleftmargin' value='atleftmargin'/>
<cd:variable name='atmargin' value='lamargine'/>
<cd:variable name='atpage' value='lapagina'/>
+ <cd:variable name='atrightmargin' value='atrightmargin'/>
<cd:variable name='attachment' value='attachment'/>
<cd:variable name='august' value='august'/>
<cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
+ <cd:variable name='autopunctuation' value='autopunctuation'/>
<cd:variable name='back' value='inapot'/>
<cd:variable name='background' value='fundal'/>
<cd:variable name='backmatter' value='epilogul'/>
@@ -103,6 +110,7 @@
<cd:variable name='bigger' value='bigger'/>
<cd:variable name='bigpreference' value='preferintamare'/>
<cd:variable name='blank' value='blank'/>
+ <cd:variable name='block' value='block'/>
<cd:variable name='blockquote' value='blockquote'/>
<cd:variable name='bodymatter' value='principalul'/>
<cd:variable name='bodypart' value='principal'/>
@@ -111,28 +119,37 @@
<cd:variable name='boldslanted' value='aldininclinat'/>
<cd:variable name='bookmark' value='semncarte'/>
<cd:variable name='both' value='ambele'/>
+ <cd:variable name='bothtext' value='bothtext'/>
<cd:variable name='bottom' value='subsol'/>
+ <cd:variable name='box' value='box'/>
<cd:variable name='brief' value='brief'/>
<cd:variable name='broad' value='broad'/>
<cd:variable name='buffer' value='buffer'/>
<cd:variable name='by' value='de'/>
<cd:variable name='calligraphic' value='caligrafic'/>
+ <cd:variable name='camel' value='camel'/>
<cd:variable name='cap' value='cap'/>
<cd:variable name='capital' value='majuscula'/>
<cd:variable name='center' value='center'/>
+ <cd:variable name='centerlast' value='centerlast'/>
<cd:variable name='chapter' value='capitol'/>
<cd:variable name='character' value='caracter'/>
<cd:variable name='characters' value='caractere'/>
+ <cd:variable name='chemical' value='chemical'/>
+ <cd:variable name='chemicals' value='chemicals'/>
<cd:variable name='chemistry' value='chemistry'/>
<cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='culoare'/>
<cd:variable name='column' value='coloana'/>
<cd:variable name='columns' value='coloane'/>
+ <cd:variable name='combination' value='combination'/>
<cd:variable name='command' value='comanda'/>
<cd:variable name='commands' value='comenzi'/>
<cd:variable name='comment' value='comentariu'/>
<cd:variable name='component' value='componenta'/>
+ <cd:variable name='compressseparator' value='compressseparator'/>
<cd:variable name='concept' value='concept'/>
+ <cd:variable name='construction' value='construction'/>
<cd:variable name='content' value='cuprins'/>
<cd:variable name='contents' value='cuprinsuri'/>
<cd:variable name='continue' value='continuu'/>
@@ -141,6 +158,7 @@
<cd:variable name='conversion' value='conversie'/>
<cd:variable name='current' value='curent'/>
<cd:variable name='cutspace' value='cutspace'/>
+ <cd:variable name='dataset' value='dataset'/>
<cd:variable name='date' value='data'/>
<cd:variable name='day' value='zi'/>
<cd:variable name='december' value='decembrie'/>
@@ -154,6 +172,7 @@
<cd:variable name='down' value='down'/>
<cd:variable name='each' value='fiecare'/>
<cd:variable name='edge' value='bordura'/>
+ <cd:variable name='eight' value='eight'/>
<cd:variable name='embed' value='embed'/>
<cd:variable name='empty' value='gol'/>
<cd:variable name='end' value='end'/>
@@ -163,6 +182,7 @@
<cd:variable name='even' value='par'/>
<cd:variable name='export' value='export'/>
<cd:variable name='external' value='extern'/>
+ <cd:variable name='extremestretch' value='extremestretch'/>
<cd:variable name='fact' value='fapt'/>
<cd:variable name='february' value='februarie'/>
<cd:variable name='figure' value='figura'/>
@@ -198,6 +218,7 @@
<cd:variable name='friday' value='vineri'/>
<cd:variable name='frontmatter' value='prologul'/>
<cd:variable name='frontpart' value='prolog'/>
+ <cd:variable name='fullhz' value='fullhz'/>
<cd:variable name='global' value='global'/>
<cd:variable name='graphic' value='graficul'/>
<cd:variable name='graphics' value='graficele'/>
@@ -226,14 +247,28 @@
<cd:variable name='indices' value='indexuri'/>
<cd:variable name='informeel' value='informeel'/>
<cd:variable name='inherit' value='inherit'/>
+ <cd:variable name='ininner' value='ininner'/>
+ <cd:variable name='ininneredge' value='ininneredge'/>
+ <cd:variable name='ininnermargin' value='ininnermargin'/>
<cd:variable name='inleft' value='instanga'/>
+ <cd:variable name='inleftedge' value='inparteastanga'/>
+ <cd:variable name='inleftmargin' value='inmargineastanga'/>
+ <cd:variable name='inline' value='inline'/>
<cd:variable name='inmargin' value='inmargine'/>
<cd:variable name='inner' value='intern'/>
<cd:variable name='inneredge' value='inneredge'/>
<cd:variable name='innermargin' value='innermargin'/>
+ <cd:variable name='inother' value='inother'/>
+ <cd:variable name='inouter' value='inouter'/>
+ <cd:variable name='inouteredge' value='inouteredge'/>
+ <cd:variable name='inoutermargin' value='inoutermargin'/>
<cd:variable name='inright' value='indreapta'/>
+ <cd:variable name='inrightedge' value='inparteadreapta'/>
+ <cd:variable name='inrightmargin' value='inmargineadreapta'/>
+ <cd:variable name='integral' value='integral'/>
<cd:variable name='interaction' value='interactiune'/>
<cd:variable name='interactionmenu' value='meniuinteractiune'/>
+ <cd:variable name='interactive' value='interactive'/>
<cd:variable name='intermezzi' value='intermezzi'/>
<cd:variable name='intermezzo' value='intermezzo'/>
<cd:variable name='intext' value='intext'/>
@@ -248,6 +283,7 @@
<cd:variable name='july' value='iulie'/>
<cd:variable name='june' value='iunie'/>
<cd:variable name='keep' value='mentine'/>
+ <cd:variable name='kerncharacters' value='kerncharacters'/>
<cd:variable name='knockout' value='knockout'/>
<cd:variable name='label' value='eticheta'/>
<cd:variable name='landscape' value='vedere'/>
@@ -266,6 +302,7 @@
<cd:variable name='legend' value='legenda'/>
<cd:variable name='less' value='less'/>
<cd:variable name='lesshyphenation' value='lesshyphenation'/>
+ <cd:variable name='letterspacing' value='letterspacing'/>
<cd:variable name='line' value='linie'/>
<cd:variable name='linenote' value='linenote'/>
<cd:variable name='lines' value='linii'/>
@@ -275,6 +312,7 @@
<cd:variable name='logo' value='logo'/>
<cd:variable name='logos' value='logos'/>
<cd:variable name='lohi' value='lohi'/>
+ <cd:variable name='long' value='long'/>
<cd:variable name='loose' value='larg'/>
<cd:variable name='low' value='jos'/>
<cd:variable name='ls' value='ls'/>
@@ -283,6 +321,7 @@
<cd:variable name='march' value='martie'/>
<cd:variable name='margin' value='margine'/>
<cd:variable name='marginedge' value='marginebordura'/>
+ <cd:variable name='margintext' value='textmarginal'/>
<cd:variable name='margintitle' value='titlumarginal'/>
<cd:variable name='marking' value='marcaje'/>
<cd:variable name='math' value='math'/>
@@ -303,9 +342,11 @@
<cd:variable name='minheight' value='inaltimeminima'/>
<cd:variable name='minwidth' value='latimeminima'/>
<cd:variable name='mirrored' value='oglindit'/>
+ <cd:variable name='mixed' value='mixed'/>
<cd:variable name='monday' value='luni'/>
<cd:variable name='mono' value='mono'/>
<cd:variable name='monobold' value='monoaldin'/>
+ <cd:variable name='mononormal' value='mononormal'/>
<cd:variable name='month' value='luna'/>
<cd:variable name='more' value='more'/>
<cd:variable name='morehyphenation' value='morehyphenation'/>
@@ -319,17 +360,23 @@
<cd:variable name='nextoddpage' value='paginaimparaurmatoarea'/>
<cd:variable name='nextpage' value='paginaurmatoare'/>
<cd:variable name='nextsubpage' value='urmatoareasubpagina'/>
+ <cd:variable name='nine' value='nine'/>
<cd:variable name='no' value='nu'/>
<cd:variable name='nocheck' value='nocheck'/>
+ <cd:variable name='nodepth' value='nodepth'/>
<cd:variable name='nofit' value='nofit'/>
<cd:variable name='nogrid' value='nogrid'/>
+ <cd:variable name='noheight' value='noheight'/>
<cd:variable name='nohz' value='nohz'/>
+ <cd:variable name='noline' value='noline'/>
<cd:variable name='nomarking' value='faramarcare'/>
<cd:variable name='none' value='niciunul'/>
<cd:variable name='nonumber' value='nonumber'/>
+ <cd:variable name='norepeat' value='norepeat'/>
<cd:variable name='normal' value='normal'/>
<cd:variable name='nospacing' value='nospacing'/>
<cd:variable name='not' value='nu'/>
+ <cd:variable name='notation' value='notation'/>
<cd:variable name='note' value='note'/>
<cd:variable name='nothanging' value='nothanging'/>
<cd:variable name='nothyphenated' value='nedespsilabe'/>
@@ -343,9 +390,11 @@
<cd:variable name='off' value='dezactivat'/>
<cd:variable name='offset' value='offset'/>
<cd:variable name='old' value='old'/>
+ <cd:variable name='oldstyle' value='oldstyle'/>
<cd:variable name='on' value='on'/>
<cd:variable name='one' value='unu'/>
<cd:variable name='opposite' value='opus'/>
+ <cd:variable name='ordinal' value='ordinal'/>
<cd:variable name='outer' value='extern'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
@@ -414,6 +463,7 @@
<cd:variable name='samepage' value='aceeasipagina'/>
<cd:variable name='sans' value='sans'/>
<cd:variable name='sansbold' value='sansaldin'/>
+ <cd:variable name='sansnormal' value='sansnormal'/>
<cd:variable name='sansserif' value='sansserif'/>
<cd:variable name='saturday' value='sambata'/>
<cd:variable name='screen' value='ecran'/>
@@ -424,12 +474,19 @@
<cd:variable name='selectfont' value='selectfont'/>
<cd:variable name='september' value='septembrie'/>
<cd:variable name='serif' value='serif'/>
+ <cd:variable name='serifbold' value='serifbold'/>
+ <cd:variable name='serifnormal' value='serifnormal'/>
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='setups'/>
+ <cd:variable name='seven' value='seven'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='shiftdown' value='shiftdown'/>
+ <cd:variable name='shiftup' value='shiftup'/>
<cd:variable name='short' value='short'/>
<cd:variable name='simplefonts' value='simplefonts'/>
+ <cd:variable name='simplelist' value='simplelist'/>
<cd:variable name='singlesided' value='ofata'/>
+ <cd:variable name='six' value='six'/>
<cd:variable name='slanted' value='inclinat'/>
<cd:variable name='slantedbold' value='inclinataldin'/>
<cd:variable name='small' value='mic'/>
@@ -447,6 +504,7 @@
<cd:variable name='smalltype' value='mictype'/>
<cd:variable name='somewhere' value='undeva'/>
<cd:variable name='sorted' value='sortat'/>
+ <cd:variable name='sorting' value='sorting'/>
<cd:variable name='space' value='spatiu'/>
<cd:variable name='spacing' value='spatiere'/>
<cd:variable name='speech' value='speech'/>
@@ -459,6 +517,7 @@
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='stopper'/>
<cd:variable name='stretch' value='dilatat'/>
+ <cd:variable name='stretched' value='stretched'/>
<cd:variable name='strict' value='strict'/>
<cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
@@ -492,6 +551,7 @@
<cd:variable name='sym' value='sym'/>
<cd:variable name='symbol' value='simbol'/>
<cd:variable name='synchronize' value='synchronize'/>
+ <cd:variable name='synonym' value='synonym'/>
<cd:variable name='system' value='sistem'/>
<cd:variable name='table' value='tabelul'/>
<cd:variable name='tablehead' value='antettabel'/>
@@ -522,6 +582,7 @@
<cd:variable name='underbars' value='sublinii'/>
<cd:variable name='understrike' value='understrike'/>
<cd:variable name='understrikes' value='understrikes'/>
+ <cd:variable name='unframed' value='unframed'/>
<cd:variable name='unit' value='unitate'/>
<cd:variable name='units' value='unitati'/>
<cd:variable name='unknown' value='necunoscut'/>
@@ -534,6 +595,8 @@
<cd:variable name='very' value='foarte'/>
<cd:variable name='verystrict' value='foartestrict'/>
<cd:variable name='verytolerant' value='foartetolerant'/>
+ <cd:variable name='vfenced' value='vfenced'/>
+ <cd:variable name='vulgarfraction' value='vulgarfraction'/>
<cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='miercuri'/>
<cd:variable name='week' value='saptamana'/>
@@ -542,10 +605,11 @@
<cd:variable name='wide' value='larg'/>
<cd:variable name='width' value='latime'/>
<cd:variable name='word' value='cuvant'/>
+ <cd:variable name='words' value='words'/>
<cd:variable name='xml' value='xml'/>
<cd:variable name='year' value='an'/>
<cd:variable name='yes' value='da'/>
- </cd:variable>
+ </cd:variables>
<!-- definitions for interface constants for language ro -->
@@ -570,8 +634,10 @@
<cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
<cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
<cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
+ <cd:constant name='artoffset' value='artoffset'/>
<cd:constant name='at' value='la'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authorconversion' value='authorconversion'/>
<cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
<cd:constant name='authoretallimit' value='authoretallimit'/>
<cd:constant name='authoretaltext' value='authoretaltext'/>
@@ -602,6 +668,7 @@
<cd:constant name='bidi' value='bidi'/>
<cd:constant name='big' value='mare'/>
<cd:constant name='blank' value='blanc'/>
+ <cd:constant name='bleedoffset' value='bleedoffset'/>
<cd:constant name='blockway' value='blockway'/>
<cd:constant name='bodyfont' value='fonttext'/>
<cd:constant name='boffset' value='boffset'/>
@@ -626,6 +693,8 @@
<cd:constant name='calculate' value='calculeaza'/>
<cd:constant name='category' value='category'/>
<cd:constant name='ccommand' value='comandac'/>
+ <cd:constant name='character' value='character'/>
+ <cd:constant name='characters' value='characters'/>
<cd:constant name='check' value='check'/>
<cd:constant name='click' value='click'/>
<cd:constant name='clickin' value='clickintru'/>
@@ -640,15 +709,19 @@
<cd:constant name='column' value='coloana'/>
<cd:constant name='columndistance' value='distantacoloane'/>
<cd:constant name='columns' value='coloane'/>
+ <cd:constant name='comma' value='comma'/>
<cd:constant name='command' value='comanda'/>
<cd:constant name='commandafter' value='comandadupa'/>
<cd:constant name='commandbefore' value='comandainainte'/>
<cd:constant name='commands' value='comenzi'/>
+ <cd:constant name='comment' value='comment'/>
+ <cd:constant name='commentchar' value='commentchar'/>
<cd:constant name='commentoffset' value='commentoffset'/>
<cd:constant name='compact' value='compact'/>
<cd:constant name='component' value='component'/>
<cd:constant name='compoundhyphen' value='compoundhyphen'/>
<cd:constant name='compress' value='compress'/>
+ <cd:constant name='compressseparator' value='compressseparator'/>
<cd:constant name='concerns' value='concerns'/>
<cd:constant name='connector' value='connector'/>
<cd:constant name='continue' value='continua'/>
@@ -660,12 +733,14 @@
<cd:constant name='coupling' value='cuplare'/>
<cd:constant name='couplingway' value='modcuplare'/>
<cd:constant name='criterium' value='criteriu'/>
+ <cd:constant name='cropoffset' value='cropoffset'/>
<cd:constant name='cssfile' value='cssfile'/>
<cd:constant name='current' value='curent'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
<cd:constant name='database' value='database'/>
+ <cd:constant name='dataset' value='dataset'/>
<cd:constant name='date' value='data'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -677,8 +752,10 @@
<cd:constant name='directory' value='director'/>
<cd:constant name='display' value='display'/>
<cd:constant name='distance' value='distanta'/>
+ <cd:constant name='domain' value='domain'/>
<cd:constant name='dot' value='punct'/>
<cd:constant name='doublesided' value='douafete'/>
+ <cd:constant name='down' value='down'/>
<cd:constant name='dummy' value='dummy'/>
<cd:constant name='dx' value='dx'/>
<cd:constant name='dy' value='dy'/>
@@ -694,6 +771,10 @@
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
+ <cd:constant name='etaldisplay' value='etaldisplay'/>
+ <cd:constant name='etallimit' value='etallimit'/>
+ <cd:constant name='etaloption' value='etaloption'/>
+ <cd:constant name='etaltext' value='etaltext'/>
<cd:constant name='evenmargin' value='marginepara'/>
<cd:constant name='exitoffset' value='exitoffset'/>
<cd:constant name='expansion' value='expansiune'/>
@@ -703,18 +784,24 @@
<cd:constant name='fallback' value='fallback'/>
<cd:constant name='family' value='familie'/>
<cd:constant name='features' value='features'/>
+ <cd:constant name='fences' value='fences'/>
+ <cd:constant name='field' value='field'/>
<cd:constant name='fieldbackgroundcolor' value='culoarefundalcamp'/>
<cd:constant name='fieldframecolor' value='culoareframecamp'/>
<cd:constant name='fieldlayer' value='fieldlayer'/>
<cd:constant name='fieldoffset' value='offsetcamp'/>
<cd:constant name='file' value='fisier'/>
+ <cd:constant name='filler' value='filler'/>
<cd:constant name='filtercommand' value='filtercommand'/>
<cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='finalpagesep' value='finalpagesep'/>
<cd:constant name='finalpubsep' value='finalpubsep'/>
+ <cd:constant name='first' value='first'/>
<cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='firstpage' value='primapagina'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
+ <cd:constant name='focusoffset' value='focusoffset'/>
<cd:constant name='focusout' value='focusout'/>
<cd:constant name='footer' value='subsol'/>
<cd:constant name='footerdistance' value='distantasubsol'/>
@@ -723,6 +810,7 @@
<cd:constant name='foregroundcolor' value='foregroundcolor'/>
<cd:constant name='foregroundstyle' value='foregroundstyle'/>
<cd:constant name='format' value='format'/>
+ <cd:constant name='fractions' value='fractions'/>
<cd:constant name='frame' value='frame'/>
<cd:constant name='framecolor' value='culoareframe'/>
<cd:constant name='framecorner' value='coltframe'/>
@@ -731,10 +819,14 @@
<cd:constant name='frameradius' value='razaframe'/>
<cd:constant name='frames' value='frames'/>
<cd:constant name='from' value='dela'/>
+ <cd:constant name='functioncolor' value='functioncolor'/>
+ <cd:constant name='functionstyle' value='functionstyle'/>
<cd:constant name='get' value='adu'/>
<cd:constant name='global' value='global'/>
<cd:constant name='goodies' value='goodies'/>
<cd:constant name='grid' value='grid'/>
+ <cd:constant name='group' value='group'/>
+ <cd:constant name='groupsuffix' value='groupsuffix'/>
<cd:constant name='hang' value='suspenda'/>
<cd:constant name='hcompact' value='hcompact'/>
<cd:constant name='headalign' value='headalign'/>
@@ -754,19 +846,23 @@
<cd:constant name='hoffset' value='hoffset'/>
<cd:constant name='horoffset' value='offsetoriz'/>
<cd:constant name='hyphen' value='hyphen'/>
+ <cd:constant name='hyphens' value='hyphens'/>
<cd:constant name='icommand' value='comandai'/>
+ <cd:constant name='ignore' value='ignore'/>
<cd:constant name='in' value='in'/>
<cd:constant name='inbetween' value='intre'/>
<cd:constant name='increment' value='increment'/>
<cd:constant name='incrementnumber' value='numarincrement'/>
<cd:constant name='indenting' value='aliniat'/>
<cd:constant name='indentnext' value='aliniaturmator'/>
+ <cd:constant name='index' value='index'/>
<cd:constant name='indicator' value='indicator'/>
<cd:constant name='initialsep' value='initialsep'/>
<cd:constant name='inner' value='intern'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
<cd:constant name='insidesection' value='insidesection'/>
+ <cd:constant name='instance' value='instance'/>
<cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interactiune'/>
<cd:constant name='interlinespace' value='spatiereinterliniara'/>
@@ -775,15 +871,21 @@
<cd:constant name='italicfont' value='italicfont'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elemente'/>
+ <cd:constant name='joiners' value='joiners'/>
+ <cd:constant name='journalconversion' value='journalconversion'/>
<cd:constant name='juniorsep' value='juniorsep'/>
+ <cd:constant name='keeptogether' value='keeptogether'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keys' value='keys'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='eticheta'/>
<cd:constant name='labeloffset' value='labeloffset'/>
+ <cd:constant name='language' value='language'/>
+ <cd:constant name='last' value='last'/>
<cd:constant name='lastnamesep' value='lastnamesep'/>
<cd:constant name='lastpage' value='ultimapagina'/>
+ <cd:constant name='lastpagesep' value='lastpagesep'/>
<cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='layout' value='layout'/>
<cd:constant name='left' value='stanga'/>
@@ -804,6 +906,7 @@
<cd:constant name='leftsubsentence' value='subpropozitiestanga'/>
<cd:constant name='lefttext' value='textstanga'/>
<cd:constant name='leftwidth' value='latimestanga'/>
+ <cd:constant name='leftwords' value='leftwords'/>
<cd:constant name='less' value='less'/>
<cd:constant name='level' value='nivel'/>
<cd:constant name='levels' value='nivele'/>
@@ -860,10 +963,15 @@
<cd:constant name='nbottom' value='njos'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='urmatorul'/>
+ <cd:constant name='nextleft' value='nextleft'/>
+ <cd:constant name='nextleftquotation' value='nextleftquotation'/>
+ <cd:constant name='nextright' value='nextright'/>
+ <cd:constant name='nextrightquotation' value='nextrightquotation'/>
<cd:constant name='nl' value='nl'/>
<cd:constant name='nleft' value='nstanga'/>
<cd:constant name='nlines' value='nlinii'/>
<cd:constant name='norm' value='norm'/>
+ <cd:constant name='note' value='note'/>
<cd:constant name='nr' value='nr'/>
<cd:constant name='nright' value='ndreapta'/>
<cd:constant name='ntop' value='nsus'/>
@@ -894,6 +1002,7 @@
<cd:constant name='openaction' value='actiunedeschidere'/>
<cd:constant name='openpage' value='openpage'/>
<cd:constant name='openpageaction' value='actiunedeschiderepagina'/>
+ <cd:constant name='openup' value='openup'/>
<cd:constant name='opticalsize' value='opticalsize'/>
<cd:constant name='option' value='optiune'/>
<cd:constant name='order' value='order'/>
@@ -907,8 +1016,10 @@
<cd:constant name='pagecolor' value='culoarepagina'/>
<cd:constant name='pagecolormodel' value='pagecolormodel'/>
<cd:constant name='pagecommand' value='comandapagina'/>
+ <cd:constant name='pageconnector' value='pageconnector'/>
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
+ <cd:constant name='pageleft' value='pageleft'/>
<cd:constant name='pagenumber' value='numarpagina'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
@@ -919,7 +1030,9 @@
<cd:constant name='pageprefixset' value='pageprefixset'/>
<cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
+ <cd:constant name='pageright' value='pageright'/>
<cd:constant name='pagesegments' value='pagesegments'/>
+ <cd:constant name='pagesep' value='pagesep'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
<cd:constant name='pagestarter' value='pagestarter'/>
@@ -929,6 +1042,7 @@
<cd:constant name='palet' value='paleta'/>
<cd:constant name='paper' value='hartie'/>
<cd:constant name='paragraph' value='paragraf'/>
+ <cd:constant name='period' value='period'/>
<cd:constant name='place' value='pune'/>
<cd:constant name='placehead' value='punetitlu'/>
<cd:constant name='placestopper' value='punestopper'/>
@@ -949,7 +1063,9 @@
<cd:constant name='printable' value='tiparibil'/>
<cd:constant name='process' value='process'/>
<cd:constant name='profile' value='profile'/>
+ <cd:constant name='properties' value='properties'/>
<cd:constant name='pubsep' value='pubsep'/>
+ <cd:constant name='quotechar' value='quotechar'/>
<cd:constant name='radius' value='raza'/>
<cd:constant name='random' value='aleator'/>
<cd:constant name='range' value='range'/>
@@ -957,18 +1073,24 @@
<cd:constant name='ref' value='ref'/>
<cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='referinta'/>
+ <cd:constant name='referencemethod' value='referencemethod'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referinta'/>
<cd:constant name='region' value='region'/>
<cd:constant name='regionin' value='regiuneintrare'/>
<cd:constant name='regionout' value='regiuneiesire'/>
+ <cd:constant name='register' value='register'/>
<cd:constant name='regularfeatures' value='regularfeatures'/>
<cd:constant name='regularfont' value='regularfont'/>
+ <cd:constant name='renderingsetup' value='renderingsetup'/>
<cd:constant name='repeat' value='repeta'/>
<cd:constant name='reset' value='reset'/>
<cd:constant name='resetnumber' value='resetnumber'/>
<cd:constant name='resolution' value='rezolutie'/>
+ <cd:constant name='resources' value='resources'/>
+ <cd:constant name='reverse' value='reverse'/>
<cd:constant name='right' value='dreapta'/>
+ <cd:constant name='rightchars' value='rightchars'/>
<cd:constant name='rightcolor' value='culoaredreapta'/>
<cd:constant name='rightcompoundhyphen' value='rightcompoundhyphen'/>
<cd:constant name='rightedge' value='borduradreapta'/>
@@ -986,6 +1108,7 @@
<cd:constant name='rightsubsentence' value='subpropozitiedreapta'/>
<cd:constant name='righttext' value='textdreapta'/>
<cd:constant name='rightwidth' value='marginedreapta'/>
+ <cd:constant name='rightwords' value='rightwords'/>
<cd:constant name='roffset' value='roffset'/>
<cd:constant name='rotation' value='rotatie'/>
<cd:constant name='rule' value='rigla'/>
@@ -1000,6 +1123,7 @@
<cd:constant name='scope' value='scop'/>
<cd:constant name='screen' value='ecran'/>
<cd:constant name='section' value='sectiune'/>
+ <cd:constant name='sectionblock' value='sectionblock'/>
<cd:constant name='sectionconversion' value='sectionconversion'/>
<cd:constant name='sectionconversionset' value='sectionconversionset'/>
<cd:constant name='sectionnumber' value='numarsectiune'/>
@@ -1036,6 +1160,7 @@
<cd:constant name='spacebefore' value='spatiuinainte'/>
<cd:constant name='spaceinbetween' value='spaceinbetween'/>
<cd:constant name='spacing' value='spatiere'/>
+ <cd:constant name='specification' value='specification'/>
<cd:constant name='split' value='split'/>
<cd:constant name='splitcolor' value='splitcolor'/>
<cd:constant name='splitmethod' value='splitmethod'/>
@@ -1060,10 +1185,12 @@
<cd:constant name='surnamefirstnamesep' value='surnamefirstnamesep'/>
<cd:constant name='surnameinitialsep' value='surnameinitialsep'/>
<cd:constant name='surnamesep' value='surnamesep'/>
+ <cd:constant name='svgstyle' value='svgstyle'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symaliniere'/>
<cd:constant name='symbol' value='simbol'/>
+ <cd:constant name='symbolcommand' value='symbolcommand'/>
<cd:constant name='symbolset' value='setsimbol'/>
<cd:constant name='symcolor' value='culoaresimbol'/>
<cd:constant name='symstyle' value='stilsimbol'/>
@@ -1073,6 +1200,7 @@
<cd:constant name='synonymstyle' value='stilsinonim'/>
<cd:constant name='tab' value='tab'/>
<cd:constant name='text' value='text'/>
+ <cd:constant name='textalign' value='textalign'/>
<cd:constant name='textcolor' value='culoaretext'/>
<cd:constant name='textcommand' value='comandatext'/>
<cd:constant name='textdistance' value='textdistance'/>
@@ -1104,9 +1232,12 @@
<cd:constant name='topspace' value='spatiusus'/>
<cd:constant name='topstate' value='staresus'/>
<cd:constant name='totalnumber' value='totalnumber'/>
+ <cd:constant name='translate' value='translate'/>
+ <cd:constant name='trimoffset' value='trimoffset'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unitate'/>
<cd:constant name='unknownreference' value='referintanecunoscuta'/>
+ <cd:constant name='up' value='up'/>
<cd:constant name='urlalternative' value='urlalternativ'/>
<cd:constant name='urlspace' value='spatiuurl'/>
<cd:constant name='validate' value='verifica'/>
@@ -1116,15 +1247,18 @@
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
+ <cd:constant name='viewerprefix' value='viewerprefix'/>
<cd:constant name='voffset' value='voffset'/>
<cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='mod'/>
<cd:constant name='wfactor' value='factorw'/>
<cd:constant name='white' value='alb'/>
<cd:constant name='width' value='latime'/>
+ <cd:constant name='words' value='words'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
+ <cd:constant name='xmlsetup' value='xmlsetup'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscala'/>
<cd:constant name='xstep' value='xstep'/>
@@ -1133,7 +1267,7 @@
<cd:constant name='yoffset' value='yoffset'/>
<cd:constant name='yscale' value='yscala'/>
<cd:constant name='ystep' value='ystep'/>
- </cd:constant>
+ </cd:constants>
<!-- definitions for interface elements for language ro -->
@@ -1164,7 +1298,7 @@
<cd:element name='stop' value='stop'/>
<cd:element name='text' value='text'/>
<cd:element name='type' value='type'/>
- </cd:element>
+ </cd:elements>
<!-- definitions for interface commands for language ro -->
@@ -1820,6 +1954,6 @@
<cd:command name='writetolist' value='scrieinlista'/>
<cd:command name='writetoreferencelist' value='scrieinlistareferinte'/>
<cd:command name='writetoregister' value='scrieinregistru'/>
- </cd:command>
+ </cd:commands>
</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-accent.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-accent.xml
new file mode 100644
index 00000000000..b947dfc1286
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-accent.xml
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineaccent" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecharacter" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="string-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecommand" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="string-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathaccent" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildmathaccent" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextaccent" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextmacron" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextbottomdot" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextcedilla" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextognek" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextbottomcomma" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="d" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buildtextgrave" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="acute" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grave" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ddot" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tilde" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bar" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="breve" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="check" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hat" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vec" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dot" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="AA" file="enco-ini.mkiv"/>
+
+ <cd:command name="aa" file="enco-ini.mkiv"/>
+
+ <cd:command name="AE" file="enco-ini.mkiv"/>
+
+ <cd:command name="ae" file="enco-ini.mkiv"/>
+
+ <cd:command name="CC" file="enco-ini.mkiv"/>
+
+ <cd:command name="cc" file="enco-ini.mkiv"/>
+
+ <cd:command name="L" file="enco-ini.mkiv"/>
+
+ <cd:command name="l" file="enco-ini.mkiv"/>
+
+ <cd:command name="O" file="enco-ini.mkiv"/>
+
+ <cd:command name="o" file="enco-ini.mkiv"/>
+
+ <cd:command name="OE" file="enco-ini.mkiv"/>
+
+ <cd:command name="oe" file="enco-ini.mkiv"/>
+
+ <cd:command name="SZ" file="enco-ini.mkiv"/>
+
+ <cd:command name="sz" file="enco-ini.mkiv"/>
+
+ <cd:command name="SS" file="enco-ini.mkiv"/>
+
+ <cd:command name="IJ" file="enco-ini.mkiv"/>
+
+ <cd:command name="ij" file="enco-ini.mkiv"/>
+
+ <cd:command name="i" file="enco-ini.mkiv"/>
+
+ <cd:command name="j" file="enco-ini.mkiv"/>
+
+ <cd:command name="eszett" file="enco-ini.mkiv"/>
+
+ <cd:command name="Eszett" file="enco-ini.mkiv"/>
+
+ <cd:command name="Ssharp" file="enco-ini.mkiv"/>
+
+ <cd:command name="lslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="Lslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="dslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="Dslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="oslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="Oslash" file="enco-ini.mkiv"/>
+
+ <cd:command name="dcroat" file="enco-ini.mkiv"/>
+
+ <cd:command name="Dcroat" file="enco-ini.mkiv"/>
+
+ <cd:command name="kcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="Kcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="lcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="Lcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="ncedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="Ncedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="rcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="Rcedilla" file="enco-ini.mkiv"/>
+
+ <cd:command name="aumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="Aumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="eumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="Eumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="iumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="Iumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="oumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="Oumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="uumlaut" file="enco-ini.mkiv"/>
+
+ <cd:command name="Uumlaut" file="enco-ini.mkiv"/>
+
+ -->
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-align.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-align.xml
new file mode 100644
index 00000000000..aa94b0d4c80
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-align.xml
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupalign" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="broad"/>
+ <cd:constant type="wide"/>
+ <cd:constant type="bottom" default="yes"/>
+ <cd:constant type="height"/>
+ <cd:constant type="line"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ <cd:constant type="lohi"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="width" default="yes"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="center"/>
+ <cd:constant type="disable"/>
+ <cd:constant type="last"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="lefttoright"/>
+ <cd:constant type="righttoleft"/>
+ <cd:constant type="l2r"/>
+ <cd:constant type="r2l"/>
+ <cd:constant type="table"/>
+ <cd:constant type="lesshyphenation"/>
+ <cd:constant type="morehyphenation"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="nothanging"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="fullhz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="hyphenated"/>
+ <cd:constant type="nothyphenated"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="verytolerant"/>
+ <cd:constant type="stretch"/>
+ <cd:constant type="extremestretch"/>
+ <cd:constant type="final"/>
+ <cd:constant type="2*final"/>
+ <cd:constant type="3*final"/>
+ <cd:constant type="4*final"/>
+ <!--
+ <cd:constant type="cd:name"/>
+ -->
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usealignparameter" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alignment" type="environment" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupalign"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linealignment" type="environment" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="max"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftaligned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="middlealigned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="rightaligned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="maxaligned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="midaligned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="centeraligned" type="environment" file="spac-ali.mkiv"/>
+
+ <cd:command name="leftaligned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightaligned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="middlealigned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="maxaligned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="midaligned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="centeraligned" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alignedline" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-alignline"/>
+ <cd:resolve name="argument-alignline"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="wordright" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="right"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplealignedbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-alignsimple"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplealignedspreadbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-alignsimple"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplealignedboxplus" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-alignsimple"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplereversealignedbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-alignsimple"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplereversealignedboxplus" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-alignsimple"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alignedbox" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-aligned"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="aligned" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-aligned"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefttoright" file="spac-ali.mkiv"/>
+
+ <cd:command name="righttoleft" file="spac-ali.mkiv"/>
+
+ <cd:command name="raggedbottom" file="spac-ali.mkiv"/>
+
+ <cd:command name="alignbottom" file="spac-ali.mkiv"/>
+
+ <cd:command name="baselinebottom" file="spac-ali.mkiv"/>
+
+ <cd:command name="notragged" file="spac-ali.mkiv"/>
+
+ <cd:command name="raggedleft" file="spac-ali.mkiv"/>
+
+ <cd:command name="raggedcenter" file="spac-ali.mkiv"/>
+
+ <cd:command name="raggedright" file="spac-ali.mkiv"/>
+
+ <cd:command name="veryraggedleft" file="spac-ali.mkiv"/>
+
+ <cd:command name="veryraggedcenter" file="spac-ali.mkiv"/>
+
+ <cd:command name="veryraggedright" file="spac-ali.mkiv"/>
+
+ <cd:command name="raggedwidecenter" file="spac-ali.mkiv"/>
+
+ <cd:command name="centeredlastline" file="spac-ali.mkiv"/>
+
+ <cd:command name="ttraggedright" file="spac-ali.mkiv"/>
+
+ <cd:command name="forgetragged" file="spac-ali.mkiv"/>
+
+ <cd:command name="line" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftline" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightline" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="centerline" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-anchor.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-anchor.xml
new file mode 100644
index 00000000000..342976a3d37
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-anchor.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineanchor" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="anchor" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-attachment.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-attachment.xml
new file mode 100644
index 00000000000..6aadc030429
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-attachment.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineattachment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupattachment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="file">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="name">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="buffer">
+ <cd:constant type="cd:buffer"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="hidden"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="Graph"/>
+ <cd:constant type="Paperclip"/>
+ <cd:constant type="Pushpin"/>
+ <cd:constant type="Default"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textlayer">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="leftedge"/>
+ <cd:constant type="rightedge"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="high"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupattachments" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="registerattachment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="attachment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:sequence>
+ <cd:variable value="attachment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="attachment" type="environment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:sequence>
+ <cd:variable value="attachment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeattachments" file="scrn-wid.mkvi"/>
+
+ <cd:command name="attachment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="attachment" type="environment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupattachment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-attribute.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-attribute.xml
new file mode 100644
index 00000000000..eb699b99eca
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-attribute.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="pushattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="popattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installattributestack" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ <cd:constant type="public" default="yes"/>
+ <cd:constant type="private"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesystemattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ <cd:constant type="public"/>
+ <cd:constant type="private" default="yes"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="newattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosetattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doresetattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dogetattribute" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dogetattributeid" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetallattributes" file="attr-ini.mkiv"/>
+
+ <cd:command name="savecurrentattributes" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="restorecurrentattributes" file="attr-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showattributes" file="attr-ini.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-backend.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-backend.xml
new file mode 100644
index 00000000000..ff9a628cbec
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-backend.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupbackend" file="back-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="xhtml">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="file">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="xmpfile">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="format">
+ <cd:constant type="version"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="always"/>
+ <cd:constant type="never"/>
+ </cd:parameter>
+ <cd:parameter name="profile">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-background.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-background.xml
new file mode 100644
index 00000000000..400e0145424
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-background.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definebackground" file="pack-bck.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbackground" file="pack-bck.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="background" type="environment" generated="yes" variant="generated" file="pack-bck.mkvi">
+ <cd:sequence>
+ <cd:variable value="background"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="background" type="environment" file="pack-bck.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="background" generated="yes" variant="generated" file="pack-bck.mkvi">
+ <cd:sequence>
+ <cd:variable value="background"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="background" file="pack-bck.mkvi">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="backgroundline" file="pack-bck.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbackgrounds" variant="1" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="leftedge"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="text"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="rightedge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbackgrounds" variant="2" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="paper"/>
+ <cd:constant type="page"/>
+ <cd:constant type="leftpage"/>
+ <cd:constant type="rightpage"/>
+ <cd:constant type="text"/>
+ <cd:constant type="hidden"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="background" type="environment" begin="push" end="pop" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesomebackground" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsomebackgroundelse" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsomebackground" file="page-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-bar.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-bar.xml
new file mode 100644
index 00000000000..3f339b9a02c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-bar.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definebar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="ex" default="yes"/>
+ <cd:constant type="em"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="in"/>
+ <cd:constant type="cm"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="nc"/>
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="foreground" default="yes"/>
+ <cd:constant type="background"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="max">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupbars" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="bar" generated="yes" variant="generated" file="node-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="bar"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bar" type="environment" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directsetbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bar" type="environment" begin="push" end="pop" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbar" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overstrike" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="understrike" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbars" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbars" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overstrikes" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="understrikes" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underrandom" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underrandoms" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underdash" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underdashes" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underdot" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underdots" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-blackrule.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-blackrule.xml
new file mode 100644
index 00000000000..1db99b9f45e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-blackrule.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupblackrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a" default="yes"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="blackrule" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblackrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="blackrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblackrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vl" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hl" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="somekindoftab" file="tabl-mis.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-bleed.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-bleed.xml
new file mode 100644
index 00000000000..15a2fe5f791
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-bleed.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupbleeding" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="t"/>
+ <cd:constant type="b"/>
+ <cd:constant type="l" default="yes"/>
+ <cd:constant type="r"/>
+ <cd:constant type="bl"/>
+ <cd:constant type="lb"/>
+ <cd:constant type="br"/>
+ <cd:constant type="rb"/>
+ <cd:constant type="tl"/>
+ <cd:constant type="lt"/>
+ <cd:constant type="tr"/>
+ <cd:constant type="rt"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bleed" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbleeding"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bleedwidth" file="pack-box.mkiv"/>
+
+ <cd:command name="bleedheight" file="pack-box.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-block.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-block.xml
new file mode 100644
index 00000000000..980b5b4350e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-block.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineblock" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupblock" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="block" type="environment" generated="yes" variant="generated" begin="begin" end="end" file="strc-blk.mkiv">
+ <cd:sequence>
+ <cd:variable value="block"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hideblocks" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="keepblocks" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useblocks" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="criterium">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processblocks" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="criterium">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="selectblocks" file="strc-blk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="criterium">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-bookmark.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-bookmark.xml
new file mode 100644
index 00000000000..5b7aec9a86e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-bookmark.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupbookmark" file="strc-bkm.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="force">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="numberseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberstarter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="sectionblock">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupbookmarks" file="strc-bkm.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbookmark"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="bookmark" file="strc-bkm.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placebookmarks" file="src-bkm.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbookmark"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-boxes.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-boxes.xml
new file mode 100644
index 00000000000..a9eeb96ae92
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-boxes.xml
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="doiftext" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsetext" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiftextelse" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowithnextbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowithnextboxcs" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nextboxwd" file="supp-box.mkiv"/>
+
+ <cd:command name="nextboxht" file="supp-box.mkiv"/>
+
+ <cd:command name="nextboxdp" file="supp-box.mkiv"/>
+
+ <cd:command name="nextboxhtdp" file="supp-box.mkiv"/>
+
+ <cd:command name="flushnextbox" file="supp-box.mkiv"/>
+
+ <cd:command name="nextbox" file="supp-box.mkiv"/>
+
+ <cd:command name="nextdepth" file="supp-box.mkiv"/>
+
+ <cd:command name="dowithnextboxcontent" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowithnextboxcontentcs" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rlap" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="llap" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="clap" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tlap" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="blap" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="reshapebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shapebox" type="environment" begin="beginof" end="endof" file="supp-box.mkiv"/>
+
+ <cd:command name="flushshapebox" file="supp-box.mkiv"/>
+
+ <cd:command name="innerflushshapebox" file="supp-box.mkiv"/>
+
+ <cd:command name="shapedhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processtokens" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doboundtext" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="limitatetext" variant="1" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension" prefix="cd:sign"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="limitatetext" variant="2" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:dimension" prefix="cd:sign"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="limtatefirstline" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processisolatedchars" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processisolatedwords" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytocharacters" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytowords" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringchar" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringword" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringline" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringcharspaced" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringwordspaced" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytosplitstringlinespaced" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinedbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="struttedbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="topskippedbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="centeredbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="centerednextbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="centerbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setrigidcolumnhsize" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setrigidcolumnbalance" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vboxtohbox" type="environment" file="supp-box.mkiv"/>
+
+ <cd:command name="vboxtohboxseparator" type="environment" file="supp-box.mkiv"/>
+
+ <cd:command name="convertvboxtohbox" file="supp-box.mkiv"/>
+
+ <cd:command name="hboxestohbox" type="environment" file="supp-box.mkiv"/>
+
+ <cd:command name="unhhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:delimiter name="with"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="hhbox" file="supp-box.mkiv"/>
+
+ -->
+
+ <cd:command name="hboxofvbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcontent" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlay" type="environment" file="supp-box.mkiv"/>
+
+ <cd:command name="fakebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ltop" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctop" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rtop" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefthbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="midhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="righthbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="boxofsize" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none" list="yes" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="limitatelines" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fittopbaselinegrid" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="boxcursor" file="supp-box.mkiv"/>
+
+ <cd:command name="placedbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="topbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bottombox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefttopbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="righttopbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftbottombox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightbottombox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="topleftbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="toprightbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bottomleftbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bottomrightbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="middlebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="baselinemiddlebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="baselineleftbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="baselinerightbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lrtbbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="toplinebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setstackbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="initializeboxstack" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="restorebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="foundbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifboxelse" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localpushbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localpopbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalpushbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalpopbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removedepth" file="supp-box.mkiv"/>
+
+ <cd:command name="obeydepth" file="supp-box.mkiv"/>
+
+ <cd:command name="undepthed" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removebottomthings" file="supp-box.mkiv"/>
+
+ <cd:command name="removelastskip" file="supp-box.mkiv"/>
+
+ <cd:command name="makestrutofbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="raisebox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lowerbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="halfwaybox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="depthonlybox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalvbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalvtop" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalvcenter" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalhpack" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="naturalvpack" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="frozenhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setboxllx" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setboxlly" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gsetboxllx" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gsetboxlly" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getboxllx" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getboxlly" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directgetboxllx" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directgetboxlly" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shownextbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spreadhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="minimalhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nodetostring" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getnaturaldimensions" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lastnaturalboxwd" file="supp-box.mkiv"/>
+
+ <cd:command name="lastnaturalboxht" file="supp-box.mkiv"/>
+
+ <cd:command name="lastnaturalboxdp" file="supp-box.mkiv"/>
+
+ <cd:command name="naturalwd" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelserighttoleftinbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifrighttoleftinboxelse" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="righttolefthbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefttorighthbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="righttoleftvbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefttorightvbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="righttoleftvtop" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lefttorightvtop" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="autodirhbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="autodirvbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="autodirvtop" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftorrighthbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftorrightvbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftorrightvtop" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ibox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="obox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definehbox" file="spac-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hbox" generated="yes" variant="generated" file="spac-ali.mkiv">
+ <cd:sequence>
+ <cd:string value="hbox"/>
+ <cd:variable value="box"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-buffer.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-buffer.xml
new file mode 100644
index 00000000000..ad1ffd51942
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-buffer.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="doifelsebuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-buffer"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifbufferelse" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-buffer"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetbuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buffer" type="environment" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grabbufferdata" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-category-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grabbufferdatadirect" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buffer" type="environment" begin="set" end="end" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-buffer-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbuffer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getbuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdefinedbuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinebuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="buffer" type="environment" generated="yes" variant="generated" file="buff-ini.mkiv">
+ <cd:sequence>
+ <cd:variable value="buffer"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="getbuffer" generated="yes" variant="generated" file="buff-ini.mkiv">
+ <cd:sequence>
+ <cd:string value="get"/>
+ <cd:variable value="buffer"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="hiding" type="environment" file="buff-ini.mkiv"/>
+
+ <cd:command name="processtexbuffer" file="buff-ini.mkiv">
+ <cd:sequence>
+ <cd:string value="processTEXbuffer"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savebuffer" variant="1" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-list"/>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savebuffer" variant="2" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="list">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="file">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxluabuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mkvibuffer" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getbufferdata" file="buff-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typebuffer" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-list-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typebuffer" generated="yes" variant="generated" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:string value="type"/>
+ <cd:variable value="buffer"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typedefinedbuffer" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-button.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-button.xml
new file mode 100644
index 00000000000..1f6dfd5bfe0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-button.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definebutton" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbutton" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="hidden"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupbuttons" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="button" generated="yes" variant="generated" file="scrn-but.mkvi">
+ <cd:sequence>
+ <cd:variable value="button"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="button" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlaybutton" variant="1" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlaybutton" variant="2" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPmenubuttons" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlayrollbutton" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepushbutton" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcontentframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pushbutton" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepushsymbol" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="n"/>
+ <cd:constant type="r"/>
+ <cd:constant type="d"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="psh" variant="button" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="psh" type="environment" variant="button" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rollbutton" variant="1" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ <cd:resolve name="string-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rollbutton" variant="2" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:resolve name="string-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rob" variant="button" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rob" variant="button" type="environment" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-capitals.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-capitals.xml
new file mode 100644
index 00000000000..bfbb6bb2bfb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-capitals.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecapitals" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcapitals"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcapitals" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="sc">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcharactercasing" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="WORD"/>
+ <cd:constant type="word"/>
+ <cd:constant type="Word"/>
+ <cd:constant type="Words"/>
+ <cd:constant type="capital"/>
+ <cd:constant type="Capital"/>
+ <cd:constant type="none"/>
+ <cd:constant type="random"/>
+ <cd:constant type="mixed"/>
+ <cd:constant type="camel"/>
+ <cd:constant type="cap"/>
+ <cd:constant type="Cap"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="WORD" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="word" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Word" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Words" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="camel" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="WORDS" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="words" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pseudosmallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pseudoSmallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pseudoSmallCapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pseudoMixedCapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="realsmallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="realSmallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="realSmallCapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="notsmallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Smallcapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="SmallCapped" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="autocap" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mixedcaps" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="kap" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Caps" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uppercased" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lowercased" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="randomizetext" file="typo-cap.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="randomized" type="environment" file="typo-cap.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-catcodes.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-catcodes.xml
new file mode 100644
index 00000000000..7c3f649d558
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-catcodes.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="texcode" type="environment" file="catc-ctx.mkiv"/>
+
+ <cd:command name="contextcode" type="environment" file="catc-ctx.mkiv"/>
+
+ <cd:command name="contextdefinitioncode" type="environment" file="catc-ctx.mkiv"/>
+
+ <cd:command name="protect" type="environment" begin="un" end="​" file="catc-def.mkiv"/><!-- end="zero width space" -->
+
+ <cd:command name="newcatcodetable" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="catcodetable" type="environment" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="extendedcatcodetable" type="environment" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installactivecharacter" file="catc-act.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineactivecharacter" file="catc-act.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installanddefineactivecharacter" file="catc-act.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="makecharacteractive" file="catc-act.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="permitcircumflexescape" file="catc-ini.mkiv"/>
+
+ <cd:command name="permitcaretescape" file="catc-ini.mkiv"/>
+
+ <cd:command name="letcatcodecommand" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defcatcodecommand" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uedcatcodecommand" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="catcodetable" type="environment" begin="push" end="pop" file="catc-ini.mkiv"/>
+
+ <cd:command name="restorecatcodes" file="catc-ini.mkiv"/>
+
+ <cd:command name="setcatcodetable" file="catc-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tracecatcodetables" file="catc-ini.mkiv"/>
+
+ <cd:command name="catcodetablename" file="catc-ini.mkiv"/>
+
+ <cd:command name="rescan" file="catc-sym.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rescanwithsetup" file="catc-sym.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-character.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-character.xml
new file mode 100644
index 00000000000..47bc714fa6a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-character.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="letteropenbrace" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterclosebrace" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterampersand" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterless" file="catc-sym.mkiv"/>
+
+ <cd:command name="lettermore" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterhash" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterdoublequote" file="catc-sym.mkiv"/>
+
+ <cd:command name="lettersinglequote" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterdollar" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterpercent" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterhat" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterunderscore" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterbar" file="catc-sym.mkiv"/>
+
+ <cd:command name="lettertilde" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterbackslash" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterslash" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterquestionmark" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterat" file="catc-sym.mkiv"/>
+
+ <cd:command name="lettercolon" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterescape" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterbgroup" file="catc-sym.mkiv"/>
+
+ <cd:command name="letteregroup" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterleftbrace" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterrightbrace" file="catc-sym.mkiv"/>
+
+ <cd:command name="letterexclamationmark" file="catc-sym.mkiv"/>
+
+ <cd:command name="utfchar" file="char-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="safechar" file="char-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkedchar" file="char-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textormathchar" file="char-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chardescription" file="char-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="percent" file="enco-ini.mkiv"/>
+
+ <cd:command name="procent" file="enco-ini.mkiv"/>
+
+ <cd:command name="ampersand" file="enco-ini.mkiv"/>
+
+ <cd:command name="dollar" file="enco-ini.mkiv"/>
+
+ <cd:command name="hash" file="enco-ini.mkiv"/>
+
+ <cd:command name="hyphen" file="enco-ini.mkiv"/>
+
+ <cd:command name="lowerleftsingleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="lowerleftdoubleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="lowerrightsingleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="lowerrightdoubleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperleftsingleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperleftdoubleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperrightsingleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperrightdoubleninequote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperleftsinglesixquote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperleftdoublesixquote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperrightsinglesixquote" file="enco-ini.mkiv"/>
+
+ <cd:command name="upperrightdoublesixquote" file="enco-ini.mkiv"/>
+
+ <cd:command name="leftsubguillemot" file="enco-ini.mkiv"/>
+
+ <cd:command name="rightsubguillemot" file="enco-ini.mkiv"/>
+
+ <cd:command name="textcontrolspace" file="enco-ini.mkiv"/>
+
+ <cd:command name="textvisiblespace" file="enco-ini.mkiv"/>
+
+ <cd:command name="textminus" file="enco-ini.mkiv"/>
+
+ <cd:command name="textplus" file="enco-ini.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-characteralign.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-characteralign.xml
new file mode 100644
index 00000000000..2ee8d0cd94f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-characteralign.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="singalcharacteralign" file="typo-tal.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcharacteralign" file="typo-tal.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="number" method="apply"/>
+ <cd:constant type="cd:text" prefix="text" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcharacteralign" file="typo-tal.mkiv"/>
+
+ <cd:command name="alignmentcharacter" file="typo-tal.mkiv"/>
+
+ <cd:command name="characteralign" type="environment" file="typo-tal.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="number" method="apply"/>
+ <cd:constant type="cd:text" prefix="text" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkcharacteralign" file="typo-tal.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-characterspacing.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-characterspacing.xml
new file mode 100644
index 00000000000..cb54030c785
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-characterspacing.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecharacterspacing" file="typo-spa.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcharacterspacing" file="typo-spa.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="0"/>
+ <cd:constant type="1"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcharacterspacing" file="typo-spa.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcharacterspacing" file="typo-spa.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-characterstripping.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-characterstripping.xml
new file mode 100644
index 00000000000..cd89ac06541
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-characterstripping.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setcharacterstripping" file="typo-rep.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcharacterstripping" file="typo-rep.mkiv"/>
+
+ <cd:command name="forcecharacterstripping" file="typo-rep.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-charwidth.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-charwidth.xml
new file mode 100644
index 00000000000..63240327a92
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-charwidth.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="charwidthlanguage" file="typo-lan.mkiv"/>
+
+ <cd:command name="averagecharwidth" file="typo-lan.mkiv"/>
+
+ <cd:command name="languagecharwidth" file="typo-lan.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-language"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-chemical.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-chemical.xml
new file mode 100644
index 00000000000..d300f90089f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-chemical.xml
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="molecule" file="chem-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chem" file="chem-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupchemical" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="strut">
+ <cd:inherit name="value-strut"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rotation">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symalign">
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="axis">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="size">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupchemicals" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupchemicalframed" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definechemical" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definechemicalsymbol" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chemicalsymbol" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chemicaltext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chemical" type="environment" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="structurechemical" type="environment" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="chemical" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-text-list"/>
+ <cd:resolve name="keyword-text-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="structurechemical" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-text-list"/>
+ <cd:resolve name="keyword-text-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="chemicaltoptext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chemicalbottext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chemicalmidtext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="toptext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bottext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="midtext" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="definechemicals" file="chem-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupchemical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-cleaning.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-cleaning.xml
new file mode 100644
index 00000000000..d982a5dd5ee
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-cleaning.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="punctuation" type="environment" begin="push" end="pop" file="typo-chr.mkiv"/>
+
+ <cd:command name="removepunctuation" file="typo-chr.mkiv"/>
+
+ <cd:command name="markcontent" file="typo-chr.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="markedcontent" type="environment" file="typo-chr.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removemarkedcontent" file="typo-chr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcharactercleaning" file="typo-cln.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-clipping.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-clipping.xml
new file mode 100644
index 00000000000..aa152a85bd1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-clipping.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupclipping" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="clip" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupclipping"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-collector.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-collector.xml
new file mode 100644
index 00000000000..dab49f14cb8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-collector.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="rotation">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="corner">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top" default="yes"/>
+ <cd:constant type="bottom"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:resolve name="value-aligned"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="composedcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="adaptcollector" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="collectedtext" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-color.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-color.xml
new file mode 100644
index 00000000000..3f98914e4aa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-color.xml
@@ -0,0 +1,597 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="negatecolorbox" file="colo-ext.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colorintent" type="environment" file="colo-ext.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="knockout"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overprint" type="environment" file="colo-ext.mkiv"/>
+
+ <cd:command name="knockout" type="environment" file="colo-ext.mkiv"/>
+
+ <cd:command name="textcolorintent" type="environment" file="colo-ext.mkiv"/>
+
+ <cd:command name="definecolorgroup" file="colo-grp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="gray"/>
+ <cd:constant type="rgb" default="yes"/>
+ <cd:constant type="cmyk"/>
+ <cd:constant type="spot"/>
+ </cd:keywords>
+ <cd:triplet list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecolor" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="r">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="g">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="b">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="c">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="k">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="h">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="s">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="v">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="a">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="multiply"/>
+ <cd:constant type="screen"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="softlight"/>
+ <cd:constant type="hardlight"/>
+ <cd:constant type="colordodge"/>
+ <cd:constant type="colorburn"/>
+ <cd:constant type="darken"/>
+ <cd:constant type="lighten"/>
+ <cd:constant type="difference"/>
+ <cd:constant type="exclusion"/>
+ <cd:constant type="hue"/>
+ <cd:constant type="saturation"/>
+ <cd:constant type="color"/>
+ <cd:constant type="luminosity"/>
+ </cd:parameter>
+ <cd:parameter name="t">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecolor" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineglobalcolor" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineglobalcolor" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definenamedcolor" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definenamedcolor" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineprocesscolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-color-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definespotcolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-color"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="a">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="multiply"/>
+ <cd:constant type="screen"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="softlight"/>
+ <cd:constant type="hardlight"/>
+ <cd:constant type="colordodge"/>
+ <cd:constant type="colorburn"/>
+ <cd:constant type="darken"/>
+ <cd:constant type="lighten"/>
+ <cd:constant type="difference"/>
+ <cd:constant type="exclusion"/>
+ <cd:constant type="hue"/>
+ <cd:constant type="saturation"/>
+ <cd:constant type="color"/>
+ <cd:constant type="luminosity"/>
+ </cd:parameter>
+ <cd:parameter name="t">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="e">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="p">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemultitonecolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:color">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="definespotcolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetransparency" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchtocolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="color" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="graycolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colored" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colored" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="color" type="environment" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directcolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directcolored" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directcolored" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="definecolor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentcolor" type="environment" file="colo-ini.mkiv"/>
+
+ <cd:command name="colorset" type="environment" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usecolors" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcolors" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="spot">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="rgb">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cmyk">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="pagecolormodel">
+ <cd:constant type="auto"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ <cd:constant type="none" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="color" type="environment" begin="push" end="pop" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="color" type="environment" begin="save" end="restore" file="colo-ini.mkiv"/>
+
+ <cd:command name="definepalet" variant="1" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:name">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepalet" variant="2" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getpaletsize" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="paletsize" file="colo-ini.mkiv"/>
+
+ <cd:command name="setuppalet" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcolormodell" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="black"/>
+ <cd:constant type="bw"/>
+ <cd:constant type="gray"/>
+ <cd:constant type="rgb"/>
+ <cd:constant type="cmyk"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="protectedcolors" type="environment" file="colo-ini.mkiv"/>
+
+ <cd:command name="defineintermediatecolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:color"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="a">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="t">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecolor" file="color-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcolorelse" file="color-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcolor" file="color-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcolor" type="environment" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPcolor" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPcoloronly" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPtransparency" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPoptions" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colorvalue" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grayvalue" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colorcomponents" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="transparencycomponents" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcolorcomponents" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseblack" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifblackelse" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-color"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedrawingblack" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdrawingblackelse" file="colo-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcolorbar" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcolor" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcolorset" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcolorcomponents" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showpalet" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="horizontal" default="yes"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="number"/>
+ <cd:constant type="value"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comparepalet" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcolorgroup" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="horizontal" default="yes"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="number"/>
+ <cd:constant type="value"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comparecolorgroup" file="colo-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-columns.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-columns.xml
new file mode 100644
index 00000000000..154d380725b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-columns.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupcolumns" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="background"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="direction">
+ <cd:constant type="left"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="balance">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="tolerance">
+ <cd:constant type="setuptolerance"/>
+ </cd:parameter>
+ <cd:parameter name="blank">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="ntop">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="columns" type="environment" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcolumnspan" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="columnspan" type="environment" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcolumnspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setsimplecolumnhsize" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplecolumns" type="environment" file="page-mul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setsimplecolumnhsize"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-combination.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-combination.xml
new file mode 100644
index 00000000000..4e7ea2d5201
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-combination.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecombination" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcombination" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="label"/>
+ <cd:constant type="text" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupcombinations" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="combination" type="environment" variant="1" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:matrix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="combination" type="environment" variant="2" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="content" type="environment" variant="combination" file="pack-com.mkiv"/>
+
+ <cd:command name="caption" type="environment" variant="combination" file="pack-com.mkiv"/>
+
+ -->
+
+ <cd:command name="floatcombination" type="environment" variant="1" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:matrix"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="floatcombination" type="environment" variant="2" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcombination"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-commandhandler.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-commandhandler.xml
new file mode 100644
index 00000000000..210690d3e0e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-commandhandler.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="installparameterhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installrootparameterhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installparameterhashhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installparametersethandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installstyleandcolorhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdefinehandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installsetuphandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installswitchsetuphandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installautosetuphandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installbasicparameterhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installbasicautosetuphandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installcommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installswitchcommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installautocommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installsimplecommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdirectparameterhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdirectsetuphandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdirectparametersethandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdirectstyleandcolorhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdirectcommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installsetuponlycommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="relateparameterhandlers" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installactionhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installnamespace" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installcorenamespace" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definenamespace" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="name">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="parent">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="setup">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="set">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="list"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listnamespaces" file="mult-aux.mkiv"/>
+
+ <cd:command name="showparentchain" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcommandhandlerelse" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotcommandhandler" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdefinitionset" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installdefinitionsetmember" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installparentinjector" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installframedcommandhandler" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installframedautocommandhandler" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installsimpleframedcommandhandler" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-comment.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-comment.xml
new file mode 100644
index 00000000000..52d54398bdc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-comment.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecomment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcomment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="hidden"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="Comment"/>
+ <cd:constant type="Help"/>
+ <cd:constant type="Insert"/>
+ <cd:constant type="Key"/>
+ <cd:constant type="Newparagraph"/>
+ <cd:constant type="Note"/>
+ <cd:constant type="Paragraph"/>
+ <cd:constant type="Default"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="xml"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="textlayer">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="leftedge"/>
+ <cd:constant type="rightedge"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="text"/>
+ <cd:constant type="high" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:sequence>
+ <cd:variable value="comment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comment" type="environment" generated="yes" variant="generated" file="scrn-wid.mkvi">
+ <cd:sequence>
+ <cd:variable value="comment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecomments" file="scrn-wid.mkvi"/>
+
+ <cd:command name="comment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comment" type="environment" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcomment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-argument.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-argument.xml
new file mode 100644
index 00000000000..9e74298007d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-argument.xml
@@ -0,0 +1,497 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * IDENTIFIER -->
+
+ <cd:define name="argument-name">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-name-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-name-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-name-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * NUMBER -->
+
+ <cd:define name="argument-number">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-number-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-number-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-number-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * TEXT -->
+
+ <cd:define name="argument-text">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-text-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-text-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-text-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * FILE -->
+
+ <cd:define name="argument-file">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-file-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-file-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-file-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * DIMENSION -->
+
+ <cd:define name="argument-dimension">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dimension-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dimension-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dimension-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * DUMMY -->
+
+ <cd:define name="argument-dummy">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dummy-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dummy-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-dummy-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * KEY -->
+
+ <cd:define name="argument-key">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-key-optional">
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-key-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-key-list-optional">
+ <cd:keywords delimiters="braces" list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * REFERENCE -->
+
+ <cd:define name="argument-reference">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-reference-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * COMMAND -->
+
+ <cd:define name="argument-command">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="argument-command-list">
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * VALUE -->
+
+ <cd:define name="argument-value">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:value"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * FONT -->
+
+ <cd:define name="argument-font">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * COLOR -->
+
+ <cd:define name="argument-color">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * NODE -->
+
+ <cd:define name="argument-node">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:node"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * LPATH -->
+
+ <cd:define name="argument-lpath">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:lpath"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * XMLSETUP -->
+
+ <cd:define name="argument-xmlsetup">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:xmlsetup"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * SECTION -->
+
+ <cd:define name="argument-section">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * LIST -->
+
+ <cd:define name="argument-list">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * MARK -->
+
+ <cd:define name="argument-mark">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * LANGUAGE -->
+
+ <cd:define name="argument-language">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * FIRST -->
+
+ <cd:define name="argument-first">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:first"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * LAST -->
+
+ <cd:define name="argument-last">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:last"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * BUFFER -->
+
+ <cd:define name="argument-buffer">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * SETUP -->
+
+ <cd:define name="argument-setup">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:setup"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * CATEGORY -->
+
+ <cd:define name="argument-category">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * CHARACTER -->
+
+ <cd:define name="argument-character">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * CSNAME -->
+
+ <cd:define name="argument-csname">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * TRUE -->
+
+ <cd:define name="argument-true">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * FALSE -->
+
+ <cd:define name="argument-false">
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * ALIGNLINE -->
+
+ <cd:define name="argument-alignline">
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-alignline"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * ALIGNSIMPLE -->
+
+ <cd:define name="argument-alignsimple">
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-alignsimple"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * BTXFIELD -->
+
+ <cd:define name="argument-btxfield">
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-btxfield"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... {...} -->
+ <!-- -->
+ <!-- * BTXAUTHOR -->
+
+ <cd:define name="argument-btxauthor">
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-btxauthor"/>
+ </cd:keywords>
+ </cd:define>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-assignment.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-assignment.xml
new file mode 100644
index 00000000000..0f11d0137c2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-assignment.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * SECTIONDATA -->
+
+ <cd:define name="assignment-sectiondata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-sectiondata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * FLOATDATA -->
+
+ <cd:define name="assignment-floatdata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:resolve name="value-floatlocation"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-floatdata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:resolve name="value-floatlocation"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * REGISTERDATA -->
+
+ <cd:define name="assignment-registerdata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="label">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="keys">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="keys:1">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keys:2">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keys:3">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:1">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:2">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:3">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-registerdata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="label">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="keys">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="keys:1">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keys:2">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keys:3">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:1">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:2">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="entries:3">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * CONSTRUCTIONDATA -->
+
+ <cd:define name="assignment-constructiondata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-constructiondata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * USERDATA -->
+
+ <cd:define name="assignment-userdata">
+ <cd:assignments>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-userdata-optional">
+ <cd:assignments optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-userdata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-userdata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- * LABELDATA -->
+
+ <cd:define name="assignment-labeldata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:key"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-labeldata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:key"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [..,.=.,..] -->
+ <!-- -->
+ <!-- CITEDATA -->
+
+ <cd:define name="assignment-citedata-list">
+ <cd:assignments list="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:resolve name="value-btxalternative"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupbtx"/>
+ </cd:assignments>
+ </cd:define>
+
+ <cd:define name="assignment-citedata-list-optional">
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:resolve name="value-btxalternative"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupbtx"/>
+ </cd:assignments>
+ </cd:define>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-definitions.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-definitions.xml
new file mode 100644
index 00000000000..1bb84efdcf2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-definitions.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:interfacefile filename="i-common-argument.xml"/>
+ <cd:interfacefile filename="i-common-assignment.xml"/>
+ <cd:interfacefile filename="i-common-keyword.xml"/>
+ <cd:interfacefile filename="i-common-string.xml"/>
+ <cd:interfacefile filename="i-common-value.xml"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-keyword.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-keyword.xml
new file mode 100644
index 00000000000..15eed8628d6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-keyword.xml
@@ -0,0 +1,704 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * DIMENSION -->
+
+ <cd:define name="keyword-dimension">
+ <cd:keywords>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dimension-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dimension-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dimension-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * NUMBER -->
+
+ <cd:define name="keyword-number">
+ <cd:keywords>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-number-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-number-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-number-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * REFERENCE -->
+
+ <cd:define name="keyword-reference">
+ <cd:keywords>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-reference-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-reference-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-reference-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * IDENTIFIER -->
+
+ <cd:define name="keyword-name">
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-name-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-name-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-name-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * SECTION -->
+
+ <cd:define name="keyword-section">
+ <cd:keywords>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-section-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-section-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-section-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * LANGUAGE -->
+
+ <cd:define name="keyword-language">
+ <cd:keywords>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-language-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-language-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-language-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * LIST -->
+
+ <cd:define name="keyword-list">
+ <cd:keywords>
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-list-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-list-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-list-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:list"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * MARK -->
+
+ <cd:define name="keyword-mark">
+ <cd:keywords>
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-mark-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-mark-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-mark-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:mark"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * SINGULAR -->
+
+ <cd:define name="keyword-singular">
+ <cd:keywords>
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-singular-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-singular-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-singular-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:singular"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * PLURAL -->
+
+ <cd:define name="keyword-plural">
+ <cd:keywords>
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-plural-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-plural-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-plural-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:plural"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * COLOR -->
+
+ <cd:define name="keyword-color">
+ <cd:keywords>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-color-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-color-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-color-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * TEXT -->
+
+ <cd:define name="keyword-text">
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-text-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-text-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-text-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * COMMAND -->
+
+ <cd:define name="keyword-command">
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-command-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-command-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-command-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * BUFFER -->
+
+ <cd:define name="keyword-buffer">
+ <cd:keywords>
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-buffer-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-buffer-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-buffer-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * CATEGORY -->
+
+ <cd:define name="keyword-category">
+ <cd:keywords>
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-category-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-category-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-category-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:category"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * FILE -->
+
+ <cd:define name="keyword-file">
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-file-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-file-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-file-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * FONT -->
+
+ <cd:define name="keyword-font">
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-font-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-font-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-font-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * CSNAME -->
+
+ <cd:define name="keyword-csname">
+ <cd:keywords>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-csname-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-csname-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-csname-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * DUMMY -->
+
+ <cd:define name="keyword-dummy">
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dummy-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dummy-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-dummy-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * KEY -->
+
+ <cd:define name="keyword-key">
+ <cd:keywords>
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-key-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-key-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-key-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:key"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * URL -->
+
+ <cd:define name="keyword-url">
+ <cd:keywords>
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-url-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-url-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-url-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * TEMPLATE -->
+
+ <cd:define name="keyword-template">
+ <cd:keywords>
+ <cd:constant type="cd:template"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-template-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:template"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-template-list">
+ <cd:keywords list="yes">
+ <cd:constant type="cd:template"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-template-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:template"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * FLOATLOCATION -->
+
+ <cd:define name="keyword-floatlocation-list">
+ <cd:keywords list="yes">
+ <cd:resolve name="value-floatlocation"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-floatlocation-list-optional">
+ <cd:keywords list="yes" optional="yes">
+ <cd:resolve name="value-floatlocation"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * LAYOUTELEMENT -->
+
+ <cd:define name="keyword-layoutelement">
+ <cd:keywords>
+ <cd:constant type="date"/>
+ <cd:constant type="pagenumber"/>
+ <cd:constant type="cd:mark"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-layoutelement-optional">
+ <cd:keywords optional="yes">
+ <cd:constant type="date"/>
+ <cd:constant type="pagenumber"/>
+ <cd:constant type="cd:mark"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... [...] -->
+ <!-- -->
+ <!-- * BTXALTERNATIVE -->
+
+ <cd:define name="keyword-btxalternative">
+ <cd:keywords>
+ <cd:resolve name="value-btxalternative"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="keyword-btxalternative-optional">
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-btxalternative"/>
+ </cd:keywords>
+ </cd:define>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-string.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-string.xml
new file mode 100644
index 00000000000..8e940e6f38c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-string.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * TRUE -->
+
+ <cd:define name="string-true">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:true"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * FALSE -->
+
+ <cd:define name="string-false">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:false"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * IDENTIFIER -->
+
+ <cd:define name="string-name">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * TEXT -->
+
+ <cd:define name="string-text">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * CHARACTER -->
+
+ <cd:define name="string-character">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * NUMBER -->
+
+ <cd:define name="string-number">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <cd:define name="string-number-optional">
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * CONTENT -->
+
+ <cd:define name="string-content">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:content"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * COMMAND -->
+
+ <cd:define name="string-command">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * FILE -->
+
+ <cd:define name="string-file">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * FONT -->
+
+ <cd:define name="string-font">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * DIMENSION -->
+
+ <cd:define name="string-dimension">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * BOX -->
+
+ <cd:define name="string-box">
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:define>
+
+ <!-- * -->
+ <!-- \... ... -->
+ <!-- -->
+ <!-- * BOXOPTIONS -->
+
+ <cd:define name="string-boxoptions">
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:define>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-common-value.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-common-value.xml
new file mode 100644
index 00000000000..f111292b8f3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-common-value.xml
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!-- style = ... -->
+
+ <cd:define name="value-style">
+ <cd:constant type="cd:style"/>
+ <cd:constant type="cd:command"/>
+ </cd:define>
+
+ <!-- mathstyle = ... -->
+
+ <cd:define name="value-mathstyle">
+ <cd:constant type="display"/>
+ <cd:constant type="text"/>
+ <cd:constant type="script"/>
+ <cd:constant type="scriptscript"/>
+ <cd:constant type="cramped"/>
+ <cd:constant type="uncramped"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="small"/>
+ <cd:constant type="big"/>
+ </cd:define>
+
+ <!-- leftmargin = ... -->
+
+ <cd:define name="value-leftskip">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:define>
+
+ <!-- rightmargin = ... -->
+
+ <cd:define name="value-rightskip">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:define>
+
+ <!-- indentnext = ... -->
+
+ <cd:define name="value-indentnext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:define>
+
+ <!-- limittext = ... -->
+
+ <cd:define name="value-limittext">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:text"/>
+ </cd:define>
+
+ <!-- prefixsegments = ... -->
+
+ <cd:define name="value-prefixsegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="cd:number" method="range"/>
+ <cd:constant type="*" prefix="cd:number" method="range"/>
+ <cd:constant type="all" prefix="cd:number" method="range"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:section" prefix="cd:section" method="range"/>
+ <cd:constant type="*" prefix="cd:section" method="range"/>
+ <cd:constant type="all" prefix="cd:section" method="range"/>
+ </cd:define>
+
+ <!-- numbersegments = ... -->
+
+ <cd:define name="value-numbersegments">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="cd:number" method="range"/>
+ <cd:constant type="*" prefix="cd:number" method="range"/>
+ <cd:constant type="all" prefix="cd:number" method="range"/>
+ </cd:define>
+
+ <!-- starter = ... -->
+
+ <cd:define name="value-starter">
+ <cd:constant type="cd:command"/>
+ <cd:constant type="cd:command" prefix="cd:processor" method="apply"/>
+ </cd:define>
+
+ <!-- stopper = ... -->
+
+ <cd:define name="value-stopper">
+ <cd:constant type="cd:command"/>
+ <cd:constant type="cd:command" prefix="cd:processor" method="apply"/>
+ </cd:define>
+
+ <!-- connector = ... -->
+
+ <cd:define name="value-connector">
+ <cd:constant type="cd:command"/>
+ <cd:constant type="cd:command" prefix="cd:processor" method="apply"/>
+ </cd:define>
+
+ <!-- textstate = ... -->
+
+ <cd:define name="value-textstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="high"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="nomarking"/>
+ <cd:constant type="cd:name"/>
+ </cd:define>
+
+ <!-- pagebreak = ... -->
+
+ <cd:define name="value-pagebreak">
+ <cd:constant type="empty"/>
+ <cd:constant type="header"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="dummy"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="+" method="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="disable"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="makeup"/>
+ <cd:constant type="blank"/>
+ <cd:constant type="preference"/>
+ <cd:constant type="bigpreference"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="even"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="quadruple"/>
+ <cd:constant type="last"/>
+ <cd:constant type="lastpage"/>
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ </cd:define>
+
+ <!-- columnbreak = ... -->
+
+ <cd:define name="value-columnbreak">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="preference"/>
+ <cd:constant type="local"/>
+ <cd:constant type="force"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="cd:number"/>
+ </cd:define>
+
+ <!-- alignline = ... -->
+
+ <cd:define name="value-alignline">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="center"/>
+ <cd:constant type="max"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="inneredge"/>
+ <cd:constant type="outeredge"/>
+ <cd:constant type="backspace"/>
+ <cd:constant type="cutspace"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="leftedge"/>
+ <cd:constant type="rightedge"/>
+ </cd:define>
+
+ <!-- alignsimple = ... -->
+
+ <cd:define name="value-alignsimple">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ </cd:define>
+
+ <!-- aligned = ... -->
+
+ <cd:define name="value-aligned">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="line"/>
+ <cd:constant type="l"/>
+ <cd:constant type="c"/>
+ <cd:constant type="r"/>
+ <cd:constant type="m"/>
+ <cd:constant type="t"/>
+ <cd:constant type="b"/>
+ <cd:constant type="g"/>
+ </cd:define>
+
+ <!-- floatlocation = ... -->
+
+ <cd:define name="value-floatlocation">
+ <cd:constant type="split"/>
+ <cd:constant type="always"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="backspace"/>
+ <cd:constant type="cutspace"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="leftedge"/>
+ <cd:constant type="rightedge"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="inneredge"/>
+ <cd:constant type="outeredge"/>
+ <cd:constant type="text"/>
+ <cd:constant type="opposite"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="height"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="line" prefix="cd:sign" method="none"/>
+ <cd:constant type="halfline"/>
+ <cd:constant type="grid"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="nonumber"/>
+ <cd:constant type="none"/>
+ <cd:constant type="local"/>
+ <cd:constant type="here"/>
+ <cd:constant type="force"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="hang" prefix="cd:sign" method="none"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="tall"/>
+ <cd:constant type="both"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="offset"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="page"/>
+ <cd:constant type="leftpage"/>
+ <cd:constant type="rightpage"/>
+ <cd:constant type="somewhere"/>
+ </cd:define>
+
+ <!-- sortorder = ... -->
+
+ <cd:define name="value-sortorder">
+ <cd:constant type="default"/>
+ <cd:constant type="DIN␣5007-1"/>
+ <cd:constant type="DIN␣5007-2"/>
+ <cd:constant type="Duden"/>
+ <cd:constant type="de-DE"/>
+ <cd:constant type="de-CH"/>
+ <cd:constant type="de-AT"/>
+ <cd:constant type="ru-iso9"/>
+ <cd:constant type="ocs-scn"/>
+ <cd:constant type="cd:language"/>
+ </cd:define>
+
+ <!-- sortmethod = ... -->
+
+ <cd:define name="value-sortmethod">
+ <cd:constant type="default"/>
+ <cd:constant type="before"/>
+ <cd:constant type="after"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="ch"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="zm"/>
+ <cd:constant type="pm"/>
+ <cd:constant type="mc"/>
+ <cd:constant type="zc"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="uc"/>
+ </cd:define>
+
+ <!-- referenceprefix = ... -->
+
+ <cd:define name="value-referenceprefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:define>
+
+ <!-- referencetype = ... -->
+
+ <cd:define name="value-referencetype">
+ <cd:constant type="default"/>
+ <cd:constant type="text"/>
+ <cd:constant type="title"/>
+ <cd:constant type="number"/>
+ <cd:constant type="page"/>
+ <cd:constant type="realpage"/>
+ </cd:define>
+
+ <!-- markposition = ... -->
+
+ <cd:define name="value-markposition">
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="next"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="default"/>
+ <cd:constant type="both"/>
+ <cd:constant type="all"/>
+ <cd:constant type="nocheck" prefix="first" method="range"/>
+ <cd:constant type="nocheck" prefix="last" method="range"/>
+ <cd:constant type="nocheck" prefix="previous" method="range"/>
+ <cd:constant type="nocheck" prefix="next" method="range"/>
+ <cd:constant type="nocheck" prefix="top" method="range"/>
+ <cd:constant type="nocheck" prefix="bottom" method="range"/>
+ </cd:define>
+
+ <!-- strut = ... -->
+
+ <cd:define name="value-strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cap"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="line"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:character"/>
+ </cd:define>
+
+ <!-- grid = ... -->
+
+ <cd:define name="value-grid">
+ <cd:constant type="normal"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="both"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="high"/>
+ <cd:constant type="one"/>
+ <cd:constant type="low"/>
+ <cd:constant type="none"/>
+ <cd:constant type="line"/>
+ <cd:constant type="strut"/>
+ <cd:constant type="box"/>
+ <cd:constant type="min"/>
+ <cd:constant type="max"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="cd:name"/>
+ </cd:define>
+
+ <!-- papersize = ... -->
+
+ <cd:define name="value-papersize">
+ <cd:constant type="A0"/>
+ <cd:constant type="A1"/>
+ <cd:constant type="A2"/>
+ <cd:constant type="A3"/>
+ <cd:constant type="A4"/>
+ <cd:constant type="A5"/>
+ <cd:constant type="A6"/>
+ <cd:constant type="A7"/>
+ <cd:constant type="A8"/>
+ <cd:constant type="A9"/>
+ <cd:constant type="A10"/>
+ <cd:constant type="A4/2"/>
+ <cd:constant type="B0"/>
+ <cd:constant type="B1"/>
+ <cd:constant type="B2"/>
+ <cd:constant type="B3"/>
+ <cd:constant type="B4"/>
+ <cd:constant type="B5"/>
+ <cd:constant type="B6"/>
+ <cd:constant type="B7"/>
+ <cd:constant type="B8"/>
+ <cd:constant type="B9"/>
+ <cd:constant type="B10"/>
+ <cd:constant type="C0"/>
+ <cd:constant type="C1"/>
+ <cd:constant type="C2"/>
+ <cd:constant type="C3"/>
+ <cd:constant type="C4"/>
+ <cd:constant type="C5"/>
+ <cd:constant type="C6"/>
+ <cd:constant type="C7"/>
+ <cd:constant type="C8"/>
+ <cd:constant type="C9"/>
+ <cd:constant type="C10"/>
+ <cd:constant type="4␣A0"/>
+ <cd:constant type="2␣A0"/>
+ <cd:constant type="C6/C5"/>
+ <cd:constant type="S3"/>
+ <cd:constant type="S4"/>
+ <cd:constant type="S5"/>
+ <cd:constant type="S6"/>
+ <cd:constant type="S8"/>
+ <cd:constant type="SL"/>
+ <cd:constant type="SM"/>
+ <cd:constant type="SW"/>
+ <cd:constant type="HD"/>
+ <cd:constant type="HD+"/>
+ <cd:constant type="HD-"/>
+ <cd:constant type="S33"/>
+ <cd:constant type="S44"/>
+ <cd:constant type="S55"/>
+ <cd:constant type="S66"/>
+ <cd:constant type="CD"/>
+ <cd:constant type="letter"/>
+ <cd:constant type="ledger"/>
+ <cd:constant type="tabloid"/>
+ <cd:constant type="legal"/>
+ <cd:constant type="folio"/>
+ <cd:constant type="executive"/>
+ <cd:constant type="A"/>
+ <cd:constant type="B"/>
+ <cd:constant type="C"/>
+ <cd:constant type="envelope␣9"/>
+ <cd:constant type="envelope␣10"/>
+ <cd:constant type="envelope␣11"/>
+ <cd:constant type="envelope␣12"/>
+ <cd:constant type="envelope␣14"/>
+ <cd:constant type="monarch"/>
+ <cd:constant type="check"/>
+ <cd:constant type="DL"/>
+ <cd:constant type="E4"/>
+ <cd:constant type="RA0"/>
+ <cd:constant type="RA1"/>
+ <cd:constant type="RA2"/>
+ <cd:constant type="RA3"/>
+ <cd:constant type="RA4"/>
+ <cd:constant type="SRA0"/>
+ <cd:constant type="SRA1"/>
+ <cd:constant type="SRA2"/>
+ <cd:constant type="SRA3"/>
+ <cd:constant type="SRA4"/>
+ <cd:constant type="G5"/>
+ <cd:constant type="E5"/>
+ <cd:constant type="A3plus"/>
+ <cd:constant type="business"/>
+ <cd:constant type="businessUS"/>
+ <cd:constant type="oversized"/>
+ <cd:constant type="undersized"/>
+ <cd:constant type="doublesized"/>
+ <cd:constant type="doubleoversized"/>
+ <cd:constant type="doublewide"/>
+ </cd:define>
+
+ <!-- btxalternative = ... -->
+
+ <cd:define name="value-btxalternative">
+ <cd:constant type="default"/>
+ <cd:constant type="category"/>
+ <cd:constant type="entry"/>
+ <cd:constant type="short"/>
+ <cd:constant type="page"/>
+ <cd:constant type="num"/>
+ <cd:constant type="textnum"/>
+ <cd:constant type="year"/>
+ <cd:constant type="index"/>
+ <cd:constant type="tag"/>
+ <cd:constant type="keywords"/>
+ <cd:constant type="author"/>
+ <cd:constant type="authoryears"/>
+ <cd:constant type="authornum"/>
+ <cd:constant type="authoryear"/>
+ </cd:define>
+
+ <!-- btxfield = ... -->
+
+ <cd:define name="value-btxfield">
+ <cd:constant type="address"/>
+ <cd:constant type="assignee"/>
+ <cd:constant type="author"/>
+ <cd:constant type="booktitle"/>
+ <cd:constant type="chapter"/>
+ <cd:constant type="day"/>
+ <cd:constant type="dayfiled"/>
+ <cd:constant type="edition"/>
+ <cd:constant type="editor"/>
+ <cd:constant type="howpublished"/>
+ <cd:constant type="institution"/>
+ <cd:constant type="journal"/>
+ <cd:constant type="language"/>
+ <cd:constant type="month"/>
+ <cd:constant type="monthfiled"/>
+ <cd:constant type="nationality"/>
+ <cd:constant type="note"/>
+ <cd:constant type="number"/>
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="organization"/>
+ <cd:constant type="pages"/>
+ <cd:constant type="publisher"/>
+ <cd:constant type="school"/>
+ <cd:constant type="series"/>
+ <cd:constant type="title"/>
+ <cd:constant type="type"/>
+ <cd:constant type="volume"/>
+ <cd:constant type="year"/>
+ <cd:constant type="yearfiled"/>
+ <cd:constant type="cd:name"/>
+ </cd:define>
+
+ <!-- btxauthor = ... -->
+
+ <cd:define name="value-btxauthor">
+ <cd:constant type="author"/>
+ <cd:constant type="editor"/>
+ </cd:define>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf b/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf
new file mode 100644
index 00000000000..e2ed2a303df
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-context.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-context.xml
new file mode 100644
index 00000000000..606950c10bb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-context.xml
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:interfacefile filename="i-common-definitions.xml"/>
+
+ <cd:interfacefile filename="i-accent.xml"/>
+ <cd:interfacefile filename="i-align.xml"/>
+ <cd:interfacefile filename="i-anchor.xml"/>
+ <cd:interfacefile filename="i-attachment.xml"/>
+ <cd:interfacefile filename="i-attribute.xml"/>
+ <cd:interfacefile filename="i-backend.xml"/>
+ <cd:interfacefile filename="i-background.xml"/>
+ <cd:interfacefile filename="i-bar.xml"/>
+ <cd:interfacefile filename="i-blackrule.xml"/>
+ <cd:interfacefile filename="i-bleed.xml"/>
+ <cd:interfacefile filename="i-block.xml"/>
+ <cd:interfacefile filename="i-bookmark.xml"/>
+ <cd:interfacefile filename="i-boxes.xml"/>
+ <cd:interfacefile filename="i-buffer.xml"/>
+ <cd:interfacefile filename="i-button.xml"/>
+ <cd:interfacefile filename="i-capitals.xml"/>
+ <cd:interfacefile filename="i-catcodes.xml"/>
+ <cd:interfacefile filename="i-character.xml"/>
+ <cd:interfacefile filename="i-characteralign.xml"/>
+ <cd:interfacefile filename="i-characterspacing.xml"/>
+ <cd:interfacefile filename="i-characterstripping.xml"/>
+ <cd:interfacefile filename="i-charwidth.xml"/>
+ <cd:interfacefile filename="i-chemical.xml"/>
+ <cd:interfacefile filename="i-cleaning.xml"/>
+ <cd:interfacefile filename="i-clipping.xml"/>
+ <cd:interfacefile filename="i-collector.xml"/>
+ <cd:interfacefile filename="i-color.xml"/>
+ <cd:interfacefile filename="i-columns.xml"/>
+ <cd:interfacefile filename="i-combination.xml"/>
+ <cd:interfacefile filename="i-commandhandler.xml"/>
+ <cd:interfacefile filename="i-comment.xml"/>
+ <cd:interfacefile filename="i-conversion.xml"/>
+ <cd:interfacefile filename="i-counter.xml"/>
+ <cd:interfacefile filename="i-dataset.xml"/>
+ <cd:interfacefile filename="i-define.xml"/>
+ <cd:interfacefile filename="i-delimitedtext.xml"/>
+ <cd:interfacefile filename="i-description.xml"/>
+ <cd:interfacefile filename="i-digits.xml"/>
+ <cd:interfacefile filename="i-dimension.xml"/>
+ <cd:interfacefile filename="i-direction.xml"/>
+ <cd:interfacefile filename="i-document.xml"/>
+ <cd:interfacefile filename="i-dummy.xml"/>
+ <cd:interfacefile filename="i-effect.xml"/>
+ <cd:interfacefile filename="i-enumeration.xml"/>
+ <cd:interfacefile filename="i-export.xml"/>
+ <cd:interfacefile filename="i-field.xml"/>
+ <cd:interfacefile filename="i-figure.xml"/>
+ <cd:interfacefile filename="i-file.xml"/>
+ <cd:interfacefile filename="i-filler.xml"/>
+ <cd:interfacefile filename="i-fillinline.xml"/>
+ <cd:interfacefile filename="i-fillinrule.xml"/>
+ <cd:interfacefile filename="i-firstline.xml"/>
+ <cd:interfacefile filename="i-fittingpage.xml"/>
+ <cd:interfacefile filename="i-floats.xml"/>
+ <cd:interfacefile filename="i-fontfamily.xml"/>
+ <cd:interfacefile filename="i-fonts.xml"/>
+ <cd:interfacefile filename="i-form.xml"/>
+ <cd:interfacefile filename="i-formula.xml"/>
+ <cd:interfacefile filename="i-fraction.xml"/>
+ <cd:interfacefile filename="i-framed.xml"/>
+ <cd:interfacefile filename="i-graphics.xml"/>
+ <cd:interfacefile filename="i-grid.xml"/>
+ <cd:interfacefile filename="i-help.xml"/>
+ <cd:interfacefile filename="i-highlight.xml"/>
+ <cd:interfacefile filename="i-hspace.xml"/>
+ <cd:interfacefile filename="i-hyphenation.xml"/>
+ <cd:interfacefile filename="i-imposition.xml"/>
+ <cd:interfacefile filename="i-indent.xml"/>
+ <cd:interfacefile filename="i-indentedtext.xml"/>
+ <cd:interfacefile filename="i-initial.xml"/>
+ <cd:interfacefile filename="i-injector.xml"/>
+ <cd:interfacefile filename="i-insertion.xml"/>
+ <cd:interfacefile filename="i-interaction.xml"/>
+ <cd:interfacefile filename="i-interactionbar.xml"/>
+ <cd:interfacefile filename="i-interactionmenu.xml"/>
+ <cd:interfacefile filename="i-interactionscreen.xml"/>
+ <cd:interfacefile filename="i-interface.xml"/>
+ <cd:interfacefile filename="i-interlinespace.xml"/>
+ <cd:interfacefile filename="i-interlinespace.xml"/>
+ <cd:interfacefile filename="i-italiccorrection.xml"/>
+ <cd:interfacefile filename="i-itemgroup.xml"/>
+ <cd:interfacefile filename="i-items.xml"/>
+ <cd:interfacefile filename="i-javascript.xml"/>
+ <cd:interfacefile filename="i-kerning.xml"/>
+ <cd:interfacefile filename="i-label.xml"/>
+ <cd:interfacefile filename="i-labeltext.xml"/>
+ <cd:interfacefile filename="i-language.xml"/>
+ <cd:interfacefile filename="i-layer.xml"/>
+ <cd:interfacefile filename="i-layout.xml"/>
+ <cd:interfacefile filename="i-linenumber.xml"/>
+ <cd:interfacefile filename="i-lines.xml"/>
+ <cd:interfacefile filename="i-linetable.xml"/>
+ <cd:interfacefile filename="i-linewidth.xml"/>
+ <cd:interfacefile filename="i-list.xml"/>
+ <cd:interfacefile filename="i-logo.xml"/>
+ <cd:interfacefile filename="i-lohi.xml"/>
+ <cd:interfacefile filename="i-lua.xml"/>
+ <cd:interfacefile filename="i-makeup.xml"/>
+ <cd:interfacefile filename="i-marginblock.xml"/>
+ <cd:interfacefile filename="i-margindata.xml"/>
+ <cd:interfacefile filename="i-marker.xml"/>
+ <cd:interfacefile filename="i-marking.xml"/>
+ <cd:interfacefile filename="i-math.xml"/>
+ <cd:interfacefile filename="i-mathalignment.xml"/>
+ <cd:interfacefile filename="i-mathcases.xml"/>
+ <cd:interfacefile filename="i-mathfence.xml"/>
+ <cd:interfacefile filename="i-mathmatrix.xml"/>
+ <cd:interfacefile filename="i-mathornament.xml"/>
+ <cd:interfacefile filename="i-mathradical.xml"/>
+ <cd:interfacefile filename="i-mathstackers.xml"/>
+ <cd:interfacefile filename="i-metapost.xml"/>
+ <cd:interfacefile filename="i-mixedcolumns.xml"/>
+ <cd:interfacefile filename="i-modes.xml"/>
+ <cd:interfacefile filename="i-modules.xml"/>
+ <cd:interfacefile filename="i-narrow.xml"/>
+ <cd:interfacefile filename="i-naturaltable.xml"/>
+ <cd:interfacefile filename="i-note.xml"/>
+ <cd:interfacefile filename="i-object.xml"/>
+ <cd:interfacefile filename="i-offset.xml"/>
+ <cd:interfacefile filename="i-opposite.xml"/>
+ <cd:interfacefile filename="i-ornament.xml"/>
+ <cd:interfacefile filename="i-output.xml"/>
+ <cd:interfacefile filename="i-overlay.xml"/>
+ <cd:interfacefile filename="i-pagebreak.xml"/>
+ <cd:interfacefile filename="i-pagecomment.xml"/>
+ <cd:interfacefile filename="i-pagefigure.xml"/>
+ <cd:interfacefile filename="i-pagegrid.xml"/>
+ <cd:interfacefile filename="i-pageinjection.xml"/>
+ <cd:interfacefile filename="i-pagelayout.xml"/>
+ <cd:interfacefile filename="i-pagenumber.xml"/>
+ <cd:interfacefile filename="i-pageselection.xml"/>
+ <cd:interfacefile filename="i-pageshift.xml"/>
+ <cd:interfacefile filename="i-pagestate.xml"/>
+ <cd:interfacefile filename="i-pairedbox.xml"/>
+ <cd:interfacefile filename="i-papersize.xml"/>
+ <cd:interfacefile filename="i-paragraph.xml"/>
+ <cd:interfacefile filename="i-paragraphnumber.xml"/>
+ <cd:interfacefile filename="i-paragraphs.xml"/>
+ <cd:interfacefile filename="i-parallel.xml"/>
+ <cd:interfacefile filename="i-parbuilder.xml"/>
+ <cd:interfacefile filename="i-pdf.xml"/>
+ <cd:interfacefile filename="i-penalty.xml"/>
+ <cd:interfacefile filename="i-periods.xml"/>
+ <cd:interfacefile filename="i-phantom.xml"/>
+ <cd:interfacefile filename="i-placement.xml"/>
+ <cd:interfacefile filename="i-position.xml"/>
+ <cd:interfacefile filename="i-positionbar.xml"/>
+ <cd:interfacefile filename="i-positioning.xml"/>
+ <cd:interfacefile filename="i-postponing.xml"/>
+ <cd:interfacefile filename="i-processor.xml"/>
+ <cd:interfacefile filename="i-profile.xml"/>
+ <cd:interfacefile filename="i-publication.xml"/>
+ <cd:interfacefile filename="i-random.xml"/>
+ <cd:interfacefile filename="i-references.xml"/>
+ <cd:interfacefile filename="i-regime.xml"/>
+ <cd:interfacefile filename="i-register.xml"/>
+ <cd:interfacefile filename="i-renderingwindow.xml"/>
+ <cd:interfacefile filename="i-replacement.xml"/>
+ <cd:interfacefile filename="i-rotatation.xml"/>
+ <cd:interfacefile filename="i-scale.xml"/>
+ <cd:interfacefile filename="i-script.xml"/>
+ <cd:interfacefile filename="i-section.xml"/>
+ <cd:interfacefile filename="i-sectionblock.xml"/>
+ <cd:interfacefile filename="i-selector.xml"/>
+ <cd:interfacefile filename="i-setups.xml"/>
+ <cd:interfacefile filename="i-shift.xml"/>
+ <cd:interfacefile filename="i-sidebar.xml"/>
+ <cd:interfacefile filename="i-smash.xml"/>
+ <cd:interfacefile filename="i-sort.xml"/>
+ <cd:interfacefile filename="i-soundtrack.xml"/>
+ <cd:interfacefile filename="i-spellchecking.xml"/>
+ <cd:interfacefile filename="i-startstop.xml"/>
+ <cd:interfacefile filename="i-stream.xml"/>
+ <cd:interfacefile filename="i-string.xml"/>
+ <cd:interfacefile filename="i-strut.xml"/>
+ <cd:interfacefile filename="i-symbol.xml"/>
+ <cd:interfacefile filename="i-synonym.xml"/>
+ <cd:interfacefile filename="i-system.xml"/>
+ <cd:interfacefile filename="i-systemlog.xml"/>
+ <cd:interfacefile filename="i-table.xml"/>
+ <cd:interfacefile filename="i-tabulation.xml"/>
+ <cd:interfacefile filename="i-tagging.xml"/>
+ <cd:interfacefile filename="i-textbackground.xml"/>
+ <cd:interfacefile filename="i-textflow.xml"/>
+ <cd:interfacefile filename="i-textrule.xml"/>
+ <cd:interfacefile filename="i-texts.xml"/>
+ <cd:interfacefile filename="i-thinrule.xml"/>
+ <cd:interfacefile filename="i-token.xml"/>
+ <cd:interfacefile filename="i-tolerance.xml"/>
+ <cd:interfacefile filename="i-tooltip.xml"/>
+ <cd:interfacefile filename="i-tracker.xml"/>
+ <cd:interfacefile filename="i-translation.xml"/>
+ <cd:interfacefile filename="i-twopassdata.xml"/>
+ <cd:interfacefile filename="i-typography.xml"/>
+ <cd:interfacefile filename="i-unit.xml"/>
+ <cd:interfacefile filename="i-variables.xml"/>
+ <cd:interfacefile filename="i-verbatim.xml"/>
+ <cd:interfacefile filename="i-version.xml"/>
+ <cd:interfacefile filename="i-viewerlayer.xml"/>
+ <cd:interfacefile filename="i-visualizer.xml"/>
+ <cd:interfacefile filename="i-vspace.xml"/>
+ <cd:interfacefile filename="i-whitespace.xml"/>
+ <cd:interfacefile filename="i-xml.xml"/>
+ <cd:interfacefile filename="i-xtable.xml"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-conversion.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-conversion.xml
new file mode 100644
index 00000000000..b4755c27c40
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-conversion.xml
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="numbers" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Numbers" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="romannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Romannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="abjadnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="abjadnodotnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="abjadnaivenumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="languagecharacters" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="languageCharacters" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alphabeticnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Alphabeticnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thainumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="devanagarinumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gurmurkhinumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gujaratinumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tibetannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="greeknumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Greeknumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="arabicnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="persiannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="arabicdecimals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="persiandecimals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="arabicexnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="koreannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="koreannumeralsp" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="koreannumeralsc" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="koreanparentnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="koreancirclenumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chinesenumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chinesecapnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chineseallnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="character" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Character" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="characters" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Characters" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="monthlong" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="monthshort" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertmonth" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="month" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MONTH" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MONTHLONG" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MONTHSHORT" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="weekday" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="WEEKDAY" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dayoftheweek" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdayoftheweek" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseleapyear" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifleapyearelse" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dayspermonth" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdayspermonth" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentdate" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="yes"/>
+ <cd:constant type="moth"/>
+ <cd:constant type="day"/>
+ <cd:constant type="weekday"/>
+ <cd:constant type="y"/>
+ <cd:constant type="yy"/>
+ <cd:constant type="Y"/>
+ <cd:constant type="m"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="M"/>
+ <cd:constant type="d"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="D"/>
+ <cd:constant type="w"/>
+ <cd:constant type="W"/>
+ <cd:constant type="space"/>
+ <cd:constant type="\␣"/>
+ <cd:constant type="month:mnem"/>
+ <cd:constant type="m:mnem"/>
+ <cd:constant type="d:ord"/>
+ <cd:constant type="day:ord"/>
+ <cd:constant type="dd:ord"/>
+ <cd:constant type="D:ord"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="date" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="d">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="currentdate"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawdate" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="currentdate"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currenttime" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="h"/>
+ <cd:constant type="m"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processmonth" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processyear" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineconversion" variant="1" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-csname"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineconversion" variant="2" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertnumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="empty"/>
+ <cd:constant type="default"/>
+ <cd:constant type="none"/>
+ <cd:constant type="month"/>
+ <cd:constant type="month:mnem"/>
+ <cd:constant type="character"/>
+ <cd:constant type="Character"/>
+ <cd:constant type="characters"/>
+ <cd:constant type="Characters"/>
+ <cd:constant type="a"/>
+ <cd:constant type="A"/>
+ <cd:constant type="Numbers"/>
+ <cd:constant type="word"/>
+ <cd:constant type="words"/>
+ <cd:constant type="Word"/>
+ <cd:constant type="Words"/>
+ <cd:constant type="n"/>
+ <cd:constant type="N"/>
+ <!-- oldstylenumerals
+ <cd:constant type="o"/>
+ <cd:constant type="O"/>
+ -->
+ <cd:constant type="romannumerals"/>
+ <cd:constant type="Romannumerals"/>
+ <cd:constant type="i"/>
+ <cd:constant type="I"/>
+ <cd:constant type="r"/>
+ <cd:constant type="R"/>
+ <cd:constant type="KR"/>
+ <cd:constant type="RK"/>
+ <cd:constant type="greek"/>
+ <cd:constant type="Greek"/>
+ <cd:constant type="g"/>
+ <cd:constant type="G"/>
+ <cd:constant type="abjadnumerals"/>
+ <cd:constant type="abjadnodotnumerals"/>
+ <cd:constant type="abjadnaivenumerals"/>
+ <cd:constant type="thainumerals"/>
+ <cd:constant type="devanagarinumerals"/>
+ <cd:constant type="gurmurkhinumerals"/>
+ <cd:constant type="gujaratinnumerals"/>
+ <cd:constant type="tibetannumerals"/>
+ <cd:constant type="greeknumerals"/>
+ <cd:constant type="Greeknumerals"/>
+ <cd:constant type="arabicnumerals"/>
+ <cd:constant type="persiannumerals"/>
+ <cd:constant type="arabicexnumerals"/>
+ <cd:constant type="arabicdecimals"/>
+ <cd:constant type="persiandecimals"/>
+ <cd:constant type="koreannumerals"/>
+ <cd:constant type="koreanparentnumerals"/>
+ <cd:constant type="koreancirclenumerals"/>
+ <cd:constant type="kr"/>
+ <cd:constant type="kr-p"/>
+ <cd:constant type="kr-c"/>
+ <cd:constant type="chinesenumerals"/>
+ <cd:constant type="chinesecapnumerals"/>
+ <cd:constant type="chineseallnumerals"/>
+ <cd:constant type="cn"/>
+ <cd:constant type="cn-c"/>
+ <cd:constant type="cn-a"/>
+ <cd:constant type="sloveniannumerals"/>
+ <cd:constant type="slovenianNumerals"/>
+ <cd:constant type="spanishnumerals"/>
+ <cd:constant type="spanishNumerals"/>
+ <cd:constant type="mathgreek"/>
+ <cd:constant type="set␣0"/>
+ <cd:constant type="set␣1"/>
+ <cd:constant type="set␣2"/>
+ <cd:constant type="set␣3"/>
+ <cd:constant type="continued"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uconvertnumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:inherit name="convertnumber"/>
+ </cd:keywords>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseconversiondefined" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifconversiondefinedelse" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseconversionnumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifconversionnumberelse" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="wordtonumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="three"/>
+ <cd:constant type="four"/>
+ <cd:constant type="five"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="highordinalstr" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ordinalstr" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ordinaldaynumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="verbosenumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VerboseNumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smallcappedromannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smallcappedcharacters" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sloveniannumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="slovenianNumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spanishnumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spanishNumerals" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unihex" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="continuednumber" file="core-con.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-counter.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-counter.xml
new file mode 100644
index 00000000000..7701d40cdde
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-counter.xml
@@ -0,0 +1,517 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <!--
+ <cd:parameter name="name">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="counter">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="page"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="way">
+ <cd:constant type="page" prefix="by" method="none"/>
+ <cd:constant type="block" prefix="by" method="none"/>
+ <cd:constant type="text" prefix="by" method="none"/>
+ <cd:constant type="head" prefix="by" method="none"/>
+ <cd:constant type="cd:section" prefix="by" method="none"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="prefixseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="prefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="numberseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="first"/>
+ <cd:constant type="previous"/>
+ <!--
+ <cd:constant type="prev"/>
+ -->
+ <cd:constant type="next"/>
+ <cd:constant type="last"/>
+ <cd:constant type="number" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="strict"/>
+ <cd:constant type="positive"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconnector">
+ <cd:resolve name="value-connector"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcounterelse" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcounterown" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="restartcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="incrementcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="decrementcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lastcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nextcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prevcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="countersubs" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savecounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="restorecounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="incrementedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="decrementedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lastcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nextcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prevcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawsubcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lastsubcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstsubcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nextsubcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prevsubcountervalue" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertedsubcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directconvertedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="first"/>
+ <cd:constant type="previous"/>
+ <!--
+ <cd:constant type="prev"/>
+ -->
+ <cd:constant type="next"/>
+ <cd:constant type="last"/>
+ <cd:constant type="number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedefinedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdefinedcounterelse" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdefinedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifundefinedcounter" file="strc-num.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineresetset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-number-list"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="definestructureresetset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-number-list"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="defineseparatorset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-connector"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-connector"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="definestructureseparatorset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-connector"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-connector"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="defineconversionset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="definestructureconversionset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="defineprefixset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-section-list"/>
+ <cd:resolve name="keyword-section-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="definestructureprefixset" file="strc-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:name" prefix="cd:sectionblock" method="range"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-section-list"/>
+ <cd:resolve name="keyword-section-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-dataset.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-dataset.xml
new file mode 100644
index 00000000000..914fe0af141
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-dataset.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definedataset" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdataset"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupdataset" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional-list"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="delay">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdataset" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="datasetvariable" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:key"/>
+ <cd:constant type="realpage"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-define.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-define.xml
new file mode 100644
index 00000000000..0d0398e5d03
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-define.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="define" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineexpandable" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-delimitedtext.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-delimitedtext.xml
new file mode 100644
index 00000000000..24fa581fd29
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-delimitedtext.xml
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definedelimitedtext" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupdelimitedtext" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="font"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="margin" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="nextleft">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="nextright">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="spacebefore">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="spaceafter">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:resolve name="value-rightskip"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="symcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimitedtext" generated="yes" variant="generated" file="typo-del.mkiv">
+ <cd:sequence>
+ <cd:variable value="delimitedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimitedtext" type="environment" generated="yes" variant="generated" file="typo-del.mkiv">
+ <cd:sequence>
+ <cd:variable value="delimitedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimitedtext" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimitedtext" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimited" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="delimited" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quotation" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quotation" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quote" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quote" type="environment" file="typo-del.mkiv"/>
+
+ <cd:command name="blockquote" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="blockquote" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="speech" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="speech" type="environment" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="startnarrower"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupquotation" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupquote" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdelimitedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsentence" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsentence" type="environment" file="typo-del.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-description.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-description.xml
new file mode 100644
index 00000000000..0204b3466c3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-description.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definedescription" file="strc-des.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdescription"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupdescription" file="strc-des.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <!-- begin construction values -->
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="headcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="top"/>
+ <cd:constant type="command"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="headalign">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="none"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <!-- end construction values -->
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupdescriptions" file="strc-des.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupdescription"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="description" type="environment" generated="yes" variant="generated:1" file="strc-des.mkvi">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="description" type="environment" generated="yes" variant="generated:2" file="strc-des.mkvi">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="description" generated="yes" variant="generated" file="strc-des.mkvi">
+ <cd:sequence>
+ <cd:variable value="description"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-digits.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-digits.xml
new file mode 100644
index 00000000000..325febab3a2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-digits.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setdigitsmanipulation" file="typo-dig.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetdigitsmanipulation" file="typo-dig.mkiv"/>
+
+ <cd:command name="equaldigits" file="typo-dig.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dummydigit" file="typo-dig.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-dimension.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-dimension.xml
new file mode 100644
index 00000000000..2962a3aef68
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-dimension.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="assigndimension" file="mult-dim.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="small" prefix="cd:sign" method="none"/>
+ <cd:constant type="medium" prefix="cd:sign" method="none"/>
+ <cd:constant type="big" prefix="cd:sign" method="none"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assignalfadimension" file="mult-dim.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assignwidth" file="mult-dim.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assignvalue" file="mult-dim.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-direction.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-direction.xml
new file mode 100644
index 00000000000..725e215a308
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-direction.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupdirections" file="typo-dir.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="bidi">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="default" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="fences">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdirection" file="typo-dir.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetdirection" file="typo-dir.mkiv"/>
+
+ <!--
+
+ <cd:command name="lefttorightmark" file="typo-dir.mkiv"/>
+
+ <cd:command name="righttoleftmark" file="typo-dir.mkiv"/>
+
+ <cd:command name="lrm" file="typo-dir.mkiv"/>
+
+ <cd:command name="rlm" file="typo-dir.mkiv"/>
+
+ -->
+
+ <cd:command name="showdirsinmargin" file="supp-dir.mkiv"/>
+
+ <cd:command name="istltdir" file="supp-dir.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="TLT"/>
+ <cd:constant type="TRT"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="istrtdir" file="supp-dir.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="TLT"/>
+ <cd:constant type="TRT"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-document.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-document.xml
new file mode 100644
index 00000000000..739c6b5c44f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-document.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="text" type="environment" file="file-job.mkvi"/>
+
+ <cd:command name="text" type="environment" begin="autostart" end="autostop" file="file-job.mkvi"/>
+
+ <cd:command name="notext" type="environment" file="file-job.mkvi"/>
+
+ <cd:command name="environment" type="environment" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="environment" type="environment" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="environment" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="environment" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useenvironment" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentenvironment" file="file-job.mkvi"/>
+
+ <cd:command name="project" type="environment" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="project" type="environment" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="project" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="project" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useproject" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentproject" file="file-job.mkvi"/>
+
+ <cd:command name="product" type="environment" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="product" type="environment" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="product" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="product" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useproduct" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentproduct" file="file-job.mkvi"/>
+
+ <cd:command name="component" type="environment" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="component" type="environment" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="*"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="component" variant="1" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="component" variant="2" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usecomponent" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentcomponent" file="file-job.mkvi"/>
+
+ <cd:command name="document" type="environment" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupdocument"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupdocument" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="metadata:author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="metadata:title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="metadata:subject">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="metadata:keywords">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="documentvariable" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-dummy.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-dummy.xml
new file mode 100644
index 00000000000..452ac311e80
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-dummy.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="getdummyparameters" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dummyparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directdummyparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdummyparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letdummyparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usedummystyleandcolor" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usedummystyleparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usedummycolorparameter" file="mult-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-effect.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-effect.xml
new file mode 100644
index 00000000000..c46c689e23a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-effect.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineeffect" file="attr-eff.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupeffect"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupeffect" file="attr-eff.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="command"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="both"/>
+ <cd:constant type="hidden"/>
+ <cd:constant type="stretch"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="effect" type="environment" file="attr-eff.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="effect" type="environment" generated="yes" variant="generated" file="attr-eff.mkiv">
+ <cd:sequence>
+ <cd:variable value="effect"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="effect" file="attr-eff.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-enumeration.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-enumeration.xml
new file mode 100644
index 00000000000..abd1da232ef
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-enumeration.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineenumerations" file="strc-enu.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupenumeration"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupenumeration" file="strc-enu.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titledistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titlestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="titlecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="titlecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="starter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="coupling">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="counter">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <!-- begin construction values -->
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="headcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="top" default="yes"/>
+ <cd:constant type="command"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="headalign">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="none"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <!-- end construction values -->
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupenumerations" file="strc-enu.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupenumeration"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="enumeration" type="environment" generated="yes" variant="generated:1" file="strc-enu.mkvi">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enumeration" type="environment" generated="yes" variant="generated:2" file="strc-enu.mkvi">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enumeration" generated="yes" variant="generated" file="strc-enu.mkvi">
+ <cd:sequence>
+ <cd:variable value="enumeration"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-export.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-export.xml
new file mode 100644
index 00000000000..40c73ee51ea
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-export.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setelementexporttag" file="back-exp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="export" default="yes"/>
+ <cd:constant type="nature"/>
+ <cd:constant type="pdf"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="inline"/>
+ <cd:constant type="display"/>
+ <cd:constant type="mixed"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupexport" file="back-exp.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="align">
+ <cd:constant type="flushleft"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="html"/>
+ <cd:constant type="div"/>
+ </cd:parameter>
+ <cd:parameter name="properties">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="hyphen">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="svgstyle">
+ <cd:constant type=""/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="cssfile">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="firstpage">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="lastpage">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-field.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-field.xml
new file mode 100644
index 00000000000..67ff40ccf07
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-field.xml
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="presetfieldsymbols" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefieldcategory" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfieldcategory" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="radio"/>
+ <cd:constant type="sub"/>
+ <cd:constant type="text"/>
+ <cd:constant type="line"/>
+ <cd:constant type="push"/>
+ <cd:constant type="check"/>
+ <cd:constant type="signature"/>
+ </cd:parameter>
+ <cd:parameter name="values">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="default">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="fieldframecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="fieldbackgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="center"/>
+ <cd:constant type="flushright"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="fieldlayer">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="readonly"/>
+ <cd:constant type="required"/>
+ <cd:constant type="protected"/>
+ <cd:constant type="sorted"/>
+ <cd:constant type="unavailable"/>
+ <cd:constant type="nocheck"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="file"/>
+ <cd:constant type="hidden"/>
+ <cd:constant type="printable"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="clickin">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="clickout">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="regionin">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="regionout">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="afterkey">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="format">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="validate">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="calculate">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="focusin">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="focusout">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="openpage">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closepage">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefieldcategory" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffieldcategoryelse" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefieldbody" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfieldbody" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fieldbody" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefieldbodyset" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefieldbody" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffieldbodyelse" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="radio"/>
+ <cd:constant type="sub"/>
+ <cd:constant type="text"/>
+ <cd:constant type="line"/>
+ <cd:constant type="push"/>
+ <cd:constant type="check"/>
+ <cd:constant type="signature"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesubfield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="clonefield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyfield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fitfieldframed" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fitfield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldbody"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfieldlabelframed" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfieldcontentframed" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfieldtotalframed" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="reset"/>
+ <cd:constant type="label"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfield" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="label"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldtotalframed"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldlabelframed"/>
+ </cd:assignments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfieldcontentframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfields" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="label"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldtotalframed"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldlabelframed"/>
+ </cd:assignments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfieldcontentframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="field" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefieldstack" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fieldstack" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfieldcategory"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-figure.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-figure.xml
new file mode 100644
index 00000000000..a53678e89d7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-figure.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="figure" type="environment" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="externalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="referring" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="marking" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="remark" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:position list="yes"/>
+ <cd:position list="yes"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="colorbar" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color-list"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-file.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-file.xml
new file mode 100644
index 00000000000..4805c0faf3f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-file.xml
@@ -0,0 +1,404 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="input" variant="1" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="input" variant="2" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotfile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffileelse" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="jobfilename" file="core-sys.mkiv"/>
+
+ <cd:command name="jobfilesuffix" file="core-sys.mkiv"/>
+
+ <cd:command name="inputfilebarename" file="core-sys.mkiv"/>
+
+ <cd:command name="inputfilerealsuffix" file="core-sys.mkiv"/>
+
+ <cd:command name="inputfilesuffix" file="core-sys.mkiv"/>
+
+ <cd:command name="inputfilename" file="core-sys.mkiv"/>
+
+ <cd:command name="outputfilename" file="core-sys.mkiv"/>
+
+ <cd:command name="readingfile" type="environment" file="file-ini.mkvi"/>
+
+ <cd:command name="endofline" type="environment" begin="push" end="pop" file="file-ini.mkvi"/>
+
+ <cd:command name="restoreendofline" file="file-ini.mkvi"/>
+
+ <cd:command name="inputgivenfile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepath" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpathelse" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefileexists" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffileexistselse" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepathexists" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpathexistselse" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseparentfile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifparentfileelse" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitfilename" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitofffull" file="file-ini.mkvi"/>
+
+ <cd:command name="splitoffpath" file="file-ini.mkvi"/>
+
+ <cd:command name="splitoffbase" file="file-ini.mkvi"/>
+
+ <cd:command name="splitoffname" file="file-ini.mkvi"/>
+
+ <cd:command name="splitofftype" file="file-ini.mkvi"/>
+
+ <cd:command name="splitoffkind" file="file-ini.mkvi"/>
+
+ <cd:command name="splitoffroot" file="file-ini.mkvi"/>
+
+ <cd:command name="doifelseinputfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinputfileelse" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processfile" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usepath" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usesubpath" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="path" type="environment" begin="push" end="pop" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetpath" file="file-job.mkvi"/>
+
+ <cd:command name="allinputpaths" file="file-job.mkvi"/>
+
+ <cd:command name="locatefilepath" file="file-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="locatedfilepath" file="file-job.mkvi"/>
+
+ <cd:command name="usezipfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-file-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processfilemany" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processfileonce" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processfilenone" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadtexfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadluafile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadcldfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadanyfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadtexfileonce" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadluafileonce" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadcldfileonce" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadanyfileonce" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="continueifinputfile" file="file-job.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readjobfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readlocfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readsysfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readfixfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readsetfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ReadFile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readtexfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="readxmlfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselocfile" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflocfileelse" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="locfilename" file="file-res.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefilesynonym" file="file-sys.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefilefallback" file="file-sys.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="truefilename" file="file-sys.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-filler.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-filler.xml
new file mode 100644
index 00000000000..919267b30a8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-filler.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefiller" file="spac-flr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfiller" file="spac-flr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="leftmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="symbol" default="yes"/>
+ <cd:constant type="stretch"/>
+ <cd:constant type="rule"/>
+ <cd:constant type="space"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="broad"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:resolve name="value-alignsimple"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupfillers" file="spac-flr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfiller"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="filler" file="spac-flr.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="sym"/>
+ <cd:constant type="symbol"/>
+ <cd:constant type="rule"/>
+ <cd:constant type="width"/>
+ <cd:constant type="space"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkedfiller" file="spac-flr.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="sym"/>
+ <cd:constant type="symbol"/>
+ <cd:constant type="rule"/>
+ <cd:constant type="width"/>
+ <cd:constant type="space"/>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fillinline.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fillinline.xml
new file mode 100644
index 00000000000..dbf9f862794
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fillinline.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupfillinlines" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fillinline" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfillinlines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fillinrule.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fillinrule.xml
new file mode 100644
index 00000000000..949b8f6ea2b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fillinrule.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupfillinrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="small" default="yes"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fillinrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfillinrules"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fillintext" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfillinrules"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-firstline.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-firstline.xml
new file mode 100644
index 00000000000..ffa706e3db8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-firstline.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefirstline" file="typo-fln.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfirstline"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfirstline" file="typo-fln.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="default"/>
+ <cd:constant type="line" default="yes"/>
+ <cd:constant type="word"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setfirstline" file="typo-fln.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applytofirstcharacter" file="typo-fln.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fittingpage.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fittingpage.xml
new file mode 100644
index 00000000000..3489c55e219
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fittingpage.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefittingpage" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfittingpage" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="pagestate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="page"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="paper">
+ <cd:constant type="auto"/>
+ <cd:constant type="defaut" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fittingpage" type="environment" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fittingpage" type="environment" generated="yes" variant="generated" file="page-app.mkiv">
+ <cd:sequence>
+ <cd:variable value="fittingpage"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TEXpage" type="environment" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupTEXpage" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpage" type="environment" file="meta-fig.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupMPpage" file="meta-fig.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfittingpage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-floats.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-floats.xml
new file mode 100644
index 00000000000..d786769fc26
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-floats.xml
@@ -0,0 +1,736 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefloat" variant="1" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-plural-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfloat"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefloat" variant="2" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-plural-optional"/>
+ <cd:resolve name="keyword-singular-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfloat" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="default">
+ <cd:inherit name="placefloat"/>
+ </cd:parameter>
+ <cd:parameter name="fallback">
+ <cd:inherit name="placefloat"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sidemethod">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="textmethod">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sidealign">
+ <cd:constant type="height"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="line"/>
+ <cd:constant type="halfline"/>
+ <cd:constant type="grid"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="local">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="availablewidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="availableheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="minwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:resolve name="value-alignline"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="innermargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="outermargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottombefore">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottomafter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <!-- begin root only -->
+ <cd:parameter name="spacebefore">
+ <cd:constant type="none"/>
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="spaceafter">
+ <cd:constant type="none"/>
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="none"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ <cd:parameter name="sidespacebefore">
+ <cd:constant type="none"/>
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="sidespaceafter">
+ <cd:constant type="none"/>
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="ntop">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="nbottom">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big" default="yes"/>
+ <cd:constant type="line"/>
+ <cd:constant type="depth"/>
+ </cd:parameter>
+ <cd:parameter name="nlines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="cache">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <!-- end root only -->
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupfloats" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfloat"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefloatcaption" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfloatcaption"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupfloatcaption" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="suffix">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="suffixseparator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="suffixstopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="low"/>
+ <cd:constant type="high"/>
+ <cd:constant type="grid"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="lefthanging"/>
+ <cd:constant type="righthanging"/>
+ <cd:constant type="hang"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom" default="yes"/>
+ <cd:constant type="stretch"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="spacebefore">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="spaceinbetween">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="spaceafter">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="group">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="innermargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="outermargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="minwidth">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcaption" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfloatcaption"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupcaptions" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfloatcaption"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="placefloat" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="float"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefloat" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefloat" type="environment" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="float"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefloat" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="floattext" type="environment" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:variable value="float"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistoffloats" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:string value="placelistof"/>
+ <cd:variable value="floats"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistoffloats" generated="yes" variant="generated" file="strc-flt.mkvi">
+ <cd:sequence>
+ <cd:string value="completelistof"/>
+ <cd:variable value="floats"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="floatuserdataparameter" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelserightpagefloat" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifrightpagefloatelse" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseoddpagefloat" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifoddpagefloatelse" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsemainfloatbody" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmainfloatbodyelse" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefigure" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefigure" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="figuretext" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistoffigures" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistoffigures" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placetable" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placetable" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabletext" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistoftables" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistoftables" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placegraphic" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placegraphic" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="graphictext" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofgraphics" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofgraphics" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeintermezzo" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeintermezzo" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="intermezzotext" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofintermezzi" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofintermezzi" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placechemical" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placechemical" type="environment" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-floatdata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofchemicals" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofchemicals" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplocalfloats" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="noflocalfloats" file="strc-flt.mkvi"/>
+
+ <cd:command name="resetlocalfloats" file="strc-flt.mkvi"/>
+
+ <cd:command name="somelocalfloat" file="strc-flt.mkvi"/>
+
+ <cd:command name="getlocalfloats" file="strc-flt.mkvi"/>
+
+ <cd:command name="flushlocalfloats" file="strc-flt.mkvi"/>
+
+ <cd:command name="getlocalfloat" file="strc-flt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="forcelocalfloats" file="strc-flt.mkvi"/>
+
+ <cd:command name="setupfloatsplitting" file="tabl-tsp.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitfloat" file="tabl-tsp.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfloatsplitting"/>
+ </cd:assignments>
+ <cd:resolve name="argument-command"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotinsidesplitfloat" file="tabl-tsp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placenamedfloat" file="page-flt.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefloatwithsetups" file="page-flt.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-floatlocation-list-optional"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fontfamily.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fontfamily.xml
new file mode 100644
index 00000000000..c069a4c1726
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fontfamily.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefontfamily" variant="1" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="support"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="type"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ <cd:constant type="math"/>
+ <cd:constant type="mathematics"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-font"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="rscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="designsize">
+ <cd:constant type="default"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="tf">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bf">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="it">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sl">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bi">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bs">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sc">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontfamily" variant="2" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="support"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="type"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ <cd:constant type="math"/>
+ <cd:constant type="mathematics"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-font"/>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefallbackfamily" variant="1" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="support"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="type"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ <cd:constant type="math"/>
+ <cd:constant type="mathematics"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-font"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="rscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="designsize">
+ <cd:constant type="default"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="check">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="force">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="tf">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bf">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="it">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sl">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bi">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="bs">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sc">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefallbackfamily" variant="2" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="support"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="type"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ <cd:constant type="math"/>
+ <cd:constant type="mathematics"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-font"/>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontfamilypreset" variant="1" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignment list="yes">
+ <cd:inherit name="definefontfamily"/>
+ </cd:assignment>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontfamilypreset" variant="2" file="font-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fonts.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fonts.xml
new file mode 100644
index 00000000000..112b93c6e92
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fonts.xml
@@ -0,0 +1,1627 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definefontfallback" file="font-col.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="cd:font"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="rscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="force">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="check">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetfontfallback" file="font-col.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emphasistypeface" file="font-emp.mkvi"/>
+
+ <cd:command name="emphasisboldface" file="font-emp.mkvi"/>
+
+ <cd:command name="normalboldface" file="font-emp.mkvi"/>
+
+ <cd:command name="normaltypeface" file="font-emp.mkvi"/>
+
+ <cd:command name="swaptypeface" file="font-emp.mkvi"/>
+
+ <cd:command name="typeface" file="font-emp.mkvi"/>
+
+ <cd:command name="boldface" file="font-emp.mkvi"/>
+
+ <cd:command name="swapface" file="font-emp.mkvi"/>
+
+ <!--
+
+ <cd:command name="emphbf" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emphit" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emphsl" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emphtf" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emph" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emphasized" file="font-emp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="definefontfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="language">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="script">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="mode">
+ <cd:constant type="node"/>
+ <cd:constant type="base"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="liga">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="kern">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="extrakerns">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="tlig">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="trep">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="missing">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="dummies">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="analyze">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="unicoding">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="protrusion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="nostackmath">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="realdimensions">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="itlc">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="textitalics">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mathitalics">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="slant">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="extend">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dimensions">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="boundingbox">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="compose">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="char-ligatures">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="compat-ligatures">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="extrafeatures">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="featureset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="colorsheme">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="postprocessor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="mathdimensions">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="keepligatures">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="devanagari">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="tcom">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="anum">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mathsize">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="decomposehangul">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mathalternatives">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="mathgaps">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="cd:name">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontfeaturelist" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="addfeature" variant="1" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="addfeature" variant="2" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subtractfeature" variant="1" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subtractfeature" variant="2" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="replacefeature" variant="1" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="replacefeature" variant="2" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetandaddfeature" variant="1" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetandaddfeature" variant="2" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetfeature" file="font-fea.mkvi"/>
+
+ <cd:command name="revivefeature" file="font-fea.mkvi"/>
+
+ <cd:command name="setfontfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="feature" variant="1" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="="/>
+ <cd:constant type="!"/>
+ <cd:constant type="&gt;"/>
+ <cd:constant type="&lt;"/>
+ <cd:constant type="more"/>
+ <cd:constant type="less"/>
+ <cd:constant type="new"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="default"/>
+ <cd:constant type="old"/>
+ <cd:constant type="local"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="feature" variant="2" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="="/>
+ <cd:constant type="!"/>
+ <cd:constant type="&gt;"/>
+ <cd:constant type="&lt;"/>
+ <cd:constant type="more"/>
+ <cd:constant type="less"/>
+ <cd:constant type="new"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="default"/>
+ <cd:constant type="old"/>
+ <cd:constant type="local"/>
+ </cd:keywords>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecurrentfonthasfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcurrentfonthasfeatureelse" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doaddfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosubtractfeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doreplacefeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doresetandafffeature" file="font-fea.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontclass" type="environment" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="each"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="classfont" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontsynonym" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="fallbacks">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="designsize">
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontfile" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="fallbacks">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="designsize">
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="truefontname" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="expandfontsynonym" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefontsynonym" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffontsynonymelse" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tracedfontname" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontclassname" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadfontgoodies" file="font-gds.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setfontcolorsheme" file="font-gds.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetfontcolorsheme" file="font-gds.mkvi"/>
+
+ <cd:command name="definedfont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-font-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="font" type="environment" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-font-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bodyfontsize" file="font-ini.mkvi"/>
+
+ <cd:command name="normalizebodyfontsize" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thenormalizedbodyfontsize" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mapfontsize" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-dimension"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontstyle" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontsize" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefontalternative" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefont" variant="1" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefont" variant="2" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font"/>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefrozenfont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebodyfontenvironment" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="big">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="small">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="a">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="b">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="c">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="d">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="xx">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="script">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="scriptscript">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="em">
+ <cd:constant type="slanted"/>
+ <cd:constant type="italic"/>
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="*">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupbodyfontenvironment" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="definebodyfontenvironment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="processbodyfontenvironmentlist" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bodyfontenvironmentlist" file="font-fil.mkvi"/>
+
+ <cd:command name="registerfontclass" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcurrentfontclass" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tx" file="font-ini.mkvi"/>
+
+ <cd:command name="txx" file="font-ini.mkvi"/>
+
+ <cd:command name="definebodyfont" variant="1" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="default"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="tf">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="bf">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="it">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="sl">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="bi">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="bs">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="sc">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mr">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mrlr">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mrrl">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mb">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mblr">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="mbrl">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebodyfont" variant="2" file="font-fil.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="default"/>
+ </cd:keywords>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="rm" default="yes"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbodyfont" file="font-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="global"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="x"/>
+ <cd:constant type="xx"/>
+ <cd:constant type="small"/>
+ <cd:constant type="big"/>
+ <cd:constant type="script"/>
+ <cd:constant type="scriptscript"/>
+ <cd:constant type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="support"/>
+ <cd:constant type="type"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchtobodyfont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastswitchtobodyfont" file="font-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="x"/>
+ <cd:constant type="xx"/>
+ <cd:constant type="small"/>
+ <cd:constant type="big"/>
+ <cd:constant type="script"/>
+ <cd:constant type="scriptscript"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usebodyfont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usebodyfontparameter" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontchar" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontcharbyindex" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tochar" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchstyleonly" variant="1" file="font-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ <cd:constant type="roman"/>
+ <cd:constant type="serif"/>
+ <cd:constant type="regular"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="sansserif"/>
+ <cd:constant type="support"/>
+ <cd:constant type="type"/>
+ <cd:constant type="teletype"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="handwritten"/>
+ <cd:constant type="calligraphic"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchstyleonly" variant="2" file="font-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebodyfontswitch" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setsmallbodyfont" file="font-ini.mkvi"/>
+
+ <cd:command name="setbigbodyfont" file="font-ini.mkvi"/>
+
+ <cd:command name="setmainbodyfont" file="font-ini.mkvi"/>
+
+ <cd:command name="restoreglobalbodyfont" file="font-ini.mkvi"/>
+
+ <cd:command name="predefinefont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="predefinedfont" file="font-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbodyfont" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbodyfontenvironment" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfont" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-font"/>
+ <cd:resolve name="keyword-number-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfontstyle" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="tf"/>
+ <cd:constant type="bf"/>
+ <cd:constant type="it"/>
+ <cd:constant type="sl"/>
+ <cd:constant type="bi"/>
+ <cd:constant type="bs"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="all"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showligature" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showligatures" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfontstrip" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showminimalbaseline" file="font-run.mkiv"/>
+
+ <cd:command name="showkerning" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showcharratio" file="font-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfontparameters" file="font-run.mkiv"/>
+
+ <cd:command name="setsmallcaps" file="font-pre.mkiv"/>
+
+ <cd:command name="setoldstyle" file="font-pre.mkiv"/>
+
+ <cd:command name="settabular" file="font-pre.mkiv"/>
+
+ <cd:command name="setsuperiors" file="font-pre.mkiv"/>
+
+ <cd:command name="tinyfont" file="font-pre.mkiv"/>
+
+ <cd:command name="infofont" file="font-pre.mkiv"/>
+
+ <cd:command name="infofontbold" file="font-pre.mkiv"/>
+
+ <cd:command name="smallbodyfont" file="font-pre.mkiv"/>
+
+ <cd:command name="bigbodyfont" file="font-pre.mkiv"/>
+
+ <cd:command name="smaller" file="font-pre.mkiv"/>
+
+ <cd:command name="bigger" file="font-pre.mkiv"/>
+
+ <cd:command name="normal" file="font-pre.mkiv"/>
+
+ <cd:command name="bold" file="font-pre.mkiv"/>
+
+ <cd:command name="mono" file="font-pre.mkiv"/>
+
+ <cd:command name="monobold" file="font-pre.mkiv"/>
+
+ <cd:command name="slanted" file="font-pre.mkiv"/>
+
+ <cd:command name="italic" file="font-pre.mkiv"/>
+
+ <cd:command name="boldslanted" file="font-pre.mkiv"/>
+
+ <cd:command name="slantedbold" file="font-pre.mkiv"/>
+
+ <cd:command name="bolditalic" file="font-pre.mkiv"/>
+
+ <cd:command name="italicbold" file="font-pre.mkiv"/>
+
+ <cd:command name="small" file="font-pre.mkiv"/>
+
+ <cd:command name="smallnormal" file="font-pre.mkiv"/>
+
+ <cd:command name="smallbold" file="font-pre.mkiv"/>
+
+ <cd:command name="smalltype" file="font-pre.mkiv"/>
+
+ <cd:command name="smallslanted" file="font-pre.mkiv"/>
+
+ <cd:command name="smallboldslanted" file="font-pre.mkiv"/>
+
+ <cd:command name="smallslantedbold" file="font-pre.mkiv"/>
+
+ <cd:command name="smallbolditalic" file="font-pre.mkiv"/>
+
+ <cd:command name="smallitalicbold" file="font-pre.mkiv"/>
+
+ <cd:command name="sans" file="font-pre.mkiv"/>
+
+ <cd:command name="sansserif" file="font-pre.mkiv"/>
+
+ <cd:command name="roman" file="font-pre.mkiv"/>
+
+ <cd:command name="serif" file="font-pre.mkiv"/>
+
+ <cd:command name="regular" file="font-pre.mkiv"/>
+
+ <cd:command name="handwritten" file="font-pre.mkiv"/>
+
+ <cd:command name="calligraphic" file="font-pre.mkiv"/>
+
+ <cd:command name="sansnormal" file="font-pre.mkiv"/>
+
+ <cd:command name="sansbold" file="font-pre.mkiv"/>
+
+ <cd:command name="serifnormal" file="font-pre.mkiv"/>
+
+ <cd:command name="serifbold" file="font-pre.mkiv"/>
+
+ <cd:command name="mononormal" file="font-pre.mkiv"/>
+
+ <cd:command name="monobold" file="font-pre.mkiv"/>
+
+ <cd:command name="definefontsolution" file="font-sol.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupfontsolution"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfontsolution" file="font-sol.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="solution">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="less">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="more">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="preroll"/>
+ <cd:constant type="split"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="reverse"/>
+ <cd:constant type="random"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupfontsolutions" file="font-sol.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupfontsolution"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setfontsolution" file="font-sol.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetfontsolution" file="font-sol.mkvi"/>
+
+ <cd:command name="fontsolution" type="environment" file="font-sol.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definealternativestyle" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:resolve name="keyword-command"/>
+ <cd:resolve name="keyword-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applyalternativestyle" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dontconvertfont" file="font-sty.mkvi"/>
+
+ <cd:command name="redoconvertfont" file="font-sty.mkvi"/>
+
+ <cd:command name="definestyle" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupstyle" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="style" type="environment" generated="yes" variant="generated" file="font-sty.mkvi">
+ <cd:sequence>
+ <cd:variable value="style"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="style" generated="yes" variant="generated" file="font-sty.mkvi">
+ <cd:sequence>
+ <cd:variable value="style"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="style" type="environment" variant="1" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="style" type="environment" variant="2" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="style" variant="1" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:font"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="style" variant="2" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupstyle"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definestyleinstance" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="tf"/>
+ <cd:constant type="bf"/>
+ <cd:constant type="it"/>
+ <cd:constant type="sl"/>
+ <cd:constant type="bi"/>
+ <cd:constant type="bs"/>
+ <cd:constant type="sc"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="styleinstance" file="font-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseitalic" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifitalicelse" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="glyphfontfile" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getnamedglyphstyled" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getnamedglyphdirect" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getglyphstyled" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getglyphdirect" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setfont" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefontchar" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffontcharelse" file="font-sym.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showchardata" file="font-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showfontdata" file="font-tra.mkiv"/>
+
+ <cd:command name="doifelsefontpresent" file="font-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffontpresentelse" file="font-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showotfcomposition" file="font-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="-1"/>
+ <cd:constant type="1"/>
+ <cd:constant type="+1"/>
+ <cd:constant type="l2r"/>
+ <cd:constant type="r2l"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fontclass" file="font-var.mkvi"/>
+
+ <cd:command name="fontbody" file="font-var.mkvi"/>
+
+ <cd:command name="fontstyle" file="font-var.mkvi"/>
+
+ <cd:command name="fontalternative" file="font-var.mkvi"/>
+
+ <cd:command name="fontsize" file="font-var.mkvi"/>
+
+ <cd:command name="fontface" file="font-var.mkvi"/>
+
+ <cd:command name="typescriptone" file="type-ini.mkvi"/>
+
+ <cd:command name="typescripttwo" file="type-ini.mkvi"/>
+
+ <cd:command name="typescriptthree" file="type-ini.mkvi"/>
+
+ <cd:command name="typescriptcollection" type="environment" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usetypescriptfile" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usetypescript" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="serif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="math"/>
+ <cd:constant type="handwriting"/>
+ <cd:constant type="calligraphy"/>
+ <cd:constant type="casual"/>
+ <cd:constant type="all"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="fallback"/>
+ <cd:constant type="default"/>
+ <cd:constant type="dtp"/>
+ <cd:constant type="simple"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="size"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadtypescriptfile" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quittypescriptscanning" file="type-ini.mkvi"/>
+
+ <cd:command name="definetypescriptsynonym" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typescript" type="environment" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="serif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="math"/>
+ <cd:constant type="handwriting"/>
+ <cd:constant type="calligraphy"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="size"/>
+ <cd:constant type="name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetypescriptprefix" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typescriptprefix" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetypeface" file="type-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="rm"/>
+ <cd:constant type="ss"/>
+ <cd:constant type="tt"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="hw"/>
+ <cd:constant type="cg"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="serif"/>
+ <cd:constant type="sans"/>
+ <cd:constant type="mono"/>
+ <cd:constant type="math"/>
+ <cd:constant type="handwriting"/>
+ <cd:constant type="calligraphy"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="default" default="yes"/>
+ <cd:constant type="dtp"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="rscale">
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="fallbacks">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="goodies">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="designsize">
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="direction">
+ <cd:constant type="both"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfontexpansion" file="hand-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="vector">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="shrink">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfontprotrusion" file="hand-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="vector">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-form.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-form.xml
new file mode 100644
index 00000000000..0f02d06708e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-form.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupforms" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="XML" default="yes"/>
+ <cd:constant type="HTML"/>
+ <cd:constant type="PDF"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-formula.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-formula.xml
new file mode 100644
index 00000000000..da1d1c0cff6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-formula.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineformula" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupformula" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="center"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="spacebefore">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="spaceafter">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="middle"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:inherit name="snaptogrid"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupformulas" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="definesubformula" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsubformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsubformula" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupsubformulas" file="math-for.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupsubformula"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="formula" type="environment" generated="yes" variant="generated" file="strc-mat.mkiv">
+ <cd:sequence>
+ <cd:variable value="formula"/>
+ <cd:string value="formula"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="formula" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="spformula" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sdformula" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mpformula" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mdformula" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineformulaalternative" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-csname"/>
+ <cd:resolve name="keyword-csname"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="formula" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="displaymath" type="environment" file="strc-mat.mkiv"/>
+
+ <cd:command name="formulas" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subformulas" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedsubformulas" type="environment" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeformula" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeformula" type="environment" variant="1" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="suffix">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeformula" type="environment" variant="2" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placenamedformula" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placesubformula" file="strc-mat.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="formulanumber" file="strc-mat">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecurrentformulanumber" file="strc-mat"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-fraction.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-fraction.xml
new file mode 100644
index 00000000000..444784dfa28
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-fraction.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathfraction" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathfraction"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathfraction" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="topdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="math"/>
+ <cd:constant type="tight"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="inner" default="yes"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="both"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mathstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="no"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupmathfractions" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupmathfraction"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="fraction" generated="yes" variant="generated" file="math-frc.mkiv">
+ <cd:sequence>
+ <cd:variable value="fraction"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="frac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xxfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="binom" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dbinom" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tbinom" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitdfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cfrac" file="math-frc.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="l"/>
+ <cd:constant type="c"/>
+ <cd:constant type="r"/>
+ <cd:constant type="ll"/>
+ <cd:constant type="lc"/>
+ <cd:constant type="lr"/>
+ <cd:constant type="cl"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="cr"/>
+ <cd:constant type="rl"/>
+ <cd:constant type="rc"/>
+ <cd:constant type="rr"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-framed.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-framed.xml
new file mode 100644
index 00000000000..1c214322a19
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-framed.xml
@@ -0,0 +1,593 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <?context-directive job ctxfile x-setups.ctx ?>
+
+ <cd:command name="defineframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="corner">
+ <cd:constant type="rectangular" default="yes"/>
+ <cd:constant type="round"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="framecorner">
+ <cd:constant type="rectangular" default="yes"/>
+ <cd:constant type="round"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcorner">
+ <cd:constant type="rectangular" default="yes"/>
+ <cd:constant type="round"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="radius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frameradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundradius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framedepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backgrounddepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="topframe">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="bottomframe">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="leftframe">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="rightframe">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="region">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frameoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="foreground"/>
+ <cd:constant type="color"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundoffset">
+ <cd:constant type="frame"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="component">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="extras">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="foregroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="default"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="local"/>
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="max"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="broad" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="autostrut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="height"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="line"/>
+ <cd:constant type="lohi"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="keep"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="autowidth">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="force"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="fr!analyze">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="blank">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="profile">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="empty">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="loffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="roffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="toffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="boffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="orientation">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ -->
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="frameddimension" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framedparameter" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framed" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="framed"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalframedwithsettings" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framed" type="environment" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastlocalframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directlocalframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localframedwithsettings" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathframed" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="mathframed"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inmframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mcframed" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineframedtext" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupframedtext" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="depthcorrection">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupframedtexts" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="framedtext" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="framedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framedtext" type="environment" generated="yes" variant="generated" file="pack-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="framedtext"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framedtext" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framedtext" type="environment" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineframedcontent" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframedcontent"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupframedcontent" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffser">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="linecorrection">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="framedcontent" type="environment" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="off"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installleftframerenderer" file="pack-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installrightframerenderer" file="pack-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installtopframerenderer" file="pack-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installbottomframerenderer" file="pack-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-graphics.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-graphics.xml
new file mode 100644
index 00000000000..8764672401c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-graphics.xml
@@ -0,0 +1,516 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineexternalfigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="defineexternalfigures" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupexternalfigure" file="grph-inc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="label">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="object">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="pdf"/>
+ <cd:constant type="mps"/>
+ <cd:constant type="jpg"/>
+ <cd:constant type="png"/>
+ <cd:constant type="jp2"/>
+ <cd:constant type="jbig"/>
+ <cd:constant type="svg"/>
+ <cd:constant type="eps"/>
+ <cd:constant type="gif"/>
+ <cd:constant type="tif"/>
+ <cd:constant type="mov"/>
+ <cd:constant type="buffer"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="cld"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="controls">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="preview">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="mask">
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="resolution">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="hfactor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="wfactor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="equalwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="equalheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="xscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="yscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="s">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global" default="yes"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="directory">
+ <cd:constant type="cd:path"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="test"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="forgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ <cd:constant type="foreground"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="xmax">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ymax">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="frames">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="yes"/>
+ <cd:constant type="all"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="reference"/>
+ <cd:constant type="layer"/>
+ <cd:constant type="bookmark"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="comment">
+ <cd:constant type="cd:command"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="size">
+ <cd:constant type="none"/>
+ <cd:constant type="media"/>
+ <cd:constant type="crop"/>
+ <cd:constant type="trim"/>
+ <cd:constant type="art"/>
+ </cd:parameter>
+ <cd:parameter name="cache">
+ <cd:constant type="cd:path"/>
+ </cd:parameter>
+ <cd:parameter name="resources">
+ <cd:constant type="cd:path"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="cd:file"/> <!-- an alternative figure often low res .. old school pdf stuff -->
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="cd:text"/> <!-- a extra (kind of) suffix that triggers conversion -->
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="cd:list"/> <!-- a list of suffixes/types to check -->
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupexternalfigures" file="grph-inc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="useexternalfigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getfiguredimensions" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="figurewidth" file="grph-inc.mkiv"/>
+
+ <cd:command name="figureheight" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurenaturalwidth" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurenaturalheight" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurefullname" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurefilename" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurefilepath" file="grph-inc.mkiv"/>
+
+ <cd:command name="figurefiletype" file="grph-inc.mkiv"/>
+
+ <cd:command name="noffigurepages" file="grph-inc.mkiv"/>
+
+ <cd:command name="definegraphictypesynonym" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffigureelse" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registerexternalfigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usefigurebase" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollection" type="environment" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollectionminwidth" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollectionmaxwidth" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollectionminheight" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollectionmaxheight" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="externalfigurecollectionparameter" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="efcminwidth" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="efcmaxwidth" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="efcminheight" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="efcmaxheight" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="efcparameter" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlayfigure" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bitmapimage" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant type="rgb"/>
+ <cd:constant type="cmyk"/>
+ <cd:constant type="gray"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bitmapimage" type="environment" file="grph-inc.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant type="rgb"/>
+ <cd:constant type="cmyk"/>
+ <cd:constant type="gray"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typesetbuffer" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="*"/>
+ <cd:constant type="cd:buffer"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetypesetting" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typesetfile" file="grph-fig.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:file"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:file"/>
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="backgroundimage" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="backgroundimagefill" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-grid.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-grid.xml
new file mode 100644
index 00000000000..d98a1a54487
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-grid.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="showgrid" file="page-grd.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="bottom" default="yes"/>
+ <cd:constant type="top"/>
+ <cd:constant type="none"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="lines"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="nonumber"/>
+ <cd:constant type="right" default="yes"/>
+ <cd:constant type="left"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="columns" default="yes"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definegridsnapping" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ <cd:constant type="noheight"/>
+ <cd:constant type="nodepth"/>
+ <cd:constant type="box"/>
+ <cd:constant type="max"/>
+ <cd:constant type="min"/>
+ <cd:constant type="none"/>
+ <cd:constant type="line"/>
+ <cd:constant type="halfline"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="minheight"/>
+ <cd:constant type="maxheight"/>
+ <cd:constant type="mindepth"/>
+ <cd:constant type="maxdepth"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="strut"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="minheight" method="range"/>
+ <cd:constant type="cd:number" prefix="maxheight" method="range"/>
+ <cd:constant type="cd:number" prefix="mindepth" method="range"/>
+ <cd:constant type="cd:number" prefix="maxdepth" method="range"/>
+ <cd:constant type="cd:number" prefix="box" method="range"/>
+ <cd:constant type="cd:number" prefix="top" method="range"/>
+ <cd:constant type="cd:number" prefix="bottom" method="range"/>
+ <cd:constant type="cd:number" prefix="offset" method="range"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="snaptogrid" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-grid"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="snaptogrid" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeongrid" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-grid"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeongrid" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gridsnapping" type="environment" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-grid"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gridsnapping" type="environment" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="definegridsnapping"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usegridparameter" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showgridsnapping" file="spac-ver.mkiv"/>
+
+ <cd:command name="basegrid" file="meta-grd.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="xstep">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ystep">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="xoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="yoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="middle"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="cm" default="yes"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="in"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="bp"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grid" file="meta-grd.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="basegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-help.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-help.xml
new file mode 100644
index 00000000000..db2128d539f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-help.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definehelp" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphelp"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuphelp" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="help" generated="yes" variant="generated" file="scrn-hlp.mkvi">
+ <cd:sequence>
+ <cd:variable value="help"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="help" type="environment" generated="yes" variant="generated" file="scrn-hlp.mkvi">
+ <cd:sequence>
+ <cd:variable value="help"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsehelp" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifhelpelse" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placehelp" file="scrn-hlp.mkvi"/>
+
+ <cd:command name="showhelp" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="helptext" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="helptext" type="environment" file="scrn-hlp.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-highlight.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-highlight.xml
new file mode 100644
index 00000000000..1cc4ed4ca18
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-highlight.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definehighlight" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphighlight"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuphighlight" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="command">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="highlight" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:sequence>
+ <cd:variable value="highlight"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="highlight" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="highlight" type="environment" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directhighlight" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-hspace.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-hspace.xml
new file mode 100644
index 00000000000..3c96fc247ad
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-hspace.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definehspace" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hspace" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="default" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type=".5"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ <!--
+ <cd:constant type="vulgarfraction"/>
+ -->
+ <cd:constant type="speech"/>
+ <cd:constant type="quote"/>
+ <cd:constant type="interquotation"/>
+ <cd:constant type="quotation"/>
+ <cd:constant type="sentence"/>
+ <cd:constant type="intersentence"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hairspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="thinspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="medspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="thickspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="autoinsertnextspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="hglue" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="frenchspacing" file="spac-hor.mkiv"/>
+
+ <cd:command name="newfrenchspacing" file="spac-hor.mkiv"/>
+
+ <cd:command name="nonfrenchspacing" file="spac-hor.mkiv"/>
+
+ <cd:command name="setupspacing" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="fixed"/>
+ <cd:constant type="packed" default="yes"/>
+ <cd:constant type="broad"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="space" file="spac-hor.mkiv"/>
+
+ <cd:command name="removelastspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="nospace" file="spac-hor.mkiv"/>
+
+ <cd:command name="fixedspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="fixedspaces" file="spac-hor.mkiv"/>
+
+ <cd:command name="keepunwantedspaces" file="spac-hor.mkiv"/>
+
+ <cd:command name="removeunwantedspaces" file="spac-hor.mkiv"/>
+
+ <cd:command name="thinspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="negthinspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="enspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="enskip" file="spac-hor.mkiv"/>
+
+ <cd:command name="quad" file="spac-hor.mkiv"/>
+
+ <cd:command name="qquad" file="spac-hor.mkiv"/>
+
+ <cd:command name="emspace" file="spac-hor.mkiv"/>
+
+ <cd:command name="dotfskip" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftskipadaption" file="spac-hor.mkiv"/>
+
+ <cd:command name="rightskipadaption" file="spac-hor.mkiv"/>
+
+ <cd:command name="dosetleftskipadaption" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-leftskip"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosetrightskipadaption" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-rightskip"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doadaptleftskip" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-leftskip"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doadaptrightskip" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-rightskip"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="activatespacehandler" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="fixed"/>
+ <!--
+ <cd:constant type="cd:name"/>
+ -->
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-hyphenation.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-hyphenation.xml
new file mode 100644
index 00000000000..93475171233
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-hyphenation.xml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuphyphenation" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="original"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="default" default="yes"/>
+ <cd:constant type="hyphenate"/>
+ <cd:constant type="expanded"/>
+ <cd:constant type="traditional"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenation" type="environment" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="original"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="default" default="yes"/>
+ <cd:constant type="hyphenate"/>
+ <cd:constant type="expanded"/>
+ <cd:constant type="traditional"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definehypenationfeatures" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="characters">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="hyphens">
+ <cd:constant type="yes"/>
+ <cd:constant type="all"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="joiners">
+ <cd:constant type="yes"/>
+ <cd:constant type="all"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="rightwords">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="hyphenmin">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="lefthyphenmin">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="righthyphenmin">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="lefthyphenchar">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="righthyphenchar">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="original"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="hyphenate" default="yes"/>
+ <cd:constant type="expanded"/>
+ <cd:constant type="traditional"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="rightedge">
+ <cd:constant type="tex"/>
+ </cd:parameter>
+ <cd:parameter name="rightchars">
+ <cd:constant type="word"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sethyphenationfeatures" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resethyphenationfeatures" file="lang-hyp.mkiv"/>
+
+ <cd:command name="registerhyphenationpattern" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unregisterhyphenationpattern" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showhyphenationtrace" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registerhyphenationexception" file="lang-hyp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuphyphenmark" file="typo-del.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="sign">
+ <cd:constant type="normal"/>
+ <cd:constant type="wide" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebreakpoints" file="typo-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebreakpoint" file="typo-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="cd:character"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="type">
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ <cd:constant type="4"/>
+ <cd:constant type="5"/>
+ </cd:parameter>
+ <cd:parameter name="nleft">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nright">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setbreakpoints" file="typo-brk.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetbreakpoints" file="typo-brk.mkiv"/>
+
+ <cd:command name="showhyphens" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedword" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedpar" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedfile" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedcoloredword" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sethyphenatedurlbefore" file="lang-url.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sethyphenatedurlafter" file="lang-url.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sethyphenatedurlnormal" file="lang-url.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedurl" file="lang-url.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hyphenatedfilename" file="lang-url.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-imposition.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-imposition.xml
new file mode 100644
index 00000000000..b4bd4dee594
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-imposition.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="installshipoutmethod" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="invokepageheandler" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="normal"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuparranging" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="disable"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="doublesided"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="background"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="2*16"/>
+ <cd:constant type="2*8"/>
+ <cd:constant type="2*4"/>
+ <cd:constant type="2*2"/>
+ <cd:constant type="2**2"/>
+ <cd:constant type="2SIDE"/>
+ <cd:constant type="2TOP"/>
+ <cd:constant type="2UP"/>
+ <cd:constant type="2DOWN"/>
+ <cd:constant type="2*4*2"/>
+ <cd:constant type="2*2*4"/>
+ <cd:constant type="2TOPSIDE"/>
+ <cd:constant type="2*8*Z"/>
+ <cd:constant type="2*6*Z"/>
+ <cd:constant type="1*8"/>
+ <cd:constant type="1*4"/>
+ <cd:constant type="3SIDE"/>
+ <cd:constant type="TRYPTICHON"/>
+ <cd:constant type="ZFLYER-8"/>
+ <cd:constant type="ZFLYER-10"/>
+ <cd:constant type="ZFLYER-12"/>
+ <cd:constant type="MAPFLYER-12"/>
+ <cd:constant type="DOUBLEWINDOW"/>
+ <cd:constant type="1*2-Conference"/>
+ <cd:constant type="1*4-Conference"/>
+ <cd:constant type="2*2*2"/>
+ <cd:constant type="2*2*3"/>
+ <cd:constant type="XY"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installpagearrangement" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="arrangedpages" type="environment" begin="push" end="pop" file="page-imp.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-indent.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-indent.xml
new file mode 100644
index 00000000000..666388b6ac6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-indent.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineindenting" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:constant type="small" prefix="cd:sign" method="none"/>
+ <cd:constant type="medium" prefix="cd:sign" method="none"/>
+ <cd:constant type="big" prefix="cd:sign" method="none"/>
+ <cd:constant type="none"/>
+ <cd:constant type="no"/>
+ <cd:constant type="not"/>
+ <cd:constant type="first"/>
+ <cd:constant type="next"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="always"/>
+ <cd:constant type="never"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="even"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="toggle"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupindenting" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="small" prefix="cd:sign" method="none"/>
+ <cd:constant type="medium" prefix="cd:sign" method="none"/>
+ <cd:constant type="big" prefix="cd:sign" method="none"/>
+ <cd:constant type="none"/>
+ <cd:constant type="no"/>
+ <cd:constant type="not"/>
+ <cd:constant type="first"/>
+ <cd:constant type="next"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="always"/>
+ <cd:constant type="never"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="even"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="toggle"/>
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synchronizeindenting" file="spac-hor.mkiv"/>
+
+ <cd:command name="useindentingparameter" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="indentation" file="spac-hor.mkiv"/>
+
+ <cd:command name="noindentation" file="spac-hor.mkiv"/>
+
+ <cd:command name="doindentation" file="spac-hor.mkiv"/>
+
+ <cd:command name="checknextindentation" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useindentnextparameter" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dorechecknextindentation" file="spac-hor.mkiv"/>
+
+ <cd:command name="indentation" type="environment" begin="push" end="pop" file="spac-hor.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-indentedtext.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-indentedtext.xml
new file mode 100644
index 00000000000..c70fb5ba079
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-indentedtext.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineindentedtext" file="strc-ind.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupindentedtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupindentedtext" file="strc-ind.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="indentedtext" type="environment" generated="yes" variant="generated" file="strc-ind.mkiv">
+ <cd:sequence>
+ <cd:variable value="indentedtext"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="indentedtext" type="environment" file="strc-ind.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-initial.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-initial.xml
new file mode 100644
index 00000000000..170a5e1bae2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-initial.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinitial" file="typo-drp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinitial"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinitial" file="typo-drp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="line" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="font">
+ <cd:constant type="cd:font"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="margin"/>
+ <cd:constant type="text" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="none" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeinitial" file="typo-drp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinitial" file="typo-drp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinitial"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-injector.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-injector.xml
new file mode 100644
index 00000000000..c13e544db5f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-injector.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="resetinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="markinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkpreviousinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checknextinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-list"/>
+ <cd:resolve name="keyword-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="doinstallinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doactivateinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotestinjector" file="typo-inj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-insertion.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-insertion.xml
new file mode 100644
index 00000000000..9250c9ebfa6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-insertion.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinsertion" file="page-ins.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinsertion"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinsertion" file="page-ins.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="page" default="yes"/>
+ <cd:constant type="text"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="firstcolumn"/>
+ <cd:constant type="lastcolumn"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseinsertion" file="page-ins.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinsertionelse" file="page-ins.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interaction.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interaction.xml
new file mode 100644
index 00000000000..06b104f4c84
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interaction.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinteraction" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteraction"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinteraction" variant="1" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="subtitle">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="author">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="date">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="keyword">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="focus">
+ <cd:constant type="standard"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="width"/>
+ <cd:constant type="minwidth"/>
+ <cd:constant type="height"/>
+ <cd:constant type="minheight"/>
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="tight"/>
+ <!--
+ <cd:constant type="xyz"/>
+ <cd:constant type="fitr"/>
+ <cd:constant type="fith"/>
+ <cd:constant type="fitbh"/>
+ <cd:constant type="fitv"/>
+ <cd:constant type="fitbv"/>
+ <cd:constant type="fitb"/>
+ -->
+ </cd:parameter>
+ <cd:parameter name="menu">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="fieldlayer">
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="calculate">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="click">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="normal"/>
+ <cd:constant type="new"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="page"/>
+ <cd:constant type="name"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="openaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closeaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="openpageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closepageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="symbolset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="focusoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinteraction" variant="2" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="interaction" type="environment" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hidden"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinteraction" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hidden"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselocation" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflocationelse" file="scrn-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interactionbar.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionbar.xml
new file mode 100644
index 00000000000..67c31216a0a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionbar.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinteractionbar" file="scrn-bar.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinteractionbar" file="scrn-bar.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a" default="yes"/>
+ <cd:constant type="b"/>
+ <cd:constant type="c"/>
+ <cd:constant type="d"/>
+ <cd:constant type="e"/>
+ <cd:constant type="f"/>
+ <cd:constant type="g"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ <cd:constant type="broad"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="interactionbar" file="scrn-bar.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="interactionbuttons" file="scrn-bar.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionbar"/>
+ </cd:assignments>
+ <cd:keywords list="yes">
+ <cd:constant type="page"/>
+ <cd:constant type="subpage"/>
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interactionmenu.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionmenu.xml
new file mode 100644
index 00000000000..6bf2f96741a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionmenu.xml
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinteractionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinteractionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="vertical"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="hidden"/>
+ </cd:parameter>
+ <cd:parameter name="category">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="overlay"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="overlay"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="overlay"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="overlay"/>
+ <cd:constant type="frame"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="itemalign">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="low"/>
+ <cd:constant type="high"/>
+ <cd:constant type="lohi"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="local"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="overlay"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="position">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="contrastcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupinteractionmenus" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="interactionmenu" type="environment" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetinteractionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="raw" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="raw" type="environment" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="but" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="but" type="environment" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="got" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="got" type="environment" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nop" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nop" type="environment" variant="interactionmenu" file="scrn-but.mkvi"/>
+
+ <cd:command name="txt" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="txt" type="environment" variant="interactionmenu" file="scrn-but.mkvi"/>
+
+ <cd:command name="rul" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rul" type="environment" variant="interactionmenu" file="scrn-but.mkvi"/>
+
+ <cd:command name="com" variant="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="\"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="com" type="environment" variant="interactionmenu" file="scrn-but.mkvi"/>
+
+ <cd:command name="includemenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="interactionmenu" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="menubutton" variant="1" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinteractionmenu"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="menubutton" variant="2" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupbutton"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:reference"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registermenubuttons" file="scrn-but.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interactionscreen.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionscreen.xml
new file mode 100644
index 00000000000..69edbcdb96d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interactionscreen.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupinteractionscreen" file="scrn-pag.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="tight"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="horoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="veroffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="fit"/>
+ <cd:constant type="max"/>
+ <cd:constant type="singlesided"/>
+ <cd:constant type="doublesided"/>
+ <cd:constant type="bookmark"/>
+ <cd:constant type="auto" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="portrait"/>
+ <cd:constant type="page"/>
+ </cd:parameter>
+ <cd:parameter name="delay">
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="screen" file="scrn-pag.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="page"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interface.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interface.xml
new file mode 100644
index 00000000000..c8c93b72bcb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interface.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defaultinterface" file="mult-ini.mkiv"/>
+
+ <cd:command name="currentinterface" file="mult-ini.mkiv"/>
+
+ <cd:command name="currentresponses" file="mult-ini.mkiv"/>
+
+ <cd:command name="interface" type="environment" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="all"/>
+ <cd:constant type="cd:language"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineinterfaceconstant" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineinterfacevariable" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineinterfaceelement" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefileconstant" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesystemconstant" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemessageconstant" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesystemvariable" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinterfacemessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="title"/>
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmessagetext" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentmessagetext" file="mult-ini.mkiv"/>
+
+ <cd:command name="getmessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsemessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmessageelse" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showmessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="writestatus" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="message" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinemessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="displaymessage" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showwarning" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinterfaceconstant" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinterfacevariable" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinterfaceelements" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinterfacecommand" file="mult-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-interlinespace.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-interlinespace.xml
new file mode 100644
index 00000000000..99f5e11afe7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-interlinespace.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineinterlinespace" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinterlinespace" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="line">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="minheight">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="mindepth">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="height"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="shrink">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplocalinterlinespace" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplocalinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplocalinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchtointerlinespace" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchtointerlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="switchtointerlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosetupcheckedinterlinespace" variant="1" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments delimiters="braces" list="yes">
+ <cd:inherit name="setupinterlinespace"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosetupcheckedinterlinespace" variant="2" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="reset"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosetupcheckedinterlinespace" variant="3" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useinterlinespaceparameter" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-italiccorrection.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-italiccorrection.xml
new file mode 100644
index 00000000000..f8d711ae87c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-italiccorrection.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setitaliccorrection" file="typo-itc.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetitaliccorrection" file="typo-itc.mkvi"/>
+
+ <cd:command name="italiccorrection" file="typo-itc.mkvi"/>
+
+ <cd:command name="setupitaliccorrection" file="typo-itc.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="always"/>
+ <cd:constant type="global"/>
+ <cd:constant type="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-itemgroup.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-itemgroup.xml
new file mode 100644
index 00000000000..69e817efd43
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-itemgroup.xml
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineitemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" variant="1" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="each"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="intro"/>
+ <cd:constant type="random"/>
+ <cd:constant type="continue"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="autointro"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="text"/>
+ <cd:constant type="before"/>
+ <cd:constant type="after"/>
+ <cd:constant type="nowhite"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="intext"/>
+ <cd:constant type="loose"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="nofit"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="unpacked"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="norepeat"/>
+ <cd:constant type="reverse"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="three"/>
+ <cd:constant type="four"/>
+ <cd:constant type="five"/>
+ <cd:constant type="six"/>
+ <cd:constant type="seven"/>
+ <cd:constant type="eight"/>
+ <cd:constant type="nine"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="broad" prefix="cd:number" method="factor"/>
+ <cd:constant type="serried" prefix="cd:number" method="factor"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="beforehead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="afterhead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="lefttext">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="righttext">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:resolve name="value-rightskip"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:resolve name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symalign">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="center"/>
+ <cd:constant type="flushright"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ <cd:parameter name="items">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="itemalign">
+ <cd:resolve name="value-alignsimple"/>
+ </cd:parameter>
+ <cd:parameter name="alignsymbol">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="space" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="placestopper">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="marcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="symcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitemgroup" variant="2" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number" prefix="cd:name" method="range"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="beforehead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="afterhead">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="lefttext">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="righttext">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="intro"/>
+ <cd:constant type="random"/>
+ <cd:constant type="continue"/>
+ <cd:constant type="packed"/>
+ <cd:constant type="autointro"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="text"/>
+ <cd:constant type="before"/>
+ <cd:constant type="after"/>
+ <cd:constant type="nowhite"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="intext"/>
+ <cd:constant type="loose"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="nofit"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="joinedup"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="unpacked"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="norepeat"/>
+ <cd:constant type="reverse"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="three"/>
+ <cd:constant type="four"/>
+ <cd:constant type="five"/>
+ <cd:constant type="six"/>
+ <cd:constant type="seven"/>
+ <cd:constant type="eight"/>
+ <cd:constant type="nine"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="broad" prefix="cd:number" method="factor"/>
+ <cd:constant type="serried" prefix="cd:number" method="factor"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:resolve name="value-rightskip"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:resolve name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="symalign">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="center"/>
+ <cd:constant type="flushright"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ <cd:parameter name="items">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="itemalign">
+ <cd:resolve name="value-alignsimple"/>
+ </cd:parameter>
+ <cd:parameter name="alignsymbol">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="space" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="placestopper">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="marstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="marcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="symstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="symcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="itemgroup" type="environment" generated="yes" variant="generated" file="strc-itm.mkvi">
+ <cd:sequence>
+ <cd:variable value="itemgroup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="itemgroup" type="environment" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="item" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="itemtag" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="itm" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="but" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nop" variant="itemgroup" file="strc-itm.mkvi"/>
+
+ <cd:command name="txt" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="head" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headsym" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sym" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ran" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mar" variant="itemgroup" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sub" variant="itemgroup" file="strc-itm.mkvi"/>
+
+ <cd:command name="its" variant="itemgroup" file="strc-itm.mkvi"/>
+
+ <cd:command name="item" type="environment" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="head" type="environment" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="specialitem" type="environment" variant="1" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="item" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="specialitem" type="environment" variant="2" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="sym"/>
+ <cd:constant type="ran"/>
+ <cd:constant type="mar"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="specialitem" type="environment" variant="3" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="sub"/>
+ <cd:constant type="its"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="itemize" type="environment" file="strc-itm.mkvi">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitemgroup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-items.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-items.xml
new file mode 100644
index 00000000000..d3f68132a49
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-items.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineitems" file="typo-itm.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitems"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupitems" file="typo-itm.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="inmargin"/>
+ </cd:parameter>
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="margin"/>
+ </cd:parameter>
+ <cd:parameter name="textalign">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="flushleft" default="yes"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="items" file="typo-itm.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupitems"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-javascript.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-javascript.xml
new file mode 100644
index 00000000000..790d13523cc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-javascript.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="JScode" type="environment" file="java-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="uses"/>
+ </cd:keywords>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="JSpreamble" type="environment" file="java-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ <cd:keywords delimiters="none">
+ <cd:constant type="used"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="now"/>
+ <cd:constant type="later"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setJSpreamble" file="java-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="addtoJSpreamble" file="java-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useJSscripts" file="java-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-kerning.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-kerning.xml
new file mode 100644
index 00000000000..167bfc4f844
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-kerning.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definecharacterkerning" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupcharacterkerning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcharacterkerning" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="factor">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setcharacterkerning" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetcharacterkerning" file="typo-krn.mkiv"/>
+
+ <cd:command name="characterkerning" generated="yes" variant="generated" file="typo-krn.mkiv">
+ <cd:sequence>
+ <cd:variable value="characterkerning"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="kerncharacters" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letterspacing" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stretched" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstretched"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupstretched" file="typo-krn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcharacterkerning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-label.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-label.xml
new file mode 100644
index 00000000000..320c105f9f9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-label.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelabel" file="strc-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplabel"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplabel" file="strc-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titledistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titlestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="titlecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="titlecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="starter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="coupling">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="counter">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <!-- begin construction values -->
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="headcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="top"/>
+ <cd:constant type="command"/>
+ <cd:constant type="intext" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="headalign">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="none"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <!-- end construction values -->
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setuplabels" file="strc-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplabel"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="label" generated="yes" variant="generated" file="strc-lab.mkiv">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentlabel" generated="yes" variant="generated" file="strc-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="current"/>
+ <cd:variable value="label"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-labeltext.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-labeltext.xml
new file mode 100644
index 00000000000..247783762e4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-labeltext.xml
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelabelclass" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="preset"/>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copylabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="copy"/>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labeltext" type="environment" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labellanguage" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ <cd:string value="language"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="labeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labeltexts" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:variable value="label"/>
+ <cd:string value="texts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="left"/>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightlabeltext" generated="yes" variant="generated" file="lang-lab.mkiv">
+ <cd:sequence>
+ <cd:string value="right"/>
+ <cd:variable value="label"/>
+ <cd:string value="text"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copylabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labeltext" type="environment" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labellanguage" file="lang-lab.mkiv"/>
+
+ <cd:command name="labeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="labeltexts" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupheadtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetheadtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyheadtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headtext" type="environment" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headlanguage" file="lang-lab.mkiv"/>
+
+ <cd:command name="headtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headtexts" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftheadtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightheadtext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetmathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copymathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathlabeltext" type="environment" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathlabellanguage" file="lang-lab.mkiv"/>
+
+ <cd:command name="mathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathlabeltexts" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="leftmathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightmathlabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptaglabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presettaglabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copytaglabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="taglabeltext" type="environment" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="taglabellanguage" file="lang-lab.mkiv"/>
+
+ <cd:command name="taglabeltext" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupunittext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetunittext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyunittext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unittext" type="environment" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unitlanguage" file="phys-dim.mkiv"/>
+
+ <cd:command name="unittext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupoperatortext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetoperatortext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyoperatortext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="operatortext" type="environment" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="operatorlanguage" file="phys-dim.mkiv"/>
+
+ <cd:command name="operatortext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupprefixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetprefixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyprefixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prefixtext" type="environment" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prefixlanguage" file="phys-dim.mkiv"/>
+
+ <cd:command name="prefixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+<!--
+
+ <cd:command name="setupsuffixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetsuffixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copysuffixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="suffixtext" type="environment" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="suffixlanguage" file="phys-dim.mkiv"/>
+
+ <cd:command name="suffixtext" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+-->
+
+ <cd:command name="setupbtxlabeltext" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="presetbtxlabeltext" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copybtxlabeltext" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="assignment-labeldata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxlabeltext" type="environment" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language-optional"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxlabellanguage" file="publ-ini.mkiv"/>
+
+ <cd:command name="btxlabeltext" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-language.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-language.xml
new file mode 100644
index 00000000000..26bdbf06070
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-language.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="installlanguage" variant="1" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplanguage"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installlanguage" variant="2" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-language"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplanguage" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:language"/>
+ <cd:constant type="default"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="default">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="date">
+ <cd:inherit name="currentdate"/>
+ </cd:parameter>
+ <cd:parameter name="patterns">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="lefthyphenmin">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="righthyphenmin">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="lefthyphenchar">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="righthyphenchar">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="spacing">
+ <cd:constant type="broad" default="yes"/>
+ <cd:constant type="packed"/>
+ </cd:parameter>
+ <cd:parameter name="font">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="limittext">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="hyphen">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="compoundhyphen">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="leftcompoundhyphen">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="rightcompoundhyphen">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="leftquote">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightquote">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftquotation">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightquotation">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftspeech">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightspeech">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftsentence">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="middlespeech">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightsentence">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="midsentence">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftsubsentence">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rightsubsentence">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselanguage" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-language"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflanguageelse" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-language"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepatterns" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-language"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpatternselse" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-language"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="language" generated="yes" variant="generated" file="lang-ini.mkiv">
+ <cd:sequence>
+ <cd:variable value="language"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="language" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mainlanguage" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uselanguageparameter" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="exceptions" type="environment" file="lang-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-language"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentlanguage" file="lang-ini.mkiv"/>
+
+ <cd:command name="currentmainlanguage" file="lang-ini.mkiv"/>
+
+ <cd:command name="commalistsentence" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-layer.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-layer.xml
new file mode 100644
index 00000000000..6be7cccc9fe
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-layer.xml
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuplayeredtext" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="layeredtext" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayeredtext"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelayeredtext" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayeredtext"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setlayerframed" variant="1" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setlayerframed" variant="2" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setlayertext" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="continue"/>
+ <cd:constant type="next"/>
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="test"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="region">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="rotation">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="position">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="sx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="corner">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top" default="yes"/>
+ <cd:constant type="bottom"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="grid"/>
+ <cd:resolve name="value-aligned"/>
+ </cd:parameter>
+ <cd:parameter name="line">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="column">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="direction">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="doublesided">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="fit"/>
+ <cd:constant type="overlay" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes"/>
+ </cd:parameter>
+ <cd:parameter name="preset">
+ <cd:constant type="lefttop"/>
+ <cd:constant type="righttop"/>
+ <cd:constant type="leftbottom"/>
+ <cd:constant type="rightbottom"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="middletop"/>
+ <cd:constant type="middlebottom"/>
+ <cd:constant type="middleleft"/>
+ <cd:constant type="middleright"/>
+ <cd:constant type="lefttopleft"/>
+ <cd:constant type="lefttopright"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tightlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="composedlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="even"/>
+ <cd:constant type="odd"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelayerpreset" variant="1" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelayerpreset" variant="2" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselayerdata" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflayerdataelse" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="layerwidth" file="pack-lyr.mkiv"/>
+
+ <cd:command name="layerheight" file="pack-lyr.mkiv"/>
+
+ <cd:command name="setMPlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getMPlayer" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-layout.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-layout.xml
new file mode 100644
index 00000000000..984995f1056
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-layout.xml
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelayout" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayout"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayout" variant="1" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="edge">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="margindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="edgedistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftedgedistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightedgedistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="headerdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="footerdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="preset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftedge">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightedge">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="footer">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="cutspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="fit"/>
+ </cd:parameter>
+ <cd:parameter name="bottomspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="fit"/>
+ </cd:parameter>
+ <cd:parameter name="horoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="veroffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="columns">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="columndistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="default"/>
+ <cd:constant type="normal" default="name"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="singlesided"/>
+ <cd:constant type="doublesided"/>
+ </cd:parameter>
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="textheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="page"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="color"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="textdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="default"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="makeup"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="clipoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="cropoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="trimoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bleedoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="artoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayout" variant="2" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselayoutdefined" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflayoutdefinedelse" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="adaptlayout" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="height">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="layout" type="environment" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseoddpage" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifoddpageelse" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifbothsidesoverruled" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifbothsides" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rightorleftpageaction" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showprint" file="page-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayout"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showframe" file="page-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="leftedge"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="text"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="rightedge"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showsetups" file="page-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="pt" default="yes"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="cm" default="yes"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="nd"/>
+ <cd:constant type="nc"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="in"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showlayout" file="page-run.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="pt" default="yes"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="cm" default="yes"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="nd"/>
+ <cd:constant type="nc"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="in"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showmargins" file="page-run.mkiv"/>
+
+ <cd:command name="spread" type="environment" file="page-spr.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-linenumber.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-linenumber.xml
new file mode 100644
index 00000000000..623595140e6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-linenumber.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelinenumbering" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinenumbering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplinenumbering" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="page"/>
+ <cd:constant type="first" default="yes"/>
+ <cd:constant type="next"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
+ <cd:constant type="default" default="yes"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="inmargin"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="margin"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linenumbering" type="environment" variant="1" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinenumbering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linenumbering" type="environment" variant="2" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="continue"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="someline" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startline" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stopline" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesamelinereference" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsamelinereferenceelse" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inline" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinerange" file="page-lin.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-lines.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-lines.xml
new file mode 100644
index 00000000000..e43945e4de5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-lines.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="noflines" file="supp-box.mkiv"/>
+
+ <cd:command name="getnoflines" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getroundednoflines" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrawnoflines" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="determinenoflines" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelines" file="spac-lin.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplines" file="spac-lin.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="option">
+ <cd:constant type="packed"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="yes"/>
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="default" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lines" type="environment" generated="yes" variant="generated" file="spac-lin.mkiv">
+ <cd:sequence>
+ <cd:variable value="lines"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lines" type="environment" file="spac-lin.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplines"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="emptylines" file="spac-lin.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-linetable.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-linetable.xml
new file mode 100644
index 00000000000..a104791617e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-linetable.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuplinetable" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="r"/>
+ <cd:constant type="c"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="odd"/>
+ <cd:constant type="even"/>
+ <cd:constant type="header"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <!-- begin root only -->
+ <cd:parameter name="lines">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="fit"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="nleft">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <!-- end root only -->
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit" default="yes"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="xheight">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="xdepth">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linetablecell" type="environment" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinetable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linetable" type="environment" file="tabl-ltb.mkiv"/>
+
+ <cd:command name="linetablehead" type="environment" file="tabl-ltb.mkiv"/>
+
+ <cd:command name="linetablebody" type="environment" file="tabl-ltb.mkiv"/>
+
+ <cd:command name="processlinetablebuffer" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-buffer-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processlinetablefile" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="BC" scope="linetable" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinetable"/>
+ </cd:assignments>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="EC"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="BR" scope="linetable" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="ER"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="BH" scope="linetable" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="EH"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NC" scope="linetable" file="tabl-ltb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinetable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NR" scope="linetable" file="tabl-ltb.mkiv"/>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-linewidth.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-linewidth.xml
new file mode 100644
index 00000000000..65a9679543b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-linewidth.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuplinewidth" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linewidth" file="pack-rul.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-list.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-list.xml
new file mode 100644
index 00000000000..38e534252ed
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-list.xml
@@ -0,0 +1,620 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-list-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="none"/>
+ <cd:constant type="here"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="simple"/>
+ <cd:constant type="command"/>
+ <cd:constant type="userdata"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="intro"/>
+ <cd:constant type="reference"/>
+ <cd:constant type="reference" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="all"/>
+ <cd:constant type="all" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="text"/>
+ <cd:constant type="text" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="current"/>
+ <cd:constant type="current" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="here"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="previous" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="component"/>
+ <cd:constant type="cd:section"/>
+ <cd:constant type="cd:section" prefix="cd:sectionblock" method="range"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad" default="yes"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ <cd:constant type="three"/>
+ <cd:constant type="none"/>
+ <cd:constant type="default" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="label">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="starter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:threeargument"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="pagecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="pagenumber">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="headnumber">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="always"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="aligntitle">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="numberalign">
+ <cd:resolve name="value-alignsimple"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="number"/>
+ <cd:constant type="text"/>
+ <cd:constant type="title"/>
+ <cd:constant type="page"/>
+ <cd:constant type="sectionnumber"/>
+ <cd:constant type="pagenumber"/>
+ </cd:parameter>
+ <cd:parameter name="limittext">
+ <cd:resolve name="value-limittext"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="numberstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="numbercolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="pagecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="extras">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="command"/>
+ <cd:constant type="all"/>
+ <cd:constant type="title"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b" default="yes"/>
+ <cd:constant type="c"/>
+ <cd:constant type="d"/>
+ <cd:constant type="e"/>
+ <cd:constant type="f"/>
+ <cd:constant type="g"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="command"/>
+ <cd:constant type="none"/>
+ <cd:constant type="interactive"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefix">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconnector">
+ <cd:resolve name="value-connector"/>
+ </cd:parameter>
+ <cd:parameter name="pageconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pagestarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="prefix">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="prefixseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="prefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconnector">
+ <cd:resolve name="value-connector"/>
+ </cd:parameter>
+ <cd:parameter name="numberseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:parameter>
+ -->
+ <cd:inherit name="setupcounter"/>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setuplists" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="doifelselist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflistelse" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="writebetweenlist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="writedatatolist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="writetolist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placerawlist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecombinedlist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-list-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcombinedlist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecombinedlist" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:variable value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completecombinedlist" generated="yes" variant="generated" file="strc-lst.mkvi">
+ <cd:sequence>
+ <cd:string value="complete"/>
+ <cd:variable value="combinedlist"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupcontent" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecontent" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completecontent" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="structurelistuservariable" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawstructurelistuservariable" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsestructurelisthaspage" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifstructurelisthaspageelse" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsestructurelisthasnumber" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifstructurelisthasnumberelse" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelistextra" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplistextra"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplistextra" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelistalternative" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplistalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplistalternative" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:threearguments"/>
+ </cd:parameter>
+ <cd:parameter name="renderingsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="stretch">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="filler">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="determinelistcharacteristics" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-list-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentlistentrynumber" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentrytitle" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentrytitlerendered" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentrypagenumber" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistsymbol" file="strc-lst.mkvi"/>
+
+ <cd:command name="listlength" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentrywrapper" type="environment" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentryreferenceattribute" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="number"/>
+ <cd:constant type="text"/>
+ <cd:constant type="pagenumber"/>
+ <cd:constant type="all"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentlistentrydestinationattribute" file="strc-lst.mkvi"/>
+
+ <cd:command name="currentlistentrylimitedtext" file="strc-lst.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-logo.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-logo.xml
new file mode 100644
index 00000000000..a14717e9341
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-logo.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="TeX" file="cont-log.mkiv"/>
+
+ <cd:command name="ConTeXt" file="cont-log.mkiv"/>
+
+ <cd:command name="PPCHTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="PRAGMA" file="cont-log.mkiv"/>
+
+ <cd:command name="LaTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="TaBlE" file="cont-log.mkiv"/>
+
+ <cd:command name="PiCTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="AmSTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="LamSTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="Context" file="cont-log.mkiv"/>
+
+ <cd:command name="MetaFont" file="cont-log.mkiv"/>
+
+ <cd:command name="MetaPost" file="cont-log.mkiv"/>
+
+ <cd:command name="MetaFun" file="cont-log.mkiv"/>
+
+ <cd:command name="eTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="pdfTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="pdfeTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="luaTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="luajitTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="metaTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="XeTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="LuaTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="LuajitTeX" file="cont-log.mkiv"/>
+
+ <cd:command name="MKII" file="cont-log.mkiv"/>
+
+ <cd:command name="MKIV" file="cont-log.mkiv"/>
+
+ <cd:command name="MKVI" file="cont-log.mkiv"/>
+
+ <cd:command name="MKIX" file="cont-log.mkiv"/>
+
+ <cd:command name="MKXI" file="cont-log.mkiv"/>
+
+ <cd:command name="MPII" file="cont-log.mkiv"/>
+
+ <cd:command name="MPIV" file="cont-log.mkiv"/>
+
+ <cd:command name="MPVI" file="cont-log.mkiv"/>
+
+ <cd:command name="METAFONT" file="cont-log.mkiv"/>
+
+ <cd:command name="METAPOST" file="cont-log.mkiv"/>
+
+ <cd:command name="PPCHTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="CONTEXT" file="cont-log.mkiv"/>
+
+ <cd:command name="METAFUN" file="cont-log.mkiv"/>
+
+ <cd:command name="TEX" file="cont-log.mkiv"/>
+
+ <cd:command name="LATEX" file="cont-log.mkiv"/>
+
+ <cd:command name="PICTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="TABLE" file="cont-log.mkiv"/>
+
+ <cd:command name="AMSTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="LAMSTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="INRSTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="ETEX" file="cont-log.mkiv"/>
+
+ <cd:command name="PDFTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="PDFETEX" file="cont-log.mkiv"/>
+
+ <cd:command name="LUATEX" file="cont-log.mkiv"/>
+
+ <cd:command name="LUAJITTEX" file="cont-log.mkiv"/>
+
+ <cd:command name="XETEX" file="cont-log.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-lohi.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-lohi.xml
new file mode 100644
index 00000000000..7cfd489eb2a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-lohi.xml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definelow" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplow" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="down">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="low" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:sequence>
+ <cd:variable value="low"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="low" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definehigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuphigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="up">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="high" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:sequence>
+ <cd:variable value="high"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="high" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelowhigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplowhigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplowhigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="up">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="down">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lowhigh" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:sequence>
+ <cd:variable value="lowhigh"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lohi" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hilo" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:keywords>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelowmidhigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplowmidhigh"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplowmidhigh" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="up">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="down">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lowmidhigh" generated="yes" variant="generated" file="typo-scr.mkiv">
+ <cd:sequence>
+ <cd:variable value="lowmidhigh"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lomihi" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="himilo" file="typo-scr.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-lua.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-lua.xml
new file mode 100644
index 00000000000..525753723bb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-lua.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="taggedctxcommand" file="back-exp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luafunction" file="cldf-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cldprocessfile" file="cldf-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cldloadfile" file="cldf-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cldcontext" file="cldf-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cldcommand" file="cldf-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxdirectlua" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxlatelua" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxsprint" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxcommand" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxdirectcommand" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxlatecommand" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxreport" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxlua" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luacode" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lateluacode" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directluacode" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luaversion" file="luat-cod.mkiv"/>
+
+ <cd:command name="registerctxluafile" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxloadluafile" file="luat-cod.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lua" type="environment" file="luat-ini.mkiv"/>
+
+ <cd:command name="luacode" type="environment" file="luat-ini.mkiv"/>
+
+ <cd:command name="luamajorversion" file="luat-ini.mkiv"/>
+
+ <cd:command name="luaminorversion" file="luat-ini.mkiv"/>
+
+ <cd:command name="luaexpanded" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luaparameterset" type="environment" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luaparameterset" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luaconditional" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxluacode" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxfunctiondefinition" type="environment" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxfunctiondefinition" generated="yes" variant="generated" file="luat-ini.mkiv">
+ <cd:sequence>
+ <cd:variable value="ctxfunctiondefinition"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="ctxfunction" type="environment" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxfunction" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ctxfunction" generated="yes" variant="generated" file="luat-ini.mkiv">
+ <cd:sequence>
+ <cd:variable value="ctxfunction"/>
+ </cd:sequence>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-makeup.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-makeup.xml
new file mode 100644
index 00000000000..2128464ef88
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-makeup.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemakeup" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmakeup" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="top"/>
+ </cd:parameter>
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="pagestate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="headerstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="high"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="footerstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="high"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="topstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="high"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="bottomstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="high"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="textstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="high"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="doublesided">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="empty" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:inherit name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command file="page-mak.mkvi" name="makeup" type="environment">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command file="page-mak.mkvi" generated="yes" name="makeup" type="environment" variant="generated">
+ <cd:sequence>
+ <cd:variable value="makeup"/>
+ <cd:string value="makeup"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ <cd:instances>
+ <cd:constant value="standard"/>
+ <cd:constant value="page"/>
+ <cd:constant value="text"/>
+ <cd:constant value="middle"/>
+ </cd:instances>
+ </cd:command>
+
+
+ <!--
+
+ <cd:command name="standardmakeup" type="environment" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textmakeup" type="environment" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagemakeup" type="environment" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="middlemakeup" type="environment" file="page-mak.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmakeup"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-marginblock.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-marginblock.xml
new file mode 100644
index 00000000000..f40bf112a9e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-marginblock.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemarginblock" file="page-mbk.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmarginblock" file="page-mbk.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="inmargin" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupmarginblocks" file="page-mbk.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupmarginblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="marginblock" type="environment" file="page-mbk.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-margindata.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-margindata.xml
new file mode 100644
index 00000000000..5a2b014ea0f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-margindata.xml
@@ -0,0 +1,469 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemargindata" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmargindata" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="strut">
+ <cd:resolve name="value-strut"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="anchor">
+ <cd:constant type="region"/>
+ <cd:constant type="text" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="top"/>
+ <cd:constant type="line"/>
+ <cd:constant type="first"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="height"/>
+ </cd:parameter>
+ <cd:parameter name="category">
+ <cd:constant type="default"/>
+ <cd:constant type="edge"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="name">
+ <cd:constant type="???"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="scope">
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="local"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="threshold">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="line">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="stack">
+ <cd:constant type="yes"/>
+ <cd:constant type="continue"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="definemarginframed" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupmarginframed" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="margindata" generated="yes" variant="generated" file="typo-mar.mkiv">
+ <cd:sequence>
+ <cd:variable value="margindata"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="margindata" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inleftmargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inrightmargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inoutermargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ininnermargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inleftedge" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inrightedge" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ininneredge" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inouteredge" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="atleftmargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="atrightmargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inleft" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inright" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ininner" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inouter" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inmargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inother" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="margintext" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="marginword" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="margintitle" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="inothermargin" file="typo-mar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="reference">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupmargindata"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-marker.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-marker.xml
new file mode 100644
index 00000000000..103fc5e5538
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-marker.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemarker" file="attr-mkr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmarker" file="attr-mkr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetmarker" file="attr-mkr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="boxmarker" file="attr-mkr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-marking.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-marking.xml
new file mode 100644
index 00000000000..a556f100715
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-marking.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-mark-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarking"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="filtercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="relatemarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:resolve name="keyword-mark"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetmarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synchronizemarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="keep"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsemarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-mark"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmarkingelse" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-mark"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getmarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="page" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-markposition"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchonemark" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-markposition"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchtwomarks" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchallmarks" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchmark" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-markposition"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchmarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:resolve name="value-markposition"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchonemarking" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:resolve name="value-markposition"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchtwomarkings" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fetchallmarkings" file="strc-mar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-mark"/>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-math.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-math.xml
new file mode 100644
index 00000000000..894cf2a2af9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-math.xml
@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathematics" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathematics"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathematics" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="openup">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="symbolset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="functionstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="compact">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="l2r" default="yes"/>
+ <cd:constant type="r2l"/>
+ </cd:parameter>
+ <cd:parameter name="bidi">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="sygreek">
+ <cd:constant type="normal"/>
+ <cd:constant type="italic" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="lcgreek">
+ <cd:constant type="normal"/>
+ <cd:constant type="italic" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="ucgreek">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="italic"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="italics">
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3" default="yes"/>
+ <cd:constant type="4"/>
+ <cd:constant type="none"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="autopunctuation">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="domain">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="functionstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="integral">
+ <cd:constant type="limits"/>
+ <cd:constant type="nolimits"/>
+ <cd:constant type="autolimits" default="yes"/>
+ <cd:constant type="displaylimits"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlineordisplaymath" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathematics" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="math" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="m" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathcommand" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="ord"/>
+ <cd:constant type="op"/>
+ <cd:constant type="bin"/>
+ <cd:constant type="rel"/>
+ <cd:constant type="open"/>
+ <cd:constant type="close"/>
+ <cd:constant type="punct"/>
+ <cd:constant type="alpha"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="nothing" default="yes"/>
+ <cd:constant type="limop"/>
+ <cd:constant type="nolop"/>
+ <cd:constant type="box"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="one"/>
+ <cd:constant type="two"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="cd:command"/>
+ <cd:constant type="cd:oneargument"/>
+ <cd:constant type="cd:twoarguments"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathcommand" generated="yes" variant="generated" file="math-ini.mkiv">
+ <cd:sequence>
+ <cd:variable value="mathcommand"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathcommand" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathop" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mbox" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mtext" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathfunction" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mfunction" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mfunctionlabeltext" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stackrel" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="apply" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathstyle" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-mathstyle"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathstyle" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-mathstyle"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmathstyle" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:resolve name="value-mathstyle"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathstyle" type="environment" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-mathstyle"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathstyle" type="environment" begin="push" end="pop" file="math-ini.mkiv"/>
+
+ <cd:command name="usemathstyleparameter" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usemathstyleparameter" type="environment" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtext" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtexttf" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtextit" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtextsl" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtextbf" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtextbi" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtextbs" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathword" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordtf" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordit" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordsl" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordbf" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordbi" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathwordbs" file="math-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathrm" file="math-ini.mkiv"/>
+
+ <cd:command name="mathss" file="math-ini.mkiv"/>
+
+ <cd:command name="mathtt" file="math-ini.mkiv"/>
+
+ <cd:command name="mathtf" file="math-ini.mkiv"/>
+
+ <cd:command name="mathsl" file="math-ini.mkiv"/>
+
+ <cd:command name="mathit" file="math-ini.mkiv"/>
+
+ <cd:command name="mathbf" file="math-ini.mkiv"/>
+
+ <cd:command name="mathbi" file="math-ini.mkiv"/>
+
+ <cd:command name="mathbs" file="math-ini.mkiv"/>
+
+ <cd:command name="mathupright" file="math-ini.mkiv"/>
+
+ <cd:command name="mathdefault" file="math-ini.mkiv"/>
+
+ <cd:command name="mathscript" file="math-ini.mkiv"/>
+
+ <cd:command name="mathfraktur" file="math-ini.mkiv"/>
+
+ <cd:command name="mathblackboard" file="math-ini.mkiv"/>
+
+ <cd:command name="displaymath" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinemath" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textmath" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="imath" type="environment" file="supp-mat.mkiv"/>
+
+ <cd:command name="dmath" type="environment" file="supp-mat.mkiv"/>
+
+ <cd:command name="mathmode" type="environment" file="supp-mat.mkiv"/>
+
+ <cd:command name="nonmathematics" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="displaymathematics" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inlinemathematics" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="automathematics" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cramped" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="crampedllap" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="crampedrlap" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="crampedclap" file="supp-mat.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathalignment.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathalignment.xml
new file mode 100644
index 00000000000..cc0ff6fa724
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathalignment.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathalignment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathalignment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathalignment" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:sequence>
+ <cd:variable value="mathalignment"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathalignment" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="align" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathalignment"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathcases.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathcases.xml
new file mode 100644
index 00000000000..9744fa9e553
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathcases.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathcases" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathcases" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="numberdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathcases" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:sequence>
+ <cd:variable value="mathcases"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathcases" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cases" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathcases"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathfence.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathfence.xml
new file mode 100644
index 00000000000..b23f8558e2f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathfence.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathfence" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathfence"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathfence" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="command">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="mathstyle">
+ <cd:resolve name="value-mathstyle"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fence" generated="yes" variant="generated" file="math-fen.mkiv">
+ <cd:sequence>
+ <cd:variable value="fence"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fenced" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fence" file="math-fen.mkiv"/>
+
+ <cd:command name="left" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="middle" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="right" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="big" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Big" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bigg" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Bigg" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bigl" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bigm" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bigr" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Bigl" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Bigm" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Bigr" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="biggl" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="biggm" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="biggr" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Biggl" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Biggm" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Biggr" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lfence" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mfence" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rfence" file="math-fen.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkedfences" type="environment" file="math-fen.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathmatrix.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathmatrix.xml
new file mode 100644
index 00000000000..a934d2b3167
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathmatrix.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathmatrix" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathmatrix" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ <cd:constant type="lohi"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathmatrix" type="environment" generated="yes" variant="generated" file="math-ali.mkiv">
+ <cd:sequence>
+ <cd:variable value="mathmatrix"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathmatrix" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="matrix" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="matrices" type="environment" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathmatrix"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="intertext" type="environment" file="math-ali.mkiv"/>
+
+ <cd:command name="intertext" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="substack" type="environment" file="math-ali.mkiv"/>
+
+ <cd:command name="overset" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underset" file="math-ali.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathornament.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathornament.xml
new file mode 100644
index 00000000000..6009b792191
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathornament.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathornament" file="math-rad.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathornament"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathornament" file="math-rad.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="mp"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="mpoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathornament" generated="yes" variant="generated" file="math-rad.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathornament"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathradical.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathradical.xml
new file mode 100644
index 00000000000..cedbb420079
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathradical.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathradical" file="math-rad.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathradical"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathradical" file="math-rad.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="default"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="mp"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="mpoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathradical" generated="yes" variant="generated" file="math-rad.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathradical"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sqrt" file="math-rad.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-text-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mathstackers.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mathstackers.xml
new file mode 100644
index 00000000000..37b5737ff60
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mathstackers.xml
@@ -0,0 +1,1789 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemathstackers" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmathstackers"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmathstackers" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="topcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="bottomcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="middlecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="mpheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mpdepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mpoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="minheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mindepth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="mathclass">
+ <cd:constant type="rel" default="yes"/>
+ <cd:constant type="ord"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="min"/>
+ <cd:constant type="max"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="top" default="yes"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="normal"/>
+ <cd:constant type="default"/>
+ <cd:constant type="mp"/>
+ </cd:parameter>
+ <cd:parameter name="minwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="moffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="mathlimits">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathoverextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathoverextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathoverextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathunderextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bottom"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathunderextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathunderextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathdoubleextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="both"/>
+ <cd:constant type="vfenced"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathdoubleextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathdoubleextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathovertextextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bothtext"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathovertextextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathovertextextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathundertextextensible" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="bothtext"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathundertextextensible" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathundertextextensible"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemathtriplet" file="math-sty.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtriplet" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathtriplet"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathtriplet" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xequal" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xleftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xLeftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xRightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xLeftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtwoheadleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtwoheadrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmapsto" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xhookleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xhookrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xleftharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xleftharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrightharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrightharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrightoverleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xleftrightharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrightleftharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtriplerel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mequal" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mleftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mLeftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mRightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mLeftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mtwoheadleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mtwoheadrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mmapsto" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mhookleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mhookrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mleftharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mleftharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrightharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrightharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrightoverleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mleftrightharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mrightleftharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mtriplerel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eleftarrowfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="erightarrowfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eleftrightarrowfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="etwoheadrightarrowfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eleftharpoondownfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eleftharpoonupfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="erightharpoondownfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="erightharpoonupfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eoverbarfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eunderbarfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eoverbracefill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eunderbracefill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eoverparentfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eunderparentfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eoverbracketfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="eunderbracketfill" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tequal" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tmapsto" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tleftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tLeftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tRightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tLeftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ttwoheadleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ttwoheadrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thookleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thookrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tleftharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tleftharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trightharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trightharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trightoverleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tleftrightharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="trightleftharpoons" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ttriplerel" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="crightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="crightoverleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <!--
+ <cd:keywords optional="yes">
+ <cd:constant type="reverse"/>
+ <cd:constant type="mathematics"/>
+ <cd:constant type="text"/>
+ <cd:constant type="chemistry"/>
+ </cd:keywords>
+ -->
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underleftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="undertwoheadleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="undertwoheadrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underleftharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underleftharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underrightharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underrightharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbar" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbrace" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underparent" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbracket" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overleftrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overtwoheadleftarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overtwoheadrightarrow" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overleftharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overleftharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overrightharpoondown" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overrightharpoonup" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbar" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbrace" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overparent" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbracket" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doublebar" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doublebrace" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doubleparent" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doublebracket" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbarunderbar" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbraceunderbrace" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overparentunderparent" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbracketunderbracket" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbartext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbracetext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overparenttext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overbrackettext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbartext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbracetext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underparenttext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="underbrackettext" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="singlebond" file="math-stc.mkvi"/>
+
+ <cd:command name="doublebond" file="math-stc.mkvi"/>
+
+ <cd:command name="triplebond" file="math-stc.mkvi"/>
+
+ <cd:command name="definemathunstacked" file="math-stc.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="wide"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mathunstacked" generated="yes" variant="generated" file="math-stc.mkvi">
+ <cd:sequence>
+ <cd:variable value="mathunstacked"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="And" file="math-stc.mkvi"/>
+
+ <cd:command name="impliedby" file="math-stc.mkvi"/>
+
+ <cd:command name="implies" file="math-stc.mkvi"/>
+
+ <cd:command name="iff" file="math-stc.mkvi"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-metapost.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-metapost.xml
new file mode 100644
index 00000000000..ca15ebb9de9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-metapost.xml
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="MPdefinitions" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPextensions" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPinitializations" type="environment" file="meta-ini.mkiv"/>
+
+ <cd:command name="MPinclusions" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="+"/>
+ </cd:keywords>
+ <cd:resolve name="argument-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPinclusions" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="+"/>
+ </cd:keywords>
+ <cd:resolve name="argument-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineMPinstance" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupMPinstance"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupMPinstance" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="format">
+ <cd:constant type="metafun" default="yes"/>
+ <cd:constant type="mpost"/>
+ </cd:parameter>
+ <cd:parameter name="initializations">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="extensions">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="binary"/>
+ <cd:constant type="decimal"/>
+ <cd:constant type="double"/>
+ <cd:constant type="scaled"/>
+ <cd:constant type="default" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetMPinstance" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processMPfigurefile" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPdrawing" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="-"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetMPdrawing" file="meta-ini.mkiv"/>
+
+ <cd:command name="getMPdrawing" file="meta-ini.mkiv"/>
+
+ <cd:command name="MPdrawing" type="environment" begin="push" end="pop" file="meta-ini.mkiv"/>
+
+ <cd:command name="MPdrawing" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPclip" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPfontsizehskip" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupMPvariables" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setMPvariables" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setMPvariable" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-userdata"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPrawvar" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPvariable" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPvar" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useMPvariables" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-key-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uniqueMPgraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uniqueMPgraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useMPgraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useMPgraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usableMPgraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="reuseMPgraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="reusableMPgraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="reusableMPgraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uniqueMPpagegraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uniqueMPpagegraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processMPbuffer" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="runMPbuffer" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPenvironment" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="global"/>
+ <cd:constant type="+"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetMPenvironment" file="meta-ini.mkiv"/>
+
+ <cd:command name="useMPenvironmentbuffer" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPcode" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPcode" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPrun" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useMPrun" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useMPlibrary" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setMPtext" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPtext" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPstring" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPbetex" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseMPgraphic" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifMPgraphicelse" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="staticMPfigure" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="staticMPgraphic" type="environment" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usestaticMPfigure" file="meta-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupMPgraphics" file="meta-ini">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="color">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="mpy">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-mixedcolumns.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-mixedcolumns.xml
new file mode 100644
index 00000000000..09e0f3b3409
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-mixedcolumns.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definemixedcolumns" file="page-mix.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmixedcolumns" file="page-mix.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="grid">
+ <cd:inherit name="setupgrid"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="otr"/>
+ <cd:constant type="box"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="profile">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="balance">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="splitmethod">
+ <cd:constant type="none"/>
+ <cd:constant type="fixed"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="internalgrid">
+ <cd:constant type="line" default="yes"/>
+ <cd:constant type="halfline"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="rule"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="direction">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mixedcolumns" type="environment" file="page-mix.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mixedcolumns" type="environment" generated="yes" variant="generated" file="page-mix.mkiv">
+ <cd:sequence>
+ <cd:variable value="mixedcolumns"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="boxedcolumns" type="environment" file="page-mix.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmixedcolumns"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-modes.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-modes.xml
new file mode 100644
index 00000000000..8df4c27f68b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-modes.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="newmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="newsystemmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setsystemmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetsystemmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="preventmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enablemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="disablemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalpreventmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalenablemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globaldisablemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="keep"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="booleanmodevalue" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsemode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmodeelse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mode" type="environment" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="notmode" type="environment" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseallmodes" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifallmodeselse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifallmodes" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotallmodes" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="allmodes" type="environment" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="notallmodes" type="environment" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="modeset" type="environment" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="default"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pushmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="popmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pushsystemmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="popsystemmode" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-modules.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-modules.xml
new file mode 100644
index 00000000000..9567cb9af20
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-modules.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="usemodule" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="m"/>
+ <cd:constant type="p"/>
+ <cd:constant type="s"/>
+ <cd:constant type="x"/>
+ <cd:constant type="t"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-file-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="usemodules" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="m"/>
+ <cd:constant type="p"/>
+ <cd:constant type="s"/>
+ <cd:constant type="x"/>
+ <cd:constant type="t"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-file-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="usetexmodule" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="m"/>
+ <cd:constant type="p"/>
+ <cd:constant type="s"/>
+ <cd:constant type="x"/>
+ <cd:constant type="t"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-file-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="module" type="environment" variant="1" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="module" type="environment" variant="2" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmodule" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="test">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="moduleparameter" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentmoduleparameter" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="moduletestsection" type="environment" file="file-mod.mkvi"/>
+
+ <cd:command name="fetchruntinecommand" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luaenvironment" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="string-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useluamodule" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-narrow.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-narrow.xml
new file mode 100644
index 00000000000..1fa8699e136
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-narrow.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definenarrower" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupnarrower" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="left">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="middle">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="default">
+ <cd:constant type="left" prefix="cd:sign" method="none"/>
+ <cd:constant type="middle" prefix="cd:sign" method="none" default="yes"/>
+ <cd:constant type="right" prefix="cd:sign" method="none"/>
+ <cd:constant type="left" prefix="cd:number" method="factor"/>
+ <cd:constant type="middle" prefix="cd:number" method="factor"/>
+ <cd:constant type="right" prefix="cd:number" method="factor"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="narrower" type="environment" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="left" prefix="cd:sign" method="none"/>
+ <cd:constant type="middle" prefix="cd:sign" method="none"/>
+ <cd:constant type="right" prefix="cd:sign" method="none"/>
+ <cd:constant type="left" prefix="cd:number" method="factor"/>
+ <cd:constant type="middle" prefix="cd:number" method="factor"/>
+ <cd:constant type="right" prefix="cd:number" method="factor"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="narrower" type="environment" generated="yes" variant="generated" file="spac-hor.mkiv">
+ <cd:sequence>
+ <cd:variable value="narrower"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="left" prefix="cd:sign" method="none"/>
+ <cd:constant type="middle" prefix="cd:sign" method="none"/>
+ <cd:constant type="right" prefix="cd:sign" method="none"/>
+ <cd:constant type="left" prefix="cd:number" method="factor"/>
+ <cd:constant type="middle" prefix="cd:number" method="factor"/>
+ <cd:constant type="right" prefix="cd:number" method="factor"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="narrow" type="environment" variant="1" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="narrow" type="environment" variant="2" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="left" prefix="cd:sign" method="none"/>
+ <cd:constant type="middle" prefix="cd:sign" method="none"/>
+ <cd:constant type="right" prefix="cd:sign" method="none"/>
+ <cd:constant type="left" prefix="cd:number" method="factor"/>
+ <cd:constant type="middle" prefix="cd:number" method="factor"/>
+ <cd:constant type="right" prefix="cd:number" method="factor"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="narrow" type="environment" variant="3" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnarrower"/>
+ </cd:assignments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="left" prefix="cd:sign" method="none"/>
+ <cd:constant type="middle" prefix="cd:sign" method="none"/>
+ <cd:constant type="right" prefix="cd:sign" method="none"/>
+ <cd:constant type="left" prefix="cd:number" method="factor"/>
+ <cd:constant type="middle" prefix="cd:number" method="factor"/>
+ <cd:constant type="right" prefix="cd:number" method="factor"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-naturaltable.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-naturaltable.xml
new file mode 100644
index 00000000000..d7ba1aac86e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-naturaltable.xml
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupTABLE" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="r"/>
+ <cd:constant type="c"/>
+ <cd:constant type="x"/>
+ <cd:constant type="y"/>
+ <cd:constant type="row"/>
+ <cd:constant type="column"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="start"/>
+ <cd:constant type="header"/>
+ <cd:constant type="each"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="even"/>
+ <cd:constant type="one"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="-" method="none"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="first"/>
+ <cd:constant type="least"/>
+ <cd:constant type="each"/>
+ <cd:constant type="two"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="even"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="-" method="none"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="extras">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="columndistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="local" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="stretch"/>
+ <cd:constant type="tight"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="before"/>
+ <cd:constant type="after"/>
+ <cd:constant type="both"/>
+ </cd:parameter>
+ <cd:parameter name="spaceinbetween">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="splitoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="aligncharacter">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="alignmentcharacter">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLE" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TD" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nc">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nr">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="action">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TR" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TC" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TX" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TY" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TH" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TN" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="bTD"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEhead" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEnext" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEbody" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEfoot" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineTABLEsetup" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TDs" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TRs" type="environment" begin="b" end="e" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLE" type="environment" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEhead" type="environment" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEnext" type="environment" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEbody" type="environment" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TABLEfoot" type="environment" file="tabl-ntb.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupTABLE"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-note.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-note.xml
new file mode 100644
index 00000000000..be74ca3a619
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-note.xml
@@ -0,0 +1,663 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!--
+
+ <cd:command name="definenotation" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnotation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setupnotation" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="note"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titledistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titlestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="titlecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="titlecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="starter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="coupling">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="counter">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <!-- begin construction values -->
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="headcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="leftmargin"/>
+ <cd:constant type="rightmargin"/>
+ <cd:constant type="innermargin"/>
+ <cd:constant type="outermargin"/>
+ <cd:constant type="serried"/>
+ <cd:constant type="hanging"/>
+ <cd:constant type="top"/>
+ <cd:constant type="command"/>
+ <cd:constant type="note" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="headalign">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:inherit name="setupindenting"/>
+ </cd:parameter>
+ <cd:parameter name="display">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="none"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="sample">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="headstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="headcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <!-- end construction values -->
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupnotations" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupnotation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="note" type="environment" generated="yes" variant="generated:1" file="strc-not.mkvi">
+ <cd:sequence>
+ <cd:variable value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="note" type="environment" generated="yes" variant="generated:2" file="strc-not.mkvi">
+ <cd:sequence>
+ <cd:variable value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="note" generated="yes" variant="generated:1" file="strc-not.mkvi">
+ <cd:sequence>
+ <cd:variable value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="note" generated="yes" variant="generated:2" file="strc-not.mkvi">
+ <cd:sequence>
+ <cd:variable value="note"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definenote" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupnote" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="interaction">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="number"/>
+ <cd:constant type="text"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="symbolcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="indicator">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="textseparator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulecommand">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="command"/>
+ <cd:constant type="paragraph"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="tolerant" default="yes"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="verystrict"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text"/>
+ <cd:constant type="page"/>
+ <cd:constant type="high"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="none"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="firstcolumn"/>
+ <cd:constant type="lastcolumn"/>
+ </cd:parameter>
+ <cd:parameter name="next">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="paragraph">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd.command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="scope">
+ <cd:constant type="page"/>
+ </cd:parameter>
+ <cd:parameter name="columndistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="grid"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="columns"/>
+ <cd:constant type="note" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="page"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="anchor">
+ <cd:constant type="next"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupnotes" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setnote" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setnote" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setnotetext" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setnotetext" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placenotes" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localnotes" type="environment" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelocalnotes" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="postponenotes" file="strc-not.mkvi"/>
+
+ <cd:command name="flushnotes" file="strc-not.mkvi"/>
+
+ <cd:command name="doifelsenoteonsamepage" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnoteonsamepageelse" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotescollected" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="notesymbol" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="note" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnote" type="environment" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnote" type="environment" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnote" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnote" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnotetext" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="footnotetext" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placefootnotes" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localfootnotes" type="environment" file="strc-not.mkvi"/>
+
+ <cd:command name="placelocalfootnotes" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="endnote" type="environment" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="endnote" type="environment" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="endnote" variant="1" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="endnote" variant="2" file="strc-not.mkvi">
+ <cd:arguments>
+ <cd:resolve name="assignment-constructiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definelinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplinenote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="compressmethod">
+ <cd:constant type="separator"/>
+ <cd:constant type="stopper"/>
+ <cd:constant type="space"/>
+ </cd:parameter>
+ <cd:parameter name="compressseparator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="compressdistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:inherit name="setupnote"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:sequence>
+ <cd:variable value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startlinenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:sequence>
+ <cd:string value="start"/>
+ <cd:variable value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stoplinenote" generated="yes" variant="generated" file="strc-lnt.mkvi">
+ <cd:sequence>
+ <cd:string value="stop"/>
+ <cd:variable value="linenote"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fromlinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tolinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startlinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stoplinenote" file="strc-lnt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-object.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-object.xml
new file mode 100644
index 00000000000..804d17af8e6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-object.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="ifinobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-true"/>
+ <cd:delimiter name="else"/>
+ <cd:resolve name="string-false"/>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="objectmargin" file="pack-obj.mkiv"/>
+
+ <cd:command name="objectwidth" file="pack-obj.mkiv"/>
+
+ <cd:command name="objectheight" file="pack-obj.mkiv"/>
+
+ <cd:command name="objectdepth" file="pack-obj.mkiv"/>
+
+ <cd:command name="setreferencedobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settightreferencedobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setunreferencedobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settightunreferencedobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settightobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getobject" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getobjectdimensions" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defaultobjectreference" file="pack-obj.mkiv"/>
+
+ <cd:command name="defaultobjectpage" file="pack-obj.mkiv"/>
+
+ <cd:command name="doifelseobjectfound" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifobjectfoundelse" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseobjectreferencefound" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifobjectreferencefoundelse" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-offset.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-offset.xml
new file mode 100644
index 00000000000..8e68a3befd9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-offset.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupoffsetbox" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="x">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="fixed"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:resolve name="value-aligned"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupoffset" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupoffsetbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="offsetbox" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoffsetbox"/>
+ </cd:assignments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="offset" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoffset"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-opposite.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-opposite.xml
new file mode 100644
index 00000000000..497b6d50208
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-opposite.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupoppositeplacing" file="page-fac.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="opposite" type="environment" file="page-fac.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-ornament.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-ornament.xml
new file mode 100644
index 00000000000..8ad0b7cfb80
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-ornament.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="ornamenttext" variant="1" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a" default="yes"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ornamenttext" variant="2" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b" default="yes"/>
+ </cd:parameter>
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayeredtext"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ornamenttext" variant="3" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineornament" variant="1" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a" default="yes"/>
+ <cd:constant type="b"/>
+ </cd:parameter>
+ <cd:inherit name="setupcollector"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineornament" variant="2" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b" default="yes"/>
+ </cd:parameter>
+ <cd:inherit name="setuplayer"/>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayeredtext"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ornament" generated="yes" variant="generated" file="pack-box.mkiv">
+ <cd:sequence>
+ <cd:variable value="ornament"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-output.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-output.xml
new file mode 100644
index 00000000000..1f59284ffeb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-output.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineoutputroutine" file="page-otr.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupoutputroutine"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupoutputroutine" variant="1" file="page-otr.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupoutputroutine" variant="2" file="page-otr.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineoutputroutinecommand" file="page-otr.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-key-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="traceoutputroutines" file="page-otr.mkvi"/>
+
+ <cd:command name="installoutputroutine" file="page-otr.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-overlay.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-overlay.xml
new file mode 100644
index 00000000000..dd2d4336390
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-overlay.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineoverlay" file="pack-lyr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="overlaycolor" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlaylinecolor" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlaywidth" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlayheight" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlaydepth" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlayoffset" file="pack-rul.mkiv"/>
+
+ <cd:command name="overlaylinewidth" file="pack-rul.mkiv"/>
+
+ <cd:command name="doifelseoverlay" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifoverlayelse" file="pack-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagebreak.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagebreak.xml
new file mode 100644
index 00000000000..abc586ea620
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagebreak.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepagebreak" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-pagebreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagebreak" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:resolve name="value-pagebreak"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="page" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="pagebreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecolumnbreak" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:resolve name="value-columnbreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="columnbreak" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:resolve name="value-columnbreak"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="column" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="columnbreak"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepagechecker" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagechecker"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagechecker" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="0"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkpage" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagechecker"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testpage" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testpageonly" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testpagesync" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testcolumn" file="page-brk.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagecomment.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagecomment.xml
new file mode 100644
index 00000000000..26678a4a064
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagecomment.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuppagecomment" file="page-com.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom" default="yes"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagecomment" type="environment" file="page-com.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagefigure.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagefigure.xml
new file mode 100644
index 00000000000..5f776e83504
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagefigure.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="pagefigure" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagefigure" type="environment" file="page-app.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagegrid.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagegrid.xml
new file mode 100644
index 00000000000..29810d7db66
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagegrid.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepagegrid" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegrid" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nleft">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nright">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="direction">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagegrid" type="environment" generated="yes" variant="generated" file="page-cst.mkiv">
+ <cd:sequence>
+ <cd:variable value="pagegrid"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagegrid" type="environment" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegrid"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpagegrid" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="c">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="r">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="none" default="yes"/>
+ <!--
+ <cd:constant type="wide"/>
+ -->
+ </cd:parameter>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepagegridspan" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegridspan" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagegridspan" type="environment" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridspan"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagegridspanwidth" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepagegridarea" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagegridarea"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegridarea" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="x">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="y">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="clipoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegridareatext" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegridlines" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagegridstart" file="page-cst.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-number"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pageinjection.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pageinjection.xml
new file mode 100644
index 00000000000..64becc385ac
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pageinjection.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepageinjection" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjection"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppageinjection" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="previous"/>
+ <cd:constant type="next" default="yes"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="delay">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="figure" default="yes"/>
+ <cd:constant type="buffer"/>
+ <cd:constant type="setups"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="pagestate">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pageinjection" variant="1" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pageinjection" variant="2" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjection"/>
+ </cd:assignments>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepageinjectionalternative" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppageinjectionalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppageinjectionalternative" file="page-inj.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="renderingsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagelayout.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagelayout.xml
new file mode 100644
index 00000000000..dd4bc27f5cb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagelayout.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="pagearea" file="page-plg.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="lefttext"/>
+ <cd:constant type="middletext" default="yes"/>
+ <cd:constant type="righttext"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagelayout" type="environment" file="page-plg.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="page"/>
+ <cd:constant type="leftpage"/>
+ <cd:constant type="rightpage"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagenumber.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagenumber.xml
new file mode 100644
index 00000000000..d17df9425bb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagenumber.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuprealpagenumber" file="strc-pag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupuserpagenumber" file="strc-pag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="viewerprefix">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="none"/>
+ <cd:constant type="keep"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsubpagenumber" file="strc-pag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupcounter"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagenumber" file="strc-pag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupuserpagenumber"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="resetrealpagenumber" file="strc-pag.mkiv"/>
+
+ -->
+
+ <cd:command name="resetuserpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="resetsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="resetpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="setuppagenumbering" file="strc-pag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="singlesided" default="yes"/>
+ <cd:constant type="doublesided"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="header" default="yes"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="left"/>
+ <cd:constant type="middle" default="yes"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="atmargin"/>
+ <cd:constant type="marginedge"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstrealpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="firstuserpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="firstsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastrealpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastuserpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevrealpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevuserpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextrealpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextuserpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="firstrealpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="firstuserpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="firstsubpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevrealpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevuserpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="prevsubpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextrealpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextuserpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="nextsubpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastrealpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastuserpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="lastsubpage" file="strc-pag.mkiv"/>
+
+ <cd:command name="realpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="userpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="subpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="pagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="prefixedpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="incrementpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="incrementsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="decrementpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="decrementsubpagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="completepagenumber" file="strc-pag.mkiv"/>
+
+ <cd:command name="placepagenumber" file="strc-pag.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pageselection.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pageselection.xml
new file mode 100644
index 00000000000..45c433269ac
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pageselection.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="insertpages" file="page-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filterpages" file="page-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:keywords list="yes">
+ <cd:constant type="even"/>
+ <cd:constant type="odd"/>
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="cd:number" method="range"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copypages" file="page-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="marking">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupexternalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="combinepages" file="page-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="a" default="yes"/>
+ <cd:constant type="b"/>
+ <cd:constant type="c"/>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="stop">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="foreground"/>
+ <cd:constant type="color"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="slicepages" file="page-sel.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="hoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pageshift.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pageshift.xml
new file mode 100644
index 00000000000..630a5af6c4a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pageshift.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepageshift" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-dimension-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppageshift" file="page-imp.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="page" default="yes"/>
+ <cd:constant type="paper"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pagestate.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pagestate.xml
new file mode 100644
index 00000000000..0d6a9481114
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pagestate.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepagestate" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppagestate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppagestate" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional-list"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="delay">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpagestate" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagestaterealpage" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpagestaterealpageno" file="core-dat.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pairedbox.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pairedbox.xml
new file mode 100644
index 00000000000..fbf19025797
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pairedbox.xml
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepairedbox" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppairedbox" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="top"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="high"/>
+ <cd:constant type="low"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placepairedbox" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ <cd:content/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placepairedbox" type="environment" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppairedbox" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:variable value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placepairedbox" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ <cd:content/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placepairedbox" type="environment" generated="yes" variant="generated" file="pack-com.mkiv">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="pairedbox"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplegend" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelegend" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ <cd:content/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelegend" type="environment" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppairedbox"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeontopofeachother" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placesidebyside" file="pack-com.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-papersize.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-papersize.xml
new file mode 100644
index 00000000000..99d6b9d9d65
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-papersize.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!--
+
+ <cd:command name="definelayouttarget" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayouttarget"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayouttarget" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="paper">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="fit"/>
+ <cd:constant type="max" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="definepapersize" variant="1" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="setuppapersize"/>
+ </cd:parameter>
+ <cd:parameter name="paper">
+ <cd:inherit name="setuppapersize"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepapersize" variant="2" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppapersize" variant="1" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setuppapersize" variant="2" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayouttarget"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppaper" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayouttarget"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setuppapersize" variant="2" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dx">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="topspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="backspace">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="paper">
+ <cd:constant type="reset"/>
+ <cd:constant type="landscape"/>
+ <cd:constant type="mirrored"/>
+ <cd:constant type="negative"/>
+ <cd:constant type="rotated"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="fit"/>
+ <cd:constant type="max" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppaper" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="adaptpapersize" file="page-lay.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="setuppapersize"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-paragraph.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraph.xml
new file mode 100644
index 00000000000..63ddab64f07
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraph.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineparagraph" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupparagraph" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="paragraph" type="environment" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="par" type="environment" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraph"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="par" type="environment" begin="b" end ="e" file="strc-tag.mkiv"/>
+
+ <cd:command name="setupparagraphintro" file="spac-par.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="reset"/>
+ <cd:constant type="each"/>
+ <cd:constant type="first"/>
+ <cd:constant type="next"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphnumber.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphnumber.xml
new file mode 100644
index 00000000000..f3588f87c7e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphnumber.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupparagraphnumbering" file="page-par.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ <cd:constant type="line"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphs.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphs.xml
new file mode 100644
index 00000000000..6c1dae0dbc9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-paragraphs.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineparagraphs" file="tabl-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparagraphs"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupparagraphs" variant="1" file="tabl-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="each"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="fit" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupparagraphs" variant="2" file="tabl-mis.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number" prefix="cd:name" method="range"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="fit" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="top">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bottom">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="paragraphs" type="environment" file="tabl-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nextparagraphs" file="tabl-mis.mkiv"/>
+
+ <cd:command name="paragraphs" type="environment" generated="yes" variant="generated" file="tabl-mis.mkiv">
+ <cd:sequence>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="paragraphs" generated="yes" variant="generated" file="tabl-mis.mkiv">
+ <cd:sequence>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="nextparagraphs" generated="yes" variant="generated" file="tabl-mis.mkiv">
+ <cd:sequence>
+ <cd:string value="next"/>
+ <cd:variable value="paragraphs"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="paragraphscell" type="environment" file="tabl-mis.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-parallel.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-parallel.xml
new file mode 100644
index 00000000000..ef2c55f3fc7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-parallel.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineparallel" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupparallel" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="all"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeparallel" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupparallel"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseparallel" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="all" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifparallelelse" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="all" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetparallel" file="buff-par.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="all" default="yes"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="parallel" type="environment" generated="yes" variant="generated" file="buff-par.mkvi">
+ <cd:sequence>
+ <cd:variable value="parallel"/>
+ </cd:sequence>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-parbuilder.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-parbuilder.xml
new file mode 100644
index 00000000000..b7bf3741765
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-parbuilder.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineparbuilder" file="typo-bld.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="parbuilder" type="environment" file="typo-bld.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="default"/>
+ <cd:constant type="oneline"/>
+ <cd:constant type="basic"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmainparbuilder" file="typo-bld.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="default"/>
+ <cd:constant type="oneline"/>
+ <cd:constant type="basic"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-pdf.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-pdf.xml
new file mode 100644
index 00000000000..9d75ddfd3ca
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-pdf.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="pdfbackendsetcatalog" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetinfo" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetname" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetpageattribute" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetpagesattribute" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetpageresource" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetextgstate" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetcolorspace" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetpattern" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendsetshade" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendcurrentresources" file="back-pdf.mkiv"/>
+
+ <cd:command name="pdfcolor" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PDFcolor" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TransparencyHack" file="back-pdf.mkiv"/>
+
+ <cd:command name="lastpredefinedsymbol" file="pack-obj.mkiv"/>
+
+ <cd:command name="predefinesymbol" file="pack-obj.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfbackendactualtext" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pdfactualtext" file="back-pdf.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="negative" type="environment" file="attr-neg.mkiv"/>
+
+ <cd:command name="positive" type="environment" file="attr-neg.mkiv"/>
+
+ <cd:command name="setuppagetransitions" file="scrn-pag.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset" default="yes"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="start"/>
+ <cd:constant type="random"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-penalty.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-penalty.xml
new file mode 100644
index 00000000000..8cadf672be5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-penalty.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="resetpenalties" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpenalties" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="keeplinestogether" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdefaultpenalties" file="spac-ver.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-periods.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-periods.xml
new file mode 100644
index 00000000000..e72152c38fa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-periods.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupperiods" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="fit"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="periods" variant="1" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="periods" variant="2" file="enco-ini.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupperiods"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unknown" file="enco-ini.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-phantom.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-phantom.xml
new file mode 100644
index 00000000000..e3f92b81090
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-phantom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="phantom" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hphantom" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vphantom" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="phantombox" file="pack-box.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-placement.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-placement.xml
new file mode 100644
index 00000000000..4db3079579d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-placement.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineplacement" file="pack-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupplacement" file="pack-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:inherit name="snaptogrid"/>
+ </cd:parameter>
+ <cd:parameter name="linecorrection">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="depthcorrection">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="standard" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placement" file="pack-mis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placement" generated="yes" variant="generated" file="pack-mis.mkiv">
+ <cd:sequence>
+ <cd:variable value="placement"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupplacement"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-position.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-position.xml
new file mode 100644
index 00000000000..54bc952dc92
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-position.xml
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="doifpositionaction" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepositionaction" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositionactionelse" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dopositionaction" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="positionoverlay" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPoverlayanchor" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="positionregionoverlay" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="positionoverlay" type="environment" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpositiongraphic" type="environment" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpositiongraphic" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpositionmethod" type="environment" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setMPpositiongraphic" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setMPpositiongraphicrange" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:assignments delimiters="braces" list="yes" optional="yes">
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPgetposboxes" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPgetmultipars" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPgetmultishape" file="anch-pgr.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPp" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPr" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPc" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPn" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPx" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPy" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPw" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPh" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPd" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPxy" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPll" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPlr" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPur" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPul" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPls" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPrs" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpardata" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPxywhd" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPposset" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPpage" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPregion" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPcolumn" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPanchor" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPleftskip" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPrightskip" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPplus" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPv" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPrest" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MPvv" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositiononly" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setposition" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositiondata" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositionbox" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositionstrut" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositiondataplus" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpositionplus" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyposition" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifposition" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseposition" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositionelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepositiononpage" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositiononpageelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xypos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hpos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vpos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bpos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="epos" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+
+ <cd:command name="tracepositions" file="anch-pos.mkiv"/>
+
+ <cd:command name="enableparpositions" file="anch-pos.mkiv"/>
+
+ <cd:command name="disableparpositions" file="anch-pos.mkiv"/>
+
+ <cd:command name="doifelseoverlapping" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifoverlappingelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepositionsonsamepage" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositionsonsamepageelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepositionsonthispage" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositionsonthispageelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsepositionsused" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifpositionsusedelse" file="anch-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-positionbar.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-positionbar.xml
new file mode 100644
index 00000000000..e6dadf8c536
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-positionbar.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuppositionbar" file="pack-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="min">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="max">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="horizontalpositionbar" file="pack-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="verticalpositionbar" file="pack-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="horizontalgrowingbar" file="pack-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="verticalgrowingbar" file="pack-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuppositionbar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-positioning.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-positioning.xml
new file mode 100644
index 00000000000..98898c7ccc3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-positioning.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definepositioning" file="pack-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppositioning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuppositioning" file="pack-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="offset">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="ex"/>
+ <cd:constant type="em"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="in"/>
+ <cd:constant type="cm" default="yes"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="nc"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="overlay"/>
+ </cd:parameter>
+ <cd:parameter name="xoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="yoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="xstep">
+ <cd:constant type="absolute" default="yes"/>
+ <cd:constant type="relative"/>
+ </cd:parameter>
+ <cd:parameter name="ystep">
+ <cd:constant type="absolute" default="yes"/>
+ <cd:constant type="relative"/>
+ </cd:parameter>
+ <cd:parameter name="xscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="yscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="xfactor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="yfactor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="positioning" type="environment" file="pack-pos.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppositioning"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="position" file="pack-pos.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuppositioning"/>
+ </cd:assignments>
+ <cd:position list="yes"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-postponing.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-postponing.xml
new file mode 100644
index 00000000000..619a7755246
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-postponing.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="postponing" type="environment" file="page-pst.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number" prefix="cd:sign" method="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-processor.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-processor.xml
new file mode 100644
index 00000000000..a4303775452
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-processor.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineprocessor" file="typo-prc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupprocessor"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupprocessor" file="typo-prc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="applyprocessor" file="typo-prc.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-profile.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-profile.xml
new file mode 100644
index 00000000000..2df175cdf7f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-profile.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineprofile" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupprofile"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupprofile" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="strict" default="yes"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setprofile" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="none"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="halffixed"/>
+ <cd:constant type="quarterfixed"/>
+ <cd:constant type="eightsfixed"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetprofile" file="spac-prf.mkvi"/>
+
+ <cd:command name="useprofileparameter" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="profiledbox" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="none"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="halffixed"/>
+ <cd:constant type="quarterfixed"/>
+ <cd:constant type="eightsfixed"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupprofile"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="profilegivenbox" file="spac-prf.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" optional="yes">
+ <cd:constant type="none"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="halffixed"/>
+ <cd:constant type="quarterfixed"/>
+ <cd:constant type="eightsfixed"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-publication.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-publication.xml
new file mode 100644
index 00000000000..4d3583e7e63
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-publication.xml
@@ -0,0 +1,1124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="btxrenderingdefinitions" type="environment" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadbtxdefinitionfile" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadbtxreplacementfile" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebtx" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtx"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtx" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="specification">
+ <cd:constant type="default"/>
+ <cd:constant type="apa"/>
+ <cd:constant type="aps"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="default"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="authorconversion">
+ <cd:constant type="normal"/>
+ <cd:constant type="normalshort"/>
+ <cd:constant type="normalinverted"/>
+ <cd:constant type="invertedshort"/>
+ <cd:constant type="short"/>
+ </cd:parameter>
+ <cd:parameter name="etallimit">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="etaldisplay">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="etaloption">
+ <cd:constant type="last"/>
+ </cd:parameter>
+ <cd:parameter name="stopper">
+ <cd:constant type="initials"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:resolve name="value-btxalternative"/>
+ </cd:parameter>
+ <cd:parameter name="sorttype">
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="reverse"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="author">
+ <cd:constant type="???"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="default">
+ <cd:constant type="default"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ -->
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtx" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usingbtxspecification" type="environment" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebtxdataset" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxdataset"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtxdataset" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebtxregister" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtxregister" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="field">
+ <cd:constant type="keyword"/>
+ <cd:constant type="range"/>
+ <cd:constant type="pagenumber"/>
+ <cd:constant type="author"/>
+ </cd:parameter>
+ <cd:parameter name="register">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="once"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="normalshort"/>
+ <cd:constant type="invertedshort"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definebtxrendering" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtxrendering" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="textstate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="pagestate">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="previous"/>
+ <cd:constant type="cite"/>
+ <cd:constant type="here"/>
+ <cd:constant type="all"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="reference">
+ <cd:constant type="???"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="method">
+ <cd:constant type="dataset"/>
+ <cd:constant type="force"/>
+ <cd:constant type="local"/>
+ <cd:constant type="global"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="keyword">
+ <cd:constant type="???"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="sorttype">
+ <cd:constant type="short"/>
+ <cd:constant type="dataset"/>
+ <cd:constant type="list"/>
+ <cd:constant type="reference"/>
+ <cd:constant type="used"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cite"/>
+ <cd:constant type="index"/>
+ </cd:parameter>
+ <cd:parameter name="repeat">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="ignore">
+ <cd:constant type="???"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="group">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numbering">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="num"/>
+ <cd:constant type="index"/>
+ <cd:constant type="tag"/>
+ <cd:constant type="short"/>
+ <cd:constant type="page"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usebtxdataset" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="publication" type="environment" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="tag">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="category">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="k">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="t">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbtxlist" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplist"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completebtxrendering" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placebtxrendering" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofpublications" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofpublications" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupbtxrendering"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxhybridcite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxhybridcite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxhybridcite" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxhybridcite" variant="4" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxlistcitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxlistcitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxlistcitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxtextcitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxtextcitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxtextcitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxalwayscitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxalwayscitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxalwayscitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bthiddencitation" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="listcite" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textcite" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscitation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="alwayscite" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hiddencitation" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hiddencite" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="citation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="citation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="citation" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="citation" variant="4" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-citedata-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cite" variant="3" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-btxalternative-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="cite" variant="4" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nocitation" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nocitation" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nocite" variant="1" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="nocite" variant="2" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savebtxdataset" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-file-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:constant type="bib"/>
+ <cd:constant type="lua"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="file">
+ <cd:constant type="cd:file"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="all"/>
+ <cd:constant type="text"/>
+ <cd:constant type="intro"/>
+ <cd:constant type="reference"/>
+ <cd:constant type="current"/>
+ <cd:constant type="here"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="local"/>
+ <cd:constant type="component"/>
+ <cd:constant type="all" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="reference" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="current" prefix="cd:sectionblock" method="range"/>
+ <cd:constant type="previous" prefix="cd:sectionblock" method="range"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placecitation" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usebtxdefinitions" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfield" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdetail" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflush" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdirect" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfieldname" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfieldtype" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfoundname" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfoundtype" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxauthorfield" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="initials"/>
+ <cd:constant type="firstnames"/>
+ <cd:constant type="vons"/>
+ <cd:constant type="surnames"/>
+ <cd:constant type="juniors"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifelse" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoif" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifnot" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxsetup" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifelsesameaspreviouschecked" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="always"/>
+ <cd:constant type="doublesided"/>
+ </cd:keywords>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifelsesameasprevious" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifelsecombiinlist" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifsameaspreviouscheckedelse" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="always"/>
+ <cd:constant type="doublesided"/>
+ </cd:keywords>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifsameaspreviouselse" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxfield"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifcombiinlistelse" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentbtxuservariable" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifelseuservariable" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxdoifuservariableelse" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxremapauthor" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushauthor" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="num"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="normalshort"/>
+ <cd:constant type="inverted"/>
+ <cd:constant type="invertedshort"/>
+ </cd:keywords>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushsuffix" file="publ-ini.mkiv"/>
+
+ <cd:command name="btxflushauthorname" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushauthornormal" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushauthornormalshort" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushauthorinverted" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxflushauthorinvertedshort" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-btxauthor"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxsingularplural" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="editor"/>
+ <cd:constant type="producer"/>
+ <cd:constant type="director"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxsingularorplural" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="editor"/>
+ <cd:constant type="producer"/>
+ <cd:constant type="director"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxoneorrange" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="volume"/>
+ <cd:constant type="pages"/>
+ </cd:keywords>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxfirstofrange" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="volume"/>
+ <cd:constant type="pages"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxloadjournalist" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxsavejournalist" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxaddjournal" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxexpandedjournal" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="btxabbreviatedjournal" file="publ-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetfields" variant="1" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="field">
+ <cd:resolve name="value-btxfield"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetfields" variant="2" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetcompleteness" variant="1" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="field">
+ <cd:resolve name="value-btxfield"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetcompleteness" variant="2" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetauthors" variant="1" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="dataset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="field">
+ <cd:resolve name="value-btxfield"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxdatasetauthors" variant="2" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxhashedauthors" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxfields" variant="1" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="rotation">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="specification">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxfields" variant="2" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showbtxtables" file="publ-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-random.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-random.xml
new file mode 100644
index 00000000000..969cef05f49
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-random.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="getrandomcount" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrandomdimen" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrandomnumber" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrandomfloat" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setrandomseed" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrandomseed" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="randomseed" type="environment" begin="push" end="pop" file="supp-ran.mkiv"/>
+
+ <cd:command name="reuserandomseed" file="supp-ran.mkiv"/>
+
+ <cd:command name="randomnumber" file="supp-ran.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mprandomnumber" file="supp-ran.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf
new file mode 100644
index 00000000000..0a5e894168a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-readme.tex b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.tex
new file mode 100644
index 00000000000..4fbdfe14d19
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.tex
@@ -0,0 +1,114 @@
+% language=uk
+
+\usemodule[art-01,abr-01]
+
+\starttext
+
+\startsubject[title=Introduction]
+
+The interface definitions have a long history. They started out in as \TEX\
+commands, something \type {\start} \unknown\ \type {\stop} with embedded
+specifications. When \CONTEXT\ became larger and \XML\ showed up the definitions
+were converted into \XML\ and instead of putting the definitions in the source
+files they moved to one file: \type {cont-en.xml}.
+
+When at some point the number of commands not covered grew and the covered ones
+lagged behind reality, Wolfgang started to systematically collect all the
+information needed to make a more complete set of definitions. In the process we
+enhanced the supported syntax variants and added more methods to share common
+definitions. The current set of files describes all commands (even those not
+really meant for users). Because the definitions are also used to generate files
+for editors like \SCITE, there are some tools that operate on the \XML\ file. If
+needed one can still generate the large files (one per interface with merged
+definitions).
+
+\stopsubject
+
+\startsubject[title=Overviews]
+
+The files describing the interface can be recognized by the prefix \type {i-} and
+suffix \type {xml}. We don't explain the syntax here as those files give enough
+examples of usage.
+
+\starttabulate[|T|p|]
+\NC i-context \NC the main file (it loads other files) \NC \NR
+\NC i-common-definitions \NC common definitions that save time and space when
+ defining others\NC \NR
+\NC i-common-* \NC files loaded by the common definition file \NC \NR
+\NC i-* \NC the setups organized by functionality \NC \NR
+\stoptabulate
+
+There are a couple of styles that implement the rendering of the interface
+commands (traditionally called setups):
+
+\starttabulate[|T|p|]
+\NC x-setups-basics \NC loading of definitions and rendering of compact of extensive
+ interface commands \NC \NR
+\NC x-setups-overview \NC generate a document with all commands using the large combined
+ definition file \NC \NR
+\NC x-setups-generate \NC generate a document with all commands using the individual
+ files but generate the combined file in the process \NC \NR
+\NC x-setups-proofing \NC used for direct rendering of a file where commands
+ are defined \NC \NR
+\stoptabulate
+
+The proofing only works when there is the following line in a definition file:
+
+\starttyping
+<?context-directive job ctxfile x-setups.ctx ?>
+\stoptyping
+
+In that case running the \type {context} command on the file will render the
+defined commands.
+
+\starttyping
+context i-backend.xml
+\stoptyping
+
+If you want the combined \XML\ file(s), you need to call:
+
+\starttyping
+context x-setups-generate.mkiv
+context x-setups-generate.mkiv --interface=nl --result=setup-nl
+\stoptyping
+
+For each relevant interface. If you don't want that, and save quite some disk space,
+you can use:
+
+\starttyping
+context x-setups-overview.mkiv
+context x-setups-overview.mkiv --interface=nl --result=setup-nl
+\stoptyping
+
+Instead of these commands you can also do this:
+
+\starttyping
+context --extra=setups --overview
+context --extra=setups --overview --save
+context --extra=setups --overview --interface=nl
+context --extra=setups framed
+\stoptyping
+
+\stopsubject
+
+\startsubject[title=Use in manuals]
+
+{\em todo}
+
+\stopsubject
+
+\startsubject[title=Keeping up]
+
+We try to keep up with additions in \CONTEXT\ but it might be that we forget some. If
+you run into issues when processing, can't find what should be there, or find a discrepancy in
+a manual (like the beginners manual) you can contact us.
+
+\startlines
+Wolfgang Schuster
+Ton Otten
+Hans Hagen
+\stoplines
+
+\stopsubject
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-references.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-references.xml
new file mode 100644
index 00000000000..7b117e4f747
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-references.xml
@@ -0,0 +1,566 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupreferencing" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="autofile">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="doublesided">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="label"/>
+ <cd:constant type="text"/>
+ <cd:constant type="symbol"/>
+ <cd:constant type="all" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="prefix">
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pagereference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="reference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usereferenceparameter" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="boxreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hboxreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vboxreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="contentreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definereference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpagereference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-reference-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsereferencefound" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifreferencefoundelse" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupreferenceprefix" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupglobalreferenceprefix" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="referenceprefix" type="environment" begin="push" end="pop" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="referenceprefix" type="environment" begin="globalpush" end="globalpop" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-referenceprefix"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="referenceprefix" file="strc-ref.mkvi"/>
+
+ <cd:command name="in" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="at" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="about" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="from" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="over" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filterreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-referencetype"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getreferenceentry" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-referencetype"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="value-referencetype"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ref" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:resolve name="value-referencetype"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="somewhere" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="docheckedpagestate" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-reference"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="someplace" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="atpage" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="symbolreference" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definereferenceformat" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupreferenceformat"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupreferenceformat" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="label">
+ <cd:constant type="*"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="type">
+ <cd:resolve name="value-referencetype"/>
+ </cd:parameter>
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="autocase">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="referenceformat" generated="yes" variant="generated" file="strc-ref.mkvi">
+ <cd:sequence>
+ <cd:variable value="referenceformat"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="argument-text-optional"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="goto" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="goto" type="environment" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gotobox" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useurl" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-url"/>
+ <cd:resolve name="keyword-file-optional"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useURL" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-url"/>
+ <cd:resolve name="keyword-file-optional"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usefile" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useexternaldocument" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseurldefined" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifurldefinedelse" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefiledefined" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffiledefinedelse" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupurl" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="url" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineprogram" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupprograms" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="program" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definepage" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gotopage" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="keyword-reference"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupreferencestructureprefix" file="strc-ref.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:name"/>
+ <cd:constant type="cd:section"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="default"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="prefix">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="prefixseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="prefixstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="prefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="numberstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="numberstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="numbersegments">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:parameter>
+ <cd:parameter name="numberseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="prefixconnector">
+ <cd:resolve name="value-connector"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-regime.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-regime.xml
new file mode 100644
index 00000000000..6c9e5b356c9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-regime.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="currentregime" file="regi-ini.mkiv"/>
+
+ <cd:command name="disableregime" file="regi-ini.mkiv"/>
+
+ <cd:command name="enableregime" file="regi-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cp1250"/>
+ <cd:constant type="cp1251"/>
+ <cd:constant type="cp1252"/>
+ <cd:constant type="cp1253"/>
+ <cd:constant type="cp1254"/>
+ <cd:constant type="cp1255"/>
+ <cd:constant type="cp1256"/>
+ <cd:constant type="cp1257"/>
+ <cd:constant type="cp1258"/>
+ <cd:constant type="8859-1"/>
+ <cd:constant type="8859-2"/>
+ <cd:constant type="8859-3"/>
+ <cd:constant type="8859-4"/>
+ <cd:constant type="8859-9"/>
+ <cd:constant type="8859-10"/>
+ <cd:constant type="8859-13"/>
+ <cd:constant type="8859-14"/>
+ <cd:constant type="8859-15"/>
+ <cd:constant type="8859-16"/>
+ <cd:constant type="utf"/>
+ <cd:constant type="windows-1250"/>
+ <cd:constant type="windows-1251"/>
+ <cd:constant type="windows-1252"/>
+ <cd:constant type="windows-1253"/>
+ <cd:constant type="windows-1254"/>
+ <cd:constant type="windows-1255"/>
+ <cd:constant type="windows-1256"/>
+ <cd:constant type="windows-1257"/>
+ <cd:constant type="windows-1258"/>
+ <cd:constant type="il1"/>
+ <cd:constant type="il2"/>
+ <cd:constant type="il3"/>
+ <cd:constant type="il4"/>
+ <cd:constant type="il5"/>
+ <cd:constant type="il6"/>
+ <cd:constant type="il7"/>
+ <cd:constant type="il8"/>
+ <cd:constant type="il9"/>
+ <cd:constant type="il10"/>
+ <cd:constant type="iso-8859-1"/>
+ <cd:constant type="iso-8859-2"/>
+ <cd:constant type="iso-8859-3"/>
+ <cd:constant type="iso-8859-4"/>
+ <cd:constant type="iso-8859-9"/>
+ <cd:constant type="iso-8859-10"/>
+ <cd:constant type="iso-8859-13"/>
+ <cd:constant type="iso-8859-14"/>
+ <cd:constant type="iso-8859-15"/>
+ <cd:constant type="iso-8859-16"/>
+ <cd:constant type="latin1"/>
+ <cd:constant type="latin2"/>
+ <cd:constant type="latin3"/>
+ <cd:constant type="latin4"/>
+ <cd:constant type="latin5"/>
+ <cd:constant type="latin6"/>
+ <cd:constant type="latin7"/>
+ <cd:constant type="latin8"/>
+ <cd:constant type="latin9"/>
+ <cd:constant type="latin10"/>
+ <cd:constant type="utf-8"/>
+ <cd:constant type="utf8"/>
+ <cd:constant type="windows"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="regime" type="environment" file="regi-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:inherit name="enableregime"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-register.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-register.xml
new file mode 100644
index 00000000000..561912f6a7a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-register.xml
@@ -0,0 +1,646 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupregister" variant="1" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="referencemethod">
+ <cd:constant type="forward"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="xmlsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b"/>
+ <cd:constant type="A"/>
+ <cd:constant type="B"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:resolve name="value-sortmethod"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixseparatorset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconnector">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefix">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="pageseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pagestarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="pagesegments">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indicator">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="deeptextcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="pagecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="text"/>
+ <cd:constant type="pagenumber" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="pagenumber">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="a"/>
+ <cd:constant type="n" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:resolve name="value-sortorder"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="pagecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="balance">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant type="numbers" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupregister" variant="2" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number" prefix="cd:name" method="range"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="referencemethod">
+ <cd:constant type="forward"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="xmlsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b"/>
+ <cd:constant type="A"/>
+ <cd:constant type="B"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:resolve name="value-sortmethod"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixseparatorset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefixconnector">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="pageprefix">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="pageseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pageconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="pagestarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="pagestopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="pagesegments">
+ <cd:resolve name="value-numbersegments"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indicator">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="deeptextcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="pagecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="text"/>
+ <cd:constant type="pagenumber" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="pagenumber">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="symbol">
+ <cd:constant type="a"/>
+ <cd:constant type="n" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:resolve name="value-sortorder"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="pagestyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="pagecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="balance">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant type="numbers" default="yes"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupregisters" variant="1" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupregisters" variant="2" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:number" prefix="cd:name" method="range"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="register" generated="yes" variant="generated:1" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="register" generated="yes" variant="generated:2" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="seeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:string value="see"/>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:string value="place"/>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completeregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:string value="complete"/>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupregister" generated="yes" variant="generated" file="strc-reg.mkiv">
+ <cd:sequence>
+ <cd:string value="setup"/>
+ <cd:variable value="register"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="index" variant="1" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="index" variant="2" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="seeindex" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeindex" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completeindex" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupindex" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:keywords>
+ <cd:index list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stopregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setregisterentry" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-registerdata-list"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="finishregisterentry" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="label">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="keys">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="entries">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setstructurepageregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-registerdata-list"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startstructurepageregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="assignment-registerdata-list"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stopstructurepageregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="determineregistercharacteristics" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="language">
+ <cd:resolve name="value-sortorder"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:resolve name="value-sortmethod"/>
+ </cd:parameter>
+ <cd:parameter name="numberorder">
+ <cd:constant type="numbers" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="all"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="utilityregisterlength" file="strc-reg.mkiv"/>
+
+ <cd:command name="placeregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completeregister" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupregister"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentregisterpageuserdata" file="strc-reg.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-renderingwindow.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-renderingwindow.xml
new file mode 100644
index 00000000000..219fda285d1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-renderingwindow.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="useexternalrendering" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ <cd:keywords>
+ <cd:constant type="auto"/>
+ <cd:constant type="embed"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setinternalrendering" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="auto"/>
+ <cd:constant type="embed"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definerenderingwindow" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuprenderingwindow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuprenderingwindow" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="openpageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:parameter name="closepageaction">
+ <cd:constant type="cd:reference"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placerenderingwindow" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-replacement.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-replacement.xml
new file mode 100644
index 00000000000..95b6272e722
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-replacement.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="replaceword" file="lang-rep.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setreplacement" file="lang-rep.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="reset"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetreplacement" file="lang-rep.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-rotatation.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-rotatation.xml
new file mode 100644
index 00000000000..95a5815e9ab
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-rotatation.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="mirror" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuprotate" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="high"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="default"/>
+ <cd:constant type="normal"/>
+ </cd:parameter>
+ <cd:parameter name="rotation">
+ <cd:constant type="left"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rotate" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuprotate"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dorotatebox" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-scale.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-scale.xml
new file mode 100644
index 00000000000..135d6fba84e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-scale.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definescale" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupscale" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="scale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="xscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="yscale">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="factor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="hfactor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="wfactor">
+ <cd:constant type="fit"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="max"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="default"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="s">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="sy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="equalwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="equalheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:constant type="yes"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="height"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="halfline"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="scale" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscale"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastscale" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastsxsy" file="grph-trf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-script.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-script.xml
new file mode 100644
index 00000000000..f1aee232a96
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-script.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definescript" file="scrp-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupscript"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupscript" file="scrp-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="hangul"/>
+ <cd:constant type="hanzi"/>
+ <cd:constant type="nihongo"/>
+ <cd:constant type="ethiopic"/>
+ <cd:constant type="thai"/>
+ <cd:constant type="test"/>
+ </cd:parameter>
+ <cd:parameter name="preset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="features">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupscripts" file="scrp-ini.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupscript"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setscript" file="scrp-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hangul"/>
+ <cd:constant type="hanzi"/>
+ <cd:constant type="nihongo"/>
+ <cd:constant type="ethiopic"/>
+ <cd:constant type="thai"/>
+ <cd:constant type="test"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetscript" file="scrp-ini.mkvi"/>
+
+ <cd:command name="script" type="environment" file="scrp-ini.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="hangul"/>
+ <cd:constant type="hanzi"/>
+ <cd:constant type="nihongo"/>
+ <cd:constant type="ethiopic"/>
+ <cd:constant type="thai"/>
+ <cd:constant type="test"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="script" generated="yes" varianet="generated" file="scrp-ini.mkvi">
+ <cd:sequence>
+ <cd:variable value="script"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="hangul" file="scrp-ini.mkvi"/>
+
+ <cd:command name="hanzi" file="scrp-ini.mkvi"/>
+
+ <cd:command name="nihongo" file="scrp-ini.mkvi"/>
+
+ <cd:command name="ethiopic" file="scrp-ini.mkvi"/>
+
+ <cd:command name="thai" file="scrp-ini.mkvi"/>
+
+ <cd:command name="latin" file="scrp-ini.mkvi"/>
+
+ <!--
+
+ <cd:command name="test" file="scrp-ini.mkvi"/>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-section.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-section.xml
new file mode 100644
index 00000000000..05368f93f0e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-section.xml
@@ -0,0 +1,671 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definehead" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-section-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuphead"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuphead" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="frontpartlabel">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="bodypartlabel">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="appendixlabel">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="backpartlabel">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="catcodes">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionresetset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionseparatorset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionconversionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionstarter">
+ <cd:resolve name="value-starter"/>
+ </cd:parameter>
+ <cd:parameter name="sectionstopper">
+ <cd:resolve name="value-stopper"/>
+ </cd:parameter>
+ <cd:parameter name="sectionset">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="sectionsegments">
+ <cd:resolve name="value-prefixsegments"/>
+ </cd:parameter>
+ <cd:parameter name="referenceprefix">
+ <cd:constant type="+"/>
+ <cd:constant type="-"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="numberstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="numbercolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="coupling">
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="ownnumber">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="beforesection">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="aftersection">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="insidesection">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="incrementnumber">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="list"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="placehead">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="hidden"/>
+ <cd:constant type="empty"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="marking">
+ <cd:constant type="page"/>
+ <cd:constant type="reset"/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:constant type=""/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:resolve name="value-textstate"/>
+ </cd:parameter>
+ <cd:parameter name="text">
+ <cd:resolve name="value-textstate"/>
+ </cd:parameter>
+ <cd:parameter name="footer">
+ <cd:resolve name="value-textstate"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="aligntitle">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="float"/>
+ </cd:parameter>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="interaction">
+ <cd:constant type="list"/>
+ <cd:constant type="reference"/>
+ </cd:parameter>
+ <cd:parameter name="internalgrid">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="grid">
+ <cd:resolve name="value-grid"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="tolerance">
+ <cd:inherit name="setuptolerance"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="hang">
+ <cd:constant type="line"/>
+ <cd:constant type="broad"/>
+ <cd:constant type="fit"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="text"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="inmargin"/>
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="bottom"/>
+ <cd:constant type="reverse"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="numberwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="commandbefore">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="commandafter">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:twoarguments"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="deeptextcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="numbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="deepnumbercommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupheads" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuphead"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="section" generated="yes" variant="generated:1" file="strc-sec.mkiv">
+ <cd:sequence>
+ <cd:variable value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="section" generated="yes" variant="generated:2" file="strc-sec.mkiv">
+ <cd:sequence>
+ <cd:variable value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="section" generated="yes" variant="generated:3" file="strc-sec.mkiv">
+ <cd:sequence>
+ <cd:variable value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="section" type="environment" generated="yes" variant="generated" file="strc-sec.mkiv">
+ <cd:sequence>
+ <cd:variable value="section"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="part" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chapter" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="section" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsection" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsection" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsection" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubsection" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="title" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subject" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubject" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubject" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubject" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubsubject" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-reference-list-optional"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="part" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="chapter" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="section" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsection" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsection" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsection" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubsection" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="title" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subject" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubject" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubject" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubject" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="subsubsubsubsubject" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedsection" type="environment" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesection" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeheadtext" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placeheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ <cd:keywords>
+ <cd:constant type="cd:number" prefix="cd:sign" method="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="determineheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentheadnumber" file="strc-sec.mkiv"/>
+
+ <cd:command name="namedheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-section"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="somenamedheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-section"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="previous"/>
+ <cd:constant type="current"/>
+ <cd:constant type="next"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="previous"/>
+ <cd:constant type="current" default="yes"/>
+ <cd:constant type="next"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="someheadnumber" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-section"/>
+ <cd:keywords>
+ <cd:constant type="previous"/>
+ <cd:constant type="current"/>
+ <cd:constant type="next"/>
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedstructureheadlocation" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-section"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="structurenumber" file="strc-sec.mkiv"/>
+
+ <cd:command name="structuretitle" file="strc-sec.mkiv"/>
+
+ <cd:command name="structurevariable" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="structureuservariable" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedstructurevariable" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-section"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedstructureuservariable" file="strc-sec.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-section"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesectionlevels" file="strc-lev.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-section-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sectionlevel" type="environment" file="strc-lev.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="assignment-sectiondata-list-optional"/>
+ <cd:resolve name="assignment-userdata-list-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineheadalternative" file="strc-ren.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupheadalternative"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupheadalternative" file="strc-ren.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="alternative">
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="renderingsetup">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localheadsetup" type="environment" file="strc-ren.mkiv"/>
+
+ <cd:command name="headhbox" file="strc-ren.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headvbox" file="strc-ren.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="headreferenceattributes" file="strc-ren.mkiv"/>
+
+ <cd:command name="headnumbercontent" file="strc-ren.mkiv"/>
+
+ <cd:command name="headtextcontent" file="strc-ren.mkiv"/>
+
+ <cd:command name="headwidth" file="strc-ren.mkiv"/>
+
+ <cd:command name="headtextwidth" file="strc-ren.mkiv"/>
+
+ <cd:command name="headnumberwidth" file="strc-ren.mkiv"/>
+
+ <cd:command name="headnumberdistance" file="strc-ren.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-sectionblock.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-sectionblock.xml
new file mode 100644
index 00000000000..fc6d87cff0e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-sectionblock.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definesectionblock" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsectionblock" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="page">
+ <cd:inherit name="page"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="number">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setsectionblock" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sectionblock" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sectionblock" type="environment" generated="yes" variant="generated" file="strc-sbe.mkiv">
+ <cd:sequence>
+ <cd:variable value="sectionblock"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sectionblockenvironment" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="frontmatter" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="bodymatter" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendices" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="backmatter" type="environment" file="strc-sbe.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="bookmark">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:inherit name="setupsectionblock"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-selector.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-selector.xml
new file mode 100644
index 00000000000..e593e91175c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-selector.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineselector" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupselector"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupselector" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="m">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="select" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directselect" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ <cd:content optional="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-setups.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-setups.xml
new file mode 100644
index 00000000000..fec773f2ef2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-setups.xml
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setups" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setups" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setup" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setup" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directsetup" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastsetup" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="texsetup" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luasetup" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="systemsetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetsetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showsetupsdefinition" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupwithargument" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastsetupwithargument" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupwithargumentswapped" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastsetupwithargumentswapped" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="usesetupsparameter" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="autosetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doprocesslocalsetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsetupselse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotsetups" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luasetups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="luasetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsetups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawsetups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localsetups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localsetups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setups" type="environment" variant="1" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="grid"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setups" type="environment" variant="2" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-shift.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-shift.xml
new file mode 100644
index 00000000000..d9b8bf7e457
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-shift.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineshift" file="node.rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupshift"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupshift" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="ex" default="yes"/>
+ <cd:constant type="em"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="in"/>
+ <cd:constant type="cm"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="nc"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="dy">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shift" generated="yes" variant="generated" file="node-rul.mkiv">
+ <cd:sequence>
+ <cd:variable value="shift"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shift" type="environment" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shiftup" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="shiftdown" file="node-rul.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-sidebar.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-sidebar.xml
new file mode 100644
index 00000000000..8c00ce1ff4e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-sidebar.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definesidebar" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsidebar" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="setupsidebars" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="sidebar" type="environment" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmarginrule" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupsidebar"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupmarginrules" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setupmarginrule"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="marginrule" type="environment" variant="1" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="marginrule" type="environment" variant="2" file="anch-bar.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupmarginrule"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-smash.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-smash.xml
new file mode 100644
index 00000000000..16c1046bd1a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-smash.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="smashbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smashboxed" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hsmashbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vsmashbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-box"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hsmash" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vsmash" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hsmashed" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vsmashed" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smashedhbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smashedvbox" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smash" file="supp-box.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="w"/>
+ <cd:constant type="h" default="yes"/>
+ <cd:constant type="d" default="yes"/>
+ <cd:constant type="t"/>
+ <cd:constant type="b"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-sort.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-sort.xml
new file mode 100644
index 00000000000..5ecc83f18de
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-sort.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definesorting" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-plural"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="none"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsorting" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="next">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:threearguments"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:resolve name="value-sortorder"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:resolve name="value-sortmethod"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="synonymstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sorting" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:variable value="sorting"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesort" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofsorts" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:string value="placelistof"/>
+ <cd:variable value="sorts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofsorts" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:string value="completelistof"/>
+ <cd:variable value="sorts"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecurrentsortingused" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetusedsortings" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registersort" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofsorts" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofsorts" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="logo" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistoflogos" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistoflogos" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsorting"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-soundtrack.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-soundtrack.xml
new file mode 100644
index 00000000000..b0f460352cb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-soundtrack.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupexternalsoundtracks" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="option">
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="useexternalsoundtrack" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checksoundtrack" file="scrn-wid.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-spellchecking.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-spellchecking.xml
new file mode 100644
index 00000000000..615ba390bc4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-spellchecking.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupspellchecking" file="lang-wrd.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" defult="yes"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ </cd:parameter>
+ <cd:parameter name="list">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="loadspellchecklist" file="lang-wrd.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-startstop.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-startstop.xml
new file mode 100644
index 00000000000..e23485fd634
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-startstop.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definestartstop" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupstartstop"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupstartstop" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <!--
+ <cd:parameter name="commands">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ -->
+ <cd:parameter name="setups">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startstop" type="environment" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:sequence>
+ <cd:variable value="startstop"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="startstop" type="environment" file="core-sys.mkiv">
+ <cd:sequence>
+ <cd:string value="​"/><!-- value="zero width space -->
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="startstop" generated="yes" variant="generated" file="core-sys.mkiv">
+ <cd:sequence>
+ <cd:variable value="startstop"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-stream.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-stream.xml
new file mode 100644
index 00000000000..40ddc89de46
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-stream.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="currentoutputstream" file="page-str.mkiv"/>
+
+ <cd:command name="ifinoutputstream" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-true"/>
+ <cd:delimiter name="else"/>
+ <cd:resolve name="string-false"/>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enableoutputstream" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="disableoutputstream" file="page-str.mkiv"/>
+
+ <cd:command name="outputstream" type="environment" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushoutputstream" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="outputstreambox" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="outputstreamcopy" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="outputstreamunvbox" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="outputstreamunvcopy" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synchronizeoutputstreams" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pushoutputstream" file="page-str.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-string.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-string.xml
new file mode 100644
index 00000000000..b3efe552b26
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-string.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="wdofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="htofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dpofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hdofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="htdpofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="widthofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="heightofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="depthofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="heightanddepthofstring" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setwidthof" file="blob-ini.mkiv">
+ <cd:arguments>
+ <cd:text/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-strut.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-strut.xml
new file mode 100644
index 00000000000..1fd12a3bb77
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-strut.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="strutdp" file="supp-box.mkiv"/>
+
+ <cd:command name="strutht" file="supp-box.mkiv"/>
+
+ <cd:command name="strutwd" file="supp-box.mkiv"/>
+
+ <cd:command name="struthtdp" file="supp-box.mkiv"/>
+
+ <cd:command name="setupstruts" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:resolve name="value-strut"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synchronizestrut" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:resolve name="value-strut"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="strut" file="spac-ver.mkiv"/>
+
+ <cd:command name="setstrut" file="spac-ver.mkiv"/>
+
+ <cd:command name="setcharstrut" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setfontstrut" file="spac-ver.mkiv"/>
+
+ <cd:command name="setcapstrut" file="spac-ver.mkiv"/>
+
+ <cd:command name="setnostrut" file="spac-ver.mkiv"/>
+
+ <cd:command name="showstruts" file="spac-ver.mkiv"/>
+
+ <cd:command name="showcolorstruts" file="spac-ver.mkiv"/>
+
+ <cd:command name="strut" type="environment" begin="beg" end="end" file="spac-ver.mkiv"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-symbol.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-symbol.xml
new file mode 100644
index 00000000000..33d5b4707a4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-symbol.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definesymbol" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseinsymbolset" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinsymbolsetelse" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinsymbolset" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesymbolset" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsymbolsetelse" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="symbol" variant="1" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="symbol" variant="2" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directsymbol" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definefiguresymbol" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="externalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="figuresymbol" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:file"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="externalfigure"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesymboldefined" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsymboldefinedelse" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="symbolset" type="environment" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsymbolset" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetsymbolset" file="symb-ini.mkiv"/>
+
+ <cd:command name="usesymbols" file="symb-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showsymbolset" file="symb-run.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-synonym.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-synonym.xml
new file mode 100644
index 00000000000..c64c1c75948
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-synonym.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definesynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-plural"/>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupsynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="expansion">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="xml"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="first"/>
+ <cd:constant type="last"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="next">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:threearguments"/>
+ </cd:parameter>
+ <cd:parameter name="textcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:resolve name="value-sortorder"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:resolve name="value-sortmethod"/>
+ </cd:parameter>
+ <cd:parameter name="criterium">
+ <cd:constant type="current"/>
+ <cd:constant type="previous"/>
+ <cd:constant type="local"/>
+ <cd:constant type="text"/>
+ <cd:constant type="all" default="yes"/>
+ <cd:constant type="cd:section"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="textstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="textcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="synonymstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="synonymcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synonym" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:variable value="synonym"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definesynonym" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofsynonyms" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:string value="placelistof"/>
+ <cd:variable value="synonyms"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofsynonyms" generated="yes" variant="generated" file="strc-syn.mkiv">
+ <cd:sequence>
+ <cd:string value="completelistof"/>
+ <cd:variable value="synonyms"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registersynonym" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecurrentsynonymused" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecurrentsynonymshown" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetusedsynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetshownsynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofsynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofsynonyms" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-singular"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="abbreviation" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="argument-text"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="infull" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="placelistofabbreviations" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="completelistofabbreviations" file="strc-syn.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupsynonyms"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-system.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-system.xml
new file mode 100644
index 00000000000..e1404754eb3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-system.xml
@@ -0,0 +1,3534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="expanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="expanded" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="gobbleoneargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbletwoarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblethreearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblefourarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblefivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblesixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblesevenarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbleeightarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbleninearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbletenarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbleoneoptional" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbletwooptionals" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblethreeoptionals" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblefouroptionals" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblefiveoptionals" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="donothing" file="syst-aux.mkiv"/>
+
+ <cd:command name="doifelsenextchar" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextcharelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenextoptional" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextoptionalelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenextoptionalcs" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextoptionalcselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenextbgroup" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextbgroupelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenextbgroupcs" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextbgroupcselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenextparenthesis" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnextparenthesiselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefastoptionalcheck" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffastoptionalcheckelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefastoptionalcheckcs" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffastoptionalcheckcselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assumelongusagecs" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setgvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setevalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setxvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letgvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="undefinevalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ignorevalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuevalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setugvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuxvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getuvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseundefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifundefinedelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdefinedelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifundefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letbeundefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localundefine" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalundefine" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsealldefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifalldefinedelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doif" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnot" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptyelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinsetelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsecommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcommonelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifcommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotcommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="quitcommalist" file="syst-aux.mkiv"/>
+
+ <cd:command name="quitprevcommalist" file="syst-aux.mkiv"/>
+
+ <cd:command name="processcommacommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcommalistwithparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcommalist" type="environment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcommacommand" type="environment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentcommalistitem" file="syst-aux.mkiv"/>
+
+ <cd:command name="processaction" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command"/>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processfirstactioninset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command"/>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processallactionsinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command"/>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="commalistelement" file="syst-aux.mkiv"/>
+
+ <cd:command name="firstcharacter" file="syst-aux.mkiv"/>
+
+ <cd:command name="remainingcharacters" file="syst-aux.mkiv"/>
+
+ <cd:command name="getfirstcharacter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsefirstchar" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiffirstcharelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thefirstcharacter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="theremainingcharacters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseinstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinstringelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotinstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseincsname" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-csname"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifincsnameelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-csname"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenumber" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnumberelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnumber" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotnumber" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="percentdimen" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="%" prefix="cd:number" method="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setpercentdimen" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="%" prefix="cd:number" method="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="makerawcommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawprocesscommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawprocesscommacommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawdoifelseinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawdoifinsetelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawdoifinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawprocessaction" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command"/>
+ <cd:apply list="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentvalue" file="syst-aux.mkiv"/>
+
+ <cd:command name="getparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="geteparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getgparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getxparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="forgetparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getexpandedparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doassign" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doeassign" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="undoassign" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doassignempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processassignmentlist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processassignmentcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processassignmentlist" type="environment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processassignmentcommand" type="environment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentassignmentlistkey" file="syst-aux.mkiv"/>
+
+ <cd:command name="currentassignmentlistvalue" file="syst-aux.mkiv"/>
+
+ <cd:command name="getemptyparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="copyparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-key-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ifparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-true"/>
+ <cd:delimiter name="else"/>
+ <cd:resolve name="string-false"/>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="commalistsize" file="syst-aux.mkiv"/>
+
+ <cd:command name="getcommalistsize" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getcommacommandsize" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getfromcommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getfromcommacommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ <cd:resolve name="keyword-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dogetcommacommandelement" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number"/>
+ <cd:delimiter name="from"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosingleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dodoubleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotripleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquadrupleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquintupleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosixtupleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doseventupleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosingleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dodoubleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotripleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquadrupleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquintupleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dosixtupleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doseventupleargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="strippedcsname" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="strippedcsname" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:text"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="complexorsimple" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="complexorsimple" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="complexorsimpleempty" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="complexorsimpleempty" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecomplexorsimple" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecomplexorsimple" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecomplexorsimpleempty" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definecomplexorsimpleempty" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:csname"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="permitspacesbetweengroups" file="syst-aux.mkiv"/>
+
+ <cd:command name="dontpermitspacesbetweengroups" file="syst-aux.mkiv"/>
+
+ <cd:command name="dosinglegroupempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dodoublegroupempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotriplegroupempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquadruplegroupempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doquintuplegroupempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ <cd:resolve name="argument-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstofoneargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstoftwoarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondoftwoarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstofthreearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondofthreearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thirdofthreearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstoffourarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondoffourarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thirdoffourarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fourthoffourarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstoffivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondoffivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thirdoffivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fourthoffivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fifthoffivearguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thirdofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fourthofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fifthofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="sixthofsixarguments" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstofoneunexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstoftwounexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondoftwounexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="firstofthreeunexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="secondofthreeunexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thirdofthreeunexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ <cd:resolve name="argument-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalletempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letvalueempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letgvalueempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letvaluerelax" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letgvalurelax" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="relaxvalueifundefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="rawgetparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="texdefinition" type="environment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="spaces"/>
+ <cd:constant type="nospaces"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="global"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="unexpanded"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="expanded"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none">
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ <cd:keywords delimiters="none" optional="yes">
+ <cd:constant type="cd:template"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="texdefinition" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="texcode" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="newcounter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastincrement" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fastdecrement" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="increment" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="increment" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" list="yes">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="increment" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="increment" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" list="yes">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="decrement" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="decrement" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" list="yes">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:number"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="incrementvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="decrementvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="newsignal" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkedstrippedcsname" variant="1" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checkedstrippedcsname" variant="2" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savenormalmeaning" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="recursedepth" file="syst-aux.mkiv"/>
+
+ <cd:command name="recurselevel" file="syst-aux.mkiv"/>
+
+ <cd:command name="dostepwiserecurse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:number" prefix="cd:sign" method="none"/>
+ </cd:keywords>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dorecurse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doexpandedrecurse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowith" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command-list"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doloop" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="exitloop" file="syst-aux.mkiv"/>
+
+ <cd:command name="exitloopnow" file="syst-aux.mkiv"/>
+
+ <cd:command name="dorecurse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doloopoverlist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text-list"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="recursestring" file="syst-aux.mkiv"/>
+
+ <cd:command name="newevery" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="EveryPar" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="EveryLine" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="forgeteverypar" file="syst-aux.mkiv"/>
+
+ <cd:command name="convertvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-name"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defconvertedvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseassignment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifassignmentelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="docheckassignment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ifassignment" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-true"/>
+ <cd:delimiter name="else"/>
+ <cd:resolve name="string-false"/>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="convertcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defconvertedargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defconvertedcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="edefconvertedargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gdefconvertedargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gdefconvertedcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xdefconvertedargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsemeaning" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifmeaningelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesamestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsamestringelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsamestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotsamestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ConvertToConstant" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ConvertConstantAfter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assignifempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="grabuntil" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processbetween" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbleuntil" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbleuntilrelax" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="relax"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processuntil" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="groupedcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="simplegroupedcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pickupgroupedcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="BeforePar" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="AfterPar" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="GetPar" file="syst-aux.mkiv"/>
+
+ <cd:command name="GotoPar" file="syst-aux.mkiv"/>
+
+ <cd:command name="dowithpargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowithwargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dorepeatwithcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:number" method="factor"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsestringinstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifstringinstringelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendtoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependtoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendtoksonce" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependtoksonce" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseintoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifintokselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="collecting" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="collect" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="expandedcollect" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="collect" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="collectexpanded" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removetoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="from"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendetoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependetoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-command"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushtoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="beforesplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="aftersplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="greedysplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="beforetestandsplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="aftertestandsplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testandsplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="at"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ <cd:delimiter name="and"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removesubstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="from"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendtocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependtocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="addtocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pretocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="robustdoifelseinset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="robustdoifinsetelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="robustaddtocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="robustpretocommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xsplitstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="removefromcommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="substituteincommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="replaceincommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalprocesscommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="withoutpt" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PtToCm" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dimensiontocount" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="numberofpoints" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="swapdimens" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="swapcounts" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="swapmacros" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalswapdimens" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalswapcounts" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalswapmacros" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalpushmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localpushmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="globalpopmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localpopmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="pushmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="popmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="localhsize" file="syst-aux.mkiv"/>
+
+ <cd:command name="setlocalhsize" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="cd:dimension" prefix="cd:sign" method="none"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="availablehsize" file="syst-aux.mkiv"/>
+
+ <cd:command name="distributedhsize" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="hsizefraction" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsevalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvalueelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnothing" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsomething" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenothing" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnothingelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesomething" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsomethingelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvaluenothing" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvaluesomething" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsevaluenothing" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvaluenothingelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseemptyvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptyvalueelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptyvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotemptyvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseallcommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifallcommonelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifallcommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotallcommon" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-content-list"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dodoubleemptywithset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-list-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotripleemptywithset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-list-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dodoubleargumentwithset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-list"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dotripleargumentwithset" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="keyword-dummy-list"/>
+ <cd:resolve name="keyword-dummy"/>
+ <cd:resolve name="keyword-dummy"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stripcharacter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-character"/>
+ <cd:delimiter name="from"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="stripspaces" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:delimiter name="from"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unspacestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="executeifdefined" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesomespace" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsomespaceelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processseparatedlist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:csname"/>
+ <cd:constant type="cd:command"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processlist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-character"/>
+ <cd:resolve name="argument-text"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processassignlist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text-list"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="untexargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="untexcommand" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-csname"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PointsToBigPoints" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PointsToWholeBigPoints" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ScaledPointsToBigPoints" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ScaledPointsToWholeBigPoints" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PointsToReal" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dontleavehmode" file="syst-aux.mkiv"/>
+
+ <cd:command name="utfupper" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="utflower" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="uppercasestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lowercasestring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="counttoken" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="in"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="counttokens" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="splitofftokens" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="from"/>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="handletokens" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="with"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settrialtypesetting" file="syst-aux.mkiv"/>
+
+ <cd:command name="resettrialtypesetting" file="syst-aux.mkiv"/>
+
+ <cd:command name="iftrialtypesetting" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-true"/>
+ <cd:delimiter name="else"/>
+ <cd:resolve name="string-false"/>
+ <cd:delimiter name="fi"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="integerrounding" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="onedigitrounding" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="twodigitrounding" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="threedigitrounding" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processcontent" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dogobblesingleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dogobbledoubleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblesingleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobbledoubleempty" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dummy-optional"/>
+ <cd:resolve name="keyword-dummy-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsesometoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsometokselse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifsometoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptytoks" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="strictinspectnextcharacter" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="strictdoifelsenextoptional" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="strictdoifnextoptionalelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gobblespacetokens" file="syst-aux.mkiv"/>
+
+ <cd:command name="verbatimstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lastdigit" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lasttwodigits" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="serializedcommalist" file="syst-aux.mkiv"/>
+
+ <cd:command name="serializecommalist" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-command-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="purenumber" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filterfromvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filterfromnext" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-content-optional"/>
+ <cd:resolve name="argument-content-optional"/>
+ <cd:resolve name="argument-content-optional"/>
+ <cd:resolve name="argument-content-optional"/>
+ <cd:resolve name="argument-content-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definemeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="freezemeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setmeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setgmeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setemeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setxmeasure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="measure" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="measured" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dividedsize" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedimension" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdimensionelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedimenstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdimenstringelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="compresult" file="syst-aux.mkiv"/>
+
+ <cd:command name="comparedimension" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="comparedimensioneps" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letcscsname" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:delimiter name="csname"/>
+ <cd:resolve name="string-name"/>
+ <cd:delimiter name="endcsname"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letcsnamecs" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:delimiter name="csname"/>
+ <cd:resolve name="string-name"/>
+ <cd:delimiter name="endcsname"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="letcsnamecsname" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:delimiter name="csname"/>
+ <cd:resolve name="string-name"/>
+ <cd:delimiter name="endcsname"/>
+ <cd:delimiter name="csname"/>
+ <cd:resolve name="string-name"/>
+ <cd:delimiter name="endcsname"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="addvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unspaced" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unspaceargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-text"/>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unspaceafter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsehasspace" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifhasspaceelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setflag" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetflag" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flag" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseflagged" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifflaggedelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotflagged" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inheritparameter" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="keyword-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsenonzeropositive" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnonzeropositiveelse" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrawparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getraweparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrawgparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getrawxparameters" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-text"/>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unprotected" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-content"/>
+ <cd:delimiter name="par"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resettimer" file="syst-aux.mkiv"/>
+
+ <cd:command name="elapsedtime" file="syst-aux.mkiv"/>
+
+ <cd:command name="elapsedseconds" file="syst-aux.mkiv"/>
+
+ <cd:command name="currentfeaturetest" file="syst-aux.mkiv"/>
+
+ <cd:command name="testfeature" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-content"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showtimer" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testfeatureonce" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-content"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="freezedimenmacro" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="negated" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assigndimen" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="appendgvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="prependgvalue" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processranges" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="cd:number" method="range"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dowithrange" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:number" prefix="cd:number" method="range"/>
+ </cd:keywords>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ignoreimplicitspaces" file="syst-aux.mkiv"/>
+
+ <cd:command name="nointerference" type="environment" file="syst-aux.mkiv"/>
+
+ <cd:command name="expandcheckedcsname" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="docheckedpair" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="constantnumber" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="constantnumberargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="constantdimen" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="constantdimenargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="constantemptyargument" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getsubstring" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="converteddimen" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="ex"/>
+ <cd:constant type="em"/>
+ <cd:constant type="pt"/>
+ <cd:constant type="in"/>
+ <cd:constant type="cm"/>
+ <cd:constant type="mm"/>
+ <cd:constant type="sp"/>
+ <cd:constant type="bp"/>
+ <cd:constant type="pc"/>
+ <cd:constant type="dd"/>
+ <cd:constant type="cc"/>
+ <cd:constant type="nc"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ntimes" file="syst-aux.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-systemlog.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-systemlog.xml
new file mode 100644
index 00000000000..3f29679129c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-systemlog.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="systemlog" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="systemlogfirst" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="systemloglast" file="core-sys.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-table.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-table.xml
new file mode 100644
index 00000000000..649b198aeb9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-table.xml
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="table" type="environment" variant="1" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:template/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptables"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="table" type="environment" variant="2" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptables"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetabletemplate" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:template/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tables" type="environment" variant="1" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:template/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tables" type="environment" variant="2" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tablehead" type="environment" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabletail" type="environment" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptables" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="text">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="max"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="NL">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="VL">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="HL">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="commands">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="strut"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="strut"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="ReFormat" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-template"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enlarge" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Enlarge" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="use" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Use" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="keyword-template"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="JustLeft" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="JustCenter" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="JustRight" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="Smash" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Raise" variant="1" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Raise" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Lower" variant="1" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Lower" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number-optional"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="BackSpace" variant="1" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="BackSpace" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Vspace" variant="1" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="parentheses" optional="yes">
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="Vspace" variant="2" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="OpenUp" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TableLeft" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TableCenter" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TableRight" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="SR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="FR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="MR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="LR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="AR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="VL" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VC" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="HL" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="HC" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VS" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VD" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VT" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="VN" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TB" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NL" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="NC" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="FC" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="MC" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="LC" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="DL" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="DC" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="DV" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="DR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="TWO" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="THREE" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="FOUR" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="FIVE" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="SIX" scope="table" file="tabl-tab.mkiv"/>
+
+ <cd:command name="SPAN" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="REF" scope="table" file="tabl-tab.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-template"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-tabulation.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-tabulation.xml
new file mode 100644
index 00000000000..1e6dfc1fcda
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-tabulation.xml
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definetabulation" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptabulation" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="format">
+ <cd:constant type="cd:template"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="small"/>
+ <cd:constant type="medium" default="yes"/>
+ <cd:constant type="big"/>
+ <cd:constant type="none"/>
+ <cd:constant type="blank"/>
+ <cd:constant type="depth" default="yes"/>
+ <cd:constant type="grid"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ <cd:constant type="dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rule">
+ <cd:constant type="line"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="indenting">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="unit">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="inner">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="EQ">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="text"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulation" type="environment" generated="yes" variant="generated" file="tabl-tbl.mkiv">
+ <cd:sequence>
+ <cd:variable value="tabulation"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:template optional="yes"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuptabulation"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulate" type="environment" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:template optional="yes"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulate" type="environment" generated="yes" variant="generated" file="tabl-tbl.mkiv">
+ <cd:sequence>
+ <cd:variable value="tabulate"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulatehead" type="environment" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulatetail" type="environment" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tabulaterule" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="tabulateline" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="tabulateautorule" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="tabulateautoline" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="legend" type="environment" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="fact" type="environment" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptabulate"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="VL" scope="tabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:color"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NC" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="RC" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="HC" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="EQ" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="RQ" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="HQ" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="NG" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="NN" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="ND" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="NR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="NB" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="CC" scope="tabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="CL" scope="tabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="CM" scope="tabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="CR" scope="tabulate" file="tabl-tbl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-color-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="SR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="FR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="MR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="LR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="AR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="FL" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="ML" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="LL" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="TL" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="BL" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="HL" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ <cd:command name="HR" scope="tabulate" file="tabl-tbl.mkiv"/>
+
+ -->
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-tagging.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-tagging.xml
new file mode 100644
index 00000000000..14f413ce3cc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-tagging.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuptagging" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="auto"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tagged" type="environment" begin="dostart" end="dostop" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseinelement" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifinelementelse" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="taggedlabeltexts" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="namedtaggedlabeltexts" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settaggedmetadata" file="strc-tag.mkiv">
+ <cd:arguments>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-textbackground.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-textbackground.xml
new file mode 100644
index 00000000000..3b17e0efd7c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-textbackground.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definetextbackground" file="anch-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptextbackground" file="anch-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="paragraph"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="mp">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="corner">
+ <cd:constant type="rectangular" default="yes"/>
+ <cd:constant type="round"/>
+ </cd:parameter>
+ <cd:parameter name="level">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="dash">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="radius">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="framecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="voffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="frameoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftoffset">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="rightoffset">
+ <cd:resolve name="value-rightskip"/>
+ </cd:parameter>
+ <cd:parameter name="topoffset">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="bottomoffset">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="line"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textbackground" type="environment" file="anch-bck.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textbackground" type="environment" generated="yes" variant="generated" file="anch-bck.mkiv">
+ <cd:sequence>
+ <cd:variable value="textbackground"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextbackground"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textbackground" generated="yes" variant="generated" file="anch-bck.mkiv">
+ <cd:sequence>
+ <cd:variable value="textbackground"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textbackgroundmanual" type="environment" file="anch-bck.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-textflow.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-textflow.xml
new file mode 100644
index 00000000000..edcf034927c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-textflow.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definetextflow" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptextflow"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptextflow" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textflowcollector" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsetextflowcollector" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiftextflowcollectorelse" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsetextflow" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiftextflowelse" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textflow" type="environment" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushtextflow" file="page-flw.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-textrule.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-textrule.xml
new file mode 100644
index 00000000000..a849f44e1bb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-textrule.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuptextrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="location">
+ <cd:constant type="left" default="yes"/>
+ <cd:constant type="inmargin"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rulecolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depthcorrection">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textrule" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="top"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="bottom" default="yes"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="textrule" type="environment" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-texts.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-texts.xml
new file mode 100644
index 00000000000..009949d35bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-texts.xml
@@ -0,0 +1,385 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <!--
+
+ <cd:command name="definelayoutelement" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayoutelement" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="high"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="nomarking"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="rightstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="leftcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rightcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuplayouttext" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="setuplayouttext" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:parameter name="state">
+ <cd:constant type="start"/>
+ <cd:constant type="stop"/>
+ <cd:constant type="empty"/>
+ <cd:constant type="high"/>
+ <cd:constant type="none"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="nomarking"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="leftstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="rightstyle">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="leftcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="rightcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptop" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupheader" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptext" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfooter" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbottom" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:assignments list="yes">
+ <cd:inherit name="setuplayoutelement"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselayouttextline" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflayouttextlineelse" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelselayoutsomeline" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiflayoutsomelineelse" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="noheaderandfooterlines" file="page-txt.mkvi"/>
+
+ <cd:command name="notopandbottomlines" file="page-txt.mkvi"/>
+
+ <cd:command name="setuptoptexts" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupheadertexts" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptexttexts" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupfootertexts" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupbottomtexts" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="text" default="yes"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="settextcontent" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords>
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="middle" default="yes"/>
+ <cd:constant type="right"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetext" file="page-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:constant type="top"/>
+ <cd:constant type="header"/>
+ <cd:constant type="text"/>
+ <cd:constant type="footer"/>
+ <cd:constant type="bottom"/>
+ </cd:keywords>
+ <cd:keywords optional="yes">
+ <cd:constant type="text"/>
+ <cd:constant type="margin"/>
+ <cd:constant type="edge"/>
+ </cd:keywords>
+ <cd:resolve name="keyword-layoutelement"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ <cd:resolve name="keyword-layoutelement-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-thinrule.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-thinrule.xml
new file mode 100644
index 00000000000..b74286e5e7d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-thinrule.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupthinrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="height">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="depth">
+ <cd:constant type="max"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="background">
+ <cd:constant type="color"/>
+ </cd:parameter>
+ <cd:parameter name="frame">
+ <cd:constant type="on" default="yes"/>
+ <cd:constant type="off"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="a"/>
+ <cd:constant type="b" default="yes"/>
+ <cd:constant type="c"/>
+ <cd:constant type="none"/>
+ </cd:parameter>
+ <cd:parameter name="backgroundcolor">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="interlinespace">
+ <cd:constant type="small" default="yes"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="inbetween">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="n">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="thinrule" file="pack-mrl.mkiv"/>
+
+ <cd:command name="hairline" file="pack-mrl.mkiv"/>
+
+ <cd:command name="thinrules" file="pack-mrl.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupthinrules"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-token.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-token.xml
new file mode 100644
index 00000000000..2cc0f46742a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-token.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="tokens" type="environment" file="toks-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="flushtokens" file="toks-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showtokens" file="toks-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="testtokens" file="toks-tra.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-tolerance.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-tolerance.xml
new file mode 100644
index 00000000000..26b55413293
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-tolerance.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setuptolerance" file="spac-hor.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes">
+ <cd:constant type="horizontal"/>
+ <cd:constant type="vertical"/>
+ <cd:constant type="verystrict"/>
+ <cd:constant type="strict"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="verytolerant"/>
+ <cd:constant type="space"/>
+ <cd:constant type="stretch"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-tooltip.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-tooltip.xml
new file mode 100644
index 00000000000..775d0abcf36
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-tooltip.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definetooltip" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptooltip"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptooltip" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="location">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right" default="yes"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tooltip" generated="yes" variant="generated:1" file="scrn-fld.mkvi">
+ <cd:sequence>
+ <cd:variable value="tooltip"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptooltip"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tooltip" generated="yes" variant="generated:2" file="scrn-fld.mkvi">
+ <cd:sequence>
+ <cd:variable value="tooltip"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tooltip" variant="1" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptooltip"/>
+ </cd:assignments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tooltip" variant="2" file="scrn-fld.mkvi">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="left"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="right"/>
+ </cd:keywords>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-tracker.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-tracker.xml
new file mode 100644
index 00000000000..e2b48ade2d8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-tracker.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="installtextracker" file="trac-ctx.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installtexdirective" file="trac-ctx.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="enabletrackers" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="disabletrackers" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resettrackers" file="trac-deb.mkiv"/>
+
+ <cd:command name="showtrackers" file="trac-deb.mkiv"/>
+
+ <cd:command name="enabledirectives" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="disabledirectives" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showdirectives" file="trac-deb.mkiv"/>
+
+ <cd:command name="enableexperiments" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="disableexperiments" file="trac-deb.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showexperiments" file="trac-deb.mkiv"/>
+
+ <cd:command name="showedebuginfo" file="trac-deb.mkiv"/>
+
+ <cd:command name="overloaderror" file="trac-deb.mkiv"/>
+
+ <cd:command name="showlogcategories" file="trac-deb.mkiv"/>
+
+ <cd:command name="showjustification" file="trac-jus.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-translation.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-translation.xml
new file mode 100644
index 00000000000..f4f77c52684
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-translation.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="translate" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="cd:language">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="assigntranslation" file="lang-lab.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="cd:language">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ </cd:assignments>
+ <cd:delimiter name="to"/>
+ <cd:csname/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-twopassdata.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-twopassdata.xml
new file mode 100644
index 00000000000..f30b8bb2372
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-twopassdata.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="immediatesavetwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savetwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lazysavetwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="savetaggedtwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="lazysavetaggedtwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetwopasslist" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gettwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="checktwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="findtwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getfirsttwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getlasttwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getnamedtwopassdatalist" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="gettwopassdatalist" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseintwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifintwopassdataelse" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getfromtwopassdata" file="core-two.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-typography.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-typography.xml
new file mode 100644
index 00000000000..ffb80c2116a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-typography.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="normalizetextwidth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizetextheight" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizetextdepth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizetextline" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizefontwidth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizefontheight" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizefontdepth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizefontline" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="widthspanningtext" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="heightspanningtext" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="depthspanningtext" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="linespanningtext" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="normalizedfontsize" file="typo-txt.mkvi"/>
+
+ <cd:command name="NormalizeTextWidth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NormalizeTextHeight" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-font"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NormalizeFontWidth" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="NormalizeFontHeight" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:csname/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="WidthSpanningText" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-dimension"/>
+ <cd:resolve name="argument-font"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TheNormalizedFontSize" file="typo-txt.mkvi"/>
+
+ <cd:command name="nicelyfilledbox" type="environment" file="typo-txt.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="width">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="height">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="offset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="strut">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-unit.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-unit.xml
new file mode 100644
index 00000000000..3502b544aae
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-unit.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="digits" variant="1" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="digits" variant="2" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="defineunit" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupunit"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupunit" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="method">
+ <cd:constant type="1"/>
+ <cd:constant type="2"/>
+ <cd:constant type="3"/>
+ <cd:constant type="4"/>
+ <cd:constant type="5"/>
+ <cd:constant type="6"/>
+ </cd:parameter>
+ <cd:parameter name="language">
+ <cd:constant type="cd:language"/>
+ </cd:parameter>
+ <cd:parameter name="alternative">
+ <cd:constant type="text"/>
+ <cd:constant type="mathematics"/>
+ </cd:parameter>
+ <cd:parameter name="order">
+ <cd:constant type="reverse"/>
+ <cd:constant type="normal" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="separator">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="normal" default="yes"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unit" generated="yes" variant="generated" file="phys-dim.mkiv">
+ <cd:sequence>
+ <cd:variable value="unit"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unit" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installunitsseparator" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installunitsspace" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="registerunit" file="phys-dim.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="prefix"/>
+ <cd:constant type="unit" default="yes"/>
+ <cd:constant type="operator"/>
+ <cd:constant type="suffixe"/>
+ <cd:constant type="symbol"/>
+ <cd:constant type="packaged"/>
+ </cd:keywords>
+ <cd:resolve name="assignment-userdata-list"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-variables.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-variables.xml
new file mode 100644
index 00000000000..28aaa6df43b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-variables.xml
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setvariables" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="set">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setevariables" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="set">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setgvariables" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="set">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setxvariables" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="set">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-value"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setevariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-value"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setgvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-value"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setxvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-value"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsevariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvariableelse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseemptyvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptyvariableelse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifemptyvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotemptyvariable" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getvariabledefault" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupenv" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="set">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="reset">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="cd:key">
+ <cd:constant type="cd:value"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseenv" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifenvelse" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifenv" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotenv" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="env" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="envvar" file="core-env.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-key"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdocumentfilename" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdocumentargument" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setdocumentargumentdefault" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdocumentfilename" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdocumentargument" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="getdocumentargumentdefault" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedocumentargument" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdocumentargumentelse" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdocumentargument" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotdocumentargument" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsedocumentfilename" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdocumentfilenameelse" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifdocumentfilename" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifnotdocumentfilename" file="luat-ini.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-verbatim.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-verbatim.xml
new file mode 100644
index 00000000000..7026d2b10d8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-verbatim.xml
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definetype" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptype" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="option">
+ <cd:constant type="mp"/>
+ <cd:constant type="lua"/>
+ <cd:constant type="xml"/>
+ <cd:constant type="parsed-xml"/>
+ <cd:constant type="nested"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="context"/>
+ <cd:constant type="none"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="command">
+ <cd:constant type="cd:csname"/>
+ </cd:parameter>
+ <cd:parameter name="left">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="right">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="tab">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="compact">
+ <cd:constant type="absolute"/>
+ <cd:constant type="last"/>
+ <cd:constant type="all" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="escape">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="hyphenated"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="stretch"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="type" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="type" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:angles/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typ" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typ" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:angles/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="type" generated="yes" variant="generated:1" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:variable value="type"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="type" generated="yes" variant="generated:2" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:variable value="type"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptype"/>
+ </cd:assignments>
+ <cd:angles/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definetyping" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setuptyping" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional-list"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="oddmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="evenmargin">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="margin">
+ <cd:resolve name="value-leftskip"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="mp"/>
+ <cd:constant type="lua"/>
+ <cd:constant type="xml"/>
+ <cd:constant type="parsed-xml"/>
+ <cd:constant type="nested"/>
+ <cd:constant type="tex"/>
+ <cd:constant type="context"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="style">
+ <cd:resolve name="value-style"/>
+ </cd:parameter>
+ <cd:parameter name="color">
+ <cd:constant type="cd:color"/>
+ </cd:parameter>
+ <cd:parameter name="align">
+ <cd:inherit name="setupalign"/>
+ </cd:parameter>
+ <cd:parameter name="lines">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="hyphenated"/>
+ </cd:parameter>
+ <cd:parameter name="space">
+ <cd:constant type="on"/>
+ <cd:constant type="off" default="yes"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="stretch"/>
+ </cd:parameter>
+ <cd:parameter name="keeptogether">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="before">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="after">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:number"/>
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
+ <cd:parameter name="tab">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="escape">
+ <cd:constant type="yes"/>
+ <cd:constant type="no" default="yes"/>
+ <cd:constant type="cd:text"/>
+ <cd:constant type="cd:text" prefix="cd:processor" method="apply"/>
+ </cd:parameter>
+ <cd:parameter name="indentnext">
+ <cd:resolve name="value-indentnext"/>
+ </cd:parameter>
+ <cd:parameter name="continue">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="start">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="stop">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="numbering">
+ <cd:constant type="file"/>
+ <cd:constant type="line"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="blank">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typing" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typing" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typing" type="environment" generated="yes" variant="generated:1" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:variable value="typing"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typing" type="environment" generated="yes" variant="generated:2" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:variable value="typing"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="tex" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="arg" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="mat" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="dis" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="astype" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="asciistr" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="verbatim" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filename" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="typefile" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelsetypingfile" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doiftypingfileelse" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="LUA" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="LUA" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:sequence>
+ <cd:variable value="lua"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MP" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="MP" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="XML" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="XML" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PARSEDXML" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="PARSEDXML" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TEX" type="environment" variant="1" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setuptyping"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="TEX" type="environment" variant="2" file="buff-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="continue"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-version.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-version.xml
new file mode 100644
index 00000000000..d0165981523
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-version.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupversion" file="page-inf.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="concept"/>
+ <cd:constant type="file"/>
+ <cd:constant type="temporary"/>
+ <cd:constant type="final"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="version" file="page-inf.mkiv">
+ <cd:arguments>
+ <cd:keywords>
+ <cd:constant type="concept"/>
+ <cd:constant type="file"/>
+ <cd:constant type="temporary"/>
+ <cd:constant type="final"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="installversioninfo" file="page-inf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-command"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="includeversioninfo" file="page-inf.mkiv">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseolderversion" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifolderversionelse" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifelseoldercontext" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="doifoldercontextelse" file="file-mod.mkvi">
+ <cd:arguments>
+ <cd:resolve name="argument-number"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-viewerlayer.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-viewerlayer.xml
new file mode 100644
index 00000000000..3de29b1fd05
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-viewerlayer.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="defineviewerlayer" file="attr-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupviewerlayer"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupviewerlayer" file="attr-lay.mkiv">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="title">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="state">
+ <cd:constant type="start" default="yes"/>
+ <cd:constant type="stop"/>
+ </cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="printable">
+ <cd:constant type="yes" default="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ <cd:parameter name="scope">
+ <cd:constant type="local" default="yes"/>
+ <cd:constant type="global"/>
+ </cd:parameter>
+ <cd:parameter name="method">
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="command"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="viewerlayer" type="environment" file="attr-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="viewerlayer" type="environment" generated="yes" variant="generated" file="attr-lay.mkiv">
+ <cd:sequence>
+ <cd:variable value="viewerlayer"/>
+ </cd:sequence>
+ </cd:command>
+
+ <cd:command name="viewerlayer" file="attr-lay.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showlayoutcomponents" file="attr-lay.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-visualizer.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-visualizer.xml
new file mode 100644
index 00000000000..fd7198f9d02
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-visualizer.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="ruledhbox" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledvbox" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledvtop" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledtopv" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledhpack" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledvpack" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledtpack" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="ruledmbox" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxr" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxg" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxb" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxc" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxm" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxy" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="filledhboxk" file="trac-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-boxoptions"/>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showmakeup" file="trc-vis.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="makeup" default="yes"/>
+ <cd:constant type="all"/>
+ <cd:constant type="boxes"/>
+ <cd:constant type="glyph"/>
+ <cd:constant type="fontkern"/>
+ <cd:constant type="hbox"/>
+ <cd:constant type="vbox"/>
+ <cd:constant type="vtop"/>
+ <cd:constant type="kern"/>
+ <cd:constant type="glue"/>
+ <cd:constant type="penalty"/>
+ <cd:constant type="strut"/>
+ <cd:constant type="whatsit"/>
+ <cd:constant type="simple"/>
+ <cd:constant type="simplehbox"/>
+ <cd:constant type="simplevbox"/>
+ <cd:constant type="simplevtop"/>
+ <cd:constant type="user"/>
+ <cd:constant type="math"/>
+ <cd:constant type="italic"/>
+ <cd:constant type="origin"/>
+ <cd:constant type="reset"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="showallmakeup" file="trc-vis.mkiv"/>
+
+ <cd:command name="showboxes" file="trc-vis.mkiv"/>
+
+ <cd:command name="showglyphs" file="trc-vis.mkiv"/>
+
+ <cd:command name="showfontkerns" file="trc-vis.mkiv"/>
+
+ <cd:command name="setvisualizerfont" file="trc-vis.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-font-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="resetvisualizers" file="trc-vis.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-vspace.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-vspace.xml
new file mode 100644
index 00000000000..340ce49d5b3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-vspace.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definevspacingamount" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ <cd:resolve name="keyword-dimension-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="definevspacing" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:keywords>
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vspacing" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="preference"/>
+ <cd:constant type="samepage"/>
+ <cd:constant type="max"/>
+ <cd:constant type="force"/>
+ <cd:constant type="disable"/>
+ <cd:constant type="nowhite"/>
+ <cd:constant type="back"/>
+ <cd:constant type="overlay"/>
+ <cd:constant type="always"/>
+ <cd:constant type="weak"/>
+ <cd:constant type="strong"/>
+ <cd:constant type="default"/>
+ <cd:constant type="before"/>
+ <cd:constant type="inbetween"/>
+ <cd:constant type="after"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="flexible"/>
+ <cd:constant type="none"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="line"/>
+ <cd:constant type="halfline"/>
+ <cd:constant type="quarterline"/>
+ <cd:constant type="formula"/>
+ <cd:constant type="white"/>
+ <cd:constant type="height"/>
+ <cd:constant type="depth"/>
+ <cd:constant type="standard"/>
+ <cd:constant type="small" prefix="cd:number" method="factor"/>
+ <cd:constant type="medium" prefix="cd:number" method="factor"/>
+ <cd:constant type="big" prefix="cd:number" method="factor"/>
+ <cd:constant type="line" prefix="cd:number" method="factor"/>
+ <cd:constant type="halfline" prefix="cd:number" method="factor"/>
+ <cd:constant type="quarterline" prefix="cd:number" method="factor"/>
+ <cd:constant type="formula" prefix="cd:number" method="factor"/>
+ <cd:constant type="white" prefix="cd:number" method="factor"/>
+ <cd:constant type="height" prefix="cd:number" method="factor"/>
+ <cd:constant type="depth" prefix="cd:number" method="factor"/>
+ <cd:constant type="cd:number" prefix="category" method="range"/>
+ <cd:constant type="cd:number" prefix="order" method="range"/>
+ <cd:constant type="cd:number" prefix="penalty" method="range"/>
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="cd:name"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="directvspacing" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords delimiters="braces" list="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupvspacing" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupblank" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="blank" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:inherit name="vspacing"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="inhibitblank" file="spac-ver.mkiv"/>
+
+ <cd:command name="synchronizeblank" file="spac-ver.mkiv"/>
+
+ <cd:command name="definevspace" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vspace" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="godown" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="keyword-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="vglue" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:resolve name="string-dimension"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="smallskip" file="spac-ver.mkiv"/>
+
+ <cd:command name="medskip" file="spac-ver.mkiv"/>
+
+ <cd:command name="bigskip" file="spac-ver.mkiv"/>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-whitespace.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-whitespace.xml
new file mode 100644
index 00000000000..8f9fa082341
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-whitespace.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="setupwhitespace" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="fix"/>
+ <cd:constant type="fixed"/>
+ <cd:constant type="flexible"/>
+ <cd:constant type="line"/>
+ <cd:constant type="halfline"/>
+ <cd:constant type="quarterline"/>
+ <cd:constant type="none" default="yes"/>
+ <cd:constant type="small"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="big"/>
+ <cd:constant type="default"/>
+ <cd:constant type="cd:dimension"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="synchronizewhitespace" file="spac-ver.mkiv"/>
+
+ <cd:command name="correctwhitespace" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:content/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="packed" type="environment" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords optional="yes">
+ <cd:constant type="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="unpacked" type="environment" file="spac-ver.mkiv"/>
+
+ <cd:command name="linecorrection" type="environment" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="blank"/>
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="locallinecorrection" type="environment" file="spac-ver.mkiv">
+ <cd:arguments>
+ <cd:keywords list="yes" optional="yes">
+ <cd:constant type="blank"/>
+ <cd:inherit name="blank"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface> \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-xml.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-xml.xml
new file mode 100644
index 00000000000..c1319638386
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-xml.xml
@@ -0,0 +1,827 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" file="lxml-ini.mkiv">
+
+ <!-- the definitions themselves -->
+
+ <cd:command name="xmlmain">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflush">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlpure">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushtext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushpure">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlnonspace">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushspacewise">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushlinewise">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlall">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmllastmatch"/>
+
+ <cd:command name="xmlfirst">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmllast">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlcontext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushcontext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlshow">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinfo">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlfilter">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlstrip">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlstripped">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlstripnolines">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlstrippednolines">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlposition">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlelement">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlpos">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsnippet">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-number"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlconcat">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlconcatrange">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-first"/>
+ <cd:resolve name="argument-last"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlcommand">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinlineverbatim">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinlineverbatim" type="environment">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldisplayverbatim">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldisplayverbatim" type="environment">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlverbatim">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprettyprint">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlloadfile">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlloadbuffer">
+ <cd:arguments>
+ <cd:resolve name="argument-buffer"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlloaddata">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlloadonly">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprocessfile">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-file"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprocessbuffer">
+ <cd:arguments>
+ <cd:resolve name="argument-buffer"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprocessdata">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ <cd:resolve name="argument-xmlsetup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinclude">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlname">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlpath">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlnamespace">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltag">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlcount">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlatt">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlattdef">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlrefatt">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmllastatt"/>
+
+ <cd:command name="xmlattribute">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlattributedef">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlchainatt">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlchainattdef">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldirectives">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldirectivesbefore">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldirectivesafter">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinstalldirective">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-csname"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsetsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlremovesetup">
+ <cd:arguments>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlremovedocumentsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlflushdocumentsetups">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlresetsetups">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlresetdocumentsetups">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprependsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlappendsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlbeforesetup">
+ <cd:arguments>
+ <cd:resolve name="argument-setup"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlaftersetup">
+ <cd:arguments>
+ <cd:resolve name="argument-setup"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlprependdocumentsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlappenddocumentsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlbeforedocumentsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlafterdocumentsetup">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlregisteredsetups">
+ </cd:command>
+
+ <cd:command name="xmlregistereddocumentsetups">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-setup"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsetfunction">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:luafunction"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoif">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifnot">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifelse">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoiftext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifnottext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifelsetext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifselfempty">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifnotselfempty">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-true"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifelseselfempty">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifelseempty">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlregisterns">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:keywords delimiters="braces">
+ <cd:constant type="cd:url"/>
+ </cd:keywords>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlregisterns">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlremapname">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlremapnamespace">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlchecknamespace">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlmapvalue">
+ <cd:arguments>
+ <cd:resolve name="argument-category"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlvalue">
+ <cd:arguments>
+ <cd:resolve name="argument-category"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldoifelsevalue">
+ <cd:arguments>
+ <cd:resolve name="argument-category"/>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-true"/>
+ <cd:resolve name="argument-false"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlloaddirectives">
+ <cd:arguments>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlsave">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltofile">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-file"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltobuffer">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltobufferverbose">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!--
+
+ <cd:command name="xmltoparameters">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ <cd:resolve name="argument-lpath"/>
+ <cd:resolve name="argument-buffer"/>
+ </cd:arguments>
+ </cd:command>
+
+ -->
+
+ <cd:command name="xmladdindex">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinclusion">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinclusions">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlbadinclusions">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlraw">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlraw" type="environment"/>
+
+ <!-- injectors -->
+
+ <cd:command name="xmlresetinjectors"/>
+
+ <cd:command name="xmlsetinjectors">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlinjector">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmlapplyselectors">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!-- entities -->
+
+ <cd:command name="xmlsetentity">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmltexentity">
+ <cd:arguments>
+ <cd:resolve name="argument-name"/>
+ <cd:resolve name="argument-text"/>
+ </cd:arguments>
+ </cd:command>
+
+ <!-- general setup -->
+
+ <cd:command name="setupxml">
+ <cd:arguments>
+ <cd:assignments list="yes">
+ <cd:parameter name="default">
+ <cd:constant type="hidden"/>
+ <cd:constant type="none"/>
+ <cd:constant type="text"/>
+ </cd:parameter>
+ <cd:parameter name="compress">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xmldefaulttotext">
+ <cd:arguments>
+ <cd:resolve name="argument-node"/>
+ </cd:arguments>
+ </cd:command>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-xtable.xml b/Master/texmf-dist/tex/context/interface/mkiv/i-xtable.xml
new file mode 100644
index 00000000000..31b4a6842b3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/interface/mkiv/i-xtable.xml
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?context-directive job ctxfile x-setups.ctx ?>
+
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+
+ <cd:command name="definextable" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name"/>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="setupxtable" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-list-optional"/>
+ <cd:assignments list="yes">
+ <cd:parameter name="textwidth">
+ <cd:constant type="cd:dimension"/>
+ <cd:constant type="local" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="bodyfont">
+ <cd:inherit name="setupbodyfont"/>
+ </cd:parameter>
+ <cd:parameter name="spaceinbetween">
+ <cd:inherit name="blank"/>
+ </cd:parameter>
+ <cd:parameter name="option">
+ <cd:constant type="tight"/>
+ <cd:constant type="max"/>
+ <cd:constant type="stretch"/>
+ <cd:constant type="width"/>
+ <cd:constant type="height"/>
+ <cd:constant type="fixed"/>
+ </cd:parameter>
+ <cd:parameter name="textheight">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="maxwidth">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="columndistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="leftmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="rightmargindistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="header">
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="footer">
+ <cd:constant type="repeat"/>
+ </cd:parameter>
+ <cd:parameter name="rulethickness">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="split">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="repeat"/>
+ <cd:constant type="auto" default="yes"/>
+ </cd:parameter>
+ <cd:parameter name="splitoffset">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="samepage">
+ <cd:constant type="before"/>
+ <cd:constant type="after"/>
+ <cd:constant type="both"/>
+ </cd:parameter>
+ <cd:parameter name="distance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:inherit name="setupframed"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtable" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtable" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="embeddedxtable" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="embeddedxtable" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtable" type="environment" generated="yes" variant="generated" file="tabl-xtb.mkvi">
+ <cd:sequence>
+ <cd:variable value="xtable"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="processxtablebuffer" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrow" type="environment" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xcell" type="environment" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:parameter name="nx">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="ny">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nc">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:parameter name="nr">
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablehead" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablehead" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablefoot" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablefoot" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablenext" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablenext" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablebody" type="environment" variant="1" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xtablebody" type="environment" variant="2" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xgroup" type="environment" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xrowgroup" type="environment" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="xcellgroup" type="environment" file="tabl-xtb.mkvi">
+ <cd:arguments>
+ <cd:resolve name="keyword-name-optional"/>
+ <cd:assignments list="yes" optional="yes">
+ <cd:inherit name="setupxtable"/>
+ </cd:assignments>
+ </cd:arguments>
+ </cd:command>
+
+ <cd:command name="currentxtablerow" file="tabl-xtb.mkvi"/>
+
+ <cd:command name="currentxtablecolumn" file="tabl-xtb.mkvi"/>
+
+</cd:interface>
diff --git a/Master/texmf-dist/tex/context/base/s-abr-01.tex b/Master/texmf-dist/tex/context/modules/common/s-abr-01.tex
index 00a1a5c1e2f..00a1a5c1e2f 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-01.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-abr-01.tex
diff --git a/Master/texmf-dist/tex/context/base/s-abr-02.tex b/Master/texmf-dist/tex/context/modules/common/s-abr-02.tex
index 8bb6a28986a..8bb6a28986a 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-02.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-abr-02.tex
diff --git a/Master/texmf-dist/tex/context/base/s-abr-03.tex b/Master/texmf-dist/tex/context/modules/common/s-abr-03.tex
index 8247b68a916..8247b68a916 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-03.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-abr-03.tex
diff --git a/Master/texmf-dist/tex/context/base/s-abr-04.tex b/Master/texmf-dist/tex/context/modules/common/s-abr-04.tex
index 23940b52629..23940b52629 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-04.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-abr-04.tex
diff --git a/Master/texmf-dist/tex/context/base/s-cdr-01.tex b/Master/texmf-dist/tex/context/modules/common/s-cdr-01.tex
index b0bced9da09..b0bced9da09 100644
--- a/Master/texmf-dist/tex/context/base/s-cdr-01.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-cdr-01.tex
diff --git a/Master/texmf-dist/tex/context/base/s-faq-00.tex b/Master/texmf-dist/tex/context/modules/common/s-faq-00.tex
index 84055491f29..84055491f29 100644
--- a/Master/texmf-dist/tex/context/base/s-faq-00.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-faq-00.tex
diff --git a/Master/texmf-dist/tex/context/base/s-faq-01.tex b/Master/texmf-dist/tex/context/modules/common/s-faq-01.tex
index f6ee3ce0618..f6ee3ce0618 100644
--- a/Master/texmf-dist/tex/context/base/s-faq-01.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-faq-01.tex
diff --git a/Master/texmf-dist/tex/context/base/s-faq-02.tex b/Master/texmf-dist/tex/context/modules/common/s-faq-02.tex
index 92aa1eca2de..92aa1eca2de 100644
--- a/Master/texmf-dist/tex/context/base/s-faq-02.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-faq-02.tex
diff --git a/Master/texmf-dist/tex/context/base/s-faq-03.tex b/Master/texmf-dist/tex/context/modules/common/s-faq-03.tex
index b1e1ef2c2e0..b1e1ef2c2e0 100644
--- a/Master/texmf-dist/tex/context/base/s-faq-03.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-faq-03.tex
diff --git a/Master/texmf-dist/tex/context/base/s-mag-01.tex b/Master/texmf-dist/tex/context/modules/common/s-mag-01.tex
index b90dceb66ce..e2d30f4e5aa 100644
--- a/Master/texmf-dist/tex/context/base/s-mag-01.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-mag-01.tex
@@ -391,22 +391,48 @@
\definetype [ntype] \setuptype [ntype] [style=\narrowtt]
\doifnotmode{demo}{\endinput}
-
+
+% \usemodule[mag-01]
+
+\setvariables
+ [magazine]
+ [title={Introduction},
+ author=Hans Hagen,
+ affiliation=PRAGMA ADE,
+ date=Januari 2003,
+ number=0]
+
\startbuffer[abstract]
- \input tufte
+ This is the zero issue of a semi periodical. The
+ associated style can be used by \CONTEXT\ users to
+ typeset and publish their own issues.
\stopbuffer
-\starttext
+\starttext \setups [titlepage] \setups [title]
+
+\setupheadertexts[welcome]
+
+This is the zero issue of a range of \CONTEXT\ related
+publications, in most cases short introductions to new
+functionality. The style may be used by users for providing
+similar documents, but preferably not for other purposes,
+since it may confuse readers in their expectations.
- % \showframe
+We've chosen a layout which is more functional than
+beautiful. This layout provides several text areas: headers
+and footers, margins and edges as well as a main text area.
+The surrounding (gray) makes the main page (which is
+slightly smaller than A4) stand out and is suitable for
+viewing in spread mode.
- \setups[titlepage] \setups[title]
+The documents produced at \PRAGMA\ are called {\bf This
+Way}, user documents gets the title {\bf My Way}. The
+\PRAGMA\ issues are numbered. We strongly advise you not to
+use the \type {mag-} prefix for your issues, since this may
+lead to clashes with files distributed by \PRAGMA.
- \chapter{E.R. Tufte} \input tufte \page
- \chapter{D.E.K. Knuth} \input knuth \page
- \chapter{H. Zapf} \input zapf \page
- \chapter{D. Hofstadter} \input douglas \page
+\setups [listing]
- \setups[lastpage]
+\setups [lastpage]
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-mod.ctx b/Master/texmf-dist/tex/context/modules/common/s-mod.ctx
index 09ecf714cc4..09ecf714cc4 100644
--- a/Master/texmf-dist/tex/context/base/s-mod.ctx
+++ b/Master/texmf-dist/tex/context/modules/common/s-mod.ctx
diff --git a/Master/texmf-dist/tex/context/base/s-pre-00.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-00.tex
index 7f217d5bb89..7f217d5bb89 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-00.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-00.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-01.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-01.tex
index 89c5642f9f5..89c5642f9f5 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-01.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-01.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-02.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-02.tex
index d7a6fe4589a..d7a6fe4589a 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-02.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-02.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-03.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-03.tex
index 19a11d24e5d..19a11d24e5d 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-03.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-03.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-04.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-04.tex
index 088f4e510ed..088f4e510ed 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-04.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-04.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-05.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-05.tex
index ccffd1f4d72..ccffd1f4d72 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-05.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-05.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-06.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-06.tex
index 47948262c8c..47948262c8c 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-06.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-06.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-07.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-07.tex
index ba62b323694..ba62b323694 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-07.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-07.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-08.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-08.tex
index b545bef2386..b545bef2386 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-08.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-08.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-09.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-09.tex
index a20b9f31acd..a20b9f31acd 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-09.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-09.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-10.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-10.tex
index a92e5af01c5..a92e5af01c5 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-10.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-10.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-11.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-11.tex
index 551c5ebbcce..551c5ebbcce 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-11.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-11.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-12.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-12.tex
index 23418fbba34..23418fbba34 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-12.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-12.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-13.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-13.tex
index 7b4daa4b31f..7b4daa4b31f 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-13.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-13.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-14.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-14.tex
index 4dae6c0097b..4dae6c0097b 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-14.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-14.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-15.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-15.tex
index 25fb357839a..25fb357839a 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-15.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-15.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-16.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-16.tex
index 715936890bd..715936890bd 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-16.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-16.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-18.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-18.tex
index 876eec5f1f8..876eec5f1f8 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-18.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-18.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-19.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-19.tex
index 991d311ced0..991d311ced0 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-19.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-19.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-22.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-22.tex
index be50ae195e4..be50ae195e4 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-22.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-22.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-23.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-23.tex
index f9983a89ed7..f9983a89ed7 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-23.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-23.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-26.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-26.tex
index 7c1dec5f8f1..7c1dec5f8f1 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-26.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-26.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-27.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-27.tex
index 2e201e8df93..2e201e8df93 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-27.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-27.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-50.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-50.tex
index ff3e48631ea..ff3e48631ea 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-50.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-50.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-61.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-61.tex
index 48b9d09a02a..48b9d09a02a 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-61.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-61.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-62.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-62.tex
index a1a405c236b..a1a405c236b 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-62.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-62.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-63.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-63.tex
index 974c67a5f90..974c67a5f90 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-63.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-63.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-64.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-64.tex
index ef4889bbb66..ef4889bbb66 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-64.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-64.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-66.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-66.tex
index 3e89e4a7e11..3e89e4a7e11 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-66.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-66.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-67.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-67.tex
index 84ea1a66c93..84ea1a66c93 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-67.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-67.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-68.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-68.tex
index 3c04a87e15a..3c04a87e15a 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-68.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-68.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-93.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-93.tex
index c36762f3861..c36762f3861 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-93.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-93.tex
diff --git a/Master/texmf-dist/tex/context/base/s-pre-96.tex b/Master/texmf-dist/tex/context/modules/common/s-pre-96.tex
index 2ad752007c3..2ad752007c3 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-96.tex
+++ b/Master/texmf-dist/tex/context/modules/common/s-pre-96.tex
diff --git a/Master/texmf-dist/tex/context/base/m-arabtex.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-arabtex.mkii
index dea1cae252d..dea1cae252d 100644
--- a/Master/texmf-dist/tex/context/base/m-arabtex.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-arabtex.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-chart.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-chart.mkii
index 8a5f480ee7f..8a5f480ee7f 100644
--- a/Master/texmf-dist/tex/context/base/m-chart.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-chart.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-chemic.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-chemic.mkii
index 0b3c98221a1..0b3c98221a1 100644
--- a/Master/texmf-dist/tex/context/base/m-chemic.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-chemic.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-cweb.tex b/Master/texmf-dist/tex/context/modules/mkii/m-cweb.mkii
index bf80e229c14..bf80e229c14 100644
--- a/Master/texmf-dist/tex/context/base/m-cweb.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-cweb.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-database.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-database.mkii
index abb67986e02..abb67986e02 100644
--- a/Master/texmf-dist/tex/context/base/m-database.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-database.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-dratex.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-dratex.mkii
index 2b5f0be2a6f..2b5f0be2a6f 100644
--- a/Master/texmf-dist/tex/context/base/m-dratex.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-dratex.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-edtsnc.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-edtsnc.mkii
index 0f66893e833..0f66893e833 100644
--- a/Master/texmf-dist/tex/context/base/m-edtsnc.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-edtsnc.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-educat.tex b/Master/texmf-dist/tex/context/modules/mkii/m-educat.mkii
index 93b1a6c5db3..93b1a6c5db3 100644
--- a/Master/texmf-dist/tex/context/base/m-educat.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-educat.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-format.tex b/Master/texmf-dist/tex/context/modules/mkii/m-format.mkii
index e974e4a1101..7cedd803f5e 100644
--- a/Master/texmf-dist/tex/context/base/m-format.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-format.mkii
@@ -339,10 +339,12 @@
\defineformatline[line]
[]
-\protect \doifnotmode{demo} {\endinput}
-
+\protect
+
+\doifnotmode{demo} {\endinput}
+
% evt defineblank[formatbefore,formatinbetween,formatafter]
-
+
%\showframe \traceformatblocktrue
\usemodule[visual]
diff --git a/Master/texmf-dist/tex/context/base/m-graph.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-graph.mkii
index 8e28cf53724..8e28cf53724 100644
--- a/Master/texmf-dist/tex/context/base/m-graph.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-graph.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-layout.tex b/Master/texmf-dist/tex/context/modules/mkii/m-layout.mkii
index 5ccf0e98731..5ccf0e98731 100644
--- a/Master/texmf-dist/tex/context/base/m-layout.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-layout.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-level.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-level.mkii
index d758288d7ef..d758288d7ef 100644
--- a/Master/texmf-dist/tex/context/base/m-level.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-level.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-narrowtt.tex b/Master/texmf-dist/tex/context/modules/mkii/m-narrowtt.mkii
index 129bf270b9d..129bf270b9d 100644
--- a/Master/texmf-dist/tex/context/base/m-narrowtt.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-narrowtt.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-obsolete.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-obsolete.mkii
index a97002cf64c..a97002cf64c 100644
--- a/Master/texmf-dist/tex/context/base/m-obsolete.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-obsolete.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-pdfsnc.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-pdfsnc.mkii
index 12e2e2d68ba..12e2e2d68ba 100644
--- a/Master/texmf-dist/tex/context/base/m-pdfsnc.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-pdfsnc.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-pictex.tex b/Master/texmf-dist/tex/context/modules/mkii/m-pictex.mkii
index 27dc6a43914..e27bf63158a 100644
--- a/Master/texmf-dist/tex/context/base/m-pictex.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-pictex.mkii
@@ -186,22 +186,6 @@
%\immediate\write20{\string#1 already is \ascii}%
\fi}
-% \def\newdimen#1%
-% {\bgroup
-% \escapechar=-1
-% \def\next##1##2%
-% {\def\next####1##1####2####3\next%
-% {\egroup
-% \if####2@
-% \temporarynewdimen#1\relax
-% \ifnum\count11>\count12
-% \temporarynewskip#1\relax
-% \else
-% \temporarynewdimen#1\relax
-% \fi\fi}%
-% \expandafter\next\string##2##1@@\next}%
-% \expandafter\next\expandafter{\string\dimen}#1}
-%
% This macro is as unreadable, inefficient and as compact as
% can be, but uses no extra hash entries, which sometimes are
% scarce too. A more readable alternative, that also takes
diff --git a/Master/texmf-dist/tex/context/base/m-pstricks.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-pstricks.mkii
index d41f1987118..d41f1987118 100644
--- a/Master/texmf-dist/tex/context/base/m-pstricks.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-pstricks.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-r.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-r.mkii
index c2cb7ba8816..c2cb7ba8816 100644
--- a/Master/texmf-dist/tex/context/base/m-r.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-r.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-steps.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-steps.mkii
index e6bd45548c3..e6bd45548c3 100644
--- a/Master/texmf-dist/tex/context/base/m-steps.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-steps.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-subsub.tex b/Master/texmf-dist/tex/context/modules/mkii/m-subsub.mkii
index 88be1168000..88be1168000 100644
--- a/Master/texmf-dist/tex/context/base/m-subsub.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-subsub.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-tex4ht.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-tex4ht.mkii
index 8a3dc9dbb03..8a3dc9dbb03 100644
--- a/Master/texmf-dist/tex/context/base/m-tex4ht.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-tex4ht.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-units.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-units.mkii
index af4629d4860..af4629d4860 100644
--- a/Master/texmf-dist/tex/context/base/m-units.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-units.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-visual.mkii b/Master/texmf-dist/tex/context/modules/mkii/m-visual.mkii
index ae52f65718f..ae52f65718f 100644
--- a/Master/texmf-dist/tex/context/base/m-visual.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/m-visual.mkii
diff --git a/Master/texmf-dist/tex/context/base/ppchtex.mkii b/Master/texmf-dist/tex/context/modules/mkii/ppchtex.mkii
index 07ca9789ac0..07ca9789ac0 100644
--- a/Master/texmf-dist/tex/context/base/ppchtex.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/ppchtex.mkii
diff --git a/Master/texmf-dist/tex/context/base/rlxcache.rlx b/Master/texmf-dist/tex/context/modules/mkii/rlxcache.rlx
index 006e5feac7b..006e5feac7b 100644
--- a/Master/texmf-dist/tex/context/base/rlxcache.rlx
+++ b/Master/texmf-dist/tex/context/modules/mkii/rlxcache.rlx
diff --git a/Master/texmf-dist/tex/context/base/rlxtools.rlx b/Master/texmf-dist/tex/context/modules/mkii/rlxtools.rlx
index b230c6d5b54..b230c6d5b54 100644
--- a/Master/texmf-dist/tex/context/base/rlxtools.rlx
+++ b/Master/texmf-dist/tex/context/modules/mkii/rlxtools.rlx
diff --git a/Master/texmf-dist/tex/context/base/s-chi-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-chi-00.mkii
index fb8d47603be..fb8d47603be 100644
--- a/Master/texmf-dist/tex/context/base/s-chi-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-chi-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-fnt-01.mkii
index aedcf913d97..aedcf913d97 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-fnt-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-fnt-02.mkii
index 69f976102b1..69f976102b1 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-fnt-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-grk-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-grk-00.mkii
index f76d0c220b8..f76d0c220b8 100644
--- a/Master/texmf-dist/tex/context/base/s-grk-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-grk-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-jap-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-jap-00.mkii
index 5eec2f72594..5eec2f72594 100644
--- a/Master/texmf-dist/tex/context/base/s-jap-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-jap-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-map-10.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-map-10.mkii
index 3446a214c52..3446a214c52 100644
--- a/Master/texmf-dist/tex/context/base/s-map-10.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-map-10.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-mod-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-mod-00.mkii
index a81406a7346..a81406a7346 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-mod-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-mod-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-mod-01.mkii
index 5b83cd12110..5b83cd12110 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-mod-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-mod-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-mod-02.mkii
index 2d095ff9ab6..2d095ff9ab6 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-mod-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-pre-17.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-pre-17.mkii
index 7e8310a537e..7e8310a537e 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-17.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-pre-17.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-pre-30.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-pre-30.mkii
index a7152deb60b..a7152deb60b 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-30.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-pre-30.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-pre-60.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-pre-60.mkii
index 8823c66ce1e..8823c66ce1e 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-60.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-pre-60.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-pre-71.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-pre-71.mkii
index 3431367685e..3431367685e 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-71.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-pre-71.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-ptj-01.tex b/Master/texmf-dist/tex/context/modules/mkii/s-ptj-01.mkii
index a14a03ef145..a14a03ef145 100644
--- a/Master/texmf-dist/tex/context/base/s-ptj-01.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-ptj-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/s-syntax.mkii b/Master/texmf-dist/tex/context/modules/mkii/s-syntax.mkii
index 6d1d59697ec..6d1d59697ec 100644
--- a/Master/texmf-dist/tex/context/base/s-syntax.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/s-syntax.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-calcmath.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-calcmath.mkii
index a649aa64878..a649aa64878 100644
--- a/Master/texmf-dist/tex/context/base/x-calcmath.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-calcmath.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-chemml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-chemml.mkii
index 08d64e54b80..08d64e54b80 100644
--- a/Master/texmf-dist/tex/context/base/x-chemml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-chemml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-chemml.xsd b/Master/texmf-dist/tex/context/modules/mkii/x-chemml.xsd
index b511219115c..b511219115c 100644
--- a/Master/texmf-dist/tex/context/base/x-chemml.xsd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-chemml.xsd
diff --git a/Master/texmf-dist/tex/context/base/x-contml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii
index 22fffa50a37..22fffa50a37 100644
--- a/Master/texmf-dist/tex/context/base/x-contml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-contml.xsd b/Master/texmf-dist/tex/context/modules/mkii/x-contml.xsd
index 3b71e31e850..3b71e31e850 100644
--- a/Master/texmf-dist/tex/context/base/x-contml.xsd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-contml.xsd
diff --git a/Master/texmf-dist/tex/context/base/x-corres.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-corres.mkii
index effd79a5b31..effd79a5b31 100644
--- a/Master/texmf-dist/tex/context/base/x-corres.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-corres.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-corres.rng b/Master/texmf-dist/tex/context/modules/mkii/x-corres.rng
index 09de5d26718..09de5d26718 100644
--- a/Master/texmf-dist/tex/context/base/x-corres.rng
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-corres.rng
diff --git a/Master/texmf-dist/tex/context/base/x-dir-01.tex b/Master/texmf-dist/tex/context/modules/mkii/x-dir-01.mkii
index 6e4192a1326..6e4192a1326 100644
--- a/Master/texmf-dist/tex/context/base/x-dir-01.tex
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-dir-01.mkii
diff --git a/Master/texmf-dist/tex/context/modules/mkii/x-dir-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-dir-02.mkii
new file mode 100644
index 00000000000..90c32d7042c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-dir-02.mkii
@@ -0,0 +1,130 @@
+%D \module
+%D [ file=x-dir-02,
+%D version=2003.05.10, % around that time -)
+%D title=\CONTEXT\ Directory Handling,
+%D subtitle=Overview (2),
+%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.
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=.5cm,
+ topspace=.5cm,
+ header=1cm,
+ footer=0cm]
+
+\definehead
+ [directory]
+ [subject]
+
+\setuphead
+ [directory]
+ [style=\tfa]
+
+\setupbodyfont
+ [tt]
+
+\setuptabulate
+ [before=,after=]
+
+\setupcombinations
+ [location=top]
+
+\defineXMLenvironment [files] [root=.,url=]
+ {\doifelsenothing{\XMLop{url}}
+ {\xdef\XMLDIRurl{}}
+ {\xdef\XMLDIRurl{\XMLop{url}/}}
+ \startXMLignore}
+ {\stopXMLignore}
+
+\newcounter\NOfEntries
+
+\startsetups[xmldir:file:normal]
+
+ \doglobal\increment\NOfEntries
+
+ \startfiguretext
+ [left,none]
+ []
+ {}
+ {\hbox
+ {\externalfigure
+ [\XMLpar{files}{root}{.}/\XMLpar{directory}{name}{.}/\XMLop{name}]
+ [frame=on,width=6cm]
+ \quad
+ \framed[width=\figurewidth,height=\figureheight]{}}}
+ \strut \vskip-\lineheight
+ \starttabulate[|l|l|]
+ \NC base \NC \XMLflush{base} \NC \NR
+ \NC type \NC \XMLflush{type} \NC \NR
+ \NC width \NC \figurenaturalwidth \NC \NR
+ \NC height \NC \figurenaturalheight \NC \NR
+ \NC date \NC \XMLflush{date} \NC \NR
+ \NC size \NC \XMLflush{size} \NC \NR
+ \stoptabulate
+ \stopfiguretext
+
+\stopsetups
+
+\startsetups[xmldir:file:small]
+
+ \doglobal\increment\NOfEntries
+
+ \startlinecorrection
+
+ \startcombination
+ {\externalfigure
+ [\XMLpar{files}{root}{.}/\XMLpar{directory}{name}{.}/\XMLop{name}]
+ [frame=on,width=3cm]}
+ {}
+ {\vbox{\starttabulate[|l|l|]
+ \NC base \NC \XMLflush{base} \NC \NR
+ \NC type \NC \XMLflush{type} \NC \NR
+ \NC date \NC \XMLflush{date} \NC \NR
+ \stoptabulate}}
+ {}
+ \stopcombination
+
+ \stoplinecorrection
+
+\stopsetups
+
+\defineXMLenvironment [directory] [name=]
+ {\directory{Path \XMLop{name}}}
+ {}
+
+\defineXMLenvironment [file] [name=]
+ {\bgroup}
+ {% the next quick hack is really needed
+ \expanded{\defconvertedargument\noexpand\asciia{./\jobfilename}.pdf}%
+ \expanded{\defconvertedargument\noexpand\asciib{\XMLpar{directory}{name}{.}/\XMLop{name}}}%
+ % else we can not do an overview of the curent path
+ \doifnot\asciia\asciib
+ {\doifmodeelse{alternative-small}
+ {\setups[xmldir:file:small]}
+ {\setups[xmldir:file:normal]}
+ \endgraf}
+ \egroup}
+
+\defineXMLsave[base]
+\defineXMLsave[type]
+\defineXMLsave[size]
+\defineXMLsave[date]
+
+\starttext
+
+ \doifmode{alternative-small}{\startcolumns[balance=no]}
+
+ \processXMLfilegrouped{\inputfilename}
+
+ \doifmode{alternative-small}{\stopcolumns}
+
+ \ifnum\NOfEntries=0 There are no files found that match the pattern. \fi
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/x-dir-05.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-dir-05.mkii
index 53e73c5eb86..53e73c5eb86 100644
--- a/Master/texmf-dist/tex/context/base/x-dir-05.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-dir-05.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fdf-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fdf-00.mkii
index fd4bea7e74c..fd4bea7e74c 100644
--- a/Master/texmf-dist/tex/context/base/x-fdf-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fdf-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fe.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fe.mkii
index dcf415850a3..dcf415850a3 100644
--- a/Master/texmf-dist/tex/context/base/x-fe.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fe.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fig-00.dtd b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.dtd
index 34b4d0bef9b..34b4d0bef9b 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-00.dtd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.dtd
diff --git a/Master/texmf-dist/tex/context/base/x-fig-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.mkii
index 2e000c64ca7..2e000c64ca7 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fig-00.xsd b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.xsd
index 615841a1e6c..615841a1e6c 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-00.xsd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.xsd
diff --git a/Master/texmf-dist/tex/context/base/x-fig-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fig-01.mkii
index 5a2ea20c83e..5a2ea20c83e 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fig-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fig-02.mkii
index a8232fba9e1..a8232fba9e1 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fig-03.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fig-03.mkii
index c7f03453e09..c7f03453e09 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-03.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fig-03.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fo.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-fo.mkii
index 3631f6d7e14..2c1ac0d96f0 100644
--- a/Master/texmf-dist/tex/context/base/x-fo.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-fo.mkii
@@ -3834,7 +3834,7 @@ text-indent=0pt, % yes
%D Graphics: static frames
\startMPinclusions
- input mp-fobg.mp ;
+ input mp-fobg.mpii ;
\stopMPinclusions
\def\unknownMPcolor{FoNoColor}
diff --git a/Master/texmf-dist/tex/context/base/x-foxet.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-foxet.mkii
index d44cf2b7ec7..d44cf2b7ec7 100644
--- a/Master/texmf-dist/tex/context/base/x-foxet.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-foxet.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-mathml.mkii
index ccb9fa05463..ccb9fa05463 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-mathml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.xsd b/Master/texmf-dist/tex/context/modules/mkii/x-mathml.xsd
index 1c29452b06a..1c29452b06a 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.xsd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-mathml.xsd
diff --git a/Master/texmf-dist/tex/context/base/x-newcml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-newcml.mkii
index 23c2bf1e2c0..23c2bf1e2c0 100644
--- a/Master/texmf-dist/tex/context/base/x-newcml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-newcml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-newmme.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-newmme.mkii
index 2e0d4c18969..2e0d4c18969 100644
--- a/Master/texmf-dist/tex/context/base/x-newmme.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-newmme.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-newmml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-newmml.mkii
index e777edca11c..e777edca11c 100644
--- a/Master/texmf-dist/tex/context/base/x-newmml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-newmml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-newmmo.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-newmmo.mkii
index 97fdeb06c0b..97fdeb06c0b 100644
--- a/Master/texmf-dist/tex/context/base/x-newmmo.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-newmmo.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-newpml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-newpml.mkii
index ea3bae18262..ea3bae18262 100644
--- a/Master/texmf-dist/tex/context/base/x-newpml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-newpml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-om2cml.xsl b/Master/texmf-dist/tex/context/modules/mkii/x-om2cml.xsl
index 4070d94dcc7..4070d94dcc7 100644
--- a/Master/texmf-dist/tex/context/base/x-om2cml.xsl
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-om2cml.xsl
diff --git a/Master/texmf-dist/tex/context/base/x-openmath.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-openmath.mkii
index 38474996e1b..38474996e1b 100644
--- a/Master/texmf-dist/tex/context/base/x-openmath.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-openmath.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-openmath.xsl b/Master/texmf-dist/tex/context/modules/mkii/x-openmath.xsl
index ffb40493951..ffb40493951 100644
--- a/Master/texmf-dist/tex/context/base/x-openmath.xsl
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-openmath.xsl
diff --git a/Master/texmf-dist/tex/context/base/x-physml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-physml.mkii
index 4d9cffe3325..4d9cffe3325 100644
--- a/Master/texmf-dist/tex/context/base/x-physml.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-physml.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-physml.xsd b/Master/texmf-dist/tex/context/modules/mkii/x-physml.xsd
index 865d88c58ed..865d88c58ed 100644
--- a/Master/texmf-dist/tex/context/base/x-physml.xsd
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-physml.xsd
diff --git a/Master/texmf-dist/tex/context/base/x-res-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-00.mkii
index d031e1453ed..d031e1453ed 100644
--- a/Master/texmf-dist/tex/context/base/x-res-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-01.mkii
index 41580a0b8ef..41580a0b8ef 100644
--- a/Master/texmf-dist/tex/context/base/x-res-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-02.mkii
index f8502dbac1c..f8502dbac1c 100644
--- a/Master/texmf-dist/tex/context/base/x-res-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-03.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-03.mkii
index 15f2620c1be..15f2620c1be 100644
--- a/Master/texmf-dist/tex/context/base/x-res-03.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-03.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-04.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-04.mkii
index b22e9ffa439..b22e9ffa439 100644
--- a/Master/texmf-dist/tex/context/base/x-res-04.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-04.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-08.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-08.mkii
index 0805f071fdb..0805f071fdb 100644
--- a/Master/texmf-dist/tex/context/base/x-res-08.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-08.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-09.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-09.mkii
index e3354e9a422..e3354e9a422 100644
--- a/Master/texmf-dist/tex/context/base/x-res-09.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-09.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-10.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-10.mkii
index 833bce776e1..833bce776e1 100644
--- a/Master/texmf-dist/tex/context/base/x-res-10.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-10.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-11.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-11.mkii
index 84157be883a..84157be883a 100644
--- a/Master/texmf-dist/tex/context/base/x-res-11.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-11.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-12.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-12.mkii
index 81761ae9ad1..81761ae9ad1 100644
--- a/Master/texmf-dist/tex/context/base/x-res-12.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-12.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-20.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-20.mkii
index 0bc1358ec41..0bc1358ec41 100644
--- a/Master/texmf-dist/tex/context/base/x-res-20.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-20.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-res-50.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-res-50.mkii
index 3c3e758a7d2..3c3e758a7d2 100644
--- a/Master/texmf-dist/tex/context/base/x-res-50.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-res-50.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-sch-00.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-sch-00.mkii
index 5b4da0825b3..5b4da0825b3 100644
--- a/Master/texmf-dist/tex/context/base/x-sch-00.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-sch-00.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-sch-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-sch-01.mkii
index 5bdf088fe71..5bdf088fe71 100644
--- a/Master/texmf-dist/tex/context/base/x-sch-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-sch-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-set-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-set-01.mkii
index 814ea5fc6c5..814ea5fc6c5 100644
--- a/Master/texmf-dist/tex/context/base/x-set-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-set-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-set-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-set-02.mkii
index 7a2cd77016b..7a2cd77016b 100644
--- a/Master/texmf-dist/tex/context/base/x-set-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-set-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-set-11.mkii
index 8c8f614a5b4..8c8f614a5b4 100644
--- a/Master/texmf-dist/tex/context/base/x-set-11.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-set-11.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-set-12.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-set-12.mkii
index c2aa265c3f2..c2aa265c3f2 100644
--- a/Master/texmf-dist/tex/context/base/x-set-12.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-set-12.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-sm2om.xsl b/Master/texmf-dist/tex/context/modules/mkii/x-sm2om.xsl
index 93e1a12c549..93e1a12c549 100644
--- a/Master/texmf-dist/tex/context/base/x-sm2om.xsl
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-sm2om.xsl
diff --git a/Master/texmf-dist/tex/context/base/x-steps.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-steps.mkii
index 47141699a93..47141699a93 100644
--- a/Master/texmf-dist/tex/context/base/x-steps.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-steps.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-xml-01.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-xml-01.mkii
index 95ce51fc888..95ce51fc888 100644
--- a/Master/texmf-dist/tex/context/base/x-xml-01.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-xml-01.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-xml-02.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-xml-02.mkii
index e33ab9ee4ce..e33ab9ee4ce 100644
--- a/Master/texmf-dist/tex/context/base/x-xml-02.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-xml-02.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-xml-11.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-xml-11.mkii
index 047561370e9..047561370e9 100644
--- a/Master/texmf-dist/tex/context/base/x-xml-11.mkii
+++ b/Master/texmf-dist/tex/context/modules/mkii/x-xml-11.mkii
diff --git a/Master/texmf-dist/tex/context/base/m-barcodes.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-barcodes.mkiv
index e4c43b37650..e4c43b37650 100644
--- a/Master/texmf-dist/tex/context/base/m-barcodes.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-barcodes.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-chart.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua
index f1e7f4cb937..f1e7f4cb937 100644
--- a/Master/texmf-dist/tex/context/base/m-chart.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.lua
diff --git a/Master/texmf-dist/tex/context/base/m-chart.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi
index a0c8b2244a9..a0c8b2244a9 100644
--- a/Master/texmf-dist/tex/context/base/m-chart.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-chart.mkvi
diff --git a/Master/texmf-dist/tex/context/base/m-chemic.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-chemic.mkiv
index 1dd403fae79..1dd403fae79 100644
--- a/Master/texmf-dist/tex/context/base/m-chemic.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-chemic.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-cweb.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-cweb.mkiv
new file mode 100644
index 00000000000..2546b2342f3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-cweb.mkiv
@@ -0,0 +1,1373 @@
+%D \module
+%D [ file=m-cweb,
+%D version=1997.01.15,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=\CWEB\ Pretty Printing Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module has to be redone in the mkiv way.
+
+%D First some auxiliary stuff, to be moved to system module.
+
+\def\dodofindfirstcharacter#1%
+ {\ifx#1\relax
+ \let\next=\egroup
+ \else
+ \handlecase
+ {\expandafter\ifnum\expandafter\catcode\expandafter`#1=11
+ \def\next##1\relax{\egroup\def\firstcharacter{#1}}%
+ \fi}%
+ \fi
+ \next}
+
+\def\dofindfirstcharacter#1#2%
+ {\def\firstcharacter{}%
+ \bgroup
+ \defconvertedargument\ascii{#2}%
+ \let\next\dodofindfirstcharacter
+ \let\handlecase#1%
+ \expandafter\next\ascii\relax}
+
+\def\normalcase#1%
+ {#1}
+
+\def\findfirstcharacter%
+ {\dofindfirstcharacter\lowercase}
+
+\def\FindFirstCharacter%
+ {\dofindfirstcharacter\normalcase}
+
+\def\FINDFIRSTCHARACTER%
+ {\dofindfirstcharacter\uppercase}
+
+% nog doen:
+%
+% \deactivateCWEB in output routine
+% status info
+% gelinkte entries
+% parskip en parindent
+
+%D \gdef\CWEBquote#1.{{\em Quote :}\ #1.} % checks the .
+
+%D This module (re)implements the \CWEB\ macros as defined in
+%D the file \type{cwebmac.tex}.
+%D
+%D \CWEB\ uses short, often one character long, names for
+%D macros. This is no real problem because no one is supposed
+%D to read and understand the files generated by \CWEB. The
+%D standard macros are meant for \PLAIN\ \TEX\ users. In
+%D \CONTEXT\ and other macro packages however, there is a
+%D potential conflict with format specific or user defined
+%D commands. Furthermore, the \CWEB\ macros implement their own
+%D output routines. When integrating \CWEB\ documents in
+%D another environment, the \CWEB\ specific macros have to be
+%D made local. The first part of this module is dedicated to
+%D this feature.
+%D
+%D Instead of using \type{\def} and \type{\let} for defining
+%D macros, we use:
+%D
+%D \starttyping
+%D \defCEBmacro arguments {meaning}
+%D \letCEBmacro arguments {meaning}
+%D \stoptyping
+%D
+%D \CWEB files contain implicit calls to macros that generate
+%D the table of contents, the lists of sections and the index.
+%D Because we want to be much more flexible, we implemented our
+%D own alternatives, and therefore have to bypass the original
+%D ones. The next macro is used for defining these obsolete
+%D \CWEB\ macros. The dummies take care of arguments.
+%D
+%D \starttyping
+%D \defCEBdummy arguments {meaning}
+%D \stoptyping
+%D
+%D The list of \CWEB\ specific macro names is saved in a
+%D \TOKENLIST. This serves two purposes. First it enables us to
+%D activate the \CWEB\ macros, which are saved under a
+%D different name, second it can be used to temporary restore
+%D the meanings, for instance when the output routine builds
+%D the page.
+
+\newtoks\CWEBmacros
+
+%D Activating and deactivating is done by means of:
+%D
+%D \starttyping
+%D \activateCWEB
+%D \deactivateCWEB
+%D \stoptyping
+%D
+%D Which are implemented as:
+
+\def\activateCWEB%
+ {\let\doCWEB=\activateCWEBmacro
+ \the\CWEBmacros}
+
+\def\deactivateCWEB%
+ {\let\doCWEB=\deactivateCWEBmacro
+ \the\CWEBmacros}
+
+%D The three definition macros append the name of the macro to
+%D the list. The first two macros save the meaning, the last one
+%D assigns \type{{}} to the macro and gobbles original meaning.
+
+\long\def\defCWEBmacro#1%
+ {\appendtoks\doCWEB#1\to\CWEBmacros
+ \setvalue{newCWEB\string#1}}
+
+\long\def\letCWEBmacro#1%
+ {\appendtoks\doCWEB#1\to\CWEBmacros
+ \letvalue{newCWEB\string#1}}
+
+\long\def\defCWEBdummy#1#2#%
+ {\appendtoks\doCWEB#1\to\CWEBmacros
+ \setvalue{newCWEB\string#1}#2{}%
+ \gobbleoneargument}
+
+%D The macro \type{\defCWEBdummy} of course takes care of the
+%D argument. This leaves the two (de|)|activating macros:
+
+\def\CWEBmacro#1%
+ {\getvalue{newCWEB\string#1}}
+
+\def\activateCWEBmacro#1%
+ {\letvalue{oldCWEB\string#1}=#1%
+ \def#1{\CWEBmacro#1}}
+
+\def\deactivateCWEBmacro#1%
+ {\expandafter\let\expandafter#1\expandafter=\csname oldCWEB\string#1\endcsname}
+
+%D I did consider loading the \CWEB\ macros using temporary
+%D substitutes of \type{\def}, \type{\font}, \type{\newbox} etc.
+%D The main problem is that the file contains more than
+%D definitions and taking all kind of assignments into account
+%D too would not make things easier. So I decided to stick to
+%D the method as just described.
+
+%D Now we're ready for the real job. What follows is a partial
+%D adaption of the file \type{cwebmac.tex}, version 3.1, dated
+%D September 1994 and written by Levy and Knuth. When possible
+%D we kept the original meaning, but we've granted ourselves
+%D the freedom to reformat the macro's for readibility.
+%D
+%D We'll only present the macros we actually use. The source
+%D however contains the original implementation.
+
+% standard macros for CWEB listings (in addition to plain.tex)
+% Version 3.1 --- September 1994.
+%
+% \ifx\documentstyle\undefined\else\endinput\fi % LaTeX will use other macros
+%
+% \xdef\fmtversion{\fmtversion+CWEB3.1}
+
+%D \macros{.}{}
+%D
+%D \CWEBquote preserve a way to get the dot accent (all
+%D other accents will still work as usual).
+
+\letCWEBmacro\: = \.
+
+% \parskip = 0pt % no stretch between paragraphs
+% \parindent = 1em % for paragraphs and for the first line of C text
+
+% \font\ninerm = cmr9
+% \let\mc = \ninerm % medium caps
+% \font\eightrm = cmr8
+% \let\sc = \eightrm % small caps (NOT a caps-and-small-caps font)
+% \let\mainfont = \tenrm
+% \let\cmntfont = \tenrm
+% \font\tenss = cmss10
+% \let\cmntfont = \tenss % alternative comment font
+% \font\titlefont = cmr7 scaled \magstep4 % title on the contents page
+% \font\ttitlefont = cmtt10 scaled \magstep2 % typewriter type in title
+% \font\tentex = cmtex10 % TeX extended character set (used in strings)
+% \fontextraspace\tentex = 0pt % no double space after sentences
+
+%D \macros{mc,sc,cmntfont,eightrm}{}
+%D
+%D The naming of the fonts in in line with those in \PLAIN\
+%D \TEX. Although \CONTEXT\ implements its own scheme, there is
+%D still support for the \PLAIN\ ones. We keep the original
+%D names, but change their meaning. That way the macros obey
+%D switching to other sizes or styles.
+
+\defCWEBmacro\mc {\tx}
+\defCWEBmacro\sc {\txx}
+\defCWEBmacro\cmntfont {\ss}
+\defCWEBmacro\eightrm {\tx}
+
+%D \macros{tentex,sevenrm,sevensy,teni}{}
+%D
+%D The next one uses a temporary solution. The \type{cmtex10}
+%D font is not part of the default mechanism. We make use of
+%D the \CONTEXT\ variables \type{\textface}, \type{\scriptface}
+%D and \type{\scriptscriptface}, which hold the current
+%D sizes.
+
+\defCWEBmacro\tentex%
+ {\font\next=cmtex10 at \textface
+ \fontextraspace\next\zeropoint
+ \next}
+
+\defCWEBmacro\sevenrm {\getvalue{\scriptface rmtf}}
+\defCWEBmacro\sevensy {\getvalue{\scriptface mmsy}}
+\defCWEBmacro\teni {\getvalue{\textface mmmi}}
+
+%D \macros{CWEBpt}{}
+%D
+%D The original macros are based on a 10~point bodyfont size. We
+%D therefore have to specify dimension in points a bit
+%D different. Specifications like .6pt are changed to
+%D \type{.06} times \type{\bodyfontsize}.
+
+\defCWEBmacro\CWEBpt {\bodyfontsize} % still dutch
+
+%D \macros{CEE,UNIX,TEX,CPLUSPLUS}{}
+%D
+%D Next come some logo's. It does not make much sense to use
+%D the \CONTEXT\ logo mechanism here, so we simply say:
+
+\defCWEBmacro \CEE/{{\mc C\spacefactor1000}}
+\defCWEBmacro \UNIX/{{\mc U\kern-.05emNIX\spacefactor1000}}
+\defCWEBmacro \TEX/{\TeX}
+\defCWEBmacro\CPLUSPLUS/{{\mc C\PP\spacefactor1000}}
+\defCWEBmacro \Cee{\CEE/} % for backward compatibility
+
+%D \macros{\ }{}
+%D
+%D Now we come to the real work: the short commands that make
+%D up the typography.
+%D
+%D \CWEBquote italic type for identifiers.
+
+\defCWEBmacro\\#1%
+ {\leavevmode\hbox{\it#1\/\kern.05em}}
+
+%D \macros{\string|}{}
+%D
+%D \CWEBquote one letter identifiers look better this way.
+
+\defCWEBmacro\|#1%
+ {\leavevmode\hbox{$#1$}}
+
+%D \macros{\string\&}{}
+%D
+%D \CWEBquote boldface type for reserved words.
+
+\defCWEBmacro\&#1%
+ {\leavevmode
+ \hbox
+ {\def\_%
+ {\kern.04em
+ \vbox{\hrule width.3em height .06\CWEBpt}% .6pt}%
+ \kern.08em}%
+ \bf#1\/\kern.05em}}
+
+%D \macros{.}{}
+%D
+%D Here we use the previously saved period. This macro
+%D takes care of special characters in strings.
+
+\defCWEBmacro\.#1%
+ {\leavevmode
+ \hbox
+ {\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ \let\^=\CF % circumflex in a string
+ #1\kern.05em}}
+
+%D \macros{)}{}
+%D
+%D Some discretionary hack.
+
+\defCWEBmacro\)%
+ {\discretionary{\hbox{\tentex\BS}}{}{}}
+
+%D \macros{AT}{}
+%D
+%D \CWEBquote at sign for control text (not needed in versions
+%D $>=$ 2.9).
+
+\defCWEBmacro\AT{@}
+
+%D \macros{ATL,postATL,NOATL}{}
+%D
+%D A two step macro that handles whatever.
+
+\defCWEBmacro\ATL%
+ {\par
+ \noindent
+ \bgroup
+ \catcode`\_=12
+ \postATL}
+
+\defCWEBmacro\postATL#1 #2 %
+ {\bf letter \\{\uppercase{\char"#1}} tangles as \tentex "#2"%
+ \egroup
+ \par}
+
+\defCWEBmacro\noATL#1 #2 %
+ {}
+
+%D \macros{noatl}{}
+%D
+%D \CWEBquote suppress output from \type{@l}.
+
+\defCWEBmacro\noatl%
+ {\let\ATL=\noATL}
+
+% \defCWEBmacro\ATH%
+% {\X\kern-.5em:Preprocessor definitions\X}
+
+%D \macros{PB}
+%D
+%D \CWEBquote hook for program brackets {\tttf\string|...\string|}
+%D in TeX part or section name.
+
+\defCWEBmacro\PB%
+ {\relax}
+
+% \chardef\AM = `\& % ampersand character in a string
+% \chardef\BS = `\\ % backslash in a string
+% \chardef\LB = `\{ % left brace in a string
+% \chardef\RB = `\} % right brace in a string
+% \chardef\TL = `\~ % tilde in a string
+% \chardef\UL = `\_ % underline character in a string
+% \chardef\CF = `\^ % circumflex character in a string
+
+\defCWEBmacro\AM {\char`\&} % ampersand character in a string
+\defCWEBmacro\BS {\char`\\} % backslash in a string
+\defCWEBmacro\LB {\char`\{} % left brace in a string
+\defCWEBmacro\RB {\char`\}} % right brace in a string
+\defCWEBmacro\TL {\char`\~} % tilde in a string
+\defCWEBmacro\UL {\char`\_} % underline character in a string
+\defCWEBmacro\CF {\char`\^} % circumflex character in a string
+
+\defCWEBmacro\SP {{\tt\char`\ }} % (visible) space in a string
+
+% \newbox\PPbox \setbox\PPbox=\hbox
+% {\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt}
+% \newbox\MMbox \setbox\MMbox=\hbox
+% {\kern.5pt\raise1pt\hbox{\sevensy\char0\kern-1pt\char0}\kern.5pt}
+% \newbox\MGbox \setbox\MGbox=\hbox % symbol for ->
+% {\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt}
+% \newbox\MODbox \setbox\MODbox=\hbox
+% {\eightrm\%}
+%
+% \def\PP {\copy\PPbox}
+% \def\MM {\copy\MMbox}
+% \def\MG {\copy\MGbox}
+% \def\MOD {\mathbin{\copy\MODbox}}
+
+\defCWEBmacro\PP% symbol for ++
+ {\kern.05\CWEBpt
+ \raise.1\CWEBpt\hbox{\sevenrm+\kern-.1\CWEBpt+}%
+ \kern.05\CWEBpt}
+
+\defCWEBmacro\MM%
+ {\kern.05\CWEBpt
+ \raise.1\CWEBpt\hbox{\sevensy\char0\kern-.1\CWEBpt\char0}%
+ \kern.05\CWEBpt}
+
+\defCWEBmacro\MG%
+ {\kern-.2\CWEBpt
+ \lower.3\CWEBpt\hbox{\teni\char'176}%
+ \kern .1\CWEBpt}
+
+\defCWEBmacro\MRL#1%
+ {\mathrel{\let\K==#1}}
+
+% \def\MRL#1%
+% {\KK#1}
+% \def\KK#1#2%
+% {\buildrel\;#1\over{#2}}
+
+\letCWEBmacro\GG = \gg
+\letCWEBmacro\LL = \ll
+\letCWEBmacro\NULL = \Lambda
+
+% \mathchardef\AND = "2026 % bitwise and; also \& (unary operator)
+
+\defCWEBmacro\AND% redefines itself (funny)
+ {\mathchardef\AND="2026 \AND} % bitwise and; also \& (unary operator)
+
+\letCWEBmacro\OR = \mid % bitwise or
+\letCWEBmacro\XOR = \oplus % bitwise exclusive or
+\defCWEBmacro\CM {{\sim}} % bitwise complement
+\defCWEBmacro\MOD {\mathbin{\eightrm\%}}
+\defCWEBmacro\DC {\kern.1em{::}\kern.1em} % symbol for ::
+\defCWEBmacro\PA {\mathbin{.*}} % symbol for .*
+\defCWEBmacro\MGA {\mathbin{\MG*}} % symbol for ->*
+\defCWEBmacro\this {\&{this}}
+
+% \newbox \bak % backspace one em
+% \newbox \bakk % backspace two ems
+%
+% \setbox\bak =\hbox to -1em{}
+% \setbox\bakk=\hbox to -2em{}
+
+\newcount\CWEBind % current indentation in ems
+
+\defCWEBmacro\1% indent one more notch
+ {\global\advance\CWEBind by 1
+ \hangindent\CWEBind em}
+
+\defCWEBmacro\2% indent one less notch
+ {\global\advance\CWEBind by -1 }
+
+\defCWEBmacro\3#1% optional break within a statement
+ {\hfil
+ \penalty#10
+ \hfilneg}
+
+\defCWEBmacro\4% backspace one notch
+ {\hbox to -1em{}}
+
+\defCWEBmacro\5% optional break
+ {\hfil
+ \penalty-1
+ \hfilneg
+ \kern2.5em
+ \hbox to -2em{}%
+ \ignorespaces}
+
+\defCWEBmacro\6% forced break
+ {\ifmmode
+ \else
+ \par
+ \hangindent\CWEBind em
+ \noindent
+ \kern\CWEBind em
+ \hbox to -2em{}%
+ \ignorespaces
+ \fi}
+
+\defCWEBmacro\7% forced break and a little extra space
+ {\Y
+ \6}
+
+\defCWEBmacro\8% no indentation
+ {\hskip-\CWEBind em
+ \hskip 2em}
+
+\defCWEBmacro\9#1%
+ {}
+
+\newcount\gdepth % depth of current major group, plus one
+\newcount\secpagedepth
+\secpagedepth=3 % page breaks will occur for depths -1, 0, and 1
+
+% \newtoks\gtitle % title of current major group
+% \newskip\intersecskip
+% \intersecskip=12pt minus 3pt % space between sections
+
+% \let\yskip=\smallskip
+
+\defCWEBmacro\?%
+ {\mathrel?}
+
+% \def\note#1#2.%
+% {\Y\noindent
+% {\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}}
+
+\defCWEBmacro\lapstar%
+ {\rlap{*}}
+
+% \def\stsec%
+% {\rightskip=0pt % get out of C mode (cf. \B)
+% \sfcode`;=1500
+% \pretolerance 200
+% \hyphenpenalty 50
+% \exhyphenpenalty 50
+% \noindent{\let\*=\lapstar\bf\secstar.\quad}}
+%
+% \let\startsection=\stsec
+
+\defCWEBmacro\defin#1%
+ {\global\advance\CWEBind by 2 \1\&{#1 } } % begin `define' or `format'
+
+% \def\A% xref for doubly defined section name
+% {\note{See also section}}
+%
+% \def\As% xref for multiply defined section name
+% {\note{See also sections}}
+
+\defCWEBmacro\B%
+ {\rightskip=0pt plus 100pt minus 10pt % go into C mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 1000 % so strings can be broken (discretionary \ is inserted)
+ \exhyphenpenalty 10000
+ \global\CWEBind=2 \1\ \unskip}
+
+\defCWEBmacro\C#1%
+ {\5\5\quad$/\ast\,${\cmntfont #1}$\,\ast/$}
+
+% \let\SHC\C % "// short comments" treated like "/* ordinary comments */"
+
+\defCWEBmacro\SHC#1%
+ {\5\5\quad$//\,${\cmntfont#1}}
+
+% \def\C#1{\5\5\quad$\triangleright\,${\cmntfont#1}$\,\triangleleft$}
+% \def\SHC#1{\5\5\quad$\diamond\,${\cmntfont#1}}
+
+\defCWEBmacro\D% macro definition
+ {\defin{\#define}}
+
+\letCWEBmacro\E=\equiv % equivalence sign
+
+% \def\ET% conjunction between two section numbers
+% { and~}
+%
+% \def\ETs% conjunction between the last two of several section numbers
+% {, and~}
+
+\defCWEBmacro\F% format definition
+ {\defin{format}}
+
+\letCWEBmacro\G = \ge % greater than or equal sign
+
+% \H is long Hungarian umlaut accent
+
+\letCWEBmacro\I = \ne % unequal sign
+
+\defCWEBmacro\J% TANGLE's join operation
+ {\.{@\&}}
+
+% \let\K== % assignment operator
+
+\letCWEBmacro\K = \leftarrow % "honest" alternative to standard assignment operator
+
+% \L is Polish letter suppressed-L
+
+% \outer\def\M#1%
+% {\MN{#1}%
+% \ifon
+% \vfil
+% \penalty-100
+% \vfilneg % beginning of section
+% \vskip\intersecskip
+% \startsection
+% \ignorespaces}
+%
+% \outer\def\N#1#2#3.%
+% {\gdepth=#1%
+% \gtitle={#3}%
+% \MN{#2}% beginning of starred section
+% \ifon
+% \ifnum#1<\secpagedepth
+% \vfil
+% \eject % force page break if depth is small
+% \else
+% \vfil
+% \penalty-100
+% \vfilneg
+% \vskip\intersecskip
+% \fi
+% \fi
+% \message{*\secno}% progress report
+% \edef\next%
+% {\write\cont % write to contents file
+% {\ZZ{#3}{#1}{\secno}{\noexpand\the\pageno}}}%
+% \next % \ZZ{title}{depth}{sec}{page}
+% \ifon
+% \startsection
+% {\bf#3.\quad}%
+% \ignorespaces}
+%
+% \def\MN#1%
+% {\par % common code for \M, \N
+% {\xdef\secstar{#1}%
+% \let\*=\empty
+% \xdef\secno{#1}}% remove \* from section name
+% \ifx\secno\secstar
+% \onmaybe
+% \else
+% \ontrue
+% \fi
+% \mark{{{\tensy x}\secno}{\the\gdepth}{\the\gtitle}}}
+%
+% each \mark is {section reference or null}{depth plus 1}{group title}
+
+% \O is Scandinavian letter O-with-slash
+% \P is paragraph sign
+
+\defCWEBmacro\Q {\note{This code is cited in section}} % xref for mention of a section
+\defCWEBmacro\Qs {\note{This code is cited in sections}} % xref for mentions of a section
+
+% \S is section sign
+
+\defCWEBmacro\T#1%
+ {\leavevmode % octal, hex or decimal constant
+ \hbox
+ {$\def\?{\kern.2em}%
+ \def\$##1{\egroup_{\,\rm##1}\bgroup}% suffix to constant
+ \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick)
+ \let\~=\oct
+ \let\^=\hex
+ {#1}$}}
+
+\defCWEBmacro\U {\note{This code is used in section}} % xref for use of a section
+\defCWEBmacro\Us {\note{This code is used in sections}} % xref for uses of a section
+
+\letCWEBmacro\R = \lnot % logical not
+\letCWEBmacro\V = \lor % logical or
+\letCWEBmacro\W = \land % logical and
+
+% defined later on
+%
+% \def\X#1:#2\X%
+% {\ifmmode
+% \gdef\XX{\null$\null}%
+% \else
+% \gdef\XX{}%
+% \fi % section name
+% \XX$\langle\,${#2\eightrm\kern.5em#1}$\,\rangle$\XX}
+
+\unprotect
+
+\def\theCWEByskip {\blank[\v!small]}
+\def\theCWEBvskip {\blank[\v!big]}
+
+\protect
+
+\defCWEBmacro\Y%
+ {\par
+ \yskip}
+
+\defCWEBmacro\yskip%
+ {\theCWEByskip}
+
+\letCWEBmacro\Z = \le
+% \letCWEBmacro\ZZ = \let % now you can \write the control sequence \ZZ
+\letCWEBmacro\* = *
+
+\defCWEBmacro\oct%
+ {\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}}
+
+\defCWEBmacro\hex%
+ {\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}}
+
+\defCWEBmacro\vb#1%
+ {\leavevmode
+ \hbox
+ {\kern.2\CWEBpt
+ \vrule
+ \vtop
+ {\vbox
+ {\hrule
+ \hbox{\strut\kern.2\CWEBpt\.{#1}\kern.2\CWEBpt}}
+ \hrule}%
+ \vrule
+ \kern.2\CWEBpt}} % verbatim string
+
+\def\onmaybe%
+ {\let\ifon=\maybe}
+
+\let\maybe=\iftrue
+
+\newif\ifon
+
+% \newif\iftitle
+% \newif\ifpagesaved
+%
+% \def\lheader%
+% {\mainfont
+% \the\pageno
+% \eightrm
+% \qquad
+% \grouptitle
+% \hfill
+% \title
+% \qquad
+% \mainfont
+% \topsecno} % top line on left-hand pages
+%
+% \def\rheader%
+% {\mainfont
+% \topsecno
+% \eightrm
+% \qquad
+% \title
+% \hfill
+% \grouptitle
+% \qquad
+% \mainfont
+% \the\pageno} % top line on right-hand pages
+%
+% \def\grouptitle
+% {\let\i=I
+% \let\j=J
+% \uppercase\expandafter{\expandafter\takethree\topmark}}
+%
+% \def\topsecno%
+% {\expandafter\takeone\topmark}
+%
+% \def\takeone #1#2#3{#1}
+% \def\taketwo #1#2#3{#2}
+% \def\takethree #1#2#3{#3}
+%
+% \def\nullsec%
+% {\eightrm
+% \kern-2em} % the \kern-2em cancels \qquad in headers
+%
+% \let\page=\pagebody % \def\page {\box255 }
+% \raggedbottom % \normalbottom % faster, but loses plain TeX footnotes
+%
+% \def\normaloutput#1#2#3%
+% {\shipout\vbox
+% {\ifodd
+% \pageno
+% \hoffset=\pageshift
+% \fi
+% \vbox to \fullpageheight
+% {\iftitle
+% \global\titlefalse
+% \else
+% \hbox to \pagewidth
+% {\vbox to 10pt{}%
+% \ifodd\pageno #3\else#2\fi}
+% \fi
+% \vfill#1}} % parameter #1 is the page itself
+% \global\advance\pageno by 1}
+%
+% \gtitle={\.{CWEB} output} % this running head is reset by starred sections
+%
+% \mark{\noexpand\nullsec0{\the\gtitle}}
+%
+% \def\title%
+% {\expandafter\uppercase\expandafter{\jobname}}
+%
+% \def\topofcontents%
+% {\centerline{\titlefont\title}
+% \vskip.7in
+% \vfill} % this material will start the table of contents page
+
+\def\botofcontents%
+ {\vfill
+ \centerline{\covernote}} % this material will end the table of contents page
+
+\def\covernote%
+ {}
+
+% some leftover
+
+\defCWEBmacro\contentspagenumber{0} % default page number for table of contents
+
+% \newdimen\pagewidth \pagewidth = 158mm % the width of each page
+% \newdimen\pageheight \pageheight = 223mm % the height of each page
+% \newdimen\fullpageheight \fullpageheight = 240mm % page height including headlines
+% \newdimen\pageshift \pageshift = 0in % shift righthand pages wrt lefthand ones
+%
+% \def\magnify#1%
+% {\mag=#1
+% \pagewidth=6.5truein
+% \pageheight=8.7truein
+% \fullpageheight=9truein
+% \setpage}
+%
+% \def\setpage%
+% {\hsize\pagewidth
+% \vsize\pageheight} % use after changing page size
+%
+% \def\contentsfile {\jobname.toc} % file that gets table of contents info
+% \def\readcontents {\input \contentsfile}
+% \def\readindex {\input \jobname.idx}
+% \def\readsections {\input \jobname.scn}
+%
+% \newwrite\cont
+% \output{\setbox0=\page % the first page is garbage
+% \openout\cont=\contentsfile
+% \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
+% \global\output{\normaloutput\page\lheader\rheader}}
+% \setpage
+% \vbox to \vsize{} % the first \topmark won't be null
+
+\defCWEBdummy\magnify#1% magnify the page
+ {}
+
+\defCWEBmacro\ch%
+ {\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+
+% \newbox\sbox % saved box preceding the index
+% \newbox\lbox % lefthand column in the index
+%
+% \def\inx%
+% {\par\vskip6pt plus 1fil % we are beginning the index
+% \def\page{\box255 }
+% \normalbottom
+% \write\cont{} % ensure that the contents file isn't empty
+% \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+% \closeout\cont % the contents information has been fully gathered
+% \output
+% {\ifpagesaved
+% \normaloutput{\box\sbox}\lheader\rheader
+% \fi
+% \global\setbox\sbox=\page
+% \global\pagesavedtrue}
+% \pagesavedfalse
+% \eject % eject the page-so-far and predecessors
+% \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+% \vsize=\pageheight
+% \advance\vsize by -\ht\sbox % the remaining height
+% \hsize=.5\pagewidth
+% \advance\hsize by -10pt
+% % column width for the index (20pt between cols)
+% \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+% \def\lr{L} % this tells whether the left or right column is next
+% \output
+% {\if L\lr
+% \global\setbox\lbox=\page
+% \gdef\lr{R}
+% \else
+% \normaloutput
+% {\vbox to\pageheight
+% {\box\sbox
+% \vss
+% \hbox to\pagewidth{\box\lbox\hfil\page}}}
+% \lheader
+% \rheader
+% \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+% \message{Index:}
+% \parskip 0pt plus .5pt
+% \outer\def\I##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry
+% \def\[##1]{$\underline{##1}$} % underlined index item
+% \rm
+% \rightskip0pt plus 2.5em
+% \tolerance 10000
+% \let\*=\lapstar
+% \hyphenpenalty 10000
+% \parindent0pt
+% \readindex}
+%
+% \def\fin%
+% {\par\vfill\eject % this is done when we are ending the index
+% \ifpagesaved\null\vfill\eject\fi % output a null index column
+% \if L\lr\else\null\vfill\eject\fi % finish the current page
+% \parfillskip 0pt plus 1fil
+% \def\grouptitle{NAMES OF THE SECTIONS}
+% \let\topsecno=\nullsec
+% \message{Section names:}
+% \output={\normaloutput\page\lheader\rheader}
+% \setpage
+% \def\note##1##2.{\quad{\eightrm##1~##2.}}
+% \def\Q{\note{Cited in section}} % crossref for mention of a section
+% \def\Qs{\note{Cited in sections}} % crossref for mentions of a section
+% \def\U{\note{Used in section}} % crossref for use of a section
+% \def\Us{\note{Used in sections}} % crossref for uses of a section
+% \def\I{\par\hangindent 2em}\let\*=*
+% \readsections}
+%
+% \def\con%
+% {\par\vfill\eject % finish the section names
+% %\ifodd\pageno\else\titletrue\null\vfill\eject\fi % for duplex printers
+% \rightskip = 0pt
+% \hyphenpenalty = 50
+% \tolerance = 200
+% \setpage
+% \output={\normaloutput\page\lheader\rheader}
+% \titletrue % prepare to output the table of contents
+% \pageno=\contentspagenumber
+% \def\grouptitle{TABLE OF CONTENTS}
+% \message{Table of contents:}
+% \topofcontents
+% \line{\hfil Section\hbox to3em{\hss Page}}
+% \let\ZZ=\contentsline
+% \readcontents\relax % read the contents info
+% \botofcontents
+% \end} % print the contents page(s) and terminate
+%
+% \def\contentsline#1#2#3#4%
+% {\ifnum#2=0
+% \smallbreak
+% \fi
+% \line{\consetup{#2}#1
+% \rm\leaders\hbox to .5em{.\hfil}\hfil\ #3\hbox to3em{\hss#4}}}
+%
+
+\defCWEBmacro\consetup#1%
+ {\ifcase#1 \bf % depth -1 (@**)
+ \or % depth 0 (@*)
+ \or \hskip2em % depth 1 (@*1)
+ \or \hskip4em % depth 2 (@*2)
+ \or \hskip6em % depth 3 (@*3)
+ \or \hskip8em % depth 4 (@*4)
+ \or \hskip10em % depth 5 (@*5)
+ \else \hskip12em
+ \fi} % depth 6 or more
+
+\defCWEBdummy \inx {} % index
+\defCWEBdummy \fin {} % finish
+\defCWEBdummy \con {} % table of contents and finish
+
+\defCWEBdummy \noinx {} % no indexes or table of contents
+\defCWEBdummy \nosecs {} % no index of section names or table of contents
+\defCWEBdummy \nocon {} % no table of contents
+
+\defCWEBmacro\,%
+ {\relax
+ \ifmmode
+ \mskip\thinmuskip
+ \else
+ \thinspace
+ \fi}
+
+% \def\noinx%
+% {\let\inx=\end}
+%
+% \def\nosecs%
+% {\let\FIN=\fin
+% \def\fin%
+% {\let\parfillskip=\end
+% \FIN}}
+%
+% \def\nocon%
+% {\let\con=\end}
+%
+% \newcount\twodigits
+%
+% \def\hours%
+% {\twodigits=\time
+% \divide\twodigits by 60
+% \printtwodigits
+% \multiply\twodigits by -60
+% \advance\twodigits by \time
+% :\printtwodigits}
+%
+% \def\gobbleone1{}
+%
+% \def\printtwodigits%
+% {\advance\twodigits by 100
+% \expandafter\gobbleone\number\twodigits
+% \advance\twodigits by -100 }
+%
+% \def\today%
+% {\ifcase\month
+% \or January\or February\or March\or April\or May\or June%
+% \or July\or August\or September\or October\or November\or December%
+% \fi
+% \space
+% \number\day, \number\year}
+%
+% \def\datethis%
+% {\def\startsection%
+% {\leftline{\sc\today\ at \hours}
+% \bigskip
+% \let\startsection=\stsec
+% \stsec}}
+%
+% \def\datecontentspage%
+% {\def\topofcontents%
+% {\leftline{\sc\today\ at \hours}
+% \bigskip
+% \centerline{\titlefont\title}
+% \vfill}}
+
+\defCWEBdummy\datethis {} % say `\datethis' in limbo, to get your listing timestamped before section 1
+\defCWEBdummy\datecontentspage {} % timestamps the contents page
+
+\defCWEBmacro\TeX%
+ {{\ifmmode\it\fi
+ \leavevmode
+ \hbox{T\kern-.1667em\lower.424ex\hbox{E}\hskip-.125em X}}}
+
+% alternative implementation
+
+\newif\ifCWEBnotes
+
+\defCWEBmacro\Q {\CWEBnotesfalse \note{This code is cited in section}} % xref for mention of a section
+\defCWEBmacro\Qs {\CWEBnotestrue \note{This code is cited in sections}} % xref for mentions of a section
+
+\defCWEBmacro\U {\CWEBnotesfalse \note{This code is used in section}} % xref for use of a section
+\defCWEBmacro\Us {\CWEBnotestrue \note{This code is used in sections}} % xref for uses of a section
+
+\defCWEBmacro\A {\CWEBnotesfalse \note{See also section}} % xref for doubly defined section name
+\defCWEBmacro\As {\CWEBnotestrue \note{See also sections}} % xref for multiply defined section name
+
+\defCWEBmacro\ET% conjunction between two section numbers
+ { and~}
+
+\defCWEBmacro\ETs% conjunction between the last two of several section numbers
+ {, and~}
+
+%\def\processCWEBsectionnumbers[#1]%
+% {\bgroup
+% \def\CWEBcomma%
+% {\def\CWEBcomma{, }}%
+% \def\docommand##1%
+% {\bgroup
+% \def\[####1]{####1}%
+% \xdef\CWEBreference{##1}%
+% \egroup
+% \CWEBcomma{\naar{\donottest{##1}}[web:\CWEBreference]}}%
+% \processcommalist[{#1}]\docommand
+% \egroup}
+
+% \def\processCWEBsectionnumbers[#1]%
+% {\bgroup
+% \def\CWEBcomma%
+% {\def\CWEBcomma{, }}%
+% \def\docommand##1%
+% {\bgroup
+% \def\(####1){####1}%
+% \xdef\CWEBreference{##1}%
+% \egroup
+% \CWEBcomma
+% {\localcolortrue\naar{\donottest{##1}}[web:\CWEBreference]}}%
+% \bgroup
+% \def\[##1]{\(##1)}\let\(=\relax\xdef\CWEBreferences{#1}%
+% \egroup
+% \unexpanded\def\(##1){\[##1]}%
+% \processcommacommand[\CWEBreferences]\docommand
+% \egroup}
+
+\def\processCWEBsectionnumbers[#1]%
+ {\bgroup
+ \def\CWEBcomma%
+ {\def\CWEBcomma{, }}%
+ \def\docommand##1%
+ {\bgroup
+ \def\[####1]{####1}%
+ \xdef\CWEBreference{##1}%
+ \egroup
+ \CWEBcomma{\localcolortrue\goto{\donottest{##1}}[web:\CWEBreference]}}%
+ \processlist{(}{)}{,}\docommand(#1)
+ \egroup}
+
+\def\processCWEBsectionnotes%
+ {\catcode`\s=12
+ \doprocessCWEBsectionnotes}
+
+\def\doprocessCWEBsectionnotes#1.%
+ {\ifCWEBnotes
+ \def\next##1\ET##2##3.%
+ {\processCWEBsectionnumbers[##1]%
+ \if##2s%
+ {, and~\goto{##3}[web:##3]}%
+ \else
+ { and~\goto{##2##3}[web:##2##3]}%
+ \fi}%
+ \next#1.%
+ \else
+ \goto{#1}[web:#1]%
+ \fi
+ \afterCWEBnote % inside group!
+ \egroup}
+
+\let\afterCWEBnote=\relax
+
+\defCWEBmacro\note#1%
+ {\bgroup
+ \Y\noindent
+ \def\afterCWEBnote{\par}%
+ \hangindent2em
+ %\baselineskip10pt
+ \eightrm#1~\processCWEBsectionnotes}
+
+\def\oldCWEBmacroX#1:#2\X% original
+ {\ifmmode
+ \gdef\XX{\null$\null}%
+ \else
+ \gdef\XX{}%
+ \fi % section name
+ \XX$\langle\,${#2\eightrm\kern.5em#1}$\,\rangle$\XX}
+
+\defCWEBmacro\ATH%
+ {\oldCWEBmacroX\kern-.5em:Preprocessor definitions\X}
+
+\def\newCWEBmacroX#1:#2\X% original
+ {\ifmmode
+ \gdef\XX{\null$\null}%
+ \else
+ \gdef\XX{}%
+ \fi % section name
+ \XX$\langle\,$%
+ {#2\eightrm\kern.5em\processCWEBsectionnumbers[{#1}]}%
+ $\,\rangle$\XX}
+
+\defCWEBmacro\X#1:#2\X%
+ {\newCWEBmacroX#1:#2\X}
+
+\definemarking[CWEBfilename]
+\definemarking[CWEBsectiontitle]
+\definemarking[CWEBsectionnumber]
+\definemarking[CWEBsectiondepth]
+
+\defCWEBmacro\M#1%
+ {\MN{#1}%
+ \ifon
+ \vfil
+ \penalty-100
+ \vfilneg % beginning of section
+ \theCWEBvskip
+ \startsection
+ \pagereference[web:#1]%
+ \expanded{\marking[CWEBsectionnumber]{\secno}}%
+ \expanded{\marking[CWEBsectiondepth]{\the\gdepth}}%
+ \ignorespaces}
+
+\defCWEBmacro\N#1#2#3.%
+ {\gdepth=#1%
+ \MN{#2}% beginning of starred section
+ \ifon
+ \ifnum#1<\secpagedepth
+ \vfil
+ \eject % force page break if depth is small
+ \else
+ \vfil
+ \penalty-100
+ \vfilneg
+ \theCWEBvskip
+ \fi
+ \fi
+ \message{*\secno}% progress report
+ \makesectionformat % context
+ \defconvertedargument\ascii{#3}%
+ \edef\next%
+ {\write\CWEBcont % write to contents file
+ {\string\ZZ{\ascii}{#1}{\secno}%
+ {\sectionformat::\noexpand\userfolio}{\noexpand\realfolio}}}%
+ \next % \ZZ{title}{depth}{sec}{page}
+ \ifon
+ \startsection
+ \pagereference[web:#2]%
+ \marking[CWEBsectiontitle] {#3}%
+ \expanded{\marking[CWEBsectionnumber]{\secno}}%
+ \expanded{\marking[CWEBsectiondepth]{\the\gdepth}}%
+ {\bf#3.\quad}%
+ \ignorespaces}
+
+\defCWEBmacro\MN#1%
+ {\par % common code for \M, \N
+ {\xdef\secstar{#1}%
+ \let\*=\empty
+ \xdef\secno{#1}}% remove \* from section name
+ \ifx\secno\secstar
+ \onmaybe
+ \else
+ \ontrue
+ \fi}
+
+\newif\iflinktoCWEBfile
+
+\def\setCWEBlinkfile#1%
+ {\linktoCWEBfiletrue
+ \def\otherCWEBfile{#1}}
+
+\unprotect
+
+\def\gotoCWEBsection#1[#2]%
+ {\iflinktoCWEBfile
+ \bgroup
+ \setupinteraction[\c!color=,\c!style=]%
+ \let\savedreferenceprefix=\referenceprefix
+ \localcolortrue
+ \goto{#1}[\otherCWEBfile::\savedreferenceprefix web:#2]%
+ \egroup
+ \else
+ #1%
+ \fi}
+
+\protect
+
+\defCWEBmacro\startsection%
+ {\rightskip=0pt % get out of C mode (cf. \B)
+ \sfcode`;=1500
+ \pretolerance 200
+ \hyphenpenalty 50
+ \exhyphenpenalty 50
+ \noindent
+ \bgroup
+ \let\*=\lapstar
+ \gotoCWEBsection{\bf\secstar.\quad}[\secno]%
+ \egroup}
+
+\def\ignoreCWEBinput%
+ {\let\normalinput=\input
+ \def\input ##1 %
+ {\let\input=\normalinput}}
+
+\def\loadCWEBmacros#1%
+ {\let\oldN=\N
+ \def\N{\bgroup\setbox0=\vbox\bgroup\endinput}%
+ \ignoreCWEBinput
+ \ReadFile{#1.tex}%
+ \egroup\egroup
+ \let\N=\oldN}
+
+\def\resetCWEBcontext%
+ {\catcode`\|=12 % used in context discretionaries
+ \everypar{} % used for context indentation and floats
+ \parskip=0pt % no stretch between cweb paragraphs
+ \parindent=1em} % is related to cweb backspace etc
+
+\newwrite\CWEBcont
+
+\def\processCWEBsource #1 %
+ {\bgroup
+ \resetCWEBcontext
+ \activateCWEB
+ \ignoreCWEBinput
+ \immediate\openout\CWEBcont=#1.toc
+ \write\CWEBcont{\noexpand\unprotect}
+ \message{Source:}
+ \marking[CWEBfilename]{#1}
+ \ReadFile{#1.tex}\relax
+ \write\CWEBcont{\noexpand\protect}
+ \closeout\CWEBcont
+ \par
+ \egroup}
+
+\def\resetCWEBindexentry%
+ {\xdef\currentCWEBindexentry{}}
+
+\def\showCWEBindexentry#1% can be redefined
+ {\theCWEBvskip
+ \vskip3\lineheight
+ \goodbreak
+ \vskip-3\lineheight
+ {\pagereference[web:#1]\bf#1}%
+ \theCWEBvskip}
+
+\def\checkCWEBindexentry#1%
+ {\bgroup
+ \def\\##1{##1}% a dummy that also removes the {}
+ \def\|##1{##1}% another dummy
+ \def\.##1{*##1}% and another (the typewriter one)
+ \def\&##1{##1}% and a last one
+ \def\9##1{##1}% hold this one
+ \catcode`*=11
+ \expandafter\def\expandafter\entry\expandafter{#1}%
+ \defconvertedcommand\ascii\entry
+ \expanded{\FINDFIRSTCHARACTER{\ascii}}%
+ \doifnot{\currentCWEBindexentry}{\firstcharacter}
+ {\doifnot{\firstcharacter}{*} % signal for \firstbunch
+ {\global\let\currentCWEBindexentry=\firstcharacter
+ \showCWEBindexentry{\currentCWEBindexentry}}}%
+ \egroup}
+
+\def\theCWEBbeforeindex {\startcolumns}
+\def\theCWEBafterindex {\stopcolumns}
+
+\def\processCWEBindex #1 %
+ {\bgroup
+ \resetCWEBcontext
+ \activateCWEB
+ \resetCWEBindexentry
+ \def\I##1, %
+ {\par
+ \checkCWEBindexentry{##1}%
+ \hangindent2em
+ \noindent##1:\kern1em%
+ \def\next####1.%
+ {\processCWEBsectionnumbers[{####1}]}%
+ \next}%
+ \def\[##1]%
+ {$\underline{##1}$}%
+ \let\*=\lapstar
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+% \parskip 0pt plus .5pt
+ \rightskip0pt plus 2.5em
+ \tolerance 10000
+ \hyphenpenalty 10000
+ \parindent0pt
+ \message{Index:}
+ \marking[CWEBfilename] {#1}
+ \marking[CWEBsectiontitle] {index}
+ \marking[CWEBsectionnumber]{}
+ \marking[CWEBsectiondepth]{}
+ \loadCWEBmacros{#1}
+ \theCWEBbeforeindex
+ \ReadFile{#1.idx}\relax
+ \theCWEBafterindex
+ \par
+ \egroup}
+
+\def\processCWEBsections #1 %
+ {\bgroup
+ \resetCWEBcontext
+ \activateCWEB
+ \loadCWEBmacros{#1}
+ \parfillskip = 0pt plus 1fil
+ \parindent = 0pt
+ \let\topsecno=\nullsec
+ \def\note##1%
+ {\quad
+ \bgroup
+ \eightrm
+ ##1~\processCWEBsectionnotes}
+ \def\Q {\CWEBnotesfalse \note{Cited in section}} % crossref for mention of a section
+ \def\Qs{\CWEBnotestrue \note{Cited in sections}} % crossref for mentions of a section
+ \def\U {\CWEBnotesfalse \note{Used in section}} % crossref for use of a section
+ \def\Us{\CWEBnotestrue \note{Used in sections}} % crossref for uses of a section
+ \def\I {\par\hangindent 2em}%
+ \let\*=*
+ \message{Section names:}
+ \marking[CWEBfilename] {#1}
+ \marking[CWEBsectiontitle] {sections}
+ \marking[CWEBsectionnumber]{}
+ \marking[CWEBsectiondepth]{}
+ \loadCWEBmacros{#1}
+ \ReadFile{#1.scn}\relax
+ \par
+ \botofcontents
+ \par
+ \egroup}
+
+\def\processCWEBcontents #1 %
+ {\bgroup
+ \resetCWEBcontext
+ \activateCWEB
+ \loadCWEBmacros{#1}
+ \rightskip = 0pt
+ \hyphenpenalty = 50
+ \tolerance = 200
+ \parindent = 0pt
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \let\ZZ=\contentsline
+ \message{Table of contents:}
+ \marking[CWEBfilename] {#1}
+ \marking[CWEBsectiontitle] {table of contents}
+ \marking[CWEBsectionnumber]{}
+ \marking[CWEBsectiondepth]{}
+ \loadCWEBmacros{#1}
+ \ReadFile{#1.toc}\relax
+ \par
+ \egroup}
+
+\defCWEBmacro\contentsline#1#2#3#4#5%
+ {\ifnum#2=0
+ \smallbreak
+ \fi
+ \line{\consetup{#2}#1
+ \rm
+ \leaders\hbox to .5em{.\hfil}\hfil\
+ {\localcolortrue\goto{#3}[web:#3]}% below: \gotorealpage ? should be changed
+ \hbox to3em{\localcolortrue\hss\gotorealpage{}{}{#5}{\translatednumber[#4]\presetgoto}}}}
+
+%D A last hack, needed because a file can overload of the
+%D above. (Some day: a check like \type{\ifx#1\CWEBdefined}.)
+
+\def\outer#1#2%
+ {\ifx#2\undefined
+ \expandafter#1\expandafter#2%
+ \else
+ \expandafter#1\expandafter\ThrowAway
+ \fi}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/m-database.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-database.lua
index 91e9636eeb0..91e9636eeb0 100644
--- a/Master/texmf-dist/tex/context/base/m-database.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-database.lua
diff --git a/Master/texmf-dist/tex/context/base/m-database.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-database.mkiv
index cc7dd3d7207..cc7dd3d7207 100644
--- a/Master/texmf-dist/tex/context/base/m-database.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-database.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-directives.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-directives.mkiv
index 8b551b27abd..8b551b27abd 100644
--- a/Master/texmf-dist/tex/context/base/m-directives.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-directives.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv
new file mode 100644
index 00000000000..93b1a6c5db3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-educat.mkiv
@@ -0,0 +1,217 @@
+%D \module
+%D [ file=m-educat,
+%D version=2003.03.05,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Educational Extras,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module will collect a few macros cq.\ definitions
+%D meant for educational use. Most of the code has been laying
+%D around for some time and has been (or is still) used in
+%D \PRAGMA\ projects.
+
+\unprotect
+
+\definesystemvariable{iv}
+
+\definecolor [answerareacolor] [s=.90]
+\definecolor [answerlinecolor] [white]
+
+\definetextbackground
+ [\v!answerarea]
+ [\c!location=\v!text,
+ \c!n=0,
+ \c!frame=\v!off,
+ \c!framecolor=answerlinecolor,
+ \c!rulethickness=2pt,
+ \c!background=\v!color,
+ \c!backgroundcolor=answerareacolor,
+ \c!alternative=2] % betweenline
+
+% n=gedwongen
+% m=extra auto
+
+\def\setupanswerarea
+ {\setuptextbackground[\v!answerarea]}
+
+\setvalue\e!answerspace
+ {\dosingleempty\doanswerspace}
+
+\def\doanswerspace[#1]%
+ {\begingroup
+ \dontcomplain
+ \setupanswerarea
+ [\c!n=0,\c!m=,#1,\c!location=\v!text]%
+ \doifelsenothing{\textbackgroundparameter\c!m}
+ {\expandafter\donoanswerspace}
+ {\expandafter\dodoanswerspace}%
+ [#1]}
+
+\def\donoanswerspace[#1]#2%
+ {\setupthinrules
+ [\c!alternative=\textbackgroundparameter\c!alternative,
+ \c!color=\textbackgroundparameter\c!framecolor,
+ \c!background=\textbackgroundparameter\c!background,
+ \c!backgroundcolor=\textbackgroundparameter\c!backgroundcolor,
+ \c!rulethickness=\textbackgroundparameter\c!rulethickness]%
+ \doifelse{\textbackgroundparameter\c!n}{*}
+ {\thinrule
+ \par}
+ {\scratchcounter0\textbackgroundparameter\c!n\relax
+ % tricky, guess
+ \def\processisolatedword##1%
+ {\setbox\scratchbox=\hbox{##1}%
+ \vbox{\hsize\wd\scratchbox\thinrule
+ \ifcase\scratchcounter\else
+ \setbox\scratchbox=\hbox{\space}%
+ \nobreak\hskip\zeropoint \!!minus \wd\scratchbox
+ \vbox{\hsize\wd\scratchbox\thinrule}%
+ \fi}}%
+ \processisolatedwords{#2}\processisolatedword
+ % so far
+ \ifcase\scratchcounter \else \ifnum\scratchcounter<3
+ \nobreak \vbox{\hsize\scratchcounter em\thinrule}%
+ \else % more
+ \advance \scratchcounter -2
+ \dorecurse\scratchcounter{\allowbreak\vbox{\hsize1em\thinrule}}%
+ \nobreak \vbox{\hsize2em\thinrule}%
+ \fi \fi}%
+ \endgroup}
+
+\def\dodoanswerspace[#1]#2% m case
+ {\getvalue{\e!start\v!answerarea}%
+ #2%
+ \doifelse{\textbackgroundparameter\c!m}{*}
+ {\hfill\strut
+ \getvalue{\e!stop\v!answerarea}%
+ \par}
+ {\scratchcounter0\textbackgroundparameter\c!m\relax
+ \ifcase\scratchcounter \else \ifnum\scratchcounter<3
+ \nobreak \hbox to \scratchcounter em{\strut\hss}%
+ \else % more
+ \advance \scratchcounter -2
+ \dorecurse\scratchcounter{\allowbreak\hbox to 1em{\strut\hss}}%
+ \nobreak \hbox to 2em{\strut\hss}%
+ \fi \fi
+ \getvalue{\e!stop\v!answerarea}}%
+ \endgroup}
+
+\setvalue{\e!start\e!answerlines}%
+ {\dosingleempty\dostartanswerlines}
+
+\def\dostartanswerlines[#1]%
+ {\begingroup
+ \dontcomplain
+ \setupanswerarea
+ [\c!n=0,\c!m=,#1,\c!location=\v!text]%
+ \doifnot{\textbackgroundparameter\c!option}\v!joinedup\softbreak
+ \doifelsenothing{\textbackgroundparameter\c!m}
+ {\expandafter\donostartanswerlines}
+ {\expandafter\dodostartanswerlines}%
+ [#1]}
+
+\def\donostartanswerlines[#1]%
+ {\setupthinrules
+ [\c!alternative=\textbackgroundparameter\c!alternative,
+ \c!color=\textbackgroundparameter\c!framecolor,
+ \c!background=\textbackgroundparameter\c!background,
+ \c!backgroundcolor=\textbackgroundparameter\c!backgroundcolor,
+ \c!rulethickness=\textbackgroundparameter\c!rulethickness]%
+ \thinrules[\c!n=\textbackgroundparameter\c!n]\par
+ \endgroup
+ \grabuntil{\e!stop\e!answerlines}}
+
+\def\dodostartanswerlines[#1]%
+ {\begingroup
+ \getvalue{\e!start\v!answerarea}%
+ \ignorespaces}
+
+\setvalue{\e!stop\e!answerlines}%
+ {\scratchcounter0\textbackgroundparameter\c!m\relax
+ % a \softbreak is more efficient in pos dan \par
+ \ifcase\scratchcounter
+ % nothing
+ \or
+ \softbreak
+ \else
+ \softbreak
+ \advance \scratchcounter \minusone
+ \dorecurse\scratchcounter{\strut\hfill\strut\softbreak}%
+ \fi
+ \strut\hfill\strut
+ \getvalue{\e!stop\v!answerarea}%
+ \par\endgroup\endgroup}
+
+\setvalue\e!answerlines
+ {\dosingleempty\doanswerlines}
+
+\def\doanswerlines[#1]#2%
+ {\getvalue{\e!start\e!answerlines}[#1]%
+ #2%
+ \getvalue{\e!stop\e!answerlines}}
+
+\protect \doifnotmode{demo}{\endinput}
+
+%D Test materiaal.
+
+\starttext
+
+\startnotmode[answers]
+
+ \setupanswerarea[level=+1]
+
+\stopnotmode
+
+\setupcolors[state=start]
+
+test test test \answerspace [n=10] {Whow}. test test test
+test tets test test \answerspace [n=10] {Whow}. test test
+test test tets test test \answerspace [n=10] {Whow}. test
+test test test tets test test \answerspace [n=10] {Whow}.
+test test test test test test \answerspace [n=*] {Whow.}
+
+test test test test test test test \startanswerlines
+[n=3] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[n=3,alternative=0] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[n=3,alternative=1] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[n=3,alternative=2] What A Junk Answer \stopanswerlines
+
+\startitemize[paragraph]
+\item \startanswerlines [option=seried,n=2] xxx \stopanswerlines
+\stopitemize
+
+test test test \answerspace [m=10] {Whow}. test test test
+test tets test test \answerspace [m=10] {Whow}. test test
+test test tets test test \answerspace [m=10] {Whow}. test
+test test test tets test test \answerspace [m=10] {Whow}.
+test test test test test test \answerspace [m=*] {Whow.}
+
+test test test test test test test \startanswerlines
+[m=2] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[m=2,alternative=0] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[m=2,alternative=1] What A Junk Answer \stopanswerlines
+
+test test test test test test test \startanswerlines
+[m=2,alternative=2] What A Junk Answer \stopanswerlines
+
+\startitemize[paragraph]
+\item \startanswerlines [option=seried,m=2] xxx \stopanswerlines
+\stopitemize
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.lua
new file mode 100644
index 00000000000..0d7a04741d4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.lua
@@ -0,0 +1,7088 @@
+if not modules then modules = { } end modules ['m-escrito'] = {
+ version = 1.001,
+ comment = "companion to m-escrito.mkiv",
+ author = "Taco Hoekwater (BitText) and Hans Hagen (PRAGMA-ADE)",
+ license = "see below and context related readme files"
+}
+
+-- This file is derived from Taco's escrito interpreter. Because the project was
+-- more or less stopped, after some chatting we decided to preserve the result
+-- and make it useable in ConTeXt. Hans went over all code, fixed a couple of
+-- things, messed other things, made the code more efficient, wrapped all in
+-- some helpers. So, a diff between the original and this file is depressingly
+-- large. This means that you shouldn't bother Taco with the side effects (better
+-- or worse) that result from this.
+
+-- Fonts need some work and I will do that when needed. I might cook up something
+-- similar to what we do with MetaFun. First I need to run into a use case. After
+-- all, this whole exercise is just that: getting an idea of what processing PS
+-- code involves.
+
+-- Here is the usual copyright blabla:
+--
+-- Copyright 2010 Taco Hoekwater <taco@luatex.org>. All rights reserved.
+--
+-- Redistribution and use in source and binary forms, with or without modification,
+-- are permitted provided that the following conditions are met:
+--
+-- 1. Redistributions of source code must retain the above copyright notice, this
+-- list of conditions and the following disclaimer.
+--
+-- 2. Redistributions in binary form must reproduce the above copyright notice, this
+-- list of conditions and the following disclaimer in the documentation and/or
+-- other materials provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND ANY EXPRESS OR
+-- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+-- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+-- SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+-- OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+-- DAMAGE.
+
+-- We use a couple of do..ends later on because this rather large file has too many
+-- locals otherwise. Possible optimizations are using insert/remove and getting rid
+-- of the VM calls (in direct mode they are no-ops anyway). We can also share some
+-- more code here and there.
+
+local type, unpack, tonumber, tostring, next = type, unpack, tonumber, tostring, next
+
+local format = string.format
+local gmatch = string.gmatch
+local match = string.match
+local sub = string.sub
+local char = string.char
+local byte = string.byte
+
+local insert = table.insert
+local remove = table.remove
+local concat = table.concat
+local reverse = table.reverse
+
+local abs = math.abs
+local ceil = math.ceil
+local floor = math.floor
+local sin = math.sin
+local cos = math.cos
+local rad = math.rad
+local sqrt = math.sqrt
+local atan2 = math.atan2
+local tan = math.tan
+local deg = math.deg
+local pow = math.pow
+local log = math.log
+local log10 = math.log10
+local random = math.random
+local setranseed = math.randomseed
+
+local bitand = bit32.band
+local bitor = bit32.bor
+local bitxor = bit32.bxor
+local bitrshift = bit32.rshift
+local bitlshift = bit32.lshift
+
+local lpegmatch = lpeg.match
+local Ct, Cc, Cs, Cp, C, R, S, P, V = lpeg.Ct, lpeg.Cc, lpeg.Cs, lpeg.Cp, lpeg.C, lpeg.R, lpeg.S, lpeg.P, lpeg.V
+
+local formatters = string.formatters
+local setmetatableindex = table.setmetatableindex
+
+-- Namespace
+
+-- HH: Here we assume just one session. If needed we can support more (just a matter
+-- of push/pop) but it makes the code more complex and less efficient too.
+
+escrito = { }
+
+----- escrito = escrito
+local initializers = { }
+local devices = { }
+local specials
+
+local DEBUG = false -- these will become trackers if needed
+local INITDEBUG = false -- these will become trackers if needed
+local MAX_INT = 0x7FFFFFFF -- we could have slightly larger ints because lua internally uses doubles
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ specials = nil
+ else
+ specials = { }
+ end
+end
+
+local devicename
+local device
+
+-- "boundingbox",
+-- "randomseed",
+
+-- Composite objects
+--
+-- Arrays, dicts and strings are stored in VM. To do this, VM is an integer-indexed table. This appears
+-- a bit silly in lua because we are actually just emulating a C implementation detail (pointers) but it
+-- is documented behavior. There is also supposed to be a VM stack, but I will worry about that when it
+-- becomes time to implement save/restore. (TH)
+
+local VM -- todo: just a hash
+
+initializers[#initializers+1] = function()
+ VM = { }
+end
+
+local directvm = true
+
+local add_VM, get_VM
+
+if directvm then -- if ok then we remove the functions
+
+ add_VM = function(a)
+ return a
+ end
+ get_VM = function(i)
+ return i
+ end
+
+else
+
+ add_VM = function(a)
+ local n = #VM + 1
+ VM[n] = a
+ return n
+ end
+
+ get_VM = function(i)
+ return VM[i]
+ end
+
+end
+
+-- Execution stack
+
+local execstack
+local execstackptr
+local do_exec
+local next_object
+local stopped
+
+initializers[#initializers+1] = function()
+ execstack = { }
+ execstackptr = 0
+ stopped = false
+end
+
+local function pop_execstack()
+ if execstackptr > 0 then
+ local value = execstack[execstackptr]
+ execstackptr = execstackptr - 1
+ return value
+ else
+ return nil -- stackunderflow
+ end
+end
+
+local function push_execstack(v)
+ execstackptr = execstackptr + 1
+ execstack[execstackptr] = v
+end
+
+-- Operand stack
+--
+-- Most operand and exec stack entries are four-item arrays:
+--
+-- [1] = "[integer|real|boolean|name|mark|null|save|font]" (a postscript interpreter type)
+-- [2] = "[unlimited|read-only|execute-only|noaccess]"
+-- [3] = "[executable|literal]" (exec attribute)
+-- [4] = value (a VM index inthe case of names)
+--
+-- But there are some exceptions.
+--
+-- Dictionaries save the access attribute inside the value
+--
+-- [1] = "dict"
+-- [2] = irrelevant
+-- [3] = "[executable|literal]"
+-- [4] = value (a VM index)
+--
+-- Operators have a fifth item:
+--
+-- [1] = "operator"
+-- [2] = "[unlimited|read-only|execute-only|noaccess]"
+-- [3] = "[executable|literal]"
+-- [4] = value
+-- [5] = identifier (the operator name)
+--
+-- Strings and files have a fifth and a sixth item, the fifth of which is
+-- only relevant if the exec attribute is 'executable':
+--
+-- [1] = "[string|file]"
+-- [2] = "[unlimited|read-only|execute-only|noaccess]"
+-- [3] = "[executable|literal]"
+-- [4] = value (a VM index) (for input files, this holds the whole file)
+-- [5] = exec-index
+-- [6] = length
+-- [7] = iomode (for files only)
+-- [8] = filehandle (for files only)
+--
+-- Arrays also have a seven items, the fifth is only relevant if
+-- the exec attribute is 'executable', and the seventh is used to differentiate
+-- between direct and indirect interpreter views of the object.
+--
+-- [1] = "array"
+-- [2] = "[unlimited|read-only|execute-only|noaccess]"
+-- [3] = "[executable|literal]"
+-- [4] = value (a VM index)
+-- [5] = exec-index
+-- [6] = length (a VM index)
+-- [7] = "[d|i]" (direct vs. indirect)
+--
+-- The exec stack also has an object with [1] == ".stopped", which is used
+-- for "stopped" execution contexts
+
+local opstack
+local opstackptr
+
+initializers[#initializers+1] = function()
+ opstack = { }
+ opstackptr = 0
+end
+
+local function pop_opstack()
+ if opstackptr > 0 then
+ local value = opstack[opstackptr]
+ opstackptr = opstackptr - 1
+ return value
+ else
+ return nil -- stackunderflow
+ end
+end
+
+local function push_opstack(v)
+ opstackptr = opstackptr + 1
+ opstack[opstackptr] = v
+end
+
+local function check_opstack(n)
+ return opstackptr >= n
+end
+
+local function get_opstack()
+ if opstackptr > 0 then
+ return opstack[opstackptr]
+ else
+ return nil -- stackunderflow
+ end
+end
+
+-- In case of error, the interpreter has to restore the opstack
+
+local function copy_opstack()
+ local t = { }
+ for n=1,opstackptr do
+ local sn = opstack[n]
+ t[n] = { unpack(sn) }
+ end
+ return t
+end
+
+local function set_opstack(new)
+ opstackptr = #new
+ opstack = new
+end
+
+-- Dict stack
+
+local dictstack
+local dictstackptr
+
+initializers[#initializers+1] = function()
+ dictstack = { }
+ dictstackptr = 0
+end
+
+-- this finds a name in the current dictionary stack
+
+local function lookup(name)
+ for n=dictstackptr,1,-1 do
+ local found = get_VM(dictstack[n])
+ if found then
+ local dict = found.dict
+ if dict then
+ local d = dict[name]
+ if d then
+ return d, n
+ end
+ end
+ end
+ end
+ return nil
+end
+
+-- Graphics state stack
+
+-- device backends are easier if gsstate items use bare data instead of
+-- ps objects, much as possible
+
+-- todo: just use one color array
+
+local gsstate
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ gsstate = nil
+ else
+ gsstate = {
+ matrix = { 1, 0, 0, 1, 0, 0 },
+ color = {
+ gray = 0,
+ hsb = { },
+ rgb = { },
+ cmyk = { },
+ type = "gray"
+ },
+ position = { }, -- actual x and y undefined
+ path = { },
+ clip = { },
+ font = nil,
+ linewidth = 1,
+ linecap = 0,
+ linejoin = 0,
+ screen = nil, -- by default, we don't use a screen, which matches "1 0 {pop}"
+ transfer = nil, -- by default, we don't have a transfer function, which matches "{}"
+ flatness = 0,
+ miterlimit = 10,
+ dashpattern = { },
+ dashoffset = 0,
+ }
+ end
+end
+
+local function copy_gsstate()
+ local old = gsstate
+ local position = old.position
+ local matrix = old.matrix
+ local color = old.color
+ local rgb = color.rgb
+ local cmyk = color.cmyk
+ local hsb = color.hsb
+ return {
+ matrix = { matrix[1], matrix[2], matrix[3], matrix[4], matrix[5], matrix[6] },
+ color = {
+ type = color.type,
+ gray = color.gray,
+ hsb = { hsb[1], hsb[2], hsb[3] },
+ rgb = { rgb[1], rgb[2], rgb[3] },
+ cmyk = { cmyk[1], cmyk[2], cmyk[3], cmyk[4] },
+ },
+ position = { position[1], position[2] },
+ path = { unpack (old.path) },
+ clip = { unpack (old.clip) },
+ font = old.font,
+ linewidth = old.linewidth,
+ linecap = old.linecap,
+ linejoin = old.linejoin,
+ screen = old.screen,
+ transfer = nil,
+ flatness = old.flatness,
+ miterlimit = old.miterlimit,
+ dashpattern = { },
+ dashoffset = 0,
+ }
+end
+
+-- gsstack entries are of the form
+-- [1] "[save|gsave]"
+-- [2] {gsstate}
+
+local gsstack
+local gsstackptr
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ gsstack = nil
+ gsstackptr = nil
+ else
+ gsstack = { }
+ gsstackptr = 0
+ end
+end
+
+local function push_gsstack(v)
+ gsstackptr = gsstackptr + 1
+ gsstack[gsstackptr] = v
+end
+
+local function pop_gsstack()
+ if gsstackptr > 0 then
+ local v = gsstack[gsstackptr]
+ gsstackptr = gsstackptr - 1
+ return v
+ end
+end
+
+-- Currentpage
+
+local currentpage
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ currentpage = nil
+ else
+ currentpage = { }
+ end
+end
+
+-- Errordict
+
+-- The standard errordict entry. The rest of these dictionaries will be filled
+-- in the new() function.
+
+local errordict
+local dicterror
+
+-- find an error handler
+
+local function lookup_error(name)
+ local dict = get_VM(errordict).dict
+ return dict and dict[name]
+end
+
+-- error handling and reporting
+
+local report = logs.reporter("escrito")
+
+local function ps_error(a)
+ -- can have print hook
+ return false, a
+end
+
+-- Most entries in systemdict are operators, and the operators each have their own
+-- implementation function. These functions are grouped by category cf. the summary
+-- in the Adobe PostScript reference manual, the creation of the systemdict entries
+-- is alphabetical.
+--
+-- In the summary at the start of the operator sections, the first character means:
+--
+-- "-" => todo
+-- "+" => done
+-- "*" => partial
+-- "^" => see elsewhere
+
+local operators = { }
+
+-- Operand stack manipulation operators
+--
+-- +pop +exch +dup +copy +index +roll +clear +count +mark +cleartomark +counttomark
+
+function operators.pop()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ return true
+end
+
+function operators.exch()
+ if opstackptr < 2 then
+ return ps_error('stackunderflow')
+ end
+ local prv = opstackptr-1
+ opstack[opstackptr], opstack[prv] = opstack[prv], opstack[opstackptr]
+ return true
+end
+
+function operators.dup()
+ if opstackptr < 1 then
+ return ps_error('stackunderflow')
+ end
+ local nxt = opstackptr+1
+ opstack[nxt] = opstack[opstackptr]
+ opstackptr = nxt
+ return true
+end
+
+function operators.copy()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'integer' then
+ local va = a[4]
+ if va < 0 then
+ return ps_error('typecheck')
+ end
+ local thestack = opstackptr
+ if va > thestack then
+ return ps_error('stackunderflow')
+ end
+ -- use for loop
+ local n = thestack - va + 1
+ while n <= thestack do
+ local b = opstack[n]
+ local tb = b[1]
+ if tb == 'array' or tb == 'string' or tb == 'dict' or tb == 'font' then
+ b = { tb, b[2], b[3], add_VM(get_VM(b[4])), b[5], b[6], b[7] }
+ end
+ push_opstack(b)
+ n = n + 1
+ end
+ elseif ta == 'dict' then
+ local b = a
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'dict' then
+ return ps_error('typecheck')
+ end
+ local thedict = get_VM(b[4])
+ local tobecopied = get_VM(a[4])
+ if thedict.maxsize < tobecopied.size then
+ return ps_error('rangecheck')
+ end
+ if thedict.size ~= 0 then
+ return ps_error('typecheck')
+ end
+ local access = thedict.access
+ if access == 'read-only' or access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local dict = { }
+ for k, v in next, tobecopied.dict do
+ dict[k] = v -- fixed, was thedict[a], must be thedict.dict
+ end
+ thedict.access = tobecopied.access
+ thedict.size = tobecopied.size
+ thedict.dict = dict
+ b = { b[1], b[2], b[3], add_VM(thedict) }
+ push_opstack(b)
+ elseif ta == 'array' then
+ local b = a
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if b[6] < a[6] then
+ return ps_error('rangecheck')
+ end
+ local access = b[2]
+ if access == 'read-only' or access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local array = { }
+ local thearray = get_VM(b[4])
+ local tobecopied = get_VM(a[4])
+ for k, v in next, tobecopied do
+ array[k] = v
+ end
+ b = { b[1], b[2], b[3], add_VM(array), a[5], a[6], a[7] } -- fixed, was thearray
+ push_opstack(b)
+ elseif ta == 'string' then
+ local b = a
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if b[6] < a[6] then
+ return ps_error('rangecheck')
+ end
+ local access = b[2]
+ if access == 'read-only' or access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local thestring = get_VM(b[4])
+ local repl = get_VM(a[4])
+ VM[b[4]] = repl .. sub(thestring,#repl+1,-1)
+ b = { b[1], b[2], b[3], add_VM(repl), a[5], b[6] }
+ push_opstack(b)
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.index()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not ta == 'integer' then
+ return ps_error('typecheck')
+ end
+ local n = a[4]
+ if n < 0 then
+ return ps_error('rangecheck')
+ end
+ if n >= opstackptr then
+ return ps_error('stackunderflow')
+ end
+ push_opstack(opstack[opstackptr-n])
+ return true
+end
+
+function operators.roll()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if a[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local stackcount = a[4]
+ if stackcount < 0 then
+ return ps_error('rangecheck')
+ end
+ if stackcount > opstackptr then
+ return ps_error('stackunderflow')
+ end
+ local rollcount = b[4]
+ if rollcount == 0 then
+ return true
+ end
+ if rollcount > 0 then
+ -- can be simplified
+ while rollcount > 0 do
+ local oldtop = opstack[opstackptr]
+ local n = 0
+ while n < stackcount do
+ opstack[opstackptr-n] = opstack[opstackptr-n-1]
+ n = n + 1
+ end
+ opstack[opstackptr-(stackcount-1)] = oldtop
+ rollcount = rollcount - 1
+ end
+ else
+ -- can be simplified
+ while rollcount < 0 do
+ local oldbot = opstack[opstackptr-stackcount+1]
+ local n = stackcount - 1
+ while n > 0 do
+ opstack[opstackptr-n] = opstack[opstackptr-n+1]
+ n = n - 1
+ end
+ opstack[opstackptr] = oldbot
+ rollcount = rollcount + 1
+ end
+ end
+ return true
+end
+
+function operators.clear()
+ opstack = { } -- or just keep it
+ opstackptr = 0
+ return true
+end
+
+function operators.count()
+ push_opstack { 'integer', 'unlimited', 'literal', opstackptr }
+ return true
+end
+
+function operators.mark()
+ push_opstack { 'mark', 'unlimited', 'literal', null }
+end
+
+operators.beginarray = operators.mark
+
+function operators.cleartomark()
+ while opstackptr > 0 do
+ local val = pop_opstack()
+ if not val then
+ return ps_error('unmatchedmark')
+ end
+ if val[1] == 'mark' then
+ return true
+ end
+ end
+ return ps_error('unmatchedmark')
+end
+
+function operators.counttomark()
+ local v = 0
+ for n=opstackptr,1,-1 do
+ if opstack[n][1] == 'mark' then
+ push_opstack { 'integer', 'unlimited', 'literal', v }
+ return true
+ end
+ v = v + 1
+ end
+ return ps_error('unmatchedmark')
+end
+
+-- Arithmetic and math operators
+--
+-- +add +div +idiv +mod +mul +sub +abs +neg +ceiling +floor +round +truncate +sqrt +atan +cos
+-- +sin +exp +ln +log +rand +srand +rrand
+
+function operators.add()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = a[4] + b[4]
+ push_opstack {
+ (ta == 'real' or tb == 'real' or c > MAX_INT) and "real" or "integer",
+ 'unlimited', 'literal', c
+ }
+ return true
+end
+
+function operators.sub()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = a[4] - b[4]
+ push_opstack {
+ (ta == 'real' or tb == 'real' or c > MAX_INT) and "real" or "integer",
+ 'unlimited', 'literal', c
+ }
+ return true
+end
+
+function operators.div()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if vb == 0 then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'real', 'unlimited', 'literal', va / vb }
+ return true
+end
+
+function operators.idiv()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if tb ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if ta ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if vb == 0 then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', floor(va / vb) }
+ return true
+end
+
+function operators.mod()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if tb ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if ta ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if vb == 0 then
+ return ps_error('undefinedresult')
+ end
+ local neg = false
+ local v
+ if va < 0 then
+ v = -va
+ neg = true
+ else
+ v = va
+ end
+ local c = v % abs(vb)
+ if neg then
+ c = -c
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.mul()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = a[4] * b[4]
+ push_opstack {
+ (ta == 'real' or tb == 'real' or abs(c) > MAX_INT) and 'real' or 'integer',
+ 'unlimited', 'literal', c
+ }
+ return true
+end
+
+function operators.abs()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ local c = abs(v)
+ push_opstack {
+ (ta == 'real' or v == -(MAX_INT+1)) and 'real' or 'integer', -- hm, v or c
+ 'unlimited', 'literal', c
+ }
+ return true
+end
+
+function operators.neg()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ push_opstack {
+ (ta == 'real' or v == -(MAX_INT+1)) and 'real' or 'integer',
+ 'unlimited', 'literal', -v
+ }
+ return true
+end
+
+function operators.ceiling()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = ceil(a[4])
+ push_opstack { ta, 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.floor()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = floor(a[4])
+ push_opstack { ta, 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.round()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = floor(a[4]+0.5)
+ push_opstack { ta, 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.truncate()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ local c =v < 0 and -floor(-v) or floor(v)
+ push_opstack { ta, 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.sqrt()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ if v < 0 then
+ return ps_error('rangecheck')
+ end
+ local c = sqrt(v)
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.atan()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if va == 0 and vb == 0 then
+ return ps_error('undefinedresult')
+ end
+ local c = deg(atan2(rad(va),rad(vb)))
+ if c < 0 then
+ c = c + 360
+ end
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.sin()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = sin(rad(a[4]))
+ -- this is because double calculation introduces a small error
+ if abs(c) < 1.0e-16 then
+ c = 0
+ end
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.cos()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local c = cos(rad(a[4]))
+ -- this is because double calculation introduces a small error
+ if abs(c) < 1.0e-16 then
+ c = 0
+ end
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.exp()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if va < 0 and floor(vb) ~= vb then
+ return ps_error('undefinedresult')
+ end
+ local c = pow(va,vb)
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.ln()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ if v <= 0 then
+ return ps_error('undefinedresult')
+ end
+ local c = log(v)
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.log()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = a[4]
+ if v <= 0 then
+ return ps_error('undefinedresult')
+ end
+ local c = log10(v)
+ push_opstack { 'real', 'unlimited', 'literal', c }
+ return true
+end
+
+escrito.randomseed = os.time()
+
+-- this interval is one off, but that'll do
+
+function operators.rand()
+ local c = random(MAX_INT) - 1
+ push_opstack { 'integer', 'unlimited', 'literal', c }
+ return true
+end
+
+function operators.srand()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ escrito.randomseed = a[4]
+ setranseed(escrito.randomseed)
+ return true
+end
+
+function operators.rrand()
+ push_opstack { 'integer', 'unlimited', 'literal', escrito.randomseed }
+ return true
+end
+
+-- Array operators
+--
+-- +array ^[ +] +length +get +put +getinterval +putinterval +aload +astore ^copy +forall
+
+function operators.array()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local t = a[1]
+ local v = a[4]
+ if t ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if v < 0 then
+ return ps_error('rangecheck')
+ end
+ local array = { }
+ for i=1,v do
+ array[n] = { 'null', 'unlimited', 'literal', true } -- todo: share this one
+ end
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(array), 0, v, 'd'}
+end
+
+function operators.endarray()
+ local n = opstackptr
+ while n > 0 do
+ if opstack[n][1] == 'mark' then
+ break
+ end
+ n = n - 1
+ end
+ if n == 0 then
+ return ps_error('unmatchedmark')
+ end
+ local top = opstackptr
+ local i = opstackptr - n
+ local array = { }
+ while i > 0 do
+ array[i] = pop_opstack()
+ i = i - 1
+ end
+ pop_opstack() -- pop the mark
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(array), #array, #array, 'd' }
+end
+
+function operators.length()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local access = a[2]
+ if access == "noaccess" or access == "executeonly" then
+ return ps_error('invalidaccess')
+ end
+ local ta = a[1]
+ local va = a[4]
+ if ta == "dict" or ta == "font" then
+ va = get_VM(va).size
+ elseif ta == "array" or ta == "string" then
+ va = get_VM(va)
+ va = #va
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', va }
+ return true
+end
+
+function operators.get()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local access = a[2]
+ if access == "noaccess" or access == "execute-only" then
+ return ps_error('invalidaccess')
+ end
+ local ta = a[1]
+ local va = a[4]
+ if ta == "dict" then
+ local dict = get_VM(va)
+ local key = b
+ local tb = b[1]
+ local vb = b[4]
+ if tb == "string" or tb == "name" then
+ key = get_VM(vb)
+ end
+ local ddk = dict.dict[key]
+ if ddk then
+ push_opstack(ddk)
+ else
+ return ps_error('undefined')
+ end
+ elseif ta == "array" then
+ local tb = b[1]
+ local vb = b[4]
+ if tb ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if vb < 0 or vb >= a[6] then
+ return ps_error('rangecheck')
+ end
+ local array = get_VM(va)
+ local index = vb + 1
+ push_opstack(array[index])
+ elseif ta == "string" then
+ local tb = b[1]
+ local vb = b[4]
+ if tb ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if vb < 0 or vb >= a[6] then
+ return ps_error('rangecheck')
+ end
+ local thestring = get_VM(va)
+ local index = vb + 1
+ local c = sub(thestring,index,index)
+ push_opstack { 'integer', 'unlimited', 'literal', byte(c) }
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.put()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == "dict" then
+ local dict = get_VM(a[4])
+ if dict.access ~= 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ local key = b
+ local bt = b[1]
+ if bt == "string" or bt == "name" then
+ key = get_VM(b[4])
+ end
+ local dd = dict.dict
+ local ds = dict.size
+ local ddk = dd[key]
+ if not ddk and (ds == dict.maxsize) then
+ return ps_error('dictfull')
+ end
+ if c[1] == 'array' then
+ c[7] = 'i'
+ end
+ if not ddk then
+ dict.size = ds + 1
+ end
+ dd[key] = c
+ elseif ta == "array" then
+ if a[2] ~= 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ if b[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local va, vb = a[4], b[4]
+ if vb < 0 or vb >= a[6] then
+ return ps_error('rangecheck')
+ end
+ local vm = VM[va]
+ local vi = bv + 1
+ if vm[vi][1] == 'null' then
+ a[5] = a[5] + 1
+ end
+ vm[vi] = c
+ elseif ta == "string" then
+ if a[2] ~= 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ if b[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if c[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local va, vb, vc = a[4], b[4], c[4]
+ if vb < 0 or vb >= a[6] then
+ return ps_error('rangecheck')
+ end
+ if vc < 0 or vc > 255 then
+ return ps_error('rangecheck')
+ end
+ local thestring = get_VM(va)
+ VM[va] = sub(thestring,1,vb) .. char(vc) .. sub(thestring,vb+2)
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.getinterval()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc = a[1], b[1], c[1]
+ local aa, ab, ac = a[2], b[2], c[2]
+ local va, vb, vc = a[4], b[4], c[4]
+ if ta ~= "array" and ta ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if tb ~= 'integer' or tc ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if aa == "execute-only" or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ if vb < 0 or vc < 0 or vb + vc >= a[6] then
+ return ps_error('rangecheck')
+ end
+ -- vb : start
+ -- vc : number
+ if ta == 'array' then
+ local array = get_VM(va)
+ local subarray = { }
+ local index = 1
+ while index <= vc do
+ subarray[index] = array[index+vb]
+ index = index + 1
+ end
+ push_opstack { 'array', aa, a[3], add_VM(subarray), vc, vc, 'd' }
+ else
+ local thestring = get_VM(va)
+ local newstring = sub(thestring,vb+1,vb+vc)
+ push_opstack { 'string', aa, a[3], add_VM(newstring), vc, vc }
+ end
+ return true
+end
+
+function operators.putinterval()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc = a[1], b[1], c[1]
+ local aa, ab, ac = a[2], b[2], c[2]
+ local va, vb, vc = a[4], b[4], c[4]
+ if ta ~= "array" and ta ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if tc ~= "array" and tc ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if ta ~= tc then
+ return ps_error('typecheck')
+ end
+ if aa ~= "unlimited" then
+ return ps_error('invalidaccess')
+ end
+ if tb ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if vb < 0 or vb + c[6] >= a[6] then
+ return ps_error('rangecheck')
+ end
+ if ta == 'array' then
+ local newarr = get_VM(vc)
+ local oldarr = get_VM(va)
+ local index = 1
+ local lastindex = c[6]
+ local step = a[5]
+ while index <= lastindex do
+ if oldarr[vb+index][1] == 'null' then
+ a[5] = a[5] + 1 -- needs checking, a[5] not used
+ -- step = step + 1
+ end
+ oldarr[vb+index] = newarr[index]
+ index = index + 1
+ end
+ else
+ local thestring = get_VM(va)
+ VM[va] = sub(thestring,1,vb) .. get_VM(vc) .. sub(thestring,vb+c[6]+1)
+ end
+ return true
+end
+
+function operators.aload()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ if ta ~= "array" then
+ return ps_error('typecheck')
+ end
+ if aa == "execute-only" or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local array = get_VM(va)
+ for i=1,#array do
+ push_opstack(array[i])
+ end
+ push_opstack(a)
+ return true
+end
+
+function operators.astore()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ if ta ~= "array" then
+ return ps_error('typecheck')
+ end
+ if aa == "execute-only" or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local array = get_VM(va)
+ local count = a[6]
+ for i=1,count do
+ local v = pop_opstack()
+ if not v then
+ return ps_error('stackunderflow')
+ end
+ array[i] = v
+ end
+ a[5] = a[5] + count
+ push_opstack(a)
+ return true
+end
+
+function operators.forall()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ local tb, ab, vb = b[1], b[2], b[4]
+ if not tb == "array" and b[3] == 'executable' then
+ return ps_error('typecheck')
+ end
+ if tb == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ if not (ta == "array" or ta == 'dict' or ta == 'string' or ta == "font") then
+ return ps_error('typecheck')
+ end
+ if aa == "execute-only" or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ push_execstack { '.exit', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ if ta == 'array' then
+ if a[6] == 0 then
+ return true
+ end
+ b[7] = 'i'
+ local thearray = get_VM(va)
+ for i=1,#thearray do
+ if stopped then
+ stopped = false
+ return false
+ end
+ push_opstack(thearray[i])
+ b[5] = 1
+ push_execstack(b)
+ while curstack <= execstackptr do
+ do_exec()
+ end
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and antry[4] == true then
+ pop_execstack()
+ return true
+ end
+ elseif ta == 'dict' or ta == 'font' then
+ local thedict = get_VM(va)
+ if thedict.size == 0 then
+ return true
+ end
+ b[7] = 'i'
+ local thedict = get_VM(va)
+ for k, v in next, thedict.dict do
+ if stopped then
+ stopped = false
+ return false
+ end
+ if type(k) == "string" then
+ push_opstack { 'name', 'unlimited', 'literal', add_VM(k) }
+ else
+ push_opstack(k)
+ end
+ push_opstack(v)
+ b[5] = 1
+ push_execstack(b)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and antry[4] == true then
+ pop_execstack()
+ return true
+ end
+ end
+ else -- string
+ if a[6] == 0 then
+ return true
+ end
+ b[7] = 'i'
+ local thestring = get_VM(va)
+ for v in gmatch(thestring,".") do -- we can use string.bytes
+ if stopped then
+ stopped = false
+ return false
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', byte(v) }
+ b[5] = 1
+ push_execstack(b)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and antry[4] == true then
+ pop_execstack()
+ return true;
+ end
+ end
+ end
+ return true
+end
+
+-- Dictionary operators
+--
+-- +dict ^length +maxlength +begin +end +def +load +store ^get ^put +known +where ^copy
+-- ^forall ^errordict ^systemdict ^userdict +currentdict +countdictstack +dictstack
+
+function operators.dict()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not a[1] == 'integer' then
+ return ps_error('typecheck')
+ end
+ local s = a[4]
+ if s < 0 then
+ return ps_error('rangecheck')
+ end
+ if s == 0 then -- level 2 feature
+ s = MAX_INT
+ end
+ push_opstack {
+ 'dict',
+ 'unlimited',
+ 'literal',
+ add_VM {
+ access = 'unlimited',
+ size = 0,
+ maxsize = s,
+ dict = { },
+ }
+ }
+end
+
+function operators.maxlength()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ if ta ~= 'dict' then
+ return ps_error('typecheck')
+ end
+ if aa == 'execute-only' or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local thedict = get_VM(va)
+ push_opstack { 'integer', 'unlimited', 'literal', thedict.maxsize }
+end
+
+function operators.begin()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'dict' then
+ return ps_error('typecheck')
+ end
+ dictstackptr = dictstackptr + 1
+ dictstack[dictstackptr] = a[4]
+end
+
+operators["end"] = function()
+ if dictstackptr < 3 then
+ return ps_error('dictstackunderflow')
+ end
+ dictstack[dictstackptr] = nil
+ dictstackptr = dictstackptr - 1
+end
+
+function operators.def()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'name' and a[3] == 'literal') then
+ return ps_error('typecheck')
+ end
+ if b[1] == 'array' then
+ b[7] = 'i'
+ end
+ local thedict = get_VM(dictstack[dictstackptr])
+ if not thedict.dict[get_VM(a[4])] then
+ if thedict.size == thedict.maxsize then
+ -- return ps_error('dictfull') -- level 1 only
+ end
+ thedict.size = thedict.size + 1
+ end
+ thedict.dict[get_VM(a[4])] = b
+ return true
+end
+
+-- unclear: the book says this operator can return typecheck
+
+function operators.load()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local aa = a[2]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local v = lookup(get_VM(a[4]))
+ if not v then
+ return ps_error('undefined')
+ end
+ push_opstack(v)
+end
+
+function operators.store()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'name' and a[3] == 'literal') then
+ return ps_error('typecheck')
+ end
+ if b[7] == 'array' then
+ b[7] = 'i'
+ end
+ local val, dictloc = lookup(a[4])
+ if val then
+ local thedict = get_VM(dictstack[dictloc])
+ if thedict.access == 'execute-only' or thedict.access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ thedict.dict[a[4]] = b
+ else
+ local thedict = get_VM(dictstack[dictstackptr])
+ local access = thedict.access
+ local size = thedict.size
+ if access == 'execute-only' or access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ if size == thedict.maxsize then
+ return ps_error('dictfull')
+ end
+ thedict.size = size + 1
+ thedict.dict[a[4]] = b
+ end
+ return true
+end
+
+function operators.known()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ local tb, vb = b[1], b[4]
+ if ta ~= 'dict' then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'name' or tb == 'operator') then
+ return ps_error('typecheck')
+ end
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local thedict = get_VM(va)
+ push_opstack {'boolean', 'unlimited', 'literal', thedict.dict[vb] and true or false }
+ return true
+end
+
+function operators.where()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'name' and a[3] == 'literal') then
+ return ps_error('typecheck')
+ end
+ local val, dictloc = lookup(get_VM(a[4]))
+ local thedict = dictloc and get_VM(dictstack[dictloc]) -- fixed
+ if val then
+ if thedict.access == 'execute-only' or thedict.access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ push_opstack {'dict', 'unlimited', 'literal', dictstack[dictloc]}
+ push_opstack {'boolean', 'unlimited', 'literal', true}
+ else
+ push_opstack {'boolean', 'unlimited', 'literal', false}
+ end
+ return true
+end
+
+function operators.currentdict()
+ push_opstack { 'dict', 'unlimited', 'literal', dictstack[dictstackptr] }
+ return true
+end
+
+function operators.countdictstack()
+ push_opstack { 'integer', 'unlimited', 'literal', dictstackptr }
+ return true
+end
+
+function operators.dictstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not a[1] == 'array' then
+ return ps_error('typecheck')
+ end
+ if not a[2] == 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ if a[6] < dictstackptr then
+ return ps_error('rangecheck')
+ end
+ local thearray = get_VM(a[4])
+ local subarray = { }
+ for i=1,dictstackptr do
+ thearray[n] = { 'dict', 'unlimited', 'literal', dictstack[i] }
+ subarray[n] = thearray[i]
+ end
+ a[5] = a[5] + dictstackptr
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(subarray), dictstackptr, dictstackptr, '' }
+ return true
+end
+
+-- String operators
+--
+-- +string ^length ^get ^put ^getinterval ^putinterval ^copy ^forall +anchorsearch +search
+-- +token
+
+function operators.string()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, va = a[1], a[4]
+ if ta ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if va < 0 then
+ return ps_error('rangecheck')
+ end
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(''), 1, va }
+end
+
+function operators.anchorsearch()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ local tb, ab, vb = b[1], b[2], b[4]
+ if not ta ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if tb ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local thestring = get_VM(va)
+ local thesearch = get_VM(vb)
+ local prefix = sub(thestring,1,#thesearch)
+ if prefix == thesearch then
+ if aa == 'read-only' then
+ return ps_error('invalidaccess')
+ end
+ local post = sub(thestring,#thesearch+1)
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(post), 1, #post }
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(prefix), 1, #prefix }
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ else
+ push_opstack(a)
+ push_opstack { 'boolean', 'unlimited', 'literal', false }
+ end
+ return true
+end
+
+function operators.search()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ local tb, ab, vb = b[1], b[2], b[4]
+ if not ta ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if tb ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local thestring = get_VM(a[4])
+ local thesearch = get_VM(b[4])
+ -- hm, can't this be done easier?
+ local n = 1
+ local match
+ while n + #thesearch-1 <= #thestring do
+ match = sub(thestring,n,n+#thesearch-1)
+ if match == thesearch then
+ break
+ end
+ n = n + 1
+ end
+ if match == thesearch then
+ if aa == 'read-only' then
+ return ps_error('invalidaccess')
+ end
+ local prefix = sub(thestring,1,n-1)
+ local post = sub(thestring,#thesearch+n)
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(post), 1, #post }
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(thesearch), 1, #thesearch }
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(prefix), 1, #prefix }
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ else
+ push_opstack(a)
+ push_opstack { 'boolean', 'unlimited', 'literal', false }
+ end
+ return true
+end
+
+function operators.token()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa, va = a[1], a[2], a[4]
+ if not (ta == 'string' or ta == 'file') then
+ return ps_error('typecheck')
+ end
+ if aa ~= 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ -- some fiddling with the tokenization process is needed
+ if ta == 'string' then
+ local top = execstackptr
+ push_execstack { '.token', 'unlimited', 'literal', false }
+ push_execstack { a[1], a[2], 'executable', va, 1, a[6] }
+ local v, err = next_object()
+ if not v then
+ pop_execstack()
+ pop_execstack()
+ push_opstack { 'boolean', 'unlimited', 'literal', false }
+ else
+ local q = pop_execstack()
+ if execstack[execstackptr][1] == '.token' then
+ pop_execstack()
+ end
+ local tq, vq = q[1], q[4]
+ if tq == 'string' and vq ~= va then
+ push_execstack(q)
+ end
+ local thestring, substring
+ if vq ~= va then
+ thestring = ""
+ substring = ""
+ else
+ thestring = get_VM(vq)
+ substring = sub(thestring,q[5] or 0)
+ end
+ push_opstack { ta, aa, a[3], add_VM(substring), 1, #substring}
+ push_opstack(v)
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ end
+ else -- file
+ if a[7] ~= 'r' then
+ return ps_error('invalidaccess')
+ end
+ push_execstack { '.token', 'unlimited', 'literal', false }
+ push_execstack { 'file', 'unlimited', 'executable', va, a[5], a[6], a[7], a[8] }
+ local v, err = next_object()
+ if not v then
+ pop_execstack()
+ pop_execstack()
+ push_opstack { 'boolean', 'unlimited', 'literal', false }
+ else
+ local q = pop_execstack() -- the file
+ a[5] = q[5]
+ if execstack[execstackptr][1] == '.token' then
+ pop_execstack()
+ end
+ push_opstack(v)
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ end
+ end
+ return true
+end
+
+-- Relational, boolean and bitwise operators
+--
+-- +eq +ne +ge +gt +le +lt +and +not +or +xor ^true ^false +bitshift
+
+local function both()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa = a[1], a[2]
+ local tb, ab = b[1], b[2]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if (ta == 'dict' and tb == 'dict') or (ta == 'array' and tb =='array') then
+ return true, a[4], b[4]
+ elseif ((ta == 'string' or ta == 'name') and (tb == 'string' or tb == 'name' )) then
+ local astr = get_VM(a[4])
+ local bstr = get_VM(b[4])
+ return true, astr, bstr
+ elseif ((ta == 'integer' or ta == 'real') and (tb == 'integer' or tb == 'real')) or (ta == tb) then
+ return true, a[4], b[4]
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.eq()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a == b }
+ return true
+ else
+ return a
+ end
+end
+
+function operators.ne()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a ~= b }
+ return true
+ else
+ return a
+ end
+end
+
+local function both()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local aa, ab = a[2], b[2]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local ta, tb = a[1], b[1]
+ local va, vb = a[4], b[4]
+ if (ta == 'real' or ta == 'integer') and (tb == 'real' or tb == 'integer') then
+ return true, va, vb
+ elseif ta == 'string' and tb == 'string' then
+ local va = get_VM(va)
+ local vb = get_VM(vb)
+ return true, va, vb
+ else
+ return ps_error('typecheck')
+ end
+end
+
+function operators.ge()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a >= b }
+ return true
+ else
+ return a
+ end
+end
+
+function operators.gt()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a > b }
+ return true
+ else
+ return a
+ end
+end
+
+function operators.le()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a <= b }
+ return true
+ else
+ return a
+ end
+end
+
+function operators.lt()
+ local ok, a, b = both()
+ if ok then
+ push_opstack { 'boolean', 'unlimited', 'literal', a < b }
+ return true
+ else
+ return a
+ end
+end
+
+local function both()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local aa, ab = a[2], b[2]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ local ta, tb = a[1], b[1]
+ local va, vb = a[4], b[4]
+ if ta == 'boolean' and tb == 'boolean' then
+ return ta, va, vb
+ elseif ta == 'integer' and tb == 'integer' then
+ return ta, va, vb
+ else
+ return ps_error('typecheck')
+ end
+end
+
+operators["and"]= function()
+ local ok, a, b = both()
+ if ok == 'boolean' then
+ push_opstack { 'boolean', 'unlimited', 'literal', a[1] and b[1] }
+ return true
+ elseif ok == 'integer' then
+ push_opstack { 'integer', 'unlimited', 'literal', bitand(a[1],b[1]) }
+ return true
+ else
+ return a
+ end
+end
+
+operators["or"] = function()
+ local ok, a, b = both()
+ if ok == 'boolean' then
+ push_opstack {'boolean', 'unlimited', 'literal', a[1] or b[1] }
+ return true
+ elseif ok == 'integer' then
+ push_opstack {'integer', 'unlimited', 'literal', bitor(a[1],b[1]) }
+ return true
+ else
+ return a
+ end
+end
+
+function operators.xor()
+ local ok, a, b = both()
+ if ok == 'boolean' then
+ push_opstack {'boolean', 'unlimited', 'literal', a[1] ~= b[1] }
+ return true
+ elseif ok == 'integer' then
+ push_opstack {'integer', 'unlimited', 'literal', bitxor(a[1],b[1]) }
+ return true
+ else
+ return a
+ end
+end
+
+operators["not"] = function()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local aa = a[2]
+ local ta = a[1]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ta == 'boolean' then
+ push_opstack { 'boolean', 'unlimited', 'literal', not a[4] }
+ elseif ta == 'integer' then
+ push_opstack { 'integer', 'unlimited', 'literal', -a[4] - 1 }
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.bitshift()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local aa, ab = a[2], b[2]
+ local ta, tb = a[1], b[1]
+ local va, vb = a[4], b[4]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if ab == 'noaccess' or ab == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ if not (ta == 'integer' and tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', bitrshift(va,vb < 0 and -vb or vb) }
+ return true
+end
+
+-- Control operators
+--
+-- +exec +if +ifelse +for +repeat +loop +exit +stop +stopped +countexecstack +execstack
+-- +quit +start
+
+function operators.exec()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] == 'array' then
+ a[7] = 'i'
+ a[5] = 1
+ end
+ push_execstack(a)
+ return true
+end
+
+operators["if"] = function()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'boolean' then
+ return ps_error('typecheck')
+ end
+ if b[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if a[4] == true then
+ b[7] = 'i'
+ b[5] = 1
+ push_execstack(b)
+ end
+ return true
+end
+
+function operators.ifelse()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'boolean' then
+ return ps_error('typecheck')
+ end
+ if b[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if c[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if a[4] == true then
+ b[5] = 1
+ b[7] = 'i'
+ push_execstack(b)
+ else
+ c[5] = 1
+ c[7] = 'i'
+ push_execstack(c)
+ end
+ return true
+end
+
+operators["for"] = function()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ local ta, tb, tc, td = a[1], b[1], c[1], d[1]
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (ta == 'integer' or ta == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'integer' or tb == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (tc == 'integer' or tc == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (td == 'array' and d[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ local initial = a[4]
+ local increment = b[4]
+ local limit = c[4]
+ if initial == limit then
+ return true
+ end
+ push_execstack { '.exit', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ local tokentype = (a[1] == 'real' or b[1] == 'real' or c[1] == 'real') and 'real' or 'integer'
+ d[7] = 'i'
+ local first, last
+ if increment >= 0 then
+ first, last = initial, limit
+ else
+ first, last = limit, limit
+ end
+ for control=first,last,increment do
+ if stopped then
+ stopped = false
+ return false
+ end
+ push_opstack { tokentype, 'unlimited', 'literal', control }
+ d[5] = 1
+ push_execstack(d)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and entry[4] == true then
+ pop_execstack()
+ return true;
+ end
+ end
+ return true
+end
+
+operators["repeat"] = function()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if a[4] < 0 then
+ return ps_error('rangecheck')
+ end
+ if not (b[1] == 'array' and b[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ local limit = a[4]
+ if limit == 0 then
+ return true
+ end
+ push_execstack { '.exit', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ b[7] = 'i'
+ local control = 0
+ while control < limit do
+ if stopped then
+ stopped = false
+ return false
+ end
+ b[5] = 1
+ push_execstack(b)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and entry[4] == true then
+ pop_execstack()
+ return true;
+ end
+ control = control + 1
+ end
+ return true
+end
+
+function operators.loop()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'array' and a[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ push_execstack { '.exit', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ a[7] = 'i'
+ while true do
+ if stopped then
+ stopped = false
+ return false
+ end
+ a[5] = 1
+ push_execstack(a)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ if execstackptr > 0 then
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and entry[4] == true then
+ pop_execstack()
+ return true
+ end
+ end
+ end
+ return true
+end
+
+function operators.exit()
+ local v = pop_execstack()
+ while v do
+ local tv = val[1]
+ if tv == '.exit' then
+ push_execstack { '.exit', 'unlimited', 'literal', true }
+ return true
+ elseif tv == '.stopped' or tv == '.run' then
+ push_execstack(v)
+ return ps_error('invalidexit')
+ end
+ v = pop_execstack()
+ end
+ report("exit without context, quitting")
+ push_execstack { 'operator', 'unlimited', 'executable', operators.quit, "quit" }
+ return true
+end
+
+function operators.stop()
+ local v = pop_execstack()
+ while v do
+ if val[1] == '.stopped' then
+ stopped = true
+ push_opstack { 'boolean', 'unlimited', 'executable', true }
+ return true
+ end
+ v = pop_execstack()
+ end
+ report("stop without context, quitting")
+ push_execstack { 'operator', 'unlimited', 'executable', operators.quit, "quit" }
+ return true
+end
+
+function operators.stopped()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ -- push a special token on the exec stack (handled by next_object):
+ push_execstack { '.stopped', 'unlimited', 'literal', false }
+ a[3] = 'executable'
+ if a[1] == 'array' then
+ a[7] = 'i'
+ a[5] = 1
+ end
+ push_execstack(a)
+ return true
+end
+
+function operators.countexecstack()
+ push_opstack { 'integer', 'unlimited', 'literal', execstackptr }
+ return true
+end
+
+function operators.execstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not a[1] == 'array' then
+ return ps_error('typecheck')
+ end
+ if not a[2] == 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ if a[6] < execstackptr then
+ return ps_error('rangecheck')
+ end
+ local thearray = get_VM(a[4])
+ local subarray = { }
+ for n=1,execstackptr do
+ -- thearray[n] = execstack[n]
+ -- subarray[n] = thearray[n]
+ local v = execstack[n]
+ thearray[n] = v
+ subarray[n] = v
+ a[5] = a[5] + 1
+ end
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(subarray), execstackptr, execstackptr, "" }
+ return true
+end
+
+-- clearing the execstack does the trick,
+-- todo: leave open files to be handled by the lua interpreter, for now
+
+function operators.quit()
+ while execstackptr >= 0 do -- todo: for loop / slot 0?
+ execstack[execstackptr] = nil
+ execstackptr = execstackptr - 1
+ end
+ return true
+end
+
+-- does nothing, for now
+
+function operators.start()
+ return true
+end
+
+-- Type, attribute and conversion operators
+--
+-- +type +cvlit +cvx +xcheck +executeonly +noaccess +readonly +rcheck +wcheck +cvi
+-- +cvn +cvr +cvrs +cvs
+
+function operators.type()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ push_opstack { "name", "unlimited", "executable", add_VM(a[1] .. "type") }
+ return true
+end
+
+function operators.cvlit() -- no need to push/pop
+ local a = get_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ a[3] = 'literal'
+ return true
+end
+
+function operators.cvx()
+ local a = get_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ a[3] = 'executable'
+ return true
+end
+
+function operators.xcheck()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ push_opstack { 'boolean', 'unlimited', 'literal', a[3] == 'executable' }
+ return true
+end
+
+function operators.executeonly()
+ local a = pop_opstack() -- get no push
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'string' or ta == 'file' or ta == 'array' then
+ if a[2] == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ a[2] = 'execute-only'
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack(a)
+ return true
+end
+
+function operators.noaccess()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'string' or ta == 'file' or ta == 'array' then
+ if a[2] == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ a[2] = 'noaccess'
+ elseif ta == "dict" then
+ local thedict = get_VM(a[4])
+ if thedict.access == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ thedict.access = 'noaccess'
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack(a)
+ return true
+end
+
+function operators.readonly()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'string' or ta == 'file' or ta == 'array' then
+ local aa = a[2]
+ if aa == 'noaccess' or aa == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ a[2] = 'read-only'
+ elseif ta == 'dict' then
+ local thedict = get_VM(a[4])
+ local access = thedict.access
+ if access == 'noaccess' or access == 'execute-only' then
+ return ps_error('invalidaccess')
+ end
+ thedict.access = 'read-only'
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack(a)
+ return true
+end
+
+function operators.rcheck()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ local aa
+ if ta == 'string' or ta == 'file' or ta == 'array' then
+ aa = a[2]
+ elseif ta == 'dict' then
+ aa = get_VM(a[4]).access
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack { 'boolean', 'unlimited', 'literal', aa == 'unlimited' or aa == 'read-only' }
+ return true
+end
+
+function operators.wcheck()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ local aa
+ if ta == 'string' or ta == 'file' or ta == 'array' then
+ aa = a[2]
+ elseif ta == 'dict' then
+ local thedict = get_VM(a[4])
+ aa = thedict.access
+ else
+ return ps_error('typecheck')
+ end
+ push_opstack { 'boolean', 'unlimited', 'literal', aa == 'unlimited' }
+ return true
+end
+
+function operators.cvi()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'string' then
+ push_opstack(a)
+ local ret, err = operators.token()
+ if not ret then
+ return ret, err
+ end
+ local b = pop_opstack()
+ if b[4] == false then
+ return ps_error('syntaxerror')
+ end
+ a = pop_opstack()
+ pop_opstack() -- get rid of the postmatch string remains
+ ta = a[1]
+ end
+ local aa = a[2]
+ if not (aa == 'unlimited' or aa == 'read-only') then
+ return ps_error('invalidaccess')
+ end
+ if ta == 'integer' then
+ push_opstack(a)
+ elseif ta == 'real' then
+ local va = a[4]
+ local c = va < 0 and -floor(-va) or floor(ava)
+ if abs(c) > MAX_INT then
+ return ps_error('rangecheck')
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', c }
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.cvn()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, aa = a[1], a[2]
+ local ta = a[1]
+ if ta ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if aa == 'execute-only' or aa == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ push_opstack { 'name', aa, a[3], add_VM(get_VM(a[4])) }
+ return true
+end
+
+function operators.cvr()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'string' then
+ push_opstack(a)
+ local ret, err = operators.token()
+ if not ret then
+ return ret, err
+ end
+ local b = pop_opstack()
+ if b[4] == false then
+ return ps_error('syntaxerror')
+ end
+ a = pop_opstack()
+ pop_opstack() -- get rid of the postmatch string remains
+ ta = a[1]
+ end
+ local aa = a[2]
+ if not (aa == 'unlimited' or aa == 'read-only') then
+ return ps_error('invalidaccess')
+ end
+ if ta == 'integer' then
+ push_opstack { 'real', 'unlimited', 'literal', a[4] }
+ elseif ta == 'real' then
+ push_opstack(a)
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+do
+
+ local byte0 = byte('0')
+ local byteA = byte('A') - 10
+
+ function operators.cvrs()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc = a[1], b[1], c[1]
+ if not (ta == 'integer' or ta == 'real') then
+ return ps_error('typecheck')
+ end
+ if not tb == 'integer' then
+ return ps_error('typecheck')
+ end
+ if not tc == 'string' then
+ return ps_error('typecheck')
+ end
+ if not c[2] == 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ local va, vb, vc = a[4], b[4], c[4]
+ if (vb < 2 or vb > 36) then
+ return ps_error('rangecheck')
+ end
+ if ta == 'real' then
+ push_opstack(a)
+ local ret, err = operators.cvi()
+ if ret then
+ return ret, err
+ end
+ a = pop_opstack()
+ end
+ -- todo: use an lpeg
+ local decimal = va
+ local str = { }
+ local n = 0
+ while decimal > 0 do
+ local digit = decimal % vb
+ n = n + 1
+ str[n] = digit < 10 and char(digit+byte0) or char(digit+byteA)
+ decimal = floor(decimal/vb)
+ end
+ if n > c[6] then
+ return ps_error('rangecheck')
+ end
+ str = concat(reverse(str))
+ local thestring = get_VM(vc)
+ VM[va] = str .. sub(thestring,n+1,-1)
+ push_opstack { c[1], c[2], c[3], add_VM(repl), n, n }
+ return true
+ end
+
+end
+
+function operators.cvs()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not 4 then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ local ab = b[2]
+ if not tb == 'string' then
+ return ps_error('typecheck')
+ end
+ if not ab == 'unlimited' then
+ return ps_error('invalidaccess')
+ end
+ local va, vb = a[4], b[4]
+ if ta == 'real' then
+ if floor(va) == va then
+ va = tostring(va) .. '.0'
+ else
+ va = tostring(va)
+ end
+ elseif ta == 'integer' then
+ va = tostring(va)
+ elseif ta == 'string' or ta == 'name' then
+ va = get_VM(va)
+ elseif ta == 'operator' then
+ va = a[5]
+ elseif ta == 'boolean' then
+ va = tostring(va)
+ else
+ va = "--nostringval--"
+ end
+ local n = #va
+ if n > b[6] then
+ return ps_error('rangecheck')
+ end
+ local thestring = get_VM(vb)
+ VM[vb] = va .. sub(thestring,n+1,-1)
+ push_opstack { tb, ab, b[3], add_VM(va), n, n }
+ return true
+end
+
+-- File operators
+--
+-- +file +closefile +read +write +writestring +readhexstring +writehexstring +readline ^token
+-- +bytesavailable +flush +flushfile +resetfile +status +run +currentfile +print ^= ^stack
+-- +== ^pstack ^prompt +echo
+
+function operators.file()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if a[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ local fmode = get_VM(b[4])
+ local fname = get_VM(a[4])
+ -- only accept (r), (w) and (a)
+ if fmode ~= "r" and fmode ~= "w" and fmode ~= "a" then
+ return ps_error('typecheck')
+ end
+ if fname == "%stdin" then
+ -- can only read from stdin
+ if fmode ~= "r" then
+ return ps_error('invalidfileaccess')
+ end
+ push_opstack { 'file', 'unlimited', 'literal', 0, 0, 0, fmode, io.stdin }
+ elseif fname == "%stdout" then
+ -- can't read from stdout i.e. can only append, in fact, but lets ignore that
+ if fmode == "r" then
+ return ps_error('invalidfileaccess')
+ end
+ push_opstack { 'file', 'unlimited', 'literal', 0, 0, 0, fmode, io.stdout }
+ elseif fname == "%stderr" then
+ -- cant read from stderr i.e. can only append, in fact, but lets ignore that
+ if fmode == "r" then
+ return ps_error('invalidfileaccess')
+ end
+ push_opstack { 'file', 'unlimited', 'literal', 0, 0, 0, fmode, io.stderr }
+ elseif fname == "%statementedit" or fname == "%lineedit"then
+ return ps_error('invalidfileaccess')
+ else
+ -- so it is a normal file
+ local myfile, error = io.open(fname,fmode)
+ if not myfile then
+ return ps_error('undefinedfilename')
+ end
+ if fmode == 'r' then
+ l = myfile:read("*a")
+ if not l then
+ return ps_error('invalidfileaccess')
+ end
+ -- myfile:close() -- do not close here, easier later on
+ push_opstack { 'file', 'unlimited', 'literal', add_VM(l), 1, #l, fmode, myfile}
+ else
+ push_opstack { 'file', 'unlimited', 'literal', 0, 0, 0, fmode, myfile}
+ end
+ end
+ return true
+end
+
+function operators.read()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] ~= 'r' then
+ return ps_error('invalidaccess')
+ end
+ local b
+ local v = a[4]
+ local f = a[8]
+ if v > 0 then
+ local thestr = get_VM(v)
+ local n = a[5]
+ if n < a[6] then
+ byte = sub(thestr,n,n+1)
+ -- a[5] = n + 1
+ end
+ else -- %stdin
+ b = f:read(1)
+ end
+ if b then
+ push_opstack { 'integer', 'unlimited', 'literal', byte(b) }
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ else
+ f:close()
+ push_opstack { 'boolean', 'unlimited', 'literal', false}
+ end
+ return true
+end
+
+function operators.write()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] == 'r' then
+ return ps_error('ioerror')
+ end
+ a[8]:write(char(b[4] % 256))
+ return true
+end
+
+function operators.writestring()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] == 'r' then
+ return ps_error('ioerror')
+ end
+ a[8]:write(get_VM(b[4]))
+ return true
+end
+
+function operators.writehexstring()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] == 'r' then
+ return ps_error('ioerror')
+ end
+ local f = a[8]
+ local s = get_VM(b[4])
+ for w in gmatch(s,".") do
+ f:write(format("%x",byte(w))) -- we have a table for that somewhere
+ end
+ return true
+end
+
+do
+
+ local function get_string_line(a)
+ local str = get_VM(a[4])
+ local start = a[5]
+ local theend = a[6]
+ if start == theend then
+ return nil
+ end
+ str = match(str,"[\n\r]*([^\n\r]*)",start)
+ a[5] = a[5] + #str + 1 -- ?
+ return str
+ end
+
+ local function get_hexstring_line (a,b)
+ local thestring = get_VM(a[4])
+ local start, theend = a[5], a[6]
+ if start == theend then
+ return nil
+ end
+ local prefix, result, n = nil, { }, 0
+ local nmax = b[6]
+ while start < theend do
+ local b = sub(thestring,start,start)
+ if not b then
+ break
+ end
+ local hexbyte = tonumber(b,16)
+ if not hexbyte then
+ -- skip
+ elseif prefix then
+ n = n + 1
+ result[n] = char(prefix*16+hexbyte)
+ if n == nmax then
+ break
+ else
+ prefix = nil
+ end
+ else
+ prefix = hexbyte
+ end
+ start = start + 1
+ end
+ a[5] = start + 1 -- ?
+ return concat(result)
+ end
+
+ function operators.readline()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] ~= 'r' then
+ return ps_error('invalidaccess')
+ end
+ local va = a[4]
+ if va > 0 then
+ va = get_string_line(a)
+ else
+ va = a[8]:read('*l')
+ end
+ if not va then
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(''), 0, 0 }
+ push_opstack { 'boolean', 'unlimited', 'literal', false }
+ else
+ local n = #va
+ if n > b[6] then
+ return ps_error('rangecheck')
+ end
+ local thestring = get_VM(b[4])
+ VM[b[4]] = va .. sub(thestring,#va+1, -1)
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(va), n, n }
+ push_opstack { 'boolean', 'unlimited', 'literal', true }
+ end
+ return true
+ end
+
+ function operators.readhexstring()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if not (ta == 'string' or ta == 'file') then
+ return ps_error('typecheck')
+ end
+ local thefile = a[8]
+ local va = a[4]
+ if va > 0 then
+ va = get_hexstring_line (a,b)
+ else
+ local prefix, result, n = nil, { }, 0
+ -- todo: read #va bytes and lpeg
+ while true do
+ local b = thefile:read(1)
+ if not b then
+ break
+ end
+ local hexbyte = tonumber(b,16)
+ local nmax = b[6]
+ if not hexbyte then
+ -- skip
+ elseif prefix then
+ n = n + 1
+ result[n] = char(prefix*16+hexbyte)
+ if n == nmax then
+ break
+ else
+ prefix = nil
+ end
+ else
+ prefix = hexbyte
+ end
+ end
+ va = concat(result)
+ end
+ local thestring = get_VM(b[4])
+ local n = #va
+ VM[b[4]] = repl .. sub(thestring,n+1,-1)
+ push_opstack { b[1], b[2], b[3], add_VM(va), n, n }
+ push_opstack { 'boolean', 'unlimited', 'literal', n == b[6] }
+ return true
+ end
+
+end
+
+function operators.flush()
+ io.flush()
+ return true
+end
+
+function operators.bytesavailable()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] ~= 'r' then
+ return ps_error('typecheck')
+ end
+ local waiting = (a[4] > 0) and (a[6] - a[5] + 1) or -1
+ push_opstack { "integer", "unlimited", "literal", waiting }
+ return true
+end
+
+-- this does not really do anything useful
+
+function operators.resetfile()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.flushfile()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[4] > 0 then
+ a[5] = a[6]
+ else
+ a[8]:flush()
+ end
+ return true
+end
+
+function operators.closefile()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ if a[7] == 'r' then
+ a[5] = a[6]
+ else
+ push_opstack(a)
+ operators.flushfile()
+ end
+ a[8]:close()
+ return true
+end
+
+function operators.status()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'file' then
+ return ps_error('typecheck')
+ end
+ local state = io.type(a[8])
+ push_opstack { "boolean", 'unlimited', 'literal', not state or state == "closed file" }
+ return true
+end
+
+function operators.run()
+ push_opstack { "string", "unlimited", "literal", add_VM("r"), 1, 1 }
+ local ret, err = operators.file()
+ if not ret then
+ return ret, err
+ end
+ ret, err = operators.cvx()
+ if not ret then
+ return ret, err
+ end
+ local a = pop_opstack() -- an executable file
+ push_execstack { ".run", "unlimited", "literal", false } -- constant
+ local curstack = execstackptr
+ local thefile = a[8]
+ push_execstack(a)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local state = io.type(thefile)
+ if not state or state == "closed file" then
+ -- okay
+ else
+ thefile:close()
+ end
+ if execstackptr > 0 then
+ local entry = execstack[execstackptr]
+ if entry[1] == '.run' and entry[4] == true then
+ pop_execstack()
+ end
+ end
+ return true
+end
+
+function operators.currentfile()
+ local n = execstackptr
+ while n >= 0 do
+ local entry = execstack[n]
+ if entry[1] == 'file' and entry[7] == 'r' then
+ push_opstack(entry)
+ return true
+ end
+ n = n - 1
+ end
+ push_opstack { 'file', 'unlimited', 'executable', add_VM(''), 0, 0, 'r', stdin }
+ return true
+end
+
+function operators.print()
+ local a = pop_opstack()
+ if not a then return
+ ps_error('stackunderflow')
+ end
+ if a[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ report(get_VM(a[4]))
+end
+
+-- '=' is also defined as a procedure below;
+--
+-- it is actually supposed to do this: "equaldict begin dup type exec end"
+-- where each of the entries in equaldict handles one type only, but this
+-- works just as well
+
+do
+
+ local pattern = Cs(
+ Cc("(")
+ * (
+ P("\n") / "\\n"
+ + P("\r") / "\\r"
+ + P("(") / "\\("
+ + P(")") / "\\)"
+ + P("\\") / "\\\\"
+ + P("\b") / "\\b"
+ + P("\t") / "\\t"
+ + P("\f") / "\\f"
+ + R("\000\032","\127\255") / tonumber / formatters["\\%03o"]
+ + P(1)
+ )^0
+ * Cc(")")
+ )
+
+ -- print(lpegmatch(pattern,[[h(a\nn)s]]))
+
+ local function do_operator_equal(a)
+ local ta, va = a[1], a[4]
+ if ta == 'real' then
+ if floor(va) == va then
+ return tostring(va .. '.0')
+ else
+ return tostring(va)
+ end
+ elseif ta == 'integer' then
+ return tostring(va)
+ elseif ta == 'string' then
+ return lpegmatch(pattern,get_VM(va))
+ elseif ta == 'boolean' then
+ return tostring(va)
+ elseif ta == 'operator' then
+ return '--' .. a[5] .. '--'
+ elseif ta == 'name' then
+ if a[3] == 'literal' then
+ return '/' .. get_VM(va)
+ else
+ return get_VM(va)
+ end
+ elseif ta == 'array' then
+ va = get_VM(va)
+ local isexec = a[3] == 'executable'
+ local result = { isexec and "{" or "[" }
+ local n = 1
+ for i=1,#va do
+ n = n + 1
+ result[n] = do_operator_equal(va[i])
+ end
+ result[n+1] = isexec and "}" or "]"
+ return concat(result," ")
+ elseif ta == 'null' then
+ return 'null'
+ elseif ta == 'dict' then
+ return '-dicttype-'
+ elseif ta == 'save' then
+ return '-savetype-'
+ elseif ta == 'mark' then
+ return '-marktype-'
+ elseif ta == 'file' then
+ return '-filetype-'
+ elseif ta == 'font' then
+ return '-fonttype-'
+ end
+ end
+
+ function operators.equal()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ report(do_operator_equal(a))
+ return true
+ end
+
+end
+
+local function commonstack(seperator)
+ for n=1,opstackptr do
+ push_opstack { 'string', 'unlimited', 'literal', add_VM(seperator), 1 ,1 }
+ push_opstack(opstack[n])
+ push_execstack { 'operator','unlimited','executable', operators.print, 'print'}
+ push_execstack { 'operator','unlimited','executable', operators.equal, '=='}
+ end
+ return true
+end
+
+function operators.pstack()
+ return commonstack("\n")
+end
+
+function operators.stack()
+ return commonstack(" ")
+end
+
+-- this does not really do anything useful
+
+function operators.echo()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'boolean' then
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+-- Virtual memory operators
+--
+-- +save +restore +vmstatus
+
+-- to be checked: we do a one-level shallow copy now, not sure if that
+-- is good enough yet
+
+local savelevel = 0
+
+initializers[#initializers+1] = function(reset)
+ savelevel = 0
+end
+
+function operators.save()
+ local saved_VM = { }
+ for k1, v1 in next, VM do
+ if type(v1) == "table" then
+ local t1 = { }
+ saved_VM[k1] = t1
+ for k2, v2 in next, t1 do
+ if type(v2) == "table" then
+ local t2 = { }
+ t1[k2] = t2
+ for k3, v3 in next, v2 do
+ t2[k3] = v3
+ end
+ else
+ t1[k2] = v2
+ end
+ end
+ else
+ saved_VM[k1] = v1
+ end
+ end
+ push_gsstack { 'save', copy_gsstate() }
+ savelevel = savelevel + 1
+ push_opstack { 'save', 'unlimited', 'executable', add_VM(saved_VM) }
+end
+
+do
+
+ local function validstack(stack,index,saved_VM)
+ -- loop over pstack, execstack, and dictstack to make sure
+ -- there are no entries with VM_id > #saved_VM
+ for i=index,1,-1 do
+ local v = stack[i]
+ if type(v) == "table" then
+ local tv = v[1]
+ if tv == "save" or tv == "string" or tv == "array" or tv == "dict" or tv == "name" or tv == "file" then
+ -- todo: check on %stdin/%stdout, but should be ok
+ if v[4] > #saved_VM then
+ return false
+ end
+ end
+ end
+ i = i - 1
+ end
+ return true
+ end
+
+ function operators.restore()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'save' then
+ return ps_error('typecheck')
+ end
+ if a[4] == 0 or savelevel == 0 then
+ return ps_error('invalidrestore')
+ end
+ local saved_VM = get_VM(a[4])
+ if directvm then
+ else
+ if not validstack(execstack,execstackptr,saved_VM) then
+ return ps_error('invalidrestore')
+ end
+ if not validstack(dictstack,dictstackptr,saved_VM) then
+ return ps_error('invalidrestore')
+ end
+ if not validstack(opstack,opstackptr,saved_VM) then
+ return ps_error('invalidrestore')
+ end
+ end
+ while gsstackptr > 0 do
+ local g = gsstack[gsstackptr]
+ gsstackptr = gsstackptr - 1
+ if g[1] == "save" then
+ gsstate = g[2]
+ return
+ end
+ end
+ a[4] = 0 -- invalidate save object
+ savelevel = savelevel - 1
+ VM = saved_VM
+ end
+
+end
+
+function operators.vmstatus()
+ local n = 0 -- #VM * 100
+ push_opstack { 'integer', 'unlimited', 'literal', savelevel }
+ push_opstack { 'integer', 'unlimited', 'literal', n }
+ push_opstack { 'integer', 'unlimited', 'literal', n }
+ return true
+end
+
+-- Miscellaneous operators
+--
+-- +bind +null +usertime +version
+
+-- the reference manual says bind only ERRORS on typecheck
+
+local function bind()
+ local a = pop_opstack()
+ if not a then
+ return true -- ps_error('stackunderflow')
+ end
+ if not a[1] == 'array' then
+ return ps_error('typecheck')
+ end
+ local proc = get_VM(a[4])
+ for i=1,#proc do
+ local v = proc[i]
+ local t = v[1]
+ if t == 'name' then
+ if v[3] == 'executable' then
+ local op = lookup(get_VM(v[4]))
+ if op and op[1] == 'operator' then
+ proc[i] = op
+ end
+ end
+ elseif t == 'array' then
+ if v[2] == 'unlimited' then
+ push_opstack(v)
+ bind() -- recurse
+ pop_opstack()
+ proc[i][2] = 'read-only'
+ end
+ end
+ end
+ push_opstack(a)
+end
+
+operators.bind = bind
+
+function operators.null()
+ push_opstack { 'null', 'unlimited', 'literal' }
+ return true
+end
+
+function operators.usertime()
+ push_opstack { 'integer', 'unlimited', 'literal', floor(os.clock() * 1000) }
+ return true
+end
+
+function operators.version()
+ push_opstack { 'string', 'unlimited', 'literal', add_VM('23.0') }
+ return true
+end
+
+-- Graphics state operators
+--
+-- +gsave +grestore +grestoreall +initgraphics +setlinewidth +currentlinewidth +setlinecap +currentlinecap
+-- +setlinejoin +currentlinejoin +setmiterlimit +currentmiterlimit +setdash +currentdash +setflat +currentflat
+-- +setgray +currentgray +sethsbcolor +currenthsbcolor +setrgbcolor +setcmykcolor +currentrgbcolor +setscreen
+-- +currentscreen +settransfer +currenttransfer
+
+function operators.gsave()
+ push_gsstack { 'gsave', copy_gsstate() }
+ return true
+end
+
+function operators.grestore()
+ if gsstackptr > 0 then
+ local g = gsstack[gsstackptr]
+ if g[1] == "gsave" then
+ gsstackptr = gsstackptr - 1
+ gsstate = g[2]
+ end
+ end
+ return true
+end
+
+function operators.grestoreall() -- needs checking
+ for i=gsstackptr,1,-1 do
+ local g = gsstack[i]
+ if g[1] == "save" then
+ gsstate = g[2]
+ gsstackptr = i
+ return true
+ end
+ end
+ gsstackptr = 0
+ return true
+end
+
+function operators.initgraphics()
+ local newstate = copy_gsstate() -- hm
+ newstate.matrix = { 1, 0, 0, 1, 0, 0 }
+ newstate.color = { gray = 0, hsb = { }, rgb = { }, cmyk = { }, type = "gray" }
+ newstate.position = { } -- actual x and y undefined
+ newstate.path = { }
+ newstate.linewidth = 1
+ newstate.linecap = 0
+ newstate.linejoin = 0
+ newstate.miterlimit = 10
+ newstate.dashpattern = { }
+ newstate.dashoffset = 0
+ gsstate = newstate
+ device.initgraphics()
+ operators.initclip()
+ return true
+end
+
+function operators.setlinewidth()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local t = a[1]
+ if not (t == 'integer' or t == 'real') then
+ return ps_error('typecheck')
+ end
+ gsstate.linewidth = a[4]
+ return true
+end
+
+function operators.currentlinewidth()
+ local w = gsstate.linewidth
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w) ~= w) and 'real' or 'integer',
+ 'unlimited',
+ 'literal',
+ w,
+ }
+ return true
+end
+
+function operators.setlinecap()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local c = a[4]
+ if c > 2 or c < 0 then
+ return ps_error('rangecheck')
+ end
+ gsstate.linecap = c
+ return true
+end
+
+function operators.currentlinecap()
+ push_opstack { 'integer', 'unlimited', 'literal', gsstate.linecap }
+ return true
+end
+
+function operators.setlinejoin()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'integer' then
+ return ps_error('typecheck')
+ end
+ local j = a[4]
+ if j > 2 or j < 0 then
+ return ps_error('rangecheck')
+ end
+ gsstate.linejoin = j
+ return true
+end
+
+function operators.currentlinejoin()
+ push_opstack { 'integer', 'unlimited', 'literal', gsstate.linejoin }
+ return true
+end
+
+function operators.setmiterlimit()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local t = a[1]
+ if not (t == 'integer' or t == 'real') then
+ return ps_error('typecheck')
+ end
+ local m = a[4]
+ if m < 1 then
+ return ps_error('rangecheck')
+ end
+ gsstate.miterlimit = m
+ return true
+end
+
+function operators.currentmiterlimit()
+ local w = gsstate.miterlimit
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w) ~= w) and 'real' or 'integer',
+ 'unlimited',
+ 'literal',
+ w
+ }
+ return true
+end
+
+function operators.setdash()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if ta ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'integer' or tb == 'real') then
+ return ps_error('typecheck')
+ end
+ local pattern = { }
+ local total = 0
+ local thearray = get_VM(a[4])
+ for i=1,#thearray do
+ local a = thearray[i]
+ local ta, va = a[1], a[4]
+ if ta ~= "integer" then
+ return ps_error('typecheck')
+ end
+ if va < 0 then
+ return ps_error('limitcheck')
+ end
+ total = total + va
+ pattern[#pattern+1] = va
+ end
+ if #pattern > 0 and total == 0 then
+ return ps_error('limitcheck')
+ end
+ gsstate.dashpattern = pattern
+ gsstate.dashoffset = b[4]
+ return true
+end
+
+function operators.currentdash()
+ local thearray = gsstate.dashpattern
+ local pattern = { }
+ for i=1,#thearray do
+ pattern[i] = { 'integer', 'unlimited', 'literal', thearray[i] }
+ end
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(pattern), #pattern, #pattern }
+ local w = gsstate.dashoffset
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w) ~= w) and 'real' or 'integer', 'unlimited', 'literal', w
+ }
+ return true
+end
+
+function operators.setflat()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, va = a[1], a[4]
+ if not (ta == 'integer' or ta == 'real') then
+ return ps_error('typecheck')
+ end
+ gsstate.flatness = va
+ return true
+end
+
+function operators.currentflat()
+ local w = gsstate.flatness
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w) ~= w) and 'real' or 'integer', 'unlimited', 'literal', w
+ }
+ return true
+end
+
+-- Color conversion functions
+--
+-- normally, level one colors are based on hsb, but for our backend it is better to
+-- stick with the original request when possible
+
+do
+
+ local function rgb_to_gray (r, g, b)
+ return 0.30 * r + 0.59 * g + 0.11 * b
+ end
+
+ local function cmyk_to_gray (c, m, y, k)
+ return 0.30 * (1.0 - min(1.0,c+k)) + 0.59 * (1.0 - min(1.0,m+k)) + 0.11 * (1.0 - min(1.0,y+k))
+ end
+
+ local function cmyk_to_rgb (c, m, y, k)
+ return 1.0 - min(1.0,c+k), 1.0 - min(1.0,m+k), 1.0 - min(1.0,y+k)
+ end
+
+ local function rgb_to_hsv(r, g, b)
+ local offset, maximum, other_1, other_2
+ if r >= g and r >= b then
+ offset, maximum, other_1, other_2 = 0, r, g, b
+ elseif g >= r and g >= b then
+ offset, maximum, other_1, other_2 = 2, g, b, r
+ else
+ offset, maximum, other_1, other_2 = 4, b, r, g
+ end
+ if maximum == 0 then
+ return 0, 0, 0
+ end
+ local minimum = other_1 < other_2 and other_1 or other_2
+ if maximum == minimum then
+ return 0, 0, maximum
+ end
+ local delta = maximum - minimum
+ return (offset + (other_1-other_2)/delta)/6, delta/maximum, maximum
+ end
+
+ local function gray_to_hsv (col)
+ return 0, 0, col
+ end
+
+ local function gray_to_rgb (col)
+ return 1-col, 1-col, 1-col
+ end
+
+ local function gray_to_cmyk (col)
+ return 0, 0, 0, col
+ end
+
+ local function hsv_to_rgb(h,s,v)
+ local hi = floor(h * 6.0) % 6
+ local f = (h * 6) - floor(h * 6)
+ local p = v * (1 - s)
+ local q = v * (1 - f * s)
+ local t = v * (1 - (1 - f) * s)
+ if hi == 0 then
+ return v, t, p
+ elseif hi == 1 then
+ return q, v, p
+ elseif hi == 2 then
+ return p, v, t
+ elseif hi == 3 then
+ return p, q, v
+ elseif hi == 4 then
+ return t, p, v
+ elseif hi == 5 then
+ return v, p, q
+ end
+ end
+
+ local function hsv_to_gray(h,s,v)
+ return rgb_to_gray(hsv_to_rgb(h,s,v))
+ end
+
+ -- color operators
+
+ function operators.setgray()
+ local g = pop_opstack()
+ if not g then
+ return ps_error('stackunderflow')
+ end
+ local gt = g[1]
+ if not (gt == 'integer' or gt == 'real') then
+ return ps_error('typecheck')
+ end
+ local gv = g[4]
+ local color = gsstate.color
+ color.type = "gray"
+ color.gray = (gv < 0 and 0) or (gv > 1 and 1) or gv
+ return true
+ end
+
+ function operators.currentgray()
+ local color = gsstate.color
+ local t = color.type
+ local s
+ if t == "gray" then
+ s = color.gray
+ elseif t == "rgb" then
+ local col = color.rgb
+ s = rgb_to_gray(col[1],col[2],col[3])
+ elseif t == "cmyk" then
+ local col = cmyk
+ s = cmyk_to_gray(col[1],col[2],col[3],col[4])
+ else
+ local col = color.hsb
+ s = hsv_to_gray(col[1],col[2],col[3])
+ end
+ push_opstack { (s == 0 or s == 1) and 'integer' or 'real', 'unlimited', 'literal', s }
+ return true
+ end
+
+ function operators.sethsbcolor()
+ local b = pop_opstack()
+ local s = pop_opstack()
+ local h = pop_opstack()
+ if not h then
+ return ps_error('stackunderflow')
+ end
+ local ht, st, bt = h[1], s[1], b[1]
+ if not (ht == 'integer' or ht == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (st == 'integer' or st == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (bt == 'integer' or bt == 'real') then
+ return ps_error('typecheck')
+ end
+ local hv, sv, bv = h[4], s[4], b[4]
+ local color = gsstate.color
+ color.type = "hsb"
+ color.hsb = {
+ (hv < 0 and 0) or (hv > 1 and 1) or hv,
+ (sv < 0 and 0) or (sv > 1 and 1) or sv,
+ (bv < 0 and 0) or (bv > 1 and 1) or bv,
+ }
+ return true
+ end
+
+ function operators.currenthsbcolor()
+ local color = gsstate.color
+ local t = color.type
+ local h, s, b
+ if t == "gray" then
+ h, s, b = gray_to_hsv(color.gray)
+ elseif t == "rgb" then
+ local col = color.rgb
+ h, s, b = rgb_to_hsv(col[1],col[2],col[3])
+ elseif t == "cmyk" then
+ local col = color.cmyk
+ h, s, b = cmyk_to_hsv(col[1],col[2],col[3],col[4])
+ else
+ local col = color.hsb
+ h, s, b = col[1], col[2], col[3]
+ end
+ push_opstack { (h == 0 or h == 1) and 'integer' or 'real', 'unlimited', 'literal', h }
+ push_opstack { (s == 0 or s == 1) and 'integer' or 'real', 'unlimited', 'literal', s }
+ push_opstack { (b == 0 or b == 1) and 'integer' or 'real', 'unlimited', 'literal', b }
+ return true
+ end
+
+ function operators.setrgbcolor()
+ local b = pop_opstack()
+ local g = pop_opstack()
+ local r = pop_opstack()
+ if not r then
+ return ps_error('stackunderflow')
+ end
+ local rt, gt, bt = r[1], g[1], b[1]
+ if not (rt == 'integer' or rt == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (gt == 'integer' or gt == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (bt == 'integer' or bt == 'real') then
+ return ps_error('typecheck')
+ end
+ local rv, gv, bv = r[4], g[4], b[4]
+ local color = gsstate.color
+ color.type = "rgb"
+ color.rgb = {
+ (rv < 0 and 0) or (rv > 1 and 1) or rv,
+ (gv < 0 and 0) or (gv > 1 and 1) or gv,
+ (bv < 0 and 0) or (bv > 1 and 1) or bv,
+ }
+ return true
+ end
+
+ function operators.currentrgbcolor()
+ local color = gsstate.color
+ local t = color.type
+ local r, g, b
+ if t == "gray" then
+ r, g, b = gray_to_rgb(color.gray)
+ elseif t == "rgb" then
+ local col = color.rgb
+ r, g, b = col[1], col[2], col[3]
+ elseif t == "cmyk" then
+ r, g, b = cmyk_to_rgb(color.cmyk)
+ else
+ local col = color.hsb
+ r, g, b = hsv_to_rgb(col[1], col[2], col[3])
+ end
+ push_opstack { (r == 0 or r == 1) and "integer" or "real", 'unlimited', 'literal', r }
+ push_opstack { (g == 0 or g == 1) and "integer" or "real", 'unlimited', 'literal', g }
+ push_opstack { (b == 0 or b == 1) and "integer" or "real", 'unlimited', 'literal', b }
+ return true
+ end
+
+ function operators.setcmykcolor()
+ local k = pop_opstack()
+ local y = pop_opstack()
+ local m = pop_opstack()
+ local c = pop_opstack()
+ if not c then
+ return ps_error('stackunderflow')
+ end
+ local ct, mt, yt, kt = c[1], m[1], y[1], k[1]
+ if not (ct == 'integer' or ct == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (mt == 'integer' or mt == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (yt == 'integer' or yt == 'real') then
+ return ps_error('typecheck')
+ end
+ if not (kt == 'integer' or kt == 'real') then
+ return ps_error('typecheck')
+ end
+ local cv, mv, yv, kv = c[4], m[4], y[4], k[4]
+ local color = gsstate.color
+ color.type = "cmyk"
+ color.cmyk = {
+ (cv < 0 and 0) or (cv > 1 and 1) or cv,
+ (mv < 0 and 0) or (mv > 1 and 1) or mv,
+ (yv < 0 and 0) or (yv > 1 and 1) or yv,
+ (kv < 0 and 0) or (kv > 1 and 1) or kv,
+ }
+ return true
+ end
+
+ function operators.currentcmykcolor()
+ local color = gsstate.color
+ local t = color.type
+ local c, m, y, k
+ if t == "gray" then
+ c, m, y, k = gray_to_cmyk(color.gray)
+ elseif t == "rgb" then
+ c, m, y, k = rgb_to_cmyk(color.rgb)
+ elseif t == "cmyk" then
+ local col = color.cmyk
+ c, m, y, k = col[1], col[2], col[3], col[4]
+ else
+ local col = color.hsb
+ c, m, y, k = hsv_to_cmyk(col[1], col[2], col[3])
+ end
+ push_opstack { (c == 0 or c == 1) and "integer" or "real", 'unlimited', 'literal', c }
+ push_opstack { (m == 0 or m == 1) and "integer" or "real", 'unlimited', 'literal', m }
+ push_opstack { (y == 0 or y == 1) and "integer" or "real", 'unlimited', 'literal', y }
+ push_opstack { (k == 0 or k == 1) and "integer" or "real", 'unlimited', 'literal', k }
+ return true
+ end
+
+end
+
+function operators.setscreen()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc, ac = a[1], b[1], c[1], c[3]
+ if not (tc == 'array' and ac == 'executable') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ local va, vb, vc = a[4], b[4], c[4]
+ if vb < 0 or vb > 360 then
+ return ps_error('rangecheck')
+ end
+ if va < 0 then
+ return ps_error('rangecheck')
+ end
+ gsstate.screen = { va, vb, vc }
+ return true
+end
+
+function operators.currentscreen()
+ local w
+ if not gsstate.screen then
+ local popper = { 'operator', 'unlimited', 'executable', operators.pop, 'pop' }
+ push_opstack { 'integer', 'unlimited', 'literal', 1 }
+ push_opstack { 'integer', 'unlimited', 'literal', 0 }
+ push_opstack { 'array', 'unlimited', 'executable', add_VM{ popper }, 1, 1, 'd' }
+ else
+ local w1 = gsstate.screen[1]
+ local w2 = gsstate.screen[2]
+ local w3 = gsstate.screen[3]
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w1) ~= w1) and 'real' or 'integer', 'unlimited', 'literal', w1
+ }
+ push_opstack {
+ (abs(w) > MAX_INT or floor(w2) ~= w2) and 'real' or 'integer', 'unlimited', 'literal', w2
+ }
+ local thearray = get_VM(w3)
+ push_opstack { 'array', 'unlimited', 'executable', w3, 1, #thearray, 'd' } -- w3 or thearray ?
+ end
+ return true
+end
+
+function operators.settransfer()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'array' and a[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ local va = a[4]
+ if va < 0 then
+ return ps_error('rangecheck')
+ end
+ gsstate.transfer = va
+ return true
+end
+
+function operators.currenttransfer()
+ local transfer = gsstate.transfer
+ if not transfer then
+ push_opstack { 'array', 'unlimited', 'executable', add_VM{ }, 0, 0, 'd'}
+ else
+ local thearray = get_VM(transfer)
+ push_opstack { 'array', 'unlimited', 'executable', transfer, 1, #thearray, 'd' }
+ end
+ return true
+end
+
+-- Coordinate system and matrix operators
+--
+-- +matrix +initmatrix +identmatrix +defaultmatrix +currentmatrix +setmatrix +translate
+-- +scale +rotate +concat +concatmatrix +transform +dtransform +itransform +idtransform
+-- +invertmatrix
+
+-- are these changed in place or not? if not then we can share
+
+function operators.matrix()
+ local matrix = {
+ {'real', 'unlimited', 'literal', 1},
+ {'real', 'unlimited', 'literal', 0},
+ {'real', 'unlimited', 'literal', 0},
+ {'real', 'unlimited', 'literal', 1},
+ {'real', 'unlimited', 'literal', 0},
+ {'real', 'unlimited', 'literal', 0},
+ }
+ push_opstack { 'array', 'unlimited', 'literal', add_VM(matrix), 6, 6 }
+ return true
+end
+
+function operators.initmatrix()
+ gsstate.matrix = { 1, 0, 0, 1, 0, 0 }
+ return true
+end
+
+function operators.identmatrix()
+ local a = pop_opstack()
+ if not a then return
+ ps_error('stackunderflow')
+ end
+ if a[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if a[6] < 6 then
+ return ps_error('rangecheck')
+ end
+ local m = VM[a[4]] -- or can we replace the numbers
+ m[1] = { 'real', 'unlimited', 'literal', 1 }
+ m[2] = { 'real', 'unlimited', 'literal', 0 }
+ m[3] = { 'real', 'unlimited', 'literal', 0 }
+ m[4] = { 'real', 'unlimited', 'literal', 1 }
+ m[5] = { 'real', 'unlimited', 'literal', 0 }
+ m[6] = { 'real', 'unlimited', 'literal', 0 }
+ a[5] = 6
+ push_opstack(a)
+ return true
+end
+
+operators.defaultmatrix = operators.identmatrix
+
+function operators.currentmatrix()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if a[6] < 6 then
+ return ps_error('rangecheck')
+ end
+ local thearray = get_VM(a[4])
+ local matrix = gsstate.matrix
+ for i=1,6 do
+ thearray[i] = {'real', 'unlimited', 'literal', matrix[i]}
+ end
+ push_opstack { 'array', 'unlimited', 'literal', a[4], 6, 6 }
+ return true
+end
+
+function operators.setmatrix()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if a[6] ~= 6 then
+ return ps_error('rangecheck')
+ end
+ local thearray = get_VM(a[4])
+ local matrix = gsstate.matrix
+ for i=1,#thearray do
+ local a = thearray[i]
+ local ta, tv = a[1], a[4]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if i > 6 then
+ return ps_error('rangecheck')
+ end
+ matrix[i] = va
+ end
+ return true
+end
+
+local function do_transform(matrix,a,b)
+ local x = matrix[1] * a + matrix[3] * b + matrix[5]
+ local y = matrix[2] * a + matrix[4] * b + matrix[6]
+ return x, y
+end
+
+local function do_itransform(matrix,a,b)
+ local m1 = matrix[1]
+ local m4 = matrix[4]
+ if m1 == 0 or m4 == 0 then
+ return nil
+ end
+ local x = (a - matrix[5] - matrix[3] * b) / m1
+ local y = (b - matrix[6] - matrix[2] * a) / m4
+ return x, y
+end
+
+local function do_concat (a,b)
+ local a1, a2, a3, a4, a5, a6 = a[1], a[2], a[3], a[4], a[5], a[6]
+ local b1, b2, b3, b4, b5, b6 = b[1], b[2], b[3], b[4], b[5], b[6]
+ local c1 = a1 * b1 + a2 * b3
+ local c2 = a1 * b2 + a2 * b4
+ local c3 = a1 * b3 + a3 * b4
+ local c4 = a3 * b2 + a4 * b4
+ local c5 = a5 * b1 + a6 * b3 + b5
+ local c6 = a5 * b2 + a6 * b4 + b6
+ -- this is because double calculation introduces a small error
+ return {
+ abs(c1) < 1.0e-16 and 0 or c1,
+ abs(c2) < 1.0e-16 and 0 or c2,
+ abs(c3) < 1.0e-16 and 0 or c3,
+ abs(c4) < 1.0e-16 and 0 or c4,
+ abs(c5) < 1.0e-16 and 0 or c5,
+ abs(c6) < 1.0e-16 and 0 or c6,
+ }
+end
+
+local function do_inverse (a)
+ local a1, a2, a3, a4, a5, a6 = a[1], a[2], a[3], a[4], a[5], a[6]
+ local det = a1 * a4 - a3 * a2
+ if det == 0 then
+ return nil
+ end
+ local c1 = a4 / det
+ local c3 = -a3 / det
+ local c2 = -a2 / det
+ local c4 = a1 / det
+ local c5 = (a3 * a6 - a5 * a4) / det
+ local c6 = (a5 * a2 - a1 * a6) / det
+ return {
+ abs(c1) < 1.0e-16 and 0 or c1,
+ abs(c2) < 1.0e-16 and 0 or c2,
+ abs(c3) < 1.0e-16 and 0 or c3,
+ abs(c4) < 1.0e-16 and 0 or c4,
+ abs(c5) < 1.0e-16 and 0 or c5,
+ abs(c6) < 1.0e-16 and 0 or c6,
+ }
+end
+
+function operators.translate()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] == 'array' then
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local tf = a
+ local a = pop_opstack()
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ local m = VM[tf[4]]
+ local old = { m[1][4], m[2][4], m[3][4], m[4][4], m[5][4], m[6][4] }
+ local c = do_concat(old,{1,0,0,1,b[4],a[4]})
+ for i=1,6 do
+ m[i] = { 'real', 'unlimited', 'literal', c[i] }
+ end
+ tf[5] = 6
+ push_opstack(tf)
+ else
+ local b = pop_opstack()
+ local ta = a[1]
+ local tb = b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ gsstate.matrix = do_concat(gsstate.matrix,{1,0,0,1,b[4],a[4]})
+ end
+ return true
+end
+
+function operators.scale()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'array' then
+ local tf = a
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local a = pop_opstack()
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ local v = VM[tf[4]]
+ local c = do_concat (
+ { v[1][4], v[2][4], v[3][4], v[4][4], v[5][4], v[6][4] },
+ { b[4], 0, 0, a[4], 0, 0 }
+ )
+ for i=1,6 do
+ v[i] = { 'real', 'unlimited', 'literal', c[i] }
+ end
+ tf[5] = 6
+ push_opstack(tf)
+ else
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb = a[1], b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ gsstate.matrix = do_concat(gsstate.matrix, { b[4], 0, 0, a[4], 0, 0 })
+ end
+ return true
+end
+
+function operators.concat()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= "array" then
+ return ps_error('typecheck')
+ end
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local thearray = get_VM(a[4])
+ local l = { }
+ for i=1,#thearray do
+ local v = thearray[i]
+ local t = v[1]
+ if not (t == 'real' or t == 'integer') then
+ return ps_error('typecheck')
+ end
+ l[i] = v[4]
+ end
+ gsstate.matrix = do_concat(gsstate.matrix,l)
+ return true
+end
+
+function operators.concatmatrix()
+ local tf = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if tf[1] ~= "array" then return ps_error('typecheck') end
+ if b [1] ~= "array" then return ps_error('typecheck') end
+ if a [1] ~= "array" then return ps_error('typecheck') end
+ if tf[6] ~= 6 then return ps_error('typecheck') end
+ if b [6] ~= 6 then return ps_error('typecheck') end
+ if a [6] ~= 6 then return ps_error('typecheck') end
+ local al = { }
+ local thearray = get_VM(a[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return ps_error('typecheck')
+ end
+ al[i] = v[4]
+ end
+ local bl = { }
+ local thearray = get_VM(b[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return ps_error('typecheck')
+ end
+ bl[i] = v[4]
+ end
+ local c = do_concat(al, bl)
+ local m = VM[tf[4]]
+ for i=1,6 do
+ m[i] = { 'real', 'unlimited', 'literal', c[i] }
+ end
+ tf[5] = 6
+ push_opstack(tf)
+ return true
+end
+
+function operators.rotate()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ if ta == 'array' then
+ local tf
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ tf = a
+ a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'real' or a[1] == 'integer') then
+ return ps_error('typecheck')
+ end
+ local m = VM[tf[4]]
+ local old = { m[1][4], m[2][4], m[3][4], m[4][4], m[5][4], m[6][4] }
+ local av = a[4]
+ local c = do_concat (old, {cos(rad(av)),sin(rad(av)),-sin(rad(av)),cos(rad(av)), 0, 0})
+ for i=1,6 do
+ m[i] = { 'real', 'unlimited', 'literal', c[i] }
+ end
+ push_opstack(tf)
+ elseif ta == 'real' or ta == 'integer' then
+ local av = a[4]
+ gsstate.matrix = do_concat(gsstate.matrix,{cos(rad(av)),sin(rad(av)),-sin(rad(av)),cos(rad(av)),0,0})
+ else
+ return ps_error('typecheck')
+ end
+ return true
+end
+
+function operators.transform()
+ local a = pop_opstack()
+ local b = pop_opstack()
+ if not b then
+ ps_error('stackunderflow')
+ end
+ local tf
+ if a[1] == 'array' then
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local thearray = get_VM(a[4])
+ tf = { }
+ for i=1,#thearray do
+ local v = thearray[i]
+ local v1 = v[1]
+ if not (v1 == 'real' or v1 == 'integer') then
+ return ps_error('typecheck')
+ end
+ tf[i] = v[4]
+ end
+ a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ else
+ tf = gsstate.matrix
+ end
+ local a1 = a[1]
+ local b1 = b[1]
+ if not (a1 == 'real' or a1 == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (b1 == 'real' or b1 == 'integer') then
+ return ps_error('typecheck')
+ end
+ local x, y = do_transform(tf,b[4],a[4]);
+ push_opstack { 'real', 'unlimited', 'literal', x }
+ push_opstack { 'real', 'unlimited', 'literal', y }
+ return true
+end
+
+local function commontransform()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local tf
+ if a[1] == 'array' then
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ tf = { }
+ local thearray = get_VM(a[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return ps_error('typecheck')
+ end
+ tf[i] = v[4]
+ end
+ a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ else
+ tf = gsstate.matrix
+ end
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ local ta = a[1]
+ local tb = b[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ return true, tf, a, b
+end
+
+function operators.dtransform()
+ local ok, tf, a, b = commontransform()
+ if ok then
+ local x, y = do_transform({tf[1],tf[2],tf[3],tf[4],0,0},b[4],a[4])
+ if not x then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'real', 'unlimited', 'literal', x }
+ push_opstack { 'real', 'unlimited', 'literal', y }
+ return true
+ else
+ return false, tf
+ end
+end
+
+function operators.itransform()
+ local ok, tf, a, b = commontransform()
+ if ok then
+ local x, y = do_itransform(tf,b[4],a[4])
+ if not x then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'real', 'unlimited', 'literal', x }
+ push_opstack { 'real', 'unlimited', 'literal', y }
+ return true
+ else
+ return false, tf
+ end
+end
+
+function operators.idtransform()
+ local ok, tf, a, b = commontransform()
+ if ok then
+ local x,y = do_itransform({tf[1],tf[2],tf[3],tf[4],0,0},b[4],a[4]);
+ if not x then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'real', 'unlimited', 'literal', x }
+ push_opstack { 'real', 'unlimited', 'literal', y }
+ return true
+ else
+ return false, tf
+ end
+end
+
+function operators.invertmatrix()
+ local tf = pop_opstack()
+ if not tf then
+ return ps_error('stackunderflow')
+ end
+ if tf[1] ~= "array" then
+ return ps_error('typecheck')
+ end
+ if tf[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= "array" then
+ return ps_error('typecheck')
+ end
+ if a[6] ~= 6 then
+ return ps_error('typecheck')
+ end
+ local al = { }
+ local thearray = get_VM(a[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return ps_error('typecheck')
+ end
+ al[i] = v[4]
+ end
+ local c = do_inverse(al)
+ if not c then
+ return ps_error('undefinedresult')
+ end
+ local m = VM[tf[4]]
+ for i=1,6 do
+ m[i] = { 'real', 'unlimited', 'literal', c[i] }
+ end
+ tf[5] = 6
+ push_opstack(tf)
+ return true
+end
+
+-- Path construction operators
+--
+-- +newpath +currentpoint +moveto +rmoveto +lineto +rlineto +arc +arcn +arcto +curveto +rcurveto
+-- +closepath +flattenpath -reversepath -strokepath -charpath +clippath -pathbbox -pathforall
+-- +initclip *clip *eoclip
+
+function operators.newpath()
+ gsstate.path = { }
+ gsstate.position = { }
+ return true
+end
+
+function operators.currentpoint()
+ local position = gsstate.position
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y = do_itransform(gsstate.matrix, position[1], position[2])
+ if not x then
+ return ps_error('undefinedresult')
+ end
+ push_opstack { 'real', 'unlimited', 'literal', x }
+ push_opstack { 'real', 'unlimited', 'literal', y }
+end
+
+function operators.moveto()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local b1 = b[1]
+ local a1 = a[1]
+ if not (b1 == 'real' or b1 == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (a1 == 'real' or a1 == 'integer') then
+ return ps_error('typecheck')
+ end
+ local path = gsstate.path
+ local length = #path
+ local x, y = do_transform(gsstate.matrix, a[4], b[4])
+ if length > 0 and path[length][1] == "moveto" then
+ -- replace last moveto
+ else
+ length = length + 1
+ end
+ path[length] = { "moveto", x, y }
+ gsstate.position = { x, y }
+ return true
+end
+
+function operators.rmoveto()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local bt = b[1]
+ local at = a[1]
+ if not (bt == 'real' or bt == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (at == 'real' or at == 'integer') then
+ return ps_error('typecheck')
+ end
+ local position = gsstate.position
+ local path = gsstate.path
+ local length = #path
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y = do_transform(gsstate.matrix, a[4], b[4])
+ x = position[1] + x
+ y = position[2] + y
+ position[1] = x
+ position[2] = y
+ if length > 0 and path[length][1] == "moveto" then
+ -- replace last moveto
+ else
+ length = length + 1
+ end
+ path[length] = { "moveto", x, y }
+ return true
+end
+
+function operators.lineto()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local at = a[1]
+ local bt = b[1]
+ if not (bt == 'real' or bt == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (at == 'real' or at == 'integer') then
+ return ps_error('typecheck')
+ end
+ local position = gsstate.position
+ local path = gsstate.path
+ local length = #path
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y = do_transform(gsstate.matrix, a[4], b[4])
+ gsstate.position = { x, y }
+ path[length+1] = { "lineto", x, y }
+ return true
+end
+
+function operators.rlineto()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local at = a[1]
+ local bt = b[1]
+ if not (bt == 'real' or bt == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (at == 'real' or at == 'integer') then
+ return ps_error('typecheck')
+ end
+ local position = gsstate.position
+ local path = gsstate.path
+ local length = #path
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y = do_transform(gsstate.matrix, a[4], b[4])
+ x = position[1] + x
+ y = position[2] + y
+ position[1] = x
+ position[2] = y
+ path[length+1] = { "lineto", x, y }
+ return true
+end
+
+local function arc_to_curve (x, y, r, aa, theta)
+ local th = rad(theta/2.0)
+ local x0 = cos(th)
+ local y0 = sin(th)
+ local x1 = (4.0-x0)/3.0
+ local y1 = ((1.0-x0)*(3.0-x0))/(3.0*y0) -- y0 != 0...
+ local x2 = x1
+ local y2 = -y1
+ -- local x3 = x0
+ -- local y3 = -y0
+
+ local bezAng = rad(aa) + th
+ local cBezAng = cos(bezAng)
+ local sBezAng = sin(bezAng)
+
+ local rx0 = (cBezAng * x0) - (sBezAng * y0)
+ local ry0 = (sBezAng * x0) + (cBezAng * y0)
+ local rx1 = (cBezAng * x1) - (sBezAng * y1)
+ local ry1 = (sBezAng * x1) + (cBezAng * y1)
+ local rx2 = (cBezAng * x2) - (sBezAng * y2)
+ local ry2 = (sBezAng * x2) + (cBezAng * y2)
+ -- local rx3 = (cBezAng * x3) - (sBezAng * y3)
+ -- local ry3 = (sBezAng * x3) + (cBezAng * y3)
+
+ local px0 = x + r*rx0
+ local py0 = y + r*ry0
+ local px1 = x + r*rx1
+ local py1 = y + r*ry1
+ local px2 = x + r*rx2
+ local py2 = y + r*ry2
+ -- local px3 = x + r*rx3
+ -- local py3 = y + r*ry3
+
+ return px2, py2, px1, py1, px0, py0 -- no px3, py3
+end
+
+local function arc_start(x,y,r,aa)
+ local x3 = 1
+ local y3 = 0
+ local bezAng = rad(aa)
+ local cBezAng = cos(bezAng)
+ local sBezAng = sin(bezAng)
+ local rx3 = (cBezAng * x3) - (sBezAng * y3)
+ local ry3 = (sBezAng * x3) + (cBezAng * y3)
+ local px3 = x + r*rx3
+ local py3 = y + r*ry3
+ return px3, py3
+end
+
+local function do_arc(matrix,path,x,y,r,aa,ab)
+ local endx, endy
+ local segments = floor((ab-aa+44.999999999)/45)
+ if segments == 0 then
+ return do_transform(gsstate.matrix, x,y)
+ end
+ local theta = (ab-aa) / segments
+ while segments>0 do
+ local x1, y1, x2, y2, x3, y3 = arc_to_curve(x,y,r,aa,theta)
+ local px2, py2 = do_transform(matrix,x2,y2)
+ local px1, py1 = do_transform(matrix,x1,y1)
+ endx, endy = do_transform(matrix, x3,y3)
+ path[#path+1] = { "curveto", px1, py1, px2, py2, endx, endy }
+ segments = segments - 1
+ aa = aa + theta
+ end
+ return endx, endy
+end
+
+local function do_arcn(matrix,path,x,y,r,aa,ab)
+ local endx, endy
+ local segments = floor((aa-ab+44.999999999)/45)
+ if segments == 0 then
+ return do_transform(matrix, x,y)
+ end
+ local theta = (aa-ab) / segments
+ while segments > 0 do
+ local x1, y1, x2, y2, x3, y3 = arc_to_curve(x,y,r,aa,-theta)
+ local px1, py1 = do_transform(matrix,x1,y1)
+ local px2, py2 = do_transform(matrix,x2,y2)
+ endx, endy = do_transform(matrix,x3,y3)
+ path[#path+1] = { "curveto", px1 , py1 , px2 , py2 , endx , endy }
+ segments = segments - 1
+ aa = aa - theta
+ end
+ return endx, endy
+end
+
+local function commonarc(action)
+ local e = pop_opstack()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc, td, te = a[1], b[1], c[1], d[1], e[1], f[1]
+ if not (ta == 'real' or ta == 'integer') then return ps_error('typecheck') end
+ if not (tb == 'real' or tb == 'integer') then return ps_error('typecheck') end
+ if not (tc == 'real' or tc == 'integer') then return ps_error('typecheck') end
+ if not (td == 'real' or td == 'integer') then return ps_error('typecheck') end
+ if not (te == 'real' or te == 'integer') then return ps_error('typecheck') end
+ local position = gsstate.position
+ local path = gsstate.path
+ local matrix = gsstate.matrix
+ local vd = d[4]
+ local ve = e[4]
+ if vd < 0 or ve < 0 or vd > 360 or ve > 360 or (vd-ve) <= 0 then
+ return ps_error('limitcheck')
+ end
+ local r = c[4]
+ if r == 0 then
+ ps_error('limitcheck')
+ end
+ local x = a[4]
+ local y = b[4]
+ local x0, y0 = arc_start(x,y,r,vd) -- find starting points
+ local startx, starty = do_transform(matrix,x0,y0)
+ path[#path+1] = { #position == 2 and "lineto" or "moveto", startx, starty }
+ position[1], position[2] = action(matrix,path,x,y,r,vd,ve)
+ return true
+end
+
+function operators.arc()
+ commonarc(do_arc)
+end
+
+function operators.arcn()
+ commonarc(do_arcn)
+end
+
+local function vlength (a,b)
+ return sqrt(a^2+b^2)
+end
+
+local function vscal_ (a,b,c)
+ return a*b, a*c
+end
+
+-- this is of_the_way
+
+local function between (dist, pa, pb)
+ local pa1, pa2 = pa[1], pa[2]
+ local pb1, pb2 = pb[1], pb[2]
+ return {
+ pa1 + dist * (pb1 - pa1),
+ pa2 + dist * (pb2 - pa2),
+ }
+end
+
+local function sign (a)
+ return a < 0 and -1 or 1
+end
+
+local function do_arcto(x,y,r) -- todo: check with original
+ local h = gsstate.position
+ local tx1, tx2, ty1, ty2
+ local c1, c2
+ local x1, x2 = x[1], x[2]
+ local y1, y2 = y[1], y[2]
+ local h1, h2 = h[1], h[2]
+ local ux, uy = x1 - h1, x2 - h2
+ local vx, vy = y1 - x1, y2 - x2
+ local lx, ly = vlength(ux,uy), vlength(vx,vy)
+ local sx, sy = ux*vy - uy*vx, ux*vx + uy*vy
+ if sx == 0 and sy == 0 then
+ sx = r
+ sy = 0
+ else
+ sx = r
+ sy = atan2(sx,sy)
+ end
+ local a_arcto = sx*tan(abs(sy)/2)
+ if sx*sy*lx*ly == 0 then
+ tx1 = x1
+ tx2 = x2
+ ty1 = x1
+ ty2 = x2
+ c1 = x1
+ c2 = x2
+ else
+ local tx = between(a_arcto/lx,x,h)
+ local ty = between(a_arcto/ly,x,y)
+ local cc, dd = vscal_(sign(sy)*sx/lx,-uy,ux)
+ tx1 = tx[1]
+ tx2 = tx[2]
+ ty1 = ty[1]
+ ty2 = ty[2]
+ c1 = tx1 + cc
+ c2 = tx2 + dd
+ end
+ -- now tx is the starting point, ty is the endpoint,
+ -- c is the center of the circle. find the two angles
+ local anga = deg(atan2(tx2-c2,tx1-c1)) -- todo, -90 is wrong
+ local angb = deg(atan2(ty2-c2,ty1-c1)) -- todo, -90 is wrong
+ return c1, c2, r, anga, angb, tx1, tx2, ty1, ty2
+end
+
+function operators.arcto()
+ local e = pop_opstack()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc, td, te = a[1], b[2], c[1], d[1], e[1]
+ if not (ta == 'real' or ta == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tc == 'real' or tc == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (td == 'real' or td == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (te == 'real' or te == 'integer') then
+ return ps_error('typecheck')
+ end
+ local x1, y1, x2, y2, r = a[4], b[4], c[4], d[4], e[4]
+ local position = gsstate.position
+ local path = gsstate.path
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y, r, anga, angb, tx1, tx2, ty1, ty2 = do_arcto({x1,y1},{x2, y2},r)
+ local vx, vy = do_transform(gsstate.matrix,tx1,tx2)
+ path[#path+1] = { "lineto", vx, vy }
+ if anga == angb then
+ -- do nothing
+ elseif anga > angb then
+ position[1], position[2] = do_arcn(x,y,r,anga,angb)
+ else
+ position[1], position[2] = do_arc (x,y,r,anga,angb)
+ end
+ push_opstack { 'real', 'unlimited', 'literal', tx1 }
+ push_opstack { 'real', 'unlimited', 'literal', tx2 }
+ push_opstack { 'real', 'unlimited', 'literal', ty1 }
+ push_opstack { 'real', 'unlimited', 'literal', ty2 }
+end
+
+function operators.curveto()
+ local f = pop_opstack()
+ local e = pop_opstack()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local f1 = f[1] if not (f1 == 'real' or f1 == 'integer') then return ps_error('typecheck') end
+ local e1 = e[1] if not (e1 == 'real' or e1 == 'integer') then return ps_error('typecheck') end
+ local d1 = d[1] if not (d1 == 'real' or d1 == 'integer') then return ps_error('typecheck') end
+ local c1 = c[1] if not (c1 == 'real' or c1 == 'integer') then return ps_error('typecheck') end
+ local b1 = b[1] if not (b1 == 'real' or b1 == 'integer') then return ps_error('typecheck') end
+ local a1 = a[1] if not (a1 == 'real' or a1 == 'integer') then return ps_error('typecheck') end
+ --
+ if #gsstate.position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ --
+ local matrix = gsstate.matrix
+ local x, y = do_transform(matrix, e[4], f[4])
+ local ax, ay = do_transform(matrix, a[4], b[4])
+ local bx, by = do_transform(matrix, c[4], d[4])
+ gsstate.position = { x, y }
+ --
+ local path = gsstate.path
+ path[#path+1] = { "curveto", ax, ay, bx, by, x, y }
+ return true
+end
+
+function operators.rcurveto()
+ local f = pop_opstack()
+ local e = pop_opstack()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ft if not (ft == 'real' or ft == 'integer') then return ps_error('typecheck') end
+ local et if not (et == 'real' or et == 'integer') then return ps_error('typecheck') end
+ local dt if not (dt == 'real' or dt == 'integer') then return ps_error('typecheck') end
+ local ct if not (ct == 'real' or ct == 'integer') then return ps_error('typecheck') end
+ local bt if not (bt == 'real' or bt == 'integer') then return ps_error('typecheck') end
+ local at if not (at == 'real' or at == 'integer') then return ps_error('typecheck') end
+ local position = gsstate.position
+ local path = gsstate.path
+ if #position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ local x, y = do_transform(matrix, e[4], f[4])
+ local ax, ay = do_transform(matrix, a[4], b[4])
+ local bx, by = do_transform(matrix, c[4], d[4])
+ local px = position[1] + x
+ local py = position[2] + y
+ path[#path+1] = {
+ "curveto",
+ position[1] + ax,
+ position[2] + ay,
+ position[1] + bx,
+ position[2] + by,
+ px,
+ py
+ }
+ position[1] = px
+ position[2] = py
+ return true
+end
+
+function operators.closepath()
+ local path = gsstate.path
+ local length = #path
+ if length > 0 and path[length][1] ~= 'closepath' then
+ local m = path[1]
+ local a = m[2]
+ local b = m[3]
+ local x, y = do_transform(gsstate.matrix, a, b)
+ gsstate.position = { x, y }
+ path[length+1] = { "closepath", x, y }
+ end
+ return true
+end
+
+-- finds a point on a bezier curve
+-- P(x,y) = (1-t)^3*(x0,y0)+3*(1-t)^2*t*(x1,y1)+3*(1-t)*t^2*(x2,y2)+t^3*(x3,y3)
+
+local function bezier_at(t,x0,y0,x1,y1,x2,y2,x3,y3)
+ local v = (1 - t)
+ local x = (v^3)*x0 + 3*(v^2)*t*x1 + 3*v*(t^2)*x2 + (t^3)*x3
+ local y = (v^3)*y0 + 3*(v^2)*t*y1 + 3*v*(t^2)*y2 + (t^3)*y3
+ return x, y
+end
+
+local delta = 10 -- 100
+
+local function good_enough (flatness,c,ct1,ct2,l)
+ local c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y = c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8]
+ local l0x, l0y, l1x, l1y = l[1], l[2], l[3], l[4]
+ local t = 0
+ while t < delta do
+ local td = t/delta
+ local bx, by = bezier_at(ct1+(ct2-ct1)*td,c0x,c0y,c1x,c1y,c2x,c2y,c3x,c3y)
+ local lx, ly = (1-td)*l0x + td*l1x, (1-td)*l0y + td*l1y
+ local dist = vlength(bx-lx,by-ly)
+ if dist > flatness then
+ return false
+ end
+ t = t + 1
+ end
+ return true
+end
+
+-- argument d is recursion depth, 10 levels should be enough to reach a conclusion
+-- (and already generates over 1000 lineto's in the worst case)
+
+local function splitter (flatness,p,d,c,ct1,ct2,l)
+ local c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y = c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8]
+ d = d + 1
+ local r = good_enough(flatness,c,ct1,ct1+ct2,l)
+ if r or d > 10 then
+ p[#p + 1] = { 'lineto', l[3], l[4] }
+ else
+ local ct22 = ct2/2
+ local l2x, l2y = bezier_at(ct1+ct22,c0x,c0y,c1x,c1y,c2x,c2y,c3x,c3y)
+ local l1 = { l[1], l[2], l2x, l2y }
+ local l2 = { l2x, l2y, l[3], l[4] }
+ splitter(flatness,p,d,c,ct1,ct22,l1)
+ splitter(flatness,p,d,c,ct1+ct22,ct22,l2)
+ end
+end
+
+local function flattencurve( homex, homey, curve, flatness)
+ local p = { }
+ local c6 = curve[6]
+ local c7 = curve[7]
+ local thecurve = { homex, homey, curve[2], curve[3], curve[4], curve[5], c6, c7 }
+ local theline = { homex, homey, c6, c7 }
+ splitter(flatness, p, 0, thecurve, 0, 1, theline)
+ return p
+end
+
+local function do_flattenpath (p, flatness)
+ local x, y
+ local px = { }
+ local nx = 0
+ -- we don't care about differences less than a a permille of a point, ever
+ if flatness < 0.001 then
+ flatness = 0.001
+ end
+ if p then
+ for i=1,#p do
+ local v = p[i]
+ local t = v[1]
+ if t == "curveto" then
+ local pxl = flattencurve(x,y,v,flatness)
+ for i=1,#pxl do
+ nx = nx + 1 ; px[nx] = pxl[i]
+ end
+ x, y = v[6], v[7]
+ elseif t == "lineto" or t == "moveto" then
+ x, y = v[2], v[3]
+ nx = nx + 1 ; px[nx] = v
+ else
+ nx = nx + 1 ; px[nx] = v
+ end
+ end
+ end
+ return px
+end
+
+function operators.flattenpath()
+ gsstate.path = do_flattenpath(gsstate.path,gsstate.flatness)
+end
+
+function operators.clippath()
+ gsstate.path = gsstate.clip
+ return true
+end
+
+function operators.initclip()
+ device.initclip()
+ return true
+end
+
+function operators.eofill()
+ local color = gsstate.color
+ local thecolor = color[color.type]
+ if type(thecolor) == "table" then
+ thecolor = { unpack(thecolor) }
+ end
+ currentpage[#currentpage+1] = {
+ type = 'eofill',
+ path = gsstate.path,
+ colortype = color.type,
+ color = thecolor,
+ }
+ operators.newpath()
+ return true
+end
+
+-- todo: this only fixes the output, not the actual clipping path
+-- in the gsstate !
+
+function operators.clip()
+ currentpage[#currentpage+1] = {
+ type = 'clip',
+ path = gsstate.path,
+ }
+ return true
+end
+
+-- todo: this only fixes the output, not the actual clipping path
+-- in the gsstate !
+
+function operators.eoclip()
+ currentpage[#currentpage+1] = {
+ type = 'eoclip',
+ path = gsstate.path,
+ }
+ return true
+end
+
+-- Painting operators
+--
+-- +erasepage +fill +eofill +stroke -image -imagemask
+
+-- general graphics todo: transfer function, flatness
+
+function operators.erasepage()
+ currentpage = { }
+ return true
+end
+
+function operators.stroke()
+ local color = gsstate.color
+ local ctype = color.type
+ local thecolor = color[ctype]
+ -- if type(thecolor) == "table" then
+ -- thecolor = { unpack(thecolor) }
+ -- end
+ currentpage[#currentpage+1] = {
+ type = 'stroke',
+ path = gsstate.path,
+ colortype = ctype,
+ color = thecolor,
+ miterlimit = gsstate.miterlimit,
+ linewidth = gsstate.linewidth,
+ linecap = gsstate.linecap,
+ linejoin = gsstate.linejoin,
+ -- dashpattern = { unpack (gsstate.dashpattern) }, -- unpack? we don't manipulate
+ dashpattern = gsstate.dashpattern,
+ dashoffset = gsstate.dashoffset
+ }
+ operators.newpath()
+ return true
+end
+
+function operators.fill()
+ local color = gsstate.color
+ local ctype = color.type
+ local thecolor = color[ctype]
+ -- if type(thecolor) == "table" then
+ -- thecolor = { unpack(thecolor) }
+ -- end
+ currentpage[#currentpage+1] = {
+ type = 'fill',
+ path = gsstate.path,
+ colortype = ctype,
+ color = thecolor,
+ }
+ operators.newpath()
+ return true
+end
+
+-- Device setup and output operators
+--
+-- +showpage +copypage +banddevice +framedevice +nulldevice +renderbands
+
+-- will be replaced by the argument of 'new'
+
+-- this reports the bounding box of a page
+
+-- todo: linewidth for strokes
+-- todo: clips
+-- todo: strings (width&height)
+
+local calculatebox = false
+
+initializers[#initializers+1] = function()
+ calculatebox = true
+end
+
+local function boundingbox(page)
+
+ local bounding = specials.boundingbox
+ if bounding and not calculatebox then
+ return unpack(bounding)
+ end
+
+ local minx, miny, maxx, maxy
+ local startx, starty
+ local linewidth
+
+ local function update_bbox (x,y)
+ if not minx then
+ minx = x
+ miny = y
+ maxx = x
+ maxy = y
+ end
+ if linewidth then
+ local xx = x + linewidth/2
+ if xx > maxx then maxx = xx elseif xx < minx then minx = xx end
+ local xx = x - linewidth/2
+ if xx > maxx then maxx = xx elseif xx < minx then minx = xx end
+ local yy = y + linewidth/2
+ if yy > maxy then maxy = yy elseif yy < miny then miny = yy end
+ local yy = y - linewidth/2
+ if yy > maxy then maxy = yy elseif yy < miny then miny = yy end
+ else
+ if x > maxx then maxx = x elseif x < minx then minx = x end
+ if y > maxy then maxy = y elseif y < miny then miny = y end
+ end
+ startx, starty = x, y
+ end
+
+ for i=1,#page do
+ local object = page[i]
+ local p = do_flattenpath(object.path,0.5)
+ linewidth = object.type == "stroke" and object.linewidth
+ for i=1,#p do
+ local segment = p[i]
+ local type = segment[1]
+ if type == "lineto" then
+ if startx then
+ update_bbox(startx,starty)
+ end
+ update_bbox(segment[2],segment[3])
+ elseif type == "curveto" then
+ if startx then
+ update_bbox(startx,starty)
+ end
+ update_bbox(segment[6],segment[7])
+ elseif type == "moveto" then
+ startx, starty = segment[2], segment[3]
+ end
+ end
+ end
+ if minx then
+ return minx, miny, maxx, maxy
+ else
+ return 0, 0, 0, 0
+ end
+end
+
+------------------------------------------------------------------
+
+local function boundingbox (page)
+
+ local bounding = specials.boundingbox
+ if bounding and not calculatebox then
+ return unpack(bounding)
+ end
+
+ local minx, miny, maxx, maxy
+ local startx, starty
+ local linewidth
+
+ local function update_bbox (x,y)
+ if not minx then
+ minx = x
+ miny = y
+ maxx = x
+ maxy = y
+ end
+ if linewidth then
+ local xx = x + linewidth/2
+ if xx > maxx then
+ maxx = xx
+ elseif xx < minx then
+ minx = xx
+ end
+ local xx = x - linewidth/2
+ if xx > maxx then
+ maxx = xx
+ elseif xx < minx then
+ minx = xx
+ end
+ local yy = y + linewidth/2
+ if yy > maxy then
+ maxy = yy
+ elseif yy < miny then
+ miny = yy
+ end
+ local yy = y - linewidth/2
+ if yy > maxy then
+ maxy = yy
+ elseif yy < miny then
+ miny = yy
+ end
+ else
+ if x > maxx then
+ maxx = x
+ elseif x < minx then
+ minx = x
+ end
+ if y > maxy then
+ maxy = y
+ elseif y < miny then
+ miny = y
+ end
+ end
+ startx, starty = x, y
+ end
+
+ local delta = 10 -- 100
+
+ local function good_enough (ct1,ct2, c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, l0x, l0y, l1x, l1y)
+ local t = 0
+ while t < delta do
+ local td = t/delta
+ local bx, by = bezier_at(ct1+(ct2-ct1)*td,c0x,c0y,c1x,c1y,c2x,c2y,c3x,c3y)
+ local lx, ly = (1-td)*l0x + td*l1x, (1-td)*l0y + td*l1y
+ local dist = sqrt((bx-lx)^2+(by-ly)^2) -- vlength(bx-lx,by-ly)
+ if dist > 0.5 then
+ return false
+ end
+ t = t + 1
+ end
+ return true
+ end
+
+ local function splitter (d,ct1,ct2, c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, l0x, l0y, l1x, l1y)
+ d = d + 1
+ local r = good_enough(ct1,ct1+ct2, c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, l0x, l0y, l1x, l1y)
+ if r or d > 10 then
+ if startx then
+ update_bbox(l1x, l1y)
+ end
+ else
+ local ct22 = ct2/2
+ local l2x, l2y = bezier_at(ct1+ct22,c0x,c0y,c1x,c1y,c2x,c2y,c3x,c3y)
+ splitter(d,ct1, ct22, c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, l0x, l0y, l2x, l2y)
+ splitter(d,ct1+ct22,ct22, c0x, c0y, c1x, c1y, c2x, c2y, c3x, c3y, l2x, l2y, l1x, l1y)
+ end
+ end
+
+ for i=1,#page do
+ local object = page[i]
+ local p = object.path
+ linewidth = object.type == "stroke" and object.linewidth
+ for i=1,#p do
+ local segment = p[i]
+ local type = segment[1]
+ if type == "lineto" then
+ if startx then
+ update_bbox(startx,starty)
+ end
+ update_bbox(segment[2],segment[3])
+ elseif type == "curveto" then
+ local c6 = segment[6]
+ local c7 = segment[7]
+ splitter(0, 0, 1, startx, starty, segment[2], segment[3], segment[4], segment[5], c6, c7, startx, starty, c6, c7)
+ elseif type == "moveto" then
+ startx, starty = segment[2], segment[3]
+ end
+ end
+ end
+ if minx then
+ return minx, miny, maxx, maxy
+ else
+ return 0, 0, 0, 0
+ end
+end
+
+------------------------------------------------------------------
+
+-- most time is spend in calculating the boundingbox
+
+-- NULL output
+
+devices.null = {
+ initgraphics = function() gsstate.matrix = { 1, 0, 0, 1, 0, 0 } end,
+ initclip = function() gsstate.clip = { } end,
+ showpage = function() return "" end,
+}
+
+-- PDF output
+
+local pdf = {
+ initgraphics = function() gsstate.matrix = { 1, 0, 0, 1, 0, 0 } end,
+ initclip = function() gsstate.clip = { } end,
+ -- startpage = function(llc,lly,urx,ury) end,
+ -- flushpage = function() end,
+ -- stoppage = function() end,
+}
+
+devices.pdf = pdf
+
+function pdf.showpage(page)
+ --
+ local startpage = pdf.startpage
+ local stoppage = pdf.stoppage
+ local flushpage = pdf.flushpage
+ local showfont = pdf.showfont
+ --
+ if not flushpage then
+ return
+ end
+ --
+ if startpage then
+ startpage(boundingbox(page))
+ end
+ --
+ local t = { "q" }
+ local n = 1
+ local g_colortype = "notacolor"
+ local g_color = ""
+ local g_miterlimit = -1
+ local g_linejoin = -1
+ local g_linecap = -1
+ local g_linewidth = -1
+ local g_dashpattern = nil
+ local g_dashoffset = -1
+ local flush = devices.pdf.flush
+ for i=1,#page do
+ local object = page[i]
+ local path = object.path
+ local otyp = object.type
+ if otype ~= "clip" and otype ~= "eoclip" then
+ local colortype = object.colortype
+ local color = object.color
+ if colortype == "gray" then
+ local v = formatters["%f g %f G"](color,color)
+ if g_color ~= v then
+ g_colortype = "gray"
+ g_color = v
+ n = n + 1 ; t[n] = v
+ end
+ elseif colortype == "rgb" then
+ local r, g, b = color[1], color[2], color[3]
+ local v = formatters["%f %f %f rg %f %f %f RG"](r,g,b,r,g,b)
+ if g_color ~= v then
+ g_colortype = "rgb"
+ g_color = v
+ n = n + 1 ; t[n] = v
+ end
+ elseif colortype == "cmyk" then
+ local c, m, y, k = color[1], color[2], color[3], color[4]
+ local v = formatters["%f %f %f %f k %f %f %f %f K"](c,m,y,k,c,m,y,k)
+ if g_color ~= v then
+ g_colortype = "cmyk"
+ g_color = v
+ n = n + 1 ; t[n] = v
+ end
+ elseif colortype == "hsb" then
+ local r, g, b = hsv_to_rgb(color[1],color[2],color[3])
+ local v = formatters["%f %f %f rg %f %f %f RG"](r,g,b,r,g,b)
+ if g_color ~= v then
+ g_colortype = "rgb"
+ g_color = v
+ n = n + 1 ; t[n] = v
+ end
+ end
+ end
+ if otype == "stroke" then
+ local miterlimit = object.miterlimit
+ if g_miterlimit ~= miterlimit then
+ g_miterlimit = miterlimit
+ n = n + 1 ; t[n] = formatters["%f M"](miterlimit)
+ end
+ local linejoin = object.linejoin
+ if g_linejoin ~= linejoin then
+ g_linejoin = linejoin
+ n = n + 1 ; t[n] = formatters["%d j"](linejoin)
+ end
+ local linecap = object.linecap
+ if g_linecap ~= linecap then
+ g_linecap = linecap
+ n = n + 1 ; t[n] = formatters["%d J"](linecap)
+ end
+ local linewidth = object.linewidth
+ if g_linewidth ~= linewidth then
+ g_linewidth = linewidth
+ n = n + 1 ; t[n] = formatters["%f w"](linewidth)
+ end
+ local dashpattern = object.dashpattern
+ local dashoffset = object.dashoffset
+ if g_dashpattern ~= dashpattern or g_dashoffset ~= dashoffset then
+ g_dashpattern = dashpattern
+ g_dashoffset = dashoffset
+ local l = #dashpattern
+ if l == 0 then
+ n = n + 1 ; t[n] = "[] 0 d"
+ else
+ n = n + 1 ; t[n] = formatters["[% t] %d d"](dashpattern,dashoffset)
+ end
+ end
+ end
+ if path then
+ for i=1,#path do
+ local segment = path[i]
+ local styp = segment[1]
+ if styp == "moveto" then
+ n = n + 1 ; t[n] = formatters["%f %f m"](segment[2],segment[3])
+ elseif styp == "lineto" then
+ n = n + 1 ; t[n] = formatters["%f %f l"](segment[2],segment[3])
+ elseif styp == "curveto" then
+ n = n + 1 ; t[n] = formatters["%f %f %f %f %f %f c"](segment[2],segment[3],segment[4],segment[5],segment[6],segment[7])
+ elseif styp == "closepath" then
+ n = n + 1 ; t[n] = "h"
+ else
+ report("unknown path segment type %a",styp)
+ end
+ end
+ end
+ if otyp == "stroke" then
+ n = n + 1 ; t[n] = "S"
+ elseif otyp == "fill" then
+ n = n + 1 ; t[n] = "f"
+ elseif otyp == "eofill" then
+ n = n + 1 ; t[n] = "f*"
+ elseif otyp == "clip" then
+ n = n + 1 ; t[n] = "W n"
+ elseif otyp == "eoclip" then
+ n = n + 1 ; t[n] = "W* n"
+ elseif otyp == "show" then
+ if showfont then
+ if n > 0 then
+ flushpage(concat(t,"\n"))
+ n = 0 ; t = { }
+ end
+ showfont(object)
+ end
+ else
+ -- nothing to do
+ end
+ end
+ n = n + 1 ; t[n] = "Q"
+ flushpage(concat(t,"\n"))
+ --
+ if startpage then
+ stoppage()
+ end
+end
+
+function operators.showpage()
+ local copies = lookup("#copies")
+ if copies and copies[1] == 'integer' and copies[4] >= 1 then
+ local amount = floor(copies[4])
+ local render = device.showpage
+ if render then
+ for i=1,amount do
+ render(currentpage)
+ end
+ end
+ end
+ operators.erasepage()
+ operators.initgraphics()
+ return true
+end
+
+function operators.copypage()
+ local render = device.showpage
+ if render then
+ render(currentpage)
+ end
+ return true
+end
+
+function operators.banddevice()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc, td = a[1], b[1], c[1], d[1]
+ if not (ta == 'array' and a[5] == 6) then
+ return ps_error('typecheck')
+ end
+ if not (td == 'array' and d[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tc == 'real' or tc == 'integer') then
+ return ps_error('typecheck')
+ end
+ local dev = device.banddevice
+ if dev then
+ dev(a,b,c,d)
+ else
+ return ps_error('undefined') -- fixed
+ end
+ return true
+end
+
+function operators.renderbands()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if not (a[1] == 'array' and a[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ local dev = device.renderbands
+ if dev then
+ dev(d)
+ else
+ return ps_error('undefined')
+ end
+ return true
+end
+
+function operators.framedevice()
+ local d = pop_opstack()
+ local c = pop_opstack()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ local ta, tb, tc, td = a[1], b[1], c[1], d[1]
+ if not (ta == 'array' and a[5] == 6) then
+ return ps_error('typecheck')
+ end
+ if not (tb == 'real' or tb == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (tc == 'real' or tc == 'integer') then
+ return ps_error('typecheck')
+ end
+ if not (td == 'array' and d[3] == 'executable') then
+ return ps_error('typecheck')
+ end
+ local dev = device.framedevice
+ if dev then
+ dev(a,b,c,d)
+ else
+ return ps_error('undefined')
+ end
+ return true
+end
+
+function operators.nulldevice()
+ gsstate.device = "null"
+ operators.initgraphics()
+ return true
+end
+
+-- Character and font operators
+--
+-- +definefont *findfont +scalefont +makefont +setfont +currentfont +show -ashow -widthshow
+-- -awidthshow +kshow -stringwidth ^FontDirectory ^StandardEncoding
+
+-- Fonts are a bit special because it is needed to cooperate with the enclosing PDF document.
+
+local FontDirectory
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ FontDirectory = nil
+ else
+ FontDirectory = add_VM {
+ access = 'unlimited',
+ size = 0,
+ maxsize = 5000,
+ dict = { },
+ }
+ end
+end
+
+-- loading actual fonts is a worryingly slow exercise
+
+local fontmap
+
+initializers[#initializers+1] = function()
+ if reset then
+ fontmap = nil
+ else
+ fontmap = {
+ ['Courier-Bold'] = 'NimbusMonL-Bold.ps',
+ ['Courier-BoldOblique'] = 'NimbusMonL-BoldObli.ps',
+ ['Courier'] = 'NimbusMonL-Regu.ps',
+ ['Courier-Oblique'] = 'NimbusMonL-ReguObli.ps',
+ ['Times-Bold'] = 'NimbusRomNo9L-Medi.ps',
+ ['Times-BoldItalic'] = 'NimbusRomNo9L-MediItal.ps',
+ ['Times-Roman'] = 'NimbusRomNo9L-Regu.ps',
+ ['Times-Italic'] = 'NimbusRomNo9L-ReguItal.ps',
+ ['Helvetica-Bold'] = 'NimbusSanL-Bold.ps',
+ ['Helvetica-BoldOblique'] = 'NimbusSanL-BoldItal.ps',
+ ['Helvetica'] = 'NimbusSanL-Regu.ps',
+ ['Helvetica-Oblique'] = 'NimbusSanL-ReguItal.ps',
+ ['Symbol'] = 'StandardSymL.ps',
+ }
+ end
+end
+
+-- this can be overwritten by the user
+
+local function findfont(fontname)
+ return fontmap[fontname]
+end
+
+-- tests required keys in a font dict
+
+local function checkfont(f)
+ -- FontMatrix
+ local matrix = f['FontMatrix']
+ if not matrix or matrix[1] ~= 'array' or matrix[5] ~= 6 then
+ return false
+ end
+ local thearray = get_VM(matrix[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return false
+ end
+ end
+ -- FontType
+ local ftype = f['FontType']
+ if not ftype or ftype[1] ~= 'integer' then
+ return false
+ end
+ -- FontBBox
+ local bbox = f['FontBBox']
+ -- do not test [5] here, because it can be '1' (executable array)
+ if not bbox or bbox[1] ~= 'array' or bbox[6] ~= 4 then
+ return false
+ end
+ local thearray = get_VM(bbox[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return false
+ end
+ end
+ -- Encoding
+ local bbox = f['Encoding']
+ if not bbox or bbox[1] ~= 'array' or bbox[5] ~= 256 then
+ return false
+ end
+ local thearray = get_VM(bbox[4])
+ for i=1,#thearray do
+ local v = thearray[i]
+ local tv = v[1]
+ if tv[1] ~= 'name' then
+ return false
+ end
+ end
+ return true
+end
+
+-- objects of type font as essentially the same as objects of type dict
+
+function operators.definefont()
+ local b = pop_opstack()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'dict' then
+ return ps_error('typecheck')
+ end
+ -- force keys to be names
+ if a[1] ~= 'name' then
+ return ps_error('typecheck')
+ end
+ local fontdict = get_VM(b[4])
+ if not checkfont(fontdict.dict) then
+ return ps_error('invalidfont')
+ end
+ -- check that a FID will fit
+ if fontdict.size == fontdict.maxsize then
+ return ps_error('invalidfont')
+ end
+ fontdict.dict['FID'] = {'font', 'executable', 'literal', b[4]}
+ fontdict.size = fontdict.size + 1
+ fontdict.access = 'read-only'
+ local dict = get_VM(FontDirectory)
+ local key = get_VM(a[4])
+ if not dict.dict[key] and dict.size == dict.maxsize then
+ -- return ps_error('dictfull') -- level 1 only
+ end
+ if not dict.dict[key] then
+ dict.size = dict.size + 1
+ end
+ dict.dict[key] = fontdict.dict['FID']
+ push_opstack(b)
+ return true
+end
+
+function operators.findfont()
+ local a = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if a[1] ~= 'name' then
+ return ps_error('typecheck')
+ end
+ local fontdict = get_VM(FontDirectory)
+ local key = get_VM(a[4])
+ local dict = dict.dict
+ if not dict[key] then
+ fname = findfont(key)
+ if not fname then
+ return ps_error('invalidfont')
+ end
+ local oldfontkeys = { }
+ for k, v in next, dict do
+ oldfontkeys[i] = 1
+ end
+ report("loading font file %a",fname)
+ local theopstack = opstackptr
+ local run = formatters['/eexec {pop} def (%s) run'](fname)
+ push_execstack { '.stopped', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ push_execstack { 'string', 'unlimited', 'executable', add_VM(run), 1, #run }
+ while curstack < execstackptr do
+ do_exec()
+ end
+ if execstack[execstackptr][1] == '.stopped' then
+ pop_execstack()
+ end
+ opstackptr = theopstack
+ local fkey, ftab
+ for k, v in next, dict do
+ if not oldfontkeys[k] then
+ -- this is the new dict
+ fkey = k
+ ftab = v
+ break
+ end
+ end
+ if not fkey then
+ return ps_error('invalidfont')
+ end
+ dict[key] = ftab -- set up the user requested name as well
+ end
+ push_opstack(dict[key])
+ return true
+end
+
+local function pushscaledcopy(fontdict,matrix)
+ local olddict = fontdict.dict
+ if not checkfont(olddict) then
+ return ps_error('invalidfont')
+ end
+ local newdict = { }
+ local oldsize = fontdict.size
+ local newfontdict = {
+ dict = newdict,
+ access = 'read-only',
+ size = oldsize,
+ maxsize = oldsize,
+ }
+ for k, v in next, olddict do
+ if k == "FontMatrix" then
+ local oldmatrix = get_VM(v[4])
+ local old = {
+ oldmatrix[1][4],
+ oldmatrix[2][4],
+ oldmatrix[3][4],
+ oldmatrix[4][4],
+ oldmatrix[5][4],
+ oldmatrix[6][4],
+ }
+ local c = do_concat(old,matrix)
+ local new = {
+ { 'real', 'unlimited', 'literal', c[1] },
+ { 'real', 'unlimited', 'literal', c[2] },
+ { 'real', 'unlimited', 'literal', c[3] },
+ { 'real', 'unlimited', 'literal', c[4] },
+ { 'real', 'unlimited', 'literal', c[5] },
+ { 'real', 'unlimited', 'literal', c[6] }
+ }
+ newdict[k] = { 'array', 'unlimited', 'literal', add_VM(new), 6, 6 }
+ elseif k == "FID" then
+ -- updated later
+ else
+ newfontdict.dict[k] = v
+ end
+ end
+ local f = add_VM(newfontdict)
+ newdict['FID'] = { 'font', 'read-only', 'literal', f }
+ push_opstack { 'font', 'read-only', 'literal', f } -- share ?
+ return true
+end
+
+function operators.scalefont()
+ local s = pop_opstack()
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'font' then
+ return ps_error('typecheck')
+ end
+ if not (s[1] == 'integer' or s[1] == 'real') then
+ return ps_error('typecheck')
+ end
+ local scals = s[4]
+ local matrix = { scale, 0, 0, scale, 0, 0 }
+ local fontdict = get_VM(b[4])
+ return pushscaledcopy(fontdict,matrix)
+end
+
+function operators.makefont()
+ local s = pop_opstack()
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'font' then
+ return ps_error('typecheck')
+ end
+ if s[1] ~= 'array' then
+ return ps_error('typecheck')
+ end
+ if s[6] ~= 6 then
+ return ps_error('rangecheck')
+ end
+ local matrix = { }
+ local array = get_VM(s[4])
+ for i=1,#array do
+ local v = array[i]
+ local tv = v[1]
+ if not (tv == 'real' or tv == 'integer') then
+ return ps_error('typecheck')
+ end
+ matrix[i] = v[4]
+ end
+ local fontdict = get_VM(b[4])
+ pushscaledcopy(fontdict,matrix)
+ return true
+end
+
+function operators.setfont()
+ local b = pop_opstack()
+ if not b then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= 'font' then
+ return ps_error('typecheck')
+ end
+ gsstate.font = b[4]
+ return true
+end
+
+-- todo: the invalidfont error is temporary. 'start' should set up at least one font in
+-- FontDirectory and assing it as the current font
+
+function operators.currentfont()
+ if not gsstate.font then
+ return ps_error('invalidfont')
+ end
+ push_opstack {'font', 'read-only', 'literal', gsstate.font }
+ return true
+end
+
+function do_show(fontdict,s)
+ local stringmatrix = { }
+ local truematrix = { }
+ local stringencoding = { }
+ --
+ local dict = fontdict.dict
+ local fontname = get_VM(dict['FontName'][4])
+ local fontmatrix = get_VM(dict['FontMatrix'][4])
+ local encoding = get_VM(dict['Encoding'][4])
+ local matrix = gsstate.matrix
+ local position = gsstate.position
+ local color = gsstate.color
+ local colortype = color.type
+ local colordata = color[colortype]
+ --
+ if fontmatrix then
+ for i=1,#fontmatrix do
+ stringmatrix[i] = fontmatrix[i][4]
+ end
+ end
+ if matrix then
+ for i=1,#matrix do
+ truematrix[i] = matrix[i]
+ end
+ end
+ if encoding then
+ for i=1,#m do
+ stringencoding[i] = get_VM(e[i][4])
+ end
+ end
+ if type(colordata) == "table" then
+ colordata = { unpack(colordata) } -- copy
+ end
+ currentpage[#currentpage+1] = {
+ type = 'show',
+ string = s,
+ fontname = fontname,
+ adjust = nil,
+ x = position[1],
+ y = position[2],
+ encoding = stringencoding,
+ fontmatrix = stringmatrix,
+ matrix = truematrix,
+ colortype = colortype,
+ color = colordata,
+ }
+ -- todo: update currentpoint, needing 'stringwidth'
+end
+
+function operators.show()
+ local s = pop_opstack()
+ if not s then
+ return ps_error('stackunderflow')
+ end
+ if s[1] ~= 'string' then
+ return ps_error('typecheck')
+ end
+ if #gsstate.position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ if not gsstate.font then
+ return ps_error('invalidfont')
+ end
+ local fontdict = get_VM(gsstate.font)
+ if fontdict.access == "noaccess" then
+ return ps_error('invalidaccess')
+ end
+ if not checkfont(fontdict.dict) then
+ return ps_error('invalidfont')
+ end
+ do_show(fontdict,get_VM(s[4]))
+end
+
+
+function operators.kshow()
+ local a = pop_opstack()
+ local b = pop_opstack()
+ if not a then
+ return ps_error('stackunderflow')
+ end
+ if b[1] ~= "array" and b[3] == 'executable' then
+ return ps_error('typecheck')
+ end
+ if b[2] == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ if not a[1] == 'string' then
+ return ps_error('typecheck')
+ end
+ if a[2] == "execute-only" or a[2] == 'noaccess' then
+ return ps_error('invalidaccess')
+ end
+ local fontdict = get_VM(gsstate.font)
+ if fontdict.access == "noaccess" then
+ return ps_error('invalidaccess')
+ end
+ if #gsstate.position == 0 then
+ return ps_error('nocurrentpoint')
+ end
+ -- ok, that were the errors
+ push_execstack { '.exit', 'unlimited', 'literal', false }
+ local curstack = execstackptr
+ if a[6] == 0 then
+ return true
+ end
+ b[7] = 'i'
+ local thestring = get_VM(a[4])
+ local v = sub(thestring,1,1)
+ thestring = sub(thestring,2,-1)
+ do_show(fontdict,v)
+ for w in gmatch(thestring,".") do
+ if stopped then
+ stopped = false
+ return false
+ end
+ push_opstack { 'integer', 'unlimited', 'literal', byte(v) }
+ push_opstack { 'integer', 'unlimited', 'literal', byte(w) }
+ b[5] = 1
+ push_execstack(b)
+ while curstack < execstackptr do
+ do_exec()
+ end
+ local entry = execstack[execstackptr]
+ if entry[1] == '.exit' and entry[4] == true then
+ pop_execstack()
+ return true;
+ end
+ do_show(fontdict,w)
+ v = w
+ end
+ return true
+end
+
+local the_standardencoding = {
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand',
+ 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma',
+ 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+ 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+ 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash',
+ 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b',
+ 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar',
+ 'braceright', 'asciitilde', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen',
+ 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft',
+ 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl',
+ '.notdef', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '.notdef',
+ 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase',
+ 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '.notdef',
+ 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron',
+ 'breve', 'dotaccent', 'dieresis', '.notdef', 'ring', 'cedilla',
+ '.notdef', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ '.notdef', '.notdef', '.notdef', 'AE', '.notdef', 'ordfeminine',
+ '.notdef', '.notdef', '.notdef', '.notdef', 'Lslash', 'Oslash', 'OE',
+ 'ordmasculine', '.notdef', '.notdef', '.notdef', '.notdef', '.notdef',
+ 'ae', '.notdef', '.notdef', '.notdef', 'dotlessi', '.notdef',
+ '.notdef', 'lslash', 'oslash', 'oe', 'germandbls', '.notdef',
+ '.notdef', '.notdef', '.notdef'
+}
+
+local function standardencoding()
+ local a = { }
+ for i=1,#the_standardencoding do
+ a[i] = { 'name', 'unlimited', 'literal', add_VM(the_standardencoding[i]) }
+ end
+ return a
+end
+
+-- Font cache operators
+--
+-- -cachestatus -setcachedevice -setcharwidth -setcachelimit
+
+-- userdict (initially empty)
+
+local systemdict
+local userdict
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ systemdict = nil
+ else
+ dictstackptr = dictstackptr + 1
+ dictstack[dictstackptr] = add_VM {
+ access = 'unlimited',
+ maxsize = MAX_INTEGER,
+ size = 0,
+ dict = { },
+ }
+ if directvm then
+ systemdict = dictstack[dictstackptr]
+ else
+ systemdict = dictstackptr
+ end
+ end
+end
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ userdict = nil
+ else
+ dictstackptr = dictstackptr + 1
+ dictstack[dictstackptr] = add_VM {
+ access = 'unlimited',
+ maxsize = MAX_INTEGER,
+ size = 0,
+ dict = { },
+ }
+ if directvm then
+ userdict = dictstack[dictstackptr]
+ else
+ userdict = dictstackptr
+ end
+ end
+end
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ -- already done
+ else
+ local dict = {
+ ['$error'] = { 'dict', 'unlimited', 'literal', dicterror },
+ ['['] = { 'operator', 'unlimited', 'executable', operators.beginarray, '[' },
+ [']'] = { 'operator', 'unlimited', 'executable', operators.endarray, ']' },
+ -- ['='] = { 'operator', 'unlimited', 'executable', operators.EQ, '=' },
+ ['=='] = { 'operator', 'unlimited', 'executable', operators.equal, '==' },
+ ['abs'] = { 'operator', 'unlimited', 'executable', operators.abs, 'abs' },
+ ['add'] = { 'operator', 'unlimited', 'executable', operators.add, 'add' },
+ ['aload'] = { 'operator', 'unlimited', 'executable', operators.aload, 'aload' },
+ ['anchorsearch'] = { 'operator', 'unlimited', 'executable', operators.anchorsearch, 'anchorsearch' },
+ ['and'] = { 'operator', 'unlimited', 'executable', operators["and"], 'and' },
+ ['arc'] = { 'operator', 'unlimited', 'executable', operators.arc, 'arc' },
+ ['arcn'] = { 'operator', 'unlimited', 'executable', operators.arcn, 'arcn' },
+ ['arcto'] = { 'operator', 'unlimited', 'executable', operators.arcto, 'arcto' },
+ ['array'] = { 'operator', 'unlimited', 'executable', operators.array, 'array' },
+ ['astore'] = { 'operator', 'unlimited', 'executable', operators.astore, 'astore' },
+ ['atan'] = { 'operator', 'unlimited', 'executable', operators.atan, 'atan' },
+ ['banddevice'] = { 'operator', 'unlimited', 'executable', operators.banddevice, 'banddevice' },
+ ['bind'] = { 'operator', 'unlimited', 'executable', operators.bind, 'bind' },
+ ['bitshift'] = { 'operator', 'unlimited', 'executable', operators.bitshift, 'bitshift' },
+ ['begin'] = { 'operator', 'unlimited', 'executable', operators.begin, 'begin' },
+ ['bytesavailable'] = { 'operator', 'unlimited', 'executable', operators.bytesavailable, 'bytesavailable' },
+ ['ceiling'] = { 'operator', 'unlimited', 'executable', operators.ceiling, 'ceiling' },
+ ['clear'] = { 'operator', 'unlimited', 'executable', operators.clear, 'clear' },
+ ['cleartomark'] = { 'operator', 'unlimited', 'executable', operators.cleartomark, 'cleartomark' },
+ ['clip'] = { 'operator', 'unlimited', 'executable', operators.clip, 'clip' },
+ ['clippath'] = { 'operator', 'unlimited', 'executable', operators.clippath, 'clippath' },
+ ['closefile'] = { 'operator', 'unlimited', 'executable', operators.closefile, 'closefile' },
+ ['closepath'] = { 'operator', 'unlimited', 'executable', operators.closepath, 'closepath' },
+ ['concat'] = { 'operator', 'unlimited', 'executable', operators.concat, 'concat' },
+ ['concatmatrix'] = { 'operator', 'unlimited', 'executable', operators.concatmatrix, 'concatmatrix' },
+ ['copy'] = { 'operator', 'unlimited', 'executable', operators.copy, 'copy' },
+ ['copypage'] = { 'operator', 'unlimited', 'executable', operators.copypage, 'copypage' },
+ ['cos'] = { 'operator', 'unlimited', 'executable', operators.cos, 'cos' },
+ ['count'] = { 'operator', 'unlimited', 'executable', operators.count, 'count' },
+ ['countdictstack'] = { 'operator', 'unlimited', 'executable', operators.countdictstack, 'countdictstack' },
+ ['countexecstack'] = { 'operator', 'unlimited', 'executable', operators.countexecstack, 'countexecstack' },
+ ['counttomark'] = { 'operator', 'unlimited', 'executable', operators.counttomark, 'counttomark' },
+ ['currentdash'] = { 'operator', 'unlimited', 'executable', operators.currentdash, 'currentdash' },
+ ['currentdict'] = { 'operator', 'unlimited', 'executable', operators.currentdict, 'currentdict' },
+ ['currentfile'] = { 'operator', 'unlimited', 'executable', operators.currentfile, 'currentfile' },
+ ['currentflat'] = { 'operator', 'unlimited', 'executable', operators.currentflat, 'currentflat' },
+ ['currentfont'] = { 'operator', 'unlimited', 'executable', operators.currentfont, 'currentfont' },
+ ['currentgray'] = { 'operator', 'unlimited', 'executable', operators.currentgray, 'currentgray' },
+ ['currenthsbcolor'] = { 'operator', 'unlimited', 'executable', operators.currenthsbcolor, 'currenthsbcolor' },
+ ['currentlinecap'] = { 'operator', 'unlimited', 'executable', operators.currentlinecap, 'currentlinecap' },
+ ['currentlinejoin'] = { 'operator', 'unlimited', 'executable', operators.currentlinejoin, 'currentlinejoin' },
+ ['currentlinewidth'] = { 'operator', 'unlimited', 'executable', operators.currentlinewidth, 'currentlinewidth' },
+ ['currentmatrix'] = { 'operator', 'unlimited', 'executable', operators.currentmatrix, 'currentmatrix' },
+ ['currentmiterlimit'] = { 'operator', 'unlimited', 'executable', operators.currentmiterlimit, 'currentmiterlimit' },
+ ['currentpoint'] = { 'operator', 'unlimited', 'executable', operators.currentpoint, 'currentpoint' },
+ ['currentrgbcolor'] = { 'operator', 'unlimited', 'executable', operators.currentrgbcolor, 'currentrgbcolor' },
+ ['currentcmykcolor'] = { 'operator', 'unlimited', 'executable', operators.currentcmykcolor, 'currentcmykcolor' },
+ ['currentscreen'] = { 'operator', 'unlimited', 'executable', operators.currentscreen, 'currentscreen' },
+ ['currenttransfer'] = { 'operator', 'unlimited', 'executable', operators.currenttransfer, 'currenttransfer' },
+ ['curveto'] = { 'operator', 'unlimited', 'executable', operators.curveto, 'curveto' },
+ ['cvi'] = { 'operator', 'unlimited', 'executable', operators.cvi, 'cvi' },
+ ['cvlit'] = { 'operator', 'unlimited', 'executable', operators.cvlit, 'cvlit' },
+ ['cvn'] = { 'operator', 'unlimited', 'executable', operators.cvn, 'cvn' },
+ ['cvr'] = { 'operator', 'unlimited', 'executable', operators.cvr, 'cvr' },
+ ['cvrs'] = { 'operator', 'unlimited', 'executable', operators.cvrs, 'cvrs' },
+ ['cvs'] = { 'operator', 'unlimited', 'executable', operators.cvs, 'cvs' },
+ ['cvx'] = { 'operator', 'unlimited', 'executable', operators.cvx, 'cvx' },
+ ['def'] = { 'operator', 'unlimited', 'executable', operators.def, 'def' },
+ ['definefont'] = { 'operator', 'unlimited', 'executable', operators.definefont, 'definefont' },
+ ['dict'] = { 'operator', 'unlimited', 'executable', operators.dict, 'dict' },
+ ['dictstack'] = { 'operator', 'unlimited', 'executable', operators.dictstack, 'dictstack' },
+ ['div'] = { 'operator', 'unlimited', 'executable', operators.div, 'div' },
+ ['dtransform'] = { 'operator', 'unlimited', 'executable', operators.dtransform, 'dtransform' },
+ ['dup'] = { 'operator', 'unlimited', 'executable', operators.dup, 'dup' },
+ ['echo'] = { 'operator', 'unlimited', 'executable', operators.echo, 'echo' },
+ ['end'] = { 'operator', 'unlimited', 'executable', operators["end"], 'end' },
+ ['eoclip'] = { 'operator', 'unlimited', 'executable', operators.eoclip, 'eoclip' },
+ ['eofill'] = { 'operator', 'unlimited', 'executable', operators.eofill, 'eofill' },
+ ['eq'] = { 'operator', 'unlimited', 'executable', operators.eq, 'eq' },
+ ['errordict'] = { 'dict', 'unlimited', 'literal', errordict },
+ ['exch'] = { 'operator', 'unlimited', 'executable', operators.exch, 'exch' },
+ ['exec'] = { 'operator', 'unlimited', 'executable', operators.exec, 'exec' },
+ ['execstack'] = { 'operator', 'unlimited', 'executable', operators.execstack, 'execstack' },
+ ['executeonly'] = { 'operator', 'unlimited', 'executable', operators.executeonly, 'executeonly' },
+ ['exit'] = { 'operator', 'unlimited', 'executable', operators.exit, 'exit' },
+ ['exp'] = { 'operator', 'unlimited', 'executable', operators.exp, 'exp' },
+ ['false'] = { 'boolean', 'unlimited', 'literal', false },
+ ['file'] = { 'operator', 'unlimited', 'executable', operators.file, 'file' },
+ ['fill'] = { 'operator', 'unlimited', 'executable', operators.fill, 'fill' },
+ ['findfont'] = { 'operator', 'unlimited', 'executable', operators.findfont, 'findfont' },
+ ['FontDirectory'] = { 'dict', 'unlimited', 'literal', escrito['FontDirectory'] },
+ ['flattenpath'] = { 'operator', 'unlimited', 'executable', operators.flattenpath, 'flattenpath' },
+ ['floor'] = { 'operator', 'unlimited', 'executable', operators.floor, 'floor' },
+ ['flush'] = { 'operator', 'unlimited', 'executable', operators.flush, 'flush' },
+ ['flushfile'] = { 'operator', 'unlimited', 'executable', operators.flushfile, 'flushfile' },
+ ['for'] = { 'operator', 'unlimited', 'executable', operators["for"], 'for' },
+ ['forall'] = { 'operator', 'unlimited', 'executable', operators.forall, 'forall' },
+ ['framedevice'] = { 'operator', 'unlimited', 'executable', operators.framedevice, 'framedevice' },
+ ['ge'] = { 'operator', 'unlimited', 'executable', operators.ge, 'ge' },
+ ['get'] = { 'operator', 'unlimited', 'executable', operators.get, 'get' },
+ ['getinterval'] = { 'operator', 'unlimited', 'executable', operators.getinterval, 'getinterval' },
+ ['grestore'] = { 'operator', 'unlimited', 'executable', operators.grestore, 'grestore' },
+ ['grestoreall'] = { 'operator', 'unlimited', 'executable', operators.grestoreall, 'grestoreall' },
+ ['gsave'] = { 'operator', 'unlimited', 'executable', operators.gsave, 'gsave' },
+ ['gt'] = { 'operator', 'unlimited', 'executable', operators.gt, 'gt' },
+ ['identmatrix'] = { 'operator', 'unlimited', 'executable', operators.identmatrix, 'identmatrix' },
+ ['idiv'] = { 'operator', 'unlimited', 'executable', operators.idiv, 'idiv' },
+ ['if'] = { 'operator', 'unlimited', 'executable', operators["if"], 'if' },
+ ['ifelse'] = { 'operator', 'unlimited', 'executable', operators.ifelse, 'ifelse' },
+ ['index'] = { 'operator', 'unlimited', 'executable', operators.index, 'index' },
+ ['initclip'] = { 'operator', 'unlimited', 'executable', operators.initclip, 'initclip' },
+ ['initgraphics'] = { 'operator', 'unlimited', 'executable', operators.initgraphics, 'initgraphics' },
+ ['initmatrix'] = { 'operator', 'unlimited', 'executable', operators.initmatrix, 'initmatrix' },
+ ['invertmatrix'] = { 'operator', 'unlimited', 'executable', operators.invertmatrix, 'invertmatrix' },
+ ['idtransform'] = { 'operator', 'unlimited', 'executable', operators.idtransform, 'idtransform' },
+ ['itransform'] = { 'operator', 'unlimited', 'executable', operators.itransform, 'itransform' },
+ ['known'] = { 'operator', 'unlimited', 'executable', operators.known, 'known' },
+ ['kshow'] = { 'operator', 'unlimited', 'executable', operators.kshow, 'kshow' },
+ ['le'] = { 'operator', 'unlimited', 'executable', operators.le, 'le' },
+ ['length'] = { 'operator', 'unlimited', 'executable', operators.length, 'length' },
+ ['lineto'] = { 'operator', 'unlimited', 'executable', operators.lineto, 'lineto' },
+ ['ln'] = { 'operator', 'unlimited', 'executable', operators.ln, 'ln' },
+ ['load'] = { 'operator', 'unlimited', 'executable', operators.load, 'load' },
+ ['log'] = { 'operator', 'unlimited', 'executable', operators.log, 'log' },
+ ['loop'] = { 'operator', 'unlimited', 'executable', operators.loop, 'loop' },
+ ['lt'] = { 'operator', 'unlimited', 'executable', operators.lt, 'lt' },
+ ['makefont'] = { 'operator', 'unlimited', 'executable', operators.makefont, 'makefont' },
+ ['mark'] = { 'operator', 'unlimited', 'executable', operators.mark, 'mark' },
+ ['matrix'] = { 'operator', 'unlimited', 'executable', operators.matrix, 'matrix' },
+ ['maxlength'] = { 'operator', 'unlimited', 'executable', operators.maxlength, 'maxlength' },
+ ['mod'] = { 'operator', 'unlimited', 'executable', operators.mod, 'mod' },
+ ['moveto'] = { 'operator', 'unlimited', 'executable', operators.moveto, 'moveto' },
+ ['mul'] = { 'operator', 'unlimited', 'executable', operators.mul, 'mul' },
+ ['ne'] = { 'operator', 'unlimited', 'executable', operators.ne, 'ne' },
+ ['neg'] = { 'operator', 'unlimited', 'executable', operators.neg, 'neg' },
+ ['newpath'] = { 'operator', 'unlimited', 'executable', operators.newpath, 'newpath' },
+ ['noaccess'] = { 'operator', 'unlimited', 'executable', operators.noaccess, 'noaccess' },
+ ['not'] = { 'operator', 'unlimited', 'executable', operators["not"], 'not' },
+ ['null'] = { 'operator', 'unlimited', 'executable', operators.null, 'null' },
+ ['or'] = { 'operator', 'unlimited', 'executable', operators["or"], 'or' },
+ ['pop'] = { 'operator', 'unlimited', 'executable', operators.pop, 'pop' },
+ ['print'] = { 'operator', 'unlimited', 'executable', operators.print, 'print' },
+ ['pstack'] = { 'operator', 'unlimited', 'executable', operators.pstack, 'pstack' },
+ ['put'] = { 'operator', 'unlimited', 'executable', operators.put, 'put' },
+ ['putinterval'] = { 'operator', 'unlimited', 'executable', operators.putinterval, 'putinterval' },
+ ['quit'] = { 'operator', 'unlimited', 'executable', operators.quit, 'quit' },
+ ['rand'] = { 'operator', 'unlimited', 'executable', operators.rand, 'rand' },
+ ['rcheck'] = { 'operator', 'unlimited', 'executable', operators.rcheck, 'rcheck' },
+ ['rcurveto'] = { 'operator', 'unlimited', 'executable', operators.rcurveto, 'rcurveto' },
+ ['read'] = { 'operator', 'unlimited', 'executable', operators.read, 'read' },
+ ['readhexstring'] = { 'operator', 'unlimited', 'executable', operators.readhexstring, 'readhexstring' },
+ ['readline'] = { 'operator', 'unlimited', 'executable', operators.readline, 'readline' },
+ ['readonly'] = { 'operator', 'unlimited', 'executable', operators.readonly, 'readonly' },
+ ['renderbands'] = { 'operator', 'unlimited', 'executable', operators.renderbands, 'renderbands' },
+ ['repeat'] = { 'operator', 'unlimited', 'executable', operators["repeat"], 'repeat' },
+ ['resetfile'] = { 'operator', 'unlimited', 'executable', operators.resetfile, 'resetfile' },
+ ['restore'] = { 'operator', 'unlimited', 'executable', operators.restore, 'restore' },
+ ['rlineto'] = { 'operator', 'unlimited', 'executable', operators.rlineto, 'rlineto' },
+ ['rmoveto'] = { 'operator', 'unlimited', 'executable', operators.rmoveto, 'rmoveto' },
+ ['roll'] = { 'operator', 'unlimited', 'executable', operators.roll, 'roll' },
+ ['rotate'] = { 'operator', 'unlimited', 'executable', operators.rotate, 'rotate' },
+ ['round'] = { 'operator', 'unlimited', 'executable', operators.round, 'round' },
+ ['rrand'] = { 'operator', 'unlimited', 'executable', operators.rrand, 'rrand' },
+ ['run'] = { 'operator', 'unlimited', 'executable', operators.run, 'run' },
+ ['save'] = { 'operator', 'unlimited', 'executable', operators.save, 'save' },
+ ['scale'] = { 'operator', 'unlimited', 'executable', operators.scale, 'scale' },
+ ['scalefont'] = { 'operator', 'unlimited', 'executable', operators.scalefont, 'scalefont' },
+ ['search'] = { 'operator', 'unlimited', 'executable', operators.search, 'search' },
+ ['setdash'] = { 'operator', 'unlimited', 'executable', operators.setdash, 'setdash' },
+ ['setflat'] = { 'operator', 'unlimited', 'executable', operators.setflat, 'setflat' },
+ ['setfont'] = { 'operator', 'unlimited', 'executable', operators.setfont, 'setfont' },
+ ['setgray'] = { 'operator', 'unlimited', 'executable', operators.setgray, 'setgray' },
+ ['sethsbcolor'] = { 'operator', 'unlimited', 'executable', operators.sethsbcolor, 'sethsbcolor' },
+ ['setlinecap'] = { 'operator', 'unlimited', 'executable', operators.setlinecap, 'setlinecap' },
+ ['setlinejoin'] = { 'operator', 'unlimited', 'executable', operators.setlinejoin, 'setlinejoin' },
+ ['setlinewidth'] = { 'operator', 'unlimited', 'executable', operators.setlinewidth, 'setlinewidth' },
+ ['setmatrix'] = { 'operator', 'unlimited', 'executable', operators.setmatrix, 'setmatrix' },
+ ['setmiterlimit'] = { 'operator', 'unlimited', 'executable', operators.setmiterlimit, 'setmiterlimit' },
+ ['setrgbcolor'] = { 'operator', 'unlimited', 'executable', operators.setrgbcolor, 'setrgbcolor' },
+ ['setcmykcolor'] = { 'operator', 'unlimited', 'executable', operators.setcmykcolor, 'setcmykcolor' },
+ ['setscreen'] = { 'operator', 'unlimited', 'executable', operators.setscreen, 'setscreen' },
+ ['settransfer'] = { 'operator', 'unlimited', 'executable', operators.settransfer, 'settransfer' },
+ ['show'] = { 'operator', 'unlimited', 'executable', operators.show, 'show' },
+ ['showpage'] = { 'operator', 'unlimited', 'executable', operators.showpage, 'showpage' },
+ ['sin'] = { 'operator', 'unlimited', 'executable', operators.sin, 'sin' },
+ ['sqrt'] = { 'operator', 'unlimited', 'executable', operators.sqrt, 'sqrt' },
+ ['srand'] = { 'operator', 'unlimited', 'executable', operators.srand, 'srand' },
+ ['stack'] = { 'operator', 'unlimited', 'executable', operators.stack, 'stack' },
+ ['start'] = { 'operator', 'unlimited', 'executable', operators.start, 'start' },
+ ['StandardEncoding'] = { 'array', 'unlimited', 'literal', add_VM(standardencoding()), 256, 256 },
+ ['status'] = { 'operator', 'unlimited', 'executable', operators.status, 'status' },
+ ['stop'] = { 'operator', 'unlimited', 'executable', operators.stop, 'stop' },
+ ['stopped'] = { 'operator', 'unlimited', 'executable', operators.stopped, 'stopped' },
+ ['store'] = { 'operator', 'unlimited', 'executable', operators.store, 'store' },
+ ['string'] = { 'operator', 'unlimited', 'executable', operators.string, 'string' },
+ ['stroke'] = { 'operator', 'unlimited', 'executable', operators.stroke, 'stroke' },
+ ['sub'] = { 'operator', 'unlimited', 'executable', operators.sub, 'sub' },
+ ['systemdict'] = { 'dict', 'unlimited', 'literal', systemdict },
+ ['token'] = { 'operator', 'unlimited', 'executable', operators.token, 'token' },
+ ['translate'] = { 'operator', 'unlimited', 'executable', operators.translate, 'translate' },
+ ['transform'] = { 'operator', 'unlimited', 'executable', operators.transform, 'transform' },
+ ['true'] = { 'boolean', 'unlimited', 'literal', true },
+ ['truncate'] = { 'operator', 'unlimited', 'executable', operators.truncate, 'truncate' },
+ ['type'] = { 'operator', 'unlimited', 'executable', operators.type, 'type' },
+ ['userdict'] = { 'dict', 'unlimited', 'literal', userdict },
+ ['usertime'] = { 'operator', 'unlimited', 'executable', operators.usertime, 'usertime' },
+ ['version'] = { 'operator', 'unlimited', 'executable', operators.version, 'version' },
+ ['vmstatus'] = { 'operator', 'unlimited', 'executable', operators.vmstatus, 'vmstatus' },
+ ['wcheck'] = { 'operator', 'unlimited', 'executable', operators.wcheck, 'wcheck' },
+ ['where'] = { 'operator', 'unlimited', 'executable', operators.where, 'where' },
+ ['write'] = { 'operator', 'unlimited', 'executable', operators.write, 'write' },
+ ['writehexstring'] = { 'operator', 'unlimited', 'executable', operators.writehexstring, 'writehexstring' },
+ ['writestring'] = { 'operator', 'unlimited', 'executable', operators.writestring, 'writestring' },
+ ['xcheck'] = { 'operator', 'unlimited', 'executable', operators.xcheck, 'xcheck' },
+ ['xor'] = { 'operator', 'unlimited', 'executable', operators.xor, 'xor' },
+ }
+ if directvm then
+ systemdict.dict = dict
+ else
+ VM[dictstack[systemdict]].dict = dict
+ end
+ end
+end
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ dicterror = nil
+ errordict = nil
+ else
+ dicterror = add_VM {
+ access = 'unlimited',
+ size = 1,
+ maxsize = 40,
+ dict = {
+ newerror = { 'boolean', 'unlimited', 'literal', false }
+ },
+ }
+ --
+ errordict = add_VM {
+ access = 'unlimited',
+ size = 0,
+ maxsize = 40,
+ dict = { },
+ }
+ --
+ local d
+ if directvm then
+ d = systemdict.dict
+ else
+ d = VM[dictstack[systemdict]].dict
+ end
+ -- still needed ?
+ d['errordict'] = { 'dict', 'unlimited', 'literal', errordict }
+ d['systemdict'] = { 'dict', 'unlimited', 'literal', systemdict }
+ d['userdict'] = { 'dict', 'unlimited', 'literal', userdict }
+ d['$error'] = { 'dict', 'unlimited', 'literal', dicterror }
+ end
+end
+
+-- What follows is the main interpreter, with the tokenizer first
+
+-- procedure scanning stack for the tokenizer
+
+local procstack
+local procstackptr
+
+initializers[#initializers+1] = function(reset)
+ if reset then
+ procstack = nil
+ procstackptr = nil
+ else
+ procstack = { }
+ procstackptr = 0
+ end
+end
+
+-- lpeg parser for tokenization
+
+do
+
+ local function push(v)
+ if procstackptr > 0 then
+ local top = procstack[procstackptr]
+ if top then
+ top[#top+1] = v
+ else
+ procstack[procstackptr] = { v }
+ end
+ return false
+ else
+ push_execstack(v)
+ return true
+ end
+ end
+
+ local function start()
+ procstackptr = procstackptr + 1
+ return true
+ end
+
+ local function stop()
+ local v = procstack[procstackptr]
+ procstack[procstackptr] = { }
+ procstackptr = procstackptr - 1
+ if push {'array', 'unlimited', 'executable', add_VM(v), 1, #v, 'd' } then
+ return true
+ end
+ end
+
+ local function hexify(a)
+ return char(tonumber(a,16))
+ end
+
+ local function octify(a)
+ return char(tonumber(a,8))
+ end
+
+ local function radixed(base,value)
+ base = tonumber(base)
+ if base > 36 or base < 2 then
+ return nil
+ end
+ value = tonumber(value,base)
+ if not value then
+ return "error", false
+ elseif value > MAX_INT then
+ return "integer", value
+ else
+ return "real", value
+ end
+ end
+
+ local space = S(' ')
+ local spacing = S(' \t\r\n\f')
+ local sign = S('+-')^-1
+ local digit = R('09')
+ local period = P('.')
+ local letters = R('!~') - S('[]<>{}()%')
+ local hexdigit = R('09','af','AF')
+ local radixdigit = R('09','az','AZ')
+
+ local p_integer = (sign * digit^1 * #(1-letters)) / tonumber
+ local p_real = ((sign * digit^0 * period * digit^0 + period * digit^1) * (S('eE') * sign * digit^1)^-1 * #(1-letters)) / tonumber
+ local p_literal = Cs(P("/")/"" * letters^1 * letters^0)
+ local p_symbol = C(letters^1 * letters^0)
+ ----- p_radixed = C(digit^1) * P("#") * C(radixdigit^1) * #(1-letters) / radixed-- weird #() here
+ local p_radixed = C(digit^1) * P("#") * C(radixdigit^1) / radixed
+ local p_unhexed = P("<") * Cs(((C(hexdigit*hexdigit) * Cc(16))/tonumber/char+spacing/"")^0) * P(">")
+ local p_comment = P('%') * (1 - S('\r\n'))^0 * Cc(true)
+ local p_bounding = P('%%BoundingBox:') * Ct((space^0 * p_integer)^4) * (1 - S('\r\n'))^0
+ local p_lbrace = C("{")
+ local p_rbrace = C("}")
+ local p_lbracket = C("[")
+ local p_rbracket = C("]")
+ local p_finish = Cc(false)
+
+ local p_string =
+ P("(")
+ * Cs( P {
+ (
+ (1 - S("()\\"))^1
+ + P("\\")/"" * (
+ (C(digit *digit * digit) * Cc(8)) / tonumber / char
+ + P("n") / "\n" + P("r") / "\r" + P("t") / "\t"
+ + P("b") / "\b" + P("f") / "\f" + P("\\") / "\\"
+ + 1
+ )
+ + P("(") * V(1) * P(")")
+ )^0
+ })
+ * P(")")
+
+ -- inspect(lpegmatch(p_radixed,"10#123"))
+ -- inspect(lpegmatch(p_unhexed,"<A2B3 C3>"))
+ -- inspect(lpegmatch(p_string,[[(foo(bar \124\125 \( bar\n bar\\bar))]]))
+
+ local p_unhexed = Cc('string') * p_unhexed
+ local p_string = Cc('string') * p_string
+ local p_array_start = Cc('name') * p_lbracket
+ local p_array_stop = Cc('name') * p_rbracket
+ local p_exec_start = Cc('start') * p_lbrace
+ local p_exec_stop = Cc('stop') * p_rbrace
+ local p_integer = Cc('integer') * p_integer
+ local p_real = Cc('real') * p_real
+ local p_radixed = p_radixed
+ local p_symbol = Cc('name') * p_symbol
+ local p_literal = Cc('literal') * p_literal
+ local p_comment = Cc('comment') * p_comment
+ local p_bounding = Cc('bounding') * p_bounding
+ local p_finish = Cc("eof") * p_finish
+ local p_whitespace = spacing^0
+
+ local tokens = p_whitespace
+ * (
+ p_bounding
+ + p_comment
+ + p_string
+ + p_unhexed
+ + p_array_start
+ + p_array_stop
+ + p_exec_start
+ + p_exec_stop
+ + p_real
+ + p_radixed
+ + p_integer
+ + p_literal
+ + p_symbol
+ + p_finish
+ )^-1
+ * Cp()
+
+ -- we can do push etc in the lpeg but the call is not faster than the check
+ -- and this stays closer to the original
+
+ local function tokenize()
+ local object = execstack[execstackptr]
+ local sequence = object[4]
+ local position = object[5]
+ local length = object[6]
+ local tokentype = nil
+ local value = nil
+ while position < length do
+ tokentype, value, position = lpegmatch(tokens,get_VM(sequence),position)
+ if not position then
+ return false
+ elseif position >= length then
+ pop_execstack()
+ else
+ object[5] = position
+ end
+ if not value then
+ return false -- handle_error('syntaxerror')
+ elseif tokentype == 'integer' or tokentype == 'real' then
+ if push { tokentype, 'unlimited', 'literal', value } then
+ return true
+ end
+ elseif tokentype == 'name' then
+ if push { 'name', 'unlimited', 'executable', add_VM(value) } then
+ return true
+ end
+ elseif tokentype == 'literal' then
+ if push { 'name', 'unlimited', 'literal', add_VM(value) } then
+ return true
+ end
+ elseif tokentype == 'string' then
+ if push { 'string', 'unlimited', 'literal', add_VM(value), 1, #value } then
+ return true
+ end
+ elseif tokentype == 'start' then
+ if start() then
+ -- stay
+ end
+ elseif tokentype == 'stop' then
+ if stop() then
+ return true
+ end
+ elseif tokentype == 'bounding' then
+ specials.boundingbox = value
+ end
+ end
+ return position >= length
+ end
+
+ -- the exec stack can contain a limited amount of interesting item types
+ -- to be handled by next_object:
+ -- executable arrays (procedures)
+ -- executable strings
+ -- executable files
+
+ next_object = function()
+ if execstackptr == 0 then
+ return nil
+ end
+ local object = execstack[execstackptr]
+ if not object then
+ return nil
+ end
+ local otyp = object[1]
+ local exec = object[3] == 'executable'
+ if not exec then
+ return pop_execstack()
+ elseif otyp == 'array' then
+ if object[7] == 'd' then
+ return pop_execstack()
+ else
+ local proc = get_VM(object[4])
+ local o = object[5]
+ local val = proc[o]
+ if o >= #proc then
+ object[5] = 1
+ pop_execstack()
+ else
+ object[5] = o + 1
+ end
+ return val
+ end
+ elseif otyp == 'string' then
+ if not tokenize() then
+ report("tokenizer failed on string")
+ return nil
+ else
+ return next_object() -- recurse
+ end
+ elseif otyp == 'file' then
+ if object[4] == 0 then
+ report('sorry, interactive mode is not supported')
+ end
+ if not tokenize() then
+ report("tokenizer failed on file")
+ return nil
+ else
+ return next_object() -- recurse
+ end
+ else
+ return pop_execstack()
+ end
+ end
+
+-- The main execution control function
+
+ local detail = false -- much faster
+
+ local report_exec = logs.reporter("escrito","exec")
+
+ do_exec = function() -- already a local
+ local ret
+ local savedopstack = detail and copy_opstack()
+ local object = next_object()
+ if not object then
+ return false
+ end
+ local otyp = object[1]
+ if DEBUG then
+ if otyp == 'operator' then
+ report_exec("%s %s %s",otyp,object[3],object[5])
+ elseif otyp == 'dict' then
+ local d = get_VM(object[4])
+ report_exec("%s %s <%s:%s>",otyp,object[3],d.size or '',d.maxsize or '')
+ elseif otyp == 'array' or otyp == 'file' or otyp == 'save' then
+ report_exec("%s <%s:%s>",object[3],object[5] or '',object[6] or '')
+ elseif otyp == 'string' or otyp == 'name' then
+ report_exec("%s %s %s",otyp,object[3],get_VM(object[4]))
+ else
+ report_exec("%s %s %s",otyp,object[3],tostring(object[4]))
+ end
+ end
+ if otyp == 'real' or otyp == 'integer' or otyp == 'boolean' or otyp == 'mark' or otyp == 'save' or otyp == 'font' then
+ push_opstack(object)
+ elseif otyp == '.stopped' then
+ -- when .stopped is seen here, stop was never called
+ push_opstack { 'boolean', 'unlimited', 'executable', false}
+ elseif otyp == '.exit' then
+ -- when .exit is seen here, exit was never called
+ elseif otyp == 'array' then
+ if object[2] == 'noaccess' then
+ escrito.errorname = 'noaccess'
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'string' then
+ if object[2] == 'noaccess' then
+ escrito.errorname = 'noaccess'
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'dict' then
+ local dict = get_VM(object[4])
+ if dict.access == 'noaccess' then
+ escrito.errorname = 'noaccess'
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'file' then
+ if object[2] == 'noaccess' then
+ errorname = 'noaccess'
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'null' then
+ push_opstack(object)
+ elseif otyp == 'operator' then
+ if object[3]=='executable' then
+ ret, escrito.errorname = object[4]()
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'save' then
+ -- todo
+ elseif otyp == 'name' then
+ if object[3] == 'executable' then
+ local v = lookup(get_VM(object[4]))
+ if not v then
+ if escrito.errorname then
+ -- doesn't work, needs thinking
+ error ("recursive error detected inside '" .. escrito.errorname .. "'")
+ end
+ escrito.errorname = 'undefined'
+ else
+ if DEBUG then
+ local vt = v[1]
+ if vt == 'operator' then
+ print ('exec2: ' .. vt .. ' ' .. v[3] .. ' '.. v[5])
+ elseif vt == 'dict' or vt == 'array' or vt == 'file' or vt == 'save' then
+ print ('exec2: ' .. vt .. ' ' .. v[3] .. ' <'.. (v[5] or '') .. '>')
+ elseif vt == 'string' or vt == 'name' then
+ print ('exec2: ' .. vt .. ' ' .. v[3] .. ' '.. get_VM(v[4]))
+ else
+ print ('exec2: ' .. vt .. ' ' .. v[3] .. ' '.. tostring(v[4]))
+ end
+ end
+ push_execstack(v)
+ end
+ else
+ push_opstack(object)
+ end
+ elseif otyp == 'null' then
+ -- do nothing
+ elseif otyp == 'array' then
+ push_opstack(object)
+ end
+
+ if escrito.errorname then
+ if savedopstack then
+ local v = lookup_error(escrito.errorname)
+ if not v then
+ print("unknown error handler for '" .. escrito.errorname .. "', quitting")
+ return false
+ else
+ set_opstack(savedopstack)
+ push_opstack { otyp, object[2], "literal", object[4], object[5], object[6], object[7] }
+ push_opstack { 'string','unlimited','literal',add_VM(escrito.errorname), 1 }
+ push_execstack(v)
+ end
+ escrito.errorname = nil
+ else
+ print("error '" .. escrito.errorname .. "', quitting")
+ -- os.exit()
+ end
+ end
+
+ return true
+ end
+
+end
+
+do
+
+ -- some of the errors will never actually happen
+
+ local errornames = {
+ "dictfull", "dictstackoverflow", "dictstackunderflow", "execstackoverflow",
+ "interrupt", "invalidaccess", "invalidexit", "invalidfileaccess", "invalidfont", "invalidrestore",
+ "ioerror", "limitcheck", "nocurrentpoint", "rangecheck", "stackoverflow", "stackunderflow",
+ "syntaxerror", "timeout", "typecheck", "undefined", "undefinedfilename", "undefinedresult",
+ "unmatchedmark", "unregistered", "VMerror"
+ }
+
+ local generic_error_proc = [[{
+ $error /newerror true put
+ $error exch /errorname exch put
+ $error exch /command exch put
+ count array astore $error /ostack 3 -1 roll put
+ $error /dstack countdictstack array dictstack put
+ countexecstack array execstack aload pop pop count array astore $error /estack 3 -1 roll put
+ stop
+ } bind ]]
+
+ local generic_handleerror_proc = [[{
+ $error begin
+ /newerror false def
+ (%%[ Error: ) print
+ errorname print
+ (; OffendingCommand: ) print
+ command ==
+ ( ]%%\n) print flush
+ end
+ }]]
+
+ local enabled
+
+ local function interpret(data)
+ if enabled then
+ push_opstack { 'file', 'unlimited', 'executable', add_VM(data), 1, #data, 'r', stdin }
+ push_execstack { 'operator', 'unlimited', 'executable', operators.stopped, 'stopped' }
+ while true do
+ if not do_exec() then
+ local v = pop_opstack()
+ if v and v[4] == true then
+ local proc = {
+ { 'name', 'unlimited', 'executable', add_VM('errordict') }, -- hm, errordict
+ { 'name', 'unlimited', 'literal', add_VM('handleerror') },
+ { 'operator', 'unlimited', 'executable', operators.get, 'get' },
+ { 'operator', 'unlimited', 'executable', operators.exec, 'exec' },
+ }
+ push_execstack { 'array', 'unlimited', 'executable', add_VM(proc), 1, #proc, 'i' }
+ else
+ return
+ end
+ end
+ end
+ end
+ end
+
+ local function close()
+ for i=1,#initializers do
+ initializers[i](true)
+ end
+ enabled = false
+ end
+
+ local function open(options)
+ enabled = true
+ local starttime = os.clock()
+ local stoptime = nil
+ for i=1,#initializers do
+ initializers[i]()
+ end
+ if type(options) == "table" then
+ devicename = options.device or "pdf"
+ findfont = options.findfont or findfont
+ randomseed = options.randomseed or randomseed -- todo
+ calculatebox = options.calculatebox
+ else
+ devicename = "pdf"
+ end
+ device = devices[devicename] or devices.pdf
+ operators.initgraphics()
+ for i=1,#errornames do
+ interpret(formatters["errordict /%s %s put"](errornames[i],generic_error_proc), INITDEBUG)
+ end
+ -- set up the error handler
+ interpret("systemdict /= { 20 string cvs print } bind put", INITDEBUG)
+ interpret("systemdict /prompt { (PS>) print flush } bind put", INITDEBUG)
+ interpret(format("errordict /handleerror %s bind put", generic_handleerror_proc), INITDEBUG)
+ interpret("systemdict /handleerror {errordict /handleerror get exec } bind put", INITDEBUG)
+ -- user dict initializations
+ interpret(format("/quit { stop } bind def"), INITDEBUG)
+ interpret(format("userdict /#copies 1 put"), INITDEBUG)
+ local job = {
+ runtime = 0,
+ interpret = interpret,
+ boundingbox = boundingbox,
+ close = function()
+ close()
+ local runtime = os.clock() - starttime
+ job.runtime = runtime
+ return runtime
+ end,
+ }
+ return job
+ end
+
+ escrito.open = open
+
+ if context then
+
+ function escrito.convert(options)
+ if type(options) == "table" then
+ local data = options.data
+ if not data or data == "" then
+ local buffer = options.buffer
+ local filename = options.filename -- needs escaping
+ if buffer and buffer ~= "" then
+ data = buffers.getcontent(buffer)
+ elseif filename and filename ~= "" then
+ data = io.loaddata(filename) -- use resolver
+ end
+ end
+ if data and data ~= "" then
+ local e = open(options)
+-- print(data)
+ e.interpret(data)
+ return e.close()
+ end
+ end
+ return 0
+ end
+
+ end
+
+ escrito.devices = devices
+
+end
+
+return escrito
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.mkiv
new file mode 100644
index 00000000000..76385791884
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-escrito.mkiv
@@ -0,0 +1,184 @@
+%D \module
+%D [ file=m-escrito,
+%D version=2015.09.27,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=ESCRITO,
+%D author={Taco Hoekwater \& Hans Hagen},
+%D date=\currentdate,
+%D copyright={\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.
+
+\registerctxluafile{m-escrito}{1.001}
+
+%D This is a fun project and not meant for production (yet). It's a follow up on a
+%D project by Taco presented at a Bacho\TeX\ meeting years ago. I probably messed up
+%D the code so much that some things don't work but then, fonts are not really
+%D supported well anyway. However for simple \POSTSCRIPT\ things work out ok.
+%D
+%D I (Hans) will occasionally have a look at the code. Who knows what our trips to
+%D \TeX\ meetings lead to.
+
+\unprotect
+
+\unexpanded\def\startESCRITOgraphic#1#2#3#4%
+ {\dontleavehmode
+ \begingroup
+ \MPllx#1\onebasepoint
+ \MPlly#2\onebasepoint
+ \MPurx#3\onebasepoint
+ \MPury#4\onebasepoint
+ \setbox\b_meta_graphic\hbox\bgroup}
+
+\unexpanded\def\stopESCRITOgraphic
+ {\egroup
+ \setbox\b_meta_graphic\ruledhbox\bgroup
+ \kern-\MPllx\raise-\MPlly\box\b_meta_graphic
+ \egroup
+ \wd\b_meta_graphic\dimexpr\MPurx-\MPllx\relax
+ \ht\b_meta_graphic\dimexpr\MPury-\MPlly\relax
+ \dp\b_meta_graphic\zeropoint
+ \box\b_meta_graphic
+ \endgroup}
+
+\unexpanded\def\flushESCRITOtext#1#2#3% no fratures so pretty weak, better use overlays
+ {\smash{\rlap{\definedfont[#1 at #2bp]#3}}}
+
+\unexpanded\def\stopESCRITO
+ {\edef\p_option{\namedbufferparameter{ESCRITO}\c!option}%
+ \ctxlua{escrito.convert {
+ buffer = "\thedefinedbuffer{ESCRITO}",
+ calculatebox = \ifx\p_option\v!fit true\else false\fi,
+ }}}
+
+\unexpanded\def\processESCRITO[#1]%
+ {\begingroup
+ \getdummyparameters[\c!file=,\c!option=,#1]%
+ \edef\p_option{\dummyparameter\c!option}%
+ \ctxlua{escrito.convert {
+ filename = "\dummyparameter\c!file",
+ calculatebox = \ifx\p_option\v!fit true\else false\fi,
+ }}%
+ \endgroup}
+
+\definebuffer
+ [ESCRITO]
+
+\setupbuffer
+ [ESCRITO]
+ [\c!option=,
+ \c!after=\processESCRITO]
+
+\protect
+
+% This will move to m-escrito.lua once we know how to deal with it ... no time
+% now.
+
+\startluacode
+
+ local literal = nodes.pool.register(node.new("whatsit",nodes.whatsitcodes.pdfliteral))
+ literal.mode = 0
+
+ local function newliteral(result)
+ local l = nodes.copy(literal)
+ l.data = result
+ return l
+ end
+
+ local p = escrito.devices.pdf
+
+ function p.startpage(llx,lly,urx,ury)
+ context.startESCRITOgraphic(llx,lly,urx,ury)
+ end
+
+ function p.stoppage()
+ context.stopESCRITOgraphic()
+ end
+
+ function p.flushpage(result)
+ context(newliteral(result))
+ end
+
+ -- todo
+
+ local fontnames = { }
+ local fontfiles = { }
+
+ fontnames['NimbusSanL-Regu'] = 'Sans'
+ fontnames['StandardSymL'] = 'rpsyr'
+ fontnames['dejavuserif-regular'] = 'dejavuserif-regular'
+
+ function p.showfont(object)
+ local color = object.color
+ local ctype = object.colortype
+ local matrix = object.matrix
+ local text = object.string
+ local size = object.fontmatrix[1] * 1000
+ local result = { "q" }
+ context(newliteral(formatters['%f %f %f %f %f %f cm'](matrix[1],matrix[2],matrix[3],matrix[4],matrix[5],matrix[6])))
+ if ctype == "rgb" then
+ local r, g, b = color[1], color[2], color[3]
+ context(newliteral(formatters["%f %f %f rg %f %f %f RG"](r,g,b,r,g,b)))
+ elseif ctype == "cmyk" then
+ local c, m, y, k = color[1], color[2], color[3], color[4]
+ context(newliteral(formatters["%f %f %f k %f %f %f K"](c,m,y,k,c,m,y,k)))
+ elseif ctype == "gray" then
+ context(newliteral(formatters["%f g %f G"](color,color)))
+ end
+ context.flushESCRITOtext(fontnames[object.fontname],size,text)
+ context(newliteral("Q"))
+ end
+
+ local function findfont(fontname)
+ return fontfiles[fontname]
+ end
+
+\stopluacode
+
+\continueifinputfile{m-escrito.mkiv}
+
+\starttext
+
+% \startluacode
+% local n = 5
+% for i=1,n do
+% context.startTEXpage()
+% local runtime = escrito.convert { filename = "tiger.eps", calculatebox = true }
+% context.par()
+% context("calculated boundingbox, time: %s",runtime)
+% context.stopTEXpage()
+% end
+% for i=1,n do
+% context.startTEXpage()
+% local runtime = escrito.convert { filename = "tiger.eps", calculatebox = false }
+% context.par()
+% context("built in boundingbox, time: %s",runtime)
+% context.stopTEXpage()
+% end
+% \stopluacode
+
+\startTEXpage
+ \startESCRITO
+ (tiger.eps) run
+ \stopESCRITO
+\stopTEXpage
+
+\startTEXpage
+ \setupbuffer[ESCRITO][option=fit]%
+ \startESCRITO
+ (tiger.eps) run
+ \stopESCRITO
+\stopTEXpage
+
+\startTEXpage
+ \processESCRITO[file=tiger.eps]
+\stopTEXpage
+
+\startTEXpage
+ \processESCRITO[file=tiger.eps,option=fit]
+\stopTEXpage
+
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/m-fields.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-fields.mkiv
index 46b77f8d39b..46b77f8d39b 100644
--- a/Master/texmf-dist/tex/context/base/m-fields.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-fields.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv
new file mode 100644
index 00000000000..f9dd348a49c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-format.mkiv
@@ -0,0 +1,411 @@
+%D \module
+%D [ file=m-formay,
+%D version=ancient,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Ancient Formatting 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.
+
+%D Here is some code that I had laying around and had forgotten
+%D about. Let's make it a module and see if there is interest in
+%D such things.
+
+% \defineformatblock [poem]
+% \defineformatsegment [verse] % [poem]
+% \defineformatline [line] % [verse]
+%
+% \startpoem [title] [author]
+% \startverse [ref]
+% \startline [ref]
+%
+% block : voor na tussen *tekstletter *tekstkleur
+%
+% segment : voor na tussen *tekstletter *tekstkleur
+% : links rechts linkeroffset rechteroffset
+% : ?marge *evenmarge *onevenmarge breedte
+% : nummer *nummercommando *conversie
+% : nummerletter nummerkleur *label
+%
+% line : voor na tussen *tekstletter *tekstkleur
+% : nummer *nummercommando *conversie
+% : nummerletter nummerkleur *label
+%
+% * = todo
+
+\unprotect
+
+\definesystemvariable {fx} % format block
+\definesystemvariable {fy} % format segment
+\definesystemvariable {fz} % format line
+
+\def\defineformatblock
+ {\dodoubleempty\dodefineformatblock}
+
+\def\dodefineformatblock[#1][#2]%
+ {\setupformatblock
+ [#1]
+ [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank,
+ \c!textstyle=,\c!textcolor=,#2]%
+ \setvalue{\e!start#1}{\startformatblock[#1]}%
+ \setvalue{\e!stop #1}{\stopformatblock}}
+
+\def\setupformatblock
+ {\dodoubleempty\dosetupformatblock}
+
+\def\setupformatblock[#1]%
+ {\getparameters[\??fx#1]}
+
+\def\startformatblock[#1]%
+ {\dotriplegroupempty\dostartformatblock{#1}}
+
+\def\dostartformatblock#1#2#3
+ {\bgroup
+ \getvalue{\??fx#1\c!before}
+ \doglobal\newcounter\formatsegmentcounter
+ \doglobal\newcounter\formatlinecounter
+ \doglobal\newcounter\formatlinesubcounter
+ \doglobal\newcounter\formatlinemaxcounter
+ \doifsomething{#2}{\leftaligned{#2}\getvalue{\??fx#1\c!inbetween}}
+ \def\stopformatblock%
+ {\doifsomething{#3}{\getvalue{\??fx#1\c!inbetween}\leftaligned{#3}}
+ \getvalue{\??fx#1\c!after}
+ \egroup}}
+
+\def\defineformatsegment
+ {\dodoubleempty\dodefineformatsegment}
+
+\def\dodefineformatsegment[#1][#2]%
+ {\setupformatsegment
+ [#1]
+ [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank,
+ \c!textstyle=,\c!textcolor=,\c!left=,\c!right=,
+ \c!leftoffset=\!!zeropoint,\c!rightoffset=\!!zeropoint,
+ %\c!margin=\!!zeropoint,\c!evenmargin=\!!zeropoint,\c!oddmargin=\hsize,
+ \c!width=\hsize,\c!numberstyle=,\c!numbercolor=,\c!number=\v!no,
+ \c!numbercommand=,\c!conversion=,\c!label=,
+ #2]%
+ \setvalue{\e!start#1}{\startformatsegment[#1]}%
+ \setvalue{\e!stop #1}{\stopformatsegment}}
+
+\def\setupformatsegment
+ {\dodoubleempty\dosetupformatsegment}
+
+\def\setupformatsegment[#1]%
+ {\getparameters[\??fy#1]}
+
+\def\placeformatsegmentcounter
+ {\formatsegmentcounter\quad\hphantom{\placeformatlinecounter}}
+
+\def\placeformatlinecounter
+ {\formatlinecounter}
+
+\def\startformatsegment[#1]%
+ {\bgroup
+ \doifelsevalue{\??fy#1\c!number}\v!yes
+ {\def\doplaceformatsegmentcounter
+ {\inleftmargin
+ {\doattributes{\??fy#1}\c!numberstyle\c!numbercolor
+ {\placeformatsegmentcounter}}}}
+ {\let\doplaceformatsegmentcounter\relax}%
+ \getvalue{\??fy#1\c!before}
+ \doglobal\increment\formatsegmentcounter
+ \def\formatrightoffset{\getvalue{\??fy#1\c!rightoffset}}
+ \def\formatleftoffset {\getvalue{\??fy#1\c!leftoffset}}
+ \def\formatminwidth {\getvalue{\??fy#1\c!minwidth}}
+ \def\formatwidth {\getvalue{\??fy#1\c!width}}
+ %\def\formatmargin {\getvalue{\??fy#1\c!margin}}
+ \def\formatbefore {\getvalue{\??fy#1\c!before}}
+ \def\formatinbetween {\getvalue{\??fy#1\c!inbetween}}
+ \def\formatafter {\getvalue{\??fy#1\c!after}}
+ \def\formatleft {\getvalue{\??fy#1\c!left}}
+ \def\formatright {\getvalue{\??fy#1\c!right}}
+ \@@segmentvarianta
+ \getvalue{@@segmentvariant\getvalue{\??fy#1\c!alternative}}
+ \def\stopformatsegment
+ {\getvalue{\??fy#1\c!after}
+ \egroup}}
+
+\newif\iftraceformatblock
+
+\def\@@segmentvarianta % ragged right, symbols
+ {\let\formatraggedness\raggedright
+ \let\dostartformatline\dostartformatlineab
+ \let\formatleftfirst\relax \let\formatrightfirst\hfill
+ \let\formatleftnext \hfill \let\formatrightnext \relax}
+
+\def\@@segmentvariantb % ragged right, equal parts, symbols
+ {\let\formatraggedness\raggedcenter
+ \let\dostartformatline\dostartformatlineab
+ \let\formatleftfirst\relax \let\formatrightfirst\hfill
+ \let\formatleftnext \hfill \let\formatrightnext \relax}
+
+\def\@@segmentvariantc % ragged right
+ {\let\formatraggedness\veryraggedright
+ \let\dostartformatline\dostartformatlinecde
+ \let\formatleftnext\relax \let\formatrightnext\hfill}
+
+\def\@@segmentvariantd % ragged center
+ {\let\formatraggedness\veryraggedcenter
+ \let\dostartformatline\dostartformatlinecde
+ \let\formatleftnext\hfill \let\formatrightnext\hfill}
+
+\def\@@segmentvariante % ragged left
+ {\let\formatraggedness\veryraggedleft
+ \let\dostartformatline\dostartformatlinecde
+ \let\formatleftnext\hfill \let\formatrightnext\relax}
+
+\def\defineformatline
+ {\dodoubleempty\dodefineformatline}
+
+\def\dodefineformatline[#1][#2]%
+ {\setupformatline
+ [#1]
+ [\c!before=\blank,\c!after=\blank,\c!inbetween=\blank,
+ \c!textstyle=,\c!textcolor=,
+ \c!number=\v!no,\c!numbercommand=,\c!conversion=,
+ \c!numberstyle=,\c!numbercolor=,\c!label=,
+ #2]%
+ \setvalue{\e!start#1}{\startformatline[#1]}%
+ \setvalue{\e!stop #1}{\stopformatline}}
+
+\def\setupformatline
+ {\dodoubleempty\dosetupformatline}
+
+\def\setupformatline[#1]%
+ {\getparameters[\??fz#1]}
+
+\newconditional\formatforcedbreak
+
+\def\startformatline[#1]%
+ {\bgroup
+ \doifelsevalue{\??fz#1\c!number}\v!yes
+ {\def\doplaceformatlinecounter
+ {\inleftmargin
+ {\doattributes{\??fz#1}\c!numberstyle\c!numbercolor
+ {\placeformatlinecounter}}}}
+ {\let\doplaceformatlinecounter\relax}%
+ \global\setfalse\formatforcedbreak
+ \def\\{\break\global\settrue\formatforcedbreak}%
+ \hsize\formatwidth
+ \doglobal\increment\formatlinecounter
+ \par
+ \nobreak
+ \def\stopformatline
+ {\unskip\unskip\unskip\unskip\unskip\egroup
+ \let\doplaceformatsegmentcounter\relax}
+ \postponenotes
+ \dowithnextbox{\dostartformatline}\hbox\bgroup\ignorespaces}
+
+\def\dostartformatlineab
+ {%\dosetleftskipadaption\formatmargin
+ %\advance\hsize-\leftskipadaption\relax
+ \ifdim\nextboxwd>\hsize
+ \beginofshapebox
+ \forgetall
+ \hangafter\plusone
+ \hangindent\formatleftoffset
+ \formatraggedness
+ \hskip\formatrightoffset
+ \unhbox\nextbox\par
+ \endofshapebox
+ %\advance\hsize \leftskipadaption
+ \doglobal\newcounter\formatlinesubcounter
+ \reshapebox
+ {\doglobal\increment\formatlinesubcounter}
+ \global\let\formatlinemaxcounter\formatlinesubcounter
+ \reshapebox
+ {\doglobal\decrement\formatlinesubcounter
+ \ifnum\formatlinesubcounter=\zerocount
+ \doplaceformatsegmentcounter
+ \doplaceformatlinecounter
+ \hskip-\formatrightoffset
+ %\hskip\leftskipadaption
+ \formatleftfirst
+ \unhbox\shapebox
+ \ifnum\formatlinemaxcounter>\plusone
+ \ifx\formatright\empty\else
+ \shapedhbox to \zeropoint{\formatright\hss}%
+ \fi
+ \fi
+ \formatrightfirst
+ \iftraceformatblock
+ \ruledhskip\formatrightoffset\hskip-\formatrightoffset
+ \fi
+ \else
+ %\hskip\leftskipadaption
+ \iftraceformatblock
+ \ruledhskip\formatleftoffset\hskip-\formatleftoffset
+ \fi
+ \formatleftnext
+ \ifx\formatleft\empty\else
+ \shapedhbox to \zeropoint{\hss\formatleft}%
+ \fi
+ \unhbox\shapebox
+ \formatrightnext
+ \fi}
+ \flushshapebox
+ \else
+ \dontleavehmode\hbox
+ {\doplaceformatsegmentcounter
+ \doplaceformatlinecounter
+ %\hskip\leftskipadaption
+ \formatleftfirst
+ \unhbox\nextbox
+ \formatrightfirst}
+ \fi
+ \par
+ \egroup}
+
+\def\dostartformatlinecde
+ {%\dosetleftskipadaption\formatmargin
+ %\advance\hsize -\leftskipadaption\relax
+ \dimen0=\hsize
+ \ifconditional\formatforcedbreak\else
+ \ifdim\formatminwidth>\zeropoint\relax
+ \ifdim\nextboxwd>\hsize
+ \doloop
+ {\global\dimen1=\dimen0
+ \beginofshapebox
+ \hsize\dimen0
+ \forgetall
+ \formatraggedness
+ \unhcopy\nextbox\par
+ \endofshapebox
+ \reshapebox
+ {\setbox\scratchbox=\hbox{\unhbox\shapebox}%
+ \ifdim\wd\scratchbox<\dimen1
+ \global\dimen1=\wd\scratchbox
+ \fi}
+ \ifdim\dimen1<\formatminwidth\relax
+ \advance\dimen0 by -.25em
+ \else
+ \exitloop
+ \fi
+ \ifdim\dimen0<10em
+ \dimen0=\hsize
+ \exitloop
+ \fi}
+ \fi
+ \fi
+ \fi
+ \beginofshapebox
+ \hsize\dimen0
+ \forgetall
+ \formatraggedness
+ \unhcopy\nextbox\par
+ \endofshapebox
+ %\advance\hsize \leftskipadaption
+ \doglobal\newcounter\formatlinesubcounter
+ \reshapebox
+ {\doglobal\increment\formatlinesubcounter}%
+ \global\let\formatlinemaxcounter\formatlinesubcounter
+ \reshapebox
+ {\doglobal\decrement\formatlinesubcounter
+ \ifnum\formatlinesubcounter=\zerocount
+ \doplaceformatsegmentcounter
+ \doplaceformatlinecounter
+ \fi
+ %\hskip\leftskipadaption
+ \formatleftnext
+ \unhbox\shapebox
+ \formatrightnext\strut}% strut prevents unskip
+ \flushshapebox
+ \par
+ \egroup}
+
+\defineformatblock[poem]
+ [\c!before=\blank,
+ \c!inbetween={\blank[\v!medium]},
+ \c!after=\blank]
+
+\defineformatsegment[verse]
+ [\c!alternative=\v!left,
+ \c!width=\hsize,
+ %\c!margin=\!!zeropoint,
+ \c!before={\blank[\v!medium]},
+ \c!after={\blank[\v!medium]},
+ \c!inbetween={\blank[\v!medium]},
+ \c!leftoffset=3em,
+ \c!rightoffset=2em,
+ \c!minwidth=5em,
+ \c!left={\mathematics{[}\enspace},
+ \c!right={\enspace\mathematics{]}}]
+
+\defineformatline[line]
+ []
+
+\protect
+
+\doifnotmode{demo} {\endinput}
+
+% evt defineblank[formatbefore,formatinbetween,formatafter]
+
+%\showframe \traceformatblocktrue
+
+\usemodule[visual]
+
+\setuplayout[height=middle,topspace=1cm,header=0pt,footer=0pt]
+\setupbodyfont[10pt]
+
+% All interfaces supported, but testing with english; todo:
+% more options, more alternatives, inheritance and mixed
+% definitions, and so.
+
+\starttext
+
+\startbuffer
+\startbuffer[poem]
+\startpoem{A Random Poem}{Hans Hagen}
+ \startverse
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \stopverse
+ \startverse
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \startline \fakewords{4}{8} \stopline
+ \stopverse
+\stoppoem
+\stopbuffer
+
+\setupformatsegment[verse][width=.4\hsize,number=yes,numberstyle=slanted]
+\setupformatline [line] [number=yes,numberstyle=smallslanted]
+
+\startbuffer[x]
+\setupformatsegment[verse][leftoffset=0pt,rightoffset=0pt,left=,right=]
+\stopbuffer
+
+\section{Alternative A}
+
+\setupformatsegment[verse][alternative=a] {\getbuffer[poem]}
+\setupformatsegment[verse][alternative=a] {\getbuffer[x,poem]}
+
+\section{Alternative B}
+
+\setupformatsegment[verse][alternative=b] {\getbuffer[poem]}
+\setupformatsegment[verse][alternative=b] {\getbuffer[x,poem]}
+
+\section{Alternative C}
+
+\setupformatsegment[verse][alternative=c] {\getbuffer[poem]}
+
+\section{Alternative D}
+
+\setupformatsegment[verse][alternative=d] {\getbuffer[poem]}
+
+\section{Alternative E}
+
+\setupformatsegment[verse][alternative=e] {\getbuffer[poem]}
+\stopbuffer
+
+\typebuffer \getbuffer
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/m-graph.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-graph.mkiv
index 62c4ec4cb87..62c4ec4cb87 100644
--- a/Master/texmf-dist/tex/context/base/m-graph.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-graph.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-hemistich.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-hemistich.mkiv
index 7a849d415be..7a849d415be 100644
--- a/Master/texmf-dist/tex/context/base/m-hemistich.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-hemistich.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-ipsum.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv
index 1c5901d8696..1c5901d8696 100644
--- a/Master/texmf-dist/tex/context/base/m-ipsum.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-ipsum.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-json.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-json.mkiv
index 329aa0f316c..095b49558b4 100644
--- a/Master/texmf-dist/tex/context/base/m-json.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-json.mkiv
@@ -27,4 +27,6 @@
\registerctxluafile{util-jsn}{}
+% \def\u#1#2#3#4{\cldcontext{utf.char(0x#1#2#3#4)}}
+
\stopmodule
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-layout.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-layout.mkiv
new file mode 100644
index 00000000000..5ccf0e98731
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-layout.mkiv
@@ -0,0 +1,102 @@
+%D \module
+%D [ file=m-layout,
+%D version=2004.01.16,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Additional Layouts,
+%D author={Hans Hagen \& Ton Otten},
+%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.
+
+% layout-preset - thf th tf
+
+%D This is a preliminary module, don't depend on these dimensions yet.
+
+\readsysfile{lang-frq}\donothing\donothing
+\readsysfile{lang-frd}\donothing\donothing
+
+\unprotect
+
+% \def\layouthwratio{\withoutpt\the\dimexpr8\paperheight/\dimexpr(\paperwidth/ 8192)\relax}
+% \def\layouthwratio{\withoutpt\the\dimexpr4\paperheight/\dimexpr(\paperwidth/16384)\relax}
+% \def\layouthwratio{\withoutpt\the\dimexpr2\paperheight/\dimexpr(\paperwidth/32768)\relax}
+
+\def\layouthwratio
+ {\withoutpt\the\dimexpr2\paperheight/(\paperwidth/32768)\relax}
+
+\def\layouthfheight
+ {\dimexpr\layoutparameter\c!header+\layoutparameter\c!headerdistance+
+ \layoutparameter\c!footer+\layoutparameter\c!footerdistance\relax}
+
+\startsetups[preset-1]
+
+ \xdef\layoutwidth {\dimexpr\layoutparameter\c!width\relax}
+ \gdef\layoutheight{\dimexpr\layouthwratio\dimexpr\layoutwidth\relax+\layouthfheight\relax}
+
+\stopsetups
+
+\definelayout
+ [preset-1-1]
+ [\c!preset=preset-1,
+ \c!backspace=\dimexpr(\paperwidth-\layoutwidth)/2\relax,
+ \c!width=\dimexpr2\paperwidth/3\relax,
+ \c!cutspace=\dimexpr(\paperwidth-\layoutwidth)/2\relax,
+ \c!margin=\dimexpr(\paperwidth-\layoutwidth)/3\relax,
+ \c!header=2\lineheight,
+ \c!headerdistance=\lineheight,
+ \c!height=\v!middle, % \layoutheight
+ \c!footerdistance=\layoutparameter\c!headerdistance, % \lineheight,
+ \c!footer=\layoutparameter\c!header, % 2\lineheight,
+ \c!topspace=\dimexpr1\dimexpr\paperheight-(\layoutheight+\layouthfheight)\relax/3\relax,
+ \c!bottomspace=\dimexpr2\dimexpr\paperheight-(\layoutheight+\layouthfheight)\relax/3\relax]
+
+\startsetups[preset-2]
+
+ \gdef\layouthstep{\dimexpr\paperwidth /\layoutparameter\c!columns\relax}
+ \gdef\layoutvstep{\dimexpr\paperheight/\layoutparameter\c!columns\relax}
+
+\stopsetups
+
+\definelayout
+ [preset-2-1]
+ [\c!preset=preset-2,
+ \c!columns=12,
+ \c!backspace=\layouthstep,
+ \c!width=\v!middle,
+ \c!cutspace=2\layouthstep,
+ \c!margin=\layouthstep,
+ \c!header=2\lineheight,
+ \c!headerdistance=\lineheight,
+ \c!height=\v!middle, % \layoutheight
+ \c!footerdistance=\layoutparameter\c!headerdistance,
+ \c!footer=\layoutparameter\c!header,
+ \c!topspace=\dimexpr\layoutvstep-\layoutparameter\c!header-\layoutparameter\c!headerdistance\relax,
+ \c!bottomspace=\dimexpr(2\layoutvstep)-\layoutparameter\c!header-\layoutparameter\c!headerdistance\relax]
+
+\definelayout
+ [preset-2-2]
+ [\c!preset=preset-2,
+ \c!columns=12,
+ \c!backspace=\layouthstep,
+ \c!width=\v!middle,
+ \c!cutspace=2\layouthstep,
+ \c!margin=\layouthstep,
+ \c!header=2\lineheight,
+ \c!headerdistance=\lineheight,
+ \c!height=\v!middle, % \layoutheight
+ \c!footerdistance=\layoutparameter\c!headerdistance,
+ \c!footer=\layoutparameter\c!header,
+ \c!topspace=\layoutvstep,
+ \c!bottomspace=\layoutvstep] % maybe 1.5
+
+% \setuplayout[preset-1-1] test \showframe \page
+% \setuplayout[preset-1-1][width=65\averagecharwidth] \setuplayout[preset-1-1] test \showframe \page
+% \setuplayout[preset-2-1] test \showframe \page
+% \setuplayout[preset-2-1][columns=10] \setuplayout[preset-2-1] test \showframe \page
+% \setuplayout[preset-2-2] test \showframe \page
+% \setuplayout[preset-2-2][columns=10] \setuplayout[preset-2-2] test \showframe \page
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-logcategories.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-logcategories.mkiv
index 954cd58c483..954cd58c483 100644
--- a/Master/texmf-dist/tex/context/base/m-logcategories.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-logcategories.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-markdown.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-markdown.lua
index 1f9402f60e3..1f9402f60e3 100644
--- a/Master/texmf-dist/tex/context/base/m-markdown.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-markdown.lua
diff --git a/Master/texmf-dist/tex/context/base/m-markdown.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-markdown.mkiv
index 6e003651309..6e003651309 100644
--- a/Master/texmf-dist/tex/context/base/m-markdown.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-markdown.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-mathcrap.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-mathcrap.mkiv
index 25efd2d5de3..25efd2d5de3 100644
--- a/Master/texmf-dist/tex/context/base/m-mathcrap.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-mathcrap.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-matrix.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-matrix.mkiv
index ccb376e39c7..ccb376e39c7 100644
--- a/Master/texmf-dist/tex/context/base/m-matrix.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-matrix.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-mkii.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-mkii.mkiv
index dcfd29d2092..dcfd29d2092 100644
--- a/Master/texmf-dist/tex/context/base/m-mkii.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-mkii.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-mkivhacks.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-mkivhacks.mkiv
index 3ed002e1d50..3ed002e1d50 100644
--- a/Master/texmf-dist/tex/context/base/m-mkivhacks.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-mkivhacks.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi
new file mode 100644
index 00000000000..a2c20dff745
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-morse.mkvi
@@ -0,0 +1,273 @@
+%D \module
+%D [ file=m-morse,
+%D version=2010.12.10,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Morse,
+%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.
+
+% todo: act upon the node list
+% make it a buffer operation
+% nice in cld manual
+
+\startluacode
+
+moduledata.morse = moduledata.morse or { }
+local morse = moduledata.morse
+
+local utfcharacters, gsub = string.utfcharacters, string.gsub
+local ucchars, shchars = characters.ucchars, characters.shchars
+
+local codes = {
+
+ ["A"] = "·—",
+ ["B"] = "—···",
+ ["C"] = "—·—·",
+ ["D"] = "—··",
+ ["E"] = "·",
+ ["F"] = "··—·",
+ ["G"] = "——·",
+ ["H"] = "····",
+ ["I"] = "··",
+ ["J"] = "·———",
+ ["K"] = "—·—",
+ ["L"] = "·—··",
+ ["M"] = "——",
+ ["N"] = "—·",
+ ["O"] = "———",
+ ["P"] = "·——·",
+ ["Q"] = "——·—",
+ ["R"] = "·—·",
+ ["S"] = "···",
+ ["T"] = "—",
+ ["U"] = "··—",
+ ["V"] = "···—",
+ ["W"] = "·——",
+ ["X"] = "—··—",
+ ["Y"] = "—·——",
+ ["Z"] = "——··",
+
+ ["0"] = "—————",
+ ["1"] = "·————",
+ ["2"] = "··———",
+ ["3"] = "···——",
+ ["4"] = "····—",
+ ["5"] = "·····",
+ ["6"] = "—····",
+ ["7"] = "——···",
+ ["8"] = "———··",
+ ["9"] = "————·",
+
+ ["."] = "·—·—·—",
+ [","] = "——··——",
+ [":"] = "———···",
+ [";"] = "—·—·—",
+
+ ["?"] = "··——··",
+ ["!"] = "—·—·——",
+
+ ["-"] = "—····—",
+ ["/"] = "—··—· ",
+
+ ["("] = "—·——·",
+ [")"] = "—·——·—",
+
+ ["="] = "—···—",
+ ["@"] = "·——·—·",
+
+ ["'"] = "·————·",
+ ['"'] = "·—··—·",
+
+ ["À"] = "·——·—",
+ ["Å"] = "·——·—",
+ ["Ä"] = "·—·—",
+ ["Æ"] = "·—·—",
+ ["Ç"] = "—·—··",
+ ["É"] = "··—··",
+ ["È"] = "·—··—",
+ ["Ñ"] = "——·——",
+ ["Ö"] = "———·",
+ ["Ø"] = "———·",
+ ["Ü"] = "··——",
+ ["ß"] = "··· ···",
+
+}
+
+morse.codes = codes
+
+local fallbackself = false
+
+local function codefallback(t,k)
+ if k then
+ local u = ucchars[k]
+ local v = rawget(t,u) or rawget(t,shchars[u]) or false
+ t[k] = v
+ return v
+ elseif fallbackself then
+ return k
+ else
+ return false
+ end
+end
+
+table.setmetatableindex(codes,codefallback)
+
+local MorseBetweenWords = context.MorseBetweenWords
+local MorseBetweenCharacters = context.MorseBetweenCharacters
+local MorseLong = context.MorseLong
+local MorseShort = context.MorseShort
+local MorseSpace = context.MorseSpace
+local MorseUnknown = context.MorseUnknown
+
+local function toverbose(str)
+ str = gsub(str,"%s*+%s*","+")
+ str = gsub(str,"%s+"," ")
+ local done = false
+ for m in utfcharacters(str) do
+ if done then
+ MorseBetweenCharacters()
+ end
+ if m == "·" or m == "." then
+ MorseShort()
+ done = true
+ elseif m == "—" or m == "-" then
+ MorseLong()
+ done = true
+ elseif m == " " then
+ if done then
+ MorseBetweenCharacters()
+ end
+ done = false
+ elseif m == "+" then
+ MorseBetweenWords()
+ done = false
+ else
+ MorseUnknown(m)
+ end
+ end
+end
+
+local function toregular(str)
+ local inmorse = false
+ for s in utfcharacters(str) do
+ local m = codes[s]
+ if m then
+ if inmorse then
+ MorseBetweenWords()
+ else
+ inmorse = true
+ end
+ local done = false
+ for m in utfcharacters(m) do
+ if done then
+ MorseBetweenCharacters()
+ else
+ done = true
+ end
+ if m == "·" then
+ MorseShort()
+ elseif m == "—" then
+ MorseLong()
+ elseif m == " " then
+ MorseBetweenCharacters()
+ end
+ end
+ inmorse = true
+ elseif s == "\n" or s == " " then
+ MorseSpace()
+ inmorse = false
+ else
+ if inmorse then
+ MorseBetweenWords()
+ else
+ inmorse = true
+ end
+ MorseUnknown(s)
+ end
+ end
+end
+
+local function tomorse(str,verbose)
+ if verbose then
+ toverbose(str)
+ else
+ toregular(str)
+ end
+end
+
+morse.tomorse = tomorse
+
+function morse.filetomorse(name,verbose)
+ tomorse(resolvers.loadtexfile(name),verbose)
+end
+
+function morse.showtable()
+ context.starttabulate { "|l|l|" } -- { "|l|l|l|" }
+ for k, v in table.sortedpairs(codes) do
+ context.NC() context(k)
+ -- context.NC() context(v)
+ context.NC() tomorse(v,true)
+ context.NC() context.NR()
+ end
+ context.stoptabulate()
+end
+
+\stopluacode
+
+\unprotect
+
+% todo: \setupmorse, but probably it's not worth the trouble.
+
+\def\MorseWidth {0.4em}
+\def\MorseHeight {0.2em}
+%def\MorseShort {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=\dimexpr\MorseWidth]}
+%def\MorseLong {\dontleavehmode\blackrule[\c!height=\MorseHeight,\c!width=3\dimexpr\MorseWidth]}
+\def\MorseShort {\dontleavehmode\vrule\!!width \dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax}
+\def\MorseLong {\dontleavehmode\vrule\!!width3\dimexpr\MorseWidth\!!height\MorseHeight\!!depth\zeropoint\relax}
+\def\MorseBetweenCharacters {\kern\MorseWidth}
+\def\MorseBetweenWords {\hskip3\dimexpr\MorseWidth\relax}
+\def\MorseSpace {\hskip7\dimexpr\MorseWidth\relax}
+\def\MorseUnknown #text{[\detokenize{#text}]}
+
+\unexpanded\def\MorseCode #text{\ctxlua{moduledata.morse.tomorse(\!!bs#text\!!es,true)}}
+\unexpanded\def\MorseString #text{\ctxlua{moduledata.morse.tomorse(\!!bs#text\!!es)}}
+\unexpanded\def\MorseFile #text{\ctxlua{moduledata.morse.filetomorse("#text")}}
+\unexpanded\def\MorseTable {\ctxlua{moduledata.morse.showtable()}}
+
+\let\Morse \MorseString
+
+%def\MorseShort {·}
+%def\MorseLong {—}
+
+\protect
+
+\continueifinputfile{m-morse.mkvi}
+
+\starttext
+
+\MorseTable
+
+\startlines
+\MorseCode{—·—· ——— —· — · —··— —+—— —·— ·· ···—}
+\MorseCode{—·—· ——— —· — · —··— — + —— —·— ·· ···—}
+\Morse{ÀÁÂÃÄÅàáâãäå}
+\Morse{ÆÇæç}
+\Morse{ÈÉÊËèéêë}
+\Morse{ÌÍÎÏìíîï}
+\Morse{Ññ}
+\Morse{ÒÓÔÕÖòóôõö}
+\Morse{Øø}
+\Morse{ÙÚÛÜùúû}
+\Morse{Ýýÿ}
+\Morse{ß}
+\Morse{Ţţ}
+\stoplines
+
+\Morse{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-narrowtt.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-narrowtt.mkiv
new file mode 100644
index 00000000000..7d497a02f18
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-narrowtt.mkiv
@@ -0,0 +1,39 @@
+%D \module
+%D [ file=m-narrowtt,
+%D version=2005.09.08,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Narrow Verbatim,
+%D author={Hans Hagen \& Ton Otten},
+%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 Test file
+%D
+%D \starttyping
+%D \startTEX
+%D \usemodule[narrowtt]
+%D \starttext
+%D \starttyping
+%D Test test test.
+%D \stoptyping
+%D test \type {test} test \type{test} test
+%D \starttyping
+%D Test test test.
+%D \stoptyping
+%D \stoptext
+%D \stopTEX
+
+\unprotect
+
+\definetypeface
+ [narrowtt] [tt]
+ [mono] [modern-condensed] [\s!default] [\s!features=\s!none]
+
+\definetyping[n\v!typing] \setuptyping[n\v!typing][style=\narrowtt]
+\definetype [n\v!type] \setuptype [n\v!type] [style=\narrowtt]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-nodechart.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua
index 612b737672a..da80faed9ec 100644
--- a/Master/texmf-dist/tex/context/base/m-nodechart.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.lua
@@ -49,21 +49,21 @@ end
-- subtype width leader spec (stretch shrink ...
function formatters.glue(n,comment)
- local s = n.spec
- -- return format("\\doFLOWgluenode{%s}{%s}{%s}{%s}{%s}",comment,gluecodes[n.subtype],points(s.width),points(s.stretch),points(s.shrink))
- return format("\\doFLOWgluenode{%s}{%s}{%.4f}{%.4f}{%.4f}",comment,gluecodes[n.subtype],s.width*ptfactor,s.stretch*ptfactor,s.shrink*ptfactor)
+ return format("\\doFLOWgluenode{%s}{%s}{%.4f}{%.4f}{%.4f}",comment,gluecodes[n.subtype],n.width*ptfactor,n.stretch*ptfactor,n.shrink*ptfactor)
end
-- subtype width leader spec (stretch shrink ...
function formatters.whatsit(n,comment)
- local subtype = n.subtype
- local whatsit = whatsitcodes[subtype]
- if whatsit == "dir" or whatsit == "localpar" then
- return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,whatsit,n.dir)
- else
- return nodecodes[n.id]
- end
+ return whatsitcodes[n.id] or "unknown whatsit"
+end
+
+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)
end
-- I will make a dedicated set of shapes for this.
diff --git a/Master/texmf-dist/tex/context/base/m-nodechart.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.mkvi
index c9d9858506c..c9d9858506c 100644
--- a/Master/texmf-dist/tex/context/base/m-nodechart.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-nodechart.mkvi
diff --git a/Master/texmf-dist/tex/context/base/m-ntb-to-xtb.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv
index 55b4ab25926..55b4ab25926 100644
--- a/Master/texmf-dist/tex/context/base/m-ntb-to-xtb.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-obsolete.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-obsolete.mkiv
index 2d4518181e6..2d4518181e6 100644
--- a/Master/texmf-dist/tex/context/base/m-obsolete.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-obsolete.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-oldfun.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv
index 3f2ec0263ed..3f2ec0263ed 100644
--- a/Master/texmf-dist/tex/context/base/m-oldfun.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-oldfun.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-oldnum.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv
index 382c56eb674..382c56eb674 100644
--- a/Master/texmf-dist/tex/context/base/m-oldnum.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-oldnum.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-pictex.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-pictex.mkiv
new file mode 100644
index 00000000000..73aad3f57df
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-pictex.mkiv
@@ -0,0 +1,46 @@
+%D \module
+%D [ file=m-pictex,
+%D version=1997.01.15,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=\PICTEX\ Loading Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Just in case someone still uses \PICTEX:
+
+\ifdefined\beginpicture \else
+
+ \ifdefined\grid \else
+ \let\normalgrid\grid
+ \fi
+
+ \ifdefined\axis \else
+ \let\normalaxis\axis
+ \fi
+
+ \ifdefined\fiverm \else
+ \font\fiverm=cmr5
+ \fi
+
+ \input prepictex.tex \relax
+ \input pictex.tex \relax
+ \input postpictex.tex \relax
+
+ \ifdefined\normalgrid
+ \let\pictexgrid\grid
+ \let\grid\normalgrid
+ \fi
+
+ \ifdefined\normalaxis
+ \let\pictexaxis\axis
+ \let\axis\normalaxis
+ \fi
+
+\fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-pipemode.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-pipemode.mkiv
index e96394c431e..e96394c431e 100644
--- a/Master/texmf-dist/tex/context/base/m-pipemode.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-pipemode.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-pstricks.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.lua
index b151e313ac8..b151e313ac8 100644
--- a/Master/texmf-dist/tex/context/base/m-pstricks.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.lua
diff --git a/Master/texmf-dist/tex/context/base/m-pstricks.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.mkiv
index 421607aafe9..421607aafe9 100644
--- a/Master/texmf-dist/tex/context/base/m-pstricks.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-pstricks.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-punk.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv
index c8021a92f4e..331e90d2e99 100644
--- a/Master/texmf-dist/tex/context/base/m-punk.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-punk.mkiv
@@ -162,7 +162,6 @@ function fonts.handlers.vf.combiner.commands.metafont(g,v)
end
g.properties.virtualized = true
g.variants = list
- print(g)
end
fonts.definers.methods.install( "punk", {
diff --git a/Master/texmf-dist/tex/context/base/m-scite.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv
index 7a8e8b06e6f..71f31becef3 100644
--- a/Master/texmf-dist/tex/context/base/m-scite.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-scite.mkiv
@@ -32,6 +32,8 @@
% TODO: as these files are in tds we can locate them and set the lexer root
% to that one. Currently we're on: we're on context/documents.
+% TODO: tab
+
% This is an experiment: eventually we need to hook it into the verbatim code
% and deal with widow lines and so.
@@ -71,6 +73,7 @@ local f_mapping = [[
\let\string\slxH\string\letterhash
\let\string\slxB\string\letterbackslash
\let\string\slxP\string\letterpercent
+\let\string\slxT\string\lettertilde
\let\string\slxS\string\fixedspace
%]]
@@ -84,6 +87,7 @@ local replacer = lpeg.replacer {
["#"] = "\\slxH ",
["\\"] = "\\slxB ",
["%"] = "\\slxP ",
+ ["~"] = "\\slxT ",
[" "] = "\\slxS ",
}
@@ -187,8 +191,17 @@ end
{\ctxlua{buffers.scite.installcommands()}%
\let\installscitecommands\relax}
-\unexpanded\def\startscite{\startlines}
-\unexpanded\def\stopscite {\stoplines}
+\unexpanded\def\startscite
+ {\begingroup
+ \dosingleempty\buff_scite_start}
+
+\def\buff_scite_start[#1]%
+ {\edef\currentscitelexer{#1}%
+ \dostartbuffer[@scite@][startscite][stopscite]}
+
+\unexpanded\def\stopscite
+ {\scitebuffer[\ifx\currentscitelexer\empty tex\else\currentscitelexer\fi][@scite@]%
+ \endgroup}
\unexpanded\def\scitefile
{\dosingleargument\module_scite_file}
@@ -199,10 +212,11 @@ end
\installscitecommands
\tt
\dontcomplain
- \setcatcodetable\ctxcatcodes % needed in xml
- \startscite
+ \startcontextcode
+ \startlines
\getbuffer[lex]%
- \stopscite
+ \stoplines
+ \stopcontextcode
\stop}
\unexpanded\def\scitebuffer
@@ -219,9 +233,9 @@ end
\tt
\dontcomplain
\setcatcodetable\ctxcatcodes % needed in xml
- \startscite
+ \startlines
\getbuffer[lex]%
- \stopscite
+ \stoplines
\stop}
\protect
diff --git a/Master/texmf-dist/tex/context/base/m-spreadsheet.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.lua
index 1b3c5cb34f5..1b3c5cb34f5 100644
--- a/Master/texmf-dist/tex/context/base/m-spreadsheet.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.lua
diff --git a/Master/texmf-dist/tex/context/base/m-spreadsheet.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.mkiv
index 914a2b57a9e..914a2b57a9e 100644
--- a/Master/texmf-dist/tex/context/base/m-spreadsheet.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-spreadsheet.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-sql.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv
index 60cbdd1be3b..f1df2833a00 100644
--- a/Master/texmf-dist/tex/context/base/m-sql.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-sql.mkiv
@@ -11,7 +11,19 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\startmodule[sql]
+
\registerctxluafile{util-tpl}{}
\registerctxluafile{util-sql}{}
-\endinput
+\setupmodule
+
+\doifsomething {\currentmoduleparameter{method}}{
+ \ctxlua{utilities.sql.setmethod("\currentmoduleparameter{method}")}
+}
+
+\doifsomething {\currentmoduleparameter{server}} {
+ \ctxlua{utilities.sql.setserver("\currentmoduleparameter{server}")}
+}
+
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/base/m-steps.lua b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua
index 8eb4815506e..8eb4815506e 100644
--- a/Master/texmf-dist/tex/context/base/m-steps.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.lua
diff --git a/Master/texmf-dist/tex/context/base/m-steps.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi
index c9c5a063620..c9c5a063620 100644
--- a/Master/texmf-dist/tex/context/base/m-steps.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-steps.mkvi
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/m-subsub.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-subsub.mkiv
new file mode 100644
index 00000000000..88be1168000
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-subsub.mkiv
@@ -0,0 +1,76 @@
+%D \module
+%D [ file=m-subsub,
+%D version=2000.12.14,
+%D title=\CONTEXT\ Private Modules,
+%D subtitle=More Section Levels,
+%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. This module is not public.
+
+\unprotect
+
+\definesection[\s!section-8]
+\definesection[\s!section-9]
+\definesection[\s!section-10]
+\definesection[\s!section-11]
+\definesection[\s!section-12]
+
+\definehead
+ [\v!subsubsubsubsubsection]
+ [\c!section=\s!section-8,
+ \c!default=\v!subsubsubsubsection]
+
+\definehead
+ [\v!subsubsubsubsubsubsection]
+ [\c!section=\s!section-9,
+ \c!default=\v!subsubsubsubsubsection]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsection]
+ [\c!section=\s!section-10,
+ \c!default=\v!subsubsubsubsubsubsection]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsubsection]
+ [\c!section=\s!section-11,
+ \c!default=\v!subsubsubsubsubsubsubsection]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsubsubsection]
+ [\c!section=\s!section-12,
+ \c!default=\v!subsubsubsubsubsubsubsubsection]
+
+\definehead
+ [\v!subsubsubsubsubsubject]
+ [\c!coupling=\v!subsubsubsubsubsection,
+ \c!default=\v!subsubsubsubsubsection,
+ \c!incrementnumber=\v!no]
+
+\definehead
+ [\v!subsubsubsubsubsubsubject]
+ [\c!coupling=\v!subsubsubsubsubsubsection,
+ \c!default=\v!subsubsubsubsubsubsection,
+ \c!incrementnumber=\v!no]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsubject]
+ [\c!coupling=\v!subsubsubsubsubsubsubsection,
+ \c!default=\v!subsubsubsubsubsubsubsection,
+ \c!incrementnumber=\v!no]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsubsubject]
+ [\c!coupling=\v!subsubsubsubsubsubsubsubsection,
+ \c!default=\v!subsubsubsubsubsubsubsubsection,
+ \c!incrementnumber=\v!no]
+
+\definehead
+ [\v!subsubsubsubsubsubsubsubsubsubject]
+ [\c!coupling=\v!subsubsubsubsubsubsubsubsubsection,
+ \c!default=\v!subsubsubsubsubsubsubsubsubsection,
+ \c!incrementnumber=\v!no]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-timing.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkiv
index 5502768f697..5502768f697 100644
--- a/Master/texmf-dist/tex/context/base/m-timing.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-timing.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-trackers.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-trackers.mkiv
index 95c34b16f65..95c34b16f65 100644
--- a/Master/texmf-dist/tex/context/base/m-trackers.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-trackers.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-translate.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-translate.mkiv
index 2e6cbe95088..2e6cbe95088 100644
--- a/Master/texmf-dist/tex/context/base/m-translate.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-translate.mkiv
diff --git a/Master/texmf-dist/tex/context/base/m-units.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-units.mkiv
index b0db8d54895..f85a8ba8a5e 100644
--- a/Master/texmf-dist/tex/context/base/m-units.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-units.mkiv
@@ -260,7 +260,9 @@
{\iftextdimensions
\tx\thedimensionpower
\else
- $\scriptstyle\thedimensionpower$%
+ \normalstartimath
+ \scriptstyle\thedimensionpower
+ \normalstopimath
\fi}%
\ht\scratchbox=\zeropoint
\dodimensionpower{\box\scratchbox}%
diff --git a/Master/texmf-dist/tex/context/base/m-visual.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv
index d502159669a..01fae49e2b6 100644
--- a/Master/texmf-dist/tex/context/base/m-visual.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-visual.mkiv
@@ -25,17 +25,18 @@
\definecolor[fakeparindentcolor][blue]
\newif\iffakebaseline \fakebaselinetrue
+\newif\iffaketrigger \faketriggerfalse
\unexpanded\def\fakerule#1%
{\strut
\begingroup
\directcolored[fakerulecolor]%
\iffakebaseline
- \vrule\s!height1.25ex\s!depth-.05ex\s!width#1%
+ \vrule\s!height1.25\exheight\s!depth-.05\exheight\s!width#1%
\kern-#1%
- \vrule\s!height-.05ex\s!depth .25ex\s!width#1%
+ \vrule\s!height-.05\exheight\s!depth .25\exheight\s!width#1%
\else
- \vrule\s!height1.25ex\s!depth .25ex\s!width#1%
+ \vrule\s!height1.25\exheight\s!depth .25\exheight\s!width#1%
\fi
\endgroup
\allowbreak}
@@ -68,7 +69,10 @@
fr2c=darkgreen,
fr3c=darkblue,
fr4c=darkyellow,
- fr5c=darkgray]
+ fr5c=darkgray,
+ fr6c=darkmagenta,
+ fr7c=darkcyan,
+ fr8c=darkorange]
\unexpanded\def\onlyfakewords#1#2% min max / 10 40
{\getrandomcount\scratchcounter{\ifcase0#1 10\else#1\fi}{\ifcase0#2 40\else#2\fi}%
@@ -86,7 +90,8 @@
\def\dofakewords#1%
{\bgroup
\dorecurse{#1}
- {\getrandomcount\scratchcounter{1}{5}%
+ {\iffaketrigger\signalcharacter\fi % so that e.g. line numbering works
+ \getrandomcount\scratchcounter{1}{5}%
\dorecurse\scratchcounter
{\getrandomdimen\scratchdimen{.5em}{1.25em}%
\fakerule\scratchdimen}%
@@ -134,8 +139,8 @@
\unexpanded\def\fakedroppedcaps#1%
{\ifnum#1>0
\def\dofakedroppedcaps
- {\setbox\scratchbox\hbox
- {\setbox\scratchbox\hbox{W}%
+ {\setbox\scratchbox\hpack
+ {\setbox\scratchbox\hpack{W}%
\scratchdimen#1\lineheight
\advance\scratchdimen -\lineheight
\advance\scratchdimen \dp\strutbox
@@ -209,25 +214,25 @@
\def\dosmashedgrid[#1]%
{\hsmashed
- {\setbox\scratchbox=\hbox
+ {\setbox\scratchbox=\hpack
{\basegrid
[\c!nx=10,\c!ny=10,\c!dx=1,\c!dy=1,
\c!unit=\bodyfontsize,#1]}%
- \hbox to \zeropoint
+ \hpack to \zeropoint
{\hss\lower.5\ht\scratchbox\box\scratchbox\hss}%
- \hbox to \zeropoint
+ \hpack to \zeropoint
{\hss
\black\vrule\s!width6\linewidth\s!height3\linewidth\s!depth3\linewidth
\hss}}}
\unexpanded\def\bodyfontgrid
- {\hbox
+ {\hpack
{{\linewidth.1pt\yellow\smashedgrid[\c!nx=30,\c!ny=30,\c!scale=.3333]}%
{\linewidth.2pt\green \smashedgrid[\c!nx=20,\c!ny=20,\c!scale=.5]}%
{\linewidth.3pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!scale=1]}}}
\unexpanded\def\emexgrid
- {\hbox
+ {\hpack
{{\linewidth.15pt\green\smashedgrid[\c!nx=20,\c!ny=20,\c!unit=ex]}%
{\linewidth.15pt\red \smashedgrid[\c!nx=10,\c!ny=10,\c!unit=em]}}}
@@ -484,7 +489,7 @@
{\fastcolored[#1]{\hrule\s!width3em\s!height\scratchdimen\s!depth\zeropoint}}
\def\docolorrangeA#1 #2 %
- {\vbox
+ {\vpack
{\hsize3em % \scratchdimen
\ifcase#1\or
\dodocolorrangeA{c=#2}\or
@@ -495,12 +500,12 @@
\dodocolorrangeA{c=#2,m=#2}\fi
\ifdim\scratchdimen>1ex
\vskip-\scratchdimen
- \vbox to \scratchdimen
- {\vss\hbox to 3em{\hss#2\hss}\vss}%
+ \vpack to \scratchdimen
+ {\vss\hpack to 3em{\hss#2\hss}\vss}%
\fi}}
\def\colorrangeA#1%
- {\vbox
+ {\vpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*4+\tractempheight+\tractempdepth)/21\relax
\offinterlineskip
@@ -517,12 +522,12 @@
{\vrule\s!width\scratchdimen\s!height\colormarklength\s!depth\zeropoint}%
\ifdim\scratchdimen>2em
\hskip-\scratchdimen
- \vbox to \colormarklength
- {\vss\hbox to \scratchdimen{\hss#1\hss}\vss}%
+ \vpack to \colormarklength
+ {\vss\hpack to \scratchdimen{\hss#1\hss}\vss}%
\fi}
\def\colorrangeB
- {\hbox
+ {\hpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*\plustwo+\tractempwidth)/11\relax
\docolorrangeB .5~C .5 0 0 0
@@ -544,12 +549,12 @@
{\vrule\s!width\scratchdimen\s!height\colormarklength\s!depth\zeropoint}%
\ifdim\scratchdimen>2em
\hskip-\scratchdimen
- \vbox to \colormarklength
- {\vss\hbox to \scratchdimen{\hss#1\hss}\vss}%
+ \vpack to \colormarklength
+ {\vss\hpack to \scratchdimen{\hss#1\hss}\vss}%
\fi}
\def\colorrangeC
- {\hbox
+ {\hpack
{\startcolor[\s!white]%
\scratchdimen\dimexpr(-\colormarklength*2+\tractempwidth)/14\relax
\docolorrangeC 1 \docolorrangeC .95
@@ -569,36 +574,36 @@
{\tractempheight\ht#2%
\tractempdepth \dp#2%
\tractempwidth \wd#2%
- \setbox#2\hbox
+ \setbox#2\hpack
{\scratchdimen\dimexpr\colormarklength/2\relax
\forgetall
\ssxx
- \setbox\scratchbox\vbox
+ \setbox\scratchbox\vpack
{\offinterlineskip
\vskip\dimexpr-\colormarkoffset\scratchdimen-2\scratchdimen\relax
\ifcase#1\relax
\vskip\dimexpr\colormarklength+\scratchdimen+\tractempheight\relax
\else
- \hbox to \tractempwidth{\hss\hbox{\colorrangeB}\hss}%
+ \hpack to \tractempwidth{\hss\hpack{\colorrangeB}\hss}%
\vskip\colormarkoffset\scratchdimen
- \vbox to \tractempheight
+ \vpack to \tractempheight
{\vss
- \hbox to \tractempwidth
+ \hpack to \tractempwidth
{\llap{\colorrangeA1\hskip\colormarkoffset\scratchdimen}\hfill
\rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA4}}%
\vss
- \hbox to \tractempwidth
+ \hpack to \tractempwidth
{\llap{\colorrangeA2\hskip\colormarkoffset\scratchdimen}\hfill
\rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA5}}%
\vss
- \hbox to \tractempwidth
+ \hpack to \tractempwidth
{\llap{\colorrangeA3\hskip\colormarkoffset\scratchdimen}\hfill
\rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA6}}%
\vss}%
\fi
\vskip\colormarkoffset\scratchdimen
- \hbox to \tractempwidth
- {\hss\lower\tractempdepth\hbox{\colorrangeC}\hss}}%
+ \hpack to \tractempwidth
+ {\hss\lower\tractempdepth\hpack{\colorrangeC}\hss}}%
\ht\scratchbox\tractempheight
\dp\scratchbox\tractempdepth
\wd\scratchbox\zeropoint
@@ -668,13 +673,13 @@
\dontshowwhatsits
\ttx
\ifvmode\donetrue\else\donefalse\fi
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\ifdone
\colored[r=#1,g=#2,b=#3]{#5}% temp hack
\else
\colored[s=0]{#5}% temp hack
\fi}%
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\ifdone
\colored[r=#1,g=#2,b=#3]{\vrule\s!width\wd\scratchbox}% temp hack
\else
@@ -682,7 +687,7 @@
\fi
\hskip-\wd\scratchbox\box\scratchbox}%
\scratchdimen1ex
- \setbox\scratchbox\hbox
+ \setbox\scratchbox\hpack
{\ifdone\hskip\else\raise#4\fi\scratchdimen\box\scratchbox}%
\smashbox\scratchbox
\ifdone\nointerlineskip\fi
@@ -735,7 +740,7 @@
\def\dodotagbox#1#2#3% can be reimplemented
{\def\next##1##2##3##4%
- {\vbox to \ht#2{##3\hbox to \wd#2{##1#3##2}##4}}%
+ {\vpack to \ht#2{##3\hpack to \wd#2{##1#3##2}##4}}%
\processaction
[#1]
[ l=>\next\relax\hfill\vfill\vfill,
@@ -757,7 +762,7 @@
{\bgroup
\dowithnextbox
{\setbox\scratchbox\flushnextbox
- \setbox\nextbox\ifhbox\nextbox\hbox\else\vbox\fi
+ \setbox\nextbox\ifhbox\nextbox\hpack\else\vpack\fi
\bgroup
\startoverlay
{\copy\scratchbox}
@@ -786,16 +791,16 @@
\definecolor[strutcolor] [r=.5,g=.25,b=.25]
\unexpanded\def\coloredbox#1%
- {\dowithnextbox{#1{\hbox
+ {\dowithnextbox{#1{\hpack
{\blackrule[\c!width=\nextboxwd,\c!height=\nextboxht,\c!depth=\zeropoint,\c!color=boxcolor:ht]%
\hskip-\nextboxwd
\blackrule[\c!width=\nextboxwd,\c!height=\zeropoint,\c!depth=\nextboxdp,\c!color=boxcolor:dp]%
\hskip-\nextboxwd
\box\nextbox}}}#1}
-\unexpanded\def\coloredhbox{\coloredbox\hbox}
-\unexpanded\def\coloredvbox{\coloredbox\vbox}
-\unexpanded\def\coloredvtop{\coloredbox\vtop}
+\unexpanded\def\coloredhbox{\coloredbox\hpack}
+\unexpanded\def\coloredvbox{\coloredbox\vpack}
+\unexpanded\def\coloredvtop{\coloredbox\tpack}
\unexpanded\def\coloredstrut
{\color[strutcolor]{\def\strutwidth{2\points}\setstrut\strut}}
diff --git a/Master/texmf-dist/tex/context/base/m-zint.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/m-zint.mkiv
index 4957c846173..4957c846173 100644
--- a/Master/texmf-dist/tex/context/base/m-zint.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/m-zint.mkiv
diff --git a/Master/texmf-dist/tex/context/base/ppchtex.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/ppchtex.mkiv
index d1167d4143a..d1167d4143a 100644
--- a/Master/texmf-dist/tex/context/base/ppchtex.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/ppchtex.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-art-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-art-01.mkiv
index 601ee1adc80..601ee1adc80 100644
--- a/Master/texmf-dist/tex/context/base/s-art-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-art-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-def-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-def-01.mkiv
index 49e585bd018..49e585bd018 100644
--- a/Master/texmf-dist/tex/context/base/s-def-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-def-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-figures-names.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-figures-names.mkiv
index a2782efc95d..a2782efc95d 100644
--- a/Master/texmf-dist/tex/context/base/s-figures-names.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-figures-names.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-10.mkiv
index 2fe82e0794b..731c4be392f 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-10.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-10.mkiv
@@ -28,6 +28,9 @@ local fontdata = fonts.hashes.identifiers
-- end
-- end
+local context = context
+local escaped = context.escaped
+
function fonts.tracers.show_all()
local tfmdata = fontdata[font.current()]
if tfmdata then
@@ -79,9 +82,9 @@ function fonts.tracers.show_all()
NC() tttf() context("U+%05X",unicode)
NC() char(unicode)
NC() tttf() context("%05X",index)
- NC() tttf() context(gname)
- NC() tttf() context(aname)
- NC() tttf() context(cname)
+ NC() if gname ~= "" then tttf() escaped(gname) end
+ NC() if aname ~= "" then tttf() context(aname) end
+ NC() if cname ~= "" then tttf() context(cname) end
NC() NR()
end
context.stoptabulate()
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-20.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-20.mkiv
index 5840430990f..5840430990f 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-20.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-20.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-21.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-21.mkiv
index 10d5a462394..10d5a462394 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-21.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-21.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-24.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-24.mkiv
index 2e6b9a59187..2e6b9a59187 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-24.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fnt-24.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-charts.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-charts.mkiv
new file mode 100644
index 00000000000..e94b52a2e76
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-charts.mkiv
@@ -0,0 +1,204 @@
+%D \module
+%D [ file=s-fonts-charts,
+%D version=2015.08.08,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Show Fonts Charts,
+%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.
+
+% begin info
+%
+% title : show unicode blocks
+%
+% comment : show charts of a given fgont
+%
+% end info
+
+\startmodule[fonts-charts]
+
+% \registerctxluafile{s-fonts-charts}{}
+\starttexdefinition unexpanded FontChartSetSlot #1#2
+ \dontleavehmode
+ \setbox\scratchbox\vbox to 1cm \bgroup
+ \vss
+ \hbox to 1cm \bgroup
+ \infofont \hss\raise.25mm\hbox{#2}\hss
+ \egroup
+ \egroup
+ \wd\scratchbox0mm
+ \ht\scratchbox5mm
+ \dp\scratchbox5mm
+ \box\scratchbox
+ \setbox\scratchbox\ruledhbox to 1cm \bgroup
+ \hss\char#1\hss
+ \egroup
+ \ht\scratchbox5mm
+ \dp\scratchbox5mm
+ \box\scratchbox
+\stoptexdefinition
+
+\starttexdefinition unexpanded FontChartNoSlot
+ \dontleavehmode
+ \setbox\scratchbox\hbox to 1cm \bgroup
+ % empty
+ \egroup
+ \ht\scratchbox5mm
+ \dp\scratchbox5mm
+ \box\scratchbox
+\stoptexdefinition
+
+\starttexdefinition unexpanded FontChartSetLegend #1
+ \dontleavehmode
+ \setbox\scratchbox\hbox to 1cm \bgroup
+ \infofont\hss#1\hss
+ \egroup
+ \ht\scratchbox5mm
+ \dp\scratchbox5mm
+ \box\scratchbox
+\stoptexdefinition
+
+\starttexdefinition unexpanded FontChartSetCaption #1#2
+ \dontleavehmode
+ \setbox\scratchbox\hbox to 16cm \bgroup
+ \infofontbold\hskip1cm#1: #2\hss
+ \egroup
+ \ht\scratchbox7.5mm
+ \dp\scratchbox2.5mm
+ \box\scratchbox
+\stoptexdefinition
+
+\starttexdefinition unexpanded FontChartGap
+ \kern .5mm
+\stoptexdefinition
+
+\startluacode
+ local div, mod = math.div, math.mod
+ local formatters = string.formatters
+
+ moduledata.fonts = moduledata.fonts or { }
+ moduledata.fonts.charts = moduledata.fonts.charts or { }
+
+ function moduledata.fonts.charts.show(settings)
+
+ local settings = utilities.parsers.settings_to_hash(settings)
+
+ local filename = settings.filename or ""
+ local fontid = true
+ local newpage = settings.page == interfaces.variables.yes
+
+ if filename ~= "" then
+ fontid = fonts.definers.internal({ name = filename, size = "10pt" },"chartfont")
+ end
+
+ local ranges = { }
+ local data = fonts.hashes.identifiers[fontid]
+ local private = fonts.constructors.privateoffset
+ local chars = data.characters
+
+ for u in table.sortedhash(chars) do
+ if u >= private then
+ break
+ else
+ ranges[div(u,0xFF)] = true
+ end
+ end
+
+ local ctx_setlegend = context.FontChartSetLegend
+ local ctx_noslot = context.FontChartNoSlot
+ local ctx_setslot = context.FontChartSetSlot
+ local ctx_setcaption = context.FontChartSetCaption
+ local ctx_par = context.par
+ local ctx_gap = context.FontChartGap
+
+ for r in table.sortedhash(ranges) do
+ if newpage then
+ context.page()
+ end
+ context.startframed { offset = "overlay", frame = "off", align = "normal" }
+ if filename ~= "" then
+ context.chartfont()
+ end
+ context.dontcomplain()
+ context.offinterlineskip()
+ ctx_noslot()
+ for i=0,0xF do
+ ctx_setlegend(formatters["%03X"](r*0x10+i))
+ end
+ r = r * 0xFF
+ ctx_par()
+ for i=0,0xF do
+ ctx_setlegend(formatters["%0X"](i))
+ ctx_gap()
+ for j=0,0xF do
+ local u = r + i*0x10 + j
+ local d = chars[u]
+ if d then
+ ctx_setslot(u,formatters["%04X"](u))
+ else
+ ctx_noslot()
+ end
+ if j ~= 0xF then
+ ctx_gap()
+ end
+ end
+ ctx_par()
+ ctx_gap()
+ end
+ ctx_setcaption(formatters["%04X-%04X"](r,r+0xFF),file.basename(data.properties.filename))
+ ctx_par()
+ context.stopframed()
+ if newpage then
+ context.page()
+ end
+ end
+ end
+\stopluacode
+
+\installmodulecommandluasingle \showfontchart {moduledata.fonts.charts.show}
+
+\stopmodule
+
+\continueifinputfile{s-fonts-charts.mkiv}
+
+\usemodule[art-01]
+
+\starttext
+
+ \showfontchart[filename=LucidaBrightOT.otf,page=yes]
+ \showfontchart[filename=LucidaBrightOT-Demi.otf,page=yes]
+ \showfontchart[filename=LucidaBrightOT-DemiItalic.otf,page=yes]
+ \showfontchart[filename=LucidaBrightOT-Italic.otf,page=yes]
+
+ \showfontchart[filename=LucidaSansOT.otf,page=yes]
+ \showfontchart[filename=LucidaSansOT-Demi.otf,page=yes]
+ \showfontchart[filename=LucidaSansOT-DemiItalic.otf,page=yes]
+ \showfontchart[filename=LucidaSansOT-Italic.otf,page=yes]
+
+ \showfontchart[filename=LucidaSansTypewriterOT.otf,page=yes]
+ \showfontchart[filename=LucidaSansTypewriterOT-Bold.otf,page=yes]
+ \showfontchart[filename=LucidaSansTypewriterOT-BoldOblique.otf,page=yes]
+ \showfontchart[filename=LucidaSansTypewriterOT-Oblique.otf,page=yes]
+
+ \showfontchart[filename=LucidaConsoleDK.otf,page=yes]
+ \showfontchart[filename=LucidaConsoleDK-Bold.otf,page=yes]
+ \showfontchart[filename=LucidaConsoleDK-BoldItalic.otf,page=yes]
+ \showfontchart[filename=LucidaConsoleDK-Italic.otf,page=yes]
+
+ \showfontchart[filename=LucidaGrandeMonoDK.otf,page=yes]
+ \showfontchart[filename=LucidaGrandeMonoDK-Bold.otf,page=yes]
+ \showfontchart[filename=LucidaGrandeMonoDK-BoldItalic.otf,page=yes]
+ \showfontchart[filename=LucidaGrandeMonoDK-Italic.otf,page=yes]
+
+ \showfontchart[filename=LucidaBrightMathOT.otf,page=yes]
+ \showfontchart[filename=LucidaBrightMathOT-Demi.otf,page=yes]
+
+ \showfontchart[filename=LucidaBlackletterOT.otf,page=yes]
+ \showfontchart[filename=LucidaCalligraphyOT.otf,page=yes]
+ \showfontchart[filename=LucidaHandwritingOT.otf,page=yes]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-coverage.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.lua
index dd772d5f09b..dd772d5f09b 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-coverage.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.lua
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv
index c09d943bcca..c09d943bcca 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-coverage.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-coverage.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-features.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.lua
index 0a7cf8b132c..0a7cf8b132c 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-features.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.lua
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-features.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.mkiv
index b81b53a7176..b81b53a7176 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-features.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-features.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-goodies.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.lua
index 381fc45eabf..381fc45eabf 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-goodies.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.lua
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.mkiv
index e596507afa9..e596507afa9 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-goodies.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-goodies.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-ligatures.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-ligatures.mkiv
index e6ff2461e8c..fc49ec5c58b 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-ligatures.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-ligatures.mkiv
@@ -78,7 +78,7 @@
\starttexdefinition showotfligaturesbanner #1
\bTR[frame=off]
- \bTD [nx=\showotfligaturesnx,width=\showotfligatureswidth,align={middle,lohi},height=4ex]
+ \bTD [nx=\showotfligaturesnx,xwidth=\showotfligatureswidth,align={middle,lohi},height=4ex]
\tttf #1
\eTD
\eTR
@@ -138,7 +138,7 @@
\starttexdefinition showotfligaturesdefaults
\bTR
- \bTD [nx=\showotfligaturesnx,width=\showotfligatureswidth,align=middle,height=4ex,frame=off]
+ \bTD [nx=\showotfligaturesnx,xwidth=\showotfligatureswidth,align=middle,height=4ex,frame=off]
\start \LigatureFont fb \stop \quad
\start \LigatureFont ff \stop \quad
\start \LigatureFont fi \stop \quad
@@ -156,10 +156,12 @@
\stoptexdefinition
\starttexdefinition showotfligaturesexample #1#2
+ \ctxlua{document.currentdiscexpansion = fonts.getdiscexpansion()}%
\showotfligaturescaptions {#1}
\showotfligatureslines {#2}
\showotfligaturesparagraphs{#2}
\showotfligaturesextremes {#2}
+ \ctxlua{fonts.setdiscexpansion(document.currentdiscexpansion)}%
\stoptexdefinition
% todo: n -> and split in lua
@@ -192,101 +194,16 @@
\starttext
- \startTEXpage[offset=10pt] \showotfligatures[font=lmroman10-regular.otf, features=default] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=dejavu-serif.ttf, features=default] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=minionpro.otf, features=default] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=minionpro.otf, features=smallcaps] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=brill.otf, features=default] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=gentiumplus-r.ttf, features=default] \stopTEXpage
- \startTEXpage[offset=10pt] \showotfligatures[font=cambria, features=default] \stopTEXpage
+ \definefontfeature[fonttest][default] [mode=node,language=dflt,script=latn,ccmp=yes,liga=yes,kern=yes,mark=yes,mkmk=yes]
+ \definefontfeature[capstest][smallcaps][mode=node,language=dflt,script=latn,ccmp=yes,liga=yes,kern=yes,mark=yes,mkmk=yes]
-\stoptext
+ \startTEXpage[offset=10pt] \showotfligatures[font=lmroman10-regular.otf, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=dejavu-serif.ttf, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=minionpro.otf, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=minionpro.otf, features=capstest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=brill.otf, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=gentiumplus-r.ttf, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=cambria, features=fonttest] \stopTEXpage
+ \startTEXpage[offset=10pt] \showotfligatures[font=ebgaramond12-regular.otf,features=fonttest] \stopTEXpage
-% \startluacode
-%
-% local f = fonts.hashes.identifiers[true]
-%
-% local sequences = f.resources.sequences
-% local descriptions = f.shared.rawdata.descriptions
-% local lookuptypes = f.resources.lookuptypes
-% local lookups = f.resources.lookups
-%
-% local ligatures = { "liga", "dlig", "rlig", "clig", "tlig", "ccmp" }
-% local found = { }
-%
-% for i=1,#sequences do
-% local sequence = sequences[i]
-% local features = sequence.features
-% for i=1,#ligatures do
-% local l = ligatures[i]
-% if features[l] then
-% local subtables = sequence.subtables
-% if subtables then
-% for i=1,#subtables do
-% local subtable = subtables[i]
-% local lookup = found[subtable]
-% if lookup then
-% lookup[l] = true
-% else
-% found[subtable] = { [l] = true }
-% end
-% end
-% end
-% end
-% end
-% end
-%
-% context.starttabulate { "|||T|T|T|" }
-%
-% local function flush(l,v,start,unicode,data,done)
-% local features = found[l]
-% if features then
-% local lookuptype = lookuptypes[l]
-% if lookuptype == "ligature" then
-% local t = { }
-% for i=1,#v do
-% t[i] = utf.char(v[i])
-% end
-% t = table.concat(t," ")
-% if not done[t] then
-% context.NC()
-% context(t)
-% context.NC()
-% context(utf.char(unicode))
-% context.NC()
-% context(" %t",table.sortedkeys(features))
-% context.NC()
-% local name = data.name
-% if name then
-% context(name)
-% end
-% context.NC()
-% context("%U",unicode)
-% context.NC()
-% context.NR()
-% done[t] = true
-% end
-% end
-% end
-% end
-%
-% for unicode, data in table.sortedhash(descriptions) do
-% local slookups = data.slookups
-% local mlookups = data.mlookups
-% local done = { }
-% if slookups then
-% for l, v in next, slookups do
-% flush(l,v,1,unicode,data,done)
-% end
-% end
-% if mlookups then
-% for i=1,#mlookups do
-% local v = mlookups[i]
-% flush(v[1],v,2,unicode,data,done)
-% end
-% end
-% end
-%
-% context.stoptabulate()
-%
-% \stopluacode
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-missing.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.lua
index 9a75676a908..9a75676a908 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-missing.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.lua
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.mkiv
index c566f4995d3..c566f4995d3 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-missing.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-missing.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-shapes.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.lua
index bca860f3fb8..8f872e4bcc5 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-shapes.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.lua
@@ -303,7 +303,10 @@ function moduledata.fonts.shapes.showallglypshapes(specification)
local id, cs = fonts.definers.internal(specification,"<module:fonts:shapes:font>")
local descriptions = fontdata[id].descriptions
for unicode, description in fonts.iterators.descriptions(tfmdata) do
- context.modulefontsstartshowglyphshape(unicode,description.name)
+ if unicode >= 0x110000 then
+ break
+ end
+ context.modulefontsstartshowglyphshape(unicode,description.name or "",description.index or 0)
showglyphshape { number = id, character = unicode }
context.modulefontsstopshowglyphshape()
end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv
index f8eb8ffddd3..c1e9d61d2d6 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-shapes.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-shapes.mkiv
@@ -20,21 +20,22 @@
\installmodulecommandluatwo \showlastglyphshapefield {moduledata.fonts.shapes.showlastglyphshapefield}
\installmodulecommandluasingle \showallglyphshapes {moduledata.fonts.shapes.showallglypshapes}
-\let\modulefontsstartshowglyphshape\relax
+\let\modulefontsstartshowglyphshape\gobblethreearguments
\let\modulefontsstopshowglyphshape \relax
\unprotect
\startsetups module:showallglyphshapes:start
- \def\modulefontsstartshowglyphshape##1##2{
+ \unexpanded\def\modulefontsstartshowglyphshape##1##2##3{
\startTEXpage[\c!offset=\exheight]
\edef\lastshownglyphshapefieldunicode{##1}%
\edef\lastshownglyphshapefieldname {##2}%
+ \edef\lastshownglyphshapefieldindex {##3}%
\raggedcenter
}
- \def\modulefontsstopshowglyphshape {
+ \unexpanded\def\modulefontsstopshowglyphshape {
\par
\doifsomething {\lastshownglyphshapefieldunicode} {
\begingroup
@@ -43,8 +44,10 @@
\setstrut
\strut
0x\uchexnumbers\lastshownglyphshapefieldunicode
- :\space
+ \space:\space
\lastshownglyphshapefieldname
+ \space:\space
+ \lastshownglyphshapefieldindex
\par
\endgroup
}
@@ -80,38 +83,33 @@
\starttext
- \savedefinedfont[Bold*default]
+% \savedefinedfont[Bold*default]
+% \showfontshapes[number=\saveddefinedfontid]
+% \page
- \showfontshapes[number=\saveddefinedfontid]
-
- \page
-
- \showfontshapes[name=BoldItalic*default]
-
- \page
+% \showfontshapes[name=BoldItalic*default]
+% \page
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x62A} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0x2004} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
-
- \page
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D43F}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D444}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D447}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x02112}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D432}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D43D}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D44A}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{50bp}{0x1D45D}\stopTEXpage
+% \page
% \showallglyphshapes[name=name:cambria-math,size=100bp]
- % \showallglyphshapes[name=name:dejavuserif,size=100bp]
-
-\stoptext
+% \showallglyphshapes[name=name:dejavuserif,size=100bp]
+\showallglyphshapes[name=file:brill.otf,size=100bp]
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-system.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.lua
index 0c0ad4d863c..5b58a4a533f 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-system.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.lua
@@ -8,19 +8,20 @@ if not modules then modules = { } end modules ['s-fonts-system'] = {
-- ["zapfinoforteltpro"]={
-- ["designsize"]=0,
--- ["familyname"]="zapfinoforteltpro",
-- ["filename"]="zapfinoforteltpro.otf",
-- ["fontname"]="zapfinoforteltpro",
-- ["fontweight"]="regular",
+-- ["family"]="zapfinoforteltpro",
+-- ["subfamily"]="regular",
+-- ["familyname"]="zapfinoforteltpro",
+-- ["subfamilyname"]="regular",
-- ["format"]="otf",
-- ["fullname"]="zapfinoforteltpro",
-- ["maxsize"]=0,
-- ["minsize"]=0,
-- ["modification"]=1105543074,
--- ["modifiers"]="regular",
-- ["rawname"]="ZapfinoForteLTPro",
-- ["style"]="normal",
--- ["subfamily"]="regular",
-- ["variant"]="normal",
-- ["weight"]="normal",
-- ["width"]="normal",
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-system.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.mkiv
index 6d9082a6bdc..6d9082a6bdc 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-system.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-system.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-tables.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua
index b3dac7d0630..c32f4628c17 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-tables.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.lua
@@ -15,7 +15,9 @@ local sortedkeys = table.sortedkeys
local format = string.format
local concat = table.concat
-local tabletracers = moduledata.fonts.tables
+local tabletracers = moduledata.fonts.tables
+
+local context = context
local digits = {
dflt = {
@@ -184,7 +186,7 @@ function tabletracers.showparameters(nesting)
end
function tabletracers.showpositionings()
- local tfmdata = fonts.hashes.identifiers[font.current()]
+ local tfmdata = fonts.hashes.resources[font.current()]
local resources = tfmdata.resources
if resources then
local features = resources.features
@@ -290,6 +292,42 @@ function tabletracers.showsubstitutions()
end
end
+function tabletracers.showunicodevariants()
+
+ local variants = fonts.hashes.variants[true]
+
+ if variants then
+ context.starttabulate { "|c|c|c|c|c|c|c|" }
+ for selector, unicodes in sortedhash(variants) do
+ local done = false
+ for unicode, variant in sortedhash(unicodes) do
+ context.NC()
+ if not done then
+ context("%U",selector)
+ done = true
+ end
+ context.NC()
+ context("%U",unicode)
+ context.NC()
+ context("%c",unicode)
+ context.NC()
+ context("%U",variant)
+ context.NC()
+ context("%c",variant)
+ context.NC()
+ context("%c%c",unicode,selector)
+ context.NC()
+ context.startoverlay()
+ context("{\\color[trace:r]{%c}}{\\color[trace:ds]{%c}}",unicode,variant)
+ context.stopoverlay()
+ context.NC()
+ context.NR()
+ end
+ end
+ context.stoptabulate()
+ end
+
+end
function tabletracers.showall(specification) -- not interfaced
specification = interfaces.checkedspecification(specification)
@@ -314,6 +352,10 @@ function tabletracers.showall(specification) -- not interfaced
tabletracers.showsubstitutions()
context.stopsubject()
+ context.startsubject { title = "Unicode variants" }
+ tabletracers.showunicodevariants()
+ context.stopsubject()
+
if title then
context.stoptitle()
end
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.mkiv
index e962f952d14..64fe76f0e4b 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-tables.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-tables.mkiv
@@ -17,11 +17,12 @@
\registerctxluafile{s-fonts-tables}{}
-\installmodulecommandluasingle \showfonttables {moduledata.fonts.tables.showall}
-\installmodulecommandluasingle \showfontproperties {moduledata.fonts.tables.showproperties}
-\installmodulecommandluasingle \showfontparameters {moduledata.fonts.tables.showparameters}
-\installmodulecommandluasingle \showfontpositionings {moduledata.fonts.tables.showpositionings}
-\installmodulecommandluasingle \showfontsubstitutions {moduledata.fonts.tables.showsubstitutions}
+\installmodulecommandluasingle \showfonttables {moduledata.fonts.tables.showall}
+\installmodulecommandluasingle \showfontproperties {moduledata.fonts.tables.showproperties}
+\installmodulecommandluasingle \showfontparameters {moduledata.fonts.tables.showparameters}
+\installmodulecommandluasingle \showfontpositionings {moduledata.fonts.tables.showpositionings}
+\installmodulecommandluasingle \showfontsubstitutions {moduledata.fonts.tables.showsubstitutions}
+\installmodulecommandluasingle \showfontunicodevariants{moduledata.fonts.tables.showunicodevariants}
\stopmodule
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-vectors.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.lua
index af8042f8458..af8042f8458 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-vectors.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.lua
diff --git a/Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.mkiv
index 2605fe96403..2605fe96403 100644
--- a/Master/texmf-dist/tex/context/base/s-fonts-vectors.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-fonts-vectors.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-inf-01.mkvi b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi
index 2c0c1681e12..2c0c1681e12 100644
--- a/Master/texmf-dist/tex/context/base/s-inf-01.mkvi
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-01.mkvi
diff --git a/Master/texmf-dist/tex/context/base/s-inf-02.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-02.mkiv
index cf8d572bca2..cf8d572bca2 100644
--- a/Master/texmf-dist/tex/context/base/s-inf-02.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-02.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-inf-03.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-03.mkiv
index a253bed773c..a253bed773c 100644
--- a/Master/texmf-dist/tex/context/base/s-inf-03.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-03.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-inf-04.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-04.mkiv
index 862bed72f29..862bed72f29 100644
--- a/Master/texmf-dist/tex/context/base/s-inf-04.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-inf-04.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-counters.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.lua
index 436e64a6405..45d68be8dfd 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-counters.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.lua
@@ -14,7 +14,7 @@ local data = converters.verbose.data
function moduledata.languages.counters.showverbose(specification)
specification = interfaces.checkedspecification(specification)
local list = utilities.parsers.settings_to_array(specification.language or "")
- if #list == 0then
+ if #list == 0 then
return
end
local used = { }
diff --git a/Master/texmf-dist/tex/context/base/s-languages-counters.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.mkiv
index fa938d65a87..fa938d65a87 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-counters.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-counters.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-frequencies.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.lua
index 16213a41271..16213a41271 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-frequencies.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.lua
diff --git a/Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.mkiv
index 01a1f5682e2..01a1f5682e2 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-frequencies.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-frequencies.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua
index c5a4f91f1e9..c5a4f91f1e9 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.lua
diff --git a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.mkiv
index 6662dbf2f32..6662dbf2f32 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-hyphenation.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-hyphenation.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-sorting.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.lua
index 82a0827bbd2..82a0827bbd2 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-sorting.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.lua
diff --git a/Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.mkiv
index 67acda6f972..67acda6f972 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-sorting.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-sorting.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-system.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.lua
index 3b422db9f2e..3b422db9f2e 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-system.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.lua
diff --git a/Master/texmf-dist/tex/context/base/s-languages-system.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.mkiv
index 22991f264f8..22991f264f8 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-system.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-system.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-languages-words.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.lua
index ea7aee87bcd..ea7aee87bcd 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-words.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.lua
diff --git a/Master/texmf-dist/tex/context/base/s-languages-words.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.mkiv
index 4e350bf34d2..4e350bf34d2 100644
--- a/Master/texmf-dist/tex/context/base/s-languages-words.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-languages-words.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-lingual-de.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-lingual-de.mkiv
new file mode 100644
index 00000000000..d5436e1e2f0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-lingual-de.mkiv
@@ -0,0 +1,49 @@
+%D \module
+%D [ file=s-lingual-de,
+%D version=2016.04.17,
+%D title=\CONTEXT\ Linguistic File,
+%D subtitle=German TWeaks,
+%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.
+
+\startluacode
+ fonts.handlers.otf.addfeature {
+ name = "sz",
+ type = "multiple",
+ data = {
+ ["ẞ"] = { "S", "S" }
+ }
+ }
+\stopluacode
+
+\definefontfeature[sz][sz=yes]
+
+\unexpanded\def\enableuppercasesharps {\overloaduppercase{0xDF}{0x1E9E}}
+\unexpanded\def\disableuppercasesharps{\overloaduppercase{0xDF}{0x53,0x53}}
+
+\installtexdirective
+ {fonts.uppercasesharps}
+ \enableuppercasesharps
+ \disableuppercasesharps
+
+\continueifinputfile{s-lingual-de.mkiv}
+
+\setupbodyfont[libertine]
+
+\starttext
+ \def\TestString{Buße Busse BUẞE BUSSE \WORD{Buße Busse}}
+ %\definefontfeature[default][default][sz=yes]
+ \dorecurse{5} {
+ \disableuppercasesharps
+ \TestString\par
+ \enableuppercasesharps
+ \TestString\par
+ {\addfeature{sz}\TestString}\par
+ }
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/s-map-10.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-map-10.mkiv
index c7541babc81..c7541babc81 100644
--- a/Master/texmf-dist/tex/context/base/s-map-10.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-map-10.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-math-characters.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.lua
index 8ff3a8660df..8ff3a8660df 100644
--- a/Master/texmf-dist/tex/context/base/s-math-characters.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.lua
diff --git a/Master/texmf-dist/tex/context/base/s-math-characters.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.mkiv
index 3b273cb6c21..3b273cb6c21 100644
--- a/Master/texmf-dist/tex/context/base/s-math-characters.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-characters.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-math-coverage.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.lua
index 3c6080dc36e..3c6080dc36e 100644
--- a/Master/texmf-dist/tex/context/base/s-math-coverage.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.lua
diff --git a/Master/texmf-dist/tex/context/base/s-math-coverage.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.mkiv
index e318c9effdd..e318c9effdd 100644
--- a/Master/texmf-dist/tex/context/base/s-math-coverage.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-coverage.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-math-extensibles.mkiv
index f9ff8547ae1..f9ff8547ae1 100644
--- a/Master/texmf-dist/tex/context/base/s-math-extensibles.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-extensibles.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-math-parameters.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.lua
index 8e8c15a2d37..8e8c15a2d37 100644
--- a/Master/texmf-dist/tex/context/base/s-math-parameters.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.lua
diff --git a/Master/texmf-dist/tex/context/base/s-math-parameters.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.mkiv
index f2fde5d8384..f2fde5d8384 100644
--- a/Master/texmf-dist/tex/context/base/s-math-parameters.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-parameters.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-math-repertoire.mkiv
index 230eb513ebe..230eb513ebe 100644
--- a/Master/texmf-dist/tex/context/base/s-math-repertoire.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-math-repertoire.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-mod-00.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-00.mkiv
index 7af56dc2de9..7af56dc2de9 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-00.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-00.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-mod-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-01.mkiv
index 6946bef691c..6946bef691c 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-mod-02.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-02.mkiv
index 37e3d2f143e..37e3d2f143e 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-02.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-mod-02.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pages-statistics.mkiv
index 375dd9949f2..375dd9949f2 100644
--- a/Master/texmf-dist/tex/context/base/s-pages-statistics.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pages-statistics.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-physics-units.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-physics-units.mkiv
index 50adc801431..50adc801431 100644
--- a/Master/texmf-dist/tex/context/base/s-physics-units.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-physics-units.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-17.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-17.mkiv
index 9c46b4ed7a4..9c46b4ed7a4 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-17.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-17.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-30.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-30.mkiv
index 1be85d02b1c..1be85d02b1c 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-30.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-30.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-60.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-60.mkiv
index 70f8978b02c..70f8978b02c 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-60.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-60.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-69.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-69.mkiv
index cc6af9ad38f..cc6af9ad38f 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-69.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-69.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-70.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-70.mkiv
index 2c8bb2d2648..2c8bb2d2648 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-70.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-70.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-pre-71.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.lua
index bfa45a70578..bfa45a70578 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-71.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.lua
diff --git a/Master/texmf-dist/tex/context/base/s-pre-71.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.mkiv
index 38dae61dfa5..38dae61dfa5 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-71.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-pre-71.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-present-tiles.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv
index b68a34ef42b..b68a34ef42b 100644
--- a/Master/texmf-dist/tex/context/base/s-present-tiles.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-present-tiles.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-references-show.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv
index 72cccce54f1..72cccce54f1 100644
--- a/Master/texmf-dist/tex/context/base/s-references-show.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-references-show.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-reg-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-reg-01.mkiv
index 36434c30c19..36434c30c19 100644
--- a/Master/texmf-dist/tex/context/base/s-reg-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-reg-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-set-31.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-setups-missing.mkiv
index 53037a78db4..53037a78db4 100644
--- a/Master/texmf-dist/tex/context/base/s-set-31.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-setups-missing.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-sql-tables.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.lua
index 43410354134..43410354134 100644
--- a/Master/texmf-dist/tex/context/base/s-sql-tables.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.lua
diff --git a/Master/texmf-dist/tex/context/base/s-sql-tables.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.mkiv
index 12257087492..4c8bcddac50 100644
--- a/Master/texmf-dist/tex/context/base/s-sql-tables.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-sql-tables.mkiv
@@ -11,12 +11,18 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% for the moment no helpers
-
\startmodule[sql-tables]
\registerctxluafile{s-sql-tables}{}
+\doifsomething {\currentmoduleparameter{method}}{
+ \ctxlua{utilities.sql.setmethod("\currentmoduleparameter{method}")}
+}
+
+\doifsomething {\currentmoduleparameter{server}} {
+ \ctxlua{utilities.sql.setserver("\currentmoduleparameter{server}")}
+}
+
\installmodulecommandluasingle \showdefinedsqltables {moduledata.sql.tables.showdefined}
\stopmodule
diff --git a/Master/texmf-dist/tex/context/base/s-structure-sections.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-structure-sections.mkiv
index daaab5abcd0..daaab5abcd0 100644
--- a/Master/texmf-dist/tex/context/base/s-structure-sections.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-structure-sections.mkiv
diff --git a/Master/texmf-dist/tex/context/base/s-syntax.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv
index 96312f77179..96312f77179 100644
--- a/Master/texmf-dist/tex/context/base/s-syntax.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-syntax.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv
new file mode 100644
index 00000000000..f8cace1e98e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-tugboat-columns.mkiv
@@ -0,0 +1,556 @@
+%D \module
+%D [ file=t-tugboat
+%D version=$Id: t-tugboat.tex 91 2011-08-14 16:48:04Z karl $
+%D title=\CONTEXT\ Style File,
+%D subtitle=\TUGBOAT\ base style,
+%D author={Hans Hagen, Aditya Mahajan, \unknown},
+%D date=\currentdate,
+%D copyright=Public Domain]
+
+%D This file is derived t-tugboat by Aditya Mahajan which in turn is derived
+%D from older files. Here we use columnsets.
+
+\usemodule[newcolumnsets]
+
+%D We store the information about the article in variables.
+
+
+\setvariables
+ [tugboat]
+ [type=article,
+ %
+ year=1900,
+ volume=0,
+ number=0,
+ page=1001,
+ %
+ title=ConTeXt style for TUGboat,
+ subtitle=,
+ keywords=,
+ author=T. Boat,
+ address={Harbour Master KB \\ Harbour St. 1 \\ 8061GH Hasselt NL},
+ email={tugboat@tug.org}]
+
+%D \TUGBOAT\ uses slightly different interline space than the default. So we change
+%D the interline space.
+
+\definebodyfontenvironment [8pt] [interlinespace=9.5pt, big=9pt, small=7pt]
+\definebodyfontenvironment [9pt] [interlinespace=11pt, big=10pt, small=8pt]
+\definebodyfontenvironment [10pt] [interlinespace=12pt, big=12pt, small=9pt]
+\definebodyfontenvironment [12pt] [interlinespace=14pt, big=14.4pt,small=10pt]
+\definebodyfontenvironment [14.4pt] [interlinespace=18pt, big=14.4pt,small=12pt]
+
+%D We us e italic rather than slanted for emphasis.
+
+\setupbodyfontenvironment
+ [default]
+ [em=italic]
+
+%D \TUGBOAT\ uses Computer Modern fonts, and \CONTEXT\ uses Latin Modern by default.
+%D So, we just specify the font size.
+
+\setupbodyfont
+ [10pt]
+
+%D We break after these chars in urls, not before.
+
+\sethyphenatedurlafter /
+\sethyphenatedurlafter .
+\sethyphenatedurlafter _
+
+%D The original layout used in the \LATEX\ style for \TUGBOAT\ is a bit ambiguous.
+%D It uses low|-|level \TEX\ syntax, rather than changing the layout in a human
+%D understandable way (for example, by using the \mono{geometry} package. I have
+%D tried to translate it to \CONTEXT\ as far as I understand.
+
+\setuppapersize
+ [letter]
+ [letter]
+
+\setuplayout
+ [topspace=3.8pc,% was 3.5pc
+ header=1pc,
+ headerdistance=1.5pc,
+ height=middle,
+ footerdistance=2pc,
+ footer=1pc,
+ bottomspace=3pc,
+ %
+ backspace=6pc,
+ width=middle,
+ cutspace=6pc,
+ %
+ margin=4pc,
+ margindistance=1pc]
+
+\setupcolumnset
+ [distance=1.5pc]
+
+\setuppagenumbering
+ [location=,
+ alternative=doublesided]
+
+%D In \TUGBOAT\ different articles are glued together to form the final journal, so
+%D we do not want each article to occupy even number of pages.
+
+\installpagebreakhandler {last} {}
+
+%D We use automatic indentation control, that is: no indentation after titles and
+%D skips.
+
+\setupindenting
+ [20pt,yes]
+
+%D We do not want indentation after lists.
+
+\setupenumerations [indentnext=no]
+\setupdescriptions [indentnext=no]
+
+%D And these. We typeset itemizations ragged right.
+
+\setupitemgroup
+ [itemize]
+ [indentnext=no,
+ align=right]
+
+%D We align them at the paragraph indentation and pack them by default.
+
+\setupitemgroup
+ [itemize]
+ [each]
+ [margin=1pc,
+ width=1em,
+ distance=0pt]
+
+\setupitemgroup
+ [itemize]
+ [1]
+ [packed]
+
+%D We follow the \TUGBOAT\ style for sections. I do not know if \type {align=right}
+%D also disables hyphenation. Lets wait and see on this. Rest all is straight
+%D forward. It took me a while to realize that in \LATEX\ \type {\@startsection} the
+%D absolute value of before skip (fourth argument) is important and not the sign.
+
+\setuphead
+ [section,subsection,subsubsection,
+ subject,subsubject,subsubsubject]
+ [style=bold,
+ align=right,
+ before={\blank[8pt]},
+ after={\blank[4pt]}]
+
+%D We define a logical skip. This is equal to the \tex{topsep} in the normal style,
+%D and most environments should have this skip.
+
+\definevspacingamount[tugsmallamount] [3pt plus 1pt minus 1pt][.5\lineheight]
+\definevspacingamount[tugmediumamount][9pt plus 3pt minus 3pt][.5\lineheight]
+\definevspacingamount[tuglargeamount] [10pt plus 4pt minus 4pt][\lineheight]
+
+\defineblank[tugblank] [tugsmallamount]
+\defineblank[tugsmall] [tugsmallamount]
+\defineblank[tugmedium][tugmediumamount]
+\defineblank[tuglarge] [tuglargeamount]
+\defineblank[tughalf] [halfline]
+
+\setupblank
+ [tugblank]
+
+\setupitemize
+ [1]
+ [before={\blank[tugblank]},
+ after={\blank[tugblank]},
+ inbetween={\blank[tugblank]}]
+
+\setuplines
+ [before={\blank[tugblank]},
+ after={\blank[tugblank]},
+ inbetween={\blank[tugblank]}]
+
+%D \TUGBOAT\ uses a smaller font size for verbatim typesetting.
+
+\setuptyping
+ [option=none,
+ before={\blank[tugblank]\switchtobodyfont[small]},
+ after={\blank[tugblank]}]
+
+%D Not entirely a la \TUGBOAT:
+
+\unexpanded\def\MyFootNoteRule
+ {\hrule width 5pc height .4pt depth 0pt\relax \kern \strutdepth}
+
+\setupfootnotes
+ [bodyfont=8pt,
+ location=columns,
+ rule=on,
+ rulecommand=\MyFootNoteRule]
+
+\setupnotations
+ [location=joinedup,
+ width=fit,
+ headstyle=normal,
+ distance=.5em]
+
+%D We define a standard description and enumeration environment.
+
+\definedescription
+ [description]
+ [location=hanging,
+ width=broad,
+ before={\blank[tugblank]},
+ after={\blank[tugblank]}]
+
+\defineenumeration
+ [enumeration]
+ [location=hanging,
+ width=broad,
+ before={\blank[tugblank]},
+ after={\blank[tugblank]}]
+
+%D The bib does not handle urls nicely. So we provide a stop gap solution.
+
+\definereferenceformat
+ [cite]
+ [left={[},
+ right={]}]
+
+\defineitemgroup
+ [bibliography]
+ [levels=1]
+
+\setupitemgroup
+ [bibliography]
+ [symbol=n,
+ left={[},
+ right={]},
+ width=1.5em,
+ stopper=,
+ itemalign=flushright,
+ inbetween={\blank[small]}]
+
+%D Instead of color, we use weighted gray scales:
+
+\setupcolors
+ [conversion=always]
+
+%D English it is.
+
+\mainlanguage
+ [en]
+
+%D We define some logical skips
+
+\defineblank [tugbefore] [big]
+\defineblank [tuginbetween][big]
+\defineblank [tugafter] [tugbefore]
+
+%D Some real macros:
+
+\unexpanded\def\StartAbstract
+ {\dostartbuffer[abstract][StartAbstract][StopAbstract]}
+
+\startsetups tugboat:abstract:setup
+
+ \setuptolerance
+ [horizontal, tolerant]
+
+ \setupnarrower
+ [before={\blank[tughalf]},
+ after={\blank[tuglarge]},
+ middle=4.875pc]
+
+\stopsetups
+
+%D Headers and footers are different for normal issues and proceedings.
+
+\startsetups tugboat:banner:text:article
+
+% {\sl TUGboat},\space
+% Volume \getvariable{tugboat}{volume}\space
+% (\getvariable{tugboat}{year}),\space
+% No.\space\getvariable{tugboat}{number}
+
+\stopsetups
+
+\def\postissno{Proceedings of the \tubyear\ Annual Meeting}
+
+\startsetups tugboat:banner:text:proceedings
+
+ \setups[tugboat:banner:text:article]
+ \thinspace\emdash\thinspace
+ \postissno
+
+\stopsetups
+
+\startsetups tugboat:banner:setup:article
+
+ \setupheadertexts
+ [\setups{tugboat:banner:text:article}]
+ [pagenumber]
+
+% There are no footers in regular articles
+%
+% \setupfootertexts
+% [][\getvariable{tugboat}{author}]
+% [\getvariable{tugboat}{title}][]
+
+\stopsetups
+
+\startsetups tugboat:banner:setup:proceedings
+
+ \setupheadertexts
+ [][\getvariable{tugboat}{title}]
+ [\getvariable{tugboat}{author}][]
+
+ \setupfootertexts
+ [\setups{tugboat:banner:text:proceedings}]
+ [pagenumber]
+
+\stopsetups
+
+%D Article is default so,
+
+\setups[tugboat:banner:setup:article]
+
+%D It all starts here:
+
+\unexpanded\def\StartArticle{\directsetup{tugboat:\getvariable{tugboat}{type}:start}}
+\unexpanded\def\StopArticle {\directsetup{tugboat:article:stop}}
+
+\startsetups tugboat:introduction:article
+
+ \start
+ \unexpanded\def\\{\unskip\space\&\space\ignorespaces}
+ \hbox{\indent\getvariable{tugboat}{author}}
+ \par
+ \stop
+
+\stopsetups
+
+\startsetups tugboat:introduction:proceedings
+
+ \blank[20pt]
+
+ \start
+ \switchtobodyfont[12pt]
+ \def\\{\unskip\space\&\space\ignorespaces}
+ \getvariable{tugboat}{author}
+ \par
+ \stop
+
+ \start
+ \switchtobodyfont[9pt]
+ \unexpanded\def\\{\unskip,\space\ignorespaces}
+ \getvariable{tugboat}{address}
+ \par
+ \start
+ \tt
+ \getvariable{tugboat}{email}
+ \stop
+ \par
+ \stop
+
+\stopsetups
+
+\startsetups tugboat:columns:presets
+
+ % balancing data (heights)
+
+\stopsetups
+
+\startsetups tugboat:article:start
+
+ \starttext
+
+ \setups{tugboat:columns:presets}
+
+ \setups{tugboat:banner:setup:\getvariable{tugboat}{type}}
+
+ \startcolumnset
+
+ \setupheadertexts
+ [\setups{tugboat:banner:text:article}]
+ [pagenumber]
+
+ \setuppagenumber
+ [number=\getvariable{tugboat}{page}]
+
+ \snaptogrid \vbox \bgroup
+ \forgetall
+ \hrule height .6pt
+ \blank[halfline]
+ \start
+ \let\\=\par
+ \start
+ \bf
+ \getvariable{tugboat}{title}
+ \stop
+ \par
+ \blank[halfline]
+ \hskip20pt\getvariable{tugboat}{author}
+ \stop
+
+ \blank[line]
+
+ \doiftext {\getbuffer[abstract]} {
+ \let\\=\endgraf
+ \setups[tugboat:abstract:setup]
+ \startsubject[title={Abstract}]
+ \getbuffer[abstract]
+ \stopsubject
+ }
+ \egroup
+
+\stopsetups
+
+\startsetups tugboat:proceedings:start
+
+ \starttext
+
+ \setups{tugboat:banner:setup:\getvariable{tugboat}{type}}
+
+ \setupheader
+ [state=empty]
+
+ \setuppagenumber
+ [number=\getvariable{tugboat}{page}]
+
+ \snaptogrid \vbox \bgroup
+
+ \forgetall
+
+ \start
+ \switchtobodyfont[14.4pt]
+ \let\\=\par
+ \getvariable{tugboat}{title}
+ \par
+ \stop
+
+ \setups{tugboat:introduction:\getvariable{tugboat}{type}}
+
+ \blank[tugmedium]
+
+ \let\\=\par
+
+ \setups[tugboat:abstract:setup]
+
+ \midaligned{\bf Abstract}
+
+ \startnarrower[middle]
+ \getbuffer[abstract]
+ \stopnarrower
+
+ \egroup
+
+ \startcolumnset
+
+\stopsetups
+
+\def\signaturewidth{13pc}
+
+\startsetups tugboat:affiliation:article
+
+ \blank[line]
+
+ \snaptogrid \vbox \bgroup
+
+ \forgetall
+
+ \leftskip=\dimexpr\textwidth-\signaturewidth\relax
+
+ \let\\=\par
+
+ \dontleavehmode\llap {
+ $\diamond$\enspace
+ }
+ \getvariable{tugboat}{author}
+ \par
+
+ \getvariable{tugboat}{address}
+ \par
+
+ {\tt\getvariable{tugboat}{email}}
+
+ \egroup
+
+\stopsetups
+
+\startsetups tugboat:affiliation:proceedings
+
+ % nothing fancy at the end
+
+\stopsetups
+
+\startsetups tugboat:article:stop
+
+ \setups{tugboat:affiliation:\getvariable{tugboat}{type}}
+
+ \blank[line]
+
+ \startpacked
+ \placenote[endnotes]
+ \stoppacked
+
+ \stopcolumnset
+
+ \page
+
+ \stoptext
+
+\stopsetups
+
+%D Normal word spacing, really?
+
+\setuptolerance
+ [strict]
+
+%D Use this in documents:
+
+% \setuptolerance
+% [verytolerant,stretch]
+
+%D Logos, abbreviations (load a local file if needed).
+
+\usemodule[abr-03]
+
+% \unexpanded\def\Dash {\unskip\thinspace\emdash\thinspace\ignorespaces}
+% \unexpanded\def\slash{/\penalty\zerocount\hskip\zeropoint\relax} % |/|
+
+%D Language stuff.
+
+\hyphenation{Post-Script data-base data-bases}
+
+\setuplanguage
+ [lefthyphenmin=2,
+ rightthyphenmin=3]
+
+%D A hack to read tugboat.dates settings.
+
+\newcount\issueseqno
+
+\def\tubyear{1234}
+\def\tubvol {5}
+\def\tubnum {6}
+
+\def\issyear #1.{\def\tubyear{#1}}
+\def\vol #1, #2.{\def\tubvol {#1}%
+ \def\tubnum {#2}}
+
+%D Good bye.
+
+\continueifinputfile{s-tugboat-columns.mkiv}
+
+\StartArticle
+
+ \StartAbstract
+ \input bryson
+ \StopAbstract
+
+ \dorecurse{30}{\input ward \par} \page
+
+ \startitemize
+ \startitem \input ward \stopitem
+ \startitem \input ward \stopitem
+ \stopitemize
+
+\StopArticle
diff --git a/Master/texmf-dist/tex/context/base/s-typesetting-kerning.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-typesetting-kerning.mkiv
index 48d81ce3602..48d81ce3602 100644
--- a/Master/texmf-dist/tex/context/base/s-typesetting-kerning.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-typesetting-kerning.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.lua b/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.lua
new file mode 100644
index 00000000000..9de6471d148
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.lua
@@ -0,0 +1,172 @@
+if not modules then modules = { } end modules ['s-xml-analyzers'] = {
+ version = 1.001,
+ comment = "companion to s-xml-analyzers.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+moduledata.xml = moduledata.xml or { }
+moduledata.xml.analyzers = moduledata.xml.analyzers or { }
+
+local next, type = next, type
+local utfvalues = string.utfvalues
+local context = context
+local NC, NR, HL, FL, LL, SL, TB = context.NC, context.NR, context.HL, context.TB, context.FL, context.LL, context.SL
+local sortedhash, sortedkeys, concat, sequenced = table.sortedhash, table.sortedkeys, table.concat, table.sequenced
+
+local chardata = characters.data
+
+local tags = { }
+local char = { }
+local attr = { }
+local name = nil
+
+local function analyze(filename)
+
+ if type(filename) == "string" then
+ filename = { filename }
+ end
+
+ table.sort(filename)
+
+ local hash = concat(filename,"|")
+
+ if hash == name then
+ return
+ end
+
+ name = hash
+ tags = { }
+ char = { }
+ attr = { }
+
+ table.setmetatableindex(tags,function(t,k)
+ local v = {
+ n = 0,
+ attributes = { },
+ children = { },
+ }
+ t[k] = v
+ return v
+ end)
+
+ table.setmetatableindex(char,function(t,k)
+ t[k] = 0
+ return 0
+ end)
+
+ table.setmetatableindex(attr,function(t,k)
+ char[k] = char[k] or 0
+ t[k] = 0
+ return 0
+ end)
+
+ local function collect(e,parent)
+ local dt = e.dt
+ if e.special then
+ if dt then
+ for i=1,#dt do
+ local d = dt[i]
+ if type(d) == "table" then
+ collect(d,tg)
+ end
+ end
+ end
+ else
+ local at = e.at
+ local tg = e.tg
+ local tag = tags[tg]
+ tag.n = tag.n + 1
+ if at then
+ local attributes = tag.attributes
+ for k, v in next, at do
+ local a = attributes[k]
+ if a then
+ a[v] = (a[v] or 0) + 1
+ else
+ attributes[k] = { [v] = 1 }
+ end
+ for s in utfvalues(v) do
+ attr[s] = attr[s] + 1
+ end
+ end
+ end
+ if parent then
+ local children = tags[parent].children
+ children[tg] = (children[tg] or 0) + 1
+ end
+ if dt then
+ for i=1,#dt do
+ local d = dt[i]
+ if type(d) == "table" then
+ collect(d,tg)
+ else
+ for s in utfvalues(d) do
+ char[s] = char[s] + 1
+ end
+ end
+ end
+ end
+ end
+ end
+
+ for i=1,#filename do
+ collect(xml.load(filename[i]))
+ end
+
+ table.setmetatableindex(tags,nil)
+ table.setmetatableindex(char,nil)
+ table.setmetatableindex(attr,nil)
+
+end
+
+moduledata.xml.analyzers.maxnofattributes = 100
+
+function moduledata.xml.analyzers.structure(filename)
+ analyze(filename)
+ local done = false
+ local maxnofattributes = tonumber(moduledata.xml.analyzers.maxnofattributes) or 100
+ context.starttabulate { "|l|pA{nothyphenated,flushleft,verytolerant,stretch,broad}|" }
+ for name, data in table.sortedhash(tags) do
+ if done then
+ context.TB()
+ else
+ done = true
+ end
+ local children = data.children
+ local attributes = data.attributes
+ NC() context.bold("element") NC() context.darkred(name) NC() NR()
+ NC() context.bold("frequency") NC() context(data.n) NC() NR()
+ if next(children) then
+ NC() context.bold("children") NC() context.puretext(sequenced(children)) NC() NR()
+ end
+ if next(attributes) then
+ NC() context.bold("attributes") NC() context.puretext.darkgreen(concat(sortedkeys(attributes)," ")) NC() NR()
+ for attribute, values in sortedhash(attributes) do
+ local n = table.count(values)
+ if attribute == "id" or attribute == "xml:id" or n > maxnofattributes then
+ NC() context(attribute) NC() context("%s different values",n) NC() NR()
+ else
+ NC() context(attribute) NC() context.puretext(sequenced(values)) NC() NR()
+ end
+ end
+ end
+ end
+ context.stoptabulate()
+end
+
+function moduledata.xml.analyzers.characters(filename)
+ analyze(filename)
+ context.starttabulate { "|r|r|l|c|l|" }
+ for c, n in table.sortedhash(char) do
+ NC() context.darkred("%s",n)
+ NC() context.darkgreen("%s",attr[c])
+ NC() context("%U",c)
+ NC() context.char(c)
+ NC() context("%s",chardata[c].description)
+ NC() NR()
+ end
+ context.stoptabulate()
+end
+
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.mkiv
new file mode 100644
index 00000000000..ed033bcfadf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-xml-analyzers.mkiv
@@ -0,0 +1,37 @@
+%D \module
+%D [ file=s-xml-analyzers,
+%D version=2013.05.28,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Analyze XML Content,
+%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.
+
+\startmodule[xml-analyzers]
+
+\registerctxluafile{s-xml-analyzers}{}
+
+\installmodulecommandluasingle \showxmlstructure {moduledata.xml.analyzers.structure}
+\installmodulecommandluasingle \showxmlcharacters {moduledata.xml.analyzers.characters}
+
+\stopmodule
+
+\continueifinputfile{s-xml-analyzers.mkiv}
+
+\usemodule[art-01]
+
+\setupbodyfont[tt,10pt]
+
+\edef\FileName{\cldcontext{resolvers.findfile("music-collection.xml")}}
+
+\setupheadertexts[\FileName\space\emdash\space\pagenumber]
+
+\starttext
+
+ \showxmlcharacters[\FileName]
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-youless.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/s-youless.mkiv
index e15973b9c63..e15973b9c63 100644
--- a/Master/texmf-dist/tex/context/base/s-youless.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/s-youless.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-asciimath.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.lua
index 51f401e6640..e0a4a714b03 100644
--- a/Master/texmf-dist/tex/context/base/x-asciimath.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.lua
@@ -103,13 +103,13 @@ local reserved = {
["max"] = { false, "\\max" },
["ln"] = { false, "\\ln" },
- ["atan"] = { false, "\\atan" }, -- extra
- ["acos"] = { false, "\\acos" }, -- extra
- ["asin"] = { false, "\\asin" }, -- extra
- -- extra
- ["arctan"] = { false, "\\arctan" }, -- extra
- ["arccos"] = { false, "\\arccos" }, -- extra
- ["arcsin"] = { false, "\\arcsin" }, -- extra
+ ["atan"] = { false, "\\atan" }, -- extra
+ ["acos"] = { false, "\\acos" }, -- extra
+ ["asin"] = { false, "\\asin" }, -- extra
+
+ ["arctan"] = { false, "\\arctan" }, -- extra
+ ["arccos"] = { false, "\\arccos" }, -- extra
+ ["arcsin"] = { false, "\\arcsin" }, -- extra
["and"] = { false, "\\text{and}" },
["or"] = { false, "\\text{or}" },
@@ -117,6 +117,7 @@ local reserved = {
["sqrt"] = { false, "\\asciimathsqrt", "unary" },
["root"] = { false, "\\asciimathroot", "binary" },
+ -- ["\\frac"] = { false, "\\frac", "binary" },
["frac"] = { false, "\\frac", "binary" },
["stackrel"] = { false, "\\asciimathstackrel", "binary" },
["hat"] = { false, "\\widehat", "unary" },
@@ -699,21 +700,34 @@ local reserved = {
-- a bit special:
- ["\\frac"] = { true, "frac" },
+-- ["\\frac"] = { true, "frac" },
-- now it gets real crazy, only these two:
["&gt;"] = { true, ">" },
["&lt;"] = { true, "<" },
+ -- extra:
+
+ -- also, invisible times
+
+ ["dd"] = { false, "{\\tf d}" },
+ ["ee"] = { false, "{\\tf e}" },
+ ["xxx"] = { true, utfchar(0x2063) }, -- invisible times
+
}
+-- a..z A..Z : allemaal op italic alphabet
+-- en dan default naar upright "upr a"
+
for k, v in next, characters.data do
local name = v.mathname
if name and not reserved[name] then
- reserved[name] = { true, utfchar(k) }
+ local char = { true, utfchar(k) }
+ reserved[ name] = char
+ -- reserved["\\" .. name] = char
end
- local spec = v.mathspec
+ -- local spec = v.mathspec
-- if spec then
-- for i=1,#spec do
-- local name = spec[i].name
@@ -734,7 +748,7 @@ local isbinary = {
["\\asciimathstackrel"] = true,
}
-local isunary = {
+local isunary = { -- can be taken from reserved
["\\sqrt"] = true,
["\\asciimathsqrt"] = true,
["\\text"] = true, -- mathoptext
@@ -761,6 +775,40 @@ local isinfix = {
["_"] = true,
}
+local isstupid = {
+ ["\\prod"] = true,
+ ["\\sinh"] = true,
+ ["\\cosh"] = true,
+ ["\\tanh"] = true,
+ ["\\sum"] = true,
+ ["\\int"] = true,
+ ["\\sin"] = true,
+ ["\\cos"] = true,
+ ["\\tan"] = true,
+ ["\\csc"] = true,
+ ["\\sec"] = true,
+ ["\\cot"] = true,
+ ["\\log"] = true,
+ ["\\det"] = true,
+ ["\\lim"] = true,
+ ["\\mod"] = true,
+ ["\\gcd"] = true,
+ ["\\min"] = true,
+ ["\\max"] = true,
+ ["\\ln"] = true,
+
+ ["\\atan"] = true,
+ ["\\acos"] = true,
+ ["\\asin"] = true,
+ true,
+ ["\\arctan"] = true,
+ ["\\arccos"] = true,
+ ["\\arcsin"] = true,
+
+ ["f"] = true,
+ ["g"] = true,
+}
+
local isleft = {
[s_lparent] = true,
[s_lbrace] = true,
@@ -792,7 +840,7 @@ local d_one = R("09")
local d_two = d_one * d_one
local d_three = d_two * d_one
local d_four = d_three * d_one
-local d_split = P(-1) + P(",")
+local d_split = P(-1) + Carg(2) * (S(".") /"")
local d_spaced = (Carg(1) * d_three)^1
@@ -806,9 +854,9 @@ local digitized_1 = Cs ( (
local p_fourbefore = d_four * d_split
local p_fourafter = d_four * P(-1)
-local p_beforecomma = d_three * d_spaced * d_split
- + d_two * d_spaced * d_split
- + d_one * d_spaced * d_split
+local p_beforecomma = d_three * d_spaced^0 * d_split
+ + d_two * d_spaced^0 * d_split
+ + d_one * d_spaced^0 * d_split
+ d_one * d_split
local p_aftercomma = p_fourafter
@@ -841,11 +889,18 @@ local splitmethods = {
digitized_3,
}
-local splitmethod = nil
+local splitmethod = nil
+local symbolmethod = nil
+local digitseparator = utfchar(0x2008)
+local digitsymbol = "."
function asciimath.setup(settings)
splitmethod = splitmethods[tonumber(settings.splitmethod) or 0]
if splitmethod then
+ digitsymbol = settings.symbol
+ if not digitsymbol or digitsymbol == "" then
+ digitsymbol = "."
+ end
local separator = settings.separator
if separator == true or not interfaces or interfaces.variables.yes then
digitseparator = utfchar(0x2008)
@@ -854,6 +909,11 @@ function asciimath.setup(settings)
else
splitmethod = nil
end
+ if digitsymbol ~= "." then
+ symbolmethod = lpeg.replacer(".",digitsymbol)
+ else
+ symbolmethod = nil
+ end
end
end
@@ -862,7 +922,10 @@ local collected_filename = "asciimath-digits.lua"
function numbermess(s)
if splitmethod then
- local d = lpegmatch(splitmethod,s,1,digitseparator)
+ local d = lpegmatch(splitmethod,s,1,digitseparator,digitsymbol)
+ if not d and symbolmethod then
+ d = lpegmatch(symbolmethod,s)
+ end
if d then
if trace_digits and s ~= d then
collected_digits[s] = d
@@ -873,25 +936,32 @@ function numbermess(s)
return s
end
--- asciimath.setup { splitmethod = 3 }
+-- asciimath.setup { splitmethod = 3, symbol = "," }
-- local t = {
+-- "0.00002",
-- "1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789",
--- "1,1",
--- "12,12",
--- "123,123",
--- "1234,123",
--- "1234,1234",
--- "12345,1234",
--- "1234,12345",
--- "12345,12345",
--- "123456,123456",
--- "1234567,1234567",
--- "12345678,12345678",
--- "123456789,123456789",
--- "0,1234",
--- "1234,0",
--- "1234,00",
--- "0,123456789",
+-- "1.1",
+-- "12.12",
+-- "123.123",
+-- "1234.123",
+-- "1234.1234",
+-- "12345.1234",
+-- "1234.12345",
+-- "12345.12345",
+-- "123456.123456",
+-- "1234567.1234567",
+-- "12345678.12345678",
+-- "123456789.123456789",
+-- "0.1234",
+-- "1234.0",
+-- "1234.00",
+-- "0.123456789",
+-- "100.00005",
+-- "0.80018",
+-- "10.80018",
+-- "100.80018",
+-- "1000.80018",
+-- "10000.80018",
-- }
-- for i=1,#t do print(formatters["%-20s : [%s]"](t[i],numbermess(t[i]))) end
@@ -957,8 +1027,10 @@ for k, v in sortedhash(reserved) do
k_reserved_different[#k_reserved_different+1] = k
end
end
- if not find(k,"[^[a-zA-Z]+$]") then
- k_unicode["\\"..k] = k -- dirty trick, no real unicode
+ if find(k,"^[a-zA-Z]+$") then
+ k_unicode["\\"..k] = replacement
+ else
+ k_unicode["\\"..k] = k -- dirty trick, no real unicode (still needed ?)
end
if not find(k,"[^a-zA-Z]") then
k_reserved_words[#k_reserved_words+1] = k
@@ -970,14 +1042,13 @@ local p_reserved =
lpeg.utfchartabletopattern(k_reserved_different) / k_commands
local p_unicode =
- lpeg.utfchartabletopattern(table.keys(k_unicode)) / k_unicode
-
--- inspect(k_reserved_different)
+-- lpeg.utfchartabletopattern(table.keys(k_unicode)) / k_unicode
+ lpeg.utfchartabletopattern(k_unicode) / k_unicode
local p_texescape = patterns.texescape
local function texescaped(s)
- return lpegmatch(p_texescape,s)
+ return lpegmatch(p_texescape,s) or s
end
local p_text =
@@ -988,7 +1059,7 @@ local p_text =
Cs( P("{") * ((1-P("}"))^0/texescaped) * P("}") )
+ Cs((P("(")/"{") * ((1-P(")"))^0/texescaped) * (P(")")/"}"))
)
- + Cc("\\asciimathoptext") * Cs(Cc("{") * (patterns.undouble/texescaped) * Cc("}"))
+ + Cc("\\asciimathoptext") * Cs(Cc("{") * (C(patterns.undouble)/texescaped) * Cc("}"))
local m_left = {
["(:"] = s_langle,
@@ -1084,6 +1155,7 @@ local p_special =
local u_parser = Cs ( (
patterns.doublequoted +
P("text") * p_spaces^0 * P("(") * (1-P(")"))^0 * P(")") + -- -- todo: balanced
+ P("\\frac") / "frac" + -- bah
p_unicode +
p_utf_base
)^0 )
@@ -1279,6 +1351,38 @@ local function collapse_parentheses(t)
return t
end
+local function collapse_stupids(t)
+ local n, m, i = #t, 0, 1
+ while i <= n do
+ m = m + 1
+ local current = t[i]
+ if isstupid[current] then
+ local one = t[i+1]
+ if type(one) == "table" then
+ one = collapse(one,level)
+ t[m] = current .. "{" .. one .. "}"
+ i = i + 2
+ else
+ t[m] = current
+ i = i + 1
+ end
+ else
+ t[m] = current
+ i = i + 1
+ end
+ end
+ if i == n then -- yes?
+ m = m + 1
+ t[m] = t[n]
+ end
+ if m < n then
+ for i=n,m+1,-1 do
+ t[i] = nil
+ end
+ end
+ return t
+end
+
local function collapse_signs(t)
local n, m, i = #t, 0, 1
while i <= n do
@@ -1289,7 +1393,7 @@ local function collapse_signs(t)
if not one then
-- m = m + 1
t[m] = current .. "{}" -- error
-return t
+ return t
-- break
end
if type(one) == "table" then
@@ -1635,6 +1739,7 @@ collapse = function(t,level)
-- steps
t = collapse_matrices (t) if trace_detail then show_state(t,level,"matrices") end
t = collapse_bars (t) if trace_detail then show_state(t,level,"bars") end
+t = collapse_stupids (t) if trace_detail then show_state(t,level,"stupids") end
t = collapse_pairs (t) if trace_detail then show_state(t,level,"pairs") end
t = collapse_parentheses(t) if trace_detail then show_state(t,level,"parentheses") end
t = collapse_signs (t) if trace_detail then show_state(t,level,"signs") end
@@ -1844,7 +1949,6 @@ local function convert(str,nowrap)
end
end
-
local context = context
if not context then
@@ -1854,14 +1958,18 @@ if not context then
-- report_asciimath(cleanedup([[ac+sinx+xsqrtx+sinsqrtx+sinsqrt(x)]]))
-- report_asciimath(cleanedup([[a "αsinsqrtx" b]]))
+-- convert([[a "αsinsqrtx" b]])
-- report_asciimath(cleanedup([[a "α" b]]))
-- report_asciimath(cleanedup([[//4]]))
+-- convert("leq\\leq")
-- convert([[\^{1/5}log]])
-- convert("sqrt")
-- convert("^")
--- convert("\\frac{a}{b}")
+-- convert[[\frac{a}{b}]]
+-- convert[[frac{a}{b}]]
+
-- convert("frac{a}{b}")
-- convert("\\sin{a}{b}")
-- convert("sin{a}{b}")
diff --git a/Master/texmf-dist/tex/context/base/x-asciimath.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.mkiv
index 1d62fb93d32..d3a629c810e 100644
--- a/Master/texmf-dist/tex/context/base/x-asciimath.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-asciimath.mkiv
@@ -153,23 +153,33 @@
\ctxlua{moduledata.asciimath.setup {
splitmethod = "\asciimathparameter\c!splitmethod",
separator = "\asciimathparameter\c!separator",
+ symbol = "\asciimathparameter\c!symbol",
}}%
\to \everysetupasciimath
-\newtoks\everyascimath
+\newtoks\everyasciimath
% \appendtoks
% \ignorediscretionaries
% \to \everyasciimath
+\appendtoks
+ \enableautofences
+\to \everyasciimath
+
\unexpanded\def\asciimath
{\doifnextoptionalelse\asciimath_yes\asciimath_nop}
\def\asciimath_yes[#1]#2%
- {\mathematics[#1]{\clf_justasciimath{\detokenize\expandafter{\normalexpanded{#2}}}}}
+ {\mathematics
+ [#1]%
+ {\the\everyasciimath%
+ \clf_justasciimath{\detokenize\expandafter{\normalexpanded{#2}}}}}
\def\asciimath_nop#1%
- {\mathematics{\clf_justasciimath{\detokenize\expandafter{\normalexpanded{#1}}}}}
+ {\mathematics
+ {\the\everyasciimath
+ \clf_justasciimath{\detokenize\expandafter{\normalexpanded{#1}}}}}
\unexpanded\def\ctxmoduleasciimath#1%
{\ctxlua{moduledata.asciimath.#1}}
@@ -390,4 +400,37 @@
% \MyAsciiMath{x^2(10 -x)&gt;2 x^2}
% \MyAsciiMath{x^4&gt;x}
\stoplines
+
+\setupasciimath[splitmethod=3,symbol={{,}}]
+
+\startlines
+\asciimath{sqrt 1}
+\asciimath{sqrt 1.2}
+\asciimath{sqrt 1.2}
+\asciimath{1}
+\asciimath{12}
+\asciimath{123}
+\asciimath{1234}
+\asciimath{12345}
+\asciimath{123456}
+\asciimath{1234567}
+\asciimath{12345678}
+\asciimath{123456789}
+\asciimath{1.1}
+\asciimath{12.12}
+\asciimath{1234.123}
+\asciimath{1234.1234}
+\asciimath{12345.1234}
+\asciimath{1234.12345}
+\asciimath{12345.12345}
+\asciimath{123456.123456}
+\asciimath{1234567.1234567}
+\asciimath{12345678.12345678}
+\asciimath{123456789.123456789}
+\asciimath{0.1234}
+\asciimath{1234.0}
+\asciimath{1234.00}
+\asciimath{0.123456789}
+\stoplines
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/x-calcmath.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.lua
index c96d8d0ac51..c96d8d0ac51 100644
--- a/Master/texmf-dist/tex/context/base/x-calcmath.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.lua
diff --git a/Master/texmf-dist/tex/context/base/x-calcmath.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.mkiv
index dda88bb3ee5..dda88bb3ee5 100644
--- a/Master/texmf-dist/tex/context/base/x-calcmath.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-calcmath.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-cals.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-cals.lua
index 3af6106d803..3af6106d803 100644
--- a/Master/texmf-dist/tex/context/base/x-cals.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-cals.lua
diff --git a/Master/texmf-dist/tex/context/base/x-cals.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-cals.mkiv
index 31ba2d213a9..31ba2d213a9 100644
--- a/Master/texmf-dist/tex/context/base/x-cals.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-cals.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-chemml.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-chemml.lua
index 79c1d9525ce..79c1d9525ce 100644
--- a/Master/texmf-dist/tex/context/base/x-chemml.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-chemml.lua
diff --git a/Master/texmf-dist/tex/context/base/x-chemml.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-chemml.mkiv
index bb9065921c7..f0511206e8b 100644
--- a/Master/texmf-dist/tex/context/base/x-chemml.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-chemml.mkiv
@@ -24,14 +24,12 @@
\unprotect
\startxmlsetups xml:cml:process
- \xmlstrip {#1} {cml:chem|cml:ichem|cml:dchem|cml:reaction|cml:molecule|cml:ion|cml:structure}
-
- \xmlgrab {#1} {cml:*} {cml:*}
- \xmlgrab {#1} {cml:gives|cml:equilibrium|cml:mesomeric} {cml:arrow}
- \xmlgrab {#1} {cml:plus|cml:minus|cml:equal} {cml:operator}
- \xmlgrab {#1} {cml:bond|cml:singlebond|cml:doublebound|cml:triplebond} {cml:bond}
-
- \xmlgrab {#1} {pi::chemml} {cml:pi}
+ \xmlstrip {#1} {cml:chem|cml:ichem|cml:dchem|cml:reaction|cml:molecule|cml:ion|cml:structure}
+ \xmlsetsetup {#1} {cml:*} {cml:*}
+ \xmlsetsetup {#1} {cml:gives|cml:equilibrium|cml:mesomeric} {cml:arrow}
+ \xmlsetsetup {#1} {cml:plus|cml:minus|cml:equal} {cml:operator}
+ \xmlsetsetup {#1} {cml:bond|cml:singlebond|cml:doublebound|cml:triplebond} {cml:bond}
+ \xmlsetsetup {#1} {pi::chemml} {cml:pi}
\stopxmlsetups
\xmlregistersetup{xml:cml:process}
@@ -97,15 +95,23 @@
\startxmlsetups cml:atom
\doCMLtext {
\lohi {
- $\tfxx\xmlatt{#1}{protons}$
+ \normalstartimath
+ \tfxx\xmlatt{#1}{protons}%
+ \normalstopimath
} {
- $\tfxx\xmlatt{#1}{weight}$
+ \normalstartimath
+ \tfxx\xmlatt{#1}{weight}%
+ \normalstopimath
}
\xmlflush{#1}
\lohi {
- $\tfxx\xmlatt{#1}{n}$
+ \normalstartimath
+ \tfxx\xmlatt{#1}{n}%
+ \normalstopimath
} {
- $\tfxx\xmlatt{#1}{charge}$%
+ \normalstartimath
+ \tfxx\xmlatt{#1}{charge}%
+ \normalstopimath
}
}
{\xmlindex{#1}{cml:caption}{2}}
@@ -167,7 +173,7 @@
\def\dodoCMLbond#1#2#3%
{\begingroup
- \setbox\scratchbox\hbox{$M$}%
+ \setbox\scratchbox\hbox{\normalstartimath M\normalstopimath}%
\vbox to \ht\scratchbox
{\hsize\wd\scratchbox
\vskip.1\wd\scratchbox
diff --git a/Master/texmf-dist/tex/context/base/x-ct.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-ct.lua
index 9c647e8e790..9c647e8e790 100644
--- a/Master/texmf-dist/tex/context/base/x-ct.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-ct.lua
diff --git a/Master/texmf-dist/tex/context/base/x-ct.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-ct.mkiv
index 6a6352f0359..6a6352f0359 100644
--- a/Master/texmf-dist/tex/context/base/x-ct.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-ct.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-entities.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-entities.mkiv
index 3dd02118adf..3dd02118adf 100644
--- a/Master/texmf-dist/tex/context/base/x-entities.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-entities.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-foxet.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-foxet.mkiv
index 80fe7e500ca..80fe7e500ca 100644
--- a/Master/texmf-dist/tex/context/base/x-foxet.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-foxet.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-html.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-html.mkiv
index e1806eb9eb0..e1806eb9eb0 100644
--- a/Master/texmf-dist/tex/context/base/x-html.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-html.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.ctx b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.ctx
index edbffc2854c..edbffc2854c 100644
--- a/Master/texmf-dist/tex/context/base/x-ldx.ctx
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.ctx
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.lua
index 31cbebf1392..31cbebf1392 100644
--- a/Master/texmf-dist/tex/context/base/x-ldx.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.lua
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.mkiv
index 0156f2c5569..0156f2c5569 100644
--- a/Master/texmf-dist/tex/context/base/x-ldx.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-ldx.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-math-svg.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua
index 8a628816773..8a628816773 100644
--- a/Master/texmf-dist/tex/context/base/x-math-svg.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-math-svg.lua
diff --git a/Master/texmf-dist/tex/context/base/x-mathml-basics.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv
index e166995b0c8..e166995b0c8 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml-basics.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-basics.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-mathml-html.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-html.mkiv
index 2ac7d3cba87..2ac7d3cba87 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml-html.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml-html.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.lua b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.lua
index a0db339bc61..7d0b42d2108 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.lua
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.lua
@@ -62,7 +62,7 @@ local ctx_right = context.right
-- todo: handle opening/closing mo's here ... presentation mml is such a mess ...
-characters.registerentities()
+-- characters.registerentities()
local doublebar = utfchar(0x2016)
@@ -92,6 +92,8 @@ local r_replacements = { -- in main table
-- todo: play with asciimode and avoid mmlchar
+-- we can use the proper names now! todo
+
local o_replacements = { -- in main table
["@l"] = "\\mmlleftdelimiter.",
["@r"] = "\\mmlrightdelimiter.",
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv
index 65a7223ce59..a5be5ddb09e 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-mathml.mkiv
@@ -39,6 +39,8 @@
\registerctxluafile{x-mathml}{}
+\setupxml[\c!entities=\v!yes] % load big entities table
+
\def\ctxmodulemathml#1{\ctxlua{moduledata.mathml.#1}}
\startxmlsetups xml:mml:define
@@ -72,6 +74,7 @@
\startxmlsetups mml:math
\begingroup
+ \enableautofences
\xmlval {mml:math:dir} {\xmlatt{#1}{dir}} {}
\xmlval {mml:math:display} {\xmlatt{#1}{display}} {
\xmlval {mml:math:mode} {\xmlatt{#1}{mode}} {
@@ -79,29 +82,31 @@
}
}
{
- \math_fences_checked_start
+ %\math_fences_checked_start
%\MMLhack
\xmlflush{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
}
\endgroup
\stopxmlsetups
\startxmlsetups mml:imath
\inlinemathematics {
- \math_fences_checked_start
+ \enableautofences
+ %\math_fences_checked_start
%\MMLhack
\xmlflush{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
}
\stopxmlsetups
\startxmlsetups mml:dmath
\displaymathematics {
- \math_fences_checked_start
+ \enableautofences
+ %\math_fences_checked_start
%\MMLhack
\xmlflush{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
}
\stopxmlsetups
@@ -150,10 +155,15 @@
\setfalse\mmlignoredelimiter % alternatively we could turn it on/off inside the start/stop and ignore \left\right\middle otherwise
-\def\mmlleftdelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_left \fi}
-\def\mmlrightdelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_right \fi}
-\def\mmlmiddledelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_middle \fi}
-\def\mmlleftorrightdelimiter{\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_left_or_right\fi}
+% \def\mmlleftdelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_left \fi}
+% \def\mmlrightdelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_right \fi}
+% \def\mmlmiddledelimiter {\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_middle \fi}
+% \def\mmlleftorrightdelimiter{\ifconditional\mmlignoredelimiter\else\expandafter\math_fences_checked_left_or_right\fi}
+
+\let\mmlleftdelimiter \autofenceopen
+\let\mmlmiddledelimiter \autofencemiddle
+\let\mmlrightdelimiter \autofenceclose
+\let\mmlleftorrightdelimiter\autofenceboth
% end of delimiter mess
@@ -1010,7 +1020,7 @@
\stopxmlsetups
\startxmlsetups mml:minus:body
- % we can slso use concat here
+ % we can also use concat here
\advance\mmlminuscounter\plusone
\ifnum\mmlminuscounter>\plusone
-
@@ -1719,7 +1729,7 @@
} {
\xmldoifelse {#1} {.[oneof(@encoding,'asciimath','am')]} {
\ifdefined\asciimath
- \expanded{\asciimath{\xmlflush{#1}}}
+ \expanded{\asciimath{\xmlflushpure{#1}}}
\else
\hbox{\tt no am loaded}
\fi
@@ -1940,9 +1950,9 @@
% \stopxmlsetups
\startxmlsetups mml:mfenced % {} around separator is needed for spacing
- \math_fences_checked_start
+ %\math_fences_checked_start
\ctxmodulemathml{mfenced("#1")}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
\stopxmlsetups
@@ -2182,13 +2192,13 @@
\startxmlsetups mml:mrow
\begingroup
- \xmldoifelse {#1} {/mml:mo[first() or last()]} {% we need a {}
- \math_fences_checked_start
- \xmlflush{#1}
- \math_fences_checked_stop
- } {
+ %\xmldoifelse {#1} {/mml:mo[first() or last()]} {% we need a {}
+ % % \math_fences_checked_start
+ % \xmlflush{#1}
+ % \math_fences_checked_stop
+ %} {
\xmlflush{#1}
- }
+ %}
\endgroup
\stopxmlsetups
@@ -2264,22 +2274,22 @@
\definemathtriplet [\v!mathematics] [mmlundertriplet] % or will we use a special instance
\definemathtriplet [\v!mathematics] [mmldoubletriplet] % or will we use a special instance
-% common to munder/mover/munderover
+% common to munder/mover/munderover : will become core helper (speed up too)
\starttexdefinition unexpanded mmlfencedfirst #1
- \math_fences_checked_start
+ %\math_fences_checked_start
\mmlunexpandedfirst{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
\stoptexdefinition
\starttexdefinition unexpanded mmlfencedsecond #1
- \math_fences_checked_start
+ %\math_fences_checked_start
\mmlunexpandedsecond{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
\stoptexdefinition
\starttexdefinition unexpanded mmlfencedthird #1
- \math_fences_checked_start
+ %\math_fences_checked_start
\mmlunexpandedthird{#1}
- \math_fences_checked_stop
+ %\math_fences_checked_stop
\stoptexdefinition
% mover
@@ -2353,10 +2363,10 @@
\edef\mmlovercommand {\utfmathcommandabove\mmlovertoken}
\edef\mmlbasecommand {\mmlovercommand\mmlundercommand}
\ifcsname\mmlbasecommand\endcsname
- \csname\mmlbasecommand\endcsname {\mmlfencedfirst{#1}}
+ \lastnamedcs {\mmlfencedfirst{#1}}
\else\ifcsname\mmlundercommand\endcsname
\ifcsname\mmlovercommand\endcsname
- \csname\mmlovercommand\endcsname {\csname\mmlundercommand\endcsname{\mmlfencedfirst{#1}}}
+ \lastnamedcs {\csname\mmlundercommand\endcsname{\mmlfencedfirst{#1}}}
\else
\mmldoubletriplet {\csname\mmlundercommand\endcsname{\mmlfencedfirst{#1}}} {\mmlfencedthird{#1}\mmlfencedthird{#1}} {}
\fi
@@ -2370,7 +2380,7 @@
\edef\mmlundercommand{\utfmathcommandbelow\mmlundertoken}
\edef\mmlbasecommand {\mmlundercommand text}
\ifcsname\mmlbasecommand\endcsname
- \csname\mmlbasecommand\endcsname {\mmlfencedfirst{#1}} {\mmlfencedthird{#1}}
+ \lastnamedcs {\mmlfencedfirst{#1}} {\mmlfencedthird{#1}}
\else\ifcsname\mmlundercommand\endcsname
\mmldoubletriplet {\csname\mmlundercommand\endcsname{\mmlfencedfirst{#1}}} {\mmlfencedthird{#1}} {}
\else
@@ -2381,7 +2391,7 @@
\edef\mmlovercommand{\utfmathcommandabove\mmlovertoken}
\edef\mmlbasecommand{\mmlovercommand text}
\ifcsname\mmlbasecommand\endcsname
- \csname\mmlbasecommand\endcsname {\mmlfencedfirst{#1}} {\mmlfencedsecond{#1}}
+ \lastnamedcs {\mmlfencedfirst{#1}} {\mmlfencedsecond{#1}}
\else\ifcsname\mmlovercommand\endcsname
\mmldoubletriplet {\csname\mmlovercommand\endcsname{\mmlfencedfirst{#1}}} {} {\mmlfencedsecond{#1}}
\else
@@ -2404,7 +2414,6 @@
\edef\mmlbasecommand{e\utfmathcommandfiller\mmlbasetoken}%
\mmlexecuteifdefined\mmlbasecommand \relax {\mmlfencedthird{#1}} {\mmlfencedsecond{#1}}
\stoptexdefinition
-
\startxmlsetups mml:munderover
\edef\mmlbasetoken{\mmlextensible{\xmlraw{#1}{/mml:*[1]}}}% /text()
\doifelseutfmathfiller\mmlbasetoken \mmlunderoverbasefiller \mmlunderoveraccentchecker {#1}
diff --git a/Master/texmf-dist/tex/context/base/x-newmml.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-newmml.mkiv
index 4c12daeeeb3..4c12daeeeb3 100644
--- a/Master/texmf-dist/tex/context/base/x-newmml.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-newmml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-pfs-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-pfs-01.mkiv
index 8b06bd873ff..8b06bd873ff 100644
--- a/Master/texmf-dist/tex/context/base/x-pfs-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-pfs-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-pfsense.ctx b/Master/texmf-dist/tex/context/modules/mkiv/x-pfsense.ctx
index 8d7087cf222..8d7087cf222 100644
--- a/Master/texmf-dist/tex/context/base/x-pfsense.ctx
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-pfsense.ctx
diff --git a/Master/texmf-dist/tex/context/base/x-physml.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-physml.mkiv
index dd9a164dd19..dd9a164dd19 100644
--- a/Master/texmf-dist/tex/context/base/x-physml.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-physml.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-res-01.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-res-01.mkiv
index 36070c61599..36070c61599 100644
--- a/Master/texmf-dist/tex/context/base/x-res-01.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-res-01.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-res-50.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-res-50.mkiv
index 62a86b7a744..62a86b7a744 100644
--- a/Master/texmf-dist/tex/context/base/x-res-50.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-res-50.mkiv
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv
new file mode 100644
index 00000000000..39547591cd7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-basics.mkiv
@@ -0,0 +1,876 @@
+%D \module
+%D [ file=setups-basics, % x-set-11,
+%D version=2016.04.05, % 2004.10.31,
+%D remark=setupx.tex: 1998.07.20 and later,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro Definitions,
+%D author={Hans Hagen & 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.
+
+%D We can make this module a bit cleaner using more recent features or we go \LUA\
+%D completely but as this style evolved over 15 years it's a waste of time.
+%D
+%D As we also have a help server we can make a common framework for this \unknown\
+%D but even then, this file is also a test for the the \XML\ processor.
+%D
+%D Traditionally we used the sorter to generate the lists while nowadays we can
+%D as well use the \XML\ mechanisms directly. We cannot change too much because
+%D manuals depend on it.
+%D
+%D Currently we load the \XML\ file and when not in the english interface we just
+%D remap the relevant words to their translation.
+
+\unprotect
+
+\defineregister
+ [texmacro]
+
+\definesorting
+ [texcommand]
+
+\setupsorting
+ [texcommand]
+ [\c!command=\showsetupinlist,
+ \c!criterium=\setupparameter\c!criterium]
+
+\pushmacro\setuptext
+
+\defineframedtext
+ [setuptext]
+ [\c!width=\hsize,
+ \c!height=\v!fit,
+ \c!align=\v!right,
+ \c!offset=0.75\emwidth]
+
+\popmacro\setuptext
+
+\installcorenamespace{interfacesetup}
+
+\installsetuponlycommandhandler \??interfacesetup {setup} % \??interfacesetup
+
+\setupsetup
+ [\c!before=,
+ \c!after=,
+ \c!command=\setup,
+ \c!criterium=\v!used]
+
+%D General:
+
+\unexpanded\def\setupnumfont {}
+\unexpanded\def\setuptxtfont {}
+\unexpanded\def\setupintfont {\WORD}
+\unexpanded\def\setupvarfont {\sl}
+\unexpanded\def\setupoptfont {\sl}
+\unexpanded\def\setupalwcolor{}
+\unexpanded\def\setupoptcolor{darkgray}
+
+\unexpanded\def\setupvarword#1{{\sl\detokenize{#1}}}
+\unexpanded\def\setupintword#1{\WORD{\detokenize{#1}}}
+\unexpanded\def\setuptxtword#1{\detokenize{#1}}
+
+\unexpanded\def\cmd_internal_value#1%
+ {\dontleavehmode
+ \begingroup
+ \setupintfont{#1}%
+ \endgroup}
+
+\unexpanded\def\cmd_text_value#1%
+ {\dontleavehmode
+ \begingroup
+ \setupvarfont{#1}%
+ \endgroup}
+
+\unexpanded\def\cmd_command_value#1%
+ {\begingroup
+ \setupvarfont{#1}%
+ \endgroup}
+
+%D Loading:
+
+\let\currentSETUPfullname\s!unknown
+
+\startxmlsetups xml:setups:assemblename
+ \doifelse {\xmlatt{#1}{type}} {environment} {
+ \doifsomethingelse {\xmlatt{#1}{begin}} {
+ \edef\currentSETUPprefix{\xmllastatt}%
+ } {
+ \let\currentSETUPprefix\e!start
+ }
+ } {
+ \let\currentSETUPprefix\empty
+ }
+ \edef\currentSETUPname{\xmlatt{#1}{name}}
+ \let\currentSETUPgenerated\empty
+ \doifelsenothing {\xmlatt{#1}{variant}} {
+ \let\currentSETUPvariant\empty
+ } {
+ \def\currentSETUPvariant{:\xmllastatt}
+ }
+ \edef\currentSETUPfullname {
+ \currentSETUPprefix
+ \currentSETUPname
+ \currentSETUPvariant
+ \currentSETUPgenerated
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:register
+ \xmlsetup{#1}{xml:setups:assemblename}
+ % not really needed if we just use setups
+ \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}}
+\stopxmlsetups
+
+\startluacode
+
+ local find, gsub = string.find, string.gsub
+
+ local context = context
+
+ local setupvarword = context.formatted.setupvarword
+ local setupintword = context.formatted.setupintword
+ local setuptxtword = context.formatted.setuptxtword
+
+ local getsetupstring = interfaces.getsetupstring
+
+ -- normally a lookup is fast enough but here we can have many setups
+ -- spread over many files so we do a little speedup here
+
+ local setups = moduledata.setups or { }
+ moduledata.setups = setups
+ local definitions = { }
+ setups.definitions = definitions
+
+ function xml.functions.setups_define(id)
+ local x = lxml.getid(id)
+ for c in xml.collected(x,"cd:interface/cd:define") do
+ definitions[c.at.name] = c
+ end
+
+ for c in xml.collected(x,"cd:interface/cd:interface") do
+ c.at.file = c.__f__
+ c.at["xmlns:cd"] = nil
+ -- c.dt[#c.dt+1] = " "
+ end
+
+ local interface = interfaces.currentinterface or "en"
+
+ if interface ~= "en" then
+
+ local constants = interfaces.complete.constants
+ local variables = interfaces.complete.variables
+ local commands = interfaces.complete.commands
+ local elements = interfaces.complete.elements
+
+ local function replace(pattern,attribute,one,two)
+ for e in xml.collected(x,pattern) do
+ local t = e.at[attribute]
+ if t then
+ local c = one[t] or (two and two[t])
+ if c then
+ local v = c[interface]
+ if v then
+ e.at[attribute] = v
+ end
+ end
+ end
+ end
+ end
+
+ replace('cd:command', 'name', commands, elements)
+ replace('cd:string', 'value', commands, elements)
+ replace('cd:variable' , 'value', variables)
+
+ replace('cd:parameter', 'name', constants)
+ replace('cd:constant', 'type', variables)
+ replace('cd:constant', 'default', variables)
+ replace('cd:variable', 'type', variables)
+ replace('cd:inherit', 'name', commands, elements)
+
+ end
+
+ if tex.modes["setups:save"] and environment.currentrun == 1 then
+ local s = tostring(x)
+ s = gsub(s,"\n*%s*(</cd:interface>)%s+(<cd:interface)", "\n\n %1\n\n %2")
+ s = gsub(s,"\n*%s*(</cd:interface>)%s+(</cd:interface>)","\n\n %1\n\n %2")
+ io.savedata("context-"..interface..".xml",s)
+ end
+
+ end
+
+ function moduledata.setups.resolved(name)
+ lxml.flush(definitions[name])
+ end
+
+ function xml.finalizers.s_count(collected)
+ local n = 0
+ for i=1,#collected do
+ local c = collected[i]
+ local tg = c.tg
+ if tg == "resolve" then
+ local d = definitions[c.at.name]
+ n = n + xml.count(d,"/*")
+ elseif tg == "delimiter" then
+ -- skip
+ else
+ n = n + 1
+ end
+ end
+ context(n)
+ end
+
+ interfaces.implement {
+ name = "getsetupstring",
+ actions = function(s)
+ local g = getsetupstring(s)
+ if not find(s,"^cd:") then
+ setuptxtword(g)
+ elseif find(s,"%-.$") then
+ setupvarword(g)
+ else
+ setupintword(g) -- cap
+ end
+ end,
+ overload = true,
+ arguments = "string",
+ }
+
+\stopluacode
+
+% <?xml version="1.0" encoding="UTF-8"?>
+%
+% <cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+%
+% <cd:interfacefile filename="i-document.xml"/>
+% <cd:interfacefile filename="i-file.xml"/>
+%
+% </cd:interface>
+
+\startxmlsetups xml:setups:interfacefile
+ \loadsetups[\xmlatt{#1}{filename}]
+\stopxmlsetups
+
+\startxmlsetups xml:setups:basics
+ \xmlincludeoptions{#1}{interfacefile|include}{filename}{recurse,basename}
+ \xmlsetsetup{#1}{*}{xml:setups:*}
+ \xmlfunction{#1}{setups_define}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{setups}{xml:setups:basics}
+
+\let\loadedsetups\empty % we load more setups, setups:<name>
+
+\unexpanded\def\loadsetups
+ {\dosingleempty\cmd_load_setups}
+
+\def\cmd_load_setups[#1]%
+ {\edef\m_cmd_asked_setups{#1}%
+ \doifnotmode{no-setup-main}{\def\m_cmd_asked_setups{i-context.xml}}%
+ \ifx\m_cmd_asked_setups\empty \else
+ \doonlyonce{setups:#1}
+ {\doglobal\prependtocommalist{setups:#1}\loadedsetups
+ \doiffileexistselse{#1}
+ {\xmlloadonly{setups:#1}{#1}{setups}}%
+ {\xmlloadonly{setups:#1}{#1.xml}{setups}}%
+ % qualified path saves > 50% runtime
+ \xmlfilter{setups:#1}{/interface//command/command(xml:setups:register)}}%
+ \fi}
+
+\newconstant \c_cmd_kind
+\newconditional\c_cmd_doing_line
+\newconditional\c_cmd_measuring
+\newconditional\c_cmd_show_setup
+\newcount \c_cmd_current_argument
+\newcount \c_cmd_maximum_argument
+\newdimen \d_cmd_current_width
+\let \m_cmd_current_hash \empty
+\let \m_cmd_current_file \empty
+
+\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\showsetup {\c_cmd_kind\plustwo \cmd_show_setup}
+
+\unexpanded\def\showsetupinlist#1#2#3%
+ {\c_cmd_kind\plustwo\xmlsetup{#3}{xml:setups:typeset}\par}
+
+\installtextracker
+ {cmd.showsetup}
+ {\settrue\c_cmd_show_setup}
+ {\setfalse\c_cmd_show_setup}
+
+\unexpanded\def\cmd_show_setup
+ {\doifelsenextoptionalcs\cmd_show_setup_yes\cmd_show_setup_nop}
+
+\def\cmd_show_setup_yes[#1]%
+ {\iffirstargument
+ \cmd_show_setup_nop{#1}%
+ \else
+ \expandafter\cmd_show_setup_nop
+ \fi}
+
+\def\cmd_show_setup_nop#1% this will trigger 'used'
+ {\registersort[texcommand][stp:x:#1]%
+ \ifconditional\c_cmd_show_setup
+ \writestatus{setup}{#1 / \rawsynonymname{texcommand}{stp:x:#1}}%
+ \fi
+ \startelement[setup][name=#1]%
+ \startelement[noexport][comment={setup definition #1}]%
+ \xmlsetup{\rawsynonymname{texcommand}{stp:x:#1}}{xml:setups:typeset}
+ \stopelement
+ \stopelement}
+
+\unexpanded\def\placesetup {\placelistofsorts[texcommand][\c!criterium=\v!used]}
+\unexpanded\def\placeallsetups{\placelistofsorts[texcommand][\c!criterium=\v!all ]}
+
+% todo: grouped
+
+\let\placeeverysetup\placeallsetups
+
+%D Typesetting:
+
+\startxmlsetups xml:setups:typeset
+ \doifelsenothing {#1} {
+ \xmlsetup{#1}{xml:setups:typeset:nop}
+ } {
+ \xmlsetup{#1}{xml:setups:typeset:yes}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:nop
+ \blank
+ \type {MISSING SETUP}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:setups:make:string
+ \xmlatt{#1}{value}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:make:variable
+ \xmlatt{#1}{value}
+\stopxmlsetups
+
+\let\m_cmd_current_hash\empty
+\let\m_cmd_current_file\empty
+\let\m_cmd_font \empty
+\let\m_cmd_name \empty
+\let\m_cmd_start \empty
+\let\m_cmd_stop \empty
+
+\startxmlsetups xml:setups:make:prepare
+ \edef\m_cmd_current_hash{\xmlatt{#1}{hash}}
+ \xdef\m_cmd_current_file{\xmlatt{#1}{file}}%
+ \xmldoifelseempty{#1}{/sequence} {
+ \edef\m_cmd_name{\xmlatt{#1}{name}}
+ } {
+ \edef\m_cmd_name{\xmlfilter{#1}{/sequence/(string|variable)/command(xml:setups:make:*)}}
+ }
+ \doifelse {\xmlatt{#1}{type}} {environment} {
+ \doifsomethingelse {\xmlatt{#1}{begin}} {
+ \edef\m_cmd_start{\xmllastatt}
+ } {
+ \let\m_cmd_start\e!start
+ }
+ \doifsomethingelse {\xmlatt{#1}{end}} {
+ \edef\m_cmd_stop{\xmllastatt}
+ } {
+ \let\m_cmd_stop\e!stop
+ }
+ } {
+ \let\m_cmd_start\empty
+ \let\m_cmd_stop \empty
+ }
+ \doifelse {\xmlatt{#1}{generated}} {yes} {
+ \let\m_cmd_font\ttsl
+ } {
+ \let\m_cmd_font\relax
+ }
+\stopxmlsetups
+
+\startsetups xml:setups:make:start
+ \bgroup
+ \settrue\c_cmd_doing_line
+ \m_cmd_font
+ \letterbackslash
+ \m_cmd_start
+ \m_cmd_name
+ \ignorespaces
+ \egroup
+\stopsetups
+
+\startsetups xml:setups:make:stop
+ \ifx\m_cmd_stop\empty \else
+ \bgroup
+ \settrue\c_cmd_doing_line
+ \hskip.5em\unknown\hskip.5em
+ \m_cmd_font
+ \letterbackslash
+ \m_cmd_stop
+ \m_cmd_name
+ \ignorespaces
+ \egroup
+ \fi
+\stopsetups
+
+\startxmlsetups xml:setups:typeset:line
+ \ttbf
+ \nohyphens
+ \xmlsetup{#1}{xml:setups:make:prepare}
+ \directsetup{xml:setups:make:start}
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \settrue\c_cmd_doing_line
+ \global\c_cmd_current_argument\zerocount
+ \ignorespaces
+ \xmlfilter{#1}{/arguments/text()}
+ \egroup
+ }
+ \directsetup{xml:setups:make:stop}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:raw
+ \tttf
+ \nohyphens
+ \veryraggedright
+ \global\c_cmd_current_argument\zerocount
+ \global\c_cmd_maximum_argument\xmlfilter{#1}{/arguments/*/s_count()}\relax
+ \xmlsetup{#1}{xml:setups:make:prepare}
+ \directsetup{xml:setups:make:start}
+ \xmldoif{#1}{/arguments} {
+ \settrue\c_cmd_doing_line
+ \bgroup
+ \global\c_cmd_current_argument\zerocount
+ \ignorespaces
+ \xmlfilter{#1}{/arguments/text()}
+ \egroup
+ }
+ \directsetup{xml:setups:make:stop}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:detail
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \setfalse\c_cmd_doing_line
+ \global\c_cmd_current_argument\zerocount
+ %\blank[\v!line] % packed mode (we could do \startunpacked ...)
+ \godown[.75\lineheight]
+ \switchtobodyfont[\v!small]
+ \ignorespaces\xmlfilter{#1}{/arguments/text()}\endgraf
+ \egroup
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:yes
+ \glet\m_cmd_current_file\empty
+ \ifcase\c_cmd_kind
+ \xmlsetup{#1}{xml:setups:typeset:line}
+ \or
+ \getvalue{\e!start setuptext}
+ \xmlsetup{#1}{xml:setups:typeset:raw}
+ \getvalue{\e!stop setuptext}
+ \or
+ \getvalue{\e!start setuptext}
+ \xmlsetup{#1}{xml:setups:typeset:raw}
+ \endgraf
+ \xmlsetup{#1}{xml:setups:typeset:detail}
+ \getvalue{\e!stop setuptext}
+ \fi
+ \glet\m_cmd_current_file\empty
+\stopxmlsetups
+
+\startsetups xml:setups:overlay:file
+ \vbox to \overlayheight \bgroup
+ \infofont
+ \vfill
+ \scratchdimen.5\exheight
+ \hbox to \overlaywidth \bgroup
+ \strut
+ \hss
+ \m_cmd_current_file
+ \hskip\dimexpr\scratchdimen+\strutdp\relax
+ \egroup
+ \vskip\scratchdimen
+ \egroup
+\stopsetups
+
+\defineoverlay
+ [setupfilename]
+ [\directsetup{xml:setups:overlay:file}]
+
+\startxmlsetups xml:setups:resolve
+ \ignorespaces
+ \ctxlua{moduledata.setups.resolved('\xmlatt{#1}{name}')}
+\stopxmlsetups
+
+%D This is the first pass; here we generate the top line.
+
+\startxmlsetups xml:setups:define
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:sequence
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:string
+ \xmlatt{#1}{value}\ignorespaces
+\stopxmlsetups
+
+\startxmlsetups xml:setups:delimiter
+ \ifconditional\c_cmd_doing_line
+ \kern.5\emwidth
+ \letterbackslash\xmlatt{#1}{name}
+ \fi
+ \ignorespaces
+\stopxmlsetups
+
+\startxmlsetups xml:setups:content \showSETUPcomponent{#1}{content} \stopxmlsetups
+\startxmlsetups xml:setups:displaymath \showSETUPcomponent{#1}{displaymath}\stopxmlsetups
+\startxmlsetups xml:setups:index \showSETUPcomponent{#1}{index} \stopxmlsetups
+\startxmlsetups xml:setups:math \showSETUPcomponent{#1}{math} \stopxmlsetups
+\startxmlsetups xml:setups:nothing \showSETUPcomponent{#1}{nothing} \stopxmlsetups
+\startxmlsetups xml:setups:file \showSETUPcomponent{#1}{file} \stopxmlsetups
+\startxmlsetups xml:setups:position \showSETUPcomponent{#1}{position} \stopxmlsetups
+\startxmlsetups xml:setups:reference \showSETUPcomponent{#1}{reference} \stopxmlsetups
+\startxmlsetups xml:setups:csname \showSETUPcomponent{#1}{csname} \stopxmlsetups
+\startxmlsetups xml:setups:destination \showSETUPcomponent{#1}{destination}\stopxmlsetups
+\startxmlsetups xml:setups:triplet \showSETUPcomponent{#1}{triplet} \stopxmlsetups
+\startxmlsetups xml:setups:word \showSETUPcomponent{#1}{word} \stopxmlsetups
+\startxmlsetups xml:setups:template \showSETUPcomponent{#1}{template} \stopxmlsetups
+\startxmlsetups xml:setups:angles \showSETUPcomponent{#1}{angles} \stopxmlsetups
+\startxmlsetups xml:setups:apply \showSETUPcomponent{#1}{apply} \stopxmlsetups
+\startxmlsetups xml:setups:twowords \showSETUPcomponent{#1}{twowords} \stopxmlsetups
+\startxmlsetups xml:setups:threewords \showSETUPcomponent{#1}{threewords} \stopxmlsetups
+\startxmlsetups xml:setups:text \showSETUPcomponent{#1}{text} \stopxmlsetups
+
+% todo: cd:par => \par
+% todo: cd:sep => \\
+
+\unexpanded\def\showSETUPcomponent#1#2%
+ {\ifconditional\c_cmd_doing_line
+ \getvalue{showSETUP#2}{#1}%
+ \else
+ \simpleSETUPargument{#2}%
+ \fi}
+
+%D This is the second pass; here we generate the table.
+
+\unexpanded\def\startfirstSETUPcolumn#1%
+ {\bgroup
+ \scratchdimen2\emwidth
+ \advance\leftskip \scratchdimen
+ \noindent\llap{\hbox to \scratchdimen{#1\hss}}}
+
+\unexpanded\def\stopfirstSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\unexpanded\def\startsecondSETUPcolumn#1#2%
+ {\bgroup
+ \scratchdimen2.5\emwidth
+ \advance\hangindent\dimexpr\d_cmd_current_width+\scratchdimen\relax
+ \noindent \hbox to \hangindent{#1\hss\hbox to \scratchdimen{\hss#2\hss}}}
+
+\unexpanded\def\stopsecondSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\unexpanded\def\secondSETUPcolumn#1#2%
+ {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
+
+\startxmlsetups xml:setups:assignments
+ \ifconditional\c_cmd_doing_line
+ \ifcase\c_cmd_kind
+ \expandafter\showSETUPline
+ \else
+ \expandafter\showSETUP
+ \fi{#1}{assignment\xmlattdef{#1}{delimiters}{brackets}}
+ \else
+ \global\d_cmd_current_width\zeropoint
+ \setbox\scratchbox\vbox\bgroup
+ \settrue\c_cmd_measuring
+ \xmlall{#1}{/(parameter|resolve)}
+ \egroup
+ \global\d_cmd_current_width\themaxboxwidth\scratchbox\relax
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmldoifelse {#1} {/(parameter|inherit|resolve)} {
+ \xmlflush{#1}
+ } {
+ \unknown
+ }
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:setups:keywords
+ \ifconditional\c_cmd_doing_line
+ \ifcase\c_cmd_kind
+ \expandafter\showSETUPline
+ \else
+ \expandafter\showSETUP
+ \fi{#1}{\xmlattdef{#1}{delimiters}{brackets}}
+ \else
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmlflush{#1}
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ \fi
+\stopxmlsetups
+
+\startxmlsetups xml:setups:parameter
+ \ifconditional\c_cmd_measuring
+ \getsetupstring{\xmlatt{#1}{name}}\par
+ \else
+ \startsecondSETUPcolumn{\getsetupstring{\xmlatt{#1}{name}}}{=}
+ \ignorespaces
+ \xmlflush{#1}
+ \doifmode{interface:setup:defaults} {
+ \ifx\m_cmd_current_hash\empty \else
+ \begingroup
+ % todo, make a one level expansion of parameter
+ \let\emwidth \relax
+ \let\exheight\relax
+ \edef\temp{\csname named\m_cmd_current_hash parameter\endcsname\empty{\xmlatt{#1}{name}}}
+ \ifx\temp\empty \else
+ =\space
+ \detokenize\expandafter{\temp}
+ \fi
+ \endgroup
+ \fi
+ }
+ \stopsecondSETUPcolumn
+ \fi
+ \ignorespaces
+\stopxmlsetups
+
+%xmlmapvalue{setups:method}{class} {:}
+\xmlmapvalue{setups:method}{range} {:}
+\xmlmapvalue{setups:method}{apply} {->}
+\xmlmapvalue{setups:method}{factor}{*}
+\xmlmapvalue{setups:method}{none} {}
+
+\startxmlsetups xml:setups:constant:value
+ \getsetupstring{\xmlatt{#1}{type}}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:constant
+ \doifelsemode {setups-pass-one} {
+ } {
+ \doifsomethingelse{\xmlatt{#1}{prefix}} {
+ \getsetupstring{\xmllastatt}
+ \xmlmappedvalue{setups:method}{\xmlatt{#1}{method}}{none}
+ } {
+ \doif {\xmlatt{#1}{default}} {yes} {
+ \underbar % next needs to be {braced}
+ }
+ }
+ {\getsetupstring{\xmlatt{#1}{type}}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:variable
+ \doifelsemode {setups-pass-one} {
+ \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces
+ } {
+ \getsetupstring{\xmlatt{#1}{value}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:inherit
+ \secondSETUPcolumn {
+ \cmd_text_value{\getsetupstring{cd:inherits}}
+ \enspace
+ \letterbackslash
+ \xmlatt{#1}{name}
+ } {}
+ \ignorespaces
+\stopxmlsetups
+
+\unexpanded\def\simpleSETUPargument#1%
+ {\startfirstSETUPcolumn{\showSETUPnumber}%
+ \cmd_internal_value{#1}%
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces}
+
+%D Auxiliary.
+
+\unexpanded\def\showSETUP#1#2%
+ {\bgroup
+ \global\advance\c_cmd_current_argument\plusone
+ \setbox0=\hbox
+ {\doifelse{\xmlatt{#1}{list}}{yes}
+ {\getsetupstring{cd:#2-l}}%
+ {\getsetupstring{cd:#2-s}}}%
+ \setbox2=\hbox to \wd0
+ {\hss
+ \raise1.25\exheight\hbox
+ {\txx\ifcase\c_cmd_maximum_argument \relax
+ \or*\else\the\c_cmd_current_argument
+ \fi}%
+ \hss}%
+ \setbox4=\hbox to \wd0
+ {\hss
+ \lower2\exheight\hbox
+ \bgroup
+ \txx
+ \doif {\xmlatt{#1}{optional}} {yes}
+ {\getsetupstring{cd:optional}}%
+ \egroup
+ \hss}%
+ \ht2\ht\strutbox
+ \dp4\dp\strutbox
+ \hskip.5\emwidth
+ \wd0\zeropoint
+ \box0
+ \wd2\zeropoint
+ \box2
+ \box4%
+ \egroup
+ \ignorespaces}
+
+\unexpanded\def\showSETUPline#1#2%
+ {\kern.5\emwidth
+ \getsetupstring{cd:#2-s}%
+ \ignorespaces}
+
+\unexpanded\def\showSETUPnumber
+ {\global\advance\c_cmd_current_argument\plusone
+ \hbox to 2\emwidth
+ {\ifcase\c_cmd_maximum_argument \relax
+ \or*\else\the\c_cmd_current_argument
+ \fi
+ \hss}}
+
+% todo: replace = by lower
+
+\unexpanded\def\setupEQsymbol % we raise the number already
+ {.\lower.25\exheight\hpack{=}.}
+
+\unexpanded\def\setupAPPLYsymbol % we raise the number already
+ {..\lower.25\exheight\hpack{=>}..}
+
+% arguments
+
+\unexpanded\def\showSETUPdisplaymath#1{\showSETUP {#1}{displaymath}}
+\unexpanded\def\showSETUPindex #1{\showSETUP {#1}{index}}
+\unexpanded\def\showSETUPmath #1{\showSETUP {#1}{math}}
+\unexpanded\def\showSETUPnothing #1{\showSETUP {#1}{nothing}}
+\unexpanded\def\showSETUPfile #1{\showSETUP {#1}{file}}
+\unexpanded\def\showSETUPposition #1{\showSETUP {#1}{position}}
+\unexpanded\def\showSETUPtemplate #1{\showSETUP {#1}{template}}
+\unexpanded\def\showSETUPangles #1{\showSETUP {#1}{angle}}
+\unexpanded\def\showSETUPreference #1{\showSETUP {#1}{reference}}
+\unexpanded\def\showSETUPapply #1{\showSETUP {#1}{apply}}
+\unexpanded\def\showSETUPtwowords #1{\showSETUP {#1}{twowords}}
+\unexpanded\def\showSETUPthreewords #1{\showSETUP {#1}{threewords}}
+\unexpanded\def\showSETUPcsname #1{\showSETUP {#1}{noargument}}
+\unexpanded\def\showSETUPdestination#1{\showSETUP {#1}{destination}}
+\unexpanded\def\showSETUPtriplet #1{\showSETUP {#1}{triplet}}
+\unexpanded\def\showSETUPword #1{\showSETUP {#1}{word}}
+\unexpanded\def\showSETUPcontent #1{\showSETUP {#1}{content}}
+\unexpanded\def\showSETUPtext #1{\showSETUP {#1}{textual}}
+\unexpanded\def\showSETUPto #1{\showSETUPline{#1}{to}}
+\unexpanded\def\showSETUPmacro #1{\showSETUP {#1}{macro}}
+
+% A prelude to a rewrite and some more:
+
+% \definetype[parametercommand][\v!type]
+% \definetype[parameterkey] [\v!type]
+% \definetype[parametervalue] [\v!type][\c!space=\v!on]
+
+% todo: no list but hash ..
+
+\definetype[parametercommand]
+\definetype[parameterkey]
+\definetype[parametervalue] [\c!space=\v!on]
+
+\setuptype [parametercommand] [\c!color=darkmagenta]
+\setuptype [parametervalue] [\c!color=darkyellow]
+
+\startxmlsetups xml:setups:parameters:value
+ \edef\currentsetupparameterkey {\xmlatt{#1}{name}}
+ \edef\currentsetupparametervalue{\begincsname named\currentsetupparametercategory parameter\endcsname\currentsetupparameterinstance\currentsetupparameterkey}
+ \ifx\currentsetupparameterinstance\empty
+ \expanded {
+ \NC \parameterkey {\currentsetupparameterkey}
+ \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
+ \NC \NR
+ }
+ \else\ifx\currentsetupparametervalue\empty
+ \else
+ \edef\currentsetupparameterdefault{\begincsname named\currentsetupparametercategory parameter\endcsname\empty\currentsetupparameterkey}
+ \ifx\currentsetupparametervalue\currentsetupparameterdefault
+ % skip
+ \else
+ \expanded {
+ \NC \parameterkey {\currentsetupparameterkey}
+ \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
+ \NC \NR
+ }
+ \fi
+ \fi\fi
+\stopxmlsetups
+
+\startxmlsetups xml:setups:parameters:values
+ \blank[big]
+ \expanded {
+ \parametercommand {
+ \currentsetupparametercommand
+ \space:\space
+ \ifx\currentsetupparameterinstance\empty
+ defaults
+ \else
+ \currentsetupparameterinstance
+ \fi
+ }
+ }
+ \blank[big,samepage]
+ \starttabulate[|l|p|]
+ \xmlall
+ {#1}
+ {/interface/command[@name=='\currentsetupparametercommand' or @handler=='\currentsetupparametercommand']/arguments/assignments/parameter/command(xml:setups:parameters:value)}
+ \ifnum\noftabulaterows = \zerocount
+ \NC \parameterkey{no specific settings} \NC \NC \NR
+ \fi
+ \stoptabulate
+\stopxmlsetups
+
+\starttexdefinition showrootvalues [#1]
+ \edef\currentsetupparametercategory{#1}
+ \edef\currentsetupparametercommand{setup#1}
+ \let\currentsetupparameterinstance\empty
+ \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
+\stoptexdefinition
+
+\starttexdefinition showinstancevalues [#1]#2[#3]
+ \edef\currentsetupparametercategory{#1}
+ \edef\currentsetupparametercommand{setup#1}
+ \edef\currentsetupparameterinstance{#3}
+ \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
+\stoptexdefinition
+
+% official interface
+
+\unexpanded\def\cmdinternal#1%
+ {{\tttf\getsetupstring{#1}}} % todo color .. highlight
+
+\let\cmdbasicsetup\basicsetup
+\let\cmdshortsetup\shortsetup
+\let\cmdfullsetup \showsetup
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-setups-generate.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-generate.mkiv
new file mode 100644
index 00000000000..f64489e8d63
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-generate.mkiv
@@ -0,0 +1,18 @@
+%D \module
+%D [ file=setups-generate,
+%D version=2016.04.05,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro Definitions,
+%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.
+
+\enablemode[setups:save]
+
+\input x-setups-overview.mkiv
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-set-12.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-overview.mkiv
index c60445313ee..35ded7a8600 100644
--- a/Master/texmf-dist/tex/context/base/x-set-12.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-overview.mkiv
@@ -1,10 +1,10 @@
%D \module
-%D [ file=x-set-12,
-%D version=2004.10.31,
+%D [ file=setups-basics, % x-set-12,
+%D version=2016.04.05, % 2004.10.31,
%D remark=setupx.tex: 1998.07.20 and later,
%D title=\CONTEXT\ Setup Definitions,
%D subtitle=Macro Definitions,
-%D author=Hans Hagen,
+%D author={Hans Hagen & Wolfgang Schuster},
%D date=\currentdate,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
@@ -12,28 +12,10 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% included loading overhead
-%
-% 2.55 / 2.40 (luatex)
-% 1.90 / 1.80 (luajittex)
-
-% \newif\ifcachedcommand
-% \newif\ifcalledcommand
-%
-% \cachedcommandtrue
-% \calledcommandtrue
-%
-% \usemodule[speedtest]
-
-\usemodule[set-11]
+\usemodule[setups-basics]
\unprotect
-% \starttext
-% \setup{installlanguage}
-% \placesetup
-% \stoptext
-
\definecolor[TitleColor][r=.375,g=.125,b=.125]
\definecolor[TitleColor][r=.125,g=.375,b=.125]
\definecolor[TitleColor][r=.125,g=.125,b=.375]
@@ -48,13 +30,21 @@
\definecolor[TitleColor][r=.15,g=.20,b=.25]
\definecolor[TitleColor][r=.15,g=.25,b=.20]
-\startinterface english \loadsetups[cont-en.xml] \stopinterface
-\startinterface dutch \loadsetups[cont-nl.xml] \stopinterface
-\startinterface german \loadsetups[cont-de.xml] \stopinterface
-\startinterface french \loadsetups[cont-fr.xml] \stopinterface
-\startinterface italian \loadsetups[cont-it.xml] \stopinterface
-\startinterface czech \loadsetups[cont-cs.xml] \stopinterface
-\startinterface romanian \loadsetups[cont-ro.xml] \stopinterface
+\doifelsemode {setups:traditional} {
+
+ \startinterface english \loadsetups[cont-en.xml] \stopinterface
+ \startinterface dutch \loadsetups[cont-nl.xml] \stopinterface
+ \startinterface german \loadsetups[cont-de.xml] \stopinterface
+ \startinterface french \loadsetups[cont-fr.xml] \stopinterface
+ \startinterface italian \loadsetups[cont-it.xml] \stopinterface
+ \startinterface czech \loadsetups[cont-cs.xml] \stopinterface
+ \startinterface romanian \loadsetups[cont-ro.xml] \stopinterface
+
+} {
+
+ \loadsetups[i-context.xml]
+
+}
\startinterface dutch \definecolor[LocalColor][r=.75,g=.25,b=.25] \stopinterface
\startinterface english \definecolor[LocalColor][r=.25,g=.75,b=.25] \stopinterface
@@ -160,6 +150,8 @@
[\c!rulethickness=1pt,
\c!rulecolor=TitleColor]
+\dontcomplain
+
\starttext
\setupbackgrounds
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-setups-proofing.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-proofing.mkiv
new file mode 100644
index 00000000000..e40ee2ad10a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups-proofing.mkiv
@@ -0,0 +1,50 @@
+%D \module
+%D [ file=setups-proofing,
+%D version=2016.04.05,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro Definitions,
+%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.
+
+% <?context-directive job ctxfile x-setups.ctx ?>
+
+\usemodule[x][setups-basics]
+
+\unprotect
+
+\loadsetups
+ [\jobname.xml]
+
+\setupbodyfont
+ [10pt]
+
+\setuplayout
+ [\c!width=middle,
+ \c!topspace=1cm,
+ \c!bottomspace=1cm,
+ \c!backspace=1cm,
+ \c!cutspace=1cm,
+ \c!footer=0pt,
+ \c!header=1cm]
+
+\setuplayout
+ [\v!middle]
+
+\setupframedtext
+ [setuptext]
+ [\c!background=setupfilename]
+
+\protect
+
+\starttext
+
+ \loadsetups[i-common-definitions]
+
+ \placeeverysetup
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/modules/mkiv/x-setups.ctx b/Master/texmf-dist/tex/context/modules/mkiv/x-setups.ctx
new file mode 100644
index 00000000000..0ca4d8f6f49
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-setups.ctx
@@ -0,0 +1,15 @@
+<?xml version='1.0' standalone='yes'?>
+
+<!-- this is also a demo of using the xml interface -->
+
+<ctx:job>
+ <ctx:message>generating interface setups</ctx:message>
+ <ctx:process>
+ <ctx:flags>
+ <ctx:flag>purge</ctx:flag>
+ </ctx:flags>
+ <ctx:resources>
+ <ctx:environment>x-setups-proofing.mkiv</ctx:environment>
+ </ctx:resources>
+ </ctx:process>
+</ctx:job>
diff --git a/Master/texmf-dist/tex/context/base/x-steps.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-steps.mkiv
index 29b3f7eaa6e..29b3f7eaa6e 100644
--- a/Master/texmf-dist/tex/context/base/x-steps.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-steps.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-udhr.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-udhr.mkiv
index e081bfd5971..e081bfd5971 100644
--- a/Master/texmf-dist/tex/context/base/x-udhr.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-udhr.mkiv
diff --git a/Master/texmf-dist/tex/context/base/x-xfdf.mkiv b/Master/texmf-dist/tex/context/modules/mkiv/x-xfdf.mkiv
index 460220ed943..460220ed943 100644
--- a/Master/texmf-dist/tex/context/base/x-xfdf.mkiv
+++ b/Master/texmf-dist/tex/context/modules/mkiv/x-xfdf.mkiv
diff --git a/Master/texmf-dist/tex/context/patterns/lang-af.rme b/Master/texmf-dist/tex/context/patterns/common/lang-af.rme
index 33d7d34bbb1..bd9bf2a937e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-af.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-af.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Afrikaans hyphenation patterns
-
-(more info about the licence to be added later)
-
% Hyphenation patterns for Afrikaans
%
% This work may be distributed and/or modified under the
diff --git a/Master/texmf-dist/tex/context/patterns/lang-agr.rme b/Master/texmf-dist/tex/context/patterns/common/lang-agr.rme
index 72362908e98..72692b84973 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-agr.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-agr.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Hyphenation patterns for Ancient Greek
-
-(more info about the licence to be added later)
-
% ****************************************************************
%
% File name: hyph-grc.tex
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-ala.rme b/Master/texmf-dist/tex/context/patterns/common/lang-ala.rme
new file mode 100644
index 00000000000..b4967d78a4e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-ala.rme
@@ -0,0 +1,37 @@
+% generated by mtxrun --script pattern --convert
+
+%
+% ********** hyph-la-x-classic.tex *************
+%
+% Copyright 2014 Claudio Beccari
+% [classical latin hyphenation patterns]
+%
+% -----------------------------------------------------------------
+% IMPORTANT NOTICE:
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+% -----------------------------------------------------------------
+%
+% Patterns for the classical Latin language; classical spelling
+% with the (uncial) lowercase `v' written as a `u' is supported.
+% Classical Latin hyphenation patterns are different from those of
+% "plain" Latin, the latter being more adapted to modern Latin.
+%
+%
+% Prepared by Claudio Beccari
+% e-mail claudio dot beccari at gmail dot com
+%
+% Aknowledgements: This file has been substantially upgraded with
+% the contributions of Francisco Gracia.
+%
+% \versionnumber{1.2} \versiondate{2014/10/06}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \message{Classical Latin hyphenation patterns `hyph-la-x-classic'
+% Version 1.2 <2014/10/06>}
+%
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.rme b/Master/texmf-dist/tex/context/patterns/common/lang-bg.rme
index 840bb53a3df..ba29f68c53b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-bg.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Bulgarian hyphenation patterns
-
-(more info about the licence to be added later)
-
% Bulgarian hyphenation patterns, version 1.7, July 2008
% Copyright 1994-2008 Georgi Boshnakov
% Georgi dot Boshnakov at manchester dot ac dot uk
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.rme b/Master/texmf-dist/tex/context/patterns/common/lang-ca.rme
index e88de1d8878..c19e89b1e69 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-ca.rme
@@ -1,67 +1,10 @@
% generated by mtxrun --script pattern --convert
-Catalan hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: cahyph.tex (2003-09-08)
-% Author: Gonçal Badenes <g.badenes at ieee.org>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
+% This file has been converted for the hyph-utf8 project from cahyph.tex, whose
+% author has been identified as Gonçal Badenes <g.badenes at ieee.org>
+% (2003-09-08). The licence terms are unchanged.
%
+% See http://www.hyphenation.org for details on the project.
%------------------------------------------------------------------------------
%
% Hyphenation patterns for Catalan.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-cs.rme b/Master/texmf-dist/tex/context/patterns/common/lang-cs.rme
new file mode 100644
index 00000000000..6c6430ab08a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-cs.rme
@@ -0,0 +1,32 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from czhyphen.tex and
+% czhyphen.ex, whose author has been identified as Pavel Ševeček <pavel at
+% lingea.cz>. The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+%%% ====================================================================
+% This is CZHYPHEN.TEX, containing czech hyphenation patterns.
+% Prepared by:
+% Pavel Ševeček
+% Lingea s.r.o., Brno, Czech Republic
+% E-mail: pavel@lingea.cz
+%
+% This is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This file is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+%%% --------------------------------------------------------------------
+% \message {Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995)}
+%\lefthyphenmin=2\righthyphenmin=2
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-cy.rme b/Master/texmf-dist/tex/context/patterns/common/lang-cy.rme
new file mode 100644
index 00000000000..cd1003d842c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-cy.rme
@@ -0,0 +1,47 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright 1996 Yannis Haralambous
+% title: Welsh hyphenation patterns
+% version: 1996
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% - This file is available under any of these licences:
+% -
+% name: LPPL
+% status: maintained
+% maintainer: Yannis Haralambous
+% version: 1.0
+% or_later: true
+% url: http://www.latex-project.org/lppl/lppl-1-0.html
+% -
+% name: MIT
+% url: https://opensource.org/licences/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person
+% obtaining a copy of this software and associated documentation
+% files (the "Software"), to deal in the Software without
+% restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the
+% Software is furnished to do so, subject to the following
+% conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+% changes:
+% - 1996 - last change to patterns
+% - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex)
+% - June 2011 - added LPPL licence
+% - March 2016 - added MIT licence
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-da.rme b/Master/texmf-dist/tex/context/patterns/common/lang-da.rme
new file mode 100644
index 00000000000..382761f46f7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-da.rme
@@ -0,0 +1,42 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright 1994 Frank Jensen
+% title: Hyphenation patterns for Danish
+% version: 2011-01-11
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% - This file is available under any of these licences:
+% -
+% name: LPPL
+% version: 1.3
+% or_later: true
+% url: http://www.latex-project.org/lppl/lppl-1-3.html
+% -
+% name: MIT
+% url: https://opensource.org/licenses/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person
+% obtaining a copy of this software and associated documentation
+% files (the "Software"), to deal in the Software without
+% restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the
+% Software is furnished to do so, subject to the following
+% conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+% changes:
+% - 2011-01-11 - remove support for OT1 encoding
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.rme b/Master/texmf-dist/tex/context/patterns/common/lang-de.rme
index c843cd5e064..d1b549fc71b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-de.rme
@@ -1,17 +1,13 @@
% generated by mtxrun --script pattern --convert
-German hyphenation patterns (reformed orthography)
+% dehyphn-x-2014-05-21.pat
-(more info about the licence to be added later)
-
-% dehyphn-x-2013-05-26.pat
-
-\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2013-05-26 (WL)}
+\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2014-05-21 (WL)}
% TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung
%
%
-% Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 Werner Lemberg <wl@gnu.org>
+% Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013, 2014 Werner Lemberg <wl@gnu.org>
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
@@ -21,7 +17,7 @@ German hyphenation patterns (reformed orthography)
%
% The word list is available from
%
-% http://repo.or.cz/w/wortliste.git?a=commit;h=6e4755b1055a5983ccf6929793a90d2fdfa4a203
+% http://repo.or.cz/w/wortliste.git?a=commit;h=3a97953c0ddd099a1785ea7927cbf24e639090b0
%
% The used patgen parameters are
%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.rme b/Master/texmf-dist/tex/context/patterns/common/lang-deo.rme
index bd4c5e87480..c4fed100981 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-deo.rme
@@ -1,17 +1,13 @@
% generated by mtxrun --script pattern --convert
-German hyphenation patterns (traditional orthography)
+% dehypht-x-2014-05-21.pat
-(more info about the licence to be added later)
-
-% dehypht-x-2013-05-26.pat
-
-\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2013-05-26 (WL)}
+\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2014-05-21 (WL)}
% TeX-Trennmuster für die traditionelle deutsche Rechtschreibung
%
%
-% Copyright (C) 2008, 2009, 2011, 2012, 2013 Werner Lemberg <wl@gnu.org>
+% Copyright (C) 2008, 2009, 2011, 2012, 2013, 2014 Werner Lemberg <wl@gnu.org>
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
@@ -21,7 +17,7 @@ German hyphenation patterns (traditional orthography)
%
% The word list is available from
%
-% http://repo.or.cz/w/wortliste.git?a=commit;h=6199aa4827709d9995ac9a34ddc6551f1ba1eb6e
+% http://repo.or.cz/w/wortliste.git?a=commit;h=3a97953c0ddd099a1785ea7927cbf24e639090b0
%
% The used patgen parameters are
%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-es.rme b/Master/texmf-dist/tex/context/patterns/common/lang-es.rme
new file mode 100644
index 00000000000..39dffb94635
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-es.rme
@@ -0,0 +1,44 @@
+% generated by mtxrun --script pattern --convert
+
+% GUIONIZADO DE PALABRAS
+% ~~~~~~~~~~~~~~~~~~~~~
+% hyph-es.tex 4.7
+%
+% License: MIT/X11
+%
+% Copyright (c) 1993, 1997 Javier Bezos
+% Copyright (c) 2001-2015 Javier Bezos and CervanTeX
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+%
+% For further info, bug reports and comments:
+%
+% http://www.tex-tipografia.com/spanish_hyphen.html
+%
+% I would like to thanks Francesc Carmona for his permission
+% to steal parts of his work without restrictions. For his
+% patterns, (c) by Francesc Carmona
+%
+% 2015-11-12
+%
+% _____________________________________________________________
+% Javier Bezos | http://www.cervantex.es/
+% .............................................................
+% TeX y tipografia | http://www.tex-tipografia.com/
+
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-et.rme b/Master/texmf-dist/tex/context/patterns/common/lang-et.rme
new file mode 100644
index 00000000000..ef916a03798
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-et.rme
@@ -0,0 +1,47 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+%
+% Source: eehyph.tex (2015-12-22)
+% Author: Een Saar <saar at aai dot ee>
+%------------------------------------------------------------------------------
+% Estonian hyphenation patterns (T1 encoding).
+% Copyright (c) 2004-2015 Enn Saar <saar at aai dot ee>
+%
+% The Estonian pattern data is dual-licensed under the MIT License or
+% the LaTeX Project Public License Version 1.3 or later at your discretion.
+%
+% MIT License (https://opensource.org/licenses/MIT):
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+% THE SOFTWARE.
+%
+% LaTeX Project Public License:
+%
+% The latest version this license is in http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+% This work consists of this file only.
+%
+% The patterns were generated long ago by applying patgen to
+% an Estonian dictionary; a few patterns were added later manually
+% to prohibit aa-bits type cases.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-eu.rme b/Master/texmf-dist/tex/context/patterns/common/lang-eu.rme
new file mode 100644
index 00000000000..8eeb0e00b32
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-eu.rme
@@ -0,0 +1,59 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright (c) Juan M. Aguirregabiria 1997, 2008
+% title: Hyphenation patterns for Basque.
+% version: June 2008
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information on the package,
+% and http://tp.lc.ehu.es/jma/basque.html for details on Basque hyphenation.
+% license: >
+% Permission is hereby granted, free of charge, to any person obtaining
+% a copy of this file and any associated documentation
+% (the "Data Files") to deal in the Data Files
+% without restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, and/or sell copies of
+% the Data Files, and to permit persons to whom the Data Files
+% are furnished to do so, provided that
+% (a) this copyright and permission notice appear with all copies
+% of the Data Files,
+% (b) this copyright and permission notice appear in associated
+% documentation, and
+% (c) there is clear notice in each modified Data File
+% as well as in the documentation associated with the Data File(s)
+% that the data has been modified.
+%
+% THE DATA FILES ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+% ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+% WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+% IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+% NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+% DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+% DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+% TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+% PERFORMANCE OF THE DATA FILES.
+%
+% Except as contained in this notice, the name of a copyright holder
+% shall not be used in advertising or otherwise to promote the sale,
+% use or other dealings in these Data Files without prior
+% written authorization of the copyright holder.
+% changes:
+% - >
+% February 1997 Patterns created by Juan M. Aguirregabiria, based on the
+% shyphen.sh script for Spanish by Julio Sanchez, September 1991.
+% - >
+% June 2008 Generating script rewritten in Ruby and adapted for native
+% UTF-8 TeX engines, patterns renamed from bahyph.tex to
+% hyph-eu.tex and added to the hyph-utf8 package. Functionality should
+% not change apart from adding ñ by default.
+% ==========================================
+%
+% Open vowels: a e o
+% Closed vowels: i u
+% Consonants: b c d f g j k l m n ñ p q r s t v w x y z
+%
+% Some of the patterns below represent combinations that never
+% happen in Basque. Would they happen, they would be hyphenated
+% according to the rules.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-fi.rme b/Master/texmf-dist/tex/context/patterns/common/lang-fi.rme
new file mode 100644
index 00000000000..58acc4b9baa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-fi.rme
@@ -0,0 +1,24 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from fihyph.tex, whose
+% author has been identified as Kauko Saarinen. The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% -----> Finnish hyphenation patterns for MLPCTeX <------
+% First release January -86 by Kauko Saarinen,
+% Computing Centre, University of Jyvaskyla, Finland
+%
+% Completely rewritten January -88. The new patterns make
+% much less mistakes with foreign and compound words.
+% The article "Automatic Hyphenation of Finnish"
+% by Professor Fred Karlsson is also referred
+% ---------------------------------------------------------
+%
+% 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added.
+% 9th January - 95: added \uccode and \lccode by Thomas Esser
+%
+% ********* Patterns may be freely distributed **********
+%
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-fr.rme b/Master/texmf-dist/tex/context/patterns/common/lang-fr.rme
new file mode 100644
index 00000000000..2ee36d062e9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-fr.rme
@@ -0,0 +1,47 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Daniel Flipo, Bernard Gaulle 1994-2002
+% title: French hyphenation patterns
+% version: V2.12 2002/12/11
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% name: MIT
+% url: https://opensource.org/licenses/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person obtaining
+% a copy of this software and associated documentation files (the
+% "Software"), to deal in the Software without restriction, including
+% without limitation the rights to use, copy, modify, merge, publish,
+% distribute, sublicense, and/or sell copies of the Software, and to
+% permit persons to whom the Software is furnished to do so, subject to
+% the following conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+% BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+% ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+% SOFTWARE.
+% ==========================================
+%%%%%%%% The most famous good guys who worked hard to obtain something usable.
+% Jacques Desarmenien, Universite de Strasbourg :
+% - << how to run TeX in a French environment: hyphenation, fonts,
+% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
+% - << La division par ordinateur des mots francais :
+% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
+% Gauthier-Villars
+% Norman Buckle, UQAH (nb; many additions)
+% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
+% Justin Bur, Universite de Montreal (jbb; checked against original list)
+% all patterns including apostrophe missing from nb list
+% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
+% did their best effort to improve the list of patterns.
+%
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.rme b/Master/texmf-dist/tex/context/patterns/common/lang-gb.rme
index 40b787800f6..222dfc969da 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-gb.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Hyphenation patterns for British English
-
-(more info about the licence to be added later)
-
% This file has been renamed from ukhyphen.tex to hyph-en-gb.tex in June 2008
% for consistency with other files with hyphenation patterns in hyph-utf8 package.
% No other changes made. See http://www.tug.org/tex-hyphen for more details.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-hr.rme b/Master/texmf-dist/tex/context/patterns/common/lang-hr.rme
new file mode 100644
index 00000000000..5b98b319729
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-hr.rme
@@ -0,0 +1,53 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright (C) 1994, 1996, 2011, 2015 Igor Marinović
+% title: Hyphenation patterns for Croatian language
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+%
+% license:
+% - This file is available under any of these licences:
+% -
+% name: LPPL
+% version: 1
+% or_later: true
+% url: http://www.latex-project.org/lppl/lppl-1-0.html
+% -
+% text: >
+% Permission is hereby granted, free of charge, to any person obtaining
+% a copy of this file and any associated documentation
+% (the "Data Files") to deal in the Data Files
+% without restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, and/or sell copies of
+% the Data Files, and to permit persons to whom the Data Files
+% are furnished to do so, provided that
+% (a) this copyright and permission notice appear with all copies
+% of the Data Files,
+% (b) this copyright and permission notice appear in associated
+% documentation, and
+% (c) there is clear notice in each modified Data File
+% as well as in the documentation associated with the Data File(s)
+% that the data has been modified.
+%
+% THE DATA FILES ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+% ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+% WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+% IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+% NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+% DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+% DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+% TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+% PERFORMANCE OF THE DATA FILES.
+%
+% Except as contained in this notice, the name of a copyright holder
+% shall not be used in advertising or otherwise to promote the sale,
+% use or other dealings in these Data Files without prior
+% written authorization of the copyright holder.
+% changes:
+% - Late 1994 first version
+% - Beginning of 1996 much more improved version (date of last change: 19.03.1996).
+% - In summer 2008 patterns incorporated into hyph-utf8 and renamed from hrhyph.tex to hyph-hr.tex.
+% - 06.06.2011 LPPL licence added.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.rme b/Master/texmf-dist/tex/context/patterns/common/lang-hu.rme
index 49247877c61..d4055e743c4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-hu.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Hungarian hyphenation patterns (v20110815)
-
-(more info about the licence to be added later)
-
% from https://github.com/nagybence/huhyphn/
% ------------------------------------------
% Huhyphn - hungarian hyphenation patterns v20110815
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-is.rme b/Master/texmf-dist/tex/context/patterns/common/lang-is.rme
new file mode 100644
index 00000000000..cd570a0c510
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-is.rme
@@ -0,0 +1,26 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from icehyph.tex,
+% whose author has been identified as Jorgen Pind <jorgen at lexis.hi.is>
+% (2004-03-08). The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% The Icelandic Plain TeX hyphenation tables
+% as of Nov 2 1988.
+% Jorgen Pind, Institute of Lexicography, Univ. of Iceland
+% jorgen@lexis.hi.is (Internet)
+%
+% Mar 2 2004: Uploaded a new version to CTAN, with a clarified license
+% statement, at the request of the author, Jorgen Pind.
+% Kristinn Gylfason (kristgy@ieee.org)
+
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.rme b/Master/texmf-dist/tex/context/patterns/common/lang-it.rme
index 2a2fb60d567..d5111a609b9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-it.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Italian hyphenation patterns
-
-(more info about the licence to be added later)
-
% hyph-it.tex
%
% Italian hyphenation patterns
@@ -41,7 +37,7 @@ Italian hyphenation patterns
% liability is disclaimed.
%
% ChangeLog:
-% - 2014-04-22 - Add few pattherns involving `h'
+% - 2014-04-22 - Add few patterns involving `h'
% - 2011-08-16 - Change the licence from GNU LGPL into LPPL v1.3.
% - 2010-05-24 - Fix for Italian patterns for proper hyphenation of -ich and Ljubljana.
% - 2008-06-09 - Import of original ithyph.tex into hyph-utf8 package.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-la.rme b/Master/texmf-dist/tex/context/patterns/common/lang-la.rme
new file mode 100644
index 00000000000..9929f463e45
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-la.rme
@@ -0,0 +1,108 @@
+% generated by mtxrun --script pattern --convert
+
+%
+% ********** hyph-la.tex *************
+%
+% Copyright 1999-2014 Claudio Beccari
+% [latin hyphenation patterns]
+%
+% -----------------------------------------------------------------
+% IMPORTANT NOTICE:
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+% -----------------------------------------------------------------
+%
+% Patterns for the latin language mainly in modern spelling
+% (u when u is needed and v when v is needed); medieval spelling
+% with the ligatures \ae and \oe and the (uncial) lowercase `v'
+% written as a `u' is also supported; apparently there is no conflict
+% between the patterns of modern Latin and those of medieval Latin.
+%
+%
+% Prepared by Claudio Beccari
+% Politecnico di Torino
+% Torino, Italy
+% e-mail claudio dot beccari at gmail.com
+%
+% \versionnumber{3.2a} \versiondate{2014/06/04}
+%
+% For more information please read the babel-latin documentation.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% For documentation see:
+% C. Beccari, "Computer aided hyphenation for Italian and Modern
+% Latin", TUG vol. 13, n. 1, pp. 23-33 (1992)
+%
+% see also
+%
+% C. Beccari, "Typesetting of ancient languages",
+% TUG vol.15, n.1, pp. 9-16 (1994)
+%
+% In the former paper the code was described as being contained in file
+% ITALAT.TEX; this is substantially the same code, but the file has been
+% renamed and included in hyph-utf8.
+%
+% A corresponding file (ITHYPH.TEX) has been extracted in order to eliminate
+% the (few) patterns specific to Latin and leave those specific to Italian;
+% ITHYPH.TEX has been further extended with many new patterns in order to
+% cope with the many neologisms and technical terms with foreign roots.
+%
+% Should you find any word that gets hyphenated in a wrong way, please, AFTER
+% CHECKING ON A RELIABLE MODERN DICTIONARY, report to the author, preferably
+% by e-mail. Please do not report about wrong break points concerning
+% prefixes and/or suffixes; see at the bottom of this file.
+%
+% Compared with the previous versions, this file has been extended so as to
+% cope also with the medieval Latin spelling, where the letter `V' played the
+% roles of both `U' and `V', as in the Roman times, save that the Romans used
+% only capitals. In the middle ages the availability of soft writing supports
+% and the necessity of copying books with a reasonable speed, several scripts
+% evolved in (practically) all of which there was a lower case alphabet
+% different from the upper case one, and where the lower case `v' had the
+% rounded shape of our modern lower case `u', and where the Latin diphthongs
+% `AE' and `OE', both in upper and lower case, where written as ligatures,
+% not to mention the habit of substituting them with their sound, that is a
+% simple `E'.
+%
+% According to Leon Battista Alberti, who in 1466 wrote a book on
+% cryptography where he thoroughly analyzed the hyphenation of the Latin
+% language of his (still medieval) times, the differences from the Tuscan
+% language (the Italian language, as it was named at his time) were very
+% limited, in particular for what concerns the handling of the ascending and
+% descending diphthongs; in Central and Northern Europe, and later on in
+% North America, the Scholars perceived the above diphthongs as made of two
+% distinct vowels; the hyphenation of medieval Latin, therefore, was quite
+% different in the northern countries compared to the southern ones, at least
+% for what concerns these diphthongs. If you need hyphenation patterns for
+% medieval Latin that suite you better according to the habits of Northern
+% Europe you should resort to the hyphenation patterns prepared by Yannis
+% Haralambous (TUGboat, vol.13 n.4 (1992)).
+%
+%
+%
+% PREFIXES AND SUFFIXES
+%
+% For what concerns prefixes and suffixes, the latter are generally separated
+% according to "natural" syllabification, while the former are generally
+% divided etimologically. In order to avoid an excessive number of patterns,
+% care has been paid to some prefixes, especially "ex", "trans", "circum",
+% "prae", but this set of patterns is NOT capable of separating the prefixes
+% in all circumstances.
+%
+% BABEL SHORTCUTS AND FACILITIES
+%
+% Read the documentation coming with the discription of the Latin language
+% interface of Babel in order to see the shortcuts and the facilities
+% introduced in order to facilitate the insertion of "compound word marks"
+% which are very useful for inserting etimological break points.
+%
+% Happy Latin and multilingual typesetting!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \message{Latin Hyphenation Patterns Version 3.2a <2014/06/04>}
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.rme b/Master/texmf-dist/tex/context/patterns/common/lang-lt.rme
index e20c6886e05..bb4e084d7eb 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lt.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-lt.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Lithuanian hyphenation patterns
-
-(more info about the licence to be added later)
-
% This file is part of hyph-utf8 package and resulted from
% semi-manual conversions of hyphenation patterns into UTF-8
% in October 2008 by Mojca & Arthur.
@@ -18,7 +14,7 @@ Lithuanian hyphenation patterns
% - Yannis Haralambous
% (Vilnius, March 4, 1992)
% Conversion into Latin 7 and aditional support files (babel, fonts):
-% - Sigitas Tolusis <sigitas at vtex.lt>
+% - Sigitas Tolušis <sigitas at vtex.lt>
% (2002-11-20)
% Adaptation for hyph-utf8:
% - Mojca & Arthur (see below), October 2008
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lv.rme b/Master/texmf-dist/tex/context/patterns/common/lang-lv.rme
index a473a582ace..a07ecb997f6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lv.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-lv.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Latvian hyphenation patterns
-
-(more info about the licence to be added later)
-
% This file is part if hyph-utf8 package and resulted from semi-manual
% conversions of hyphenation patterns into UTF-8 in November 2008 by Mojca &
% Arthur.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-ml.rme b/Master/texmf-dist/tex/context/patterns/common/lang-ml.rme
new file mode 100644
index 00000000000..687df564470
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-ml.rme
@@ -0,0 +1,28 @@
+% generated by mtxrun --script pattern --convert
+
+% These patterns originate from
+% https://github.com/santhoshtr/hyphenation/)
+% and have been adapted for hyph-utf8 (for use in TeX).
+%
+% Hyphenation for Malayalam
+% Copyright (C) 2016 Santhosh Thottingal (santhosh dot thottingal at gmail dot com)
+%
+% Permission is hereby granted, free of charge, to any person obtaining
+% a copy of this software and associated documentation files (the
+% "Software"), to deal in the Software without restriction, including
+% without limitation the rights to use, copy, modify, merge, publish,
+% distribute, sublicense, and/or sell copies of the Software, and to
+% permit persons to whom the Software is furnished to do so, subject to
+% the following conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-mn.rme b/Master/texmf-dist/tex/context/patterns/common/lang-mn.rme
new file mode 100644
index 00000000000..cd95a72b934
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-mn.rme
@@ -0,0 +1,53 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright 2007-2015 by Dorjgotov Batmunkh, National University of Mongolia
+% title: Hyphenation patterns for Mongolian language
+% version: v1.2 2008/03/23
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% - This file is available under any of the following licenses:
+% -
+% name: LPPL
+% version: 1.3
+% or_later: true
+% url: http://www.latex-project.org/lppl/lppl-1-3.txt
+% -
+% name: MIT
+% url: https://opensource.org/licenses/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+% THE SOFTWARE.
+% changes:
+% - 2008/03/23 v1.2
+% - 2008/06/08 Patterns added to hyph-utf8
+% - 2015/12/05 Patterns released under the MIT license
+% ==========================================
+% Special thanks to: Jim Hefferon and Robin Fairbairns
+%
+% There are few basic rules in mongolian
+%
+% 1. If there is a consonant then it can use hyphen before it.
+% And if there're two consonants then it can use hyphen before second consonant.
+% Are there three consonants then it can put hyphen before third consonant,
+% also are there four consonants then it can use hyphen before fourth consonant.
+% 2. In the case of hardsign or softsign, it's possible to hyphen after these signs.
+% For instance, байгуулъ-я, үзүүль-е
+% 3. However one vowel can be belong to a syllable, it's not possible to use hyphen.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.rme b/Master/texmf-dist/tex/context/patterns/common/lang-nb.rme
index db6d41859ad..5b955af53a9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-nb.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Norwegian Bokmal hyphenation patterns
-
-(more info about the licence to be added later)
-
% Adapted to the new pattern-loading scheme.
% Original file name was nbhyph.tex
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-nl.rme b/Master/texmf-dist/tex/context/patterns/common/lang-nl.rme
new file mode 100644
index 00000000000..b8b8b0ff699
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-nl.rme
@@ -0,0 +1,45 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from nehyph96.tex,
+% whose author has been identified as Piet Tutelaers. The licence terms are
+% unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% PURPOSE: 8-bit hyphenation patterns for TeX based upon the new Dutch
+% spelling, officially since 1 August 1996. These patterns follow
+% the new hyphenation rules in the `Woordenlijst Nederlandse
+% Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene
+% Boekje') described in section 5.2 (Het afbreekteken).
+%
+% The main differences with our earlier patterns based upon the
+% CELEX dictionary are:
+% (1) provide 8-bit patterns based upon the T1 character encoding
+% (the encoding for DC/EC compatible TeX fonts)
+% (2) don't hyphenate if this results in a syllable of one letter
+% before or after the hyphen (hence hyphens in a-drenaline,
+% studi-o, mensa-pen and vide-oachtig are invalid)
+% (3) handle words derived from other languages (`bastaard
+% woorden') according to the new rules
+%
+% Like the CELEX patterns these patterns don't hyphenate:
+% (4) in a changing syllable (menuutje can not be hyphenated as
+% menu-tje)
+% (5) in words that have different hyphenations according to
+% there meaning (buur-tje/buurt-je)
+%
+% COPYRIGHT (C) 1996: Piet Tutelaers
+%
+% -----------------------------------------------------------------
+% IMPORTANT NOTICE:
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+% -----------------------------------------------------------------
+% VERSION: 1.1 (November 1996) Copyright changed March 2000
+%
+% AUTHOR: Piet Tutelaers P.T.H.Tutelaers@tue.nl
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.rme b/Master/texmf-dist/tex/context/patterns/common/lang-nn.rme
index cdb8fee4371..0974004ae4d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-nn.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Norwegian Nynorsk hyphenation patterns
-
-(more info about the licence to be added later)
-
% Adapted to the new pattern-loading scheme.
% Original file name was nnhyph.tex
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-pl.rme b/Master/texmf-dist/tex/context/patterns/common/lang-pl.rme
new file mode 100644
index 00000000000..815b3df4ea9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-pl.rme
@@ -0,0 +1,36 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from plhyph.tex, whose
+% authors have been identified as Hanna Kołodziejska, Bogusław Jackowski, Marek
+% Ryćko (1995-06-26). The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% This is PLHYPH.TeX - the Polish hyphenation patterns
+% version 3.0a, Wednesday, May 17th, 1995
+% to be used for the inclusion of Polish hyphenation patterns in any format,
+% not necessarily in the MeX or LaMeX ones. The patterns are exactly
+% the same as in the version 3.0 being the part of the MeX package,
+% only the surrounding of the \pattern command is changed. The authors
+% claim the upward compatibility, i.e., the version 3.0a can also be used
+% with the MeX or LaMeX formats.
+
+% The history of development of the Polish hyphenation patterns:
+%
+% The first version of the patterns was developed
+% by Hanna Kołodziejska (1987).
+%
+% The adaptation to the LeX format (see below) and extensive modification
+% were done by Bogusław Jackowski & Marek Ryćko (1987--1989).
+%
+% The hyphenation rules were further improved and adapted to the
+% TeX 3.x requirements by Hanna Kołodziejska (1991).
+%
+% Lone-standing version (3.0a) of patterns was prepared (under pressure
+% from LaTeX users) by Bogusław Jackowski and Marek Ryćko, following
+% Mariusz Olko's suggestions, 1995.
+
+% The LeX format mentioned above was the first version of the adaptation
+% of TeX to the Polish language. The next version is called MeX.
+
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-pt.rme b/Master/texmf-dist/tex/context/patterns/common/lang-pt.rme
new file mode 100644
index 00000000000..b74ab3637d0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-pt.rme
@@ -0,0 +1,58 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from pthyph.tex
+% (Version 1.2, 1996-07-21), whose authors have been identified as Pedro J. de
+% Rezende <rezende at dcc.unicamp.br> and J.Joao Dias Almeida <jj at
+% di.uminho.pt>. The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+% ---------------------------------------------------------------------
+% BSD 3-Clause License (https://opensource.org/licenses/BSD-3-Clause):
+%
+% Copyright (c) 1987, Pedro J. de Rezende (rezende@ic.unicamp.br) and J.Joao Dias Almeida (jj@di.uminho.pt)
+%
+% All rights reserved.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+% * Redistributions of source code must retain the above copyright
+% notice, this list of conditions and the following disclaimer.
+% * Redistributions in binary form must reproduce the above copyright
+% notice, this list of conditions and the following disclaimer in the
+% documentation and/or other materials provided with the distribution.
+% * Neither the name of the University of Campinas, of the University of
+% Minho nor the names of its contributors may be used to endorse or
+% promote products derived from this software without specific prior
+% written permission.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+% DISCLAIMED. IN NO EVENT SHALL PEDRO J. DE REZENDE OR J.JOAO DIAS ALMEIDA BE
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+% GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+% HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+% OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The Portuguese TeX hyphenation table.
+% (C) 2015 by Pedro J. de Rezende (rezende@ic.unicamp.br)
+% and J.Joao Dias Almeida (jj@di.uminho.pt)
+% Version: 1.3 Release date: 12/08/2015
+%
+% (C) 1996 by Pedro J. de Rezende (rezende@ic.unicamp.br)
+% and J.Joao Dias Almeida (jj@di.uminho.pt)
+% Version: 1.2 Release date: 07/21/1996
+%
+% (C) 1994 by Pedro J. de Rezende (rezende@ic.unicamp.br)
+% Version: 1.1 Release date: 04/12/1994
+%
+% (C) 1987 by Pedro J. de Rezende
+% Version: 1.0 Release date: 02/13/1987
+%
+% -----------------------------------------------------------------
+% Remember! If you *must* change it, then call the resulting file
+% something else and attach your name to your *documented* changes.
+% =================================================================
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-ro.rme b/Master/texmf-dist/tex/context/patterns/common/lang-ro.rme
new file mode 100644
index 00000000000..0b4e45a8362
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-ro.rme
@@ -0,0 +1,57 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 package from rohyphen.tex,
+% whose author has been identified as Adrian Rezus <adriaan at {sci,cs}.kun.nl>
+% (1996-11-11). The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ROHYPHEN.TEX, version 1.1 <29.10.1996> R [7.11.1996] %%
+%% (C) 1995-1996 Adrian Rezus [adriaan@{sci,cs}.kun.nl] %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Romanian TeX hyphenation table: NFSS 2 encoding, medium.
+%% Contents: 647 Romanian hyphen patterns, with diacritics.
+%%
+%% This file is part of the Romanian TeX system.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Romanian TeX, version 1.3R <29.10.1996> %%
+%% (C) 1994-1996 Adrian Rezus %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% History:
+%% ROHYPHEN.TEX 1.0 <10.02.1995>: Plain TeX and LaTeX 2.09.
+%% ROHYPHEN.TEX 1.1 <29.10.1996>: Plain TeX and LaTeX2e.
+%
+% -------------------------------------------------------------------
+
+% TODO: fix the notice below - it only holds for the old patterns
+
+% NB This file must be used in conjunction with either one of
+%
+% (1) ROMANIAN.TEX v1.2(R) [1994-1995] [(La)TeX] or
+% (2) ROMANIAN.STY v1.3R [1996] [(La)TeX(2e)]
+%
+% NB Romanian has LR-HYPHEN-MINs [2 2] (like German)!
+% NB Romanian has STRUCTURAL HYPHEN-AMBIGUA:
+% i.e., words that canNOT be hyphenated correctly without
+% additional (e.g., semantic, stress-mark) information.
+% --------------------------------------------------------
+% The Romanian TeX encoding of the Romanian diacritics:
+% --------------------------------------------------------
+% Romanian TeX DQ-macro encodings = (La)TeX macros
+% --------------------------------------------------------
+% ă = \u{a} [-] \u{A} [not encoded]
+% â = \^{a} [-] \^{A} [not encoded]
+% î = \^{\i} "I = \^{I}
+% ș = \c{s} "S = \c{S}
+% ț = \c{t} "T = \c{T}
+% -------------------------------------------------------------
+% NB Romanian \^{a} behaves like \^{\i} as regards hyphenation.
+% NB The capital \u{A} and \^{A} are rare in script; as such,
+% they occur only in records of the Romanian substandard.
+% -------------------------------------------------------------------
+%
+% original patterns generated by PatGen2-output hyphen-level 9: do NOT modify the list by hand!
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-ru.rme b/Master/texmf-dist/tex/context/patterns/common/lang-ru.rme
new file mode 100644
index 00000000000..33ca915e7da
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-ru.rme
@@ -0,0 +1,24 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from various files
+% [FIXME document] whose author has been identified as Alexander I. Lebedev
+% <swan at scon155.phys.msu.su> (2003-03-10). The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% Russian hyphenation patterns, version 2003/03/10
+% Copyright 1999-2003 Alexander I. Lebedev <swan@scon155.phys.msu.su>
+%
+% This program may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.2 or any later
+% version.
+%
+% Patterns were generated with patgen from a 990,000-word list and then
+% manually corrected.
+%
+% The program consists of the files ruhyphal.tex, cyryoal.tex and two
+% document files README.ruhyphal and hyphen.rules. The file cyryoal.tex
+% can be regenerated using mkcyryo script (a part of ruhyphen package)
+% and the latest release of rus-ispell dictionaries
+% <ftp://scon155.phys.msu.su/pub/russian/ispell/>.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-sk.rme b/Master/texmf-dist/tex/context/patterns/common/lang-sk.rme
new file mode 100644
index 00000000000..c7653e43d79
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-sk.rme
@@ -0,0 +1,30 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from
+% skhyphen.tex and skhyphen.ex, whose author has been identified as Jana
+% Chlebíková <chlebikj at dcs.fmph.uniba.sk>. The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% Slovak hyphenation (version 2.0) 24.4.1992
+% Autor: Jana Chlebíková, department of Informatics Education,
+% Comenius University, 842 15 Bratislava, Slovakia
+% <chlebikj@dcs.fmph.uniba.sk>
+%
+% This is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This file is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+%%% --------------------------------------------------------------------
+% \message {Loading SK hyphenation patterns: Jana Chlebikova, 1992}
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-sl.rme b/Master/texmf-dist/tex/context/patterns/common/lang-sl.rme
new file mode 100644
index 00000000000..2c59b7ce436
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-sl.rme
@@ -0,0 +1,57 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO)
+% title: Slovenian hyphenation patterns
+% version: 2007-01-29
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% - This file is available under any of these licences:
+% -
+% name: LPPL
+% version: 1
+% or_later: true
+% url: http://www.latex-project.org/lppl/lppl-1-0.html
+% -
+% name: MIT
+% url: https://opensource.org/licences/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person
+% obtaining a copy of this software and associated documentation
+% files (the "Software"), to deal in the Software without
+% restriction, including without limitation the rights to use,
+% copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the
+% Software is furnished to do so, subject to the following
+% conditions:
+%
+% The above copyright notice and this permission notice shall be
+% included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+% changes:
+% - 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX)
+%
+% - >
+% Some cosmetic changes done later on, but none of these apply any more;
+% the patterns are still the same as they were originally:
+% - 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah)
+% - 1995-04-06 Release of `sihyph21.tex'
+% - 1995-06-20 >
+% Added \slovenehyphenmins
+% Release of `sihyph22.tex'
+% - 1997-15-04 >
+% Some changes concerning "c, "s, "z and ...
+% Release of `sihyph23.tex'
+% - 2007-01-20 >
+% `sihyph23.tex' renamed to `slhyph.tex'
+% (sl is the proper language code for Slovenian)
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-sr.rme b/Master/texmf-dist/tex/context/patterns/common/lang-sr.rme
new file mode 100644
index 00000000000..1826488acdc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-sr.rme
@@ -0,0 +1,27 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from srhyphc.tex,
+% whose authors have been identified as Aleksandar Jelenak <ajelenak AT
+% yahoo.com>, Dejan Muhamedagić (2003-06-09). The licence terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian
+% language in the Cyrillic alphabet. TeX font encoding is T2A.
+%
+% This file is distributed under the terms of the GNU General Public License.
+% Latest version of the license is at <http://www.gnu.org/copyleft/gpl.html>.
+%
+% Version: 1.0a
+% Last change: 2003-06-09
+%
+% Credits:
+% - Initial hyphenation patterns for T1 font encoding by Dejan Muhamedagić
+% - Improvements and adaptation to T2A font encoding by Strahinja Radić
+% - Further improvements and integration into one file by Aleksandar Jelenak
+%
+% Current maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+%
+% \message{Serbian Cyrillic Hyphenation Patterns `srhyphc.tex' v1.0a <2003-06-09>}
+%
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-sv.rme b/Master/texmf-dist/tex/context/patterns/common/lang-sv.rme
new file mode 100644
index 00000000000..e1cab58cdbe
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-sv.rme
@@ -0,0 +1,59 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from sehyph.tex, whose
+% author has been identified as Jan Michael Rynning (2003-09-08). The licence
+% terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% Swedish hyphenation patterns.
+%
+% Copyright 1994 by Jan Michael Rynning. All rights reserved.
+% This program may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.2 of this license or
+% (at your option) any later version. The latest version of this license
+% is in http://www.latex-project.org/lppl.txt and version 1.2 or later is
+% part of all distributions of LaTeX version 1999/12/01 or later.
+%
+% Last update: 1994-03-03 (March 3, 1994).
+% Revision history:
+% 1991-01-08: First version available for anonymous FTP.
+% 1991-08-08: Changed \aa to \aa0 at end of line, to stop TeX from
+% concatenating the patterns.
+% 1991-09-03: Cleaned up lots of inconsistencies in the dictionary.
+% As a consequence, the patterns shrunk a lot. Also
+% added some 4000 one-syllable words, some of which were
+% hyphenated by the old patterns, and some 1500 compound
+% words, about half of which were incorrectly hyphenated
+% by the old patterns.
+% 1991-11-01: Added another some 6200 compound words, all of which were
+% incorrectly hyphenated by the old patterns.
+% 1991-11-13: Added another some 6500 compound words, all of which were
+% incorrectly hyphenated by the old patterns.
+% 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts.
+% 1994-03-03: The hyphenated dictionary now contains about 118,000 words.
+% The hyphenation now works much better for compound words.
+% Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4.
+%
+% This file contains Swedish hyphenation patterns for TeX. It assumes
+% that you have fonts with the Swedish letters in the positions where
+% they occur in ISO Latin 1 (ISO 8859/1):
+% Letter: \AA \"A \"O \'E \aa \"a \"o \'e
+% Position: "C5 "C4 "D6 "C9 "E5 "E4 "F6 "E9
+%
+% Load this file into initex after plain.tex (or lplain.tex, splain.tex,
+% or whatever).
+%
+% The patterns were generated in such a way that they will hyphenate
+% correctly if \lefthyphenmin>=1 and \righthyphenmin>=2.
+%
+% These hyphenation patterns work quite well for simple words, but not
+% quite as well for compound words. I'm working on improving the quality,
+% by adding more words. If you know any Swedish words which are not
+% correctly hypheneted using these patterns, or if you have questions or
+% comments, please contact me:
+%
+% Jan Michael Rynning <jmr@incolumitas.se>
+% --------------------------------------------------------------------------
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-th.rme b/Master/texmf-dist/tex/context/patterns/common/lang-th.rme
index 8e61b9468cb..306a3d9721d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-th.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-th.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Thai hyphenation patterns
-
-(more info about the licence to be added later)
-
% Thai hyphenation patterns
%
% Copyright 2012-2013 Theppitak Karoonboonyanan <theppitak at gmail.com>
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-tk.rme b/Master/texmf-dist/tex/context/patterns/common/lang-tk.rme
new file mode 100644
index 00000000000..5dd107e401c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-tk.rme
@@ -0,0 +1,30 @@
+% generated by mtxrun --script pattern --convert
+
+% copyright: Copyright (c) 2010-2015 Nazar Annagurban
+% title: Hyphenation patterns for Turkmen language
+% version: 0.1 16 March 2010
+% notice: >
+% This file is part of the hyph-utf8 package.
+% See http://www.hyphenation.org for more information.
+% license:
+% name: MIT
+% url: https://opensource.org/licenses/MIT
+% text: >
+% Permission is hereby granted, free of charge, to any person obtaining a copy
+% of this software and associated documentation files (the "Software"), to deal
+% in the Software without restriction, including without limitation the rights
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+% copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in
+% all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+% THE SOFTWARE.
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.rme b/Master/texmf-dist/tex/context/patterns/common/lang-tr.rme
index ef8eed5f1d7..6f451214b2e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-tr.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Turkish hyphenation patterns
-
-(more info about the licence to be added later)
-
% hyph-tr.tex
%
% Turkish hyphenation patterns
@@ -26,7 +22,7 @@ Turkish hyphenation patterns
% - script written by Mojca Miklavec <mojca.miklavec.lists at gmail.com> in June 2008
%
% See also:
-% - http://www.ctan.org/tex-archive/language/turkish/hyphen/turk_hyf.c
+% - http://mirror.ctan.org/language/turkish/hyphen/turk_hyf.c
% - http://www.tug.org/TUGboat/Articles/tb09-1/tb20mackay.pdf
%
% Differences with Ottoman patterns:
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-uk.rme b/Master/texmf-dist/tex/context/patterns/common/lang-uk.rme
new file mode 100644
index 00000000000..b34fde0b77d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-uk.rme
@@ -0,0 +1,18 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project, from various files
+% [FIXME document], whose authors have been identified as Maksym Polyakov
+% <polyama at auburn.edu> and <mpoliak at i.com.ua>. The licence terms are
+% unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% Ukrainian hyphenation patterns in LCY (cp866nav) encoding.
+% Copyright 1998-2001 Maksym Polyakov.
+% Released 2001/05/10.
+% This file can be redistributed and/or modified
+% under the terms of the LaTeX Project Public License (lppl).
+% Please, send bug reports via e-mail:
+% polyama@auburn.edu
+% mpoliak@i.com.ua
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.rme b/Master/texmf-dist/tex/context/patterns/common/lang-us.rme
index c38a7463511..28ce7fec954 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.rme
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-us.rme
@@ -1,9 +1,5 @@
% generated by mtxrun --script pattern --convert
-Hyphenation patterns for American English
-
-(more info about the licence to be added later)
-
% This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008
% for consistency with other files with hyphenation patterns in hyph-utf8 package.
% No other changes made. See http://www.tug.org/tex-hyphen for more details.
diff --git a/Master/texmf-dist/tex/context/patterns/common/lang-zh.rme b/Master/texmf-dist/tex/context/patterns/common/lang-zh.rme
new file mode 100644
index 00000000000..4045ba86e7b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/common/lang-zh.rme
@@ -0,0 +1,35 @@
+% generated by mtxrun --script pattern --convert
+
+% This file has been converted for the hyph-utf8 project from pyhyph.tex, whose
+% author has been identified as Werner Lemberg <wl at gnu.org>. The licence
+% terms are unchanged.
+%
+% See http://www.hyphenation.org for details on the project.
+%------------------------------------------------------------------------------
+%
+% This is the file pyhyph.tex of the CJK package
+% for hyphenating Chinese pinyin syllables.
+%
+% created by Werner Lemberg <wl@gnu.org>
+%
+% Version 4.8.0 (22-May-2008)
+%
+% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org>
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program in doc/COPYING; if not, write to the Free
+% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+% MA 02110-1301 USA
+%
+% \message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}
+%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.rme b/Master/texmf-dist/tex/context/patterns/lang-cs.rme
deleted file mode 100644
index 77521b15a62..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.rme
+++ /dev/null
@@ -1,89 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Czech hyphenation patterns (Pavel Sevecek, v3, 1995)
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: czhyphen.tex (), czhyphen.ex ()
-% Author: Pavel Ševeček <pavel at lingea.cz>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-%%% ====================================================================
-% This is CZHYPHEN.TEX, containing czech hyphenation patterns.
-% Prepared by:
-% Pavel Ševeček
-% Lingea s.r.o., Brno, Czech Republic
-% E-mail: pavel@lingea.cz
-%
-% This is free software; you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation; either version 2 of the License, or
-% (at your option) any later version.
-%
-% This file is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this program; if not, write to the Free Software
-% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-%%% --------------------------------------------------------------------
-% \message {Czech Hyphenation Patterns (Pavel Sevecek, v3, 1995)}
-%\lefthyphenmin=2\righthyphenmin=2
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.rme b/Master/texmf-dist/tex/context/patterns/lang-cy.rme
deleted file mode 100644
index f05dfdfe483..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.rme
+++ /dev/null
@@ -1,31 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Welsh hyphenation patterns
-
-(more info about the licence to be added later)
-
-%% hyph-cy.tex, Welsh hyphenation patterns
-%% Copyright 1996 Yannis Haralambous
-%% <yannis dat haralambous at telecom-bretagne dot eu>
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.0
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work (patterns) is Yannis Haralambous.
-%
-% This work consists of the file hyph-cy.tex and is part of hyph-utf8
-% maintained by tex-hyphen team which also contains derived files.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-% CHANGES:
-% - 1996 - last change to patterns
-% - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex)
-% - June 2011 - added LPPL licence
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.rme b/Master/texmf-dist/tex/context/patterns/lang-da.rme
deleted file mode 100644
index 8bd5d67f140..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-da.rme
+++ /dev/null
@@ -1,81 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Danish hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: dkcommon.tex (yyyy-mm-dd), dkspecial.tex (yyyy-mm-dd)
-% Author: Frank Jensen <frank.jensen at hugin.com>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% This file contains the hyphenation patterns for Danish.
-%
-%% Copyright 1994 Frank Jensen (Frank.Jensen@hugin.com)
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
-% Changes:
-% - 2011-01-11 - remove support for OT1 encoding
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.lua b/Master/texmf-dist/tex/context/patterns/lang-de.lua
deleted file mode 100644
index 3dfe125f627..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-de.lua
+++ /dev/null
@@ -1,54 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="de",
- ["source"]="hyph-de-1996",
- ["texcomment"]="% German hyphenation patterns (reformed orthography)\
-% \
-% (more info about the licence to be added later)\
-% \
-% dehyphn-x-2013-05-26.pat\
-% \
-% \\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2013-05-26 (WL)}\
-% \
-% TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung\
-%\
-%\
-% Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 Werner Lemberg <wl@gnu.org>\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-%\
-%\
-% The word list is available from\
-%\
-% http://repo.or.cz/w/wortliste.git?a=commit;h=6e4755b1055a5983ccf6929793a90d2fdfa4a203\
-%\
-% The used patgen parameters are\
-%\
-% 1 1 | 2 5 | 1 1 1\
-% 2 2 | 2 5 | 1 2 1\
-% 3 3 | 2 6 | 1 1 1\
-% 4 4 | 2 6 | 1 4 1\
-% 5 5 | 2 7 | 1 1 1\
-% 6 6 | 2 7 | 1 6 1\
-% 7 7 | 2 13 | 1 4 1\
-% 8 8 | 2 13 | 1 8 1\
-% \
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü",
- ["data"]=".ab1a .abi4 .ab3l .abo2 .ab3ol .ab1or .ack2 .ag4n .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt2s .amt4sc .an3d2 .anden6k .and4ri .ang2 .an3gli .angs4 .angst3 .an3s .an4si. .ans2p .ans2t .an4tag .an3th .an3z2 .apo1 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as3t .as4ta .at4h .au3d .au4f3 .au4s3 .ausch3 .ax4 .äm3 .är6schl .ät2s .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .by4t .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .de1s .des2e .de3sk .des2t .dien4e .do2mo .do1pe .dorf1 .dü1b .dys1 .ebe2r1 .ehe1i .ei3e2 .ei4na .einen6g .ei2sp .ei4st .ei4tr .eke2 .el2bi .elb3s .em3m2 .en1 .en4d3er .en5der. .en2d3r .end3s .en2gl .enn2 .enns3 .en2t3 .en4tei .en4tr .er8brecht .erb3s .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .er8stein .erster6 .er8stritt. .er8stritten. .er4zen4 .esel4s .es1p .es3ta .es5t4e .est2h .es3to .es5tr .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fi3est .fi4le. .fi4len .fi2s .flug1 .for2t .fs4 .fu2sc .ga4t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .gene7cke .ge3r2a .ge3r2e .ge3u .gs4 .guss1 .hau2t1 .he2 .her3an .he3ri .he6r5inn .hi2s .ho4met .ia4 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4tu .li4ve. .lo4g3in .lo3ver .lus4tr .ma3d .ma3la .mal4e .ma2st .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi4t1 .mm2 .näs1c .ne4s .ni4e .nob4 .no4th .nus2 .oa3 .ob1a .obe2 .oper4 .or2a .ort2 .orts3e .os5t6alg .oste2 .ost5end .os8ten8de .oste6re .ost3r .ozo4 .öd2 .pa4r1e .par3t4h .pe4c .pes4te .pf4 .ph2 .poka2 .pro1 .ps2 .rabe4 .ra3me .ram3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .res6tr .ri2as .rich5te .ro4a .ro3m2a .rö2s1 .rü1b .rü6cker6 .sali3e .sch4 .se3ck .sen3s .ser2u .se2t1 .sha2 .si4te .ski1e .spiege8lei .st6 .sto4re .sucher6 .tage4s .tan4k3l .ta2to .te2e .te2f .te3no .te2s .te4st .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .ti5ta .to4nin .to4pl .to2w .tri3es .tro2s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .un3g .uni4t .un3s .uns4t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .wei4ta .wi4e .wor2 .wort5en6 .wor8tend .wor4tu .xe3 .ya4l .za2s .zi2e .zin4st .zwe2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas5t aata2 aa2th aa2t3r aat4s3 2a3au a1ä a1b 2aba ab4am ab1auf ab1ä ab2äu 1abd ab1eb abe1e abei1 ab1eil 2abel abe2la2 a3ber ab1er2k ab1er2r ab1er2z ab3esse 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu 1abn a2bo. ab2of 1a2bon 2a3bor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abst2 2abst. ab3ste ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby aby4t 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. a1ckar a2ckin ack2se ack3sl ack3sta4 a1cl acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ade1s ade3s2p ades4s ade5str 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3st ad3sz ad2t1 adta2 ad4te ad4tr 2adu 2a1e ae2b ae2c ae2d a2ek a2ela a2ele ae2o3 ae2p ae1r 3a2er2o1 ae2s ae4sc aes5t a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l afo1s a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r af4t5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ag3esse age4s3ti ag3gl 3aggr 3a2git 2a2gl ag6la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3s2ah ag4sam ag4set ags3p ag4spo ag3sta ag3ste ags4toc 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh ahe1s a1h2i ahin3 ahl3a2 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1os a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr6tri 2ahs ah2ta aht3h ah4t5r aht3s a1hu ah1w a1hy ai3a aian3 aid2s ai1e2 aien3 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r a2il ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e ait4 a3iv. a3ivl a3ivs a1j aje2 ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr 4akra ak3rau 3akro 2aks ak3sh 2akta ak5tan 2aktb 2aktik ak2t3r ak5t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2ala. al1ab al3abs ala5ch2 al1af ala2g al1age a3lal al1am al3ame alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala4s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr alds2t 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 2ali ali4ene ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 alks4t al2l1a2b al2l3a4r al2l1au al3lend all5erfa al3les 1allgä alli5er. alli7ers. al2lob al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al5s6terb al3sun al4tak al3tam al3tar alt3eig al4t3erf al3ti alt1op al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä 2am4e 4ame. a2meb ame2n1 amer2a am5erf a2meri ame3ru a4mesh a3met a2mew 2amf a3mi. a3mie 2a3mir a3mis ami3ta ami3ti 2amk 2aml 4amm. 2ammal am2mar am2mei am2min 2amml 2ammt ammu2 a2mö amp2fa2 am3pr 2am2s am3sa am4schl am3str 1amt. am2t1a am2t1ä am4tel 2amtem am4t3ern am4tö am2t3r am4tre am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2ana1s4 an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande2s an2dex an4drau an2d3rü and4sas and6spas and3ste and2su 2andu and1ur 2ane an3e2c a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang4s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 2anpr 1anr 1an3s2ä 1ansc ans2en an2seu 2ansk an3skr an3s1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr an3ti 2anto 1antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2apa 2ape a2pef a3pel a2pé a2pf a3p2fa a3pfl a3phä a2ph3t 2ap3l ap2n a2pot ap2pf 3appl ap3pu 2apr 3apri 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3rali 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein a4rek 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2ari ar2ia ari3e4n ari3erd ari3erg ar1im arin3it arin5s4 ar1int a3riu ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ark4tre ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar2st ar3sta ar3t2e ar2the ar3ti artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as1ala as3au a2s1ä a2sca a4schec a3schi asch1l a2schm a3schu 4as2e a2seb a2s3e2m a3s4es 4ash a3s2hi asin2g 4asis aska3s a3skop a2s1o2f as1or a2sö a2s1p as2ph as2pi as2po a3spu as3s2a as3s2e as4s3ei as3s2i as2s1p as2st ass3ti as3str as3stu 2as3ta a1s4tas as4tau as3te as2th as3ti as3to as4tof 2astr as4trau ast3räu as6t3re a2sü aswa2s 3a2syl a1ß aße2 aßen3 2a1t ata1 at1ab at2af at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb a3tec ateien4 at1eig a2teli at2en a2tep ater3s2 ate2ru at2h at3ha 4athe1 3athl 4a3ti atil4s ati2st 3atm 4atmus ato4man 4ator a2t1ort at1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si at2so at2s1p at3ta 3attac at4tak att3ang at4tau at2tä at2tei at3t4hä at2t3rä att3s a3tub atu2n a3tü atz1er at4zerk at4zerw at2z1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au2ere au5erein aue2s au2fa auf1an 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s6 4aun au3n4a aun2e au4nei au2nio au1nu a4unz au1o 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 3ausf 1ausg 1ausl au2so au2spr 1ausr 3aussag auss2e aus4se. auss2t 2auste aust2o aus5tri 1ausü 1ausz 2aut. au2t1äu 2aute au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4avi a2vr 2a1w awi3e a1x ax4am ax2e 2a1ya a1yeu ays4 aysi1 ay3t 2a1z a3z2a aza3d az2o az2u ä1a äand4 ä1b ä2b3l äb2s ä1che äche1e ä1chi äch3l ä2chr äch2sp äch4st ä1chu ä1ck ä3ck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft4s3 ä1g äge1i äge2ra äge3s ä2g3l äg2n ä2g3r äg4ra äg3str 1ä2gy äh1a 2ä3he ä3hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2ähs 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl 2äle äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 äne1s än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änk2s änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c äp4st 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l ärk2s är4ment ärm2s är1o2 ä1rö ärse2 är4si är2st ärt4e är2th ärt2s3 ä2rü är2zw ä5s4e äse3g2 äser4ei äse4ren äser2i äse3t äskop2 äskopf3 ä3s2kr ä2s1p äs6s1c äss2e äs4s3erk äs2s3t ä4s3t2 äs4tr ä3su ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ät2h ät1ob ä2t3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l ät2s1p ät2s3t ät2tei ät4tr ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äug3l 4äul 2äum äu2ma äum4s5 ä2un äun2e äu1nu 2äur 2ä3us. äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äus2s1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs4 b1a2dr 2b1af 3bah bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4l3eh bal6lerg 2b3am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en bar3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2st ba4t3ent bauer4l bauer4s bau3g bau1s bau3s2k bau3sp baus4t ba1yo 3b2ä1c b2är b2äs 4b1b b3be bben3 bbens2 bbe4p bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 bde1s 1be. 3bea be3an be3ar 3beb b2ebe 1be1c be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime b2ein be1ind be1in2h bei3sc beis2e bei1s4t beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la be2l3ö bel3sz bel3t4 1bem 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 2bentb b2enti ben5t4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss ber3na b1ernt be1rop ber3st4a be3rum ber2zö 3be1s bes2a be2s1er be3slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol best4r be3s4ze 3bet be2tap be3tha be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 2b1g2 bge3 bges4 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bien3s bie2s bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis2s1c bi2s5t b2it. b2it2a b2ite bi3ti bi2tu b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7sc 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig bling4 b4lis b2lit 3blitz b2lo b4loc b3los 2blun 3blut 3blü 2b1m 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo2c bo3ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig bor2s b1ort bor2t3r bo2sc bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra1st4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü 4b1s b2s1ad b3sand bs3ar bsat2 b3sä b4sär bs2äu b5sc bs2ca bsch2 b6schan b6schef bs4cu b3se. bse2b b3sel. bse2n1 b4s1erf bs3e4r3in bs1erk b4s1ers b3s2es bsi4t bs2ku b4sl b2s1of bso2r b2sö b3s2pi bs2pl b3s2pu bss2 bs2t bst1a2b bst3ac bst1ak bs3tät bst1er b2stip b3sto b4s4tob b4stod b3stö b4strac b2s3trä bs3treu bs4tri bst3ro b3stü b4stüb b2s1un 4b3t btast3r b5te b4th btil4 bt4r b4ts2 btü1 bu2chi bu2e3 bu2f bul2la 2b3umk bunde4s bung4 b3ungn b2urg bu3r4i 2burn bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu2s1u bü1c bügel3e 2b1v 2b1w by1 by3p bys2 2b1z2 bzeit1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t 3cam c4an ca2pe 3car car3n carri1 ca3s2a3 cas3t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen 1cer cere3 ce3s2h 1cet 2ceta2 ce1u 1cé 2c1f c4h 4ch. 2chab ch3a2bi cha2ck 2chaf 2ch1ak ch2anb 3chanc ch1ang ch3anst 4chanz 1chao 4char. 1chara 3charta cha2sc 3chato 4chatu ch1ärm ch1äs 1châ 2chb 2chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefi 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia 2chic chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 4chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 4chre chre3s ch3rh 1chron 4chs chst3ri 2cht 2chuf 2chuh 2chum 2ch1unf 2chunt 4chü 2chv 4chw 1chy 2chz ci1c ci1es ci2s c1j c4k 4ck. ck1a 1cka. 2ckac 2ckal 2ck3an cka4r1 2ckau ck1ä 2ckb 2ckc 2ckd 1cke 4ckeff 2ckeh ck1ehe 4ck1ei 4ckense 4ckentw cke2ra ck2ere 6ckergeb ck1erh 4ckerhö 4ckerke ck2ern 2ckero 2ck1err 2ckerz 2ck1ese 2ckex 2ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 3ckis 2ckk 2ck3l 2ckm 2ck3n ck1o2 2ckp 2ck3r 4cks ck4stro 2ckt ckt2e ck3t2i 1cku 2ck1um3 2ckunt 2ck1up 2ckv 2ckw 1cky 2ckz c4l2 cle4a clet4 clo1 1clu c2m2 3co co2c co3ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cos3t co4te cô4 2cp 2c1q 1c4r2 cre2 cre4mes cry2 2cs cs2a c2si c1s4tr 4c1t cte3e c3ti2 cti4o ctur6 3cu cu2p3 cussi4 1cy 2c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho dach1s 4d3achse d1af d1ag dagi2 dah3l da1ho 3dai da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d4amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ar3s d1art 2dart. da2ru d2arw d1arz da1s dasch2 da3s2h das4t 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus3 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c 2dc d1ch dco4r 2d1d2 ddar2 d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3de1c de4ca. de2cka de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2delek 2delem 2delfm delle2 del4l3eb del4lei de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del5ster del3t4 dem2ar 2d1emp d2en. dend2 de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4sen den6s5tau den3th 2dentw de1nu 2deol de1on depi2 d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop 4der4sat der4spa der3tau der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum des1 d2es. de2sa desa4g de4sam des2äc de2seb de4seh de2sei des3elt de2sen1 de4set de2sin de2sor de2sp des3s2 dest5alt de2sto dest5rat de4stre des4tum de2su det2 deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 dga2 d2ge. dge4t1e 2d1h2 dha1s4 d2his 1di di4ab di2ad di4am 3dic di1ce di2e di3e2d die4neb di3eni di3ens. die2s3c diet3 die2th dige4s dik2a dil2s5 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion3s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ste di2ta di4teng di4t3erl di4t3erm di4t3ers di2th di4t3r dit3s di2tu di5v di3z2 2d1j 2d1k4 4d1l2 d3la d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 d1ob d2oba 2dobe dob4l d2obr 2d1o2f dole4 doll2a do2mar do5na donau1 doni1e do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 dot6h do3un d1ö dö2d dö2l1 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad drag4 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b drü5cke 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse4t d4s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pas d2spä ds2po d3spri d2spro ds2pu dss4 dst4 d4stabe d4stag ds3tauf d4s3täti d2ste d4stea d3stei d3stell d4stem d3s4tern ds2ti ds4til ds4tip ds2tu ds1ums d2sun ds2zen 2d1t dta2d d5tea d2th d4thei dt3ho dto2 d3tö dt3r dtran2 dt5s2 d3tü 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf dung4 2d1ungl dun3ke dun2kl 2dunr dun2s dunst3r 2dunt 2dunw du1o dur2 5durc 2d1url 2dursa du4schn du4schr du4schw dus3t 2düb 2d1v2 2d1w dwa2 dwest1 dy2s 2d3z2 2e1a e3a2b eab3l ea2c ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. e2alti2 eam3 eam1o ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas3s eat4e2 eater1 e3ath ea5tr eat3s2 e3at5t4 e3au2f e3aug eau1st e3ä2 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en ebens3e eben4sp ebe4rel ebert4 2ebet 2ebl eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebot2 ebö2s 2ebr eb3rei eb4ru eb2s1 eb6sche ebse2 ebs3pa eb3sta eb4stät ebs3tem ebs3t2h eb3str 2e3bu ebu2t1 2e3ca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a e1cka eck3se eck4sta 2eckt 2e1cl 2eco eco3d e3cr ec1s 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e edens1 eden4se eden4sp ede2r eder3t2 edi4al 2edip e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho ee2ck eede3 eed3s2 ee1e e1eff eef4l eef3s eeg2 e1ei ee1im eein4se eel2e ee2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere2s ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ee3s2 ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g egas3 eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4str ege1u e2glo e2glu e2gn eg3ni eg4sal eg4se4r1 eg4sto eg2th egung4 egus3 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä e1he eh4ec eh1eff eh2el ehe5na ehen6t3 1e2hep e3her ehe1ra ehe3str e1hi eh1int eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se ehls2t 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1e2c eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of ehs2 eh3sh eh3sp eh1ste 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en3 eienge4 eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 eil3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom einn2 1einna ei2n1o2 e4insa 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei4s3erw eis2pe eis4tel eis4th ei1sto ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek5tri ek2u e3k2w e1la ela4ben el3abi el2abt ela2c el3ader el1af ela2h e2l1ak el3al e2l3a2m el4ami el4amp e6landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a2r el3ari ela4s el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 elea2 ele2c 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh 1elek e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e4ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elk3s2c el3lan el3le el5le. ell3ein ell3eis el2lim el3lin ell3sp 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri elö2s el2sum 3eltern elto2 elt3r elt3s2k elts2p 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2m1ans 3emanz e3mäs em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw eme2s 1e2meti e2m1im emi5n2a em1int emi3ti 2emm emma3u em2m1ei e2mop 3empf4 em3pfl em2sa em2spr em2st em3t2 3emul 2emü e2n1a 4ena. 2ena2c en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en4ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när en4ce. en3d2ac en2dal en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1e2c e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e4n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r enost3 e3not eno2w 2e1nö en1ö2d en3sac en2sau en5sche en2seb ens2el 3ensem ensen1 en2sep en4seta en3ska en3sp ens2po enst5alt en4s3tät ens2th 2ensto e4nt ent4ag ent4ark 1entd en2teb en4terb 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü enü1st 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eo1s2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a4si er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1äs erb2e er3br erb4sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1e2ck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3el4s3 1ergol 4ergrem erg3s ergs4t e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de 4e3rie eri3e4n3 e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä 2errü ers2a ersch2 er3se ers2i er3sk er3smo er3sn er3sp er5stel er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4er3ti ert3ins erts2e 2ertür 2eru eruf4s er1u2m er1und erung4 er1uns er3uz erü4b 3erweck es3ab e3sac e2s1a2d es3ak es3anz e3s2as e4s3ato 2esb es2c es3cap e3sce esch2 e3scha e2s3ein es2el es3eva 2esf 4esh es2har es2id esi1er e2sil es3int es2ir es2kat e4ske es3kl es3ku e4sky es3l es4log 2esm es2ort e3sot es2ö 2esp e3s2pek e3spi e3s2por e3s4pra 2esr es2sau es3sc es3se 4essem ess4e3re ess3erg 2esso es2sof es2s1pa es2spu es3str es3stu estab4b es4t1ak e1star e4starb 1e2stas e1stat e1s2tec e3stel es4t3eng es4t3erh es4t3ess e1stil e2stip estmo6de est3ori e1str es4tri es3trop e1stu e1s4tü e2s1um es3ums es3w e3sy es3z e1ß eße3r2e e1t etab4 et1am 3etap et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of etons4 e2torg e3tö 2etr e4traum e6t3rec e2tres et4rig etsch3w ets2p et3su ett1a et2tab et2tad et2t3au et2tei ette4n1 et2th et2t3r et4tro ett3sz et4t1um e3tü etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2esc 2euf eu2ga eu4gent eu3g2er eugs4 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eum4sc eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu3p2 e2u3r2e 1euro eu3sp eust4 eu1sta eu1sto eu1str 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo e1w 2ewa e3wä ewä2s 2ewe e2we. ewinde3 e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey1 ey4n eys4 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p ê4t 1fa fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl fal6l5er6k fal6scha fal6schl fal6schm fal3te f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br farb3s 2f3arc 3fari farr3s f3art 2f3arz fa3s4a fa3sh f3at fa2to 2f1auf f3aug f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 fe2c f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1eis fek2ta fe2l1a fel4da fel2dr 2fe2lek fe2l1er fe2les fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fenst2 f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. f2ert f1erw fe2st fest1a fest3ei 2f1eta fe4tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ff3ar ff4art ff1au ff2e ffe2e f2f3ef ff3ei ffe1in ffe2m f2f3emi ff4en f2fex fff4 ff3li f3flu f3flü f3f4rä ff2s ffs3t 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fid2 fien3 fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni fin2s fin3sp 2f1int fi2o fi3ol fi2r fi3ra 3fis fis2a fisch3o fisch3w fis2p fi2st fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger f4lü f5lüm 2f1m2 fma2d 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er. for4st for4t3ei for2th for2t3r for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl för2s 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc f3roc 1f4ron fro2na fro2s f3rot f3ru f3rü 4f1s fs1all fs4amm f2san fs3ar f2s1as f2sauf f2saus f2saut f3sc f4sce f4schan f4schef fs4co fs1e2b f4s1ehr f2s1em f2s1ent f2s1er fse4t f4s1eta f3si f2si2d f3s2kie f2s1o2 f3span f2s1pas fs1pen f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 fs2t f2stas f4s3täti f3stei f3s4tel f3stern fs3th f2stip f3st4r f4s3tres f3stü f4s3tüte f2s1un f3sy 4f1t f4ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f4t1ent f4t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f3tö f2t3ro f2trö f3t4ru ft2s1 ftsa4g ft4sam ft3s2c ft4sche ftse4 ft4seh fts3el ft3st ft4s3tan ft4s3tä fts2ti ft4stri f2tum ft1url f3tü ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf fung4 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2sa fus2s1p fus2st fu2ß1er 3fut 1fü 2füb fü2r 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1c 2gadl 2ga2dr ga1fl ga3ge 5gai ga1k ga2ka gal2a 2g1a2lau g1amb g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2sa gas3ei ga2si ga2sor ga3sp ga4spe ga4spr gas3s gas4ta gas5tan ga4ste gas4t3el gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs5 gä4u 2g1b2 gber2 gbi2 gby4t 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is 2g1eise2 gei3sh 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2ge4lek geler3ö ge4l3ers ge4less gell2a ge3lor gel3sa gels2p gels2t gel3ste gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe gen3n gen4sam gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer g2e1s2 ges3auf ges3elt ge2s3er ge3si ges4pi ges3s2t gest2 ge3ste ge4s3ter ges3th ge3t2a 2getap ge5tr ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga4t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gie3g gi2e1i gi2el gien2e1 gie1st gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi3tu gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland 3g2laub 4g1lauf 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu 2g3luf 2glun 4glus g2lu2t g1lüg g2ly 2g1m2 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no gno1r g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s1 go3st go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs1c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 2g3rose gros6sel gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup 2grut 2g3rüc 3g4rün 4g2s1 gsa2d g4s3a2k g3sal gs3all g4salt gs3ama gs3an gs3ar g3s2c g4sca g4s3ce gsch4 g4schef g4sco g4s3cr gse2 gse3e gs2eh g3s2eil g3sel. gs3eli g3seln gsen1 gs3er gs5erk gse4t g4seta gsi2d g3sil g4s3l gso2 gsp4 g3s2pek g3spi gs4pie g4spin gs3pl g3s2por g4spru gsrat4 gsrü2 gs5s4 gs3ta g3s4tan g3s4tar g3s4tati g4s3tä g5stäm g3stel gst3ent gst3err g1steu gst2he g3stir g3sto gs3toc g4stol gs3top g4s3tor g3stö gs3tr gst4ra g3s4tras gs4trat gst5reit gst4ri gs4t5rit gs4t3ros g3stu g4stur gs3tü g4sw g3sy 2g1t g3te g3ti gti2m gt4r gt2s g3tü 1gu gu1an. gu1ant gu1as gu1c gu4d3r gu2e 2gued guet4 2g1u2f 2g1uh gu1ins gu1is 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2un4s 2gunt2 2g1url gurt3s gu2s3a guschi5 gus4ser gus2sp gus2st gu4st gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 güs3 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft4s3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal2la hal6lerf h1alp hal2st hal4t5r h1amt h2an. 2hanb h2and han2da hand3s han2kr h4ann 2hanr 2hant h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 hat5t2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau5stei hau6terk 2hauto hau2tr h1äff h1ärz hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt he3cke hed2g he3di he2e3l hee4s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1ist heit4s3 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hel4l3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä hend2s he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk henst2 hen3str hen5tr h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm he3ro he4r3o4b h1erö hert2 her3th her2z1w he1sta he2s5tr he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x4a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 2hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hiers2 hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin3s2 hin4t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2st hi1th hi3ti 2hiu 2h1j 2h1k4 2hl hl2ag hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös hl2ser hl3sku hl3slo hlst4 hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s hm3sa hms1p h2mu 2hn h2na hna2c h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stras h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hnsuch4 hn3ti hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2ch3 ho2cka ho6ckerl hock3t 2hod hoe2 ho2ef ho2fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hol3s h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho4sei ho3sl ho2sp ho4st 2hot. ho3th hotli4 2hots2 3hov 2ho2w1 h1o2x ho1y2 1h2ö hö2c hö3ck h4ör hö2s1 h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3schl hr2s1en hr2ser hr4set hr4s1in hrs3k hr4s1of hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se h3ruh hr1ums h3rü h4rüb h2ry hrz2 4hs h4s3acht h2s1a2d h4samt h2san h2sau h2s1äh h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2spel h2sper h2sph hs2por h2sprä h2spro hss2 h1sta h2staf hst3alt hst2an h2s3tau h1stec h3stein h5stell h3s4terb hst2he h1s2ti h1sto h2stor h1s4tr hst3ran h1stun h1stü h2s1u hs2ung 4h1t ht1a h2tak h3t4akt. ht2al h4talo ht3alt h4t3a2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h4tax h2t1är ht1e2c h2t1ef ht1eh hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit h2temp h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h6terneu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz hte2s h4t1ese h4t1ess hte3sta h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in hto2 h2toly h2torg h3töp h4t3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h5trec h4tref ht3reif ht3reit ht4ri h4t5rieg h4t5rin h2t3rol h2t3ros ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht2so ht2sp ht4spin ht3spri ht4stab hts2ti hts4tie ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs h3tü ht3z2 hu2b1a hu2b3ei hu2b1en hu2b3l hu4b3r hu2bu hu1c hu2h1a hu2h1i huko1 huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu2ler hu2let hu2l1in hu2lo hu3m2a h1ums hu2n h1una hung4s hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus2sp hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 hüs3 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3all ial3la ia2lor ial3t4 ia2lu ial3z2 i2am i4amo 2ian ia2nal i3and2 ian2e i3ann i2ano i3ant i3anz i2ap ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a3sp ias3s iast4 i3at. i3a4ta i4ate i3at4h 1iatr i3ats i3au ia3un 2iav 2iä i1äm i1äp iär2 i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib2bli ib1ei i2beig i2beis ibela2 ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibu2s1 2ic ic1c ice1 ich1a ich1ä i1che ich1ei i1chi i2chin ich3l i3chlo ich3m i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci i3cke ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p id3str idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g5l ie3g4n ie2g3r ie3g4ra ieg4s3c ieg4st i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä i3en3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm i3enn i3e2no i3enö i3enp i3enr ien2s ien3sc ien3s2e ien3si iens2k iens6t5er iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k2 i1ern i3ern. i2er5ni ie2rö ier4seh iers2t ier3sta ier3ste ier3te iesen3s4 ie2spu ies2sp ies2s3t ie1sta iest6e ie3su ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie4t1ö4 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fl iff4st if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if2s if3sa if3se if3sp if2ta ift3erk if2top if4t3ri ift3sp ifts2t ift3sz 2i1g iga3i i2g1ang ig1art iga1s4 i4gefar ige4na ige2ra ige3ran ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu i3g4no i3go ig4ra ig3rei ig3s2a ig4sal igsau4g ig3sä ig4se ig3so ig3spr ig3stei ig4sto ig4stö ig3str igs4tra ig4stre ig3s4tü igung4 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ihs2 i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 iko1s i2köl i2k3ra ik3rä ik3re iks2 ik3so ik3sz ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 6ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1e2c il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s3 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum ilung4 i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2mele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im2mei im4m3ent 1immo 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2st im3sta 2imt imt3s2 imtu2 2imu in3a2c i4nack i2n1ad in2af in3am i3nap in2ars ina4s i2n3au in1äh in1äs in2dal in2dan in3dau 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng in3erbe i4nerbi in2erh iner4lö i4n3er4tr i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ing4sam ings3pr 1inhab 2inhar 2inhau 4inhe in2i3d i3nie 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn in3k2ü inma4le 2inn. in4n3erm 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino1s4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 in2seb 2insen ins3ert in3skan in3skr in4s3tät in3stel ins4tip in3su 1insuf in4s3um in3s2z 2inta 1integ int2h in3t4r in5tri int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o io1c io2d i2oda io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3ons3 ion4spi ion4stä i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en ipi2s i3p4l ipo6i5den ip2pf ip2pl ip3pu i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek 2i3ré ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron iro2s i1rö irpla4 irr2h ir4schl ir4schm ir4sch3w ir3sh ir2st irt2s3t 2iru iru2s1 i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i4schin i5sching i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat is2has isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is4s3che is4sper is2st is3sta is3sto iss3tr is3stu is2sum is3t is4tab ist3ac is5taf is4tam ist2an i1s4tat iste4n istes3 i1s4teu i1s4til is4toc is4tö is5tör ist4ra ist3re i1s4tü isum3p i2sü i1ß iß1ers it1ab. ital1a it1alt it1am it1an it2an. it3a4re it1art i3tat it1au i3tauc i4t1ax 4itä i2t1äs ität2 i2t1ei i4teig it2eil i4tein 2itel ite2la ite4n iten3s2 i4tepo i2tex i5thr i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn ition4 i6tl itmen2 i5toc i2t1of i3tö it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa its1a4g it2s1e4 its3er1 it2so it2s1pe it2sto it2teb it4tri itt2sp it1uh i2t1um i2tuns it1urg itut4 i3tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em i3xi ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l ja1c jah4rei jahr4s ja3l2a ja3ne jani1 jani3t4 ja1st 2jat je2a jean2s je1c je2g jek4ter jektor4 jek2tr je3na je2p je4s3t je2t1a je2t3h je2t3r jet3s2 jet3t je2t1u2 je3w ji2a jit3 ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung3s4 ju3ni jur2o jus3 jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg ka3ri kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw 3kas ka3se kasi1 kas3s ka2s3t ka3tan ka3t4h ka4t3r 2katt kau2f1o 4kaufr kauf4sp kaufs5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä2s1c käse3 2k3b2 kbo4n kbu2s kby4 2k3c 2k3d2 kdamp2 2k1e1c k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehr4s3o 2k1eic 2k1eig k1ein ke1in2d 2keinh kei1s 2k1eise keit2 ke2l1a ke3l2ag ke2lä kel3b4 2ke2lek ke2len ke2l1er 2ke3let kell4e kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kend4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5stei ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke4t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1c 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o3 kin3s 2k1inse 2k1int ki3or kio4s 3kir kis2p kis3s kist2 kis4to kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor 2klos. klost6 k2löt k1lu k2lud kluf2 k2lug klung4 k1lüc 2kly 2k1m k2n2 3knab k3ne k4nec k4nei 2knes kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol4a ko3le kol2k5 3kom ko4mu k2on ko3n2e kon3s4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kots2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron 2kruf krü1b 2k1s k4s1amt k2san ks4ana ks3ar k2sau k4s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw ks3ha k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu ks3s2 kst4 k2stal k4s3tanz k3stat4 ks2ti k2stor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins ktion4 kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras k4tref kt4ro ktro1s kt3run kt3s2 kts4t ktt2 k2tuns k3tü kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 4kulp 2k3uml kum2s1 k2u3n2a kung4 kun4s4 kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e kuri4er ku2ro kur2sp kur2st ku4schl ku2sp kus3t ku2su 1kü kü1c kür4s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 4l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3la3bu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a2dr 3ladu l1adv 2laf la2fa laf1r laf3s laf3t la2ga la2gio la2gn lago2 la2g1ob lag3s2e 2la1ho 1lai la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 5l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s4 2lanhä l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po2 lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi lar3s 2l1ar3t l3arti la2ru la2sau 4lasd la3se 2lash 2lasi la2so 2lasp 3lasser last1o lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2t1a lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lay1 lä1c 1läd 2läf 2l1ähn 2lämt 1länd lär2m1a l1ärz lä2s1c 4lät 2läub 2läuc 2läue 1läuf 1là 2l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lbs6t lbst1e lb4sto lb2u l2b3uf lbzei2 2l1c l3che l5chen l3chi lch3l lch3n lch3r lch3ü lch1w l3cl 4l1d ld3a2b1 l3d2ac ld3a2ck l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a2r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa ld3st ldt4 ld3th l2d1um 1le 3le. le2a le3an le3ar leben4s3 le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. l2eind lein4du l2eine lei6nerb 4leink l2eint l2einu lei6schw leis6s5er l4eist lei4ßer l2eit lei2ta lei8t7er8sc lei5tri leit3s2 lekt2a 2lektr 3l2ela 2le2lek lel3s 3lemes le2m1o2 4lemp lem3s l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lepositi8 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k lers2t ler3t l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3ser le3sh lesi1 le3sk les2t leste3 le1sto 4lesw 2lesy le2tat 2le3th 2leto let4tu le2u 4leud 2leuro 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfang3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lg3re l3gro 2l1h2 l3he 3lhi. 1li 3lia li3ac li3ak li3ar lia1s li3b4 libi3 li1c li3chi 4lick li2cka lid2 li3da 2l1ido li4ds lid3sc l2ie 3lie. liebe4s li3ene lien3s lie2s3c lie2st 3lig lig4n li2gre li3ke li2kr lik2sp lik4ter li3l lil2a li3m2a 3limo 2limp li3n2a lin3al 2l1indu li2nef li2neh li2nep li2nes 2l1inf lings5 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2linst 2l1int l1inv 2linz li2o li4om li3os. li2p3a 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i4so li2sp liss2 lit2a li2tal li3te lit2h lit1s2 lit3sz li3tu 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lks3t lk4stä lk2ü 4l1l ll1abb lla4ben l2labt ll1akt l3l2al l2l1am ll3a2ma lla2n ll2anw ll1anz l3l2ap ll1arm ll3aug ll1aus l4lausf ll1äm llb4 llch4 ll3d4 ll1ech l2l1ef ll1eim ll2em l3len. lle4n3a llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll2es l2lex llf4 llg4 ll1imb ll1imp l2l1ind ll1ins llk4 ll3l2 ll5m lln2 ll1ob l2lobe l2l1of ll1opf l2l1o2r l3lor. l3lore l2l1ou l3low ll3sä ll3sh ll3s2k ll2spr ll5t4 llti2m llt5s2 llu2f ll1ur llus5t6 ll3z2 2l1m l3ma. l2m3a2b l2marc lm1art lm1äst lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins l2möl lm3p lmpf4 lms2t lm3ste lm3s2z lm3t 4ln lna4r ln3are lnd2 l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min lo2n1o lo2o 2lopf 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3lorq 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4ste los3t4r lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l3 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lp3t4 l3pu 2l1q 2l3r2 lrat4s lre1s lrut4 lrü1b 4l1s l3sac l2s1a2d l3s2al l4s1amb l4samt l2sang l2sann l2sanz l3sare l2sau ls2äm l4schin l4schmü l2s1e2b l2s1ec l2s1em ls1ere ls1erg l2serh ls1erl l2s1ers l2s1erw l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3s2 lst2a lstab6 ls4taf l4s3täti l2ste l3stec l3stei l3stel l4stem ls6terne ls6terns ls2tie l2stit ls4tr ls2tu ls1um l2sun lsu3s 4l1t l2tab ltag4 lt1ak lt1am l4t3ame lt3and lt1ang l4tarm lt1art l2t3ato l2t1au lt1eh lt1ein l2t1eis l4te4lem lt3eli lt2en l5ten. lten6gel lter3a lt2erg lt2erö l4t1e4sk lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tör lt1ös l4t1öt ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l6ts lt2so lt4stab ltt2 lt1uh l2t1um ltu4ran ltu2ri l3tü lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lu4g3l lu2go lu2g3r lug3sa lug3sp lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 2l1ums l1umw 1lu2n 2l1una 2l1unf lung4sc 2l1uni 2lunt 2lunw 4luo 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c luss3er lus6serf lus6serk lus6sers lus2s1o lus2s1p lus2s3t lus4stä 1lu4st lus4t1a lust3re lu2s1u lu2t1a lu2tä lut2ed lu4teg lu4t3erg lut1o2f lu2top lu4t3r lut5schl 3lux 2lüb 5lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lz1w lz2wec 1ma m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1e mal3lo 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2marb mar3g2 ma3r2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m1arz 3mas ma3s2pa 4m1aspe massen3 mas4tel ma1s4tr 3maß ma2ta2b ma2tan mat4c ma2tel ma4t3erd ma5tri mat3se mat3sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 2m1änd m1ärg 3mäß mä3t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby4 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega1 3meh 2m1eif 2m1eig mei3l2 mein4da me1i4so 3meist me3lam me2lau 3meld me2lek me2ler melet4 2melf. mell2 mel2se mel5t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta men6tanz 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes mes1a me2sal me4sä 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p mes2st meste2 me1sto 4mesu me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1c mi3da mie3dr mi2e1i mie3l mien3s mi2er mierer4 mi4et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che mild4s 4milz 2m1imp minde4s min2en min2eu min2ga ming3s4 mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis2s1c mi2ste 3mit mi2ta mi2th mi2t1r mit3s2 mit5sa mi5tsu mi2t1u 4mitz 2m1j 4m1k4 m3ka mk5re. 4m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz mm1art m2m1au mmd2 mm1ein mme4lin mme4na m4mentw mme2ra mme4rec mme2sa mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc mmi1s4t mm3p2 mmpf4 mm2s mm3si mm3sp mm3sta mm3str mm3te m2mum mm2un mmül2 mmüll1 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 3mom mom2e 3m2on mo3ne mo4n1er mon2s3 mon3su 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer morgen5s6 3mos mo3s4ta moster4 3mot mo3ti m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les m3pon mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and m4sap ms1as m2sau m3sä m3sc msch2 m4sco m3se m4s1ef ms1erw m4sex ms1ini mso2r ms1ori m2spä m2sped ms2po m2spot m2spro ms2pu ms3s2 m4stag m3stel m3s2ti m3sto ms4tr ms5trä ms5tren m3s2tu ms4tü m2sü m3sy 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m4t1erg m2t1erl m2t1ers m2t1ert m4t1eta m2t1eu m2th mt3ho m3ti m4t1im m4t1ins m4tint mti2s mtmen2 m3tö m4töl mt1ös m2trö m4ts1 mt2sa mt2se mt3s2ka mt2spr mt4s3tät mtt2 mt1um mt1urt m3tü mt3z 1mu mu1a mu3cke 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f m4us 3mus. mu4s1a 3musc 3musi mu2s1o mu2sp mus3t mu2su mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül4len 3mün 3müt mütter3 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4 mwelt3 mwu1 1my my4s 2m1z 1na 3na. 2n1ab na2bä 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2ac na2ch1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3l2a nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly n4am. 3name na3me. n4amen namen4s3 4n3a2mer na3m4n 3namo 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än när4s5 n1ärz 3näs nä2sc n2äss 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbes4 nbu2s nby4 2n1c n3ce2n3 nch3m n2ck 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6läs nde4rob nder5ste nde2se ndi2a3 n2dob ndo2be ndo1c nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th nd3ti ndt4r n2duns ndy3 1ne 3ne. ne2ap ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n4en. n2en3a4 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz 3n2es n4es. ne3san nes4c ne3ska nes1o ne2s1p 4n3essi ne1sta nes3ti ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt4 n3far n3fi nfi4le. nf4l nf5lin nf2o nfo1s nf4r nf3s nf2tan nft2o nf2t3r nft4st n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g3a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a n3ger nge4ram n4g3erse nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngsa4g ngs3au ngs3c ng4s3e4h ngs3pa ng3ts n2gum 2n1h4 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nich1s nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n3 ni3ene ni1ero nifes3 nig2a 2n3i2gel nig3r ni2gre nig4sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis3s4 ni2s1u 2nit ni2ti nit4r nitts1 nitt4sa ni3tu ni3v 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3aus n2käh nke2c nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2s1al nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö n4n3er4wa nner2z nne2s nnes1e nne4st nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3sc nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur nnvoll4 1no 3no. no2bla n2o3ble 3noblo 2n1ob2s no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3sh no2s3p n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l n2öt 2n3p4 npa2g npf4 npro1 npsy3 2n1q 4n3r2 nräu3s nre3sz nrö2s1 6n1s n2s1a2d n2s1all n2sang n2sant n3s2arg n2saus n3sav n2s1än n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere nsen4sp ns1ent ns1erf ns1erg n2serh n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n3sil n2simp n2s1ini nsinn4s nsi4te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 n2spat n4speri n4spers n4sph n3s2pi ns4pie n2spo ns3pon n4sprä n4s3prie n4spro nsrü2 ns3s2 nst1ak n3star n2stas n3stat n4stat. n4s3tate nst3eif n3stemm ns4tent ns6terbe n5s6terne n5s6terns ns2ti ns4tic ns4tob nst5opfe ns4tor n4strac n4strie nst4ru ns4trun ns2tu nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns4unr ns4uns n3sy n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at nt1äm n2t1äu nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei nt2en nt4ene nten6te. n3ter nte4ras nt4ern nt4ers nt4ert n4t1ess nte3v nt2her n2t3ho n3thr n3t4hu nti3c nti3k4l n2tinf n2t1inh ntini1 n3ti1t nt4lem ntmen2 ntmo2 n3to nton2s1 n3tö nt3rec n5t4ree nt3reif n5trep nt4rig n5trop n2t3rü n4ts nt3sa nt4sau nts2o nts2p nt4s3par nts2t nt2s3to nt3su n3tu 3n4tu. ntum4 ntu2ra ntu4re. ntu4res n3tü nt3z 1nu. 1nu1a nu3ar nubi1 1nu1c 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung4 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl 1nut nu2ta nu4t3r 1nuu 1nux 1nuz 3nü. 2nü4b nür1c 3nüs 1nüt 2n1v2 n3ver nvol7ler 4n1w 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nzdi1s nze6l3a n4zense n4zentw n4zentz nz3erwe nzi2ga nzig4s nz1ini nz3le n2zor nz2öl nz3s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oa4k1l o4a3la o4a3mi o2ar o2as 3oa3se o4at o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi4t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri ob3s2h ob3sk obs2p ob2sta ob3sz 2o3bu obu2s 2o3bü 2oby4 2oc o3ca oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r och1s ocht4 och3te o1chu ochu2f och1w o1ci o1ck o2ckar o3cke ock2er o3cki o2cko ock3sz o1cl o1ç o1d o3d2a od2dr o3deb o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2o3du 2o1e oe2b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1a2c of1au o2f1ei of2en o3fer of2f1a of2f1in 1offiz of2f3l of2f3r offs2 off3sh of2fu 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i o3gh ogi2er og2lo o3g4n og3s2p og1ste o1ha o1hä o1he o2h1eis ohen3s o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro oh1s o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. o1ism oiss2 oi1th 2o1j 2o1k oka2la okale4 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar olars2 ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ole3s ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp ol2gl ol2gr ol2i oli3k4 ol2kl olk3r ol2kre ol2lak ol2l1au oll1e2c ol2l1ei ol2lel oll5ends ol4lerk oll3erw o3lo ol2of olo3p2 ol1ort ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3m2eis o2mel o2mene o2mep o2meru om1erz om2es omiet1 o2m1ind om1ing om1ins o2m1int om3ma om1org om3pf oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n3 onens2 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4 onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on4sam on2seb onse2l onsi2 ons3l ons1p onst2h on3t2a ont3ant on4t3end ont3erw on4t3ri o1nu 2onuk on3v 1ony on3z o1ñ oof2 oo2k3l o1op o1or oo4sk oos3s4 oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan opa5s o1pec o1pei o1pe4n 2opf. op2f3a op3fah o2pfe op4ferd opf5erde opf1l opf3la op1flü 4oph2 o3phe o1pi opi5a4 opi3er. opi5ers. opin2 op5lag o2p3le op3li 2o3po op4pl op2p3r 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3oram or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 4orda or2d3am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords ord3s2t or2dum 2ordw 4ore ore2a ore2b o2r1e2ck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s4 or3ga 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork2s 2orm or4mans or4ment 2orn or2na2c or2n3ar or2n3ä or5ne. or3n2o1 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3rh 2ors2 or3s4a or3sh or3sz or2t1ak or4t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the ort3ins or4t3off or2tor or4tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un o2r3ü o2rya 2o3s2a os3ad os4an osa1s osch3ar o3sche osch3le os4co 2o3se ose3e o2s1ei ose2n o4sents 2osh o3s2hi o3sho 2osi o3sk o4ska os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1a2c oss3and os4sä os2sei os4s3en4k os4s3enz os2s3o os4son os2s3p os2s3t ost1a2b os4t3am ost3ang os3tarr osta4s ost1au os4tei oster3e os6t5er6we os2t3h os3til os3to os4tob ost3ran ost3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf 2o1t ota2go o3tark o2t1au ot3aug ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 o2t1erw ote2s 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in otli2 ot4ol ot1opf ot2or oto2ra oto1s o3tra o2t3re ot3rin ot2sa ot3sc ots1p ot4spa ots2pe ot2spr ott1a ot2tan ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra ot4tri o3tü o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oun4ge. 2our ouri4 our4ne. ou3s2i outu4 2ouv 2o1ü o1v ove3s 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo oy1s4 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r öb2s3 ö1c öch1l ö2chr öch2s öchs4tu ö1d öde1r ödi3 ödien3 öd2st 1ödu ö1e 1öf öf2fl öf3l ögen2s1 ög3l ög3r ö1he öh3l2e öh3ri ö1hu ö3ig. ö1ke ö2ko1 ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl4en öl2f1ei ölf3s öl1im öl1in öl2k3l öl3la öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w öm2s ön2e ö3ni önizi1 önn2e ön2s ön3sc ön3sp ö1nu öo1 ö1pe öpf3l öp4s3t ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw ö2s1ei ö2sp ös2s1c ös2st ö2st ös3te ös2th ös3tr ö3su ö1ß ö1t ö2t3a öte4n3 öt2h öts2 öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg pa5rek 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa3s2p pa4st 2paß pat1a pat4c pate2 1pati 1pa5t4r 1pau p3auf pa3uni 1pä 3pä2c 3päd 3pär 3päs pä4t1e2h pä4t3ent pä2t3h pä2to pät3s4 2p1b 2p3c 2p1d2 pda4 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 1pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pell4e pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o 3pensi 1pensu penz2 1pep pe1ra per2an pere2 1perle per4na 3pero per2r1a 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pe2st pes2th 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 p2f1in3s pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra 2pfs2 pf3sl pf3sz 2pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d phen3s 2ph1ers 2phf 2phg phien3 phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a3 piap2 pias4 pi3as. pi3chl p4id2 piegelei8 pi2el piela2 pie4lei 3pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi3ri 3pirin 3pis 4piso pi3t2a pi1th pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3p4la p5la. p5lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler 2plig p4lik p4liz p4lo 2p3lu 2p1m2 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li po4lor 2pond po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por3s por4tin por4tre por6tri pos2e po4sta pos4t3ag po4stä po2s3te post3ei po2sto pos6tr post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3l pp1lä p2ple pp3oh ppp2 p2p3ra p2pri pp3sa ppt2 p2r2 1prak 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 1prei 3preis 2preiz 2p3rer 3p4res pri4e 2prig 3prinz 2pritz 1p4ro 3prob 2proc 3prod 3prog 3proj 2pross pro1st 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po p2st p3sta p3stea p3stel p3s2ti pst3re ps2tu p3stü 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w p2t3r pt3s2 ptt2 pt1um pt1urs ptü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 2pund 3punk pun2s 2punt 2pur pu2s3t 3put put2s 1püf 2pül 2p1v 2p1w pwa4r 3py1 pys4 py3t 2p1z qu4 1queu 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2ab2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad5t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la2 ral3ab rala4g r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la rall2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly rama3s ra2mer 1r2ami ram4man ram6m5ers ram4m3u 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er rand3s 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra2r1in r2ark 2r3arz r2as r4as. ras2a ra4schl 2rasph 2raß 1rat ra2t1a rat4r 2r3atta 4ratz 4rau. 3raub. 4raud rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp raus5se raut5s 1raü r2ax raxe3 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sc 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rb2o rb4ri rb2s rb3se rb4sei rb3ska rbs1o rb3sp rb4stä rb2u rbu2sc rby4t 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rch1s2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r2ck r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rd2am rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d rde3re rder4er rderin6s r4d3ernt rde3sp rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os r2dö rd3rat rd4ri rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. re2cka 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 3rek 4re2ke re3la 2r1elb rel2e re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest re1sta re2s2tu 3resu re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü rfolg4s r3for rf4ru rf4rü rf2sa rf2s1ä rf4s1id rf2spr rf2s3t rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rg3sp rgs4tr rg5s2tu r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs rhu2s 1ri ri3am ria1s ri3at rib2bl ri1ce ri1cha rid2 ri2d3an 2ridol 2ridy r2ie rie2fr ri1el ri3els riene4 ri3eni rien3s rie2nu ri1er. ri4ere ri3ers. ri3esti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif3s rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 2rimp rim2s rim4sc r2i3na 2r1ind rin4dex rin4diz ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 2rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins 3r4ins. rin4so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris2a ri4scho ri4schw 3risik rismu2 ri3so ri4s1p 3riss ri2st ris6t5ers r2it r3i2tal ri3t2i ri3t4r rit2tr 5ritu rix1 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk3shi rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk4tri rk2um rku2n rk1uni 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i r3let r3l2i rli2s r3l2o rlös3s rl2s1p rl3ste rl2s3to rl3t r3lu rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1ans rm1anz rm1a2p r2maph rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im r2m1o2ri rmo1s rm3sa rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna2r rn2arb rn3are rn3ari r2nau rnd4 rn3dr r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1c 3rock. r2o3de ro3e4 roh1l 3r2ohr 3roi ro1ir ro3le rol4lan rol3l4en rol3s 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ropf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3sh ro3s2i ro3smo ros2s1c ro3sta rost1r 4roß ro2ßu ro4tag ro2tä ro2tei ro2tho ro4tri rots2o rot2ta ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl 3römi 4röp r1ör r2ös. r2öse 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpro1 rps3t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rrat2s rr1äm rrb2 rr1c r3r2e rre4ale rrer4s rre2st r4rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m rr2st rr3stu rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2s1a2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ant rs3ar r6scherl r3schu r3schw r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3s2ho r3si r4sins rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4sob rson4e r4s1op r4sord r4s3ort. rs2p4 rs4pel r2s3ph rs3s2 r4stant r5statu r6st5eing rs4temp rster2 rs4terb rs4t3erw rs2th rs2ti r3stie r5stim r2stin rst3ing r3stink r2stip r3sto rs4tob r4stot r3stö r3s4tr rst3ran r6strang r4strun rs2tu r3s4tü r2sumf r3swi r3sy 4r1t rtal2 r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är rte1e2 rtei3la rt1ein rtei1s4 r2telf r2temo rte2n1 rte4na rten3s2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers rte3s2k r2thi rt3hol rt2hum r2t1id r2t1ima r2tinf rto1p rt1or rto2ri r3tö r4t3rak rt3rec r5tri rt3ros rtrü2c r4ts rt4s1eh rt2so rt2spa rt3t4 r2t1urt r3tü rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ruch3st ru6ckerl ru2cku rude2a ru2dr 3ruf ru2fa ruf2s3 ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus2s1p rus4st ru2st ru3sta 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch 4rümm rün3z 2r1v rve4n1e 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. 2s1ada s1adm 2s1a2dr 3safa sa2fe 2s3aff 3safi sa1f4r 3saga sa4gent sag4n sa2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4sakt 3s2al. 4s1alar sa4l3erb sa2l1id 3salo sal2se 2s1alt 3s2alz 3sam s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na s3anb s2an2c s2and s4and. san4dar san4dri 3sang. 2s3anh 3sani 2s3anl 2s3ans san4sk 4s3antr 2s3anw 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1asp 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb s3ausw 2s3av sa2vo 1sä s3ähn 3säl 4s1ält 2s1äm 2s1änd 3sänge 2s1är 3s2ät 3säul 2säuß 4s3b4 sba4n sbe3r2e 1sc 2sc. 2scam s2can s2cap 2scar 2s1ce 6sch. 2schak s4ch2al 4schanc 4schang 2schao s4chä 4schb 4schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 2schf 2schg 2schh schi4e s4chil 4schiru 3schis 2schk s4chl 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox s4chö 2schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs schs2e sch3s2k sch3sta 4sch3t scht2a scht4r s4chu 4schunt sch2up 3schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 4s3cl 2sco 3s4cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sde1s sdien4e sd4r 1se se3at. 2s1e2ben seb4r 2s1echo s1echt 2s1e2ck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l se2gal se2gl seg4r 3seh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh1s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s4ein. 2seinb sein4du sei3n2e sein4fo 4seing 2seinh 4seink 2seinl 2seinn 4seinr s4eins. 4seinsp 4seinst 2seinw 4s1eis 3s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam sel1ec 4selem se4lerl sel3ers 2self. s3elix se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp 3s2en. se4nag se2nä 2s1endl 3seni 3senk se2no 3s2ens s2ent. 4sentf 2s3entg s2enti 2s1ents 2sentw 2sentz se2n3u seo2r 4s1e2pos 3seq s4er. 3sera ser3a2d ser3al se5ref s3ereig 6sereign se4r3eim se4r3enk ser2er 2s1erfo s2erfr s3erfü 4serfül s2ergr s1erh 2serhö 3seri serk4 4serken s2ern. 2s3ernt se1rot 4s3eröf s2ers. 2sersa 4serseh s4ert. s2erta seru2 se4r1uf se3rum se3rund 3s4erv 5ses. se2sel se3sk se1sta se3su 3set 4se4tap se2tat 4s1e2th se1u2n 2s1ex se2xe 4sexp sex3t2 1sé 4s3f4 sfal6l5er sflo4 4s3g2 2s1h sh2a 3s2ha. sha2k 4s3han 1shas s3hä s3h2e 3shi. 3shid shi4r sh3n s3hoc 4s3hof 3s2hop sho4re 3show s3hö sh4r 1si si3ach. si2ad si3am. 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s sien3 si3ene si1err sie2s si1f4 3s4ig si2g1a2 sig4n si3gnu si2g3r sig4st si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 4s1inh sin1i sini1e 2s1inq 2s1ins s2ins. 2s1int 4s1inv 3sio sion4 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 2s1j 2s1k2 4sk. 3skala 4skam 4skanz s3kar 4skas skas4tr ska4te. 4skateg ska4tes 4skä 4skb s4kep 3s2ki. s2kif s2kig 3s2kik 4skir ski1s 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4skor 4skow 4skö 4sks 4sk3t 3skulp 2s1l2 3slal 4slan sla2ve s2law s3lä sl3b s3le sler3s s3li 3s4lip sli4tu s3lo. slo3be s3loe 2s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 1so 3so. so4a 2s1o2b so1c so3et 3soft 3sog s1o2he 4sohng 2s1ohr 3sol so3la so2l1ei sol4ler 4so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2sopf sop3s 3sor. so1ral s1orc 2s3ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3sos s4os. 4s1ost so3unt 3sov 4s1o2ve 3sow 2s1ox 3soz 1sö sö2c sö2f 2s1ök s1ö2l s1ös 1sp2 2sp. 2spaa 4spak 2spala spani7er. 4spap 2spara 4sparo 3sparu 3spaß 4spatr 4spau s2paz s2pä 3späh 2spär 2s3pe. s3pel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 3s2pez 4s3pf 2spha s4phä s3phe 3s2pi4e 4spier4 spi2k 4spil 3spio 4spip 4spis 2spl 4spla 4splä 4sple 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 4s3pos s2pott 4spr. s2prac s2pran 4sprax 2spräm 4spräs 3s4prec 4spred s2pren 2spres 2sprob 2sprop 3spross 3spru 4sprüf 2s3ps 2s4pt 3spuk 2spun 2spup 3spur 4sput 4spy 2s1q 4s3r4 srat2s srat4sc sret3 srö2s1 srücker6 srü2d 6s1s ssa3bo s5saf s3sag ss1aj s3sal s4s1alb s4s3amt s4s3ang s2sano s4sans ss2ant s4s3anz s3sa1s2 ss3att s3s2ä s4sce ssch2 s4sco ss1ec s2s1ega sse3inf sse3in4t sse6r5att ss1erö ss3erse s3s2es sse3ta ss3l ss1off ssoi4 s2s1op ss1ori s2söl s3spe ss2po s2spro ssquet4 ss3s4 sst2a s3stel ss2th ss2ti ss4tip s3s4tras s3strec ss2tur s3stü ss1ums s1t 6st. s2ta 4sta. 3staa 2stabb s4t2ac sta2ck 3s4tad 3staff 2stag 3stah 2stak 2stale s3ta3li 2stalk st1alm st1alp st1ami 4stan. sta4na 3stand 2stani 4s3tann 2stans 2stanw s4tar. 4stari s4tars st1asi 2s3tat. s4tau. 2stauf 2staum 3staur 2staus 3staus. 2stax 3s2tä 4stäg 4stält s4tänd 5stätt s3täus 2stb 2st3c 2std 4s5te. 2stea 4stechn s2ted 4stee 3s2teg ste2gr 3s4teh s2te4i st1eid 3steig 4steil 3steilh stei4na 1s2t2el 2stel. stel4l3ä 2steln 2stels 2stem 4stem. ste4mar 4sten s5ten. ste4na s4t3ends st2ens s4tentf s2tep 2ster 6s5ter. st5erbie ste4rec ste6rers st3erfü st5ergeb 4sterm 3sternc 4stes ste2se stes6se. ste4st 2stet s4teti 3s4tett 3s2teu 1steue 4steuf st3ev 4stex 2stf 2stg 4sth s4thä s3them st3heu s4thi s2t3ho s2thu 2stia 2stib 3stic 2stie. s2tieg s2tiel 2stien 3s2tif 2stig 2stik s2til 3s4tim s4tinf s3tinn st1ins 2stio 1s2ti2r 2stis st1i4so 1stitu 2stiv 2stj 2stk 4stl 4stm 2stn s2to 2sto. s3tob 2sto3d 4stod. 1stof s4toff s4t3om 4ston 4stoo 2stopo 2stor. 2store 2storg 2stori s3tort 2stose sto3s2t 1stoß 4stote 4stou 2stow 2stoz 1stö 2stöch 2s3töl 2stöt 2stp 2stq s2tr 2strad 2strag 1strah 4strahi 4strai 4strak 2stral 4strans 5straß 4s3traum 4s5träg 4sträne 4s5tref 4s5treib 5st4reif st3renn 2strib 2s4trig 1s4tri2k 2s5tris st3roll stro4ma 2ströp 1stru 2strua 2strug 3struk 2st3run 2strup 2s4t3s2 sts4k 2st3t4 st2u 5stub 4stuc 3s4tud 2stue 3stuf 5stuh 2stum2s stum4sc 2stumt stu2n 2stun. 3s4tund s2t3uni 4stunn 2s3tuns 2stunt stu3re st3url 2sturn 2st3urt 2s3tus 1stüc 2stüch 2stür. 3stüt 2stv 2stw 3s2tyl 4st3z 1su su1an 3su2b3 su4ba2 4subi 3su1c su2cha such4st 2s1u2f 2s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2mel su6m5ents s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n 3sun. sun6d5erh su4ne s1unf 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt s4u2s1 su3sa su3si sus3s 3suv 1sü 2sü2b 3süc sü2d1 süden2 3sün 3s2üs 3süß 4s3v 2s1w s3wa s3we sweh2 4swie 4swil 1s4y syl1 sym3 sy4n3 2s1z2 4s3za 4szä 4s3zei s2zena 3s4zene 4s3zent s2zes 4s3zet s2zis 4s3zu s3zü 4s3zw 2ß1a2 2ß1b2 2ß1c 2ß1d 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t 2ß1f 2ß3g2 ßge2bl 2ß1h 1ßi ßi2g1a2 ßig4s 2ß1in ß1j 2ß1k4 2ß1l ßler3 2ß1m 2ß1n2 ß1o2 ßos2 2ß1p2 2ß3r2 2ß3s4 ßsch2 ßst2 2ß1t 1ßu 2ß1um 2ß1ü 2ß1v 2ß1w 2ß1z 1ta 3ta. 4taa 5taan 2tab. ta2b1an 2t1abb 3tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 3table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 3taf. 3taf2e 4taff t1afg t1af4r 3t2ag ta2ga2 ta2g1ei 4t3a4gent 4ta3gl t3ago tag4st tah2 tah3le tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. t1a2ka ta2kro tak6ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk tal3d 3t4ale tal2en ta4lens tal2ga tal2l1ö4 3talo ta2l1op 2talt 2tam 3tame ta2mer ta2mi t1ampl t1amt 3tan. t1a2na 2tanb 4t2and tand4ar ta3ne 4tanf 2tang 3tani t2ank t3ankl 4tanl t1anm 2tanme 4t1anna t2ano t1ans 3t2ans. 4t3ansi 4t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 5t4a3ri 2tark 2t1arm 2tart t1arti tar2to ta2ru 2t1arz 3tas. ta3sa 3tasc t1asp 3tast ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 4tatue ta2t1um 4taud 2t1auf 4taufg tau3f4li 4taufn t1auk 3taum t1ausb 3tausc tau6schr tau6schw t2ause 4t3ausg t1ausk 4tausl 4t3auss 4t1ausw 3tav 3tax taxi1s 1tä 4täb tä1c 4täd 3täe 3täg 4tägy 2täh 2t1ält 4täm t1ämt t1ängs 3tänz t1äp t2är. tä2ru tä2s t2ät 4tätt 2täug 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 4t1c t3cha t3che tch2i tch3l t2chu tch1w t4ck t3cl t3cr 4t3d4 tdun2 1te 3te. te2a2 2teak te3al te3an 3teba 3t4ebb 4t1e2ben t2ech te3cha 2teche 3techn 2techt 2teck te2cka teck2e te2cki te3der te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 3teha 3tehä 3tei. 2teign teik4 3teil 4teilhe 2tein tein3e4c t3einge t3einla 4teinn t1eis. t1eisb te2kel tekt2 3tel. 3tela te2l3ab te2l1ac te2l1au telb4 tel3d4 3te3le tel1eb tele4be te4l1ec te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. 3telg te2l1in te2lit 3telk tell2e tel6lein 4tellu 3teln te4lost te2l1ö 3telp 3tels tel3s2k 3telt4 tel3ta tel3th 3tem. te2m1ei te2min 2temme te2m1o2r 3temper 2tempf tem3s te4m1u 3ten t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 4t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag 4t3engla t4enh te2ni te4n3in t4enj t4enm ten3n tens2e 4tensem tens3th t4enta t1entb 4tentd t4ente 4tentn tent3ri 4t3entw 4tentz ten6zerh ten3zw t1e2pi 3t6er. ter3a2c te1raf te1ral ter3am te3ran. ter3a4s 4terbs 4terbt 3terc 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül 3ter3g2 6tergrei t4ergru t4eri te3ria te2rid 5terkla 4terklä 2t3erlö ter4mer 3termi ter4n3ar 2ternc t3erneu t4ero t1erö ter4re. t4ers. ter5sc ter4ser terst4 t4erst. 5t4ersti 5t4erstu tert2 teru2 te4r1uf 6terwerb ter3za 2t1erzb 3t2erzu 3tes tesa2c te2san 4t1e2sel te2sep tes1er te2spr tes3si t2est tes3tan test3ei tester4 tes6terg tes6terk testes4 te2su 3tet2 t2et. te2tat 4teth 4tetl 3teuf 3teum te1un 3teur. teu2r3a te2vi te1xa 2t1e2xe 2t1e2xi 4texp 3text 2t1exz 4t1f4 tfi2l 4t1g2 tger2 t1h 4th. 2th4a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä th2e 1t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem 1then t4hene t4heni 3theo t2hes 3these t2heu 1thi t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n 1t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 4t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy 1ti ti2ad ti3a2m 3tib4 2tic ti1ce tiden2 ti4dend 3tief. tie2fr tieg4 2tieh ti1el ti2el. tiel3a ti3e4n3 3ti2er tie4rec ti1et ti1eu 3tif. ti1fr 4tift 3tig ti4gerz 3tik ti2kam ti2kar ti2kin ti2krä ti2kü ti2lar ti2lau ti2lei ti2lel 3tilg ti2l3ö til3s tilt4 ti2lu ti2ma2g t2imi tim2m1a 4t1imp 3t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l 3t2ins. 4t1inse 2t1int ti1nu 4t1inv 3tio ti3or 3tip ti4que. ti1rh 3tis ti4scha tisch3w ti2sei ti2sp ti1sta 3ti3t2e ti3ti 2ti3tu tium2 3tiv ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 4t3k4 4t3l tl4e 5tlem tle2r3a 6t5li tlung4 4t3m2 tmal2 tmen6t3 tmo4des 4t3n2 t5na tnes2 tnes4s 1to 3to. to4as to5at 4tobj tob2l t1obs to1c 3tocht to6ckent 3tod tode2 4to2d1er to4d1u toi4r 3tok to3la 3tole 4tolz tom1e2 2tomg 3ton to2nau to2neh 3too to2pak to2pat 3topo 2topt 3tor. to1ra to2rau to4rän 4torc t1ord 3tore to2rel t1org t3orga 3torin tor3int to2rö 3tors t1ort. to2ru t2orw to3sc 3tose to4sk tos2p 4toss 3tost4 to1sta 4toß 3to3te to2tho 3totr tots2 3t4ou touil4 to3un 3tow 2tö 3töch 4töf 4t1ök tö4l 3tön t1öst 4töß 3töt 4t3p2 tpf4 2t1q 1t2r4 2tr. 5tra. 3trac tra3cha t3rad. tra4dem tra4far 3trag 3trahi 4trahl 6trahm 5t4rai 3trak 3tral 2t3rams 3t4ran. 2trand 3trank t3rann 3trans t3rase t3rasi 4traß t4raue 2traup 5träc 3träg 3träne 4träs 4träß 4t5re. tre4ale 4treb tre2br 4trec t3rech t4reck 6t3red 3tref 4trefe 4trefo 4treg t4rei. 3t4reib 4treic 4treif t3reig 2t3reih t3rein 2t3reis 6treit t3reiz 2trek 6t3rel t4rem t4ren. 3trend 4trendi t3rent 2trepe 2trepo t4repr t4rer t4res. t4ret tre2t3r t5rett t4reu 3treuh 2t3rev 2trez 5t4ré 2t3rh 3tri 4tric 5trieb 2trieg tri4er 5trigg t3rind 4tring tri3ni 4trinn t4rip 4tript t4rit tri2x trizi1 3tro. 4trock. 3troe 3t4roi tro2ke 4trom. tro2mi 3tron 2t3roo t4rop 3tropf 3troy t3röc 2tröh 3tröp 3trös 4tröss 2t3röt 3trua 2truf 4truk trum2 trums1 2t3rund 3t4runk 5t4rup tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg try1 2ts t4sa4b t3s2ac t2s1a2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as t2sau t2s1äh t2s1än t3s2cha t4schar t3sche t4schef ts4chem tsch4li t4schro ts4cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t2s1ent t2s1er t6s5essen t2s1i2d tsing4 ts1ini t2s1ir ts3kr t1slal ts1o tso2r t3sou t2sö t3spal ts1par ts4pare t2spä ts2ped t3spek t2sph t3s2pi ts3ple ts2pon t3s2por t4sprei ts3s4 t1st4 t2staf t4stag ts3tak ts4tal ts3täti t2s3tep t3s4tern t3s4tero t2stip t4stit ts3tor ts3trad t2s3trä t4streu t2stri t4strop t2s3trü ts2tu t2s1u 1tsub t3sy 4t1t tt1ab tta2be tt2ac tta6gess tt1ak tt2al tt3ank tt2ant tt1art tta1s tt1ebe tt1eif tt1ein tt1eis t3tel tte2la tte4leb tte4len ttel1o tte4rec ttes1 tte4sa tte2sä4 tt2häu t2t3ho t3ti t3to tto1s t3tö t3tro tt3rü tt2sen tt2sor tts1p tt2spe tt2spr tt2sti tt5t t3tu tt2un t3tü 1tu tu1alm tu3an 2tub2 tuba3b 3tuc tu2chi 2tud 3tue tu2ere 4tuf tuf2e tu3fen t3u2fer tuff3 4tuh tu2is 2tuk t3u2kr tul2a t2um. 3t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2t3umr tum2si tum2so tums5tr 2t3umt 2t1umw 2t3umz 3tun. 2t1una 2t1und 3tune 2t3unf 3tung t3unga tung4s5 2tunif 2t1u2nio 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e4t turin1 3turn tu2ro tu4ru tu2sa tu4schl tu2so tu3ta 2tü 4tüb 3tüch tück2s 3tüf 3tüm 3tür. tür1c 3türe 3türg 3tür3s 3tüten 4tütz 4t3v 4t3w twa2 twi4e 1ty1 3typ ty2pa tys4 6t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1e2c t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3ze2s tz1ind tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1al. ua2lau u1alb u3alet u1alf u3a2lo u1alr u1als u1alt ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au u1ay u1äm u1äu 2u1b u8be8cken. u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa u2büb 2uc uc1c u1ce uch1a u1cha. uch1ä u1che u2ch1e4c uch1ei u3ches u1chi uch1il uch1in uch3l uch3m uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu uch3ü uch1w u1ci u2ckem u4ckent uck2er uck3erl u3ckerr u2cki u1cl 2u1d u3d2a uden3s2 uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e ue2ck u2ed ue2en u2eg u2ela ue2le ueli4 ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uer2ne uer4ner uern3s4t uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue2ta ue4tek u3fac ufa2ck u3fah uf1ak u3fal uf3ar u3fas uf1au u2f1äs u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern 2uff uff4l uf2fro uffs4 uf3l u2fob ufo2r uf1ori uf3r uf3sä uf4sin uf4so uf2spo uf2t1eb uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak u2g1ap uga4s ug1au ug3d2 u2g1ei u2g1erf u2g1erl ugge4st ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ros ug3rüs ug3se ug4ser ug3si ug3spa ug4spr ug4spu ug5stä ug3str ug3s4tü u2gü u1h uhe3s6 uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uhs4 uh1w 2ui ui2ch ui4cker u1ie ui1em u3ig u4ige u1in. u1is. u3isch. u3ischs uisi4n ui4s5t u1j uk2a u3käu u1ke u1ki u1k2l ukle1i uk4n uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ula2s ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ul3f4 ulg4 uli2k ul1ins ul3ka ul2kn ul2les ull3s ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2th 2ulta ul3th ul4tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a u2möl umpf4li um2pho um2p3le 1umr 3umsat um4ser um2sim um2s1pe um2s1u um3t2 um2un u2m1ur 1umz un1 4un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp und3st un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes4 unft4s 1unget 1ungew ung5h 1unglü un3gn un2gr ung3ri ung4sa ungs5tr un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku unna2 un2n3ad un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1un3si un3sk un3sp uns4t1r 1unt un3ta unte4ri un3tr unt3s 2untu unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u3or. u1or3c u3ors uos2 u1os. uote2 u1pa u1pe2 uper1 up2fa u2pf2e u2pf1i u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o up4tr u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 urd2 ur3di ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri urgros4 urg3s4 uri2c ur1im ur1ini ur3ins ur1int urk2s ur3l ur4matt 4u1ro u3rol uro1s u1rö ur3p ur3sac ur2san ur2sau ur2ser urst4r ur4sw ur3s2ze urt2 ur3ti u3ru urü2 ur2z1a2 ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko us3oc u3soh u2s1op us1ou u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u5s4piz u2spo us2por u2spu us2sez us2sof ust3abe u1stal us3tau us2th ust2in us3tr u5s4tras us6tris u1stu u2stun u2stur us2ur u2sü 2uß 2u1t ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu uto1 uto4ber uto3c ut1opf u2tops ut4or utos4 u3tö ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut2spa utt4an ut3te ut5t4l utts2 utu4re utu5ru u3tü utz3eng ut2z1in ut2zo ut2z1w 2u1u2 uufe2 u1ü2 2u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe3c übe4n3 über3 üb3l üb3r üb2s3t 2üc ü1che üch3l üch2s1c üch5t4e ü3cken ück1er ück3eri ü4ckers ück4spe 2üd ü4d3a4 ü3den. üden2g ü3d2ens üd1o4 üd3r üd3s2 üdsa1 üd3t4 üdwes2 ü2f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üg4st üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühla2 ühl1ac üh1lam üh3l2e üh3mo üh3ne ühn2s üh1o üh3r2e ühr3ei. üh1ro ühr3ta üh1s ühs2p üh3t üh4th üht4r ü1hu üh1w ü1k2 ül1a ül2c ü3l4e ül2l1a ül2l1ei ül2lo ül2lö ü1lu ü2ment 2ün ü2n1a ün2da ün2dr ünd3s ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünn2s ün2s ün3sc ün3se ün3sp ün3str ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ürr2 ür2s ür3sc ür3se ür3sp ürt2h ür2zö ür2zw üs2a ü2schl üse3h üse3l üse1s üs2s1c üss2e üs2st ü2st 2ü1ß 2üt ü2t1al ü2t3r üt2s1 üt2tr ü1v ü1z 2v1ab va1c val2s 2vang 2varb va1s v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u 2v1au 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits3 ve3la ve4l1au ve3le ve3li ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 ve4rek verf4 verg4 ve3ri ve4rin ver3k ver3st vert2 ver5te ver3u ves1 2ve3sc 2ve3s2e ves3ti ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vid3s2t vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol voll1a vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 3voy vö2c 2v1p v2r 2v3ra v3re v4ree 2v3ro 2vs vs2e v1sta v1steu v3s2z 2v3t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les 2walm wal2ta wal2to walt4st 3walz wa3na wandels6 wang4s 1wann wa2p 1war2e ware1i war3ste wart4e 1was wa3sa wa4scha wa3sche wa3se wa3sh wass4e 1wäh 1wäl 2wäng 1wäs wäs2c 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we3cke. we5cken. we3ckes we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg3s4 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p weis4t wei3str wei4tr wel6schl wel6schr wel2t1 wel4t3a4 wel6t5en6d wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer2s wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese we2s1p we4st west1a west3ei wes2th west1o2 west3r wes4tu 1wet wet2s wett3s 2w1ey 2w1g 2w3h wi3cka 1wid wi2e wie3l wien2e wie2st wik2 1wil wim2ma wim4m3u win4d3e4c win2dr win2e 2wing win8n7er8sc 1wi4r wi3s2e wi2sp 1wiss wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s3 wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k ws2t 2w1t wti2 w2u 1wuc wuch4sc wul2 wul3se wun2da wun4g3r wun2s 4wur. wur2fa wur2s 1wurst wus2 wus3te 1wu4t1 1wüh wül2 wün3 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag x3a2m xand4 x2anz 1x2as 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. x2en xen3s2 x2er. x2ere 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is1 xis2c xi2se xi2so2 xis3s xis4tä xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3t2as xt1ä x2tän xtblo4 x2t1e2d x2t1ei x4tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt3s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere y2es. yes2p ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl3c y4le. yli4n yloni1 yl3s2 y2l1u yma4t ymp4 ym2pha ympi1 y2n1o yno4d ynt2 y1nu y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2po ys1pr ys3t4 y1s4ty y2s1u2 y3s2z y1t2 y2te. y2tes y3to1 yu2r yure3 y1v y1w y1y y1z2 2z3a2b zab3l za1c 2z1a2d 2z1af za3gr 3z2ah zah4ner 2z3a2k 2z1all 2z1am z1an za2na 2z3anf 3zani 3z2ank zan4kl 2z3anl 2zarb 2zarc 2z1arm z1arti zar2tr 2z1arz z1as za1st4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1ä4c 3z2äh 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zei1s6 zei3sk zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 ze2len ze2l1er ze2l1in zell2a zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zen5s4tr zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2sä ze3sc zes1e zes1i ze3sku ze2sp zessen4 zes6s5end zes2sp zes2st ze2s3t ze3sta ze2tr 2zetts 2z1ex 2z1f4 2z1g2 zger2a 2z1h z2hen zi3alo zi3ar zi2dei zid3r zie4lei zi1erh ziers1 zi1es. zil2e 2z1imp zim4t3 zin2e zin3ei zin4er 2z1inf 2z1inh zin1it zin2sa zin4ser 4zinsuf 2z1inv zi2o3 zi3op zirk2 zirk6s zi3s2z zi1t2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zon4ter zo2o 2z1ope z1or zo2ri zor4ne 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3sz 2z1t z2t1au z4tehe z3t2her zt3ho z3tic zt1ins z3tö zt3rec zt3s2 z3tü zu1 zu3a zub4 3zuc zu4ch zu3cke zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug1un 2z1uhr zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e zung4 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s4 zu5t zut2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 4z1z z3z4a zzi1s4 z3z2o zz2ö",
- ["length"]=99833,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=14982,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.lua b/Master/texmf-dist/tex/context/patterns/lang-deo.lua
deleted file mode 100644
index 029dd15b1b1..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.lua
+++ /dev/null
@@ -1,54 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="deo",
- ["source"]="hyph-de-1901",
- ["texcomment"]="% German hyphenation patterns (traditional orthography)\
-% \
-% (more info about the licence to be added later)\
-% \
-% dehypht-x-2013-05-26.pat\
-% \
-% \\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2013-05-26 (WL)}\
-% \
-% TeX-Trennmuster für die traditionelle deutsche Rechtschreibung\
-%\
-%\
-% Copyright (C) 2008, 2009, 2011, 2012, 2013 Werner Lemberg <wl@gnu.org>\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-%\
-%\
-% The word list is available from\
-%\
-% http://repo.or.cz/w/wortliste.git?a=commit;h=6199aa4827709d9995ac9a34ddc6551f1ba1eb6e\
-%\
-% The used patgen parameters are\
-%\
-% 1 1 | 2 5 | 1 1 1\
-% 2 2 | 2 5 | 1 2 1\
-% 3 3 | 2 6 | 1 1 1\
-% 4 4 | 2 6 | 1 4 1\
-% 5 5 | 2 7 | 1 1 1\
-% 6 6 | 2 7 | 1 6 1\
-% 7 7 | 2 13 | 1 4 1\
-% 8 8 | 2 13 | 1 8 1\
-% \
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü",
- ["data"]=".ab1a .ab3l .abo2 .ab3ol .ab1or .ack2 .ag2a .ag4r .ag2u .ai2s .akt2a .al2e .al5l4en .al4tei .alt3s .ampe4 .amt4s1 .an3d2 .anden6k .and4ri .ang2 .an3gli .ang4s2 .angst3 .an3s .an4si. .ans2p .an4tag .an3th .an3z2 .aos4 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .ar6t5erh .as6sest .as2t .ata1 .at4h .au3d .au4f3 .aufs2 .au2s1 .ausch3 .au6stes .ax2 .äm3 .är6schl .ät2s .äu3 .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .bus5sen .bu7sser. .ch2 .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .derma3 .dermas6 .de3sk .dien2 .do2mo .do1pe .dorf1 .dü1b .ebe2r1 .ehe1i .ei3e2 .ei4na .einbus6 .einen6g .ei2sp .ei4s1t .ei2tr .eke2 .el2bi .em3m2 .en1 .en4d3er .en5der. .en2d3r .en2gl .enn2 .en2t3 .epi1 .ep3p .er8brecht .er2bu .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .ers2 .er8stein .erster6 .er8sterb .er8stritt. .er8stritten. .er4zen4 .esel4s .es3p .es2st .es2t .est4e .est2h .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fe4sta .fi4le. .fi4len .fi2s .flö8s7se. .flö8s7sen. .flö8sses .fs4 .fu2sc .ga2t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .ge3r2a .ge3r2e .ge3s2 .get4 .ge3u .grif8fes .guss1 .haft3s .hal2s .hau2t1 .he2 .her3an .he3ri .he6r5inn .ho4met .ia2 .il3 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ken6num .ker3s .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4ve. .lo4g3in .lo3ver .lö4ss .lös3se .lu4str .ma3d .ma3la .mal4e .ma4str .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi2t .mm2 .näs5c .ni2e .nob4 .no2c .no2s .no4th .nul2 .nus2 .ob1a .obe2 .ohr5s .om2a .oper4 .or2a .ort2 .orts3e .ort4st .os5t6alg .oste2 .ost5end .osten8de .oste6re .ost3r .ozo4 .öl3l .pa4r1e .par3t4h .pe4c .pe4ste .pf4 .ph2 .poka2 .po4str .ps2 .rabe4 .ra3me .ra4sp .ra4s3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .ri2as .rich5te .ro4a .ro3m4a .rö2s1c .ru5s6ses .rü1b .rücker6 .rü4ss .sali1 .sas2 .sa5sse .säs4 .sä5ss .sch4 .scho7s8se. .scho7s8ses. .sen3s .ser2u .se2t1 .sha2 .si2te .ski1e .spas4 .spä5s4 .spiege8lei .st6 .sto4re .stras4 .sucher6 .tan4k3l .ta2to .te2e .te2f .te3no .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .to4nin .to4pl .to2w .tras3 .tra4ss .tri3e4s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .une4 .un3g .uni2t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .weg5s .wei4ta .wi4e .wor2 .wort5en6 .xe3 .ya4l .zeit3s .zel4la4 .zelle4 .zel6lei .zi2e .zin4st .zol2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k aar5sc aas1t aa2th aa2t3r aat4s1 2a3au a1ä a1b 2aba ab1auf ab1ä ab2äu 1abd ab1eb abe1e ab1eil 2abel abe2la a3beri ab1er2k ab1er2r ab1er2z ab3esse abes2t ab1eß 2abet 2abew 1abf 3abfi 1abg 1abh 2abi a3bil ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu abma3s 1abn a2bo. ab2of 1a2bon 2abor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abs4t2 2abst. ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in 2ack. ackmu4 ackmus3 ack2se ack3sl ack3sta4 a1cl a3co acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag adai4 ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ades2 ade3sp ades6s 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3sz ad2t1 adta2 2adu 2a1e1 ae2b ae2d ae2i a2ek a2ela a2ele ae2o3 ae2p 3a2er2o ae4sc a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r aft5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1am ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ages5s ag3esse age6stem ag3gl 3aggr 3a2git 2a2gl ag4la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3sah ag4sam ag3sc ags3p ag6spo ag4sti ag2s1tr 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh a1h2i ahin3 ahl3a4 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1o2s a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr4tri 2ahs ah2ta aht3h ah2t5r aht1s a1hu ah1w a1hy ai3a4 aian3 aid4s aids1t ai1e2 aif4 ai1fr ai3g4 a3ik. ai3ke ai3k4r ai2lo aim2o ain4a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e aiss2 ais3sen ais5st ait4 a3iv. a3ivl a3ivs a1j ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr ak3rau 3akro3 2aks ak3sh 2akta 2aktb ak3te ak4tei 2aktik ak2t3r ak3t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2a5la. al1ab ala5ch2 al1af ala2g al1age a3lal al1am alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala2s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 1algo 2ali ali4ene al2imb ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 al2l1ab alla3d al2lan al2l3a4r al6later al2län al3läu al4lec alle4gi al4leh al5lein al3lend all5erfa al3les alle3se al2leu 1allgä alli5er. alli7ers. al2lob al2lo2c al2lo2k al4lo2s al2lö2 all3öse al2luf allu4s al2lü4s al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1ope al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al2sum al3sun al4tak al3tar alt3eig al4t3erf alt1op al2tö al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä am2e 2ame. a2meb 2amel am4e2n1 amer2a am3erf a2meri ame3ru a4mesh a3met a2mew a3mi. a3mie 2a3mir a3mis ami3t2a ami3ti 2aml 2amm. am2ma2c 2ammal amma4n am2mar am2mas amma4sc am2maß am4ma4te am2mä ammen8ge. am2min am2mit 2amml am4mod 2ammt ammu2 amm3unt am4mü a2mö amp2fa2 am3pr 2ams am4schl 1amt. am2t1a am2t1ä am2tel am4t3ern am2tö am2t3r am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2anas an4at an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande4sc an2dex an4drau an2d3rü and4sas and6spas and6s5paß and2su 2andu and1ur 2ane an3ec a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi anft3s an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang3sc ang6s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl anma3s2 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 1anr 1an3s2ä 1ansc ans2en an2seu 2ansh 2ansk an3skr an3s1pa 1anspr ans2te an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr 2anto anton4 3antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i4 a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2a3pa 2ape a2pef a2pé a2pf ap2fa a3pfl a3phä a2ph3t 2ap3l ap4la ap2n a2pot ap2pf 3appl 2apr 3apri ap2str 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3ra3li 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein 4arem a3ren 4aren. aren4se are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2a3ri ar2ia ari3e4n ari3erd ari3erg ari5ers. ar1im arin3it a4r1int a4rinw ar2kal ark3amt ar2k1ar ark3aue ar2kl ar4k3lag ar2kor ar4k3ri ark3sa ark3she ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arp 2arr ar2r3ad ar2rek arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar3t2e artel6li6 ar2the artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as2ad as1ala asas2 asa3sse as3au asau2s1 a2sca a4schec asch3la a2schm a3schu 4a3s2e a4seb as3e2m a5s4es a4sex 4ash a4s3ha as4hi asin2g 4a5sis asi4st a3skop a4s3l a4sn a1so1 as1o2f a3sol as1or as1p a4s2ph as2pi a4spl as2po a1spu as3s2a ass2e as2s3ei as3sel as3ser asserma6 as3s2i as2s1p as4st ass1ti ass1to as5str as5stu 2asta a4stec a4s3tep as2ter a4stese 2astr as4trau a4strä ast3räu a2s2t3re a4strol a2stum a3su a4sw aswa2s 3a2syl aße2 aßen3 2a1t at1ab at2a1f at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c a2teb ateien4 at1eig a4teli at2en a2tep ate2ru atex3 at2h at3ha 4athe1 3athl 4a3ti atingma5 3atm 4atmus ato4man 4ator a2t1ort a2t1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si ats1p at3ta 3attac at4tak at2ta2l att3ang at4tau at2tä at4tec at2tei at3t4hä at2t3rä att3s at3tu atu2n atz1er at4zerk at4zerw at2z1i at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au3en. au2ere au5erein au2fa auf1an 3aufber 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 2auh au3ha au2hu 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s2 4aun au3n4a aun2e au4nei au2nio au1nu a4unz 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 1ausf 1ausg 1ausl au2so au2spr 1ausr auss2 3aussag au3sse aus4se. au8ssende au2sta 2auste au4stec aus3tie aust2o aus3tri 1ausü 1ausz au3ße a4ut au2t1äu au4ten4g au4t3erh 1auto 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4a3vi a2vr av2s 2a1w awi3 awi1e a1x ax2am ax2e axi2s 2a1ya a1yeu aysi1 ay3t 2a1z a3z2a3 az2o az2u ä1a äand4 ä1b ä5be ä2b3l äb2s ä1che äche1e ächenma5 ächenmas8 ä1chi äch3l ä2chr äch2sp ä1chu äck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf2s äft2 äft4s ä1g ä5ge äge1i äge2ra ä2g3l äg2n ä2g3r äg4ra äg2s äg3sc äg3str 1ä2gy äh1a 2ä3he ä1hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2äh2s 2äh3t ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl ä5le äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml äm2ma4 ämmas2 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l är4ment ärme3s är1o2 ä1rö ärse2 är2seb är2si ärt4e är2th ärt4s1 ä2rü är2zw ä3s äs4c äs4e äse3g2 äser4ei äse4ren äser2i äse3t ä5si ä4sko äskop2 äskopf3 äs2kr ä4sl ä4s1p äs2s äs4s1c äss2e äss3erk ä5sses äs4s1t äst2 äs2te ä4str ä4sw ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ä2t2h ä1ti ä1to ät1ob ät3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l äts1p ät2s1t ät4s3te ät4sti ät2tei ät2tr ä1tu ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äu4g3l 2äul 2äum äu2ma äum2s1 ä2un äun2e äu1nu 2äur äu1s 2ä3us. äu4schä äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äu3s2s äuss1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs2 b1a2dr 2b1af bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4lan balle4b bal6lerg bal4li4g bal4lok bal3lö3 2b1am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en ba4r3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2str ba4t3ent bauer4l bauer4s bau3g bau3s2k bau3sp ba1yo 3b2äc bä1ch b2är b2ä4s3 4b1b bbe4p b4be2se bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 1be. 3bea be3an be3ar 3beb b2ebe 1bec be1ch be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime be1imm b2ein be1ind be1in2h bei3s2 beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la bel3lä bel3li be2l3ö bel3sz bel3t4 1bem bema5sse bemas8sen 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 3bensv 2bentb b2enti bent4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran beras4s berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss berma7sse bermas8se. berma8ssen ber3na b1ernt be1rop berö4 ber3st4a be3rum ber2zö 3bes bes2a besä5s be2s1er be5slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol be4stor best4r be3s2ze 3bet be2tap be3tha bet2to be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 bflö4 bflös3 2b1g2 bgas1 bga4st bge3 bges2 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bie4str bik2a bi2ke. bi2kes bil2a bi2lau 2b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis4s1c bis3si bi2stu bi2stü b2it. b2ita b2ite bit4ta4 bi2tu bi3tum b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7s 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig b4lis b2lit 3blitz b2lo b4loc b3los2 blo3sse blös4s 2blun 3blut 3blü 2b1m bmas2 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo1ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig b1ort bor2t3r bo2sc bo3se bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra4sp bra4ss brast4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif b3rek 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio bro1 b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü brü4ss 4b1s b2sad b3sand bs3ar bsas2 bsa3sse bsat2z b3sä b4sär b5sc bs2ca b6schan b6schef bs4cu b3se. bs1e2b b3sel. bs1ele bse2n1 b3sen. bs1ent bs1er b2serf bs3e4r3in b2sers b3ses b3set bsi2t b4sl b2s1of bs1op bso2r b2sö b3s2pi bs2pl b3s2pu b4ss2 bs2t bst1a2b bst3ac bs3tag bst1ak bs3tät bst1er b4stern b2s3tip b3sto b4stob b4stod b3stö b3stra b2s3trä bs3treu b2st3ro b3stü b4stüb b2s1un 4b1t b3ta bta4st3r b5te b2th bt4r bts2 btü1 bu3ches bu2chi bu2e3 bu2f 2b3umk bunde4s b3ungn b2urg bu3r4i 2burn burt4s bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu4sses bu6s5term bu2s1tr bu2s1u bü1c bügel3e bü3s4 2b1v 2b1w bwel3 by1 by3p bys2 2b1z2 bzeit1 bzu1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t c4an ca2pe 3car car3n carri1 ca3s2a3 cas2t ca3t4h ca1y2 cä1 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen ce1nu 1cer cere3 ce1ro ce3s2h 1cet 2ceta ce1u 1cé c1f c4h 4ch. 2chab ch3a2bi 2ch1ak ch2anb 3chanc ch1ang ch3anst 2chanz 1chao 2char. 1chara 3charta cha2sc 1chato ch1ärm ch1äs 1châ 2chb 6chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 2chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 2chre chre3s ch3rh 1chron 4chs ch4stal chst3ri 2cht 2chuf 2chuh 2ch1unf 2chunt 2chü 2chv 2chw 5chy 2chz ci1c ci1es cil3l ci2s c1j 4c4k ck1a ck3an cka4r1 ck1ä ck1ehe ck1ei cke2ra ck2ere ck1erh ck2ern ck1err ck1ese ck1id ck1im ck1in ck3l ck3n ck1o2 ck3r ck4stro ckt2e ckt2i ck1um3 ck1up c4l2 cle4a clet2 clo1 1clu c2m2 1co co1ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cor3t cos4 co2te 2cp c1q 1c4r2 cre2 cre4mes cry2 2c1s2 c2si 4c1t cte3e cti2 cti4o ctur6 3cu cu2p3 cussi4 1cy c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho 4d3achse d1af d1ag dagi2o dah3l da1ho 3dai2 da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d2amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ars d1art 2dart. da2ru d2arw d1arz dasch4 da3s2h 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c dbu3s2 2dc d1ch dco4r 2d1d2 ddar2m d3dä d3dh d5do 1de de2ad de3a2t de3b4 2d1e4ben 3dec de1ch de3e4 2d1eff deg2 de3gl dehe2 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2d1elek 2delem 2delfm del4lan dell3eb del4lei del4ler del2lö2 de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del3t4 dem2ar 2d1emp d2en. de4n3end 4denerg d2enh de2ni den4k3li den2kn 4den4sem den4s3en den6s5tau den3th 2dentw de1nu 2deol de1on depi4so d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t d4erfi d2erh 4der4höh 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop derö4 der3r 4der4sat der4spa der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum d2es. de2s1a de4sa4g de4sam des3an des1än de4seh des1en1 des1et des1in 3desk des1o de2sor de2s1p des5s2 dest5alt de4stam de6stant de4stei de4stit dest5rat de3stri de3stro de2s1u deten4t 2d1etw de1un de1url de3us d1exi de2xis 2dexp 2d1f4 2d1g2 d2ge. dge2ta dge4t1e 2d1h2 d2his 1di di4ab di2ad di4am 3dic di1ce dich5ter di2e di3e2d di3end die4neb di3eni di3ens. die4s3c diet3 die2th dige4s dik2a dil2s3 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion5s di1p di4re. di2ren di2ris 2d1irl di2sp di3s4per 2d1isr dist2 di2ta di4teng di4t3erl di4t3erm di4t3ers di2t3r dit1s di2tu di5v diz2 2d1j 2d1k4 4d1l2 d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 dni3v d1ob d2oba 2dobe dob4l d2obr do1chi 2d1o2f doll2a do2mar do5na doni1 do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta dor4ter d2os. dos3s dost1 do4sta dot6h do3un d1ö dö2d dö2l3 dölla3 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri 3d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4ril d4rin. 3d4risc 2driß 3d4rit 4dritu d3rob d3roc 2d3rod d4roi drom2 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh drunge3 2d5rut drü1b 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse2t d2s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pa4s d2spä ds2po d3spri d2spro ds2pu dss2 ds3si dst4 d4stabe ds3tauf d4s3täti d4stea ds2til ds2tip d2s1tis d2stod dstras4 ds1ums d2sun ds2zen 2d1t dta2d dtam3m d3tea d2th d4thei dt3ho dto2 dt3r dtran2 dt5s2 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf 2d1ungl dun3ke dun2kl 2dunr dun4st3r 2dunt 2dunw du1o 5dur2c 2d1url 2dursa du4schn du4schr du4schw 2düb 3düf 3dün 2d1v2 2d1w dwa2 dwest1 dy1 dy2s1 2d3z2 2e1a e3a2b eab3l ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei e4aler. eal5le eal3lö eallö3s e2alti2 e2ame eam3m eam1o eam3t ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas5s eat4e2 eater1 e3ath eat3s2 e3at3t4 e3au2f e3aug eaus3s eau3st e3ä4 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en e3ben. ebens3e e3ber ebe4rel ebert4 2ebet 2ebl eb2laß eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebö2s 2ebr eb3rei eb4ru eb2s eb6sche ebse2 ebs1i ebs1o ebs1p ebs3pa eb4stät ebs3t2h eb4s3ti eb4s3tot eb3str ebs1u 2e3bu ebus3s ebu2t1 2eca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a eck3se eck4sta 2eckt 2e1cl 2eco eco3d 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e eden4se eden4s3p ede2r edert2 edi4al 2edip edma3s2 e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho eede3 eed3s2 ee1e e1eff eef4l eeg2 e1ei ee1im eein4se eei5se eel2e e1e2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi eera4 ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere4s1 ee4ret ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ees2 ee3sh ees3k ee3ta ee4tat ee2th ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat efäs4 efä5sse e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e3fen. e2fent ef2er 2eff. ef2fä2 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4s3to ege4str ege1u e2glo e2glu e2gn eg3ni egro5sse eg4sal eg3se eg4sei egs3e4r1 egs2pe eg4sto egs3tü eg2th 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä ehäs3 e1he eh4ec eh1eff eh2el ehe5na ehen2t3 1e2hep e3her ehe1ra e1hi eh1int ehis4 eh1lam eh1lä eh3le ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1ec eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of eh2s2 eh3se eh3sh eh3si eh3so eh3sp eh3sta e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3err 2eidn ei3dra ei1e ei3el 4ei3en eienge4 eie4s eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 ei4l3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom ein3n2 1einna ei2n1o2 1einri e4insa einsas4 einsa7sse 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei6schin ei4s3erw eis2pe ei3spru ei3s2s ei2str eistra6s ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek2u e3k2w e1la ela4ben el3abi el2abt el3a4der e3ladu el1af ela2h e2l1ak el3al e2l1a2m e4landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a4r el3ari el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e2ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r 2eli e2l1id e3lie e2lim eli2ne el1ita 2elk elks2 elk3sc ella3d el3lan el2lap ella2s el2lä el3läd ell3ein el3ler el2leu el3lie el2lil el3l2in el2log el2lot ell3sp el2lu2m el2lü 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri el2sum elt2ak 3eltern el3tes elto2 elt3r elt1s2 elt3se elt3sk 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2mans 3emanz emas8sens em4d3a2 e3m2en emen4t3h e6mentsp e2m1erw 1e2meti e2m1im emi5n2a em1int emi3ti 2emm em2map emma3u e2mop 3empf4 em3pfl em2sa em3se em2spr em3t2 3emul 2emü emü3s4 e2n1a 4ena. 2enac en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en2ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när enä4s enbu4s3 en2ce. en3d2ac en2dal endermas8 en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1ec e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e2n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng1s eng3sc eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r eno2s enost3 e3not eno2w 2e1nö en1ö2d en3sac ensas2 ensa5sse en2sau en5sche en2seb 3ensem ensen1 en2sep en3ska en3s2po enst5alt en4s3tät en6s5test 2ensto ens5trie e4nt ent4ag ent4ark 1entd en2teb en4terb en3tes 1entf 2entfo 1entga en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eos2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep2pin ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a6si era4sp era4s3s er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1ä4s erb2e er3br erb2sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in erd3erw 4ere. er1eb e3rech er3echs er1eck er1edi ere4dit er1eff e2r1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3r2em 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh e4rerl 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess er1eß ere4t er3eti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3els 1ergol 4ergrem e2rh 1erhab 4erhals er3he 4erhöhe er3hu 4erhü 2eri e2riat e3rib 4e3ric er1i2de e3rie eri3e4n3 eri5ers. e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä 2erkli er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row e1roz erö2d 2erök er1ös er3p4 er3rä erri3er 2errü ers2a ersch2 er3se er5sen er3s2i er3sk ersma3s4 er5smo er3sn er3sp er3sto er3sz ert2ak er6terei er4t3erf er4terh er4ters er2tho 4erti ert3ins ert3s2e 2ertür 2eru eruf4s er1u2m er1und er1uns er3uz erü4b 3erweck e1s e4s3ab e3sac esa2d es2an es4and es3ant e3s2as esa3sse esas6sen e4s3ato esäs4 es2äu 2esb e3sc es2ca es3cap es2ce esch2 e4sco e4scu e3se. es1ebe es3ehr e2sein es3eva 2esf 4esh es3ha es4har esi1er e3sig e2s1il es1ini e4s3ins es3int es2kat e4s3ke e4sky e4s3l es4log 2esm e4sn es2ort es2ö 2esp e3s2pek e3spi e3s2por e3s4pra e3s2pu 2esr es2sau 4essem ess4e3re ess3erg es3si 2esso es2sof es2s1pa es2spu es4ste estab4b est1ak e3stan e4starb 1e2stas es2tau es2te e4st3eng e4st3erh e4st3ess e5stev e3sti e4stip estmo6de e2stod est3ori 2estro es3trop es2tu e3s2tü es2ty e2s1um es1ur e4sw e3sy eße3r2e e1t e3ta. etab4 etal4la4 etal6li6n et1am 1etap etari1 et4at et1äh e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of e2torg 2etr e4traum et3rec e2tres etsch3w et1s2p et1su etta2 et2tab et2tad etta3ge et2ta4s et2tau et2tä et2tei ette4n1 et4teu et4th et2tö4 et2t3r et4tro ett3sz et2t1um et2tur et2tü4 etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif eu2e5sc 2euf eu2ga eu4gent eu3g2er eug1s2 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu1p2 e2u3r2e 1euro eu1s4 eu3sp eu3ss eust4 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo ev2s e1w 2ewa e3wä4 ewä6s 2ewe e2we. e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey2n eys2 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p 1fa 3fa. fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho fa2ci f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl falla2 fal4lei fal6lenk fal6l5er6k fal2li4 fal6scha fal6schl fal6schm fal3te 3fam f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br 2f3arc 3fari farre2 far4rec far4reg f3art 2f3arz 3fas. fa3s4a fa3sh f3at fa2to 2f1auf f3aug fau2s f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä4s fä6s3ser fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1ei3s fek2ta fe2l1a fel4da fel2dr 2f1e2lek fe2l1er fe2les fel3la fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fens2t2 fen6stri f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. fers2t f2ert f1erw fes4t fe2st1a fe4st3ei fe2str 2f1eta fe2tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ffa2b ffa2ce f3fal ff1ans ff3ar ff4arb ff4art ffa4s ff1au ffa2z ff2e ffe2e f2f3ef ff3ei ffe1in ffel3l ffe2m f2f3emi f2fetz f2fex f2fil ffi2xi ff3li f3flu f3flü ffo2 f2fö f3f4rä ff2sa ff2sp ffs1ta 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni 2f1int fi2o fi3ol fi2r fi3ra 3fis fis4a fisch3o fisch3w fi3so fis2p fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f5land f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop flo7s8ses. 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger flus3se f4lü f5lüd f5lüm 2f1m2 fma2d fmas2s fma3sse 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin for4m3a4g forni7er. for4sta for4sti for4t3ei for2th for2t3r fort1s for3tu 2f1o2x 1fö 2fö2f 2f1ök 2f1öl 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad f1rah fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein4 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc fri6ster f3roc 1f4ron fro2na fro2sc f3rot f3ru f3rü 4f1s fs2amm f2san fs3ar f2s1as f2sauf f2saus f2saut fsä4 f3sc f4sce f4schan f4schef f2s1e2b f4s3ehr f2s1em f2s1ent f2s1er fse2t f2s1eta fsi2d f3s2kie f2s1o2 f3span f2s1pas f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 f2stas f4s3täti f5stel f2stip f2s1tis fst4r f4s3tres fs1trü f3stü f4s3tüte f2sty f2s1un f3sy 4f1t f2ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f2t1ent f2t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f2t3ro f2trö f3t4ru fts1 ft2sa ft4sa4g ft4sam fts2c ft4sche ft2se4 ft4s3eh fts3el ft2si ft4stä ft4ster ft4stes fts2ti fttra4 f2tum ft1url ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2 fu3sse fus6sen fu4sser fuss1p fus4s1t fu2ß1er 3fut 1fü 2füb fü2r fü3s4 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1ch 2gadl 2ga2dr ga1fl ga1k ga2ka gal2a 2g1a4lau g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2s ga3sc gas3ei ga4sem ga3sp ga4spe ga4spr gas5s ga3s6ses gas3tan ga4st3el ga3str ga4stra4 gastras5 gas4trä ga4stre gas1tu gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs2 gä4u 2g3b2 gbau5s gber2 gbi2 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is4 2g1eise2 gei3sh gei4sta 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2g1e4lek geler3ö ge4l3ers ge4less gel3l2a gel3le ge3lor gel3sa gels2p gels2t gel3sz gel3t2a ge3lum ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe genma7sse. gen3n gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t germas6s ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer ges2c ges3elt ge2s1er ge3s2i ges2p ges4pi gess2t gest2 get2a ge3tan 2getap ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga2t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gia2s gie3g gi2e1i gi2el gien2e1 gift5s gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland gla4s3ti gla4stu 3g2laub 4g1lauf g1läß 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu2 2g3luf 2glun 4glu3s g2lut g1lüg g2ly 2g1m2 gmül3 g1n 2gn. g2n2a g4na. 2gnac 4gnah g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no1 g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i2 gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs5c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g3rek g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 gros2 2g3rose gro5sse. gro7ssen. gro7sser. gro5sses g4roß gro4u 2gröh g4ruf 2g3rui 2g3rum 3g4rup grus2s gru3sse 2grut 2g3rüc 3g4rün 4gs g2sa gs1ac gsa2d gs1af gs1ag g4s3a2k g3sal gs3all g4salt gs3ama g4s1amb gs3an gs3ar gs1as gs1ä g4sca g4sce gsch4 g4schef gs3cr g2s1e2 gse3e g3s2eil g3sel. gs3eli g3seln gsen1 g4ser g4seu g2s1i gsi2d g3sig g5sil gs3l gs1o2 gs1p4 g3s2pek gs4pie gs3pl g5s2por gsrat4 gs3s2 g3star gs1tau g4s1tä g5stäm g5stel g4stemp gst3ent g4sterm gst3err g4s3test gst2he g3sti gs1tis g3sto g4ston g4s1tor gs1tot gst4ra gst5reit gst4ri gst5rit gst3ros gs1trü g3stun gs1tü gs2tüc gs1u g3sy 4g1t g3te gti2m gt4r gt2se 1gu gu1an. gu1ant gu1as gu4d3r gu2e 2gued guet2 2g1u2f 2g1uh gu1ins gu1i4s 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2uns 2gunt2 3gur 4g1url gurt3s gu2s3a guschi5 gus2sp gus4st gu3sti gu2ß1 gu2t gut1a gu4ted gu4t3erh gut3h 2güb gür1 gü3st 2g1v 2g1w 2g3z2 3haa hab2a hab2e ha2cho ha2del ha4din h1adle haf3f4l haft2s hafts3p h1ah 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal4lei hal6lerf hal4leu hal4lok h1alp halt5r h1amt h2an. 2hanb h2and han2da han2kr h4ann 2hanr 2hant hao2s h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 ha2ß1 hatt2 hau5f6lie 2h1aufm h1aukt hau2sa hau2sc hau4spa hau4ss haus5sen hau4s3ti hau4sto h2aut. hau6terk 2hauto hau2tr h1äff h1ärz hä4s hä5sc hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad hea5t he3be he4b1ei he2bl he3br he5ch2e he1cho h3echt hed2g he3di he2e3l hee2s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1i4st heit4s1 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hell3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk hen3s2t2 h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b 2herap he3ras herau2 he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm herma3s he3ro he4r3o4b h1erö hers2t hert2 her3th her2z1w he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x2a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 4hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin2t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro his2a hi2se hi2spa hi3ti 2hiu 2h1j 2h1k4 hklo3s 4hl hl2ag hlam8meng hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läß h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit hl3l hlle3b hlma3s h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös3 hlö4ss hl2ser hl3sku hl3slo hlst4 hls2te hl2sto hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mas hma3sse h3maß h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3meist h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s1p h2mu h3musc h3musi 2hn h2na h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stra8s h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hns2t hnsuch4 hntra4 hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2c hoch3 hock3t 2hod hoe4 ho2ef ho4fa hof3fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hols h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo ho1ra hor3d 2h1org ho3sl ho2sp ho4sta ho2str 2hot. ho3th hotli4 2hot1s2 3hov 2ho2w1 h1o2x ho1y2 hô1 1h2ö hö2c h4ör hö4s hös1c hös3se h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3r2en h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h5rerlag h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3sch hr2s1en hr2ser hr2set hr2s1in hrs3k hr2s1of hr4stec hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se hrt4ste h3ruh hr1ums h3rü h4rüb h2ry hrz2 4h1s h4s3acht h2sa2d h4samt h2san h2sau h2säh hsä4s h3sc h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2sper h2sph hs2por h2sprä h2spro hss2 h2staf hst3alt h3st2an h4starb h2stau h2stäl h4stea h5stel hst2he hs1tie h2stin h2s1tor h3stö h3str hst3ran h2stu h3stun h3stü h2s1u hs2ung h3sy 4h1t ht1a h2tak h3t4akt. ht2al h2talo ht3alt hta2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h2tax h2t1är h3te. ht1ec h2t1ef ht1eh h3teha h3tehä hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit htelma4 htelmas5 h2temp h3ten h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1erh ht5erken h4terkl h6t5erleu h4t3erre h6t5er6spa h4t3er4st ht6erste h2t1erz h2t1ese h2t1ess h3tet h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in h4tl htni2 hto2 h2toly h2torg ht3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h3trec ht3reif ht3reit ht4ri ht5rieg h2t5rin h3trit ht3ro h2trol h2tros ht4rot ht3rös h2t3ru h2t3rü h4ts hts3an ht4s3end ht4spin ht3spri ht4stab hts2ti ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs ht3z2 hu2a hu2b1a hu2bei hu2b1en hu2b3l hu4b3r hu2bu hu2h1a hu2h1i huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu4ler hu2let hu2l1in hul3l hu2lo hu3ma h1ums hu2n h1una hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus3se hus2sp hus4st hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg hyl4 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3al5l ia2lor ial3s ial3t4 ia2lu ial3z2 i2am4 i4amo 2ian ia2nal i3and2 ian2e i3ann i2a3no i3ant i3anz i2ap ia3pf ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a1sp ias5s iast4 i3at. i3a2ta i4ate i3at4h 1iatr i3ats i3au ia3un iau2s1 2iav 2iä i1äm i1äp i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib3be ib2bli ib1ei i2beig i2beis ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibus1c ibus3s 2ic ic1c ich1a ich1ä i1che ich1ei ichermas8 ichgro3 i1chi i2chin ich3l i3chlo ich3m ichmas4 i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci icks2 ick3sa i1cl i1d id2ab4 i3d2ac i3dam id2an i2d1au 1i2dee idein3 i4deis idel2ä ide3sa ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g3l ie3g4n ie2g3r ie3g4ra ieg2s iegs1c ieg4se ieg4s1t i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i1ell iel3lä ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä ien3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm ienma3s4 i3enn i3e2no i3enö i3enp i3enr ien3s2e iens2k ien6st5er ien6stop iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k4 ierken4 i1ern i3ern. i2er5ni ie2rö iers2e ier4s3eh ier3sta ier3te ie3s2 ie4sh ie4sk ie4spu ies4s ie5sset iess1t ie4stas iest6e ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie2t3ö2 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fa iffe4s if6feste if2fl if4form iff2s if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if3sa if2ta ift3erk if2top if2t3ri ift1sp ifts2t ift3sz 2i1g iga1i i2g1ang ig1art iga3s i4gefar ige4na ige2ra ige3ran igerma3 ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu ig4no i3go ig4ra ig3rei igro3 ig3s2a ig4sal igsau4g ig1so ig4sti ig4s1to ig2stö ig4s3tre 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ih2s ih3sp i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2k1är ikbu2 4ike i2k1ei ike2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 ikot3t i2köl i2k3ra ik3rä ik3re ikro3 ik3so ik3s2z ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 4ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1ec ileid4 il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s1 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il4lad ill4an il2lä2 il2leg ille4ge il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or il3t2h il3tr i1lu2 i2lum i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2meg i2mej i2mek i2m1ele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im4m3ent im4mit im4mod imni2 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2str 2imt imtu2 2imu in3ac i4nack i2n1ad in2af ina4lin in1am i3nap in2ars ina4s i2n3au2 inaus1 in1äh in1äs in2dal in2dan in3dau indes4t 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng inenma3 inenmas6 in3erbe i4nerbi in2erh iner4lö i4n3er4tr i3nes i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ingmas4 ing3sc 1inhab 2inhar 2inhau 4inhe in2i3d 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn ink4ste in3k2ü inma4le 2inn. in4n3erm in2neu in4ni2v 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or inos4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 2inse. in2seb 2insen ins3ert in3skan in3skr in4s3tät ins2te ins2ti in3su 1insuf in4s3um in3s2z i4nt 2inta 1integ int2h in3t4r int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o ioa4 io1c io2d i2oda io3du io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3on4s1 ions3p i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en i3p4l ipo6i5den ip2pf ip2pl i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak ira4s irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek i3ré irg2 ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron i1rö irpla2 ir2rei ir8re8ligio irr2h irs2 ir4schl ir4schm ir4sch3w ir3sh irt4s1t 2iru iru2s1 i1s i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot 2isp is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is3sc is4s3che is3senk issermas8 is3so is3spa is4sper is3spi is3spo is2s1t is3sta is4ste is3sto is3stu is2su i2stab ist3ac i4stam ist2an i4stea iste4n is2ter ist4ra is3tras3 ist3re is1trü i2stur is1tüm i2sty isum3p i2sü i1ß iß1ers i1ta it1ab. i3tag ital1a ital5l it1alt it1am it1ang it3a4re it1art i3tat it1au i3tauc i2tauf i2t1ax 4i1tä i2t1äs ität2 i1te i2tei i4t1eig i4t1ein 2itel ite2la ite4n itens2 i4tepo i2tex i3thr i1ti i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn i3tis i3tiv i4tl itmen2 i1to i3toc i2t1of i1tö i1tr i3tra. it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa it4s1a4g it2s1e4 its3er1 it4set its1pe it4stec it4s3tem it4s3tes it2sti it4stie it2sto it6stra6s it2teb it4temp it2tri i1tu it1uh i2t1um i2tuns it1urg itut4 i1tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 ius1t i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em ixt2 4i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l jah4rei jahr4s ja3l2a ja3ne jani1 jani3t2 2jat je2a jean2s je2g jek4ter jektor4 jek2tr je3na je2p je2t1a je2t3h je2t3r jet3t je2t1u2 ji2a ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung5s ju3ni jur2o jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kal3lö3 kalo5 kal2tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw kasi1 ka2sp kas3s ka3tan ka3t4h ka2t3r kat3se 2katt kau2f1o 4kaufr kauf4sp kauf6s5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 2k1ärm kä4s5c käse3 kä3th 2k3b2 kbe1 kbo4n kby2 2k3c 2k3d2 kdamp2 2k1ec k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehrs3o kehr4st 2k1eic 2k1eig k1ein ke1in2d 2keinh 2k1eise ke2l1a ke3l2ag ke2lä kel3b4 2k1e2lek ke2len ke2l1er 2ke3let kel3la kell4e kel3li kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kenbu5s4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5s4te ken3sz k3enten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad ke1ral k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke2t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1ch 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o kin3s 2k1inse 2k1int ki3or kio4s 5kir kis2p kis5s kist2 kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor klos2 2klos. klo3sse klost6 k2löt k1lu k2lud kluf2 k2lug k1lüc 2kly 2k1m kmas2 k2n2 3knab k3ne k4nec k4nei 2knes kni4e kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol2a ko3le kol2k5 3kom ko4mu k2on ko3n2e kons4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n3a k2os ko2sp ko3ta kot1s2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k4ral kra4s3 k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron kro4ss 2kruf krü1b 2k1s k4s1amt k2san ks4ana k2sau k2s1äl ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu kss2 kst4 k2stal k4s3tanz kstat4 k4stea k2s1tis k2s1tor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad k3tag kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktau2s ktä5s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras kt4ro kt3run kt3s2 ktt2 k2tuns kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 2kulp 2k3uml kum2s k2u3n2a kun4s kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e ku2ro kur2sp kur4st ku4schl ku2sp kus3ses ku2su ku2ß 1kü kü1c kür2s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb 4l3aben 2labf 2labg 2labh 2l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a4dr l1adv 2laf la2fa laf1r laf3t la2ga la2gio la2gn lago2 la2g1ob lag5s2e 2la1ho 1lai lai4s1t la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min lammen8ge 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 3l2and lan2da2 land3ad lan4d3au lan6d5erw lan6d5erz lan2dr 2lanf lan2gl lang3s2 l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi 2l1ar3t l3arti la2ru la2sau 4lasd la5se 2lash 2lasi la2so 2la2sp 3lasser la2sta last1o la2str las3tur la2stü 1la2ß3 lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2ta lat4tal lat4tan lat4t3in lat2t3r 1laub. laub4se lau2fo 1laug 3laun l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lä1c 2läf 2l1ähn 1länd lär2m1a l1ärz lä4s5c lä4s3s 4lät 2läub 2läuc 2läue 1läuf 1là 4l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb3si lb4sk lb3sp lb4st1e lb4sto lb2u l2b3uf lbus3s lbzei2 2l1c l3che l5chen lchermas8 l3chi lch3l lch3n lch3r lch3s lch3ü lch1w l3cl l3co 4l1d ld3a2b1 l3d2ac ld3ack l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a4r ld3ari l3das ld1au ld1är l3de. l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex ldi2c l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa lds2t ldt4 ld3th l2d1um ldy3 ldys2 1le 3le. le2a le3an le3ar 3le3ba leben4s le2bl 2lec le2chi lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl 3leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig l2ein. leinbu4 leinbus5 l2eind lein4du l2eine lei6nerb 4leink l1einn l2eint l2einu lei6schw lei6ss5er lei4str lei4ßer l2eit lei2ta lei8t7er8sc lekt2a 2lektr 3l2ela 2l1e2lek lel3s 3lemes le2m1o2 4lemp l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 4l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lep4pi 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lergro3 lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k ler3t 3lerw l4erwa 2lerwo 2l1erz l2erza les2am les2e 2l1esel le3sh lesi1 le3sk les3s leste3 4lesw 2lesy le2tat 2le3th 2leto let2to2 le2u 4leud 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfäs3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf4s1ti lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lgoa3 lg3re l3gro lgro3s lg2s lg4s1t 2l3h2 3lhi. 1li 3l4ia li3ac li3ak li3ar li3b4 libi3 li1c 3lic. li3chi 4lick li3d2a 2l1ido li4d3s l2ie liebe4s li3ene lie4s3c lie5sse lie4sta lif2fo 3lig lig4n li2gre lig1s li3ke li3ko li2kr lik2sp lik4ter li3l2a li3li li3m2a 2l1imb 3limo 2limp li3n2a lin3al 2l1indu li4ned li2nef li2neh li2nep li2nes 2l1inf ling4s3 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2l1int l1inv 2linz li2o li4om lion5s li3os. li2p3a 2li2po 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i2so li2sp liss2 2liß li2tal li3te li1t2h lit1s2 lit3sz li2tur 3liu liv2e 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lk4stä lk2ü 2l1l ll1abb lla2be l2labt lla2de ll1aff ll1akt l3l2al l2l1a2m ll3ama lla2n ll2anw ll1anz ll1arm lla6tern l2lau ll3aufg ll3aufk ll3aug ll1aus l4lausf l2la2w l2läd l2l1äm l2läu llb4 llch4 ll3d4 l2le2b l3lec ll1ech l2l1ef lle2gu lle2he l2leib ll1eim ll3eise ll2em l3len. lle4n3a ll3endl llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll6erwei ll2es l2le2se l2leuc l3leur. l2lex llf4 llg4 l2lic l2lieb l2lieg l3lik lli4la ll1imp l2l1ind l2l1ins llin6sen llk4 ll5m lln2 ll1ob l2lobe l2lo2d l2l1of llo2gi ll1opf l2l1o2r l3lor. l3lore llo2te l2l1ou l3löh ll3sä ll3sh ll3s2k ll2spr ll4s3tor ll3t4 llti2m llt5s2 llu2d llu2f llu2me l2lu2p ll1ur llust6 l2lüc llü2d ll3z2 4l1m l3ma. l2m3a2b l2marc lm1art lmas2 lma3sse lmä2s lm1ä4st lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins lm3m l2möl lm3p lmpf4 lm3s2z lm3t 4ln lna4r ln3are l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri 3lodr l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min l4on lo2n1o lo2o 2lopf lop2pr 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4steu lo2s3to lo2s3t4r lo2ßu lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lpi4p lp3t4 l3pu 2l1q 2l3r2 lra4ss lrat4s lrom2 lrö4 lrös3 lrut4 lrü1b 4l1s l3sac l2sa2d l3s2al l4s1amb l4samt l2sanf l2sang l2sann l2sanz l3sare l2sau2 ls2äm lsä4s l4schin l4schmü l3se. l2s1e2b l2s1ec l2s1em ls1ere ls1erg ls1erl l2s1ers l2s1erw l3ses l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3pun ls3s2 lst2a lstab6 ls2taf l4s3täti l2s1tis l2stit ls2tr ls1um l2sun lsu3s 6l1t l2tab ltag4 lt1ak lt1am l3tami lt3and lt1ang l4tarm lt1art l2t3ato l2t1au l3te. lt1eh lt1ein l2t1eis lte4lem lt3eli l3t2en l5ten. lten6gel lter3a l3t2erg lt2erö lte3se l2t1esk lte3str l3tet. lte2th l2t1eu l2th l3thas l4thei lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tön lt1ös lt1öt lt4rak ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l4ts lt1spa lt4stab lt5ste ltt2 lt1uh l2t1um ltu4ran ltu2ri lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lug3erp lu4g3l lu2go lu2g3r lug3sa lu2gu 2l1uh lu1id. lume2 2lumf 2lumk 2luml l2ump 1lumpe 2l1ums l1umw 1lu2n 2l1una 2l1unf 4l1uni 2lunt 2lunw 4lu2o lu2pf 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c lus3sen lus2s1o lus2s1p lus4s1t 1lus2t lu2st1a lu4stä lu3str lust3re lu2s1u 4lu2ß1 lu2t1a lut2ed lu4teg lu4t3erg lut1o2f lu2top lu2t3r lut5schl 3lux 2lüb 2lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o lys2 ly3te ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1äp l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lzug4s lz1w lz2wec 1ma maa2 m1ab m2abe 2mabk m2ab4r 2mabs 2mabt ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers 2magm ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3le mal2er mali1 mal3l mallö3 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann m1ans m2ans. 2mansa 2mansä 2mansc 2mantw 2manz ma2or 2m1apf m2app 2m3arb mar3g2 mar2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m3arz 3mas. ma1s2pa 2m1aspe ma3sses mas6ses. mas6sest ma6sset ma3s2su 3mas2t ma2ta2b ma2tan mat4c ma2tel ma4t3erd mat3se mat1sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 4m1änd 3männ m1ärg mä1t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby2 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega3 3meh 2m1eif 2m1eig mei3l2 mein4da m2eis2 me1i2so me3lam me2lau 3meld me2lek me2ler melet2 2melf. mel2se mel2sp mel3t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta 2mentn 4m3entwi me1o 2meou 2meö 3m2er. me1ra me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes me2sal me2sä mes2e 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p meste2 me2str 4mesu 3me2ß1 me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1ch mi3da mie3dr mi2e1i mie3l mi2er mierer4 mi2et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che 4milz 2m1imp min2en min2eu min2ga mi3ni 3min2o mi1nu 3minz 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis4s1c mis4ser mis3si mis4st mi2sta mi2ß1 3mit1 mi2ta mi2th mi2tr mit3s2 mit5sa mi3tsu mit3ta mi2tu 4mitz 2m1j 2m1k4 m3ka mk5re. 2m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2mans mm1anz mm1art mma2ß m2m1au mmä4 mmd2 m2me2c m4meh m2mei mm1ein mm3eise mme4lin mme4na m4mentw m2me2nü mme2ra mme4rec mme2s3a m2me4te mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc m4mita mmo2du m2mo2l m2mor mm3p2 mmpf4 mms2 mm3te m2mum mm2un m2mus 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 2mol. 3mom mom2e 3m2on mo3ne mo4n1er mon3s 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer 3mos mo3se moster4 3mot m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi m4p3lem. m2p3len m2p3les mp4lif m3pon mpot2 mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and ms1as m3sä msch2 m4s1ef ms1erf ms1erw ms1ini mso2r ms1ori m2spä m2sped ms2por m2spot m2spro ms2pu ms3s2 m4stag m2stal m2sü 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m2t1erg m2t1erl m2t1ers m2t1ert m2t1eta m2t1eu m2th mt3ho m2t1im m2t1ins m2tint mti2s mtmen2 m2töl mt1ös mtra4s3 m2trö m4ts mt2sa mt2s1e mt3s2ka mts1p mt1spa mtt2 mt1um mt1urt mt3z 1mu mu1a 2m3uh 3mul mu3la 4muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f 3mus. mu4s1a mu2s1o mu2sp mu3s4se. mu3s4ses mu2s1to mu2str mu2su muße3 mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül2 mül3lu 3mün mü3s4si 3müt 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4t3 mwu1 1my 2m1z mzug4 1na 3na. 2n1ab na2bä na3ber 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2a2c nach1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3la nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly 3name na3me. n2amen namen4s3 4n1a2mer na3m4n 3namo nam2sp 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3naß 3nat n4ata na3t4h 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 2n1ä2m 2n1än n1ärz 3näs nä4sc n2ä6s3s 3näß 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbu3s nby2 2n1c n3ce2n3 nch3m 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6laß nder6läs nde4rob nde2s ndes1e ndi2a3 n2dob ndo2be nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2drui n4d3run nd2sor nd2spr nd3th ndt4r n2duns n2dü ndy3 1ne 3ne. ne2ap nea4s ne3at ne2bl 2n1ebn 2nec 3neca 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la4 nel4lif 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n2en. n2en3a2 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n1erk n2erli 2n1erlö nerma3 nermas4 ner4mit n2ern. 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz n2es n4es. nes2c ne2sei ne2sev ne3ska nes1o ne2sor ne2s1p 4n3essi ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt2 n3far n3fi nfi4le. nf4l nf5lin nflös4 nf2o nf4r nf2tan nft2o nf2t3r nft2s nft4ste n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g1a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a ngens2 n3ger nge4ram n4g3erse ng6es nges2t nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngro3s ng2s ngsa4g ngs1ah ngs3au ng4s3e4h ngs3pa ng3ts n2gum 2n1h2 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nibu2 nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n ni3ene ni1ero nig2a 2n3i2gel nig3r ni2gre 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl nikma3 ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis5s2 ni2stu ni3stun ni2s1u 2nit ni1th ni2ti nit4r nit4tec nit4tie nitt4sa ni3tu 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3au4s n2käh nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2sal nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s nmül3 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nn2erh nn2erk nne2rö4 n4n3er4wa nner2z nne2s1e n2ness nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3se nn3s2p nnst4 nn2th n2n1uf n2n1unf nn1ur 1no 3no. no2bla n2o3ble 3noblo 2n1obs no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3se no3sh no2s3p no4ss n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l nö4s3s n2öt 2n3p4 npa2g npf4 npsy3 2n1q 4n3r2 nra4s3s nräu3s nre3sz nrö2s1 6n1s n2sa2d n2sall n2sang n2sant n3s2arg n2saus n3sav n2s1än nsä4s n2s1äus ns2ca n3schu nsch7werd ns1eb nse2ha2 nseh5ere n3senk nsen4sp ns1ent ns1erf n4serfo ns1erg n2serh n3seri n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n2simp n2s1ini nsinn4s nsi2te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 nspas2 n2spat n4speri n2sph ns2pi n2spo ns3pon n2sprä n4s3prie n4spro ns3s2 ns2t1ak n2stas n4stat. n4s3tate ns2tau n5s2te. n4st3eif n5stel ns4tem. ns4ten. n4stent ns2ter ns3term ns4tes. n5steu ns2tob n6stoffi nst5opfe ns2tor n4strac n6strieb nst4ru ns2tum nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns2unr n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt4at n2tauf nt1äm n2t1äu n3te. nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei n3t2en nt4ene nten6te. n3ter ntera4 nte4ras nt4ern nt4ers nt4ert n2t1ess n3tet nte3v nt2her n2t3ho n3thr n3t4hu nti3k4l n2tinf n2t1inh ntini1 n3tit nt4lem ntmen2 ntmo2 n3to nton2s1 ntras3s nt3rec n3t4ree nt3reif n3trep nt4rig n3trop n2t3rü n4t1s nt3sa nt4sau nts2o nts2p nt4s3par nts2ti nt4s1to nttü3 3n4tu. ntum2 ntu2ra ntu4re. ntu4res nt3z 1nu. 1nu1a nu3ar nubi1 1nuc 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl nu4s1t 1nu2ß 1nut nu2ta nu2t3r 1nuu 1nux 1nuz 2nü4b nür1c 1nüt 2n1v2 n3ver nvol7ler 4n1w nwei4st 2nx 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nze4l3a nzel3l n4zense n4zentw n4zentz nz3erwe nzi2ga n2zinh nz1ini nz3le n2zor nz2öl nzug2s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oak1l o4a3la o4a3mi o2ar o2a3s 3oase oa4si o4at oa3te o5au o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi2t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re o3bri obs2 ob3sh ob3sk ob2sta ob3sz 2o3bu obus3s 2o3bü 2oby2 2oc oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r ocht4 och3te o1chu ochu2f och1w o1ci ock2er ock3sz o1cl o3co o1ç o1d o3d2a od2dr o3deb ode2c o3d2e1i odein3 ode2n1 odene2 o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2odu 2o1e oe4b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1ac of1au o2f1ei of2en o3fer of2fa of2f1in of2fir of2fix 1offiz of2f3l of2fo of2f3r offs2 off3sh of2fu of2fü 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr ofstra8ssen of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i ogenmas6 o3gh ogi2er o3gis og2lo o3g4n ogoi3 og2s og3sc og3si og3s2p o1ha o1hä o1he o2h1eis o2h1ert o2h1erz o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n3ac 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la o2h1o2p o2h3ö ohr3a oh4rin oh1ro o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. oi3se o1ism oiss2 oi4st 2o1j 2o1k oka2la okale4 o3kat 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp olf3st ol2gl ol2gr ol2i oli3k4 oli3tu ol2kl olk3r ol2kre ol2la2d ol2lak oll3ans ol2las ollä2 ol4l1ec ol4lei oll3ein ol2l1el oll5ends ol4lerk oll3erw ol4li4st ol2lo2c ol2log ol2lö2 ol2lu ol3lus o3lo ol2of olo1p2 ol1ort ols2t ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3meis o2mel o2mene o2mep o2meru om1erz om2es omiet1 omil3l o2m1ind om1ing om1ins o2m1int om3ma om3me om3mu om1org om3pf omp4l oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal ona4lin on1ap o2narb on2au 2onä onbe3 2onc onderer5 2one one4i one2n1 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4n onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on2seb ons3e2l on4sh onsi2d ons3l ons1p onst2h on3t2a on4t3end ont3erw on2t3ri o1nu 2onuk on3v 1ony on3z o1ñ oo2k3l o1op o1or oo4sk oos5s oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan o1pec o1pei o1pe4n 2opf. op2f3a op3fah op4ferd opf5erde opf1l opf3la op1flü op3for 4oph2 o3phe o1pi opi5a2 opi3er. opi5ers. opin2 op3lag o2p3le op3li 2o3po op4pl 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2oral o2r3alm or4alt 3or2am or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 2orda or2d1am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords or2dum 2ordw 4ore ore2a ore2b o2r1eck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s2 or3g4a 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins 2orit ork2a or2k3ar ork4r ork3s 2orm or4mans or4ment 2orn or2nac or2n3ar or2n3ä or5ne. or3n2o 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3re or3rh 2ors2 or3s4a or3sh or3si or3sz or2t1ak or2t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the or2tin ort3ins or4t3off or2tor or2tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un orus3 o2r3ü o2rya o1s 2o3s2a os3ad os4an osch3ar o4schä o3sche osch3le 2ose ose3e o2s1ei ose2n 2osh o3s2hi 2osi o3sk o4s3ka os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1ac oss3and os4sä o6ssel o3ssem oss3en4k o3ssent oss3enz os3si os2s3o os4son os2s3p os4s1t os2su os2t o2st1a2b o3stal. o4st1am ost3ang osta4s ost1au o4sterd oster3e ost5er6we ost3h o2stin o4s3ton. ost3ran o2st3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf oß3t 2o1t ota2go o3tark o2t1au ot3aug o3tax ot1ä otäugi4 o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot4em3 otemp2 otens2 o2t1erw 4ot2h ot4he ot5hel o4t3hi ot3hos o2thr o2til o2t1i2m ot2in o4tl otli2 ot4ol ot1opf ot2or oto2ra o3tra o2t3re ot3rin ot2sa ots1p ot2spa ots2pe ott1a ot2tan ot2tau ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oung5 oun4ge. oungs2 o4up 2our ouri2e our4ne. ou3s2i ous2t outu4 2ouv 2o1ü o1v 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r ö1ch öch1l ö2chr öchs2t öch4str ö1d öde1r ödi3 1ödu ö1e 1öf öf2fa öf2fl öf3l ögen4s1 ög3l ög3r ög2s ö1he öh3l2e öh3ri öh2s ö1hu ö3ig. ö1ke ö2ko ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl2f1ei ölf3s öl1im öl1in öl2k3l öl2la2 öllma4 öllmas3 öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w ö1m öm2s ön2e ö3ni önizi1 önn2e ö1nu öo1 ö1pe öpf3l ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö1s ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw 2öse ö2s1ei ös4en ös4es ö2sp ö3s2s ös4s1c ös3ses ös3set ös4st ös4t ö2sta ös4u ö1ß ö1t ö2t3a öte4n3 öt2h öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa1s2p pa2ßu pat1a pat4c pate2 1pati 1pat4r 1pau p3auf pa3uni 1pä 3päc 3päd 3pär 3pä4s3 pä4t1e2h pä4t3ent pät3h pä2to pät3s 2p1b pbe1 2p3c 2p1d2 pda2 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 3pel pe2l1a4 pe4lein pe2let pe2lex pe3li4n pe4l3ink pel3k pel3la pel3lä pel3l4e pel3li pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o pens2 3pensi 1pensu penz2 1pep pe1ra per2an 1perle per4na 3pero per2ra2 perr3an per4rä2 per4ric per6rieg 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pes2t 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 pffa3 p2f1ins pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra pfs2 pf3sl pf3sz pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d2 phen3s 2ph1ers 2phf 2phg phi2ka 2phk ph2l 2phm 2phn 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a1 pia3k piap2 pia3s pi3as. pi3chl p4id piegelei8 pi2el piela2 pie4lei 1pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi4pel pi3ri 3pirin 3pis 4piso pis2t pi3t2a pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3pla p3lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler p3lic p3lif 2plig p4lo 2p3lu 2p1m2 pma1 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li pol3lo po4lor 2pond 2ponn po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau porf4 2porn por4tre por4tri po3s2e pos4t po2sta post3ag po4stä po4st3ei post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppa2p ppe1e ppe2n1 ppf4 pp1fr p2p1h p3p2ho pp3lä p2p3le pp3oh ppp2 p2p3ra pp3ren p2pri pp3sa ppt2 p3puc p2pul p2punk p3pur p2r2 1prak pra4s3 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 2preg 1prei 3preis prei4ss 2preiz 2p3rer 3p4res 1preß pri4e 2prig 3prinz 1p4ro1 3prob 2proc 3prod 3prog 3proj 2pross 2proß 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po ps2te pst3re p2stu 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w ptpo4 p2t3r pt1s2 ptt2 pt1um p3tung pt1urs p2tü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 3pulv 2pund pun2s 2punt 2pur 3put put2s 1püf 2pül pül3l 2p1v 2p1w pwa4r 3py1 py3t 2p1z qu4 quel4la 1queu qui3s 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2a3b2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin rachter6 racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad3t 1rae r2af raf3ar ra2fer raf1r ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la4 ral3ab r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la ral5l2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t 2ralta r4alt2h ra2lu 3raly r2ame ra2mer 1r2ami ram4man ram6m5ers ram4mit ram4mu 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra4r1in r2ark 2r3arz r2a3s2 r4as. ras4a ra4schl ra5sen ra5si ra4sk 2rasph ra4ssi 2raß 1rat ra2t1a ra3ta. ra3te rat4r 2r3atta 4ratz 4rau. 3raub. 4raud 4raue rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp rau4sti raus3tr 4raut raut5s 1raü r2ax raxe3 raxi4s1 räch4s 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sa rä4sc rä5sse rä2st 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä r3ben. rb1ent rbe3r2e rber4gl rb2la rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rbmas3 rb2o rb4ri rb2sa rb2sei rb3ska rb2s1o rb2sta rb4stä rb2stu rb2su rb2u rbu2sc 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rchs2 rch3sp rchst4r rch3t2a rch6terg rch6terw rch1w r1ci r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d2 rde3re rder4er rderin6s r4d3ernt rde3sp rdga4 rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os rdo4st r2dö rd3rat rd4ri rdrü4 rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. 2recki 3red. 4redd 2redi re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 reis5tro re2ke re3la 2r1elb rel2e relea4 re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen re3ri r1erk 4r3erken r2erki 2r1erl 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa res3an re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest res3tem re2stu 3resu 2re2ß1 re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f rfall4s rfäs3 r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü r3for rf4ru rf4rü rf2sa rf2s1ä rf2s1id rf2spr rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rga5ssen rgas2t rga4str rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan rgleich8s7 r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rgro5sse r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 2r3her r2hoe rho2i3 2rhol 2rhö 2rhs 1ri ri3am ri3at rib2bl ri1ce ri1cha rid2 ri2dan 2ridol 2ridy r2ie rieb4s3t rie2fr ri1el ri3els riene4 ri3eni rie2nu ri1er. ri4ere ri3e4sti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 4rimp rim2s r2i3na 2r1ind rin4dex rin4diz 4rindu ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 4rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins2 3r4ins. rin2so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris4a ri4scho ri4schw 3risik rismu2 ri3so ri2s1p 3riss ris3si rist5ers ristes4 ri6stess ri2ß1 r2it r3i2tal ri3t2i ri3t4r rit4tei rit2tr 5ritu rix1 ri3xi 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk2um rku2n rk1uni rkus3s rku4s1t 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i rle2st r3let r3l2i r3l2o rlös5s rl2s1p rl2s1to rl3t r3lu rlu4str rlz2 4r1m r3m2ag rma2la r2m1ald r2m1ank rm1anz rm1a2p r2maph rma5ssen rmas8sens rm3d2 r3me. r2m1ef r2meo r2m1erp rm2es r2mide r2m1im rm3m rmmo3 r2m1o2ri rm3sa rms2t rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna4r rn2arb rn3are rn3ari r2nau rn3d4r r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1ch 3rock. 4rockn r2o3de ro3e2 4rog. 4rogs roh1l 3r2ohr 3roi ro3le rol4lan rol3l4en rolli4n rol6lini 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ro2pf ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3se ro3sh ro5s2i ro5smo ros6san ross1c ro3sta ro2st1r ro2ßu ro2tag ro2tä ro2tei ro2tho ro2tri rot1s rots2o ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl rölla4 3römi 4röp r1ör r2ös. 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli r3po rpo4str rps1t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rra4s3s rrat2s rr1äm rrb2 rr1c rr2e rre4ale rrer4s r3res r2rew rr2he r3r4hen rrik2 rr2n3a rr2o r2r3ob rro3m2 rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2sa2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ar r6scherl rs1ebe r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3sho rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no rson4e r2s1op r4s3ort. rs2p4 rspa3s2 rs4pel r2s3ph r4s3s2 r5stad r4stant rs2tau r6st5eing rster2 r6sterbt r4st3erw rs2th r5stim rst3ing r2stip r2s1tot rs2tr rst3ran r6strang rs2tu r2sumf rsü3s r3swi 4r1t r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är r3te. rte1e2 rtei3la rt1ein r2telf rtel6lei r4tempf rte2n1 r3ten. rte4na rtens2 rt3erei r4terfa r4terfo rt1erh r4t3er4la r4t3ernä rter4re rt1ers r3tes2 rte3sk r2thi rt3hol rt2hum r2t1id r2t1ima rto1p rt1or rto2ri r2t3rak rtra4s3 rt3rec rt3ros r4ts rt4s3eh rt1spe rt3t4 r2t1urt rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ru3ches rude2a ru2dr 3ruf ru2fa ruf2s1 ruf4st ruf4ter 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus3sen rus2s1p rus6s3t 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch rücks2 4rümm rün3z rü3s2s 2r1v rve4n1e rve5s rv2s 2r1w r5wei rwun3s 4r1x 1ry ry2c 2r1z rz2an r2zar r2zas rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. s1ad 2s3ada s3adm 2s3a2dr sa2fe 2s3aff 3safi sa1f4r 3saft 3sag sa4gent sag4n 4s1a2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4s3akt 3sal. 4s1alar sa4l3erb sa2l1id s1all sal5lo3 3salo sal2se 2s1alt 3s2alz 3sam s2ame s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na 2s3anb s2an2c s2and s4and. san4dar san4dri 3sang. sang4s 2s3anh 3s4ani 2s3anl 2sanp 2s3ans san4sk 4santr 2s3anw s3anz 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1a2sp sas6sest 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb 2s3av sa2vo 3säc s1äh s3ähn 2s1ält 2s1äm 2s1änd 2s1är sä2s3 3s2ät 1säu 2säuß 4s3b4 sba4n sbe3r2e sbus3 1sc 2sc. 2scam s2cap 4scar 2s1ce 6sch. sch2ab 3schaf 2schak sch2al 4schanc 4schang 5schanz 4schao s2chau 3s2chä 2schb 2schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 4schf 2schg 2schh schi4e 3sching 4schiru 3schis 2schk 4schl. sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox 3schö 4schöl 4schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs2 sch3sk 6sch3t scht2a scht4r s2chu 4schunt sch2up 5schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 6s1cl 2sco 3s2cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sdien4e sd4r 1se se3at. seau4 2s1e2ben seb4r 2s1echo s1echt 2s1eck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l 3seg se2gal se2gl seg4r 3s2eh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh3s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s2ein. 2seinb sein4du sei3n2e sein4fo 2seing 2seinh 4seink 2seinl 2seinn 2seinr s4eins. 4seinsp 4seinst 2seinw 2s1eis 5s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam 3selb sel1ec 2selem se4lerl sel3ers 2self. s3elix 3selk sel3le se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp s2en. se4nag se2nä 3sendet 4s1endl 5seni 3senku se2no s2ens s2ent. 2sentf 4s3entg s2enti 2s1ents 2sentw 2sentz se2n3u 3senva seo2r 4s1e2pos 3seq s4er. ser3a2d ser3al se5ref s3ereig se4r3eim se4r3enk ser2er s1erfo s2erfr s3erfü 4serfül s1ergä s2ergr s1erh 5serie serk4 s3erken s1erkl 3serl. s2ern. s1ernä 4s3ernt se1rot s3eröf s2ers. 2sersa sers2t s4ert. seru2 se4r1uf se3rum se3rund 3s4erv se2sel 2sesh se3sk se3su 2se4tap se2tat s1e2th 3setz se1u2n 2s1ex se2xe 4sexp sex3t2 6s3f4 sfal6l5er sflo4 4s3g2 sges2 sgro3 2s1h 4sh. sh2a 3s2ha. sha2k 4s3han 4shc s3h2e 3shi. 3shid shi4r 4shk sh3n 4shof 3s2hop sho4re 3show sh4r 4shs 4sht 4s3hü 1si si3ach. si2ad si3am. sia4s 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s si3ene si1err si1f4 si2g1a 3sigh sig4n si3gnu si2g3r si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s2 sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 2s1inh sin1i1 4s1inq 2s1ins s2ins. 4sinso 4sinst 2s1int 4s1inv 3sio 3siru 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s2 si2stu 3s2it si2tau sit3r si2tra si3tu 3siv siv1a sive3 si2vr 1sí 4s3j 2s1k2 4sk. 1skala 4skam 4skanz 4skas ska4te. 4skateg ska4tes 4skä 4skb skelma4 skelmas5 s4kep 3s2ki. s2kif s2kig 3s2kik 4skir 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4s3kor 4skow 4skö 4sks 4sk3t 3skulp skus3 2s1l2 4sl. 3slal 4slan sla2ve s2law sl3b s5le s3li 3s4lip 4sln s3lo. slo3be s3loe s3lu 4s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 3so. so4a 2s1o2b so3et 3soft 3sog s1o2he 6sohng 2s1ohr 1sol so3la so2l1ei sol2la4 sol4ler 2so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2s1opf 3sor. so1ral s1orc 2s1ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3so3s2 s4os. 4s1ost 1sou so3unt 3sov 4s1o2ve 3sow 2s1ox 5soz sö2f 2s1ök s1ö2l s1ö4s sp2 2sp. 2spaa 2spak 2spala spani7er. 2spano 4spap 2spara 1spare 2sparo 3sparu spa3sse spa3ssi 3s2paß 2spau s2paz s2pä 2spär 2s3pe. 2spel 4spensi spe3p4 s1peri 2spero s2perr 2spers 4spet 1s2pez 2s3pf 2spha s4phä s3phe 1spi 3s2pi4e 4s3pier4 spi2k 4spil 3spio 4spi4p 4spis 2spl 4spla 4splä 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 1spon 1spor 2s3pos s2pott 4spr. s2prac s2pran 2sprax 2spräm 4spräs 3s4prec 2spred s2pren 2spres s2prit 2sprob 2sprop 5spross 1spru 2sprüf 3sprün 2s3ps 2s4pt 1spuk 2spup 3spur 4sput 1spü 4spy 2s1q 4s3r4 sra4s3s srat2s srat4sc sret3 srom2 srö2s srös1c srücker6 srü2d 2s1s 6ss. 4ssa ssa3bo ss2ad ss1aj s3sal s4s1alb s4s3amt s5sand s4s3ang s2sano s4sans ss2ant s4sanz s3sas ss3att 4s3s2ä 4ssb 6ssc ssch2 4ssd 4ss1ec 4ssee 4sseg s4s1ega 4sseh 4ssei sse3inf sse3in4t 4ssek 6ssendet 4s3sendu ssenmas6 4ssentz sse6r5att s2s1erö 4ss3erse s3sersu ss2es 4ssesc 3ssesh 4sset sse3ta 4ssez 4ssf 4ssg 4ssh 4ssic 4ssie s2sig s4sind s4sinf s4sint 4ssio 4ssit 4ssk s3skala 4s4s3l 4ssm 4ssn 4sso ss1off ssoi4 s2s1op ss1ori s2söl 4ssp s3spe ss2po s3spru ssquet4 4ssr 4s4s3s2 4sst sst2a s5stad ss2tar ss1te s4ste. s5stel s4sten s4stes s4stet s5steu ss2th ss2tip ss1tis ss2top s3strec ss2tur s3s2tü 4ssum ss1ums 4ssü 4ssv 4ssw 4s3sy 4ssz 1st 6st. s4ta. 3staa 2stabb 2stabh s2tabi 2stabt 2stabz st2ac 3s2tad 4stada 4stadr 3staff 2stag 3stah 2stak 2stal. 2stale 3sta3li 2stalk st1alm st1alp 3stam st1ami 4stamt sta4na 3stand 4stanf 4stanl 4stann 2stanw 4stanza s2tar. s2tars 3start st1asi 3stat 2stat. 5statu 3s4tau. 2stauf 2staum 5staur 2staus 3staus. 2stax 3stä 4stäg 4stält 4stämt s2tär 5stätt 4stäus 4stb 4st3c 4std 3ste s2tean 4stechn 4stee ste2gr ste4i 4st1eid 5s2teig 4s3teil stei4na s2t2el s3telem 5stell stel4l3ä ste4mar 4stempf ste4na 4st3ends 4stentf 4stentw 4stepi st5erbie ste4rec ste6rers st3erfü st2erg st5ergeb sterma7sse s2tern 6sterras s2ters stes3ta ste4stä 4stests s2teu 4steuf 4st3ev 4stex 4stf 2stg 4sth st3heu st3ho 5s2tic 3stie 4stief. stierma5 3stim 2stinb 2stinf 2st1ins s4tio sti2r st3i2so 2stj 2stk 4stl 4stm stma3s2 2stn 2stob 3stoc sto3d s2tode s2tof stoffen6 stof8fens 2st3om 2stopo 2stord 2storg 3stos 4stou 2stöch 2stöl 2stön 5s2tör 2stöt 4stp 2stq 3s2traf 2strag 3strah 4strai 3s2tral 4strans 3s2tras 3straß 4straum s2träf 2sträg s2trän 4sträne 2stre. 4strech 4stred 4stref 4streg s3treib 3st4reif 4streis st3renn 2strep 2stret 2strev 2stri. 3s4tria 2strib 4strig stri2k 4strisi 2stroc 3s2trof 3s2trok st3roll stro4ma s2trö 2ströp 3struk 2st3run 2strup 4st3s2 stsas2 sts4k 2st3t4 st2u 5s2tub 4stuc 3stud 2stue 3stuf 5stuh 2stuk 2stumr stum2s 2stumz stu2n 2stun. 2stunf 2st3uni 2stuns 2stunt 3stuö stu3re st3url 2s3turn 2st3urt 4stüch s4tück 2stür. 2stüre 2stürg 2stürs 2stv 2stw 2sty. 2stys 4st3z 1su. su1an 3su2b3 su4ba2 4subi 5su1c su2cha such4st 2s1u2f 4s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2m1el su6m5ents s3umfa s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n sun6d5erh su4ne s1unf s3ungl 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt su2s1 su3sa su3si sus3s 2sü2b 3süc sü2d1 süden2 sü3den. 3sün 1süs4 sü3sse sü3ssi 1süß 4s3v 2s1w s3we sweh2 4swie 4swil s3wö s3wu 1s2y syl1 sym3 sy4n3 sy5s 2s1z2 4s3za 4szä 4s3zei s2zena 5s2zene 4s3zent s2zes s2zeß s3zet s2zis sz3ta 4s3zu 4s3zw 2ß3a2 ß1ä 2ß1b2 ßbus3 2ß1c 2ß1d4 ßdie3 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2le ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t ße2s ße2t ß1ex 2ß1f 2ß3g2 ßge2bl 2ß1h2 1ßi ßi2g1a 2ß1in ß1j 2ß1k4 2ß1l2 2ß1m 2ß1n2 ß1o2 ß1ö 2ß1p2 2ß1q ßquet2 4ß3r2 ßrus3 2ß3s2 ßsch2 ßst2 2ß1t ß2th ßts2 1ßu2 ß1uf 2ß1uh 2ß1um ß1uni ß1ü 2ß1v 2ß1w 2ß1z2 2tab. ta2b1an 2t1abb 1tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 1table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 1taf2e 2taff t1afg t1af4r 1t2ag 3tag. ta2ga2 ta2g1ei 4t3a4gent ta3gl t3ago tag2s tag4st tah2li tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. 1tak t3a2ka ta2kro tak2ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk 1talbu tal3d 1t4ale tal2en ta4lens tal2ga tal4leg tal4lei tal4let tal6leut tallin6s tal4lus ta2l1op tal2se 2talt 2tam ta2mer ta2mi tam2ma2 tam4mi tam4mut t1ampl t1amt t1a2na 2tanb t2and tand4ar ta3ne 4tanf 2tang t2ank t3ankl 2tanl t1anm 2tanme 4t1anna t1ans t2ans. 4t3ansi 2t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza 4tanzei tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4rens ta4r3ere 3t4ari 2tark 2t1arm 2tart tar2ta t1arti tar2to ta2ru 2t1arz ta3sa 1tasc t1asp 1tas2t ta3str 1tat. ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 1tats ta2t1um 4taud t1auf 4taufg tau3f4li 4taufn 2taufw 1taug t1auk 3taum 1taus t1ausb tau6schr tau6schw t2ause t3ausg t1ausk 2tausl 2t3auss 4t1ausw 1tax taxi3s tä1c 2täd 3täe 1täg 2tägy 2täh 2t1ält 2täm t1ämt t1ängs 1tänz t1äp t2är. tä2ru tä4s t2ät 2tätt 2täug 1täus 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 tbus3 2t1c t3cha t3che tch2i tch3l t2chu tch1w t3cl t3cr 2t3d4 tdun2 1te2a4 te3al teamma5 te3an 3t4ebb 4t1e2ben 1t2ech te1cha 3techn 2teck teck2e te3der 1tee te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 2teign teik4 1teil 2tein teinbus6 tein3ec t3einge t3einla 4teinn t1eis. t1eisb tei3st te2kel tek3t2 tela4 te2l3ab te2l1ac te2l1au telb4 tel3d4 te3le tel1eb tele4be te4l1ec 3telef 3teleg te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. te2l1in te2lit tel3lau tel3lä tel3l2e tel6lein tel6li6st te4lost te2l1ö tel3s2k tel3ta tel3th telt4r te3mä te2m1ei te2min 2temo te2m1o2r 3temper 1tempo te4m1u t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 2t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag t3engla t4enh te2ni te4n3in t4enj t2enk t2enl t4enm ten3n t2eno t2ens tens2e 4tensem t4enta t1entb 4tentd t4ente 4tentn ten4t3ri 4t3entw 4tentz t2enz ten6zerh ten3zw t1e2pi t6er. ter3ac te1raf te1ral ter3am te3ran. ter3as 4terbs 4terbt 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül ter3g2 6tergrei t4ergru 2t1ergu 4tergü t4eri te3ria te2rid 4terklä 2t3erlö 1term termas4 ter4mer ter4n3ar 4t3erneu t4ero t1erö 3terras ter4re. 1terro t4ers. ter5sc ter4ser terst4 t4erst. t4ersti t4erstu tert4a tert2o teru2 te4r1uf 6terwerb ter3za 2t1erzb t2erzu te2s tes1ac te3sä t1esel tes1er te3si te3so te3sp te4spr 3tesse. t2es2t tes3tät te4st3ei tester4 te6sterg te6sterk testes4 1tests t2et. te2tat 4tetl 3teuf te1un teu2r3a4 te2vi 1tex te1xa t1e2xe 2t1e2xi 4texp 3text 2t1exz 2t1f4 tfäs3 tfi2l 2t1g2 tger2 tgro3 t1h 4th. 2th2a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä 4thc 1th2e t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem t4hene t4heni 3theo 2therr t2hes 3these t2heu 1thi. t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 2t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy ti2ad ti3a2m tib4 ti1ce ti3chr tiden2 ti4dend t2ie 1tief. tie2fr ti1el ti2el. tiel3a ti3e4n1 ti2er tie4rec tiermas6 1tierr tie5sse 2tieß ti1et ti1eu 1tif. tif3f ti1fr ti4gerz tihi4 ti2kam ti2kar ti2kin ti2krä tiks2 ti2kü ti2lar ti2lau ti2lei ti2lel 1tilg tille4b ti2l3ö tilt4 ti2lu ti2ma2g t2imi tim2ma2 4t1imp t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l t2ins. 4t1inse t1int ti1nu 4t1inv 3tio ti3or 1tip 3tip. ti4que. ti1rh t2is ti4scha tisch3w ti2sei ti2sp 3ti3te tium2 ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 2t3k4 2t3l tl4e 3tlem tle2r3a 4t5li tli3ni 2t1m2 tmal2 tmen4t3 tmo4des t3mu 2t3n2 t5na tnes4 to4as to5a4t 1tob 2tobj tob2l t1obs to1ch 3tocht 2tock 1tod 3tod. tode2 to2d1er tode4s1 to2d1u toi4r to3la tom1e2 2tomg 1ton to2nau to2neh 3too to2pak to2pat 1topo 2topt to1ra to2rau to4rän 2torc t1ord 1tore. to2r1el t1org t3orga tor3int to2rö 1tort t1ort. to2ru t2orw to3s2 to4sk tost4 1toten to2tho tots2 3t4ou touil4 to3un tö2c 1töch 2töf 2t1ök 1tö4l 1tön t1ö4st 1töt 4t3p2 tpf4 2t1q t2r4 2tr. 1trac tra3cha t3rad. tra4dem tra4far 1trag 2trahm 3t4rai tra4lin 1tram 2t3rams 3t4ran. 2trand 1trank t3rann 1trans t3rase t3rasi tra4str 2traß 1traum 2traup traus2 1trä 3träg 2träh 3träne 2träs 2träß 2träus 2träuß 4t5re. tre4ale tre2br 2trec t3rech t4reck 2t3red 1tref 2trefe 3treff 2trefo 2treg t4rei. 1t4reib 2treif t3reig 2t3reih t3rein 2t3reis 2treit t3reiz 2t3rek 2t3rel t4rem t4ren. 1trend t3rent 1trep 2trepe 2trepo t4repr t4rer t4res. 1t4ret tre2t3r t5rett t4reu 2t3rev 2trez 3t4ré 2t3rh 1trib 3trieb. 3triebs 6trieg tri2er 1trigg 1trin t3rind 2tring tri3ni 3trio t4rip t3riß t4rit 1triu tri2x trizi1 1troc 4trock. t4roi tro2ke tro2mi 2t3roo t4rop 3tropf 2troß t3röc 2tröh 3tröp 2trö4s3s 2t3röt 2truf 1trug 2truk trum2 trums1 2t3rund 1t4runk 3t4rup t3ruß tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg 3trümm try1 2ts t4sab t3s2ac t2sa2d t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as tsa3sse t2sau t1sä t2säh t2s1än t4schar t3sche t4schef t3schl tsch4li t4schro ts2cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t3sens t2s1ent t2s1er t6s5essen t3set t4seth t2s1i2d tsing4 ts1ini t2s1ir t3skala ts3kr ts1o tso2r t1spal t1span ts1par ts4pare t1spas ts2ped t1spek ts2pi ts3ple ts2pon ts2por ts3s2 tst4 t2staf ts2tat ts2tau ts3täti t4stea t4s1tep t4sterm t4s3terr ts1tie t2s1tis t2stit t2ston ts1tor t4s3trad t2strä t2s1tri ts2tro t4strop t2s1trü ts1u 1tsub t1sü 4t1t tt1ab tt2ac tta6gess tt1ak t4tals tt3ank t2tanz tt1art t2tän tt1ebe tt1eif tt1ein tt1eis tte2la tte4leb t4te4leg tte4len ttel3l ttel1o t3ter tte4rec tt2erg ttermas7s tte4sa tte4s1ä tt2häu t2t3ho t3to. t3tos ttras3s t3tro tt3rü tt2sen tts1p tt4s3tem tt4ster tt4sti ttu2 t2tuc tt2un t2tu4s ttü2 tu1alm tu3an tub2 tuba3b 1tuc tu2chi 1tue tu3en tu2ere 2tuf tuf2e tu3fen t3u2fer tuf4fel 2tuh tu2is t3u2kr tul2a 1tum t2um. t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2tump 2t3umr tum2si tum2so 2t3umt 2t1umw t3umz 1tun. 2t1una 2t1und 2t3unf t3unga tung6s 2tunif 2t1u2nio 1tunn 1tuns 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e2t turin1 1turn tu2ro tur3s tu4ru tu2sa tu4schl tu2so tu3ta 2tüb 1tüch tück2s 1tüf 1tür. tür1c 1türe 1türg 1türs 1tüten 2tütz 2t3v 4t3w twa2 twä4 twi4e 1ty 3ty. 3typ ty2pa 3tys 4t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1ec t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3zes tzes3t tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4r u1ah u1al. ua2lau u1alb u3alet u1alf ual3l ualle2 u3a2lo u1alr u1als u1al3t ua2lu u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au uau2s u1ay u1äm u1än uäs4 u1äu 2u1b u8becken. ub3ein u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa ubus3 u2büb 2uc uc1c u1ce4 uces3 uch1a u1cha. uch1ä u1che u2ch1ec uch1ei ucherma8s u1chi uch1il uch1in uch3l uch3m uchma6ss uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu u2chum uch3ü uch1w u1ci uck2er uck3erl u1cl 2u1d u3d2a uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e u2ed ue2en u2eg u2ela ue2le ueli4 uel2la ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2sa uen2zu u2ep ue2r3a ue2r1ä uere2 ue2rec ue3reig u3eremp u3erent ue4rerg ue4rerk uer3g2 u3erinf u3erin4t uerma6s uer2ne uer4ner uer3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue4s ue5se ue5sp ue2ta ue4tek u3fac u3fah uf1ak u3fal uf3ar uf1au u2f1ä6s u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern u2f1eß 2uff uffel2 uff4l uf2fro uf3l u2fob ufo2r uf1ori uf3r uf3sä uf2spo uf4ster uf2t1eb uf3ten uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak ugang4 u2g1ap uga4s ug1au ug3d2 u2g1ei ugenma3 ugenmas6 u2g1erf u2g1erl ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ro3s ug3rüs ug3sc ug3se ug3si ugsma3 ugsmas4 ug1spa ug5stä u2gü u1h uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uh1un uh1w 2ui ui2c u1ie ui1em u3ig u4ige u1im u1in. uin3n u1is. u3isch. u3ischs uisi4n ui2st u1j uk2a u3käu u1ke u1ki u1k2l ukle1i u1k4n u3ko uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab ul1am ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ulf4 ulg4 uli2k ul1ins ul3ka ul2kn ulla2g ul2lä ul3len ul2les ulli2n ul2lö2 ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2t 2ulta ul3th ul2tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um2an um3anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 4umm umm2a um4mess u2möl umpf4li um2pho um2p3le 1umr 3umsat um2sau um2ser um2sim um2s1pe um4stem um2s1u um3t2 um2un u2m1ur 1umz un1 2un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at unau2s 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp un2d1um undü4 1undv 1undz u3ne une2b une2h un2ei. un3ein un3eis unen2t u4n3erz unes2 1unget 1ungew 1unglü un3gn un2gr ung3ri ung4s1 un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku un2n3a2d un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1unsi un3sk un3sp unst1r 1unt un3ta unte4ri un3tr unt3s 2untu u1nü unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u1op u1or u3or. u3or3c u3ors u1os. uote2 u1pa u1pe2 uper1 up2fa upf2e upf1i u1pfl u3pi up2pl u1pr upt3a2 upt3erf upt3erg upt1o u1q 2ur. u1ra u2rab u3raba ura2be u2r1a2m ur3ame u2r1ana u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 ur3d2i ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri uri2c ur1im ur1ini ur3ins ur1int urk3se ur4matt 4u1ro u3rol u1rö ur3p 2urr ur3re ur2san ur2sau ur2ser urst4r ur4sw urs2ze urt2 u3ru ur2z1a ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u4saf us4ann us5art u1sä u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko usmas2 usma5sse u1so us3oc u3soh u3sol u2s1op us1ou u1sö u1sp u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u3s2piz u2spo us2por u2spu u4s3sel us2sen us5sende us6seni ussenma7s us2ser us4serf uss5erfa us2sez u3ssig us2sof u2stab ust3abe u3stal us2tat us2ten us2ter us2th ust2in u3stis u2s1tor u2strä u4strit u3s4trop u2s1tur u2sty u1su us2ur 2uß u2ß1u 2u1t u3ta. ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te ut1e2d ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu utmas2 utma5sse u3to. uto4ber uto3c u3tom ut1opf u2tops ut4or ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut1sp ut2spa utt4an ut3te ut3t4l utt1s2 utu4re utu5ru utz3eng ut2z1in ut2zo ut2z1w 2u1u2 u1ü2 u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe4n3 über3 üb3l üb3r 2üc ü1che üch3l üch4s1c üch5t4e ück1er ück3eri ück4spe ü4d3a4 üden2g ü3d2ens üd1o4 üdö4 üd3r üd3s2 üdsa1 üd3t4 üdwe2 ü4f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1erk ü2h1erz üh1i ühl1ac üh1lam üh3l2e üh3mo üh3ne üh1o üh3r2e ühr3ei. üh1ro ühr3ta ühs2 üh3stu üh3t üh4th üht4r ü1hu üh1w ü1k2 2ül ül1a ül2c ü3l4e ülla4 üll1au ül2lei ül3ler ül4leu ül2lo ü1lu ü2ment ü2n1a ün2da ün2dr ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ür4ster ürt2h ür2zö ür2zw üs2a ü2schl ü5se üse3h üse3l ü1sp üs2s1c üss2e ü4s3sel üs3si üs4st üs2su ü2sta ü2str ü1su ü1ß 2üt ü1ta ü2t1al ü1te ü1ti üt3r üt4s1 üt2tr ü1tu ü1v ü1z 2v1ab va1c val2s 2vang 2varb vas2 v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u vat3z 2v1au vä1 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits1 ve3la ve4l1au ve3le ve3li vel3l ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3nü ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 verf4 verg4 vergas6 ve3ri ve4rin ver3k vermas8sen ver3sta vert2 ver5te ver3u ve3s 2vesc 2vese ve4sh ve4s1p ves4t ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in vil3l 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol vol2la voll7auf. vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 vorö4 3voy 2v1p v2r 2v3ra v3re v4ree 2v3ro 2v1s vs2e v3s2z 2v1t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les wal4li4n 2walm wal2ta wal2to walt4st 3walz wa3na wang4s 1wann wa2p 1war2e ware1i wart4e 1was wa3sa wa4scha wa3sche wa3schi wa3sh wass4e 1wäh 1wäl wäm3 2wäng 1wäs3 wä5sc wä4ss 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg1s weg3sa 1weh we4i wei4bl 2weie weifel6d weik4 wei3sc weis4s3p wei4tr weit1s wel6schl wel6schr wel2t1 welt3a4 wel6t5en6d wem2ma2 wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer4sta wer2t1a wer4t3ei wer6t5erm wer2to 1werts 1wese wesen4s3 we2s1p wes2t we2st1a we4st3ei we4steu we4sti we2st1o2 we2stö we2st3r we4stu 1wet wet2s wett3s 2w1ey 2w1g 2w3h 1wid wi2e wie3l2 wien2e wie4st wik2 1wil wim2ma wim4m3u win4d3ec win2dr win2e 2wing win8n7er8sc win4num 1wi4r wi3s2e wi2sp 1wiss wi3st wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s1 wol4la wol2lä wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k 2w1t wti2 w2u 1wuc wuch4sc wuls2 wun2da wun4g3r wun2s 4wur. wur2fa 1wurst wus4 1wu4t1 1wüh wüs4 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag xa2m xand4 x2anz 1x2as xau3 xaus2 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. xemp4 x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is xi2s1e xi2s1o2 xis5s xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3ta. x3t2as xt1ä x2tän x2t1e2d x2t1ei x2tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt1s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere yes2 y2es. ye4st ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl5b yl3c y4le. yli4n yllo2 yllö2 yloni1 y2l1u yma2t ymp2 ym2pha ympi1 y2n1o yno4d ynt2 y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 y1s ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2pa yst4 y2s1u2 y3s2z y1t2 y2te. y2tes y3to yu2r yure3 y1v y1w y1y y1z2 za2 2z3ab zab3l za3cha za3chä 2z1ad 2z1af za3ge za3gr 3z2ah zah4ner 2z3ak za3li 2z1all 2z1am z1an za3ne 2z3anf 3zani 3z2ank zan4kl 2z3anl za3no za3ra 2zarb 2zarc za3re 2z1arm za3ro z1arti zar2tr 2z1arz z1as zast4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1äc 3z2äh zä3hi 2z1äm 2zängs z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 zeau3 zeaus4 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeik4 zei3la zeile4 2z1ein zeinbus6 zei3s2 zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 zelau2 ze2len ze2l1er ze2l1in zel3l2a zel4leh zel4li4n zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zent3s zen4z3er z2er. zer3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2s zes1e zes1i ze3sku zessen4 zes6s5end zes2sp zes1tr ze2ß1 ze2tr 2zetts 2z1ex 2z1f4 zfäs3 2z1g2 zger2a 2z1h z2hen 3zi. zi3alo zi3ar zi2dei zid3r zie4lei zi1erh zi1es. 3zig zil2e zil3l z2imm 2z1imp zim2t3 zin2e zin3ei zin4er 2z1inf z1inh zin1it zin2sa zin4ser 4zinsuf z1inv zi2o3 zi3op zirk2 zirk6s1 zis4t zistras6 zi3s2z zit2h ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zolla2 zol3le zol2li2 zol3lu zon4ter zo2o 2z1ope z1or zo2ri zor4ne zo3se 2z1osz 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3str z3sz 2z1t z2t1au z4tehe zte3str z3t2her zt3ho zt1ins zt3rec zt3s2 zu3a zub4 3zu4c zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug4ste zug1un 2z1uhr zuh2u zu1i zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s2 zu3t2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig zwei3s 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 2z1z z3z4a zze3s z3z2o zz2ö",
- ["length"]=103420,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=15419,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.lua b/Master/texmf-dist/tex/context/patterns/lang-es.lua
deleted file mode 100644
index ae834e3597a..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-es.lua
+++ /dev/null
@@ -1,48 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="es",
- ["source"]="hyph-es",
- ["texcomment"]="% Spanish hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% DIVISI'ON DE PALABRAS\
-% ~~~~~~~~~~~~~~~~~~~~~\
-% hyph-es.tex 4.6\
-% This files corresponds to eshyph.tex 4.6.\
-%\
-% (c) Javier Bezos 1993 1997.\
-% (c) Javier Bezos and CervanTeX 2001-2010\
-% Some parts, (c) by Francesc Carmona\
-% Licence: LPPL\
-%\
-% For further info, bug reports and comments:\
-%\
-% http://www.tex-tipografia.com/spanish_hyphen.html\
-%\
-% I would like to thanks Francesc Carmona for his permission\
-% to steal parts of his work without restrictions.\
-%\
-% 2010-05-18\
-%\
-% _____________________________________________________________\
-% Javier Bezos | http://www.cervantex.es/\
-% .............................................................\
-% TeX y tipografia | http://www.tex-tipografia.com/\
-% \
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefghijklmnopqrstuvwxyzáéíñóú",
- ["data"]="1b 4b. 2bb 2bc 2bd 2bf 2bg 2b1h 2bj 2bk 2bm 2bn 2bp 2bq 2bs 2bt 2bv 2bw 2bx 2by 2bz 1c 4c. 2cb 2cc 2cd 2cf 2cg 2cj 2ck 2cm 2cn 2cp 2cq 2cs 2ct 2cv 2cw 2cx 2cy 2cz 1d 4d. 2db 2dc 2dd 2df 2dg 2d1h 2dj 2dk 2dl 2dm 2dn 2dp 2dq 2ds 2dt 2dv 2dw 2dx 2dy 2dz 1f 4f. 2fb 2fc 2fd 2ff 2fg 2f1h 2fj 2fk 2fm 2fn 2fp 2fq 2fs 2ft 2fv 2fw 2fx 2fy 2fz 1g 4g. 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. 2jb 2jc 2jd 2jf 2jg 2j1h 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 4k. 2kb 2kc 2kd 2kf 2kg 2k1h 2kj 2kk 2km 2kn 2kp 2kq 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 4l. 2lb 2lc 2ld 2lf 2lg 2l1h 2lj 2lk 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lx 2ly 2lz 1m 4m. 2mb 2mc 2md 2mf 2mg 2m1h 2mj 2mk 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2mx 2my 2mz 1n 4n. 2nb 2nc 2nd 2nf 2ng 2n1h 2nj 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nt 2nv 2nw 2nx 2ny 2nz 1p 4p. 2pb 2pc 2pd 2pf 2pg 2p1h 2pj 2pk 2pm 2pn 2pp 2pq 2ps 2pt 2pv 2pw 2px 2py 2pz 1q 4q. 2qb 2qc 2qd 2qf 2qg 2q1h 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r 4r. 2rb 2rc 2rd 2rf 2rg 2r1h 2rj 2rk 2rl 2rm 2rn 2rp 2rq 2rs 2rt 2rv 2rw 2rx 2ry 2rz 1s 4s. 2sb 2sc 2sd 2sf 2sg 2s1h 2sj 2sk 2sl 2sm 2sn 2sp 2sq 2sr 2ss 2st 2sv 2sw 2sx 2sy 2sz 1t 4t. 2tb 2tc 2td 2tf 2tg 2t1h 2tj 2tk 2tm 2tn 2tp 2tq 2ts 2tt 2tv 2tw 2tx 2ty 2tz 1v 4v. 2vb 2vc 2vd 2vf 2vg 2v1h 2vj 2vk 2vm 2vn 2vp 2vq 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w 4w. 2wb 2wc 2wd 2wf 2wg 2w1h 2wj 2wk 2wl 2wm 2wn 2wp 2wq 2wr 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 4x. 2xb 2xc 2xd 2xf 2xg 2x1h 2xj 2xk 2xl 2xm 2xn 2xp 2xq 2xr 2xs 2xt 2xv 2xw 2xx 2xy 2xz 1y 4y. 2yb 2yc 2yd 2yf 2yg 2y1h 2yj 2yk 2yl 2ym 2yn 2yp 2yq 2yr 2ys 2yt 2yv 2yw 2yx 2yy 2yz 1z 4z. 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 2no. 2t2l 4caca4 4cago4 4caga4 4cagas. 4teta. 4tetas. 4puta4 4puto4 .hu4mea .hu4meo .he4mee 4meo. 4meable. 4meables. 4pedo4 4culo4 3mente. 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 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 aero1h aero1a2 aero1e2 aero1i2 aero1o2 aero1u2 aero1á2 aero1é2 aero1í2 aero1ó2 aero1ú2 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. t4eo3nes. mante4a e4a3miento .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 biblio1h biblio1a2 biblio1e2 biblio1i2 biblio1o2 biblio1u2 biblio1á2 biblio1é2 biblio1í2 biblio1ó2 biblio1ú2 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 3c2neor 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 co4á3gul co4acci co4acti co4adju co4a3dun co4adyu co3agen co4a3gul co4a3lic co4aptac co4art co4árt co4e3fic co4erc co4erz co4e3tá co3exis co4imbr co4inci co4i3to co3n4imbri co4o3per co4o3pér co4opt co4ord con1imbr con1urb 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. .de2sa2 .de2se2 .de2si2 .de2so2 .de2su2 .de2sá2 .de2sé2 .de2sí2 .de2só2 .de2sú2 deca2i3mient decimo1 3sa. 3sas. de2s3órde de2s3orde de2s3abast de2s3aboll de2s3aboto de2s3abr desa3brid 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 desa3gú desa3garr de2s3agraci de2s3agrad de2s3agravi de2s3agreg de2s3agrup de2s3agu desa3guisado de2s3aherr de2s3ahij de2s3ajust de2s3alagar de2s3alent de2s3alfom de2s3alfor de2s3aliñ desa3lin de2s3alien de2s3aline 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 desa3soseg desa3sosieg 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 de3sesper 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 .dieci1o2 dodeca1h dodeca1a2 dodeca1e2 dodeca1i2 dodeca1o2 dodeca1u2 dodeca1á2 dodeca1é2 dodeca1í2 dodeca1ó2 dodeca1ú2 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 .en2a2 .en2e2 .en2i2 .en2o2 .en2u2 .en2á2 .en2é2 .en2í2 .en2ó2 .en2ú2 .ene3mist .ene3míst .eno3jar .enu3mera .enu3merá .enu3mere 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 4emboca 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 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 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. 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 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 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ó 3te3ri3n 4te4r5i4nsu .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump 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 bien2 bien3h bien3v bien3q bien3m bien3t b4ien3do. .su3b4ien b4ien3das. 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 li5área 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 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 para1h para1a2 para1e2 para1i2 para1o2 para1u2 para1á2 para1é2 para1í2 para1ó2 para1ú2 para2is. aí5so. aí5sos. 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 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. .pos3tó3ni .pos3terg .pos3te3ri .pos3ti3go .pos3ti3la .pos3ti3ne .pos3ti3za .pos3ti3zo .pos3tu3ra s3tor. s3tora. s3toras. s3tores. .pos3tu3la .pos3tu3lá .pos3tu3le .pos3tu3lé .post3elec .post3impr .post3ind .post3ope .post3rev .pre2a2 .pre2e2 .pre2i2 .pre2o2 .pre2u2 .pre2h2 .pre2á2 .pre2é2 .pre2í2 .pre2ó2 .pre2ú2 pre3elij pre3elig pre3exis pre3emin preo3cup preo2cúp pre3olí pre3opin .pro2a2 .pro2e2 .pro2i2 .pro2o2 .pro2u2 .pro2h2 .pro2á2 .pro2é2 .pro2í2 .pro2ó2 .pro2ú2 proto1h proto1a2 proto1e2 proto1i2 proto1o2 proto1u2 proto1á2 proto1é2 proto1í2 proto1ó2 proto1ú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 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 sobre1h sobre1a2 sobre1e2 sobre1i2 sobre1o2 sobre1u2 sobre1á2 sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 semi1h semi1a2 semi1e2 semi1i2 semi1o2 semi1u2 semi1á2 semi1é2 semi1í2 semi1ó2 semi1ú2 i2a. i2as. 2ótic emi2o2 seudo1h seudo1a2 seudo1e2 seudo1i2 seudo1o2 seudo1u2 seudo1á2 seudo1é2 seudo1í2 seudo1ó2 seudo1ú2 o2os. .so3a4s 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 supe2r3r supe2r1a2 supe2r1e2 supe2r1i2 supe2r1o2 supe2r1u2 supe2r1á2 supe2r1é2 supe2r1í2 supe2r1ó2 supe2r1ú2 supe3r4a4r supe3r4á4r supe3r4á3vit. supe3r4á3vits. 4a3ción. 4a3ciones. 4e3rior. 4e3riores. 4e3riora. 4e3rioras. 4e3riormente. 4e3rioridad. 4e3rioridades. 4e3ra3ble. 4e3ra3bles. 4e3ra3blemente. 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. 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 tropo1h tropo1a2 tropo1e2 tropo1i2 tropo1o2 tropo1u2 tropo1á2 tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 poi3de. poi3des. ultra1h ultra1a2 ultra1e2 ultra1i2 ultra1o2 ultra1u2 ultra1á2 ultra1é2 ultra1í2 ultra1ó2 ultra1ú2 xeno1h xeno1a2 xeno1e2 xeno1i2 xeno1o2 xeno1u2 xeno1á2 xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 inter4és inter4esar inter4in inter4ino inter4ior mili4ar mili4ario para4íso para4ulata super4able super4ación super4ior tran4sacc trans4ar trans4eúnte trans4iber trans4ición trans4ido trans4igen trans4igir trans4istor trans4itab trans4it trans4itorio trans4ubsta ultra4ísmo wa3s4h .bi1anual .bi1aur .bien1and .bien1apa .bien1ave .bien1est .bien1int .bi1ox .bi1ó2x .bi1un .en1aceit .en1aciy .en1aguach .en1aguaz .en1anch .en1apa .en1arb .en1art .en2artr .en1ej .hepta1e .intra1o .intra1u .mal1acon .mal1acos .mala1e .mal1andant .mal1andanz .mal1est .mal1int .pa4n1a4meri .pa4n1europ .pa4n1afri .pa4n1ópti 3p2sic 3p2siq .re3a2eg .re3a2q .re3a2z .re3a2grup .re3i2m .re3inc .re3ing .re3ins .re3int .re3o2b .re1oc .re1oj .re3orga .re1unt .retro1a .su2d1a2fr .su2d1a2me .su2d1est su4d3oes .sur1a2me .sur1est .sur1oes .tele1imp .tele1obj .tra2s1a .tra2s1o .tra2s2oñ .tran2s1alp .tran2s1and .tran2s1atl .tran2s1oce .tran2s1ur .tri1ó2x",
- ["length"]=27710,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=3371,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.rme b/Master/texmf-dist/tex/context/patterns/lang-es.rme
deleted file mode 100644
index c2fb82e1ae1..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-es.rme
+++ /dev/null
@@ -1,30 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Spanish hyphenation patterns
-
-(more info about the licence to be added later)
-
-% DIVISI'ON DE PALABRAS
-% ~~~~~~~~~~~~~~~~~~~~~
-% hyph-es.tex 4.6
-% This files corresponds to eshyph.tex 4.6.
-%
-% (c) Javier Bezos 1993 1997.
-% (c) Javier Bezos and CervanTeX 2001-2010
-% Some parts, (c) by Francesc Carmona
-% Licence: LPPL
-%
-% For further info, bug reports and comments:
-%
-% http://www.tex-tipografia.com/spanish_hyphen.html
-%
-% I would like to thanks Francesc Carmona for his permission
-% to steal parts of his work without restrictions.
-%
-% 2010-05-18
-%
-% _____________________________________________________________
-% Javier Bezos | http://www.cervantex.es/
-% .............................................................
-% TeX y tipografia | http://www.tex-tipografia.com/
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.rme b/Master/texmf-dist/tex/context/patterns/lang-et.rme
deleted file mode 100644
index 12b0e182f23..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-et.rme
+++ /dev/null
@@ -1,84 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Estonian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: eehyph.tex (2004-04-13)
-% Author: Een Saar <saar at aai dot ee>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Estonian hyphenation patterns
-% Copyright 2003 Een Saar
-%
-% This work may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.3 of this
-% license or (at your option) any later version. The latest version
-% of this license is in http://www.latex-project.org/lppl.txt and
-% version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
-% This work has the LPPL maintenance status "author-maintained".
-% This work consists of this file only (eehyph.tex).
-%
-% The patterns were generated long ago by applying patgen to
-% an Estonian dictionary; a few patterns were added later manually
-% to prohibit aa-bits type cases.
-% Declare the special characters
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.lua b/Master/texmf-dist/tex/context/patterns/lang-eu.lua
deleted file mode 100644
index c6e4893c7cc..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.lua
+++ /dev/null
@@ -1,67 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="eu",
- ["source"]="hyph-eu",
- ["texcomment"]="% Basque hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Hyphenation patterns for Basque.\
-%\
-% This file has first been written by Juan M. Aguirregabiria\
-% (juanmari.aguirregabiria@ehu.es) on February 1997 based on the\
-% shyphen.sh script that generates the Spanish patterns as compiled\
-% by Julio Sanchez (jsanchez@gmv.es) on September 1991.\
-%\
-% In June 2008 the generating script has been rewritten into ruby and\
-% adapted for native UTF-8 TeX engines. Patterns became part of hyph-utf8\
-% package and were renamed from bahyph.tex into hyph-eu.tex.\
-% Functionality should not change apart from adding ñ by default.\
-%\
-% The original Copyright followed and applied also to precessor of this file\
-% whose last version will be always available by anonymous ftp\
-% from tp.lc.ehu.es or by poynting your Web browser to\
-% http://tp.lc.ehu.es/jma/basque.html\
-%\
-% For more information about the new UTF-8 hyphenation patterns and\
-% links to this file see\
-% http://www.tug.org/tex-hyphen/\
-%\
-% COPYRIGHT NOTICE\
-%\
-% These patterns and the generating script are Copyright (c) JMA 1997, 2008\
-% These patterns are made public in the hope that they will benefit others.\
-% You can use this software for any purpose.\
-% However, this is given for free and WITHOUT ANY WARRANTY.\
-%\
-% You are kindly requested to send any changes to the author.\
-% If you change the generating script, you must include code\
-% in it such that any output is clearly labeled as generated\
-% by a modified script.\
-%\
-% END OF COPYRIGHT NOTICE\
-%\
-% Open vowels: a e o\
-% Closed vowels: i u\
-% Consonants: b c d f g j k l m n ñ p q r s t v w x y z\
-%\
-% Some of the patterns below represent combinations that never\
-% happen in Basque. Would they happen, they would be hyphenated\
-% according to the rules.\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefgijklmnopqrstuvwxyzñ",
- ["data"]="1ba 1be 1bo 1bi 1bu 1ca 1ce 1co 1ci 1cu 1da 1de 1do 1di 1du 1fa 1fe 1fo 1fi 1fu 1ga 1ge 1go 1gi 1gu 1ja 1je 1jo 1ji 1ju 1ka 1ke 1ko 1ki 1ku 1la 1le 1lo 1li 1lu 1ma 1me 1mo 1mi 1mu 1na 1ne 1no 1ni 1nu 1ña 1ñe 1ño 1ñi 1ñu 1pa 1pe 1po 1pi 1pu 1qa 1qe 1qo 1qi 1qu 1ra 1re 1ro 1ri 1ru 1sa 1se 1so 1si 1su 1ta 1te 1to 1ti 1tu 1va 1ve 1vo 1vi 1vu 1wa 1we 1wo 1wi 1wu 1xa 1xe 1xo 1xi 1xu 1ya 1ye 1yo 1yi 1yu 1za 1ze 1zo 1zi 1zu 1l2la 1l2le 1l2lo 1l2li 1l2lu 1r2ra 1r2re 1r2ro 1r2ri 1r2ru 1t2sa 1t2se 1t2so 1t2si 1t2su 1t2xa 1t2xe 1t2xo 1t2xi 1t2xu 1t2za 1t2ze 1t2zo 1t2zi 1t2zu 1b2la 1b2le 1b2lo 1b2li 1b2lu 1b2ra 1b2re 1b2ro 1b2ri 1b2ru 1d2ra 1d2re 1d2ro 1d2ri 1d2ru 1f2la 1f2le 1f2lo 1f2li 1f2lu 1f2ra 1f2re 1f2ro 1f2ri 1f2ru 1g2la 1g2le 1g2lo 1g2li 1g2lu 1g2ra 1g2re 1g2ro 1g2ri 1g2ru 1k2la 1k2le 1k2lo 1k2li 1k2lu 1k2ra 1k2re 1k2ro 1k2ri 1k2ru 1p2la 1p2le 1p2lo 1p2li 1p2lu 1p2ra 1p2re 1p2ro 1p2ri 1p2ru 1t2ra 1t2re 1t2ro 1t2ri 1t2ru su2b2r su2b2l",
- ["length"]=948,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=192,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.rme b/Master/texmf-dist/tex/context/patterns/lang-eu.rme
deleted file mode 100644
index 72d2a596d85..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.rme
+++ /dev/null
@@ -1,49 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Basque hyphenation patterns
-
-(more info about the licence to be added later)
-
-% Hyphenation patterns for Basque.
-%
-% This file has first been written by Juan M. Aguirregabiria
-% (juanmari.aguirregabiria@ehu.es) on February 1997 based on the
-% shyphen.sh script that generates the Spanish patterns as compiled
-% by Julio Sanchez (jsanchez@gmv.es) on September 1991.
-%
-% In June 2008 the generating script has been rewritten into ruby and
-% adapted for native UTF-8 TeX engines. Patterns became part of hyph-utf8
-% package and were renamed from bahyph.tex into hyph-eu.tex.
-% Functionality should not change apart from adding ñ by default.
-%
-% The original Copyright followed and applied also to precessor of this file
-% whose last version will be always available by anonymous ftp
-% from tp.lc.ehu.es or by poynting your Web browser to
-% http://tp.lc.ehu.es/jma/basque.html
-%
-% For more information about the new UTF-8 hyphenation patterns and
-% links to this file see
-% http://www.tug.org/tex-hyphen/
-%
-% COPYRIGHT NOTICE
-%
-% These patterns and the generating script are Copyright (c) JMA 1997, 2008
-% These patterns are made public in the hope that they will benefit others.
-% You can use this software for any purpose.
-% However, this is given for free and WITHOUT ANY WARRANTY.
-%
-% You are kindly requested to send any changes to the author.
-% If you change the generating script, you must include code
-% in it such that any output is clearly labeled as generated
-% by a modified script.
-%
-% END OF COPYRIGHT NOTICE
-%
-% Open vowels: a e o
-% Closed vowels: i u
-% Consonants: b c d f g j k l m n ñ p q r s t v w x y z
-%
-% Some of the patterns below represent combinations that never
-% happen in Basque. Would they happen, they would be hyphenated
-% according to the rules.
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.lua b/Master/texmf-dist/tex/context/patterns/lang-fi.lua
deleted file mode 100644
index 9593a4f50b5..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.lua
+++ /dev/null
@@ -1,100 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="fi",
- ["source"]="hyph-fi",
- ["texcomment"]="% Finnish hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: fihyph.tex (yyyy-mm-dd)\
-% Author: Kauko Saarinen\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% -----> Finnish hyphenation patterns for MLPCTeX <------\
-% First release January -86 by Kauko Saarinen,\
-% Computing Centre, University of Jyvaskyla, Finland\
-%\
-% Completely rewritten January -88. The new patterns make\
-% much less mistakes with foreign and compound words.\
-% The article \"Automatic Hyphenation of Finnish\"\
-% by Professor Fred Karlsson is also referred\
-% ---------------------------------------------------------\
-%\
-% 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added.\
-% 9th January - 95: added \\uccode and \\lccode by Thomas Esser\
-%\
-% ********* Patterns may be freely distributed **********\
-%\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefghijklmnopqrstuvyäö",
- ["data"]="1ba 1be 1bi 1bo 1bu 1by 1da 1de 1di 1do 1du 1dy 1dä 1dö 1fa 1fe 1fi 1fo 1fu 1fy 1ga 1ge 1gi 1go 1gu 1gy 1gä 1gö 1ha 1he 1hi 1ho 1hu 1hy 1hä 1hö 1ja 1je 1ji 1jo 1ju 1jy 1jä 1jö 1ka 1ke 1ki 1ko 1ku 1ky 1kä 1kö 1la 1le 1li 1lo 1lu 1ly 1lä 1lö 1ma 1me 1mi 1mo 1mu 1my 1mä 1mö 1na 1ne 1ni 1no 1nu 1ny 1nä 1nö 1pa 1pe 1pi 1po 1pu 1py 1pä 1pö 1ra 1re 1ri 1ro 1ru 1ry 1rä 1rö 1sa 1se 1si 1so 1su 1sy 1sä 1sö 1ta 1te 1ti 1to 1tu 1ty 1tä 1tö 1va 1ve 1vi 1vo 1vu 1vy 1vä 1vö 1st2r ä2y y1a2 y1o2 o1y ö2y u1y2 y1u2 ö3a2 ö3o2 ä3a2 ä3o2 ä1u2 ö1u2 a1ä a1ö o1ä o1ö u1ä2 u1ö2 ä2ä ö2ö ä2ö ö2ä aa1i2 aa1e2 aa1o2 aa1u2 ee1a2 ee1i2 ee1u2 ee1y2 ii1a2 ii1e2 ii1o2 uu1a2 uu1e2 uu1o2 uu1i2 e1aa i1aa o1aa u1aa u1ee a1uu i1uu e1uu o1uu ää1i ää1e ää3y i1ää e1ää y1ää i1öö a1ei a1oi e1ai i1au y1ei ai1a ai1e ai1o ai1u au1a au1e eu1a ie1a ie1o ie1y io1a2 io1e2 iu1a iu1e iu1o oi1a oi1e oi1o oi1u o1ui ou1e ou1o ue1a ui1e uo1a uo1u e1ö2 ö1e2 .ä2 u2s yli1o2p ali1a2v 1sp2li alous1 keus1 rtaus1 2s1ohje 2s1a2sia 1a2sian 1a2siat 1a2sioi r2as l2as 2s1o2pisk 2n1o2pet 2s1a2loi 2n1o2pist 2s1o2pist 2s1o2sa 2n1o2sa alkei2s1 perus1 2s1i2dea. 2s1i2dean 2s1e2sity 2n1e2dus 2s1ajatu 2s1ase 2s1apu 2s1y2rit .ydi2n1 .suu2r1a2 2s1y2hti 2n1otto 2n1oton 2n1anto 2n1anno 2n1a2jan 2n1aika 2n1o2mai 2n1y2lit 2s1a2len 2n1a2len 1a2siaka2s1 ulo2s1 2n1a2jo 2s1a2jo b2l 1b2lo bib3li b2r 1b2ri 1b2ro 1b2ru d2r 1d2ra f2l 1f2la f2r 1f2ra 1f2re g2l 1g2lo g2r 1g2ra k2l 1k2ra 1k2re 1k2ri 1k2v 1k2va p2l p2r 1p2ro c2l q2v 1q2vi sc2h ts2h ch2r",
- ["length"]=1546,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=286,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.rme b/Master/texmf-dist/tex/context/patterns/lang-fi.rme
deleted file mode 100644
index 1fbf72fae79..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.rme
+++ /dev/null
@@ -1,82 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Finnish hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: fihyph.tex (yyyy-mm-dd)
-% Author: Kauko Saarinen
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% -----> Finnish hyphenation patterns for MLPCTeX <------
-% First release January -86 by Kauko Saarinen,
-% Computing Centre, University of Jyvaskyla, Finland
-%
-% Completely rewritten January -88. The new patterns make
-% much less mistakes with foreign and compound words.
-% The article "Automatic Hyphenation of Finnish"
-% by Professor Fred Karlsson is also referred
-% ---------------------------------------------------------
-%
-% 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added.
-% 9th January - 95: added \uccode and \lccode by Thomas Esser
-%
-% ********* Patterns may be freely distributed **********
-%
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.rme b/Master/texmf-dist/tex/context/patterns/lang-fr.rme
deleted file mode 100644
index e58b5a2a7c9..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.rme
+++ /dev/null
@@ -1,110 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-French hyphenation patterns (V2.12, 2002/12/11)
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: frhyph.tex <2006-10-20>
-% Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% French hyphenation patterns
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% This file is available for free and can used and redistributed
-% asis for free. Modified versions should have another name.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% *BEFORE* using this file *PLEASE* run checksum on it: %
-% checksum -v frhyph.tex %
-% to make sure that it hasn't been damaged. %
-% Then if you notice anything wrong in french hyphenation please report to %
-% R. Bastian, D. Flipo, B. Gaulle at the email address: %
-% cesure-l@gutenberg.eu.org %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% checksum = "37208 1458 3078 34821"
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%% The most famous good guys who worked hard to obtain something usable.
-% Jacques Desarmenien, Universite de Strasbourg :
-% - << how to run TeX in a French environment: hyphenation, fonts,
-% typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
-% - << La division par ordinateur des mots francais :
-% application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
-% Gauthier-Villars
-% Norman Buckle, UQAH (nb; many additions)
-% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
-% Justin Bur, Universite de Montreal (jbb; checked against original list)
-% all patterns including apostrophe missing from nb list
-% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle
-% did their best effort to improve the list of patterns.
-%
-% -----------------------------------------------------------------
-%
-% Adaption of these patterns for
-% - TeX Version 3.x and MLTeX 3.x (2.x)
-% and
-% - all fonts in T1/`Cork' and/or CM/OT1 encoding
-% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'
-% as of 1994-02-13 maintained by Bernd Raichle).
-% (An adaption for the old MLTeX 2.x exists but can not be
-% tested in lack of an executable.)
-%
-% -----------------------------------------------------------------
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.rme b/Master/texmf-dist/tex/context/patterns/lang-hr.rme
deleted file mode 100644
index e3c0471cc59..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.rme
+++ /dev/null
@@ -1,24 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Croatian hyphenation patterns
-
-(more info about the licence to be added later)
-
-%
-% Hyphenation patterns for Croatian language
-%
-% Copyright (C) 1994, 1996, 2011 Igor Marinović <marinowski at gmail.com>
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-%
-% Changes:
-% - The first version was realised in late 1994.
-% - Second, much more improved version was realised in the beginning of 1996.
-% (Date of the last change: 19.03.1996).
-% - In summer 2008 the patterns have been incorporated into hyph-utf8
-% and renamed from hrhyph.tex to hyph-hr.tex.
-% - LPPL licence added on 06.06.2011.
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.rme b/Master/texmf-dist/tex/context/patterns/lang-is.rme
deleted file mode 100644
index 8ad9735e091..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-is.rme
+++ /dev/null
@@ -1,83 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Icelandic hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: icehyph.tex (2004-03-08)
-% Author: Jorgen Pind <jorgen at lexis.hi.is>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% The Icelandic Plain TeX hyphenation tables
-% as of Nov 2 1988.
-% Jorgen Pind, Institute of Lexicography, Univ. of Iceland
-% jorgen@lexis.hi.is (Internet)
-%
-% Mar 2 2004: Uploaded a new version to CTAN, with a clarified license
-% statement, at the request of the author, Jorgen Pind.
-% Kristinn Gylfason (kristgy@ieee.org)
-
-% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.2
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.2 or later is part of all distributions of LaTeX
-% version 1999/12/01 or later.
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.lua b/Master/texmf-dist/tex/context/patterns/lang-la.lua
deleted file mode 100644
index 38c084422e0..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-la.lua
+++ /dev/null
@@ -1,128 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="la",
- ["source"]="hyph-la",
- ["texcomment"]="% Latin hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: lahyph.tex (2007-09-03)\
-% Author: Claudio Beccari <claudio.beccari at polito.it>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% ********** lahyph.tex *************\
-%\
-% Copyright 1999- 2001 Claudio Beccari\
-% [latin hyphenation patterns]\
-%\
-% -----------------------------------------------------------------\
-% IMPORTANT NOTICE:\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-% -----------------------------------------------------------------\
-%\
-% Patterns for the latin language mainly in modern spelling\
-% (u when u is needed and v when v is needed); medieval spelling\
-% with the ligatures \\ae and \\oe and the (uncial) lowercase `v'\
-% written as a `u' is also supported; apparently there is no conflict\
-% between the patterns of modern Latin and those of medieval Latin.\
-%\
-% Support for font encoding T1 with a 256-character set.\
-%\
-% Prepared by Claudio Beccari\
-% Politecnico di Torino\
-% Torino, Italy\
-% e-mail beccari@polito.it\
-%\
-% 1999/03/10 Integration of `lahyph7.tex' and `lahyph8.tex' into\
-% one file `lahyph.tex' supporting fonts in OT1 and T1 encoding by\
-% Bernd Raichle using the macro code from `dehypht.tex' (this code\
-% is Copyright 1993,1994,1998,1999 Bernd Raichle/DANTE e.V.).\
-%\
-% 2010/05/31 Removal of OT1 support\
-% 2010/06/01 Removal of pattern 2'2 (probably a leftover from Italian)\
-%\
-% \\versionnumber{3.2} \\versiondate{2010/06/01}\
-%\
-% Information after \\endinput.\
-%\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-%\
-% \\message{Latin Hyphenation Patterns `lahyph' Version 3.2 <2010/06/01>}\
-%\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="abcdefghijklmnopqrstuvxzæœ",
- ["data"]=".a2b3l .anti1 .anti3m2n .circu2m1 .co2n1iun .di2s3cine .e2x1 .o2b3 .para1i .para1u .su2b3lu .su2b3r 2s3que. 2s3dem. 3p2sic 3p2neu æ1 œ1 a1ia a1ie a1io a1iu ae1a ae1o ae1u e1iu io1i o1ia o1ie o1io o1iu uo3u 1b 2bb 2bd b2l 2bm 2bn b2r 2bt 2bs 2b. 1c 2cc c2h2 c2l 2cm 2cn 2cq c2r 2cs 2ct 2cz 2c. 1d 2dd 2dg 2dm d2r 2ds 2dv 2d. 1f 2ff f2l 2fn f2r 2ft 2f. 1g 2gg 2gd 2gf g2l 2gm g2n g2r 2gs 2gv 2g. 1h 2hp 2ht 2h. 1j 1k 2kk k2h2 1l 2lb 2lc 2ld 2lf l3f2t 2lg 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2l. 1m 2mm 2mb 2mp 2ml 2mn 2mq 2mr 2mv 2m. 1n 2nb 2nc 2nd 2nf 2ng 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3m n2s3f 2nt 2nv 2nx 2n. 1p p2h p2l 2pn 2pp p2r 2ps 2pt 2pz 2php 2pht 2p. 1qu2 1r 2rb 2rc 2rd 2rf 2rg r2h 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt 2rv 2rz 2r. 1s2 2s3ph 2s3s 2stb 2stc 2std 2stf 2stg 2st3l 2stm 2stn 2stp 2stq 2sts 2stt 2stv 2s. 2st. 1t 2tb 2tc 2td 2tf 2tg t2h t2l t2r 2tm 2tn 2tp 2tq 2tt 2tv 2t. 1v v2l v2r 2vv 1x 2xt 2xx 2x. 1z 2z. a1ua a1ue a1ui a1uo a1uu e1ua e1ue e1ui e1uo e1uu i1ua i1ue i1ui i1uo i1uu o1ua o1ue o1ui o1uo o1uu u1ua u1ue u1ui u1uo u1uu a2l1ua a2l1ue a2l1ui a2l1uo a2l1uu e2l1ua e2l1ue e2l1ui e2l1uo e2l1uu i2l1ua i2l1ue i2l1ui i2l1uo i2l1uu o2l1ua o2l1ue o2l1ui o2l1uo o2l1uu u2l1ua u2l1ue u2l1ui u2l1uo u2l1uu a2m1ua a2m1ue a2m1ui a2m1uo a2m1uu e2m1ua e2m1ue e2m1ui e2m1uo e2m1uu i2m1ua i2m1ue i2m1ui i2m1uo i2m1uu o2m1ua o2m1ue o2m1ui o2m1uo o2m1uu u2m1ua u2m1ue u2m1ui u2m1uo u2m1uu a2n1ua a2n1ue a2n1ui a2n1uo a2n1uu e2n1ua e2n1ue e2n1ui e2n1uo e2n1uu i2n1ua i2n1ue i2n1ui i2n1uo i2n1uu o2n1ua o2n1ue o2n1ui o2n1uo o2n1uu u2n1ua u2n1ue u2n1ui u2n1uo u2n1uu a2r1ua a2r1ue a2r1ui a2r1uo a2r1uu e2r1ua e2r1ue e2r1ui e2r1uo e2r1uu i2r1ua i2r1ue i2r1ui i2r1uo i2r1uu o2r1ua o2r1ue o2r1ui o2r1uo o2r1uu u2r1ua u2r1ue u2r1ui u2r1uo u2r1uu",
- ["length"]=1756,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=335,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.rme b/Master/texmf-dist/tex/context/patterns/lang-la.rme
deleted file mode 100644
index de035ee154c..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-la.rme
+++ /dev/null
@@ -1,110 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Latin hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: lahyph.tex (2007-09-03)
-% Author: Claudio Beccari <claudio.beccari at polito.it>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% ********** lahyph.tex *************
-%
-% Copyright 1999- 2001 Claudio Beccari
-% [latin hyphenation patterns]
-%
-% -----------------------------------------------------------------
-% IMPORTANT NOTICE:
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-% -----------------------------------------------------------------
-%
-% Patterns for the latin language mainly in modern spelling
-% (u when u is needed and v when v is needed); medieval spelling
-% with the ligatures \ae and \oe and the (uncial) lowercase `v'
-% written as a `u' is also supported; apparently there is no conflict
-% between the patterns of modern Latin and those of medieval Latin.
-%
-% Support for font encoding T1 with a 256-character set.
-%
-% Prepared by Claudio Beccari
-% Politecnico di Torino
-% Torino, Italy
-% e-mail beccari@polito.it
-%
-% 1999/03/10 Integration of `lahyph7.tex' and `lahyph8.tex' into
-% one file `lahyph.tex' supporting fonts in OT1 and T1 encoding by
-% Bernd Raichle using the macro code from `dehypht.tex' (this code
-% is Copyright 1993,1994,1998,1999 Bernd Raichle/DANTE e.V.).
-%
-% 2010/05/31 Removal of OT1 support
-% 2010/06/01 Removal of pattern 2'2 (probably a leftover from Italian)
-%
-% \versionnumber{3.2} \versiondate{2010/06/01}
-%
-% Information after \endinput.
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% \message{Latin Hyphenation Patterns `lahyph' Version 3.2 <2010/06/01>}
-%
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ml.lua b/Master/texmf-dist/tex/context/patterns/lang-ml.lua
deleted file mode 100644
index 042cdf5df72..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ml.lua
+++ /dev/null
@@ -1,45 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="ml",
- ["source"]="hyph-ml",
- ["texcomment"]="% Malayalam hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% These patterns originate from\
-% http://git.savannah.gnu.org/cgit/smc/hyphenation.git/tree/)\
-% and have been adapted for hyph-utf8 (for use in TeX).\
-%\
-% Hyphenation for Malayalam\
-% Copyright (C) 2008-2010 Santhosh Thottingal <santhosh.thottingal@gmail.com>\
-%\
-% This library is free software; you can redistribute it and/or\
-% modify it under the terms of the GNU Lesser General Public\
-% License as published by the Free Software Foundation;\
-% version 3 or later version of the License.\
-%\
-% This library is distributed in the hope that it will be useful,\
-% but WITHOUT ANY WARRANTY; without even the implied warranty of\
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\
-% Lesser General Public License for more details.\
-%\
-% You should have received a copy of the GNU Lesser General Public\
-% License along with this library; if not, write to the Free Software\
-% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹാിീുൂൃെേൈൊോൌ്ൗൠൡൺൻർൽൾൿ‌‍",
- ["data"]="2‍2 1‌1 1അ1 1ആ1 1ഇ1 1ഈ1 1ഉ1 1ഊ1 1ഋ1 1ൠ1 1ഌ1 1ൡ1 1എ1 1ഏ1 1ഐ1 1ഒ1 1ഓ1 1ഔ1 ാ1 ി1 ീ1 ു1 ൂ1 ൃ1 െ1 േ1 ൈ1 ൊ1 ോ1 ൌ1 ൗ1 1ക 1ഖ 1ഗ 1ഘ 1ങ 1ച 1ഛ 1ജ 1ഝ 1ഞ 1ട 1ഠ 1ഡ 1ഢ 1ണ 1ത 1ഥ 1ദ 1ധ 1ന 1പ 1ഫ 1ബ 1ഭ 1മ 1യ 1ര 1റ 1ല 1ള 1ഴ 1വ 1ശ 1ഷ 1സ 1ഹ 2ഃ1 2ം1 2്2 ന്2 ര്2 ള്2 ല്2 ക്2 ണ്2 2ന്‍ 2ല്‍ 2ള്‍ 2ണ്‍ 2ര്‍ 2ക്‍ 2ൺ 2ൻ 2ർ 2ൽ 2ൾ 2ൿ",
- ["length"]=514,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=88,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ml.rme b/Master/texmf-dist/tex/context/patterns/lang-ml.rme
deleted file mode 100644
index 4fa574fe059..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ml.rme
+++ /dev/null
@@ -1,27 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Malayalam hyphenation patterns
-
-(more info about the licence to be added later)
-
-% These patterns originate from
-% http://git.savannah.gnu.org/cgit/smc/hyphenation.git/tree/)
-% and have been adapted for hyph-utf8 (for use in TeX).
-%
-% Hyphenation for Malayalam
-% Copyright (C) 2008-2010 Santhosh Thottingal <santhosh.thottingal@gmail.com>
-%
-% This library is free software; you can redistribute it and/or
-% modify it under the terms of the GNU Lesser General Public
-% License as published by the Free Software Foundation;
-% version 3 or later version of the License.
-%
-% This library is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-% Lesser General Public License for more details.
-%
-% You should have received a copy of the GNU Lesser General Public
-% License along with this library; if not, write to the Free Software
-% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.rme b/Master/texmf-dist/tex/context/patterns/lang-mn.rme
deleted file mode 100644
index 2603ed6e071..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-mn.rme
+++ /dev/null
@@ -1,90 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-(New) Mongolian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: mnhyphn.tex (2008-03-30)
-% Author: Dorjgotov Batmunkh <bataak at gmail.com>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-%% mnhyphn.tex v1.2 2008/03/23 (2010/04/03)
-%% Copyright 2007-2010 by Dorjgotov Batmunkh, National University of Mongolia
-%% email bataak@gmail.com
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% Special thanks to: Jim Hefferon and Robin Fairbairns
-%
-% There are few basic rules in mongolian
-%
-% 1. If there is a consonant then it can use hyphen before it.
-% And if there're two consonants then it can use hyphen before second consonant.
-% Are there three consonants then it can put hyphen before third consonant,
-% also are there four consonants then it can use hyphen before fourth consonant.
-% 2. In the case of hardsign or softsign, it's possible to hyphen after these signs.
-% For instance, байгуулъ-я, үзүүль-е
-% 3. However one vowel can be belong to a syllable, it's not possible to use hyphen.
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.rme b/Master/texmf-dist/tex/context/patterns/lang-nl.rme
deleted file mode 100644
index f955f2877db..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.rme
+++ /dev/null
@@ -1,102 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Dutch hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: nehyph96.tex (yyyy-mm-dd)
-% Author: Piet Tutelaers
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% PURPOSE: 8-bit hyphenation patterns for TeX based upon the new Dutch
-% spelling, officially since 1 August 1996. These patterns follow
-% the new hyphenation rules in the `Woordenlijst Nederlandse
-% Taal, SDU Uitgevers, Den Haag 1995' (the so called `Groene
-% Boekje') described in section 5.2 (Het afbreekteken).
-%
-% The main differences with our earlier patterns based upon the
-% CELEX dictionary are:
-% (1) provide 8-bit patterns based upon the T1 character encoding
-% (the encoding for DC/EC compatible TeX fonts)
-% (2) don't hyphenate if this results in a syllable of one letter
-% before or after the hyphen (hence hyphens in a-drenaline,
-% studi-o, mensa-pen and vide-oachtig are invalid)
-% (3) handle words derived from other languages (`bastaard
-% woorden') according to the new rules
-%
-% Like the CELEX patterns these patterns don't hyphenate:
-% (4) in a changing syllable (menuutje can not be hyphenated as
-% menu-tje)
-% (5) in words that have different hyphenations according to
-% there meaning (buur-tje/buurt-je)
-%
-% COPYRIGHT (C) 1996: Piet Tutelaers
-%
-% -----------------------------------------------------------------
-% IMPORTANT NOTICE:
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-% -----------------------------------------------------------------
-% VERSION: 1.1 (November 1996) Copyright changed March 2000
-%
-% AUTHOR: Piet Tutelaers P.T.H.Tutelaers@tue.nl
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.rme b/Master/texmf-dist/tex/context/patterns/lang-pl.rme
deleted file mode 100644
index 6617f78315d..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.rme
+++ /dev/null
@@ -1,93 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Polish hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: plhyph.tex (1995-06-26)
-% Author: Hanna Kołodziejska, Bogusław Jackowski, Marek Ryćko
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% This is PLHYPH.TeX - the Polish hyphenation patterns
-% version 3.0a, Wednesday, May 17th, 1995
-% to be used for the inclusion of Polish hyphenation patterns in any format,
-% not necessarily in the MeX or LaMeX ones. The patterns are exactly
-% the same as in the version 3.0 being the part of the MeX package,
-% only the surrounding of the \pattern command is changed. The authors
-% claim the upward compatibility, i.e., the version 3.0a can also be used
-% with the MeX or LaMeX formats.
-
-% The history of development of the Polish hyphenation patterns:
-%
-% The first version of the patterns was developed
-% by Hanna Kołodziejska (1987).
-%
-% The adaptation to the LeX format (see below) and extensive modification
-% were done by Bogusław Jackowski & Marek Ryćko (1987--1989).
-%
-% The hyphenation rules were further improved and adapted to the
-% TeX 3.x requirements by Hanna Kołodziejska (1991).
-%
-% Lone-standing version (3.0a) of patterns was prepared (under pressure
-% from LaTeX users) by Bogusław Jackowski and Marek Ryćko, following
-% Mariusz Olko's suggestions, 1995.
-
-% The LeX format mentioned above was the first version of the adaptation
-% of TeX to the Polish language. The next version is called MeX.
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.lua b/Master/texmf-dist/tex/context/patterns/lang-pt.lua
deleted file mode 100644
index ea89ea29f81..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.lua
+++ /dev/null
@@ -1,111 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["characters"]="adefhorstw",
- ["data"]="hard-ware soft-ware",
- ["length"]=19,
- ["n"]=2,
- },
- ["metadata"]={
- ["mnemonic"]="pt",
- ["source"]="hyph-pt",
- ["texcomment"]="% Portuguese hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: pthyph.tex (1994-10-13 - date on CTAN) or (1996-07-21 - date in file) - no idea\
-% Author: Pedro J. de Rezende <rezende at dcc.unicamp.br>, J.Joao Dias Almeida <jj at di.uminho.pt>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-% The Portuguese TeX hyphenation table.\
-% (C) 1996 by Pedro J. de Rezende (rezende@dcc.unicamp.br)\
-% and J.Joao Dias Almeida (jj@di.uminho.pt)\
-% Version: 1.2 Release date: 21/07/96\
-%\
-% (C) 1994 by Pedro J. de Rezende (rezende@dcc.unicamp.br)\
-% Version: 1.1 Release date: 04/12/94\
-%\
-% (C) 1987 by Pedro J. de Rezende\
-% Version: 1.0 Release date: 02/13/87\
-%\
-% -----------------------------------------------------------------\
-% IMPORTANT NOTICE:\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-% -----------------------------------------------------------------\
-% Remember! If you *must* change it, then call the resulting file\
-% something else and attach your name to your *documented* changes.\
-% ======================================================================\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="-abcdefghijklmnopqrstuvwxzáâãçéêíóôõú",
- ["data"]="1b2l 1b2r 1ba 1be 1bi 1bo 1bu 1bá 1bâ 1bã 1bé 1bí 1bó 1bú 1bê 1bõ 1c2h 1c2l 1c2r 1ca 1ce 1ci 1co 1cu 1cá 1câ 1cã 1cé 1cí 1có 1cú 1cê 1cõ 1ça 1çe 1çi 1ço 1çu 1çá 1çâ 1çã 1çé 1çí 1çó 1çú 1çê 1çõ 1d2l 1d2r 1da 1de 1di 1do 1du 1dá 1dâ 1dã 1dé 1dí 1dó 1dú 1dê 1dõ 1f2l 1f2r 1fa 1fe 1fi 1fo 1fu 1fá 1fâ 1fã 1fé 1fí 1fó 1fú 1fê 1fõ 1g2l 1g2r 1ga 1ge 1gi 1go 1gu 1gu4a 1gu4e 1gu4i 1gu4o 1gá 1gâ 1gã 1gé 1gí 1gó 1gú 1gê 1gõ 1ja 1je 1ji 1jo 1ju 1já 1jâ 1jã 1jé 1jí 1jó 1jú 1jê 1jõ 1k2l 1k2r 1ka 1ke 1ki 1ko 1ku 1ká 1kâ 1kã 1ké 1kí 1kó 1kú 1kê 1kõ 1l2h 1la 1le 1li 1lo 1lu 1lá 1lâ 1lã 1lé 1lí 1ló 1lú 1lê 1lõ 1ma 1me 1mi 1mo 1mu 1má 1mâ 1mã 1mé 1mí 1mó 1mú 1mê 1mõ 1n2h 1na 1ne 1ni 1no 1nu 1ná 1nâ 1nã 1né 1ní 1nó 1nú 1nê 1nõ 1p2l 1p2r 1pa 1pe 1pi 1po 1pu 1pá 1pâ 1pã 1pé 1pí 1pó 1pú 1pê 1põ 1qu4a 1qu4e 1qu4i 1qu4o 1ra 1re 1ri 1ro 1ru 1rá 1râ 1rã 1ré 1rí 1ró 1rú 1rê 1rõ 1sa 1se 1si 1so 1su 1sá 1sâ 1sã 1sé 1sí 1só 1sú 1sê 1sõ 1t2l 1t2r 1ta 1te 1ti 1to 1tu 1tá 1tâ 1tã 1té 1tí 1tó 1tú 1tê 1tõ 1v2l 1v2r 1va 1ve 1vi 1vo 1vu 1vá 1vâ 1vã 1vé 1ví 1vó 1vú 1vê 1võ 1w2l 1w2r 1xa 1xe 1xi 1xo 1xu 1xá 1xâ 1xã 1xé 1xí 1xó 1xú 1xê 1xõ 1za 1ze 1zi 1zo 1zu 1zá 1zâ 1zã 1zé 1zí 1zó 1zú 1zê 1zõ a3a a3e a3o c3c e3a e3e e3o i3a i3e i3i i3o i3â i3ê i3ô o3a o3e o3o r3r s3s u3a u3e u3o u3u 1-",
- ["length"]=1444,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=307,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.rme b/Master/texmf-dist/tex/context/patterns/lang-pt.rme
deleted file mode 100644
index 9f87c02f8e7..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.rme
+++ /dev/null
@@ -1,90 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Portuguese hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: pthyph.tex (1994-10-13 - date on CTAN) or (1996-07-21 - date in file) - no idea
-% Author: Pedro J. de Rezende <rezende at dcc.unicamp.br>, J.Joao Dias Almeida <jj at di.uminho.pt>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% The Portuguese TeX hyphenation table.
-% (C) 1996 by Pedro J. de Rezende (rezende@dcc.unicamp.br)
-% and J.Joao Dias Almeida (jj@di.uminho.pt)
-% Version: 1.2 Release date: 21/07/96
-%
-% (C) 1994 by Pedro J. de Rezende (rezende@dcc.unicamp.br)
-% Version: 1.1 Release date: 04/12/94
-%
-% (C) 1987 by Pedro J. de Rezende
-% Version: 1.0 Release date: 02/13/87
-%
-% -----------------------------------------------------------------
-% IMPORTANT NOTICE:
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-% -----------------------------------------------------------------
-% Remember! If you *must* change it, then call the resulting file
-% something else and attach your name to your *documented* changes.
-% ======================================================================
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.rme b/Master/texmf-dist/tex/context/patterns/lang-ro.rme
deleted file mode 100644
index fb986802617..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.rme
+++ /dev/null
@@ -1,114 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Romanian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: rohyphen.tex (1996-11-11)
-% Author: Adrian Rezus <adriaan at {sci,cs}.kun.nl>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% ROHYPHEN.TEX, version 1.1 <29.10.1996> R [7.11.1996] %%
-%% (C) 1995-1996 Adrian Rezus [adriaan@{sci,cs}.kun.nl] %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% Romanian TeX hyphenation table: NFSS 2 encoding, medium.
-%% Contents: 647 Romanian hyphen patterns, with diacritics.
-%%
-%% This file is part of the Romanian TeX system.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Romanian TeX, version 1.3R <29.10.1996> %%
-%% (C) 1994-1996 Adrian Rezus %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% History:
-%% ROHYPHEN.TEX 1.0 <10.02.1995>: Plain TeX and LaTeX 2.09.
-%% ROHYPHEN.TEX 1.1 <29.10.1996>: Plain TeX and LaTeX2e.
-%
-% -------------------------------------------------------------------
-
-% TODO: fix the notice below - it only holds for the old patterns
-
-% NB This file must be used in conjunction with either one of
-%
-% (1) ROMANIAN.TEX v1.2(R) [1994-1995] [(La)TeX] or
-% (2) ROMANIAN.STY v1.3R [1996] [(La)TeX(2e)]
-%
-% NB Romanian has LR-HYPHEN-MINs [2 2] (like German)!
-% NB Romanian has STRUCTURAL HYPHEN-AMBIGUA:
-% i.e., words that canNOT be hyphenated correctly without
-% additional (e.g., semantic, stress-mark) information.
-% --------------------------------------------------------
-% The Romanian TeX encoding of the Romanian diacritics:
-% --------------------------------------------------------
-% Romanian TeX DQ-macro encodings = (La)TeX macros
-% --------------------------------------------------------
-% ă = \u{a} [-] \u{A} [not encoded]
-% â = \^{a} [-] \^{A} [not encoded]
-% î = \^{\i} "I = \^{I}
-% ș = \c{s} "S = \c{S}
-% ț = \c{t} "T = \c{T}
-% -------------------------------------------------------------
-% NB Romanian \^{a} behaves like \^{\i} as regards hyphenation.
-% NB The capital \u{A} and \^{A} are rare in script; as such,
-% they occur only in records of the Romanian substandard.
-% -------------------------------------------------------------------
-%
-% original patterns generated by PatGen2-output hyphen-level 9: do NOT modify the list by hand!
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.rme b/Master/texmf-dist/tex/context/patterns/lang-ru.rme
deleted file mode 100644
index fb5752d77e1..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.rme
+++ /dev/null
@@ -1,81 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Russian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: TODO:WRITEME (2003-03-10)
-% Author: Alexander I. Lebedev <swan at scon155.phys.msu.su>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Russian hyphenation patterns, version 2003/03/10
-% Copyright 1999-2003 Alexander I. Lebedev <swan@scon155.phys.msu.su>
-%
-% This program may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.2 or any later
-% version.
-%
-% Patterns were generated with patgen from a 990,000-word list and then
-% manually corrected.
-%
-% The program consists of the files ruhyphal.tex, cyryoal.tex and two
-% document files README.ruhyphal and hyphen.rules. The file cyryoal.tex
-% can be regenerated using mkcyryo script (a part of ruhyphen package)
-% and the latest release of rus-ispell dictionaries
-% <ftp://scon155.phys.msu.su/pub/russian/ispell/>.
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.rme b/Master/texmf-dist/tex/context/patterns/lang-sk.rme
deleted file mode 100644
index ca0b5300075..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.rme
+++ /dev/null
@@ -1,87 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Slovak hyphenation patterns (Jana Chlebikova, 1992)
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: skhyphen.tex (yyyy-mm-dd), skhyphen.ex (yy-mm-dd)
-% Author: Jana Chlebíková <chlebikj at dcs.fmph.uniba.sk>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Slovak hyphenation (version 2.0) 24.4.1992
-% Autor: Jana Chlebíková, department of Informatics Education,
-% Comenius University, 842 15 Bratislava, Slovakia
-% <chlebikj@dcs.fmph.uniba.sk>
-%
-% This is free software; you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation; either version 2 of the License, or
-% (at your option) any later version.
-%
-% This file is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this program; if not, write to the Free Software
-% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-%%% --------------------------------------------------------------------
-% \message {Loading SK hyphenation patterns: Jana Chlebikova, 1992}
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.rme b/Master/texmf-dist/tex/context/patterns/lang-sl.rme
deleted file mode 100644
index 7e45033d464..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.rme
+++ /dev/null
@@ -1,98 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Slovenian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: slhyph.tex (2007-01-29)
-% Author: Matjaž Vrečko <matjaz at mg-soft.si>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% This is `slhyph.tex' as of 15. 4. 97.
-%
-% Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO)
-% [slovenian hyphenation patterns]
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-%
-% This file contains slovene hyphen patterns with čšž
-%
-% Generation of hyphen patterns for TeX
-%
-% Matjaž Vrečko, TeXCeH (SLO), 1990
-% Email: matjaz@mg-soft.si
-%
-% Changes:
-% 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX)
-%
-% Some cosmetic changes done later on, but none of these apply any more;
-% the patterns are still the same as they were originally:
-%
-% 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah)
-% 1995-04-06 Release of `sihyph21.tex'
-% 1995-06-20 Added \slovenehyphenmins
-% Release of `sihyph22.tex'
-% 1997-15-04 Some changes concerning "c, "s, "z and ...
-% Release of `sihyph23.tex'
-% 2007-01-20 `sihyph23.tex' renamed to `slhyph.tex'
-% (sl is the proper language code for Slovenian)
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.rme b/Master/texmf-dist/tex/context/patterns/lang-sr.rme
deleted file mode 100644
index f163cc8a9a3..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-sr.rme
+++ /dev/null
@@ -1,84 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Serbian hyphenation patterns in Cyrillic script
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: srhyphc.tex (2003-06-09)
-% Author: Aleksandar Jelenak <ajelenak AT yahoo.com>, Dejan Muhamedagić
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian
-% language in the Cyrillic alphabet. TeX font encoding is T2A.
-%
-% This file is distributed under the terms of the GNU General Public License.
-% Latest version of the license is at <http://www.gnu.org/copyleft/gpl.html>.
-%
-% Version: 1.0a
-% Last change: 2003-06-09
-%
-% Credits:
-% - Initial hyphenation patterns for T1 font encoding by Dejan Muhamedagić
-% - Improvements and adaptation to T2A font encoding by Strahinja Radić
-% - Further improvements and integration into one file by Aleksandar Jelenak
-%
-% Current maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-%
-% \message{Serbian Cyrillic Hyphenation Patterns `srhyphc.tex' v1.0a <2003-06-09>}
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.rme b/Master/texmf-dist/tex/context/patterns/lang-sv.rme
deleted file mode 100644
index 095d9addf04..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.rme
+++ /dev/null
@@ -1,116 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03)
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: sehyph.tex (2003-09-08)
-% Author: Jan Michael Rynning
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Swedish hyphenation patterns.
-%
-% Copyright 1994 by Jan Michael Rynning. All rights reserved.
-% This program may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.2 of this license or
-% (at your option) any later version. The latest version of this license
-% is in http://www.latex-project.org/lppl.txt and version 1.2 or later is
-% part of all distributions of LaTeX version 1999/12/01 or later.
-%
-% Last update: 1994-03-03 (March 3, 1994).
-% Revision history:
-% 1991-01-08: First version available for anonymous FTP.
-% 1991-08-08: Changed \aa to \aa0 at end of line, to stop TeX from
-% concatenating the patterns.
-% 1991-09-03: Cleaned up lots of inconsistencies in the dictionary.
-% As a consequence, the patterns shrunk a lot. Also
-% added some 4000 one-syllable words, some of which were
-% hyphenated by the old patterns, and some 1500 compound
-% words, about half of which were incorrectly hyphenated
-% by the old patterns.
-% 1991-11-01: Added another some 6200 compound words, all of which were
-% incorrectly hyphenated by the old patterns.
-% 1991-11-13: Added another some 6500 compound words, all of which were
-% incorrectly hyphenated by the old patterns.
-% 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts.
-% 1994-03-03: The hyphenated dictionary now contains about 118,000 words.
-% The hyphenation now works much better for compound words.
-% Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4.
-%
-% This file contains Swedish hyphenation patterns for TeX. It assumes
-% that you have fonts with the Swedish letters in the positions where
-% they occur in ISO Latin 1 (ISO 8859/1):
-% Letter: \AA \"A \"O \'E \aa \"a \"o \'e
-% Position: "C5 "C4 "D6 "C9 "E5 "E4 "F6 "E9
-%
-% Load this file into initex after plain.tex (or lplain.tex, splain.tex,
-% or whatever).
-%
-% The patterns were generated in such a way that they will hyphenate
-% correctly if \lefthyphenmin>=1 and \righthyphenmin>=2.
-%
-% These hyphenation patterns work quite well for simple words, but not
-% quite as well for compound words. I'm working on improving the quality,
-% by adding more words. If you know any Swedish words which are not
-% correctly hypheneted using these patterns, or if you have questions or
-% comments, please contact me:
-%
-% Jan Michael Rynning <jmr@incolumitas.se>
-% --------------------------------------------------------------------------
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-th.lua b/Master/texmf-dist/tex/context/patterns/lang-th.lua
deleted file mode 100644
index eded2bf09c8..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-th.lua
+++ /dev/null
@@ -1,43 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="th",
- ["source"]="hyph-th",
- ["texcomment"]="% Thai hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Thai hyphenation patterns\
-%\
-% Copyright 2012-2013 Theppitak Karoonboonyanan <theppitak at gmail.com>\
-%\
-% This work may be distributed and/or modified under the\
-% conditions of the LaTeX Project Public License, either version 1.3\
-% of this license or (at your option) any later version.\
-% The latest version of this license is in\
-% http://www.latex-project.org/lppl.txt\
-% and version 1.3 or later is part of all distributions of LaTeX\
-% version 2005/12/01 or later.\
-%\
-% This work has the LPPL maintenance status `maintained'.\
-%\
-% The Current Maintainer of this work is Theppitak Karoonboonyanan.\
-%\
-% http://linux.thai.net/projects/thailatex\
-% http://linux.thai.net/svn/software/thailatex/trunk\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮะัาำิีึืฺุูเแโใไๅ็่้๊๋์ํ๎",
- ["data"]=".ชี5วั .ทัศนู5 .ที่3 .บท1 .รง4 .ราย3 .ลำ3 .สน5ท .สู3ต .ใบ3 2ก1ก ก4กม กก4ส 2ก1ข ก4ขค กข5คณ ก4ขช กข5ชา ก4ขณ ก5ขณะ ก5ขณา ก4ขบ กข5บุ ก4ขภ กข5ภั ก4ขม ก5ขมั กข5มา กข5มู กข5ลา ก4ขเ กข5เท กข5เว ก4ข์ ก1ค กง5บว ก1จ ก1ช 2กซ ก3ซิ กญ5จน กฎ5หม กฎ5เก กฏ5หม ก5ดิน ก1ต ก4ตด กต5ดิ ก4ตส ก4ตเ ก1ท ก1น ก4นด ก4นธ ก1บ ก1ป กป4ร ก1พ ก1ฟ ก1ม ก4มม กม5ลา ก4มส ก4มเ กย5มุ ก3ย้ กร5กฎ ก5ร5ณั กร5ต๋ 1ก4รร กร5รา กร5ลา ก5ราค ก4รู กร5ไฟ กล5นค กล5บิ กล5มห ก2ว ก5วัต ก5ษณน ก3ษณะ ก5ษณา ก5ษมา ก5ษมี กษ5เท ก1ส กส4น ก4สโ ก1ห 3กอน กอ5อิ กะ5ถั กะ5ผล 4กะร 1กั 1กา กา5กะ กา5ดู กา5นี กา5น้ กา5บอ กา5ฝา กา5ร่ กำ5ด้ กำ5ทอ กำ5ผล กิ5กะ 1กิจ กิ4ต กิ5นี 3กิริ กี5รณ กี5รต กี5สถ 1กุ กุ5งอ กุ5ชิ กุ5ฎุ กุ5มุ กุ5รร กุ5ลี กุ5แห 1กู กู5ปร กู5รข กู5รม กู5ลิ ก1เ ก1แ ก1โ ก1ไ ก่5กอ ก่5บ้ ก่5ป่ ก์5ท็ ข2 ขม5หิ 4ขลา ขอ5ขม ขอ5ง้ ขอ5อภ 1ขั 1ขา ขา5ก๊ ขา5ทน ขิ5ปส ขิ5ไณ ขี้1 ข่5มุ ข่5หง ข้าว3 ค1ค คช5สี คช5เช คช5เม ค4ณิ ค4ทร คท5รี คท5วอ คน5ยอ 4คนิ คป5ซู คป5ผก 3คมน คม5ฟร คม5ลอ 2คย คร5ซอ คร5นอ คร5นี คร5พน คร5ฟิ คร5มเ คร5ร้ คร5ลิ คร5หา 4ค5รัก คฤ5หบ คฤ5หา คฤ5โฆ คล5คู ค2ว คว5ทอ 3ควา 2คส คส5ติ คห5กร คห5นิ คห5บด คห5สถ 3คอน 3คัน 1คา คา5ปู คา5พจ คา5พย คา5รว คา5วจ คำ5ดี คำ5โอ คำ5ไก คี5รี 1คุ คุ5ณู คุ5ลี 4คุ์ คู5ปอ คู5ลอ 2ค1เ ค1โ 2ค์ ค์5จำ 1ฆา ฆา5ณั ฆี5ยก ง1ก ง4กห งกะ4ร ง4กเ ง4ก์ ง1ข ง4ขก ง4ขต ง1ค ง4คจ ง4คช ง4คญ ง4คธ ง4คบ ง4คป งค5วั ง4คศ ง4คโ งฆ5ปร งฆ5สภ งฆ5เถ งฆ5เภ ง1ง ง4งเ ง1จ ง1ฉ ง1ช ง4ชี ง1ซ ง1ด ง1ต ง1ท ง1น งบ5ดุ ง1ป ง1ผ ง1พ ง1ม ง1ย ง1ร ง1ล ง1ว ง4วเ ง1ส งส5กล งส5กุ ง4สบ ง4สพ งส5พย ง4สภ ง1ห งห5นา ง4หบ งห5บั งห5รา 1งา งา5ช้ งา5รำ งู5สว ง1เ ง1แ ง1โ ง1ไ ง่5งอ จ1จ จ4จว จ1ฉ จด5จ่ จต5จำ จต5มู จป4ก จมบ5พ 3จริ จอ5งอ 1จั 1จา จา5มร จา5มี จา5รึ จำ5ทว จำ5อว 1จิ จิ5จู จิ5ตอ จี5ดี จุ5ฑา จุ5สม จ1เ ฉ2 ฉก5ฉว ฉก4ษ ฉท5ทิ ฉร5ฉิ 1ฉั 1ฉา ฉา5ก๊ ฉา5พย ช1ช ช1ฌ ช4ฌก ช4ฌฆ ช5นีก 4ชน์ ชฟ5รอ ชฟ5โร ชร5กล ชร5ริ ชร5ฤก ชร5หล ชร5หึ ชร5อุ ชว4โ ชอง4 1ชั 1ชา ชา2ต ชา5ตร ชา5ปี ชา5มต ชา5ยต ชา5สง ชำ5งั 3ชิต ชิ5นี ชิ5รณ ชิ5แก ชี5ผะ ชี5ผ้ ชี5ฟอ ชี5รณ 3ชีว ชี5วน ชุ5ติ ชุ5ลด ชู5ปก ชู5ปถ ชู5ปโ ช่5อิ ช้5สอ ช้5ได ซน5ทร ซ5ราม ซล5มอ 1ซั 1ซา ซา5ชู ซา5มู ซิ5ตร ซิ5ฟิ ซิ5แล ซี5ดี ซี5นี ซี5รา ซี5ริ ซี5รี ซี5ร็ ซี5ลี ซู5ซู ซู5บิ ซู5ริ ซู5ลิ ซ1เ ซ1โ ซ่5ง่ ซ่5ซ้ 1ซ่า ญจ5ดุ ญ4จน ญ5จ5นท ญ5จ5นบ ญ5จนา ญจ5บร ญ5จ5มบ ญจ5รง ญจ5วี ญจ5ศี ญ4ฉน ญ1ช ญ1ญ ญประ4 1ญา ญา4ต ญ่5บ้ ฏ1ฐ ฏ4ฐบ ฏิ5ทิ ฏิ5ปท ฏิ5ปุ ฏิ5สน ฏิ5สว ฐ4ภั ฐม5ฌา ฐม5พย ฐม5ฤก 1ฐา ฐา5นี ฐุ5ชุ ฑา5มณ ฑา5สถ 3ฑูร ฒิ5สภ ฒิ5สม ณ1ฑ ณ4ฑก ณ4ฑฆ ณ4ฑน ณ5ฑนะ ณ4ฑบ ณ4ฑม ณฑ5ลา ณ4ฑส ณ5ฑสก ณฑ5สถ ณ5ฑ5สี ณฑ5โล ณ4ฑ์ ณย5รั ณ1ร ณ4วา ณสม4 ณห5พล ณห5ภู 1ณา ณา5ปี 1ณิ 1ณี ณี5สง ณู5ปโ ด1ก ด4กง ด4กด ดก5ดื ด4กเ ด4กแ ด1ข ด1ค ดง4ค ดง5ออ ด1ช ด4ชน ด5ชนะ ด1ด ด4ดเ ด1ต ด1ท ด1ป ด1พ ดร5ลิ ด3ร้ ด1ส ด4สก ด1ห 1ดั ดัส5ต 1ดา ดา5กอ ดา5มุ ดา5รก ดา5สว ดำ5ฤษ ดิ5ทอ ดิ5ทิ ดิ4บ ดิ5วร ดิ5ศว ดี5ดี 3ดีน ดี5ฝ่ ดี5รอ ดี5ลิ ดี5วี ดี5หม ดี5หว ดู5ถู ดู5ปอ ดู5รั ดู5หม ดู5แค ด1เ ด1แ ด1โ ด้5ยิ 2ด์ ด์5สป 2ตก ตก5ร้ ต1ค 2ต1ช 2ต1ต ต4ตภ ต4ตส ต4ตโ ต5ถกะ ต3ถา ต5ถุป ต5ถุศ ตถ5เล ตทัศนูป5 2ตน ตน5ฟอ ตน5วร ต4นาธ 2ต1บ ต4บช ตบ5ชว ตป5นี ต1ภ 2ตย 4ตรก ตร5กิ ตร5งอ ตร5จี ตร5จุ 4ตรฐ ตร5ตร ตร5ทว ตร5ผล ตร5ฝร ตร5พล ตร5รง ตร5ลด ต5ริยา ต4รู 2ตร์ ตฤ5ตี ตล5รั ต1ส ต4สค ตส5วา ตส4เ ต4สแ ตส5แต ตอ5ม่ ตอ5รอ ตะ5ใภ 1ตั 1ตา ตา5กล ตา5กว ตา5นึ ตา5ปร ตา5ปล ตา5ผิ ตา5ฟู ตา3มห ตา5มอ ตา5มะ ตา5ฬี 3ติก. ติ5จู ติ5ช่ ติ5ทิ ติ5นร ติ5บอ ติ5มศ ติ5มส ติ5มอ ติ5ยม 4ติ์ ตี5ขล ตี5คู ตี5ตื ตี5รว ตี5ลั 3ตี้. ตุ5ตถ ตุ5ทส ตุ5ป่ ตุ5มห ตุ5รก ตุ5ลั ตุ5สด ตู5ดิ ต1เ ต3แล ต1โ ต่5ถา ต่5ว่ ต่5สว ต้5ก๋ ต้5ตอ ต้5ฝุ ต๋5เต ต์5คล ต์5ฟู ต์5ศต ถด5ถอ ถม5ถื ถล5ไถ ถว5ไม ถะ5ถั ถ4าธ ถา5วร ถ4ีย ถี5ลิ 3ถุน ถ่5ถอ ถ่5ถา 4ทกา ทค5ติ ทค5นี ทด5รอ ทด5ลอ ทธ5คย ท5ธชะ ทธ5ฎี ทธ5ปฏ ทธ5พร ทธ5รั ทธ5ศต ทธ5สี ทธ5อง ท5ธิก ท5ธิช ท5ธิบ ท5ธิป ท5ธิผ ท5ธิพ ท5ธิภ ท5ธิร ท5ธิฤ ท5ธิศ ท5ธิโ ทธ5เจ ทพ5ธิ ทพ5ยุ ทฟ5ลอ 2ทย ท5ยาน ทร5คต ทร5คร ทร5ธน 3ทรร ทร5สโ ทร5หว ทร5หึ 1ทรา ท5ราก 4ท5ราห 1ทรี ทว5ทห ทว5สถ ทศ5ทิ ทศ5วร ทสน5ท ทส5โก ทห5วั ทห5ฬิ 1ทั 1ทา ทา5ฐิ ทา5ฒิ ทา5นอ ทา5มร ทา5รพ ทำ5ขว ทำ5ซ้ ทำ5ท่ ทำ5โท ทิ5ฆั ทิ5ฐิ ทิ4พ ทิ5พา ทิ5วง ที5นว ที5นี ที5รา ทุ5คต ทุ5ลั ทุ5ศี 1ทู ทู5น่ ท1เ ท์5ดอ 1ธร 4ธรส 4ธรั 1ธา ธา1รณ ธิ5ฤท ธิ5ศี ธิ5สม ธี5รี ธุ5ดง ธุ5ลี ธู5ปน น1ก น4กค น4กป นก5ยู นก5รู น1ข นข5ลิ น1ค นค5ริ น1จ น4จอ นจ5อน น1ช น4ชญ น1ซ น1ด น4ดร น1ต นต5กว น5ตกะ นต5ดิ น4ตท นต5ทิ นต5ปิ น4ตภ น5ตระ น5ตรั น3ตรา น5ต5ริ นต5ฤด น3ติ น5ตุก น5ตุฏ น4ต์ นถ5ธุ นถ5รจ นท5ขี นท5นน น5ทนะ นท5ผล นท4ย น5ทรง น5ทรล น5ทรั น5ทรุ นท5ฤก น5ทลา น5ทวย น3ทอ น1ทิ น3ที นธ5กร น5ธกะ น5ธนะ น5ธุก น5ธุร น5ธุว น5ธุศ นธ5ไม น1น น4นต น4นท น4นร นน5รา น1บ นบ5นอ น1ป น4ปจ นป5จู น4ปท น1พ นพ5ปฎ นพ5ศู นภ5ศู น5ยนต นฤ5คห นฤ5ปเ นฤ5เท นฤ5เบ น1ล น4ลล นว5ร่ น1ศ นษ5กร น1ส น4สซ น4สส นส5แด น4สโ น1ห นอ5กะ 3นอน 1นั 1นา นา4คร นา5ณั นา5ปร นา5รย นา5วต นา5วล นา5สณ นา5สน นา5สว นา5ฬิ 4นาะ 1นิ นิ5ด้ นิ5ฟอ นิ5มน นิ5ยม นิ5ยา นิ5รอ นิ5ลุ นิ5วร นิ5สง นิ5สถ นิ5สี นิ5แด นี5มี นี5มู 1นุ นุ5พย 1นู 2น1เ น1แ น1โ น1ไ น่5อี 3น้อ 1น้ำ น์5สไ บ1ก บ4กษ บกิส5 บ4กแ บ1ข บ1ค บ4คท บค5ที บ4คโ 1บดี บ1ท บบ5ฉบ บบ5ฝึ บบ5อย บ1ป บ1พ บร5มี บ1ส บ4สบ บส4เ บ1ห บอ5ดี บอ5ระ 3บอล 1บั บัพพาชนี5 1บา บาจ5ร บา4ต บา5ตอ บา2ท บา5ทา บา5ทุ บา5รน บา5รอ บา5สม บิ5ชอ บี5คิ บี5ร่ 1บุ บุค3 บุ5ตร บุ5ถุ บุ5รพ 1บู บู4ช5น บู5ติ บ1เ บ1แ บ1โ บ๊5จี บ๊5เบ ปก4ส ป4จั ป4จา ปฐ5ปท ปฐ5พี ปต5ถก ปต5พล ป4ทา ป1ป ป4ปเ ปม5ด้ ป4ยุ ปร5ตอ ปร5ตี ปร5ตุ ปร5ผั ปร5ษณ 1ประ ปร5แก ปร5แท ปล5ญว ป4วา ปส4ต 1ปั 1ปา ปา5ฐก ปา5ณก ปา5นี ปา5ปิ ปาร4 ปา5รเ ปิ5ดอ ปิ5ยภ ปิ5ยอ ปิ5หก ปี5ชี ปี5มะ ปี5ฬก ปี่3 ปุ5คล ปุ5ถุ ปู5จ๋ ปู5ติ ป1เ ป1ไ ผก5ผั ผณิ5ศ ผน5ผั ผ4นิ ผ4ยา ผล5พล ผล5ไม ผ4สา ผี5ดิ ผี5ตอ ผี5ถ้ ผี5ห่ ผ้า3 3ฝอย ฝี5มะ ฝ่5ฝั 3พจน พจ5นี พช5ฉล พช5รา พท5ริ พทัก4 พน5ทะ พ4นั พนิ4 พ1พ 2พ2ย พย5ก๊ พร5ชย พร5ซี พร5มี 1พรร พ4รู 3พฤก พฤ5ฒา พล5ทิ พล5ร่ พส5เฟ พอ5คว พอ5สม 1พั 1พา 4พาจ พา5ชน พา5นร 1พิ พิ5ถั พิ5ถี พิ5ปล พิ5รอ พิ5รี พิ5ลึ พิ5ศุ พิส5ม พี5ระ พุ5ชิ พุ5พอ พู5ทว พู5พอ พ1เ พ4เย พ่5ป๊ พ่อ3 พ้5ท้ 2พ์ พ์5ดี 1ฟั 1ฟา ฟิ4ลา ฟี5ฟ่ ฟู5ฟ่ ฟ1เ 1ฟ้ ภค5ทร ภค3ว ภช5นี 1ภั 1ภา ภา5ณก ภา5ณว ภา5รด ภา5รต ภา5รย ภา5วน ภิ5ชน ภิ5มห ภิ3ร ภิ5สม ภิ5ไธ ภุ5ชง 1ภู ภู5ฏา ภู5ริ ม1ก ม4กม ม4กษ ม1ข ม4ขล ม1ค ม4คค ม4คอ มค5อิ 1มงคล มง5ฟอ ม1จ ม1ช มช4ว ม1ซ 3มณฑ มณ5ฑน มณ5บร มณ5พร มณ5เฑ มด5ยอ มด5ลู ม1ต ม4ตธ ม4ติ ม4ตไ มต5ไต ม1ท 3มนตร มน5ฮั ม4นุ ม1บ มบ4พ ม1ป มป4ช มป5ฤด มป5ฤๅ ม4ป์ ม1พ ม4พก ม4พว ม1ภ มภ5กถ ม1ม ม4มเ ม4มโ มย5รา 3มรร ม3รั ม3ริ มฤ5คิ มฤ5เค มล5ทิ ม3ลิ ม3ล้ ม1ว มว5มอ ม4วล ม1ส มส4เ มห5กร ม3หน มห5ภา ม5หาญ ม5หาย มหา3ส มอ5ขว มอ5คร มอ5ดู มอ5ตำ มอ5นว มอ5นอ มอ5ระ 4มอั มะ5ถั มะ5ฝ่ มะ5ฮอ 1มั ม4ั่ 1มา มา4ก มา5ดร มา5นร มา5ป่ มา5พจ มา5มก มา5มุ มา5ม่ มา5ยณ มา5ยอ มา5ร่ มา3ว4 1มิ มิ5กภ มิ5ชิ มิ5ซร มิ5ตล มิ5ถิ มิ5น่ มิ5ฟล มิ5ลำ มิ5แพ มี5ขม 3มืด 1มือ. มุ5ทะ มุ5ทั มุ5ทิ มุ5ทุ มุ5ฮั มู5ซี มู5ป่ มู5รต มู5ลิ มู5หย มู5หร มู5ฮั มู5แด มู5แผ มู5แฮ ม1เ ม1แ ม1โ ม1ไ ม4่า 3ม้า ม์5ภิ ยก5ย่ ย1กร ย4ก5ร้ ย1ค ยง5บ่ ยง5ฝ้ ยง5อย ยจ5คร ยด5ย้ ย1ต ย1ท ย1ธ ยบ5ร้ ย1ป ย1พ ย1ภ ยม5ยอ ยม5รา ยม5หา ยม5อี ย4มิ ย1ย ยย4ส ยร5ถี ย5รบั ยล5ไท ยว5ข้ ยว5จ๊ ยว5ดอ ยว5นี ยว5ย่ ยว5รั ยว5ไส ย1ศ ย1ส ย1ห ย4หฐ ยห5ฐา ย4หป ยห5ปร ยอ5บี ยอ5รม 1ยั 1ยา ยา5กฤ ยา5กว ยา5ฉุ ยา5ณม ยา5ณว ยา5ถ่ ยา5บร ยา5สล ยา5สี ยา5ฬั ยำ5ทว ยี5รา 1ยุ ยุ5คล ยุ5ตก 4ยุภ ยุ5แย ยุ5แห ยู5ถิ ยู5ฟ่ ยู5ริ ยู5ไน ย1เ ย1แ ย1โ ย์5กล ย์5ถ่ ย์5มน ย์5หน 2รก รก5ซอ รก5ซึ รก5ซ้ ร1กร รก5รา รก5ร้ รค5พว รง5พย รง5รอ รจ5ถร รณ5คด รณ5ตร รณ5ถั รณ5พฤ รณ5สถ ร5ณาญ รณู5ป 4รณ์ ร1ด ร4ดป ร4ดแ ร4ดโ ร4ดไ รด5ไอ รถ1 รถ5พย ร1ท ร4ทฤ รท5ฤด ร4ท4ว รท5วิ รธ5ขึ รธ5สร รธ5เก รน5ทุ 4รนา ร1บ ร4บค ร4บถ รบ5ถ้ ร4บม ร4บั ร4บไ รบ5ไก ร1ป ร4ปณ ร5พชา ร5พชิ รพ5ทิ ร1ภ ร4ภย รม5รอ รมาว5 รม4เห ร4ยั รร4ก รร5คา รร5จถ รร5จว รร5ชิ รร5ณึ รร5ถา รร5ยง รร5ยเ รร3ล รร5หา รร5แท รร5แส รร5ไก รร5ไต รล5ออ รศ5นี รษ5ฐิ รษ5ตร ร1ส ร4สก ร4สช ร4สเ ร4สโ ร3หิ ระ1 ระ5สา ระ5หก 5รังส 3รัฐ 1รัต รา5กฏ รา5กฤ รา5กว 1ราช รา5ชู รา5ดร รา5ดว รา5ดู รา5ม่ รา5วณ รา5สง รา2ห รา5หุ รำ5งั รำ5จว ริ5ซึ ริ5ตร ริ5ทึ 4ริพ ริ5มน 4ริยจ 4ริยย 4ริร ริ5แล 4ริ่ รี5คู รี5ฑา รี5ดู รี5ตร รี5ตอ รี5มู รี5รั รี5รา รี5ริ รี5ลั รี5ลิ รี5ล่ รี5สอ รี5สะ รุ5กว รุ5ขร รุ5คร รุ5ทว รุ5ธิ รุ5มุ รุ5วน 1รู รู5ที รู5นี รู5บิ รูป5ก รู5ปิ รู5มา รู5มู รู5หร 2ร1เ ร1โ ร่5กะ ร่5ตร ร่5ร่ ร่5หล ร์5กิ ร์5กี ร์5ดิ ร์5ติ ร์5ตู ร์5ทิ ร์5ฟอ ร์5ฟู ร์5ลี ร์5วอ ฤ4ดา ฤป4เ ฤษ5ฎี ฤห5บด ล5กนะ ลก5ลา ลก5วั ล3กอ ล4กัย ลข5คณ ลข5หม ลชี4 ลด5ระ ลด5ลิ ล4ดา ล1ต ล4ตฟ ลต5ฟอ ลบ5ตะ ลบ5มุ ลบ5ล้ ลบ5ไส ลป5ตอ ลม5งว 2ลย ล1ล ล4ล์ ล3วี ลว5ไห ลส5ไต ลห5กุ ลอก5ล ลอ5จี ลอ5สร ละ5ผล 1ลักษ ลา5กล ลา5นี ลา5บร ลา5ป๋ ลา5พอ ลา5มี 3ลาร ลา5รอ ลา5ร้ ลา5ฤก ลา5ส้ ลิ5ก่ ลิ5จู ลิ5ซิ ลิ5ซึ ลิ5ตอ ลิ5นอ ลิ5น่ ลิ4บ ลิ5บา ลิ5ฟอ ลิ5มู ลิ5ไท ลิ5ไล ลี5ตะ 3ลีน ลี5ผล ลี5ลา ลี5วู ลุก5ร ลุก5ล ลุ5ล่ ลูก1 ลู5ที ลู5มิ ลู5ลอ ลู5ออ 2ล1เ 2ล1แ ล1โ ล่5ติ ล่5ที ล่5หล ล่5ออ ล้5โพ ล์5สต ว3กร วก5ว่ ว5การ ว1ค 1วงศ วจ5ตร วจ5สอ วช5นี วด5ถ่ วด5มว วด5ยิ วด5ระ วด5ลา วด5ล้ วด5อ้ ว1ต ว4ตฉ วน5ถี วน5ท้ วน5ผส วน5รว วน5ร่ วน5อิ วน5อุ วบ5ยอ วบ5รว วบ5รั วบ5ฮา ว1ป ว1พ วม5รอ ว3มู วย5กิ วย5ก้ วย5จี วย5ริ วย5รื วย5ล้ วย5ไท วย5ไม วร5ธิ วร5มณ วร5มห ว4รย 1วรร4 ว4ร์ วล5ระ ว1ห วอ5ชิ 1วั วัน3 วันต5 วันท4 1วา วา5ดะ วา4ต วา5ตก วา5ติ วา5นร วา5นึ วา5บร วา5มน วา5รณ วา5สนะ วา4ห วา5หน วา5หิ 1วิ วิ5กล วิ5กส วิ5คห วิ5จุ วิ5ดี วิ5ตก วิ5ตร วิ5ตี วิ5ถี 3วิท วิ5ทิ วิ5ธุ วิ5ธู วิ5ปก วิ5ปฏ วิ5ปล วิ5ปว วิภู5 วิ5มล วิ5รง วิ5วร วิ5ศร วิ5ศุ วิ5ษุ วิ5สร วิ5สฤ วิเล5 วิ5ไล วี5คู วี5ชน วี5ดิ 1วุ ว1เ ว1แ ว1โ ว่5ห้ ว้5ชื ว้5ทุ ว้5ลา ว์5ลิ ศ1จ ศน5อุ ศพิ4 3ศรี ศ2วร ศษ5ซ้ ศษ5เก ศษ5เห 1ศั ศัก5ร 1ศา2 ศา5กา ศา5ขบ ศา5นุ ศา5ภิ ศา5รย ศา5รั ศา5ริ ศา5ลา 1ศิ ศิ5รพ ศิ5รว ศิ5ศี 1ศึ ศุ5กล ศู5ลิ ศเจ5ร ษ3ฎา ษฐ5ภค ษ5มณี ษ4มา 1ษั 1ษา ษา5คเ 1ษิ ษ์5พย สก5ลิ สก5ลึ สก5วั สก5วา ส4กา 4ส4กุ สข5บุ สง5ขล ส1ซ ส5ดิก ส5ดิน ส5ดิภ ส5ดิม สต5ทิ ส3ตรา 2สต์ สถ5วี 4สถ์ สน5ธย สน5ธิ ส5นียะ ส4นุ สนูป5 ส4ปา สพ5ติ ส2ม สม5ดุ 3สมบ สม5ผส สม5ผุ สม5ผเ สม5ยอ สม5ฤด สม5ฤต สม5หว ส5มัท ส5มัน สมุ4 สรร5ช สร5ลอ สล5บร สว4ก สว5ยม ส4วร สว5ริ ส4วา 4สวิ ส1ส สห5กร สห5กา สห5ชา สห5ธร สห5ปร สห5พั สห5ภา สห5รา สห5ศึ สอ5พล สอ5พอ สะ5ใภ 1สั สัญประ5 สัน3ถ สัม3 1สา สา5กิ สา5คเ 4สาธ สา5นึ สา5มน สา5มี สา5วพ สำ5ออ สำ5โร 1สิ สิ5ถิ สี5ข้ สี5ชอ สี5ดว สี5ตล สี5ตโ สี5ถ่ สี5ผึ สี5ฝุ สี5ละ สี5ลั สี5วล 1สุ สุ5กร สุ5กำ สุ5กี สุ5ขิ สุ5ขุ สุ5คต สุ5คร สุ5นี สุ5บร สุ5บิ สุ5ปร สุ5มน สุ5สง สุ5ไห 2สุ์ 1สู ส1เ ส4เฟ ส1โ ส4โก ส4โค 3ส่ว ส่5ไค ส้5กร ส้5ติ ส้5ไก 2ส์ ส์5หย ห2 2ห1ก หก5ระ หก5ล้ 5หการ หง4ส หง5สา หฤ5หร หฤ5โห หล5สะ หอ5คอ หอ5สม 1หั หา5กฐ หา5บพ หา5ปณ หา5พร หา5รื หา5ฤก หิ5รก หิ5ศว หุ5คู หู5กร หู5กว หู5หน ห้5ท่ ห้5ท้ ห้5ร้ 2ห์ ห์5กร ห์5สน ฬว5รา ฬห5บู 1ฬา ฬา5มณ ฬา5รึ อก5ซอ อก5ถล อก5รณ อก5รี อก5รู อก5ร่ อก5ฤท อก5ลว อก5ลอ อก5ลา อก5ล่ อก5ว่ อก5ใบ อค5ที อฆ5สง อง4คม อง5ถิ อง5บร อง5บิ อง5ฟอ อง5ฟุ อง5ระ อง5อุ อง5อ้ อด5ถอ อด5น่ อด5ฝา อด5ยอ อด5รั อด5อย อด5ออ อด5อุ อด5อ้ อ3ดิ อต5ดอ อต5ด็ อต5ไว อ1ท อ4ทค อท5คอ อน5ง้ อน5ดร อน5ทำ อน5ผั อน5ฝู อน5ฟิ อน5ย้ อน5รา อ4นา อ4นุ1 อบ5ช้ อบ5ถา อบ5บี อบ3อ อบ5ไล อป5กิ อป5ติ อป5พร อป5พล อป4ร อป5วา อป5โล อพ5ริ อฟ5ฟิ อฟ5ฟี อฟ5ริ อฟ5ไล อ4ภั อม5ฎอ อม5ดอ อม5ถอ อม5ยิ อม5รา อม5ร่ อม5ฤต อม5หล อม5หว อม5ห้ อ5มอน อย5กอ อย5ก๋ อย5นว อย5ร่ อย5ร้ อย5อิ อ4ยา อย5ได อร5ชุ อร5มน อ3รั อ3รา อ1ริ อ1รี อ3ร้ อร์1 อล5จี อล5นี อล5ฟ่ อล5มอ อล5หม อ3ลั อ1ลิ อว5รุ อศ5กร อษ5ฐช อษ5ฐภ อส5กา อส5ติ อส5นี อส5พล อส5ฟอ อส5มิ อส5เฟ อส5แอ อส5ไพ อ1ห ออ5อว อะ5ธี 1อั 1อา อา5ค5เ อา5ฏา อา5ณั อา5ดุ อา5ดู อา2ต อา5ถร อา5นน อา5ปณ อา5มล อา5ย5ต อา5รด อา5รต อา5รบ อา3รย อา5ลป อา5วร อา5วี อา5สว อำ5ยว อำ5อว อิ5ชย อิ5ดะ อิ5ระ อิ5ศว อี5จู อี5ซู อี5ยิ อี5รุ อี5ลุ อี5ศว อี5หร อุ5กฤ อุ5กล อุ5คร อุ5ดม อุ5ดร อุ5ด้ อุ3ตรา อุ5ตุ อุ5ทร อุ5ทิ อุ5ทุ อุ5ธั อุ5บล อุ5บ๊ อุ5มง อุ5รพ อุ5ลก อุ5แว อู5คู อู5รา อู5ลา อ1เ อเป5ร อเสก5 อเส5ข อเห5ต อ1แ อ1โ อโร3 อ1ไ 3อ่อ อ่5อว อ่5อ่ อ่5โถ อ้5อว อ้5โถ อ้5โล ฮก5ฮา ฮก5ฮื ฮน5รี ฮฟ5วี ฮล5ซิ ฮล5ดิ 3ฮอล ฮา5นอ ฮา5ป่ ฮา5ร่ ฮิ5บร ฮี5บร 3ฮื้ ฮู5ลา ฮู5ล่ ฮ1เ ฮ่5กึ ะ1ก ะ1ข ะ1ค ะ1ง ะ1จ ะ1ฉ ะ1ช ะ1ซ ะ1ด ะ1ต ะตะ4 ะ1ท ะ1น ะ1บ ะ1ป ะผี4 ะ1พ ะ1ม ะ1ย ะ1ร ะ1ล ะ1ว ะ1ส ะ1ห ะ1อ ะ1เ ะ1แ ะ1โ ะ1ไ ั2 ัก5ง่ ัก5ซ้ ัก5ตบ ัก5ผ่ ัก5ฝ่ ัก5ยอ ัก5ยิ ัก5รั ัก5ร้ ัก3ล ัก5วิ ัก5ษร ัก5อิ ัก5อี ัก5อ่ ัก5ใค ัก5ใฝ ัค5ฆิ ัค5ซี ัค5สถ ัง5ถึ ัง5ศุ ัง4ส5ว ัง5อว ัง5อุ ัง5ฮี ัจ5กล ัจ5ญะ ัจ5ถร ัจ5นึ ัจ5โจ ัช5ฎา ัช5นี ัช5พย ัช5พื ัช5รา ัช5ริ ัช5สม ัช5เร ัช5แพ ัช5โญ ัญ1 ัฏ5ทุ ัฏ5สง ัฐ5ทิ ัฐ5บร ัฐ5สภ ัฐ5เค ัณ5ฏก ัณ3ฐ ัณ5ยก ัณ5เฑ ัณ5โร ัด1 ัต5ดึ ัต5ถล ัต5ถั ัต5ถิ ัต5มณ ัต5มห ัต5รา ัต5รี ัต5ฤก ัต5ลั ัต5หล ัต5หี ัท5คี ัท5ทว ัท5ธน ัท5ธิ ัท5รา ัท5ลี ัท5ลุ ัธ5ยม ัน5ฉ่ ัน2ต ัน5ตภ ัน5ตะ ัน5ตั ัน5ตา ัน5ถธ ัน5ทึ ัน5ทุ ัน5ท่ ัน4ธ ัน5ธา ัน5ธิ ัน5ผว ัน5ฝร ัน5ฝ่ ัน5ภิ ัน5ยะ ัน5ย่ ับ1 ัป5คั ัป5ผา ัป4ร ัป5ลา ัป5หง ัป5โป ัป5โห ัพ5ยอ ัพ5ยา ัพ5โพ ัพ5โห ัฟ5ฟิ ัฟ5ริ ัม4ช ัม5ลา ัม5หม ัย5มร ัย5รุ ัล5ดี ัล5ปน ัล5ปพ ัล5ปิ ัล5ฟิ ัล5มอ ัล5มุ ัล5ออ ัล5ไซ ัล5ไฟ ัว1 ัศ5นี ัศ5มี ัศ5เจ ัส5กา ัส5ดง ัส5ดน ัส5ดี ัส5ติ ัส5ถา ัส5ปู ัส5มั ัส5มิ ัส5ยิ ัส5รั ัส5ลิ ัส5วด ัส5วร าก5ถา าก5ฝร าก5ฝั า1กร า5กรร าก5รุ าก5ฮอ า3กี า1ข า4ขบ าข5บู า1ค า4คจ า4คท า4คบ า4คป าค5ปร า4คพ าค5พื า4คภ า5ครี าง5บำ าง5ฝี าง5ฟิ าง5ออ าง5อิ า1จ า4จญ า4จห าจ5หา า4จอ า4จเ าช5กร าช5คร าช5คฤ าช5ทิ า5ชนะ าช5นี าช5ปะ าช5ลั าช5วโ าช5สก าช5สี าช5อง า1ชิ า3ชี าช5เป าช5เล าช5โอ า1ซ าญ5รอ า5ฏกะ าฏ5ดน า5ฏลิ าฏ5ลี า3ฏิ าฐ5กถ าณ5คด าณ5สถ าด5ผว า3ดอ า3ดิ าด5ไท าด5ไห า1ต า4ตญ า4ตภ าต4ว า1ท า4ทธ า4ทน า5ทนะ าท5บง าท5บร าท5สก าท5หล า4ท์ า1ธ า4ธน า2ธย าธ5ยม าน5ญ่ าน5ผู าน5รว าน5รั าน5รา าน5ฤด าน5อว านุ1 าบ5จ้ าบ5ฉว าบ5ช้ าบ5ซึ าบ4พ าบ5รื าบ5ละ า3บิ าป5สร าป5ส่ าป5แช าพ5ถ่ าพ5ยน าพ5รั าพ5ลว าฟ5ต้ าฟ5ริ า3ฟิ า1ภ า4ภป า4ภล าภ5ลอ าม5ง่ าม4น4 าม5สก าม2ห าม5หม าม5หล าม5หา าย5กล าย5กอ าย5ขว าย5ข้ าย5ชน าย5ดิ าย5ด้ า5ยตน า5ยนธ า5ยนม าย5นอ า5ยนเ าย5บร าย5ผอ าย5ฝั าย5มุ าย5ม่ าย5รุ าย5ร้ าย5ลั าย5ล่ าย5วอ าย5อำ า3ยิ าย5ไห าร5กำ าร3ค าร5ชุ าร5ณู าร5ตร า5รทะ าร5ธุ าร5บั าร5ผจ าร5พร า5รภย า1รม าร5รา าร5ละ าร5วด าร5ว่ าร5หน า1ระ า1รั า1รา า1ริ า5ริก า5ริยะ า3รี า1รุ า1ล า4ลก าล5กิ า4ลค า4ลจ าล5ฎี า4ลด าล5ดี าล5ทห า4ลป าล5ปก าล5พร า4ลว าล5อุ า4ลโ า4ล์ าว5ก่ าว5ข้ า3วดี าว5ดึ าว5นี าว5บอ าว5ยอ าว5ยื า5วรณ าว5รภ าว5รา า5ว5รี าว5รุ าว5ร้ าว5ฤก า5วอน าศ5นี า3ศร าศ5เล าษ5ดื าษ5ตร าษ5รา าษ5แก าส5กา าส5ด้ าส5ต้ าส5นี าส5ปอ าส5มห า1ห าห3ก าห5มง าฬ5โร า1อ าอนา4 า1ฮ า1เ าเม5ศ า1แ า1โ า1ไ ำ1ก ำ1ค ำท4ว ำ1น ำ1บ ำ1ป ำ1พ ำ1ม ำม5รง ำม5ลา ำ1ร ำ1ล ำ1ส ำ1ห ำ1เ ำ1แ ิก5ซี ิก5ถอ ิ1กร ิก5ร้ ิ3กฤ ิก5ล้ ิก5วา ิก5ษุ ิ3กิ ิกิ5ส ิ1ข ิ4ขส ิข5สิ ิ1ค ิ4คต ิค5ตอ ิ4คหะ ิฆ5เน ิง5ชี ิง4สต ิง4ห ิง5หา ิง5ห้ ิง5อร ิจ5ศี ิช4น ิช5ลิ ิช5เช ิญ5หน ิญ5โญ ิด5ฉิ ิด5นี ิด5ผน ิด5รอ ิด5ระ ิด5ลั ิด5ออ ิด5อ่ ิต5ซู ิต5ถี ิต5ฟอ ิต5ลด ิต5ลา ิต5วส ิ1ติ ิ3ตุ ิท5ธั ิท5สน ิ3ธี ิน5งอ ิน5ฟร ิน5ยว ิน5ยอ ิน5ย้ ิน5ระ ิน5ริ ิน5ร้ ิ5นอบ ิน5อิ ิน5ฮุ ินู5ป ิบ5บิ ิบ5ผย ิบ5ยื ิบ5ระ ิบ5รี ิบ5ลั ิบ5ลิ ิบ5ล้ ิป4ก ิป5ทอ ิป5ผล ิ3ปร ิป5สต ิป5ฮอ ิป5โป ิป5โย ิ1พ ิ4พพ ิ4พโ ิพ5โส ิฟ5ฟอ ิ1ภ ิม5ฝี ิม5ลา ิ1มุ ิย5มิ ิร5ชร ิร5วด ิ1รั ิ1รา ิ1ริ ิ1รุ ิล5ปิ ิ1ลั ิ1ลา ิ1ลิ ิว5กิ ิว5ซี ิว5ทร ิว5บิ ิว5ยอ ิว5ริ ิว5ลิ ิว5ลึ ิว5ออ ิวา5ส ิศ5พร ิศ5ร้ ิศ5เล ิศ5แพ ิษ5ณุ ิษ5ตร ิส5กร ิส5กี ิ5สตร ิส5ติ ิส5ที ิส5นี ิส5บอ ิส5รา ิส5ริ ิส5ลา ิส5ไซ ิ1ห ิหา4 ิ1อ ิ1เ ิเน4 ิ1โ ี1ก ี4กต ี4กย ีก5ย่ ีก5ริ ีฆ5สร ีช5คณ ีซ5สถ ีด5ฆ่ ีต5กว ีต5ปฏ ี1ท ีท4น ีบ5รั ีบ5รุ ีบ5ร้ ี1ป ี1พ ี4พจ ีย5กถ ีย5รย ีย5รอ ีย5ระ ีย5รั ี5ยวน ีร5ณั ีล5จุ ี4วั ีวา4 ีษ5มา ีห5นา ี5หน้ ีห5บั ีห5มุ ีห5รา ี3หล ีห5โม ีห5ไส ี1อ ีอ4ร ีอา4 ี1เ ี1แ ี1โ ี1ไ ี่5ก่ ี่5ถ้ ี่5ปุ ี่5ปู ี่3ห ี่5โค ี่5โป ี้5กร ี้5จ้ ี้5ตะ ี้5ริ ี้5ลั ี้5ลุ ี๊5กร ี๋5จ้ ี๋5อ๋ ึก5ซึ ึก5ดำ ึก5ดื ึก5ยื ึก5ระ ึก5ลั ึก5ล้ ึก5ฮั ึด5ถื ึด5ฮั ึน5ทึ ืด5ฮา ือ5กล ือ5กอ ือ5กำ ือ5ข่ ือ5จ้ ือ5ชื ือ5ดำ ือ5ตร ือ5ถื ือ5นำ ือ5บิ ือ5ปล ือ5ปื ือ5ป่ ือ5พว ือ5พ่ ือ5ยน ือ5ยา ือ5รื ือ5ลา ือ5ล้ ือ5สอ ือ5สำ ือ5อี ุก5งอ ุก5ฉก ุก5ซ่ ุก5ดิ ุก5ผา ุก5รา ุก5รุ ุก5ละ ุก5ลี ุก5ล้ ุก5อี ุก5ฮื ุข5นา ุข5ปา ุข5ภั ุข5ภา ุข5ลั ุข5ศา ุข5ศึ ุข5เด ุค5ทอ ุ3คน ุง5ถุ ุจ5ลิ ุจ5หน ุช5รา ุช5เช ุญ5จน ุญ5ฤท ุญ5แจ ุฎ5ฐั ุฑ5พ่ ุณ5ค่ ุณ5ฑก ุณสม5 ุณ5หญ ุณ5หา ุณ5หิ ุณูป5 ุด5ผา ุด5ผ่ ุด5ลอ ุด5ลุ ุด5อู ุต5กว ุต5กิ ุต5ซอ ุต5ตก ุ5ตระ ุ5ตริ ุต5ลุ ุ3ทก ุท5ธั ุ5ทริ ุท5ลุ ุท5โธ ุน5ทร ุน5ผล ุน5รอ ุบ5งิ ุบ5ซิ ุบ5บิ ุบ5ผล ุบ5ยิ ุบ5อิ ุป5กร ุป5กิ ุป5จา ุป5ถั ุป5ทา ุป5ยุ ุป3รา ุ5ปริ ุ4ปส ุป5สง ุป5สร ุป5ฮา ุป5โภ ุป5โล ุพ5พา ุพ5ภิ ุภ5ชล ุภ5เค ุม4น ุม5นุ ุม5รุ ุม5หย ุย5ช่ ุย5ฝ้ ุ1ร ุร5ข่ ุ4รค ุ4รฉ ุ4รช ุ4รท ุ4รธ ุ4รบ ุ4รพ ุ4รภ ุ5รภี ุ4รย ุ4รร ุ4รล ุ4รว ุ4รศ ุ4รส ุ4รอ ุ4รแ ุ4รโ ุล5จอ ุล5ชี ุล5ธิ ุล5มุ ุล5สต ุล5สแ ุ3ลา ุ3ลิ ุศ5โล ุษ5จี ุษ5ฎี ุษ5ปร ุ4ษย ุษ5รา ุษ5ร้ ุษ5เพ ุส5รา ุ5สละ ุส5ลิ ุส5วา ุ1ห ุห5กล ุห5นา ุ4หย ุห5ยา ุ4หเ ุห5เท ุห5เส ุ4หโ ุห5โย ุ1เ ุ1โ ุ๊5ต๊ ูก5วั ู1ช ูญ5หา ูญ5เป ูญ5เส ูด5บึ ูด5รี ูต5รู ูธ5เร ูบ5ไล ูป4ก ูป5ฌา ูป5ถ่ ูป5ทร ูป5พร ูป5ร่ ูป5แบ ูป5โฉ ูฟ5วี ู2ม ู5มิน ูร5ข่ ูร4ณ ู5รณภ ู5รณม ู5รณะ ู5รณาก ูร4พ ู5รพะ ู5รพา ูร4ม ูล5กร ูล5ค่ ู3ลั ูส4ว ู1เ ู1โ ู่1 ู้1 ู๊5ตึ ู๋5กร ู๋5จี ู๋5อี เ2 เก5ยู เก5วั เก5ศว เก5อิ เค5ซอ เค5มี เค5ศว เจ5ดี เจ5นี เ4จร เจ5ลิ เจ5โต เซ5ทิ เซ5นอ เซ5รุ เซ5แค เด5ซิ เด5บิ เด5รั เด5ลา เด5ลิ เด5ลี 2เตช เต5ปุ เต5มี เต5มู เต5ริ เต5ลุ เต5ศว เต5หะ เถ5รา เท5กร เท5คร เท5คว เท5โว เท5โศ เน4ต เน5ติ 4เนย เน5ระ เน5รั เน4ส เน5สา เน5เว เบ5ต้ เบ5บี เบ5ริ เบ5รุ เบ5ลี เป5ตอ เป5สก เป5สล เพ5ชุ เพ5ทุ เพ5สล เพ5โท เฟ5อี เภ5ตร เภ5ทุ เม5ฆิ เม5ดิ เม5ลา เร5กะ เร5ซิ เร5มอ เร5รว เร5วด เล5กร เล5คอ เล5ดี เล5วร เล5วู เล5หล เล5ฮุ เลิ4 เว5ก้ เว5ทิ เว5ฬุ เส5ฉว เส5นีย์ เส5รี เส5วก เส5วน เส5แส เห5มั เห5ยง เห5ระ เห5รั เห5ศว เห5ศั เห5สั เฬ5วร เอ5กว เอ5ซิ เอ5ธิ เอ5ฬก เฮ5ละ เฮ5ลิ เฮ5โม เฮ5โร แก5วั แค5รอ แค5ริ แค5ลอ แค5ลิ แค5แต แค5แส แช5บ๊ แช5เช แซ5ยิ แด5รี แต5แต แน2 แป5ซิ แ4ปร 3แพท แฟ5รี แ4ฟ้ แม2 แม5ชี แม5รี แม5เร แม่3 แอ5นะ โก4ฐ โก5ลอ โก5ลา โก5ลิ โก5วา โก5วี โก5ฮา โข5ทั โข5ภิ โข5เภ โข5โล โค5ตม โค5ติ โค5มู โค5ม่ โค5ริ โค5ลอ โค5ลั โค5ออ โค5อะ โค5แท โค5ไซ โจ5ปก โฉ5เบ โช5ดึ โช5ห่ โซ5กร โซ5นี โซ5ฟิ โซ5ยู โซ5ลู โซ5สเ โญ4ช โญ5ปว โด5จี โด5นี โด5รา โด5ลิ โต5กร โต5รอ โต5รา โต5ริ โต5ลิ โท5กร โท5คอ โท5พล โท5รอ โท5แอ โธ5ทน โธ5ปก โธ5วน โธ5เฟ โน5ทุ โน5ปจ โน5รม โน5รา โบ5ชุ โบ5ซอ โบ5ต้ โบ5รอ โบ5รั โบ5รา โบ5ลิ โบ5ล่ โบ5ไฮ โป5กส โป5ลิ โป5แล โป5โป โป5โล โพ5ซิ โพ5ทะ โพ5ระ โพ5ลา โพ5ลิ โพ5ลี โพ5หา โพ5แท โพ5ไซ โฟ5กร โฟ5นี โภ5คิ โภ5ไค โม5ฆี โม5ดู โม5ร็ โม5หา โม5ฮั โย5ถิ โร5กะ โร5คิ โร5งั โร5ชิ โร5ธนะ โร5รา โร5ล่ โรส4 โร5สเ โร5หน โร5อี โร5ฮิ โร5แม โร5ไล โล5กร โล5กิ โล5กี โล5จน โล5ปุ โล5มก โล5มอ โล5รา โล5วะ โล5หิ โว5นอ โศ5ธน โศ5ภิ โส5กร โส5ติ โส5ธน โส5ภิ โส5ลิ โส5วร โส5หุ โส5โค โห5ฐา โห5รส โห5ระ โห5รา โห5สิ โห5ฬา โอ5กิ โอ5คล โอ5ค็ โอ5ดี โอ5รส โอ5ละ โอ5สถ โอ5อิ โฮ5โล 3ใช้ 1ให ไก5ลา ไก5วั ไข5ข้ ไข5คว ไข5มั ไข5สั ไข5สื ไค5ศว ไช5น่ ไช5ศว ไซ5ดอ ไซ5บอ ไซ5บี ไซ5ปร ไซ5ออ ได5ฟุ ได5ฟู ได5ลิ ได5ออ ไท5ฟอ ไท5รอ ไท5แท 3ไนย ไป5ริ ไพ5ชย ไพ5ธอ ไพ5รั ไพ5ริ ไพ5ลิ ไพ5หา ไพ5โร ไพ5โอ ไฟ5แช ไฟ5แน ไภ5ริ ไม5ถิ ไม้1 ไล5บร ไล5บี ไว5กิ ไว5รั ไว5อะ ไห5รณ ไห5ศว ไห5หม ไห5หล ไอ5กร ไอ5ซี ไอ5ดอ ไอ5ติ ไอ5พอ ไอ5พ็ ไอ5ศว ไอ5ศุ ไอ5ศู ไอ5ออ ไฮ1 ็ก5ซี ็จ5ขบ ็จ5สร ็ด5ลอ ็ด5อร ็ด5อึ ็น5ฉ่ ็น5ทร ็น5รอ ็น5วู ็น5อย ็น5อ้ ็บ5ด้ ็ป5ท็ ็ม5หม ่ก5ลั ่1ค ่ง5ริ ่ง5อร ่ง5อำ ่ง5อ่ ่4ฉี ่น5ง่ ่น5ฉ่ ่น5ทะ ่น5มื ่4นย ่น5ยน ่น5ย่ ่น5รม ่ม1 ่ม5พว ่ย5กะ ่ย5ฉุ ่ย5รา ่ย5ร่ ่ว5ช้ ่ว5ถึ ่ว5ยว ่ว5ไห ่อ5กร ่อ5กว ่อ5กะ ่อ5กี ่อ5ก้ ่อ5ข่ ่อ5ตร ่อ5ตะ ่อ5ต้ ่อ5ถื ่อ5บื ่อ5ผส ่อ5มว ่อ5ม่ ่อย3 ่อ5ยอ ่อ5ย่ ่อ5รอ ่อ5ร่ ่อ3ล ่อ5ว่ ่อ5สร ่อ5ฮั ่อ5ฮ่ ่า5กล ่า5ช้ ่า5ดง ่า5ด้ ่า5ฝื ่า5พร ่า5มง ่า5รึ ่า5ร้ ่าว3 ่ำ5ชอ ่ำ5ช้ ่ำ5ต้ ่ำ5ต๊ ่ำ5ไห ่1เ ่1แ ้ก5อ้ ้ง5ถ่ ้ง5ฝุ ้น5งู ้น5ฉบ ้น5ฉ่ ้น5ทะ ้น5ทุ ้น5ท้ ้น5รุ ้น5ร่ ้ม5งว ้ม5ฉุ ้ม5น้ ้ม5ยิ ้ม5ละ ้ม5ลุ ้ม5อล ้ย5กล ้ย5งช ้ย5ล่ ้ย5อ้ ้ย5ใบ ้ว5รอ ้1ห ้อ5กร ้อ5กล ้อ5คร ้อ5คู ้อ5งอ ้อ5ฉี ้อ5ดึ ้อ5ด้ ้อ5ต๊ ้อ5ถอ ้อน3 ้อ5ผ้ ้อ5ฝั ้อ5ฟื ้อ5มู ้อ5ระ ้อ5ร่ ้อ5อึ ้อ5ฮื ้า5จอ ้า5ชื ้า5ชู ้า5ช่ ้า5ช้ ้า5ดี ้า5ถิ ้า5ถึ ้า5บ่ ้า5บ้ ้า5บ๋ ้า5ปี ้า5ผา ้า5ฝร ้า3พ ้า5มุ ้า5ว่ ้า5สม ้า5สร ้า5สล ้ำ1 ้1เ ้1แ ๊ก5ซอ ๊ก5ริ ๊ก5ลุ ๊ก5ฮว ๊ป5ซี ๊ย5ก่ ๋ย5อิ ๋อ5ด๋ ์ค5สเ ์ค5แล ์1บ ์1พ ์1ร ์1เ ์1แ ์1โ .ก6 .ข6 .ฃ6 .ค6 .ฅ6 .ฆ6 .ง6 .จ6 .ฉ6 .ช6 .ซ6 .ฌ6 .ญ6 .ฎ6 .ฏ6 .ฐ6 .ฑ6 .ฒ6 .ณ6 .ด6 .ต6 .ถ6 .ท6 .ธ6 .น6 .บ6 .ป6 .ผ6 .ฝ6 .พ6 .ฟ6 .ภ6 .ม6 .ย6 .ร6 .ฤ6 .ล6 .ฦ6 .ว6 .ศ6 .ษ6 .ส6 .ห6 .ฬ6 .อ6 .ฮ6 6ก. 6ข. 6ฃ. 6ค. 6ฅ. 6ฆ. 6ง. 6จ. 6ฉ. 6ช. 6ซ. 6ฌ. 6ญ. 6ฎ. 6ฏ. 6ฐ. 6ฑ. 6ฒ. 6ณ. 6ด. 6ต. 6ถ. 6ท. 6ธ. 6น. 6บ. 6ป. 6ผ. 6ฝ. 6พ. 6ฟ. 6ภ. 6ม. 6ย. 6ร. 6ล. 6ว. 6ศ. 6ษ. 6ส. 6ห. 6ฬ. 6อ. 6ฮ. 6ก์. 6ข์. 6ฃ์. 6ค์. 6ฅ์. 6ฆ์. 6ง์. 6จ์. 6ฉ์. 6ช์. 6ซ์. 6ฌ์. 6ญ์. 6ฎ์. 6ฏ์. 6ฐ์. 6ฑ์. 6ฒ์. 6ณ์. 6ด์. 6ต์. 6ถ์. 6ท์. 6ธ์. 6น์. 6บ์. 6ป์. 6ผ์. 6ฝ์. 6พ์. 6ฟ์. 6ภ์. 6ม์. 6ย์. 6ร์. 6ล์. 6ว์. 6ศ์. 6ษ์. 6ส์. 6ห์. 6ฬ์. 6อ์. 6ฮ์. 6กิ์. 6ขิ์. 6ฃิ์. 6คิ์. 6ฅิ์. 6ฆิ์. 6งิ์. 6จิ์. 6ฉิ์. 6ชิ์. 6ซิ์. 6ฌิ์. 6ญิ์. 6ฎิ์. 6ฏิ์. 6ฐิ์. 6ฑิ์. 6ฒิ์. 6ณิ์. 6ดิ์. 6ติ์. 6ถิ์. 6ทิ์. 6ธิ์. 6นิ์. 6บิ์. 6ปิ์. 6ผิ์. 6ฝิ์. 6พิ์. 6ฟิ์. 6ภิ์. 6มิ์. 6ยิ์. 6ริ์. 6ลิ์. 6วิ์. 6ศิ์. 6ษิ์. 6สิ์. 6หิ์. 6ฬิ์. 6อิ์. 6ฮิ์. 6กุ์. 6ขุ์. 6ฃุ์. 6คุ์. 6ฅุ์. 6ฆุ์. 6งุ์. 6จุ์. 6ฉุ์. 6ชุ์. 6ซุ์. 6ฌุ์. 6ญุ์. 6ฎุ์. 6ฏุ์. 6ฐุ์. 6ฑุ์. 6ฒุ์. 6ณุ์. 6ดุ์. 6ตุ์. 6ถุ์. 6ทุ์. 6ธุ์. 6นุ์. 6บุ์. 6ปุ์. 6ผุ์. 6ฝุ์. 6พุ์. 6ฟุ์. 6ภุ์. 6มุ์. 6ยุ์. 6รุ์. 6ลุ์. 6วุ์. 6ศุ์. 6ษุ์. 6สุ์. 6หุ์. 6ฬุ์. 6อุ์. 6ฮุ์. 6ะ 6า 6ๅ 6ำ7 6ิ 6ี 6ึ 6ื 6ุ 6ู แ6 โ6 5ไ6 7ใ6 6็ 6่ 6้ 6๊ 6๋ 6์ 6ํ 6ฺ 6๎ เ6ข เ6ฃ เ6ค เ6ฅ เ6ฆ เ6ง เ6จ เ6ฉ เ6ช เ6ซ เ6ฌ เ6ญ เ6ฎ เ6ฏ เ6ฐ เ6ฑ เ6ฒ เ6ณ เ6ด เ6ต เ6ถ เ6ท เ6ธ เ6น เ6บ เ6ป 7เ6ผ เ6ฝ เ6พ เ6ฟ เ6ภ เ6ม เ6ย เ6ร เ6ล เ6ว เ6ศ เ6ษ เ6ส เ6ห เ6ฬ เ6อ เ6ฮ ช6วา. ช6ไ ธ6ไน ม6ไห ส6ไต เลส7ไต ส6ไน ส6ไบ ส6ไป ส6ไล บ6ทคว ม6วก ม6วน ม6วด ม7วดี ม6วย ะม6วง ล7ชน ัต5ถุ ัต6ถุ์ 6ตร. ธา6ตุ. บุ6ตร. ค6รู ฮิบ6รู ฮีบ6รู ส6ภา ส7ภาร เส7ภา โส7ภา ผ6วา น6คร. .เห6ยง เปี่6 เขี้6 ม6ณี คาม7ณี .รม7ณี .รัม7ณี หม7ณี ง6วด ง6วน วัง7วน ง6วย มง6วง อย6อด พ6ญา จุ6รณ ฤ6ชา .ฤ6ทัย พรร6ดิ สวา6ดิ อ6ริ. จน6ที. ธค6ยา นิม6นา ย์ม6นา า7ณะ ิ7ณะ ุ7ณะ ณ7ณะ ก7ณะ ท7ณะ ล7ณะ ุษ7ณะ ฤษ7ณะ รป7ณะ หม7ณะ สม7ณะ ลว7ณะ รว7ณะ ร5ณะ ณร6สี ก6นะ ยก7นะ ค7นะ ย7นะ ภว7นะ มท7นะ รต7นะ ลว7นะ วจ7นะ วท7นะ วส7นะ ศม7นะ ภช7นะ ไช7นะ าลป7นะ รรธ7นะ สธ5นะ โสธ6นะ สว5นะ เสว6นะ สาว7นะ ัจ7นะ ัช7นะ ัฏ7นะ ัฒ7นะ ัต7นะ ัท7นะ ัป7นะ ัส7นะ ุจ7นะ อาส7นะ ุ7นะ 5ผี 7จำ 5งำ ห6งำ น7รำ ย7รำ ร7รำ โค7รำ ไพ7รำ น7ยำ ม7ยำ 5งง. ห6งง น7งก 5ชน. เ6ชน โ6ชน 5กร. ั6กร า7นะ ถ7ระ า7ยก. า7ยน. า7ฐี า7นี า7วี ป5โ ป6โย ป6โภ วิป7โย อุป7โภ ศ7นะ รร7มะ ต5ถี ุต6ถี 5บท. ส6บท 5บถ. ข6บถ ส6บถ 7ฟู 7ษุ 5ตะ. ค6ตะ ร6ตะ สร7ตะ า7มี มิ7ผ า7กิ า7กล ิ7กล. ์7กล 5นำ ห6นำ รี7ผ 7ณุ 5นี. ห6นี ฉ6นี าร6นี วีช6นี สส6นี มท6นี รม6นี น7ยิ ิ5ลี ุ5ลี า7ลี โค7ลี โม7ลี ท7ลี ร7ลี ก7ยะ ค7ยะ ป7ยะ ท7ยะ ธ7ยะ น7ยะ ษ7ยะ า7ยะ ิ7ยะ คี7ยะ ฆี7ยะ ณี7ยะ นี7ยะ รี5ยะ เปรี6ยะ มโห5 ิ7รี ี7รี ู7รี หา7รี ม7รี. น5รี. เต7รี. ช7รี. ถ7รี ภ7รี ภม7รี โม7รี ภุม7ร พ7รี. เว7รี 5ผล 5ดล. 5รส. ก6รส จ6รส โค6รส ท6รส พ6รส ด6รส 5คน. ณ7หา ฤๅ5 ฤา5 .ยี่7 า7วะ เท7พี เท7วี บรร7จ บรร7ถ บรร7พต 5ทก. 5ดร. น7ทร. า7ทร. โค7ทร. โล7ทร. โส7ทร. 7อู. 5พล. ไพร่7 5ศก. อัฐ5 อัฐ6ม อัฐ7มี ี7วี ู7วี ถ7วี. ส7วี. ฏ7วี. น7ตี ร7ตี อ7ตี า7ตี ิ7ตี ู7ตี า7สี ณ7สี ห7สี เว7สี ู7สี ิ7สี ก7สี โบ7ลา ู7ลา อจ7ลา เว7ลา บิว7ลา มข7ลา เอ7ลา ี7ลา โร7ลา โอ7ลา โซ7ลา ิ7กะ ุ7กะ อ7กะ นว7กะ ิณ7กะ เภ7กะ ัย7กะ ิย7กะ รธ7กะ ัฏ7กะ ัฒ7กะ ิช7กะ ศต7กะ มล7กะ 7ทุ. โซ6ร ธ6นู ัส7ดุ. ร7คต ดง7คต 5กง. เ6กง 7ฎก ณ7มี ว7มี ศ7มี ู7มี ี7ติ รุ7ติ สุ7ติ ฮ7ติ อร7ติ วีส7ติ ติงส7ติ คุป7ติ มุต6ติ ภัต6ติ ก7ดี ต7ดี พ7ดี ม7ดี ย7ดี ศ7ดี อ5ดี า7ดี ี7ดี ุ7ดี ุว7ดี ดิบ7ดี นัก7 กุณ5 กุณ6ฑ์ 7ซี. 5ที. จน6ที ี7รา ู7รา ์7รา ิต7รา ม7รา ย7รา .มก7รา รบ7รา ลิก7รา เห7รา. 7กฎ. 7กฏ. 5หะ ค6หะ นิค7หะ เค7หะ ท6หะ เท7หะ ู7หา ฬ7หา ค7หา เน7หา ่7หา 5มะ ร6มะ ห6มะ ต6มะ 5หู 5ดำ ส6ดำ 7คำ 5สะ ว6สะ 5ฐะ ส6ฐะ 7ธะ 5พี. ร6พี ทร7พี ปฐ7วี ิ7ดา ษ7บ ษ7ป ิ7ระ ี7ระ ู7ระ ช5ระ ิต7ระ ทห7ระ ท7ระ. ุก5ระ. สว7ระ ัส7ระ ิส7ระ เป7ระ อ7ยา. เก7ยา รร7ยา สา7วก ิ7ธิ ุท7ธิ. ิท5ธิ. .สิท6ธิ. บุริมสิท6ธิ. ไกรสิท6ธิ. ป7ธิ ขัดสมา6ธิ พยา6ธิ. 5ษี. ด6นู ิ7วะ ี7วะ ุ7วะ ี7วก ย7วะ เท7วะ ไท7วะ ัท7วะ าช7วะ ไศ7วะ 7ถะ 7ษะ 5พร. 5ผง 5ธี า7ชะ ิ7ชะ ร5ชะ ส7ชะ โอ7ชะ 5ฆะ 5ฟะ า7ฟี ิ7ถี ร7ถี 5ฮา 5ญี 5ผา 5หิ. สิน7ธพ สิน7ธุ. สิน7ธู 5ชู 5ศะ ิ7ละ ุ7ละ ู7ละ ย7ละ ด7ละ .วส7ละ อเจ7ล เต7ละ ่7ละ น7ทะ ท7ทะ ส7ทะ น7ตุ. รร6ตุ มา7ตฤ ิ7รพ า7รพ. ไก7รพ 5ศุ. า7ถา า7สพ พ7สพ ุ7ขี 7สอ. า7ดะ 5บะ. 5ยี. ห6ยี 5กี. 5หก. ง7อร. ม7อร. ี7วร ส7วร. พู7นท 5จร. โ6จร. 7ศพ. โป7ลี 7ภพ. 7นพ. 7ณพ. า7รก. ทก7รก ย7รก. ยว7รก. 5มล. ุ5บล. โล7บล. 5ชล. 5ชก. 7โพ 5ณู 7ปี. า7บี. 5ฏะ. า7ฬี 5ปะ. ฉ6ปะ ส6ปะ ู7ลู 5ตู. 5ยู. ิ7ชิ 7ฆี. ิ7จี ี7จี ุ7จี ู7จี เว7จี 5ศี. 5มน. 5ยอ. ผ6ยอ. 5สง. 7สร. 5ดก. ส6ดก 7โก. ก7ฝ า7มก. 5ซอ า7ขะ ู7ขะ ส5ขะ ร7ษา 5ภะ ศ7ภ ิ7ลก ุ7ฎี ศา5ข 5สา. ั6สา 7ซู 5ษก. ษ7ฐี 5ดม. ส6ดม ด7ลม. ส7ลม. ว7ลม. ี7ลม. 5ศล. นิ7ยต 7งู 5จะ. า7สก. โป7สก 5ยศ. 5ธก. 5กบ. 7คู. ส5มา. 5แล. 5พก. โส7ภ รร6ดิ. า7วก. น7นร. 5จอ. 5จบ. 5คบ. 5ฉล. ม7รม อบ7รม ิ7รม. ี7รม. 5ซน. 5ดอ. 5กิ. ซู7ซุ ซู7ฮก 5บส. น7รน. ตก7ลง ม7ตน ตัว7ตน ี7วง ศ7วง. แตร7วง แวด7วง า7ฑู 5หด. อบ7นบ นา7คร. ี7ฑา ู7ดู า7รภ. า7ฝ ล7รบ. ว7รบ. อ7รบ. า7รณ. น7ยง ม7ยง ุ7ยง ิ7ยง ิ7ยน หา7พน า7งิ ช7รถ. น7รถ. ส7รถ. ัน7ธร. มณ7ฑก มณ7โฑ มร7กต มร7ฑป ยอด7อก โล่ง7อก ยืด7อก ห7ห 5ทด. ว7นม. ทพ7นม. โค7นม ษ7ฎร. ิ7ปุ ิ7ปู ี7รอ. ย7ลำ อ7ลำ ้7ลำ น7ทม. ป7ทม. วก7วน อล7วน ิ7จล. ช7ญะ ี7ข ศีล7 5ธม. สม7รด สัก7วา สัป7ด สัป7ท า7สม. อ7สม. า7นล. ี7รุ ู7รุ เน7รุ ง7หล สีห7นุ 5ภร. 5จด. บ7ยก. ดิ7ศร ร7ศร อพ7ยพ ร7ชร. รส7กา ลส7กา อาจ7อง ี7มู อึง7อล ุ7ชุ ุ7สภ. เก7ชา เก7ศา ช7ตก. บ7ตก. เข7ฬะ ห7ณี อ7ปน. ย7ชม. เบื้อง7 5คะ ง7ออ. อ7ออ. เรือ7ธ เรือ7บ เลี้ยว7 5กก. เ6กก อ7ขอ. า7กอ. แด7วู บ7ยล. โฉ7เก โด7มร โต7มร 7โผ โท7โส ้7ปด. 7คี. โย7นก. โส7มม 7ฬส. ต7ถิ 7โฮ ใจ7 5ฟง ไช7โย 5พต. กรร7กศ ล7บก. ศ7ยป. า7นน. ุ7ฎา ู7ฏา า7มอ. ท7โท ุ7ทส จ่า7ร ฬ7หี า7ฒะ ธต7รฐ ท7คล. ต7ถร. ิ7ฐิ ป7ผะ พฤ7ษภ. ิ7ธุ า7ฬก. ห7สิ ฏ7ฏิ. ษ7ฏิ. ศิษ7ฎิ ษ7ฏี 5ษส. ิ7ปิ ู7ริ. ฑ7ฑุ ษ7ฏุ า7ตา ว7ตก ง7ตก เก6ตุ. ส7ตุ ลิ7บง ฮ7โ 7อุ.",
- ["length"]=53247,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=4286,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.rme b/Master/texmf-dist/tex/context/patterns/lang-tk.rme
deleted file mode 100644
index 5f132a2cfe0..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-tk.rme
+++ /dev/null
@@ -1,22 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Turkmen hyphenation patterns
-
-(more info about the licence to be added later)
-
-% Hyphenation patterns for Turkmen (hyph-tk.tex)
-%
-% Author: Nazar Annagurban <nazartm at gmail.com>
-% License: Public domain
-% Version: 0.1
-% Date: 16 March 2010
-%
-% ----------------------------------------------------------------------
-%
-% The file has been auto-generated from generate_patterns_tk.rb
-% that is part of hyph-utf8.
-%
-% For more information about UTF-8 hyphenation patterns for TeX and
-% links to this file see
-% http://www.tug.org/tex-hyphen/
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-uk.rme b/Master/texmf-dist/tex/context/patterns/lang-uk.rme
deleted file mode 100644
index be47aa0ef98..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-uk.rme
+++ /dev/null
@@ -1,74 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Ukrainian hyphenation patterns
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: TODO:WRITEME (yyyy-mm-dd)
-% Author: Maksym Polyakov <polyama at auburn.edu>, <mpoliak at i.com.ua>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Ukrainian hyphenation patterns in LCY (cp866nav) encoding.
-% Copyright 1998-2001 Maksym Polyakov.
-% Released 2001/05/10.
-% This file can be redistributed and/or modified
-% under the terms of the LaTeX Project Public License (lppl).
-% Please, send bug reports via e-mail:
-% polyama@auburn.edu
-% mpoliak@i.com.ua
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.lua b/Master/texmf-dist/tex/context/patterns/lang-zh.lua
deleted file mode 100644
index f982e75e662..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-zh.lua
+++ /dev/null
@@ -1,110 +0,0 @@
-return {
- ["comment"]="% generated by mtxrun --script pattern --convert",
- ["exceptions"]={
- ["n"]=0,
- },
- ["metadata"]={
- ["mnemonic"]="zh",
- ["source"]="hyph-zh-latn-pinyin",
- ["texcomment"]="% Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: pyhyph.tex (yyyy-mm-dd)\
-% Author: Werner Lemberg <wl at gnu.org>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% This is the file pyhyph.tex of the CJK package\
-% for hyphenating Chinese pinyin syllables.\
-%\
-% created by Werner Lemberg <wl@gnu.org>\
-%\
-% Version 4.8.0 (22-May-2008)\
-%\
-% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org>\
-%\
-% This program is free software; you can redistribute it and/or modify\
-% it under the terms of the GNU General Public License as published by\
-% the Free Software Foundation; either version 2 of the License, or\
-% (at your option) any later version.\
-%\
-% This program is distributed in the hope that it will be useful,\
-% but WITHOUT ANY WARRANTY; without even the implied warranty of\
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\
-% GNU General Public License for more details.\
-%\
-% You should have received a copy of the GNU General Public License\
-% along with this program in doc/COPYING; if not, write to the Free\
-% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,\
-% MA 02110-1301 USA\
-%\
-% \\message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}\
-%\
-% ",
- },
- ["patterns"]={
- ["characters"]="'abcdefghijklmnopqrstuwxyzü’",
- ["data"]="a1b a1c a1d a1f a1g a1h a1j a1k a1l a1m a1p a1q a1r a1s a1t a1w a1x a1y a1z e1b e1c e1d e1f e1g e1h e1j e1k e1l e1m e1p e1q e1s e1t e1w e1x e1y e1z 1ga g1b g1c g1d 1ge g1f g1g g1h g1j g1k g1l g1m g1n 1go g1p g1q g1r g1s g1t 1gu g1w g1x g1y g1z i1b i1c i1d i1f i1g i1h i1j i1k i1l i1m i1p i1q i1r i1s i1t i1w i1x i1y i1z 1na n1b n1c n1d 1ne n1f n1h 1ni n1j n1k n1l n1m n1n 1no n1p n1q n1r n1s n1t 1nu 1nü n1w n1x n1y n1z o1b o1c o1d o1f o1g o1h o1j o1k o1l o1m o1p o1q o1r o1s o1t o1w o1x o1y o1z 1ra r1b r1c r1d 1re r1f r1g r1h 1ri r1j r1k r1l r1m r1n 1ro r1p r1q r1r r1s r1t 1ru r1w r1x r1y r1z u1b u1c u1d u1f u1g u1h u1j u1k u1l u1m u1p u1q u1r u1s u1t u1w u1x u1y u1z ü1b ü1c ü1d ü1f ü1g ü1h ü1j ü1k ü1l ü1m ü1n ü1p ü1q ü1r ü1s ü1t ü1w ü1x ü1y ü1z '1a ’1a '1e ’1e '1o ’1o",
- ["length"]=802,
- ["minhyphenmax"]=1,
- ["minhyphenmin"]=1,
- ["n"]=194,
- },
- ["version"]="1.001",
-} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.rme b/Master/texmf-dist/tex/context/patterns/lang-zh.rme
deleted file mode 100644
index 0856a32b268..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-zh.rme
+++ /dev/null
@@ -1,92 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)
-
-(more info about the licence to be added later)
-
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: pyhyph.tex (yyyy-mm-dd)
-% Author: Werner Lemberg <wl at gnu.org>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% This is the file pyhyph.tex of the CJK package
-% for hyphenating Chinese pinyin syllables.
-%
-% created by Werner Lemberg <wl@gnu.org>
-%
-% Version 4.8.0 (22-May-2008)
-%
-% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org>
-%
-% This program is free software; you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation; either version 2 of the License, or
-% (at your option) any later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this program in doc/COPYING; if not, write to the Free
-% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-% MA 02110-1301 USA
-%
-% \message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}
-%
diff --git a/Master/texmf-dist/tex/context/patterns/lang-af.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-af.hyp
index b7a8ed85d0b..b7a8ed85d0b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-af.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-af.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-af.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-af.pat
index a34c451cc3d..a34c451cc3d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-af.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-af.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-agr.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.hyp
index 16a2cc279d3..16a2cc279d3 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-agr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-agr.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.pat
index 521cdf3b6f6..521cdf3b6f6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-agr.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.pat
diff --git a/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.hyp
new file mode 100644
index 00000000000..edeef6039e9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.hyp
@@ -0,0 +1,8 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see lang-ala.rme
+
+% used:
+
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.pat
new file mode 100644
index 00000000000..772b8be81b2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.pat
@@ -0,0 +1,747 @@
+% generated by mtxrun --script pattern --convert
+
+% 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
+
+\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
+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} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.hyp
index 35eb1c35d41..35eb1c35d41 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.pat
index 2a0a8a0f175..2a0a8a0f175 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.hyp
index db408fc2970..db408fc2970 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.pat
index ec5a4b4ee0c..ec5a4b4ee0c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.hyp
index 1739a8d8beb..1739a8d8beb 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.pat
index 726a9e7d212..726a9e7d212 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.hyp
index 94cbe56cce5..94cbe56cce5 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.pat
index 508ee566f19..508ee566f19 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-da.hyp
index b288255a832..b288255a832 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-da.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-da.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-da.pat
index 5774f667c9d..5774f667c9d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-da.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-da.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-de.hyp
index f69d6dcb18a..f69d6dcb18a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-de.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-de.pat
index d79a3658818..a5e2e163382 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-de.pat
@@ -18,6 +18,7 @@
.ai2s
.akt2a
.al2e
+.al3k
.al5l4en
.al4tei
.alt3s
@@ -31,20 +32,20 @@
.an3gli
.angs4
.angst3
-.an3s
+.an3s2
.an4si.
-.ans2p
-.ans2t
.an4tag
.an3th
.an3z2
.apo1
+.ap5p6le.
.aps2
.ari1e
.ark2a
.ar4m3ac
.ar2sc
.ar4t3ei
+.arter4
.ar6t5erh
.as3t
.as4ta
@@ -70,6 +71,7 @@
.bu4ser
.by4t
.ch2
+.chi3er
.dab4
.da2r1
.da4rin
@@ -79,6 +81,7 @@
.de2al
.de1i
.de4in.
+.de8ments
.de1o2
.de3r4en
.de1s
@@ -93,6 +96,7 @@
.dys1
.ebe2r1
.ehe1i
+.ei4ds
.ei3e2
.ei4na
.einen6g
@@ -100,6 +104,7 @@
.ei4st
.ei4tr
.eke2
+.el2a
.el2bi
.elb3s
.em3m2
@@ -121,6 +126,7 @@
.er4dan
.er4dar
.er4dei
+.erden6k
.er4der
.er1e
.ere3c
@@ -132,7 +138,7 @@
.er8stritten.
.er4zen4
.esel4s
-.es1p
+.es3p
.es3ta
.es5t4e
.est2h
@@ -168,20 +174,25 @@
.guss1
.hau2t1
.he2
+.he3fe
.her3an
.he3ri
.he6r5inn
+.hi4n
+.hin3u
.hi2s
.ho4met
.ia4
.im2a
.ima4ge
-.im5m
+.im5m2
.in1
.in3e
+.in3gl
.ink4
.inn2e
.inu1
+.ioni1
.ire3
.is2a
.ka2b5l
@@ -236,7 +247,7 @@
.öd2
.pa4r1e
.par3t4h
-.pe4c
+.pe2c
.pes4te
.pf4
.ph2
@@ -257,9 +268,11 @@
.ro4a
.ro3m2a
.rö2s1
+.runder6
.rü1b
.rü6cker6
.sali3e
+.sami3
.sch4
.se3ck
.sen3s
@@ -283,6 +296,7 @@
.th4
.ti2a
.tid1
+.ti2e
.ti4me.
.ti4mes
.ti2s
@@ -296,11 +310,11 @@
.tu3ri
.uf2e2
.ufer1
-.ul4mei
.um3
.umo2
.un3a2
.un3d
+.une2
.un3g
.uni4t
.un3s
@@ -315,10 +329,13 @@
.ut3r
.übe4
.ve5n2e
+.vi2e
.vo4r
.wah4l
.wa2s
.wei4ta
+.welter8e
+.welter8k
.wi4e
.wor2
.wort5en6
@@ -338,7 +355,7 @@ aa2gr
2a2ar
aa2r1a
aar3f4
-aar3k
+aar3k4
aar5sc
aas5t
aata2
@@ -358,7 +375,7 @@ ab1eb
abe1e
abei1
ab1eil
-2abel
+4abel
abe2la2
a3ber
ab1er2k
@@ -372,7 +389,6 @@ ab3esse
1abg
1abh
2abi
-a3bil
ab1ins
ab1ir
ab1it
@@ -406,7 +422,7 @@ abst2
ab3ste
ab3sz
1abtei
-2abu
+2a3bu
ab1ur
2abü
1abw
@@ -451,7 +467,7 @@ a1chu
ach1u2f
ach3ü
2achv
-4ach1w
+2ach1w
a1ci
ac1in
2ack.
@@ -510,12 +526,16 @@ ad4tr
2a1e
ae2b
ae2c
-ae2d
+a3e2d
+a3ei
a2ek
+a3el.
a2ela
a2ele
+a2eli
+a3els
ae2o3
-ae2p
+a3e2p
ae1r
3a2er2o1
ae2s
@@ -559,7 +579,7 @@ af2tur
a2f3ur
a1g
2aga
-ag1ab
+ag1a2b
ag1a2d
ag1ar
ag1au
@@ -587,6 +607,7 @@ ag3gl
ag6la
a4glö
ag2n
+a2gna
ag4ne.
ag4nu
a2g3re
@@ -600,7 +621,6 @@ ags3p
ag4spo
ag3sta
ag3ste
-ags4toc
2agt
ag2th
a2gund
@@ -630,7 +650,6 @@ ahre4s3
ah3ri
ahrta4
ahr6tri
-2ahs
ah2ta
aht3h
ah4t5r
@@ -648,11 +667,11 @@ ai1fr
ai3g4
a3ik.
ai3ke
-ai3k4r
+aik4r
a2il
ai2lo
aim2o
-ain4a
+ain2a
a1ind
ain4e
a1ing
@@ -702,13 +721,13 @@ ak5t4ri
2aktst
2a1ku
a2kun
-2a3kü
+4a3kü
1akz
a1la
2ala.
al1ab
al3abs
-ala5ch2
+ala3ch2
al1af
ala2g
al1age
@@ -736,7 +755,7 @@ a1lä
al1äm
alb3ein
al4berh
-al4b3erw
+al4b3er4w
al2b1l
alb3li
al2boh
@@ -802,7 +821,6 @@ al4m3ast
a2l1o2b
3a2loe
alo2ga
-al1ope
al1orc
a2l1ö
al3öf
@@ -816,9 +834,10 @@ al4tak
al3tam
al3tar
alt3eig
-al4t3erf
+al4t3er3f
al3ti
alt1op
+al4tö
al2tri
alt3ric
al2tro
@@ -850,10 +869,7 @@ a4mesh
a3met
a2mew
2amf
-a3mi.
-a3mie
-2a3mir
-a3mis
+2amir
ami3ta
ami3ti
2amk
@@ -866,6 +882,7 @@ am2min
2amml
2ammt
ammu2
+amni1
a2mö
amp2fa2
am3pr
@@ -894,7 +911,8 @@ ana4lin
2anam
2anan
2ana1s4
-an4at
+an1ath
+an4atm
an1äs
1anb
2anbu
@@ -999,12 +1017,13 @@ ant3rin
an2tro
1antw
2a1nu
-anu3s
+anu1s
a1nü
1anw
2anwet
2anzb
1anzei
+anze2n
2anzg
an2z1i4n
2anzs
@@ -1079,14 +1098,12 @@ ar2dro
a2rea
ar1eff
a4reg
-a2reh
ar1ehr
a2rein
a4rek
4arem
a3ren
4aren.
-aren4se
are3r2a
ar2erf
a2r1erh
@@ -1115,8 +1132,8 @@ ar2kal
ark3amt
ar2k1ar
ark3aue
-ar2kl
-ar4k3lag
+ar2k3l
+ar4klag
ar2kor
ar4k3ri
ark3sa
@@ -1131,11 +1148,13 @@ arn2e
2a1ro
ar1ob
a2r1o2d
+a2r1of
a2r1op
a2ror
2arp
2arr
ar2r3ad
+ar3re
arre4n
ar2rh
arr3he
@@ -1179,6 +1198,7 @@ a3schu
a2seb
a2s3e2m
a3s4es
+2asg
4ash
a3s2hi
asin2g
@@ -1189,6 +1209,7 @@ a2s1o2f
as1or
a2sö
a2s1p
+aspek6to
as2ph
as2pi
as2po
@@ -1214,6 +1235,7 @@ as4tof
as4trau
ast3räu
as6t3re
+asu2s
a2sü
aswa2s
3a2syl
@@ -1231,10 +1253,11 @@ a3tam
at1apf
at1au
a2taus
-a2t1ä
+a2tä
+at1än
at2c
a2teb
-a3tec
+a3te1c
ateien4
at1eig
a2teli
@@ -1244,8 +1267,9 @@ ater3s2
ate2ru
at2h
at3ha
-4athe1
+athe1
3athl
+a4thr
4a3ti
atil4s
ati2st
@@ -1301,8 +1325,8 @@ auch3ta
au2dr
2aue
aue2b
-au2ere
au5erein
+auer3ö
aue2s
au2fa
auf1an
@@ -1321,7 +1345,7 @@ au2is
2auj
aule2s
au3lü
-2aum
+4aum
au2mal
aum2ei
au2m1e4r1
@@ -1330,7 +1354,7 @@ au2m1o
aum3p2
aum3s6
4aun
-au3n4a
+au3n2a
aun2e
au4nei
au2nio
@@ -1370,6 +1394,7 @@ au2t1äu
au4ten4g
au4t3erh
1auto
+au4trö
2auts
2auu
2auw
@@ -1380,7 +1405,6 @@ auz2w
2a1v
a3v4a
ava3t4
-4avi
a2vr
2a1w
awi3e
@@ -1395,6 +1419,7 @@ ay3t
2a1z
a3z2a
aza3d
+az2i
az2o
az2u
ä1a
@@ -1423,6 +1448,7 @@ az2u
äf2f3l
äf3l
äf3r
+äf4ro
äf2s
äft4s3
ä1g
@@ -1451,6 +1477,7 @@ az2u
2äh3t
ä1hu
äh1w
+2äi
ä1im
ä1is.
ä3isch.
@@ -1466,9 +1493,11 @@ az2u
äl2l1a
äl2p3
äl4schl
+äl2st
ä1lu
ämi3en
2äml
+ämoni3e
2ämp
äm2s
ämt2e
@@ -1579,10 +1608,10 @@ az2u
2äum
äu2ma
äum4s5
-ä2un
+2ä2un
äun2e
äu1nu
-2äur
+2äu3r
2ä3us.
äu4schm
äu3se
@@ -1663,6 +1692,7 @@ bbens2
bbe4p
bb3ler
bb2lö
+b3bru
bbru2c
bb2s
bbu1
@@ -1743,6 +1773,7 @@ be4r3eiw
be4rerk
bere4s
ber6gan.
+ber4hab
ber4in.
ber3iss
ber3na
@@ -1759,6 +1790,7 @@ bes2po
bess4e
b3esst.
bes3sz
+beste2
be6stein
be4s3tol
best4r
@@ -1775,7 +1807,7 @@ bfal2
2b1g2
bge3
bges4
-2b5h2
+2b1h2
bhut2
1bi
bi3ak
@@ -1783,12 +1815,14 @@ bib2
bibe2
bien3s
bie2s
+3bietu
bik2a
bi2ke.
bi2kes
+3bil
bil2a
bi2lau
-2b1illu
+4b1illu
bi2lu
2b1inb
bin2e
@@ -1892,7 +1926,6 @@ bo4s3p
bote3n4e
bo3th
bot2st
-bo2xi
bö2b3
2böf
b1öl
@@ -1919,7 +1952,6 @@ b3reif
b4rer
2b3riem
bri2er
-2brig
b4rio
b3roh
2b3rol
@@ -1931,7 +1963,6 @@ bru2th
3brü
4b1s
b2s1ad
-b3sand
bs3ar
bsat2
b3sä
@@ -1992,6 +2023,7 @@ btü1
bu2chi
bu2e3
bu2f
+bug3
bul2la
2b3umk
bunde4s
@@ -1999,7 +2031,7 @@ bung4
b3ungn
b2urg
bu3r4i
-2burn
+4burn
bu2sa
bu4s3cha
bu4schl
@@ -2009,6 +2041,7 @@ bus1er
bu2sin
bu2s1p
bu2s1u
+bu3tan
bü1c
bügel3e
2b1v
@@ -2044,6 +2077,7 @@ c2d2
c3do
2cec
ceco4
+1ced
ce2dr
2cef
ce1i
@@ -2088,7 +2122,7 @@ ch3e4ben
che4fer
3chefi
3chefs
-4chei
+2chei
ch1eim
4chelem
che4ler
@@ -2161,7 +2195,6 @@ ck1a
2ckal
2ck3an
cka4r1
-2ckau
ck1ä
2ckb
2ckc
@@ -2172,6 +2205,7 @@ ck1ä
ck1ehe
4ck1ei
4ckense
+4ckentf
4ckentw
cke2ra
ck2ere
@@ -2181,7 +2215,7 @@ ck1erh
4ckerke
ck2ern
2ckero
-2ck1err
+2ck1er2r
2ckerz
2ck1ese
2ckex
@@ -2217,6 +2251,7 @@ c4l2
cle4a
clet4
clo1
+clo2ck
1clu
c2m2
3co
@@ -2279,7 +2314,7 @@ d1ag
dagi2
dah3l
da1ho
-3dai
+3d2ai
da1in
da1is
dal2a
@@ -2315,12 +2350,13 @@ d2aph
4dapp
da2r3a
2darb2
+dark4
3d2arl
dar2ma
dar2m1i
da2ro
d3arr
-d2ar3s
+3d2ar3s
d1art
2dart.
da2ru
@@ -2332,8 +2368,7 @@ da3s2h
das4t
3dat
dat2a
-dat2e2
-da3tei
+da3t2e2
date4n
4d3atl
4d1atm
@@ -2363,8 +2398,8 @@ d5do
1de
de2ad
de3a2t
-de3b4
-2d1e4ben
+3deb4
+4d1e2ben
3de1c
de4ca.
de2cka
@@ -2373,6 +2408,7 @@ de3e4
deg2
de3gl
dehe2
+de3ho
2d1ehr
d1ei
3d2eic
@@ -2387,6 +2423,7 @@ del1ec
delei4g
2delek
2delem
+deler4
2delfm
delle2
del4l3eb
@@ -2401,11 +2438,14 @@ del2s1p
del5ster
del3t4
dem2ar
+dement4
+de6mentg
2d1emp
d2en.
dend2
de4n3end
4denerg
+4d3en4ge.
d2enh
de2ni
den4k3li
@@ -2432,13 +2472,15 @@ de3r4erb
de3r4erf
de4r3ero
derer4t
+derer6ze
d4erfi
d2erh
4der4höh
+d4erhü
3derie
derin4f
4derklä
-der3m2
+derm2
4derneu
de1ro
de2rop
@@ -2466,6 +2508,7 @@ de4set
de2sin
de2sor
de2sp
+de3spe
des3s2
dest5alt
de2sto
@@ -2479,6 +2522,7 @@ deten4t
de1un
de1url
de3us
+devil4
d1exi
de2xis
2dexp
@@ -2494,13 +2538,16 @@ d2his
di4ab
di2ad
di4am
+di4ath
3dic
di1ce
+dich1
di2e
di3e2d
die4neb
di3eni
di3ens.
+di3ern
die2s3c
diet3
die2th
@@ -2508,6 +2555,7 @@ dige4s
dik2a
dil2s5
2d1imb
+2d1imp
din2a
2d1ind
2d1inf
@@ -2523,11 +2571,13 @@ di4re.
di2ren
di2ris
2d1irl
+di2s1a2
di2sp
di3s4per
2d1isr
dist2
di2ste
+di4stra
di2ta
di4teng
di4t3erl
@@ -2576,8 +2626,7 @@ dor2fä
dor2fl
dor2fr
2d1org
-do2rie
-d2orp
+dori1
2dort
dor2ta
dor4ter
@@ -2585,6 +2634,7 @@ d2os.
dos3s
dost1
dot6h
+do2t1o
do3un
d1ö
dö2d
@@ -2633,9 +2683,8 @@ d4ri.
d4rid
d4rif
d4rik
-d4ril
d4rin.
-3d4risc
+d4risc
3d4rit
4dritu
d3rob
@@ -2653,11 +2702,14 @@ d5rub
3d4ruc
2d3rud
2d3ruh
+2d3rui
+4drund
drunge3
2d5rut
drü1b
drü5cke
2d1s
+4ds.
d4s1amt
d2san
ds3assi
@@ -2668,6 +2720,7 @@ d4schef
d4schin
d2s1e2b
d2s1ef
+ds1ehr
d3sei
ds2eig
d4seins
@@ -2765,6 +2818,7 @@ dunst3r
2dunw
du1o
dur2
+dur3au
5durc
2d1url
2dursa
@@ -2774,7 +2828,7 @@ du4schw
dus3t
2düb
2d1v2
-2d1w
+4d1w
dwa2
dwest1
dy2s
@@ -2794,7 +2848,9 @@ eakt2
e3akto
ea2la
e3alei
+ealer2
e4aler.
+ealer4t
e2alti2
eam3
eam1o
@@ -2826,7 +2882,6 @@ ebe2i
2ebel
eb2en
ebens3e
-eben4sp
ebe4rel
ebert4
2ebet
@@ -2856,10 +2911,9 @@ ebu2t1
2e3ca
e1ce
ech1ä
-2e3che
+2e1che
ech1ei
e6ch5erzi
-e1chi
ech3l
ech3m
ech3n
@@ -2887,7 +2941,6 @@ e3d2a
ed2dr
ed2e
ede2al
-e3dei
ede3n2e
edens1
eden4se
@@ -2899,6 +2952,7 @@ edi4al
e3d2o
ed2ö
eds2ä
+ed4seh
ed2s1es
ed2s1o
ed2s1p
@@ -2918,7 +2972,6 @@ eed3s2
ee1e
e1eff
eef4l
-eef3s
eeg2
e1ei
ee1im
@@ -2941,7 +2994,6 @@ e1erd
ee3r2e
ee4r3en4g
eere2s
-ee4ret
ee1ro
ee1rö
eer2ös
@@ -2953,7 +3005,6 @@ ee3s2
ees3k
ee3ta
ee4tat
-ee2th
ee1u
eeu2f
eewa4r
@@ -2971,10 +3022,11 @@ e3fe.
e2f1e2b
efell4
ef1em
-e3fen.
e2fent
ef2er
+efeuil4
2eff.
+3effek
1effi
ef2fl
2efi
@@ -3011,8 +3063,10 @@ ege1u
e2glo
e2glu
e2gn
+eg3nä
eg3ni
eg4sal
+eg4san
eg4se4r1
eg4sto
eg2th
@@ -3038,7 +3092,6 @@ e1hi
eh1int
eh1lam
eh1lä
-eh3le
ehl3ein
eh4lent
eh5l2er
@@ -3083,9 +3136,10 @@ e2id
ei2d1a
ei3de
eid4ein
-ei4d3err
+ei4d3er4r
2eidn
ei3dra
+eid3sc
ei1e
ei3el
4ei3en3
@@ -3122,7 +3176,7 @@ eim3all
ei2mor
e1imp
eim2pl
-ei2n1a
+e4i2n1a
ein3a2d
ei4nas
ei4nä
@@ -3164,13 +3218,14 @@ eis4tel
eis4th
ei1sto
ei2sum
-e2it
+e4it
ei2tab
ei2tan
ei2tar
2eitä
ei3te
ei2th
+ei2tor
ei2tro
eitt4
eit3um
@@ -3192,7 +3247,7 @@ ek2o
ekt4ant
ekt3erf
ekt3erg
-ek4t3erz
+ek4t3er4z
ekt2o
ek5tri
ek2u
@@ -3230,7 +3285,7 @@ elder4p
eld5erst
el3des
eld3s2
-elea2
+e3lea2
ele2c
2elei
e6l5ei6er.
@@ -3273,11 +3328,9 @@ elg2a
elgi5er.
elgi5ers
elg4r
-2eli
e2l1id
e3lie
e2lim
-eli2ne
el1ita
2elk
elk3s2c
@@ -3295,18 +3348,19 @@ el5na
e2lof
e2lol
elon2
-el1ope
e2l1or
elo2ri
elö2s
el2sum
+el5ten.
+elter4b
3eltern
+elter4s
elto2
elt3r
elt3s2k
elts2p
2e1lu
-e2l1um
el1ur
el3use
e1lü
@@ -3325,30 +3379,30 @@ e2m1ans
e3mäs
em4d3a2
e3m2en
+emen6gel
emen4t3h
-e6mentsp
e2m1erw
eme2s
1e2meti
e2m1im
-emi5n2a
+emi5na
em1int
emi3ti
2emm
emma3u
em2m1ei
e2mop
-3empf4
+1empf4
em3pfl
em2sa
em2spr
em2st
em3t2
-3emul
+1emul
2emü
e2n1a
4ena.
-2ena2c
+2en2a2c
en3ack
e3nad
e4naf
@@ -3428,6 +3482,7 @@ eni5ers.
e2n1i4m
e2n1in
e3nio
+eni2ö
e3nit
en3k2ü
e2n1o2b
@@ -3448,7 +3503,6 @@ en3sac
en2sau
en5sche
en2seb
-ens2el
3ensem
ensen1
en2sep
@@ -3469,6 +3523,7 @@ en4terb
1entf
2entfo
1entga
+3entgeg
en2thi
3entla
1entn
@@ -3493,7 +3548,7 @@ e1o2b1
e1of
eo2fe
e1oh
-e4ol
+eo3m
e1on.
e1ond
e1onf
@@ -3511,11 +3566,11 @@ e3ors
e3orw
eo1s2
e3os.
+eota2
eo3ul
e1ov
e1ö2
e1p
-e3pa
epa2g
e3p2f4
e2pis
@@ -3538,11 +3593,11 @@ era2be
e3rad.
er3adm
eraf4a
-era1fr
era2g
e1rai
er3aic
e2rak
+e1ral
er3all
eran3d
e3rane
@@ -3571,7 +3626,6 @@ er1äh
er1äm
e2r1äs
erb2e
-er3br
erb4sp
er1c
er3chl
@@ -3580,7 +3634,9 @@ erda3me
er3de
2erdec
erde3in
+er4d3en4g
erd3erw
+erd3s
4ere.
er1eb
e3rech
@@ -3589,16 +3645,18 @@ er1e2ck
er1edi
ere4dit
er1eff
-e2r1e2h
-2e3rei.
+er1e2h
+4e3rei.
er1eig
e2rein
e4r3eis.
ere2l
er1ele
-2e3r2em
+ere3lev
+2e3rem
+e2remp
2eren
-e3ren.
+4e3ren.
e3rena
e4rense
e4rentf
@@ -3606,11 +3664,11 @@ e4rentn
e3renz
eren8z7en8d
er1ep
-2erer.
+2erer
+4erer.
e2r3erf
e2r1erh
-e4rerl
-2erern
+4erern
e3rero
er1err
er1ers
@@ -3618,12 +3676,11 @@ e2rert
er1erw
2eres
er1ess
-ere4t
-er3eti
+e4r3e4ti
er1eul
ere4vid
erf2e
-erf4r
+er3f4r
4erfür
3ergebn
4ergehä
@@ -3638,7 +3695,7 @@ e2rh
er3he
4erhöhe
er3hu
-4erhü
+2erhü
2eri
e2riat
e3rib
@@ -3684,6 +3741,7 @@ e4ro2r
e1ros
e1rou
e1row
+er1ox
e1roz
erö2d
2erök
@@ -3691,8 +3749,8 @@ er1ös
er3p4
er3rä
2errü
-ers2a
ersch2
+er5schn
er3se
ers2i
er3sk
@@ -3704,9 +3762,9 @@ er3sz
ert2ak
er6terei
er4t3erf
-er4terh
+er4ter4h
er4ters
-er2tho
+er2t3ho
4er3ti
ert3ins
erts2e
@@ -3724,10 +3782,13 @@ es3ab
e3sac
e2s1a2d
es3ak
+es4ank
es3anz
e3s2as
e4s3ato
+es3av
2esb
+esbi5er.
es2c
es3cap
e3sce
@@ -3740,10 +3801,11 @@ es3eva
4esh
es2har
es2id
-esi1er
e2sil
+es1ini
es3int
es2ir
+es2is
es2kat
e4ske
es3kl
@@ -3752,15 +3814,16 @@ e4sky
es3l
es4log
2esm
+eso2r
es2ort
-e3sot
es2ö
2esp
-e3s2pek
+es2pek
e3spi
e3s2por
e3s4pra
2esr
+essali3
es2sau
es3sc
es3se
@@ -3771,7 +3834,6 @@ ess3erg
es2sof
es2s1pa
es2spu
-es3str
es3stu
estab4b
es4t1ak
@@ -3803,10 +3865,11 @@ eße3r2e
e1t
etab4
et1am
+eta2mi
3etap
et4at
et1äh
-e3te
+2e3te
e4t1ein
ete3ke
et2en
@@ -3816,6 +3879,7 @@ eter4hö
eter4tr
et2h
et3hal
+ethi1
et3hü
e3ti
eti2m
@@ -3855,14 +3919,16 @@ et2zw
eu1a2
eu3b4
euen2g
+eu3erei
eue6reif
+euer4ri
eu2esc
2euf
+eu2fer
eu2ga
eu4gent
eu3g2er
eugs4
-euil4
eu1in
1euk
eu2kä
@@ -3885,6 +3951,8 @@ eu1o2
eu3p2
e2u3r2e
1euro
+eu2rys
+eu4sis
eu3sp
eust4
eu1sta
@@ -3941,7 +4009,6 @@ ez2w
é1b
é1c
é1g
-égi2
é1h
é1l
élu2
@@ -4025,6 +4092,7 @@ fdie2
featu4
fe2c
f2ech
+fe3che
2f1eck
fe2dr
fe2ei
@@ -4048,7 +4116,7 @@ fel4lei
fe2l1o
fel4soh
fels2t
-fel3t
+fel3t4
f2em.
fem4m
2femp
@@ -4059,6 +4127,7 @@ fen3s2a
fens2c
fenst2
f1ent
+3fep
f2er.
fe1ra
fer2an
@@ -4080,6 +4149,7 @@ f4erpa
f2ers.
f2ert
f1erw
+fer8zeuge
fe2st
fest1a
fest3ei
@@ -4108,12 +4178,13 @@ f2f3emi
ff4en
f2fex
fff4
+ff3lag
ff3li
f3flu
f3flü
f3f4rä
ff2s
-ffs3t
+ffs3tan
4f3g2
fge3s
2f1h2
@@ -4137,16 +4208,20 @@ fi3li
fi4lin
fil2ip
f2ina
+fing4s
fi3ni
fin2s
+fin3sc
fin3sp
2f1int
fi2o
fi3ol
fi2r
fi3ra
+fi4re
3fis
fis2a
+fisch3a
fisch3o
fisch3w
fis2p
@@ -4160,6 +4235,7 @@ fi3tu
f2l2
2fl.
f3lad
+flan3d
f3lap
1flä
3f4läc
@@ -4203,11 +4279,12 @@ fo3rin
for4m3a4g
forni7er.
for4st
-for4t3ei
+fort3
+for4tei
for2th
-for2t3r
+for2t1r
for3tu
-2f1o2x
+f1o2x
1fö
2fö2f
2f1ök
@@ -4219,7 +4296,6 @@ f2r2
f4rac
frach6tr
2f5rad
-f1rah
fra4m
f3rand
f5rap
@@ -4230,7 +4306,7 @@ f3red
2freg
f3reic
freik2
-frein4
+frein2
f3rep
3f4reu
2f3ric
@@ -4285,6 +4361,7 @@ f2spro
fs2pru
fs3s4
fs2t
+fs3tak
f2stas
f4s3täti
f3stei
@@ -4294,6 +4371,7 @@ fs3th
f2stip
f3st4r
f4s3tres
+fs3trü
f3stü
f4s3tüte
f2s1un
@@ -4331,7 +4409,6 @@ ft3s2c
ft4sche
ftse4
ft4seh
-fts3el
ft3st
ft4s3tan
ft4s3tä
@@ -4499,7 +4576,6 @@ gels2t
gel3ste
gel3sz
gel3t2a
-ge3lum
ge3lü
gelz2
gem2
@@ -4507,6 +4583,7 @@ gem4e
ge3mi
3gen
ge3na
+ge4n3ac
ge4nam
ge4nar
gen2as
@@ -4517,6 +4594,7 @@ ge3nec
gen3eid
gen3ern
gen6erwe
+gener4z
gen3n
gen4sam
gen3sz
@@ -4587,13 +4665,14 @@ gien2e1
gie1st
gift5s
gi2gu
-gi2me.
+gi2m
gi4mes
-gi2met
2g1ind
gi3ne
+g1inf
gin2ga
2g1ins
+2giok
2g3isel
gi3t2a
gi3tu
@@ -4653,7 +4732,7 @@ g1lu
2g3luf
2glun
4glus
-g2lu2t
+g2lut
g1lüg
g2ly
2g1m2
@@ -4661,9 +4740,8 @@ g1n
2gn.
g2n2a
g4na.
-2gnac
4gnah
-g4nat
+3g4nat
3g2nä
gn2e
g3neh
@@ -4750,6 +4828,7 @@ gro4u
g4ruf
2g3rui
2g3rum
+grun2g
3g4rup
2grut
2g3rüc
@@ -4775,10 +4854,10 @@ gse3e
gs2eh
g3s2eil
g3sel.
-gs3eli
g3seln
gsen1
gs3er
+gser5f
gs5erk
gse4t
g4seta
@@ -4791,11 +4870,11 @@ g3s2pek
g3spi
gs4pie
g4spin
-gs3pl
+g4s3pl
g3s2por
g4spru
gsrat4
-gsrü2
+gsrü2c
gs5s4
gs3ta
g3s4tan
@@ -4810,7 +4889,6 @@ g1steu
gst2he
g3stir
g3sto
-gs3toc
g4stol
gs3top
g4s3tor
@@ -4867,7 +4945,6 @@ gus2st
gu4st
gu2t
gut1a
-gu4ted
gu4t3erh
gut3h
2güb
@@ -4879,6 +4956,8 @@ güs3
3haa
hab2a
hab2e
+2habn
+hab2st
ha2cho
ha2del
ha4din
@@ -4886,6 +4965,10 @@ h1adle
haf3f4l
haft4s3p
h1ah
+h2ahs
+h2ai
+ha3ia
+h2aj
2haka
ha1kl
2h2al.
@@ -4913,10 +4996,11 @@ h4ann
h1ap
ha2pl
ha2pr
-h4a3ra
+h2a3ra
2harb
h2ard
h1arm.
+har3ma
har4me.
har4mes
har2th
@@ -4929,6 +5013,7 @@ hau5f6lie
2h1aufm
h1aukt
hau2sa
+hau4san
hau2sc
hau4spa
hau5stei
@@ -4951,8 +5036,8 @@ he3be
he4b1ei
he2bl
he3br
-he5ch2e
-he1cho
+he1ch
+he3ch2e
h3echt
he3cke
hed2g
@@ -4985,7 +5070,7 @@ he1ism
he1ist
heit4s3
h1eiw
-he2l3au
+he2l3a
hel1ec
h3e2lek
he3len
@@ -5022,10 +5107,15 @@ hen3z
4he2o
he3on
he3op
+he3pa
he3ph
+h2er.
her3a2b
+he2ral
2herap
he3ras
+herb1r
+her4b3ra
he4reck
4hereig
he4r3eis
@@ -5034,6 +5124,7 @@ he4rerw
h1er2fo
h3erfü
herg2
+her2ho
4herif
herin4f
he6rin6nu
@@ -5057,6 +5148,7 @@ het2i
he3t4s
h2e2u
heu3g
+3heusc
he3x
he1x4a
he1y2
@@ -5069,10 +5161,11 @@ hfi2s
hget4
2h1h2
hhoh2
-2hi.
+4hi.
2hia
hi2ac
hi2ang
+h2ias
hi1ce
hich6ter
2hi3d
@@ -5112,6 +5205,7 @@ hi3ri
hirn1
hir4ner
hi3ro
+hir2s
his2a
hi2se
hi2st
@@ -5168,7 +5262,6 @@ h4lor
hlo2re
h3losi
h2lös
-hl2ser
hl3sku
hl3slo
hlst4
@@ -5202,6 +5295,7 @@ hm2s
hm3sa
hms1p
h2mu
+h3mul
2hn
h2na
hna2c
@@ -5255,11 +5349,9 @@ hof3fa
ho2f3r
2hoi
hol1au
-4holdy
3hole
ho2l1ei
hol3g4
-4holo
ho4lor
3hol3s
h1o2ly
@@ -5272,6 +5364,7 @@ h2on
hond4
hono3
2hoo
+2hop
ho1ra
hor3d
2h1org
@@ -5290,6 +5383,7 @@ ho1y2
1h2ö
hö2c
hö3ck
+3höhe
h4ör
hö2s1
h3öst
@@ -5313,14 +5407,13 @@ hrei4ba
h3reic
h4r1eig
h3rel
-h3r2en
+h3ren
h3rep
hr4erbe
hr4erbu
hr2erg
hr2erk
h4rer4la
-h5rerlag
h3rerle
h6rer6leb
hr6erlei
@@ -5337,7 +5430,6 @@ h4rick
hri4e
h3riesl
h3rin
-h4rine
h4rinh
hr1ins
h4rist
@@ -5354,8 +5446,8 @@ h2ror
h3rou
hrr4
hr2s1ac
-hr2s3an
-hr2sau
+hr4s3an
+hr2s3au
hr3schl
hr2s1en
hr2ser
@@ -5365,7 +5457,7 @@ hrs3k
hr4s1of
hr2su
hr4sw
-hr2tab
+hr2t5ab
hr2tan
hr2th
hr2tor
@@ -5377,7 +5469,7 @@ h3ruh
hr1ums
h3rü
h4rüb
-h2ry
+h4ry
hrz2
4hs
h4s3acht
@@ -5459,12 +5551,12 @@ h4t3ents
hter6de.
ht3erfü
ht3ergr
-h2t1erh
+h2t1er2h
ht5erken
h4terkl
h6t5erleu
h6terneu
-h4t3erre
+h4t3er4re
h6t5er6spa
h4t3er4st
ht6erste
@@ -5504,7 +5596,7 @@ ht3rös
h2t3ru
h2t3rü
h4ts
-hts3an
+ht4s3an
ht4s3end
ht2so
ht2sp
@@ -5517,7 +5609,6 @@ ht4s3tur
ht4s3tür
htt4
htti2
-htu2e
h2t1urs
h3tü
ht3z2
@@ -5547,9 +5638,8 @@ hu2n
h1una
hung4s
hu3ni1
-h1up.
h1ups
-2hur
+2h2ur
hurg2
hu3sa
hu2so
@@ -5631,7 +5721,6 @@ i2ap
ia1q
i3ar.
ia2ra
-2ias
i2asc
ia3sh
i2asi
@@ -5657,6 +5746,7 @@ i1ät.
i1äta
i1ät3s4
2i1b
+ib1art
i2b1auf
ib2bli
ib1ei
@@ -5700,21 +5790,17 @@ i1chu
ich1w
i1ci
i3cke
-ick3sa
i1cl
i1d
id2ab4
i3d2ac
i3dam
-id2an
-i2d1au
+id1au
1i2dee
idein3
i4deis
idel2ä
-ide3sa
ide3so
-ide3sp
1i2dio
idni3
i2dol
@@ -5729,6 +5815,7 @@ ie3a4
ie2bä
ie2bl
ie2bre
+ie2bri
ieb4sto
ieb4str
ie1c
@@ -5758,6 +5845,7 @@ iel1ec
ie3lerd
ieler8geb
ie4less
+i2eli
i1ell
ielo4b
i2els2
@@ -5801,10 +5889,8 @@ i3env
i3enw
i3enz
ie1o2
-iera2
-ier3ad
-ier3an
-ie2r3ap
+ier3a2
+ie2rap
i2ere
ie3red
ie3r2er
@@ -5818,6 +5904,7 @@ ierin3
ier3k2
i1ern
i3ern.
+i4erna
i2er5ni
ie2rö
ier4seh
@@ -5839,10 +5926,12 @@ ie2t3ho
ie2t1o
ie4t1ö4
ie2tri
+ie2t3ru
iet2se
i1ett
ieu2e
ie1un
+ie2w3u
i1ex
2if
if1ar
@@ -5903,9 +5992,10 @@ igsau4g
ig3sä
ig4se
ig3so
-ig3spr
+ig3sp
+ig4spa
ig3stei
-ig4sto
+ig4s3to
ig4stö
ig3str
igs4tra
@@ -5939,6 +6029,7 @@ ik1ak
ika4ka
ik1amt
i2k1ano
+ikanten8n
ik1anz
i4kanze
ik1art
@@ -5947,7 +6038,7 @@ i2k1au
i2k1är
4ike
i2k1ei
-ike2l1
+ik2e2l1
i2k1e4r2e
ik1erf
iker6fah
@@ -5965,7 +6056,7 @@ ik3no
ik2o3p4
iko1s
i2köl
-i2k3ra
+ik3ra
ik3rä
ik3re
iks2
@@ -6029,7 +6120,8 @@ il2m1au
il2min
2ilo
i2l1or
-il3t2h
+ilt2
+il3th
il3tr
i1lu2
i2lum
@@ -6046,16 +6138,15 @@ ima2tr
imat5sc
ima4tur
2ime
-i2meg
i2mej
-i2mek
i2mele
i2melf
+i3men
i2m1erf
i2m1erz
i4mesh
+imes3s
i2meti
-i2mew
i2m1inf
i2m1ins
im2mei
@@ -6072,15 +6163,16 @@ im2st
im3sta
2imt
imt3s2
-imtu2
2imu
-in3a2c
+in1a2c
+in3ach.
i4nack
i2n1ad
in2af
in3am
i3nap
in2ars
+in2art
ina4s
i2n3au
in1äh
@@ -6194,6 +6286,7 @@ ion3d
i3ons3
ion4spi
ion4stä
+ion3t
i2ony
i2o1p
io4pf
@@ -6226,9 +6319,7 @@ iph2
2i1pi
ipi3el
ipi3en
-ipi2s
i3p4l
-ipo6i5den
ip2pf
ip2pl
ip3pu
@@ -6247,7 +6338,7 @@ ir1c
ir2e
i3ree
2irek
-2i3ré
+2iré
ir2gl
irg4s
ir2he
@@ -6270,10 +6361,12 @@ i1ro
iro2s
i1rö
irpla4
+irre4l
irr2h
ir4schl
ir4schm
ir4sch3w
+ir3se
ir3sh
ir2st
irt2s3t
@@ -6287,7 +6380,6 @@ i2sau
i2s1än
2isb
i2sca
-isch3ar
i3s2che
i4schef
i4sch3e4h
@@ -6311,6 +6403,7 @@ ise3hi
ise3inf
i4seint
ise2n1
+ise4n3a
is2end
isen3s
i2serh
@@ -6369,7 +6462,7 @@ iß1ers
it1ab.
ital1a
it1alt
-it1am
+it1a2m
it1an
it2an.
it3a4re
@@ -6420,7 +6513,7 @@ it2s1e4
its3er1
it2so
it2s1pe
-it2sto
+it2s3to
it2teb
it4tri
itt2sp
@@ -6432,7 +6525,7 @@ itut4
i3tü
2itz
it2zä
-it4z3erg
+it4z3er4g
it2z1w
2i3u2
ium1
@@ -6457,6 +6550,7 @@ ixt2
4i1z
iz1ap
iz1au
+iz2ei
izei3c
ize2n
i2z1ene
@@ -6553,6 +6647,7 @@ kal2kr
k1all
kalo5
kal2tr
+ka2lu
k3ama
kamp8ferf
kan2al
@@ -6568,7 +6663,7 @@ kank4
k1ans
k2ans.
6kantenn
-ka3nu
+ka3nu3
2kanw
k2anz.
ka2o
@@ -6610,7 +6705,6 @@ k1äh
k1ä2mi
k1än
kär2
-2k1ärm
kä2s1c
käse3
2k3b2
@@ -6643,7 +6737,7 @@ kel3b4
2ke2lek
ke2len
ke2l1er
-2ke3let
+2kelet
kell4e
kel3s2k
k4elt
@@ -6661,7 +6755,8 @@ ken4sem
kens2k
ken5stei
ken3sz
-k3enten
+k3en4te.
+k3en4ten
ken3th
2k1ents
2kentw
@@ -6670,7 +6765,6 @@ ken3th
ke2pl
k2er.
ke1rad
-ke1ral
k2erc
ke3reig
4kerfah
@@ -6691,6 +6785,7 @@ k6erlebe
k4erlö
ker4neu
k1ero
+ker4reg
k2ers.
kerz2
k1erz.
@@ -6750,6 +6845,7 @@ k4lar
k3laug
k2le
4kle.
+kle2br
k3lee
4kleh
k4leid
@@ -6818,7 +6914,7 @@ ko1r2a
2k1orc
kor6derg
ko3ri
-kor4n3a
+kor4n1a
k2os
ko2sp
ko3ta
@@ -6832,7 +6928,7 @@ k1o2x
kö2f
k1öl
2k1p2
-k1q
+2k3q
k2r4
2k3rad
k4ral
@@ -6872,12 +6968,12 @@ k4s1äl
ks2än
ksch4
ks1e2b
-k2s1em
k2sent
ks1erl
k2s1ers
k2s1erw
ks3ha
+k3shi
k2s1id
k2s1in
k2s1o2
@@ -6891,6 +6987,7 @@ kst4
k2stal
k4s3tanz
k3stat4
+k2stea
ks2ti
k2stor
k2strä
@@ -6925,7 +7022,6 @@ ktion4
kti4ter
k2t1of
k3top
-kt1ope
k4torga
kt3orie
kt4ran
@@ -6978,6 +7074,7 @@ kze3l
3l2ab.
la3ba
2labb
+lab2br
4l3aben
2labf
2labg
@@ -6989,7 +7086,7 @@ lab4ra
lab4ri
2labs
l1abt
-3la3bu
+3labu
2labw
la1ce
la2ce.
@@ -7002,7 +7099,6 @@ l1adl
l1adv
2laf
la2fa
-laf1r
laf3s
laf3t
la2ga
@@ -7030,12 +7126,13 @@ l1anal
la2nau
2lanb
5l2and
-lan2da2
-land3ad
+lan2d1a2
lan4d3au
lan6d5erw
lan6d5erz
lan2dr
+lan4ds
+laner2
2lanf
lan2gl
lang3s4
@@ -7066,6 +7163,7 @@ la2ru
la2sau
4lasd
la3se
+3lasg
2lash
2lasi
la2so
@@ -7084,6 +7182,8 @@ lat4t3in
lat2t3r
1laub.
laub4se
+lauf1i
+lau4fin
lau2fo
1laug
l2aus.
@@ -7127,6 +7227,7 @@ lb3rit
lb2s
lb3sa
lb3se
+lb4sh
lb3si
lb4sk
lb3sp
@@ -7138,9 +7239,11 @@ l2b3uf
lbzei2
2l1c
l3che
+l4chei
l5chen
l3chi
lch3l
+lch3m
lch3n
lch3r
lch3ü
@@ -7164,6 +7267,7 @@ l3das
ld1au
ld1är
l3de.
+l2deh
l2dei
l2dele
l3der.
@@ -7197,7 +7301,6 @@ le3ar
leben4s3
le2bl
2lec
-le2chi
lech5t4e
3led
4ledd
@@ -7217,6 +7320,7 @@ lei2br
l2eic
l2eid
4l1eig
+le2im
l2ein.
l2eind
lein4du
@@ -7238,11 +7342,13 @@ lekt2a
2lektr
3l2ela
2le2lek
+l2eli
lel3s
3lemes
le2m1o2
4lemp
lem3s
+l1emu
l2en.
le4nad
le2nä
@@ -7260,7 +7366,7 @@ len4sem
len3sz
2lentf
l1ents
-4l3entw
+2l3entw
lent4wä
5lentwet
len2zi
@@ -7268,7 +7374,6 @@ le1os
2lep
3lepa
3lepf
-lepositi8
3lepr
l2er.
l2e1ra
@@ -7300,11 +7405,11 @@ le2rob
l4ers.
lers2k
lers2t
-ler3t
l4erwa
2lerwo
2l1erz
l2erza
+ler2zi
les2am
les2e
2l1esel
@@ -7312,6 +7417,8 @@ le3ser
le3sh
lesi1
le3sk
+les2ko
+le2spo
les2t
leste3
le1sto
@@ -7319,13 +7426,11 @@ le1sto
2lesy
le2tat
2le3th
-2leto
let4tu
le2u
4leud
2leuro
3leut
-3lev
2lexe
le2xis
2lexz
@@ -7359,16 +7464,16 @@ lg2lö
l3go
lg3re
l3gro
-2l1h2
-l3he
+2l3h2
3lhi.
1li
3lia
li3ac
+li2ad
li3ak
li3ar
lia1s
-li3b4
+lib4
libi3
li1c
li3chi
@@ -7390,7 +7495,6 @@ lie2st
lig4n
li2gre
li3ke
-li2kr
lik2sp
lik4ter
li3l
@@ -7419,6 +7523,7 @@ l2insc
2linsp
2linst
2l1int
+li1nu
l1inv
2linz
li2o
@@ -7442,6 +7547,7 @@ lit3sz
li3tu
3liu
liv2e
+livi1
2lixi
li2za
lizei3
@@ -7456,6 +7562,7 @@ lk3lad
lk3lic
l2k3lö
l3k4lu
+l3k2me
lk4ne
lk5ner
lkor2b1
@@ -7509,6 +7616,7 @@ ll2es
l2lex
llf4
llg4
+llik4
ll1imb
ll1imp
l2l1ind
@@ -7530,9 +7638,10 @@ ll3sä
ll3sh
ll3s2k
ll2spr
-ll5t4
+ll3t
llti2m
-llt5s2
+ll5t4r
+llts2
llu2f
ll1ur
llus5t6
@@ -7690,7 +7799,6 @@ ls4tr
ls2tu
ls1um
l2sun
-lsu3s
4l1t
l2tab
ltag4
@@ -7707,19 +7815,20 @@ lt1eh
lt1ein
l2t1eis
l4te4lem
-lt3eli
lt2en
-l5ten.
lten6gel
lter3a
+lter2f
lt2erg
+lter6ken
+lter6leb
+lter4nä
lt2erö
l4t1e4sk
lte2th
l2t1eu
l2th
l3thas
-l4thei
lt3ho
l3thu
ltimo4
@@ -7727,10 +7836,10 @@ l2tob
l2t1of
l2t1o2ri
lto2w
+l3tö
lt1öl
-l3tör
lt1ös
-l4t1öt
+lt1öt
ltra3l
lt3räu
l2t3re
@@ -7738,7 +7847,7 @@ lt4rie
lt3roc
lt3ros
l2t3rö
-l6ts
+l4ts
lt2so
lt4stab
ltt2
@@ -7761,19 +7870,19 @@ luf2t1e
luf2tr
lu2g1a
lu2g1e2b
+lu2gi
lu4g3l
lu2go
lu2g3r
-lug3sa
lug3sp
lu2gu
2l1uh
lu1id.
lume2
2lumf
+2l1umj
2lumk
2luml
-l2ump
2l1ums
l1umw
1lu2n
@@ -7791,7 +7900,6 @@ l1urt
lu2sp
lus4s3a
lus2s1c
-luss3er
lus6serf
lus6serk
lus6sers
@@ -7805,10 +7913,10 @@ lust3re
lu2s1u
lu2t1a
lu2tä
-lut2ed
lu4teg
+luter2
lu4t3erg
-lut1o2f
+lu2t1o2f
lu2top
lu4t3r
lut5schl
@@ -7832,7 +7940,6 @@ l2z3ac
l3z2an
l2z1ap
lz1ar
-l2z1äp
l2z1är
l3zen
lz2erk
@@ -7848,9 +7955,8 @@ lz2wec
m1ab
m2abe
2mabk
-m2ab4r
+3m2ab4r
2mabs
-2mabt
ma3chan
mach4tr
ma2ci
@@ -7882,7 +7988,6 @@ ma4lakt
ma2lan
ma4l3at
ma2lau
-mal3d
ma3le
mal2er
mali1e
@@ -7905,8 +8010,8 @@ m2anh
m4ann
2mansa
2mansä
-2mansc
2mantw
+manu3
2manz
ma2or
2m1apf
@@ -7947,6 +8052,7 @@ ma1yo
2m1ähn
mä1i2
2m1änd
+2mäo
m1ärg
3mäß
mä3t4r
@@ -7955,7 +8061,7 @@ mäu2s1c
mbe2e
mb6l
m3b4r
-mby4
+mby4t
2mc
m3ch
2m1d
@@ -8009,12 +8115,14 @@ men2so
men3ta
men6tanz
2mentn
+ment4sp
4m3entwi
me1o
2meou
2meö
3m2er.
me1ra
+mera1f
me2r3ap
me4rens
mer2er
@@ -8037,6 +8145,7 @@ mes2st
meste2
me1sto
4mesu
+m2et
me3t2a
me3th
meu1
@@ -8044,7 +8153,7 @@ meu1
1mé
2m1f4
mfi4l
-4m1g2
+2m1g2
2m1h4
1mi
mi2ad
@@ -8064,12 +8173,12 @@ mie4ti
mi2kar
mi2ki
mi2ku
-3mil
mi3l2a
+3milb
+3milc
milch1
mil4che
mild4s
-4milz
2m1imp
minde4s
min2en
@@ -8077,9 +8186,11 @@ min2eu
min2ga
ming3s4
mi3ni
-3min2o
+min2o
mi1nu
3minz
+mi2o
+mioni1
3mir.
mi3ra
3miri
@@ -8090,7 +8201,6 @@ mi4scha
mi4schn
mi4sch3w
mise1
-mis2s1c
mi2ste
3mit
mi2ta
@@ -8107,7 +8217,6 @@ m3ka
mk5re.
4m1l2
ml3c
-ml3l
ml3s
2m1m
m2mab
@@ -8133,6 +8242,7 @@ mm1ins
mm1int
mmi3sc
mmi1s4t
+m2m1ö
mm3p2
mmpf4
mm2s
@@ -8142,7 +8252,6 @@ mm3sta
mm3str
mm3te
m2mum
-mm2un
mmül2
mmüll1
2m3n2
@@ -8161,6 +8270,7 @@ mo2k1l
3mom
mom2e
3m2on
+mo2nä
mo3ne
mo4n1er
mon2s3
@@ -8186,7 +8296,7 @@ mo1y
mö2c
4mök
m1öl
-2m1p
+4m1p
mpa3ne
m2pf
mp4f3erg
@@ -8197,6 +8307,7 @@ mp2f3l
mpf1or
mp1hos
m3pi
+mpi3as.
m4p3lem.
m2p3len
m2p3les
@@ -8240,7 +8351,7 @@ m3s2tu
ms4tü
m2sü
m3sy
-4m1t
+2m1t
mt1ab
mt1ak
m3tam
@@ -8282,15 +8393,15 @@ mt3z
mu1a
mu3cke
2m3uh
-3mul
mu3la
-4muls
+2muls
3mun
mun2d1a
4m3unf
4m3ungeb
mu3ni
m4unk
+m2unr
munt2
4munz
mu3ra
@@ -8337,7 +8448,7 @@ n2abo
na2br
4n3abs
4nabt
-3n2ac
+3nac
na2ch1
na3chen
nach3s
@@ -8399,7 +8510,7 @@ n1and2
na3no
n1anp
2nanr
-2n1ans
+4n1ans
2nantr
2nanw
nap2si
@@ -8414,6 +8525,7 @@ n2ark
n2arle
2narm
4nart
+n3arti
na3r2u
3nas
n2as.
@@ -8423,7 +8535,8 @@ na4schw
nasyl2
3nat
n4ata
-na3t4h
+n3a3t4h
+na4the
4n1atm
nats1
nat4sa
@@ -8446,6 +8559,7 @@ navi5ers
3n2äc
3näe
2n1ähn
+3näi
2n1ä2m
2n1än
när4s5
@@ -8484,20 +8598,21 @@ nder6läs
nde4rob
nder5ste
nde2se
+nde4spe
ndi2a3
n2dob
ndo2be
ndo1c
nd1op
nd1or
+ndo2ri
n2dö
n2d3rat
n2d3re
n2drob
nd3rol
n2drö
-n2drui
-n4d3run
+n2d3run
nd2sor
nd2spr
nd3th
@@ -8514,7 +8629,6 @@ ne2bl
2nec
3neca
3ned
-ne2de
2nee3
ne2e2i4
ne3ein
@@ -8543,10 +8657,11 @@ ne3li
3nelk
n2ell
nel4la
-3ne3l2o
+3ne3lo
3ne3lu
n2em.
2n1emb
+nem4e
n1e2mi
2n3emp
2n1ems
@@ -8603,6 +8718,7 @@ ne2pos
n2er.
ne1ra
ne2rab
+ne2r3af
ne3r4al
ne2r3am
ne2ran
@@ -8622,11 +8738,14 @@ nerfor4
n1erh
4n3erhö
3neri
+n2erj
n1erk
n2erli
2n1erlö
ner4mit
n2ern.
+n1ernä
+ner4neu
4n1ernt
ne1rös
n2erp
@@ -8638,11 +8757,14 @@ n2erv
2n1erz
3n2es
n4es.
-ne3san
nes4c
+ne2sei
+ne2sev
+nesi1
ne3ska
nes1o
-ne2s1p
+ne2sor
+ne2s1pa
4n3essi
ne1sta
nes3ti
@@ -8659,6 +8781,10 @@ n1e2tu
net2zi
ne2u
neu1c
+neuer4f
+neuer4k
+neuer4s
+neuer4w
neu3g
2n1eup
neur2
@@ -8708,7 +8834,6 @@ n2g1i2d
n2glic
n2glo
n3g2loc
-ng3m
n2gn
ng3ne
ng1or
@@ -8750,6 +8875,7 @@ ni1ero
nifes3
nig2a
2n3i2gel
+2niget
nig3r
ni2gre
nig4sp
@@ -8765,7 +8891,7 @@ nim2o
4n1imp
nin1
3n2in.
-n2in4a
+n2in2a
4n3ind
2ninf
3n2ing4
@@ -8807,6 +8933,7 @@ nk2am
n2kans
n2k3aus
n2käh
+n2k1äp
nke2c
nke4lei
n3k2er
@@ -8845,13 +8972,13 @@ n2nau
nn3d
nn4ens
n4nents
+nner4fü
nn2erh
nn2erk
nne2rö
n4n3er4wa
nner2z
-nne2s
-nnes1e
+nne2s1e
nne4st
nn2ex
nn3f
@@ -8862,6 +8989,7 @@ nn1o2r
nn3sc
nn3se
nn3s2p
+nn4s3pe
nnst4
nn2th
n2n1uf
@@ -8875,6 +9003,7 @@ n2o3ble
3noblo
2n1ob2s
no1c
+noch4r
2no2d
no3dr
n1of
@@ -8909,7 +9038,7 @@ no2tel
no3t3h
no4tha
no2t3in
-no2t1op
+no2top
no2tr
3nov
3now
@@ -8919,7 +9048,7 @@ no2tr
2nö2f
2n1ök
4n1ö4l
-n2öt
+1n2öt
2n3p4
npa2g
npf4
@@ -8937,10 +9066,10 @@ n2sang
n2sant
n3s2arg
n2saus
-n3sav
n2s1än
n2s1äus
ns2ca
+n4schl.
n3schu
nsch7werd
ns1eb
@@ -8970,6 +9099,7 @@ n2s1op
n4s3ort.
nsp4
n2spat
+n5s4pen
n4speri
n4spers
n4sph
@@ -8977,7 +9107,7 @@ n3s2pi
ns4pie
n2spo
ns3pon
-n4sprä
+n2sprä
n4s3prie
n4spro
nsrü2
@@ -9018,7 +9148,6 @@ n4s3zi
nt3abs
n3t2a3c
n3t2al
-nta3m
nt1ang
n4tanza
nt2arb
@@ -9039,14 +9168,15 @@ nt4ene
nten6te.
n3ter
nte4ras
+nt4erh
nt4ern
nt4ers
nt4ert
n4t1ess
+nteu3
nte3v
nt2her
n2t3ho
-n3thr
n3t4hu
nti3c
nti3k4l
@@ -9068,11 +9198,8 @@ nt4rig
n5trop
n2t3rü
n4ts
-nt3sa
-nt4sau
nts2o
-nts2p
-nt4s3par
+nt4spar
nts2t
nt2s3to
nt3su
@@ -9086,6 +9213,7 @@ n3tü
nt3z
1nu.
1nu1a
+nu4ale
nu3ar
nubi1
1nu1c
@@ -9120,6 +9248,7 @@ n3ungl
3nu2s
nu3sc
nu3se
+nus1i
nu3sl
1nut
nu2ta
@@ -9177,17 +9306,16 @@ oa3chi
o4ad
oa3de
oa4g
-o4ah
o4a3i
oa3ke
oa4k1l
o4a3la
o4a3mi
-o2ar
o2as
3oa3se
o4at
o5au
+o1ä
o1b
ob2al
obal2t1
@@ -9213,10 +9341,9 @@ ob3ite
ob1l
ob3lei
1o2b3li
-2o3blo
+2o3blo2
2o3bo
o2b3re
-o3bri
ob3s2h
ob3sk
obs2p
@@ -9261,13 +9388,15 @@ o1ç
o1d
o3d2a
od2dr
-o3deb
o3d2e1i
odein3
ode2n1
odene2
+odesi1
+ode3sp
o3dex
2o3dia
+odi4er
o3dir
o3div
o2don
@@ -9276,6 +9405,7 @@ odo4s
o2dre
odt4
2o3du
+o3dy
2o1e
oe2b
o2ec
@@ -9299,6 +9429,7 @@ of2f1a
of2f1in
1offiz
of2f3l
+of2fo
of2f3r
offs2
off3sh
@@ -9331,7 +9462,8 @@ oge2l1i
o3gh
ogi2er
og2lo
-o3g4n
+og4n
+ogo4i
og3s2p
og1ste
o1ha
@@ -9339,8 +9471,8 @@ o1hä
o1he
o2h1eis
ohen3s
-o2h1ert
-o2h1erz
+o2h1er4t
+o2h1er2z
o1hi
ohl1a
oh3lec
@@ -9353,14 +9485,15 @@ oh4lerw
oh3lo
ohls2e
oh2lu
-oh4n3ac
+oh4n1ac
+oh3nee
3ohng
oh2ni
1ohnm
oh2n1o
o1ho
oho2la
-o2h1o2p
+oh1o2p
o2h3ö
ohr3a
oh4rin
@@ -9375,7 +9508,8 @@ o3ie
o1im
oimmu4
o1in
-oi2r
+oi2ra
+oi2re
o2isc
o3isch.
o1ism
@@ -9429,6 +9563,7 @@ ol2lel
oll5ends
ol4lerk
oll3erw
+oll3sp
o3lo
ol2of
olo3p2
@@ -9455,6 +9590,7 @@ o3m2eis
o2mel
o2mene
o2mep
+omer2
o2meru
om1erz
om2es
@@ -9476,8 +9612,10 @@ o2nae
o3nal
on1ap
o2narb
+on4at
on2au
2onä
+on1äh
onbe3
2onc
onderer5
@@ -9547,6 +9685,7 @@ opa5s
o1pec
o1pei
o1pe4n
+1oper
2opf.
op2f3a
op3fah
@@ -9578,7 +9717,7 @@ o1q
or1a
or3a2b
o1rad
-2oral
+2o1ral
o2r3alm
or4alt
3oram
@@ -9611,7 +9750,7 @@ or2do
ord3s2t
or2dum
2ordw
-4ore
+2ore
ore2a
ore2b
o2r1e2ck
@@ -9641,7 +9780,6 @@ o3rier
4oril
4orin1
or1ins
-2orit
ork2a
or2k3ar
ork4r
@@ -9656,14 +9794,17 @@ or2n3ä
or5ne.
or3n2o1
2o1ro
+or1o2b
oro3n2a
2o1rö
+2orp
2orq
2orr
orr4a
+or3re
or3rh
2ors2
-or3s4a
+or3sa
or3sh
or3sz
or2t1ak
@@ -9685,7 +9826,6 @@ or2tor
or4tö
or4trau
or4t3räu
-ort3re
ort3ric
or2t1um
o3ru
@@ -9697,6 +9837,7 @@ o2rya
os3ad
os4an
osa1s
+o4sca
osch3ar
o3sche
osch3le
@@ -9706,15 +9847,16 @@ ose3e
o2s1ei
ose2n
o4sents
+os2ex
2osh
o3s2hi
-o3sho
+o1sho
2osi
o3sk
o4ska
os3ke
o4ski
-2os2kl
+2oskl
2os2ko
os2lo
2oso
@@ -9766,7 +9908,6 @@ o3tark
o2t1au
ot3aug
ot1ä
-otäugi4
o2teb
o3tei
o4t1eib
@@ -9774,7 +9915,7 @@ ote1i4n
ote3ine
ote2l1a
ote4lei
-ot4em3
+ot2em3
otemp2
o2t1erw
ote2s
@@ -9782,7 +9923,7 @@ ote2s
ot4he
ot5hel
o4t3hi
-ot3hos
+ot3ho
o2thr
o2til
o2t1i2m
@@ -9841,9 +9982,9 @@ o3wec
owe2r1
o3wi
o1x
+2ox.
ox2a
ox2e
-1o2xid
ox3l
o2xu
1oxy
@@ -9869,7 +10010,6 @@ ozon1
öch2s
öchs4tu
ö1d
-öde1r
ödi3
ödien3
öd2st
@@ -9886,6 +10026,7 @@ ozon1
öh3ri
ö1hu
ö3ig.
+ö3isch.
ö1ke
ö2ko1
ök3r
@@ -9909,6 +10050,7 @@ ozon1
ö2l1u
öl2ung
ölz2w
+ö1m
öm2s
ön2e
ö3ni
@@ -9919,6 +10061,8 @@ ozon1
ön3sp
ö1nu
öo1
+öot2
+öoti1
ö1pe
öpf3l
öp4s3t
@@ -9994,6 +10138,7 @@ pal2mä
pal2m1o
2palt
pa2nar
+pa4nat
pan3d
pan4ds
pa2neu
@@ -10008,7 +10153,7 @@ panz4
papi2
papieren8
papie8r7end
-3para
+1para
pa2r3af
par3akt
1parc
@@ -10068,6 +10213,7 @@ pekt4s
pe2l1a4
pe4lein
pe2let
+pe4leu
pe2lex
pe3li4n
pe4l3ink
@@ -10088,7 +10234,6 @@ penz2
1pep
pe1ra
per2an
-pere2
1perle
per4na
3pero
@@ -10134,6 +10279,7 @@ pf3lo
p2for
pf3r
pf1ra
+3pf4ro
2pfs2
pf3sl
pf3sz
@@ -10158,6 +10304,7 @@ phi2ka
ph2l
2phm
2phn
+p3hop
2phö
ph4r
2phs
@@ -10169,7 +10316,6 @@ phu4s
pi2a3
piap2
pias4
-pi3as.
pi3chl
p4id2
piegelei8
@@ -10244,10 +10390,8 @@ po2p3ar
po1pe
po2pl
po3pt
-po1ral
po1rau
porf4
-2porn
por3s
por4tin
por4tre
@@ -10272,11 +10416,13 @@ pö2c
p2p3a2b
pp3anl
ppe1e
+ppeli5ne
ppe2n1
ppf4
pp1fr
p2p1h
p3p2ho
+p2p1ia
pp3l
pp1lä
p2ple
@@ -10300,12 +10446,15 @@ p4rä
pre2e1
1prei
3preis
+prei4s3c
2preiz
2p3rer
3p4res
pri4e
2prig
3prinz
+pri2t1
+priter4
2pritz
1p4ro
3prob
@@ -10377,6 +10526,7 @@ pul2sp
pun2s
2punt
2pur
+pu3ri
pu2s3t
3put
put2s
@@ -10390,6 +10540,7 @@ pys4
py3t
2p1z
qu4
+que4te.
1queu
1ra.
2r1aa
@@ -10414,7 +10565,6 @@ ra1ce
2r1acet
ra4cheb
ra4chin
-rachter6
racht3r
rach6trä
ra2chu
@@ -10425,12 +10575,12 @@ ra2dam
2radap
3radf
r3a2d3r
-rad5t
-1rae
+rad5t4
+1ra2e
+ra3er
r2af
raf3ar
ra2fer
-raf1r
ra3ge
ra3gle
ra2gn
@@ -10467,9 +10617,9 @@ rall2e
r3alp.
2ralpe
r4als
-r3al3t
+r3alt
2ralta
-r4alt2h
+r4al5t2h
ra2lu
3raly
rama3s
@@ -10477,7 +10627,7 @@ ra2mer
1r2ami
ram4man
ram6m5ers
-ram4m3u
+ram4mu
2r1amt
ramt4s
r2an.
@@ -10504,6 +10654,7 @@ r2anmu
r2ans.
r2ansp
ran4spa
+ran2th
2rantr
2r3anw
r2ap
@@ -10524,7 +10675,9 @@ ra4schl
2rasph
2raß
1rat
+r4at.
ra2t1a
+rat2o
rat4r
2r3atta
4ratz
@@ -10550,6 +10703,7 @@ r2ax
raxe3
3r2äd
4räf
+rä1fr
4räg
2räh
2räm
@@ -10577,7 +10731,9 @@ rb1art
rb1auf
rbb2
rb1ech
+rbeid4
r4belä
+r4belis
r3ben.
rb1ent
rbe3r2e
@@ -10614,7 +10770,7 @@ rch3m
rch3r
rch1s2
rch3sp
-rchst4r
+rchst4
rch3t2a
rch6terg
rch6terw
@@ -10685,12 +10841,13 @@ re2cka
re1el
re1er
3refe
-4reff
+2reff
3refl
3refo
3reg
5reg.
rege4l3ä
+2reh
re2hac
re4h3ent
re2h1i
@@ -10725,6 +10882,7 @@ re3lo
2r1elt
relu2
r4em.
+r2emi
4rempf
4remu
r4en.
@@ -10740,11 +10898,11 @@ ren2gl
re2ni
ren4nar
ren3sau
-r1ense
+2r1entg
2r1entl
2r1ents
2rentw
-4r3entz
+4rentz
r2enz
ren2zw
re3or
@@ -10754,10 +10912,10 @@ re4pis
4repp
3r4er.
2r1erb
+rer2bi
r4erbil
r2erbr
2r1erd
-r2erer
r1erf
r2erfe
r2erfl
@@ -10766,7 +10924,9 @@ r4ergen
r1erk
4r3erken
r2erki
+2rerkl
2r1erl
+5rerlag
2r1erm
rer2n
2r1ernä
@@ -10865,16 +11025,19 @@ r2gres
r2gret
rg3rin
rg3sp
+rgs2ti
rgs4tr
rg5s2tu
r1h4
2rh.
2rha
r2ha.
+r3hals
2rhä
3r4he.
2r3her
r2hoe
+r3hof
rho2i3
2rhol
2rhö
@@ -10887,8 +11050,9 @@ ri3at
rib2bl
ri1ce
ri1cha
-rid2
-ri2d3an
+ri2dan
+ri2dau
+rid2g
2ridol
2ridy
r2ie
@@ -10912,7 +11076,6 @@ ri2fr
rif3s
rif4ter
3rig
-5rig.
ri4gene
5rigj
rig1l
@@ -10920,6 +11083,7 @@ rig1l
rik1l
ri4kla
r2imb
+ri2me.
2rimp
rim2s
rim4sc
@@ -10962,7 +11126,7 @@ rismu2
ri3so
ri4s1p
3riss
-ri2st
+ri4st
ris6t5ers
r2it
r3i2tal
@@ -10979,6 +11143,8 @@ rk4ap
rkauf4s
r2käh
r3kla
+rk4las
+rk4lau
r2klis
rk2lo
rk2lu
@@ -10988,7 +11154,6 @@ rk3räu
r2k3rea
r3kri
rk2s1e
-rk3shi
rk2sp
rkstati6
rk4stec
@@ -11030,6 +11195,7 @@ rl3t
r3lu
rlz2
4r1m
+r2mab
r3m2ag
rma2la
r2m1ald
@@ -11039,7 +11205,6 @@ rm1anz
rm1a2p
r2maph
rm3d2
-r3me.
r2m1ef
r2meo
r2m1erp
@@ -11081,6 +11246,7 @@ r4n1ert
rner4ve
r5nes
rn2et
+rne3uf
r4nex
rn3f
rng2
@@ -11090,7 +11256,6 @@ r3nod
r2n1op
r2n1or
rn1ö
-r1nöt
rn3sa
rn3s2ä
rn3s2p
@@ -11133,7 +11298,7 @@ ro1pe
ro3ph
r1or
r2ora
-ror3al
+ro2r3al
ro2rat
ro2rei
ro2r1o
@@ -11141,6 +11306,7 @@ ror3th
ro3sh
ro3s2i
ro3smo
+ros4san
ros2s1c
ro3sta
rost1r
@@ -11167,6 +11333,7 @@ r1ök
r1ör
r2ös.
r2öse
+3rötu
2r1p2
r3p4a
r3p4e
@@ -11174,7 +11341,6 @@ rpe2re
rpe4r3in
rpf4
r2pli
-r3po
rpro1
rps3t
rp3t
@@ -11187,17 +11353,22 @@ rrat2s
rr1äm
rrb2
rr1c
-r3r2e
+rr2e
rre4ale
+r5rega
+r5rei
+rre2le
+rre2pa
rrer4s
rre2st
-r4rew
+rre2ve
+r2rew
rr2he
r3r4hen
rrik2
rr2n3a
-rr2o
-r2r3ob
+r3r2o
+r4r3ob
rro3m
rr2st
rr3stu
@@ -11206,7 +11377,6 @@ r3ru
r3r2ü
rrü1b
4r1s
-rs3ab
r2s1a2d
r4samp
r4s1amt
@@ -11214,7 +11384,8 @@ rs2an
r2s3ang
rs3anp
rs3ant
-rs3ar
+rs2au
+r3sche
r6scherl
r3schu
r3schw
@@ -11228,7 +11399,7 @@ rs1ers
rs1erz
rse2t
rs1eta
-r3s2ho
+r3sho
r3si
r4sins
rs2kal
@@ -11250,6 +11421,7 @@ r4s3ort.
rs2p4
rs4pel
r2s3ph
+r5spi
rs3s2
r4stant
r5statu
@@ -11280,6 +11452,7 @@ r2sumf
r3swi
r3sy
4r1t
+rt4abl
rtal2
r2t1alm
rtals1
@@ -11305,16 +11478,17 @@ r4terfa
r4terfo
rt1erh
r4t3er4la
+rter6mit
r4t3ernä
rter4re
rt1ers
rte3s2k
r2thi
-rt3hol
rt2hum
r2t1id
r2t1ima
r2tinf
+rt4is
rto1p
rt1or
rto2ri
@@ -11347,7 +11521,6 @@ ru2fa
ruf2s3
ruf4ter
2r1uhr
-3ruin
ru1ins
ru1is
2rum
@@ -11396,6 +11569,7 @@ ru2zw
2rüb
rü1ben
rü1ch
+rück5sta
4rümm
rün3z
2r1v
@@ -11406,10 +11580,12 @@ rwun3s
4r1x
1ry
ry2c
+rysti1
2r1z
rz2an
r2zar
r2zas
+r3ze.
rz1eck
r5zene
rz1eng
@@ -11482,7 +11658,7 @@ s2an.
2s3a2na
s3anb
s2an2c
-s2and
+3s2and
s4and.
san4dar
san4dri
@@ -11499,7 +11675,7 @@ s2aph
sa2po
3sapr
2s1ar
-3s4ar.
+3sar.
3s2ara
4s3arb
3s2ard
@@ -11518,9 +11694,10 @@ sa2tr
sa3ts
sat4z3en
s1a4u
-3sau.
+3s4au.
3sauc
3saue
+sau8erste
2s3aufb
sau2gr
3saum
@@ -11528,7 +11705,6 @@ sau2gr
sauri1
2s3ausb
s3ausw
-2s3av
sa2vo
1sä
s3ähn
@@ -11536,7 +11712,6 @@ s3ähn
4s1ält
2s1äm
2s1änd
-3sänge
2s1är
3s2ät
3säul
@@ -11547,7 +11722,6 @@ sbe3r2e
1sc
2sc.
2scam
-s2can
s2cap
2scar
2s1ce
@@ -11579,7 +11753,6 @@ s4chil
3schis
2schk
s4chl
-4schl.
sch4lag
4schle.
6schlein
@@ -11606,7 +11779,6 @@ scht2a
scht4r
s4chu
4schunt
-sch2up
3schü
2schv
4schwaa
@@ -11678,6 +11850,7 @@ sein4fo
2seinn
4seinr
s4eins.
+4seinsa
4seinsp
4seinst
2seinw
@@ -11695,7 +11868,7 @@ sel1ec
se4lerl
sel3ers
2self.
-s3elix
+s1elix
se2l3ö
s2els
sel3sz
@@ -11711,6 +11884,7 @@ se2nä
se2no
3s2ens
s2ent.
+sen3ta
4sentf
2s3entg
s2enti
@@ -11721,11 +11895,10 @@ se2n3u
seo2r
4s1e2pos
3seq
-s4er.
+3s4er.
3sera
ser3a2d
-ser3al
-se5ref
+se2r3al
s3ereig
6sereign
se4r3eim
@@ -11734,17 +11907,18 @@ ser2er
2s1erfo
s2erfr
s3erfü
-4serfül
-s2ergr
+4ser4fül
+s4ergr
s1erh
2serhö
3seri
serk4
-4serken
+4s3erken
s2ern.
2s3ernt
se1rot
4s3eröf
+ser3r
s2ers.
2sersa
4serseh
@@ -11775,6 +11949,7 @@ sfal6l5er
sflo4
4s3g2
2s1h
+4sh.
sh2a
3s2ha.
sha2k
@@ -11784,15 +11959,17 @@ s3hä
s3h2e
3shi.
3shid
+4shil
shi4r
sh3n
s3hoc
-4s3hof
-3s2hop
+4shof
+3shop
sho4re
3show
s3hö
sh4r
+4shs
1si
si3ach.
si2ad
@@ -11804,6 +11981,8 @@ sib4
s2ido
3s4ie
siege4s
+sieh1e
+sie4hes
sien3
si3ene
si1err
@@ -11825,6 +12004,7 @@ si2kr
sik3s
sik3t4
si2ku
+sil2br
3silo
2s1imm
si3n4a
@@ -11846,7 +12026,7 @@ s2ins.
3sio
sion4
3siru
-3s2is
+3sis
si2sa
si4schu
si2s1e
@@ -11892,6 +12072,7 @@ sk4l
4skor
4skow
4skö
+s3kro
4sks
4sk3t
3skulp
@@ -11945,19 +12126,20 @@ so3o
2sopf
sop3s
3sor.
-so1ral
s1orc
2s3ord
so2rei
+so3ren
2s1orga
5s2orge
2s1o2rie
-so2r1o2
+so2ro
3sors
so4ru
3sos
s4os.
4s1ost
+3soß
so3unt
3sov
4s1o2ve
@@ -11972,13 +12154,14 @@ s1ö2l
s1ös
1sp2
2sp.
-2spaa
+4spaa
4spak
2spala
spani7er.
4spap
-2spara
+2s3para
4sparo
+5s6parten
3sparu
3spaß
4spatr
@@ -11991,6 +12174,7 @@ s2pä
s3pel
4spensi
spe3p4
+s2pera
s1peri
2spero
s2perr
@@ -12018,7 +12202,7 @@ s3pn
2spod
2spog
s2poi
-2spok
+4spok
4spol
4s3pos
s2pott
@@ -12032,6 +12216,7 @@ s2pran
4spred
s2pren
2spres
+s2pric
2sprob
2sprop
3spross
@@ -12052,7 +12237,6 @@ srat4sc
sret3
srö2s1
srücker6
-srü2d
6s1s
ssa3bo
s5saf
@@ -12103,7 +12287,7 @@ ss2tur
s3stü
ss1ums
s1t
-6st.
+4st.
s2ta
4sta.
3staa
@@ -12120,7 +12304,7 @@ s3ta3li
2stalk
st1alm
st1alp
-st1ami
+st1a2mi
4stan.
sta4na
3stand
@@ -12138,7 +12322,6 @@ s4tau.
2staum
3staur
2staus
-3staus.
2stax
3s2tä
4stäg
@@ -12150,7 +12333,6 @@ s3täus
2st3c
2std
4s5te.
-2stea
4stechn
s2ted
4stee
@@ -12162,6 +12344,7 @@ st1eid
3steig
4steil
3steilh
+steil4z
stei4na
1s2t2el
2stel.
@@ -12204,7 +12387,6 @@ st3ev
4sth
s4thä
s3them
-st3heu
s4thi
s2t3ho
s2thu
@@ -12244,11 +12426,13 @@ s4toff
s4t3om
4ston
4stoo
+s4tope
2stopo
2stor.
2store
2storg
2stori
+2stors
s3tort
2stose
sto3s2t
@@ -12265,7 +12449,7 @@ sto3s2t
2stq
s2tr
2strad
-2strag
+2s3trag
1strah
4strahi
4strai
@@ -12355,6 +12539,7 @@ s3umsa
s3umst
su2n
3sun.
+sunder4
sun6d5erh
su4ne
s1unf
@@ -12365,9 +12550,8 @@ sup3p4
su2ra
2s1url
s1urt
-s4u2s1
-su3sa
-su3si
+s4us1
+su2sp
sus3s
3suv
1sü
@@ -12388,7 +12572,9 @@ sweh2
1s4y
syl1
sym3
-sy4n3
+sy2n3
+sy4na
+sy4nä
2s1z2
4s3za
4szä
@@ -12459,7 +12645,7 @@ ta4bend
2tabg
2tabh
2tabk
-3table
+3t6able
2t3abn
ta2br
4tabs
@@ -12479,7 +12665,7 @@ ta3d2s
t1afg
t1af4r
3t2ag
-ta2ga2
+ta2ga
ta2g1ei
4t3a4gent
4ta3gl
@@ -12520,7 +12706,6 @@ ta2l1op
2tam
3tame
ta2mer
-ta2mi
t1ampl
t1amt
3tan.
@@ -12543,7 +12728,6 @@ t1ans
3t2ans.
4t3ansi
4t3ansp
-ta2nu
2tanwa
2tanwä
t2anz.
@@ -12559,7 +12743,7 @@ ta2pl
2tappa
t2appe
2tarb
-ta4rens
+ta4ren4s
ta4r3ere
5t4a3ri
2tark
@@ -12606,8 +12790,10 @@ t1ausk
4t1ausw
3tav
3tax
-taxi1s
+ta3xi
+taxi3s
1tä
+3täa
4täb
tä1c
4täd
@@ -12640,7 +12826,7 @@ t3cha
t3che
tch2i
tch3l
-t2chu
+t2ch1u
tch1w
t4ck
t3cl
@@ -12661,11 +12847,12 @@ te3cha
2teche
3techn
2techt
+te2chu
2teck
te2cka
teck2e
te2cki
-te3der
+te2de
te1em
te2en3
te1erw
@@ -12781,9 +12968,9 @@ t1e2pi
3t6er.
ter3a2c
te1raf
-te1ral
ter3am
te3ran.
+te3rand
ter3a4s
4terbs
4terbt
@@ -12799,12 +12986,14 @@ terer4z
4t3erfol
t4erfr
4terfül
-3ter3g2
-6tergrei
+3terg2
+ter3ga
+6ter6grei
t4ergru
t4eri
te3ria
te2rid
+ter3k
5terkla
4terklä
2t3erlö
@@ -12817,7 +13006,7 @@ t4ero
t1erö
ter4re.
t4ers.
-ter5sc
+ter3sc
ter4ser
terst4
t4erst.
@@ -12826,7 +13015,6 @@ t4erst.
tert2
teru2
te4r1uf
-6terwerb
ter3za
2t1erzb
3t2erzu
@@ -12851,11 +13039,14 @@ t2et.
te2tat
4teth
4tetl
+teu3ere
+teu3eri
3teuf
3teum
te1un
3teur.
teu2r3a
+5teus
te2vi
te1xa
2t1e2xe
@@ -12894,6 +13085,7 @@ t2hes
3these
t2heu
1thi
+thi3er
t2hik
2t3hil
2t3him
@@ -12903,18 +13095,19 @@ t3hir
4th3m
2th3n
1t2ho
+t4ho.
2t3hoc
t3hof
2t3hoh
t4hol.
+t4holo
t3hor
2t3hot
thou2
+2thov
4t3hö
2thp
1th2r2
-4thrin.
-4thrins
2ths
2thub
4thun
@@ -12937,19 +13130,21 @@ ti1el
ti2el.
tiel3a
ti3e4n3
-3ti2er
+3tier
tie4rec
+ti2ern
ti1et
ti1eu
3tif.
ti1fr
4tift
-3tig
+3t4ig
ti4gerz
3tik
ti2kam
ti2kar
ti2kin
+ti2kra
ti2krä
ti2kü
ti2lar
@@ -12983,7 +13178,6 @@ tin2k1l
ti1nu
4t1inv
3tio
-ti3or
3tip
ti4que.
ti1rh
@@ -12996,6 +13190,7 @@ ti1sta
3ti3t2e
ti3ti
2ti3tu
+tiu4
tium2
3tiv
ti2van
@@ -13022,7 +13217,6 @@ tmo4des
4t3n2
t5na
tnes2
-tnes4s
1to
3to.
to4as
@@ -13031,11 +13225,13 @@ to5at
tob2l
t1obs
to1c
+t3ochs
3tocht
to6ckent
3tod
tode2
4to2d1er
+tode4s
to4d1u
toi4r
3tok
@@ -13071,6 +13267,7 @@ to2ru
t2orw
to3sc
3tose
+to3sh
to4sk
tos2p
4toss
@@ -13090,7 +13287,7 @@ to3un
4töf
4t1ök
tö4l
-3tön
+5tön
t1öst
4töß
3töt
@@ -13105,7 +13302,6 @@ tra3cha
t3rad.
tra4dem
tra4far
-3trag
3trahi
4trahl
6trahm
@@ -13116,7 +13312,7 @@ tra4far
3t4ran.
2trand
3trank
-t3rann
+t1rann
3trans
t3rase
t3rasi
@@ -13143,7 +13339,7 @@ t4reck
t4rei.
3t4reib
4treic
-4treif
+2treif
t3reig
2t3reih
t3rein
@@ -13175,7 +13371,8 @@ t4reu
4tric
5trieb
2trieg
-tri4er
+tri2er
+tri4ers
5trigg
t3rind
4tring
@@ -13189,7 +13386,7 @@ trizi1
3tro.
4trock.
3troe
-3t4roi
+t4roi
tro2ke
4trom.
tro2mi
@@ -13203,7 +13400,7 @@ t3röc
3tröp
3trös
4tröss
-2t3röt
+3tröt
3trua
2truf
4truk
@@ -13220,14 +13417,14 @@ trücker6
t4rüg
try1
2ts
-t4sa4b
+tsa4b
t3s2ac
t2s1a2d
t2s1ah
ts1al
t4s1amt4
t2san
-t4s3ar
+ts3ar
ts1as
t2sau
t2s1äh
@@ -13267,7 +13464,6 @@ ts2ped
t3spek
t2sph
t3s2pi
-ts3ple
ts2pon
t3s2por
t4sprei
@@ -13278,22 +13474,23 @@ t4stag
ts3tak
ts4tal
ts3täti
+t2stea
t2s3tep
t3s4tern
t3s4tero
t2stip
t4stit
-ts3tor
ts3trad
t2s3trä
t4streu
t2stri
+tstro2
t4strop
t2s3trü
ts2tu
t2s1u
1tsub
-t3sy
+t3sy4
4t1t
tt1ab
tta2be
@@ -13345,7 +13542,6 @@ tuba3b
tu2chi
2tud
3tue
-tu2ere
4tuf
tuf2e
tu3fen
@@ -13372,7 +13568,7 @@ tums5tr
3tun.
2t1una
2t1und
-3tune
+3t4une
2t3unf
3tung
t3unga
@@ -13436,7 +13632,6 @@ tz1erl
tz2ers
t3ze2s
tz1ind
-tz1int
t2zor
tz2ö
tz2th
@@ -13447,7 +13642,7 @@ tz1wu
2ua
u1a2b
u3a2c
-uad4r
+uad4
u1al.
ua2lau
u1alb
@@ -13458,6 +13653,7 @@ u1alr
u1als
u1alt
ua2lu
+u1alz
u3am
u1ans
u3ar.
@@ -13478,7 +13674,6 @@ ub2l
ub3lic
u2b3lu
u2bop
-ub1r
ub3rä
u2b3rit
ub2san
@@ -13533,7 +13728,7 @@ ue2ck
u2ed
ue2en
u2eg
-u2ela
+u4ela
ue2le
ueli4
ue2mi
@@ -13548,27 +13743,31 @@ uen2zu
u2ep
ue2r3a
ue2r1ä
-uere2
-ue2rec
+uer6baut
+u2ere2
+u3e2rec
+u3ered
+u3ereh
ue3reig
-u3eremp
-u3erent
+u3erer
ue4rerg
-ue4rerk
+u3erex
uer3g2
-u3erinf
+u3erh
+u4erinn
u3erin4t
+uer4nan
uer2ne
uer4ner
uern3s4t
uer3o
+uer2ö
u3err
uer3sc
uer3t2
u3erum
u3erunf
u3erunt
-u3erur
ue2ta
ue4tek
u3fac
@@ -13591,7 +13790,6 @@ uf2ern
2uff
uff4l
uf2fro
-uffs4
uf3l
u2fob
ufo2r
@@ -13616,6 +13814,7 @@ ug3d2
u2g1ei
u2g1erf
u2g1erl
+ug4es
ugge4st
ug3hu
u2g1l
@@ -13664,6 +13863,7 @@ u1ie
ui1em
u3ig
u4ige
+uil4les
u1in.
u1is.
u3isch.
@@ -13687,7 +13887,7 @@ u1ku
uku2s
uk2ü
u1l
-ul1ab
+ul1ab3
ul1am
ula2s
ul1äm
@@ -13698,9 +13898,10 @@ uld2se
u2l1el
ule4n
ul1erf
-ul1erh
+ul1er2h
ul1erw
ule2sa
+ules3t
ule2t
ul1eta
u2lex
@@ -13712,7 +13913,6 @@ ul3ka
ul2kn
ul2les
ull3s
-ulm3ein
ulo2i
ul1or
ul2p1h
@@ -13720,7 +13920,6 @@ ul2sa
ul4sam
uls2th
2ulta
-ul3th
ul4tri
ult3s
u2lü
@@ -13748,13 +13947,14 @@ u2m1ins
um1ir
1umk
1uml
-4umm
+2umm
umm2a
u2möl
umpf4li
um2pho
um2p3le
1umr
+um4san
3umsat
um4ser
um2sim
@@ -13766,13 +13966,12 @@ u2m1ur
1umz
un1
4un.
-2una.
+4una.
1unab
-un3ac
un4al
u3n2am
u2n3an
-2un2as
+4un2as
un3at
1unda
un4dab
@@ -13796,6 +13995,7 @@ undü4
1undz
u3ne
une2b
+une2d
une2h
un2ei.
un3ein
@@ -13831,6 +14031,7 @@ unks2
unk4tit
unk2t3r
3unku
+unlö2
unna2
un2n3ad
un3n2e
@@ -13848,6 +14049,8 @@ uns4t1r
1unt
un3ta
unte4ri
+2unth
+2unto
un3tr
unt3s
2untu
@@ -13871,6 +14074,7 @@ up2fa
u2pf2e
u2pf1i
u3pi
+up4lu
up2pl
u1pr
upt3a2
@@ -13884,10 +14088,14 @@ u1ra
u2rab
u3raba
ura2be
+ural4t
u2r1a2m
ur3ame
u2r1ana
+uran4fa
+uran4fo
u2r1ang
+uran4ge
ur2anh
u2r1an5s
u2rar
@@ -13912,7 +14120,7 @@ ur2gri
urgros4
urg3s4
uri2c
-ur1im
+u2r1im
ur1ini
ur3ins
ur1int
@@ -13924,9 +14132,10 @@ u3rol
uro1s
u1rö
ur3p
+ur3re
ur3sac
ur2san
-ur2sau
+ur2s3au
ur2ser
urst4r
ur4sw
@@ -13942,7 +14151,7 @@ ur2zi
ur2z1o
ur2z1w
2us
-u4saf
+u2saf
us4ann
u6schent
u5schmu
@@ -13956,8 +14165,8 @@ u2serp
u2s1ese
usi3er.
usi5ers.
+us1is.
us3kl
-u4sko
us3oc
u3soh
u2s1op
@@ -13973,6 +14182,10 @@ u5s4piz
u2spo
us2por
u2spu
+usse4g
+uss5erfa
+usser6kl
+uss5er6su
us2sez
us2sof
ust3abe
@@ -13996,14 +14209,14 @@ u2t1ap
u2t1ar
u2t1är
u3te
-ut1e2d
+u4t1ed
ut1e4ge
ut1ei.
ut1eie
ute2n1
u2tent
uter4er
-u4t3ersa
+u4t3er4sa
ut2es
ut2et
u4tev
@@ -14013,6 +14226,7 @@ ut2he
u2thi
u2t3ho
u2thu
+utli4n
uto1
uto4ber
uto3c
@@ -14065,6 +14279,7 @@ uz3z4
übe3c
übe4n3
über3
+ü4bet
üb3l
üb3r
üb2s3t
@@ -14108,13 +14323,14 @@ uz3z4
ü2h1ei
ü2h1eng
üh1erf
-ü2h1erk
-ü2h1erz
+ü2h1er2k
+ü2h1er2z
üh1i
ühla2
ühl1ac
üh1lam
üh3l2e
+ühl2se
üh3mo
üh3ne
ühn2s
@@ -14140,7 +14356,7 @@ uz3z4
ül2lö
ü1lu
ü2ment
-2ün
+4ün
ü2n1a
ün2da
ün2dr
@@ -14279,7 +14495,7 @@ vi3de
vid3s2t
vie2h3a
vi2el
-vi2er
+vi3en
vie4rec
vie2w1
vig2
@@ -14367,8 +14583,10 @@ walt4st
3walz
wa3na
wandels6
+w3anf
wang4s
1wann
+wan6z5en6d
wa2p
1war2e
ware1i
@@ -14404,6 +14622,7 @@ we2fl
1weg
we2g1a
we2g3l
+we4gn
we2g3r
weg3s4
1weh
@@ -14412,6 +14631,7 @@ wei4bl
2weie
weifel6d
weik4
+3weil
wei3sc
weis4s3p
weis4t
@@ -14447,7 +14667,6 @@ wer2t1a
wer4t3ei
wer6t5erm
wer2to
-1werts
1wese
we2s1p
we4st
@@ -14463,7 +14682,7 @@ wett3s
2w1ey
2w1g
2w3h
-wi3cka
+wi1cka
1wid
wi2e
wie3l
@@ -14472,7 +14691,7 @@ wie2st
wik2
1wil
wim2ma
-wim4m3u
+wim4mu
win4d3e4c
win2dr
win2e
@@ -14531,6 +14750,7 @@ wus3te
wül2
wün3
2w1w
+2w1z
x1a
1xa.
2xa2b
@@ -14558,6 +14778,7 @@ x2en
xen3s2
x2er.
x2ere
+xers2
3xes
2x3eu
2x1f
@@ -14566,6 +14787,7 @@ x2ere
xib4
xi1c
xich2
+2xid
xide2
xi2d1em
x1i2do
@@ -14576,13 +14798,11 @@ xil2a
xi2lo
xi2lu
xin3s2
-x2is1
-xis2c
-xi2se
-xi2so2
+x2i2s1
+xi3s2c
+xiso2
xis3s
xis4tä
-xi2su
x1i2tu
x1j
2x1k2
@@ -14704,7 +14924,7 @@ y4s3l
ysme3
ys2po
ys1pr
-ys3t4
+ys3t2
y1s4ty
y2s1u2
y3s2z
@@ -14736,6 +14956,7 @@ za2na
3z2ank
zan4kl
2z3anl
+zanti1
2zarb
2zarc
2z1arm
@@ -14754,9 +14975,10 @@ zä2
3z2äh
2z1äm
2zängs
+2z1äp
z1ärg
z1ärm
-4z3b4
+4z1b4
zbü1b
zbübe3
2z3c
@@ -14769,6 +14991,7 @@ ze1e
2z1eff
zehe4
zehen1
+zeh2l
zeik4
zei3la
zeile4
@@ -14803,7 +15026,7 @@ zen5s4tr
zent3s
zen4z3er
z2er.
-zer3a
+ze2r3a
ze2re2b
2z1ergä
4z3ergeb
@@ -14834,8 +15057,6 @@ zer6trau
3z2erza
ze2sä
ze3sc
-zes1e
-zes1i
ze3sku
ze2sp
zessen4
@@ -14852,6 +15073,7 @@ ze2tr
zger2a
2z1h
z2hen
+zhir3
zi3alo
zi3ar
zi2dei
@@ -14872,6 +15094,7 @@ zin1it
zin2sa
zin4ser
4zinsuf
+z1int
2z1inv
zi2o3
zi3op
@@ -14879,6 +15102,7 @@ zirk2
zirk6s
zi3s2z
zi1t2h
+zi2t1o2
ziv2
2z1j
2z1k4
@@ -14898,6 +15122,7 @@ zo2ri
zor4ne
2z1osz
2zö2f
+2z1ök
z1öl
2zön
2z3p4
@@ -14921,7 +15146,7 @@ zt3s2
z3tü
zu1
zu3a
-zub4
+zu3b4
3zuc
zu4ch
zu3cke
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.hyp
index 081342a1dfc..081342a1dfc 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.pat
index 3c5cd329fb2..ef5ac5c4d5f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.pat
@@ -17,6 +17,7 @@
.ai2s
.akt2a
.al2e
+.al3k
.al5l4en
.al4tei
.alt3s
@@ -29,19 +30,20 @@
.an3gli
.ang4s2
.angst3
-.an3s
+.an3s2
.an4si.
-.ans2p
.an4tag
.an3th
.an3z2
.aos4
+.ap5p6le.
.aps2
.ari1e
.ark2a
.ar4m3ac
.ar2sc
.ar4t3ei
+.arter4
.ar6t5erh
.as6sest
.as2t
@@ -69,9 +71,10 @@
.boge2
.bo4s3k
.bu4ser
-.bus5sen
-.bu7sser.
+.bus3se
+.bu7s8ser.
.ch2
+.chi3er
.dab4
.da2r1
.da4rin
@@ -81,6 +84,7 @@
.de2al
.de1i
.de4in.
+.de8ments
.de1o2
.de3r4en
.derma3
@@ -93,14 +97,15 @@
.dü1b
.ebe2r1
.ehe1i
+.ei4ds
.ei3e2
.ei4na
-.einbus6
.einen6g
.ei2sp
.ei4s1t
.ei2tr
.eke2
+.el2a
.el2bi
.em3m2
.en1
@@ -118,6 +123,7 @@
.er4dan
.er4dar
.er4dei
+.erden6k
.er4der
.er1e
.ere3c
@@ -145,6 +151,7 @@
.fe4i
.fer4no
.fe4sta
+.fid2
.fi4le.
.fi4len
.fi2s
@@ -170,20 +177,25 @@
.hal2s
.hau2t1
.he2
+.he3fe
.her3an
.he3ri
.he6r5inn
+.hi4n
+.hin3u
.ho4met
.ia2
.il3
.im2a
.ima4ge
-.im5m
+.im5m2
.in1
.in3e
+.in3gl
.ink4
.inn2e
.inu1
+.ioni1
.ire3
.is2a
.ka2b5l
@@ -217,6 +229,7 @@
.men8schw
.men3t4
.mi2t
+.mi4ti
.mm2
.näs5c
.ni2e
@@ -229,7 +242,6 @@
.ob1a
.obe2
.ohr5s
-.om2a
.oper4
.or2a
.ort2
@@ -245,7 +257,7 @@
.öl3l
.pa4r1e
.par3t4h
-.pe4c
+.pe2c
.pe4ste
.pf4
.ph2
@@ -266,15 +278,18 @@
.ro4a
.ro3m4a
.rö2s1c
+.rö4ss
+.rös3se
+.runder6
.ru5s6ses
.rü1b
.rücker6
.rü4ss
.sali1
+.sami3
.sas2
-.sa5sse
+.sa3sse
.säs4
-.sä5ss
.sch4
.scho7s8se.
.scho7s8ses.
@@ -299,6 +314,7 @@
.th4
.ti2a
.tid1
+.ti2e
.ti4me.
.ti4mes
.ti2s
@@ -312,15 +328,16 @@
.tu3ri
.uf2e2
.ufer1
-.ul4mei
.um3
.umo2
+.ums2
.un3a2
.un3d
.une4
.un3g
.uni2t
.ur1
+.ural4
.ur2i
.urin4s
.ur3o2m
@@ -330,11 +347,13 @@
.ut3r
.übe4
.ve5n2e
+.vi2e
.vo4r
.wah4l
.wa2s
.weg5s
-.wei4ta
+.welter8e
+.welter8k
.wi4e
.wor2
.wort5en6
@@ -355,7 +374,7 @@ aa2gr
2a2ar
aa2r1a
aar3f4
-aar3k
+aar3k4
aar5sc
aas1t
aa2th
@@ -372,7 +391,7 @@ ab2äu
ab1eb
abe1e
ab1eil
-2abel
+4abel
abe2la
a3beri
ab1er2k
@@ -388,7 +407,6 @@ ab1eß
1abg
1abh
2abi
-a3bil
ab1ins
ab1ir
ab1it
@@ -422,7 +440,7 @@ abs4t2
2abst.
ab3sz
1abtei
-2abu
+2a3bu
ab1ur
2abü
1abw
@@ -466,7 +484,7 @@ a1chu
ach1u2f
ach3ü
2achv
-4ach1w
+2ach1w
a1ci
ac1in
2ack.
@@ -522,13 +540,16 @@ adta2
2adu
2a1e1
ae2b
-ae2d
-ae2i
+a3e2d
+a3e2i
a2ek
+a3el.
a2ela
a2ele
+a2eli
+a3els
ae2o3
-ae2p
+a3e2p
3a2er2o
ae4sc
a2et
@@ -539,7 +560,7 @@ a2fak
a2fan
a3far
af4at
-a2fau
+a2fau4
2afe
a2f1ec
a2fent
@@ -568,7 +589,7 @@ af2tur
a2f3ur
a1g
2aga
-ag1ab
+ag1a2b
ag1a2d
ag1am
ag1ar
@@ -598,6 +619,7 @@ ag3gl
ag4la
a4glö
ag2n
+a2gna
ag4ne.
ag4nu
a2g3re
@@ -639,7 +661,6 @@ ahre4s3
ah3ri
ahrta4
ahr4tri
-2ahs
ah2ta
aht3h
ah2t5r
@@ -647,6 +668,7 @@ aht1s
a1hu
ah1w
a1hy
+2ai
ai3a4
aian3
aid4s
@@ -657,15 +679,15 @@ ai1fr
ai3g4
a3ik.
ai3ke
-ai3k4r
+aik4r
ai2lo
aim2o
-ain4a
+ain2a
a1ind
ain4e
a1ing
ain3sp
-2ais
+3airb
ai2sa
a3isch.
ai3s2e
@@ -717,7 +739,7 @@ a2kun
a1la
2a5la.
al1ab
-ala5ch2
+ala3ch2
al1af
ala2g
al1age
@@ -744,7 +766,7 @@ a1lä
al1äm
alb3ein
al4berh
-al4b3erw
+al4b3er4w
al2b1l
alb3li
al2boh
@@ -828,7 +850,6 @@ al4m3ast
a2l1o2b
3a2loe
alo2ga
-al1ope
al1orc
a2l1ö
al3öf
@@ -836,12 +857,13 @@ al2ös
3alpe.
1alph
al3skl
+als2to
al2sum
al3sun
al4tak
al3tar
alt3eig
-al4t3erf
+al4t3er3f
alt1op
al2tö
al2tri
@@ -875,10 +897,7 @@ ame3ru
a4mesh
a3met
a2mew
-a3mi.
-a3mie
-2a3mir
-a3mis
+2amir
ami3t2a
ami3ti
2aml
@@ -899,8 +918,8 @@ am2mit
am4mod
2ammt
ammu2
-amm3unt
am4mü
+amni1
a2mö
amp2fa2
am3pr
@@ -925,7 +944,8 @@ ana4lin
2anam
2anan
2anas
-an4at
+an1ath
+an4atm
an1äs
1anb
2anbu
@@ -1013,12 +1033,10 @@ a3nos
1ansc
ans2en
an2seu
-2ansh
2ansk
an3skr
an3s1pa
1anspr
-ans2te
an3s2z
2ant.
an2t3a4r
@@ -1034,12 +1052,13 @@ ant3rin
an2tro
1antw
2a1nu
-anu3s
+anu1s
a1nü
1anw
2anwet
2anzb
1anzei
+anze2n
2anzg
an2z1i4n
2anzs
@@ -1060,6 +1079,7 @@ a1p
2a3pa
2ape
a2pef
+a3pel
a2pé
a2pf
ap2fa
@@ -1114,13 +1134,11 @@ ar2dro
a2rea
ar1eff
a4reg
-a2reh
ar1ehr
a2rein
4arem
a3ren
4aren.
-aren4se
are3r2a
ar2erf
a2r1erh
@@ -1149,8 +1167,8 @@ ar2kal
ark3amt
ar2k1ar
ark3aue
-ar2kl
-ar4k3lag
+ar2k3l
+ar4klag
ar2kor
ar4k3ri
ark3sa
@@ -1164,6 +1182,7 @@ arn2e
2a1ro
ar1ob
a2r1o2d
+a2r1of
a2r1op
a2ror
2arp
@@ -1214,6 +1233,7 @@ a4seb
as3e2m
a5s4es
a4sex
+2asg
4ash
a4s3ha
as4hi
@@ -1228,6 +1248,7 @@ as1o2f
a3sol
as1or
as1p
+aspek6to
a4s2ph
as2pi
a4spl
@@ -1259,6 +1280,7 @@ a2s2t3re
a4strol
a2stum
a3su
+asu2s
a4sw
aswa2s
3a2syl
@@ -1274,9 +1296,11 @@ a3tam
at1apf
at1au
a2taus
-a2t1ä
+a2tä
+at1än
at2c
a2teb
+ate1c
ateien4
at1eig
a4teli
@@ -1286,8 +1310,9 @@ ate2ru
atex3
at2h
at3ha
-4athe1
+athe1
3athl
+a4thr
4a3ti
atingma5
3atm
@@ -1325,7 +1350,8 @@ atu2n
atz1er
at4zerk
at4zerw
-at2z1i
+at2zi
+atz1in
at2zo
atz3t2
at2z1w
@@ -1345,6 +1371,7 @@ aue2b
au3en.
au2ere
au5erein
+auer3ö
au2fa
auf1an
3aufber
@@ -1375,7 +1402,7 @@ au2m1o
aum3p2
aum3s2
4aun
-au3n4a
+au3n2a
aun2e
au4nei
au2nio
@@ -1399,11 +1426,11 @@ au4s3erw
au2so
au2spr
1ausr
-auss2
-3aussag
+1auss2
au3sse
aus4se.
au8ssende
+aus4ser
au2sta
2auste
au4stec
@@ -1418,6 +1445,7 @@ au2t1äu
au4ten4g
au4t3erh
1auto
+au2trö
2auts
2auu
2auw
@@ -1428,7 +1456,7 @@ auz2w
2a1v
a3v4a
ava3t4
-4a3vi
+a3vi
a2vr
av2s
2a1w
@@ -1444,6 +1472,7 @@ aysi1
ay3t
2a1z
a3z2a3
+az2i
az2o
az2u
ä1a
@@ -1473,6 +1502,7 @@ az2u
äf2f3l
äf3l
äf3r
+äf4ro
äf2s
äft2
äft4s
@@ -1504,6 +1534,7 @@ az2u
2äh3t
ä1hu
äh1w
+2äi
ä1im
ä1is.
ä3isch.
@@ -1524,6 +1555,7 @@ az2u
2äml
äm2ma4
ämmas2
+ämoni3e
2ämp
äm2s
ämt2e
@@ -1569,7 +1601,7 @@ az2u
är2k3l
är4ment
ärme3s
-är1o2
+är1o
ä1rö
ärse2
är2seb
@@ -1579,22 +1611,20 @@ az2u
ärt4s1
ä2rü
är2zw
-ä3s
+ä1s
äs4c
-äs4e
+ä3s4e
äse3g2
äser4ei
äse4ren
äser2i
äse3t
ä5si
-ä4sko
äskop2
äskopf3
-äs2kr
-ä4sl
-ä4s1p
-äs2s
+ä3s2kr
+ä2s1p
+ä3s2s
äs4s1c
äss2e
äss3erk
@@ -1602,8 +1632,7 @@ az2u
äs4s1t
äst2
äs2te
-ä4str
-ä4sw
+ä2str
ä1ß
äß1erk
ä2t1a2
@@ -1643,10 +1672,10 @@ az2u
2äum
äu2ma
äum2s1
-ä2un
+2ä2un
äun2e
äu1nu
-2äur
+2äu3r
äu1s
2ä3us.
äu4schä
@@ -1655,7 +1684,7 @@ az2u
ä3usg
ä3usk
ä3usn
-äu2sp
+äu2s1p
äu3s2s
äuss1c
1äuß
@@ -1730,10 +1759,12 @@ bbe4p
b4be2se
bb3ler
bb2lö
+b3bru
bbru2c
bb2s
bbu1
2b1c
+bch2
2b3d4
1be.
3bea
@@ -1815,11 +1846,11 @@ be4r3eiw
be4rerk
bere4s
ber6gan.
+ber4hab
ber4in.
ber3iss
+bermas4
berma7sse
-bermas8se.
-berma8ssen
ber3na
b1ernt
be1rop
@@ -1829,13 +1860,13 @@ be3rum
ber2zö
3bes
bes2a
-besä5s
be2s1er
be5slo
bes2po
bess4e
b3esst.
bes3sz
+beste2
be6stein
be4s3tol
be4stor
@@ -1858,19 +1889,21 @@ bgas1
bga4st
bge3
bges2
-2b5h2
+2b1h2
bhut2
1bi
bi3ak
bib2
bibe2
bie4str
+3bietu
bik2a
bi2ke.
bi2kes
+3bil
bil2a
bi2lau
-2b1illu
+4b1illu
bi2lu
2b1inb
bin2e
@@ -1978,7 +2011,6 @@ bo4s3p
bote3n4e
bo3th
bot2st
-bo2xi
bö2b3
2böf
b1öl
@@ -2008,7 +2040,6 @@ b3rek
b4rer
2b3riem
bri2er
-2brig
b4rio
bro1
b3roh
@@ -2022,7 +2053,6 @@ bru2th
brü4ss
4b1s
b2sad
-b3sand
bs3ar
bsas2
bsa3sse
@@ -2089,12 +2119,13 @@ bu3ches
bu2chi
bu2e3
bu2f
+bug3
2b3umk
bunde4s
b3ungn
b2urg
bu3r4i
-2burn
+4burn
burt4s
bu2sa
bu4s3cha
@@ -2102,12 +2133,13 @@ bu4schl
bu4sch3m
bu4schw
bus1er
-bu2sin
+bu2si
bu2s1p
-bu4sses
+bu4s3ses
bu6s5term
bu2s1tr
bu2s1u
+bu3tan
bü1c
bügel3e
bü3s4
@@ -2136,7 +2168,7 @@ ca3s2a3
cas2t
ca3t4h
ca1y2
-cä1
+cä3
cäs2
2cc
c1ce
@@ -2145,6 +2177,7 @@ c2d2
c3do
2cec
ceco4
+1ced
ce2dr
2cef
ce1i
@@ -2187,7 +2220,7 @@ ch3e4ben
3chef.
che4fer
3chefs
-4chei
+2chei
ch1eim
4chelem
che4ler
@@ -2222,6 +2255,7 @@ ch2lu
4ch2m
2chn4
chner8ei.
+ch2neu
2chob
cho2f
ch1off
@@ -2263,7 +2297,7 @@ cke2ra
ck2ere
ck1erh
ck2ern
-ck1err
+ck1er2r
ck1ese
ck1id
ck1im
@@ -2375,12 +2409,13 @@ d2aph
4dapp
da2r3a
2darb2
+dark4
3d2arl
dar2ma
dar2m1i
da2ro
d3arr
-d2ars
+3d2ars
d1art
2dart.
da2ru
@@ -2410,7 +2445,7 @@ d3aug
dä3us
2d1b4
dbu2c
-dbu3s2
+dbu3s
2dc
d1ch
dco4r
@@ -2422,8 +2457,8 @@ d5do
1de
de2ad
de3a2t
-de3b4
-2d1e4ben
+3deb4
+4d1e2ben
3dec
de1ch
de3e4
@@ -2431,6 +2466,7 @@ de3e4
deg2
de3gl
dehe2
+de3ho
2d1ehr
d1ei
3d2eic
@@ -2445,6 +2481,7 @@ del1ec
delei4g
2d1elek
2delem
+deler4
2delfm
del4lan
dell3eb
@@ -2460,10 +2497,13 @@ del2so
del2s1p
del3t4
dem2ar
+dement4
+de6mentg
2d1emp
d2en.
de4n3end
4denerg
+4d3en4ge.
d2enh
de2ni
den4k3li
@@ -2490,9 +2530,11 @@ de3r4erb
de3r4erf
de4r3ero
derer4t
+derer6ze
d4erfi
d2erh
4der4höh
+d4erhü
3derie
derin4f
4derklä
@@ -2524,6 +2566,7 @@ des1in
des1o
de2sor
de2s1p
+de3spe
des5s2
dest5alt
de4stam
@@ -2539,6 +2582,7 @@ deten4t
de1un
de1url
de3us
+devil4
d1exi
de2xis
2dexp
@@ -2553,8 +2597,10 @@ d2his
di4ab
di2ad
di4am
+di4ath
3dic
di1ce
+dich1
dich5ter
di2e
di3e2d
@@ -2562,6 +2608,7 @@ di3end
die4neb
di3eni
di3ens.
+di3ern
die4s3c
diet3
die2th
@@ -2569,6 +2616,7 @@ dige4s
dik2a
dil2s3
2d1imb
+2d1imp
din2a
2d1ind
2d1inf
@@ -2584,10 +2632,13 @@ di4re.
di2ren
di2ris
2d1irl
+di4s1a2
di2sp
di3s4per
2d1isr
dist2
+di2s1to
+di4s3tra
di2ta
di4teng
di4t3erl
@@ -2634,8 +2685,7 @@ dor2fä
dor2fl
dor2fr
2d1org
-do2rie
-d2orp
+dori1
2dort
dor2ta
dor4ter
@@ -2644,6 +2694,7 @@ dos3s
dost1
do4sta
dot6h
+do2t1o
do3un
d1ö
dö2d
@@ -2692,9 +2743,8 @@ d3ri
d4rid
d4rif
d4rik
-d4ril
d4rin.
-3d4risc
+d4risc
2driß
3d4rit
4dritu
@@ -2702,7 +2752,6 @@ d3rob
d3roc
2d3rod
d4roi
-drom2
2d3rose
2d3rost
2d3rot
@@ -2714,10 +2763,13 @@ d5rub
3d4ruc
2d3rud
2d3ruh
+2d3rui
+4drund
drunge3
2d5rut
drü1b
2d1s
+4ds.
d4s1amt
d2san
ds3assi
@@ -2728,6 +2780,7 @@ d4schef
d4schin
d2s1e2b
d2s1ef
+ds1ehr
d3sei
ds2eig
d4seins
@@ -2755,6 +2808,7 @@ d2sö
d2s1par
ds1pa4s
d2spä
+ds2pe
ds2po
d3spri
d2spro
@@ -2827,7 +2881,7 @@ du4schw
3düf
3dün
2d1v2
-2d1w
+4d1w
dwa2
dwest1
dy1
@@ -2847,6 +2901,7 @@ eakt2
e3akto
ea2la
e3alei
+ealer2
e4aler.
eal5le
eal3lö
@@ -2920,10 +2975,9 @@ ebu2t1
2eca
e1ce
ech1ä
-2e3che
+2e1che
ech1ei
e6ch5erzi
-e1chi
ech3l
ech3m
ech3n
@@ -2948,7 +3002,6 @@ e3d2a
ed2dr
ed2e
ede2al
-e3dei
ede3n2e
eden4se
eden4s3p
@@ -2956,10 +3009,12 @@ ede2r
edert2
edi4al
2edip
-edma3s2
+edma3
+edmas2
e3d2o
ed2ö
eds2ä
+ed4seh
ed2s1es
ed2s1o
ed2s1p
@@ -3002,7 +3057,6 @@ e1erd
ee3r2e
ee4r3en4g
eere4s1
-ee4ret
ee1ro
ee1rö
eer2ös
@@ -3015,7 +3069,6 @@ ee3sh
ees3k
ee3ta
ee4tat
-ee2th
ee1u
eeu2f
eewa4r
@@ -3035,11 +3088,12 @@ e3fe.
e2f1e2b
efell4
ef1em
-e3fen.
e2fent
ef2er
+efeuil4
2eff.
ef2fä2
+3effek
1effi
ef2fl
2efi
@@ -3076,9 +3130,11 @@ ege1u
e2glo
e2glu
e2gn
+eg3nä
eg3ni
egro5sse
eg4sal
+eg4san
eg3se
eg4sei
egs3e4r1
@@ -3107,7 +3163,6 @@ eh1int
ehis4
eh1lam
eh1lä
-eh3le
ehl3ein
eh4lent
eh5l2er
@@ -3136,6 +3191,7 @@ eh3si
eh3so
eh3sp
eh3sta
+2eht
e1hu
e2hunt
e1hü
@@ -3153,7 +3209,7 @@ e2id
ei2d1a
ei3de
eid4ein
-ei4d3err
+ei4d3er4r
2eidn
ei3dra
ei1e
@@ -3193,7 +3249,7 @@ eim3all
ei2mor
e1imp
eim2pl
-ei2n1a
+e4i2n1a
ein3a2d
ei4nas
ei4nä
@@ -3240,13 +3296,14 @@ ei3s2s
ei2str
eistra6s
ei2sum
-e2it
+e4it
ei2tab
-ei2tan
+ei2t1an
ei2tar
2eitä
ei3te
ei2th
+ei2tor
ei2tro
eitt4
eit3um
@@ -3268,7 +3325,7 @@ ek2o
ekt4ant
ekt3erf
ekt3erg
-ek4t3erz
+ek4t3er4z
ekt2o
ek2u
e3k2w
@@ -3302,6 +3359,7 @@ elder4p
eld5erst
el3des
eld3s2
+e3lea
2elei
e6l5ei6er.
e6l5ei6ern
@@ -3342,11 +3400,9 @@ elg2a
elgi5er.
elgi5ers
elg4r
-2eli
e2l1id
e3lie
e2lim
-eli2ne
el1ita
2elk
elks2
@@ -3374,12 +3430,15 @@ el5na
e2lof
e2lol
elon2
-el1ope
e2l1or
elo2ri
el2sum
elt2ak
+el3te.
+el5ten.
+elter4b
3eltern
+elter4s
el3tes
elto2
elt3r
@@ -3387,7 +3446,6 @@ elt1s2
elt3se
elt3sk
2e1lu
-e2l1um
el1ur
el3use
e1lü
@@ -3401,35 +3459,35 @@ e1m
em1ad
ema2k
e2m3anf
-e2mans
+e2m1ans
3emanz
emas8sens
em4d3a2
e3m2en
+emen6gel
emen4t3h
-e6mentsp
e2m1erw
1e2meti
e2m1im
-emi5n2a
+emi5na
em1int
emi3ti
2emm
em2map
emma3u
e2mop
-3empf4
+1empf4
em3pfl
em2sa
em3se
em2spr
em3t2
-3emul
+1emul
2emü
emü3s4
e2n1a
4ena.
-2enac
+2en2ac
en3ack
e3nad
e4naf
@@ -3514,6 +3572,7 @@ eni5ers.
e2n1i4m
e2n1in
e3nio
+eni2ö
e3nit
en3k2ü
e2n1o2b
@@ -3557,6 +3616,7 @@ en3tes
1entf
2entfo
1entga
+3entgeg
en2thi
3entla
1entn
@@ -3580,7 +3640,7 @@ e1o2b1
e1of
eo2fe
e1oh
-e4ol
+eo3m
e1on.
e1ond
e1onf
@@ -3598,11 +3658,11 @@ e3ors
e3orw
eos2
e3os.
+eota2
eo3ul
e1ov
e1ö2
e1p
-e3pa
epa2g
e3p2f4
e2pis
@@ -3626,11 +3686,11 @@ era2be
e3rad.
er3adm
eraf4a
-era1fr
era2g
e1rai
er3aic
e2rak
+e1ral
er3all
eran3d
e3rane
@@ -3661,7 +3721,6 @@ er1äh
er1äm
e2r1ä4s
erb2e
-er3br
erb2sp
er1c
er3chl
@@ -3670,6 +3729,7 @@ erda3me
er3de
2erdec
erde3in
+er4d3en4g
erd3erw
4ere.
er1eb
@@ -3679,14 +3739,16 @@ er1eck
er1edi
ere4dit
er1eff
-e2r1e2h
+er1e2h
2e3rei.
er1eig
e2rein
e4r3eis.
ere2l
er1ele
-2e3r2em
+ere3lev
+2e3rem
+e2remp
2eren
e3ren.
e3rena
@@ -3699,7 +3761,6 @@ er1ep
2erer.
e2r3erf
e2r1erh
-e4rerl
2erern
e3rero
er1err
@@ -3709,12 +3770,11 @@ er1erw
2eres
er1ess
er1eß
-ere4t
-er3eti
+e4r3e4ti
er1eul
ere4vid
erf2e
-erf4r
+er3f4r
4erfür
3ergebn
4ergehä
@@ -3727,7 +3787,7 @@ e2rh
er3he
4erhöhe
er3hu
-4erhü
+2erhü
2eri
e2riat
e3rib
@@ -3770,21 +3830,24 @@ e1rol
e1rom
e3ron
er3ony
-er1o2p
+er1op
e4ro2r
e1ros
e1rou
e1row
+er1ox
e1roz
erö2d
2erök
er1ös
er3p4
er3rä
+er5rei
erri3er
2errü
ers2a
ersch2
+er5schn
er3se
er5sen
er3s2i
@@ -3798,9 +3861,9 @@ er3sz
ert2ak
er6terei
er4t3erf
-er4terh
+er4ter4h
er4ters
-er2tho
+er2t3ho
4erti
ert3ins
ert3s2e
@@ -3819,31 +3882,35 @@ e3sac
esa2d
es2an
es4and
+es4ank
es3ant
e3s2as
esa3sse
esas6sen
+esa6sset
e4s3ato
+es3av
esäs4
es2äu
2esb
+esbi5er.
e3sc
es2ca
es3cap
es2ce
-esch2
+esch2l
+esch2n
e4sco
e4scu
e3se.
es1ebe
-es3ehr
+es1ehr
e2sein
es3eva
2esf
4esh
es3ha
es4har
-esi1er
e3sig
e2s1il
es1ini
@@ -3856,15 +3923,17 @@ e4s3l
es4log
2esm
e4sn
+eso2r
es2ort
es2ö
2esp
-e3s2pek
+es2pek
e3spi
e3s2por
e3s4pra
e3s2pu
2esr
+essali3
es2sau
4essem
ess4e3re
@@ -3882,6 +3951,7 @@ e4starb
1e2stas
es2tau
es2te
+este2c
e4st3eng
e4st3erh
e4st3ess
@@ -3907,11 +3977,12 @@ etab4
etal4la4
etal6li6n
et1am
+eta2mi
1etap
etari1
et4at
et1äh
-e3te
+2e3te
e4t1ein
ete3ke
et2en
@@ -3921,6 +3992,7 @@ eter4hö
eter4tr
et2h
et3hal
+ethi1
et3hü
e3ti
eti2m
@@ -3932,7 +4004,7 @@ e2torg
2etr
e4traum
et3rec
-e2tres
+e4tres
etsch3w
et1s2p
et1su
@@ -3964,13 +4036,14 @@ eu1a2
eu3b4
euen2g
eue6reif
+euer4ri
eu2e5sc
2euf
+eu2fer
eu2ga
eu4gent
eu3g2er
eug1s2
-euil4
eu1in
1euk
eu2kä
@@ -3992,7 +4065,9 @@ eu1o2
eu1p2
e2u3r2e
1euro
+eu2rys
eu1s4
+eu4sis
eu3sp
eu3ss
eust4
@@ -4046,7 +4121,6 @@ ez2w
é1b
é1c
é1g
-égi2
é1h
é1l
élu2
@@ -4176,6 +4250,7 @@ fens2c
fens2t2
fen6stri
f1ent
+3fep
f2er.
fe1ra
fer2an
@@ -4198,6 +4273,7 @@ f2ers.
fers2t
f2ert
f1erw
+fer8zeuge
fes4t
fe2st1a
fe4st3ei
@@ -4236,6 +4312,7 @@ f2fetz
f2fex
f2fil
ffi2xi
+ff3lag
ff3li
f3flu
f3flü
@@ -4244,7 +4321,7 @@ f2fö
f3f4rä
ff2sa
ff2sp
-ffs1ta
+ffs3tan
4f3g2
fge3s
2f1h2
@@ -4272,8 +4349,10 @@ fi2o
fi3ol
fi2r
fi3ra
+fi4re
3fis
fis4a
+fisch3a
fisch3o
fisch3w
fi3so
@@ -4287,7 +4366,7 @@ fi3tu
f2l2
2fl.
f3lad
-f5land
+f5lan3d
f3lap
1flä
3f4läc
@@ -4309,7 +4388,6 @@ f3lö
4f5löf
1f4lug
flu4ger
-flus3se
f4lü
f5lüd
f5lüm
@@ -4336,12 +4414,13 @@ for4m3a4g
forni7er.
for4sta
for4sti
-for4t3ei
+fort3
+for4tei
for2th
-for2t3r
+for2t1r
fort1s
for3tu
-2f1o2x
+f1o2x
1fö
2fö2f
2f1ök
@@ -4352,7 +4431,6 @@ f2r2
f4rac
frach6tr
2f5rad
-f1rah
fra4m
f3rand
f5rap
@@ -4363,7 +4441,7 @@ f3red
2freg
f3reic
freik2
-frein4
+frein2
f3rep
3f4reu
2f3ric
@@ -4394,7 +4472,7 @@ f4sce
f4schan
f4schef
f2s1e2b
-f4s3ehr
+f4sehr
f2s1em
f2s1ent
f2s1er
@@ -4460,8 +4538,7 @@ ft4sam
fts2c
ft4sche
ft2se4
-ft4s3eh
-fts3el
+ft4seh
ft2si
ft4stä
ft4ster
@@ -4533,6 +4610,7 @@ gan2gr
2ganl
g3anla
3g2ano
+gans2
2ganw
ga1ny
3gar.
@@ -4635,7 +4713,6 @@ gels2p
gels2t
gel3sz
gel3t2a
-ge3lum
ge3lü
gelz2
gem2
@@ -4643,6 +4720,7 @@ gem4e
ge3mi
3gen
ge3na
+ge4n3ac
ge4nam
ge4nar
gen2as
@@ -4653,6 +4731,7 @@ ge3nec
gen3eid
gen3ern
gen6erwe
+gener4z
genma7sse.
gen3n
gen3sz
@@ -4721,13 +4800,14 @@ gi2el
gien2e1
gift5s
gi2gu
-gi2me.
+gi2m
gi4mes
-gi2met
2g1ind
gi3ne
+g1inf
gin2ga
2g1ins
+2giok
2g3isel
gi3t2a
gi4us
@@ -4798,9 +4878,8 @@ g1n
2gn.
g2n2a
g4na.
-2gnac
4gnah
-g4nat
+3g4nat
3g2nä
gn2e
g3neh
@@ -4891,6 +4970,7 @@ gro4u
g4ruf
2g3rui
2g3rum
+grun2g
3g4rup
grus2s
gru3sse
@@ -4917,15 +4997,17 @@ g4sca
g4sce
gsch4
g4schef
+g5schü
gs3cr
g2s1e2
gse3e
+gs2eh
g3s2eil
g3sel.
-gs3eli
g3seln
gsen1
g4ser
+gser5f
g4seu
g2s1i
gsi2d
@@ -4955,6 +5037,7 @@ g3sti
gs1tis
g3sto
g4ston
+gs1top
g4s1tor
gs1tot
gst4ra
@@ -5005,7 +5088,6 @@ gu3sti
gu2ß1
gu2t
gut1a
-gu4ted
gu4t3erh
gut3h
2güb
@@ -5017,6 +5099,7 @@ gü3st
3haa
hab2a
hab2e
+2habn
ha2cho
ha2del
ha4din
@@ -5025,6 +5108,9 @@ haf3f4l
haft2s
hafts3p
h1ah
+h2ahs
+ha3ia
+h2aj
2haka
ha1kl
2h2al.
@@ -5053,10 +5139,11 @@ hao2s
h1ap
ha2pl
ha2pr
-h4a3ra
+h2a3ra
2harb
h2ard
h1arm.
+har3ma
har4me.
har4mes
har2th
@@ -5070,6 +5157,7 @@ hau5f6lie
2h1aufm
h1aukt
hau2sa
+hau4san
hau2sc
hau4spa
hau4ss
@@ -5087,7 +5175,7 @@ hä5sc
hä6s5chen
häu2s1c
hä3usp
-2h3b2
+2h1b2
hba2r3a
2h1c
2h3d4
@@ -5099,8 +5187,8 @@ he3be
he4b1ei
he2bl
he3br
-he5ch2e
-he1cho
+he1ch
+he3ch2e
h3echt
hed2g
he3di
@@ -5132,7 +5220,7 @@ he1ism
he1i4st
heit4s1
h1eiw
-he2l3au
+he2l3a
hel1ec
h3e2lek
he3len
@@ -5166,11 +5254,16 @@ hen3z
4he2o
he3on
he3op
+he3pa
he3ph
+h2er.
her3a2b
+he2ral
2herap
he3ras
herau2
+herb1r
+her4b3ra
he4reck
4hereig
he4r3eis
@@ -5179,6 +5272,7 @@ he4rerw
h1er2fo
h3erfü
herg2
+her2ho
4herif
herin4f
he6rin6nu
@@ -5202,11 +5296,12 @@ het2i
he3t4s
h2e2u
heu3g
+3heusc
he3x
he1x2a
he1y2
1hè
-2h3f4
+2h1f4
hfell1
hfel6ler
hfi2s
@@ -5218,6 +5313,7 @@ hhoh2
2hia
hi2ac
hi2ang
+h2ias
hi1ce
hich6ter
2hi3d
@@ -5255,6 +5351,7 @@ hi3ri
hirn1
hir4ner
hi3ro
+hir2s
his2a
hi2se
hi2spa
@@ -5307,7 +5404,7 @@ h3list
h2lit
hl3l
hlle3b
-hlma3s
+hlma3s2
h2lo
h3loc
hl1of
@@ -5355,6 +5452,7 @@ h3mö
hm3p4
hm2s1p
h2mu
+h3mul
h3musc
h3musi
2hn
@@ -5408,12 +5506,9 @@ ho4fa
hof3fa
ho2f3r
2hoi
-hol1au
-4holdy
3hole
ho2l1ei
hol3g4
-4holo
ho4lor
3hols
h1o2ly
@@ -5426,11 +5521,13 @@ h2on
hond4
hono3
2hoo
+2hop
ho1ra
hor3d
2h1org
+ho3se
+ho4sei
ho3sl
-ho2sp
ho4sta
ho2str
2hot.
@@ -5444,6 +5541,7 @@ ho1y2
hô1
1h2ö
hö2c
+3höhe
h4ör
hö4s
hös1c
@@ -5469,14 +5567,13 @@ hrei4ba
h3reic
h4r1eig
h3rel
-h3r2en
+h3ren
h3rep
hr4erbe
hr4erbu
hr2erg
hr2erk
h4rer4la
-h5rerlag
h3rerle
h6rer6leb
hr6erlei
@@ -5493,7 +5590,6 @@ h4rick
hri4e
h3riesl
h3rin
-h4rine
h4rinh
hr1ins
h4rist
@@ -5510,7 +5606,7 @@ h2ror
h3rou
hrr4
hr2s1ac
-hr2s3an
+hr4s3an
hr2sau
hr3sch
hr2s1en
@@ -5522,7 +5618,7 @@ hr2s1of
hr4stec
hr2su
hr4sw
-hr2tab
+hr2t5ab
hr2tan
hr2th
hr2tor
@@ -5535,7 +5631,7 @@ h3ruh
hr1ums
h3rü
h4rüb
-h2ry
+h4ry
hrz2
4h1s
h4s3acht
@@ -5555,6 +5651,7 @@ h2s1ing
h2s1o2f
h2spac
h2s1par
+hs2pen
h2sper
h2sph
hs2por
@@ -5563,7 +5660,7 @@ h2spro
hss2
h2staf
hst3alt
-h3st2an
+hst2an
h4starb
h2stau
h2stäl
@@ -5617,27 +5714,23 @@ ht1ein
h2t1eis
h2t1eke
h4t3elit
-htelma4
-htelmas5
h2temp
-h3ten
h4tentf
h4t3ents
hter6de.
ht3erfü
ht3ergr
-h2t1erh
+h2t1er2h
ht5erken
h4terkl
h6t5erleu
-h4t3erre
+h4t3er4re
h6t5er6spa
h4t3er4st
ht6erste
h2t1erz
h2t1ese
h2t1ess
-h3tet
h2t1eu
h2t1ex
h2th
@@ -5672,7 +5765,7 @@ ht3rös
h2t3ru
h2t3rü
h4ts
-hts3an
+ht4s3an
ht4s3end
ht4spin
ht3spri
@@ -5705,14 +5798,13 @@ hu2let
hu2l1in
hul3l
hu2lo
-hu3ma
+hu3m2a
h1ums
hu2n
h1una
hu3ni1
-h1up.
h1ups
-2hur
+2h2ur
hurg2
hu3sa
hu2so
@@ -5738,6 +5830,7 @@ h2wall
hwe1c
h1weib
h1weih
+h2wirr
3hyg
hyl4
3hyp
@@ -5797,7 +5890,6 @@ ia3pf
ia1q
i3ar.
ia2ra
-2ias
i2asc
ia3sh
i2asi
@@ -5823,6 +5915,7 @@ i1ät.
i1äta
i1ät3s4
2i1b
+ib1art
i2b1auf
ib3be
ib2bli
@@ -5869,27 +5962,24 @@ i1chu
ich1w
i1ci
icks2
-ick3sa
i1cl
i1d
id2ab4
i3d2ac
i3dam
-id2an
-i2d1au
+id1au
+idbu4
1i2dee
idein3
i4deis
idel2ä
-ide3sa
ide3so
-ide3sp
1i2dio
idni3
i2dol
1idol.
2i2dr
-i3d2sc
+i3dsc
id2s1p
idt4
1i2dy
@@ -5897,6 +5987,7 @@ ie3a4
ie2bä
ie2bl
ie2bre
+ie2bri
ieb4sto
ieb4str
ie1c
@@ -5927,6 +6018,7 @@ iel1ec
ie3lerd
ieler8geb
ie4less
+i2eli
i1ell
iel3lä
ielo4b
@@ -5986,8 +6078,10 @@ i4eri
ierin3
ier3k4
ierken4
+ierma6ss
i1ern
i3ern.
+i4erna
i2er5ni
ie2rö
iers2e
@@ -5996,10 +6090,9 @@ ier3sta
ier3te
ie3s2
ie4sh
-ie4sk
+ie4s3k
ie4spu
ies4s
-ie5sset
iess1t
ie4stas
iest6e
@@ -6010,10 +6103,12 @@ ie2t3ho
ie2t1o
ie2t3ö2
ie2tri
+ie2t3ru
iet2se
i1ett
ieu2e
ie1un
+ie2w3u
i1ex
2if
if1ar
@@ -6075,6 +6170,8 @@ ig3s2a
ig4sal
igsau4g
ig1so
+ig1sp
+ig2spa
ig4sti
ig4s1to
ig2stö
@@ -6107,16 +6204,16 @@ ik1ak
ika4ka
ik1amt
i2k1ano
+ikanten8n
ik1anz
i4kanze
ik1art
ik3att
i2k1au
i2k1är
-ikbu2
4ike
i2k1ei
-ike2l1
+ik2e2l1
i2k1e4r2e
ik1erf
iker6fah
@@ -6134,7 +6231,7 @@ ik3no
ik2o3p4
ikot3t
i2köl
-i2k3ra
+ik3ra
ik3rä
ik3re
ikro3
@@ -6204,7 +6301,8 @@ il2m1au
il2min
2ilo
i2l1or
-il3t2h
+ilt2
+il3th
il3tr
i1lu2
i2lum
@@ -6220,16 +6318,14 @@ ima2tr
imat5sc
ima4tur
2ime
-i2meg
i2mej
-i2mek
i2m1ele
i2melf
+i3men
i2m1erf
i2m1erz
i4mesh
i2meti
-i2mew
i2m1inf
i2m1ins
im4m3ent
@@ -6247,7 +6343,8 @@ im2str
2imt
imtu2
2imu
-in3ac
+in1ac
+in3ach.
i4nack
i2n1ad
in2af
@@ -6255,11 +6352,13 @@ ina4lin
in1am
i3nap
in2ars
+in2art
ina4s
i2n3au2
inaus1
in1äh
in1äs
+inbus2
in2dal
in2dan
in3dau
@@ -6275,8 +6374,6 @@ in3d2ü
i2n1e2be
in1ehe
i2n1eng
-inenma3
-inenmas6
in3erbe
i4nerbi
in2erh
@@ -6296,6 +6393,7 @@ in2g1a4g
in2gl
ingmas4
ing3sc
+ing4sto
1inhab
2inhar
2inhau
@@ -6323,7 +6421,6 @@ inn4sta
in1od
in3ols
in1or
-inos4
ino3t
i1nö
in1ö2d
@@ -6377,6 +6474,7 @@ io2n3au
ion3d
i3on4s1
ions3p
+ion3t
i2ony
i2o1p
io4pf
@@ -6389,8 +6487,9 @@ iore4n
i3orp
i3ors
i3ort
-io3s2
+io3s
i2ost
+ios2u
i3ot.
i3ots
i2ou
@@ -6410,7 +6509,6 @@ iph2
ipi3el
ipi3en
i3p4l
-ipo6i5den
ip2pf
ip2pl
i1pr
@@ -6429,7 +6527,6 @@ ir1c
ir2e
i3ree
2irek
-i3ré
irg2
ir2gl
irg4s
@@ -6453,12 +6550,13 @@ i1ro
i1rö
irpla2
ir2rei
-ir8re8ligio
+irre4l
+ir4reli
irr2h
-irs2
ir4schl
ir4schm
ir4sch3w
+ir3se
ir3sh
irt4s1t
2iru
@@ -6472,7 +6570,6 @@ i2sau
i2s1än
2isb
i2sca
-isch3ar
i3s2che
i4schef
i4sch3e4h
@@ -6494,6 +6591,7 @@ ise3hi
ise3inf
i4seint
ise2n1
+ise4n3a
is2end
isen3s
i2serh
@@ -6514,7 +6612,6 @@ is1pa
i2spar
is1pe
is1pic
-is2pit
is2por
i2spro
is3sa
@@ -6527,7 +6624,6 @@ issermas8
is3so
is3spa
is4sper
-is3spi
is3spo
is2s1t
is3sta
@@ -6559,7 +6655,7 @@ i3tag
ital1a
ital5l
it1alt
-it1am
+it1a2m
it1ang
it3a4re
it1art
@@ -6590,6 +6686,7 @@ iti3k2e
i2t1in1
it2inn
i3tis
+it3iss
i3tiv
i4tl
itmen2
@@ -6614,13 +6711,12 @@ it4s1a4g
it2s1e4
its3er1
it4set
-its1pe
it4stec
it4s3tem
it4s3tes
it2sti
it4stie
-it2sto
+it2s1to
it6stra6s
it2teb
it4temp
@@ -6634,7 +6730,7 @@ itut4
i1tü
2itz
it2zä
-it4z3erg
+it4z3er4g
it2z1w
2i3u2
ium1
@@ -6659,6 +6755,7 @@ ixt2
4i1z
iz1ap
iz1au
+iz2ei
izei3c
ize2n
i2z1ene
@@ -6748,6 +6845,7 @@ k1all
kal3lö3
kalo5
kal2tr
+ka2lu
k3ama
kamp8ferf
kan2al
@@ -6763,7 +6861,7 @@ kank4
k1ans
k2ans.
6kantenn
-ka3nu
+ka3nu3
2kanw
k2anz.
ka2o
@@ -6803,8 +6901,7 @@ k1äh
k1ä2mi
k1än
kär2
-2k1ärm
-kä4s5c
+kä2s5c
käse3
kä3th
2k3b2
@@ -6836,7 +6933,7 @@ kel3b4
2k1e2lek
ke2len
ke2l1er
-2ke3let
+2kelet
kel3la
kell4e
kel3li
@@ -6856,7 +6953,8 @@ ken4sem
kens2k
ken5s4te
ken3sz
-k3enten
+k3en4te.
+k3en4ten
ken3th
2k1ents
2kentw
@@ -6865,7 +6963,6 @@ ken3th
ke2pl
k2er.
ke1rad
-ke1ral
k2erc
ke3reig
4kerfah
@@ -6886,6 +6983,7 @@ k6erlebe
k4erlö
ker4neu
k1ero
+ker4reg
k2ers.
kerz2
k1erz.
@@ -6944,6 +7042,7 @@ k4lar
k3laug
k2le
4kle.
+kle2br
k3lee
4kleh
k4leid
@@ -7015,9 +7114,9 @@ ko1r2a
2k1orc
kor6derg
ko3ri
-kor4n3a
+kor4n1a
k2os
-ko2sp
+ko2s1p
ko3ta
kot1s2
kot4tak
@@ -7029,7 +7128,7 @@ k1o2x
kö2f
k1öl
2k1p2
-k1q
+2k3q
k2r4
2k3rad
k4ral
@@ -7070,17 +7169,17 @@ k2s1äl
ks2än
ksch4
ks1e2b
-k2s1em
k2sent
ks1erl
k2s1ers
k2s1erw
+k3shi
k2s1id
k2s1in
k2s1o2
ks1pa
ks2pat
-k3spe
+k3s2pe
ks2por
ks2pu
kss2
@@ -7106,7 +7205,7 @@ k2t3a2r
kta4re
k2t3au
ktau2s
-ktä5s
+ktä3s
kte3e
kt1ei
k2temp
@@ -7124,7 +7223,6 @@ kt1ins
kti4ter
k2t1of
k3top
-kt1ope
k4torga
kt3orie
kt4ran
@@ -7172,6 +7270,7 @@ kze3l
3l2ab.
la3ba
2labb
+lab2br
4l3aben
2labf
2labg
@@ -7195,7 +7294,6 @@ l1adl
l1adv
2laf
la2fa
-laf1r
laf3t
la2ga
la2gio
@@ -7224,12 +7322,13 @@ l1anal
la2nau
2lanb
3l2and
-lan2da2
-land3ad
+lan2d1a2
lan4d3au
lan6d5erw
lan6d5erz
lan2dr
+lan4ds
+laner2
2lanf
lan2gl
lang3s2
@@ -7258,6 +7357,7 @@ la2ru
la2sau
4lasd
la5se
+3lasg
2lash
2lasi
la2so
@@ -7282,13 +7382,15 @@ lat4t3in
lat2t3r
1laub.
laub4se
+lauf1i
+lau4fin
lau2fo
1laug
3laun
l2aus.
2lausl
2lausr
-2l1auss
+2lauss
2lauto
1law
lawa4
@@ -7298,7 +7400,7 @@ lä1c
1länd
lär2m1a
l1ärz
-lä4s5c
+lä2s5c
lä4s3s
4lät
2läub
@@ -7324,6 +7426,7 @@ lb3rit
lb2s
lb3sa
lb3se
+lb4sh
lb3si
lb4sk
lb3sp
@@ -7334,11 +7437,14 @@ l2b3uf
lbus3s
lbzei2
2l1c
+lch2au
l3che
+l4chei
l5chen
lchermas8
l3chi
lch3l
+lch3m
lch3n
lch3r
lch3s
@@ -7363,7 +7469,9 @@ ld3ari
l3das
ld1au
ld1är
+ldbus2
l3de.
+l2deh
l2dei
l2dele
l3der.
@@ -7401,7 +7509,6 @@ le3ar
leben4s
le2bl
2lec
-le2chi
lech5t4e
3led
4ledd
@@ -7421,6 +7528,7 @@ lei2br
l2eic
l2eid
4l1eig
+le2im
l2ein.
leinbu4
leinbus5
@@ -7443,10 +7551,12 @@ lekt2a
2lektr
3l2ela
2l1e2lek
+l2eli
lel3s
3lemes
le2m1o2
4lemp
+l1emu
l2en.
le4nad
le2nä
@@ -7464,7 +7574,7 @@ len4sem
len3sz
2lentf
l1ents
-4l3entw
+2l3entw
lent4wä
5lentwet
len2zi
@@ -7504,30 +7614,30 @@ le2rob
3l2erra
l4ers.
lers2k
-ler3t
3lerw
l4erwa
2lerwo
2l1erz
l2erza
+ler2zi
les2am
les2e
2l1esel
le3sh
lesi1
le3sk
+les2ko
+le2spo
les3s
leste3
4lesw
2lesy
le2tat
2le3th
-2leto
let2to2
le2u
4leud
3leut
-3lev
2lexe
le2xis
2lexz
@@ -7571,9 +7681,10 @@ lg4s1t
1li
3l4ia
li3ac
+li2ad
li3ak
li3ar
-li3b4
+lib4
libi3
li1c
3lic.
@@ -7581,21 +7692,19 @@ li3chi
4lick
li3d2a
2l1ido
-li4d3s
+li4ds
l2ie
liebe4s
li3ene
lie4s3c
-lie5sse
lie4sta
lif2fo
3lig
lig4n
li2gre
-lig1s
+ligs2
li3ke
li3ko
-li2kr
lik2sp
lik4ter
li3l2a
@@ -7625,6 +7734,7 @@ l2insa
l2insc
2linsp
2l1int
+li1nu
l1inv
2linz
li2o
@@ -7650,6 +7760,7 @@ lit3sz
li2tur
3liu
liv2e
+livi1
2lixi
li2za
lizei3
@@ -7664,6 +7775,7 @@ lk3lad
lk3lic
l2k3lö
l3k4lu
+l3k2me
lk4ne
lk5ner
lkor2b1
@@ -7738,7 +7850,7 @@ llg4
l2lic
l2lieb
l2lieg
-l3lik
+l3lik4
lli4la
ll1imp
l2l1ind
@@ -7763,10 +7875,11 @@ ll3sä
ll3sh
ll3s2k
ll2spr
-ll4s3tor
-ll3t4
+ll4stor
+ll3t
llti2m
-llt5s2
+llt4r
+llts2
llu2d
llu2f
llu2me
@@ -7781,8 +7894,6 @@ l3ma.
l2m3a2b
l2marc
lm1art
-lmas2
-lma3sse
lmä2s
lm1ä4st
lm1c
@@ -7872,14 +7983,12 @@ l3pa
lpe2n3
lp2f
l2p1ho
-lpi4p
lp3t4
l3pu
2l1q
2l3r2
lra4ss
lrat4s
-lrom2
lrö4
lrös3
lrut4
@@ -7919,6 +8028,7 @@ ls3ohne
l4s3ort.
ls2ö
l2spac
+ls2pe
l3s2pi
ls2po
ls2pu
@@ -7931,10 +8041,13 @@ ls2taf
l4s3täti
l2s1tis
l2stit
+ls1tor
+l4stor.
+l4store
+l4stors
ls2tr
ls1um
l2sun
-lsu3s
6l1t
l2tab
ltag4
@@ -7947,17 +8060,18 @@ l4tarm
lt1art
l2t3ato
l2t1au
-l3te.
lt1eh
lt1ein
l2t1eis
lte4lem
-lt3eli
l3t2en
-l5ten.
lten6gel
lter3a
+lter2f
l3t2erg
+lter6ken
+lter6leb
+lter4nä
lt2erö
lte3se
l2t1esk
@@ -7967,7 +8081,6 @@ lte2th
l2t1eu
l2th
l3thas
-l4thei
lt3ho
l3thu
ltimo4
@@ -8011,18 +8124,18 @@ luf2tr
lu2g1a
lu2g1e2b
lug3erp
+lu2gi
lu4g3l
lu2go
lu2g3r
-lug3sa
lu2gu
2l1uh
lu1id.
lume2
2lumf
+2l1umj
2lumk
2luml
-l2ump
1lumpe
2l1ums
l1umw
@@ -8053,8 +8166,8 @@ lust3re
lu2s1u
4lu2ß1
lu2t1a
-lut2ed
lu4teg
+luter2
lu4t3erg
lut1o2f
lu2top
@@ -8082,7 +8195,6 @@ l2z3ac
l3z2an
l2z1ap
lz1ar
-l2z1äp
l2z1är
l3zen
lz2erk
@@ -8100,9 +8212,8 @@ maa2
m1ab
m2abe
2mabk
-m2ab4r
+3m2ab4r
2mabs
-2mabt
ma3chan
mach4tr
ma2ci
@@ -8135,7 +8246,6 @@ ma4lakt
ma2lan
ma4l3at
ma2lau
-mal3d
ma3le
mal2er
mali1
@@ -8157,12 +8267,13 @@ m2anf
m2anh
2manl
m4ann
-m1ans
-m2ans.
+man3s
2mansa
2mansä
2mansc
+man4sh
2mantw
+manu3
2manz
ma2or
2m1apf
@@ -8205,6 +8316,7 @@ ma1yo
mä1i2
4m1änd
3männ
+2mäo
m1ärg
mä1t4r
mäu2s1c
@@ -8212,7 +8324,6 @@ mäu2s1c
mbe2e
mb6l
m3b4r
-mby2
2mc
m3ch
2m1d
@@ -8265,12 +8376,14 @@ men4sk
men2so
men3ta
2mentn
+ment4sp
4m3entwi
me1o
2meou
2meö
3m2er.
me1ra
+mera1f
me2r3ap
me4rens
mer2er
@@ -8293,14 +8406,16 @@ meste2
me2str
4mesu
3me2ß1
+m2et
me3t2a
me3th
+me3tr
meu1
2m1ex
1mé
2m1f4
mfi4l
-4m1g2
+2m1g2
2m1h4
1mi
mi2ad
@@ -8319,19 +8434,21 @@ mie4ti
mi2kar
mi2ki
mi2ku
-3mil
mi3l2a
+3milb
+3milc
milch1
mil4che
-4milz
2m1imp
min2en
min2eu
min2ga
mi3ni
-3min2o
+min2o
mi1nu
3minz
+mi2o
+mioni1
3mir.
mi3ra
3miri
@@ -8342,7 +8459,6 @@ mi4scha
mi4schn
mi4sch3w
mise1
-mis4s1c
mis4ser
mis3si
mis4st
@@ -8364,14 +8480,13 @@ m3ka
mk5re.
2m1l2
ml3c
-ml3l
ml3s
2m1m
m2mab
m2m1ak
m2m1al
mm1ang
-m2mans
+m2m1ans
mm1anz
mm1art
mma2ß
@@ -8401,12 +8516,12 @@ m4mita
mmo2du
m2mo2l
m2mor
+m2m1ö
mm3p2
mmpf4
mms2
mm3te
m2mum
-mm2un
m2mus
2m3n2
m4nesi
@@ -8425,6 +8540,7 @@ mo2k1l
3mom
mom2e
3m2on
+mo2nä
mo3ne
mo4n1er
mon3s
@@ -8447,7 +8563,7 @@ mo1y
mö2c
4mök
m1öl
-2m1p
+4m1p
mpa3ne
m2pf
mp4f3erg
@@ -8457,7 +8573,7 @@ mp4f3erz
mp2f3l
mpf1or
mp1hos
-m3pi
+mpi3as.
m4p3lem.
m2p3len
m2p3les
@@ -8490,7 +8606,7 @@ ms3s2
m4stag
m2stal
m2sü
-4m1t
+2m1t
mt1ab
mt1ak
m3tam
@@ -8529,15 +8645,15 @@ mt3z
1mu
mu1a
2m3uh
-3mul
mu3la
-4muls
+2muls
3mun
mun2d1a
4m3unf
4m3ungeb
mu3ni
m4unk
+m2unr
munt2
4munz
mu3ra
@@ -8552,7 +8668,6 @@ mu2s1to
mu2str
mu2su
muße3
-mut1au
muts3t
mut4str
1mü
@@ -8586,7 +8701,7 @@ n2abo
na2br
4n3abs
4nabt
-3n2a2c
+3na2c
nach1
na3chen
nach3s
@@ -8605,7 +8720,8 @@ n4ahm
n3ahn
3nai
nai2e
-n1aig
+n3aig
+n3air
2n1ak
na2ka
3nako
@@ -8648,7 +8764,7 @@ n1and2
na3no
n1anp
2nanr
-2n1ans
+4n1ans
2nantr
2nanw
nap2si
@@ -8663,6 +8779,7 @@ n2ark
n2arle
2narm
4nart
+n3arti
na3r2u
3nas
n2as.
@@ -8673,7 +8790,8 @@ nasyl2
3naß
3nat
n4ata
-na3t4h
+n3a3t4h
+na4the
4n1atm
nats1
nat4sa
@@ -8696,11 +8814,12 @@ navi5ers
3n2äc
3näe
2n1ähn
+3näi
2n1ä2m
2n1än
n1ärz
3näs
-nä4sc
+nä2sc
n2ä6s3s
3näß
2näu
@@ -8733,19 +8852,20 @@ nder6läs
nde4rob
nde2s
ndes1e
+nde4spe
ndi2a3
n2dob
ndo2be
nd1op
nd1or
+ndo2ri
n2dö
n2d3rat
n2d3re
n2drob
nd3rol
n2drö
-n2drui
-n4d3run
+n2d3run
nd2sor
nd2spr
nd3th
@@ -8763,7 +8883,6 @@ ne2bl
2nec
3neca
3ned
-ne2de
2nee3
ne2e2i4
ne3ein
@@ -8793,10 +8912,11 @@ ne3li
n2ell
nel4la4
nel4lif
-3ne3l2o
+3ne3lo
3ne3lu
n2em.
2n1emb
+nem4e
n1e2mi
2n3emp
2n1ems
@@ -8853,6 +8973,7 @@ ne2pos
n2er.
ne1ra
ne2rab
+ne2r3af
ne3r4al
ne2r3am
ne2ran
@@ -8872,6 +8993,7 @@ nerfor4
n1erh
4n3erhö
3neri
+n2erj
n1erk
n2erli
2n1erlö
@@ -8879,6 +9001,8 @@ nerma3
nermas4
ner4mit
n2ern.
+n1ernä
+ner4neu
4n1ernt
ne1rös
n2erp
@@ -8893,10 +9017,11 @@ n4es.
nes2c
ne2sei
ne2sev
+nesi1
ne3ska
nes1o
ne2sor
-ne2s1p
+ne2s1pa
4n3essi
ne2tad
ne2t1ak
@@ -8911,6 +9036,10 @@ n1e2tu
net2zi
ne2u
neu1c
+neuer4f
+neuer4k
+neuer4s
+neuer4w
neu3g
2n1eup
neur2
@@ -9006,8 +9135,10 @@ ni3ene
ni1ero
nig2a
2n3i2gel
+2niget
nig3r
ni2gre
+nig2sp
3nik
ni2kal
ni2kar
@@ -9021,7 +9152,7 @@ nim2o
4n1imp
nin1
3n2in.
-n2in4a
+n2in2a
4n3ind
2ninf
3n2ing4
@@ -9042,7 +9173,6 @@ ni4schw
ni2s1e
ni3se.
ni2s1p
-ni3spi
nis5s2
ni2stu
ni3stun
@@ -9066,7 +9196,10 @@ nk2am
n2kans
n2k3au4s
n2käh
+n2k1äp
nke4lei
+nkelma3
+nkelmas6
n3k2er
n4k3erfa
nk4erg
@@ -9104,6 +9237,7 @@ n2nau
nn3d
nn4ens
n4nents
+nner4fü
nn2erh
nn2erk
nne2rö4
@@ -9119,6 +9253,7 @@ n2nof
nn1o2r
nn3se
nn3s2p
+nn4s3pe
nnst4
nn2th
n2n1uf
@@ -9131,6 +9266,7 @@ n2o3ble
3noblo
2n1obs
no1c
+noch4r
2no2d
no3dr
n1of
@@ -9154,7 +9290,7 @@ n1ort
3n2os.
no3se
no3sh
-no2s3p
+no2sp
no4ss
n2oste
nost1r
@@ -9167,7 +9303,7 @@ no2tel
no3t3h
no4tha
no2t3in
-no2t1op
+no2top
no2tr
3nov
3now
@@ -9178,7 +9314,7 @@ no2tr
2n1ök
4n1ö4l
nö4s3s
-n2öt
+1n2öt
2n3p4
npa2g
npf4
@@ -9196,11 +9332,11 @@ n2sang
n2sant
n3s2arg
n2saus
-n3sav
n2s1än
nsä4s
n2s1äus
ns2ca
+n4schl.
n3schu
nsch7werd
ns1eb
@@ -9233,6 +9369,7 @@ n4s3ort.
nsp4
nspas2
n2spat
+n5s2pen
n4speri
n2sph
ns2pi
@@ -9277,7 +9414,6 @@ n4s3zi
nt3abs
n3t2a3c
n3t2al
-nta3m
nt1ang
n4tanza
nt2arb
@@ -9301,6 +9437,7 @@ nten6te.
n3ter
ntera4
nte4ras
+nt4erh
nt4ern
nt4ers
nt4ert
@@ -9309,7 +9446,6 @@ n3tet
nte3v
nt2her
n2t3ho
-n3thr
n3t4hu
nti3k4l
n2tinf
@@ -9330,8 +9466,6 @@ nt4rig
n3trop
n2t3rü
n4t1s
-nt3sa
-nt4sau
nts2o
nts2p
nt4s3par
@@ -9346,6 +9480,7 @@ ntu4res
nt3z
1nu.
1nu1a
+nu4ale
nu3ar
nubi1
1nuc
@@ -9380,7 +9515,9 @@ n3ungl
3nu2s
nu3sc
nu3se
+nus1i
nu3sl
+nus1p
nu4s1t
1nu2ß
1nut
@@ -9439,19 +9576,18 @@ oa3chi
o4ad
oa3de
oa4g
-o4ah
o4a3i
oa3ke
oak1l
o4a3la
o4a3mi
-o2ar
o2a3s
3oase
oa4si
o4at
oa3te
o5au
+o1ä
o1b
ob2al
obal2t1
@@ -9480,7 +9616,6 @@ ob3lei
2o3blo
2o3bo
o2b3re
-o3bri
obs2
ob3sh
ob3sk
@@ -9510,7 +9645,7 @@ och3te
o1chu
ochu2f
och1w
-o1ci
+o3ci
ock2er
ock3sz
o1cl
@@ -9519,14 +9654,16 @@ o1ç
o1d
o3d2a
od2dr
-o3deb
ode2c
o3d2e1i
odein3
ode2n1
odene2
+odesi1
+ode3sp
o3dex
2o3dia
+odi4er
o3dir
o3div
o2don
@@ -9535,6 +9672,7 @@ odo4s
o2dre
odt4
2odu
+o3dy
2o1e
oe4b
o2ec
@@ -9597,8 +9735,8 @@ o3gh
ogi2er
o3gis
og2lo
-o3g4n
-ogoi3
+og4n
+ogo4i3
og2s
og3sc
og3si
@@ -9607,8 +9745,8 @@ o1ha
o1hä
o1he
o2h1eis
-o2h1ert
-o2h1erz
+o2h1er2t
+o2h1er2z
o1hi
ohl1a
oh3lec
@@ -9621,14 +9759,15 @@ oh4lerw
oh3lo
ohls2e
oh2lu
-oh4n3ac
+oh4n1ac
+oh3nee
3ohng
oh2ni
1ohnm
oh2n1o
o1ho
oho2la
-o2h1o2p
+oh1o2p
o2h3ö
ohr3a
oh4rin
@@ -9642,7 +9781,8 @@ o3ie
o1im
oimmu4
o1in
-oi2r
+oi2ra
+oi2re
o2isc
o3isch.
oi3se
@@ -9706,6 +9846,7 @@ ol4li4st
ol2lo2c
ol2log
ol2lö2
+oll3sp
ol2lu
ol3lus
o3lo
@@ -9735,6 +9876,7 @@ o3meis
o2mel
o2mene
o2mep
+omer2
o2meru
om1erz
om2es
@@ -9761,8 +9903,10 @@ o3nal
ona4lin
on1ap
o2narb
+on4at
on2au
2onä
+on1äh
onbe3
2onc
onderer5
@@ -9796,7 +9940,7 @@ ono3s
ons1a
onsa4g
on2seb
-ons3e2l
+onse2l
on4sh
onsi2d
ons3l
@@ -9827,7 +9971,9 @@ op3akt
o3pan
o1pec
o1pei
-o1pe4n
+ope4n
+1oper
+o1pes
2opf.
op2f3a
op3fah
@@ -9858,7 +10004,7 @@ o1q
or1a
or3a2b
o1rad
-2oral
+2o1ral
o2r3alm
or4alt
3or2am
@@ -9867,6 +10013,8 @@ o2ranh
or3arb
o1ras
or3att
+orau4
+orau2s
o3rä
or1änd
or1ät
@@ -9890,7 +10038,7 @@ or2do
2ords
or2dum
2ordw
-4ore
+2ore
ore2a
ore2b
o2r1eck
@@ -9920,11 +10068,9 @@ o3rier
4oril
4orin1
or1ins
-2orit
ork2a
or2k3ar
ork4r
-ork3s
2orm
or4mans
or4ment
@@ -9935,8 +10081,10 @@ or2n3ä
or5ne.
or3n2o
2o1ro
+or1o2b
oro3n2a
2o1rö
+2orp
2orq
2orr
orr4a
@@ -9949,7 +10097,7 @@ or3si
or3sz
or2t1ak
or2t1an
-or2t1au
+or2tau
or2tär
or2tef
or4t3ent
@@ -9967,7 +10115,6 @@ or2tor
or2tö
or4trau
or4t3räu
-ort3re
ort3ric
or2t1um
o3ru
@@ -9980,6 +10127,7 @@ o1s
2o3s2a
os3ad
os4an
+o4s3ca
osch3ar
o4schä
o3sche
@@ -9988,20 +10136,19 @@ osch3le
ose3e
o2s1ei
ose2n
+os2ex
2osh
o3s2hi
2osi
o3sk
o4s3ka
-os3ke
o4ski
2os2kl
2os2ko
os2lo
2oso
-2os1p
-os2pe
-os3pec
+2osp
+os1pec
o3s2po
os2sa
oss1ac
@@ -10034,6 +10181,7 @@ o4s3ton.
ost3ran
o2st3rä
ost3re
+os3tri
ost3rot
ost3uf
2osu4
@@ -10053,7 +10201,6 @@ o2t1au
ot3aug
o3tax
ot1ä
-otäugi4
o2teb
o3tei
o4t1eib
@@ -10061,7 +10208,7 @@ ote1i4n
ote3ine
ote2l1a
ote4lei
-ot4em3
+ot2em3
otemp2
otens2
o2t1erw
@@ -10069,7 +10216,7 @@ o2t1erw
ot4he
ot5hel
o4t3hi
-ot3hos
+ot3ho
o2thr
o2til
o2t1i2m
@@ -10128,9 +10275,9 @@ o3wec
owe2r1
o3wi
o1x
+2ox.
ox2a
ox2e
-1o2xid
ox3l
o2xu
1oxy
@@ -10154,7 +10301,6 @@ ozon1
öchs2t
öch4str
ö1d
-öde1r
ödi3
1ödu
ö1e
@@ -10172,6 +10318,7 @@ ozon1
öh2s
ö1hu
ö3ig.
+ö3isch.
ö1ke
ö2ko
ök3r
@@ -10186,8 +10333,6 @@ ozon1
öl1in
öl2k3l
öl2la2
-öllma4
-öllmas3
öl2nar
öl1o2
öls2
@@ -10204,6 +10349,8 @@ ozon1
önn2e
ö1nu
öo1
+öot2
+öoti1
ö1pe
öpf3l
ör3a2
@@ -10222,7 +10369,7 @@ ozon1
ö2r1im
ör2kl
örn2e
-ör1o2
+ör1o
örs2e
ör3s2k
ört2e
@@ -10243,7 +10390,7 @@ ozon1
ö3s2s
ös4s1c
ös3ses
-ös3set
+ö4s3set
ös4st
ös4t
ö2sta
@@ -10282,6 +10429,7 @@ pal2mä
pal2m1o
2palt
pa2nar
+pa4nat
pan3d
pan4ds
pa2neu
@@ -10296,7 +10444,7 @@ panz4
papi2
papieren8
papie8r7end
-3para
+1para
pa2r3af
par3akt
1parc
@@ -10349,12 +10497,13 @@ pef4
pei1
2peic
pe1im
+1peit
pekt4s
-2peku
-3pel
+1pel
pe2l1a4
pe4lein
pe2let
+pe4leu
pe2lex
pe3li4n
pe4l3ink
@@ -10365,23 +10514,23 @@ pel3l4e
pel3li
pel3t
1pem
+1pen
pena4
pe3n2al
pe2nä
pen3da
pe4nen
-1penn
pe2n1o
pens2
3pensi
-1pensu
penz2
1pep
pe1ra
per2an
+1perio
1perle
per4na
-3pero
+1pero
per2ra2
perr3an
per4rä2
@@ -10402,7 +10551,7 @@ pes2t
p2fab
p2fad
p2faf
-pf1ai
+pf3ai
p2f1ak
pf1ans
p2fa4r
@@ -10428,6 +10577,7 @@ pf3lo
p2for
pf3r
pf1ra
+3pf4ro
pfs2
pf3sl
pf3sz
@@ -10451,6 +10601,8 @@ phi2ka
ph2l
2phm
2phn
+p3hop
+pho2s
2phö
ph4r
2phs
@@ -10463,7 +10615,6 @@ pi2a1
pia3k
piap2
pia3s
-pi3as.
pi3chl
p4id
piegelei8
@@ -10471,6 +10622,7 @@ pi2el
piela2
pie4lei
1pier
+1pig
3pik
1pil
pi3le
@@ -10485,7 +10637,6 @@ pi3oi
pi3onu
3pip
pi2pe
-pi4pel
pi3ri
3pirin
3pis
@@ -10493,7 +10644,6 @@ pi3ri
pis2t
pi3t2a
pit2s
-2pitz
pi2z1in
p1j
2p1k2
@@ -10534,17 +10684,13 @@ po3li
pol3lo
po4lor
2pond
-2ponn
po1o2b
po2p3ak
po2p3ar
-po1pe
po2pl
po3pt
-po1ral
po1rau
porf4
-2porn
por4tre
por4tri
po3s2e
@@ -10566,11 +10712,13 @@ p2p3a2b
pp3anl
ppa2p
ppe1e
+ppeli5ne
ppe2n1
ppf4
pp1fr
p2p1h
p3p2ho
+p2p1ia
pp3lä
p2p3le
pp3oh
@@ -10580,6 +10728,7 @@ pp3ren
p2pri
pp3sa
ppt2
+pp3ta
p3puc
p2pul
p2punk
@@ -10600,7 +10749,8 @@ pre2e1
2preg
1prei
3preis
-prei4ss
+prei4s3c
+prei4s3s
2preiz
2p3rer
3p4res
@@ -10608,6 +10758,8 @@ prei4ss
pri4e
2prig
3prinz
+pri2t1
+priter4
1p4ro1
3prob
2proc
@@ -10675,10 +10827,10 @@ pul2sp
pun2s
2punt
2pur
+pu3ri
3put
put2s
1püf
-2pül
pül3l
2p1v
2p1w
@@ -10688,6 +10840,7 @@ py3t
2p1z
qu4
quel4la
+que4te.
1queu
qui3s
1ra.
@@ -10713,7 +10866,6 @@ ra1ce
2r1acet
ra4cheb
ra4chin
-rachter6
racht3r
rach6trä
ra2chu
@@ -10724,19 +10876,18 @@ ra2dam
2radap
3radf
r3a2d3r
-rad3t
-1rae
+rad3t4
+1ra2e
+ra3er
r2af
raf3ar
ra2fer
-raf1r
ra3ge
ra3gle
ra2gn
3r2ahm
2raho
4raht
-r2ai
2raic
rail4l
2r3air
@@ -10765,9 +10916,9 @@ ral5l2e
r3alp.
2ralpe
r4als
-r3al3t
+r3alt
2ralta
-r4alt2h
+r4al3t2h
ra2lu
3raly
r2ame
@@ -10802,6 +10953,7 @@ r2anmu
r2ans.
r2ansp
ran4spa
+ran2th
2rantr
2r3anw
r2ap
@@ -10829,6 +10981,7 @@ ra4ssi
ra2t1a
ra3ta.
ra3te
+rat2o
rat4r
2r3atta
4ratz
@@ -10848,7 +11001,6 @@ rau2mi
2rausb
2rausg
rau2sp
-rau4sti
raus3tr
4raut
raut5s
@@ -10859,6 +11011,7 @@ raxi4s1
räch4s
3r2äd
4räf
+rä1fr
4räg
2räh
2räm
@@ -10868,9 +11021,7 @@ räch4s
2r1är
r2är.
rä3ra
-rä4sa
rä4sc
-rä5sse
rä2st
3rätse
rä2u
@@ -10889,7 +11040,9 @@ rb1art
rb1auf
rbb2
rb1ech
+rbeid2
r4belä
+r4belis
r3ben.
rb1ent
rbe3r2e
@@ -10928,7 +11081,7 @@ rch3m
rch3r
rchs2
rch3sp
-rchst4r
+rchst4
rch3t2a
rch6terg
rch6terw
@@ -10999,12 +11152,13 @@ rech3ar
re1el
re1er
3refe
-4reff
+2reff
3refl
3refo
3reg
5reg.
rege4l3ä
+2reh
re2hac
re4h3ent
re2h1i
@@ -11040,6 +11194,7 @@ re3lo
2r1elt
relu2
r4em.
+r2emi
4rempf
4remu
r4en.
@@ -11055,11 +11210,11 @@ ren2gl
re2ni
ren4nar
ren3sau
-r1ense
+2r1entg
2r1entl
2r1ents
2rentw
-4r3entz
+4rentz
r2enz
ren2zw
re3or
@@ -11069,6 +11224,7 @@ re4pis
4repp
3r4er.
2r1erb
+rer2bi
r4erbil
r2erbr
2r1erd
@@ -11082,7 +11238,9 @@ re3ri
r1erk
4r3erken
r2erki
+2rerkl
2r1erl
+5rerlag
2r1erm
rer2n
2r1ernä
@@ -11191,10 +11349,12 @@ r1h4
2rh.
2rha
r2ha.
+r3hals
2rhä
3r4he.
2r3her
r2hoe
+r3hof
rho2i3
2rhol
2rhö
@@ -11205,8 +11365,9 @@ ri3at
rib2bl
ri1ce
ri1cha
-rid2
ri2dan
+ri2dau
+rid2g
2ridol
2ridy
r2ie
@@ -11228,7 +11389,6 @@ ri2f1o
ri2fr
rif4ter
3rig
-5rig.
ri4gene
5rigj
rig1l
@@ -11236,6 +11396,7 @@ rig1l
rik1l
ri4kla
r2imb
+ri2me.
4rimp
rim2s
r2i3na
@@ -11294,12 +11455,14 @@ rix1
ri3xi
1rí
2r1j
-2r1k
+4r1k
rk2am
rk4ap
rkauf4s
r2käh
r3kla
+rk4las
+rk4lau
r2klis
rk2lo
rk2lu
@@ -11345,23 +11508,24 @@ r3l2i
r3l2o
rlös5s
rl2s1p
-rl2s1to
+rl2sto
rl3t
r3lu
rlu4str
rlz2
4r1m
+r2mab
r3m2ag
rma2la
r2m1ald
r2m1ank
+rm1ans
rm1anz
rm1a2p
r2maph
rma5ssen
rmas8sens
rm3d2
-r3me.
r2m1ef
r2meo
r2m1erp
@@ -11404,6 +11568,7 @@ r4n1ert
rner4ve
r5nes
rn2et
+rne3uf
r4nex
rn3f
rng2
@@ -11413,7 +11578,6 @@ r3nod
r2n1op
r2n1or
rn1ö
-r1nöt
rn3sa
rn3s2ä
rn3s2p
@@ -11454,12 +11618,11 @@ ro4nerb
rons2
ron4tan
4ro1ny
-ro1pe
2ro2pf
ro3ph
r1or
r2ora
-ror3al
+ro2r3al
ro2rat
ro2rei
ro2r1o
@@ -11494,6 +11657,7 @@ rölla4
4röp
r1ör
r2ös.
+3rötu
2r1p2
r3p4a
r3p4e
@@ -11501,7 +11665,6 @@ rpe2re
rpe4r3in
rpf4
r2pli
-r3po
rpo4str
rps1t
rp3t
@@ -11517,16 +11680,20 @@ rrb2
rr1c
rr2e
rre4ale
+r5rega
+rre2le
+rre2pa
rrer4s
r3res
+rre2ve
r2rew
rr2he
r3r4hen
rrik2
rr2n3a
-rr2o
-r2r3ob
-rro3m2
+r3r2o
+r4r3ob
+rro3m
rr2th
r3ru
r3r2ü
@@ -11540,6 +11707,7 @@ rs2an
r2s3ang
rs3anp
rs3ar
+r3sche
r6scherl
rs1ebe
r2sein
@@ -11570,6 +11738,7 @@ rs2p4
rspa3s2
rs4pel
r2s3ph
+r5spi
r4s3s2
r5stad
r4stant
@@ -11591,6 +11760,7 @@ r2sumf
rsü3s
r3swi
4r1t
+rt4abl
r2t1alm
rtals1
rt1am
@@ -11617,16 +11787,17 @@ r4terfa
r4terfo
rt1erh
r4t3er4la
+rter6mit
r4t3ernä
rter4re
rt1ers
r3tes2
rte3sk
r2thi
-rt3hol
rt2hum
r2t1id
r2t1ima
+rt4is
rto1p
rt1or
rto2ri
@@ -11635,8 +11806,8 @@ rtra4s3
rt3rec
rt3ros
r4ts
-rt4s3eh
-rt1spe
+rt4s1eh
+rt1s2pe
rt3t4
r2t1urt
rt3z
@@ -11654,7 +11825,6 @@ ruf2s1
ruf4st
ruf4ter
2r1uhr
-3ruin
ru1ins
ru1is
2rum
@@ -11702,7 +11872,7 @@ ru2zw
2rüb
rü1ben
rü1ch
-rücks2
+rück5sta
4rümm
rün3z
rü3s2s
@@ -11716,10 +11886,13 @@ rwun3s
4r1x
1ry
ry2c
+rys2t
+rysti1
2r1z
rz2an
r2zar
r2zas
+r3ze.
rz1eck
r5zene
rz1eng
@@ -11765,7 +11938,7 @@ sa1f4r
sa4gent
sag4n
4s1a2gr
-3s2ai
+3sai
sa3i2k1
sail2
2s1ak
@@ -11796,7 +11969,7 @@ s2an.
2s3a2na
2s3anb
s2an2c
-s2and
+3s2and
s4and.
san4dar
san4dri
@@ -11839,13 +12012,13 @@ s1a4u
3sau.
3sauc
3saue
+sau8erste
2s3aufb
sau2gr
3saum
3saur
sauri1
2s3ausb
-2s3av
sa2vo
3säc
s1äh
@@ -11863,7 +12036,7 @@ sba4n
sbe3r2e
sbus3
1sc
-2sc.
+4sc.
2scam
s2cap
4scar
@@ -11892,14 +12065,13 @@ sch3ei.
4schess
4schex
4schf
-2schg
+4schg
2schh
schi4e
3sching
4schiru
3schis
2schk
-4schl.
sch4lag
4schle.
6schlein
@@ -11925,8 +12097,7 @@ scht2a
scht4r
s2chu
4schunt
-sch2up
-5schü
+3schü
2schv
4schwaa
4schwet
@@ -11967,7 +12138,7 @@ sef4l
se2gal
se2gl
seg4r
-3s2eh
+3seh
seh1a
se2ha4g
se2han
@@ -11998,6 +12169,7 @@ sein4fo
2seinn
2seinr
s4eins.
+4seinsa
4seinsp
4seinst
2seinw
@@ -12016,7 +12188,7 @@ sel1ec
se4lerl
sel3ers
2self.
-s3elix
+s1elix
3selk
sel3le
se2l3ö
@@ -12035,6 +12207,7 @@ se2nä
se2no
s2ens
s2ent.
+sen3ta
2sentf
4s3entg
s2enti
@@ -12048,8 +12221,7 @@ seo2r
3seq
s4er.
ser3a2d
-ser3al
-se5ref
+se2r3al
s3ereig
se4r3eim
se4r3enk
@@ -12057,9 +12229,9 @@ ser2er
s1erfo
s2erfr
s3erfü
-4serfül
+4ser4fül
s1ergä
-s2ergr
+s4ergr
s1erh
5serie
serk4
@@ -12109,11 +12281,12 @@ sha2k
s3h2e
3shi.
3shid
+4shil
shi4r
4shk
sh3n
4shof
-3s2hop
+3shop
sho4re
3show
sh4r
@@ -12132,6 +12305,8 @@ sib4
s2ido
3s4ie
siege4s
+sieh1
+sie4hes
si3ene
si1err
si1f4
@@ -12150,6 +12325,7 @@ si2kr
sik3s2
sik3t4
si2ku
+sil2br
3silo
2s1imm
si3n4a
@@ -12171,7 +12347,7 @@ s2ins.
4s1inv
3sio
3siru
-3s2is
+3sis
si2sa
si4schu
si2s1e
@@ -12184,7 +12360,6 @@ si2tau
sit3r
si2tra
si3tu
-3siv
siv1a
sive3
si2vr
@@ -12201,9 +12376,7 @@ ska4te.
ska4tes
4skä
4skb
-skelma4
-skelmas5
-s4kep
+s2kep
3s2ki.
s2kif
s2kig
@@ -12215,7 +12388,7 @@ sk4l
3s2klav
4sk4n
4skom
-4s3kor
+4skor
4skow
4skö
4sks
@@ -12270,19 +12443,20 @@ son2s1o
so3o
2s1opf
3sor.
-so1ral
s1orc
2s1ord
so2rei
+so3ren
2s1orga
5s2orge
2s1o2rie
-so2r1o2
+so2ro
3sors
so4ru
3so3s2
s4os.
4s1ost
+3soß
1sou
so3unt
3sov
@@ -12302,9 +12476,10 @@ sp2
spani7er.
2spano
4spap
-2spara
+2s3para
1spare
2sparo
+5s6parten
3sparu
spa3sse
spa3ssi
@@ -12313,11 +12488,11 @@ spa3ssi
s2paz
s2pä
2spär
-2s3pe.
-2spel
+2spe.
+2s3pel
4spensi
spe3p4
-s1peri
+s2pera
2spero
s2perr
2spers
@@ -12325,7 +12500,6 @@ s2perr
1s2pez
2s3pf
2spha
-s4phä
s3phe
1spi
3s2pi4e
@@ -12333,8 +12507,10 @@ s3phe
spi2k
4spil
3spio
-4spi4p
+4spip
4spis
+3s2pit
+3s2piz
2spl
4spla
4splä
@@ -12368,7 +12544,7 @@ s2prit
2sprüf
3sprün
2s3ps
-2s4pt
+2spt
1spuk
2spup
3spur
@@ -12381,11 +12557,9 @@ sra4s3s
srat2s
srat4sc
sret3
-srom2
srö2s
srös1c
srücker6
-srü2d
2s1s
6ss.
4ssa
@@ -12424,11 +12598,9 @@ ssenmas6
sse6r5att
s2s1erö
4ss3erse
-s3sersu
ss2es
4ssesc
3ssesh
-4sset
sse3ta
4ssez
4ssf
@@ -12455,6 +12627,7 @@ ss1ori
s2söl
4ssp
s3spe
+ss2pen
ss2po
s3spru
ssquet4
@@ -12480,6 +12653,7 @@ ss2tur
s3s2tü
4ssum
ss1ums
+4ssup
4ssü
4ssv
4ssw
@@ -12509,7 +12683,7 @@ st2ac
st1alm
st1alp
3stam
-st1ami
+st1a2mi
4stamt
sta4na
3stand
@@ -12525,12 +12699,11 @@ st1asi
3stat
2stat.
5statu
-3s4tau.
+s4tau.
2stauf
2staum
5staur
2staus
-3staus.
2stax
3stä
4stäg
@@ -12540,7 +12713,7 @@ s2tär
5stätt
4stäus
4stb
-4st3c
+2st3c
4std
3ste
s2tean
@@ -12551,6 +12724,7 @@ ste4i
4st1eid
5s2teig
4s3teil
+steil4z
stei4na
s2t2el
s3telem
@@ -12583,12 +12757,10 @@ s2teu
4stf
2stg
4sth
-st3heu
st3ho
5s2tic
3stie
4stief.
-stierma5
3stim
2stinb
2stinf
@@ -12610,9 +12782,11 @@ s2tof
stoffen6
stof8fens
2st3om
+2stope
2stopo
2stord
2storg
+s2tory
3stos
4stou
2stöch
@@ -12632,7 +12806,7 @@ stof8fens
3straß
4straum
s2träf
-2sträg
+2s3träg
s2trän
4sträne
2stre.
@@ -12658,8 +12832,8 @@ stri2k
3s2trok
st3roll
stro4ma
-s2trö
2ströp
+4ströt
3struk
2st3run
2strup
@@ -12729,6 +12903,7 @@ s2ump
s3umsa
s3umst
su2n
+sunder4
sun6d5erh
su4ne
s1unf
@@ -12740,9 +12915,8 @@ sup3p4
su2ra
2s1url
s1urt
-su2s1
-su3sa
-su3si
+sus1e
+su2sp
sus3s
2sü2b
3süc
@@ -12765,7 +12939,9 @@ s3wu
1s2y
syl1
sym3
-sy4n3
+sy2n3
+sy4na
+sy4nä
sy5s
2s1z2
4s3za
@@ -12847,7 +13023,7 @@ ta4bend
2tabg
2tabh
2tabk
-1table
+1t6able
2t3abn
ta2br
4tabs
@@ -12867,7 +13043,7 @@ t1afg
t1af4r
1t2ag
3tag.
-ta2ga2
+ta2ga
ta2g1ei
4t3a4gent
ta3gl
@@ -12876,7 +13052,6 @@ tag2s
tag4st
tah2li
tahl3sk
-t2ai
ta3i2k
tai2l
ta1ins
@@ -12914,7 +13089,6 @@ tal2se
2talt
2tam
ta2mer
-ta2mi
tam2ma2
tam4mi
tam4mut
@@ -12937,7 +13111,6 @@ t1ans
t2ans.
4t3ansi
2t3ansp
-ta2nu
2tanwa
2tanwä
t2anz.
@@ -12954,7 +13127,7 @@ ta2pl
2tappa
t2appe
2tarb
-ta4rens
+ta4ren4s
ta4r3ere
3t4ari
2tark
@@ -12994,6 +13167,7 @@ tau3f4li
t1auk
3taum
1taus
+2taus.
t1ausb
tau6schr
tau6schw
@@ -13004,7 +13178,9 @@ t1ausk
2t3auss
4t1ausw
1tax
+ta3xi
taxi3s
+3täa
tä1c
2täd
3täe
@@ -13019,7 +13195,7 @@ t1ängs
t1äp
t2är.
tä2ru
-tä4s
+tä2s
t2ät
2tätt
2täug
@@ -13038,7 +13214,7 @@ t3cha
t3che
tch2i
tch3l
-t2chu
+t2ch1u
tch1w
t3cl
t3cr
@@ -13053,9 +13229,10 @@ te3an
1t2ech
te1cha
3techn
+te2chu
2teck
teck2e
-te3der
+te2de
1tee
te1em
te2en3
@@ -13069,7 +13246,6 @@ teg3re
teik4
1teil
2tein
-teinbus6
tein3ec
t3einge
t3einla
@@ -13109,7 +13285,7 @@ te2l1ö
tel3s2k
tel3ta
tel3th
-telt4r
+tel3t4r
te3mä
te2m1ei
te2min
@@ -13157,7 +13333,7 @@ tens2e
4tensem
t4enta
t1entb
-4tentd
+2tentd
t4ente
4tentn
ten4t3ri
@@ -13170,9 +13346,9 @@ t1e2pi
t6er.
ter3ac
te1raf
-te1ral
ter3am
te3ran.
+te3rand
ter3as
4terbs
4terbt
@@ -13187,14 +13363,16 @@ terer4z
4t3erfol
t4erfr
4terfül
-ter3g2
-6tergrei
+terg2
+ter3ga
+6ter6grei
t4ergru
2t1ergu
4tergü
t4eri
te3ria
te2rid
+ter3k
4terklä
2t3erlö
1term
@@ -13208,7 +13386,7 @@ t1erö
ter4re.
1terro
t4ers.
-ter5sc
+ter3sc
ter4ser
terst4
t4erst.
@@ -13218,7 +13396,6 @@ tert4a
tert2o
teru2
te4r1uf
-6terwerb
ter3za
2t1erzb
t2erzu
@@ -13288,6 +13465,7 @@ t2hes
3these
t2heu
1thi.
+thi3er
t2hik
2t3hil
2t3him
@@ -13297,18 +13475,19 @@ t3hir
4th3m
2th3n
t2ho
+t4ho.
2t3hoc
t3hof
2t3hoh
t4hol.
+t4holo
t3hor
2t3hot
thou2
+2thov
2t3hö
2thp
1th2r2
-4thrin.
-4thrins
2ths
2thub
4thun
@@ -13329,22 +13508,22 @@ ti1el
ti2el.
tiel3a
ti3e4n1
-ti2er
tie4rec
-tiermas6
+ti2ern
1tierr
-tie5sse
2tieß
ti1et
ti1eu
1tif.
tif3f
ti1fr
+t4ig
ti4gerz
tihi4
ti2kam
ti2kar
ti2kin
+ti2kra
ti2krä
tiks2
ti2kü
@@ -13379,7 +13558,6 @@ t1int
ti1nu
4t1inv
3tio
-ti3or
1tip
3tip.
ti4que.
@@ -13423,6 +13601,7 @@ to5a4t
tob2l
t1obs
to1ch
+t3ochs
3tocht
2tock
1tod
@@ -13448,7 +13627,6 @@ to2rau
to4rän
2torc
t1ord
-1tore.
to2r1el
t1org
t3orga
@@ -13475,7 +13653,7 @@ tö2c
1tön
t1ö4st
1töt
-4t3p2
+2t3p2
tpf4
2t1q
t2r4
@@ -13494,7 +13672,7 @@ tra4lin
3t4ran.
2trand
1trank
-t3rann
+t1rann
1trans
t3rase
t3rasi
@@ -13504,7 +13682,6 @@ tra4str
2traup
traus2
1trä
-3träg
2träh
3träne
2träs
@@ -13520,7 +13697,7 @@ t4reck
2t3red
1tref
2trefe
-3treff
+3t4reff
2trefo
2treg
t4rei.
@@ -13576,13 +13753,15 @@ tro2ke
tro2mi
2t3roo
t4rop
+tro1pe
3tropf
2troß
t3röc
2tröh
-3tröp
+2tröm
+1tröp
2trö4s3s
-2t3röt
+1tröt
2truf
1trug
2truk
@@ -13601,14 +13780,13 @@ t4rüg
3trümm
try1
2ts
-t4sab
t3s2ac
t2sa2d
t2s1ah
ts1al
t4s1amt4
t2san
-t4s3ar
+ts3ar
ts1as
tsa3sse
t2sau
@@ -13667,7 +13845,6 @@ ts1tie
t2s1tis
t2stit
t2ston
-ts1tor
t4s3trad
t2strä
t2s1tri
@@ -13755,6 +13932,7 @@ t3umz
1tun.
2t1una
2t1und
+t4une
2t3unf
t3unga
tung6s
@@ -13818,9 +13996,9 @@ tz2ene
tz3ents
tz1erl
tz2ers
-t3zes
+t3zes1
tzes3t
-tz1int
+tz1ind
t2zor
tz2ö
tz2th
@@ -13831,7 +14009,7 @@ tz1wu
2ua
u1a2b
u3a2c
-uad4r
+uad4
u1ah
u1al.
ua2lau
@@ -13845,6 +14023,7 @@ u1alr
u1als
u1al3t
ua2lu
+u1alz
u3am
u1ans
u3ar.
@@ -13869,7 +14048,6 @@ ub2l
ub3lic
u2b3lu
u2bop
-ub1r
ub3rä
u2b3rit
ub2san
@@ -13922,7 +14100,7 @@ u3dru
u2ed
ue2en
u2eg
-u2ela
+u4ela
ue2le
ueli4
uel2la
@@ -13939,20 +14117,23 @@ uen2zu
u2ep
ue2r3a
ue2r1ä
+uer6baut
uere2
ue2rec
ue3reig
u3eremp
u3erent
ue4rerg
-ue4rerk
uer3g2
+u3erh
u3erinf
u3erin4t
uerma6s
+uer4nan
uer2ne
uer4ner
uer3o
+uer2ö
u3err
uer3sc
uer3t2
@@ -14012,6 +14193,7 @@ ugenma3
ugenmas6
u2g1erf
u2g1erl
+ug4es
ug3hu
u2g1l
ug3lad
@@ -14036,6 +14218,7 @@ ug1spa
ug5stä
u2gü
u1h
+uh2au
uh1la
uh1lä
uh2li
@@ -14055,6 +14238,7 @@ u1ie
ui1em
u3ig
u4ige
+uil4les
u1im
u1in.
uin3n
@@ -14081,7 +14265,7 @@ u1ku
uku2s
uk2ü
u1l
-ul1ab
+ul1ab3
ul1am
ul1äm
ulb4
@@ -14091,9 +14275,10 @@ uld2se
u2l1el
ule4n
ul1erf
-ul1erh
+ul1er2h
ul1erw
ule2sa
+ule4s3t
ule2t
ul1eta
u2lex
@@ -14109,7 +14294,6 @@ ul3len
ul2les
ulli2n
ul2lö2
-ulm3ein
ulo2i
ul1or
ul2p1h
@@ -14117,7 +14301,6 @@ ul2sa
ul4sam
uls2t
2ulta
-ul3th
ul2tri
ult3s
u2lü
@@ -14125,10 +14308,9 @@ ul2vr
ulz2w
u2m3a2k
um1all
-um2an
-um3anz
+um1anz
u2m1art
-u2m1aus
+u2maus
u2maut
u2m1äh
1um3d2
@@ -14139,6 +14321,7 @@ um1erf
um1erg
um1erl
um1erw
+u5mes
1umf
1umg
um1inh
@@ -14146,7 +14329,7 @@ u2m1ins
um1ir
1umk
1uml
-4umm
+2umm
umm2a
um4mess
u2möl
@@ -14154,6 +14337,7 @@ umpf4li
um2pho
um2p3le
1umr
+um4san
3umsat
um2sau
um2ser
@@ -14167,13 +14351,12 @@ u2m1ur
1umz
un1
2un.
-2una.
+4una.
1unab
-un3ac
un4al
u3n2am
u2n3an
-2un2as
+4un2as
un3at
unau2s
1unda
@@ -14197,6 +14380,7 @@ undü4
1undz
u3ne
une2b
+une2d
une2h
un2ei.
un3ein
@@ -14229,6 +14413,7 @@ unks2
unk4tit
unk2t3r
3unku
+unlö2
un2n3a2d
un3n2e
uno4r
@@ -14245,6 +14430,8 @@ unst1r
1unt
un3ta
unte4ri
+2unth
+2unto
un3tr
unt3s
2untu
@@ -14271,6 +14458,7 @@ upf2e
upf1i
u1pfl
u3pi
+up4lu
up2pl
u1pr
upt3a2
@@ -14283,10 +14471,15 @@ u1ra
u2rab
u3raba
ura2be
+ural2t
+ural4ta
u2r1a2m
ur3ame
u2r1ana
+uran4fa
+uran4fo
u2r1ang
+uran4ge
ur2anh
u2r1an5s
u2rar
@@ -14308,7 +14501,7 @@ ur1erw
urf3t
ur2gri
uri2c
-ur1im
+u2r1im
ur1ini
ur3ins
ur1int
@@ -14328,6 +14521,7 @@ ur4sw
urs2ze
urt2
u3ru
+ury5
ur2z1a
ur2zä
ur2zec
@@ -14335,7 +14529,7 @@ ur2zi
ur2z1o
ur2z1w
2us
-u4saf
+u2s1af
us4ann
us5art
u1sä
@@ -14351,8 +14545,9 @@ u2serp
u2s1ese
usi3er.
usi5ers.
+u3sig
+us5is.
us3kl
-u4sko
usmas2
usma5sse
u1so
@@ -14367,21 +14562,23 @@ u2spac
us3part
u2s1pas
u2spat
-us1pe
-u3s2pek
+u3spek
us1pic
-u3s2piz
u2spo
us2por
u2spu
+usse4g
u4s3sel
us2sen
us5sende
us6seni
ussenma7s
us2ser
-us4serf
+us3ser.
uss5erfa
+usser6kl
+uss5er6su
+u4sset
us2sez
u3ssig
us2sof
@@ -14412,14 +14609,14 @@ u2t1ap
u2t1ar
u2t1är
u3te
-ut1e2d
+u4t1ed
ut1e4ge
ut1ei.
ut1eie
ute2n1
u2tent
uter4er
-u4t3ersa
+u4t3er4sa
ut2es
ut2et
u4tev
@@ -14429,6 +14626,7 @@ ut2he
u2thi
u2t3ho
u2thu
+utli4n
utmas2
utma5sse
u3to.
@@ -14446,8 +14644,8 @@ ut4schl
ut4schm
ut4schö
ut3si
-ut1sp
-ut2spa
+ut1s2p
+ut2s3pa
utt4an
ut3te
ut3t4l
@@ -14480,6 +14678,7 @@ uz3z4
übe2
übe4n3
über3
+ü4bet
üb3l
üb3r
2üc
@@ -14518,8 +14717,8 @@ uz3z4
ü2h1ei
ü2h1eng
üh1erf
-ü2h1erk
-ü2h1erz
+ü2h1er2k
+ü2h1er2z
üh1i
ühl1ac
üh1lam
@@ -14551,6 +14750,7 @@ uz3z4
ül2lo
ü1lu
ü2ment
+4ün
ü2n1a
ün2da
ün2dr
@@ -14694,7 +14894,7 @@ vi2c
vi3de
vie2h3a
vi2el
-vi2er
+vi3en
vie4rec
vie2w1
vig2
@@ -14763,7 +14963,6 @@ waffe2
waffel3
1wag
wa5ge
-3wagen
wa2g3n
wa3go
1wah
@@ -14780,10 +14979,11 @@ wal4li4n
wal2ta
wal2to
walt4st
-3walz
wa3na
+w3anf
wang4s
1wann
+wan6z5en6d
wa2p
1war2e
ware1i
@@ -14817,6 +15017,7 @@ we2fl
1weg
we2g1a
we2g3l
+we4gn
we2g3r
weg1s
weg3sa
@@ -14826,8 +15027,9 @@ wei4bl
2weie
weifel6d
weik4
+1weil
wei3sc
-weis4s3p
+weiss3p
wei4tr
weit1s
wel6schl
@@ -14861,10 +15063,9 @@ wer2t1a
wer4t3ei
wer6t5erm
wer2to
-1werts
1wese
wesen4s3
-we2s1p
+we2sp
wes2t
we2st1a
we4st3ei
@@ -14888,7 +15089,7 @@ wie4st
wik2
1wil
wim2ma
-wim4m3u
+wim4mu
win4d3ec
win2dr
win2e
@@ -14946,6 +15147,7 @@ wus4
1wüh
wüs4
2w1w
+2w1z
x1a
1xa.
2xa2b
@@ -14985,6 +15187,7 @@ xers2
xib4
xi1c
xich2
+2xid
xide2
xi2d1em
x1i2do
@@ -15123,7 +15326,7 @@ y3s2h
y4s3l
ysme3
ys2pa
-yst4
+yst2
y2s1u2
y3s2z
y1t2
@@ -15159,6 +15362,7 @@ za3ne
zan4kl
2z3anl
za3no
+zanti1
za3ra
2zarb
2zarc
@@ -15175,15 +15379,14 @@ zast4
z1au2f
z3aug
3zaun
-zä2
2z1äc
3z2äh
-zä3hi
2z1äm
2zängs
+2z1äp
z1ärg
z1ärm
-4z3b4
+4z1b4
zbü1b
zbübe3
2z3c
@@ -15198,11 +15401,11 @@ ze1e
2z1eff
zehe4
zehen1
+zeh2l
zeik4
zei3la
zeile4
2z1ein
-zeinbus6
zei3s2
zeist4
zei2t1a
@@ -15234,7 +15437,7 @@ zen4sem
zent3s
zen4z3er
z2er.
-zer3a
+ze2r3a
ze2re2b
2z1ergä
4z3ergeb
@@ -15264,13 +15467,12 @@ zer6trau
2z1erz
3z2erza
ze2s
-zes1e
-zes1i
+zes2c
ze3sku
zessen4
zes6s5end
zes2sp
-zes1tr
+ze3stau
ze2ß1
ze2tr
2zetts
@@ -15281,6 +15483,7 @@ zfäs3
zger2a
2z1h
z2hen
+zhir3
3zi.
zi3alo
zi3ar
@@ -15292,7 +15495,6 @@ zi1es.
3zig
zil2e
zil3l
-z2imm
2z1imp
zim2t3
zin2e
@@ -15304,6 +15506,7 @@ zin1it
zin2sa
zin4ser
4zinsuf
+z1int
z1inv
zi2o3
zi3op
@@ -15313,6 +15516,7 @@ zis4t
zistras6
zi3s2z
zit2h
+zi2t1o2
ziv2
2z1j
2z1k4
@@ -15337,6 +15541,7 @@ zor4ne
zo3se
2z1osz
2zö2f
+2z1ök
z1öl
2zön
2z3p4
@@ -15358,7 +15563,7 @@ zt1ins
zt3rec
zt3s2
zu3a
-zub4
+zu3b4
3zu4c
zud4
zudi4
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-es.hyp
index 5263fdd82e7..5263fdd82e7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-es.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-es.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-es.pat
index 0bb88ee21dd..55e09b49e49 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-es.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-es.pat
@@ -7,6 +7,7 @@
\patterns{
1b
4b.
+.b2
2bb
2bc
2bd
@@ -28,6 +29,7 @@
2bz
1c
4c.
+.c2
2cb
2cc
2cd
@@ -48,6 +50,7 @@
2cz
1d
4d.
+.d2
2db
2dc
2dd
@@ -70,6 +73,7 @@
2dz
1f
4f.
+.f2
2fb
2fc
2fd
@@ -91,6 +95,7 @@
2fz
1g
4g.
+.g2
2gb
2gc
2gd
@@ -134,6 +139,7 @@
2hz
1j
4j.
+.j2
2jb
2jc
2jd
@@ -157,6 +163,7 @@
2jz
1k
4k.
+.k2
2kb
2kc
2kd
@@ -178,6 +185,7 @@
2kz
1l
4l.
+.l2
2lb
2lc
2ld
@@ -200,6 +208,7 @@
2lz
1m
4m.
+.m2
2mb
2mc
2md
@@ -223,6 +232,7 @@
2mz
1n
4n.
+.n2
2nb
2nc
2nd
@@ -246,6 +256,7 @@
2nz
1p
4p.
+.p2
2pb
2pc
2pd
@@ -267,6 +278,7 @@
2pz
1q
4q.
+.q2
2qb
2qc
2qd
@@ -290,6 +302,7 @@
2qz
1r
4r.
+.r2
2rb
2rc
2rd
@@ -312,6 +325,7 @@
2rz
1s
4s.
+.s2
2sb
2sc
2sd
@@ -335,6 +349,7 @@
2sz
1t
4t.
+.t2
2tb
2tc
2td
@@ -347,15 +362,13 @@
2tn
2tp
2tq
-2ts
2tt
2tv
2tw
-2tx
2ty
-2tz
1v
4v.
+.v2
2vb
2vc
2vd
@@ -377,6 +390,7 @@
2vz
1w
4w.
+.w2
2wb
2wc
2wd
@@ -400,6 +414,7 @@
2wz
1x
4x.
+.x2
2xb
2xc
2xd
@@ -423,6 +438,7 @@
2xz
1y
4y.
+.y2
2yb
2yc
2yd
@@ -446,6 +462,7 @@
2yz
1z
4z.
+.z2
2zb
2zc
2zd
@@ -1040,8 +1057,19 @@ v2r
4ts.
san4c5t
plan4c5t
+o1eu2
+a1ae2
+a1aó2
+eo1á2
+eo1e2
+o1ae2
+o1eó2
2no.
2t2l
+2t2s
+2t2x
+2t2z
+tz3s4ch
4caca4
4cago4
4caga4
@@ -1058,7 +1086,7 @@ plan4c5t
4meables.
4pedo4
4culo4
-3mente.
+5mente.
4i3go.
4es.
4és
@@ -1457,6 +1485,17 @@ 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
@@ -1516,17 +1555,6 @@ ana3lí
.anu3da
.anu3l
asu3b2
-aero1h
-aero1a2
-aero1e2
-aero1i2
-aero1o2
-aero1u2
-aero1á2
-aero1é2
-aero1í2
-aero1ó2
-aero1ú2
anfi1h
anfi1a2
anfi1e2
@@ -1570,9 +1598,12 @@ acante2
4ísticos.
4ística.
4ísticas.
-t4eo3nes.
+pante4o3n
+.anteo3nes
mante4a
e4a3miento
+e4ándo
+tras3antea
.anti1h
.anti1a2
.anti1e2
@@ -1608,6 +1639,11 @@ auto1é2
auto1í2
auto1ó2
auto1ú2
+.bi1anual
+.bi1aur
+.bi1ox
+.bi1ó2x
+.bi1un
biblio1h
biblio1a2
biblio1e2
@@ -1619,6 +1655,21 @@ 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
@@ -1697,7 +1748,6 @@ cito1é2
cito1í2
cito1ó2
cito1ú2
-3c2neor
cnico1h
cnico1a2
cnico1e2
@@ -1719,33 +1769,29 @@ cnico1ú2
.co2í2
.co2ó2
.co2ú2
-co4á3gul
-co4acci
-co4acti
-co4adju
-co4a3dun
-co4adyu
-co3agen
-co4a3gul
-co4a3lic
-co4aptac
-co4art
-co4árt
-co4e3fic
-co4erc
-co4erz
-co4e3tá
-co3exis
-co4imbr
-co4inci
-co4i3to
-co3n4imbri
-co4o3per
-co4o3pér
-co4opt
-co4ord
-con1imbr
-con1urb
+.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
@@ -1796,6 +1842,8 @@ deca1ú2
4é3dricos.
4é3drica.
4é3dricas.
+4í3ble.
+4í3bles.
.de2sa2
.de2se2
.de2si2
@@ -1807,7 +1855,6 @@ deca1ú2
.de2só2
.de2sú2
deca2i3mient
-decimo1
3sa.
3sas.
de2s3órde
@@ -1816,7 +1863,7 @@ de2s3abast
de2s3aboll
de2s3aboto
de2s3abr
-desa3brid
+des4a3brid
de2s3abroch
de2s3aceit
de2s3aceler
@@ -1845,6 +1892,7 @@ de2s3afic
de2s3afil
de2s3afin
de2s3afor
+de2s3agu
desa3gú
desa3garr
de2s3agraci
@@ -1852,8 +1900,7 @@ de2s3agrad
de2s3agravi
de2s3agreg
de2s3agrup
-de2s3agu
-desa3guisado
+des4a3guis
de2s3aherr
de2s3ahij
de2s3ajust
@@ -1861,10 +1908,10 @@ de2s3alagar
de2s3alent
de2s3alfom
de2s3alfor
-de2s3aliñ
-desa3lin
de2s3alien
-de2s3aline
+de2s3a4line
+de2s3a4liné
+de2s3aliñ
desa3liv
de2s3alm
de2s3almid
@@ -1918,8 +1965,6 @@ de2s3articul
de2s3asent
de2s3asist
de2s3asn
-desa3soseg
-desa3sosieg
de2s3atenc
de2s3atend
de2s3atiend
@@ -2031,7 +2076,6 @@ de3s4ért
de2s3espa
de3sesperac
de2s3esperanz
-de3sesper
de2s3estabil
de2s3estim
de3sider
@@ -2093,18 +2137,7 @@ de2s3ub4ic
de2s3unir
de2s3unier
de2s3unim
-.dieci1o2
-dodeca1h
-dodeca1a2
-dodeca1e2
-dodeca1i2
-dodeca1o2
-dodeca1u2
-dodeca1á2
-dodeca1é2
-dodeca1í2
-dodeca1ó2
-dodeca1ú2
+.diecio2
ecano1h
ecano1a2
ecano1e2
@@ -2138,22 +2171,25 @@ ectro1é2
ectro1í2
ectro1ó2
ectro1ú2
-.en2a2
-.en2e2
-.en2i2
-.en2o2
-.en2u2
-.en2á2
-.en2é2
-.en2í2
-.en2ó2
-.en2ú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.
@@ -2187,7 +2223,6 @@ ento1é2
ento1í2
ento1ó2
ento1ú2
-4emboca
entre1h
entre1a2
entre1e2
@@ -2221,6 +2256,78 @@ 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
@@ -2279,6 +2386,17 @@ 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
@@ -2347,6 +2465,7 @@ hemo1ó2
hemo1ú2
2al.
2ales.
+.hepta1e
hexa1h
hexa1a2
hexa1e2
@@ -2381,6 +2500,33 @@ 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
@@ -2403,6 +2549,17 @@ 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
@@ -2497,12 +2654,22 @@ infra1ú2
.de3s4in3ter2e3sá
.de3s4in3ter2e3sé
.de3s4in3ter2e3só
-3te3ri3n
-4te4r5i4nsu
+4n3te3ri3n
+4n4te4r5i4nsu
.in3te3r4rog
.in3te3r4rupc
.in3te3r4rupt
.in3te3r4rump
+inter4és
+inte3r4esar
+inte4r4i4n4
+inter5ins5t
+inte5r4regno
+inte3r4ior4
+4i4ano.
+4i4ana.
+4i4anos.
+4i4anas.
intra1h
intra1a2
intra1e2
@@ -2561,15 +2728,13 @@ mal3q
mal3s
mal3t
mal3v
-bien2
-bien3h
-bien3v
-bien3q
-bien3m
-bien3t
-b4ien3do.
-.su3b4ien
-b4ien3das.
+.mal1acon
+.mal1acos
+.mala1e
+.mal1andant
+.mal1andanz
+.mal1est
+.mal1int
maxi1h
maxi1a2
maxi1e2
@@ -2625,22 +2790,24 @@ micro1é2
micro1í2
micro1ó2
micro1ú2
-mili1h
-mili1a2
-mili1e2
-mili1i2
-mili1o2
-mili1u2
-mili1á2
-mili1é2
-mili1í2
-mili1ó2
-mili1ú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
@@ -2729,6 +2896,7 @@ neo1é2
neo1í2
neo1ó2
neo1ú2
+3c2neor
neto1h
neto1a2
neto1e2
@@ -2808,6 +2976,11 @@ paleo1é2
paleo1í2
paleo1ó2
paleo1ú2
+.pa4n1a4meri
+.pa4n1europ
+.pa4n1afri
+.pa4n1hisp
+.pa4n1ópti
para1h
para1a2
para1e2
@@ -2822,6 +2995,8 @@ para1ú2
para2is.
aí5so.
aí5sos.
+para4íso
+para4ulata
penta1h
penta1a2
penta1e2
@@ -2873,6 +3048,7 @@ poli4árq
poli4éste
poli4andr
poli4antea
+poli4arca
expoli4
.pos2t2a2
.pos2t2e2
@@ -2896,6 +3072,10 @@ s3ti3lla.
s3ti3llas.
s3ti3llón.
s3ti3llones.
+s3tor.
+s3tora.
+s3toras.
+s3tores.
.pos3tó3ni
.pos3terg
.pos3te3ri
@@ -2905,10 +3085,6 @@ s3ti3llones.
.pos3ti3za
.pos3ti3zo
.pos3tu3ra
-s3tor.
-s3tora.
-s3toras.
-s3tores.
.pos3tu3la
.pos3tu3lá
.pos3tu3le
@@ -2917,18 +3093,19 @@ s3tores.
.post3impr
.post3ind
.post3ope
-.post3rev
+.pos2t3rev
+.pos2t3rom
.pre2a2
.pre2e2
.pre2i2
.pre2o2
.pre2u2
-.pre2h2
.pre2á2
.pre2é2
.pre2í2
.pre2ó2
.pre2ú2
+.pre1h2
pre3elij
pre3elig
pre3exis
@@ -2942,12 +3119,12 @@ pre3opin
.pro2i2
.pro2o2
.pro2u2
-.pro2h2
.pro2á2
.pro2é2
.pro2í2
.pro2ó2
.pro2ú2
+.pro3abort
proto1h
proto1a2
proto1e2
@@ -2959,6 +3136,30 @@ 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
@@ -3020,6 +3221,20 @@ ea3cias.
.re3usár
.re3utiliz
.re3utilíz
+.re3a2eg
+.re3a2q
+.re3a2z
+.re3a2grup
+.re3i2m
+.re3inc
+.re3ing
+.re3ins
+.re3int
+.re3o2b
+.re3oc
+.re3oj
+.re3orga
+.re3unt
rmano1h
rmano1a2
rmano1e2
@@ -3053,17 +3268,6 @@ romo1é2
romo1í2
romo1ó2
romo1ú2
-sobre1h
-sobre1a2
-sobre1e2
-sobre1i2
-sobre1o2
-sobre1u2
-sobre1á2
-sobre1é2
-sobre1í2
-sobre1ó2
-sobre1ú2
semi1h
semi1a2
semi1e2
@@ -3079,19 +3283,30 @@ i2a.
i2as.
2ótic
emi2o2
-seudo1h
-seudo1a2
-seudo1e2
-seudo1i2
-seudo1o2
-seudo1u2
-seudo1á2
-seudo1é2
-seudo1í2
-seudo1ó2
-seudo1ú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
socio1h
socio1a2
socio1e2
@@ -3147,6 +3362,13 @@ a3rios.
.sub3esta
.su3burbi
.su4b5rein
+.su2d1a2fr
+.su2d1a2me
+.su2d1este
+su4d3oes
+.su2r1a2me
+.su2r1est
+.su2r1oes
supe2r3r
supe2r1a2
supe2r1e2
@@ -3158,10 +3380,17 @@ 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.
@@ -3171,9 +3400,9 @@ supe3r4á3vits.
4e3riormente.
4e3rioridad.
4e3rioridades.
-4e3ra3ble.
-4e3ra3bles.
-4e3ra3blemente.
+4e3r4a3ble.
+4e3r4a3bles.
+4e3r4a3blemente.
pe5r4ante
perpon5d6r
supra1h
@@ -3212,6 +3441,9 @@ tele1ó2
tele1ú2
4ósteo.
4ósteos.
+.tele1imp
+.tele1obj
+.tele4o3lót
termo1h
termo1a2
termo1e2
@@ -3245,6 +3477,55 @@ 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
@@ -3256,8 +3537,6 @@ tropo1é2
tropo1í2
tropo1ó2
tropo1ú2
-poi3de.
-poi3des.
ultra1h
ultra1a2
ultra1e2
@@ -3269,6 +3548,28 @@ 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
@@ -3280,99 +3581,18 @@ xeno1é2
xeno1í2
xeno1ó2
xeno1ú2
-inter4és
-inter4esar
-inter4in
-inter4ino
-inter4ior
-mili4ar
-mili4ario
-para4íso
-para4ulata
-super4able
-super4ación
-super4ior
-tran4sacc
-trans4ar
-trans4eúnte
-trans4iber
-trans4ición
-trans4ido
-trans4igen
-trans4igir
-trans4istor
-trans4itab
-trans4it
-trans4itorio
-trans4ubsta
-ultra4ísmo
+zoo1h
+zoo1a2
+zoo1e2
+zoo1i2
+zoo1o2
+zoo1u2
+zoo1á2
+zoo1é2
+zoo1í2
+zoo1ó2
+zoo1ú2
wa3s4h
-.bi1anual
-.bi1aur
-.bien1and
-.bien1apa
-.bien1ave
-.bien1est
-.bien1int
-.bi1ox
-.bi1ó2x
-.bi1un
-.en1aceit
-.en1aciy
-.en1aguach
-.en1aguaz
-.en1anch
-.en1apa
-.en1arb
-.en1art
-.en2artr
-.en1ej
-.hepta1e
-.intra1o
-.intra1u
-.mal1acon
-.mal1acos
-.mala1e
-.mal1andant
-.mal1andanz
-.mal1est
-.mal1int
-.pa4n1a4meri
-.pa4n1europ
-.pa4n1afri
-.pa4n1ópti
-3p2sic
-3p2siq
-.re3a2eg
-.re3a2q
-.re3a2z
-.re3a2grup
-.re3i2m
-.re3inc
-.re3ing
-.re3ins
-.re3int
-.re3o2b
-.re1oc
-.re1oj
-.re3orga
-.re1unt
-.retro1a
-.su2d1a2fr
-.su2d1a2me
-.su2d1est
-su4d3oes
-.sur1a2me
-.sur1est
-.sur1oes
-.tele1imp
-.tele1obj
-.tra2s1a
-.tra2s1o
-.tra2s2oñ
-.tran2s1alp
-.tran2s1and
-.tran2s1atl
-.tran2s1oce
-.tran2s1ur
-.tri1ó2x} \ No newline at end of file
+3hablante
+3habiente
+3aficionad} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-et.hyp
index 33a2c24396f..33a2c24396f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-et.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-et.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-et.pat
index 024e7610dd0..024e7610dd0 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-et.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-et.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.hyp
index 85f620e90c2..85f620e90c2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.pat
index 77f1f480326..77f1f480326 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.hyp
index 944dbd7a808..944dbd7a808 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.pat
index a2b4dad7c4b..a2b4dad7c4b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.hyp
index 715889832c4..715889832c4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.pat
index 540785c6e1f..540785c6e1f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.hyp
index 8d98f2de4d7..8d98f2de4d7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.pat
index 7aee4ea65d8..7aee4ea65d8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.hyp
index 4491ccb47bc..4491ccb47bc 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.pat
index 9c84016054c..9c84016054c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.hyp
index 8161b083680..8161b083680 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.pat
index 1efa981e0c4..1efa981e0c4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-is.hyp
index fbb10dc85d9..fbb10dc85d9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-is.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-is.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-is.pat
index e365f707214..e365f707214 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-is.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-is.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-it.hyp
index f9877a6ec6b..f9877a6ec6b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-it.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-it.pat
index 12a9edf33b4..12a9edf33b4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-it.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-la.hyp
index 266c3333bac..266c3333bac 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-la.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-la.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-la.pat
index e6cabb9dcc2..e6cabb9dcc2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-la.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-la.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.hyp
index 1d7dd564af8..1d7dd564af8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lt.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.pat
index 41474fa295e..41474fa295e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lt.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lv.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.hyp
index 2f1f4b0b1b7..2f1f4b0b1b7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lv.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lv.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.pat
index 8fffdc8cdeb..8fffdc8cdeb 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lv.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ml.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.hyp
index 7dba49173d1..7dba49173d1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ml.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ml.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.pat
index b53251a69fa..b53251a69fa 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ml.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.hyp
index f81ec6e5f46..f81ec6e5f46 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-mn.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.pat
index 48a6b957730..48a6b957730 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-mn.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.hyp
index 85bd4f8e131..85bd4f8e131 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.pat
index ea562eebd46..ea562eebd46 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.hyp
index 370e03ae59a..370e03ae59a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.pat
index bb0a4a86f5f..bb0a4a86f5f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.hyp
index 552576f8dc3..552576f8dc3 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.pat
index 37822ce3e62..37822ce3e62 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.hyp
index e7c40e6d257..e7c40e6d257 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.pat
index 6934fa4b23a..6934fa4b23a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.hyp
index 73b3cb6e2e3..73b3cb6e2e3 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.pat
index 5a284c087fe..5a284c087fe 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.hyp
index 488a4b777b6..488a4b777b6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.pat
index bf0e71fc116..bf0e71fc116 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.hyp
index 95aca29e79f..95aca29e79f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.pat
index 787b95c23b6..787b95c23b6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.hyp
index fdc5005f30b..fdc5005f30b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.pat
index 66d32700a1a..66d32700a1a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.hyp
index a1ebafc72c3..a1ebafc72c3 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.pat
index 67167926b19..67167926b19 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.hyp
index 86dd41074c1..86dd41074c1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.pat
index 8c6d8f27ce1..8c6d8f27ce1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sr.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.hyp
index 53073f6bdad..53073f6bdad 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.pat
index 380ca124af7..380ca124af7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-th.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-th.hyp
index 17a1bba1546..17a1bba1546 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-th.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-th.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-th.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-th.pat
index 7e37831da78..5b0ad206ba0 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-th.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-th.pat
@@ -35,6 +35,7 @@
กข5มา
กข5มู
กข5ลา
+กข5ศั
ก4ขเ
กข5เท
กข5เว
@@ -44,7 +45,6 @@
ก1จ
ก1ช
2กซ
-ก3ซิ
กญ5จน
กฎ5หม
กฎ5เก
@@ -78,6 +78,7 @@
กร5รา
กร5ลา
ก5ราค
+ก5รินท
ก4รู
กร5ไฟ
กล5นค
@@ -95,7 +96,6 @@
กส4น
ก4สโ
ก1ห
-3กอน
กอ5อิ
กะ5ถั
กะ5ผล
@@ -112,11 +112,10 @@
กำ5ด้
กำ5ทอ
กำ5ผล
+1กิ
กิ5กะ
-1กิจ
กิ4ต
กิ5นี
-3กิริ
กี5รณ
กี5รต
กี5สถ
@@ -152,7 +151,6 @@
ขา5ก๊
ขา5ทน
ขิ5ปส
-ขิ5ไณ
ขี้1
ข่5มุ
ข่5หง
@@ -183,6 +181,7 @@
คร5ลิ
คร5หา
4ค5รัก
+ค5ราต
คฤ5หบ
คฤ5หา
คฤ5โฆ
@@ -343,7 +342,6 @@
ชา5ยต
ชา5สง
ชำ5งั
-3ชิต
ชิ5นี
ชิ5รณ
ชิ5แก
@@ -363,11 +361,12 @@
ช้5ได
ซน5ทร
ซ5ราม
-ซล5มอ
+ซล5ฟี
1ซั
1ซา
ซา5ชู
ซา5มู
+1ซิ
ซิ5ตร
ซิ5ฟิ
ซิ5แล
@@ -382,11 +381,13 @@
ซู5บิ
ซู5ริ
ซู5ลิ
+ซู5ฮา
ซ1เ
ซ1โ
ซ่5ง่
ซ่5ซ้
1ซ่า
+ซ์5คล
ญจ5ดุ
ญ4จน
ญ5จ5นท
@@ -476,7 +477,6 @@
1ดั
ดัส5ต
1ดา
-ดา5กอ
ดา5มุ
ดา5รก
ดา5สว
@@ -514,6 +514,7 @@
ต4ตส
ต4ตโ
ต5ถกะ
+ตถ5กิ
ต3ถา
ต5ถุป
ต5ถุศ
@@ -530,7 +531,6 @@
ต1ภ
2ตย
4ตรก
-ตร5กิ
ตร5งอ
ตร5จี
ตร5จุ
@@ -554,7 +554,6 @@
ต4สแ
ตส5แต
ตอ5ม่
-ตอ5รอ
ตะ5ใภ
1ตั
1ตา
@@ -607,6 +606,7 @@
ต์5คล
ต์5ฟู
ต์5ศต
+ถ4กิ
ถด5ถอ
ถม5ถื
ถล5ไถ
@@ -652,6 +652,7 @@
ท5ยาน
ทร5คต
ทร5คร
+ทร5ชิ
ทร5ธน
3ทรร
ทร5สโ
@@ -770,7 +771,6 @@
น4นต
น4นท
น4นร
-นน5รา
น1บ
นบ5นอ
น1ป
@@ -782,6 +782,7 @@
นพ5ศู
นภ5ศู
น5ยนต
+น3รา
นฤ5คห
นฤ5ปเ
นฤ5เท
@@ -813,6 +814,7 @@
นา5ฬิ
4นาะ
1นิ
+นิ5จู
นิ5ด้
นิ5ฟอ
นิ5มน
@@ -885,6 +887,7 @@
1บู
บู4ช5น
บู5ติ
+บู5ย่
บ1เ
บ1แ
บ1โ
@@ -903,6 +906,7 @@
ปม5ด้
ป4ยุ
ปร5ตอ
+ปร5ติ
ปร5ตี
ปร5ตุ
ปร5ผั
@@ -910,6 +914,7 @@
1ประ
ปร5แก
ปร5แท
+ปร5ไฟ
ปล5ญว
ป4วา
ปส4ต
@@ -922,6 +927,7 @@
ปาร4
ปา5รเ
ปิ5ดอ
+ปิ5ดิ
ปิ5ยภ
ปิ5ยอ
ปิ5หก
@@ -968,6 +974,7 @@
พร5มี
1พรร
พ4รู
+พร5ไฟ
3พฤก
พฤ5ฒา
พล5ทิ
@@ -1023,7 +1030,6 @@
ภิ5มห
ภิ3ร
ภิ5สม
-ภิ5ไธ
ภุ5ชง
1ภู
ภู5ฏา
@@ -1048,6 +1054,7 @@
มณ5บร
มณ5พร
มณ5เฑ
+มณ5เพ
มด5ยอ
มด5ลู
ม1ต
@@ -1122,13 +1129,13 @@
มา3ว4
1มิ
มิ5กภ
-มิ5ชิ
มิ5ซร
มิ5ตล
มิ5ถิ
มิ5น่
มิ5ฟล
มิ5ลำ
+มิ5ลี
มิ5แพ
มี5ขม
3มืด
@@ -1276,7 +1283,7 @@
ร1ป
ร4ปณ
ร5พชา
-ร5พชิ
+ร5พ5ชิ
รพ5ทิ
ร1ภ
ร4ภย
@@ -1330,6 +1337,7 @@
รา5หุ
รำ5งั
รำ5จว
+ริ5กอ
ริ5ซึ
ริ5ตร
ริ5ทึ
@@ -1376,8 +1384,9 @@
ร่5ตร
ร่5ร่
ร่5หล
-ร์5กิ
+ร์5กอ
ร์5กี
+ร์5คั
ร์5ดิ
ร์5ติ
ร์5ตู
@@ -1410,6 +1419,7 @@
ลบ5ไส
ลป5ตอ
ลม5งว
+ล3มอ
2ลย
ล1ล
ล4ล์
@@ -1435,7 +1445,6 @@
ลา5ส้
ลิ5ก่
ลิ5จู
-ลิ5ซิ
ลิ5ซึ
ลิ5ตอ
ลิ5นอ
@@ -1444,8 +1453,6 @@
ลิ5บา
ลิ5ฟอ
ลิ5มู
-ลิ5ไท
-ลิ5ไล
ลี5ตะ
3ลีน
ลี5ผล
@@ -1455,6 +1462,7 @@
ลุก5ล
ลุ5ล่
ลูก1
+ลู5ซี
ลู5ที
ลู5มิ
ลู5ลอ
@@ -1500,7 +1508,6 @@
ว1พ
วม5รอ
ว3มู
-วย5กิ
วย5ก้
วย5จี
วย5ริ
@@ -1515,6 +1522,7 @@
1วรร4
ว4ร์
วล5ระ
+วส5ปอ
ว1ห
วอ5ชิ
1วั
@@ -1563,7 +1571,6 @@
วิ5สร
วิ5สฤ
วิเล5
-วิ5ไล
วี5คู
วี5ชน
วี5ดิ
@@ -1677,7 +1684,6 @@
สัน3ถ
สัม3
1สา
-สา5กิ
สา5คเ
4สาธ
สา5นึ
@@ -1811,7 +1817,6 @@
อน5ฝู
อน5ฟิ
อน5ย้
-อน5รา
อ4นา
อ4นุ1
อบ5ช้
@@ -1819,7 +1824,7 @@
อบ5บี
อบ3อ
อบ5ไล
-อป5กิ
+อป5คอ
อป5ติ
อป5พร
อป5พล
@@ -1853,7 +1858,8 @@
อย5ได
อร5ชุ
อร5มน
-อ3รั
+อ3รอ
+อ1รั
อ3รา
อ1ริ
อ1รี
@@ -1862,7 +1868,6 @@
อล5จี
อล5นี
อล5ฟ่
-อล5มอ
อล5หม
อ3ลั
อ1ลิ
@@ -1872,6 +1877,7 @@
อษ5ฐภ
อส5กา
อส5ติ
+อส5ตู
อส5นี
อส5พล
อส5ฟอ
@@ -1957,7 +1963,6 @@
ฮก5ฮื
ฮน5รี
ฮฟ5วี
-ฮล5ซิ
ฮล5ดิ
3ฮอล
ฮา5นอ
@@ -2117,7 +2122,6 @@
ัล5ปพ
ัล5ปิ
ัล5ฟิ
-ัล5มอ
ัล5มุ
ัล5ออ
ัล5ไซ
@@ -2126,6 +2130,7 @@
ัศ5นี
ัศ5มี
ัศ5เจ
+ัศ5ไน
ัส5กา
ัส5ดง
ัส5ดน
@@ -2146,6 +2151,7 @@
า1กร
า5กรร
าก5รุ
+า3กอ
าก5ฮอ
า3กี
า1ข
@@ -2225,7 +2231,6 @@
าน5ผู
าน5รว
าน5รั
-าน5รา
าน5ฤด
าน5อว
านุ1
@@ -2310,7 +2315,6 @@
า1รุ
า1ล
า4ลก
-าล5กิ
า4ลค
า4ลจ
าล5ฎี
@@ -2321,6 +2325,7 @@
าล5ปก
าล5พร
า4ลว
+า4ลส
าล5อุ
า4ลโ
า4ล์
@@ -2389,7 +2394,6 @@
ิก5ล้
ิก5วา
ิก5ษุ
-ิ3กิ
ิกิ5ส
ิ1ข
ิ4ขส
@@ -2397,6 +2401,7 @@
ิ1ค
ิ4คต
ิค5ตอ
+ิ4คน
ิ4คหะ
ิฆ5เน
ิง5ชี
@@ -2408,6 +2413,7 @@
ิจ5ศี
ิช4น
ิช5ลิ
+ิ3ชิ
ิช5เช
ิญ5หน
ิญ5โญ
@@ -2478,7 +2484,6 @@
ิ1ลั
ิ1ลา
ิ1ลิ
-ิว5กิ
ิว5ซี
ิว5ทร
ิว5บิ
@@ -2511,6 +2516,7 @@
ิ1เ
ิเน4
ิ1โ
+ิ1ไ
ี1ก
ี4กต
ี4กย
@@ -2653,7 +2659,6 @@
ุด5ลุ
ุด5อู
ุต5กว
-ุต5กิ
ุต5ซอ
ุต5ตก
ุ5ตระ
@@ -2668,13 +2673,11 @@
ุน5ผล
ุน5รอ
ุบ5งิ
-ุบ5ซิ
ุบ5บิ
ุบ5ผล
ุบ5ยิ
ุบ5อิ
ุป5กร
-ุป5กิ
ุป5จา
ุป5ถั
ุป5ทา
@@ -2784,6 +2787,7 @@
ูล5กร
ูล5ค่
ู3ลั
+ูว5ไน
ูส4ว
ู1เ
ู1โ
@@ -2810,7 +2814,6 @@
เซ5นอ
เซ5รุ
เซ5แค
-เด5ซิ
เด5บิ
เด5รั
เด5ลา
@@ -2850,14 +2853,15 @@
เพ5ทุ
เพ5สล
เพ5โท
+เพ5ไน
เฟ5อี
เภ5ตร
เภ5ทุ
เม5ฆิ
เม5ดิ
เม5ลา
+เร5กอ
เร5กะ
-เร5ซิ
เร5มอ
เร5รว
เร5วด
@@ -2871,7 +2875,9 @@
เลิ4
เว5ก้
เว5ทิ
+เว5ล่
เว5ฬุ
+เว5ไน
เส5ฉว
เส5นีย์
เส5รี
@@ -2887,7 +2893,6 @@
เห5สั
เฬ5วร
เอ5กว
-เอ5ซิ
เอ5ธิ
เอ5ฬก
เฮ5ละ
@@ -2907,7 +2912,7 @@
แด5รี
แต5แต
แน2
-แป5ซิ
+แบ4ค
แ4ปร
3แพท
แฟ5รี
@@ -2936,6 +2941,7 @@
โค5ริ
โค5ลอ
โค5ลั
+โค5ล่
โค5ออ
โค5อะ
โค5แท
@@ -2968,12 +2974,12 @@
โท5แอ
โธ5ทน
โธ5ปก
+โธ5ปิ
โธ5วน
โธ5เฟ
โน5ทุ
โน5ปจ
โน5รม
-โน5รา
โบ5ชุ
โบ5ซอ
โบ5ต้
@@ -2982,13 +2988,13 @@
โบ5รา
โบ5ลิ
โบ5ล่
+โบ5อิ
โบ5ไฮ
โป5กส
โป5ลิ
โป5แล
โป5โป
โป5โล
-โพ5ซิ
โพ5ทะ
โพ5ระ
โพ5ลา
@@ -3022,12 +3028,10 @@
โร5แม
โร5ไล
โล5กร
-โล5กิ
โล5กี
โล5จน
โล5ปุ
โล5มก
-โล5มอ
โล5รา
โล5วะ
โล5หิ
@@ -3048,7 +3052,6 @@
โห5รา
โห5สิ
โห5ฬา
-โอ5กิ
โอ5คล
โอ5ค็
โอ5ดี
@@ -3081,7 +3084,6 @@
ไท5ฟอ
ไท5รอ
ไท5แท
-3ไนย
ไป5ริ
ไพ5ชย
ไพ5ธอ
@@ -3098,7 +3100,6 @@
ไม้1
ไล5บร
ไล5บี
-ไว5กิ
ไว5รั
ไว5อะ
ไห5รณ
@@ -3173,7 +3174,6 @@
่อย3
่อ5ยอ
่อ5ย่
-่อ5รอ
่อ5ร่
่อ3ล
่อ5ว่
@@ -3268,12 +3268,15 @@
๊ก5ริ
๊ก5ลุ
๊ก5ฮว
+๊ง5บ๊
๊ป5ซี
๊ย5ก่
๋ย5อิ
๋อ5ด๋
์ค5สเ
์ค5แล
+์ต5ไท
+์ท5ไท
์1บ
์1พ
์1ร
@@ -4061,7 +4064,6 @@
ู7ลู
5ตู.
5ยู.
-ิ7ชิ
7ฆี.
ิ7จี
ี7จี
@@ -4290,4 +4292,5 @@
ส7ตุ
ลิ7บง
ฮ7โ
-7อุ.} \ No newline at end of file
+7อุ.
+ิศ7รา} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.hyp
index 6302966fb0b..6302966fb0b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tk.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.pat
index a5b456c748d..a5b456c748d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tk.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.hyp
index 89c57837565..89c57837565 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.pat
index 9126e54def8..9126e54def8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-uk.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.hyp
index 97dde24dde0..97dde24dde0 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-uk.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-uk.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.pat
index 24da6a9fda6..24da6a9fda6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-uk.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-us.hyp
index a9f901f3f4d..a9f901f3f4d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-us.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-us.pat
index f4155353cf8..f4155353cf8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-us.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.hyp b/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.hyp
index aa58c19c2be..aa58c19c2be 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-zh.hyp
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.hyp
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.pat b/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.pat
index 7fde63bc0f9..7fde63bc0f9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-zh.pat
+++ b/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.pat
diff --git a/Master/texmf-dist/tex/context/patterns/lang-af.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-af.lua
index 31becd0bab4..6b9e4407a45 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-af.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-af.lua
@@ -9,11 +9,7 @@ return {
["metadata"]={
["mnemonic"]="af",
["source"]="hyph-af",
- ["texcomment"]="% Afrikaans hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Hyphenation patterns for Afrikaans\
+ ["texcomment"]="% Hyphenation patterns for Afrikaans\
%\
% This work may be distributed and/or modified under the\
% conditions of the LaTeX Project Public License, either version 1.3\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-agr.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-agr.lua
index 976965f33fc..5f5b786435c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-agr.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-agr.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="agr",
["source"]="hyph-grc",
- ["texcomment"]="% Hyphenation patterns for Ancient Greek\
-% \
-% (more info about the licence to be added later)\
-% \
-% ****************************************************************\
+ ["texcomment"]="% ****************************************************************\
%\
% File name: hyph-grc.tex\
%\
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-ala.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ala.lua
new file mode 100644
index 00000000000..dfec3eaa3bd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ala.lua
@@ -0,0 +1,55 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="ala",
+ ["source"]="hyph-la-x-classic",
+ ["texcomment"]="%\
+% ********** hyph-la-x-classic.tex *************\
+%\
+% Copyright 2014 Claudio Beccari\
+% [classical latin hyphenation patterns]\
+%\
+% -----------------------------------------------------------------\
+% IMPORTANT NOTICE:\
+%\
+% This program can be redistributed and/or modified under the terms\
+% of the LaTeX Project Public License Distributed from CTAN\
+% archives in directory macros/latex/base/lppl.txt; either\
+% version 1 of the License, or any later version.\
+% -----------------------------------------------------------------\
+%\
+% Patterns for the classical Latin language; classical spelling\
+% with the (uncial) lowercase `v' written as a `u' is supported.\
+% Classical Latin hyphenation patterns are different from those of\
+% \"plain\" Latin, the latter being more adapted to modern Latin.\
+%\
+%\
+% Prepared by Claudio Beccari\
+% e-mail claudio dot beccari at gmail dot com\
+%\
+% Aknowledgements: This file has been substantially upgraded with\
+% the contributions of Francisco Gracia. \
+%\
+% \\versionnumber{1.2} \\versiondate{2014/10/06}\
+%\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
+%\
+% \\message{Classical Latin hyphenation patterns `hyph-la-x-classic'\
+% Version 1.2 <2014/10/06>}\
+%\
+%\
+% ",
+ },
+ ["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",
+ ["length"]=5322,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=740,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-bg.lua
index e6b8bb7e0af..84d9341b430 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-bg.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="bg",
["source"]="hyph-bg",
- ["texcomment"]="% Bulgarian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Bulgarian hyphenation patterns, version 1.7, July 2008\
+ ["texcomment"]="% Bulgarian hyphenation patterns, version 1.7, July 2008\
% Copyright 1994-2008 Georgi Boshnakov\
% Georgi dot Boshnakov at manchester dot ac dot uk\
%\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ca.lua
index c28bd825827..36cce0eaae7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ca.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="ca",
["source"]="hyph-ca",
- ["texcomment"]="% Catalan hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: cahyph.tex (2003-09-08)\
-% Author: Gonçal Badenes <g.badenes at ieee.org>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from cahyph.tex, whose\
+% author has been identified as Gonçal Badenes <g.badenes at ieee.org>\
+% (2003-09-08). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% Hyphenation patterns for Catalan.\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-cs.lua
index 689030efe28..22fe9d2f28f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-cs.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="cs",
["source"]="hyph-cs",
- ["texcomment"]="% Czech hyphenation patterns (Pavel Sevecek, v3, 1995)\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: czhyphen.tex (), czhyphen.ex ()\
-% Author: Pavel Ševeček <pavel at lingea.cz>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from czhyphen.tex and\
+% czhyphen.ex, whose author has been identified as Pavel Ševeček <pavel at\
+% lingea.cz>. The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
%%% ====================================================================\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-cy.lua
index ded965fbb61..9e3c739a320 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-cy.lua
@@ -6,35 +6,51 @@ return {
["metadata"]={
["mnemonic"]="cy",
["source"]="hyph-cy",
- ["texcomment"]="% Welsh hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-%% hyph-cy.tex, Welsh hyphenation patterns\
-%% Copyright 1996 Yannis Haralambous\
-%% <yannis dat haralambous at telecom-bretagne dot eu>\
+ ["texcomment"]="% copyright: Copyright 1996 Yannis Haralambous\
+% title: Welsh hyphenation patterns\
+% version: 1996\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% - This file is available under any of these licences:\
+% -\
+% name: LPPL\
+% status: maintained\
+% maintainer: Yannis Haralambous\
+% version: 1.0\
+% or_later: true\
+% url: http://www.latex-project.org/lppl/lppl-1-0.html\
+% -\
+% name: MIT\
+% url: https://opensource.org/licences/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person\
+% obtaining a copy of this software and associated documentation\
+% files (the \"Software\"), to deal in the Software without\
+% restriction, including without limitation the rights to use,\
+% copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the\
+% Software is furnished to do so, subject to the following\
+% conditions:\
%\
-% This work may be distributed and/or modified under the\
-% conditions of the LaTeX Project Public License, either version 1.0\
-% of this license or (at your option) any later version.\
-% The latest version of this license is in\
-% http://www.latex-project.org/lppl.txt\
+% The above copyright notice and this permission notice shall be\
+% included in all copies or substantial portions of the Software.\
%\
-% This work has the LPPL maintenance status `maintained'.\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\
+% OTHER DEALINGS IN THE SOFTWARE.\
+% changes:\
+% - 1996 - last change to patterns\
+% - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex)\
+% - June 2011 - added LPPL licence\
+% - March 2016 - added MIT licence\
%\
-% The Current Maintainer of this work (patterns) is Yannis Haralambous.\
-%\
-% This work consists of the file hyph-cy.tex and is part of hyph-utf8\
-% maintained by tex-hyphen team which also contains derived files.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-% CHANGES:\
-% - 1996 - last change to patterns\
-% - 2008 - inclusion into hyph-utf8 and file rename (cyhyph.tex -> hyph-cy.tex)\
-% - June 2011 - added LPPL licence\
% ",
},
["patterns"]={
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-da.lua
index efad5da7980..7c0a315046e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-da.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-da.lua
@@ -6,84 +6,45 @@ return {
["metadata"]={
["mnemonic"]="da",
["source"]="hyph-da",
- ["texcomment"]="% Danish hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: dkcommon.tex (yyyy-mm-dd), dkspecial.tex (yyyy-mm-dd)\
-% Author: Frank Jensen <frank.jensen at hugin.com>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% This file contains the hyphenation patterns for Danish.\
-%\
-%% Copyright 1994 Frank Jensen (Frank.Jensen@hugin.com)\
-%\
-% This work may be distributed and/or modified under the\
-% conditions of the LaTeX Project Public License, either version 1.3\
-% of this license or (at your option) any later version.\
-% The latest version of this license is in\
-% http://www.latex-project.org/lppl.txt\
-% and version 1.3 or later is part of all distributions of LaTeX\
-% version 2003/12/01 or later.\
-%\
-% Changes:\
-% - 2011-01-11 - remove support for OT1 encoding\
+ ["texcomment"]="% copyright: Copyright 1994 Frank Jensen\
+% title: Hyphenation patterns for Danish\
+% version: 2011-01-11\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% - This file is available under any of these licences:\
+% -\
+% name: LPPL\
+% version: 1.3\
+% or_later: true\
+% url: http://www.latex-project.org/lppl/lppl-1-3.html\
+% -\
+% name: MIT\
+% url: https://opensource.org/licenses/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person\
+% obtaining a copy of this software and associated documentation\
+% files (the \"Software\"), to deal in the Software without\
+% restriction, including without limitation the rights to use,\
+% copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the\
+% Software is furnished to do so, subject to the following\
+% conditions:\
+%\
+% The above copyright notice and this permission notice shall be\
+% included in all copies or substantial portions of the Software.\
+%\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\
+% OTHER DEALINGS IN THE SOFTWARE.\
+% changes:\
+% - 2011-01-11 - remove support for OT1 encoding\
%\
% ",
},
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-de.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-de.lua
new file mode 100644
index 00000000000..d9aefb8e942
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-de.lua
@@ -0,0 +1,50 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="de",
+ ["source"]="hyph-de-1996",
+ ["texcomment"]="% dehyphn-x-2014-05-21.pat\
+% \
+% \\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2014-05-21 (WL)}\
+% \
+% TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung\
+%\
+%\
+% Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013, 2014 Werner Lemberg <wl@gnu.org>\
+%\
+% This program can be redistributed and/or modified under the terms\
+% of the LaTeX Project Public License Distributed from CTAN\
+% archives in directory macros/latex/base/lppl.txt; either\
+% version 1 of the License, or any later version.\
+%\
+%\
+% The word list is available from\
+%\
+% http://repo.or.cz/w/wortliste.git?a=commit;h=3a97953c0ddd099a1785ea7927cbf24e639090b0\
+%\
+% The used patgen parameters are\
+%\
+% 1 1 | 2 5 | 1 1 1\
+% 2 2 | 2 5 | 1 2 1\
+% 3 3 | 2 6 | 1 1 1\
+% 4 4 | 2 6 | 1 4 1\
+% 5 5 | 2 7 | 1 1 1\
+% 6 6 | 2 7 | 1 6 1\
+% 7 7 | 2 13 | 1 4 1\
+% 8 8 | 2 13 | 1 8 1\
+% \
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü",
+ ["data"]=".ab1a .abi4 .ab3l .abo2 .ab3ol .ab1or .ack2 .ag4n .ag4r .ag2u .ai2s .akt2a .al2e .al3k .al5l4en .al4tei .alt3s .ampe4 .amt2s .amt4sc .an3d2 .anden6k .and4ri .ang2 .an3gli .angs4 .angst3 .an3s2 .an4si. .an4tag .an3th .an3z2 .apo1 .ap5p6le. .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .arter4 .ar6t5erh .as3t .as4ta .at4h .au3d .au4f3 .au4s3 .ausch3 .ax4 .äm3 .är6schl .ät2s .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .by4t .ch2 .chi3er .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de8ments .de1o2 .de3r4en .de1s .des2e .de3sk .des2t .dien4e .do2mo .do1pe .dorf1 .dü1b .dys1 .ebe2r1 .ehe1i .ei4ds .ei3e2 .ei4na .einen6g .ei2sp .ei4st .ei4tr .eke2 .el2a .el2bi .elb3s .em3m2 .en1 .en4d3er .en5der. .en2d3r .end3s .en2gl .enn2 .enns3 .en2t3 .en4tei .en4tr .er8brecht .erb3s .er2bu .er2da .er4dan .er4dar .er4dei .erden6k .er4der .er1e .ere3c .erf4 .er1i .er8stein .erster6 .er8stritt. .er8stritten. .er4zen4 .esel4s .es3p .es3ta .es5t4e .est2h .es3to .es5tr .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fi3est .fi4le. .fi4len .fi2s .flug1 .for2t .fs4 .fu2sc .ga4t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .gene7cke .ge3r2a .ge3r2e .ge3u .gs4 .guss1 .hau2t1 .he2 .he3fe .her3an .he3ri .he6r5inn .hi4n .hin3u .hi2s .ho4met .ia4 .im2a .ima4ge .im5m2 .in1 .in3e .in3gl .ink4 .inn2e .inu1 .ioni1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4tu .li4ve. .lo4g3in .lo3ver .lus4tr .ma3d .ma3la .mal4e .ma2st .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi4t1 .mm2 .näs1c .ne4s .ni4e .nob4 .no4th .nus2 .oa3 .ob1a .obe2 .oper4 .or2a .ort2 .orts3e .os5t6alg .oste2 .ost5end .os8ten8de .oste6re .ost3r .ozo4 .öd2 .pa4r1e .par3t4h .pe2c .pes4te .pf4 .ph2 .poka2 .pro1 .ps2 .rabe4 .ra3me .ram3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .res6tr .ri2as .rich5te .ro4a .ro3m2a .rö2s1 .runder6 .rü1b .rü6cker6 .sali3e .sami3 .sch4 .se3ck .sen3s .ser2u .se2t1 .sha2 .si4te .ski1e .spiege8lei .st6 .sto4re .sucher6 .tage4s .tan4k3l .ta2to .te2e .te2f .te3no .te2s .te4st .th4 .ti2a .tid1 .ti2e .ti4me. .ti4mes .ti2s .ti5ta .to4nin .to4pl .to2w .tri3es .tro2s .ts2 .tu3ri .uf2e2 .ufer1 .um3 .umo2 .un3a2 .un3d .une2 .un3g .uni4t .un3s .uns4t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vi2e .vo4r .wah4l .wa2s .wei4ta .welter8e .welter8k .wi4e .wor2 .wort5en6 .wor8tend .wor4tu .xe3 .ya4l .za2s .zi2e .zin4st .zwe2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k4 aar5sc aas5t aata2 aa2th aa2t3r aat4s3 2a3au a1ä a1b 2aba ab4am ab1auf ab1ä ab2äu 1abd ab1eb abe1e abei1 ab1eil 4abel abe2la2 a3ber ab1er2k ab1er2r ab1er2z ab3esse 2abet 2abew 1abf 3abfi 1abg 1abh 2abi ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu 1abn a2bo. ab2of 1a2bon 2a3bor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abst2 2abst. ab3ste ab3sz 1abtei 2a3bu ab1ur 2abü 1abw 2aby aby4t 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 2ach1w a1ci ac1in 2ack. a1ckar a2ckin ack2se ack3sl ack3sta4 a1cl acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ade1s ade3s2p ades4s ade5str 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3st ad3sz ad2t1 adta2 ad4te ad4tr 2adu 2a1e ae2b ae2c a3e2d a3ei a2ek a3el. a2ela a2ele a2eli a3els ae2o3 a3e2p ae1r 3a2er2o1 ae2s ae4sc aes5t a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l afo1s a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r af4t5re af2tur a2f3ur a1g 2aga ag1a2b ag1a2d ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ag3esse age4s3ti ag3gl 3aggr 3a2git 2a2gl ag6la a4glö ag2n a2gna ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3s2ah ag4sam ag4set ags3p ag4spo ag3sta ag3ste 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh ahe1s a1h2i ahin3 ahl3a2 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1os a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr6tri ah2ta aht3h ah4t5r aht3s a1hu ah1w a1hy ai3a aian3 aid2s ai1e2 aien3 aif4 ai1fr ai3g4 a3ik. ai3ke aik4r a2il ai2lo aim2o ain2a a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e ait4 a3iv. a3ivl a3ivs a1j aje2 ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr 4akra ak3rau 3akro 2aks ak3sh 2akta ak5tan 2aktb 2aktik ak2t3r ak5t4ri 2aktsi 2aktst 2a1ku a2kun 4a3kü 1akz a1la 2ala. al1ab al3abs ala3ch2 al1af ala2g al1age a3lal al1am al3ame alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala4s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3er4w al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr alds2t 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 2ali ali4ene ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 alks4t al2l1a2b al2l3a4r al2l1au al3lend all5erfa al3les 1allgä alli5er. alli7ers. al2lob al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl al5s6terb al3sun al4tak al3tam al3tar alt3eig al4t3er3f al3ti alt1op al4tö al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä 2am4e 4ame. a2meb ame2n1 amer2a am5erf a2meri ame3ru a4mesh a3met a2mew 2amf 2amir ami3ta ami3ti 2amk 2aml 4amm. 2ammal am2mar am2mei am2min 2amml 2ammt ammu2 amni1 a2mö amp2fa2 am3pr 2am2s am3sa am4schl am3str 1amt. am2t1a am2t1ä am4tel 2amtem am4t3ern am4tö am2t3r am4tre am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2ana1s4 an1ath an4atm an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande2s an2dex an4drau an2d3rü and4sas and6spas and3ste and2su 2andu and1ur 2ane an3e2c a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang4s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 2anpr 1anr 1an3s2ä 1ansc ans2en an2seu 2ansk an3skr an3s1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr an3ti 2anto 1antr ant3rin an2tro 1antw 2a1nu anu1s a1nü 1anw 2anwet 2anzb 1anzei anze2n 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2apa 2ape a2pef a3pel a2pé a2pf a3p2fa a3pfl a3phä a2ph3t 2ap3l ap2n a2pot ap2pf 3appl ap3pu 2apr 3apri 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3rali 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg ar1ehr a2rein a4rek 4arem a3ren 4aren. are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2ari ar2ia ari3e4n ari3erd ari3erg ar1im arin3it arin5s4 ar1int a3riu ar2kal ark3amt ar2k1ar ark3aue ar2k3l ar4klag ar2kor ar4k3ri ark3sa ark3she ark4tre ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1of a2r1op a2ror 2arp 2arr ar2r3ad ar3re arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar2st ar3sta ar3t2e ar2the ar3ti artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as1ala as3au a2s1ä a2sca a4schec a3schi asch1l a2schm a3schu 4as2e a2seb a2s3e2m a3s4es 2asg 4ash a3s2hi asin2g 4asis aska3s a3skop a2s1o2f as1or a2sö a2s1p aspek6to as2ph as2pi as2po a3spu as3s2a as3s2e as4s3ei as3s2i as2s1p as2st ass3ti as3str as3stu 2as3ta a1s4tas as4tau as3te as2th as3ti as3to as4tof 2astr as4trau ast3räu as6t3re asu2s a2sü aswa2s 3a2syl a1ß aße2 aßen3 2a1t ata1 at1ab at2af at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2tä at1än at2c a2teb a3te1c ateien4 at1eig a2teli at2en a2tep ater3s2 ate2ru at2h at3ha athe1 3athl a4thr 4a3ti atil4s ati2st 3atm 4atmus ato4man 4ator a2t1ort at1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si at2so at2s1p at3ta 3attac at4tak att3ang at4tau at2tä at2tei at3t4hä at2t3rä att3s a3tub atu2n a3tü atz1er at4zerk at4zerw at2z1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au5erein auer3ö aue2s au2fa auf1an 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 4au1i au2is 2auj aule2s au3lü 4aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s6 4aun au3n2a aun2e au4nei au2nio au1nu a4unz au1o 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 3ausf 1ausg 1ausl au2so au2spr 1ausr 3aussag auss2e aus4se. auss2t 2auste aust2o aus5tri 1ausü 1ausz 2aut. au2t1äu 2aute au4ten4g au4t3erh 1auto au4trö 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 a2vr 2a1w awi3e a1x ax4am ax2e 2a1ya a1yeu ays4 aysi1 ay3t 2a1z a3z2a aza3d az2i az2o az2u ä1a äand4 ä1b ä2b3l äb2s ä1che äche1e ä1chi äch3l ä2chr äch2sp äch4st ä1chu ä1ck ä3ck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf4ro äf2s äft4s3 ä1g äge1i äge2ra äge3s ä2g3l äg2n ä2g3r äg4ra äg3str 1ä2gy äh1a 2ä3he ä3hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2ähs 2äh3t ä1hu äh1w 2äi ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl 2äle äl2l1a äl2p3 äl4schl äl2st ä1lu ämi3en 2äml ämoni3e 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 äne1s än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änk2s änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c äp4st 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l ärk2s är4ment ärm2s är1o2 ä1rö ärse2 är4si är2st ärt4e är2th ärt2s3 ä2rü är2zw ä5s4e äse3g2 äser4ei äse4ren äser2i äse3t äskop2 äskopf3 ä3s2kr ä2s1p äs6s1c äss2e äs4s3erk äs2s3t ä4s3t2 äs4tr ä3su ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ät2h ät1ob ä2t3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l ät2s1p ät2s3t ät2tei ät4tr ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äug3l 4äul 2äum äu2ma äum4s5 2ä2un äun2e äu1nu 2äu3r 2ä3us. äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äus2s1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs4 b1a2dr 2b1af 3bah bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4l3eh bal6lerg 2b3am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en bar3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2st ba4t3ent bauer4l bauer4s bau3g bau1s bau3s2k bau3sp baus4t ba1yo 3b2ä1c b2är b2äs 4b1b b3be bben3 bbens2 bbe4p bb3ler bb2lö b3bru bbru2c bb2s bbu1 2b1c 2b3d4 bde1s 1be. 3bea be3an be3ar 3beb b2ebe 1be1c be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime b2ein be1ind be1in2h bei3sc beis2e bei1s4t beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la be2l3ö bel3sz bel3t4 1bem 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 2bentb b2enti ben5t4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4hab ber4in. ber3iss ber3na b1ernt be1rop ber3st4a be3rum ber2zö 3be1s bes2a be2s1er be3slo bes2po bess4e b3esst. bes3sz beste2 be6stein be4s3tol best4r be3s4ze 3bet be2tap be3tha be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 2b1g2 bge3 bges4 2b1h2 bhut2 1bi bi3ak bib2 bibe2 bien3s bie2s 3bietu bik2a bi2ke. bi2kes 3bil bil2a bi2lau 4b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis2s1c bi2s5t b2it. b2it2a b2ite bi3ti bi2tu b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7sc 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig bling4 b4lis b2lit 3blitz b2lo b4loc b3los 2blun 3blut 3blü 2b1m 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo2c bo3ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig bor2s b1ort bor2t3r bo2sc bo4s3p bote3n4e bo3th bot2st bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra1st4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif 3brem 2b3rep b4rer 2b3riem bri2er b4rio b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü 4b1s b2s1ad bs3ar bsat2 b3sä b4sär bs2äu b5sc bs2ca bsch2 b6schan b6schef bs4cu b3se. bse2b b3sel. bse2n1 b4s1erf bs3e4r3in bs1erk b4s1ers b3s2es bsi4t bs2ku b4sl b2s1of bso2r b2sö b3s2pi bs2pl b3s2pu bss2 bs2t bst1a2b bst3ac bst1ak bs3tät bst1er b2stip b3sto b4s4tob b4stod b3stö b4strac b2s3trä bs3treu bs4tri bst3ro b3stü b4stüb b2s1un 4b3t btast3r b5te b4th btil4 bt4r b4ts2 btü1 bu2chi bu2e3 bu2f bug3 bul2la 2b3umk bunde4s bung4 b3ungn b2urg bu3r4i 4burn bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2sin bu2s1p bu2s1u bu3tan bü1c bügel3e 2b1v 2b1w by1 by3p bys2 2b1z2 bzeit1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t 3cam c4an ca2pe 3car car3n carri1 ca3s2a3 cas3t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 1ced ce2dr 2cef ce1i 2cek 1cen 1cer cere3 ce3s2h 1cet 2ceta2 ce1u 1cé 2c1f c4h 4ch. 2chab ch3a2bi cha2ck 2chaf 2ch1ak ch2anb 3chanc ch1ang ch3anst 4chanz 1chao 4char. 1chara 3charta cha2sc 3chato 4chatu ch1ärm ch1äs 1châ 2chb 2chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefi 3chefs 2chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia 2chic chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 4chn4 chner8ei. 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 4chre chre3s ch3rh 1chron 4chs chst3ri 2cht 2chuf 2chuh 2chum 2ch1unf 2chunt 4chü 2chv 4chw 1chy 2chz ci1c ci1es ci2s c1j c4k 4ck. ck1a 1cka. 2ckac 2ckal 2ck3an cka4r1 ck1ä 2ckb 2ckc 2ckd 1cke 4ckeff 2ckeh ck1ehe 4ck1ei 4ckense 4ckentf 4ckentw cke2ra ck2ere 6ckergeb ck1erh 4ckerhö 4ckerke ck2ern 2ckero 2ck1er2r 2ckerz 2ck1ese 2ckex 2ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 3ckis 2ckk 2ck3l 2ckm 2ck3n ck1o2 2ckp 2ck3r 4cks ck4stro 2ckt ckt2e ck3t2i 1cku 2ck1um3 2ckunt 2ck1up 2ckv 2ckw 1cky 2ckz c4l2 cle4a clet4 clo1 clo2ck 1clu c2m2 3co co2c co3ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cos3t co4te cô4 2cp 2c1q 1c4r2 cre2 cre4mes cry2 2cs cs2a c2si c1s4tr 4c1t cte3e c3ti2 cti4o ctur6 3cu cu2p3 cussi4 1cy 2c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho dach1s 4d3achse d1af d1ag dagi2 dah3l da1ho 3d2ai da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d4amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 dark4 3d2arl dar2ma dar2m1i da2ro d3arr 3d2ar3s d1art 2dart. da2ru d2arw d1arz da1s dasch2 da3s2h das4t 3dat dat2a da3t2e2 date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus3 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c 2dc d1ch dco4r 2d1d2 ddar2 d3dä d3dh d5do 1de de2ad de3a2t 3deb4 4d1e2ben 3de1c de4ca. de2cka de3e4 2d1eff deg2 de3gl dehe2 de3ho 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2delek 2delem deler4 2delfm delle2 del4l3eb del4lei de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del5ster del3t4 dem2ar dement4 de6mentg 2d1emp d2en. dend2 de4n3end 4denerg 4d3en4ge. d2enh de2ni den4k3li den2kn 4den4sem den4sen den6s5tau den3th 2dentw de1nu 2deol de1on depi2 d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t derer6ze d4erfi d2erh 4der4höh d4erhü 3derie derin4f 4derklä derm2 4derneu de1ro de2rop 4der4sat der4spa der3tau der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum des1 d2es. de2sa desa4g de4sam des2äc de2seb de4seh de2sei des3elt de2sen1 de4set de2sin de2sor de2sp de3spe des3s2 dest5alt de2sto dest5rat de4stre des4tum de2su det2 deten4t 2d1etw de1un de1url de3us devil4 d1exi de2xis 2dexp 2d1f4 2d1g2 dga2 d2ge. dge4t1e 2d1h2 dha1s4 d2his 1di di4ab di2ad di4am di4ath 3dic di1ce dich1 di2e di3e2d die4neb di3eni di3ens. di3ern die2s3c diet3 die2th dige4s dik2a dil2s5 2d1imb 2d1imp din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion3s di1p di4re. di2ren di2ris 2d1irl di2s1a2 di2sp di3s4per 2d1isr dist2 di2ste di4stra di2ta di4teng di4t3erl di4t3erm di4t3ers di2th di4t3r dit3s di2tu di5v di3z2 2d1j 2d1k4 4d1l2 d3la d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 d1ob d2oba 2dobe dob4l d2obr 2d1o2f dole4 doll2a do2mar do5na donau1 doni1e do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org dori1 2dort dor2ta dor4ter d2os. dos3s dost1 dot6h do2t1o do3un d1ö dö2d dö2l1 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad drag4 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4rin. d4risc 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh 2d3rui 4drund drunge3 2d5rut drü1b drü5cke 2d1s 4ds. d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef ds1ehr d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse4t d4s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pas d2spä ds2po d3spri d2spro ds2pu dss4 dst4 d4stabe d4stag ds3tauf d4s3täti d2ste d4stea d3stei d3stell d4stem d3s4tern ds2ti ds4til ds4tip ds2tu ds1ums d2sun ds2zen 2d1t dta2d d5tea d2th d4thei dt3ho dto2 d3tö dt3r dtran2 dt5s2 d3tü 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf dung4 2d1ungl dun3ke dun2kl 2dunr dun2s dunst3r 2dunt 2dunw du1o dur2 dur3au 5durc 2d1url 2dursa du4schn du4schr du4schw dus3t 2düb 2d1v2 4d1w dwa2 dwest1 dy2s 2d3z2 2e1a e3a2b eab3l ea2c ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei ealer2 e4aler. ealer4t e2alti2 eam3 eam1o ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas3s eat4e2 eater1 e3ath ea5tr eat3s2 e3at5t4 e3au2f e3aug eau1st e3ä2 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en ebens3e ebe4rel ebert4 2ebet 2ebl eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebot2 ebö2s 2ebr eb3rei eb4ru eb2s1 eb6sche ebse2 ebs3pa eb3sta eb4stät ebs3tem ebs3t2h eb3str 2e3bu ebu2t1 2e3ca e1ce ech1ä 2e1che ech1ei e6ch5erzi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a e1cka eck3se eck4sta 2eckt 2e1cl 2eco eco3d e3cr ec1s 2ect e1d e3d2a ed2dr ed2e ede2al ede3n2e edens1 eden4se eden4sp ede2r eder3t2 edi4al 2edip e3d2o ed2ö eds2ä ed4seh ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho ee2ck eede3 eed3s2 ee1e e1eff eef4l eeg2 e1ei ee1im eein4se eel2e ee2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere2s ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ee3s2 ees3k ee3ta ee4tat ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e2fent ef2er efeuil4 2eff. 3effek 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g egas3 eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4str ege1u e2glo e2glu e2gn eg3nä eg3ni eg4sal eg4san eg4se4r1 eg4sto eg2th egung4 egus3 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä e1he eh4ec eh1eff eh2el ehe5na ehen6t3 1e2hep e3her ehe1ra ehe3str e1hi eh1int eh1lam eh1lä ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se ehls2t 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1e2c eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of ehs2 eh3sh eh3sp eh1ste 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3er4r 2eidn ei3dra eid3sc ei1e ei3el 4ei3en3 eienge4 eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 eil3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl e4i2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom einn2 1einna ei2n1o2 e4insa 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei4s3erw eis2pe eis4tel eis4th ei1sto ei2sum e4it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tor ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3er4z ekt2o ek5tri ek2u e3k2w e1la ela4ben el3abi el2abt ela2c el3ader el1af ela2h e2l1ak el3al e2l3a2m el4ami el4amp e6landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a2r el3ari ela4s el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 e3lea2 ele2c 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh 1elek e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e4ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r e2l1id e3lie e2lim el1ita 2elk elk3s2c el3lan el3le el5le. ell3ein ell3eis el2lim el3lin ell3sp 2eln el5na 2elo e2lof e2lol elon2 e2l1or elo2ri elö2s el2sum el5ten. elter4b 3eltern elter4s elto2 elt3r elt3s2k elts2p 2e1lu el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2m1ans 3emanz e3mäs em4d3a2 e3m2en emen6gel emen4t3h e2m1erw eme2s 1e2meti e2m1im emi5na em1int emi3ti 2emm emma3u em2m1ei e2mop 1empf4 em3pfl em2sa em2spr em2st em3t2 1emul 2emü e2n1a 4ena. 2en2a2c en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en4ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när en4ce. en3d2ac en2dal en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1e2c e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e4n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio eni2ö e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r enost3 e3not eno2w 2e1nö en1ö2d en3sac en2sau en5sche en2seb 3ensem ensen1 en2sep en4seta en3ska en3sp ens2po enst5alt en4s3tät ens2th 2ensto e4nt ent4ag ent4ark 1entd en2teb en4terb 1entf 2entfo 1entga 3entgeg en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü enü1st 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh eo3m e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eo1s2 e3os. eota2 eo3ul e1ov e1ö2 e1p epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era2g e1rai er3aic e2rak e1ral er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a4si er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1äs erb2e erb4sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in er4d3en4g erd3erw erd3s 4ere. er1eb e3rech er3echs er1e2ck er1edi ere4dit er1eff er1e2h 4e3rei. er1eig e2rein e4r3eis. ere2l er1ele ere3lev 2e3rem e2remp 2eren 4e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer 4erer. e2r3erf e2r1erh 4erern e3rero er1err er1ers e2rert er1erw 2eres er1ess e4r3e4ti er1eul ere4vid erf2e er3f4r 4erfür 3ergebn 4ergehä erg3el4s3 1ergol 4ergrem erg3s ergs4t e2rh 1erhab 4erhals er3he 4erhöhe er3hu 2erhü 2eri e2riat e3rib 4e3ric er1i2de 4e3rie eri3e4n3 e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1o2p e4ro2r e1ros e1rou e1row er1ox e1roz erö2d 2erök er1ös er3p4 er3rä 2errü ersch2 er5schn er3se ers2i er3sk er3smo er3sn er3sp er5stel er3sz ert2ak er6terei er4t3erf er4ter4h er4ters er2t3ho 4er3ti ert3ins erts2e 2ertür 2eru eruf4s er1u2m er1und erung4 er1uns er3uz erü4b 3erweck es3ab e3sac e2s1a2d es3ak es4ank es3anz e3s2as e4s3ato es3av 2esb esbi5er. es2c es3cap e3sce esch2 e3scha e2s3ein es2el es3eva 2esf 4esh es2har es2id e2sil es1ini es3int es2ir es2is es2kat e4ske es3kl es3ku e4sky es3l es4log 2esm eso2r es2ort es2ö 2esp es2pek e3spi e3s2por e3s4pra 2esr essali3 es2sau es3sc es3se 4essem ess4e3re ess3erg 2esso es2sof es2s1pa es2spu es3stu estab4b es4t1ak e1star e4starb 1e2stas e1stat e1s2tec e3stel es4t3eng es4t3erh es4t3ess e1stil e2stip estmo6de est3ori e1str es4tri es3trop e1stu e1s4tü e2s1um es3ums es3w e3sy es3z e1ß eße3r2e e1t etab4 et1am eta2mi 3etap et4at et1äh 2e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal ethi1 et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of etons4 e2torg e3tö 2etr e4traum e6t3rec e2tres et4rig etsch3w ets2p et3su ett1a et2tab et2tad et2t3au et2tei ette4n1 et2th et2t3r et4tro ett3sz et4t1um e3tü etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eu3erei eue6reif euer4ri eu2esc 2euf eu2fer eu2ga eu4gent eu3g2er eugs4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eum4sc eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu3p2 e2u3r2e 1euro eu2rys eu4sis eu3sp eust4 eu1sta eu1sto eu1str 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo e1w 2ewa e3wä ewä2s 2ewe e2we. ewinde3 e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey1 ey4n eys4 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p ê4t 1fa fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl fal6l5er6k fal6scha fal6schl fal6schm fal3te f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br farb3s 2f3arc 3fari farr3s f3art 2f3arz fa3s4a fa3sh f3at fa2to 2f1auf f3aug f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 fe2c f2ech fe3che 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1eis fek2ta fe2l1a fel4da fel2dr 2fe2lek fe2l1er fe2les fel4lei fe2l1o fel4soh fels2t fel3t4 f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fenst2 f1ent 3fep f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. f2ert f1erw fer8zeuge fe2st fest1a fest3ei 2f1eta fe4tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ff3ar ff4art ff1au ff2e ffe2e f2f3ef ff3ei ffe1in ffe2m f2f3emi ff4en f2fex fff4 ff3lag ff3li f3flu f3flü f3f4rä ff2s ffs3tan 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fid2 fien3 fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fing4s fi3ni fin2s fin3sc fin3sp 2f1int fi2o fi3ol fi2r fi3ra fi4re 3fis fis2a fisch3a fisch3o fisch3w fis2p fi2st fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad flan3d f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger f4lü f5lüm 2f1m2 fma2d 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er. for4st fort3 for4tei for2th for2t1r for3tu f1o2x 1fö 2fö2f 2f1ök 2f1öl för2s 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein2 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc f3roc 1f4ron fro2na fro2s f3rot f3ru f3rü 4f1s fs1all fs4amm f2san fs3ar f2s1as f2sauf f2saus f2saut f3sc f4sce f4schan f4schef fs4co fs1e2b f4s1ehr f2s1em f2s1ent f2s1er fse4t f4s1eta f3si f2si2d f3s2kie f2s1o2 f3span f2s1pas fs1pen f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 fs2t fs3tak f2stas f4s3täti f3stei f3s4tel f3stern fs3th f2stip f3st4r f4s3tres fs3trü f3stü f4s3tüte f2s1un f3sy 4f1t f4ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f4t1ent f4t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f3tö f2t3ro f2trö f3t4ru ft2s1 ftsa4g ft4sam ft3s2c ft4sche ftse4 ft4seh ft3st ft4s3tan ft4s3tä fts2ti ft4stri f2tum ft1url f3tü ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf fung4 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2sa fus2s1p fus2st fu2ß1er 3fut 1fü 2füb fü2r 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1c 2gadl 2ga2dr ga1fl ga3ge 5gai ga1k ga2ka gal2a 2g1a2lau g1amb g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2sa gas3ei ga2si ga2sor ga3sp ga4spe ga4spr gas3s gas4ta gas5tan ga4ste gas4t3el gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs5 gä4u 2g1b2 gber2 gbi2 gby4t 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is 2g1eise2 gei3sh 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2ge4lek geler3ö ge4l3ers ge4less gell2a ge3lor gel3sa gels2p gels2t gel3ste gel3sz gel3t2a ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4n3ac ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe gener4z gen3n gen4sam gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer g2e1s2 ges3auf ges3elt ge2s3er ge3si ges4pi ges3s2t gest2 ge3ste ge4s3ter ges3th ge3t2a 2getap ge5tr ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga4t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gie3g gi2e1i gi2el gien2e1 gie1st gift5s gi2gu gi2m gi4mes 2g1ind gi3ne g1inf gin2ga 2g1ins 2giok 2g3isel gi3t2a gi3tu gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland 3g2laub 4g1lauf 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu 2g3luf 2glun 4glus g2lut g1lüg g2ly 2g1m2 g1n 2gn. g2n2a g4na. 4gnah 3g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no gno1r g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s1 go3st go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs1c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 2g3rose gros6sel gro4u 2gröh g4ruf 2g3rui 2g3rum grun2g 3g4rup 2grut 2g3rüc 3g4rün 4g2s1 gsa2d g4s3a2k g3sal gs3all g4salt gs3ama gs3an gs3ar g3s2c g4sca g4s3ce gsch4 g4schef g4sco g4s3cr gse2 gse3e gs2eh g3s2eil g3sel. g3seln gsen1 gs3er gser5f gs5erk gse4t g4seta gsi2d g3sil g4s3l gso2 gsp4 g3s2pek g3spi gs4pie g4spin g4s3pl g3s2por g4spru gsrat4 gsrü2c gs5s4 gs3ta g3s4tan g3s4tar g3s4tati g4s3tä g5stäm g3stel gst3ent gst3err g1steu gst2he g3stir g3sto g4stol gs3top g4s3tor g3stö gs3tr gst4ra g3s4tras gs4trat gst5reit gst4ri gs4t5rit gs4t3ros g3stu g4stur gs3tü g4sw g3sy 2g1t g3te g3ti gti2m gt4r gt2s g3tü 1gu gu1an. gu1ant gu1as gu1c gu4d3r gu2e 2gued guet4 2g1u2f 2g1uh gu1ins gu1is 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2un4s 2gunt2 2g1url gurt3s gu2s3a guschi5 gus4ser gus2sp gus2st gu4st gu2t gut1a gu4t3erh gut3h 2güb gür1 güs3 2g1v 2g1w 2g3z2 3haa hab2a hab2e 2habn hab2st ha2cho ha2del ha4din h1adle haf3f4l haft4s3p h1ah h2ahs h2ai ha3ia h2aj 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal2la hal6lerf h1alp hal2st hal4t5r h1amt h2an. 2hanb h2and han2da hand3s han2kr h4ann 2hanr 2hant h1ap ha2pl ha2pr h2a3ra 2harb h2ard h1arm. har3ma har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 hat5t2 hau5f6lie 2h1aufm h1aukt hau2sa hau4san hau2sc hau4spa hau5stei hau6terk 2hauto hau2tr h1äff h1ärz hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad he3be he4b1ei he2bl he3br he1ch he3ch2e h3echt he3cke hed2g he3di he2e3l hee4s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1ist heit4s3 h1eiw he2l3a hel1ec h3e2lek he3len hel3ers he3li hel4l3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä hend2s he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk henst2 hen3str hen5tr h1ents 2h3entw hen3z 4he2o he3on he3op he3pa he3ph h2er. her3a2b he2ral 2herap he3ras herb1r her4b3ra he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 her2ho 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm he3ro he4r3o4b h1erö hert2 her3th her2z1w he1sta he2s5tr he2tap heter2 he3th het2i he3t4s h2e2u heu3g 3heusc he3x he1x4a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 4hi. 2hia hi2ac hi2ang h2ias hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hiers2 hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin3s2 hin4t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro hir2s his2a hi2se hi2st hi1th hi3ti 2hiu 2h1j 2h1k4 2hl hl2ag hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös hl3sku hl3slo hlst4 hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s hm3sa hms1p h2mu h3mul 2hn h2na hna2c h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stras h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hnsuch4 hn3ti hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2ch3 ho2cka ho6ckerl hock3t 2hod hoe2 ho2ef ho2fa hof3fa ho2f3r 2hoi hol1au 3hole ho2l1ei hol3g4 ho4lor 3hol3s h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo 2hop ho1ra hor3d 2h1org ho4sei ho3sl ho2sp ho4st 2hot. ho3th hotli4 2hots2 3hov 2ho2w1 h1o2x ho1y2 1h2ö hö2c hö3ck 3höhe h4ör hö2s1 h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3ren h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr4s3an hr2s3au hr3schl hr2s1en hr2ser hr4set hr4s1in hrs3k hr4s1of hr2su hr4sw hr2t5ab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se h3ruh hr1ums h3rü h4rüb h4ry hrz2 4hs h4s3acht h2s1a2d h4samt h2san h2sau h2s1äh h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par h2spel h2sper h2sph hs2por h2sprä h2spro hss2 h1sta h2staf hst3alt hst2an h2s3tau h1stec h3stein h5stell h3s4terb hst2he h1s2ti h1sto h2stor h1s4tr hst3ran h1stun h1stü h2s1u hs2ung 4h1t ht1a h2tak h3t4akt. ht2al h4talo ht3alt h4t3a2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h4tax h2t1är ht1e2c h2t1ef ht1eh hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit h2temp h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1er2h ht5erken h4terkl h6t5erleu h6terneu h4t3er4re h6t5er6spa h4t3er4st ht6erste h2t1erz hte2s h4t1ese h4t1ess hte3sta h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in hto2 h2toly h2torg h3töp h4t3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h5trec h4tref ht3reif ht3reit ht4ri h4t5rieg h4t5rin h2t3rol h2t3ros ht3rös h2t3ru h2t3rü h4ts ht4s3an ht4s3end ht2so ht2sp ht4spin ht3spri ht4stab hts2ti hts4tie ht4s3tur ht4s3tür htt4 htti2 h2t1urs h3tü ht3z2 hu2b1a hu2b3ei hu2b1en hu2b3l hu4b3r hu2bu hu1c hu2h1a hu2h1i huko1 huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu2ler hu2let hu2l1in hu2lo hu3m2a h1ums hu2n h1una hung4s hu3ni1 h1ups 2h2ur hurg2 hu3sa hu2so hus4sa hus2sp hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 hüs3 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih 3hyg 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3all ial3la ia2lor ial3t4 ia2lu ial3z2 i2am i4amo 2ian ia2nal i3and2 ian2e i3ann i2ano i3ant i3anz i2ap ia1q i3ar. ia2ra i2asc ia3sh i2asi i2a3sp ias3s iast4 i3at. i3a4ta i4ate i3at4h 1iatr i3ats i3au ia3un 2iav 2iä i1äm i1äp iär2 i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b ib1art i2b1auf ib2bli ib1ei i2beig i2beis ibela2 ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibu2s1 2ic ic1c ice1 ich1a ich1ä i1che ich1ei i1chi i2chin ich3l i3chlo ich3m i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci i3cke i1cl i1d id2ab4 i3d2ac i3dam id1au 1i2dee idein3 i4deis idel2ä ide3so 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p id3str idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ie2bri ieb4sto ieb4str ie1c ie2cho ie2ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g5l ie3g4n ie2g3r ie3g4ra ieg4s3c ieg4st i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i2eli i1ell ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä i3en3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm i3enn i3e2no i3enö i3enp i3enr ien2s ien3sc ien3s2e ien3si iens2k iens6t5er iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 ier3a2 ie2rap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k2 i1ern i3ern. i4erna i2er5ni ie2rö ier4seh iers2t ier3sta ier3ste ier3te iesen3s4 ie2spu ies2sp ies2s3t ie1sta iest6e ie3su ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie4t1ö4 ie2tri ie2t3ru iet2se i1ett ieu2e ie1un ie2w3u i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fl iff4st if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if2s if3sa if3se if3sp if2ta ift3erk if2top if4t3ri ift3sp ifts2t ift3sz 2i1g iga3i i2g1ang ig1art iga1s4 i4gefar ige4na ige2ra ige3ran ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu i3g4no i3go ig4ra ig3rei ig3s2a ig4sal igsau4g ig3sä ig4se ig3so ig3sp ig4spa ig3stei ig4s3to ig4stö ig3str igs4tra ig4stre ig3s4tü igung4 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ihs2 i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ikanten8n ik1anz i4kanze ik1art ik3att i2k1au i2k1är 4ike i2k1ei ik2e2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 iko1s i2köl ik3ra ik3rä ik3re iks2 ik3so ik3sz ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 6ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1e2c il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s3 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or ilt2 il3th il3tr i1lu2 i2lum ilung4 i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2mej i2mele i2melf i3men i2m1erf i2m1erz i4mesh imes3s i2meti i2m1inf i2m1ins im2mei im4m3ent 1immo 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2st im3sta 2imt imt3s2 2imu in1a2c in3ach. i4nack i2n1ad in2af in3am i3nap in2ars in2art ina4s i2n3au in1äh in1äs in2dal in2dan in3dau 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng in3erbe i4nerbi in2erh iner4lö i4n3er4tr i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ing4sam ings3pr 1inhab 2inhar 2inhau 4inhe in2i3d i3nie 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn in3k2ü inma4le 2inn. in4n3erm 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino1s4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 in2seb 2insen ins3ert in3skan in3skr in4s3tät in3stel ins4tip in3su 1insuf in4s3um in3s2z 2inta 1integ int2h in3t4r in5tri int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o io1c io2d i2oda io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3ons3 ion4spi ion4stä ion3t i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en i3p4l ip2pf ip2pl ip3pu i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek 2iré ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron iro2s i1rö irpla4 irre4l irr2h ir4schl ir4schm ir4sch3w ir3se ir3sh ir2st irt2s3t 2iru iru2s1 i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca i3s2che i4schef i4sch3e4h i4sch3ei i4schin i5sching i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 ise4n3a is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat is2has isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is4s3che is4sper is2st is3sta is3sto iss3tr is3stu is2sum is3t is4tab ist3ac is5taf is4tam ist2an i1s4tat iste4n istes3 i1s4teu i1s4til is4toc is4tö is5tör ist4ra ist3re i1s4tü isum3p i2sü i1ß iß1ers it1ab. ital1a it1alt it1a2m it1an it2an. it3a4re it1art i3tat it1au i3tauc i4t1ax 4itä i2t1äs ität2 i2t1ei i4teig it2eil i4tein 2itel ite2la ite4n iten3s2 i4tepo i2tex i5thr i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn ition4 i6tl itmen2 i5toc i2t1of i3tö it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa its1a4g it2s1e4 its3er1 it2so it2s1pe it2s3to it2teb it4tri itt2sp it1uh i2t1um i2tuns it1urg itut4 i3tü 2itz it2zä it4z3er4g it2z1w 2i3u2 ium1 i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em i3xi ixt2 4i1z iz1ap iz1au iz2ei izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l ja1c jah4rei jahr4s ja3l2a ja3ne jani1 jani3t4 ja1st 2jat je2a jean2s je1c je2g jek4ter jektor4 jek2tr je3na je2p je4s3t je2t1a je2t3h je2t3r jet3s2 jet3t je2t1u2 je3w ji2a jit3 ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung3s4 ju3ni jur2o jus3 jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kalo5 kal2tr ka2lu k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu3 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg ka3ri kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw 3kas ka3se kasi1 kas3s ka2s3t ka3tan ka3t4h ka4t3r 2katt kau2f1o 4kaufr kauf4sp kaufs5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 kä2s1c käse3 2k3b2 kbo4n kbu2s kby4 2k3c 2k3d2 kdamp2 2k1e1c k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehr4s3o 2k1eic 2k1eig k1ein ke1in2d 2keinh kei1s 2k1eise keit2 ke2l1a ke3l2ag ke2lä kel3b4 2ke2lek ke2len ke2l1er 2kelet kell4e kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kend4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5stei ken3sz k3en4te. k3en4ten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero ker4reg k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke4t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1c 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o3 kin3s 2k1inse 2k1int ki3or kio4s 3kir kis2p kis3s kist2 kis4to kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. kle2br k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor 2klos. klost6 k2löt k1lu k2lud kluf2 k2lug klung4 k1lüc 2kly 2k1m k2n2 3knab k3ne k4nec k4nei 2knes kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol4a ko3le kol2k5 3kom ko4mu k2on ko3n2e kon3s4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n1a k2os ko2sp ko3ta kots2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 2k3q k2r4 2k3rad k4ral k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron 2kruf krü1b 2k1s k4s1amt k2san ks4ana ks3ar k2sau k4s1äl ks2än ksch4 ks1e2b k2sent ks1erl k2s1ers k2s1erw ks3ha k3shi k2s1id k2s1in k2s1o2 ks1pa ks2pat k3spe ks2por ks2pu ks3s2 kst4 k2stal k4s3tanz k3stat4 k2stea ks2ti k2stor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins ktion4 kti4ter k2t1of k3top k4torga kt3orie kt4ran kt3ras k4tref kt4ro ktro1s kt3run kt3s2 kts4t ktt2 k2tuns k3tü kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 4kulp 2k3uml kum2s1 k2u3n2a kung4 kun4s4 kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e kuri4er ku2ro kur2sp kur2st ku4schl ku2sp kus3t ku2su 1kü kü1c kür4s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb lab2br 4l3aben 2labf 2labg 2labh 4l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a2dr 3ladu l1adv 2laf la2fa laf3s laf3t la2ga la2gio la2gn lago2 la2g1ob lag3s2e 2la1ho 1lai la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 5l2and lan2d1a2 lan4d3au lan6d5erw lan6d5erz lan2dr lan4ds laner2 2lanf lan2gl lang3s4 2lanhä l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po2 lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi lar3s 2l1ar3t l3arti la2ru la2sau 4lasd la3se 3lasg 2lash 2lasi la2so 2lasp 3lasser last1o lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2t1a lat4tan lat4t3in lat2t3r 1laub. laub4se lauf1i lau4fin lau2fo 1laug l2aus. 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lay1 lä1c 1läd 2läf 2l1ähn 2lämt 1länd lär2m1a l1ärz lä2s1c 4lät 2läub 2läuc 2läue 1läuf 1là 2l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb4sh lb3si lb4sk lb3sp lbs6t lbst1e lb4sto lb2u l2b3uf lbzei2 2l1c l3che l4chei l5chen l3chi lch3l lch3m lch3n lch3r lch3ü lch1w l3cl 4l1d ld3a2b1 l3d2ac ld3a2ck l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a2r ld3ari l3das ld1au ld1är l3de. l2deh l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa ld3st ldt4 ld3th l2d1um 1le 3le. le2a le3an le3ar leben4s3 le2bl 2lec lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig le2im l2ein. l2eind lein4du l2eine lei6nerb 4leink l2eint l2einu lei6schw leis6s5er l4eist lei4ßer l2eit lei2ta lei8t7er8sc lei5tri leit3s2 lekt2a 2lektr 3l2ela 2le2lek l2eli lel3s 3lemes le2m1o2 4lemp lem3s l1emu l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 2l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k lers2t l4erwa 2lerwo 2l1erz l2erza ler2zi les2am les2e 2l1esel le3ser le3sh lesi1 le3sk les2ko le2spo les2t leste3 le1sto 4lesw 2lesy le2tat 2le3th let4tu le2u 4leud 2leuro 3leut 2lexe le2xis 2lexz 2l1f l3fah lfang3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lg3re l3gro 2l3h2 3lhi. 1li 3lia li3ac li2ad li3ak li3ar lia1s lib4 libi3 li1c li3chi 4lick li2cka lid2 li3da 2l1ido li4ds lid3sc l2ie 3lie. liebe4s li3ene lien3s lie2s3c lie2st 3lig lig4n li2gre li3ke lik2sp lik4ter li3l lil2a li3m2a 3limo 2limp li3n2a lin3al 2l1indu li2nef li2neh li2nep li2nes 2l1inf lings5 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2linst 2l1int li1nu l1inv 2linz li2o li4om li3os. li2p3a 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i4so li2sp liss2 lit2a li2tal li3te lit2h lit1s2 lit3sz li3tu 3liu liv2e livi1 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu l3k2me lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lks3t lk4stä lk2ü 4l1l ll1abb lla4ben l2labt ll1akt l3l2al l2l1am ll3a2ma lla2n ll2anw ll1anz l3l2ap ll1arm ll3aug ll1aus l4lausf ll1äm llb4 llch4 ll3d4 ll1ech l2l1ef ll1eim ll2em l3len. lle4n3a llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll2es l2lex llf4 llg4 llik4 ll1imb ll1imp l2l1ind ll1ins llk4 ll3l2 ll5m lln2 ll1ob l2lobe l2l1of ll1opf l2l1o2r l3lor. l3lore l2l1ou l3low ll3sä ll3sh ll3s2k ll2spr ll3t llti2m ll5t4r llts2 llu2f ll1ur llus5t6 ll3z2 2l1m l3ma. l2m3a2b l2marc lm1art lm1äst lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins l2möl lm3p lmpf4 lms2t lm3ste lm3s2z lm3t 4ln lna4r ln3are lnd2 l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min lo2n1o lo2o 2lopf 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3lorq 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4ste los3t4r lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l3 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lp3t4 l3pu 2l1q 2l3r2 lrat4s lre1s lrut4 lrü1b 4l1s l3sac l2s1a2d l3s2al l4s1amb l4samt l2sang l2sann l2sanz l3sare l2sau ls2äm l4schin l4schmü l2s1e2b l2s1ec l2s1em ls1ere ls1erg l2serh ls1erl l2s1ers l2s1erw l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac l3s2pi ls2po ls2pu l3spul ls3s2 lst2a lstab6 ls4taf l4s3täti l2ste l3stec l3stei l3stel l4stem ls6terne ls6terns ls2tie l2stit ls4tr ls2tu ls1um l2sun 4l1t l2tab ltag4 lt1ak lt1am l4t3ame lt3and lt1ang l4tarm lt1art l2t3ato l2t1au lt1eh lt1ein l2t1eis l4te4lem lt2en lten6gel lter3a lter2f lt2erg lter6ken lter6leb lter4nä lt2erö l4t1e4sk lte2th l2t1eu l2th l3thas lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w l3tö lt1öl lt1ös lt1öt ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l4ts lt2so lt4stab ltt2 lt1uh l2t1um ltu4ran ltu2ri l3tü lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lu2gi lu4g3l lu2go lu2g3r lug3sp lu2gu 2l1uh lu1id. lume2 2lumf 2l1umj 2lumk 2luml 2l1ums l1umw 1lu2n 2l1una 2l1unf lung4sc 2l1uni 2lunt 2lunw 4luo 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c lus6serf lus6serk lus6sers lus2s1o lus2s1p lus2s3t lus4stä 1lu4st lus4t1a lust3re lu2s1u lu2t1a lu2tä lu4teg luter2 lu4t3erg lu2t1o2f lu2top lu4t3r lut5schl 3lux 2lüb 5lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lz1w lz2wec 1ma m1ab m2abe 2mabk 3m2ab4r 2mabs ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau ma3le mal2er mali1e mal3lo 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann 2mansa 2mansä 2mantw manu3 2manz ma2or 2m1apf m2app 2marb mar3g2 ma3r2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m1arz 3mas ma3s2pa 4m1aspe massen3 mas4tel ma1s4tr 3maß ma2ta2b ma2tan mat4c ma2tel ma4t3erd ma5tri mat3se mat3sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 2m1änd 2mäo m1ärg 3mäß mä3t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r mby4t 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega1 3meh 2m1eif 2m1eig mei3l2 mein4da me1i4so 3meist me3lam me2lau 3meld me2lek me2ler melet4 2melf. mell2 mel2se mel5t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta men6tanz 2mentn ment4sp 4m3entwi me1o 2meou 2meö 3m2er. me1ra mera1f me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes mes1a me2sal me4sä 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p mes2st meste2 me1sto 4mesu m2et me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 2m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1c mi3da mie3dr mi2e1i mie3l mien3s mi2er mierer4 mi4et mie4ti 3mig mi2kar mi2ki mi2ku mi3l2a 3milb 3milc milch1 mil4che mild4s 2m1imp minde4s min2en min2eu min2ga ming3s4 mi3ni min2o mi1nu 3minz mi2o mioni1 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mi2ste 3mit mi2ta mi2th mi2t1r mit3s2 mit5sa mi5tsu mi2t1u 4mitz 2m1j 4m1k4 m3ka mk5re. 4m1l2 ml3c ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz mm1art m2m1au mmd2 mm1ein mme4lin mme4na m4mentw mme2ra mme4rec mme2sa mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc mmi1s4t m2m1ö mm3p2 mmpf4 mm2s mm3si mm3sp mm3sta mm3str mm3te m2mum mmül2 mmüll1 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 3mom mom2e 3m2on mo2nä mo3ne mo4n1er mon2s3 mon3su 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer morgen5s6 3mos mo3s4ta moster4 3mot mo3ti m1o2x mo1y 1mö mö2c 4mök m1öl 4m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos m3pi mpi3as. m4p3lem. m2p3len m2p3les m3pon mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and m4sap ms1as m2sau m3sä m3sc msch2 m4sco m3se m4s1ef ms1erw m4sex ms1ini mso2r ms1ori m2spä m2sped ms2po m2spot m2spro ms2pu ms3s2 m4stag m3stel m3s2ti m3sto ms4tr ms5trä ms5tren m3s2tu ms4tü m2sü m3sy 2m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m4t1erg m2t1erl m2t1ers m2t1ert m4t1eta m2t1eu m2th mt3ho m3ti m4t1im m4t1ins m4tint mti2s mtmen2 m3tö m4töl mt1ös m2trö m4ts1 mt2sa mt2se mt3s2ka mt2spr mt4s3tät mtt2 mt1um mt1urt m3tü mt3z 1mu mu1a mu3cke 2m3uh mu3la 2muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk m2unr munt2 4munz mu3ra mu4r1u2f m4us 3mus. mu4s1a 3musc 3musi mu2s1o mu2sp mus3t mu2su mut1au muts3t mut4str 1mü 2müb 3müh mü2her mül4len 3mün 3müt mütter3 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4 mwelt3 mwu1 1my my4s 2m1z 1na 3na. 2n1ab na2bä 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3nac na2ch1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3l2a nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly n4am. 3name na3me. n4amen namen4s3 4n3a2mer na3m4n 3namo 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 4n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart n3arti na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3nat n4ata n3a3t4h na4the 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 3näi 2n1ä2m 2n1än när4s5 n1ärz 3näs nä2sc n2äss 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbes4 nbu2s nby4 2n1c n3ce2n3 nch3m n2ck 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6läs nde4rob nder5ste nde2se nde4spe ndi2a3 n2dob ndo2be ndo1c nd1op nd1or ndo2ri n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2d3run nd2sor nd2spr nd3th nd3ti ndt4r n2duns ndy3 1ne 3ne. ne2ap ne3at ne2bl 2n1ebn 2nec 3neca 3ned 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la 3ne3lo 3ne3lu n2em. 2n1emb nem4e n1e2mi 2n3emp 2n1ems 3nen n4en. n2en3a4 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne2r3af ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n2erj n1erk n2erli 2n1erlö ner4mit n2ern. n1ernä ner4neu 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz 3n2es n4es. nes4c ne2sei ne2sev nesi1 ne3ska nes1o ne2sor ne2s1pa 4n3essi ne1sta nes3ti ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neuer4f neuer4k neuer4s neuer4w neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt4 n3far n3fi nfi4le. nf4l nf5lin nf2o nfo1s nf4r nf3s nf2tan nft2o nf2t3r nft4st n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g3a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a n3ger nge4ram n4g3erse nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc n2gn ng3ne ng1or n3gra ng3rat ng3roc ngsa4g ngs3au ngs3c ng4s3e4h ngs3pa ng3ts n2gum 2n1h4 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nich1s nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n3 ni3ene ni1ero nifes3 nig2a 2n3i2gel 2niget nig3r ni2gre nig4sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in2a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis3s4 ni2s1u 2nit ni2ti nit4r nitts1 nitt4sa ni3tu ni3v 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3aus n2käh n2k1äp nke2c nke4lei n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2s1al nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nner4fü nn2erh nn2erk nne2rö n4n3er4wa nner2z nne2s1e nne4st nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3sc nn3se nn3s2p nn4s3pe nnst4 nn2th n2n1uf n2n1unf nn1ur nnvoll4 1no 3no. no2bla n2o3ble 3noblo 2n1ob2s no1c noch4r 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3sh no2s3p n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2top no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l 1n2öt 2n3p4 npa2g npf4 npro1 npsy3 2n1q 4n3r2 nräu3s nre3sz nrö2s1 6n1s n2s1a2d n2s1all n2sang n2sant n3s2arg n2saus n2s1än n2s1äus ns2ca n4schl. n3schu nsch7werd ns1eb nse2ha2 nseh5ere nsen4sp ns1ent ns1erf ns1erg n2serh n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n3sil n2simp n2s1ini nsinn4s nsi4te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 n2spat n5s4pen n4speri n4spers n4sph n3s2pi ns4pie n2spo ns3pon n2sprä n4s3prie n4spro nsrü2 ns3s2 nst1ak n3star n2stas n3stat n4stat. n4s3tate nst3eif n3stemm ns4tent ns6terbe n5s6terne n5s6terns ns2ti ns4tic ns4tob nst5opfe ns4tor n4strac n4strie nst4ru ns4trun ns2tu nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns4unr ns4uns n3sy n4s3zi 2n1t nt3abs n3t2a3c n3t2al nt1ang n4tanza nt2arb nt1ark nt4at nt1äm n2t1äu nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei nt2en nt4ene nten6te. n3ter nte4ras nt4erh nt4ern nt4ers nt4ert n4t1ess nteu3 nte3v nt2her n2t3ho n3t4hu nti3c nti3k4l n2tinf n2t1inh ntini1 n3ti1t nt4lem ntmen2 ntmo2 n3to nton2s1 n3tö nt3rec n5t4ree nt3reif n5trep nt4rig n5trop n2t3rü n4ts nts2o nt4spar nts2t nt2s3to nt3su n3tu 3n4tu. ntum4 ntu2ra ntu4re. ntu4res n3tü nt3z 1nu. 1nu1a nu4ale nu3ar nubi1 1nu1c 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung4 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nus1i nu3sl 1nut nu2ta nu4t3r 1nuu 1nux 1nuz 3nü. 2nü4b nür1c 3nüs 1nüt 2n1v2 n3ver nvol7ler 4n1w 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nzdi1s nze6l3a n4zense n4zentw n4zentz nz3erwe nzi2ga nzig4s nz1ini nz3le n2zor nz2öl nz3s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4a3i oa3ke oa4k1l o4a3la o4a3mi o2as 3oa3se o4at o5au o1ä o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi4t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo2 2o3bo o2b3re ob3s2h ob3sk obs2p ob2sta ob3sz 2o3bu obu2s 2o3bü 2oby4 2oc o3ca oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r och1s ocht4 och3te o1chu ochu2f och1w o1ci o1ck o2ckar o3cke ock2er o3cki o2cko ock3sz o1cl o1ç o1d o3d2a od2dr o3d2e1i odein3 ode2n1 odene2 odesi1 ode3sp o3dex 2o3dia odi4er o3dir o3div o2don odo4s 2odr o2dre odt4 2o3du o3dy 2o1e oe2b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1a2c of1au o2f1ei of2en o3fer of2f1a of2f1in 1offiz of2f3l of2fo of2f3r offs2 off3sh of2fu 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i o3gh ogi2er og2lo og4n ogo4i og3s2p og1ste o1ha o1hä o1he o2h1eis ohen3s o2h1er4t o2h1er2z o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n1ac oh3nee 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la oh1o2p o2h3ö ohr3a oh4rin oh1ro oh1s o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2ra oi2re o2isc o3isch. o1ism oiss2 oi1th 2o1j 2o1k oka2la okale4 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar olars2 ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ole3s ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp ol2gl ol2gr ol2i oli3k4 ol2kl olk3r ol2kre ol2lak ol2l1au oll1e2c ol2l1ei ol2lel oll5ends ol4lerk oll3erw oll3sp o3lo ol2of olo3p2 ol1ort ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3m2eis o2mel o2mene o2mep omer2 o2meru om1erz om2es omiet1 o2m1ind om1ing om1ins o2m1int om3ma om1org om3pf oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal on1ap o2narb on4at on2au 2onä on1äh onbe3 2onc onderer5 2one one4i one2n3 onens2 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4 onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on4sam on2seb onse2l onsi2 ons3l ons1p onst2h on3t2a ont3ant on4t3end ont3erw on4t3ri o1nu 2onuk on3v 1ony on3z o1ñ oof2 oo2k3l o1op o1or oo4sk oos3s4 oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan opa5s o1pec o1pei o1pe4n 1oper 2opf. op2f3a op3fah o2pfe op4ferd opf5erde opf1l opf3la op1flü 4oph2 o3phe o1pi opi5a4 opi3er. opi5ers. opin2 op5lag o2p3le op3li 2o3po op4pl op2p3r 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2o1ral o2r3alm or4alt 3oram or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 4orda or2d3am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords ord3s2t or2dum 2ordw 2ore ore2a ore2b o2r1e2ck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s4 or3ga 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins ork2a or2k3ar ork4r ork2s 2orm or4mans or4ment 2orn or2na2c or2n3ar or2n3ä or5ne. or3n2o1 2o1ro or1o2b oro3n2a 2o1rö 2orp 2orq 2orr orr4a or3re or3rh 2ors2 or3sa or3sh or3sz or2t1ak or4t1an or2t1au or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the ort3ins or4t3off or2tor or4tö or4trau or4t3räu ort3ric or2t1um o3ru or2uf o4r3un o2r3ü o2rya 2o3s2a os3ad os4an osa1s o4sca osch3ar o3sche osch3le os4co 2o3se ose3e o2s1ei ose2n o4sents os2ex 2osh o3s2hi o1sho 2osi o3sk o4ska os3ke o4ski 2oskl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss1a2c oss3and os4sä os2sei os4s3en4k os4s3enz os2s3o os4son os2s3p os2s3t ost1a2b os4t3am ost3ang os3tarr osta4s ost1au os4tei oster3e os6t5er6we os2t3h os3til os3to os4tob ost3ran ost3rä ost3re ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf 2o1t ota2go o3tark o2t1au ot3aug ot1ä o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot2em3 otemp2 o2t1erw ote2s 4ot2h ot4he ot5hel o4t3hi ot3ho o2thr o2til o2t1i2m ot2in otli2 ot4ol ot1opf ot2or oto2ra oto1s o3tra o2t3re ot3rin ot2sa ot3sc ots1p ot4spa ots2pe ot2spr ott1a ot2tan ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra ot4tri o3tü o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oun4ge. 2our ouri4 our4ne. ou3s2i outu4 2ouv 2o1ü o1v ove3s 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x 2ox. ox2a ox2e ox3l o2xu 1oxy o1yo oy1s4 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r öb2s3 ö1c öch1l ö2chr öch2s öchs4tu ö1d ödi3 ödien3 öd2st 1ödu ö1e 1öf öf2fl öf3l ögen2s1 ög3l ög3r ö1he öh3l2e öh3ri ö1hu ö3ig. ö3isch. ö1ke ö2ko1 ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl4en öl2f1ei ölf3s öl1im öl1in öl2k3l öl3la öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w ö1m öm2s ön2e ö3ni önizi1 önn2e ön2s ön3sc ön3sp ö1nu öo1 öot2 öoti1 ö1pe öpf3l öp4s3t ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o2 örs2e ör3s2k ört2e öru4 ö2r1une ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw ö2s1ei ö2sp ös2s1c ös2st ö2st ös3te ös2th ös3tr ö3su ö1ß ö1t ö2t3a öte4n3 öt2h öts2 öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pa4nat pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 1para pa2r3af par3akt 1parc pa5reg pa5rek 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa3s2p pa4st 2paß pat1a pat4c pate2 1pati 1pa5t4r 1pau p3auf pa3uni 1pä 3pä2c 3päd 3pär 3päs pä4t1e2h pä4t3ent pä2t3h pä2to pät3s4 2p1b 2p3c 2p1d2 pda4 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 1pel pe2l1a4 pe4lein pe2let pe4leu pe2lex pe3li4n pe4l3ink pel3k pell4e pel3t 1pem pena4 pe3n2al pe2nä pen3da pe4nen 1penn pe2n1o 3pensi 1pensu penz2 1pep pe1ra per2an 1perle per4na 3pero per2r1a 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pe2st pes2th 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 p2f1in3s pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra 3pf4ro 2pfs2 pf3sl pf3sz 2pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d phen3s 2ph1ers 2phf 2phg phien3 phi2ka 2phk ph2l 2phm 2phn p3hop 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a3 piap2 pias4 pi3chl p4id2 piegelei8 pi2el piela2 pie4lei 3pier 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi3ri 3pirin 3pis 4piso pi3t2a pi1th pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3p4la p5la. p5lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler 2plig p4lik p4liz p4lo 2p3lu 2p1m2 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li po4lor 2pond po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1rau porf4 por3s por4tin por4tre por6tri pos2e po4sta pos4t3ag po4stä po2s3te post3ei po2sto pos6tr post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppe1e ppeli5ne ppe2n1 ppf4 pp1fr p2p1h p3p2ho p2p1ia pp3l pp1lä p2ple pp3oh ppp2 p2p3ra p2pri pp3sa ppt2 p2r2 1prak 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 1prei 3preis prei4s3c 2preiz 2p3rer 3p4res pri4e 2prig 3prinz pri2t1 priter4 2pritz 1p4ro 3prob 2proc 3prod 3prog 3proj 2pross pro1st 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po p2st p3sta p3stea p3stel p3s2ti pst3re ps2tu p3stü 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w p2t3r pt3s2 ptt2 pt1um pt1urs ptü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 2pund 3punk pun2s 2punt 2pur pu3ri pu2s3t 3put put2s 1püf 2pül 2p1v 2p1w pwa4r 3py1 pys4 py3t 2p1z qu4 que4te. 1queu 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2ab2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad5t4 1ra2e ra3er r2af raf3ar ra2fer ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht r2ai 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la2 ral3ab rala4g r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la rall2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3alt 2ralta r4al5t2h ra2lu 3raly rama3s ra2mer 1r2ami ram4man ram6m5ers ram4mu 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er rand3s 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa ran2th 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra2r1in r2ark 2r3arz r2as r4as. ras2a ra4schl 2rasph 2raß 1rat r4at. ra2t1a rat2o rat4r 2r3atta 4ratz 4rau. 3raub. 4raud rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp raus5se raut5s 1raü r2ax raxe3 3r2äd 4räf rä1fr 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sc 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech rbeid4 r4belä r4belis r3ben. rb1ent rbe3r2e rber4gl rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rb2o rb4ri rb2s rb3se rb4sei rb3ska rbs1o rb3sp rb4stä rb2u rbu2sc rby4t 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rch1s2 rch3sp rchst4 rch3t2a rch6terg rch6terw rch1w r1ci r2ck r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rd2am rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d rde3re rder4er rderin6s r4d3ernt rde3sp rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os r2dö rd3rat rd4ri rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. re2cka 2recki 3red. 4redd 2redi re1el re1er 3refe 2reff 3refl 3refo 3reg 5reg. rege4l3ä 2reh re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 3rek 4re2ke re3la 2r1elb rel2e re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. r2emi 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau 2r1entg 2r1entl 2r1ents 2rentw 4rentz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb rer2bi r4erbil r2erbr 2r1erd r1erf r2erfe r2erfl r1erg r4ergen r1erk 4r3erken r2erki 2rerkl 2r1erl 5rerlag 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest re1sta re2s2tu 3resu re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü rfolg4s r3for rf4ru rf4rü rf2sa rf2s1ä rf4s1id rf2spr rf2s3t rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rg3sp rgs2ti rgs4tr rg5s2tu r1h4 2rh. 2rha r2ha. r3hals 2rhä 3r4he. 2r3her r2hoe r3hof rho2i3 2rhol 2rhö 2rhs rhu2s 1ri ri3am ria1s ri3at rib2bl ri1ce ri1cha ri2dan ri2dau rid2g 2ridol 2ridy r2ie rie2fr ri1el ri3els riene4 ri3eni rien3s rie2nu ri1er. ri4ere ri3ers. ri3esti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif3s rif4ter 3rig ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb ri2me. 2rimp rim2s rim4sc r2i3na 2r1ind rin4dex rin4diz ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 2rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins 3r4ins. rin4so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris2a ri4scho ri4schw 3risik rismu2 ri3so ri4s1p 3riss ri4st ris6t5ers r2it r3i2tal ri3t2i ri3t4r rit2tr 5ritu rix1 1rí 2r1j 2r1k rk2am rk4ap rkauf4s r2käh r3kla rk4las rk4lau r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk4tri rk2um rku2n rk1uni 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i r3let r3l2i rli2s r3l2o rlös3s rl2s1p rl3ste rl2s3to rl3t r3lu rlz2 4r1m r2mab r3m2ag rma2la r2m1ald r2m1ank rm1ans rm1anz rm1a2p r2maph rm3d2 r2m1ef r2meo r2m1erp rm2es r2mide r2m1im r2m1o2ri rmo1s rm3sa rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna2r rn2arb rn3are rn3ari r2nau rnd4 rn3dr r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et rne3uf r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1c 3rock. r2o3de ro3e4 roh1l 3r2ohr 3roi ro1ir ro3le rol4lan rol3l4en rol3s 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe 2ropf ro3ph r1or r2ora ro2r3al ro2rat ro2rei ro2r1o ror3th ro3sh ro3s2i ro3smo ros4san ros2s1c ro3sta rost1r 4roß ro2ßu ro4tag ro2tä ro2tei ro2tho ro4tri rots2o rot2ta ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl 3römi 4röp r1ör r2ös. r2öse 3rötu 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli rpro1 rps3t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rrat2s rr1äm rrb2 rr1c rr2e rre4ale r5rega r5rei rre2le rre2pa rrer4s rre2st rre2ve r2rew rr2he r3r4hen rrik2 rr2n3a r3r2o r4r3ob rro3m rr2st rr3stu rr2th r3ru r3r2ü rrü1b 4r1s r2s1a2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ant rs2au r3sche r6scherl r3schu r3schw r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3sho r3si r4sins rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4sob rson4e r4s1op r4sord r4s3ort. rs2p4 rs4pel r2s3ph r5spi rs3s2 r4stant r5statu r6st5eing rs4temp rster2 rs4terb rs4t3erw rs2th rs2ti r3stie r5stim r2stin rst3ing r3stink r2stip r3sto rs4tob r4stot r3stö r3s4tr rst3ran r6strang r4strun rs2tu r3s4tü r2sumf r3swi r3sy 4r1t rt4abl rtal2 r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är rte1e2 rtei3la rt1ein rtei1s4 r2telf r2temo rte2n1 rte4na rten3s2 rt3erei r4terfa r4terfo rt1erh r4t3er4la rter6mit r4t3ernä rter4re rt1ers rte3s2k r2thi rt2hum r2t1id r2t1ima r2tinf rt4is rto1p rt1or rto2ri r3tö r4t3rak rt3rec r5tri rt3ros rtrü2c r4ts rt4s1eh rt2so rt2spa rt3t4 r2t1urt r3tü rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ruch3st ru6ckerl ru2cku rude2a ru2dr 3ruf ru2fa ruf2s3 ruf4ter 2r1uhr ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus2s1p rus4st ru2st ru3sta 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch rück5sta 4rümm rün3z 2r1v rve4n1e 2r1w r5wei rwun3s 4r1x 1ry ry2c rysti1 2r1z rz2an r2zar r2zas r3ze. rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. 2s1ada s1adm 2s1a2dr 3safa sa2fe 2s3aff 3safi sa1f4r 3saga sa4gent sag4n sa2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4sakt 3s2al. 4s1alar sa4l3erb sa2l1id 3salo sal2se 2s1alt 3s2alz 3sam s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na s3anb s2an2c 3s2and s4and. san4dar san4dri 3sang. 2s3anh 3sani 2s3anl 2s3ans san4sk 4s3antr 2s3anw 2s1ap s2aph sa2po 3sapr 2s1ar 3sar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1asp 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3s4au. 3sauc 3saue sau8erste 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb s3ausw sa2vo 1sä s3ähn 3säl 4s1ält 2s1äm 2s1änd 2s1är 3s2ät 3säul 2säuß 4s3b4 sba4n sbe3r2e 1sc 2sc. 2scam s2cap 2scar 2s1ce 6sch. 2schak s4ch2al 4schanc 4schang 2schao s4chä 4schb 4schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 2schf 2schg 2schh schi4e s4chil 4schiru 3schis 2schk s4chl sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox s4chö 2schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs schs2e sch3s2k sch3sta 4sch3t scht2a scht4r s4chu 4schunt 3schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 4s3cl 2sco 3s4cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sde1s sdien4e sd4r 1se se3at. 2s1e2ben seb4r 2s1echo s1echt 2s1e2ck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l se2gal se2gl seg4r 3seh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh1s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s4ein. 2seinb sein4du sei3n2e sein4fo 4seing 2seinh 4seink 2seinl 2seinn 4seinr s4eins. 4seinsa 4seinsp 4seinst 2seinw 4s1eis 3s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam sel1ec 4selem se4lerl sel3ers 2self. s1elix se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp 3s2en. se4nag se2nä 2s1endl 3seni 3senk se2no 3s2ens s2ent. sen3ta 4sentf 2s3entg s2enti 2s1ents 2sentw 2sentz se2n3u seo2r 4s1e2pos 3seq 3s4er. 3sera ser3a2d se2r3al s3ereig 6sereign se4r3eim se4r3enk ser2er 2s1erfo s2erfr s3erfü 4ser4fül s4ergr s1erh 2serhö 3seri serk4 4s3erken s2ern. 2s3ernt se1rot 4s3eröf ser3r s2ers. 2sersa 4serseh s4ert. s2erta seru2 se4r1uf se3rum se3rund 3s4erv 5ses. se2sel se3sk se1sta se3su 3set 4se4tap se2tat 4s1e2th se1u2n 2s1ex se2xe 4sexp sex3t2 1sé 4s3f4 sfal6l5er sflo4 4s3g2 2s1h 4sh. sh2a 3s2ha. sha2k 4s3han 1shas s3hä s3h2e 3shi. 3shid 4shil shi4r sh3n s3hoc 4shof 3shop sho4re 3show s3hö sh4r 4shs 1si si3ach. si2ad si3am. 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s sieh1e sie4hes sien3 si3ene si1err sie2s si1f4 3s4ig si2g1a2 sig4n si3gnu si2g3r sig4st si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s sik3t4 si2ku sil2br 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 4s1inh sin1i sini1e 2s1inq 2s1ins s2ins. 2s1int 4s1inv 3sio sion4 3siru 3sis si2sa si4schu si2s1e si2s1o si2s1p sis3s 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 2s1j 2s1k2 4sk. 3skala 4skam 4skanz s3kar 4skas skas4tr ska4te. 4skateg ska4tes 4skä 4skb s4kep 3s2ki. s2kif s2kig 3s2kik 4skir ski1s 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4skor 4skow 4skö s3kro 4sks 4sk3t 3skulp 2s1l2 3slal 4slan sla2ve s2law s3lä sl3b s3le sler3s s3li 3s4lip sli4tu s3lo. slo3be s3loe 2s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 1so 3so. so4a 2s1o2b so1c so3et 3soft 3sog s1o2he 4sohng 2s1ohr 3sol so3la so2l1ei sol4ler 4so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2sopf sop3s 3sor. s1orc 2s3ord so2rei so3ren 2s1orga 5s2orge 2s1o2rie so2ro 3sors so4ru 3sos s4os. 4s1ost 3soß so3unt 3sov 4s1o2ve 3sow 2s1ox 3soz 1sö sö2c sö2f 2s1ök s1ö2l s1ös 1sp2 2sp. 4spaa 4spak 2spala spani7er. 4spap 2s3para 4sparo 5s6parten 3sparu 3spaß 4spatr 4spau s2paz s2pä 3späh 2spär 2s3pe. s3pel 4spensi spe3p4 s2pera s1peri 2spero s2perr 2spers 4spet 3s2pez 4s3pf 2spha s4phä s3phe 3s2pi4e 4spier4 spi2k 4spil 3spio 4spip 4spis 2spl 4spla 4splä 4sple 3s2pli s3p4lu s3pn 2spod 2spog s2poi 4spok 4spol 4s3pos s2pott 4spr. s2prac s2pran 4sprax 2spräm 4spräs 3s4prec 4spred s2pren 2spres s2pric 2sprob 2sprop 3spross 3spru 4sprüf 2s3ps 2s4pt 3spuk 2spun 2spup 3spur 4sput 4spy 2s1q 4s3r4 srat2s srat4sc sret3 srö2s1 srücker6 6s1s ssa3bo s5saf s3sag ss1aj s3sal s4s1alb s4s3amt s4s3ang s2sano s4sans ss2ant s4s3anz s3sa1s2 ss3att s3s2ä s4sce ssch2 s4sco ss1ec s2s1ega sse3inf sse3in4t sse6r5att ss1erö ss3erse s3s2es sse3ta ss3l ss1off ssoi4 s2s1op ss1ori s2söl s3spe ss2po s2spro ssquet4 ss3s4 sst2a s3stel ss2th ss2ti ss4tip s3s4tras s3strec ss2tur s3stü ss1ums s1t 4st. s2ta 4sta. 3staa 2stabb s4t2ac sta2ck 3s4tad 3staff 2stag 3stah 2stak 2stale s3ta3li 2stalk st1alm st1alp st1a2mi 4stan. sta4na 3stand 2stani 4s3tann 2stans 2stanw s4tar. 4stari s4tars st1asi 2s3tat. s4tau. 2stauf 2staum 3staur 2staus 2stax 3s2tä 4stäg 4stält s4tänd 5stätt s3täus 2stb 2st3c 2std 4s5te. 4stechn s2ted 4stee 3s2teg ste2gr 3s4teh s2te4i st1eid 3steig 4steil 3steilh steil4z stei4na 1s2t2el 2stel. stel4l3ä 2steln 2stels 2stem 4stem. ste4mar 4sten s5ten. ste4na s4t3ends st2ens s4tentf s2tep 2ster 6s5ter. st5erbie ste4rec ste6rers st3erfü st5ergeb 4sterm 3sternc 4stes ste2se stes6se. ste4st 2stet s4teti 3s4tett 3s2teu 1steue 4steuf st3ev 4stex 2stf 2stg 4sth s4thä s3them s4thi s2t3ho s2thu 2stia 2stib 3stic 2stie. s2tieg s2tiel 2stien 3s2tif 2stig 2stik s2til 3s4tim s4tinf s3tinn st1ins 2stio 1s2ti2r 2stis st1i4so 1stitu 2stiv 2stj 2stk 4stl 4stm 2stn s2to 2sto. s3tob 2sto3d 4stod. 1stof s4toff s4t3om 4ston 4stoo s4tope 2stopo 2stor. 2store 2storg 2stori 2stors s3tort 2stose sto3s2t 1stoß 4stote 4stou 2stow 2stoz 1stö 2stöch 2s3töl 2stöt 2stp 2stq s2tr 2strad 2s3trag 1strah 4strahi 4strai 4strak 2stral 4strans 5straß 4s3traum 4s5träg 4sträne 4s5tref 4s5treib 5st4reif st3renn 2strib 2s4trig 1s4tri2k 2s5tris st3roll stro4ma 2ströp 1stru 2strua 2strug 3struk 2st3run 2strup 2s4t3s2 sts4k 2st3t4 st2u 5stub 4stuc 3s4tud 2stue 3stuf 5stuh 2stum2s stum4sc 2stumt stu2n 2stun. 3s4tund s2t3uni 4stunn 2s3tuns 2stunt stu3re st3url 2sturn 2st3urt 2s3tus 1stüc 2stüch 2stür. 3stüt 2stv 2stw 3s2tyl 4st3z 1su su1an 3su2b3 su4ba2 4subi 3su1c su2cha such4st 2s1u2f 2s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2mel su6m5ents s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n 3sun. sunder4 sun6d5erh su4ne s1unf 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt s4us1 su2sp sus3s 3suv 1sü 2sü2b 3süc sü2d1 süden2 3sün 3s2üs 3süß 4s3v 2s1w s3wa s3we sweh2 4swie 4swil 1s4y syl1 sym3 sy2n3 sy4na sy4nä 2s1z2 4s3za 4szä 4s3zei s2zena 3s4zene 4s3zent s2zes 4s3zet s2zis 4s3zu s3zü 4s3zw 2ß1a2 2ß1b2 2ß1c 2ß1d 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t 2ß1f 2ß3g2 ßge2bl 2ß1h 1ßi ßi2g1a2 ßig4s 2ß1in ß1j 2ß1k4 2ß1l ßler3 2ß1m 2ß1n2 ß1o2 ßos2 2ß1p2 2ß3r2 2ß3s4 ßsch2 ßst2 2ß1t 1ßu 2ß1um 2ß1ü 2ß1v 2ß1w 2ß1z 1ta 3ta. 4taa 5taan 2tab. ta2b1an 2t1abb 3tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 3t6able 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 3taf. 3taf2e 4taff t1afg t1af4r 3t2ag ta2ga ta2g1ei 4t3a4gent 4ta3gl t3ago tag4st tah2 tah3le tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. t1a2ka ta2kro tak6ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk tal3d 3t4ale tal2en ta4lens tal2ga tal2l1ö4 3talo ta2l1op 2talt 2tam 3tame ta2mer t1ampl t1amt 3tan. t1a2na 2tanb 4t2and tand4ar ta3ne 4tanf 2tang 3tani t2ank t3ankl 4tanl t1anm 2tanme 4t1anna t2ano t1ans 3t2ans. 4t3ansi 4t3ansp 2tanwa 2tanwä t2anz. t1anza tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4ren4s ta4r3ere 5t4a3ri 2tark 2t1arm 2tart t1arti tar2to ta2ru 2t1arz 3tas. ta3sa 3tasc t1asp 3tast ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 4tatue ta2t1um 4taud 2t1auf 4taufg tau3f4li 4taufn t1auk 3taum t1ausb 3tausc tau6schr tau6schw t2ause 4t3ausg t1ausk 4tausl 4t3auss 4t1ausw 3tav 3tax ta3xi taxi3s 1tä 3täa 4täb tä1c 4täd 3täe 3täg 4tägy 2täh 2t1ält 4täm t1ämt t1ängs 3tänz t1äp t2är. tä2ru tä2s t2ät 4tätt 2täug 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 4t1c t3cha t3che tch2i tch3l t2ch1u tch1w t4ck t3cl t3cr 4t3d4 tdun2 1te 3te. te2a2 2teak te3al te3an 3teba 3t4ebb 4t1e2ben t2ech te3cha 2teche 3techn 2techt te2chu 2teck te2cka teck2e te2cki te2de te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 3teha 3tehä 3tei. 2teign teik4 3teil 4teilhe 2tein tein3e4c t3einge t3einla 4teinn t1eis. t1eisb te2kel tekt2 3tel. 3tela te2l3ab te2l1ac te2l1au telb4 tel3d4 3te3le tel1eb tele4be te4l1ec te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. 3telg te2l1in te2lit 3telk tell2e tel6lein 4tellu 3teln te4lost te2l1ö 3telp 3tels tel3s2k 3telt4 tel3ta tel3th 3tem. te2m1ei te2min 2temme te2m1o2r 3temper 2tempf tem3s te4m1u 3ten t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 4t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag 4t3engla t4enh te2ni te4n3in t4enj t4enm ten3n tens2e 4tensem tens3th t4enta t1entb 4tentd t4ente 4tentn tent3ri 4t3entw 4tentz ten6zerh ten3zw t1e2pi 3t6er. ter3a2c te1raf ter3am te3ran. te3rand ter3a4s 4terbs 4terbt 3terc 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül 3terg2 ter3ga 6ter6grei t4ergru t4eri te3ria te2rid ter3k 5terkla 4terklä 2t3erlö ter4mer 3termi ter4n3ar 2ternc t3erneu t4ero t1erö ter4re. t4ers. ter3sc ter4ser terst4 t4erst. 5t4ersti 5t4erstu tert2 teru2 te4r1uf ter3za 2t1erzb 3t2erzu 3tes tesa2c te2san 4t1e2sel te2sep tes1er te2spr tes3si t2est tes3tan test3ei tester4 tes6terg tes6terk testes4 te2su 3tet2 t2et. te2tat 4teth 4tetl teu3ere teu3eri 3teuf 3teum te1un 3teur. teu2r3a 5teus te2vi te1xa 2t1e2xe 2t1e2xi 4texp 3text 2t1exz 4t1f4 tfi2l 4t1g2 tger2 t1h 4th. 2th4a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä th2e 1t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem 1then t4hene t4heni 3theo t2hes 3these t2heu 1thi thi3er t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n 1t2ho t4ho. 2t3hoc t3hof 2t3hoh t4hol. t4holo t3hor 2t3hot thou2 2thov 4t3hö 2thp 1th2r2 2ths 2thub 4thun 2thü 2thv t2hy 1ti ti2ad ti3a2m 3tib4 2tic ti1ce tiden2 ti4dend 3tief. tie2fr tieg4 2tieh ti1el ti2el. tiel3a ti3e4n3 3tier tie4rec ti2ern ti1et ti1eu 3tif. ti1fr 4tift 3t4ig ti4gerz 3tik ti2kam ti2kar ti2kin ti2kra ti2krä ti2kü ti2lar ti2lau ti2lei ti2lel 3tilg ti2l3ö til3s tilt4 ti2lu ti2ma2g t2imi tim2m1a 4t1imp 3t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l 3t2ins. 4t1inse 2t1int ti1nu 4t1inv 3tio 3tip ti4que. ti1rh 3tis ti4scha tisch3w ti2sei ti2sp ti1sta 3ti3t2e ti3ti 2ti3tu tiu4 tium2 3tiv ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 4t3k4 4t3l tl4e 5tlem tle2r3a 6t5li tlung4 4t3m2 tmal2 tmen6t3 tmo4des 4t3n2 t5na tnes2 1to 3to. to4as to5at 4tobj tob2l t1obs to1c t3ochs 3tocht to6ckent 3tod tode2 4to2d1er tode4s to4d1u toi4r 3tok to3la 3tole 4tolz tom1e2 2tomg 3ton to2nau to2neh 3too to2pak to2pat 3topo 2topt 3tor. to1ra to2rau to4rän 4torc t1ord 3tore to2rel t1org t3orga 3torin tor3int to2rö 3tors t1ort. to2ru t2orw to3sc 3tose to3sh to4sk tos2p 4toss 3tost4 to1sta 4toß 3to3te to2tho 3totr tots2 3t4ou touil4 to3un 3tow 2tö 3töch 4töf 4t1ök tö4l 5tön t1öst 4töß 3töt 4t3p2 tpf4 2t1q 1t2r4 2tr. 5tra. 3trac tra3cha t3rad. tra4dem tra4far 3trahi 4trahl 6trahm 5t4rai 3trak 3tral 2t3rams 3t4ran. 2trand 3trank t1rann 3trans t3rase t3rasi 4traß t4raue 2traup 5träc 3träg 3träne 4träs 4träß 4t5re. tre4ale 4treb tre2br 4trec t3rech t4reck 6t3red 3tref 4trefe 4trefo 4treg t4rei. 3t4reib 4treic 2treif t3reig 2t3reih t3rein 2t3reis 6treit t3reiz 2trek 6t3rel t4rem t4ren. 3trend 4trendi t3rent 2trepe 2trepo t4repr t4rer t4res. t4ret tre2t3r t5rett t4reu 3treuh 2t3rev 2trez 5t4ré 2t3rh 3tri 4tric 5trieb 2trieg tri2er tri4ers 5trigg t3rind 4tring tri3ni 4trinn t4rip 4tript t4rit tri2x trizi1 3tro. 4trock. 3troe t4roi tro2ke 4trom. tro2mi 3tron 2t3roo t4rop 3tropf 3troy t3röc 2tröh 3tröp 3trös 4tröss 3tröt 3trua 2truf 4truk trum2 trums1 2t3rund 3t4runk 5t4rup tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg try1 2ts tsa4b t3s2ac t2s1a2d t2s1ah ts1al t4s1amt4 t2san ts3ar ts1as t2sau t2s1äh t2s1än t3s2cha t4schar t3sche t4schef ts4chem tsch4li t4schro ts4cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t2s1ent t2s1er t6s5essen t2s1i2d tsing4 ts1ini t2s1ir ts3kr t1slal ts1o tso2r t3sou t2sö t3spal ts1par ts4pare t2spä ts2ped t3spek t2sph t3s2pi ts2pon t3s2por t4sprei ts3s4 t1st4 t2staf t4stag ts3tak ts4tal ts3täti t2stea t2s3tep t3s4tern t3s4tero t2stip t4stit ts3trad t2s3trä t4streu t2stri tstro2 t4strop t2s3trü ts2tu t2s1u 1tsub t3sy4 4t1t tt1ab tta2be tt2ac tta6gess tt1ak tt2al tt3ank tt2ant tt1art tta1s tt1ebe tt1eif tt1ein tt1eis t3tel tte2la tte4leb tte4len ttel1o tte4rec ttes1 tte4sa tte2sä4 tt2häu t2t3ho t3ti t3to tto1s t3tö t3tro tt3rü tt2sen tt2sor tts1p tt2spe tt2spr tt2sti tt5t t3tu tt2un t3tü 1tu tu1alm tu3an 2tub2 tuba3b 3tuc tu2chi 2tud 3tue 4tuf tuf2e tu3fen t3u2fer tuff3 4tuh tu2is 2tuk t3u2kr tul2a t2um. 3t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2t3umr tum2si tum2so tums5tr 2t3umt 2t1umw 2t3umz 3tun. 2t1una 2t1und 3t4une 2t3unf 3tung t3unga tung4s5 2tunif 2t1u2nio 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e4t turin1 3turn tu2ro tu4ru tu2sa tu4schl tu2so tu3ta 2tü 4tüb 3tüch tück2s 3tüf 3tüm 3tür. tür1c 3türe 3türg 3tür3s 3tüten 4tütz 4t3v 4t3w twa2 twi4e 1ty1 3typ ty2pa tys4 6t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1e2c t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3ze2s tz1ind t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4 u1al. ua2lau u1alb u3alet u1alf u3a2lo u1alr u1als u1alt ua2lu u1alz u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au u1ay u1äm u1äu 2u1b u8be8cken. u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub3rä u2b3rit ub2san ub2s1o ub2spa u2büb 2uc uc1c u1ce uch1a u1cha. uch1ä u1che u2ch1e4c uch1ei u3ches u1chi uch1il uch1in uch3l uch3m uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu uch3ü uch1w u1ci u2ckem u4ckent uck2er uck3erl u3ckerr u2cki u1cl 2u1d u3d2a uden3s2 uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e ue2ck u2ed ue2en u2eg u4ela ue2le ueli4 ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2zu u2ep ue2r3a ue2r1ä uer6baut u2ere2 u3e2rec u3ered u3ereh ue3reig u3erer ue4rerg u3erex uer3g2 u3erh u4erinn u3erin4t uer4nan uer2ne uer4ner uern3s4t uer3o uer2ö u3err uer3sc uer3t2 u3erum u3erunf u3erunt ue2ta ue4tek u3fac ufa2ck u3fah uf1ak u3fal uf3ar u3fas uf1au u2f1äs u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern 2uff uff4l uf2fro uf3l u2fob ufo2r uf1ori uf3r uf3sä uf4sin uf4so uf2spo uf2t1eb uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak u2g1ap uga4s ug1au ug3d2 u2g1ei u2g1erf u2g1erl ug4es ugge4st ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ros ug3rüs ug3se ug4ser ug3si ug3spa ug4spr ug4spu ug5stä ug3str ug3s4tü u2gü u1h uhe3s6 uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uhs4 uh1w 2ui ui2ch ui4cker u1ie ui1em u3ig u4ige uil4les u1in. u1is. u3isch. u3ischs uisi4n ui4s5t u1j uk2a u3käu u1ke u1ki u1k2l ukle1i uk4n uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab3 ul1am ula2s ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1er2h ul1erw ule2sa ules3t ule2t ul1eta u2lex ul3f4 ulg4 uli2k ul1ins ul3ka ul2kn ul2les ull3s ulo2i ul1or ul2p1h ul2sa ul4sam uls2th 2ulta ul4tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2m1aus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 2umm umm2a u2möl umpf4li um2pho um2p3le 1umr um4san 3umsat um4ser um2sim um2s1pe um2s1u um3t2 um2un u2m1ur 1umz un1 4un. 4una. 1unab un4al u3n2am u2n3an 4un2as un3at 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp und3st un2d1um undü4 1undv 1undz u3ne une2b une2d une2h un2ei. un3ein un3eis unen2t u4n3erz unes4 unft4s 1unget 1ungew ung5h 1unglü un3gn un2gr ung3ri ung4sa ungs5tr un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku unlö2 unna2 un2n3ad un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1un3si un3sk un3sp uns4t1r 1unt un3ta unte4ri 2unth 2unto un3tr unt3s 2untu unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u3or. u1or3c u3ors uos2 u1os. uote2 u1pa u1pe2 uper1 up2fa u2pf2e u2pf1i u3pi up4lu up2pl u1pr upt3a2 upt3erf upt3erg upt1o up4tr u1q 2ur. u1ra u2rab u3raba ura2be ural4t u2r1a2m ur3ame u2r1ana uran4fa uran4fo u2r1ang uran4ge ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 urd2 ur3di ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri urgros4 urg3s4 uri2c u2r1im ur1ini ur3ins ur1int urk2s ur3l ur4matt 4u1ro u3rol uro1s u1rö ur3p ur3re ur3sac ur2san ur2s3au ur2ser urst4r ur4sw ur3s2ze urt2 ur3ti u3ru urü2 ur2z1a2 ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u2saf us4ann u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us1is. us3kl us3oc u3soh u2s1op us1ou u2spac us3part u2s1pas u2spat us1pe u3s2pek us1pic u5s4piz u2spo us2por u2spu usse4g uss5erfa usser6kl uss5er6su us2sez us2sof ust3abe u1stal us3tau us2th ust2in us3tr u5s4tras us6tris u1stu u2stun u2stur us2ur u2sü 2uß 2u1t ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te u4t1ed ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3er4sa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu utli4n uto1 uto4ber uto3c ut1opf u2tops ut4or utos4 u3tö ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut2spa utt4an ut3te ut5t4l utts2 utu4re utu5ru u3tü utz3eng ut2z1in ut2zo ut2z1w 2u1u2 uufe2 u1ü2 2u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe3c übe4n3 über3 ü4bet üb3l üb3r üb2s3t 2üc ü1che üch3l üch2s1c üch5t4e ü3cken ück1er ück3eri ü4ckers ück4spe 2üd ü4d3a4 ü3den. üden2g ü3d2ens üd1o4 üd3r üd3s2 üdsa1 üd3t4 üdwes2 ü2f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üg4st üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1er2k ü2h1er2z üh1i ühla2 ühl1ac üh1lam üh3l2e ühl2se üh3mo üh3ne ühn2s üh1o üh3r2e ühr3ei. üh1ro ühr3ta üh1s ühs2p üh3t üh4th üht4r ü1hu üh1w ü1k2 ül1a ül2c ü3l4e ül2l1a ül2l1ei ül2lo ül2lö ü1lu ü2ment 4ün ü2n1a ün2da ün2dr ünd3s ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünn2s ün2s ün3sc ün3se ün3sp ün3str ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ürr2 ür2s ür3sc ür3se ür3sp ürt2h ür2zö ür2zw üs2a ü2schl üse3h üse3l üse1s üs2s1c üss2e üs2st ü2st 2ü1ß 2üt ü2t1al ü2t3r üt2s1 üt2tr ü1v ü1z 2v1ab va1c val2s 2vang 2varb va1s v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u 2v1au 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits3 ve3la ve4l1au ve3le ve3li ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 ve4rek verf4 verg4 ve3ri ve4rin ver3k ver3st vert2 ver5te ver3u ves1 2ve3sc 2ve3s2e ves3ti ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vid3s2t vie2h3a vi2el vi3en vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol voll1a vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 3voy vö2c 2v1p v2r 2v3ra v3re v4ree 2v3ro 2vs vs2e v1sta v1steu v3s2z 2v3t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge 3wagen wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les 2walm wal2ta wal2to walt4st 3walz wa3na wandels6 w3anf wang4s 1wann wan6z5en6d wa2p 1war2e ware1i war3ste wart4e 1was wa3sa wa4scha wa3sche wa3se wa3sh wass4e 1wäh 1wäl 2wäng 1wäs wäs2c 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we3cke. we5cken. we3ckes we2e4 weed3 we2fl 1weg we2g1a we2g3l we4gn we2g3r weg3s4 1weh we4i wei4bl 2weie weifel6d weik4 3weil wei3sc weis4s3p weis4t wei3str wei4tr wel6schl wel6schr wel2t1 wel4t3a4 wel6t5en6d wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer2s wer2t1a wer4t3ei wer6t5erm wer2to 1wese we2s1p we4st west1a west3ei wes2th west1o2 west3r wes4tu 1wet wet2s wett3s 2w1ey 2w1g 2w3h wi1cka 1wid wi2e wie3l wien2e wie2st wik2 1wil wim2ma wim4mu win4d3e4c win2dr win2e 2wing win8n7er8sc 1wi4r wi3s2e wi2sp 1wiss wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s3 wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k ws2t 2w1t wti2 w2u 1wuc wuch4sc wul2 wul3se wun2da wun4g3r wun2s 4wur. wur2fa wur2s 1wurst wus2 wus3te 1wu4t1 1wüh wül2 wün3 2w1w 2w1z x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag x3a2m xand4 x2anz 1x2as 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 2xid xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2i2s1 xi3s2c xiso2 xis3s xis4tä x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3t2as xt1ä x2tän xtblo4 x2t1e2d x2t1ei x4tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt3s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere y2es. yes2p ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl3c y4le. yli4n yloni1 yl3s2 y2l1u yma4t ymp4 ym2pha ympi1 y2n1o yno4d ynt2 y1nu y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2po ys1pr ys3t2 y1s4ty y2s1u2 y3s2z y1t2 y2te. y2tes y3to1 yu2r yure3 y1v y1w y1y y1z2 2z3a2b zab3l za1c 2z1a2d 2z1af za3gr 3z2ah zah4ner 2z3a2k 2z1all 2z1am z1an za2na 2z3anf 3zani 3z2ank zan4kl 2z3anl zanti1 2zarb 2zarc 2z1arm z1arti zar2tr 2z1arz z1as za1st4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1ä4c 3z2äh 2z1äm 2zängs 2z1äp z1ärg z1ärm 4z1b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeh2l zeik4 zei3la zeile4 2z1ein zei1s6 zei3sk zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 ze2len ze2l1er ze2l1in zell2a zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zen5s4tr zent3s zen4z3er z2er. ze2r3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2sä ze3sc ze3sku ze2sp zessen4 zes6s5end zes2sp zes2st ze2s3t ze3sta ze2tr 2zetts 2z1ex 2z1f4 2z1g2 zger2a 2z1h z2hen zhir3 zi3alo zi3ar zi2dei zid3r zie4lei zi1erh ziers1 zi1es. zil2e 2z1imp zim4t3 zin2e zin3ei zin4er 2z1inf 2z1inh zin1it zin2sa zin4ser 4zinsuf z1int 2z1inv zi2o3 zi3op zirk2 zirk6s zi3s2z zi1t2h zi2t1o2 ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zon4ter zo2o 2z1ope z1or zo2ri zor4ne 2z1osz 2zö2f 2z1ök z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3sz 2z1t z2t1au z4tehe z3t2her zt3ho z3tic zt1ins z3tö zt3rec zt3s2 z3tü zu1 zu3a zu3b4 3zuc zu4ch zu3cke zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug1un 2z1uhr zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e zung4 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s4 zu5t zut2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 4z1z z3z4a zzi1s4 z3z2o zz2ö",
+ ["length"]=101488,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=15207,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-deo.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-deo.lua
new file mode 100644
index 00000000000..a494532e8dd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-deo.lua
@@ -0,0 +1,50 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="deo",
+ ["source"]="hyph-de-1901",
+ ["texcomment"]="% dehypht-x-2014-05-21.pat\
+% \
+% \\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2014-05-21 (WL)}\
+% \
+% TeX-Trennmuster für die traditionelle deutsche Rechtschreibung\
+%\
+%\
+% Copyright (C) 2008, 2009, 2011, 2012, 2013, 2014 Werner Lemberg <wl@gnu.org>\
+%\
+% This program can be redistributed and/or modified under the terms\
+% of the LaTeX Project Public License Distributed from CTAN\
+% archives in directory macros/latex/base/lppl.txt; either\
+% version 1 of the License, or any later version.\
+%\
+%\
+% The word list is available from\
+%\
+% http://repo.or.cz/w/wortliste.git?a=commit;h=3a97953c0ddd099a1785ea7927cbf24e639090b0\
+%\
+% The used patgen parameters are\
+%\
+% 1 1 | 2 5 | 1 1 1\
+% 2 2 | 2 5 | 1 2 1\
+% 3 3 | 2 6 | 1 1 1\
+% 4 4 | 2 6 | 1 4 1\
+% 5 5 | 2 7 | 1 1 1\
+% 6 6 | 2 7 | 1 6 1\
+% 7 7 | 2 13 | 1 4 1\
+% 8 8 | 2 13 | 1 8 1\
+% \
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíñóôöü",
+ ["data"]=".ab1a .ab3l .abo2 .ab3ol .ab1or .ack2 .ag2a .ag4r .ag2u .ai2s .akt2a .al2e .al3k .al5l4en .al4tei .alt3s .ampe4 .amt4s1 .an3d2 .anden6k .and4ri .ang2 .an3gli .ang4s2 .angst3 .an3s2 .an4si. .an4tag .an3th .an3z2 .aos4 .ap5p6le. .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .arter4 .ar6t5erh .as6sest .as2t .ata1 .at4h .au3d .au4f3 .aufs2 .au2s1 .ausch3 .au6stes .ax2 .äm3 .är6schl .ät2s .äu3 .be3erb .be3r2a .be3r2e .berg3a .ber6gab .ber6g5e6b .ber4gl .ber4g3r .boge2 .bo4s3k .bu4ser .bus3se .bu7s8ser. .ch2 .chi3er .dab4 .da2r1 .da4rin .dar2m1 .da4te. .da4tes .de2al .de1i .de4in. .de8ments .de1o2 .de3r4en .derma3 .dermas6 .de3sk .dien2 .do2mo .do1pe .dorf1 .dü1b .ebe2r1 .ehe1i .ei4ds .ei3e2 .ei4na .einen6g .ei2sp .ei4s1t .ei2tr .eke2 .el2a .el2bi .em3m2 .en1 .en4d3er .en5der. .en2d3r .en2gl .enn2 .en2t3 .epi1 .ep3p .er8brecht .er2bu .er2da .er4dan .er4dar .er4dei .erden6k .er4der .er1e .ere3c .erf4 .er1i .ers2 .er8stein .erster6 .er8sterb .er8stritt. .er8stritten. .er4zen4 .esel4s .es3p .es2st .es2t .est4e .est2h .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe4i .fer4no .fe4sta .fid2 .fi4le. .fi4len .fi2s .flö8s7se. .flö8s7sen. .flö8sses .fs4 .fu2sc .ga2t .gd2 .geb2l .gel2d1 .ge5nar .ge3n2e .ge3r2a .ge3r2e .ge3s2 .get4 .ge3u .grif8fes .guss1 .haft3s .hal2s .hau2t1 .he2 .he3fe .her3an .he3ri .he6r5inn .hi4n .hin3u .ho4met .ia2 .il3 .im2a .ima4ge .im5m2 .in1 .in3e .in3gl .ink4 .inn2e .inu1 .ioni1 .ire3 .is2a .ka2b5l .ka2i .kamp2 .ka4t3io .ken6num .ker3s .ki4e .kle4i .kopf1 .ks2 .kus2 .le4ar .lich8t7er8s .li2f .li4ve. .lo4g3in .lo3ver .lö4ss .lös3se .lu4str .ma3d .ma3la .mal4e .ma4str .md2 .mel2a .me3no .men8schl .men8schw .men3t4 .mi2t .mi4ti .mm2 .näs5c .ni2e .nob4 .no2c .no2s .no4th .nul2 .nus2 .ob1a .obe2 .ohr5s .oper4 .or2a .ort2 .orts3e .ort4st .os5t6alg .oste2 .ost5end .osten8de .oste6re .ost3r .ozo4 .öl3l .pa4r1e .par3t4h .pe2c .pe4ste .pf4 .ph2 .poka2 .po4str .ps2 .rabe4 .ra3me .ra4sp .ra4s3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .ri2as .rich5te .ro4a .ro3m4a .rö2s1c .rö4ss .rös3se .runder6 .ru5s6ses .rü1b .rücker6 .rü4ss .sali1 .sami3 .sas2 .sa3sse .säs4 .sch4 .scho7s8se. .scho7s8ses. .sen3s .ser2u .se2t1 .sha2 .si2te .ski1e .spas4 .spä5s4 .spiege8lei .st6 .sto4re .stras4 .sucher6 .tan4k3l .ta2to .te2e .te2f .te3no .th4 .ti2a .tid1 .ti2e .ti4me. .ti4mes .ti2s .to4nin .to4pl .to2w .tras3 .tra4ss .tri3e4s .ts2 .tu3ri .uf2e2 .ufer1 .um3 .umo2 .ums2 .un3a2 .un3d .une4 .un3g .uni2t .ur1 .ural4 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vi2e .vo4r .wah4l .wa2s .weg5s .welter8e .welter8k .wi4e .wor2 .wort5en6 .xe3 .ya4l .zeit3s .zel4la4 .zelle4 .zel6lei .zi2e .zin4st .zol2 a1ab aa2be aa1c aa2gr 2a1a2n 2a2ar aa2r1a aar3f4 aar3k4 aar5sc aas1t aa2th aa2t3r aat4s1 2a3au a1ä a1b 2aba ab1auf ab1ä ab2äu 1abd ab1eb abe1e ab1eil 4abel abe2la a3beri ab1er2k ab1er2r ab1er2z ab3esse abes2t ab1eß 2abet 2abew 1abf 3abfi 1abg 1abh 2abi ab1ins ab1ir ab1it 1abk ab1l 1a2bla 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu abma3s 1abn a2bo. ab2of 1a2bon 2abor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3s2p abs4t2 2abst. ab3sz 1abtei 2a3bu ab1ur 2abü 1abw 2aby 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb 2a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3s2i ach3su a4cht acht7ersc ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 2ach1w a1ci ac1in 2ack. ackmu4 ackmus3 ack2se ack3sl ack3sta4 a1cl a3co acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag adai4 ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ades2 ade3sp ades6s 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res 2ads2 ad3sz ad2t1 adta2 2adu 2a1e1 ae2b a3e2d a3e2i a2ek a3el. a2ela a2ele a2eli a3els ae2o3 a3e2p 3a2er2o ae4sc a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau4 2afe a2f1ec a2fent af1erl a2fex af2fei af2f3l af4flu 2afi 2af3l a2fö af3ra af3rä af3re af3rö af3s2a af2sp 2aft af2t1a af2tei af4t3erl af2t1o af2t3r aft5re af2tur a2f3ur a1g 2aga ag1a2b ag1a2d ag1am ag1ar ag1au ag2di ag2du 2age. age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ages5s ag3esse age6stem ag3gl 3aggr 3a2git 2a2gl ag4la a4glö ag2n a2gna ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag3sah ag4sam ag3sc ags3p ag6spo ag4sti ag2s1tr 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he ahe1in a2h1erh a1h2i ahin3 ahl3a4 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1o2s a2h3ö ahr1a ah3re ahre4s3 ah3ri ahrta4 ahr4tri ah2ta aht3h ah2t5r aht1s a1hu ah1w a1hy 2ai ai3a4 aian3 aid4s aids1t ai1e2 aif4 ai1fr ai3g4 a3ik. ai3ke aik4r ai2lo aim2o ain2a a1ind ain4e a1ing ain3sp 3airb ai2sa a3isch. ai3s2e aiss2 ais3sen ais5st ait4 a3iv. a3ivl a3ivs a1j ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 2a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr ak3rau 3akro3 2aks ak3sh 2akta 2aktb ak3te ak4tei 2aktik ak2t3r ak3t4ri 2aktsi 2aktst 2a1ku a2kun 2a3kü 1akz a1la 2a5la. al1ab ala3ch2 al1af ala2g al1age a3lal al1am alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala2s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein al4berh al4b3er4w al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr 2ale ale4a 3a2l1e2b 3a4l1ef a4l1eh a2l1ei a4lein a2l1el alen1 al3ends a2leng a3lentf ale2p al1epo al1erf a2l1erh al3erl 3alerm a2l1ert 3alerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 1algo 2ali ali4ene al2imb ali4nal al1ins a2linv alk1ar al2kne 1alkoh alk3s2 al2l1ab alla3d al2lan al2l3a4r al6later al2län al3läu al4lec alle4gi al4leh al5lein al3lend all5erfa al3les alle3se al2leu 1allgä alli5er. alli7ers. al2lob al2lo2c al2lo2k al4lo2s al2lö2 all3öse al2luf allu4s al2lü4s al4m3ast 3almb 2alo a2l1o2b 3a2loe alo2ga al1orc a2l1ö al3öf al2ös 3alpe. 1alph al3skl als2to al2sum al3sun al4tak al3tar alt3eig al4t3er3f alt1op al2tö al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä am2e 2ame. a2meb 2amel am4e2n1 amer2a am3erf a2meri ame3ru a4mesh a3met a2mew 2amir ami3t2a ami3ti 2aml 2amm. am2ma2c 2ammal amma4n am2mar am2mas amma4sc am2maß am4ma4te am2mä ammen8ge. am2min am2mit 2amml am4mod 2ammt ammu2 am4mü amni1 a2mö amp2fa2 am3pr 2ams am4schl 1amt. am2t1a am2t1ä am2tel am4t3ern am2tö am2t3r am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2anas an1ath an4atm an1äs 1anb 2anbu an3ch 2and. 3an3d2ac an4d3ei ande4sc an2dex an4drau an2d3rü and4sas and6spas and6s5paß and2su 2andu and1ur 2ane an3ec a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi anft3s an3f2u 4ang. an2g1ar 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an4g3ra 4angs. ang3sc ang6s3po 1anh 2a3ni an2i3d ani3els ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an 3ankä an2kei an3kl an4klö an2klu an2k3no ank1r ank3ra ank3rä ankt4 1anl anma3s2 1anmu 2ann 3an3na ann2ab 3annä an3n2e ann4sto an1od a3nol a2n1or a3nos 2a1nö 1anr 1an3s2ä 1ansc ans2en an2seu 2ansk an3skr an3s1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr 2anto anton4 3antr ant3rin an2tro 1antw 2a1nu anu1s a1nü 1anw 2anwet 2anzb 1anzei anze2n 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwa an2zwi 2ao ao1i4 a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2a3pa 2ape a2pef a3pel a2pé a2pf ap2fa a3pfl a3phä a2ph3t 2ap3l ap4la ap2n a2pot ap2pf 3appl 2apr 3apri ap2str 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3ra3li 2aran a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arbek 2arben 4arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg ar1ehr a2rein 4arem a3ren 4aren. are3r2a ar2erf a2r1erh a2reri are3u ar2ew 2arf ar2fä arf1r ar2f3ra ar2gl ar2gn ar3g4r 2arh 2a3ri ar2ia ari3e4n ari3erd ari3erg ari5ers. ar1im arin3it a4r1int a4rinw ar2kal ark3amt ar2k1ar ark3aue ar2k3l ar4klag ar2kor ar4k3ri ark3sa ark3she ar2les 2arma ar3m2ä ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1of a2r1op a2ror 2arp 2arr ar2r3ad ar2rek arre4n ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar3t2e artel6li6 ar2the artin2 2arto ar4t3ram art3re 2arts 2artuc 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as2ad as1ala asas2 asa3sse as3au asau2s1 a2sca a4schec asch3la a2schm a3schu 4a3s2e a4seb as3e2m a5s4es a4sex 2asg 4ash a4s3ha as4hi asin2g 4a5sis asi4st a3skop a4s3l a4sn a1so1 as1o2f a3sol as1or as1p aspek6to a4s2ph as2pi a4spl as2po a1spu as3s2a ass2e as2s3ei as3sel as3ser asserma6 as3s2i as2s1p as4st ass1ti ass1to as5str as5stu 2asta a4stec a4s3tep as2ter a4stese 2astr as4trau a4strä ast3räu a2s2t3re a4strol a2stum a3su asu2s a4sw aswa2s 3a2syl aße2 aßen3 2a1t at1ab at2a1f at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2tä at1än at2c a2teb ate1c ateien4 at1eig a4teli at2en a2tep ate2ru atex3 at2h at3ha athe1 3athl a4thr 4a3ti atingma5 3atm 4atmus ato4man 4ator a2t1ort a2t1ö 4atr atra4t at3rä at3re at3rom at3rü at2sa at4schn at2se at4set at2si ats1p at3ta 3attac at4tak at2ta2l att3ang at4tau at2tä at4tec at2tei at3t4hä at2t3rä att3s at3tu atu2n atz1er at4zerk at4zerw at2zi atz1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bab aube4n au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au3en. au2ere au5erein auer3ö au2fa auf1an 3aufber 2aufe. 2aufeh auf1er au4ferk auff4 3aufn auft2 2auft. 2aug 4augeh 2auh au3ha au2hu 4au1i au2is 2auj aule2s au3lü 2aum au2mal aum2ei au2m1e4r1 aum3eri au2m1o aum3p2 aum3s2 4aun au3n2a aun2e au4nei au2nio au1nu a4unz 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 4ausc au4schm 1ausd 2ausen aus3erp au4s3erw 1ausf 1ausg 1ausl au2so au2spr 1ausr 1auss2 au3sse aus4se. au8ssende aus4ser au2sta 2auste au4stec aus3tie aust2o aus3tri 1ausü 1ausz au3ße a4ut au2t1äu au4ten4g au4t3erh 1auto au2trö 2auts 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 a3vi a2vr av2s 2a1w awi3 awi1e a1x ax2am ax2e axi2s 2a1ya a1yeu aysi1 ay3t 2a1z a3z2a3 az2i az2o az2u ä1a äand4 ä1b ä5be ä2b3l äb2s ä1che äche1e ächenma5 ächenmas8 ä1chi äch3l ä2chr äch2sp ä1chu äck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2e äfe4n äf2f3l äf3l äf3r äf4ro äf2s äft2 äft4s ä1g ä5ge äge1i äge2ra ä2g3l äg2n ä2g3r äg4ra äg2s äg3sc äg3str 1ä2gy äh1a 2ä3he ä1hi ähl1a äh3l2e äh4l3e4be 2ähm äh3na äh3ne 1ähnl 2ähr äh3ri 2äh2s 2äh3t ä1hu äh1w 2äi ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl ä5le äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml äm2ma4 ämmas2 ämoni3e 2ämp äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 än2f5 änft2 2änge 2än2g3l än2gr äng3se 2ä3ni änk2e än2k3l än2kr änn4e2 äno3 2äns än2s1c äns2e änse3h 2änz ä1on ä1pa äp2pl äp2pr äp2s1c 1äq ä2r3a2 är4af är1ä är2b3le är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l är4ment ärme3s är1o ä1rö ärse2 är2seb är2si ärt4e är2th ärt4s1 ä2rü är2zw ä1s äs4c ä3s4e äse3g2 äser4ei äse4ren äser2i äse3t ä5si äskop2 äskopf3 ä3s2kr ä2s1p ä3s2s äs4s1c äss2e äss3erk ä5sses äs4s1t äst2 äs2te ä2str ä1ß äß1erk ä2t1a2 ä3te äte1i ätein2 äte2n ä2t2h ä1ti ä1to ät1ob ät3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l äts1p ät2s1t ät4s3te ät4sti ät2tei ät2tr ä1tu ät2zw äu2b3l äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äu4g3l 2äul 2äum äu2ma äum2s1 2ä2un äun2e äu1nu 2äu3r äu1s 2ä3us. äu4schä äu4schm äu3se ä3usg ä3usk ä3usn äu2s1p äu3s2s äuss1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach5t4e backs2 b1a2dr 2b1af bah2nu bahr2e bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4lan balle4b bal6lerg bal4li4g bal4lok bal3lö3 2b1am ba2me ban2a 3b2and ban2dr ba3n2e b1ang ban3gl ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en ba4r3ins bar3n bar3zw 3bas ba3s2a ba2sc ba2str ba4t3ent bauer4l bauer4s bau3g bau3s2k bau3sp ba1yo 3b2äc bä1ch b2är b2ä4s3 4b1b bbe4p b4be2se bb3ler bb2lö b3bru bbru2c bb2s bbu1 2b1c bch2 2b3d4 1be. 3bea be3an be3ar 3beb b2ebe 1bec be1ch be2del bedi4 be1eh be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime be1imm b2ein be1ind be1in2h bei3s2 beit2s 3bek 3bel be3las bel3d be3lec be3lei be2l1en be2let be3li bel3la bel3lä bel3li be2l3ö bel3sz bel3t4 1bem bema5sse bemas8sen 1ben. ben3ar be4nas be4nä ben3dor be3nei 3beng be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 3bensv 2bentb b2enti bent4r b1ents 2bentw ben3un ben3z2 be1o be1ra be2rab be2ran beras4s berb2 berd4 ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4hab ber4in. ber3iss bermas4 berma7sse ber3na b1ernt be1rop berö4 ber3st4a be3rum ber2zö 3bes bes2a be2s1er be5slo bes2po bess4e b3esst. bes3sz beste2 be6stein be4s3tol be4stor best4r be3s2ze 3bet be2tap be3tha bet2to be1ur 3b2ew 2b1ex 1bez 4b5f4 bfal2 bflö4 bflös3 2b1g2 bgas1 bga4st bge3 bges2 2b1h2 bhut2 1bi bi3ak bib2 bibe2 bie4str 3bietu bik2a bi2ke. bi2kes 3bil bil2a bi2lau 4b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1inh 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis4s1c bis3si bi2stu bi2stü b2it. b2ita b2ite bit4ta4 bi2tu bi3tum b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b5lag b2lanc 3blat b2latt 2b3law b2läse b2le 3blea b3leb 3blec 2b3leg 2bleh 2b3leid 4b3lein blei7s 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig b4lis b2lit 3blitz b2lo b4loc b3los2 blo3sse blös4s 2blun 3blut 3blü 2b1m bmas2 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo1ch2 bo3d2 boe1 bo2ei 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d3r bo2rei bo4rig b1ort bor2t3r bo2sc bo3se bo4s3p bote3n4e bo3th bot2st bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra4sp bra4ss brast4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif b3rek 3brem 2b3rep b4rer 2b3riem bri2er b4rio bro1 b3roh 2b3rol b4ron b4ruc bru4s brust1 bru2th 3brü brü4ss 4b1s b2sad bs3ar bsas2 bsa3sse bsat2z b3sä b4sär b5sc bs2ca b6schan b6schef bs4cu b3se. bs1e2b b3sel. bs1ele bse2n1 b3sen. bs1ent bs1er b2serf bs3e4r3in b2sers b3ses b3set bsi2t b4sl b2s1of bs1op bso2r b2sö b3s2pi bs2pl b3s2pu b4ss2 bs2t bst1a2b bst3ac bs3tag bst1ak bs3tät bst1er b4stern b2s3tip b3sto b4stob b4stod b3stö b3stra b2s3trä bs3treu b2st3ro b3stü b4stüb b2s1un 4b1t b3ta bta4st3r b5te b2th bt4r bts2 btü1 bu3ches bu2chi bu2e3 bu2f bug3 2b3umk bunde4s b3ungn b2urg bu3r4i 4burn burt4s bu2sa bu4s3cha bu4schl bu4sch3m bu4schw bus1er bu2si bu2s1p bu4s3ses bu6s5term bu2s1tr bu2s1u bu3tan bü1c bügel3e bü3s4 2b1v 2b1w bwel3 by1 by3p bys2 2b1z2 bzeit1 bzu1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t c4an ca2pe 3car car3n carri1 ca3s2a3 cas2t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 1ced ce2dr 2cef ce1i 2cek 1cen ce1nu 1cer cere3 ce1ro ce3s2h 1cet 2ceta ce1u 1cé c1f c4h 4ch. 2chab ch3a2bi 2ch1ak ch2anb 3chanc ch1ang ch3anst 2chanz 1chao 2char. 1chara 3charta cha2sc 1chato ch1ärm ch1äs 1châ 2chb 6chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefs 2chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch3ess 2cheta 2ch3e4x 1ché 2chf 2chg 2chh 1ch1ia chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch2lu 4ch2m 2chn4 chner8ei. ch2neu 2chob cho2f ch1off ch1oh chol2a ch1orc 2chp ch2r4 2chre chre3s ch3rh 1chron 4chs ch4stal chst3ri 2cht 2chuf 2chuh 2ch1unf 2chunt 2chü 2chv 2chw 5chy 2chz ci1c ci1es cil3l ci2s c1j 4c4k ck1a ck3an cka4r1 ck1ä ck1ehe ck1ei cke2ra ck2ere ck1erh ck2ern ck1er2r ck1ese ck1id ck1im ck1in ck3l ck3n ck1o2 ck3r ck4stro ckt2e ckt2i ck1um3 ck1up c4l2 cle4a clet2 clo1 1clu c2m2 1co co1ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cor3t cos4 co2te 2cp c1q 1c4r2 cre2 cre4mes cry2 2c1s2 c2si 4c1t cte3e cti2 cti4o ctur6 3cu cu2p3 cussi4 1cy c1z 3da. da1a 2d1ab d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho 4d3achse d1af d1ag dagi2o dah3l da1ho 3dai2 da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d2amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d3anei d1ang 2dange 3dank dan4kl dan5kla dan2k1o dan2kr 2d1ans 4dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 dark4 3d2arl dar2ma dar2m1i da2ro d3arr 3d2ars d1art 2dart. da2ru d2arw d1arz dasch4 da3s2h 3dat dat2a dat2e2 da3tei date4n 4d3atl 4d1atm 3dau3e 4d1au2f d3aug 4d1aus 2d1ax 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2d1ärz 2d1ä2u dä3us 2d1b4 dbu2c dbu3s 2dc d1ch dco4r 2d1d2 ddar2m d3dä d3dh d5do 1de de2ad de3a2t 3deb4 4d1e2ben 3dec de1ch de3e4 2d1eff deg2 de3gl dehe2 de3ho 2d1ehr d1ei 3d2eic 3d2e1im dein2d dein2s de3inse de2l1a4g de4l3aug del1än del1ec delei4g 2d1elek 2delem deler4 2delfm del4lan dell3eb del4lei del4ler del2lö2 de2l1ob de2lop de3lor de2lö del2s5e del2so del2s1p del3t4 dem2ar dement4 de6mentg 2d1emp d2en. de4n3end 4denerg 4d3en4ge. d2enh de2ni den4k3li den2kn 4den4sem den4s3en den6s5tau den3th 2dentw de1nu 2deol de1on depi4so d4er. de1rad de2rap der2bl 2derdb de2re2b de4reck de4r3ei4s derer3 de3r4erb de3r4erf de4r3ero derer4t derer6ze d4erfi d2erh 4der4höh d4erhü 3derie derin4f 4derklä der3m2 4derneu de1ro de2rop derö4 der3r 4der4sat der4spa der6t5en6d dert4ra 6der6trag de3ru de4ruh de4rum d2es. de2s1a de4sa4g de4sam des3an des1än de4seh des1en1 des1et des1in 3desk des1o de2sor de2s1p de3spe des5s2 dest5alt de4stam de6stant de4stei de4stit dest5rat de3stri de3stro de2s1u deten4t 2d1etw de1un de1url de3us devil4 d1exi de2xis 2dexp 2d1f4 2d1g2 d2ge. dge2ta dge4t1e 2d1h2 d2his 1di di4ab di2ad di4am di4ath 3dic di1ce dich1 dich5ter di2e di3e2d di3end die4neb di3eni di3ens. di3ern die4s3c diet3 die2th dige4s dik2a dil2s3 2d1imb 2d1imp din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion5s di1p di4re. di2ren di2ris 2d1irl di4s1a2 di2sp di3s4per 2d1isr dist2 di2s1to di4s3tra di2ta di4teng di4t3erl di4t3erm di4t3ers di2t3r dit1s di2tu di5v diz2 2d1j 2d1k4 4d1l2 d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 dni3v d1ob d2oba 2dobe dob4l d2obr do1chi 2d1o2f doll2a do2mar do5na doni1 do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2d1ord dor2f1a dor2fä dor2fl dor2fr 2d1org dori1 2dort dor2ta dor4ter d2os. dos3s dost1 do4sta dot6h do2t1o do3un d1ö dö2d dö2l3 dölla3 d2ön 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad 2drahm d3rai 3d4ram d3rand 2d3rast d3raub 2d3rauc 2draup 2dräd d4räh 2d3rät 2d3räu 4d5re. d4rea. d4reas 3d4reck 2dref 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri 3d4ri. 3d4ria 2d5ric d4rid d4rif d4rik d4rin. d4risc 2driß 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rose 2d3rost 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3rud 2d3ruh 2d3rui 4drund drunge3 2d5rut drü1b 2d1s 4ds. d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schef d4schin d2s1e2b d2s1ef ds1ehr d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse2t d2s1eta d3s2ha d3sho d2sid d2s1im d3s2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pa4s d2spä ds2pe ds2po d3spri d2spro ds2pu dss2 ds3si dst4 d4stabe ds3tauf d4s3täti d4stea ds2til ds2tip d2s1tis d2stod dstras4 ds1ums d2sun ds2zen 2d1t dta2d dtam3m d3tea d2th d4thei dt3ho dto2 dt3r dtran2 dt5s2 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf 2d1ungl dun3ke dun2kl 2dunr dun4st3r 2dunt 2dunw du1o 5dur2c 2d1url 2dursa du4schn du4schr du4schw 2düb 3düf 3dün 2d1v2 4d1w dwa2 dwest1 dy1 dy2s1 2d3z2 2e1a e3a2b eab3l ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eakt2 e3akto ea2la e3alei ealer2 e4aler. eal5le eal3lö eallö3s e2alti2 e2ame eam3m eam1o eam3t ea2na e2ano e3ar. ea2ra e4are. ea4rene e4arer e4ares ea2sc eas5s eat4e2 eater1 e3ath eat3s2 e3at3t4 e3au2f e3aug eaus3s eau3st e3ä4 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en e3ben. ebens3e e3ber ebe4rel ebert4 2ebet 2ebl eb2laß eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebö2s 2ebr eb3rei eb4ru eb2s eb6sche ebse2 ebs1i ebs1o ebs1p ebs3pa eb4stät ebs3t2h eb4s3ti eb4s3tot eb3str ebs1u 2e3bu ebus3s ebu2t1 2eca e1ce ech1ä 2e1che ech1ei e6ch5erzi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3t4ei e1chu ech1uh ech1w e1ci eci6a eck3se eck4sta 2eckt 2e1cl 2eco eco3d 2ect e1d e3d2a ed2dr ed2e ede2al ede3n2e eden4se eden4s3p ede2r edert2 edi4al 2edip edma3 edmas2 e3d2o ed2ö eds2ä ed4seh ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho eede3 eed3s2 ee1e e1eff eef4l eeg2 e1ei ee1im eein4se eei5se eel2e e1e2lek ee5len e1emp e1en eena2 ee4nag e2enä e2enc e2eno een3s e1e2pi eera4 ee2r3as e1erbt e1erd ee3r2e ee4r3en4g eere4s1 ee1ro ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ees2 ee3sh ees3k ee3ta ee4tat ee1u eeu2f eewa4r e1e2x e1f 2ef. 2efa e2f1a2d ef1ana ef1ar e2fat efäs4 efä5sse e2fäu 2efe e3fe. e2f1e2b efell4 ef1em e2fent ef2er efeuil4 2eff. ef2fä2 3effek 1effi ef2fl 2efi ef1id e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan ef2tei 2efu e2fum 2efü e1g eg1d4 e3ge ege4ler ege4n3a4 ege4nec ege2ra ege4s3to ege4str ege1u e2glo e2glu e2gn eg3nä eg3ni egro5sse eg4sal eg4san eg3se eg4sei egs3e4r1 egs2pe eg4sto egs3tü eg2th 2e1ha eh1ach eh2al e2hap eh2aus 2e1hä ehäs3 e1he eh4ec eh1eff eh2el ehe5na ehen2t3 1e2hep e3her ehe1ra e1hi eh1int ehis4 eh1lam eh1lä ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1ec eh2rei ehr4erf ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of eh2s2 eh3se eh3sh eh3si eh3so eh3sp eh3sta 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 ei2bar ei2bl eibu4t ei4b3ute ei2cho eich5te e2id ei2d1a ei3de eid4ein ei4d3er4r 2eidn ei3dra ei1e ei3el 4ei3en eienge4 eie4s eif2e 1eifr ei3g2a 4eigeno eig2er 2eiges 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 ei4l3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl e4i2n1a ein3a2d ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init eink4 ein6karn 3einkä 3einkom ein3n2 1einna ei2n1o2 1einri e4insa einsas4 einsa7sse 3einsat e3insta ein6stal ein4sz 1einu e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei6schin ei4s3erw eis2pe ei3spru ei3s2s ei2str eistra6s ei2sum e4it ei2tab ei2t1an ei2tar 2eitä ei3te ei2th ei2tor ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek3lip ek4n ek2o 2ek4r 2ekt ekt4ant ekt3erf ekt3erg ek4t3er4z ekt2o ek2u e3k2w e1la ela4ben el3abi el2abt el3a4der e3ladu el1af ela2h e2l1ak el3al e2l1a2m e4landa e2lanm el1ans el1anz 2elao e2l1ap e2l1a4r el3ari el1asi el1asp el2ast 2e1lä 3elbis el2da eld3erh elder4p eld5erst el3des eld3s2 e3lea 2elei e6l5ei6er. e6l5ei6ern el1ein e4leinf e4leing e4leinh e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e4l1ent e3lep e2l1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e4ler2ö e2l1err eles2 el1ess e4l1e2ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elg2a elgi5er. elgi5ers elg4r e2l1id e3lie e2lim el1ita 2elk elks2 elk3sc ella3d el3lan el2lap ella2s el2lä el3läd ell3ein el3ler el2leu el3lie el2lil el3l2in el2log el2lot ell3sp el2lu2m el2lü 2eln el5na 2elo e2lof e2lol elon2 e2l1or elo2ri el2sum elt2ak el3te. el5ten. elter4b 3eltern elter4s el3tes elto2 elt3r elt1s2 elt3se elt3sk 2e1lu el1ur el3use e1lü e2lya 2elz el2zar elz2e el2zwa e1m 2ema em1ad ema2k e2m3anf e2m1ans 3emanz emas8sens em4d3a2 e3m2en emen6gel emen4t3h e2m1erw 1e2meti e2m1im emi5na em1int emi3ti 2emm em2map emma3u e2mop 1empf4 em3pfl em2sa em3se em2spr em3t2 1emul 2emü emü3s4 e2n1a 4ena. 2en2ac en3ack e3nad e4naf 4enah e4n3a2k ena3l2i enal3p 4enam en2ame e4nand en3ang e4nanz en3are ena4sc 4enat en3att e3naue en1ä e2när enä4s enbu4s3 en2ce. en3d2ac en2dal endermas8 en4d3ess end4ort end3rom end3s2p end3sz end2um 2ene. ene4ben en1ec e2neff en2eid e3neien e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e2n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en3glo en3gn 1engp eng1s eng3sc eng3se 2eni e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio eni2ö e3nit en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r eno2s enost3 e3not eno2w 2e1nö en1ö2d en3sac ensas2 ensa5sse en2sau en5sche en2seb 3ensem ensen1 en2sep en3ska en3s2po enst5alt en4s3tät en6s5test 2ensto ens5trie e4nt ent4ag ent4ark 1entd en2teb en4terb en3tes 1entf 2entfo 1entga 3entgeg en2thi 3entla 1entn en4t3rol 3entspr 1entw 4entwet 1entz en1u 2enut e1nü 4enwü e1ny enz1ec en4z3erf en4z3erg en4z3erk e1ñ 2eo e1o2b1 e1of eo2fe e1oh eo3m e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eos2 e3os. eota2 eo3ul e1ov e1ö2 e1p epa2g e3p2f4 e2pis 1episo 2epl ep3le 1e2poc ep2pa ep2pf ep2pin ep4pl ep2pr ept2a ep2tal 2e3pu epu2s e1q er1a e3ra. era2be e3rad. er3adm eraf4a era2g e1rai er3aic e2rak e1ral er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a6si era4sp era4s3s er4ast era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm e2r1ä4s erb2e erb2sp er1c er3chl erda3me 1erdb er3de 2erdec erde3in er4d3en4g erd3erw 4ere. er1eb e3rech er3echs er1eck er1edi ere4dit er1eff er1e2h 2e3rei. er1eig e2rein e4r3eis. ere2l er1ele ere3lev 2e3rem e2remp 2eren e3ren. e3rena e4rense e4rentf e4rentn e3renz eren8z7en8d er1ep 2erer. e2r3erf e2r1erh 2erern e3rero er1err er1ers e2rert er1erw 2eres er1ess er1eß e4r3e4ti er1eul ere4vid erf2e er3f4r 4erfür 3ergebn 4ergehä erg3els 1ergol 4ergrem e2rh 1erhab 4erhals er3he 4erhöhe er3hu 2erhü 2eri e2riat e3rib 4e3ric er1i2de e3rie eri3e4n3 eri5ers. e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1ins er1int e3rio er1ita 2erk. 1erklä 2erkli er3ko 2erkre erk3t 2erlag 3erlebn 4erln erm2e ermen4s erm3ers er4nerk ern1os e1ro. er3oa er1o2b e2r1o2f e1rog e1r1oh e1rok e1rol e1rom e3ron er3ony er1op e4ro2r e1ros e1rou e1row er1ox e1roz erö2d 2erök er1ös er3p4 er3rä er5rei erri3er 2errü ers2a ersch2 er5schn er3se er5sen er3s2i er3sk ersma3s4 er5smo er3sn er3sp er3sto er3sz ert2ak er6terei er4t3erf er4ter4h er4ters er2t3ho 4erti ert3ins ert3s2e 2ertür 2eru eruf4s er1u2m er1und er1uns er3uz erü4b 3erweck e1s e4s3ab e3sac esa2d es2an es4and es4ank es3ant e3s2as esa3sse esas6sen esa6sset e4s3ato es3av esäs4 es2äu 2esb esbi5er. e3sc es2ca es3cap es2ce esch2l esch2n e4sco e4scu e3se. es1ebe es1ehr e2sein es3eva 2esf 4esh es3ha es4har e3sig e2s1il es1ini e4s3ins es3int es2kat e4s3ke e4sky e4s3l es4log 2esm e4sn eso2r es2ort es2ö 2esp es2pek e3spi e3s2por e3s4pra e3s2pu 2esr essali3 es2sau 4essem ess4e3re ess3erg es3si 2esso es2sof es2s1pa es2spu es4ste estab4b est1ak e3stan e4starb 1e2stas es2tau es2te este2c e4st3eng e4st3erh e4st3ess e5stev e3sti e4stip estmo6de e2stod est3ori 2estro es3trop es2tu e3s2tü es2ty e2s1um es1ur e4sw e3sy eße3r2e e1t e3ta. etab4 etal4la4 etal6li6n et1am eta2mi 1etap etari1 et4at et1äh 2e3te e4t1ein ete3ke et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal ethi1 et3hü e3ti eti2m eti2ta 2eto eto2b e2t1of e2torg 2etr e4traum et3rec e4tres etsch3w et1s2p et1su etta2 et2tab et2tad etta3ge et2ta4s et2tau et2tä et2tei ette4n1 et4teu et4th et2tö4 et2t3r et4tro ett3sz et2t1um et2tur et2tü4 etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3b4 euen2g eue6reif euer4ri eu2e5sc 2euf eu2fer eu2ga eu4gent eu3g2er eug1s2 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eums1p eum3st 2eun eun2e eu4nei eun4er e3un2g eu2nio eun3ka eu1o2 eu1p2 e2u3r2e 1euro eu2rys eu1s4 eu4sis eu3sp eu3ss eust4 2eut eut2h eut6schn 2eux eu2zo eu2z1w e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo ev2s e1w 2ewa e3wä4 ewä6s 2ewe e2we. e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi 2exie e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey2n eys2 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p 1fa 3fa. fab4 f1abe fa2ben 2f1a2bl fab5s fa4cheb fa2ch1i fa2cho fa2ci f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl falla2 fal4lei fal6lenk fal6l5er6k fal2li4 fal6scha fal6schl fal6schm fal3te 3fam f1amt 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br 2f3arc 3fari farre2 far4rec far4reg f3art 2f3arz 3fas. fa3s4a fa3sh f3at fa2to 2f1auf f3aug fau2s f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u f1älte 2f1ärm f1ärz fä4s fä6s3ser fä2ßer 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1ei3s fek2ta fe2l1a fel4da fel2dr 2f1e2lek fe2l1er fe2les fel3la fel4lei fe2l1o fel4soh fels2t fel3t f2em. fem4m 2femp fen3a2 fe2nä fe2no fen3s2a fens2c fens2t2 fen6stri f1ent 3fep f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau fe2r1ä ferde3 f2ere fer2er fer3erz f1erfa fe2rid 3ferk f2erl. 4ferneu fe1ro f4erpa f2ers. fers2t f2ert f1erw fer8zeuge fes4t fe2st1a fe4st3ei fe2str 2f1eta fe2tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ffa2b ffa2ce f3fal ff1ans ff3ar ff4arb ff4art ffa4s ff1au ffa2z ff2e ffe2e f2f3ef ff3ei ffe1in ffel3l ffe2m f2f3emi f2fetz f2fex f2fil ffi2xi ff3lag ff3li f3flu f3flü ffo2 f2fö f3f4rä ff2sa ff2sp ffs3tan 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni 2f1int fi2o fi3ol fi2r fi3ra fi4re 3fis fis4a fisch3a fisch3o fisch3w fi3so fis2p fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f5lan3d f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb 2f3lein f3ler f3li. 3f4lim fli4ne 2f5lon 1f4lop flo7s8ses. 1f4lot flo2w f3lö 4f5löf 1f4lug flu4ger f4lü f5lüd f5lüm 2f1m2 fma2d fmas2s fma3sse 2f3n2 fni2s 1fo fob2l 2f1o2f foli3 fol2k1 fo2na fon3au fon2e fo2nu 2f1op fo1ra 4f3org fo3rin for4m3a4g forni7er. for4sta for4sti fort3 for4tei for2th for2t1r fort1s for3tu f1o2x 1fö 2fö2f 2f1ök 2f1öl 4f1p2 2f1q f2r2 f4rac frach6tr 2f5rad fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg f3reic freik2 frein2 f3rep 3f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc fri6ster f3roc 1f4ron fro2na fro2sc f3rot f3ru f3rü 4f1s fs2amm f2san fs3ar f2s1as f2sauf f2saus f2saut fsä4 f3sc f4sce f4schan f4schef f2s1e2b f4sehr f2s1em f2s1ent f2s1er fse2t f2s1eta fsi2d f3s2kie f2s1o2 f3span f2s1pas f2sph f3spi f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 f2stas f4s3täti f5stel f2stip f2s1tis fst4r f4s3tres fs1trü f3stü f4s3tüte f2sty f2s1un f3sy 4f1t f2ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat f2t1äu ft1e2h ft1eig ft1ein ft1eis f2t1ent f2t1e4ti f2th f4thei ft3ho f2t1id ft1op f2t3ot f2t3ro f2trö f3t4ru fts1 ft2sa ft4sa4g ft4sam fts2c ft4sche ft2se4 ft4seh ft2si ft4stä ft4ster ft4stes fts2ti fttra4 f2tum ft1url ftwa4 ft3z2 1fu 3fuc 3fug 3f2uh f1um 2f1unf 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2 fu3sse fus6sen fu4sser fuss1p fus4s1t fu2ß1er 3fut 1fü 2füb fü2r fü3s4 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga f3z2w 3ga. 2gabf ga2b5l gab4r 2gabz ga1ch 2gadl 2ga2dr ga1fl ga1k ga2ka gal2a 2g1a4lau g4amo 2g1amt 2ganb gan3d 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano gans2 2ganw ga1ny 3gar. 2garb 2garc 3gard 2g1arm ga3r2o 3g2ars 2g1arti ga3ru 2g1arz ga2s ga3sc gas3ei ga4sem ga3sp ga4spe ga4spr gas5s ga3s6ses gas3tan ga4st3el ga3str ga4stra4 gastras5 gas4trä ga4stre gas1tu gat2a 2g1atm gat4r gau1c 2g1auf 2g3aug g2auk g1aus 2g1aut 2g1äp 2g1ärz gäs2 gä4u 2g3b2 gbau5s gber2 gbi2 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö gd3r gd3s2 gdt4 gd1ur 1ge ge3a2 geb2a gebe4am ge3ble geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge3ha ge4ig ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is4 2g1eise2 gei3sh gei4sta 2gek. ge4lanz gelb1r gel4b3ra gelder4 gel6ders ge3le 2g1e4lek geler3ö ge4l3ers ge4less gel3l2a gel3le ge3lor gel3sa gels2p gels2t gel3sz gel3t2a ge3lü gelz2 gem2 gem4e ge3mi 3gen ge3na ge4n3ac ge4nam ge4nar gen2as gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen6erwe gener4z genma7sse. gen3n gen3sz 2gentf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t germas6s ger3no ge1ro ge1r2ö ger4sto ge3r2u g1erwa 4g3erwer ges2c ges3elt ge2s1er ge3s2i ges2p ges4pi gess2t gest2 get2a ge3tan 2getap ge3t4u 2g1e1ul 2g1ex 2g1f4 4g1g gga2t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. 3ghale gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gia2s gie3g gi2e1i gi2el gien2e1 gift5s gi2gu gi2m gi4mes 2g1ind gi3ne g1inf gin2ga 2g1ins 2giok 2g3isel gi3t2a gi4us 2g1j 4g3k2 4gl. gl2a 4g1lab g1lac g2lade 2g1lag 2gland gla4s3ti gla4stu 3g2laub 4g1lauf g1läß 2gläuf g2l4e 2gle. 3gle3a 2g3leb g3lec g3leg 2gleh 3gleic 4g3lein glei4t5r g3len 4g3ler 2gles g3lese g4lia 2glib 3g2lid g2lie 2glif g2lik 2glil g2lim 4glin g2lio 2glis g3lisc 3g2lit g2liz 3g2loa 3g2lob 4g3loch glo3g 3g4lok g2lom 3g2lop g2lor 3g2lot 2glös 2gls g1lu2 2g3luf 2glun 4glu3s g2lut g1lüg g2ly 2g1m2 gmül3 g1n 2gn. g2n2a g4na. 4gnah 3g4nat 3g2nä gn2e g3neh 2gnel gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 g2no1 g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1o2f 2gog 2g1oh go1i2 gol2a 2gonis 2g1ope 2g1opf g2o1ra 2g1ord 2gorg go2s go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2g3radl 2g3rah 4g3rak grammen6 gram8m7end grau3f gräs5c 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2greim 2g3rein g3reit g3rek g4rem 2g3renn gre3no gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring gro2bl 2groc 2groh gron4 gros2 2g3rose gro5sse. gro7ssen. gro7sser. gro5sses g4roß gro4u 2gröh g4ruf 2g3rui 2g3rum grun2g 3g4rup grus2s gru3sse 2grut 2g3rüc 3g4rün 4gs g2sa gs1ac gsa2d gs1af gs1ag g4s3a2k g3sal gs3all g4salt gs3ama g4s1amb gs3an gs3ar gs1as gs1ä g4sca g4sce gsch4 g4schef g5schü gs3cr g2s1e2 gse3e gs2eh g3s2eil g3sel. g3seln gsen1 g4ser gser5f g4seu g2s1i gsi2d g3sig g5sil gs3l gs1o2 gs1p4 g3s2pek gs4pie gs3pl g5s2por gsrat4 gs3s2 g3star gs1tau g4s1tä g5stäm g5stel g4stemp gst3ent g4sterm gst3err g4s3test gst2he g3sti gs1tis g3sto g4ston gs1top g4s1tor gs1tot gst4ra gst5reit gst4ri gst5rit gst3ros gs1trü g3stun gs1tü gs2tüc gs1u g3sy 4g1t g3te gti2m gt4r gt2se 1gu gu1an. gu1ant gu1as gu4d3r gu2e 2gued guet2 2g1u2f 2g1uh gu1ins gu1i4s 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl 2g3unk g2uns 2gunt2 3gur 4g1url gurt3s gu2s3a guschi5 gus2sp gus4st gu3sti gu2ß1 gu2t gut1a gu4t3erh gut3h 2güb gür1 gü3st 2g1v 2g1w 2g3z2 3haa hab2a hab2e 2habn ha2cho ha2del ha4din h1adle haf3f4l haft2s hafts3p h1ah h2ahs ha3ia h2aj 2haka ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei hal4b3r 2hale hal4lei hal6lerf hal4leu hal4lok h1alp halt5r h1amt h2an. 2hanb h2and han2da han2kr h4ann 2hanr 2hant hao2s h1ap ha2pl ha2pr h2a3ra 2harb h2ard h1arm. har3ma har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 ha2ß1 hatt2 hau5f6lie 2h1aufm h1aukt hau2sa hau4san hau2sc hau4spa hau4ss haus5sen hau4s3ti hau4sto h2aut. hau6terk 2hauto hau2tr h1äff h1ärz hä4s hä5sc hä6s5chen häu2s1c hä3usp 2h1b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad hea5t he3be he4b1ei he2bl he3br he1ch he3ch2e h3echt hed2g he3di he2e3l hee2s he2fan he2fä he2f1ei hef3erm 2heff he2fid he4f3ing he2f3l he2fr he3fri he2fu he3gu h4eib h1eie h1eif h1eig he2im heim3p hei4mu 2hein heine2 4heio he1ism he1i4st heit4s1 h1eiw he2l3a hel1ec h3e2lek he3len hel3ers he3li hell3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h3emp h2en. he4na2 hen3a4g he2nä he2n1e2b hen3end hen3erg he2net heng2 2heni he2no hen3sk hen3s2t2 h1ents 2h3entw hen3z 4he2o he3on he3op he3pa he3ph h2er. her3a2b he2ral 2herap he3ras herau2 herb1r her4b3ra he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h3erfü herg2 her2ho 4herif herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm herma3s he3ro he4r3o4b h1erö hers2t hert2 her3th her2z1w he2tap heter2 he3th het2i he3t4s h2e2u heu3g 3heusc he3x he1x2a he1y2 1hè 2h1f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 hhoh2 4hi. 2hia hi2ac hi2ang h2ias hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin2t1a 2hio hi4on hi3or 2hip1 hip3f hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro hir2s his2a hi2se hi2spa hi3ti 2hiu 2h1j 2h1k4 hklo3s 4hl hl2ag hlam8meng hla2n hl1anz h1las h1lat h1laut h3läche h3läd hl1är h1läs h1läß h1läu hlb4 hl3d4 h3leb hle3e h3lein h2leis h5len. hl2eng hl2enn h3ler hle2ra h2l1erg h6l3er4nä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif h2lim hl1ind h2lip h2lis h3list h2lit hl3l hlle3b hlma3s2 h2lo h3loc hl1of hl1op h4lor hlo2re h3losi h2lös3 hlö4ss hl2ser hl3sku hl3slo hlst4 hls2te hl2sto hl3str hl3t2 h3luf h3luk h3lumpe h1lüf 2h1m h2mab h3mad h3mag h3man h3mar h3mas hma3sse h3maß h3mä h4mäc h4mäh h4mäl h3me. hme1e hme1in h3meist h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s1p h2mu h3mul h3musc h3musi 2hn h2na h3nam hn1an h3nau. h2nä hn1äh hn1är hn3d4 hn2e hne3b hne2e hn3eig hn3ein h2nel hne4n1 hne4pf h3ner hner3ei h4nersa hn3ex hnhof8stra8s h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hns2t hnsuch4 hntra4 hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2c hoch3 hock3t 2hod hoe4 ho2ef ho4fa hof3fa ho2f3r 2hoi 3hole ho2l1ei hol3g4 ho4lor 3hols h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hond4 hono3 2hoo 2hop ho1ra hor3d 2h1org ho3se ho4sei ho3sl ho4sta ho2str 2hot. ho3th hotli4 2hot1s2 3hov 2ho2w1 h1o2x ho1y2 hô1 1h2ö hö2c 3höhe h4ör hö4s hös1c hös3se h3öst 2h3p2 h1q 2hr hra2b hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r1eig h3rel h3ren h3rep hr4erbe hr4erbu hr2erg hr2erk h4rer4la h3rerle h6rer6leb hr6erlei hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rinh hr1ins h4rist hr3l hrm2 h2rob h2rof h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr4s3an hr2sau hr3sch hr2s1en hr2ser hr2set hr2s1in hrs3k hr2s1of hr4stec hr2su hr4sw hr2t5ab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se hrt4ste h3ruh hr1ums h3rü h4rüb h4ry hrz2 4h1s h4s3acht h2sa2d h4samt h2san h2sau h2säh hsä4s h3sc h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1o2f h2spac h2s1par hs2pen h2sper h2sph hs2por h2sprä h2spro hss2 h2staf hst3alt hst2an h4starb h2stau h2stäl h4stea h5stel hst2he hs1tie h2stin h2s1tor h3stö h3str hst3ran h2stu h3stun h3stü h2s1u hs2ung h3sy 4h1t ht1a h2tak h3t4akt. ht2al h2talo ht3alt hta2m h2ta4n ht3ane h3tank h3tann h2tar ht2as h2t3ass h2tasy h2t3a2t h2tau ht3aug h2tax h2t1är h3te. ht1ec h2t1ef ht1eh h3teha h3tehä hte2he h2teif h4teilz h2t1eim ht1ein h2t1eis h2t1eke h4t3elit h2temp h4tentf h4t3ents hter6de. ht3erfü ht3ergr h2t1er2h ht5erken h4terkl h6t5erleu h4t3er4re h6t5er6spa h4t3er4st ht6erste h2t1erz h2t1ese h2t1ess h2t1eu h2t1ex h2th h4thei hthe3u h2t1im h2t1in h4tl htni2 hto2 h2toly h2torg ht3rak ht3rand h2t3ras h2t3rat ht3rau h4traub ht6raume h3trec ht3reif ht3reit ht4ri ht5rieg h2t5rin h3trit ht3ro h2trol h2tros ht4rot ht3rös h2t3ru h2t3rü h4ts ht4s3an ht4s3end ht4spin ht3spri ht4stab hts2ti ht4s3tur ht4s3tür htt4 htti2 htu2e h2t1urs ht3z2 hu2a hu2b1a hu2bei hu2b1en hu2b3l hu4b3r hu2bu hu2h1a hu2h1i huk3t4 hu2l3a hu2lä hu2l3ei hu4leng hu4lent hu4ler hu2let hu2l1in hul3l hu2lo hu3m2a h1ums hu2n h1una hu3ni1 h1ups 2h2ur hurg2 hu3sa hu2so hus4sa hus3se hus2sp hus4st hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib h1weih h2wirr 3hyg hyl4 3hyp hy2pe. 2hy2t 2h1z hz2a hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3a4lerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3al5l ia2lor ial3s ial3t4 ia2lu ial3z2 i2am4 i4amo 2ian ia2nal i3and2 ian2e i3ann i2a3no i3ant i3anz i2ap ia3pf ia1q i3ar. ia2ra i2asc ia3sh i2asi i2a1sp ias5s iast4 i3at. i3a2ta i4ate i3at4h 1iatr i3ats i3au ia3un iau2s1 2iav 2iä i1äm i1äp i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b ib1art i2b1auf ib3be ib2bli ib1ei i2beig i2beis ibe4n iben3a ibi2k i3bla i4blad i3blä i3ble i4bleu ib2o i2bö i4brä ib3ren ib2ser ib4ste i2bunk i2bunt ibus1c ibus3s 2ic ic1c ich1a ich1ä i1che ich1ei ichermas8 ichgro3 i1chi i2chin ich3l i3chlo ich3m ichmas4 i1cho i2ch3r ich3ter ich2tr i1chu ich1w i1ci icks2 i1cl i1d id2ab4 i3d2ac i3dam id1au idbu4 1i2dee idein3 i4deis idel2ä ide3so 1i2dio idni3 i2dol 1idol. 2i2dr i3dsc id2s1p idt4 1i2dy ie3a4 ie2bä ie2bl ie2bre ie2bri ieb4sto ieb4str ie1c ie2cho ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ief2i ie2f3l ie2fro ie4g3l ie3g4n ie2g3r ie3g4ra ieg2s iegs1c ieg4se ieg4s1t i1ei i2e2l1a ie3las iel3d i2ele iel1ec ie3lerd ieler8geb ie4less i2eli i1ell iel3lä ielo4b i2els2 iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä ien3d i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3eng ienge4f i3enh i3enj i3enk i3enm ienma3s4 i3enn i3e2no i3enö i3enp i3enr ien3s2e iens2k ien6st5er ien6stop iens4tr ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 iera2 ier3ad ier3an ie2r3ap i2ere ie3red ie3r2er ie4rerf ie4r3erz ie3res i3ereu ierf4 i4eri ierin3 ier3k4 ierken4 ierma6ss i1ern i3ern. i4erna i2er5ni ie2rö iers2e ier4s3eh ier3sta ier3te ie3s2 ie4sh ie4s3k ie4spu ies4s iess1t ie4stas iest6e ie2t1a ie4t3erh ie4t3ert ie2t3ho ie2t1o ie2t3ö2 ie2tri ie2t3ru iet2se i1ett ieu2e ie1un ie2w3u i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en if1erh if2fa iffe4s if6feste if2fl if4form iff2s if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if3sa if2ta ift3erk if2top if2t3ri ift1sp ifts2t ift3sz 2i1g iga1i i2g1ang ig1art iga3s i4gefar ige4na ige2ra ige3ran igerma3 ig1erz i2g1im i2gl ig1lä i4glo ig4na i4gnä i3g4neu ig4no i3go ig4ra ig3rei igro3 ig3s2a ig4sal igsau4g ig1so ig1sp ig2spa ig4sti ig4s1to ig2stö ig4s3tre 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ih2s ih3sp i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k ik1ak ika4ka ik1amt i2k1ano ikanten8n ik1anz i4kanze ik1art ik3att i2k1au i2k1är 4ike i2k1ei ik2e2l1 i2k1e4r2e ik1erf iker6fah i2k1er2h i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 ikot3t i2köl ik3ra ik3rä ik3re ikro3 ik3so ik3s2z ikt2e ikt3erk ikt3r ik2tre i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 4ilb il2c il2da il4dac il4d3en4t il3d2er ild1o il2dor il2dr il1ec ileid4 il1ein il1el i4lents i2l1erf i2l1erg i2l1err il2erz il2f3l il2f3re ilf4s1 ilg2a il2gl ili3e4n1 ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il4lad ill4an il2lä2 il2leg ille4ge il3l2er ill2i 2ills il2mak il4mang il2m3at il2m1au il2min 2ilo i2l1or ilt2 il3th il3tr i1lu2 i2lum i3lus ilv4 il2zar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur 2ime i2mej i2m1ele i2melf i3men i2m1erf i2m1erz i4mesh i2meti i2m1inf i2m1ins im4m3ent im4mit im4mod imni2 2imo im1org imp2fa 1impo imp4s im3pse 1impu im2str 2imt imtu2 2imu in1ac in3ach. i4nack i2n1ad in2af ina4lin in1am i3nap in2ars in2art ina4s i2n3au2 inaus1 in1äh in1äs inbus2 in2dal in2dan in3dau indes4t 1index in3do 2indr ind4ri in3drü 1indus in3d2ü 2ine i2n1e2be in1ehe i2n1eng in3erbe i4nerbi in2erh iner4lö i4n3er4tr i3nes i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ingmas4 ing3sc ing4sto 1inhab 2inhar 2inhau 4inhe in2i3d 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn ink4ste in3k2ü inma4le 2inn. in4n3erm in2neu in4ni2v 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 2inse. in2seb 2insen ins3ert in3skan in3skr in4s3tät ins2te ins2ti in3su 1insuf in4s3um in3s2z i4nt 2inta 1integ int2h in3t4r int3s in1u i3n2um in3unz invil4 i1ny i1ñ 2i1o ioa4 io1c io2d i2oda io3du io3e2 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2n3au ion3d i3on4s1 ions3p ion3t i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s i2ost ios2u i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i1ön i1ös. 2ip. i1pa i1pe ipen3 i3per iph2 2i1pi ipi3el ipi3en i3p4l ip2pf ip2pl i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak ira4s irat2 i1rä ir1äh ir2bl ir1c ir2e i3ree 2irek irg2 ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir2mä ir2m1ei ir2mum ir4m3unt 2irn ir2nar ir2no i1ro 1iron i1rö irpla2 ir2rei irre4l ir4reli irr2h ir4schl ir4schm ir4sch3w ir3se ir3sh irt4s1t 2iru iru2s1 i1s i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca i3s2che i4schef i4sch3e4h i4sch3ei i2sch1l isch3le i2schm isch3ma isch3ob isch3re isch3ru i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 ise4n3a is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat isi2a i2s1id i2s1of iso2n isonen4 iso6nend is1op 3i2sot 2isp is1pa i2spar is1pe is1pic is2por i2spro is3sa is4s1ac is4sau is3sc is4s3che is3senk issermas8 is3so is3spa is4sper is3spo is2s1t is3sta is4ste is3sto is3stu is2su i2stab ist3ac i4stam ist2an i4stea iste4n is2ter ist4ra is3tras3 ist3re is1trü i2stur is1tüm i2sty isum3p i2sü i1ß iß1ers i1ta it1ab. i3tag ital1a ital5l it1alt it1a2m it1ang it3a4re it1art i3tat it1au i3tauc i2tauf i2t1ax 4i1tä i2t1äs ität2 i1te i2tei i4t1eig i4t1ein 2itel ite2la ite4n itens2 i4tepo i2tex i3thr i1ti i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn i3tis it3iss i3tiv i4tl itmen2 i1to i3toc i2t1of i1tö i1tr i3tra. it3raf it3ran it3ras it3rau it3räu it3re it3rom it4ron i3tru it3run it2sa it4s1a4g it2s1e4 its3er1 it4set it4stec it4s3tem it4s3tes it2sti it4stie it2s1to it6stra6s it2teb it4temp it2tri i1tu it1uh i2t1um i2tuns it1urg itut4 i1tü 2itz it2zä it4z3er4g it2z1w 2i3u2 ium1 ius1t i1ü 2i1v i2v1ak iv1ang i2veb iv1elt ive4n iv1ene i2v1ent iv1erl i2v1ur 2i1w iwur2 2i1x i2xa ix2em ixt2 4i1z iz1ap iz1au iz2ei izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l jah4rei jahr4s ja3l2a ja3ne jani1 jani3t2 2jat je2a jean2s je2g jek4ter jektor4 jek2tr je3na je2p je2t1a je2t3h je2t3r jet3t je2t1u2 ji2a ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung5s ju3ni jur2o jute1 2j1v 1ka 3ka. k1a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 ka1k4l 2kakt 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2k3l kal2kr k1all kal3lö3 kalo5 kal2tr ka2lu k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kank4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu3 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg kari3es k2ark 2k1arm karp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw kasi1 ka2sp kas3s ka3tan ka3t4h ka2t3r kat3se 2katt kau2f1o 4kaufr kauf4sp kauf6s5te k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 kä2s5c käse3 kä3th 2k3b2 kbe1 kbo4n kby2 2k3c 2k3d2 kdamp2 2k1ec k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehrs3o kehr4st 2k1eic 2k1eig k1ein ke1in2d 2keinh 2k1eise ke2l1a ke3l2ag ke2lä kel3b4 2k1e2lek ke2len ke2l1er 2kelet kel3la kell4e kel3li kel3s2k k4elt 2k1emp k2en. ken3a ke4nac ke2nä kenbu5s4 ken3dr 4ken4gag 2kenlä ke2no ken4sem kens2k ken5s4te ken3sz k3en4te. k3en4ten ken3th 2k1ents 2kentw 2kentz 2keo2 ke2pl k2er. ke1rad k2erc ke3reig 4kerfah k4erfam k3ergeb ker6gebn k3er2hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k4erl. ker4lau k3er4leb k6erlebe k4erlö ker4neu k1ero ker4reg k2ers. kerz2 k1erz. ker4zeu 2k1er2zi k6es. ke2sel ke2t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1ch 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o kin3s 2k1inse 2k1int ki3or kio4s 5kir kis2p kis5s kist2 kiv2 2kiz ki3zi 2k3j 2k1k4 kl4 4kl. 4kla. 4kland k4lar 4k1last k3laug k2le 4kle. kle2br k3lee 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lim k2lin k2lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k3lor klos2 2klos. klo3sse klost6 k2löt k1lu k2lud kluf2 k2lug k1lüc 2kly 2k1m kmas2 k2n2 3knab k3ne k4nec k4nei 2knes kni4e kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol2a ko3le kol2k5 3kom ko4mu k2on ko3n2e kons4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri kor4n1a k2os ko2s1p ko3ta kot1s2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 2k3q k2r4 2k3rad k4ral kra4s3 k3rats 2kraum k4raz k4räc k4rän 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron kro4ss 2kruf krü1b 2k1s k4s1amt k2san ks4ana k2sau k2s1äl ks2än ksch4 ks1e2b k2sent ks1erl k2s1ers k2s1erw k3shi k2s1id k2s1in k2s1o2 ks1pa ks2pat k3s2pe ks2por ks2pu kss2 kst4 k2stal k4s3tanz kstat4 k4stea k2s1tis k2s1tor k2strä k2stum k2s1u ks2zen 4k1t k2t1ad k3tag kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t3au ktau2s ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins kti4ter k2t1of k3top k4torga kt3orie kt4ran kt3ras kt4ro kt3run kt3s2 ktt2 k2tuns kt3z ku1c ku2h3 2k1uhr kul2a ku3l2e ku3l2i 2kulp 2k3uml kum2s k2u3n2a kun4s kunst3 2kunt 2kunw 2k1up. kur2bl ku2rei kuri2e ku2ro kur2sp kur4st ku4schl ku2sp kus3ses ku2su ku2ß 1kü kü1c kür2s 2k1v 2k1w 2k3z2 kze3l 3la. 3l2ab. la3ba 2labb lab2br 4l3aben 2labf 2labg 2labh 2l1a2bl lab2o l2abr lab4ra lab4ri 2labs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a4dr l1adv 2laf la2fa laf3t la2ga la2gio la2gn lago2 la2g1ob lag5s2e 2la1ho 1lai lai4s1t la2kes la2k1i l2akk la1k4l 2l1al 4lalp l2ami la3min lammen8ge 1lammf l2amp 4l1amt lamt4s la4mun l1anal la2nau 2lanb 3l2and lan2d1a2 lan4d3au lan6d5erw lan6d5erz lan2dr lan4ds laner2 2lanf lan2gl lang3s2 l2anhe 2lanl 4lanli 2l3ann l1anp 2lans2 4lansä 2lantr lan2z1w 3lao 2l1apf l1a2po lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini l2armi 2l1ar3t l3arti la2ru la2sau 4lasd la5se 3lasg 2lash 2lasi la2so 2la2sp 3lasser la2sta last1o la2str las3tur la2stü 1la2ß3 lat2a la3t2e la4tel 2l3ath la2t3ra lat2s 2lat2ta lat4tal lat4tan lat4t3in lat2t3r 1laub. laub4se lauf1i lau4fin lau2fo 1laug 3laun l2aus. 2lausl 2lausr 2lauss 2lauto 1law lawa4 lä1c 2läf 2l1ähn 1länd lär2m1a l1ärz lä2s5c lä4s3s 4lät 2läub 2läuc 2läue 1läuf 1là 4l1b l3bac lbb2 l2b1ede lb3eise l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l3brec lb3rit lb2s lb3sa lb3se lb4sh lb3si lb4sk lb3sp lb4st1e lb4sto lb2u l2b3uf lbus3s lbzei2 2l1c lch2au l3che l4chei l5chen lchermas8 l3chi lch3l lch3m lch3n lch3r lch3s lch3ü lch1w l3cl l3co 4l1d ld3a2b1 l3d2ac ld3ack l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d1a2n ld3ane l2d1a4r ld3ari l3das ld1au ld1är ldbus2 l3de. l2deh l2dei l2dele l3der. l3d2erl l3d2ern l2d1er2p lder4tr l2d1e2se l2dex ldi2c l2d1id l2d1im l2dob ldo2r ld2os ld2ö2 ld3r l2dran ld4ros l3d4ru ld4rü ld3sa lds2t ldt4 ld3th l2d1um ldy3 ldys2 1le 3le. le2a le3an le3ar 3le3ba leben4s le2bl 2lec lech5t4e 3led 4ledd le2er lef2a le2g1as le2gau le2gä le2gl 3leg4r 3leh leh3re 4lehs 4leht lei4bl lei2br l2eic l2eid 4l1eig le2im l2ein. leinbu4 leinbus5 l2eind lein4du l2eine lei6nerb 4leink l1einn l2eint l2einu lei6schw lei6ss5er lei4str lei4ßer l2eit lei2ta lei8t7er8sc lekt2a 2lektr 3l2ela 2l1e2lek l2eli lel3s 3lemes le2m1o2 4lemp l1emu l2en. le4nad le2nä 4lendet 2lendu 4lendun le4n3end 4lenerg l1engl le3ni l2enk 2l1enni le2no len4sem len3sz 2lentf l1ents 2l3entw lent4wä 5lentwet len2zi le1os 2lep 3lepa 3lepf lep4pi 3lepr l2er. l2e1ra le2ra4g le2rap le2rau lerb4 l3erei4g ler6eign le4r3ei4m le4rers 2l1erfo l2erfr l2erfü l3ergeb 3lergeh l3ergen 3l4ergew 2l1ergi lergro3 lerin4s lerk2 l2erka l2erko l4erlei le1ro le2rob 2l1erö 3l2erra l4ers. lers2k 3lerw l4erwa 2lerwo 2l1erz l2erza ler2zi les2am les2e 2l1esel le3sh lesi1 le3sk les2ko le2spo les3s leste3 4lesw 2lesy le2tat 2le3th let2to2 le2u 4leud 3leut 2lexe le2xis 2lexz 2l1f l3fah lfäs3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2s lf4spe lf4s1ti lf2tr lf4u lfun2 lfur1 l3fü 2l1g lg1art l3gas lga3t lg1d4 lgen2a lge3ra lgeräu3 l2geti lg2lö l3go lgoa3 lg3re l3gro lgro3s lg2s lg4s1t 2l3h2 3lhi. 1li 3l4ia li3ac li2ad li3ak li3ar lib4 libi3 li1c 3lic. li3chi 4lick li3d2a 2l1ido li4ds l2ie liebe4s li3ene lie4s3c lie4sta lif2fo 3lig lig4n li2gre ligs2 li3ke li3ko lik2sp lik4ter li3l2a li3li li3m2a 2l1imb 3limo 2limp li3n2a lin3al 2l1indu li4ned li2nef li2neh li2nep li2nes 2l1inf ling4s3 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2l1int li1nu l1inv 2linz li2o li4om lion5s li3os. li2p3a 2li2po 3lipt 3lis. li3s2a li4schu 2l1isl 2l1i2so li2sp liss2 2liß li2tal li3te li1t2h lit1s2 lit3sz li2tur 3liu liv2e livi1 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lad lk3lic l2k3lö l3k4lu l3k2me lk4ne lk5ner lkor2b1 lk4ra l2k3ru lk2s1 lk3sä lk4stä lk2ü 2l1l ll1abb lla2be l2labt lla2de ll1aff ll1akt l3l2al l2l1a2m ll3ama lla2n ll2anw ll1anz ll1arm lla6tern l2lau ll3aufg ll3aufk ll3aug ll1aus l4lausf l2la2w l2läd l2l1äm l2läu llb4 llch4 ll3d4 l2le2b l3lec ll1ech l2l1ef lle2gu lle2he l2leib ll1eim ll3eise ll2em l3len. lle4n3a ll3endl llen3dr ll3en4du ll2eng l4lents l3ler. lle2ra l6lereig ller4fo ller6geb l6lergen l4lergo ll3ernt ll3ertr ll6erwei ll2es l2le2se l2leuc l3leur. l2lex llf4 llg4 l2lic l2lieb l2lieg l3lik4 lli4la ll1imp l2l1ind l2l1ins llin6sen llk4 ll5m lln2 ll1ob l2lobe l2lo2d l2l1of llo2gi ll1opf l2l1o2r l3lor. l3lore llo2te l2l1ou l3löh ll3sä ll3sh ll3s2k ll2spr ll4stor ll3t llti2m llt4r llts2 llu2d llu2f llu2me l2lu2p ll1ur llust6 l2lüc llü2d ll3z2 4l1m l3ma. l2m3a2b l2marc lm1art lmä2s lm1ä4st lm1c lm2ei lm3eins lme4na l2m1e2p l2m1erz lm1ind lm1ins lm3m l2möl lm3p lmpf4 lm3s2z lm3t 4ln lna4r ln3are l3n2e l3ni l1nu l1nü 1lo lo4ak 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri 3lodr l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min l4on lo2n1o lo2o 2lopf lop2pr 2lopt lo1ra lo2rak lo4rä 5lorb 2lorc l1ord lo3ren 2l1or3g2 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4steu lo2s3to lo2s3t4r lo2ßu lo2ta lo3tha loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löck 2löd l2ö2f 2l3öfe 4lög l1öhr 2l1ö4l 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lp3t4 l3pu 2l1q 2l3r2 lra4ss lrat4s lrö4 lrös3 lrut4 lrü1b 4l1s l3sac l2sa2d l3s2al l4s1amb l4samt l2sanf l2sang l2sann l2sanz l3sare l2sau2 ls2äm lsä4s l4schin l4schmü l3se. l2s1e2b l2s1ec l2s1em ls1ere ls1erg ls1erl l2s1ers l2s1erw l3ses l3s2ex l4s3ha l2s1id l2s1imp ls2log ls3ohne l4s3ort. ls2ö l2spac ls2pe l3s2pi ls2po ls2pu l3spul ls3pun ls3s2 lst2a lstab6 ls2taf l4s3täti l2s1tis l2stit ls1tor l4stor. l4store l4stors ls2tr ls1um l2sun 6l1t l2tab ltag4 lt1ak lt1am l3tami lt3and lt1ang l4tarm lt1art l2t3ato l2t1au lt1eh lt1ein l2t1eis lte4lem l3t2en lten6gel lter3a lter2f l3t2erg lter6ken lter6leb lter4nä lt2erö lte3se l2t1esk lte3str l3tet. lte2th l2t1eu l2th l3thas lt3ho l3thu ltimo4 l2tob l2t1of l2t1o2ri lto2w lt1öl l3tön lt1ös lt1öt lt4rak ltra3l lt3räu l2t3re lt4rie lt3roc lt3ros l2t3rö l4ts lt1spa lt4stab lt5ste ltt2 lt1uh l2t1um ltu4ran ltu2ri lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2tr lu2g1a lu2g1e2b lug3erp lu2gi lu4g3l lu2go lu2g3r lu2gu 2l1uh lu1id. lume2 2lumf 2l1umj 2lumk 2luml 1lumpe 2l1ums l1umw 1lu2n 2l1una 2l1unf 4l1uni 2lunt 2lunw 4lu2o lu2pf 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c lus3sen lus2s1o lus2s1p lus4s1t 1lus2t lu2st1a lu4stä lu3str lust3re lu2s1u 4lu2ß1 lu2t1a lu4teg luter2 lu4t3erg lut1o2f lu2top lu2t3r lut5schl 3lux 2lüb 2lüd lüh1l 2l1v 4l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o lys2 ly3te ly1u 2l1z l2z3ac l3z2an l2z1ap lz1ar l2z1är l3zen lz2erk lz1ind lz3l lzo2f l2zö lz3t2 l2z1u4fe lzug4s lz1w lz2wec 1ma maa2 m1ab m2abe 2mabk 3m2ab4r 2mabs ma3chan mach4tr ma2ci ma3da m2ade 2madm ma2d4r ma4d2s ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers 2magm ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau ma3le mal2er mali1 mal3l mallö3 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann man3s 2mansa 2mansä 2mansc man4sh 2mantw manu3 2manz ma2or 2m1apf m2app 2m3arb mar3g2 mar2i 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m3arz 3mas. ma1s2pa 2m1aspe ma3sses mas6ses. mas6sest ma6sset ma3s2su 3mas2t ma2ta2b ma2tan mat4c ma2tel ma4t3erd mat3se mat1sp mat3url 2m1au2f 3maul ma3un 2mausg m4ay ma1yo 1mä 2m1ähn mä1i2 4m1änd 3männ 2mäo m1ärg mä1t4r mäu2s1c 2m1b2 mbe2e mb6l m3b4r 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 me2ben m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mee4r3ei mega3 3meh 2m1eif 2m1eig mei3l2 mein4da m2eis2 me1i2so me3lam me2lau 3meld me2lek me2ler melet2 2melf. mel2se mel2sp mel3t4 6mel6tern 2m1e2mi 2m1emp m2en. mena2b me3nal men3ar men3au 2mendl men3ge m4ens men4sk men2so men3ta 2mentn ment4sp 4m3entwi me1o 2meou 2meö 3m2er. me1ra mera1f me2r3ap me4rens mer2er 4m3ergän merin4d merin4t m4ersh merz4en 3mes me2sal me2sä mes2e 4meser 2me3sh 4m1essa mes6ser6g mes2s1o mes2s1p meste2 me2str 4mesu 3me2ß1 m2et me3t2a me3th me3tr meu1 2m1ex 1mé 2m1f4 mfi4l 2m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1ch mi3da mie3dr mi2e1i mie3l mi2er mierer4 mi2et mie4ti 3mig mi2kar mi2ki mi2ku mi3l2a 3milb 3milc milch1 mil4che 2m1imp min2en min2eu min2ga mi3ni min2o mi1nu 3minz mi2o mioni1 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4sch3w mise1 mis4ser mis3si mis4st mi2sta mi2ß1 3mit1 mi2ta mi2th mi2tr mit3s2 mit5sa mi3tsu mit3ta mi2tu 4mitz 2m1j 2m1k4 m3ka mk5re. 2m1l2 ml3c ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz mm1art mma2ß m2m1au mmä4 mmd2 m2me2c m4meh m2mei mm1ein mm3eise mme4lin mme4na m4mentw m2me2nü mme2ra mme4rec mme2s3a m2me4te mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc m4mita mmo2du m2mo2l m2mor m2m1ö mm3p2 mmpf4 mms2 mm3te m2mum m2mus 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 2mol. 3mom mom2e 3m2on mo2nä mo3ne mo4n1er mon3s 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor4d3a mor2dr mo2rer 3mos mo3se moster4 3mot m1o2x mo1y 1mö mö2c 4mök m1öl 4m1p mpa3ne m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2f3l mpf1or mp1hos mpi3as. m4p3lem. m2p3len m2p3les mp4lif m3pon mpot2 mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and ms1as m3sä msch2 m4s1ef ms1erf ms1erw ms1ini mso2r ms1ori m2spä m2sped ms2por m2spot m2spro ms2pu ms3s2 m4stag m2stal m2sü 2m1t mt1ab mt1ak m3tam mt1ar mt3are mt1ein mt1elt m2t1erf m2t1erg m2t1erl m2t1ers m2t1ert m2t1eta m2t1eu m2th mt3ho m2t1im m2t1ins m2tint mti2s mtmen2 m2töl mt1ös mtra4s3 m2trö m4ts mt2sa mt2s1e mt3s2ka mts1p mt1spa mtt2 mt1um mt1urt mt3z 1mu mu1a 2m3uh mu3la 2muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk m2unr munt2 4munz mu3ra mu4r1u2f 3mus. mu4s1a mu2s1o mu2sp mu3s4se. mu3s4ses mu2s1to mu2str mu2su muße3 muts3t mut4str 1mü 2müb 3müh mü2her mül2 mül3lu 3mün mü3s4si 3müt 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4t3 mwu1 1my 2m1z mzug4 1na 3na. 2n1ab na2bä na3ber 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3na2c nach1 na3chen nach3s nach8ters nacht8raum 4nadd n2ade 4n1a2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n4ahm n3ahn 3nai nai2e n3aig n3air 2n1ak na2ka 3nako n2al. na2l1a2 na4lal na2lä 3n2ald n4ale na4lent na2let nal3la nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly 3name na3me. n2amen namen4s3 4n1a2mer na3m4n 3namo nam2sp 2n1amt namt4s 2n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 4n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm 4nart n3arti na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3naß 3nat n4ata n3a3t4h na4the 4n1atm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss 4nausw navi5er. navi5ers 1nä 3n2äc 3näe 2n1ähn 3näi 2n1ä2m 2n1än n1ärz 3näs nä2sc n2ä6s3s 3näß 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbu3s nby2 2n1c n3ce2n3 nch3m 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 n2d1au nd1c nde4al. n2dei nde4län n4dentl n4d3ents nder6laß nder6läs nde4rob nde2s ndes1e nde4spe ndi2a3 n2dob ndo2be nd1op nd1or ndo2ri n2dö n2d3rat n2d3re n2drob nd3rol n2drö n2d3run nd2sor nd2spr nd3th ndt4r n2duns n2dü ndy3 1ne 3ne. ne2ap nea4s ne3at ne2bl 2n1ebn 2nec 3neca 3ned 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei 4neier 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li 3nelk n2ell nel4la4 nel4lif 3ne3lo 3ne3lu n2em. 2n1emb nem4e n1e2mi 2n3emp 2n1ems 3nen n2en. n2en3a2 ne2nä n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene n2enf 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw n2enz ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2rab ne2r3af ne3r4al ne2r3am ne2ran ne2rap ne2rau nerb2 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 4n3erhö 3neri n2erj n1erk n2erli 2n1erlö nerma3 nermas4 ner4mit n2ern. n1ernä ner4neu 4n1ernt ne1rös n2erp 3n2ers. n3ersa n2ert. ne2rup n2erv 2n1erz n2es n4es. nes2c ne2sei ne2sev nesi1 ne3ska nes1o ne2sor ne2s1pa 4n3essi ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neuer4f neuer4k neuer4s neuer4w neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt2 n3far n3fi nfi4le. nf4l nf5lin nflös4 nf2o nf4r nf2tan nft2o nf2t3r nft2s nft4ste n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g1a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a ngens2 n3ger nge4ram n4g3erse ng6es nges2t nge4zän ng3g4 ng3hu n2g1i2d n2glic n2glo n3g2loc ng3m n2gn ng3ne ng1or n3gra ng3rat ng3roc ngro3s ng2s ngsa4g ngs1ah ngs3au ng4s3e4h ngs3pa ng3ts n2gum 2n1h2 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nibu2 nicht5er nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n ni3ene ni1ero nig2a 2n3i2gel 2niget nig3r ni2gre nig2sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl nikma3 ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in2a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p nis5s2 ni2stu ni3stun ni2s1u 2nit ni1th ni2ti nit4r nit4tec nit4tie nitt4sa ni3tu 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2k3au4s n2käh n2k1äp nke4lei nkelma3 nkelmas6 n3k2er n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n3klin nk2lo nk4na n2k1ort nk2öf n2köl n2k3ro nk2sal nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru n2küb 2n3l2 2n3m4 nmen2s nmül3 4n1n nna2be n2nada n4n1all n2n1an n5nat n2nau nn3d nn4ens n4nents nner4fü nn2erh nn2erk nne2rö4 n4n3er4wa nner2z nne2s1e n2ness nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3se nn3s2p nn4s3pe nnst4 nn2th n2n1uf n2n1unf nn1ur 1no 3no. no2bla n2o3ble 3noblo 2n1obs no1c noch4r 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad n2o1rak no3ral 2norc nor4da nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3se no3sh no2sp no4ss n2oste nost1r 2nostv nos2u no3tab no2tä no4t1ei no2tel no3t3h no4tha no2t3in no2top no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 2n1ök 4n1ö4l nö4s3s 1n2öt 2n3p4 npa2g npf4 npsy3 2n1q 4n3r2 nra4s3s nräu3s nre3sz nrö2s1 6n1s n2sa2d n2sall n2sang n2sant n3s2arg n2saus n2s1än nsä4s n2s1äus ns2ca n4schl. n3schu nsch7werd ns1eb nse2ha2 nseh5ere n3senk nsen4sp ns1ent ns1erf n4serfo ns1erg n2serh n3seri n2s1erk n2s1erö ns1ers n2s1erw n2s1erz n3sex nsfi4l n2simp n2s1ini nsinn4s nsi2te nsi2tr ns2kal ns2kel n2s1op n4s3ort. nsp4 nspas2 n2spat n5s2pen n4speri n2sph ns2pi n2spo ns3pon n2sprä n4s3prie n4spro ns3s2 ns2t1ak n2stas n4stat. n4s3tate ns2tau n5s2te. n4st3eif n5stel ns4tem. ns4ten. n4stent ns2ter ns3term ns4tes. n5steu ns2tob n6stoffi nst5opfe ns2tor n4strac n6strieb nst4ru ns2tum nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns2unr n4s3zi 2n1t nt3abs n3t2a3c n3t2al nt1ang n4tanza nt2arb nt1ark nt4at n2tauf nt1äm n2t1äu n3te. nte3au nte2b nt1ebe nte1e nte3g6 nt1eh nt1ein nte5lei n3t2en nt4ene nten6te. n3ter ntera4 nte4ras nt4erh nt4ern nt4ers nt4ert n2t1ess n3tet nte3v nt2her n2t3ho n3t4hu nti3k4l n2tinf n2t1inh ntini1 n3tit nt4lem ntmen2 ntmo2 n3to nton2s1 ntras3s nt3rec n3t4ree nt3reif n3trep nt4rig n3trop n2t3rü n4t1s nts2o nts2p nt4s3par nts2ti nt4s1to nttü3 3n4tu. ntum2 ntu2ra ntu4re. ntu4res nt3z 1nu. 1nu1a nu4ale nu3ar nubi1 1nuc 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna nunf2 1n2ung 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nus1i nu3sl nus1p nu4s1t 1nu2ß 1nut nu2ta nu2t3r 1nuu 1nux 1nuz 2nü4b nür1c 1nüt 2n1v2 n3ver nvol7ler 4n1w nwei4st 2nx 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2z1a4g n2zan n2z1au nz1än n2z1är nze4l3a nzel3l n4zense n4zentw n4zentz nz3erwe nzi2ga n2zinh nz1ini nz3le n2zor nz2öl nzug2s n2zurk nz1wa n2z1wä n4zwir n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4a3i oa3ke oak1l o4a3la o4a3mi o2a3s 3oase oa4si o4at oa3te o5au o1ä o1b ob2al obal2t1 2oban o3bar 2o3b2ä 2obb ob2e 2o3be. 2obea ob3ein obel2i 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi2t ob3ite 1obj ob1l ob3lei 1o2b3li 2o3blo 2o3bo o2b3re obs2 ob3sh ob3sk ob2sta ob3sz 2o3bu obus3s 2o3bü 2oby2 2oc oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r ocht4 och3te o1chu ochu2f och1w o3ci ock2er ock3sz o1cl o3co o1ç o1d o3d2a od2dr ode2c o3d2e1i odein3 ode2n1 odene2 odesi1 ode3sp o3dex 2o3dia odi4er o3dir o3div o2don odo4s 2odr o2dre odt4 2odu o3dy 2o1e oe4b o2ec oe2d oe2h oe2l oe2n1 o4es o2et o3et. o3ets oe2x o1ë 2ofa of1ac of1au o2f1ei of2en o3fer of2fa of2f1in of2fir of2fix 1offiz of2f3l of2fo of2f3r offs2 off3sh of2fu of2fü 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr ofstra8ssen of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i ogenmas6 o3gh ogi2er o3gis og2lo og4n ogo4i3 og2s og3sc og3si og3s2p o1ha o1hä o1he o2h1eis o2h1er2t o2h1er2z o1hi ohl1a oh3lec ohl1ei oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu oh4n1ac oh3nee 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la oh1o2p o2h3ö ohr3a oh4rin oh1ro o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2ra oi2re o2isc o3isch. oi3se o1ism oiss2 oi4st 2o1j 2o1k oka2la okale4 o3kat 3o2kel oki2o ok1lä ok2li ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar ol1auf o1lä ol4dam ol4dr ol1eie ol1eis oler2 ol1ex o1lé ol2fa ol2fl olf1r ol2fra olf3sp olf3st ol2gl ol2gr ol2i oli3k4 oli3tu ol2kl olk3r ol2kre ol2la2d ol2lak oll3ans ol2las ollä2 ol4l1ec ol4lei oll3ein ol2l1el oll5ends ol4lerk oll3erw ol4li4st ol2lo2c ol2log ol2lö2 oll3sp ol2lu ol3lus o3lo ol2of olo1p2 ol1ort ols2t ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb om1ebe ome3c o2m1ei o3meis o2mel o2mene o2mep omer2 o2meru om1erz om2es omiet1 omil3l o2m1ind om1ing om1ins o2m1int om3ma om3me om3mu om1org om3pf omp4l oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal ona4lin on1ap o2narb on4at on2au 2onä on1äh onbe3 2onc onderer5 2one one4i one2n1 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4n onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on2seb onse2l on4sh onsi2d ons3l ons1p onst2h on3t2a on4t3end ont3erw on2t3ri o1nu 2onuk on3v 1ony on3z o1ñ oo2k3l o1op o1or oo4sk oos5s oo2su oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan o1pec o1pei ope4n 1oper o1pes 2opf. op2f3a op3fah op4ferd opf5erde opf1l opf3la op1flü op3for 4oph2 o3phe o1pi opi5a2 opi3er. opi5ers. opin2 op3lag o2p3le op3li 2o3po op4pl 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2o1ral o2r3alm or4alt 3or2am or2and o2ranh or3arb o1ras or3att orau4 orau2s o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 2orda or2d1am or4dar or4dau or4d3eng or2deu or4d3ing or2d1ir or2dit 1ordn or2do 2ordr 2ords or2dum 2ordw 2ore ore2a ore2b o2r1eck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth o2r1eu 2orf orf3s2 or3g4a 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 or1ins ork2a or2k3ar ork4r 2orm or4mans or4ment 2orn or2nac or2n3ar or2n3ä or5ne. or3n2o 2o1ro or1o2b oro3n2a 2o1rö 2orp 2orq 2orr orr4a or3re or3rh 2ors2 or3s4a or3sh or3si or3sz or2t1ak or2t1an or2tau or2tär or2tef or4t3ent ort2er or4t3ere ort3erf ort3erk ort5ersc or2t3ev or2the or2tin ort3ins or4t3off or2tor or2tö or4trau or4t3räu ort3ric or2t1um o3ru or2uf o4r3un orus3 o2r3ü o2rya o1s 2o3s2a os3ad os4an o4s3ca osch3ar o4schä o3sche osch3le 2ose ose3e o2s1ei ose2n os2ex 2osh o3s2hi 2osi o3sk o4s3ka o4ski 2os2kl 2os2ko os2lo 2oso 2osp os1pec o3s2po os2sa oss1ac oss3and os4sä o6ssel o3ssem oss3en4k o3ssent oss3enz os3si os2s3o os4son os2s3p os4s1t os2su os2t o2st1a2b o3stal. o4st1am ost3ang osta4s ost1au o4sterd oster3e ost5er6we ost3h o2stin o4s3ton. ost3ran o2st3rä ost3re os3tri ost3rot ost3uf 2osu4 os1um 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf oß3t 2o1t ota2go o3tark o2t1au ot3aug o3tax ot1ä o2teb o3tei o4t1eib ote1i4n ote3ine ote2l1a ote4lei ot2em3 otemp2 otens2 o2t1erw 4ot2h ot4he ot5hel o4t3hi ot3ho o2thr o2til o2t1i2m ot2in o4tl otli2 ot4ol ot1opf ot2or oto2ra o3tra o2t3re ot3rin ot2sa ots1p ot2spa ots2pe ott1a ot2tan ot2tau ot2teb ot4terh ot4terk ot2th ot2t3r ot3t4ra o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oung5 oun4ge. oungs2 o4up 2our ouri2e our4ne. ou3s2i ous2t outu4 2ouv 2o1ü o1v 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x 2ox. ox2a ox2e ox3l o2xu 1oxy o1yo 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r ö1ch öch1l ö2chr öchs2t öch4str ö1d ödi3 1ödu ö1e 1öf öf2fa öf2fl öf3l ögen4s1 ög3l ög3r ög2s ö1he öh3l2e öh3ri öh2s ö1hu ö3ig. ö3isch. ö1ke ö2ko ök3r ök2s 3öl. öl1a2 öl1ei öl1em öl2f1ei ölf3s öl1im öl1in öl2k3l öl2la2 öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w ö1m öm2s ön2e ö3ni önizi1 önn2e ö1nu öo1 öot2 öoti1 ö1pe öpf3l ör3a2 ör2b3l ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ör2erk örer2l ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örn2e ör1o örs2e ör3s2k ört2e öru4 ö2r1une ö1s ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw 2öse ö2s1ei ös4en ös4es ö2sp ö3s2s ös4s1c ös3ses ö4s3set ös4st ös4t ö2sta ös4u ö1ß ö1t ö2t3a öte4n3 öt2h öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li pal2ma pal2mä pal2m1o 2palt pa2nar pa4nat pan3d pan4ds pa2neu pank4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 1para pa2r3af par3akt 1parc pa5reg 2par2er 2parg pargel6d 1park. par4kam par4kau par2kr 1paro 2parp 1partn 1party par3z2 pa1s2p pa2ßu pat1a pat4c pate2 1pati 1pat4r 1pau p3auf pa3uni 1pä 3päc 3päd 3pär 3pä4s3 pä4t1e2h pä4t3ent pät3h pä2to pät3s 2p1b pbe1 2p3c 2p1d2 pda2 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im 1peit pekt4s 1pel pe2l1a4 pe4lein pe2let pe4leu pe2lex pe3li4n pe4l3ink pel3k pel3la pel3lä pel3l4e pel3li pel3t 1pem 1pen pena4 pe3n2al pe2nä pen3da pe4nen pe2n1o pens2 3pensi penz2 1pep pe1ra per2an 1perio 1perle per4na 1pero per2ra2 perr3an per4rä2 per4ric per6rieg 1pers 2perse 2persi 3perso 1perü perwa4 pe3sa pes3s2 pes2t 3pet 1pé 4pf. p2fab p2fad p2faf pf3ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 pffa3 p2f1ins pf4lan p2f3lä pf4leg pf3lei pf3lo p2for pf3r pf1ra 3pf4ro pfs2 pf3sl pf3sz pf3t 2pfü 2p1g pgra2 1ph 4ph. 2phä 2phb 2phd 2p1hei phen3d2 phen3s 2ph1ers 2phf 2phg phi2ka 2phk ph2l 2phm 2phn p3hop pho2s 2phö ph4r 2phs pht2 2ph3the phu4s 2p1hü 2phz pi2a1 pia3k piap2 pia3s pi3chl p4id piegelei8 pi2el piela2 pie4lei 1pier 1pig 3pik 1pil pi3le pil4zer 2pind pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi3ri 3pirin 3pis 4piso pis2t pi3t2a pit2s pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 4pl. 3pla p3lad plan3g 3plä 2ple. ple1c ple2e p4leg ple5n2 2p3ler p3lic p3lif 2plig p4lo 2p3lu 2p1m2 pma1 2p1n 1p2o po3b4 po1c 3pod 2poh po2i po3id 3poin 3pok 3p4ol po2lau po3li pol3lo po4lor 2pond po1o2b po2p3ak po2p3ar po2pl po3pt po1rau porf4 por4tre por4tri po3s2e pos4t po2sta post3ag po4stä po4st3ei post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppa2p ppe1e ppeli5ne ppe2n1 ppf4 pp1fr p2p1h p3p2ho p2p1ia pp3lä p2p3le pp3oh ppp2 p2p3ra pp3ren p2pri pp3sa ppt2 pp3ta p3puc p2pul p2punk p3pur p2r2 1prak pra4s3 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 3pred pre2e1 2preg 1prei 3preis prei4s3c prei4s3s 2preiz 2p3rer 3p4res 1preß pri4e 2prig 3prinz pri2t1 priter4 1p4ro1 3prob 2proc 3prod 3prog 3proj 2pross 2proß 3prot 1prüf 2prüh 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po ps2te pst3re p2stu 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent p4t1ep pt3erei p4t1erw p4t1erz p2th pt1in1 p4tos pto2w ptpo4 p2t3r pt1s2 ptt2 pt1um p3tung pt1urs p2tü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh 2puk pul2sp 3pulv 2pund pun2s 2punt 2pur pu3ri 3put put2s 1püf pül3l 2p1v 2p1w pwa4r 3py1 py3t 2p1z qu4 quel4la que4te. 1queu qui3s 1ra. 2r1aa ra2ab 3ra3ar 3raau r1ab ra2bar rab2bl 2rabd r2a3b2er 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt ra2bü 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf r3a2d3r rad3t4 1ra2e ra3er r2af raf3ar ra2fer ra3ge ra3gle ra2gn 3r2ahm 2raho 4raht 2raic rail4l 2r3air 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la4 ral3ab r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la ral5l2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3alt 2ralta r4al3t2h ra2lu 3raly r2ame ra2mer 1r2ami ram4man ram6m5ers ram4mit ram4mu 2r1amt ramt4s r2an. ra5nat 2ranb r2anbe 4ranc r4anda r4ande ran4dep ran4d3er 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm r2anmu 2r1anp 2ranr r2ans. r2ansp ran4spa ran2th 2rantr 2r3anw r2ap 2rapf ra2pri r1ar r2ara 2rarb 3rarei rar3f4 ra4r1in r2ark 2r3arz r2a3s2 r4as. ras4a ra4schl ra5sen ra5si ra4sk 2rasph ra4ssi 2raß 1rat ra2t1a ra3ta. ra3te rat2o rat4r 2r3atta 4ratz 4rau. 3raub. 4raud 4raue rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3raup 4raur 2rausb 2rausg rau2sp raus3tr 4raut raut5s 1raü r2ax raxe3 raxi4s1 räch4s 3r2äd 4räf rä1fr 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä4sc rä2st 3rätse rä2u 4räue 4räun räu2s räu5sche 4räut 4r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech rbeid2 r4belä r4belis r3ben. rb1ent rbe3r2e rber4gl rb2la rbla2d r2blan r8blasser r4b3last r3blä r2ble. rb3ler r2bleu rb2lin rb2lö rbmas3 rb2o rb4ri rb2sa rb2sei rb3ska rb2s1o rb2sta rb4stä rb2stu rb2su rb2u rbu2sc 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rchs2 rch3sp rchst4 rch3t2a rch6terg rch6terw rch1w r1ci r1cl r1ç 2r1d r3da r4dab rd2ac r4daf r4d1ak r4d1al rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r4deis r2d1elb r3den rden3d2 rde3re rder4er rderin6s r4d3ernt rde3sp rdga4 rdgas3 rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os rdo4st r2dö rd3rat rd4ri rdrü4 rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2am re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. 2recki 3red. 4redd 2redi re1el re1er 3refe 2reff 3refl 3refo 3reg 5reg. rege4l3ä 2reh re2hac re4h3ent re2h1i rehl4 reh3n re2h1o r2ei. r2eie 2reig rei3l2a rei3l2i 3reim reim2p r1ein 4reinb rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 reis5tro re2ke re3la 2r1elb rel2e relea4 re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. r2emi 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren2gl 2rengp re2ni ren4nar ren3sau 2r1entg 2r1entl 2r1ents 2rentw 4rentz r2enz ren2zw re3or 3repe re4pis 3repo 4repp 3r4er. 2r1erb rer2bi r4erbil r2erbr 2r1erd r2erer r1erf r2erfe r2erfl r1erg r4ergen re3ri r1erk 4r3erken r2erki 2rerkl 2r1erl 5rerlag 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2e1ro re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa res3an re4schw 3rese 3reso 2ress ress2e res6s5erw 3rest res3tem re2stu 3resu 2re2ß1 re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 4r3e2x1 3rez 4rezi 1ré 2r1f rfall4s rfäs3 r2fent rf2es rfi4le. r2flan rf3lic rf3lin rf4lö r3flü r3for rf4ru rf4rü rf2sa rf2s1ä rf2s1id rf2spr rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rga5ssen rgas2t rga4str rge4an rge2bl rg2el rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r3gla r2glan rgleich8s7 r2gleu r2glig rg2lö rg2lu r2gna r2gno r2g1ob rgö2 r2g1öd r2g3ral r2greg r2gres r2gret rg3rin rgro5sse r1h4 2rh. 2rha r2ha. r3hals 2rhä 3r4he. 2r3her r2hoe r3hof rho2i3 2rhol 2rhö 2rhs 1ri ri3am ri3at rib2bl ri1ce ri1cha ri2dan ri2dau rid2g 2ridol 2ridy r2ie rieb4s3t rie2fr ri1el ri3els riene4 ri3eni rie2nu ri1er. ri4ere ri3e4sti ri1eu ri2f1a ri2f1ei ri2f1er ri2f1o ri2fr rif4ter 3rig ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb ri2me. 4rimp rim2s r2i3na 2r1ind rin4dex rin4diz 4rindu ri3n2e rine1i 2r1inf rin2fo rin2ga ring3l rin2gr 2r1inh 4rinit 2rink rin2kl 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2rins2 3r4ins. rin2so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris4a ri4scho ri4schw 3risik rismu2 ri3so ri2s1p 3riss ris3si rist5ers ristes4 ri6stess ri2ß1 r2it r3i2tal ri3t2i ri3t4r rit4tei rit2tr 5ritu rix1 ri3xi 1rí 2r1j 4r1k rk2am rk4ap rkauf4s r2käh r3kla rk4las rk4lau r2klis rk2lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk2s1e rk2sp rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk4t3erz rk2tin rk2t1o2 rk2t3r rk3tra rk2um rku2n rk1uni rkus3s rku4s1t 4r1l rl2ab r5lag r5lan r2l1ar r2l1a4sc r2l3aug rl2e rle4a r3lec rle4i rle2st r3let r3l2i r3l2o rlös5s rl2s1p rl2sto rl3t r3lu rlu4str rlz2 4r1m r2mab r3m2ag rma2la r2m1ald r2m1ank rm1ans rm1anz rm1a2p r2maph rma5ssen rmas8sens rm3d2 r2m1ef r2meo r2m1erp rm2es r2mide r2m1im rm3m rmmo3 r2m1o2ri rm3sa rms2t rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rna4r rn2arb rn3are rn3ari r2nau rn3d4r r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene r4nerf r4n1erg rn4erhi r4n1ert rner4ve r5nes rn2et rne3uf r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö rn3sa rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 1robo 2robs ro1ch 3rock. 4rockn r2o3de ro3e2 4rog. 4rogs roh1l 3r2ohr 3roi ro3le rol4lan rol3l4en rolli4n rol6lini 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny 2ro2pf ro3ph r1or r2ora ro2r3al ro2rat ro2rei ro2r1o ror3th ro3se ro3sh ro5s2i ro5smo ros6san ross1c ro3sta ro2st1r ro2ßu ro2tag ro2tä ro2tei ro2tho ro2tri rot1s rots2o ro3t2u ro3unt 3rout rö2b3l rö2du 2rö2f 3röh r1ök 1röl rölla4 3römi 4röp r1ör r2ös. 3rötu 2r1p2 r3p4a r3p4e rpe2re rpe4r3in rpf4 r2pli rpo4str rps1t rp3t r3pu 2r1q 2r1r rr2ab rr2ar rra4s3s rrat2s rr1äm rrb2 rr1c rr2e rre4ale r5rega rre2le rre2pa rrer4s r3res rre2ve r2rew rr2he r3r4hen rrik2 rr2n3a r3r2o r4r3ob rro3m rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2sa2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ar r3sche r6scherl rs1ebe r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rse2t rs1eta r3sho rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no rson4e r2s1op r4s3ort. rs2p4 rspa3s2 rs4pel r2s3ph r5spi r4s3s2 r5stad r4stant rs2tau r6st5eing rster2 r6sterbt r4st3erw rs2th r5stim rst3ing r2stip r2s1tot rs2tr rst3ran r6strang rs2tu r2sumf rsü3s r3swi 4r1t rt4abl r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant r2t1ar rt3a4re r2t3att rt1är r3te. rte1e2 rtei3la rt1ein r2telf rtel6lei r4tempf rte2n1 r3ten. rte4na rtens2 rt3erei r4terfa r4terfo rt1erh r4t3er4la rter6mit r4t3ernä rter4re rt1ers r3tes2 rte3sk r2thi rt2hum r2t1id r2t1ima rt4is rto1p rt1or rto2ri r2t3rak rtra4s3 rt3rec rt3ros r4ts rt4s1eh rt1s2pe rt3t4 r2t1urt rt3z rtz2a 1ru ru1a ru3a2r3 rube2 ru3ches rude2a ru2dr 3ruf ru2fa ruf2s1 ruf4st ruf4ter 2r1uhr ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derf run6der6l run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus3sen rus2s1p rus6s3t 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch rück5sta 4rümm rün3z rü3s2s 2r1v rve4n1e rve5s rv2s 2r1w r5wei rwun3s 4r1x 1ry ry2c rys2t rysti1 2r1z rz2an r2zar r2zas r3ze. rz1eck r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz2ö rz3te rz2th rz2t3ro rzug2u r3zü r3zwä r3z2wec 1sa 3sa. 3s2aa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs 5sache sa2cho2 sach3t 5sack. s1ad 2s3ada s3adm 2s3a2dr sa2fe 2s3aff 3safi sa1f4r 3saft 3sag sa4gent sag4n 4s1a2gr 3sai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4s3akt 3sal. 4s1alar sa4l3erb sa2l1id s1all sal5lo3 3salo sal2se 2s1alt 3s2alz 3sam s2ame s3ameri 5samm 6s1amma 4s1amn s1am3p4 sam2to s1an s2an. 2s3a2na 2s3anb s2an2c 3s2and s4and. san4dar san4dri 3sang. sang4s 2s3anh 3s4ani 2s3anl 2sanp 2s3ans san4sk 4santr 2s3anw s3anz 2s1ap s2aph sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1a2sp sas6sest 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4s1atm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue sau8erste 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb sa2vo 3säc s1äh s3ähn 2s1ält 2s1äm 2s1änd 2s1är sä2s3 3s2ät 1säu 2säuß 4s3b4 sba4n sbe3r2e sbus3 1sc 4sc. 2scam s2cap 4scar 2s1ce 6sch. sch2ab 3schaf 2schak sch2al 4schanc 4schang 5schanz 4schao s2chau 3s2chä 2schb 2schc 2schd sch2e 3sche. 6schef. 6schefs sch3ei. 4schemp 3sches 4schess 4schex 4schf 4schg 2schh schi4e 3sching 4schiru 3schis 2schk sch4lag 4schle. 6schlein 4schmas 2schmö 4schmüh 2schn. 4schobj 2schox 3schö 4schöl 4schp 2schq 4schre. 4schrin sch3rom 4schron 4schrou 6schs2 sch3sk 6sch3t scht2a scht4r s2chu 4schunt 3schü 2schv 4schwaa 4schwet sch4wil 2schz 2scj 6s1cl 2sco 3s2cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sdien4e sd4r 1se se3at. seau4 2s1e2ben seb4r 2s1echo s1echt 2s1eck se2dik 3see se1ec se2e1i4 see3ig seein2 se1er. se1erk se1erö 2s1eff sef4l 3seg se2gal se2gl seg4r 3seh seh1a se2ha4g se2han se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh3s seh3t se2hüb 2s1ei. 2s1eie 2s1eig sei3le s1ein 5s2ein. 2seinb sein4du sei3n2e sein4fo 2seing 2seinh 4seink 2seinl 2seinn 2seinr s4eins. 4seinsa 4seinsp 4seinst 2seinw 2s1eis 5s2eit 3sek 4s1e2ke s2el. se2l1a se3lad sela4g se3lam 3selb sel1ec 2selem se4lerl sel3ers 2self. s1elix 3selk sel3le se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp s2en. se4nag se2nä 3sendet 4s1endl 5seni 3senku se2no s2ens s2ent. sen3ta 2sentf 4s3entg s2enti 2s1ents 2sentw 2sentz se2n3u 3senva seo2r 4s1e2pos 3seq s4er. ser3a2d se2r3al s3ereig se4r3eim se4r3enk ser2er s1erfo s2erfr s3erfü 4ser4fül s1ergä s4ergr s1erh 5serie serk4 s3erken s1erkl 3serl. s2ern. s1ernä 4s3ernt se1rot s3eröf s2ers. 2sersa sers2t s4ert. seru2 se4r1uf se3rum se3rund 3s4erv se2sel 2sesh se3sk se3su 2se4tap se2tat s1e2th 3setz se1u2n 2s1ex se2xe 4sexp sex3t2 6s3f4 sfal6l5er sflo4 4s3g2 sges2 sgro3 2s1h 4sh. sh2a 3s2ha. sha2k 4s3han 4shc s3h2e 3shi. 3shid 4shil shi4r 4shk sh3n 4shof 3shop sho4re 3show sh4r 4shs 4sht 4s3hü 1si si3ach. si2ad si3am. sia4s 2siat sib4 5si1c 2s1ideo s2ido 3s4ie siege4s sieh1 sie4hes si3ene si1err si1f4 si2g1a 3sigh sig4n si3gnu si2g3r si2k1ab si2kak si2k1ä sik3erl si2ki si4k1l si2kr sik3s2 sik3t4 si2ku sil2br 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gl sing4le sin4gr sing3sa 2s1inh sin1i1 4s1inq 2s1ins s2ins. 4sinso 4sinst 2s1int 4s1inv 3sio 3siru 3sis si2sa si4schu si2s1e si2s1o si2s1p sis3s2 si2stu 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 4s3j 2s1k2 4sk. 1skala 4skam 4skanz 4skas ska4te. 4skateg ska4tes 4skä 4skb s2kep 3s2ki. s2kif s2kig 3s2kik 4skir 3skiz sk4l 4s3klas 3s2klav 4sk4n 4skom 4skor 4skow 4skö 4sks 4sk3t 3skulp skus3 2s1l2 4sl. 3slal 4slan sla2ve s2law sl3b s5le s3li 3s4lip 4sln s3lo. slo3be s3loe s3lu 4s3m2 2s3n2 4s5na snab4 sni3er. sni3ers 4s5not 4snö 3so. so4a 2s1o2b so3et 3soft 3sog s1o2he 6sohng 2s1ohr 1sol so3la so2l1ei sol2la4 sol4ler 2so2ly 3som 3s2on son3au sone2 son3end son3sä son2s1o so3o 2s1opf 3sor. s1orc 2s1ord so2rei so3ren 2s1orga 5s2orge 2s1o2rie so2ro 3sors so4ru 3so3s2 s4os. 4s1ost 3soß 1sou so3unt 3sov 4s1o2ve 3sow 2s1ox 5soz sö2f 2s1ök s1ö2l s1ö4s sp2 2sp. 2spaa 2spak 2spala spani7er. 2spano 4spap 2s3para 1spare 2sparo 5s6parten 3sparu spa3sse spa3ssi 3s2paß 2spau s2paz s2pä 2spär 2spe. 2s3pel 4spensi spe3p4 s2pera 2spero s2perr 2spers 4spet 1s2pez 2s3pf 2spha s3phe 1spi 3s2pi4e 4s3pier4 spi2k 4spil 3spio 4spip 4spis 3s2pit 3s2piz 2spl 4spla 4splä 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 1spon 1spor 2s3pos s2pott 4spr. s2prac s2pran 2sprax 2spräm 4spräs 3s4prec 2spred s2pren 2spres s2prit 2sprob 2sprop 5spross 1spru 2sprüf 3sprün 2s3ps 2spt 1spuk 2spup 3spur 4sput 1spü 4spy 2s1q 4s3r4 sra4s3s srat2s srat4sc sret3 srö2s srös1c srücker6 2s1s 6ss. 4ssa ssa3bo ss2ad ss1aj s3sal s4s1alb s4s3amt s5sand s4s3ang s2sano s4sans ss2ant s4sanz s3sas ss3att 4s3s2ä 4ssb 6ssc ssch2 4ssd 4ss1ec 4ssee 4sseg s4s1ega 4sseh 4ssei sse3inf sse3in4t 4ssek 6ssendet 4s3sendu ssenmas6 4ssentz sse6r5att s2s1erö 4ss3erse ss2es 4ssesc 3ssesh sse3ta 4ssez 4ssf 4ssg 4ssh 4ssic 4ssie s2sig s4sind s4sinf s4sint 4ssio 4ssit 4ssk s3skala 4s4s3l 4ssm 4ssn 4sso ss1off ssoi4 s2s1op ss1ori s2söl 4ssp s3spe ss2pen ss2po s3spru ssquet4 4ssr 4s4s3s2 4sst sst2a s5stad ss2tar ss1te s4ste. s5stel s4sten s4stes s4stet s5steu ss2th ss2tip ss1tis ss2top s3strec ss2tur s3s2tü 4ssum ss1ums 4ssup 4ssü 4ssv 4ssw 4s3sy 4ssz 1st 6st. s4ta. 3staa 2stabb 2stabh s2tabi 2stabt 2stabz st2ac 3s2tad 4stada 4stadr 3staff 2stag 3stah 2stak 2stal. 2stale 3sta3li 2stalk st1alm st1alp 3stam st1a2mi 4stamt sta4na 3stand 4stanf 4stanl 4stann 2stanw 4stanza s2tar. s2tars 3start st1asi 3stat 2stat. 5statu s4tau. 2stauf 2staum 5staur 2staus 2stax 3stä 4stäg 4stält 4stämt s2tär 5stätt 4stäus 4stb 2st3c 4std 3ste s2tean 4stechn 4stee ste2gr ste4i 4st1eid 5s2teig 4s3teil steil4z stei4na s2t2el s3telem 5stell stel4l3ä ste4mar 4stempf ste4na 4st3ends 4stentf 4stentw 4stepi st5erbie ste4rec ste6rers st3erfü st2erg st5ergeb sterma7sse s2tern 6sterras s2ters stes3ta ste4stä 4stests s2teu 4steuf 4st3ev 4stex 4stf 2stg 4sth st3ho 5s2tic 3stie 4stief. 3stim 2stinb 2stinf 2st1ins s4tio sti2r st3i2so 2stj 2stk 4stl 4stm stma3s2 2stn 2stob 3stoc sto3d s2tode s2tof stoffen6 stof8fens 2st3om 2stope 2stopo 2stord 2storg s2tory 3stos 4stou 2stöch 2stöl 2stön 5s2tör 2stöt 4stp 2stq 3s2traf 2strag 3strah 4strai 3s2tral 4strans 3s2tras 3straß 4straum s2träf 2s3träg s2trän 4sträne 2stre. 4strech 4stred 4stref 4streg s3treib 3st4reif 4streis st3renn 2strep 2stret 2strev 2stri. 3s4tria 2strib 4strig stri2k 4strisi 2stroc 3s2trof 3s2trok st3roll stro4ma 2ströp 4ströt 3struk 2st3run 2strup 4st3s2 stsas2 sts4k 2st3t4 st2u 5s2tub 4stuc 3stud 2stue 3stuf 5stuh 2stuk 2stumr stum2s 2stumz stu2n 2stun. 2stunf 2st3uni 2stuns 2stunt 3stuö stu3re st3url 2s3turn 2st3urt 4stüch s4tück 2stür. 2stüre 2stürg 2stürs 2stv 2stw 2sty. 2stys 4st3z 1su. su1an 3su2b3 su4ba2 4subi 5su1c su2cha such4st 2s1u2f 4s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2m1el su6m5ents s3umfa s3umfe 3summ sum1o2 su2mor s2ump s3umsa s3umst su2n sunder4 sun6d5erh su4ne s1unf s3ungl 2s1uni 4sunt 3s2up sup3p4 su2ra 2s1url s1urt sus1e su2sp sus3s 2sü2b 3süc sü2d1 süden2 sü3den. 3sün 1süs4 sü3sse sü3ssi 1süß 4s3v 2s1w s3we sweh2 4swie 4swil s3wö s3wu 1s2y syl1 sym3 sy2n3 sy4na sy4nä sy5s 2s1z2 4s3za 4szä 4s3zei s2zena 5s2zene 4s3zent s2zes s2zeß s3zet s2zis sz3ta 4s3zu 4s3zw 2ß3a2 ß1ä 2ß1b2 ßbus3 2ß1c 2ß1d4 ßdie3 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ße2le ße2ni ße2no 2ßentz ß2ers. 2ßerse ßer3t ße2s ße2t ß1ex 2ß1f 2ß3g2 ßge2bl 2ß1h2 1ßi ßi2g1a 2ß1in ß1j 2ß1k4 2ß1l2 2ß1m 2ß1n2 ß1o2 ß1ö 2ß1p2 2ß1q ßquet2 4ß3r2 ßrus3 2ß3s2 ßsch2 ßst2 2ß1t ß2th ßts2 1ßu2 ß1uf 2ß1uh 2ß1um ß1uni ß1ü 2ß1v 2ß1w 2ß1z2 2tab. ta2b1an 2t1abb 1tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 1t6able 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 1taf2e 2taff t1afg t1af4r 1t2ag 3tag. ta2ga ta2g1ei 4t3a4gent ta3gl t3ago tag2s tag4st tah2li tahl3sk ta3i2k tai2l ta1ins tai4r ta1ir. 1tak t3a2ka ta2kro tak2ta 3taktb 3takts 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak tal3au t1alb. t1albk 1talbu tal3d 1t4ale tal2en ta4lens tal2ga tal4leg tal4lei tal4let tal6leut tallin6s tal4lus ta2l1op tal2se 2talt 2tam ta2mer tam2ma2 tam4mi tam4mut t1ampl t1amt t1a2na 2tanb t2and tand4ar ta3ne 4tanf 2tang t2ank t3ankl 2tanl t1anm 2tanme 4t1anna t1ans t2ans. 4t3ansi 2t3ansp 2tanwa 2tanwä t2anz. t1anza 4tanzei tan6zerh t1anzu tan2z1w ta3or ta2pe. ta2pes 2tapf ta2pl 2tappa t2appe 2tarb ta4ren4s ta4r3ere 3t4ari 2tark 2t1arm 2tart tar2ta t1arti tar2to ta2ru 2t1arz ta3sa 1tasc t1asp 1tas2t ta3str 1tat. ta2ta2b ta2tan ta2tau tat1ei ta2tem ta2t1er ta2th tat3he t3atl t4atm ta2tom 1tats ta2t1um 4taud t1auf 4taufg tau3f4li 4taufn 2taufw 1taug t1auk 3taum 1taus 2taus. t1ausb tau6schr tau6schw t2ause t3ausg t1ausk 2tausl 2t3auss 4t1ausw 1tax ta3xi taxi3s 3täa tä1c 2täd 3täe 1täg 2tägy 2täh 2t1ält 2täm t1ämt t1ängs 1tänz t1äp t2är. tä2ru tä2s t2ät 2tätt 2täug 1täus 2täuß 2täx 1tà 4t3b2 tbauer4 tbe3r2e tblock5e tblocken8 tbus3 2t1c t3cha t3che tch2i tch3l t2ch1u tch1w t3cl t3cr 2t3d4 tdun2 1te2a4 te3al teamma5 te3an 3t4ebb 4t1e2ben 1t2ech te1cha 3techn te2chu 2teck teck2e te2de 1tee te1em te2en3 te1erw te2es 2teff 2t1egg teg3re 2teh 2teign teik4 1teil 2tein tein3ec t3einge t3einla 4teinn t1eis. t1eisb tei3st te2kel tek3t2 tela4 te2l3ab te2l1ac te2l1au telb4 tel3d4 te3le tel1eb tele4be te4l1ec 3telef 3teleg te4l1eh te4lein 2telem te4lerd te4leu 4t3elf. te2l1in te2lit tel3lau tel3lä tel3l2e tel6lein tel6li6st te4lost te2l1ö tel3s2k tel3ta tel3th tel3t4r te3mä te2m1ei te2min 2temo te2m1o2r 3temper 1tempo te4m1u t6en. tena2b te4n3a2d te4n3a4g te4nas te4n3au te2nä ten3äh t4enb ten3da 4t3endf t6endi 2t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef ten3ei te3n4ei. 4tenerg te2net 4t1eng. ten4gag t3engla t4enh te2ni te4n3in t4enj t2enk t2enl t4enm ten3n t2eno t2ens tens2e 4tensem t4enta t1entb 2tentd t4ente 4tentn ten4t3ri 4t3entw 4tentz t2enz ten6zerh ten3zw t1e2pi t6er. ter3ac te1raf ter3am te3ran. te3rand ter3as 4terbs 4terbt 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4t3erfol t4erfr 4terfül terg2 ter3ga 6ter6grei t4ergru 2t1ergu 4tergü t4eri te3ria te2rid ter3k 4terklä 2t3erlö 1term termas4 ter4mer ter4n3ar 4t3erneu t4ero t1erö 3terras ter4re. 1terro t4ers. ter3sc ter4ser terst4 t4erst. t4ersti t4erstu tert4a tert2o teru2 te4r1uf ter3za 2t1erzb t2erzu te2s tes1ac te3sä t1esel tes1er te3si te3so te3sp te4spr 3tesse. t2es2t tes3tät te4st3ei tester4 te6sterg te6sterk testes4 1tests t2et. te2tat 4tetl 3teuf te1un teu2r3a4 te2vi 1tex te1xa t1e2xe 2t1e2xi 4texp 3text 2t1exz 2t1f4 tfäs3 tfi2l 2t1g2 tger2 tgro3 t1h 4th. 2th2a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä 4thc 1th2e t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem t4hene t4heni 3theo 2therr t2hes 3these t2heu 1thi. thi3er t2hik 2t3hil 2t3him t3hir 2thk 4th3l 4th3m 2th3n t2ho t4ho. 2t3hoc t3hof 2t3hoh t4hol. t4holo t3hor 2t3hot thou2 2thov 2t3hö 2thp 1th2r2 2ths 2thub 4thun 2thü 2thv t2hy ti2ad ti3a2m tib4 ti1ce ti3chr tiden2 ti4dend t2ie 1tief. tie2fr ti1el ti2el. tiel3a ti3e4n1 tie4rec ti2ern 1tierr 2tieß ti1et ti1eu 1tif. tif3f ti1fr t4ig ti4gerz tihi4 ti2kam ti2kar ti2kin ti2kra ti2krä tiks2 ti2kü ti2lar ti2lau ti2lei ti2lel 1tilg tille4b ti2l3ö tilt4 ti2lu ti2ma2g t2imi tim2ma2 4t1imp t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l t2ins. 4t1inse t1int ti1nu 4t1inv 3tio 1tip 3tip. ti4que. ti1rh t2is ti4scha tisch3w ti2sei ti2sp 3ti3te tium2 ti2van tive3 ti2vel ti4vene tiver2 ti4verl ti2v1o ti2v3r ti2za 2t1j 2t3k4 2t3l tl4e 3tlem tle2r3a 4t5li tli3ni 2t1m2 tmal2 tmen4t3 tmo4des t3mu 2t3n2 t5na tnes4 to4as to5a4t 1tob 2tobj tob2l t1obs to1ch t3ochs 3tocht 2tock 1tod 3tod. tode2 to2d1er tode4s1 to2d1u toi4r to3la tom1e2 2tomg 1ton to2nau to2neh 3too to2pak to2pat 1topo 2topt to1ra to2rau to4rän 2torc t1ord to2r1el t1org t3orga tor3int to2rö 1tort t1ort. to2ru t2orw to3s2 to4sk tost4 1toten to2tho tots2 3t4ou touil4 to3un tö2c 1töch 2töf 2t1ök 1tö4l 1tön t1ö4st 1töt 2t3p2 tpf4 2t1q t2r4 2tr. 1trac tra3cha t3rad. tra4dem tra4far 1trag 2trahm 3t4rai tra4lin 1tram 2t3rams 3t4ran. 2trand 1trank t1rann 1trans t3rase t3rasi tra4str 2traß 1traum 2traup traus2 1trä 2träh 3träne 2träs 2träß 2träus 2träuß 4t5re. tre4ale tre2br 2trec t3rech t4reck 2t3red 1tref 2trefe 3t4reff 2trefo 2treg t4rei. 1t4reib 2treif t3reig 2t3reih t3rein 2t3reis 2treit t3reiz 2t3rek 2t3rel t4rem t4ren. 1trend t3rent 1trep 2trepe 2trepo t4repr t4rer t4res. 1t4ret tre2t3r t5rett t4reu 2t3rev 2trez 3t4ré 2t3rh 1trib 3trieb. 3triebs 6trieg tri2er 1trigg 1trin t3rind 2tring tri3ni 3trio t4rip t3riß t4rit 1triu tri2x trizi1 1troc 4trock. t4roi tro2ke tro2mi 2t3roo t4rop tro1pe 3tropf 2troß t3röc 2tröh 2tröm 1tröp 2trö4s3s 1tröt 2truf 1trug 2truk trum2 trums1 2t3rund 1t4runk 3t4rup t3ruß tru2th trü1be trü1bu 2t3rüc trücker6 t4rüg 3trümm try1 2ts t3s2ac t2sa2d t2s1ah ts1al t4s1amt4 t2san ts3ar ts1as tsa3sse t2sau t1sä t2säh t2s1än t4schar t3sche t4schef t3schl tsch4li t4schro ts2cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t3sens t2s1ent t2s1er t6s5essen t3set t4seth t2s1i2d tsing4 ts1ini t2s1ir t3skala ts3kr ts1o tso2r t1spal t1span ts1par ts4pare t1spas ts2ped t1spek ts2pi ts3ple ts2pon ts2por ts3s2 tst4 t2staf ts2tat ts2tau ts3täti t4stea t4s1tep t4sterm t4s3terr ts1tie t2s1tis t2stit t2ston t4s3trad t2strä t2s1tri ts2tro t4strop t2s1trü ts1u 1tsub t1sü 4t1t tt1ab tt2ac tta6gess tt1ak t4tals tt3ank t2tanz tt1art t2tän tt1ebe tt1eif tt1ein tt1eis tte2la tte4leb t4te4leg tte4len ttel3l ttel1o t3ter tte4rec tt2erg ttermas7s tte4sa tte4s1ä tt2häu t2t3ho t3to. t3tos ttras3s t3tro tt3rü tt2sen tts1p tt4s3tem tt4ster tt4sti ttu2 t2tuc tt2un t2tu4s ttü2 tu1alm tu3an tub2 tuba3b 1tuc tu2chi 1tue tu3en tu2ere 2tuf tuf2e tu3fen t3u2fer tuf4fel 2tuh tu2is t3u2kr tul2a 1tum t2um. t2ume 2t3umf 2t3umg 2t1umh 2t3umk 2tump 2t3umr tum2si tum2so 2t3umt 2t1umw t3umz 1tun. 2t1una 2t1und t4une 2t3unf t3unga tung6s 2tunif 2t1u2nio 1tunn 1tuns 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e2t turin1 1turn tu2ro tur3s tu4ru tu2sa tu4schl tu2so tu3ta 2tüb 1tüch tück2s 1tüf 1tür. tür1c 1türe 1türg 1türs 1tüten 2tütz 2t3v 4t3w twa2 twä4 twi4e 1ty 3ty. 3typ ty2pa 3tys 4t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1ec t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3zes1 tzes3t tz1ind t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u3a2c uad4 u1ah u1al. ua2lau u1alb u3alet u1alf ual3l ualle2 u3a2lo u1alr u1als u1al3t ua2lu u1alz u3am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au uau2s u1ay u1äm u1än uäs4 u1äu 2u1b u8becken. ub3ein u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub3rä u2b3rit ub2san ub2s1o ub2spa ubus3 u2büb 2uc uc1c u1ce4 uces3 uch1a u1cha. uch1ä u1che u2ch1ec uch1ei ucherma8s u1chi uch1il uch1in uch3l uch3m uchma6ss uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu u2chum uch3ü uch1w u1ci uck2er uck3erl u1cl 2u1d u3d2a uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e u2ed ue2en u2eg u4ela ue2le ueli4 uel2la ue2mi uen1 ue2nä ue2ner uenge4 uen2gl u3e2ni ue2no uen2sa uen2zu u2ep ue2r3a ue2r1ä uer6baut uere2 ue2rec ue3reig u3eremp u3erent ue4rerg uer3g2 u3erh u3erinf u3erin4t uerma6s uer4nan uer2ne uer4ner uer3o uer2ö u3err uer3sc uer3t2 u3erum u3erunf u3erunt u3erur ue4s ue5se ue5sp ue2ta ue4tek u3fac u3fah uf1ak u3fal uf3ar uf1au u2f1ä6s u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern u2f1eß 2uff uffel2 uff4l uf2fro uf3l u2fob ufo2r uf1ori uf3r uf3sä uf2spo uf4ster uf2t1eb uf3ten uft3erd uft3s2 u2fum 2u1g u4gabte ug1af ug1ak ugang4 u2g1ap uga4s ug1au ug3d2 u2g1ei ugenma3 ugenmas6 u2g1erf u2g1erl ug4es ug3hu u2g1l ug3lad u4g3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro u2grol ug4ro3s ug3rüs ug3sc ug3se ug3si ugsma3 ugsmas4 ug1spa ug5stä u2gü u1h uh2au uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uh1un uh1w 2ui ui2c u1ie ui1em u3ig u4ige uil4les u1im u1in. uin3n u1is. u3isch. u3ischs uisi4n ui2st u1j uk2a u3käu u1ke u1ki u1k2l ukle1i u1k4n u3ko uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s uk2ü u1l ul1ab3 ul1am ul1äm ulb4 ul2dr uld2se 2ule u2l1el ule4n ul1erf ul1er2h ul1erw ule2sa ule4s3t ule2t ul1eta u2lex ulf4 ulg4 uli2k ul1ins ul3ka ul2kn ulla2g ul2lä ul3len ul2les ulli2n ul2lö2 ulo2i ul1or ul2p1h ul2sa ul4sam uls2t 2ulta ul2tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2maus u2maut u2m1äh 1um3d2 um2en ument4s umer2a um1erf um1erg um1erl um1erw u5mes 1umf 1umg um1inh u2m1ins um1ir 1umk 1uml 2umm umm2a um4mess u2möl umpf4li um2pho um2p3le 1umr um4san 3umsat um2sau um2ser um2sim um2s1pe um4stem um2s1u um3t2 um2un u2m1ur 1umz un1 2un. 4una. 1unab un4al u3n2am u2n3an 4un2as un3at unau2s 1unda un4dab 1undd un3de. un4dei und3erf un2dex 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp un2d1um undü4 1undv 1undz u3ne une2b une2d une2h un2ei. un3ein un3eis unen2t u4n3erz unes2 1unget 1ungew 1unglü un3gn un2gr ung3ri ung4s1 un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei un2kne unks2 unk4tit unk2t3r 3unku unlö2 un2n3a2d un3n2e uno4r un2os 1unr uns2 2uns. unsch5el un3se 1unsi un3sk un3sp unst1r 1unt un3ta unte4ri 2unth 2unto un3tr unt3s 2untu u1nü unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u1op u1or u3or. u3or3c u3ors u1os. uote2 u1pa u1pe2 uper1 up2fa upf2e upf1i u1pfl u3pi up4lu up2pl u1pr upt3a2 upt3erf upt3erg upt1o u1q 2ur. u1ra u2rab u3raba ura2be ural2t ural4ta u2r1a2m ur3ame u2r1ana uran4fa uran4fo u2r1ang uran4ge ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 ur3d2i ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri uri2c u2r1im ur1ini ur3ins ur1int urk3se ur4matt 4u1ro u3rol u1rö ur3p 2urr ur3re ur2san ur2sau ur2ser urst4r ur4sw urs2ze urt2 u3ru ury5 ur2z1a ur2zä ur2zec ur2zi ur2z1o ur2z1w 2us u2s1af us4ann us5art u1sä u6schent u5schmu usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. u3sig us5is. us3kl usmas2 usma5sse u1so us3oc u3soh u3sol u2s1op us1ou u1sö u1sp u2spac us3part u2s1pas u2spat u3spek us1pic u2spo us2por u2spu usse4g u4s3sel us2sen us5sende us6seni ussenma7s us2ser us3ser. uss5erfa usser6kl uss5er6su u4sset us2sez u3ssig us2sof u2stab ust3abe u3stal us2tat us2ten us2ter us2th ust2in u3stis u2s1tor u2strä u4strit u3s4trop u2s1tur u2sty u1su us2ur 2uß u2ß1u 2u1t u3ta. ut1alt ut3a2m u2t1ap u2t1ar u2t1är u3te u4t1ed ut1e4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3er4sa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu utli4n utmas2 utma5sse u3to. uto4ber uto3c u3tom ut1opf u2tops ut4or ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut3si ut1s2p ut2s3pa utt4an ut3te ut3t4l utt1s2 utu4re utu5ru utz3eng ut2z1in ut2zo ut2z1w 2u1u2 u1ü2 u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz3ot uz1we uz3z4 1üb üb1ä 2übc 2übd übe2 übe4n3 über3 ü4bet üb3l üb3r 2üc ü1che üch3l üch4s1c üch5t4e ück1er ück3eri ück4spe ü4d3a4 üden2g ü3d2ens üd1o4 üdö4 üd3r üd3s2 üdsa1 üd3t4 üdwe2 ü4f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6lei6s ü2g3l ü2gn üg3s üh1a ü1he ü2h1ei ü2h1eng üh1erf ü2h1er2k ü2h1er2z üh1i ühl1ac üh1lam üh3l2e üh3mo üh3ne üh1o üh3r2e ühr3ei. üh1ro ühr3ta ühs2 üh3stu üh3t üh4th üht4r ü1hu üh1w ü1k2 2ül ül1a ül2c ü3l4e ülla4 üll1au ül2lei ül3ler ül4leu ül2lo ü1lu ü2ment 4ün ü2n1a ün2da ün2dr ünen3 ün2f1a ün2f1ei ün2fli ün2fr ün2g3l ünt2 ü1nu ün2za ün2zw ü1pe üpf3l ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü1r2o3 ür4ster ürt2h ür2zö ür2zw üs2a ü2schl ü5se üse3h üse3l ü1sp üs2s1c üss2e ü4s3sel üs3si üs4st üs2su ü2sta ü2str ü1su ü1ß 2üt ü1ta ü2t1al ü1te ü1ti üt3r üt4s1 üt2tr ü1tu ü1v ü1z 2v1ab va1c val2s 2vang 2varb vas2 v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u vat3z 2v1au vä1 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i 2v1ein veit4 veits1 ve3la ve4l1au ve3le ve3li vel3l ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3nü ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 ver5d2 vere2 verf4 verg4 vergas6 ve3ri ve4rin ver3k vermas8sen ver3sta vert2 ver5te ver3u ve3s 2vesc 2vese ve4sh ve4s1p ves4t ve3ta vete1 ve3to ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vi3de vie2h3a vi2el vi3en vie4rec vie2w1 vig2 2vii vi2l1a vi4l1e2h vi2l1in vil3l 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol vol2la voll7auf. vollen4 vol6l5end voller4 vol6lerw vol2li 2v1op vo2r1 vor3a vor3e vor3g vo3ri vo5rig vormen4 vorö4 3voy 2v1p v2r 2v3ra v3re v4ree 2v3ro 2v1s vs2e v3s2z 2v1t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da wa2les wal4li4n 2walm wal2ta wal2to walt4st wa3na w3anf wang4s 1wann wan6z5en6d wa2p 1war2e ware1i wart4e 1was wa3sa wa4scha wa3sche wa3schi wa3sh wass4e 1wäh 1wäl wäm3 2wäng 1wäs3 wä5sc wä4ss 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we2e4 weed3 we2fl 1weg we2g1a we2g3l we4gn we2g3r weg1s weg3sa 1weh we4i wei4bl 2weie weifel6d weik4 1weil wei3sc weiss3p wei4tr weit1s wel6schl wel6schr wel2t1 welt3a4 wel6t5en6d wem2ma2 wen3a4 wen2gl we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer4sta wer2t1a wer4t3ei wer6t5erm wer2to 1wese wesen4s3 we2sp wes2t we2st1a we4st3ei we4steu we4sti we2st1o2 we2stö we2st3r we4stu 1wet wet2s wett3s 2w1ey 2w1g 2w3h 1wid wi2e wie3l2 wien2e wie4st wik2 1wil wim2ma wim4mu win4d3ec win2dr win2e 2wing win8n7er8sc win4num 1wi4r wi3s2e wi2sp 1wiss wi3st wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh4lei 1wolf wolf4s1 wol4la wol2lä wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k 2w1t wti2 w2u 1wuc wuch4sc wuls2 wun2da wun4g3r wun2s 4wur. wur2fa 1wurst wus4 1wu4t1 1wüh wüs4 2w1w 2w1z x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag xa2m xand4 x2anz 1x2as xau3 xaus2 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l x1em 3x2em. xemp4 x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 2xid xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is xi2s1e xi2s1o2 xis5s xi2su x1i2tu x1j 2x1k2 4x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a x3ta. x3t2as xt1ä x2tän x2t1e2d x2t1ei x2tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt1s2 xt1u x3t2ur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere yes2 y2es. ye4st ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl5b yl3c y4le. yli4n yllo2 yllö2 yloni1 y2l1u yma2t ymp2 ym2pha ympi1 y2n1o yno4d ynt2 y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 y1s ys2an ys2c yse1 y3s2h y4s3l ysme3 ys2pa yst2 y2s1u2 y3s2z y1t2 y2te. y2tes y3to yu2r yure3 y1v y1w y1y y1z2 za2 2z3ab zab3l za3cha za3chä 2z1ad 2z1af za3ge za3gr 3z2ah zah4ner 2z3ak za3li 2z1all 2z1am z1an za3ne 2z3anf 3zani 3z2ank zan4kl 2z3anl za3no zanti1 za3ra 2zarb 2zarc za3re 2z1arm za3ro z1arti zar2tr 2z1arz z1as zast4 2z3at3 3zaub z1au2f z3aug 3zaun 2z1äc 3z2äh 2z1äm 2zängs 2z1äp z1ärg z1ärm 4z1b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 zeau3 zeaus4 2z1e2ben 2zecho ze1e 2z1eff zehe4 zehen1 zeh2l zeik4 zei3la zeile4 2z1ein zei3s2 zeist4 zei2t1a zeit5end zei4t3er zei2tr zeit3ri ze2l1a2 zelau2 ze2len ze2l1er ze2l1in zel3l2a zel4leh zel4li4n zels2 zel3sz zel3t2h zel3tr zelu2 2z1emp 5zen. ze4n3ac ze2nä zen3n ze2no zens2e zen4sem zent3s zen4z3er z2er. ze2r3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei 2z1erq zers2 2z1ersa 4z3erste 4z3erstr 3zert zert1a4 zer4t3ag zert4an zer6tere zer6terl zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2s zes2c ze3sku zessen4 zes6s5end zes2sp ze3stau ze2ß1 ze2tr 2zetts 2z1ex 2z1f4 zfäs3 2z1g2 zger2a 2z1h z2hen zhir3 3zi. zi3alo zi3ar zi2dei zid3r zie4lei zi1erh zi1es. 3zig zil2e zil3l 2z1imp zim2t3 zin2e zin3ei zin4er 2z1inf z1inh zin1it zin2sa zin4ser 4zinsuf z1int z1inv zi2o3 zi3op zirk2 zirk6s1 zis4t zistras6 zi3s2z zit2h zi2t1o2 ziv2 2z1j 2z1k4 2z1l2 2z1m2 2z3n2 2z1ob 2z1of zo2gl 2z1oh 3zol zolla2 zol3le zol2li2 zol3lu zon4ter zo2o 2z1ope z1or zo2ri zor4ne zo3se 2z1osz 2zö2f 2z1ök z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3str z3sz 2z1t z2t1au z4tehe zte3str z3t2her zt3ho zt1ins zt3rec zt3s2 zu3a zu3b4 3zu4c zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug4ste zug1un 2z1uhr zuh2u zu1i zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2zumr 2z1ums zun2e 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s2 zu3t2a zuz2 2züb zür1c 2z1v zw2 z1wac 2zwag 2zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg 2zweh z2weig zwei3s 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 2zwir z2wit 2z1wo z1wör z1wur 2z1wü 2z1z z3z4a zze3s z3z2o zz2ö",
+ ["length"]=104906,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=15624,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-es.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-es.lua
new file mode 100644
index 00000000000..117732eb2ef
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-es.lua
@@ -0,0 +1,62 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="es",
+ ["source"]="hyph-es",
+ ["texcomment"]="% GUIONIZADO DE PALABRAS\
+% ~~~~~~~~~~~~~~~~~~~~~\
+% hyph-es.tex 4.7\
+%\
+% License: MIT/X11\
+%\
+% Copyright (c) 1993, 1997 Javier Bezos\
+% Copyright (c) 2001-2015 Javier Bezos and CervanTeX\
+%\
+% Permission is hereby granted, free of charge, to any person obtaining a copy\
+% of this software and associated documentation files (the \"Software\"), to deal\
+% in the Software without restriction, including without limitation the rights\
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the Software is\
+% furnished to do so, subject to the following conditions:\
+%\
+% The above copyright notice and this permission notice shall be included in\
+% all copies or substantial portions of the Software.\
+%\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\
+% SOFTWARE.\
+% \
+% For further info, bug reports and comments:\
+%\
+% http://www.tex-tipografia.com/spanish_hyphen.html\
+% \
+% I would like to thanks Francesc Carmona for his permission\
+% to steal parts of his work without restrictions. For his\
+% patterns, (c) by Francesc Carmona\
+% \
+% 2015-11-12\
+% \
+% _____________________________________________________________\
+% Javier Bezos | http://www.cervantex.es/\
+% .............................................................\
+% TeX y tipografia | http://www.tex-tipografia.com/\
+% \
+% ",
+ },
+ ["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",
+ ["length"]=29622,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=3591,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-et.lua
index 633662f810d..0de7a85004e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-et.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-et.lua
@@ -6,87 +6,50 @@ return {
["metadata"]={
["mnemonic"]="et",
["source"]="hyph-et",
- ["texcomment"]="% Estonian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
+ ["texcomment"]="% This file is part of hyph-utf8 package and resulted from\
% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
%\
-% Source: eehyph.tex (2004-04-13)\
+% Source: eehyph.tex (2015-12-22)\
% Author: Een Saar <saar at aai dot ee>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
%------------------------------------------------------------------------------\
+% Estonian hyphenation patterns (T1 encoding).\
+% Copyright (c) 2004-2015 Enn Saar <saar at aai dot ee>\
%\
-% Estonian hyphenation patterns\
-% Copyright 2003 Een Saar\
+% The Estonian pattern data is dual-licensed under the MIT License or\
+% the LaTeX Project Public License Version 1.3 or later at your discretion.\
%\
-% This work may be distributed and/or modified under the conditions\
-% of the LaTeX Project Public License, either version 1.3 of this\
-% license or (at your option) any later version. The latest version\
-% of this license is in http://www.latex-project.org/lppl.txt and\
-% version 1.3 or later is part of all distributions of LaTeX\
-% version 2003/12/01 or later.\
+% MIT License (https://opensource.org/licenses/MIT):\
+% \
+% Permission is hereby granted, free of charge, to any person obtaining a copy\
+% of this software and associated documentation files (the \"Software\"), to deal\
+% in the Software without restriction, including without limitation the rights\
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the Software is\
+% furnished to do so, subject to the following conditions:\
+% \
+% The above copyright notice and this permission notice shall be included in\
+% all copies or substantial portions of the Software.\
+% \
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\
+% THE SOFTWARE.\
+% \
+% LaTeX Project Public License:\
+% \
+% The latest version this license is in http://www.latex-project.org/lppl.txt\
+% and version 1.3 or later is part of all distributions of LaTeX version \
+% 2003/12/01 or later.\
%\
-% This work has the LPPL maintenance status \"author-maintained\".\
-% This work consists of this file only (eehyph.tex).\
+% This work has the LPPL maintenance status \"author-maintained\". \
+% This work consists of this file only.\
%\
% The patterns were generated long ago by applying patgen to\
-% an Estonian dictionary; a few patterns were added later manually\
-% to prohibit aa-bits type cases.\
-% Declare the special characters\
+% an Estonian dictionary; a few patterns were added later manually \
+% to prohibit aa-bits type cases. \
%\
% ",
},
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-eu.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-eu.lua
new file mode 100644
index 00000000000..a8af52728f9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-eu.lua
@@ -0,0 +1,77 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="eu",
+ ["source"]="hyph-eu",
+ ["texcomment"]="% copyright: Copyright (c) Juan M. Aguirregabiria 1997, 2008\
+% title: Hyphenation patterns for Basque.\
+% version: June 2008\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information on the package,\
+% and http://tp.lc.ehu.es/jma/basque.html for details on Basque hyphenation.\
+% license: >\
+% Permission is hereby granted, free of charge, to any person obtaining\
+% a copy of this file and any associated documentation\
+% (the \"Data Files\") to deal in the Data Files\
+% without restriction, including without limitation the rights to use,\
+% copy, modify, merge, publish, distribute, and/or sell copies of\
+% the Data Files, and to permit persons to whom the Data Files\
+% are furnished to do so, provided that\
+% (a) this copyright and permission notice appear with all copies \
+% of the Data Files,\
+% (b) this copyright and permission notice appear in associated \
+% documentation, and\
+% (c) there is clear notice in each modified Data File\
+% as well as in the documentation associated with the Data File(s)\
+% that the data has been modified.\
+%\
+% THE DATA FILES ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\
+% ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\
+% WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT OF THIRD PARTY RIGHTS.\
+% IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\
+% NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\
+% DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\
+% DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\
+% TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\
+% PERFORMANCE OF THE DATA FILES.\
+%\
+% Except as contained in this notice, the name of a copyright holder\
+% shall not be used in advertising or otherwise to promote the sale,\
+% use or other dealings in these Data Files without prior\
+% written authorization of the copyright holder.\
+% changes:\
+% - >\
+% February 1997 Patterns created by Juan M. Aguirregabiria, based on the\
+% shyphen.sh script for Spanish by Julio Sanchez, September 1991.\
+% - >\
+% June 2008 Generating script rewritten in Ruby and adapted for native\
+% UTF-8 TeX engines, patterns renamed from bahyph.tex to\
+% hyph-eu.tex and added to the hyph-utf8 package. Functionality should\
+% not change apart from adding ñ by default.\
+% ==========================================\
+%\
+% Open vowels: a e o\
+% Closed vowels: i u\
+% Consonants: b c d f g j k l m n ñ p q r s t v w x y z\
+%\
+% Some of the patterns below represent combinations that never\
+% happen in Basque. Would they happen, they would be hyphenated\
+% according to the rules.\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="abcdefgijklmnopqrstuvwxyzñ",
+ ["data"]="1ba 1be 1bo 1bi 1bu 1ca 1ce 1co 1ci 1cu 1da 1de 1do 1di 1du 1fa 1fe 1fo 1fi 1fu 1ga 1ge 1go 1gi 1gu 1ja 1je 1jo 1ji 1ju 1ka 1ke 1ko 1ki 1ku 1la 1le 1lo 1li 1lu 1ma 1me 1mo 1mi 1mu 1na 1ne 1no 1ni 1nu 1ña 1ñe 1ño 1ñi 1ñu 1pa 1pe 1po 1pi 1pu 1qa 1qe 1qo 1qi 1qu 1ra 1re 1ro 1ri 1ru 1sa 1se 1so 1si 1su 1ta 1te 1to 1ti 1tu 1va 1ve 1vo 1vi 1vu 1wa 1we 1wo 1wi 1wu 1xa 1xe 1xo 1xi 1xu 1ya 1ye 1yo 1yi 1yu 1za 1ze 1zo 1zi 1zu 1l2la 1l2le 1l2lo 1l2li 1l2lu 1r2ra 1r2re 1r2ro 1r2ri 1r2ru 1t2sa 1t2se 1t2so 1t2si 1t2su 1t2xa 1t2xe 1t2xo 1t2xi 1t2xu 1t2za 1t2ze 1t2zo 1t2zi 1t2zu 1b2la 1b2le 1b2lo 1b2li 1b2lu 1b2ra 1b2re 1b2ro 1b2ri 1b2ru 1d2ra 1d2re 1d2ro 1d2ri 1d2ru 1f2la 1f2le 1f2lo 1f2li 1f2lu 1f2ra 1f2re 1f2ro 1f2ri 1f2ru 1g2la 1g2le 1g2lo 1g2li 1g2lu 1g2ra 1g2re 1g2ro 1g2ri 1g2ru 1k2la 1k2le 1k2lo 1k2li 1k2lu 1k2ra 1k2re 1k2ro 1k2ri 1k2ru 1p2la 1p2le 1p2lo 1p2li 1p2lu 1p2ra 1p2re 1p2ro 1p2ri 1p2ru 1t2ra 1t2re 1t2ro 1t2ri 1t2ru su2b2r su2b2l",
+ ["length"]=948,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=192,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-fi.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-fi.lua
new file mode 100644
index 00000000000..fe85533f03f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-fi.lua
@@ -0,0 +1,42 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="fi",
+ ["source"]="hyph-fi",
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from fihyph.tex, whose\
+% author has been identified as Kauko Saarinen. The licence terms are unchanged.\
+%\
+% See http://www.hyphenation.org for details on the project.\
+%------------------------------------------------------------------------------\
+%\
+% -----> Finnish hyphenation patterns for MLPCTeX <------\
+% First release January -86 by Kauko Saarinen,\
+% Computing Centre, University of Jyvaskyla, Finland\
+%\
+% Completely rewritten January -88. The new patterns make\
+% much less mistakes with foreign and compound words.\
+% The article \"Automatic Hyphenation of Finnish\"\
+% by Professor Fred Karlsson is also referred\
+% ---------------------------------------------------------\
+%\
+% 8th March -89 (vers. 2.2), some vowel triples by Fred Karlsson added.\
+% 9th January - 95: added \\uccode and \\lccode by Thomas Esser\
+%\
+% ********* Patterns may be freely distributed **********\
+%\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="abcdefghijklmnopqrstuvyäö",
+ ["data"]="1ba 1be 1bi 1bo 1bu 1by 1da 1de 1di 1do 1du 1dy 1dä 1dö 1fa 1fe 1fi 1fo 1fu 1fy 1ga 1ge 1gi 1go 1gu 1gy 1gä 1gö 1ha 1he 1hi 1ho 1hu 1hy 1hä 1hö 1ja 1je 1ji 1jo 1ju 1jy 1jä 1jö 1ka 1ke 1ki 1ko 1ku 1ky 1kä 1kö 1la 1le 1li 1lo 1lu 1ly 1lä 1lö 1ma 1me 1mi 1mo 1mu 1my 1mä 1mö 1na 1ne 1ni 1no 1nu 1ny 1nä 1nö 1pa 1pe 1pi 1po 1pu 1py 1pä 1pö 1ra 1re 1ri 1ro 1ru 1ry 1rä 1rö 1sa 1se 1si 1so 1su 1sy 1sä 1sö 1ta 1te 1ti 1to 1tu 1ty 1tä 1tö 1va 1ve 1vi 1vo 1vu 1vy 1vä 1vö 1st2r ä2y y1a2 y1o2 o1y ö2y u1y2 y1u2 ö3a2 ö3o2 ä3a2 ä3o2 ä1u2 ö1u2 a1ä a1ö o1ä o1ö u1ä2 u1ö2 ä2ä ö2ö ä2ö ö2ä aa1i2 aa1e2 aa1o2 aa1u2 ee1a2 ee1i2 ee1u2 ee1y2 ii1a2 ii1e2 ii1o2 uu1a2 uu1e2 uu1o2 uu1i2 e1aa i1aa o1aa u1aa u1ee a1uu i1uu e1uu o1uu ää1i ää1e ää3y i1ää e1ää y1ää i1öö a1ei a1oi e1ai i1au y1ei ai1a ai1e ai1o ai1u au1a au1e eu1a ie1a ie1o ie1y io1a2 io1e2 iu1a iu1e iu1o oi1a oi1e oi1o oi1u o1ui ou1e ou1o ue1a ui1e uo1a uo1u e1ö2 ö1e2 .ä2 u2s yli1o2p ali1a2v 1sp2li alous1 keus1 rtaus1 2s1ohje 2s1a2sia 1a2sian 1a2siat 1a2sioi r2as l2as 2s1o2pisk 2n1o2pet 2s1a2loi 2n1o2pist 2s1o2pist 2s1o2sa 2n1o2sa alkei2s1 perus1 2s1i2dea. 2s1i2dean 2s1e2sity 2n1e2dus 2s1ajatu 2s1ase 2s1apu 2s1y2rit .ydi2n1 .suu2r1a2 2s1y2hti 2n1otto 2n1oton 2n1anto 2n1anno 2n1a2jan 2n1aika 2n1o2mai 2n1y2lit 2s1a2len 2n1a2len 1a2siaka2s1 ulo2s1 2n1a2jo 2s1a2jo b2l 1b2lo bib3li b2r 1b2ri 1b2ro 1b2ru d2r 1d2ra f2l 1f2la f2r 1f2ra 1f2re g2l 1g2lo g2r 1g2ra k2l 1k2ra 1k2re 1k2ri 1k2v 1k2va p2l p2r 1p2ro c2l q2v 1q2vi sc2h ts2h ch2r",
+ ["length"]=1546,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=286,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-fr.lua
index f5273b7d13e..a179359fc6f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-fr.lua
@@ -6,87 +6,36 @@ return {
["metadata"]={
["mnemonic"]="fr",
["source"]="hyph-fr",
- ["texcomment"]="% French hyphenation patterns (V2.12, 2002/12/11)\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: frhyph.tex <2006-10-20>\
-% Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% French hyphenation patterns\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-% This file is available for free and can used and redistributed\
-% asis for free. Modified versions should have another name.\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-% \\message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>}\
-%\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-% *BEFORE* using this file *PLEASE* run checksum on it: %\
-% checksum -v frhyph.tex %\
-% to make sure that it hasn't been damaged. %\
-% Then if you notice anything wrong in french hyphenation please report to %\
-% R. Bastian, D. Flipo, B. Gaulle at the email address: %\
-% cesure-l@gutenberg.eu.org %\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
-%% checksum = \"37208 1458 3078 34821\"\
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
+ ["texcomment"]="% copyright: Daniel Flipo, Bernard Gaulle 1994-2002\
+% title: French hyphenation patterns\
+% version: V2.12 2002/12/11\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% name: MIT\
+% url: https://opensource.org/licenses/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person obtaining\
+% a copy of this software and associated documentation files (the\
+% \"Software\"), to deal in the Software without restriction, including\
+% without limitation the rights to use, copy, modify, merge, publish,\
+% distribute, sublicense, and/or sell copies of the Software, and to\
+% permit persons to whom the Software is furnished to do so, subject to\
+% the following conditions:\
+%\
+% The above copyright notice and this permission notice shall be\
+% included in all copies or substantial portions of the Software.\
+%\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\
+% BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\
+% ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\
+% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\
+% SOFTWARE.\
+% ==========================================\
%%%%%%%% The most famous good guys who worked hard to obtain something usable.\
% Jacques Desarmenien, Universite de Strasbourg :\
% - << how to run TeX in a French environment: hyphenation, fonts,\
@@ -101,18 +50,6 @@ return {
% after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle\
% did their best effort to improve the list of patterns.\
%\
-% -----------------------------------------------------------------\
-%\
-% Adaption of these patterns for\
-% - TeX Version 3.x and MLTeX 3.x (2.x)\
-% and\
-% - all fonts in T1/`Cork' and/or CM/OT1 encoding\
-% by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex'\
-% as of 1994-02-13 maintained by Bernd Raichle).\
-% (An adaption for the old MLTeX 2.x exists but can not be\
-% tested in lack of an executable.)\
-%\
-% -----------------------------------------------------------------\
%\
% ",
},
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-gb.lua
index 383deb56d97..1f2ca45afe6 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-gb.lua
@@ -9,11 +9,7 @@ return {
["metadata"]={
["mnemonic"]="gb",
["source"]="hyph-en-gb",
- ["texcomment"]="% Hyphenation patterns for British English\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file has been renamed from ukhyphen.tex to hyph-en-gb.tex in June 2008\
+ ["texcomment"]="% This file has been renamed from ukhyphen.tex to hyph-en-gb.tex in June 2008\
% for consistency with other files with hyphenation patterns in hyph-utf8 package.\
% No other changes made. See http://www.tug.org/tex-hyphen for more details.\
% \
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-hr.lua
index 11d0c22ca22..658998bb968 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-hr.lua
@@ -6,27 +6,56 @@ return {
["metadata"]={
["mnemonic"]="hr",
["source"]="hyph-hr",
- ["texcomment"]="% Croatian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
+ ["texcomment"]="% copyright: Copyright (C) 1994, 1996, 2011, 2015 Igor Marinović\
+% title: Hyphenation patterns for Croatian language\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
%\
-% Hyphenation patterns for Croatian language\
-%\
-% Copyright (C) 1994, 1996, 2011 Igor Marinović <marinowski at gmail.com>\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-%\
-% Changes:\
-% - The first version was realised in late 1994.\
-% - Second, much more improved version was realised in the beginning of 1996.\
-% (Date of the last change: 19.03.1996).\
-% - In summer 2008 the patterns have been incorporated into hyph-utf8\
-% and renamed from hrhyph.tex to hyph-hr.tex.\
-% - LPPL licence added on 06.06.2011.\
+% license:\
+% - This file is available under any of these licences:\
+% -\
+% name: LPPL\
+% version: 1\
+% or_later: true\
+% url: http://www.latex-project.org/lppl/lppl-1-0.html\
+% -\
+% text: >\
+% Permission is hereby granted, free of charge, to any person obtaining\
+% a copy of this file and any associated documentation\
+% (the \"Data Files\") to deal in the Data Files\
+% without restriction, including without limitation the rights to use,\
+% copy, modify, merge, publish, distribute, and/or sell copies of\
+% the Data Files, and to permit persons to whom the Data Files\
+% are furnished to do so, provided that\
+% (a) this copyright and permission notice appear with all copies \
+% of the Data Files,\
+% (b) this copyright and permission notice appear in associated \
+% documentation, and\
+% (c) there is clear notice in each modified Data File\
+% as well as in the documentation associated with the Data File(s)\
+% that the data has been modified.\
+% \
+% THE DATA FILES ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\
+% ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\
+% WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT OF THIRD PARTY RIGHTS.\
+% IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\
+% NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\
+% DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\
+% DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\
+% TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\
+% PERFORMANCE OF THE DATA FILES.\
+% \
+% Except as contained in this notice, the name of a copyright holder\
+% shall not be used in advertising or otherwise to promote the sale,\
+% use or other dealings in these Data Files without prior\
+% written authorization of the copyright holder.\
+% changes:\
+% - Late 1994 first version\
+% - Beginning of 1996 much more improved version (date of last change: 19.03.1996).\
+% - In summer 2008 patterns incorporated into hyph-utf8 and renamed from hrhyph.tex to hyph-hr.tex.\
+% - 06.06.2011 LPPL licence added.\
%\
% ",
},
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-hu.lua
index 22971f04e39..1b765afb368 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-hu.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="hu",
["source"]="hyph-hu",
- ["texcomment"]="% Hungarian hyphenation patterns (v20110815)\
-% \
-% (more info about the licence to be added later)\
-% \
-% from https://github.com/nagybence/huhyphn/\
+ ["texcomment"]="% from https://github.com/nagybence/huhyphn/\
% ------------------------------------------\
% Huhyphn - hungarian hyphenation patterns v20110815\
%\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-is.lua
index cedd6c84f47..a42c5363f7a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-is.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-is.lua
@@ -6,68 +6,11 @@ return {
["metadata"]={
["mnemonic"]="is",
["source"]="hyph-is",
- ["texcomment"]="% Icelandic hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: icehyph.tex (2004-03-08)\
-% Author: Jorgen Pind <jorgen at lexis.hi.is>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from icehyph.tex,\
+% whose author has been identified as Jorgen Pind <jorgen at lexis.hi.is>\
+% (2004-03-08). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% The Icelandic Plain TeX hyphenation tables\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-it.lua
index fb6a9d893a4..570af61a9a2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-it.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="it",
["source"]="hyph-it",
- ["texcomment"]="% Italian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% hyph-it.tex\
+ ["texcomment"]="% hyph-it.tex\
%\
% Italian hyphenation patterns\
%\
@@ -47,7 +43,7 @@ return {
% liability is disclaimed.\
%\
% ChangeLog:\
-% - 2014-04-22 - Add few pattherns involving `h'\
+% - 2014-04-22 - Add few patterns involving `h'\
% - 2011-08-16 - Change the licence from GNU LGPL into LPPL v1.3.\
% - 2010-05-24 - Fix for Italian patterns for proper hyphenation of -ich and Ljubljana.\
% - 2008-06-09 - Import of original ithyph.tex into hyph-utf8 package.\
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-la.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-la.lua
new file mode 100644
index 00000000000..d928d0fff71
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-la.lua
@@ -0,0 +1,126 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="la",
+ ["source"]="hyph-la",
+ ["texcomment"]="%\
+% ********** hyph-la.tex *************\
+%\
+% Copyright 1999-2014 Claudio Beccari\
+% [latin hyphenation patterns]\
+%\
+% -----------------------------------------------------------------\
+% IMPORTANT NOTICE:\
+%\
+% This program can be redistributed and/or modified under the terms\
+% of the LaTeX Project Public License Distributed from CTAN\
+% archives in directory macros/latex/base/lppl.txt; either\
+% version 1 of the License, or any later version.\
+% -----------------------------------------------------------------\
+%\
+% Patterns for the latin language mainly in modern spelling\
+% (u when u is needed and v when v is needed); medieval spelling\
+% with the ligatures \\ae and \\oe and the (uncial) lowercase `v'\
+% written as a `u' is also supported; apparently there is no conflict\
+% between the patterns of modern Latin and those of medieval Latin.\
+%\
+%\
+% Prepared by Claudio Beccari\
+% Politecnico di Torino\
+% Torino, Italy\
+% e-mail claudio dot beccari at gmail.com\
+%\
+% \\versionnumber{3.2a} \\versiondate{2014/06/04}\
+%\
+% For more information please read the babel-latin documentation.\
+%\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
+%\
+% For documentation see:\
+% C. Beccari, \"Computer aided hyphenation for Italian and Modern\
+% Latin\", TUG vol. 13, n. 1, pp. 23-33 (1992)\
+%\
+% see also\
+%\
+% C. Beccari, \"Typesetting of ancient languages\",\
+% TUG vol.15, n.1, pp. 9-16 (1994)\
+%\
+% In the former paper the code was described as being contained in file\
+% ITALAT.TEX; this is substantially the same code, but the file has been\
+% renamed and included in hyph-utf8.\
+%\
+% A corresponding file (ITHYPH.TEX) has been extracted in order to eliminate\
+% the (few) patterns specific to Latin and leave those specific to Italian;\
+% ITHYPH.TEX has been further extended with many new patterns in order to\
+% cope with the many neologisms and technical terms with foreign roots.\
+%\
+% Should you find any word that gets hyphenated in a wrong way, please, AFTER\
+% CHECKING ON A RELIABLE MODERN DICTIONARY, report to the author, preferably\
+% by e-mail. Please do not report about wrong break points concerning\
+% prefixes and/or suffixes; see at the bottom of this file.\
+%\
+% Compared with the previous versions, this file has been extended so as to\
+% cope also with the medieval Latin spelling, where the letter `V' played the\
+% roles of both `U' and `V', as in the Roman times, save that the Romans used\
+% only capitals. In the middle ages the availability of soft writing supports\
+% and the necessity of copying books with a reasonable speed, several scripts\
+% evolved in (practically) all of which there was a lower case alphabet\
+% different from the upper case one, and where the lower case `v' had the\
+% rounded shape of our modern lower case `u', and where the Latin diphthongs\
+% `AE' and `OE', both in upper and lower case, where written as ligatures,\
+% not to mention the habit of substituting them with their sound, that is a\
+% simple `E'.\
+%\
+% According to Leon Battista Alberti, who in 1466 wrote a book on\
+% cryptography where he thoroughly analyzed the hyphenation of the Latin\
+% language of his (still medieval) times, the differences from the Tuscan\
+% language (the Italian language, as it was named at his time) were very\
+% limited, in particular for what concerns the handling of the ascending and\
+% descending diphthongs; in Central and Northern Europe, and later on in\
+% North America, the Scholars perceived the above diphthongs as made of two\
+% distinct vowels; the hyphenation of medieval Latin, therefore, was quite\
+% different in the northern countries compared to the southern ones, at least\
+% for what concerns these diphthongs. If you need hyphenation patterns for\
+% medieval Latin that suite you better according to the habits of Northern\
+% Europe you should resort to the hyphenation patterns prepared by Yannis\
+% Haralambous (TUGboat, vol.13 n.4 (1992)).\
+%\
+%\
+%\
+% PREFIXES AND SUFFIXES\
+%\
+% For what concerns prefixes and suffixes, the latter are generally separated\
+% according to \"natural\" syllabification, while the former are generally\
+% divided etimologically. In order to avoid an excessive number of patterns,\
+% care has been paid to some prefixes, especially \"ex\", \"trans\", \"circum\",\
+% \"prae\", but this set of patterns is NOT capable of separating the prefixes\
+% in all circumstances.\
+%\
+% BABEL SHORTCUTS AND FACILITIES\
+%\
+% Read the documentation coming with the discription of the Latin language\
+% interface of Babel in order to see the shortcuts and the facilities\
+% introduced in order to facilitate the insertion of \"compound word marks\"\
+% which are very useful for inserting etimological break points.\
+%\
+% Happy Latin and multilingual typesetting!\
+%\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
+%\
+% \\message{Latin Hyphenation Patterns Version 3.2a <2014/06/04>}\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="abcdefghijklmnopqrstuvxzæœ",
+ ["data"]=".a2b3l .anti1 .anti3m2n .circu2m1 .co2n1iun .di2s3cine .e2x1 .o2b3 .para1i .para1u .su2b3lu .su2b3r 2s3que. 2s3dem. 3p2sic 3p2neu æ1 œ1 a1ia a1ie a1io a1iu ae1a ae1o ae1u e1iu io1i o1ia o1ie o1io o1iu uo3u 1b 2bb 2bd b2l 2bm 2bn b2r 2bt 2bs 2b. 1c 2cc c2h2 c2l 2cm 2cn 2cq c2r 2cs 2ct 2cz 2c. 1d 2dd 2dg 2dm d2r 2ds 2dv 2d. 1f 2ff f2l 2fn f2r 2ft 2f. 1g 2gg 2gd 2gf g2l 2gm g2n g2r 2gs 2gv 2g. 1h 2hp 2ht 2h. 1j 1k 2kk k2h2 1l 2lb 2lc 2ld 2lf l3f2t 2lg 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2l. 1m 2mm 2mb 2mp 2ml 2mn 2mq 2mr 2mv 2m. 1n 2nb 2nc 2nd 2nf 2ng 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3m n2s3f 2nt 2nv 2nx 2n. 1p p2h p2l 2pn 2pp p2r 2ps 2pt 2pz 2php 2pht 2p. 1qu2 1r 2rb 2rc 2rd 2rf 2rg r2h 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt 2rv 2rz 2r. 1s2 2s3ph 2s3s 2stb 2stc 2std 2stf 2stg 2st3l 2stm 2stn 2stp 2stq 2sts 2stt 2stv 2s. 2st. 1t 2tb 2tc 2td 2tf 2tg t2h t2l t2r 2tm 2tn 2tp 2tq 2tt 2tv 2t. 1v v2l v2r 2vv 1x 2xt 2xx 2x. 1z 2z. a1ua a1ue a1ui a1uo a1uu e1ua e1ue e1ui e1uo e1uu i1ua i1ue i1ui i1uo i1uu o1ua o1ue o1ui o1uo o1uu u1ua u1ue u1ui u1uo u1uu a2l1ua a2l1ue a2l1ui a2l1uo a2l1uu e2l1ua e2l1ue e2l1ui e2l1uo e2l1uu i2l1ua i2l1ue i2l1ui i2l1uo i2l1uu o2l1ua o2l1ue o2l1ui o2l1uo o2l1uu u2l1ua u2l1ue u2l1ui u2l1uo u2l1uu a2m1ua a2m1ue a2m1ui a2m1uo a2m1uu e2m1ua e2m1ue e2m1ui e2m1uo e2m1uu i2m1ua i2m1ue i2m1ui i2m1uo i2m1uu o2m1ua o2m1ue o2m1ui o2m1uo o2m1uu u2m1ua u2m1ue u2m1ui u2m1uo u2m1uu a2n1ua a2n1ue a2n1ui a2n1uo a2n1uu e2n1ua e2n1ue e2n1ui e2n1uo e2n1uu i2n1ua i2n1ue i2n1ui i2n1uo i2n1uu o2n1ua o2n1ue o2n1ui o2n1uo o2n1uu u2n1ua u2n1ue u2n1ui u2n1uo u2n1uu a2r1ua a2r1ue a2r1ui a2r1uo a2r1uu e2r1ua e2r1ue e2r1ui e2r1uo e2r1uu i2r1ua i2r1ue i2r1ui i2r1uo i2r1uu o2r1ua o2r1ue o2r1ui o2r1uo o2r1uu u2r1ua u2r1ue u2r1ui u2r1uo u2r1uu",
+ ["length"]=1756,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=335,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-lt.lua
index 32942c3f166..6b093995855 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lt.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-lt.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="lt",
["source"]="hyph-lt",
- ["texcomment"]="% Lithuanian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
+ ["texcomment"]="% This file is part of hyph-utf8 package and resulted from\
% semi-manual conversions of hyphenation patterns into UTF-8\
% in October 2008 by Mojca & Arthur.\
%\
@@ -24,7 +20,7 @@ return {
% - Yannis Haralambous\
% (Vilnius, March 4, 1992)\
% Conversion into Latin 7 and aditional support files (babel, fonts):\
-% - Sigitas Tolusis <sigitas at vtex.lt>\
+% - Sigitas Tolušis <sigitas at vtex.lt>\
% (2002-11-20)\
% Adaptation for hyph-utf8:\
% - Mojca & Arthur (see below), October 2008\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lv.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-lv.lua
index d55b9be8327..ad06ae839de 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-lv.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-lv.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="lv",
["source"]="hyph-lv",
- ["texcomment"]="% Latvian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part if hyph-utf8 package and resulted from semi-manual\
+ ["texcomment"]="% This file is part if hyph-utf8 package and resulted from semi-manual\
% conversions of hyphenation patterns into UTF-8 in November 2008 by Mojca &\
% Arthur.\
%\
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-ml.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ml.lua
new file mode 100644
index 00000000000..96d695823a9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ml.lua
@@ -0,0 +1,46 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="ml",
+ ["source"]="hyph-ml",
+ ["texcomment"]="% These patterns originate from\
+% https://github.com/santhoshtr/hyphenation/)\
+% and have been adapted for hyph-utf8 (for use in TeX).\
+%\
+% Hyphenation for Malayalam\
+% Copyright (C) 2016 Santhosh Thottingal (santhosh dot thottingal at gmail dot com)\
+%\
+% Permission is hereby granted, free of charge, to any person obtaining\
+% a copy of this software and associated documentation files (the\
+% \"Software\"), to deal in the Software without restriction, including\
+% without limitation the rights to use, copy, modify, merge, publish,\
+% distribute, sublicense, and/or sell copies of the Software, and to\
+% permit persons to whom the Software is furnished to do so, subject to\
+% the following conditions:\
+%\
+% The above copyright notice and this permission notice shall be\
+% included in all copies or substantial portions of the Software.\
+%\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\
+% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\
+% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\
+% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹാിീുൂൃെേൈൊോൌ്ൗൠൡൺൻർൽൾൿ‌‍",
+ ["data"]="2‍2 1‌1 1അ1 1ആ1 1ഇ1 1ഈ1 1ഉ1 1ഊ1 1ഋ1 1ൠ1 1ഌ1 1ൡ1 1എ1 1ഏ1 1ഐ1 1ഒ1 1ഓ1 1ഔ1 ാ1 ി1 ീ1 ു1 ൂ1 ൃ1 െ1 േ1 ൈ1 ൊ1 ോ1 ൌ1 ൗ1 1ക 1ഖ 1ഗ 1ഘ 1ങ 1ച 1ഛ 1ജ 1ഝ 1ഞ 1ട 1ഠ 1ഡ 1ഢ 1ണ 1ത 1ഥ 1ദ 1ധ 1ന 1പ 1ഫ 1ബ 1ഭ 1മ 1യ 1ര 1റ 1ല 1ള 1ഴ 1വ 1ശ 1ഷ 1സ 1ഹ 2ഃ1 2ം1 2്2 ന്2 ര്2 ള്2 ല്2 ക്2 ണ്2 2ന്‍ 2ല്‍ 2ള്‍ 2ണ്‍ 2ര്‍ 2ക്‍ 2ൺ 2ൻ 2ർ 2ൽ 2ൾ 2ൿ",
+ ["length"]=514,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=88,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-mn.lua
index 78d8f04c604..65d5603f06f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-mn.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-mn.lua
@@ -6,82 +6,45 @@ return {
["metadata"]={
["mnemonic"]="mn",
["source"]="hyph-mn-cyrl",
- ["texcomment"]="% (New) Mongolian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: mnhyphn.tex (2008-03-30)\
-% Author: Dorjgotov Batmunkh <bataak at gmail.com>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-%% mnhyphn.tex v1.2 2008/03/23 (2010/04/03)\
-%% Copyright 2007-2010 by Dorjgotov Batmunkh, National University of Mongolia\
-%% email bataak@gmail.com\
-%\
-% This work may be distributed and/or modified under the\
-% conditions of the LaTeX Project Public License, either version 1.3\
-% of this license or (at your option) any later version.\
-% The latest version of this license is in\
-% http://www.latex-project.org/lppl.txt\
-% and version 1.3 or later is part of all distributions of LaTeX\
-% version 2005/12/01 or later.\
-%\
+ ["texcomment"]="% copyright: Copyright 2007-2015 by Dorjgotov Batmunkh, National University of Mongolia\
+% title: Hyphenation patterns for Mongolian language\
+% version: v1.2 2008/03/23\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% - This file is available under any of the following licenses:\
+% -\
+% name: LPPL\
+% version: 1.3\
+% or_later: true\
+% url: http://www.latex-project.org/lppl/lppl-1-3.txt\
+% -\
+% name: MIT\
+% url: https://opensource.org/licenses/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person obtaining a copy\
+% of this software and associated documentation files (the \"Software\"), to deal\
+% in the Software without restriction, including without limitation the rights\
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the Software is\
+% furnished to do so, subject to the following conditions:\
+% \
+% The above copyright notice and this permission notice shall be included in\
+% all copies or substantial portions of the Software.\
+% \
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\
+% THE SOFTWARE.\
+% changes:\
+% - 2008/03/23 v1.2\
+% - 2008/06/08 Patterns added to hyph-utf8\
+% - 2015/12/05 Patterns released under the MIT license\
+% ==========================================\
% Special thanks to: Jim Hefferon and Robin Fairbairns\
%\
% There are few basic rules in mongolian\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nb.lua
index 67845b07719..d7a6b6bb328 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nb.lua
@@ -9,11 +9,7 @@ return {
["metadata"]={
["mnemonic"]="nb",
["source"]="hyph-nb",
- ["texcomment"]="% Norwegian Bokmal hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Adapted to the new pattern-loading scheme.\
+ ["texcomment"]="% Adapted to the new pattern-loading scheme.\
% Original file name was nbhyph.tex\
% \
% TeX hyphenation patterns for Norwegian Bokmal\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nl.lua
index 52f57de8b5d..89dc39de35c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nl.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="nl",
["source"]="hyph-nl",
- ["texcomment"]="% Dutch hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: nehyph96.tex (yyyy-mm-dd)\
-% Author: Piet Tutelaers\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from nehyph96.tex,\
+% whose author has been identified as Piet Tutelaers. The licence terms are\
+% unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% PURPOSE: 8-bit hyphenation patterns for TeX based upon the new Dutch\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nn.lua
index 0e5ad368819..2d28f3f7d5a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-nn.lua
@@ -9,11 +9,7 @@ return {
["metadata"]={
["mnemonic"]="nn",
["source"]="hyph-nn",
- ["texcomment"]="% Norwegian Nynorsk hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Adapted to the new pattern-loading scheme.\
+ ["texcomment"]="% Adapted to the new pattern-loading scheme.\
% Original file name was nnhyph.tex\
% \
% TeX hyphenation patterns for Norwegian Nynorsk\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-pl.lua
index fb2b16383de..ae0fccea600 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-pl.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="pl",
["source"]="hyph-pl",
- ["texcomment"]="% Polish hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: plhyph.tex (1995-06-26)\
-% Author: Hanna Kołodziejska, Bogusław Jackowski, Marek Ryćko\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from plhyph.tex, whose\
+% authors have been identified as Hanna Kołodziejska, Bogusław Jackowski, Marek\
+% Ryćko (1995-06-26). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% This is PLHYPH.TeX - the Polish hyphenation patterns\
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-pt.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-pt.lua
new file mode 100644
index 00000000000..f72c87ffedf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-pt.lua
@@ -0,0 +1,79 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["characters"]="adefhorstw",
+ ["data"]="hard-ware soft-ware",
+ ["length"]=19,
+ ["n"]=2,
+ },
+ ["metadata"]={
+ ["mnemonic"]="pt",
+ ["source"]="hyph-pt",
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from pthyph.tex\
+% (Version 1.2, 1996-07-21), whose authors have been identified as Pedro J. de\
+% Rezende <rezende at dcc.unicamp.br> and J.Joao Dias Almeida <jj at\
+% di.uminho.pt>. The licence terms are unchanged.\
+%\
+% See http://www.hyphenation.org for details on the project.\
+% ---------------------------------------------------------------------\
+% BSD 3-Clause License (https://opensource.org/licenses/BSD-3-Clause):\
+% \
+% Copyright (c) 1987, Pedro J. de Rezende (rezende@ic.unicamp.br) and J.Joao Dias Almeida (jj@di.uminho.pt)\
+% \
+% All rights reserved.\
+% \
+% Redistribution and use in source and binary forms, with or without\
+% modification, are permitted provided that the following conditions are met:\
+% * Redistributions of source code must retain the above copyright\
+% notice, this list of conditions and the following disclaimer.\
+% * Redistributions in binary form must reproduce the above copyright\
+% notice, this list of conditions and the following disclaimer in the\
+% documentation and/or other materials provided with the distribution.\
+% * Neither the name of the University of Campinas, of the University of\
+% Minho nor the names of its contributors may be used to endorse or\
+% promote products derived from this software without specific prior\
+% written permission.\
+% \
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\
+% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\
+% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\
+% DISCLAIMED. IN NO EVENT SHALL PEDRO J. DE REZENDE OR J.JOAO DIAS ALMEIDA BE\
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\
+% GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\
+% HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\
+% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\
+% OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
+% The Portuguese TeX hyphenation table.\
+% (C) 2015 by Pedro J. de Rezende (rezende@ic.unicamp.br)\
+% and J.Joao Dias Almeida (jj@di.uminho.pt)\
+% Version: 1.3 Release date: 12/08/2015\
+%\
+% (C) 1996 by Pedro J. de Rezende (rezende@ic.unicamp.br)\
+% and J.Joao Dias Almeida (jj@di.uminho.pt)\
+% Version: 1.2 Release date: 07/21/1996\
+%\
+% (C) 1994 by Pedro J. de Rezende (rezende@ic.unicamp.br)\
+% Version: 1.1 Release date: 04/12/1994\
+%\
+% (C) 1987 by Pedro J. de Rezende\
+% Version: 1.0 Release date: 02/13/1987\
+%\
+% -----------------------------------------------------------------\
+% Remember! If you *must* change it, then call the resulting file\
+% something else and attach your name to your *documented* changes.\
+% =================================================================\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="-abcdefghijklmnopqrstuvwxzáâãçéêíóôõú",
+ ["data"]="1b2l 1b2r 1ba 1be 1bi 1bo 1bu 1bá 1bâ 1bã 1bé 1bí 1bó 1bú 1bê 1bõ 1c2h 1c2l 1c2r 1ca 1ce 1ci 1co 1cu 1cá 1câ 1cã 1cé 1cí 1có 1cú 1cê 1cõ 1ça 1çe 1çi 1ço 1çu 1çá 1çâ 1çã 1çé 1çí 1çó 1çú 1çê 1çõ 1d2l 1d2r 1da 1de 1di 1do 1du 1dá 1dâ 1dã 1dé 1dí 1dó 1dú 1dê 1dõ 1f2l 1f2r 1fa 1fe 1fi 1fo 1fu 1fá 1fâ 1fã 1fé 1fí 1fó 1fú 1fê 1fõ 1g2l 1g2r 1ga 1ge 1gi 1go 1gu 1gu4a 1gu4e 1gu4i 1gu4o 1gá 1gâ 1gã 1gé 1gí 1gó 1gú 1gê 1gõ 1ja 1je 1ji 1jo 1ju 1já 1jâ 1jã 1jé 1jí 1jó 1jú 1jê 1jõ 1k2l 1k2r 1ka 1ke 1ki 1ko 1ku 1ká 1kâ 1kã 1ké 1kí 1kó 1kú 1kê 1kõ 1l2h 1la 1le 1li 1lo 1lu 1lá 1lâ 1lã 1lé 1lí 1ló 1lú 1lê 1lõ 1ma 1me 1mi 1mo 1mu 1má 1mâ 1mã 1mé 1mí 1mó 1mú 1mê 1mõ 1n2h 1na 1ne 1ni 1no 1nu 1ná 1nâ 1nã 1né 1ní 1nó 1nú 1nê 1nõ 1p2l 1p2r 1pa 1pe 1pi 1po 1pu 1pá 1pâ 1pã 1pé 1pí 1pó 1pú 1pê 1põ 1qu4a 1qu4e 1qu4i 1qu4o 1ra 1re 1ri 1ro 1ru 1rá 1râ 1rã 1ré 1rí 1ró 1rú 1rê 1rõ 1sa 1se 1si 1so 1su 1sá 1sâ 1sã 1sé 1sí 1só 1sú 1sê 1sõ 1t2l 1t2r 1ta 1te 1ti 1to 1tu 1tá 1tâ 1tã 1té 1tí 1tó 1tú 1tê 1tõ 1v2l 1v2r 1va 1ve 1vi 1vo 1vu 1vá 1vâ 1vã 1vé 1ví 1vó 1vú 1vê 1võ 1w2l 1w2r 1xa 1xe 1xi 1xo 1xu 1xá 1xâ 1xã 1xé 1xí 1xó 1xú 1xê 1xõ 1za 1ze 1zi 1zo 1zu 1zá 1zâ 1zã 1zé 1zí 1zó 1zú 1zê 1zõ a3a a3e a3o c3c e3a e3e e3o i3a i3e i3i i3o i3â i3ê i3ô o3a o3e o3o r3r s3s u3a u3e u3o u3u 1-",
+ ["length"]=1444,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=307,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ro.lua
index b4adc249a59..3bfbdc7ed0d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ro.lua
@@ -6,68 +6,11 @@ return {
["metadata"]={
["mnemonic"]="ro",
["source"]="hyph-ro",
- ["texcomment"]="% Romanian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: rohyphen.tex (1996-11-11)\
-% Author: Adrian Rezus <adriaan at {sci,cs}.kun.nl>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 package from rohyphen.tex,\
+% whose author has been identified as Adrian Rezus <adriaan at {sci,cs}.kun.nl>\
+% (1996-11-11). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ru.lua
index 71b58a1e41c..bf02c8f097c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-ru.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="ru",
["source"]="hyph-ru",
- ["texcomment"]="% Russian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: TODO:WRITEME (2003-03-10)\
-% Author: Alexander I. Lebedev <swan at scon155.phys.msu.su>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from various files\
+% [FIXME document] whose author has been identified as Alexander I. Lebedev\
+% <swan at scon155.phys.msu.su> (2003-03-10). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% Russian hyphenation patterns, version 2003/03/10\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sk.lua
index 05fdf346588..b8b8fec5ba5 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sk.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="sk",
["source"]="hyph-sk",
- ["texcomment"]="% Slovak hyphenation patterns (Jana Chlebikova, 1992)\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: skhyphen.tex (yyyy-mm-dd), skhyphen.ex (yy-mm-dd)\
-% Author: Jana Chlebíková <chlebikj at dcs.fmph.uniba.sk>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from\
+% skhyphen.tex and skhyphen.ex, whose author has been identified as Jana\
+% Chlebíková <chlebikj at dcs.fmph.uniba.sk>. The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% Slovak hyphenation (version 2.0) 24.4.1992\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sl.lua
index 357521e96e0..2959f7e62f8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sl.lua
@@ -6,100 +6,59 @@ return {
["metadata"]={
["mnemonic"]="sl",
["source"]="hyph-sl",
- ["texcomment"]="% Slovenian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: slhyph.tex (2007-01-29)\
-% Author: Matjaž Vrečko <matjaz at mg-soft.si>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
-%\
-%------------------------------------------------------------------------------\
-%\
-% This is `slhyph.tex' as of 15. 4. 97.\
-%\
-% Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO)\
-% [slovenian hyphenation patterns]\
-%\
-% This program can be redistributed and/or modified under the terms\
-% of the LaTeX Project Public License Distributed from CTAN\
-% archives in directory macros/latex/base/lppl.txt; either\
-% version 1 of the License, or any later version.\
-%\
-% This file contains slovene hyphen patterns with čšž\
-%\
-% Generation of hyphen patterns for TeX\
-%\
-% Matjaž Vrečko, TeXCeH (SLO), 1990\
-% Email: matjaz@mg-soft.si\
-%\
-% Changes:\
-% 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX)\
-%\
-% Some cosmetic changes done later on, but none of these apply any more;\
-% the patterns are still the same as they were originally:\
-%\
-% 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah)\
-% 1995-04-06 Release of `sihyph21.tex'\
-% 1995-06-20 Added \\slovenehyphenmins\
+ ["texcomment"]="% copyright: Copyright (C) 1990 Matjaž Vrečko, TeXCeX (SLO)\
+% title: Slovenian hyphenation patterns\
+% version: 2007-01-29\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% - This file is available under any of these licences:\
+% -\
+% name: LPPL\
+% version: 1\
+% or_later: true\
+% url: http://www.latex-project.org/lppl/lppl-1-0.html\
+% -\
+% name: MIT\
+% url: https://opensource.org/licences/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person\
+% obtaining a copy of this software and associated documentation\
+% files (the \"Software\"), to deal in the Software without\
+% restriction, including without limitation the rights to use,\
+% copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the\
+% Software is furnished to do so, subject to the following\
+% conditions:\
+%\
+% The above copyright notice and this permission notice shall be\
+% included in all copies or substantial portions of the Software.\
+%\
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\
+% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\
+% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\
+% HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\
+% WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\
+% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\
+% OTHER DEALINGS IN THE SOFTWARE.\
+% changes:\
+% - 1990 First version of `hyphen.si' (Matjaž Vrečko, TeXCeX)\
+%\
+% - >\
+% Some cosmetic changes done later on, but none of these apply any more;\
+% the patterns are still the same as they were originally:\
+% - 1994-05-17 Use of code page 852 in patterns (Leon Žlajpah)\
+% - 1995-04-06 Release of `sihyph21.tex'\
+% - 1995-06-20 >\
+% Added \\slovenehyphenmins\
% Release of `sihyph22.tex'\
-% 1997-15-04 Some changes concerning \"c, \"s, \"z and ...\
+% - 1997-15-04 >\
+% Some changes concerning \"c, \"s, \"z and ...\
% Release of `sihyph23.tex'\
-% 2007-01-20 `sihyph23.tex' renamed to `slhyph.tex'\
+% - 2007-01-20 >\
+% `sihyph23.tex' renamed to `slhyph.tex'\
% (sl is the proper language code for Slovenian)\
%\
% ",
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sr.lua
index 4f6fa190bae..2a4d3686d30 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sr.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sr.lua
@@ -9,68 +9,11 @@ return {
["metadata"]={
["mnemonic"]="sr",
["source"]="hyph-sr-cyrl",
- ["texcomment"]="% Serbian hyphenation patterns in Cyrillic script\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: srhyphc.tex (2003-06-09)\
-% Author: Aleksandar Jelenak <ajelenak AT yahoo.com>, Dejan Muhamedagić\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from srhyphc.tex,\
+% whose authors have been identified as Aleksandar Jelenak <ajelenak AT\
+% yahoo.com>, Dejan Muhamedagić (2003-06-09). The licence terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sv.lua
index e5fa01bdedf..aad8d00b390 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-sv.lua
@@ -6,68 +6,11 @@ return {
["metadata"]={
["mnemonic"]="sv",
["source"]="hyph-sv",
- ["texcomment"]="% Swedish hyphenation patterns (Jan Michael Rynning, 1994-03-03)\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: sehyph.tex (2003-09-08)\
-% Author: Jan Michael Rynning\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from sehyph.tex, whose\
+% author has been identified as Jan Michael Rynning (2003-09-08). The licence\
+% terms are unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% Swedish hyphenation patterns.\
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-th.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-th.lua
new file mode 100644
index 00000000000..8a2a401f891
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-th.lua
@@ -0,0 +1,39 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="th",
+ ["source"]="hyph-th",
+ ["texcomment"]="% Thai hyphenation patterns\
+%\
+% Copyright 2012-2013 Theppitak Karoonboonyanan <theppitak at gmail.com>\
+%\
+% This work may be distributed and/or modified under the\
+% conditions of the LaTeX Project Public License, either version 1.3\
+% of this license or (at your option) any later version.\
+% The latest version of this license is in\
+% http://www.latex-project.org/lppl.txt\
+% and version 1.3 or later is part of all distributions of LaTeX\
+% version 2005/12/01 or later.\
+%\
+% This work has the LPPL maintenance status `maintained'.\
+%\
+% The Current Maintainer of this work is Theppitak Karoonboonyanan.\
+%\
+% http://linux.thai.net/projects/thailatex\
+% http://linux.thai.net/svn/software/thailatex/trunk\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮะัาำิีึืฺุูเแโใไๅ็่้๊๋์ํ๎",
+ ["data"]=".ชี5วั .ทัศนู5 .ที่3 .บท1 .รง4 .ราย3 .ลำ3 .สน5ท .สู3ต .ใบ3 2ก1ก ก4กม กก4ส 2ก1ข ก4ขค กข5คณ ก4ขช กข5ชา ก4ขณ ก5ขณะ ก5ขณา ก4ขบ กข5บุ ก4ขภ กข5ภั ก4ขม ก5ขมั กข5มา กข5มู กข5ลา กข5ศั ก4ขเ กข5เท กข5เว ก4ข์ ก1ค กง5บว ก1จ ก1ช 2กซ กญ5จน กฎ5หม กฎ5เก กฏ5หม ก5ดิน ก1ต ก4ตด กต5ดิ ก4ตส ก4ตเ ก1ท ก1น ก4นด ก4นธ ก1บ ก1ป กป4ร ก1พ ก1ฟ ก1ม ก4มม กม5ลา ก4มส ก4มเ กย5มุ ก3ย้ กร5กฎ ก5ร5ณั กร5ต๋ 1ก4รร กร5รา กร5ลา ก5ราค ก5รินท ก4รู กร5ไฟ กล5นค กล5บิ กล5มห ก2ว ก5วัต ก5ษณน ก3ษณะ ก5ษณา ก5ษมา ก5ษมี กษ5เท ก1ส กส4น ก4สโ ก1ห กอ5อิ กะ5ถั กะ5ผล 4กะร 1กั 1กา กา5กะ กา5ดู กา5นี กา5น้ กา5บอ กา5ฝา กา5ร่ กำ5ด้ กำ5ทอ กำ5ผล 1กิ กิ5กะ กิ4ต กิ5นี กี5รณ กี5รต กี5สถ 1กุ กุ5งอ กุ5ชิ กุ5ฎุ กุ5มุ กุ5รร กุ5ลี กุ5แห 1กู กู5ปร กู5รข กู5รม กู5ลิ ก1เ ก1แ ก1โ ก1ไ ก่5กอ ก่5บ้ ก่5ป่ ก์5ท็ ข2 ขม5หิ 4ขลา ขอ5ขม ขอ5ง้ ขอ5อภ 1ขั 1ขา ขา5ก๊ ขา5ทน ขิ5ปส ขี้1 ข่5มุ ข่5หง ข้าว3 ค1ค คช5สี คช5เช คช5เม ค4ณิ ค4ทร คท5รี คท5วอ คน5ยอ 4คนิ คป5ซู คป5ผก 3คมน คม5ฟร คม5ลอ 2คย คร5ซอ คร5นอ คร5นี คร5พน คร5ฟิ คร5มเ คร5ร้ คร5ลิ คร5หา 4ค5รัก ค5ราต คฤ5หบ คฤ5หา คฤ5โฆ คล5คู ค2ว คว5ทอ 3ควา 2คส คส5ติ คห5กร คห5นิ คห5บด คห5สถ 3คอน 3คัน 1คา คา5ปู คา5พจ คา5พย คา5รว คา5วจ คำ5ดี คำ5โอ คำ5ไก คี5รี 1คุ คุ5ณู คุ5ลี 4คุ์ คู5ปอ คู5ลอ 2ค1เ ค1โ 2ค์ ค์5จำ 1ฆา ฆา5ณั ฆี5ยก ง1ก ง4กห งกะ4ร ง4กเ ง4ก์ ง1ข ง4ขก ง4ขต ง1ค ง4คจ ง4คช ง4คญ ง4คธ ง4คบ ง4คป งค5วั ง4คศ ง4คโ งฆ5ปร งฆ5สภ งฆ5เถ งฆ5เภ ง1ง ง4งเ ง1จ ง1ฉ ง1ช ง4ชี ง1ซ ง1ด ง1ต ง1ท ง1น งบ5ดุ ง1ป ง1ผ ง1พ ง1ม ง1ย ง1ร ง1ล ง1ว ง4วเ ง1ส งส5กล งส5กุ ง4สบ ง4สพ งส5พย ง4สภ ง1ห งห5นา ง4หบ งห5บั งห5รา 1งา งา5ช้ งา5รำ งู5สว ง1เ ง1แ ง1โ ง1ไ ง่5งอ จ1จ จ4จว จ1ฉ จด5จ่ จต5จำ จต5มู จป4ก จมบ5พ 3จริ จอ5งอ 1จั 1จา จา5มร จา5มี จา5รึ จำ5ทว จำ5อว 1จิ จิ5จู จิ5ตอ จี5ดี จุ5ฑา จุ5สม จ1เ ฉ2 ฉก5ฉว ฉก4ษ ฉท5ทิ ฉร5ฉิ 1ฉั 1ฉา ฉา5ก๊ ฉา5พย ช1ช ช1ฌ ช4ฌก ช4ฌฆ ช5นีก 4ชน์ ชฟ5รอ ชฟ5โร ชร5กล ชร5ริ ชร5ฤก ชร5หล ชร5หึ ชร5อุ ชว4โ ชอง4 1ชั 1ชา ชา2ต ชา5ตร ชา5ปี ชา5มต ชา5ยต ชา5สง ชำ5งั ชิ5นี ชิ5รณ ชิ5แก ชี5ผะ ชี5ผ้ ชี5ฟอ ชี5รณ 3ชีว ชี5วน ชุ5ติ ชุ5ลด ชู5ปก ชู5ปถ ชู5ปโ ช่5อิ ช้5สอ ช้5ได ซน5ทร ซ5ราม ซล5ฟี 1ซั 1ซา ซา5ชู ซา5มู 1ซิ ซิ5ตร ซิ5ฟิ ซิ5แล ซี5ดี ซี5นี ซี5รา ซี5ริ ซี5รี ซี5ร็ ซี5ลี ซู5ซู ซู5บิ ซู5ริ ซู5ลิ ซู5ฮา ซ1เ ซ1โ ซ่5ง่ ซ่5ซ้ 1ซ่า ซ์5คล ญจ5ดุ ญ4จน ญ5จ5นท ญ5จ5นบ ญ5จนา ญจ5บร ญ5จ5มบ ญจ5รง ญจ5วี ญจ5ศี ญ4ฉน ญ1ช ญ1ญ ญประ4 1ญา ญา4ต ญ่5บ้ ฏ1ฐ ฏ4ฐบ ฏิ5ทิ ฏิ5ปท ฏิ5ปุ ฏิ5สน ฏิ5สว ฐ4ภั ฐม5ฌา ฐม5พย ฐม5ฤก 1ฐา ฐา5นี ฐุ5ชุ ฑา5มณ ฑา5สถ 3ฑูร ฒิ5สภ ฒิ5สม ณ1ฑ ณ4ฑก ณ4ฑฆ ณ4ฑน ณ5ฑนะ ณ4ฑบ ณ4ฑม ณฑ5ลา ณ4ฑส ณ5ฑสก ณฑ5สถ ณ5ฑ5สี ณฑ5โล ณ4ฑ์ ณย5รั ณ1ร ณ4วา ณสม4 ณห5พล ณห5ภู 1ณา ณา5ปี 1ณิ 1ณี ณี5สง ณู5ปโ ด1ก ด4กง ด4กด ดก5ดื ด4กเ ด4กแ ด1ข ด1ค ดง4ค ดง5ออ ด1ช ด4ชน ด5ชนะ ด1ด ด4ดเ ด1ต ด1ท ด1ป ด1พ ดร5ลิ ด3ร้ ด1ส ด4สก ด1ห 1ดั ดัส5ต 1ดา ดา5มุ ดา5รก ดา5สว ดำ5ฤษ ดิ5ทอ ดิ5ทิ ดิ4บ ดิ5วร ดิ5ศว ดี5ดี 3ดีน ดี5ฝ่ ดี5รอ ดี5ลิ ดี5วี ดี5หม ดี5หว ดู5ถู ดู5ปอ ดู5รั ดู5หม ดู5แค ด1เ ด1แ ด1โ ด้5ยิ 2ด์ ด์5สป 2ตก ตก5ร้ ต1ค 2ต1ช 2ต1ต ต4ตภ ต4ตส ต4ตโ ต5ถกะ ตถ5กิ ต3ถา ต5ถุป ต5ถุศ ตถ5เล ตทัศนูป5 2ตน ตน5ฟอ ตน5วร ต4นาธ 2ต1บ ต4บช ตบ5ชว ตป5นี ต1ภ 2ตย 4ตรก ตร5งอ ตร5จี ตร5จุ 4ตรฐ ตร5ตร ตร5ทว ตร5ผล ตร5ฝร ตร5พล ตร5รง ตร5ลด ต5ริยา ต4รู 2ตร์ ตฤ5ตี ตล5รั ต1ส ต4สค ตส5วา ตส4เ ต4สแ ตส5แต ตอ5ม่ ตะ5ใภ 1ตั 1ตา ตา5กล ตา5กว ตา5นึ ตา5ปร ตา5ปล ตา5ผิ ตา5ฟู ตา3มห ตา5มอ ตา5มะ ตา5ฬี 3ติก. ติ5จู ติ5ช่ ติ5ทิ ติ5นร ติ5บอ ติ5มศ ติ5มส ติ5มอ ติ5ยม 4ติ์ ตี5ขล ตี5คู ตี5ตื ตี5รว ตี5ลั 3ตี้. ตุ5ตถ ตุ5ทส ตุ5ป่ ตุ5มห ตุ5รก ตุ5ลั ตุ5สด ตู5ดิ ต1เ ต3แล ต1โ ต่5ถา ต่5ว่ ต่5สว ต้5ก๋ ต้5ตอ ต้5ฝุ ต๋5เต ต์5คล ต์5ฟู ต์5ศต ถ4กิ ถด5ถอ ถม5ถื ถล5ไถ ถว5ไม ถะ5ถั ถ4าธ ถา5วร ถ4ีย ถี5ลิ 3ถุน ถ่5ถอ ถ่5ถา 4ทกา ทค5ติ ทค5นี ทด5รอ ทด5ลอ ทธ5คย ท5ธชะ ทธ5ฎี ทธ5ปฏ ทธ5พร ทธ5รั ทธ5ศต ทธ5สี ทธ5อง ท5ธิก ท5ธิช ท5ธิบ ท5ธิป ท5ธิผ ท5ธิพ ท5ธิภ ท5ธิร ท5ธิฤ ท5ธิศ ท5ธิโ ทธ5เจ ทพ5ธิ ทพ5ยุ ทฟ5ลอ 2ทย ท5ยาน ทร5คต ทร5คร ทร5ชิ ทร5ธน 3ทรร ทร5สโ ทร5หว ทร5หึ 1ทรา ท5ราก 4ท5ราห 1ทรี ทว5ทห ทว5สถ ทศ5ทิ ทศ5วร ทสน5ท ทส5โก ทห5วั ทห5ฬิ 1ทั 1ทา ทา5ฐิ ทา5ฒิ ทา5นอ ทา5มร ทา5รพ ทำ5ขว ทำ5ซ้ ทำ5ท่ ทำ5โท ทิ5ฆั ทิ5ฐิ ทิ4พ ทิ5พา ทิ5วง ที5นว ที5นี ที5รา ทุ5คต ทุ5ลั ทุ5ศี 1ทู ทู5น่ ท1เ ท์5ดอ 1ธร 4ธรส 4ธรั 1ธา ธา1รณ ธิ5ฤท ธิ5ศี ธิ5สม ธี5รี ธุ5ดง ธุ5ลี ธู5ปน น1ก น4กค น4กป นก5ยู นก5รู น1ข นข5ลิ น1ค นค5ริ น1จ น4จอ นจ5อน น1ช น4ชญ น1ซ น1ด น4ดร น1ต นต5กว น5ตกะ นต5ดิ น4ตท นต5ทิ นต5ปิ น4ตภ น5ตระ น5ตรั น3ตรา น5ต5ริ นต5ฤด น3ติ น5ตุก น5ตุฏ น4ต์ นถ5ธุ นถ5รจ นท5ขี นท5นน น5ทนะ นท5ผล นท4ย น5ทรง น5ทรล น5ทรั น5ทรุ นท5ฤก น5ทลา น5ทวย น3ทอ น1ทิ น3ที นธ5กร น5ธกะ น5ธนะ น5ธุก น5ธุร น5ธุว น5ธุศ นธ5ไม น1น น4นต น4นท น4นร น1บ นบ5นอ น1ป น4ปจ นป5จู น4ปท น1พ นพ5ปฎ นพ5ศู นภ5ศู น5ยนต น3รา นฤ5คห นฤ5ปเ นฤ5เท นฤ5เบ น1ล น4ลล นว5ร่ น1ศ นษ5กร น1ส น4สซ น4สส นส5แด น4สโ น1ห นอ5กะ 3นอน 1นั 1นา นา4คร นา5ณั นา5ปร นา5รย นา5วต นา5วล นา5สณ นา5สน นา5สว นา5ฬิ 4นาะ 1นิ นิ5จู นิ5ด้ นิ5ฟอ นิ5มน นิ5ยม นิ5ยา นิ5รอ นิ5ลุ นิ5วร นิ5สง นิ5สถ นิ5สี นิ5แด นี5มี นี5มู 1นุ นุ5พย 1นู 2น1เ น1แ น1โ น1ไ น่5อี 3น้อ 1น้ำ น์5สไ บ1ก บ4กษ บกิส5 บ4กแ บ1ข บ1ค บ4คท บค5ที บ4คโ 1บดี บ1ท บบ5ฉบ บบ5ฝึ บบ5อย บ1ป บ1พ บร5มี บ1ส บ4สบ บส4เ บ1ห บอ5ดี บอ5ระ 3บอล 1บั บัพพาชนี5 1บา บาจ5ร บา4ต บา5ตอ บา2ท บา5ทา บา5ทุ บา5รน บา5รอ บา5สม บิ5ชอ บี5คิ บี5ร่ 1บุ บุค3 บุ5ตร บุ5ถุ บุ5รพ 1บู บู4ช5น บู5ติ บู5ย่ บ1เ บ1แ บ1โ บ๊5จี บ๊5เบ ปก4ส ป4จั ป4จา ปฐ5ปท ปฐ5พี ปต5ถก ปต5พล ป4ทา ป1ป ป4ปเ ปม5ด้ ป4ยุ ปร5ตอ ปร5ติ ปร5ตี ปร5ตุ ปร5ผั ปร5ษณ 1ประ ปร5แก ปร5แท ปร5ไฟ ปล5ญว ป4วา ปส4ต 1ปั 1ปา ปา5ฐก ปา5ณก ปา5นี ปา5ปิ ปาร4 ปา5รเ ปิ5ดอ ปิ5ดิ ปิ5ยภ ปิ5ยอ ปิ5หก ปี5ชี ปี5มะ ปี5ฬก ปี่3 ปุ5คล ปุ5ถุ ปู5จ๋ ปู5ติ ป1เ ป1ไ ผก5ผั ผณิ5ศ ผน5ผั ผ4นิ ผ4ยา ผล5พล ผล5ไม ผ4สา ผี5ดิ ผี5ตอ ผี5ถ้ ผี5ห่ ผ้า3 3ฝอย ฝี5มะ ฝ่5ฝั 3พจน พจ5นี พช5ฉล พช5รา พท5ริ พทัก4 พน5ทะ พ4นั พนิ4 พ1พ 2พ2ย พย5ก๊ พร5ชย พร5ซี พร5มี 1พรร พ4รู พร5ไฟ 3พฤก พฤ5ฒา พล5ทิ พล5ร่ พส5เฟ พอ5คว พอ5สม 1พั 1พา 4พาจ พา5ชน พา5นร 1พิ พิ5ถั พิ5ถี พิ5ปล พิ5รอ พิ5รี พิ5ลึ พิ5ศุ พิส5ม พี5ระ พุ5ชิ พุ5พอ พู5ทว พู5พอ พ1เ พ4เย พ่5ป๊ พ่อ3 พ้5ท้ 2พ์ พ์5ดี 1ฟั 1ฟา ฟิ4ลา ฟี5ฟ่ ฟู5ฟ่ ฟ1เ 1ฟ้ ภค5ทร ภค3ว ภช5นี 1ภั 1ภา ภา5ณก ภา5ณว ภา5รด ภา5รต ภา5รย ภา5วน ภิ5ชน ภิ5มห ภิ3ร ภิ5สม ภุ5ชง 1ภู ภู5ฏา ภู5ริ ม1ก ม4กม ม4กษ ม1ข ม4ขล ม1ค ม4คค ม4คอ มค5อิ 1มงคล มง5ฟอ ม1จ ม1ช มช4ว ม1ซ 3มณฑ มณ5ฑน มณ5บร มณ5พร มณ5เฑ มณ5เพ มด5ยอ มด5ลู ม1ต ม4ตธ ม4ติ ม4ตไ มต5ไต ม1ท 3มนตร มน5ฮั ม4นุ ม1บ มบ4พ ม1ป มป4ช มป5ฤด มป5ฤๅ ม4ป์ ม1พ ม4พก ม4พว ม1ภ มภ5กถ ม1ม ม4มเ ม4มโ มย5รา 3มรร ม3รั ม3ริ มฤ5คิ มฤ5เค มล5ทิ ม3ลิ ม3ล้ ม1ว มว5มอ ม4วล ม1ส มส4เ มห5กร ม3หน มห5ภา ม5หาญ ม5หาย มหา3ส มอ5ขว มอ5คร มอ5ดู มอ5ตำ มอ5นว มอ5นอ มอ5ระ 4มอั มะ5ถั มะ5ฝ่ มะ5ฮอ 1มั ม4ั่ 1มา มา4ก มา5ดร มา5นร มา5ป่ มา5พจ มา5มก มา5มุ มา5ม่ มา5ยณ มา5ยอ มา5ร่ มา3ว4 1มิ มิ5กภ มิ5ซร มิ5ตล มิ5ถิ มิ5น่ มิ5ฟล มิ5ลำ มิ5ลี มิ5แพ มี5ขม 3มืด 1มือ. มุ5ทะ มุ5ทั มุ5ทิ มุ5ทุ มุ5ฮั มู5ซี มู5ป่ มู5รต มู5ลิ มู5หย มู5หร มู5ฮั มู5แด มู5แผ มู5แฮ ม1เ ม1แ ม1โ ม1ไ ม4่า 3ม้า ม์5ภิ ยก5ย่ ย1กร ย4ก5ร้ ย1ค ยง5บ่ ยง5ฝ้ ยง5อย ยจ5คร ยด5ย้ ย1ต ย1ท ย1ธ ยบ5ร้ ย1ป ย1พ ย1ภ ยม5ยอ ยม5รา ยม5หา ยม5อี ย4มิ ย1ย ยย4ส ยร5ถี ย5รบั ยล5ไท ยว5ข้ ยว5จ๊ ยว5ดอ ยว5นี ยว5ย่ ยว5รั ยว5ไส ย1ศ ย1ส ย1ห ย4หฐ ยห5ฐา ย4หป ยห5ปร ยอ5บี ยอ5รม 1ยั 1ยา ยา5กฤ ยา5กว ยา5ฉุ ยา5ณม ยา5ณว ยา5ถ่ ยา5บร ยา5สล ยา5สี ยา5ฬั ยำ5ทว ยี5รา 1ยุ ยุ5คล ยุ5ตก 4ยุภ ยุ5แย ยุ5แห ยู5ถิ ยู5ฟ่ ยู5ริ ยู5ไน ย1เ ย1แ ย1โ ย์5กล ย์5ถ่ ย์5มน ย์5หน 2รก รก5ซอ รก5ซึ รก5ซ้ ร1กร รก5รา รก5ร้ รค5พว รง5พย รง5รอ รจ5ถร รณ5คด รณ5ตร รณ5ถั รณ5พฤ รณ5สถ ร5ณาญ รณู5ป 4รณ์ ร1ด ร4ดป ร4ดแ ร4ดโ ร4ดไ รด5ไอ รถ1 รถ5พย ร1ท ร4ทฤ รท5ฤด ร4ท4ว รท5วิ รธ5ขึ รธ5สร รธ5เก รน5ทุ 4รนา ร1บ ร4บค ร4บถ รบ5ถ้ ร4บม ร4บั ร4บไ รบ5ไก ร1ป ร4ปณ ร5พชา ร5พ5ชิ รพ5ทิ ร1ภ ร4ภย รม5รอ รมาว5 รม4เห ร4ยั รร4ก รร5คา รร5จถ รร5จว รร5ชิ รร5ณึ รร5ถา รร5ยง รร5ยเ รร3ล รร5หา รร5แท รร5แส รร5ไก รร5ไต รล5ออ รศ5นี รษ5ฐิ รษ5ตร ร1ส ร4สก ร4สช ร4สเ ร4สโ ร3หิ ระ1 ระ5สา ระ5หก 5รังส 3รัฐ 1รัต รา5กฏ รา5กฤ รา5กว 1ราช รา5ชู รา5ดร รา5ดว รา5ดู รา5ม่ รา5วณ รา5สง รา2ห รา5หุ รำ5งั รำ5จว ริ5กอ ริ5ซึ ริ5ตร ริ5ทึ 4ริพ ริ5มน 4ริยจ 4ริยย 4ริร ริ5แล 4ริ่ รี5คู รี5ฑา รี5ดู รี5ตร รี5ตอ รี5มู รี5รั รี5รา รี5ริ รี5ลั รี5ลิ รี5ล่ รี5สอ รี5สะ รุ5กว รุ5ขร รุ5คร รุ5ทว รุ5ธิ รุ5มุ รุ5วน 1รู รู5ที รู5นี รู5บิ รูป5ก รู5ปิ รู5มา รู5มู รู5หร 2ร1เ ร1โ ร่5กะ ร่5ตร ร่5ร่ ร่5หล ร์5กอ ร์5กี ร์5คั ร์5ดิ ร์5ติ ร์5ตู ร์5ทิ ร์5ฟอ ร์5ฟู ร์5ลี ร์5วอ ฤ4ดา ฤป4เ ฤษ5ฎี ฤห5บด ล5กนะ ลก5ลา ลก5วั ล3กอ ล4กัย ลข5คณ ลข5หม ลชี4 ลด5ระ ลด5ลิ ล4ดา ล1ต ล4ตฟ ลต5ฟอ ลบ5ตะ ลบ5มุ ลบ5ล้ ลบ5ไส ลป5ตอ ลม5งว ล3มอ 2ลย ล1ล ล4ล์ ล3วี ลว5ไห ลส5ไต ลห5กุ ลอก5ล ลอ5จี ลอ5สร ละ5ผล 1ลักษ ลา5กล ลา5นี ลา5บร ลา5ป๋ ลา5พอ ลา5มี 3ลาร ลา5รอ ลา5ร้ ลา5ฤก ลา5ส้ ลิ5ก่ ลิ5จู ลิ5ซึ ลิ5ตอ ลิ5นอ ลิ5น่ ลิ4บ ลิ5บา ลิ5ฟอ ลิ5มู ลี5ตะ 3ลีน ลี5ผล ลี5ลา ลี5วู ลุก5ร ลุก5ล ลุ5ล่ ลูก1 ลู5ซี ลู5ที ลู5มิ ลู5ลอ ลู5ออ 2ล1เ 2ล1แ ล1โ ล่5ติ ล่5ที ล่5หล ล่5ออ ล้5โพ ล์5สต ว3กร วก5ว่ ว5การ ว1ค 1วงศ วจ5ตร วจ5สอ วช5นี วด5ถ่ วด5มว วด5ยิ วด5ระ วด5ลา วด5ล้ วด5อ้ ว1ต ว4ตฉ วน5ถี วน5ท้ วน5ผส วน5รว วน5ร่ วน5อิ วน5อุ วบ5ยอ วบ5รว วบ5รั วบ5ฮา ว1ป ว1พ วม5รอ ว3มู วย5ก้ วย5จี วย5ริ วย5รื วย5ล้ วย5ไท วย5ไม วร5ธิ วร5มณ วร5มห ว4รย 1วรร4 ว4ร์ วล5ระ วส5ปอ ว1ห วอ5ชิ 1วั วัน3 วันต5 วันท4 1วา วา5ดะ วา4ต วา5ตก วา5ติ วา5นร วา5นึ วา5บร วา5มน วา5รณ วา5สนะ วา4ห วา5หน วา5หิ 1วิ วิ5กล วิ5กส วิ5คห วิ5จุ วิ5ดี วิ5ตก วิ5ตร วิ5ตี วิ5ถี 3วิท วิ5ทิ วิ5ธุ วิ5ธู วิ5ปก วิ5ปฏ วิ5ปล วิ5ปว วิภู5 วิ5มล วิ5รง วิ5วร วิ5ศร วิ5ศุ วิ5ษุ วิ5สร วิ5สฤ วิเล5 วี5คู วี5ชน วี5ดิ 1วุ ว1เ ว1แ ว1โ ว่5ห้ ว้5ชื ว้5ทุ ว้5ลา ว์5ลิ ศ1จ ศน5อุ ศพิ4 3ศรี ศ2วร ศษ5ซ้ ศษ5เก ศษ5เห 1ศั ศัก5ร 1ศา2 ศา5กา ศา5ขบ ศา5นุ ศา5ภิ ศา5รย ศา5รั ศา5ริ ศา5ลา 1ศิ ศิ5รพ ศิ5รว ศิ5ศี 1ศึ ศุ5กล ศู5ลิ ศเจ5ร ษ3ฎา ษฐ5ภค ษ5มณี ษ4มา 1ษั 1ษา ษา5คเ 1ษิ ษ์5พย สก5ลิ สก5ลึ สก5วั สก5วา ส4กา 4ส4กุ สข5บุ สง5ขล ส1ซ ส5ดิก ส5ดิน ส5ดิภ ส5ดิม สต5ทิ ส3ตรา 2สต์ สถ5วี 4สถ์ สน5ธย สน5ธิ ส5นียะ ส4นุ สนูป5 ส4ปา สพ5ติ ส2ม สม5ดุ 3สมบ สม5ผส สม5ผุ สม5ผเ สม5ยอ สม5ฤด สม5ฤต สม5หว ส5มัท ส5มัน สมุ4 สรร5ช สร5ลอ สล5บร สว4ก สว5ยม ส4วร สว5ริ ส4วา 4สวิ ส1ส สห5กร สห5กา สห5ชา สห5ธร สห5ปร สห5พั สห5ภา สห5รา สห5ศึ สอ5พล สอ5พอ สะ5ใภ 1สั สัญประ5 สัน3ถ สัม3 1สา สา5คเ 4สาธ สา5นึ สา5มน สา5มี สา5วพ สำ5ออ สำ5โร 1สิ สิ5ถิ สี5ข้ สี5ชอ สี5ดว สี5ตล สี5ตโ สี5ถ่ สี5ผึ สี5ฝุ สี5ละ สี5ลั สี5วล 1สุ สุ5กร สุ5กำ สุ5กี สุ5ขิ สุ5ขุ สุ5คต สุ5คร สุ5นี สุ5บร สุ5บิ สุ5ปร สุ5มน สุ5สง สุ5ไห 2สุ์ 1สู ส1เ ส4เฟ ส1โ ส4โก ส4โค 3ส่ว ส่5ไค ส้5กร ส้5ติ ส้5ไก 2ส์ ส์5หย ห2 2ห1ก หก5ระ หก5ล้ 5หการ หง4ส หง5สา หฤ5หร หฤ5โห หล5สะ หอ5คอ หอ5สม 1หั หา5กฐ หา5บพ หา5ปณ หา5พร หา5รื หา5ฤก หิ5รก หิ5ศว หุ5คู หู5กร หู5กว หู5หน ห้5ท่ ห้5ท้ ห้5ร้ 2ห์ ห์5กร ห์5สน ฬว5รา ฬห5บู 1ฬา ฬา5มณ ฬา5รึ อก5ซอ อก5ถล อก5รณ อก5รี อก5รู อก5ร่ อก5ฤท อก5ลว อก5ลอ อก5ลา อก5ล่ อก5ว่ อก5ใบ อค5ที อฆ5สง อง4คม อง5ถิ อง5บร อง5บิ อง5ฟอ อง5ฟุ อง5ระ อง5อุ อง5อ้ อด5ถอ อด5น่ อด5ฝา อด5ยอ อด5รั อด5อย อด5ออ อด5อุ อด5อ้ อ3ดิ อต5ดอ อต5ด็ อต5ไว อ1ท อ4ทค อท5คอ อน5ง้ อน5ดร อน5ทำ อน5ผั อน5ฝู อน5ฟิ อน5ย้ อ4นา อ4นุ1 อบ5ช้ อบ5ถา อบ5บี อบ3อ อบ5ไล อป5คอ อป5ติ อป5พร อป5พล อป4ร อป5วา อป5โล อพ5ริ อฟ5ฟิ อฟ5ฟี อฟ5ริ อฟ5ไล อ4ภั อม5ฎอ อม5ดอ อม5ถอ อม5ยิ อม5รา อม5ร่ อม5ฤต อม5หล อม5หว อม5ห้ อ5มอน อย5กอ อย5ก๋ อย5นว อย5ร่ อย5ร้ อย5อิ อ4ยา อย5ได อร5ชุ อร5มน อ3รอ อ1รั อ3รา อ1ริ อ1รี อ3ร้ อร์1 อล5จี อล5นี อล5ฟ่ อล5หม อ3ลั อ1ลิ อว5รุ อศ5กร อษ5ฐช อษ5ฐภ อส5กา อส5ติ อส5ตู อส5นี อส5พล อส5ฟอ อส5มิ อส5เฟ อส5แอ อส5ไพ อ1ห ออ5อว อะ5ธี 1อั 1อา อา5ค5เ อา5ฏา อา5ณั อา5ดุ อา5ดู อา2ต อา5ถร อา5นน อา5ปณ อา5มล อา5ย5ต อา5รด อา5รต อา5รบ อา3รย อา5ลป อา5วร อา5วี อา5สว อำ5ยว อำ5อว อิ5ชย อิ5ดะ อิ5ระ อิ5ศว อี5จู อี5ซู อี5ยิ อี5รุ อี5ลุ อี5ศว อี5หร อุ5กฤ อุ5กล อุ5คร อุ5ดม อุ5ดร อุ5ด้ อุ3ตรา อุ5ตุ อุ5ทร อุ5ทิ อุ5ทุ อุ5ธั อุ5บล อุ5บ๊ อุ5มง อุ5รพ อุ5ลก อุ5แว อู5คู อู5รา อู5ลา อ1เ อเป5ร อเสก5 อเส5ข อเห5ต อ1แ อ1โ อโร3 อ1ไ 3อ่อ อ่5อว อ่5อ่ อ่5โถ อ้5อว อ้5โถ อ้5โล ฮก5ฮา ฮก5ฮื ฮน5รี ฮฟ5วี ฮล5ดิ 3ฮอล ฮา5นอ ฮา5ป่ ฮา5ร่ ฮิ5บร ฮี5บร 3ฮื้ ฮู5ลา ฮู5ล่ ฮ1เ ฮ่5กึ ะ1ก ะ1ข ะ1ค ะ1ง ะ1จ ะ1ฉ ะ1ช ะ1ซ ะ1ด ะ1ต ะตะ4 ะ1ท ะ1น ะ1บ ะ1ป ะผี4 ะ1พ ะ1ม ะ1ย ะ1ร ะ1ล ะ1ว ะ1ส ะ1ห ะ1อ ะ1เ ะ1แ ะ1โ ะ1ไ ั2 ัก5ง่ ัก5ซ้ ัก5ตบ ัก5ผ่ ัก5ฝ่ ัก5ยอ ัก5ยิ ัก5รั ัก5ร้ ัก3ล ัก5วิ ัก5ษร ัก5อิ ัก5อี ัก5อ่ ัก5ใค ัก5ใฝ ัค5ฆิ ัค5ซี ัค5สถ ัง5ถึ ัง5ศุ ัง4ส5ว ัง5อว ัง5อุ ัง5ฮี ัจ5กล ัจ5ญะ ัจ5ถร ัจ5นึ ัจ5โจ ัช5ฎา ัช5นี ัช5พย ัช5พื ัช5รา ัช5ริ ัช5สม ัช5เร ัช5แพ ัช5โญ ัญ1 ัฏ5ทุ ัฏ5สง ัฐ5ทิ ัฐ5บร ัฐ5สภ ัฐ5เค ัณ5ฏก ัณ3ฐ ัณ5ยก ัณ5เฑ ัณ5โร ัด1 ัต5ดึ ัต5ถล ัต5ถั ัต5ถิ ัต5มณ ัต5มห ัต5รา ัต5รี ัต5ฤก ัต5ลั ัต5หล ัต5หี ัท5คี ัท5ทว ัท5ธน ัท5ธิ ัท5รา ัท5ลี ัท5ลุ ัธ5ยม ัน5ฉ่ ัน2ต ัน5ตภ ัน5ตะ ัน5ตั ัน5ตา ัน5ถธ ัน5ทึ ัน5ทุ ัน5ท่ ัน4ธ ัน5ธา ัน5ธิ ัน5ผว ัน5ฝร ัน5ฝ่ ัน5ภิ ัน5ยะ ัน5ย่ ับ1 ัป5คั ัป5ผา ัป4ร ัป5ลา ัป5หง ัป5โป ัป5โห ัพ5ยอ ัพ5ยา ัพ5โพ ัพ5โห ัฟ5ฟิ ัฟ5ริ ัม4ช ัม5ลา ัม5หม ัย5มร ัย5รุ ัล5ดี ัล5ปน ัล5ปพ ัล5ปิ ัล5ฟิ ัล5มุ ัล5ออ ัล5ไซ ัล5ไฟ ัว1 ัศ5นี ัศ5มี ัศ5เจ ัศ5ไน ัส5กา ัส5ดง ัส5ดน ัส5ดี ัส5ติ ัส5ถา ัส5ปู ัส5มั ัส5มิ ัส5ยิ ัส5รั ัส5ลิ ัส5วด ัส5วร าก5ถา าก5ฝร าก5ฝั า1กร า5กรร าก5รุ า3กอ าก5ฮอ า3กี า1ข า4ขบ าข5บู า1ค า4คจ า4คท า4คบ า4คป าค5ปร า4คพ าค5พื า4คภ า5ครี าง5บำ าง5ฝี าง5ฟิ าง5ออ าง5อิ า1จ า4จญ า4จห าจ5หา า4จอ า4จเ าช5กร าช5คร าช5คฤ าช5ทิ า5ชนะ าช5นี าช5ปะ าช5ลั าช5วโ าช5สก าช5สี าช5อง า1ชิ า3ชี าช5เป าช5เล าช5โอ า1ซ าญ5รอ า5ฏกะ าฏ5ดน า5ฏลิ าฏ5ลี า3ฏิ าฐ5กถ าณ5คด าณ5สถ าด5ผว า3ดอ า3ดิ าด5ไท าด5ไห า1ต า4ตญ า4ตภ าต4ว า1ท า4ทธ า4ทน า5ทนะ าท5บง าท5บร าท5สก าท5หล า4ท์ า1ธ า4ธน า2ธย าธ5ยม าน5ญ่ าน5ผู าน5รว าน5รั าน5ฤด าน5อว านุ1 าบ5จ้ าบ5ฉว าบ5ช้ าบ5ซึ าบ4พ าบ5รื าบ5ละ า3บิ าป5สร าป5ส่ าป5แช าพ5ถ่ าพ5ยน าพ5รั าพ5ลว าฟ5ต้ าฟ5ริ า3ฟิ า1ภ า4ภป า4ภล าภ5ลอ าม5ง่ าม4น4 าม5สก าม2ห าม5หม าม5หล าม5หา าย5กล าย5กอ าย5ขว าย5ข้ าย5ชน าย5ดิ าย5ด้ า5ยตน า5ยนธ า5ยนม าย5นอ า5ยนเ าย5บร าย5ผอ าย5ฝั าย5มุ าย5ม่ าย5รุ าย5ร้ าย5ลั าย5ล่ าย5วอ าย5อำ า3ยิ าย5ไห าร5กำ าร3ค าร5ชุ าร5ณู าร5ตร า5รทะ าร5ธุ าร5บั าร5ผจ าร5พร า5รภย า1รม าร5รา าร5ละ าร5วด าร5ว่ าร5หน า1ระ า1รั า1รา า1ริ า5ริก า5ริยะ า3รี า1รุ า1ล า4ลก า4ลค า4ลจ าล5ฎี า4ลด าล5ดี าล5ทห า4ลป าล5ปก าล5พร า4ลว า4ลส าล5อุ า4ลโ า4ล์ าว5ก่ าว5ข้ า3วดี าว5ดึ าว5นี าว5บอ าว5ยอ าว5ยื า5วรณ าว5รภ าว5รา า5ว5รี าว5รุ าว5ร้ าว5ฤก า5วอน าศ5นี า3ศร าศ5เล าษ5ดื าษ5ตร าษ5รา าษ5แก าส5กา าส5ด้ าส5ต้ าส5นี าส5ปอ าส5มห า1ห าห3ก าห5มง าฬ5โร า1อ าอนา4 า1ฮ า1เ าเม5ศ า1แ า1โ า1ไ ำ1ก ำ1ค ำท4ว ำ1น ำ1บ ำ1ป ำ1พ ำ1ม ำม5รง ำม5ลา ำ1ร ำ1ล ำ1ส ำ1ห ำ1เ ำ1แ ิก5ซี ิก5ถอ ิ1กร ิก5ร้ ิ3กฤ ิก5ล้ ิก5วา ิก5ษุ ิกิ5ส ิ1ข ิ4ขส ิข5สิ ิ1ค ิ4คต ิค5ตอ ิ4คน ิ4คหะ ิฆ5เน ิง5ชี ิง4สต ิง4ห ิง5หา ิง5ห้ ิง5อร ิจ5ศี ิช4น ิช5ลิ ิ3ชิ ิช5เช ิญ5หน ิญ5โญ ิด5ฉิ ิด5นี ิด5ผน ิด5รอ ิด5ระ ิด5ลั ิด5ออ ิด5อ่ ิต5ซู ิต5ถี ิต5ฟอ ิต5ลด ิต5ลา ิต5วส ิ1ติ ิ3ตุ ิท5ธั ิท5สน ิ3ธี ิน5งอ ิน5ฟร ิน5ยว ิน5ยอ ิน5ย้ ิน5ระ ิน5ริ ิน5ร้ ิ5นอบ ิน5อิ ิน5ฮุ ินู5ป ิบ5บิ ิบ5ผย ิบ5ยื ิบ5ระ ิบ5รี ิบ5ลั ิบ5ลิ ิบ5ล้ ิป4ก ิป5ทอ ิป5ผล ิ3ปร ิป5สต ิป5ฮอ ิป5โป ิป5โย ิ1พ ิ4พพ ิ4พโ ิพ5โส ิฟ5ฟอ ิ1ภ ิม5ฝี ิม5ลา ิ1มุ ิย5มิ ิร5ชร ิร5วด ิ1รั ิ1รา ิ1ริ ิ1รุ ิล5ปิ ิ1ลั ิ1ลา ิ1ลิ ิว5ซี ิว5ทร ิว5บิ ิว5ยอ ิว5ริ ิว5ลิ ิว5ลึ ิว5ออ ิวา5ส ิศ5พร ิศ5ร้ ิศ5เล ิศ5แพ ิษ5ณุ ิษ5ตร ิส5กร ิส5กี ิ5สตร ิส5ติ ิส5ที ิส5นี ิส5บอ ิส5รา ิส5ริ ิส5ลา ิส5ไซ ิ1ห ิหา4 ิ1อ ิ1เ ิเน4 ิ1โ ิ1ไ ี1ก ี4กต ี4กย ีก5ย่ ีก5ริ ีฆ5สร ีช5คณ ีซ5สถ ีด5ฆ่ ีต5กว ีต5ปฏ ี1ท ีท4น ีบ5รั ีบ5รุ ีบ5ร้ ี1ป ี1พ ี4พจ ีย5กถ ีย5รย ีย5รอ ีย5ระ ีย5รั ี5ยวน ีร5ณั ีล5จุ ี4วั ีวา4 ีษ5มา ีห5นา ี5หน้ ีห5บั ีห5มุ ีห5รา ี3หล ีห5โม ีห5ไส ี1อ ีอ4ร ีอา4 ี1เ ี1แ ี1โ ี1ไ ี่5ก่ ี่5ถ้ ี่5ปุ ี่5ปู ี่3ห ี่5โค ี่5โป ี้5กร ี้5จ้ ี้5ตะ ี้5ริ ี้5ลั ี้5ลุ ี๊5กร ี๋5จ้ ี๋5อ๋ ึก5ซึ ึก5ดำ ึก5ดื ึก5ยื ึก5ระ ึก5ลั ึก5ล้ ึก5ฮั ึด5ถื ึด5ฮั ึน5ทึ ืด5ฮา ือ5กล ือ5กอ ือ5กำ ือ5ข่ ือ5จ้ ือ5ชื ือ5ดำ ือ5ตร ือ5ถื ือ5นำ ือ5บิ ือ5ปล ือ5ปื ือ5ป่ ือ5พว ือ5พ่ ือ5ยน ือ5ยา ือ5รื ือ5ลา ือ5ล้ ือ5สอ ือ5สำ ือ5อี ุก5งอ ุก5ฉก ุก5ซ่ ุก5ดิ ุก5ผา ุก5รา ุก5รุ ุก5ละ ุก5ลี ุก5ล้ ุก5อี ุก5ฮื ุข5นา ุข5ปา ุข5ภั ุข5ภา ุข5ลั ุข5ศา ุข5ศึ ุข5เด ุค5ทอ ุ3คน ุง5ถุ ุจ5ลิ ุจ5หน ุช5รา ุช5เช ุญ5จน ุญ5ฤท ุญ5แจ ุฎ5ฐั ุฑ5พ่ ุณ5ค่ ุณ5ฑก ุณสม5 ุณ5หญ ุณ5หา ุณ5หิ ุณูป5 ุด5ผา ุด5ผ่ ุด5ลอ ุด5ลุ ุด5อู ุต5กว ุต5ซอ ุต5ตก ุ5ตระ ุ5ตริ ุต5ลุ ุ3ทก ุท5ธั ุ5ทริ ุท5ลุ ุท5โธ ุน5ทร ุน5ผล ุน5รอ ุบ5งิ ุบ5บิ ุบ5ผล ุบ5ยิ ุบ5อิ ุป5กร ุป5จา ุป5ถั ุป5ทา ุป5ยุ ุป3รา ุ5ปริ ุ4ปส ุป5สง ุป5สร ุป5ฮา ุป5โภ ุป5โล ุพ5พา ุพ5ภิ ุภ5ชล ุภ5เค ุม4น ุม5นุ ุม5รุ ุม5หย ุย5ช่ ุย5ฝ้ ุ1ร ุร5ข่ ุ4รค ุ4รฉ ุ4รช ุ4รท ุ4รธ ุ4รบ ุ4รพ ุ4รภ ุ5รภี ุ4รย ุ4รร ุ4รล ุ4รว ุ4รศ ุ4รส ุ4รอ ุ4รแ ุ4รโ ุล5จอ ุล5ชี ุล5ธิ ุล5มุ ุล5สต ุล5สแ ุ3ลา ุ3ลิ ุศ5โล ุษ5จี ุษ5ฎี ุษ5ปร ุ4ษย ุษ5รา ุษ5ร้ ุษ5เพ ุส5รา ุ5สละ ุส5ลิ ุส5วา ุ1ห ุห5กล ุห5นา ุ4หย ุห5ยา ุ4หเ ุห5เท ุห5เส ุ4หโ ุห5โย ุ1เ ุ1โ ุ๊5ต๊ ูก5วั ู1ช ูญ5หา ูญ5เป ูญ5เส ูด5บึ ูด5รี ูต5รู ูธ5เร ูบ5ไล ูป4ก ูป5ฌา ูป5ถ่ ูป5ทร ูป5พร ูป5ร่ ูป5แบ ูป5โฉ ูฟ5วี ู2ม ู5มิน ูร5ข่ ูร4ณ ู5รณภ ู5รณม ู5รณะ ู5รณาก ูร4พ ู5รพะ ู5รพา ูร4ม ูล5กร ูล5ค่ ู3ลั ูว5ไน ูส4ว ู1เ ู1โ ู่1 ู้1 ู๊5ตึ ู๋5กร ู๋5จี ู๋5อี เ2 เก5ยู เก5วั เก5ศว เก5อิ เค5ซอ เค5มี เค5ศว เจ5ดี เจ5นี เ4จร เจ5ลิ เจ5โต เซ5ทิ เซ5นอ เซ5รุ เซ5แค เด5บิ เด5รั เด5ลา เด5ลิ เด5ลี 2เตช เต5ปุ เต5มี เต5มู เต5ริ เต5ลุ เต5ศว เต5หะ เถ5รา เท5กร เท5คร เท5คว เท5โว เท5โศ เน4ต เน5ติ 4เนย เน5ระ เน5รั เน4ส เน5สา เน5เว เบ5ต้ เบ5บี เบ5ริ เบ5รุ เบ5ลี เป5ตอ เป5สก เป5สล เพ5ชุ เพ5ทุ เพ5สล เพ5โท เพ5ไน เฟ5อี เภ5ตร เภ5ทุ เม5ฆิ เม5ดิ เม5ลา เร5กอ เร5กะ เร5มอ เร5รว เร5วด เล5กร เล5คอ เล5ดี เล5วร เล5วู เล5หล เล5ฮุ เลิ4 เว5ก้ เว5ทิ เว5ล่ เว5ฬุ เว5ไน เส5ฉว เส5นีย์ เส5รี เส5วก เส5วน เส5แส เห5มั เห5ยง เห5ระ เห5รั เห5ศว เห5ศั เห5สั เฬ5วร เอ5กว เอ5ธิ เอ5ฬก เฮ5ละ เฮ5ลิ เฮ5โม เฮ5โร แก5วั แค5รอ แค5ริ แค5ลอ แค5ลิ แค5แต แค5แส แช5บ๊ แช5เช แซ5ยิ แด5รี แต5แต แน2 แบ4ค แ4ปร 3แพท แฟ5รี แ4ฟ้ แม2 แม5ชี แม5รี แม5เร แม่3 แอ5นะ โก4ฐ โก5ลอ โก5ลา โก5ลิ โก5วา โก5วี โก5ฮา โข5ทั โข5ภิ โข5เภ โข5โล โค5ตม โค5ติ โค5มู โค5ม่ โค5ริ โค5ลอ โค5ลั โค5ล่ โค5ออ โค5อะ โค5แท โค5ไซ โจ5ปก โฉ5เบ โช5ดึ โช5ห่ โซ5กร โซ5นี โซ5ฟิ โซ5ยู โซ5ลู โซ5สเ โญ4ช โญ5ปว โด5จี โด5นี โด5รา โด5ลิ โต5กร โต5รอ โต5รา โต5ริ โต5ลิ โท5กร โท5คอ โท5พล โท5รอ โท5แอ โธ5ทน โธ5ปก โธ5ปิ โธ5วน โธ5เฟ โน5ทุ โน5ปจ โน5รม โบ5ชุ โบ5ซอ โบ5ต้ โบ5รอ โบ5รั โบ5รา โบ5ลิ โบ5ล่ โบ5อิ โบ5ไฮ โป5กส โป5ลิ โป5แล โป5โป โป5โล โพ5ทะ โพ5ระ โพ5ลา โพ5ลิ โพ5ลี โพ5หา โพ5แท โพ5ไซ โฟ5กร โฟ5นี โภ5คิ โภ5ไค โม5ฆี โม5ดู โม5ร็ โม5หา โม5ฮั โย5ถิ โร5กะ โร5คิ โร5งั โร5ชิ โร5ธนะ โร5รา โร5ล่ โรส4 โร5สเ โร5หน โร5อี โร5ฮิ โร5แม โร5ไล โล5กร โล5กี โล5จน โล5ปุ โล5มก โล5รา โล5วะ โล5หิ โว5นอ โศ5ธน โศ5ภิ โส5กร โส5ติ โส5ธน โส5ภิ โส5ลิ โส5วร โส5หุ โส5โค โห5ฐา โห5รส โห5ระ โห5รา โห5สิ โห5ฬา โอ5คล โอ5ค็ โอ5ดี โอ5รส โอ5ละ โอ5สถ โอ5อิ โฮ5โล 3ใช้ 1ให ไก5ลา ไก5วั ไข5ข้ ไข5คว ไข5มั ไข5สั ไข5สื ไค5ศว ไช5น่ ไช5ศว ไซ5ดอ ไซ5บอ ไซ5บี ไซ5ปร ไซ5ออ ได5ฟุ ได5ฟู ได5ลิ ได5ออ ไท5ฟอ ไท5รอ ไท5แท ไป5ริ ไพ5ชย ไพ5ธอ ไพ5รั ไพ5ริ ไพ5ลิ ไพ5หา ไพ5โร ไพ5โอ ไฟ5แช ไฟ5แน ไภ5ริ ไม5ถิ ไม้1 ไล5บร ไล5บี ไว5รั ไว5อะ ไห5รณ ไห5ศว ไห5หม ไห5หล ไอ5กร ไอ5ซี ไอ5ดอ ไอ5ติ ไอ5พอ ไอ5พ็ ไอ5ศว ไอ5ศุ ไอ5ศู ไอ5ออ ไฮ1 ็ก5ซี ็จ5ขบ ็จ5สร ็ด5ลอ ็ด5อร ็ด5อึ ็น5ฉ่ ็น5ทร ็น5รอ ็น5วู ็น5อย ็น5อ้ ็บ5ด้ ็ป5ท็ ็ม5หม ่ก5ลั ่1ค ่ง5ริ ่ง5อร ่ง5อำ ่ง5อ่ ่4ฉี ่น5ง่ ่น5ฉ่ ่น5ทะ ่น5มื ่4นย ่น5ยน ่น5ย่ ่น5รม ่ม1 ่ม5พว ่ย5กะ ่ย5ฉุ ่ย5รา ่ย5ร่ ่ว5ช้ ่ว5ถึ ่ว5ยว ่ว5ไห ่อ5กร ่อ5กว ่อ5กะ ่อ5กี ่อ5ก้ ่อ5ข่ ่อ5ตร ่อ5ตะ ่อ5ต้ ่อ5ถื ่อ5บื ่อ5ผส ่อ5มว ่อ5ม่ ่อย3 ่อ5ยอ ่อ5ย่ ่อ5ร่ ่อ3ล ่อ5ว่ ่อ5สร ่อ5ฮั ่อ5ฮ่ ่า5กล ่า5ช้ ่า5ดง ่า5ด้ ่า5ฝื ่า5พร ่า5มง ่า5รึ ่า5ร้ ่าว3 ่ำ5ชอ ่ำ5ช้ ่ำ5ต้ ่ำ5ต๊ ่ำ5ไห ่1เ ่1แ ้ก5อ้ ้ง5ถ่ ้ง5ฝุ ้น5งู ้น5ฉบ ้น5ฉ่ ้น5ทะ ้น5ทุ ้น5ท้ ้น5รุ ้น5ร่ ้ม5งว ้ม5ฉุ ้ม5น้ ้ม5ยิ ้ม5ละ ้ม5ลุ ้ม5อล ้ย5กล ้ย5งช ้ย5ล่ ้ย5อ้ ้ย5ใบ ้ว5รอ ้1ห ้อ5กร ้อ5กล ้อ5คร ้อ5คู ้อ5งอ ้อ5ฉี ้อ5ดึ ้อ5ด้ ้อ5ต๊ ้อ5ถอ ้อน3 ้อ5ผ้ ้อ5ฝั ้อ5ฟื ้อ5มู ้อ5ระ ้อ5ร่ ้อ5อึ ้อ5ฮื ้า5จอ ้า5ชื ้า5ชู ้า5ช่ ้า5ช้ ้า5ดี ้า5ถิ ้า5ถึ ้า5บ่ ้า5บ้ ้า5บ๋ ้า5ปี ้า5ผา ้า5ฝร ้า3พ ้า5มุ ้า5ว่ ้า5สม ้า5สร ้า5สล ้ำ1 ้1เ ้1แ ๊ก5ซอ ๊ก5ริ ๊ก5ลุ ๊ก5ฮว ๊ง5บ๊ ๊ป5ซี ๊ย5ก่ ๋ย5อิ ๋อ5ด๋ ์ค5สเ ์ค5แล ์ต5ไท ์ท5ไท ์1บ ์1พ ์1ร ์1เ ์1แ ์1โ .ก6 .ข6 .ฃ6 .ค6 .ฅ6 .ฆ6 .ง6 .จ6 .ฉ6 .ช6 .ซ6 .ฌ6 .ญ6 .ฎ6 .ฏ6 .ฐ6 .ฑ6 .ฒ6 .ณ6 .ด6 .ต6 .ถ6 .ท6 .ธ6 .น6 .บ6 .ป6 .ผ6 .ฝ6 .พ6 .ฟ6 .ภ6 .ม6 .ย6 .ร6 .ฤ6 .ล6 .ฦ6 .ว6 .ศ6 .ษ6 .ส6 .ห6 .ฬ6 .อ6 .ฮ6 6ก. 6ข. 6ฃ. 6ค. 6ฅ. 6ฆ. 6ง. 6จ. 6ฉ. 6ช. 6ซ. 6ฌ. 6ญ. 6ฎ. 6ฏ. 6ฐ. 6ฑ. 6ฒ. 6ณ. 6ด. 6ต. 6ถ. 6ท. 6ธ. 6น. 6บ. 6ป. 6ผ. 6ฝ. 6พ. 6ฟ. 6ภ. 6ม. 6ย. 6ร. 6ล. 6ว. 6ศ. 6ษ. 6ส. 6ห. 6ฬ. 6อ. 6ฮ. 6ก์. 6ข์. 6ฃ์. 6ค์. 6ฅ์. 6ฆ์. 6ง์. 6จ์. 6ฉ์. 6ช์. 6ซ์. 6ฌ์. 6ญ์. 6ฎ์. 6ฏ์. 6ฐ์. 6ฑ์. 6ฒ์. 6ณ์. 6ด์. 6ต์. 6ถ์. 6ท์. 6ธ์. 6น์. 6บ์. 6ป์. 6ผ์. 6ฝ์. 6พ์. 6ฟ์. 6ภ์. 6ม์. 6ย์. 6ร์. 6ล์. 6ว์. 6ศ์. 6ษ์. 6ส์. 6ห์. 6ฬ์. 6อ์. 6ฮ์. 6กิ์. 6ขิ์. 6ฃิ์. 6คิ์. 6ฅิ์. 6ฆิ์. 6งิ์. 6จิ์. 6ฉิ์. 6ชิ์. 6ซิ์. 6ฌิ์. 6ญิ์. 6ฎิ์. 6ฏิ์. 6ฐิ์. 6ฑิ์. 6ฒิ์. 6ณิ์. 6ดิ์. 6ติ์. 6ถิ์. 6ทิ์. 6ธิ์. 6นิ์. 6บิ์. 6ปิ์. 6ผิ์. 6ฝิ์. 6พิ์. 6ฟิ์. 6ภิ์. 6มิ์. 6ยิ์. 6ริ์. 6ลิ์. 6วิ์. 6ศิ์. 6ษิ์. 6สิ์. 6หิ์. 6ฬิ์. 6อิ์. 6ฮิ์. 6กุ์. 6ขุ์. 6ฃุ์. 6คุ์. 6ฅุ์. 6ฆุ์. 6งุ์. 6จุ์. 6ฉุ์. 6ชุ์. 6ซุ์. 6ฌุ์. 6ญุ์. 6ฎุ์. 6ฏุ์. 6ฐุ์. 6ฑุ์. 6ฒุ์. 6ณุ์. 6ดุ์. 6ตุ์. 6ถุ์. 6ทุ์. 6ธุ์. 6นุ์. 6บุ์. 6ปุ์. 6ผุ์. 6ฝุ์. 6พุ์. 6ฟุ์. 6ภุ์. 6มุ์. 6ยุ์. 6รุ์. 6ลุ์. 6วุ์. 6ศุ์. 6ษุ์. 6สุ์. 6หุ์. 6ฬุ์. 6อุ์. 6ฮุ์. 6ะ 6า 6ๅ 6ำ7 6ิ 6ี 6ึ 6ื 6ุ 6ู แ6 โ6 5ไ6 7ใ6 6็ 6่ 6้ 6๊ 6๋ 6์ 6ํ 6ฺ 6๎ เ6ข เ6ฃ เ6ค เ6ฅ เ6ฆ เ6ง เ6จ เ6ฉ เ6ช เ6ซ เ6ฌ เ6ญ เ6ฎ เ6ฏ เ6ฐ เ6ฑ เ6ฒ เ6ณ เ6ด เ6ต เ6ถ เ6ท เ6ธ เ6น เ6บ เ6ป 7เ6ผ เ6ฝ เ6พ เ6ฟ เ6ภ เ6ม เ6ย เ6ร เ6ล เ6ว เ6ศ เ6ษ เ6ส เ6ห เ6ฬ เ6อ เ6ฮ ช6วา. ช6ไ ธ6ไน ม6ไห ส6ไต เลส7ไต ส6ไน ส6ไบ ส6ไป ส6ไล บ6ทคว ม6วก ม6วน ม6วด ม7วดี ม6วย ะม6วง ล7ชน ัต5ถุ ัต6ถุ์ 6ตร. ธา6ตุ. บุ6ตร. ค6รู ฮิบ6รู ฮีบ6รู ส6ภา ส7ภาร เส7ภา โส7ภา ผ6วา น6คร. .เห6ยง เปี่6 เขี้6 ม6ณี คาม7ณี .รม7ณี .รัม7ณี หม7ณี ง6วด ง6วน วัง7วน ง6วย มง6วง อย6อด พ6ญา จุ6รณ ฤ6ชา .ฤ6ทัย พรร6ดิ สวา6ดิ อ6ริ. จน6ที. ธค6ยา นิม6นา ย์ม6นา า7ณะ ิ7ณะ ุ7ณะ ณ7ณะ ก7ณะ ท7ณะ ล7ณะ ุษ7ณะ ฤษ7ณะ รป7ณะ หม7ณะ สม7ณะ ลว7ณะ รว7ณะ ร5ณะ ณร6สี ก6นะ ยก7นะ ค7นะ ย7นะ ภว7นะ มท7นะ รต7นะ ลว7นะ วจ7นะ วท7นะ วส7นะ ศม7นะ ภช7นะ ไช7นะ าลป7นะ รรธ7นะ สธ5นะ โสธ6นะ สว5นะ เสว6นะ สาว7นะ ัจ7นะ ัช7นะ ัฏ7นะ ัฒ7นะ ัต7นะ ัท7นะ ัป7นะ ัส7นะ ุจ7นะ อาส7นะ ุ7นะ 5ผี 7จำ 5งำ ห6งำ น7รำ ย7รำ ร7รำ โค7รำ ไพ7รำ น7ยำ ม7ยำ 5งง. ห6งง น7งก 5ชน. เ6ชน โ6ชน 5กร. ั6กร า7นะ ถ7ระ า7ยก. า7ยน. า7ฐี า7นี า7วี ป5โ ป6โย ป6โภ วิป7โย อุป7โภ ศ7นะ รร7มะ ต5ถี ุต6ถี 5บท. ส6บท 5บถ. ข6บถ ส6บถ 7ฟู 7ษุ 5ตะ. ค6ตะ ร6ตะ สร7ตะ า7มี มิ7ผ า7กิ า7กล ิ7กล. ์7กล 5นำ ห6นำ รี7ผ 7ณุ 5นี. ห6นี ฉ6นี าร6นี วีช6นี สส6นี มท6นี รม6นี น7ยิ ิ5ลี ุ5ลี า7ลี โค7ลี โม7ลี ท7ลี ร7ลี ก7ยะ ค7ยะ ป7ยะ ท7ยะ ธ7ยะ น7ยะ ษ7ยะ า7ยะ ิ7ยะ คี7ยะ ฆี7ยะ ณี7ยะ นี7ยะ รี5ยะ เปรี6ยะ มโห5 ิ7รี ี7รี ู7รี หา7รี ม7รี. น5รี. เต7รี. ช7รี. ถ7รี ภ7รี ภม7รี โม7รี ภุม7ร พ7รี. เว7รี 5ผล 5ดล. 5รส. ก6รส จ6รส โค6รส ท6รส พ6รส ด6รส 5คน. ณ7หา ฤๅ5 ฤา5 .ยี่7 า7วะ เท7พี เท7วี บรร7จ บรร7ถ บรร7พต 5ทก. 5ดร. น7ทร. า7ทร. โค7ทร. โล7ทร. โส7ทร. 7อู. 5พล. ไพร่7 5ศก. อัฐ5 อัฐ6ม อัฐ7มี ี7วี ู7วี ถ7วี. ส7วี. ฏ7วี. น7ตี ร7ตี อ7ตี า7ตี ิ7ตี ู7ตี า7สี ณ7สี ห7สี เว7สี ู7สี ิ7สี ก7สี โบ7ลา ู7ลา อจ7ลา เว7ลา บิว7ลา มข7ลา เอ7ลา ี7ลา โร7ลา โอ7ลา โซ7ลา ิ7กะ ุ7กะ อ7กะ นว7กะ ิณ7กะ เภ7กะ ัย7กะ ิย7กะ รธ7กะ ัฏ7กะ ัฒ7กะ ิช7กะ ศต7กะ มล7กะ 7ทุ. โซ6ร ธ6นู ัส7ดุ. ร7คต ดง7คต 5กง. เ6กง 7ฎก ณ7มี ว7มี ศ7มี ู7มี ี7ติ รุ7ติ สุ7ติ ฮ7ติ อร7ติ วีส7ติ ติงส7ติ คุป7ติ มุต6ติ ภัต6ติ ก7ดี ต7ดี พ7ดี ม7ดี ย7ดี ศ7ดี อ5ดี า7ดี ี7ดี ุ7ดี ุว7ดี ดิบ7ดี นัก7 กุณ5 กุณ6ฑ์ 7ซี. 5ที. จน6ที ี7รา ู7รา ์7รา ิต7รา ม7รา ย7รา .มก7รา รบ7รา ลิก7รา เห7รา. 7กฎ. 7กฏ. 5หะ ค6หะ นิค7หะ เค7หะ ท6หะ เท7หะ ู7หา ฬ7หา ค7หา เน7หา ่7หา 5มะ ร6มะ ห6มะ ต6มะ 5หู 5ดำ ส6ดำ 7คำ 5สะ ว6สะ 5ฐะ ส6ฐะ 7ธะ 5พี. ร6พี ทร7พี ปฐ7วี ิ7ดา ษ7บ ษ7ป ิ7ระ ี7ระ ู7ระ ช5ระ ิต7ระ ทห7ระ ท7ระ. ุก5ระ. สว7ระ ัส7ระ ิส7ระ เป7ระ อ7ยา. เก7ยา รร7ยา สา7วก ิ7ธิ ุท7ธิ. ิท5ธิ. .สิท6ธิ. บุริมสิท6ธิ. ไกรสิท6ธิ. ป7ธิ ขัดสมา6ธิ พยา6ธิ. 5ษี. ด6นู ิ7วะ ี7วะ ุ7วะ ี7วก ย7วะ เท7วะ ไท7วะ ัท7วะ าช7วะ ไศ7วะ 7ถะ 7ษะ 5พร. 5ผง 5ธี า7ชะ ิ7ชะ ร5ชะ ส7ชะ โอ7ชะ 5ฆะ 5ฟะ า7ฟี ิ7ถี ร7ถี 5ฮา 5ญี 5ผา 5หิ. สิน7ธพ สิน7ธุ. สิน7ธู 5ชู 5ศะ ิ7ละ ุ7ละ ู7ละ ย7ละ ด7ละ .วส7ละ อเจ7ล เต7ละ ่7ละ น7ทะ ท7ทะ ส7ทะ น7ตุ. รร6ตุ มา7ตฤ ิ7รพ า7รพ. ไก7รพ 5ศุ. า7ถา า7สพ พ7สพ ุ7ขี 7สอ. า7ดะ 5บะ. 5ยี. ห6ยี 5กี. 5หก. ง7อร. ม7อร. ี7วร ส7วร. พู7นท 5จร. โ6จร. 7ศพ. โป7ลี 7ภพ. 7นพ. 7ณพ. า7รก. ทก7รก ย7รก. ยว7รก. 5มล. ุ5บล. โล7บล. 5ชล. 5ชก. 7โพ 5ณู 7ปี. า7บี. 5ฏะ. า7ฬี 5ปะ. ฉ6ปะ ส6ปะ ู7ลู 5ตู. 5ยู. 7ฆี. ิ7จี ี7จี ุ7จี ู7จี เว7จี 5ศี. 5มน. 5ยอ. ผ6ยอ. 5สง. 7สร. 5ดก. ส6ดก 7โก. ก7ฝ า7มก. 5ซอ า7ขะ ู7ขะ ส5ขะ ร7ษา 5ภะ ศ7ภ ิ7ลก ุ7ฎี ศา5ข 5สา. ั6สา 7ซู 5ษก. ษ7ฐี 5ดม. ส6ดม ด7ลม. ส7ลม. ว7ลม. ี7ลม. 5ศล. นิ7ยต 7งู 5จะ. า7สก. โป7สก 5ยศ. 5ธก. 5กบ. 7คู. ส5มา. 5แล. 5พก. โส7ภ รร6ดิ. า7วก. น7นร. 5จอ. 5จบ. 5คบ. 5ฉล. ม7รม อบ7รม ิ7รม. ี7รม. 5ซน. 5ดอ. 5กิ. ซู7ซุ ซู7ฮก 5บส. น7รน. ตก7ลง ม7ตน ตัว7ตน ี7วง ศ7วง. แตร7วง แวด7วง า7ฑู 5หด. อบ7นบ นา7คร. ี7ฑา ู7ดู า7รภ. า7ฝ ล7รบ. ว7รบ. อ7รบ. า7รณ. น7ยง ม7ยง ุ7ยง ิ7ยง ิ7ยน หา7พน า7งิ ช7รถ. น7รถ. ส7รถ. ัน7ธร. มณ7ฑก มณ7โฑ มร7กต มร7ฑป ยอด7อก โล่ง7อก ยืด7อก ห7ห 5ทด. ว7นม. ทพ7นม. โค7นม ษ7ฎร. ิ7ปุ ิ7ปู ี7รอ. ย7ลำ อ7ลำ ้7ลำ น7ทม. ป7ทม. วก7วน อล7วน ิ7จล. ช7ญะ ี7ข ศีล7 5ธม. สม7รด สัก7วา สัป7ด สัป7ท า7สม. อ7สม. า7นล. ี7รุ ู7รุ เน7รุ ง7หล สีห7นุ 5ภร. 5จด. บ7ยก. ดิ7ศร ร7ศร อพ7ยพ ร7ชร. รส7กา ลส7กา อาจ7อง ี7มู อึง7อล ุ7ชุ ุ7สภ. เก7ชา เก7ศา ช7ตก. บ7ตก. เข7ฬะ ห7ณี อ7ปน. ย7ชม. เบื้อง7 5คะ ง7ออ. อ7ออ. เรือ7ธ เรือ7บ เลี้ยว7 5กก. เ6กก อ7ขอ. า7กอ. แด7วู บ7ยล. โฉ7เก โด7มร โต7มร 7โผ โท7โส ้7ปด. 7คี. โย7นก. โส7มม 7ฬส. ต7ถิ 7โฮ ใจ7 5ฟง ไช7โย 5พต. กรร7กศ ล7บก. ศ7ยป. า7นน. ุ7ฎา ู7ฏา า7มอ. ท7โท ุ7ทส จ่า7ร ฬ7หี า7ฒะ ธต7รฐ ท7คล. ต7ถร. ิ7ฐิ ป7ผะ พฤ7ษภ. ิ7ธุ า7ฬก. ห7สิ ฏ7ฏิ. ษ7ฏิ. ศิษ7ฎิ ษ7ฏี 5ษส. ิ7ปิ ู7ริ. ฑ7ฑุ ษ7ฏุ า7ตา ว7ตก ง7ตก เก6ตุ. ส7ตุ ลิ7บง ฮ7โ 7อุ. ิศ7รา",
+ ["length"]=53269,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=4289,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-tk.lua
index 53e6bf61c61..45f6b38f86f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tk.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-tk.lua
@@ -6,25 +6,33 @@ return {
["metadata"]={
["mnemonic"]="tk",
["source"]="hyph-tk",
- ["texcomment"]="% Turkmen hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% Hyphenation patterns for Turkmen (hyph-tk.tex)\
-%\
-% Author: Nazar Annagurban <nazartm at gmail.com>\
-% License: Public domain\
-% Version: 0.1\
-% Date: 16 March 2010\
-%\
-% ----------------------------------------------------------------------\
-%\
-% The file has been auto-generated from generate_patterns_tk.rb\
-% that is part of hyph-utf8.\
-%\
-% For more information about UTF-8 hyphenation patterns for TeX and\
-% links to this file see\
-% http://www.tug.org/tex-hyphen/\
+ ["texcomment"]="% copyright: Copyright (c) 2010-2015 Nazar Annagurban\
+% title: Hyphenation patterns for Turkmen language\
+% version: 0.1 16 March 2010\
+% notice: >\
+% This file is part of the hyph-utf8 package.\
+% See http://www.hyphenation.org for more information.\
+% license:\
+% name: MIT\
+% url: https://opensource.org/licenses/MIT\
+% text: >\
+% Permission is hereby granted, free of charge, to any person obtaining a copy\
+% of this software and associated documentation files (the \"Software\"), to deal\
+% in the Software without restriction, including without limitation the rights\
+% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
+% copies of the Software, and to permit persons to whom the Software is\
+% furnished to do so, subject to the following conditions:\
+% \
+% The above copyright notice and this permission notice shall be included in\
+% all copies or substantial portions of the Software.\
+% \
+% THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\
+% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\
+% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\
+% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\
+% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\
+% THE SOFTWARE.\
%\
% ",
},
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-tr.lua
index a496a183674..84fac9016c0 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-tr.lua
@@ -6,11 +6,7 @@ return {
["metadata"]={
["mnemonic"]="tr",
["source"]="hyph-tr",
- ["texcomment"]="% Turkish hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% hyph-tr.tex\
+ ["texcomment"]="% hyph-tr.tex\
%\
% Turkish hyphenation patterns\
%\
@@ -32,7 +28,7 @@ return {
% - script written by Mojca Miklavec <mojca.miklavec.lists at gmail.com> in June 2008\
%\
% See also:\
-% - http://www.ctan.org/tex-archive/language/turkish/hyphen/turk_hyf.c\
+% - http://mirror.ctan.org/language/turkish/hyphen/turk_hyf.c\
% - http://www.tug.org/TUGboat/Articles/tb09-1/tb20mackay.pdf\
%\
% Differences with Ottoman patterns:\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-uk.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-uk.lua
index a42d57074d4..af4e9c87072 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-uk.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-uk.lua
@@ -6,68 +6,12 @@ return {
["metadata"]={
["mnemonic"]="uk",
["source"]="hyph-uk",
- ["texcomment"]="% Ukrainian hyphenation patterns\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file is part of hyph-utf8 package and resulted from\
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.\
-%\
-% Source: TODO:WRITEME (yyyy-mm-dd)\
-% Author: Maksym Polyakov <polyama at auburn.edu>, <mpoliak at i.com.ua>\
-%\
-% The above mentioned file should become obsolete,\
-% and the author of the original file should preferaby modify this file instead.\
-%\
-% Modificatios were needed in order to support native UTF-8 engines,\
-% but functionality (hopefully) didn't change in any way, at least not intentionally.\
-% This file is no longer stand-alone; at least for 8-bit engines\
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.\
-%\
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer\
-% with help & support from:\
-% - Karl Berry, who gave us free hands and all resources\
-% - Taco Hoekwater, with useful macros\
-% - Hans Hagen, who did the unicodifisation of patterns already long before\
-% and helped with testing, suggestions and bug reports\
-% - Norbert Preining, who tested & integrated patterns into TeX Live\
-%\
-% However, the \"copyright/copyleft\" owner of patterns remains the original author.\
-%\
-% The copyright statement of this file is thus:\
-%\
-% Do with this file whatever needs to be done in future for the sake of\
-% \"a better world\" as long as you respect the copyright of original file.\
-% If you're the original author of patterns or taking over a new revolution,\
-% plese remove all of the TUG comments & credits that we added here -\
-% you are the Queen / the King, we are only the servants.\
-%\
-% If you want to change this file, rather than uploading directly to CTAN,\
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)\
-% or ask for credentials for SVN repository and commit it yourself;\
-% we will then upload the whole \"package\" to CTAN.\
-%\
-% Before a new \"pattern-revolution\" starts,\
-% please try to follow some guidelines if possible:\
-%\
-% - \\lccode is *forbidden*, and I really mean it\
-% - all the patterns should be in UTF-8\
-% - the only \"allowed\" TeX commands in this file are: \\patterns, \\hyphenation,\
-% and if you really cannot do without, also \\input and \\message\
-% - in particular, please no \\catcode or \\lccode changes,\
-% they belong to loadhyph-foo.tex,\
-% and no \\lefthyphenmin and \\righthyphenmin,\
-% they have no influence here and belong elsewhere\
-% - \\begingroup and/or \\endinput is not needed\
-% - feel free to do whatever you want inside comments\
-%\
-% We know that TeX is extremely powerful, but give a stupid parser\
-% at least a chance to read your patterns.\
-%\
-% For more unformation see\
-%\
-% http://tug.org/tex-hyphen\
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project, from various files\
+% [FIXME document], whose authors have been identified as Maksym Polyakov\
+% <polyama at auburn.edu> and <mpoliak at i.com.ua>. The licence terms are\
+% unchanged.\
%\
+% See http://www.hyphenation.org for details on the project.\
%------------------------------------------------------------------------------\
%\
% Ukrainian hyphenation patterns in LCY (cp866nav) encoding.\
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-us.lua
index 6e783f5aca8..826db3b1af1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-us.lua
@@ -9,11 +9,7 @@ return {
["metadata"]={
["mnemonic"]="us",
["source"]="hyph-en-us",
- ["texcomment"]="% Hyphenation patterns for American English\
-% \
-% (more info about the licence to be added later)\
-% \
-% This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008\
+ ["texcomment"]="% This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008\
% for consistency with other files with hyphenation patterns in hyph-utf8 package.\
% No other changes made. See http://www.tug.org/tex-hyphen for more details.\
% \
diff --git a/Master/texmf-dist/tex/context/patterns/mkiv/lang-zh.lua b/Master/texmf-dist/tex/context/patterns/mkiv/lang-zh.lua
new file mode 100644
index 00000000000..ac84c2a397a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/lang-zh.lua
@@ -0,0 +1,53 @@
+return {
+ ["comment"]="% generated by mtxrun --script pattern --convert",
+ ["exceptions"]={
+ ["n"]=0,
+ },
+ ["metadata"]={
+ ["mnemonic"]="zh",
+ ["source"]="hyph-zh-latn-pinyin",
+ ["texcomment"]="% This file has been converted for the hyph-utf8 project from pyhyph.tex, whose\
+% author has been identified as Werner Lemberg <wl at gnu.org>. The licence\
+% terms are unchanged.\
+%\
+% See http://www.hyphenation.org for details on the project.\
+%------------------------------------------------------------------------------\
+%\
+% This is the file pyhyph.tex of the CJK package\
+% for hyphenating Chinese pinyin syllables.\
+%\
+% created by Werner Lemberg <wl@gnu.org>\
+%\
+% Version 4.8.0 (22-May-2008)\
+%\
+% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org>\
+%\
+% This program is free software; you can redistribute it and/or modify\
+% it under the terms of the GNU General Public License as published by\
+% the Free Software Foundation; either version 2 of the License, or\
+% (at your option) any later version.\
+%\
+% This program is distributed in the hope that it will be useful,\
+% but WITHOUT ANY WARRANTY; without even the implied warranty of\
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\
+% GNU General Public License for more details.\
+%\
+% You should have received a copy of the GNU General Public License\
+% along with this program in doc/COPYING; if not, write to the Free\
+% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,\
+% MA 02110-1301 USA\
+%\
+% \\message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}\
+%\
+% ",
+ },
+ ["patterns"]={
+ ["characters"]="'abcdefghijklmnopqrstuwxyzü’",
+ ["data"]="a1b a1c a1d a1f a1g a1h a1j a1k a1l a1m a1p a1q a1r a1s a1t a1w a1x a1y a1z e1b e1c e1d e1f e1g e1h e1j e1k e1l e1m e1p e1q e1s e1t e1w e1x e1y e1z 1ga g1b g1c g1d 1ge g1f g1g g1h g1j g1k g1l g1m g1n 1go g1p g1q g1r g1s g1t 1gu g1w g1x g1y g1z i1b i1c i1d i1f i1g i1h i1j i1k i1l i1m i1p i1q i1r i1s i1t i1w i1x i1y i1z 1na n1b n1c n1d 1ne n1f n1h 1ni n1j n1k n1l n1m n1n 1no n1p n1q n1r n1s n1t 1nu 1nü n1w n1x n1y n1z o1b o1c o1d o1f o1g o1h o1j o1k o1l o1m o1p o1q o1r o1s o1t o1w o1x o1y o1z 1ra r1b r1c r1d 1re r1f r1g r1h 1ri r1j r1k r1l r1m r1n 1ro r1p r1q r1r r1s r1t 1ru r1w r1x r1y r1z u1b u1c u1d u1f u1g u1h u1j u1k u1l u1m u1p u1q u1r u1s u1t u1w u1x u1y u1z ü1b ü1c ü1d ü1f ü1g ü1h ü1j ü1k ü1l ü1m ü1n ü1p ü1q ü1r ü1s ü1t ü1w ü1x ü1y ü1z '1a ’1a '1e ’1e '1o ’1o",
+ ["length"]=802,
+ ["minhyphenmax"]=1,
+ ["minhyphenmin"]=1,
+ ["n"]=194,
+ },
+ ["version"]="1.001",
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/word-xx.lua b/Master/texmf-dist/tex/context/patterns/mkiv/word-xx.lua
index f8b38fe755b..f8b38fe755b 100644
--- a/Master/texmf-dist/tex/context/patterns/word-xx.lua
+++ b/Master/texmf-dist/tex/context/patterns/mkiv/word-xx.lua
diff --git a/Master/texmf-dist/tex/context/sample/aesop-de.tex b/Master/texmf-dist/tex/context/sample/common/aesop-de.tex
index 80a41f295ef..80a41f295ef 100644
--- a/Master/texmf-dist/tex/context/sample/aesop-de.tex
+++ b/Master/texmf-dist/tex/context/sample/common/aesop-de.tex
diff --git a/Master/texmf-dist/tex/context/sample/bryson.tex b/Master/texmf-dist/tex/context/sample/common/bryson.tex
index ecda71c5895..ecda71c5895 100644
--- a/Master/texmf-dist/tex/context/sample/bryson.tex
+++ b/Master/texmf-dist/tex/context/sample/common/bryson.tex
diff --git a/Master/texmf-dist/tex/context/sample/common/carey.tex b/Master/texmf-dist/tex/context/sample/common/carey.tex
new file mode 100644
index 00000000000..81dda1c21ce
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/carey.tex
@@ -0,0 +1,12 @@
+We humans, more than any other species, edit our ncRNA molecules to a remarkable
+degree. Not even other primates carry out this reaction as well as we do. We also
+edit particularly extensively in the brain. This makes editing of ncRNA an
+attractive candidate process to explain why we are mentally so much more
+sophisticated than our primate relatives, even though we share so much of our DNA
+template in common.
+
+In some ways, this is the beauty of ncRNAs. They create a relatively safe method
+for organisms to use to alter various aspects if cellular regulation. Evolution
+has probably favoured this mechanism because it is simply too risky to try to
+improve function by changing proteins. Proteins, you see, are the Mary Poppins of
+the cell. They are \quote {practically perfect in every way}.
diff --git a/Master/texmf-dist/tex/context/sample/cervantes-es.tex b/Master/texmf-dist/tex/context/sample/common/cervantes-es.tex
index 153797023ed..153797023ed 100644
--- a/Master/texmf-dist/tex/context/sample/cervantes-es.tex
+++ b/Master/texmf-dist/tex/context/sample/common/cervantes-es.tex
diff --git a/Master/texmf-dist/tex/context/sample/common/cow-black.mps b/Master/texmf-dist/tex/context/sample/common/cow-black.mps
new file mode 100644
index 00000000000..b34e2bab8be
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/cow-black.mps
@@ -0,0 +1,154 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 52 425 327 625
+%%HiResBoundingBox: 52.50 425.75 326.25 623.25
+%%Comment: originally a CorelDraw cow
+%%Creator: MetaPost
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+0 2 dtransform truncate idtransform setlinewidth pop
+0 setgray
+newpath 245.45 600.34 moveto
+242.78 599.40 239.62 596.02 237.67 594.07 curveto
+236.74 584.42 244.58 583.63 250.20 577.44 curveto
+258.77 573.70 251.21 567.72 256.18 557.42 curveto
+257.04 550.94 257.90 543.89 255.31 539.78 curveto
+249.48 538.92 247.97 540.22 246.89 531.43 curveto
+246.31 526.97 231.77 529.06 229.03 538.27 curveto
+227.09 544.97 221.33 546.70 217.80 543.17 curveto
+213.77 538.06 215.78 531.22 217.80 527.47 curveto
+224.93 517.32 212.04 511.42 205.13 516.74 curveto
+199.73 508.68 211.39 500.04 207.43 494.50 curveto
+205.78 493.99 204.77 489.17 185.47 500.54 curveto
+180.36 504.14 167.83 500.76 168.77 520.63 curveto
+168.77 525.82 165.60 543.53 162.14 555.91 curveto
+159.41 561.24 156.74 559.08 156.89 553.90 curveto
+157.18 547.85 162.94 531.22 155.52 540.22 curveto
+153.58 539.21 156.89 523.58 156.89 521.64 curveto
+162.00 517.03 157.39 513.58 154.73 512.28 curveto
+151.27 518.33 149.62 518.04 147.17 514.44 curveto
+141.70 514.08 144.58 528.19 140.26 528.62 curveto
+137.02 527.76 139.18 520.06 138.24 518.76 curveto
+132.98 524.74 130.90 529.27 127.01 521.64 curveto
+126.14 521.64 122.11 519.19 120.96 526.54 curveto
+117.65 552.74 107.06 558.36 93.82 565.13 curveto
+92.02 565.63 84.24 566.71 79.34 568.15 curveto
+73.51 560.88 58.32 565.63 56.23 570.31 curveto
+54.79 572.69 54.65 575.21 54.79 576.50 curveto
+52.34 580.10 55.87 582.70 59.62 583.06 curveto
+62.86 587.16 68.54 594.94 71.28 601.56 curveto
+72.29 603.07 74.95 609.34 78.19 609.55 curveto
+74.95 612.94 74.30 622.51 82.66 617.33 curveto
+87.12 624.02 92.09 624.31 95.76 615.82 curveto
+102.89 615.38 102.31 608.69 115.78 605.52 curveto
+122.76 602.86 132.77 604.58 140.26 603.72 curveto
+136.22 596.88 127.44 566.86 132.98 559.80 curveto
+140.76 564.70 141.84 605.38 157.03 595.66 curveto
+160.56 593.93 159.91 590.04 164.09 590.18 curveto
+170.42 587.45 169.13 600.77 172.51 600.77 curveto
+176.47 599.76 183.02 599.04 186.98 599.54 curveto
+197.71 600.77 206.93 604.08 223.92 602.50 curveto
+231.12 601.78 238.25 601.06 245.45 600.34 curveto
+closepath fill
+newpath 305.28 560.95 moveto
+304.63 560.95 299.95 561.24 299.38 561.24 curveto
+302.40 550.44 303.98 536.47 304.20 525.31 curveto
+303.70 521.35 299.81 517.46 299.38 525.67 curveto
+295.85 530.86 296.42 540.07 293.40 540.29 curveto
+287.35 539.64 285.34 513.22 280.01 509.33 curveto
+276.26 512.28 280.73 524.02 275.54 524.74 curveto
+270.50 524.02 264.31 526.68 266.69 534.46 curveto
+270.29 543.02 268.34 554.76 266.54 561.60 curveto
+262.37 578.59 264.02 587.09 271.58 596.09 curveto
+267.48 604.51 lineto
+275.40 608.26 285.62 604.58 290.02 602.21 curveto
+294.62 600.26 300.24 595.94 301.10 587.38 curveto
+303.34 578.88 304.42 569.74 305.28 560.95 curveto
+closepath fill
+newpath 84.38 618.55 moveto
+88.34 624.38 92.59 622.94 96.34 615.67 curveto
+101.23 615.60 102.46 612.43 104.98 610.78 curveto
+122.62 598.39 147.46 607.18 167.90 601.92 curveto
+180.94 598.54 190.87 599.76 200.09 602.06 curveto
+220.32 607.25 246.10 596.16 263.74 603.86 curveto
+274.75 608.62 284.76 605.66 292.97 600.91 curveto
+297.58 597.96 299.59 596.09 300.96 591.26 curveto
+306.29 572.54 306.29 551.02 309.53 530.57 curveto
+309.53 528.84 312.19 526.10 312.48 522.07 curveto
+315.79 511.34 316.08 510.12 317.16 502.20 curveto
+317.16 501.34 326.52 488.45 325.01 479.02 curveto
+323.93 481.25 323.86 482.83 321.62 481.68 curveto
+320.33 479.30 320.90 473.90 322.56 471.74 curveto
+320.83 470.81 318.46 473.47 317.52 475.20 curveto
+318.17 473.04 317.81 470.81 316.73 469.30 curveto
+315.86 472.25 316.58 473.18 315.36 473.90 curveto
+313.99 472.90 314.21 469.30 314.28 466.20 curveto
+313.49 468.07 311.47 472.46 312.55 476.42 curveto
+312.48 484.20 308.81 489.10 310.32 499.10 curveto
+310.10 504.43 307.30 521.06 304.56 524.30 curveto
+303.12 526.25 306.36 510.77 306.36 506.16 curveto
+306.65 500.90 307.08 468.72 306.43 463.10 curveto
+306.43 459.22 306.22 453.96 307.08 452.16 curveto
+308.74 450.79 309.38 450.50 309.60 447.98 curveto
+309.24 446.62 308.74 446.04 307.73 445.54 curveto
+306.07 444.60 307.37 441.79 306.07 439.85 curveto
+304.49 438.77 304.13 441.86 303.34 441.86 curveto
+302.69 441.00 303.05 437.98 302.47 436.18 curveto
+299.66 433.80 292.18 432.50 289.15 434.66 curveto
+289.73 440.64 291.74 441.58 295.63 446.62 curveto
+298.66 452.59 297.00 460.94 296.93 468.14 curveto
+295.49 480.38 289.22 487.30 289.44 496.44 curveto
+287.86 495.72 286.42 494.57 284.26 494.86 curveto
+283.39 489.46 286.42 484.56 284.83 480.82 curveto
+281.95 471.96 277.06 446.62 279.00 437.76 curveto
+280.01 434.74 278.21 433.15 277.06 433.94 curveto
+276.77 433.94 276.55 433.94 276.41 433.94 curveto
+276.41 433.94 276.55 431.42 275.69 430.92 curveto
+274.10 430.34 273.67 431.71 272.66 432.14 curveto
+271.22 430.85 272.52 429.48 271.15 428.04 curveto
+267.19 428.04 261.36 425.38 257.98 428.26 curveto
+257.33 434.16 263.30 436.68 266.47 440.71 curveto
+268.63 446.62 271.08 462.89 267.77 474.62 curveto
+267.77 475.56 264.38 485.28 261.43 488.66 curveto
+258.70 487.66 257.33 485.50 253.22 486.29 curveto
+252.58 484.34 253.30 482.33 252.22 480.10 curveto
+251.86 479.52 249.34 478.58 249.19 481.39 curveto
+248.98 483.05 248.90 486.36 248.26 486.72 curveto
+243.65 486.72 233.71 487.08 231.77 493.92 curveto
+219.89 492.34 215.93 491.26 206.57 493.42 curveto
+196.63 489.67 183.24 506.16 174.53 502.20 curveto
+172.51 496.15 173.09 485.64 171.65 481.39 curveto
+169.34 474.77 171.14 467.14 171.14 456.41 curveto
+170.57 455.40 169.85 454.46 168.48 454.46 curveto
+168.48 453.10 169.34 450.86 168.62 449.42 curveto
+167.18 447.62 165.89 451.80 165.02 444.60 curveto
+163.15 443.74 157.75 442.22 155.59 445.18 curveto
+155.88 448.99 158.33 451.30 160.13 453.38 curveto
+161.42 456.91 160.99 458.28 160.70 461.81 curveto
+160.99 464.98 161.71 468.58 161.86 470.09 curveto
+161.86 473.04 162.50 479.30 161.14 481.18 curveto
+159.41 482.69 lineto
+157.18 487.22 158.33 494.64 157.61 500.26 curveto
+155.81 500.69 155.81 500.98 154.01 498.31 curveto
+154.01 494.42 153.50 486.36 152.35 483.84 curveto
+149.69 479.81 150.84 459.65 151.42 448.56 curveto
+151.78 446.47 149.69 447.70 149.76 444.74 curveto
+150.05 442.80 147.89 443.59 146.09 444.60 curveto
+145.15 445.18 146.59 439.78 145.37 439.56 curveto
+142.34 438.84 136.87 438.19 135.22 440.71 curveto
+134.57 444.60 137.88 448.06 140.62 451.01 curveto
+143.14 455.83 140.90 465.70 140.47 476.28 curveto
+138.89 478.22 lineto
+134.86 483.19 139.61 496.94 136.51 506.23 curveto
+120.02 514.87 122.11 519.19 118.73 537.62 curveto
+115.13 557.64 93.38 567.65 79.06 567.65 curveto
+73.44 563.04 66.24 563.62 58.54 567.65 curveto
+55.66 569.23 54.43 573.19 54.50 576.50 curveto
+52.63 580.75 55.22 582.19 59.62 583.49 curveto
+62.71 587.81 68.62 594.65 69.19 597.74 curveto
+70.34 601.92 75.53 608.11 77.76 609.77 curveto
+75.82 613.01 74.81 615.17 77.11 618.55 curveto
+79.56 620.14 81.79 616.61 84.38 618.55 curveto
+closepath stroke
+showpage
+%%EOF
diff --git a/Master/texmf-dist/tex/context/sample/common/cow-black.pdf b/Master/texmf-dist/tex/context/sample/common/cow-black.pdf
new file mode 100644
index 00000000000..cfd70839d85
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/cow-black.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/common/cow-brown.mps b/Master/texmf-dist/tex/context/sample/common/cow-brown.mps
new file mode 100644
index 00000000000..530a45e9a6a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/cow-brown.mps
@@ -0,0 +1,154 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 52 425 327 625
+%%HiResBoundingBox: 52.50 425.75 326.25 623.25
+%%Comment: originally a CorelDraw cow
+%%Creator: MetaPost
+%%Pages: 1
+%%EndProlog
+%%Page: 1 1
+0 2 dtransform truncate idtransform setlinewidth pop
+0.55 0.25 0.10 setrgbcolor
+newpath 245.45 600.34 moveto
+242.78 599.40 239.62 596.02 237.67 594.07 curveto
+236.74 584.42 244.58 583.63 250.20 577.44 curveto
+258.77 573.70 251.21 567.72 256.18 557.42 curveto
+257.04 550.94 257.90 543.89 255.31 539.78 curveto
+249.48 538.92 247.97 540.22 246.89 531.43 curveto
+246.31 526.97 231.77 529.06 229.03 538.27 curveto
+227.09 544.97 221.33 546.70 217.80 543.17 curveto
+213.77 538.06 215.78 531.22 217.80 527.47 curveto
+224.93 517.32 212.04 511.42 205.13 516.74 curveto
+199.73 508.68 211.39 500.04 207.43 494.50 curveto
+205.78 493.99 204.77 489.17 185.47 500.54 curveto
+180.36 504.14 167.83 500.76 168.77 520.63 curveto
+168.77 525.82 165.60 543.53 162.14 555.91 curveto
+159.41 561.24 156.74 559.08 156.89 553.90 curveto
+157.18 547.85 162.94 531.22 155.52 540.22 curveto
+153.58 539.21 156.89 523.58 156.89 521.64 curveto
+162.00 517.03 157.39 513.58 154.73 512.28 curveto
+151.27 518.33 149.62 518.04 147.17 514.44 curveto
+141.70 514.08 144.58 528.19 140.26 528.62 curveto
+137.02 527.76 139.18 520.06 138.24 518.76 curveto
+132.98 524.74 130.90 529.27 127.01 521.64 curveto
+126.14 521.64 122.11 519.19 120.96 526.54 curveto
+117.65 552.74 107.06 558.36 93.82 565.13 curveto
+92.02 565.63 84.24 566.71 79.34 568.15 curveto
+73.51 560.88 58.32 565.63 56.23 570.31 curveto
+54.79 572.69 54.65 575.21 54.79 576.50 curveto
+52.34 580.10 55.87 582.70 59.62 583.06 curveto
+62.86 587.16 68.54 594.94 71.28 601.56 curveto
+72.29 603.07 74.95 609.34 78.19 609.55 curveto
+74.95 612.94 74.30 622.51 82.66 617.33 curveto
+87.12 624.02 92.09 624.31 95.76 615.82 curveto
+102.89 615.38 102.31 608.69 115.78 605.52 curveto
+122.76 602.86 132.77 604.58 140.26 603.72 curveto
+136.22 596.88 127.44 566.86 132.98 559.80 curveto
+140.76 564.70 141.84 605.38 157.03 595.66 curveto
+160.56 593.93 159.91 590.04 164.09 590.18 curveto
+170.42 587.45 169.13 600.77 172.51 600.77 curveto
+176.47 599.76 183.02 599.04 186.98 599.54 curveto
+197.71 600.77 206.93 604.08 223.92 602.50 curveto
+231.12 601.78 238.25 601.06 245.45 600.34 curveto
+closepath fill
+newpath 305.28 560.95 moveto
+304.63 560.95 299.95 561.24 299.38 561.24 curveto
+302.40 550.44 303.98 536.47 304.20 525.31 curveto
+303.70 521.35 299.81 517.46 299.38 525.67 curveto
+295.85 530.86 296.42 540.07 293.40 540.29 curveto
+287.35 539.64 285.34 513.22 280.01 509.33 curveto
+276.26 512.28 280.73 524.02 275.54 524.74 curveto
+270.50 524.02 264.31 526.68 266.69 534.46 curveto
+270.29 543.02 268.34 554.76 266.54 561.60 curveto
+262.37 578.59 264.02 587.09 271.58 596.09 curveto
+267.48 604.51 lineto
+275.40 608.26 285.62 604.58 290.02 602.21 curveto
+294.62 600.26 300.24 595.94 301.10 587.38 curveto
+303.34 578.88 304.42 569.74 305.28 560.95 curveto
+closepath fill
+newpath 84.38 618.55 moveto
+88.34 624.38 92.59 622.94 96.34 615.67 curveto
+101.23 615.60 102.46 612.43 104.98 610.78 curveto
+122.62 598.39 147.46 607.18 167.90 601.92 curveto
+180.94 598.54 190.87 599.76 200.09 602.06 curveto
+220.32 607.25 246.10 596.16 263.74 603.86 curveto
+274.75 608.62 284.76 605.66 292.97 600.91 curveto
+297.58 597.96 299.59 596.09 300.96 591.26 curveto
+306.29 572.54 306.29 551.02 309.53 530.57 curveto
+309.53 528.84 312.19 526.10 312.48 522.07 curveto
+315.79 511.34 316.08 510.12 317.16 502.20 curveto
+317.16 501.34 326.52 488.45 325.01 479.02 curveto
+323.93 481.25 323.86 482.83 321.62 481.68 curveto
+320.33 479.30 320.90 473.90 322.56 471.74 curveto
+320.83 470.81 318.46 473.47 317.52 475.20 curveto
+318.17 473.04 317.81 470.81 316.73 469.30 curveto
+315.86 472.25 316.58 473.18 315.36 473.90 curveto
+313.99 472.90 314.21 469.30 314.28 466.20 curveto
+313.49 468.07 311.47 472.46 312.55 476.42 curveto
+312.48 484.20 308.81 489.10 310.32 499.10 curveto
+310.10 504.43 307.30 521.06 304.56 524.30 curveto
+303.12 526.25 306.36 510.77 306.36 506.16 curveto
+306.65 500.90 307.08 468.72 306.43 463.10 curveto
+306.43 459.22 306.22 453.96 307.08 452.16 curveto
+308.74 450.79 309.38 450.50 309.60 447.98 curveto
+309.24 446.62 308.74 446.04 307.73 445.54 curveto
+306.07 444.60 307.37 441.79 306.07 439.85 curveto
+304.49 438.77 304.13 441.86 303.34 441.86 curveto
+302.69 441.00 303.05 437.98 302.47 436.18 curveto
+299.66 433.80 292.18 432.50 289.15 434.66 curveto
+289.73 440.64 291.74 441.58 295.63 446.62 curveto
+298.66 452.59 297.00 460.94 296.93 468.14 curveto
+295.49 480.38 289.22 487.30 289.44 496.44 curveto
+287.86 495.72 286.42 494.57 284.26 494.86 curveto
+283.39 489.46 286.42 484.56 284.83 480.82 curveto
+281.95 471.96 277.06 446.62 279.00 437.76 curveto
+280.01 434.74 278.21 433.15 277.06 433.94 curveto
+276.77 433.94 276.55 433.94 276.41 433.94 curveto
+276.41 433.94 276.55 431.42 275.69 430.92 curveto
+274.10 430.34 273.67 431.71 272.66 432.14 curveto
+271.22 430.85 272.52 429.48 271.15 428.04 curveto
+267.19 428.04 261.36 425.38 257.98 428.26 curveto
+257.33 434.16 263.30 436.68 266.47 440.71 curveto
+268.63 446.62 271.08 462.89 267.77 474.62 curveto
+267.77 475.56 264.38 485.28 261.43 488.66 curveto
+258.70 487.66 257.33 485.50 253.22 486.29 curveto
+252.58 484.34 253.30 482.33 252.22 480.10 curveto
+251.86 479.52 249.34 478.58 249.19 481.39 curveto
+248.98 483.05 248.90 486.36 248.26 486.72 curveto
+243.65 486.72 233.71 487.08 231.77 493.92 curveto
+219.89 492.34 215.93 491.26 206.57 493.42 curveto
+196.63 489.67 183.24 506.16 174.53 502.20 curveto
+172.51 496.15 173.09 485.64 171.65 481.39 curveto
+169.34 474.77 171.14 467.14 171.14 456.41 curveto
+170.57 455.40 169.85 454.46 168.48 454.46 curveto
+168.48 453.10 169.34 450.86 168.62 449.42 curveto
+167.18 447.62 165.89 451.80 165.02 444.60 curveto
+163.15 443.74 157.75 442.22 155.59 445.18 curveto
+155.88 448.99 158.33 451.30 160.13 453.38 curveto
+161.42 456.91 160.99 458.28 160.70 461.81 curveto
+160.99 464.98 161.71 468.58 161.86 470.09 curveto
+161.86 473.04 162.50 479.30 161.14 481.18 curveto
+159.41 482.69 lineto
+157.18 487.22 158.33 494.64 157.61 500.26 curveto
+155.81 500.69 155.81 500.98 154.01 498.31 curveto
+154.01 494.42 153.50 486.36 152.35 483.84 curveto
+149.69 479.81 150.84 459.65 151.42 448.56 curveto
+151.78 446.47 149.69 447.70 149.76 444.74 curveto
+150.05 442.80 147.89 443.59 146.09 444.60 curveto
+145.15 445.18 146.59 439.78 145.37 439.56 curveto
+142.34 438.84 136.87 438.19 135.22 440.71 curveto
+134.57 444.60 137.88 448.06 140.62 451.01 curveto
+143.14 455.83 140.90 465.70 140.47 476.28 curveto
+138.89 478.22 lineto
+134.86 483.19 139.61 496.94 136.51 506.23 curveto
+120.02 514.87 122.11 519.19 118.73 537.62 curveto
+115.13 557.64 93.38 567.65 79.06 567.65 curveto
+73.44 563.04 66.24 563.62 58.54 567.65 curveto
+55.66 569.23 54.43 573.19 54.50 576.50 curveto
+52.63 580.75 55.22 582.19 59.62 583.49 curveto
+62.71 587.81 68.62 594.65 69.19 597.74 curveto
+70.34 601.92 75.53 608.11 77.76 609.77 curveto
+75.82 613.01 74.81 615.17 77.11 618.55 curveto
+79.56 620.14 81.79 616.61 84.38 618.55 curveto
+closepath stroke
+showpage
+%%EOF
diff --git a/Master/texmf-dist/tex/context/sample/common/cow-brown.pdf b/Master/texmf-dist/tex/context/sample/common/cow-brown.pdf
new file mode 100644
index 00000000000..5e7fa4f8602
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/cow-brown.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/common/cow.pdf b/Master/texmf-dist/tex/context/sample/common/cow.pdf
new file mode 100644
index 00000000000..2441faf74e7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/cow.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/d-res-01.xml b/Master/texmf-dist/tex/context/sample/common/d-res-01.xml
index 23f22cc3205..23f22cc3205 100644
--- a/Master/texmf-dist/tex/context/sample/d-res-01.xml
+++ b/Master/texmf-dist/tex/context/sample/common/d-res-01.xml
diff --git a/Master/texmf-dist/tex/context/sample/darwin.tex b/Master/texmf-dist/tex/context/sample/common/darwin.tex
index 6425bf156cc..6425bf156cc 100644
--- a/Master/texmf-dist/tex/context/sample/darwin.tex
+++ b/Master/texmf-dist/tex/context/sample/common/darwin.tex
diff --git a/Master/texmf-dist/tex/context/sample/davis.tex b/Master/texmf-dist/tex/context/sample/common/davis.tex
index 8d45c984924..8d45c984924 100644
--- a/Master/texmf-dist/tex/context/sample/davis.tex
+++ b/Master/texmf-dist/tex/context/sample/common/davis.tex
diff --git a/Master/texmf-dist/tex/context/sample/dawkins.tex b/Master/texmf-dist/tex/context/sample/common/dawkins.tex
index c0acd3157ad..c0acd3157ad 100644
--- a/Master/texmf-dist/tex/context/sample/dawkins.tex
+++ b/Master/texmf-dist/tex/context/sample/common/dawkins.tex
diff --git a/Master/texmf-dist/tex/context/sample/demo-mps.tex b/Master/texmf-dist/tex/context/sample/common/demo-mps.tex
index 57bb690c0a0..57bb690c0a0 100644
--- a/Master/texmf-dist/tex/context/sample/demo-mps.tex
+++ b/Master/texmf-dist/tex/context/sample/common/demo-mps.tex
diff --git a/Master/texmf-dist/tex/context/sample/demo-tex.tex b/Master/texmf-dist/tex/context/sample/common/demo-tex.tex
index 309a0acfc99..309a0acfc99 100644
--- a/Master/texmf-dist/tex/context/sample/demo-tex.tex
+++ b/Master/texmf-dist/tex/context/sample/common/demo-tex.tex
diff --git a/Master/texmf-dist/tex/context/sample/demo-xml.tex b/Master/texmf-dist/tex/context/sample/common/demo-xml.tex
index bf527a74780..bf527a74780 100644
--- a/Master/texmf-dist/tex/context/sample/demo-xml.tex
+++ b/Master/texmf-dist/tex/context/sample/common/demo-xml.tex
diff --git a/Master/texmf-dist/tex/context/sample/douglas.tex b/Master/texmf-dist/tex/context/sample/common/douglas.tex
index 838c6d24d26..838c6d24d26 100644
--- a/Master/texmf-dist/tex/context/sample/douglas.tex
+++ b/Master/texmf-dist/tex/context/sample/common/douglas.tex
diff --git a/Master/texmf-dist/tex/context/sample/hacker.jpg b/Master/texmf-dist/tex/context/sample/common/hacker.jpg
index cbc53a7dee5..cbc53a7dee5 100644
--- a/Master/texmf-dist/tex/context/sample/hacker.jpg
+++ b/Master/texmf-dist/tex/context/sample/common/hacker.jpg
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/hawking.tex b/Master/texmf-dist/tex/context/sample/common/hawking.tex
index e0e0cccd242..e0e0cccd242 100644
--- a/Master/texmf-dist/tex/context/sample/hawking.tex
+++ b/Master/texmf-dist/tex/context/sample/common/hawking.tex
diff --git a/Master/texmf-dist/tex/context/sample/khatt-ar.tex b/Master/texmf-dist/tex/context/sample/common/khatt-ar.tex
index c9142641109..c9142641109 100644
--- a/Master/texmf-dist/tex/context/sample/khatt-ar.tex
+++ b/Master/texmf-dist/tex/context/sample/common/khatt-ar.tex
diff --git a/Master/texmf-dist/tex/context/sample/khatt-en.tex b/Master/texmf-dist/tex/context/sample/common/khatt-en.tex
index f994513e71f..f994513e71f 100644
--- a/Master/texmf-dist/tex/context/sample/khatt-en.tex
+++ b/Master/texmf-dist/tex/context/sample/common/khatt-en.tex
diff --git a/Master/texmf-dist/tex/context/sample/knuth.tex b/Master/texmf-dist/tex/context/sample/common/knuth.tex
index 30b6310ccd4..30b6310ccd4 100644
--- a/Master/texmf-dist/tex/context/sample/knuth.tex
+++ b/Master/texmf-dist/tex/context/sample/common/knuth.tex
diff --git a/Master/texmf-dist/tex/context/sample/linden.tex b/Master/texmf-dist/tex/context/sample/common/linden.tex
index 9aaccc5e93f..9aaccc5e93f 100644
--- a/Master/texmf-dist/tex/context/sample/linden.tex
+++ b/Master/texmf-dist/tex/context/sample/common/linden.tex
diff --git a/Master/texmf-dist/tex/context/sample/lorem.tex b/Master/texmf-dist/tex/context/sample/common/lorem.tex
index 0132f659f0a..0132f659f0a 100644
--- a/Master/texmf-dist/tex/context/sample/lorem.tex
+++ b/Master/texmf-dist/tex/context/sample/common/lorem.tex
diff --git a/Master/texmf-dist/tex/context/sample/materie.tex b/Master/texmf-dist/tex/context/sample/common/materie.tex
index 5e259718678..5e259718678 100644
--- a/Master/texmf-dist/tex/context/sample/materie.tex
+++ b/Master/texmf-dist/tex/context/sample/common/materie.tex
diff --git a/Master/texmf-dist/tex/context/sample/common/mill.png b/Master/texmf-dist/tex/context/sample/common/mill.png
new file mode 100644
index 00000000000..9a1bf14e817
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/mill.png
Binary files differ
diff --git a/Master/texmf-dist/tex/context/sample/montgomery.tex b/Master/texmf-dist/tex/context/sample/common/montgomery.tex
index a38357ea4ab..a38357ea4ab 100644
--- a/Master/texmf-dist/tex/context/sample/montgomery.tex
+++ b/Master/texmf-dist/tex/context/sample/common/montgomery.tex
diff --git a/Master/texmf-dist/tex/context/sample/quevedo-es.tex b/Master/texmf-dist/tex/context/sample/common/quevedo-es.tex
index 166b0328fb8..166b0328fb8 100644
--- a/Master/texmf-dist/tex/context/sample/quevedo-es.tex
+++ b/Master/texmf-dist/tex/context/sample/common/quevedo-es.tex
diff --git a/Master/texmf-dist/tex/context/sample/reich.tex b/Master/texmf-dist/tex/context/sample/common/reich.tex
index db9d4404f59..db9d4404f59 100644
--- a/Master/texmf-dist/tex/context/sample/reich.tex
+++ b/Master/texmf-dist/tex/context/sample/common/reich.tex
diff --git a/Master/texmf-dist/tex/context/sample/sample.tex b/Master/texmf-dist/tex/context/sample/common/sample.tex
index ef31153a112..ef31153a112 100644
--- a/Master/texmf-dist/tex/context/sample/sample.tex
+++ b/Master/texmf-dist/tex/context/sample/common/sample.tex
diff --git a/Master/texmf-dist/tex/context/sample/samples.bib b/Master/texmf-dist/tex/context/sample/common/samples.bib
index e54092aae83..e54092aae83 100644
--- a/Master/texmf-dist/tex/context/sample/samples.bib
+++ b/Master/texmf-dist/tex/context/sample/common/samples.bib
diff --git a/Master/texmf-dist/tex/context/sample/samples.tex b/Master/texmf-dist/tex/context/sample/common/samples.tex
index 6e217a59251..0201ab318a7 100644
--- a/Master/texmf-dist/tex/context/sample/samples.tex
+++ b/Master/texmf-dist/tex/context/sample/common/samples.tex
@@ -19,31 +19,35 @@ used in testing bibliographic references and citations.
\NC douglas.tex \NC Douglas R. Hofstadter \NC \NC \NR
\NC dawkins.tex \NC Dawkins \NC \NC \NR
\NC ward.tex \NC Peter D. Ward \NC The Life and Death of Planet Earth \NC \NR
-\NC zapf.tex \NC Hermann Zapf \NC About micro-typography and the hz-program, \endgraf
- Electronic Publishing, vol. 6(3), \endgraf
+\NC zapf.tex \NC Hermann Zapf \NC About micro-typography and the hz-program,
+ Electronic Publishing, vol. 6(3),
283-288 (September 1993) \NC \NR
-\NC bryson.tex \NC Bill Bryson \NC A Short History of Nearly Everything, \endgraf
+\NC bryson.tex \NC Bill Bryson \NC A Short History of Nearly Everything,
Random House, 2003 \NC \NR
-\NC davis.tex \NC Kenneth C. Davis \NC Don't Know Much About History, \endgraf
+\NC davis.tex \NC Kenneth C. Davis \NC Don't Know Much About History,
Everything You Need to Know About American
- History but Never Learned, \endgraf
+ History but Never Learned,
HarperCollins, 2003 \NC \NR
\NC thuan.tex \NC Trinh Xuan Thuan \NC Chaos and Harmony, Perspectives on Scientific
- Revolutions of the Twentieth Century, \endgraf
+ Revolutions of the Twentieth Century,
Oxford University Press, 2001 \NC \NR
\NC hawking.tex \NC Steve W. Hawking \NC The Universe in a Nutshell, Bantam Books
Random House, 2001 \NC \NR
\NC linden.tex \NC Eugene Linden \NC The Winds of Change, Climate, Weather, and the
- Destruction of Civilizations, \endgraf
+ Destruction of Civilizations,
Simon \& Schuster, 2006, p.106 \NC \NR
-\NC weisman.tex \NC Alan Weisman \NC The World Without Us, \endgraf
+\NC weisman.tex \NC Alan Weisman \NC The World Without Us,
Thomas Dunne Books, 2007, p.160 \NC \NR
-\NC montgomery.tex \NC David R Montgomery \NC Dirt, The Erosion of Civilizations, \endgraf
+\NC montgomery.tex \NC David R Montgomery \NC Dirt, The Erosion of Civilizations,
University of California Press, 2007, p.199 \NC \NR
-\NC carrol.tex \NC Sean B. Carrol \NC The Making of the Fittest, \endgraf
+\NC carrol.tex \NC Sean B. Carrol \NC The Making of the Fittest,
Quercus, London, 2006 \NC \NR
-%NC jojomayer.tex \NC Jojo Mayer \NC Between Zero & One, www.youtube.com/watch?v=mSj298iBjBY \NC \NR
-%NC schwarzenegger.tex \NC Arnold Schwarzenegger \NC Several place on the World Wide Web. \NC \NR
+%NC schwarzenegger.tex \NC Arnold Schwarzenegger \NC Several places on the World Wide Web. \NC \NR
+\NC carey.tex \NC Nessa Carey \NC The Epigenetics Revolution,
+ Columbia University Press, 2012, p. 195 \NC \NR
+\NC waltham.tex \NC David Waltham \NC Lucky Planet, why earth is exceptional and what that
+ means for life in the universe,
+ Icon Books Ltd, London, 2014, p. 168 \NC \NR
\stoptabulate
% Tufte: This quote will always produce hyphenated text, apart from the content,
@@ -69,7 +73,7 @@ used in testing bibliographic references and citations.
% Dirt, The Erosion of Civilizations: one of those books that you buy immediately after
% reading a few sentences. Also one of those books that every politician should read.
-% The Making of the Fittest: nice sample for color ans subsentence testing. A very
+% The Making of the Fittest: nice sample for color and subsentence testing. A very
% readable book but unfortunately it has inter-character spacing.
% The Schwarzenegger letter was originally typeset at a width equivalent to 16.1cm in
diff --git a/Master/texmf-dist/tex/context/sample/spider.eps b/Master/texmf-dist/tex/context/sample/common/spider.eps
index ecaafb8474f..ecaafb8474f 100644
--- a/Master/texmf-dist/tex/context/sample/spider.eps
+++ b/Master/texmf-dist/tex/context/sample/common/spider.eps
diff --git a/Master/texmf-dist/tex/context/sample/thuan.tex b/Master/texmf-dist/tex/context/sample/common/thuan.tex
index e38c58489d0..e38c58489d0 100644
--- a/Master/texmf-dist/tex/context/sample/thuan.tex
+++ b/Master/texmf-dist/tex/context/sample/common/thuan.tex
diff --git a/Master/texmf-dist/tex/context/sample/tufte.tex b/Master/texmf-dist/tex/context/sample/common/tufte.tex
index 1b54d278055..1b54d278055 100644
--- a/Master/texmf-dist/tex/context/sample/tufte.tex
+++ b/Master/texmf-dist/tex/context/sample/common/tufte.tex
diff --git a/Master/texmf-dist/tex/context/sample/common/waltham.tex b/Master/texmf-dist/tex/context/sample/common/waltham.tex
new file mode 100644
index 00000000000..09bb8839d7c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/common/waltham.tex
@@ -0,0 +1,10 @@
+None of these properties have values set, as far as we know, by fundamental laws
+of nature, and quite moderate alterations produce imagined universes with
+substantially less complexity than our own |=| universes where galaxies, stars,
+planets, molecules, atoms or even nuclei cannot exist. Life is, if nothing else,
+complexity|-|unmatched and it stretches credulity to suggest that universes that
+can't even make atoms could somehow generate life. It's conceivable that the
+values of physical constants in our Universe are the only possible, but the
+alternative explanation, that multiple universes are actually realised in nature
+and that we necessarily live in one of the few where the constants are \quote
+{just right}, is surely a fascinating idea worth pursuing.
diff --git a/Master/texmf-dist/tex/context/sample/ward.tex b/Master/texmf-dist/tex/context/sample/common/ward.tex
index f73b62a58fa..f73b62a58fa 100644
--- a/Master/texmf-dist/tex/context/sample/ward.tex
+++ b/Master/texmf-dist/tex/context/sample/common/ward.tex
diff --git a/Master/texmf-dist/tex/context/sample/weisman.tex b/Master/texmf-dist/tex/context/sample/common/weisman.tex
index 7526d407a44..7526d407a44 100644
--- a/Master/texmf-dist/tex/context/sample/weisman.tex
+++ b/Master/texmf-dist/tex/context/sample/common/weisman.tex
diff --git a/Master/texmf-dist/tex/context/sample/zapf.tex b/Master/texmf-dist/tex/context/sample/common/zapf.tex
index 4029ec6ce16..4029ec6ce16 100644
--- a/Master/texmf-dist/tex/context/sample/zapf.tex
+++ b/Master/texmf-dist/tex/context/sample/common/zapf.tex
diff --git a/Master/texmf-dist/tex/context/test/context-test.tex b/Master/texmf-dist/tex/context/test/mkiv/context-test.tex
index 3cf002baf24..3cf002baf24 100644
--- a/Master/texmf-dist/tex/context/test/context-test.tex
+++ b/Master/texmf-dist/tex/context/test/mkiv/context-test.tex
diff --git a/Master/texmf-dist/tex/context/test/pdf-a1a-2005.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-a1a-2005.mkiv
index 8f79d3f337a..8f79d3f337a 100644
--- a/Master/texmf-dist/tex/context/test/pdf-a1a-2005.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-a1a-2005.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-a1b-2005.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-a1b-2005.mkiv
index bc970c3f9d8..bc970c3f9d8 100644
--- a/Master/texmf-dist/tex/context/test/pdf-a1b-2005.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-a1b-2005.mkiv
diff --git a/Master/texmf-dist/tex/context/test/mkiv/pdf-ua.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-ua.mkiv
new file mode 100644
index 00000000000..e048b971706
--- /dev/null
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-ua.mkiv
@@ -0,0 +1,44 @@
+\setupinteraction
+ [title=TITLE,
+ subtitle=SUBTITLE,
+ author=AUTHOR,
+ keyword={{KEYWORD1, KEYWORD2}, KEYWORD3}]
+
+\setupbackend
+ [format={pdf/ua-1},
+% profile=srgb.icc, % can't validate PDF/A-3, so this only blows up the PDF
+% intent={ISO Coated v2 300\letterpercent\space (ECI)},
+ level=0]
+
+\setuptagging[state=start] % should be set automatically, if 'tagging = true'
+
+\setuplanguage[en]
+
+% DisplayDocTitle key is not set to true
+%
+% [from PDFUA-Reference-09_(English-invoice).pdf]
+% 129 0 obj
+% <</Type/Catalog/Pages 1 0 R/ViewerPreferences<</DisplayDocTitle true>>/PageMode/UseOutlines/Outlines 43 0 R/Lang(en)/StructTreeRoot 2 0 R/MarkInfo<</Marked true/Suspects false>>/OutputIntents[ 128 0 R]/Metadata 127 0 R>>
+% endobj
+% this may interfer with other ViewerPreferences settings?
+\startluacode
+ lpdf.addtocatalog("ViewerPreferences",lpdf.dictionary{DisplayDocTitle = true})
+\stopluacode
+
+\def\tag#1{\quote{\tt#1}}
+
+\starttext
+ Warning: This document may contain errors and traces of hazelnuts.
+
+ \blank[big]
+
+ \startMPcode
+ fill fullcircle scaled 3cm withcolor red;
+ \stopMPcode
+
+ \blank[big]
+
+ The \quote{Matterhorn Protocol} gives a condensed overview of the possible failure conditions
+ and the used structure types (p.4).\par
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/test/pdf-x-common.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x-common.mkiv
index 463a60e71ff..463a60e71ff 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x-common.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x-common.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x1a-2001.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2001.mkiv
index f1c5ef53105..f1c5ef53105 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x1a-2001.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2001.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x1a-2003.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2003.mkiv
index 7fbec5acbf4..7fbec5acbf4 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x1a-2003.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x1a-2003.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x3-2002.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2002.mkiv
index be757212e0b..be757212e0b 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x3-2002.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2002.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x3-2003.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2003.mkiv
index cbebe1033f4..cbebe1033f4 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x3-2003.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x3-2003.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x4.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x4.mkiv
index 062de3b3420..062de3b3420 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x4.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x4.mkiv
diff --git a/Master/texmf-dist/tex/context/test/pdf-x4p.mkiv b/Master/texmf-dist/tex/context/test/mkiv/pdf-x4p.mkiv
index bfee0b2383e..bfee0b2383e 100644
--- a/Master/texmf-dist/tex/context/test/pdf-x4p.mkiv
+++ b/Master/texmf-dist/tex/context/test/mkiv/pdf-x4p.mkiv
diff --git a/Master/texmf-dist/tex/context/user/cont-sys.rme b/Master/texmf-dist/tex/context/user/mkii/cont-sys.rme
index fa438a78d4f..fa438a78d4f 100644
--- a/Master/texmf-dist/tex/context/user/cont-sys.rme
+++ b/Master/texmf-dist/tex/context/user/mkii/cont-sys.rme
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-chr.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-chr.lua
new file mode 100644
index 00000000000..4329256f2d8
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-chr.lua
@@ -0,0 +1,758 @@
+-- automatically generated from context data
+
+characters = characters or { }
+
+-- dummies
+
+characters.blockrange = { }
+
+-- classifiers needed for analysis
+
+characters.classifiers={
+ [1536]=4,
+ [1537]=4,
+ [1538]=4,
+ [1539]=4,
+ [1540]=4,
+ [1541]=4,
+ [1542]=6,
+ [1543]=6,
+ [1544]=4,
+ [1545]=6,
+ [1546]=6,
+ [1547]=4,
+ [1548]=6,
+ [1549]=6,
+ [1550]=6,
+ [1551]=6,
+ [1552]=5,
+ [1553]=5,
+ [1554]=5,
+ [1555]=5,
+ [1556]=5,
+ [1557]=5,
+ [1558]=5,
+ [1559]=5,
+ [1560]=5,
+ [1561]=5,
+ [1562]=5,
+ [1563]=6,
+ [1564]=6,
+ [1566]=6,
+ [1567]=6,
+ [1568]=2,
+ [1569]=4,
+ [1570]=3,
+ [1571]=3,
+ [1572]=3,
+ [1573]=3,
+ [1574]=2,
+ [1575]=3,
+ [1576]=2,
+ [1577]=3,
+ [1578]=2,
+ [1579]=2,
+ [1580]=2,
+ [1581]=2,
+ [1582]=2,
+ [1583]=3,
+ [1584]=3,
+ [1585]=3,
+ [1586]=3,
+ [1587]=2,
+ [1588]=2,
+ [1589]=2,
+ [1590]=2,
+ [1591]=2,
+ [1592]=2,
+ [1593]=2,
+ [1594]=2,
+ [1595]=2,
+ [1596]=2,
+ [1597]=2,
+ [1598]=2,
+ [1599]=2,
+ [1600]=2,
+ [1601]=2,
+ [1602]=2,
+ [1603]=2,
+ [1604]=2,
+ [1605]=2,
+ [1606]=2,
+ [1607]=2,
+ [1608]=3,
+ [1609]=2,
+ [1610]=2,
+ [1611]=5,
+ [1612]=5,
+ [1613]=5,
+ [1614]=5,
+ [1615]=5,
+ [1616]=5,
+ [1617]=5,
+ [1618]=5,
+ [1619]=5,
+ [1620]=5,
+ [1621]=5,
+ [1622]=5,
+ [1623]=5,
+ [1624]=5,
+ [1625]=5,
+ [1626]=5,
+ [1627]=5,
+ [1628]=5,
+ [1629]=5,
+ [1630]=5,
+ [1631]=5,
+ [1632]=6,
+ [1633]=6,
+ [1634]=6,
+ [1635]=6,
+ [1636]=6,
+ [1637]=6,
+ [1638]=6,
+ [1639]=6,
+ [1640]=6,
+ [1641]=6,
+ [1642]=6,
+ [1643]=6,
+ [1644]=6,
+ [1645]=6,
+ [1646]=2,
+ [1647]=2,
+ [1648]=5,
+ [1649]=3,
+ [1650]=3,
+ [1651]=3,
+ [1652]=4,
+ [1653]=3,
+ [1654]=3,
+ [1655]=3,
+ [1656]=2,
+ [1657]=2,
+ [1658]=2,
+ [1659]=2,
+ [1660]=2,
+ [1661]=2,
+ [1662]=2,
+ [1663]=2,
+ [1664]=2,
+ [1665]=2,
+ [1666]=2,
+ [1667]=2,
+ [1668]=2,
+ [1669]=2,
+ [1670]=2,
+ [1671]=2,
+ [1672]=3,
+ [1673]=3,
+ [1674]=3,
+ [1675]=3,
+ [1676]=3,
+ [1677]=3,
+ [1678]=3,
+ [1679]=3,
+ [1680]=3,
+ [1681]=3,
+ [1682]=3,
+ [1683]=3,
+ [1684]=3,
+ [1685]=3,
+ [1686]=3,
+ [1687]=3,
+ [1688]=3,
+ [1689]=3,
+ [1690]=2,
+ [1691]=2,
+ [1692]=2,
+ [1693]=2,
+ [1694]=2,
+ [1695]=2,
+ [1696]=2,
+ [1697]=2,
+ [1698]=2,
+ [1699]=2,
+ [1700]=2,
+ [1701]=2,
+ [1702]=2,
+ [1703]=2,
+ [1704]=2,
+ [1705]=2,
+ [1706]=2,
+ [1707]=2,
+ [1708]=2,
+ [1709]=2,
+ [1710]=2,
+ [1711]=2,
+ [1712]=2,
+ [1713]=2,
+ [1714]=2,
+ [1715]=2,
+ [1716]=2,
+ [1717]=2,
+ [1718]=2,
+ [1719]=2,
+ [1720]=2,
+ [1721]=2,
+ [1722]=2,
+ [1723]=2,
+ [1724]=2,
+ [1725]=2,
+ [1726]=2,
+ [1727]=2,
+ [1728]=3,
+ [1729]=2,
+ [1730]=2,
+ [1731]=3,
+ [1732]=3,
+ [1733]=3,
+ [1734]=3,
+ [1735]=3,
+ [1736]=3,
+ [1737]=3,
+ [1738]=3,
+ [1739]=3,
+ [1740]=2,
+ [1741]=3,
+ [1742]=2,
+ [1743]=3,
+ [1744]=2,
+ [1745]=2,
+ [1746]=3,
+ [1747]=3,
+ [1748]=6,
+ [1749]=3,
+ [1750]=5,
+ [1751]=5,
+ [1752]=5,
+ [1753]=5,
+ [1754]=5,
+ [1755]=5,
+ [1756]=5,
+ [1757]=4,
+ [1758]=6,
+ [1759]=5,
+ [1760]=5,
+ [1761]=5,
+ [1762]=5,
+ [1763]=5,
+ [1764]=5,
+ [1765]=6,
+ [1766]=6,
+ [1767]=5,
+ [1768]=5,
+ [1769]=6,
+ [1770]=5,
+ [1771]=5,
+ [1772]=5,
+ [1773]=5,
+ [1774]=3,
+ [1775]=3,
+ [1776]=6,
+ [1777]=6,
+ [1778]=6,
+ [1779]=6,
+ [1780]=6,
+ [1781]=6,
+ [1782]=6,
+ [1783]=6,
+ [1784]=6,
+ [1785]=6,
+ [1786]=2,
+ [1787]=2,
+ [1788]=2,
+ [1789]=6,
+ [1790]=6,
+ [1791]=2,
+ [1792]=6,
+ [1793]=6,
+ [1794]=6,
+ [1795]=6,
+ [1796]=6,
+ [1797]=6,
+ [1798]=6,
+ [1799]=6,
+ [1800]=6,
+ [1801]=6,
+ [1802]=6,
+ [1803]=6,
+ [1804]=6,
+ [1805]=6,
+ [1807]=6,
+ [1808]=3,
+ [1809]=5,
+ [1810]=2,
+ [1811]=2,
+ [1812]=2,
+ [1813]=3,
+ [1814]=3,
+ [1815]=3,
+ [1816]=3,
+ [1817]=3,
+ [1818]=2,
+ [1819]=2,
+ [1820]=2,
+ [1821]=2,
+ [1822]=3,
+ [1823]=2,
+ [1824]=2,
+ [1825]=2,
+ [1826]=2,
+ [1827]=2,
+ [1828]=2,
+ [1829]=2,
+ [1830]=2,
+ [1831]=2,
+ [1832]=3,
+ [1833]=2,
+ [1834]=3,
+ [1835]=2,
+ [1836]=3,
+ [1837]=2,
+ [1838]=2,
+ [1839]=3,
+ [1840]=5,
+ [1841]=5,
+ [1842]=5,
+ [1843]=5,
+ [1844]=5,
+ [1845]=5,
+ [1846]=5,
+ [1847]=5,
+ [1848]=5,
+ [1849]=5,
+ [1850]=5,
+ [1851]=5,
+ [1852]=5,
+ [1853]=5,
+ [1854]=5,
+ [1855]=5,
+ [1856]=5,
+ [1857]=5,
+ [1858]=5,
+ [1859]=5,
+ [1860]=5,
+ [1861]=5,
+ [1862]=5,
+ [1863]=5,
+ [1864]=5,
+ [1865]=5,
+ [1866]=5,
+ [1869]=3,
+ [1870]=2,
+ [1871]=2,
+ [1872]=2,
+ [1873]=2,
+ [1874]=2,
+ [1875]=2,
+ [1876]=2,
+ [1877]=2,
+ [1878]=2,
+ [1879]=2,
+ [1880]=2,
+ [1881]=3,
+ [1882]=3,
+ [1883]=3,
+ [1884]=2,
+ [1885]=2,
+ [1886]=2,
+ [1887]=2,
+ [1888]=2,
+ [1889]=2,
+ [1890]=2,
+ [1891]=2,
+ [1892]=2,
+ [1893]=2,
+ [1894]=2,
+ [1895]=2,
+ [1896]=2,
+ [1897]=2,
+ [1898]=2,
+ [1899]=3,
+ [1900]=3,
+ [1901]=2,
+ [1902]=2,
+ [1903]=2,
+ [1904]=2,
+ [1905]=3,
+ [1906]=2,
+ [1907]=3,
+ [1908]=3,
+ [1909]=2,
+ [1910]=2,
+ [1911]=2,
+ [1912]=3,
+ [1913]=3,
+ [1914]=2,
+ [1915]=2,
+ [1916]=2,
+ [1917]=2,
+ [1918]=2,
+ [1919]=2,
+ [1984]=6,
+ [1985]=6,
+ [1986]=6,
+ [1987]=6,
+ [1988]=6,
+ [1989]=6,
+ [1990]=6,
+ [1991]=6,
+ [1992]=6,
+ [1993]=6,
+ [1994]=2,
+ [1995]=2,
+ [1996]=2,
+ [1997]=2,
+ [1998]=2,
+ [1999]=2,
+ [2000]=2,
+ [2001]=2,
+ [2002]=2,
+ [2003]=2,
+ [2004]=2,
+ [2005]=2,
+ [2006]=2,
+ [2007]=2,
+ [2008]=2,
+ [2009]=2,
+ [2010]=2,
+ [2011]=2,
+ [2012]=2,
+ [2013]=2,
+ [2014]=2,
+ [2015]=2,
+ [2016]=2,
+ [2017]=2,
+ [2018]=2,
+ [2019]=2,
+ [2020]=2,
+ [2021]=2,
+ [2022]=2,
+ [2023]=2,
+ [2024]=2,
+ [2025]=2,
+ [2026]=2,
+ [2027]=5,
+ [2028]=5,
+ [2029]=5,
+ [2030]=5,
+ [2031]=5,
+ [2032]=5,
+ [2033]=5,
+ [2034]=5,
+ [2035]=5,
+ [2036]=6,
+ [2037]=6,
+ [2038]=6,
+ [2039]=6,
+ [2040]=6,
+ [2041]=6,
+ [2042]=2,
+ [2112]=3,
+ [2113]=2,
+ [2114]=2,
+ [2115]=2,
+ [2116]=2,
+ [2117]=2,
+ [2118]=3,
+ [2119]=3,
+ [2120]=2,
+ [2121]=3,
+ [2122]=2,
+ [2123]=2,
+ [2124]=2,
+ [2125]=2,
+ [2126]=2,
+ [2127]=2,
+ [2128]=2,
+ [2129]=2,
+ [2130]=2,
+ [2131]=2,
+ [2132]=3,
+ [2133]=2,
+ [2134]=4,
+ [2135]=4,
+ [2136]=4,
+ [2208]=2,
+ [2209]=2,
+ [2210]=2,
+ [2211]=2,
+ [2212]=2,
+ [2213]=2,
+ [2214]=2,
+ [2215]=2,
+ [2216]=2,
+ [2217]=2,
+ [2218]=3,
+ [2219]=3,
+ [2220]=3,
+ [2221]=4,
+ [2222]=3,
+ [2223]=2,
+ [2224]=2,
+ [2225]=3,
+ [2226]=3,
+ [2227]=2,
+ [2228]=2,
+ [6150]=4,
+ [6151]=2,
+ [6154]=2,
+ [6158]=4,
+ [6176]=2,
+ [6177]=2,
+ [6178]=2,
+ [6179]=2,
+ [6180]=2,
+ [6181]=2,
+ [6182]=2,
+ [6183]=2,
+ [6184]=2,
+ [6185]=2,
+ [6186]=2,
+ [6187]=2,
+ [6188]=2,
+ [6189]=2,
+ [6190]=2,
+ [6191]=2,
+ [6192]=2,
+ [6193]=2,
+ [6194]=2,
+ [6195]=2,
+ [6196]=2,
+ [6197]=2,
+ [6198]=2,
+ [6199]=2,
+ [6200]=2,
+ [6201]=2,
+ [6202]=2,
+ [6203]=2,
+ [6204]=2,
+ [6205]=2,
+ [6206]=2,
+ [6207]=2,
+ [6208]=2,
+ [6209]=2,
+ [6210]=2,
+ [6211]=2,
+ [6212]=2,
+ [6213]=2,
+ [6214]=2,
+ [6215]=2,
+ [6216]=2,
+ [6217]=2,
+ [6218]=2,
+ [6219]=2,
+ [6220]=2,
+ [6221]=2,
+ [6222]=2,
+ [6223]=2,
+ [6224]=2,
+ [6225]=2,
+ [6226]=2,
+ [6227]=2,
+ [6228]=2,
+ [6229]=2,
+ [6230]=2,
+ [6231]=2,
+ [6232]=2,
+ [6233]=2,
+ [6234]=2,
+ [6235]=2,
+ [6236]=2,
+ [6237]=2,
+ [6238]=2,
+ [6239]=2,
+ [6240]=2,
+ [6241]=2,
+ [6242]=2,
+ [6243]=2,
+ [6244]=2,
+ [6245]=2,
+ [6246]=2,
+ [6247]=2,
+ [6248]=2,
+ [6249]=2,
+ [6250]=2,
+ [6251]=2,
+ [6252]=2,
+ [6253]=2,
+ [6254]=2,
+ [6255]=2,
+ [6256]=2,
+ [6257]=2,
+ [6258]=2,
+ [6259]=2,
+ [6260]=2,
+ [6261]=2,
+ [6262]=2,
+ [6263]=2,
+ [6272]=4,
+ [6273]=4,
+ [6274]=4,
+ [6275]=4,
+ [6276]=4,
+ [6277]=4,
+ [6278]=4,
+ [6279]=2,
+ [6280]=2,
+ [6281]=2,
+ [6282]=2,
+ [6283]=2,
+ [6284]=2,
+ [6285]=2,
+ [6286]=2,
+ [6287]=2,
+ [6288]=2,
+ [6289]=2,
+ [6290]=2,
+ [6291]=2,
+ [6292]=2,
+ [6293]=2,
+ [6294]=2,
+ [6295]=2,
+ [6296]=2,
+ [6297]=2,
+ [6298]=2,
+ [6299]=2,
+ [6300]=2,
+ [6301]=2,
+ [6302]=2,
+ [6303]=2,
+ [6304]=2,
+ [6305]=2,
+ [6306]=2,
+ [6307]=2,
+ [6308]=2,
+ [6309]=2,
+ [6310]=2,
+ [6311]=2,
+ [6312]=2,
+ [6314]=2,
+ [8204]=4,
+ [8205]=2,
+ [8294]=4,
+ [8295]=4,
+ [8296]=4,
+ [8297]=4,
+ [43072]=2,
+ [43073]=2,
+ [43074]=2,
+ [43075]=2,
+ [43076]=2,
+ [43077]=2,
+ [43078]=2,
+ [43079]=2,
+ [43080]=2,
+ [43081]=2,
+ [43082]=2,
+ [43083]=2,
+ [43084]=2,
+ [43085]=2,
+ [43086]=2,
+ [43087]=2,
+ [43088]=2,
+ [43089]=2,
+ [43090]=2,
+ [43091]=2,
+ [43092]=2,
+ [43093]=2,
+ [43094]=2,
+ [43095]=2,
+ [43096]=2,
+ [43097]=2,
+ [43098]=2,
+ [43099]=2,
+ [43100]=2,
+ [43101]=2,
+ [43102]=2,
+ [43103]=2,
+ [43104]=2,
+ [43105]=2,
+ [43106]=2,
+ [43107]=2,
+ [43108]=2,
+ [43109]=2,
+ [43110]=2,
+ [43111]=2,
+ [43112]=2,
+ [43113]=2,
+ [43114]=2,
+ [43115]=2,
+ [43116]=2,
+ [43117]=2,
+ [43118]=2,
+ [43119]=2,
+ [43120]=2,
+ [43121]=2,
+ [43122]=1,
+ [43123]=4,
+ [68288]=2,
+ [68289]=2,
+ [68290]=2,
+ [68291]=2,
+ [68292]=2,
+ [68293]=3,
+ [68294]=4,
+ [68295]=3,
+ [68296]=4,
+ [68297]=3,
+ [68298]=3,
+ [68299]=4,
+ [68300]=4,
+ [68301]=1,
+ [68302]=3,
+ [68303]=3,
+ [68304]=3,
+ [68305]=3,
+ [68306]=3,
+ [68307]=2,
+ [68308]=2,
+ [68309]=2,
+ [68310]=2,
+ [68311]=1,
+ [68312]=2,
+ [68313]=2,
+ [68314]=2,
+ [68315]=2,
+ [68316]=2,
+ [68317]=3,
+ [68318]=2,
+ [68319]=2,
+ [68320]=2,
+ [68321]=3,
+ [68322]=4,
+ [68323]=4,
+ [68324]=3,
+ [68331]=2,
+ [68332]=2,
+ [68333]=2,
+ [68334]=2,
+ [68335]=3,
+ [68480]=2,
+ [68481]=3,
+ [68482]=2,
+ [68483]=3,
+ [68484]=3,
+ [68485]=3,
+ [68486]=2,
+ [68487]=2,
+ [68488]=2,
+ [68489]=3,
+ [68490]=2,
+ [68491]=2,
+ [68492]=3,
+ [68493]=2,
+ [68494]=3,
+ [68495]=3,
+ [68496]=2,
+ [68497]=3,
+ [68521]=3,
+ [68522]=3,
+ [68523]=3,
+ [68524]=3,
+ [68525]=2,
+ [68526]=2,
+ [68527]=4,
+}
+
+-- done
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua
index c4d6536046a..2a68b1c180d 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-gen.lua
@@ -63,15 +63,19 @@ logs = {
}
callbacks = {
- register = function(n,f) return callback.register(n,f) end,
+ register = function(n,f)
+ return callback.register(n,f)
+ end,
}
-utilities = {
- storage = {
- allocate = function(t) return t or { } end,
- mark = function(t) return t or { } end,
- },
+utilities = utilities or { } utilities.storage = {
+ allocate = function(t)
+ return t or { }
+ end,
+ mark = function(t)
+ return t or { }
+ end,
}
characters = characters or {
@@ -88,12 +92,10 @@ local remapper = {
otf = "opentype fonts",
ttf = "truetype fonts",
ttc = "truetype fonts",
- dfont = "truetype fonts", -- "truetype dictionary",
cid = "cid maps",
cidmap = "cid maps",
- fea = "font feature files",
- pfa = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this!
- pfb = "type1 fonts", -- this is for Khaled, in ConTeXt we don't use this!
+ -- fea = "font feature files", -- no longer supported
+ pfb = "type1 fonts", -- needed for vector loading
afm = "afm",
}
@@ -355,12 +357,28 @@ end
--
+-- function table.setmetatableindex(t,f)
+-- if type(t) ~= "table" then
+-- f = f or t
+-- t = { }
+-- end
+-- setmetatable(t,{ __index = f })
+-- return t
+-- end
+
function table.setmetatableindex(t,f)
if type(t) ~= "table" then
- f = f or t
- t = { }
+ f, t = t, { }
+ end
+ local m = getmetatable(t)
+ if f == "table" then
+ f = function(t,k) local v = { } t[k] = v return v end
+ end
+ if m then
+ m.__index = f
+ else
+ setmetatable(t,{ __index = f })
end
- setmetatable(t,{ __index = f })
return t
end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua
index 1ec2895ba8f..e7b5ab24fc8 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-nod.lua
@@ -51,14 +51,23 @@ nodes = { }
nodes.pool = { }
nodes.handlers = { }
-local nodecodes = { } for k,v in next, node.types () do nodecodes[string.gsub(v,"_","")] = k end
-local whatcodes = { } for k,v in next, node.whatsits() do whatcodes[string.gsub(v,"_","")] = k end
-local glyphcodes = { [0] = "character", "glyph", "ligature", "ghost", "left", "right" }
-local disccodes = { [0] = "discretionary", "explicit", "automatic", "regular", "first", "second" }
+local nodecodes = { }
+local glyphcodes = node.subtypes("glyph")
+local disccodes = node.subtypes("disc")
+
+for k, v in next, node.types() do
+ v = string.gsub(v,"_","")
+ nodecodes[k] = v
+ nodecodes[v] = k
+end
+for i=0,#glyphcodes do
+ glyphcodes[glyphcodes[i]] = i
+end
+for i=0,#disccodes do
+ disccodes[disccodes[i]] = i
+end
nodes.nodecodes = nodecodes
-nodes.whatcodes = whatcodes
-nodes.whatsitcodes = whatcodes
nodes.glyphcodes = glyphcodes
nodes.disccodes = disccodes
@@ -137,7 +146,6 @@ nodes.slide = node.slide
nodes.vpack = node.vpack
nodes.first_glyph = node.first_glyph
-nodes.first_character = node.first_character
nodes.has_glyph = node.has_glyph or node.first_glyph
nodes.current_attr = node.current_attr
@@ -175,20 +183,71 @@ nodes.tonut = tonut
nuts.tonode = tonode
nuts.tonut = tonut
-
local getfield = direct.getfield
local setfield = direct.setfield
nuts.getfield = getfield
nuts.setfield = setfield
nuts.getnext = direct.getnext
+nuts.setnext = direct.setnext
nuts.getprev = direct.getprev
+nuts.setprev = direct.setprev
+nuts.getboth = direct.getboth
+nuts.setboth = direct.setboth
nuts.getid = direct.getid
-nuts.getattr = getfield
+nuts.getattr = direct.get_attribute or direct.has_attribute or getfield
nuts.setattr = setfield
nuts.getfont = direct.getfont
+nuts.setfont = direct.setfont
nuts.getsubtype = direct.getsubtype
+nuts.setsubtype = direct.setsubtype or function(n,s) setfield(n,"subtype",s) end
nuts.getchar = direct.getchar
+nuts.setchar = direct.setchar
+nuts.getdisc = direct.getdisc
+nuts.setdisc = direct.setdisc
+nuts.setlink = direct.setlink
+nuts.getlist = direct.getlist
+nuts.setlist = direct.setlist or function(n,l) setfield(n,"list",l) end
+nuts.getleader = direct.getleader
+nuts.setleader = direct.setleader or function(n,l) setfield(n,"leader",l) end
+
+if not direct.is_glyph then
+ local getchar = direct.getchar
+ local getid = direct.getid
+ local getfont = direct.getfont
+ local glyph_code = nodes.nodecodes.glyph
+ function direct.is_glyph(n,f)
+ local id = getid(n)
+ if id == glyph_code then
+ if f and getfont(n) == f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil, id
+ end
+ end
+ function direct.is_char(n,f)
+ local id = getid(n)
+ if id == glyph_code then
+ if getsubtype(n) >= 256 then
+ return false
+ elseif f and getfont(n) == f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil, id
+ end
+ end
+end
+
+nuts.ischar = direct.is_char
+nuts.is_char = direct.is_char
+nuts.isglyph = direct.is_glyph
+nuts.is_glyph = direct.is_glyph
nuts.insert_before = direct.insert_before
nuts.insert_after = direct.insert_after
@@ -203,6 +262,9 @@ nuts.is_node = direct.is_node
nuts.end_of_math = direct.end_of_math
nuts.traverse = direct.traverse
nuts.traverse_id = direct.traverse_id
+nuts.traverse_char = direct.traverse_char
+nuts.ligaturing = direct.ligaturing
+nuts.kerning = direct.kerning
nuts.getprop = nuts.getattr
nuts.setprop = nuts.setattr
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-prepare.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-prepare.tex
new file mode 100644
index 00000000000..105226440ad
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics-prepare.tex
@@ -0,0 +1,90 @@
+%D \module
+%D [ file=luatex-fonts-prepare,
+%D version=2006.03.18,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Generate data for generic,
+%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 generates a few resources needed for generic font processing. This
+%D is needed because we don't want to load the (mostly not used in generic) data
+%D files.
+
+\startluacode
+
+-- dofile("t:/sources/char-ini.lua")
+-- dofile("t:/sources/char-def.lua")
+
+local chardata = characters.data
+
+local s_init = 1 local s_rphf = 7
+local s_medi = 2 local s_half = 8
+local s_fina = 3 local s_pref = 9
+local s_isol = 4 local s_blwf = 10
+local s_mark = 5 local s_pstf = 11
+local s_rest = 6
+
+local mappers = {
+ l = s_init, -- left
+ d = s_medi, -- double
+ c = s_medi, -- joiner
+ r = s_fina, -- right
+ u = s_isol, -- nonjoiner
+}
+
+local first_arabic, last_arabic = characters.blockrange("arabic")
+local first_syriac, last_syriac = characters.blockrange("syriac")
+local first_mandiac, last_mandiac = characters.blockrange("mandiac")
+local first_nko, last_nko = characters.blockrange("nko")
+
+local classifiers = { }
+
+for k, c in next, chardata do
+ if k > 0 then
+ local c = chardata[k]
+ if c then
+ local arabic = c.arabic
+ if arabic then
+ classifiers[k] = mappers[arabic]
+ elseif k >= first_arabic and k <= last_arabic or k >= first_syriac and k <= last_syriac or
+ k >= first_mandiac and k <= last_mandiac or k >= first_nko and k <= last_nko then
+ if c.category == "mn" then
+ classifiers[k] = s_mark
+ else
+ classifiers[k] = s_rest
+ end
+ end
+ end
+ end
+end
+
+local template = string.formatters [ [[
+-- automatically generated from context data
+
+characters = characters or { }
+
+-- dummies
+
+characters.blockrange = { }
+
+-- classifiers needed for analysis
+
+%s
+
+-- done
+]] ]
+
+io.savedata("luatex-basics-chr.lua",template(
+ table.serialize(classifiers,"characters.classifiers")
+))
+
+\stopluacode
+
+\startTEXpage[offset=10pt]
+ \tttf generated file: luatex-basics-chr.lua
+\stopTEXpage
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics.tex
index abe49897016..1180c68e6c5 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-basics.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-basics.tex
@@ -20,4 +20,74 @@
{\global\advance\lastallocatedattribute 1
\attributedef#1\lastallocatedattribute}
+% maybe we will have luatex-basics.lua some day for instance when more
+% (pdf) primitives have moved to macros)
+
+\directlua {
+
+ gadgets = gadgets or { } % reserved namespace
+
+ gadgets.functions = { }
+ local registered = {}
+
+ function gadgets.functions.reverve()
+ local numb = newtoken.scan_int()
+ local name = newtoken.scan_string()
+ local okay = string.gsub(name,"[\string\\ ]","")
+ registered[okay] = numb
+ texio.write_nl("reserving lua function '"..okay.."' with number "..numb)
+ end
+
+ function gadgets.functions.register(name,f)
+ local okay = string.gsub(name,"[\string\\ ]","")
+ local numb = registered[okay]
+ if numb then
+ texio.write_nl("registering lua function '"..okay.."' with number "..numb)
+ lua.get_functions_table()[numb] = f
+ else
+ texio.write_nl("lua function '"..okay.."' is not reserved")
+ end
+ end
+
+}
+
+\newcount\lastallocatedluafunction
+
+\def\newluafunction#1%
+ {\ifdefined#1\else
+ \global\advance\lastallocatedluafunction 1
+ \global\chardef#1\lastallocatedluafunction
+ \directlua{gadgets.functions.reserve()}#1{\detokenize{#1}}%
+ \fi}
+
+% an example of usage (if we ever support it it will go to the plain gadgets module):
+%
+% \directlua {
+%
+% local cct = nil
+% local chr = nil
+%
+% gadgets.functions.register("UcharcatLuaOne",function()
+% chr = newtoken.scan_int()
+% cct = tex.getcatcode(chr)
+% tex.setcatcode(chr,newtoken.scan_int())
+% tex.sprint(unicode.utf8.char(chr))
+% end)
+%
+% gadgets.functions.register("UcharcatLuaTwo",function()
+% tex.setcatcode(chr,cct)
+% end)
+%
+% }
+%
+% \def\Ucharcat
+% {\expandafter\expandafter\expandafter\luafunction
+% \expandafter\expandafter\expandafter\UcharcatLuaTwo
+% \luafunction\UcharcatLuaOne}
+%
+% A:\the\catcode65:\Ucharcat 65 11:A:\the\catcode65\par
+% A:\the\catcode65:\Ucharcat 65 5:A:\the\catcode65\par
+% A:\the\catcode65:\Ucharcat 65 11:A:\the\catcode65\par
+
+
\endinput
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-cbk.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-cbk.lua
deleted file mode 100644
index ce19c8811e9..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-cbk.lua
+++ /dev/null
@@ -1,159 +0,0 @@
-if not modules then modules = { } end modules ['luatex-fonts-cbk'] = {
- version = 1.001,
- comment = "companion to luatex-*.tex",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
-
-local fonts = fonts
-local nodes = nodes
-
--- Fonts: (might move to node-gef.lua)
-
-local traverse_id = node.traverse_id
-local glyph_code = nodes.nodecodes.glyph
-local disc_code = nodes.nodecodes.disc
-
--- from now on we apply ligaturing and kerning here because it might interfere with complex
--- opentype discretionary handling where the base ligature pass expect some weird extra
--- pointers (which then confuse the tail slider that has some checking built in)
-
-local ligaturing = node.ligaturing
-local kerning = node.kerning
-
-local basepass = true
-
-local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning = nil end
-local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning = nil end
-
-function node.ligaturing(...)
- if basepass and l_warning then
- l_warning()
- end
- return ligaturing(...)
-end
-
-function node.kerning(...)
- if basepass and k_warning then
- k_warning()
- end
- return kerning(...)
-end
-
-function nodes.handlers.setbasepass(v)
- basepass = v
-end
-
-function nodes.handlers.nodepass(head)
- local fontdata = fonts.hashes.identifiers
- if fontdata then
- local usedfonts = { }
- local basefonts = { }
- local prevfont = nil
- local basefont = nil
- for n in traverse_id(glyph_code,head) do
- local font = n.font
- if font ~= prevfont then
- if basefont then
- basefont[2] = n.prev
- end
- prevfont = font
- local used = usedfonts[font]
- if not used then
- local tfmdata = fontdata[font] --
- if tfmdata then
- local shared = tfmdata.shared -- we need to check shared, only when same features
- if shared then
- local processors = shared.processes
- if processors and #processors > 0 then
- usedfonts[font] = processors
- elseif basepass then
- basefont = { n, nil }
- basefonts[#basefonts+1] = basefont
- end
- end
- end
- end
- end
- end
- for d in traverse_id(disc_code,head) do
- local r = d.replace
- if r then
- for n in traverse_id(glyph_code,r) do
- local font = n.font
- if font ~= prevfont then
- prevfont = font
- local used = usedfonts[font]
- if not used then
- local tfmdata = fontdata[font] --
- if tfmdata then
- local shared = tfmdata.shared -- we need to check shared, only when same features
- if shared then
- local processors = shared.processes
- if processors and #processors > 0 then
- usedfonts[font] = processors
- end
- end
- end
- end
- end
- end
- end
- end
- if next(usedfonts) then
- for font, processors in next, usedfonts do
- for i=1,#processors do
- head = processors[i](head,font,0) or head
- end
- end
- end
- if basepass and #basefonts > 0 then
- for i=1,#basefonts do
- local range = basefonts[i]
- local start = range[1]
- local stop = range[2]
- if stop then
- start, stop = ligaturing(start,stop)
- start, stop = kerning(start,stop)
- elseif start then
- start = ligaturing(start)
- start = kerning(start)
- end
- end
- end
- return head, true
- else
- return head, false
- end
-end
-
-function nodes.handlers.basepass(head)
- if not basepass then
- head = ligaturing(head)
- head = kerning(head)
- end
- return head, true
-end
-
-local nodepass = nodes.handlers.nodepass
-local basepass = nodes.handlers.basepass
-local injectpass = nodes.injections.handler
-local protectpass = nodes.handlers.protectglyphs
-
-function nodes.simple_font_handler(head)
- if head then
- head = nodepass(head)
- head = injectpass(head)
- head = basepass(head)
- protectpass(head)
- return head, true
- else
- return head, false
- end
-end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
index 3878ae64805..13acd16ca90 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-1.lua
@@ -17,6 +17,7 @@ return function(specification)
{ "special", "pdf:1 0 0 rg" },
{ "special", "pdf:0 1 0 rg" },
{ "special", "pdf:0 0 1 rg" },
+ { "special", "pdf:0 0 1 rg" },
}
local chars = {
identifiers[id1].characters,
@@ -26,7 +27,12 @@ return function(specification)
for u, v in next, f1.characters do
local n = math.floor(math.random(1,3)+0.5)
local c = chars[n][u] or v
- v.commands = { color[n], { 'slot', n, u }, color[0] }
+ v.commands = {
+ color[n],
+ { 'slot', n, u },
+ color[0],
+ { 'nop' }
+ }
v.kerns = nil
v.width = c.width
v.height = c.height
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua
new file mode 100644
index 00000000000..00fc636a16e
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-demo-vf-4.lua
@@ -0,0 +1,76 @@
+
+return function(specification)
+ local t = { }
+ for k, v in pairs(specification.features.normal) do
+ local n = tonumber(k)
+ if n then
+ t[n] = v
+ end
+ end
+ for k, v in ipairs(t) do
+ local name, rest = string.match(v,"^(.-){(.*)}$")
+ if rest then
+ t[k] = { name = name, list = { } }
+ for s in string.gmatch(rest,"([^%+]+)") do
+ local b, e = string.match(s,"^(.-)%-(.*)$")
+ if b and e then
+ b = tonumber(b)
+ e = tonumber(e)
+ else
+ b = tonumber(s)
+ e = b
+ end
+ if b and e then
+ table.insert(t[k].list,{ b = b, e = e })
+ end
+ end
+ else
+ t[k] = { name = v }
+ end
+ end
+ local ids = { }
+ for k, v in ipairs(t) do
+ local f, id
+ if tonumber(v.name) then
+ id = tonumber(v.name)
+ f = fonts.hashes.identifiers[id]
+ else
+ f, id = fonts.constructors.readanddefine(v.name,specification.size)
+ end
+ v.f = f
+ ids[k] = { id = id }
+ end
+ local one = t[1].f
+ if one then
+ one.properties.name = specification.name
+ one.properties.virtualized = true
+ one.fonts = ids
+ local chr = one.characters
+ for n, v in ipairs(t) do
+ if n == 1 then
+ -- use font 1 as base
+ elseif v.list and #v.list > 0 then
+ local chrs = v.f.characters
+ for k, v in ipairs(v.list) do
+ for u=v.b,v.e do
+ local c = chrs[u]
+ if c then
+ c.commands = {
+ { 'slot', n, u },
+ }
+ chr[u] = c
+ end
+ end
+ end
+ else
+ for u, c in ipairs(v.f.characters) do
+ c.commands = {
+ { 'slot', n, u },
+ }
+ chr[u] = c
+ end
+ end
+ end
+ end
+ return one
+end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-inj.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-inj.lua
deleted file mode 100644
index 332e92033fd..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-inj.lua
+++ /dev/null
@@ -1,1055 +0,0 @@
-if not modules then modules = { } end modules ['font-inj'] = {
- version = 1.001,
- comment = "companion to font-lib.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
-}
-
--- This property based variant is not faster but looks nicer than the attribute one. We
--- need to use rawget (which is apbout 4 times slower than a direct access but we cannot
--- get/set that one for our purpose!
-
-if not nodes.properties then return end
-
-local next, rawget = next, rawget
-local utfchar = utf.char
-local fastcopy = table.fastcopy
-
-local trace_injections = false trackers.register("fonts.injections", function(v) trace_injections = v end)
-
-local report_injections = logs.reporter("fonts","injections")
-
-local attributes, nodes, node = attributes, nodes, node
-
-fonts = fonts
-local fontdata = fonts.hashes.identifiers
-
-nodes.injections = nodes.injections or { }
-local injections = nodes.injections
-
-local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
-local disc_code = nodecodes.disc
-local kern_code = nodecodes.kern
-
-local nuts = nodes.nuts
-local nodepool = nuts.pool
-
-local newkern = nodepool.kern
-
-local tonode = nuts.tonode
-local tonut = nuts.tonut
-
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-
-local traverse_id = nuts.traverse_id
-local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
-local find_tail = nuts.tail
-
-local properties = nodes.properties.data
-
-function injections.installnewkern(nk)
- newkern = nk or newkern
-end
-
-local nofregisteredkerns = 0
-local nofregisteredpairs = 0
-local nofregisteredmarks = 0
-local nofregisteredcursives = 0
------ markanchors = { } -- one base can have more marks
-local keepregisteredcounts = false
-
-function injections.keepcounts()
- keepregisteredcounts = true
-end
-
-function injections.resetcounts()
- nofregisteredkerns = 0
- nofregisteredpairs = 0
- nofregisteredmarks = 0
- nofregisteredcursives = 0
- keepregisteredcounts = false
-end
-
--- We need to make sure that a possible metatable will not kick in
--- unexpectedly.
-
-function injections.reset(n)
- local p = rawget(properties,n)
- if p and rawget(p,"injections") then
- p.injections = nil
- end
-end
-
-function injections.copy(target,source)
- local sp = rawget(properties,source)
- if sp then
- local tp = rawget(properties,target)
- local si = rawget(sp,"injections")
- if si then
- si = fastcopy(si)
- if tp then
- tp.injections = si
- else
- propertydata[target] = {
- injections = si,
- }
- end
- else
- if tp then
- tp.injections = nil
- end
- end
- end
-end
-
-function injections.setligaindex(n,index)
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"injections")
- if i then
- i.ligaindex = index
- else
- p.injections = {
- ligaindex = index
- }
- end
- else
- properties[n] = {
- injections = {
- ligaindex = index
- }
- }
- end
-end
-
-function injections.getligaindex(n,default)
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"injections")
- if i then
- return i.ligaindex or default
- end
- end
- return default
-end
-
-function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext) -- hm: nuts or nodes
- local dx = factor*(exit[1]-entry[1])
- local dy = -factor*(exit[2]-entry[2])
- local ws, wn = tfmstart.width, tfmnext.width
- nofregisteredcursives = nofregisteredcursives + 1
- if rlmode < 0 then
- dx = -(dx + wn)
- else
- dx = dx - ws
- end
- --
- local p = rawget(properties,start)
- if p then
- local i = rawget(p,"injections")
- if i then
- i.cursiveanchor = true
- else
- p.injections = {
- cursiveanchor = true,
- }
- end
- else
- properties[start] = {
- injections = {
- cursiveanchor = true,
- },
- }
- end
- local p = rawget(properties,nxt)
- if p then
- local i = rawget(p,"injections")
- if i then
- i.cursivex = dx
- i.cursivey = dy
- else
- p.injections = {
- cursivex = dx,
- cursivey = dy,
- }
- end
- else
- properties[nxt] = {
- injections = {
- cursivex = dx,
- cursivey = dy,
- },
- }
- end
- return dx, dy, nofregisteredcursives
-end
-
-function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2lflag & tfmchr not used
- local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4]
- if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then -- okay?
- local yoffset = y - h
- local leftkern = x -- both kerns are set in a pair kern compared
- local rightkern = w - x -- to normal kerns where we set only leftkern
- if leftkern ~= 0 or rightkern ~= 0 or yoffset ~= 0 then
- nofregisteredpairs = nofregisteredpairs + 1
- if rlmode and rlmode < 0 then
- leftkern, rightkern = rightkern, leftkern
- end
- local p = rawget(properties,current)
- if p then
- local i = rawget(p,"injections")
- if i then
- if leftkern ~= 0 then
- i.leftkern = (i.leftkern or 0) + leftkern
- end
- if rightkern ~= 0 then
- i.rightkern = (i.rightkern or 0) + rightkern
- end
- if yoffset ~= 0 then
- i.yoffset = (i.yoffset or 0) + yoffset
- end
- elseif leftkern ~= 0 or rightkern ~= 0 then
- p.injections = {
- leftkern = leftkern,
- rightkern = rightkern,
- yoffset = yoffset,
- }
- else
- p.injections = {
- yoffset = yoffset,
- }
- end
- elseif leftkern ~= 0 or rightkern ~= 0 then
- properties[current] = {
- injections = {
- leftkern = leftkern,
- rightkern = rightkern,
- yoffset = yoffset,
- },
- }
- else
- properties[current] = {
- injections = {
- yoffset = yoffset,
- },
- }
- end
- return x, y, w, h, nofregisteredpairs
- end
- end
- return x, y, w, h -- no bound
-end
-
--- this needs checking for rl < 0 but it is unlikely that a r2l script
--- uses kernclasses between glyphs so we're probably safe (KE has a
--- problematic font where marks interfere with rl < 0 in the previous
--- case)
-
-function injections.setkern(current,factor,rlmode,x,injection)
- local dx = factor * x
- if dx ~= 0 then
- nofregisteredkerns = nofregisteredkerns + 1
- local p = rawget(properties,current)
- if not injection then
- injection = "injections"
- end
- if p then
- local i = rawget(p,injection)
- if i then
- i.leftkern = dx + (i.leftkern or 0)
- else
- p[injection] = {
- leftkern = dx,
- }
- end
- else
- properties[current] = {
- [injection] = {
- leftkern = dx,
- },
- }
- end
- return dx, nofregisteredkerns
- else
- return 0, 0
- end
-end
-
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase) -- ba=baseanchor, ma=markanchor
- local dx, dy = factor*(ba[1]-ma[1]), factor*(ba[2]-ma[2])
- nofregisteredmarks = nofregisteredmarks + 1
- -- markanchors[nofregisteredmarks] = base
- if rlmode >= 0 then
- dx = tfmbase.width - dx -- see later commented ox
- end
- local p = rawget(properties,start)
- if p then
- local i = rawget(p,"injections")
- if i then
- i.markx = dx
- i.marky = dy
- i.markdir = rlmode or 0
- i.markbase = nofregisteredmarks
- i.markbasenode = base
- else
- p.injections = {
- markx = dx,
- marky = dy,
- markdir = rlmode or 0,
- markbase = nofregisteredmarks,
- markbasenode = base,
- }
- end
- else
- properties[start] = {
- injections = {
- markx = dx,
- marky = dy,
- markdir = rlmode or 0,
- markbase = nofregisteredmarks,
- markbasenode = base,
- },
- }
- end
- return dx, dy, nofregisteredmarks
-end
-
-local function dir(n)
- return (n and n<0 and "r-to-l") or (n and n>0 and "l-to-r") or "unset"
-end
-
-local function showchar(n,nested)
- local char = getchar(n)
- report_injections("%wfont %s, char %U, glyph %c",nested and 2 or 0,getfont(n),char,char)
-end
-
-local function show(n,what,nested,symbol)
- if n then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,what)
- if i then
- local leftkern = i.leftkern or 0
- local rightkern = i.rightkern or 0
- local yoffset = i.yoffset or 0
- local markx = i.markx or 0
- local marky = i.marky or 0
- local markdir = i.markdir or 0
- local markbase = i.markbase or 0 -- will be markbasenode
- local cursivex = i.cursivex or 0
- local cursivey = i.cursivey or 0
- local ligaindex = i.ligaindex or 0
- local margin = nested and 4 or 2
- --
- if rightkern ~= 0 or yoffset ~= 0 then
- report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
- elseif leftkern ~= 0 then
- report_injections("%w%s kern: dx %p",margin,symbol,leftkern)
- end
- if markx ~= 0 or marky ~= 0 or markbase ~= 0 then
- report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase ~= 0 and "yes" or "no")
- end
- if cursivex ~= 0 or cursivey ~= 0 then
- report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
- end
- if ligaindex ~= 0 then
- report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
- end
- end
- end
- end
-end
-
-local function showsub(n,what,where)
- report_injections("begin subrun: %s",where)
- for n in traverse_id(glyph_code,n) do
- showchar(n,where)
- show(n,what,where," ")
- end
- report_injections("end subrun")
-end
-
-local function trace(head,where)
- report_injections("begin run %s: %s kerns, %s pairs, %s marks and %s cursives registered",
- where or "",nofregisteredkerns,nofregisteredpairs,nofregisteredmarks,nofregisteredcursives)
- local n = head
- while n do
- local id = getid(n)
- if id == glyph_code then
- showchar(n)
- show(n,"injections",false," ")
- show(n,"preinjections",false,"<")
- show(n,"postinjections",false,">")
- show(n,"replaceinjections",false,"=")
- elseif id == disc_code then
- local pre = getfield(n,"pre")
- local post = getfield(n,"post")
- local replace = getfield(n,"replace")
- if pre then
- showsub(pre,"preinjections","pre")
- end
- if post then
- showsub(post,"postinjections","post")
- end
- if replace then
- showsub(replace,"replaceinjections","replace")
- end
- end
- n = getnext(n)
- end
- report_injections("end run")
-end
-
-local function show_result(head)
- local current = head
- local skipping = false
- while current do
- local id = getid(current)
- if id == glyph_code then
- report_injections("char: %C, width %p, xoffset %p, yoffset %p",
- getchar(current),getfield(current,"width"),getfield(current,"xoffset"),getfield(current,"yoffset"))
- skipping = false
- elseif id == kern_code then
- report_injections("kern: %p",getfield(current,"kern"))
- skipping = false
- elseif not skipping then
- report_injections()
- skipping = true
- end
- current = getnext(current)
- end
-end
-
--- we could also check for marks here but maybe not all are registered (needs checking)
-
-local function collect_glyphs_1(head)
- local glyphs, nofglyphs = { }, 0
- local marks, nofmarks = { }, 0
- local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do -- only needed for relevant fonts
- if getsubtype(n) < 256 then
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm and tm[getchar(n)] then
- nofmarks = nofmarks + 1
- marks[nofmarks] = n
- else
- nofglyphs = nofglyphs + 1
- glyphs[nofglyphs] = n
- end
- -- yoffsets can influence curs steps
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"injections")
- if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
- end
- end
- end
- end
- return glyphs, nofglyphs, marks, nofmarks
-end
-
-local function collect_glyphs_2(head)
- local glyphs, nofglyphs = { }, 0
- local marks, nofmarks = { }, 0
- local nf, tm = nil, nil
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n) < 256 then
- local f = getfont(n)
- if f ~= nf then
- nf = f
- tm = fontdata[nf].resources.marks -- other hash in ctx
- end
- if tm and tm[getchar(n)] then
- nofmarks = nofmarks + 1
- marks[nofmarks] = n
- else
- nofglyphs = nofglyphs + 1
- glyphs[nofglyphs] = n
- end
- end
- end
- return glyphs, nofglyphs, marks, nofmarks
-end
-
-local function inject_marks(marks,nofmarks)
- for i=1,nofmarks do
- local n = marks[i]
- local pn = rawget(properties,n)
- if pn then
- pn = rawget(pn,"injections")
- if pn then
- local p = pn.markbasenode
- if p then
- local px = getfield(p,"xoffset")
- local ox = 0
- local rightkern = nil
- local pp = rawget(properties,p)
- if pp then
- pp = rawget(pp,"injections")
- if pp then
- rightkern = pp.rightkern
- end
- end
- if rightkern then -- x and w ~= 0
- if pn.markdir < 0 then
- -- kern(w-x) glyph(p) kern(x) mark(n)
- ox = px - pn.markx - rightkern
- -- report_injections("r2l case 1: %p",ox)
- else
- -- kern(x) glyph(p) kern(w-x) mark(n)
- -- ox = px - getfield(p,"width") + pn.markx - pp.leftkern
- local leftkern = pp.leftkern
- if leftkern then
- ox = px - pn.markx
- else
- ox = px - pn.markx - leftkern
- end
--- report_injections("l2r case 1: %p",ox)
- end
- else
- -- we need to deal with fonts that have marks with width
- -- if pn.markdir < 0 then
- -- ox = px - pn.markx
- -- -- report_injections("r2l case 3: %p",ox)
- -- else
- -- -- ox = px - getfield(p,"width") + pn.markx
- ox = px - pn.markx
- -- report_injections("l2r case 3: %p",ox)
- -- end
- local wn = getfield(n,"width") -- in arial marks have widths
- if wn ~= 0 then
- -- bad: we should center
- -- insert_node_before(head,n,newkern(-wn/2))
- -- insert_node_after(head,n,newkern(-wn/2))
- pn.leftkern = -wn/2
- pn.rightkern = -wn/2
- -- wx[n] = { 0, -wn/2, 0, -wn }
- end
- -- so far
- end
- setfield(n,"xoffset",ox)
- --
- local py = getfield(p,"yoffset")
- local oy = 0
- if marks[p] then
- oy = py + pn.marky
- else
- oy = getfield(n,"yoffset") + py + pn.marky
- end
- setfield(n,"yoffset",oy)
- else
- -- normally this can't happen (only when in trace mode which is a special case anyway)
- -- report_injections("missing mark anchor %i",pn.markbase or 0)
- end
- end
- end
- end
-end
-
-local function inject_cursives(glyphs,nofglyphs)
- local cursiveanchor, lastanchor = nil, nil
- local minc, maxc, last = 0, 0, nil
- for i=1,nofglyphs do
- local n = glyphs[i]
- local pn = rawget(properties,n)
- if pn then
- pn = rawget(pn,"injections")
- end
- if pn then
- local cursivex = pn.cursivex
- if cursivex then
- if cursiveanchor then
- if cursivex ~= 0 then
- pn.leftkern = (pn.leftkern or 0) + cursivex
- end
- if lastanchor then
- if maxc == 0 then
- minc = lastanchor
- end
- maxc = lastanchor
- properties[cursiveanchor].cursivedy = pn.cursivey
- end
- last = n
- else
- maxc = 0
- end
- elseif maxc > 0 then
- local ny = getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti = glyphs[i]
- ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",ny) -- why not add ?
- end
- maxc = 0
- end
- if pn.cursiveanchor then
- cursiveanchor = n
- lastanchor = i
- else
- cursiveanchor = nil
- lastanchor = nil
- if maxc > 0 then
- local ny = getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti = glyphs[i]
- ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",ny) -- why not add ?
- end
- maxc = 0
- end
- end
- elseif maxc > 0 then
- local ny = getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti = glyphs[i]
- ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",getfield(ti,"yoffset") + ny) -- ?
- end
- maxc = 0
- cursiveanchor = nil
- lastanchor = nil
- end
- -- if maxc > 0 and not cursiveanchor then
- -- local ny = getfield(n,"yoffset")
- -- for i=maxc,minc,-1 do
- -- local ti = glyphs[i]
- -- ny = ny + properties[ti].cursivedy
- -- setfield(ti,"yoffset",ny) -- why not add ?
- -- end
- -- maxc = 0
- -- end
- end
- if last and maxc > 0 then
- local ny = getfield(last,"yoffset")
- for i=maxc,minc,-1 do
- local ti = glyphs[i]
- ny = ny + properties[ti].cursivedy
- setfield(ti,"yoffset",ny) -- why not add ?
- end
- end
-end
-
-local function inject_kerns(head,list,length)
- -- todo: pre/post/replace
- for i=1,length do
- local n = list[i]
- local pn = rawget(properties,n)
- if pn then
- local i = rawget(pn,"injections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- insert_node_before(head,n,newkern(leftkern)) -- type 0/2
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern)) -- type 0/2
- end
- end
- end
- end
-end
-
-local function inject_everything(head,where)
- head = tonut(head)
- if trace_injections then
- trace(head,"everything")
- end
- local glyphs, nofglyphs, marks, nofmarks
- if nofregisteredpairs > 0 then
- glyphs, nofglyphs, marks, nofmarks = collect_glyphs_1(head)
- else
- glyphs, nofglyphs, marks, nofmarks = collect_glyphs_2(head)
- end
- if nofglyphs > 0 then
- if nofregisteredcursives > 0 then
- inject_cursives(glyphs,nofglyphs)
- end
- if nofregisteredmarks > 0 then -- and nofmarks > 0
- inject_marks(marks,nofmarks)
- end
- inject_kerns(head,glyphs,nofglyphs)
- end
- if nofmarks > 0 then
- inject_kerns(head,marks,nofmarks)
- end
- if keepregisteredcounts then
- keepregisteredcounts = false
- else
- nofregisteredkerns = 0
- nofregisteredpairs = 0
- nofregisteredmarks = 0
- nofregisteredcursives = 0
- end
- return tonode(head), true
-end
-
-local function inject_kerns_only(head,where)
- head = tonut(head)
- if trace_injections then
- trace(head,"kerns")
- end
- local n = head
- local p = nil
- while n do
- local id = getid(n)
- if id == glyph_code then
- if getsubtype(n) < 256 then
- local pn = rawget(properties,n)
- if pn then
- if p then
- local d = getfield(p,"post")
- if d then
- local i = rawget(pn,"postinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- local t = find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
- end
- end
- end
- local d = getfield(p,"replace")
- if d then
- local i = rawget(pn,"replaceinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- local t = find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
- end
- end
- else
- local i = rawget(pn,"injections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- setfield(p,"replace",newkern(leftkern))
- end
- end
- end
- else
- local i = rawget(pn,"injections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- head = insert_node_before(head,n,newkern(leftkern))
- end
- end
- end
- end
- else
- break
- end
- p = nil
- elseif id == disc_code then
- local d = getfield(n,"pre")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local pn = rawget(properties,n)
- if pn then
- local i = rawget(pn,"preinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"pre",h)
- end
- end
- local d = getfield(n,"post")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local pn = rawget(properties,n)
- if pn then
- local i = rawget(pn,"postinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"post",h)
- end
- end
- local d = getfield(n,"replace")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local pn = rawget(properties,n) -- why can it be empty { }
- if pn then
- local i = rawget(pn,"replaceinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"replace",h)
- end
- end
- p = n
- else
- p = nil
- end
- n = getnext(n)
- end
- --
- if keepregisteredcounts then
- keepregisteredcounts = false
- else
- nofregisteredkerns = 0
- end
- return tonode(head), true
-end
-
-local function inject_pairs_only(head,where)
- head = tonut(head)
- if trace_injections then
- trace(head,"pairs")
- end
- --
- local n = head
- local p = nil
- while n do
- local id = getid(n)
- if id == glyph_code then
- if getsubtype(n) < 256 then
- local pn = rawget(properties,n)
- if pn then
- if p then
- local d = getfield(p,"post")
- if d then
- local i = rawget(pn,"postinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- local t = find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
- end
- -- local rightkern = i.rightkern
- -- if rightkern and rightkern ~= 0 then
- -- insert_node_after(head,n,newkern(rightkern))
- -- n = getnext(n) -- to be checked
- -- end
- end
- end
- local d = getfield(p,"replace")
- if d then
- local i = rawget(pn,"replaceinjections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- local t = find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
- end
- -- local rightkern = i.rightkern
- -- if rightkern and rightkern ~= 0 then
- -- insert_node_after(head,n,newkern(rightkern))
- -- n = getnext(n) -- to be checked
- -- end
- end
- else
- local i = rawget(pn,"injections")
- if i then
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- setfield(p,"replace",newkern(leftkern))
- end
- -- local rightkern = i.rightkern
- -- if rightkern and rightkern ~= 0 then
- -- insert_node_after(head,n,newkern(rightkern))
- -- n = getnext(n) -- to be checked
- -- end
- end
- end
- else
- -- this is the most common case
- local i = rawget(pn,"injections")
- if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- insert_node_before(head,n,newkern(leftkern))
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern))
- n = getnext(n) -- to be checked
- end
- end
- end
- end
- else
- break
- end
- p = nil
- elseif id == disc_code then
- local d = getfield(n,"pre")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"preinjections")
- if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern = i.leftkern
- if leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern))
- n = getnext(n) -- to be checked
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"pre",h)
- end
- end
- local d = getfield(n,"post")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"postinjections")
- if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern))
- n = getnext(n) -- to be checked
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"post",h)
- end
- end
- local d = getfield(n,"replace")
- if d then
- local h = d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n) < 256 then
- local p = rawget(properties,n)
- if p then
- local i = rawget(p,"replaceinjections")
- if i then
- local yoffset = i.yoffset
- if yoffset and yoffset ~= 0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern = i.leftkern
- if leftkern and leftkern ~= 0 then
- h = insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern = i.rightkern
- if rightkern and rightkern ~= 0 then
- insert_node_after(head,n,newkern(rightkern))
- n = getnext(n) -- to be checked
- end
- end
- end
- else
- break
- end
- end
- if h ~= d then
- setfield(n,"replace",h)
- end
- end
- p = n
- else
- p = nil
- end
- n = getnext(n)
- end
- --
- if keepregisteredcounts then
- keepregisteredcounts = false
- else
- nofregisteredpairs = 0
- nofregisteredkerns = 0
- end
- return tonode(head), true
-end
-
-function injections.handler(head,where) -- optimize for n=1 ?
- if nofregisteredmarks > 0 or nofregisteredcursives > 0 then
- return inject_everything(head,where)
- elseif nofregisteredpairs > 0 then
- return inject_pairs_only(head,where)
- elseif nofregisteredkerns > 0 then
- return inject_kerns_only(head,where)
- else
- return head, false
- end
-end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-lua.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-lua.lua
deleted file mode 100644
index ec3fe38be3e..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-lua.lua
+++ /dev/null
@@ -1,33 +0,0 @@
-if not modules then modules = { } end modules ['luatex-fonts-lua'] = {
- version = 1.001,
- comment = "companion to luatex-*.tex",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
-
-local fonts = fonts
-fonts.formats.lua = "lua"
-
-function fonts.readers.lua(specification)
- local fullname = specification.filename or ""
- if fullname == "" then
- local forced = specification.forced or ""
- if forced ~= "" then
- fullname = specification.name .. "." .. forced
- else
- fullname = specification.name
- end
- end
- local fullname = resolvers.findfile(fullname) or ""
- if fullname ~= "" then
- local loader = loadfile(fullname)
- loader = loader and loader()
- return loader and loader(specification)
- end
-end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua
index 0f2fc8e2613..22692b5667c 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
--- merged file : luatex-fonts-merged.lua
--- parent file : luatex-fonts.lua
--- merge date : 05/18/15 12:26:48
+-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
+-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
+-- merge date : 04/21/16 19:35:29
do -- begin closure to overcome local limits and interference
@@ -11,10 +11,14 @@ if not modules then modules={} end modules ['l-lua']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local major,minor=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
-_MAJORVERSION=tonumber(major) or 5
-_MINORVERSION=tonumber(minor) or 1
+_MAJORVERSION,_MINORVERSION=string.match(_VERSION,"^[^%d]+(%d+)%.(%d+).*$")
+_MAJORVERSION=tonumber(_MAJORVERSION) or 5
+_MINORVERSION=tonumber(_MINORVERSION) or 1
_LUAVERSION=_MAJORVERSION+_MINORVERSION/10
+if _LUAVERSION<5.2 and jit then
+ _MINORVERSION=2
+ _LUAVERSION=5.2
+end
if not lpeg then
lpeg=require("lpeg")
end
@@ -57,21 +61,33 @@ if not package.loaders then
end
local print,select,tostring=print,select,tostring
local inspectors={}
-function setinspector(inspector)
- inspectors[#inspectors+1]=inspector
+function setinspector(kind,inspector)
+ inspectors[kind]=inspector
end
function inspect(...)
for s=1,select("#",...) do
local value=select(s,...)
- local done=false
- for i=1,#inspectors do
- done=inspectors[i](value)
- if done then
- break
+ if value==nil then
+ print("nil")
+ else
+ local done=false
+ local kind=type(value)
+ local inspector=inspectors[kind]
+ if inspector then
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ for kind,inspector in next,inspectors do
+ done=inspector(value)
+ if done then
+ break
+ end
+ end
+ if not done then
+ print(tostring(value))
end
- end
- if not done then
- print(tostring(value))
end
end
end
@@ -112,7 +128,7 @@ local floor=math.floor
local P,R,S,V,Ct,C,Cs,Cc,Cp,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.V,lpeg.Ct,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Cp,lpeg.Cmt
local lpegtype,lpegmatch,lpegprint=lpeg.type,lpeg.match,lpeg.print
if setinspector then
- setinspector(function(v) if lpegtype(v) then lpegprint(v) return true end end)
+ setinspector("lpeg",function(v) if lpegtype(v) then lpegprint(v) return true end end)
end
lpeg.patterns=lpeg.patterns or {}
local patterns=lpeg.patterns
@@ -132,7 +148,7 @@ local uppercase=R("AZ")
local underscore=P("_")
local hexdigit=digit+lowercase+uppercase
local cr,lf,crlf=P("\r"),P("\n"),P("\r\n")
-local newline=P("\r")*(P("\n")+P(true))+P("\n")
+local newline=P("\r")*(P("\n")+P(true))+P("\n")
local escaped=P("\\")*anything
local squote=P("'")
local dquote=P('"')
@@ -995,9 +1011,10 @@ function string.valid(str,default)
return (type(str)=="string" and str~="" and str) or default or nil
end
string.itself=function(s) return s end
-local pattern=Ct(C(1)^0)
-function string.totable(str)
- return lpegmatch(pattern,str)
+local pattern_c=Ct(C(1)^0)
+local pattern_b=Ct((C(1)/byte)^0)
+function string.totable(str,bytes)
+ return lpegmatch(bytes and pattern_b or pattern_c,str)
end
local replacer=lpeg.replacer("@","%%")
function string.tformat(fmt,...)
@@ -1884,7 +1901,7 @@ function table.print(t,...)
end
end
if setinspector then
- setinspector(function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
+ setinspector("table",function(v) if type(v)=="table" then serialize(print,v,"table") return true end end)
end
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -2937,7 +2954,13 @@ function string.autosingle(s,sep)
end
return ("'"..tostring(s).."'")
end
-local tracedchars={}
+local tracedchars={ [0]=
+ "[null]","[soh]","[stx]","[etx]","[eot]","[enq]","[ack]","[bel]",
+ "[bs]","[ht]","[lf]","[vt]","[ff]","[cr]","[so]","[si]",
+ "[dle]","[dc1]","[dc2]","[dc3]","[dc4]","[nak]","[syn]","[etb]",
+ "[can]","[em]","[sub]","[esc]","[fs]","[gs]","[rs]","[us]",
+ "[space]",
+}
string.tracedchars=tracedchars
strings.tracers=tracedchars
function string.tracedchar(b)
@@ -3451,6 +3474,149 @@ end -- closure
do -- begin closure to overcome local limits and interference
+if not modules then modules={} end modules ['util-fil']={
+ version=1.001,
+ comment="companion to luat-lib.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local byte=string.byte
+local extract=bit32.extract
+utilities=utilities or {}
+local files={}
+utilities.files=files
+local zerobased={}
+function files.open(filename,zb)
+ local f=io.open(filename,"rb")
+ if f then
+ zerobased[f]=zb or false
+ end
+ return f
+end
+function files.close(f)
+ zerobased[f]=nil
+ f:close()
+end
+function files.size(f)
+ return f:seek("end")
+end
+function files.setposition(f,n)
+ if zerobased[f] then
+ f:seek("set",n)
+ else
+ f:seek("set",n-1)
+ end
+end
+function files.getposition(f)
+ if zerobased[f] then
+ return f:seek()
+ else
+ return f:seek()+1
+ end
+end
+function files.look(f,n,chars)
+ local p=f:seek()
+ local s=f:read(n)
+ f:seek("set",p)
+ if chars then
+ return s
+ else
+ return byte(s,1,#s)
+ end
+end
+function files.skip(f,n)
+ if n==1 then
+ f:read(n)
+ else
+ f:seek("set",f:seek()+n)
+ end
+end
+function files.readbyte(f)
+ return byte(f:read(1))
+end
+function files.readbytes(f,n)
+ return byte(f:read(n),1,n)
+end
+function files.readchar(f)
+ return f:read(1)
+end
+function files.readstring(f,n)
+ return f:read(n or 1)
+end
+function files.readinteger1(f)
+ local n=byte(f:read(1))
+ if n>=0x80 then
+ return n-0xFF-1
+ else
+ return n
+ end
+end
+files.readcardinal1=files.readbyte
+files.readcardinal=files.readcardinal1
+files.readinteger=files.readinteger1
+function files.readcardinal2(f)
+ local a,b=byte(f:read(2),1,2)
+ return 0x100*a+b
+end
+function files.readinteger2(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1
+ else
+ return n
+ end
+end
+function files.readcardinal3(f)
+ local a,b,c=byte(f:read(3),1,3)
+ return 0x10000*a+0x100*b+c
+end
+function files.readcardinal4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ return 0x1000000*a+0x10000*b+0x100*c+d
+end
+function files.readinteger4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x1000000*a+0x10000*b+0x100*c+d
+ if n>=0x8000000 then
+ return n-0xFFFFFFFF-1
+ else
+ return n
+ end
+end
+function files.readfixed4(f)
+ local a,b,c,d=byte(f:read(4),1,4)
+ local n=0x100*a+b
+ if n>=0x8000 then
+ return n-0xFFFF-1+(0x100*c+d)/0xFFFF
+ else
+ return n+(0x100*c+d)/0xFFFF
+ end
+end
+function files.read2dot14(f)
+ local a,b=byte(f:read(2),1,2)
+ local n=0x100*a+b
+ local m=extract(n,0,30)
+ if n>0x7FFF then
+ n=extract(n,30,2)
+ return m/0x4000-4
+ else
+ n=extract(n,30,2)
+ return n+m/0x4000
+ end
+end
+function files.skipshort(f,n)
+ f:read(2*(n or 1))
+end
+function files.skiplong(f,n)
+ f:read(4*(n or 1))
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['luat-basics-gen']={
version=1.100,
comment="companion to luatex-*.tex",
@@ -3506,13 +3672,17 @@ logs={
report=dummyfunction,
}
callbacks={
- register=function(n,f) return callback.register(n,f) end,
+ register=function(n,f)
+ return callback.register(n,f)
+ end,
}
-utilities={
- storage={
- allocate=function(t) return t or {} end,
- mark=function(t) return t or {} end,
- },
+utilities=utilities or {} utilities.storage={
+ allocate=function(t)
+ return t or {}
+ end,
+ mark=function(t)
+ return t or {}
+ end,
}
characters=characters or {
data={}
@@ -3523,11 +3693,8 @@ local remapper={
otf="opentype fonts",
ttf="truetype fonts",
ttc="truetype fonts",
- dfont="truetype fonts",
cid="cid maps",
cidmap="cid maps",
- fea="font feature files",
- pfa="type1 fonts",
pfb="type1 fonts",
afm="afm",
}
@@ -3712,10 +3879,17 @@ function caches.compile(data,luaname,lucname)
end
function table.setmetatableindex(t,f)
if type(t)~="table" then
- f=f or t
- t={}
+ f,t=t,{}
+ end
+ local m=getmetatable(t)
+ if f=="table" then
+ f=function(t,k) local v={} t[k]=v return v end
+ end
+ if m then
+ m.__index=f
+ else
+ setmetatable(t,{ __index=f })
end
- setmetatable(t,{ __index=f })
return t
end
arguments={}
@@ -3882,13 +4056,21 @@ end
nodes={}
nodes.pool={}
nodes.handlers={}
-local nodecodes={} for k,v in next,node.types () do nodecodes[string.gsub(v,"_","")]=k end
-local whatcodes={} for k,v in next,node.whatsits() do whatcodes[string.gsub(v,"_","")]=k end
-local glyphcodes={ [0]="character","glyph","ligature","ghost","left","right" }
-local disccodes={ [0]="discretionary","explicit","automatic","regular","first","second" }
+local nodecodes={}
+local glyphcodes=node.subtypes("glyph")
+local disccodes=node.subtypes("disc")
+for k,v in next,node.types() do
+ v=string.gsub(v,"_","")
+ nodecodes[k]=v
+ nodecodes[v]=k
+end
+for i=0,#glyphcodes do
+ glyphcodes[glyphcodes[i]]=i
+end
+for i=0,#disccodes do
+ disccodes[disccodes[i]]=i
+end
nodes.nodecodes=nodecodes
-nodes.whatcodes=whatcodes
-nodes.whatsitcodes=whatcodes
nodes.glyphcodes=glyphcodes
nodes.disccodes=disccodes
local free_node=node.free
@@ -3952,7 +4134,6 @@ nodes.traverse_id=node.traverse_id
nodes.slide=node.slide
nodes.vpack=node.vpack
nodes.first_glyph=node.first_glyph
-nodes.first_character=node.first_character
nodes.has_glyph=node.has_glyph or node.first_glyph
nodes.current_attr=node.current_attr
nodes.do_ligature_n=node.do_ligature_n
@@ -3981,13 +4162,63 @@ local setfield=direct.setfield
nuts.getfield=getfield
nuts.setfield=setfield
nuts.getnext=direct.getnext
+nuts.setnext=direct.setnext
nuts.getprev=direct.getprev
+nuts.setprev=direct.setprev
+nuts.getboth=direct.getboth
+nuts.setboth=direct.setboth
nuts.getid=direct.getid
-nuts.getattr=getfield
+nuts.getattr=direct.get_attribute or direct.has_attribute or getfield
nuts.setattr=setfield
nuts.getfont=direct.getfont
+nuts.setfont=direct.setfont
nuts.getsubtype=direct.getsubtype
+nuts.setsubtype=direct.setsubtype or function(n,s) setfield(n,"subtype",s) end
nuts.getchar=direct.getchar
+nuts.setchar=direct.setchar
+nuts.getdisc=direct.getdisc
+nuts.setdisc=direct.setdisc
+nuts.setlink=direct.setlink
+nuts.getlist=direct.getlist
+nuts.setlist=direct.setlist or function(n,l) setfield(n,"list",l) end
+nuts.getleader=direct.getleader
+nuts.setleader=direct.setleader or function(n,l) setfield(n,"leader",l) end
+if not direct.is_glyph then
+ local getchar=direct.getchar
+ local getid=direct.getid
+ local getfont=direct.getfont
+ local glyph_code=nodes.nodecodes.glyph
+ function direct.is_glyph(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+ function direct.is_char(n,f)
+ local id=getid(n)
+ if id==glyph_code then
+ if getsubtype(n)>=256 then
+ return false
+ elseif f and getfont(n)==f then
+ return getchar(n)
+ else
+ return false
+ end
+ else
+ return nil,id
+ end
+ end
+end
+nuts.ischar=direct.is_char
+nuts.is_char=direct.is_char
+nuts.isglyph=direct.is_glyph
+nuts.is_glyph=direct.is_glyph
nuts.insert_before=direct.insert_before
nuts.insert_after=direct.insert_after
nuts.delete=direct.delete
@@ -4001,6 +4232,9 @@ nuts.is_node=direct.is_node
nuts.end_of_math=direct.end_of_math
nuts.traverse=direct.traverse
nuts.traverse_id=direct.traverse_id
+nuts.traverse_char=direct.traverse_char
+nuts.ligaturing=direct.ligaturing
+nuts.kerning=direct.kerning
nuts.getprop=nuts.getattr
nuts.setprop=nuts.setattr
local new_nut=direct.new
@@ -4038,6 +4272,760 @@ end -- closure
do -- begin closure to overcome local limits and interference
+
+characters=characters or {}
+characters.blockrange={}
+characters.classifiers={
+ [1536]=4,
+ [1537]=4,
+ [1538]=4,
+ [1539]=4,
+ [1540]=4,
+ [1541]=4,
+ [1542]=6,
+ [1543]=6,
+ [1544]=4,
+ [1545]=6,
+ [1546]=6,
+ [1547]=4,
+ [1548]=6,
+ [1549]=6,
+ [1550]=6,
+ [1551]=6,
+ [1552]=5,
+ [1553]=5,
+ [1554]=5,
+ [1555]=5,
+ [1556]=5,
+ [1557]=5,
+ [1558]=5,
+ [1559]=5,
+ [1560]=5,
+ [1561]=5,
+ [1562]=5,
+ [1563]=6,
+ [1564]=6,
+ [1566]=6,
+ [1567]=6,
+ [1568]=2,
+ [1569]=4,
+ [1570]=3,
+ [1571]=3,
+ [1572]=3,
+ [1573]=3,
+ [1574]=2,
+ [1575]=3,
+ [1576]=2,
+ [1577]=3,
+ [1578]=2,
+ [1579]=2,
+ [1580]=2,
+ [1581]=2,
+ [1582]=2,
+ [1583]=3,
+ [1584]=3,
+ [1585]=3,
+ [1586]=3,
+ [1587]=2,
+ [1588]=2,
+ [1589]=2,
+ [1590]=2,
+ [1591]=2,
+ [1592]=2,
+ [1593]=2,
+ [1594]=2,
+ [1595]=2,
+ [1596]=2,
+ [1597]=2,
+ [1598]=2,
+ [1599]=2,
+ [1600]=2,
+ [1601]=2,
+ [1602]=2,
+ [1603]=2,
+ [1604]=2,
+ [1605]=2,
+ [1606]=2,
+ [1607]=2,
+ [1608]=3,
+ [1609]=2,
+ [1610]=2,
+ [1611]=5,
+ [1612]=5,
+ [1613]=5,
+ [1614]=5,
+ [1615]=5,
+ [1616]=5,
+ [1617]=5,
+ [1618]=5,
+ [1619]=5,
+ [1620]=5,
+ [1621]=5,
+ [1622]=5,
+ [1623]=5,
+ [1624]=5,
+ [1625]=5,
+ [1626]=5,
+ [1627]=5,
+ [1628]=5,
+ [1629]=5,
+ [1630]=5,
+ [1631]=5,
+ [1632]=6,
+ [1633]=6,
+ [1634]=6,
+ [1635]=6,
+ [1636]=6,
+ [1637]=6,
+ [1638]=6,
+ [1639]=6,
+ [1640]=6,
+ [1641]=6,
+ [1642]=6,
+ [1643]=6,
+ [1644]=6,
+ [1645]=6,
+ [1646]=2,
+ [1647]=2,
+ [1648]=5,
+ [1649]=3,
+ [1650]=3,
+ [1651]=3,
+ [1652]=4,
+ [1653]=3,
+ [1654]=3,
+ [1655]=3,
+ [1656]=2,
+ [1657]=2,
+ [1658]=2,
+ [1659]=2,
+ [1660]=2,
+ [1661]=2,
+ [1662]=2,
+ [1663]=2,
+ [1664]=2,
+ [1665]=2,
+ [1666]=2,
+ [1667]=2,
+ [1668]=2,
+ [1669]=2,
+ [1670]=2,
+ [1671]=2,
+ [1672]=3,
+ [1673]=3,
+ [1674]=3,
+ [1675]=3,
+ [1676]=3,
+ [1677]=3,
+ [1678]=3,
+ [1679]=3,
+ [1680]=3,
+ [1681]=3,
+ [1682]=3,
+ [1683]=3,
+ [1684]=3,
+ [1685]=3,
+ [1686]=3,
+ [1687]=3,
+ [1688]=3,
+ [1689]=3,
+ [1690]=2,
+ [1691]=2,
+ [1692]=2,
+ [1693]=2,
+ [1694]=2,
+ [1695]=2,
+ [1696]=2,
+ [1697]=2,
+ [1698]=2,
+ [1699]=2,
+ [1700]=2,
+ [1701]=2,
+ [1702]=2,
+ [1703]=2,
+ [1704]=2,
+ [1705]=2,
+ [1706]=2,
+ [1707]=2,
+ [1708]=2,
+ [1709]=2,
+ [1710]=2,
+ [1711]=2,
+ [1712]=2,
+ [1713]=2,
+ [1714]=2,
+ [1715]=2,
+ [1716]=2,
+ [1717]=2,
+ [1718]=2,
+ [1719]=2,
+ [1720]=2,
+ [1721]=2,
+ [1722]=2,
+ [1723]=2,
+ [1724]=2,
+ [1725]=2,
+ [1726]=2,
+ [1727]=2,
+ [1728]=3,
+ [1729]=2,
+ [1730]=2,
+ [1731]=3,
+ [1732]=3,
+ [1733]=3,
+ [1734]=3,
+ [1735]=3,
+ [1736]=3,
+ [1737]=3,
+ [1738]=3,
+ [1739]=3,
+ [1740]=2,
+ [1741]=3,
+ [1742]=2,
+ [1743]=3,
+ [1744]=2,
+ [1745]=2,
+ [1746]=3,
+ [1747]=3,
+ [1748]=6,
+ [1749]=3,
+ [1750]=5,
+ [1751]=5,
+ [1752]=5,
+ [1753]=5,
+ [1754]=5,
+ [1755]=5,
+ [1756]=5,
+ [1757]=4,
+ [1758]=6,
+ [1759]=5,
+ [1760]=5,
+ [1761]=5,
+ [1762]=5,
+ [1763]=5,
+ [1764]=5,
+ [1765]=6,
+ [1766]=6,
+ [1767]=5,
+ [1768]=5,
+ [1769]=6,
+ [1770]=5,
+ [1771]=5,
+ [1772]=5,
+ [1773]=5,
+ [1774]=3,
+ [1775]=3,
+ [1776]=6,
+ [1777]=6,
+ [1778]=6,
+ [1779]=6,
+ [1780]=6,
+ [1781]=6,
+ [1782]=6,
+ [1783]=6,
+ [1784]=6,
+ [1785]=6,
+ [1786]=2,
+ [1787]=2,
+ [1788]=2,
+ [1789]=6,
+ [1790]=6,
+ [1791]=2,
+ [1792]=6,
+ [1793]=6,
+ [1794]=6,
+ [1795]=6,
+ [1796]=6,
+ [1797]=6,
+ [1798]=6,
+ [1799]=6,
+ [1800]=6,
+ [1801]=6,
+ [1802]=6,
+ [1803]=6,
+ [1804]=6,
+ [1805]=6,
+ [1807]=6,
+ [1808]=3,
+ [1809]=5,
+ [1810]=2,
+ [1811]=2,
+ [1812]=2,
+ [1813]=3,
+ [1814]=3,
+ [1815]=3,
+ [1816]=3,
+ [1817]=3,
+ [1818]=2,
+ [1819]=2,
+ [1820]=2,
+ [1821]=2,
+ [1822]=3,
+ [1823]=2,
+ [1824]=2,
+ [1825]=2,
+ [1826]=2,
+ [1827]=2,
+ [1828]=2,
+ [1829]=2,
+ [1830]=2,
+ [1831]=2,
+ [1832]=3,
+ [1833]=2,
+ [1834]=3,
+ [1835]=2,
+ [1836]=3,
+ [1837]=2,
+ [1838]=2,
+ [1839]=3,
+ [1840]=5,
+ [1841]=5,
+ [1842]=5,
+ [1843]=5,
+ [1844]=5,
+ [1845]=5,
+ [1846]=5,
+ [1847]=5,
+ [1848]=5,
+ [1849]=5,
+ [1850]=5,
+ [1851]=5,
+ [1852]=5,
+ [1853]=5,
+ [1854]=5,
+ [1855]=5,
+ [1856]=5,
+ [1857]=5,
+ [1858]=5,
+ [1859]=5,
+ [1860]=5,
+ [1861]=5,
+ [1862]=5,
+ [1863]=5,
+ [1864]=5,
+ [1865]=5,
+ [1866]=5,
+ [1869]=3,
+ [1870]=2,
+ [1871]=2,
+ [1872]=2,
+ [1873]=2,
+ [1874]=2,
+ [1875]=2,
+ [1876]=2,
+ [1877]=2,
+ [1878]=2,
+ [1879]=2,
+ [1880]=2,
+ [1881]=3,
+ [1882]=3,
+ [1883]=3,
+ [1884]=2,
+ [1885]=2,
+ [1886]=2,
+ [1887]=2,
+ [1888]=2,
+ [1889]=2,
+ [1890]=2,
+ [1891]=2,
+ [1892]=2,
+ [1893]=2,
+ [1894]=2,
+ [1895]=2,
+ [1896]=2,
+ [1897]=2,
+ [1898]=2,
+ [1899]=3,
+ [1900]=3,
+ [1901]=2,
+ [1902]=2,
+ [1903]=2,
+ [1904]=2,
+ [1905]=3,
+ [1906]=2,
+ [1907]=3,
+ [1908]=3,
+ [1909]=2,
+ [1910]=2,
+ [1911]=2,
+ [1912]=3,
+ [1913]=3,
+ [1914]=2,
+ [1915]=2,
+ [1916]=2,
+ [1917]=2,
+ [1918]=2,
+ [1919]=2,
+ [1984]=6,
+ [1985]=6,
+ [1986]=6,
+ [1987]=6,
+ [1988]=6,
+ [1989]=6,
+ [1990]=6,
+ [1991]=6,
+ [1992]=6,
+ [1993]=6,
+ [1994]=2,
+ [1995]=2,
+ [1996]=2,
+ [1997]=2,
+ [1998]=2,
+ [1999]=2,
+ [2000]=2,
+ [2001]=2,
+ [2002]=2,
+ [2003]=2,
+ [2004]=2,
+ [2005]=2,
+ [2006]=2,
+ [2007]=2,
+ [2008]=2,
+ [2009]=2,
+ [2010]=2,
+ [2011]=2,
+ [2012]=2,
+ [2013]=2,
+ [2014]=2,
+ [2015]=2,
+ [2016]=2,
+ [2017]=2,
+ [2018]=2,
+ [2019]=2,
+ [2020]=2,
+ [2021]=2,
+ [2022]=2,
+ [2023]=2,
+ [2024]=2,
+ [2025]=2,
+ [2026]=2,
+ [2027]=5,
+ [2028]=5,
+ [2029]=5,
+ [2030]=5,
+ [2031]=5,
+ [2032]=5,
+ [2033]=5,
+ [2034]=5,
+ [2035]=5,
+ [2036]=6,
+ [2037]=6,
+ [2038]=6,
+ [2039]=6,
+ [2040]=6,
+ [2041]=6,
+ [2042]=2,
+ [2112]=3,
+ [2113]=2,
+ [2114]=2,
+ [2115]=2,
+ [2116]=2,
+ [2117]=2,
+ [2118]=3,
+ [2119]=3,
+ [2120]=2,
+ [2121]=3,
+ [2122]=2,
+ [2123]=2,
+ [2124]=2,
+ [2125]=2,
+ [2126]=2,
+ [2127]=2,
+ [2128]=2,
+ [2129]=2,
+ [2130]=2,
+ [2131]=2,
+ [2132]=3,
+ [2133]=2,
+ [2134]=4,
+ [2135]=4,
+ [2136]=4,
+ [2208]=2,
+ [2209]=2,
+ [2210]=2,
+ [2211]=2,
+ [2212]=2,
+ [2213]=2,
+ [2214]=2,
+ [2215]=2,
+ [2216]=2,
+ [2217]=2,
+ [2218]=3,
+ [2219]=3,
+ [2220]=3,
+ [2221]=4,
+ [2222]=3,
+ [2223]=2,
+ [2224]=2,
+ [2225]=3,
+ [2226]=3,
+ [2227]=2,
+ [2228]=2,
+ [6150]=4,
+ [6151]=2,
+ [6154]=2,
+ [6158]=4,
+ [6176]=2,
+ [6177]=2,
+ [6178]=2,
+ [6179]=2,
+ [6180]=2,
+ [6181]=2,
+ [6182]=2,
+ [6183]=2,
+ [6184]=2,
+ [6185]=2,
+ [6186]=2,
+ [6187]=2,
+ [6188]=2,
+ [6189]=2,
+ [6190]=2,
+ [6191]=2,
+ [6192]=2,
+ [6193]=2,
+ [6194]=2,
+ [6195]=2,
+ [6196]=2,
+ [6197]=2,
+ [6198]=2,
+ [6199]=2,
+ [6200]=2,
+ [6201]=2,
+ [6202]=2,
+ [6203]=2,
+ [6204]=2,
+ [6205]=2,
+ [6206]=2,
+ [6207]=2,
+ [6208]=2,
+ [6209]=2,
+ [6210]=2,
+ [6211]=2,
+ [6212]=2,
+ [6213]=2,
+ [6214]=2,
+ [6215]=2,
+ [6216]=2,
+ [6217]=2,
+ [6218]=2,
+ [6219]=2,
+ [6220]=2,
+ [6221]=2,
+ [6222]=2,
+ [6223]=2,
+ [6224]=2,
+ [6225]=2,
+ [6226]=2,
+ [6227]=2,
+ [6228]=2,
+ [6229]=2,
+ [6230]=2,
+ [6231]=2,
+ [6232]=2,
+ [6233]=2,
+ [6234]=2,
+ [6235]=2,
+ [6236]=2,
+ [6237]=2,
+ [6238]=2,
+ [6239]=2,
+ [6240]=2,
+ [6241]=2,
+ [6242]=2,
+ [6243]=2,
+ [6244]=2,
+ [6245]=2,
+ [6246]=2,
+ [6247]=2,
+ [6248]=2,
+ [6249]=2,
+ [6250]=2,
+ [6251]=2,
+ [6252]=2,
+ [6253]=2,
+ [6254]=2,
+ [6255]=2,
+ [6256]=2,
+ [6257]=2,
+ [6258]=2,
+ [6259]=2,
+ [6260]=2,
+ [6261]=2,
+ [6262]=2,
+ [6263]=2,
+ [6272]=4,
+ [6273]=4,
+ [6274]=4,
+ [6275]=4,
+ [6276]=4,
+ [6277]=4,
+ [6278]=4,
+ [6279]=2,
+ [6280]=2,
+ [6281]=2,
+ [6282]=2,
+ [6283]=2,
+ [6284]=2,
+ [6285]=2,
+ [6286]=2,
+ [6287]=2,
+ [6288]=2,
+ [6289]=2,
+ [6290]=2,
+ [6291]=2,
+ [6292]=2,
+ [6293]=2,
+ [6294]=2,
+ [6295]=2,
+ [6296]=2,
+ [6297]=2,
+ [6298]=2,
+ [6299]=2,
+ [6300]=2,
+ [6301]=2,
+ [6302]=2,
+ [6303]=2,
+ [6304]=2,
+ [6305]=2,
+ [6306]=2,
+ [6307]=2,
+ [6308]=2,
+ [6309]=2,
+ [6310]=2,
+ [6311]=2,
+ [6312]=2,
+ [6314]=2,
+ [8204]=4,
+ [8205]=2,
+ [8294]=4,
+ [8295]=4,
+ [8296]=4,
+ [8297]=4,
+ [43072]=2,
+ [43073]=2,
+ [43074]=2,
+ [43075]=2,
+ [43076]=2,
+ [43077]=2,
+ [43078]=2,
+ [43079]=2,
+ [43080]=2,
+ [43081]=2,
+ [43082]=2,
+ [43083]=2,
+ [43084]=2,
+ [43085]=2,
+ [43086]=2,
+ [43087]=2,
+ [43088]=2,
+ [43089]=2,
+ [43090]=2,
+ [43091]=2,
+ [43092]=2,
+ [43093]=2,
+ [43094]=2,
+ [43095]=2,
+ [43096]=2,
+ [43097]=2,
+ [43098]=2,
+ [43099]=2,
+ [43100]=2,
+ [43101]=2,
+ [43102]=2,
+ [43103]=2,
+ [43104]=2,
+ [43105]=2,
+ [43106]=2,
+ [43107]=2,
+ [43108]=2,
+ [43109]=2,
+ [43110]=2,
+ [43111]=2,
+ [43112]=2,
+ [43113]=2,
+ [43114]=2,
+ [43115]=2,
+ [43116]=2,
+ [43117]=2,
+ [43118]=2,
+ [43119]=2,
+ [43120]=2,
+ [43121]=2,
+ [43122]=1,
+ [43123]=4,
+ [68288]=2,
+ [68289]=2,
+ [68290]=2,
+ [68291]=2,
+ [68292]=2,
+ [68293]=3,
+ [68294]=4,
+ [68295]=3,
+ [68296]=4,
+ [68297]=3,
+ [68298]=3,
+ [68299]=4,
+ [68300]=4,
+ [68301]=1,
+ [68302]=3,
+ [68303]=3,
+ [68304]=3,
+ [68305]=3,
+ [68306]=3,
+ [68307]=2,
+ [68308]=2,
+ [68309]=2,
+ [68310]=2,
+ [68311]=1,
+ [68312]=2,
+ [68313]=2,
+ [68314]=2,
+ [68315]=2,
+ [68316]=2,
+ [68317]=3,
+ [68318]=2,
+ [68319]=2,
+ [68320]=2,
+ [68321]=3,
+ [68322]=4,
+ [68323]=4,
+ [68324]=3,
+ [68331]=2,
+ [68332]=2,
+ [68333]=2,
+ [68334]=2,
+ [68335]=3,
+ [68480]=2,
+ [68481]=3,
+ [68482]=2,
+ [68483]=3,
+ [68484]=3,
+ [68485]=3,
+ [68486]=2,
+ [68487]=2,
+ [68488]=2,
+ [68489]=3,
+ [68490]=2,
+ [68491]=2,
+ [68492]=3,
+ [68493]=2,
+ [68494]=3,
+ [68495]=3,
+ [68496]=2,
+ [68497]=3,
+ [68521]=3,
+ [68522]=3,
+ [68523]=3,
+ [68524]=3,
+ [68525]=2,
+ [68526]=2,
+ [68527]=4,
+}
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules={} end modules ['font-ini']={
version=1.001,
comment="companion to font-ini.mkiv",
@@ -4190,8 +5178,8 @@ end
constructors.setfactor()
function constructors.scaled(scaledpoints,designsize)
if scaledpoints<0 then
+ local factor=constructors.factor
if designsize then
- local factor=constructors.factor
if designsize>factor then
return (- scaledpoints/1000)*designsize
else
@@ -4361,6 +5349,7 @@ function constructors.scale(tfmdata,specification)
local hdelta=delta
local vdelta=delta
target.designsize=parameters.designsize
+ target.units=units
target.units_per_em=units
local direction=properties.direction or tfmdata.direction or 0
target.direction=direction
@@ -4472,21 +5461,28 @@ function constructors.scale(tfmdata,specification)
target.nomath=true
target.mathparameters=nil
end
- local italickey="italic"
- local useitalics=true
if hasmath then
- autoitalicamount=false
- elseif properties.textitalics then
- italickey="italic_correction"
- useitalics=false
- if properties.delaytextitalics then
+ local mathitalics=properties.mathitalics
+ if mathitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","math",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
+ autoitalicamount=false
+ end
+ else
+ local textitalics=properties.textitalics
+ if textitalics==false then
+ if trace_defining then
+ report_defining("%s italics %s for font %a, fullname %a, filename %a","text",hasitalics and "ignored" or "disabled",name,fullname,filename)
+ end
+ hasitalics=false
autoitalicamount=false
end
end
if trace_defining then
report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a",
- name,fullname,filename,hdelta,vdelta,
- hasmath and "enabled" or "disabled",useitalics and "enabled" or "disabled")
+ name,fullname,filename,hdelta,vdelta,hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
constructors.beforecopyingcharacters(target,tfmdata)
local sharedkerns={}
@@ -4584,22 +5580,6 @@ function constructors.scale(tfmdata,specification)
chr.right_protruding=protrusionfactor*width*vr
end
end
- if autoitalicamount then
- local vi=description.italic
- if not vi then
- local vi=description.boundingbox[3]-description.width+autoitalicamount
- if vi>0 then
- chr[italickey]=vi*hdelta
- end
- elseif vi~=0 then
- chr[italickey]=vi*hdelta
- end
- elseif hasitalics then
- local vi=description.italic
- if vi and vi~=0 then
- chr[italickey]=vi*hdelta
- end
- end
if hasmath then
local vn=character.next
if vn then
@@ -4637,7 +5617,11 @@ function constructors.scale(tfmdata,specification)
end
end
end
- local va=character.top_accent
+ local vi=character.vert_italic
+ if vi and vi~=0 then
+ chr.vert_italic=vi*hdelta
+ end
+ local va=character.accent
if va then
chr.top_accent=vdelta*va
end
@@ -4660,6 +5644,31 @@ function constructors.scale(tfmdata,specification)
chr.mathkern=kerns
end
end
+ if hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ end
+ elseif autoitalicamount then
+ local vi=description.italic
+ if not vi then
+ local bb=description.boundingbox
+ if bb then
+ local vi=bb[3]-description.width+autoitalicamount
+ if vi>0 then
+ chr.italic=vi*hdelta
+ end
+ else
+ end
+ elseif vi~=0 then
+ chr.italic=vi*hdelta
+ end
+ elseif hasitalics then
+ local vi=character.italic
+ if vi and vi~=0 then
+ chr.italic=vi*hdelta
+ end
end
if haskerns then
local vk=character.kerns
@@ -4722,6 +5731,7 @@ function constructors.scale(tfmdata,specification)
end
targetcharacters[unicode]=chr
end
+ properties.setitalics=hasitalics
constructors.aftercopyingcharacters(target,tfmdata)
constructors.trytosharefont(target,tfmdata)
return target
@@ -4762,11 +5772,20 @@ function constructors.finalize(tfmdata)
if not parameters.slantfactor then
parameters.slantfactor=tfmdata.slant or 0
end
- if not parameters.designsize then
- parameters.designsize=tfmdata.designsize or (factors.pt*10)
+ local designsize=parameters.designsize
+ if designsize then
+ parameters.minsize=tfmdata.minsize or designsize
+ parameters.maxsize=tfmdata.maxsize or designsize
+ else
+ designsize=factors.pt*10
+ parameters.designsize=designsize
+ parameters.minsize=designsize
+ parameters.maxsize=designsize
end
+ parameters.minsize=tfmdata.minsize or parameters.designsize
+ parameters.maxsize=tfmdata.maxsize or parameters.designsize
if not parameters.units then
- parameters.units=tfmdata.units_per_em or 1000
+ parameters.units=tfmdata.units or tfmdata.units_per_em or 1000
end
if not tfmdata.descriptions then
local descriptions={}
@@ -4829,6 +5848,7 @@ function constructors.finalize(tfmdata)
tfmdata.auto_protrude=nil
tfmdata.extend=nil
tfmdata.slant=nil
+ tfmdata.units=nil
tfmdata.units_per_em=nil
tfmdata.cache=nil
properties.finalized=true
@@ -5389,28 +6409,18 @@ local formatters=string.formatters
local trace_loading=false trackers.register("fonts.loading",function(v) trace_loading=v end)
local trace_mapping=false trackers.register("fonts.mapping",function(v) trace_unimapping=v end)
local report_fonts=logs.reporter("fonts","loading")
+local force_ligatures=false directives.register("fonts.mapping.forceligatures",function(v) force_ligatures=v end)
local fonts=fonts or {}
local mappings=fonts.mappings or {}
fonts.mappings=mappings
local allocate=utilities.storage.allocate
-local function loadlumtable(filename)
- local lumname=file.replacesuffix(file.basename(filename),"lum")
- local lumfile=resolvers.findfile(lumname,"map") or ""
- if lumfile~="" and lfs.isfile(lumfile) then
- if trace_loading or trace_mapping then
- report_fonts("loading map table %a",lumfile)
- end
- lumunic=dofile(lumfile)
- return lumunic,lumfile
- end
-end
local hex=R("AF","09")
-local hexfour=(hex*hex*hex*hex)/function(s) return tonumber(s,16) end
-local hexsix=(hex*hex*hex*hex*hex*hex)/function(s) return tonumber(s,16) end
+local hexfour=(hex*hex*hex^-2)/function(s) return tonumber(s,16) end
+local hexsix=(hex*hex*hex^-4)/function(s) return tonumber(s,16) end
local dec=(R("09")^1)/tonumber
local period=P(".")
-local unicode=P("uni")*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
-local ucode=P("u")*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
+local unicode=(P("uni")+P("UNI"))*(hexfour*(period+P(-1))*Cc(false)+Ct(hexfour^1)*Cc(true))
+local ucode=(P("u")+P("U") )*(hexsix*(period+P(-1))*Cc(false)+Ct(hexsix^1)*Cc(true))
local index=P("index")*dec*Cc(false)
local parser=unicode+ucode+index
local parsers={}
@@ -5429,25 +6439,22 @@ end
local f_single=formatters["%04X"]
local f_double=formatters["%04X%04X"]
local function tounicode16(unicode,name)
- if unicode<0x10000 then
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
return f_single(unicode)
- elseif unicode<0x1FFFFFFFFF then
- return f_double(floor(unicode/1024),unicode%1024+0xDC00)
else
- report_fonts("can't convert %a in %a into tounicode",unicode,name)
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
end
end
local function tounicode16sequence(unicodes,name)
local t={}
for l=1,#unicodes do
local u=unicodes[l]
- if u<0x10000 then
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
t[l]=f_single(u)
- elseif unicode<0x1FFFFFFFFF then
- t[l]=f_double(floor(u/1024),u%1024+0xDC00)
else
- report_fonts ("can't convert %a in %a into tounicode",u,name)
- return
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
end
end
return concat(t)
@@ -5457,23 +6464,20 @@ local function tounicode(unicode,name)
local t={}
for l=1,#unicode do
local u=unicode[l]
- if u<0x10000 then
+ if u<0xD7FF or (u>0xDFFF and u<=0xFFFF) then
t[l]=f_single(u)
- elseif u<0x1FFFFFFFFF then
- t[l]=f_double(floor(u/1024),u%1024+0xDC00)
else
- report_fonts ("can't convert %a in %a into tounicode",u,name)
- return
+ u=u-0x10000
+ t[l]=f_double(floor(u/1024)+0xD800,u%1024+0xDC00)
end
end
return concat(t)
else
- if unicode<0x10000 then
+ if unicode<0xD7FF or (unicode>0xDFFF and unicode<=0xFFFF) then
return f_single(unicode)
- elseif unicode<0x1FFFFFFFFF then
- return f_double(floor(unicode/1024),unicode%1024+0xDC00)
else
- report_fonts("can't convert %a in %a into tounicode",unicode,name)
+ unicode=unicode-0x10000
+ return f_double(floor(unicode/1024)+0xD800,unicode%1024+0xDC00)
end
end
end
@@ -5482,10 +6486,9 @@ local function fromunicode16(str)
return tonumber(str,16)
else
local l,r=match(str,"(....)(....)")
- return (tonumber(l,16))*0x400+tonumber(r,16)-0xDC00
+ return 0x10000+(tonumber(l,16)-0xD800)*0x400+tonumber(r,16)-0xDC00
end
end
-mappings.loadlumtable=loadlumtable
mappings.makenameparser=makenameparser
mappings.tounicode=tounicode
mappings.tounicode16=tounicode16
@@ -5516,243 +6519,194 @@ for k,v in next,overloads do
end
end
mappings.overloads=overloads
-function mappings.addtounicode(data,filename)
+function mappings.addtounicode(data,filename,checklookups)
local resources=data.resources
- local properties=data.properties
- local descriptions=data.descriptions
local unicodes=resources.unicodes
- local lookuptypes=resources.lookuptypes
if not unicodes then
return
end
+ local properties=data.properties
+ local descriptions=data.descriptions
unicodes['space']=unicodes['space'] or 32
unicodes['hyphen']=unicodes['hyphen'] or 45
unicodes['zwj']=unicodes['zwj'] or 0x200D
unicodes['zwnj']=unicodes['zwnj'] or 0x200C
- local private=fonts.constructors.privateoffset
- local unicodevector=fonts.encodings.agl.unicodes
+ local private=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+ local unicodevector=fonts.encodings.agl.unicodes or {}
+ local contextvector=fonts.encodings.agl.ctxcodes or {}
local missing={}
- local lumunic,uparser,oparser
- local cidinfo,cidnames,cidcodes,usedmap
- cidinfo=properties.cidinfo
- usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local nofmissing=0
+ local oparser=nil
+ local cidnames=nil
+ local cidcodes=nil
+ local cidinfo=properties.cidinfo
+ local usedmap=cidinfo and fonts.cid.getmap(cidinfo)
+ local uparser=makenameparser()
if usedmap then
- oparser=usedmap and makenameparser(cidinfo.ordering)
- cidnames=usedmap.names
- cidcodes=usedmap.unicodes
+ oparser=usedmap and makenameparser(cidinfo.ordering)
+ cidnames=usedmap.names
+ cidcodes=usedmap.unicodes
end
- uparser=makenameparser()
- local ns,nl=0,0
+ local ns=0
+ local nl=0
for unic,glyph in next,descriptions do
- local index=glyph.index
local name=glyph.name
- local r=overloads[name]
- if r then
- glyph.unicode=r.unicode
- elseif unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
- local unicode=lumunic and lumunic[name] or unicodevector[name]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- end
- if (not unicode) and usedmap then
- local foundindex=lpegmatch(oparser,name)
- if foundindex then
- unicode=cidcodes[foundindex]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- else
- local reference=cidnames[foundindex]
- if reference then
- local foundindex=lpegmatch(oparser,reference)
- if foundindex then
- unicode=cidcodes[foundindex]
- if unicode then
- glyph.unicode=unicode
- ns=ns+1
- end
- end
- if not unicode or unicode=="" then
- local foundcodes,multiple=lpegmatch(uparser,reference)
- if foundcodes then
- glyph.unicode=foundcodes
- if multiple then
- nl=nl+1
- unicode=true
- else
+ if name then
+ local index=glyph.index
+ local r=overloads[name]
+ if r then
+ glyph.unicode=r.unicode
+ elseif not unic or unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
+ local unicode=unicodevector[name] or contextvector[name]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ end
+ if (not unicode) and usedmap then
+ local foundindex=lpegmatch(oparser,name)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
+ ns=ns+1
+ else
+ local reference=cidnames[foundindex]
+ if reference then
+ local foundindex=lpegmatch(oparser,reference)
+ if foundindex then
+ unicode=cidcodes[foundindex]
+ if unicode then
+ glyph.unicode=unicode
ns=ns+1
- unicode=foundcodes
+ end
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,reference)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
+ end
end
end
end
end
end
end
- end
- if not unicode or unicode=="" then
- local split=lpegmatch(namesplitter,name)
- local nsplit=split and #split or 0
- local t,n={},0
- unicode=true
- for l=1,nsplit do
- local base=split[l]
- local u=unicodes[base] or unicodevector[base]
- if not u then
- break
- elseif type(u)=="table" then
- if u[1]>=private then
- unicode=false
- break
+ if not unicode or unicode=="" then
+ local split=lpegmatch(namesplitter,name)
+ local nsplit=split and #split or 0
+ if nsplit==0 then
+ elseif nsplit==1 then
+ local base=split[1]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ elseif type(u)=="table" then
+ if u[1]<private then
+ unicode=u
+ glyph.unicode=unicode
+ end
+ elseif u<private then
+ unicode=u
+ glyph.unicode=unicode
end
- n=n+1
- t[n]=u[1]
else
- if u>=private then
- unicode=false
- break
+ local t,n={},0
+ for l=1,nsplit do
+ local base=split[l]
+ local u=unicodes[base] or unicodevector[base] or contextvector[name]
+ if not u then
+ break
+ elseif type(u)=="table" then
+ if u[1]>=private then
+ break
+ end
+ n=n+1
+ t[n]=u[1]
+ else
+ if u>=private then
+ break
+ end
+ n=n+1
+ t[n]=u
+ end
+ end
+ if n>0 then
+ if n==1 then
+ unicode=t[1]
+ else
+ unicode=t
+ end
+ glyph.unicode=unicode
+ end
+ end
+ nl=nl+1
+ end
+ if not unicode or unicode=="" then
+ local foundcodes,multiple=lpegmatch(uparser,name)
+ if foundcodes then
+ glyph.unicode=foundcodes
+ if multiple then
+ nl=nl+1
+ unicode=true
+ else
+ ns=ns+1
+ unicode=foundcodes
end
- n=n+1
- t[n]=u
end
end
- if n==0 then
- elseif n==1 then
- glyph.unicode=t[1]
- else
- glyph.unicode=t
+ local r=overloads[unicode]
+ if r then
+ unicode=r.unicode
+ glyph.unicode=unicode
end
- nl=nl+1
- end
- if not unicode or unicode=="" then
- local foundcodes,multiple=lpegmatch(uparser,name)
- if foundcodes then
- glyph.unicode=foundcodes
- if multiple then
- nl=nl+1
- unicode=true
- else
- ns=ns+1
- unicode=foundcodes
- end
+ if not unicode then
+ missing[unic]=true
+ nofmissing=nofmissing+1
end
end
- local r=overloads[unicode]
- if r then
- unicode=r.unicode
- glyph.unicode=unicode
- end
- if not unicode then
- missing[name]=true
- end
+ else
end
end
- if next(missing) then
- local guess={}
- local function check(gname,code,unicode)
- local description=descriptions[code]
- local variant=description.name
- if variant==gname then
- return
- end
- local unic=unicodes[variant]
- if unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then
- else
- return
- end
- if descriptions[code].unicode then
- return
- end
- local g=guess[variant]
- if g then
- g[gname]=unicode
- else
- guess[variant]={ [gname]=unicode }
- end
- end
- for unicode,description in next,descriptions do
- local slookups=description.slookups
- if slookups then
- local gname=description.name
- for tag,data in next,slookups do
- local lookuptype=lookuptypes[tag]
- if lookuptype=="alternate" then
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- elseif lookuptype=="substitution" then
- check(gname,data,unicode)
- end
- end
- end
- local mlookups=description.mlookups
- if mlookups then
- local gname=description.name
- for tag,list in next,mlookups do
- local lookuptype=lookuptypes[tag]
- if lookuptype=="alternate" then
- for i=1,#list do
- local data=list[i]
- for i=1,#data do
- check(gname,data[i],unicode)
- end
- end
- elseif lookuptype=="substitution" then
- for i=1,#list do
- check(gname,list[i],unicode)
- end
- end
+ if type(checklookups)=="function" then
+ checklookups(data,missing,nofmissing)
+ end
+ local collected=false
+ local unicoded=0
+ for unicode,glyph in next,descriptions do
+ if glyph.class=="ligature" and (force_ligatures or not glyph.unicode) then
+ if not collected then
+ collected=fonts.handlers.otf.readers.getcomponents(data)
+ if not collected then
+ break
end
end
- end
- local done=true
- while done do
- done=false
- for k,v in next,guess do
- if type(v)~="number" then
- for kk,vv in next,v do
- if vv==-1 or vv>=private or (vv>=0xE000 and vv<=0xF8FF) or vv==0xFFFE or vv==0xFFFF then
- local uu=guess[kk]
- if type(uu)=="number" then
- guess[k]=uu
- done=true
- end
- else
- guess[k]=vv
- done=true
- end
+ local u=collected[unicode]
+ if u then
+ local n=#u
+ for i=1,n do
+ if u[i]>private then
+ n=0
+ break
end
end
- end
- end
- local orphans=0
- local guessed=0
- for k,v in next,guess do
- if type(v)=="number" then
- descriptions[unicodes[k]].unicode=descriptions[v].unicode or v
- guessed=guessed+1
- else
- local t=nil
- local l=lower(k)
- local u=unicodes[l]
- if not u then
- orphans=orphans+1
- elseif u==-1 or u>=private or (u>=0xE000 and u<=0xF8FF) or u==0xFFFE or u==0xFFFF then
- local unicode=descriptions[u].unicode
- if unicode then
- descriptions[unicodes[k]].unicode=unicode
- guessed=guessed+1
+ if n>0 then
+ if n>1 then
+ glyph.unicode=u
else
- orphans=orphans+1
+ glyph.unicode=u[1]
end
- else
- orphans=orphans+1
+ unicoded=unicoded+1
end
end
end
- if trace_loading and orphans>0 or guessed>0 then
- report_fonts("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans)
- end
+ end
+ if trace_mapping and unicoded>0 then
+ report_fonts("%n ligature tounicode mappings deduced from gsub ligature features",unicoded)
end
if trace_mapping then
for unic,glyph in table.sortedhash(descriptions) do
@@ -5798,10 +6752,9 @@ local fonts=fonts
fonts.names=fonts.names or {}
fonts.names.version=1.001
fonts.names.basename="luatex-fonts-names"
-fonts.names.new_to_old={}
-fonts.names.old_to_new={}
fonts.names.cache=containers.define("fonts","data",fonts.names.version,true)
-local data,loaded=nil,false
+local data=nil
+local loaded=false
local fileformats={ "lua","tex","other text files" }
function fonts.names.reportmissingbase()
texio.write("<missing font database, run: mtxrun --script fonts --reload --simple>")
@@ -5881,10 +6834,14 @@ local readers=fonts.readers
local constructors=fonts.constructors
local encodings=fonts.encodings
local tfm=constructors.newhandler("tfm")
+tfm.version=1.000
+tfm.maxnestingdepth=5
+tfm.maxnestingsize=65536*1024
local tfmfeatures=constructors.newfeatures("tfm")
local registertfmfeature=tfmfeatures.register
constructors.resolvevirtualtoo=false
-fonts.formats.tfm="type1"
+fonts.formats.tfm="type1"
+fonts.formats.ofm="type1"
function tfm.setfeatures(tfmdata,features)
local okay=constructors.initializefeatures("tfm",tfmdata,features,trace_features,report_tfm)
if okay then
@@ -5893,9 +6850,11 @@ function tfm.setfeatures(tfmdata,features)
return {}
end
end
+local depth={}
local function read_from_tfm(specification)
local filename=specification.filename
local size=specification.size
+ depth[filename]=(depth[filename] or 0)+1
if trace_defining then
report_defining("loading tfm file %a at size %s",filename,size)
end
@@ -5939,6 +6898,25 @@ local function read_from_tfm(specification)
end
properties.virtualized=true
tfmdata.fonts=vfdata.fonts
+ tfmdata.type="virtual"
+ local fontlist=vfdata.fonts
+ local name=file.nameonly(filename)
+ for i=1,#fontlist do
+ local n=fontlist[i].name
+ local s=fontlist[i].size
+ local d=depth[filename]
+ s=constructors.scaled(s,vfdata.designsize)
+ if d>tfm.maxnestingdepth then
+ report_defining("too deeply nested virtual font %a with size %a, max nesting depth %s",n,s,tfm.maxnestingdepth)
+ fontlist[i]={ id=0 }
+ elseif (d>1) and (s>tfm.maxnestingsize) then
+ report_defining("virtual font %a exceeds size %s",n,s)
+ fontlist[i]={ id=0 }
+ else
+ local t,id=fonts.constructors.readanddefine(n,s)
+ fontlist[i]={ id=id }
+ end
+ end
end
end
end
@@ -5951,10 +6929,13 @@ local function read_from_tfm(specification)
end
end
properties.haskerns=true
- properties.haslogatures=true
+ properties.hasligatures=true
resources.unicodes={}
resources.lookuptags={}
+ depth[filename]=depth[filename]-1
return tfmdata
+ else
+ depth[filename]=depth[filename]-1
end
end
local function check_tfm(specification,fullname)
@@ -5986,6 +6967,7 @@ function readers.tfm(specification)
end
return check_tfm(specification,fullname)
end
+readers.ofm=readers.tfm
end -- closure
@@ -6000,9 +6982,11 @@ if not modules then modules={} end modules ['font-afm']={
}
local fonts,logs,trackers,containers,resolvers=fonts,logs,trackers,containers,resolvers
local next,type,tonumber=next,type,tonumber
-local format,match,gmatch,lower,gsub,strip=string.format,string.match,string.gmatch,string.lower,string.gsub,string.strip
-local abs=math.abs
-local P,S,C,R,lpegmatch,patterns=lpeg.P,lpeg.S,lpeg.C,lpeg.R,lpeg.match,lpeg.patterns
+local match,gmatch,lower,gsub,strip,find=string.match,string.gmatch,string.lower,string.gsub,string.strip,string.find
+local char,byte,sub=string.char,string.byte,string.sub
+local abs,mod=math.abs,math.mod
+local bxor,rshift=bit32.bxor,bit32.rshift
+local P,S,R,Cmt,C,Ct,Cs,lpegmatch,patterns=lpeg.P,lpeg.S,lpeg.R,lpeg.Cmt,lpeg.C,lpeg.Ct,lpeg.Cs,lpeg.match,lpeg.patterns
local derivetable=table.derive
local trace_features=false trackers.register("afm.features",function(v) trace_features=v end)
local trace_indexing=false trackers.register("afm.indexing",function(v) trace_indexing=v end)
@@ -6014,10 +6998,6 @@ local findbinfile=resolvers.findbinfile
local definers=fonts.definers
local readers=fonts.readers
local constructors=fonts.constructors
-local fontloader=fontloader
-local font_to_table=fontloader.to_table
-local open_font=fontloader.open
-local close_font=fontloader.close
local afm=constructors.newhandler("afm")
local pfb=constructors.newhandler("pfb")
local afmfeatures=constructors.newfeatures("afm")
@@ -6067,7 +7047,7 @@ local keys={}
function keys.FontName (data,line) data.metadata.fontname=strip (line)
data.metadata.fullname=strip (line) end
function keys.ItalicAngle (data,line) data.metadata.italicangle=tonumber (line) end
-function keys.IsFixedPitch(data,line) data.metadata.isfixedpitch=toboolean(line,true) end
+function keys.IsFixedPitch(data,line) data.metadata.monospaced=toboolean(line,true) end
function keys.CharWidth (data,line) data.metadata.charwidth=tonumber (line) end
function keys.XHeight (data,line) data.metadata.xheight=tonumber (line) end
function keys.Descender (data,line) data.metadata.descender=tonumber (line) end
@@ -6131,39 +7111,140 @@ local function get_variables(data,fontmetrics)
end
end
end
-local function get_indexes(data,pfbname)
- data.resources.filename=resolvers.unresolve(pfbname)
- local pfbblob=open_font(pfbname)
- if pfbblob then
- local characters=data.characters
- local pfbdata=font_to_table(pfbblob)
- if pfbdata then
- local glyphs=pfbdata.glyphs
- if glyphs then
- if trace_loading then
- report_afm("getting index data from %a",pfbname)
- end
- for index,glyph in next,glyphs do
- local name=glyph.name
- if name then
- local char=characters[name]
- if char then
- if trace_indexing then
- report_afm("glyph %a has index %a",name,index)
+local get_indexes
+do
+ local fontloader=fontloader
+ if fontloader then
+ local font_to_table=fontloader.to_table
+ local open_font=fontloader.open
+ local close_font=fontloader.close
+ local function get_indexes_old(data,pfbname)
+ local pfbblob=open_font(pfbname)
+ if pfbblob then
+ local characters=data.characters
+ local pfbdata=font_to_table(pfbblob)
+ if pfbdata then
+ local glyphs=pfbdata.glyphs
+ if glyphs then
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index,glyph in next,glyphs do
+ local name=glyph.name
+ if name then
+ local char=characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index=index
+ end
end
- char.index=index
end
+ elseif trace_loading then
+ report_afm("no glyph data in pfb file %a",pfbname)
end
+ elseif trace_loading then
+ report_afm("no data in pfb file %a",pfbname)
end
+ close_font(pfbblob)
elseif trace_loading then
- report_afm("no glyph data in pfb file %a",pfbname)
+ report_afm("invalid pfb file %a",pfbname)
+ end
+ end
+ end
+ local n,m
+ local progress=function(str,position,name,size)
+ local forward=position+tonumber(size)+3+2
+ n=n+1
+ if n>=m then
+ return #str,name
+ elseif forward<#str then
+ return forward,name
+ else
+ return #str,name
+ end
+ end
+ local initialize=function(str,position,size)
+ n=0
+ m=tonumber(size)
+ return position+1
+ end
+ local charstrings=P("/CharStrings")
+ local name=P("/")*C((R("az")+R("AZ")+R("09")+S("-_."))^1)
+ local size=C(R("09")^1)
+ local spaces=P(" ")^1
+ local p_filternames=Ct (
+ (1-charstrings)^0*charstrings*spaces*Cmt(size,initialize)*(Cmt(name*P(" ")^1*C(R("09")^1),progress)+P(1))^1
+ )
+ local decrypt
+ do
+ local r,c1,c2,n=0,0,0,0
+ local function step(c)
+ local cipher=byte(c)
+ local plain=bxor(cipher,rshift(r,8))
+ r=mod((cipher+r)*c1+c2,65536)
+ return char(plain)
+ end
+ decrypt=function(binary)
+ r,c1,c2,n=55665,52845,22719,4
+ binary=gsub(binary,".",step)
+ return sub(binary,n+1)
+ end
+ end
+ local function loadpfbvector(filename)
+ local data=io.loaddata(resolvers.findfile(filename))
+ if not find(data,"!PS%-AdobeFont%-") then
+ print("no font",filename)
+ return
+ end
+ if not data then
+ print("no data",filename)
+ return
+ end
+ local ascii,binary=match(data,"(.*)eexec%s+......(.*)")
+ if not binary then
+ print("no binary",filename)
+ return
+ end
+ binary=decrypt(binary,4)
+ local vector=lpegmatch(p_filternames,binary)
+ vector[0]=table.remove(vector,1)
+ if not vector then
+ print("no vector",filename)
+ return
+ end
+ return vector
+ end
+ get_indexes=function(data,pfbname)
+ local vector=loadpfbvector(pfbname)
+ if vector then
+ local characters=data.characters
+ if trace_loading then
+ report_afm("getting index data from %a",pfbname)
+ end
+ for index=1,#vector do
+ local name=vector[index]
+ local char=characters[name]
+ if char then
+ if trace_indexing then
+ report_afm("glyph %a has index %a",name,index)
+ end
+ char.index=index
+ end
+ end
+ end
+ end
+ if fontloader then
+ afm.use_new_indexer=true
+ get_indexes_new=get_indexes
+ get_indexes=function(data,pfbname)
+ if afm.use_new_indexer then
+ return get_indexes_new(data,pfbname)
+ else
+ return get_indexes_old(data,pfbname)
end
- elseif trace_loading then
- report_afm("no data in pfb file %a",pfbname)
end
- close_font(pfbblob)
- elseif trace_loading then
- report_afm("invalid pfb file %a",pfbname)
end
end
local function readafm(filename)
@@ -6242,6 +7323,7 @@ function afm.load(filename)
data=readafm(filename)
if data then
if pfbname~="" then
+ data.resources.filename=resolvers.unresolve(pfbname)
get_indexes(data,pfbname)
elseif trace_loading then
report_afm("no pfb file for %a",filename)
@@ -6489,7 +7571,7 @@ local function copytotfm(data)
local emdash=0x2014
local spacer="space"
local spaceunits=500
- local monospaced=metadata.isfixedpitch
+ local monospaced=metadata.monospaced
local charwidth=metadata.charwidth
local italicangle=metadata.italicangle
local charxheight=metadata.xheight and metadata.xheight>0 and metadata.xheight
@@ -7014,46 +8096,6 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['luatex-fonts-tfm']={
- version=1.001,
- comment="companion to luatex-*.tex",
- author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright="PRAGMA ADE / ConTeXt Development Team",
- license="see context related readme files"
-}
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
-local fonts=fonts
-local tfm={}
-fonts.handlers.tfm=tfm
-fonts.formats.tfm="type1"
-function fonts.readers.tfm(specification)
- local fullname=specification.filename or ""
- if fullname=="" then
- local forced=specification.forced or ""
- if forced~="" then
- fullname=specification.name.."."..forced
- else
- fullname=specification.name
- end
- end
- local foundname=resolvers.findbinfile(fullname,'tfm') or ""
- if foundname=="" then
- foundname=resolvers.findbinfile(fullname,'ofm') or ""
- end
- if foundname~="" then
- specification.filename=foundname
- specification.format="ofm"
- return font.read_tfm(specification.filename,specification.size)
- end
-end
-
-end -- closure
-
-do -- begin closure to overcome local limits and interference
-
if not modules then modules={} end modules ['font-oti']={
version=1.001,
comment="companion to font-ini.mkiv",
@@ -7066,8 +8108,9 @@ local fonts=fonts
local constructors=fonts.constructors
local otf=constructors.newhandler("otf")
local otffeatures=constructors.newfeatures("otf")
-local otftables=otf.tables
local registerotffeature=otffeatures.register
+local otftables=otf.tables or {}
+otf.tables=otftables
local allocate=utilities.storage.allocate
registerotffeature {
name="features",
@@ -7131,1310 +8174,5783 @@ registerotffeature {
node=setscript,
}
}
+otftables.featuretypes=allocate {
+ gpos_single="position",
+ gpos_pair="position",
+ gpos_cursive="position",
+ gpos_mark2base="position",
+ gpos_mark2ligature="position",
+ gpos_mark2mark="position",
+ gpos_context="position",
+ gpos_contextchain="position",
+ gsub_single="substitution",
+ gsub_multiple="substitution",
+ gsub_alternate="substitution",
+ gsub_ligature="substitution",
+ gsub_context="substitution",
+ gsub_contextchain="substitution",
+ gsub_reversecontextchain="substitution",
+ gsub_reversesub="substitution",
+}
+function otffeatures.checkeddefaultscript(featuretype,autoscript,scripts)
+ if featuretype=="position" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="position" or autoscript==true then
+ return default
+ else
+ report_otf("script feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=scripts.dflt
+ if default then
+ if autoscript=="substitution" or autoscript==true then
+ return default
+ end
+ end
+ end
+end
+function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
+ if featuretype=="position" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="position" or autolanguage==true then
+ return default
+ else
+ report_otf("language feature %s not applied, enable default positioning")
+ end
+ else
+ end
+ elseif featuretype=="substitution" then
+ local default=languages.dflt
+ if default then
+ if autolanguage=="substitution" or autolanguage==true then
+ return default
+ end
+ end
+ end
+end
end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-otf']={
+if not modules then modules={} end modules ['font-otr']={
version=1.001,
comment="companion to font-ini.mkiv",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local utfbyte=utf.byte
-local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
-local type,next,tonumber,tostring=type,next,tonumber,tostring
-local abs=math.abs
-local insert=table.insert
+local next,type,unpack=next,type,unpack
+local byte,lower,char,strip,gsub=string.byte,string.lower,string.char,string.strip,string.gsub
+local bittest=bit32.btest
+local concat,remove,unpack,fastcopy=table.concat,table.remov,table.unpack,table.fastcopy
+local floor,mod,abs,sqrt,round=math.floor,math.mod,math.abs,math.sqrt,math.round
+local P,R,S,C,Cs,Cc,Ct,Carg,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Carg,lpeg.Cmt
local lpegmatch=lpeg.match
-local reversed,concat,remove,sortedkeys=table.reversed,table.concat,table.remove,table.sortedkeys
-local ioflush=io.flush
-local fastcopy,tohash,derivetable=table.fastcopy,table.tohash,table.derive
-local formatters=string.formatters
-local P,R,S,C,Ct,lpegmatch=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Ct,lpeg.match
local setmetatableindex=table.setmetatableindex
-local allocate=utilities.storage.allocate
-local registertracker=trackers.register
-local registerdirective=directives.register
-local starttiming=statistics.starttiming
-local stoptiming=statistics.stoptiming
-local elapsedtime=statistics.elapsedtime
-local findbinfile=resolvers.findbinfile
-local trace_private=false registertracker("otf.private",function(v) trace_private=v end)
-local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end)
-local trace_features=false registertracker("otf.features",function(v) trace_features=v end)
-local trace_dynamics=false registertracker("otf.dynamics",function(v) trace_dynamics=v end)
-local trace_sequences=false registertracker("otf.sequences",function(v) trace_sequences=v end)
-local trace_markwidth=false registertracker("otf.markwidth",function(v) trace_markwidth=v end)
-local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end)
-local compact_lookups=true registertracker("otf.compactlookups",function(v) compact_lookups=v end)
-local purge_names=true registertracker("otf.purgenames",function(v) purge_names=v end)
-local report_otf=logs.reporter("fonts","otf loading")
-local fonts=fonts
-local otf=fonts.handlers.otf
-otf.glists={ "gsub","gpos" }
-otf.version=2.803
-otf.cache=containers.define("fonts","otf",otf.version,true)
-local hashes=fonts.hashes
-local definers=fonts.definers
-local readers=fonts.readers
-local constructors=fonts.constructors
-local fontdata=hashes and hashes.identifiers
-local chardata=characters and characters.data
-local otffeatures=constructors.newfeatures("otf")
-local registerotffeature=otffeatures.register
-local enhancers=allocate()
-otf.enhancers=enhancers
-local patches={}
-enhancers.patches=patches
-local forceload=false
-local cleanup=0
-local packdata=true
-local syncspace=true
-local forcenotdef=false
-local includesubfonts=false
-local overloadkerns=false
-local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
-local wildcard="*"
-local default="dflt"
-local fontloader=fontloader
-local open_font=fontloader.open
-local close_font=fontloader.close
-local font_fields=fontloader.fields
-local apply_featurefile=fontloader.apply_featurefile
-local mainfields=nil
-local glyphfields=nil
-local formats=fonts.formats
-formats.otf="opentype"
-formats.ttf="truetype"
-formats.ttc="truetype"
-formats.dfont="truetype"
-registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end)
-registerdirective("fonts.otf.loader.force",function(v) forceload=v end)
-registerdirective("fonts.otf.loader.pack",function(v) packdata=v end)
-registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end)
-registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end)
-registerdirective("fonts.otf.loader.overloadkerns",function(v) overloadkerns=v end)
-function otf.fileformat(filename)
- local leader=lower(io.loadchunk(filename,4))
- local suffix=lower(file.suffix(filename))
- if leader=="otto" then
- return formats.otf,suffix=="otf"
- elseif leader=="ttcf" then
- return formats.ttc,suffix=="ttc"
- elseif suffix=="ttc" then
- return formats.ttc,true
- elseif suffix=="dfont" then
- return formats.dfont,true
- else
- return formats.ttf,suffix=="ttf"
- end
-end
-local function otf_format(filename)
- local format,okay=otf.fileformat(filename)
- if not okay then
- report_otf("font %a is actually an %a file",filename,format)
- end
- return format
-end
-local function load_featurefile(raw,featurefile)
- if featurefile and featurefile~="" then
- if trace_loading then
- report_otf("using featurefile %a",featurefile)
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local stripstring=string.strip
+local utf16_to_utf8_be=utf.utf16_to_utf8_be
+local report=logs.reporter("otf reader")
+local trace_cmap=false
+fonts=fonts or {}
+local handlers=fonts.handlers or {}
+fonts.handlers=handlers
+local otf=handlers.otf or {}
+handlers.otf=otf
+local readers=otf.readers or {}
+otf.readers=readers
+local streamreader=utilities.files
+readers.streamreader=streamreader
+local openfile=streamreader.open
+local closefile=streamreader.close
+local skipbytes=streamreader.skip
+local setposition=streamreader.setposition
+local skipshort=streamreader.skipshort
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local readchar=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local readlong=streamreader.readinteger4
+local readfixed=streamreader.readfixed4
+local readfword=readshort
+local readufword=readushort
+local readoffset=readushort
+local read2dot14=streamreader.read2dot14
+function streamreader.readtag(f)
+ return lower(strip(readstring(f,4)))
+end
+local function readlongdatetime(f)
+ local a,b,c,d,e,f,g,h=readbytes(f,8)
+ return 0x100000000*d+0x1000000*e+0x10000*f+0x100*g+h
+end
+local tableversion=0.004
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+readers.tableversion=tableversion
+local reportedskipped={}
+local function reportskippedtable(tag)
+ if not reportedskipped[tag] then
+ report("loading of table %a skipped (reported once only)",tag)
+ reportedskipped[tag]=true
+ end
+end
+local reservednames={ [0]="copyright",
+ "family",
+ "subfamily",
+ "uniqueid",
+ "fullname",
+ "version",
+ "postscriptname",
+ "trademark",
+ "manufacturer",
+ "designer",
+ "description",
+ "vendorurl",
+ "designerurl",
+ "license",
+ "licenseurl",
+ "reserved",
+ "typographicfamily",
+ "typographicsubfamily",
+ "compatiblefullname",
+ "sampletext",
+ "cidfindfontname",
+ "wwsfamily",
+ "wwssubfamily",
+ "lightbackgroundpalette",
+ "darkbackgroundpalette",
+}
+local platforms={ [0]="unicode",
+ "macintosh",
+ "iso",
+ "windows",
+ "custom",
+}
+local encodings={
+ unicode={ [0]="unicode 1.0 semantics",
+ "unicode 1.1 semantics",
+ "iso/iec 10646",
+ "unicode 2.0 bmp",
+ "unicode 2.0 full",
+ "unicode variation sequences",
+ "unicode full repertoire",
+ },
+ macintosh={ [0]="roman","japanese","chinese (traditional)","korean","arabic","hebrew","greek","russian",
+ "rsymbol","devanagari","gurmukhi","gujarati","oriya","bengali","tamil","telugu","kannada",
+ "malayalam","sinhalese","burmese","khmer","thai","laotian","georgian","armenian",
+ "chinese (simplified)","tibetan","mongolian","geez","slavic","vietnamese","sindhi",
+ "uninterpreted",
+ },
+ iso={ [0]="7-bit ascii",
+ "iso 10646",
+ "iso 8859-1",
+ },
+ windows={ [0]="symbol",
+ "unicode bmp",
+ "shiftjis",
+ "prc",
+ "big5",
+ "wansung",
+ "johab",
+ "reserved 7",
+ "reserved 8",
+ "reserved 9",
+ "unicode ucs-4",
+ },
+ custom={
+ }
+}
+local decoders={
+ unicode={},
+ macintosh={},
+ iso={},
+ windows={
+ ["unicode semantics"]=utf16_to_utf8_be,
+ ["unicode bmp"]=utf16_to_utf8_be,
+ ["unicode full"]=utf16_to_utf8_be,
+ ["unicode 1.0 semantics"]=utf16_to_utf8_be,
+ ["unicode 1.1 semantics"]=utf16_to_utf8_be,
+ ["unicode 2.0 bmp"]=utf16_to_utf8_be,
+ ["unicode 2.0 full"]=utf16_to_utf8_be,
+ ["unicode variation sequences"]=utf16_to_utf8_be,
+ ["unicode full repertoire"]=utf16_to_utf8_be,
+ },
+ custom={},
+}
+local languages={
+ unicode={
+ [ 0]="english",
+ },
+ macintosh={
+ [ 0]="english",
+ },
+ iso={},
+ windows={
+ [0x0409]="english - united states",
+ },
+ custom={},
+}
+local standardromanencoding={ [0]=
+ "notdef",".null","nonmarkingreturn","space","exclam","quotedbl",
+ "numbersign","dollar","percent","ampersand","quotesingle","parenleft",
+ "parenright","asterisk","plus","comma","hyphen","period","slash",
+ "zero","one","two","three","four","five","six","seven","eight",
+ "nine","colon","semicolon","less","equal","greater","question","at",
+ "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
+ "P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft",
+ "backslash","bracketright","asciicircum","underscore","grave","a","b",
+ "c","d","e","f","g","h","i","j","k","l","m","n","o","p","q",
+ "r","s","t","u","v","w","x","y","z","braceleft","bar",
+ "braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute",
+ "Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex",
+ "adieresis","atilde","aring","ccedilla","eacute","egrave",
+ "ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis",
+ "ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute",
+ "ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling",
+ "section","bullet","paragraph","germandbls","registered","copyright",
+ "trademark","acute","dieresis","notequal","AE","Oslash","infinity",
+ "plusminus","lessequal","greaterequal","yen","mu","partialdiff",
+ "summation","product","pi","integral","ordfeminine","ordmasculine",
+ "Omega","ae","oslash","questiondown","exclamdown","logicalnot",
+ "radical","florin","approxequal","Delta","guillemotleft",
+ "guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde",
+ "Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright",
+ "quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis",
+ "fraction","currency","guilsinglleft","guilsinglright","fi","fl",
+ "daggerdbl","periodcentered","quotesinglbase","quotedblbase",
+ "perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave",
+ "Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex",
+ "apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi",
+ "circumflex","tilde","macron","breve","dotaccent","ring","cedilla",
+ "hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron",
+ "Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn",
+ "thorn","minus","multiply","onesuperior","twosuperior","threesuperior",
+ "onehalf","onequarter","threequarters","franc","Gbreve","gbreve",
+ "Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron",
+ "dcroat",
+}
+local weights={
+ [100]="thin",
+ [200]="extralight",
+ [300]="light",
+ [400]="normal",
+ [500]="medium",
+ [600]="semibold",
+ [700]="bold",
+ [800]="extrabold",
+ [900]="black",
+}
+local widths={
+ [1]="ultracondensed",
+ [2]="extracondensed",
+ [3]="condensed",
+ [4]="semicondensed",
+ [5]="normal",
+ [6]="semiexpanded",
+ [7]="expanded",
+ [8]="extraexpanded",
+ [9]="ultraexpanded",
+}
+setmetatableindex(weights,function(t,k)
+ local r=floor((k+50)/100)*100
+ local v=(r>900 and "black") or rawget(t,r) or "normal"
+ return v
+end)
+setmetatableindex(widths,function(t,k)
+ return "normal"
+end)
+local panoseweights={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="verylight",
+ [ 3]="light",
+ [ 4]="thin",
+ [ 5]="book",
+ [ 6]="medium",
+ [ 7]="demi",
+ [ 8]="bold",
+ [ 9]="heavy",
+ [10]="black",
+}
+local panosewidths={
+ [ 0]="normal",
+ [ 1]="normal",
+ [ 2]="normal",
+ [ 3]="normal",
+ [ 4]="normal",
+ [ 5]="expanded",
+ [ 6]="condensed",
+ [ 7]="veryexpanded",
+ [ 8]="verycondensed",
+ [ 9]="monospaced",
+}
+local platformnames={
+ postscriptname=true,
+ fullname=true,
+ family=true,
+ subfamily=true,
+ typographicfamily=true,
+ typographicsubfamily=true,
+ compatiblefullname=true,
+}
+function readers.name(f,fontdata,specification)
+ local datatable=fontdata.tables.name
+ if datatable then
+ setposition(f,datatable.offset)
+ local format=readushort(f)
+ local nofnames=readushort(f)
+ local offset=readushort(f)
+ local start=datatable.offset+offset
+ local namelists={
+ unicode={},
+ windows={},
+ macintosh={},
+ }
+ for i=1,nofnames do
+ local platform=platforms[readushort(f)]
+ if platform then
+ local namelist=namelists[platform]
+ if namelist then
+ local encoding=readushort(f)
+ local language=readushort(f)
+ local encodings=encodings[platform]
+ local languages=languages[platform]
+ if encodings and languages then
+ local encoding=encodings[encoding]
+ local language=languages[language]
+ if encoding and language then
+ local name=reservednames[readushort(f)]
+ if name then
+ namelist[#namelist+1]={
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ name=name,
+ length=readushort(f),
+ offset=start+readushort(f),
+ }
+ else
+ skipshort(f,2)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,3)
+ end
+ else
+ skipshort(f,5)
+ end
+ else
+ skipshort(f,5)
+ end
end
- apply_featurefile(raw,featurefile)
- end
-end
-local function showfeatureorder(rawdata,filename)
- local sequences=rawdata.resources.sequences
- if sequences and #sequences>0 then
- if trace_loading then
- report_otf("font %a has %s sequences",filename,#sequences)
- report_otf(" ")
- end
- for nos=1,#sequences do
- local sequence=sequences[nos]
- local typ=sequence.type or "no-type"
- local name=sequence.name or "no-name"
- local subtables=sequence.subtables or { "no-subtables" }
- local features=sequence.features
- if trace_loading then
- report_otf("%3i %-15s %-20s [% t]",nos,name,typ,subtables)
+ local names={}
+ local done={}
+ local function filter(platform,e,l)
+ local namelist=namelists[platform]
+ for i=1,#namelist do
+ local name=namelist[i]
+ local nametag=name.name
+ if not done[nametag] then
+ local encoding=name.encoding
+ local language=name.language
+ if (not e or encoding==e) and (not l or language==l) then
+ setposition(f,name.offset)
+ local content=readstring(f,name.length)
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
+ end
+ if decoder then
+ content=decoder(content)
+ end
+ names[nametag]={
+ content=content,
+ platform=platform,
+ encoding=encoding,
+ language=language,
+ }
+ done[nametag]=true
+ end
+ end
end
- if features then
- for feature,scripts in next,features do
- local tt={}
- if type(scripts)=="table" then
- for script,languages in next,scripts do
- local ttt={}
- for language,_ in next,languages do
- ttt[#ttt+1]=language
- end
- tt[#tt+1]=formatters["[%s: % t]"](script,ttt)
+ end
+ filter("windows","unicode bmp","english - united states")
+ filter("macintosh","roman","english")
+ filter("windows")
+ filter("macintosh")
+ filter("unicode")
+ fontdata.names=names
+ if specification.platformnames then
+ local collected={}
+ for platform,namelist in next,namelists do
+ local filtered=false
+ for i=1,#namelist do
+ local entry=namelist[i]
+ local name=entry.name
+ if platformnames[name] then
+ setposition(f,entry.offset)
+ local content=readstring(f,entry.length)
+ local encoding=entry.encoding
+ local decoder=decoders[platform]
+ if decoder then
+ decoder=decoder[encoding]
end
- if trace_loading then
- report_otf(" %s: % t",feature,tt)
+ if decoder then
+ content=decoder(content)
end
- else
- if trace_loading then
- report_otf(" %s: %S",feature,scripts)
+ if filtered then
+ filtered[name]=content
+ else
+ filtered={ [name]=content }
end
end
end
+ if filtered then
+ collected[platform]=filtered
+ end
end
+ fontdata.platformnames=collected
end
- if trace_loading then
- report_otf("\n")
- end
- elseif trace_loading then
- report_otf("font %a has no sequences",filename)
- end
-end
-local valid_fields=table.tohash {
- "ascent",
- "cidinfo",
- "copyright",
- "descent",
- "design_range_bottom",
- "design_range_top",
- "design_size",
- "encodingchanged",
- "extrema_bound",
- "familyname",
- "fontname",
- "fontstyle_id",
- "fontstyle_name",
- "fullname",
- "hasvmetrics",
- "horiz_base",
- "issans",
- "isserif",
- "italicangle",
- "macstyle",
- "onlybitmaps",
- "origname",
- "os2_version",
- "pfminfo",
- "serifcheck",
- "sfd_version",
- "strokedfont",
- "strokewidth",
- "table_version",
- "ttf_tables",
- "uni_interp",
- "uniqueid",
- "units_per_em",
- "upos",
- "use_typo_metrics",
- "uwidth",
- "validation_state",
- "version",
- "vert_base",
- "weight",
- "weight_width_slope_only",
-}
-local ordered_enhancers={
- "prepare tables",
- "prepare glyphs",
- "prepare lookups",
- "analyze glyphs",
- "analyze math",
- "reorganize lookups",
- "reorganize mark classes",
- "reorganize anchor classes",
- "reorganize glyph kerns",
- "reorganize glyph lookups",
- "reorganize glyph anchors",
- "merge kern classes",
- "reorganize features",
- "reorganize subtables",
- "check glyphs",
- "check metadata",
- "check extra features",
- "prepare tounicode",
- "check encoding",
- "add duplicates",
- "cleanup tables",
- "compact lookups",
- "purge names",
-}
-local actions=allocate()
-local before=allocate()
-local after=allocate()
-patches.before=before
-patches.after=after
-local function enhance(name,data,filename,raw)
- local enhancer=actions[name]
- if enhancer then
- if trace_loading then
- report_otf("apply enhancement %a to file %a",name,filename)
- ioflush()
+ else
+ fontdata.names={}
+ end
+end
+local validutf=lpeg.patterns.validutf8
+local function getname(fontdata,key)
+ local names=fontdata.names
+ if names then
+ local value=names[key]
+ if value then
+ local content=value.content
+ return lpegmatch(validutf,content) and content or nil
+ end
+ end
+end
+readers["os/2"]=function(f,fontdata)
+ local datatable=fontdata.tables["os/2"]
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local windowsmetrics={
+ version=version,
+ averagewidth=readshort(f),
+ weightclass=readushort(f),
+ widthclass=readushort(f),
+ fstype=readushort(f),
+ subscriptxsize=readshort(f),
+ subscriptysize=readshort(f),
+ subscriptxoffset=readshort(f),
+ subscriptyoffset=readshort(f),
+ superscriptxsize=readshort(f),
+ superscriptysize=readshort(f),
+ superscriptxoffset=readshort(f),
+ superscriptyoffset=readshort(f),
+ strikeoutsize=readshort(f),
+ strikeoutpos=readshort(f),
+ familyclass=readshort(f),
+ panose={ readbytes(f,10) },
+ unicoderanges={ readulong(f),readulong(f),readulong(f),readulong(f) },
+ vendor=readstring(f,4),
+ fsselection=readushort(f),
+ firstcharindex=readushort(f),
+ lastcharindex=readushort(f),
+ typoascender=readshort(f),
+ typodescender=readshort(f),
+ typolinegap=readshort(f),
+ winascent=readushort(f),
+ windescent=readushort(f),
+ }
+ if version>=1 then
+ windowsmetrics.codepageranges={ readulong(f),readulong(f) }
+ end
+ if version>=3 then
+ windowsmetrics.xheight=readshort(f)
+ windowsmetrics.capheight=readshort(f)
+ windowsmetrics.defaultchar=readushort(f)
+ windowsmetrics.breakchar=readushort(f)
+ end
+ windowsmetrics.weight=windowsmetrics.weightclass and weights[windowsmetrics.weightclass]
+ windowsmetrics.width=windowsmetrics.widthclass and widths [windowsmetrics.widthclass]
+ windowsmetrics.panoseweight=panoseweights[windowsmetrics.panose[3]]
+ windowsmetrics.panosewidth=panosewidths [windowsmetrics.panose[4]]
+ fontdata.windowsmetrics=windowsmetrics
+ else
+ fontdata.windowsmetrics={}
+ end
+end
+readers.head=function(f,fontdata)
+ local datatable=fontdata.tables.head
+ if datatable then
+ setposition(f,datatable.offset)
+ local fontheader={
+ version=readfixed(f),
+ revision=readfixed(f),
+ checksum=readulong(f),
+ magic=readulong(f),
+ flags=readushort(f),
+ units=readushort(f),
+ created=readlongdatetime(f),
+ modified=readlongdatetime(f),
+ xmin=readshort(f),
+ ymin=readshort(f),
+ xmax=readshort(f),
+ ymax=readshort(f),
+ macstyle=readushort(f),
+ smallpixels=readushort(f),
+ directionhint=readshort(f),
+ indextolocformat=readshort(f),
+ glyphformat=readshort(f),
+ }
+ fontdata.fontheader=fontheader
+ else
+ fontdata.fontheader={}
+ end
+ fontdata.nofglyphs=0
+end
+readers.hhea=function(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.hhea
+ if datatable then
+ setposition(f,datatable.offset)
+ fontdata.horizontalheader={
+ version=readfixed(f),
+ ascender=readfword(f),
+ descender=readfword(f),
+ linegap=readfword(f),
+ maxadvancewidth=readufword(f),
+ minleftsidebearing=readfword(f),
+ minrightsidebearing=readfword(f),
+ maxextent=readfword(f),
+ caretsloperise=readshort(f),
+ caretsloperun=readshort(f),
+ caretoffset=readshort(f),
+ reserved_1=readshort(f),
+ reserved_2=readshort(f),
+ reserved_3=readshort(f),
+ reserved_4=readshort(f),
+ metricdataformat=readshort(f),
+ nofhmetrics=readushort(f),
+ }
+ else
+ fontdata.horizontalheader={
+ nofhmetrics=0,
+ }
+ end
+ end
+end
+readers.maxp=function(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.maxp
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readfixed(f)
+ local nofglyphs=readushort(f)
+ fontdata.nofglyphs=nofglyphs
+ if version==0.5 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ }
+ return
+ elseif version==1.0 then
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=nofglyphs,
+ points=readushort(f),
+ contours=readushort(f),
+ compositepoints=readushort(f),
+ compositecontours=readushort(f),
+ zones=readushort(f),
+ twilightpoints=readushort(f),
+ storage=readushort(f),
+ functiondefs=readushort(f),
+ instructiondefs=readushort(f),
+ stackelements=readushort(f),
+ sizeofinstructions=readushort(f),
+ componentelements=readushort(f),
+ componentdepth=readushort(f),
+ }
+ return
+ end
+ end
+ fontdata.maximumprofile={
+ version=version,
+ nofglyphs=0,
+ }
+ end
+end
+readers.hmtx=function(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.hmtx
+ if datatable then
+ setposition(f,datatable.offset)
+ local nofmetrics=fontdata.horizontalheader.nofhmetrics
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local width=0
+ local leftsidebearing=0
+ for i=0,nofmetrics-1 do
+ local glyph=glyphs[i]
+ width=readshort(f)
+ leftsidebearing=readshort(f)
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ for i=nofmetrics,nofglyphs-1 do
+ local glyph=glyphs[i]
+ if width~=0 then
+ glyph.width=width
+ end
+ end
+ end
+ end
+end
+readers.post=function(f,fontdata,specification)
+ local datatable=fontdata.tables.post
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readfixed(f)
+ fontdata.postscript={
+ version=version,
+ italicangle=round(1000*readfixed(f))/1000,
+ underlineposition=readfword(f),
+ underlinethickness=readfword(f),
+ monospaced=readulong(f),
+ minmemtype42=readulong(f),
+ maxmemtype42=readulong(f),
+ minmemtype1=readulong(f),
+ maxmemtype1=readulong(f),
+ }
+ if not specification.glyphs then
+ elseif version==1.0 then
+ for index=0,#standardromanencoding do
+ glyphs[index].name=standardromanencoding[index]
+ end
+ elseif version==2.0 then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=readushort(f)
+ local indices={}
+ local names={}
+ local maxnames=0
+ for i=0,nofglyphs-1 do
+ local nameindex=readushort(f)
+ if nameindex>=258 then
+ maxnames=maxnames+1
+ nameindex=nameindex-257
+ indices[nameindex]=i
+ else
+ glyphs[i].name=standardromanencoding[nameindex]
+ end
+ end
+ for i=1,maxnames do
+ local mapping=indices[i]
+ if not mapping then
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"no index")
+ break
+ else
+ local length=readbyte(f)
+ if length>0 then
+ glyphs[mapping].name=readstring(f,length)
+ else
+ report("quit post name fetching at %a of %a: %s",i,maxnames,"overflow")
+ break
+ end
+ end
+ end
+ elseif version==2.5 then
+ elseif version==3.0 then
end
- enhancer(data,filename,raw)
else
+ fontdata.postscript={}
end
end
-function enhancers.apply(data,filename,raw)
- local basename=file.basename(lower(filename))
- if trace_loading then
- report_otf("%s enhancing file %a","start",filename)
+readers.cff=function(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("cff")
end
- ioflush()
- for e=1,#ordered_enhancers do
- local enhancer=ordered_enhancers[e]
- local b=before[enhancer]
- if b then
- for pattern,action in next,b do
- if find(basename,pattern) then
- action(data,filename,raw)
+end
+local formatreaders={}
+local duplicatestoo=true
+local sequence={
+ { 3,1,4 },
+ { 3,10,12 },
+ { 0,3,4 },
+ { 0,1,4 },
+ { 0,0,6 },
+ { 3,0,6 },
+ { 0,5,14 },
+ { 3,10,13 },
+}
+local supported={}
+for i=1,#sequence do
+ local sp,se,sf=unpack(sequence[i])
+ local p=supported[sp]
+ if not p then
+ p={}
+ supported[sp]=p
+ end
+ local e=p[se]
+ if not e then
+ e={}
+ p[se]=e
+ end
+ e[sf]=true
+end
+formatreaders[4]=function(f,fontdata,offset)
+ setposition(f,offset+2)
+ local length=readushort(f)
+ local language=readushort(f)
+ local nofsegments=readushort(f)/2
+ skipshort(f,3)
+ local endchars={}
+ local startchars={}
+ local deltas={}
+ local offsets={}
+ local indices={}
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofdone=0
+ for i=1,nofsegments do
+ endchars[i]=readushort(f)
+ end
+ local reserved=readushort(f)
+ for i=1,nofsegments do
+ startchars[i]=readushort(f)
+ end
+ for i=1,nofsegments do
+ deltas[i]=readshort(f)
+ end
+ for i=1,nofsegments do
+ offsets[i]=readushort(f)
+ end
+ local size=(length-2*2-5*2-4*nofsegments*2)/2
+ for i=1,size-1 do
+ indices[i]=readushort(f)
+ end
+ for segment=1,nofsegments do
+ local startchar=startchars[segment]
+ local endchar=endchars[segment]
+ local offset=offsets[segment]
+ local delta=deltas[segment]
+ if startchar==0xFFFF and endchar==0xFFFF then
+ elseif startchar==0xFFFF and offset==0 then
+ elseif offset==0xFFFF then
+ elseif offset==0 then
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",1,segment,startchar,endchar,mod(startchar+delta,65536))
+ end
+ for unicode=startchar,endchar do
+ local index=mod(unicode+delta,65536)
+ if index and index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 1: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ end
+ end
+ else
+ local shift=(segment-nofsegments+offset/2)-startchar
+ if trace_cmap then
+ report("format 4.%i segment %2i from %C upto %C at index %H",0,segment,startchar,endchar,mod(startchar+delta,65536))
+ end
+ for unicode=startchar,endchar do
+ local slot=shift+unicode
+ local index=indices[slot]
+ if index and index>0 then
+ index=mod(index+delta,65536)
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ if duplicatestoo then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ else
+ report("duplicate case 2: %C %04i %s",unicode,index,glyphs[index].name)
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
end
end
end
- enhance(enhancer,data,filename,raw)
- local a=after[enhancer]
- if a then
- for pattern,action in next,a do
- if find(basename,pattern) then
- action(data,filename,raw)
+ end
+ return nofdone
+end
+formatreaders[6]=function(f,fontdata,offset)
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readushort(f)
+ local language=readushort(f)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local start=readushort(f)
+ local count=readushort(f)
+ local stop=start+count-1
+ local nofdone=0
+ if trace_cmap then
+ report("format 6 from %C to %C",2,start,stop)
+ end
+ for unicode=start,stop do
+ local index=readushort(f)
+ if index>0 then
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
end
end
end
- ioflush()
end
- if trace_loading then
- report_otf("%s enhancing file %a","stop",filename)
+ return nofdone
+end
+formatreaders[12]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if trace_cmap then
+ report("format 12 from %C to %C starts at index %i",first,last,index)
+ end
+ for unicode=first,last do
+ local glyph=glyphs[index]
+ if glyph then
+ local gu=glyph.unicode
+ if not gu then
+ glyph.unicode=unicode
+ nofdone=nofdone+1
+ elseif gu~=unicode then
+ local d=duplicates[gu]
+ if d then
+ d[unicode]=true
+ else
+ duplicates[gu]={ [unicode]=true }
+ end
+ end
+ if not mapping[index] then
+ mapping[index]=unicode
+ end
+ end
+ index=index+1
+ end
end
- ioflush()
+ return nofdone
end
-function patches.register(what,where,pattern,action)
- local pw=patches[what]
- if pw then
- local ww=pw[where]
- if ww then
- ww[pattern]=action
+formatreaders[13]=function(f,fontdata,offset)
+ setposition(f,offset+2+2+4+4)
+ local mapping=fontdata.mapping
+ local glyphs=fontdata.glyphs
+ local duplicates=fontdata.duplicates
+ local nofgroups=readulong(f)
+ local nofdone=0
+ for i=1,nofgroups do
+ local first=readulong(f)
+ local last=readulong(f)
+ local index=readulong(f)
+ if first<privateoffset then
+ if trace_cmap then
+ report("format 13 from %C to %C get index %i",first,last,index)
+ end
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=first
+ glyph.unicode=unicode
+ first=first+1
+ end
+ local list=duplicates[unicode]
+ mapping[index]=unicode
+ if not list then
+ list={}
+ duplicates[unicode]=list
+ end
+ if last>=privateoffset then
+ local limit=privateoffset-1
+ report("format 13 from %C to %C pruned to %C",first,last,limit)
+ last=limit
+ end
+ for unicode=first,last do
+ list[unicode]=true
+ end
+ nofdone=nofdone+last-first+1
else
- pw[where]={ [pattern]=action}
+ report("format 13 from %C to %C ignored",first,last)
+ end
+ end
+ return nofdone
+end
+formatreaders[14]=function(f,fontdata,offset)
+ if offset and offset~=0 then
+ setposition(f,offset)
+ local format=readushort(f)
+ local length=readulong(f)
+ local nofrecords=readulong(f)
+ local records={}
+ local variants={}
+ local nofdone=0
+ fontdata.variants=variants
+ for i=1,nofrecords do
+ records[i]={
+ selector=readuint(f),
+ default=readulong(f),
+ other=readulong(f),
+ }
end
+ for i=1,nofrecords do
+ local record=records[i]
+ local selector=record.selector
+ local default=record.default
+ local other=record.other
+ local other=record.other
+ if other~=0 then
+ setposition(f,offset+other)
+ local mapping={}
+ local count=readulong(f)
+ for i=1,count do
+ mapping[readuint(f)]=readushort(f)
+ end
+ nofdone=nofdone+count
+ variants[selector]=mapping
+ end
+ end
+ return nofdone
+ else
+ return 0
end
end
-function patches.report(fmt,...)
- if trace_loading then
- report_otf("patching: %s",formatters[fmt](...))
+local function checkcmap(f,fontdata,records,platform,encoding,format)
+ local data=records[platform]
+ if not data then
+ return 0
end
+ data=data[encoding]
+ if not data then
+ return 0
+ end
+ data=data[format]
+ if not data then
+ return 0
+ end
+ local reader=formatreaders[format]
+ if not reader then
+ return 0
+ end
+ local p=platforms[platform]
+ local e=encodings[p]
+ local n=reader(f,fontdata,data) or 0
+ report("cmap checked: platform %i (%s), encoding %i (%s), format %i, new unicodes %i",platform,p,encoding,e and e[encoding] or "?",format,n)
+ return n
end
-function enhancers.register(what,action)
- actions[what]=action
-end
-function otf.load(filename,sub,featurefile)
- local base=file.basename(file.removesuffix(filename))
- local name=file.removesuffix(base)
- local attr=lfs.attributes(filename)
- local size=attr and attr.size or 0
- local time=attr and attr.modification or 0
- if featurefile then
- name=name.."@"..file.removesuffix(file.basename(featurefile))
+function readers.cmap(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.cmap
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local records={}
+ local unicodecid=false
+ local variantcid=false
+ local variants={}
+ local duplicates=fontdata.duplicates or {}
+ fontdata.duplicates=duplicates
+ for i=1,noftables do
+ local platform=readushort(f)
+ local encoding=readushort(f)
+ local offset=readulong(f)
+ local record=records[platform]
+ if not record then
+ records[platform]={
+ [encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ }
+ else
+ local subtables=record[encoding]
+ if not subtables then
+ record[encoding]={
+ offsets={ offset },
+ formats={},
+ }
+ else
+ local offsets=subtables.offsets
+ offsets[#offsets+1]=offset
+ end
+ end
+ end
+ report("found cmaps:")
+ for platform,record in sortedhash(records) do
+ local p=platforms[platform]
+ local e=encodings[p]
+ local sp=supported[platform]
+ local ps=p or "?"
+ if sp then
+ report(" platform %i: %s",platform,ps)
+ else
+ report(" platform %i: %s (unsupported)",platform,ps)
+ end
+ for encoding,subtables in sortedhash(record) do
+ local se=sp and sp[encoding]
+ local es=e and e[encoding] or "?"
+ if se then
+ report(" encoding %i: %s",encoding,es)
+ else
+ report(" encoding %i: %s (unsupported)",encoding,es)
+ end
+ local offsets=subtables.offsets
+ local formats=subtables.formats
+ for i=1,#offsets do
+ local offset=tableoffset+offsets[i]
+ setposition(f,offset)
+ formats[readushort(f)]=offset
+ end
+ record[encoding]=formats
+ local list=sortedkeys(formats)
+ for i=1,#list do
+ if not (se and se[list[i]]) then
+ list[i]=list[i].." (unsupported)"
+ end
+ end
+ report(" formats: % t",list)
+ end
+ end
+ local ok=false
+ for i=1,#sequence do
+ local sp,se,sf=unpack(sequence[i])
+ if checkcmap(f,fontdata,records,sp,se,sf)>0 then
+ ok=true
+ end
+ end
+ if not ok then
+ report("no useable unicode cmap found")
+ end
+ fontdata.cidmaps={
+ version=version,
+ noftables=noftables,
+ records=records,
+ }
+ else
+ fontdata.cidmaps={}
+ end
end
- if sub=="" then
- sub=false
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("loca")
end
- local hash=name
- if sub then
- hash=hash.."-"..sub
+end
+function readers.glyf(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("glyf")
end
- hash=containers.cleanname(hash)
- local featurefiles
- if featurefile then
- featurefiles={}
- for s in gmatch(featurefile,"[^,]+") do
- local name=resolvers.findfile(file.addsuffix(s,'fea'),'fea') or ""
- if name=="" then
- report_otf("loading error, no featurefile %a",s)
- else
- local attr=lfs.attributes(name)
- featurefiles[#featurefiles+1]={
- name=name,
- size=attr and attr.size or 0,
- time=attr and attr.modification or 0,
- }
+end
+function readers.kern(f,fontdata,specification)
+ if specification.kerns then
+ local datatable=fontdata.tables.kern
+ if datatable then
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ local kerns={}
+ local glyphs=fontdata.glyphs
+ for i=1,nofpairs do
+ local left=readushort(f)
+ local right=readushort(f)
+ local kern=readfword(f)
+ local glyph=glyphs[left]
+ local kerns=glyph.kerns
+ if kerns then
+ kerns[right]=kern
+ else
+ glyph.kerns={ [right]=kern }
+ end
+ end
+ elseif format==2 then
+ report("todo: kern classes")
+ else
+ report("todo: kerns")
+ end
end
end
- if #featurefiles==0 then
- featurefiles=nil
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gdef")
+ end
+end
+function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gsub")
+ end
+end
+function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ reportskippedtable("gpos")
+ end
+end
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ reportskippedtable("math")
+ end
+end
+local function packoutlines(data,makesequence)
+ local subfonts=data.subfonts
+ if subfonts then
+ for i=1,#subfonts do
+ packoutlines(subfonts[i],makesequence)
end
+ return
end
- local data=containers.read(otf.cache,hash)
- local reload=not data or data.size~=size or data.time~=time
- if forceload then
- report_otf("forced reload of %a due to hard coded flag",filename)
- reload=true
+ local common=data.segments
+ if common then
+ return
end
- if not reload then
- local featuredata=data.featuredata
- if featurefiles then
- if not featuredata or #featuredata~=#featurefiles then
- reload=true
- else
- for i=1,#featurefiles do
- local fi,fd=featurefiles[i],featuredata[i]
- if fi.name~=fd.name or fi.size~=fd.size or fi.time~=fd.time then
- reload=true
- break
+ local glyphs=data.glyphs
+ if not glyphs then
+ return
+ end
+ if makesequence then
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local segments=glyph.segments
+ if segments then
+ local sequence={}
+ local nofsequence=0
+ for i=1,#segments do
+ local segment=segments[i]
+ local nofsegment=#segment
+ nofsequence=nofsequence+1
+ sequence[nofsequence]=segment[nofsegment]
+ for i=1,nofsegment-1 do
+ nofsequence=nofsequence+1
+ sequence[nofsequence]=segment[i]
end
end
+ glyph.sequence=sequence
+ glyph.segments=nil
end
- elseif featuredata then
- reload=true
end
- if reload then
- report_otf("loading: forced reload due to changed featurefile specification %a",featurefile)
+ else
+ local hash={}
+ local common={}
+ local reverse={}
+ local last=0
+ for index=1,#glyphs do
+ local segments=glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local h=concat(segments[i]," ")
+ hash[h]=(hash[h] or 0)+1
+ end
+ end
+ end
+ for index=1,#glyphs do
+ local segments=glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local segment=segments[i]
+ local h=concat(segment," ")
+ if hash[h]>1 then
+ local idx=reverse[h]
+ if not idx then
+ last=last+1
+ reverse[h]=last
+ common[last]=segment
+ idx=last
+ end
+ segments[i]=idx
+ end
+ end
+ end
end
- end
- if reload then
- report_otf("loading %a, hash %a",filename,hash)
- local fontdata,messages
- if sub then
- fontdata,messages=open_font(filename,sub)
- else
- fontdata,messages=open_font(filename)
+ if last>0 then
+ data.segments=common
end
- if fontdata then
- mainfields=mainfields or (font_fields and font_fields(fontdata))
+ end
+end
+local function unpackoutlines(data)
+ local subfonts=data.subfonts
+ if subfonts then
+ for i=1,#subfonts do
+ unpackoutlines(subfonts[i])
+ end
+ return
+ end
+ local common=data.segments
+ if not common then
+ return
+ end
+ local glyphs=data.glyphs
+ if not glyphs then
+ return
+ end
+ for index=1,#glyphs do
+ local segments=glyphs[index].segments
+ if segments then
+ for i=1,#segments do
+ local c=common[segments[i]]
+ if c then
+ segments[i]=c
+ end
+ end
+ end
+ end
+ data.segments=nil
+end
+otf.packoutlines=packoutlines
+otf.unpackoutlines=unpackoutlines
+local function getinfo(maindata,sub,platformnames,rawfamilynames)
+ local fontdata=sub and maindata.subfonts and maindata.subfonts[sub] or maindata
+ local names=fontdata.names
+ local info=nil
+ if names then
+ local metrics=fontdata.windowsmetrics or {}
+ local postscript=fontdata.postscript or {}
+ local fontheader=fontdata.fontheader or {}
+ local cffinfo=fontdata.cffinfo or {}
+ local filename=fontdata.filename
+ local weight=getname(fontdata,"weight") or cffinfo.weight or metrics.weight
+ local width=getname(fontdata,"width") or cffinfo.width or metrics.width
+ local fontname=getname(fontdata,"postscriptname")
+ local fullname=getname(fontdata,"fullname")
+ local family=getname(fontdata,"family")
+ local subfamily=getname(fontdata,"subfamily")
+ local familyname=getname(fontdata,"typographicfamily")
+ local subfamilyname=getname(fontdata,"typographicsubfamily")
+ local compatiblename=getname(fontdata,"compatiblefullname")
+ if rawfamilynames then
+ else
+ if not familyname then familyname=family end
+ if not subfamilyname then subfamilyname=subfamily end
+ end
+ info={
+ subfontindex=fontdata.subfontindex or sub or 0,
+ version=getname(fontdata,"version"),
+ fontname=fontname,
+ fullname=fullname,
+ family=family,
+ subfamily=subfamily,
+ familyname=familyname,
+ subfamilyname=subfamilyname,
+ compatiblename=compatiblename,
+ weight=weight and lower(weight),
+ width=width and lower(width),
+ pfmweight=metrics.weightclass or 400,
+ pfmwidth=metrics.widthclass or 5,
+ panosewidth=metrics.panosewidth,
+ panoseweight=metrics.panoseweight,
+ italicangle=postscript.italicangle or 0,
+ units=fontheader.units or 0,
+ designsize=fontdata.designsize,
+ minsize=fontdata.minsize,
+ maxsize=fontdata.maxsize,
+ monospaced=(tonumber(postscript.monospaced or 0)>0) or metrics.panosewidth=="monospaced",
+ averagewidth=metrics.averagewidth,
+ xheight=metrics.xheight,
+ capheight=metrics.capheight,
+ ascender=metrics.typoascender,
+ descender=metrics.typodescender,
+ platformnames=platformnames and fontdata.platformnames or nil,
+ }
+ elseif n then
+ info={
+ filename=fontdata.filename,
+ comment="there is no info for subfont "..n,
+ }
+ else
+ info={
+ filename=fontdata.filename,
+ comment="there is no info",
+ }
+ end
+ return info
+end
+local function loadtables(f,specification,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ local tables={}
+ local basename=file.basename(specification.filename)
+ local filesize=specification.filesize
+ local filetime=specification.filetime
+ local fontdata={
+ filename=basename,
+ filesize=filesize,
+ filetime=filetime,
+ version=readstring(f,4),
+ noftables=readushort(f),
+ searchrange=readushort(f),
+ entryselector=readushort(f),
+ rangeshift=readushort(f),
+ tables=tables,
+ }
+ for i=1,fontdata.noftables do
+ local tag=lower(stripstring(readstring(f,4)))
+ local checksum=readulong(f)
+ local offset=readulong(f)
+ local length=readulong(f)
+ if offset+length>filesize then
+ report("bad %a table in file %a",tag,basename)
+ end
+ tables[tag]={
+ checksum=checksum,
+ offset=offset,
+ length=length,
+ }
+ end
+ if tables.cff then
+ fontdata.format="opentype"
+ else
+ fontdata.format="truetype"
+ end
+ return fontdata
+end
+local function prepareglyps(fontdata)
+ local glyphs=setmetatableindex(function(t,k)
+ local v={
+ index=k,
+ }
+ t[k]=v
+ return v
+ end)
+ fontdata.glyphs=glyphs
+ fontdata.mapping={}
+end
+local function readdata(f,offset,specification)
+ local fontdata=loadtables(f,specification,offset)
+ if specification.glyphs then
+ prepareglyps(fontdata)
+ end
+ readers["name"](f,fontdata,specification)
+ local askedname=specification.askedname
+ if askedname then
+ local fullname=getname(fontdata,"fullname") or ""
+ local cleanname=gsub(askedname,"[^a-zA-Z0-9]","")
+ local foundname=gsub(fullname,"[^a-zA-Z0-9]","")
+ if lower(cleanname)~=lower(foundname) then
+ return
end
- if trace_loading and messages and #messages>0 then
- if type(messages)=="string" then
- report_otf("warning: %s",messages)
+ end
+ readers["os/2"](f,fontdata,specification)
+ readers["head"](f,fontdata,specification)
+ readers["maxp"](f,fontdata,specification)
+ readers["hhea"](f,fontdata,specification)
+ readers["hmtx"](f,fontdata,specification)
+ readers["post"](f,fontdata,specification)
+ readers["cff" ](f,fontdata,specification)
+ readers["cmap"](f,fontdata,specification)
+ readers["loca"](f,fontdata,specification)
+ readers["glyf"](f,fontdata,specification)
+ readers["kern"](f,fontdata,specification)
+ readers["gdef"](f,fontdata,specification)
+ readers["gsub"](f,fontdata,specification)
+ readers["gpos"](f,fontdata,specification)
+ readers["math"](f,fontdata,specification)
+ fontdata.locations=nil
+ fontdata.tables=nil
+ fontdata.cidmaps=nil
+ fontdata.dictionaries=nil
+ return fontdata
+end
+local function loadfontdata(specification)
+ local filename=specification.filename
+ local fileattr=lfs.attributes(filename)
+ local filesize=fileattr and fileattr.size or 0
+ local filetime=fileattr and fileattr.modification or 0
+ local f=openfile(filename,true)
+ if not f then
+ report("unable to open %a",filename)
+ elseif filesize==0 then
+ report("empty file %a",filename)
+ closefile(f)
+ else
+ specification.filesize=filesize
+ specification.filetime=filetime
+ local version=readstring(f,4)
+ local fontdata=nil
+ if version=="OTTO" or version=="true" or version=="\0\1\0\0" then
+ fontdata=readdata(f,0,specification)
+ elseif version=="ttcf" then
+ local subfont=tonumber(specification.subfont)
+ local offsets={}
+ local ttcversion=readulong(f)
+ local nofsubfonts=readulong(f)
+ for i=1,nofsubfonts do
+ offsets[i]=readulong(f)
+ end
+ if subfont then
+ if subfont>=1 and subfont<=nofsubfonts then
+ fontdata=readdata(f,offsets[subfont],specification)
+ else
+ report("no subfont %a in file %a",subfont,filename)
+ end
else
- for m=1,#messages do
- report_otf("warning: %S",messages[m])
+ subfont=specification.subfont
+ if type(subfont)=="string" and subfont~="" then
+ specification.askedname=subfont
+ for i=1,nofsubfonts do
+ fontdata=readdata(f,offsets[i],specification)
+ if fontdata then
+ fontdata.subfontindex=i
+ report("subfont named %a has index %a",subfont,i)
+ break
+ end
+ end
+ if not fontdata then
+ report("no subfont named %a",subfont)
+ end
+ else
+ local subfonts={}
+ fontdata={
+ filename=filename,
+ filesize=filesize,
+ filetime=filetime,
+ version=version,
+ subfonts=subfonts,
+ ttcversion=ttcversion,
+ nofsubfonts=nofsubfonts,
+ }
+ for i=1,nofsubfonts do
+ subfonts[i]=readdata(f,offsets[i],specification)
+ end
end
end
else
- report_otf("loading done")
+ report("unknown version %a in file %a",version,filename)
end
- if fontdata then
- if featurefiles then
- for i=1,#featurefiles do
- load_featurefile(fontdata,featurefiles[i].name)
- end
- end
- local unicodes={
+ closefile(f)
+ return fontdata or {}
+ end
+end
+local function loadfont(specification,n)
+ if type(specification)=="string" then
+ specification={
+ filename=specification,
+ info=true,
+ details=true,
+ glyphs=true,
+ shapes=true,
+ kerns=true,
+ globalkerns=true,
+ lookups=true,
+ subfont=n or true,
+ tounicode=false,
+ }
+ end
+ if specification.shapes or specification.lookups or specification.kerns then
+ specification.glyphs=true
+ end
+ if specification.glyphs then
+ specification.details=true
+ end
+ if specification.details then
+ specification.info=true
+ end
+ if specification.platformnames then
+ specification.platformnames=true
+ end
+ local function message(str)
+ report("fatal error in file %a: %s\n%s",specification.filename,str,debug.traceback())
+ end
+ local ok,result=xpcall(loadfontdata,message,specification)
+ if ok then
+ return result
+ end
+end
+function readers.loadshapes(filename,n)
+ local fontdata=loadfont {
+ filename=filename,
+ shapes=true,
+ subfont=n,
+ }
+ return fontdata and {
+ filename=filename,
+ format=fontdata.format,
+ glyphs=fontdata.glyphs,
+ units=fontdata.fontheader.units,
+ } or {
+ filename=filename,
+ format="unknown",
+ glyphs={},
+ units=0,
+ }
+end
+function readers.loadfont(filename,n)
+ local fontdata=loadfont {
+ filename=filename,
+ glyphs=true,
+ shapes=false,
+ lookups=true,
+ subfont=n,
+ }
+ if fontdata then
+ return {
+ tableversion=tableversion,
+ creator="context mkiv",
+ size=fontdata.filesize,
+ time=fontdata.filetime,
+ glyphs=fontdata.glyphs,
+ descriptions=fontdata.descriptions,
+ format=fontdata.format,
+ goodies={},
+ metadata=getinfo(fontdata,n),
+ properties={
+ hasitalics=fontdata.hasitalics or false,
+ },
+ resources={
+ filename=filename,
+ private=privateoffset,
+ duplicates=fontdata.duplicates or {},
+ features=fontdata.features or {},
+ sublookups=fontdata.sublookups or {},
+ marks=fontdata.marks or {},
+ markclasses=fontdata.markclasses or {},
+ marksets=fontdata.marksets or {},
+ sequences=fontdata.sequences or {},
+ variants=fontdata.variants,
+ version=getname(fontdata,"version"),
+ cidinfo=fontdata.cidinfo,
+ mathconstants=fontdata.mathconstants,
+ },
+ }
+ end
+end
+function readers.getinfo(filename,specification)
+ local subfont=nil
+ local platformnames=false
+ local rawfamilynames=false
+ if type(specification)=="table" then
+ subfont=tonumber(specification.subfont)
+ platformnames=specification.platformnames
+ rawfamilynames=specification.rawfamilynames
+ else
+ subfont=tonumber(specification)
+ end
+ local fontdata=loadfont {
+ filename=filename,
+ details=true,
+ platformnames=platformnames,
+ }
+ if fontdata then
+ local subfonts=fontdata.subfonts
+ if not subfonts then
+ return getinfo(fontdata,nil,platformnames,rawfamilynames)
+ elseif not subfont then
+ local info={}
+ for i=1,#subfonts do
+ info[i]=getinfo(fontdata,i,platformnames,rawfamilynames)
+ end
+ return info
+ elseif subfont>=1 and subfont<=#subfonts then
+ return getinfo(fontdata,subfont,platformnames,rawfamilynames)
+ else
+ return {
+ filename=filename,
+ comment="there is no subfont "..subfont.." in this file"
}
- local splitter=lpeg.splitter(" ",unicodes)
+ end
+ else
+ return {
+ filename=filename,
+ comment="the file cannot be opened for reading",
+ }
+ end
+end
+function readers.rehash(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","rehash")
+end
+function readers.checkhash(fontdata)
+ report("the %a helper is not yet implemented","checkhash")
+end
+function readers.pack(fontdata,hashmethod)
+ report("the %a helper is not yet implemented","pack")
+end
+function readers.unpack(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.expand(fontdata)
+ report("the %a helper is not yet implemented","unpack")
+end
+function readers.compact(fontdata)
+ report("the %a helper is not yet implemented","compact")
+end
+local extenders={}
+function readers.registerextender(extender)
+ extenders[#extenders+1]=extender
+end
+function readers.extend(fontdata)
+ for i=1,#extenders do
+ local extender=extenders[i]
+ local name=extender.name or "unknown"
+ local action=extender.action
+ if action then
+ action(fontdata)
+ end
+ end
+end
+if fonts.hashes then
+ local identifiers=fonts.hashes.identifiers
+ local loadshapes=readers.loadshapes
+ readers.version=0.006
+ readers.cache=containers.define("fonts","shapes",readers.version,true)
+ local function load(filename,sub)
+ local base=file.basename(filename)
+ local name=file.removesuffix(base)
+ local kind=file.suffix(filename)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ local sub=tonumber(sub)
+ if size>0 and (kind=="otf" or kind=="ttf" or kind=="tcc") then
+ local hash=containers.cleanname(base)
+ if sub then
+ hash=hash.."-"..sub
+ end
+ data=containers.read(readers.cache,hash)
+ if not data or data.time~=time or data.size~=size then
+ data=loadshapes(filename,sub)
+ if data then
+ data.size=size
+ data.format=data.format or (kind=="otf" and "opentype") or "truetype"
+ data.time=time
+ packoutlines(data)
+ containers.write(readers.cache,hash,data)
+ data=containers.read(readers.cache,hash)
+ end
+ end
+ unpackoutlines(data)
+ else
data={
- size=size,
+ filename=filename,
+ size=0,
time=time,
- format=otf_format(filename),
- featuredata=featurefiles,
- resources={
- filename=resolvers.unresolve(filename),
- version=otf.version,
- creator="context mkiv",
- unicodes=unicodes,
- indices={
- },
- duplicates={
- },
- variants={
- },
- lookuptypes={},
- },
- warnings={},
- metadata={
- },
- properties={
- },
- descriptions={},
- goodies={},
- helpers={
- tounicodelist=splitter,
- tounicodetable=Ct(splitter),
- },
+ format="unknown",
+ units=1000,
+ glyphs={}
}
- starttiming(data)
- report_otf("file size: %s",size)
- enhancers.apply(data,filename,fontdata)
- local packtime={}
- if packdata then
- if cleanup>0 then
- collectgarbage("collect")
- end
- starttiming(packtime)
- enhance("pack",data,filename,nil)
- stoptiming(packtime)
- end
- report_otf("saving %a in cache",filename)
- data=containers.write(otf.cache,hash,data)
- if cleanup>1 then
- collectgarbage("collect")
- end
- stoptiming(data)
- if elapsedtime then
- report_otf("preprocessing and caching time %s, packtime %s",
- elapsedtime(data),packdata and elapsedtime(packtime) or 0)
+ end
+ return data
+ end
+ fonts.hashes.shapes=table.setmetatableindex(function(t,k)
+ local d=identifiers[k]
+ local v=load(d.properties.filename,d.subindex)
+ t[k]=v
+ return v
+ end)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-cff']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,tonumber=next,type,tonumber
+local byte=string.byte
+local concat,remove=table.concat,table.remove
+local floor,abs,round,ceil=math.floor,math.abs,math.round,math.ceil
+local P,C,R,S,C,Cs,Ct=lpeg.P,lpeg.C,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Ct
+local lpegmatch=lpeg.match
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local readbytes=streamreader.readbytes
+local readstring=streamreader.readstring
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readuint=streamreader.readcardinal3
+local readulong=streamreader.readcardinal4
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local setmetatableindex=table.setmetatableindex
+local trace_charstrings=false trackers.register("fonts.cff.charstrings",function(v) trace_charstrings=v end)
+local report=logs.reporter("otf reader","cff")
+local parsedictionaries
+local parsecharstring
+local parsecharstrings
+local resetcharstrings
+local parseprivates
+local defaultstrings={ [0]=
+ ".notdef","space","exclam","quotedbl","numbersign","dollar","percent",
+ "ampersand","quoteright","parenleft","parenright","asterisk","plus",
+ "comma","hyphen","period","slash","zero","one","two","three","four",
+ "five","six","seven","eight","nine","colon","semicolon","less",
+ "equal","greater","question","at","A","B","C","D","E","F","G","H",
+ "I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W",
+ "X","Y","Z","bracketleft","backslash","bracketright","asciicircum",
+ "underscore","quoteleft","a","b","c","d","e","f","g","h","i","j",
+ "k","l","m","n","o","p","q","r","s","t","u","v","w","x","y",
+ "z","braceleft","bar","braceright","asciitilde","exclamdown","cent",
+ "sterling","fraction","yen","florin","section","currency",
+ "quotesingle","quotedblleft","guillemotleft","guilsinglleft",
+ "guilsinglright","fi","fl","endash","dagger","daggerdbl",
+ "periodcentered","paragraph","bullet","quotesinglbase","quotedblbase",
+ "quotedblright","guillemotright","ellipsis","perthousand","questiondown",
+ "grave","acute","circumflex","tilde","macron","breve","dotaccent",
+ "dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash",
+ "AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae",
+ "dotlessi","lslash","oslash","oe","germandbls","onesuperior",
+ "logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn",
+ "onequarter","divide","brokenbar","degree","thorn","threequarters",
+ "twosuperior","registered","minus","eth","multiply","threesuperior",
+ "copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring",
+ "Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave",
+ "Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute",
+ "Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute",
+ "Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron",
+ "aacute","acircumflex","adieresis","agrave","aring","atilde",
+ "ccedilla","eacute","ecircumflex","edieresis","egrave","iacute",
+ "icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex",
+ "odieresis","ograve","otilde","scaron","uacute","ucircumflex",
+ "udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall",
+ "Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall",
+ "Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader",
+ "onedotenleader","zerooldstyle","oneoldstyle","twooldstyle",
+ "threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle",
+ "sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior",
+ "threequartersemdash","periodsuperior","questionsmall","asuperior",
+ "bsuperior","centsuperior","dsuperior","esuperior","isuperior",
+ "lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior",
+ "tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior",
+ "Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall",
+ "Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall",
+ "Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall",
+ "Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall",
+ "Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah",
+ "Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall",
+ "Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall",
+ "Dotaccentsmall","Macronsmall","figuredash","hypheninferior",
+ "Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth",
+ "threeeighths","fiveeighths","seveneighths","onethird","twothirds",
+ "zerosuperior","foursuperior","fivesuperior","sixsuperior",
+ "sevensuperior","eightsuperior","ninesuperior","zeroinferior",
+ "oneinferior","twoinferior","threeinferior","fourinferior",
+ "fiveinferior","sixinferior","seveninferior","eightinferior",
+ "nineinferior","centinferior","dollarinferior","periodinferior",
+ "commainferior","Agravesmall","Aacutesmall","Acircumflexsmall",
+ "Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall",
+ "Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall",
+ "Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall",
+ "Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall",
+ "Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall",
+ "Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall",
+ "Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003",
+ "Black","Bold","Book","Light","Medium","Regular","Roman","Semibold",
+}
+local cffreaders={
+ readbyte,
+ readushort,
+ readuint,
+ readulong,
+}
+local function readheader(f)
+ local offset=getposition(f)
+ local header={
+ offset=offset,
+ major=readbyte(f),
+ minor=readbyte(f),
+ size=readbyte(f),
+ osize=readbyte(f),
+ }
+ setposition(f,offset+header.size)
+ return header
+end
+local function readlengths(f)
+ local count=readushort(f)
+ if count==0 then
+ return {}
+ end
+ local osize=readbyte(f)
+ local read=cffreaders[osize]
+ if not read then
+ report("bad offset size: %i",osize)
+ return {}
+ end
+ local lengths={}
+ local previous=read(f)
+ for i=1,count do
+ local offset=read(f)
+ lengths[i]=offset-previous
+ previous=offset
+ end
+ return lengths
+end
+local function readfontnames(f)
+ local names=readlengths(f)
+ for i=1,#names do
+ names[i]=readstring(f,names[i])
+ end
+ return names
+end
+local function readtopdictionaries(f)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ return dictionaries
+end
+local function readstrings(f)
+ local lengths=readlengths(f)
+ local strings=setmetatableindex({},defaultstrings)
+ local index=#defaultstrings
+ for i=1,#lengths do
+ index=index+1
+ strings[index]=readstring(f,lengths[i])
+ end
+ return strings
+end
+do
+ local stack={}
+ local top=0
+ local result={}
+ local strings={}
+ local p_single=P("\00")/function()
+ result.version=strings[stack[top]] or "unset"
+ top=0
+ end+P("\01")/function()
+ result.notice=strings[stack[top]] or "unset"
+ top=0
+ end+P("\02")/function()
+ result.fullname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\03")/function()
+ result.familyname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\04")/function()
+ result.weight=strings[stack[top]] or "unset"
+ top=0
+ end+P("\05")/function()
+ result.fontbbox={ unpack(stack,1,4) }
+ top=0
+ end
++P("\13")/function()
+ result.uniqueid=stack[top]
+ top=0
+ end+P("\14")/function()
+ result.xuid=concat(stack,"",1,top)
+ top=0
+ end+P("\15")/function()
+ result.charset=stack[top]
+ top=0
+ end+P("\16")/function()
+ result.encoding=stack[top]
+ top=0
+ end+P("\17")/function()
+ result.charstrings=stack[top]
+ top=0
+ end+P("\18")/function()
+ result.private={
+ size=stack[top-1],
+ offset=stack[top],
+ }
+ top=0
+ end+P("\19")/function()
+ result.subroutines=stack[top]
+ end+P("\20")/function()
+ result.defaultwidthx=stack[top]
+ end+P("\21")/function()
+ result.nominalwidthx=stack[top]
+ end
+ local p_double=P("\12")*(
+ P("\00")/function()
+ result.copyright=stack[top]
+ top=0
+ end+P("\01")/function()
+ result.monospaced=stack[top]==1 and true or false
+ top=0
+ end+P("\02")/function()
+ result.italicangle=stack[top]
+ top=0
+ end+P("\03")/function()
+ result.underlineposition=stack[top]
+ top=0
+ end+P("\04")/function()
+ result.underlinethickness=stack[top]
+ top=0
+ end+P("\05")/function()
+ result.painttype=stack[top]
+ top=0
+ end+P("\06")/function()
+ result.charstringtype=stack[top]
+ top=0
+ end+P("\07")/function()
+ result.fontmatrix={ unpack(stack,1,6) }
+ top=0
+ end+P("\08")/function()
+ result.strokewidth=stack[top]
+ top=0
+ end+P("\20")/function()
+ result.syntheticbase=stack[top]
+ top=0
+ end+P("\21")/function()
+ result.postscript=strings[stack[top]] or "unset"
+ top=0
+ end+P("\22")/function()
+ result.basefontname=strings[stack[top]] or "unset"
+ top=0
+ end+P("\21")/function()
+ result.basefontblend=stack[top]
+ top=0
+ end+P("\30")/function()
+ result.cid.registry=strings[stack[top-2]] or "unset"
+ result.cid.ordering=strings[stack[top-1]] or "unset"
+ result.cid.supplement=stack[top]
+ top=0
+ end+P("\31")/function()
+ result.cid.fontversion=stack[top]
+ top=0
+ end+P("\32")/function()
+ result.cid.fontrevision=stack[top]
+ top=0
+ end+P("\33")/function()
+ result.cid.fonttype=stack[top]
+ top=0
+ end+P("\34")/function()
+ result.cid.count=stack[top]
+ top=0
+ end+P("\35")/function()
+ result.cid.uidbase=stack[top]
+ top=0
+ end+P("\36")/function()
+ result.cid.fdarray=stack[top]
+ top=0
+ end+P("\37")/function()
+ result.cid.fdselect=stack[top]
+ top=0
+ end+P("\38")/function()
+ result.cid.fontname=strings[stack[top]] or "unset"
+ top=0
+ end
+ )
+ local p_last=P("\x0F")/"0"+P("\x1F")/"1"+P("\x2F")/"2"+P("\x3F")/"3"+P("\x4F")/"4"+P("\x5F")/"5"+P("\x6F")/"6"+P("\x7F")/"7"+P("\x8F")/"8"+P("\x9F")/"9"+P("\xAF")/""+P("\xBF")/""+P("\xCF")/""+P("\xDF")/""+P("\xEF")/""+R("\xF0\xFF")/""
+ local remap={
+ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0",
+ ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="0.",["\x1B"]="0E",["\x1C"]="0E-",["\x1D"]="0",["\x1E"]="0-",["\x1F"]="0",
+ ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="0.",["\x2B"]="0E",["\x2C"]="0E-",["\x2D"]="0",["\x2E"]="0-",["\x2F"]="0",
+ ["\x30"]="30",["\x31"]="31",["\x32"]="32",["\x33"]="33",["\x34"]="34",["\x35"]="35",["\x36"]="36",["\x37"]="37",["\x38"]="38",["\x39"]="39",["\x3A"]="0.",["\x3B"]="0E",["\x3C"]="0E-",["\x3D"]="0",["\x3E"]="0-",["\x3F"]="0",
+ ["\x40"]="40",["\x41"]="41",["\x42"]="42",["\x43"]="43",["\x44"]="44",["\x45"]="45",["\x46"]="46",["\x47"]="47",["\x48"]="48",["\x49"]="49",["\x4A"]="0.",["\x4B"]="0E",["\x4C"]="0E-",["\x4D"]="0",["\x4E"]="0-",["\x4F"]="0",
+ ["\x50"]="50",["\x51"]="51",["\x52"]="52",["\x53"]="53",["\x54"]="54",["\x55"]="55",["\x56"]="56",["\x57"]="57",["\x58"]="58",["\x59"]="59",["\x5A"]="0.",["\x5B"]="0E",["\x5C"]="0E-",["\x5D"]="0",["\x5E"]="0-",["\x5F"]="0",
+ ["\x60"]="60",["\x61"]="61",["\x62"]="62",["\x63"]="63",["\x64"]="64",["\x65"]="65",["\x66"]="66",["\x67"]="67",["\x68"]="68",["\x69"]="69",["\x6A"]="0.",["\x6B"]="0E",["\x6C"]="0E-",["\x6D"]="0",["\x6E"]="0-",["\x6F"]="0",
+ ["\x70"]="70",["\x71"]="71",["\x72"]="72",["\x73"]="73",["\x74"]="74",["\x75"]="75",["\x76"]="76",["\x77"]="77",["\x78"]="78",["\x79"]="79",["\x7A"]="0.",["\x7B"]="0E",["\x7C"]="0E-",["\x7D"]="0",["\x7E"]="0-",["\x7F"]="0",
+ ["\x80"]="80",["\x81"]="81",["\x82"]="82",["\x83"]="83",["\x84"]="84",["\x85"]="85",["\x86"]="86",["\x87"]="87",["\x88"]="88",["\x89"]="89",["\x8A"]="0.",["\x8B"]="0E",["\x8C"]="0E-",["\x8D"]="0",["\x8E"]="0-",["\x8F"]="0",
+ ["\x90"]="90",["\x91"]="91",["\x92"]="92",["\x93"]="93",["\x94"]="94",["\x95"]="95",["\x96"]="96",["\x97"]="97",["\x98"]="98",["\x99"]="99",["\x9A"]="0.",["\x9B"]="0E",["\x9C"]="0E-",["\x9D"]="0",["\x9E"]="0-",["\x9F"]="0",
+ ["\xA0"]=".0",["\xA1"]=".1",["\xA2"]=".2",["\xA3"]=".3",["\xA4"]=".4",["\xA5"]=".5",["\xA6"]=".6",["\xA7"]=".7",["\xA8"]=".8",["\xA9"]=".9",["\xAA"]="..",["\xAB"]=".E",["\xAC"]=".E-",["\xAD"]=".",["\xAE"]=".-",["\xAF"]=".",
+ ["\xB0"]="E0",["\xB1"]="E1",["\xB2"]="E2",["\xB3"]="E3",["\xB4"]="E4",["\xB5"]="E5",["\xB6"]="E6",["\xB7"]="E7",["\xB8"]="E8",["\xB9"]="E9",["\xBA"]="E.",["\xBB"]="EE",["\xBC"]="EE-",["\xBD"]="E",["\xBE"]="E-",["\xBF"]="E",
+ ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-",
+ ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-",
+ }
+ local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0+p_last)/function(n)
+ top=top+1
+ stack[top]=tonumber(n) or 0
+ end
+ local p_byte=C(R("\32\246"))/function(b0)
+ top=top+1
+ stack[top]=byte(b0)-139
+ end
+ local p_positive=C(R("\247\250"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=(byte(b0)-247)*256+byte(b1)+108
+ end
+ local p_negative=C(R("\251\254"))*C(1)/function(b0,b1)
+ top=top+1
+ stack[top]=-(byte(b0)-251)*256-byte(b1)-108
+ end
+ local p_short=P("\28")*C(1)*C(1)/function(b1,b2)
+ top=top+1
+ local n=0x100*byte(b1)+byte(b2)
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_long=P("\29")*C(1)*C(1)*C(1)*C(1)/function(b1,b2,b3,b4)
+ top=top+1
+ local n=0x1000000*byte(b1)+0x10000*byte(b2)+0x100*byte(b3)+byte(b4)
+ if n>=0x8000000 then
+ stack[top]=n-0xFFFFFFFF-1
+ else
+ stack[top]=n
+ end
+ end
+ local p_unsupported=P(1)/function(detail)
+ top=0
+ end
+ local p_dictionary=(
+ p_byte+p_positive+p_negative+p_short+p_long+p_nibbles+p_single+p_double+p_unsupported
+ )^1
+ parsedictionaries=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ top=0
+ result={
+ monospaced=false,
+ italicangle=0,
+ underlineposition=-100,
+ underlinethickness=50,
+ painttype=0,
+ charstringtype=2,
+ fontmatrix={ 0.001,0,0,0.001,0,0 },
+ fontbbox={ 0,0,0,0 },
+ strokewidth=0,
+ charset=0,
+ encoding=0,
+ cid={
+ fontversion=0,
+ fontrevision=0,
+ fonttype=0,
+ count=8720,
+ }
+ }
+ lpegmatch(p_dictionary,dictionaries[i])
+ dictionaries[i]=result
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ parseprivates=function(data,dictionaries)
+ stack={}
+ strings=data.strings
+ for i=1,#dictionaries do
+ local private=dictionaries[i].private
+ if private and private.data then
+ top=0
+ result={
+ forcebold=false,
+ languagegroup=0,
+ expansionfactor=0.06,
+ initialrandomseed=0,
+ subroutines=0,
+ defaultwidthx=0,
+ nominalwidthx=0,
+ cid={
+ },
+ }
+ lpegmatch(p_dictionary,private.data)
+ private.data=result
+ end
+ end
+ result={}
+ top=0
+ stack={}
+ end
+ local x=0
+ local y=0
+ local width=false
+ local r=0
+ local stems=0
+ local globalbias=0
+ local localbias=0
+ local globals=false
+ local locals=false
+ local depth=1
+ local xmin=0
+ local xmax=0
+ local ymin=0
+ local ymax=0
+ local checked=false
+ local keepcurve=false
+ local function showstate(where)
+ report("%w%-10s : [%s] n=%i",depth*2,where,concat(stack," ",1,top),top)
+ end
+ local function showvalue(where,value,showstack)
+ if showstack then
+ report("%w%-10s : %s : [%s] n=%i",depth*2,where,tostring(value),concat(stack," ",1,top),top)
+ else
+ report("%w%-10s : %s",depth*2,where,tostring(value))
+ end
+ end
+ local function moveto(x,y)
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"m" }
+ end
+ if checked then
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function lineto(x,y)
+ if keepcurve then
+ r=r+1
+ result[r]={ x,y,"l" }
+ end
+ if checked then
+ if x<xmin then xmin=x elseif x>xmax then xmax=x end
+ if y<ymin then ymin=y elseif y>ymax then ymax=y end
+ else
+ xmin=x
+ ymin=y
+ xmax=x
+ ymax=y
+ checked=true
+ end
+ end
+ local function curveto(x1,y1,x2,y2,x3,y3)
+ if keepcurve then
+ r=r+1
+ result[r]={ x1,y1,x2,y2,x3,y3,"c" }
+ end
+ if checked then
+ if x1<xmin then xmin=x1 elseif x1>xmax then xmax=x1 end
+ if y1<ymin then ymin=y1 elseif y1>ymax then ymax=y1 end
+ else
+ xmin=x1
+ ymin=y1
+ xmax=x1
+ ymax=y1
+ checked=true
+ end
+ if x2<xmin then xmin=x2 elseif x2>xmax then xmax=x2 end
+ if y2<ymin then ymin=y2 elseif y2>ymax then ymax=y2 end
+ if x3<xmin then xmin=x3 elseif x3>xmax then xmax=x3 end
+ if y3<ymin then ymin=y3 elseif y3>ymax then ymax=y3 end
+ end
+ local function rmoveto()
+ if top>2 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
end
- close_font(fontdata)
- if cleanup>3 then
- collectgarbage("collect")
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("rmoveto")
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function hmoveto()
+ if top>1 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
end
- data=containers.read(otf.cache,hash)
- if cleanup>2 then
- collectgarbage("collect")
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("hmoveto")
+ end
+ x=x+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function vmoveto()
+ if top>1 then
+ if not width then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
end
+ elseif not width then
+ width=true
+ end
+ if trace_charstrings then
+ showstate("vmoveto")
+ end
+ y=y+stack[top]
+ top=0
+ moveto(x,y)
+ end
+ local function rlineto()
+ if trace_charstrings then
+ showstate("rlineto")
+ end
+ for i=1,top,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ lineto(x,y)
+ end
+ top=0
+ end
+ local function xlineto(swap)
+ for i=1,top do
+ if swap then
+ x=x+stack[i]
+ swap=false
+ else
+ y=y+stack[i]
+ swap=true
+ end
+ lineto(x,y)
+ end
+ top=0
+ end
+ local function hlineto()
+ if trace_charstrings then
+ showstate("hlineto")
+ end
+ xlineto(true)
+ end
+ local function vlineto()
+ if trace_charstrings then
+ showstate("vlineto")
+ end
+ xlineto(false)
+ end
+ local function rrcurveto()
+ if trace_charstrings then
+ showstate("rrcurveto")
+ end
+ for i=1,top,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hhcurveto()
+ if trace_charstrings then
+ showstate("hhcurveto")
+ end
+ local s=1
+ if top%2~=0 then
+ y=y+stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+stack[i]
+ local ay=y
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ y=by
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function vvcurveto()
+ if trace_charstrings then
+ showstate("vvcurveto")
+ end
+ local s=1
+ local d=0
+ if top%2~=0 then
+ d=stack[1]
+ s=2
+ end
+ for i=s,top,4 do
+ local ax=x+d
+ local ay=y+stack[i]
+ local bx=ax+stack[i+1]
+ local by=ay+stack[i+2]
+ x=bx
+ y=by+stack[i+3]
+ curveto(ax,ay,bx,by,x,y)
+ d=0
+ end
+ top=0
+ end
+ local function xxcurveto(swap)
+ local last=top%4~=0 and stack[top]
+ if last then
+ top=top-1
+ end
+ local sw=swap
+ for i=1,top,4 do
+ local ax,ay,bx,by
+ if swap then
+ ax=x+stack[i]
+ ay=y
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ y=by+stack[i+3]
+ if last and i+3==top then
+ x=bx+last
+ else
+ x=bx
+ end
+ swap=false
+ else
+ ax=x
+ ay=y+stack[i]
+ bx=ax+stack[i+1]
+ by=ay+stack[i+2]
+ x=bx+stack[i+3]
+ if last and i+3==top then
+ y=by+last
+ else
+ y=by
+ end
+ swap=true
+ end
+ curveto(ax,ay,bx,by,x,y)
+ end
+ top=0
+ end
+ local function hvcurveto()
+ if trace_charstrings then
+ showstate("hvcurveto")
+ end
+ xxcurveto(true)
+ end
+ local function vhcurveto()
+ if trace_charstrings then
+ showstate("vhcurveto")
+ end
+ xxcurveto(false)
+ end
+ local function rcurveline()
+ if trace_charstrings then
+ showstate("rcurveline")
+ end
+ for i=1,top-2,6 do
+ local ax=x+stack[i]
+ local ay=y+stack[i+1]
+ local bx=ax+stack[i+2]
+ local by=ay+stack[i+3]
+ x=bx+stack[i+4]
+ y=by+stack[i+5]
+ curveto(ax,ay,bx,by,x,y)
+ end
+ x=x+stack[top-1]
+ y=y+stack[top]
+ lineto(x,y)
+ top=0
+ end
+ local function rlinecurve()
+ if trace_charstrings then
+ showstate("rlinecurve")
+ end
+ if top>6 then
+ for i=1,top-6,2 do
+ x=x+stack[i]
+ y=y+stack[i+1]
+ lineto(x,y)
+ end
+ end
+ local ax=x+stack[top-5]
+ local ay=y+stack[top-4]
+ local bx=ax+stack[top-3]
+ local by=ay+stack[top-2]
+ x=bx+stack[top-1]
+ y=by+stack[top]
+ curveto(ax,ay,bx,by,x,y)
+ top=0
+ end
+ local function flex()
+ if trace_charstrings then
+ showstate("flex")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ x=ex+stack[11]
+ y=ey+stack[12]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex()
+ if trace_charstrings then
+ showstate("hflex")
+ end
+ local ax=x+stack[1]
+ local ay=y
+ local bx=ax+stack[2]
+ local by=ay+stack[3]
+ local cx=bx+stack[4]
+ local cy=by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[5]
+ local dy=by
+ local ex=dx+stack[6]
+ local ey=y
+ x=ex+stack[7]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function hflex1()
+ if trace_charstrings then
+ showstate("hflex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[6]
+ local dy=by
+ local ex=dx+stack[7]
+ local ey=dy+stack[8]
+ x=ex+stack[9]
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
+ end
+ local function flex1()
+ if trace_charstrings then
+ showstate("flex1")
+ end
+ local ax=x+stack[1]
+ local ay=y+stack[2]
+ local bx=ax+stack[3]
+ local by=ay+stack[4]
+ local cx=bx+stack[5]
+ local cy=by+stack[6]
+ curveto(ax,ay,bx,by,cx,cy)
+ local dx=cx+stack[7]
+ local dy=cy+stack[8]
+ local ex=dx+stack[9]
+ local ey=dy+stack[10]
+ if abs(ex-x)>abs(ey-y) then
+ x=ex+stack[11]
else
- data=nil
- report_otf("loading failed due to read error")
+ y=ey+stack[11]
end
+ curveto(dx,dy,ex,ey,x,y)
+ top=0
end
- if data then
- if trace_defining then
- report_otf("loading from cache using hash %a",hash)
+ local function getstem()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ end
+ top=top-1
end
- enhance("unpack",data,filename,nil,false)
- local resources=data.resources
- local lookuptags=resources.lookuptags
- local unicodes=resources.unicodes
- if not lookuptags then
- lookuptags={}
- resources.lookuptags=lookuptags
+ if trace_charstrings then
+ showstate("stem")
end
- setmetatableindex(lookuptags,function(t,k)
- local v=type(k)=="number" and ("lookup "..k) or k
- t[k]=v
- return v
- end)
- if not unicodes then
- unicodes={}
- resources.unicodes=unicodes
- setmetatableindex(unicodes,function(t,k)
- setmetatableindex(unicodes,nil)
- for u,d in next,data.descriptions do
- local n=d.name
- if n then
- t[n]=u
- else
- end
+ stems=stems+top/2
+ top=0
+ end
+ local function getmask()
+ if top==0 then
+ elseif top%2~=0 then
+ if width then
+ remove(stack,1)
+ else
+ width=remove(stack,1)
+ if trace_charstrings then
+ showvalue("width",width)
end
- return rawget(t,k)
- end)
+ end
+ top=top-1
end
- constructors.addcoreunicodes(unicodes)
- if applyruntimefixes then
- applyruntimefixes(filename,data)
+ if trace_charstrings then
+ showstate(operator==19 and "hintmark" or "cntrmask")
end
- enhance("add dimensions",data,filename,nil,false)
- if trace_sequences then
- showfeatureorder(data,filename)
+ stems=stems+top/2
+ top=0
+ if stems==0 then
+ elseif stems<=8 then
+ return 1
+ else
+ return floor((stems+7)/8)
+ end
+ end
+ local function unsupported()
+ if trace_charstrings then
+ showstate("unsupported")
+ end
+ top=0
+ end
+ local actions={ [0]=unsupported,
+ getstem,
+ unsupported,
+ getstem,
+ vmoveto,
+ rlineto,
+ hlineto,
+ vlineto,
+ rrcurveto,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ unsupported,
+ getstem,
+ getmask,
+ getmask,
+ rmoveto,
+ hmoveto,
+ getstem,
+ rcurveline,
+ rlinecurve,
+ vvcurveto,
+ hhcurveto,
+ unsupported,
+ unsupported,
+ vhcurveto,
+ hvcurveto,
+ }
+ local subactions={
+ [034]=hflex,
+ [035]=flex,
+ [036]=hflex1,
+ [037]=flex1,
+ }
+ local p_bytes=Ct((P(1)/byte)^0)
+ local function call(scope,list,bias,process)
+ local index=stack[top]+bias
+ top=top-1
+ if trace_charstrings then
+ showvalue(scope,index,true)
+ end
+ local str=list[index]
+ if str then
+ if type(str)=="string" then
+ str=lpegmatch(p_bytes,str)
+ list[index]=str
+ end
+ depth=depth+1
+ process(str)
+ depth=depth-1
+ else
+ report("unknown %s %i",scope,index)
+ end
+ end
+ local function process(tab)
+ local i=1
+ local n=#tab
+ while i<=n do
+ local t=tab[i]
+ if t>=32 and t<=246 then
+ top=top+1
+ stack[top]=t-139
+ i=i+1
+ elseif t>=247 and t<=250 then
+ top=top+1
+ stack[top]=(t-247)*256+tab[i+1]+108
+ i=i+2
+ elseif t>=251 and t<=254 then
+ top=top+1
+ stack[top]=-(t-251)*256-tab[i+1]-108
+ i=i+2
+ elseif t==28 then
+ top=top+1
+ local n=0x100*tab[i+1]+tab[i+2]
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1
+ else
+ stack[top]=n
+ end
+ i=i+3
+ elseif t==255 then
+ local n=0x100*tab[i+1]+tab[i+2]
+ top=top+1
+ if n>=0x8000 then
+ stack[top]=n-0xFFFF-1+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ else
+ stack[top]=n+(0x100*tab[i+3]+tab[i+4])/0xFFFF
+ end
+ i=i+5
+ elseif t==11 then
+ if trace_charstrings then
+ showstate("return")
+ end
+ return
+ elseif t==10 then
+ call("local",locals,localbias,process)
+ i=i+1
+ elseif t==14 then
+ if width then
+ elseif top>0 then
+ width=stack[1]
+ if trace_charstrings then
+ showvalue("width",width)
+ end
+ else
+ width=true
+ end
+ if trace_charstrings then
+ showstate("endchar")
+ end
+ return
+ elseif t==29 then
+ call("global",globals,globalbias,process)
+ i=i+1
+ elseif t==12 then
+ i=i+1
+ local t=tab[i]
+ local a=subactions[t]
+ if a then
+ a()
+ else
+ if trace_charstrings then
+ showvalue("<subaction>",t)
+ end
+ top=0
+ end
+ i=i+1
+ else
+ local a=actions[t]
+ if a then
+ local s=a()
+ if s then
+ i=i+s
+ end
+ else
+ if trace_charstrings then
+ showvalue("<action>",t)
+ end
+ top=0
+ end
+ i=i+1
+ end
+ end
+ end
+ parsecharstrings=function(data,glyphs,doshapes)
+ local dictionary=data.dictionaries[1]
+ local charstrings=dictionary.charstrings
+ local charset=dictionary.charset
+ keepcurve=doshapes
+ stack={}
+ glyphs=glyphs or {}
+ strings=data.strings
+ locals=dictionary.subroutines
+ globals=data.routines
+ globalbias=#globals
+ localbias=#locals
+ globalbias=((globalbias<1240 and 107) or (globalbias<33900 and 1131) or 32768)+1
+ localbias=((localbias<1240 and 107) or (localbias<33900 and 1131) or 32768)+1
+ local nominalwidth=dictionary.private.data.nominalwidthx or 0
+ local defaultwidth=dictionary.private.data.defaultwidthx or 0
+ for i=1,#charstrings do
+ local str=charstrings[i]
+ local tab=lpegmatch(p_bytes,str)
+ local index=i-1
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ process(tab)
+ local boundingbox={ round(xmin),round(ymin),round(xmax),round(ymax) }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+ local glyph=glyphs[index]
+ if not glyph then
+ glyphs[index]={
+ segments=doshapes~=false and result or nil,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset[index],
+ }
+ else
+ glyph.segments=doshapes~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ end
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ charstrings[i]=nil
+ end
+ return glyphs
+ end
+ parsecharstring=function(data,dictionary,charstring,glyphs,index,doshapes)
+ local private=dictionary.private
+ keepcurve=doshapes
+ strings=data.strings
+ locals=dictionary.subroutines or {}
+ globals=data.routines or {}
+ globalbias=#globals
+ localbias=#locals
+ globalbias=((globalbias<1240 and 107) or (globalbias<33900 and 1131) or 32768)+1
+ localbias=((localbias<1240 and 107) or (localbias<33900 and 1131) or 32768)+1
+ local nominalwidth=private and private.data.nominalwidthx or 0
+ local defaultwidth=private and private.data.defaultwidthx or 0
+ local tab=lpegmatch(p_bytes,charstring)
+ x=0
+ y=0
+ width=false
+ r=0
+ top=0
+ stems=0
+ result={}
+ xmin=0
+ xmax=0
+ ymin=0
+ ymax=0
+ checked=false
+ if trace_charstrings then
+ report("glyph: %i",index)
+ report("data: % t",tab)
+ end
+ process(tab)
+ local boundingbox={ xmin,ymin,xmax,ymax }
+ if width==true or width==false then
+ width=defaultwidth
+ else
+ width=nominalwidth+width
+ end
+index=index-1
+ local glyph=glyphs[index]
+ if not glyph then
+ glyphs[index]={
+ segments=doshapes~=false and result or nil,
+ boundingbox=boundingbox,
+ width=width,
+ name=charset[index],
+ }
+ else
+ glyph.segments=doshapes~=false and result or nil
+ glyph.boundingbox=boundingbox
+ if not glyph.width then
+ glyph.width=width
+ end
+ if charset and not glyph.name then
+ glyph.name=charset[index]
+ end
+ end
+ if trace_charstrings then
+ report("width: %s",tostring(width))
+ report("boundingbox: % t",boundingbox)
+ end
+ return charstring
+ end
+ resetcharstrings=function()
+ result={}
+ top=0
+ stack={}
+ end
+end
+local function readglobals(f,data)
+ local routines=readlengths(f)
+ for i=1,#routines do
+ routines[i]=readstring(f,routines[i])
+ end
+ data.routines=routines
+end
+local function readencodings(f,data)
+ data.encodings={}
+end
+local function readcharsets(f,data,dictionary)
+ local header=data.header
+ local strings=data.strings
+ local nofglyphs=data.nofglyphs
+ local charsetoffset=dictionary.charset
+ if charsetoffset~=0 then
+ setposition(f,header.offset+charsetoffset)
+ local format=readbyte(f)
+ local charset={ [0]=".notdef" }
+ dictionary.charset=charset
+ if format==0 then
+ for i=1,nofglyphs do
+ charset[i]=strings[readushort(f)]
+ end
+ elseif format==1 or format==2 then
+ local readcount=format==1 and readbyte or readushort
+ local i=1
+ while i<=nofglyphs do
+ local sid=readushort(f)
+ local n=readcount(f)
+ for s=sid,sid+n do
+ charset[i]=strings[s]
+ i=i+1
+ if i>nofglyphs then
+ break
+ end
+ end
+ end
+ else
+ report("cff parser: unsupported charset format %a",format)
end
end
- return data
end
-local mt={
- __index=function(t,k)
- if k=="height" then
- local ht=t.boundingbox[4]
- return ht<0 and 0 or ht
- elseif k=="depth" then
- local dp=-t.boundingbox[2]
- return dp<0 and 0 or dp
- elseif k=="width" then
- return 0
- elseif k=="name" then
- return forcenotdef and ".notdef"
- end
+local function readprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local private=dictionaries[1].private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
end
-}
-actions["prepare tables"]=function(data,filename,raw)
- data.properties.hasitalics=false
end
-actions["add dimensions"]=function(data,filename)
- if data then
- local descriptions=data.descriptions
- local resources=data.resources
- local defaultwidth=resources.defaultwidth or 0
- local defaultheight=resources.defaultheight or 0
- local defaultdepth=resources.defaultdepth or 0
- local basename=trace_markwidth and file.basename(filename)
- for _,d in next,descriptions do
- local bb,wd=d.boundingbox,d.width
- if not wd then
- d.width=defaultwidth
- elseif trace_markwidth and wd~=0 and d.class=="mark" then
- report_otf("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+local function readlocals(f,data,dictionary)
+ local header=data.header
+ local private=dictionary.private
+ if private then
+ local subroutineoffset=private.data.subroutines
+ if subroutineoffset~=0 then
+ setposition(f,header.offset+private.offset+subroutineoffset)
+ local subroutines=readlengths(f)
+ for i=1,#subroutines do
+ subroutines[i]=readstring(f,subroutines[i])
end
- if bb then
- local ht=bb[4]
- local dp=-bb[2]
- if ht==0 or ht<0 then
- else
- d.height=ht
- end
- if dp==0 or dp<0 then
- else
- d.depth=dp
- end
+ dictionary.subroutines=subroutines
+ private.data.subroutines=nil
+ else
+ dictionary.subroutines={}
+ end
+ else
+ dictionary.subroutines={}
+ end
+end
+local function readcharstrings(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local type=dictionary.charstringtype
+ local offset=dictionary.charstrings
+ if type==2 then
+ setposition(f,header.offset+offset)
+ local charstrings=readlengths(f)
+ local nofglyphs=#charstrings
+ for i=1,nofglyphs do
+ charstrings[i]=readstring(f,charstrings[i])
+ end
+ data.nofglyphs=nofglyphs
+ dictionary.charstrings=charstrings
+ else
+ report("unsupported charstr type %i",type)
+ data.nofglyphs=0
+ dictionary.charstrings={}
+ end
+end
+local function readcidprivates(f,data)
+ local header=data.header
+ local dictionaries=data.dictionaries[1].cid.dictionaries
+ for i=1,#dictionaries do
+ local dictionary=dictionaries[i]
+ local private=dictionary.private
+ if private then
+ setposition(f,header.offset+private.offset)
+ private.data=readstring(f,private.size)
+ end
+ end
+ parseprivates(data,dictionaries)
+end
+local function readnoselect(f,data,glyphs,doshapes)
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ readcharsets(f,data,dictionary)
+ readprivates(f,data)
+ parseprivates(data,data.dictionaries)
+ readlocals(f,data,dictionary)
+ parsecharstrings(data,glyphs,doshapes)
+ resetcharstrings()
+end
+local function readfdselect(f,data,glyphs,doshapes)
+ local header=data.header
+ local dictionaries=data.dictionaries
+ local dictionary=dictionaries[1]
+ local cid=dictionary.cid
+ local cidselect=cid and cid.fdselect
+ readglobals(f,data)
+ readcharstrings(f,data)
+ readencodings(f,data)
+ local charstrings=dictionary.charstrings
+ local fdindex={}
+ local nofglyphs=data.nofglyphs
+ local maxindex=-1
+ setposition(f,header.offset+cidselect)
+ local format=readbyte(f)
+ if format==1 then
+ for i=0,nofglyphs do
+ local index=readbyte(i)
+ fdindex[i]=index
+ if index>maxindex then
+ maxindex=index
+ end
+ end
+ elseif format==3 then
+ local nofranges=readushort(f)
+ local first=readushort(f)
+ local index=readbyte(f)
+ while true do
+ local last=readushort(f)
+ if index>maxindex then
+ maxindex=index
+ end
+ for i=first,last do
+ fdindex[i]=index
+ end
+ if last>=nofglyphs then
+ break
+ else
+ first=last+1
+ index=readbyte(f)
end
end
+ else
end
-end
-local function somecopy(old)
- if old then
- local new={}
- if type(old)=="table" then
- for k,v in next,old do
- if k=="glyphs" then
- elseif type(v)=="table" then
- new[k]=somecopy(v)
+ if maxindex>=0 then
+ local cidarray=cid.fdarray
+ setposition(f,header.offset+cidarray)
+ local dictionaries=readlengths(f)
+ for i=1,#dictionaries do
+ dictionaries[i]=readstring(f,dictionaries[i])
+ end
+ parsedictionaries(data,dictionaries)
+ cid.dictionaries=dictionaries
+ readcidprivates(f,data)
+ for i=1,#dictionaries do
+ readlocals(f,data,dictionaries[i])
+ end
+ for i=1,#charstrings do
+ parsecharstring(data,dictionaries[fdindex[i]+1],charstrings[i],glyphs,i,doshapes)
+ end
+ resetcharstrings()
+ end
+end
+function readers.cff(f,fontdata,specification)
+ if specification.details then
+ local datatable=fontdata.tables.cff
+ if datatable then
+ local offset=datatable.offset
+ local glyphs=fontdata.glyphs
+ if not f then
+ report("invalid filehandle")
+ return
+ end
+ if offset then
+ setposition(f,offset)
+ end
+ local header=readheader(f)
+ if header.major>1 then
+ report("version mismatch")
+ return
+ end
+ local names=readfontnames(f)
+ local dictionaries=readtopdictionaries(f)
+ local strings=readstrings(f)
+ local data={
+ header=header,
+ names=names,
+ dictionaries=dictionaries,
+ strings=strings,
+ nofglyphs=fontdata.nofglyphs,
+ }
+ parsedictionaries(data,data.dictionaries)
+ local d=dictionaries[1]
+ local c=d.cid
+ fontdata.cffinfo={
+ familynamename=d.familyname,
+ fullname=d.fullname,
+ boundingbox=d.boundingbox,
+ weight=d.weight,
+ italicangle=d.italicangle,
+ underlineposition=d.underlineposition,
+ underlinethickness=d.underlinethickness,
+ monospaced=d.monospaced,
+ }
+ fontdata.cidinfo=c and {
+ registry=c.registry,
+ ordering=c.ordering,
+ supplement=c.supplement,
+ }
+ if not specification.glyphs then
+ else
+ local cid=d.cid
+ if cid and cid.fdselect then
+ readfdselect(f,data,glyphs,specification.shapes or false)
else
- new[k]=v
+ readnoselect(f,data,glyphs,specification.shapes or false)
end
end
- else
- for i=1,#mainfields do
- local k=mainfields[i]
- local v=old[k]
- if k=="glyphs" then
- elseif type(v)=="table" then
- new[k]=somecopy(v)
- else
- new[k]=v
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-ttf']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type,unpack=next,type,unpack
+local bittest=bit32.btest
+local sqrt=math.sqrt
+local report=logs.reporter("otf reader","ttf")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local getposition=streamreader.getposition
+local skipbytes=streamreader.skip
+local readbyte=streamreader.readcardinal1
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readchar=streamreader.readinteger1
+local readshort=streamreader.readinteger2
+local read2dot14=streamreader.read2dot14
+local function mergecomposites(glyphs,shapes)
+ local function merge(index,shape,components)
+ local contours={}
+ local nofcontours=0
+ for i=1,#components do
+ local component=components[i]
+ local subindex=component.index
+ local subshape=shapes[subindex]
+ local subcontours=subshape.contours
+ if not subcontours then
+ local subcomponents=subshape.components
+ if subcomponents then
+ subcontours=merge(subindex,subshape,subcomponents)
+ end
+ end
+ if subcontours then
+ local matrix=component.matrix
+ local xscale=matrix[1]
+ local xrotate=matrix[2]
+ local yrotate=matrix[3]
+ local yscale=matrix[4]
+ local xoffset=matrix[5]
+ local yoffset=matrix[6]
+ for i=1,#subcontours do
+ local points=subcontours[i]
+ local result={}
+ for i=1,#points do
+ local p=points[i]
+ local x=p[1]
+ local y=p[2]
+ result[i]={
+ xscale*x+xrotate*y+xoffset,
+ yscale*y+yrotate*x+yoffset,
+ p[3]
+ }
+ end
+ nofcontours=nofcontours+1
+ contours[nofcontours]=result
end
+ else
+ report("missing contours composite %s, component %s of %s, glyph %s",index,i,#components,subindex)
end
end
- return new
- else
- return {}
+ shape.contours=contours
+ shape.components=nil
+ return contours
+ end
+ for index=1,#glyphs do
+ local shape=shapes[index]
+ local components=shape.components
+ if components then
+ merge(index,shape,components)
+ end
end
end
-actions["prepare glyphs"]=function(data,filename,raw)
- local rawglyphs=raw.glyphs
- local rawsubfonts=raw.subfonts
- local rawcidinfo=raw.cidinfo
- local criterium=constructors.privateoffset
- local private=criterium
- local resources=data.resources
- local metadata=data.metadata
- local properties=data.properties
- local descriptions=data.descriptions
- local unicodes=resources.unicodes
- local indices=resources.indices
- local duplicates=resources.duplicates
- local variants=resources.variants
- if rawsubfonts then
- metadata.subfonts=includesubfonts and {}
- properties.cidinfo=rawcidinfo
- if rawcidinfo.registry then
- local cidmap=fonts.cid.getmap(rawcidinfo)
- if cidmap then
- rawcidinfo.usedname=cidmap.usedname
- local nofnames,nofunicodes=0,0
- local cidunicodes,cidnames=cidmap.unicodes,cidmap.names
- for cidindex=1,#rawsubfonts do
- local subfont=rawsubfonts[cidindex]
- local cidglyphs=subfont.glyphs
- if includesubfonts then
- metadata.subfonts[cidindex]=somecopy(subfont)
- end
- for index=0,subfont.glyphcnt-1 do
- local glyph=cidglyphs[index]
- if glyph then
- local unicode=glyph.unicode
- if unicode>=0x00E000 and unicode<=0x00F8FF then
- unicode=-1
- elseif unicode>=0x0F0000 and unicode<=0x0FFFFD then
- unicode=-1
- elseif unicode>=0x100000 and unicode<=0x10FFFD then
- unicode=-1
- end
- local name=glyph.name or cidnames[index]
- if not unicode or unicode==-1 then
- unicode=cidunicodes[index]
- end
- if unicode and descriptions[unicode] then
- if trace_private then
- report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode)
+local function readnothing(f,nofcontours)
+ return {
+ type="nothing",
+ }
+end
+local function curveto(m_x,m_y,l_x,l_y,r_x,r_y)
+ return {
+ l_x+2/3*(m_x-l_x),l_y+2/3*(m_y-l_y),
+ r_x+2/3*(m_x-r_x),r_y+2/3*(m_y-r_y),
+ r_x,r_y,"c"
+ }
+end
+local function contours2outlines(glyphs,shapes)
+ local quadratic=true
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local shape=shapes[index]
+ local contours=shape.contours
+ if contours then
+ local nofcontours=#contours
+ local segments={}
+ local nofsegments=0
+ glyph.segments=segments
+ if nofcontours>0 then
+ for i=1,nofcontours do
+ local contour=contours[i]
+ local nofcontour=#contour
+ if nofcontour>0 then
+ local first_pt=contour[1]
+ local first_on=first_pt[3]
+ if nofcontour==1 then
+ first_pt[3]="m"
+ nofsegments=nofsegments+1
+ segments[nofsegments]=first_pt
+ else
+ local first_on=first_pt[3]
+ local last_pt=contour[nofcontour]
+ local last_on=last_pt[3]
+ local start=1
+ local control_pt=false
+ if first_on then
+ start=2
+ else
+ if last_on then
+ first_pt=last_pt
+ else
+ first_pt={ (first_pt[1]+last_pt[1])/2,(first_pt[2]+last_pt[2])/2,false }
end
- unicode=-1
+ control_pt=first_pt
end
- if not unicode or unicode==-1 then
- if not name then
- name=format("u%06X.ctx",private)
- end
- unicode=private
- unicodes[name]=private
- if trace_private then
- report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ first_pt[1],first_pt[2],"m" }
+ local previous_pt=first_pt
+ for i=start,nofcontour do
+ local current_pt=contour[i]
+ local current_on=current_pt[3]
+ local previous_on=previous_pt[3]
+ if previous_on then
+ if current_on then
+ nofsegments=nofsegments+1
+ segments[nofsegments]={ current_pt[1],current_pt[2],"l" }
+ else
+ control_pt=current_pt
+ end
+ elseif current_on then
+ local ps=segments[nofsegments]
+ nofsegments=nofsegments+1
+ if quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],current_pt[1],current_pt[2],"q" }
+ else
+ local p=segments[nofsegments-1] local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],current_pt[1],current_pt[2])
+ end
+ control_pt=false
+ else
+ nofsegments=nofsegments+1
+ local halfway_x=(previous_pt[1]+current_pt[1])/2
+ local halfway_y=(previous_pt[2]+current_pt[2])/2
+ if quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],halfway_x,halfway_y,"q" }
+ else
+ local p=segments[nofsegments-1] local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],halfway_x,halfway_y)
+ end
+ control_pt=current_pt
end
- private=private+1
- nofnames=nofnames+1
+ previous_pt=current_pt
+ end
+ if first_pt==last_pt then
else
- if not name then
- name=format("u%06X.ctx",unicode)
+ nofsegments=nofsegments+1
+ if not control_pt then
+ segments[nofsegments]={ first_pt[1],first_pt[2],"l" }
+ elseif quadratic then
+ segments[nofsegments]={ control_pt[1],control_pt[2],first_pt[1],first_pt[2],"q" }
+ else
+ local p=last_pt local n=#p
+ segments[nofsegments]=curveto(control_pt[1],control_pt[2],p[n-2],p[n-1],first_pt[1],first_pt[2])
end
- unicodes[name]=unicode
- nofunicodes=nofunicodes+1
- end
- indices[index]=unicode
- local description={
- boundingbox=glyph.boundingbox,
- name=name or "unknown",
- cidindex=cidindex,
- index=index,
- glyph=glyph,
- }
- descriptions[unicode]=description
+ end
end
end
end
- if trace_loading then
- report_otf("cid font remapped, %s unicode points, %s symbolic names, %s glyphs",nofunicodes,nofnames,nofunicodes+nofnames)
- end
- elseif trace_loading then
- report_otf("unable to remap cid font, missing cid file for %a",filename)
end
- elseif trace_loading then
- report_otf("font %a has no glyphs",filename)
end
- else
- for index=0,raw.glyphcnt-1 do
- local glyph=rawglyphs[index]
- if glyph then
- local unicode=glyph.unicode
- local name=glyph.name
- if not unicode or unicode==-1 then
- unicode=private
- unicodes[name]=private
- if trace_private then
- report_otf("glyph %a at index %H is moved to private unicode slot %U",name,index,private)
- end
- private=private+1
- else
- if unicode>criterium then
- local taken=descriptions[unicode]
- if taken then
- if unicode>=private then
- private=unicode+1
- else
- private=private+1
- end
- descriptions[private]=taken
- unicodes[taken.name]=private
- indices[taken.index]=private
- if trace_private then
- report_otf("slot %U is moved to %U due to private in font",unicode)
- end
+ end
+end
+local function readglyph(f,nofcontours)
+ local points={}
+ local endpoints={}
+ local instructions={}
+ local flags={}
+ for i=1,nofcontours do
+ endpoints[i]=readshort(f)+1
+ end
+ local nofpoints=endpoints[nofcontours]
+ local nofinstructions=readushort(f)
+ skipbytes(f,nofinstructions)
+ local i=1
+ while i<=nofpoints do
+ local flag=readbyte(f)
+ flags[i]=flag
+ if bittest(flag,0x0008) then
+ for j=1,readbyte(f) do
+ i=i+1
+ flags[i]=flag
+ end
+ end
+ i=i+1
+ end
+ local x=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x0002)
+ local same=bittest(flag,0x0010)
+ if short then
+ if same then
+ x=x+readbyte(f)
+ else
+ x=x-readbyte(f)
+ end
+ elseif same then
+ else
+ x=x+readshort(f)
+ end
+ points[i]={ x,y,bittest(flag,0x0001) }
+ end
+ local y=0
+ for i=1,nofpoints do
+ local flag=flags[i]
+ local short=bittest(flag,0x0004)
+ local same=bittest(flag,0x0020)
+ if short then
+ if same then
+ y=y+readbyte(f)
+ else
+ y=y-readbyte(f)
+ end
+ elseif same then
+ else
+ y=y+readshort(f)
+ end
+ points[i][2]=y
+ end
+ local first=1
+ for i=1,#endpoints do
+ local last=endpoints[i]
+ endpoints[i]={ unpack(points,first,last) }
+ first=last+1
+ end
+ return {
+ type="glyph",
+ contours=endpoints,
+ }
+end
+local function readcomposite(f)
+ local components={}
+ local nofcomponents=0
+ local instructions=false
+ while true do
+ local flags=readushort(f)
+ local index=readushort(f)
+ local f_xyarg=bittest(flags,0x0002)
+ local f_offset=bittest(flags,0x0800)
+ local xscale=1
+ local xrotate=0
+ local yrotate=0
+ local yscale=1
+ local xoffset=0
+ local yoffset=0
+ local base=false
+ local reference=false
+ if f_xyarg then
+ if bittest(flags,0x0001) then
+ xoffset=readshort(f)
+ yoffset=readshort(f)
+ else
+ xoffset=readchar(f)
+ yoffset=readchar(f)
+ end
+ else
+ if bittest(flags,0x0001) then
+ base=readshort(f)
+ reference=readshort(f)
+ else
+ base=readchar(f)
+ reference=readchar(f)
+ end
+ end
+ if bittest(flags,0x0008) then
+ xscale=read2dot14(f)
+ yscale=xscale
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0040) then
+ xscale=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*xscale
+ yoffset=yoffset*yscale
+ end
+ elseif bittest(flags,0x0080) then
+ xscale=read2dot14(f)
+ xrotate=read2dot14(f)
+ yrotate=read2dot14(f)
+ yscale=read2dot14(f)
+ if f_xyarg and f_offset then
+ xoffset=xoffset*sqrt(xscale^2+xrotate^2)
+ yoffset=yoffset*sqrt(yrotate^2+yscale^2)
+ end
+ end
+ nofcomponents=nofcomponents+1
+ components[nofcomponents]={
+ index=index,
+ usemine=bittest(flags,0x0200),
+ round=bittest(flags,0x0006),
+ base=base,
+ reference=reference,
+ matrix={ xscale,xrotate,yrotate,yscale,xoffset,yoffset },
+ }
+ if bittest(flags,0x0100) then
+ instructions=true
+ end
+ if not bittest(flags,0x0020) then
+ break
+ end
+ end
+ return {
+ type="composite",
+ components=components,
+ }
+end
+function readers.loca(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.loca
+ if datatable then
+ local offset=fontdata.tables.glyf.offset
+ local format=fontdata.fontheader.indextolocformat
+ local locations={}
+ setposition(f,datatable.offset)
+ if format==1 then
+ local nofglyphs=datatable.length/4-1
+ -1
+ for i=0,nofglyphs do
+ locations[i]=offset+readulong(f)
+ end
+ fontdata.nofglyphs=nofglyphs
+ else
+ local nofglyphs=datatable.length/2-1
+ -1
+ for i=0,nofglyphs do
+ locations[i]=offset+readushort(f)*2
+ end
+ fontdata.nofglyphs=nofglyphs
+ end
+ fontdata.locations=locations
+ end
+ end
+end
+function readers.glyf(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.glyf
+ if datatable then
+ local locations=fontdata.locations
+ if locations then
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs
+ local filesize=fontdata.filesize
+ local nothing={ 0,0,0,0 }
+ local shapes={}
+ local loadshapes=specification.shapes
+ for index=0,nofglyphs do
+ local location=locations[index]
+ if location>=filesize then
+ report("discarding %s glyphs due to glyph location bug",nofglyphs-index+1)
+ fontdata.nofglyphs=index-1
+ fontdata.badfont=true
+ break
+ elseif location>0 then
+ setposition(f,location)
+ local nofcontours=readshort(f)
+ glyphs[index].boundingbox={
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ readshort(f),
+ }
+ if not loadshapes then
+ elseif nofcontours==0 then
+ shapes[index]=readnothing(f,nofcontours)
+ elseif nofcontours>0 then
+ shapes[index]=readglyph(f,nofcontours)
else
- if unicode>=private then
- private=unicode+1
- end
+ shapes[index]=readcomposite(f,nofcontours)
end
- end
- unicodes[name]=unicode
- end
- indices[index]=unicode
- descriptions[unicode]={
- boundingbox=glyph.boundingbox,
- name=name,
- index=index,
- glyph=glyph,
- }
- local altuni=glyph.altuni
- if altuni then
- for i=1,#altuni do
- local a=altuni[i]
- local u=a.unicode
- local v=a.variant
- if v then
- local vv=variants[v]
- if vv then
- vv[u]=unicode
- else
- vv={ [u]=unicode }
- variants[v]=vv
- end
+ else
+ if loadshapes then
+ shapes[index]={}
end
+ glyphs[index].boundingbox=nothing
end
end
- else
- report_otf("potential problem: glyph %U is used but empty",index)
+ if loadshapes then
+ mergecomposites(glyphs,shapes)
+ contours2outlines(glyphs,shapes)
+ end
end
end
end
- resources.private=private
end
-actions["check encoding"]=function(data,filename,raw)
- local descriptions=data.descriptions
- local resources=data.resources
- local properties=data.properties
- local unicodes=resources.unicodes
- local indices=resources.indices
- local duplicates=resources.duplicates
- local mapdata=raw.map or {}
- local unicodetoindex=mapdata and mapdata.map or {}
- local indextounicode=mapdata and mapdata.backmap or {}
- local encname=lower(data.enc_name or mapdata.enc_name or "")
- local criterium=0xFFFF
- local privateoffset=constructors.privateoffset
- if find(encname,"unicode") then
- if trace_loading then
- report_otf("checking embedded unicode map %a",encname)
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-dsp']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local bittest=bit32.btest
+local rshift=bit32.rshift
+local concat=table.concat
+local lower=string.lower
+local sub=string.sub
+local strip=string.strip
+local tohash=table.tohash
+local reversed=table.reversed
+local setmetatableindex=table.setmetatableindex
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local report=logs.reporter("otf reader")
+local readers=fonts.handlers.otf.readers
+local streamreader=readers.streamreader
+local setposition=streamreader.setposition
+local skipbytes=streamreader.skip
+local skipshort=streamreader.skipshort
+local readushort=streamreader.readcardinal2
+local readulong=streamreader.readcardinal4
+local readshort=streamreader.readinteger2
+local readfword=readshort
+local readstring=streamreader.readstring
+local readtag=streamreader.readtag
+local gsubhandlers={}
+local gposhandlers={}
+local lookupidoffset=-1
+local classes={
+ "base",
+ "ligature",
+ "mark",
+ "component",
+}
+local gsubtypes={
+ "single",
+ "multiple",
+ "alternate",
+ "ligature",
+ "context",
+ "chainedcontext",
+ "extension",
+ "reversechainedcontextsingle",
+}
+local gpostypes={
+ "single",
+ "pair",
+ "cursive",
+ "marktobase",
+ "marktoligature",
+ "marktomark",
+ "context",
+ "chainedcontext",
+ "extension",
+}
+local chaindirections={
+ context=0,
+ chainedcontext=1,
+ reversechainedcontextsingle=-1,
+}
+local lookupnames={
+ gsub={
+ single="gsub_single",
+ multiple="gsub_multiple",
+ alternate="gsub_alternate",
+ ligature="gsub_ligature",
+ context="gsub_context",
+ chainedcontext="gsub_contextchain",
+ reversechainedcontextsingle="gsub_reversecontextchain",
+ },
+ gpos={
+ single="gpos_single",
+ pair="gpos_pair",
+ cursive="gpos_cursive",
+ marktobase="gpos_mark2base",
+ marktoligature="gpos_mark2ligature",
+ marktomark="gpos_mark2mark",
+ context="gpos_context",
+ chainedcontext="gpos_contextchain",
+ }
+}
+local lookupflags=setmetatableindex(function(t,k)
+ local v={
+ bittest(k,0x0008) and true or false,
+ bittest(k,0x0004) and true or false,
+ bittest(k,0x0002) and true or false,
+ bittest(k,0x0001) and true or false,
+ }
+ t[k]=v
+ return v
+end)
+local function readcoverage(f,offset,simple)
+ setposition(f,offset)
+ local coverageformat=readushort(f)
+ local coverage={}
+ if coverageformat==1 then
+ local nofcoverage=readushort(f)
+ if simple then
+ for i=1,nofcoverage do
+ coverage[i]=readushort(f)
+ end
+ else
+ for i=0,nofcoverage-1 do
+ coverage[readushort(f)]=i
+ end
end
- local reported={}
- for maybeunicode,index in next,unicodetoindex do
- if descriptions[maybeunicode] then
+ elseif coverageformat==2 then
+ local nofranges=readushort(f)
+ local n=simple and 1 or 0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local coverindex=readushort(f)
+ if simple then
+ for i=firstindex,lastindex do
+ coverage[n]=i
+ n=n+1
+ end
else
- local unicode=indices[index]
- if not unicode then
- elseif maybeunicode==unicode then
- elseif unicode>privateoffset then
- else
- local d=descriptions[unicode]
- if d then
- local c=d.copies
- if c then
- c[maybeunicode]=true
- else
- d.copies={ [maybeunicode]=true }
- end
- elseif index and not reported[index] then
- report_otf("missing index %i",index)
- reported[index]=true
- end
+ for i=firstindex,lastindex do
+ coverage[i]=n
+ n=n+1
end
end
end
- for unicode,data in next,descriptions do
- local d=data.copies
- if d then
- duplicates[unicode]=sortedkeys(d)
- data.copies=nil
+ else
+ report("unknown coverage format %a ",coverageformat)
+ end
+ return coverage
+end
+local function readclassdef(f,offset)
+ setposition(f,offset)
+ local classdefformat=readushort(f)
+ local classdef={}
+ if classdefformat==1 then
+ local index=readushort(f)
+ local nofclassdef=readushort(f)
+ for i=1,nofclassdef do
+ classdef[index]=readushort(f)+1
+ index=index+1
+ end
+ elseif classdefformat==2 then
+ local nofranges=readushort(f)
+ local n=0
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=readushort(f)+1
+ for i=firstindex,lastindex do
+ classdef[i]=class
end
end
- elseif properties.cidinfo then
- report_otf("warning: no unicode map, used cidmap %a",properties.cidinfo.usedname)
else
- report_otf("warning: non unicode map %a, only using glyph unicode data",encname or "whatever")
+ report("unknown classdef format %a ",classdefformat)
end
- if mapdata then
- mapdata.map={}
- mapdata.backmap={}
+ return classdef
+end
+local function classtocoverage(defs)
+ if defs then
+ local list={}
+ for index,class in next,defs do
+ local c=list[class]
+ if c then
+ c[#c+1]=index
+ else
+ list[class]={ index }
+ end
+ end
+ return list
end
end
-actions["add duplicates"]=function(data,filename,raw)
- local descriptions=data.descriptions
- local resources=data.resources
- local properties=data.properties
- local unicodes=resources.unicodes
- local indices=resources.indices
- local duplicates=resources.duplicates
- for unicode,d in next,duplicates do
- local nofduplicates=#d
- if nofduplicates>4 then
- if trace_loading then
- report_otf("ignoring excessive duplicates of %U (n=%s)",unicode,nofduplicates)
+local function readposition(f,format)
+ if format==0 then
+ return nil
+ end
+ local x=bittest(format,0x0001) and readshort(f) or 0
+ local y=bittest(format,0x0002) and readshort(f) or 0
+ local h=bittest(format,0x0004) and readshort(f) or 0
+ local v=bittest(format,0x0008) and readshort(f) or 0
+ if x==0 and y==0 and h==0 and v==0 then
+ return nil
+ else
+ return { x,y,h,v }
+ end
+end
+local function readanchor(f,offset)
+ if not offset or offset==0 then
+ return nil
+ end
+ setposition(f,offset)
+ local format=readshort(f)
+ if format==0 then
+ report("invalid anchor format %i @ position %i",format,offset)
+ return false
+ elseif format>3 then
+ report("unsupported anchor format %i @ position %i",format,offset)
+ return false
+ end
+ return { readshort(f),readshort(f) }
+end
+local function readfirst(f,offset)
+ if offset then
+ setposition(f,offset)
+ end
+ return { readushort(f) }
+end
+local function readarray(f,offset,first)
+ if offset then
+ setposition(f,offset)
+ end
+ local n=readushort(f)
+ if first then
+ local t={ first }
+ for i=2,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ elseif n>0 then
+ local t={}
+ for i=1,n do
+ t[i]=readushort(f)
+ end
+ return t,n
+ end
+end
+local function readcoveragearray(f,offset,t,simple)
+ if not t then
+ return nil
+ end
+ local n=#t
+ if n==0 then
+ return nil
+ end
+ for i=1,n do
+ t[i]=readcoverage(f,offset+t[i],simple)
+ end
+ return t
+end
+local function covered(subset,all)
+ local used,u
+ for i=1,#subset do
+ local s=subset[i]
+ if all[s] then
+ if used then
+ u=u+1
+ used[u]=s
+ else
+ u=1
+ used={ s }
+ end
+ end
+ end
+ return used
+end
+local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
+ end
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
+ end
+ end
end
else
- for i=1,nofduplicates do
- local u=d[i]
- if not descriptions[u] then
- local description=descriptions[unicode]
- local n=0
- for _,description in next,descriptions do
- local kerns=description.kerns
- if kerns then
- for _,k in next,kerns do
- local ku=k[unicode]
- if ku then
- k[u]=ku
- n=n+1
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local currentclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage)
+ currentclassdef=readclassdef(f,tableoffset+currentclassdef)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofcurrent=readushort(f)
+ local noflookups=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
end
+ rules[#rules+1]={
+ current=current,
+ lookups=lookups
+ }
end
+ else
+ report("no coverage")
end
+ else
+ report("no coverage class")
end
- if u>0 then
- local duplicate=table.copy(description)
- duplicate.comment=format("copy of U+%05X",unicode)
- descriptions[u]=duplicate
- if trace_loading then
- report_otf("duplicating %U to %U with index %H (%s kerns)",unicode,u,description.index,n)
+ end
+ end
+ else
+ report("empty subclassset in %a subtype %i","unchainedcontext",subtype)
+ end
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local current=readarray(f)
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
+ end
+ current=readcoveragearray(f,tableoffset,current,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ current=current,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"unchainedcontext",what)
+ end
+end
+local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ coverage=readcoverage(f,tableoffset+coverage,true)
+ for i=1,#subclasssets do
+ local offset=subclasssets[i]
+ if offset>0 then
+ local firstcoverage=coverage[i]
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]={ readushort(f) }
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ { firstcoverage } }
+ for i=2,nofcurrent do
+ current[i]={ readushort(f) }
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]={ readushort(f) }
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
end
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
end
end
end
+ else
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
end
- end
-end
-actions["analyze glyphs"]=function(data,filename,raw)
- local descriptions=data.descriptions
- local resources=data.resources
- local metadata=data.metadata
- local properties=data.properties
- local hasitalics=false
- local widths={}
- local marks={}
- for unicode,description in next,descriptions do
- local glyph=description.glyph
- local italic=glyph.italic_correction
- if not italic then
- elseif italic==0 then
+ return {
+ format="glyphs",
+ rules=rules,
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local beforeclassdef=readushort(f)
+ local currentclassdef=readushort(f)
+ local afterclassdef=readushort(f)
+ local subclasssets=readarray(f)
+ local rules={}
+ if subclasssets then
+ local coverage=readcoverage(f,tableoffset+coverage)
+ local beforeclassdef=readclassdef(f,tableoffset+beforeclassdef)
+ local currentclassdef=readclassdef(f,tableoffset+currentclassdef)
+ local afterclassdef=readclassdef(f,tableoffset+afterclassdef)
+ local beforeclasses=classtocoverage(beforeclassdef,fontdata.glyphs)
+ local currentclasses=classtocoverage(currentclassdef,fontdata.glyphs)
+ local afterclasses=classtocoverage(afterclassdef,fontdata.glyphs)
+ for class=1,#subclasssets do
+ local offset=subclasssets[class]
+ if offset>0 then
+ local firstcoverage=currentclasses[class]
+ if firstcoverage then
+ firstcoverage=covered(firstcoverage,coverage)
+ if firstcoverage then
+ local rulesoffset=tableoffset+offset
+ local subclassrules=readarray(f,rulesoffset)
+ for rule=1,#subclassrules do
+ setposition(f,rulesoffset+subclassrules[rule])
+ local nofbefore=readushort(f)
+ local before
+ if nofbefore>0 then
+ before={}
+ for i=1,nofbefore do
+ before[i]=beforeclasses[readushort(f)+1]
+ end
+ end
+ local nofcurrent=readushort(f)
+ local current={ firstcoverage }
+ for i=2,nofcurrent do
+ current[i]=currentclasses[readushort(f)+1]
+ end
+ local nofafter=readushort(f)
+ local after
+ if nofafter>0 then
+ after={}
+ for i=1,nofafter do
+ after[i]=afterclasses[readushort(f)+1]
+ end
+ end
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
+ end
+ rules[#rules+1]={
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ end
+ else
+ report("no coverage")
+ end
+ else
+ report("class is not covered")
+ end
+ end
+ end
else
- description.italic=italic
- hasitalics=true
+ report("empty subclassset in %a subtype %i","chainedcontext",subtype)
end
- local width=glyph.width
- widths[width]=(widths[width] or 0)+1
- local class=glyph.class
- if class then
- if class=="mark" then
- marks[unicode]=true
+ return {
+ format="class",
+ rules=rules,
+ }
+ elseif subtype==3 then
+ local before=readarray(f)
+ local current=readarray(f)
+ local after=readarray(f)
+ local noflookups=readushort(f)
+ local lookups={}
+ for i=1,noflookups do
+ lookups[readushort(f)+1]=readushort(f)+1
+ end
+ before=readcoveragearray(f,tableoffset,before,true)
+ current=readcoveragearray(f,tableoffset,current,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ format="coverage",
+ rules={
+ {
+ before=before,
+ current=current,
+ after=after,
+ lookups=lookups,
+ }
+ }
+ }
+ else
+ report("unsupported subtype %a in %a %s",subtype,"chainedcontext",what)
+ end
+end
+local function extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,types,handlers,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local lookuptype=types[readushort(f)]
+ local faroffset=readulong(f)
+ local handler=handlers[lookuptype]
+ if handler then
+ return handler(f,fontdata,lookupid,tableoffset+faroffset,0,glyphs,nofglyphs),lookuptype
+ else
+ report("no handler for lookuptype %a subtype %a in %s %s",lookuptype,subtype,what,"extension")
+ end
+ else
+ report("unsupported subtype %a in %s %s",subtype,what,"extension")
+ end
+end
+function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local delta=readshort(f)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index in next,coverage do
+ local newindex=index+delta
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=newindex
end
- description.class=class
end
- end
- properties.hasitalics=hasitalics
- resources.marks=marks
- local wd,most=0,1
- for k,v in next,widths do
- if v>most then
- wd,most=k,v
+ return {
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local nofreplacements=readushort(f)
+ local replacements={}
+ for i=1,nofreplacements do
+ replacements[i]=readushort(f)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
+ else
+ coverage[index]=replacements[newindex]
+ end
end
- end
- if most>1000 then
- if trace_loading then
- report_otf("most common width: %s (%s times), sharing (cjk font)",wd,most)
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"single")
+ end
+end
+local function sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,what)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsequence=readushort(f)
+ local sequences={}
+ for i=1,nofsequence do
+ sequences[i]=readushort(f)
+ end
+ for i=1,nofsequence do
+ setposition(f,tableoffset+sequences[i])
+ local n=readushort(f)
+ local s={}
+ for i=1,n do
+ s[i]=readushort(f)
+ end
+ sequences[i]=s
end
- for unicode,description in next,descriptions do
- if description.width==wd then
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ newindex=newindex+1
+ if index>nofglyphs or newindex>nofglyphs then
+ report("invalid index in %s format %i: %i -> %i (max %i)",what,subtype,index,newindex,nofglyphs)
+ coverage[index]=nil
else
- description.width=description.glyph.width
+ coverage[index]=sequences[newindex]
end
end
- resources.defaultwidth=wd
+ return {
+ coverage=coverage
+ }
else
- for unicode,description in next,descriptions do
- description.width=description.glyph.width
+ report("unsupported subtype %a in %a substitution",subtype,what)
+ end
+end
+function gsubhandlers.multiple(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"multiple")
+end
+function gsubhandlers.alternate(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return sethandler(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"alternate")
+end
+function gsubhandlers.ligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local nofsets=readushort(f)
+ local ligatures={}
+ for i=1,nofsets do
+ ligatures[i]=readushort(f)
+ end
+ for i=1,nofsets do
+ local offset=lookupoffset+offset+ligatures[i]
+ setposition(f,offset)
+ local n=readushort(f)
+ local l={}
+ for i=1,n do
+ l[i]=offset+readushort(f)
+ end
+ ligatures[i]=l
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local hash={}
+ local ligatures=ligatures[newindex+1]
+ for i=1,#ligatures do
+ local offset=ligatures[i]
+ setposition(f,offset)
+ local lig=readushort(f)
+ local cnt=readushort(f)
+ local hsh=hash
+ for i=2,cnt do
+ local c=readushort(f)
+ local h=hsh[c]
+ if not h then
+ h={}
+ hsh[c]=h
+ end
+ hsh=h
+ end
+ hsh.ligature=lig
+ end
+ coverage[index]=hash
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"ligature")
+ end
+end
+function gsubhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"context"
+end
+function gsubhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"substitution"),"chainedcontext"
+end
+function gsubhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gsubtypes,gsubhandlers,"substitution")
+end
+function gsubhandlers.reversechainedcontextsingle(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local current=readfirst(f)
+ local before=readarray(f)
+ local after=readarray(f)
+ local replacements=readarray(f)
+ current=readcoveragearray(f,tableoffset,current,true)
+ before=readcoveragearray(f,tableoffset,before,true)
+ after=readcoveragearray(f,tableoffset,after,true)
+ return {
+ coverage={
+ format="reversecoverage",
+ before=before,
+ current=current,
+ after=after,
+ replacements=replacements,
+ }
+ },"reversechainedcontextsingle"
+ else
+ report("unsupported subtype %a in %a substitution",subtype,"reversechainedcontextsingle")
+ end
+end
+local function readpairsets(f,tableoffset,sets,format1,format2)
+ local done={}
+ for i=1,#sets do
+ local offset=sets[i]
+ local reused=done[offset]
+ if not reused then
+ setposition(f,tableoffset+offset)
+ local n=readushort(f)
+ reused={}
+ for i=1,n do
+ reused[i]={
+ readushort(f),
+ readposition(f,format1),
+ readposition(f,format2)
+ }
+ end
+ done[offset]=reused
end
+ sets[i]=reused
end
+ return sets
end
-actions["reorganize mark classes"]=function(data,filename,raw)
- local mark_classes=raw.mark_classes
- if mark_classes then
- local resources=data.resources
- local unicodes=resources.unicodes
- local markclasses={}
- resources.markclasses=markclasses
- for name,class in next,mark_classes do
- local t={}
- for s in gmatch(class,"[^ ]+") do
- t[unicodes[s]]=true
+local function readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ local classlist1={}
+ for i=1,nofclasses1 do
+ local classlist2={}
+ classlist1[i]=classlist2
+ for j=1,nofclasses2 do
+ local one=readposition(f,format1)
+ local two=readposition(f,format2)
+ if one or two then
+ classlist2[j]={ one,two }
+ else
+ classlist2[j]=false
end
- markclasses[name]=t
end
end
+ return classlist1
end
-actions["reorganize features"]=function(data,filename,raw)
- local features={}
- data.resources.features=features
- for k,what in next,otf.glists do
- local dw=raw[what]
- if dw then
- local f={}
- features[what]=f
- for i=1,#dw do
- local d=dw[i]
- local dfeatures=d.features
- if dfeatures then
- for i=1,#dfeatures do
- local df=dfeatures[i]
- local tag=strip(lower(df.tag))
- local ft=f[tag]
- if not ft then
- ft={}
- f[tag]=ft
- end
- local dscripts=df.scripts
- for i=1,#dscripts do
- local d=dscripts[i]
- local languages=d.langs
- local script=strip(lower(d.script))
- local fts=ft[script] if not fts then fts={} ft[script]=fts end
- for i=1,#languages do
- fts[strip(lower(languages[i]))]=true
+function gposhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local value=readposition(f,format)
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=value
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format=readushort(f)
+ local values={}
+ local nofvalues=readushort(f)
+ for i=1,nofvalues do
+ values[i]=readposition(f,format)
+ end
+ local coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ coverage[index]=values[newindex+1]
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"single")
+ end
+end
+function gposhandlers.pair(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local sets=readarray(f)
+ sets=readpairsets(f,tableoffset,sets,format1,format2)
+ coverage=readcoverage(f,tableoffset+coverage)
+ for index,newindex in next,coverage do
+ local set=sets[newindex+1]
+ local hash={}
+ for i=1,#set do
+ local value=set[i]
+ if value then
+ local other=value[1]
+ local first=value[2]
+ local second=value[3]
+ if first or second then
+ hash[other]={ first,second }
+ else
+ hash[other]=nil
+ end
+ end
+ end
+ coverage[index]=hash
+ end
+ return {
+ format="pair",
+ coverage=coverage
+ }
+ elseif subtype==2 then
+ local coverage=readushort(f)
+ local format1=readushort(f)
+ local format2=readushort(f)
+ local classdef1=readushort(f)
+ local classdef2=readushort(f)
+ local nofclasses1=readushort(f)
+ local nofclasses2=readushort(f)
+ local classlist=readpairclasssets(f,nofclasses1,nofclasses2,format1,format2)
+ coverage=readcoverage(f,tableoffset+coverage)
+ classdef1=readclassdef(f,tableoffset+classdef1)
+ classdef2=readclassdef(f,tableoffset+classdef2)
+ local usedcoverage={}
+ for g1,c1 in next,classdef1 do
+ if coverage[g1] then
+ local l1=classlist[c1]
+ if l1 then
+ local hash={}
+ for paired,class in next,classdef2 do
+ local offsets=l1[class]
+ if offsets then
+ local first=offsets[1]
+ local second=offsets[2]
+ if first or second then
+ hash[paired]={ first,second }
+ else
end
end
end
+ usedcoverage[g1]=hash
end
end
end
- end
-end
-actions["reorganize anchor classes"]=function(data,filename,raw)
- local resources=data.resources
- local anchor_to_lookup={}
- local lookup_to_anchor={}
- resources.anchor_to_lookup=anchor_to_lookup
- resources.lookup_to_anchor=lookup_to_anchor
- local classes=raw.anchor_classes
- if classes then
- for c=1,#classes do
- local class=classes[c]
- local anchor=class.name
- local lookups=class.lookup
- if type(lookups)~="table" then
- lookups={ lookups }
- end
- local a=anchor_to_lookup[anchor]
- if not a then
- a={}
- anchor_to_lookup[anchor]=a
- end
- for l=1,#lookups do
- local lookup=lookups[l]
- local l=lookup_to_anchor[lookup]
- if l then
- l[anchor]=true
+ return {
+ format="pair",
+ coverage=usedcoverage
+ }
+ elseif subtype==3 then
+ report("yet unsupported subtype %a in %a positioning",subtype,"pair")
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"pair")
+ end
+end
+function gposhandlers.cursive(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local coverage=tableoffset+readushort(f)
+ local nofrecords=readushort(f)
+ local records={}
+ for i=1,nofrecords do
+ local entry=readushort(f)
+ local exit=readushort(f)
+ records[i]={
+ entry=entry~=0 and (tableoffset+entry) or false,
+ exit=exit~=0 and (tableoffset+exit ) or false,
+ }
+ end
+ coverage=readcoverage(f,coverage)
+ for i=1,nofrecords do
+ local r=records[i]
+ records[i]={
+ 1,
+ readanchor(f,r.entry) or nil,
+ readanchor(f,r.exit ) or nil,
+ }
+ end
+ for index,newindex in next,coverage do
+ coverage[index]=records[newindex+1]
+ end
+ return {
+ coverage=coverage
+ }
+ else
+ report("unsupported subtype %a in %a positioning",subtype,"cursive")
+ end
+end
+local function handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,ligature)
+ local tableoffset=lookupoffset+offset
+ setposition(f,tableoffset)
+ local subtype=readushort(f)
+ if subtype==1 then
+ local markcoverage=tableoffset+readushort(f)
+ local basecoverage=tableoffset+readushort(f)
+ local nofclasses=readushort(f)
+ local markoffset=tableoffset+readushort(f)
+ local baseoffset=tableoffset+readushort(f)
+ local markcoverage=readcoverage(f,markcoverage)
+ local basecoverage=readcoverage(f,basecoverage,true)
+ setposition(f,markoffset)
+ local markclasses={}
+ local nofmarkclasses=readushort(f)
+ local lastanchor=fontdata.lastanchor or 0
+ local usedanchors={}
+ for i=1,nofmarkclasses do
+ local class=readushort(f)+1
+ local offset=readushort(f)
+ if offset==0 then
+ markclasses[i]=false
+ else
+ markclasses[i]={ class,markoffset+offset }
+ end
+ usedanchors[class]=true
+ end
+ for i=1,nofmarkclasses do
+ local mc=markclasses[i]
+ if mc then
+ mc[2]=readanchor(f,mc[2])
+ end
+ end
+ setposition(f,baseoffset)
+ local nofbaserecords=readushort(f)
+ local baserecords={}
+ if ligature then
+ for i=1,nofbaserecords do
+ local offset=readushort(f)
+ if offset==0 then
+ baserecords[i]=false
else
- l={ [anchor]=true }
- lookup_to_anchor[lookup]=l
+ baserecords[i]=baseoffset+offset
+ end
+ end
+ for i=1,nofbaserecords do
+ local recordoffset=baserecords[i]
+ if recordoffset then
+ setposition(f,recordoffset)
+ local nofcomponents=readushort(f)
+ local components={}
+ for i=1,nofcomponents do
+ local classes={}
+ for i=1,nofclasses do
+ local offset=readushort(f)
+ if offset~=0 then
+ classes[i]=recordoffset+offset
+ else
+ classes[i]=false
+ end
+ end
+ components[i]=classes
+ end
+ baserecords[i]=components
+ end
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local components=baserecords[i]
+ local b=basecoverage[i]
+ if components then
+ for c=1,#components do
+ local classes=components[c]
+ if classes then
+ for i=1,nofclasses do
+ local anchor=readanchor(f,classes[i])
+ local bclass=baseclasses[i]
+ local bentry=bclass[b]
+ if bentry then
+ bentry[c]=anchor
+ else
+ bclass[b]={ [c]=anchor }
+ end
+ end
+ end
+ components[i]=classes
+ end
end
- a[lookup]=true
end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="ligature",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
+ else
+ for i=1,nofbaserecords do
+ local r={}
+ for j=1,nofclasses do
+ local offset=readushort(f)
+ if offset==0 then
+ r[j]=false
+ else
+ r[j]=baseoffset+offset
+ end
+ end
+ baserecords[i]=r
+ end
+ local baseclasses={}
+ for i=1,nofclasses do
+ baseclasses[i]={}
+ end
+ for i=1,nofbaserecords do
+ local r=baserecords[i]
+ local b=basecoverage[i]
+ for j=1,nofclasses do
+ baseclasses[j][b]=readanchor(f,r[j])
+ end
+ end
+ for index,newindex in next,markcoverage do
+ markcoverage[index]=markclasses[newindex+1] or nil
+ end
+ return {
+ format="base",
+ baseclasses=baseclasses,
+ coverage=markcoverage,
+ }
end
+ else
+ report("unsupported subtype %a in",subtype)
end
end
-actions["prepare tounicode"]=function(data,filename,raw)
- fonts.mappings.addtounicode(data,filename)
+function gposhandlers.marktobase(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
end
-local g_directions={
- gsub_contextchain=1,
- gpos_contextchain=1,
- gsub_reversecontextchain=-1,
- gpos_reversecontextchain=-1,
-}
-actions["reorganize subtables"]=function(data,filename,raw)
- local resources=data.resources
- local sequences={}
- local lookups={}
- local chainedfeatures={}
- resources.sequences=sequences
- resources.lookups=lookups
- for _,what in next,otf.glists do
- local dw=raw[what]
- if dw then
- for k=1,#dw do
- local gk=dw[k]
- local features=gk.features
- local typ=gk.type
- local chain=g_directions[typ] or 0
- local subtables=gk.subtables
- if subtables then
- local t={}
- for s=1,#subtables do
- t[s]=subtables[s].name
+function gposhandlers.marktoligature(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,true)
+end
+function gposhandlers.marktomark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return handlemark(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+end
+function gposhandlers.context(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"context"
+end
+function gposhandlers.chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,"positioning"),"chainedcontext"
+end
+function gposhandlers.extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs)
+ return extension(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofglyphs,gpostypes,gposhandlers,"positioning")
+end
+do
+ local plugins={}
+ function plugins.size(f,fontdata,tableoffset,parameters)
+ if not fontdata.designsize then
+ setposition(f,tableoffset+parameters)
+ local designsize=readushort(f)
+ if designsize>0 then
+ fontdata.designsize=designsize
+ skipshort(f,2)
+ fontdata.minsize=readushort(f)
+ fontdata.maxsize=readushort(f)
+ end
+ end
+ end
+ local function reorderfeatures(fontdata,scripts,features)
+ local scriptlangs={}
+ local featurehash={}
+ local featureorder={}
+ for script,languages in next,scripts do
+ for language,record in next,languages do
+ local hash={}
+ local list=record.featureindices
+ for k=1,#list do
+ local index=list[k]
+ local feature=features[index]
+ local lookups=feature.lookups
+ local tag=feature.tag
+ if tag then
+ hash[tag]=true
+ end
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local o=featureorder[lookup]
+ if o then
+ local okay=true
+ for i=1,#o do
+ if o[i]==tag then
+ okay=false
+ break
+ end
+ end
+ if okay then
+ o[#o+1]=tag
+ end
+ else
+ featureorder[lookup]={ tag }
+ end
+ local f=featurehash[lookup]
+ if f then
+ local h=f[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ f[tag]={ [script]={ [language]=true } }
+ end
+ else
+ featurehash[lookup]={ [tag]={ [script]={ [language]=true } } }
+ end
+ local h=scriptlangs[tag]
+ if h then
+ local s=h[script]
+ if s then
+ s[language]=true
+ else
+ h[script]={ [language]=true }
+ end
+ else
+ scriptlangs[tag]={ [script]={ [language]=true } }
+ end
end
- subtables=t
end
- local flags,markclass=gk.flags,nil
- if flags then
- local t={
- (flags.ignorecombiningmarks and "mark") or false,
- (flags.ignoreligatures and "ligature") or false,
- (flags.ignorebaseglyphs and "base") or false,
- flags.r2l or false,
- }
- markclass=flags.mark_class
- if markclass then
- markclass=resources.markclasses[markclass]
- end
- flags=t
- end
- local name=gk.name
- if not name then
- report_otf("skipping weird lookup number %s",k)
- elseif features then
- local f={}
- local o={}
- for i=1,#features do
- local df=features[i]
- local tag=strip(lower(df.tag))
- local ft=f[tag]
- if not ft then
- ft={}
- f[tag]=ft
- o[#o+1]=tag
- end
- local dscripts=df.scripts
- for i=1,#dscripts do
- local d=dscripts[i]
- local languages=d.langs
- local script=strip(lower(d.script))
- local fts=ft[script] if not fts then fts={} ft[script]=fts end
- for i=1,#languages do
- fts[strip(lower(languages[i]))]=true
+ end
+ end
+ end
+ return scriptlangs,featurehash,featureorder
+ end
+ local function readscriplan(f,fontdata,scriptoffset)
+ setposition(f,scriptoffset)
+ local nofscripts=readushort(f)
+ local scripts={}
+ for i=1,nofscripts do
+ scripts[readtag(f)]=scriptoffset+readushort(f)
+ end
+ local languagesystems=setmetatableindex("table")
+ for script,offset in next,scripts do
+ setposition(f,offset)
+ local defaultoffset=readushort(f)
+ local noflanguages=readushort(f)
+ local languages={}
+ if defaultoffset>0 then
+ languages.dflt=languagesystems[offset+defaultoffset]
+ end
+ for i=1,noflanguages do
+ local language=readtag(f)
+ local offset=offset+readushort(f)
+ languages[language]=languagesystems[offset]
+ end
+ scripts[script]=languages
+ end
+ for offset,usedfeatures in next,languagesystems do
+ if offset>0 then
+ setposition(f,offset)
+ local featureindices={}
+ usedfeatures.featureindices=featureindices
+ usedfeatures.lookuporder=readushort(f)
+ usedfeatures.requiredindex=readushort(f)
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ featureindices[i]=readushort(f)+1
+ end
+ end
+ end
+ return scripts
+ end
+ local function readfeatures(f,fontdata,featureoffset)
+ setposition(f,featureoffset)
+ local features={}
+ local noffeatures=readushort(f)
+ for i=1,noffeatures do
+ features[i]={
+ tag=readtag(f),
+ offset=readushort(f)
+ }
+ end
+ for i=1,noffeatures do
+ local feature=features[i]
+ local offset=featureoffset+feature.offset
+ setposition(f,offset)
+ local parameters=readushort(f)
+ local noflookups=readushort(f)
+ if noflookups>0 then
+ local lookups={}
+ feature.lookups=lookups
+ for j=1,noflookups do
+ lookups[j]=readushort(f)+1
+ end
+ end
+ if parameters>0 then
+ feature.parameters=parameters
+ local plugin=plugins[feature.tag]
+ if plugin then
+ plugin(f,fontdata,offset,parameters)
+ end
+ end
+ end
+ return features
+ end
+ local function readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ setposition(f,lookupoffset)
+ local lookups={}
+ local noflookups=readushort(f)
+ for i=1,noflookups do
+ lookups[i]=readushort(f)
+ end
+ for lookupid=1,noflookups do
+ local index=lookups[lookupid]
+ setposition(f,lookupoffset+index)
+ local subtables={}
+ local typebits=readushort(f)
+ local flagbits=readushort(f)
+ local lookuptype=lookuptypes[typebits]
+ local lookupflags=lookupflags[flagbits]
+ local nofsubtables=readushort(f)
+ for j=1,nofsubtables do
+ local offset=readushort(f)
+ subtables[j]=offset+index
+ end
+ local markclass=bittest(flagbits,0x0010)
+ if markclass then
+ markclass=readushort(f)
+ end
+ local markset=rshift(flagbits,8)
+ if markset>0 then
+ markclass=markset
+ end
+ lookups[lookupid]={
+ type=lookuptype,
+ flags=lookupflags,
+ name=lookupid,
+ subtables=subtables,
+ markclass=markclass,
+ features=featurehash[lookupid],
+ order=featureorder[lookupid],
+ }
+ end
+ return lookups
+ end
+ local function readscriptoffsets(f,fontdata,tableoffset)
+ if not tableoffset then
+ return
+ end
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ if version~=0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ return tableoffset+readushort(f),tableoffset+readushort(f),tableoffset+readushort(f)
+ end
+ local f_lookupname=formatters["%s_%s_%s"]
+ local function resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ local sequences=fontdata.sequences or {}
+ local sublookuplist=fontdata.sublookups or {}
+ fontdata.sequences=sequences
+ fontdata.sublookups=sublookuplist
+ local nofsublookups=#sublookuplist
+ local nofsequences=#sequences
+ local lastsublookup=nofsublookups
+ local lastsequence=nofsequences
+ local lookupnames=lookupnames[what]
+ local sublookuphash={}
+ local sublookupcheck={}
+ local glyphs=fontdata.glyphs
+ local nofglyphs=fontdata.nofglyphs or #glyphs
+ local noflookups=#lookups
+ local lookupprefix=sub(what,2,2)
+ for lookupid=1,noflookups do
+ local lookup=lookups[lookupid]
+ local lookuptype=lookup.type
+ local subtables=lookup.subtables
+ local features=lookup.features
+ local handler=lookuphandlers[lookuptype]
+ if handler then
+ local nofsubtables=#subtables
+ local order=lookup.order
+ local flags=lookup.flags
+ if flags[1] then flags[1]="mark" end
+ if flags[2] then flags[2]="ligature" end
+ if flags[3] then flags[3]="base" end
+ local markclass=lookup.markclass
+ if nofsubtables>0 then
+ local steps={}
+ local nofsteps=0
+ local oldtype=nil
+ for s=1,nofsubtables do
+ local step,lt=handler(f,fontdata,lookupid,lookupoffset,subtables[s],glyphs,nofglyphs)
+ if lt then
+ lookuptype=lt
+ if oldtype and lt~=oldtype then
+ report("messy %s lookup type %a and %a",what,lookuptype,oldtype)
+ end
+ oldtype=lookuptype
+ end
+ if not step then
+ report("unsupported %s lookup type %a",what,lookuptype)
+ else
+ nofsteps=nofsteps+1
+ steps[nofsteps]=step
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ local current=rule.current
+ local after=rule.after
+ if before then
+ for i=1,#before do
+ before[i]=tohash(before[i])
+ end
+ rule.before=reversed(before)
+ end
+ if current then
+ for i=1,#current do
+ current[i]=tohash(current[i])
+ end
+ end
+ if after then
+ for i=1,#after do
+ after[i]=tohash(after[i])
+ end
+ end
end
end
end
- sequences[#sequences+1]={
- type=typ,
- chain=chain,
+ end
+ if nofsteps~=nofsubtables then
+ report("bogus subtables removed in %s lookup type %a",what,lookuptype)
+ end
+ lookuptype=lookupnames[lookuptype] or lookuptype
+ if features then
+ nofsequences=nofsequences+1
+ local l={
+ index=nofsequences,
+ name=f_lookupname(lookupprefix,"s",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
flags=flags,
- name=name,
- subtables=subtables,
- markclass=markclass,
- features=f,
- order=o,
+ order=order,
+ features=features,
}
+ sequences[nofsequences]=l
+ lookup.done=l
else
- lookups[name]={
- type=typ,
- chain=chain,
+ nofsublookups=nofsublookups+1
+ local l={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"l",lookupid+lookupidoffset),
+ steps=steps,
+ nofsteps=nofsteps,
+ type=lookuptype,
+ markclass=markclass or nil,
flags=flags,
- subtables=subtables,
- markclass=markclass,
}
+ sublookuplist[nofsublookups]=l
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=0
+ lookup.done=l
end
+ else
+ report("no subtables for lookup %a",lookupid)
+ end
+ else
+ report("no handler for lookup %a with type %a",lookupid,lookuptype)
+ end
+ end
+ local reported={}
+ for i=lastsequence+1,nofsequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ for i=1,#steps do
+ local step=steps[i]
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local rlookups=rule.lookups
+ if not rlookups then
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,"no")
+ reported[name]=true
+ end
+ elseif not next(rlookups) then
+ local name=sequence.name
+ if not reported[name] then
+ report("rule %i in %s lookup %a has %s lookups",i,what,name,"empty")
+ reported[name]=true
+ end
+ rule.lookups=nil
+ else
+ for index,lookupid in sortedhash(rlookups) do
+ local h=sublookuphash[lookupid]
+ if not h then
+ nofsublookups=nofsublookups+1
+ local d=lookups[lookupid].done
+ h={
+ index=nofsublookups,
+ name=f_lookupname(lookupprefix,"d",lookupid+lookupidoffset),
+ derived=true,
+ steps=d.steps,
+ nofsteps=d.nofsteps,
+ type=d.lookuptype,
+ markclass=d.markclass or nil,
+ flags=d.flags,
+ }
+ sublookuplist[nofsublookups]=h
+ sublookuphash[lookupid]=nofsublookups
+ sublookupcheck[lookupid]=1
+ else
+ sublookupcheck[lookupid]=sublookupcheck[lookupid]+1
+ end
+ rlookups[index]=h
+ end
+ end
+ end
+ end
+ end
+ end
+ for i,n in sortedhash(sublookupcheck) do
+ local l=lookups[i]
+ local t=l.type
+ if n==0 and t~="extension" then
+ local d=l.done
+ report("%s lookup %s of type %a is not used",what,d and d.name or l.name,t)
end
end
end
-end
-actions["prepare lookups"]=function(data,filename,raw)
- local lookups=raw.lookups
- if lookups then
- data.lookups=lookups
+ local function readscripts(f,fontdata,what,lookuptypes,lookuphandlers,lookupstoo)
+ local datatable=fontdata.tables[what]
+ if not datatable then
+ return
+ end
+ local tableoffset=datatable.offset
+ if not tableoffset then
+ return
+ end
+ local scriptoffset,featureoffset,lookupoffset=readscriptoffsets(f,fontdata,tableoffset)
+ if not scriptoffset then
+ return
+ end
+ local scripts=readscriplan(f,fontdata,scriptoffset)
+ local features=readfeatures(f,fontdata,featureoffset)
+ local scriptlangs,featurehash,featureorder=reorderfeatures(fontdata,scripts,features)
+ if fontdata.features then
+ fontdata.features[what]=scriptlangs
+ else
+ fontdata.features={ [what]=scriptlangs }
+ end
+ if not lookupstoo then
+ return
+ end
+ local lookups=readlookups(f,lookupoffset,lookuptypes,featurehash,featureorder)
+ if lookups then
+ resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what)
+ end
end
-end
-local function t_uncover(splitter,cache,covers)
- local result={}
- for n=1,#covers do
- local cover=covers[n]
- local uncovered=cache[cover]
- if not uncovered then
- uncovered=lpegmatch(splitter,cover)
- cache[cover]=uncovered
+ local function checkkerns(f,fontdata,specification)
+ local datatable=fontdata.tables.kern
+ if not datatable then
+ return
+ end
+ local features=fontdata.features
+ local gposfeatures=features and features.gpos
+ local name
+ if not gposfeatures or not gposfeatures.kern then
+ name="kern"
+ elseif specification.globalkerns then
+ name="globalkern"
+ else
+ report("ignoring global kern table using gpos kern feature")
+ return
+ end
+ report("adding global kern table as gpos feature %a",name)
+ setposition(f,datatable.offset)
+ local version=readushort(f)
+ local noftables=readushort(f)
+ local kerns=setmetatableindex("table")
+ for i=1,noftables do
+ local version=readushort(f)
+ local length=readushort(f)
+ local coverage=readushort(f)
+ local format=bit32.rshift(coverage,8)
+ if format==0 then
+ local nofpairs=readushort(f)
+ local searchrange=readushort(f)
+ local entryselector=readushort(f)
+ local rangeshift=readushort(f)
+ for i=1,nofpairs do
+ kerns[readushort(f)][readushort(f)]=readfword(f)
+ end
+ elseif format==2 then
+ else
+ end
end
- result[n]=uncovered
+ local feature={ dflt={ dflt=true } }
+ if not features then
+ fontdata.features={ gpos={ [name]=feature } }
+ elseif not gposfeatures then
+ fontdata.features.gpos={ [name]=feature }
+ else
+ gposfeatures[name]=feature
+ end
+ local sequences=fontdata.sequences
+ if not sequences then
+ sequences={}
+ fontdata.sequences=sequences
+ end
+ local nofsequences=#sequences+1
+ sequences[nofsequences]={
+ index=nofsequences,
+ name=name,
+ steps={
+ {
+ coverage=kerns,
+ format="kern",
+ },
+ },
+ nofsteps=1,
+ type="gpos_pair",
+ flags={ false,false,false,false },
+ order={ name },
+ features={ [name]=feature },
+ }
end
- return result
-end
-local function s_uncover(splitter,cache,cover)
- if cover=="" then
- return nil
- else
- local uncovered=cache[cover]
- if not uncovered then
- uncovered=lpegmatch(splitter,cover)
- cache[cover]=uncovered
+ function readers.gsub(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gsub",gsubtypes,gsubhandlers,specification.lookups)
+ end
+ end
+ function readers.gpos(f,fontdata,specification)
+ if specification.details then
+ readscripts(f,fontdata,"gpos",gpostypes,gposhandlers,specification.lookups)
+ if specification.lookups then
+ checkkerns(f,fontdata,specification)
+ end
+ end
+ end
+end
+function readers.gdef(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.gdef
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ local classoffset=tableoffset+readushort(f)
+ local attachmentoffset=tableoffset+readushort(f)
+ local ligaturecarets=tableoffset+readushort(f)
+ local markclassoffset=tableoffset+readushort(f)
+ local marksetsoffset=version==0x00010002 and (tableoffset+readushort(f))
+ local glyphs=fontdata.glyphs
+ local marks={}
+ local markclasses=setmetatableindex("table")
+ local marksets=setmetatableindex("table")
+ fontdata.marks=marks
+ fontdata.markclasses=markclasses
+ fontdata.marksets=marksets
+ setposition(f,classoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ local class=classes[readushort(f)]
+ if class=="mark" then
+ marks[index]=true
+ end
+ glyphs[index].class=class
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=classes[readushort(f)]
+ if class then
+ for index=firstindex,lastindex do
+ glyphs[index].class=class
+ if class=="mark" then
+ marks[index]=true
+ end
+ end
+ end
+ end
+ end
+ setposition(f,markclassoffset)
+ local classformat=readushort(f)
+ if classformat==1 then
+ local firstindex=readushort(f)
+ local lastindex=firstindex+readushort(f)-1
+ for index=firstindex,lastindex do
+ markclasses[readushort(f)][index]=true
+ end
+ elseif classformat==2 then
+ local nofranges=readushort(f)
+ for i=1,nofranges do
+ local firstindex=readushort(f)
+ local lastindex=readushort(f)
+ local class=markclasses[readushort(f)]
+ for index=firstindex,lastindex do
+ class[index]=true
+ end
+ end
+ end
+ if marksetsoffset then
+ setposition(f,marksetsoffset)
+ local format=readushort(f)
+ if format==1 then
+ local nofsets=readushort(f)
+ local sets={}
+ for i=1,nofsets do
+ sets[i]=readulong(f)
+ end
+ for i=1,nofsets do
+ local offset=sets[i]
+ if offset~=0 then
+ marksets[i]=readcoverage(f,marksetsoffset+offset)
+ end
+ end
+ end
+ end
end
- return { uncovered }
end
end
-local function t_hashed(t,cache)
- if t then
- local ht={}
- for i=1,#t do
- local ti=t[i]
- local tih=cache[ti]
- if not tih then
- local tn=#ti
- if tn==1 then
- tih={ [ti[1]]=true }
+local function readmathvalue(f)
+ local v=readshort(f)
+ skipshort(f,1)
+ return v
+end
+local function readmathconstants(f,fontdata,offset)
+ setposition(f,offset)
+ fontdata.mathconstants={
+ ScriptPercentScaleDown=readshort(f),
+ ScriptScriptPercentScaleDown=readshort(f),
+ DelimitedSubFormulaMinHeight=readushort(f),
+ DisplayOperatorMinHeight=readushort(f),
+ MathLeading=readmathvalue(f),
+ AxisHeight=readmathvalue(f),
+ AccentBaseHeight=readmathvalue(f),
+ FlattenedAccentBaseHeight=readmathvalue(f),
+ SubscriptShiftDown=readmathvalue(f),
+ SubscriptTopMax=readmathvalue(f),
+ SubscriptBaselineDropMin=readmathvalue(f),
+ SuperscriptShiftUp=readmathvalue(f),
+ SuperscriptShiftUpCramped=readmathvalue(f),
+ SuperscriptBottomMin=readmathvalue(f),
+ SuperscriptBaselineDropMax=readmathvalue(f),
+ SubSuperscriptGapMin=readmathvalue(f),
+ SuperscriptBottomMaxWithSubscript=readmathvalue(f),
+ SpaceAfterScript=readmathvalue(f),
+ UpperLimitGapMin=readmathvalue(f),
+ UpperLimitBaselineRiseMin=readmathvalue(f),
+ LowerLimitGapMin=readmathvalue(f),
+ LowerLimitBaselineDropMin=readmathvalue(f),
+ StackTopShiftUp=readmathvalue(f),
+ StackTopDisplayStyleShiftUp=readmathvalue(f),
+ StackBottomShiftDown=readmathvalue(f),
+ StackBottomDisplayStyleShiftDown=readmathvalue(f),
+ StackGapMin=readmathvalue(f),
+ StackDisplayStyleGapMin=readmathvalue(f),
+ StretchStackTopShiftUp=readmathvalue(f),
+ StretchStackBottomShiftDown=readmathvalue(f),
+ StretchStackGapAboveMin=readmathvalue(f),
+ StretchStackGapBelowMin=readmathvalue(f),
+ FractionNumeratorShiftUp=readmathvalue(f),
+ FractionNumeratorDisplayStyleShiftUp=readmathvalue(f),
+ FractionDenominatorShiftDown=readmathvalue(f),
+ FractionDenominatorDisplayStyleShiftDown=readmathvalue(f),
+ FractionNumeratorGapMin=readmathvalue(f),
+ FractionNumeratorDisplayStyleGapMin=readmathvalue(f),
+ FractionRuleThickness=readmathvalue(f),
+ FractionDenominatorGapMin=readmathvalue(f),
+ FractionDenominatorDisplayStyleGapMin=readmathvalue(f),
+ SkewedFractionHorizontalGap=readmathvalue(f),
+ SkewedFractionVerticalGap=readmathvalue(f),
+ OverbarVerticalGap=readmathvalue(f),
+ OverbarRuleThickness=readmathvalue(f),
+ OverbarExtraAscender=readmathvalue(f),
+ UnderbarVerticalGap=readmathvalue(f),
+ UnderbarRuleThickness=readmathvalue(f),
+ UnderbarExtraDescender=readmathvalue(f),
+ RadicalVerticalGap=readmathvalue(f),
+ RadicalDisplayStyleVerticalGap=readmathvalue(f),
+ RadicalRuleThickness=readmathvalue(f),
+ RadicalExtraAscender=readmathvalue(f),
+ RadicalKernBeforeDegree=readmathvalue(f),
+ RadicalKernAfterDegree=readmathvalue(f),
+ RadicalDegreeBottomRaisePercent=readshort(f),
+ }
+end
+local function readmathglyphinfo(f,fontdata,offset)
+ setposition(f,offset)
+ local italics=readushort(f)
+ local accents=readushort(f)
+ local extensions=readushort(f)
+ local kerns=readushort(f)
+ local glyphs=fontdata.glyphs
+ if italics~=0 then
+ setposition(f,offset+italics)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+italics+coverage,true)
+ setposition(f,offset+italics+4)
+ for i=1,nofglyphs do
+ local italic=readmathvalue(f)
+ if italic~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ italic=italic }
+ else
+ math.italic=italic
+ end
+ end
+ end
+ fontdata.hasitalics=true
+ end
+ if accents~=0 then
+ setposition(f,offset+accents)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ coverage=readcoverage(f,offset+accents+coverage,true)
+ setposition(f,offset+accents+4)
+ for i=1,nofglyphs do
+ local accent=readmathvalue(f)
+ if accent~=0 then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ accent=accent }
else
- tih={}
- for i=1,tn do
- tih[ti[i]]=true
+ math.accent=accent
+ end
+ end
+ end
+ end
+ if extensions~=0 then
+ setposition(f,offset+extensions)
+ end
+ if kerns~=0 then
+ local kernoffset=offset+kerns
+ setposition(f,kernoffset)
+ local coverage=readushort(f)
+ local nofglyphs=readushort(f)
+ if nofglyphs>0 then
+ local function get(offset)
+ setposition(f,kernoffset+offset)
+ local n=readushort(f)
+ if n>0 then
+ local l={}
+ for i=1,n do
+ l[i]={ height=readmathvalue(f) }
+ end
+ for i=1,n do
+ l[i].kern=readmathvalue(f)
+ end
+ l[n+1]={ kern=readmathvalue(f) }
+ return l
+ end
+ end
+ local kernsets={}
+ for i=1,nofglyphs do
+ local topright=readushort(f)
+ local topleft=readushort(f)
+ local bottomright=readushort(f)
+ local bottomleft=readushort(f)
+ kernsets[i]={
+ topright=topright~=0 and topright or nil,
+ topleft=topleft~=0 and topleft or nil,
+ bottomright=bottomright~=0 and bottomright or nil,
+ bottomleft=bottomleft~=0 and bottomleft or nil,
+ }
+ end
+ coverage=readcoverage(f,kernoffset+coverage,true)
+ for i=1,nofglyphs do
+ local kernset=kernsets[i]
+ if next(kernset) then
+ local k=kernset.topright if k then kernset.topright=get(k) end
+ local k=kernset.topleft if k then kernset.topleft=get(k) end
+ local k=kernset.bottomright if k then kernset.bottomright=get(k) end
+ local k=kernset.bottomleft if k then kernset.bottomleft=get(k) end
+ if next(kernset) then
+ local glyph=glyphs[coverage[i]]
+ local math=glyph.math
+ if not math then
+ glyph.math={ kerns=kernset }
+ else
+ math.kerns=kernset
+ end
end
end
- cache[ti]=tih
end
- ht[i]=tih
end
- return ht
- else
- return nil
end
end
-local function s_hashed(t,cache)
- if t then
- local tf=t[1]
- local nf=#tf
- if nf==1 then
- return { [tf[1]]=true }
- else
- local ht={}
- for i=1,nf do
- ht[i]={ [tf[i]]=true }
+local function readmathvariants(f,fontdata,offset)
+ setposition(f,offset)
+ local glyphs=fontdata.glyphs
+ local minoverlap=readushort(f)
+ local vcoverage=readushort(f)
+ local hcoverage=readushort(f)
+ local vnofglyphs=readushort(f)
+ local hnofglyphs=readushort(f)
+ local vconstruction={}
+ local hconstruction={}
+ for i=1,vnofglyphs do
+ vconstruction[i]=readushort(f)
+ end
+ for i=1,hnofglyphs do
+ hconstruction[i]=readushort(f)
+ end
+ fontdata.mathconstants.MinConnectorOverlap=minoverlap
+ local function get(offset,coverage,nofglyphs,construction,kvariants,kparts,kitalic)
+ if coverage~=0 and nofglyphs>0 then
+ local coverage=readcoverage(f,offset+coverage,true)
+ for i=1,nofglyphs do
+ local c=construction[i]
+ if c~=0 then
+ local index=coverage[i]
+ local glyph=glyphs[index]
+ local math=glyph.math
+ setposition(f,offset+c)
+ local assembly=readushort(f)
+ local nofvariants=readushort(f)
+ if nofvariants>0 then
+ local variants,v=nil,0
+ for i=1,nofvariants do
+ local variant=readushort(f)
+ if variant==index then
+ elseif variants then
+ v=v+1
+ variants[v]=variant
+ else
+ v=1
+ variants={ variant }
+ end
+ skipshort(f)
+ end
+ if not variants then
+ elseif not math then
+ math={ [kvariants]=variants }
+ glyph.math=math
+ else
+ math[kvariants]=variants
+ end
+ end
+ if assembly~=0 then
+ setposition(f,offset+c+assembly)
+ local italic=readmathvalue(f)
+ local nofparts=readushort(f)
+ local parts={}
+ for i=1,nofparts do
+ local p={
+ glyph=readushort(f),
+ start=readushort(f),
+ ["end"]=readushort(f),
+ advance=readushort(f),
+ }
+ local flags=readushort(f)
+ if bittest(flags,0x0001) then
+ p.extender=1
+ end
+ parts[i]=p
+ end
+ if not math then
+ math={
+ [kparts]=parts
+ }
+ glyph.math=math
+ else
+ math[kparts]=parts
+ end
+ if italic and italic~=0 then
+ math[kitalic]=italic
+ end
+ end
+ end
end
- return ht
end
- else
- return nil
end
+ get(offset,vcoverage,vnofglyphs,vconstruction,"vvariants","vparts","vitalic")
+ get(offset,hcoverage,hnofglyphs,hconstruction,"hvariants","hparts","hitalic")
end
-local function r_uncover(splitter,cache,cover,replacements)
- if cover=="" then
- return nil
+function readers.math(f,fontdata,specification)
+ if specification.glyphs then
+ local datatable=fontdata.tables.math
+ if datatable then
+ local tableoffset=datatable.offset
+ setposition(f,tableoffset)
+ local version=readulong(f)
+ if version~=0x00010000 then
+ report("table version %a of %a is not supported (yet), maybe font %s is bad",version,what,fontdata.filename)
+ return
+ end
+ local constants=readushort(f)
+ local glyphinfo=readushort(f)
+ local variants=readushort(f)
+ if constants==0 then
+ report("the math table of %a has no constants",fontdata.filename)
+ else
+ readmathconstants(f,fontdata,tableoffset+constants)
+ end
+ if glyphinfo~=0 then
+ readmathglyphinfo(f,fontdata,tableoffset+glyphinfo)
+ end
+ if variants~=0 then
+ readmathvariants(f,fontdata,tableoffset+variants)
+ end
+ end
+ end
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-oup']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files"
+}
+local next,type=next,type
+local P,R,S=lpeg.P,lpeg.R,lpeg.S
+local lpegmatch=lpeg.match
+local insert,remove,copy,unpack=table.insert,table.remove,table.copy,table.unpack
+local formatters=string.formatters
+local sortedkeys=table.sortedkeys
+local sortedhash=table.sortedhash
+local tohash=table.tohash
+local report=logs.reporter("otf reader")
+local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local readers=fonts.handlers.otf.readers
+local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
+local f_private=formatters["P%05X"]
+local f_unicode=formatters["U%05X"]
+local f_index=formatters["I%05X"]
+local f_character_y=formatters["%C"]
+local f_character_n=formatters["[ %C ]"]
+local doduplicates=true
+local function replaced(list,index,replacement)
+ if type(list)=="number" then
+ return replacement
+ elseif type(replacement)=="table" then
+ local t={}
+ local n=index-1
+ for i=1,n do
+ t[i]=list[i]
+ end
+ for i=1,#replacement do
+ n=n+1
+ t[n]=replacement[i]
+ end
+ for i=index+1,#list do
+ n=n+1
+ t[n]=list[i]
+ end
else
- local uncovered=cover[1]
- local replaced=cache[replacements]
- if not replaced then
- replaced=lpegmatch(splitter,replacements)
- cache[replacements]=replaced
- end
- local nu,nr=#uncovered,#replaced
- local r={}
- if nu==nr then
- for i=1,nu do
- r[uncovered[i]]=replaced[i]
- end
- end
- return r
- end
-end
-actions["reorganize lookups"]=function(data,filename,raw)
- if data.lookups then
- local splitter=data.helpers.tounicodetable
- local t_u_cache={}
- local s_u_cache=t_u_cache
- local t_h_cache={}
- local s_h_cache=t_h_cache
- local r_u_cache={}
- for _,lookup in next,data.lookups do
- local rules=lookup.rules
- if rules then
- local format=lookup.format
- if format=="class" then
- local before_class=lookup.before_class
- if before_class then
- before_class=t_uncover(splitter,t_u_cache,reversed(before_class))
- end
- local current_class=lookup.current_class
- if current_class then
- current_class=t_uncover(splitter,t_u_cache,current_class)
- end
- local after_class=lookup.after_class
- if after_class then
- after_class=t_uncover(splitter,t_u_cache,after_class)
- end
- for i=1,#rules do
- local rule=rules[i]
- local class=rule.class
- local before=class.before
- if before then
- for i=1,#before do
- before[i]=before_class[before[i]] or {}
+ list[index]=replacement
+ return list
+ end
+end
+local function unifyresources(fontdata,indices)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if not descriptions or not resources then
+ return
+ end
+ local variants=fontdata.resources.variants
+ if variants then
+ for selector,unicodes in next,variants do
+ for unicode,index in next,unicodes do
+ unicodes[unicode]=indices[index]
+ end
+ end
+ end
+ local function remark(marks)
+ if marks then
+ local newmarks={}
+ for k,v in next,marks do
+ local u=indices[k]
+ if u then
+ newmarks[u]=v
+ else
+ report("discarding mark %i",k)
+ end
+ end
+ return newmarks
+ end
+ end
+ local marks=resources.marks
+ if marks then
+ resources.marks=remark(marks)
+ end
+ local markclasses=resources.markclasses
+ if markclasses then
+ for class,marks in next,markclasses do
+ markclasses[class]=remark(marks)
+ end
+ end
+ local marksets=resources.marksets
+ if marksets then
+ for class,marks in next,marksets do
+ marksets[class]=remark(marks)
+ end
+ end
+ local done={}
+ local duplicates=doduplicates and resources.duplicates
+ if duplicates and not next(duplicates) then
+ duplicates=false
+ end
+ local function recover(cover)
+ for i=1,#cover do
+ local c=cover[i]
+ if not done[c] then
+ local t={}
+ for k,v in next,c do
+ t[indices[k]]=v
+ end
+ cover[i]=t
+ done[c]=d
+ end
+ end
+ end
+ local function recursed(c)
+ local t={}
+ for g,d in next,c do
+ if type(d)=="table" then
+ t[indices[g]]=recursed(d)
+ else
+ t[g]=indices[d]
+ end
+ end
+ return t
+ end
+ local function unifythem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ local ud1=indices[d1]
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=indices[d1]
+ end
+ end
+ done[c]=t1
end
- rule.before=t_hashed(before,t_h_cache)
+ step.coverage=t1
end
- local current=class.current
- local lookups=rule.lookups
- if current then
- for i=1,#current do
- current[i]=current_class[current[i]] or {}
- if lookups and not lookups[i] then
- lookups[i]=""
+ elseif kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
+ end
+ done[d1]=t2
+ end
+ t1[indices[g1]]=t2
end
+ done[c]=t1
end
- rule.current=t_hashed(current,t_h_cache)
+ step.coverage=t1
end
- local after=class.after
- if after then
- for i=1,#after do
- after[i]=after_class[after[i]] or {}
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ step.coverage=recursed(c)
+ end
+ elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ for i=1,#d1 do
+ d1[i]=indices[d1[i]]
+ end
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
end
- rule.after=t_hashed(after,t_h_cache)
+ step.coverage=t1
end
- rule.class=nil
- end
- lookup.before_class=nil
- lookup.current_class=nil
- lookup.after_class=nil
- lookup.format="coverage"
- elseif format=="coverage" then
- for i=1,#rules do
- local rule=rules[i]
- local coverage=rule.coverage
- if coverage then
- local before=coverage.before
- if before then
- before=t_uncover(splitter,t_u_cache,reversed(before))
- rule.before=t_hashed(before,t_h_cache)
- end
- local current=coverage.current
- if current then
- current=t_uncover(splitter,t_u_cache,current)
- local lookups=rule.lookups
- if lookups then
- for i=1,#current do
- if not lookups[i] then
- lookups[i]=""
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
+ local c=step.baseclasses
+ if c then
+ local t1=done[c]
+ if not t1 then
+ for g1,d1 in next,c do
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ t2[indices[g2]]=d2
end
+ done[d1]=t2
end
+ c[g1]=t2
end
- rule.current=t_hashed(current,t_h_cache)
+ done[c]=c
end
- local after=coverage.after
- if after then
- after=t_uncover(splitter,t_u_cache,after)
- rule.after=t_hashed(after,t_h_cache)
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
end
- rule.coverage=nil
+ step.coverage=t1
end
- end
- elseif format=="reversecoverage" then
- for i=1,#rules do
- local rule=rules[i]
- local reversecoverage=rule.reversecoverage
- if reversecoverage then
- local before=reversecoverage.before
- if before then
- before=t_uncover(splitter,t_u_cache,reversed(before))
- rule.before=t_hashed(before,t_h_cache)
- end
- local current=reversecoverage.current
- if current then
- current=t_uncover(splitter,t_u_cache,current)
- rule.current=t_hashed(current,t_h_cache)
- end
- local after=reversecoverage.after
- if after then
- after=t_uncover(splitter,t_u_cache,after)
- rule.after=t_hashed(after,t_h_cache)
- end
- local replacements=reversecoverage.replacements
- if replacements then
- rule.replacements=r_uncover(splitter,r_u_cache,current,replacements)
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ t1[indices[g1]]=d1
+ end
+ end
+ done[c]=t1
end
- rule.reversecoverage=nil
+ step.coverage=t1
end
end
- elseif format=="glyphs" then
- for i=1,#rules do
- local rule=rules[i]
- local glyphs=rule.glyphs
- if glyphs then
- local fore=glyphs.fore
- if fore and fore~="" then
- fore=s_uncover(splitter,s_u_cache,fore)
- rule.after=s_hashed(fore,s_h_cache)
- end
- local back=glyphs.back
- if back then
- back=s_uncover(splitter,s_u_cache,back)
- rule.before=s_hashed(back,s_h_cache)
- end
- local names=glyphs.names
- if names then
- names=s_uncover(splitter,s_u_cache,names)
- rule.current=s_hashed(names,s_h_cache)
- end
- rule.glyphs=nil
- local lookups=rule.lookups
- if lookups then
- for i=1,#names do
- if not lookups[i] then
- lookups[i]=""
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before if before then recover(before) end
+ local after=rule.after if after then recover(after) end
+ local current=rule.current if current then recover(current) end
+ local replacements=rule.replacements
+ if replacements then
+ if not done[replacements] then
+ local r={}
+ for k,v in next,replacements do
+ r[indices[k]]=indices[v]
end
+ rule.replacements=r
+ done[replacements]=r
end
end
end
@@ -8443,580 +13959,1874 @@ actions["reorganize lookups"]=function(data,filename,raw)
end
end
end
+ unifythem(resources.sequences)
+ unifythem(resources.sublookups)
end
-local function check_variants(unicode,the_variants,splitter,unicodes)
- local variants=the_variants.variants
- if variants then
- local glyphs=lpegmatch(splitter,variants)
- local done={ [unicode]=true }
- local n=0
- for i=1,#glyphs do
- local g=glyphs[i]
- if done[g] then
- if i>1 then
- report_otf("skipping cyclic reference %U in math variant %U",g,unicode)
- end
- else
- if n==0 then
- n=1
- variants={ g }
+local function copyduplicates(fontdata)
+ if doduplicates then
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ local duplicates=resources.duplicates
+ if duplicates then
+ for u,d in next,duplicates do
+ local du=descriptions[u]
+ if du then
+ local t={ f_character_y(u),"@",f_index(du.index),"->" }
+ local n=0
+ local m=25
+ for u in next,d do
+ if descriptions[u] then
+ if n<m then
+ t[n+4]=f_character_n(u)
+ end
+ else
+ local c=copy(du)
+ c.unicode=u
+ descriptions[u]=c
+ if n<m then
+ t[n+4]=f_character_y(u)
+ end
+ end
+ n=n+1
+ end
+ if n<=m then
+ report("duplicates: %i : % t",n,t)
+ else
+ report("duplicates: %i : % t ...",n,t)
+ end
else
+ end
+ end
+ end
+ end
+end
+local ignore={
+ ["notdef"]=true,
+ [".notdef"]=true,
+ ["null"]=true,
+ [".null"]=true,
+ ["nonmarkingreturn"]=true,
+}
+local function checklookups(fontdata,missing,nofmissing)
+ local descriptions=fontdata.descriptions
+ local resources=fontdata.resources
+ if missing and nofmissing and nofmissing<=0 then
+ return
+ end
+ local singles={}
+ local alternates={}
+ local ligatures={}
+ if not missing then
+ missing={}
+ nofmissing=0
+ for u,d in next,descriptions do
+ if not d.unicode then
+ nofmissing=nofmissing+1
+ missing[u]=true
+ end
+ end
+ end
+ local function collectthem(sequences)
+ if not sequences then
+ return
+ end
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gsub_single" then
+ local c=step.coverage
+ if c then
+ singles[#singles+1]=c
+ end
+ elseif kind=="gsub_alternate" then
+ local c=step.coverage
+ if c then
+ alternates[#alternates+1]=c
+ end
+ elseif kind=="gsub_ligature" then
+ local c=step.coverage
+ if c then
+ ligatures[#ligatures+1]=c
+ end
+ end
+ end
+ end
+ end
+ end
+ collectthem(resources.sequences)
+ collectthem(resources.sublookups)
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#singles do
+ local c=singles[i]
+ for g1,g2 in next,c do
+ if missing[g1] then
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ for i=1,#alternates do
+ local c=alternates[i]
+ for g1,d1 in next,c do
+ if missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ local u2=descriptions[g2].unicode
+ if u2 then
+ missing[g1]=false
+ descriptions[g1].unicode=u2
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ if not missing[g1] then
+ for i=1,#d1 do
+ local g2=d1[i]
+ if missing[g2] then
+ local u1=descriptions[g1].unicode
+ if u1 then
+ missing[g2]=false
+ descriptions[g2].unicode=u1
+ nofmissing=nofmissing-1
+ end
+ end
+ end
+ end
+ end
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
+ end
+ local t,n
+ local function recursed(c)
+ for g,d in next,c do
+ if g~="ligature" then
+ local u=descriptions[g].unicode
+ if u then
n=n+1
- variants[n]=g
+ t[n]=u
+ recursed(d)
+ n=n-1
end
- done[g]=true
+ elseif missing[d] then
+ local l={}
+ local m=0
+ for i=1,n do
+ local u=t[i]
+ if type(u)=="table" then
+ for i=1,#u do
+ m=m+1
+ l[m]=u[i]
+ end
+ else
+ m=m+1
+ l[m]=u
+ end
+ end
+ missing[d]=false
+ descriptions[d].unicode=l
+ nofmissing=nofmissing-1
end
end
- if n==0 then
- variants=nil
+ end
+ if nofmissing>0 then
+ t={}
+ n=0
+ local loops=0
+ while true do
+ loops=loops+1
+ local old=nofmissing
+ for i=1,#ligatures do
+ recursed(ligatures[i])
+ end
+ if nofmissing<=0 then
+ report("all done in %s loops",loops)
+ return
+ elseif old==nofmissing then
+ break
+ end
end
+ t=nil
+ n=0
end
- local parts=the_variants.parts
- if parts then
- local p=#parts
- if p>0 then
- for i=1,p do
- local pi=parts[i]
- pi.glyph=unicodes[pi.component] or 0
- pi.component=nil
+ if nofmissing>0 then
+ local done={}
+ for i,r in next,missing do
+ if r then
+ local name=descriptions[i].name or f_index(i)
+ if not ignore[name] then
+ done[name]=true
+ end
end
+ end
+ if next(done) then
+ report("not unicoded: % t",table.sortedkeys(done))
+ end
+ end
+end
+local function unifymissing(fontdata)
+ if not fonts.mappings then
+ require("font-map")
+ require("font-agl")
+ end
+ local unicodes={}
+ local private=fontdata.private
+ local resources=fontdata.resources
+ resources.unicodes=unicodes
+ for unicode,d in next,fontdata.descriptions do
+ if unicode<privateoffset then
+ local name=d.name
+ if name then
+ unicodes[name]=unicode
+ end
+ end
+ end
+ fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
+ resources.unicodes=nil
+end
+local function unifyglyphs(fontdata,usenames)
+ local private=fontdata.private or privateoffset
+ local glyphs=fontdata.glyphs
+ local indices={}
+ local descriptions={}
+ local names=usenames and {}
+ local resources=fontdata.resources
+ local zero=glyphs[0]
+ local zerocode=zero.unicode
+ if not zerocode then
+ zerocode=private
+ zero.unicode=zerocode
+ private=private+1
+ end
+ descriptions[zerocode]=zero
+ if names then
+ local name=glyphs[0].name or f_private(zerocode)
+ indices[0]=name
+ names[name]=zerocode
+ else
+ indices[0]=zerocode
+ end
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
+ elseif descriptions[unicode] then
+ report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
+ unicode=private
+ if names then
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
+ private=private+1
else
- parts=nil
+ if names then
+ local name=glyph.name or f_unicode(unicode)
+ indices[index]=name
+ names[name]=unicode
+ else
+ indices[index]=unicode
+ end
end
+ descriptions[unicode]=glyph
end
- local italic_correction=the_variants.italic_correction
- if italic_correction and italic_correction==0 then
- italic_correction=nil
+ for index=1,#glyphs do
+ local math=glyphs[index].math
+ if math then
+ local list=math.vparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.hparts
+ if list then
+ for i=1,#list do local l=list[i] l.glyph=indices[l.glyph] end
+ end
+ local list=math.vvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ local list=math.hvariants
+ if list then
+ for i=1,#list do list[i]=indices[list[i]] end
+ end
+ end
end
- return variants,parts,italic_correction
+ fontdata.private=private
+ fontdata.glyphs=nil
+ fontdata.names=names
+ fontdata.descriptions=descriptions
+ fontdata.hashmethod=hashmethod
+ return indices,names
end
-actions["analyze math"]=function(data,filename,raw)
- if raw.math then
- data.metadata.math=raw.math
- local unicodes=data.resources.unicodes
- local splitter=data.helpers.tounicodetable
- for unicode,description in next,data.descriptions do
- local glyph=description.glyph
- local mathkerns=glyph.mathkern
- local horiz_variants=glyph.horiz_variants
- local vert_variants=glyph.vert_variants
- local top_accent=glyph.top_accent
- if mathkerns or horiz_variants or vert_variants or top_accent then
- local math={}
- if top_accent then
- math.top_accent=top_accent
- end
- if mathkerns then
- for k,v in next,mathkerns do
- if not next(v) then
- mathkerns[k]=nil
- else
- for k,v in next,v do
- if v==0 then
- k[v]=nil
+local p_bogusname=(
+ (P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
+)*P(-1)
+local function stripredundant(fontdata)
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ local n=0
+ local c=0
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
+ end
+ if n>0 then
+ report("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report("%s base class tags removed (default is base)",c)
+ end
+ end
+end
+function readers.getcomponents(fontdata)
+ local resources=fontdata.resources
+ if resources then
+ local sequences=resources.sequences
+ if sequences then
+ local collected={}
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ if sequence.type=="gsub_ligature" then
+ local steps=sequence.steps
+ if steps then
+ local l={}
+ local function traverse(p,k,v)
+ if k=="ligature" then
+ collected[v]={ unpack(l) }
+ else
+ insert(l,k)
+ for k,vv in next,v do
+ traverse(p,k,vv)
+ end
+ remove(l)
+ end
+ end
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if coverage then
+ for k,v in next,coverage do
+ traverse(k,k,v)
end
end
end
end
- math.kerns=mathkerns
- end
- if horiz_variants then
- math.horiz_variants,math.horiz_parts,math.horiz_italic_correction=check_variants(unicode,horiz_variants,splitter,unicodes)
end
- if vert_variants then
- math.vert_variants,math.vert_parts,math.vert_italic_correction=check_variants(unicode,vert_variants,splitter,unicodes)
- end
- local italic_correction=description.italic
- if italic_correction and italic_correction~=0 then
- math.italic_correction=italic_correction
+ end
+ if next(collected) then
+ while true do
+ local done=false
+ for k,v in next,collected do
+ for i=1,#v do
+ local vi=v[i]
+ if vi==k then
+ collected[k]=nil
+ break
+ else
+ local c=collected[vi]
+ if c then
+ done=true
+ local t={}
+ local n=i-1
+ for j=1,n do
+ t[j]=v[j]
+ end
+ for j=1,#c do
+ n=n+1
+ t[n]=c[j]
+ end
+ for j=i+1,#v do
+ n=n+1
+ t[n]=v[j]
+ end
+ collected[k]=t
+ break
+ end
+ end
+ end
+ end
+ if not done then
+ break
+ end
end
- description.math=math
+ return collected
end
end
end
end
-actions["reorganize glyph kerns"]=function(data,filename,raw)
- local descriptions=data.descriptions
- local resources=data.resources
+function readers.rehash(fontdata,hashmethod)
+ if not (fontdata and fontdata.glyphs) then
+ return
+ end
+ if hashmethod=="indices" then
+ fontdata.hashmethod="indices"
+ elseif hashmethod=="names" then
+ fontdata.hashmethod="names"
+ local indices=unifyglyphs(fontdata,true)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ else
+ fontdata.hashmethod="unicode"
+ local indices=unifyglyphs(fontdata)
+ unifyresources(fontdata,indices)
+ copyduplicates(fontdata)
+ unifymissing(fontdata)
+ stripredundant(fontdata)
+ end
+end
+function readers.checkhash(fontdata)
+ local hashmethod=fontdata.hashmethod
+ if hashmethod=="unicodes" then
+ fontdata.names=nil
+ elseif hashmethod=="names" and fontdata.names then
+ unifyresources(fontdata,fontdata.names)
+ copyduplicates(fontdata)
+ fontdata.hashmethod="unicode"
+ fontdata.names=nil
+ else
+ readers.rehash(fontdata,"unicode")
+ end
+end
+function readers.addunicodetable(fontdata)
+ local resources=fontdata.resources
local unicodes=resources.unicodes
- for unicode,description in next,descriptions do
- local kerns=description.glyph.kerns
- if kerns then
- local newkerns={}
- for k,kern in next,kerns do
- local name=kern.char
- local offset=kern.off
- local lookup=kern.lookup
- if name and offset and lookup then
- local unicode=unicodes[name]
- if unicode then
- if type(lookup)=="table" then
- for l=1,#lookup do
- local lookup=lookup[l]
- local lookupkerns=newkerns[lookup]
- if lookupkerns then
- lookupkerns[unicode]=offset
- else
- newkerns[lookup]={ [unicode]=offset }
+ if not unicodes then
+ local descriptions=fontdata.descriptions
+ if descriptions then
+ unicodes={}
+ resources.unicodes=unicodes
+ for u,d in next,descriptions do
+ local n=d.name
+ if n then
+ unicodes[n]=u
+ end
+ end
+ end
+ end
+end
+local concat,sort=table.concat,table.sort
+local next,type,tostring=next,type,tostring
+local criterium=1
+local threshold=0
+local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
+local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local function tabstr_normal(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if type(v)=="table" then
+ s[n]=k..">"..tabstr_normal(v)
+ elseif v==true then
+ s[n]=k.."+"
+ elseif v then
+ s[n]=k.."="..v
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_flat(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ s[n]=k.."="..v
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+local function tabstr_mixed(t)
+ local s={}
+ local n=#t
+ if n==0 then
+ return ""
+ elseif n==1 then
+ local k=t[1]
+ if k==true then
+ return "++"
+ elseif k==false then
+ return "--"
+ else
+ return tostring(k)
+ end
+ else
+ for i=1,n do
+ local k=t[i]
+ if k==true then
+ s[i]="++"
+ elseif k==false then
+ s[i]="--"
+ else
+ s[i]=k
+ end
+ end
+ return concat(s,",")
+ end
+end
+local function tabstr_boolean(t)
+ local s={}
+ local n=0
+ for k,v in next,t do
+ n=n+1
+ if v then
+ s[n]=k.."+"
+ else
+ s[n]=k.."-"
+ end
+ end
+ if n==0 then
+ return ""
+ elseif n==1 then
+ return s[1]
+ else
+ sort(s)
+ return concat(s,",")
+ end
+end
+function readers.pack(data)
+ if data then
+ local h,t,c={},{},{}
+ local hh,tt,cc={},{},{}
+ local nt,ntt=0,0
+ local function pack_normal(v)
+ local tag=tabstr_normal(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_flat(v)
+ local tag=tabstr_flat(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_boolean(v)
+ local tag=tabstr_boolean(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_indexed(v)
+ local tag=concat(v," ")
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_mixed(v)
+ local tag=tabstr_mixed(v)
+ local ht=h[tag]
+ if ht then
+ c[ht]=c[ht]+1
+ return ht
+ else
+ nt=nt+1
+ t[nt]=v
+ h[tag]=nt
+ c[nt]=1
+ return nt
+ end
+ end
+ local function pack_final(v)
+ if c[v]<=criterium then
+ return t[v]
+ else
+ local hv=hh[v]
+ if hv then
+ return hv
+ else
+ ntt=ntt+1
+ tt[ntt]=t[v]
+ hh[v]=ntt
+ cc[ntt]=c[v]
+ return ntt
+ end
+ end
+ end
+ local function success(stage,pass)
+ if nt==0 then
+ if trace_loading or trace_packing then
+ report_otf("pack quality: nothing to pack")
+ end
+ return false
+ elseif nt>=threshold then
+ local one,two,rest=0,0,0
+ if pass==1 then
+ for k,v in next,c do
+ if v==1 then
+ one=one+1
+ elseif v==2 then
+ two=two+1
+ else
+ rest=rest+1
+ end
+ end
+ else
+ for k,v in next,cc do
+ if v>20 then
+ rest=rest+1
+ elseif v>10 then
+ two=two+1
+ else
+ one=one+1
+ end
+ end
+ data.tables=tt
+ end
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",
+ stage,pass,one+two+rest,one,two,rest,criterium)
+ end
+ return true
+ else
+ if trace_loading or trace_packing then
+ report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",
+ stage,pass,nt,threshold)
+ end
+ return false
+ end
+ end
+ local function packers(pass)
+ if pass==1 then
+ return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed
+ else
+ return pack_final,pack_final,pack_final,pack_final,pack_final
+ end
+ end
+ local resources=data.resources
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local chardata=characters and characters.data
+ local descriptions=data.descriptions or data.glyphs
+ if not descriptions then
+ return
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 1, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ for unicode,description in next,descriptions do
+ local boundingbox=description.boundingbox
+ if boundingbox then
+ description.boundingbox=pack_indexed(boundingbox)
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ for tag,kern in next,kerns do
+ kerns[tag]=pack_normal(kern)
+ end
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ else
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local f=d2[1] if f then d2[1]=pack_indexed(f) end
+ local s=d2[2] if s then d2[2]=pack_indexed(s) end
+ end
+ end
+ end
+ end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ step.coverage=pack_normal(c)
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_indexed(d1)
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=d1[2] if f then d1[2]=pack_indexed(f) end
+ local s=d1[3] if s then d1[3]=pack_indexed(s) end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_indexed(d2)
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ d2[g3]=pack_indexed(d3)
+ end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ d1[2]=pack_indexed(d1[2])
+ end
end
end
- else
- local lookupkerns=newkerns[lookup]
- if lookupkerns then
- lookupkerns[unicode]=offset
- else
- newkerns[lookup]={ [unicode]=offset }
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
+ local r=rule.replacements if r then rule.replacements=pack_flat (r) end
+ end
end
end
- elseif trace_loading then
- report_otf("problems with unicode %a of kern %a of glyph %U",name,k,unicode)
end
+ if order then
+ sequence.order=pack_indexed(order)
+ end
+ if features then
+ for script,feature in next,features do
+ features[script]=pack_normal(feature)
+ end
+ end
+ if flags then
+ sequence.flags=pack_normal(flags)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ list[feature]=pack_normal(spec)
+ end
+ end
+ end
+ if not success(1,pass) then
+ return
+ end
+ end
+ if nt>0 then
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 2, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ for unicode,description in next,descriptions do
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ math.kerns=pack_normal(kerns)
+ end
+ end
+ end
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ else
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ d1[g2]=pack_normal(d2)
+ end
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local r=rule.before if r then rule.before=pack_normal(r) end
+ local r=rule.after if r then rule.after=pack_normal(r) end
+ local r=rule.current if r then rule.current=pack_normal(r) end
+ end
+ end
+ end
+ end
+ if features then
+ sequence.features=pack_normal(features)
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
+ end
+ if not success(2,pass) then
+ end
+ end
+ for pass=1,2 do
+ if trace_packing then
+ report_otf("start packing: stage 3, pass %s",pass)
+ end
+ local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
+ local function packthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local features=sequence.features
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ else
+ for g1,d1 in next,c do
+ c[g1]=pack_normal(d1)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if sequences then
+ packthem(sequences)
+ end
+ if sublookups then
+ packthem(sublookups)
end
end
- description.kerns=newkerns
end
end
end
-actions["merge kern classes"]=function(data,filename,raw)
- local gposlist=raw.gpos
- if gposlist then
- local descriptions=data.descriptions
- local resources=data.resources
- local unicodes=resources.unicodes
- local splitter=data.helpers.tounicodetable
- local ignored=0
- local blocked=0
- for gp=1,#gposlist do
- local gpos=gposlist[gp]
- local subtables=gpos.subtables
- if subtables then
- local first_done={}
- local split={}
- for s=1,#subtables do
- local subtable=subtables[s]
- local kernclass=subtable.kernclass
- local lookup=subtable.lookup or subtable.name
- if kernclass then
- if #kernclass>0 then
- kernclass=kernclass[1]
- lookup=type(kernclass.lookup)=="string" and kernclass.lookup or lookup
- report_otf("fixing kernclass table of lookup %a",lookup)
- end
- local firsts=kernclass.firsts
- local seconds=kernclass.seconds
- local offsets=kernclass.offsets
- for n,s in next,firsts do
- split[s]=split[s] or lpegmatch(splitter,s)
- end
- local maxseconds=0
- for n,s in next,seconds do
- if n>maxseconds then
- maxseconds=n
- end
- split[s]=split[s] or lpegmatch(splitter,s)
- end
- for fk=1,#firsts do
- local fv=firsts[fk]
- local splt=split[fv]
- if splt then
- local extrakerns={}
- local baseoffset=(fk-1)*maxseconds
- for sk=2,maxseconds do
- local sv=seconds[sk]
- local splt=split[sv]
- if splt then
- local offset=offsets[baseoffset+sk]
- if offset then
- for i=1,#splt do
- extrakerns[splt[i]]=offset
+local unpacked_mt={
+ __index=function(t,k)
+ t[k]=false
+ return k
+ end
+}
+function readers.unpack(data)
+ if data then
+ local tables=data.tables
+ if tables then
+ local resources=data.resources
+ local descriptions=data.descriptions or data.glyphs
+ local sequences=resources.sequences
+ local sublookups=resources.sublookups
+ local features=resources.features
+ local unpacked={}
+ setmetatable(unpacked,unpacked_mt)
+ for unicode,description in next,descriptions do
+ local tv=tables[description.boundingbox]
+ if tv then
+ description.boundingbox=tv
+ end
+ local math=description.math
+ if math then
+ local kerns=math.kerns
+ if kerns then
+ local tm=tables[kerns]
+ if tm then
+ math.kerns=tm
+ kerns=unpacked[tm]
+ end
+ if kerns then
+ for k,kern in next,kerns do
+ local tv=tables[kern]
+ if tv then
+ kerns[k]=tv
+ end
+ end
+ end
+ end
+ end
+ end
+ local function unpackthem(sequences)
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local kind=sequence.type
+ local steps=sequence.steps
+ local order=sequence.order
+ local features=sequence.features
+ local flags=sequence.flags
+ local markclass=sequence.markclass
+ if steps then
+ for i=1,#steps do
+ local step=steps[i]
+ if kind=="gpos_pair" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
+ d1=tv
+ end
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
+ d2=tv
+ end
+ local f=tables[d2[1]] if f then d2[1]=f end
+ local s=tables[d2[2]] if s then d2[2]=s end
end
end
end
end
- for i=1,#splt do
- local first_unicode=splt[i]
- if first_done[first_unicode] then
- report_otf("lookup %a: ignoring further kerns of %C",lookup,first_unicode)
- blocked=blocked+1
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ if step.format=="kern" then
+ local tv=tables[c]
+ if tv then
+ step.coverage=tv
+ end
else
- first_done[first_unicode]=true
- local description=descriptions[first_unicode]
- if description then
- local kerns=description.kerns
- if not kerns then
- kerns={}
- description.kerns=kerns
+ for g1,d1 in next,c do
+ local tv=tables[d1]
+ if tv then
+ c[g1]=tv
end
- local lookupkerns=kerns[lookup]
- if not lookupkerns then
- lookupkerns={}
- kerns[lookup]=lookupkerns
+ end
+ end
+ end
+ elseif kind=="gpos_cursive" then
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local f=tables[d1[2]] if f then d1[2]=f end
+ local s=tables[d1[3]] if s then d1[3]=s end
+ end
+ end
+ elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ local tv=tables[d2]
+ if tv then
+ d1[g2]=tv
end
- if overloadkerns then
- for second_unicode,kern in next,extrakerns do
- lookupkerns[second_unicode]=kern
- end
- else
- for second_unicode,kern in next,extrakerns do
- local k=lookupkerns[second_unicode]
- if not k then
- lookupkerns[second_unicode]=kern
- elseif k~=kern then
- if trace_loading then
- report_otf("lookup %a: ignoring overload of kern between %C and %C, rejecting %a, keeping %a",lookup,first_unicode,second_unicode,k,kern)
- end
- ignored=ignored+1
- end
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ elseif kind=="gpos_mark2ligature" then
+ local c=step.baseclasses
+ if c then
+ for g1,d1 in next,c do
+ for g2,d2 in next,d1 do
+ for g3,d3 in next,d2 do
+ local tv=tables[d2[g3]]
+ if tv then
+ d2[g3]=tv
end
end
- elseif trace_loading then
- report_otf("no glyph data for %U",first_unicode)
+ end
+ end
+ end
+ local c=step.coverage
+ if c then
+ for g1,d1 in next,c do
+ local tv=tables[d1[2]]
+ if tv then
+ d1[2]=tv
+ end
+ end
+ end
+ end
+ local rules=step.rules
+ if rules then
+ for i=1,#rules do
+ local rule=rules[i]
+ local before=rule.before
+ if before then
+ local tv=tables[before]
+ if tv then
+ rule.before=tv
+ before=tv
+ end
+ for i=1,#before do
+ local tv=tables[before[i]]
+ if tv then
+ before[i]=tv
+ end
+ end
+ end
+ local after=rule.after
+ if after then
+ local tv=tables[after]
+ if tv then
+ rule.after=tv
+ after=tv
+ end
+ for i=1,#after do
+ local tv=tables[after[i]]
+ if tv then
+ after[i]=tv
+ end
+ end
+ end
+ local current=rule.current
+ if current then
+ local tv=tables[current]
+ if tv then
+ rule.current=tv
+ current=tv
+ end
+ for i=1,#current do
+ local tv=tables[current[i]]
+ if tv then
+ current[i]=tv
+ end
+ end
+ end
+ local replacements=rule.replacements
+ if replacements then
+ local tv=tables[replace]
+ if tv then
+ rule.replacements=tv
end
end
end
end
end
- subtable.kernclass={}
+ end
+ if features then
+ local tv=tables[features]
+ if tv then
+ sequence.features=tv
+ features=tv
+ end
+ for script,feature in next,features do
+ local tv=tables[feature]
+ if tv then
+ features[script]=tv
+ end
+ end
+ end
+ if order then
+ local tv=tables[order]
+ if tv then
+ sequence.order=tv
+ end
+ end
+ if flags then
+ local tv=tables[flags]
+ if tv then
+ sequence.flags=tv
+ end
end
end
end
- end
- if ignored>0 then
- report_otf("%s kern overloads ignored",ignored)
- end
- if blocked>0 then
- report_otf("%s succesive kerns blocked",blocked)
+ if sequences then
+ unpackthem(sequences)
+ end
+ if sublookups then
+ unpackthem(sublookups)
+ end
+ if features then
+ for k,list in next,features do
+ for feature,spec in next,list do
+ local tv=tables[spec]
+ if tv then
+ list[feature]=tv
+ end
+ end
+ end
+ end
+ data.tables=nil
end
end
end
-actions["check glyphs"]=function(data,filename,raw)
- for unicode,description in next,data.descriptions do
- description.glyph=nil
+local mt={
+ __index=function(t,k)
+ if k=="height" then
+ local ht=t.boundingbox[4]
+ return ht<0 and 0 or ht
+ elseif k=="depth" then
+ local dp=-t.boundingbox[2]
+ return dp<0 and 0 or dp
+ elseif k=="width" then
+ return 0
+ elseif k=="name" then
+ return forcenotdef and ".notdef"
+ end
end
+}
+local function sameformat(sequence,steps,first,nofsteps,kind)
+ return true
end
-local valid=(R("\x00\x7E")-S("(){}[]<>%/ \n\r\f\v"))^0*P(-1)
-local function valid_ps_name(str)
- return str and str~="" and #str<64 and lpegmatch(valid,str) and true or false
-end
-actions["check metadata"]=function(data,filename,raw)
- local metadata=data.metadata
- for _,k in next,mainfields do
- if valid_fields[k] then
- local v=raw[k]
- if not metadata[k] then
- metadata[k]=v
+local function mergesteps_1(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ if not target[k] then
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.merged=true
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_2(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ if strict then
+ local f=first.format
+ for i=2,nofsteps do
+ if steps[i].format~=f then
+ report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ return 0
+ end
+ end
+ end
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ for k,v in next,v do
+ if not tk[k] then
+ tk[k]=v
+ end
+ end
+ else
+ target[k]=v
+ end
+ end
+ end
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function mergesteps_3(lookup,strict)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local baseclasses={}
+ local coverage={}
+ local used={}
+ for i=1,nofsteps do
+ local offset=i*10
+ local step=steps[i]
+ for k,v in sortedhash(step.baseclasses) do
+ baseclasses[offset+k]=v
+ end
+ for k,v in next,step.coverage do
+ local tk=coverage[k]
+ if tk then
+ for k,v in next,v do
+ if not tk[k] then
+ tk[k]=v
+ local c=offset+v[1]
+ v[1]=c
+ if not used[c] then
+ used[c]=true
+ end
+ end
+ end
+ else
+ coverage[k]=v
+ local c=offset+v[1]
+ v[1]=c
+ if not used[c] then
+ used[c]=true
+ end
end
end
end
- local ttftables=metadata.ttf_tables
- if ttftables then
- for i=1,#ttftables do
- ttftables[i].data="deleted"
+ for k,v in next,baseclasses do
+ if not used[k] then
+ baseclasses[k]=nil
+ report("discarding not used baseclass %i",k)
end
end
- if metadata.validation_state and table.contains(metadata.validation_state,"bad_ps_fontname") then
- local function valid(what)
- local names=raw.names
- for i=1,#names do
- local list=names[i]
- local names=list.names
- if names then
- local name=names[what]
- if name and valid_ps_name(name) then
- return name
- end
- end
+ first.baseclasses=baseclasses
+ first.coverage=coverage
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
+end
+local function nested(old,new)
+ for k,v in next,old do
+ if k=="ligature" then
+ if not new.ligature then
+ new.ligature=v
end
- end
- local function check(what)
- local oldname=metadata[what]
- if valid_ps_name(oldname) then
- report_otf("ignoring warning %a because %s %a is proper ASCII","bad_ps_fontname",what,oldname)
+ else
+ local n=new[k]
+ if n then
+ nested(v,n)
else
- local newname=valid(what)
- if not newname then
- newname=formatters["bad-%s-%s"](what,file.nameonly(filename))
- end
- local warning=formatters["overloading %s from invalid ASCII name %a to %a"](what,oldname,newname)
- data.warnings[#data.warnings+1]=warning
- report_otf(warning)
- metadata[what]=newname
+ new[k]=v
end
end
- check("fontname")
- check("fullname")
end
end
-actions["cleanup tables"]=function(data,filename,raw)
- local duplicates=data.resources.duplicates
- if duplicates then
- for k,v in next,duplicates do
- if #v==1 then
- duplicates[k]=v[1]
+local function mergesteps_4(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local first=steps[1]
+ report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ local target=first.coverage
+ for i=2,nofsteps do
+ for k,v in next,steps[i].coverage do
+ local tk=target[k]
+ if tk then
+ nested(v,tk)
+ else
+ target[k]=v
end
end
end
- data.resources.indices=nil
- data.resources.unicodes=nil
- data.helpers=nil
+ lookup.nofsteps=1
+ lookup.steps={ first }
+ return nofsteps-1
end
-actions["reorganize glyph lookups"]=function(data,filename,raw)
- local resources=data.resources
- local unicodes=resources.unicodes
- local descriptions=data.descriptions
- local splitter=data.helpers.tounicodelist
- local lookuptypes=resources.lookuptypes
- for unicode,description in next,descriptions do
- local lookups=description.glyph.lookups
- if lookups then
- for tag,lookuplist in next,lookups do
- for l=1,#lookuplist do
- local lookup=lookuplist[l]
- local specification=lookup.specification
- local lookuptype=lookup.type
- local lt=lookuptypes[tag]
- if not lt then
- lookuptypes[tag]=lookuptype
- elseif lt~=lookuptype then
- report_otf("conflicting lookuptypes, %a points to %a and %a",tag,lt,lookuptype)
- end
- if lookuptype=="ligature" then
- lookuplist[l]={ lpegmatch(splitter,specification.components) }
- elseif lookuptype=="alternate" then
- lookuplist[l]={ lpegmatch(splitter,specification.components) }
- elseif lookuptype=="substitution" then
- lookuplist[l]=unicodes[specification.variant]
- elseif lookuptype=="multiple" then
- lookuplist[l]={ lpegmatch(splitter,specification.components) }
- elseif lookuptype=="position" then
- lookuplist[l]={
- specification.x or 0,
- specification.y or 0,
- specification.h or 0,
- specification.v or 0
- }
- elseif lookuptype=="pair" then
- local one=specification.offsets[1]
- local two=specification.offsets[2]
- local paired=unicodes[specification.paired]
- if one then
- if two then
- lookuplist[l]={ paired,{ one.x or 0,one.y or 0,one.h or 0,one.v or 0 },{ two.x or 0,two.y or 0,two.h or 0,two.v or 0 } }
- else
- lookuplist[l]={ paired,{ one.x or 0,one.y or 0,one.h or 0,one.v or 0 } }
- end
- else
- if two then
- lookuplist[l]={ paired,{},{ two.x or 0,two.y or 0,two.h or 0,two.v or 0} }
- else
- lookuplist[l]={ paired }
- end
- end
- end
+local function checkkerns(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ if d1[1]~=0 or d1[2]~=0 or d1[4]~=0 then
+ kerns=false
+ break
end
end
- local slookups,mlookups
- for tag,lookuplist in next,lookups do
- if #lookuplist==1 then
- if slookups then
- slookups[tag]=lookuplist[1]
- else
- slookups={ [tag]=lookuplist[1] }
- end
- else
- if mlookups then
- mlookups[tag]=lookuplist
- else
- mlookups={ [tag]=lookuplist }
- end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ coverage[g1]=d1[3]
end
- end
- if slookups then
- description.slookups=slookups
- end
- if mlookups then
- description.mlookups=mlookups
+ step.format="kern"
end
end
end
end
-local zero={ 0,0 }
-actions["reorganize glyph anchors"]=function(data,filename,raw)
- local descriptions=data.descriptions
- for unicode,description in next,descriptions do
- local anchors=description.glyph.anchors
- if anchors then
- for class,data in next,anchors do
- if class=="baselig" then
- for tag,specification in next,data do
- local n=0
- for k,v in next,specification do
- if k>n then
- n=k
- end
- local x,y=v.x,v.y
- if x or y then
- specification[k]={ x or 0,y or 0 }
- else
- specification[k]=zero
- end
- end
- local t={}
- for i=1,n do
- t[i]=specification[i] or zero
+local function checkpairs(lookup)
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ local kerned=0
+ for i=1,nofsteps do
+ local step=steps[i]
+ if step.format=="pair" then
+ local coverage=step.coverage
+ local kerns=true
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ if d2[2] then
+ kerns=false
+ break
+ else
+ local v=d2[1]
+ if v[1]~=0 or v[2]~=0 or v[4]~=0 then
+ kerns=false
+ break
end
- data[tag]=t
end
- else
- for tag,specification in next,data do
- local x,y=specification.x,specification.y
- if x or y then
- data[tag]={ x or 0,y or 0 }
- else
- data[tag]=zero
- end
+ end
+ end
+ if kerns then
+ report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ for g1,d1 in next,coverage do
+ for g2,d2 in next,d1 do
+ d1[g2]=d2[1][3]
end
end
+ step.format="kern"
+ kerned=kerned+1
end
- description.anchors=anchors
end
end
+ return kerned
end
-local bogusname=(P("uni")+P("u"))*R("AF","09")^4+(P("index")+P("glyph")+S("Ii")*P("dentity")*P(".")^0)*R("09")^1
-local uselessname=(1-bogusname)^0*bogusname
-actions["purge names"]=function(data,filename,raw)
- if purge_names then
- local n=0
- for u,d in next,data.descriptions do
- if lpegmatch(uselessname,d.name) then
- n=n+1
- d.name=nil
+function readers.compact(data)
+ if not data or data.compacted then
+ return
+ else
+ data.compacted=true
+ end
+ local resources=data.resources
+ local merged=0
+ local kerned=0
+ local allsteps=0
+ local function compact(what)
+ local lookups=resources[what]
+ if lookups then
+ for i=1,#lookups do
+ local lookup=lookups[i]
+ local nofsteps=lookup.nofsteps
+ allsteps=allsteps+nofsteps
+ if nofsteps>1 then
+ local kind=lookup.type
+ if kind=="gsub_single" or kind=="gsub_alternate" or kind=="gsub_multiple" then
+ merged=merged+mergesteps_1(lookup)
+ elseif kind=="gsub_ligature" then
+ merged=merged+mergesteps_4(lookup)
+ elseif kind=="gpos_single" then
+ merged=merged+mergesteps_1(lookup,true)
+ checkkerns(lookup)
+ elseif kind=="gpos_pair" then
+ merged=merged+mergesteps_2(lookup,true)
+ kerned=kerned+checkpairs(lookup)
+ elseif kind=="gpos_cursive" then
+ merged=merged+mergesteps_2(lookup)
+ elseif kind=="gpos_mark2mark" or kind=="gpos_mark2base" or kind=="gpos_mark2ligature" then
+ merged=merged+mergesteps_3(lookup)
+ end
+ end
end
+ else
+ report("no lookups in %a",what)
end
- if n>0 then
- report_otf("%s bogus names removed",n)
- end
+ end
+ compact("sequences")
+ compact("sublookups")
+ if merged>0 then
+ report("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
end
end
-actions["compact lookups"]=function(data,filename,raw)
- if not compact_lookups then
- report_otf("not compacting")
+function readers.expand(data)
+ if not data or data.expanded then
return
+ else
+ data.expanded=true
end
- local last=0
- local tags=table.setmetatableindex({},
- function(t,k)
- last=last+1
- t[k]=last
- return last
- end
- )
- local descriptions=data.descriptions
local resources=data.resources
- for u,d in next,descriptions do
- local slookups=d.slookups
- if type(slookups)=="table" then
- local s={}
- for k,v in next,slookups do
- s[tags[k]]=v
- end
- d.slookups=s
- end
- local mlookups=d.mlookups
- if type(mlookups)=="table" then
- local m={}
- for k,v in next,mlookups do
- m[tags[k]]=v
+ local sublookups=resources.sublookups
+ local sequences=resources.sequences
+ local markclasses=resources.markclasses
+ local descriptions=data.descriptions
+ if descriptions then
+ local defaultwidth=resources.defaultwidth or 0
+ local defaultheight=resources.defaultheight or 0
+ local defaultdepth=resources.defaultdepth or 0
+ local basename=trace_markwidth and file.basename(resources.filename)
+ for u,d in next,descriptions do
+ local bb=d.boundingbox
+ local wd=d.width
+ if not wd then
+ d.width=defaultwidth
+ elseif trace_markwidth and wd~=0 and d.class=="mark" then
+ report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
end
- d.mlookups=m
- end
- local kerns=d.kerns
- if type(kerns)=="table" then
- local t={}
- for k,v in next,kerns do
- t[tags[k]]=v
+ if bb then
+ local ht=bb[4]
+ local dp=-bb[2]
+ if ht==0 or ht<0 then
+ else
+ d.height=ht
+ end
+ if dp==0 or dp<0 then
+ else
+ d.depth=dp
+ end
end
- d.kerns=t
end
end
- local lookups=data.lookups
- if lookups then
- local l={}
- for k,v in next,lookups do
- local rules=v.rules
- if rules then
- for i=1,#rules do
- local l=rules[i].lookups
- if type(l)=="table" then
- for i=1,#l do
- l[i]=tags[l[i]]
+ local function expandlookups(sequences)
+ if sequences then
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kind=sequence.type
+ local markclass=sequence.markclass
+ if markclass then
+ if not markclasses then
+ report_warning("missing markclasses")
+ sequence.markclass=false
+ else
+ sequence.markclass=markclasses[markclass]
+ end
+ end
+ for i=1,sequence.nofsteps do
+ local step=steps[i]
+ local baseclasses=step.baseclasses
+ if baseclasses then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=baseclasses[v[1]]
+ end
+ elseif kind=="gpos_cursive" then
+ local coverage=step.coverage
+ for k,v in next,coverage do
+ v[1]=coverage
+ end
+ end
+ local rules=step.rules
+ if rules then
+ local rulehash={}
+ local rulesize=0
+ local coverage={}
+ local lookuptype=sequence.type
+ step.coverage=coverage
+ for nofrules=1,#rules do
+ local rule=rules[nofrules]
+ local current=rule.current
+ local before=rule.before
+ local after=rule.after
+ local replacements=rule.replacements or false
+ local sequence={}
+ local nofsequences=0
+ if before then
+ for n=1,#before do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=before[n]
+ end
+ end
+ local start=nofsequences+1
+ for n=1,#current do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=current[n]
+ end
+ local stop=nofsequences
+ if after then
+ for n=1,#after do
+ nofsequences=nofsequences+1
+ sequence[nofsequences]=after[n]
+ end
+ end
+ local lookups=rule.lookups or false
+ local subtype=nil
+ if lookups then
+ for k,v in next,lookups do
+ local lookup=sublookups[v]
+ if lookup then
+ lookups[k]=lookup
+ if not subtype then
+ subtype=lookup.type
+ end
+ else
+ end
+ end
+ end
+ if sequence[1] then
+ rulesize=rulesize+1
+ rulehash[rulesize]={
+ nofrules,
+ lookuptype,
+ sequence,
+ start,
+ stop,
+ lookups,
+ replacements,
+ subtype,
+ }
+ for unic in next,sequence[start] do
+ local cu=coverage[unic]
+ if not cu then
+ coverage[unic]=rulehash
+ end
+ end
+ end
+ end
end
end
end
end
- l[tags[k]]=v
end
- data.lookups=l
end
- local lookups=resources.lookups
- if lookups then
- local l={}
- for k,v in next,lookups do
- local s=v.subtables
- if type(s)=="table" then
- for i=1,#s do
- s[i]=tags[s[i]]
- end
- end
- l[tags[k]]=v
+ expandlookups(sequences)
+ expandlookups(sublookups)
+end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
+if not modules then modules={} end modules ['font-otl']={
+ version=1.001,
+ comment="companion to font-ini.mkiv",
+ author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright="PRAGMA ADE / ConTeXt Development Team",
+ license="see context related readme files",
+}
+local gmatch,find,match,lower,strip=string.gmatch,string.find,string.match,string.lower,string.strip
+local type,next,tonumber,tostring,unpack=type,next,tonumber,tostring,unpack
+local abs=math.abs
+local ioflush=io.flush
+local derivetable=table.derive
+local formatters=string.formatters
+local setmetatableindex=table.setmetatableindex
+local allocate=utilities.storage.allocate
+local registertracker=trackers.register
+local registerdirective=directives.register
+local starttiming=statistics.starttiming
+local stoptiming=statistics.stoptiming
+local elapsedtime=statistics.elapsedtime
+local findbinfile=resolvers.findbinfile
+local trace_loading=false registertracker("otf.loading",function(v) trace_loading=v end)
+local trace_features=false registertracker("otf.features",function(v) trace_features=v end)
+local trace_defining=false registertracker("fonts.defining",function(v) trace_defining=v end)
+local report_otf=logs.reporter("fonts","otf loading")
+local fonts=fonts
+local otf=fonts.handlers.otf
+otf.version=3.018
+otf.cache=containers.define("fonts","otl",otf.version,true)
+local otfreaders=otf.readers
+local hashes=fonts.hashes
+local definers=fonts.definers
+local readers=fonts.readers
+local constructors=fonts.constructors
+local otffeatures=constructors.newfeatures("otf")
+local registerotffeature=otffeatures.register
+local enhancers=allocate()
+otf.enhancers=enhancers
+local patches={}
+enhancers.patches=patches
+local forceload=false
+local cleanup=0
+local syncspace=true
+local forcenotdef=false
+local applyruntimefixes=fonts.treatments and fonts.treatments.applyfixes
+local wildcard="*"
+local default="dflt"
+local formats=fonts.formats
+formats.otf="opentype"
+formats.ttf="truetype"
+formats.ttc="truetype"
+registerdirective("fonts.otf.loader.cleanup",function(v) cleanup=tonumber(v) or (v and 1) or 0 end)
+registerdirective("fonts.otf.loader.force",function(v) forceload=v end)
+registerdirective("fonts.otf.loader.syncspace",function(v) syncspace=v end)
+registerdirective("fonts.otf.loader.forcenotdef",function(v) forcenotdef=v end)
+local ordered_enhancers={
+ "check extra features",
+}
+local actions=allocate()
+local before=allocate()
+local after=allocate()
+patches.before=before
+patches.after=after
+local function enhance(name,data,filename,raw)
+ local enhancer=actions[name]
+ if enhancer then
+ if trace_loading then
+ report_otf("apply enhancement %a to file %a",name,filename)
+ ioflush()
end
- resources.lookups=l
+ enhancer(data,filename,raw)
+ else
end
- local sequences=resources.sequences
- if sequences then
- for i=1,#sequences do
- local s=sequences[i]
- local n=s.name
- if n then
- s.name=tags[n]
+end
+function enhancers.apply(data,filename,raw)
+ local basename=file.basename(lower(filename))
+ if trace_loading then
+ report_otf("%s enhancing file %a","start",filename)
+ end
+ ioflush()
+ for e=1,#ordered_enhancers do
+ local enhancer=ordered_enhancers[e]
+ local b=before[enhancer]
+ if b then
+ for pattern,action in next,b do
+ if find(basename,pattern) then
+ action(data,filename,raw)
+ end
end
- local t=s.subtables
- if type(t)=="table" then
- for i=1,#t do
- t[i]=tags[t[i]]
+ end
+ enhance(enhancer,data,filename,raw)
+ local a=after[enhancer]
+ if a then
+ for pattern,action in next,a do
+ if find(basename,pattern) then
+ action(data,filename,raw)
end
end
end
+ ioflush()
end
- local lookuptypes=resources.lookuptypes
- if lookuptypes then
- local l={}
- for k,v in next,lookuptypes do
- l[tags[k]]=v
+ if trace_loading then
+ report_otf("%s enhancing file %a","stop",filename)
+ end
+ ioflush()
+end
+function patches.register(what,where,pattern,action)
+ local pw=patches[what]
+ if pw then
+ local ww=pw[where]
+ if ww then
+ ww[pattern]=action
+ else
+ pw[where]={ [pattern]=action}
end
- resources.lookuptypes=l
end
- local anchor_to_lookup=resources.anchor_to_lookup
- if anchor_to_lookup then
- for anchor,lookups in next,anchor_to_lookup do
- local l={}
- for lookup,value in next,lookups do
- l[tags[lookup]]=value
+end
+function patches.report(fmt,...)
+ if trace_loading then
+ report_otf("patching: %s",formatters[fmt](...))
+ end
+end
+function enhancers.register(what,action)
+ actions[what]=action
+end
+function otf.load(filename,sub,featurefile)
+ local featurefile=nil
+ local base=file.basename(file.removesuffix(filename))
+ local name=file.removesuffix(base)
+ local attr=lfs.attributes(filename)
+ local size=attr and attr.size or 0
+ local time=attr and attr.modification or 0
+ if featurefile then
+ name=name.."@"..file.removesuffix(file.basename(featurefile))
+ end
+ if sub=="" then
+ sub=false
+ end
+ local hash=name
+ if sub then
+ hash=hash.."-"..sub
+ end
+ hash=containers.cleanname(hash)
+ local featurefiles
+ if featurefile then
+ featurefiles={}
+ for s in gmatch(featurefile,"[^,]+") do
+ local name=resolvers.findfile(file.addsuffix(s,'fea'),'fea') or ""
+ if name=="" then
+ report_otf("loading error, no featurefile %a",s)
+ else
+ local attr=lfs.attributes(name)
+ featurefiles[#featurefiles+1]={
+ name=name,
+ size=attr and attr.size or 0,
+ time=attr and attr.modification or 0,
+ }
end
- anchor_to_lookup[anchor]=l
+ end
+ if #featurefiles==0 then
+ featurefiles=nil
end
end
- local lookup_to_anchor=resources.lookup_to_anchor
- if lookup_to_anchor then
- local l={}
- for lookup,value in next,lookup_to_anchor do
- l[tags[lookup]]=value
+ local data=containers.read(otf.cache,hash)
+ local reload=not data or data.size~=size or data.time~=time or data.tableversion~=otfreaders.tableversion
+ if forceload then
+ report_otf("forced reload of %a due to hard coded flag",filename)
+ reload=true
+ end
+ if reload then
+ report_otf("loading %a, hash %a",filename,hash)
+ starttiming(otfreaders)
+ data=otfreaders.loadfont(filename,sub or 1)
+ if data then
+ otfreaders.compact(data)
+ otfreaders.rehash(data,"unicodes")
+ otfreaders.addunicodetable(data)
+ otfreaders.extend(data)
+ otfreaders.pack(data)
+ report_otf("loading done")
+ report_otf("saving %a in cache",filename)
+ data=containers.write(otf.cache,hash,data)
+ if cleanup>1 then
+ collectgarbage("collect")
+ end
+ stoptiming(otfreaders)
+ if elapsedtime then
+ report_otf("loading, optimizing, packing and caching time %s",elapsedtime(otfreaders))
+ end
+ if cleanup>3 then
+ collectgarbage("collect")
+ end
+ data=containers.read(otf.cache,hash)
+ if cleanup>2 then
+ collectgarbage("collect")
+ end
+ else
+ data=nil
+ report_otf("loading failed due to read error")
+ end
+ end
+ if data then
+ if trace_defining then
+ report_otf("loading from cache using hash %a",hash)
+ end
+ otfreaders.unpack(data)
+ otfreaders.expand(data)
+ otfreaders.addunicodetable(data)
+ enhancers.apply(data,filename,data)
+ constructors.addcoreunicodes(unicodes)
+ if applyruntimefixes then
+ applyruntimefixes(filename,data)
end
- resources.lookup_to_anchor=l
+ data.metadata.math=data.resources.mathconstants
end
- tags=table.swapped(tags)
- report_otf("%s lookup tags compacted",#tags)
- resources.lookuptags=tags
+ return data
end
function otf.setfeatures(tfmdata,features)
local okay=constructors.initializefeatures("otf",tfmdata,features,trace_features,report_otf)
@@ -9029,7 +15839,6 @@ end
local function copytotfm(data,cache_id)
if data then
local metadata=data.metadata
- local warnings=data.warnings
local resources=data.resources
local properties=derivetable(data.properties)
local descriptions=derivetable(data.descriptions)
@@ -9037,22 +15846,25 @@ local function copytotfm(data,cache_id)
local characters={}
local parameters={}
local mathparameters={}
- local pfminfo=metadata.pfminfo or {}
local resources=data.resources
local unicodes=resources.unicodes
local spaceunits=500
local spacer="space"
- local designsize=metadata.designsize or metadata.design_size or 100
+ local designsize=metadata.designsize or 100
+ local minsize=metadata.minsize or designsize
+ local maxsize=metadata.maxsize or designsize
local mathspecs=metadata.math
if designsize==0 then
designsize=100
+ minsize=100
+ maxsize=100
end
if mathspecs then
for name,value in next,mathspecs do
mathparameters[name]=value
end
end
- for unicode,_ in next,data.descriptions do
+ for unicode in next,data.descriptions do
characters[unicode]={}
end
if mathspecs then
@@ -9060,39 +15872,44 @@ local function copytotfm(data,cache_id)
local d=descriptions[unicode]
local m=d.math
if m then
- local variants=m.horiz_variants
- local parts=m.horiz_parts
+ local italic=m.italic
+ local vitalic=m.vitalic
+ local variants=m.hvariants
+ local parts=m.hparts
if variants then
local c=character
for i=1,#variants do
local un=variants[i]
- c.next=un
- c=characters[un]
+ c.next=un
+ c=characters[un]
end
c.horiz_variants=parts
elseif parts then
character.horiz_variants=parts
+ italic=m.hitalic
end
- local variants=m.vert_variants
- local parts=m.vert_parts
+ local variants=m.vvariants
+ local parts=m.vparts
if variants then
local c=character
for i=1,#variants do
local un=variants[i]
- c.next=un
- c=characters[un]
+ c.next=un
+ c=characters[un]
end
c.vert_variants=parts
elseif parts then
character.vert_variants=parts
end
- local italic_correction=m.vert_italic_correction
- if italic_correction then
- character.vert_italic_correction=italic_correction
+ if italic and italic~=0 then
+ character.italic=italic
+ end
+ if vitalic and vitalic~=0 then
+ character.vert_italic=vitalic
end
- local top_accent=m.top_accent
- if top_accent then
- character.top_accent=top_accent
+ local accent=m.accent
+ if accent then
+ character.accent=accent
end
local kerns=m.kerns
if kerns then
@@ -9105,17 +15922,19 @@ local function copytotfm(data,cache_id)
local fontname=metadata.fontname
local fullname=metadata.fullname or fontname
local psname=fontname or fullname
- local units=metadata.units_per_em or 1000
+ local units=metadata.units or 1000
if units==0 then
units=1000
- metadata.units_per_em=1000
+ metadata.units=1000
report_otf("changing %a units to %a",0,units)
end
- local monospaced=metadata.isfixedpitch or (pfminfo.panose and pfminfo.panose.proportion=="Monospaced")
- local charwidth=pfminfo.avgwidth
- local charxheight=pfminfo.os2_xheight and pfminfo.os2_xheight>0 and pfminfo.os2_xheight
+ local monospaced=metadata.monospaced
+ local charwidth=metadata.averagewidth
+ local charxheight=metadata.xheight
local italicangle=metadata.italicangle
+ local hasitalics=metadata.hasitalics
properties.monospaced=monospaced
+ properties.hasitalics=hasitalics
parameters.italicangle=italicangle
parameters.charwidth=charwidth
parameters.charxheight=charxheight
@@ -9145,7 +15964,7 @@ local function copytotfm(data,cache_id)
spaceunits=tonumber(spaceunits) or 500
parameters.slant=0
parameters.space=spaceunits
- parameters.space_stretch=units/2
+ parameters.space_stretch=1*units/2
parameters.space_shrink=1*units/3
parameters.x_height=2*units/5
parameters.quad=units
@@ -9176,26 +15995,20 @@ local function copytotfm(data,cache_id)
end
end
parameters.designsize=(designsize/10)*65536
- parameters.ascender=abs(metadata.ascent or 0)
- parameters.descender=abs(metadata.descent or 0)
+ parameters.minsize=(minsize/10)*65536
+ parameters.maxsize=(maxsize/10)*65536
+ parameters.ascender=abs(metadata.ascender or 0)
+ parameters.descender=abs(metadata.descender or 0)
parameters.units=units
properties.space=spacer
properties.encodingbytes=2
- properties.format=data.format or otf_format(filename) or formats.otf
+ properties.format=data.format or formats.otf
properties.noglyphnames=true
properties.filename=filename
properties.fontname=fontname
properties.fullname=fullname
properties.psname=psname
properties.name=filename or fullname
- if warnings and #warnings>0 then
- report_otf("warnings for font: %s",filename)
- report_otf()
- for i=1,#warnings do
- report_otf(" %s",warnings[i])
- end
- report_otf()
- end
return {
characters=characters,
descriptions=descriptions,
@@ -9204,7 +16017,6 @@ local function copytotfm(data,cache_id)
resources=resources,
properties=properties,
goodies=goodies,
- warnings=warnings,
}
end
end
@@ -9214,38 +16026,13 @@ local function otftotfm(specification)
if not tfmdata then
local name=specification.name
local sub=specification.sub
+ local subindex=specification.subindex
local filename=specification.filename
local features=specification.features.normal
local rawdata=otf.load(filename,sub,features and features.featurefile)
if rawdata and next(rawdata) then
local descriptions=rawdata.descriptions
- local duplicates=rawdata.resources.duplicates
- if duplicates then
- local nofduplicates,nofduplicated=0,0
- for parent,list in next,duplicates do
- if type(list)=="table" then
- local n=#list
- for i=1,n do
- local unicode=list[i]
- if not descriptions[unicode] then
- descriptions[unicode]=descriptions[parent]
- nofduplicated=nofduplicated+1
- end
- end
- nofduplicates=nofduplicates+n
- else
- if not descriptions[list] then
- descriptions[list]=descriptions[parent]
- nofduplicated=nofduplicated+1
- end
- nofduplicates=nofduplicates+1
- end
- end
- if trace_otf and nofduplicated~=nofduplicates then
- report_otf("%i extra duplicates copied out of %i",nofduplicated,nofduplicates)
- end
- end
- rawdata.lookuphash={}
+ rawdata.lookuphash={}
tfmdata=copytotfm(rawdata,cache_id)
if tfmdata and next(tfmdata) then
local features=constructors.checkedfeatures("otf",features)
@@ -9297,33 +16084,129 @@ registerotffeature {
}
}
function otf.collectlookups(rawdata,kind,script,language)
- local sequences=rawdata.resources.sequences
- if sequences then
- local featuremap,featurelist={},{}
- for s=1,#sequences do
- local sequence=sequences[s]
- local features=sequence.features
- features=features and features[kind]
- features=features and (features[script] or features[default] or features[wildcard])
- features=features and (features[language] or features[default] or features[wildcard])
- if features then
- local subtables=sequence.subtables
- if subtables then
- for s=1,#subtables do
- local ss=subtables[s]
- if not featuremap[s] then
- featuremap[ss]=true
- featurelist[#featurelist+1]=ss
+ if not kind then
+ return
+ end
+ if not script then
+ script=default
+ end
+ if not language then
+ language=default
+ end
+ local lookupcache=rawdata.lookupcache
+ if not lookupcache then
+ lookupcache={}
+ rawdata.lookupcache=lookupcache
+ end
+ local kindlookup=lookupcache[kind]
+ if not kindlookup then
+ kindlookup={}
+ lookupcache[kind]=kindlookup
+ end
+ local scriptlookup=kindlookup[script]
+ if not scriptlookup then
+ scriptlookup={}
+ kindlookup[script]=scriptlookup
+ end
+ local languagelookup=scriptlookup[language]
+ if not languagelookup then
+ local sequences=rawdata.resources.sequences
+ local featuremap={}
+ local featurelist={}
+ if sequences then
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local features=sequence.features
+ if features then
+ features=features[kind]
+ if features then
+ features=features[script] or features[wildcard]
+ if features then
+ features=features[language] or features[wildcard]
+ if features then
+ if not featuremap[sequence] then
+ featuremap[sequence]=true
+ featurelist[#featurelist+1]=sequence
+ end
+ end
end
end
end
end
+ if #featurelist==0 then
+ featuremap,featurelist=false,false
+ end
+ else
+ featuremap,featurelist=false,false
+ end
+ languagelookup={ featuremap,featurelist }
+ scriptlookup[language]=languagelookup
+ end
+ return unpack(languagelookup)
+end
+local function getgsub(tfmdata,k,kind,value)
+ local shared=tfmdata.shared
+ local rawdata=shared and shared.rawdata
+ if rawdata then
+ local sequences=rawdata.resources.sequences
+ if sequences then
+ local properties=tfmdata.properties
+ local validlookups,lookuplist=otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ if validlookups then
+ local choice=tonumber(value) or 1
+ for i=1,#lookuplist do
+ local lookup=lookuplist[i]
+ local steps=lookup.steps
+ local nofsteps=lookup.nofsteps
+ for i=1,nofsteps do
+ local coverage=steps[i].coverage
+ if coverage then
+ local found=coverage[k]
+ if found then
+ return found,lookup.type
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+otf.getgsub=getgsub
+function otf.getsubstitution(tfmdata,k,kind,value)
+ local found,kind=getgsub(tfmdata,k,kind)
+ if not found then
+ elseif kind=="gsub_single" then
+ return found
+ elseif kind=="gsub_alternate" then
+ local choice=tonumber(value) or 1
+ return found[choice] or found[1] or k
+ end
+ return k
+end
+otf.getalternate=otf.getsubstitution
+function otf.getmultiple(tfmdata,k,kind)
+ local found,kind=getgsub(tfmdata,k,kind)
+ if found and kind=="gsub_multiple" then
+ return found
+ end
+ return { k }
+end
+function otf.getkern(tfmdata,left,right,kind)
+ local kerns=getgsub(tfmdata,left,kind or "kern",true)
+ if kerns then
+ local found=kerns[right]
+ local kind=type(found)
+ if kind=="table" then
+ found=found[1][3]
+ elseif kind~="number" then
+ found=false
end
- if #featurelist>0 then
- return featuremap,featurelist
+ if found then
+ return found*tfmdata.parameters.factor
end
end
- return nil,nil
+ return 0
end
local function check_otf(forced,specification,suffix)
local name=specification.name
@@ -9351,24 +16234,63 @@ readers.opentype=opentypereader
function readers.otf (specification) return opentypereader(specification,"otf") end
function readers.ttf (specification) return opentypereader(specification,"ttf") end
function readers.ttc (specification) return opentypereader(specification,"ttf") end
-function readers.dfont(specification) return opentypereader(specification,"ttf") end
function otf.scriptandlanguage(tfmdata,attr)
local properties=tfmdata.properties
return properties.script or "dflt",properties.language or "dflt"
end
+local function justset(coverage,unicode,replacement)
+ coverage[unicode]=replacement
+end
+otf.coverup={
+ stepkey="steps",
+ actions={
+ chainsubstitution=justset,
+ chainposition=justset,
+ substitution=justset,
+ alternate=justset,
+ multiple=justset,
+ kern=justset,
+ pair=justset,
+ ligature=function(coverage,unicode,ligature)
+ local first=ligature[1]
+ local tree=coverage[first]
+ if not tree then
+ tree={}
+ coverage[first]=tree
+ end
+ for i=2,#ligature do
+ local l=ligature[i]
+ local t=tree[l]
+ if not t then
+ t={}
+ tree[l]=t
+ end
+ tree=t
+ end
+ tree.ligature=unicode
+ end,
+ },
+ register=function(coverage,featuretype,format)
+ return {
+ format=format,
+ coverage=coverage,
+ }
+ end
+}
end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-otb']={
+if not modules then modules={} end modules ['font-oto']={
version=1.001,
comment="companion to font-ini.mkiv",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local concat=table.concat
+local concat,unpack=table.concat,table.unpack
+local insert,remove=table.insert,table.remove
local format,gmatch,gsub,find,match,lower,strip=string.format,string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
local type,next,tonumber,tostring,rawget=type,next,tonumber,tostring,rawget
local lpegmatch=lpeg.match
@@ -9378,7 +16300,6 @@ local trace_singles=false trackers.register("otf.singles",function(v) trace_sing
local trace_multiples=false trackers.register("otf.multiples",function(v) trace_multiples=v end)
local trace_alternatives=false trackers.register("otf.alternatives",function(v) trace_alternatives=v end)
local trace_ligatures=false trackers.register("otf.ligatures",function(v) trace_ligatures=v end)
-local trace_ligatures_detail=false trackers.register("otf.ligatures.detail",function(v) trace_ligatures_detail=v end)
local trace_kerns=false trackers.register("otf.kerns",function(v) trace_kerns=v end)
local trace_preparing=false trackers.register("otf.preparing",function(v) trace_preparing=v end)
local report_prepare=logs.reporter("fonts","otf prepare")
@@ -9417,48 +16338,36 @@ local function gref(descriptions,n)
return "<error in base mode tracing>"
end
end
-local function cref(feature,lookuptags,lookupname)
- if lookupname then
- return formatters["feature %a, lookup %a"](feature,lookuptags[lookupname])
- else
- return formatters["feature %a"](feature)
- end
+local function cref(feature,sequence)
+ return formatters["feature %a, type %a, chain lookup %a"](feature,sequence.type,sequence.name)
end
-local function report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,comment)
+local function report_alternate(feature,sequence,descriptions,unicode,replacement,value,comment)
report_prepare("%s: base alternate %s => %s (%S => %S)",
- cref(feature,lookuptags,lookupname),
+ cref(feature,sequence),
gref(descriptions,unicode),
replacement and gref(descriptions,replacement),
value,
comment)
end
-local function report_substitution(feature,lookuptags,lookupname,descriptions,unicode,substitution)
+local function report_substitution(feature,sequence,descriptions,unicode,substitution)
report_prepare("%s: base substitution %s => %S",
- cref(feature,lookuptags,lookupname),
+ cref(feature,sequence),
gref(descriptions,unicode),
gref(descriptions,substitution))
end
-local function report_ligature(feature,lookuptags,lookupname,descriptions,unicode,ligature)
+local function report_ligature(feature,sequence,descriptions,unicode,ligature)
report_prepare("%s: base ligature %s => %S",
- cref(feature,lookuptags,lookupname),
+ cref(feature,sequence),
gref(descriptions,ligature),
gref(descriptions,unicode))
end
-local function report_kern(feature,lookuptags,lookupname,descriptions,unicode,otherunicode,value)
+local function report_kern(feature,sequence,descriptions,unicode,otherunicode,value)
report_prepare("%s: base kern %s + %s => %S",
- cref(feature,lookuptags,lookupname),
+ cref(feature,sequence),
gref(descriptions,unicode),
gref(descriptions,otherunicode),
value)
end
-local basemethods={}
-local basemethod="<unset>"
-local function applybasemethod(what,...)
- local m=basemethods[basemethod][what]
- if m then
- return m(...)
- end
-end
local basehash,basehashes,applied={},1,{}
local function registerbasehash(tfmdata)
local properties=tfmdata.properties
@@ -9476,239 +16385,6 @@ end
local function registerbasefeature(feature,value)
applied[#applied+1]=feature.."="..tostring(value)
end
-local trace=false
-local function finalize_ligatures(tfmdata,ligatures)
- local nofligatures=#ligatures
- if nofligatures>0 then
- local characters=tfmdata.characters
- local descriptions=tfmdata.descriptions
- local resources=tfmdata.resources
- local unicodes=resources.unicodes
- local private=resources.private
- local alldone=false
- while not alldone do
- local done=0
- for i=1,nofligatures do
- local ligature=ligatures[i]
- if ligature then
- local unicode,lookupdata=ligature[1],ligature[2]
- if trace_ligatures_detail then
- report_prepare("building % a into %a",lookupdata,unicode)
- end
- local size=#lookupdata
- local firstcode=lookupdata[1]
- local firstdata=characters[firstcode]
- local okay=false
- if firstdata then
- local firstname="ctx_"..firstcode
- for i=1,size-1 do
- local firstdata=characters[firstcode]
- if not firstdata then
- firstcode=private
- if trace_ligatures_detail then
- report_prepare("defining %a as %a",firstname,firstcode)
- end
- unicodes[firstname]=firstcode
- firstdata={ intermediate=true,ligatures={} }
- characters[firstcode]=firstdata
- descriptions[firstcode]={ name=firstname }
- private=private+1
- end
- local target
- local secondcode=lookupdata[i+1]
- local secondname=firstname.."_"..secondcode
- if i==size-1 then
- target=unicode
- if not rawget(unicodes,secondname) then
- unicodes[secondname]=unicode
- end
- okay=true
- else
- target=rawget(unicodes,secondname)
- if not target then
- break
- end
- end
- if trace_ligatures_detail then
- report_prepare("codes (%a,%a) + (%a,%a) -> %a",firstname,firstcode,secondname,secondcode,target)
- end
- local firstligs=firstdata.ligatures
- if firstligs then
- firstligs[secondcode]={ char=target }
- else
- firstdata.ligatures={ [secondcode]={ char=target } }
- end
- firstcode=target
- firstname=secondname
- end
- elseif trace_ligatures_detail then
- report_prepare("no glyph (%a,%a) for building %a",firstname,firstcode,target)
- end
- if okay then
- ligatures[i]=false
- done=done+1
- end
- end
- end
- alldone=done==0
- end
- if trace_ligatures_detail then
- for k,v in table.sortedhash(characters) do
- if v.ligatures then
- table.print(v,k)
- end
- end
- end
- resources.private=private
- return true
- end
-end
-local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
- local characters=tfmdata.characters
- local descriptions=tfmdata.descriptions
- local resources=tfmdata.resources
- local properties=tfmdata.properties
- local changed=tfmdata.changed
- local lookuphash=resources.lookuphash
- local lookuptypes=resources.lookuptypes
- local lookuptags=resources.lookuptags
- local ligatures={}
- local alternate=tonumber(value) or true and 1
- local defaultalt=otf.defaultbasealternate
- local trace_singles=trace_baseinit and trace_singles
- local trace_alternatives=trace_baseinit and trace_alternatives
- local trace_ligatures=trace_baseinit and trace_ligatures
- local actions={
- substitution=function(lookupdata,lookuptags,lookupname,description,unicode)
- if trace_singles then
- report_substitution(feature,lookuptags,lookupname,descriptions,unicode,lookupdata)
- end
- changed[unicode]=lookupdata
- end,
- alternate=function(lookupdata,lookuptags,lookupname,description,unicode)
- local replacement=lookupdata[alternate]
- if replacement then
- changed[unicode]=replacement
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,"normal")
- end
- elseif defaultalt=="first" then
- replacement=lookupdata[1]
- changed[unicode]=replacement
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,defaultalt)
- end
- elseif defaultalt=="last" then
- replacement=lookupdata[#data]
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,defaultalt)
- end
- else
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,"unknown")
- end
- end
- end,
- ligature=function(lookupdata,lookuptags,lookupname,description,unicode)
- if trace_ligatures then
- report_ligature(feature,lookuptags,lookupname,descriptions,unicode,lookupdata)
- end
- ligatures[#ligatures+1]={ unicode,lookupdata }
- end,
- }
- for unicode,character in next,characters do
- local description=descriptions[unicode]
- local lookups=description.slookups
- if lookups then
- for l=1,#lookuplist do
- local lookupname=lookuplist[l]
- local lookupdata=lookups[lookupname]
- if lookupdata then
- local lookuptype=lookuptypes[lookupname]
- local action=actions[lookuptype]
- if action then
- action(lookupdata,lookuptags,lookupname,description,unicode)
- end
- end
- end
- end
- local lookups=description.mlookups
- if lookups then
- for l=1,#lookuplist do
- local lookupname=lookuplist[l]
- local lookuplist=lookups[lookupname]
- if lookuplist then
- local lookuptype=lookuptypes[lookupname]
- local action=actions[lookuptype]
- if action then
- for i=1,#lookuplist do
- action(lookuplist[i],lookuptags,lookupname,description,unicode)
- end
- end
- end
- end
- end
- end
- properties.hasligatures=finalize_ligatures(tfmdata,ligatures)
-end
-local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
- local characters=tfmdata.characters
- local descriptions=tfmdata.descriptions
- local resources=tfmdata.resources
- local properties=tfmdata.properties
- local lookuptags=resources.lookuptags
- local sharedkerns={}
- local traceindeed=trace_baseinit and trace_kerns
- local haskerns=false
- for unicode,character in next,characters do
- local description=descriptions[unicode]
- local rawkerns=description.kerns
- if rawkerns then
- local s=sharedkerns[rawkerns]
- if s==false then
- elseif s then
- character.kerns=s
- else
- local newkerns=character.kerns
- local done=false
- for l=1,#lookuplist do
- local lookup=lookuplist[l]
- local kerns=rawkerns[lookup]
- if kerns then
- for otherunicode,value in next,kerns do
- if value==0 then
- elseif not newkerns then
- newkerns={ [otherunicode]=value }
- done=true
- if traceindeed then
- report_kern(feature,lookuptags,lookup,descriptions,unicode,otherunicode,value)
- end
- elseif not newkerns[otherunicode] then
- newkerns[otherunicode]=value
- done=true
- if traceindeed then
- report_kern(feature,lookuptags,lookup,descriptions,unicode,otherunicode,value)
- end
- end
- end
- end
- end
- if done then
- sharedkerns[rawkerns]=newkerns
- character.kerns=newkerns
- haskerns=true
- else
- sharedkerns[rawkerns]=false
- end
- end
- end
- end
- properties.haskerns=haskerns
-end
-basemethods.independent={
- preparesubstitutions=preparesubstitutions,
- preparepositionings=preparepositionings,
-}
local function makefake(tfmdata,name,present)
local resources=tfmdata.resources
local private=resources.private
@@ -9729,13 +16405,13 @@ local function make_1(present,tree,name)
end
end
end
-local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done,lookuptags,lookupname)
+local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,done)
for k,v in next,tree do
if k=="ligature" then
local character=characters[preceding]
if not character then
if trace_baseinit then
- report_prepare("weird ligature in lookup %a, current %C, preceding %C",lookuptags[lookupname],v,preceding)
+ report_prepare("weird ligature in lookup %a, current %C, preceding %C",sequence.name,v,preceding)
end
character=makefake(tfmdata,name,present)
end
@@ -9746,9 +16422,9 @@ local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,don
character.ligatures={ [unicode]={ char=v } }
end
if done then
- local d=done[lookupname]
+ local d=done[name]
if not d then
- done[lookupname]={ "dummy",v }
+ done[name]={ "dummy",v }
else
d[#d+1]=v
end
@@ -9756,7 +16432,7 @@ local function make_2(present,tfmdata,characters,tree,name,preceding,unicode,don
else
local code=present[name] or unicode
local name=name.."_"..k
- make_2(present,tfmdata,characters,v,name,code,k,done,lookuptags,lookupname)
+ make_2(present,tfmdata,characters,v,name,code,k,done)
end
end
end
@@ -9765,52 +16441,63 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
local descriptions=tfmdata.descriptions
local resources=tfmdata.resources
local changed=tfmdata.changed
- local lookuphash=resources.lookuphash
- local lookuptypes=resources.lookuptypes
- local lookuptags=resources.lookuptags
local ligatures={}
local alternate=tonumber(value) or true and 1
local defaultalt=otf.defaultbasealternate
local trace_singles=trace_baseinit and trace_singles
local trace_alternatives=trace_baseinit and trace_alternatives
local trace_ligatures=trace_baseinit and trace_ligatures
- for l=1,#lookuplist do
- local lookupname=lookuplist[l]
- local lookupdata=lookuphash[lookupname]
- local lookuptype=lookuptypes[lookupname]
- for unicode,data in next,lookupdata do
- if lookuptype=="substitution" then
- if trace_singles then
- report_substitution(feature,lookuptags,lookupname,descriptions,unicode,data)
- end
- changed[unicode]=data
- elseif lookuptype=="alternate" then
- local replacement=data[alternate]
- if replacement then
- changed[unicode]=replacement
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,"normal")
- end
- elseif defaultalt=="first" then
- replacement=data[1]
- changed[unicode]=replacement
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,defaultalt)
- end
- elseif defaultalt=="last" then
- replacement=data[#data]
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,defaultalt)
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ if kind=="gsub_single" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ if not changed[unicode] then
+ if trace_singles then
+ report_substitution(feature,sequence,descriptions,unicode,data)
+ end
+ changed[unicode]=data
end
- else
- if trace_alternatives then
- report_alternate(feature,lookuptags,lookupname,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
+ elseif kind=="gsub_alternate" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ if not changed[unicode] then
+ local replacement=data[alternate]
+ if replacement then
+ changed[unicode]=replacement
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"normal")
+ end
+ elseif defaultalt=="first" then
+ replacement=data[1]
+ changed[unicode]=replacement
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ elseif defaultalt=="last" then
+ replacement=data[#data]
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,defaultalt)
+ end
+ else
+ if trace_alternatives then
+ report_alternate(feature,sequence,descriptions,unicode,replacement,value,"unknown")
+ end
+ end
end
end
- elseif lookuptype=="ligature" then
- ligatures[#ligatures+1]={ unicode,data,lookupname }
- if trace_ligatures then
- report_ligature(feature,lookuptags,lookupname,descriptions,unicode,data)
+ end
+ elseif kind=="gsub_ligature" then
+ for i=1,#steps do
+ for unicode,data in next,steps[i].coverage do
+ ligatures[#ligatures+1]={ unicode,data,"" }
+ if trace_ligatures then
+ report_ligature(feature,sequence,descriptions,unicode,data)
+ end
end
end
end
@@ -9828,7 +16515,7 @@ local function preparesubstitutions(tfmdata,feature,value,validlookups,lookuplis
for i=1,nofligatures do
local ligature=ligatures[i]
local unicode,tree,lookupname=ligature[1],ligature[2],ligature[3]
- make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,lookuptags,lookupname)
+ make_2(present,tfmdata,characters,tree,"ctx_"..unicode,unicode,unicode,done,sequence)
end
end
end
@@ -9837,30 +16524,62 @@ local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist
local descriptions=tfmdata.descriptions
local resources=tfmdata.resources
local properties=tfmdata.properties
- local lookuphash=resources.lookuphash
- local lookuptags=resources.lookuptags
local traceindeed=trace_baseinit and trace_kerns
- for l=1,#lookuplist do
- local lookupname=lookuplist[l]
- local lookupdata=lookuphash[lookupname]
- for unicode,data in next,lookupdata do
- local character=characters[unicode]
- local kerns=character.kerns
- if not kerns then
- kerns={}
- character.kerns=kerns
- end
- if traceindeed then
- for otherunicode,kern in next,data do
- if not kerns[otherunicode] and kern~=0 then
- kerns[otherunicode]=kern
- report_kern(feature,lookuptags,lookup,descriptions,unicode,otherunicode,kern)
+ for i=1,#lookuplist do
+ local sequence=lookuplist[i]
+ local steps=sequence.steps
+ local kind=sequence.type
+ local format=sequence.format
+ if kind=="gpos_pair" then
+ for i=1,#steps do
+ local step=steps[i]
+ if step.format=="kern" then
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ if not kerns then
+ kerns={}
+ character.kerns=kerns
+ end
+ if traceindeed then
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ else
+ for otherunicode,kern in next,data do
+ if not kerns[otherunicode] and kern~=0 then
+ kerns[otherunicode]=kern
+ end
+ end
+ end
end
- end
- else
- for otherunicode,kern in next,data do
- if not kerns[otherunicode] and kern~=0 then
- kerns[otherunicode]=kern
+ else
+ for unicode,data in next,steps[i].coverage do
+ local character=characters[unicode]
+ local kerns=character.kerns
+ for otherunicode,kern in next,data do
+ if not kern[2] and not (kerns and kerns[otherunicode]) then
+ local kern=kern[1]
+ if kern[1]~=0 or kern[2]~=0 or kern[4]~=0 then
+ else
+ kern=kern[3]
+ if kern~=0 then
+ if kerns then
+ kerns[otherunicode]=kern
+ else
+ kerns={ [otherunicode]=kern }
+ character.kerns=kerns
+ end
+ if traceindeed then
+ report_kern(feature,sequence,descriptions,unicode,otherunicode,kern)
+ end
+ end
+ end
+ end
+ end
end
end
end
@@ -9868,28 +16587,22 @@ local function preparepositionings(tfmdata,feature,value,validlookups,lookuplist
end
end
local function initializehashes(tfmdata)
- nodeinitializers.features(tfmdata)
end
-basemethods.shared={
- initializehashes=initializehashes,
- preparesubstitutions=preparesubstitutions,
- preparepositionings=preparepositionings,
-}
-basemethod="independent"
local function featuresinitializer(tfmdata,value)
if true then
local starttime=trace_preparing and os.clock()
local features=tfmdata.shared.features
local fullname=tfmdata.properties.fullname or "?"
if features then
- applybasemethod("initializehashes",tfmdata)
+ initializehashes(tfmdata)
local collectlookups=otf.collectlookups
local rawdata=tfmdata.shared.rawdata
local properties=tfmdata.properties
local script=properties.script
local language=properties.language
- local basesubstitutions=rawdata.resources.features.gsub
- local basepositionings=rawdata.resources.features.gpos
+ local rawfeatures=rawdata.resources.features
+ local basesubstitutions=rawfeatures and rawfeatures.gsub
+ local basepositionings=rawfeatures and rawfeatures.gpos
if basesubstitutions or basepositionings then
local sequences=tfmdata.resources.sequences
for s=1,#sequences do
@@ -9908,13 +16621,13 @@ local function featuresinitializer(tfmdata,value)
if trace_preparing then
report_prepare("filtering base %s feature %a for %a with value %a","sub",feature,fullname,value)
end
- applybasemethod("preparesubstitutions",tfmdata,feature,value,validlookups,lookuplist)
+ preparesubstitutions(tfmdata,feature,value,validlookups,lookuplist)
registerbasefeature(feature,value)
elseif basepositionings and basepositionings[feature] then
if trace_preparing then
report_prepare("filtering base %a feature %a for %a with value %a","pos",feature,fullname,value)
end
- applybasemethod("preparepositionings",tfmdata,feature,value,validlookups,lookuplist)
+ preparepositionings(tfmdata,feature,value,validlookups,lookuplist)
registerbasefeature(feature,value)
end
end
@@ -9938,17 +16651,12 @@ registerotffeature {
base=featuresinitializer,
}
}
-directives.register("fonts.otf.loader.basemethod",function(v)
- if basemethods[v] then
- basemethod=v
- end
-end)
end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-inj']={
+if not modules then modules={} end modules ['font-otj']={
version=1.001,
comment="companion to font-lib.mkiv",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -9959,17 +16667,30 @@ if not nodes.properties then return end
local next,rawget=next,rawget
local utfchar=utf.char
local fastcopy=table.fastcopy
-local trace_injections=false trackers.register("fonts.injections",function(v) trace_injections=v end)
+local registertracker=trackers.register
+local trace_injections=false registertracker("fonts.injections",function(v) trace_injections=v end)
+local trace_marks=false registertracker("fonts.injections.marks",function(v) trace_marks=v end)
+local trace_cursive=false registertracker("fonts.injections.cursive",function(v) trace_cursive=v end)
+local trace_spaces=false registertracker("otf.spaces",function(v) trace_spaces=v end)
+local use_advance=false directives.register("fonts.injections.advance",function(v) use_advance=v end)
local report_injections=logs.reporter("fonts","injections")
+local report_spaces=logs.reporter("fonts","spaces")
local attributes,nodes,node=attributes,nodes,node
fonts=fonts
-local fontdata=fonts.hashes.identifiers
+local hashes=fonts.hashes
+local fontdata=hashes.identifiers
+local parameters=fonts.hashes.parameters
+local resources=fonts.hashes.resources
nodes.injections=nodes.injections or {}
local injections=nodes.injections
+local tracers=nodes.tracers
+local setcolor=tracers and tracers.colors.set
+local resetcolor=tracers and tracers.colors.reset
local nodecodes=nodes.nodecodes
local glyph_code=nodecodes.glyph
local disc_code=nodecodes.disc
local kern_code=nodecodes.kern
+local glue_code=nodecodes.glue
local nuts=nodes.nuts
local nodepool=nuts.pool
local newkern=nodepool.kern
@@ -9983,7 +16704,12 @@ local getid=nuts.getid
local getfont=nuts.getfont
local getsubtype=nuts.getsubtype
local getchar=nuts.getchar
+local getboth=nuts.getboth
+local ischar=nuts.is_char
+local getdisc=nuts.getdisc
+local setdisc=nuts.setdisc
local traverse_id=nuts.traverse_id
+local traverse_char=nuts.traverse_char
local insert_node_before=nuts.insert_before
local insert_node_after=nuts.insert_after
local find_tail=nuts.tail
@@ -10008,15 +16734,17 @@ function injections.resetcounts()
end
function injections.reset(n)
local p=rawget(properties,n)
- if p and rawget(p,"injections") then
- p.injections=nil
+ if p then
+ p.injections=false
+ else
+ properties[n]=false
end
end
function injections.copy(target,source)
local sp=rawget(properties,source)
if sp then
local tp=rawget(properties,target)
- local si=rawget(sp,"injections")
+ local si=sp.injections
if si then
si=fastcopy(si)
if tp then
@@ -10026,17 +16754,24 @@ function injections.copy(target,source)
injections=si,
}
end
+ elseif tp then
+ tp.injections=false
else
- if tp then
- tp.injections=nil
- end
+ properties[target]={ injections={} }
+ end
+ else
+ local tp=rawget(properties,target)
+ if tp then
+ tp.injections=false
+ else
+ properties[target]=false
end
end
end
function injections.setligaindex(n,index)
local p=rawget(properties,n)
if p then
- local i=rawget(p,"injections")
+ local i=p.injections
if i then
i.ligaindex=index
else
@@ -10055,7 +16790,7 @@ end
function injections.getligaindex(n,default)
local p=rawget(properties,n)
if p then
- local i=rawget(p,"injections")
+ local i=p.injections
if i then
return i.ligaindex or default
end
@@ -10065,16 +16800,20 @@ end
function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
local dx=factor*(exit[1]-entry[1])
local dy=-factor*(exit[2]-entry[2])
- local ws,wn=tfmstart.width,tfmnext.width
+ local ws=tfmstart.width
+ local wn=tfmnext.width
nofregisteredcursives=nofregisteredcursives+1
if rlmode<0 then
dx=-(dx+wn)
else
dx=dx-ws
end
+ if dx==0 then
+ dx=0
+ end
local p=rawget(properties,start)
if p then
- local i=rawget(p,"injections")
+ local i=p.injections
if i then
i.cursiveanchor=true
else
@@ -10091,7 +16830,7 @@ function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmne
end
local p=rawget(properties,nxt)
if p then
- local i=rawget(p,"injections")
+ local i=p.injections
if i then
i.cursivex=dx
i.cursivey=dy
@@ -10112,7 +16851,10 @@ function injections.setcursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmne
return dx,dy,nofregisteredcursives
end
function injections.setpair(current,factor,rlmode,r2lflag,spec,injection)
- local x,y,w,h=factor*spec[1],factor*spec[2],factor*spec[3],factor*spec[4]
+ local x=factor*spec[1]
+ local y=factor*spec[2]
+ local w=factor*spec[3]
+ local h=factor*spec[4]
if x~=0 or w~=0 or y~=0 or h~=0 then
local yoffset=y-h
local leftkern=x
@@ -10122,9 +16864,12 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection)
if rlmode and rlmode<0 then
leftkern,rightkern=rightkern,leftkern
end
+ if not injection then
+ injection="injections"
+ end
local p=rawget(properties,current)
if p then
- local i=rawget(p,"injections")
+ local i=rawget(p,injection)
if i then
if leftkern~=0 then
i.leftkern=(i.leftkern or 0)+leftkern
@@ -10136,19 +16881,19 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection)
i.yoffset=(i.yoffset or 0)+yoffset
end
elseif leftkern~=0 or rightkern~=0 then
- p.injections={
+ p[injection]={
leftkern=leftkern,
rightkern=rightkern,
yoffset=yoffset,
}
else
- p.injections={
+ p[injection]={
yoffset=yoffset,
}
end
elseif leftkern~=0 or rightkern~=0 then
properties[current]={
- injections={
+ [injection]={
leftkern=leftkern,
rightkern=rightkern,
yoffset=yoffset,
@@ -10156,7 +16901,7 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection)
}
else
properties[current]={
- injections={
+ [injection]={
yoffset=yoffset,
},
}
@@ -10195,7 +16940,7 @@ function injections.setkern(current,factor,rlmode,x,injection)
return 0,0
end
end
-function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase)
+function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase,mkmk)
local dx,dy=factor*(ba[1]-ma[1]),factor*(ba[2]-ma[2])
nofregisteredmarks=nofregisteredmarks+1
if rlmode>=0 then
@@ -10203,13 +16948,17 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase)
end
local p=rawget(properties,start)
if p then
- local i=rawget(p,"injections")
+ local i=p.injections
if i then
- i.markx=dx
- i.marky=dy
- i.markdir=rlmode or 0
- i.markbase=nofregisteredmarks
- i.markbasenode=base
+ if i.markmark then
+ else
+ i.markx=dx
+ i.marky=dy
+ i.markdir=rlmode or 0
+ i.markbase=nofregisteredmarks
+ i.markbasenode=base
+ i.markmark=mkmk
+ end
else
p.injections={
markx=dx,
@@ -10217,6 +16966,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase)
markdir=rlmode or 0,
markbase=nofregisteredmarks,
markbasenode=base,
+ markmark=mkmk,
}
end
else
@@ -10227,6 +16977,7 @@ function injections.setmark(start,base,factor,rlmode,ba,ma,tfmbase)
markdir=rlmode or 0,
markbase=nofregisteredmarks,
markbasenode=base,
+ markmark=mkmk,
},
}
end
@@ -10251,10 +17002,11 @@ local function show(n,what,nested,symbol)
local markx=i.markx or 0
local marky=i.marky or 0
local markdir=i.markdir or 0
- local markbase=i.markbase or 0
+ local markbase=i.markbase or 0
local cursivex=i.cursivex or 0
local cursivey=i.cursivey or 0
local ligaindex=i.ligaindex or 0
+ local cursbase=i.cursiveanchor
local margin=nested and 4 or 2
if rightkern~=0 or yoffset~=0 then
report_injections("%w%s pair: lx %p, rx %p, dy %p",margin,symbol,leftkern,rightkern,yoffset)
@@ -10265,7 +17017,13 @@ local function show(n,what,nested,symbol)
report_injections("%w%s mark: dx %p, dy %p, dir %s, base %s",margin,symbol,markx,marky,markdir,markbase~=0 and "yes" or "no")
end
if cursivex~=0 or cursivey~=0 then
- report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ if cursbase then
+ report_injections("%w%s curs: base dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ else
+ report_injections("%w%s curs: dx %p, dy %p",margin,symbol,cursivex,cursivey)
+ end
+ elseif cursbase then
+ report_injections("%w%s curs: base",margin,symbol)
end
if ligaindex~=0 then
report_injections("%w%s liga: index %i",margin,symbol,ligaindex)
@@ -10294,10 +17052,9 @@ local function trace(head,where)
show(n,"preinjections",false,"<")
show(n,"postinjections",false,">")
show(n,"replaceinjections",false,"=")
+ show(n,"emptyinjections",false,"*")
elseif id==disc_code then
- local pre=getfield(n,"pre")
- local post=getfield(n,"post")
- local replace=getfield(n,"replace")
+ local pre,post,replace=getdisc(n)
if pre then
showsub(pre,"preinjections","pre")
end
@@ -10307,6 +17064,7 @@ local function trace(head,where)
if replace then
showsub(replace,"replaceinjections","replace")
end
+ show(n,"emptyinjections",false,"*")
end
n=getnext(n)
end
@@ -10331,371 +17089,372 @@ local function show_result(head)
current=getnext(current)
end
end
-local function collect_glyphs_1(head)
- local glyphs,nofglyphs={},0
- local marks,nofmarks={},0
- local nf,tm=nil,nil
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n)<256 then
- local f=getfont(n)
- if f~=nf then
- nf=f
- tm=fontdata[nf].resources.marks
- end
- if tm and tm[getchar(n)] then
- nofmarks=nofmarks+1
- marks[nofmarks]=n
- else
- nofglyphs=nofglyphs+1
- glyphs[nofglyphs]=n
- end
- local p=rawget(properties,n)
- if p then
- local i=rawget(p,"injections")
- if i then
- local yoffset=i.yoffset
- if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
- end
- end
- end
- end
- end
- return glyphs,nofglyphs,marks,nofmarks
-end
-local function collect_glyphs_2(head)
- local glyphs,nofglyphs={},0
- local marks,nofmarks={},0
- local nf,tm=nil,nil
- for n in traverse_id(glyph_code,head) do
- if getsubtype(n)<256 then
- local f=getfont(n)
- if f~=nf then
- nf=f
- tm=fontdata[nf].resources.marks
- end
- if tm and tm[getchar(n)] then
- nofmarks=nofmarks+1
- marks[nofmarks]=n
- else
- nofglyphs=nofglyphs+1
- glyphs[nofglyphs]=n
- end
- end
+local function inject_kerns_only(head,where)
+ head=tonut(head)
+ if trace_injections then
+ trace(head,"kerns")
end
- return glyphs,nofglyphs,marks,nofmarks
-end
-local function inject_marks(marks,nofmarks)
- for i=1,nofmarks do
- local n=marks[i]
- local pn=rawget(properties,n)
- if pn then
- pn=rawget(pn,"injections")
- if pn then
- local p=pn.markbasenode
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
+ if id==glyph_code then
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
if p then
- local px=getfield(p,"xoffset")
- local ox=0
- local rightkern=nil
- local pp=rawget(properties,p)
- if pp then
- pp=rawget(pp,"injections")
- if pp then
- rightkern=pp.rightkern
- end
- end
- if rightkern then
- if pn.markdir<0 then
- ox=px-pn.markx-rightkern
- else
- local leftkern=pp.leftkern
- if leftkern then
- ox=px-pn.markx
+ local i=p.injections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(current,"xoffset",leftkern)
+ setfield(current,"xadvance",leftkern)
else
- ox=px-pn.markx-leftkern
+ insert_node_before(head,current,newkern(leftkern))
end
end
- else
- ox=px-pn.markx
- local wn=getfield(n,"width")
- if wn~=0 then
- pn.leftkern=-wn/2
- pn.rightkern=-wn/2
- end
- end
- setfield(n,"xoffset",ox)
- local py=getfield(p,"yoffset")
- local oy=0
- if marks[p] then
- oy=py+pn.marky
- else
- oy=getfield(n,"yoffset")+py+pn.marky
end
- setfield(n,"yoffset",oy)
- else
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(post,"xadvance",leftkern)
+ else
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(replace,"xadvance",leftkern)
+ else
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ setfield(prev,"replace",newkern(leftkern))
+ end
+ end
+ end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
end
end
- end
- end
-end
-local function inject_cursives(glyphs,nofglyphs)
- local cursiveanchor,lastanchor=nil,nil
- local minc,maxc,last=0,0,nil
- for i=1,nofglyphs do
- local n=glyphs[i]
- local pn=rawget(properties,n)
- if pn then
- pn=rawget(pn,"injections")
- end
- if pn then
- local cursivex=pn.cursivex
- if cursivex then
- if cursiveanchor then
- if cursivex~=0 then
- pn.leftkern=(pn.leftkern or 0)+cursivex
- end
- if lastanchor then
- if maxc==0 then
- minc=lastanchor
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(pre,"xoffset",leftkern)
+ setfield(pre,"xadvance",leftkern)
+ else
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
+ end
+ end
end
- maxc=lastanchor
- properties[cursiveanchor].cursivedy=pn.cursivey
end
- last=n
- else
- maxc=0
end
- elseif maxc>0 then
- local ny=getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti=glyphs[i]
- ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",ny)
- end
- maxc=0
end
- if pn.cursiveanchor then
- cursiveanchor=n
- lastanchor=i
- else
- cursiveanchor=nil
- lastanchor=nil
- if maxc>0 then
- local ny=getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti=glyphs[i]
- ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",ny)
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(post,"xoffset",leftkern)
+ setfield(post,"xadvance",leftkern)
+ else
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ end
+ end
end
- maxc=0
end
end
- elseif maxc>0 then
- local ny=getfield(n,"yoffset")
- for i=maxc,minc,-1 do
- local ti=glyphs[i]
- ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",getfield(ti,"yoffset")+ny)
- end
- maxc=0
- cursiveanchor=nil
- lastanchor=nil
- end
- end
- if last and maxc>0 then
- local ny=getfield(last,"yoffset")
- for i=maxc,minc,-1 do
- local ti=glyphs[i]
- ny=ny+properties[ti].cursivedy
- setfield(ti,"yoffset",ny)
- end
- end
-end
-local function inject_kerns(head,list,length)
- for i=1,length do
- local n=list[i]
- local pn=rawget(properties,n)
- if pn then
- local i=rawget(pn,"injections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- insert_node_before(head,n,newkern(leftkern))
- end
- local rightkern=i.rightkern
- if rightkern and rightkern~=0 then
- insert_node_after(head,n,newkern(rightkern))
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ if use_advance then
+ setfield(replace,"xoffset",leftkern)
+ setfield(replace,"xadvance",leftkern)
+ else
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ end
end
end
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
+ else
+ prevglyph=nil
+ prevdisc=nil
end
+ prev=current
+ current=next
end
-end
-local function inject_everything(head,where)
- head=tonut(head)
- if trace_injections then
- trace(head,"everything")
- end
- local glyphs,nofglyphs,marks,nofmarks
- if nofregisteredpairs>0 then
- glyphs,nofglyphs,marks,nofmarks=collect_glyphs_1(head)
- else
- glyphs,nofglyphs,marks,nofmarks=collect_glyphs_2(head)
- end
- if nofglyphs>0 then
- if nofregisteredcursives>0 then
- inject_cursives(glyphs,nofglyphs)
- end
- if nofregisteredmarks>0 then
- inject_marks(marks,nofmarks)
- end
- inject_kerns(head,glyphs,nofglyphs)
- end
- if nofmarks>0 then
- inject_kerns(head,marks,nofmarks)
- end
if keepregisteredcounts then
keepregisteredcounts=false
else
nofregisteredkerns=0
- nofregisteredpairs=0
- nofregisteredmarks=0
- nofregisteredcursives=0
end
return tonode(head),true
end
-local function inject_kerns_only(head,where)
+local function inject_pairs_only(head,where)
head=tonut(head)
if trace_injections then
- trace(head,"kerns")
+ trace(head,"pairs")
end
- local n=head
- local p=nil
- while n do
- local id=getid(n)
+ local current=head
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
if id==glyph_code then
- if getsubtype(n)<256 then
- local pn=rawget(properties,n)
- if pn then
- if p then
- local d=getfield(p,"post")
- if d then
- local i=rawget(pn,"postinjections")
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",newkern(rightkern))
+ end
+ end
+ end
+ end
+ end
+ if prevdisc then
+ local done=false
+ if post then
+ local i=p.postinjections
if i then
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- local t=find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
end
end
end
- local d=getfield(p,"replace")
- if d then
- local i=rawget(pn,"replaceinjections")
+ if replace then
+ local i=p.replaceinjections
if i then
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- local t=find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
end
end
else
- local i=rawget(pn,"injections")
+ local i=p.emptyinjections
if i then
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- setfield(p,"replace",newkern(leftkern))
+ setfield(prev,"replace",newkern(leftkern))
end
end
end
- else
- local i=rawget(pn,"injections")
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- head=insert_node_before(head,n,newkern(leftkern))
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(pre,n,newkern(rightkern))
+ done=true
end
end
end
end
- else
- break
end
- p=nil
- elseif id==disc_code then
- local d=getfield(n,"pre")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local pn=rawget(properties,n)
- if pn then
- local i=rawget(pn,"preinjections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done=true
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"pre",h)
- end
end
- local d=getfield(n,"post")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local pn=rawget(properties,n)
- if pn then
- local i=rawget(pn,"postinjections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done=true
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"post",h)
- end
end
- local d=getfield(n,"replace")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local pn=rawget(properties,n)
- if pn then
- local i=rawget(pn,"replaceinjections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,newkern(rightkern))
+ done=true
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"replace",h)
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,newkern(rightkern))
+ done=true
+ end
+ end
+ end
end
end
- p=n
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
else
- p=nil
+ prevglyph=nil
+ prevdisc=nil
end
- n=getnext(n)
+ prev=current
+ current=next
end
if keepregisteredcounts then
keepregisteredcounts=false
@@ -10704,52 +17463,234 @@ local function inject_kerns_only(head,where)
end
return tonode(head),true
end
-local function inject_pairs_only(head,where)
+local function showoffset(n,flag)
+ local o=getfield(n,"xoffset")
+ if o==0 then
+ o=getfield(n,"yoffset")
+ end
+ if o~=0 then
+ setcolor(n,flag and "darkred" or "darkgreen")
+ else
+ resetcolor(n)
+ end
+end
+local function inject_everything(head,where)
head=tonut(head)
if trace_injections then
- trace(head,"pairs")
+ trace(head,"everything")
end
- local n=head
- local p=nil
- while n do
- local id=getid(n)
+ local hascursives=nofregisteredcursives>0
+ local hasmarks=nofregisteredmarks>0
+ local current=head
+ local last=nil
+ local font=font
+ local markdata=nil
+ local prev=nil
+ local next=nil
+ local prevdisc=nil
+ local prevglyph=nil
+ local pre=nil
+ local post=nil
+ local replace=nil
+ local pretail=nil
+ local posttail=nil
+ local replacetail=nil
+ local cursiveanchor=nil
+ local minc=0
+ local maxc=0
+ local glyphs={}
+ local marks={}
+ local nofmarks=0
+ local function processmark(p,n,pn)
+ local px=getfield(p,"xoffset")
+ local ox=0
+ local rightkern=nil
+ local pp=rawget(properties,p)
+ if pp then
+ pp=pp.injections
+ if pp then
+ rightkern=pp.rightkern
+ end
+ end
+ if rightkern then
+ if pn.markdir<0 then
+ ox=px-pn.markx-rightkern
+ else
+ if false then
+ local leftkern=pp.leftkern
+ if leftkern then
+ ox=px-pn.markx-leftkern
+ else
+ ox=px-pn.markx
+ end
+ else
+ ox=px-pn.markx
+ end
+ end
+ else
+ ox=px-pn.markx
+ local wn=getfield(n,"width")
+ if wn~=0 then
+ pn.leftkern=-wn/2
+ pn.rightkern=-wn/2
+ end
+ end
+ local oy=getfield(n,"yoffset")+getfield(p,"yoffset")+pn.marky
+ setfield(n,"xoffset",ox)
+ setfield(n,"yoffset",oy)
+ if trace_marks then
+ showoffset(n,true)
+ end
+ end
+ while current do
+ local id=getid(current)
+ local next=getnext(current)
if id==glyph_code then
- if getsubtype(n)<256 then
- local pn=rawget(properties,n)
- if pn then
- if p then
- local d=getfield(p,"post")
- if d then
- local i=rawget(pn,"postinjections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- local t=find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
+ if getsubtype(current)<256 then
+ local p=rawget(properties,current)
+ if p then
+ local i=p.injections
+ if i then
+ local pm=i.markbasenode
+ if pm then
+ nofmarks=nofmarks+1
+ marks[nofmarks]=current
+ else
+ if hascursives then
+ local cursivex=i.cursivex
+ if cursivex then
+ if cursiveanchor then
+ if cursivex~=0 then
+ i.leftkern=(i.leftkern or 0)+cursivex
+ end
+ if maxc==0 then
+ minc=1
+ maxc=1
+ glyphs[1]=cursiveanchor
+ else
+ maxc=maxc+1
+ glyphs[maxc]=cursiveanchor
+ end
+ properties[cursiveanchor].cursivedy=i.cursivey
+ last=current
+ else
+ maxc=0
+ end
+ elseif maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ if i.cursiveanchor then
+ cursiveanchor=current
+ else
+ if maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ maxc=0
+ end
+ cursiveanchor=nil
end
end
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(current,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_before(head,current,newkern(leftkern))
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(head,current,newkern(rightkern))
+ end
end
- local d=getfield(p,"replace")
- if d then
- local i=rawget(pn,"replaceinjections")
- if i then
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- local t=find_tail(d)
- insert_node_after(d,t,newkern(leftkern))
+ else
+ local i=p.emptyinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ if next and getid(next)==disc_code then
+ if replace then
+ else
+ setfield(next,"replace",newkern(rightkern))
+ end
end
end
- else
- local i=rawget(pn,"injections")
- if i then
+ end
+ end
+ if prevdisc then
+ if p then
+ local done=false
+ if post then
+ local i=p.postinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(post,posttail,newkern(leftkern))
+ done=true
+ end
+ end
+ end
+ if replace then
+ local i=p.replaceinjections
+ if i then
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ insert_node_after(replace,replacetail,newkern(leftkern))
+ done=true
+ end
+ end
+ else
+ local i=p.emptyinjections
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- setfield(p,"replace",newkern(leftkern))
+ setfield(prev,"replace",newkern(leftkern))
end
end
+ if done then
+ setdisc(prevdisc,pre,post,replace)
+ end
end
- else
- local i=rawget(pn,"injections")
+ end
+ else
+ if hascursives and maxc>0 then
+ local ny=getfield(current,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",getfield(ti,"yoffset")+ny)
+ end
+ maxc=0
+ cursiveanchor=nil
+ end
+ end
+ end
+ prevdisc=nil
+ prevglyph=current
+ elseif id==disc_code then
+ pre,post,replace,pretail,posttail,replacetail=getdisc(current,true)
+ local done=false
+ if pre then
+ for n in traverse_char(pre) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.preinjections
if i then
local yoffset=i.yoffset
if yoffset and yoffset~=0 then
@@ -10757,132 +17698,249 @@ local function inject_pairs_only(head,where)
end
local leftkern=i.leftkern
if leftkern and leftkern~=0 then
- insert_node_before(head,n,newkern(leftkern))
+ pre=insert_node_before(pre,n,newkern(leftkern))
+ done=true
end
local rightkern=i.rightkern
if rightkern and rightkern~=0 then
- insert_node_after(head,n,newkern(rightkern))
- n=getnext(n)
+ insert_node_after(pre,n,newkern(rightkern))
+ done=true
+ end
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
end
end
end
end
- else
- break
end
- p=nil
- elseif id==disc_code then
- local d=getfield(n,"pre")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local p=rawget(properties,n)
- if p then
- local i=rawget(p,"preinjections")
- if i then
- local yoffset=i.yoffset
- if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern=i.leftkern
- if leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern=i.rightkern
- if rightkern and rightkern~=0 then
- insert_node_after(head,n,newkern(rightkern))
- n=getnext(n)
- end
+ if post then
+ for n in traverse_char(post) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.postinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ post=insert_node_before(post,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(post,n,newkern(rightkern))
+ done=true
+ end
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"pre",h)
- end
end
- local d=getfield(n,"post")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local p=rawget(properties,n)
- if p then
- local i=rawget(p,"postinjections")
- if i then
- local yoffset=i.yoffset
- if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern=i.rightkern
- if rightkern and rightkern~=0 then
- insert_node_after(head,n,newkern(rightkern))
- n=getnext(n)
- end
+ if replace then
+ for n in traverse_char(replace) do
+ local p=rawget(properties,n)
+ if p then
+ local i=p.injections or p.replaceinjections
+ if i then
+ local yoffset=i.yoffset
+ if yoffset and yoffset~=0 then
+ setfield(n,"yoffset",yoffset)
+ end
+ local leftkern=i.leftkern
+ if leftkern and leftkern~=0 then
+ replace=insert_node_before(replace,n,newkern(leftkern))
+ done=true
+ end
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ insert_node_after(replace,n,newkern(rightkern))
+ done=true
+ end
+ end
+ if hasmarks then
+ local pm=i.markbasenode
+ if pm then
+ processmark(pm,current,i)
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"post",h)
- end
end
- local d=getfield(n,"replace")
- if d then
- local h=d
- for n in traverse_id(glyph_code,d) do
- if getsubtype(n)<256 then
- local p=rawget(properties,n)
- if p then
- local i=rawget(p,"replaceinjections")
- if i then
- local yoffset=i.yoffset
- if yoffset and yoffset~=0 then
- setfield(n,"yoffset",yoffset)
- end
- local leftkern=i.leftkern
- if leftkern and leftkern~=0 then
- h=insert_node_before(h,n,newkern(leftkern))
- end
- local rightkern=i.rightkern
- if rightkern and rightkern~=0 then
- insert_node_after(head,n,newkern(rightkern))
- n=getnext(n)
- end
+ if prevglyph then
+ if pre then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.preinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ pre=insert_node_before(pre,pre,newkern(rightkern))
+ done=true
end
end
- else
- break
end
end
- if h~=d then
- setfield(n,"replace",h)
+ if replace then
+ local p=rawget(properties,prevglyph)
+ if p then
+ local i=p.replaceinjections
+ if i then
+ local rightkern=i.rightkern
+ if rightkern and rightkern~=0 then
+ replace=insert_node_before(replace,replace,newkern(rightkern))
+ done=true
+ end
+ end
+ end
end
end
- p=n
+ if done then
+ setdisc(current,pre,post,replace)
+ end
+ prevglyph=nil
+ prevdisc=current
else
- p=nil
+ prevglyph=nil
+ prevdisc=nil
end
- n=getnext(n)
+ prev=current
+ current=next
+ end
+ if hascursives and maxc>0 then
+ local ny=getfield(last,"yoffset")
+ for i=maxc,minc,-1 do
+ local ti=glyphs[i]
+ ny=ny+properties[ti].cursivedy
+ setfield(ti,"yoffset",ny)
+ if trace_cursive then
+ showoffset(ti)
+ end
+ end
+ end
+ if nofmarks>0 then
+ for i=1,nofmarks do
+ local m=marks[i]
+ local p=rawget(properties,m)
+ local i=p.injections
+ local b=i.markbasenode
+ processmark(b,m,i)
+ end
+ elseif hasmarks then
end
if keepregisteredcounts then
keepregisteredcounts=false
else
- nofregisteredpairs=0
nofregisteredkerns=0
+ nofregisteredpairs=0
+ nofregisteredmarks=0
+ nofregisteredcursives=0
end
return tonode(head),true
end
-function injections.handler(head,where)
+local triggers=false
+function nodes.injections.setspacekerns(font,sequence)
+ if triggers then
+ triggers[font]=sequence
+ else
+ triggers={ [font]=sequence }
+ end
+end
+local function injectspaces(head)
+ if not triggers then
+ return head,false
+ end
+ local lastfont=nil
+ local spacekerns=nil
+ local leftkerns=nil
+ local rightkerns=nil
+ local factor=0
+ local threshold=0
+ local leftkern=false
+ local rightkern=false
+ local function updatefont(font,trig)
+ leftkerns=trig.left
+ rightkerns=trig.right
+ local par=parameters[font]
+ factor=par.factor
+ threshold=par.spacing.width-1
+ lastfont=font
+ end
+ for n in traverse_id(glue_code,tonut(head)) do
+ local prev,next=getboth(n)
+ local prevchar=ischar(prev)
+ local nextchar=ischar(next)
+ if nextchar then
+ local font=getfont(next)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if rightkerns then
+ rightkern=rightkerns[nextchar]
+ end
+ end
+ end
+ if prevchar then
+ local font=getfont(next)
+ local trig=triggers[font]
+ if trig then
+ if lastfont~=font then
+ updatefont(font,trig)
+ end
+ if leftkerns then
+ leftkern=leftkerns[prevchar]
+ end
+ end
+ end
+ if leftkern then
+ local old=getfield(n,"width")
+ if old>=threshold then
+ if rightkern then
+ local new=old+(leftkern+rightkern)*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p] %C",prevchar,old,new,nextchar)
+ end
+ setfield(n,"width",new)
+ leftkern=false
+ else
+ local new=old+leftkern*factor
+ if trace_spaces then
+ report_spaces("%C [%p -> %p]",prevchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ end
+ leftkern=false
+ elseif rightkern then
+ local old=getfield(n,"width")
+ if old>=threshold then
+ local new=old+rightkern*factor
+ if trace_spaces then
+ report_spaces("[%p -> %p] %C",nextchar,old,new)
+ end
+ setfield(n,"width",new)
+ end
+ rightkern=false
+ end
+ end
+ triggers=false
+ return head,true
+end
+function injections.handler(head,where)
+ if triggers then
+ head=injectspaces(head)
+ end
if nofregisteredmarks>0 or nofregisteredcursives>0 then
return inject_everything(head,where)
elseif nofregisteredpairs>0 then
@@ -10898,7 +17956,7 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-otx']={
+if not modules then modules={} end modules ['font-ota']={
version=1.001,
comment="companion to font-otf.lua (analysing)",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -10915,28 +17973,28 @@ local initializers=allocate()
local methods=allocate()
analyzers.initializers=initializers
analyzers.methods=methods
-analyzers.useunicodemarks=false
local a_state=attributes.private('state')
local nuts=nodes.nuts
local tonut=nuts.tonut
local getfield=nuts.getfield
local getnext=nuts.getnext
local getprev=nuts.getprev
-local getid=nuts.getid
+local getprev=nuts.getprev
local getprop=nuts.getprop
local setprop=nuts.setprop
local getfont=nuts.getfont
local getsubtype=nuts.getsubtype
local getchar=nuts.getchar
+local ischar=nuts.is_char
local traverse_id=nuts.traverse_id
local traverse_node_list=nuts.traverse
local end_of_math=nuts.end_of_math
local nodecodes=nodes.nodecodes
-local glyph_code=nodecodes.glyph
local disc_code=nodecodes.disc
local math_code=nodecodes.math
local fontdata=fonts.hashes.identifiers
local categories=characters and characters.categories or {}
+local chardata=characters and characters.data
local otffeatures=fonts.constructors.newfeatures("otf")
local registerotffeature=otffeatures.register
local s_init=1 local s_rphf=7
@@ -10948,7 +18006,10 @@ local s_rest=6
local states={
init=s_init,
medi=s_medi,
+ med2=s_medi,
fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
isol=s_isol,
mark=s_mark,
rest=s_rest,
@@ -10961,7 +18022,10 @@ local states={
local features={
init=s_init,
medi=s_medi,
+ med2=s_medi,
fina=s_fina,
+ fin2=s_fina,
+ fin3=s_fina,
isol=s_isol,
rphf=s_rphf,
half=s_half,
@@ -10971,6 +18035,7 @@ local features={
}
analyzers.states=states
analyzers.features=features
+analyzers.useunicodemarks=false
function analyzers.setstate(head,font)
local useunicodemarks=analyzers.useunicodemarks
local tfmdata=fontdata[font]
@@ -10978,13 +18043,15 @@ function analyzers.setstate(head,font)
local first,last,current,n,done=nil,nil,head,0,false
current=tonut(current)
while current do
- local id=getid(current)
- if id==glyph_code and getfont(current)==font then
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
done=true
- local char=getchar(current)
local d=descriptions[char]
if d then
- if d.class=="mark" or (useunicodemarks and categories[char]=="mn") then
+ if d.class=="mark" then
+ done=true
+ setprop(current,a_state,s_mark)
+ elseif useunicodemarks and categories[char]=="mn" then
done=true
setprop(current,a_state,s_mark)
elseif n==0 then
@@ -11002,6 +18069,16 @@ function analyzers.setstate(head,font)
end
first,last,n=nil,nil,0
end
+ elseif char==false then
+ if first and first==last then
+ setprop(last,a_state,s_isol)
+ elseif last then
+ setprop(last,a_state,s_fina)
+ end
+ first,last,n=nil,nil,0
+ if id==math_code then
+ current=end_of_math(current)
+ end
elseif id==disc_code then
setprop(current,a_state,s_medi)
last=current
@@ -11066,107 +18143,6 @@ registerotffeature {
}
}
methods.latn=analyzers.setstate
-local tatweel=0x0640
-local zwnj=0x200C
-local zwj=0x200D
-local isolated={
- [0x0600]=true,[0x0601]=true,[0x0602]=true,[0x0603]=true,
- [0x0604]=true,
- [0x0608]=true,[0x060B]=true,[0x0621]=true,[0x0674]=true,
- [0x06DD]=true,
- [0x0856]=true,[0x0858]=true,[0x0857]=true,
- [0x07FA]=true,
- [zwnj]=true,
- [0x08AD]=true,
-}
-local final={
- [0x0622]=true,[0x0623]=true,[0x0624]=true,[0x0625]=true,
- [0x0627]=true,[0x0629]=true,[0x062F]=true,[0x0630]=true,
- [0x0631]=true,[0x0632]=true,[0x0648]=true,[0x0671]=true,
- [0x0672]=true,[0x0673]=true,[0x0675]=true,[0x0676]=true,
- [0x0677]=true,[0x0688]=true,[0x0689]=true,[0x068A]=true,
- [0x068B]=true,[0x068C]=true,[0x068D]=true,[0x068E]=true,
- [0x068F]=true,[0x0690]=true,[0x0691]=true,[0x0692]=true,
- [0x0693]=true,[0x0694]=true,[0x0695]=true,[0x0696]=true,
- [0x0697]=true,[0x0698]=true,[0x0699]=true,[0x06C0]=true,
- [0x06C3]=true,[0x06C4]=true,[0x06C5]=true,[0x06C6]=true,
- [0x06C7]=true,[0x06C8]=true,[0x06C9]=true,[0x06CA]=true,
- [0x06CB]=true,[0x06CD]=true,[0x06CF]=true,[0x06D2]=true,
- [0x06D3]=true,[0x06D5]=true,[0x06EE]=true,[0x06EF]=true,
- [0x0759]=true,[0x075A]=true,[0x075B]=true,[0x076B]=true,
- [0x076C]=true,[0x0771]=true,[0x0773]=true,[0x0774]=true,
- [0x0778]=true,[0x0779]=true,
- [0x08AA]=true,[0x08AB]=true,[0x08AC]=true,
- [0xFEF5]=true,[0xFEF7]=true,[0xFEF9]=true,[0xFEFB]=true,
- [0x0710]=true,[0x0715]=true,[0x0716]=true,[0x0717]=true,
- [0x0718]=true,[0x0719]=true,[0x0728]=true,[0x072A]=true,
- [0x072C]=true,[0x071E]=true,
- [0x072F]=true,[0x074D]=true,
- [0x0840]=true,[0x0849]=true,[0x0854]=true,[0x0846]=true,
- [0x084F]=true,
- [0x08AE]=true,[0x08B1]=true,[0x08B2]=true,
-}
-local medial={
- [0x0626]=true,[0x0628]=true,[0x062A]=true,[0x062B]=true,
- [0x062C]=true,[0x062D]=true,[0x062E]=true,[0x0633]=true,
- [0x0634]=true,[0x0635]=true,[0x0636]=true,[0x0637]=true,
- [0x0638]=true,[0x0639]=true,[0x063A]=true,[0x063B]=true,
- [0x063C]=true,[0x063D]=true,[0x063E]=true,[0x063F]=true,
- [0x0641]=true,[0x0642]=true,[0x0643]=true,
- [0x0644]=true,[0x0645]=true,[0x0646]=true,[0x0647]=true,
- [0x0649]=true,[0x064A]=true,[0x066E]=true,[0x066F]=true,
- [0x0678]=true,[0x0679]=true,[0x067A]=true,[0x067B]=true,
- [0x067C]=true,[0x067D]=true,[0x067E]=true,[0x067F]=true,
- [0x0680]=true,[0x0681]=true,[0x0682]=true,[0x0683]=true,
- [0x0684]=true,[0x0685]=true,[0x0686]=true,[0x0687]=true,
- [0x069A]=true,[0x069B]=true,[0x069C]=true,[0x069D]=true,
- [0x069E]=true,[0x069F]=true,[0x06A0]=true,[0x06A1]=true,
- [0x06A2]=true,[0x06A3]=true,[0x06A4]=true,[0x06A5]=true,
- [0x06A6]=true,[0x06A7]=true,[0x06A8]=true,[0x06A9]=true,
- [0x06AA]=true,[0x06AB]=true,[0x06AC]=true,[0x06AD]=true,
- [0x06AE]=true,[0x06AF]=true,[0x06B0]=true,[0x06B1]=true,
- [0x06B2]=true,[0x06B3]=true,[0x06B4]=true,[0x06B5]=true,
- [0x06B6]=true,[0x06B7]=true,[0x06B8]=true,[0x06B9]=true,
- [0x06BA]=true,[0x06BB]=true,[0x06BC]=true,[0x06BD]=true,
- [0x06BE]=true,[0x06BF]=true,[0x06C1]=true,[0x06C2]=true,
- [0x06CC]=true,[0x06CE]=true,[0x06D0]=true,[0x06D1]=true,
- [0x06FA]=true,[0x06FB]=true,[0x06FC]=true,[0x06FF]=true,
- [0x0750]=true,[0x0751]=true,[0x0752]=true,[0x0753]=true,
- [0x0754]=true,[0x0755]=true,[0x0756]=true,[0x0757]=true,
- [0x0758]=true,[0x075C]=true,[0x075D]=true,[0x075E]=true,
- [0x075F]=true,[0x0760]=true,[0x0761]=true,[0x0762]=true,
- [0x0763]=true,[0x0764]=true,[0x0765]=true,[0x0766]=true,
- [0x0767]=true,[0x0768]=true,[0x0769]=true,[0x076A]=true,
- [0x076D]=true,[0x076E]=true,[0x076F]=true,[0x0770]=true,
- [0x0772]=true,[0x0775]=true,[0x0776]=true,[0x0777]=true,
- [0x077A]=true,[0x077B]=true,[0x077C]=true,[0x077D]=true,
- [0x077E]=true,[0x077F]=true,
- [0x08A0]=true,[0x08A2]=true,[0x08A4]=true,[0x08A5]=true,
- [0x08A6]=true,[0x0620]=true,[0x08A8]=true,[0x08A9]=true,
- [0x08A7]=true,[0x08A3]=true,
- [0x0712]=true,[0x0713]=true,[0x0714]=true,[0x071A]=true,
- [0x071B]=true,[0x071C]=true,[0x071D]=true,[0x071F]=true,
- [0x0720]=true,[0x0721]=true,[0x0722]=true,[0x0723]=true,
- [0x0724]=true,[0x0725]=true,[0x0726]=true,[0x0727]=true,
- [0x0729]=true,[0x072B]=true,[0x072D]=true,[0x072E]=true,
- [0x074E]=true,[0x074F]=true,
- [0x0841]=true,[0x0842]=true,[0x0843]=true,[0x0844]=true,
- [0x0845]=true,[0x0847]=true,[0x0848]=true,[0x0855]=true,
- [0x0851]=true,[0x084E]=true,[0x084D]=true,[0x084A]=true,
- [0x084B]=true,[0x084C]=true,[0x0850]=true,[0x0852]=true,
- [0x0853]=true,
- [0x07D7]=true,[0x07E8]=true,[0x07D9]=true,[0x07EA]=true,
- [0x07CA]=true,[0x07DB]=true,[0x07CC]=true,[0x07DD]=true,
- [0x07CE]=true,[0x07DF]=true,[0x07D4]=true,[0x07E5]=true,
- [0x07E9]=true,[0x07E7]=true,[0x07E3]=true,[0x07E2]=true,
- [0x07E0]=true,[0x07E1]=true,[0x07DE]=true,[0x07DC]=true,
- [0x07D1]=true,[0x07DA]=true,[0x07D8]=true,[0x07D6]=true,
- [0x07D2]=true,[0x07D0]=true,[0x07CF]=true,[0x07CD]=true,
- [0x07CB]=true,[0x07D3]=true,[0x07E4]=true,[0x07D5]=true,
- [0x07E6]=true,
- [tatweel]=true,[zwj]=true,
- [0x08A1]=true,[0x08AF]=true,[0x08B0]=true,
-}
local arab_warned={}
local function warning(current,what)
local char=getchar(current)
@@ -11175,92 +18151,173 @@ local function warning(current,what)
arab_warned[char]=true
end
end
-local function finish(first,last)
- if last then
- if first==last then
- local fc=getchar(first)
- if medial[fc] or final[fc] then
- setprop(first,a_state,s_isol)
- else
- warning(first,"isol")
- setprop(first,a_state,s_error)
- end
- else
- local lc=getchar(last)
- if medial[lc] or final[lc] then
- setprop(last,a_state,s_fina)
- else
- warning(last,"fina")
- setprop(last,a_state,s_error)
+local mappers={
+ l=s_init,
+ d=s_medi,
+ c=s_medi,
+ r=s_fina,
+ u=s_isol,
+}
+local classifiers=characters.classifiers
+if not classifiers then
+ local first_arabic,last_arabic=characters.blockrange("arabic")
+ local first_syriac,last_syriac=characters.blockrange("syriac")
+ local first_mandiac,last_mandiac=characters.blockrange("mandiac")
+ local first_nko,last_nko=characters.blockrange("nko")
+ classifiers=table.setmetatableindex(function(t,k)
+ local c=chardata[k]
+ local v=false
+ if c then
+ local arabic=c.arabic
+ if arabic then
+ v=mappers[arabic]
+ if not v then
+ log.report("analyze","error in mapping arabic %C",k)
+ v=false
+ end
+ elseif k>=first_arabic and k<=last_arabic or k>=first_syriac and k<=last_syriac or
+ k>=first_mandiac and k<=last_mandiac or k>=first_nko and k<=last_nko then
+ if categories[k]=="mn" then
+ v=s_mark
+ else
+ v=s_rest
+ end
end
end
- first,last=nil,nil
- elseif first then
- local fc=getchar(first)
- if medial[fc] or final[fc] then
- setprop(first,a_state,s_isol)
- else
- warning(first,"isol")
- setprop(first,a_state,s_error)
- end
- first=nil
- end
- return first,last
+ t[k]=v
+ return v
+ end)
end
function methods.arab(head,font,attr)
- local useunicodemarks=analyzers.useunicodemarks
- local tfmdata=fontdata[font]
- local marks=tfmdata.resources.marks
- local first,last,current,done=nil,nil,head,false
+ local first,last=nil,nil
+ local c_first,c_last=nil,nil
+ local current,done=head,false
current=tonut(current)
while current do
- local id=getid(current)
- if id==glyph_code and getfont(current)==font and getsubtype(current)<256 and not getprop(current,a_state) then
+ local char,id=ischar(current,font)
+ if char and not getprop(current,a_state) then
done=true
- local char=getchar(current)
- if marks[char] or (useunicodemarks and categories[char]=="mn") then
+ local classifier=classifiers[char]
+ if not classifier then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
+ elseif classifier==s_mark then
setprop(current,a_state,s_mark)
- elseif isolated[char] then
- first,last=finish(first,last)
+ elseif classifier==s_isol then
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
setprop(current,a_state,s_isol)
- first,last=nil,nil
- elseif not first then
- if medial[char] then
+ elseif classifier==s_medi then
+ if first then
+ last=current
+ c_last=classifier
+ setprop(current,a_state,s_medi)
+ else
setprop(current,a_state,s_init)
- first,last=first or current,current
- elseif final[char] then
- setprop(current,a_state,s_isol)
- first,last=nil,nil
- else
- first,last=finish(first,last)
+ first=current
+ c_first=classifier
end
- elseif medial[char] then
- first,last=first or current,current
- setprop(current,a_state,s_medi)
- elseif final[char] then
- if getprop(last,a_state)~=s_init then
- setprop(last,a_state,s_medi)
+ elseif classifier==s_fina then
+ if last then
+ if getprop(last,a_state)~=s_init then
+ setprop(last,a_state,s_medi)
+ end
+ setprop(current,a_state,s_fina)
+ first,last=nil,nil
+ elseif first then
+ setprop(current,a_state,s_fina)
+ first=nil
+ else
+ setprop(current,a_state,s_isol)
end
- setprop(current,a_state,s_fina)
- first,last=nil,nil
- elseif char>=0x0600 and char<=0x06FF then
- setprop(current,a_state,s_rest)
- first,last=finish(first,last)
else
- first,last=finish(first,last)
+ setprop(current,a_state,s_rest)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
+ end
end
else
- if first or last then
- first,last=finish(first,last)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ first,last=nil,nil
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
+ first=nil
end
- if id==math_code then
+ if id==math_code then
current=end_of_math(current)
end
end
current=getnext(current)
end
- if first or last then
- finish(first,last)
+ if last then
+ if c_last==s_medi or c_last==s_fina then
+ setprop(last,a_state,s_fina)
+ else
+ warning(last,"fina")
+ setprop(last,a_state,s_error)
+ end
+ elseif first then
+ if c_first==s_medi or c_first==s_fina then
+ setprop(first,a_state,s_isol)
+ else
+ warning(first,"isol")
+ setprop(first,a_state,s_error)
+ end
end
return head,done
end
@@ -11275,21 +18332,20 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-otn']={
+if not modules then modules={} end modules ['font-ots']={
version=1.001,
comment="companion to font-ini.mkiv",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files",
}
-local concat,insert,remove=table.concat,table.insert,table.remove
-local gmatch,gsub,find,match,lower,strip=string.gmatch,string.gsub,string.find,string.match,string.lower,string.strip
-local type,next,tonumber,tostring=type,next,tonumber,tostring
-local lpegmatch=lpeg.match
+local type,next,tonumber=type,next,tonumber
local random=math.random
local formatters=string.formatters
+local insert=table.insert
local logs,trackers,nodes,attributes=logs,trackers,nodes,attributes
local registertracker=trackers.register
+local registerdirective=directives.register
local fonts=fonts
local otf=fonts.handlers.otf
local trace_lookups=false registertracker("otf.lookups",function(v) trace_lookups=v end)
@@ -11308,15 +18364,22 @@ local trace_applied=false registertracker("otf.applied",function(v) trace_applie
local trace_steps=false registertracker("otf.steps",function(v) trace_steps=v end)
local trace_skips=false registertracker("otf.skips",function(v) trace_skips=v end)
local trace_directions=false registertracker("otf.directions",function(v) trace_directions=v end)
+local trace_kernruns=false registertracker("otf.kernruns",function(v) trace_kernruns=v end)
+local trace_discruns=false registertracker("otf.discruns",function(v) trace_discruns=v end)
+local trace_compruns=false registertracker("otf.compruns",function(v) trace_compruns=v end)
+local trace_testruns=false registertracker("otf.testruns",function(v) trace_testruns=v end)
+local quit_on_no_replacement=true
+local zwnjruns=true
+local optimizekerns=true
+registerdirective("otf.zwnjruns",function(v) zwnjruns=v end)
+registerdirective("otf.chain.quitonnoreplacement",function(value) quit_on_no_replacement=value end)
local report_direct=logs.reporter("fonts","otf direct")
local report_subchain=logs.reporter("fonts","otf subchain")
local report_chain=logs.reporter("fonts","otf chain")
local report_process=logs.reporter("fonts","otf process")
-local report_prepare=logs.reporter("fonts","otf prepare")
local report_warning=logs.reporter("fonts","otf warning")
local report_run=logs.reporter("fonts","otf run")
-registertracker("otf.verbose_chain",function(v) otf.setcontextchain(v and "verbose") end)
-registertracker("otf.normal_chain",function(v) otf.setcontextchain(v and "normal") end)
+local report_check=logs.reporter("fonts","otf check")
registertracker("otf.replacements","otf.singles,otf.multiples,otf.alternatives,otf.ligatures")
registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive")
registertracker("otf.actions","otf.replacements,otf.positions")
@@ -11328,7 +18391,11 @@ local tonut=nuts.tonut
local getfield=nuts.getfield
local setfield=nuts.setfield
local getnext=nuts.getnext
+local setnext=nuts.setnext
local getprev=nuts.getprev
+local setprev=nuts.setprev
+local getboth=nuts.getboth
+local setboth=nuts.setboth
local getid=nuts.getid
local getattr=nuts.getattr
local setattr=nuts.setattr
@@ -11336,7 +18403,13 @@ local getprop=nuts.getprop
local setprop=nuts.setprop
local getfont=nuts.getfont
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 setlink=nuts.setlink
+local ischar=nuts.is_char
local insert_node_before=nuts.insert_before
local insert_node_after=nuts.insert_after
local delete_node=nuts.delete
@@ -11355,23 +18428,18 @@ local zwj=0x200D
local wildcard="*"
local default="dflt"
local nodecodes=nodes.nodecodes
-local whatcodes=nodes.whatcodes
local glyphcodes=nodes.glyphcodes
local disccodes=nodes.disccodes
local glyph_code=nodecodes.glyph
local glue_code=nodecodes.glue
local disc_code=nodecodes.disc
-local whatsit_code=nodecodes.whatsit
local math_code=nodecodes.math
-local dir_code=whatcodes.dir
-local localpar_code=whatcodes.localpar
+local dir_code=nodecodes.dir
+local localpar_code=nodecodes.localpar
local discretionary_code=disccodes.discretionary
-local regular_code=disccodes.regular
-local automatic_code=disccodes.automatic
local ligature_code=glyphcodes.ligature
local privateattribute=attributes.private
local a_state=privateattribute('state')
-local a_cursbase=privateattribute('cursbase')
local injections=nodes.injections
local setmark=injections.setmark
local setcursive=injections.setcursive
@@ -11391,16 +18459,26 @@ otf.defaultnodealternate="none"
local tfmdata=false
local characters=false
local descriptions=false
-local resources=false
local marks=false
local currentfont=false
-local lookuptable=false
-local anchorlookups=false
-local lookuptypes=false
-local lookuptags=false
+local factor=0
+local threshold=0
+local sweepnode=nil
+local sweepprev=nil
+local sweepnext=nil
+local sweephead={}
+local notmatchpre={}
+local notmatchpost={}
+local notmatchreplace={}
local handlers={}
-local rlmode=0
-local featurevalue=false
+local function isspace(n)
+ if getid(n)==glue_code then
+ local w=getfield(n,"width")
+ if w>=threshold then
+ return 32
+ end
+ end
+end
local checkstep=(nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end
local registerstep=(nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end
local registermessage=(nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end
@@ -11440,21 +18518,26 @@ local function gref(n)
return "<error in node mode tracing>"
end
end
-local function cref(kind,chainname,chainlookupname,lookupname,index)
- if index then
- return formatters["feature %a, chain %a, sub %a, lookup %a, index %a"](kind,chainname,chainlookupname,lookuptags[lookupname],index)
- elseif lookupname then
- return formatters["feature %a, chain %a, sub %a, lookup %a"](kind,chainname,chainlookupname,lookuptags[lookupname])
- elseif chainlookupname then
- return formatters["feature %a, chain %a, sub %a"](kind,lookuptags[chainname],lookuptags[chainlookupname])
- elseif chainname then
- return formatters["feature %a, chain %a"](kind,lookuptags[chainname])
+local function cref(dataset,sequence,index)
+ if not dataset then
+ return "no valid dataset"
+ elseif index then
+ return formatters["feature %a, type %a, chain lookup %a, index %a"](dataset[4],sequence.type,sequence.name,index)
else
- return formatters["feature %a"](kind)
+ return formatters["feature %a, type %a, chain lookup %a"](dataset[4],sequence.type,sequence.name)
end
end
-local function pref(kind,lookupname)
- return formatters["feature %a, lookup %a"](kind,lookuptags[lookupname])
+local function pref(dataset,sequence)
+ return formatters["feature %a, type %a, lookup %a"](dataset[4],sequence.type,sequence.name)
+end
+local function mref(rlmode)
+ if not rlmode or rlmode==0 then
+ return "---"
+ elseif rlmode==-1 or rlmode=="+TRT" then
+ return "r2l"
+ else
+ return "l2r"
+ end
end
local function copy_glyph(g)
local components=getfield(g,"components")
@@ -11470,35 +18553,75 @@ local function copy_glyph(g)
return n
end
end
-local function markstoligature(kind,lookupname,head,start,stop,char)
+local function flattendisk(head,disc)
+ local _,_,replace,_,_,replacetail=getdisc(disc,true)
+ setfield(disc,"replace",nil)
+ free_node(disc)
+ if head==disc then
+ local next=getnext(disc)
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ return replace,replace
+ elseif next then
+ return next,next
+ else
+ return
+ end
+ else
+ local prev,next=getboth(disc)
+ if replace then
+ if next then
+ setlink(replacetail,next)
+ end
+ setlink(prev,replace)
+ return head,replace
+ else
+ setlink(prev,next)
+ return head,next
+ end
+ end
+end
+local function appenddisc(disc,list)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local posthead=list
+ local replacehead=copy_node_list(list)
+ if post then
+ setlink(posttail,posthead)
+ else
+ post=phead
+ end
+ if replace then
+ setlink(replacetail,replacehead)
+ else
+ replace=rhead
+ end
+ setdisc(disc,pre,post,replace)
+end
+local function markstoligature(head,start,stop,char)
if start==stop and getchar(start)==char then
return head,start
else
local prev=getprev(start)
local next=getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
+ setprev(start,nil)
+ setnext(stop,nil)
local base=copy_glyph(start)
if head==start then
head=base
end
resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
setfield(base,"components",start)
- if prev then
- setfield(prev,"next",base)
- end
- if next then
- setfield(next,"prev",base)
- end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
+ setlink(prev,base)
+ setlink(base,next)
return head,base
end
end
-local function getcomponentindex(start)
- if getid(start)~=glyph_code then
+local function getcomponentindex(start)
+ if getid(start)~=glyph_code then
return 0
elseif getsubtype(start)==ligature_code then
local i=0
@@ -11514,32 +18637,39 @@ local function getcomponentindex(start)
return 0
end
end
-local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound)
+local a_noligature=attributes.private("noligature")
+local function toligature(head,start,stop,char,dataset,sequence,markflag,discfound)
+ if getattr(start,a_noligature)==1 then
+ return head,start
+ end
if start==stop and getchar(start)==char then
resetinjection(start)
- setfield(start,"char",char)
+ setchar(start,char)
return head,start
end
+ local components=getfield(start,"components")
+ if components then
+ end
local prev=getprev(start)
local next=getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
+ local comp=start
+ setprev(start,nil)
+ setnext(stop,nil)
local base=copy_glyph(start)
if start==head then
head=base
end
resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
- setfield(base,"components",start)
+ setchar(base,char)
+ setsubtype(base,ligature_code)
+ setfield(base,"components",comp)
if prev then
- setfield(prev,"next",base)
+ setnext(prev,base)
end
if next then
- setfield(next,"prev",base)
+ setprev(next,base)
end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
+ setboth(base,prev,next)
if not discfound then
local deletemarks=markflag~="mark"
local components=start
@@ -11555,86 +18685,75 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun
elseif not deletemarks then
setligaindex(start,baseindex+getligaindex(start,componentindex))
if trace_marks then
- logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),getligaindex(start))
+ logwarning("%s: keep mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
end
- head,current=insert_node_after(head,current,copy_node(start))
+ local n=copy_node(start)
+ copyinjection(n,start)
+ head,current=insert_node_after(head,current,n)
elseif trace_marks then
- logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char))
+ logwarning("%s: delete mark %s",pref(dataset,sequence),gref(char))
end
start=getnext(start)
end
local start=getnext(current)
- while start and getid(start)==glyph_code do
- local char=getchar(start)
- if marks[char] then
- setligaindex(start,baseindex+getligaindex(start,componentindex))
- if trace_marks then
- logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),getligaindex(start))
+ while start do
+ local char=ischar(start)
+ if char then
+ if marks[char] then
+ setligaindex(start,baseindex+getligaindex(start,componentindex))
+ if trace_marks then
+ logwarning("%s: set mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
+ end
+ start=getnext(start)
+ else
+ break
end
else
break
end
- start=getnext(start)
end
- end
- return head,base
-end
-function handlers.gsub_single(head,start,kind,lookupname,replacement)
- if trace_singles then
- logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(getchar(start)),gref(replacement))
- end
- resetinjection(start)
- setfield(start,"char",replacement)
- return head,start,true
-end
-local function get_alternative_glyph(start,alternatives,value,trace_alternatives)
- local n=#alternatives
- if value=="random" then
- local r=random(1,n)
- return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r)
- elseif value=="first" then
- return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1)
- elseif value=="last" then
- return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n)
else
- value=tonumber(value)
- if type(value)~="number" then
- return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
- elseif value>n then
- local defaultalt=otf.defaultnodealternate
- if defaultalt=="first" then
- return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
- elseif defaultalt=="last" then
- return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
- else
- return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ local discprev,discnext=getboth(discfound)
+ if discprev and discnext then
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(discfound,true)
+ if not replace then
+ local prev=getprev(base)
+ local copied=copy_node_list(comp)
+ setprev(discnext,nil)
+ setnext(discprev,nil)
+ if pre then
+ setlink(discprev,pre)
+ end
+ pre=comp
+ if post then
+ setlink(posttail,discnext)
+ setprev(post,nil)
+ else
+ post=discnext
+ end
+ setlink(prev,discfound)
+ setlink(discfound,next)
+ setboth(base,nil,nil)
+ setfield(base,"components",copied)
+ setdisc(discfound,pre,post,base,discretionary_code)
+ base=prev
end
- elseif value==0 then
- return getchar(start),trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
- elseif value<1 then
- return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
- else
- return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value)
end
end
+ return head,base
end
local function multiple_glyphs(head,start,multiple,ignoremarks)
local nofmultiples=#multiple
if nofmultiples>0 then
resetinjection(start)
- setfield(start,"char",multiple[1])
+ setchar(start,multiple[1])
if nofmultiples>1 then
local sn=getnext(start)
for k=2,nofmultiples do
local n=copy_node(start)
resetinjection(n)
- setfield(n,"char",multiple[k])
- setfield(n,"next",sn)
- setfield(n,"prev",start)
- if sn then
- setfield(sn,"prev",n)
- end
- setfield(start,"next",n)
+ setchar(n,multiple[k])
+ insert_node_after(head,start,n)
start=n
end
end
@@ -11646,40 +18765,85 @@ local function multiple_glyphs(head,start,multiple,ignoremarks)
return head,start,false
end
end
-function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence)
- local value=featurevalue==true and tfmdata.shared.features[kind] or featurevalue
- local choice,comment=get_alternative_glyph(start,alternative,value,trace_alternatives)
+local function get_alternative_glyph(start,alternatives,value)
+ local n=#alternatives
+ if value=="random" then
+ local r=random(1,n)
+ return alternatives[r],trace_alternatives and formatters["value %a, taking %a"](value,r)
+ elseif value=="first" then
+ return alternatives[1],trace_alternatives and formatters["value %a, taking %a"](value,1)
+ elseif value=="last" then
+ return alternatives[n],trace_alternatives and formatters["value %a, taking %a"](value,n)
+ end
+ value=value==true and 1 or tonumber(value)
+ if type(value)~="number" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ end
+ if value>n then
+ local defaultalt=otf.defaultnodealternate
+ if defaultalt=="first" then
+ return alternatives[n],trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
+ elseif defaultalt=="last" then
+ return alternatives[1],trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
+ else
+ return false,trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
+ end
+ elseif value==0 then
+ return getchar(start),trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
+ elseif value<1 then
+ return alternatives[1],trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
+ else
+ return alternatives[value],trace_alternatives and formatters["value %a, taking %a"](value,value)
+ end
+end
+function handlers.gsub_single(head,start,dataset,sequence,replacement)
+ if trace_singles then
+ logprocess("%s: replacing %s by single %s",pref(dataset,sequence),gref(getchar(start)),gref(replacement))
+ end
+ resetinjection(start)
+ setchar(start,replacement)
+ return head,start,true
+end
+function handlers.gsub_alternate(head,start,dataset,sequence,alternative)
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
+ local choice,comment=get_alternative_glyph(start,alternative,value)
if choice then
if trace_alternatives then
- logprocess("%s: replacing %s by alternative %a to %s, %s",pref(kind,lookupname),gref(getchar(start)),choice,gref(choice),comment)
+ logprocess("%s: replacing %s by alternative %a to %s, %s",pref(dataset,sequence),gref(getchar(start)),gref(choice),comment)
end
resetinjection(start)
- setfield(start,"char",choice)
+ setchar(start,choice)
else
if trace_alternatives then
- logwarning("%s: no variant %a for %s, %s",pref(kind,lookupname),value,gref(getchar(start)),comment)
+ logwarning("%s: no variant %a for %s, %s",pref(dataset,sequence),value,gref(getchar(start)),comment)
end
end
return head,start,true
end
-function handlers.gsub_multiple(head,start,kind,lookupname,multiple,sequence)
+function handlers.gsub_multiple(head,start,dataset,sequence,multiple)
if trace_multiples then
- logprocess("%s: replacing %s by multiple %s",pref(kind,lookupname),gref(getchar(start)),gref(multiple))
+ logprocess("%s: replacing %s by multiple %s",pref(dataset,sequence),gref(getchar(start)),gref(multiple))
end
return multiple_glyphs(head,start,multiple,sequence.flags[1])
end
-function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
- local s,stop,discfound=getnext(start),nil,false
+function handlers.gsub_ligature(head,start,dataset,sequence,ligature)
+ local current=getnext(start)
+ if not current then
+ return head,start,false,nil
+ end
+ local stop=nil
local startchar=getchar(start)
if marks[startchar] then
- while s do
- local id=getid(s)
- if id==glyph_code and getfont(s)==currentfont and getsubtype(s)<256 then
- local lg=ligature[getchar(s)]
+ while current do
+ local char=ischar(current,currentfont)
+ if char then
+ local lg=ligature[char]
if lg then
- stop=s
+ stop=current
ligature=lg
- s=getnext(s)
+ current=getnext(current)
else
break
end
@@ -11692,40 +18856,61 @@ function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
if lig then
if trace_ligatures then
local stopchar=getchar(stop)
- head,start=markstoligature(kind,lookupname,head,start,stop,lig)
- logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(getchar(start)))
+ head,start=markstoligature(head,start,stop,lig)
+ logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(getchar(start)))
else
- head,start=markstoligature(kind,lookupname,head,start,stop,lig)
+ head,start=markstoligature(head,start,stop,lig)
end
- return head,start,true
+ return head,start,true,false
else
end
end
else
local skipmark=sequence.flags[1]
- while s do
- local id=getid(s)
- if id==glyph_code and getsubtype(s)<256 then
- if getfont(s)==currentfont then
- local char=getchar(s)
- if skipmark and marks[char] then
- s=getnext(s)
+ local discfound=false
+ local lastdisc=nil
+ while current do
+ local char,id=ischar(current,currentfont)
+ if char then
+ if skipmark and marks[char] then
+ current=getnext(current)
+ else
+ local lg=ligature[char]
+ if lg then
+ if not discfound and lastdisc then
+ discfound=lastdisc
+ lastdisc=nil
+ end
+ stop=current
+ ligature=lg
+ current=getnext(current)
else
- local lg=ligature[char]
- if lg then
- stop=s
- ligature=lg
- s=getnext(s)
+ break
+ end
+ end
+ elseif char==false then
+ break
+ elseif id==disc_code then
+ local replace=getfield(current,"replace")
+ if replace then
+ while replace do
+ local char,id=ischar(replace,currentfont)
+ if char then
+ local lg=ligature[char]
+ if lg then
+ ligature=lg
+ replace=getnext(replace)
+ else
+ return head,start,false,false
+ end
else
- break
+ return head,start,false,false
end
end
- else
- break
+ stop=current
end
- elseif id==disc_code then
- discfound=true
- s=getnext(s)
+ lastdisc=current
+ current=getnext(current)
else
break
end
@@ -11735,149 +18920,215 @@ function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
if stop then
if trace_ligatures then
local stopchar=getchar(stop)
- head,start=toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
- logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(getchar(start)))
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
+ logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(dataset,sequence),gref(startchar),gref(stopchar),gref(lig))
else
- head,start=toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
+ head,start=toligature(head,start,stop,lig,dataset,sequence,skipmark,discfound)
end
else
resetinjection(start)
- setfield(start,"char",lig)
+ setchar(start,lig)
if trace_ligatures then
- logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(kind,lookupname),gref(startchar),gref(lig))
+ logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(dataset,sequence),gref(startchar),gref(lig))
end
end
- return head,start,true
+ return head,start,true,discfound
else
end
end
+ return head,start,false,discfound
+end
+function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local startchar=getchar(start)
+ if step.format=="pair" then
+ local dx,dy,w,h=setpair(start,factor,rlmode,sequence.flags[4],kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(dataset,sequence),gref(startchar),dx,dy,w,h)
+ end
+ else
+ local k=setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(startchar),k)
+ end
+ end
return head,start,false
end
-function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence)
- local markchar=getchar(start)
- if marks[markchar] then
- local base=getprev(start)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- if marks[basechar] then
- while true do
- base=getprev(base)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- basechar=getchar(base)
- if not marks[basechar] then
+function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,injection)
+ local snext=getnext(start)
+ if not snext then
+ return head,start,false
+ else
+ local prev=start
+ local done=false
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if nextchar then
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format=="pair" then
+ local a,b=krn[1],krn[2]
+ if optimizekerns then
+ if not b and a[1]==0 and a[2]==0 and a[4]==0 then
+ local k=setkern(snext,factor,rlmode,a[3],injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",pref(dataset,sequence),gref(nextchar),k)
+ end
+ done=true
break
end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
+ end
+ if a and #a>0 then
+ local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,injection)
+ if trace_kerns then
+ local startchar=getchar(start)
+ logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
end
- return head,start,false
end
+ if b and #b>0 then
+ local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,injection)
+ if trace_kerns then
+ local startchar=getchar(snext)
+ logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections")
+ end
+ end
+ done=true
+ break
+ elseif krn~=0 then
+ local k=setkern(snext,factor,rlmode,krn,injection)
+ if trace_kerns then
+ logprocess("%s: inserting kern %p between %s and %s as %s",pref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar),injection or "injections")
+ end
+ done=true
+ break
+ else
+ break
end
+ else
+ break
end
- local baseanchors=descriptions[basechar]
- if baseanchors then
- baseanchors=baseanchors.anchors
- end
- if baseanchors then
- local baseanchors=baseanchors['basechar']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
- pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,done
+ end
+end
+function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode)
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
end
- return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
end
end
- if trace_bugs then
- logwarning("%s, no matching anchors for mark %s and base %s",pref(kind,lookupname),gref(markchar),gref(basechar))
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
end
+ return head,start,true
end
elseif trace_bugs then
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),1)
end
elseif trace_bugs then
- logwarning("%s: prev node is no char",pref(kind,lookupname))
+ logwarning("%s: nothing preceding, case %i",pref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequence)
+function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlmode)
local markchar=getchar(start)
if marks[markchar] then
local base=getprev(start)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- if marks[basechar] then
- while true do
- base=getprev(base)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- basechar=getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
- end
- return head,start,false
- end
- end
- end
- local index=getligaindex(start)
- local baseanchors=descriptions[basechar]
- if baseanchors then
- baseanchors=baseanchors.anchors
- if baseanchors then
- local baseanchors=baseanchors['baselig']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- ba=ba[index]
- if ba then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
- pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
- end
- return head,start,true
- else
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(kind,lookupname),gref(markchar),gref(basechar),index)
- end
- end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
end
+ return head,start,false
end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s",pref(kind,lookupname),gref(markchar),gref(basechar))
+ end
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ pref(dataset,sequence),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
+ end
+ return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(dataset,sequence),gref(markchar),gref(basechar),index)
+ end
end
end
+ elseif trace_bugs then
+ onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
end
elseif trace_bugs then
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1)
end
elseif trace_bugs then
- logwarning("%s: prev node is no char",pref(kind,lookupname))
+ logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence)
+function handlers.gpos_mark2mark(head,start,dataset,sequence,markanchors,rlmode)
local markchar=getchar(start)
if marks[markchar] then
local base=getprev(start)
@@ -11892,156 +19143,62 @@ function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence
end
end
end
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- local baseanchors=descriptions[basechar]
- if baseanchors then
- baseanchors=baseanchors.anchors
- if baseanchors then
- baseanchors=baseanchors['basemark']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
- pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head,start,true
- end
- end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and basemark %s",pref(kind,lookupname),gref(markchar),gref(basechar))
- end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ pref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
end
+ return head,start,true
end
- elseif trace_bugs then
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
end
- elseif trace_bugs then
- logwarning("%s: prev node is no mark",pref(kind,lookupname))
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
+ logwarning("%s: mark %s is no mark",pref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence)
- local alreadydone=cursonce and getprop(start,a_cursbase)
- if not alreadydone then
- local done=false
- local startchar=getchar(start)
- if marks[startchar] then
- if trace_cursive then
- logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar))
- end
- else
- local nxt=getnext(start)
- while not done and nxt and getid(nxt)==glyph_code and getfont(nxt)==currentfont and getsubtype(nxt)<256 do
- local nextchar=getchar(nxt)
- if marks[nextchar] then
- nxt=getnext(nxt)
- else
- local entryanchors=descriptions[nextchar]
- if entryanchors then
- entryanchors=entryanchors.anchors
- if entryanchors then
- entryanchors=entryanchors['centry']
- if entryanchors then
- local al=anchorlookups[lookupname]
- for anchor,entry in next,entryanchors do
- if al[anchor] then
- local exit=exitanchors[anchor]
- if exit then
- local dx,dy,bound=setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
- if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
- end
- done=true
- break
- end
- end
- end
- end
- end
- elseif trace_bugs then
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
- end
- break
- end
- end
- end
- return head,start,done
- else
- if trace_cursive and trace_details then
- logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(getchar(start)),alreadydone)
- end
- return head,start,false
- end
-end
-function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence)
+function handlers.gpos_cursive(head,start,dataset,sequence,exitanchors,rlmode,step,i)
+ local done=false
local startchar=getchar(start)
- local dx,dy,w,h=setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
- end
- return head,start,false
-end
-function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence)
- local snext=getnext(start)
- if not snext then
- return head,start,false
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
else
- local prev,done=start,false
- local factor=tfmdata.parameters.factor
- local lookuptype=lookuptypes[lookupname]
- while snext and getid(snext)==glyph_code and getfont(snext)==currentfont and getsubtype(snext)<256 do
- local nextchar=getchar(snext)
- local krn=kerns[nextchar]
- if not krn and marks[nextchar] then
- prev=snext
- snext=getnext(snext)
+ local nxt=getnext(start)
+ while not done and nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
else
- if not krn then
- elseif type(krn)=="table" then
- if lookuptype=="pair" then
- local a,b=krn[2],krn[3]
- if a and #a>0 then
- local startchar=getchar(start)
- local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b>0 then
- local startchar=getchar(start)
- local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
end
+ done=true
end
- else
- report_process("%s: check this out (old kern stuff)",pref(kind,lookupname))
- end
- done=true
- elseif krn~=0 then
- local k=setkern(snext,factor,rlmode,krn)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
end
- done=true
end
break
end
end
- return head,start,done
end
+ return head,start,done
end
-local chainmores={}
local chainprocs={}
local function logprocess(...)
if trace_steps then
@@ -12057,58 +19214,49 @@ local function logprocess(...)
report_chain(...)
end
local logwarning=report_chain
-function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname)
- logwarning("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
- return head,start,false
-end
-function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n)
- logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
- return head,start,false
-end
-function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,lookuphash,replacements)
+local function reversesub(head,start,stop,dataset,sequence,replacements,rlmode)
local char=getchar(start)
local replacement=replacements[char]
if replacement then
if trace_singles then
- logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement))
+ logprocess("%s: single reverse replacement of %s by %s",cref(dataset,sequence),gref(char),gref(replacement))
end
resetinjection(start)
- setfield(start,"char",replacement)
+ setchar(start,replacement)
return head,start,true
else
return head,start,false
end
end
-function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
- local current=start
- local subtables=currentlookup.subtables
- if #subtables>1 then
- logwarning("todo: check if we need to loop over the replacements: %s",concat(subtables," "))
+chainprocs.reversesub=reversesub
+local function reportmoresteps(dataset,sequence)
+ logwarning("%s: more than 1 step",cref(dataset,sequence))
+end
+function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
end
+ local current=start
while current do
- if getid(current)==glyph_code then
- local currentchar=getchar(current)
- local lookupname=subtables[1]
- local replacement=lookuphash[lookupname]
- if not replacement then
+ local currentchar=ischar(current)
+ if currentchar then
+ local replacement=steps[1].coverage[currentchar]
+ if not replacement or replacement=="" then
if trace_bugs then
- logwarning("%s: no single hits",cref(kind,chainname,chainlookupname,lookupname,chainindex))
+ logwarning("%s: no single for %s",cref(dataset,sequence,chainindex),gref(currentchar))
end
else
- replacement=replacement[currentchar]
- if not replacement or replacement=="" then
- if trace_bugs then
- logwarning("%s: no single for %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar))
- end
- else
- if trace_singles then
- logprocess("%s: replacing single %s by %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar),gref(replacement))
- end
- resetinjection(current)
- setfield(current,"char",replacement)
+ if trace_singles then
+ logprocess("%s: replacing single %s by %s",cref(dataset,sequence,chainindex),gref(currentchar),gref(replacement))
end
+ resetinjection(current)
+ setchar(current,replacement)
end
return head,start,true
+ elseif currentchar==false then
+ break
elseif current==stop then
break
else
@@ -12117,65 +19265,57 @@ function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lo
end
return head,start,false
end
-chainmores.gsub_single=chainprocs.gsub_single
-function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gsub_multiple(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
local startchar=getchar(start)
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local replacements=lookuphash[lookupname]
- if not replacements then
+ local replacement=steps[1].coverage[startchar]
+ if not replacement or replacement=="" then
if trace_bugs then
- logwarning("%s: no multiple hits",cref(kind,chainname,chainlookupname,lookupname))
+ logwarning("%s: no multiple for %s",cref(dataset,sequence),gref(startchar))
end
else
- replacements=replacements[startchar]
- if not replacements or replacement=="" then
- if trace_bugs then
- logwarning("%s: no multiple for %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar))
- end
- else
- if trace_multiples then
- logprocess("%s: replacing %s by multiple characters %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar),gref(replacements))
- end
- return multiple_glyphs(head,start,replacements,currentlookup.flags[1])
+ if trace_multiples then
+ logprocess("%s: replacing %s by multiple characters %s",cref(dataset,sequence),gref(startchar),gref(replacement))
end
+ return multiple_glyphs(head,start,replacement,currentlookup.flags[1])
end
return head,start,false
end
-chainmores.gsub_multiple=chainprocs.gsub_multiple
-function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gsub_alternate(head,start,stop,dataset,sequence,currentlookup)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local kind=dataset[4]
+ local what=dataset[1]
+ local value=what==true and tfmdata.shared.features[kind] or what
local current=start
- local subtables=currentlookup.subtables
- local value=featurevalue==true and tfmdata.shared.features[kind] or featurevalue
while current do
- if getid(current)==glyph_code then
- local currentchar=getchar(current)
- local lookupname=subtables[1]
- local alternatives=lookuphash[lookupname]
- if not alternatives then
- if trace_bugs then
- logwarning("%s: no alternative hit",cref(kind,chainname,chainlookupname,lookupname))
- end
- else
- alternatives=alternatives[currentchar]
- if alternatives then
- local choice,comment=get_alternative_glyph(current,alternatives,value,trace_alternatives)
- if choice then
- if trace_alternatives then
- logprocess("%s: replacing %s by alternative %a to %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(char),choice,gref(choice),comment)
- end
- resetinjection(start)
- setfield(start,"char",choice)
- else
- if trace_alternatives then
- logwarning("%s: no variant %a for %s, %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(char),comment)
- end
+ local currentchar=ischar(current)
+ if currentchar then
+ local alternatives=steps[1].coverage[currentchar]
+ if alternatives then
+ local choice,comment=get_alternative_glyph(current,alternatives,value)
+ if choice then
+ if trace_alternatives then
+ logprocess("%s: replacing %s by alternative %a to %s, %s",cref(dataset,sequence),gref(char),choice,gref(choice),comment)
+ end
+ resetinjection(start)
+ setchar(start,choice)
+ else
+ if trace_alternatives then
+ logwarning("%s: no variant %a for %s, %s",cref(dataset,sequence),value,gref(char),comment)
end
- elseif trace_bugs then
- logwarning("%s: no alternative for %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(currentchar),comment)
end
end
return head,start,true
+ elseif currentchar==false then
+ break
elseif current==stop then
break
else
@@ -12184,217 +19324,311 @@ function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext
end
return head,start,false
end
-chainmores.gsub_alternate=chainprocs.gsub_alternate
-function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
+function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
local startchar=getchar(start)
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local ligatures=lookuphash[lookupname]
+ local ligatures=steps[1].coverage[startchar]
if not ligatures then
if trace_bugs then
- logwarning("%s: no ligature hits",cref(kind,chainname,chainlookupname,lookupname,chainindex))
+ logwarning("%s: no ligatures starting with %s",cref(dataset,sequence,chainindex),gref(startchar))
end
else
- ligatures=ligatures[startchar]
- if not ligatures then
- if trace_bugs then
- logwarning("%s: no ligatures starting with %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar))
- end
- else
- local s=getnext(start)
- local discfound=false
- local last=stop
- local nofreplacements=0
- local skipmark=currentlookup.flags[1]
- while s do
- local id=getid(s)
- if id==disc_code then
- s=getnext(s)
- discfound=true
+ local current=getnext(start)
+ local discfound=false
+ local last=stop
+ local nofreplacements=1
+ local skipmark=currentlookup.flags[1]
+ while current do
+ local id=getid(current)
+ if id==disc_code then
+ if not discfound then
+ discfound=current
+ end
+ if current==stop then
+ break
else
- local schar=getchar(s)
- if skipmark and marks[schar] then
- s=getnext(s)
- else
- local lg=ligatures[schar]
- if lg then
- ligatures,last,nofreplacements=lg,s,nofreplacements+1
- if s==stop then
- break
- else
- s=getnext(s)
- end
- else
+ current=getnext(current)
+ end
+ else
+ local schar=getchar(current)
+ if skipmark and marks[schar] then
+ current=getnext(current)
+ else
+ local lg=ligatures[schar]
+ if lg then
+ ligatures=lg
+ last=current
+ nofreplacements=nofreplacements+1
+ if current==stop then
break
+ else
+ current=getnext(current)
end
- end
- end
- end
- local l2=ligatures.ligature
- if l2 then
- if chainindex then
- stop=last
- end
- if trace_ligatures then
- if start==stop then
- logprocess("%s: replacing character %s by ligature %s case 3",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(l2))
else
- logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(getchar(stop)),gref(l2))
+ break
end
end
- head,start=toligature(kind,lookupname,head,start,stop,l2,currentlookup.flags[1],discfound)
- return head,start,true,nofreplacements
- elseif trace_bugs then
+ end
+ end
+ local ligature=ligatures.ligature
+ if ligature then
+ if chainindex then
+ stop=last
+ end
+ if trace_ligatures then
if start==stop then
- logwarning("%s: replacing character %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar))
+ logprocess("%s: replacing character %s by ligature %s case 3",cref(dataset,sequence,chainindex),gref(startchar),gref(ligature))
else
- logwarning("%s: replacing character %s upto %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(getchar(stop)))
+ logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)),gref(ligature))
end
end
+ head,start=toligature(head,start,stop,ligature,dataset,sequence,skipmark,discfound)
+ return head,start,true,nofreplacements,discfound
+ elseif trace_bugs then
+ if start==stop then
+ logwarning("%s: replacing character %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar))
+ else
+ logwarning("%s: replacing character %s upto %s by ligature fails",cref(dataset,sequence,chainindex),gref(startchar),gref(getchar(stop)))
+ end
end
end
- return head,start,false,0
+ return head,start,false,0,false
end
-chainmores.gsub_ligature=chainprocs.gsub_ligature
-function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local markchar=getchar(start)
- if marks[markchar] then
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local markanchors=lookuphash[lookupname]
- if markanchors then
- markanchors=markanchors[markchar]
+function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if not kerns then
+ elseif step.format=="pair" then
+ local dx,dy,w,h=setpair(start,factor,rlmode,sequence.flags[4],kerns)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),dx,dy,w,h)
end
- if markanchors then
- local base=getprev(start)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- if marks[basechar] then
- while true do
- base=getprev(base)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- basechar=getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
+ else
+ local k=setkern(start,factor,rlmode,kerns,injection)
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,chainindex)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local snext=getnext(start)
+ if snext then
+ local startchar=getchar(start)
+ local step=steps[1]
+ local kerns=step.coverage[startchar]
+ if kerns then
+ local prev=start
+ local done=false
+ while snext do
+ local nextchar=ischar(snext,currentfont)
+ if not nextchar then
+ break
+ end
+ local krn=kerns[nextchar]
+ if not krn and marks[nextchar] then
+ prev=snext
+ snext=getnext(snext)
+ elseif not krn then
+ break
+ elseif step.format=="pair" then
+ local a,b=krn[1],krn[2]
+ if optimizekerns then
+ if not b and a[1]==0 and a[2]==0 and a[4]==0 then
+ local k=setkern(snext,factor,rlmode,a[3],"injections")
+ if trace_kerns then
+ logprocess("%s: shifting single %s by %p",cref(dataset,sequence),gref(startchar),k)
end
- return head,start,false
+ done=true
+ break
+ end
+ end
+ if a and #a>0 then
+ local startchar=getchar(start)
+ local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,"injections")
+ if trace_kerns then
+ 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 and #b>0 then
+ local startchar=getchar(start)
+ local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,"injections")
+ if trace_kerns then
+ 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
end
+ done=true
+ break
+ elseif krn~=0 then
+ local k=setkern(snext,factor,rlmode,krn)
+ if trace_kerns then
+ logprocess("%s: inserting kern %s between %s and %s",cref(dataset,sequence),k,gref(getchar(prev)),gref(nextchar))
+ end
+ done=true
+ break
+ else
+ break
end
- local baseanchors=descriptions[basechar].anchors
- if baseanchors then
- local baseanchors=baseanchors['basechar']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,done
+ end
+ end
+ return head,start,false
+end
+function chainprocs.gpos_mark2base(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local markchar=getchar(start)
+ if marks[markchar] then
+ local markanchors=steps[1].coverage[markchar]
+ if markanchors then
+ local base=getprev(start)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
end
- return head,start,true
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),1)
+ end
+ return head,start,false
end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",pref(dataset,sequence),gref(markchar),2)
+ end
+ return head,start,false
end
end
- if trace_bugs then
- logwarning("%s, no matching anchors for mark %s and base %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
+ end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
+ end
+ return head,start,true
end
end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),1)
end
elseif trace_bugs then
- logwarning("%s: prev node is no char",cref(kind,chainname,chainlookupname,lookupname))
+ logwarning("%s: prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function chainprocs.gpos_mark2ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_mark2ligature(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
local markchar=getchar(start)
if marks[markchar] then
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local markanchors=lookuphash[lookupname]
- if markanchors then
- markanchors=markanchors[markchar]
- end
+ local markanchors=steps[1].coverage[markchar]
if markanchors then
local base=getprev(start)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- if marks[basechar] then
- while true do
- base=getprev(base)
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- basechar=getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",cref(kind,chainname,chainlookupname,lookupname),markchar)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if marks[basechar] then
+ while base do
+ base=getprev(base)
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ if not marks[basechar] then
+ break
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,1)
+ end
+ return head,start,false
+ end
+ else
+ if trace_bugs then
+ logwarning("%s: no base for mark %s, case %i",cref(dataset,sequence),markchar,2)
+ end
+ return head,start,false
end
- return head,start,false
end
end
- end
- local index=getligaindex(start)
- local baseanchors=descriptions[basechar].anchors
- if baseanchors then
- local baseanchors=baseanchors['baselig']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- ba=ba[index]
- if ba then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
- end
- return head,start,true
- end
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local index=getligaindex(start)
+ ba=ba[index]
+ if ba then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar])
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
+ cref(dataset,sequence),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
end
+ return head,start,true
end
end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
- end
end
+ elseif trace_bugs then
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),1)
end
elseif trace_bugs then
- logwarning("feature %s, lookup %s: prev node is no char",kind,lookupname)
+ logwarning("%s, prev node is no char, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
+ logwarning("%s, mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
+ logwarning("%s, mark %s is no mark",cref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_mark2mark(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
local markchar=getchar(start)
if marks[markchar] then
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local markanchors=lookuphash[lookupname]
- if markanchors then
- markanchors=markanchors[markchar]
- end
+ local markanchors=steps[1].coverage[markchar]
if markanchors then
local base=getprev(start)
local slc=getligaindex(start)
@@ -12408,211 +19642,367 @@ function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext
end
end
end
- if base and getid(base)==glyph_code and getfont(base)==currentfont and getsubtype(base)<256 then
- local basechar=getchar(base)
- local baseanchors=descriptions[basechar].anchors
- if baseanchors then
- baseanchors=baseanchors['basemark']
- if baseanchors then
- local al=anchorlookups[lookupname]
- for anchor,ba in next,baseanchors do
- if al[anchor] then
- local ma=markanchors[anchor]
- if ma then
- local dx,dy,bound=setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head,start,true
- end
+ if base then
+ local basechar=ischar(base,currentfont)
+ if basechar then
+ local ba=markanchors[1][basechar]
+ if ba then
+ local ma=markanchors[2]
+ if ma then
+ local dx,dy,bound=setmark(start,base,factor,rlmode,ba,ma,characters[basechar],true)
+ if trace_marks then
+ logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
+ cref(dataset,sequence),anchor,bound,gref(markchar),gref(basechar),dx,dy)
end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and basemark %s",gref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
+ return head,start,true
end
end
+ elseif trace_bugs then
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),1)
end
elseif trace_bugs then
- logwarning("%s: prev node is no mark",cref(kind,chainname,chainlookupname,lookupname))
+ logwarning("%s: prev node is no mark, case %i",cref(dataset,sequence),2)
end
elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
+ logwarning("%s: mark %s has no anchors",cref(dataset,sequence),gref(markchar))
end
elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
+ logwarning("%s: mark %s is no mark",cref(dataset,sequence),gref(markchar))
end
return head,start,false
end
-function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local alreadydone=cursonce and getprop(start,a_cursbase)
- if not alreadydone then
- local startchar=getchar(start)
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local exitanchors=lookuphash[lookupname]
- if exitanchors then
- exitanchors=exitanchors[startchar]
- end
- if exitanchors then
- local done=false
- if marks[startchar] then
- if trace_cursive then
- logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar))
- end
- else
- local nxt=getnext(start)
- while not done and nxt and getid(nxt)==glyph_code and getfont(nxt)==currentfont and getsubtype(nxt)<256 do
- local nextchar=getchar(nxt)
- if marks[nextchar] then
- nxt=getnext(nxt)
- else
- local entryanchors=descriptions[nextchar]
- if entryanchors then
- entryanchors=entryanchors.anchors
- if entryanchors then
- entryanchors=entryanchors['centry']
- if entryanchors then
- local al=anchorlookups[lookupname]
- for anchor,entry in next,entryanchors do
- if al[anchor] then
- local exit=exitanchors[anchor]
- if exit then
- local dx,dy,bound=setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
- if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
- end
- done=true
- break
- end
- end
- end
+function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ local startchar=getchar(start)
+ local exitanchors=steps[1].coverage[startchar]
+ if exitanchors then
+ local done=false
+ if marks[startchar] then
+ if trace_cursive then
+ logprocess("%s: ignoring cursive for mark %s",pref(dataset,sequence),gref(startchar))
+ end
+ else
+ local nxt=getnext(start)
+ while not done and nxt do
+ local nextchar=ischar(nxt,currentfont)
+ if not nextchar then
+ break
+ elseif marks[nextchar] then
+ nxt=getnext(nxt)
+ else
+ local exit=exitanchors[3]
+ if exit then
+ local entry=exitanchors[1][nextchar]
+ if entry then
+ entry=entry[2]
+ if entry then
+ local dx,dy,bound=setcursive(start,nxt,factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
+ if trace_cursive then
+ logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in %s mode",pref(dataset,sequence),gref(startchar),gref(nextchar),dx,dy,anchor,bound,mref(rlmode))
end
+ done=true
+ break
end
- elseif trace_bugs then
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
- break
+ elseif trace_bugs then
+ onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
end
+ break
end
end
- return head,start,done
+ end
+ return head,start,done
+ else
+ if trace_cursive and trace_details then
+ logprocess("%s, cursive %s is already done",pref(dataset,sequence),gref(getchar(start)),alreadydone)
+ end
+ return head,start,false
+ end
+end
+local function show_skip(dataset,sequence,char,ck,class)
+ logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(dataset,sequence),gref(char),class,ck[1],ck[8] or ck[2])
+end
+local function chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,k,ck,chainproc)
+ if not start then
+ return head,start,false
+ end
+ local startishead=start==head
+ local seq=ck[3]
+ local f=ck[4]
+ local l=ck[5]
+ local s=#seq
+ local done=false
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local sweepoverflow=false
+ local checkdisc=getprev(head)
+ local keepdisc=not sweepnode
+ local lookaheaddisc=nil
+ local backtrackdisc=nil
+ local current=start
+ local last=start
+ local prev=getprev(start)
+ local i=f
+ while i<=l do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ last=current
+ current=getnext(current)
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i<=l do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ last=current
+ current=getnext(c)
+ else
+ head,current=flattendisk(head,current)
+ end
else
- if trace_cursive and trace_details then
- logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(getchar(start)),alreadydone)
+ last=current
+ current=getnext(current)
+ end
+ if current then
+ elseif sweepoverflow then
+ break
+ elseif sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ sweepoverflow=true
+ else
+ break
end
- return head,start,false
+ else
+ break
end
end
- return head,start,false
-end
-function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- local startchar=getchar(start)
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local kerns=lookuphash[lookupname]
- if kerns then
- kerns=kerns[startchar]
- if kerns then
- local dx,dy,w,h=setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
+ if sweepoverflow then
+ local prev=current and getprev(current)
+ if not current or prev~=sweepnode then
+ local head=getnext(sweepnode)
+ local tail=nil
+ if prev then
+ tail=prev
+ setprev(current,sweepnode)
+ else
+ tail=find_node_tail(head)
+ end
+ setnext(sweepnode,current)
+ setprev(head,nil)
+ setnext(tail,nil)
+ appenddisc(sweepnode,head)
+ end
+ end
+ if l<s then
+ local i=l
+ local t=sweeptype=="post" or sweeptype=="replace"
+ while current and i<s do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i+1
+ current=getnext(current)
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpre[current]~=notmatchreplace[current] then
+ lookaheaddisc=current
+ end
+ local replace=getfield(c,"replace")
+ while replace and i<s do
+ if getid(replace)==glyph_code then
+ i=i+1
+ end
+ replace=getnext(replace)
+ end
+ current=getnext(current)
+ elseif notmatchpre[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
+ else
+ current=getnext(current)
+ end
+ else
+ current=getnext(current)
+ end
+ if not current and t then
+ current=getnext(sweepnode)
+ if current then
+ sweeptype=nil
+ end
end
end
end
- return head,start,false
-end
-chainmores.gpos_single=chainprocs.gpos_single
-function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- local snext=getnext(start)
- if snext then
- local startchar=getchar(start)
- local subtables=currentlookup.subtables
- local lookupname=subtables[1]
- local kerns=lookuphash[lookupname]
- if kerns then
- kerns=kerns[startchar]
- if kerns then
- local lookuptype=lookuptypes[lookupname]
- local prev,done=start,false
- local factor=tfmdata.parameters.factor
- while snext and getid(snext)==glyph_code and getfont(snext)==currentfont and getsubtype(snext)<256 do
- local nextchar=getchar(snext)
- local krn=kerns[nextchar]
- if not krn and marks[nextchar] then
- prev=snext
- snext=getnext(snext)
- else
- if not krn then
- elseif type(krn)=="table" then
- if lookuptype=="pair" then
- local a,b=krn[2],krn[3]
- if a and #a>0 then
- local startchar=getchar(start)
- local x,y,w,h=setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b>0 then
- local startchar=getchar(start)
- local x,y,w,h=setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- else
- report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname))
- local a,b=krn[2],krn[6]
- if a and a~=0 then
- local k=setkern(snext,factor,rlmode,a)
- if trace_kerns then
- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- end
- if b and b~=0 then
- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
- end
- end
- done=true
- elseif krn~=0 then
- local k=setkern(snext,factor,rlmode,krn)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- done=true
+ if f>1 then
+ local current=prev
+ local i=f
+ local t=sweeptype=="pre" or sweeptype=="replace"
+ if not current and t and current==checkdisk then
+ current=getprev(sweepnode)
+ end
+ while current and i>1 do
+ local id=getid(current)
+ if id==glyph_code then
+ i=i-1
+ elseif id==disc_code then
+ if keepdisc then
+ keepdisc=false
+ if notmatchpost[current]~=notmatchreplace[current] then
+ backtrackdisc=current
+ end
+ local replace=getfield(current,"replace")
+ while replace and i>1 do
+ if getid(replace)==glyph_code then
+ i=i-1
end
- break
+ replace=getnext(replace)
end
+ elseif notmatchpost[current]~=notmatchreplace[current] then
+ head,current=flattendisk(head,current)
end
- return head,start,done
+ end
+ current=getprev(current)
+ if t and current==checkdisk then
+ current=getprev(sweepnode)
end
end
end
- return head,start,false
-end
-chainmores.gpos_pair=chainprocs.gpos_pair
-local function show_skip(kind,chainname,char,ck,class)
- if ck[9] then
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
+ local ok=false
+ if lookaheaddisc then
+ local cf=start
+ local cl=getprev(lookaheaddisc)
+ local cprev=getprev(start)
+ local insertedmarks=0
+ while cprev do
+ local char=ischar(cf,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cf=cprev
+ startishead=cf==head
+ cprev=getprev(cprev)
+ else
+ break
+ end
+ end
+ setprev(lookaheaddisc,cprev)
+ if cprev then
+ setnext(cprev,lookaheaddisc)
+ end
+ setprev(cf,nil)
+ setnext(cl,nil)
+ if startishead then
+ head=lookaheaddisc
+ end
+ local pre,post,replace=getdisc(lookaheaddisc)
+ local new=copy_node_list(cf)
+ local cnew=new
+ for i=1,insertedmarks do
+ cnew=getnext(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpre[lookaheaddisc] then
+ cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[lookaheaddisc] then
+ new,cnew,ok=chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if pre then
+ setlink(cl,pre)
+ end
+ if replace then
+ local tail=find_node_tail(new)
+ setlink(tail,replace)
+ end
+ setdisc(lookaheaddisc,cf,post,new)
+ start=getprev(lookaheaddisc)
+ sweephead[cf]=getnext(clast)
+ sweephead[new]=getnext(last)
+ elseif backtrackdisc then
+ local cf=getnext(backtrackdisc)
+ local cl=start
+ local cnext=getnext(start)
+ local insertedmarks=0
+ while cnext do
+ local char=ischar(cnext,currentfont)
+ if char and marks[char] then
+ insertedmarks=insertedmarks+1
+ cl=cnext
+ cnext=getnext(cnext)
+ else
+ break
+ end
+ end
+ if cnext then
+ setprev(cnext,backtrackdisc)
+ end
+ setnext(backtrackdisc,cnext)
+ setprev(cf,nil)
+ setnext(cl,nil)
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
+ local new=copy_node_list(cf)
+ local cnew=find_node_tail(new)
+ for i=1,insertedmarks do
+ cnew=getprev(cnew)
+ end
+ local clast=cnew
+ for i=f,l do
+ clast=getnext(clast)
+ end
+ if not notmatchpost[backtrackdisc] then
+ cf,start,ok=chainproc(cf,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if not notmatchreplace[backtrackdisc] then
+ new,cnew,ok=chainproc(new,cnew,clast,dataset,sequence,chainlookup,rlmode,k)
+ end
+ if post then
+ setlink(posttail,cf)
+ else
+ post=cf
+ end
+ if replace then
+ setlink(replacetail,new)
+ else
+ replace=new
+ end
+ setdisc(backtrackdisc,pre,post,replace)
+ start=getprev(backtrackdisc)
+ sweephead[post]=getnext(clast)
+ sweephead[replace]=getnext(last)
else
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2])
- end
-end
-local quit_on_no_replacement=true
-directives.register("otf.chain.quitonnoreplacement",function(value)
- quit_on_no_replacement=value
-end)
-local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash)
- local flags=sequence.flags
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,k)
+ end
+ return head,start,ok
+end
+local noflags={ false,false,false,false }
+local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)
+ local sweepnode=sweepnode
+ local sweeptype=sweeptype
+ local currentfont=currentfont
+ local diskseen=false
+ local checkdisc=getprev(head)
+ local flags=sequence.flags or noflags
local done=false
local skipmark=flags[1]
local skipligature=flags[2]
local skipbase=flags[3]
- local someskip=skipmark or skipligature or skipbase
- local markclass=sequence.markclass
+ local markclass=sequence.markclass
local skipped=false
- for k=1,#contexts do
+ for k=1,#contexts do
local match=true
local current=start
local last=start
@@ -12620,48 +20010,112 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
local seq=ck[3]
local s=#seq
if s==1 then
- match=getid(current)==glyph_code and getfont(current)==currentfont and getsubtype(current)<256 and seq[1][getchar(current)]
+ local char=ischar(current,currentfont)
+ if char then
+ match=seq[1][char]
+ end
else
- local f,l=ck[4],ck[5]
+ local f=ck[4]
+ local l=ck[5]
if f==1 and f==l then
else
if f==l then
else
+ local discfound=nil
local n=f+1
last=getnext(last)
while n<=l do
+ if not last and (sweeptype=="post" or sweeptype=="replace") then
+ last=getnext(sweepnode)
+ sweeptype=nil
+ end
if last then
- local id=getid(last)
- if id==glyph_code then
- if getfont(last)==currentfont and getsubtype(last)<256 then
- local char=getchar(last)
- local ccd=descriptions[char]
- if ccd then
- local class=ccd.class
- if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
- skipped=true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
- end
+ local char,id=ischar(last,currentfont)
+ if char then
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class or "base"
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ last=getnext(last)
+ elseif seq[n][char] then
+ if n<l then
last=getnext(last)
- elseif seq[n][char] then
- if n<l then
- last=getnext(last)
- end
- n=n+1
+ end
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
+ end
+ last=getnext(last)
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
elseif id==disc_code then
+ diskseen=true
+ discfound=last
+ notmatchpre[last]=nil
+ notmatchpost[last]=true
+ notmatchreplace[last]=nil
+ local pre,post,replace=getdisc(last)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ pre=getnext(pre)
+ if n>l then
+ break
+ end
+ else
+ notmatchpre[last]=true
+ break
+ end
+ end
+ if n<=l then
+ notmatchpre[last]=true
+ end
+ else
+ notmatchpre[last]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ replace=getnext(replace)
+ if n>l then
+ break
+ end
+ else
+ notmatchreplace[last]=true
+ match=not notmatchpre[last]
+ break
+ end
+ end
+ match=not notmatchpre[last]
+ end
last=getnext(last)
else
match=false
@@ -12677,49 +20131,126 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
if match and f>1 then
local prev=getprev(start)
if prev then
- local n=f-1
- while n>=1 do
- if prev then
- local id=getid(prev)
- if id==glyph_code then
- if getfont(prev)==currentfont and getsubtype(prev)<256 then
- local char=getchar(prev)
+ if prev==checkdisc and (sweeptype=="pre" or sweeptype=="replace") then
+ prev=getprev(sweepnode)
+ end
+ if prev then
+ local discfound=nil
+ local n=f-1
+ while n>=1 do
+ if prev then
+ local char,id=ischar(prev,currentfont)
+ if char then
local ccd=descriptions[char]
if ccd then
local class=ccd.class
if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
skipped=true
if trace_skips then
- show_skip(kind,chainname,char,ck,class)
+ show_skip(dataset,sequence,char,ck,class)
end
elseif seq[n][char] then
n=n -1
else
- match=false
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
break
end
else
- match=false
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
break
end
+ prev=getprev(prev)
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpost[discfound]
+ else
+ match=false
+ end
+ break
+ elseif id==disc_code then
+ diskseen=true
+ discfound=prev
+ notmatchpre[prev]=true
+ notmatchpost[prev]=nil
+ notmatchreplace[prev]=nil
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(prev,true)
+ if pre~=start and post~=start and replace~=start then
+ if post then
+ local n=n
+ while posttail do
+ if seq[n][getchar(posttail)] then
+ n=n-1
+ if posttail==post then
+ break
+ else
+ posttail=getprev(posttail)
+ if n<1 then
+ break
+ end
+ end
+ else
+ notmatchpost[prev]=true
+ break
+ end
+ end
+ if n>=1 then
+ notmatchpost[prev]=true
+ end
+ else
+ notmatchpost[prev]=true
+ end
+ if replace then
+ while replacetail do
+ if seq[n][getchar(replacetail)] then
+ n=n-1
+ if replacetail==replace then
+ break
+ else
+ replacetail=getprev(replacetail)
+ if n<1 then
+ break
+ end
+ end
+ else
+ notmatchreplace[prev]=true
+ match=not notmatchpost[prev]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ end
+ else
+ end
+ elseif seq[n][32] then
+ n=n-1
else
match=false
break
end
- elseif id==disc_code then
- elseif seq[n][32] then
- n=n -1
+ prev=getprev(prev)
+ elseif seq[n][32] then
+ n=n-1
else
match=false
break
end
- prev=getprev(prev)
- elseif seq[n][32] then
- n=n -1
- else
- match=false
- break
end
+ else
+ match=false
end
else
match=false
@@ -12727,37 +20258,100 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
if match and s>l then
local current=last and getnext(last)
+ if not current then
+ if sweeptype=="post" or sweeptype=="replace" then
+ current=getnext(sweepnode)
+ end
+ end
if current then
+ local discfound=nil
local n=l+1
while n<=s do
if current then
- local id=getid(current)
- if id==glyph_code then
- if getfont(current)==currentfont and getsubtype(current)<256 then
- local char=getchar(current)
- local ccd=descriptions[char]
- if ccd then
- local class=ccd.class
- if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
- skipped=true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
- end
- elseif seq[n][char] then
- n=n+1
+ local char,id=ischar(current,currentfont)
+ if char then
+ local ccd=descriptions[char]
+ if ccd then
+ local class=ccd.class
+ if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
+ skipped=true
+ if trace_skips then
+ show_skip(dataset,sequence,char,ck,class)
+ end
+ elseif seq[n][char] then
+ n=n+1
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
+ end
+ else
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
+ end
+ elseif char==false then
+ if discfound then
+ notmatchreplace[discfound]=true
+ match=not notmatchpre[discfound]
else
match=false
- break
end
+ break
elseif id==disc_code then
+ diskseen=true
+ discfound=current
+ notmatchpre[current]=nil
+ notmatchpost[current]=true
+ notmatchreplace[current]=nil
+ local pre,post,replace=getdisc(current)
+ if pre then
+ local n=n
+ while pre do
+ if seq[n][getchar(pre)] then
+ n=n+1
+ pre=getnext(pre)
+ if n>s then
+ break
+ end
+ else
+ notmatchpre[current]=true
+ break
+ end
+ end
+ if n<=s then
+ notmatchpre[current]=true
+ end
+ else
+ notmatchpre[current]=true
+ end
+ if replace then
+ while replace do
+ if seq[n][getchar(replace)] then
+ n=n+1
+ replace=getnext(replace)
+ if n>s then
+ break
+ end
+ else
+ notmatchreplace[current]=true
+ match=notmatchpre[current]
+ break
+ end
+ end
+ if not match then
+ break
+ end
+ else
+ end
elseif seq[n][32] then
n=n+1
else
@@ -12767,6 +20361,7 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
current=getnext(current)
elseif seq[n][32] then
n=n+1
+current=getnext(current)
else
match=false
break
@@ -12778,46 +20373,45 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
end
if match then
+ local diskchain=diskseen or sweepnode
if trace_contexts then
- local rule,lookuptype,f,l=ck[1],ck[2],ck[4],ck[5]
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local first=ck[4]
+ local last=ck[5]
local char=getchar(start)
- if ck[9] then
- logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a, %a => %a",
- cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10])
- else
- logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a",
- cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype)
- end
+ logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a",
+ cref(dataset,sequence),rule,gref(char),first-1,last-first+1,s-last,lookuptype)
end
local chainlookups=ck[6]
if chainlookups then
local nofchainlookups=#chainlookups
if nofchainlookups==1 then
- local chainlookupname=chainlookups[1]
- local chainlookup=lookuptable[chainlookupname]
- if chainlookup then
- local cp=chainprocs[chainlookup.type]
- if cp then
- local ok
- head,start,ok=cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
- if ok then
- done=true
- end
+ local chainlookup=chainlookups[1]
+ local chainkind=chainlookup.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ if diskchain then
+ head,start,ok=chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,1,ck,chainproc)
else
- logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,1)
end
- else
- logprocess("%s is not yet supported",cref(kind,chainname,chainlookupname))
+ if ok then
+ done=true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
end
else
local i=1
- while true do
+ while start and true do
if skipped then
- while true do
+ while start do
local char=getchar(start)
local ccd=descriptions[char]
if ccd then
- local class=ccd.class
+ local class=ccd.class or "base"
if class==skipmark or class==skipligature or class==skipbase or (markclass and class=="mark" and not markclass[char]) then
start=getnext(start)
else
@@ -12828,79 +20422,82 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq
end
end
end
- local chainlookupname=chainlookups[i]
- local chainlookup=lookuptable[chainlookupname]
+ local chainlookup=chainlookups[1]
if not chainlookup then
- i=i+1
+ i=i+1
else
- local cp=chainmores[chainlookup.type]
- if not cp then
- logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
- i=i+1
- else
+ local chainkind=chainlookup.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
local ok,n
- head,start,ok,n=cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
+ if diskchain then
+ head,start,ok=chaindisk(head,start,last,dataset,sequence,chainlookup,rlmode,i,ck,chainproc)
+ else
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainlookup,rlmode,i)
+ end
if ok then
done=true
- i=i+(n or 1)
- else
- i=i+1
+ if n and n>1 then
+ if i+n>nofchainlookups then
+ break
+ else
+ end
+ end
end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
end
+ i=i+1
end
- if i>nofchainlookups then
+ if i>nofchainlookups or not start then
break
elseif start then
start=getnext(start)
- else
end
end
end
else
local replacements=ck[7]
if replacements then
- head,start,done=chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements)
+ head,start,done=reversesub(head,start,last,dataset,sequence,replacements,rlmode)
else
done=quit_on_no_replacement
if trace_contexts then
- logprocess("%s: skipping match",cref(kind,chainname))
+ logprocess("%s: skipping match",cref(dataset,sequence))
end
end
end
+ if done then
+ break
+ end
end
end
- return head,start,done
-end
-local verbose_handle_contextchain=function(font,...)
- logwarning("no verbose handler installed, reverting to 'normal'")
- otf.setcontextchain()
- return normal_handle_contextchain(...)
-end
-otf.chainhandlers={
- normal=normal_handle_contextchain,
- verbose=verbose_handle_contextchain,
-}
-function otf.setcontextchain(method)
- if not method or method=="normal" or not otf.chainhandlers[method] then
- if handlers.contextchain then
- logwarning("installing normal contextchain handler")
- end
- handlers.contextchain=normal_handle_contextchain
- else
- logwarning("installing contextchain handler %a",method)
- local handler=otf.chainhandlers[method]
- handlers.contextchain=function(...)
- return handler(currentfont,...)
- end
+ if diskseen then
+ notmatchpre={}
+ notmatchpost={}
+ notmatchreplace={}
end
- handlers.gsub_context=handlers.contextchain
- handlers.gsub_contextchain=handlers.contextchain
- handlers.gsub_reversecontextchain=handlers.contextchain
- handlers.gpos_contextchain=handlers.contextchain
- handlers.gpos_context=handlers.contextchain
+ return head,start,done
end
-otf.setcontextchain()
-local missing={}
+handlers.gsub_context=handle_contextchain
+handlers.gsub_contextchain=handle_contextchain
+handlers.gsub_reversecontextchain=handle_contextchain
+handlers.gpos_contextchain=handle_contextchain
+handlers.gpos_context=handle_contextchain
+local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode)
+ local steps=currentlookup.steps
+ local nofsteps=currentlookup.nofsteps
+ if nofsteps>1 then
+ reportmoresteps(dataset,sequence)
+ end
+ return handle_contextchain(head,start,dataset,sequence,currentlookup,rlmode)
+end
+chainprocs.gsub_context=chained_contextchain
+chainprocs.gsub_contextchain=chained_contextchain
+chainprocs.gsub_reversecontextchain=chained_contextchain
+chainprocs.gpos_contextchain=chained_contextchain
+chainprocs.gpos_context=chained_contextchain
+local missing=setmetatableindex("table")
local function logprocess(...)
if trace_steps then
registermessage(...)
@@ -12908,38 +20505,50 @@ local function logprocess(...)
report_process(...)
end
local logwarning=report_process
-local function report_missing_cache(typ,lookup)
- local f=missing[currentfont] if not f then f={} missing[currentfont]=f end
- local t=f[typ] if not t then t={} f[typ]=t end
- if not t[lookup] then
- t[lookup]=true
- logwarning("missing cache for lookup %a, type %a, font %a, name %a",lookup,typ,currentfont,tfmdata.properties.fullname)
+local function report_missing_coverage(dataset,sequence)
+ local t=missing[currentfont]
+ if not t[sequence] then
+ t[sequence]=true
+ logwarning("missing coverage for feature %a, lookup %a, type %a, font %a, name %a",
+ dataset[4],sequence.name,sequence.type,currentfont,tfmdata.properties.fullname)
end
end
local resolved={}
-local lookuphashes={}
-setmetatableindex(lookuphashes,function(t,font)
- local lookuphash=fontdata[font].resources.lookuphash
- if not lookuphash or not next(lookuphash) then
- lookuphash=false
- end
- t[font]=lookuphash
- return lookuphash
+local sequencelists=setmetatableindex(function(t,font)
+ local sequences=fontdata[font].resources.sequences
+ if not sequences or not next(sequences) then
+ sequences=false
+ end
+ t[font]=sequences
+ return sequences
end)
-local autofeatures=fonts.analyzers.features
-local function initialize(sequence,script,language,enabled)
+local autofeatures=fonts.analyzers.features
+local featuretypes=otf.tables.featuretypes
+local defaultscript=otf.features.checkeddefaultscript
+local defaultlanguage=otf.features.checkeddefaultlanguage
+local function initialize(sequence,script,language,enabled,autoscript,autolanguage)
local features=sequence.features
if features then
local order=sequence.order
if order then
- for i=1,#order do
- local kind=order[i]
+ local featuretype=featuretypes[sequence.type or "unknown"]
+ for i=1,#order do
+ local kind=order[i]
local valid=enabled[kind]
if valid then
- local scripts=features[kind]
- local languages=scripts[script] or scripts[wildcard]
- if languages and (languages[language] or languages[wildcard]) then
- return { valid,autofeatures[kind] or false,sequence.chain or 0,kind,sequence }
+ local scripts=features[kind]
+ local languages=scripts and (
+ scripts[script] or
+ scripts[wildcard] or
+ (autoscript and defaultscript(featuretype,autoscript,scripts))
+ )
+ local enabled=languages and (
+ languages[language] or
+ languages[wildcard] or
+ (autolanguage and defaultlanguage(featuretype,autolanguage,languages))
+ )
+ if enabled then
+ return { valid,autofeatures[kind] or false,sequence,kind }
end
end
end
@@ -12954,6 +20563,8 @@ function otf.dataset(tfmdata,font)
local language=properties.language or "dflt"
local script=properties.script or "dflt"
local enabled=shared.features
+ local autoscript=enabled and enabled.autoscript
+ local autolanguage=enabled and enabled.autolanguage
local res=resolved[font]
if not res then
res={}
@@ -12971,7 +20582,7 @@ function otf.dataset(tfmdata,font)
rs[language]=rl
local sequences=tfmdata.resources.sequences
for s=1,#sequences do
- local v=enabled and initialize(sequences[s],script,language,enabled)
+ local v=enabled and initialize(sequences[s],script,language,enabled,autoscript,autolanguage)
if v then
rl[#rl+1]=v
end
@@ -12979,72 +20590,519 @@ function otf.dataset(tfmdata,font)
end
return rl
end
+local function report_disc(what,n)
+ report_run("%s: %s > %s",what,n,languages.serializediscretionary(n))
+end
+local function kernrun(disc,k_run,font,attr,...)
+ if trace_kernruns then
+ report_disc("kern",disc)
+ end
+ local prev,next=getboth(disc)
+ local nextstart=next
+ local done=false
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local prevmarks=prev
+ while prevmarks do
+ local char=ischar(prevmarks,font)
+ if char and marks[char] then
+ prevmarks=getprev(prevmarks)
+ else
+ break
+ end
+ end
+ if prev and (pre or replace) and not ischar(prev,font) then
+ prev=false
+ end
+ if next and (post or replace) and not ischar(next,font) then
+ next=false
+ end
+ if pre then
+ if k_run(pre,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ local nest=getprev(pre)
+ setlink(prev,pre)
+ if k_run(prevmarks,"preinjections",pre,font,attr,...) then
+ done=true
+ end
+ setprev(pre,nest)
+ setnext(prev,disc)
+ end
+ end
+ if post then
+ if k_run(post,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if next then
+ setlink(posttail,next)
+ if k_run(posttail,"postinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(posttail,nil)
+ setprev(next,disc)
+ end
+ end
+ if replace then
+ if k_run(replace,"injections",nil,font,attr,...) then
+ done=true
+ end
+ if prev then
+ local nest=getprev(replace)
+ setlink(prev,replace)
+ if k_run(prevmarks,"replaceinjections",replace,font,attr,...) then
+ done=true
+ end
+ setprev(replace,nest)
+ setnext(prev,disc)
+ end
+ if next then
+ setlink(replacetail,next)
+ if k_run(replacetail,"replaceinjections",next,font,attr,...) then
+ done=true
+ end
+ setnext(replacetail,nil)
+ setprev(next,disc)
+ end
+ elseif prev and next then
+ setlink(prev,next)
+ if k_run(prevmarks,"emptyinjections",next,font,attr,...) then
+ done=true
+ end
+ setlink(prev,disc)
+ setlink(disc,next)
+ end
+ return nextstart,done
+end
+local function comprun(disc,c_run,...)
+ if trace_compruns then
+ report_disc("comp",disc)
+ end
+ local pre,post,replace=getdisc(disc)
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,done=c_run(pre,...)
+ if done then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,done=c_run(post,...)
+ if done then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,done=c_run(replace,...)
+ if done then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ end
+ return getnext(disc),renewed
+end
+local function testrun(disc,t_run,c_run,...)
+ if trace_testruns then
+ report_disc("test",disc)
+ end
+ local prev,next=getboth(disc)
+ if not next then
+ return
+ end
+ local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
+ local done=false
+ if replace and prev then
+ setlink(replacetail,next)
+ local ok,overflow=t_run(replace,next,...)
+ if ok and overflow then
+ setfield(disc,"replace",nil)
+ setlink(prev,replace)
+ setboth(disc)
+ flush_node_list(disc)
+ return replace,true
+ else
+ setnext(replacetail)
+ setprev(next,disc)
+ end
+ end
+ local renewed=false
+ if pre then
+ sweepnode=disc
+ sweeptype="pre"
+ local new,ok=c_run(pre,...)
+ if ok then
+ pre=new
+ renewed=true
+ end
+ end
+ if post then
+ sweepnode=disc
+ sweeptype="post"
+ local new,ok=c_run(post,...)
+ if ok then
+ post=new
+ renewed=true
+ end
+ end
+ if replace then
+ sweepnode=disc
+ sweeptype="replace"
+ local new,ok=c_run(replace,...)
+ if ok then
+ replace=new
+ renewed=true
+ end
+ end
+ sweepnode=nil
+ sweeptype=nil
+ if renewed then
+ setdisc(disc,pre,post,replace)
+ return next,true
+ else
+ return next,done
+ end
+end
+local nesting=0
+local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=nil
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
+ if ok then
+ done=true
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_single(start,stop,font,attr,lookupcache)
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
+ if not a or (a==attr) then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=getnext(start)
+ local l=nil
+ local d=0
+ while s do
+ if s==stop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ l=lg
+ s=getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true,d>1
+ end
+ end
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ end
+end
+local function k_run_single(sub,injection,last,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ local a=getattr(sub,0)
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(sub,n,dataset,sequence,lookupmatch,rlmode,step,1,injection)
+ if ok then
+ return true
+ end
+ end
+ end
+ end
+ end
+end
+local function c_run_multiple(head,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local done=false
+ local sweep=sweephead[head]
+ if sweep then
+ start=sweep
+ sweephead[head]=nil
+ else
+ start=head
+ end
+ while start do
+ local char=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ done=true
+ break
+ elseif not start then
+ break
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ if start then
+ start=getnext(start)
+ end
+ else
+ start=getnext(start)
+ end
+ elseif char==false then
+ return head,done
+ elseif sweep then
+ return head,done
+ else
+ start=getnext(start)
+ end
+ end
+ return head,done
+end
+local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
+ while start~=stop do
+ local char=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local s=getnext(start)
+ local l=nil
+ local d=0
+ while s do
+ if s==stop then
+ d=1
+ elseif d>0 then
+ d=d+1
+ end
+ local lg=lookupmatch[getchar(s)]
+ if lg then
+ l=lg
+ s=getnext(s)
+ else
+ break
+ end
+ end
+ if l and l.ligature then
+ return true,d>1
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ end
+ start=getnext(start)
+ else
+ break
+ end
+ end
+end
+local function k_run_multiple(sub,injection,last,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ local a=getattr(sub,0)
+ if not a or (a==attr) then
+ for n in traverse_nodes(sub) do
+ if n==last then
+ break
+ end
+ local char=ischar(n)
+ if char then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local h,d,ok=handler(head,n,dataset,sequence,lookupmatch,step,rlmode,i,injection)
+ if ok then
+ return true
+ end
+ end
+ else
+ report_missing_coverage(dataset,sequence)
+ end
+ end
+ end
+ end
+ end
+end
+local function txtdirstate(start,stack,top,rlparmode)
+ local dir=getfield(start,"dir")
+ local new=1
+ if dir=="+TRT" then
+ top=top+1
+ stack[top]=dir
+ new=-1
+ elseif dir=="+TLT" then
+ top=top+1
+ stack[top]=dir
+ elseif dir=="-TRT" or dir=="-TLT" then
+ top=top-1
+ if stack[top]=="+TRT" then
+ new=-1
+ end
+ else
+ new=rlparmode
+ end
+ if trace_directions then
+ report_process("directions after txtdir %a: parmode %a, txtmode %a, level %a",dir,mref(rlparmode),mref(new),topstack)
+ end
+ return getnext(start),top,new
+end
+local function pardirstate(start)
+ local dir=getfield(start,"dir")
+ local new=0
+ if dir=="TLT" then
+ new=1
+ elseif dir=="TRT" then
+ new=-1
+ end
+ if trace_directions then
+ report_process("directions after pardir %a: parmode %a",dir,mref(new))
+ end
+ return getnext(start),new,new
+end
local function featuresprocessor(head,font,attr)
- local lookuphash=lookuphashes[font]
- if not lookuphash then
+ local sequences=sequencelists[font]
+ if not sequencelists then
+ return head,false
+ end
+ nesting=nesting+1
+ if nesting==1 then
+ currentfont=font
+ tfmdata=fontdata[font]
+ descriptions=tfmdata.descriptions
+ characters=tfmdata.characters
+ marks=tfmdata.resources.marks
+ factor=tfmdata.parameters.factor
+ threshold=tfmdata.parameters.spacing.width or 65536*10
+ elseif currentfont~=font then
+ report_warning("nested call with a different font, level %s, quitting",nesting)
+ nesting=nesting-1
return head,false
end
head=tonut(head)
if trace_steps then
checkstep(head)
end
- tfmdata=fontdata[font]
- descriptions=tfmdata.descriptions
- characters=tfmdata.characters
- resources=tfmdata.resources
- marks=resources.marks
- anchorlookups=resources.lookup_to_anchor
- lookuptable=resources.lookups
- lookuptypes=resources.lookuptypes
- lookuptags=resources.lookuptags
- currentfont=font
- rlmode=0
- local sequences=resources.sequences
+ local rlmode=0
local done=false
local datasets=otf.dataset(tfmdata,font,attr)
- local dirstack={}
+ local dirstack={}
+ sweephead={}
for s=1,#datasets do
local dataset=datasets[s]
- featurevalue=dataset[1]
- local sequence=dataset[5]
+ local attribute=dataset[2]
+ local sequence=dataset[3]
local rlparmode=0
local topstack=0
local success=false
- local attribute=dataset[2]
- local chain=dataset[3]
local typ=sequence.type
- local subtables=sequence.subtables
- if chain<0 then
- local handler=handlers[typ]
- local start=find_node_tail(head)
+ local gpossing=typ=="gpos_single" or typ=="gpos_pair"
+ local handler=handlers[typ]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ if not steps then
+ local h,d,ok=handler(head,start,dataset,sequence,nil,nil,nil,0,font,attr)
+ if ok then
+ success=true
+ if h then
+ head=h
+ end
+ if d then
+ start=d
+ end
+ end
+ elseif typ=="gsub_reversecontextchain" then
+ local start=find_node_tail(head)
while start do
- local id=getid(start)
- if id==glyph_code then
- if getfont(start)==font and getsubtype(start)<256 then
- local a=getattr(start,0)
- if a then
- a=a==attr
- else
- a=true
- end
- if a then
- for i=1,#subtables do
- local lookupname=subtables[i]
- local lookupcache=lookuphash[lookupname]
- if lookupcache then
- local lookupmatch=lookupcache[getchar(start)]
- if lookupmatch then
- head,start,success=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if success then
- break
- end
+ local char=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
+ if not a or (a==attr) then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
+ if lookupcache then
+ local lookupmatch=lookupcache[char]
+ if lookupmatch then
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
+ if ok then
+ success=true
+ break
end
- else
- report_missing_cache(typ,lookupname)
end
+ else
+ report_missing_coverage(dataset,sequence)
end
- if start then start=getprev(start) end
- else
+ end
+ if start then
start=getprev(start)
end
else
@@ -13055,340 +21113,119 @@ local function featuresprocessor(head,font,attr)
end
end
else
- local handler=handlers[typ]
- local ns=#subtables
local start=head
rlmode=0
- if ns==1 then
- local lookupname=subtables[1]
- local lookupcache=lookuphash[lookupname]
- if not lookupcache then
- report_missing_cache(typ,lookupname)
+ if nofsteps==1 then
+ local step=steps[1]
+ local lookupcache=step.coverage
+ if not lookupcache then
+ report_missing_coverage(dataset,sequence)
else
- local function subrun(start)
- local head=start
- local done=false
- while start do
- local id=getid(start)
- if id==glyph_code and getfont(start)==font and getsubtype(start)<256 then
- local a=getattr(start,0)
- if a then
- a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
- else
- a=not attribute or getprop(start,a_state)==attribute
- end
- if a then
- local lookupmatch=lookupcache[getchar(start)]
- if lookupmatch then
- local ok
- head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
- if ok then
- done=true
- end
- end
- if start then start=getnext(start) end
- else
- start=getnext(start)
- end
- else
- start=getnext(start)
- end
- end
- if done then
- success=true
- return head
- end
- end
- local function kerndisc(disc)
- local prev=getprev(disc)
- local next=getnext(disc)
- if prev and next then
- setfield(prev,"next",next)
- local a=getattr(prev,0)
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
if a then
- a=(a==attr) and (not attribute or getprop(prev,a_state)==attribute)
+ a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
else
- a=not attribute or getprop(prev,a_state)==attribute
+ a=not attribute or getprop(start,a_state)==attribute
end
if a then
- local lookupmatch=lookupcache[getchar(prev)]
+ local lookupmatch=lookupcache[char]
if lookupmatch then
- local h,d,ok=handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,1)
if ok then
- done=true
success=true
end
end
- end
- setfield(prev,"next",disc)
- end
- return next
- end
- while start do
- local id=getid(start)
- if id==glyph_code then
- if getfont(start)==font and getsubtype(start)<256 then
- local a=getattr(start,0)
- if a then
- a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
- else
- a=not attribute or getprop(start,a_state)==attribute
- end
- if a then
- local lookupmatch=lookupcache[getchar(start)]
- if lookupmatch then
- local ok
- head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
- if ok then
- success=true
- end
- end
- if start then start=getnext(start) end
- else
+ if start then
start=getnext(start)
end
else
start=getnext(start)
end
+ elseif char==false then
+ start=getnext(start)
elseif id==disc_code then
- if getsubtype(start)==discretionary_code then
- local pre=getfield(start,"pre")
- if pre then
- local new=subrun(pre)
- if new then setfield(start,"pre",new) end
- end
- local post=getfield(start,"post")
- if post then
- local new=subrun(post)
- if new then setfield(start,"post",new) end
- end
- local replace=getfield(start,"replace")
- if replace then
- local new=subrun(replace)
- if new then setfield(start,"replace",new) end
- end
-elseif typ=="gpos_single" or typ=="gpos_pair" then
- kerndisc(start)
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,handler)
end
- start=getnext(start)
- elseif id==whatsit_code then
- local subtype=getsubtype(start)
- if subtype==dir_code then
- local dir=getfield(start,"dir")
- if dir=="+TRT" or dir=="+TLT" then
- topstack=topstack+1
- dirstack[topstack]=dir
- elseif dir=="-TRT" or dir=="-TLT" then
- topstack=topstack-1
- end
- local newdir=dirstack[topstack]
- if newdir=="+TRT" then
- rlmode=-1
- elseif newdir=="+TLT" then
- rlmode=1
- else
- rlmode=rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype==localpar_code then
- local dir=getfield(start,"dir")
- if dir=="TRT" then
- rlparmode=-1
- elseif dir=="TLT" then
- rlparmode=1
- else
- rlparmode=0
- end
- rlmode=rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
+ if ok then
+ success=true
end
- start=getnext(start)
elseif id==math_code then
start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
else
start=getnext(start)
end
end
end
else
- local function subrun(start)
- local head=start
- local done=false
- while start do
- local id=getid(start)
- if id==glyph_code and getfont(start)==font and getsubtype(start)<256 then
- local a=getattr(start,0)
- if a then
- a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
- else
- a=not attribute or getprop(start,a_state)==attribute
- end
- if a then
- for i=1,ns do
- local lookupname=subtables[i]
- local lookupcache=lookuphash[lookupname]
- if lookupcache then
- local lookupmatch=lookupcache[getchar(start)]
- if lookupmatch then
- local ok
- head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if ok then
- done=true
- break
- elseif not start then
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- if start then start=getnext(start) end
- else
- start=getnext(start)
- end
- else
- start=getnext(start)
- end
- end
- if done then
- success=true
- return head
- end
- end
- local function kerndisc(disc)
- local prev=getprev(disc)
- local next=getnext(disc)
- if prev and next then
- setfield(prev,"next",next)
- local a=getattr(prev,0)
+ while start do
+ local char,id=ischar(start,font)
+ if char then
+ local a=getattr(start,0)
if a then
- a=(a==attr) and (not attribute or getprop(prev,a_state)==attribute)
+ a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
else
- a=not attribute or getprop(prev,a_state)==attribute
+ a=not attribute or getprop(start,a_state)==attribute
end
if a then
- for i=1,ns do
- local lookupname=subtables[i]
- local lookupcache=lookuphash[lookupname]
+ for i=1,nofsteps do
+ local step=steps[i]
+ local lookupcache=step.coverage
if lookupcache then
- local lookupmatch=lookupcache[getchar(prev)]
+ local lookupmatch=lookupcache[char]
if lookupmatch then
- local h,d,ok=handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
+ local ok
+ head,start,ok=handler(head,start,dataset,sequence,lookupmatch,rlmode,step,i)
if ok then
- done=true
+ success=true
+ break
+ elseif not start then
break
end
end
else
- report_missing_cache(typ,lookupname)
+ report_missing_coverage(dataset,sequence)
end
end
- end
- setfield(prev,"next",disc)
- end
- return next
- end
- while start do
- local id=getid(start)
- if id==glyph_code then
- if getfont(start)==font and getsubtype(start)<256 then
- local a=getattr(start,0)
- if a then
- a=(a==attr) and (not attribute or getprop(start,a_state)==attribute)
- else
- a=not attribute or getprop(start,a_state)==attribute
- end
- if a then
- for i=1,ns do
- local lookupname=subtables[i]
- local lookupcache=lookuphash[lookupname]
- if lookupcache then
- local lookupmatch=lookupcache[getchar(start)]
- if lookupmatch then
- local ok
- head,start,ok=handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if ok then
- success=true
- break
- elseif not start then
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- if start then start=getnext(start) end
- else
+ if start then
start=getnext(start)
end
else
start=getnext(start)
end
+ elseif char==false then
+ start=getnext(start)
elseif id==disc_code then
- if getsubtype(start)==discretionary_code then
- local pre=getfield(start,"pre")
- if pre then
- local new=subrun(pre)
- if new then setfield(start,"pre",new) end
- end
- local post=getfield(start,"post")
- if post then
- local new=subrun(post)
- if new then setfield(start,"post",new) end
- end
- local replace=getfield(start,"replace")
- if replace then
- local new=subrun(replace)
- if new then setfield(start,"replace",new) end
- end
-elseif typ=="gpos_single" or typ=="gpos_pair" then
- kerndisc(start)
+ local ok
+ if gpossing then
+ start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ elseif typ=="gsub_ligature" then
+ start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
+ else
+ start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,handler)
end
- start=getnext(start)
- elseif id==whatsit_code then
- local subtype=getsubtype(start)
- if subtype==dir_code then
- local dir=getfield(start,"dir")
- if dir=="+TRT" or dir=="+TLT" then
- topstack=topstack+1
- dirstack[topstack]=dir
- elseif dir=="-TRT" or dir=="-TLT" then
- topstack=topstack-1
- end
- local newdir=dirstack[topstack]
- if newdir=="+TRT" then
- rlmode=-1
- elseif newdir=="+TLT" then
- rlmode=1
- else
- rlmode=rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype==localpar_code then
- local dir=getfield(start,"dir")
- if dir=="TRT" then
- rlparmode=-1
- elseif dir=="TLT" then
- rlparmode=1
- else
- rlparmode=0
- end
- rlmode=rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
+ if ok then
+ success=true
end
- start=getnext(start)
elseif id==math_code then
start=getnext(end_of_math(start))
+ elseif id==dir_code then
+ start,topstack,rlmode=txtdirstate(start,dirstack,topstack,rlparmode)
+ elseif id==localpar_code then
+ start,rlparmode,rlmode=pardirstate(start)
else
start=getnext(start)
end
@@ -13402,1087 +21239,2147 @@ elseif typ=="gpos_single" or typ=="gpos_pair" then
registerstep(head)
end
end
+ nesting=nesting-1
head=tonode(head)
return head,done
end
-local function generic(lookupdata,lookupname,unicode,lookuphash)
- local target=lookuphash[lookupname]
- if target then
- target[unicode]=lookupdata
- else
- lookuphash[lookupname]={ [unicode]=lookupdata }
- end
+local function featuresinitializer(tfmdata,value)
end
-local action={
- substitution=generic,
- multiple=generic,
- alternate=generic,
- position=generic,
- ligature=function(lookupdata,lookupname,unicode,lookuphash)
- local target=lookuphash[lookupname]
- if not target then
- target={}
- lookuphash[lookupname]=target
- end
- for i=1,#lookupdata do
- local li=lookupdata[i]
- local tu=target[li]
- if not tu then
- tu={}
- target[li]=tu
- end
- target=tu
- end
- target.ligature=unicode
- end,
- pair=function(lookupdata,lookupname,unicode,lookuphash)
- local target=lookuphash[lookupname]
- if not target then
- target={}
- lookuphash[lookupname]=target
- end
- local others=target[unicode]
- local paired=lookupdata[1]
- if others then
- others[paired]=lookupdata
- else
- others={ [paired]=lookupdata }
- target[unicode]=others
- end
- end,
+registerotffeature {
+ name="features",
+ description="features",
+ default=true,
+ initializers={
+ position=1,
+ node=featuresinitializer,
+ },
+ processors={
+ node=featuresprocessor,
+ }
}
-local function prepare_lookups(tfmdata)
- local rawdata=tfmdata.shared.rawdata
- local resources=rawdata.resources
- local lookuphash=resources.lookuphash
- local anchor_to_lookup=resources.anchor_to_lookup
- local lookup_to_anchor=resources.lookup_to_anchor
- local lookuptypes=resources.lookuptypes
- local characters=tfmdata.characters
- local descriptions=tfmdata.descriptions
- for unicode,character in next,characters do
- local description=descriptions[unicode]
- if description then
- local lookups=description.slookups
- if lookups then
- for lookupname,lookupdata in next,lookups do
- action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash)
- end
- end
- local lookups=description.mlookups
- if lookups then
- for lookupname,lookuplist in next,lookups do
- local lookuptype=lookuptypes[lookupname]
- for l=1,#lookuplist do
- local lookupdata=lookuplist[l]
- action[lookuptype](lookupdata,lookupname,unicode,lookuphash)
- end
- end
- end
- local list=description.kerns
- if list then
- for lookup,krn in next,list do
- local target=lookuphash[lookup]
- if target then
- target[unicode]=krn
- else
- lookuphash[lookup]={ [unicode]=krn }
- end
- end
- end
- local list=description.anchors
- if list then
- for typ,anchors in next,list do
- if typ=="mark" or typ=="cexit" then
- for name,anchor in next,anchors do
- local lookups=anchor_to_lookup[name]
- if lookups then
- for lookup,_ in next,lookups do
- local target=lookuphash[lookup]
- if target then
- target[unicode]=anchors
- else
- lookuphash[lookup]={ [unicode]=anchors }
- end
- end
- end
+otf.handlers=handlers
+local setspacekerns=nodes.injections.setspacekerns if not setspacekerns then os.exit() end
+function otf.handlers.trigger_space_kerns(head,start,dataset,sequence,_,_,_,_,font,attr)
+ setspacekerns(font,sequence)
+ return head,start,true
+end
+local function hasspacekerns(data)
+ local sequences=data.resources.sequences
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps and sequence.features.kern then
+ for i=1,#steps do
+ local coverage=steps[i].coverage
+ if not coverage then
+ elseif coverage[32] then
+ return true
+ else
+ for k,v in next,coverage do
+ if v[32] then
+ return true
end
end
end
end
end
end
+ return false
end
-local function split(replacement,original)
- local result={}
- for i=1,#replacement do
- result[original[i]]=replacement[i]
+otf.readers.registerextender {
+ name="spacekerns",
+ action=function(data)
+ data.properties.hasspacekerns=hasspacekerns(data)
end
- return result
-end
-local valid={
- coverage={ chainsub=true,chainpos=true,contextsub=true },
- reversecoverage={ reversesub=true },
- glyphs={ chainsub=true,chainpos=true },
}
-local function prepare_contextchains(tfmdata)
- local rawdata=tfmdata.shared.rawdata
- local resources=rawdata.resources
- local lookuphash=resources.lookuphash
- local lookuptags=resources.lookuptags
- local lookups=rawdata.lookups
- if lookups then
- for lookupname,lookupdata in next,rawdata.lookups do
- local lookuptype=lookupdata.type
- if lookuptype then
- local rules=lookupdata.rules
- if rules then
- local format=lookupdata.format
- local validformat=valid[format]
- if not validformat then
- report_prepare("unsupported format %a",format)
- elseif not validformat[lookuptype] then
- report_prepare("unsupported format %a, lookuptype %a, lookupname %a",format,lookuptype,lookuptags[lookupname])
- else
- local contexts=lookuphash[lookupname]
- if not contexts then
- contexts={}
- lookuphash[lookupname]=contexts
- end
- local t,nt={},0
- for nofrules=1,#rules do
- local rule=rules[nofrules]
- local current=rule.current
- local before=rule.before
- local after=rule.after
- local replacements=rule.replacements
- local sequence={}
- local nofsequences=0
- if before then
- for n=1,#before do
- nofsequences=nofsequences+1
- sequence[nofsequences]=before[n]
- end
- end
- local start=nofsequences+1
- for n=1,#current do
- nofsequences=nofsequences+1
- sequence[nofsequences]=current[n]
- end
- local stop=nofsequences
- if after then
- for n=1,#after do
- nofsequences=nofsequences+1
- sequence[nofsequences]=after[n]
+local function spaceinitializer(tfmdata,value)
+ local resources=tfmdata.resources
+ local spacekerns=resources and resources.spacekerns
+ if spacekerns==nil then
+ local properties=tfmdata.properties
+ if properties and properties.hasspacekerns then
+ local sequences=resources.sequences
+ local left={}
+ local right={}
+ local last=0
+ local feat=nil
+ for i=1,#sequences do
+ local sequence=sequences[i]
+ local steps=sequence.steps
+ if steps then
+ local kern=sequence.features.kern
+ if kern then
+ feat=feat or kern
+ for i=1,#steps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local kerns=coverage[32]
+ if kerns then
+ for k,v in next,kerns do
+ if type(v)=="table" then
+ right[k]=v[3]
+ else
+ right[k]=v
+ end
+ end
end
- end
- if sequence[1] then
- nt=nt+1
- t[nt]={ nofrules,lookuptype,sequence,start,stop,rule.lookups,replacements }
- for unic,_ in next,sequence[start] do
- local cu=contexts[unic]
- if not cu then
- contexts[unic]=t
+ for k,v in next,coverage do
+ local kern=v[32]
+ if kern then
+ if type(kern)=="table" then
+ left[k]=kern[3]
+ else
+ left[k]=kern
+ end
end
end
end
end
+ last=i
end
else
end
- else
- report_prepare("missing lookuptype for lookupname %a",lookuptags[lookupname])
end
- end
- end
-end
-local function featuresinitializer(tfmdata,value)
- if true then
- local rawdata=tfmdata.shared.rawdata
- local properties=rawdata.properties
- if not properties.initialized then
- local starttime=trace_preparing and os.clock()
- local resources=rawdata.resources
- resources.lookuphash=resources.lookuphash or {}
- prepare_contextchains(tfmdata)
- prepare_lookups(tfmdata)
- properties.initialized=true
- if trace_preparing then
- report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,tfmdata.properties.fullname)
+ left=next(left) and left or false
+ right=next(right) and right or false
+ if left or right then
+ spacekerns={
+ left=left,
+ right=right,
+ }
+ if last>0 then
+ local triggersequence={
+ features={ kern=feat or { dflt={ dflt=true,} } },
+ flags=noflags,
+ name="trigger_space_kerns",
+ order={ "kern" },
+ type="trigger_space_kerns",
+ left=left,
+ right=right,
+ }
+ insert(sequences,last,triggersequence)
+ end
+ else
+ spacekerns=false
end
+ else
+ spacekerns=false
end
+ resources.spacekerns=spacekerns
end
+ return spacekerns
end
registerotffeature {
- name="features",
- description="features",
+ name="spacekern",
+ description="space kern injection",
default=true,
initializers={
- position=1,
- node=featuresinitializer,
+ node=spaceinitializer,
},
- processors={
- node=featuresprocessor,
- }
}
-otf.handlers=handlers
end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['font-otp']={
+if not modules then modules={} end modules ['font-osd']={
version=1.001,
- comment="companion to font-otf.lua (packing)",
- author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright="PRAGMA ADE / ConTeXt Development Team",
+ comment="companion to font-ini.mkiv",
+ author="Kai Eigner, TAT Zetwerk / Hans Hagen, PRAGMA ADE",
+ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
+local insert,imerge,copy=table.insert,table.imerge,table.copy
local next,type=next,type
-local sort,concat=table.sort,table.concat
-local sortedhash=table.sortedhash
-local trace_packing=false trackers.register("otf.packing",function(v) trace_packing=v end)
-local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
-local report_otf=logs.reporter("fonts","otf loading")
-fonts=fonts or {}
-local handlers=fonts.handlers or {}
-fonts.handlers=handlers
-local otf=handlers.otf or {}
-handlers.otf=otf
-local enhancers=otf.enhancers or {}
-otf.enhancers=enhancers
-local glists=otf.glists or { "gsub","gpos" }
-otf.glists=glists
-local criterium=1
-local threshold=0
-local function tabstr_normal(t)
- local s={}
- local n=0
- for k,v in next,t do
- n=n+1
- if type(v)=="table" then
- s[n]=k..">"..tabstr_normal(v)
- elseif v==true then
- s[n]=k.."+"
- elseif v then
- s[n]=k.."="..v
- else
- s[n]=k.."-"
- end
- end
- if n==0 then
- return ""
- elseif n==1 then
- return s[1]
- else
- sort(s)
- return concat(s,",")
- end
-end
-local function tabstr_flat(t)
- local s={}
- local n=0
- for k,v in next,t do
- n=n+1
- s[n]=k.."="..v
+local report_devanagari=logs.reporter("otf","devanagari")
+fonts=fonts or {}
+fonts.analyzers=fonts.analyzers or {}
+fonts.analyzers.methods=fonts.analyzers.methods or { node={ otf={} } }
+local otf=fonts.handlers.otf
+local nodecodes=nodes.nodecodes
+local glyph_code=nodecodes.glyph
+local handlers=otf.handlers
+local methods=fonts.analyzers.methods
+local otffeatures=fonts.constructors.newfeatures("otf")
+local registerotffeature=otffeatures.register
+local nuts=nodes.nuts
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getnext=nuts.getnext
+local getprev=nuts.getprev
+local getboth=nuts.getboth
+local getid=nuts.getid
+local getchar=nuts.getchar
+local getfont=nuts.getfont
+local getsubtype=nuts.getsubtype
+local setlink=nuts.setlink
+local setnext=nuts.setnext
+local setprev=nuts.setprev
+local setchar=nuts.setchar
+local getprop=nuts.getprop
+local setprop=nuts.setprop
+local ischar=nuts.is_char
+local insert_node_after=nuts.insert_after
+local copy_node=nuts.copy
+local free_node=nuts.free
+local remove_node=nuts.remove
+local flush_list=nuts.flush_list
+local copyinjection=nodes.injections.copy
+local unsetvalue=attributes.unsetvalue
+local fontdata=fonts.hashes.identifiers
+local a_state=attributes.private('state')
+local a_syllabe=attributes.private('syllabe')
+local dotted_circle=0x25CC
+local states=fonts.analyzers.states
+local s_rphf=states.rphf
+local s_half=states.half
+local s_pref=states.pref
+local s_blwf=states.blwf
+local s_pstf=states.pstf
+local replace_all_nbsp=nil
+replace_all_nbsp=function(head)
+ replace_all_nbsp=typesetters and typesetters.characters and typesetters.characters.replacenbspaces or function(head)
+ return head
+ end
+ return replace_all_nbsp(head)
+end
+local xprocesscharacters=nil
+if context then
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.characters
+ return xprocesscharacters(head,font)
end
- if n==0 then
- return ""
- elseif n==1 then
- return s[1]
- else
- sort(s)
- return concat(s,",")
+else
+ xprocesscharacters=function(head,font)
+ xprocesscharacters=nodes.handlers.nodepass
+ return xprocesscharacters(head,font)
+ end
+end
+local function processcharacters(head,font)
+ return tonut(xprocesscharacters(tonode(head)))
+end
+local consonant={
+ [0x0915]=true,[0x0916]=true,[0x0917]=true,[0x0918]=true,
+ [0x0919]=true,[0x091A]=true,[0x091B]=true,[0x091C]=true,
+ [0x091D]=true,[0x091E]=true,[0x091F]=true,[0x0920]=true,
+ [0x0921]=true,[0x0922]=true,[0x0923]=true,[0x0924]=true,
+ [0x0925]=true,[0x0926]=true,[0x0927]=true,[0x0928]=true,
+ [0x0929]=true,[0x092A]=true,[0x092B]=true,[0x092C]=true,
+ [0x092D]=true,[0x092E]=true,[0x092F]=true,[0x0930]=true,
+ [0x0931]=true,[0x0932]=true,[0x0933]=true,[0x0934]=true,
+ [0x0935]=true,[0x0936]=true,[0x0937]=true,[0x0938]=true,
+ [0x0939]=true,[0x0958]=true,[0x0959]=true,[0x095A]=true,
+ [0x095B]=true,[0x095C]=true,[0x095D]=true,[0x095E]=true,
+ [0x095F]=true,[0x0979]=true,[0x097A]=true,
+ [0x0C95]=true,[0x0C96]=true,[0x0C97]=true,[0x0C98]=true,
+ [0x0C99]=true,[0x0C9A]=true,[0x0C9B]=true,[0x0C9C]=true,
+ [0x0C9D]=true,[0x0C9E]=true,[0x0C9F]=true,[0x0CA0]=true,
+ [0x0CA1]=true,[0x0CA2]=true,[0x0CA3]=true,[0x0CA4]=true,
+ [0x0CA5]=true,[0x0CA6]=true,[0x0CA7]=true,[0x0CA8]=true,
+ [0x0CA9]=true,[0x0CAA]=true,[0x0CAB]=true,[0x0CAC]=true,
+ [0x0CAD]=true,[0x0CAE]=true,[0x0CAF]=true,[0x0CB0]=true,
+ [0x0CB1]=true,[0x0CB2]=true,[0x0CB3]=true,[0x0CB4]=true,
+ [0x0CB5]=true,[0x0CB6]=true,[0x0CB7]=true,[0x0CB8]=true,
+ [0x0CB9]=true,
+ [0x0CDE]=true,
+ [0x0D15]=true,[0x0D16]=true,[0x0D17]=true,[0x0D18]=true,
+ [0x0D19]=true,[0x0D1A]=true,[0x0D1B]=true,[0x0D1C]=true,
+ [0x0D1D]=true,[0x0D1E]=true,[0x0D1F]=true,[0x0D20]=true,
+ [0x0D21]=true,[0x0D22]=true,[0x0D23]=true,[0x0D24]=true,
+ [0x0D25]=true,[0x0D26]=true,[0x0D27]=true,[0x0D28]=true,
+ [0x0D29]=true,[0x0D2A]=true,[0x0D2B]=true,[0x0D2C]=true,
+ [0x0D2D]=true,[0x0D2E]=true,[0x0D2F]=true,[0x0D30]=true,
+ [0x0D31]=true,[0x0D32]=true,[0x0D33]=true,[0x0D34]=true,
+ [0x0D35]=true,[0x0D36]=true,[0x0D37]=true,[0x0D38]=true,
+ [0x0D39]=true,[0x0D3A]=true,
+}
+local independent_vowel={
+ [0x0904]=true,[0x0905]=true,[0x0906]=true,[0x0907]=true,
+ [0x0908]=true,[0x0909]=true,[0x090A]=true,[0x090B]=true,
+ [0x090C]=true,[0x090D]=true,[0x090E]=true,[0x090F]=true,
+ [0x0910]=true,[0x0911]=true,[0x0912]=true,[0x0913]=true,
+ [0x0914]=true,[0x0960]=true,[0x0961]=true,[0x0972]=true,
+ [0x0973]=true,[0x0974]=true,[0x0975]=true,[0x0976]=true,
+ [0x0977]=true,
+ [0x0C85]=true,[0x0C86]=true,[0x0C87]=true,[0x0C88]=true,
+ [0x0C89]=true,[0x0C8A]=true,[0x0C8B]=true,[0x0C8C]=true,
+ [0x0C8D]=true,[0x0C8E]=true,[0x0C8F]=true,[0x0C90]=true,
+ [0x0C91]=true,[0x0C92]=true,[0x0C93]=true,[0x0C94]=true,
+ [0x0D05]=true,[0x0D06]=true,[0x0D07]=true,[0x0D08]=true,
+ [0x0D09]=true,[0x0D0A]=true,[0x0D0B]=true,[0x0D0C]=true,
+ [0x0D0E]=true,[0x0D0F]=true,[0x0D10]=true,[0x0D12]=true,
+ [0x0D13]=true,[0x0D14]=true,
+}
+local dependent_vowel={
+ [0x093A]=true,[0x093B]=true,[0x093E]=true,[0x093F]=true,
+ [0x0940]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x0945]=true,[0x0946]=true,[0x0947]=true,
+ [0x0948]=true,[0x0949]=true,[0x094A]=true,[0x094B]=true,
+ [0x094C]=true,[0x094E]=true,[0x094F]=true,[0x0955]=true,
+ [0x0956]=true,[0x0957]=true,[0x0962]=true,[0x0963]=true,
+ [0x0CBE]=true,[0x0CBF]=true,[0x0CC0]=true,[0x0CC1]=true,
+ [0x0CC2]=true,[0x0CC3]=true,[0x0CC4]=true,[0x0CC5]=true,
+ [0x0CC6]=true,[0x0CC7]=true,[0x0CC8]=true,[0x0CC9]=true,
+ [0x0CCA]=true,[0x0CCB]=true,[0x0CCC]=true,
+ [0x0D3E]=true,[0x0D3F]=true,[0x0D40]=true,[0x0D41]=true,
+ [0x0D42]=true,[0x0D43]=true,[0x0D44]=true,[0x0D46]=true,
+ [0x0D47]=true,[0x0D48]=true,[0x0D4A]=true,[0x0D4B]=true,
+ [0x0D4C]=true,[0x0D57]=true,
+}
+local vowel_modifier={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x0903]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D02]=true,[0x0D03]=true,
+}
+local stress_tone_mark={
+ [0x0951]=true,[0x0952]=true,[0x0953]=true,[0x0954]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local nukta={
+ [0x093C]=true,
+ [0x0CBC]=true,
+}
+local halant={
+ [0x094D]=true,
+ [0x0CCD]=true,
+ [0x0D4D]=true,
+}
+local ra={
+ [0x0930]=true,
+ [0x0CB0]=true,
+ [0x0D30]=true,
+}
+local c_anudatta=0x0952
+local c_nbsp=0x00A0
+local c_zwnj=0x200C
+local c_zwj=0x200D
+local zw_char={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local pre_mark={
+ [0x093F]=true,[0x094E]=true,
+ [0x0D46]=true,[0x0D47]=true,[0x0D48]=true,
+}
+local above_mark={
+ [0x0900]=true,[0x0901]=true,[0x0902]=true,[0x093A]=true,
+ [0x0945]=true,[0x0946]=true,[0x0947]=true,[0x0948]=true,
+ [0x0951]=true,[0x0953]=true,[0x0954]=true,[0x0955]=true,
+ [0xA8E0]=true,[0xA8E1]=true,[0xA8E2]=true,[0xA8E3]=true,
+ [0xA8E4]=true,[0xA8E5]=true,[0xA8E6]=true,[0xA8E7]=true,
+ [0xA8E8]=true,[0xA8E9]=true,[0xA8EA]=true,[0xA8EB]=true,
+ [0xA8EC]=true,[0xA8ED]=true,[0xA8EE]=true,[0xA8EF]=true,
+ [0xA8F0]=true,[0xA8F1]=true,
+ [0x0D4E]=true,
+}
+local below_mark={
+ [0x093C]=true,[0x0941]=true,[0x0942]=true,[0x0943]=true,
+ [0x0944]=true,[0x094D]=true,[0x0952]=true,[0x0956]=true,
+ [0x0957]=true,[0x0962]=true,[0x0963]=true,
+}
+local post_mark={
+ [0x0903]=true,[0x093B]=true,[0x093E]=true,[0x0940]=true,
+ [0x0949]=true,[0x094A]=true,[0x094B]=true,[0x094C]=true,
+ [0x094F]=true,
+}
+local twopart_mark={
+ [0x0D4A]={ 0x0D46,0x0D3E,},
+ [0x0D4B]={ 0x0D47,0x0D3E,},
+ [0x0D4C]={ 0x0D46,0x0D57,},
+}
+local mark_four={}
+for k,v in next,pre_mark do mark_four[k]=pre_mark end
+for k,v in next,above_mark do mark_four[k]=above_mark end
+for k,v in next,below_mark do mark_four[k]=below_mark end
+for k,v in next,post_mark do mark_four[k]=post_mark end
+local mark_above_below_post={}
+for k,v in next,above_mark do mark_above_below_post[k]=above_mark end
+for k,v in next,below_mark do mark_above_below_post[k]=below_mark end
+for k,v in next,post_mark do mark_above_below_post[k]=post_mark end
+local reorder_class={
+ [0x0930]="before postscript",
+ [0x093F]="before half",
+ [0x0940]="after subscript",
+ [0x0941]="after subscript",
+ [0x0942]="after subscript",
+ [0x0943]="after subscript",
+ [0x0944]="after subscript",
+ [0x0945]="after subscript",
+ [0x0946]="after subscript",
+ [0x0947]="after subscript",
+ [0x0948]="after subscript",
+ [0x0949]="after subscript",
+ [0x094A]="after subscript",
+ [0x094B]="after subscript",
+ [0x094C]="after subscript",
+ [0x0962]="after subscript",
+ [0x0963]="after subscript",
+ [0x093E]="after subscript",
+ [0x0CB0]="after postscript",
+ [0x0CBF]="before subscript",
+ [0x0CC6]="before subscript",
+ [0x0CCC]="before subscript",
+ [0x0CBE]="before subscript",
+ [0x0CE2]="before subscript",
+ [0x0CE3]="before subscript",
+ [0x0CC1]="before subscript",
+ [0x0CC2]="before subscript",
+ [0x0CC3]="after subscript",
+ [0x0CC4]="after subscript",
+ [0x0CD5]="after subscript",
+ [0x0CD6]="after subscript",
+}
+local dflt_true={
+ dflt=true
+}
+local dev2_defaults={
+ dev2=dflt_true,
+}
+local deva_defaults={
+ dev2=dflt_true,
+ deva=dflt_true,
+}
+local false_flags={ false,false,false,false }
+local both_joiners_true={
+ [0x200C]=true,
+ [0x200D]=true,
+}
+local sequence_reorder_matras={
+ features={ dv01=dev2_defaults },
+ flags=false_flags,
+ name="dv01_reorder_matras",
+ order={ "dv01" },
+ type="devanagari_reorder_matras",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage=pre_mark,
+ }
+ }
+}
+local sequence_reorder_reph={
+ features={ dv02=dev2_defaults },
+ flags=false_flags,
+ name="dv02_reorder_reph",
+ order={ "dv02" },
+ type="devanagari_reorder_reph",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_reorder_pre_base_reordering_consonants={
+ features={ dv03=dev2_defaults },
+ flags=false_flags,
+ name="dv03_reorder_pre_base_reordering_consonants",
+ order={ "dv03" },
+ type="devanagari_reorder_pre_base_reordering_consonants",
+ nofsteps=1,
+ steps={
+ {
+ osdstep=true,
+ coverage={},
+ }
+ }
+}
+local sequence_remove_joiners={
+ features={ dv04=deva_defaults },
+ flags=false_flags,
+ name="dv04_remove_joiners",
+ order={ "dv04" },
+ type="devanagari_remove_joiners",
+ nofsteps=1,
+ steps={
+ { osdstep=true,
+ coverage=both_joiners_true,
+ },
+ }
+}
+local basic_shaping_forms={
+ nukt=true,
+ akhn=true,
+ rphf=true,
+ pref=true,
+ rkrf=true,
+ blwf=true,
+ half=true,
+ pstf=true,
+ vatu=true,
+ cjct=true,
+}
+local valid={
+ akhn=true,
+ rphf=true,
+ pref=true,
+ half=true,
+ blwf=true,
+ pstf=true,
+ pres=true,
+ blws=true,
+ psts=true,
+}
+local function initializedevanagi(tfmdata)
+ local script,language=otf.scriptandlanguage(tfmdata,attr)
+ if script=="deva" or script=="dev2" or script=="mlym" or script=="mlm2" then
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ if not devanagari then
+ report_devanagari("adding devanagari features to font")
+ local gsubfeatures=resources.features.gsub
+ local sequences=resources.sequences
+ local sharedfeatures=tfmdata.shared.features
+ local lastmatch=0
+ for s=1,#sequences do
+ local features=sequences[s].features
+ if features then
+ for k,v in next,features do
+ if basic_shaping_forms[k] then
+ lastmatch=s
+ end
+ end
+ end
+ end
+ local insertindex=lastmatch+1
+ gsubfeatures["dv01"]=dev2_defaults
+ gsubfeatures["dv02"]=dev2_defaults
+ gsubfeatures["dv03"]=dev2_defaults
+ gsubfeatures["dv04"]=deva_defaults
+ local reorder_pre_base_reordering_consonants=copy(sequence_reorder_pre_base_reordering_consonants)
+ local reorder_reph=copy(sequence_reorder_reph)
+ local reorder_matras=copy(sequence_reorder_matras)
+ local remove_joiners=copy(sequence_remove_joiners)
+ insert(sequences,insertindex,reorder_pre_base_reordering_consonants)
+ insert(sequences,insertindex,reorder_reph)
+ insert(sequences,insertindex,reorder_matras)
+ insert(sequences,insertindex,remove_joiners)
+ local blwfcache={}
+ local seqsubset={}
+ local rephstep={
+ coverage={}
+ }
+ local devanagari={
+ reph=false,
+ vattu=false,
+ blwfcache=blwfcache,
+ seqsubset=seqsubset,
+ reorderreph=rephstep,
+ }
+ reorder_reph.steps={ rephstep }
+ local pre_base_reordering_consonants={}
+ reorder_pre_base_reordering_consonants.steps[1].coverage=pre_base_reordering_consonants
+ resources.devanagari=devanagari
+ for s=1,#sequences do
+ local sequence=sequences[s]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ local features=sequence.features
+ if features["rphf"] then
+ devanagari.reph=true
+ elseif features["blwf"] then
+ devanagari.vattu=true
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,coverage do
+ if not blwfcache[k] then
+ blwfcache[k]=v
+ end
+ end
+ end
+ end
+ end
+ if valid[kind] then
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ local reph=false
+ if step.osdstep then
+ for k,v in next,ra do
+ local r=coverage[k]
+ if r then
+ local h=false
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
+ end
+ end
+ if reph then
+ break
+ end
+ end
+ end
+ else
+ end
+ seqsubset[#seqsubset+1]={ kind,coverage,reph }
+ end
+ end
+ end
+ if kind=="pref" then
+ local sequence=dataset[3]
+ local steps=sequence.steps
+ local nofsteps=sequence.nofsteps
+ for i=1,nofsteps do
+ local step=steps[i]
+ local coverage=step.coverage
+ if coverage then
+ for k,v in next,halant do
+ local h=coverage[k]
+ if h then
+ local found=false
+ for k,v in next,h do
+ found=v and v.ligature
+ if found then
+ pre_base_reordering_consonants[k]=found
+ break
+ end
+ end
+ if found then
+ break
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if script=="deva" then
+ sharedfeatures["dv04"]=true
+ elseif script=="dev2" then
+ sharedfeatures["dv01"]=true
+ sharedfeatures["dv02"]=true
+ sharedfeatures["dv03"]=true
+ sharedfeatures["dv04"]=true
+ elseif script=="mlym" then
+ sharedfeatures["pstf"]=true
+ elseif script=="mlm2" then
+ sharedfeatures["pstf"]=true
+ sharedfeatures["pref"]=true
+ sharedfeatures["dv03"]=true
+ gsubfeatures ["dv03"]=dev2_defaults
+ insert(sequences,insertindex,sequence_reorder_pre_base_reordering_consonants)
+ end
+ end
end
end
-local function tabstr_mixed(t)
- local s={}
- local n=#t
- if n==0 then
- return ""
- elseif n==1 then
- local k=t[1]
- if k==true then
- return "++"
- elseif k==false then
- return "--"
- else
- return tostring(k)
- end
- else
- for i=1,n do
- local k=t[i]
- if k==true then
- s[i]="++"
- elseif k==false then
- s[i]="--"
- else
- s[i]=k
+registerotffeature {
+ name="devanagari",
+ description="inject additional features",
+ default=true,
+ initializers={
+ node=initializedevanagi,
+ },
+}
+local function deva_initialize(font,attr)
+ local tfmdata=fontdata[font]
+ local datasets=otf.dataset(tfmdata,font,attr)
+ local devanagaridata=datasets.devanagari
+ if not devanagaridata then
+ devanagaridata={
+ reph=false,
+ vattu=false,
+ blwfcache={},
+ }
+ datasets.devanagari=devanagaridata
+ local resources=tfmdata.resources
+ local devanagari=resources.devanagari
+ for s=1,#datasets do
+ local dataset=datasets[s]
+ if dataset and dataset[1] then
+ local kind=dataset[4]
+ if kind=="rphf" then
+ devanagaridata.reph=true
+ elseif kind=="blwf" then
+ devanagaridata.vattu=true
+ devanagaridata.blwfcache=devanagari.blwfcache
+ end
end
end
- return concat(s,",")
end
+ return devanagaridata.reph,devanagaridata.vattu,devanagaridata.blwfcache
end
-local function tabstr_boolean(t)
- local s={}
- local n=0
- for k,v in next,t do
- n=n+1
- if v then
- s[n]=k.."+"
+local function deva_reorder(head,start,stop,font,attr,nbspaces)
+ local reph,vattu,blwfcache=deva_initialize(font,attr)
+ local current=start
+ local n=getnext(start)
+ local base=nil
+ local firstcons=nil
+ local lastcons=nil
+ local basefound=false
+ if reph and ra[getchar(start)] and halant[getchar(n)] then
+ if n==stop then
+ return head,stop,nbspaces
+ end
+ if getchar(getnext(n))==c_zwj then
+ current=start
else
- s[n]=k.."-"
+ current=getnext(n)
+ setprop(start,a_state,s_rphf)
end
end
- if n==0 then
- return ""
- elseif n==1 then
- return s[1]
- else
- sort(s)
- return concat(s,",")
- end
-end
-local function packdata(data)
- if data then
- local h,t,c={},{},{}
- local hh,tt,cc={},{},{}
- local nt,ntt=0,0
- local function pack_normal(v)
- local tag=tabstr_normal(v)
- local ht=h[tag]
- if ht then
- c[ht]=c[ht]+1
- return ht
- else
- nt=nt+1
- t[nt]=v
- h[tag]=nt
- c[nt]=1
- return nt
+ if getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ free_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ firstcons=current
+ lastcons=current
+ current=getnext(current)
+ if current~=stop then
+ if nukta[getchar(current)] then
+ current=getnext(current)
+ end
+ if getchar(current)==c_zwj then
+ if current~=stop then
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=next and getnext(next) or nil
+ local changestop=next==stop
+ local tempcurrent=copy_node(next)
+ copyinjection(tempcurrent,next)
+ local nextcurrent=copy_node(current)
+ copyinjection(nextcurrent,current)
+ setlink(tempcurrent,nextcurrent)
+ setprop(tempcurrent,a_state,s_blwf)
+ tempcurrent=processcharacters(tempcurrent,font)
+ setprop(tempcurrent,a_state,unsetvalue)
+ if getchar(next)==getchar(tempcurrent) then
+ flush_list(tempcurrent)
+ local n=copy_node(current)
+ copyinjection(n,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,n)
+ else
+ setchar(current,getchar(tempcurrent))
+ local freenode=getnext(current)
+ setlink(current,tmp)
+ free_node(freenode)
+ flush_list(tempcurrent)
+ if changestop then
+ stop=current
+ end
+ end
+ end
+ end
+ end
end
end
- local function pack_flat(v)
- local tag=tabstr_flat(v)
- local ht=h[tag]
- if ht then
- c[ht]=c[ht]+1
- return ht
- else
- nt=nt+1
- t[nt]=v
- h[tag]=nt
- c[nt]=1
- return nt
+ end
+ while not basefound do
+ local char=getchar(current)
+ if consonant[char] then
+ setprop(current,a_state,s_half)
+ if not firstcons then
+ firstcons=current
end
- end
- local function pack_boolean(v)
- local tag=tabstr_boolean(v)
- local ht=h[tag]
- if ht then
- c[ht]=c[ht]+1
- return ht
+ lastcons=current
+ if not base then
+ base=current
+ elseif blwfcache[char] then
+ setprop(current,a_state,s_blwf)
else
- nt=nt+1
- t[nt]=v
- h[tag]=nt
- c[nt]=1
- return nt
+ base=current
end
end
- local function pack_indexed(v)
- local tag=concat(v," ")
- local ht=h[tag]
- if ht then
- c[ht]=c[ht]+1
- return ht
- else
- nt=nt+1
- t[nt]=v
- h[tag]=nt
- c[nt]=1
- return nt
- end
+ basefound=current==stop
+ current=getnext(current)
+ end
+ if base~=lastcons then
+ local np=base
+ local n=getnext(base)
+ local ch=getchar(n)
+ if nukta[ch] then
+ np=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if halant[ch] then
+ if lastcons~=stop then
+ local ln=getnext(lastcons)
+ if nukta[getchar(ln)] then
+ lastcons=ln
+ end
+ end
+ local nn=getnext(n)
+ local ln=getnext(lastcons)
+ setlink(np,nn)
+ setnext(lastcons,n)
+ if ln then
+ setprev(ln,n)
+ end
+ setnext(n,ln)
+ setprev(n,lastcons)
+ if lastcons==stop then
+ stop=n
+ end
+ end
+ end
+ n=getnext(start)
+ if n~=stop and ra[getchar(start)] and halant[getchar(n)] and not zw_char[getchar(getnext(n))] then
+ local matra=base
+ if base~=stop then
+ local next=getnext(base)
+ if dependent_vowel[getchar(next)] then
+ matra=next
+ end
+ end
+ local sp=getprev(start)
+ local nn=getnext(n)
+ local mn=getnext(matra)
+ setlink(sp,nn)
+ setlink(matra,start)
+ setlink(n,mn)
+ if head==start then
+ head=nn
end
- local function pack_mixed(v)
- local tag=tabstr_mixed(v)
- local ht=h[tag]
- if ht then
- c[ht]=c[ht]+1
- return ht
- else
- nt=nt+1
- t[nt]=v
- h[tag]=nt
- c[nt]=1
- return nt
- end
+ start=nn
+ if matra==stop then
+ stop=n
end
- local function pack_final(v)
- if c[v]<=criterium then
- return t[v]
- else
- local hv=hh[v]
- if hv then
- return hv
- else
- ntt=ntt+1
- tt[ntt]=t[v]
- hh[v]=ntt
- cc[ntt]=c[v]
- return ntt
+ end
+ local current=start
+ while current~=stop do
+ local next=getnext(current)
+ if next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwnj then
+ setprop(current,a_state,unsetvalue)
+ end
+ current=next
+ end
+ if base~=stop and getprop(base,a_state) then
+ local next=getnext(base)
+ if halant[getchar(next)] and not (next~=stop and getchar(getnext(next))==c_zwj) then
+ setprop(base,a_state,unsetvalue)
+ end
+ end
+ local current,allreordered,moved=start,false,{ [base]=true }
+ local a,b,p,bn=base,base,base,getnext(base)
+ if base~=stop and nukta[getchar(bn)] then
+ a,b,p=bn,bn,bn
+ end
+ while not allreordered do
+ local c=current
+ local n=getnext(current)
+ local l=nil
+ if c~=stop then
+ local ch=getchar(n)
+ if nukta[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if halant[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ while c~=stop and dependent_vowel[ch] do
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop then
+ if vowel_modifier[ch] then
+ c=n
+ n=getnext(n)
+ ch=getchar(n)
+ end
+ if c~=stop and stress_tone_mark[ch] then
+ c=n
+ n=getnext(n)
+ end
end
end
end
- local function success(stage,pass)
- if nt==0 then
- if trace_loading or trace_packing then
- report_otf("pack quality: nothing to pack")
+ local bp=getprev(firstcons)
+ local cn=getnext(current)
+ local last=getnext(c)
+ while cn~=last do
+ if pre_mark[getchar(cn)] then
+ if bp then
+ setnext(bp,cn)
end
- return false
- elseif nt>=threshold then
- local one,two,rest=0,0,0
- if pass==1 then
- for k,v in next,c do
- if v==1 then
- one=one+1
- elseif v==2 then
- two=two+1
- else
- rest=rest+1
- end
- end
- else
- for k,v in next,cc do
- if v>20 then
- rest=rest+1
- elseif v>10 then
- two=two+1
- else
- one=one+1
- end
- end
- data.tables=tt
+ local prev,next=getboth(cn)
+ if next then
+ setprev(next,prev)
end
- if trace_loading or trace_packing then
- report_otf("pack quality: stage %s, pass %s, %s packed, 1-10:%s, 11-20:%s, rest:%s (criterium: %s)",stage,pass,one+two+rest,one,two,rest,criterium)
+ setnext(prev,next)
+ if cn==stop then
+ stop=prev
end
- return true
- else
- if trace_loading or trace_packing then
- report_otf("pack quality: stage %s, pass %s, %s packed, aborting pack (threshold: %s)",stage,pass,nt,threshold)
+ setprev(cn,bp)
+ setlink(cn,firstcons)
+ if firstcons==start then
+ if head==start then
+ head=cn
+ end
+ start=cn
end
- return false
- end
- end
- local function packers(pass)
- if pass==1 then
- return pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed
- else
- return pack_final,pack_final,pack_final,pack_final,pack_final
- end
- end
- local resources=data.resources
- local lookuptypes=resources.lookuptypes
- for pass=1,2 do
- if trace_packing then
- report_otf("start packing: stage 1, pass %s",pass)
+ break
end
- local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
- for unicode,description in next,data.descriptions do
- local boundingbox=description.boundingbox
- if boundingbox then
- description.boundingbox=pack_indexed(boundingbox)
- end
- local slookups=description.slookups
- if slookups then
- for tag,slookup in next,slookups do
- local what=lookuptypes[tag]
- if what=="pair" then
- local t=slookup[2] if t then slookup[2]=pack_indexed(t) end
- local t=slookup[3] if t then slookup[3]=pack_indexed(t) end
- elseif what~="substitution" then
- slookups[tag]=pack_indexed(slookup)
- end
+ cn=getnext(cn)
+ end
+ allreordered=c==stop
+ current=getnext(c)
+ end
+ if reph or vattu then
+ local current,cns=start,nil
+ while current~=stop do
+ local c=current
+ local n=getnext(current)
+ if ra[getchar(current)] and halant[getchar(n)] then
+ c=n
+ n=getnext(n)
+ local b,bn=base,base
+ while bn~=stop do
+ local next=getnext(bn)
+ if dependent_vowel[getchar(next)] then
+ b=next
end
+ bn=next
end
- local mlookups=description.mlookups
- if mlookups then
- for tag,mlookup in next,mlookups do
- local what=lookuptypes[tag]
- if what=="pair" then
- for i=1,#mlookup do
- local lookup=mlookup[i]
- local t=lookup[2] if t then lookup[2]=pack_indexed(t) end
- local t=lookup[3] if t then lookup[3]=pack_indexed(t) end
- end
- elseif what~="substitution" then
- for i=1,#mlookup do
- mlookup[i]=pack_indexed(mlookup[i])
+ if getprop(current,a_state)==s_rphf then
+ if b~=current then
+ if current==start then
+ if head==start then
+ head=n
end
+ start=n
+ end
+ if b==stop then
+ stop=c
end
+ local prev=getprev(current)
+ setlink(prev,n)
+ local next=getnext(b)
+ setlink(c,next)
+ setlink(b,current)
end
- end
- local kerns=description.kerns
- if kerns then
- for tag,kern in next,kerns do
- kerns[tag]=pack_flat(kern)
+ elseif cns and getnext(cns)~=current then
+ local cp=getprev(current)
+ local cnsn=getnext(cns)
+ setlink(cp,n)
+ setlink(cns,current)
+ setlink(c,cnsn)
+ if c==stop then
+ stop=cp
+ break
end
+ current=getprev(n)
end
- local math=description.math
- if math then
- local kerns=math.kerns
- if kerns then
- for tag,kern in next,kerns do
- kerns[tag]=pack_normal(kern)
- end
+ else
+ local char=getchar(current)
+ if consonant[char] then
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
end
- end
- local anchors=description.anchors
- if anchors then
- for what,anchor in next,anchors do
- if what=="baselig" then
- for _,a in next,anchor do
- for k=1,#a do
- a[k]=pack_indexed(a[k])
- end
- end
- else
- for k,v in next,anchor do
- anchor[k]=pack_indexed(v)
- end
- end
+ elseif char==c_nbsp then
+ nbspaces=nbspaces+1
+ cns=current
+ local next=getnext(cns)
+ if halant[getchar(next)] then
+ cns=next
end
end
- local altuni=description.altuni
- if altuni then
- for i=1,#altuni do
- altuni[i]=pack_flat(altuni[i])
+ end
+ current=getnext(current)
+ end
+ end
+ if getchar(base)==c_nbsp then
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ free_node(base)
+ end
+ return head,stop,nbspaces
+end
+function handlers.devanagari_reorder_matras(head,start)
+ local current=start
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,startfont)
+ local next=getnext(current)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local char=ischar(next,startfont)
+ if char and zw_char[char] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
end
end
+ local startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
end
- local lookups=data.lookups
- if lookups then
- for _,lookup in next,lookups do
- local rules=lookup.rules
- if rules then
- for i=1,#rules do
- local rule=rules[i]
- local r=rule.before if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
- local r=rule.after if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
- local r=rule.current if r then for i=1,#r do r[i]=pack_boolean(r[i]) end end
- local r=rule.replacements if r then rule.replacements=pack_flat (r) end
- local r=rule.lookups if r then rule.lookups=pack_indexed(r) end
- end
+ end
+ current=next
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_reph(head,start)
+ local current=getnext(start)
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,font)
+ if char and getprop(current,a_syllabe)==startattr then
+ if halant[char] and not getprop(current,a_state) then
+ local next=getnext(current)
+ if next then
+ local nextchar=ischar(next,font)
+ if nextchar and zw_char[nextchar] and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
end
end
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
end
- local anchor_to_lookup=resources.anchor_to_lookup
- if anchor_to_lookup then
- for anchor,lookup in next,anchor_to_lookup do
- anchor_to_lookup[anchor]=pack_normal(lookup)
+ current=getnext(current)
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ while current do
+ local char=ischar(current,font)
+ if char and getprop(current,a_syllabe)==startattr then
+ if getprop(current,a_state)==s_pstf then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local prev=getprev(current)
+ setlink(prev,start)
+ setlink(start,current)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ break
end
+ current=getnext(current)
+ else
+ break
end
- local lookup_to_anchor=resources.lookup_to_anchor
- if lookup_to_anchor then
- for lookup,anchor in next,lookup_to_anchor do
- lookup_to_anchor[lookup]=pack_normal(anchor)
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ local c=nil
+ while current do
+ local char=ischar(current,font)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not c and mark_above_below_post[char] and reorder_class[char]~="after subscript" then
+ c=current
end
+ current=getnext(current)
+ else
+ break
end
- local sequences=resources.sequences
- if sequences then
- for feature,sequence in next,sequences do
- local flags=sequence.flags
- if flags then
- sequence.flags=pack_normal(flags)
- end
- local subtables=sequence.subtables
- if subtables then
- sequence.subtables=pack_normal(subtables)
- end
- local features=sequence.features
- if features then
- for script,feature in next,features do
- features[script]=pack_normal(feature)
+ end
+ if c then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local prev=getprev(c)
+ setlink(prev,start)
+ setlink(start,c)
+ start=startnext
+ startattr=getprop(start,a_syllabe)
+ end
+ end
+ if not startnext then
+ current=start
+ local next=getnext(current)
+ while next do
+ local nextchar=ischar(next,font)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ current=next
+ next=getnext(current)
+ else
+ break
+ end
+ end
+ if start~=current then
+ startnext=getnext(start)
+ head=remove_node(head,start)
+ local next=getnext(current)
+ setlink(start,next)
+ setlink(current,"next",start)
+ start=startnext
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start)
+ local current=start
+ local startnext=nil
+ local startprev=nil
+ local startfont=getfont(start)
+ local startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,font)
+ if char and getprop(current,a_syllabe)==startattr then
+ local next=getnext(current)
+ if halant[char] and not getprop(current,a_state) then
+ if next then
+ local nextchar=ischar(next,font)
+ if nextchar and getprop(next,a_syllabe)==startattr then
+ if nextchar==c_zwnj or nextchar==c_zwj then
+ current=next
+ next=getnext(current)
end
end
- local order=sequence.order
- if order then
- sequence.order=pack_indexed(order)
- end
- local markclass=sequence.markclass
- if markclass then
- sequence.markclass=pack_boolean(markclass)
- end
end
+ startnext=getnext(start)
+ removenode(start,start)
+ setlink(start,next)
+ setlink(current,start)
+ start=startnext
+ break
end
- local lookups=resources.lookups
- if lookups then
- for name,lookup in next,lookups do
- local flags=lookup.flags
- if flags then
- lookup.flags=pack_normal(flags)
- end
- local subtables=lookup.subtables
- if subtables then
- lookup.subtables=pack_normal(subtables)
- end
+ current=next
+ else
+ break
+ end
+ end
+ if not startnext then
+ current=getnext(start)
+ startattr=getprop(start,a_syllabe)
+ while current do
+ local char=ischar(current,font)
+ if char and getprop(current,a_syllabe)==startattr then
+ if not consonant[char] and getprop(current,a_state) then
+ startnext=getnext(start)
+ removenode(start,start)
+ local prev=getprev(current)
+ setlink(start,prev)
+ setlink(start,current)
+ start=startnext
+ break
end
+ current=getnext(current)
+ else
+ break
end
- local features=resources.features
- if features then
- for _,what in next,glists do
- local list=features[what]
- if list then
- for feature,spec in next,list do
- list[feature]=pack_normal(spec)
+ end
+ end
+ return head,start,true
+end
+function handlers.devanagari_remove_joiners(head,start,kind,lookupname,replacement)
+ local stop=getnext(start)
+ local font=getfont(start)
+ local last=start
+ while stop do
+ local char=ischar(stop,font)
+ if char and (char==c_zwnj or char==c_zwj) then
+ last=stop
+ stop=getnext(stop)
+ else
+ break
+ end
+ end
+ local prev=getprev(start)
+ if stop then
+ setnext(last)
+ setlink(prev,stop)
+ elseif prev then
+ setnext(prev)
+ end
+ if head==start then
+ head=stop
+ end
+ flush_list(start)
+ return head,stop,true
+end
+local function dev2_initialize(font,attr)
+ local devanagari=fontdata[font].resources.devanagari
+ if devanagari then
+ return devanagari.seqsubset or {},devanagari.reorderreph or {}
+ else
+ return {},{}
+ end
+end
+local function dev2_reorder(head,start,stop,font,attr,nbspaces)
+ local seqsubset,reorderreph=dev2_initialize(font,attr)
+ local reph=false
+ local halfpos=nil
+ local basepos=nil
+ local subpos=nil
+ local postpos=nil
+ local locl={}
+ for i=1,#seqsubset do
+ local subset=seqsubset[i]
+ local kind=subset[1]
+ local lookupcache=subset[2]
+ if kind=="rphf" then
+ for k,v in next,ra do
+ local r=lookupcache[k]
+ if r then
+ for k,v in next,halant do
+ local h=r[k]
+ if h then
+ reph=h.ligature or false
+ break
end
end
+ if reph then
+ break
+ end
end
end
- if not success(1,pass) then
- return
- end
- end
- if nt>0 then
- for pass=1,2 do
- if trace_packing then
- report_otf("start packing: stage 2, pass %s",pass)
- end
- local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
- for unicode,description in next,data.descriptions do
- local kerns=description.kerns
- if kerns then
- description.kerns=pack_normal(kerns)
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ local afternext=next~=stop and getnext(next)
+ if afternext and zw_char[getchar(afternext)] then
+ current=next
+ current=getnext(current)
+ elseif current==start then
+ setprop(current,a_state,s_rphf)
+ current=next
+ else
+ current=next
+ end
+ end
end
- local math=description.math
- if math then
- local kerns=math.kerns
- if kerns then
- math.kerns=pack_normal(kerns)
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pref" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pref)
+ setprop(next,a_state,s_pref)
+ current=next
end
end
- local anchors=description.anchors
- if anchors then
- description.anchors=pack_normal(anchors)
+ end
+ current=getnext(current)
+ end
+ elseif kind=="half" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ if next~=stop and getchar(getnext(next))==c_zwnj then
+ current=next
+ else
+ setprop(current,a_state,s_half)
+ if not halfpos then
+ halfpos=current
+ end
+ end
+ current=getnext(current)
+ end
end
- local mlookups=description.mlookups
- if mlookups then
- for tag,mlookup in next,mlookups do
- mlookups[tag]=pack_normal(mlookup)
+ end
+ current=getnext(current)
+ end
+ elseif kind=="blwf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_blwf)
+ setprop(next,a_state,s_blwf)
+ current=next
+ subpos=current
end
end
- local altuni=description.altuni
- if altuni then
- description.altuni=pack_normal(altuni)
+ end
+ current=getnext(current)
+ end
+ elseif kind=="pstf" then
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ if current~=stop then
+ local c=locl[current] or getchar(current)
+ local found=lookupcache[c]
+ if found then
+ local next=getnext(current)
+ local n=locl[next] or getchar(next)
+ if found[n] then
+ setprop(current,a_state,s_pstf)
+ setprop(next,a_state,s_pstf)
+ current=next
+ postpos=current
+ end
end
end
- local lookups=data.lookups
- if lookups then
- for _,lookup in next,lookups do
- local rules=lookup.rules
- if rules then
- for i=1,#rules do
- local rule=rules[i]
- local r=rule.before if r then rule.before=pack_normal(r) end
- local r=rule.after if r then rule.after=pack_normal(r) end
- local r=rule.current if r then rule.current=pack_normal(r) end
+ current=getnext(current)
+ end
+ end
+ end
+ reorderreph.coverage={ [reph]=true }
+ local current,base,firstcons=start,nil,nil
+ if getprop(start,a_state)==s_rphf then
+ current=getnext(getnext(start))
+ end
+ if current~=getnext(stop) and getchar(current)==c_nbsp then
+ if current==stop then
+ stop=getprev(stop)
+ head=remove_node(head,current)
+ free_node(current)
+ return head,stop,nbspaces
+ else
+ nbspaces=nbspaces+1
+ base=current
+ current=getnext(current)
+ if current~=stop then
+ local char=getchar(current)
+ if nukta[char] then
+ current=getnext(current)
+ char=getchar(current)
+ end
+ if char==c_zwj then
+ local next=getnext(current)
+ if current~=stop and next~=stop and halant[getchar(next)] then
+ current=next
+ next=getnext(current)
+ local tmp=getnext(next)
+ local changestop=next==stop
+ setnext(next,nil)
+ setprop(current,a_state,s_pref)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_blwf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,s_pstf)
+ current=processcharacters(current,font)
+ setprop(current,a_state,unsetvalue)
+ if halant[getchar(current)] then
+ setnext(getnext(current),tmp)
+ local nc=copy_node(current)
+ copyinjection(nc,current)
+ setchar(current,dotted_circle)
+ head=insert_node_after(head,current,nc)
+ else
+ setnext(current,tmp)
+ if changestop then
+ stop=current
end
end
end
end
- local sequences=resources.sequences
- if sequences then
- for feature,sequence in next,sequences do
- sequence.features=pack_normal(sequence.features)
+ end
+ end
+ else
+ local last=getnext(stop)
+ while current~=last do
+ local next=getnext(current)
+ if consonant[getchar(current)] then
+ if not (current~=stop and next~=stop and halant[getchar(next)] and getchar(getnext(next))==c_zwj) then
+ if not firstcons then
+ firstcons=current
+ end
+ local a=getprop(current,a_state)
+ if not (a==s_pref or a==s_blwf or a==s_pstf) then
+ base=current
end
- end
- if not success(2,pass) then
end
end
- for pass=1,2 do
- local pack_normal,pack_indexed,pack_flat,pack_boolean,pack_mixed=packers(pass)
- for unicode,description in next,data.descriptions do
- local slookups=description.slookups
- if slookups then
- description.slookups=pack_normal(slookups)
+ current=next
+ end
+ if not base then
+ base=firstcons
+ end
+ end
+ if not base then
+ if getprop(start,a_state)==s_rphf then
+ setprop(start,a_state,unsetvalue)
+ end
+ return head,stop,nbspaces
+ else
+ if getprop(base,a_state) then
+ setprop(base,a_state,unsetvalue)
+ end
+ basepos=base
+ end
+ if not halfpos then
+ halfpos=base
+ end
+ if not subpos then
+ subpos=base
+ end
+ if not postpos then
+ postpos=subpos or base
+ end
+ local moved={}
+ local current=start
+ local last=getnext(stop)
+ while current~=last do
+ local char,target,cn=locl[current] or getchar(current),nil,getnext(current)
+ local tpm=twopart_mark[char]
+ if tpm then
+ local extra=copy_node(current)
+ copyinjection(extra,current)
+ char=tpm[1]
+ setchar(current,char)
+ setchar(extra,tpm[2])
+ head=insert_node_after(head,current,extra)
+ end
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then
+ moved[current]=true
+ local prev,next=getboth(current)
+ setlink(prev,next)
+ if current==stop then
+ stop=getprev(current)
+ end
+ if halfpos==start then
+ if head==start then
+ head=current
end
- local mlookups=description.mlookups
- if mlookups then
- description.mlookups=pack_normal(mlookups)
+ start=current
+ end
+ local prev=getprev(halfpos)
+ setlink(prev,current)
+ setlink(current,halfpos)
+ halfpos=current
+ elseif above_mark[char] then
+ target=basepos
+ if subpos==basepos then
+ subpos=current
+ end
+ if postpos==basepos then
+ postpos=current
+ end
+ basepos=current
+ elseif below_mark[char] then
+ target=subpos
+ if postpos==subpos then
+ postpos=current
+ end
+ subpos=current
+ elseif post_mark[char] then
+ target=postpos
+ postpos=current
+ end
+ if mark_above_below_post[char] then
+ local prev=getprev(current)
+ if prev~=target then
+ local next=getnext(current)
+ setlink(next,prev)
+ if current==stop then
+ stop=prev
end
+ local next=getnext(target)
+ setlink(current,next)
+ setlink(target,current)
end
end
end
+ current=cn
end
-end
-local unpacked_mt={
- __index=function(t,k)
- t[k]=false
- return k
+ local current,c=start,nil
+ while current~=stop do
+ local char=getchar(current)
+ if halant[char] or stress_tone_mark[char] then
+ if not c then
+ c=current
+ end
+ else
+ c=nil
end
-}
-local function unpackdata(data)
- if data then
- local tables=data.tables
- if tables then
- local resources=data.resources
- local lookuptypes=resources.lookuptypes
- local unpacked={}
- setmetatable(unpacked,unpacked_mt)
- for unicode,description in next,data.descriptions do
- local tv=tables[description.boundingbox]
- if tv then
- description.boundingbox=tv
- end
- local slookups=description.slookups
- if slookups then
- local tv=tables[slookups]
- if tv then
- description.slookups=tv
- slookups=unpacked[tv]
- end
- if slookups then
- for tag,lookup in next,slookups do
- local what=lookuptypes[tag]
- if what=="pair" then
- local tv=tables[lookup[2]]
- if tv then
- lookup[2]=tv
- end
- local tv=tables[lookup[3]]
- if tv then
- lookup[3]=tv
- end
- elseif what~="substitution" then
- local tv=tables[lookup]
- if tv then
- slookups[tag]=tv
+ local next=getnext(current)
+ if c and nukta[getchar(next)] then
+ if head==c then
+ head=next
+ end
+ if stop==next then
+ stop=current
+ end
+ local prev=getprev(c)
+ setlink(next,prev)
+ local nextnext=getnext(next)
+ setnext(current,nextnext)
+ local nextnextnext=getnext(nextnext)
+ if nextnextnext then
+ setprev(nextnextnext,current)
+ end
+ setlink(nextnext,c)
+ end
+ if stop==current then break end
+ current=getnext(current)
+ end
+ if getchar(base)==c_nbsp then
+ nbspaces=nbspaces-1
+ head=remove_node(head,base)
+ free_node(base)
+ end
+ return head,stop,nbspaces
+end
+local separator={}
+imerge(separator,consonant)
+imerge(separator,independent_vowel)
+imerge(separator,dependent_vowel)
+imerge(separator,vowel_modifier)
+imerge(separator,stress_tone_mark)
+for k,v in next,nukta do separator[k]=true end
+for k,v in next,halant do separator[k]=true end
+local function analyze_next_chars_one(c,font,variant)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ if variant==1 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ n=getnext(n)
+ if n then
+ v=ischar(n,font)
+ end
+ end
+ if n and v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv then
+ if vv==c_zwj and consonant[vvv] then
+ c=nnn
+ elseif (vv==c_zwnj or vv==c_zwj) and halant[vvv] then
+ local nnnn=getnext(nnn)
+ if nnnn then
+ local vvvv=ischar(nnnn)
+ if vvvv and consonant[vvvv] then
+ c=nnnn
+ end
end
end
end
end
end
- local mlookups=description.mlookups
- if mlookups then
- local tv=tables[mlookups]
- if tv then
- description.mlookups=tv
- mlookups=unpacked[tv]
+ end
+ end
+ elseif variant==2 then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=getnext(c)
+ if n then
+ v=ischar(n,font)
+ if v then
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and zw_char[vv] then
+ n=nn
+ v=vv
+ nn=getnext(nn)
+ vv=nn and ischar(nn,font)
end
- if mlookups then
- for tag,list in next,mlookups do
- local tv=tables[list]
- if tv then
- mlookups[tag]=tv
- list=unpacked[tv]
- end
- if list then
- local what=lookuptypes[tag]
- if what=="pair" then
- for i=1,#list do
- local lookup=list[i]
- local tv=tables[lookup[2]]
- if tv then
- lookup[2]=tv
- end
- local tv=tables[lookup[3]]
- if tv then
- lookup[3]=tv
- end
- end
- elseif what~="substitution" then
- for i=1,#list do
- local tv=tables[list[i]]
- if tv then
- list[i]=tv
- end
- end
- end
- end
- end
+ if vv and halant[v] and consonant[vv] then
+ c=nn
end
end
- local kerns=description.kerns
- if kerns then
- local tm=tables[kerns]
- if tm then
- description.kerns=tm
- kerns=unpacked[tm]
+ end
+ end
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if dependent_vowel[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if vowel_modifier[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=getnext(c)
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function analyze_next_chars_two(c,font)
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ c=n
+ end
+ n=c
+ while true do
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv then
+ if halant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and zw_char[vvv] then
+ n=nnn
+ end
end
- if kerns then
- for k,kern in next,kerns do
- local tv=tables[kern]
- if tv then
- kerns[k]=tv
- end
+ elseif vv==c_zwnj or vv==c_zwj then
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and halant[vvv] then
+ n=nnn
end
end
+ else
+ break
end
- local math=description.math
- if math then
- local kerns=math.kerns
- if kerns then
- local tm=tables[kerns]
- if tm then
- math.kerns=tm
- kerns=unpacked[tm]
- end
- if kerns then
- for k,kern in next,kerns do
- local tv=tables[kern]
- if tv then
- kerns[k]=tv
- end
+ local nn=getnext(n)
+ if nn then
+ local vv=ischar(nn,font)
+ if vv and consonant[vv] then
+ n=nn
+ local nnn=getnext(nn)
+ if nnn then
+ local vvv=ischar(nnn,font)
+ if vvv and nukta[vvv] then
+ n=nnn
end
end
+ c=n
+ else
+ break
end
+ else
+ break
end
- local anchors=description.anchors
- if anchors then
- local ta=tables[anchors]
- if ta then
- description.anchors=ta
- anchors=unpacked[ta]
- end
- if anchors then
- for tag,anchor in next,anchors do
- if tag=="baselig" then
- for _,list in next,anchor do
- for i=1,#list do
- local tv=tables[list[i]]
- if tv then
- list[i]=tv
- end
- end
- end
- else
- for a,data in next,anchor do
- local tv=tables[data]
- if tv then
- anchor[a]=tv
- end
- end
- end
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if not c then
+ return
+ end
+ local n=getnext(c)
+ if not n then
+ return c
+ end
+ local v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_anudatta then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ if v==c_zwnj or v==c_zwj then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ else
+ if dependent_vowel[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if nukta[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if halant[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ end
+ if vowel_modifier[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ c=n
+ n=getnext(c)
+ if not n then
+ return c
+ end
+ v=ischar(n,font)
+ if not v then
+ return c
+ end
+ end
+ if stress_tone_mark[v] then
+ return n
+ else
+ return c
+ end
+end
+local function inject_syntax_error(head,current,mark)
+ local signal=copy_node(current)
+ copyinjection(signal,current)
+ if mark==pre_mark then
+ setchar(signal,dotted_circle)
+ else
+ setchar(current,dotted_circle)
+ end
+ return insert_node_after(head,current,signal)
+end
+function methods.deva(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local nbspaces=0
+ while current do
+ local char=ischar(current,font)
+ if char then
+ done=true
+ local syllablestart=current
+ local syllableend=nil
+ local c=current
+ local n=getnext(c)
+ local first=char
+ if n and ra[first] then
+ local second=ischar(n,font)
+ if second and halant[second] then
+ local n=getnext(n)
+ if n then
+ local third=ischar(n,font)
+ if third then
+ c=n
+ first=third
end
end
end
- local altuni=description.altuni
- if altuni then
- local altuni=tables[altuni]
- if altuni then
- description.altuni=altuni
- for i=1,#altuni do
- local tv=tables[altuni[i]]
- if tv then
- altuni[i]=tv
- end
- end
+ end
+ local standalone=first==c_nbsp
+ if standalone then
+ local prev=getprev(current)
+ if prev then
+ local prevchar=ischar(prev,font)
+ if not prevchar then
+ elseif not separator[prevchar] then
+ else
+ standalone=false
end
+ else
end
end
- local lookups=data.lookups
- if lookups then
- for _,lookup in next,lookups do
- local rules=lookup.rules
- if rules then
- for i=1,#rules do
- local rule=rules[i]
- local before=rule.before
- if before then
- local tv=tables[before]
- if tv then
- rule.before=tv
- before=unpacked[tv]
- end
- if before then
- for i=1,#before do
- local tv=tables[before[i]]
- if tv then
- before[i]=tv
- end
- end
- end
+ if standalone then
+ local syllableend=analyze_next_chars_one(c,font,2)
+ current=getnext(syllableend)
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
+ end
+ else
+ if consonant[char] then
+ local prevc=true
+ while prevc do
+ prevc=false
+ local n=getnext(current)
+ if not n then
+ break
+ end
+ local v=ischar(n,font)
+ if not v then
+ break
+ end
+ if nukta[v] then
+ n=getnext(n)
+ if not n then
+ break
end
- local after=rule.after
- if after then
- local tv=tables[after]
- if tv then
- rule.after=tv
- after=unpacked[tv]
- end
- if after then
- for i=1,#after do
- local tv=tables[after[i]]
- if tv then
- after[i]=tv
- end
- end
- end
+ v=ischar(n,font)
+ if not v then
+ break
end
- local current=rule.current
- if current then
- local tv=tables[current]
- if tv then
- rule.current=tv
- current=unpacked[tv]
- end
- if current then
- for i=1,#current do
- local tv=tables[current[i]]
- if tv then
- current[i]=tv
- end
- end
- end
+ end
+ if halant[v] then
+ n=getnext(n)
+ if not n then
+ break
end
- local replacements=rule.replacements
- if replacements then
- local tv=tables[replacements]
- if tv then
- rule.replacements=tv
- end
+ v=ischar(n,font)
+ if not v then
+ break
end
- local lookups=rule.lookups
- if lookups then
- local tv=tables[lookups]
- if tv then
- rule.lookups=tv
+ if v==c_zwnj or v==c_zwj then
+ n=getnext(n)
+ if not n then
+ break
+ end
+ v=ischar(n,font)
+ if not v then
+ break
end
end
+ if consonant[v] then
+ prevc=true
+ current=n
+ end
end
end
- end
- end
- local anchor_to_lookup=resources.anchor_to_lookup
- if anchor_to_lookup then
- for anchor,lookup in next,anchor_to_lookup do
- local tv=tables[lookup]
- if tv then
- anchor_to_lookup[anchor]=tv
- end
- end
- end
- local lookup_to_anchor=resources.lookup_to_anchor
- if lookup_to_anchor then
- for lookup,anchor in next,lookup_to_anchor do
- local tv=tables[anchor]
- if tv then
- lookup_to_anchor[lookup]=tv
- end
- end
- end
- local ls=resources.sequences
- if ls then
- for _,feature in next,ls do
- local flags=feature.flags
- if flags then
- local tv=tables[flags]
- if tv then
- feature.flags=tv
- end
- end
- local subtables=feature.subtables
- if subtables then
- local tv=tables[subtables]
- if tv then
- feature.subtables=tv
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and nukta[v] then
+ current=n
+ n=getnext(current)
end
end
- local features=feature.features
- if features then
- local tv=tables[features]
- if tv then
- feature.features=tv
- features=unpacked[tv]
- end
- if features then
- for script,data in next,features do
- local tv=tables[data]
- if tv then
- features[script]=tv
+ syllableend=current
+ current=n
+ if current then
+ local v=ischar(current,font)
+ if not v then
+ elseif halant[v] then
+ local n=getnext(current)
+ if n then
+ local v=ischar(n,font)
+ if v and zw_char[v] then
+ syllableend=n
+ current=getnext(n)
+ else
+ syllableend=current
+ current=n
end
+ else
+ syllableend=current
+ current=n
+ end
+ else
+ if dependent_vowel[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
end
end
end
- local order=feature.order
- if order then
- local tv=tables[order]
- if tv then
- feature.order=tv
- end
+ if syllablestart~=syllableend then
+ head,current,nbspaces=deva_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ current=getnext(current)
end
- local markclass=feature.markclass
- if markclass then
- local tv=tables[markclass]
- if tv then
- feature.markclass=tv
+ elseif independent_vowel[char] then
+ syllableend=current
+ current=getnext(current)
+ if current then
+ local v=ischar(current,font)
+ if v then
+ if vowel_modifier[v] then
+ syllableend=current
+ current=getnext(current)
+ v=ischar(current,font)
+ end
+ if v and stress_tone_mark[v] then
+ syllableend=current
+ current=getnext(current)
+ end
end
end
+ else
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ current=getnext(current)
end
end
- local lookups=resources.lookups
- if lookups then
- for _,lookup in next,lookups do
- local flags=lookup.flags
- if flags then
- local tv=tables[flags]
- if tv then
- lookup.flags=tv
- end
- end
- local subtables=lookup.subtables
- if subtables then
- local tv=tables[subtables]
- if tv then
- lookup.subtables=tv
+ else
+ current=getnext(current)
+ end
+ start=false
+ end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
+end
+function methods.dev2(head,font,attr)
+ head=tonut(head)
+ local current=head
+ local start=true
+ local done=false
+ local syllabe=0
+ local nbspaces=0
+ while current do
+ local syllablestart=nil
+ local syllableend=nil
+ local char=ischar(current,font)
+ if char then
+ done=true
+ syllablestart=current
+ local c=current
+ local n=getnext(current)
+ if n and ra[char] then
+ local nextchar=ischar(n,font)
+ if nextchar and halant[nextchar] then
+ local n=getnext(n)
+ if n then
+ local nextnextchar=ischar(n,font)
+ if nextnextchar then
+ c=n
+ char=nextnextchar
end
end
end
end
- local features=resources.features
- if features then
- for _,what in next,glists do
- local feature=features[what]
- if feature then
- for tag,spec in next,feature do
- local tv=tables[spec]
- if tv then
- feature[tag]=tv
- end
- end
+ if independent_vowel[char] then
+ current=analyze_next_chars_one(c,font,1)
+ syllableend=current
+ else
+ local standalone=char==c_nbsp
+ if standalone then
+ nbspaces=nbspaces+1
+ local p=getprev(current)
+ if not p then
+ elseif ischar(p,font) then
+ elseif not separator[getchar(p)] then
+ else
+ standalone=false
end
end
+ if standalone then
+ current=analyze_next_chars_one(c,font,2)
+ syllableend=current
+ elseif consonant[getchar(current)] then
+ current=analyze_next_chars_two(current,font)
+ syllableend=current
+ end
end
- data.tables=nil
end
+ if syllableend then
+ syllabe=syllabe+1
+ local c=syllablestart
+ local n=getnext(syllableend)
+ while c~=n do
+ setprop(c,a_syllabe,syllabe)
+ c=getnext(c)
+ end
+ end
+ if syllableend and syllablestart~=syllableend then
+ head,current,nbspaces=dev2_reorder(head,syllablestart,syllableend,font,attr,nbspaces)
+ end
+ if not syllableend then
+ local char=ischar(current,font)
+ if char and not getprop(current,a_state) then
+ local mark=mark_four[char]
+ if mark then
+ head,current=inject_syntax_error(head,current,mark)
+ end
+ end
+ end
+ start=false
+ current=getnext(current)
end
+ if nbspaces>0 then
+ head=replace_all_nbsp(head)
+ end
+ head=tonode(head)
+ return head,done
end
-if otf.enhancers.register then
- otf.enhancers.register("pack",packdata)
- otf.enhancers.register("unpack",unpackdata)
-end
-otf.enhancers.unpack=unpackdata
-otf.enhancers.pack=packdata
+methods.mlym=methods.deva
+methods.mlm2=methods.dev2
end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['luatex-fonts-lua']={
+if not modules then modules={} end modules ['font-lua']={
version=1.001,
- comment="companion to luatex-*.tex",
+ comment="companion to font-ini.mkiv",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
+local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
+local report_lua=logs.reporter("fonts","lua loading")
local fonts=fonts
+local readers=fonts.readers
fonts.formats.lua="lua"
-function fonts.readers.lua(specification)
+local function check_lua(specification,fullname)
+ local fullname=resolvers.findfile(fullname) or ""
+ if fullname~="" then
+ local loader=loadfile(fullname)
+ loader=loader and loader()
+ return loader and loader(specification)
+ end
+end
+readers.check_lua=check_lua
+function readers.lua(specification)
+ local original=specification.specification
+ if trace_defining then
+ report_lua("using lua reader for %a",original)
+ end
local fullname=specification.filename or ""
if fullname=="" then
local forced=specification.forced or ""
@@ -14492,12 +23389,7 @@ function fonts.readers.lua(specification)
fullname=specification.name
end
end
- local fullname=resolvers.findfile(fullname) or ""
- if fullname~="" then
- local loader=loadfile(fullname)
- loader=loader and loader()
- return loader and loader(specification)
- end
+ return check_lua(specification,fullname)
end
end -- closure
@@ -14616,10 +23508,11 @@ end
function resolvers.name(specification)
local resolve=fonts.names.resolve
if resolve then
- local resolved,sub=resolve(specification.name,specification.sub,specification)
+ local resolved,sub,subindex=resolve(specification.name,specification.sub,specification)
if resolved then
specification.resolved=resolved
specification.sub=sub
+ specification.subindex=subindex
local suffix=lower(suffixonly(resolved))
if fonts.formats[suffix] then
specification.forced=suffix
@@ -14636,10 +23529,11 @@ end
function resolvers.spec(specification)
local resolvespec=fonts.names.resolvespec
if resolvespec then
- local resolved,sub=resolvespec(specification.name,specification.sub,specification)
+ local resolved,sub,subindex=resolvespec(specification.name,specification.sub,specification)
if resolved then
specification.resolved=resolved
specification.sub=sub
+ specification.subindex=subindex
specification.forced=lower(suffixonly(resolved))
specification.forcedname=resolved
specification.name=removesuffix(resolved)
@@ -14835,7 +23729,7 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['luatex-font-def']={
+if not modules then modules={} end modules ['luatex-fonts-def']={
version=1.001,
comment="companion to luatex-*.tex",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -14869,7 +23763,7 @@ local filename_1=P("file:")/isfile*(namespec/thename)
local filename_2=P("[")*P(true)/isname*(((1-P("]"))^0)/thename)*P("]")
local fontname_1=P("name:")/isname*(namespec/thename)
local fontname_2=P(true)/issome*(namespec/thename)
-local sometext=(R("az","AZ","09")+S("+-."))^1
+local sometext=(R("az","AZ","09")+S("+-.{}"))^1
local truevalue=P("+")*spaces*(sometext/istrue)
local falsevalue=P("-")*spaces*(sometext/isfalse)
local keyvalue=(C(sometext)*spaces*P("=")*spaces*C(sometext))/iskey
@@ -15136,7 +24030,7 @@ end -- closure
do -- begin closure to overcome local limits and interference
-if not modules then modules={} end modules ['luatex-fonts-cbk']={
+if not modules then modules={} end modules ['font-gbn']={
version=1.001,
comment="companion to luatex-*.tex",
author="Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -15149,41 +24043,61 @@ if context then
end
local fonts=fonts
local nodes=nodes
-local traverse_id=node.traverse_id
+local nuts=nodes.nuts
+local traverse_id=nuts.traverse_id
+local remove_node=nuts.remove
+local free_node=nuts.free
local glyph_code=nodes.nodecodes.glyph
local disc_code=nodes.nodecodes.disc
-local ligaturing=node.ligaturing
-local kerning=node.kerning
-local basepass=true
+local tonode=nuts.tonode
+local tonut=nuts.tonut
+local getfont=nuts.getfont
+local getchar=nuts.getchar
+local getid=nuts.getid
+local getboth=nuts.getboth
+local getprev=nuts.getprev
+local getnext=nuts.getnext
+local getdisc=nuts.getdisc
+local setchar=nuts.setchar
+local setlink=nuts.setlink
+local setprev=nuts.setprev
+local n_ligaturing=node.ligaturing
+local n_kerning=node.kerning
+local ligaturing=nuts.ligaturing
+local kerning=nuts.kerning
+local basemodepass=true
local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning=nil end
local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning=nil end
function node.ligaturing(...)
- if basepass and l_warning then
+ if basemodepass and l_warning then
l_warning()
end
- return ligaturing(...)
+ return n_ligaturing(...)
end
function node.kerning(...)
- if basepass and k_warning then
+ if basemodepass and k_warning then
k_warning()
end
- return kerning(...)
+ return n_kerning(...)
end
-function nodes.handlers.setbasepass(v)
- basepass=v
+function nodes.handlers.setbasemodepass(v)
+ basemodepass=v
end
function nodes.handlers.nodepass(head)
local fontdata=fonts.hashes.identifiers
if fontdata then
+ local nuthead=tonut(head)
local usedfonts={}
local basefonts={}
local prevfont=nil
local basefont=nil
- for n in traverse_id(glyph_code,head) do
- local font=n.font
+ local variants=nil
+ local redundant=nil
+ for n in traverse_id(glyph_code,nuthead) do
+ local font=getfont(n)
if font~=prevfont then
if basefont then
- basefont[2]=n.prev
+ basefont[2]=getprev(n)
end
prevfont=font
local used=usedfonts[font]
@@ -15195,20 +24109,74 @@ function nodes.handlers.nodepass(head)
local processors=shared.processes
if processors and #processors>0 then
usedfonts[font]=processors
- elseif basepass then
+ elseif basemodepass then
basefont={ n,nil }
basefonts[#basefonts+1]=basefont
end
end
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
+ end
+ else
+ local tfmdata=fontdata[prevfont]
+ if tfmdata then
+ local resources=tfmdata.resources
+ variants=resources and resources.variants
+ variants=variants and next(variants) and variants or false
end
end
end
+ if variants then
+ local char=getchar(n)
+ if char>=0xFE00 and (char<=0xFE0F or (char>=0xE0100 and char<=0xE01EF)) then
+ local hash=variants[char]
+ if hash then
+ local p=getprev(n)
+ if p and getid(p)==glyph_code then
+ local variant=hash[getchar(p)]
+ if variant then
+ setchar(p,variant)
+ if not redundant then
+ redundant={ n }
+ else
+ redundant[#redundant+1]=n
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if redundant then
+ for i=1,#redundant do
+ local r=redundant[i]
+ local p,n=getboth(r)
+ if r==nuthead then
+ nuthead=n
+ setprev(n)
+ else
+ setlink(p,n)
+ end
+ if b>0 then
+ for i=1,b do
+ local bi=basefonts[i]
+ if r==bi[1] then
+ bi[1]=n
+ end
+ if r==bi[2] then
+ bi[2]=n
+ end
+ end
+ end
+ free_node(r)
+ end
end
- for d in traverse_id(disc_code,head) do
- local r=d.replace
+ for d in traverse_id(disc_code,nuthead) do
+ local _,_,r=getdisc(d)
if r then
for n in traverse_id(glyph_code,r) do
- local font=n.font
+ local font=getfont(n)
if font~=prevfont then
prevfont=font
local used=usedfonts[font]
@@ -15235,17 +24203,32 @@ function nodes.handlers.nodepass(head)
end
end
end
- if basepass and #basefonts>0 then
+ if basemodepass and #basefonts>0 then
for i=1,#basefonts do
local range=basefonts[i]
local start=range[1]
local stop=range[2]
- if stop then
- start,stop=ligaturing(start,stop)
- start,stop=kerning(start,stop)
- elseif start then
- start=ligaturing(start)
- start=kerning(start)
+ if start then
+ local front=nuthead==start
+ local prev,next
+ if stop then
+ next=getnext(stop)
+ start,stop=ligaturing(start,stop)
+ start,stop=kerning(start,stop)
+ else
+ prev=getprev(start)
+ start=ligaturing(start)
+ start=kerning(start)
+ end
+ if prev then
+ setlink(prev,start)
+ end
+ if next then
+ setlink(stop,next)
+ end
+ if front and nuthead~=start then
+ head=tonode(start)
+ end
end
end
end
@@ -15255,9 +24238,9 @@ function nodes.handlers.nodepass(head)
end
end
function nodes.handlers.basepass(head)
- if not basepass then
- head=ligaturing(head)
- head=kerning(head)
+ if not basemodepass then
+ head=n_ligaturing(head)
+ head=n_kerning(head)
end
return head,true
end
@@ -15269,7 +24252,9 @@ function nodes.simple_font_handler(head)
if head then
head=nodepass(head)
head=injectpass(head)
- head=basepass(head)
+ if not basemodepass then
+ head=basepass(head)
+ end
protectpass(head)
return head,true
else
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-ota.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-ota.lua
deleted file mode 100644
index f083fe09e83..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-ota.lua
+++ /dev/null
@@ -1,459 +0,0 @@
-if not modules then modules = { } end modules ['font-otx'] = {
- version = 1.001,
- comment = "companion to font-otf.lua (analysing)",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local type = type
-
-if not trackers then trackers = { register = function() end } end
-
------ trace_analyzing = false trackers.register("otf.analyzing", function(v) trace_analyzing = v end)
-
-local fonts, nodes, node = fonts, nodes, node
-
-local allocate = utilities.storage.allocate
-
-local otf = fonts.handlers.otf
-
-local analyzers = fonts.analyzers
-local initializers = allocate()
-local methods = allocate()
-
-analyzers.initializers = initializers
-analyzers.methods = methods
-analyzers.useunicodemarks = false
-
-local a_state = attributes.private('state')
-
-local nuts = nodes.nuts
-local tonut = nuts.tonut
-
-local getfield = nuts.getfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getprop = nuts.getprop
-local setprop = nuts.setprop
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-
-local traverse_id = nuts.traverse_id
-local traverse_node_list = nuts.traverse
-local end_of_math = nuts.end_of_math
-
-local nodecodes = nodes.nodecodes
-local glyph_code = nodecodes.glyph
-local disc_code = nodecodes.disc
-local math_code = nodecodes.math
-
-local fontdata = fonts.hashes.identifiers
-local categories = characters and characters.categories or { } -- sorry, only in context
-
-local otffeatures = fonts.constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
-
---[[ldx--
-<p>Analyzers run per script and/or language and are needed in order to
-process features right.</p>
---ldx]]--
-
--- never use these numbers directly
-
-local s_init = 1 local s_rphf = 7
-local s_medi = 2 local s_half = 8
-local s_fina = 3 local s_pref = 9
-local s_isol = 4 local s_blwf = 10
-local s_mark = 5 local s_pstf = 11
-local s_rest = 6
-
-local states = {
- init = s_init,
- medi = s_medi,
- fina = s_fina,
- isol = s_isol,
- mark = s_mark,
- rest = s_rest,
- rphf = s_rphf,
- half = s_half,
- pref = s_pref,
- blwf = s_blwf,
- pstf = s_pstf,
-}
-
-local features = {
- init = s_init,
- medi = s_medi,
- fina = s_fina,
- isol = s_isol,
- -- mark = s_mark,
- -- rest = s_rest,
- rphf = s_rphf,
- half = s_half,
- pref = s_pref,
- blwf = s_blwf,
- pstf = s_pstf,
-}
-
-analyzers.states = states
-analyzers.features = features
-
--- todo: analyzers per script/lang, cross font, so we need an font id hash -> script
--- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace
-
-function analyzers.setstate(head,font)
- local useunicodemarks = analyzers.useunicodemarks
- local tfmdata = fontdata[font]
- local descriptions = tfmdata.descriptions
- local first, last, current, n, done = nil, nil, head, 0, false -- maybe make n boolean
- current = tonut(current)
- while current do
- local id = getid(current)
- if id == glyph_code and getfont(current) == font then
- done = true
- local char = getchar(current)
- local d = descriptions[char]
- if d then
- if d.class == "mark" or (useunicodemarks and categories[char] == "mn") then
- done = true
- setprop(current,a_state,s_mark)
- elseif n == 0 then
- first, last, n = current, current, 1
- setprop(current,a_state,s_init)
- else
- last, n = current, n+1
- setprop(current,a_state,s_medi)
- end
- else -- finish
- if first and first == last then
- setprop(last,a_state,s_isol)
- elseif last then
- setprop(last,a_state,s_fina)
- end
- first, last, n = nil, nil, 0
- end
- elseif id == disc_code then
- -- always in the middle
- setprop(current,a_state,s_medi)
- last = current
- else -- finish
- if first and first == last then
- setprop(last,a_state,s_isol)
- elseif last then
- setprop(last,a_state,s_fina)
- end
- first, last, n = nil, nil, 0
- if id == math_code then
- current = end_of_math(current)
- end
- end
- current = getnext(current)
- end
- if first and first == last then
- setprop(last,a_state,s_isol)
- elseif last then
- setprop(last,a_state,s_fina)
- end
- return head, done
-end
-
--- in the future we will use language/script attributes instead of the
--- font related value, but then we also need dynamic features which is
--- somewhat slower; and .. we need a chain of them
-
-local function analyzeinitializer(tfmdata,value) -- attr
- local script, language = otf.scriptandlanguage(tfmdata) -- attr
- local action = initializers[script]
- if not action then
- -- skip
- elseif type(action) == "function" then
- return action(tfmdata,value)
- else
- local action = action[language]
- if action then
- return action(tfmdata,value)
- end
- end
-end
-
-local function analyzeprocessor(head,font,attr)
- local tfmdata = fontdata[font]
- local script, language = otf.scriptandlanguage(tfmdata,attr)
- local action = methods[script]
- if not action then
- -- skip
- elseif type(action) == "function" then
- return action(head,font,attr)
- else
- action = action[language]
- if action then
- return action(head,font,attr)
- end
- end
- return head, false
-end
-
-registerotffeature {
- name = "analyze",
- description = "analysis of character classes",
- default = true,
- initializers = {
- node = analyzeinitializer,
- },
- processors = {
- position = 1,
- node = analyzeprocessor,
- }
-}
-
--- latin
-
-methods.latn = analyzers.setstate
-
--- This info eventually can go into char-def and we will have a state
--- table for generic then (unicode recognized all states but in practice
--- only has only
---
--- isolated : isol
--- final : isol_fina
--- medial : isol_fina_medi_init
---
--- so in practice, without analyzer it's rather useless info which is
--- why having it in char-def makes only sense for special purposes (like)
--- like tracing cq. visualizing.
-
-local tatweel = 0x0640
-local zwnj = 0x200C
-local zwj = 0x200D
-
-local isolated = { -- isol
- [0x0600] = true, [0x0601] = true, [0x0602] = true, [0x0603] = true,
- [0x0604] = true,
- [0x0608] = true, [0x060B] = true, [0x0621] = true, [0x0674] = true,
- [0x06DD] = true,
- -- mandaic
- [0x0856] = true, [0x0858] = true, [0x0857] = true,
- -- n'ko
- [0x07FA] = true,
- -- also here:
- [zwnj] = true,
- -- 7
- [0x08AD] = true,
-}
-
-local final = { -- isol_fina
- [0x0622] = true, [0x0623] = true, [0x0624] = true, [0x0625] = true,
- [0x0627] = true, [0x0629] = true, [0x062F] = true, [0x0630] = true,
- [0x0631] = true, [0x0632] = true, [0x0648] = true, [0x0671] = true,
- [0x0672] = true, [0x0673] = true, [0x0675] = true, [0x0676] = true,
- [0x0677] = true, [0x0688] = true, [0x0689] = true, [0x068A] = true,
- [0x068B] = true, [0x068C] = true, [0x068D] = true, [0x068E] = true,
- [0x068F] = true, [0x0690] = true, [0x0691] = true, [0x0692] = true,
- [0x0693] = true, [0x0694] = true, [0x0695] = true, [0x0696] = true,
- [0x0697] = true, [0x0698] = true, [0x0699] = true, [0x06C0] = true,
- [0x06C3] = true, [0x06C4] = true, [0x06C5] = true, [0x06C6] = true,
- [0x06C7] = true, [0x06C8] = true, [0x06C9] = true, [0x06CA] = true,
- [0x06CB] = true, [0x06CD] = true, [0x06CF] = true, [0x06D2] = true,
- [0x06D3] = true, [0x06D5] = true, [0x06EE] = true, [0x06EF] = true,
- [0x0759] = true, [0x075A] = true, [0x075B] = true, [0x076B] = true,
- [0x076C] = true, [0x0771] = true, [0x0773] = true, [0x0774] = true,
- [0x0778] = true, [0x0779] = true,
- [0x08AA] = true, [0x08AB] = true, [0x08AC] = true,
- [0xFEF5] = true, [0xFEF7] = true, [0xFEF9] = true, [0xFEFB] = true,
- -- syriac
- [0x0710] = true, [0x0715] = true, [0x0716] = true, [0x0717] = true,
- [0x0718] = true, [0x0719] = true, [0x0728] = true, [0x072A] = true,
- [0x072C] = true, [0x071E] = true,
- [0x072F] = true, [0x074D] = true,
- -- mandaic
- [0x0840] = true, [0x0849] = true, [0x0854] = true, [0x0846] = true,
- [0x084F] = true,
- -- 7
- [0x08AE] = true, [0x08B1] = true, [0x08B2] = true,
-}
-
-local medial = { -- isol_fina_medi_init
- [0x0626] = true, [0x0628] = true, [0x062A] = true, [0x062B] = true,
- [0x062C] = true, [0x062D] = true, [0x062E] = true, [0x0633] = true,
- [0x0634] = true, [0x0635] = true, [0x0636] = true, [0x0637] = true,
- [0x0638] = true, [0x0639] = true, [0x063A] = true, [0x063B] = true,
- [0x063C] = true, [0x063D] = true, [0x063E] = true, [0x063F] = true,
- [0x0641] = true, [0x0642] = true, [0x0643] = true,
- [0x0644] = true, [0x0645] = true, [0x0646] = true, [0x0647] = true,
- [0x0649] = true, [0x064A] = true, [0x066E] = true, [0x066F] = true,
- [0x0678] = true, [0x0679] = true, [0x067A] = true, [0x067B] = true,
- [0x067C] = true, [0x067D] = true, [0x067E] = true, [0x067F] = true,
- [0x0680] = true, [0x0681] = true, [0x0682] = true, [0x0683] = true,
- [0x0684] = true, [0x0685] = true, [0x0686] = true, [0x0687] = true,
- [0x069A] = true, [0x069B] = true, [0x069C] = true, [0x069D] = true,
- [0x069E] = true, [0x069F] = true, [0x06A0] = true, [0x06A1] = true,
- [0x06A2] = true, [0x06A3] = true, [0x06A4] = true, [0x06A5] = true,
- [0x06A6] = true, [0x06A7] = true, [0x06A8] = true, [0x06A9] = true,
- [0x06AA] = true, [0x06AB] = true, [0x06AC] = true, [0x06AD] = true,
- [0x06AE] = true, [0x06AF] = true, [0x06B0] = true, [0x06B1] = true,
- [0x06B2] = true, [0x06B3] = true, [0x06B4] = true, [0x06B5] = true,
- [0x06B6] = true, [0x06B7] = true, [0x06B8] = true, [0x06B9] = true,
- [0x06BA] = true, [0x06BB] = true, [0x06BC] = true, [0x06BD] = true,
- [0x06BE] = true, [0x06BF] = true, [0x06C1] = true, [0x06C2] = true,
- [0x06CC] = true, [0x06CE] = true, [0x06D0] = true, [0x06D1] = true,
- [0x06FA] = true, [0x06FB] = true, [0x06FC] = true, [0x06FF] = true,
- [0x0750] = true, [0x0751] = true, [0x0752] = true, [0x0753] = true,
- [0x0754] = true, [0x0755] = true, [0x0756] = true, [0x0757] = true,
- [0x0758] = true, [0x075C] = true, [0x075D] = true, [0x075E] = true,
- [0x075F] = true, [0x0760] = true, [0x0761] = true, [0x0762] = true,
- [0x0763] = true, [0x0764] = true, [0x0765] = true, [0x0766] = true,
- [0x0767] = true, [0x0768] = true, [0x0769] = true, [0x076A] = true,
- [0x076D] = true, [0x076E] = true, [0x076F] = true, [0x0770] = true,
- [0x0772] = true, [0x0775] = true, [0x0776] = true, [0x0777] = true,
- [0x077A] = true, [0x077B] = true, [0x077C] = true, [0x077D] = true,
- [0x077E] = true, [0x077F] = true,
- [0x08A0] = true, [0x08A2] = true, [0x08A4] = true, [0x08A5] = true,
- [0x08A6] = true, [0x0620] = true, [0x08A8] = true, [0x08A9] = true,
- [0x08A7] = true, [0x08A3] = true,
- -- syriac
- [0x0712] = true, [0x0713] = true, [0x0714] = true, [0x071A] = true,
- [0x071B] = true, [0x071C] = true, [0x071D] = true, [0x071F] = true,
- [0x0720] = true, [0x0721] = true, [0x0722] = true, [0x0723] = true,
- [0x0724] = true, [0x0725] = true, [0x0726] = true, [0x0727] = true,
- [0x0729] = true, [0x072B] = true, [0x072D] = true, [0x072E] = true,
- [0x074E] = true, [0x074F] = true,
- -- mandaic
- [0x0841] = true, [0x0842] = true, [0x0843] = true, [0x0844] = true,
- [0x0845] = true, [0x0847] = true, [0x0848] = true, [0x0855] = true,
- [0x0851] = true, [0x084E] = true, [0x084D] = true, [0x084A] = true,
- [0x084B] = true, [0x084C] = true, [0x0850] = true, [0x0852] = true,
- [0x0853] = true,
- -- n'ko
- [0x07D7] = true, [0x07E8] = true, [0x07D9] = true, [0x07EA] = true,
- [0x07CA] = true, [0x07DB] = true, [0x07CC] = true, [0x07DD] = true,
- [0x07CE] = true, [0x07DF] = true, [0x07D4] = true, [0x07E5] = true,
- [0x07E9] = true, [0x07E7] = true, [0x07E3] = true, [0x07E2] = true,
- [0x07E0] = true, [0x07E1] = true, [0x07DE] = true, [0x07DC] = true,
- [0x07D1] = true, [0x07DA] = true, [0x07D8] = true, [0x07D6] = true,
- [0x07D2] = true, [0x07D0] = true, [0x07CF] = true, [0x07CD] = true,
- [0x07CB] = true, [0x07D3] = true, [0x07E4] = true, [0x07D5] = true,
- [0x07E6] = true,
- -- also here:
- [tatweel]= true, [zwj] = true,
- -- 7
- [0x08A1] = true, [0x08AF] = true, [0x08B0] = true,
-}
-
-local arab_warned = { }
-
--- todo: gref
-
-local function warning(current,what)
- local char = getchar(current)
- if not arab_warned[char] then
- log.report("analyze","arab: character %C has no %a class",char,what)
- arab_warned[char] = true
- end
-end
-
--- potential optimization: local medial_final = table.merged(medial,final)
-
-local function finish(first,last)
- if last then
- if first == last then
- local fc = getchar(first)
- if medial[fc] or final[fc] then
- setprop(first,a_state,s_isol)
- else
- warning(first,"isol")
- setprop(first,a_state,s_error)
- end
- else
- local lc = getchar(last)
- if medial[lc] or final[lc] then
- -- if laststate == 1 or laststate == 2 or laststate == 4 then
- setprop(last,a_state,s_fina)
- else
- warning(last,"fina")
- setprop(last,a_state,s_error)
- end
- end
- first, last = nil, nil
- elseif first then
- -- first and last are either both set so we never com here
- local fc = getchar(first)
- if medial[fc] or final[fc] then
- setprop(first,a_state,s_isol)
- else
- warning(first,"isol")
- setprop(first,a_state,s_error)
- end
- first = nil
- end
- return first, last
-end
-
-function methods.arab(head,font,attr)
- local useunicodemarks = analyzers.useunicodemarks
- local tfmdata = fontdata[font]
- local marks = tfmdata.resources.marks
- local first, last, current, done = nil, nil, head, false
- current = tonut(current)
- while current do
- local id = getid(current)
- if id == glyph_code and getfont(current) == font and getsubtype(current)<256 and not getprop(current,a_state) then
- done = true
- local char = getchar(current)
- if marks[char] or (useunicodemarks and categories[char] == "mn") then
- setprop(current,a_state,s_mark)
- elseif isolated[char] then -- can be zwj or zwnj too
- first, last = finish(first,last)
- setprop(current,a_state,s_isol)
- first, last = nil, nil
- elseif not first then
- if medial[char] then
- setprop(current,a_state,s_init)
- first, last = first or current, current
- elseif final[char] then
- setprop(current,a_state,s_isol)
- first, last = nil, nil
- else -- no arab
- first, last = finish(first,last)
- end
- elseif medial[char] then
- first, last = first or current, current
- setprop(current,a_state,s_medi)
- elseif final[char] then
- if getprop(last,a_state) ~= s_init then
- -- tricky, we need to check what last may be !
- setprop(last,a_state,s_medi)
- end
- setprop(current,a_state,s_fina)
- first, last = nil, nil
- elseif char >= 0x0600 and char <= 0x06FF then -- needs checking
- setprop(current,a_state,s_rest)
- first, last = finish(first,last)
- else -- no
- first, last = finish(first,last)
- end
- else
- if first or last then
- first, last = finish(first,last)
- end
- if id == math_code then
- current = end_of_math(current)
- end
- end
- current = getnext(current)
- end
- if first or last then
- finish(first,last)
- end
- return head, done
-end
-
-methods.syrc = methods.arab
-methods.mand = methods.arab
-methods.nko = methods.arab
-
-directives.register("otf.analyze.useunicodemarks",function(v)
- analyzers.useunicodemarks = v
-end)
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-otn.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-otn.lua
deleted file mode 100644
index dd3aa61530d..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-otn.lua
+++ /dev/null
@@ -1,2893 +0,0 @@
-if not modules then modules = { } end modules ['font-otn'] = {
- version = 1.001,
- comment = "companion to font-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files",
-}
-
--- todo: looks like we have a leak somewhere (probably in ligatures)
--- todo: copy attributes to disc
-
--- this is a context version which can contain experimental code, but when we
--- have serious patches we also need to change the other two font-otn files
-
--- preprocessors = { "nodes" }
-
--- anchor class : mark, mkmk, curs, mklg (todo)
--- anchor type : mark, basechar, baselig, basemark, centry, cexit, max (todo)
-
--- this is still somewhat preliminary and it will get better in due time;
--- much functionality could only be implemented thanks to the husayni font
--- of Idris Samawi Hamid to who we dedicate this module.
-
--- in retrospect it always looks easy but believe it or not, it took a lot
--- of work to get proper open type support done: buggy fonts, fuzzy specs,
--- special made testfonts, many skype sessions between taco, idris and me,
--- torture tests etc etc ... unfortunately the code does not show how much
--- time it took ...
-
--- todo:
---
--- extension infrastructure (for usage out of context)
--- sorting features according to vendors/renderers
--- alternative loop quitters
--- check cursive and r2l
--- find out where ignore-mark-classes went
--- default features (per language, script)
--- handle positions (we need example fonts)
--- handle gpos_single (we might want an extra width field in glyph nodes because adding kerns might interfere)
--- mark (to mark) code is still not what it should be (too messy but we need some more extreem husayni tests)
--- remove some optimizations (when I have a faster machine)
---
--- maybe redo the lot some way (more context specific)
-
---[[ldx--
-<p>This module is a bit more split up that I'd like but since we also want to test
-with plain <l n='tex'/> it has to be so. This module is part of <l n='context'/>
-and discussion about improvements and functionality mostly happens on the
-<l n='context'/> mailing list.</p>
-
-<p>The specification of OpenType is kind of vague. Apart from a lack of a proper
-free specifications there's also the problem that Microsoft and Adobe
-may have their own interpretation of how and in what order to apply features.
-In general the Microsoft website has more detailed specifications and is a
-better reference. There is also some information in the FontForge help files.</p>
-
-<p>Because there is so much possible, fonts might contain bugs and/or be made to
-work with certain rederers. These may evolve over time which may have the side
-effect that suddenly fonts behave differently.</p>
-
-<p>After a lot of experiments (mostly by Taco, me and Idris) we're now at yet another
-implementation. Of course all errors are mine and of course the code can be
-improved. There are quite some optimizations going on here and processing speed
-is currently acceptable. Not all functions are implemented yet, often because I
-lack the fonts for testing. Many scripts are not yet supported either, but I will
-look into them as soon as <l n='context'/> users ask for it.</p>
-
-<p>Because there are different interpretations possible, I will extend the code
-with more (configureable) variants. I can also add hooks for users so that they can
-write their own extensions.</p>
-
-<p>Glyphs are indexed not by unicode but in their own way. This is because there is no
-relationship with unicode at all, apart from the fact that a font might cover certain
-ranges of characters. One character can have multiple shapes. However, at the
-<l n='tex'/> end we use unicode so and all extra glyphs are mapped into a private
-space. This is needed because we need to access them and <l n='tex'/> has to include
-then in the output eventually.</p>
-
-<p>The raw table as it coms from <l n='fontforge'/> gets reorganized in to fit out needs.
-In <l n='context'/> that table is packed (similar tables are shared) and cached on disk
-so that successive runs can use the optimized table (after loading the table is
-unpacked). The flattening code used later is a prelude to an even more compact table
-format (and as such it keeps evolving).</p>
-
-<p>This module is sparsely documented because it is a moving target. The table format
-of the reader changes and we experiment a lot with different methods for supporting
-features.</p>
-
-<p>As with the <l n='afm'/> code, we may decide to store more information in the
-<l n='otf'/> table.</p>
-
-<p>Incrementing the version number will force a re-cache. We jump the number by one
-when there's a fix in the <l n='fontforge'/> library or <l n='lua'/> code that
-results in different tables.</p>
---ldx]]--
-
--- action handler chainproc chainmore comment
---
--- gsub_single ok ok ok
--- gsub_multiple ok ok not implemented yet
--- gsub_alternate ok ok not implemented yet
--- gsub_ligature ok ok ok
--- gsub_context ok --
--- gsub_contextchain ok --
--- gsub_reversecontextchain ok --
--- chainsub -- ok
--- reversesub -- ok
--- gpos_mark2base ok ok
--- gpos_mark2ligature ok ok
--- gpos_mark2mark ok ok
--- gpos_cursive ok untested
--- gpos_single ok ok
--- gpos_pair ok ok
--- gpos_context ok --
--- gpos_contextchain ok --
---
--- todo: contextpos and contextsub and class stuff
---
--- actions:
---
--- handler : actions triggered by lookup
--- chainproc : actions triggered by contextual lookup
--- chainmore : multiple substitutions triggered by contextual lookup (e.g. fij -> f + ij)
---
--- remark: the 'not implemented yet' variants will be done when we have fonts that use them
--- remark: we need to check what to do with discretionaries
-
--- We used to have independent hashes for lookups but as the tags are unique
--- we now use only one hash. If needed we can have multiple again but in that
--- case I will probably prefix (i.e. rename) the lookups in the cached font file.
-
--- Todo: make plugin feature that operates on char/glyphnode arrays
-
-local concat, insert, remove = table.concat, table.insert, table.remove
-local gmatch, gsub, find, match, lower, strip = string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
-local type, next, tonumber, tostring = type, next, tonumber, tostring
-local lpegmatch = lpeg.match
-local random = math.random
-local formatters = string.formatters
-
-local logs, trackers, nodes, attributes = logs, trackers, nodes, attributes
-
-local registertracker = trackers.register
-
-local fonts = fonts
-local otf = fonts.handlers.otf
-
-local trace_lookups = false registertracker("otf.lookups", function(v) trace_lookups = v end)
-local trace_singles = false registertracker("otf.singles", function(v) trace_singles = v end)
-local trace_multiples = false registertracker("otf.multiples", function(v) trace_multiples = v end)
-local trace_alternatives = false registertracker("otf.alternatives", function(v) trace_alternatives = v end)
-local trace_ligatures = false registertracker("otf.ligatures", function(v) trace_ligatures = v end)
-local trace_contexts = false registertracker("otf.contexts", function(v) trace_contexts = v end)
-local trace_marks = false registertracker("otf.marks", function(v) trace_marks = v end)
-local trace_kerns = false registertracker("otf.kerns", function(v) trace_kerns = v end)
-local trace_cursive = false registertracker("otf.cursive", function(v) trace_cursive = v end)
-local trace_preparing = false registertracker("otf.preparing", function(v) trace_preparing = v end)
-local trace_bugs = false registertracker("otf.bugs", function(v) trace_bugs = v end)
-local trace_details = false registertracker("otf.details", function(v) trace_details = v end)
-local trace_applied = false registertracker("otf.applied", function(v) trace_applied = v end)
-local trace_steps = false registertracker("otf.steps", function(v) trace_steps = v end)
-local trace_skips = false registertracker("otf.skips", function(v) trace_skips = v end)
-local trace_directions = false registertracker("otf.directions", function(v) trace_directions = v end)
-
-local report_direct = logs.reporter("fonts","otf direct")
-local report_subchain = logs.reporter("fonts","otf subchain")
-local report_chain = logs.reporter("fonts","otf chain")
-local report_process = logs.reporter("fonts","otf process")
-local report_prepare = logs.reporter("fonts","otf prepare")
-local report_warning = logs.reporter("fonts","otf warning")
-local report_run = logs.reporter("fonts","otf run")
-
-registertracker("otf.verbose_chain", function(v) otf.setcontextchain(v and "verbose") end)
-registertracker("otf.normal_chain", function(v) otf.setcontextchain(v and "normal") end)
-
-registertracker("otf.replacements", "otf.singles,otf.multiples,otf.alternatives,otf.ligatures")
-registertracker("otf.positions","otf.marks,otf.kerns,otf.cursive")
-registertracker("otf.actions","otf.replacements,otf.positions")
-registertracker("otf.injections","nodes.injections")
-
-registertracker("*otf.sample","otf.steps,otf.actions,otf.analyzing")
-
-local nuts = nodes.nuts
-local tonode = nuts.tonode
-local tonut = nuts.tonut
-
-local getfield = nuts.getfield
-local setfield = nuts.setfield
-local getnext = nuts.getnext
-local getprev = nuts.getprev
-local getid = nuts.getid
-local getattr = nuts.getattr
-local setattr = nuts.setattr
-local getprop = nuts.getprop
-local setprop = nuts.setprop
-local getfont = nuts.getfont
-local getsubtype = nuts.getsubtype
-local getchar = nuts.getchar
-
-local insert_node_before = nuts.insert_before
-local insert_node_after = nuts.insert_after
-local delete_node = nuts.delete
-local remove_node = nuts.remove
-local copy_node = nuts.copy
-local copy_node_list = nuts.copy_list
-local find_node_tail = nuts.tail
-local flush_node_list = nuts.flush_list
-local free_node = nuts.free
-local end_of_math = nuts.end_of_math
-local traverse_nodes = nuts.traverse
-local traverse_id = nuts.traverse_id
-
-local setmetatableindex = table.setmetatableindex
-
-local zwnj = 0x200C
-local zwj = 0x200D
-local wildcard = "*"
-local default = "dflt"
-
-local nodecodes = nodes.nodecodes
-local whatcodes = nodes.whatcodes
-local glyphcodes = nodes.glyphcodes
-local disccodes = nodes.disccodes
-
-local glyph_code = nodecodes.glyph
-local glue_code = nodecodes.glue
-local disc_code = nodecodes.disc
-local whatsit_code = nodecodes.whatsit
-local math_code = nodecodes.math
-
-local dir_code = whatcodes.dir
-local localpar_code = whatcodes.localpar
-
-local discretionary_code = disccodes.discretionary
-local regular_code = disccodes.regular
-local automatic_code = disccodes.automatic
-
-local ligature_code = glyphcodes.ligature
-
-local privateattribute = attributes.private
-
--- Something is messed up: we have two mark / ligature indices, one at the injection
--- end and one here ... this is based on KE's patches but there is something fishy
--- there as I'm pretty sure that for husayni we need some connection (as it's much
--- more complex than an average font) but I need proper examples of all cases, not
--- of only some.
-
-local a_state = privateattribute('state')
-local a_cursbase = privateattribute('cursbase') -- to be checked, probably can go
-
-local injections = nodes.injections
-local setmark = injections.setmark
-local setcursive = injections.setcursive
-local setkern = injections.setkern
-local setpair = injections.setpair
-local resetinjection = injections.reset
-local copyinjection = injections.copy
-local setligaindex = injections.setligaindex
-local getligaindex = injections.getligaindex
-
-local cursonce = true
-
-local fonthashes = fonts.hashes
-local fontdata = fonthashes.identifiers
-
-local otffeatures = fonts.constructors.newfeatures("otf")
-local registerotffeature = otffeatures.register
-
-local onetimemessage = fonts.loggers.onetimemessage or function() end
-
-otf.defaultnodealternate = "none" -- first last
-
--- we share some vars here, after all, we have no nested lookups and less code
-
-local tfmdata = false
-local characters = false
-local descriptions = false
-local resources = false
-local marks = false
-local currentfont = false
-local lookuptable = false
-local anchorlookups = false
-local lookuptypes = false
-local lookuptags = false
-local handlers = { }
-local rlmode = 0
-local featurevalue = false
-
--- head is always a whatsit so we can safely assume that head is not changed
-
--- we use this for special testing and documentation
-
-local checkstep = (nodes and nodes.tracers and nodes.tracers.steppers.check) or function() end
-local registerstep = (nodes and nodes.tracers and nodes.tracers.steppers.register) or function() end
-local registermessage = (nodes and nodes.tracers and nodes.tracers.steppers.message) or function() end
-
-local function logprocess(...)
- if trace_steps then
- registermessage(...)
- end
- report_direct(...)
-end
-
-local function logwarning(...)
- report_direct(...)
-end
-
-local f_unicode = formatters["%U"]
-local f_uniname = formatters["%U (%s)"]
-local f_unilist = formatters["% t (% t)"]
-
-local function gref(n) -- currently the same as in font-otb
- if type(n) == "number" then
- local description = descriptions[n]
- local name = description and description.name
- if name then
- return f_uniname(n,name)
- else
- return f_unicode(n)
- end
- elseif n then
- local num, nam = { }, { }
- for i=1,#n do
- local ni = n[i]
- if tonumber(ni) then -- later we will start at 2
- local di = descriptions[ni]
- num[i] = f_unicode(ni)
- nam[i] = di and di.name or "-"
- end
- end
- return f_unilist(num,nam)
- else
- return "<error in node mode tracing>"
- end
-end
-
-local function cref(kind,chainname,chainlookupname,lookupname,index) -- not in the mood to alias f_
- if index then
- return formatters["feature %a, chain %a, sub %a, lookup %a, index %a"](kind,chainname,chainlookupname,lookuptags[lookupname],index)
- elseif lookupname then
- return formatters["feature %a, chain %a, sub %a, lookup %a"](kind,chainname,chainlookupname,lookuptags[lookupname])
- elseif chainlookupname then
- return formatters["feature %a, chain %a, sub %a"](kind,lookuptags[chainname],lookuptags[chainlookupname])
- elseif chainname then
- return formatters["feature %a, chain %a"](kind,lookuptags[chainname])
- else
- return formatters["feature %a"](kind)
- end
-end
-
-local function pref(kind,lookupname)
- return formatters["feature %a, lookup %a"](kind,lookuptags[lookupname])
-end
-
--- We can assume that languages that use marks are not hyphenated. We can also assume
--- that at most one discretionary is present.
-
--- We do need components in funny kerning mode but maybe I can better reconstruct then
--- as we do have the font components info available; removing components makes the
--- previous code much simpler. Also, later on copying and freeing becomes easier.
--- However, for arabic we need to keep them around for the sake of mark placement
--- and indices.
-
-local function copy_glyph(g) -- next and prev are untouched !
- local components = getfield(g,"components")
- if components then
- setfield(g,"components",nil)
- local n = copy_node(g)
- copyinjection(n,g) -- we need to preserve the lig indices
- setfield(g,"components",components)
- return n
- else
- local n = copy_node(g)
- copyinjection(n,g) -- we need to preserve the lig indices
- return n
- end
-end
-
---
-
-
--- start is a mark and we need to keep that one
-
-local function markstoligature(kind,lookupname,head,start,stop,char)
- if start == stop and getchar(start) == char then
- return head, start
- else
- local prev = getprev(start)
- local next = getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
- local base = copy_glyph(start)
- if head == start then
- head = base
- end
- resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
- setfield(base,"components",start)
- if prev then
- setfield(prev,"next",base)
- end
- if next then
- setfield(next,"prev",base)
- end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
- return head, base
- end
-end
-
--- The next code is somewhat complicated by the fact that some fonts can have ligatures made
--- from ligatures that themselves have marks. This was identified by Kai in for instance
--- arabtype: KAF LAM SHADDA ALEF FATHA (0x0643 0x0644 0x0651 0x0627 0x064E). This becomes
--- KAF LAM-ALEF with a SHADDA on the first and a FATHA op de second component. In a next
--- iteration this becomes a KAF-LAM-ALEF with a SHADDA on the second and a FATHA on the
--- third component.
-
-local function getcomponentindex(start)
- if getid(start) ~= glyph_code then
- return 0
- elseif getsubtype(start) == ligature_code then
- local i = 0
- local components = getfield(start,"components")
- while components do
- i = i + getcomponentindex(components)
- components = getnext(components)
- end
- return i
- elseif not marks[getchar(start)] then
- return 1
- else
- return 0
- end
-end
-
--- eventually we will do positioning in an other way (needs addional w/h/d fields)
-
-local function toligature(kind,lookupname,head,start,stop,char,markflag,discfound) -- brr head
- if start == stop and getchar(start) == char then
- resetinjection(start)
- setfield(start,"char",char)
- return head, start
- end
- local prev = getprev(start)
- local next = getnext(stop)
- setfield(start,"prev",nil)
- setfield(stop,"next",nil)
- local base = copy_glyph(start)
- if start == head then
- head = base
- end
- resetinjection(base)
- setfield(base,"char",char)
- setfield(base,"subtype",ligature_code)
- setfield(base,"components",start) -- start can have components
- if prev then
- setfield(prev,"next",base)
- end
- if next then
- setfield(next,"prev",base)
- end
- setfield(base,"next",next)
- setfield(base,"prev",prev)
- if not discfound then
- local deletemarks = markflag ~= "mark"
- local components = start
- local baseindex = 0
- local componentindex = 0
- local head = base
- local current = base
- -- first we loop over the glyphs in start .. stop
- while start do
- local char = getchar(start)
- if not marks[char] then
- baseindex = baseindex + componentindex
- componentindex = getcomponentindex(start)
- elseif not deletemarks then -- quite fishy
- setligaindex(start,baseindex + getligaindex(start,componentindex))
- if trace_marks then
- logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),getligaindex(start))
- end
- head, current = insert_node_after(head,current,copy_node(start)) -- unlikely that mark has components
- elseif trace_marks then
- logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char))
- end
- start = getnext(start)
- end
- -- we can have one accent as part of a lookup and another following
- -- local start = components -- was wrong (component scanning was introduced when more complex ligs in devanagari was added)
- local start = getnext(current)
- while start and getid(start) == glyph_code do
- local char = getchar(start)
- if marks[char] then
- setligaindex(start,baseindex + getligaindex(start,componentindex))
- if trace_marks then
- logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),getligaindex(start))
- end
- else
- break
- end
- start = getnext(start)
- end
- end
- return head, base
-end
-
-function handlers.gsub_single(head,start,kind,lookupname,replacement)
- if trace_singles then
- logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(getchar(start)),gref(replacement))
- end
- resetinjection(start)
- setfield(start,"char",replacement)
- return head, start, true
-end
-
-local function get_alternative_glyph(start,alternatives,value,trace_alternatives)
- local n = #alternatives
- if value == "random" then
- local r = random(1,n)
- return alternatives[r], trace_alternatives and formatters["value %a, taking %a"](value,r)
- elseif value == "first" then
- return alternatives[1], trace_alternatives and formatters["value %a, taking %a"](value,1)
- elseif value == "last" then
- return alternatives[n], trace_alternatives and formatters["value %a, taking %a"](value,n)
- else
- value = tonumber(value)
- if type(value) ~= "number" then
- return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
- elseif value > n then
- local defaultalt = otf.defaultnodealternate
- if defaultalt == "first" then
- return alternatives[n], trace_alternatives and formatters["invalid value %s, taking %a"](value,1)
- elseif defaultalt == "last" then
- return alternatives[1], trace_alternatives and formatters["invalid value %s, taking %a"](value,n)
- else
- return false, trace_alternatives and formatters["invalid value %a, %s"](value,"out of range")
- end
- elseif value == 0 then
- return getchar(start), trace_alternatives and formatters["invalid value %a, %s"](value,"no change")
- elseif value < 1 then
- return alternatives[1], trace_alternatives and formatters["invalid value %a, taking %a"](value,1)
- else
- return alternatives[value], trace_alternatives and formatters["value %a, taking %a"](value,value)
- end
- end
-end
-
-local function multiple_glyphs(head,start,multiple,ignoremarks)
- local nofmultiples = #multiple
- if nofmultiples > 0 then
- resetinjection(start)
- setfield(start,"char",multiple[1])
- if nofmultiples > 1 then
- local sn = getnext(start)
- for k=2,nofmultiples do -- todo: use insert_node
--- untested:
---
--- while ignoremarks and marks[getchar(sn)] then
--- local sn = getnext(sn)
--- end
- local n = copy_node(start) -- ignore components
- resetinjection(n)
- setfield(n,"char",multiple[k])
- setfield(n,"next",sn)
- setfield(n,"prev",start)
- if sn then
- setfield(sn,"prev",n)
- end
- setfield(start,"next",n)
- start = n
- end
- end
- return head, start, true
- else
- if trace_multiples then
- logprocess("no multiple for %s",gref(getchar(start)))
- end
- return head, start, false
- end
-end
-
-function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence)
- local value = featurevalue == true and tfmdata.shared.features[kind] or featurevalue
- local choice, comment = get_alternative_glyph(start,alternative,value,trace_alternatives)
- if choice then
- if trace_alternatives then
- logprocess("%s: replacing %s by alternative %a to %s, %s",pref(kind,lookupname),gref(getchar(start)),choice,gref(choice),comment)
- end
- resetinjection(start)
- setfield(start,"char",choice)
- else
- if trace_alternatives then
- logwarning("%s: no variant %a for %s, %s",pref(kind,lookupname),value,gref(getchar(start)),comment)
- end
- end
- return head, start, true
-end
-
-function handlers.gsub_multiple(head,start,kind,lookupname,multiple,sequence)
- if trace_multiples then
- logprocess("%s: replacing %s by multiple %s",pref(kind,lookupname),gref(getchar(start)),gref(multiple))
- end
- return multiple_glyphs(head,start,multiple,sequence.flags[1])
-end
-
-function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
- local s, stop, discfound = getnext(start), nil, false
- local startchar = getchar(start)
- if marks[startchar] then
- while s do
- local id = getid(s)
- if id == glyph_code and getfont(s) == currentfont and getsubtype(s)<256 then
- local lg = ligature[getchar(s)]
- if lg then
- stop = s
- ligature = lg
- s = getnext(s)
- else
- break
- end
- else
- break
- end
- end
- if stop then
- local lig = ligature.ligature
- if lig then
- if trace_ligatures then
- local stopchar = getchar(stop)
- head, start = markstoligature(kind,lookupname,head,start,stop,lig)
- logprocess("%s: replacing %s upto %s by ligature %s case 1",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(getchar(start)))
- else
- head, start = markstoligature(kind,lookupname,head,start,stop,lig)
- end
- return head, start, true
- else
- -- ok, goto next lookup
- end
- end
- else
- local skipmark = sequence.flags[1]
- while s do
- local id = getid(s)
- if id == glyph_code and getsubtype(s)<256 then
- if getfont(s) == currentfont then
- local char = getchar(s)
- if skipmark and marks[char] then
- s = getnext(s)
- else
- local lg = ligature[char]
- if lg then
- stop = s
- ligature = lg
- s = getnext(s)
- else
- break
- end
- end
- else
- break
- end
- elseif id == disc_code then
- discfound = true
- s = getnext(s)
- else
- break
- end
- end
- local lig = ligature.ligature
- if lig then
- if stop then
- if trace_ligatures then
- local stopchar = getchar(stop)
- head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
- logprocess("%s: replacing %s upto %s by ligature %s case 2",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(getchar(start)))
- else
- head, start = toligature(kind,lookupname,head,start,stop,lig,skipmark,discfound)
- end
- else
- -- weird but happens (in some arabic font)
- resetinjection(start)
- setfield(start,"char",lig)
- if trace_ligatures then
- logprocess("%s: replacing %s by (no real) ligature %s case 3",pref(kind,lookupname),gref(startchar),gref(lig))
- end
- end
- return head, start, true
- else
- -- weird but happens
- end
- end
- return head, start, false
-end
-
---[[ldx--
-<p>We get hits on a mark, but we're not sure if the it has to be applied so
-we need to explicitly test for basechar, baselig and basemark entries.</p>
---ldx]]--
-
-function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence)
- local markchar = getchar(start)
- if marks[markchar] then
- local base = getprev(start) -- [glyph] [start=mark]
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- local basechar = getchar(base)
- if marks[basechar] then
- while true do
- base = getprev(base)
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- basechar = getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
- end
- end
- end
- local baseanchors = descriptions[basechar]
- if baseanchors then
- baseanchors = baseanchors.anchors
- end
- if baseanchors then
- local baseanchors = baseanchors['basechar']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
- pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head, start, true
- end
- end
- end
- if trace_bugs then
- logwarning("%s, no matching anchors for mark %s and base %s",pref(kind,lookupname),gref(markchar),gref(basechar))
- end
- end
- elseif trace_bugs then
- -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
- end
- elseif trace_bugs then
- logwarning("%s: prev node is no char",pref(kind,lookupname))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequence)
- -- check chainpos variant
- local markchar = getchar(start)
- if marks[markchar] then
- local base = getprev(start) -- [glyph] [optional marks] [start=mark]
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- local basechar = getchar(base)
- if marks[basechar] then
- while true do
- base = getprev(base)
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- basechar = getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
- end
- end
- end
- local index = getligaindex(start)
- local baseanchors = descriptions[basechar]
- if baseanchors then
- baseanchors = baseanchors.anchors
- if baseanchors then
- local baseanchors = baseanchors['baselig']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor, ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- ba = ba[index]
- if ba then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar]) -- index
- if trace_marks then
- logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
- pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
- end
- return head, start, true
- else
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s with index %a",pref(kind,lookupname),gref(markchar),gref(basechar),index)
- end
- end
- end
- end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s",pref(kind,lookupname),gref(markchar),gref(basechar))
- end
- end
- end
- elseif trace_bugs then
- -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
- end
- elseif trace_bugs then
- logwarning("%s: prev node is no char",pref(kind,lookupname))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence)
- local markchar = getchar(start)
- if marks[markchar] then
- local base = getprev(start) -- [glyph] [basemark] [start=mark]
- local slc = getligaindex(start)
- if slc then -- a rather messy loop ... needs checking with husayni
- while base do
- local blc = getligaindex(base)
- if blc and blc ~= slc then
- base = getprev(base)
- else
- break
- end
- end
- end
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then -- subtype test can go
- local basechar = getchar(base)
- local baseanchors = descriptions[basechar]
- if baseanchors then
- baseanchors = baseanchors.anchors
- if baseanchors then
- baseanchors = baseanchors['basemark']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
- pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head, start, true
- end
- end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and basemark %s",pref(kind,lookupname),gref(markchar),gref(basechar))
- end
- end
- end
- elseif trace_bugs then
- -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(basechar))
- onetimemessage(currentfont,basechar,"no base anchors",report_fonts)
- end
- elseif trace_bugs then
- logwarning("%s: prev node is no mark",pref(kind,lookupname))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence) -- to be checked
- local alreadydone = cursonce and getprop(start,a_cursbase)
- if not alreadydone then
- local done = false
- local startchar = getchar(start)
- if marks[startchar] then
- if trace_cursive then
- logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar))
- end
- else
- local nxt = getnext(start)
- while not done and nxt and getid(nxt) == glyph_code and getfont(nxt) == currentfont and getsubtype(nxt)<256 do
- local nextchar = getchar(nxt)
- if marks[nextchar] then
- -- should not happen (maybe warning)
- nxt = getnext(nxt)
- else
- local entryanchors = descriptions[nextchar]
- if entryanchors then
- entryanchors = entryanchors.anchors
- if entryanchors then
- entryanchors = entryanchors['centry']
- if entryanchors then
- local al = anchorlookups[lookupname]
- for anchor, entry in next, entryanchors do
- if al[anchor] then
- local exit = exitanchors[anchor]
- if exit then
- local dx, dy, bound = setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
- if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
- end
- done = true
- break
- end
- end
- end
- end
- end
- elseif trace_bugs then
- -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar))
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
- end
- break
- end
- end
- end
- return head, start, done
- else
- if trace_cursive and trace_details then
- logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(getchar(start)),alreadydone)
- end
- return head, start, false
- end
-end
-
-function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence)
- local startchar = getchar(start)
- local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
- end
- return head, start, false
-end
-
-function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence)
- -- todo: kerns in disc nodes: pre, post, replace -> loop over disc too
- -- todo: kerns in components of ligatures
- local snext = getnext(start)
- if not snext then
- return head, start, false
- else
- local prev, done = start, false
- local factor = tfmdata.parameters.factor
- local lookuptype = lookuptypes[lookupname]
- while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
- local nextchar = getchar(snext)
- local krn = kerns[nextchar]
- if not krn and marks[nextchar] then
- prev = snext
- snext = getnext(snext)
- else
- if not krn then
- -- skip
- elseif type(krn) == "table" then
- if lookuptype == "pair" then -- probably not needed
- local a, b = krn[2], krn[3]
- if a and #a > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- else -- wrong ... position has different entries
- report_process("%s: check this out (old kern stuff)",pref(kind,lookupname))
- -- local a, b = krn[2], krn[6]
- -- if a and a ~= 0 then
- -- local k = setkern(snext,factor,rlmode,a)
- -- if trace_kerns then
- -- logprocess("%s: inserting first kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
- -- end
- -- end
- -- if b and b ~= 0 then
- -- logwarning("%s: ignoring second kern xoff %s",pref(kind,lookupname),b*factor)
- -- end
- end
- done = true
- elseif krn ~= 0 then
- local k = setkern(snext,factor,rlmode,krn)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",pref(kind,lookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- done = true
- end
- break
- end
- end
- return head, start, done
- end
-end
-
---[[ldx--
-<p>I will implement multiple chain replacements once I run into a font that uses
-it. It's not that complex to handle.</p>
---ldx]]--
-
-local chainmores = { }
-local chainprocs = { }
-
-local function logprocess(...)
- if trace_steps then
- registermessage(...)
- end
- report_subchain(...)
-end
-
-local logwarning = report_subchain
-
-local function logprocess(...)
- if trace_steps then
- registermessage(...)
- end
- report_chain(...)
-end
-
-local logwarning = report_chain
-
--- We could share functions but that would lead to extra function calls with many
--- arguments, redundant tests and confusing messages.
-
-function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname)
- logwarning("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
- return head, start, false
-end
-
-function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n)
- logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
- return head, start, false
-end
-
--- The reversesub is a special case, which is why we need to store the replacements
--- in a bit weird way. There is no lookup and the replacement comes from the lookup
--- itself. It is meant mostly for dealing with Urdu.
-
-function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,lookuphash,replacements)
- local char = getchar(start)
- local replacement = replacements[char]
- if replacement then
- if trace_singles then
- logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement))
- end
- resetinjection(start)
- setfield(start,"char",replacement)
- return head, start, true
- else
- return head, start, false
- end
-end
-
---[[ldx--
-<p>This chain stuff is somewhat tricky since we can have a sequence of actions to be
-applied: single, alternate, multiple or ligature where ligature can be an invalid
-one in the sense that it will replace multiple by one but not neccessary one that
-looks like the combination (i.e. it is the counterpart of multiple then). For
-example, the following is valid:</p>
-
-<typing>
-<line>xxxabcdexxx [single a->A][multiple b->BCD][ligature cde->E] xxxABCDExxx</line>
-</typing>
-
-<p>Therefore we we don't really do the replacement here already unless we have the
-single lookup case. The efficiency of the replacements can be improved by deleting
-as less as needed but that would also make the code even more messy.</p>
---ldx]]--
-
--- local function delete_till_stop(head,start,stop,ignoremarks) -- keeps start
--- local n = 1
--- if start == stop then
--- -- done
--- elseif ignoremarks then
--- repeat -- start x x m x x stop => start m
--- local next = getnext(start)
--- if not marks[getchar(next)] then
--- local components = getfield(next,"components")
--- if components then -- probably not needed
--- flush_node_list(components)
--- end
--- head = delete_node(head,next)
--- end
--- n = n + 1
--- until next == stop
--- else -- start x x x stop => start
--- repeat
--- local next = getnext(start)
--- local components = getfield(next,"components")
--- if components then -- probably not needed
--- flush_node_list(components)
--- end
--- head = delete_node(head,next)
--- n = n + 1
--- until next == stop
--- end
--- return head, n
--- end
-
---[[ldx--
-<p>Here we replace start by a single variant, First we delete the rest of the
-match.</p>
---ldx]]--
-
-function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
- -- todo: marks ?
- local current = start
- local subtables = currentlookup.subtables
- if #subtables > 1 then
- logwarning("todo: check if we need to loop over the replacements: %s",concat(subtables," "))
- end
- while current do
- if getid(current) == glyph_code then
- local currentchar = getchar(current)
- local lookupname = subtables[1] -- only 1
- local replacement = lookuphash[lookupname]
- if not replacement then
- if trace_bugs then
- logwarning("%s: no single hits",cref(kind,chainname,chainlookupname,lookupname,chainindex))
- end
- else
- replacement = replacement[currentchar]
- if not replacement or replacement == "" then
- if trace_bugs then
- logwarning("%s: no single for %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar))
- end
- else
- if trace_singles then
- logprocess("%s: replacing single %s by %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar),gref(replacement))
- end
- resetinjection(current)
- setfield(current,"char",replacement)
- end
- end
- return head, start, true
- elseif current == stop then
- break
- else
- current = getnext(current)
- end
- end
- return head, start, false
-end
-
-chainmores.gsub_single = chainprocs.gsub_single
-
---[[ldx--
-<p>Here we replace start by a sequence of new glyphs. First we delete the rest of
-the match.</p>
---ldx]]--
-
-function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- -- local head, n = delete_till_stop(head,start,stop)
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local replacements = lookuphash[lookupname]
- if not replacements then
- if trace_bugs then
- logwarning("%s: no multiple hits",cref(kind,chainname,chainlookupname,lookupname))
- end
- else
- replacements = replacements[startchar]
- if not replacements or replacement == "" then
- if trace_bugs then
- logwarning("%s: no multiple for %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar))
- end
- else
- if trace_multiples then
- logprocess("%s: replacing %s by multiple characters %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar),gref(replacements))
- end
- return multiple_glyphs(head,start,replacements,currentlookup.flags[1])
- end
- end
- return head, start, false
-end
-
-chainmores.gsub_multiple = chainprocs.gsub_multiple
-
---[[ldx--
-<p>Here we replace start by new glyph. First we delete the rest of the match.</p>
---ldx]]--
-
--- char_1 mark_1 -> char_x mark_1 (ignore marks)
--- char_1 mark_1 -> char_x
-
--- to be checked: do we always have just one glyph?
--- we can also have alternates for marks
--- marks come last anyway
--- are there cases where we need to delete the mark
-
-function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local current = start
- local subtables = currentlookup.subtables
- local value = featurevalue == true and tfmdata.shared.features[kind] or featurevalue
- while current do
- if getid(current) == glyph_code then -- is this check needed?
- local currentchar = getchar(current)
- local lookupname = subtables[1]
- local alternatives = lookuphash[lookupname]
- if not alternatives then
- if trace_bugs then
- logwarning("%s: no alternative hit",cref(kind,chainname,chainlookupname,lookupname))
- end
- else
- alternatives = alternatives[currentchar]
- if alternatives then
- local choice, comment = get_alternative_glyph(current,alternatives,value,trace_alternatives)
- if choice then
- if trace_alternatives then
- logprocess("%s: replacing %s by alternative %a to %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(char),choice,gref(choice),comment)
- end
- resetinjection(start)
- setfield(start,"char",choice)
- else
- if trace_alternatives then
- logwarning("%s: no variant %a for %s, %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(char),comment)
- end
- end
- elseif trace_bugs then
- logwarning("%s: no alternative for %s, %s",cref(kind,chainname,chainlookupname,lookupname),gref(currentchar),comment)
- end
- end
- return head, start, true
- elseif current == stop then
- break
- else
- current = getnext(current)
- end
- end
- return head, start, false
-end
-
-chainmores.gsub_alternate = chainprocs.gsub_alternate
-
---[[ldx--
-<p>When we replace ligatures we use a helper that handles the marks. I might change
-this function (move code inline and handle the marks by a separate function). We
-assume rather stupid ligatures (no complex disc nodes).</p>
---ldx]]--
-
-function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local ligatures = lookuphash[lookupname]
- if not ligatures then
- if trace_bugs then
- logwarning("%s: no ligature hits",cref(kind,chainname,chainlookupname,lookupname,chainindex))
- end
- else
- ligatures = ligatures[startchar]
- if not ligatures then
- if trace_bugs then
- logwarning("%s: no ligatures starting with %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar))
- end
- else
- local s = getnext(start)
- local discfound = false
- local last = stop
- local nofreplacements = 0
- local skipmark = currentlookup.flags[1]
- while s do
- local id = getid(s)
- if id == disc_code then
- s = getnext(s)
- discfound = true
- else
- local schar = getchar(s)
- if skipmark and marks[schar] then -- marks
- s = getnext(s)
- else
- local lg = ligatures[schar]
- if lg then
- ligatures, last, nofreplacements = lg, s, nofreplacements + 1
- if s == stop then
- break
- else
- s = getnext(s)
- end
- else
- break
- end
- end
- end
- end
- local l2 = ligatures.ligature
- if l2 then
- if chainindex then
- stop = last
- end
- if trace_ligatures then
- if start == stop then
- logprocess("%s: replacing character %s by ligature %s case 3",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(l2))
- else
- logprocess("%s: replacing character %s upto %s by ligature %s case 4",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(getchar(stop)),gref(l2))
- end
- end
- head, start = toligature(kind,lookupname,head,start,stop,l2,currentlookup.flags[1],discfound)
- return head, start, true, nofreplacements
- elseif trace_bugs then
- if start == stop then
- logwarning("%s: replacing character %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar))
- else
- logwarning("%s: replacing character %s upto %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar),gref(getchar(stop)))
- end
- end
- end
- end
- return head, start, false, 0
-end
-
-chainmores.gsub_ligature = chainprocs.gsub_ligature
-
-function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local markchar = getchar(start)
- if marks[markchar] then
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local markanchors = lookuphash[lookupname]
- if markanchors then
- markanchors = markanchors[markchar]
- end
- if markanchors then
- local base = getprev(start) -- [glyph] [start=mark]
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- local basechar = getchar(base)
- if marks[basechar] then
- while true do
- base = getprev(base)
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- basechar = getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
- end
- return head, start, false
- end
- end
- end
- local baseanchors = descriptions[basechar].anchors
- if baseanchors then
- local baseanchors = baseanchors['basechar']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head, start, true
- end
- end
- end
- if trace_bugs then
- logwarning("%s, no matching anchors for mark %s and base %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
- end
- end
- end
- elseif trace_bugs then
- logwarning("%s: prev node is no char",cref(kind,chainname,chainlookupname,lookupname))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function chainprocs.gpos_mark2ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local markchar = getchar(start)
- if marks[markchar] then
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local markanchors = lookuphash[lookupname]
- if markanchors then
- markanchors = markanchors[markchar]
- end
- if markanchors then
- local base = getprev(start) -- [glyph] [optional marks] [start=mark]
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- local basechar = getchar(base)
- if marks[basechar] then
- while true do
- base = getprev(base)
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then
- basechar = getchar(base)
- if not marks[basechar] then
- break
- end
- else
- if trace_bugs then
- logwarning("%s: no base for mark %s",cref(kind,chainname,chainlookupname,lookupname),markchar)
- end
- return head, start, false
- end
- end
- end
- -- todo: like marks a ligatures hash
- local index = getligaindex(start)
- local baseanchors = descriptions[basechar].anchors
- if baseanchors then
- local baseanchors = baseanchors['baselig']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- ba = ba[index]
- if ba then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
- end
- return head, start, true
- end
- end
- end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and baselig %s",cref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
- end
- end
- end
- elseif trace_bugs then
- logwarning("feature %s, lookup %s: prev node is no char",kind,lookupname)
- end
- elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local markchar = getchar(start)
- if marks[markchar] then
- -- local markanchors = descriptions[markchar].anchors markanchors = markanchors and markanchors.mark
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local markanchors = lookuphash[lookupname]
- if markanchors then
- markanchors = markanchors[markchar]
- end
- if markanchors then
- local base = getprev(start) -- [glyph] [basemark] [start=mark]
- local slc = getligaindex(start)
- if slc then -- a rather messy loop ... needs checking with husayni
- while base do
- local blc = getligaindex(base)
- if blc and blc ~= slc then
- base = getprev(base)
- else
- break
- end
- end
- end
- if base and getid(base) == glyph_code and getfont(base) == currentfont and getsubtype(base)<256 then -- subtype test can go
- local basechar = getchar(base)
- local baseanchors = descriptions[basechar].anchors
- if baseanchors then
- baseanchors = baseanchors['basemark']
- if baseanchors then
- local al = anchorlookups[lookupname]
- for anchor,ba in next, baseanchors do
- if al[anchor] then
- local ma = markanchors[anchor]
- if ma then
- local dx, dy, bound = setmark(start,base,tfmdata.parameters.factor,rlmode,ba,ma,characters[basechar])
- if trace_marks then
- logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%p,%p)",
- cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
- end
- return head, start, true
- end
- end
- end
- if trace_bugs then
- logwarning("%s: no matching anchors for mark %s and basemark %s",gref(kind,chainname,chainlookupname,lookupname),gref(markchar),gref(basechar))
- end
- end
- end
- elseif trace_bugs then
- logwarning("%s: prev node is no mark",cref(kind,chainname,chainlookupname,lookupname))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s has no anchors",cref(kind,chainname,chainlookupname,lookupname),gref(markchar))
- end
- elseif trace_bugs then
- logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
- end
- return head, start, false
-end
-
-function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
- local alreadydone = cursonce and getprop(start,a_cursbase)
- if not alreadydone then
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local exitanchors = lookuphash[lookupname]
- if exitanchors then
- exitanchors = exitanchors[startchar]
- end
- if exitanchors then
- local done = false
- if marks[startchar] then
- if trace_cursive then
- logprocess("%s: ignoring cursive for mark %s",pref(kind,lookupname),gref(startchar))
- end
- else
- local nxt = getnext(start)
- while not done and nxt and getid(nxt) == glyph_code and getfont(nxt) == currentfont and getsubtype(nxt)<256 do
- local nextchar = getchar(nxt)
- if marks[nextchar] then
- -- should not happen (maybe warning)
- nxt = getnext(nxt)
- else
- local entryanchors = descriptions[nextchar]
- if entryanchors then
- entryanchors = entryanchors.anchors
- if entryanchors then
- entryanchors = entryanchors['centry']
- if entryanchors then
- local al = anchorlookups[lookupname]
- for anchor, entry in next, entryanchors do
- if al[anchor] then
- local exit = exitanchors[anchor]
- if exit then
- local dx, dy, bound = setcursive(start,nxt,tfmdata.parameters.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
- if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%p,%p) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
- end
- done = true
- break
- end
- end
- end
- end
- end
- elseif trace_bugs then
- -- logwarning("%s: char %s is missing in font",pref(kind,lookupname),gref(startchar))
- onetimemessage(currentfont,startchar,"no entry anchors",report_fonts)
- end
- break
- end
- end
- end
- return head, start, done
- else
- if trace_cursive and trace_details then
- logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(getchar(start)),alreadydone)
- end
- return head, start, false
- end
- end
- return head, start, false
-end
-
-function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- -- untested .. needs checking for the new model
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local kerns = lookuphash[lookupname]
- if kerns then
- kerns = kerns[startchar] -- needed ?
- if kerns then
- local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting single %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
- end
- end
- end
- return head, start, false
-end
-
-chainmores.gpos_single = chainprocs.gpos_single -- okay?
-
--- when machines become faster i will make a shared function
-
-function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
- local snext = getnext(start)
- if snext then
- local startchar = getchar(start)
- local subtables = currentlookup.subtables
- local lookupname = subtables[1]
- local kerns = lookuphash[lookupname]
- if kerns then
- kerns = kerns[startchar]
- if kerns then
- local lookuptype = lookuptypes[lookupname]
- local prev, done = start, false
- local factor = tfmdata.parameters.factor
- while snext and getid(snext) == glyph_code and getfont(snext) == currentfont and getsubtype(snext)<256 do
- local nextchar = getchar(snext)
- local krn = kerns[nextchar]
- if not krn and marks[nextchar] then
- prev = snext
- snext = getnext(snext)
- else
- if not krn then
- -- skip
- elseif type(krn) == "table" then
- if lookuptype == "pair" then
- local a, b = krn[2], krn[3]
- if a and #a > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
- if trace_kerns then
- logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- if b and #b > 0 then
- local startchar = getchar(start)
- local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
- if trace_kerns then
- logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
- end
- end
- else
- report_process("%s: check this out (old kern stuff)",cref(kind,chainname,chainlookupname))
- local a, b = krn[2], krn[6]
- if a and a ~= 0 then
- local k = setkern(snext,factor,rlmode,a)
- if trace_kerns then
- logprocess("%s: inserting first kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- end
- if b and b ~= 0 then
- logwarning("%s: ignoring second kern xoff %s",cref(kind,chainname,chainlookupname),b*factor)
- end
- end
- done = true
- elseif krn ~= 0 then
- local k = setkern(snext,factor,rlmode,krn)
- if trace_kerns then
- logprocess("%s: inserting kern %s between %s and %s",cref(kind,chainname,chainlookupname),k,gref(getchar(prev)),gref(nextchar))
- end
- done = true
- end
- break
- end
- end
- return head, start, done
- end
- end
- end
- return head, start, false
-end
-
-chainmores.gpos_pair = chainprocs.gpos_pair -- okay?
-
--- what pointer to return, spec says stop
--- to be discussed ... is bidi changer a space?
--- elseif char == zwnj and sequence[n][32] then -- brrr
-
--- somehow l or f is global
--- we don't need to pass the currentcontext, saves a bit
--- make a slow variant then can be activated but with more tracing
-
-local function show_skip(kind,chainname,char,ck,class)
- if ck[9] then
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a, %a => %a",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
- else
- logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2])
- end
-end
-
-local quit_on_no_replacement = true
-
-directives.register("otf.chain.quitonnoreplacement",function(value) -- maybe per font
- quit_on_no_replacement = value
-end)
-
-local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash)
- -- local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6]
- local flags = sequence.flags
- local done = false
- local skipmark = flags[1]
- local skipligature = flags[2]
- local skipbase = flags[3]
- local someskip = skipmark or skipligature or skipbase -- could be stored in flags for a fast test (hm, flags could be false !)
- local markclass = sequence.markclass -- todo, first we need a proper test
- local skipped = false
- for k=1,#contexts do
- local match = true
- local current = start
- local last = start
- local ck = contexts[k]
- local seq = ck[3]
- local s = #seq
- -- f..l = mid string
- if s == 1 then
- -- never happens
- match = getid(current) == glyph_code and getfont(current) == currentfont and getsubtype(current)<256 and seq[1][getchar(current)]
- else
- -- maybe we need a better space check (maybe check for glue or category or combination)
- -- we cannot optimize for n=2 because there can be disc nodes
- local f, l = ck[4], ck[5]
- -- current match
- if f == 1 and f == l then -- current only
- -- already a hit
- -- match = true
- else -- before/current/after | before/current | current/after
- -- no need to test first hit (to be optimized)
- if f == l then -- new, else last out of sync (f is > 1)
- -- match = true
- else
- local n = f + 1
- last = getnext(last)
- while n <= l do
- if last then
- local id = getid(last)
- if id == glyph_code then
- if getfont(last) == currentfont and getsubtype(last)<256 then
- local char = getchar(last)
- local ccd = descriptions[char]
- if ccd then
- local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
- skipped = true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
- end
- last = getnext(last)
- elseif seq[n][char] then
- if n < l then
- last = getnext(last)
- end
- n = n + 1
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- elseif id == disc_code then
- last = getnext(last)
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- end
- end
- end
- -- before
- if match and f > 1 then
- local prev = getprev(start)
- if prev then
- local n = f-1
- while n >= 1 do
- if prev then
- local id = getid(prev)
- if id == glyph_code then
- if getfont(prev) == currentfont and getsubtype(prev)<256 then -- normal char
- local char = getchar(prev)
- local ccd = descriptions[char]
- if ccd then
- local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
- skipped = true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
- end
- elseif seq[n][char] then
- n = n -1
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- elseif id == disc_code then
- -- skip 'm
- elseif seq[n][32] then
- n = n -1
- else
- match = false
- break
- end
- prev = getprev(prev)
- elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces
- n = n -1
- else
- match = false
- break
- end
- end
- else
- match = false
- end
- end
- -- after
- if match and s > l then
- local current = last and getnext(last)
- if current then
- -- removed optimization for s-l == 1, we have to deal with marks anyway
- local n = l + 1
- while n <= s do
- if current then
- local id = getid(current)
- if id == glyph_code then
- if getfont(current) == currentfont and getsubtype(current)<256 then -- normal char
- local char = getchar(current)
- local ccd = descriptions[char]
- if ccd then
- local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
- skipped = true
- if trace_skips then
- show_skip(kind,chainname,char,ck,class)
- end
- elseif seq[n][char] then
- n = n + 1
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- else
- match = false
- break
- end
- elseif id == disc_code then
- -- skip 'm
- elseif seq[n][32] then -- brrr
- n = n + 1
- else
- match = false
- break
- end
- current = getnext(current)
- elseif seq[n][32] then
- n = n + 1
- else
- match = false
- break
- end
- end
- else
- match = false
- end
- end
- end
- if match then
- -- ck == currentcontext
- if trace_contexts then
- local rule, lookuptype, f, l = ck[1], ck[2], ck[4], ck[5]
- local char = getchar(start)
- if ck[9] then
- logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a, %a => %a",
- cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10])
- else
- logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %a",
- cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype)
- end
- end
- local chainlookups = ck[6]
- if chainlookups then
- local nofchainlookups = #chainlookups
- -- we can speed this up if needed
- if nofchainlookups == 1 then
- local chainlookupname = chainlookups[1]
- local chainlookup = lookuptable[chainlookupname]
- if chainlookup then
- local cp = chainprocs[chainlookup.type]
- if cp then
- local ok
- head, start, ok = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
- if ok then
- done = true
- end
- else
- logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
- end
- else -- shouldn't happen
- logprocess("%s is not yet supported",cref(kind,chainname,chainlookupname))
- end
- else
- local i = 1
- while true do
- if skipped then
- while true do
- local char = getchar(start)
- local ccd = descriptions[char]
- if ccd then
- local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
- start = getnext(start)
- else
- break
- end
- else
- break
- end
- end
- end
- local chainlookupname = chainlookups[i]
- local chainlookup = lookuptable[chainlookupname]
- if not chainlookup then
- -- okay, n matches, < n replacements
- i = i + 1
- else
- local cp = chainmores[chainlookup.type]
- if not cp then
- -- actually an error
- logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
- i = i + 1
- else
- local ok, n
- head, start, ok, n = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
- -- messy since last can be changed !
- if ok then
- done = true
- -- skip next one(s) if ligature
- i = i + (n or 1)
- else
- i = i + 1
- end
- end
- end
- if i > nofchainlookups then
- break
- elseif start then
- start = getnext(start)
- else
- -- weird
- end
- end
- end
- else
- local replacements = ck[7]
- if replacements then
- head, start, done = chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements) -- sequence
- else
- done = quit_on_no_replacement -- can be meant to be skipped / quite inconsistent in fonts
- if trace_contexts then
- logprocess("%s: skipping match",cref(kind,chainname))
- end
- end
- end
- end
- end
- return head, start, done
-end
-
--- Because we want to keep this elsewhere (an because speed is less an issue) we
--- pass the font id so that the verbose variant can access the relevant helper tables.
-
-local verbose_handle_contextchain = function(font,...)
- logwarning("no verbose handler installed, reverting to 'normal'")
- otf.setcontextchain()
- return normal_handle_contextchain(...)
-end
-
-otf.chainhandlers = {
- normal = normal_handle_contextchain,
- verbose = verbose_handle_contextchain,
-}
-
-function otf.setcontextchain(method)
- if not method or method == "normal" or not otf.chainhandlers[method] then
- if handlers.contextchain then -- no need for a message while making the format
- logwarning("installing normal contextchain handler")
- end
- handlers.contextchain = normal_handle_contextchain
- else
- logwarning("installing contextchain handler %a",method)
- local handler = otf.chainhandlers[method]
- handlers.contextchain = function(...)
- return handler(currentfont,...) -- hm, get rid of ...
- end
- end
- handlers.gsub_context = handlers.contextchain
- handlers.gsub_contextchain = handlers.contextchain
- handlers.gsub_reversecontextchain = handlers.contextchain
- handlers.gpos_contextchain = handlers.contextchain
- handlers.gpos_context = handlers.contextchain
-end
-
-otf.setcontextchain()
-
-local missing = { } -- we only report once
-
-local function logprocess(...)
- if trace_steps then
- registermessage(...)
- end
- report_process(...)
-end
-
-local logwarning = report_process
-
-local function report_missing_cache(typ,lookup)
- local f = missing[currentfont] if not f then f = { } missing[currentfont] = f end
- local t = f[typ] if not t then t = { } f[typ] = t end
- if not t[lookup] then
- t[lookup] = true
- logwarning("missing cache for lookup %a, type %a, font %a, name %a",lookup,typ,currentfont,tfmdata.properties.fullname)
- end
-end
-
-local resolved = { } -- we only resolve a font,script,language pair once
-
--- todo: pass all these 'locals' in a table
-
-local lookuphashes = { }
-
-setmetatableindex(lookuphashes, function(t,font)
- local lookuphash = fontdata[font].resources.lookuphash
- if not lookuphash or not next(lookuphash) then
- lookuphash = false
- end
- t[font] = lookuphash
- return lookuphash
-end)
-
--- fonts.hashes.lookups = lookuphashes
-
-local autofeatures = fonts.analyzers.features -- was: constants
-
-local function initialize(sequence,script,language,enabled)
- local features = sequence.features
- if features then
- local order = sequence.order
- if order then
- for i=1,#order do --
- local kind = order[i] --
- local valid = enabled[kind]
- if valid then
- local scripts = features[kind] --
- local languages = scripts[script] or scripts[wildcard]
- if languages and (languages[language] or languages[wildcard]) then
- return { valid, autofeatures[kind] or false, sequence.chain or 0, kind, sequence }
- end
- end
- end
- else
- -- can't happen
- end
- end
- return false
-end
-
-function otf.dataset(tfmdata,font) -- generic variant, overloaded in context
- local shared = tfmdata.shared
- local properties = tfmdata.properties
- local language = properties.language or "dflt"
- local script = properties.script or "dflt"
- local enabled = shared.features
- local res = resolved[font]
- if not res then
- res = { }
- resolved[font] = res
- end
- local rs = res[script]
- if not rs then
- rs = { }
- res[script] = rs
- end
- local rl = rs[language]
- if not rl then
- rl = {
- -- indexed but we can also add specific data by key
- }
- rs[language] = rl
- local sequences = tfmdata.resources.sequences
- for s=1,#sequences do
- local v = enabled and initialize(sequences[s],script,language,enabled)
- if v then
- rl[#rl+1] = v
- end
- end
- end
- return rl
-end
-
--- elseif id == glue_code then
--- if p[5] then -- chain
--- local pc = pp[32]
--- if pc then
--- start, ok = start, false -- p[1](start,kind,p[2],pc,p[3],p[4])
--- if ok then
--- done = true
--- end
--- if start then start = getnext(start) end
--- else
--- start = getnext(start)
--- end
--- else
--- start = getnext(start)
--- end
-
--- there will be a new direction parser (pre-parsed etc)
-
--- less bytecode: 290 -> 254
---
--- attr = attr or false
---
--- local a = getattr(start,0)
--- if (a == attr and (not attribute or getprop(start,a_state) == attribute)) or (not attribute or getprop(start,a_state) == attribute) then
--- -- the action
--- end
-
-local function featuresprocessor(head,font,attr)
-
- local lookuphash = lookuphashes[font] -- we can also check sequences here
-
- if not lookuphash then
- return head, false
- end
-
- head = tonut(head)
-
- if trace_steps then
- checkstep(head)
- end
-
- tfmdata = fontdata[font]
- descriptions = tfmdata.descriptions
- characters = tfmdata.characters
- resources = tfmdata.resources
-
- marks = resources.marks
- anchorlookups = resources.lookup_to_anchor
- lookuptable = resources.lookups
- lookuptypes = resources.lookuptypes
- lookuptags = resources.lookuptags
-
- currentfont = font
- rlmode = 0
-
- local sequences = resources.sequences
- local done = false
- local datasets = otf.dataset(tfmdata,font,attr)
-
- local dirstack = { } -- could move outside function
-
- -- We could work on sub start-stop ranges instead but I wonder if there is that
- -- much speed gain (experiments showed that it made not much sense) and we need
- -- to keep track of directions anyway. Also at some point I want to play with
- -- font interactions and then we do need the full sweeps.
-
- -- Keeping track of the headnode is needed for devanagari (I generalized it a bit
- -- so that multiple cases are also covered.)
-
- -- todo: retain prev
-
- for s=1,#datasets do
- local dataset = datasets[s]
- featurevalue = dataset[1] -- todo: pass to function instead of using a global
-
- local sequence = dataset[5] -- sequences[s] -- also dataset[5]
- local rlparmode = 0
- local topstack = 0
- local success = false
- local attribute = dataset[2]
- local chain = dataset[3] -- sequence.chain or 0
- local typ = sequence.type
- local subtables = sequence.subtables
- if chain < 0 then
- -- this is a limited case, no special treatments like 'init' etc
- local handler = handlers[typ]
- -- we need to get rid of this slide! probably no longer needed in latest luatex
- local start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
- while start do
- local id = getid(start)
- if id == glyph_code then
- if getfont(start) == font and getsubtype(start) < 256 then
- local a = getattr(start,0)
- if a then
- a = a == attr
- else
- a = true
- end
- if a then
- for i=1,#subtables do
- local lookupname = subtables[i]
- local lookupcache = lookuphash[lookupname]
- if lookupcache then
- local lookupmatch = lookupcache[getchar(start)]
- if lookupmatch then
- head, start, success = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if success then
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- if start then start = getprev(start) end
- else
- start = getprev(start)
- end
- else
- start = getprev(start)
- end
- else
- start = getprev(start)
- end
- end
- else
- local handler = handlers[typ]
- local ns = #subtables
- local start = head -- local ?
- rlmode = 0 -- to be checked ?
- if ns == 1 then -- happens often
- local lookupname = subtables[1]
- local lookupcache = lookuphash[lookupname]
- if not lookupcache then -- also check for empty cache
- report_missing_cache(typ,lookupname)
- else
-
- local function subrun(start)
- -- mostly for gsub, gpos would demand a more clever approach
- local head = start
- local done = false
- while start do
- local id = getid(start)
- if id == glyph_code and getfont(start) == font and getsubtype(start) < 256 then
- local a = getattr(start,0)
- if a then
- a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
- else
- a = not attribute or getprop(start,a_state) == attribute
- end
- if a then
- local lookupmatch = lookupcache[getchar(start)]
- if lookupmatch then
- -- sequence kan weg
- local ok
- head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
- if ok then
- done = true
- end
- end
- if start then start = getnext(start) end
- else
- start = getnext(start)
- end
- else
- start = getnext(start)
- end
- end
- if done then
- success = true
- return head
- end
- end
-
- local function kerndisc(disc) -- we can assume that prev and next are glyphs
- local prev = getprev(disc)
- local next = getnext(disc)
- if prev and next then
- setfield(prev,"next",next)
- -- setfield(next,"prev",prev)
- local a = getattr(prev,0)
- if a then
- a = (a == attr) and (not attribute or getprop(prev,a_state) == attribute)
- else
- a = not attribute or getprop(prev,a_state) == attribute
- end
- if a then
- local lookupmatch = lookupcache[getchar(prev)]
- if lookupmatch then
- -- sequence kan weg
- local h, d, ok = handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
- if ok then
- done = true
- success = true
- end
- end
- end
- setfield(prev,"next",disc)
- -- setfield(next,"prev",disc)
- end
- return next
- end
-
- while start do
- local id = getid(start)
- if id == glyph_code then
- if getfont(start) == font and getsubtype(start) < 256 then
- local a = getattr(start,0)
- if a then
- a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
- else
- a = not attribute or getprop(start,a_state) == attribute
- end
- if a then
- local lookupmatch = lookupcache[getchar(start)]
- if lookupmatch then
- -- sequence kan weg
- local ok
- head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
- if ok then
- success = true
- end
- end
- if start then start = getnext(start) end
- else
- start = getnext(start)
- end
- else
- start = getnext(start)
- end
- elseif id == disc_code then
- -- mostly for gsub
- if getsubtype(start) == discretionary_code then
- local pre = getfield(start,"pre")
- if pre then
- local new = subrun(pre)
- if new then setfield(start,"pre",new) end
- end
- local post = getfield(start,"post")
- if post then
- local new = subrun(post)
- if new then setfield(start,"post",new) end
- end
- local replace = getfield(start,"replace")
- if replace then
- local new = subrun(replace)
- if new then setfield(start,"replace",new) end
- end
-elseif typ == "gpos_single" or typ == "gpos_pair" then
- kerndisc(start)
- end
- start = getnext(start)
- elseif id == whatsit_code then -- will be function
- local subtype = getsubtype(start)
- if subtype == dir_code then
- local dir = getfield(start,"dir")
- if dir == "+TRT" or dir == "+TLT" then
- topstack = topstack + 1
- dirstack[topstack] = dir
- elseif dir == "-TRT" or dir == "-TLT" then
- topstack = topstack - 1
- end
- local newdir = dirstack[topstack]
- if newdir == "+TRT" then
- rlmode = -1
- elseif newdir == "+TLT" then
- rlmode = 1
- else
- rlmode = rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype == localpar_code then
- local dir = getfield(start,"dir")
- if dir == "TRT" then
- rlparmode = -1
- elseif dir == "TLT" then
- rlparmode = 1
- else
- rlparmode = 0
- end
- -- one might wonder if the par dir should be looked at, so we might as well drop the next line
- rlmode = rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
- end
- start = getnext(start)
- elseif id == math_code then
- start = getnext(end_of_math(start))
- else
- start = getnext(start)
- end
- end
- end
- else
-
- local function subrun(start)
- -- mostly for gsub, gpos would demand a more clever approach
- local head = start
- local done = false
- while start do
- local id = getid(start)
- if id == glyph_code and getfont(start) == font and getsubtype(start) < 256 then
- local a = getattr(start,0)
- if a then
- a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
- else
- a = not attribute or getprop(start,a_state) == attribute
- end
- if a then
- for i=1,ns do
- local lookupname = subtables[i]
- local lookupcache = lookuphash[lookupname]
- if lookupcache then
- local lookupmatch = lookupcache[getchar(start)]
- if lookupmatch then
- -- we could move all code inline but that makes things even more unreadable
- local ok
- head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if ok then
- done = true
- break
- elseif not start then
- -- don't ask why ... shouldn't happen
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- if start then start = getnext(start) end
- else
- start = getnext(start)
- end
- else
- start = getnext(start)
- end
- end
- if done then
- success = true
- return head
- end
- end
-
- local function kerndisc(disc) -- we can assume that prev and next are glyphs
- local prev = getprev(disc)
- local next = getnext(disc)
- if prev and next then
- setfield(prev,"next",next)
- -- setfield(next,"prev",prev)
- local a = getattr(prev,0)
- if a then
- a = (a == attr) and (not attribute or getprop(prev,a_state) == attribute)
- else
- a = not attribute or getprop(prev,a_state) == attribute
- end
- if a then
- for i=1,ns do
- local lookupname = subtables[i]
- local lookupcache = lookuphash[lookupname]
- if lookupcache then
- local lookupmatch = lookupcache[getchar(prev)]
- if lookupmatch then
- -- we could move all code inline but that makes things even more unreadable
- local h, d, ok = handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if ok then
- done = true
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- end
- setfield(prev,"next",disc)
- -- setfield(next,"prev",disc)
- end
- return next
- end
-
- while start do
- local id = getid(start)
- if id == glyph_code then
- if getfont(start) == font and getsubtype(start) < 256 then
- local a = getattr(start,0)
- if a then
- a = (a == attr) and (not attribute or getprop(start,a_state) == attribute)
- else
- a = not attribute or getprop(start,a_state) == attribute
- end
- if a then
- for i=1,ns do
- local lookupname = subtables[i]
- local lookupcache = lookuphash[lookupname]
- if lookupcache then
- local lookupmatch = lookupcache[getchar(start)]
- if lookupmatch then
- -- we could move all code inline but that makes things even more unreadable
- local ok
- head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
- if ok then
- success = true
- break
- elseif not start then
- -- don't ask why ... shouldn't happen
- break
- end
- end
- else
- report_missing_cache(typ,lookupname)
- end
- end
- if start then start = getnext(start) end
- else
- start = getnext(start)
- end
- else
- start = getnext(start)
- end
- elseif id == disc_code then
- -- mostly for gsub
- if getsubtype(start) == discretionary_code then
- local pre = getfield(start,"pre")
- if pre then
- local new = subrun(pre)
- if new then setfield(start,"pre",new) end
- end
- local post = getfield(start,"post")
- if post then
- local new = subrun(post)
- if new then setfield(start,"post",new) end
- end
- local replace = getfield(start,"replace")
- if replace then
- local new = subrun(replace)
- if new then setfield(start,"replace",new) end
- end
-elseif typ == "gpos_single" or typ == "gpos_pair" then
- kerndisc(start)
- end
- start = getnext(start)
- elseif id == whatsit_code then
- local subtype = getsubtype(start)
- if subtype == dir_code then
- local dir = getfield(start,"dir")
- if dir == "+TRT" or dir == "+TLT" then
- topstack = topstack + 1
- dirstack[topstack] = dir
- elseif dir == "-TRT" or dir == "-TLT" then
- topstack = topstack - 1
- end
- local newdir = dirstack[topstack]
- if newdir == "+TRT" then
- rlmode = -1
- elseif newdir == "+TLT" then
- rlmode = 1
- else
- rlmode = rlparmode
- end
- if trace_directions then
- report_process("directions after txtdir %a: parmode %a, txtmode %a, # stack %a, new dir %a",dir,rlparmode,rlmode,topstack,newdir)
- end
- elseif subtype == localpar_code then
- local dir = getfield(start,"dir")
- if dir == "TRT" then
- rlparmode = -1
- elseif dir == "TLT" then
- rlparmode = 1
- else
- rlparmode = 0
- end
- rlmode = rlparmode
- if trace_directions then
- report_process("directions after pardir %a: parmode %a, txtmode %a",dir,rlparmode,rlmode)
- end
- end
- start = getnext(start)
- elseif id == math_code then
- start = getnext(end_of_math(start))
- else
- start = getnext(start)
- end
- end
- end
- end
- if success then
- done = true
- end
- if trace_steps then -- ?
- registerstep(head)
- end
-
- end
-
- head = tonode(head)
-
- return head, done
-end
-
-local function generic(lookupdata,lookupname,unicode,lookuphash)
- local target = lookuphash[lookupname]
- if target then
- target[unicode] = lookupdata
- else
- lookuphash[lookupname] = { [unicode] = lookupdata }
- end
-end
-
-local action = {
-
- substitution = generic,
- multiple = generic,
- alternate = generic,
- position = generic,
-
- ligature = function(lookupdata,lookupname,unicode,lookuphash)
- local target = lookuphash[lookupname]
- if not target then
- target = { }
- lookuphash[lookupname] = target
- end
- for i=1,#lookupdata do
- local li = lookupdata[i]
- local tu = target[li]
- if not tu then
- tu = { }
- target[li] = tu
- end
- target = tu
- end
- target.ligature = unicode
- end,
-
- pair = function(lookupdata,lookupname,unicode,lookuphash)
- local target = lookuphash[lookupname]
- if not target then
- target = { }
- lookuphash[lookupname] = target
- end
- local others = target[unicode]
- local paired = lookupdata[1]
- if others then
- others[paired] = lookupdata
- else
- others = { [paired] = lookupdata }
- target[unicode] = others
- end
- end,
-
-}
-
-local function prepare_lookups(tfmdata)
-
- local rawdata = tfmdata.shared.rawdata
- local resources = rawdata.resources
- local lookuphash = resources.lookuphash
- local anchor_to_lookup = resources.anchor_to_lookup
- local lookup_to_anchor = resources.lookup_to_anchor
- local lookuptypes = resources.lookuptypes
- local characters = tfmdata.characters
- local descriptions = tfmdata.descriptions
-
- -- we cannot free the entries in the descriptions as sometimes we access
- -- then directly (for instance anchors) ... selectively freeing does save
- -- much memory as it's only a reference to a table and the slot in the
- -- description hash is not freed anyway
-
- for unicode, character in next, characters do -- we cannot loop over descriptions !
-
- local description = descriptions[unicode]
-
- if description then
-
- local lookups = description.slookups
- if lookups then
- for lookupname, lookupdata in next, lookups do
- action[lookuptypes[lookupname]](lookupdata,lookupname,unicode,lookuphash)
- end
- end
-
- local lookups = description.mlookups
- if lookups then
- for lookupname, lookuplist in next, lookups do
- local lookuptype = lookuptypes[lookupname]
- for l=1,#lookuplist do
- local lookupdata = lookuplist[l]
- action[lookuptype](lookupdata,lookupname,unicode,lookuphash)
- end
- end
- end
-
- local list = description.kerns
- if list then
- for lookup, krn in next, list do -- ref to glyph, saves lookup
- local target = lookuphash[lookup]
- if target then
- target[unicode] = krn
- else
- lookuphash[lookup] = { [unicode] = krn }
- end
- end
- end
-
- local list = description.anchors
- if list then
- for typ, anchors in next, list do -- types
- if typ == "mark" or typ == "cexit" then -- or entry?
- for name, anchor in next, anchors do
- local lookups = anchor_to_lookup[name]
- if lookups then
- for lookup, _ in next, lookups do
- local target = lookuphash[lookup]
- if target then
- target[unicode] = anchors
- else
- lookuphash[lookup] = { [unicode] = anchors }
- end
- end
- end
- end
- end
- end
- end
-
- end
-
- end
-
-end
-
-local function split(replacement,original)
- local result = { }
- for i=1,#replacement do
- result[original[i]] = replacement[i]
- end
- return result
-end
-
-local valid = {
- coverage = { chainsub = true, chainpos = true, contextsub = true },
- reversecoverage = { reversesub = true },
- glyphs = { chainsub = true, chainpos = true },
-}
-
-local function prepare_contextchains(tfmdata)
- local rawdata = tfmdata.shared.rawdata
- local resources = rawdata.resources
- local lookuphash = resources.lookuphash
- local lookuptags = resources.lookuptags
- local lookups = rawdata.lookups
- if lookups then
- for lookupname, lookupdata in next, rawdata.lookups do
- local lookuptype = lookupdata.type
- if lookuptype then
- local rules = lookupdata.rules
- if rules then
- local format = lookupdata.format
- local validformat = valid[format]
- if not validformat then
- report_prepare("unsupported format %a",format)
- elseif not validformat[lookuptype] then
- -- todo: dejavu-serif has one (but i need to see what use it has)
- report_prepare("unsupported format %a, lookuptype %a, lookupname %a",format,lookuptype,lookuptags[lookupname])
- else
- local contexts = lookuphash[lookupname]
- if not contexts then
- contexts = { }
- lookuphash[lookupname] = contexts
- end
- local t, nt = { }, 0
- for nofrules=1,#rules do
- local rule = rules[nofrules]
- local current = rule.current
- local before = rule.before
- local after = rule.after
- local replacements = rule.replacements
- local sequence = { }
- local nofsequences = 0
- -- Eventually we can store start, stop and sequence in the cached file
- -- but then less sharing takes place so best not do that without a lot
- -- of profiling so let's forget about it.
- if before then
- for n=1,#before do
- nofsequences = nofsequences + 1
- sequence[nofsequences] = before[n]
- end
- end
- local start = nofsequences + 1
- for n=1,#current do
- nofsequences = nofsequences + 1
- sequence[nofsequences] = current[n]
- end
- local stop = nofsequences
- if after then
- for n=1,#after do
- nofsequences = nofsequences + 1
- sequence[nofsequences] = after[n]
- end
- end
- if sequence[1] then
- -- Replacements only happen with reverse lookups as they are single only. We
- -- could pack them into current (replacement value instead of true) and then
- -- use sequence[start] instead but it's somewhat ugly.
- nt = nt + 1
- t[nt] = { nofrules, lookuptype, sequence, start, stop, rule.lookups, replacements }
- for unic, _ in next, sequence[start] do
- local cu = contexts[unic]
- if not cu then
- contexts[unic] = t
- end
- end
- end
- end
- end
- else
- -- no rules
- end
- else
- report_prepare("missing lookuptype for lookupname %a",lookuptags[lookupname])
- end
- end
- end
-end
-
--- we can consider lookuphash == false (initialized but empty) vs lookuphash == table
-
-local function featuresinitializer(tfmdata,value)
- if true then -- value then
- -- beware we need to use the topmost properties table
- local rawdata = tfmdata.shared.rawdata
- local properties = rawdata.properties
- if not properties.initialized then
- local starttime = trace_preparing and os.clock()
- local resources = rawdata.resources
- resources.lookuphash = resources.lookuphash or { }
- prepare_contextchains(tfmdata)
- prepare_lookups(tfmdata)
- properties.initialized = true
- if trace_preparing then
- report_prepare("preparation time is %0.3f seconds for %a",os.clock()-starttime,tfmdata.properties.fullname)
- end
- end
- end
-end
-
-registerotffeature {
- name = "features",
- description = "features",
- default = true,
- initializers = {
- position = 1,
- node = featuresinitializer,
- },
- processors = {
- node = featuresprocessor,
- }
-}
-
--- This can be used for extra handlers, but should be used with care!
-
-otf.handlers = handlers
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua
index f03d558bfb4..376fd05fbf5 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-syn.lua
@@ -36,15 +36,14 @@ end
local fonts = fonts
fonts.names = fonts.names or { }
-fonts.names.version = 1.001 -- not the same as in context but matches mtx-fonts --simple
-fonts.names.basename = "luatex-fonts-names"
-fonts.names.new_to_old = { }
-fonts.names.old_to_new = { }
-fonts.names.cache = containers.define("fonts","data",fonts.names.version,true)
+fonts.names.version = 1.001 -- not the same as in context but matches mtx-fonts --simple
+fonts.names.basename = "luatex-fonts-names"
+fonts.names.cache = containers.define("fonts","data",fonts.names.version,true)
-local data, loaded = nil, false
+local data = nil
+local loaded = false
-local fileformats = { "lua", "tex", "other text files" }
+local fileformats = { "lua", "tex", "other text files" }
function fonts.names.reportmissingbase()
texio.write("<missing font database, run: mtxrun --script fonts --reload --simple>")
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-tfm.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-tfm.lua
deleted file mode 100644
index b9bb1bd0f28..00000000000
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts-tfm.lua
+++ /dev/null
@@ -1,38 +0,0 @@
-if not modules then modules = { } end modules ['luatex-fonts-tfm'] = {
- version = 1.001,
- comment = "companion to luatex-*.tex",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-if context then
- texio.write_nl("fatal error: this module is not for context")
- os.exit()
-end
-
-local fonts = fonts
-local tfm = { }
-fonts.handlers.tfm = tfm
-fonts.formats.tfm = "type1" -- we need to have at least a value here
-
-function fonts.readers.tfm(specification)
- local fullname = specification.filename or ""
- if fullname == "" then
- local forced = specification.forced or ""
- if forced ~= "" then
- fullname = specification.name .. "." .. forced
- else
- fullname = specification.name
- end
- end
- local foundname = resolvers.findbinfile(fullname, 'tfm') or ""
- if foundname == "" then
- foundname = resolvers.findbinfile(fullname, 'ofm') or ""
- end
- if foundname ~= "" then
- specification.filename = foundname
- specification.format = "ofm"
- return font.read_tfm(specification.filename,specification.size)
- end
-end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua
index c81e8cd1a88..e1ec3764ec3 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-fonts.lua
@@ -6,6 +6,18 @@ if not modules then modules = { } end modules ['luatex-fonts'] = {
license = "see context related readme files"
}
+-- A merged file is generated with:
+--
+-- mtxrun --script package --merge ./luatex-fonts.lua
+--
+-- A needed resource file is made by:
+--
+-- mtxrun --script context luatex-basics-prepare.tex
+--
+-- A font (generic) database is created with:
+--
+-- mtxrun --script font --reload --simple
+
-- The following code isolates the generic context code from already defined or to be defined
-- namespaces. This is the reference loader for plain tex. This generic code is also used in
-- luaotfload which is a low level lualatex opentype font loader but somehow has gotten a bit
@@ -27,16 +39,10 @@ if not modules then modules = { } end modules ['luatex-fonts'] = {
-- also add more helper code here, but that depends to what extend metatex (sidetrack of context)
-- evolves into a low level layer (depends on time, as usual).
-texio.write_nl("")
-texio.write_nl("--------------------------------------------------------------------------------")
-texio.write_nl("The font code has been brought in sync with the context version of 2014.12.21 so")
-texio.write_nl("if things don't work out as expected the interfacing needs to be checked. When")
-texio.write_nl("this works as expected a second upgrade will happen that gives a more complete")
-texio.write_nl("support and another sync with the context code (that new code is currently being")
-texio.write_nl("tested. The base pass is now integrated in the main pass. The results can differ")
-texio.write_nl("from those in context because there we integrate some mechanisms differently.")
-texio.write_nl("--------------------------------------------------------------------------------")
-texio.write_nl("")
+-- The code here is the same as in context version 2015.09.11 but the rendering in context can be
+-- different from generic. This can be a side effect of additional callbacks, additional features
+-- and interferences between mechanisms between macro packages. We use the rendering in context
+-- and luatex-plain as reference for issues.
utf = utf or unicode.utf8
@@ -180,60 +186,91 @@ if non_generic_context.luatex_fonts.skip_loading ~= true then
loadmodule("l-file.lua")
loadmodule("l-boolean.lua")
loadmodule("l-math.lua")
+
+ -- A few slightly higher level support modules:
+
loadmodule("util-str.lua")
+ loadmodule("util-fil.lua")
- -- The following modules contain code that is either not used at all outside context or will fail
- -- when enabled due to lack of other modules.
+ -- The following modules contain code that is either not used at all outside context or will
+ -- fail when enabled due to lack of other modules.
- -- First we load a few helper modules. This is about the miminum needed to let the font modules do
- -- their work. Don't depend on their functions as we might strip them in future versions of his
- -- generic variant.
+ -- First we load a few helper modules. This is about the miminum needed to let the font modules
+ -- do their work. Don't depend on their functions as we might strip them in future versions of
+ -- this generic variant.
loadmodule('luatex-basics-gen.lua')
loadmodule('data-con.lua')
- -- We do need some basic node support. The code in there is not for general use as it might change.
+ -- We do need some basic node support. The code in there is not for general use as it might
+ -- change.
loadmodule('luatex-basics-nod.lua')
- -- Now come the font modules that deal with traditional tex fonts as well as open type fonts. We only
- -- support OpenType fonts here.
- --
- -- The font database file (if used at all) must be put someplace visible for kpse and is not shared
- -- with context. The mtx-fonts script can be used to genate this file (using the --names option).
+ -- We ship a resources needed for font handling (more might end up here).
+
+ loadmodule('luatex-basics-chr.lua')
- -- In 2013/14 I will merge/move some generic files into luatex-fonts-* files (copies) so that
- -- intermediate updates of context don't interfere. We can then also use the general merger and
- -- consider stripping debug code.
+ -- Now come the font modules that deal with traditional tex fonts as well as open type fonts.
+ --
+ -- The font database file (if used at all) must be put someplace visible for kpse and is not
+ -- shared with context. The mtx-fonts script can be used to generate this file (using the
+ -- --reload --force --simple option).
loadmodule('font-ini.lua')
loadmodule('font-con.lua')
loadmodule('luatex-fonts-enc.lua') -- will load font-age on demand
loadmodule('font-cid.lua')
loadmodule('font-map.lua') -- for loading lum file (will be stripped)
- loadmodule('luatex-fonts-syn.lua') -- deals with font names (synonyms)
- -- begin of test
- loadmodule('font-tfm.lua') -- optional
- loadmodule('font-afm.lua') -- optional
- loadmodule('font-afk.lua') -- optional
- -- end of test
- loadmodule('luatex-fonts-tfm.lua')
+
+ -- We use a bit simpler database because using the context one demands loading more helper
+ -- code and although it is more flexible (more wauys to resolve and so) it will never be
+ -- uses in plain/latex anyway, so let's stick to a simple approach.
+
+ loadmodule('luatex-fonts-syn.lua')
+
+ loadmodule('font-tfm.lua')
+ loadmodule('font-afm.lua')
+ loadmodule('font-afk.lua')
loadmodule('font-oti.lua')
- loadmodule('font-otf.lua')
- loadmodule('font-otb.lua')
- loadmodule('luatex-fonts-inj.lua')
- loadmodule('luatex-fonts-ota.lua')
- loadmodule('luatex-fonts-otn.lua')
- loadmodule('font-otp.lua')
- loadmodule('luatex-fonts-lua.lua')
- loadmodule('font-def.lua') -- this code (stripped) might end up in luatex-fonts-def.lua
- loadmodule('luatex-fonts-def.lua')
+
+ -- These are the old loader and processing modules. These use the built-in font loader and
+ -- will stay around (but not be extended), only fixed.
+
+ -- font-otf.lua
+ -- font-otb.lua
+ -- font-inj.lua
+ -- font-ota.lua
+ -- font-otn.lua
+ -- font-otp.lua
+
+ -- Here come the new loader and processing modules. The loader is written in Lua and although
+ -- initial loading is somewhat slower, identifying is faster, cached files can be slightly
+ -- more efficient, and processing is somewhat faster (only measureable on complex fonts).
+
+ loadmodule('font-otr.lua')
+ loadmodule('font-cff.lua')
+ loadmodule('font-ttf.lua')
+ loadmodule('font-dsp.lua')
+ loadmodule('font-oup.lua')
+ loadmodule('font-otl.lua')
+ loadmodule('font-oto.lua')
+ loadmodule('font-otj.lua')
+ loadmodule('font-ota.lua')
+ loadmodule('font-ots.lua')
+ loadmodule('font-osd.lua')
+
+ -- common code
+
+ loadmodule('font-lua.lua')
+ loadmodule('font-def.lua')
+ loadmodule('font-xtx.lua') -- xetex compatible specifiers (plain/latex only)
loadmodule('luatex-fonts-ext.lua') -- some extensions
- -- We need to plug into a callback and the following module implements the handlers. Actual plugging
- -- in happens later.
+ -- We need to plug into a callback and the following module implements the handlers. Actual
+ -- plugging in happens later.
- loadmodule('luatex-fonts-cbk.lua')
+ loadmodule('font-gbn.lua')
end
@@ -245,8 +282,8 @@ end
resolvers.loadmodule = loadmodule
--- In order to deal with the fonts we need to initialize some callbacks. One can overload them later on if
--- needed. First a bit of abstraction.
+-- In order to deal with the fonts we need to initialize some callbacks. One can overload them later
+-- on if needed. First a bit of abstraction.
generic_context.callback_ligaturing = false
generic_context.callback_kerning = false
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua
new file mode 100644
index 00000000000..8c835babb91
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.lua
@@ -0,0 +1,104 @@
+if not modules then modules = { } end modules ['luatex-gadgets'] = {
+ version = 1.001,
+ comment = "companion to luatex-gadgets.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+if context then return end
+
+-- This module contains some maybe useful gadgets. More might show up here
+-- as side effect of tutorials or articles. Don't use this file in ConTeXt
+-- because we often have similar mechanisms already.
+
+gadgets = gadgets or { } -- global namespace
+
+-- marking content for optional removal
+
+local marking = { }
+gadgets.marking = marking
+
+local marksignal = 5001 -- will be set in the tex module
+local lastmarked = 0
+local marked = { }
+local local_par = 6
+local whatsit_node = 8
+
+function marking.setsignal(n)
+ marksignal = tonumber(n) or marksignal
+end
+
+function marking.mark(str)
+ local currentmarked = marked[str]
+ if not currentmarked then
+ lastmarked = lastmarked + 1
+ currentmarked = lastmarked
+ marked[str] = currentmarked
+ end
+ tex.setattribute(marksignal,currentmarked)
+end
+
+function marking.remove(str)
+ local attr = marked[str]
+ if not attr then
+ return
+ end
+ local list = tex.nest[tex.nest.ptr]
+ if list then
+ local head = list.head
+ local tail = list.tail
+ local last = tail
+ if last[marksignal] == attr then
+ local first = last
+ while true do
+ local prev = first.prev
+ if not prev
+ or prev[marksignal] ~= attr
+ or (prev.id == whatsit_node and prev.subtype == local_par) then
+ break
+ else
+ first = prev
+ end
+ end
+ if first == head then
+ list.head = nil
+ list.tail = nil
+ else
+ local prev = first.prev
+ list.tail = prev
+ prev.next = nil
+ end
+ node.flush_list(first)
+ end
+ end
+end
+
+-- local imgscan = img.scan
+--
+-- local valid = {
+-- ["png"] = "^" .. string.char(0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A),
+-- ["jpg"] = "^" .. string.char(0xFF,0xD8,0xFF),
+-- ["jp2"] = "^" .. string.char(0x00,0x00,0x00,0x0C,0x6A,0x50,0x20,0x20,0x0D,0x0A),
+-- ["pdf"] = "^" .. ".-%%PDF",
+-- }
+--
+-- function img.scan(t)
+-- if t and t.filename then
+-- local f = io.open(t.filename,"rb")
+-- if f then
+-- local d = f:read(4096)
+-- for k, v in next,valid do
+-- if string.find(d,v) then
+-- f:close() -- be nice
+-- return imgscan(t)
+-- end
+-- end
+-- f:close() -- be nice
+-- end
+-- end
+-- end
+--
+-- print(img.scan({filename = "hacker1b.tif"}))
+-- print(img.scan({filename = "cow.pdf"}))
+-- print(img.scan({filename = "mill.png"}))
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.tex
new file mode 100644
index 00000000000..0faba7f9766
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-gadgets.tex
@@ -0,0 +1,25 @@
+%D \module
+%D [ file=luatex-gadgets,
+%D version=2015.05.12,
+%D title=\LUATEX\ Support Macros,
+%D subtitle=Useful stuff from articles,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+
+\directlua{dofile(resolvers.findfile('luatex-gadgets.lua'))}
+
+% optional removal of marked content
+%
+% before\marksomething{gone}{\em HERE}\unsomething{gone}after
+% before\marksomething{kept}{\em HERE}\unsomething{gone}after
+% \marksomething{gone}{\em HERE}\unsomething{gone}last
+% \marksomething{kept}{\em HERE}\unsomething{gone}last
+
+\def\setmarksignal #1{\directlua{gadgets.marking.setsignal(\number#1)}}
+\def\marksomething#1#2{{\directlua{gadgets.marking.mark("#1")}{#2}}}
+\def\unsomething #1{\directlua{gadgets.marking.remove("#1")}}
+
+\newattribute\gadgetmarkattribute \setmarksignal\gadgetmarkattribute
+
+\endinput
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.lua
index 1ea8c1fd12a..cecd60c1331 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.lua
@@ -16,28 +16,33 @@ function languages.loadpatterns(tag)
if not loaded[tag] then
loaded[tag] = 0
local filename = kpse.find_file("lang-" .. tag .. ".lua")
- if filename and filename == "" then
- print("<unknown language file for: " .. tag .. ">")
+ if not filename or filename == "" then
+ texio.write("<unknown language file for: " .. tag .. ">")
else
local whatever = loadfile(filename)
if type(whatever) == "function" then
whatever = whatever()
if type(whatever) == "table" then
+ texio.write("<language file: " .. tag .. ">")
local characters = whatever.patterns.characters or ""
local patterns = whatever.patterns.data or ""
local exceptions = whatever.exceptions.data or ""
- local language = lang.new()
for b in string.utfvalues(characters) do
+ -- what about uppercase
+-- lang.sethjcode(b,b)
tex.setlccode(b,b)
end
+ local language = lang.new()
lang.patterns(language, patterns)
lang.hyphenation(language, exceptions)
loaded[tag] = lang.id(language)
else
- print("<invalid language table: " .. tag .. ">")
+ texio.write("<invalid language table: " .. tag .. ">")
+ os.exit()
end
else
- print("<invalid language file: " .. tag .. ">")
+ texio.write("<invalid language file: " .. tag .. ">")
+ os.exit()
end
end
end
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.tex
index 9778da39a44..a087b30939a 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-languages.tex
@@ -8,6 +8,8 @@
%D Cf. discussion on \CONTEXT\ list:
+% \savinghyphcodes1
+
\directlua {
dofile(kpse.find_file("luatex-languages.lua","tex"))
}
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua b/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua
index c6628acb3b8..fd6eb975c84 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.lua
@@ -22,7 +22,9 @@ if metapost and metapost.version then
else
- local format, concat, abs, match = string.format, table.concat, math.abs, string.match
+ local format, match, gsub = string.format, string.match, string.gsub
+ local concat = table.concat
+ local abs = math.abs
local mplib = require ('mplib')
local kpse = require ('kpse')
@@ -144,10 +146,101 @@ else
metapost.make = metapost.make or function()
end
+ local template = [[
+ \pdfoutput=1
+ \pdfpkresolution600
+ \pdfcompresslevel=9
+ %s\relax
+ \hsize=100in
+ \vsize=\hsize
+ \hoffset=-1in
+ \voffset=\hoffset
+ \topskip=0pt
+ \setbox0=\hbox{%s}\relax
+ \pageheight=\ht0
+ \pagewidth=\wd0
+ \box0
+ \bye
+ ]]
+
+ metapost.texrunner = "mtxrun --script plain"
+
+ local texruns = 0 -- per document
+ local texhash = { } -- per document
+
+ function metapost.maketext(mpd,str,what)
+ -- inefficient but one can always use metafun .. it's more a test
+ -- feature
+ local verbatimtex = mpd.verbatimtex
+ if not verbatimtex then
+ verbatimtex = { }
+ mpd.verbatimtex = verbatimtex
+ end
+ if what == 1 then
+ table.insert(verbatimtex,str)
+ else
+ local texcode = format(template,concat(verbatimtex,"\n"),str)
+ local texdone = texhash[texcode]
+ local jobname = tex.jobname
+ if not texdone then
+ texruns = texruns + 1
+ texdone = texruns
+ texhash[texcode] = texdone
+ local texname = format("%s-mplib-%s.tmp",jobname,texdone)
+ local logname = format("%s-mplib-%s.log",jobname,texdone)
+ local pdfname = format("%s-mplib-%s.pdf",jobname,texdone)
+ io.savedata(texname,texcode)
+ os.execute(format("%s %s",metapost.texrunner,texname))
+ os.remove(texname)
+ os.remove(logname)
+ end
+ return format('"image::%s-mplib-%s.pdf" infont defaultfont',jobname,texdone)
+ end
+ end
+
+ local function mpprint(buffer,...)
+ for i=1,select("#",...) do
+ local value = select(i,...)
+ if value ~= nil then
+ local t = type(value)
+ if t == "number" then
+ buffer[#buffer+1] = format("%.16f",value)
+ elseif t == "string" then
+ buffer[#buffer+1] = value
+ elseif t == "table" then
+ buffer[#buffer+1] = "(" .. concat(value,",") .. ")"
+ else -- boolean or whatever
+ buffer[#buffer+1] = tostring(value)
+ end
+ end
+ end
+ end
+
+ function metapost.runscript(mpd,code)
+ local code = loadstring(code)
+ if type(code) == "function" then
+ local buffer = { }
+ function metapost.print(...)
+ mpprint(buffer,...)
+ end
+ code()
+ -- mpd.buffer = buffer -- for tracing
+ return concat(buffer,"")
+ end
+ return ""
+ end
+
function metapost.load(name)
+ local mpd = {
+ buffer = { },
+ verbatim = { }
+ }
local mpx = mplib.new {
ini_version = true,
- find_file = metapost.finder,
+ find_file = metapost.finder,
+ make_text = function(...) return metapost.maketext (mpd,...) end,
+ run_script = function(...) return metapost.runscript(mpd,...) end,
+ extensions = 1,
}
local result
if not mpx then
@@ -217,8 +310,8 @@ else
return figure:objects()
end
- function metapost.convert(result, flusher)
- metapost.flush(result, flusher)
+ function metapost.convert(result,flusher)
+ metapost.flush(result,flusher)
return true -- done
end
@@ -239,8 +332,13 @@ else
end
function pdf_textfigure(font,size,text,width,height,depth)
- text = text:gsub(".","\\hbox{%1}") -- kerning happens in metapost
- tex.sprint(format("\\MPLIBtextext{%s}{%s}{%s}{%s}{%s}",font,size,text,0,-( 7200/ 7227)/65536*depth))
+ local how, what = match(text,"^(.-)::(.+)$")
+ if how == "image" then
+ tex.sprint(format("\\MPLIBpdftext{%s}{%s}",what,depth))
+ else
+ text = gsub(text,".","\\hbox{%1}") -- kerning happens in metapost
+ tex.sprint(format("\\MPLIBtextext{%s}{%s}{%s}{%s}",font,size,text,depth))
+ end
end
local bend_tolerance = 131/65536
@@ -375,8 +473,10 @@ else
pdf_literalcode("Q")
else
local cs = object.color
+ local cr = false
if cs and #cs > 0 then
- pdf_literalcode(metapost.colorconverter(cs))
+ cs, cr = metapost.colorconverter(cs)
+ pdf_literalcode(cs)
end
local ml = object.miterlimit
if ml and ml ~= miterlimit then
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex
index 09dd179f3f3..f9de4b223f4 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-mplib.tex
@@ -106,15 +106,14 @@
%D Text items have a special handler:
-\def\MPLIBtextext#1#2#3#4#5%
+\def\MPLIBtextext#1#2#3#4%
{\begingroup
\setbox\mplibscratchbox\hbox
{\font\temp=#1 at #2bp%
\temp
#3}%
\setbox\mplibscratchbox\hbox
- {\hskip#4 bp%
- \raise#5 bp%
+ {\raise#4sp%
\box\mplibscratchbox}%
\wd\mplibscratchbox0pt%
\ht\mplibscratchbox0pt%
@@ -122,4 +121,20 @@
\box\mplibscratchbox
\endgroup}
+\def\MPLIBpdftext#1#2%
+ {\ifcsname mplib::#1\endcsname
+ % already done, forgotten outside convert group
+ \message{<reusing mplib: #1>}%
+ \else
+ \message{<embedding mplib: #1>}%
+ \immediate\pdfximage{#1}% we cannot remove the file as it is included last
+ \expandafter\edef\csname mplib::#1\endcsname{\the\pdflastximage}%
+ \fi
+ \setbox\mplibscratchbox\hbox
+ {\raise#2sp\hbox{\pdfrefximage\csname mplib::#1\endcsname}}%
+ \wd\mplibscratchbox0pt%
+ \ht\mplibscratchbox0pt%
+ \dp\mplibscratchbox0pt%
+ \box\mplibscratchbox}
+
\endinput
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-pdf.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-pdf.tex
new file mode 100644
index 00000000000..81eb872ab6e
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-pdf.tex
@@ -0,0 +1,199 @@
+% This is a pdftex compatibility file. We could use \ifprimitive instead.
+
+\begingroup
+
+\catcode`\{ = 1 % left brace is begin-group character
+\catcode`\} = 2 % right brace is end-group character
+
+\ifdefined\pdfextension
+
+ % promoted
+
+ \global\let\pdfpagewidth \pagewidth
+ \global\let\pdfpageheight \pageheight
+
+ \global\let\pdfadjustspacing \adjustspacing
+ \global\let\pdfprotrudechars \protrudechars
+ \global\let\pdfnoligatures \ignoreligaturesinfont
+ \global\let\pdffontexpand \expandglyphsinfont
+ \global\let\pdfcopyfont \copyfont
+
+ \global\let\pdfxform \saveboxresource
+ \global\let\pdflastxform \lastsavedboxresourceindex
+ \global\let\pdfrefxform \useboxresource
+
+ \global\let\pdfximage \saveimageresource
+ \global\let\pdflastximage \lastsavedimageresourceindex
+ \global\let\pdflastximagepages\lastsavedimageresourcepages
+ \global\let\pdfrefximage \useimageresource
+
+ \global\let\pdfsavepos \savepos
+ \global\let\pdflastxpos \lastxpos
+ \global\let\pdflastypos \lastypos
+
+ \global\let\pdftexversion \luatexversion
+ \global\let\pdftexrevision \luatexrevision
+ \global\let\pdftexbanner \luatexbanner
+
+ \global\let\pdfoutput \outputmode
+ \global\let\pdfdraftmode \draftmode
+
+ \global\let\pdfpxdimen \pxdimen
+
+ \global\let\pdfinsertht \insertht
+
+ % also promoted
+
+ % \global\let\pdfnormaldeviate \normaldeviate
+ % \global\let\pdfuniformdeviate \uniformdeviate
+ % \global\let\pdfsetrandomseed \setrandomseed
+ % \global\let\pdfrandomseed \randomseed
+ %
+ % \let\pdfprimitive \primitive
+ %
+ % \global\let\expandafter\csname ifpdfabsnum\expandafter\endcsname\csname ifabsnum\endcsname
+ % \global\let\expandafter\csname ifpdfabsdim\expandafter\endcsname\csname ifabsdim\endcsname
+ % \global\let\expandafter\csname ifpdfprimitive\expandafter\endcsname\csname ifprimitive\endcsname
+
+ % removed (also some others but already long ago)
+
+ \ifdefined\newdimen
+ \newdimen\pdfeachlineheight
+ \newdimen\pdfeachlinedepth
+ \newdimen\pdflastlinedepth
+ \newdimen\pdffirstlineheight
+ \newdimen\pdfignoreddimen
+ \fi
+
+ % commands
+
+ \protected\gdef\pdfliteral {\pdfextension literal}
+ \protected\gdef\pdfcolorstack {\pdfextension colorstack}
+ \protected\gdef\pdfsetmatrix {\pdfextension setmatrix}
+ \protected\gdef\pdfsave {\pdfextension save\relax}
+ \protected\gdef\pdfrestore {\pdfextension restore\relax}
+ \protected\gdef\pdfobj {\pdfextension obj }
+ \protected\gdef\pdfrefobj {\pdfextension refobj }
+ \protected\gdef\pdfannot {\pdfextension annot }
+ \protected\gdef\pdfstartlink {\pdfextension startlink }
+ \protected\gdef\pdfendlink {\pdfextension endlink\relax}
+ \protected\gdef\pdfoutline {\pdfextension outline }
+ \protected\gdef\pdfdest {\pdfextension dest }
+ \protected\gdef\pdfthread {\pdfextension thread }
+ \protected\gdef\pdfstartthread {\pdfextension startthread }
+ \protected\gdef\pdfendthread {\pdfextension endthread\relax}
+ \protected\gdef\pdfinfo {\pdfextension info }
+ \protected\gdef\pdfcatalog {\pdfextension catalog }
+ \protected\gdef\pdfnames {\pdfextension names }
+ \protected\gdef\pdfincludechars {\pdfextension includechars }
+ \protected\gdef\pdffontattr {\pdfextension fontattr }
+ \protected\gdef\pdfmapfile {\pdfextension mapfile }
+ \protected\gdef\pdfmapline {\pdfextension mapline }
+ \protected\gdef\pdftrailer {\pdfextension trailer }
+ \protected\gdef\pdfglyphtounicode {\pdfextension glyphtounicode }
+
+ \chardef\pdfnofullbanner = 1
+ \chardef\pdfnofilename = 2
+ \chardef\pdfnopagenumber = 4
+ \chardef\pdfnoinfodict = 8
+ \chardef\pdfnocreator = 16
+ \chardef\pdfnocreationdate = 32
+ \chardef\pdfnomoddate = 64
+ \chardef\pdfnoproducer = 128
+ \chardef\pdfnotrapped = 256
+ \chardef\pdfnoid = 512
+
+ % converted
+
+ \gdef\pdftexversion {\numexpr\pdffeedback version\relax}
+ \gdef\pdftexrevision {\pdffeedback revision}
+ \gdef\pdflastlink {\numexpr\pdffeedback lastlink\relax}
+ \gdef\pdfretval {\numexpr\pdffeedback retval\relax}
+ \gdef\pdflastobj {\numexpr\pdffeedback lastobj\relax}
+ \gdef\pdflastannot {\numexpr\pdffeedback lastannot\relax}
+ \gdef\pdfxformname {\numexpr\pdffeedback xformname\relax}
+ \gdef\pdfcreationdate {\pdffeedback creationdate}
+ \gdef\pdffontname {\numexpr\pdffeedback fontname\relax}
+ \gdef\pdffontobjnum {\numexpr\pdffeedback fontobjnum\relax}
+ \gdef\pdffontsize {\dimexpr\pdffeedback fontsize\relax}
+ \gdef\pdfpageref {\numexpr\pdffeedback pageref\relax}
+ \gdef\pdfcolorstackinit {\pdffeedback colorstackinit}
+
+ % registers
+
+ \xdef\pdfcompresslevel {\pdfvariable compresslevel}
+ \xdef\pdfobjcompresslevel {\pdfvariable objcompresslevel}
+ \xdef\pdfdecimaldigits {\pdfvariable decimaldigits}
+ \xdef\pdfgamma {\pdfvariable gamma}
+ \xdef\pdfimageresolution {\pdfvariable imageresolution}
+ \xdef\pdfimageapplygamma {\pdfvariable imageapplygamma}
+ \xdef\pdfimagegamma {\pdfvariable imagegamma}
+ \xdef\pdfimagehicolor {\pdfvariable imagehicolor}
+ \xdef\pdfimageaddfilename {\pdfvariable imageaddfilename}
+ \xdef\pdfpkresolution {\pdfvariable pkresolution}
+ \xdef\pdfinclusioncopyfonts {\pdfvariable inclusioncopyfonts}
+ \xdef\pdfinclusionerrorlevel {\pdfvariable inclusionerrorlevel}
+ \xdef\pdfgentounicode {\pdfvariable gentounicode}
+ \xdef\pdfpagebox {\pdfvariable pagebox}
+ \xdef\pdfminorversion {\pdfvariable minorversion}
+ \xdef\pdfuniqueresname {\pdfvariable uniqueresname}
+
+ \ifnum\luatexversion>88
+ \edef\pdfpkfixeddpi {\pdfvariable pkfixeddpi}
+ \edef\pdfignoreunknownimages {\pdfvariable ignoreunknownimages}
+ \fi
+
+ \xdef\pdfhorigin {\pdfvariable horigin}
+ \xdef\pdfvorigin {\pdfvariable vorigin}
+ \xdef\pdflinkmargin {\pdfvariable linkmargin}
+ \xdef\pdfdestmargin {\pdfvariable destmargin}
+ \xdef\pdfthreadmargin {\pdfvariable threadmargin}
+ % \xdef\pdfxformmargin {\pdfvariable xformmargin}
+
+ \xdef\pdfpagesattr {\pdfvariable pagesattr}
+ \xdef\pdfpageattr {\pdfvariable pageattr}
+ \xdef\pdfpageresources {\pdfvariable pageresources}
+ \xdef\pdfxformattr {\pdfvariable xformattr}
+ \xdef\pdfxformresources {\pdfvariable xformresources}
+ \xdef\pdfpkmode {\pdfvariable pkmode}
+
+ \xdef\pdfsuppressoptionalinfo {\pdfvariable suppressoptionalinfo }
+ \global\let\pdfsuppressptexinfo \pdfsuppressoptionalinfo
+ \xdef\pdftrailerid {\pdfvariable trailerid }
+ \xdef\pdfinfoomitdate {\pdfvariable suppressoptionalinfo \numexpr32+64\relax}
+
+ % initializations
+
+ \global\pdfcompresslevel 9
+ \global\pdfobjcompresslevel 1
+ \global\pdfdecimaldigits 4
+ \global\pdfgamma 1000
+ \global\pdfimageresolution 71
+ \global\pdfimageapplygamma 0
+ \global\pdfimagegamma 2200
+ \global\pdfimagehicolor 1
+ \global\pdfimageaddfilename 1
+ \global\pdfpkresolution 72
+ \global\pdfinclusioncopyfonts 0
+ \global\pdfinclusionerrorlevel 0
+ \global\pdfgentounicode 0
+ \global\pdfpagebox 0
+ \global\pdfminorversion 4
+ \global\pdfuniqueresname 0
+
+ \global\pdfhorigin 1in
+ \global\pdfvorigin 1in
+ \global\pdflinkmargin 0pt
+ \global\pdfdestmargin 0pt
+ \global\pdfthreadmargin 0pt
+
+ % maybe
+
+ % \global\chardef\pdftexversion 140
+ % \global\def \pdftexrevision {16}
+
+\fi
+
+\endgroup
+
+\endinput
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-plain.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-plain.tex
index c9a9e36cf40..99347ed2ce5 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-plain.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-plain.tex
@@ -11,7 +11,30 @@
\directlua {tex.enableprimitives('', tex.extraprimitives())}
-\pdfoutput=1
+% We assume that pdf is used.
+
+\ifdefined\pdfextension
+ \input luatex-pdf \relax
+\fi
+
+\pdfoutput 1
+
+% We set the page dimensions because otherwise the backend does weird things
+% when we have for instance this on a line of its own:
+%
+% \hbox to 100cm {\hss wide indeed\hss}
+%
+% The page dimension calculation is a fuzzy one as there are some compensations
+% for the \hoffset and \voffset and such. I remember long discussions and much
+% trial and error in figuring this out during pdftex development times. Where
+% a dvi driver will project on a papersize (and thereby clip) the pdf backend
+% has to deal with the lack of a page concept on tex by some guessing. Normally
+% a macro package will set the dimensions to something reasonable anyway.
+
+\pagewidth 8.5in
+\pageheight 11.0in
+
+% We load some code at runtime:
\everyjob \expandafter {%
\the\everyjob
@@ -20,9 +43,11 @@
\input {luatex-math}%
\input {luatex-languages}%
\input {luatex-mplib}%
- % \input {luatex-gadgets}%
+ \input {luatex-gadgets}%
}
+% We also patch the version number:
+
\edef\fmtversion{\fmtversion+luatex}
\dump
diff --git a/Master/texmf-dist/tex/generic/context/luatex/luatex-test.tex b/Master/texmf-dist/tex/generic/context/luatex/luatex-test.tex
index 6f48e0ced7a..0bb752b3f84 100644
--- a/Master/texmf-dist/tex/generic/context/luatex/luatex-test.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex/luatex-test.tex
@@ -1,3 +1,5 @@
+% texformat=luatex-plain
+
%D \module
%D [ file=luatex-test,
%D version=2009.12.01,
@@ -33,12 +35,12 @@
\font\mathtest=cambria(math) {\mathtest 123}
-\font\gothic=msgothic(ms-gothic) {\gothic whatever}
+% \font\gothic=msgothic(ms-gothic) {\gothic whatever} % no longer in windows 10
\bgroup
- \pdfprotrudechars2
- \pdfadjustspacing2
+ \ifdefined\pdfprotrudechars \pdfprotrudechars \else \protrudechars \fi 2 \relax
+ \ifdefined\pdfadjustspacing \pdfadjustspacing \else \adjustspacing \fi 2 \relax
\font\testb=file:lmroman12-regular:+liga;extend=1.5 at 12pt \testb \input tufte \par
\font\testb=file:lmroman12-regular:+liga;slant=0.8 at 12pt \testb \input tufte \par
@@ -48,12 +50,30 @@
\setmplibformat{plain}
+\directlua {
+ function MpTest()
+ metapost.print("fullcircle scaled 3cm")
+ end
+}
+
\mplibcode
beginfig(1) ;
draw fullcircle
scaled 10cm
withcolor red
withpen pencircle xscaled 4mm yscaled 2mm rotated 30 ;
+ draw "test" infont defaultfont scaled 4 ;
+ verbatimtex \sl etex;
+ draw btex some more test etex scaled 2 ;
+ currentpicture := currentpicture shifted (0,1cm) ;
+ verbatimtex \bf etex;
+ draw btex another test etex scaled 2 ;
+ currentpicture := currentpicture shifted (0,1cm) ;
+ draw btex another test etex scaled 2 ;
+ draw
+ runscript("MpTest()")
+ withcolor green
+ withpen pencircle xscaled 2mm yscaled 1mm rotated 20 ;
endfig ;
\endmplibcode
@@ -111,4 +131,31 @@ $\root3\of x$
$\sin{x}$
+\bgroup
+
+ % drawback: no features (so use basemode)
+
+ \font\crapa=lmroman12-regular:mode=base;liga=yes;kern=yes; at 12pt
+ \font\crapb=lmsans12-regular:mode=base;liga=yes;kern=yes; at 30pt
+ %\font\mine=file:luatex-fonts-demo-vf-4.lua:1=lmroman12-regular;2=lmsans12-regular{0x41-0x5A+0x30-0x39+0x21}; at 12pt
+ \font\mine=file:luatex-fonts-demo-vf-4.lua:1=\fontid\crapa;2=\fontid\crapb{0x41-0x5A+0x30-0x39+0x21}; at 12pt
+
+ \crapa Test\par
+ \crapb Test\par
+
+ \mine Zomaar een eindje fiets! En dan weer terug.
+
+\egroup
+
+% \font\amiri=file:amiri-regular.ttf:%
+% mode=node;analyze=yes;language=dflt;script=arab;ccmp=yes;%
+% init=yes;medi=yes;fina=yes;isol=yes;%
+% mark=yes;mkmk=yes;kern=yes;curs=yes;%
+% liga=yes;dlig=yes;rlig=yes;clig=yes;calt=yes %
+% at 32pt
+
+% \bgroup
+% \textdir TRT\amiri بِسْمِ اللَّـهِ الرَّ‌حْمَـٰنِ الرَّ‌حِيمِ
+% \egroup
+
\end
diff --git a/Master/texmf-dist/tex/latex/context/ppchtex/m-pictex.sty b/Master/texmf-dist/tex/latex/context/ppchtex/m-pictex.sty
index 18630f2ccbb..a967b362deb 100644
--- a/Master/texmf-dist/tex/latex/context/ppchtex/m-pictex.sty
+++ b/Master/texmf-dist/tex/latex/context/ppchtex/m-pictex.sty
@@ -1,5 +1,5 @@
\ProvidesPackage{m-pictex}[2004/07/30 package wrapper for m-pictex.tex]
-\input{m-pictex.tex}
+\input{m-pictex.mkii}
-\endinput \ No newline at end of file
+\endinput
diff --git a/Master/tlpkg/bin/tlpkginfo b/Master/tlpkg/bin/tlpkginfo
index 26e429d4ddf..0918638efcf 100755
--- a/Master/tlpkg/bin/tlpkginfo
+++ b/Master/tlpkg/bin/tlpkginfo
@@ -369,7 +369,7 @@ sub prepare {
# ...and except for context, and plenty more...
# We really need to get the install path out of the Catalogue entry.
} elsif ($pkg eq "context") {
- $tds_path = "/home/ftp/mirror/www.pragma-ade.com/context/current/cont-tmf.zip";
+ $tds_path = "/home/ftp/mirror/www.pragma-ade.com/context/beta/cont-tmf.zip";
} elsif ($pkg eq "enctex") {
# not tds, but we eliminate the TDS_READY below
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 594e0dcfade..e6f39f8570a 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -194,6 +194,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`);
'bsheaders', "die 'skipping, license unstated, ca.2005, await request'",
'burmese', "&MAKEflatten",
'business-research', "die 'skipping, w32 fonts required'",
+ 'byzantinemusic', "die 'skipping, includes non-relocating jar'",
'c90', "&MAKEc90",
'cachepic', "&MAKEcopy",
'calxxxx', "die 'skipping, nomodify license'",
diff --git a/Master/tlpkg/tlpsrc/context.tlpsrc b/Master/tlpkg/tlpsrc/context.tlpsrc
index 9b1d4c876e1..a175945470e 100644
--- a/Master/tlpkg/tlpsrc/context.tlpsrc
+++ b/Master/tlpkg/tlpsrc/context.tlpsrc
@@ -72,3 +72,4 @@ binpattern f bin/${ARCH}/mtxrunjit
binpattern f bin/${ARCH}/texexec
binpattern f bin/${ARCH}/texmfstart
binpattern f/win32 bin/win32/mtxrun.lua
+binpattern f/win32 bin/win32/contextjit.exe